From 9ae3a8780d230249dddc894203b2b8b2f715aa11 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 02 2019 20:30:44 +0000 Subject: import qemu-kvm-1.5.3-170.el7 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39dc421 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +SOURCES/bios-256k.bin +SOURCES/qemu-1.5.3.tar.bz2 +SOURCES/rhel6-e1000.rom +SOURCES/rhel6-ne2k_pci.rom +SOURCES/rhel6-pcnet.rom +SOURCES/rhel6-rtl8139.rom +SOURCES/rhel6-virtio.rom +SOURCES/sample_images.tar diff --git a/.qemu-kvm.metadata b/.qemu-kvm.metadata new file mode 100644 index 0000000..791976e --- /dev/null +++ b/.qemu-kvm.metadata @@ -0,0 +1,8 @@ +9d4dcfdd25605fed27e625620e78a6a83eadd04c SOURCES/bios-256k.bin +e5a40bb63de8445a465c507ce27e736cff35ec12 SOURCES/qemu-1.5.3.tar.bz2 +a07ce6c2f11c692f70c80cea3345aefd20be8a7b SOURCES/rhel6-e1000.rom +faac4c56f0ef593721edc66af965bac63760965b SOURCES/rhel6-ne2k_pci.rom +f5ddbc9701698bc4adc5e98c63ad438c3b8e8510 SOURCES/rhel6-pcnet.rom +ca79836ccce0ffbf25aac4687a3aa64bf281a3c1 SOURCES/rhel6-rtl8139.rom +82eda3fb78a792745e46bcbbea8290cc444ae6bf SOURCES/rhel6-virtio.rom +598e252c89da31924fbd9a6734fd15e4e97b67d8 SOURCES/sample_images.tar diff --git a/SOURCES/0000-libcacard-fix-missing-symbols-in-libcacard.so.patch b/SOURCES/0000-libcacard-fix-missing-symbols-in-libcacard.so.patch new file mode 100644 index 0000000..69f1ec6 --- /dev/null +++ b/SOURCES/0000-libcacard-fix-missing-symbols-in-libcacard.so.patch @@ -0,0 +1,22 @@ +From 9cb057a4d615ea4773066eac44fe8e88414fac4b Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Mon, 4 Mar 2013 09:43:01 +0100 +Subject: libcacard: fix missing symbols in libcacard.so + +Message-Id: <94afb78477a5b078449e5d48b38e74aac3fa5ac4.1354903384.git.crobinso@redhat.com> + +Signed-off-by: Alon Levy + +diff --git a/libcacard/Makefile b/libcacard/Makefile +index 47827a0..6bdf0c4 100644 +--- a/libcacard/Makefile ++++ b/libcacard/Makefile +@@ -4,7 +4,7 @@ TOOLS += vscclient$(EXESUF) + + # objects linked into a shared library, built with libtool with -fPIC if required + libcacard-obj-y = $(stub-obj-y) $(libcacard-y) +-libcacard-obj-y += util/osdep.o util/cutils.o util/qemu-timer-common.o util/error.o ++libcacard-obj-y += util/osdep.o util/iov.o util/cutils.o util/qemu-timer-common.o util/error.o util/hexdump.o + libcacard-obj-$(CONFIG_WIN32) += util/oslib-win32.o util/qemu-thread-win32.o + libcacard-obj-$(CONFIG_POSIX) += util/oslib-posix.o util/qemu-thread-posix.o + libcacard-obj-y += $(filter trace/%, $(util-obj-y)) diff --git a/SOURCES/80-kvm.rules b/SOURCES/80-kvm.rules new file mode 100644 index 0000000..e61b48f --- /dev/null +++ b/SOURCES/80-kvm.rules @@ -0,0 +1 @@ +KERNEL=="kvm", GROUP="kvm", MODE="0666" diff --git a/SOURCES/99-qemu-guest-agent.rules b/SOURCES/99-qemu-guest-agent.rules new file mode 100644 index 0000000..8a290ab --- /dev/null +++ b/SOURCES/99-qemu-guest-agent.rules @@ -0,0 +1,2 @@ +SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \ + TAG+="systemd" ENV{SYSTEMD_WANTS}="qemu-guest-agent.service" diff --git a/SOURCES/README.rhel6-gpxe-source b/SOURCES/README.rhel6-gpxe-source new file mode 100644 index 0000000..bff3160 --- /dev/null +++ b/SOURCES/README.rhel6-gpxe-source @@ -0,0 +1,9 @@ +The ROM images on /usr/share/qemu-kvm/rhel6-*.rom come from the +Red Hat Enterprise Linux 6.4 package gpxe-roms-qemu-0.9.7-6.9.el6.noarch.rpm. + +The source code for those images can be downloaded from: +http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/gpxe-0.9.7-6.9.el6.src.rpm + +For more information on how to obtain source code for Red Hat Enterprise Linux +software, you can refer to Chapter 1. Obtaining Red Hat Enterprise Linux of the +Red Hat Enterprise Linux Installation Guide. diff --git a/SOURCES/block-add-block-driver-read-only-whitelist.patch b/SOURCES/block-add-block-driver-read-only-whitelist.patch new file mode 100644 index 0000000..12ea638 --- /dev/null +++ b/SOURCES/block-add-block-driver-read-only-whitelist.patch @@ -0,0 +1,284 @@ +From e04d52892c7fcd0e2ec70f77f3e5b934d45918c8 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 09:56:17 +0200 +Subject: block: add block driver read only whitelist + +Message-id: <6873f36f1d3c26ad7b84bf2150c0a98afd6c5e72.1375208619.git.mrezanin@redhat.com> +Patchwork-id: 52827 +O-Subject: [RHEL7 qemu-kvm PATCH 4.5/5] block: add block driver read only whitelist +Bugzilla: 836675 +RH-Acked-by: Fam Zheng +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +From: Fam Zheng + +This is missing patch required for "VMDK Backports and Spec Update" serie. + +We may want to include a driver in the whitelist for read only tasks +such as diagnosing or exporting guest data (with libguestfs as a good +example). This patch introduces a readonly whitelist option, and for +backward compatibility, the old configure option --block-drv-whitelist +is now an alias to rw whitelist. + +Drivers in readonly list is only permitted to open file readonly, and +returns -ENOTSUP for RW opening. + +E.g. To include vmdk readonly, and others read+write: + ./configure --target-list=x86_64-softmmu \ + --block-drv-rw-whitelist=qcow2,raw,file,qed \ + --block-drv-ro-whitelist=vmdk + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit b64ec4e4ade581d662753cdeb0d7e0e27aafbf81) + +Signed-off-by: Miroslav Rezanina + +diff --git a/block.c b/block.c +index 3f87489..65c0b60 100644 +--- a/block.c ++++ b/block.c +@@ -328,28 +328,40 @@ BlockDriver *bdrv_find_format(const char *format_name) + return NULL; + } + +-static int bdrv_is_whitelisted(BlockDriver *drv) ++static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only) + { +- static const char *whitelist[] = { +- CONFIG_BDRV_WHITELIST ++ static const char *whitelist_rw[] = { ++ CONFIG_BDRV_RW_WHITELIST ++ }; ++ static const char *whitelist_ro[] = { ++ CONFIG_BDRV_RO_WHITELIST + }; + const char **p; + +- if (!whitelist[0]) ++ if (!whitelist_rw[0] && !whitelist_ro[0]) { + return 1; /* no whitelist, anything goes */ ++ } + +- for (p = whitelist; *p; p++) { ++ for (p = whitelist_rw; *p; p++) { + if (!strcmp(drv->format_name, *p)) { + return 1; + } + } ++ if (read_only) { ++ for (p = whitelist_ro; *p; p++) { ++ if (!strcmp(drv->format_name, *p)) { ++ return 1; ++ } ++ } ++ } + return 0; + } + +-BlockDriver *bdrv_find_whitelisted_format(const char *format_name) ++BlockDriver *bdrv_find_whitelisted_format(const char *format_name, ++ bool read_only) + { + BlockDriver *drv = bdrv_find_format(format_name); +- return drv && bdrv_is_whitelisted(drv) ? drv : NULL; ++ return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL; + } + + typedef struct CreateCo { +@@ -684,10 +696,6 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + + trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name); + +- if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv)) { +- return -ENOTSUP; +- } +- + /* bdrv_open() with directly using a protocol as drv. This layer is already + * opened, so assign it to bs (while file becomes a closed BlockDriverState) + * and return immediately. */ +@@ -698,9 +706,15 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + + bs->open_flags = flags; + bs->buffer_alignment = 512; ++ open_flags = bdrv_open_flags(bs, flags); ++ bs->read_only = !(open_flags & BDRV_O_RDWR); ++ ++ if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) { ++ return -ENOTSUP; ++ } + + assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */ +- if ((flags & BDRV_O_RDWR) && (flags & BDRV_O_COPY_ON_READ)) { ++ if (!bs->read_only && (flags & BDRV_O_COPY_ON_READ)) { + bdrv_enable_copy_on_read(bs); + } + +@@ -714,9 +728,6 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + bs->opaque = g_malloc0(drv->instance_size); + + bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB); +- open_flags = bdrv_open_flags(bs, flags); +- +- bs->read_only = !(open_flags & BDRV_O_RDWR); + + /* Open the image, either directly or using a protocol */ + if (drv->bdrv_file_open) { +@@ -801,7 +812,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + /* Find the right block driver */ + drvname = qdict_get_try_str(options, "driver"); + if (drvname) { +- drv = bdrv_find_whitelisted_format(drvname); ++ drv = bdrv_find_whitelisted_format(drvname, !(flags & BDRV_O_RDWR)); + qdict_del(options, "driver"); + } else if (filename) { + drv = bdrv_find_protocol(filename); +diff --git a/blockdev.c b/blockdev.c +index 625d041..6500c47 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -477,7 +477,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + error_printf("\n"); + return NULL; + } +- drv = bdrv_find_whitelisted_format(buf); ++ drv = bdrv_find_whitelisted_format(buf, ro); + if (!drv) { + error_report("'%s' invalid format", buf); + return NULL; +@@ -1024,7 +1024,7 @@ void qmp_change_blockdev(const char *device, const char *filename, + } + + if (format) { +- drv = bdrv_find_whitelisted_format(format); ++ drv = bdrv_find_whitelisted_format(format, bs->read_only); + if (!drv) { + error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); + return; +diff --git a/configure b/configure +index eb74510..a71e8a1 100755 +--- a/configure ++++ b/configure +@@ -123,7 +123,8 @@ interp_prefix="/usr/gnemul/qemu-%M" + static="no" + cross_prefix="" + audio_drv_list="" +-block_drv_whitelist="" ++block_drv_rw_whitelist="" ++block_drv_ro_whitelist="" + host_cc="cc" + libs_softmmu="" + libs_tools="" +@@ -708,7 +709,9 @@ for opt do + ;; + --audio-drv-list=*) audio_drv_list="$optarg" + ;; +- --block-drv-whitelist=*) block_drv_whitelist=`echo "$optarg" | sed -e 's/,/ /g'` ++ --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'` ++ ;; ++ --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'` + ;; + --enable-debug-tcg) debug_tcg="yes" + ;; +@@ -1105,7 +1108,12 @@ echo " --disable-cocoa disable Cocoa (Mac OS X only)" + echo " --enable-cocoa enable Cocoa (default on Mac OS X)" + echo " --audio-drv-list=LIST set audio drivers list:" + echo " Available drivers: $audio_possible_drivers" +-echo " --block-drv-whitelist=L set block driver whitelist" ++echo " --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L" ++echo " --block-drv-rw-whitelist=L" ++echo " set block driver read-write whitelist" ++echo " (affects only QEMU, not qemu-img)" ++echo " --block-drv-ro-whitelist=L" ++echo " set block driver read-only whitelist" + echo " (affects only QEMU, not qemu-img)" + echo " --enable-mixemu enable mixer emulation" + echo " --disable-xen disable xen backend driver support" +@@ -3525,7 +3533,8 @@ echo "curses support $curses" + echo "curl support $curl" + echo "mingw32 support $mingw32" + echo "Audio drivers $audio_drv_list" +-echo "Block whitelist $block_drv_whitelist" ++echo "Block whitelist (rw) $block_drv_rw_whitelist" ++echo "Block whitelist (ro) $block_drv_ro_whitelist" + echo "Mixer emulation $mixemu" + echo "VirtFS support $virtfs" + echo "VNC support $vnc" +@@ -3704,7 +3713,8 @@ fi + if test "$audio_win_int" = "yes" ; then + echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak + fi +-echo "CONFIG_BDRV_WHITELIST=$block_drv_whitelist" >> $config_host_mak ++echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak ++echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak + if test "$mixemu" = "yes" ; then + echo "CONFIG_MIXEMU=y" >> $config_host_mak + fi +diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c +index 0ac65d4..247f32f 100644 +--- a/hw/block/xen_disk.c ++++ b/hw/block/xen_disk.c +@@ -780,11 +780,13 @@ static int blk_connect(struct XenDevice *xendev) + { + struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); + int pers, index, qflags; ++ bool readonly = true; + + /* read-only ? */ + qflags = BDRV_O_CACHE_WB | BDRV_O_NATIVE_AIO; + if (strcmp(blkdev->mode, "w") == 0) { + qflags |= BDRV_O_RDWR; ++ readonly = false; + } + + /* init qemu block driver */ +@@ -795,8 +797,10 @@ static int blk_connect(struct XenDevice *xendev) + xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n"); + blkdev->bs = bdrv_new(blkdev->dev); + if (blkdev->bs) { +- if (bdrv_open(blkdev->bs, blkdev->filename, NULL, qflags, +- bdrv_find_whitelisted_format(blkdev->fileproto)) != 0) { ++ BlockDriver *drv = bdrv_find_whitelisted_format(blkdev->fileproto, ++ readonly); ++ if (bdrv_open(blkdev->bs, ++ blkdev->filename, NULL, qflags, drv) != 0) { + bdrv_delete(blkdev->bs); + blkdev->bs = NULL; + } +diff --git a/include/block/block.h b/include/block/block.h +index 1251c5c..5604418 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -124,7 +124,8 @@ void bdrv_init(void); + void bdrv_init_with_whitelist(void); + BlockDriver *bdrv_find_protocol(const char *filename); + BlockDriver *bdrv_find_format(const char *format_name); +-BlockDriver *bdrv_find_whitelisted_format(const char *format_name); ++BlockDriver *bdrv_find_whitelisted_format(const char *format_name, ++ bool readonly); + int bdrv_create(BlockDriver *drv, const char* filename, + QEMUOptionParameter *options); + int bdrv_create_file(const char* filename, QEMUOptionParameter *options); +diff --git a/scripts/create_config b/scripts/create_config +index c471e8c..258513a 100755 +--- a/scripts/create_config ++++ b/scripts/create_config +@@ -34,8 +34,15 @@ case $line in + done + echo "" + ;; +- CONFIG_BDRV_WHITELIST=*) +- echo "#define CONFIG_BDRV_WHITELIST \\" ++ CONFIG_BDRV_RW_WHITELIST=*) ++ echo "#define CONFIG_BDRV_RW_WHITELIST\\" ++ for drv in ${line#*=}; do ++ echo " \"${drv}\",\\" ++ done ++ echo " NULL" ++ ;; ++ CONFIG_BDRV_RO_WHITELIST=*) ++ echo "#define CONFIG_BDRV_RO_WHITELIST\\" + for drv in ${line#*=}; do + echo " \"${drv}\",\\" + done diff --git a/SOURCES/bridge.conf b/SOURCES/bridge.conf new file mode 100644 index 0000000..a573665 --- /dev/null +++ b/SOURCES/bridge.conf @@ -0,0 +1 @@ +allow virbr0 diff --git a/SOURCES/change-path-from-qemu-to-qemu-kvm.patch b/SOURCES/change-path-from-qemu-to-qemu-kvm.patch new file mode 100644 index 0000000..0c39da2 --- /dev/null +++ b/SOURCES/change-path-from-qemu-to-qemu-kvm.patch @@ -0,0 +1,35 @@ +From 27267616896168fe1177c42a73246a8a9c551be3 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 11 Apr 2013 11:07:31 +0200 +Subject: Change qemu to qemu-kvm + +We use qemu-kvm as name for RHEL 7. This patch fixes various pathes and files that uses qemu so they use qemu-kvm instead. + +Signed-off-by: Miroslav Rezanina + +diff --git a/os-posix.c b/os-posix.c +index d39261d..3a4678a 100644 +--- a/os-posix.c ++++ b/os-posix.c +@@ -82,7 +82,7 @@ void os_setup_signal_handling(void) + /* Find a likely location for support files using the location of the binary. + For installed binaries this will be "$bindir/../share/qemu". When + running from the build tree this will be "$bindir/../pc-bios". */ +-#define SHARE_SUFFIX "/share/qemu" ++#define SHARE_SUFFIX "/share/qemu-kvm" + #define BUILD_SUFFIX "/pc-bios" + char *os_find_datadir(const char *argv0) + { +diff --git a/ui/vnc.c b/ui/vnc.c +index dfc7459..3726352 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -3260,7 +3260,7 @@ void vnc_display_open(DisplayState *ds, const char *display, Error **errp) + } + + #ifdef CONFIG_VNC_SASL +- if ((saslErr = sasl_server_init(NULL, "qemu")) != SASL_OK) { ++ if ((saslErr = sasl_server_init(NULL, "qemu-kvm")) != SASL_OK) { + error_setg(errp, "Failed to initialize SASL auth: %s", + sasl_errstring(saslErr, NULL, NULL)); + goto fail; diff --git a/SOURCES/disable-hpet-device.patch b/SOURCES/disable-hpet-device.patch new file mode 100644 index 0000000..87a79bb --- /dev/null +++ b/SOURCES/disable-hpet-device.patch @@ -0,0 +1,35 @@ +From 94ee0c3faaaf6a225f605e00ff623ba9792cedfc Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 22 May 2013 12:23:00 +0200 +Subject: Disable HPET device + +Bugzilla: 947441 + +We do not support HPET, disabling it. + +Signed-off-by: Miroslav Rezanina + +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index fb6caaf..cf6ee9f 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -21,7 +21,6 @@ CONFIG_I8257=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y + CONFIG_PIIX_PCI=y +-CONFIG_HPET=y + CONFIG_I8259=y + CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index 69cdda0..4234f00 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -21,7 +21,6 @@ CONFIG_I8257=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y + CONFIG_PIIX_PCI=y +-CONFIG_HPET=y + CONFIG_I8259=y + CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) diff --git a/SOURCES/disable-unsupported-audio-devices.patch b/SOURCES/disable-unsupported-audio-devices.patch new file mode 100644 index 0000000..e56c567 --- /dev/null +++ b/SOURCES/disable-unsupported-audio-devices.patch @@ -0,0 +1,32 @@ +From be17223dfe2b717322f878fbfa9e354be73f1569 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 19 Mar 2013 07:37:43 -0400 +Subject: Disable unsupported audio devices + +Bugzilla: 921974 + +Only AC97 and Intel HDA are supported audio devices. Limit build only to these devices. + +Signed-off-by: Miroslav Rezanina + +diff --git a/default-configs/pci.mak b/default-configs/pci.mak +index 87334a4..a5dee5d 100644 +--- a/default-configs/pci.mak ++++ b/default-configs/pci.mak +@@ -10,7 +10,6 @@ CONFIG_PCNET_PCI=y + CONFIG_PCNET_COMMON=y + CONFIG_AC97=y + CONFIG_HDA=y +-CONFIG_ES1370=y + CONFIG_RTL8139_PCI=y + CONFIG_E1000_PCI=y + CONFIG_VMXNET3_PCI=y +diff --git a/default-configs/sound.mak b/default-configs/sound.mak +index 4f22c34..e69de29 100644 +--- a/default-configs/sound.mak ++++ b/default-configs/sound.mak +@@ -1,4 +0,0 @@ +-CONFIG_SB16=y +-CONFIG_ADLIB=y +-CONFIG_GUS=y +-CONFIG_CS4231A=y diff --git a/SOURCES/disable-unsupported-emulated-network-devices.patch b/SOURCES/disable-unsupported-emulated-network-devices.patch new file mode 100644 index 0000000..5689194 --- /dev/null +++ b/SOURCES/disable-unsupported-emulated-network-devices.patch @@ -0,0 +1,155 @@ +From 79b7ddc06f610199104fbb77fded7ed250056624 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 22 May 2013 11:59:23 +0200 +Subject: Disable unsupported emulated network devices + +Bugzilla: 921974 + +Disable following network devices as they are not supported: +- ne2k_isa +- ne2k_pci +- pcnet +- vmxnet3 + +Signed-off-by: Miroslav Rezanina + +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index b208e10..fb6caaf 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -20,7 +20,6 @@ CONFIG_APM=y + CONFIG_I8257=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y +-CONFIG_NE2000_ISA=y + CONFIG_PIIX_PCI=y + CONFIG_HPET=y + CONFIG_I8259=y +diff --git a/default-configs/mips-softmmu.mak b/default-configs/mips-softmmu.mak +index 4fed1ca..3c5fb43 100644 +--- a/default-configs/mips-softmmu.mak ++++ b/default-configs/mips-softmmu.mak +@@ -22,7 +22,6 @@ CONFIG_I8257=y + CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y +-CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/mips64-softmmu.mak b/default-configs/mips64-softmmu.mak +index 5e4e758..c05d44a 100644 +--- a/default-configs/mips64-softmmu.mak ++++ b/default-configs/mips64-softmmu.mak +@@ -22,7 +22,6 @@ CONFIG_I8257=y + CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y +-CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/mips64el-softmmu.mak b/default-configs/mips64el-softmmu.mak +index cc54619..40aaea5 100644 +--- a/default-configs/mips64el-softmmu.mak ++++ b/default-configs/mips64el-softmmu.mak +@@ -23,7 +23,6 @@ CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y + CONFIG_IDE_VIA=y +-CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/mipsel-softmmu.mak b/default-configs/mipsel-softmmu.mak +index 1e59e68..ca44d0e 100644 +--- a/default-configs/mipsel-softmmu.mak ++++ b/default-configs/mipsel-softmmu.mak +@@ -22,7 +22,6 @@ CONFIG_I8257=y + CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y +-CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/pci.mak b/default-configs/pci.mak +index a5dee5d..c0fb0ae 100644 +--- a/default-configs/pci.mak ++++ b/default-configs/pci.mak +@@ -4,15 +4,11 @@ CONFIG_VIRTIO=y + CONFIG_USB_UHCI=y + CONFIG_USB_EHCI=y + CONFIG_USB_XHCI=y +-CONFIG_NE2000_PCI=y + CONFIG_EEPRO100_PCI=y +-CONFIG_PCNET_PCI=y +-CONFIG_PCNET_COMMON=y + CONFIG_AC97=y + CONFIG_HDA=y + CONFIG_RTL8139_PCI=y + CONFIG_E1000_PCI=y +-CONFIG_VMXNET3_PCI=y + CONFIG_IDE_CORE=y + CONFIG_IDE_QDEV=y + CONFIG_IDE_PCI=y +diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak +index cc3587f..5f70181 100644 +--- a/default-configs/ppc-softmmu.mak ++++ b/default-configs/ppc-softmmu.mak +@@ -34,7 +34,6 @@ CONFIG_PPCE500_PCI=y + CONFIG_IDE_ISA=y + CONFIG_IDE_CMD646=y + CONFIG_IDE_MACIO=y +-CONFIG_NE2000_ISA=y + CONFIG_PFLASH_CFI01=y + CONFIG_PFLASH_CFI02=y + CONFIG_PTIMER=y +diff --git a/default-configs/ppc64-softmmu.mak b/default-configs/ppc64-softmmu.mak +index 884ea8a..0e8ff62 100644 +--- a/default-configs/ppc64-softmmu.mak ++++ b/default-configs/ppc64-softmmu.mak +@@ -34,7 +34,6 @@ CONFIG_PPCE500_PCI=y + CONFIG_IDE_ISA=y + CONFIG_IDE_CMD646=y + CONFIG_IDE_MACIO=y +-CONFIG_NE2000_ISA=y + CONFIG_PFLASH_CFI01=y + CONFIG_PFLASH_CFI02=y + CONFIG_PTIMER=y +diff --git a/default-configs/ppcemb-softmmu.mak b/default-configs/ppcemb-softmmu.mak +index be93e03..a8ab6e3 100644 +--- a/default-configs/ppcemb-softmmu.mak ++++ b/default-configs/ppcemb-softmmu.mak +@@ -29,7 +29,6 @@ CONFIG_PPCE500_PCI=y + CONFIG_IDE_ISA=y + CONFIG_IDE_CMD646=y + CONFIG_IDE_MACIO=y +-CONFIG_NE2000_ISA=y + CONFIG_PFLASH_CFI01=y + CONFIG_PFLASH_CFI02=y + CONFIG_PTIMER=y +diff --git a/default-configs/sparc-softmmu.mak b/default-configs/sparc-softmmu.mak +index 8fc93dd..ddba71d 100644 +--- a/default-configs/sparc-softmmu.mak ++++ b/default-configs/sparc-softmmu.mak +@@ -7,7 +7,6 @@ CONFIG_M48T59=y + CONFIG_PTIMER=y + CONFIG_FDC=y + CONFIG_EMPTY_SLOT=y +-CONFIG_PCNET_COMMON=y + CONFIG_LANCE=y + CONFIG_TCX=y + CONFIG_SLAVIO=y +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index bd3a533..69cdda0 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -20,7 +20,6 @@ CONFIG_APM=y + CONFIG_I8257=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y +-CONFIG_NE2000_ISA=y + CONFIG_PIIX_PCI=y + CONFIG_HPET=y + CONFIG_I8259=y diff --git a/SOURCES/disable-unsupported-emulated-scsi-devices.patch b/SOURCES/disable-unsupported-emulated-scsi-devices.patch new file mode 100644 index 0000000..4332177 --- /dev/null +++ b/SOURCES/disable-unsupported-emulated-scsi-devices.patch @@ -0,0 +1,40 @@ +From f991d8c7f0d19ccc948ec6540487649adf20d99b Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 22 May 2013 08:45:03 +0200 +Subject: Disable unsupported emulated SCSI devices + +Bugzilla: 903918 + +We do not support following device so it has to be disabled: +- lsi53c895a +- am53c974 +- dc390 +- esp +- megasas +- pvscsi + +Signed-off-by: Miroslav Rezanina + +diff --git a/default-configs/pci.mak b/default-configs/pci.mak +index 78f1579..8ef7e50 100644 +--- a/default-configs/pci.mak ++++ b/default-configs/pci.mak +@@ -11,9 +11,6 @@ CONFIG_PCNET_COMMON=y + CONFIG_AC97=y + CONFIG_HDA=y + CONFIG_ES1370=y +-CONFIG_LSI_SCSI_PCI=y +-CONFIG_VMW_PVSCSI_SCSI_PCI=y +-CONFIG_MEGASAS_SCSI_PCI=y + CONFIG_RTL8139_PCI=y + CONFIG_E1000_PCI=y + CONFIG_VMXNET3_PCI=y +@@ -21,8 +18,6 @@ CONFIG_IDE_CORE=y + CONFIG_IDE_QDEV=y + CONFIG_IDE_PCI=y + CONFIG_AHCI=y +-CONFIG_ESP=y +-CONFIG_ESP_PCI=y + CONFIG_SERIAL=y + CONFIG_SERIAL_PCI=y + CONFIG_IPACK=y diff --git a/SOURCES/disable-unsupported-usb-devices.patch b/SOURCES/disable-unsupported-usb-devices.patch new file mode 100644 index 0000000..0670681 --- /dev/null +++ b/SOURCES/disable-unsupported-usb-devices.patch @@ -0,0 +1,40 @@ +From ca2d050f0de557b4955f019402428487176925b6 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Mon, 22 Apr 2013 14:38:38 +0200 +Subject: Disable unsupported usb devices + +Bugzilla: 903914 + +Patch deactivates device we do not support in RHEL7: +- usb-audio +- usb-braille +- usb-bt-dongle +- usb-net +- usb-serial +- usb-wacom-tablet +- pci-ohci + +diff --git a/default-configs/pci.mak b/default-configs/pci.mak +index d557eab..78f1579 100644 +--- a/default-configs/pci.mak ++++ b/default-configs/pci.mak +@@ -2,7 +2,6 @@ CONFIG_PCI=y + CONFIG_VIRTIO_PCI=y + CONFIG_VIRTIO=y + CONFIG_USB_UHCI=y +-CONFIG_USB_OHCI=y + CONFIG_USB_EHCI=y + CONFIG_USB_XHCI=y + CONFIG_NE2000_PCI=y +diff --git a/default-configs/usb.mak b/default-configs/usb.mak +index 1bf9075..9a3bd09 100644 +--- a/default-configs/usb.mak ++++ b/default-configs/usb.mak +@@ -2,7 +2,3 @@ CONFIG_USB_TABLET_WACOM=y + CONFIG_USB_STORAGE_BOT=y + CONFIG_USB_STORAGE_UAS=y + CONFIG_USB_SMARTCARD=y +-CONFIG_USB_AUDIO=y +-CONFIG_USB_SERIAL=y +-CONFIG_USB_NETWORK=y +-CONFIG_USB_BLUETOOTH=y diff --git a/SOURCES/disable-various-unsupported-devices.patch b/SOURCES/disable-various-unsupported-devices.patch new file mode 100644 index 0000000..3b19720 --- /dev/null +++ b/SOURCES/disable-various-unsupported-devices.patch @@ -0,0 +1,127 @@ +From 7a81bbb17a540bf7b83142333a9610c1d642ba09 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 19 Mar 2013 09:03:29 -0400 +Subject: Disable various unsupported devices + +Bugzilla: 921971 + +Disable following emulated devices we do not support: +- isa-applesmc +- vmware-svga +- ipoctal232 +- tpci200 +- ipack + +Signed-off-by: Miroslav Rezanina + +diff --git a/default-configs/alpha-softmmu.mak b/default-configs/alpha-softmmu.mak +index 18e5337..f2792ad 100644 +--- a/default-configs/alpha-softmmu.mak ++++ b/default-configs/alpha-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_CIRRUS=y + CONFIG_IDE_CORE=y + CONFIG_IDE_QDEV=y +-CONFIG_VMWARE_VGA=y + CONFIG_IDE_CMD646=y + CONFIG_I8259=y + CONFIG_MC146818RTC=y +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index 03deca2..b208e10 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -8,7 +8,6 @@ CONFIG_QXL=$(CONFIG_SPICE) + CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_CIRRUS=y +-CONFIG_VMWARE_VGA=y + CONFIG_VMMOUSE=y + CONFIG_SERIAL=y + CONFIG_PARALLEL=y +@@ -24,7 +23,6 @@ CONFIG_IDE_PIIX=y + CONFIG_NE2000_ISA=y + CONFIG_PIIX_PCI=y + CONFIG_HPET=y +-CONFIG_APPLESMC=y + CONFIG_I8259=y + CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) +diff --git a/default-configs/mips-softmmu.mak b/default-configs/mips-softmmu.mak +index b443702..4fed1ca 100644 +--- a/default-configs/mips-softmmu.mak ++++ b/default-configs/mips-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y +-CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y + CONFIG_PARALLEL=y + CONFIG_I8254=y +diff --git a/default-configs/mips64-softmmu.mak b/default-configs/mips64-softmmu.mak +index d638957..5e4e758 100644 +--- a/default-configs/mips64-softmmu.mak ++++ b/default-configs/mips64-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y +-CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y + CONFIG_PARALLEL=y + CONFIG_I8254=y +diff --git a/default-configs/mips64el-softmmu.mak b/default-configs/mips64el-softmmu.mak +index c9be3f4..cc54619 100644 +--- a/default-configs/mips64el-softmmu.mak ++++ b/default-configs/mips64el-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y +-CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y + CONFIG_PARALLEL=y + CONFIG_I8254=y +diff --git a/default-configs/mipsel-softmmu.mak b/default-configs/mipsel-softmmu.mak +index 4f4a449..1e59e68 100644 +--- a/default-configs/mipsel-softmmu.mak ++++ b/default-configs/mipsel-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y +-CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y + CONFIG_PARALLEL=y + CONFIG_I8254=y +diff --git a/default-configs/pci.mak b/default-configs/pci.mak +index 8ef7e50..87334a4 100644 +--- a/default-configs/pci.mak ++++ b/default-configs/pci.mak +@@ -20,6 +20,5 @@ CONFIG_IDE_PCI=y + CONFIG_AHCI=y + CONFIG_SERIAL=y + CONFIG_SERIAL_PCI=y +-CONFIG_IPACK=y + CONFIG_WDT_IB6300ESB=y + CONFIG_PCI_TESTDEV=y +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index 599b630..bd3a533 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -8,7 +8,6 @@ CONFIG_QXL=$(CONFIG_SPICE) + CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_CIRRUS=y +-CONFIG_VMWARE_VGA=y + CONFIG_VMMOUSE=y + CONFIG_SERIAL=y + CONFIG_PARALLEL=y +@@ -24,7 +23,6 @@ CONFIG_IDE_PIIX=y + CONFIG_NE2000_ISA=y + CONFIG_PIIX_PCI=y + CONFIG_HPET=y +-CONFIG_APPLESMC=y + CONFIG_I8259=y + CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) diff --git a/SOURCES/e1000-Keep-capabilities-list-bit-on-for-older-RHEL-machine-types.patch b/SOURCES/e1000-Keep-capabilities-list-bit-on-for-older-RHEL-machine-types.patch new file mode 100644 index 0000000..c36f95a --- /dev/null +++ b/SOURCES/e1000-Keep-capabilities-list-bit-on-for-older-RHEL-machine-types.patch @@ -0,0 +1,49 @@ +From 5278c98d70ef98926e47b226cf5e40decc7ac7ca Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:06:40 +0200 +Subject: e1000: Keep capabilities list bit on for older RHEL machine types + +Message-id: <1375201922-6794-16-git-send-email-armbru@redhat.com> +Patchwork-id: 52825 +O-Subject: [RHEL-7 PATCH v3 15/15] e1000: Keep capabilities list bit on for older RHEL machine types +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Upstream commit dd8e937 "e1000: Don't set the Capabilities List bit" +switched it off. The necessary compat_props to keep it on for old +machine types were forgotten. + +The RHEL-6 backport commit 2d76e3e added property +e1000.x-__com_redhat_rhel630_compat, set it for 6.3 and older via +compat_props, and made setting the capabilities list bit depend on it +being set. + +Instead of porting the RHEL-only property forward to RHEL-7, use +upstream's e1000.autonegotiation, which is on for 6.4 and newer, else +off. This is admittedly a hack. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index e6f46f0..661b461 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -1324,6 +1324,16 @@ static int pci_e1000_init(PCIDevice *pci_dev) + + pci_conf = d->dev.config; + ++ if (!(d->compat_flags & E1000_FLAG_AUTONEG)) { ++ /* ++ * We have no capabilities, so capability list bit should normally be 0. ++ * Keep it on for compat machine types to avoid breaking migration. ++ * HACK: abuse E1000_FLAG_AUTONEG, which is off exactly for ++ * the machine types that need this. ++ */ ++ pci_set_word(pci_conf + PCI_STATUS, PCI_STATUS_CAP_LIST); ++ } ++ + /* TODO: RST# value should be 0, PCI spec 6.2.4 */ + pci_conf[PCI_CACHE_LINE_SIZE] = 0x10; + diff --git a/SOURCES/ksm.service b/SOURCES/ksm.service new file mode 100644 index 0000000..35c6f1d --- /dev/null +++ b/SOURCES/ksm.service @@ -0,0 +1,13 @@ +[Unit] +Description=Kernel Samepage Merging +ConditionPathExists=/sys/kernel/mm/ksm + +[Service] +Type=oneshot +RemainAfterExit=yes +EnvironmentFile=-/etc/sysconfig/ksm +ExecStart=/usr/libexec/ksmctl start +ExecStop=/usr/libexec/ksmctl stop + +[Install] +WantedBy=multi-user.target diff --git a/SOURCES/ksm.sysconfig b/SOURCES/ksm.sysconfig new file mode 100644 index 0000000..d99656d --- /dev/null +++ b/SOURCES/ksm.sysconfig @@ -0,0 +1,4 @@ +# The maximum number of unswappable kernel pages +# which may be allocated by ksm (0 for unlimited) +# If unset, defaults to half of total memory +# KSM_MAX_KERNEL_PAGES= diff --git a/SOURCES/ksmctl.c b/SOURCES/ksmctl.c new file mode 100644 index 0000000..af39591 --- /dev/null +++ b/SOURCES/ksmctl.c @@ -0,0 +1,77 @@ +/* Start/stop KSM, for systemd. + * Copyright (C) 2009, 2011 Red Hat, Inc. + * Written by Paolo Bonzini . + * Based on the original sysvinit script by Dan Kenigsberg + * This file is distributed under the GNU General Public License, version 2 + * or later. */ + +#include +#include +#include +#include +#include +#include + +#define KSM_MAX_KERNEL_PAGES_FILE "/sys/kernel/mm/ksm/max_kernel_pages" +#define KSM_RUN_FILE "/sys/kernel/mm/ksm/run" + +char *program_name; + +int usage(void) +{ + fprintf(stderr, "Usage: %s {start|stop}\n", program_name); + return 1; +} + +int write_value(uint64_t value, char *filename) +{ + FILE *fp; + if (!(fp = fopen(filename, "w")) || + fprintf(fp, "%llu\n", (unsigned long long) value) == EOF || + fflush(fp) == EOF || + fclose(fp) == EOF) + return 1; + + return 0; +} + +uint64_t ksm_max_kernel_pages() +{ + char *var = getenv("KSM_MAX_KERNEL_PAGES"); + char *endptr; + uint64_t value; + if (var && *var) { + value = strtoll(var, &endptr, 0); + if (value < LLONG_MAX && !*endptr) + return value; + } + /* Unless KSM_MAX_KERNEL_PAGES is set, let KSM munch up to half of + * total memory. */ + return sysconf(_SC_PHYS_PAGES) / 2; +} + +int start(void) +{ + if (access(KSM_MAX_KERNEL_PAGES_FILE, R_OK) >= 0) + write_value(ksm_max_kernel_pages(), KSM_MAX_KERNEL_PAGES_FILE); + return write_value(1, KSM_RUN_FILE); +} + +int stop(void) +{ + return write_value(0, KSM_RUN_FILE); +} + +int main(int argc, char **argv) +{ + program_name = argv[0]; + if (argc < 2) { + return usage(); + } else if (!strcmp(argv[1], "start")) { + return start(); + } else if (!strcmp(argv[1], "stop")) { + return stop(); + } else { + return usage(); + } +} diff --git a/SOURCES/ksmtuned b/SOURCES/ksmtuned new file mode 100644 index 0000000..320ce74 --- /dev/null +++ b/SOURCES/ksmtuned @@ -0,0 +1,138 @@ +#!/bin/bash +# +# Copyright 2009 Red Hat, Inc. and/or its affiliates. +# Released under the GPL +# +# Author: Dan Kenigsberg +# +# ksmtuned - a simple script that controls whether (and with what vigor) ksm +# should search for duplicated pages. +# +# starts ksm when memory commited to qemu processes exceeds a threshold, and +# make ksm work harder and harder untill memory load falls below that +# threshold. +# +# send SIGUSR1 to this process right after a new qemu process is started, or +# following its death, to retune ksm accordingly +# +# needs testing and ironing. contact danken@redhat.com if something breaks. + +if [ -f /etc/ksmtuned.conf ]; then + . /etc/ksmtuned.conf +fi + +debug() { + if [ -n "$DEBUG" ]; then + s="`/bin/date`: $*" + [ -n "$LOGFILE" ] && echo "$s" >> "$LOGFILE" || echo "$s" + fi +} + + +KSM_MONITOR_INTERVAL=${KSM_MONITOR_INTERVAL:-60} +KSM_NPAGES_BOOST=${KSM_NPAGES_BOOST:-300} +KSM_NPAGES_DECAY=${KSM_NPAGES_DECAY:--50} + +KSM_NPAGES_MIN=${KSM_NPAGES_MIN:-64} +KSM_NPAGES_MAX=${KSM_NPAGES_MAX:-1250} +# millisecond sleep between ksm scans for 16Gb server. Smaller servers sleep +# more, bigger sleep less. +KSM_SLEEP_MSEC=${KSM_SLEEP_MSEC:-10} + +KSM_THRES_COEF=${KSM_THRES_COEF:-20} +KSM_THRES_CONST=${KSM_THRES_CONST:-2048} + +total=`awk '/^MemTotal:/ {print $2}' /proc/meminfo` +debug total $total + +npages=0 +sleep=$[KSM_SLEEP_MSEC * 16 * 1024 * 1024 / total] +[ $sleep -le 10 ] && sleep=10 +debug sleep $sleep +thres=$[total * KSM_THRES_COEF / 100] +if [ $KSM_THRES_CONST -gt $thres ]; then + thres=$KSM_THRES_CONST +fi +debug thres $thres + +KSMCTL () { + case x$1 in + xstop) + echo 0 > /sys/kernel/mm/ksm/run + ;; + xstart) + echo $2 > /sys/kernel/mm/ksm/pages_to_scan + echo $3 > /sys/kernel/mm/ksm/sleep_millisecs + echo 1 > /sys/kernel/mm/ksm/run + ;; + esac +} + +committed_memory () { + local pidlist + pidlist=$(pgrep -d ' ' -- '^qemu(-kvm|:.{1,11})$') + if [ -n "$pidlist" ]; then + ps -p "$pidlist" -o rsz= + fi | awk '{ sum += $1 }; END { print 0+sum }' +} + +free_memory () { + awk '/^(MemFree|Buffers|Cached):/ {free += $2}; END {print free}' \ + /proc/meminfo +} + +increase_npages() { + local delta + delta=${1:-0} + npages=$[npages + delta] + if [ $npages -lt $KSM_NPAGES_MIN ]; then + npages=$KSM_NPAGES_MIN + elif [ $npages -gt $KSM_NPAGES_MAX ]; then + npages=$KSM_NPAGES_MAX + fi + echo $npages +} + + +adjust () { + local free committed + free=`free_memory` + committed=`committed_memory` + debug committed $committed free $free + if [ $[committed + thres] -lt $total -a $free -gt $thres ]; then + KSMCTL stop + debug "$[committed + thres] < $total and free > $thres, stop ksm" + return 1 + fi + debug "$[committed + thres] > $total, start ksm" + if [ $free -lt $thres ]; then + npages=`increase_npages $KSM_NPAGES_BOOST` + debug "$free < $thres, boost" + else + npages=`increase_npages $KSM_NPAGES_DECAY` + debug "$free > $thres, decay" + fi + KSMCTL start $npages $sleep + debug "KSMCTL start $npages $sleep" + return 0 +} + +function nothing () { + : +} + +loop () { + trap nothing SIGUSR1 + while true + do + sleep $KSM_MONITOR_INTERVAL & + wait $! + adjust + done +} + +PIDFILE=${PIDFILE-/var/run/ksmtune.pid} +if touch "$PIDFILE"; then + loop & + echo $! > "$PIDFILE" +fi diff --git a/SOURCES/ksmtuned.conf b/SOURCES/ksmtuned.conf new file mode 100644 index 0000000..fc4518c --- /dev/null +++ b/SOURCES/ksmtuned.conf @@ -0,0 +1,21 @@ +# Configuration file for ksmtuned. + +# How long ksmtuned should sleep between tuning adjustments +# KSM_MONITOR_INTERVAL=60 + +# Millisecond sleep between ksm scans for 16Gb server. +# Smaller servers sleep more, bigger sleep less. +# KSM_SLEEP_MSEC=10 + +# KSM_NPAGES_BOOST=300 +# KSM_NPAGES_DECAY=-50 +# KSM_NPAGES_MIN=64 +# KSM_NPAGES_MAX=1250 + +# KSM_THRES_COEF=20 +# KSM_THRES_CONST=2048 + +# uncomment the following if you want ksmtuned debug info + +# LOGFILE=/var/log/ksmtuned +# DEBUG=1 diff --git a/SOURCES/ksmtuned.service b/SOURCES/ksmtuned.service new file mode 100644 index 0000000..39febcc --- /dev/null +++ b/SOURCES/ksmtuned.service @@ -0,0 +1,12 @@ +[Unit] +Description=Kernel Samepage Merging (KSM) Tuning Daemon +After=ksm.service +Requires=ksm.service + +[Service] +ExecStart=/usr/sbin/ksmtuned +ExecReload=/bin/kill -USR1 $MAINPID +Type=forking + +[Install] +WantedBy=multi-user.target diff --git a/SOURCES/kvm-Add-back-no-hpet-but-ignore-it.patch b/SOURCES/kvm-Add-back-no-hpet-but-ignore-it.patch new file mode 100644 index 0000000..6b3bb08 --- /dev/null +++ b/SOURCES/kvm-Add-back-no-hpet-but-ignore-it.patch @@ -0,0 +1,69 @@ +From 0d436218d32002c29bde5d84a5b41abb915dc753 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Thu, 16 Jan 2014 16:15:05 -0500 +Subject: [PATCH 14/14] Add back -no-hpet but ignore it + +Message-id: <1389888905-31880-1-git-send-email-dgilbert@redhat.com> +Patchwork-id: 56754 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/1] Add back -no-hpet but ignore it +Bugzilla: 1044742 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Jiri Denemark + +From: "Dr. David Alan Gilbert" + +BZ: 1044742 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6886373 +Upstream-status: Red Hat only + + Undoes some of bz947441, in that we keep the -no-hpet command line +option, for compatibility with libvirt since it has no way of knowing +that it was removed. + + Since hpet is disabled anyway, keeping the option does no harm. +--- + qemu-options.hx | 2 -- + vl.c | 2 -- + 2 files changed, 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-options.hx | 2 -- + vl.c | 2 -- + 2 files changed, 4 deletions(-) + +diff --git a/qemu-options.hx b/qemu-options.hx +index d9320b5..49b4bc2 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -1280,10 +1280,8 @@ it if your guest OS complains about ACPI problems (PC target machine + only). + ETEXI + +-#if 0 /* Disabled for Red Hat Enterprise Linux */ + DEF("no-hpet", 0, QEMU_OPTION_no_hpet, + "-no-hpet disable HPET\n", QEMU_ARCH_I386) +-#endif + + DEF("acpitable", HAS_ARG, QEMU_OPTION_acpitable, + "-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,{data|file}=file1[:file2]...]\n" +diff --git a/vl.c b/vl.c +index b70d107..deb5884 100644 +--- a/vl.c ++++ b/vl.c +@@ -3558,11 +3558,9 @@ int main(int argc, char **argv, char **envp) + case QEMU_OPTION_no_acpi: + acpi_enabled = 0; + break; +-#if 0 /* Disabled for Red Hat Enterprise Linux */ + case QEMU_OPTION_no_hpet: + no_hpet = 1; + break; +-#endif + case QEMU_OPTION_balloon: + if (balloon_parse(optarg) < 0) { + fprintf(stderr, "Unknown -balloon argument %s\n", optarg); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Add-check-for-cache-size-smaller-than-page-size.patch b/SOURCES/kvm-Add-check-for-cache-size-smaller-than-page-size.patch new file mode 100644 index 0000000..1d5720d --- /dev/null +++ b/SOURCES/kvm-Add-check-for-cache-size-smaller-than-page-size.patch @@ -0,0 +1,79 @@ +From 34f122742b3b75db66c9f2a022179136dbc534e4 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 11 Feb 2014 15:20:47 +0100 +Subject: [PATCH 13/28] Add check for cache size smaller than page size + +RH-Author: Orit Wasserman +Message-id: <1392132047-5103-1-git-send-email-owasserm@redhat.com> +Patchwork-id: 57207 +O-Subject: [RHEL7 qemu-kvm PATCH] Add check for cache size smaller than page size +Bugzilla: 1017096 +RH-Acked-by: Juan Quintela +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Markus Armbruster + +Bugzilla: 1017096 +Upstream: merged +Brew:http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7028464 + +Signed-off-by: Orit Wasserman +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit c91e681a558fc21073ffc491b5a022d5f340fa0b) +--- + arch_init.c | 4 ++++ + migration.c | 10 +++++++++- + 2 files changed, 13 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 4 ++++ + migration.c | 10 +++++++++- + 2 files changed, 13 insertions(+), 1 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 31aac84..c3207bf 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -178,6 +178,10 @@ static struct { + + int64_t xbzrle_cache_resize(int64_t new_size) + { ++ if (new_size < TARGET_PAGE_SIZE) { ++ return -1; ++ } ++ + if (XBZRLE.cache != NULL) { + return cache_resize(XBZRLE.cache, new_size / TARGET_PAGE_SIZE) * + TARGET_PAGE_SIZE; +diff --git a/migration.c b/migration.c +index 21f7247..6487fe2 100644 +--- a/migration.c ++++ b/migration.c +@@ -474,6 +474,7 @@ void qmp_migrate_cancel(Error **errp) + void qmp_migrate_set_cache_size(int64_t value, Error **errp) + { + MigrationState *s = migrate_get_current(); ++ int64_t new_size; + + /* Check for truncation */ + if (value != (size_t)value) { +@@ -482,7 +483,14 @@ void qmp_migrate_set_cache_size(int64_t value, Error **errp) + return; + } + +- s->xbzrle_cache_size = xbzrle_cache_resize(value); ++ new_size = xbzrle_cache_resize(value); ++ if (new_size < 0) { ++ error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", ++ "is smaller than page size"); ++ return; ++ } ++ ++ s->xbzrle_cache_size = new_size; + } + + int64_t qmp_query_migrate_cache_size(Error **errp) +-- +1.7.1 + diff --git a/SOURCES/kvm-Add-skip_dump-flag-to-ignore-memory-region-during-du.patch b/SOURCES/kvm-Add-skip_dump-flag-to-ignore-memory-region-during-du.patch new file mode 100644 index 0000000..f1c86ce --- /dev/null +++ b/SOURCES/kvm-Add-skip_dump-flag-to-ignore-memory-region-during-du.patch @@ -0,0 +1,129 @@ +From 0ae4c882404b4590c34bb9b03a86f9389413fd1c Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Wed, 7 Sep 2016 14:09:52 +0200 +Subject: [PATCH 2/2] Add skip_dump flag to ignore memory region during dump + +RH-Author: Alex Williamson +Message-id: <20160907140817.21968.47551.stgit@gimli.home> +Patchwork-id: 72264 +O-Subject: [RHEL7.3 qemu-kvm PATCH v2] Add skip_dump flag to ignore memory region during dump +Bugzilla: 1373088 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Laszlo Ersek + +From: Nikunj A Dadhania + +Bugzilla: 1373088 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=11713365 +Upstream: e4dc3f5909ab90520bc1a27b381c3017ff65ed68 + +The PCI MMIO might be disabled or the device in the reset state. +Make sure we do not dump these memory regions. + +Signed-off-by: Nikunj A Dadhania +Acked-by: Alex Williamson +CC: Paolo Bonzini +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 1 + + include/exec/memory.h | 19 +++++++++++++++++++ + memory.c | 10 ++++++++++ + memory_mapping.c | 3 ++- + 4 files changed, 32 insertions(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 36b9832..4fdc09a 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2596,6 +2596,7 @@ static int vfio_mmap_bar(VFIOBAR *bar, MemoryRegion *mem, MemoryRegion *submem, + } + + memory_region_init_ram_ptr(submem, name, size, *map); ++ memory_region_set_skip_dump(submem); + } else { + empty_region: + /* Create a zero sized sub-region to make cleanup easy. */ +diff --git a/include/exec/memory.h b/include/exec/memory.h +index 3bbe378..448d501 100644 +--- a/include/exec/memory.h ++++ b/include/exec/memory.h +@@ -126,6 +126,7 @@ struct MemoryRegion { + bool terminates; + bool romd_mode; + bool ram; ++ bool skip_dump; + bool readonly; /* For RAM regions */ + bool enabled; + bool rom_device; +@@ -353,6 +354,24 @@ uint64_t memory_region_size(MemoryRegion *mr); + bool memory_region_is_ram(MemoryRegion *mr); + + /** ++ * memory_region_is_skip_dump: check whether a memory region should not be ++ * dumped ++ * ++ * Returns %true is a memory region should not be dumped(e.g. VFIO BAR MMAP). ++ * ++ * @mr: the memory region being queried ++ */ ++bool memory_region_is_skip_dump(MemoryRegion *mr); ++ ++/** ++ * memory_region_set_skip_dump: Set skip_dump flag, dump will ignore this memory ++ * region ++ * ++ * @mr: the memory region being queried ++ */ ++void memory_region_set_skip_dump(MemoryRegion *mr); ++ ++/** + * memory_region_is_romd: check whether a memory region is in ROMD mode + * + * Returns %true if a memory region is a ROM device and currently set to allow +diff --git a/memory.c b/memory.c +index a71d096..7bd6e87 100644 +--- a/memory.c ++++ b/memory.c +@@ -957,6 +957,11 @@ void memory_region_init_ram_ptr(MemoryRegion *mr, + mr->ram_addr = qemu_ram_alloc_from_ptr(size, ptr, mr); + } + ++void memory_region_set_skip_dump(MemoryRegion *mr) ++{ ++ mr->skip_dump = true; ++} ++ + void memory_region_init_alias(MemoryRegion *mr, + const char *name, + MemoryRegion *orig, +@@ -1047,6 +1052,11 @@ bool memory_region_is_ram(MemoryRegion *mr) + return mr->ram; + } + ++bool memory_region_is_skip_dump(MemoryRegion *mr) ++{ ++ return mr->skip_dump; ++} ++ + bool memory_region_is_logging(MemoryRegion *mr) + { + return mr->dirty_log_mask; +diff --git a/memory_mapping.c b/memory_mapping.c +index 65082d8..a4d59b7 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -203,7 +203,8 @@ static void guest_phys_blocks_region_add(MemoryListener *listener, + GuestPhysBlock *predecessor; + + /* we only care about RAM */ +- if (!memory_region_is_ram(section->mr)) { ++ if (!memory_region_is_ram(section->mr) || ++ memory_region_is_skip_dump(section->mr)) { + return; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Add-support-statement-to-help-output.patch b/SOURCES/kvm-Add-support-statement-to-help-output.patch new file mode 100644 index 0000000..7979d34 --- /dev/null +++ b/SOURCES/kvm-Add-support-statement-to-help-output.patch @@ -0,0 +1,63 @@ +From a766091a8693181b77b0b1e3b5de9a05aab25c18 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 4 Dec 2013 18:53:17 +0100 +Subject: [PATCH 01/16] Add support statement to -help output + +RH-Author: Eduardo Habkost +Message-id: <1386183197-27761-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 55994 +O-Subject: [qemu-kvm RHEL7 PATCH] Add support statement to -help output +Bugzilla: 972773 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: knoel@redhat.com +RH-Acked-by: Paolo Bonzini + +Bugzilla: 972773 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6676272 + +Add support statement to -help output, reporting direct qemu-kvm usage +as unsupported by Red Hat, and advising users to use libvirt instead. + +Signed-off-by: Eduardo Habkost +--- + vl.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + vl.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/vl.c b/vl.c +index 4a79f62..b9074c5 100644 +--- a/vl.c ++++ b/vl.c +@@ -1993,9 +1993,17 @@ static void version(void) + printf("QEMU emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"); + } + ++static void print_rh_warning(void) ++{ ++ printf("\nWARNING: Direct use of qemu-kvm from the command line is not supported by Red Hat.\n" ++ "WARNING: Use libvirt as the stable management interface.\n" ++ "WARNING: Some command line options listed here may not be available in future releases.\n\n"); ++} ++ + static void help(int exitcode) + { + version(); ++ print_rh_warning(); + printf("usage: %s [options] [disk_image]\n\n" + "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n", + error_get_progname()); +@@ -2010,6 +2018,7 @@ static void help(int exitcode) + "\n" + "When using -nographic, press 'ctrl-a h' to get some help.\n"); + ++ print_rh_warning(); + exit(exitcode); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-Add-support-to-KVM_GET_MSR_FEATURE_INDEX_LIST-an.patch b/SOURCES/kvm-Add-support-to-KVM_GET_MSR_FEATURE_INDEX_LIST-an.patch new file mode 100644 index 0000000..3cbc4db --- /dev/null +++ b/SOURCES/kvm-Add-support-to-KVM_GET_MSR_FEATURE_INDEX_LIST-an.patch @@ -0,0 +1,177 @@ +From 0bce0c69b76a246ee901c09a4d02bcd05619d9e0 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:22 +0200 +Subject: [PATCH 06/12] kvm: Add support to KVM_GET_MSR_FEATURE_INDEX_LIST and + KVM_GET_MSRS system ioctl + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-6-git-send-email-plai@redhat.com> +Patchwork-id: 90856 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 05/10] kvm: Add support to KVM_GET_MSR_FEATURE_INDEX_LIST and KVM_GET_MSRS system ioctl +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Robert Hoo + +Add kvm_get_supported_feature_msrs() to get supported MSR feature index list. +Add kvm_arch_get_supported_msr_feature() to get each MSR features value. + +Signed-off-by: Robert Hoo +Message-Id: <1539578845-37944-2-git-send-email-robert.hu@linux.intel.com> +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost +(cherry picked from commit f57bceb6ab5163ddd6c41ff4344ab8cf28a9c63d) +Signed-off-by: Paul Lai +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/kvm.h | 1 + + linux-headers/linux/kvm.h | 2 ++ + target-i386/kvm.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 82 insertions(+) + +diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h +index e4403be..281fe26 100644 +--- a/include/sysemu/kvm.h ++++ b/include/sysemu/kvm.h +@@ -253,6 +253,7 @@ int kvm_check_extension(KVMState *s, unsigned int extension); + + uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function, + uint32_t index, int reg); ++uint32_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index); + void kvm_cpu_synchronize_state(CPUArchState *env); + + /* generic hooks - to be moved/refactored once there are more users */ +diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h +index 4b93099..bfeafff 100644 +--- a/linux-headers/linux/kvm.h ++++ b/linux-headers/linux/kvm.h +@@ -541,6 +541,7 @@ struct kvm_ppc_smmu_info { + #define KVM_TRACE_ENABLE __KVM_DEPRECATED_MAIN_W_0x06 + #define KVM_TRACE_PAUSE __KVM_DEPRECATED_MAIN_0x07 + #define KVM_TRACE_DISABLE __KVM_DEPRECATED_MAIN_0x08 ++#define KVM_GET_MSR_FEATURE_INDEX_LIST _IOWR(KVMIO, 0x0a, struct kvm_msr_list) + + /* + * Extension capability list. +@@ -667,6 +668,7 @@ struct kvm_ppc_smmu_info { + #define KVM_CAP_PPC_RTAS 91 + #define KVM_CAP_IRQ_XICS 92 + #define KVM_CAP_HYPERV_TIME 96 ++#define KVM_CAP_GET_MSR_FEATURES 153 + + #ifdef KVM_CAP_IRQ_ROUTING + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index b6c76f1..159ed4c 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -84,6 +84,7 @@ static bool has_msr_virt_ssbd; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; ++static struct kvm_msr_list *kvm_feature_msrs; + + bool kvm_allows_irq0_override(void) + { +@@ -251,11 +252,87 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function, + return ret; + } + ++uint32_t kvm_arch_get_supported_msr_feature(KVMState *s, uint32_t index) ++{ ++ struct { ++ struct kvm_msrs info; ++ struct kvm_msr_entry entries[1]; ++ } msr_data; ++ uint32_t ret; ++ ++ if (kvm_feature_msrs == NULL) { /* Host doesn't support feature MSRs */ ++ return 0; ++ } ++ ++ /* Check if requested MSR is supported feature MSR */ ++ int i; ++ for (i = 0; i < kvm_feature_msrs->nmsrs; i++) ++ if (kvm_feature_msrs->indices[i] == index) { ++ break; ++ } ++ if (i == kvm_feature_msrs->nmsrs) { ++ return 0; /* if the feature MSR is not supported, simply return 0 */ ++ } ++ ++ msr_data.info.nmsrs = 1; ++ msr_data.entries[0].index = index; ++ ++ ret = kvm_ioctl(s, KVM_GET_MSRS, &msr_data); ++ if (ret != 1) { ++ error_report("KVM get MSR (index=0x%x) feature failed, %s", ++ index, strerror(-ret)); ++ exit(1); ++ } ++ ++ return msr_data.entries[0].data; ++} ++ + typedef struct HWPoisonPage { + ram_addr_t ram_addr; + QLIST_ENTRY(HWPoisonPage) list; + } HWPoisonPage; + ++static int kvm_get_supported_feature_msrs(KVMState *s) ++{ ++ int ret = 0; ++ ++ if (kvm_feature_msrs != NULL) { ++ return 0; ++ } ++ ++ if (!kvm_check_extension(s, KVM_CAP_GET_MSR_FEATURES)) { ++ return 0; ++ } ++ ++ struct kvm_msr_list msr_list; ++ ++ msr_list.nmsrs = 0; ++ ret = kvm_ioctl(s, KVM_GET_MSR_FEATURE_INDEX_LIST, &msr_list); ++ if (ret < 0 && ret != -E2BIG) { ++ error_report("Fetch KVM feature MSR list failed: %s", ++ strerror(-ret)); ++ return ret; ++ } ++ ++ assert(msr_list.nmsrs > 0); ++ kvm_feature_msrs = (struct kvm_msr_list *) \ ++ g_malloc0(sizeof(msr_list) + ++ msr_list.nmsrs * sizeof(msr_list.indices[0])); ++ ++ kvm_feature_msrs->nmsrs = msr_list.nmsrs; ++ ret = kvm_ioctl(s, KVM_GET_MSR_FEATURE_INDEX_LIST, kvm_feature_msrs); ++ ++ if (ret < 0) { ++ error_report("Fetch KVM feature MSR list failed: %s", ++ strerror(-ret)); ++ g_free(kvm_feature_msrs); ++ kvm_feature_msrs = NULL; ++ return ret; ++ } ++ ++ return 0; ++} ++ + static QLIST_HEAD(, HWPoisonPage) hwpoison_page_list = + QLIST_HEAD_INITIALIZER(hwpoison_page_list); + +@@ -846,6 +923,8 @@ int kvm_arch_init(KVMState *s) + return ret; + } + ++ kvm_get_supported_feature_msrs(s); ++ + uname(&utsname); + lm_capable_kernel = strcmp(utsname.machine, "x86_64") == 0; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Allow-mismatched-virtio-config-len.patch b/SOURCES/kvm-Allow-mismatched-virtio-config-len.patch new file mode 100644 index 0000000..65986c3 --- /dev/null +++ b/SOURCES/kvm-Allow-mismatched-virtio-config-len.patch @@ -0,0 +1,73 @@ +From 3741ae811d3287e34779a307480dfb3e93dbb451 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Mon, 30 Jun 2014 09:49:51 +0200 +Subject: [PATCH] Allow mismatched virtio config-len + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1404121791-14438-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 59405 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] Allow mismatched virtio config-len +Bugzilla: 1113009 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Juan Quintela +RH-Acked-by: Paolo Bonzini + +From: "Dr. David Alan Gilbert" + +Commit 'virtio: validate config_len on load' restricted config_len +loaded from the wire to match the config_len that the device had. + +Unfortunately, there are cases where this isn't true, the one +we found it on was the wce addition in virtio-blk. + +Allow mismatched config-lengths: + *) If the version on the wire is shorter then fine + *) If the version on the wire is longer, load what we have space + for and skip the rest. + +(This is mst@redhat.com's rework of what I originally posted) + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 2f5732e9648fcddc8759a8fd25c0b41a38352be6) +--- + hw/virtio/virtio.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 16 +++++++++++----- + 1 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 44309c2..132b5af 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -886,12 +886,18 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f) + return -1; + } + config_len = qemu_get_be32(f); +- if (config_len != vdev->config_len) { +- error_report("Unexpected config length 0x%x. Expected 0x%zx", +- config_len, vdev->config_len); +- return -1; ++ ++ /* ++ * There are cases where the incoming config can be bigger or smaller ++ * than what we have; so load what we have space for, and skip ++ * any excess that's in the stream. ++ */ ++ qemu_get_buffer(f, vdev->config, MIN(config_len, vdev->config_len)); ++ ++ while (config_len > vdev->config_len) { ++ qemu_get_byte(f); ++ config_len--; + } +- qemu_get_buffer(f, vdev->config, vdev->config_len); + + num = qemu_get_be32(f); + +-- +1.7.1 + diff --git a/SOURCES/kvm-Avoid-embedding-struct-mbuf-in-other-structures.patch b/SOURCES/kvm-Avoid-embedding-struct-mbuf-in-other-structures.patch new file mode 100644 index 0000000..1d22bf3 --- /dev/null +++ b/SOURCES/kvm-Avoid-embedding-struct-mbuf-in-other-structures.patch @@ -0,0 +1,248 @@ +From fba60972ebac4bd02238c9ecb101b24b1e7a8a51 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Mon, 27 Nov 2017 07:07:55 +0100 +Subject: [PATCH 4/9] Avoid embedding struct mbuf in other structures + +RH-Author: Xiao Wang +Message-id: <1511766477-29559-3-git-send-email-jasowang@redhat.com> +Patchwork-id: 77900 +O-Subject: [RHEL7.5 qemu-kvm PATCH 2/4] Avoid embedding struct mbuf in other structures +Bugzilla: 1508745 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Miroslav Rezanina + +From: Samuel Thibault + +struct mbuf uses a C99 open char array to allow inlining data. Inlining +this in another structure is however a GNU extension. The inlines used +so far in struct Slirp were actually only needed as head of struct +mbuf lists. This replaces these inline with mere struct quehead, +and use casts as appropriate. + +Signed-off-by: Samuel Thibault +Reviewed-by: Peter Maydell +(cherry picked from commit 67e3eee45460129cbc5a90fb9f74eb52594281cd) +Signed-off-by: Miroslav Rezanina +--- + slirp/if.c | 27 ++++++++++++++------------- + slirp/mbuf.c | 19 ++++++++++--------- + slirp/misc.c | 5 ----- + slirp/misc.h | 5 +++++ + slirp/slirp.h | 8 +++++--- + 5 files changed, 34 insertions(+), 30 deletions(-) + +diff --git a/slirp/if.c b/slirp/if.c +index dcd5faf..5e14761 100644 +--- a/slirp/if.c ++++ b/slirp/if.c +@@ -27,9 +27,9 @@ ifs_remque(struct mbuf *ifm) + void + if_init(Slirp *slirp) + { +- slirp->if_fastq.ifq_next = slirp->if_fastq.ifq_prev = &slirp->if_fastq; +- slirp->if_batchq.ifq_next = slirp->if_batchq.ifq_prev = &slirp->if_batchq; +- slirp->next_m = &slirp->if_batchq; ++ slirp->if_fastq.qh_link = slirp->if_fastq.qh_rlink = &slirp->if_fastq; ++ slirp->if_batchq.qh_link = slirp->if_batchq.qh_rlink = &slirp->if_batchq; ++ slirp->next_m = (struct mbuf *) &slirp->if_batchq; + } + + /* +@@ -73,7 +73,8 @@ if_output(struct socket *so, struct mbuf *ifm) + * We mustn't put this packet back on the fastq (or we'll send it out of order) + * XXX add cache here? + */ +- for (ifq = slirp->if_batchq.ifq_prev; ifq != &slirp->if_batchq; ++ for (ifq = (struct mbuf *) slirp->if_batchq.qh_rlink; ++ (struct quehead *) ifq != &slirp->if_batchq; + ifq = ifq->ifq_prev) { + if (so == ifq->ifq_so) { + /* A match! */ +@@ -85,7 +86,7 @@ if_output(struct socket *so, struct mbuf *ifm) + + /* No match, check which queue to put it on */ + if (so && (so->so_iptos & IPTOS_LOWDELAY)) { +- ifq = slirp->if_fastq.ifq_prev; ++ ifq = (struct mbuf *) slirp->if_fastq.qh_rlink; + on_fastq = 1; + /* + * Check if this packet is a part of the last +@@ -97,9 +98,9 @@ if_output(struct socket *so, struct mbuf *ifm) + goto diddit; + } + } else { +- ifq = slirp->if_batchq.ifq_prev; ++ ifq = (struct mbuf *) slirp->if_batchq.qh_rlink; + /* Set next_m if the queue was empty so far */ +- if (slirp->next_m == &slirp->if_batchq) { ++ if ((struct quehead *) slirp->next_m == &slirp->if_batchq) { + slirp->next_m = ifm; + } + } +@@ -165,10 +166,10 @@ void if_start(Slirp *slirp) + } + slirp->if_start_busy = true; + +- if (slirp->if_fastq.ifq_next != &slirp->if_fastq) { +- ifm_next = slirp->if_fastq.ifq_next; ++ if (slirp->if_fastq.qh_link != &slirp->if_fastq) { ++ ifm_next = (struct mbuf *) slirp->if_fastq.qh_link; + next_from_batchq = false; +- } else if (slirp->next_m != &slirp->if_batchq) { ++ } else if ((struct quehead *) slirp->next_m != &slirp->if_batchq) { + /* Nothing on fastq, pick up from batchq via next_m */ + ifm_next = slirp->next_m; + next_from_batchq = true; +@@ -181,12 +182,12 @@ void if_start(Slirp *slirp) + from_batchq = next_from_batchq; + + ifm_next = ifm->ifq_next; +- if (ifm_next == &slirp->if_fastq) { ++ if ((struct quehead *) ifm_next == &slirp->if_fastq) { + /* No more packets in fastq, switch to batchq */ + ifm_next = slirp->next_m; + next_from_batchq = true; + } +- if (ifm_next == &slirp->if_batchq) { ++ if ((struct quehead *) ifm_next == &slirp->if_batchq) { + /* end of batchq */ + ifm_next = NULL; + } +@@ -217,7 +218,7 @@ void if_start(Slirp *slirp) + /* Next packet in fastq is from the same session */ + ifm_next = next; + next_from_batchq = false; +- } else if (slirp->next_m == &slirp->if_batchq) { ++ } else if ((struct quehead *) slirp->next_m == &slirp->if_batchq) { + /* Set next_m and ifm_next if the session packet is now the + * only one on batchq */ + slirp->next_m = ifm_next = next; +diff --git a/slirp/mbuf.c b/slirp/mbuf.c +index 4fefb04..5565fd1 100644 +--- a/slirp/mbuf.c ++++ b/slirp/mbuf.c +@@ -28,16 +28,16 @@ + void + m_init(Slirp *slirp) + { +- slirp->m_freelist.m_next = slirp->m_freelist.m_prev = &slirp->m_freelist; +- slirp->m_usedlist.m_next = slirp->m_usedlist.m_prev = &slirp->m_usedlist; ++ slirp->m_freelist.qh_link = slirp->m_freelist.qh_rlink = &slirp->m_freelist; ++ slirp->m_usedlist.qh_link = slirp->m_usedlist.qh_rlink = &slirp->m_usedlist; + } + + void m_cleanup(Slirp *slirp) + { + struct mbuf *m, *next; + +- m = slirp->m_usedlist.m_next; +- while (m != &slirp->m_usedlist) { ++ m = (struct mbuf *) slirp->m_usedlist.qh_link; ++ while ((struct quehead *) m != &slirp->m_usedlist) { + next = m->m_next; + if (m->m_flags & M_EXT) { + free(m->m_ext); +@@ -45,8 +45,8 @@ void m_cleanup(Slirp *slirp) + free(m); + m = next; + } +- m = slirp->m_freelist.m_next; +- while (m != &slirp->m_freelist) { ++ m = (struct mbuf *) slirp->m_freelist.qh_link; ++ while ((struct quehead *) m != &slirp->m_freelist) { + next = m->m_next; + free(m); + m = next; +@@ -69,7 +69,7 @@ m_get(Slirp *slirp) + + DEBUG_CALL("m_get"); + +- if (slirp->m_freelist.m_next == &slirp->m_freelist) { ++ if (slirp->m_freelist.qh_link == &slirp->m_freelist) { + m = (struct mbuf *)malloc(SLIRP_MSIZE); + if (m == NULL) goto end_error; + slirp->mbuf_alloced++; +@@ -77,7 +77,7 @@ m_get(Slirp *slirp) + flags = M_DOFREE; + m->slirp = slirp; + } else { +- m = slirp->m_freelist.m_next; ++ m = (struct mbuf *) slirp->m_freelist.qh_link; + remque(m); + } + +@@ -224,7 +224,8 @@ dtom(Slirp *slirp, void *dat) + DEBUG_ARG("dat = %lx", (long )dat); + + /* bug corrected for M_EXT buffers */ +- for (m = slirp->m_usedlist.m_next; m != &slirp->m_usedlist; ++ for (m = (struct mbuf *) slirp->m_usedlist.qh_link; ++ (struct quehead *) m != &slirp->m_usedlist; + m = m->m_next) { + if (m->m_flags & M_EXT) { + if( (char *)dat>=m->m_ext && (char *)dat<(m->m_ext + m->m_size) ) +diff --git a/slirp/misc.c b/slirp/misc.c +index 8ecced5..d353d08 100644 +--- a/slirp/misc.c ++++ b/slirp/misc.c +@@ -14,11 +14,6 @@ + int slirp_debug = DBG_CALL|DBG_MISC|DBG_ERROR; + #endif + +-struct quehead { +- struct quehead *qh_link; +- struct quehead *qh_rlink; +-}; +- + inline void + insque(void *a, void *b) + { +diff --git a/slirp/misc.h b/slirp/misc.h +index ba8beb1..eb451c4 100644 +--- a/slirp/misc.h ++++ b/slirp/misc.h +@@ -49,6 +49,11 @@ struct emu_t { + struct emu_t *next; + }; + ++struct slirp_quehead { ++ struct slirp_quehead *qh_link; ++ struct slirp_quehead *qh_rlink; ++}; ++ + void slirp_insque(void *, void *); + void slirp_remque(void *); + int add_exec(struct ex_list **, int, char *, struct in_addr, int); +diff --git a/slirp/slirp.h b/slirp/slirp.h +index fe0e65d..d050ede 100644 +--- a/slirp/slirp.h ++++ b/slirp/slirp.h +@@ -126,6 +126,7 @@ void free(void *ptr); + have different prototypes. */ + #define insque slirp_insque + #define remque slirp_remque ++#define quehead slirp_quehead + + #ifdef HAVE_SYS_STROPTS_H + #include +@@ -218,12 +219,13 @@ struct Slirp { + struct ex_list *exec_list; + + /* mbuf states */ +- struct mbuf m_freelist, m_usedlist; ++ struct quehead m_freelist; ++ struct quehead m_usedlist; + int mbuf_alloced; + + /* if states */ +- struct mbuf if_fastq; /* fast queue (for interactive data) */ +- struct mbuf if_batchq; /* queue for non-interactive data */ ++ struct quehead if_fastq; /* fast queue (for interactive data) */ ++ struct quehead if_batchq; /* queue for non-interactive data */ + struct mbuf *next_m; /* pointer to next mbuf to output */ + bool if_start_busy; /* avoid if_start recursion */ + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-BlockLimits-introduce-max_transfer_length.patch b/SOURCES/kvm-BlockLimits-introduce-max_transfer_length.patch new file mode 100644 index 0000000..c440c6d --- /dev/null +++ b/SOURCES/kvm-BlockLimits-introduce-max_transfer_length.patch @@ -0,0 +1,66 @@ +From fea907b6897cb3e644dcee3c537ce6e64d7850ed Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 11 Jul 2016 05:33:35 +0200 +Subject: [PATCH 2/7] BlockLimits: introduce max_transfer_length + +RH-Author: Fam Zheng +Message-id: <1468215219-30793-3-git-send-email-famz@redhat.com> +Patchwork-id: 71106 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 2/6] BlockLimits: introduce max_transfer_length +Bugzilla: 1318199 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 2647fab57d5d5e38b36f8dbda367d688045e6a2d) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block.c | 4 ++++ + include/block/block_int.h | 3 +++ + 2 files changed, 7 insertions(+) + +diff --git a/block.c b/block.c +index ecb2b09..ae756aa 100644 +--- a/block.c ++++ b/block.c +@@ -481,6 +481,7 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp) + return; + } + bs->bl.opt_transfer_length = bs->file->bl.opt_transfer_length; ++ bs->bl.max_transfer_length = bs->file->bl.max_transfer_length; + bs->bl.opt_mem_alignment = bs->file->bl.opt_mem_alignment; + } else { + bs->bl.opt_mem_alignment = 512; +@@ -495,6 +496,9 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp) + bs->bl.opt_transfer_length = + MAX(bs->bl.opt_transfer_length, + bs->backing_hd->bl.opt_transfer_length); ++ bs->bl.max_transfer_length = ++ MIN_NON_ZERO(bs->bl.max_transfer_length, ++ bs->backing_hd->bl.max_transfer_length); + bs->bl.opt_mem_alignment = + MAX(bs->bl.opt_mem_alignment, + bs->backing_hd->bl.opt_mem_alignment); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 3f86649..28c34d8 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -240,6 +240,9 @@ typedef struct BlockLimits { + /* optimal transfer length in sectors */ + int opt_transfer_length; + ++ /* maximal transfer length in sectors */ ++ int max_transfer_length; ++ + /* memory alignment so that no bounce buffer is needed */ + size_t opt_mem_alignment; + } BlockLimits; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Build-ceph-rbd-only-for-rhev.patch b/SOURCES/kvm-Build-ceph-rbd-only-for-rhev.patch new file mode 100644 index 0000000..65703c6 --- /dev/null +++ b/SOURCES/kvm-Build-ceph-rbd-only-for-rhev.patch @@ -0,0 +1,100 @@ +From 5d5af5b18e07ef4c97a45feeaad3fe493d38f427 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 6 Nov 2013 15:43:26 +0100 +Subject: [PATCH 60/81] Build ceph/rbd only for rhev + +RH-Author: Miroslav Rezanina +Message-id: <58854c39ceb485b1ea685c02398db4462493dd35.1383752552.git.mrezanin@redhat.com> +Patchwork-id: 55544 +O-Subject: [RHEL7 qemu-kvm PATCH] Build ceph/rbd only for rhev +Bugzilla: 987583 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi + +From: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=987583 +Brewbuild: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6536646 (RHEL) +Brewbuild: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6536615 (RHEV) + +We support ceph/rbd only for rhev qemu-kvm so it has to be disabled for rhel +qemu-kvm. This patch forwardport RHEL-6 way of disabling rbd but use new +way of handling introduced by Jeff Cody. + +This patch is based on Jeff's "RHEL Storage Differentiation" series and should be +applied with it. Both brew build include all 4 differentiation patches. + +Signed-off-by: Miroslav Rezanina +--- + block/Makefile.objs | 2 +- + configure | 11 +++++++++++ + redhat/qemu-kvm.spec.template | 6 ++++++ + 3 files changed, 18 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/Makefile.objs | 2 +- + configure | 11 +++++++++++ + redhat/qemu-kvm.spec.template | 6 ++++++ + 3 files changed, 18 insertions(+), 1 deletions(-) + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index f355271..41a284b 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -12,7 +12,7 @@ ifeq ($(CONFIG_POSIX),y) + block-obj-y += nbd.o sheepdog.o + block-obj-$(CONFIG_LIBISCSI) += iscsi.o + block-obj-$(CONFIG_CURL) += curl.o +-block-obj-y += rbd.o ++block-obj-$(CONFIG_CEPH_SUPPORT) += rbd.o + block-obj-$(CONFIG_GLUSTERFS) += gluster.o + block-obj-$(CONFIG_LIBSSH2) += ssh.o + endif +diff --git a/configure b/configure +index d658434..1af1079 100755 +--- a/configure ++++ b/configure +@@ -242,6 +242,7 @@ tpm="no" + libssh2="" + live_block_ops="yes" + live_block_migration="no" ++ceph_support="yes" + + # parse CC options first + for opt do +@@ -937,6 +938,10 @@ for opt do + ;; + --enable-live-block-migration) live_block_migration="yes" + ;; ++ --disable-ceph-support) ceph_support=="no" ++ ;; ++ --enable-ceph-support) ceph_support=="yes" ++ ;; + *) echo "ERROR: unknown option $opt"; show_help="yes" + ;; + esac +@@ -1209,6 +1214,8 @@ echo " --disable-live-block-ops disable live block operations support" + echo " --enable-live-block-ops enable live block operations support" + echo " --disable-live-block-migration disable live block migration" + echo " --enable-live-block-migration enable live block migration" ++echo " --disable-ceph-support disable support for rbd block driver support" ++echo " --enable-ceph-support enable support for rbd block driver support" + echo "" + echo "NOTE: The object files are built at the place where configure is launched" + exit 1 +@@ -3964,6 +3971,10 @@ if test "$live_block_migration" = "yes" ; then + echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak + fi + ++if test "ceph_support" = "yes"; then ++ echo "CONFIG_CEPH_SUPPORT=y" >> $config_host_mak ++fi ++ + # USB host support + if test "$libusb" = "yes"; then + echo "HOST_USB=libusb legacy" >> $config_host_mak +-- +1.7.1 + diff --git a/SOURCES/kvm-CVE-2015-1779-incrementally-decode-websocket-frames.patch b/SOURCES/kvm-CVE-2015-1779-incrementally-decode-websocket-frames.patch new file mode 100644 index 0000000..39ad67f --- /dev/null +++ b/SOURCES/kvm-CVE-2015-1779-incrementally-decode-websocket-frames.patch @@ -0,0 +1,253 @@ +From 67c87cd508385158a8a0fb12a430dd19d2883974 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 20 May 2015 08:39:08 +0200 +Subject: [PATCH 1/6] CVE-2015-1779: incrementally decode websocket frames + +Message-id: <1432111149-11644-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 65099 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] CVE-2015-1779: incrementally decode websocket frames +Bugzilla: 1206497 +RH-Acked-by: Thomas Huth +RH-Acked-by: Petr Matousek +RH-Acked-by: Daniel P. Berrange + +From: "Daniel P. Berrange" + +The logic for decoding websocket frames wants to fully +decode the frame header and payload, before allowing the +VNC server to see any of the payload data. There is no +size limit on websocket payloads, so this allows a +malicious network client to consume 2^64 bytes in memory +in QEMU. It can trigger this denial of service before +the VNC server even performs any authentication. + +The fix is to decode the header, and then incrementally +decode the payload data as it is needed. With this fix +the websocket decoder will allow at most 4k of data to +be buffered before decoding and processing payload. + +Signed-off-by: Daniel P. Berrange + +[ kraxel: fix frequent spurious disconnects, suggested by Peter Maydell ] + + @@ -361,7 +361,7 @@ int vncws_decode_frame_payload(Buffer *input, + - *payload_size = input->offset; + + *payload_size = *payload_remain; + +[ kraxel: fix 32bit build ] + + @@ -306,7 +306,7 @@ struct VncState + - uint64_t ws_payload_remain; + + size_t ws_payload_remain; + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit a2bebfd6e09d285aa793cae3fb0fc3a39a9fee6e) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-ws.c | 105 ++++++++++++++++++++++++++++++++++++++++-------------------- + ui/vnc-ws.h | 9 ++++-- + ui/vnc.h | 2 ++ + 3 files changed, 80 insertions(+), 36 deletions(-) + +diff --git a/ui/vnc-ws.c b/ui/vnc-ws.c +index df89315..a7d457c 100644 +--- a/ui/vnc-ws.c ++++ b/ui/vnc-ws.c +@@ -114,7 +114,7 @@ long vnc_client_read_ws(VncState *vs) + { + int ret, err; + uint8_t *payload; +- size_t payload_size, frame_size; ++ size_t payload_size, header_size; + VNC_DEBUG("Read websocket %p size %zd offset %zd\n", vs->ws_input.buffer, + vs->ws_input.capacity, vs->ws_input.offset); + buffer_reserve(&vs->ws_input, 4096); +@@ -124,18 +124,39 @@ long vnc_client_read_ws(VncState *vs) + } + vs->ws_input.offset += ret; + +- /* make sure that nothing is left in the ws_input buffer */ ++ ret = 0; ++ /* consume as much of ws_input buffer as possible */ + do { +- err = vncws_decode_frame(&vs->ws_input, &payload, +- &payload_size, &frame_size); +- if (err <= 0) { +- return err; ++ if (vs->ws_payload_remain == 0) { ++ err = vncws_decode_frame_header(&vs->ws_input, ++ &header_size, ++ &vs->ws_payload_remain, ++ &vs->ws_payload_mask); ++ if (err <= 0) { ++ return err; ++ } ++ ++ buffer_advance(&vs->ws_input, header_size); + } ++ if (vs->ws_payload_remain != 0) { ++ err = vncws_decode_frame_payload(&vs->ws_input, ++ &vs->ws_payload_remain, ++ &vs->ws_payload_mask, ++ &payload, ++ &payload_size); ++ if (err < 0) { ++ return err; ++ } ++ if (err == 0) { ++ return ret; ++ } ++ ret += err; + +- buffer_reserve(&vs->input, payload_size); +- buffer_append(&vs->input, payload, payload_size); ++ buffer_reserve(&vs->input, payload_size); ++ buffer_append(&vs->input, payload, payload_size); + +- buffer_advance(&vs->ws_input, frame_size); ++ buffer_advance(&vs->ws_input, payload_size); ++ } + } while (vs->ws_input.offset > 0); + + return ret; +@@ -273,15 +294,14 @@ void vncws_encode_frame(Buffer *output, const void *payload, + buffer_append(output, payload, payload_size); + } + +-int vncws_decode_frame(Buffer *input, uint8_t **payload, +- size_t *payload_size, size_t *frame_size) ++int vncws_decode_frame_header(Buffer *input, ++ size_t *header_size, ++ size_t *payload_remain, ++ WsMask *payload_mask) + { + unsigned char opcode = 0, fin = 0, has_mask = 0; +- size_t header_size = 0; +- uint32_t *payload32; ++ size_t payload_len; + WsHeader *header = (WsHeader *)input->buffer; +- WsMask mask; +- int i; + + if (input->offset < WS_HEAD_MIN_LEN + 4) { + /* header not complete */ +@@ -291,7 +311,7 @@ int vncws_decode_frame(Buffer *input, uint8_t **payload, + fin = (header->b0 & 0x80) >> 7; + opcode = header->b0 & 0x0f; + has_mask = (header->b1 & 0x80) >> 7; +- *payload_size = header->b1 & 0x7f; ++ payload_len = header->b1 & 0x7f; + + if (opcode == WS_OPCODE_CLOSE) { + /* disconnect */ +@@ -308,40 +328,57 @@ int vncws_decode_frame(Buffer *input, uint8_t **payload, + return -2; + } + +- if (*payload_size < 126) { +- header_size = 6; +- mask = header->u.m; +- } else if (*payload_size == 126 && input->offset >= 8) { +- *payload_size = be16_to_cpu(header->u.s16.l16); +- header_size = 8; +- mask = header->u.s16.m16; +- } else if (*payload_size == 127 && input->offset >= 14) { +- *payload_size = be64_to_cpu(header->u.s64.l64); +- header_size = 14; +- mask = header->u.s64.m64; ++ if (payload_len < 126) { ++ *payload_remain = payload_len; ++ *header_size = 6; ++ *payload_mask = header->u.m; ++ } else if (payload_len == 126 && input->offset >= 8) { ++ *payload_remain = be16_to_cpu(header->u.s16.l16); ++ *header_size = 8; ++ *payload_mask = header->u.s16.m16; ++ } else if (payload_len == 127 && input->offset >= 14) { ++ *payload_remain = be64_to_cpu(header->u.s64.l64); ++ *header_size = 14; ++ *payload_mask = header->u.s64.m64; + } else { + /* header not complete */ + return 0; + } + +- *frame_size = header_size + *payload_size; ++ return 1; ++} ++ ++int vncws_decode_frame_payload(Buffer *input, ++ size_t *payload_remain, WsMask *payload_mask, ++ uint8_t **payload, size_t *payload_size) ++{ ++ size_t i; ++ uint32_t *payload32; + +- if (input->offset < *frame_size) { +- /* frame not complete */ ++ *payload = input->buffer; ++ /* If we aren't at the end of the payload, then drop ++ * off the last bytes, so we're always multiple of 4 ++ * for purpose of unmasking, except at end of payload ++ */ ++ if (input->offset < *payload_remain) { ++ *payload_size = input->offset - (input->offset % 4); ++ } else { ++ *payload_size = *payload_remain; ++ } ++ if (*payload_size == 0) { + return 0; + } +- +- *payload = input->buffer + header_size; ++ *payload_remain -= *payload_size; + + /* unmask frame */ + /* process 1 frame (32 bit op) */ + payload32 = (uint32_t *)(*payload); + for (i = 0; i < *payload_size / 4; i++) { +- payload32[i] ^= mask.u; ++ payload32[i] ^= payload_mask->u; + } + /* process the remaining bytes (if any) */ + for (i *= 4; i < *payload_size; i++) { +- (*payload)[i] ^= mask.c[i % 4]; ++ (*payload)[i] ^= payload_mask->c[i % 4]; + } + + return 1; +diff --git a/ui/vnc-ws.h b/ui/vnc-ws.h +index 95c1b0a..6e93fa0 100644 +--- a/ui/vnc-ws.h ++++ b/ui/vnc-ws.h +@@ -83,7 +83,12 @@ long vnc_client_read_ws(VncState *vs); + void vncws_process_handshake(VncState *vs, uint8_t *line, size_t size); + void vncws_encode_frame(Buffer *output, const void *payload, + const size_t payload_size); +-int vncws_decode_frame(Buffer *input, uint8_t **payload, +- size_t *payload_size, size_t *frame_size); ++int vncws_decode_frame_header(Buffer *input, ++ size_t *header_size, ++ size_t *payload_remain, ++ WsMask *payload_mask); ++int vncws_decode_frame_payload(Buffer *input, ++ size_t *payload_remain, WsMask *payload_mask, ++ uint8_t **payload, size_t *payload_size); + + #endif /* __QEMU_UI_VNC_WS_H */ +diff --git a/ui/vnc.h b/ui/vnc.h +index 6e99213..0efc5c6 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -290,6 +290,8 @@ struct VncState + #ifdef CONFIG_VNC_WS + Buffer ws_input; + Buffer ws_output; ++ size_t ws_payload_remain; ++ WsMask ws_payload_mask; + #endif + /* current output mode information */ + VncWritePixels *write_pixels; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-CVE-2015-1779-limit-size-of-HTTP-headers-from-websoc.patch b/SOURCES/kvm-CVE-2015-1779-limit-size-of-HTTP-headers-from-websoc.patch new file mode 100644 index 0000000..0647b15 --- /dev/null +++ b/SOURCES/kvm-CVE-2015-1779-limit-size-of-HTTP-headers-from-websoc.patch @@ -0,0 +1,70 @@ +From 62121d1bd1f17f5b9822b98f4ee2c9fd159b50e5 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 20 May 2015 08:39:09 +0200 +Subject: [PATCH 2/6] CVE-2015-1779: limit size of HTTP headers from websockets + clients + +Message-id: <1432111149-11644-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 65097 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] CVE-2015-1779: limit size of HTTP headers from websockets clients +Bugzilla: 1206497 +RH-Acked-by: Thomas Huth +RH-Acked-by: Petr Matousek +RH-Acked-by: Daniel P. Berrange + +From: "Daniel P. Berrange" + +The VNC server websockets decoder will read and buffer data from +websockets clients until it sees the end of the HTTP headers, +as indicated by \r\n\r\n. In theory this allows a malicious to +trick QEMU into consuming an arbitrary amount of RAM. In practice, +because QEMU runs g_strstr_len() across the buffered header data, +it will spend increasingly long burning CPU time searching for +the substring match and less & less time reading data. So while +this does cause arbitrary memory growth, the bigger problem is +that QEMU will be burning 100% of available CPU time. + +A novnc websockets client typically sends headers of around +512 bytes in length. As such it is reasonable to place a 4096 +byte limit on the amount of data buffered while searching for +the end of HTTP headers. + +Signed-off-by: Daniel P. Berrange +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 2cdb5e142fb93e875fa53c52864ef5eb8d5d8b41) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-ws.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/ui/vnc-ws.c b/ui/vnc-ws.c +index a7d457c..7133be9 100644 +--- a/ui/vnc-ws.c ++++ b/ui/vnc-ws.c +@@ -88,8 +88,11 @@ void vncws_handshake_read(void *opaque) + VncState *vs = opaque; + uint8_t *handshake_end; + long ret; +- buffer_reserve(&vs->ws_input, 4096); +- ret = vnc_client_read_buf(vs, buffer_end(&vs->ws_input), 4096); ++ /* Typical HTTP headers from novnc are 512 bytes, so limiting ++ * total header size to 4096 is easily enough. */ ++ size_t want = 4096 - vs->ws_input.offset; ++ buffer_reserve(&vs->ws_input, want); ++ ret = vnc_client_read_buf(vs, buffer_end(&vs->ws_input), want); + + if (!ret) { + if (vs->csock == -1) { +@@ -106,6 +109,9 @@ void vncws_handshake_read(void *opaque) + vncws_process_handshake(vs, vs->ws_input.buffer, vs->ws_input.offset); + buffer_advance(&vs->ws_input, handshake_end - vs->ws_input.buffer + + strlen(WS_HANDSHAKE_END)); ++ } else if (vs->ws_input.offset >= 4096) { ++ VNC_DEBUG("End of headers not found in first 4096 bytes\n"); ++ vnc_client_error(vs); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Convert-stderr-message-calling-error_get_pretty-to-e.patch b/SOURCES/kvm-Convert-stderr-message-calling-error_get_pretty-to-e.patch new file mode 100644 index 0000000..ba9f8b1 --- /dev/null +++ b/SOURCES/kvm-Convert-stderr-message-calling-error_get_pretty-to-e.patch @@ -0,0 +1,219 @@ +From a52fe59a941e8cfa7b94ecc743ffcfcf0e1bcda7 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 28 Aug 2013 15:50:45 +0200 +Subject: [PATCH 28/28] Convert stderr message calling error_get_pretty() to error_report() + +RH-Author: Laszlo Ersek +Message-id: <1377705045-1054-3-git-send-email-lersek@redhat.com> +Patchwork-id: 53887 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 2/2] Convert stderr message calling error_get_pretty() to error_report() +Bugzilla: 906937 +RH-Acked-by: Michal Novotny +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +Convert stderr messages calling error_get_pretty() +to error_report(). + +Timestamp is prepended by -msg timstamp option with it. + +Per Markus's comment below, A conversion from fprintf() to +error_report() is always an improvement, regardless of +error_get_pretty(). + +http://marc.info/?l=qemu-devel&m=137513283408601&w=2 + +But, it is not reasonable to convert them at one time +because fprintf() is used everwhere in qemu. + +So, it should be done step by step with avoiding regression. + +Signed-off-by: Seiji Aguchi +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 4a44d85e28bd282f53ccf0fa933dd71b8744a229) + +Conflicts: + + hw/char/serial.c + +RHEL-7 notes: + +- I dropped the "hw/char/serial.c" hunks because they depend on + upstream commit db895a1e ("isa: Use realizefn for ISADevice"): + + - serial_init_core(s); + + serial_realize_core(s, &err); + + Upstream commit db895a1e was first tagged in v1.6.0-rc0 and we don't + have it. + + Instead, I replaced the fprintf(stderr, ...) call in serial_init_core() + with a matching error_report() call, following Stefan's review of v2 + 2/2. +Signed-off-by: Laszlo Ersek +--- + arch_init.c | 4 ++-- + hw/char/serial.c | 3 ++- + hw/i386/pc.c | 6 +++--- + qemu-char.c | 2 +- + target-i386/cpu.c | 2 +- + target-ppc/translate_init.c | 3 ++- + vl.c | 9 +++++---- + 7 files changed, 16 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 4 ++-- + hw/char/serial.c | 3 ++- + hw/i386/pc.c | 6 +++--- + qemu-char.c | 2 +- + target-i386/cpu.c | 2 +- + target-ppc/translate_init.c | 3 ++- + vl.c | 9 +++++---- + 7 files changed, 16 insertions(+), 13 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 30edd5f..cd2bb5a 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -1069,8 +1069,8 @@ void do_acpitable_option(const QemuOpts *opts) + + acpi_table_add(opts, &err); + if (err) { +- fprintf(stderr, "Wrong acpi table provided: %s\n", +- error_get_pretty(err)); ++ error_report("Wrong acpi table provided: %s", ++ error_get_pretty(err)); + error_free(err); + exit(1); + } +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 66b6348..0c472e2 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -27,6 +27,7 @@ + #include "sysemu/char.h" + #include "qemu/timer.h" + #include "exec/address-spaces.h" ++#include "qemu/error-report.h" + + //#define DEBUG_SERIAL + +@@ -673,7 +674,7 @@ static void serial_reset(void *opaque) + void serial_init_core(SerialState *s) + { + if (!s->chr) { +- fprintf(stderr, "Can't create serial device, empty char device\n"); ++ error_report("Can't create serial device, empty char device"); + exit(1); + } + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index a7ecfb0..71b7a26 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -968,7 +968,7 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge) + cpu = pc_new_cpu(cpu_model, x86_cpu_apic_id_from_index(i), + icc_bridge, &error); + if (error) { +- fprintf(stderr, "%s\n", error_get_pretty(error)); ++ error_report("%s", error_get_pretty(error)); + error_free(error); + exit(1); + } +@@ -1007,8 +1007,8 @@ void pc_acpi_init(const char *default_dsdt) + + acpi_table_add(opts, &err); + if (err) { +- fprintf(stderr, "WARNING: failed to load %s: %s\n", filename, +- error_get_pretty(err)); ++ error_report("WARNING: failed to load %s: %s", filename, ++ error_get_pretty(err)); + error_free(err); + } + g_free(arg); +diff --git a/qemu-char.c b/qemu-char.c +index ccc9912..566267a 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3334,7 +3334,7 @@ CharDriverState *qemu_chr_new(const char *label, const char *filename, void (*in + + chr = qemu_chr_new_from_opts(opts, init, &err); + if (error_is_set(&err)) { +- fprintf(stderr, "%s\n", error_get_pretty(err)); ++ error_report("%s", error_get_pretty(err)); + error_free(err); + } + if (chr && qemu_opt_get_bool(opts, "mux", 0)) { +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 0ad8259..355375b 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1847,7 +1847,7 @@ X86CPU *cpu_x86_init(const char *cpu_model) + + out: + if (error) { +- fprintf(stderr, "%s\n", error_get_pretty(error)); ++ error_report("%s", error_get_pretty(error)); + error_free(error); + if (cpu != NULL) { + object_unref(OBJECT(cpu)); +diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c +index 2e2bffa..5a12c0e 100644 +--- a/target-ppc/translate_init.c ++++ b/target-ppc/translate_init.c +@@ -27,6 +27,7 @@ + #include "cpu-models.h" + #include "mmu-hash32.h" + #include "mmu-hash64.h" ++#include "qemu/error-report.h" + + //#define PPC_DUMP_CPU + //#define PPC_DEBUG_SPR +@@ -8027,7 +8028,7 @@ PowerPCCPU *cpu_ppc_init(const char *cpu_model) + + object_property_set_bool(OBJECT(cpu), true, "realized", &err); + if (err != NULL) { +- fprintf(stderr, "%s\n", error_get_pretty(err)); ++ error_report("%s", error_get_pretty(err)); + error_free(err); + object_unref(OBJECT(cpu)); + return NULL; +diff --git a/vl.c b/vl.c +index 0ce554d..51c04e7 100644 +--- a/vl.c ++++ b/vl.c +@@ -2363,7 +2363,7 @@ static int chardev_init_func(QemuOpts *opts, void *opaque) + + qemu_chr_new_from_opts(opts, NULL, &local_err); + if (error_is_set(&local_err)) { +- fprintf(stderr, "%s\n", error_get_pretty(local_err)); ++ error_report("%s", error_get_pretty(local_err)); + error_free(local_err); + return -1; + } +@@ -4393,8 +4393,8 @@ int main(int argc, char **argv, char **envp) + vnc_display_init(ds); + vnc_display_open(ds, vnc_display, &local_err); + if (local_err != NULL) { +- fprintf(stderr, "Failed to start VNC server on `%s': %s\n", +- vnc_display, error_get_pretty(local_err)); ++ error_report("Failed to start VNC server on `%s': %s", ++ vnc_display, error_get_pretty(local_err)); + error_free(local_err); + exit(1); + } +@@ -4437,7 +4437,8 @@ int main(int argc, char **argv, char **envp) + Error *local_err = NULL; + qemu_start_incoming_migration(incoming, &local_err); + if (local_err) { +- fprintf(stderr, "-incoming %s: %s\n", incoming, error_get_pretty(local_err)); ++ error_report("-incoming %s: %s", incoming, ++ error_get_pretty(local_err)); + error_free(local_err); + exit(1); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-Count-used-RAMBlock-pages-for-migration_dirty_pages.patch b/SOURCES/kvm-Count-used-RAMBlock-pages-for-migration_dirty_pages.patch new file mode 100644 index 0000000..3dd3540 --- /dev/null +++ b/SOURCES/kvm-Count-used-RAMBlock-pages-for-migration_dirty_pages.patch @@ -0,0 +1,87 @@ +From 20a401a160bb959469e95cc809b53609eedccb40 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 8 May 2014 11:27:33 +0200 +Subject: [PATCH 08/31] Count used RAMBlock pages for migration_dirty_pages + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1399548453-9181-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58746 +O-Subject: [RHEL7.1/RHEL7.0.z qemu-kvm PATCH 1/1] Count used RAMBlock pages for migration_dirty_pages +Bugzilla: 1074913 +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster +RH-Acked-by: Amit Shah + +From: "Dr. David Alan Gilbert" + +This is a fix for a bug* triggered by a migration after hot unplugging +a few virtio-net NICs, that caused migration never to converge, because +'migration_dirty_pages' is incorrectly initialised. + +'migration_dirty_pages' is used as a tally of the number of outstanding +dirty pages, to give the migration code an idea of how much more data +will need to be transferred, and thus whether it can end the iterative +phase. + +It was initialised to the total size of the RAMBlock address space, +however hotunplug can leave this space sparse, and hence +migration_dirty_pages ended up too large. + +Signed-off-by: Dr. David Alan Gilbert + +(* https://bugzilla.redhat.com/show_bug.cgi?id=1074913 ) + +Signed-off-by: Juan Quintela +(cherry picked from commit e30d1d8c7195848abb28a8c734a82b845b8b456a) +--- + arch_init.c | 21 +++++++++++++++++---- + 1 file changed, 17 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 21 +++++++++++++++++---- + 1 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 22f7def..b88d686 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -728,11 +728,8 @@ static void reset_ram_globals(void) + static int ram_save_setup(QEMUFile *f, void *opaque) + { + RAMBlock *block; +- int64_t ram_pages = last_ram_offset() >> TARGET_PAGE_BITS; ++ int64_t ram_bitmap_pages; /* Size of bitmap in pages, including gaps */ + +- migration_bitmap = bitmap_new(ram_pages); +- bitmap_set(migration_bitmap, 0, ram_pages); +- migration_dirty_pages = ram_pages; + mig_throttle_on = false; + dirty_rate_high_cnt = 0; + +@@ -771,6 +768,22 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + bytes_transferred = 0; + reset_ram_globals(); + ++ ram_bitmap_pages = last_ram_offset() >> TARGET_PAGE_BITS; ++ migration_bitmap = bitmap_new(ram_bitmap_pages); ++ bitmap_set(migration_bitmap, 0, ram_bitmap_pages); ++ ++ /* ++ * Count the total number of pages used by ram blocks not including any ++ * gaps due to alignment or unplugs. ++ */ ++ migration_dirty_pages = 0; ++ QTAILQ_FOREACH(block, &ram_list.blocks, next) { ++ uint64_t block_pages; ++ ++ block_pages = block->length >> TARGET_PAGE_BITS; ++ migration_dirty_pages += block_pages; ++ } ++ + memory_global_dirty_log_start(); + migration_bitmap_sync(); + qemu_mutex_unlock_iothread(); +-- +1.7.1 + diff --git a/SOURCES/kvm-Define-the-architecture-for-compressed-dump-format.patch b/SOURCES/kvm-Define-the-architecture-for-compressed-dump-format.patch new file mode 100644 index 0000000..44206f1 --- /dev/null +++ b/SOURCES/kvm-Define-the-architecture-for-compressed-dump-format.patch @@ -0,0 +1,90 @@ +From da105287a0b61d57f015299cdf5211ba2e21a70f Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:04 +0100 +Subject: [PATCH 17/41] Define the architecture for compressed dump format + +Message-id: <1415380693-16593-18-git-send-email-lersek@redhat.com> +Patchwork-id: 62203 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 17/26] Define the architecture for compressed dump format +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +Signed-off-by: Ekaterina Tumanova +Reviewed-by: Laszlo Ersek +Reviewed-by: Qiao Nuohan +Signed-off-by: Luiz Capitulino +(cherry picked from commit 4ab23a918249772458fd330758dc0fad96edce50) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 7 +++++-- + target-i386/cpu.h | 2 ++ + target-s390x/cpu.h | 1 + + 3 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/dump.c b/dump.c +index c0d5877..507a250 100644 +--- a/dump.c ++++ b/dump.c +@@ -32,6 +32,9 @@ + #ifdef CONFIG_SNAPPY + #include + #endif ++#ifndef ELF_MACHINE_UNAME ++#define ELF_MACHINE_UNAME "Unknown" ++#endif + + static uint16_t cpu_convert_to_target16(uint16_t val, int endian) + { +@@ -823,7 +826,7 @@ static int create_header32(DumpState *s) + dh->nr_cpus = cpu_convert_to_target32(s->nr_cpus, endian); + bitmap_blocks = DIV_ROUND_UP(s->len_dump_bitmap, block_size) * 2; + dh->bitmap_blocks = cpu_convert_to_target32(bitmap_blocks, endian); +- memcpy(&(dh->utsname.machine), "i686", 4); ++ strncpy(dh->utsname.machine, ELF_MACHINE_UNAME, sizeof(dh->utsname.machine)); + + if (s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) { + status |= DUMP_DH_COMPRESSED_ZLIB; +@@ -930,7 +933,7 @@ static int create_header64(DumpState *s) + dh->nr_cpus = cpu_convert_to_target32(s->nr_cpus, endian); + bitmap_blocks = DIV_ROUND_UP(s->len_dump_bitmap, block_size) * 2; + dh->bitmap_blocks = cpu_convert_to_target32(bitmap_blocks, endian); +- memcpy(&(dh->utsname.machine), "x86_64", 6); ++ strncpy(dh->utsname.machine, ELF_MACHINE_UNAME, sizeof(dh->utsname.machine)); + + if (s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) { + status |= DUMP_DH_COMPRESSED_ZLIB; +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index ad40aab..207645c 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -38,8 +38,10 @@ + + #ifdef TARGET_X86_64 + #define ELF_MACHINE EM_X86_64 ++#define ELF_MACHINE_UNAME "x86_64" + #else + #define ELF_MACHINE EM_386 ++#define ELF_MACHINE_UNAME "i686" + #endif + + #define CPUArchState struct CPUX86State +diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h +index 0ce82cf..4979e0e 100644 +--- a/target-s390x/cpu.h ++++ b/target-s390x/cpu.h +@@ -28,6 +28,7 @@ + #define TARGET_LONG_BITS 64 + + #define ELF_MACHINE EM_S390 ++#define ELF_MACHINE_UNAME "S390X" + + #define CPUArchState struct CPUS390XState + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Disable-isa-parallel.patch b/SOURCES/kvm-Disable-isa-parallel.patch new file mode 100644 index 0000000..2946508 --- /dev/null +++ b/SOURCES/kvm-Disable-isa-parallel.patch @@ -0,0 +1,158 @@ +From 50a34ddf34ea04ffddc36b16401ddcb0c5679e80 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 30 Aug 2013 08:51:26 +0200 +Subject: [PATCH 07/29] Disable isa-parallel + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 53938 +O-Subject: [RHEL7 qemu-kvm PATCHv2 6/6] Disable isa-parallel +Bugzilla: 1002286 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +From: Miroslav Rezanina + +We are not going to support isa-parallel device so disabling it. + +Signed-off-by: Miroslav Rezanina + +v2: + - new patch +--- + default-configs/i386-softmmu.mak | 1 - + default-configs/mips-softmmu.mak | 1 - + default-configs/mips64-softmmu.mak | 1 - + default-configs/mips64el-softmmu.mak | 1 - + default-configs/mipsel-softmmu.mak | 1 - + default-configs/ppc-softmmu.mak | 1 - + default-configs/ppc64-softmmu.mak | 1 - + default-configs/sparc64-softmmu.mak | 1 - + default-configs/x86_64-softmmu.mak | 1 - + 9 files changed, 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/i386-softmmu.mak | 1 - + default-configs/mips-softmmu.mak | 1 - + default-configs/mips64-softmmu.mak | 1 - + default-configs/mips64el-softmmu.mak | 1 - + default-configs/mipsel-softmmu.mak | 1 - + default-configs/ppc-softmmu.mak | 1 - + default-configs/ppc64-softmmu.mak | 1 - + default-configs/sparc64-softmmu.mak | 1 - + default-configs/x86_64-softmmu.mak | 1 - + 9 files changed, 0 insertions(+), 9 deletions(-) + +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index cf6ee9f..54df7bd 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_ISA=y + CONFIG_VGA_CIRRUS=y + CONFIG_VMMOUSE=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +diff --git a/default-configs/mips-softmmu.mak b/default-configs/mips-softmmu.mak +index 3c5fb43..b4eef8c 100644 +--- a/default-configs/mips-softmmu.mak ++++ b/default-configs/mips-softmmu.mak +@@ -11,7 +11,6 @@ CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +diff --git a/default-configs/mips64-softmmu.mak b/default-configs/mips64-softmmu.mak +index c05d44a..c7a9232 100644 +--- a/default-configs/mips64-softmmu.mak ++++ b/default-configs/mips64-softmmu.mak +@@ -11,7 +11,6 @@ CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +diff --git a/default-configs/mips64el-softmmu.mak b/default-configs/mips64el-softmmu.mak +index 40aaea5..79bdfdb 100644 +--- a/default-configs/mips64el-softmmu.mak ++++ b/default-configs/mips64el-softmmu.mak +@@ -11,7 +11,6 @@ CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +diff --git a/default-configs/mipsel-softmmu.mak b/default-configs/mipsel-softmmu.mak +index ca44d0e..beb6819 100644 +--- a/default-configs/mipsel-softmmu.mak ++++ b/default-configs/mipsel-softmmu.mak +@@ -11,7 +11,6 @@ CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak +index 5f70181..7f6ea0f 100644 +--- a/default-configs/ppc-softmmu.mak ++++ b/default-configs/ppc-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_M48T59=y + CONFIG_VGA=y + CONFIG_VGA_PCI=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCKBD=y + CONFIG_FDC=y +diff --git a/default-configs/ppc64-softmmu.mak b/default-configs/ppc64-softmmu.mak +index 0e8ff62..29a8be6 100644 +--- a/default-configs/ppc64-softmmu.mak ++++ b/default-configs/ppc64-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_M48T59=y + CONFIG_VGA=y + CONFIG_VGA_PCI=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCKBD=y + CONFIG_FDC=y +diff --git a/default-configs/sparc64-softmmu.mak b/default-configs/sparc64-softmmu.mak +index 9b08ee8..2998f34 100644 +--- a/default-configs/sparc64-softmmu.mak ++++ b/default-configs/sparc64-softmmu.mak +@@ -8,7 +8,6 @@ CONFIG_PTIMER=y + CONFIG_VGA=y + CONFIG_VGA_PCI=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_PCKBD=y + CONFIG_FDC=y + CONFIG_IDE_ISA=y +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index 4234f00..05cc2a3 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -10,7 +10,6 @@ CONFIG_VGA_ISA=y + CONFIG_VGA_CIRRUS=y + CONFIG_VMMOUSE=y + CONFIG_SERIAL=y +-CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +-- +1.7.1 + diff --git a/SOURCES/kvm-Disable-usb-uas.patch b/SOURCES/kvm-Disable-usb-uas.patch new file mode 100644 index 0000000..4982d66 --- /dev/null +++ b/SOURCES/kvm-Disable-usb-uas.patch @@ -0,0 +1,44 @@ +From 99ea614bff3d383fbd6910ae0d66912fc15eba57 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 30 Aug 2013 08:51:23 +0200 +Subject: [PATCH 04/29] Disable usb-uas + +RH-Author: Miroslav Rezanina +Message-id: <95623a002492b1f8117e0f99e2b1163f2a2a4071.1377851454.git.mrezanin@redhat.com> +Patchwork-id: 53934 +O-Subject: [RHEL7 qemu-kvm PATCHv2 3/6] Disable usb-uas +Bugzilla: 903914 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +From: Miroslav Rezanina + +BZ: 903914 + +As usb3 streams are still broken, we do not need usb-uas device. + +v2: + - new patch +Signed-off-by: Miroslav Rezanina +--- + default-configs/usb.mak | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/usb.mak | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/default-configs/usb.mak b/default-configs/usb.mak +index 39a3552..55c37f0 100644 +--- a/default-configs/usb.mak ++++ b/default-configs/usb.mak +@@ -1,3 +1,2 @@ + CONFIG_USB_STORAGE_BOT=y +-CONFIG_USB_STORAGE_UAS=y + CONFIG_USB_SMARTCARD=y +-- +1.7.1 + diff --git a/SOURCES/kvm-Disallow-outward-migration-while-awaiting-incoming-m.patch b/SOURCES/kvm-Disallow-outward-migration-while-awaiting-incoming-m.patch new file mode 100644 index 0000000..a4b93a0 --- /dev/null +++ b/SOURCES/kvm-Disallow-outward-migration-while-awaiting-incoming-m.patch @@ -0,0 +1,62 @@ +From 6bdff9954d46304a278bff833ecb15450c19c4f5 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 8 May 2014 11:52:12 +0200 +Subject: [PATCH 05/13] Disallow outward migration while awaiting incoming migration +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1399549932-9977-1-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58747 +O-Subject: [RHEL7.1 qemu-kvm PATCH 1/1] Disallow outward migration while awaiting incoming migration +Bugzilla: 1086987 +RH-Acked-by: Amos Kong +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster + +From: "Dr. David Alan Gilbert" + +bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1086987 +brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7432751 +upstream: ca99993adc9205c905dba5dc1bb819959ada7200 + +QEMU will assert if you attempt to start an outgoing migration on +a QEMU that's sitting waiting for an incoming migration (started +with -incoming), so disallow it with a proper error. + +(This is a fix for https://bugzilla.redhat.com/show_bug.cgi?id=1086987 ) + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Andreas Färber +Reviewed-by: Eric Blake +Signed-off-by: Juan Quintela +(cherry picked from commit ca99993adc9205c905dba5dc1bb819959ada7200) +--- + migration.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/migration.c b/migration.c +index 7efbd25..44b993a 100644 +--- a/migration.c ++++ b/migration.c +@@ -430,6 +430,11 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + return; + } + ++ if (runstate_check(RUN_STATE_INMIGRATE)) { ++ error_setg(errp, "Guest is waiting for an incoming migration"); ++ return; ++ } ++ + if (qemu_savevm_state_blocked(errp)) { + return; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-Do-not-build-bluetooth-support.patch b/SOURCES/kvm-Do-not-build-bluetooth-support.patch new file mode 100644 index 0000000..d3683df --- /dev/null +++ b/SOURCES/kvm-Do-not-build-bluetooth-support.patch @@ -0,0 +1,117 @@ +From d930ba960a1abaf8b76e507707a7fe081a376741 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Mon, 17 Dec 2018 11:04:15 +0100 +Subject: [PATCH 2/2] Do not build bluetooth support + +RH-Author: Miroslav Rezanina +Message-id: <1545044655-7801-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 83537 +O-Subject: [RHEL-7.7 qemu-kvm PATCH] Do not build bluetooth support +Bugzilla: 1654627 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Danilo de Paula +RH-Acked-by: Markus Armbruster + +From: Miroslav Rezanina + +We do not support bt devices however some bt related code is built in. +As this code is deprecated upstream disabling build of this code downstream. + +Signed-off-by: Miroslav Rezanina +--- + Makefile.objs | 2 +- + hw/bt/Makefile.objs | 4 ++-- + qemu-options.hx | 2 ++ + vl.c | 6 ++++++ + 4 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/Makefile.objs b/Makefile.objs +index 74f722e44e..1712ee6133 100644 +--- a/Makefile.objs ++++ b/Makefile.objs +@@ -64,7 +64,7 @@ common-obj-y += audio/ + common-obj-y += hw/ + + common-obj-y += ui/ +-common-obj-y += bt-host.o bt-vhci.o ++#common-obj-y += bt-host.o bt-vhci.o + + common-obj-y += dma-helpers.o + common-obj-y += vl.o +diff --git a/hw/bt/Makefile.objs b/hw/bt/Makefile.objs +index 867a7d2e8a..e678e9ee3c 100644 +--- a/hw/bt/Makefile.objs ++++ b/hw/bt/Makefile.objs +@@ -1,3 +1,3 @@ +-common-obj-y += core.o l2cap.o sdp.o hci.o hid.o +-common-obj-y += hci-csr.o ++#common-obj-y += core.o l2cap.o sdp.o hci.o hid.o ++#common-obj-y += hci-csr.o + +diff --git a/qemu-options.hx b/qemu-options.hx +index 24ffab6a50..bcf1b8f755 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -2157,6 +2157,7 @@ STEXI + @end table + ETEXI + ++#if 0 + DEFHEADING(Bluetooth(R) options:) + STEXI + @table @option +@@ -2231,6 +2232,7 @@ STEXI + @end table + ETEXI + DEFHEADING() ++#endif + + #ifdef CONFIG_TPM + DEFHEADING(TPM device options:) +diff --git a/vl.c b/vl.c +index 7c34b7c64f..5c5cdbe88b 100644 +--- a/vl.c ++++ b/vl.c +@@ -840,6 +840,7 @@ static void configure_rtc(QemuOpts *opts) + } + } + ++#if 0 // Disabled for Red Hat Enterprise Linux + /***********************************************************/ + /* Bluetooth support */ + static int nb_hcis; +@@ -961,6 +962,7 @@ static int bt_parse(const char *opt) + fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt); + return 1; + } ++#endif + + static int parse_sandbox(QemuOpts *opts, void *opaque) + { +@@ -3132,9 +3134,11 @@ int main(int argc, char **argv, char **envp) + exit(1); + break; + #endif ++#if 0 // Disabled for Red Hat Enterprise Linux + case QEMU_OPTION_bt: + add_device_config(DEV_BT, optarg); + break; ++#endif + case QEMU_OPTION_audio_help: + AUD_help (); + exit (0); +@@ -4113,9 +4117,11 @@ int main(int argc, char **argv, char **envp) + } + #endif + ++#if 0 // Disabled for Red Hat Enterprise Linux + /* init the bluetooth world */ + if (foreach_device_config(DEV_BT, bt_parse)) + exit(1); ++#endif + + if (!xen_enabled()) { + /* On 32-bit hosts, QEMU is limited by virtual address space */ +-- +2.19.1 + diff --git a/SOURCES/kvm-Do-not-hang-on-full-PTY.patch b/SOURCES/kvm-Do-not-hang-on-full-PTY.patch new file mode 100644 index 0000000..d7b9524 --- /dev/null +++ b/SOURCES/kvm-Do-not-hang-on-full-PTY.patch @@ -0,0 +1,40 @@ +From 40f55392d0bbe867547e5705c2be21d65924b024 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 9 Jun 2017 11:43:57 +0200 +Subject: [PATCH 2/6] Do not hang on full PTY + +RH-Author: Paolo Bonzini +Message-id: <20170609114359.13036-2-pbonzini@redhat.com> +Patchwork-id: 75565 +O-Subject: [RHEL7.4 qemu-kvm PATCH v2 1/3] Do not hang on full PTY +Bugzilla: 1452067 +RH-Acked-by: David Hildenbrand +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laszlo Ersek + +From: Don Slutz + +Signed-off-by: Don Slutz +Reviewed-by: Paolo Bonzini +Signed-off-by: Michael Tokarev +(cherry picked from commit fac6688a18574b6f2caa8c699a936e729ed53ece) +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/qemu-char.c b/qemu-char.c +index 5edca0a..08b2301 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -1182,6 +1182,7 @@ static CharDriverState *qemu_chr_open_pty(const char *id, + } + + close(slave_fd); ++ qemu_set_nonblock(master_fd); + + chr = g_malloc0(sizeof(CharDriverState)); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Documentation-qemu-img-Mention-SIGUSR1-progress-repo.patch b/SOURCES/kvm-Documentation-qemu-img-Mention-SIGUSR1-progress-repo.patch new file mode 100644 index 0000000..b439801 --- /dev/null +++ b/SOURCES/kvm-Documentation-qemu-img-Mention-SIGUSR1-progress-repo.patch @@ -0,0 +1,49 @@ +From 19b8051f791f74ed46a51fff8c74a51bf11dd23d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 11 Feb 2014 16:24:44 +0100 +Subject: [PATCH 27/28] Documentation: qemu-img: Mention SIGUSR1 progress report + +RH-Author: Kevin Wolf +Message-id: <1392135884-10508-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 57224 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/3] Documentation: qemu-img: Mention SIGUSR1 progress report +Bugzilla: 997878 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +Document the SIGUSR1 behaviour of qemu-img. Also, added compare to the +list of subcommands that support -p. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit 0e3bd9932f862c1c1e4926939b4d0c602ce214ef) + +Signed-off-by: Kevin Wolf +--- + qemu-img.texi | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.texi | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/qemu-img.texi b/qemu-img.texi +index d75a780..7c28759 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -53,7 +53,9 @@ indicates that target image must be compressed (qcow format only) + @item -h + with or without a command shows help and lists the supported formats + @item -p +-display progress bar (convert and rebase commands only) ++display progress bar (compare, convert and rebase commands only). ++If the @var{-p} option is not used for a command that supports it, the ++progress is reported when the process receives a @code{SIGUSR1} signal. + @item -q + Quiet mode - do not print any output (except errors). There's no progress bar + in case both @var{-q} and @var{-p} options are used. +-- +1.7.1 + diff --git a/SOURCES/kvm-Don-t-abort-on-memory-allocation-error.patch b/SOURCES/kvm-Don-t-abort-on-memory-allocation-error.patch new file mode 100644 index 0000000..ab25f80 --- /dev/null +++ b/SOURCES/kvm-Don-t-abort-on-memory-allocation-error.patch @@ -0,0 +1,111 @@ +From b75b57e4a5b75f03c5d302ced1287f47de6c9ccc Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 11 Feb 2014 15:32:37 +0100 +Subject: [PATCH 16/28] Don't abort on memory allocation error + +RH-Author: Orit Wasserman +Message-id: <1392132757-18587-4-git-send-email-owasserm@redhat.com> +Patchwork-id: 57211 +O-Subject: [RHEL7 qemu-kvm PATCH 3/3] Don't abort on memory allocation error +Bugzilla: 1047448 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +It is better to fail migration in case of failure to +allocate new cache item + +Signed-off-by: Orit Wasserman +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit 89db9987c07977bdb78d5d4b41d65e7acb9a5a2c) +--- + arch_init.c | 4 +++- + include/migration/page_cache.h | 4 +++- + page_cache.c | 16 +++++++++++----- + 3 files changed, 17 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 4 +++- + include/migration/page_cache.h | 4 +++- + page_cache.c | 16 +++++++++++----- + 3 files changed, 17 insertions(+), 7 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index fc0f569..0aacdac 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -286,7 +286,9 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data, + + if (!cache_is_cached(XBZRLE.cache, current_addr)) { + if (!last_stage) { +- cache_insert(XBZRLE.cache, current_addr, current_data); ++ if (cache_insert(XBZRLE.cache, current_addr, current_data) == -1) { ++ return -1; ++ } + } + acct_info.xbzrle_cache_miss++; + return -1; +diff --git a/include/migration/page_cache.h b/include/migration/page_cache.h +index 87894fe..d156f0d 100644 +--- a/include/migration/page_cache.h ++++ b/include/migration/page_cache.h +@@ -60,11 +60,13 @@ uint8_t *get_cached_data(const PageCache *cache, uint64_t addr); + * cache_insert: insert the page into the cache. the page cache + * will dup the data on insert. the previous value will be overwritten + * ++ * Returns -1 on error ++ * + * @cache pointer to the PageCache struct + * @addr: page address + * @pdata: pointer to the page + */ +-void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata); ++int cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata); + + /** + * cache_resize: resize the page cache. In case of size reduction the extra +diff --git a/page_cache.c b/page_cache.c +index 2920123..250772d 100644 +--- a/page_cache.c ++++ b/page_cache.c +@@ -151,7 +151,7 @@ uint8_t *get_cached_data(const PageCache *cache, uint64_t addr) + return cache_get_by_addr(cache, addr)->it_data; + } + +-void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata) ++int cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata) + { + + CacheItem *it = NULL; +@@ -162,16 +162,22 @@ void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata) + /* actual update of entry */ + it = cache_get_by_addr(cache, addr); + +- /* free old cached data if any */ +- g_free(it->it_data); +- ++ /* allocate page */ + if (!it->it_data) { ++ it->it_data = g_try_malloc(cache->page_size); ++ if (!it->it_data) { ++ DPRINTF("Error allocating page\n"); ++ return -1; ++ } + cache->num_items++; + } + +- it->it_data = g_memdup(pdata, cache->page_size); ++ memcpy(it->it_data, pdata, cache->page_size); ++ + it->it_age = ++cache->max_item_age; + it->it_addr = addr; ++ ++ return 0; + } + + int64_t cache_resize(PageCache *cache, int64_t new_num_pages) +-- +1.7.1 + diff --git a/SOURCES/kvm-Don-t-abort-on-out-of-memory-when-creating-page-cach.patch b/SOURCES/kvm-Don-t-abort-on-out-of-memory-when-creating-page-cach.patch new file mode 100644 index 0000000..2d60644 --- /dev/null +++ b/SOURCES/kvm-Don-t-abort-on-out-of-memory-when-creating-page-cach.patch @@ -0,0 +1,97 @@ +From f58c7c6f3574f28df445c67a378aec5a33285374 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 11 Feb 2014 15:32:36 +0100 +Subject: [PATCH 15/28] Don't abort on out of memory when creating page cache + +RH-Author: Orit Wasserman +Message-id: <1392132757-18587-3-git-send-email-owasserm@redhat.com> +Patchwork-id: 57210 +O-Subject: [RHEL7 qemu-kvm PATCH 2/3] Don't abort on out of memory when creating page cache +Bugzilla: 1047448 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Orit Wasserman +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit a17b2fd3580d1da96e806c8b58e61255e8c57577) +--- + arch_init.c | 18 ++++++++++++++++-- + page_cache.c | 18 ++++++++++++++---- + 2 files changed, 30 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 18 ++++++++++++++++-- + page_cache.c | 18 ++++++++++++++---- + 2 files changed, 30 insertions(+), 6 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index c3207bf..fc0f569 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -659,8 +659,22 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + DPRINTF("Error creating cache\n"); + return -1; + } +- XBZRLE.encoded_buf = g_malloc0(TARGET_PAGE_SIZE); +- XBZRLE.current_buf = g_malloc(TARGET_PAGE_SIZE); ++ ++ /* We prefer not to abort if there is no memory */ ++ XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE); ++ if (!XBZRLE.encoded_buf) { ++ DPRINTF("Error allocating encoded_buf\n"); ++ return -1; ++ } ++ ++ XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE); ++ if (!XBZRLE.current_buf) { ++ DPRINTF("Error allocating current_buf\n"); ++ g_free(XBZRLE.encoded_buf); ++ XBZRLE.encoded_buf = NULL; ++ return -1; ++ } ++ + acct_clear(); + } + +diff --git a/page_cache.c b/page_cache.c +index 938a79c..2920123 100644 +--- a/page_cache.c ++++ b/page_cache.c +@@ -61,8 +61,12 @@ PageCache *cache_init(int64_t num_pages, unsigned int page_size) + return NULL; + } + +- cache = g_malloc(sizeof(*cache)); +- ++ /* We prefer not to abort if there is no memory */ ++ cache = g_try_malloc(sizeof(*cache)); ++ if (!cache) { ++ DPRINTF("Failed to allocate cache\n"); ++ return NULL; ++ } + /* round down to the nearest power of 2 */ + if (!is_power_of_2(num_pages)) { + num_pages = pow2floor(num_pages); +@@ -75,8 +79,14 @@ PageCache *cache_init(int64_t num_pages, unsigned int page_size) + + DPRINTF("Setting cache buckets to %" PRId64 "\n", cache->max_num_items); + +- cache->page_cache = g_malloc((cache->max_num_items) * +- sizeof(*cache->page_cache)); ++ /* We prefer not to abort if there is no memory */ ++ cache->page_cache = g_try_malloc((cache->max_num_items) * ++ sizeof(*cache->page_cache)); ++ if (!cache->page_cache) { ++ DPRINTF("Failed to allocate cache->page_cache\n"); ++ g_free(cache); ++ return NULL; ++ } + + for (i = 0; i < cache->max_num_items; i++) { + cache->page_cache[i].it_data = NULL; +-- +1.7.1 + diff --git a/SOURCES/kvm-Drop-superfluous-conditionals-around-g_strdup.patch b/SOURCES/kvm-Drop-superfluous-conditionals-around-g_strdup.patch new file mode 100644 index 0000000..ced2cb6 --- /dev/null +++ b/SOURCES/kvm-Drop-superfluous-conditionals-around-g_strdup.patch @@ -0,0 +1,141 @@ +From beb312b86b7ee776bbaea14d3c7625ec8d2d8402 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:19 +0200 +Subject: [PATCH 1/7] Drop superfluous conditionals around g_strdup() + +Message-id: <1441735585-23432-2-git-send-email-armbru@redhat.com> +Patchwork-id: 67708 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/7] Drop superfluous conditionals around g_strdup() +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +Signed-off-by: Markus Armbruster +Reviewed-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Michael Tokarev +(cherry picked from commit 24588100ab39afead7b9a0e9c61182a02320a1b9) +Signed-off-by: Miroslav Rezanina +--- + backends/rng-random.c | 6 +----- + hw/tpm/tpm_passthrough.c | 4 +--- + util/uri.c | 43 +++++++++++++++++-------------------------- + 3 files changed, 19 insertions(+), 34 deletions(-) + +diff --git a/backends/rng-random.c b/backends/rng-random.c +index 68dfc8a..573a64e 100644 +--- a/backends/rng-random.c ++++ b/backends/rng-random.c +@@ -88,11 +88,7 @@ static char *rng_random_get_filename(Object *obj, Error **errp) + { + RndRandom *s = RNG_RANDOM(obj); + +- if (s->filename) { +- return g_strdup(s->filename); +- } +- +- return NULL; ++ return g_strdup(s->filename); + } + + static void rng_random_set_filename(Object *obj, const char *filename, +diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c +index 56e9e0f..2bf3c6f 100644 +--- a/hw/tpm/tpm_passthrough.c ++++ b/hw/tpm/tpm_passthrough.c +@@ -400,9 +400,7 @@ static int tpm_passthrough_handle_device_opts(QemuOpts *opts, TPMBackend *tb) + const char *value; + + value = qemu_opt_get(opts, "cancel-path"); +- if (value) { +- tb->cancel_path = g_strdup(value); +- } ++ tb->cancel_path = g_strdup(value); + + value = qemu_opt_get(opts, "path"); + if (!value) { +diff --git a/util/uri.c b/util/uri.c +index e348c17..bbf2832 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -1736,24 +1736,21 @@ uri_resolve(const char *uri, const char *base) { + goto done; + if ((ref->scheme == NULL) && (ref->path == NULL) && + ((ref->authority == NULL) && (ref->server == NULL))) { +- if (bas->scheme != NULL) +- res->scheme = g_strdup(bas->scheme); ++ res->scheme = g_strdup(bas->scheme); + if (bas->authority != NULL) + res->authority = g_strdup(bas->authority); + else if (bas->server != NULL) { +- res->server = g_strdup(bas->server); +- if (bas->user != NULL) +- res->user = g_strdup(bas->user); +- res->port = bas->port; ++ res->server = g_strdup(bas->server); ++ res->user = g_strdup(bas->user); ++ res->port = bas->port; + } +- if (bas->path != NULL) +- res->path = g_strdup(bas->path); +- if (ref->query != NULL) ++ res->path = g_strdup(bas->path); ++ if (ref->query != NULL) { + res->query = g_strdup (ref->query); +- else if (bas->query != NULL) +- res->query = g_strdup(bas->query); +- if (ref->fragment != NULL) +- res->fragment = g_strdup(ref->fragment); ++ } else { ++ res->query = g_strdup(bas->query); ++ } ++ res->fragment = g_strdup(ref->fragment); + goto step_7; + } + +@@ -1767,13 +1764,10 @@ uri_resolve(const char *uri, const char *base) { + val = uri_to_string(ref); + goto done; + } +- if (bas->scheme != NULL) +- res->scheme = g_strdup(bas->scheme); ++ res->scheme = g_strdup(bas->scheme); + +- if (ref->query != NULL) +- res->query = g_strdup(ref->query); +- if (ref->fragment != NULL) +- res->fragment = g_strdup(ref->fragment); ++ res->query = g_strdup(ref->query); ++ res->fragment = g_strdup(ref->fragment); + + /* + * 4) If the authority component is defined, then the reference is a +@@ -1787,20 +1781,17 @@ uri_resolve(const char *uri, const char *base) { + res->authority = g_strdup(ref->authority); + else { + res->server = g_strdup(ref->server); +- if (ref->user != NULL) +- res->user = g_strdup(ref->user); ++ res->user = g_strdup(ref->user); + res->port = ref->port; + } +- if (ref->path != NULL) +- res->path = g_strdup(ref->path); ++ res->path = g_strdup(ref->path); + goto step_7; + } + if (bas->authority != NULL) + res->authority = g_strdup(bas->authority); + else if (bas->server != NULL) { +- res->server = g_strdup(bas->server); +- if (bas->user != NULL) +- res->user = g_strdup(bas->user); ++ res->server = g_strdup(bas->server); ++ res->user = g_strdup(bas->user); + res->port = bas->port; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-DumpState-adding-total_size-and-written_size-fields.patch b/SOURCES/kvm-DumpState-adding-total_size-and-written_size-fields.patch new file mode 100644 index 0000000..cc00535 --- /dev/null +++ b/SOURCES/kvm-DumpState-adding-total_size-and-written_size-fields.patch @@ -0,0 +1,131 @@ +From 60e8f031af3ca219ac6344c6028fe009eddf8c19 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:59 +0100 +Subject: [PATCH 28/41] DumpState: adding total_size and written_size fields +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-29-marcandre.lureau@redhat.com> +Patchwork-id: 78382 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 28/41] DumpState: adding total_size and written_size fields +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Peter Xu + +Here, total_size is the size in bytes to be dumped (raw data, which +means before compression), while written_size are bytes handled (raw +size too). + +Signed-off-by: Peter Xu +Message-Id: <1455772616-8668-9-git-send-email-peterx@redhat.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 2264c2c96e0a1f0913412da73e9bcaf9f8fa4427) + +RHEL: minor conflict due to "detach" mode not being backported. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 32 ++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 8 ++++++++ + 2 files changed, 40 insertions(+) + +diff --git a/dump.c b/dump.c +index 8618230..008a722 100644 +--- a/dump.c ++++ b/dump.c +@@ -336,6 +336,8 @@ static void write_data(DumpState *s, void *buf, int length, Error **errp) + ret = fd_write_vmcore(buf, length, s); + if (ret < 0) { + error_setg(errp, "dump: failed to save memory"); ++ } else { ++ s->written_size += length; + } + } + +@@ -1329,6 +1331,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + goto out; + } + } ++ s->written_size += s->dump_info.page_size; + } + + ret = write_cache(&page_desc, NULL, 0, true); +@@ -1461,6 +1464,30 @@ bool dump_in_progress(void) + return (state->status == DUMP_STATUS_ACTIVE); + } + ++/* calculate total size of memory to be dumped (taking filter into ++ * acoount.) */ ++static int64_t dump_calculate_size(DumpState *s) ++{ ++ GuestPhysBlock *block; ++ int64_t size = 0, total = 0, left = 0, right = 0; ++ ++ QTAILQ_FOREACH(block, &s->guest_phys_blocks.head, next) { ++ if (s->has_filter) { ++ /* calculate the overlapped region. */ ++ left = MAX(s->begin, block->target_start); ++ right = MIN(s->begin + s->length, block->target_end); ++ size = right - left; ++ size = size > 0 ? size : 0; ++ } else { ++ /* count the whole region in */ ++ size = (block->target_end - block->target_start); ++ } ++ total += size; ++ } ++ ++ return total; ++} ++ + static void dump_init(DumpState *s, int fd, bool has_format, + DumpGuestMemoryFormat format, bool paging, bool has_filter, + int64_t begin, int64_t length, Error **errp) +@@ -1472,6 +1499,7 @@ static void dump_init(DumpState *s, int fd, bool has_format, + + s->has_format = has_format; + s->format = format; ++ s->written_size = 0; + + /* kdump-compressed is conflict with paging and filter */ + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +@@ -1503,6 +1531,10 @@ static void dump_init(DumpState *s, int fd, bool has_format, + + guest_phys_blocks_init(&s->guest_phys_blocks); + guest_phys_blocks_append(&s->guest_phys_blocks); ++ s->total_size = dump_calculate_size(s); ++#ifdef DEBUG_DUMP_GUEST_MEMORY ++ fprintf(stderr, "DUMP: total memory to dump: %lu\n", s->total_size); ++#endif + + s->start = get_start_block(s); + if (s->start == -1) { +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 1da3ddb..b5ebb0a 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -181,6 +181,14 @@ typedef struct DumpState { + + bool has_format; /* whether format is provided */ + DumpGuestMemoryFormat format; /* valid only if has_format == true */ ++ int64_t total_size; /* total memory size (in bytes) to ++ * be dumped. When filter is ++ * enabled, this will only count ++ * those to be written. */ ++ int64_t written_size; /* written memory size (in bytes), ++ * this could be used to calculate ++ * how much work we have ++ * finished. */ + } DumpState; + + uint16_t cpu_to_dump16(DumpState *s, uint16_t val); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Enable-fw_cfg-DMA-interface-for-x86.patch b/SOURCES/kvm-Enable-fw_cfg-DMA-interface-for-x86.patch new file mode 100644 index 0000000..6c33e65 --- /dev/null +++ b/SOURCES/kvm-Enable-fw_cfg-DMA-interface-for-x86.patch @@ -0,0 +1,68 @@ +From f7572e4bdfc5c0c57d6a37712c6f5b79cc86e063 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:39 +0100 +Subject: [PATCH 08/41] Enable fw_cfg DMA interface for x86 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-9-marcandre.lureau@redhat.com> +Patchwork-id: 78357 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 08/41] Enable fw_cfg DMA interface for x86 +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Marc Marí + +Enable the fw_cfg DMA interface for all the x86 platforms. + +Based on Gerd Hoffman's initial implementation. + +Signed-off-by: Marc Marí +Reviewed-by: Laszlo Ersek +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit c886fc4c20ff8456b2f788a1404dd321b8b59243) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 29d6588..e2fd732 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -600,7 +600,7 @@ static unsigned int pc_apic_id_limit(unsigned int max_cpus) + return x86_cpu_apic_id_from_index(max_cpus - 1) + 1; + } + +-static FWCfgState *bochs_bios_init(void) ++static FWCfgState *bochs_bios_init(AddressSpace *as) + { + FWCfgState *fw_cfg; + uint8_t *smbios_table; +@@ -609,7 +609,7 @@ static FWCfgState *bochs_bios_init(void) + int i, j; + unsigned int apic_id_limit = pc_apic_id_limit(max_cpus); + +- fw_cfg = fw_cfg_init(BIOS_CFG_IOPORT, BIOS_CFG_IOPORT + 1, 0, 0); ++ fw_cfg = fw_cfg_init_io_dma(BIOS_CFG_IOPORT, BIOS_CFG_IOPORT + 4, as); + /* FW_CFG_MAX_CPUS is a bit confusing/problematic on x86: + * + * SeaBIOS needs FW_CFG_MAX_CPUS for CPU hotplug, but the CPU hotplug +@@ -1172,7 +1172,7 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, + option_rom_mr, + 1); + +- fw_cfg = bochs_bios_init(); ++ fw_cfg = bochs_bios_init(&address_space_memory); + rom_set_fw(fw_cfg); + + if (linux_boot) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Enforce-stack-protector-usage.patch b/SOURCES/kvm-Enforce-stack-protector-usage.patch new file mode 100644 index 0000000..2017826 --- /dev/null +++ b/SOURCES/kvm-Enforce-stack-protector-usage.patch @@ -0,0 +1,70 @@ +From 3938c85004bbd742c5a8c7e1480ed14c2420cd9d Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 26 Aug 2014 13:33:14 +0200 +Subject: [PATCH 1/6] Enforce stack protector usage + +Message-id: <1409059994-2966-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 60699 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] Enforce stack protector usage +Bugzilla: 1064260 +RH-Acked-by: Amos Kong +RH-Acked-by: Jeff Nelson +RH-Acked-by: Fam Zheng + +From: Miroslav Rezanina + +If --enable-stack-protector is used is used, configure script try to use +--fstack-protector-strong. In case it's not supported, --fstack-protector-all +is enabled. If both protectors are not supported, configure does not use +any protector at all without any notification. + +This patch reports error when user requests stack protector to be used and +both protector modes are not supported. Behavior is not changed in case +user do not use any of --enable-stack-protector/--disable-stack-protector. + +Signed-off-by: Miroslav Rezanina +[Fix non-POSIX operator in test. - Paolo] +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 3b463a3fa8f7690ffa3ef273993dff349b3a73d3) + +Conflicts: + configure - upstream use -fstack-protector-all as second option + we used -fstack-protector. + Updated to upstream behavior + +Signed-off-by: Miroslav Rezanina +--- + configure | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/configure b/configure +index 4552e08..0c666e5 100755 +--- a/configure ++++ b/configure +@@ -1303,14 +1303,21 @@ for flag in $gcc_flags; do + done + + if test "$stack_protector" != "no" ; then +- gcc_flags="-fstack-protector-strong -fstack-protector" ++ gcc_flags="-fstack-protector-strong -fstack-protector-all" ++ sp_on=0 + for flag in $gcc_flags; do + if compile_prog "-Werror $flag" "" ; then + QEMU_CFLAGS="$QEMU_CFLAGS $flag" + LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag" ++ sp_on=1 + break + fi + done ++ if test "$stack_protector" = yes; then ++ if test $sp_on = 0; then ++ error_exit "Stack protector not supported" ++ fi ++ fi + fi + + # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-backport-of-target-i386-add-feature-flags-for-CP.patch b/SOURCES/kvm-Fix-backport-of-target-i386-add-feature-flags-for-CP.patch new file mode 100644 index 0000000..0339170 --- /dev/null +++ b/SOURCES/kvm-Fix-backport-of-target-i386-add-feature-flags-for-CP.patch @@ -0,0 +1,84 @@ +From 7530a2f3975b76711467226f8b279baf36d92e46 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 6 Sep 2016 21:45:05 +0200 +Subject: [PATCH 1/2] Fix backport of "target-i386: add feature flags for + CPUID[EAX=0xd, ECX=1]" + +RH-Author: Eduardo Habkost +Message-id: <1473198305-8442-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 72260 +O-Subject: [RHEL-7.3 qemu-kvm PATCH] Fix backport of "target-i386: add feature flags for CPUID[EAX=0xd, ECX=1]" +Bugzilla: 1371619 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +Upstream status: commit 0bb0b2d2fe7f645ddaf1f0ff40ac669c9feb4aa1 + +commit 5fcaf5176d7545518c76f3aa8ea7ce6fb063c62d (the backport of +upstream commit 0bb0b2d2fe7f645ddaf1f0ff40ac669c9feb4aa1) had a +serious bug: as the qemu-kvm-1.5.3 code doesn't have +FeatureWordInfo and loops for assigning cpu->features, +cpu->features[FEAT_XSAVE] was always zero, so that commit +basically cleared all XSAVE feature bits in all CPU models. + +Fix it by handling FEAT_XSAVE everywhere it matters: in the +plus_features/minus_features handling, in the loading of CPU +model definition, and kvm_cpu_fill_host(). + +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 80106ba..1001c47 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1201,6 +1201,8 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + } else { + x86_cpu_def->features[FEAT_7_0_EBX] = 0; + } ++ x86_cpu_def->features[FEAT_XSAVE] = ++ kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); + + x86_cpu_def->xlevel = kvm_arch_get_supported_cpuid(s, 0x80000000, 0, R_EAX); + x86_cpu_def->features[FEAT_8000_0001_EDX] = +@@ -1281,6 +1283,9 @@ static int kvm_check_features_against_host(X86CPU *cpu) + {&env->features[FEAT_7_0_EBX], + &host_def.features[FEAT_7_0_EBX], + FEAT_7_0_EBX }, ++ {&env->features[FEAT_XSAVE], ++ &host_def.features[FEAT_XSAVE], ++ FEAT_XSAVE }, + {&env->features[FEAT_SVM], + &host_def.features[FEAT_SVM], + FEAT_SVM }, +@@ -1819,6 +1824,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + env->features[FEAT_KVM] |= plus_features[FEAT_KVM]; + env->features[FEAT_SVM] |= plus_features[FEAT_SVM]; + env->features[FEAT_7_0_EBX] |= plus_features[FEAT_7_0_EBX]; ++ env->features[FEAT_XSAVE] |= plus_features[FEAT_XSAVE]; + env->features[FEAT_1_EDX] &= ~minus_features[FEAT_1_EDX]; + env->features[FEAT_1_ECX] &= ~minus_features[FEAT_1_ECX]; + env->features[FEAT_8000_0001_EDX] &= ~minus_features[FEAT_8000_0001_EDX]; +@@ -1827,6 +1833,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + env->features[FEAT_KVM] &= ~minus_features[FEAT_KVM]; + env->features[FEAT_SVM] &= ~minus_features[FEAT_SVM]; + env->features[FEAT_7_0_EBX] &= ~minus_features[FEAT_7_0_EBX]; ++ env->features[FEAT_XSAVE] &= ~minus_features[FEAT_XSAVE]; + + out: + return; +@@ -1962,6 +1969,7 @@ static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + env->features[FEAT_SVM] = def->features[FEAT_SVM]; + env->features[FEAT_C000_0001_EDX] = def->features[FEAT_C000_0001_EDX]; + env->features[FEAT_7_0_EBX] = def->features[FEAT_7_0_EBX]; ++ env->features[FEAT_XSAVE] = def->features[FEAT_XSAVE]; + env->cpuid_xlevel2 = def->xlevel2; + + object_property_set_str(OBJECT(cpu), def->model_id, "model-id", errp); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Fix-eax-for-cpuid-leaf-0x40000000.patch b/SOURCES/kvm-Fix-eax-for-cpuid-leaf-0x40000000.patch new file mode 100644 index 0000000..699e2f5 --- /dev/null +++ b/SOURCES/kvm-Fix-eax-for-cpuid-leaf-0x40000000.patch @@ -0,0 +1,51 @@ +From 9903f2031b13dfeff37514197cdd56cbcb3431f4 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 15 May 2019 15:53:55 +0200 +Subject: [PATCH 1/4] kvm: Fix eax for cpuid leaf 0x40000000 + +RH-Author: Eduardo Habkost +Message-id: <20190515155355.22182-2-ehabkost@redhat.com> +Patchwork-id: 87888 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 1/1] kvm: Fix eax for cpuid leaf 0x40000000 +Bugzilla: 1709495 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Sergio Lopez Pascual + +From: Jidong Xiao + +Since Linux kernel 3.5, KVM has documented eax for leaf 0x40000000 +to be KVM_CPUID_FEATURES: + +https://github.com/torvalds/linux/commit/57c22e5f35aa4b9b2fe11f73f3e62bbf9ef36190 + +But qemu still tries to set it to 0. It would be better to make qemu +and kvm consistent. This patch just fixes this issue. + +Signed-off-by: Jidong Xiao +[Include kvm_base in the value. - Paolo] +Signed-off-by: Paolo Bonzini +(cherry picked from commit 79b6f2f651d64a122dd647c1456635d5a6a176ac) +Signed-off-by: Eduardo Habkost + +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 35a9cf4..d5f6deb 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -532,7 +532,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + memcpy(signature, "KVMKVMKVM\0\0\0", 12); + c = &cpuid_data.entries[cpuid_i++]; + c->function = KVM_CPUID_SIGNATURE | kvm_base; +- c->eax = 0; ++ c->eax = KVM_CPUID_FEATURES | kvm_base; + c->ebx = signature[0]; + c->ecx = signature[1]; + c->edx = signature[2]; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Fix-heap-overflow-in-ip_reass-on-big-packet-input.patch b/SOURCES/kvm-Fix-heap-overflow-in-ip_reass-on-big-packet-input.patch new file mode 100644 index 0000000..e56d5e0 --- /dev/null +++ b/SOURCES/kvm-Fix-heap-overflow-in-ip_reass-on-big-packet-input.patch @@ -0,0 +1,56 @@ +From 7980bf40d749aeb86a972a73db67a42fe000dbca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= +Date: Wed, 31 Jul 2019 21:39:33 +0200 +Subject: [PATCH 4/4] Fix heap overflow in ip_reass on big packet input +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Philippe Mathieu-Daudé +Message-id: <20190731213933.16245-2-philmd@redhat.com> +Patchwork-id: 89844 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 1/1] Fix heap overflow in ip_reass on big packet input +Bugzilla: 1734749 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau + +From: Samuel Thibault + +When the first fragment does not fit in the preallocated buffer, q will +already be pointing to the ext buffer, so we mustn't try to update it. + +Signed-off-by: Samuel Thibault +(cherry picked from libslirp commit 126c04acbabd7ad32c2b018fe10dfac2a3bc1210) +Signed-off-by: Philippe Mathieu-Daudé + +Signed-off-by: Miroslav Rezanina +--- + slirp/ip_input.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/slirp/ip_input.c b/slirp/ip_input.c +index 880bdfd..5226224 100644 +--- a/slirp/ip_input.c ++++ b/slirp/ip_input.c +@@ -330,6 +330,8 @@ insert: + q = fp->frag_link.next; + m = dtom(slirp, q); + ++ int was_ext = m->m_flags & M_EXT; ++ + q = (struct ipasfrag *) q->ipf_next; + while (q != (struct ipasfrag*)&fp->frag_link) { + struct mbuf *t = dtom(slirp, q); +@@ -352,7 +354,7 @@ insert: + * the old buffer (in the mbuf), so we must point ip + * into the new buffer. + */ +- if (m->m_flags & M_EXT) { ++ if (!was_ext && m->m_flags & M_EXT) { + int delta = (char *)q - m->m_dat; + q = (struct ipasfrag *)(m->m_ext + delta); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Fix-machine-options-accel-kernel_irqchip-kvm_shadow_.patch b/SOURCES/kvm-Fix-machine-options-accel-kernel_irqchip-kvm_shadow_.patch new file mode 100644 index 0000000..f168ffa --- /dev/null +++ b/SOURCES/kvm-Fix-machine-options-accel-kernel_irqchip-kvm_shadow_.patch @@ -0,0 +1,178 @@ +From 63d9ae740b30071f01c5fd1196f077b635491530 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 6 Aug 2013 13:17:03 +0200 +Subject: [PATCH 10/28] Fix -machine options accel, kernel_irqchip, kvm_shadow_mem + +RH-Author: Markus Armbruster +Message-id: <1375795025-28674-5-git-send-email-armbru@redhat.com> +Patchwork-id: 52993 +O-Subject: [PATCH 7.0 qemu-kvm 4/6] Fix -machine options accel, kernel_irqchip, kvm_shadow_mem +Bugzilla: 980782 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny +RH-Acked-by: Orit Wasserman + +Multiple -machine options with the same ID are merged. All but the +one without an ID are to be silently ignored. + +In most places, we query these options with a null ID. This is +correct. + +In some places, we instead query whatever options come first in the +list. This is wrong. When the -machine processed first happens to +have an ID, options are taken from that ID, and the ones specified +without ID are silently ignored. + +Example: + + $ upstream-qemu -nodefaults -S -display none -monitor stdio -machine id=foo -machine accel=kvm,usb=on + $ upstream-qemu -nodefaults -S -display none -monitor stdio -machine id=foo,accel=kvm,usb=on -machine accel=xen + $ upstream-qemu -nodefaults -S -display none -monitor stdio -machine accel=xen -machine id=foo,accel=kvm,usb=on + + $ qemu-system-x86_64 -nodefaults -S -display none -monitor stdio -machine accel=kvm,usb=on + QEMU 1.5.50 monitor - type 'help' for more information + (qemu) info kvm + kvm support: enabled + (qemu) info usb + (qemu) q + $ qemu-system-x86_64 -nodefaults -S -display none -monitor stdio -machine id=foo -machine accel=kvm,usb=on + QEMU 1.5.50 monitor - type 'help' for more information + (qemu) info kvm + kvm support: disabled + (qemu) info usb + (qemu) q + $ qemu-system-x86_64 -nodefaults -S -display none -monitor stdio -machine id=foo,accel=kvm,usb=on -machine accel=xen + QEMU 1.5.50 monitor - type 'help' for more information + (qemu) info kvm + kvm support: enabled + (qemu) info usb + USB support not enabled + (qemu) q + $ qemu-system-x86_64 -nodefaults -S -display none -monitor stdio -machine accel=xen -machine id=foo,accel=kvm,usb=on + xc: error: Could not obtain handle on privileged command interface (2 = No such file or directory): Internal error + xen be core: can't open xen interface + failed to initialize Xen: Operation not permitted + +Option usb is queried correctly, and the one without an ID wins, +regardless of option order. + +Option accel is queried incorrectly, and which one wins depends on +option order and ID. + +Affected options are accel (and its sugared forms -enable-kvm and +-no-kvm), kernel_irqchip, kvm_shadow_mem. + +Additionally, option kernel_irqchip is normally on by default, except +it's off when no -machine options are given. Bug can't bite, because +kernel_irqchip is used only when KVM is enabled, KVM is off by +default, and enabling always creates -machine options. Downstreams +that enable KVM by default do get bitten, though. + +Use qemu_get_machine_opts() to fix these bugs. + +Signed-off-by: Markus Armbruster +Message-id: 1372943363-24081-5-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 36ad0e948e15d8d86c8dec1c17a8588d87b0107d) + +Conflicts: + hw/ppc/e500.c + +Conflicts, because we don't have commit d85937e "kvm/openpic: +in-kernel mpic support". Resolution is trivial: drop the hunk. + +There's a pasto in upstream's commit message. The first paragraph +after "Example:" shouldn't be there. +--- + kvm-all.c | 5 +---- + target-i386/kvm.c | 17 +++++++---------- + vl.c | 8 ++------ + 3 files changed, 10 insertions(+), 20 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 5 +---- + target-i386/kvm.c | 17 +++++++---------- + vl.c | 8 ++------ + 3 files changed, 10 insertions(+), 20 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 8222729..6c9d51e 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1256,12 +1256,9 @@ int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n, int virq) + + static int kvm_irqchip_create(KVMState *s) + { +- QemuOptsList *list = qemu_find_opts("machine"); + int ret; + +- if (QTAILQ_EMPTY(&list->head) || +- !qemu_opt_get_bool(QTAILQ_FIRST(&list->head), +- "kernel_irqchip", true) || ++ if (!qemu_opt_get_bool(qemu_get_machine_opts(), "kernel_irqchip", true) || + !kvm_check_extension(s, KVM_CAP_IRQCHIP)) { + return 0; + } +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 9ffb6ca..8da6a0d 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -741,7 +741,6 @@ static int kvm_get_supported_msrs(KVMState *s) + + int kvm_arch_init(KVMState *s) + { +- QemuOptsList *list = qemu_find_opts("machine"); + uint64_t identity_base = 0xfffbc000; + uint64_t shadow_mem; + int ret; +@@ -790,15 +789,13 @@ int kvm_arch_init(KVMState *s) + } + qemu_register_reset(kvm_unpoison_all, NULL); + +- if (!QTAILQ_EMPTY(&list->head)) { +- shadow_mem = qemu_opt_get_size(QTAILQ_FIRST(&list->head), +- "kvm_shadow_mem", -1); +- if (shadow_mem != -1) { +- shadow_mem /= 4096; +- ret = kvm_vm_ioctl(s, KVM_SET_NR_MMU_PAGES, shadow_mem); +- if (ret < 0) { +- return ret; +- } ++ shadow_mem = qemu_opt_get_size(qemu_get_machine_opts(), ++ "kvm_shadow_mem", -1); ++ if (shadow_mem != -1) { ++ shadow_mem /= 4096; ++ ret = kvm_vm_ioctl(s, KVM_SET_NR_MMU_PAGES, shadow_mem); ++ if (ret < 0) { ++ return ret; + } + } + return 0; +diff --git a/vl.c b/vl.c +index fe58eff..0ed9257 100644 +--- a/vl.c ++++ b/vl.c +@@ -2661,17 +2661,13 @@ static struct { + + static int configure_accelerator(void) + { +- const char *p = NULL; ++ const char *p; + char buf[10]; + int i, ret; + bool accel_initialised = false; + bool init_failed = false; + +- QemuOptsList *list = qemu_find_opts("machine"); +- if (!QTAILQ_EMPTY(&list->head)) { +- p = qemu_opt_get(QTAILQ_FIRST(&list->head), "accel"); +- } +- ++ p = qemu_opt_get(qemu_get_machine_opts(), "accel"); + if (p == NULL) { + /* Use the default "accelerator", tcg */ + p = "kvm:tcg"; +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-memory-slot-page-alignment-logic-bug-1455745.patch b/SOURCES/kvm-Fix-memory-slot-page-alignment-logic-bug-1455745.patch new file mode 100644 index 0000000..eebc4cb --- /dev/null +++ b/SOURCES/kvm-Fix-memory-slot-page-alignment-logic-bug-1455745.patch @@ -0,0 +1,61 @@ +From be6123e0eadd895a9fa47005df38c4dce655236c Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 6 Jun 2017 17:08:19 +0200 +Subject: [PATCH 1/6] kvm: Fix memory slot page alignment logic (bug#1455745) + +RH-Author: Paolo Bonzini +Message-id: <20170606170819.18875-1-pbonzini@redhat.com> +Patchwork-id: 75507 +O-Subject: [RHEL7.4 qemu-kvm PATCH] kvm: Fix memory slot page alignment logic (bug#1455745) +Bugzilla: 1455745 +RH-Acked-by: Alex Williamson +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Alexander Graf + +Brew build: 13356300 + +Memory slots have to be page aligned to get entered into KVM. There +is existing logic that tries to ensure that we pad memory slots that +are not page aligned to the biggest region that would still fit in the +alignment requirements. + +Unfortunately, that logic is broken. It tries to calculate the start +offset based on the region size. + +Fix up the logic to do the thing it was intended to do and document it +properly in the comment above it. + +With this patch applied, I can successfully run an e500 guest with more +than 3GB RAM (at which point RAM starts overlapping subpage memory regions). +[Paolo: in RHEL's case, the issue was reported with assigned devices] + +Cc: qemu-stable@nongnu.org +Signed-off-by: Alexander Graf +(cherry picked from commit f2a64032a14c642d0ddc9a7a846fc3d737deede5) +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index fc6e3ab..9486b9a 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -621,8 +621,10 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + unsigned delta; + + /* kvm works in page size chunks, but the function may be called +- with sub-page size and unaligned start address. */ +- delta = TARGET_PAGE_ALIGN(size) - size; ++ with sub-page size and unaligned start address. Pad the start ++ address to next and truncate size to previous page boundary. */ ++ delta = (TARGET_PAGE_SIZE - (start_addr & ~TARGET_PAGE_MASK)); ++ delta &= ~TARGET_PAGE_MASK; + if (delta > size) { + return; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Fix-migration-from-rhel6.5-to-rhel7-with-ipxe.patch b/SOURCES/kvm-Fix-migration-from-rhel6.5-to-rhel7-with-ipxe.patch new file mode 100644 index 0000000..8f97f8b --- /dev/null +++ b/SOURCES/kvm-Fix-migration-from-rhel6.5-to-rhel7-with-ipxe.patch @@ -0,0 +1,58 @@ +From 5ed11d0f0f9cbd5e8616bd8f6028b8cae45c9103 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 5 Nov 2013 13:13:44 +0100 +Subject: [PATCH 17/29] Fix migration from rhel6.5 to rhel7 with ipxe + +RH-Author: Orit Wasserman +Message-id: <1383657224-18599-4-git-send-email-owasserm@redhat.com> +Patchwork-id: 55377 +O-Subject: [RHEL-7.0 qemu-kvm 3/3] Fix migration from rhel6.5 to rhel7 with ipxe +Bugzilla: 997702 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Juan Quintela + +Use rhel6 ipxe roms for rhel6 machine types (to have compatible roms sizes +when migrating) + +Signed-off-by: Orit Wasserman +--- + hw/i386/pc_piix.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 16 ++++++++++++++++ + 1 files changed, 16 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 3f5b913..3a8418e 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -867,6 +867,22 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "usb-ccid",\ + .property = "serial",\ + .value = "1",\ ++ },{\ ++ .driver = "ne2k_pci",\ ++ .property = "romfile",\ ++ .value = "rhel6-ne2k_pci.rom",\ ++ },{\ ++ .driver = "pcnet",\ ++ .property = "romfile",\ ++ .value = "rhel6-pcnet.rom",\ ++ },{\ ++ .driver = "rtl8139",\ ++ .property = "romfile",\ ++ .value = "rhel6-rtl8139.rom",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "romfile",\ ++ .value = "rhel6-virtio.rom",\ + } + + static void pc_init_rhel650(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-potential-resource-leak-missing-fclose.patch b/SOURCES/kvm-Fix-potential-resource-leak-missing-fclose.patch new file mode 100644 index 0000000..14db562 --- /dev/null +++ b/SOURCES/kvm-Fix-potential-resource-leak-missing-fclose.patch @@ -0,0 +1,47 @@ +From 803bf1ab08aadf547f8e45f0a727c17bb2b96ca5 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 1 Nov 2013 19:50:32 +0100 +Subject: [PATCH 02/25] kvm: Fix potential resource leak (missing fclose) + +RH-Author: Alex Williamson +Message-id: <20131101195032.25461.97296.stgit@bling.home> +Patchwork-id: 55234 +O-Subject: [RHEL7 qemu-kvm PATCH 2/3] kvm: Fix potential resource leak (missing fclose) +Bugzilla: 1025877 +RH-Acked-by: Bandan Das +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Orit Wasserman + +From: Stefan Weil + +Bugzilla: 1025877 +Upstream commit: 90527d2a8bb08ca5b4774eacfdd6b8fe9671c077 + +This leak was detected by cppcheck. + +Signed-off-by: Stefan Weil +Signed-off-by: Michael Tokarev +--- + hw/i386/kvm/pci-assign.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/pci-assign.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c +index 221a8f7..a5885b4 100644 +--- a/hw/i386/kvm/pci-assign.c ++++ b/hw/i386/kvm/pci-assign.c +@@ -548,6 +548,7 @@ static int get_real_id(const char *devpath, const char *idname, uint16_t *val) + if (fscanf(f, "%li\n", &id) == 1) { + *val = id; + } else { ++ fclose(f); + return -1; + } + fclose(f); +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-real-mode-guest-migration.patch b/SOURCES/kvm-Fix-real-mode-guest-migration.patch new file mode 100644 index 0000000..6b0d21c --- /dev/null +++ b/SOURCES/kvm-Fix-real-mode-guest-migration.patch @@ -0,0 +1,67 @@ +From c576ee9550d38273808c2055803f3a254655753e Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:10 +0200 +Subject: [PATCH 15/25] Fix real mode guest migration + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-6-git-send-email-owasserm@redhat.com> +Patchwork-id: 54801 +O-Subject: [RHEL7.0 qemu-kvm v2 05/10] Fix real mode guest migration +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +Older KVM versions save CS dpl value to an invalid value for real mode guests +(0x3). This patch detect this situation when loading CPU state and set all the +segments dpl to zero. +This will allow migration from older KVM on host without unrestricted guest +to hosts with restricted guest support. +For example migration from a Penryn host (with kernel 2.6.32) to +a Westmere host (for real mode guest) will fail with "kvm: unhandled exit 80000021". + +Signed-off-by: Orit Wasserman +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 444ba6797ef6ef331fe9fd34309b1ec59caaede3) +--- + target-i386/machine.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/machine.c | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index ecf1617..079a132 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -260,6 +260,24 @@ static int cpu_post_load(void *opaque, int version_id) + CPUX86State *env = &cpu->env; + int i; + ++ /* ++ * Real mode guest segments register DPL should be zero. ++ * Older KVM version were setting it wrongly. ++ * Fixing it will allow live migration from such host that don't have ++ * restricted guest support to a host with unrestricted guest support ++ * (otherwise the migration will fail with invalid guest state ++ * error). ++ */ ++ if (!(env->cr[0] & CR0_PE_MASK) && ++ (env->segs[R_CS].flags >> DESC_DPL_SHIFT & 3) != 0) { ++ env->segs[R_CS].flags &= ~(env->segs[R_CS].flags & DESC_DPL_MASK); ++ env->segs[R_DS].flags &= ~(env->segs[R_DS].flags & DESC_DPL_MASK); ++ env->segs[R_ES].flags &= ~(env->segs[R_ES].flags & DESC_DPL_MASK); ++ env->segs[R_FS].flags &= ~(env->segs[R_FS].flags & DESC_DPL_MASK); ++ env->segs[R_GS].flags &= ~(env->segs[R_GS].flags & DESC_DPL_MASK); ++ env->segs[R_SS].flags &= ~(env->segs[R_SS].flags & DESC_DPL_MASK); ++ } ++ + /* XXX: restore FPU round state */ + env->fpstt = (env->fpus_vmstate >> 11) & 7; + env->fpus = env->fpus_vmstate & ~0x3800; +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-real-mode-guest-segments-dpl-value-in-savevm.patch b/SOURCES/kvm-Fix-real-mode-guest-segments-dpl-value-in-savevm.patch new file mode 100644 index 0000000..9527d4c --- /dev/null +++ b/SOURCES/kvm-Fix-real-mode-guest-segments-dpl-value-in-savevm.patch @@ -0,0 +1,65 @@ +From 38c385caa32752ef176ffd1448e45e0dc94d5043 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:11 +0200 +Subject: [PATCH 16/25] Fix real mode guest segments dpl value in savevm + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-7-git-send-email-owasserm@redhat.com> +Patchwork-id: 54802 +O-Subject: [RHEL7.0 qemu-kvm v2 06/10] Fix real mode guest segments dpl value in savevm +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +Older KVM version put invalid value in the segments registers dpl field for +real mode guests (0x3). +This breaks migration from those hosts to hosts with unrestricted guest support. +We detect it by checking CS dpl value for real mode guest and fix the dpl values +of all the segment registers. + +Signed-off-by: Orit Wasserman +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 3e47c249b93d5cc1e0f9404dbe243682598ba8fb) +--- + target-i386/machine.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/machine.c | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 079a132..8faea62 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -252,6 +252,24 @@ static void cpu_pre_save(void *opaque) + } + + env->fpregs_format_vmstate = 0; ++ ++ /* ++ * Real mode guest segments register DPL should be zero. ++ * Older KVM version were setting it wrongly. ++ * Fixing it will allow live migration to host with unrestricted guest ++ * support (otherwise the migration will fail with invalid guest state ++ * error). ++ */ ++ if (!(env->cr[0] & CR0_PE_MASK) && ++ (env->segs[R_CS].flags >> DESC_DPL_SHIFT & 3) != 0) { ++ env->segs[R_CS].flags &= ~(env->segs[R_CS].flags & DESC_DPL_MASK); ++ env->segs[R_DS].flags &= ~(env->segs[R_DS].flags & DESC_DPL_MASK); ++ env->segs[R_ES].flags &= ~(env->segs[R_ES].flags & DESC_DPL_MASK); ++ env->segs[R_FS].flags &= ~(env->segs[R_FS].flags & DESC_DPL_MASK); ++ env->segs[R_GS].flags &= ~(env->segs[R_GS].flags & DESC_DPL_MASK); ++ env->segs[R_SS].flags &= ~(env->segs[R_SS].flags & DESC_DPL_MASK); ++ } ++ + } + + static int cpu_post_load(void *opaque, int version_id) +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-two-XBZRLE-corruption-issues.patch b/SOURCES/kvm-Fix-two-XBZRLE-corruption-issues.patch new file mode 100644 index 0000000..939ec9f --- /dev/null +++ b/SOURCES/kvm-Fix-two-XBZRLE-corruption-issues.patch @@ -0,0 +1,200 @@ +From ccff61f6316a815aa4a538799e089dec7ce754c5 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 27 Feb 2014 14:53:37 +0100 +Subject: [PATCH 3/6] Fix two XBZRLE corruption issues + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1393512817-21040-1-git-send-email-dgilbert@redhat.com> +Patchwork-id: 57921 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/1] Fix two XBZRLE corruption issues +Bugzilla: 1063417 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Amit Shah + +From: "Dr. David Alan Gilbert" + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1063417 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7115209 +Upstream: 6d3cb1f970ee85361618f7ff02869180394e012d + +Push zero'd pages into the XBZRLE cache + A page that was cached by XBZRLE, zero'd and then XBZRLE'd again + was being compared against a stale cache value + +Don't use 'qemu_put_buffer_async' to put pages from the XBZRLE cache + Since the cache might change before the data hits the wire + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit 6d3cb1f970ee85361618f7ff02869180394e012d) +--- + arch_init.c | 64 ++++++++++++++++++++++++++++++++---------- + include/migration/page_cache.h | 2 +- + page_cache.c | 2 +- + 3 files changed, 51 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 64 ++++++++++++++++++++++++++++++--------- + include/migration/page_cache.h | 2 +- + page_cache.c | 2 +- + 3 files changed, 51 insertions(+), 17 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 31bf690..f5d521a 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -122,7 +122,6 @@ static void check_guest_throttling(void); + #define RAM_SAVE_FLAG_XBZRLE 0x40 + /* 0x80 is reserved in migration.h start with 0x100 next */ + +- + static struct defconfig_file { + const char *filename; + /* Indicates it is an user config file (disabled by -no-user-config) */ +@@ -133,6 +132,7 @@ static struct defconfig_file { + { NULL }, /* end of list */ + }; + ++static const uint8_t ZERO_TARGET_PAGE[TARGET_PAGE_SIZE]; + + int qemu_read_default_config_files(bool userconfig) + { +@@ -273,6 +273,34 @@ static size_t save_block_hdr(QEMUFile *f, RAMBlock *block, ram_addr_t offset, + return size; + } + ++/* This is the last block that we have visited serching for dirty pages ++ */ ++static RAMBlock *last_seen_block; ++/* This is the last block from where we have sent data */ ++static RAMBlock *last_sent_block; ++static ram_addr_t last_offset; ++static unsigned long *migration_bitmap; ++static uint64_t migration_dirty_pages; ++static uint32_t last_version; ++static bool ram_bulk_stage; ++ ++/* Update the xbzrle cache to reflect a page that's been sent as all 0. ++ * The important thing is that a stale (not-yet-0'd) page be replaced ++ * by the new data. ++ * As a bonus, if the page wasn't in the cache it gets added so that ++ * when a small write is made into the 0'd page it gets XBZRLE sent ++ */ ++static void xbzrle_cache_zero_page(ram_addr_t current_addr) ++{ ++ if (ram_bulk_stage || !migrate_use_xbzrle()) { ++ return; ++ } ++ ++ /* We don't care if this fails to allocate a new cache page ++ * as long as it updated an old one */ ++ cache_insert(XBZRLE.cache, current_addr, ZERO_TARGET_PAGE); ++} ++ + #define ENCODING_FLAG_XBZRLE 0x1 + + static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data, +@@ -329,18 +357,6 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data, + return bytes_sent; + } + +- +-/* This is the last block that we have visited serching for dirty pages +- */ +-static RAMBlock *last_seen_block; +-/* This is the last block from where we have sent data */ +-static RAMBlock *last_sent_block; +-static ram_addr_t last_offset; +-static unsigned long *migration_bitmap; +-static uint64_t migration_dirty_pages; +-static uint32_t last_version; +-static bool ram_bulk_stage; +- + static inline + ram_addr_t migration_bitmap_find_and_reset_dirty(MemoryRegion *mr, + ram_addr_t start) +@@ -512,6 +528,7 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + } else { + int ret; + uint8_t *p; ++ bool send_async = true; + int cont = (block == last_sent_block) ? + RAM_SAVE_FLAG_CONTINUE : 0; + +@@ -522,6 +539,7 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + ret = ram_control_save_page(f, block->offset, + offset, TARGET_PAGE_SIZE, &bytes_sent); + ++ current_addr = block->offset + offset; + if (ret != RAM_SAVE_CONTROL_NOT_SUPP) { + if (ret != RAM_SAVE_CONTROL_DELAYED) { + if (bytes_sent > 0) { +@@ -536,19 +554,35 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + RAM_SAVE_FLAG_COMPRESS); + qemu_put_byte(f, 0); + bytes_sent++; ++ /* Must let xbzrle know, otherwise a previous (now 0'd) cached ++ * page would be stale ++ */ ++ xbzrle_cache_zero_page(current_addr); + } else if (!ram_bulk_stage && migrate_use_xbzrle()) { +- current_addr = block->offset + offset; + bytes_sent = save_xbzrle_page(f, p, current_addr, block, + offset, cont, last_stage); + if (!last_stage) { ++ /* We must send exactly what's in the xbzrle cache ++ * even if the page wasn't xbzrle compressed, so that ++ * it's right next time. ++ */ + p = get_cached_data(XBZRLE.cache, current_addr); ++ ++ /* Can't send this cached data async, since the cache page ++ * might get updated before it gets to the wire ++ */ ++ send_async = false; + } + } + + /* XBZRLE overflow or normal page */ + if (bytes_sent == -1) { + bytes_sent = save_block_hdr(f, block, offset, cont, RAM_SAVE_FLAG_PAGE); +- qemu_put_buffer_async(f, p, TARGET_PAGE_SIZE); ++ if (send_async) { ++ qemu_put_buffer_async(f, p, TARGET_PAGE_SIZE); ++ } else { ++ qemu_put_buffer(f, p, TARGET_PAGE_SIZE); ++ } + bytes_sent += TARGET_PAGE_SIZE; + acct_info.norm_pages++; + } +diff --git a/include/migration/page_cache.h b/include/migration/page_cache.h +index d156f0d..2d5ce2d 100644 +--- a/include/migration/page_cache.h ++++ b/include/migration/page_cache.h +@@ -66,7 +66,7 @@ uint8_t *get_cached_data(const PageCache *cache, uint64_t addr); + * @addr: page address + * @pdata: pointer to the page + */ +-int cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata); ++int cache_insert(PageCache *cache, uint64_t addr, const uint8_t *pdata); + + /** + * cache_resize: resize the page cache. In case of size reduction the extra +diff --git a/page_cache.c b/page_cache.c +index 250772d..5a763f9 100644 +--- a/page_cache.c ++++ b/page_cache.c +@@ -151,7 +151,7 @@ uint8_t *get_cached_data(const PageCache *cache, uint64_t addr) + return cache_get_by_addr(cache, addr)->it_data; + } + +-int cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata) ++int cache_insert(PageCache *cache, uint64_t addr, const uint8_t *pdata) + { + + CacheItem *it = NULL; +-- +1.7.1 + diff --git a/SOURCES/kvm-Fix-typo-in-variable-name-found-and-fixed-by-codespe.patch b/SOURCES/kvm-Fix-typo-in-variable-name-found-and-fixed-by-codespe.patch new file mode 100644 index 0000000..59de7a3 --- /dev/null +++ b/SOURCES/kvm-Fix-typo-in-variable-name-found-and-fixed-by-codespe.patch @@ -0,0 +1,203 @@ +From aabe8208c6a3989910d5ab210eba9b7938bdf526 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:09 +0100 +Subject: [PATCH 38/41] Fix typo in variable name (found and fixed by + codespell) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-39-marcandre.lureau@redhat.com> +Patchwork-id: 78388 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 38/41] Fix typo in variable name (found and fixed by codespell) +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Stefan Weil + +Signed-off-by: Stefan Weil +Reviewed-by: Fam Zheng +Signed-off-by: Michael Tokarev + +(cherry picked from commit 1d817db3a07774999606f62aa2d8772a82363551) + +RHEL: backported to avoid conflicts in following patch + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 64 ++++++++++++++++++++++---------------------- + 1 file changed, 32 insertions(+), 32 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 308cfca..03d692d 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -56,44 +56,44 @@ class ELF(object): + self.notes = [] + self.segments = [] + self.notes_size = 0 +- self.endianess = None ++ self.endianness = None + self.elfclass = ELFCLASS64 + + if arch == 'aarch64-le': +- self.endianess = ELFDATA2LSB ++ self.endianness = ELFDATA2LSB + self.elfclass = ELFCLASS64 +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_AARCH + + elif arch == 'aarch64-be': +- self.endianess = ELFDATA2MSB +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.endianness = ELFDATA2MSB ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_AARCH + + elif arch == 'X86_64': +- self.endianess = ELFDATA2LSB +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.endianness = ELFDATA2LSB ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_X86_64 + + elif arch == '386': +- self.endianess = ELFDATA2LSB ++ self.endianness = ELFDATA2LSB + self.elfclass = ELFCLASS32 +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_386 + + elif arch == 's390': +- self.endianess = ELFDATA2MSB +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.endianness = ELFDATA2MSB ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_S390 + + elif arch == 'ppc64-le': +- self.endianess = ELFDATA2LSB +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.endianness = ELFDATA2LSB ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_PPC64 + + elif arch == 'ppc64-be': +- self.endianess = ELFDATA2MSB +- self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.endianness = ELFDATA2MSB ++ self.ehdr = get_arch_ehdr(self.endianness, self.elfclass) + self.ehdr.e_machine = EM_PPC64 + + else: +@@ -107,7 +107,7 @@ class ELF(object): + def add_note(self, n_name, n_desc, n_type): + """Adds a note to the ELF.""" + +- note = get_arch_note(self.endianess, len(n_name), len(n_desc)) ++ note = get_arch_note(self.endianness, len(n_name), len(n_desc)) + note.n_namesz = len(n_name) + 1 + note.n_descsz = len(n_desc) + note.n_name = n_name.encode() +@@ -126,7 +126,7 @@ class ELF(object): + def add_segment(self, p_type, p_paddr, p_size): + """Adds a segment to the elf.""" + +- phdr = get_arch_phdr(self.endianess, self.elfclass) ++ phdr = get_arch_phdr(self.endianness, self.elfclass) + phdr.p_type = p_type + phdr.p_paddr = p_paddr + phdr.p_filesz = p_size +@@ -158,10 +158,10 @@ class ELF(object): + elf_file.write(note) + + +-def get_arch_note(endianess, len_name, len_desc): +- """Returns a Note class with the specified endianess.""" ++def get_arch_note(endianness, len_name, len_desc): ++ """Returns a Note class with the specified endianness.""" + +- if endianess == ELFDATA2LSB: ++ if endianness == ELFDATA2LSB: + superclass = ctypes.LittleEndianStructure + else: + superclass = ctypes.BigEndianStructure +@@ -193,20 +193,20 @@ class Ident(ctypes.Structure): + ('ei_abiversion', ctypes.c_ubyte), + ('ei_pad', ctypes.c_ubyte * 7)] + +- def __init__(self, endianess, elfclass): ++ def __init__(self, endianness, elfclass): + self.ei_mag0 = 0x7F + self.ei_mag1 = ord('E') + self.ei_mag2 = ord('L') + self.ei_mag3 = ord('F') + self.ei_class = elfclass +- self.ei_data = endianess ++ self.ei_data = endianness + self.ei_version = EV_CURRENT + + +-def get_arch_ehdr(endianess, elfclass): +- """Returns a EHDR64 class with the specified endianess.""" ++def get_arch_ehdr(endianness, elfclass): ++ """Returns a EHDR64 class with the specified endianness.""" + +- if endianess == ELFDATA2LSB: ++ if endianness == ELFDATA2LSB: + superclass = ctypes.LittleEndianStructure + else: + superclass = ctypes.BigEndianStructure +@@ -231,12 +231,12 @@ def get_arch_ehdr(endianess, elfclass): + + def __init__(self): + super(superclass, self).__init__() +- self.e_ident = Ident(endianess, elfclass) ++ self.e_ident = Ident(endianness, elfclass) + self.e_type = ET_CORE + self.e_version = EV_CURRENT + self.e_ehsize = ctypes.sizeof(self) + self.e_phoff = ctypes.sizeof(self) +- self.e_phentsize = ctypes.sizeof(get_arch_phdr(endianess, elfclass)) ++ self.e_phentsize = ctypes.sizeof(get_arch_phdr(endianness, elfclass)) + self.e_phnum = 0 + + +@@ -260,12 +260,12 @@ def get_arch_ehdr(endianess, elfclass): + + def __init__(self): + super(superclass, self).__init__() +- self.e_ident = Ident(endianess, elfclass) ++ self.e_ident = Ident(endianness, elfclass) + self.e_type = ET_CORE + self.e_version = EV_CURRENT + self.e_ehsize = ctypes.sizeof(self) + self.e_phoff = ctypes.sizeof(self) +- self.e_phentsize = ctypes.sizeof(get_arch_phdr(endianess, elfclass)) ++ self.e_phentsize = ctypes.sizeof(get_arch_phdr(endianness, elfclass)) + self.e_phnum = 0 + + # End get_arch_ehdr +@@ -275,10 +275,10 @@ def get_arch_ehdr(endianess, elfclass): + return EHDR32() + + +-def get_arch_phdr(endianess, elfclass): +- """Returns a 32 or 64 bit PHDR class with the specified endianess.""" ++def get_arch_phdr(endianness, elfclass): ++ """Returns a 32 or 64 bit PHDR class with the specified endianness.""" + +- if endianess == ELFDATA2LSB: ++ if endianness == ELFDATA2LSB: + superclass = ctypes.LittleEndianStructure + else: + superclass = ctypes.BigEndianStructure +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Fix-uninitialized-cpuid_data.patch b/SOURCES/kvm-Fix-uninitialized-cpuid_data.patch new file mode 100644 index 0000000..7de28e6 --- /dev/null +++ b/SOURCES/kvm-Fix-uninitialized-cpuid_data.patch @@ -0,0 +1,111 @@ +From 2f85f6c61990fd4d46e4980128ee8ba2d3cfaa37 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:14 +0100 +Subject: [PATCH 02/12] kvm: Fix uninitialized cpuid_data + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-3-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57958 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 02/12] kvm: Fix uninitialized cpuid_data +Bugzilla: 1057173 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Juan Quintela +RH-Acked-by: Eduardo Habkost + +From: Stefan Weil + +This error was reported by valgrind when running qemu-system-x86_64 +with kvm: + +==975== Conditional jump or move depends on uninitialised value(s) +==975== at 0x521C38: cpuid_find_entry (kvm.c:176) +==975== by 0x5235BA: kvm_arch_init_vcpu (kvm.c:686) +==975== by 0x4D5175: kvm_init_vcpu (kvm-all.c:267) +==975== by 0x45035B: qemu_kvm_cpu_thread_fn (cpus.c:858) +==975== by 0xD361E0D: start_thread (pthread_create.c:311) +==975== by 0xD65E9EC: clone (clone.S:113) +==975== Uninitialised value was created by a stack allocation +==975== at 0x5226E4: kvm_arch_init_vcpu (kvm.c:446) + +Instead of adding more memset calls for parts of cpuid_data, the existing +calls were removed and cpuid_data is now initialized completely in one +call. + +Signed-off-by: Stefan Weil +Signed-off-by: Gleb Natapov +(cherry picked from commit ef4cbe14342c1f63b3c754e306218f004f4e26c4) +--- + target-i386/kvm.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index c7fabd7..3a9e376 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -453,11 +453,12 @@ int kvm_arch_init_vcpu(CPUState *cs) + uint32_t signature[3]; + int r; + ++ memset(&cpuid_data, 0, sizeof(cpuid_data)); ++ + cpuid_i = 0; + + /* Paravirtualization CPUIDs */ + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = KVM_CPUID_SIGNATURE; + if (!hyperv_enabled(cpu)) { + memcpy(signature, "KVMKVMKVM\0\0\0", 12); +@@ -471,7 +472,6 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->edx = signature[2]; + + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = KVM_CPUID_FEATURES; + c->eax = env->features[FEAT_KVM]; + +@@ -480,13 +480,11 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->eax = signature[0]; + + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = HYPERV_CPUID_VERSION; + c->eax = 0x00001bbc; + c->ebx = 0x00060001; + + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = HYPERV_CPUID_FEATURES; + if (cpu->hyperv_relaxed_timing) { + c->eax |= HV_X64_MSR_HYPERCALL_AVAILABLE; +@@ -497,7 +495,6 @@ int kvm_arch_init_vcpu(CPUState *cs) + } + + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = HYPERV_CPUID_ENLIGHTMENT_INFO; + if (cpu->hyperv_relaxed_timing) { + c->eax |= HV_X64_RELAXED_TIMING_RECOMMENDED; +@@ -508,13 +505,11 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->ebx = cpu->hyperv_spinlock_attempts; + + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = HYPERV_CPUID_IMPLEMENT_LIMITS; + c->eax = 0x40; + c->ebx = 0x40; + + c = &cpuid_data.entries[cpuid_i++]; +- memset(c, 0, sizeof(*c)); + c->function = KVM_CPUID_SIGNATURE_NEXT; + memcpy(signature, "KVMKVMKVM\0\0\0", 12); + c->eax = 0; +-- +1.7.1 + diff --git a/SOURCES/kvm-HMP-Disable-drive_add-for-Red-Hat-Enterprise-Linux.patch b/SOURCES/kvm-HMP-Disable-drive_add-for-Red-Hat-Enterprise-Linux.patch new file mode 100644 index 0000000..3e5b594 --- /dev/null +++ b/SOURCES/kvm-HMP-Disable-drive_add-for-Red-Hat-Enterprise-Linux.patch @@ -0,0 +1,54 @@ +From 8bc60f9c097965e17f1cfa32e66461aacdb11083 Mon Sep 17 00:00:00 2001 +Message-Id: <8bc60f9c097965e17f1cfa32e66461aacdb11083.1387385974.git.minovotn@redhat.com> +In-Reply-To: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +References: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 17 Dec 2013 06:46:39 +0100 +Subject: [PATCH 5/5] HMP: Disable drive_add for Red Hat Enterprise Linux + +RH-Author: Markus Armbruster +Message-id: <1387262799-10350-7-git-send-email-armbru@redhat.com> +Patchwork-id: 56297 +O-Subject: [PATCH v2 6/6] HMP: Disable drive_add for Red Hat Enterprise Linux +Bugzilla: 889051 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Same as in RHEL-6; commit ed45bb8 there. + +Signed-off-by: Markus Armbruster +--- + hmp-commands.hx | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Michal Novotny +--- + hmp-commands.hx | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index bfb565b..32cc33c 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1072,6 +1072,7 @@ using the specified target. + ETEXI + #endif + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "drive_add", + .args_type = "pci_addr:s,opts:s", +@@ -1084,6 +1085,7 @@ ETEXI + .help = "add drive to PCI storage controller", + .mhandler.cmd = drive_hot_add, + }, ++#endif + + STEXI + @item drive_add +-- +1.7.11.7 + diff --git a/SOURCES/kvm-HMP-Fix-documentation-of-__com.redhat.drive_add.patch b/SOURCES/kvm-HMP-Fix-documentation-of-__com.redhat.drive_add.patch new file mode 100644 index 0000000..2c9f803 --- /dev/null +++ b/SOURCES/kvm-HMP-Fix-documentation-of-__com.redhat.drive_add.patch @@ -0,0 +1,71 @@ +From cb8c7690048946dd298371876093997f07785269 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 7 Feb 2017 14:56:10 +0100 +Subject: [PATCH 11/11] HMP: Fix documentation of __com.redhat.drive_add + +RH-Author: Markus Armbruster +Message-id: <1486479370-24026-3-git-send-email-armbru@redhat.com> +Patchwork-id: 73592 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/2] HMP: Fix documentation of __com.redhat.drive_add +Bugzilla: 1419898 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Laurent Vivier + +It's similar to -drive if=none, not -device if=none. Screwed up in +RHEL-6.0 commit 545d0d8, forward-ported to RHEL-7.0 in commit c18bb50. + +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 4 ++-- + qmp-commands.hx | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index a8ba626..5356c4c 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1105,7 +1105,7 @@ ETEXI + .name = RFQDN_REDHAT "drive_add", + .args_type = "simple-drive:O", + .params = "id=name,[file=file][,format=f][,media=d]...", +- .help = "Create a drive similar to -device if=none.", ++ .help = "Create a drive similar to -drive if=none.", + .user_print = monitor_user_noop, + .mhandler.cmd_new = simple_drive_add, + }, +@@ -1113,7 +1113,7 @@ ETEXI + STEXI + @item __com.redhat_drive_add + @findex __com.redhat_drive_add +-Create a drive similar to -device if=none. ++Create a drive similar to -drive if=none. + ETEXI + + #if defined(TARGET_I386) && 0 /* Disabled for Red Hat Enterprise Linux */ +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 9522c44..4a89c24 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -110,7 +110,7 @@ EQMP + .name = RFQDN_REDHAT "drive_add", + .args_type = "simple-drive:O", + .params = "id=name,[file=file][,format=f][,media=d]...", +- .help = "Create a drive similar to -device if=none.", ++ .help = "Create a drive similar to -drive if=none.", + .user_print = monitor_user_noop, + .mhandler.cmd_new = simple_drive_add, + }, +@@ -119,7 +119,7 @@ SQMP + __com.redhat_drive_add + ---------------------- + +-Create a drive similar to -device if=none. ++Create a drive similar to -drive if=none. + + Arguments: + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-HMP-Fix-user-manual-typo-of-__com.redhat_qxl_screend.patch b/SOURCES/kvm-HMP-Fix-user-manual-typo-of-__com.redhat_qxl_screend.patch new file mode 100644 index 0000000..731c48a --- /dev/null +++ b/SOURCES/kvm-HMP-Fix-user-manual-typo-of-__com.redhat_qxl_screend.patch @@ -0,0 +1,42 @@ +From ae12e1158b6a27d94070f95f36879ce2f0da604c Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 7 Feb 2017 14:56:09 +0100 +Subject: [PATCH 10/11] HMP: Fix user manual typo of + __com.redhat_qxl_screendump + +RH-Author: Markus Armbruster +Message-id: <1486479370-24026-2-git-send-email-armbru@redhat.com> +Patchwork-id: 73590 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/2] HMP: Fix user manual typo of __com.redhat_qxl_screendump +Bugzilla: 1419898 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Laurent Vivier + +Fat-fingered in RHEL-6.2 commit 1c6074d, forward ported to RHEL-7.0 in +commit faf00a8. + +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index dd528d2..a8ba626 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -264,8 +264,8 @@ ETEXI + }, + + STEXI +-@item __com.redhat_screendump @var{id} @var{filename} +-@findex __com.redhat_screendump ++@item __com.redhat_qxl_screendump @var{id} @var{filename} ++@findex __com.redhat_qxl_screendump + Save screen from qxl device @var{id} into PPM image @var{filename}. + ETEXI + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-HMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch b/SOURCES/kvm-HMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch new file mode 100644 index 0000000..9f13518 --- /dev/null +++ b/SOURCES/kvm-HMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch @@ -0,0 +1,110 @@ +From c18bb5012af503e6ca0278cc5bd9457d853fa218 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +References: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 17 Dec 2013 06:46:37 +0100 +Subject: [PATCH 3/5] HMP: Forward-port __com.redhat_drive_add from RHEL-6 + +RH-Author: Markus Armbruster +Message-id: <1387262799-10350-5-git-send-email-armbru@redhat.com> +Patchwork-id: 56295 +O-Subject: [PATCH v2 4/6] HMP: Forward-port __com.redhat_drive_add from RHEL-6 +Bugzilla: 889051 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +--- + blockdev.c | 14 ++++++++++++++ + hmp-commands.hx | 15 +++++++++++++++ + include/sysemu/sysemu.h | 1 + + vl.c | 1 + + 4 files changed, 31 insertions(+) + +Signed-off-by: Michal Novotny +--- + blockdev.c | 14 ++++++++++++++ + hmp-commands.hx | 15 +++++++++++++++ + include/sysemu/sysemu.h | 1 + + vl.c | 1 + + 4 files changed, 31 insertions(+) + +diff --git a/blockdev.c b/blockdev.c +index f6d607c..93fb339 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1916,3 +1916,17 @@ QemuOptsList qemu_drive_opts = { + { /* end of list */ } + }, + }; ++ ++QemuOptsList qemu_simple_drive_opts = { ++ .name = "simple-drive", ++ .implied_opt_name = "format", ++ .head = QTAILQ_HEAD_INITIALIZER(qemu_simple_drive_opts.head), ++ .desc = { ++ /* ++ * no elements => accept any ++ * sanity checking will happen later ++ * when setting device properties ++ */ ++ { /* end if list */ } ++ } ++}; +diff --git a/hmp-commands.hx b/hmp-commands.hx +index c881e01..bfb565b 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1091,6 +1091,21 @@ STEXI + Add drive to PCI storage controller. + ETEXI + ++ { ++ .name = RFQDN_REDHAT "drive_add", ++ .args_type = "simple-drive:O", ++ .params = "id=name,[file=file][,format=f][,media=d]...", ++ .help = "Create a drive similar to -device if=none.", ++ .user_print = monitor_user_noop, ++ .mhandler.cmd_new = simple_drive_add, ++ }, ++ ++STEXI ++@item __com.redhat_drive_add ++@findex __com.redhat_drive_add ++Create a drive similar to -device if=none. ++ETEXI ++ + #if defined(TARGET_I386) && 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "pci_add", +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index 8fbc818..c70d2dd 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -192,6 +192,7 @@ QemuOpts *qemu_get_machine_opts(void); + bool usb_enabled(bool default_usb); + + extern QemuOptsList qemu_drive_opts; ++extern QemuOptsList qemu_simple_drive_opts; + extern QemuOptsList qemu_chardev_opts; + extern QemuOptsList qemu_device_opts; + extern QemuOptsList qemu_netdev_opts; +diff --git a/vl.c b/vl.c +index da12b90..4a79f62 100644 +--- a/vl.c ++++ b/vl.c +@@ -2837,6 +2837,7 @@ int main(int argc, char **argv, char **envp) + module_call_init(MODULE_INIT_QOM); + + qemu_add_opts(&qemu_drive_opts); ++ qemu_add_opts(&qemu_simple_drive_opts); + qemu_add_opts(&qemu_chardev_opts); + qemu_add_opts(&qemu_device_opts); + qemu_add_opts(&qemu_netdev_opts); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-Handle-bi-directional-communication-for-fd-migration.patch b/SOURCES/kvm-Handle-bi-directional-communication-for-fd-migration.patch new file mode 100644 index 0000000..827e3ea --- /dev/null +++ b/SOURCES/kvm-Handle-bi-directional-communication-for-fd-migration.patch @@ -0,0 +1,89 @@ +From 24a9e4d46608ccdcec53eeccc40b7a5d3fb7c9c8 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Fri, 16 Jan 2015 17:35:36 +0100 +Subject: [PATCH 04/16] Handle bi-directional communication for fd migration + +Message-id: <1421429737-23581-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 63333 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/3] Handle bi-directional communication for fd migration +Bugzilla: 1086168 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek + +From: Cristian Klein + +libvirt prefers opening the TCP connection itself, for two reasons. +First, connection failed errors can be detected easier, without having +to parse qemu's error output. +Second, libvirt might be asked to secure the transfer by tunnelling the +communication through an TLS layer. +Therefore, libvirt opens the TCP connection itself and passes an FD to qemu +using QMP and a POSIX-specific mechanism. + +Hence, in order to make the reverse-path work in such cases, qemu needs to +distinguish if the transmitted FD is a socket (reverse-path available) +or not (reverse-path might not be available) and use the corresponding +abstraction. + +Signed-off-by: Cristian Klein +Reviewed-by: Paolo Bonzini +Reviewed-by: Amit Shah +Signed-off-by: Amit Shah +(cherry picked from commit 131fe9b843f9a1e55fcbf2457c9cb25c3711b9d8) +Signed-off-by: Miroslav Rezanina +--- + migration-fd.c | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +diff --git a/migration-fd.c b/migration-fd.c +index 3d4613c..3c98c3c 100644 +--- a/migration-fd.c ++++ b/migration-fd.c +@@ -30,13 +30,29 @@ + do { } while (0) + #endif + ++static bool fd_is_socket(int fd) ++{ ++ struct stat stat; ++ int ret = fstat(fd, &stat); ++ if (ret == -1) { ++ /* When in doubt say no */ ++ return false; ++ } ++ return S_ISSOCK(stat.st_mode); ++} ++ + void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp) + { + int fd = monitor_get_fd(cur_mon, fdname, errp); + if (fd == -1) { + return; + } +- s->file = qemu_fdopen(fd, "wb"); ++ ++ if (fd_is_socket(fd)) { ++ s->file = qemu_fopen_socket(fd, "wb"); ++ } else { ++ s->file = qemu_fdopen(fd, "wb"); ++ } + + migrate_fd_connect(s); + } +@@ -57,7 +73,11 @@ void fd_start_incoming_migration(const char *infd, Error **errp) + DPRINTF("Attempting to start an incoming migration via fd\n"); + + fd = strtol(infd, NULL, 0); +- f = qemu_fdopen(fd, "rb"); ++ if (fd_is_socket(fd)) { ++ f = qemu_fopen_socket(fd, "rb"); ++ } else { ++ f = qemu_fdopen(fd, "rb"); ++ } + if(f == NULL) { + error_setg_errno(errp, errno, "failed to open the source descriptor"); + return; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Implement-fw_cfg-DMA-interface.patch b/SOURCES/kvm-Implement-fw_cfg-DMA-interface.patch new file mode 100644 index 0000000..c32d06f --- /dev/null +++ b/SOURCES/kvm-Implement-fw_cfg-DMA-interface.patch @@ -0,0 +1,437 @@ +From 96c218d6936795b087ceb493413221d5058118bc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:36 +0100 +Subject: [PATCH 05/41] Implement fw_cfg DMA interface +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-6-marcandre.lureau@redhat.com> +Patchwork-id: 78358 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 05/41] Implement fw_cfg DMA interface +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Marc Marí + +Based on the specifications on docs/specs/fw_cfg.txt + +This interface is an addon. The old interface can still be used as usual. + +Based on Gerd Hoffman's initial implementation. + +Signed-off-by: Marc Marí +Reviewed-by: Laszlo Ersek +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit a4c0d1deb785611c96a455f65ec032976b00b36f) + +RHEL: major rewrite due to lack of seperation between the MMIO & IO + introduced in upstream commit + 5712db6ae5101db645f71edc393368cd59bfd314 and following commits. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 223 ++++++++++++++++++++++++++++++++++++++++++++-- + include/hw/nvram/fw_cfg.h | 12 +++ + tests/fw_cfg-test.c | 3 +- + 3 files changed, 230 insertions(+), 8 deletions(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 01d4566..85e950c 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -23,6 +23,7 @@ + */ + #include "hw/hw.h" + #include "sysemu/sysemu.h" ++#include "sysemu/dma.h" + #include "hw/isa/isa.h" + #include "hw/nvram/fw_cfg.h" + #include "hw/sysbus.h" +@@ -30,12 +31,22 @@ + #include "qemu/error-report.h" + #include "qemu/config-file.h" + +-#define FW_CFG_SIZE 2 ++#define FW_CFG_CTL_SIZE 2 + #define FW_CFG_DATA_SIZE 1 + #define TYPE_FW_CFG "fw_cfg" + #define FW_CFG_NAME "fw_cfg" + #define FW_CFG_PATH "/machine/" FW_CFG_NAME + ++/* FW_CFG_VERSION bits */ ++#define FW_CFG_VERSION 0x01 ++#define FW_CFG_VERSION_DMA 0x02 ++ ++/* FW_CFG_DMA_CONTROL bits */ ++#define FW_CFG_DMA_CTL_ERROR 0x01 ++#define FW_CFG_DMA_CTL_READ 0x02 ++#define FW_CFG_DMA_CTL_SKIP 0x04 ++#define FW_CFG_DMA_CTL_SELECT 0x08 ++ + typedef struct FWCfgEntry { + uint32_t len; + uint8_t *data; +@@ -46,12 +57,17 @@ typedef struct FWCfgEntry { + struct FWCfgState { + SysBusDevice busdev; + MemoryRegion ctl_iomem, data_iomem, comb_iomem; +- uint32_t ctl_iobase, data_iobase; ++ uint32_t ctl_iobase, data_iobase, dma_iobase; + FWCfgEntry entries[2][FW_CFG_MAX_ENTRY]; + FWCfgFiles *files; + uint16_t cur_entry; + uint32_t cur_offset; + Notifier machine_ready; ++ ++ bool dma_enabled; ++ dma_addr_t dma_addr; ++ DMAContext *dma; ++ MemoryRegion dma_iomem; + }; + + #define JPG_FILE 0 +@@ -257,6 +273,124 @@ static void fw_cfg_data_mem_write(void *opaque, hwaddr addr, + fw_cfg_write(opaque, (uint8_t)value); + } + ++static void fw_cfg_dma_transfer(FWCfgState *s) ++{ ++ dma_addr_t len; ++ FWCfgDmaAccess dma; ++ int arch; ++ FWCfgEntry *e; ++ int read; ++ dma_addr_t dma_addr; ++ ++ /* Reset the address before the next access */ ++ dma_addr = s->dma_addr; ++ s->dma_addr = 0; ++ ++ if (dma_memory_read(s->dma, dma_addr, &dma, sizeof(dma))) { ++ stl_be_dma(s->dma, dma_addr + offsetof(FWCfgDmaAccess, control), ++ FW_CFG_DMA_CTL_ERROR); ++ return; ++ } ++ ++ dma.address = be64_to_cpu(dma.address); ++ dma.length = be32_to_cpu(dma.length); ++ dma.control = be32_to_cpu(dma.control); ++ ++ if (dma.control & FW_CFG_DMA_CTL_SELECT) { ++ fw_cfg_select(s, dma.control >> 16); ++ } ++ ++ arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL); ++ e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; ++ ++ if (dma.control & FW_CFG_DMA_CTL_READ) { ++ read = 1; ++ } else if (dma.control & FW_CFG_DMA_CTL_SKIP) { ++ read = 0; ++ } else { ++ dma.length = 0; ++ } ++ ++ dma.control = 0; ++ ++ while (dma.length > 0 && !(dma.control & FW_CFG_DMA_CTL_ERROR)) { ++ if (s->cur_entry == FW_CFG_INVALID || !e->data || ++ s->cur_offset >= e->len) { ++ len = dma.length; ++ ++ /* If the access is not a read access, it will be a skip access, ++ * tested before. ++ */ ++ if (read) { ++ if (dma_memory_set(s->dma, dma.address, 0, len)) { ++ dma.control |= FW_CFG_DMA_CTL_ERROR; ++ } ++ } ++ ++ } else { ++ if (dma.length <= (e->len - s->cur_offset)) { ++ len = dma.length; ++ } else { ++ len = (e->len - s->cur_offset); ++ } ++ ++ if (e->read_callback) { ++ e->read_callback(e->callback_opaque, s->cur_offset); ++ } ++ ++ /* If the access is not a read access, it will be a skip access, ++ * tested before. ++ */ ++ if (read) { ++ if (dma_memory_write(s->dma, dma.address, ++ &e->data[s->cur_offset], len)) { ++ dma.control |= FW_CFG_DMA_CTL_ERROR; ++ } ++ } ++ ++ s->cur_offset += len; ++ } ++ ++ dma.address += len; ++ dma.length -= len; ++ ++ } ++ ++ stl_be_dma(s->dma, dma_addr + offsetof(FWCfgDmaAccess, control), ++ dma.control); ++ ++ trace_fw_cfg_read(s, 0); ++} ++ ++static void fw_cfg_dma_mem_write(void *opaque, hwaddr addr, ++ uint64_t value, unsigned size) ++{ ++ FWCfgState *s = opaque; ++ ++ if (size == 4) { ++ value = be32_to_cpu(value); ++ if (addr == 0) { ++ /* FWCfgDmaAccess high address */ ++ s->dma_addr = value << 32; ++ } else if (addr == 4) { ++ /* FWCfgDmaAccess low address */ ++ s->dma_addr |= value; ++ fw_cfg_dma_transfer(s); ++ } ++ } else if (size == 8 && addr == 0) { ++ value = be64_to_cpu(value); ++ s->dma_addr = value; ++ fw_cfg_dma_transfer(s); ++ } ++} ++ ++static bool fw_cfg_dma_mem_valid(void *opaque, hwaddr addr, ++ unsigned size, bool is_write) ++{ ++ return is_write && ((size == 4 && (addr == 0 || addr == 4)) || ++ (size == 8 && addr == 0)); ++} ++ + static void fw_cfg_ctl_mem_write(void *opaque, hwaddr addr, + uint64_t value, unsigned size) + { +@@ -317,6 +451,14 @@ static const MemoryRegionOps fw_cfg_comb_mem_ops = { + .valid.accepts = fw_cfg_comb_valid, + }; + ++static const MemoryRegionOps fw_cfg_dma_mem_ops = { ++ .write = fw_cfg_dma_mem_write, ++ .endianness = DEVICE_NATIVE_ENDIAN, ++ .valid.accepts = fw_cfg_dma_mem_valid, ++ .valid.max_access_size = 8, ++ .impl.max_access_size = 8, ++}; ++ + static void fw_cfg_reset(DeviceState *d) + { + FWCfgState *s = DO_UPCAST(FWCfgState, busdev.qdev, d); +@@ -357,6 +499,21 @@ static bool is_version_1(void *opaque, int version_id) + return version_id == 1; + } + ++static bool fw_cfg_dma_enabled(void *opaque) ++{ ++ FWCfgState *s = opaque; ++ ++ return s->dma_enabled; ++} ++ ++static const VMStateDescription vmstate_fw_cfg_dma = { ++ .name = "fw_cfg/dma", ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64(dma_addr, FWCfgState), ++ VMSTATE_END_OF_LIST() ++ }, ++}; ++ + static const VMStateDescription vmstate_fw_cfg = { + .name = "fw_cfg", + .version_id = 2, +@@ -367,6 +524,14 @@ static const VMStateDescription vmstate_fw_cfg = { + VMSTATE_UINT16_HACK(cur_offset, FWCfgState, is_version_1), + VMSTATE_UINT32_V(cur_offset, FWCfgState, 2), + VMSTATE_END_OF_LIST() ++ }, ++ .subsections = (const VMStateSubsection[]) { ++ { ++ .vmsd = &vmstate_fw_cfg_dma, ++ .needed = fw_cfg_dma_enabled, ++ }, { ++ /* empty */ ++ } + } + }; + +@@ -478,16 +643,24 @@ static void fw_cfg_machine_ready(struct Notifier *n, void *data) + fw_cfg_add_file(s, "bootorder", (uint8_t*)bootindex, len); + } + +-FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, +- hwaddr ctl_addr, hwaddr data_addr) ++static FWCfgState * ++fw_cfg_init_dma(uint32_t ctl_port, uint32_t data_port, ++ uint32_t dma_port, ++ hwaddr ctl_addr, hwaddr data_addr, hwaddr dma_addr, ++ AddressSpace *dma_as) + { + DeviceState *dev; + SysBusDevice *d; + FWCfgState *s; ++ uint32_t version = FW_CFG_VERSION; ++ bool dma_enabled = dma_port && dma_as; + + dev = qdev_create(NULL, "fw_cfg"); + qdev_prop_set_uint32(dev, "ctl_iobase", ctl_port); + qdev_prop_set_uint32(dev, "data_iobase", data_port); ++ qdev_prop_set_uint32(dev, "dma_iobase", dma_port); ++ qdev_prop_set_bit(dev, "dma_enabled", dma_enabled); ++ + d = SYS_BUS_DEVICE(dev); + + s = DO_UPCAST(FWCfgState, busdev.qdev, dev); +@@ -505,8 +678,19 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + if (data_addr) { + sysbus_mmio_map(d, 1, data_addr); + } ++ if (dma_enabled) { ++ /* 64 bits for the address field */ ++ s->dma = &dma_context_memory; ++ s->dma_addr = 0; ++ ++ version |= FW_CFG_VERSION_DMA; ++ if (dma_addr) { ++ sysbus_mmio_map(d, 2, dma_addr); ++ } ++ } ++ + fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4); +- fw_cfg_add_i32(s, FW_CFG_ID, 1); ++ fw_cfg_add_i32(s, FW_CFG_ID, version); + fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16); + fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NOGRAPHIC)); + fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus); +@@ -520,19 +704,37 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + return s; + } + ++FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, ++ hwaddr ctl_addr, hwaddr data_addr) ++{ ++ return fw_cfg_init_dma(ctl_port, data_addr, 0, ctl_addr, data_addr, 0, NULL); ++} ++ ++FWCfgState *fw_cfg_init_io_dma(uint32_t iobase, uint32_t dma_iobase, ++ AddressSpace *dma_as) ++{ ++ return fw_cfg_init_dma(iobase, iobase + 1, dma_iobase, 0, 0, 0, dma_as); ++} ++ + static int fw_cfg_init1(SysBusDevice *dev) + { + FWCfgState *s = FROM_SYSBUS(FWCfgState, dev); + + memory_region_init_io(&s->ctl_iomem, &fw_cfg_ctl_mem_ops, s, +- "fwcfg.ctl", FW_CFG_SIZE); ++ "fwcfg.ctl", FW_CFG_CTL_SIZE); + sysbus_init_mmio(dev, &s->ctl_iomem); + memory_region_init_io(&s->data_iomem, &fw_cfg_data_mem_ops, s, + "fwcfg.data", FW_CFG_DATA_SIZE); + sysbus_init_mmio(dev, &s->data_iomem); + /* In case ctl and data overlap: */ + memory_region_init_io(&s->comb_iomem, &fw_cfg_comb_mem_ops, s, +- "fwcfg", FW_CFG_SIZE); ++ "fwcfg", FW_CFG_CTL_SIZE); ++ ++ if (s->dma_enabled) { ++ memory_region_init_io(&s->dma_iomem, &fw_cfg_dma_mem_ops, s, ++ "fwcfg.dma", sizeof(dma_addr_t)); ++ sysbus_init_mmio(dev, &s->dma_iomem); ++ } + + if (s->ctl_iobase + 1 == s->data_iobase) { + sysbus_add_io(dev, s->ctl_iobase, &s->comb_iomem); +@@ -544,12 +746,19 @@ static int fw_cfg_init1(SysBusDevice *dev) + sysbus_add_io(dev, s->data_iobase, &s->data_iomem); + } + } ++ ++ if (s->dma_iobase) { ++ sysbus_add_io(dev, s->dma_iobase, &s->dma_iomem); ++ } ++ + return 0; + } + + static Property fw_cfg_properties[] = { + DEFINE_PROP_HEX32("ctl_iobase", FWCfgState, ctl_iobase, -1), + DEFINE_PROP_HEX32("data_iobase", FWCfgState, data_iobase, -1), ++ DEFINE_PROP_HEX32("dma_iobase", FWCfgState, dma_iobase, -1), ++ DEFINE_PROP_BOOL("dma_enabled", FWCfgState, dma_enabled, false), + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index aa5f351..b193e38 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -7,6 +7,7 @@ + + #include "exec/hwaddr.h" + #include "qemu/typedefs.h" ++#include "qemu/compiler.h" + #endif + + #define FW_CFG_SIGNATURE 0x00 +@@ -61,6 +62,15 @@ typedef struct FWCfgFiles { + FWCfgFile f[]; + } FWCfgFiles; + ++/* Control as first field allows for different structures selected by this ++ * field, which might be useful in the future ++ */ ++typedef struct FWCfgDmaAccess { ++ uint32_t control; ++ uint32_t length; ++ uint64_t address; ++} QEMU_PACKED FWCfgDmaAccess; ++ + typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); + typedef void (*FWCfgReadCallback)(void *opaque, uint32_t offset); + +@@ -76,6 +86,8 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + void *data, size_t len); + FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + hwaddr crl_addr, hwaddr data_addr); ++FWCfgState *fw_cfg_init_io_dma(uint32_t iobase, uint32_t dma_iobase, ++ AddressSpace *dma_as); + + FWCfgState *fw_cfg_find(void); + +diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c +index 3428dca..24b8a28 100644 +--- a/tests/fw_cfg-test.c ++++ b/tests/fw_cfg-test.c +@@ -38,7 +38,8 @@ static void test_fw_cfg_signature(void) + + static void test_fw_cfg_id(void) + { +- g_assert_cmpint(qfw_cfg_get_u32(fw_cfg, FW_CFG_ID), ==, 1); ++ uint32_t id = qfw_cfg_get_u32(fw_cfg, FW_CFG_ID); ++ g_assert((id == 1) || (id == 3)); + } + + static void test_fw_cfg_uuid(void) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Implement-qdict_flatten.patch b/SOURCES/kvm-Implement-qdict_flatten.patch new file mode 100644 index 0000000..9dde647 --- /dev/null +++ b/SOURCES/kvm-Implement-qdict_flatten.patch @@ -0,0 +1,107 @@ +From 4c0ae9bbc7424ca9fc220f56487e9927e8841f87 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:00 +0100 +Subject: [PATCH 47/87] Implement qdict_flatten() + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 55385 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 06/24] Implement qdict_flatten() +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +qdict_flatten(): For each nested QDict with key x, all fields with key y +are moved to this QDict and their key is renamed to "x.y". This operation +is applied recursively for nested QDicts. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit f660dc6a2e97756596b2e79ce6127a3034f2308b) + +Signed-off-by: Kevin Wolf +--- + include/qapi/qmp/qdict.h | 1 + + qobject/qdict.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 52 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qapi/qmp/qdict.h | 1 + + qobject/qdict.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 52 insertions(+), 0 deletions(-) + +diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h +index 685b2e3..d6855d1 100644 +--- a/include/qapi/qmp/qdict.h ++++ b/include/qapi/qmp/qdict.h +@@ -65,5 +65,6 @@ int qdict_get_try_bool(const QDict *qdict, const char *key, int def_value); + const char *qdict_get_try_str(const QDict *qdict, const char *key); + + QDict *qdict_clone_shallow(const QDict *src); ++void qdict_flatten(QDict *qdict); + + #endif /* QDICT_H */ +diff --git a/qobject/qdict.c b/qobject/qdict.c +index ed381f9..472f106 100644 +--- a/qobject/qdict.c ++++ b/qobject/qdict.c +@@ -476,3 +476,54 @@ static void qdict_destroy_obj(QObject *obj) + + g_free(qdict); + } ++ ++static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix) ++{ ++ QObject *value; ++ const QDictEntry *entry, *next; ++ const char *new_key; ++ bool delete; ++ ++ entry = qdict_first(qdict); ++ ++ while (entry != NULL) { ++ ++ next = qdict_next(qdict, entry); ++ value = qdict_entry_value(entry); ++ new_key = NULL; ++ delete = false; ++ ++ if (prefix) { ++ qobject_incref(value); ++ new_key = g_strdup_printf("%s.%s", prefix, entry->key); ++ qdict_put_obj(target, new_key, value); ++ delete = true; ++ } ++ ++ if (qobject_type(value) == QTYPE_QDICT) { ++ qdict_do_flatten(qobject_to_qdict(value), target, ++ new_key ? new_key : entry->key); ++ delete = true; ++ } ++ ++ if (delete) { ++ qdict_del(qdict, entry->key); ++ ++ /* Restart loop after modifying the iterated QDict */ ++ entry = qdict_first(qdict); ++ continue; ++ } ++ ++ entry = next; ++ } ++} ++ ++/** ++ * qdict_flatten(): For each nested QDict with key x, all fields with key y ++ * are moved to this QDict and their key is renamed to "x.y". This operation ++ * is applied recursively for nested QDicts. ++ */ ++void qdict_flatten(QDict *qdict) ++{ ++ qdict_do_flatten(qdict, qdict, NULL); ++} +-- +1.7.1 + diff --git a/SOURCES/kvm-Inhibit-ballooning-during-postcopy.patch b/SOURCES/kvm-Inhibit-ballooning-during-postcopy.patch new file mode 100644 index 0000000..bd1a2e5 --- /dev/null +++ b/SOURCES/kvm-Inhibit-ballooning-during-postcopy.patch @@ -0,0 +1,110 @@ +From cc224bcb3c12238466f8a6a366d3f813fb866a16 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 13 Dec 2018 21:54:28 +0100 +Subject: [PATCH 1/5] Inhibit ballooning during postcopy + +RH-Author: Alex Williamson +Message-id: <154473806860.22725.2305869657628116679.stgit@gimli.home> +Patchwork-id: 83493 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 1/5] Inhibit ballooning during postcopy +Bugzilla: 1659229 +RH-Acked-by: Peter Xu +RH-Acked-by: Cornelia Huck +RH-Acked-by: Auger Eric + +From: Dr. David Alan Gilbert + +Bugzilla: 1659229 +Notes: Dropped all but balloon inhibitor infrastructure + +Postcopy detects accesses to pages that haven't been transferred yet +using userfaultfd, and it causes exceptions on pages that are 'not +present'. +Ballooning also causes pages to be marked as 'not present' when the +guest inflates the balloon. +Potentially a balloon could be inflated to discard pages that are +currently inflight during postcopy and that may be arriving at about +the same time. + +To avoid this confusion, disable ballooning during postcopy. + +When disabled we drop balloon requests from the guest. Since ballooning +is generally initiated by the host, the management system should avoid +initiating any balloon instructions to the guest during migration, +although it's not possible to know how long it would take a guest to +process a request made prior to the start of migration. +Guest initiated ballooning will not know if it's really freed a page +of host memory or not. + +Queueing the requests until after migration would be nice, but is +non-trivial, since the set of inflate/deflate requests have to +be compared with the state of the page to know what the final +outcome is allowed to be. + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Juan Quintela +Reviewed-by: Amit Shah +Signed-off-by: Juan Quintela +(cherry picked from commit 371ff5a3f04cd7d05bab49ac6e80da319026d95b) +Signed-off-by: Miroslav Rezanina +--- + balloon.c | 11 +++++++++++ + hw/virtio/virtio-balloon.c | 4 +++- + include/sysemu/balloon.h | 2 ++ + 3 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/balloon.c b/balloon.c +index e321f2c..c7a0cf1 100644 +--- a/balloon.c ++++ b/balloon.c +@@ -35,6 +35,17 @@ + static QEMUBalloonEvent *balloon_event_fn; + static QEMUBalloonStatus *balloon_stat_fn; + static void *balloon_opaque; ++static bool balloon_inhibited; ++ ++bool qemu_balloon_is_inhibited(void) ++{ ++ return balloon_inhibited; ++} ++ ++void qemu_balloon_inhibit(bool state) ++{ ++ balloon_inhibited = state; ++} + + int qemu_add_balloon_handler(QEMUBalloonEvent *event_func, + QEMUBalloonStatus *stat_func, void *opaque) +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index 1a60d3c..c9562ef 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -34,9 +34,11 @@ + static void balloon_page(void *addr, int deflate) + { + #if defined(__linux__) +- if (!kvm_enabled() || kvm_has_sync_mmu()) ++ if (!qemu_balloon_is_inhibited() && (!kvm_enabled() || ++ kvm_has_sync_mmu())) { + qemu_madvise(addr, TARGET_PAGE_SIZE, + deflate ? QEMU_MADV_WILLNEED : QEMU_MADV_DONTNEED); ++ } + #endif + } + +diff --git a/include/sysemu/balloon.h b/include/sysemu/balloon.h +index bd9d395..eb5af19 100644 +--- a/include/sysemu/balloon.h ++++ b/include/sysemu/balloon.h +@@ -23,6 +23,8 @@ typedef void (QEMUBalloonStatus)(void *opaque, BalloonInfo *info); + int qemu_add_balloon_handler(QEMUBalloonEvent *event_func, + QEMUBalloonStatus *stat_func, void *opaque); + void qemu_remove_balloon_handler(void *opaque); ++bool qemu_balloon_is_inhibited(void); ++void qemu_balloon_inhibit(bool state); + + void qemu_balloon_changed(int64_t actual); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Init-the-XBZRLE.lock-in-ram_mig_init.patch b/SOURCES/kvm-Init-the-XBZRLE.lock-in-ram_mig_init.patch new file mode 100644 index 0000000..fb3382a --- /dev/null +++ b/SOURCES/kvm-Init-the-XBZRLE.lock-in-ram_mig_init.patch @@ -0,0 +1,170 @@ +From 7b47ae208675e0da813f9f46838d9a8935c68a02 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 8 May 2014 10:58:41 +0200 +Subject: [PATCH 06/31] Init the XBZRLE.lock in ram_mig_init + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1399546722-6350-4-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58743 +O-Subject: [RHEL7.1/RHEL7.0.z qemu-kvm PATCH 3/4] Init the XBZRLE.lock in ram_mig_init +Bugzilla: 1066338 +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster +RH-Acked-by: Amit Shah + +From: "Dr. David Alan Gilbert" + +Initialising the XBZRLE.lock earlier simplifies the lock use. + +Based on Markus's patch in: +http://lists.gnu.org/archive/html/qemu-devel/2014-03/msg03879.html + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Gonglei +Reviewed-by: Markus Armbruster +Signed-off-by: Juan Quintela +(cherry picked from commit d97326eec2ca1313eaf0b5cffd69af5663b5af5d) +--- + arch_init.c | 61 +++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 31 insertions(+), 30 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 61 ++++++++++++++++++++++++++++++----------------------------- + 1 files changed, 31 insertions(+), 30 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 37c9f6d..80e48f2 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -45,6 +45,7 @@ + #include "hw/audio/pcspk.h" + #include "migration/page_cache.h" + #include "qemu/config-file.h" ++#include "qemu/error-report.h" + #include "qmp-commands.h" + #include "trace.h" + #include "exec/cpu-all.h" +@@ -167,11 +168,8 @@ static struct { + /* Cache for XBZRLE, Protected by lock. */ + PageCache *cache; + QemuMutex lock; +-} XBZRLE = { +- .encoded_buf = NULL, +- .current_buf = NULL, +- .cache = NULL, +-}; ++} XBZRLE; ++ + /* buffer used for XBZRLE decoding */ + static uint8_t *xbzrle_decoded_buf; + +@@ -187,41 +185,44 @@ static void XBZRLE_cache_unlock(void) + qemu_mutex_unlock(&XBZRLE.lock); + } + ++/* ++ * called from qmp_migrate_set_cache_size in main thread, possibly while ++ * a migration is in progress. ++ * A running migration maybe using the cache and might finish during this ++ * call, hence changes to the cache are protected by XBZRLE.lock(). ++ */ + int64_t xbzrle_cache_resize(int64_t new_size) + { +- PageCache *new_cache, *cache_to_free; ++ PageCache *new_cache; ++ int64_t ret; + + if (new_size < TARGET_PAGE_SIZE) { + return -1; + } + +- /* no need to lock, the current thread holds qemu big lock */ ++ XBZRLE_cache_lock(); ++ + if (XBZRLE.cache != NULL) { +- /* check XBZRLE.cache again later */ + if (pow2floor(new_size) == migrate_xbzrle_cache_size()) { +- return pow2floor(new_size); ++ goto out_new_size; + } + new_cache = cache_init(new_size / TARGET_PAGE_SIZE, + TARGET_PAGE_SIZE); + if (!new_cache) { +- DPRINTF("Error creating cache\n"); +- return -1; +- } +- +- XBZRLE_cache_lock(); +- /* the XBZRLE.cache may have be destroyed, check it again */ +- if (XBZRLE.cache != NULL) { +- cache_to_free = XBZRLE.cache; +- XBZRLE.cache = new_cache; +- } else { +- cache_to_free = new_cache; ++ error_report("Error creating cache"); ++ ret = -1; ++ goto out; + } +- XBZRLE_cache_unlock(); + +- cache_fini(cache_to_free); ++ cache_fini(XBZRLE.cache); ++ XBZRLE.cache = new_cache; + } + +- return pow2floor(new_size); ++out_new_size: ++ ret = pow2floor(new_size); ++out: ++ XBZRLE_cache_unlock(); ++ return ret; + } + + /* accounting for migration statistics */ +@@ -735,28 +736,27 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + dirty_rate_high_cnt = 0; + + if (migrate_use_xbzrle()) { +- qemu_mutex_lock_iothread(); ++ XBZRLE_cache_lock(); + XBZRLE.cache = cache_init(migrate_xbzrle_cache_size() / + TARGET_PAGE_SIZE, + TARGET_PAGE_SIZE); + if (!XBZRLE.cache) { +- qemu_mutex_unlock_iothread(); +- DPRINTF("Error creating cache\n"); ++ XBZRLE_cache_unlock(); ++ error_report("Error creating cache"); + return -1; + } +- qemu_mutex_init(&XBZRLE.lock); +- qemu_mutex_unlock_iothread(); ++ XBZRLE_cache_unlock(); + + /* We prefer not to abort if there is no memory */ + XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE); + if (!XBZRLE.encoded_buf) { +- DPRINTF("Error allocating encoded_buf\n"); ++ error_report("Error allocating encoded_buf"); + return -1; + } + + XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE); + if (!XBZRLE.current_buf) { +- DPRINTF("Error allocating current_buf\n"); ++ error_report("Error allocating current_buf"); + g_free(XBZRLE.encoded_buf); + XBZRLE.encoded_buf = NULL; + return -1; +@@ -1110,6 +1110,7 @@ static SaveVMHandlers savevm_ram_handlers = { + + void ram_mig_init(void) + { ++ qemu_mutex_init(&XBZRLE.lock); + register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, NULL); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-Introduce-cpu_clean_all_dirty.patch b/SOURCES/kvm-Introduce-cpu_clean_all_dirty.patch new file mode 100644 index 0000000..5990ab5 --- /dev/null +++ b/SOURCES/kvm-Introduce-cpu_clean_all_dirty.patch @@ -0,0 +1,114 @@ +From 2611b6a31041da5b9ed3793152d309aae77932bb Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Wed, 22 Oct 2014 09:46:35 +0200 +Subject: [PATCH 4/6] Introduce cpu_clean_all_dirty + +Message-id: <1413971197-4624-4-git-send-email-dgilbert@redhat.com> +Patchwork-id: 61791 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 3/5] Introduce cpu_clean_all_dirty +Bugzilla: 1098602 1130428 +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini + +From: Marcelo Tosatti + +Introduce cpu_clean_all_dirty, to force subsequent cpu_synchronize_all_states +to read in-kernel register state. + +Signed-off-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +(cherry picked from commit de9d61e83d43be9069e6646fa9d57a3f47779d28) +Signed-off-by: Miroslav Rezanina + +Conflicts: + cpus.c + kvm-all.c + +dgilbert: Had to replace CPU_FOREACH by a loop + +Signed-off-by: Dr. David Alan Gilbert +--- + cpus.c | 9 +++++++++ + include/sysemu/cpus.h | 1 + + include/sysemu/kvm.h | 8 ++++++++ + kvm-all.c | 5 +++++ + 4 files changed, 23 insertions(+) + +diff --git a/cpus.c b/cpus.c +index caccf5a..3948cdf 100644 +--- a/cpus.c ++++ b/cpus.c +@@ -437,6 +437,15 @@ bool cpu_is_stopped(CPUState *cpu) + return !runstate_is_running() || cpu->stopped; + } + ++void cpu_clean_all_dirty(void) ++{ ++ CPUArchState *cpu; ++ ++ for (cpu = first_cpu; cpu; cpu = cpu->next_cpu) { ++ cpu_clean_state(ENV_GET_CPU(cpu)); ++ } ++} ++ + static int do_vm_stop(RunState state) + { + int ret = 0; +diff --git a/include/sysemu/cpus.h b/include/sysemu/cpus.h +index 6502488..4f8a3df 100644 +--- a/include/sysemu/cpus.h ++++ b/include/sysemu/cpus.h +@@ -10,6 +10,7 @@ void cpu_stop_current(void); + void cpu_synchronize_all_states(void); + void cpu_synchronize_all_post_reset(void); + void cpu_synchronize_all_post_init(void); ++void cpu_clean_all_dirty(void); + + void qtest_clock_warp(int64_t dest); + +diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h +index e722027..0c6833f 100644 +--- a/include/sysemu/kvm.h ++++ b/include/sysemu/kvm.h +@@ -274,6 +274,7 @@ int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr, + + void kvm_cpu_synchronize_post_reset(CPUState *cpu); + void kvm_cpu_synchronize_post_init(CPUState *cpu); ++void kvm_cpu_clean_state(CPUState *cpu); + + static inline void cpu_synchronize_post_reset(CPUState *cpu) + { +@@ -289,6 +290,13 @@ static inline void cpu_synchronize_post_init(CPUState *cpu) + } + } + ++static inline void cpu_clean_state(CPUState *cpu) ++{ ++ if (kvm_enabled()) { ++ kvm_cpu_clean_state(cpu); ++ } ++} ++ + int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg); + int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg); + void kvm_irqchip_release_virq(KVMState *s, int virq); +diff --git a/kvm-all.c b/kvm-all.c +index f7f621b..fc6e3ab 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1615,6 +1615,11 @@ void kvm_cpu_synchronize_post_init(CPUState *cpu) + cpu->kvm_vcpu_dirty = false; + } + ++void kvm_cpu_clean_state(CPUState *cpu) ++{ ++ cpu->kvm_vcpu_dirty = false; ++} ++ + int kvm_cpu_exec(CPUArchState *env) + { + CPUState *cpu = ENV_GET_CPU(env); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Make-qemu-io-commands-available-in-HMP.patch b/SOURCES/kvm-Make-qemu-io-commands-available-in-HMP.patch new file mode 100644 index 0000000..909d57b --- /dev/null +++ b/SOURCES/kvm-Make-qemu-io-commands-available-in-HMP.patch @@ -0,0 +1,132 @@ +From 6b7e23d3e8ff46e638c9dcd769681b2e1b9da08e Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:35 +0100 +Subject: [PATCH 16/27] Make qemu-io commands available in HMP + +RH-Author: John Snow +Message-id: <1448300320-7772-17-git-send-email-jsnow@redhat.com> +Patchwork-id: 68443 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 16/21] Make qemu-io commands available in HMP +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +It was decided to not make this command available in QMP in order to +make clear that this is not supposed to be a stable API and should be +used only for testing and debugging purposes. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 587da2c39c9ace168f4d01fa446a54ae998a2553) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + Makefile | 2 +- + Makefile.objs | 1 + + hmp-commands.hx | 16 ++++++++++++++++ + hmp.c | 18 ++++++++++++++++++ + hmp.h | 1 + + 5 files changed, 37 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index f403057..76eb694 100644 +--- a/Makefile ++++ b/Makefile +@@ -205,7 +205,7 @@ qemu-img.o: qemu-img-cmds.h + + qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a + qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a +-qemu-io$(EXESUF): qemu-io.o qemu-io-cmds.o $(block-obj-y) libqemuutil.a libqemustub.a ++qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a + + qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o + +diff --git a/Makefile.objs b/Makefile.objs +index f83a5b2..74f722e 100644 +--- a/Makefile.objs ++++ b/Makefile.objs +@@ -13,6 +13,7 @@ block-obj-$(CONFIG_POSIX) += aio-posix.o + block-obj-$(CONFIG_WIN32) += aio-win32.o + block-obj-y += block/ + block-obj-y += qapi-types.o qapi-visit.o ++block-obj-y += qemu-io-cmds.o + + block-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o + block-obj-y += qemu-coroutine-sleep.o +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 58498f7..7e1855a 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1592,6 +1592,22 @@ Removes the chardev @var{id}. + ETEXI + + { ++ .name = "qemu-io", ++ .args_type = "device:B,command:s", ++ .params = "[device] \"[command]\"", ++ .help = "run a qemu-io command on a block device", ++ .mhandler.cmd = hmp_qemu_io, ++ }, ++ ++STEXI ++@item qemu-io @var{device} @var{command} ++@findex qemu-io ++ ++Executes a qemu-io command on the given block device. ++ ++ETEXI ++ ++ { + .name = "info", + .args_type = "item:s?", + .params = "[subcommand]", +diff --git a/hmp.c b/hmp.c +index 1805926..e1d92f4 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -22,6 +22,7 @@ + #include "qemu/sockets.h" + #include "monitor/monitor.h" + #include "ui/console.h" ++#include "qemu-io.h" + + static void hmp_handle_error(Monitor *mon, Error **errp) + { +@@ -1448,3 +1449,20 @@ void hmp_chardev_remove(Monitor *mon, const QDict *qdict) + qmp_chardev_remove(qdict_get_str(qdict, "id"), &local_err); + hmp_handle_error(mon, &local_err); + } ++ ++void hmp_qemu_io(Monitor *mon, const QDict *qdict) ++{ ++ BlockDriverState *bs; ++ const char* device = qdict_get_str(qdict, "device"); ++ const char* command = qdict_get_str(qdict, "command"); ++ Error *err = NULL; ++ ++ bs = bdrv_find(device); ++ if (bs) { ++ qemuio_command(bs, command); ++ } else { ++ error_set(&err, QERR_DEVICE_NOT_FOUND, device); ++ } ++ ++ hmp_handle_error(mon, &err); ++} +diff --git a/hmp.h b/hmp.h +index 9b2c9ce..b27ef3d 100644 +--- a/hmp.h ++++ b/hmp.h +@@ -86,5 +86,6 @@ void hmp_nbd_server_add(Monitor *mon, const QDict *qdict); + void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); + void hmp_chardev_add(Monitor *mon, const QDict *qdict); + void hmp_chardev_remove(Monitor *mon, const QDict *qdict); ++void hmp_qemu_io(Monitor *mon, const QDict *qdict); + + #endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Makefile-create-.-var-run-when-installing-the-POSIX-.patch b/SOURCES/kvm-Makefile-create-.-var-run-when-installing-the-POSIX-.patch new file mode 100644 index 0000000..b9c0ee4 --- /dev/null +++ b/SOURCES/kvm-Makefile-create-.-var-run-when-installing-the-POSIX-.patch @@ -0,0 +1,62 @@ +From b14a772332fe273f7c3430af03bcbb8ab5bcc3ae Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 14:03:27 +0200 +Subject: [PATCH 06/28] Makefile: create ".../var/run" when installing the POSIX guest agent + +RH-Author: Laszlo Ersek +Message-id: <1375279407-13573-7-git-send-email-lersek@redhat.com> +Patchwork-id: 52864 +O-Subject: [RHEL-7 qemu-kvm PATCH 6/6] Makefile: create ".../var/run" when installing the POSIX guest agent +Bugzilla: 964304 +RH-Acked-by: Michal Novotny +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Paolo Bonzini + +Otherwise the default local state directory of POSIX qga won't exist after +installation with a non-standard ${prefix} or DESTDIR. + +For now qga is the only user of ".../var" (= $qemu_localstatedir) too, so +don't create that directory either unless we're installing the agent. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael Roth +(cherry picked from commit f2e3978b5a72870b061d29948075dccc0a72db8e) +--- + Makefile | 10 +++++++++- + 1 files changed, 9 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + Makefile | 10 +++++++++- + 1 files changed, 9 insertions(+), 1 deletions(-) + +diff --git a/Makefile b/Makefile +index dbd96d1..dcd31c6 100644 +--- a/Makefile ++++ b/Makefile +@@ -321,13 +321,21 @@ endif + install-datadir: + $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)" + ++install-localstatedir: ++ifdef CONFIG_POSIX ++ifneq (,$(findstring qemu-ga,$(TOOLS))) ++ $(INSTALL_DIR) "$(DESTDIR)$(qemu_localstatedir)"/run ++endif ++endif ++ + install-confdir: + $(INSTALL_DIR) "$(DESTDIR)$(qemu_confdir)" + + install-sysconfig: install-datadir install-confdir + $(INSTALL_DATA) $(SRC_PATH)/sysconfigs/target/target-x86_64.conf "$(DESTDIR)$(qemu_confdir)" + +-install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig install-datadir ++install: all $(if $(BUILD_DOCS),install-doc) install-sysconfig \ ++install-datadir install-localstatedir + $(INSTALL_DIR) "$(DESTDIR)$(bindir)" + ifneq ($(TOOLS),) + $(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)" +-- +1.7.1 + diff --git a/SOURCES/kvm-Mostly-revert-qemu-help-Sort-devices-by-logical-func.patch b/SOURCES/kvm-Mostly-revert-qemu-help-Sort-devices-by-logical-func.patch new file mode 100644 index 0000000..705c59b --- /dev/null +++ b/SOURCES/kvm-Mostly-revert-qemu-help-Sort-devices-by-logical-func.patch @@ -0,0 +1,177 @@ +From c028066b7a4a68d52a33f6856bb8fe907def2b6b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:10 +0100 +Subject: [PATCH 34/81] Mostly revert "qemu-help: Sort devices by logical functionality" + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 55531 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 05/17] Mostly revert "qemu-help: Sort devices by logical functionality" +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +This reverts most of commit 3d1237fb2ab4edb926c717767bb5e31d6053a7c5. + +The commit claims to sort the output of "-device help" "by +functionality rather than alphabetical". Issues: + +* The output was unsorted before, not alphabetically sorted. + Misleading, but harmless enough. + +* The commit doesn't just sort the output of "-device help" as it + claims, it adds categories to each line of "-device help", and it + prints devices once per category. In particular, devices without a + category aren't shown anymore. Maybe such devices should not exist, + but they do. Regression. + +* Categories are also added to the output of "info qdm". Silent + change, not nice. Output remains unsorted, unlike "-device help". + +I'm going to reimplement the feature we actually want, without the +warts. Reverting the flawed commit first should make it easier to +review. However, I can't revert it completely, since DeviceClass +member categories has been put to use. So leave that part in. + +Signed-off-by: Markus Armbruster +Reviewed-by: Marcel Apfelbaum +Message-id: 1381410021-1538-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 1fc224b4b6d195fb7802d5ba1a0846a4e7a1e2af) +Signed-off-by: Kevin Wolf +--- + include/hw/qdev-core.h | 16 ---------------- + qdev-monitor.c | 48 +++++++++--------------------------------------- + 2 files changed, 9 insertions(+), 55 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/hw/qdev-core.h | 16 ---------------- + qdev-monitor.c | 48 +++++++++--------------------------------------- + 2 files changed, 9 insertions(+), 55 deletions(-) + +diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h +index 18596e9..a8618db 100644 +--- a/include/hw/qdev-core.h ++++ b/include/hw/qdev-core.h +@@ -30,22 +30,6 @@ typedef enum DeviceCategory { + DEVICE_CATEGORY_MAX + } DeviceCategory; + +-static inline const char *qdev_category_get_name(DeviceCategory category) +-{ +- static const char *category_names[DEVICE_CATEGORY_MAX] = { +- [DEVICE_CATEGORY_BRIDGE] = "Controller/Bridge/Hub", +- [DEVICE_CATEGORY_USB] = "USB", +- [DEVICE_CATEGORY_STORAGE] = "Storage", +- [DEVICE_CATEGORY_NETWORK] = "Network", +- [DEVICE_CATEGORY_INPUT] = "Input", +- [DEVICE_CATEGORY_DISPLAY] = "Display", +- [DEVICE_CATEGORY_SOUND] = "Sound", +- [DEVICE_CATEGORY_MISC] = "Misc", +- }; +- +- return category_names[category]; +-}; +- + typedef int (*qdev_initfn)(DeviceState *dev); + typedef int (*qdev_event)(DeviceState *dev); + typedef void (*qdev_resetfn)(DeviceState *dev); +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 230a8df..e54dbc2 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -75,27 +75,24 @@ static bool qdev_class_has_alias(DeviceClass *dc) + return (qdev_class_get_alias(dc) != NULL); + } + +-static void qdev_print_class_devinfo(DeviceClass *dc) ++static void qdev_print_devinfo(ObjectClass *klass, void *opaque) + { +- DeviceCategory category; ++ DeviceClass *dc; ++ bool *show_no_user = opaque; ++ ++ dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE); + +- if (!dc) { ++ if (!dc || (show_no_user && !*show_no_user && dc->no_user)) { + return; + } + +- error_printf("name \"%s\"", object_class_get_name(OBJECT_CLASS(dc))); ++ error_printf("name \"%s\"", object_class_get_name(klass)); + if (dc->bus_type) { + error_printf(", bus %s", dc->bus_type); + } + if (qdev_class_has_alias(dc)) { + error_printf(", alias \"%s\"", qdev_class_get_alias(dc)); + } +- error_printf(", categories"); +- for (category = 0; category < DEVICE_CATEGORY_MAX; ++category) { +- if (test_bit(category, dc->categories)) { +- error_printf(" \"%s\"", qdev_category_get_name(category)); +- } +- } + if (dc->desc) { + error_printf(", desc \"%s\"", dc->desc); + } +@@ -105,15 +102,6 @@ static void qdev_print_class_devinfo(DeviceClass *dc) + error_printf("\n"); + } + +-static void qdev_print_devinfo(ObjectClass *klass, void *opaque) +-{ +- DeviceClass *dc; +- +- dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE); +- +- qdev_print_class_devinfo(dc); +-} +- + static int set_property(const char *name, const char *value, void *opaque) + { + DeviceState *dev = opaque; +@@ -151,21 +139,6 @@ static const char *find_typename_by_alias(const char *alias) + return NULL; + } + +-static void qdev_print_category_devices(DeviceCategory category) +-{ +- DeviceClass *dc; +- GSList *list, *curr; +- +- list = object_class_get_list(TYPE_DEVICE, false); +- for (curr = list; curr; curr = g_slist_next(curr)) { +- dc = (DeviceClass *)object_class_dynamic_cast(curr->data, TYPE_DEVICE); +- if (!dc->no_user && test_bit(category, dc->categories)) { +- qdev_print_class_devinfo(dc); +- } +- } +- g_slist_free(list); +-} +- + int qdev_device_help(QemuOpts *opts) + { + const char *driver; +@@ -174,11 +147,8 @@ int qdev_device_help(QemuOpts *opts) + + driver = qemu_opt_get(opts, "driver"); + if (driver && is_help_option(driver)) { +- DeviceCategory category; +- for (category = 0; category < DEVICE_CATEGORY_MAX; ++category) { +- qdev_print_category_devices(category); +- } +- ++ bool show_no_user = false; ++ object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, &show_no_user); + return 1; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-Partially-revert-rhel-Drop-cfi.pflash01-and-isa-ide-.patch b/SOURCES/kvm-Partially-revert-rhel-Drop-cfi.pflash01-and-isa-ide-.patch new file mode 100644 index 0000000..f8dcb31 --- /dev/null +++ b/SOURCES/kvm-Partially-revert-rhel-Drop-cfi.pflash01-and-isa-ide-.patch @@ -0,0 +1,43 @@ +From 5be39a8c30fba163b3f8358c1b7db02facecb538 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:51 +0100 +Subject: [PATCH 01/22] Partially revert "rhel: Drop "cfi.pflash01" and "isa-ide" device" + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-2-git-send-email-lersek@redhat.com> +Patchwork-id: 56615 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 01/18] Partially revert "rhel: Drop "cfi.pflash01" and "isa-ide" device" +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones +RH-Acked-by: Kevin Wolf + +This reverts the cfi.pflash01 elimination in +commit f6852e27575e095269a47f434d318b5fc8822e0a. + +Signed-off-by: Laszlo Ersek +--- + default-configs/x86_64-softmmu.mak | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/x86_64-softmmu.mak | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index e7c48ec..7b8b05c 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -19,6 +19,7 @@ CONFIG_I8257=y + CONFIG_IDE_PIIX=y + CONFIG_PIIX_PCI=y + CONFIG_I8259=y ++CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) + CONFIG_PCI_HOTPLUG=y + CONFIG_MC146818RTC=y +-- +1.7.1 + diff --git a/SOURCES/kvm-Preparation-for-usb-bt-dongle-conditional-build.patch b/SOURCES/kvm-Preparation-for-usb-bt-dongle-conditional-build.patch new file mode 100644 index 0000000..b6a3607 --- /dev/null +++ b/SOURCES/kvm-Preparation-for-usb-bt-dongle-conditional-build.patch @@ -0,0 +1,245 @@ +From bc5c67b27d0c1d8ec6c4d09352f0de6b6cbddad0 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Mon, 16 Sep 2013 14:38:24 +0200 +Subject: [PATCH 16/29] Preparation for usb-bt-dongle conditional build + +RH-Author: Miroslav Rezanina +Message-id: <0b3a39c76eac58a1b2f9f6c84016f234de0940c0.1379325610.git.mrezanin@redhat.com> +Patchwork-id: 54394 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] Preparation for usb-bt-dongle conditional build +Bugzilla: 1001131 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini + +From: Miroslav Rezanina + +To allow disable usb-bt-dongle device using CONFIG_BLUETOOTH option, some of +functions in vl.c file has to be made accessible in dev-bluetooth.c. This is +pure code moving. + +Signed-off-by: Miroslav Rezanina +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 644e1a8a34d2f799bfeefae94b71593a2aa662ae) +--- + hw/bt/core.c | 23 +++++++++++++++++++ + hw/bt/hci.c | 48 +++++++++++++++++++++++++++++++++++++++ + include/hw/bt.h | 3 +++ + vl.c | 69 --------------------------------------------------------- + 4 files changed, 74 insertions(+), 69 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/bt/core.c | 23 ++++++++++++++++++ + hw/bt/hci.c | 48 ++++++++++++++++++++++++++++++++++++++ + include/hw/bt.h | 3 ++ + vl.c | 69 ------------------------------------------------------- + 4 files changed, 74 insertions(+), 69 deletions(-) + +diff --git a/hw/bt/core.c b/hw/bt/core.c +index 49012e0..0ffc948 100644 +--- a/hw/bt/core.c ++++ b/hw/bt/core.c +@@ -119,3 +119,26 @@ void bt_device_done(struct bt_device_s *dev) + + *p = dev->next; + } ++ ++static struct bt_vlan_s { ++ struct bt_scatternet_s net; ++ int id; ++ struct bt_vlan_s *next; ++} *first_bt_vlan; ++ ++/* find or alloc a new bluetooth "VLAN" */ ++struct bt_scatternet_s *qemu_find_bt_vlan(int id) ++{ ++ struct bt_vlan_s **pvlan, *vlan; ++ for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) { ++ if (vlan->id == id) ++ return &vlan->net; ++ } ++ vlan = g_malloc0(sizeof(struct bt_vlan_s)); ++ vlan->id = id; ++ pvlan = &first_bt_vlan; ++ while (*pvlan != NULL) ++ pvlan = &(*pvlan)->next; ++ *pvlan = vlan; ++ return &vlan->net; ++} +diff --git a/hw/bt/hci.c b/hw/bt/hci.c +index b53cd5d..64e1745 100644 +--- a/hw/bt/hci.c ++++ b/hw/bt/hci.c +@@ -429,6 +429,24 @@ static const uint8_t bt_event_reserved_mask[8] = { + 0xff, 0x9f, 0xfb, 0xff, 0x07, 0x18, 0x00, 0x00, + }; + ++ ++static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len) ++{ ++} ++ ++static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr) ++{ ++ return -ENOTSUP; ++} ++ ++struct HCIInfo null_hci = { ++ .cmd_send = null_hci_send, ++ .sco_send = null_hci_send, ++ .acl_send = null_hci_send, ++ .bdaddr_set = null_hci_addr_set, ++}; ++ ++ + static inline uint8_t *bt_hci_event_start(struct bt_hci_s *hci, + int evt, int len) + { +@@ -2176,6 +2194,36 @@ struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net) + return &s->info; + } + ++struct HCIInfo *hci_init(const char *str) ++{ ++ char *endp; ++ struct bt_scatternet_s *vlan = 0; ++ ++ if (!strcmp(str, "null")) ++ /* null */ ++ return &null_hci; ++ else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':')) ++ /* host[:hciN] */ ++ return bt_host_hci(str[4] ? str + 5 : "hci0"); ++ else if (!strncmp(str, "hci", 3)) { ++ /* hci[,vlan=n] */ ++ if (str[3]) { ++ if (!strncmp(str + 3, ",vlan=", 6)) { ++ vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0)); ++ if (*endp) ++ vlan = 0; ++ } ++ } else ++ vlan = qemu_find_bt_vlan(0); ++ if (vlan) ++ return bt_new_hci(vlan); ++ } ++ ++ fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str); ++ ++ return 0; ++} ++ + static void bt_hci_done(struct HCIInfo *info) + { + struct bt_hci_s *hci = hci_from_info(info); +diff --git a/include/hw/bt.h b/include/hw/bt.h +index 830af94..49a9d03 100644 +--- a/include/hw/bt.h ++++ b/include/hw/bt.h +@@ -108,12 +108,15 @@ struct bt_device_s { + uint16_t clkoff; /* Note: Always little-endian */ + }; + ++extern struct HCIInfo null_hci; + /* bt.c */ + void bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net); + void bt_device_done(struct bt_device_s *dev); ++struct bt_scatternet_s *qemu_find_bt_vlan(int id); + + /* bt-hci.c */ + struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net); ++struct HCIInfo *hci_init(const char *str); + + /* bt-vhci.c */ + void bt_vhci_init(struct HCIInfo *info); +diff --git a/vl.c b/vl.c +index 24536b5..d022f50 100644 +--- a/vl.c ++++ b/vl.c +@@ -844,45 +844,6 @@ static int nb_hcis; + static int cur_hci; + static struct HCIInfo *hci_table[MAX_NICS]; + +-static struct bt_vlan_s { +- struct bt_scatternet_s net; +- int id; +- struct bt_vlan_s *next; +-} *first_bt_vlan; +- +-/* find or alloc a new bluetooth "VLAN" */ +-static struct bt_scatternet_s *qemu_find_bt_vlan(int id) +-{ +- struct bt_vlan_s **pvlan, *vlan; +- for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) { +- if (vlan->id == id) +- return &vlan->net; +- } +- vlan = g_malloc0(sizeof(struct bt_vlan_s)); +- vlan->id = id; +- pvlan = &first_bt_vlan; +- while (*pvlan != NULL) +- pvlan = &(*pvlan)->next; +- *pvlan = vlan; +- return &vlan->net; +-} +- +-static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len) +-{ +-} +- +-static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr) +-{ +- return -ENOTSUP; +-} +- +-static struct HCIInfo null_hci = { +- .cmd_send = null_hci_send, +- .sco_send = null_hci_send, +- .acl_send = null_hci_send, +- .bdaddr_set = null_hci_addr_set, +-}; +- + struct HCIInfo *qemu_next_hci(void) + { + if (cur_hci == nb_hcis) +@@ -891,36 +852,6 @@ struct HCIInfo *qemu_next_hci(void) + return hci_table[cur_hci++]; + } + +-static struct HCIInfo *hci_init(const char *str) +-{ +- char *endp; +- struct bt_scatternet_s *vlan = 0; +- +- if (!strcmp(str, "null")) +- /* null */ +- return &null_hci; +- else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':')) +- /* host[:hciN] */ +- return bt_host_hci(str[4] ? str + 5 : "hci0"); +- else if (!strncmp(str, "hci", 3)) { +- /* hci[,vlan=n] */ +- if (str[3]) { +- if (!strncmp(str + 3, ",vlan=", 6)) { +- vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0)); +- if (*endp) +- vlan = 0; +- } +- } else +- vlan = qemu_find_bt_vlan(0); +- if (vlan) +- return bt_new_hci(vlan); +- } +- +- fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str); +- +- return 0; +-} +- + static int bt_hci_parse(const char *str) + { + struct HCIInfo *hci; +-- +1.7.1 + diff --git a/SOURCES/kvm-Provide-init-function-for-ram-migration.patch b/SOURCES/kvm-Provide-init-function-for-ram-migration.patch new file mode 100644 index 0000000..821dc5a --- /dev/null +++ b/SOURCES/kvm-Provide-init-function-for-ram-migration.patch @@ -0,0 +1,113 @@ +From 86303381279f7c0e9d98693496d888801a503148 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 8 May 2014 10:58:40 +0200 +Subject: [PATCH 05/31] Provide init function for ram migration + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1399546722-6350-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58742 +O-Subject: [RHEL7.1/RHEL7.0.z qemu-kvm PATCH 2/4] Provide init function for ram migration +Bugzilla: 1066338 +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster +RH-Acked-by: Amit Shah + +From: "Dr. David Alan Gilbert" + +Provide ram_mig_init (like blk_mig_init) for vl.c to initialise stuff +to do with ram migration (currently in arch_init.c). + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Gonglei +Reviewed-by: Markus Armbruster +Signed-off-by: Juan Quintela +(cherry picked from commit 0d6ab3ab9149767eba192ec5ad659fd34e55a291) +--- + arch_init.c | 7 ++++++- + include/migration/migration.h | 2 -- + include/sysemu/arch_init.h | 1 + + vl.c | 3 +-- + 4 files changed, 8 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 7 ++++++- + include/migration/migration.h | 2 -- + include/sysemu/arch_init.h | 1 + + vl.c | 3 +-- + 4 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 8641afa..37c9f6d 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -1099,7 +1099,7 @@ done: + return ret; + } + +-SaveVMHandlers savevm_ram_handlers = { ++static SaveVMHandlers savevm_ram_handlers = { + .save_live_setup = ram_save_setup, + .save_live_iterate = ram_save_iterate, + .save_live_complete = ram_save_complete, +@@ -1108,6 +1108,11 @@ SaveVMHandlers savevm_ram_handlers = { + .cancel = ram_migration_cancel, + }; + ++void ram_mig_init(void) ++{ ++ register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, NULL); ++} ++ + struct soundhw { + const char *name; + const char *descr; +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 9314511..c99a67c 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -102,8 +102,6 @@ void free_xbzrle_decoded_buf(void); + + void acct_update_position(QEMUFile *f, size_t size, bool zero); + +-extern SaveVMHandlers savevm_ram_handlers; +- + uint64_t dup_mig_bytes_transferred(void); + uint64_t dup_mig_pages_transferred(void); + uint64_t skipped_mig_bytes_transferred(void); +diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h +index be71bca..182d48d 100644 +--- a/include/sysemu/arch_init.h ++++ b/include/sysemu/arch_init.h +@@ -29,6 +29,7 @@ extern const uint32_t arch_type; + void select_soundhw(const char *optarg); + void do_acpitable_option(const QemuOpts *opts); + void do_smbios_option(QemuOpts *opts); ++void ram_mig_init(void); + void cpudef_init(void); + void audio_init(void); + int tcg_available(void); +diff --git a/vl.c b/vl.c +index 51300e7..6ff06cc 100644 +--- a/vl.c ++++ b/vl.c +@@ -4133,6 +4133,7 @@ int main(int argc, char **argv, char **envp) + cpu_exec_init_all(); + + blk_mig_init(); ++ ram_mig_init(); + + /* open the virtual block devices */ + if (snapshot) +@@ -4147,8 +4148,6 @@ int main(int argc, char **argv, char **envp) + default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS); + default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS); + +- register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, NULL); +- + if (nb_numa_nodes > 0) { + int i; + +-- +1.7.1 + diff --git a/SOURCES/kvm-Python-lang-gdb-script-to-extract-x86_64-guest-vmcor.patch b/SOURCES/kvm-Python-lang-gdb-script-to-extract-x86_64-guest-vmcor.patch new file mode 100644 index 0000000..8de667d --- /dev/null +++ b/SOURCES/kvm-Python-lang-gdb-script-to-extract-x86_64-guest-vmcor.patch @@ -0,0 +1,555 @@ +From 11d85a217f6b3b15710bbc786adebd943774be09 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 20 Feb 2015 09:53:20 +0100 +Subject: [PATCH 14/16] Python-lang gdb script to extract x86_64 guest vmcore + from qemu coredump + +Message-id: <1424426001-3543-2-git-send-email-lersek@redhat.com> +Patchwork-id: 63908 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v2 1/2] Python-lang gdb script to extract x86_64 guest vmcore from qemu coredump +Bugzilla: 828493 +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Jeff Nelson +RH-Acked-by: Miroslav Rezanina + +When qemu dies unexpectedly, for example in response to an explicit +abort() call, or (more importantly) when an external signal is delivered +to it that results in a coredump, sometimes it is useful to extract the +guest vmcore from the qemu process' memory image. The guest vmcore might +help understand an emulation problem in qemu, or help debug the guest. + +This script reimplements (and cuts many features of) the +qmp_dump_guest_memory() command in gdb/Python, + + https://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html + +working off the saved memory image of the qemu process. The docstring in +the patch (serving as gdb help text) describes the limitations relative to +the QMP command. + +Dependencies of qmp_dump_guest_memory() have been reimplemented as needed. +I sought to follow the general structure, sticking to original function +names where possible. However, keeping it simple prevailed in some places. + +The patch has been tested with a 4 VCPU, 768 MB, RHEL-6.4 +(2.6.32-358.el6.x86_64) guest: + +- The script printed + +> guest RAM blocks: +> target_start target_end host_addr message count +> ---------------- ---------------- ---------------- ------- ----- +> 0000000000000000 00000000000a0000 00007f95d0000000 added 1 +> 00000000000a0000 00000000000b0000 00007f960ac00000 added 2 +> 00000000000c0000 00000000000ca000 00007f95d00c0000 added 3 +> 00000000000ca000 00000000000cd000 00007f95d00ca000 joined 3 +> 00000000000cd000 00000000000d0000 00007f95d00cd000 joined 3 +> 00000000000d0000 00000000000f0000 00007f95d00d0000 joined 3 +> 00000000000f0000 0000000000100000 00007f95d00f0000 joined 3 +> 0000000000100000 0000000030000000 00007f95d0100000 joined 3 +> 00000000fc000000 00000000fc800000 00007f960ac00000 added 4 +> 00000000fffe0000 0000000100000000 00007f9618800000 added 5 +> dumping range at 00007f95d0000000 for length 00000000000a0000 +> dumping range at 00007f960ac00000 for length 0000000000010000 +> dumping range at 00007f95d00c0000 for length 000000002ff40000 +> dumping range at 00007f960ac00000 for length 0000000000800000 +> dumping range at 00007f9618800000 for length 0000000000020000 + +- The vmcore was checked with "readelf", comparing the results against a + vmcore written by qmp_dump_guest_memory(): + +> --- theirs 2013-09-12 17:38:59.797289404 +0200 +> +++ mine 2013-09-12 17:39:03.820289404 +0200 +> @@ -27,16 +27,16 @@ +> Type Offset VirtAddr PhysAddr +> FileSiz MemSiz Flags Align +> NOTE 0x0000000000000190 0x0000000000000000 0x0000000000000000 +> - 0x0000000000000ca0 0x0000000000000ca0 0 +> - LOAD 0x0000000000000e30 0x0000000000000000 0x0000000000000000 +> + 0x000000000000001c 0x000000000000001c 0 +> + LOAD 0x00000000000001ac 0x0000000000000000 0x0000000000000000 +> 0x00000000000a0000 0x00000000000a0000 0 +> - LOAD 0x00000000000a0e30 0x0000000000000000 0x00000000000a0000 +> + LOAD 0x00000000000a01ac 0x0000000000000000 0x00000000000a0000 +> 0x0000000000010000 0x0000000000010000 0 +> - LOAD 0x00000000000b0e30 0x0000000000000000 0x00000000000c0000 +> + LOAD 0x00000000000b01ac 0x0000000000000000 0x00000000000c0000 +> 0x000000002ff40000 0x000000002ff40000 0 +> - LOAD 0x000000002fff0e30 0x0000000000000000 0x00000000fc000000 +> + LOAD 0x000000002fff01ac 0x0000000000000000 0x00000000fc000000 +> 0x0000000000800000 0x0000000000800000 0 +> - LOAD 0x00000000307f0e30 0x0000000000000000 0x00000000fffe0000 +> + LOAD 0x00000000307f01ac 0x0000000000000000 0x00000000fffe0000 +> 0x0000000000020000 0x0000000000020000 0 +> +> There is no dynamic section in this file. +> @@ -47,13 +47,6 @@ +> +> No version information found in this file. +> +> -Notes at offset 0x00000190 with length 0x00000ca0: +> +Notes at offset 0x00000190 with length 0x0000001c: +> Owner Data size Description +> - CORE 0x00000150 NT_PRSTATUS (prstatus structure) +> - CORE 0x00000150 NT_PRSTATUS (prstatus structure) +> - CORE 0x00000150 NT_PRSTATUS (prstatus structure) +> - CORE 0x00000150 NT_PRSTATUS (prstatus structure) +> - QEMU 0x000001b0 Unknown note type: (0x00000000) +> - QEMU 0x000001b0 Unknown note type: (0x00000000) +> - QEMU 0x000001b0 Unknown note type: (0x00000000) +> - QEMU 0x000001b0 Unknown note type: (0x00000000) +> + NONE 0x00000005 Unknown note type: (0x00000000) + +- The vmcore was checked with "crash" too, again comparing the results + against a vmcore written by qmp_dump_guest_memory(): + +> --- guest.vmcore.log2 2013-09-12 17:52:27.074289201 +0200 +> +++ example.dump.log2 2013-09-12 17:52:15.904289203 +0200 +> @@ -22,11 +22,11 @@ +> This GDB was configured as "x86_64-unknown-linux-gnu"... +> +> KERNEL: /usr/lib/debug/lib/modules/2.6.32-358.el6.x86_64/vmlinux +> - DUMPFILE: /home/lacos/tmp/guest.vmcore +> + DUMPFILE: /home/lacos/tmp/example.dump +> CPUS: 4 +> - DATE: Thu Sep 12 17:16:11 2013 +> - UPTIME: 00:01:09 +> -LOAD AVERAGE: 0.07, 0.03, 0.00 +> + DATE: Thu Sep 12 17:17:41 2013 +> + UPTIME: 00:00:38 +> +LOAD AVERAGE: 0.18, 0.05, 0.01 +> TASKS: 130 +> NODENAME: localhost.localdomain +> RELEASE: 2.6.32-358.el6.x86_64 +> @@ -38,12 +38,12 @@ +> COMMAND: "swapper" +> TASK: ffffffff81a8d020 (1 of 4) [THREAD_INFO: ffffffff81a00000] +> CPU: 0 +> - STATE: TASK_RUNNING (PANIC) +> + STATE: TASK_RUNNING (ACTIVE) +> + WARNING: panic task not found +> +> crash> bt +> PID: 0 TASK: ffffffff81a8d020 CPU: 0 COMMAND: "swapper" +> - #0 [ffffffff81a01ed0] default_idle at ffffffff8101495d +> - #1 [ffffffff81a01ef0] cpu_idle at ffffffff81009fc6 +> + #0 [ffffffff81a01ef0] cpu_idle at ffffffff81009fc6 +> crash> task ffffffff81a8d020 +> PID: 0 TASK: ffffffff81a8d020 CPU: 0 COMMAND: "swapper" +> struct task_struct { +> @@ -75,7 +75,7 @@ +> prev = 0xffffffff81a8d080 +> }, +> on_rq = 0, +> - exec_start = 8618466836, +> + exec_start = 7469214014, +> sum_exec_runtime = 0, +> vruntime = 0, +> prev_sum_exec_runtime = 0, +> @@ -149,7 +149,7 @@ +> }, +> tasks = { +> next = 0xffff88002d621948, +> - prev = 0xffff880029618f28 +> + prev = 0xffff880023b74488 +> }, +> pushable_tasks = { +> prio = 140, +> @@ -165,7 +165,7 @@ +> } +> }, +> mm = 0x0, +> - active_mm = 0xffff88002929b780, +> + active_mm = 0xffff8800297eb980, +> exit_state = 0, +> exit_code = 0, +> exit_signal = 0, +> @@ -177,7 +177,7 @@ +> sched_reset_on_fork = 0, +> pid = 0, +> tgid = 0, +> - stack_canary = 2483693585637059287, +> + stack_canary = 7266362296181431986, +> real_parent = 0xffffffff81a8d020, +> parent = 0xffffffff81a8d020, +> children = { +> @@ -224,14 +224,14 @@ +> set_child_tid = 0x0, +> clear_child_tid = 0x0, +> utime = 0, +> - stime = 3, +> + stime = 2, +> utimescaled = 0, +> - stimescaled = 3, +> + stimescaled = 2, +> gtime = 0, +> prev_utime = 0, +> prev_stime = 0, +> nvcsw = 0, +> - nivcsw = 1000, +> + nivcsw = 1764, +> start_time = { +> tv_sec = 0, +> tv_nsec = 0 + +- I asked for Dave Anderson's help with verifying the + extracted vmcore, and his comments make me think I should post + this. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 3e16d14fd93ca6059134ba6b4f65c1c3e4cd3a18) +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 339 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 339 insertions(+) + create mode 100644 scripts/dump-guest-memory.py + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +new file mode 100644 +index 0000000..1ed8b67 +--- /dev/null ++++ b/scripts/dump-guest-memory.py +@@ -0,0 +1,339 @@ ++# This python script adds a new gdb command, "dump-guest-memory". It ++# should be loaded with "source dump-guest-memory.py" at the (gdb) ++# prompt. ++# ++# Copyright (C) 2013, Red Hat, Inc. ++# ++# Authors: ++# Laszlo Ersek ++# ++# This work is licensed under the terms of the GNU GPL, version 2 or later. See ++# the COPYING file in the top-level directory. ++# ++# The leading docstring doesn't have idiomatic Python formatting. It is ++# printed by gdb's "help" command (the first line is printed in the ++# "help data" summary), and it should match how other help texts look in ++# gdb. ++ ++import struct ++ ++class DumpGuestMemory(gdb.Command): ++ """Extract guest vmcore from qemu process coredump. ++ ++The sole argument is FILE, identifying the target file to write the ++guest vmcore to. ++ ++This GDB command reimplements the dump-guest-memory QMP command in ++python, using the representation of guest memory as captured in the qemu ++coredump. The qemu process that has been dumped must have had the ++command line option "-machine dump-guest-core=on". ++ ++For simplicity, the "paging", "begin" and "end" parameters of the QMP ++command are not supported -- no attempt is made to get the guest's ++internal paging structures (ie. paging=false is hard-wired), and guest ++memory is always fully dumped. ++ ++Only x86_64 guests are supported. ++ ++The CORE/NT_PRSTATUS and QEMU notes (that is, the VCPUs' statuses) are ++not written to the vmcore. Preparing these would require context that is ++only present in the KVM host kernel module when the guest is alive. A ++fake ELF note is written instead, only to keep the ELF parser of "crash" ++happy. ++ ++Dependent on how busted the qemu process was at the time of the ++coredump, this command might produce unpredictable results. If qemu ++deliberately called abort(), or it was dumped in response to a signal at ++a halfway fortunate point, then its coredump should be in reasonable ++shape and this command should mostly work.""" ++ ++ TARGET_PAGE_SIZE = 0x1000 ++ TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000 ++ ++ # Various ELF constants ++ EM_X86_64 = 62 # AMD x86-64 target machine ++ ELFDATA2LSB = 1 # little endian ++ ELFCLASS64 = 2 ++ ELFMAG = "\x7FELF" ++ EV_CURRENT = 1 ++ ET_CORE = 4 ++ PT_LOAD = 1 ++ PT_NOTE = 4 ++ ++ # Special value for e_phnum. This indicates that the real number of ++ # program headers is too large to fit into e_phnum. Instead the real ++ # value is in the field sh_info of section 0. ++ PN_XNUM = 0xFFFF ++ ++ # Format strings for packing and header size calculation. ++ ELF64_EHDR = ("4s" # e_ident/magic ++ "B" # e_ident/class ++ "B" # e_ident/data ++ "B" # e_ident/version ++ "B" # e_ident/osabi ++ "8s" # e_ident/pad ++ "H" # e_type ++ "H" # e_machine ++ "I" # e_version ++ "Q" # e_entry ++ "Q" # e_phoff ++ "Q" # e_shoff ++ "I" # e_flags ++ "H" # e_ehsize ++ "H" # e_phentsize ++ "H" # e_phnum ++ "H" # e_shentsize ++ "H" # e_shnum ++ "H" # e_shstrndx ++ ) ++ ELF64_PHDR = ("I" # p_type ++ "I" # p_flags ++ "Q" # p_offset ++ "Q" # p_vaddr ++ "Q" # p_paddr ++ "Q" # p_filesz ++ "Q" # p_memsz ++ "Q" # p_align ++ ) ++ ++ def __init__(self): ++ super(DumpGuestMemory, self).__init__("dump-guest-memory", ++ gdb.COMMAND_DATA, ++ gdb.COMPLETE_FILENAME) ++ self.uintptr_t = gdb.lookup_type("uintptr_t") ++ self.elf64_ehdr_le = struct.Struct("<%s" % self.ELF64_EHDR) ++ self.elf64_phdr_le = struct.Struct("<%s" % self.ELF64_PHDR) ++ ++ def int128_get64(self, val): ++ assert (val["hi"] == 0) ++ return val["lo"] ++ ++ def qtailq_foreach(self, head, field_str): ++ var_p = head["tqh_first"] ++ while (var_p != 0): ++ var = var_p.dereference() ++ yield var ++ var_p = var[field_str]["tqe_next"] ++ ++ def qemu_get_ram_block(self, ram_addr): ++ ram_blocks = gdb.parse_and_eval("ram_list.blocks") ++ for block in self.qtailq_foreach(ram_blocks, "next"): ++ if (ram_addr - block["offset"] < block["length"]): ++ return block ++ raise gdb.GdbError("Bad ram offset %x" % ram_addr) ++ ++ def qemu_get_ram_ptr(self, ram_addr): ++ block = self.qemu_get_ram_block(ram_addr) ++ return block["host"] + (ram_addr - block["offset"]) ++ ++ def memory_region_get_ram_ptr(self, mr): ++ if (mr["alias"] != 0): ++ return (self.memory_region_get_ram_ptr(mr["alias"].dereference()) + ++ mr["alias_offset"]) ++ return self.qemu_get_ram_ptr(mr["ram_addr"] & self.TARGET_PAGE_MASK) ++ ++ def guest_phys_blocks_init(self): ++ self.guest_phys_blocks = [] ++ ++ def guest_phys_blocks_append(self): ++ print "guest RAM blocks:" ++ print ("target_start target_end host_addr message " ++ "count") ++ print ("---------------- ---------------- ---------------- ------- " ++ "-----") ++ ++ current_map_p = gdb.parse_and_eval("address_space_memory.current_map") ++ current_map = current_map_p.dereference() ++ for cur in range(current_map["nr"]): ++ flat_range = (current_map["ranges"] + cur).dereference() ++ mr = flat_range["mr"].dereference() ++ ++ # we only care about RAM ++ if (not mr["ram"]): ++ continue ++ ++ section_size = self.int128_get64(flat_range["addr"]["size"]) ++ target_start = self.int128_get64(flat_range["addr"]["start"]) ++ target_end = target_start + section_size ++ host_addr = (self.memory_region_get_ram_ptr(mr) + ++ flat_range["offset_in_region"]) ++ predecessor = None ++ ++ # find continuity in guest physical address space ++ if (len(self.guest_phys_blocks) > 0): ++ predecessor = self.guest_phys_blocks[-1] ++ predecessor_size = (predecessor["target_end"] - ++ predecessor["target_start"]) ++ ++ # the memory API guarantees monotonically increasing ++ # traversal ++ assert (predecessor["target_end"] <= target_start) ++ ++ # we want continuity in both guest-physical and ++ # host-virtual memory ++ if (predecessor["target_end"] < target_start or ++ predecessor["host_addr"] + predecessor_size != host_addr): ++ predecessor = None ++ ++ if (predecessor is None): ++ # isolated mapping, add it to the list ++ self.guest_phys_blocks.append({"target_start": target_start, ++ "target_end" : target_end, ++ "host_addr" : host_addr}) ++ message = "added" ++ else: ++ # expand predecessor until @target_end; predecessor's ++ # start doesn't change ++ predecessor["target_end"] = target_end ++ message = "joined" ++ ++ print ("%016x %016x %016x %-7s %5u" % ++ (target_start, target_end, host_addr.cast(self.uintptr_t), ++ message, len(self.guest_phys_blocks))) ++ ++ def cpu_get_dump_info(self): ++ # We can't synchronize the registers with KVM post-mortem, and ++ # the bits in (first_x86_cpu->env.hflags) seem to be stale; they ++ # may not reflect long mode for example. Hence just assume the ++ # most common values. This also means that instruction pointer ++ # etc. will be bogus in the dump, but at least the RAM contents ++ # should be valid. ++ self.dump_info = {"d_machine": self.EM_X86_64, ++ "d_endian" : self.ELFDATA2LSB, ++ "d_class" : self.ELFCLASS64} ++ ++ def encode_elf64_ehdr_le(self): ++ return self.elf64_ehdr_le.pack( ++ self.ELFMAG, # e_ident/magic ++ self.dump_info["d_class"], # e_ident/class ++ self.dump_info["d_endian"], # e_ident/data ++ self.EV_CURRENT, # e_ident/version ++ 0, # e_ident/osabi ++ "", # e_ident/pad ++ self.ET_CORE, # e_type ++ self.dump_info["d_machine"], # e_machine ++ self.EV_CURRENT, # e_version ++ 0, # e_entry ++ self.elf64_ehdr_le.size, # e_phoff ++ 0, # e_shoff ++ 0, # e_flags ++ self.elf64_ehdr_le.size, # e_ehsize ++ self.elf64_phdr_le.size, # e_phentsize ++ self.phdr_num, # e_phnum ++ 0, # e_shentsize ++ 0, # e_shnum ++ 0 # e_shstrndx ++ ) ++ ++ def encode_elf64_note_le(self): ++ return self.elf64_phdr_le.pack(self.PT_NOTE, # p_type ++ 0, # p_flags ++ (self.memory_offset - ++ len(self.note)), # p_offset ++ 0, # p_vaddr ++ 0, # p_paddr ++ len(self.note), # p_filesz ++ len(self.note), # p_memsz ++ 0 # p_align ++ ) ++ ++ def encode_elf64_load_le(self, offset, start_hwaddr, range_size): ++ return self.elf64_phdr_le.pack(self.PT_LOAD, # p_type ++ 0, # p_flags ++ offset, # p_offset ++ 0, # p_vaddr ++ start_hwaddr, # p_paddr ++ range_size, # p_filesz ++ range_size, # p_memsz ++ 0 # p_align ++ ) ++ ++ def note_init(self, name, desc, type): ++ # name must include a trailing NUL ++ namesz = (len(name) + 1 + 3) / 4 * 4 ++ descsz = (len(desc) + 3) / 4 * 4 ++ fmt = ("<" # little endian ++ "I" # n_namesz ++ "I" # n_descsz ++ "I" # n_type ++ "%us" # name ++ "%us" # desc ++ % (namesz, descsz)) ++ self.note = struct.pack(fmt, ++ len(name) + 1, len(desc), type, name, desc) ++ ++ def dump_init(self): ++ self.guest_phys_blocks_init() ++ self.guest_phys_blocks_append() ++ self.cpu_get_dump_info() ++ # we have no way to retrieve the VCPU status from KVM ++ # post-mortem ++ self.note_init("NONE", "EMPTY", 0) ++ ++ # Account for PT_NOTE. ++ self.phdr_num = 1 ++ ++ # We should never reach PN_XNUM for paging=false dumps: there's ++ # just a handful of discontiguous ranges after merging. ++ self.phdr_num += len(self.guest_phys_blocks) ++ assert (self.phdr_num < self.PN_XNUM) ++ ++ # Calculate the ELF file offset where the memory dump commences: ++ # ++ # ELF header ++ # PT_NOTE ++ # PT_LOAD: 1 ++ # PT_LOAD: 2 ++ # ... ++ # PT_LOAD: len(self.guest_phys_blocks) ++ # ELF note ++ # memory dump ++ self.memory_offset = (self.elf64_ehdr_le.size + ++ self.elf64_phdr_le.size * self.phdr_num + ++ len(self.note)) ++ ++ def dump_begin(self, vmcore): ++ vmcore.write(self.encode_elf64_ehdr_le()) ++ vmcore.write(self.encode_elf64_note_le()) ++ running = self.memory_offset ++ for block in self.guest_phys_blocks: ++ range_size = block["target_end"] - block["target_start"] ++ vmcore.write(self.encode_elf64_load_le(running, ++ block["target_start"], ++ range_size)) ++ running += range_size ++ vmcore.write(self.note) ++ ++ def dump_iterate(self, vmcore): ++ qemu_core = gdb.inferiors()[0] ++ for block in self.guest_phys_blocks: ++ cur = block["host_addr"] ++ left = block["target_end"] - block["target_start"] ++ print ("dumping range at %016x for length %016x" % ++ (cur.cast(self.uintptr_t), left)) ++ while (left > 0): ++ chunk_size = min(self.TARGET_PAGE_SIZE, left) ++ chunk = qemu_core.read_memory(cur, chunk_size) ++ vmcore.write(chunk) ++ cur += chunk_size ++ left -= chunk_size ++ ++ def create_vmcore(self, filename): ++ vmcore = open(filename, "wb") ++ self.dump_begin(vmcore) ++ self.dump_iterate(vmcore) ++ vmcore.close() ++ ++ def invoke(self, args, from_tty): ++ # Unwittingly pressing the Enter key after the command should ++ # not dump the same multi-gig coredump to the same file. ++ self.dont_repeat() ++ ++ argv = gdb.string_to_argv(args) ++ if (len(argv) != 1): ++ raise gdb.GdbError("usage: dump-guest-memory FILE") ++ ++ self.dump_init() ++ self.create_vmcore(argv[0]) ++ ++DumpGuestMemory() +-- +1.8.3.1 + diff --git a/SOURCES/kvm-QEMUBH-make-AioContext-s-bh-re-entrant.patch b/SOURCES/kvm-QEMUBH-make-AioContext-s-bh-re-entrant.patch new file mode 100644 index 0000000..321b803 --- /dev/null +++ b/SOURCES/kvm-QEMUBH-make-AioContext-s-bh-re-entrant.patch @@ -0,0 +1,188 @@ +From 0bf037188149824a8ae161ad9dea7d650b6f7346 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 21 Jan 2014 11:25:16 -0500 +Subject: [PATCH 5/6] QEMUBH: make AioContext's bh re-entrant + +Message-id: <1390303517-20167-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56866 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/2] QEMUBH: make AioContext's bh re-entrant +Bugzilla: 1009297 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +From: Liu Ping Fan + +BH will be used outside big lock, so introduce lock to protect +between the writers, ie, bh's adders and deleter. The lock only +affects the writers and bh's callback does not take this extra lock. +Note that for the same AioContext, aio_bh_poll() can not run in +parallel yet. + +Signed-off-by: Liu Ping Fan +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit dcc772e2f2b7c2a68644133fea2b874f6751a57b) +--- + async.c | 33 +++++++++++++++++++++++++++++++-- + include/block/aio.h | 7 +++++++ + 2 files changed, 38 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + async.c | 33 +++++++++++++++++++++++++++++++-- + include/block/aio.h | 7 +++++++ + 2 files changed, 38 insertions(+), 2 deletions(-) + +diff --git a/async.c b/async.c +index 90fe906..5ce3633 100644 +--- a/async.c ++++ b/async.c +@@ -47,11 +47,16 @@ QEMUBH *aio_bh_new(AioContext *ctx, QEMUBHFunc *cb, void *opaque) + bh->ctx = ctx; + bh->cb = cb; + bh->opaque = opaque; ++ qemu_mutex_lock(&ctx->bh_lock); + bh->next = ctx->first_bh; ++ /* Make sure that the members are ready before putting bh into list */ ++ smp_wmb(); + ctx->first_bh = bh; ++ qemu_mutex_unlock(&ctx->bh_lock); + return bh; + } + ++/* Multiple occurrences of aio_bh_poll cannot be called concurrently */ + int aio_bh_poll(AioContext *ctx) + { + QEMUBH *bh, **bhp, *next; +@@ -61,9 +66,15 @@ int aio_bh_poll(AioContext *ctx) + + ret = 0; + for (bh = ctx->first_bh; bh; bh = next) { ++ /* Make sure that fetching bh happens before accessing its members */ ++ smp_read_barrier_depends(); + next = bh->next; + if (!bh->deleted && bh->scheduled) { + bh->scheduled = 0; ++ /* Paired with write barrier in bh schedule to ensure reading for ++ * idle & callbacks coming after bh's scheduling. ++ */ ++ smp_rmb(); + if (!bh->idle) + ret = 1; + bh->idle = 0; +@@ -75,6 +86,7 @@ int aio_bh_poll(AioContext *ctx) + + /* remove deleted bhs */ + if (!ctx->walking_bh) { ++ qemu_mutex_lock(&ctx->bh_lock); + bhp = &ctx->first_bh; + while (*bhp) { + bh = *bhp; +@@ -85,6 +97,7 @@ int aio_bh_poll(AioContext *ctx) + bhp = &bh->next; + } + } ++ qemu_mutex_unlock(&ctx->bh_lock); + } + + return ret; +@@ -94,24 +107,38 @@ void qemu_bh_schedule_idle(QEMUBH *bh) + { + if (bh->scheduled) + return; +- bh->scheduled = 1; + bh->idle = 1; ++ /* Make sure that idle & any writes needed by the callback are done ++ * before the locations are read in the aio_bh_poll. ++ */ ++ smp_wmb(); ++ bh->scheduled = 1; + } + + void qemu_bh_schedule(QEMUBH *bh) + { + if (bh->scheduled) + return; +- bh->scheduled = 1; + bh->idle = 0; ++ /* Make sure that idle & any writes needed by the callback are done ++ * before the locations are read in the aio_bh_poll. ++ */ ++ smp_wmb(); ++ bh->scheduled = 1; + aio_notify(bh->ctx); + } + ++ ++/* This func is async. ++ */ + void qemu_bh_cancel(QEMUBH *bh) + { + bh->scheduled = 0; + } + ++/* This func is async.The bottom half will do the delete action at the finial ++ * end. ++ */ + void qemu_bh_delete(QEMUBH *bh) + { + bh->scheduled = 0; +@@ -176,6 +203,7 @@ aio_ctx_finalize(GSource *source) + thread_pool_free(ctx->thread_pool); + aio_set_event_notifier(ctx, &ctx->notifier, NULL, NULL); + event_notifier_cleanup(&ctx->notifier); ++ qemu_mutex_destroy(&ctx->bh_lock); + g_array_free(ctx->pollfds, TRUE); + } + +@@ -211,6 +239,7 @@ AioContext *aio_context_new(void) + ctx = (AioContext *) g_source_new(&aio_source_funcs, sizeof(AioContext)); + ctx->pollfds = g_array_new(FALSE, FALSE, sizeof(GPollFD)); + ctx->thread_pool = NULL; ++ qemu_mutex_init(&ctx->bh_lock); + event_notifier_init(&ctx->notifier, false); + aio_set_event_notifier(ctx, &ctx->notifier, + (EventNotifierHandler *) +diff --git a/include/block/aio.h b/include/block/aio.h +index 1836793..cc77771 100644 +--- a/include/block/aio.h ++++ b/include/block/aio.h +@@ -17,6 +17,7 @@ + #include "qemu-common.h" + #include "qemu/queue.h" + #include "qemu/event_notifier.h" ++#include "qemu/thread.h" + + typedef struct BlockDriverAIOCB BlockDriverAIOCB; + typedef void BlockDriverCompletionFunc(void *opaque, int ret); +@@ -53,6 +54,8 @@ typedef struct AioContext { + */ + int walking_handlers; + ++ /* lock to protect between bh's adders and deleter */ ++ QemuMutex bh_lock; + /* Anchor of the list of Bottom Halves belonging to the context */ + struct QEMUBH *first_bh; + +@@ -127,6 +130,8 @@ void aio_notify(AioContext *ctx); + * aio_bh_poll: Poll bottom halves for an AioContext. + * + * These are internal functions used by the QEMU main loop. ++ * And notice that multiple occurrences of aio_bh_poll cannot ++ * be called concurrently + */ + int aio_bh_poll(AioContext *ctx); + +@@ -163,6 +168,8 @@ void qemu_bh_cancel(QEMUBH *bh); + * Deleting a bottom half frees the memory that was allocated for it by + * qemu_bh_new. It also implies canceling the bottom half if it was + * scheduled. ++ * This func is async. The bottom half will do the delete action at the finial ++ * end. + * + * @bh: The bottom half to be deleted. + */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-QMP-Document-throttling-parameters-of-__com.redhat_d.patch b/SOURCES/kvm-QMP-Document-throttling-parameters-of-__com.redhat_d.patch new file mode 100644 index 0000000..4098edc --- /dev/null +++ b/SOURCES/kvm-QMP-Document-throttling-parameters-of-__com.redhat_d.patch @@ -0,0 +1,56 @@ +From 112d92118243fa1e430c021c6007ec4fcfcb930d Mon Sep 17 00:00:00 2001 +Message-Id: <112d92118243fa1e430c021c6007ec4fcfcb930d.1387385974.git.minovotn@redhat.com> +In-Reply-To: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +References: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 17 Dec 2013 06:46:38 +0100 +Subject: [PATCH 4/5] QMP: Document throttling parameters of + __com.redhat_drive_add + +RH-Author: Markus Armbruster +Message-id: <1387262799-10350-6-git-send-email-armbru@redhat.com> +Patchwork-id: 56296 +O-Subject: [PATCH v2 5/6] QMP: Document throttling parameters of __com.redhat_drive_add +Bugzilla: 889051 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +The previous commit copied the code from RHEL-6, including the +throttling parameters added in RHEL-6 commit ea4348a "block: Allow IO +throttling fields in __com.redhat_drive_add". That commit neglected +to update documentation, then in qemu-monitor.hx, now in +qmp-commands.hx. Update it, so that qmp-commands.txt is complete. + +Signed-off-by: Markus Armbruster +--- + qmp-commands.hx | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Michal Novotny +--- + qmp-commands.hx | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 9e742d5..f6fae33 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -137,6 +137,12 @@ Arguments: + - "serial": Drive serial number (json-string, optional) + - "snapshot": Enable snapshot mode (json-bool, optional) + - "copy-on-read": Enable copy-on-read mode (json-bool, optional) ++- "bps": total throughput limit in bytes per second is specified ++- "bps_rd": read throughput limit in bytes per second is specified ++- "bps_wr": write throughput limit in bytes per second is specified ++- "iops": total I/O operations per second is specified ++- "iops_rd": read I/O operations per second is specified ++- "iops_wr": write I/O operations per second is specified + + Example: + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-QMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch b/SOURCES/kvm-QMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch new file mode 100644 index 0000000..f1c470b --- /dev/null +++ b/SOURCES/kvm-QMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch @@ -0,0 +1,203 @@ +From 75ad257a1d23dcbde364ad736770d1bd01f157b6 Mon Sep 17 00:00:00 2001 +Message-Id: <75ad257a1d23dcbde364ad736770d1bd01f157b6.1387385974.git.minovotn@redhat.com> +In-Reply-To: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +References: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 17 Dec 2013 06:46:36 +0100 +Subject: [PATCH 2/5] QMP: Forward-port __com.redhat_drive_add from RHEL-6 + +RH-Author: Markus Armbruster +Message-id: <1387262799-10350-4-git-send-email-armbru@redhat.com> +Patchwork-id: 56294 +O-Subject: [PATCH v2 3/6] QMP: Forward-port __com.redhat_drive_add from RHEL-6 +Bugzilla: 889051 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Code taken from RHEL-6 as of qemu-kvm-0.12.1.2-2.418.el6, backported +and fixed up as follows: + +* Update simple_drive_add() for commit 4e89978 "qemu-option: + qemu_opts_from_qdict(): use error_set()". + +* Update simple_drive_add() for commit 2d0d283 "Support default block + interfaces per QEMUMachine". + +* Add comment explaining drive_init() error reporting hacks to + simple_drive_add(). + +* qemu-monitor.hx has been split into qmp-commands.hx and + hmp-commands.hx. Copy the QMP parts to qmp-commands.hx. Clean up + second example slightly. + +* Trailing whitespace cleaned up. + +Signed-off-by: Markus Armbruster +--- + device-hotplug.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/blockdev.h | 2 ++ + qmp-commands.hx | 46 +++++++++++++++++++++++++++++ + 3 files changed, 121 insertions(+) + +Signed-off-by: Michal Novotny +--- + device-hotplug.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/blockdev.h | 2 ++ + qmp-commands.hx | 46 +++++++++++++++++++++++++++++ + 3 files changed, 121 insertions(+) + +diff --git a/device-hotplug.c b/device-hotplug.c +index 103d34a..20f6b7f 100644 +--- a/device-hotplug.c ++++ b/device-hotplug.c +@@ -77,3 +77,76 @@ err: + drive_put_ref(dinfo); + } + } ++ ++static void check_parm(const char *key, QObject *obj, void *opaque) ++{ ++ static const char *valid_keys[] = { ++ "id", "cyls", "heads", "secs", "trans", "media", "snapshot", ++ "file", "cache", "aio", "format", "serial", "rerror", "werror", ++ "readonly", "copy-on-read", ++#ifdef CONFIG_BLOCK_IO_THROTTLING ++ "bps", "bps_rd", "bps_wr", "iops", "iops_rd", "iops_wr", ++#endif ++ NULL ++ ++ }; ++ int *stopped = opaque; ++ const char **p; ++ ++ if (*stopped) { ++ return; ++ } ++ ++ for (p = valid_keys; *p; p++) { ++ if (!strcmp(key, *p)) { ++ return; ++ } ++ } ++ ++ qerror_report(QERR_INVALID_PARAMETER, key); ++ *stopped = 1; ++} ++ ++int simple_drive_add(Monitor *mon, const QDict *qdict, QObject **ret_data) ++{ ++ int stopped; ++ Error *local_err = NULL; ++ QemuOpts *opts; ++ DriveInfo *dinfo; ++ ++ if (!qdict_haskey(qdict, "id")) { ++ qerror_report(QERR_MISSING_PARAMETER, "id"); ++ return -1; ++ } ++ ++ stopped = 0; ++ qdict_iter(qdict, check_parm, &stopped); ++ if (stopped) { ++ return -1; ++ } ++ ++ opts = qemu_opts_from_qdict(&qemu_drive_opts, qdict, &local_err); ++ if (!opts) { ++ qerror_report_err(local_err); ++ error_free(local_err); ++ return -1; ++ } ++ qemu_opt_set(opts, "if", "none"); ++ dinfo = drive_init(opts, current_machine->block_default_type); ++ if (!dinfo) { ++ /* ++ * drive_init() reports some errors with qerror_report_err(), ++ * and some with error_report(). The latter vanish without ++ * trace in monitor_vprintf(). See also the rather optimistic ++ * upstream commit 74ee59a. Emit a generic error here. If a ++ * prior error from qerror_report_err() is pending, it'll get ++ * ignored. ++ */ ++ qerror_report(QERR_DEVICE_INIT_FAILED, ++ qemu_opts_id(opts)); ++ qemu_opts_del(opts); ++ return -1; ++ } ++ ++ return 0; ++} +diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h +index 1082091..74e1cea 100644 +--- a/include/sysemu/blockdev.h ++++ b/include/sysemu/blockdev.h +@@ -67,4 +67,6 @@ void qmp_change_blockdev(const char *device, const char *filename, + bool has_format, const char *format, Error **errp); + void do_commit(Monitor *mon, const QDict *qdict); + int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data); ++ ++int simple_drive_add(Monitor *mon, const QDict *qdict, QObject **ret_data); + #endif +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 0ae9204..9e742d5 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -106,6 +106,52 @@ Example: + Note: The "force" argument defaults to false. + + EQMP ++ { ++ .name = RFQDN_REDHAT "drive_add", ++ .args_type = "simple-drive:O", ++ .params = "id=name,[file=file][,format=f][,media=d]...", ++ .help = "Create a drive similar to -device if=none.", ++ .user_print = monitor_user_noop, ++ .mhandler.cmd_new = simple_drive_add, ++ }, ++ ++SQMP ++__com.redhat_drive_add ++---------------------- ++ ++Create a drive similar to -device if=none. ++ ++Arguments: ++ ++- "id": Drive ID, must be unique (json-string) ++- "file": Disk image (json-string, optional) ++- "format": Disk format (json-string, optional) ++- "aio": How to perform asynchronous disk I/O (json-string, optional) ++- "cache": Host cache use policy (json-string, optional) ++- "cyls", "heads", "secs": Disk geometry (json-int, optional) ++- "trans": BIOS translation mode (json-string, optional) ++- "media": Media type (json-string, optional) ++- "readonly": Open image read-only (json-bool, optional) ++- "rerror": What to do on read error (json-string, optional) ++- "werror": What to do on write error (json-string, optional) ++- "serial": Drive serial number (json-string, optional) ++- "snapshot": Enable snapshot mode (json-bool, optional) ++- "copy-on-read": Enable copy-on-read mode (json-bool, optional) ++ ++Example: ++ ++1. Add a drive without medium: ++ ++-> { "execute": "__com.redhat_drive_add", "arguments": { "id": "foo" } } ++<- {"return": {}} ++ ++2. Add a drive with medium: ++ ++-> { "execute": "__com.redhat_drive_add", ++ "arguments": { "id": "bar", "file": "tmp.qcow2", "format": "qcow2" } } ++<- {"return": {}} ++ ++EQMP + + { + .name = RFQDN_REDHAT "drive_del", +-- +1.7.11.7 + diff --git a/SOURCES/kvm-QMP-Forward-port-__com.redhat_drive_del-from-RHEL-6.patch b/SOURCES/kvm-QMP-Forward-port-__com.redhat_drive_del-from-RHEL-6.patch new file mode 100644 index 0000000..b7a0be6 --- /dev/null +++ b/SOURCES/kvm-QMP-Forward-port-__com.redhat_drive_del-from-RHEL-6.patch @@ -0,0 +1,88 @@ +From 7cba796b16325e96d01e65bd265b4073ab103157 Mon Sep 17 00:00:00 2001 +Message-Id: <7cba796b16325e96d01e65bd265b4073ab103157.1387385974.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 17 Dec 2013 06:46:35 +0100 +Subject: [PATCH 1/5] QMP: Forward-port __com.redhat_drive_del from RHEL-6 + +RH-Author: Markus Armbruster +Message-id: <1387262799-10350-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56292 +O-Subject: [PATCH v2 2/6] QMP: Forward-port __com.redhat_drive_del from RHEL-6 +Bugzilla: 889051 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Upstream has drive_del, but only in HMP. The backport to RHEL-6 added +it to QMP as well. Since the QMP command is a downstream extension, +it needs the __com.redhat_ prefix. Since RHEL-6 doesn't have separate +definition of QMP and HMP commands, both the QMP and the HMP command +got the prefix. + +RHEL-7 inherits HMP command drive_del from upstream. Add QMP command +__com.redhat_drive_del for RHEL-6 compatibility. + +If we needed similar compatibility for the HMP command, we'd have to +add __com.redhat_drive_del as alias for drive_del. But we don't. + +Code copied from RHEL-6's qemu-monitor.hx as of +qemu-kvm-0.12.1.2-2.418.el6. It has a "drive_del" without the prefix +in the documentation. Fixed here. Hardly worth fixing in RHEL-6 now. + +Signed-off-by: Markus Armbruster +--- + qmp-commands.hx | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +Signed-off-by: Michal Novotny +--- + qmp-commands.hx | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +diff --git a/qmp-commands.hx b/qmp-commands.hx +index cedcd17..0ae9204 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -108,6 +108,37 @@ Note: The "force" argument defaults to false. + EQMP + + { ++ .name = RFQDN_REDHAT "drive_del", ++ .args_type = "id:s", ++ .params = "device", ++ .help = "remove host block device", ++ .user_print = monitor_user_noop, ++ .mhandler.cmd_new = do_drive_del, ++ }, ++ ++SQMP ++__com.redhat_drive_del ++---------- ++ ++Remove host block device. The result is that guest generated IO is no longer ++submitted against the host device underlying the disk. Once a drive has ++been deleted, the QEMU Block layer returns -EIO which results in IO ++errors in the guest for applications that are reading/writing to the device. ++These errors are always reported to the guest, regardless of the drive's error ++actions (drive options rerror, werror). ++ ++Arguments: ++ ++- "id": the device's ID (json-string) ++ ++Example: ++ ++-> { "execute": "__com.redhat_drive_del", "arguments": { "id": "block1" } } ++<- { "return": {} } ++ ++EQMP ++ ++ { + .name = "change", + .args_type = "device:B,target:F,arg:s?", + .mhandler.cmd_new = qmp_marshal_input_change, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-QMP-Relax-__com.redhat_drive_add-parameter-checking.patch b/SOURCES/kvm-QMP-Relax-__com.redhat_drive_add-parameter-checking.patch new file mode 100644 index 0000000..ec29cad --- /dev/null +++ b/SOURCES/kvm-QMP-Relax-__com.redhat_drive_add-parameter-checking.patch @@ -0,0 +1,85 @@ +From 5ed1e31ed43f8bdfe765c7c564d69fb437961d42 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 5 Mar 2014 17:32:58 +0100 +Subject: [PATCH 02/16] QMP: Relax __com.redhat_drive_add parameter checking + +RH-Author: Markus Armbruster +Message-id: <1394040778-1544-2-git-send-email-armbru@redhat.com> +Patchwork-id: 58021 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] QMP: Relax __com.redhat_drive_add parameter checking +Bugzilla: 1057471 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Amos Kong +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +I/O throttling and many new features are unavailable with this +command, because its parameter checking is overly restrictive. +Relax it. + +The command was forward-ported from RHEL-6 (commit 75ad257). It +provides access to drive_init() via QMP with the parameters restricted +to a subset of the ones recognized by drive_init(). We did that +because some parameters make sense only when configuring a frontend in +addition to a backend, and the command doesn't do that. + +The parameter filtering is implemented as a whitelist. The +forward-port neglected to update the whitelist for all the stuff that +has changed since RHEL-6. + +Due to new features like driver-specific parameters, a whitelist is no +longer convenient. Replace by a blacklist that contains exactly the +drive_init() parameters that are already filtered out on RHEL-6. + +Signed-off-by: Markus Armbruster +--- + device-hotplug.c | 15 +++++---------- + 1 file changed, 5 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + device-hotplug.c | 15 +++++---------- + 1 files changed, 5 insertions(+), 10 deletions(-) + +diff --git a/device-hotplug.c b/device-hotplug.c +index 20f6b7f..78a18f2 100644 +--- a/device-hotplug.c ++++ b/device-hotplug.c +@@ -80,13 +80,8 @@ err: + + static void check_parm(const char *key, QObject *obj, void *opaque) + { +- static const char *valid_keys[] = { +- "id", "cyls", "heads", "secs", "trans", "media", "snapshot", +- "file", "cache", "aio", "format", "serial", "rerror", "werror", +- "readonly", "copy-on-read", +-#ifdef CONFIG_BLOCK_IO_THROTTLING +- "bps", "bps_rd", "bps_wr", "iops", "iops_rd", "iops_wr", +-#endif ++ static const char *unwanted_keys[] = { ++ "bus", "unit", "index", "if", "boot", "addr", + NULL + + }; +@@ -97,14 +92,14 @@ static void check_parm(const char *key, QObject *obj, void *opaque) + return; + } + +- for (p = valid_keys; *p; p++) { ++ for (p = unwanted_keys; *p; p++) { + if (!strcmp(key, *p)) { ++ qerror_report(QERR_INVALID_PARAMETER, key); ++ *stopped = 1; + return; + } + } + +- qerror_report(QERR_INVALID_PARAMETER, key); +- *stopped = 1; + } + + int simple_drive_add(Monitor *mon, const QDict *qdict, QObject **ret_data) +-- +1.7.1 + diff --git a/SOURCES/kvm-QemuOpts-Add-qemu_opt_unset.patch b/SOURCES/kvm-QemuOpts-Add-qemu_opt_unset.patch new file mode 100644 index 0000000..b210c8a --- /dev/null +++ b/SOURCES/kvm-QemuOpts-Add-qemu_opt_unset.patch @@ -0,0 +1,72 @@ +From 1201a6e29a7f8359588a3b635acbe12697325e66 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:18 +0200 +Subject: [PATCH 27/38] QemuOpts: Add qemu_opt_unset() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-28-git-send-email-kwolf@redhat.com> +Patchwork-id: 54214 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 27/32] QemuOpts: Add qemu_opt_unset() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 0dd6c5266313c861cf36476da86599d368ec41fc) + +Signed-off-by: Kevin Wolf +--- + include/qemu/option.h | 1 + + util/qemu-option.c | 14 ++++++++++++++ + 2 files changed, 15 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/option.h | 1 + + util/qemu-option.c | 14 ++++++++++++++ + 2 files changed, 15 insertions(+), 0 deletions(-) + +diff --git a/include/qemu/option.h b/include/qemu/option.h +index bdb6d21..9db74fb 100644 +--- a/include/qemu/option.h ++++ b/include/qemu/option.h +@@ -122,6 +122,7 @@ bool qemu_opt_has_help_opt(QemuOpts *opts); + bool qemu_opt_get_bool(QemuOpts *opts, const char *name, bool defval); + uint64_t qemu_opt_get_number(QemuOpts *opts, const char *name, uint64_t defval); + uint64_t qemu_opt_get_size(QemuOpts *opts, const char *name, uint64_t defval); ++int qemu_opt_unset(QemuOpts *opts, const char *name); + int qemu_opt_set(QemuOpts *opts, const char *name, const char *value); + void qemu_opt_set_err(QemuOpts *opts, const char *name, const char *value, + Error **errp); +diff --git a/util/qemu-option.c b/util/qemu-option.c +index bdfbdb4..37e7640 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -623,6 +623,20 @@ static const QemuOptDesc *find_desc_by_name(const QemuOptDesc *desc, + return NULL; + } + ++int qemu_opt_unset(QemuOpts *opts, const char *name) ++{ ++ QemuOpt *opt = qemu_opt_find(opts, name); ++ ++ assert(opts_accepts_any(opts)); ++ ++ if (opt == NULL) { ++ return -1; ++ } else { ++ qemu_opt_del(opt); ++ return 0; ++ } ++} ++ + static void opt_set(QemuOpts *opts, const char *name, const char *value, + bool prepend, Error **errp) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-Query-KVM-for-available-memory-slots.patch b/SOURCES/kvm-Query-KVM-for-available-memory-slots.patch new file mode 100644 index 0000000..d229283 --- /dev/null +++ b/SOURCES/kvm-Query-KVM-for-available-memory-slots.patch @@ -0,0 +1,142 @@ +From f69bd1c99d908b9de5ba4f335a55597a3e8fd947 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Alex Williamson +Date: Mon, 9 Dec 2013 17:52:56 +0100 +Subject: [PATCH 07/16] kvm: Query KVM for available memory slots + +RH-Author: Alex Williamson +Message-id: <20131209175223.22125.66085.stgit@bling.home> +Patchwork-id: 56092 +O-Subject: [RHEL7 qemu-kvm PATCH] kvm: Query KVM for available memory slots +Bugzilla: 921490 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=921490 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6696277 +Upstream: fb541ca59c8b55911821c9f794c3dbe5de9ba9d8 + +KVM reports the number of available memory slots (KVM_CAP_NR_MEMSLOTS) +using the extension interface. Both x86 and s390 implement this, ARM +and powerpc do not yet enable it. Convert the static slots array to +be dynamically allocated, supporting more slots when available. +Default to 32 when KVM_CAP_NR_MEMSLOTS is not implemented. The +motivation for this change is to support more assigned devices, where +memory mapped PCI MMIO BARs typically take one slot each. + +Signed-off-by: Alex Williamson +Reviewed-by: Thomas Huth +Signed-off-by: Paolo Bonzini +--- + kvm-all.c | 30 +++++++++++++++++++++--------- + 1 file changed, 21 insertions(+), 9 deletions(-) + +Signed-off-by: Michal Novotny +--- + kvm-all.c | 30 +++++++++++++++++++++--------- + 1 file changed, 21 insertions(+), 9 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index f2f68d6..0e21494 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -72,7 +72,8 @@ typedef struct kvm_dirty_log KVMDirtyLog; + + struct KVMState + { +- KVMSlot slots[32]; ++ KVMSlot *slots; ++ int nr_slots; + int fd; + int vmfd; + int coalesced_mmio; +@@ -122,7 +123,7 @@ static KVMSlot *kvm_alloc_slot(KVMState *s) + { + int i; + +- for (i = 0; i < ARRAY_SIZE(s->slots); i++) { ++ for (i = 0; i < s->nr_slots; i++) { + if (s->slots[i].memory_size == 0) { + return &s->slots[i]; + } +@@ -138,7 +139,7 @@ static KVMSlot *kvm_lookup_matching_slot(KVMState *s, + { + int i; + +- for (i = 0; i < ARRAY_SIZE(s->slots); i++) { ++ for (i = 0; i < s->nr_slots; i++) { + KVMSlot *mem = &s->slots[i]; + + if (start_addr == mem->start_addr && +@@ -160,7 +161,7 @@ static KVMSlot *kvm_lookup_overlapping_slot(KVMState *s, + KVMSlot *found = NULL; + int i; + +- for (i = 0; i < ARRAY_SIZE(s->slots); i++) { ++ for (i = 0; i < s->nr_slots; i++) { + KVMSlot *mem = &s->slots[i]; + + if (mem->memory_size == 0 || +@@ -182,7 +183,7 @@ int kvm_physical_memory_addr_from_host(KVMState *s, void *ram, + { + int i; + +- for (i = 0; i < ARRAY_SIZE(s->slots); i++) { ++ for (i = 0; i < s->nr_slots; i++) { + KVMSlot *mem = &s->slots[i]; + + if (ram >= mem->ram && ram < mem->ram + mem->memory_size) { +@@ -342,7 +343,7 @@ static int kvm_set_migration_log(int enable) + + s->migration_log = enable; + +- for (i = 0; i < ARRAY_SIZE(s->slots); i++) { ++ for (i = 0; i < s->nr_slots; i++) { + mem = &s->slots[i]; + + if (!mem->memory_size) { +@@ -1328,9 +1329,6 @@ int kvm_init(void) + #ifdef KVM_CAP_SET_GUEST_DEBUG + QTAILQ_INIT(&s->kvm_sw_breakpoints); + #endif +- for (i = 0; i < ARRAY_SIZE(s->slots); i++) { +- s->slots[i].slot = i; +- } + s->vmfd = -1; + s->fd = qemu_open("/dev/kvm", O_RDWR); + if (s->fd == -1) { +@@ -1354,6 +1352,19 @@ int kvm_init(void) + goto err; + } + ++ s->nr_slots = kvm_check_extension(s, KVM_CAP_NR_MEMSLOTS); ++ ++ /* If unspecified, use the default value */ ++ if (!s->nr_slots) { ++ s->nr_slots = 32; ++ } ++ ++ s->slots = g_malloc0(s->nr_slots * sizeof(KVMSlot)); ++ ++ for (i = 0; i < s->nr_slots; i++) { ++ s->slots[i].slot = i; ++ } ++ + /* check the vcpu limits */ + soft_vcpus_limit = kvm_recommended_vcpus(s); + hard_vcpus_limit = kvm_max_vcpus(s); +@@ -1467,6 +1478,7 @@ err: + if (s->fd != -1) { + close(s->fd); + } ++ g_free(s->slots); + g_free(s); + + return ret; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-Remove-arch-capabilities-deprecation.patch b/SOURCES/kvm-Remove-arch-capabilities-deprecation.patch new file mode 100644 index 0000000..2e4393c --- /dev/null +++ b/SOURCES/kvm-Remove-arch-capabilities-deprecation.patch @@ -0,0 +1,57 @@ +From 8328a7b83a78666fff5166a615e4ef5792c743f0 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:27 +0200 +Subject: [PATCH 11/12] Remove arch-capabilities deprecation + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-11-git-send-email-plai@redhat.com> +Patchwork-id: 90854 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 10/10] Remove arch-capabilities deprecation +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +[RHEL INTERNAL] Logic to support arch-capabilities now exists. +Deprecation of arch-facilities is no longer needed. + +fixes: arch-facilities deprecation introduced by + 59c1aecdd i386: Deprecate arch-facilities and make it block live migration + +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/cpu.c +--- + target-i386/cpu.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 24fc000..3ea4e97 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -34,7 +34,6 @@ + #include "qapi-visit.h" + #include "qapi/visitor.h" + #include "sysemu/arch_init.h" +-#include "migration/migration.h" + + #include "hw/hw.h" + #if defined(CONFIG_KVM) +@@ -1819,13 +1818,6 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + x86_cpu_def->features[w] = x86_cpu_get_supported_feature_word(w); + } + +- /* +- * Features that won't be enabled automatically by "-cpu host" even if +- * reported by GET_SUPPORTED_CPUID: +- */ +- +- /* arch-facilities: deprecated (see comment on x86_cpu_realizefn()) */ +- x86_cpu_def->features[FEAT_7_0_EDX] &= ~CPUID_7_0_EDX_ARCH_CAPABILITIES; + /* invtsc: not migratable, so not enabled by default */ + x86_cpu_def->features[FEAT_8000_0007_EDX] &= ~CPUID_APM_INVTSC; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Remove-dev-bluetooth.c-dependency-from-vl.c.patch b/SOURCES/kvm-Remove-dev-bluetooth.c-dependency-from-vl.c.patch new file mode 100644 index 0000000..7dcfb0e --- /dev/null +++ b/SOURCES/kvm-Remove-dev-bluetooth.c-dependency-from-vl.c.patch @@ -0,0 +1,132 @@ +From d23a5d0e1d9a437515d566e29706e12373de9e25 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Mon, 16 Sep 2013 14:38:25 +0200 +Subject: [PATCH 17/29] Remove dev-bluetooth.c dependency from vl.c + +RH-Author: Miroslav Rezanina +Message-id: <1948c111aeb1ae630ad580f4805d57c35eccceef.1379325610.git.mrezanin@redhat.com> +Patchwork-id: 54395 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] Remove dev-bluetooth.c dependency from vl.c +Bugzilla: 1001131 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini + +From: Miroslav Rezanina + +Use usb_legacy_register handling to create bt-dongle device and remove code +dependency from vl.c so CONFIG_USB_BLUETOOTH can be disabled. + +Signed-off-by: Miroslav Rezanina +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 615fe4de4b3c26619611078960d3103550bde7d0) +--- + hw/usb/Makefile.objs | 3 --- + hw/usb/dev-bluetooth.c | 10 +++++++++- + include/hw/usb.h | 3 --- + vl.c | 13 ++++--------- + 4 files changed, 13 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/Makefile.objs | 3 --- + hw/usb/dev-bluetooth.c | 10 +++++++++- + include/hw/usb.h | 3 --- + vl.c | 13 ++++--------- + 4 files changed, 13 insertions(+), 16 deletions(-) + +diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs +index f9695e7..a3eac3e 100644 +--- a/hw/usb/Makefile.objs ++++ b/hw/usb/Makefile.objs +@@ -18,9 +18,6 @@ common-obj-$(CONFIG_USB_STORAGE_UAS) += dev-uas.o + common-obj-$(CONFIG_USB_AUDIO) += dev-audio.o + common-obj-$(CONFIG_USB_SERIAL) += dev-serial.o + common-obj-$(CONFIG_USB_NETWORK) += dev-network.o +- +-# FIXME: make configurable too +-CONFIG_USB_BLUETOOTH := y + common-obj-$(CONFIG_USB_BLUETOOTH) += dev-bluetooth.o + + ifeq ($(CONFIG_USB_SMARTCARD),y) +diff --git a/hw/usb/dev-bluetooth.c b/hw/usb/dev-bluetooth.c +index 68cc1d4..786e30e 100644 +--- a/hw/usb/dev-bluetooth.c ++++ b/hw/usb/dev-bluetooth.c +@@ -511,10 +511,17 @@ static int usb_bt_initfn(USBDevice *dev) + return 0; + } + +-USBDevice *usb_bt_init(USBBus *bus, HCIInfo *hci) ++static USBDevice *usb_bt_init(USBBus *bus, const char *cmdline) + { + USBDevice *dev; + struct USBBtState *s; ++ HCIInfo *hci; ++ ++ if (*cmdline) { ++ hci = hci_init(cmdline); ++ } else { ++ hci = bt_new_hci(qemu_find_bt_vlan(0)); ++ } + + if (!hci) + return NULL; +@@ -565,6 +572,7 @@ static const TypeInfo bt_info = { + static void usb_bt_register_types(void) + { + type_register_static(&bt_info); ++ usb_legacy_register("usb-bt-dongle", "bt", usb_bt_init); + } + + type_init(usb_bt_register_types) +diff --git a/include/hw/usb.h b/include/hw/usb.h +index 901b0da..695d853 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -442,9 +442,6 @@ int set_usb_string(uint8_t *buf, const char *str); + USBDevice *usb_host_device_open(USBBus *bus, const char *devname); + void usb_host_info(Monitor *mon, const QDict *qdict); + +-/* usb-bt.c */ +-USBDevice *usb_bt_init(USBBus *bus, HCIInfo *hci); +- + /* usb ports of the VM */ + + #define VM_USB_HUB_SIZE 8 +diff --git a/vl.c b/vl.c +index d022f50..a40ab13 100644 +--- a/vl.c ++++ b/vl.c +@@ -1427,8 +1427,10 @@ static void configure_msg(QemuOpts *opts) + + static int usb_device_add(const char *devname) + { +- const char *p; + USBDevice *dev = NULL; ++#ifndef CONFIG_LINUX ++ const char *p; ++#endif + + if (!usb_enabled(false)) { + return -1; +@@ -1444,15 +1446,8 @@ static int usb_device_add(const char *devname) + /* only the linux version is qdev-ified, usb-bsd still needs this */ + if (strstart(devname, "host:", &p)) { + dev = usb_host_device_open(usb_bus_find(-1), p); +- } else +-#endif +- if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) { +- dev = usb_bt_init(usb_bus_find(-1), +- devname[2] ? hci_init(p) +- : bt_new_hci(qemu_find_bt_vlan(0))); +- } else { +- return -1; + } ++#endif + if (!dev) + return -1; + +-- +1.7.1 + diff --git a/SOURCES/kvm-Remove-i82550-network-card-emulation.patch b/SOURCES/kvm-Remove-i82550-network-card-emulation.patch new file mode 100644 index 0000000..531a200 --- /dev/null +++ b/SOURCES/kvm-Remove-i82550-network-card-emulation.patch @@ -0,0 +1,47 @@ +From b42cc9467d522246bec3d9abc6e820c9e8f68743 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 30 Aug 2013 08:51:21 +0200 +Subject: [PATCH 02/29] Remove i82550 network card emulation + +RH-Author: Miroslav Rezanina +Message-id: <8a443ebad7bda82e3a609db476db3f77b97dab53.1377851454.git.mrezanin@redhat.com> +Patchwork-id: 53933 +O-Subject: [RHEL7 qemu-kvm PATCHv2 1/6] Remove i82550 network card emulation +Bugzilla: 921983 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +From: Miroslav Rezanina + +Bugzilla: 921983 +Upstream: n/a, RHEL only + +We do not support i82550 card and it's variants. Removing the card +from configuration. + +Signed-off-by: Miroslav Rezanina +--- + default-configs/pci.mak | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/pci.mak | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/default-configs/pci.mak b/default-configs/pci.mak +index c0fb0ae..938f413 100644 +--- a/default-configs/pci.mak ++++ b/default-configs/pci.mak +@@ -4,7 +4,6 @@ CONFIG_VIRTIO=y + CONFIG_USB_UHCI=y + CONFIG_USB_EHCI=y + CONFIG_USB_XHCI=y +-CONFIG_EEPRO100_PCI=y + CONFIG_AC97=y + CONFIG_HDA=y + CONFIG_RTL8139_PCI=y +-- +1.7.1 + diff --git a/SOURCES/kvm-Remove-no-hpet-option.patch b/SOURCES/kvm-Remove-no-hpet-option.patch new file mode 100644 index 0000000..84f51f6 --- /dev/null +++ b/SOURCES/kvm-Remove-no-hpet-option.patch @@ -0,0 +1,89 @@ +From 6a547c27c5d359af376fdb277ea05eea0d76e870 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 30 Aug 2013 08:51:25 +0200 +Subject: [PATCH 06/29] Remove no-hpet option + +RH-Author: Miroslav Rezanina +Message-id: <9d2bbee5227f35ee23da66a8689a9cd0faf545f1.1377851454.git.mrezanin@redhat.com> +Patchwork-id: 53936 +O-Subject: [RHEL7 qemu-kvm PATCHv2 5/6] Remove no-hpet option +Bugzilla: 947441 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +From: Miroslav Rezanina + +Bugzilla: 947441 +Upstream: n/a, RHEL only + +We disable HPET for RHEL, this patch removes option no-hpet that is +not usable. + +Patch is forwardport of RHEL6 patch 1c07ac51 with small difference in +qemu-options.hx STEXI part of no-hpet is removed to keep man page +updated. + +Signed-off-by: Miroslav Rezanina + +v2: + - Remove only STEXI part +--- + qemu-options.hx | 7 ++----- + vl.c | 4 +++- + 2 files changed, 5 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-options.hx | 7 ++----- + vl.c | 4 +++- + 2 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/qemu-options.hx b/qemu-options.hx +index 2ad0ed2..202a2cf 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -1283,13 +1283,10 @@ it if your guest OS complains about ACPI problems (PC target machine + only). + ETEXI + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + DEF("no-hpet", 0, QEMU_OPTION_no_hpet, + "-no-hpet disable HPET\n", QEMU_ARCH_I386) +-STEXI +-@item -no-hpet +-@findex -no-hpet +-Disable HPET support. +-ETEXI ++#endif + + DEF("acpitable", HAS_ARG, QEMU_OPTION_acpitable, + "-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,{data|file}=file1[:file2]...]\n" +diff --git a/vl.c b/vl.c +index f7b326a..24536b5 100644 +--- a/vl.c ++++ b/vl.c +@@ -217,7 +217,7 @@ int smp_threads = 1; + const char *vnc_display; + #endif + int acpi_enabled = 1; +-int no_hpet = 0; ++int no_hpet = 1; /* Always disabled for Red Hat Enterprise Linux */ + int fd_bootchk = 1; + static int no_reboot; + int no_shutdown = 0; +@@ -3682,9 +3682,11 @@ int main(int argc, char **argv, char **envp) + case QEMU_OPTION_no_acpi: + acpi_enabled = 0; + break; ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + case QEMU_OPTION_no_hpet: + no_hpet = 1; + break; ++#endif + case QEMU_OPTION_balloon: + if (balloon_parse(optarg) < 0) { + fprintf(stderr, "Unknown -balloon argument %s\n", optarg); +-- +1.7.1 + diff --git a/SOURCES/kvm-Remove-redhat-extensions-from-qmp-events.txt.patch b/SOURCES/kvm-Remove-redhat-extensions-from-qmp-events.txt.patch new file mode 100644 index 0000000..ce8b29f --- /dev/null +++ b/SOURCES/kvm-Remove-redhat-extensions-from-qmp-events.txt.patch @@ -0,0 +1,64 @@ +From c7a7d2970163c29da5445df54b0fabe28021b275 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 27 May 2015 14:50:33 +0200 +Subject: [PATCH 7/8] Remove redhat extensions from qmp-events.txt + +Message-id: <021c5d770a75ff1569b7a43a9a08553c9814214c.1432733950.git.mrezanin@redhat.com> +Patchwork-id: 65136 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] Remove redhat extensions from qmp-events.txt +Bugzilla: 1222833 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster + +From: Miroslav Rezanina + +We document __com.redhat_reason and __com.redhat_debug_info event members +in qmp-events. We describe them as RHEL 7 extension. This is true for +qemu-kvm pacakge only, qemu-kvm-rhev uses upstream solution. + +Remove this fields from documentation so users do not expect them so they +avoid issues on update to different version of qemu-kvm. + +Signed-off-by: Miroslav Rezanina +--- + QMP/qmp-events.txt | 17 +---------------- + 1 file changed, 1 insertion(+), 16 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index ec4e4b9..7d16a6d 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -146,28 +146,13 @@ Data: + "ignore": error has been ignored, the job may fail later + "report": error will be reported and the job canceled + "stop": error caused job to be paused +-- "__com.redhat_reason": error reason, this is a RHEL7 extension, it's one of +- the following (json-string): +- "eio": errno EIO +- "eperm": errno EPERM +- "enospc": errno ENOSPC +- "eother": any other errno (other than EIO, EPERM, ENOSPC) +-- "__com.redhat_debug_info": RHEL7 extension containing debug information for +- humans, applications should NOT read any +- information from this member (json-object): +- - "errno": errno value (json-int) +- - "message": error message returned by strerror() (json-string) + + Example: + + { "event": "BLOCK_JOB_ERROR", + "data": { "device": "ide0-hd1", + "operation": "write", +- "action": "stop", +- "__com.redhat_reason": "enospc", +- "__com.redhat_debug_info": { +- "message": "No space left on device", +- "errno": 28 } } ++ "action": "stop" }, + "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } + + BLOCK_JOB_READY +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Remove-usb-wacom-tablet.patch b/SOURCES/kvm-Remove-usb-wacom-tablet.patch new file mode 100644 index 0000000..f8e5a85 --- /dev/null +++ b/SOURCES/kvm-Remove-usb-wacom-tablet.patch @@ -0,0 +1,44 @@ +From 03abc329e1bc5b54945113f55bddf3ef95974bb2 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 30 Aug 2013 08:51:22 +0200 +Subject: [PATCH 03/29] Remove usb wacom tablet + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 53935 +O-Subject: [RHEL7 qemu-kvm PATCHv2 2/6] Remove usb wacom tablet +Bugzilla: 903914 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +From: Miroslav Rezanina + +BZ: 903914 +Upstream: n/a, RHEL only + +We do not support wacom tablet, disabling it. + +Signed-off-by: Miroslav Rezanina +--- + default-configs/usb.mak | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/usb.mak | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/default-configs/usb.mak b/default-configs/usb.mak +index 9a3bd09..39a3552 100644 +--- a/default-configs/usb.mak ++++ b/default-configs/usb.mak +@@ -1,4 +1,3 @@ +-CONFIG_USB_TABLET_WACOM=y + CONFIG_USB_STORAGE_BOT=y + CONFIG_USB_STORAGE_UAS=y + CONFIG_USB_SMARTCARD=y +-- +1.7.1 + diff --git a/SOURCES/kvm-Restore-atapi_dma-flag-across-migration.patch b/SOURCES/kvm-Restore-atapi_dma-flag-across-migration.patch new file mode 100644 index 0000000..ccce520 --- /dev/null +++ b/SOURCES/kvm-Restore-atapi_dma-flag-across-migration.patch @@ -0,0 +1,47 @@ +From 26631da9bba6bcf000b4a87715cb3e8364afc373 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 10 Feb 2015 11:45:35 +0100 +Subject: [PATCH 09/16] Restore atapi_dma flag across migration + +Message-id: <1423568736-19538-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 63778 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] Restore atapi_dma flag across migration +Bugzilla: 892258 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi + +From: "Dr. David Alan Gilbert" + +If a migration happens just after the guest has kicked +off an ATAPI command and kicked off DMA, we lose the atapi_dma +flag, and the destination tries to complete the command as PIO +rather than DMA. This upsets Linux; modern libata based kernels +stumble and recover OK, older kernels end up passing bad data +to userspace. + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: John Snow +Signed-off-by: Kevin Wolf +(cherry picked from commit 819fa276311ce328a8e38ad9306c1093961b3f4b) +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 24a1708..9a22425 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -2283,6 +2283,7 @@ static int ide_drive_pio_post_load(void *opaque, int version_id) + s->end_transfer_func = transfer_end_table[s->end_transfer_fn_idx]; + s->data_ptr = s->io_buffer + s->cur_io_buffer_offset; + s->data_end = s->data_ptr + s->cur_io_buffer_len; ++ s->atapi_dma = s->feature & 1; /* as per cmd_packet */ + + return 0; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-Build-ceph-rbd-only-for-rhev.patch b/SOURCES/kvm-Revert-Build-ceph-rbd-only-for-rhev.patch new file mode 100644 index 0000000..2c24d69 --- /dev/null +++ b/SOURCES/kvm-Revert-Build-ceph-rbd-only-for-rhev.patch @@ -0,0 +1,87 @@ +From 6c1152b03b7ba00048ca46c424064aab14b2a18d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 20 Nov 2014 13:47:21 +0100 +Subject: [PATCH 2/5] Revert "Build ceph/rbd only for rhev" + +Message-id: <1416491244-20209-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 62496 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 1/4] Revert "Build ceph/rbd only for rhev" +Bugzilla: 1140742 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This reverts commit 5d5af5b18e07ef4c97a45feeaad3fe493d38f427. + +Signed-off-by: Miroslav Rezanina + +Conflicts: + configure + redhat/qemu-kvm.spec.template + +Signed-off-by: Kevin Wolf +--- + block/Makefile.objs | 2 +- + configure | 11 ----------- + redhat/qemu-kvm.spec.template | 6 ------ + 3 files changed, 1 insertion(+), 18 deletions(-) + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index dd01fb3..6b578d9 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -13,7 +13,7 @@ ifeq ($(CONFIG_POSIX),y) + block-obj-y += nbd.o sheepdog.o + block-obj-$(CONFIG_LIBISCSI) += iscsi.o + block-obj-$(CONFIG_CURL) += curl.o +-block-obj-$(CONFIG_CEPH_SUPPORT) += rbd.o ++block-obj-y += rbd.o + block-obj-$(CONFIG_GLUSTERFS) += gluster.o + block-obj-$(CONFIG_LIBSSH2) += ssh.o + endif +diff --git a/configure b/configure +index ca8b107..8db9dbe 100755 +--- a/configure ++++ b/configure +@@ -248,7 +248,6 @@ tpm="no" + libssh2="" + live_block_ops="yes" + live_block_migration="no" +-ceph_support="yes" + vhdx="" + + # parse CC options first +@@ -959,10 +958,6 @@ for opt do + ;; + --enable-live-block-migration) live_block_migration="yes" + ;; +- --disable-ceph-support) ceph_support="no" +- ;; +- --enable-ceph-support) ceph_support="yes" +- ;; + --enable-vhdx) vhdx="yes" + ;; + --disable-vhdx) vhdx="no" +@@ -1245,8 +1240,6 @@ echo " --disable-live-block-ops disable live block operations support" + echo " --enable-live-block-ops enable live block operations support" + echo " --disable-live-block-migration disable live block migration" + echo " --enable-live-block-migration enable live block migration" +-echo " --disable-ceph-support disable support for rbd block driver support" +-echo " --enable-ceph-support enable support for rbd block driver support" + echo " --disable-vhdx disables support for the Microsoft VHDX image format" + echo " --enable-vhdx enable support for the Microsoft VHDX image format" + echo "" +@@ -4105,10 +4098,6 @@ if test "$live_block_migration" = "yes" ; then + echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak + fi + +-if test "$ceph_support" = "yes"; then +- echo "CONFIG_CEPH_SUPPORT=y" >> $config_host_mak +-fi +- + if test "$vhdx" = "yes" ; then + echo "CONFIG_VHDX=y" >> $config_host_mak + fi +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-HMP-Disable-drive_add-for-Red-Hat-Enterprise-2.patch.patch b/SOURCES/kvm-Revert-HMP-Disable-drive_add-for-Red-Hat-Enterprise-2.patch.patch new file mode 100644 index 0000000..cf11949 --- /dev/null +++ b/SOURCES/kvm-Revert-HMP-Disable-drive_add-for-Red-Hat-Enterprise-2.patch.patch @@ -0,0 +1,37 @@ +From f873c32538f9b920c452354665e8957abaf3d63a Mon Sep 17 00:00:00 2001 +Message-Id: +From: Michal Novotny +Date: Wed, 18 Dec 2013 19:06:06 +0100 +Subject: [PATCH] Revert "HMP: Disable drive_add for Red Hat Enterprise Linux" + +This reverts commit 8bc60f9c097965e17f1cfa32e66461aacdb11083 because +it caused make check fail. + +Signed-off-by: Michal Novotny +--- + hmp-commands.hx | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 32cc33c..bfb565b 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1072,7 +1072,6 @@ using the specified target. + ETEXI + #endif + +-#if 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "drive_add", + .args_type = "pci_addr:s,opts:s", +@@ -1085,7 +1084,6 @@ ETEXI + .help = "add drive to PCI storage controller", + .mhandler.cmd = drive_hot_add, + }, +-#endif + + STEXI + @item drive_add +-- +1.7.11.7 + diff --git a/SOURCES/kvm-Revert-block-Disable-driver-specific-options-for-1.5.patch b/SOURCES/kvm-Revert-block-Disable-driver-specific-options-for-1.5.patch new file mode 100644 index 0000000..982fa7c --- /dev/null +++ b/SOURCES/kvm-Revert-block-Disable-driver-specific-options-for-1.5.patch @@ -0,0 +1,178 @@ +From 2f216971132c8fd7a6b05af6efa8103b9459b7f5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:59 +0200 +Subject: [PATCH 08/38] Revert "block: Disable driver-specific options for 1.5" + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-9-git-send-email-kwolf@redhat.com> +Patchwork-id: 54197 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 08/32] Revert "block: Disable driver-specific options for 1.5" +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This reverts commit 8ec7d390b0d50b5e5b4b1d8dba7ba40d64a70875. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 492fdc6fbe17b2d45878e813e980f782ac260c30) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 118 ++--------------------------------------------- + tests/qemu-iotests/group | 2 +- + 2 files changed, 5 insertions(+), 115 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 118 ++-------------------------------------------- + tests/qemu-iotests/group | 2 +- + 2 files changed, 5 insertions(+), 115 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 1f405c9..bd33c17 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1719,120 +1719,10 @@ QemuOptsList qemu_drive_opts = { + .name = "drive", + .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head), + .desc = { +- { +- .name = "bus", +- .type = QEMU_OPT_NUMBER, +- .help = "bus number", +- },{ +- .name = "unit", +- .type = QEMU_OPT_NUMBER, +- .help = "unit number (i.e. lun for scsi)", +- },{ +- .name = "if", +- .type = QEMU_OPT_STRING, +- .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", +- },{ +- .name = "index", +- .type = QEMU_OPT_NUMBER, +- .help = "index number", +- },{ +- .name = "cyls", +- .type = QEMU_OPT_NUMBER, +- .help = "number of cylinders (ide disk geometry)", +- },{ +- .name = "heads", +- .type = QEMU_OPT_NUMBER, +- .help = "number of heads (ide disk geometry)", +- },{ +- .name = "secs", +- .type = QEMU_OPT_NUMBER, +- .help = "number of sectors (ide disk geometry)", +- },{ +- .name = "trans", +- .type = QEMU_OPT_STRING, +- .help = "chs translation (auto, lba. none)", +- },{ +- .name = "media", +- .type = QEMU_OPT_STRING, +- .help = "media type (disk, cdrom)", +- },{ +- .name = "snapshot", +- .type = QEMU_OPT_BOOL, +- .help = "enable/disable snapshot mode", +- },{ +- .name = "file", +- .type = QEMU_OPT_STRING, +- .help = "disk image", +- },{ +- .name = "discard", +- .type = QEMU_OPT_STRING, +- .help = "discard operation (ignore/off, unmap/on)", +- },{ +- .name = "cache", +- .type = QEMU_OPT_STRING, +- .help = "host cache usage (none, writeback, writethrough, " +- "directsync, unsafe)", +- },{ +- .name = "aio", +- .type = QEMU_OPT_STRING, +- .help = "host AIO implementation (threads, native)", +- },{ +- .name = "format", +- .type = QEMU_OPT_STRING, +- .help = "disk format (raw, qcow2, ...)", +- },{ +- .name = "serial", +- .type = QEMU_OPT_STRING, +- .help = "disk serial number", +- },{ +- .name = "rerror", +- .type = QEMU_OPT_STRING, +- .help = "read error action", +- },{ +- .name = "werror", +- .type = QEMU_OPT_STRING, +- .help = "write error action", +- },{ +- .name = "addr", +- .type = QEMU_OPT_STRING, +- .help = "pci address (virtio only)", +- },{ +- .name = "readonly", +- .type = QEMU_OPT_BOOL, +- .help = "open drive file as read-only", +- },{ +- .name = "iops", +- .type = QEMU_OPT_NUMBER, +- .help = "limit total I/O operations per second", +- },{ +- .name = "iops_rd", +- .type = QEMU_OPT_NUMBER, +- .help = "limit read operations per second", +- },{ +- .name = "iops_wr", +- .type = QEMU_OPT_NUMBER, +- .help = "limit write operations per second", +- },{ +- .name = "bps", +- .type = QEMU_OPT_NUMBER, +- .help = "limit total bytes per second", +- },{ +- .name = "bps_rd", +- .type = QEMU_OPT_NUMBER, +- .help = "limit read bytes per second", +- },{ +- .name = "bps_wr", +- .type = QEMU_OPT_NUMBER, +- .help = "limit write bytes per second", +- },{ +- .name = "copy-on-read", +- .type = QEMU_OPT_BOOL, +- .help = "copy read data from backing file into image file", +- },{ +- .name = "boot", +- .type = QEMU_OPT_BOOL, +- .help = "(deprecated, ignored)", +- }, ++ /* ++ * no elements => accept any params ++ * validation will happen later ++ */ + { /* end of list */ } + }, + }; +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index bf944d9..68eabda 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -57,6 +57,6 @@ + 048 img auto quick + 049 rw auto + 050 rw auto backing quick +-#051 rw auto ++051 rw auto + 052 rw auto backing + 053 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-Revert-cirrus-allow-zero-source-pitch-in-pattern-fil.patch b/SOURCES/kvm-Revert-cirrus-allow-zero-source-pitch-in-pattern-fil.patch new file mode 100644 index 0000000..28dfa96 --- /dev/null +++ b/SOURCES/kvm-Revert-cirrus-allow-zero-source-pitch-in-pattern-fil.patch @@ -0,0 +1,115 @@ +From abfd9c2acaf70c60ec70807ba4d021ade69c7b79 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 10 Feb 2017 08:30:14 +0100 +Subject: [PATCH 2/3] Revert "cirrus: allow zero source pitch in pattern fill + rops" + +RH-Author: Gerd Hoffmann +Message-id: <1486715415-3462-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 73774 +O-Subject: [virt-devel] [RHEL-7.4 qemu-kvm PATCH 2/3] Revert "cirrus: allow zero source pitch in pattern fill rops" +Bugzilla: 1420492 +CVE: CVE-2017-2620/20170221 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier + +This reverts commit 5858dd1801883309bdd208d72ddb81c4e9fee30c. + +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/display/cirrus_vga.c + +Cc: Wolfgang Bumiller +Cc: Dr. David Alan Gilbert +Signed-off-by: Gerd Hoffmann + +Upstream: WIP (https://patchwork.ozlabs.org/patch/726074/) +--- + hw/display/cirrus_vga.c | 26 ++++++++------------------ + 1 file changed, 8 insertions(+), 18 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index fff9bf0..9a9501f 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -267,6 +267,9 @@ static void cirrus_update_memory_access(CirrusVGAState *s); + static bool blit_region_is_unsafe(struct CirrusVGAState *s, + int32_t pitch, int32_t addr) + { ++ if (!pitch) { ++ return true; ++ } + if (pitch < 0) { + int64_t min = addr + + ((int64_t)s->cirrus_blt_height - 1) * pitch +@@ -285,11 +288,8 @@ static bool blit_region_is_unsafe(struct CirrusVGAState *s, + return false; + } + +-static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only, +- bool zero_src_pitch_ok) ++static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) + { +- int32_t check_pitch; +- + /* should be the case, see cirrus_bitblt_start */ + assert(s->cirrus_blt_width > 0); + assert(s->cirrus_blt_height > 0); +@@ -298,10 +298,6 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only, + return true; + } + +- if (!s->cirrus_blt_dstpitch) { +- return true; +- } +- + if (blit_region_is_unsafe(s, s->cirrus_blt_dstpitch, + s->cirrus_blt_dstaddr)) { + return true; +@@ -309,13 +305,7 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only, + if (dst_only) { + return false; + } +- +- check_pitch = s->cirrus_blt_srcpitch; +- if (!zero_src_pitch_ok && !check_pitch) { +- check_pitch = s->cirrus_blt_width; +- } +- +- if (blit_region_is_unsafe(s, check_pitch, ++ if (blit_region_is_unsafe(s, s->cirrus_blt_srcpitch, + s->cirrus_blt_srcaddr)) { + return true; + } +@@ -710,7 +700,7 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s, bool videosrc) + src = s->cirrus_bltbuf; + } + +- if (blit_is_unsafe(s, true, true)) { ++ if (blit_is_unsafe(s, true)) { + return 0; + } + +@@ -729,7 +719,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + { + cirrus_fill_t rop_func; + +- if (blit_is_unsafe(s, true, true)) { ++ if (blit_is_unsafe(s, true)) { + return 0; + } + rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; +@@ -829,7 +819,7 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + + static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s) + { +- if (blit_is_unsafe(s, false, false)) ++ if (blit_is_unsafe(s, false)) + return 0; + + return cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-kvmclock-Ensure-proper-env-tsc-value-for-kvmc.patch b/SOURCES/kvm-Revert-kvmclock-Ensure-proper-env-tsc-value-for-kvmc.patch new file mode 100644 index 0000000..523b386 --- /dev/null +++ b/SOURCES/kvm-Revert-kvmclock-Ensure-proper-env-tsc-value-for-kvmc.patch @@ -0,0 +1,58 @@ +From 51db6795c68e1d00373d373c043543bbc6fb8f08 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Wed, 22 Oct 2014 09:46:33 +0200 +Subject: [PATCH 2/6] Revert "kvmclock: Ensure proper env->tsc value for + kvmclock_current_nsec calculation" + +Message-id: <1413971197-4624-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 61789 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/5] Revert "kvmclock: Ensure proper env->tsc value for kvmclock_current_nsec calculation" +Bugzilla: 1098602 1130428 +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini + +From: "Dr. David Alan Gilbert" + +This reverts commit da4fe791cecafbec05395041c52cb545308b1b61. + +The equivalent upstream revert is Paolo's 108e4c3871e0d0cd185c + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/clock.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index d52c2ea..1f2a26e 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -17,7 +17,6 @@ + #include "qemu/host-utils.h" + #include "sysemu/sysemu.h" + #include "sysemu/kvm.h" +-#include "sysemu/cpus.h" + #include "hw/sysbus.h" + #include "hw/kvm/clock.h" + +@@ -61,7 +60,6 @@ static uint64_t kvmclock_current_nsec(KVMClockState *s) + + cpu_physical_memory_read(kvmclock_struct_pa, &time, sizeof(time)); + +- assert(time.tsc_timestamp <= migration_tsc); + delta = migration_tsc - time.tsc_timestamp; + if (time.tsc_shift < 0) { + delta >>= -time.tsc_shift; +@@ -120,8 +118,6 @@ static void kvmclock_vm_state_change(void *opaque, int running, + if (s->clock_valid) { + return; + } +- +- cpu_synchronize_all_states(); + ret = kvm_vm_ioctl(kvm_state, KVM_GET_CLOCK, &data); + if (ret < 0) { + fprintf(stderr, "KVM_GET_CLOCK failed: %s\n", strerror(ret)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-kvmclock-Ensure-time-in-migration-never-goes-.patch b/SOURCES/kvm-Revert-kvmclock-Ensure-time-in-migration-never-goes-.patch new file mode 100644 index 0000000..1b02581 --- /dev/null +++ b/SOURCES/kvm-Revert-kvmclock-Ensure-time-in-migration-never-goes-.patch @@ -0,0 +1,106 @@ +From 62ac85ec7c8e41b0454bdec0e0a9c7d5adc39280 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Wed, 22 Oct 2014 09:46:34 +0200 +Subject: [PATCH 3/6] Revert "kvmclock: Ensure time in migration never goes + backward" + +Message-id: <1413971197-4624-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 61788 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/5] Revert "kvmclock: Ensure time in migration never goes backward" +Bugzilla: 1098602 1130428 +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini + +From: "Dr. David Alan Gilbert" + +This reverts commit 4b6035c2a739bc4c086abbb36f0883a1178a8f1c. + +The equivalent upstream revert is Paolo's fa666c10f2f3e15685ff + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/clock.c | 49 ------------------------------------------------- + 1 file changed, 49 deletions(-) + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 1f2a26e..6d6f3a7 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -14,7 +14,6 @@ + */ + + #include "qemu-common.h" +-#include "qemu/host-utils.h" + #include "sysemu/sysemu.h" + #include "sysemu/kvm.h" + #include "hw/sysbus.h" +@@ -29,48 +28,6 @@ typedef struct KVMClockState { + bool clock_valid; + } KVMClockState; + +-struct pvclock_vcpu_time_info { +- uint32_t version; +- uint32_t pad0; +- uint64_t tsc_timestamp; +- uint64_t system_time; +- uint32_t tsc_to_system_mul; +- int8_t tsc_shift; +- uint8_t flags; +- uint8_t pad[2]; +-} __attribute__((__packed__)); /* 32 bytes */ +- +-static uint64_t kvmclock_current_nsec(KVMClockState *s) +-{ +- CPUArchState *acpu = first_cpu; +- CPUState *cpu = ENV_GET_CPU(acpu); +- CPUX86State *env = cpu->env_ptr; +- hwaddr kvmclock_struct_pa = env->system_time_msr & ~1ULL; +- uint64_t migration_tsc = env->tsc; +- struct pvclock_vcpu_time_info time; +- uint64_t delta; +- uint64_t nsec_lo; +- uint64_t nsec_hi; +- uint64_t nsec; +- +- if (!(env->system_time_msr & 1ULL)) { +- /* KVM clock not active */ +- return 0; +- } +- +- cpu_physical_memory_read(kvmclock_struct_pa, &time, sizeof(time)); +- +- delta = migration_tsc - time.tsc_timestamp; +- if (time.tsc_shift < 0) { +- delta >>= -time.tsc_shift; +- } else { +- delta <<= time.tsc_shift; +- } +- +- mulu64(&nsec_lo, &nsec_hi, delta, time.tsc_to_system_mul); +- nsec = (nsec_lo >> 32) | (nsec_hi << 32); +- return nsec + time.system_time; +-} + + static void kvmclock_vm_state_change(void *opaque, int running, + RunState state) +@@ -82,15 +39,9 @@ static void kvmclock_vm_state_change(void *opaque, int running, + + if (running) { + struct kvm_clock_data data; +- uint64_t time_at_migration = kvmclock_current_nsec(s); + + s->clock_valid = false; + +- /* We can't rely on the migrated clock value, just discard it */ +- if (time_at_migration) { +- s->clock = time_at_migration; +- } +- + data.clock = s->clock; + data.flags = 0; + ret = kvm_vm_ioctl(kvm_state, KVM_SET_CLOCK, &data); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-linux-aio-use-event-notifiers.patch b/SOURCES/kvm-Revert-linux-aio-use-event-notifiers.patch new file mode 100644 index 0000000..caefc37 --- /dev/null +++ b/SOURCES/kvm-Revert-linux-aio-use-event-notifiers.patch @@ -0,0 +1,189 @@ +From 31d1d075a4cb1526d4c0ba43a8a6d581cedf0292 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 7 Nov 2014 10:09:29 +0100 +Subject: [PATCH 8/9] Revert "linux-aio: use event notifiers" + +Message-id: <1415354969-14209-1-git-send-email-famz@redhat.com> +Patchwork-id: 62180 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v3] Revert "linux-aio: use event notifiers" +Bugzilla: 1104748 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +This reverts commit c90caf25e2b6945ae13560476a5ecd7992e9f945: + + linux-aio: use event notifiers + + Since linux-aio already uses an eventfd, converting it to use the + EventNotifier-based API simplifies the code even though it is not + meant to be portable. + + Reviewed-by: Anthony Liguori + Signed-off-by: Paolo Bonzini + +Signed-off-by: Fam Zheng + +Justification: + + There is a performance regression compared to RHEL 6 since we picked + this patch during RHEL 7 rebase. The bugzilla has more data but as a + quick overview we can see the difference is significant: + + Configuration rw bs iodepth bw iops + ------------------------------------------------------------------ + Before revert randwrite 4k 32 579 148464 + After revert randwrite 4k 32 877 224752 + + The reason is that before revert, we pass min_nr=MAX_EVENTS to + io_getevents, which is much slower (50000+ ns compared to a few + hundreds) than when min_nr is val, the number of events, after + revert. + + The decisive difference is that MAX_EVENTS is usually strictly + greater than the number of pending events, hence the kernel code + takes a different path into the hrtimer, despite timeout=0. + + In other words, the root cause is in kernel. A fix is posted to + upstream. But let's have this workaround in qemu-kvm anyway. + +Upstream: + + The issue is silently compensated since cd758dd0aca (aio / timers: + Add prctl(PR_SET_TIMERSLACK, 1, ...) to reduce timer slack), and the + io_getevents call is moved to a BH, so changing min_nr back to 1 in + upstream is not demanding. As the ultimate fix in kernel is on its + way, reverting is a reasonable move for RHEL. + +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/linux-aio.c +Trivial context conflict in #include section. +--- + block/linux-aio.c | 49 ++++++++++++++++++++++++++++++------------------- + 1 file changed, 30 insertions(+), 19 deletions(-) + +diff --git a/block/linux-aio.c b/block/linux-aio.c +index ee0f8d1..40041d1 100644 +--- a/block/linux-aio.c ++++ b/block/linux-aio.c +@@ -11,8 +11,8 @@ + #include "block/aio.h" + #include "qemu/queue.h" + #include "block/raw-aio.h" +-#include "qemu/event_notifier.h" + ++#include + #include + + /* +@@ -38,7 +38,7 @@ struct qemu_laiocb { + + struct qemu_laio_state { + io_context_t ctx; +- EventNotifier e; ++ int efd; + int count; + }; + +@@ -77,17 +77,29 @@ static void qemu_laio_process_completion(struct qemu_laio_state *s, + qemu_aio_release(laiocb); + } + +-static void qemu_laio_completion_cb(EventNotifier *e) ++static void qemu_laio_completion_cb(void *opaque) + { +- struct qemu_laio_state *s = container_of(e, struct qemu_laio_state, e); ++ struct qemu_laio_state *s = opaque; + +- while (event_notifier_test_and_clear(&s->e)) { ++ while (1) { + struct io_event events[MAX_EVENTS]; ++ uint64_t val; ++ ssize_t ret; + struct timespec ts = { 0 }; + int nevents, i; + + do { +- nevents = io_getevents(s->ctx, MAX_EVENTS, MAX_EVENTS, events, &ts); ++ ret = read(s->efd, &val, sizeof(val)); ++ } while (ret == -1 && errno == EINTR); ++ ++ if (ret == -1 && errno == EAGAIN) ++ break; ++ ++ if (ret != 8) ++ break; ++ ++ do { ++ nevents = io_getevents(s->ctx, val, MAX_EVENTS, events, &ts); + } while (nevents == -EINTR); + + for (i = 0; i < nevents; i++) { +@@ -101,9 +113,9 @@ static void qemu_laio_completion_cb(EventNotifier *e) + } + } + +-static int qemu_laio_flush_cb(EventNotifier *e) ++static int qemu_laio_flush_cb(void *opaque) + { +- struct qemu_laio_state *s = container_of(e, struct qemu_laio_state, e); ++ struct qemu_laio_state *s = opaque; + + return (s->count > 0) ? 1 : 0; + } +@@ -135,9 +147,8 @@ static void laio_cancel(BlockDriverAIOCB *blockacb) + * We might be able to do this slightly more optimal by removing the + * O_NONBLOCK flag. + */ +- while (laiocb->ret == -EINPROGRESS) { +- qemu_laio_completion_cb(&laiocb->ctx->e); +- } ++ while (laiocb->ret == -EINPROGRESS) ++ qemu_laio_completion_cb(laiocb->ctx); + } + + static const AIOCBInfo laio_aiocb_info = { +@@ -176,7 +187,7 @@ BlockDriverAIOCB *laio_submit(BlockDriverState *bs, void *aio_ctx, int fd, + __func__, type); + goto out_free_aiocb; + } +- io_set_eventfd(&laiocb->iocb, event_notifier_get_fd(&s->e)); ++ io_set_eventfd(&laiocb->iocb, s->efd); + s->count++; + + if (io_submit(s->ctx, 1, &iocbs) < 0) +@@ -195,21 +206,21 @@ void *laio_init(void) + struct qemu_laio_state *s; + + s = g_malloc0(sizeof(*s)); +- if (event_notifier_init(&s->e, false) < 0) { ++ s->efd = eventfd(0, 0); ++ if (s->efd == -1) + goto out_free_state; +- } ++ fcntl(s->efd, F_SETFL, O_NONBLOCK); + +- if (io_setup(MAX_EVENTS, &s->ctx) != 0) { ++ if (io_setup(MAX_EVENTS, &s->ctx) != 0) + goto out_close_efd; +- } + +- qemu_aio_set_event_notifier(&s->e, qemu_laio_completion_cb, +- qemu_laio_flush_cb); ++ qemu_aio_set_fd_handler(s->efd, qemu_laio_completion_cb, NULL, ++ qemu_laio_flush_cb, s); + + return s; + + out_close_efd: +- event_notifier_cleanup(&s->e); ++ close(s->efd); + out_free_state: + g_free(s); + return NULL; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-pc-Disable-the-use-flash-device-for-BIOS-unle.patch b/SOURCES/kvm-Revert-pc-Disable-the-use-flash-device-for-BIOS-unle.patch new file mode 100644 index 0000000..d3abef9 --- /dev/null +++ b/SOURCES/kvm-Revert-pc-Disable-the-use-flash-device-for-BIOS-unle.patch @@ -0,0 +1,125 @@ +From ba3bbcb7fe5b4bb2e8be8dee46cfb637333471f6 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:52 +0100 +Subject: [PATCH 02/22] Revert "pc: Disable the "use flash device for BIOS unless KVM" misfeature" + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-3-git-send-email-lersek@redhat.com> +Patchwork-id: 56614 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 02/18] Revert "pc: Disable the "use flash device for BIOS unless KVM" misfeature" +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones +RH-Acked-by: Kevin Wolf + +This reverts commit 23231f783d082bef74ba1d9fed6b07fdd058cb87. + +RHEL-7 note -- I'll quote Markus' awesome original, RHEL-7-specific commit +message here: + +> Use of a flash memory device for the BIOS was added in series "[PATCH +> v10 0/8] PC system flash support", commit 4732dca..1b89faf, v1.1. +> +> Flash vs. ROM is a guest-visible difference. Thus, flash use had to +> be suppressed for machine types pc-1.0 and older. This was +> accomplished by adding a dummy device "pc-sysfw" with property +> "rom_only": +> +> * Non-zero rom_only means "use ROM". Default for pc-1.0 and older. +> * Zero rom_only means "maybe use flash". Default for newer machines. +> +> Not only is the dummy device ugly, it was also retroactively added to +> the older machine types! Fortunately, it's not guest-visible (thus no +> immediate guest ABI breakage), and has no vmstate (thus no immediate +> migration breakage). Breakage occurs only if the user unwisely +> enables flash by setting rom_only to zero. Patch review FAIL #1. +> +> Why "maybe use flash"? Flash didn't work with KVM. Therefore, +> rom_only=0 really means "use flash, except when KVM is enabled, use +> ROM". This is a Bad Idea, because it makes enabling/ disabling KVM +> guest-visible. Patch review FAIL #2. +> +> Aside: it also precludes migrating between KVM on and off, but that's +> not possible for other reasons anyway. +> +> Upstream commit 9953f88 killed the misfeature for new machine types. +> Upstream commit 9e1c2ec reverted the kill, but left a dead variable +> behind. This is what's in RHEL-7 is before this patch. +> +> KVM has recently been made to support flash (KVM_CAP_READONLY_MEM), +> which permitted upstream QEMU to redo the flash vs. ROM switch +> properly (commit 338ea90..dafb82e). + +This commit range is Jordan's series that this backport is all about. + +> The required follow-up cleanup +> hasn't been committed, yet: Paolo's [PATCH v2 0/3] Remove legacy sysfw +> code. + +It has now, I'm including it in the series. + +> Instead of backporting all that, I'm simply ripping out the flash +> feature. ROM has been working just fine for us, and I don't think we +> should complicate RHEL-7 maintenance and support by having two ways to +> map BIOS, at least not without sufficient business reason. + +The business reason seems to be OVMF... + +> The result behaves just like upstream with the follow-up cleanup +> applied, except -pflash doesn't affect the BIOS mapping, but remains +> as it always was: it creates an unused drive. + +... and for it we need -pflash to create the real thing. + +Signed-off-by: Laszlo Ersek +--- + hw/block/pc_sysfw.c | 9 --------- + 1 file changed, 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pc_sysfw.c | 9 --------- + 1 files changed, 0 insertions(+), 9 deletions(-) + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 0bc5b7a..6149b20 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -36,7 +36,6 @@ + + #define BIOS_FILENAME "bios.bin" + +-#if 0 /* Disabled for Red Hat Enterprise Linux */ + typedef struct PcSysFwDevice { + SysBusDevice busdev; + uint8_t rom_only; +@@ -136,7 +135,6 @@ static void pc_system_flash_init(MemoryRegion *rom_memory, + + pc_isa_bios_init(rom_memory, flash_mem, size); + } +-#endif /* Disabled for Red Hat Enterprise Linux */ + + static void old_pc_system_rom_init(MemoryRegion *rom_memory) + { +@@ -193,7 +191,6 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory) + bios); + } + +-#if 0 /* Disabled for Red Hat Enterprise Linux */ + /* + * Bug-compatible flash vs. ROM selection enabled? + * A few older machines enable this. +@@ -288,9 +285,3 @@ static void pcsysfw_register (void) + + type_init (pcsysfw_register); + +-#else /* Disabled for Red Hat Enterprise Linux */ +-void pc_system_firmware_init(MemoryRegion *rom_memory) +-{ +- old_pc_system_rom_init(rom_memory); +-} +-#endif +-- +1.7.1 + diff --git a/SOURCES/kvm-Revert-qdev-Do-not-let-the-user-try-to-device_add-wh.patch b/SOURCES/kvm-Revert-qdev-Do-not-let-the-user-try-to-device_add-wh.patch new file mode 100644 index 0000000..ad6b951 --- /dev/null +++ b/SOURCES/kvm-Revert-qdev-Do-not-let-the-user-try-to-device_add-wh.patch @@ -0,0 +1,54 @@ +From 54a8632d899d7a4fa6376c5f658c0da99e9e0b78 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:52 +0100 +Subject: [PATCH 02/11] Revert "qdev: Do not let the user try to device_add when it cannot work" + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56792 +O-Subject: [PATCH 7.0 qemu-kvm 2/9] Revert "qdev: Do not let the user try to device_add when it cannot work" +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +This reverts commit de651299014ae67b110a2abbff4a9e544b215b2b. + +This one is actually fine, but its non-trivial conflict resolution +would cause many more conflicts in the next few patches. I'm going to +reapply the upstream commit in a place where it applies cleanly. + +Signed-off-by: Markus Armbruster +--- + qdev-monitor.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index f78ff64..d187db5 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -477,13 +477,13 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + } + +- k = DEVICE_CLASS(obj); +- +- if (!k || k->cannot_instantiate_with_device_add_yet) { ++ if (!obj) { + qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", "device type"); + return NULL; + } + ++ k = DEVICE_CLASS(obj); ++ + /* find bus */ + path = qemu_opt_get(opts, "bus"); + if (path != NULL) { +-- +1.7.1 + diff --git a/SOURCES/kvm-Revert-qdev-monitor-Fix-crash-when-device_add-is-cal.patch b/SOURCES/kvm-Revert-qdev-monitor-Fix-crash-when-device_add-is-cal.patch new file mode 100644 index 0000000..f6f2b0a --- /dev/null +++ b/SOURCES/kvm-Revert-qdev-monitor-Fix-crash-when-device_add-is-cal.patch @@ -0,0 +1,50 @@ +From 0a754547775c6fa99d339a18e07fc9bca013b3ca Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:51 +0100 +Subject: [PATCH 01/11] Revert "qdev-monitor: Fix crash when device_add is called with abstract driver" + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56789 +O-Subject: [PATCH 7.0 qemu-kvm 1/9] Revert "qdev-monitor: Fix crash when device_add is called with abstract driver" +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +This reverts commit 3e97a22728afed3c77140486ec3863eba941535b. + +Reverting because it makes -device nonexistant crash. Incorrect +conflict resolution. I'm going to reapply the upstream commit in a +place where it applies cleanly, and actually works. + +Signed-off-by: Markus Armbruster +--- + qdev-monitor.c | 6 ------ + 1 file changed, 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 6 ------ + 1 files changed, 0 insertions(+), 6 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 979502e..f78ff64 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -477,12 +477,6 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + } + +- if (object_class_is_abstract(obj)) { +- qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", +- "non-abstract device type"); +- return NULL; +- } +- + k = DEVICE_CLASS(obj); + + if (!k || k->cannot_instantiate_with_device_add_yet) { +-- +1.7.1 + diff --git a/SOURCES/kvm-Revert-rbd-Only-look-for-qemu-specific-copy-of-librb.patch b/SOURCES/kvm-Revert-rbd-Only-look-for-qemu-specific-copy-of-librb.patch new file mode 100644 index 0000000..0190151 --- /dev/null +++ b/SOURCES/kvm-Revert-rbd-Only-look-for-qemu-specific-copy-of-librb.patch @@ -0,0 +1,38 @@ +From 7e01df44401fb6a0aeeecabdb0026290b36f0a03 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 20 Nov 2014 13:47:22 +0100 +Subject: [PATCH 3/5] Revert "rbd: Only look for qemu-specific copy of + librbd.so.1" + +Message-id: <1416491244-20209-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 62498 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 2/4] Revert "rbd: Only look for qemu-specific copy of librbd.so.1" +Bugzilla: 1140742 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This reverts commit ece4ff225717364edc3136599113709dacdc5731. + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + block/rbd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/rbd.c b/block/rbd.c +index b870401..89319dc 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -1125,7 +1125,7 @@ static int qemu_rbd_load_libs(void) + return -1; + } + +- librbd_handle = g_module_open("/usr/lib64/qemu/librbd.so.1", 0); ++ librbd_handle = g_module_open("librbd.so.1", 0); + if (!librbd_handle) { + error_report("error loading librbd: %s", g_module_error()); + return -1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-rbd-link-and-load-librbd-dynamically.patch b/SOURCES/kvm-Revert-rbd-link-and-load-librbd-dynamically.patch new file mode 100644 index 0000000..447b31d --- /dev/null +++ b/SOURCES/kvm-Revert-rbd-link-and-load-librbd-dynamically.patch @@ -0,0 +1,564 @@ +From e2fd1947f5c17139ab279ff155f31f1a74d8d3e0 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 20 Nov 2014 13:47:23 +0100 +Subject: [PATCH 4/5] Revert "rbd: link and load librbd dynamically" + +Message-id: <1416491244-20209-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 62493 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 3/4] Revert "rbd: link and load librbd dynamically" +Bugzilla: 1140742 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This reverts commit 64d9964fc97fc525b86e12c5f385dea7e646a3b0. + +Signed-off-by: Miroslav Rezanina + +Conflicts: + configure + +Signed-off-by: Kevin Wolf +--- + block/Makefile.objs | 2 +- + block/rbd.c | 218 ++++++++++++---------------------------------------- + block/rbd_types.h | 91 ---------------------- + configure | 41 +++++++++- + 4 files changed, 89 insertions(+), 263 deletions(-) + delete mode 100644 block/rbd_types.h + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 6b578d9..0be180f 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -13,7 +13,7 @@ ifeq ($(CONFIG_POSIX),y) + block-obj-y += nbd.o sheepdog.o + block-obj-$(CONFIG_LIBISCSI) += iscsi.o + block-obj-$(CONFIG_CURL) += curl.o +-block-obj-y += rbd.o ++block-obj-$(CONFIG_RBD) += rbd.o + block-obj-$(CONFIG_GLUSTERFS) += gluster.o + block-obj-$(CONFIG_LIBSSH2) += ssh.o + endif +diff --git a/block/rbd.c b/block/rbd.c +index 89319dc..4eea455 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -11,14 +11,13 @@ + * GNU GPL, version 2 or (at your option) any later version. + */ + +-#include + #include + + #include "qemu-common.h" + #include "qemu/error-report.h" + #include "block/block_int.h" + +-#include "rbd_types.h" ++#include + + /* + * When specifying the image filename use: +@@ -45,6 +44,13 @@ + * leading "\". + */ + ++/* rbd_aio_discard added in 0.1.2 */ ++#if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 2) ++#define LIBRBD_SUPPORTS_DISCARD ++#else ++#undef LIBRBD_SUPPORTS_DISCARD ++#endif ++ + #define OBJ_MAX_SIZE (1UL << OBJ_DEFAULT_OBJ_ORDER) + + #define RBD_MAX_CONF_NAME_SIZE 128 +@@ -100,10 +106,6 @@ typedef struct BDRVRBDState { + RADOSCB *event_rcb; + } BDRVRBDState; + +-static bool librbd_loaded; +-static GModule *librbd_handle; +- +-static int qemu_rbd_load_libs(void); + static void rbd_aio_bh_cb(void *opaque); + + static int qemu_rbd_next_tok(char *dst, int dst_len, +@@ -309,10 +311,6 @@ static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options, + return -EINVAL; + } + +- if (qemu_rbd_load_libs() < 0) { +- return -EIO; +- } +- + /* Read out options */ + while (options && options->name) { + if (!strcmp(options->name, BLOCK_OPT_SIZE)) { +@@ -491,10 +489,6 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, + goto failed_opts; + } + +- if (qemu_rbd_load_libs() < 0) { +- return -EIO; +- } +- + clientname = qemu_rbd_parse_clientname(conf, clientname_buf); + r = rados_create(&s->cluster, clientname); + if (r < 0) { +@@ -686,6 +680,28 @@ static void rbd_aio_bh_cb(void *opaque) + } + } + ++static int rbd_aio_discard_wrapper(rbd_image_t image, ++ uint64_t off, ++ uint64_t len, ++ rbd_completion_t comp) ++{ ++#ifdef LIBRBD_SUPPORTS_DISCARD ++ return rbd_aio_discard(image, off, len, comp); ++#else ++ return -ENOTSUP; ++#endif ++} ++ ++static int rbd_aio_flush_wrapper(rbd_image_t image, ++ rbd_completion_t comp) ++{ ++#ifdef LIBRBD_SUPPORTS_AIO_FLUSH ++ return rbd_aio_flush(image, comp); ++#else ++ return -ENOTSUP; ++#endif ++} ++ + static BlockDriverAIOCB *rbd_start_aio(BlockDriverState *bs, + int64_t sector_num, + QEMUIOVector *qiov, +@@ -748,10 +764,10 @@ static BlockDriverAIOCB *rbd_start_aio(BlockDriverState *bs, + r = rbd_aio_read(s->image, off, size, buf, c); + break; + case RBD_AIO_DISCARD: +- r = rbd_aio_discard(s->image, off, size, c); ++ r = rbd_aio_discard_wrapper(s->image, off, size, c); + break; + case RBD_AIO_FLUSH: +- r = rbd_aio_flush(s->image, c); ++ r = rbd_aio_flush_wrapper(s->image, c); + break; + default: + r = -EINVAL; +@@ -792,6 +808,7 @@ static BlockDriverAIOCB *qemu_rbd_aio_writev(BlockDriverState *bs, + RBD_AIO_WRITE); + } + ++#ifdef LIBRBD_SUPPORTS_AIO_FLUSH + static BlockDriverAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs, + BlockDriverCompletionFunc *cb, + void *opaque) +@@ -799,14 +816,19 @@ static BlockDriverAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs, + return rbd_start_aio(bs, 0, NULL, 0, cb, opaque, RBD_AIO_FLUSH); + } + ++#else ++ + static int qemu_rbd_co_flush(BlockDriverState *bs) + { ++#if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 1) ++ /* rbd_flush added in 0.1.1 */ + BDRVRBDState *s = bs->opaque; +- if (rbd_flush) { +- return rbd_flush(s->image); +- } ++ return rbd_flush(s->image); ++#else + return 0; ++#endif + } ++#endif + + static int qemu_rbd_getinfo(BlockDriverState *bs, BlockDriverInfo *bdi) + { +@@ -944,6 +966,7 @@ static int qemu_rbd_snap_list(BlockDriverState *bs, + return snap_count; + } + ++#ifdef LIBRBD_SUPPORTS_DISCARD + static BlockDriverAIOCB* qemu_rbd_aio_discard(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, +@@ -953,6 +976,7 @@ static BlockDriverAIOCB* qemu_rbd_aio_discard(BlockDriverState *bs, + return rbd_start_aio(bs, sector_num, NULL, nb_sectors, cb, opaque, + RBD_AIO_DISCARD); + } ++#endif + + static QEMUOptionParameter qemu_rbd_create_options[] = { + { +@@ -983,9 +1007,16 @@ static BlockDriver bdrv_rbd = { + + .bdrv_aio_readv = qemu_rbd_aio_readv, + .bdrv_aio_writev = qemu_rbd_aio_writev, ++ ++#ifdef LIBRBD_SUPPORTS_AIO_FLUSH + .bdrv_aio_flush = qemu_rbd_aio_flush, ++#else + .bdrv_co_flush_to_disk = qemu_rbd_co_flush, ++#endif ++ ++#ifdef LIBRBD_SUPPORTS_DISCARD + .bdrv_aio_discard = qemu_rbd_aio_discard, ++#endif + + .bdrv_snapshot_create = qemu_rbd_snap_create, + .bdrv_snapshot_delete = qemu_rbd_snap_remove, +@@ -998,153 +1029,4 @@ static void bdrv_rbd_init(void) + bdrv_register(&bdrv_rbd); + } + +-typedef struct LibSymbol { +- const char *name; +- gpointer *addr; +-} LibSymbol; +- +-static int qemu_rbd_set_functions(GModule *lib, const LibSymbol *funcs) +-{ +- int i = 0; +- while (funcs[i].name) { +- const char *name = funcs[i].name; +- if (!g_module_symbol(lib, name, funcs[i].addr)) { +- error_report("%s could not be loaded from librbd or librados: %s", +- name, g_module_error()); +- return -1; +- } +- ++i; +- } +- return 0; +-} +- +-/* +- * Set function pointers for basic librados and librbd +- * functions that have always been present in these libraries. +- */ +-static int qemu_rbd_set_mandatory_functions(void) +-{ +- LibSymbol symbols[] = { +- {"rados_create", +- (gpointer *) &rados_create}, +- {"rados_connect", +- (gpointer *) &rados_connect}, +- {"rados_shutdown", +- (gpointer *) &rados_shutdown}, +- {"rados_conf_read_file", +- (gpointer *) &rados_conf_read_file}, +- {"rados_conf_set", +- (gpointer *) &rados_conf_set}, +- {"rados_ioctx_create", +- (gpointer *) &rados_ioctx_create}, +- {"rados_ioctx_destroy", +- (gpointer *) &rados_ioctx_destroy}, +- {"rbd_create", +- (gpointer *) &rbd_create}, +- {"rbd_open", +- (gpointer *) &rbd_open}, +- {"rbd_close", +- (gpointer *) &rbd_close}, +- {"rbd_resize", +- (gpointer *) &rbd_resize}, +- {"rbd_stat", +- (gpointer *) &rbd_stat}, +- {"rbd_snap_list", +- (gpointer *) &rbd_snap_list}, +- {"rbd_snap_list_end", +- (gpointer *) &rbd_snap_list_end}, +- {"rbd_snap_create", +- (gpointer *) &rbd_snap_create}, +- {"rbd_snap_remove", +- (gpointer *) &rbd_snap_remove}, +- {"rbd_snap_rollback", +- (gpointer *) &rbd_snap_rollback}, +- {"rbd_aio_write", +- (gpointer *) &rbd_aio_write}, +- {"rbd_aio_read", +- (gpointer *) &rbd_aio_read}, +- {"rbd_aio_create_completion", +- (gpointer *) &rbd_aio_create_completion}, +- {"rbd_aio_get_return_value", +- (gpointer *) &rbd_aio_get_return_value}, +- {"rbd_aio_release", +- (gpointer *) &rbd_aio_release}, +- {NULL} +- }; +- +- if (qemu_rbd_set_functions(librbd_handle, symbols) < 0) { +- return -1; +- } +- +- return 0; +-} +- +-/* +- * Detect whether the installed version of librbd +- * supports newer functionality, and enable or disable +- * it appropriately in bdrv_rbd. +- */ +-static void qemu_rbd_set_optional_functions(void) +-{ +- if (g_module_symbol(librbd_handle, "rbd_flush", +- (gpointer *) &rbd_flush)) { +- bdrv_rbd.bdrv_aio_flush = NULL; +- bdrv_rbd.bdrv_co_flush_to_disk = qemu_rbd_co_flush; +- } else { +- rbd_flush = NULL; +- bdrv_rbd.bdrv_co_flush_to_disk = NULL; +- } +- +- if (g_module_symbol(librbd_handle, "rbd_aio_flush", +- (gpointer *) &rbd_aio_flush)) { +- bdrv_rbd.bdrv_co_flush_to_disk = NULL; +- bdrv_rbd.bdrv_aio_flush = qemu_rbd_aio_flush; +- } else { +- rbd_aio_flush = NULL; +- bdrv_rbd.bdrv_aio_flush = NULL; +- } +- +- if (g_module_symbol(librbd_handle, "rbd_aio_discard", +- (gpointer *) &rbd_aio_discard)) { +- bdrv_rbd.bdrv_aio_discard = qemu_rbd_aio_discard; +- } else { +- rbd_aio_discard = NULL; +- bdrv_rbd.bdrv_aio_discard = NULL; +- } +-} +- +-static int qemu_rbd_load_libs(void) +-{ +- if (librbd_loaded) { +- return 0; +- } +- +- if (!g_module_supported()) { +- error_report("modules are not supported on this platform: %s", +- g_module_error()); +- return -1; +- } +- +- librbd_handle = g_module_open("librbd.so.1", 0); +- if (!librbd_handle) { +- error_report("error loading librbd: %s", g_module_error()); +- return -1; +- } +- +- /* +- * Due to c++ templates used in librbd/librados and their +- * dependencies, and linker duplicate trimming rules, closing +- * librbd would leave it mapped. Make this explicit. +- */ +- g_module_make_resident(librbd_handle); +- +- if (qemu_rbd_set_mandatory_functions() < 0) { +- return -1; +- } +- qemu_rbd_set_optional_functions(); +- librbd_loaded = true; +- +- return 0; +-} +- + block_init(bdrv_rbd_init); +diff --git a/block/rbd_types.h b/block/rbd_types.h +deleted file mode 100644 +index f327cb4..0000000 +--- a/block/rbd_types.h ++++ /dev/null +@@ -1,91 +0,0 @@ +-/* +- * Types and signatures for librados and librbd +- * +- * Copyright (C) 2013 Inktank Storage Inc. +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, see . +- */ +- +-#ifndef QEMU_BLOCK_RBD_TYPES_H +-#define QEMU_BLOCK_RBD_TYPES_H +- +-/* types from librados used by the rbd block driver */ +- +-typedef void *rados_t; +-typedef void *rados_ioctx_t; +- +-static int (*rados_create)(rados_t *cluster, const char * const id); +-static int (*rados_connect)(rados_t cluster); +-static void (*rados_shutdown)(rados_t cluster); +-static int (*rados_conf_read_file)(rados_t cluster, const char *path); +-static int (*rados_conf_set)(rados_t cluster, const char *option, +- const char *value); +-static int (*rados_ioctx_create)(rados_t cluster, const char *pool_name, +- rados_ioctx_t *ioctx); +-static void (*rados_ioctx_destroy)(rados_ioctx_t io); +- +-/* types from librbd used by the rbd block driver*/ +- +-typedef void *rbd_image_t; +-typedef void *rbd_completion_t; +-typedef void (*rbd_callback_t)(rbd_completion_t cb, void *arg); +- +-typedef struct { +- uint64_t id; +- uint64_t size; +- const char *name; +-} rbd_snap_info_t; +- +-#define RBD_MAX_IMAGE_NAME_SIZE 96 +-#define RBD_MAX_BLOCK_NAME_SIZE 24 +- +-typedef struct { +- uint64_t size; +- uint64_t obj_size; +- uint64_t num_objs; +- int order; +- char block_name_prefix[RBD_MAX_BLOCK_NAME_SIZE]; +- int64_t parent_pool; +- char parent_name[RBD_MAX_IMAGE_NAME_SIZE]; +-} rbd_image_info_t; +- +-static int (*rbd_create)(rados_ioctx_t io, const char *name, uint64_t size, +- int *order); +-static int (*rbd_open)(rados_ioctx_t io, const char *name, rbd_image_t *image, +- const char *snap_name); +-static int (*rbd_close)(rbd_image_t image); +-static int (*rbd_resize)(rbd_image_t image, uint64_t size); +-static int (*rbd_stat)(rbd_image_t image, rbd_image_info_t *info, +- size_t infosize); +-static int (*rbd_snap_list)(rbd_image_t image, rbd_snap_info_t *snaps, +- int *max_snaps); +-static void (*rbd_snap_list_end)(rbd_snap_info_t *snaps); +-static int (*rbd_snap_create)(rbd_image_t image, const char *snapname); +-static int (*rbd_snap_remove)(rbd_image_t image, const char *snapname); +-static int (*rbd_snap_rollback)(rbd_image_t image, const char *snapname); +-static int (*rbd_aio_write)(rbd_image_t image, uint64_t off, size_t len, +- const char *buf, rbd_completion_t c); +-static int (*rbd_aio_read)(rbd_image_t image, uint64_t off, size_t len, +- char *buf, rbd_completion_t c); +-static int (*rbd_aio_discard)(rbd_image_t image, uint64_t off, uint64_t len, +- rbd_completion_t c); +-static int (*rbd_aio_create_completion)(void *cb_arg, +- rbd_callback_t complete_cb, +- rbd_completion_t *c); +-static ssize_t (*rbd_aio_get_return_value)(rbd_completion_t c); +-static void (*rbd_aio_release)(rbd_completion_t c); +-static int (*rbd_flush)(rbd_image_t image); +-static int (*rbd_aio_flush)(rbd_image_t image, rbd_completion_t c); +- +-#endif +diff --git a/configure b/configure +index 8db9dbe..1583359 100755 +--- a/configure ++++ b/configure +@@ -227,6 +227,7 @@ qom_cast_debug="yes" + trace_backend="nop" + trace_file="trace" + spice="" ++rbd="" + smartcard_nss="" + libusb="" + usb_redir="" +@@ -892,6 +893,10 @@ for opt do + ;; + --enable-glx) glx="yes" + ;; ++ --disable-rbd) rbd="no" ++ ;; ++ --enable-rbd) rbd="yes" ++ ;; + --disable-xfsctl) xfs="no" + ;; + --enable-xfsctl) xfs="yes" +@@ -1213,6 +1218,7 @@ echo " --with-trace-file=NAME Full PATH,NAME of file to store traces" + echo " Default:trace-" + echo " --disable-spice disable spice" + echo " --enable-spice enable spice" ++echo " --enable-rbd enable building the rados block device (rbd)" + echo " --disable-libiscsi disable iscsi support" + echo " --enable-libiscsi enable iscsi support" + echo " --disable-smartcard-nss disable smartcard nss support" +@@ -2372,10 +2378,10 @@ if test "$mingw32" = yes; then + else + glib_req_ver=2.12 + fi +-if $pkg_config --atleast-version=$glib_req_ver gthread-2.0 gmodule-2.0 > /dev/null 2>&1 ++if $pkg_config --atleast-version=$glib_req_ver gthread-2.0 > /dev/null 2>&1 + then +- glib_cflags=`$pkg_config --cflags gthread-2.0 gmodule-2.0 2>/dev/null` +- glib_libs=`$pkg_config --libs gthread-2.0 gmodule-2.0 2>/dev/null` ++ glib_cflags=`$pkg_config --cflags gthread-2.0 2>/dev/null` ++ glib_libs=`$pkg_config --libs gthread-2.0 2>/dev/null` + CFLAGS="$glib_cflags $CFLAGS" + LIBS="$glib_libs $LIBS" + libs_qga="$glib_libs $libs_qga" +@@ -2477,6 +2483,31 @@ if test "$mingw32" != yes -a "$pthread" = no; then + fi + + ########################################## ++# rbd probe ++if test "$rbd" != "no" ; then ++ cat > $TMPC < ++#include ++int main(void) { ++ rados_t cluster; ++ rados_create(&cluster, NULL); ++ return 0; ++} ++EOF ++ rbd_libs="-lrbd -lrados" ++ if compile_prog "" "$rbd_libs" ; then ++ rbd=yes ++ libs_tools="$rbd_libs $libs_tools" ++ libs_softmmu="$rbd_libs $libs_softmmu" ++ else ++ if test "$rbd" = "yes" ; then ++ feature_not_found "rados block device" ++ fi ++ rbd=no ++ fi ++fi ++ ++########################################## + # libssh2 probe + min_libssh2_version=1.2.8 + if test "$libssh2" != "no" ; then +@@ -3665,6 +3696,7 @@ echo "vhost-scsi support $vhost_scsi" + echo "Trace backend $trace_backend" + echo "Trace output file $trace_file-" + echo "spice support $spice ($spice_protocol_version/$spice_server_version)" ++echo "rbd support $rbd" + echo "xfsctl support $xfs" + echo "nss used $smartcard_nss" + echo "libusb $libusb" +@@ -4035,6 +4067,9 @@ fi + if test "$qom_cast_debug" = "yes" ; then + echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak + fi ++if test "$rbd" = "yes" ; then ++ echo "CONFIG_RBD=y" >> $config_host_mak ++fi + + echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Revert-usb-hub-report-status-changes-only-once.patch b/SOURCES/kvm-Revert-usb-hub-report-status-changes-only-once.patch new file mode 100644 index 0000000..70cc65f --- /dev/null +++ b/SOURCES/kvm-Revert-usb-hub-report-status-changes-only-once.patch @@ -0,0 +1,67 @@ +From 0808f68d525eca6d44f2f4660c34d953a36ae486 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 12 Sep 2013 09:39:32 +0200 +Subject: [PATCH 04/25] Revert "usb-hub: report status changes only once" + +RH-Author: Gerd Hoffmann +Message-id: <1378978772-21612-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 54340 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/4] Revert "usb-hub: report status changes only once" +Bugzilla: 1001604 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Hans de Goede +RH-Acked-by: Miroslav Rezanina + +This reverts commit a309ee6e0a256f690760abfba44fceaa52a7c2f3. + +This isn't in line with the usb specification and adds regressions, +win7 fails to drive the usb hub for example. + +Was added because it "solved" the issue of hubs interacting badly +with the xhci host controller. Now with the root cause being fixed +in xhci (commit ) we can revert this one. + +[ rhel7 note: Damn, forgot to fill in the final commit hash before + sending out the upstream pull request. It's commit + 4d7a81c06f5f17e019a2d3a18300500bd64f6f40 ] + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +(cherry picked from commit bdebd6ee81f4d849aa8541c289203e3992450db0) +--- + hw/usb/dev-hub.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/dev-hub.c | 6 +----- + 1 files changed, 1 insertions(+), 5 deletions(-) + +diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c +index 0b71abd..a5f092b 100644 +--- a/hw/usb/dev-hub.c ++++ b/hw/usb/dev-hub.c +@@ -33,7 +33,6 @@ typedef struct USBHubPort { + USBPort port; + uint16_t wPortStatus; + uint16_t wPortChange; +- uint16_t wPortChange_reported; + } USBHubPort; + + typedef struct USBHubState { +@@ -468,11 +467,8 @@ static void usb_hub_handle_data(USBDevice *dev, USBPacket *p) + status = 0; + for(i = 0; i < NUM_PORTS; i++) { + port = &s->ports[i]; +- if (port->wPortChange && +- port->wPortChange_reported != port->wPortChange) { ++ if (port->wPortChange) + status |= (1 << (i + 1)); +- } +- port->wPortChange_reported = port->wPortChange; + } + if (status != 0) { + for(i = 0; i < n; i++) { +-- +1.7.1 + diff --git a/SOURCES/kvm-Revert-usb-tablet-Don-t-claim-wakeup-capability-for-.patch b/SOURCES/kvm-Revert-usb-tablet-Don-t-claim-wakeup-capability-for-.patch new file mode 100644 index 0000000..9e12a50 --- /dev/null +++ b/SOURCES/kvm-Revert-usb-tablet-Don-t-claim-wakeup-capability-for-.patch @@ -0,0 +1,47 @@ +From 9c2b117313b85762b6e9e530596703bbfbe4b8e4 Mon Sep 17 00:00:00 2001 +Message-Id: <9c2b117313b85762b6e9e530596703bbfbe4b8e4.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Gerd Hoffmann +Date: Mon, 9 Dec 2013 12:19:21 +0100 +Subject: [PATCH 45/46] Revert "usb-tablet: Don't claim wakeup capability for + USB-2 version" + +RH-Author: Gerd Hoffmann +Message-id: <1386591561-21826-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 56031 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] Revert "usb-tablet: Don't claim wakeup capability for USB-2 version" +Bugzilla: 1039513 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +This reverts commit aa1c9e971e80d25b92908dce3dec7c38b49480ea. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 690af06aebdfd043a6222de96a535dcba2144caf) +--- + hw/usb/dev-hid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/usb/dev-hid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c +index 66c6331..6aadaa0 100644 +--- a/hw/usb/dev-hid.c ++++ b/hw/usb/dev-hid.c +@@ -236,7 +236,7 @@ static const USBDescDevice desc_device_tablet2 = { + .bNumInterfaces = 1, + .bConfigurationValue = 1, + .iConfiguration = STR_CONFIG_TABLET, +- .bmAttributes = 0x80, ++ .bmAttributes = 0xa0, + .bMaxPower = 50, + .nif = 1, + .ifs = &desc_iface_tablet2, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-Set-xbzrle-buffers-to-NULL-after-freeing-them-to-avo.patch b/SOURCES/kvm-Set-xbzrle-buffers-to-NULL-after-freeing-them-to-avo.patch new file mode 100644 index 0000000..09aeee6 --- /dev/null +++ b/SOURCES/kvm-Set-xbzrle-buffers-to-NULL-after-freeing-them-to-avo.patch @@ -0,0 +1,45 @@ +From e8cafbffc5f3363548c13cc237883a3346cff1cf Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 11 Feb 2014 14:56:36 +0100 +Subject: [PATCH 17/28] Set xbzrle buffers to NULL after freeing them to avoid double free errors + +RH-Author: Orit Wasserman +Message-id: <1392130597-23600-2-git-send-email-owasserm@redhat.com> +Patchwork-id: 57212 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] Set xbzrle buffers to NULL after freeing them to avoid double free errors +Bugzilla: 1038540 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela + +Signed-off-by: Orit Wasserman +Reviewed-by: Juan Quintela +Reviewed-by: Eric Blake +Signed-off-by: Juan Quintela +(cherry picked from commit f6c6483b259a2395ee44cfa966f622e0f2dbe2ae) +--- + arch_init.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 0aacdac..65148d6 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -623,6 +623,9 @@ static void migration_end(void) + g_free(XBZRLE.current_buf); + g_free(XBZRLE.decoded_buf); + XBZRLE.cache = NULL; ++ XBZRLE.encoded_buf = NULL; ++ XBZRLE.current_buf = NULL; ++ XBZRLE.decoded_buf = NULL; + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-Simplify-machine-option-queries-with-qemu_get_machin.patch b/SOURCES/kvm-Simplify-machine-option-queries-with-qemu_get_machin.patch new file mode 100644 index 0000000..af0bc4a --- /dev/null +++ b/SOURCES/kvm-Simplify-machine-option-queries-with-qemu_get_machin.patch @@ -0,0 +1,283 @@ +From cfb7a42b4241cf1a8dea0f33947c66671923f694 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 6 Aug 2013 13:17:05 +0200 +Subject: [PATCH 12/28] Simplify -machine option queries with qemu_get_machine_opts() + +RH-Author: Markus Armbruster +Message-id: <1375795025-28674-7-git-send-email-armbru@redhat.com> +Patchwork-id: 52996 +O-Subject: [PATCH 7.0 qemu-kvm 6/6] Simplify -machine option queries with qemu_get_machine_opts() +Bugzilla: 980782 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny +RH-Acked-by: Orit Wasserman + +The previous two commits fixed bugs in -machine option queries. I +can't find fault with the remaining queries, but let's use +qemu_get_machine_opts() everywhere, for consistency, simplicity and +robustness. + +Signed-off-by: Markus Armbruster +Message-id: 1372943363-24081-7-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 2ff3de685a875ece3ee21256736c0a9dbf39dc4c) +--- + device_tree.c | 28 ++++++++++------------------ + exec.c | 12 ++++-------- + hw/arm/boot.c | 8 +------- + hw/ppc/e500.c | 12 +++--------- + hw/ppc/spapr.c | 28 ++++++++++------------------ + vl.c | 22 ++++++---------------- + 6 files changed, 34 insertions(+), 76 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + device_tree.c | 28 ++++++++++------------------ + exec.c | 12 ++++-------- + hw/arm/boot.c | 8 +------- + hw/ppc/e500.c | 12 +++--------- + hw/ppc/spapr.c | 28 ++++++++++------------------ + vl.c | 22 ++++++---------------- + 6 files changed, 34 insertions(+), 76 deletions(-) + +diff --git a/device_tree.c b/device_tree.c +index 56af24b..77cbe04 100644 +--- a/device_tree.c ++++ b/device_tree.c +@@ -21,6 +21,7 @@ + #include "config.h" + #include "qemu-common.h" + #include "sysemu/device_tree.h" ++#include "sysemu/sysemu.h" + #include "hw/loader.h" + #include "qemu/option.h" + #include "qemu/config-file.h" +@@ -239,14 +240,10 @@ uint32_t qemu_devtree_alloc_phandle(void *fdt) + * which phandle id to start allocting phandles. + */ + if (!phandle) { +- QemuOpts *machine_opts; +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- const char *phandle_start; +- phandle_start = qemu_opt_get(machine_opts, "phandle_start"); +- if (phandle_start) { +- phandle = strtoul(phandle_start, NULL, 0); +- } ++ const char *phandle_start = qemu_opt_get(qemu_get_machine_opts(), ++ "phandle_start"); ++ if (phandle_start) { ++ phandle = strtoul(phandle_start, NULL, 0); + } + } + +@@ -307,15 +304,10 @@ int qemu_devtree_add_subnode(void *fdt, const char *name) + + void qemu_devtree_dumpdtb(void *fdt, int size) + { +- QemuOpts *machine_opts; +- +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- const char *dumpdtb = qemu_opt_get(machine_opts, "dumpdtb"); +- if (dumpdtb) { +- /* Dump the dtb to a file and quit */ +- exit(g_file_set_contents(dumpdtb, fdt, size, NULL) ? 0 : 1); +- } +- } ++ const char *dumpdtb = qemu_opt_get(qemu_get_machine_opts(), "dumpdtb"); + ++ if (dumpdtb) { ++ /* Dump the dtb to a file and quit */ ++ exit(g_file_set_contents(dumpdtb, fdt, size, NULL) ? 0 : 1); ++ } + } +diff --git a/exec.c b/exec.c +index aec65c5..ee22b9b 100644 +--- a/exec.c ++++ b/exec.c +@@ -31,6 +31,7 @@ + #include "hw/qdev.h" + #include "qemu/osdep.h" + #include "sysemu/kvm.h" ++#include "sysemu/sysemu.h" + #include "hw/xen/xen.h" + #include "qemu/timer.h" + #include "qemu/config-file.h" +@@ -979,12 +980,10 @@ ram_addr_t last_ram_offset(void) + static void qemu_ram_setup_dump(void *addr, ram_addr_t size) + { + int ret; +- QemuOpts *machine_opts; + + /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */ +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts && +- !qemu_opt_get_bool(machine_opts, "dump-guest-core", true)) { ++ if (!qemu_opt_get_bool(qemu_get_machine_opts(), ++ "dump-guest-core", true)) { + ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP); + if (ret) { + perror("qemu_madvise"); +@@ -1031,10 +1030,7 @@ void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev) + + static int memory_try_enable_merging(void *addr, size_t len) + { +- QemuOpts *opts; +- +- opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (opts && !qemu_opt_get_bool(opts, "mem-merge", true)) { ++ if (!qemu_opt_get_bool(qemu_get_machine_opts(), "mem-merge", true)) { + /* disabled by the user */ + return 0; + } +diff --git a/hw/arm/boot.c b/hw/arm/boot.c +index 6bffc3d..6436109 100644 +--- a/hw/arm/boot.c ++++ b/hw/arm/boot.c +@@ -365,7 +365,6 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) + uint64_t elf_entry; + hwaddr entry; + int big_endian; +- QemuOpts *machine_opts; + + /* Load the kernel. */ + if (!info->kernel_filename) { +@@ -373,12 +372,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) + exit(1); + } + +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- info->dtb_filename = qemu_opt_get(machine_opts, "dtb"); +- } else { +- info->dtb_filename = NULL; +- } ++ info->dtb_filename = qemu_opt_get(qemu_get_machine_opts(), "dtb"); + + if (!info->secondary_cpu_reset_hook) { + info->secondary_cpu_reset_hook = default_reset_secondary; +diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c +index c9ae512..ef3e571 100644 +--- a/hw/ppc/e500.c ++++ b/hw/ppc/e500.c +@@ -137,7 +137,6 @@ static int ppce500_load_device_tree(CPUPPCState *env, + uint32_t clock_freq = 400000000; + uint32_t tb_freq = 400000000; + int i; +- const char *toplevel_compat = NULL; /* user override */ + char compatible_sb[] = "fsl,mpc8544-immr\0simple-bus"; + char soc[128]; + char mpic[128]; +@@ -158,14 +157,9 @@ static int ppce500_load_device_tree(CPUPPCState *env, + 0x0, 0xe1000000, + 0x0, 0x10000, + }; +- QemuOpts *machine_opts; +- const char *dtb_file = NULL; +- +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- dtb_file = qemu_opt_get(machine_opts, "dtb"); +- toplevel_compat = qemu_opt_get(machine_opts, "dt_compatible"); +- } ++ QemuOpts *machine_opts = qemu_get_machine_opts(); ++ const char *dtb_file = qemu_opt_get(machine_opts, "dtb"); ++ const char *toplevel_compat = qemu_opt_get(machine_opts, "dt_compatible"); + + if (dtb_file) { + char *filename; +diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c +index c96ac81..6a46488 100644 +--- a/hw/ppc/spapr.c ++++ b/hw/ppc/spapr.c +@@ -678,27 +678,19 @@ static void spapr_cpu_reset(void *opaque) + + static void spapr_create_nvram(sPAPREnvironment *spapr) + { +- QemuOpts *machine_opts; +- DeviceState *dev; ++ DeviceState *dev = qdev_create(&spapr->vio_bus->bus, "spapr-nvram"); ++ const char *drivename = qemu_opt_get(qemu_get_machine_opts(), "nvram"); + +- dev = qdev_create(&spapr->vio_bus->bus, "spapr-nvram"); ++ if (drivename) { ++ BlockDriverState *bs; + +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- const char *drivename; +- +- drivename = qemu_opt_get(machine_opts, "nvram"); +- if (drivename) { +- BlockDriverState *bs; +- +- bs = bdrv_find(drivename); +- if (!bs) { +- fprintf(stderr, "No such block device \"%s\" for nvram\n", +- drivename); +- exit(1); +- } +- qdev_prop_set_drive_nofail(dev, "drive", bs); ++ bs = bdrv_find(drivename); ++ if (!bs) { ++ fprintf(stderr, "No such block device \"%s\" for nvram\n", ++ drivename); ++ exit(1); + } ++ qdev_prop_set_drive_nofail(dev, "drive", bs); + } + + qdev_init_nofail(dev); +diff --git a/vl.c b/vl.c +index 0ed9257..d424af7 100644 +--- a/vl.c ++++ b/vl.c +@@ -1037,15 +1037,9 @@ static int parse_sandbox(QemuOpts *opts, void *opaque) + return 0; + } + +-/*********QEMU USB setting******/ + bool usb_enabled(bool default_usb) + { +- QemuOpts *mach_opts; +- mach_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (mach_opts) { +- return qemu_opt_get_bool(mach_opts, "usb", default_usb); +- } +- return default_usb; ++ return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", default_usb); + } + + #ifndef _WIN32 +@@ -4136,14 +4130,10 @@ int main(int argc, char **argv, char **envp) + qtest_init(); + } + +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- kernel_filename = qemu_opt_get(machine_opts, "kernel"); +- initrd_filename = qemu_opt_get(machine_opts, "initrd"); +- kernel_cmdline = qemu_opt_get(machine_opts, "append"); +- } else { +- kernel_filename = initrd_filename = kernel_cmdline = NULL; +- } ++ machine_opts = qemu_get_machine_opts(); ++ kernel_filename = qemu_opt_get(machine_opts, "kernel"); ++ initrd_filename = qemu_opt_get(machine_opts, "initrd"); ++ kernel_cmdline = qemu_opt_get(machine_opts, "append"); + + if (!kernel_cmdline) { + kernel_cmdline = ""; +@@ -4161,7 +4151,7 @@ int main(int argc, char **argv, char **envp) + exit(1); + } + +- if (!linux_boot && machine_opts && qemu_opt_get(machine_opts, "dtb")) { ++ if (!linux_boot && qemu_opt_get(machine_opts, "dtb")) { + fprintf(stderr, "-dtb only allowed with -kernel option\n"); + exit(1); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-The-calculation-of-bytes_xfer-in-qemu_put_buffer-is-.patch b/SOURCES/kvm-The-calculation-of-bytes_xfer-in-qemu_put_buffer-is-.patch new file mode 100644 index 0000000..bfe45f6 --- /dev/null +++ b/SOURCES/kvm-The-calculation-of-bytes_xfer-in-qemu_put_buffer-is-.patch @@ -0,0 +1,47 @@ +From a1b552f36a3257593125f054a83c467915c65dc4 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Tue, 14 Jan 2014 15:27:11 -0500 +Subject: [PATCH 02/14] The calculation of bytes_xfer in qemu_put_buffer() is + wrong + +Message-id: <1389713232-30999-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 56697 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] The calculation of bytes_xfer in qemu_put_buffer() is wrong +Bugzilla: 1003467 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +From: "Wangting (Kathy)" + +In qemu_put_buffer(), bytes_xfer += size is wrong, it will be more +than expected, and should be bytes_xfer += l. + +Signed-off-by: zhangmin +Signed-off-by: Juan Quintela +(cherry picked from commit 8e86729a0e83b557c22808a2337252c969ca3986) +--- + savevm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + savevm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/savevm.c b/savevm.c +index a0d4e09..bd37959 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -787,7 +787,7 @@ void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size) + if (l > size) + l = size; + memcpy(f->buf + f->buf_index, buf, l); +- f->bytes_xfer += size; ++ f->bytes_xfer += l; + if (f->ops->writev_buffer) { + add_to_iovec(f, f->buf + f->buf_index, l); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Use-KVM_GET_MSR_INDEX_LIST-for-MSR_IA32_ARCH_CAP.patch b/SOURCES/kvm-Use-KVM_GET_MSR_INDEX_LIST-for-MSR_IA32_ARCH_CAP.patch new file mode 100644 index 0000000..5e053a8 --- /dev/null +++ b/SOURCES/kvm-Use-KVM_GET_MSR_INDEX_LIST-for-MSR_IA32_ARCH_CAP.patch @@ -0,0 +1,104 @@ +From aa89186992d427e17118608c9fa02b36be8fab8e Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:25 +0200 +Subject: [PATCH 09/12] kvm: Use KVM_GET_MSR_INDEX_LIST for + MSR_IA32_ARCH_CAPABILITIES support + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-9-git-send-email-plai@redhat.com> +Patchwork-id: 90861 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 08/10] kvm: Use KVM_GET_MSR_INDEX_LIST for MSR_IA32_ARCH_CAPABILITIES support +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Bandan Das + +When writing to guest's MSR_IA32_ARCH_CAPABILITIES, check whether it's +supported in the guest using the KVM_GET_MSR_INDEX_LIST ioctl. + +Fixes: d86f963694df27f11b3681ffd225c9362de1b634 +Suggested-by: Eduardo Habkost +Tested-by: balducci@units.it +Signed-off-by: Bandan Das +Message-Id: +Signed-off-by: Eduardo Habkost +(cherry picked from commit aec5e9c3a94cf8b7920f59bef69a6f426092c4a0) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target/i386/kvm.c changes to target-i386/kvm.c + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 1 + + target-i386/kvm.c | 19 +++++++++++-------- + 2 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 5a86b2c..8f73af7 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -1070,6 +1070,7 @@ typedef struct CPUX86State { + + uint64_t spec_ctrl; + uint64_t virt_ssbd; ++ uint64_t virt_arch_capabs; + + TPRAccess tpr_access_type; + } CPUX86State; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 722cfbc..12781a8 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -81,6 +81,7 @@ static bool has_msr_mtrr; + static bool has_msr_xss; + static bool has_msr_spec_ctrl; + static bool has_msr_virt_ssbd; ++static bool has_msr_arch_capabs; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -902,6 +903,10 @@ static int kvm_get_supported_msrs(KVMState *s) + has_msr_virt_ssbd = true; + continue; + } ++ if (kvm_msr_list->indices[i] == MSR_IA32_ARCH_CAPABILITIES) { ++ has_msr_arch_capabs = true; ++ continue; ++ } + } + } + +@@ -1340,14 +1345,9 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + } + } + /* If host supports feature MSR, write down. */ +- if (kvm_feature_msrs) { +- int i; +- for (i = 0; i < kvm_feature_msrs->nmsrs; i++) +- if (kvm_feature_msrs->indices[i] == MSR_IA32_ARCH_CAPABILITIES) { +- kvm_msr_entry_set(&msrs[n++], MSR_IA32_ARCH_CAPABILITIES, +- env->features[FEAT_ARCH_CAPABILITIES]); +- break; +- } ++ if (has_msr_arch_capabs) { ++ kvm_msr_entry_set(&msrs[n++], MSR_IA32_ARCH_CAPABILITIES, ++ env->features[FEAT_ARCH_CAPABILITIES]); + } + /* + * The following MSRs have side effects on the guest or are too heavy +@@ -1939,6 +1939,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_VIRT_SSBD: + env->virt_ssbd = msrs[i].data; + break; ++ case MSR_IA32_ARCH_CAPABILITIES: ++ env->features[FEAT_ARCH_CAPABILITIES] = msrs[i].data; ++ break; + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Use-inhibit-to-prevent-ballooning-without-synchr.patch b/SOURCES/kvm-Use-inhibit-to-prevent-ballooning-without-synchr.patch new file mode 100644 index 0000000..6f6c985 --- /dev/null +++ b/SOURCES/kvm-Use-inhibit-to-prevent-ballooning-without-synchr.patch @@ -0,0 +1,79 @@ +From 56e7f4a46b448ec40f72272658296df226ff0b5a Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 13 Dec 2018 21:55:20 +0100 +Subject: [PATCH 4/5] kvm: Use inhibit to prevent ballooning without + synchronous mmu + +RH-Author: Alex Williamson +Message-id: <154473812068.22725.2716400707312373292.stgit@gimli.home> +Patchwork-id: 83496 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 4/5] kvm: Use inhibit to prevent ballooning without synchronous mmu +Bugzilla: 1659229 +RH-Acked-by: Peter Xu +RH-Acked-by: Cornelia Huck +RH-Acked-by: Auger Eric + +Bugzilla: 1659229 + +Remove KVM specific tests in balloon_page(), instead marking +ballooning as inhibited without KVM_CAP_SYNC_MMU support. + +Reviewed-by: David Hildenbrand +Reviewed-by: Peter Xu +Reviewed-by: Cornelia Huck +Acked-by: Paolo Bonzini +Signed-off-by: Alex Williamson +(cherry picked from commit f59489423ab79852e98d9b3025b7d99ba8da584f) +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-balloon.c | 4 +--- + kvm-all.c | 4 ++++ + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index c9562ef..d8add23 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -21,7 +21,6 @@ + #include "cpu.h" + #include "sysemu/balloon.h" + #include "hw/virtio/virtio-balloon.h" +-#include "sysemu/kvm.h" + #include "exec/address-spaces.h" + #include "qapi/visitor.h" + +@@ -34,8 +33,7 @@ + static void balloon_page(void *addr, int deflate) + { + #if defined(__linux__) +- if (!qemu_balloon_is_inhibited() && (!kvm_enabled() || +- kvm_has_sync_mmu())) { ++ if (!qemu_balloon_is_inhibited()) { + qemu_madvise(addr, TARGET_PAGE_SIZE, + deflate ? QEMU_MADV_WILLNEED : QEMU_MADV_DONTNEED); + } +diff --git a/kvm-all.c b/kvm-all.c +index f5b7958..572275e 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include "sysemu/balloon.h" + + #include + +@@ -1481,6 +1482,9 @@ int kvm_init(void) + cpu_interrupt_handler = kvm_handle_interrupt; + + s->sync_mmu = !!kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU); ++ if (!s->sync_mmu) { ++ qemu_balloon_inhibit(true); ++ } + + return 0; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Use-qemu-kvm-in-documentation-instead-of-qemu-system.patch b/SOURCES/kvm-Use-qemu-kvm-in-documentation-instead-of-qemu-system.patch new file mode 100644 index 0000000..cb3e666 --- /dev/null +++ b/SOURCES/kvm-Use-qemu-kvm-in-documentation-instead-of-qemu-system.patch @@ -0,0 +1,809 @@ +From 7266fe6b09986cfa24d704075d940022cabdc8f5 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 14 Nov 2014 08:28:01 +0100 +Subject: [PATCH 32/41] ] Use qemu-kvm in documentation instead of + qemu-system-i386 + +Message-id: <1415953681-20015-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 62376 +O-Subject: [RHEL-7.1 qemu-kvm PATCHv4]] Use qemu-kvm in documentation instead of qemu-system-i386 +Bugzilla: 1140618 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi + +From: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1140618 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=8244530 + +We change the name and location of qemu-kvm binaries. Update documentation +to reflect this change. + +Signed-off-by: Miroslav Rezanina +--- +v4: + - Replace qemu with qemu-kvm + +v3: + - Use qemu-kvm instead of /usr/libexec/qemu-kvm + - Replace qemu-system-x86_64 too + +v2: + - do not replace qemu-system-i386.exe +--- + qemu-doc.texi | 98 ++++++++++++++++++++++----------------------- + qemu-options.hx | 120 ++++++++++++++++++++++++++++---------------------------- + 2 files changed, 109 insertions(+), 109 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-doc.texi | 98 ++++++++++++++++++++++----------------------- + qemu-options.hx | 120 ++++++++++++++++++++++++++++---------------------------- + 2 files changed, 109 insertions(+), 109 deletions(-) + +diff --git a/qemu-doc.texi b/qemu-doc.texi +index 0f7e5f8..ff124fe 100644 +--- a/qemu-doc.texi ++++ b/qemu-doc.texi +@@ -226,12 +226,12 @@ Note that, by default, GUS shares IRQ(7) with parallel ports and so + QEMU must be told to not have parallel ports to have working GUS. + + @example +-qemu-system-i386 dos.img -soundhw gus -parallel none ++qemu-kvm dos.img -soundhw gus -parallel none + @end example + + Alternatively: + @example +-qemu-system-i386 dos.img -device gus,irq=5 ++qemu-kvm dos.img -device gus,irq=5 + @end example + + Or some other unclaimed IRQ. +@@ -247,7 +247,7 @@ CS4231A is the chip used in Windows Sound System and GUSMAX products + Download and uncompress the linux image (@file{linux.img}) and type: + + @example +-qemu-system-i386 linux.img ++qemu-kvm linux.img + @end example + + Linux should boot and give you a prompt. +@@ -257,7 +257,7 @@ Linux should boot and give you a prompt. + + @example + @c man begin SYNOPSIS +-usage: qemu-system-i386 [options] [@var{disk_image}] ++usage: qemu-kvm [options] [@var{disk_image}] + @c man end + @end example + +@@ -766,7 +766,7 @@ QEMU can automatically create a virtual FAT disk image from a + directory tree. In order to use it, just type: + + @example +-qemu-system-i386 linux.img -hdb fat:/my_directory ++qemu-kvm linux.img -hdb fat:/my_directory + @end example + + Then you access access to all the files in the @file{/my_directory} +@@ -776,14 +776,14 @@ them via SAMBA or NFS. The default access is @emph{read-only}. + Floppies can be emulated with the @code{:floppy:} option: + + @example +-qemu-system-i386 linux.img -fda fat:floppy:/my_directory ++qemu-kvm linux.img -fda fat:floppy:/my_directory + @end example + + A read/write support is available for testing (beta stage) with the + @code{:rw:} option: + + @example +-qemu-system-i386 linux.img -fda fat:floppy:rw:/my_directory ++qemu-kvm linux.img -fda fat:floppy:rw:/my_directory + @end example + + What you should @emph{never} do: +@@ -801,14 +801,14 @@ QEMU can access directly to block device exported using the Network Block Device + protocol. + + @example +-qemu-system-i386 linux.img -hdb nbd://my_nbd_server.mydomain.org:1024/ ++qemu-kvm linux.img -hdb nbd://my_nbd_server.mydomain.org:1024/ + @end example + + If the NBD server is located on the same host, you can use an unix socket instead + of an inet socket: + + @example +-qemu-system-i386 linux.img -hdb nbd+unix://?socket=/tmp/my_socket ++qemu-kvm linux.img -hdb nbd+unix://?socket=/tmp/my_socket + @end example + + In this case, the block device must be exported using qemu-nbd: +@@ -825,23 +825,23 @@ qemu-nbd --socket=/tmp/my_socket --share=2 my_disk.qcow2 + @noindent + and then you can use it with two guests: + @example +-qemu-system-i386 linux1.img -hdb nbd+unix://?socket=/tmp/my_socket +-qemu-system-i386 linux2.img -hdb nbd+unix://?socket=/tmp/my_socket ++qemu-kvm linux1.img -hdb nbd+unix://?socket=/tmp/my_socket ++qemu-kvm linux2.img -hdb nbd+unix://?socket=/tmp/my_socket + @end example + + If the nbd-server uses named exports (supported since NBD 2.9.18, or with QEMU's + own embedded NBD server), you must specify an export name in the URI: + @example +-qemu-system-i386 -cdrom nbd://localhost/debian-500-ppc-netinst +-qemu-system-i386 -cdrom nbd://localhost/openSUSE-11.1-ppc-netinst ++qemu-kvm -cdrom nbd://localhost/debian-500-ppc-netinst ++qemu-kvm -cdrom nbd://localhost/openSUSE-11.1-ppc-netinst + @end example + + The URI syntax for NBD is supported since QEMU 1.3. An alternative syntax is + also available. Here are some example of the older syntax: + @example +-qemu-system-i386 linux.img -hdb nbd:my_nbd_server.mydomain.org:1024 +-qemu-system-i386 linux2.img -hdb nbd:unix:/tmp/my_socket +-qemu-system-i386 -cdrom nbd:localhost:10809:exportname=debian-500-ppc-netinst ++qemu-kvm linux.img -hdb nbd:my_nbd_server.mydomain.org:1024 ++qemu-kvm linux2.img -hdb nbd:unix:/tmp/my_socket ++qemu-kvm -cdrom nbd:localhost:10809:exportname=debian-500-ppc-netinst + @end example + + @node disk_images_sheepdog +@@ -866,7 +866,7 @@ qemu-img convert @var{filename} sheepdog:///@var{image} + + You can boot from the Sheepdog disk image with the command: + @example +-qemu-system-i386 sheepdog:///@var{image} ++qemu-kvm sheepdog:///@var{image} + @end example + + You can also create a snapshot of the Sheepdog image like qcow2. +@@ -878,7 +878,7 @@ where @var{tag} is a tag name of the newly created snapshot. + To boot from the Sheepdog snapshot, specify the tag name of the + snapshot. + @example +-qemu-system-i386 sheepdog:///@var{image}#@var{tag} ++qemu-kvm sheepdog:///@var{image}#@var{tag} + @end example + + You can create a cloned image from the existing snapshot. +@@ -891,14 +891,14 @@ is its tag name. + You can use an unix socket instead of an inet socket: + + @example +-qemu-system-i386 sheepdog+unix:///@var{image}?socket=@var{path} ++qemu-kvm sheepdog+unix:///@var{image}?socket=@var{path} + @end example + + If the Sheepdog daemon doesn't run on the local host, you need to + specify one of the Sheepdog servers to connect to. + @example + qemu-img create sheepdog://@var{hostname}:@var{port}/@var{image} @var{size} +-qemu-system-i386 sheepdog://@var{hostname}:@var{port}/@var{image} ++qemu-kvm sheepdog://@var{hostname}:@var{port}/@var{image} + @end example + + @node disk_images_iscsi +@@ -940,7 +940,7 @@ Various session related parameters can be set via special options, either + in a configuration file provided via '-readconfig' or directly on the + command line. + +-If the initiator-name is not specified qemu will use a default name ++If the initiator-name is not specified qemu-kvm will use a default name + of 'iqn.2008-11.org.linux-kvm[:'] where is the name of the + virtual machine. + +@@ -987,7 +987,7 @@ cat >iscsi.conf <[,shm=] ++qemu-kvm -device ivshmem,size=[,shm=] + @end example + + If desired, interrupts can be sent between guest VMs accessing the same shared +@@ -1221,9 +1221,9 @@ is qemu.git/contrib/ivshmem-server. An example syntax when using the shared + memory server is: + + @example +-qemu-system-i386 -device ivshmem,size=[,chardev=] ++qemu-kvm -device ivshmem,size=[,chardev=] + [,msi=on][,ioeventfd=on][,vectors=n][,role=peer|master] +-qemu-system-i386 -chardev socket,path=,id= ++qemu-kvm -chardev socket,path=,id= + @end example + + When using the server, the guest will be assigned a VM ID (>=0) that allows guests +@@ -1253,7 +1253,7 @@ kernel testing. + + The syntax is: + @example +-qemu-system-i386 -kernel arch/i386/boot/bzImage -hda root-2.4.20.img -append "root=/dev/hda" ++qemu-kvm -kernel arch/i386/boot/bzImage -hda root-2.4.20.img -append "root=/dev/hda" + @end example + + Use @option{-kernel} to provide the Linux kernel image and +@@ -1268,7 +1268,7 @@ If you do not need graphical output, you can disable it and redirect + the virtual serial port and the QEMU monitor to the console with the + @option{-nographic} option. The typical command line is: + @example +-qemu-system-i386 -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \ ++qemu-kvm -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \ + -append "root=/dev/hda console=ttyS0" -nographic + @end example + +@@ -1332,7 +1332,7 @@ Network adapter that supports CDC ethernet and RNDIS protocols. @var{options} + specifies NIC options as with @code{-net nic,}@var{options} (see description). + For instance, user-mode networking can be used with + @example +-qemu-system-i386 [...OPTIONS...] -net user,vlan=0 -usbdevice net:vlan=0 ++qemu-kvm [...OPTIONS...] -net user,vlan=0 -usbdevice net:vlan=0 + @end example + Currently this cannot be used in machines that support PCI NICs. + @item bt[:@var{hci-type}] +@@ -1342,7 +1342,7 @@ no type is given, the HCI logic corresponds to @code{-bt hci,vlan=0}. + This USB device implements the USB Transport Layer of HCI. Example + usage: + @example +-qemu-system-i386 [...OPTIONS...] -usbdevice bt:hci,vlan=3 -bt device:keyboard,vlan=3 ++qemu-kvm [...OPTIONS...] -usbdevice bt:hci,vlan=3 -bt device:keyboard,vlan=3 + @end example + @end table + +@@ -1420,7 +1420,7 @@ For this setup it is recommended to restrict it to listen on a UNIX domain + socket only. For example + + @example +-qemu-system-i386 [...OPTIONS...] -vnc unix:/home/joebloggs/.qemu-myvm-vnc ++qemu-kvm [...OPTIONS...] -vnc unix:/home/joebloggs/.qemu-myvm-vnc + @end example + + This ensures that only users on local box with read/write access to that +@@ -1443,7 +1443,7 @@ is running the password is set with the monitor. Until the monitor is used to + set the password all clients will be rejected. + + @example +-qemu-system-i386 [...OPTIONS...] -vnc :1,password -monitor stdio ++qemu-kvm [...OPTIONS...] -vnc :1,password -monitor stdio + (qemu) change vnc password + Password: ******** + (qemu) +@@ -1460,7 +1460,7 @@ support provides a secure session, but no authentication. This allows any + client to connect, and provides an encrypted session. + + @example +-qemu-system-i386 [...OPTIONS...] -vnc :1,tls,x509=/etc/pki/qemu -monitor stdio ++qemu-kvm [...OPTIONS...] -vnc :1,tls,x509=/etc/pki/qemu -monitor stdio + @end example + + In the above example @code{/etc/pki/qemu} should contain at least three files, +@@ -1478,7 +1478,7 @@ then validate against the CA certificate. This is a good choice if deploying + in an environment with a private internal certificate authority. + + @example +-qemu-system-i386 [...OPTIONS...] -vnc :1,tls,x509verify=/etc/pki/qemu -monitor stdio ++qemu-kvm [...OPTIONS...] -vnc :1,tls,x509verify=/etc/pki/qemu -monitor stdio + @end example + + +@@ -1489,7 +1489,7 @@ Finally, the previous method can be combined with VNC password authentication + to provide two layers of authentication for clients. + + @example +-qemu-system-i386 [...OPTIONS...] -vnc :1,password,tls,x509verify=/etc/pki/qemu -monitor stdio ++qemu-kvm [...OPTIONS...] -vnc :1,password,tls,x509verify=/etc/pki/qemu -monitor stdio + (qemu) change vnc password + Password: ******** + (qemu) +@@ -1512,7 +1512,7 @@ used for authentication, but assuming use of one supporting SSF, + then QEMU can be launched with: + + @example +-qemu-system-i386 [...OPTIONS...] -vnc :1,sasl -monitor stdio ++qemu-kvm [...OPTIONS...] -vnc :1,sasl -monitor stdio + @end example + + @node vnc_sec_certificate_sasl +@@ -1526,7 +1526,7 @@ credentials. This can be enabled, by combining the 'sasl' option + with the aforementioned TLS + x509 options: + + @example +-qemu-system-i386 [...OPTIONS...] -vnc :1,tls,x509,sasl -monitor stdio ++qemu-kvm [...OPTIONS...] -vnc :1,tls,x509,sasl -monitor stdio + @end example + + +@@ -1694,7 +1694,7 @@ QEMU has a primitive support to work with gdb, so that you can do + In order to use gdb, launch QEMU with the '-s' option. It will wait for a + gdb connection: + @example +-qemu-system-i386 -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \ ++qemu-kvm -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \ + -append "root=/dev/hda" + Connected to host network interface: tun0 + Waiting gdb connection on port 1234 +diff --git a/qemu-options.hx b/qemu-options.hx +index 5d0f2cd..62c3e06 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -124,7 +124,7 @@ This option defines a free-form string that can be used to describe @var{fd}. + + You can open an image using pre-opened file descriptors from an fd set: + @example +-qemu-system-i386 ++qemu-kvm + -add-fd fd=3,set=2,opaque="rdwr:/path/to/file" + -add-fd fd=4,set=2,opaque="rdonly:/path/to/file" + -drive file=/dev/fdset/2,index=0,media=disk +@@ -151,7 +151,7 @@ STEXI + Set default value of @var{driver}'s property @var{prop} to @var{value}, e.g.: + + @example +-qemu-system-i386 -global ide-drive.physical_block_size=4096 -drive file=file,if=ide,index=0,media=disk ++qemu-kvm -global ide-drive.physical_block_size=4096 -drive file=file,if=ide,index=0,media=disk + @end example + + In particular, you can use this to set driver properties for devices which are +@@ -189,7 +189,7 @@ the recommended is 320x240, 640x480, 800x640. + + A timeout could be passed to bios, guest will pause for @var{rb_timeout} ms + when boot failed, then reboot. If @var{rb_timeout} is '-1', guest will not +-reboot, qemu passes '-1' to bios by default. Currently Seabios for X86 ++reboot, qemu-kvm passes '-1' to bios by default. Currently Seabios for X86 + system support it. + + Do strict boot via @option{strict=on} as far as firmware/BIOS +@@ -198,11 +198,11 @@ bootindex options. The default is non-strict boot. + + @example + # try to boot from network first, then from hard disk +-qemu-system-i386 -boot order=nc ++qemu-kvm -boot order=nc + # boot from CD-ROM first, switch back to default order after reboot +-qemu-system-i386 -boot once=d ++qemu-kvm -boot once=d + # boot with a splash picture for 5 seconds. +-qemu-system-i386 -boot menu=on,splash=/root/boot.bmp,splash-time=5000 ++qemu-kvm -boot menu=on,splash=/root/boot.bmp,splash-time=5000 + @end example + + Note: The legacy format '-boot @var{drives}' is still supported but its +@@ -282,12 +282,12 @@ Enable audio and selected sound hardware. Use 'help' to print all + available sound hardware. + + @example +-qemu-system-i386 -soundhw sb16,adlib disk.img +-qemu-system-i386 -soundhw es1370 disk.img +-qemu-system-i386 -soundhw ac97 disk.img +-qemu-system-i386 -soundhw hda disk.img +-qemu-system-i386 -soundhw all disk.img +-qemu-system-i386 -soundhw help ++qemu-kvm -soundhw sb16,adlib disk.img ++qemu-kvm -soundhw es1370 disk.img ++qemu-kvm -soundhw ac97 disk.img ++qemu-kvm -soundhw hda disk.img ++qemu-kvm -soundhw all disk.img ++qemu-kvm -soundhw help + @end example + + Note that Linux's i810_audio OSS kernel (for AC97) module might +@@ -500,21 +500,21 @@ is off. + + Instead of @option{-cdrom} you can use: + @example +-qemu-system-i386 -drive file=file,index=2,media=cdrom ++qemu-kvm -drive file=file,index=2,media=cdrom + @end example + + Instead of @option{-hda}, @option{-hdb}, @option{-hdc}, @option{-hdd}, you can + use: + @example +-qemu-system-i386 -drive file=file,index=0,media=disk +-qemu-system-i386 -drive file=file,index=1,media=disk +-qemu-system-i386 -drive file=file,index=2,media=disk +-qemu-system-i386 -drive file=file,index=3,media=disk ++qemu-kvm -drive file=file,index=0,media=disk ++qemu-kvm -drive file=file,index=1,media=disk ++qemu-kvm -drive file=file,index=2,media=disk ++qemu-kvm -drive file=file,index=3,media=disk + @end example + + You can open an image using pre-opened file descriptors from an fd set: + @example +-qemu-system-i386 ++qemu-kvm + -add-fd fd=3,set=2,opaque="rdwr:/path/to/file" + -add-fd fd=4,set=2,opaque="rdonly:/path/to/file" + -drive file=/dev/fdset/2,index=0,media=disk +@@ -522,33 +522,33 @@ qemu-system-i386 + + You can connect a CDROM to the slave of ide0: + @example +-qemu-system-i386 -drive file=file,if=ide,index=1,media=cdrom ++qemu-kvm -drive file=file,if=ide,index=1,media=cdrom + @end example + + If you don't specify the "file=" argument, you define an empty drive: + @example +-qemu-system-i386 -drive if=ide,index=1,media=cdrom ++qemu-kvm -drive if=ide,index=1,media=cdrom + @end example + + You can connect a SCSI disk with unit ID 6 on the bus #0: + @example +-qemu-system-i386 -drive file=file,if=scsi,bus=0,unit=6 ++qemu-kvm -drive file=file,if=scsi,bus=0,unit=6 + @end example + + Instead of @option{-fda}, @option{-fdb}, you can use: + @example +-qemu-system-i386 -drive file=file,index=0,if=floppy +-qemu-system-i386 -drive file=file,index=1,if=floppy ++qemu-kvm -drive file=file,index=0,if=floppy ++qemu-kvm -drive file=file,index=1,if=floppy + @end example + + By default, @var{interface} is "ide" and @var{index} is automatically + incremented: + @example +-qemu-system-i386 -drive file=a -drive file=b" ++qemu-kvm -drive file=a -drive file=b" + @end example + is interpreted like: + @example +-qemu-system-i386 -hda a -hdb b ++qemu-kvm -hda a -hdb b + @end example + ETEXI + +@@ -1477,7 +1477,7 @@ can not be resolved. + + Example: + @example +-qemu -net user,dnssearch=mgmt.example.org,dnssearch=example.org [...] ++qemu-kvm -net user,dnssearch=mgmt.example.org,dnssearch=example.org [...] + @end example + + @item tftp=@var{dir} +@@ -1493,7 +1493,7 @@ a guest from a local directory. + + Example (using pxelinux): + @example +-qemu-system-i386 -hda linux.img -boot n -net user,tftp=/path/to/tftp/files,bootfile=/pxelinux.0 ++qemu-kvm -hda linux.img -boot n -net user,tftp=/path/to/tftp/files,bootfile=/pxelinux.0 + @end example + + @item smb=@var{dir}[,smbserver=@var{addr}] +@@ -1528,7 +1528,7 @@ screen 0, use the following: + + @example + # on the host +-qemu-system-i386 -net user,hostfwd=tcp:127.0.0.1:6001-:6000 [...] ++qemu-kvm -net user,hostfwd=tcp:127.0.0.1:6001-:6000 [...] + # this host xterm should open in the guest X11 server + xterm -display :1 + @end example +@@ -1538,7 +1538,7 @@ the guest, use the following: + + @example + # on the host +-qemu-system-i386 -net user,hostfwd=tcp::5555-:23 [...] ++qemu-kvm -net user,hostfwd=tcp::5555-:23 [...] + telnet localhost 5555 + @end example + +@@ -1557,7 +1557,7 @@ lifetime, like in the following example: + @example + # open 10.10.1.1:4321 on bootup, connect 10.0.2.100:1234 to it whenever + # the guest accesses it +-qemu -net user,guestfwd=tcp:10.0.2.100:1234-tcp:10.10.1.1:4321 [...] ++qemu-kvm -net user,guestfwd=tcp:10.0.2.100:1234-tcp:10.10.1.1:4321 [...] + @end example + + Or you can execute a command on every TCP connection established by the guest, +@@ -1566,7 +1566,7 @@ so that QEMU behaves similar to an inetd process for that virtual server: + @example + # call "netcat 10.10.1.1 4321" on every TCP connection to 10.0.2.100:1234 + # and connect the TCP stream to its stdin/stdout +-qemu -net 'user,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321' ++qemu-kvm -net 'user,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321' + @end example + + @end table +@@ -1598,13 +1598,13 @@ Examples: + + @example + #launch a QEMU instance with the default network script +-qemu-system-i386 linux.img -net nic -net tap ++qemu-kvm linux.img -net nic -net tap + @end example + + @example + #launch a QEMU instance with two NICs, each one connected + #to a TAP device +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \ + -net nic,vlan=1 -net tap,vlan=1,ifname=tap1 + @end example +@@ -1612,7 +1612,7 @@ qemu-system-i386 linux.img \ + @example + #launch a QEMU instance with the default network helper to + #connect a TAP device to bridge br0 +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic -net tap,"helper=/path/to/qemu-bridge-helper" + @end example + +@@ -1630,13 +1630,13 @@ Examples: + @example + #launch a QEMU instance with the default network helper to + #connect a TAP device to bridge br0 +-qemu-system-i386 linux.img -net bridge -net nic,model=virtio ++qemu-kvm linux.img -net bridge -net nic,model=virtio + @end example + + @example + #launch a QEMU instance with the default network helper to + #connect a TAP device to bridge qemubr0 +-qemu-system-i386 linux.img -net bridge,br=qemubr0 -net nic,model=virtio ++qemu-kvm linux.img -net bridge,br=qemubr0 -net nic,model=virtio + @end example + + @item -netdev socket,id=@var{id}[,fd=@var{h}][,listen=[@var{host}]:@var{port}][,connect=@var{host}:@var{port}] +@@ -1652,12 +1652,12 @@ specifies an already opened TCP socket. + Example: + @example + # launch a first QEMU instance +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:56 \ + -net socket,listen=:1234 + # connect the VLAN 0 of this instance to the VLAN 0 + # of the first instance +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:57 \ + -net socket,connect=127.0.0.1:1234 + @end example +@@ -1683,15 +1683,15 @@ Use @option{fd=h} to specify an already opened UDP multicast socket. + Example: + @example + # launch one QEMU instance +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:56 \ + -net socket,mcast=230.0.0.1:1234 + # launch another QEMU instance on same "bus" +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:57 \ + -net socket,mcast=230.0.0.1:1234 + # launch yet another QEMU instance on same "bus" +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:58 \ + -net socket,mcast=230.0.0.1:1234 + @end example +@@ -1700,7 +1700,7 @@ Example (User Mode Linux compat.): + @example + # launch QEMU instance (note mcast address selected + # is UML's default) +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:56 \ + -net socket,mcast=239.192.168.1:1102 + # launch UML +@@ -1709,7 +1709,7 @@ qemu-system-i386 linux.img \ + + Example (send packets from host's 1.2.3.4): + @example +-qemu-system-i386 linux.img \ ++qemu-kvm linux.img \ + -net nic,macaddr=52:54:00:12:34:56 \ + -net socket,mcast=239.192.168.1:1102,localaddr=1.2.3.4 + @end example +@@ -1727,7 +1727,7 @@ Example: + # launch vde switch + vde_switch -F -sock /tmp/myswitch + # launch QEMU instance +-qemu-system-i386 linux.img -net nic -net vde,sock=/tmp/myswitch ++qemu-kvm linux.img -net nic -net vde,sock=/tmp/myswitch + @end example + + @item -netdev hubport,id=@var{id},hubid=@var{hubid} +@@ -2043,28 +2043,28 @@ images for the guest storage. Both disk and cdrom images are supported. + Syntax for specifying iSCSI LUNs is + ``iscsi://[:]//'' + +-By default qemu will use the iSCSI initiator-name ++By default qemu-kvm will use the iSCSI initiator-name + 'iqn.2008-11.org.linux-kvm[:]' but this can also be set from the command + line or a configuration file. + + + Example (without authentication): + @example +-qemu-system-i386 -iscsi initiator-name=iqn.2001-04.com.example:my-initiator \ ++qemu-kvm -iscsi initiator-name=iqn.2001-04.com.example:my-initiator \ + -cdrom iscsi://192.0.2.1/iqn.2001-04.com.example/2 \ + -drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1 + @end example + + Example (CHAP username/password via URL): + @example +-qemu-system-i386 -drive file=iscsi://user%password@@192.0.2.1/iqn.2001-04.com.example/1 ++qemu-kvm -drive file=iscsi://user%password@@192.0.2.1/iqn.2001-04.com.example/1 + @end example + + Example (CHAP username/password via environment variables): + @example + LIBISCSI_CHAP_USERNAME="user" \ + LIBISCSI_CHAP_PASSWORD="password" \ +-qemu-system-i386 -drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1 ++qemu-kvm -drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1 + @end example + + iSCSI support is an optional feature of QEMU and only available when +@@ -2093,12 +2093,12 @@ Syntax for specifying a NBD device using Unix Domain Sockets + + Example for TCP + @example +-qemu-system-i386 --drive file=nbd:192.0.2.1:30000 ++qemu-kvm --drive file=nbd:192.0.2.1:30000 + @end example + + Example for Unix Domain Sockets + @example +-qemu-system-i386 --drive file=nbd:unix:/tmp/nbd-socket ++qemu-kvm --drive file=nbd:unix:/tmp/nbd-socket + @end example + + @item SSH +@@ -2106,8 +2106,8 @@ QEMU supports SSH (Secure Shell) access to remote disks. + + Examples: + @example +-qemu-system-i386 -drive file=ssh://user@@host/path/to/disk.img +-qemu-system-i386 -drive file.driver=ssh,file.user=user,file.host=host,file.port=22,file.path=/path/to/disk.img ++qemu-kvm -drive file=ssh://user@@host/path/to/disk.img ++qemu-kvm -drive file.driver=ssh,file.user=user,file.host=host,file.port=22,file.path=/path/to/disk.img + @end example + + Currently authentication must be done using ssh-agent. Other +@@ -2125,7 +2125,7 @@ sheepdog[+tcp|+unix]://[host:port]/vdiname[?socket=path][#snapid|#tag] + + Example + @example +-qemu-system-i386 --drive file=sheepdog://192.0.2.1:30000/MyVirtualMachine ++qemu-kvm --drive file=sheepdog://192.0.2.1:30000/MyVirtualMachine + @end example + + See also @url{http://http://www.osrg.net/sheepdog/}. +@@ -2143,7 +2143,7 @@ gluster[+transport]://[server[:port]]/volname/image[?socket=...] + + Example + @example +-qemu-system-x86_64 --drive file=gluster://192.0.2.1/testvol/a.img ++qemu-kvm --drive file=gluster://192.0.2.1/testvol/a.img + @end example + + See also @url{http://www.gluster.org}. +@@ -2209,7 +2209,7 @@ and communicate. Requires the Linux @code{vhci} driver installed. Can + be used as following: + + @example +-qemu-system-i386 [...OPTIONS...] -bt hci,vlan=5 -bt vhci,vlan=5 ++qemu-kvm [...OPTIONS...] -bt hci,vlan=5 -bt vhci,vlan=5 + @end example + + @item -bt device:@var{dev}[,vlan=@var{n}] +@@ -2255,7 +2255,7 @@ Options to each backend are described below. + + Use 'help' to print all available TPM backend types. + @example +-qemu -tpmdev help ++qemu-kvm -tpmdev help + @end example + + @item -tpmdev passthrough, id=@var{id}, path=@var{path}, cancel-path=@var{cancel-path} +@@ -2579,14 +2579,14 @@ ETEXI + + DEF("realtime", HAS_ARG, QEMU_OPTION_realtime, + "-realtime [mlock=on|off]\n" +- " run qemu with realtime features\n" ++ " run qemu-kvm with realtime features\n" + " mlock=on|off controls mlock support (default: on)\n", + QEMU_ARCH_ALL) + STEXI + @item -realtime mlock=on|off + @findex -realtime +-Run qemu with realtime features. +-mlocking qemu and guest memory can be enabled via @option{mlock=on} ++Run qemu-kvm with realtime features. ++mlocking qemu-kvm and guest memory can be enabled via @option{mlock=on} + (enabled by default). + ETEXI + +@@ -2600,7 +2600,7 @@ connections will likely be TCP-based, but also UDP, pseudo TTY, or even + stdio are reasonable use case. The latter is allowing to start QEMU from + within gdb and establish the connection via a pipe: + @example +-(gdb) target remote | exec qemu-system-i386 -gdb stdio ... ++(gdb) target remote | exec qemu-kvm -gdb stdio ... + @end example + ETEXI + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Using-ip_deq-after-m_free-might-read-pointers-from-a.patch b/SOURCES/kvm-Using-ip_deq-after-m_free-might-read-pointers-from-a.patch new file mode 100644 index 0000000..865a91e --- /dev/null +++ b/SOURCES/kvm-Using-ip_deq-after-m_free-might-read-pointers-from-a.patch @@ -0,0 +1,61 @@ +From 90b1929638fb5fed4e5fc65f95b7a76e339e0640 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= +Date: Mon, 9 Sep 2019 09:13:33 +0200 +Subject: [PATCH 01/12] Using ip_deq after m_free might read pointers from an + allocation reuse. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Philippe Mathieu-Daudé +Message-id: <20190909091333.18511-2-philmd@redhat.com> +Patchwork-id: 90336 +O-Subject: [RHEL-7.8 qemu-kvm PATCH 1/1] Using ip_deq after m_free might read pointers from an allocation reuse. +Bugzilla: 1749735 +RH-Acked-by: John Snow +RH-Acked-by: Stefano Garzarella +RH-Acked-by: Thomas Huth + +From: Samuel Thibault + +This would be difficult to exploit, but that is still related with +CVE-2019-14378 which generates fragmented IP packets that would trigger this +issue and at least produce a DoS. + +Signed-off-by: Samuel Thibault +(cherry picked from libslirp commit c59279437eda91841b9d26079c70b8a540d41204) +Signed-off-by: Philippe Mathieu-Daudé + +Signed-off-by: Miroslav Rezanina +--- + slirp/ip_input.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/slirp/ip_input.c b/slirp/ip_input.c +index 5226224..9e95b40 100644 +--- a/slirp/ip_input.c ++++ b/slirp/ip_input.c +@@ -296,6 +296,7 @@ ip_reass(Slirp *slirp, struct ip *ip, struct ipq *fp) + */ + while (q != (struct ipasfrag*)&fp->frag_link && + ip->ip_off + ip->ip_len > q->ipf_off) { ++ struct ipasfrag *prev; + i = (ip->ip_off + ip->ip_len) - q->ipf_off; + if (i < q->ipf_len) { + q->ipf_len -= i; +@@ -303,9 +304,10 @@ ip_reass(Slirp *slirp, struct ip *ip, struct ipq *fp) + m_adj(dtom(slirp, q), i); + break; + } ++ prev = q; + q = q->ipf_next; +- m_free(dtom(slirp, q->ipf_prev)); +- ip_deq(q->ipf_prev); ++ ip_deq(prev); ++ m_free(dtom(slirp, prev)); + } + + insert: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-Workaround-rhel6-ctrl_guest_offloads-machine-type-mi.patch b/SOURCES/kvm-Workaround-rhel6-ctrl_guest_offloads-machine-type-mi.patch new file mode 100644 index 0000000..6475561 --- /dev/null +++ b/SOURCES/kvm-Workaround-rhel6-ctrl_guest_offloads-machine-type-mi.patch @@ -0,0 +1,146 @@ +From aa757665c90914e69db3f16b11753c6d936b9bf0 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Thu, 17 Aug 2017 09:45:36 +0200 +Subject: [PATCH 3/4] Workaround rhel6 ctrl_guest_offloads machine type + mismatch + +RH-Author: Dr. David Alan Gilbert +Message-id: <20170817094536.12740-3-dgilbert@redhat.com> +Patchwork-id: 76022 +O-Subject: [RHEL-7.5/7.4.z/7.3.z/7.2.z qemu-kvm PATCH v2 2/2] Workaround rhel6 ctrl_guest_offloads machine type mismatch +Bugzilla: 1480428 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +From: "Dr. David Alan Gilbert" + +RHEL6's 6.5 and 6.6 machine types enable the ctrl_guest_offloads +feature on virtio-net-pci, unfortunately RHEL7's definition of the +6.5 and 6.6 machine types are missing that flag. + +This works around it by allowing an incoming migration with the +guest flag set (for the bad machine types). + +Fixing the machine type definitions would break migration from this +version to an earlier 7.x. + +Note: Restarting the VM after this import will still keep the old +(broken) machine type and turn the feature off. + +(cherry picked from commit 73fe1f6ffd03f49f4be4b0482fdd2611aa9a17ca) + + Heavy conflicts from backport, mostly around structure + of properties + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 9 +++++++++ + hw/virtio/virtio.c | 26 +++++++++++++++++++++++++- + include/hw/virtio/virtio.h | 1 + + 3 files changed, 35 insertions(+), 1 deletion(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index f4cf2b5..b043124 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -908,8 +908,13 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "virtio-net-pci",\ + .property = "any_layout",\ + .value = "off",\ ++ },{\ ++ .driver = "virtio-net-device",\ ++ .property = "__com.redhat_rhel6_ctrl_guest_workaround", \ ++ .value = "on",\ + } + ++ + static void pc_compat_rhel660(QEMUMachineInitArgs *args) + { + pc_compat_rhel700(args); +@@ -1031,6 +1036,10 @@ static QEMUMachine pc_machine_rhel650 = { + .driver = "virtio-net-pci",\ + .property = "ctrl_mac_addr",\ + .value = "off",\ ++ },{\ ++ .driver = "virtio-net-device",\ ++ .property = "__com.redhat_rhel6_ctrl_guest_workaround", \ ++ .value = "off",\ + } + + static void pc_compat_rhel640(QEMUMachineInitArgs *args) +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index fe6b032..e3af5ae 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -18,6 +18,7 @@ + #include "hw/virtio/virtio.h" + #include "qemu/atomic.h" + #include "hw/virtio/virtio-bus.h" ++#include "include/hw/virtio/virtio-net.h" + + /* The alignment to use between consumer and producer parts of vring. + * x86 pagesize again. */ +@@ -888,8 +889,24 @@ int virtio_set_features(VirtIODevice *vdev, uint32_t val) + VirtioBusClass *vbusk = VIRTIO_BUS_GET_CLASS(qbus); + VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); + uint32_t supported_features = vbusk->get_features(qbus->parent); +- bool bad = (val & ~supported_features) != 0; ++ bool bad; ++ uint64_t ctrl_guest_mask = 1ull << VIRTIO_NET_F_CTRL_GUEST_OFFLOADS; ++ ++ if (vdev->rhel6_ctrl_guest_workaround && (val & ctrl_guest_mask) && ++ !(supported_features & ctrl_guest_mask)) { ++ /* ++ * This works around a mistake in the definition of the rhel6.[56].0 ++ * machinetypes, ctrl-guest-offload was not set in qemu-kvm for ++ * those machine types, but is set on the rhel6 qemu-kvm-rhev build. ++ * If an incoming rhel6 guest uses it then we need to allow it. ++ * Note: There's a small race where a guest read the flag but didn't ++ * declare it's useage yet. ++ */ ++ fprintf(stderr, "RHEL6 ctrl_guest_offload workaround\n"); ++ supported_features |= ctrl_guest_mask; ++ } + ++ bad = (val & ~supported_features) != 0; + val &= supported_features; + if (k->set_features) { + k->set_features(vdev, val); +@@ -1223,6 +1240,12 @@ static int virtio_device_exit(DeviceState *qdev) + return 0; + } + ++static Property virtio_properties[] = { ++ DEFINE_PROP_BOOL("__com.redhat_rhel6_ctrl_guest_workaround", VirtIODevice, ++ rhel6_ctrl_guest_workaround, false), ++ DEFINE_PROP_END_OF_LIST(), ++}; ++ + static void virtio_device_class_init(ObjectClass *klass, void *data) + { + /* Set the default value here. */ +@@ -1230,6 +1253,7 @@ static void virtio_device_class_init(ObjectClass *klass, void *data) + dc->init = virtio_device_init; + dc->exit = virtio_device_exit; + dc->bus_type = TYPE_VIRTIO_BUS; ++ dc->props = virtio_properties; + } + + static const TypeInfo virtio_device_info = { +diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h +index d9bfe4c..0c4e963 100644 +--- a/include/hw/virtio/virtio.h ++++ b/include/hw/virtio/virtio.h +@@ -121,6 +121,7 @@ struct VirtIODevice + bool vm_running; + VMChangeStateEntry *vmstate; + char *bus_name; ++ bool rhel6_ctrl_guest_workaround; + }; + + typedef struct VirtioDeviceClass { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-XBZRLE-Fix-one-XBZRLE-corruption-issues.patch b/SOURCES/kvm-XBZRLE-Fix-one-XBZRLE-corruption-issues.patch new file mode 100644 index 0000000..2bba0d7 --- /dev/null +++ b/SOURCES/kvm-XBZRLE-Fix-one-XBZRLE-corruption-issues.patch @@ -0,0 +1,106 @@ +From c66cd34696f1f7f04b367a5f8b4d79802cddafb4 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 8 May 2014 10:58:42 +0200 +Subject: [PATCH 07/31] XBZRLE: Fix one XBZRLE corruption issues + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1399546722-6350-5-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58744 +O-Subject: [RHEL7.1/RHEL7.0.z qemu-kvm PATCH 4/4] XBZRLE: Fix one XBZRLE corruption issues +Bugzilla: 1066338 +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster +RH-Acked-by: Amit Shah + +From: ChenLiang + +The page may not be inserted into cache after executing save_xbzrle_page. +In case of failure to insert, the original page should be sent rather +than the page in the cache. + +Signed-off-by: ChenLiang +Signed-off-by: Gonglei +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 1534ee93cc6be992c05577886b24bd44c37ecff6) +--- + arch_init.c | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 25 +++++++++++++------------ + 1 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 80e48f2..22f7def 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -341,7 +341,7 @@ static void xbzrle_cache_zero_page(ram_addr_t current_addr) + + #define ENCODING_FLAG_XBZRLE 0x1 + +-static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data, ++static int save_xbzrle_page(QEMUFile *f, uint8_t **current_data, + ram_addr_t current_addr, RAMBlock *block, + ram_addr_t offset, int cont, bool last_stage) + { +@@ -349,19 +349,23 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data, + uint8_t *prev_cached_page; + + if (!cache_is_cached(XBZRLE.cache, current_addr)) { ++ acct_info.xbzrle_cache_miss++; + if (!last_stage) { +- if (cache_insert(XBZRLE.cache, current_addr, current_data) == -1) { ++ if (cache_insert(XBZRLE.cache, current_addr, *current_data) == -1) { + return -1; ++ } else { ++ /* update *current_data when the page has been ++ inserted into cache */ ++ *current_data = get_cached_data(XBZRLE.cache, current_addr); + } + } +- acct_info.xbzrle_cache_miss++; + return -1; + } + + prev_cached_page = get_cached_data(XBZRLE.cache, current_addr); + + /* save current buffer into memory */ +- memcpy(XBZRLE.current_buf, current_data, TARGET_PAGE_SIZE); ++ memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE); + + /* XBZRLE encoding (if there is no overflow) */ + encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf, +@@ -374,7 +378,10 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data, + DPRINTF("Overflow\n"); + acct_info.xbzrle_overflows++; + /* update data in the cache */ +- memcpy(prev_cached_page, current_data, TARGET_PAGE_SIZE); ++ if (!last_stage) { ++ memcpy(prev_cached_page, *current_data, TARGET_PAGE_SIZE); ++ *current_data = prev_cached_page; ++ } + return -1; + } + +@@ -599,15 +606,9 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + */ + xbzrle_cache_zero_page(current_addr); + } else if (!ram_bulk_stage && migrate_use_xbzrle()) { +- bytes_sent = save_xbzrle_page(f, p, current_addr, block, ++ bytes_sent = save_xbzrle_page(f, &p, current_addr, block, + offset, cont, last_stage); + if (!last_stage) { +- /* We must send exactly what's in the xbzrle cache +- * even if the page wasn't xbzrle compressed, so that +- * it's right next time. +- */ +- p = get_cached_data(XBZRLE.cache, current_addr); +- + /* Can't send this cached data async, since the cache page + * might get updated before it gets to the wire + */ +-- +1.7.1 + diff --git a/SOURCES/kvm-XBZRLE-Fix-qemu-crash-when-resize-the-xbzrle-cache.patch b/SOURCES/kvm-XBZRLE-Fix-qemu-crash-when-resize-the-xbzrle-cache.patch new file mode 100644 index 0000000..8f1c81d --- /dev/null +++ b/SOURCES/kvm-XBZRLE-Fix-qemu-crash-when-resize-the-xbzrle-cache.patch @@ -0,0 +1,158 @@ +From 600b6421fd97881aad2471ea0a6f465a2d55e9d6 Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Thu, 8 May 2014 10:58:39 +0200 +Subject: [PATCH 04/31] XBZRLE: Fix qemu crash when resize the xbzrle cache + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1399546722-6350-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58741 +O-Subject: [RHEL7.1/RHEL7.0.z qemu-kvm PATCH 1/4] XBZRLE: Fix qemu crash when resize the xbzrle cache +Bugzilla: 1066338 +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster +RH-Acked-by: Amit Shah + +From: Gonglei + +Resizing the xbzrle cache during migration causes qemu-crash, +because the main-thread and migration-thread modify the xbzrle +cache size concurrently without lock-protection. + +Signed-off-by: ChenLiang +Signed-off-by: Gonglei +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit fd8cec932c2ddc687e2da954978954b46a926f90) +--- + arch_init.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 49 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 files changed, 49 insertions(+), 3 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index f5d521a..8641afa 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -164,8 +164,9 @@ static struct { + uint8_t *encoded_buf; + /* buffer for storing page content */ + uint8_t *current_buf; +- /* Cache for XBZRLE */ ++ /* Cache for XBZRLE, Protected by lock. */ + PageCache *cache; ++ QemuMutex lock; + } XBZRLE = { + .encoded_buf = NULL, + .current_buf = NULL, +@@ -174,16 +175,52 @@ static struct { + /* buffer used for XBZRLE decoding */ + static uint8_t *xbzrle_decoded_buf; + ++static void XBZRLE_cache_lock(void) ++{ ++ if (migrate_use_xbzrle()) ++ qemu_mutex_lock(&XBZRLE.lock); ++} ++ ++static void XBZRLE_cache_unlock(void) ++{ ++ if (migrate_use_xbzrle()) ++ qemu_mutex_unlock(&XBZRLE.lock); ++} ++ + int64_t xbzrle_cache_resize(int64_t new_size) + { ++ PageCache *new_cache, *cache_to_free; ++ + if (new_size < TARGET_PAGE_SIZE) { + return -1; + } + ++ /* no need to lock, the current thread holds qemu big lock */ + if (XBZRLE.cache != NULL) { +- return cache_resize(XBZRLE.cache, new_size / TARGET_PAGE_SIZE) * +- TARGET_PAGE_SIZE; ++ /* check XBZRLE.cache again later */ ++ if (pow2floor(new_size) == migrate_xbzrle_cache_size()) { ++ return pow2floor(new_size); ++ } ++ new_cache = cache_init(new_size / TARGET_PAGE_SIZE, ++ TARGET_PAGE_SIZE); ++ if (!new_cache) { ++ DPRINTF("Error creating cache\n"); ++ return -1; ++ } ++ ++ XBZRLE_cache_lock(); ++ /* the XBZRLE.cache may have be destroyed, check it again */ ++ if (XBZRLE.cache != NULL) { ++ cache_to_free = XBZRLE.cache; ++ XBZRLE.cache = new_cache; ++ } else { ++ cache_to_free = new_cache; ++ } ++ XBZRLE_cache_unlock(); ++ ++ cache_fini(cache_to_free); + } ++ + return pow2floor(new_size); + } + +@@ -539,6 +576,8 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + ret = ram_control_save_page(f, block->offset, + offset, TARGET_PAGE_SIZE, &bytes_sent); + ++ XBZRLE_cache_lock(); ++ + current_addr = block->offset + offset; + if (ret != RAM_SAVE_CONTROL_NOT_SUPP) { + if (ret != RAM_SAVE_CONTROL_DELAYED) { +@@ -587,6 +626,7 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + acct_info.norm_pages++; + } + ++ XBZRLE_cache_unlock(); + /* if page is unmodified, continue to the next */ + if (bytes_sent > 0) { + last_sent_block = block; +@@ -654,6 +694,7 @@ static void migration_end(void) + migration_bitmap = NULL; + } + ++ XBZRLE_cache_lock(); + if (XBZRLE.cache) { + cache_fini(XBZRLE.cache); + g_free(XBZRLE.cache); +@@ -663,6 +704,7 @@ static void migration_end(void) + XBZRLE.encoded_buf = NULL; + XBZRLE.current_buf = NULL; + } ++ XBZRLE_cache_unlock(); + } + + static void ram_migration_cancel(void *opaque) +@@ -693,13 +735,17 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + dirty_rate_high_cnt = 0; + + if (migrate_use_xbzrle()) { ++ qemu_mutex_lock_iothread(); + XBZRLE.cache = cache_init(migrate_xbzrle_cache_size() / + TARGET_PAGE_SIZE, + TARGET_PAGE_SIZE); + if (!XBZRLE.cache) { ++ qemu_mutex_unlock_iothread(); + DPRINTF("Error creating cache\n"); + return -1; + } ++ qemu_mutex_init(&XBZRLE.lock); ++ qemu_mutex_unlock_iothread(); + + /* We prefer not to abort if there is no memory */ + XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE); +-- +1.7.1 + diff --git a/SOURCES/kvm-XBZRLE-cache-size-should-not-be-larger-than-guest-me.patch b/SOURCES/kvm-XBZRLE-cache-size-should-not-be-larger-than-guest-me.patch new file mode 100644 index 0000000..27912e1 --- /dev/null +++ b/SOURCES/kvm-XBZRLE-cache-size-should-not-be-larger-than-guest-me.patch @@ -0,0 +1,48 @@ +From 34974722fc54eb326f5af4153dfa7f73dd7f4d70 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 11 Feb 2014 15:32:35 +0100 +Subject: [PATCH 14/28] XBZRLE cache size should not be larger than guest memory size + +RH-Author: Orit Wasserman +Message-id: <1392132757-18587-2-git-send-email-owasserm@redhat.com> +Patchwork-id: 57209 +O-Subject: [RHEL7 qemu-kvm PATCH 1/3] XBZRLE cache size should not be larger than guest memory size +Bugzilla: 1047448 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Orit Wasserman +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit a5615b14a66e86f620e90c8f4b3537c28bb328d4) +--- + migration.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/migration.c b/migration.c +index 6487fe2..b6de990 100644 +--- a/migration.c ++++ b/migration.c +@@ -483,6 +483,13 @@ void qmp_migrate_set_cache_size(int64_t value, Error **errp) + return; + } + ++ /* Cache should not be larger than guest ram size */ ++ if (value > ram_bytes_total()) { ++ error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", ++ "exceeds guest ram size "); ++ return; ++ } ++ + new_size = xbzrle_cache_resize(value); + if (new_size < 0) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", +-- +1.7.1 + diff --git a/SOURCES/kvm-__com.redhat_qxl_screendump-add-docs.patch b/SOURCES/kvm-__com.redhat_qxl_screendump-add-docs.patch new file mode 100644 index 0000000..4a0bb22 --- /dev/null +++ b/SOURCES/kvm-__com.redhat_qxl_screendump-add-docs.patch @@ -0,0 +1,100 @@ +From faf00a8c4d41c4927d8f296288b8fb5e80b1292c Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 11 Dec 2013 09:36:11 +0100 +Subject: [PATCH 02/16] __com.redhat_qxl_screendump: add docs + +RH-Author: Gerd Hoffmann +Message-id: <1386754571-21520-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56149 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] __com.redhat_qxl_screendump: add docs +Bugzilla: 903910 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Orit Wasserman +RH-Acked-by: Juan Quintela + +$subject says all. +Patch by armbru, thanks. + +Signed-off-by: Gerd Hoffmann +--- + hmp-commands.hx | 13 ++++++++++--- + qmp-commands.hx | 19 ++++++++++++++----- + 2 files changed, 24 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 13 ++++++++++--- + qmp-commands.hx | 19 ++++++++++++++----- + 2 files changed, 24 insertions(+), 8 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index bfb565b..8e08ebf 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -243,6 +243,13 @@ ETEXI + .help = "save screen into PPM image 'filename'", + .mhandler.cmd = hmp_screen_dump, + }, ++ ++STEXI ++@item screendump @var{filename} ++@findex screendump ++Save screen into PPM image @var{filename}. ++ETEXI ++ + { + .name = "__com.redhat_qxl_screendump", + .args_type = "id:s,filename:F", +@@ -252,9 +259,9 @@ ETEXI + }, + + STEXI +-@item screendump @var{filename} +-@findex screendump +-Save screen into PPM image @var{filename}. ++@item __com.redhat_screendump @var{id} @var{filename} ++@findex __com.redhat_screendump ++Save screen from qxl device @var{id} into PPM image @var{filename}. + ETEXI + + { +diff --git a/qmp-commands.hx b/qmp-commands.hx +index f6fae33..7a1bfd4 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -231,11 +231,6 @@ EQMP + .args_type = "filename:F", + .mhandler.cmd_new = qmp_marshal_input_screendump, + }, +- { +- .name = "__com.redhat_qxl_screendump", +- .args_type = "id:s,filename:F", +- .mhandler.cmd_new = qmp_marshal_input___com_redhat_qxl_screendump, +- }, + + SQMP + screendump +@@ -255,6 +250,20 @@ Example: + EQMP + + { ++ .name = "__com.redhat_qxl_screendump", ++ .args_type = "id:s,filename:F", ++ .mhandler.cmd_new = qmp_marshal_input___com_redhat_qxl_screendump, ++ }, ++ ++SQMP ++__com.redhat_qxl_screendump ++--------------------------- ++ ++Save screen from qxl device @var{id} into PPM image @var{filename}. ++ ++EQMP ++ ++ { + .name = "stop", + .args_type = "", + .mhandler.cmd_new = qmp_marshal_input_stop, +-- +1.7.1 + diff --git a/SOURCES/kvm-ac97-register-reset-via-qom.patch b/SOURCES/kvm-ac97-register-reset-via-qom.patch new file mode 100644 index 0000000..f4b8424 --- /dev/null +++ b/SOURCES/kvm-ac97-register-reset-via-qom.patch @@ -0,0 +1,60 @@ +From ce4b6f19e7e027480606076804cc6da2cccf99ba Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Oct 2014 11:45:22 +0100 +Subject: [PATCH 14/19] ac97: register reset via qom + +Message-id: <1414410322-25041-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 61905 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] ac97: register reset via qom +Bugzilla: 1141667 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Amos Kong + +So it gets properly unregistered on hot-unplug. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 133771477c39f3716d9a85609aca0d3e5a77c55c) +Signed-off-by: Miroslav Rezanina +--- + hw/audio/ac97.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c +index 8455a96..7f6763f 100644 +--- a/hw/audio/ac97.c ++++ b/hw/audio/ac97.c +@@ -1323,9 +1323,9 @@ static const MemoryRegionOps ac97_io_nabm_ops = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static void ac97_on_reset (void *opaque) ++static void ac97_on_reset (DeviceState *dev) + { +- AC97LinkState *s = opaque; ++ AC97LinkState *s = container_of(dev, AC97LinkState, dev.qdev); + + reset_bm_regs (s, &s->bm_regs[0]); + reset_bm_regs (s, &s->bm_regs[1]); +@@ -1382,9 +1382,8 @@ static int ac97_initfn (PCIDevice *dev) + memory_region_init_io (&s->io_nabm, &ac97_io_nabm_ops, s, "ac97-nabm", 256); + pci_register_bar (&s->dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &s->io_nam); + pci_register_bar (&s->dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->io_nabm); +- qemu_register_reset (ac97_on_reset, s); + AUD_register_card ("ac97", &s->card); +- ac97_on_reset (s); ++ ac97_on_reset (&s->dev.qdev); + return 0; + } + +@@ -1422,6 +1421,7 @@ static void ac97_class_init (ObjectClass *klass, void *data) + dc->desc = "Intel 82801AA AC97 Audio"; + dc->vmsd = &vmstate_ac97; + dc->props = ac97_properties; ++ dc->reset = ac97_on_reset; + } + + static const TypeInfo ac97_info = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-acpi-Fix-PCI-hole-handling-on-build_srat.patch b/SOURCES/kvm-acpi-Fix-PCI-hole-handling-on-build_srat.patch new file mode 100644 index 0000000..1f3368b --- /dev/null +++ b/SOURCES/kvm-acpi-Fix-PCI-hole-handling-on-build_srat.patch @@ -0,0 +1,68 @@ +From fc20209d16cb8ce59b20f3e9b98f99044b8bebaa Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 11 Feb 2014 14:03:48 +0100 +Subject: [PATCH 12/28] acpi: Fix PCI hole handling on build_srat() + +RH-Author: Eduardo Habkost +Message-id: <1392127428-9286-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 57205 +O-Subject: [PATCH 2/2] acpi: Fix PCI hole handling on build_srat() +Bugzilla: 1048080 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1048080 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7027865 + +The original SeaBIOS code used the RamSize variable, that was used by +SeaBIOS for the size of RAM below 4GB, not for all RAM. When copied to +QEMU, the code was changed to use the full RAM size, and this broke the +build_srat() code that handles the PCI hole. + +Change build_srat() to use ram_size_below_4g instead of ram_size, to +restore the original behavior from SeaBIOS. + +Signed-off-by: Eduardo Habkost +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 4c8a949b2416158a311abefc09a20153aa107e93) +Signed-off-by: Eduardo Habkost +--- + hw/i386/acpi-build.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/acpi-build.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index befc39f..33012c9 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -867,16 +867,16 @@ build_srat(GArray *table_data, GArray *linker, + next_base = mem_base + mem_len; + + /* Cut out the ACPI_PCI hole */ +- if (mem_base <= guest_info->ram_size && +- next_base > guest_info->ram_size) { +- mem_len -= next_base - guest_info->ram_size; ++ if (mem_base <= guest_info->ram_size_below_4g && ++ next_base > guest_info->ram_size_below_4g) { ++ mem_len -= next_base - guest_info->ram_size_below_4g; + if (mem_len > 0) { + numamem = acpi_data_push(table_data, sizeof *numamem); + acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1); + } + mem_base = 1ULL << 32; +- mem_len = next_base - guest_info->ram_size; +- next_base += (1ULL << 32) - guest_info->ram_size; ++ mem_len = next_base - guest_info->ram_size_below_4g; ++ next_base += (1ULL << 32) - guest_info->ram_size_below_4g; + } + numamem = acpi_data_push(table_data, sizeof *numamem); + acpi_build_srat_memory(numamem, mem_base, mem_len, i - 1, 1); +-- +1.7.1 + diff --git a/SOURCES/kvm-acpi-add-function-to-extract-oem_id-and-oem_table_id.patch b/SOURCES/kvm-acpi-add-function-to-extract-oem_id-and-oem_table_id.patch new file mode 100644 index 0000000..4660d3b --- /dev/null +++ b/SOURCES/kvm-acpi-add-function-to-extract-oem_id-and-oem_table_id.patch @@ -0,0 +1,89 @@ +From 5ccdcc1c49246cce9b1536e28a4977c65d72531c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:47 +0200 +Subject: [PATCH 08/10] acpi: add function to extract oem_id and oem_table_id + from the user's SLIC + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-7-git-send-email-lersek@redhat.com> +Patchwork-id: 70383 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 6/7] acpi: add function to extract oem_id and oem_table_id from the user's SLIC +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +The acpi_get_slic_oem() function stores pointers to these fields in the +(first) SLIC table that the user passes in with the -acpitable switch. + +Cc: "Michael S. Tsirkin" (supporter:ACPI/SMBIOS) +Cc: Igor Mammedov (supporter:ACPI/SMBIOS) +Cc: Richard W.M. Jones +Cc: Aleksei Kovura +Cc: Michael Tokarev +Cc: Steven Newbury +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1248758 +LP: https://bugs.launchpad.net/qemu/+bug/1533848 +Signed-off-by: Laszlo Ersek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Steven Newbury +(cherry picked from commit 88594e4fd1e916b778968b2bdd8d7375ca2fe8d8) +Signed-off-by: Laszlo Ersek +--- + include/hw/acpi/acpi.h | 7 +++++++ + hw/acpi/core.c | 16 ++++++++++++++++ + 2 files changed, 23 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/acpi/core.c | 16 ++++++++++++++++ + include/hw/acpi/acpi.h | 7 +++++++ + 2 files changed, 23 insertions(+) + +diff --git a/hw/acpi/core.c b/hw/acpi/core.c +index 88efba7..99c5918 100644 +--- a/hw/acpi/core.c ++++ b/hw/acpi/core.c +@@ -349,6 +349,22 @@ uint8_t *acpi_table_next(uint8_t *current) + } + } + ++int acpi_get_slic_oem(AcpiSlicOem *oem) ++{ ++ uint8_t *u; ++ ++ for (u = acpi_table_first(); u; u = acpi_table_next(u)) { ++ struct acpi_table_header *hdr = (void *)(u - sizeof(hdr->_length)); ++ ++ if (memcmp(hdr->sig, "SLIC", 4) == 0) { ++ oem->id = hdr->oem_id; ++ oem->table_id = hdr->oem_table_id; ++ return 0; ++ } ++ } ++ return -1; ++} ++ + static void acpi_notify_wakeup(Notifier *notifier, void *data) + { + ACPIREGS *ar = container_of(notifier, ACPIREGS, wakeup); +diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h +index bb7136d..1e59ec9 100644 +--- a/include/hw/acpi/acpi.h ++++ b/include/hw/acpi/acpi.h +@@ -171,4 +171,11 @@ unsigned acpi_table_len(void *current); + void acpi_table_add(const QemuOpts *opts, Error **errp); + void acpi_table_add_builtin(const QemuOpts *opts, Error **errp); + ++typedef struct AcpiSlicOem AcpiSlicOem; ++struct AcpiSlicOem { ++ char *id; ++ char *table_id; ++}; ++int acpi_get_slic_oem(AcpiSlicOem *oem); ++ + #endif /* !QEMU_HW_ACPI_H */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-acpi-add-interface-to-access-user-installed-tables.patch b/SOURCES/kvm-acpi-add-interface-to-access-user-installed-tables.patch new file mode 100644 index 0000000..e119011 --- /dev/null +++ b/SOURCES/kvm-acpi-add-interface-to-access-user-installed-tables.patch @@ -0,0 +1,102 @@ +From 99ac82bfa364eef3e6aa27a12d4eb5e23c7ccfb1 Mon Sep 17 00:00:00 2001 +Message-Id: <99ac82bfa364eef3e6aa27a12d4eb5e23c7ccfb1.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:02 +0100 +Subject: [PATCH 46/56] acpi: add interface to access user-installed tables + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-47-git-send-email-mst@redhat.com> +Patchwork-id: 56353 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 46/57] acpi: add interface to access user-installed tables +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Also add a new API to install builtin tables, so +that we can distinguish between the two. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 60de1163d5b5013fe964ac0792e9a64a823e73a3) +--- + include/hw/acpi/acpi.h | 4 ++++ + hw/acpi/core.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 44 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/acpi/core.c | 40 ++++++++++++++++++++++++++++++++++++++++ + include/hw/acpi/acpi.h | 4 ++++ + 2 files changed, 44 insertions(+) + +diff --git a/hw/acpi/core.c b/hw/acpi/core.c +index 42eeace..3352d17 100644 +--- a/hw/acpi/core.c ++++ b/hw/acpi/core.c +@@ -309,6 +309,46 @@ out: + error_propagate(errp, err); + } + ++static bool acpi_table_builtin = false; ++ ++void acpi_table_add_builtin(const QemuOpts *opts, Error **errp) ++{ ++ acpi_table_builtin = true; ++ acpi_table_add(opts, errp); ++} ++ ++unsigned acpi_table_len(void *current) ++{ ++ struct acpi_table_header *hdr = current - sizeof(hdr->_length); ++ return hdr->_length; ++} ++ ++static ++void *acpi_table_hdr(void *h) ++{ ++ struct acpi_table_header *hdr = h; ++ return &hdr->sig; ++} ++ ++uint8_t *acpi_table_first(void) ++{ ++ if (acpi_table_builtin || !acpi_tables) { ++ return NULL; ++ } ++ return acpi_table_hdr(acpi_tables + ACPI_TABLE_PFX_SIZE); ++} ++ ++uint8_t *acpi_table_next(uint8_t *current) ++{ ++ uint8_t *next = current + acpi_table_len(current); ++ ++ if (next - acpi_tables >= acpi_tables_len) { ++ return NULL; ++ } else { ++ return acpi_table_hdr(next); ++ } ++} ++ + static void acpi_notify_wakeup(Notifier *notifier, void *data) + { + ACPIREGS *ar = container_of(notifier, ACPIREGS, wakeup); +diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h +index 635be7b..bb7136d 100644 +--- a/include/hw/acpi/acpi.h ++++ b/include/hw/acpi/acpi.h +@@ -165,6 +165,10 @@ extern int acpi_enabled; + extern char unsigned *acpi_tables; + extern size_t acpi_tables_len; + ++uint8_t *acpi_table_first(void); ++uint8_t *acpi_table_next(uint8_t *current); ++unsigned acpi_table_len(void *current); + void acpi_table_add(const QemuOpts *opts, Error **errp); ++void acpi_table_add_builtin(const QemuOpts *opts, Error **errp); + + #endif /* !QEMU_HW_ACPI_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-add-rules-to-compile-ASL-source.patch b/SOURCES/kvm-acpi-add-rules-to-compile-ASL-source.patch new file mode 100644 index 0000000..99ce43f --- /dev/null +++ b/SOURCES/kvm-acpi-add-rules-to-compile-ASL-source.patch @@ -0,0 +1,141 @@ +From 4731e5c2fd12e1faf421d63b715c538d43c1dddb Mon Sep 17 00:00:00 2001 +Message-Id: <4731e5c2fd12e1faf421d63b715c538d43c1dddb.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:15 +0100 +Subject: [PATCH 33/56] acpi: add rules to compile ASL source + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-34-git-send-email-mst@redhat.com> +Patchwork-id: 56339 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 33/57] acpi: add rules to compile ASL source +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Detect presence of IASL compiler and use it +to process ASL source. If not there, use pre-compiled +files in-tree. Add script to update the in-tree files. + +Note: distros are known to silently update iasl +so detect correct iasl flags for the installed version on each run as +opposed to at configure time. + +Reviewed-by: Laszlo Ersek +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit a31a864273bb501851a4d52a366c645d06a53991) + +Conflicts: + configure +--- + configure | 9 ++++++++- + hw/i386/Makefile.objs | 22 ++++++++++++++++++++++ + scripts/update-acpi.sh | 4 ++++ + 3 files changed, 34 insertions(+), 1 deletion(-) + create mode 100644 scripts/update-acpi.sh + +Signed-off-by: Michal Novotny +--- + configure | 9 ++++++++- + hw/i386/Makefile.objs | 22 ++++++++++++++++++++++ + scripts/update-acpi.sh | 4 ++++ + 3 files changed, 34 insertions(+), 1 deletion(-) + create mode 100644 scripts/update-acpi.sh + +diff --git a/configure b/configure +index 1af1079..f86793d 100755 +--- a/configure ++++ b/configure +@@ -119,6 +119,7 @@ path_of() { + # default parameters + source_path=`dirname "$0"` + cpu="" ++iasl="iasl" + interp_prefix="/usr/gnemul/qemu-%M" + static="no" + cross_prefix="" +@@ -252,6 +253,8 @@ for opt do + ;; + --cc=*) CC="$optarg" + ;; ++ --iasl=*) iasl="$optarg" ++ ;; + --source-path=*) source_path="$optarg" + ;; + --cpu=*) cpu="$optarg" +@@ -1074,6 +1077,7 @@ echo "Advanced options (experts only):" + echo " --source-path=PATH path of source code [$source_path]" + echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" + echo " --cc=CC use C compiler CC [$cc]" ++echo " --iasl=IASL use ACPI compiler IASL [$iasl]" + echo " --host-cc=CC use C compiler CC [$host_cc] for code run at" + echo " build time" + echo " --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]" +@@ -4056,6 +4060,9 @@ else + fi + echo "PYTHON=$python" >> $config_host_mak + echo "CC=$cc" >> $config_host_mak ++if $iasl -h > /dev/null 2>&1; then ++ echo "IASL=$iasl" >> $config_host_mak ++fi + echo "CC_I386=$cc_i386" >> $config_host_mak + echo "HOST_CC=$host_cc" >> $config_host_mak + echo "OBJCC=$objcc" >> $config_host_mak +@@ -4544,7 +4551,7 @@ for rom in seabios vgabios ; do + echo "BCC=bcc" >> $config_mak + echo "CPP=$cpp" >> $config_mak + echo "OBJCOPY=objcopy" >> $config_mak +- echo "IASL=iasl" >> $config_mak ++ echo "IASL=$iasl" >> $config_mak + echo "LD=$ld" >> $config_mak + done + +diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs +index 205d22e..013d250 100644 +--- a/hw/i386/Makefile.objs ++++ b/hw/i386/Makefile.objs +@@ -4,3 +4,25 @@ obj-y += pc.o pc_piix.o pc_q35.o + obj-$(CONFIG_XEN) += xen_domainbuild.o xen_machine_pv.o + + obj-y += kvmvapic.o ++ ++iasl-option=$(shell if test -z "`$(1) $(2) 2>&1 > /dev/null`" \ ++ ; then echo "$(2)"; else echo "$(3)"; fi ;) ++ ++ifdef IASL ++#IASL Present. Generate hex files from .dsl ++hw/i386/%.hex: $(SRC_PATH)/hw/i386/%.dsl $(SRC_PATH)/scripts/acpi_extract_preprocess.py $(SRC_PATH)/scripts/acpi_extract.py ++ $(call quiet-command, cpp -P $< -o $*.dsl.i.orig, " CPP $(TARGET_DIR)$*.dsl.i.orig") ++ $(call quiet-command, $(PYTHON) $(SRC_PATH)/scripts/acpi_extract_preprocess.py $*.dsl.i.orig > $*.dsl.i, " ACPI_PREPROCESS $(TARGET_DIR)$*.dsl.i") ++ $(call quiet-command, $(IASL) $(call iasl-option,$(IASL),-Pn,) -vs -l -tc -p $* $*.dsl.i $(if $(V), , > /dev/null) 2>&1 ," IASL $(TARGET_DIR)$*.dsl.i") ++ $(call quiet-command, $(SRC_PATH)/scripts/acpi_extract.py $*.lst > $*.off, " ACPI_EXTRACT $(TARGET_DIR)$*.off") ++ $(call quiet-command, cat $*.off > $@, " CAT $(TARGET_DIR)$@") ++else ++#IASL Not present. Restore pre-generated hex files. ++hw/i386/%.hex: $(SRC_PATH)/hw/i386/%.hex.generated ++ $(call quiet-command, cp -f $< $@, " CP $(TARGET_DIR)$@") ++endif ++ ++.PHONY: cleanhex ++cleanhex: ++ rm -f hw/i386/*hex ++clean: cleanhex +diff --git a/scripts/update-acpi.sh b/scripts/update-acpi.sh +new file mode 100644 +index 0000000..b5f05ff +--- /dev/null ++++ b/scripts/update-acpi.sh +@@ -0,0 +1,4 @@ ++cd x86_64-softmmu ++for file in hw/i386/*.hex; do ++ cp -f $file ../$file.generated ++done +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-build-Fix-compiler-warning-missing-gnu_printf-f.patch b/SOURCES/kvm-acpi-build-Fix-compiler-warning-missing-gnu_printf-f.patch new file mode 100644 index 0000000..d02e608 --- /dev/null +++ b/SOURCES/kvm-acpi-build-Fix-compiler-warning-missing-gnu_printf-f.patch @@ -0,0 +1,81 @@ +From e1826a5a94d53d337a0e0e18230d81b572173ba7 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:27 +0100 +Subject: [PATCH 55/56] acpi-build: Fix compiler warning (missing gnu_printf + format attribute) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-56-git-send-email-mst@redhat.com> +Patchwork-id: 56361 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 55/57] acpi-build: Fix compiler warning (missing gnu_printf format attribute) +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Stefan Weil + +gcc 4.8.2 reports this warning when extra warnings are enabled (-Wextra): + + CC m68k-softmmu/hw/m68k/mcf5206.o +hw/i386/acpi-build.c: In function ‘build_append_nameseg’: +hw/i386/acpi-build.c:294:5: error: + function might be possible candidate for ‘gnu_printf’ format attribute [-Werror=suggest-attribute=format] + g_string_vprintf(s, format, args); + ^ + +When this warning is fixed, there is a new compiler warning: + + CC i386-softmmu/hw/i386/acpi-build.o +hw/i386/acpi-build.c: In function ‘build_append_notify’: +hw/i386/acpi-build.c:632:5: error: + format not a string literal and no format arguments [-Werror=format-security] + build_append_nameseg(method, name); + ^ + +This is fixed here, too. + +Signed-off-by: Stefan Weil +Signed-off-by: Michael Tokarev +(cherry picked from commit 867d898ccf50ef095b95c403d7dc809c188b14e2) +--- + hw/i386/acpi-build.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/acpi-build.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 316d6d3..2d008bd 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -285,7 +285,8 @@ static inline void build_append_array(GArray *array, GArray *val) + g_array_append_vals(array, val->data, val->len); + } + +-static void build_append_nameseg(GArray *array, const char *format, ...) ++static void GCC_FMT_ATTR(2, 3) ++build_append_nameseg(GArray *array, const char *format, ...) + { + /* It would be nicer to use g_string_vprintf but it's only there in 2.22 */ + char s[] = "XXXX"; +@@ -630,7 +631,7 @@ build_append_notify(GArray *device, const char *name, + GArray *method = build_alloc_array(); + uint8_t op = 0x14; /* MethodOp */ + +- build_append_nameseg(method, name); ++ build_append_nameseg(method, "%s", name); + build_append_byte(method, 0x02); /* MethodFlags: ArgCount */ + for (i = skip; i < count; i++) { + GArray *target = build_alloc_array(); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-build-disable-with-no-acpi.patch b/SOURCES/kvm-acpi-build-disable-with-no-acpi.patch new file mode 100644 index 0000000..f166ffa --- /dev/null +++ b/SOURCES/kvm-acpi-build-disable-with-no-acpi.patch @@ -0,0 +1,60 @@ +From 9c107e1c452bc40beac01fc01f208f76967cb36b Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Sun, 12 Jan 2014 11:54:00 +0100 +Subject: [PATCH 09/16] acpi-build: disable with -no-acpi + +RH-Author: Michael S. Tsirkin +Message-id: <1389527552-15015-1-git-send-email-mst@redhat.com> +Patchwork-id: 56637 +O-Subject: [PATCH qemu-kvm RHEL7.0] acpi-build: disable with -no-acpi +Bugzilla: 1045386 +RH-Acked-by: Amos Kong +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Igor Mammedov +RH-Acked-by: Richard Jones + +QEMU will currently crash if started with -no-acpi flag +since acpi build code probes the PM device which isn't present +in this configuration. + +To fix, don't expose ACPI tables to guest when acpi has been +disabled from command line. + +Fixes LP# 1248854 +https://bugs.launchpad.net/qemu/+bug/1248854 + +Reported-by: chao zhou +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Gerd Hoffmann +(cherry picked from commit 81adc5131534ca7554cebe64cd8f86bac28dbd1b) + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1045386 +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6854545 +--- + hw/i386/acpi-build.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/acpi-build.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 2d008bd..befc39f 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -1185,6 +1185,11 @@ void acpi_setup(PcGuestInfo *guest_info) + return; + } + ++ if (!acpi_enabled) { ++ ACPI_BUILD_DPRINTF(3, "ACPI disabled. Bailing out.\n"); ++ return; ++ } ++ + build_state = g_malloc0(sizeof *build_state); + + build_state->guest_info = guest_info; +-- +1.7.1 + diff --git a/SOURCES/kvm-acpi-build-fix-build-on-glib-2.14.patch b/SOURCES/kvm-acpi-build-fix-build-on-glib-2.14.patch new file mode 100644 index 0000000..9ee8a48 --- /dev/null +++ b/SOURCES/kvm-acpi-build-fix-build-on-glib-2.14.patch @@ -0,0 +1,95 @@ +From 80522ccccfe378cb1b9ff1d6fb468f275aa69c86 Mon Sep 17 00:00:00 2001 +Message-Id: <80522ccccfe378cb1b9ff1d6fb468f275aa69c86.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:21 +0100 +Subject: [PATCH 53/56] acpi-build: fix build on glib < 2.14 + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-54-git-send-email-mst@redhat.com> +Patchwork-id: 56359 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 53/57] acpi-build: fix build on glib < 2.14 +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +g_array_get_element_size was only added in glib 2.14. +Fortunately we don't use it for any arrays where +element size is > 1, so just add an assert. + +Reported-by: Richard Henderson +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Paolo Bonzini +Message-id: 1385036128-8753-2-git-send-email-mst@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit b15654c21acef4d2bc17e6ac528c6c93abbb7e1e) +--- + hw/i386/acpi-build.c | 5 ++++- + hw/i386/bios-linker-loader.c | 8 ++++---- + 2 files changed, 8 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/acpi-build.c | 5 ++++- + hw/i386/bios-linker-loader.c | 8 ++++---- + 2 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 4e2d709..4074350 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -425,7 +425,10 @@ static inline void *acpi_data_push(GArray *table_data, unsigned size) + + static unsigned acpi_data_len(GArray *table) + { +- return table->len * g_array_get_element_size(table); ++#if GLIB_CHECK_VERSION(2, 14, 0) ++ assert(g_array_get_element_size(table) == 1); ++#endif ++ return table->len; + } + + static void acpi_align_size(GArray *blob, unsigned align) +diff --git a/hw/i386/bios-linker-loader.c b/hw/i386/bios-linker-loader.c +index 0833853..fd23611 100644 +--- a/hw/i386/bios-linker-loader.c ++++ b/hw/i386/bios-linker-loader.c +@@ -90,7 +90,7 @@ enum { + + GArray *bios_linker_loader_init(void) + { +- return g_array_new(false, true /* clear */, sizeof(BiosLinkerLoaderEntry)); ++ return g_array_new(false, true /* clear */, 1); + } + + /* Free linker wrapper and return the linker array. */ +@@ -115,7 +115,7 @@ void bios_linker_loader_alloc(GArray *linker, + BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH); + + /* Alloc entries must come first, so prepend them */ +- g_array_prepend_val(linker, entry); ++ g_array_prepend_vals(linker, &entry, sizeof entry); + } + + void bios_linker_loader_add_checksum(GArray *linker, const char *file, +@@ -132,7 +132,7 @@ void bios_linker_loader_add_checksum(GArray *linker, const char *file, + entry.cksum.start = cpu_to_le32((uint8_t *)start - (uint8_t *)table); + entry.cksum.length = cpu_to_le32(size); + +- g_array_append_val(linker, entry); ++ g_array_append_vals(linker, &entry, sizeof entry); + } + + void bios_linker_loader_add_pointer(GArray *linker, +@@ -154,5 +154,5 @@ void bios_linker_loader_add_pointer(GArray *linker, + assert(pointer_size == 1 || pointer_size == 2 || + pointer_size == 4 || pointer_size == 8); + +- g_array_append_val(linker, entry); ++ g_array_append_vals(linker, &entry, sizeof entry); + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-build-fix-build-on-glib-2.22.patch b/SOURCES/kvm-acpi-build-fix-build-on-glib-2.22.patch new file mode 100644 index 0000000..d6ceabd --- /dev/null +++ b/SOURCES/kvm-acpi-build-fix-build-on-glib-2.22.patch @@ -0,0 +1,66 @@ +From 5a4f3ccc420f7b6cdce3fc1065119a33e5b0b997 Mon Sep 17 00:00:00 2001 +Message-Id: <5a4f3ccc420f7b6cdce3fc1065119a33e5b0b997.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:18 +0100 +Subject: [PATCH 52/56] acpi-build: fix build on glib < 2.22 + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-53-git-send-email-mst@redhat.com> +Patchwork-id: 56358 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 52/57] acpi-build: fix build on glib < 2.22 +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +g_string_vprintf was only introduced in 2.24 so switch to vsnprintf +instead. A bit uglier but name size is fixed at 4 bytes here so it's +easy. + +Reported-by: Richard Henderson +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Paolo Bonzini +Message-id: 1385036128-8753-1-git-send-email-mst@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 542da88f0013ebb2b2d8ca10becbfebd9948abba) +--- + hw/i386/acpi-build.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/acpi-build.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 6cfa044..4e2d709 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -287,16 +287,17 @@ static inline void build_append_array(GArray *array, GArray *val) + + static void build_append_nameseg(GArray *array, const char *format, ...) + { +- GString *s = g_string_new(""); ++ /* It would be nicer to use g_string_vprintf but it's only there in 2.22 */ ++ char s[] = "XXXX"; ++ int len; + va_list args; + + va_start(args, format); +- g_string_vprintf(s, format, args); ++ len = vsnprintf(s, sizeof s, format, args); + va_end(args); + +- assert(s->len == 4); +- g_array_append_vals(array, s->str, s->len); +- g_string_free(s, true); ++ assert(len == 4); ++ g_array_append_vals(array, s, len); + } + + /* 5.4 Definition Block Encoding */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-build-fix-support-for-glib-2.22.patch b/SOURCES/kvm-acpi-build-fix-support-for-glib-2.22.patch new file mode 100644 index 0000000..bf6fcf5 --- /dev/null +++ b/SOURCES/kvm-acpi-build-fix-support-for-glib-2.22.patch @@ -0,0 +1,66 @@ +From 6fa0fc12221718bb405d01683acf635a24c34daf Mon Sep 17 00:00:00 2001 +Message-Id: <6fa0fc12221718bb405d01683acf635a24c34daf.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:24 +0100 +Subject: [PATCH 54/56] acpi-build: fix support for glib < 2.22 + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-55-git-send-email-mst@redhat.com> +Patchwork-id: 56360 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 54/57] acpi-build: fix support for glib < 2.22 +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +glib < 2.22 does not have g_array_get_element_size, +limit it's use (to check all elements are 1 byte +in size) to newer glib. + +This fixes build on RHEL 5.3. + +Reported-by: Richard Henderson +Reported-by: Erik Rull +Tested-by: Richard Henderson +Signed-off-by: Michael S. Tsirkin +Message-id: 20131125220039.GA16386@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 134d42d614768b2803e551621f6654dab1fdc2d2) +--- + hw/i386/acpi-build.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/acpi-build.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 4074350..316d6d3 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -425,7 +425,7 @@ static inline void *acpi_data_push(GArray *table_data, unsigned size) + + static unsigned acpi_data_len(GArray *table) + { +-#if GLIB_CHECK_VERSION(2, 14, 0) ++#if GLIB_CHECK_VERSION(2, 22, 0) + assert(g_array_get_element_size(table) == 1); + #endif + return table->len; +@@ -436,9 +436,7 @@ static void acpi_align_size(GArray *blob, unsigned align) + /* Align size to multiple of given size. This reduces the chance + * we need to change size in the future (breaking cross version migration). + */ +- g_array_set_size(blob, (ROUND_UP(acpi_data_len(blob), align) + +- g_array_get_element_size(blob) - 1) / +- g_array_get_element_size(blob)); ++ g_array_set_size(blob, ROUND_UP(acpi_data_len(blob), align)); + } + + /* Get pointer within table in a safe manner */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-expose-oem_id-and-oem_table_id-in-build_rsdt.patch b/SOURCES/kvm-acpi-expose-oem_id-and-oem_table_id-in-build_rsdt.patch new file mode 100644 index 0000000..1e8bf05 --- /dev/null +++ b/SOURCES/kvm-acpi-expose-oem_id-and-oem_table_id-in-build_rsdt.patch @@ -0,0 +1,92 @@ +From 39f2d80c57f648afd2eab27816e8f93cf48e718d Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:46 +0200 +Subject: [PATCH 07/10] acpi: expose oem_id and oem_table_id in build_rsdt() + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-6-git-send-email-lersek@redhat.com> +Patchwork-id: 70382 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 5/7] acpi: expose oem_id and oem_table_id in build_rsdt() +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +Since build_rsdt() is implemented as common utility code (in +"hw/acpi/aml-build.c"), it should expose -- and forward -- the oem_id and +oem_table_id parameters between board code and the generic build_header() +function. + +Cc: "Michael S. Tsirkin" (supporter:ACPI/SMBIOS) +Cc: Igor Mammedov (supporter:ACPI/SMBIOS) +Cc: Shannon Zhao (maintainer:ARM ACPI Subsystem) +Cc: Paolo Bonzini (maintainer:X86) +Cc: Richard W.M. Jones +Cc: Aleksei Kovura +Cc: Michael Tokarev +Cc: Steven Newbury +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1248758 +LP: https://bugs.launchpad.net/qemu/+bug/1533848 +Signed-off-by: Laszlo Ersek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Shannon Zhao +(cherry picked from commit 5151355898699eb66fad0a710b8b6011690a0dfc) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/acpi/aml-build.c + hw/arm/virt-acpi-build.c + hw/i386/acpi-build.c + include/hw/acpi/aml-build.h + +RHEL-7 backport note: this is actually a manual reimplementation of the +upstream patch, which is mostly mechanic. A clean cherry-pick would depend +on a lot of reorganizatorial upstream patches (e.g., 658c27181bf3 +("hw/i386/acpi-build: move generic acpi building helpers into dedictated +file")), and many new features that overlap with ACPI generation (e.g., +the "virt" machtype of the arm/aarch64 targets). + +Signed-off-by: Laszlo Ersek +--- + hw/i386/acpi-build.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) +--- + hw/i386/acpi-build.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 4839b0e..d9433e6 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -951,7 +951,8 @@ build_dsdt(GArray *table_data, GArray *linker, AcpiMiscInfo *misc) + + /* Build final rsdt table */ + static void +-build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) ++build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets, ++ const char *oem_id, const char *oem_table_id) + { + AcpiRsdtDescriptorRev1 *rsdt; + size_t rsdt_len; +@@ -970,7 +971,7 @@ build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) + sizeof(uint32_t)); + } + build_header(linker, table_data, +- (void *)rsdt, "RSDT", rsdt_len, 1, NULL, NULL); ++ (void *)rsdt, "RSDT", rsdt_len, 1, oem_id, oem_table_id); + } + + static GArray * +@@ -1126,7 +1127,7 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) + + /* RSDT is pointed to by RSDP */ + rsdt = tables->table_data->len; +- build_rsdt(tables->table_data, tables->linker, table_offsets); ++ build_rsdt(tables->table_data, tables->linker, table_offsets, NULL, NULL); + + /* RSDP is in FSEG memory, so allocate it separately */ + build_rsdp(tables->rsdp, tables->linker, rsdt); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-acpi-fix-endian-ness-for-table-ids.patch b/SOURCES/kvm-acpi-fix-endian-ness-for-table-ids.patch new file mode 100644 index 0000000..5c998a6 --- /dev/null +++ b/SOURCES/kvm-acpi-fix-endian-ness-for-table-ids.patch @@ -0,0 +1,249 @@ +From 87f01cd69488bf39e80c422b92717029fed0bef6 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:43 +0200 +Subject: [PATCH 04/10] acpi: fix endian-ness for table ids + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-3-git-send-email-lersek@redhat.com> +Patchwork-id: 70379 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 2/7] acpi: fix endian-ness for table ids +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +From: "Michael S. Tsirkin" + +when using signature for table ID, we forgot to byte-swap it. +signatures are really ASCII strings, let's treat them as such. +While at it, get rid of most of _SIGNATURE macros. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 821e3227863ea8db057190e578efa0f1f57ed9de) + +RHEL-7 backport notes: this patch is being backported only to decrease the +number of conflicts in the upcoming patches; we only support x86_64 hosts, +which is unaffected by the endianness issue described in the upstream +commit message. + +Signed-off-by: Laszlo Ersek +--- + hw/i386/acpi-defs.h | 14 -------------- + hw/i386/acpi-build.c | 31 ++++++++++++++++--------------- + 2 files changed, 16 insertions(+), 29 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/acpi-build.c | 31 ++++++++++++++++--------------- + hw/i386/acpi-defs.h | 14 -------------- + 2 files changed, 16 insertions(+), 29 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index a3a4c3b..be32bc3 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -243,14 +243,14 @@ static void acpi_get_pci_info(PcPciInfo *info) + + static void + build_header(GArray *linker, GArray *table_data, +- AcpiTableHeader *h, uint32_t sig, int len, uint8_t rev) ++ AcpiTableHeader *h, const char *sig, int len, uint8_t rev) + { +- h->signature = cpu_to_le32(sig); ++ memcpy(&h->signature, sig, 4); + h->length = cpu_to_le32(len); + h->revision = rev; + memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6); + memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4); +- memcpy(h->oem_table_id + 4, (void *)&sig, 4); ++ memcpy(h->oem_table_id + 4, sig, 4); + h->oem_revision = cpu_to_le32(1); + memcpy(h->asl_compiler_id, ACPI_BUILD_APPNAME4, 4); + h->asl_compiler_revision = cpu_to_le32(1); +@@ -463,7 +463,7 @@ static void + build_facs(GArray *table_data, GArray *linker, PcGuestInfo *guest_info) + { + AcpiFacsDescriptorRev1 *facs = acpi_data_push(table_data, sizeof *facs); +- facs->signature = cpu_to_le32(ACPI_FACS_SIGNATURE); ++ memcpy(&facs->signature, "FACS", 4); + facs->length = cpu_to_le32(sizeof(*facs)); + } + +@@ -520,7 +520,7 @@ build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo *pm, + fadt_setup(fadt, pm); + + build_header(linker, table_data, +- (void *)fadt, ACPI_FACP_SIGNATURE, sizeof(*fadt), 1); ++ (void *)fadt, "FACP", sizeof(*fadt), 1); + } + + static void +@@ -589,7 +589,7 @@ build_madt(GArray *table_data, GArray *linker, AcpiCpuInfo *cpu, + local_nmi->lint = 1; /* ACPI_LINT1 */ + + build_header(linker, table_data, +- (void *)(table_data->data + madt_start), ACPI_APIC_SIGNATURE, ++ (void *)(table_data->data + madt_start), "APIC", + table_data->len - madt_start, 1); + } + +@@ -782,7 +782,7 @@ build_ssdt(GArray *table_data, GArray *linker, + + build_header(linker, table_data, + (void *)(table_data->data + ssdt_start), +- ACPI_SSDT_SIGNATURE, table_data->len - ssdt_start, 1); ++ "SSDT", table_data->len - ssdt_start, 1); + } + + static void +@@ -797,7 +797,7 @@ build_hpet(GArray *table_data, GArray *linker) + hpet->timer_block_id = cpu_to_le32(0x8086a201); + hpet->addr.address = cpu_to_le64(HPET_BASE); + build_header(linker, table_data, +- (void *)hpet, ACPI_HPET_SIGNATURE, sizeof(*hpet), 1); ++ (void *)hpet, "HPET", sizeof(*hpet), 1); + } + + static void +@@ -889,7 +889,7 @@ build_srat(GArray *table_data, GArray *linker, + + build_header(linker, table_data, + (void *)(table_data->data + srat_start), +- ACPI_SRAT_SIGNATURE, ++ "SRAT", + table_data->len - srat_start, 1); + } + +@@ -897,7 +897,7 @@ static void + build_mcfg_q35(GArray *table_data, GArray *linker, AcpiMcfgInfo *info) + { + AcpiTableMcfg *mcfg; +- uint32_t sig; ++ const char *sig; + int len = sizeof(*mcfg) + 1 * sizeof(mcfg->allocation[0]); + + mcfg = acpi_data_push(table_data, len); +@@ -914,9 +914,10 @@ build_mcfg_q35(GArray *table_data, GArray *linker, AcpiMcfgInfo *info) + * ACPI spec requires OSPMs to ignore such tables. + */ + if (info->mcfg_base == PCIE_BASE_ADDR_UNMAPPED) { +- sig = ACPI_RSRV_SIGNATURE; ++ /* Reserved signature: ignored by OSPM */ ++ sig = "QEMU"; + } else { +- sig = ACPI_MCFG_SIGNATURE; ++ sig = "MCFG"; + } + build_header(linker, table_data, (void *)mcfg, sig, len, 1); + } +@@ -932,7 +933,7 @@ build_dsdt(GArray *table_data, GArray *linker, AcpiMiscInfo *misc) + memcpy(dsdt, misc->dsdt_code, misc->dsdt_size); + + memset(dsdt, 0, sizeof *dsdt); +- build_header(linker, table_data, dsdt, ACPI_DSDT_SIGNATURE, ++ build_header(linker, table_data, dsdt, "DSDT", + misc->dsdt_size, 1); + } + +@@ -957,7 +958,7 @@ build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) + sizeof(uint32_t)); + } + build_header(linker, table_data, +- (void *)rsdt, ACPI_RSDT_SIGNATURE, rsdt_len, 1); ++ (void *)rsdt, "RSDT", rsdt_len, 1); + } + + static GArray * +@@ -968,7 +969,7 @@ build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt) + bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, 1, + true /* fseg memory */); + +- rsdp->signature = cpu_to_le64(ACPI_RSDP_SIGNATURE); ++ memcpy(&rsdp->signature, "RSD PTR ", 8); + memcpy(rsdp->oem_id, ACPI_BUILD_APPNAME6, 6); + rsdp->rsdt_physical_address = cpu_to_le32(rsdt); + /* Address to be filled by Guest linker */ +diff --git a/hw/i386/acpi-defs.h b/hw/i386/acpi-defs.h +index 78ca204..e93babb 100644 +--- a/hw/i386/acpi-defs.h ++++ b/hw/i386/acpi-defs.h +@@ -52,8 +52,6 @@ struct Acpi20GenericAddress { + } QEMU_PACKED; + typedef struct Acpi20GenericAddress Acpi20GenericAddress; + +-#define ACPI_RSDP_SIGNATURE 0x2052545020445352LL // "RSD PTR " +- + struct AcpiRsdpDescriptor { /* Root System Descriptor Pointer */ + uint64_t signature; /* ACPI signature, contains "RSD PTR " */ + uint8_t checksum; /* To make sum of struct == 0 */ +@@ -92,7 +90,6 @@ typedef struct AcpiTableHeader AcpiTableHeader; + /* + * ACPI 1.0 Fixed ACPI Description Table (FADT) + */ +-#define ACPI_FACP_SIGNATURE 0x50434146 // FACP + struct AcpiFadtDescriptorRev1 + { + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ +@@ -141,7 +138,6 @@ typedef struct AcpiFadtDescriptorRev1 AcpiFadtDescriptorRev1; + /* + * ACPI 1.0 Root System Description Table (RSDT) + */ +-#define ACPI_RSDT_SIGNATURE 0x54445352 // RSDT + struct AcpiRsdtDescriptorRev1 + { + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ +@@ -153,7 +149,6 @@ typedef struct AcpiRsdtDescriptorRev1 AcpiRsdtDescriptorRev1; + /* + * ACPI 1.0 Firmware ACPI Control Structure (FACS) + */ +-#define ACPI_FACS_SIGNATURE 0x53434146 // FACS + struct AcpiFacsDescriptorRev1 + { + uint32_t signature; /* ACPI Signature */ +@@ -169,7 +164,6 @@ typedef struct AcpiFacsDescriptorRev1 AcpiFacsDescriptorRev1; + /* + * Differentiated System Description Table (DSDT) + */ +-#define ACPI_DSDT_SIGNATURE 0x54445344 // DSDT + + /* + * MADT values and structures +@@ -182,7 +176,6 @@ typedef struct AcpiFacsDescriptorRev1 AcpiFacsDescriptorRev1; + + /* Master MADT */ + +-#define ACPI_APIC_SIGNATURE 0x43495041 // APIC + struct AcpiMultipleApicTable + { + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ +@@ -253,7 +246,6 @@ typedef struct AcpiMadtLocalNmi AcpiMadtLocalNmi; + /* + * HPET Description Table + */ +-#define ACPI_HPET_SIGNATURE 0x54455048 // HPET + struct Acpi20Hpet { + ACPI_TABLE_HEADER_DEF /* ACPI common table header */ + uint32_t timer_block_id; +@@ -268,7 +260,6 @@ typedef struct Acpi20Hpet Acpi20Hpet; + * SRAT (NUMA topology description) table + */ + +-#define ACPI_SRAT_SIGNATURE 0x54415253 // SRAT + struct AcpiSystemResourceAffinityTable + { + ACPI_TABLE_HEADER_DEF +@@ -316,11 +307,6 @@ struct AcpiMcfgAllocation { + } QEMU_PACKED; + typedef struct AcpiMcfgAllocation AcpiMcfgAllocation; + +-#define ACPI_MCFG_SIGNATURE 0x4746434d // MCFG +- +-/* Reserved signature: ignored by OSPM */ +-#define ACPI_RSRV_SIGNATURE 0x554d4551 // QEMU +- + struct AcpiTableMcfg { + ACPI_TABLE_HEADER_DEF; + uint8_t reserved[8]; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-acpi-fix-tables-for-no-hpet-configuration.patch b/SOURCES/kvm-acpi-fix-tables-for-no-hpet-configuration.patch new file mode 100644 index 0000000..75345ff --- /dev/null +++ b/SOURCES/kvm-acpi-fix-tables-for-no-hpet-configuration.patch @@ -0,0 +1,66 @@ +From aa98e5248b83b5eed5230e582a21156373d9fc72 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 13 Aug 2014 07:59:41 +0200 +Subject: [PATCH 04/11] acpi: fix tables for no-hpet configuration + +Message-id: <1407916781-22610-2-git-send-email-lersek@redhat.com> +Patchwork-id: 60549 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] acpi: fix tables for no-hpet configuration +Bugzilla: 1129552 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +From: "Michael S. Tsirkin" + +acpi build tried to add offset of hpet table to rsdt even when hpet was +disabled. If no tables follow hpet, this could lead to a malformed +rsdt. + +Fix it up. + +To avoid such errors in the future, rearrange code slightly to make it +clear that acpi_add_table stores the offset of the following table - not +of the previous one. + +Reported-by: TeLeMan +Signed-off-by: Michael S. Tsirkin +Cc: qemu-stable@nongnu.org +(cherry picked from commit 9ac1c4c07e7e6ab16a3e2149e9b32c0d092cb3f5) +Signed-off-by: Laszlo Ersek +--- + hw/i386/acpi-build.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/acpi-build.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 33012c9..8be1286 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -1076,15 +1076,16 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) + /* ACPI tables pointed to by RSDT */ + acpi_add_table(table_offsets, tables->table_data); + build_fadt(tables->table_data, tables->linker, &pm, facs, dsdt); +- acpi_add_table(table_offsets, tables->table_data); + ++ acpi_add_table(table_offsets, tables->table_data); + build_ssdt(tables->table_data, tables->linker, &cpu, &pm, &misc, &pci, + guest_info); +- acpi_add_table(table_offsets, tables->table_data); + +- build_madt(tables->table_data, tables->linker, &cpu, guest_info); + acpi_add_table(table_offsets, tables->table_data); ++ build_madt(tables->table_data, tables->linker, &cpu, guest_info); ++ + if (misc.has_hpet) { ++ acpi_add_table(table_offsets, tables->table_data); + build_hpet(tables->table_data, tables->linker); + } + if (guest_info->numa_nodes) { +-- +1.7.1 + diff --git a/SOURCES/kvm-acpi-piix-add-macros-for-acpi-property-names.patch b/SOURCES/kvm-acpi-piix-add-macros-for-acpi-property-names.patch new file mode 100644 index 0000000..6e806a1 --- /dev/null +++ b/SOURCES/kvm-acpi-piix-add-macros-for-acpi-property-names.patch @@ -0,0 +1,78 @@ +From 4fef4ae9f3fb3f884d5eee74d3cc2272bff900f8 Mon Sep 17 00:00:00 2001 +Message-Id: <4fef4ae9f3fb3f884d5eee74d3cc2272bff900f8.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:47 +0100 +Subject: [PATCH 40/56] acpi/piix: add macros for acpi property names + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-41-git-send-email-mst@redhat.com> +Patchwork-id: 56346 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 40/57] acpi/piix: add macros for acpi property names +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit f854ecc79957e588bed8ed7e8c1c24ded55fc1e9) + +Conflicts: + hw/acpi/piix4.c +--- + include/hw/i386/pc.h | 10 ++++++++++ + hw/acpi/piix4.c | 6 +++--- + 2 files changed, 13 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/acpi/piix4.c | 6 +++--- + include/hw/i386/pc.h | 10 ++++++++++ + 2 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index 6882937..18b1300 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -475,9 +475,9 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, + + static Property piix4_pm_properties[] = { + DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0), +- DEFINE_PROP_UINT8("disable_s3", PIIX4PMState, disable_s3, 1), +- DEFINE_PROP_UINT8("disable_s4", PIIX4PMState, disable_s4, 1), +- DEFINE_PROP_UINT8("s4_val", PIIX4PMState, s4_val, 2), ++ DEFINE_PROP_UINT8(ACPI_PM_PROP_S3_DISABLED, PIIX4PMState, disable_s3, 1), ++ DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_DISABLED, PIIX4PMState, disable_s4, 1), ++ DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_VAL, PIIX4PMState, s4_val, 2), + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index ec91fae..5011c87 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -22,6 +22,16 @@ typedef struct PcPciInfo { + Range w64; + } PcPciInfo; + ++#define ACPI_PM_PROP_S3_DISABLED "disable_s3" ++#define ACPI_PM_PROP_S4_DISABLED "disable_s4" ++#define ACPI_PM_PROP_S4_VAL "s4_val" ++#define ACPI_PM_PROP_SCI_INT "sci_int" ++#define ACPI_PM_PROP_ACPI_ENABLE_CMD "acpi_enable_cmd" ++#define ACPI_PM_PROP_ACPI_DISABLE_CMD "acpi_disable_cmd" ++#define ACPI_PM_PROP_PM_IO_BASE "pm_io_base" ++#define ACPI_PM_PROP_GPE0_BLK "gpe0_blk" ++#define ACPI_PM_PROP_GPE0_BLK_LEN "gpe0_blk_len" ++ + struct PcGuestInfo { + bool has_pci_info; + hwaddr ram_size; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-piix4-Enable-qemu-kvm-compatibility-mode.patch b/SOURCES/kvm-acpi-piix4-Enable-qemu-kvm-compatibility-mode.patch new file mode 100644 index 0000000..2ba1c91 --- /dev/null +++ b/SOURCES/kvm-acpi-piix4-Enable-qemu-kvm-compatibility-mode.patch @@ -0,0 +1,62 @@ +From 27aa81d0b84f03223414eb2e85b7fae0e0d2b86b Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 16 Oct 2013 13:07:15 +0200 +Subject: [PATCH 17/18] acpi/piix4: Enable qemu-kvm compatibility mode + +RH-Author: Eduardo Habkost +Message-id: <1381928835-10190-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54961 +O-Subject: [qemu-kvm RHEL-7 PATCH] acpi/piix4: Enable qemu-kvm compatibility mode +Bugzilla: 1019474 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Igor Mammedov + +Bugzilla: 1019474 +Scratch build: https://brewweb.devel.redhat.com/taskinfo?taskID=6426533 +Upstream status: not applicable + +>From the code comments: + + qemu-kvm 1.2 uses version 3 but advertised as 2 + To support incoming qemu-kvm 1.2 migration, change version_id + and minimum_version_id to 2 below (which breaks migration from + qemu 1.2). + +The v2 format of qemu-0.13 (implemented by upstream commit +4cf3e6f3d85492f20a773dd6c9068ab89ba24a18, and the one that was used on +qemu-kvm) is not compatible with the v2 format of qemu-0.15 and newer +(compatibility was broken by upstream commit +23910d3f669d46073b403876e30a7314599633af). RHEL-6 is using the former +format (RHEL-6 commit c4101c5340988caa68da87066a88d3871c8c4bf1), which +is not compatible with upstream QEMU. + +This sets minimum_version_id to 2, so we enable the qemu-kvm +compatibility mode, to allow us to load RHEL-6 migration data. + +Signed-off-by: Eduardo Habkost +--- + hw/acpi/piix4.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/acpi/piix4.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index 86ff598..f14867a 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -278,7 +278,7 @@ static int acpi_load_old(QEMUFile *f, void *opaque, int version_id) + static const VMStateDescription vmstate_acpi = { + .name = "piix4_pm", + .version_id = 3, +- .minimum_version_id = 3, ++ .minimum_version_id = 2, + .minimum_version_id_old = 1, + .load_state_old = acpi_load_old, + .post_load = vmstate_acpi_post_load, +-- +1.7.1 + diff --git a/SOURCES/kvm-acpi-pre-compiled-ASL-files.patch b/SOURCES/kvm-acpi-pre-compiled-ASL-files.patch new file mode 100644 index 0000000..98848ac --- /dev/null +++ b/SOURCES/kvm-acpi-pre-compiled-ASL-files.patch @@ -0,0 +1,12469 @@ +From 474309ccd09c707c5a111dcbd56f95fb93354037 Mon Sep 17 00:00:00 2001 +Message-Id: <474309ccd09c707c5a111dcbd56f95fb93354037.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:17 +0100 +Subject: [PATCH 34/56] acpi: pre-compiled ASL files + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-35-git-send-email-mst@redhat.com> +Patchwork-id: 56340 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 34/57] acpi: pre-compiled ASL files +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Add pre-compiled ASL files. Useful for systems that +do not have IASL. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit d512d0d723cc3a08ac0409e1ab13edfa1cc04c70) +--- + hw/i386/acpi-dsdt.hex.generated | 4409 +++++++++++++++++++++ + hw/i386/q35-acpi-dsdt.hex.generated | 7346 +++++++++++++++++++++++++++++++++++ + hw/i386/ssdt-misc.hex.generated | 386 ++ + hw/i386/ssdt-pcihp.hex.generated | 108 + + hw/i386/ssdt-proc.hex.generated | 134 + + 5 files changed, 12383 insertions(+) + create mode 100644 hw/i386/acpi-dsdt.hex.generated + create mode 100644 hw/i386/q35-acpi-dsdt.hex.generated + create mode 100644 hw/i386/ssdt-misc.hex.generated + create mode 100644 hw/i386/ssdt-pcihp.hex.generated + create mode 100644 hw/i386/ssdt-proc.hex.generated + +Signed-off-by: Michal Novotny +--- + hw/i386/acpi-dsdt.hex.generated | 4409 +++++++++++++++++++++ + hw/i386/q35-acpi-dsdt.hex.generated | 7346 +++++++++++++++++++++++++++++++++++ + hw/i386/ssdt-misc.hex.generated | 386 ++ + hw/i386/ssdt-pcihp.hex.generated | 108 + + hw/i386/ssdt-proc.hex.generated | 134 + + 5 files changed, 12383 insertions(+) + create mode 100644 hw/i386/acpi-dsdt.hex.generated + create mode 100644 hw/i386/q35-acpi-dsdt.hex.generated + create mode 100644 hw/i386/ssdt-misc.hex.generated + create mode 100644 hw/i386/ssdt-pcihp.hex.generated + create mode 100644 hw/i386/ssdt-proc.hex.generated + +diff --git a/hw/i386/acpi-dsdt.hex.generated b/hw/i386/acpi-dsdt.hex.generated +new file mode 100644 +index 0000000..2c01107 +--- /dev/null ++++ b/hw/i386/acpi-dsdt.hex.generated +@@ -0,0 +1,4409 @@ ++static unsigned char AcpiDsdtAmlCode[] = { ++0x44, ++0x53, ++0x44, ++0x54, ++0x37, ++0x11, ++0x0, ++0x0, ++0x1, ++0xe0, ++0x42, ++0x58, ++0x50, ++0x43, ++0x0, ++0x0, ++0x42, ++0x58, ++0x44, ++0x53, ++0x44, ++0x54, ++0x0, ++0x0, ++0x1, ++0x0, ++0x0, ++0x0, ++0x49, ++0x4e, ++0x54, ++0x4c, ++0x23, ++0x8, ++0x13, ++0x20, ++0x10, ++0x49, ++0x4, ++0x5c, ++0x0, ++0x5b, ++0x80, ++0x44, ++0x42, ++0x47, ++0x5f, ++0x1, ++0xb, ++0x2, ++0x4, ++0x1, ++0x5b, ++0x81, ++0xb, ++0x44, ++0x42, ++0x47, ++0x5f, ++0x1, ++0x44, ++0x42, ++0x47, ++0x42, ++0x8, ++0x14, ++0x2c, ++0x44, ++0x42, ++0x55, ++0x47, ++0x1, ++0x98, ++0x68, ++0x60, ++0x96, ++0x60, ++0x60, ++0x74, ++0x87, ++0x60, ++0x1, ++0x61, ++0x70, ++0x0, ++0x62, ++0xa2, ++0x10, ++0x95, ++0x62, ++0x61, ++0x70, ++0x83, ++0x88, ++0x60, ++0x62, ++0x0, ++0x44, ++0x42, ++0x47, ++0x42, ++0x75, ++0x62, ++0x70, ++0xa, ++0xa, ++0x44, ++0x42, ++0x47, ++0x42, ++0x10, ++0x22, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x5b, ++0x82, ++0x1b, ++0x50, ++0x43, ++0x49, ++0x30, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xa, ++0x3, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0x0, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x1, ++0x10, ++0x4e, ++0x15, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x8, ++0x43, ++0x52, ++0x45, ++0x53, ++0x11, ++0x42, ++0x7, ++0xa, ++0x6e, ++0x88, ++0xd, ++0x0, ++0x2, ++0xc, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xff, ++0x0, ++0x0, ++0x0, ++0x0, ++0x1, ++0x47, ++0x1, ++0xf8, ++0xc, ++0xf8, ++0xc, ++0x1, ++0x8, ++0x88, ++0xd, ++0x0, ++0x1, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0x0, ++0xf7, ++0xc, ++0x0, ++0x0, ++0xf8, ++0xc, ++0x88, ++0xd, ++0x0, ++0x1, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0xd, ++0xff, ++0xff, ++0x0, ++0x0, ++0x0, ++0xf3, ++0x87, ++0x17, ++0x0, ++0x0, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0xff, ++0xff, ++0xb, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x2, ++0x0, ++0x87, ++0x17, ++0x0, ++0x0, ++0xc, ++0x1, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xe0, ++0xff, ++0xff, ++0xbf, ++0xfe, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xc0, ++0x1e, ++0x79, ++0x0, ++0x8, ++0x43, ++0x52, ++0x36, ++0x34, ++0x11, ++0x33, ++0xa, ++0x30, ++0x8a, ++0x2b, ++0x0, ++0x0, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x80, ++0x0, ++0x0, ++0x0, ++0xff, ++0xff, ++0xff, ++0xff, ++0xff, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x80, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x41, ++0xa, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0x8a, ++0x43, ++0x52, ++0x45, ++0x53, ++0xa, ++0x5c, ++0x50, ++0x53, ++0x33, ++0x32, ++0x8a, ++0x43, ++0x52, ++0x45, ++0x53, ++0xa, ++0x60, ++0x50, ++0x45, ++0x33, ++0x32, ++0x8a, ++0x43, ++0x52, ++0x45, ++0x53, ++0xa, ++0x68, ++0x50, ++0x4c, ++0x33, ++0x32, ++0x70, ++0x50, ++0x30, ++0x53, ++0x5f, ++0x50, ++0x53, ++0x33, ++0x32, ++0x70, ++0x50, ++0x30, ++0x45, ++0x5f, ++0x50, ++0x45, ++0x33, ++0x32, ++0x70, ++0x72, ++0x74, ++0x50, ++0x30, ++0x45, ++0x5f, ++0x50, ++0x30, ++0x53, ++0x5f, ++0x0, ++0x1, ++0x0, ++0x50, ++0x4c, ++0x33, ++0x32, ++0xa0, ++0xc, ++0x93, ++0x50, ++0x31, ++0x56, ++0x5f, ++0x0, ++0xa4, ++0x43, ++0x52, ++0x45, ++0x53, ++0x8f, ++0x43, ++0x52, ++0x36, ++0x34, ++0xa, ++0xe, ++0x50, ++0x53, ++0x36, ++0x34, ++0x8f, ++0x43, ++0x52, ++0x36, ++0x34, ++0xa, ++0x16, ++0x50, ++0x45, ++0x36, ++0x34, ++0x8f, ++0x43, ++0x52, ++0x36, ++0x34, ++0xa, ++0x26, ++0x50, ++0x4c, ++0x36, ++0x34, ++0x70, ++0x50, ++0x31, ++0x53, ++0x5f, ++0x50, ++0x53, ++0x36, ++0x34, ++0x70, ++0x50, ++0x31, ++0x45, ++0x5f, ++0x50, ++0x45, ++0x36, ++0x34, ++0x70, ++0x50, ++0x31, ++0x4c, ++0x5f, ++0x50, ++0x4c, ++0x36, ++0x34, ++0x84, ++0x43, ++0x52, ++0x45, ++0x53, ++0x43, ++0x52, ++0x36, ++0x34, ++0x60, ++0xa4, ++0x60, ++0x10, ++0x4d, ++0x8, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x5b, ++0x82, ++0x45, ++0x8, ++0x48, ++0x50, ++0x45, ++0x54, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x1, ++0x3, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x5b, ++0x80, ++0x48, ++0x50, ++0x54, ++0x4d, ++0x0, ++0xc, ++0x0, ++0x0, ++0xd0, ++0xfe, ++0xb, ++0x0, ++0x4, ++0x5b, ++0x81, ++0x10, ++0x48, ++0x50, ++0x54, ++0x4d, ++0x13, ++0x56, ++0x45, ++0x4e, ++0x44, ++0x20, ++0x50, ++0x52, ++0x44, ++0x5f, ++0x20, ++0x14, ++0x36, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x56, ++0x45, ++0x4e, ++0x44, ++0x60, ++0x70, ++0x50, ++0x52, ++0x44, ++0x5f, ++0x61, ++0x7a, ++0x60, ++0xa, ++0x10, ++0x60, ++0xa0, ++0xc, ++0x91, ++0x93, ++0x60, ++0x0, ++0x93, ++0x60, ++0xb, ++0xff, ++0xff, ++0xa4, ++0x0, ++0xa0, ++0xe, ++0x91, ++0x93, ++0x61, ++0x0, ++0x94, ++0x61, ++0xc, ++0x0, ++0xe1, ++0xf5, ++0x5, ++0xa4, ++0x0, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x11, ++0xa, ++0xe, ++0x86, ++0x9, ++0x0, ++0x0, ++0x0, ++0x0, ++0xd0, ++0xfe, ++0x0, ++0x4, ++0x0, ++0x0, ++0x79, ++0x0, ++0x10, ++0x40, ++0x6, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x43, ++0x5, ++0x56, ++0x47, ++0x41, ++0x5f, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0xc, ++0x0, ++0x0, ++0x2, ++0x0, ++0x5b, ++0x80, ++0x50, ++0x43, ++0x49, ++0x43, ++0x2, ++0x0, ++0xa, ++0x4, ++0x5b, ++0x81, ++0xb, ++0x50, ++0x43, ++0x49, ++0x43, ++0x3, ++0x56, ++0x45, ++0x4e, ++0x44, ++0x20, ++0x14, ++0x8, ++0x5f, ++0x53, ++0x31, ++0x44, ++0x0, ++0xa4, ++0x0, ++0x14, ++0x8, ++0x5f, ++0x53, ++0x32, ++0x44, ++0x0, ++0xa4, ++0x0, ++0x14, ++0x19, ++0x5f, ++0x53, ++0x33, ++0x44, ++0x0, ++0xa0, ++0xe, ++0x93, ++0x56, ++0x45, ++0x4e, ++0x44, ++0xc, ++0x36, ++0x1b, ++0x0, ++0x1, ++0xa4, ++0xa, ++0x3, ++0xa1, ++0x3, ++0xa4, ++0x0, ++0x10, ++0x25, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x19, ++0x50, ++0x58, ++0x31, ++0x33, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0xc, ++0x3, ++0x0, ++0x1, ++0x0, ++0x5b, ++0x80, ++0x50, ++0x31, ++0x33, ++0x43, ++0x2, ++0x0, ++0xa, ++0xff, ++0x10, ++0x46, ++0x5, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x49, ++0x4, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0xc, ++0x0, ++0x0, ++0x1, ++0x0, ++0x5b, ++0x80, ++0x50, ++0x34, ++0x30, ++0x43, ++0x2, ++0xa, ++0x60, ++0xa, ++0x4, ++0x5b, ++0x81, ++0x26, ++0x5e, ++0x2e, ++0x50, ++0x58, ++0x31, ++0x33, ++0x50, ++0x31, ++0x33, ++0x43, ++0x0, ++0x0, ++0x48, ++0x2f, ++0x0, ++0x7, ++0x4c, ++0x50, ++0x45, ++0x4e, ++0x1, ++0x0, ++0x38, ++0x0, ++0x3, ++0x43, ++0x41, ++0x45, ++0x4e, ++0x1, ++0x0, ++0x3, ++0x43, ++0x42, ++0x45, ++0x4e, ++0x1, ++0x8, ++0x46, ++0x44, ++0x45, ++0x4e, ++0x1, ++0x10, ++0x4c, ++0x1b, ++0x2f, ++0x3, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x5b, ++0x82, ++0x2d, ++0x52, ++0x54, ++0x43, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xb, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x18, ++0xa, ++0x15, ++0x47, ++0x1, ++0x70, ++0x0, ++0x70, ++0x0, ++0x10, ++0x2, ++0x22, ++0x0, ++0x1, ++0x47, ++0x1, ++0x72, ++0x0, ++0x72, ++0x0, ++0x2, ++0x6, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x37, ++0x4b, ++0x42, ++0x44, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x3, ++0x3, ++0x14, ++0x9, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x18, ++0xa, ++0x15, ++0x47, ++0x1, ++0x60, ++0x0, ++0x60, ++0x0, ++0x1, ++0x1, ++0x47, ++0x1, ++0x64, ++0x0, ++0x64, ++0x0, ++0x1, ++0x1, ++0x22, ++0x2, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x27, ++0x4d, ++0x4f, ++0x55, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xf, ++0x13, ++0x14, ++0x9, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x8, ++0xa, ++0x5, ++0x22, ++0x0, ++0x10, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x4a, ++0x4, ++0x46, ++0x44, ++0x43, ++0x30, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x7, ++0x0, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x46, ++0x44, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x1b, ++0xa, ++0x18, ++0x47, ++0x1, ++0xf2, ++0x3, ++0xf2, ++0x3, ++0x0, ++0x4, ++0x47, ++0x1, ++0xf7, ++0x3, ++0xf7, ++0x3, ++0x0, ++0x1, ++0x22, ++0x40, ++0x0, ++0x2a, ++0x4, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x3e, ++0x4c, ++0x50, ++0x54, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x4, ++0x0, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x4c, ++0x50, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x10, ++0xa, ++0xd, ++0x47, ++0x1, ++0x78, ++0x3, ++0x78, ++0x3, ++0x8, ++0x8, ++0x22, ++0x80, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x43, ++0x4f, ++0x4d, ++0x31, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x5, ++0x1, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x1, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x43, ++0x41, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x10, ++0xa, ++0xd, ++0x47, ++0x1, ++0xf8, ++0x3, ++0xf8, ++0x3, ++0x0, ++0x8, ++0x22, ++0x10, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x46, ++0x4, ++0x43, ++0x4f, ++0x4d, ++0x32, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x5, ++0x1, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x2, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x43, ++0x42, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x10, ++0xa, ++0xd, ++0x47, ++0x1, ++0xf8, ++0x2, ++0xf8, ++0x2, ++0x0, ++0x8, ++0x22, ++0x8, ++0x0, ++0x79, ++0x0, ++0x10, ++0x4b, ++0x8, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x80, ++0x50, ++0x43, ++0x53, ++0x54, ++0x1, ++0xb, ++0x0, ++0xae, ++0xa, ++0x8, ++0x5b, ++0x81, ++0x10, ++0x50, ++0x43, ++0x53, ++0x54, ++0x43, ++0x50, ++0x43, ++0x49, ++0x55, ++0x20, ++0x50, ++0x43, ++0x49, ++0x44, ++0x20, ++0x5b, ++0x80, ++0x53, ++0x45, ++0x4a, ++0x5f, ++0x1, ++0xb, ++0x8, ++0xae, ++0xa, ++0x4, ++0x5b, ++0x81, ++0xb, ++0x53, ++0x45, ++0x4a, ++0x5f, ++0x43, ++0x42, ++0x30, ++0x45, ++0x4a, ++0x20, ++0x14, ++0x11, ++0x50, ++0x43, ++0x45, ++0x4a, ++0x1, ++0x70, ++0x79, ++0x1, ++0x68, ++0x0, ++0x42, ++0x30, ++0x45, ++0x4a, ++0xa4, ++0x0, ++0x14, ++0x36, ++0x50, ++0x43, ++0x4e, ++0x46, ++0x0, ++0x70, ++0x0, ++0x60, ++0xa2, ++0x2c, ++0x95, ++0x60, ++0xa, ++0x1f, ++0x75, ++0x60, ++0xa0, ++0x11, ++0x7b, ++0x50, ++0x43, ++0x49, ++0x55, ++0x79, ++0x1, ++0x60, ++0x0, ++0x0, ++0x50, ++0x43, ++0x4e, ++0x54, ++0x60, ++0x1, ++0xa0, ++0x12, ++0x7b, ++0x50, ++0x43, ++0x49, ++0x44, ++0x79, ++0x1, ++0x60, ++0x0, ++0x0, ++0x50, ++0x43, ++0x4e, ++0x54, ++0x60, ++0xa, ++0x3, ++0x10, ++0x4a, ++0xa0, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x10, ++0x47, ++0x74, ++0x50, ++0x43, ++0x49, ++0x30, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x54, ++0x12, ++0x4b, ++0x73, ++0x80, ++0x12, ++0xb, ++0x4, ++0xb, ++0xff, ++0xff, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xb, ++0x4, ++0xb, ++0xff, ++0xff, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xc, ++0x4, ++0xb, ++0xff, ++0xff, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xc, ++0x4, ++0xb, ++0xff, ++0xff, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x53, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x5b, ++0x81, ++0x24, ++0x2f, ++0x3, ++0x50, ++0x43, ++0x49, ++0x30, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x50, ++0x34, ++0x30, ++0x43, ++0x1, ++0x50, ++0x52, ++0x51, ++0x30, ++0x8, ++0x50, ++0x52, ++0x51, ++0x31, ++0x8, ++0x50, ++0x52, ++0x51, ++0x32, ++0x8, ++0x50, ++0x52, ++0x51, ++0x33, ++0x8, ++0x14, ++0x13, ++0x49, ++0x51, ++0x53, ++0x54, ++0x1, ++0xa0, ++0x9, ++0x7b, ++0xa, ++0x80, ++0x68, ++0x0, ++0xa4, ++0xa, ++0x9, ++0xa4, ++0xa, ++0xb, ++0x14, ++0x36, ++0x49, ++0x51, ++0x43, ++0x52, ++0x1, ++0x8, ++0x50, ++0x52, ++0x52, ++0x30, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x0, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8a, ++0x50, ++0x52, ++0x52, ++0x30, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0xa0, ++0xb, ++0x95, ++0x68, ++0xa, ++0x80, ++0x70, ++0x68, ++0x50, ++0x52, ++0x52, ++0x49, ++0xa4, ++0x50, ++0x52, ++0x52, ++0x30, ++0x5b, ++0x82, ++0x4c, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x30, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x30, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x30, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x30, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x30, ++0x5b, ++0x82, ++0x4c, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x1, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x31, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x31, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x31, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x31, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x31, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x2, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x32, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x32, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x32, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x32, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x32, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x3, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x33, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x33, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x33, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x33, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x33, ++0x5b, ++0x82, ++0x4f, ++0x4, ++0x4c, ++0x4e, ++0x4b, ++0x53, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x4, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x9, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x9, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0xa, ++0xb, ++0x14, ++0x6, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x14, ++0xb, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x10, ++0x47, ++0xe, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x14, ++0x35, ++0x43, ++0x50, ++0x4d, ++0x41, ++0x1, ++0x70, ++0x83, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x68, ++0x0, ++0x60, ++0x70, ++0x11, ++0xb, ++0xa, ++0x8, ++0x0, ++0x8, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x61, ++0x70, ++0x68, ++0x88, ++0x61, ++0xa, ++0x2, ++0x0, ++0x70, ++0x68, ++0x88, ++0x61, ++0xa, ++0x3, ++0x0, ++0x70, ++0x60, ++0x88, ++0x61, ++0xa, ++0x4, ++0x0, ++0xa4, ++0x61, ++0x14, ++0x1a, ++0x43, ++0x50, ++0x53, ++0x54, ++0x1, ++0x70, ++0x83, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x68, ++0x0, ++0x60, ++0xa0, ++0x5, ++0x60, ++0xa4, ++0xa, ++0xf, ++0xa1, ++0x3, ++0xa4, ++0x0, ++0x14, ++0xa, ++0x43, ++0x50, ++0x45, ++0x4a, ++0x2, ++0x5b, ++0x22, ++0xa, ++0xc8, ++0x5b, ++0x80, ++0x50, ++0x52, ++0x53, ++0x54, ++0x1, ++0xb, ++0x0, ++0xaf, ++0xa, ++0x20, ++0x5b, ++0x81, ++0xc, ++0x50, ++0x52, ++0x53, ++0x54, ++0x1, ++0x50, ++0x52, ++0x53, ++0x5f, ++0x40, ++0x10, ++0x14, ++0x4a, ++0x6, ++0x50, ++0x52, ++0x53, ++0x43, ++0x0, ++0x70, ++0x50, ++0x52, ++0x53, ++0x5f, ++0x65, ++0x70, ++0x0, ++0x62, ++0x70, ++0x0, ++0x60, ++0xa2, ++0x46, ++0x5, ++0x95, ++0x60, ++0x87, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x70, ++0x83, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x60, ++0x0, ++0x61, ++0xa0, ++0xa, ++0x7b, ++0x60, ++0xa, ++0x7, ++0x0, ++0x7a, ++0x62, ++0x1, ++0x62, ++0xa1, ++0xc, ++0x70, ++0x83, ++0x88, ++0x65, ++0x7a, ++0x60, ++0xa, ++0x3, ++0x0, ++0x0, ++0x62, ++0x70, ++0x7b, ++0x62, ++0x1, ++0x0, ++0x63, ++0xa0, ++0x22, ++0x92, ++0x93, ++0x61, ++0x63, ++0x70, ++0x63, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x60, ++0x0, ++0xa0, ++0xa, ++0x93, ++0x63, ++0x1, ++0x4e, ++0x54, ++0x46, ++0x59, ++0x60, ++0x1, ++0xa1, ++0x8, ++0x4e, ++0x54, ++0x46, ++0x59, ++0x60, ++0xa, ++0x3, ++0x75, ++0x60, ++0x10, ++0x4e, ++0x9, ++0x5f, ++0x47, ++0x50, ++0x45, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xd, ++0x41, ++0x43, ++0x50, ++0x49, ++0x30, ++0x30, ++0x30, ++0x36, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x30, ++0x0, ++0x14, ++0x15, ++0x5f, ++0x45, ++0x30, ++0x31, ++0x0, ++0x5c, ++0x2f, ++0x3, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x50, ++0x43, ++0x4e, ++0x46, ++0x14, ++0x10, ++0x5f, ++0x45, ++0x30, ++0x32, ++0x0, ++0x5c, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x43, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x33, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x34, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x35, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x36, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x37, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x38, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x39, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x41, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x42, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x43, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x44, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x45, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x46, ++0x0 ++}; +diff --git a/hw/i386/q35-acpi-dsdt.hex.generated b/hw/i386/q35-acpi-dsdt.hex.generated +new file mode 100644 +index 0000000..32c16ff +--- /dev/null ++++ b/hw/i386/q35-acpi-dsdt.hex.generated +@@ -0,0 +1,7346 @@ ++static unsigned char Q35AcpiDsdtAmlCode[] = { ++0x44, ++0x53, ++0x44, ++0x54, ++0xb0, ++0x1c, ++0x0, ++0x0, ++0x1, ++0x6, ++0x42, ++0x58, ++0x50, ++0x43, ++0x0, ++0x0, ++0x42, ++0x58, ++0x44, ++0x53, ++0x44, ++0x54, ++0x0, ++0x0, ++0x2, ++0x0, ++0x0, ++0x0, ++0x49, ++0x4e, ++0x54, ++0x4c, ++0x23, ++0x8, ++0x13, ++0x20, ++0x10, ++0x49, ++0x4, ++0x5c, ++0x0, ++0x5b, ++0x80, ++0x44, ++0x42, ++0x47, ++0x5f, ++0x1, ++0xb, ++0x2, ++0x4, ++0x1, ++0x5b, ++0x81, ++0xb, ++0x44, ++0x42, ++0x47, ++0x5f, ++0x1, ++0x44, ++0x42, ++0x47, ++0x42, ++0x8, ++0x14, ++0x2c, ++0x44, ++0x42, ++0x55, ++0x47, ++0x1, ++0x98, ++0x68, ++0x60, ++0x96, ++0x60, ++0x60, ++0x74, ++0x87, ++0x60, ++0x1, ++0x61, ++0x70, ++0x0, ++0x62, ++0xa2, ++0x10, ++0x95, ++0x62, ++0x61, ++0x70, ++0x83, ++0x88, ++0x60, ++0x62, ++0x0, ++0x44, ++0x42, ++0x47, ++0x42, ++0x75, ++0x62, ++0x70, ++0xa, ++0xa, ++0x44, ++0x42, ++0x47, ++0x42, ++0x10, ++0x29, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x5b, ++0x80, ++0x50, ++0x43, ++0x53, ++0x54, ++0x1, ++0xb, ++0x0, ++0xae, ++0xa, ++0xc, ++0x5b, ++0x80, ++0x50, ++0x43, ++0x53, ++0x42, ++0x1, ++0xb, ++0xc, ++0xae, ++0x1, ++0x5b, ++0x81, ++0xb, ++0x50, ++0x43, ++0x53, ++0x42, ++0x40, ++0x50, ++0x43, ++0x49, ++0x42, ++0x8, ++0x10, ++0x4f, ++0xc, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x5b, ++0x82, ++0x47, ++0xc, ++0x50, ++0x43, ++0x49, ++0x30, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xa, ++0x8, ++0x8, ++0x5f, ++0x43, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xa, ++0x3, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0x0, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x1, ++0x8, ++0x53, ++0x55, ++0x50, ++0x50, ++0x0, ++0x8, ++0x43, ++0x54, ++0x52, ++0x4c, ++0x0, ++0x14, ++0x44, ++0x9, ++0x5f, ++0x4f, ++0x53, ++0x43, ++0x4, ++0x8a, ++0x6b, ++0x0, ++0x43, ++0x44, ++0x57, ++0x31, ++0xa0, ++0x46, ++0x7, ++0x93, ++0x68, ++0x11, ++0x13, ++0xa, ++0x10, ++0x5b, ++0x4d, ++0xdb, ++0x33, ++0xf7, ++0x1f, ++0x1c, ++0x40, ++0x96, ++0x57, ++0x74, ++0x41, ++0xc0, ++0x3d, ++0xd7, ++0x66, ++0x8a, ++0x6b, ++0xa, ++0x4, ++0x43, ++0x44, ++0x57, ++0x32, ++0x8a, ++0x6b, ++0xa, ++0x8, ++0x43, ++0x44, ++0x57, ++0x33, ++0x70, ++0x43, ++0x44, ++0x57, ++0x32, ++0x53, ++0x55, ++0x50, ++0x50, ++0x70, ++0x43, ++0x44, ++0x57, ++0x33, ++0x43, ++0x54, ++0x52, ++0x4c, ++0x7b, ++0x43, ++0x54, ++0x52, ++0x4c, ++0xa, ++0x1d, ++0x43, ++0x54, ++0x52, ++0x4c, ++0xa0, ++0x10, ++0x92, ++0x93, ++0x69, ++0x1, ++0x7d, ++0x43, ++0x44, ++0x57, ++0x31, ++0xa, ++0x8, ++0x43, ++0x44, ++0x57, ++0x31, ++0xa0, ++0x16, ++0x92, ++0x93, ++0x43, ++0x44, ++0x57, ++0x33, ++0x43, ++0x54, ++0x52, ++0x4c, ++0x7d, ++0x43, ++0x44, ++0x57, ++0x31, ++0xa, ++0x10, ++0x43, ++0x44, ++0x57, ++0x31, ++0x70, ++0x43, ++0x54, ++0x52, ++0x4c, ++0x43, ++0x44, ++0x57, ++0x33, ++0xa1, ++0xc, ++0x7d, ++0x43, ++0x44, ++0x57, ++0x31, ++0xa, ++0x4, ++0x43, ++0x44, ++0x57, ++0x31, ++0xa4, ++0x6b, ++0x10, ++0x4e, ++0x15, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x8, ++0x43, ++0x52, ++0x45, ++0x53, ++0x11, ++0x42, ++0x7, ++0xa, ++0x6e, ++0x88, ++0xd, ++0x0, ++0x2, ++0xc, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xff, ++0x0, ++0x0, ++0x0, ++0x0, ++0x1, ++0x47, ++0x1, ++0xf8, ++0xc, ++0xf8, ++0xc, ++0x1, ++0x8, ++0x88, ++0xd, ++0x0, ++0x1, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0x0, ++0xf7, ++0xc, ++0x0, ++0x0, ++0xf8, ++0xc, ++0x88, ++0xd, ++0x0, ++0x1, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0xd, ++0xff, ++0xff, ++0x0, ++0x0, ++0x0, ++0xf3, ++0x87, ++0x17, ++0x0, ++0x0, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0xff, ++0xff, ++0xb, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x2, ++0x0, ++0x87, ++0x17, ++0x0, ++0x0, ++0xc, ++0x1, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xe0, ++0xff, ++0xff, ++0xbf, ++0xfe, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0xc0, ++0x1e, ++0x79, ++0x0, ++0x8, ++0x43, ++0x52, ++0x36, ++0x34, ++0x11, ++0x33, ++0xa, ++0x30, ++0x8a, ++0x2b, ++0x0, ++0x0, ++0xc, ++0x3, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x80, ++0x0, ++0x0, ++0x0, ++0xff, ++0xff, ++0xff, ++0xff, ++0xff, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x80, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x41, ++0xa, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0x8a, ++0x43, ++0x52, ++0x45, ++0x53, ++0xa, ++0x5c, ++0x50, ++0x53, ++0x33, ++0x32, ++0x8a, ++0x43, ++0x52, ++0x45, ++0x53, ++0xa, ++0x60, ++0x50, ++0x45, ++0x33, ++0x32, ++0x8a, ++0x43, ++0x52, ++0x45, ++0x53, ++0xa, ++0x68, ++0x50, ++0x4c, ++0x33, ++0x32, ++0x70, ++0x50, ++0x30, ++0x53, ++0x5f, ++0x50, ++0x53, ++0x33, ++0x32, ++0x70, ++0x50, ++0x30, ++0x45, ++0x5f, ++0x50, ++0x45, ++0x33, ++0x32, ++0x70, ++0x72, ++0x74, ++0x50, ++0x30, ++0x45, ++0x5f, ++0x50, ++0x30, ++0x53, ++0x5f, ++0x0, ++0x1, ++0x0, ++0x50, ++0x4c, ++0x33, ++0x32, ++0xa0, ++0xc, ++0x93, ++0x50, ++0x31, ++0x56, ++0x5f, ++0x0, ++0xa4, ++0x43, ++0x52, ++0x45, ++0x53, ++0x8f, ++0x43, ++0x52, ++0x36, ++0x34, ++0xa, ++0xe, ++0x50, ++0x53, ++0x36, ++0x34, ++0x8f, ++0x43, ++0x52, ++0x36, ++0x34, ++0xa, ++0x16, ++0x50, ++0x45, ++0x36, ++0x34, ++0x8f, ++0x43, ++0x52, ++0x36, ++0x34, ++0xa, ++0x26, ++0x50, ++0x4c, ++0x36, ++0x34, ++0x70, ++0x50, ++0x31, ++0x53, ++0x5f, ++0x50, ++0x53, ++0x36, ++0x34, ++0x70, ++0x50, ++0x31, ++0x45, ++0x5f, ++0x50, ++0x45, ++0x36, ++0x34, ++0x70, ++0x50, ++0x31, ++0x4c, ++0x5f, ++0x50, ++0x4c, ++0x36, ++0x34, ++0x84, ++0x43, ++0x52, ++0x45, ++0x53, ++0x43, ++0x52, ++0x36, ++0x34, ++0x60, ++0xa4, ++0x60, ++0x10, ++0x4d, ++0x8, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x5b, ++0x82, ++0x45, ++0x8, ++0x48, ++0x50, ++0x45, ++0x54, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x1, ++0x3, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x5b, ++0x80, ++0x48, ++0x50, ++0x54, ++0x4d, ++0x0, ++0xc, ++0x0, ++0x0, ++0xd0, ++0xfe, ++0xb, ++0x0, ++0x4, ++0x5b, ++0x81, ++0x10, ++0x48, ++0x50, ++0x54, ++0x4d, ++0x13, ++0x56, ++0x45, ++0x4e, ++0x44, ++0x20, ++0x50, ++0x52, ++0x44, ++0x5f, ++0x20, ++0x14, ++0x36, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x56, ++0x45, ++0x4e, ++0x44, ++0x60, ++0x70, ++0x50, ++0x52, ++0x44, ++0x5f, ++0x61, ++0x7a, ++0x60, ++0xa, ++0x10, ++0x60, ++0xa0, ++0xc, ++0x91, ++0x93, ++0x60, ++0x0, ++0x93, ++0x60, ++0xb, ++0xff, ++0xff, ++0xa4, ++0x0, ++0xa0, ++0xe, ++0x91, ++0x93, ++0x61, ++0x0, ++0x94, ++0x61, ++0xc, ++0x0, ++0xe1, ++0xf5, ++0x5, ++0xa4, ++0x0, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x11, ++0xa, ++0xe, ++0x86, ++0x9, ++0x0, ++0x0, ++0x0, ++0x0, ++0xd0, ++0xfe, ++0x0, ++0x4, ++0x0, ++0x0, ++0x79, ++0x0, ++0x10, ++0x36, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x2a, ++0x56, ++0x47, ++0x41, ++0x5f, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0xc, ++0x0, ++0x0, ++0x1, ++0x0, ++0x14, ++0x8, ++0x5f, ++0x53, ++0x31, ++0x44, ++0x0, ++0xa4, ++0x0, ++0x14, ++0x8, ++0x5f, ++0x53, ++0x32, ++0x44, ++0x0, ++0xa4, ++0x0, ++0x14, ++0x8, ++0x5f, ++0x53, ++0x33, ++0x44, ++0x0, ++0xa4, ++0x0, ++0x10, ++0x4c, ++0x7, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x4f, ++0x6, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0xc, ++0x0, ++0x0, ++0x1f, ++0x0, ++0x5b, ++0x80, ++0x50, ++0x49, ++0x52, ++0x51, ++0x2, ++0xa, ++0x60, ++0xa, ++0xc, ++0x5b, ++0x80, ++0x4c, ++0x50, ++0x43, ++0x44, ++0x2, ++0xa, ++0x80, ++0xa, ++0x2, ++0x5b, ++0x81, ++0x20, ++0x4c, ++0x50, ++0x43, ++0x44, ++0x0, ++0x43, ++0x4f, ++0x4d, ++0x41, ++0x3, ++0x0, ++0x1, ++0x43, ++0x4f, ++0x4d, ++0x42, ++0x3, ++0x0, ++0x1, ++0x4c, ++0x50, ++0x54, ++0x44, ++0x2, ++0x0, ++0x2, ++0x46, ++0x44, ++0x43, ++0x44, ++0x2, ++0x5b, ++0x80, ++0x4c, ++0x50, ++0x43, ++0x45, ++0x2, ++0xa, ++0x82, ++0xa, ++0x2, ++0x5b, ++0x81, ++0x1a, ++0x4c, ++0x50, ++0x43, ++0x45, ++0x0, ++0x43, ++0x41, ++0x45, ++0x4e, ++0x1, ++0x43, ++0x42, ++0x45, ++0x4e, ++0x1, ++0x4c, ++0x50, ++0x45, ++0x4e, ++0x1, ++0x46, ++0x44, ++0x45, ++0x4e, ++0x1, ++0x10, ++0x4c, ++0x1b, ++0x2f, ++0x3, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x5b, ++0x82, ++0x2d, ++0x52, ++0x54, ++0x43, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xb, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x18, ++0xa, ++0x15, ++0x47, ++0x1, ++0x70, ++0x0, ++0x70, ++0x0, ++0x10, ++0x2, ++0x22, ++0x0, ++0x1, ++0x47, ++0x1, ++0x72, ++0x0, ++0x72, ++0x0, ++0x2, ++0x6, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x37, ++0x4b, ++0x42, ++0x44, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x3, ++0x3, ++0x14, ++0x9, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x18, ++0xa, ++0x15, ++0x47, ++0x1, ++0x60, ++0x0, ++0x60, ++0x0, ++0x1, ++0x1, ++0x47, ++0x1, ++0x64, ++0x0, ++0x64, ++0x0, ++0x1, ++0x1, ++0x22, ++0x2, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x27, ++0x4d, ++0x4f, ++0x55, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xf, ++0x13, ++0x14, ++0x9, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x8, ++0xa, ++0x5, ++0x22, ++0x0, ++0x10, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x4a, ++0x4, ++0x46, ++0x44, ++0x43, ++0x30, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x7, ++0x0, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x46, ++0x44, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x1b, ++0xa, ++0x18, ++0x47, ++0x1, ++0xf2, ++0x3, ++0xf2, ++0x3, ++0x0, ++0x4, ++0x47, ++0x1, ++0xf7, ++0x3, ++0xf7, ++0x3, ++0x0, ++0x1, ++0x22, ++0x40, ++0x0, ++0x2a, ++0x4, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x3e, ++0x4c, ++0x50, ++0x54, ++0x5f, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x4, ++0x0, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x4c, ++0x50, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x10, ++0xa, ++0xd, ++0x47, ++0x1, ++0x78, ++0x3, ++0x78, ++0x3, ++0x8, ++0x8, ++0x22, ++0x80, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x43, ++0x4f, ++0x4d, ++0x31, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x5, ++0x1, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x1, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x43, ++0x41, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x10, ++0xa, ++0xd, ++0x47, ++0x1, ++0xf8, ++0x3, ++0xf8, ++0x3, ++0x0, ++0x8, ++0x22, ++0x10, ++0x0, ++0x79, ++0x0, ++0x5b, ++0x82, ++0x46, ++0x4, ++0x43, ++0x4f, ++0x4d, ++0x32, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0x5, ++0x1, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x2, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x43, ++0x42, ++0x45, ++0x4e, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0x10, ++0xa, ++0xd, ++0x47, ++0x1, ++0xf8, ++0x2, ++0xf8, ++0x2, ++0x0, ++0x8, ++0x22, ++0x8, ++0x0, ++0x79, ++0x0, ++0x8, ++0x50, ++0x49, ++0x43, ++0x46, ++0x0, ++0x14, ++0xc, ++0x5f, ++0x50, ++0x49, ++0x43, ++0x1, ++0x70, ++0x68, ++0x50, ++0x49, ++0x43, ++0x46, ++0x10, ++0x8e, ++0x55, ++0x1, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x10, ++0x43, ++0xea, ++0x50, ++0x43, ++0x49, ++0x30, ++0x8, ++0x50, ++0x52, ++0x54, ++0x50, ++0x12, ++0x4b, ++0x73, ++0x80, ++0x12, ++0xb, ++0x4, ++0xb, ++0xff, ++0xff, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xb, ++0x4, ++0xb, ++0xff, ++0xff, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xc, ++0x4, ++0xb, ++0xff, ++0xff, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xc, ++0x4, ++0xb, ++0xff, ++0xff, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0x0, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0x1, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0xa, ++0x2, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0xa, ++0x3, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x0, ++0x8, ++0x50, ++0x52, ++0x54, ++0x41, ++0x12, ++0x4b, ++0x73, ++0x80, ++0x12, ++0xb, ++0x4, ++0xb, ++0xff, ++0xff, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xb, ++0x4, ++0xb, ++0xff, ++0xff, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xc, ++0x4, ++0xb, ++0xff, ++0xff, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xc, ++0x4, ++0xb, ++0xff, ++0xff, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x2, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x3, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x4, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x5, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x6, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x7, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x8, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x9, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xa, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xb, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xc, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xd, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xe, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0xf, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x10, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x11, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x12, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x13, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x14, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x15, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x16, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x17, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x18, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x19, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1a, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1b, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1c, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1d, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x44, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x45, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x46, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x47, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1e, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x48, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0x0, ++0x47, ++0x53, ++0x49, ++0x41, ++0x0, ++0x12, ++0xd, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0x1, ++0x47, ++0x53, ++0x49, ++0x42, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0xa, ++0x2, ++0x47, ++0x53, ++0x49, ++0x43, ++0x0, ++0x12, ++0xe, ++0x4, ++0xc, ++0xff, ++0xff, ++0x1f, ++0x0, ++0xa, ++0x3, ++0x47, ++0x53, ++0x49, ++0x44, ++0x0, ++0x14, ++0x1a, ++0x5f, ++0x50, ++0x52, ++0x54, ++0x0, ++0xa0, ++0xc, ++0x93, ++0x50, ++0x49, ++0x43, ++0x46, ++0x0, ++0xa4, ++0x50, ++0x52, ++0x54, ++0x50, ++0xa1, ++0x6, ++0xa4, ++0x50, ++0x52, ++0x54, ++0x41, ++0x5b, ++0x81, ++0x3a, ++0x2f, ++0x3, ++0x50, ++0x43, ++0x49, ++0x30, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x50, ++0x49, ++0x52, ++0x51, ++0x1, ++0x50, ++0x52, ++0x51, ++0x41, ++0x8, ++0x50, ++0x52, ++0x51, ++0x42, ++0x8, ++0x50, ++0x52, ++0x51, ++0x43, ++0x8, ++0x50, ++0x52, ++0x51, ++0x44, ++0x8, ++0x0, ++0x20, ++0x50, ++0x52, ++0x51, ++0x45, ++0x8, ++0x50, ++0x52, ++0x51, ++0x46, ++0x8, ++0x50, ++0x52, ++0x51, ++0x47, ++0x8, ++0x50, ++0x52, ++0x51, ++0x48, ++0x8, ++0x14, ++0x13, ++0x49, ++0x51, ++0x53, ++0x54, ++0x1, ++0xa0, ++0x9, ++0x7b, ++0xa, ++0x80, ++0x68, ++0x0, ++0xa4, ++0xa, ++0x9, ++0xa4, ++0xa, ++0xb, ++0x14, ++0x34, ++0x49, ++0x51, ++0x43, ++0x52, ++0x1, ++0x8, ++0x50, ++0x52, ++0x52, ++0x30, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x0, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8a, ++0x50, ++0x52, ++0x52, ++0x30, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x7b, ++0x68, ++0xa, ++0xf, ++0x0, ++0x50, ++0x52, ++0x52, ++0x49, ++0xa4, ++0x50, ++0x52, ++0x52, ++0x30, ++0x5b, ++0x82, ++0x4c, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x41, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x41, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x41, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x41, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x41, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x41, ++0x5b, ++0x82, ++0x4c, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x42, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x1, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x42, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x42, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x42, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x42, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x42, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x43, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x2, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x43, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x43, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x43, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x43, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x43, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x44, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x3, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x44, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x44, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x44, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x44, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x44, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x45, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x4, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x45, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x45, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x45, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x45, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x45, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x46, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x5, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x46, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x46, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x46, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x46, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x46, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x47, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x6, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x47, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x47, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x47, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x47, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x47, ++0x5b, ++0x82, ++0x4d, ++0x7, ++0x4c, ++0x4e, ++0x4b, ++0x48, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0xa, ++0x7, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0x16, ++0xa, ++0x13, ++0x89, ++0xe, ++0x0, ++0x9, ++0x3, ++0x5, ++0x0, ++0x0, ++0x0, ++0xa, ++0x0, ++0x0, ++0x0, ++0xb, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x53, ++0x54, ++0x50, ++0x52, ++0x51, ++0x48, ++0x14, ++0x11, ++0x5f, ++0x44, ++0x49, ++0x53, ++0x0, ++0x7d, ++0x50, ++0x52, ++0x51, ++0x48, ++0xa, ++0x80, ++0x50, ++0x52, ++0x51, ++0x48, ++0x14, ++0xf, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x0, ++0xa4, ++0x49, ++0x51, ++0x43, ++0x52, ++0x50, ++0x52, ++0x51, ++0x48, ++0x14, ++0x17, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x8a, ++0x68, ++0xa, ++0x5, ++0x50, ++0x52, ++0x52, ++0x49, ++0x70, ++0x50, ++0x52, ++0x52, ++0x49, ++0x50, ++0x52, ++0x51, ++0x48, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x41, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x10, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x10, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x42, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x11, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x11, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x43, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x12, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x12, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x44, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x13, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x13, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x45, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x14, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x14, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x46, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x15, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x15, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x47, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x16, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x16, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x5b, ++0x82, ++0x45, ++0x4, ++0x47, ++0x53, ++0x49, ++0x48, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xc, ++0x41, ++0xd0, ++0xc, ++0xf, ++0x8, ++0x5f, ++0x55, ++0x49, ++0x44, ++0x0, ++0x8, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x17, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xe, ++0xa, ++0xb, ++0x89, ++0x6, ++0x0, ++0x9, ++0x1, ++0x17, ++0x0, ++0x0, ++0x0, ++0x79, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x53, ++0x52, ++0x53, ++0x1, ++0x10, ++0x47, ++0xe, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x14, ++0x35, ++0x43, ++0x50, ++0x4d, ++0x41, ++0x1, ++0x70, ++0x83, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x68, ++0x0, ++0x60, ++0x70, ++0x11, ++0xb, ++0xa, ++0x8, ++0x0, ++0x8, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x61, ++0x70, ++0x68, ++0x88, ++0x61, ++0xa, ++0x2, ++0x0, ++0x70, ++0x68, ++0x88, ++0x61, ++0xa, ++0x3, ++0x0, ++0x70, ++0x60, ++0x88, ++0x61, ++0xa, ++0x4, ++0x0, ++0xa4, ++0x61, ++0x14, ++0x1a, ++0x43, ++0x50, ++0x53, ++0x54, ++0x1, ++0x70, ++0x83, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x68, ++0x0, ++0x60, ++0xa0, ++0x5, ++0x60, ++0xa4, ++0xa, ++0xf, ++0xa1, ++0x3, ++0xa4, ++0x0, ++0x14, ++0xa, ++0x43, ++0x50, ++0x45, ++0x4a, ++0x2, ++0x5b, ++0x22, ++0xa, ++0xc8, ++0x5b, ++0x80, ++0x50, ++0x52, ++0x53, ++0x54, ++0x1, ++0xb, ++0x0, ++0xaf, ++0xa, ++0x20, ++0x5b, ++0x81, ++0xc, ++0x50, ++0x52, ++0x53, ++0x54, ++0x1, ++0x50, ++0x52, ++0x53, ++0x5f, ++0x40, ++0x10, ++0x14, ++0x4a, ++0x6, ++0x50, ++0x52, ++0x53, ++0x43, ++0x0, ++0x70, ++0x50, ++0x52, ++0x53, ++0x5f, ++0x65, ++0x70, ++0x0, ++0x62, ++0x70, ++0x0, ++0x60, ++0xa2, ++0x46, ++0x5, ++0x95, ++0x60, ++0x87, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x70, ++0x83, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x60, ++0x0, ++0x61, ++0xa0, ++0xa, ++0x7b, ++0x60, ++0xa, ++0x7, ++0x0, ++0x7a, ++0x62, ++0x1, ++0x62, ++0xa1, ++0xc, ++0x70, ++0x83, ++0x88, ++0x65, ++0x7a, ++0x60, ++0xa, ++0x3, ++0x0, ++0x0, ++0x62, ++0x70, ++0x7b, ++0x62, ++0x1, ++0x0, ++0x63, ++0xa0, ++0x22, ++0x92, ++0x93, ++0x61, ++0x63, ++0x70, ++0x63, ++0x88, ++0x43, ++0x50, ++0x4f, ++0x4e, ++0x60, ++0x0, ++0xa0, ++0xa, ++0x93, ++0x63, ++0x1, ++0x4e, ++0x54, ++0x46, ++0x59, ++0x60, ++0x1, ++0xa1, ++0x8, ++0x4e, ++0x54, ++0x46, ++0x59, ++0x60, ++0xa, ++0x3, ++0x75, ++0x60, ++0x10, ++0x4f, ++0x8, ++0x5f, ++0x47, ++0x50, ++0x45, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xd, ++0x41, ++0x43, ++0x50, ++0x49, ++0x30, ++0x30, ++0x30, ++0x36, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x30, ++0x0, ++0x14, ++0x10, ++0x5f, ++0x4c, ++0x30, ++0x31, ++0x0, ++0x5c, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x52, ++0x53, ++0x43, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x32, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x33, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x34, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x35, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x36, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x37, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x38, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x39, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x41, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x42, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x43, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x44, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x45, ++0x0, ++0x14, ++0x6, ++0x5f, ++0x4c, ++0x30, ++0x46, ++0x0 ++}; +diff --git a/hw/i386/ssdt-misc.hex.generated b/hw/i386/ssdt-misc.hex.generated +new file mode 100644 +index 0000000..55e3bd2 +--- /dev/null ++++ b/hw/i386/ssdt-misc.hex.generated +@@ -0,0 +1,386 @@ ++static unsigned char acpi_pci64_length[] = { ++0x6f ++}; ++static unsigned char acpi_s4_pkg[] = { ++0x8f ++}; ++static unsigned char acpi_s3_name[] = { ++0x7c ++}; ++static unsigned char acpi_pci32_start[] = { ++0x2f ++}; ++static unsigned char acpi_pci64_valid[] = { ++0x43 ++}; ++static unsigned char ssdp_misc_aml[] = { ++0x53, ++0x53, ++0x44, ++0x54, ++0x62, ++0x1, ++0x0, ++0x0, ++0x1, ++0x76, ++0x42, ++0x58, ++0x50, ++0x43, ++0x0, ++0x0, ++0x42, ++0x58, ++0x53, ++0x53, ++0x44, ++0x54, ++0x53, ++0x55, ++0x1, ++0x0, ++0x0, ++0x0, ++0x49, ++0x4e, ++0x54, ++0x4c, ++0x23, ++0x8, ++0x13, ++0x20, ++0x10, ++0x42, ++0x5, ++0x5c, ++0x0, ++0x8, ++0x50, ++0x30, ++0x53, ++0x5f, ++0xc, ++0x78, ++0x56, ++0x34, ++0x12, ++0x8, ++0x50, ++0x30, ++0x45, ++0x5f, ++0xc, ++0x78, ++0x56, ++0x34, ++0x12, ++0x8, ++0x50, ++0x31, ++0x56, ++0x5f, ++0xa, ++0x12, ++0x8, ++0x50, ++0x31, ++0x53, ++0x5f, ++0x11, ++0xb, ++0xa, ++0x8, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x8, ++0x50, ++0x31, ++0x45, ++0x5f, ++0x11, ++0xb, ++0xa, ++0x8, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x8, ++0x50, ++0x31, ++0x4c, ++0x5f, ++0x11, ++0xb, ++0xa, ++0x8, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x0, ++0x10, ++0x29, ++0x5c, ++0x0, ++0x8, ++0x5f, ++0x53, ++0x33, ++0x5f, ++0x12, ++0x6, ++0x4, ++0x1, ++0x1, ++0x0, ++0x0, ++0x8, ++0x5f, ++0x53, ++0x34, ++0x5f, ++0x12, ++0x8, ++0x4, ++0xa, ++0x2, ++0xa, ++0x2, ++0x0, ++0x0, ++0x8, ++0x5f, ++0x53, ++0x35, ++0x5f, ++0x12, ++0x6, ++0x4, ++0x0, ++0x0, ++0x0, ++0x0, ++0x10, ++0x40, ++0xc, ++0x5c, ++0x2f, ++0x3, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x49, ++0x53, ++0x41, ++0x5f, ++0x5b, ++0x82, ++0x4d, ++0xa, ++0x50, ++0x45, ++0x56, ++0x54, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xd, ++0x51, ++0x45, ++0x4d, ++0x55, ++0x30, ++0x30, ++0x30, ++0x31, ++0x0, ++0x8, ++0x50, ++0x45, ++0x53, ++0x54, ++0xb, ++0xff, ++0xff, ++0x5b, ++0x80, ++0x50, ++0x45, ++0x4f, ++0x52, ++0x1, ++0x50, ++0x45, ++0x53, ++0x54, ++0x1, ++0x5b, ++0x81, ++0xb, ++0x50, ++0x45, ++0x4f, ++0x52, ++0x1, ++0x50, ++0x45, ++0x50, ++0x54, ++0x8, ++0x14, ++0x18, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0x70, ++0x50, ++0x45, ++0x53, ++0x54, ++0x60, ++0xa0, ++0x6, ++0x93, ++0x60, ++0x0, ++0xa4, ++0x0, ++0xa1, ++0x4, ++0xa4, ++0xa, ++0xf, ++0x14, ++0xe, ++0x52, ++0x44, ++0x50, ++0x54, ++0x0, ++0x70, ++0x50, ++0x45, ++0x50, ++0x54, ++0x60, ++0xa4, ++0x60, ++0x14, ++0xc, ++0x57, ++0x52, ++0x50, ++0x54, ++0x1, ++0x70, ++0x68, ++0x50, ++0x45, ++0x50, ++0x54, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xd, ++0xa, ++0xa, ++0x47, ++0x1, ++0x0, ++0x0, ++0x0, ++0x0, ++0x1, ++0x1, ++0x79, ++0x0, ++0x8b, ++0x5f, ++0x43, ++0x52, ++0x53, ++0xa, ++0x2, ++0x49, ++0x4f, ++0x4d, ++0x4e, ++0x8b, ++0x5f, ++0x43, ++0x52, ++0x53, ++0xa, ++0x4, ++0x49, ++0x4f, ++0x4d, ++0x58, ++0x14, ++0x18, ++0x5f, ++0x49, ++0x4e, ++0x49, ++0x0, ++0x70, ++0x50, ++0x45, ++0x53, ++0x54, ++0x49, ++0x4f, ++0x4d, ++0x4e, ++0x70, ++0x50, ++0x45, ++0x53, ++0x54, ++0x49, ++0x4f, ++0x4d, ++0x58 ++}; ++static unsigned char ssdt_isa_pest[] = { ++0xd0 ++}; ++static unsigned char acpi_s4_name[] = { ++0x88 ++}; ++static unsigned char acpi_pci64_start[] = { ++0x4d ++}; ++static unsigned char acpi_pci64_end[] = { ++0x5e ++}; ++static unsigned char acpi_pci32_end[] = { ++0x39 ++}; +diff --git a/hw/i386/ssdt-pcihp.hex.generated b/hw/i386/ssdt-pcihp.hex.generated +new file mode 100644 +index 0000000..0d32a27 +--- /dev/null ++++ b/hw/i386/ssdt-pcihp.hex.generated +@@ -0,0 +1,108 @@ ++static unsigned char ssdt_pcihp_name[] = { ++0x33 ++}; ++static unsigned char ssdt_pcihp_adr[] = { ++0x44 ++}; ++static unsigned char ssdt_pcihp_end[] = { ++0x58 ++}; ++static unsigned char ssdp_pcihp_aml[] = { ++0x53, ++0x53, ++0x44, ++0x54, ++0x58, ++0x0, ++0x0, ++0x0, ++0x1, ++0x77, ++0x42, ++0x58, ++0x50, ++0x43, ++0x0, ++0x0, ++0x42, ++0x58, ++0x53, ++0x53, ++0x44, ++0x54, ++0x50, ++0x43, ++0x1, ++0x0, ++0x0, ++0x0, ++0x49, ++0x4e, ++0x54, ++0x4c, ++0x28, ++0x5, ++0x10, ++0x20, ++0x10, ++0x33, ++0x5c, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x26, ++0x53, ++0x41, ++0x41, ++0x5f, ++0x8, ++0x5f, ++0x53, ++0x55, ++0x4e, ++0xa, ++0xaa, ++0x8, ++0x5f, ++0x41, ++0x44, ++0x52, ++0xc, ++0x0, ++0x0, ++0xaa, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x45, ++0x4a, ++0x30, ++0x1, ++0xa4, ++0x50, ++0x43, ++0x45, ++0x4a, ++0x5f, ++0x53, ++0x55, ++0x4e ++}; ++static unsigned char ssdt_pcihp_start[] = { ++0x30 ++}; ++static unsigned char ssdt_pcihp_id[] = { ++0x3d ++}; ++static unsigned char ssdt_pcihp_ej0[] = { ++0x4a ++}; +diff --git a/hw/i386/ssdt-proc.hex.generated b/hw/i386/ssdt-proc.hex.generated +new file mode 100644 +index 0000000..a28172e +--- /dev/null ++++ b/hw/i386/ssdt-proc.hex.generated +@@ -0,0 +1,134 @@ ++static unsigned char ssdt_proc_name[] = { ++0x28 ++}; ++static unsigned char ssdp_proc_aml[] = { ++0x53, ++0x53, ++0x44, ++0x54, ++0x78, ++0x0, ++0x0, ++0x0, ++0x1, ++0xb3, ++0x42, ++0x58, ++0x50, ++0x43, ++0x0, ++0x0, ++0x42, ++0x58, ++0x53, ++0x53, ++0x44, ++0x54, ++0x0, ++0x0, ++0x1, ++0x0, ++0x0, ++0x0, ++0x49, ++0x4e, ++0x54, ++0x4c, ++0x28, ++0x5, ++0x10, ++0x20, ++0x5b, ++0x83, ++0x42, ++0x5, ++0x43, ++0x50, ++0x41, ++0x41, ++0xaa, ++0x10, ++0xb0, ++0x0, ++0x0, ++0x6, ++0x8, ++0x49, ++0x44, ++0x5f, ++0x5f, ++0xa, ++0xaa, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xd, ++0x41, ++0x43, ++0x50, ++0x49, ++0x30, ++0x30, ++0x30, ++0x37, ++0x0, ++0x14, ++0xf, ++0x5f, ++0x4d, ++0x41, ++0x54, ++0x0, ++0xa4, ++0x43, ++0x50, ++0x4d, ++0x41, ++0x49, ++0x44, ++0x5f, ++0x5f, ++0x14, ++0xf, ++0x5f, ++0x53, ++0x54, ++0x41, ++0x0, ++0xa4, ++0x43, ++0x50, ++0x53, ++0x54, ++0x49, ++0x44, ++0x5f, ++0x5f, ++0x14, ++0xf, ++0x5f, ++0x45, ++0x4a, ++0x30, ++0x1, ++0x43, ++0x50, ++0x45, ++0x4a, ++0x49, ++0x44, ++0x5f, ++0x5f, ++0x68 ++}; ++static unsigned char ssdt_proc_id[] = { ++0x38 ++}; ++static unsigned char ssdt_proc_end[] = { ++0x78 ++}; ++static unsigned char ssdt_proc_start[] = { ++0x24 ++}; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-ssdt-pcihp-updat-generated-file.patch b/SOURCES/kvm-acpi-ssdt-pcihp-updat-generated-file.patch new file mode 100644 index 0000000..f8cd9f4 --- /dev/null +++ b/SOURCES/kvm-acpi-ssdt-pcihp-updat-generated-file.patch @@ -0,0 +1,63 @@ +From 0cc4d584c9b4d4b73f16cfaf35056eadf70cf09a Mon Sep 17 00:00:00 2001 +Message-Id: <0cc4d584c9b4d4b73f16cfaf35056eadf70cf09a.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:23 +0100 +Subject: [PATCH 35/56] acpi: ssdt pcihp: updat generated file + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-36-git-send-email-mst@redhat.com> +Patchwork-id: 56341 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 35/57] acpi: ssdt pcihp: updat generated file +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +update generated file, not sure what changed + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 544d2bfa84c43f9d4c70ca2202a6113d686b8999) +--- + hw/i386/ssdt-pcihp.hex.generated | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/ssdt-pcihp.hex.generated | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/ssdt-pcihp.hex.generated b/hw/i386/ssdt-pcihp.hex.generated +index 0d32a27..b3c2cd5 100644 +--- a/hw/i386/ssdt-pcihp.hex.generated ++++ b/hw/i386/ssdt-pcihp.hex.generated +@@ -17,7 +17,7 @@ static unsigned char ssdp_pcihp_aml[] = { + 0x0, + 0x0, + 0x1, +-0x77, ++0x76, + 0x42, + 0x58, + 0x50, +@@ -40,9 +40,9 @@ static unsigned char ssdp_pcihp_aml[] = { + 0x4e, + 0x54, + 0x4c, +-0x28, +-0x5, +-0x10, ++0x23, ++0x8, ++0x13, + 0x20, + 0x10, + 0x33, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-acpi-strip-compiler-info-in-built-in-DSDT.patch b/SOURCES/kvm-acpi-strip-compiler-info-in-built-in-DSDT.patch new file mode 100644 index 0000000..816c197 --- /dev/null +++ b/SOURCES/kvm-acpi-strip-compiler-info-in-built-in-DSDT.patch @@ -0,0 +1,61 @@ +From 464ceecd1e9c070e613624fb896df54b7e4a3e38 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:42 +0200 +Subject: [PATCH 03/10] acpi: strip compiler info in built-in DSDT + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-2-git-send-email-lersek@redhat.com> +Patchwork-id: 70378 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 1/7] acpi: strip compiler info in built-in DSDT +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +From: "Michael S. Tsirkin" + +IASL stores it's revision in each table header it generates. +That's not nice since guests will see a change each time they move +between hypervisors. We generally fill our own info for tables, but we +(and seabios) forgot to do this for the built-in DSDT. + +Modifications in DSDT table: + OEM ID: "BXPC" -> "BOCHS " + OEM Table ID: "BXDSDT" -> "BXPCDSDT" + Compiler ID: "INTL" -> "BXPC" + Compiler Version: 0x20130823 -> 0x00000001 + +Tested-by: Marcel Apfelbaum +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 53db092ad1c81c30a617f44e83e8fb9e27c001ba) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + hw/i386/acpi-build.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 8be1286..a3a4c3b 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -924,10 +924,16 @@ build_mcfg_q35(GArray *table_data, GArray *linker, AcpiMcfgInfo *info) + static void + build_dsdt(GArray *table_data, GArray *linker, AcpiMiscInfo *misc) + { +- void *dsdt; ++ AcpiTableHeader *dsdt; ++ + assert(misc->dsdt_code && misc->dsdt_size); ++ + dsdt = acpi_data_push(table_data, misc->dsdt_size); + memcpy(dsdt, misc->dsdt_code, misc->dsdt_size); ++ ++ memset(dsdt, 0, sizeof *dsdt); ++ build_header(linker, table_data, dsdt, ACPI_DSDT_SIGNATURE, ++ misc->dsdt_size, 1); + } + + /* Build final rsdt table */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-acpi-support-specified-oem-table-id-for-build_header.patch b/SOURCES/kvm-acpi-support-specified-oem-table-id-for-build_header.patch new file mode 100644 index 0000000..8fd5426 --- /dev/null +++ b/SOURCES/kvm-acpi-support-specified-oem-table-id-for-build_header.patch @@ -0,0 +1,154 @@ +From b36e60614f9c4a6eb3f417422c3cb99402b82963 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:44 +0200 +Subject: [PATCH 05/10] acpi: support specified oem table id for build_header + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-4-git-send-email-lersek@redhat.com> +Patchwork-id: 70380 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 3/7] acpi: support specified oem table id for build_header +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +From: Xiao Guangrong + +Let build_header() support specified OEM table id so that we can build +multiple SSDT later + +If the oem table id is not specified (aka, NULL), we use the default id +instead as the previous behavior + +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Xiao Guangrong +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 8870ca0e94f2524644812dd759863c0851ffb870) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/acpi/aml-build.c + hw/arm/virt-acpi-build.c + hw/i386/acpi-build.c + include/hw/acpi/aml-build.h + +RHEL-7 backport note: this is actually a manual reimplementation of the +upstream patch, which is mostly mechanic. A clean cherry-pick would depend +on a lot of reorganizatorial upstream patches (e.g., 658c27181bf3 +("hw/i386/acpi-build: move generic acpi building helpers into dedictated +file")), and many new features that overlap with ACPI generation (e.g., +the "virt" machtype of the arm/aarch64 targets). + +Signed-off-by: Laszlo Ersek +--- + hw/i386/acpi-build.c | 29 ++++++++++++++++++----------- + 1 file changed, 18 insertions(+), 11 deletions(-) +--- + hw/i386/acpi-build.c | 29 ++++++++++++++++++----------- + 1 file changed, 18 insertions(+), 11 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index be32bc3..a9d9f97 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -243,14 +243,21 @@ static void acpi_get_pci_info(PcPciInfo *info) + + static void + build_header(GArray *linker, GArray *table_data, +- AcpiTableHeader *h, const char *sig, int len, uint8_t rev) ++ AcpiTableHeader *h, const char *sig, int len, uint8_t rev, ++ const char *oem_table_id) + { + memcpy(&h->signature, sig, 4); + h->length = cpu_to_le32(len); + h->revision = rev; + memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6); +- memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4); +- memcpy(h->oem_table_id + 4, sig, 4); ++ ++ if (oem_table_id) { ++ strncpy((char *)h->oem_table_id, oem_table_id, sizeof(h->oem_table_id)); ++ } else { ++ memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4); ++ memcpy(h->oem_table_id + 4, sig, 4); ++ } ++ + h->oem_revision = cpu_to_le32(1); + memcpy(h->asl_compiler_id, ACPI_BUILD_APPNAME4, 4); + h->asl_compiler_revision = cpu_to_le32(1); +@@ -520,7 +527,7 @@ build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo *pm, + fadt_setup(fadt, pm); + + build_header(linker, table_data, +- (void *)fadt, "FACP", sizeof(*fadt), 1); ++ (void *)fadt, "FACP", sizeof(*fadt), 1, NULL); + } + + static void +@@ -590,7 +597,7 @@ build_madt(GArray *table_data, GArray *linker, AcpiCpuInfo *cpu, + + build_header(linker, table_data, + (void *)(table_data->data + madt_start), "APIC", +- table_data->len - madt_start, 1); ++ table_data->len - madt_start, 1, NULL); + } + + /* Encode a hex value */ +@@ -782,7 +789,7 @@ build_ssdt(GArray *table_data, GArray *linker, + + build_header(linker, table_data, + (void *)(table_data->data + ssdt_start), +- "SSDT", table_data->len - ssdt_start, 1); ++ "SSDT", table_data->len - ssdt_start, 1, NULL); + } + + static void +@@ -797,7 +804,7 @@ build_hpet(GArray *table_data, GArray *linker) + hpet->timer_block_id = cpu_to_le32(0x8086a201); + hpet->addr.address = cpu_to_le64(HPET_BASE); + build_header(linker, table_data, +- (void *)hpet, "HPET", sizeof(*hpet), 1); ++ (void *)hpet, "HPET", sizeof(*hpet), 1, NULL); + } + + static void +@@ -890,7 +897,7 @@ build_srat(GArray *table_data, GArray *linker, + build_header(linker, table_data, + (void *)(table_data->data + srat_start), + "SRAT", +- table_data->len - srat_start, 1); ++ table_data->len - srat_start, 1, NULL); + } + + static void +@@ -919,7 +926,7 @@ build_mcfg_q35(GArray *table_data, GArray *linker, AcpiMcfgInfo *info) + } else { + sig = "MCFG"; + } +- build_header(linker, table_data, (void *)mcfg, sig, len, 1); ++ build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL); + } + + static void +@@ -934,7 +941,7 @@ build_dsdt(GArray *table_data, GArray *linker, AcpiMiscInfo *misc) + + memset(dsdt, 0, sizeof *dsdt); + build_header(linker, table_data, dsdt, "DSDT", +- misc->dsdt_size, 1); ++ misc->dsdt_size, 1, NULL); + } + + /* Build final rsdt table */ +@@ -958,7 +965,7 @@ build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) + sizeof(uint32_t)); + } + build_header(linker, table_data, +- (void *)rsdt, "RSDT", rsdt_len, 1); ++ (void *)rsdt, "RSDT", rsdt_len, 1, NULL); + } + + static GArray * +-- +1.8.3.1 + diff --git a/SOURCES/kvm-acpi-take-oem_id-in-build_header-optionally.patch b/SOURCES/kvm-acpi-take-oem_id-in-build_header-optionally.patch new file mode 100644 index 0000000..8670c32 --- /dev/null +++ b/SOURCES/kvm-acpi-take-oem_id-in-build_header-optionally.patch @@ -0,0 +1,157 @@ +From 0decede8a51451da8f5913b0ad13c8e3bdcef582 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:45 +0200 +Subject: [PATCH 06/10] acpi: take oem_id in build_header(), optionally + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-5-git-send-email-lersek@redhat.com> +Patchwork-id: 70381 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 4/7] acpi: take oem_id in build_header(), optionally +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +This patch is the continuation of commit 8870ca0e94f2 ("acpi: support +specified oem table id for build_header"). It will allow us to control the +OEM ID field too in the SDT header. + +Cc: "Michael S. Tsirkin" (supporter:ACPI/SMBIOS) +Cc: Igor Mammedov (supporter:ACPI/SMBIOS) +Cc: Xiao Guangrong (maintainer:NVDIMM) +Cc: Shannon Zhao (maintainer:ARM ACPI Subsystem) +Cc: Paolo Bonzini (maintainer:X86) +Cc: Richard W.M. Jones +Cc: Aleksei Kovura +Cc: Michael Tokarev +Cc: Steven Newbury +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1248758 +LP: https://bugs.launchpad.net/qemu/+bug/1533848 +Signed-off-by: Laszlo Ersek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Shannon Zhao +(cherry picked from commit 37ad223c515da2fe9f1c679768cb5ccaa42e57e1) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/acpi/aml-build.c + hw/acpi/nvdimm.c + hw/arm/virt-acpi-build.c + hw/i386/acpi-build.c + include/hw/acpi/aml-build.h + +RHEL-7 backport note: this is actually a manual reimplementation of the +upstream patch, which is mostly mechanic. A clean cherry-pick would depend +on a lot of reorganizatorial upstream patches (e.g., 658c27181bf3 +("hw/i386/acpi-build: move generic acpi building helpers into dedictated +file")), and many new features that overlap with ACPI generation (e.g., +the "virt" machtype of the arm/aarch64 targets). + +Signed-off-by: Laszlo Ersek +--- + hw/i386/acpi-build.c | 25 +++++++++++++++---------- + 1 file changed, 15 insertions(+), 10 deletions(-) +--- + hw/i386/acpi-build.c | 25 +++++++++++++++---------- + 1 file changed, 15 insertions(+), 10 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index a9d9f97..4839b0e 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -244,12 +244,17 @@ static void acpi_get_pci_info(PcPciInfo *info) + static void + build_header(GArray *linker, GArray *table_data, + AcpiTableHeader *h, const char *sig, int len, uint8_t rev, +- const char *oem_table_id) ++ const char *oem_id, const char *oem_table_id) + { + memcpy(&h->signature, sig, 4); + h->length = cpu_to_le32(len); + h->revision = rev; +- memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6); ++ ++ if (oem_id) { ++ strncpy((char *)h->oem_id, oem_id, sizeof h->oem_id); ++ } else { ++ memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6); ++ } + + if (oem_table_id) { + strncpy((char *)h->oem_table_id, oem_table_id, sizeof(h->oem_table_id)); +@@ -527,7 +532,7 @@ build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo *pm, + fadt_setup(fadt, pm); + + build_header(linker, table_data, +- (void *)fadt, "FACP", sizeof(*fadt), 1, NULL); ++ (void *)fadt, "FACP", sizeof(*fadt), 1, NULL, NULL); + } + + static void +@@ -597,7 +602,7 @@ build_madt(GArray *table_data, GArray *linker, AcpiCpuInfo *cpu, + + build_header(linker, table_data, + (void *)(table_data->data + madt_start), "APIC", +- table_data->len - madt_start, 1, NULL); ++ table_data->len - madt_start, 1, NULL, NULL); + } + + /* Encode a hex value */ +@@ -789,7 +794,7 @@ build_ssdt(GArray *table_data, GArray *linker, + + build_header(linker, table_data, + (void *)(table_data->data + ssdt_start), +- "SSDT", table_data->len - ssdt_start, 1, NULL); ++ "SSDT", table_data->len - ssdt_start, 1, NULL, NULL); + } + + static void +@@ -804,7 +809,7 @@ build_hpet(GArray *table_data, GArray *linker) + hpet->timer_block_id = cpu_to_le32(0x8086a201); + hpet->addr.address = cpu_to_le64(HPET_BASE); + build_header(linker, table_data, +- (void *)hpet, "HPET", sizeof(*hpet), 1, NULL); ++ (void *)hpet, "HPET", sizeof(*hpet), 1, NULL, NULL); + } + + static void +@@ -897,7 +902,7 @@ build_srat(GArray *table_data, GArray *linker, + build_header(linker, table_data, + (void *)(table_data->data + srat_start), + "SRAT", +- table_data->len - srat_start, 1, NULL); ++ table_data->len - srat_start, 1, NULL, NULL); + } + + static void +@@ -926,7 +931,7 @@ build_mcfg_q35(GArray *table_data, GArray *linker, AcpiMcfgInfo *info) + } else { + sig = "MCFG"; + } +- build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL); ++ build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL, NULL); + } + + static void +@@ -941,7 +946,7 @@ build_dsdt(GArray *table_data, GArray *linker, AcpiMiscInfo *misc) + + memset(dsdt, 0, sizeof *dsdt); + build_header(linker, table_data, dsdt, "DSDT", +- misc->dsdt_size, 1, NULL); ++ misc->dsdt_size, 1, NULL, NULL); + } + + /* Build final rsdt table */ +@@ -965,7 +970,7 @@ build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) + sizeof(uint32_t)); + } + build_header(linker, table_data, +- (void *)rsdt, "RSDT", rsdt_len, 1, NULL); ++ (void *)rsdt, "RSDT", rsdt_len, 1, NULL, NULL); + } + + static GArray * +-- +1.8.3.1 + diff --git a/SOURCES/kvm-add-a-header-file-for-atomic-operations.patch b/SOURCES/kvm-add-a-header-file-for-atomic-operations.patch new file mode 100644 index 0000000..924e4cf --- /dev/null +++ b/SOURCES/kvm-add-a-header-file-for-atomic-operations.patch @@ -0,0 +1,745 @@ +From c5386144fbf09f628148101bc674e2421cdd16e3 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:37 +0100 +Subject: [PATCH 01/46] add a header file for atomic operations + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-2-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55686 +O-Subject: [RHEL7.0 PATCH 01/42] add a header file for atomic operations +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 5444e768ee1abe6e021bece19a9a932351f88c88 +Author: Paolo Bonzini +Date: Mon May 13 13:29:47 2013 +0200 + + add a header file for atomic operations + + We're already using them in several places, but __sync builtins are just + too ugly to type, and do not provide seqcst load/store operations. + + Reviewed-by: Richard Henderson + Signed-off-by: Paolo Bonzini +--- + docs/atomics.txt | 352 ++++++++++++++++++++++++++++++++++++++++++++++ + hw/display/qxl.c | 3 +- + hw/virtio/vhost.c | 9 +- + include/qemu/atomic.h | 198 ++++++++++++++++++++++---- + migration.c | 3 +- + tests/test-thread-pool.c | 8 +- + 6 files changed, 529 insertions(+), 44 deletions(-) + create mode 100644 docs/atomics.txt + +Signed-off-by: Michal Novotny +--- + docs/atomics.txt | 352 +++++++++++++++++++++++++++++++++++++++++++++++ + hw/display/qxl.c | 3 +- + hw/virtio/vhost.c | 9 +- + include/qemu/atomic.h | 198 +++++++++++++++++++++----- + migration.c | 3 +- + tests/test-thread-pool.c | 8 +- + 6 files changed, 529 insertions(+), 44 deletions(-) + create mode 100644 docs/atomics.txt + +diff --git a/docs/atomics.txt b/docs/atomics.txt +new file mode 100644 +index 0000000..6f2997b +--- /dev/null ++++ b/docs/atomics.txt +@@ -0,0 +1,352 @@ ++CPUs perform independent memory operations effectively in random order. ++but this can be a problem for CPU-CPU interaction (including interactions ++between QEMU and the guest). Multi-threaded programs use various tools ++to instruct the compiler and the CPU to restrict the order to something ++that is consistent with the expectations of the programmer. ++ ++The most basic tool is locking. Mutexes, condition variables and ++semaphores are used in QEMU, and should be the default approach to ++synchronization. Anything else is considerably harder, but it's ++also justified more often than one would like. The two tools that ++are provided by qemu/atomic.h are memory barriers and atomic operations. ++ ++Macros defined by qemu/atomic.h fall in three camps: ++ ++- compiler barriers: barrier(); ++ ++- weak atomic access and manual memory barriers: atomic_read(), ++ atomic_set(), smp_rmb(), smp_wmb(), smp_mb(), smp_read_barrier_depends(); ++ ++- sequentially consistent atomic access: everything else. ++ ++ ++COMPILER MEMORY BARRIER ++======================= ++ ++barrier() prevents the compiler from moving the memory accesses either ++side of it to the other side. The compiler barrier has no direct effect ++on the CPU, which may then reorder things however it wishes. ++ ++barrier() is mostly used within qemu/atomic.h itself. On some ++architectures, CPU guarantees are strong enough that blocking compiler ++optimizations already ensures the correct order of execution. In this ++case, qemu/atomic.h will reduce stronger memory barriers to simple ++compiler barriers. ++ ++Still, barrier() can be useful when writing code that can be interrupted ++by signal handlers. ++ ++ ++SEQUENTIALLY CONSISTENT ATOMIC ACCESS ++===================================== ++ ++Most of the operations in the qemu/atomic.h header ensure *sequential ++consistency*, where "the result of any execution is the same as if the ++operations of all the processors were executed in some sequential order, ++and the operations of each individual processor appear in this sequence ++in the order specified by its program". ++ ++qemu/atomic.h provides the following set of atomic read-modify-write ++operations: ++ ++ void atomic_inc(ptr) ++ void atomic_dec(ptr) ++ void atomic_add(ptr, val) ++ void atomic_sub(ptr, val) ++ void atomic_and(ptr, val) ++ void atomic_or(ptr, val) ++ ++ typeof(*ptr) atomic_fetch_inc(ptr) ++ typeof(*ptr) atomic_fetch_dec(ptr) ++ typeof(*ptr) atomic_fetch_add(ptr, val) ++ typeof(*ptr) atomic_fetch_sub(ptr, val) ++ typeof(*ptr) atomic_fetch_and(ptr, val) ++ typeof(*ptr) atomic_fetch_or(ptr, val) ++ typeof(*ptr) atomic_xchg(ptr, val ++ typeof(*ptr) atomic_cmpxchg(ptr, old, new) ++ ++all of which return the old value of *ptr. These operations are ++polymorphic; they operate on any type that is as wide as an int. ++ ++Sequentially consistent loads and stores can be done using: ++ ++ atomic_fetch_add(ptr, 0) for loads ++ atomic_xchg(ptr, val) for stores ++ ++However, they are quite expensive on some platforms, notably POWER and ++ARM. Therefore, qemu/atomic.h provides two primitives with slightly ++weaker constraints: ++ ++ typeof(*ptr) atomic_mb_read(ptr) ++ void atomic_mb_set(ptr, val) ++ ++The semantics of these primitives map to Java volatile variables, ++and are strongly related to memory barriers as used in the Linux ++kernel (see below). ++ ++As long as you use atomic_mb_read and atomic_mb_set, accesses cannot ++be reordered with each other, and it is also not possible to reorder ++"normal" accesses around them. ++ ++However, and this is the important difference between ++atomic_mb_read/atomic_mb_set and sequential consistency, it is important ++for both threads to access the same volatile variable. It is not the ++case that everything visible to thread A when it writes volatile field f ++becomes visible to thread B after it reads volatile field g. The store ++and load have to "match" (i.e., be performed on the same volatile ++field) to achieve the right semantics. ++ ++ ++These operations operate on any type that is as wide as an int or smaller. ++ ++ ++WEAK ATOMIC ACCESS AND MANUAL MEMORY BARRIERS ++============================================= ++ ++Compared to sequentially consistent atomic access, programming with ++weaker consistency models can be considerably more complicated. ++In general, if the algorithm you are writing includes both writes ++and reads on the same side, it is generally simpler to use sequentially ++consistent primitives. ++ ++When using this model, variables are accessed with atomic_read() and ++atomic_set(), and restrictions to the ordering of accesses is enforced ++using the smp_rmb(), smp_wmb(), smp_mb() and smp_read_barrier_depends() ++memory barriers. ++ ++atomic_read() and atomic_set() prevents the compiler from using ++optimizations that might otherwise optimize accesses out of existence ++on the one hand, or that might create unsolicited accesses on the other. ++In general this should not have any effect, because the same compiler ++barriers are already implied by memory barriers. However, it is useful ++to do so, because it tells readers which variables are shared with ++other threads, and which are local to the current thread or protected ++by other, more mundane means. ++ ++Memory barriers control the order of references to shared memory. ++They come in four kinds: ++ ++- smp_rmb() guarantees that all the LOAD operations specified before ++ the barrier will appear to happen before all the LOAD operations ++ specified after the barrier with respect to the other components of ++ the system. ++ ++ In other words, smp_rmb() puts a partial ordering on loads, but is not ++ required to have any effect on stores. ++ ++- smp_wmb() guarantees that all the STORE operations specified before ++ the barrier will appear to happen before all the STORE operations ++ specified after the barrier with respect to the other components of ++ the system. ++ ++ In other words, smp_wmb() puts a partial ordering on stores, but is not ++ required to have any effect on loads. ++ ++- smp_mb() guarantees that all the LOAD and STORE operations specified ++ before the barrier will appear to happen before all the LOAD and ++ STORE operations specified after the barrier with respect to the other ++ components of the system. ++ ++ smp_mb() puts a partial ordering on both loads and stores. It is ++ stronger than both a read and a write memory barrier; it implies both ++ smp_rmb() and smp_wmb(), but it also prevents STOREs coming before the ++ barrier from overtaking LOADs coming after the barrier and vice versa. ++ ++- smp_read_barrier_depends() is a weaker kind of read barrier. On ++ most processors, whenever two loads are performed such that the ++ second depends on the result of the first (e.g., the first load ++ retrieves the address to which the second load will be directed), ++ the processor will guarantee that the first LOAD will appear to happen ++ before the second with respect to the other components of the system. ++ However, this is not always true---for example, it was not true on ++ Alpha processors. Whenever this kind of access happens to shared ++ memory (that is not protected by a lock), a read barrier is needed, ++ and smp_read_barrier_depends() can be used instead of smp_rmb(). ++ ++ Note that the first load really has to have a _data_ dependency and not ++ a control dependency. If the address for the second load is dependent ++ on the first load, but the dependency is through a conditional rather ++ than actually loading the address itself, then it's a _control_ ++ dependency and a full read barrier or better is required. ++ ++ ++This is the set of barriers that is required *between* two atomic_read() ++and atomic_set() operations to achieve sequential consistency: ++ ++ | 2nd operation | ++ |-----------------------------------------| ++ 1st operation | (after last) | atomic_read | atomic_set | ++ ---------------+--------------+-------------+------------| ++ (before first) | | none | smp_wmb() | ++ ---------------+--------------+-------------+------------| ++ atomic_read | smp_rmb() | smp_rmb()* | ** | ++ ---------------+--------------+-------------+------------| ++ atomic_set | none | smp_mb()*** | smp_wmb() | ++ ---------------+--------------+-------------+------------| ++ ++ * Or smp_read_barrier_depends(). ++ ++ ** This requires a load-store barrier. How to achieve this varies ++ depending on the machine, but in practice smp_rmb()+smp_wmb() ++ should have the desired effect. For example, on PowerPC the ++ lwsync instruction is a combined load-load, load-store and ++ store-store barrier. ++ ++ *** This requires a store-load barrier. On most machines, the only ++ way to achieve this is a full barrier. ++ ++ ++You can see that the two possible definitions of atomic_mb_read() ++and atomic_mb_set() are the following: ++ ++ 1) atomic_mb_read(p) = atomic_read(p); smp_rmb() ++ atomic_mb_set(p, v) = smp_wmb(); atomic_set(p, v); smp_mb() ++ ++ 2) atomic_mb_read(p) = smp_mb() atomic_read(p); smp_rmb() ++ atomic_mb_set(p, v) = smp_wmb(); atomic_set(p, v); ++ ++Usually the former is used, because smp_mb() is expensive and a program ++normally has more reads than writes. Therefore it makes more sense to ++make atomic_mb_set() the more expensive operation. ++ ++There are two common cases in which atomic_mb_read and atomic_mb_set ++generate too many memory barriers, and thus it can be useful to manually ++place barriers instead: ++ ++- when a data structure has one thread that is always a writer ++ and one thread that is always a reader, manual placement of ++ memory barriers makes the write side faster. Furthermore, ++ correctness is easy to check for in this case using the "pairing" ++ trick that is explained below: ++ ++ thread 1 thread 1 ++ ------------------------- ------------------------ ++ (other writes) ++ smp_wmb() ++ atomic_mb_set(&a, x) atomic_set(&a, x) ++ smp_wmb() ++ atomic_mb_set(&b, y) atomic_set(&b, y) ++ ++ => ++ thread 2 thread 2 ++ ------------------------- ------------------------ ++ y = atomic_mb_read(&b) y = atomic_read(&b) ++ smp_rmb() ++ x = atomic_mb_read(&a) x = atomic_read(&a) ++ smp_rmb() ++ ++- sometimes, a thread is accessing many variables that are otherwise ++ unrelated to each other (for example because, apart from the current ++ thread, exactly one other thread will read or write each of these ++ variables). In this case, it is possible to "hoist" the implicit ++ barriers provided by atomic_mb_read() and atomic_mb_set() outside ++ a loop. For example, the above definition atomic_mb_read() gives ++ the following transformation: ++ ++ n = 0; n = 0; ++ for (i = 0; i < 10; i++) => for (i = 0; i < 10; i++) ++ n += atomic_mb_read(&a[i]); n += atomic_read(&a[i]); ++ smp_rmb(); ++ ++ Similarly, atomic_mb_set() can be transformed as follows: ++ smp_mb(): ++ ++ smp_wmb(); ++ for (i = 0; i < 10; i++) => for (i = 0; i < 10; i++) ++ atomic_mb_set(&a[i], false); atomic_set(&a[i], false); ++ smp_mb(); ++ ++ ++The two tricks can be combined. In this case, splitting a loop in ++two lets you hoist the barriers out of the loops _and_ eliminate the ++expensive smp_mb(): ++ ++ smp_wmb(); ++ for (i = 0; i < 10; i++) { => for (i = 0; i < 10; i++) ++ atomic_mb_set(&a[i], false); atomic_set(&a[i], false); ++ atomic_mb_set(&b[i], false); smb_wmb(); ++ } for (i = 0; i < 10; i++) ++ atomic_set(&a[i], false); ++ smp_mb(); ++ ++ The other thread can still use atomic_mb_read()/atomic_mb_set() ++ ++ ++Memory barrier pairing ++---------------------- ++ ++A useful rule of thumb is that memory barriers should always, or almost ++always, be paired with another barrier. In the case of QEMU, however, ++note that the other barrier may actually be in a driver that runs in ++the guest! ++ ++For the purposes of pairing, smp_read_barrier_depends() and smp_rmb() ++both count as read barriers. A read barriers shall pair with a write ++barrier or a full barrier; a write barrier shall pair with a read ++barrier or a full barrier. A full barrier can pair with anything. ++For example: ++ ++ thread 1 thread 2 ++ =============== =============== ++ a = 1; ++ smp_wmb(); ++ b = 2; x = b; ++ smp_rmb(); ++ y = a; ++ ++Note that the "writing" thread are accessing the variables in the ++opposite order as the "reading" thread. This is expected: stores ++before the write barrier will normally match the loads after the ++read barrier, and vice versa. The same is true for more than 2 ++access and for data dependency barriers: ++ ++ thread 1 thread 2 ++ =============== =============== ++ b[2] = 1; ++ smp_wmb(); ++ x->i = 2; ++ smp_wmb(); ++ a = x; x = a; ++ smp_read_barrier_depends(); ++ y = x->i; ++ smp_read_barrier_depends(); ++ z = b[y]; ++ ++smp_wmb() also pairs with atomic_mb_read(), and smp_rmb() also pairs ++with atomic_mb_set(). ++ ++ ++COMPARISON WITH LINUX KERNEL MEMORY BARRIERS ++============================================ ++ ++Here is a list of differences between Linux kernel atomic operations ++and memory barriers, and the equivalents in QEMU: ++ ++- atomic operations in Linux are always on a 32-bit int type and ++ use a boxed atomic_t type; atomic operations in QEMU are polymorphic ++ and use normal C types. ++ ++- atomic_read and atomic_set in Linux give no guarantee at all; ++ atomic_read and atomic_set in QEMU include a compiler barrier ++ (similar to the ACCESS_ONCE macro in Linux). ++ ++- most atomic read-modify-write operations in Linux return void; ++ in QEMU, all of them return the old value of the variable. ++ ++- different atomic read-modify-write operations in Linux imply ++ a different set of memory barriers; in QEMU, all of them enforce ++ sequential consistency, which means they imply full memory barriers ++ before and after the operation. ++ ++- Linux does not have an equivalent of atomic_mb_read() and ++ atomic_mb_set(). In particular, note that set_mb() is a little ++ weaker than atomic_mb_set(). ++ ++ ++SOURCES ++======= ++ ++* Documentation/memory-barriers.txt from the Linux kernel ++ ++* "The JSR-133 Cookbook for Compiler Writers", available at ++ http://g.oswego.edu/dl/jmm/cookbook.html +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index ea985d2..830b3c5 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -23,6 +23,7 @@ + #include "qemu-common.h" + #include "qemu/timer.h" + #include "qemu/queue.h" ++#include "qemu/atomic.h" + #include "monitor/monitor.h" + #include "sysemu/sysemu.h" + #include "trace.h" +@@ -1726,7 +1727,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events) + trace_qxl_send_events_vm_stopped(d->id, events); + return; + } +- old_pending = __sync_fetch_and_or(&d->ram->int_pending, le_events); ++ old_pending = atomic_fetch_or(&d->ram->int_pending, le_events); + if ((old_pending & le_events) == le_events) { + return; + } +diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c +index 0dabf26..54aa569 100644 +--- a/hw/virtio/vhost.c ++++ b/hw/virtio/vhost.c +@@ -16,6 +16,7 @@ + #include + #include "hw/virtio/vhost.h" + #include "hw/hw.h" ++#include "qemu/atomic.h" + #include "qemu/range.h" + #include + #include "exec/address-spaces.h" +@@ -47,11 +48,9 @@ static void vhost_dev_sync_region(struct vhost_dev *dev, + addr += VHOST_LOG_CHUNK; + continue; + } +- /* Data must be read atomically. We don't really +- * need the barrier semantics of __sync +- * builtins, but it's easier to use them than +- * roll our own. */ +- log = __sync_fetch_and_and(from, 0); ++ /* Data must be read atomically. We don't really need barrier semantics ++ * but it's easier to use atomic_* than roll our own. */ ++ log = atomic_xchg(from, 0); + while ((bit = sizeof(log) > sizeof(int) ? + ffsll(log) : ffs(log))) { + hwaddr page_addr; +diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h +index 10becb6..0aa8913 100644 +--- a/include/qemu/atomic.h ++++ b/include/qemu/atomic.h +@@ -1,68 +1,202 @@ +-#ifndef __QEMU_BARRIER_H +-#define __QEMU_BARRIER_H 1 ++/* ++ * Simple interface for atomic operations. ++ * ++ * Copyright (C) 2013 Red Hat, Inc. ++ * ++ * Author: Paolo Bonzini ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ * ++ */ + +-/* Compiler barrier */ +-#define barrier() asm volatile("" ::: "memory") ++#ifndef __QEMU_ATOMIC_H ++#define __QEMU_ATOMIC_H 1 + +-#if defined(__i386__) ++#include "qemu/compiler.h" + +-#include "qemu/compiler.h" /* QEMU_GNUC_PREREQ */ ++/* For C11 atomic ops */ + +-/* +- * Because of the strongly ordered x86 storage model, wmb() and rmb() are nops +- * on x86(well, a compiler barrier only). Well, at least as long as +- * qemu doesn't do accesses to write-combining memory or non-temporal +- * load/stores from C code. +- */ +-#define smp_wmb() barrier() +-#define smp_rmb() barrier() ++/* Compiler barrier */ ++#define barrier() ({ asm volatile("" ::: "memory"); (void)0; }) ++ ++#ifndef __ATOMIC_RELAXED + + /* +- * We use GCC builtin if it's available, as that can use +- * mfence on 32 bit as well, e.g. if built with -march=pentium-m. +- * However, on i386, there seem to be known bugs as recently as 4.3. +- * */ +-#if QEMU_GNUC_PREREQ(4, 4) +-#define smp_mb() __sync_synchronize() ++ * We use GCC builtin if it's available, as that can use mfence on ++ * 32-bit as well, e.g. if built with -march=pentium-m. However, on ++ * i386 the spec is buggy, and the implementation followed it until ++ * 4.3 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36793). ++ */ ++#if defined(__i386__) || defined(__x86_64__) ++#if !QEMU_GNUC_PREREQ(4, 4) ++#if defined __x86_64__ ++#define smp_mb() ({ asm volatile("mfence" ::: "memory"); (void)0; }) + #else +-#define smp_mb() asm volatile("lock; addl $0,0(%%esp) " ::: "memory") ++#define smp_mb() ({ asm volatile("lock; addl $0,0(%%esp) " ::: "memory"); (void)0; }) ++#endif ++#endif ++#endif ++ ++ ++#ifdef __alpha__ ++#define smp_read_barrier_depends() asm volatile("mb":::"memory") + #endif + +-#elif defined(__x86_64__) ++#if defined(__i386__) || defined(__x86_64__) || defined(__s390x__) + ++/* ++ * Because of the strongly ordered storage model, wmb() and rmb() are nops ++ * here (a compiler barrier only). QEMU doesn't do accesses to write-combining ++ * qemu memory or non-temporal load/stores from C code. ++ */ + #define smp_wmb() barrier() + #define smp_rmb() barrier() +-#define smp_mb() asm volatile("mfence" ::: "memory") ++ ++/* ++ * __sync_lock_test_and_set() is documented to be an acquire barrier only, ++ * but it is a full barrier at the hardware level. Add a compiler barrier ++ * to make it a full barrier also at the compiler level. ++ */ ++#define atomic_xchg(ptr, i) (barrier(), __sync_lock_test_and_set(ptr, i)) ++ ++/* ++ * Load/store with Java volatile semantics. ++ */ ++#define atomic_mb_set(ptr, i) ((void)atomic_xchg(ptr, i)) + + #elif defined(_ARCH_PPC) + + /* + * We use an eieio() for wmb() on powerpc. This assumes we don't + * need to order cacheable and non-cacheable stores with respect to +- * each other ++ * each other. ++ * ++ * smp_mb has the same problem as on x86 for not-very-new GCC ++ * (http://patchwork.ozlabs.org/patch/126184/, Nov 2011). + */ +-#define smp_wmb() asm volatile("eieio" ::: "memory") +- ++#define smp_wmb() ({ asm volatile("eieio" ::: "memory"); (void)0; }) + #if defined(__powerpc64__) +-#define smp_rmb() asm volatile("lwsync" ::: "memory") ++#define smp_rmb() ({ asm volatile("lwsync" ::: "memory"); (void)0; }) + #else +-#define smp_rmb() asm volatile("sync" ::: "memory") ++#define smp_rmb() ({ asm volatile("sync" ::: "memory"); (void)0; }) + #endif ++#define smp_mb() ({ asm volatile("sync" ::: "memory"); (void)0; }) + +-#define smp_mb() asm volatile("sync" ::: "memory") ++#endif /* _ARCH_PPC */ + +-#else ++#endif /* C11 atomics */ + + /* + * For (host) platforms we don't have explicit barrier definitions + * for, we use the gcc __sync_synchronize() primitive to generate a + * full barrier. This should be safe on all platforms, though it may +- * be overkill for wmb() and rmb(). ++ * be overkill for smp_wmb() and smp_rmb(). + */ ++#ifndef smp_mb ++#define smp_mb() __sync_synchronize() ++#endif ++ ++#ifndef smp_wmb ++#ifdef __ATOMIC_RELEASE ++#define smp_wmb() __atomic_thread_fence(__ATOMIC_RELEASE) ++#else + #define smp_wmb() __sync_synchronize() +-#define smp_mb() __sync_synchronize() ++#endif ++#endif ++ ++#ifndef smp_rmb ++#ifdef __ATOMIC_ACQUIRE ++#define smp_rmb() __atomic_thread_fence(__ATOMIC_ACQUIRE) ++#else + #define smp_rmb() __sync_synchronize() ++#endif ++#endif ++ ++#ifndef smp_read_barrier_depends ++#ifdef __ATOMIC_CONSUME ++#define smp_read_barrier_depends() __atomic_thread_fence(__ATOMIC_CONSUME) ++#else ++#define smp_read_barrier_depends() barrier() ++#endif ++#endif + ++#ifndef atomic_read ++#define atomic_read(ptr) (*(__typeof__(*ptr) *volatile) (ptr)) + #endif + ++#ifndef atomic_set ++#define atomic_set(ptr, i) ((*(__typeof__(*ptr) *volatile) (ptr)) = (i)) ++#endif ++ ++/* These have the same semantics as Java volatile variables. ++ * See http://gee.cs.oswego.edu/dl/jmm/cookbook.html: ++ * "1. Issue a StoreStore barrier (wmb) before each volatile store." ++ * 2. Issue a StoreLoad barrier after each volatile store. ++ * Note that you could instead issue one before each volatile load, but ++ * this would be slower for typical programs using volatiles in which ++ * reads greatly outnumber writes. Alternatively, if available, you ++ * can implement volatile store as an atomic instruction (for example ++ * XCHG on x86) and omit the barrier. This may be more efficient if ++ * atomic instructions are cheaper than StoreLoad barriers. ++ * 3. Issue LoadLoad and LoadStore barriers after each volatile load." ++ * ++ * If you prefer to think in terms of "pairing" of memory barriers, ++ * an atomic_mb_read pairs with an atomic_mb_set. ++ * ++ * And for the few ia64 lovers that exist, an atomic_mb_read is a ld.acq, ++ * while an atomic_mb_set is a st.rel followed by a memory barrier. ++ * ++ * These are a bit weaker than __atomic_load/store with __ATOMIC_SEQ_CST ++ * (see docs/atomics.txt), and I'm not sure that __ATOMIC_ACQ_REL is enough. ++ * Just always use the barriers manually by the rules above. ++ */ ++#ifndef atomic_mb_read ++#define atomic_mb_read(ptr) ({ \ ++ typeof(*ptr) _val = atomic_read(ptr); \ ++ smp_rmb(); \ ++ _val; \ ++}) ++#endif ++ ++#ifndef atomic_mb_set ++#define atomic_mb_set(ptr, i) do { \ ++ smp_wmb(); \ ++ atomic_set(ptr, i); \ ++ smp_mb(); \ ++} while (0) ++#endif ++ ++#ifndef atomic_xchg ++#ifdef __ATOMIC_SEQ_CST ++#define atomic_xchg(ptr, i) ({ \ ++ typeof(*ptr) _new = (i), _old; \ ++ __atomic_exchange(ptr, &_new, &_old, __ATOMIC_SEQ_CST); \ ++ _old; \ ++}) ++#elif defined __clang__ ++#define atomic_xchg(ptr, i) __sync_exchange(ptr, i) ++#else ++/* __sync_lock_test_and_set() is documented to be an acquire barrier only. */ ++#define atomic_xchg(ptr, i) (smp_mb(), __sync_lock_test_and_set(ptr, i)) ++#endif ++#endif ++ ++/* Provide shorter names for GCC atomic builtins. */ ++#define atomic_fetch_inc(ptr) __sync_fetch_and_add(ptr, 1) ++#define atomic_fetch_dec(ptr) __sync_fetch_and_add(ptr, -1) ++#define atomic_fetch_add __sync_fetch_and_add ++#define atomic_fetch_sub __sync_fetch_and_sub ++#define atomic_fetch_and __sync_fetch_and_and ++#define atomic_fetch_or __sync_fetch_and_or ++#define atomic_cmpxchg __sync_val_compare_and_swap ++ ++/* And even shorter names that return void. */ ++#define atomic_inc(ptr) ((void) __sync_fetch_and_add(ptr, 1)) ++#define atomic_dec(ptr) ((void) __sync_fetch_and_add(ptr, -1)) ++#define atomic_add(ptr, n) ((void) __sync_fetch_and_add(ptr, n)) ++#define atomic_sub(ptr, n) ((void) __sync_fetch_and_sub(ptr, n)) ++#define atomic_and(ptr, n) ((void) __sync_fetch_and_and(ptr, n)) ++#define atomic_or(ptr, n) ((void) __sync_fetch_and_or(ptr, n)) ++ + #endif +diff --git a/migration.c b/migration.c +index 46c633a..d91e702 100644 +--- a/migration.c ++++ b/migration.c +@@ -291,8 +291,7 @@ static void migrate_fd_cleanup(void *opaque) + + static void migrate_finish_set_state(MigrationState *s, int new_state) + { +- if (__sync_val_compare_and_swap(&s->state, MIG_STATE_ACTIVE, +- new_state) == new_state) { ++ if (atomic_cmpxchg(&s->state, MIG_STATE_ACTIVE, new_state) == new_state) { + trace_migrate_set_state(new_state); + } + } +diff --git a/tests/test-thread-pool.c b/tests/test-thread-pool.c +index 22915aa..b62338f 100644 +--- a/tests/test-thread-pool.c ++++ b/tests/test-thread-pool.c +@@ -17,15 +17,15 @@ typedef struct { + static int worker_cb(void *opaque) + { + WorkerTestData *data = opaque; +- return __sync_fetch_and_add(&data->n, 1); ++ return atomic_fetch_inc(&data->n); + } + + static int long_cb(void *opaque) + { + WorkerTestData *data = opaque; +- __sync_fetch_and_add(&data->n, 1); ++ atomic_inc(&data->n); + g_usleep(2000000); +- __sync_fetch_and_add(&data->n, 1); ++ atomic_inc(&data->n); + return 0; + } + +@@ -169,7 +169,7 @@ static void test_cancel(void) + /* Cancel the jobs that haven't been started yet. */ + num_canceled = 0; + for (i = 0; i < 100; i++) { +- if (__sync_val_compare_and_swap(&data[i].n, 0, 3) == 0) { ++ if (atomic_cmpxchg(&data[i].n, 0, 3) == 0) { + data[i].ret = -ECANCELED; + bdrv_aio_cancel(data[i].aiocb); + active--; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-add-firmware-to-machine-options.patch b/SOURCES/kvm-add-firmware-to-machine-options.patch new file mode 100644 index 0000000..9d8ecc9 --- /dev/null +++ b/SOURCES/kvm-add-firmware-to-machine-options.patch @@ -0,0 +1,65 @@ +From 5129a1337bbbac935b8d17205eb9131645fc5831 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 16 Jan 2014 09:31:58 -0500 +Subject: [PATCH 08/14] add firmware to machine options + +Message-id: <1389864720-14128-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56739 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/3] add firmware to machine options +Bugzilla: 1038603 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +This patch adds firmware to the machine options. -bios becomes a +shortcut for -machine firmware=. Advantage is that the firmware +can be specified via config file as -machine is parsed using QemuOpts +and it is also possible to use different defaults for different +machine types (via QEMUMachine->default_machine_opts). + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 1442d3e6912d7ec88480099503cfa0aeaedf5634) +--- + vl.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + vl.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/vl.c b/vl.c +index 5aea00c..b70d107 100644 +--- a/vl.c ++++ b/vl.c +@@ -428,6 +428,10 @@ static QemuOptsList qemu_machine_opts = { + .name = "usb", + .type = QEMU_OPT_BOOL, + .help = "Set on/off to enable/disable usb", ++ },{ ++ .name = "firmware", ++ .type = QEMU_OPT_STRING, ++ .help = "firmware image", + }, + { /* End of list */ } + }, +@@ -3204,7 +3208,7 @@ int main(int argc, char **argv, char **envp) + } + break; + case QEMU_OPTION_bios: +- bios_name = optarg; ++ qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg); + break; + case QEMU_OPTION_singlestep: + singlestep = 1; +@@ -4035,6 +4039,7 @@ int main(int argc, char **argv, char **envp) + kernel_filename = qemu_opt_get(machine_opts, "kernel"); + initrd_filename = qemu_opt_get(machine_opts, "initrd"); + kernel_cmdline = qemu_opt_get(machine_opts, "append"); ++ bios_name = qemu_opt_get(machine_opts, "firmware"); + + if (!boot_order) { + boot_order = machine->boot_order; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-add-kvm_readonly_mem_enabled.patch b/SOURCES/kvm-add-kvm_readonly_mem_enabled.patch new file mode 100644 index 0000000..698b7c0 --- /dev/null +++ b/SOURCES/kvm-add-kvm_readonly_mem_enabled.patch @@ -0,0 +1,109 @@ +From 11f30b4e8f2e939fe2cb061e8ae70d77ef582b63 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:56 +0100 +Subject: [PATCH 06/22] kvm: add kvm_readonly_mem_enabled + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-7-git-send-email-lersek@redhat.com> +Patchwork-id: 56620 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 06/18] kvm: add kvm_readonly_mem_enabled +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Jordan Justen + +Signed-off-by: Jordan Justen +Reviewed-by: Paolo Bonzini +Message-id: 1369816047-16384-3-git-send-email-jordan.l.justen@intel.com +Signed-off-by: Anthony Liguori +(cherry picked from commit df9c8b758a04825e23f82427001028342b92d0cf) +Signed-off-by: Laszlo Ersek +--- + include/sysemu/kvm.h | 10 ++++++++++ + kvm-all.c | 6 ++++++ + kvm-stub.c | 1 + + 3 files changed, 17 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/kvm.h | 10 ++++++++++ + kvm-all.c | 6 ++++++ + kvm-stub.c | 1 + + 3 files changed, 17 insertions(+), 0 deletions(-) + +diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h +index 7fc3844..e722027 100644 +--- a/include/sysemu/kvm.h ++++ b/include/sysemu/kvm.h +@@ -45,6 +45,7 @@ extern bool kvm_async_interrupts_allowed; + extern bool kvm_irqfds_allowed; + extern bool kvm_msi_via_irqfd_allowed; + extern bool kvm_gsi_routing_allowed; ++extern bool kvm_readonly_mem_allowed; + + #if defined CONFIG_KVM || !defined NEED_CPU_H + #define kvm_enabled() (kvm_allowed) +@@ -97,6 +98,14 @@ extern bool kvm_gsi_routing_allowed; + */ + #define kvm_gsi_routing_enabled() (kvm_gsi_routing_allowed) + ++/** ++ * kvm_readonly_mem_enabled: ++ * ++ * Returns: true if KVM readonly memory is enabled (ie the kernel ++ * supports it and we're running in a configuration that permits it). ++ */ ++#define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed) ++ + #else + #define kvm_enabled() (0) + #define kvm_irqchip_in_kernel() (false) +@@ -104,6 +113,7 @@ extern bool kvm_gsi_routing_allowed; + #define kvm_irqfds_enabled() (false) + #define kvm_msi_via_irqfd_enabled() (false) + #define kvm_gsi_routing_allowed() (false) ++#define kvm_readonly_mem_enabled() (false) + #endif + + struct kvm_run; +diff --git a/kvm-all.c b/kvm-all.c +index 603bd4b..0a70ca1 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -113,6 +113,7 @@ bool kvm_irqfds_allowed; + bool kvm_msi_via_irqfd_allowed; + bool kvm_gsi_routing_allowed; + bool kvm_allowed; ++bool kvm_readonly_mem_allowed; + + static const KVMCapabilityInfo kvm_required_capabilites[] = { + KVM_CAP_INFO(USER_MEMORY), +@@ -1435,6 +1436,11 @@ int kvm_init(void) + s->irq_set_ioctl = KVM_IRQ_LINE_STATUS; + } + ++#ifdef KVM_CAP_READONLY_MEM ++ kvm_readonly_mem_allowed = ++ (kvm_check_extension(s, KVM_CAP_READONLY_MEM) > 0); ++#endif ++ + ret = kvm_arch_init(s); + if (ret < 0) { + goto err; +diff --git a/kvm-stub.c b/kvm-stub.c +index b2c8f9b..22eaff0 100644 +--- a/kvm-stub.c ++++ b/kvm-stub.c +@@ -26,6 +26,7 @@ bool kvm_irqfds_allowed; + bool kvm_msi_via_irqfd_allowed; + bool kvm_gsi_routing_allowed; + bool kvm_allowed; ++bool kvm_readonly_mem_allowed; + + int kvm_init_vcpu(CPUState *cpu) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-add-qemu-img-convert-n-option-skip-target-volume-cre.patch b/SOURCES/kvm-add-qemu-img-convert-n-option-skip-target-volume-cre.patch new file mode 100644 index 0000000..0d8f0eb --- /dev/null +++ b/SOURCES/kvm-add-qemu-img-convert-n-option-skip-target-volume-cre.patch @@ -0,0 +1,339 @@ +From f6e47d854362ee1f5d405852ac75f2015bf94ad7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 7 Nov 2013 12:27:37 +0100 +Subject: [PATCH 15/87] add qemu-img convert -n option (skip target volume creation) + +RH-Author: Max Reitz +Message-id: <1383604354-12743-18-git-send-email-mreitz@redhat.com> +Patchwork-id: 55317 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 17/43] add qemu-img convert -n option (skip target volume creation) +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Alexandre Derumier + +BZ: 1026524 + +Add a -n option to skip volume creation on qemu-img convert. +This is useful for targets such as rbd / ceph, where the +target volume may already exist; we cannot always rely on +qemu-img convert to create the image, as dependent on the +output format, there may be parameters which are not possible +to specify through the qemu-img convert command line. + +Reviewed-by: Eric Blake +Signed-off-by: Alexandre Derumier +Signed-off-by: Alex Bligh +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b2e10493c71160d88bb823cae9a92e806a79b9d6) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/group + +Conflicts because upstream contains more tests in the group file. +Signed-off-by: Miroslav Rezanina +--- + qemu-img-cmds.hx | 4 +- + qemu-img.c | 53 +++++++++++++++++------- + qemu-img.texi | 15 ++++++- + tests/qemu-iotests/063 | 97 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/063.out | 10 +++++ + tests/qemu-iotests/group | 1 + + 6 files changed, 162 insertions(+), 18 deletions(-) + create mode 100644 tests/qemu-iotests/063 + create mode 100644 tests/qemu-iotests/063.out + +diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx +index c97a1f4..0c36e59 100644 +--- a/qemu-img-cmds.hx ++++ b/qemu-img-cmds.hx +@@ -34,9 +34,9 @@ STEXI + ETEXI + + DEF("convert", img_convert, +- "convert [-c] [-p] [-q] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename") ++ "convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename") + STEXI +-@item convert [-c] [-p] [-q] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} ++@item convert [-c] [-p] [-q] [-n] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} + ETEXI + + DEF("info", img_info, +diff --git a/qemu-img.c b/qemu-img.c +index 3a59bf0..8fcea44 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -101,6 +101,8 @@ static void help(void) + " '-S' indicates the consecutive number of bytes that must contain only zeros\n" + " for qemu-img to create a sparse image during conversion\n" + " '--output' takes the format in which the output must be done (human or json)\n" ++ " '-n' skips the target volume creation (useful if the volume is created\n" ++ " prior to running qemu-img)\n" + "\n" + "Parameters to check subcommand:\n" + " '-r' tries to repair any inconsistencies that are found during the check.\n" +@@ -1113,7 +1115,8 @@ out3: + + static int img_convert(int argc, char **argv) + { +- int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size, cluster_sectors; ++ int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size, ++ cluster_sectors, skip_create; + int progress = 0, flags; + const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename; + BlockDriver *drv, *proto_drv; +@@ -1136,8 +1139,9 @@ static int img_convert(int argc, char **argv) + cache = "unsafe"; + out_baseimg = NULL; + compress = 0; ++ skip_create = 0; + for(;;) { +- c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:q"); ++ c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:qn"); + if (c == -1) { + break; + } +@@ -1194,6 +1198,9 @@ static int img_convert(int argc, char **argv) + case 'q': + quiet = true; + break; ++ case 'n': ++ skip_create = 1; ++ break; + } + } + +@@ -1326,20 +1333,22 @@ static int img_convert(int argc, char **argv) + } + } + +- /* Create the new image */ +- ret = bdrv_create(drv, out_filename, param); +- if (ret < 0) { +- if (ret == -ENOTSUP) { +- error_report("Formatting not supported for file format '%s'", +- out_fmt); +- } else if (ret == -EFBIG) { +- error_report("The image size is too large for file format '%s'", +- out_fmt); +- } else { +- error_report("%s: error while converting %s: %s", +- out_filename, out_fmt, strerror(-ret)); ++ if (!skip_create) { ++ /* Create the new image */ ++ ret = bdrv_create(drv, out_filename, param); ++ if (ret < 0) { ++ if (ret == -ENOTSUP) { ++ error_report("Formatting not supported for file format '%s'", ++ out_fmt); ++ } else if (ret == -EFBIG) { ++ error_report("The image size is too large for file format '%s'", ++ out_fmt); ++ } else { ++ error_report("%s: error while converting %s: %s", ++ out_filename, out_fmt, strerror(-ret)); ++ } ++ goto out; + } +- goto out; + } + + flags = BDRV_O_RDWR; +@@ -1360,6 +1369,20 @@ static int img_convert(int argc, char **argv) + bdrv_get_geometry(bs[0], &bs_sectors); + buf = qemu_blockalign(out_bs, IO_BUF_SIZE); + ++ if (skip_create) { ++ int64_t output_length = bdrv_getlength(out_bs); ++ if (output_length < 0) { ++ error_report("unable to get output image length: %s\n", ++ strerror(-output_length)); ++ ret = -1; ++ goto out; ++ } else if (output_length < total_sectors << BDRV_SECTOR_BITS) { ++ error_report("output file is smaller than input file"); ++ ret = -1; ++ goto out; ++ } ++ } ++ + if (compress) { + ret = bdrv_get_info(out_bs, &bdi); + if (ret < 0) { +diff --git a/qemu-img.texi b/qemu-img.texi +index 8364fa1..43ee4eb 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -96,6 +96,14 @@ Second image format + Strict mode - fail on on different image size or sector allocation + @end table + ++Parameters to convert subcommand: ++ ++@table @option ++ ++@item -n ++Skip the creation of the target volume ++@end table ++ + Command description: + + @table @option +@@ -171,7 +179,7 @@ Error on reading data + + @end table + +-@item convert [-c] [-p] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} ++@item convert [-c] [-p] [-n] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} + + Convert the disk image @var{filename} or a snapshot @var{snapshot_name} to disk image @var{output_filename} + using format @var{output_fmt}. It can be optionally compressed (@code{-c} +@@ -190,6 +198,11 @@ created as a copy on write image of the specified base image; the + @var{backing_file} should have the same content as the input's base image, + however the path, image format, etc may differ. + ++If the @code{-n} option is specified, the target volume creation will be ++skipped. This is useful for formats such as @code{rbd} if the target ++volume has already been created with site specific options that cannot ++be supplied through qemu-img. ++ + @item info [-f @var{fmt}] [--output=@var{ofmt}] [--backing-chain] @var{filename} + + Give information about the disk image @var{filename}. Use it in +diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063 +new file mode 100644 +index 0000000..de0cbbd +--- /dev/null ++++ b/tests/qemu-iotests/063 +@@ -0,0 +1,97 @@ ++#!/bin/bash ++# ++# test of qemu-img convert -n - convert without creation ++# ++# Copyright (C) 2009 Red Hat, Inc. ++# Copyright (C) 2013 Alex Bligh (alex@alex.org.uk) ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=alex@alex.org.uk ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++ rm -f $TEST_IMG.orig $TEST_IMG.raw $TEST_IMG.raw2 ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++. ./common.pattern ++ ++_supported_fmt qcow qcow2 vmdk qed raw ++_supported_proto generic ++_supported_os Linux ++ ++_make_test_img 4M ++ ++echo "== Testing conversion with -n fails with no target file ==" ++# check .orig file does not exist ++rm -f $TEST_IMG.orig ++if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG $TEST_IMG.orig >/dev/null 2>&1; then ++ exit 1 ++fi ++ ++echo "== Testing conversion with -n succeeds with a target file ==" ++rm -f $TEST_IMG.orig ++cp $TEST_IMG $TEST_IMG.orig ++if ! $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG $TEST_IMG.orig ; then ++ exit 1 ++fi ++ ++echo "== Testing conversion to raw is the same after conversion with -n ==" ++# compare the raw files ++if ! $QEMU_IMG convert -f $IMGFMT -O raw $TEST_IMG $TEST_IMG.raw1 ; then ++ exit 1 ++fi ++ ++if ! $QEMU_IMG convert -f $IMGFMT -O raw $TEST_IMG.orig $TEST_IMG.raw2 ; then ++ exit 1 ++fi ++ ++if ! cmp $TEST_IMG.raw1 $TEST_IMG.raw2 ; then ++ exit 1 ++fi ++ ++echo "== Testing conversion back to original format ==" ++if ! $QEMU_IMG convert -f raw -O $IMGFMT -n $TEST_IMG.raw2 $TEST_IMG ; then ++ exit 1 ++fi ++_check_test_img ++ ++echo "== Testing conversion to a smaller file fails ==" ++rm -f $TEST_IMG.orig ++mv $TEST_IMG $TEST_IMG.orig ++_make_test_img 2M ++if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG.orig $TEST_IMG >/dev/null 2>&1; then ++ exit 1 ++fi ++ ++rm -f $TEST_IMG.orig $TEST_IMG.raw $TEST_IMG.raw2 ++ ++echo "*** done" ++rm -f $seq.full ++status=0 ++exit 0 +diff --git a/tests/qemu-iotests/063.out b/tests/qemu-iotests/063.out +new file mode 100644 +index 0000000..de1c99a +--- /dev/null ++++ b/tests/qemu-iotests/063.out +@@ -0,0 +1,10 @@ ++QA output created by 063 ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4194304 ++== Testing conversion with -n fails with no target file == ++== Testing conversion with -n succeeds with a target file == ++== Testing conversion to raw is the same after conversion with -n == ++== Testing conversion back to original format == ++No errors were found on the image. ++== Testing conversion to a smaller file fails == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2097152 ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 9c8826d..ff3c505 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -62,4 +62,5 @@ + 053 rw auto + 059 rw auto + 060 rw auto ++063 rw auto + 068 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-add-support-for-hyper-v-timers.patch b/SOURCES/kvm-add-support-for-hyper-v-timers.patch new file mode 100644 index 0000000..2936bd0 --- /dev/null +++ b/SOURCES/kvm-add-support-for-hyper-v-timers.patch @@ -0,0 +1,220 @@ +From b0ac5450a5fcb7e0c9cd5baf511283af375cc18f Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:24 +0100 +Subject: [PATCH 12/12] kvm: add support for hyper-v timers + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-13-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57968 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 12/12] kvm: add support for hyper-v timers +Bugzilla: 1057173 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +http://msdn.microsoft.com/en-us/library/windows/hardware/ff541625%28v=vs.85%29.aspx + +This code is generic for activating reference time counter or virtual reference time stamp counter + +Signed-off-by: Vadim Rozenfeld +Reviewed-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +(cherry picked from commit 48a5f3bcbbbe59a3120a39106bfda59fd1933fbc) + +Conflicts: + linux-headers/asm-x86/hyperv.h + linux-headers/linux/kvm.h + target-i386/kvm.c +--- + linux-headers/asm-x86/hyperv.h | 3 +++ + linux-headers/linux/kvm.h | 1 + + target-i386/cpu-qom.h | 1 + + target-i386/cpu.c | 1 + + target-i386/cpu.h | 1 + + target-i386/kvm.c | 20 +++++++++++++++++++- + target-i386/machine.c | 22 ++++++++++++++++++++++ + 7 files changed, 48 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + linux-headers/asm-x86/hyperv.h | 3 +++ + linux-headers/linux/kvm.h | 1 + + target-i386/cpu-qom.h | 1 + + target-i386/cpu.c | 1 + + target-i386/cpu.h | 1 + + target-i386/kvm.c | 20 +++++++++++++++++++- + target-i386/machine.c | 22 ++++++++++++++++++++++ + 7 files changed, 48 insertions(+), 1 deletions(-) + +diff --git a/linux-headers/asm-x86/hyperv.h b/linux-headers/asm-x86/hyperv.h +index b80420b..9711819 100644 +--- a/linux-headers/asm-x86/hyperv.h ++++ b/linux-headers/asm-x86/hyperv.h +@@ -136,6 +136,9 @@ + /* MSR used to read the per-partition time reference counter */ + #define HV_X64_MSR_TIME_REF_COUNT 0x40000020 + ++/* A partition's reference time stamp counter (TSC) page */ ++#define HV_X64_MSR_REFERENCE_TSC 0x40000021 ++ + /* Define the virtual APIC registers */ + #define HV_X64_MSR_EOI 0x40000070 + #define HV_X64_MSR_ICR 0x40000071 +diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h +index e32ef4a..4b93099 100644 +--- a/linux-headers/linux/kvm.h ++++ b/linux-headers/linux/kvm.h +@@ -666,6 +666,7 @@ struct kvm_ppc_smmu_info { + #define KVM_CAP_IRQ_MPIC 90 + #define KVM_CAP_PPC_RTAS 91 + #define KVM_CAP_IRQ_XICS 92 ++#define KVM_CAP_HYPERV_TIME 96 + + #ifdef KVM_CAP_IRQ_ROUTING + +diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h +index 99ba65f..0b01e8f 100644 +--- a/target-i386/cpu-qom.h ++++ b/target-i386/cpu-qom.h +@@ -69,6 +69,7 @@ typedef struct X86CPU { + bool hyperv_vapic; + bool hyperv_relaxed_timing; + int hyperv_spinlock_attempts; ++ bool hyperv_time; + bool check_cpuid; + bool enforce_cpuid; + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 8421dfc..005e190 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2621,6 +2621,7 @@ static Property x86_cpu_properties[] = { + { .name = "hv-spinlocks", .info = &qdev_prop_spinlocks }, + DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false), + DEFINE_PROP_BOOL("hv-vapic", X86CPU, hyperv_vapic, false), ++ DEFINE_PROP_BOOL("hv-time", X86CPU, hyperv_time, false), + DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, false), + DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false), + DEFINE_PROP_END_OF_LIST() +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 0773499..ad40aab 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -847,6 +847,7 @@ typedef struct CPUX86State { + uint64_t msr_hv_hypercall; + uint64_t msr_hv_guest_os_id; + uint64_t msr_hv_vapic; ++ uint64_t msr_hv_tsc; + + /* exception/interrupt handling */ + int error_code; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index a2946c4..ba2cd7f 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -72,6 +72,7 @@ static bool has_msr_kvm_steal_time; + static int lm_capable_kernel; + static bool has_msr_hv_hypercall; + static bool has_msr_hv_vapic; ++static bool has_msr_hv_tsc; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -438,6 +439,7 @@ static bool hyperv_enabled(X86CPU *cpu) + CPUState *cs = CPU(cpu); + return kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0 && + (hyperv_hypercall_available(cpu) || ++ cpu->hyperv_time || + cpu->hyperv_relaxed_timing); + } + +@@ -495,7 +497,13 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->eax |= HV_X64_MSR_APIC_ACCESS_AVAILABLE; + has_msr_hv_vapic = true; + } +- ++ if (cpu->hyperv_time && ++ kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_TIME) > 0) { ++ c->eax |= HV_X64_MSR_HYPERCALL_AVAILABLE; ++ c->eax |= HV_X64_MSR_TIME_REF_COUNT_AVAILABLE; ++ c->eax |= 0x200; ++ has_msr_hv_tsc = true; ++ } + c = &cpuid_data.entries[cpuid_i++]; + c->function = HYPERV_CPUID_ENLIGHTMENT_INFO; + if (cpu->hyperv_relaxed_timing) { +@@ -1207,6 +1215,10 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_APIC_ASSIST_PAGE, + env->msr_hv_vapic); + } ++ if (has_msr_hv_tsc) { ++ kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_REFERENCE_TSC, ++ env->msr_hv_tsc); ++ } + } + if (env->mcg_cap) { + int i; +@@ -1485,6 +1497,9 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_hv_vapic) { + msrs[n++].index = HV_X64_MSR_APIC_ASSIST_PAGE; + } ++ if (has_msr_hv_tsc) { ++ msrs[n++].index = HV_X64_MSR_REFERENCE_TSC; ++ } + + msr_data.info.nmsrs = n; + ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, &msr_data); +@@ -1596,6 +1611,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case HV_X64_MSR_APIC_ASSIST_PAGE: + env->msr_hv_vapic = msrs[i].data; + break; ++ case HV_X64_MSR_REFERENCE_TSC: ++ env->msr_hv_tsc = msrs[i].data; ++ break; + } + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 021390b..42b049b 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -545,6 +545,25 @@ static const VMStateDescription vmstate_msr_hyperv_vapic = { + } + }; + ++static bool hyperv_time_enable_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->msr_hv_tsc != 0; ++} ++ ++static const VMStateDescription vmstate_msr_hyperv_time = { ++ .name = "cpu/msr_hyperv_time", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField []) { ++ VMSTATE_UINT64(env.msr_hv_tsc, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -682,6 +701,9 @@ const VMStateDescription vmstate_x86_cpu = { + }, { + .vmsd = &vmstate_msr_hyperv_vapic, + .needed = hyperv_vapic_enable_needed, ++ }, { ++ .vmsd = &vmstate_msr_hyperv_time, ++ .needed = hyperv_time_enable_needed, + } , { + /* empty */ + } +-- +1.7.1 + diff --git a/SOURCES/kvm-add-timestamp-to-error_report.patch b/SOURCES/kvm-add-timestamp-to-error_report.patch new file mode 100644 index 0000000..d1c75f8 --- /dev/null +++ b/SOURCES/kvm-add-timestamp-to-error_report.patch @@ -0,0 +1,182 @@ +From d654202a62b8bf07cba4044e4eb912958c7392bb Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 28 Aug 2013 15:50:44 +0200 +Subject: [PATCH 27/28] add timestamp to error_report() + +RH-Author: Laszlo Ersek +Message-id: <1377705045-1054-2-git-send-email-lersek@redhat.com> +Patchwork-id: 53886 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 1/2] add timestamp to error_report() +Bugzilla: 906937 +RH-Acked-by: Michal Novotny +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +From: Seiji Aguchi + +[Issue] +When we offer a customer support service and a problem happens +in a customer's system, we try to understand the problem by +comparing what the customer reports with message logs of the +customer's system. + +In this case, we often need to know when the problem happens. + +But, currently, there is no timestamp in qemu's error messages. +Therefore, we may not be able to understand the problem based on +error messages. + +[Solution] +Add a timestamp to qemu's error message logged by +error_report() with g_time_val_to_iso8601(). + +Signed-off-by: Seiji Aguchi +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Luiz Capitulino +(cherry picked from commit 5e2ac5191772dea782ff78e95edd395985273019) +Signed-off-by: Laszlo Ersek +--- + include/qemu/error-report.h | 2 ++ + util/qemu-error.c | 10 ++++++++++ + vl.c | 26 ++++++++++++++++++++++++++ + qemu-options.hx | 11 +++++++++++ + 4 files changed, 49 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/error-report.h | 2 ++ + qemu-options.hx | 11 +++++++++++ + util/qemu-error.c | 10 ++++++++++ + vl.c | 26 ++++++++++++++++++++++++++ + 4 files changed, 49 insertions(+), 0 deletions(-) + +diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h +index 14c1719..3b098a9 100644 +--- a/include/qemu/error-report.h ++++ b/include/qemu/error-report.h +@@ -14,6 +14,7 @@ + #define QEMU_ERROR_H + + #include ++#include + #include "qemu/compiler.h" + + typedef struct Location { +@@ -40,5 +41,6 @@ void error_print_loc(void); + void error_set_progname(const char *argv0); + void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); + const char *error_get_progname(void); ++extern bool enable_timestamp_msg; + + #endif +diff --git a/qemu-options.hx b/qemu-options.hx +index fb62b75..2ad0ed2 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -3095,6 +3095,17 @@ property must be set. These objects are placed in the + '/objects' path. + ETEXI + ++DEF("msg", HAS_ARG, QEMU_OPTION_msg, ++ "-msg timestamp[=on|off]\n" ++ " change the format of messages\n" ++ " on|off controls leading timestamps (default:on)\n", ++ QEMU_ARCH_ALL) ++STEXI ++@item -msg timestamp[=on|off] ++@findex -msg ++prepend a timestamp to each log message.(default:on) ++ETEXI ++ + HXCOMM This is the last statement. Insert new options before this line! + STEXI + @end table +diff --git a/util/qemu-error.c b/util/qemu-error.c +index 08a36f4..fec02c6 100644 +--- a/util/qemu-error.c ++++ b/util/qemu-error.c +@@ -196,6 +196,7 @@ void error_print_loc(void) + } + } + ++bool enable_timestamp_msg; + /* + * Print an error message to current monitor if we have one, else to stderr. + * Format arguments like sprintf(). The result should not contain +@@ -206,6 +207,15 @@ void error_print_loc(void) + void error_report(const char *fmt, ...) + { + va_list ap; ++ GTimeVal tv; ++ gchar *timestr; ++ ++ if (enable_timestamp_msg) { ++ g_get_current_time(&tv); ++ timestr = g_time_val_to_iso8601(&tv); ++ error_printf("%s ", timestr); ++ g_free(timestr); ++ } + + error_print_loc(); + va_start(ap, fmt); +diff --git a/vl.c b/vl.c +index d424af7..0ce554d 100644 +--- a/vl.c ++++ b/vl.c +@@ -518,6 +518,18 @@ static QemuOptsList qemu_realtime_opts = { + }, + }; + ++static QemuOptsList qemu_msg_opts = { ++ .name = "msg", ++ .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head), ++ .desc = { ++ { ++ .name = "timestamp", ++ .type = QEMU_OPT_BOOL, ++ }, ++ { /* end of list */ } ++ }, ++}; ++ + /** + * Get machine options + * +@@ -1473,6 +1485,12 @@ static void configure_realtime(QemuOpts *opts) + } + } + ++ ++static void configure_msg(QemuOpts *opts) ++{ ++ enable_timestamp_msg = qemu_opt_get_bool(opts, "timestamp", true); ++} ++ + /***********************************************************/ + /* USB devices */ + +@@ -2911,6 +2929,7 @@ int main(int argc, char **argv, char **envp) + qemu_add_opts(&qemu_object_opts); + qemu_add_opts(&qemu_tpmdev_opts); + qemu_add_opts(&qemu_realtime_opts); ++ qemu_add_opts(&qemu_msg_opts); + + runstate_init(); + +@@ -3883,6 +3902,13 @@ int main(int argc, char **argv, char **envp) + } + configure_realtime(opts); + break; ++ case QEMU_OPTION_msg: ++ opts = qemu_opts_parse(qemu_find_opts("msg"), optarg, 0); ++ if (!opts) { ++ exit(1); ++ } ++ configure_msg(opts); ++ break; + default: + os_parse_cmd_args(popt->index, optarg); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-ahci.c-mask-unused-flags-when-reading-size-PRDT-DBC.patch b/SOURCES/kvm-ahci.c-mask-unused-flags-when-reading-size-PRDT-DBC.patch new file mode 100644 index 0000000..4304ad2 --- /dev/null +++ b/SOURCES/kvm-ahci.c-mask-unused-flags-when-reading-size-PRDT-DBC.patch @@ -0,0 +1,92 @@ +From e4edeb73e3b9b1ba4efbf18ddb687fb210fd57f8 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Fri, 26 Jun 2015 21:52:46 +0200 +Subject: [PATCH 1/2] ahci.c: mask unused flags when reading size PRDT DBC + +Message-id: <1435355567-29641-2-git-send-email-jsnow@redhat.com> +Patchwork-id: 66535 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] ahci.c: mask unused flags when reading size PRDT DBC +Bugzilla: 1205100 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Juan Quintela +RH-Acked-by: Stefan Hajnoczi + +From: Reza Jelveh + +The data byte count(DBC) read from the description information is defined for +bits 21:00. Bits 30:22 are reserved and bit 31 is the Interrupt on Completion +(I) flag. + +Completion interrupts are triggered after every transaction instead of on +I-flag in QEMU. tbl_entry_size is a signed integer and improperly reading the +DBC leads to a negative offset that causes sglist allocation to fail. + +Signed-off-by: Reza Jelveh +Reviewed-by: Alexander Graf +Reviewed-by: Kevin Wolf +Reviewed-by: John Snow +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d02f8adc6d2a178bcbf77d0413f9a96fdbed53f0) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + hw/ide/ahci.c | 11 ++++++++--- + hw/ide/ahci.h | 2 ++ + 2 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c +index 011e796..7f3927a 100644 +--- a/hw/ide/ahci.c ++++ b/hw/ide/ahci.c +@@ -635,6 +635,11 @@ static void ahci_write_fis_d2h(AHCIDevice *ad, uint8_t *cmd_fis) + } + } + ++static int prdt_tbl_entry_size(const AHCI_SG *tbl) ++{ ++ return (le32_to_cpu(tbl->flags_size) & AHCI_PRDT_SIZE_MASK) + 1; ++} ++ + static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) + { + AHCICmdHdr *cmd = ad->cur_cmd; +@@ -675,7 +680,7 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) + sum = 0; + for (i = 0; i < sglist_alloc_hint; i++) { + /* flags_size is zero-based */ +- tbl_entry_size = (le32_to_cpu(tbl[i].flags_size) + 1); ++ tbl_entry_size = prdt_tbl_entry_size(&tbl[i]); + if (offset <= (sum + tbl_entry_size)) { + off_idx = i; + off_pos = offset - sum; +@@ -693,12 +698,12 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) + + qemu_sglist_init(sglist, (sglist_alloc_hint - off_idx), ad->hba->dma); + qemu_sglist_add(sglist, le64_to_cpu(tbl[off_idx].addr + off_pos), +- le32_to_cpu(tbl[off_idx].flags_size) + 1 - off_pos); ++ prdt_tbl_entry_size(&tbl[off_idx]) - off_pos); + + for (i = off_idx + 1; i < sglist_alloc_hint; i++) { + /* flags_size is zero-based */ + qemu_sglist_add(sglist, le64_to_cpu(tbl[i].addr), +- le32_to_cpu(tbl[i].flags_size) + 1); ++ prdt_tbl_entry_size(&tbl[i])); + } + } + +diff --git a/hw/ide/ahci.h b/hw/ide/ahci.h +index 85f37fe..47c0961 100644 +--- a/hw/ide/ahci.h ++++ b/hw/ide/ahci.h +@@ -201,6 +201,8 @@ + + #define AHCI_COMMAND_TABLE_ACMD 0x40 + ++#define AHCI_PRDT_SIZE_MASK 0x3fffff ++ + #define IDE_FEATURE_DMA 1 + + #define READ_FPDMA_QUEUED 0x60 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-aio-Fix-use-after-free-in-cancellation-path.patch b/SOURCES/kvm-aio-Fix-use-after-free-in-cancellation-path.patch new file mode 100644 index 0000000..d587c2e --- /dev/null +++ b/SOURCES/kvm-aio-Fix-use-after-free-in-cancellation-path.patch @@ -0,0 +1,96 @@ +From 4283e6a300b8b05f8fb32dc27dfe0bd774ef16db Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 30 May 2014 03:46:55 +0200 +Subject: [PATCH 08/13] aio: Fix use-after-free in cancellation path + +RH-Author: Fam Zheng +Message-id: <1401421615-17300-1-git-send-email-famz@redhat.com> +Patchwork-id: 59078 +O-Subject: [RHEL-7 qemu-kvm PATCH] aio: Fix use-after-free in cancellation path +Bugzilla: 1095877 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1095877 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7519118 (RHEL) + https://brewweb.devel.redhat.com/taskinfo?taskID=7519129 (RHEV) + +The current flow of canceling a thread from THREAD_ACTIVE state is: + + 1) Caller wants to cancel a request, so it calls thread_pool_cancel. + + 2) thread_pool_cancel waits on the conditional variable + elem->check_cancel. + + 3) The worker thread changes state to THREAD_DONE once the task is + done, and notifies elem->check_cancel to allow thread_pool_cancel + to continue execution, and signals the notifier (pool->notifier) to + allow callback function to be called later. But because of the + global mutex, the notifier won't get processed until step 4) and 5) + are done. + + 4) thread_pool_cancel continues, leaving the notifier signaled, it + just returns to caller. + + 5) Caller thinks the request is already canceled successfully, so it + releases any related data, such as freeing elem->common.opaque. + + 6) In the next main loop iteration, the notifier handler, + event_notifier_ready, is called. It finds the canceled thread in + THREAD_DONE state, so calls elem->common.cb, with an (likely) + dangling opaque pointer. This is a use-after-free. + +Fix it by calling event_notifier_ready before leaving +thread_pool_cancel. + +Test case update: This change will let cancel complete earlier than +test-thread-pool.c expects, so update the code to check this case: if +it's already done, done_cb sets .aiocb to NULL, skip calling +bdrv_aio_cancel on them. + +Reported-by: Ulrich Obergfell +Suggested-by: Paolo Bonzini +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 271c0f68b4eae72691721243a1c37f46a3232d61) +Signed-off-by: Fam Zheng +--- + tests/test-thread-pool.c | 2 +- + thread-pool.c | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/test-thread-pool.c | 2 +- + thread-pool.c | 1 + + 2 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/tests/test-thread-pool.c b/tests/test-thread-pool.c +index b62338f..1be970d 100644 +--- a/tests/test-thread-pool.c ++++ b/tests/test-thread-pool.c +@@ -181,7 +181,7 @@ static void test_cancel(void) + + /* Canceling the others will be a blocking operation. */ + for (i = 0; i < 100; i++) { +- if (data[i].n != 3) { ++ if (data[i].aiocb && data[i].n != 3) { + bdrv_aio_cancel(data[i].aiocb); + } + } +diff --git a/thread-pool.c b/thread-pool.c +index 0ebd4c2..fc6a33b 100644 +--- a/thread-pool.c ++++ b/thread-pool.c +@@ -229,6 +229,7 @@ static void thread_pool_cancel(BlockDriverAIOCB *acb) + pool->pending_cancellations--; + } + qemu_mutex_unlock(&pool->lock); ++ event_notifier_ready(&pool->notifier); + } + + static const AIOCBInfo thread_pool_aiocb_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-aio-fix-qemu_bh_schedule-bh-ctx-race-condition.patch b/SOURCES/kvm-aio-fix-qemu_bh_schedule-bh-ctx-race-condition.patch new file mode 100644 index 0000000..3f9a1b5 --- /dev/null +++ b/SOURCES/kvm-aio-fix-qemu_bh_schedule-bh-ctx-race-condition.patch @@ -0,0 +1,80 @@ +From 068000dc97228f85b878634e3d49d3354f5cbafe Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Fri, 11 Jul 2014 19:07:24 -0500 +Subject: [CHANGE 20/29] aio: fix qemu_bh_schedule() bh->ctx race condition +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: John Snow +Message-id: <1405105644-21039-1-git-send-email-jsnow@redhat.com> +Patchwork-id: 59866 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] aio: fix qemu_bh_schedule() bh->ctx race condition +Bugzilla: 1116728 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Stefan Hajnoczi + +bz: https://bugzilla.redhat.com/show_bug.cgi?id=1116728 +brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7690195 +upstream: 924fe1293c3e7a3c787bbdfb351e7f168caee3e9 + +qemu_bh_schedule() is supposed to be thread-safe at least the first time +it is called. Unfortunately this is not quite true: + + bh->scheduled = 1; + aio_notify(bh->ctx); + +Since another thread may run the BH callback once it has been scheduled, +there is a race condition if the callback frees the BH before +aio_notify(bh->ctx) has a chance to run. + +Reported-by: Stefan Priebe +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Paolo Bonzini +Tested-by: Stefan Priebe +(cherry picked from commit 924fe1293c3e7a3c787bbdfb351e7f168caee3e9) +Signed-off-by: John Snow +--- + async.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +Signed-off-by: jen +--- + async.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/async.c b/async.c +index 5ce3633..d7ec1ea 100644 +--- a/async.c ++++ b/async.c +@@ -117,15 +117,21 @@ void qemu_bh_schedule_idle(QEMUBH *bh) + + void qemu_bh_schedule(QEMUBH *bh) + { ++ AioContext *ctx; ++ + if (bh->scheduled) + return; ++ ctx = bh->ctx; + bh->idle = 0; +- /* Make sure that idle & any writes needed by the callback are done +- * before the locations are read in the aio_bh_poll. ++ /* Make sure that: ++ * 1. idle & any writes needed by the callback are done before the ++ * locations are read in the aio_bh_poll. ++ * 2. ctx is loaded before scheduled is set and the callback has a chance ++ * to execute. + */ +- smp_wmb(); ++ smp_mb(); + bh->scheduled = 1; +- aio_notify(bh->ctx); ++ aio_notify(ctx); + } + + +-- +1.9.3 + diff --git a/SOURCES/kvm-all-exit-in-case-max-vcpus-exceeded.patch b/SOURCES/kvm-all-exit-in-case-max-vcpus-exceeded.patch new file mode 100644 index 0000000..51635be --- /dev/null +++ b/SOURCES/kvm-all-exit-in-case-max-vcpus-exceeded.patch @@ -0,0 +1,46 @@ +From 7e144af26a2f0f8b5b972d60c32e55824bcc60b4 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Thu, 6 Mar 2014 02:29:12 +0100 +Subject: [PATCH 03/16] kvm-all: exit in case max vcpus exceeded + +RH-Author: Marcelo Tosatti +Message-id: <20140306022912.GC4955@amt.cnet> +Patchwork-id: 58024 +O-Subject: [RHEL7.0 qemu-kvm PATCH] kvm-all: exit in case max vcpus exceeded +Bugzilla: 993429 +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones +RH-Acked-by: Paolo Bonzini + +Rather than fall back to TCG (so the user has to discover +whats happening, in case of no access to qemu stdout/stderr). +(cherry-picked from 9ba3cf540fb9 from uq/master) + +Signed-off-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +BZ: 993429 +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 16e4f65..adc0a8e 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1382,11 +1382,10 @@ int kvm_init(void) + nc->name, nc->num, soft_vcpus_limit); + + if (nc->num > hard_vcpus_limit) { +- ret = -EINVAL; + fprintf(stderr, "Number of %s cpus requested (%d) exceeds " + "the maximum cpus supported by KVM (%d)\n", + nc->name, nc->num, hard_vcpus_limit); +- goto err; ++ exit(1); + } + } + nc++; +-- +1.7.1 + diff --git a/SOURCES/kvm-all.c-max_cpus-should-not-exceed-KVM-vcpu-limit.patch b/SOURCES/kvm-all.c-max_cpus-should-not-exceed-KVM-vcpu-limit.patch new file mode 100644 index 0000000..8a7a2d2 --- /dev/null +++ b/SOURCES/kvm-all.c-max_cpus-should-not-exceed-KVM-vcpu-limit.patch @@ -0,0 +1,51 @@ +From fbbdbb9f62c7239d8e299b17be82e5ac3b5eca09 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Tue, 20 Aug 2013 21:45:54 +0200 +Subject: [PATCH 26/28] kvm-all.c: max_cpus should not exceed KVM vcpu limit + +RH-Author: Marcelo Tosatti +Message-id: <20130820214554.GB9334@amt.cnet> +Patchwork-id: 53621 +O-Subject: [RHEL7 qemu-kvm PATCH] kvm-all.c: max_cpus should not exceed KVM vcpu limit +Bugzilla: 996258 +RH-Acked-by: Andrew Jones +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost + +commit 7dc52526850849e8e0fe56ced809d0798481a2f6 of uq/master branch +of qemu-kvm.git repository + +maxcpus, which specifies the maximum number of hotpluggable CPUs, +should not exceed KVM's vcpu limit. + +Signed-off-by: Marcelo Tosatti +[Reword message. - Paolo] +Signed-off-by: Paolo Bonzini +BZ: 996258 + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 6c9d51e..545b470 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1358,6 +1358,13 @@ int kvm_init(void) + goto err; + } + ++ if (max_cpus > max_vcpus) { ++ ret = -EINVAL; ++ fprintf(stderr, "Number of hotpluggable cpus requested (%d) exceeds max cpus " ++ "supported by KVM (%d)\n", max_cpus, max_vcpus); ++ goto err; ++ } ++ + s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0); + if (s->vmfd < 0) { + #ifdef TARGET_S390X +-- +1.7.1 + diff --git a/SOURCES/kvm-always-update-the-MPX-model-specific-register.patch b/SOURCES/kvm-always-update-the-MPX-model-specific-register.patch new file mode 100644 index 0000000..5f8f5f9 --- /dev/null +++ b/SOURCES/kvm-always-update-the-MPX-model-specific-register.patch @@ -0,0 +1,58 @@ +From 7ed89963702e6c53c20864b564a5b43712a38ccd Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:24 +0200 +Subject: [PATCH 04/10] kvm: always update the MPX model specific register + +Message-id: <1435260689-9556-4-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66501 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/8] kvm: always update the MPX model specific register +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +The original patch from Liu Jinsong restricted them to reset or full +state updates, but that's unnecessary (and wrong) since the BNDCFGS +MSR has no side effects. + +Cc: Liu Jinsong +Signed-off-by: Paolo Bonzini +(cherry picked from commit 439d19f2922ac409ee224bc1e5522cee7009d829) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/kvm.c +--- + target-i386/kvm.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 6d9aa63..bbbbac0 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1155,6 +1155,9 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], MSR_IA32_MISC_ENABLE, + env->msr_ia32_misc_enable); + } ++ if (has_msr_bndcfgs) { ++ kvm_msr_entry_set(&msrs[n++], MSR_IA32_BNDCFGS, env->msr_bndcfgs); ++ } + #ifdef TARGET_X86_64 + if (lm_capable_kernel) { + kvm_msr_entry_set(&msrs[n++], MSR_CSTAR, env->cstar); +@@ -1266,9 +1269,6 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + MSR_MTRRphysMask(i), env->mtrr_var[i].mask); + } + } +- if (has_msr_bndcfgs) { +- kvm_msr_entry_set(&msrs[n++], MSR_IA32_BNDCFGS, env->msr_bndcfgs); +- } + } + if (env->mcg_cap) { + int i; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-apic-Document-why-cannot_instantiate_with_device_add.patch b/SOURCES/kvm-apic-Document-why-cannot_instantiate_with_device_add.patch new file mode 100644 index 0000000..79371c3 --- /dev/null +++ b/SOURCES/kvm-apic-Document-why-cannot_instantiate_with_device_add.patch @@ -0,0 +1,52 @@ +From 1bb88d69e0ad951f9436a79e5a5d4bb35bf4076d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:15 +0100 +Subject: [PATCH 39/81] apic: Document why cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-11-git-send-email-kwolf@redhat.com> +Patchwork-id: 55536 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 10/17] apic: Document why cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Peter Maydell +(cherry picked from pending upstream submission) +Signed-off-by: Kevin Wolf +--- + hw/intc/apic_common.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/intc/apic_common.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c +index 208e7b1..ff413de 100644 +--- a/hw/intc/apic_common.c ++++ b/hw/intc/apic_common.c +@@ -386,9 +386,13 @@ static void apic_common_class_init(ObjectClass *klass, void *data) + + dc->vmsd = &vmstate_apic_common; + dc->reset = apic_reset_common; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = apic_properties_common; + idc->init = apic_init_common; ++ /* ++ * Reason: APIC and CPU need to be wired up by ++ * x86_cpu_apic_create() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo apic_common_type = { +-- +1.7.1 + diff --git a/SOURCES/kvm-apic-drop-debugging.patch b/SOURCES/kvm-apic-drop-debugging.patch new file mode 100644 index 0000000..7707029 --- /dev/null +++ b/SOURCES/kvm-apic-drop-debugging.patch @@ -0,0 +1,46 @@ +From 483ad2c6110b2810cb409d871cb9b4214f01bfdb Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 15 May 2018 11:56:33 +0200 +Subject: [PATCH 07/10] kvm/apic: drop debugging + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180515115634.24469-5-dgilbert@redhat.com> +Patchwork-id: 80270 +O-Subject: [RHEL-7.6 qemu-kvm PATCH v2 4/5] kvm/apic: drop debugging +Bugzilla: 1577680 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Eduardo Habkost + +From: "Michael S. Tsirkin" + +commit 78d6a05d2f69cbfa6e95f0a4a24a2c934969913b + ("x86/lapic: Load LAPIC state at post_load") +has some debugging leftovers. + +Drop them. + +Cc: Dr. David Alan Gilbert +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Eduardo Habkost +(cherry picked from commit 1560fcfa96594f62cb2062f88e6785dda663529c) +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/apic.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c +index 0f3a80c..d47d8da 100644 +--- a/hw/i386/kvm/apic.c ++++ b/hw/i386/kvm/apic.c +@@ -138,7 +138,6 @@ static void kvm_apic_put(void *data) + + static void kvm_apic_post_load(APICCommonState *s) + { +- fprintf(stderr, "%s: Yeh\n", __func__); + run_on_cpu(CPU(s->cpu), kvm_apic_put, s); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-apic-fix-2.2-2.1-migration.patch b/SOURCES/kvm-apic-fix-2.2-2.1-migration.patch new file mode 100644 index 0000000..cfc31dc --- /dev/null +++ b/SOURCES/kvm-apic-fix-2.2-2.1-migration.patch @@ -0,0 +1,97 @@ +From 9001bf38b596c0eb50daa52181ec6b4cf56cfb94 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 15 May 2018 11:56:31 +0200 +Subject: [PATCH 05/10] kvm/apic: fix 2.2->2.1 migration + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180515115634.24469-3-dgilbert@redhat.com> +Patchwork-id: 80269 +O-Subject: [RHEL-7.6 qemu-kvm PATCH v2 2/5] kvm/apic: fix 2.2->2.1 migration +Bugzilla: 1577680 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +The wait_for_sipi field is set back to 1 after an INIT, so it was not +effective to reset it in kvm_apic_realize. Introduce a reset callback +and reset wait_for_sipi there. + +Reported-by: Igor Mammedov +Cc: qemu-stable@nongnu.org +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 575a6f4082c45778b93032ef1e7fbea4467b3a2a) + We're adding this just to get the reset member; 1.5.3 doesn't + currently have the wait_for_sipi change in the kvm code. + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/apic.c | 6 ++++++ + hw/intc/apic_common.c | 5 +++++ + include/hw/i386/apic_internal.h | 1 + + 3 files changed, 12 insertions(+) + +diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c +index 8f80425..6ead17c 100644 +--- a/hw/i386/kvm/apic.c ++++ b/hw/i386/kvm/apic.c +@@ -171,6 +171,11 @@ static const MemoryRegionOps kvm_apic_io_ops = { + .endianness = DEVICE_NATIVE_ENDIAN, + }; + ++static void kvm_apic_reset(APICCommonState *s) ++{ ++ /* This function intentionally left blank, for now */ ++} ++ + static void kvm_apic_init(APICCommonState *s) + { + memory_region_init_io(&s->io_memory, &kvm_apic_io_ops, s, "kvm-apic-msi", +@@ -186,6 +191,7 @@ static void kvm_apic_class_init(ObjectClass *klass, void *data) + APICCommonClass *k = APIC_COMMON_CLASS(klass); + + k->init = kvm_apic_init; ++ k->reset = kvm_apic_reset; + k->set_base = kvm_apic_set_base; + k->set_tpr = kvm_apic_set_tpr; + k->get_tpr = kvm_apic_get_tpr; +diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c +index ff413de..fff9266 100644 +--- a/hw/intc/apic_common.c ++++ b/hw/intc/apic_common.c +@@ -173,6 +173,7 @@ bool apic_next_timer(APICCommonState *s, int64_t current_time) + void apic_init_reset(DeviceState *d) + { + APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d); ++ APICCommonClass *info = APIC_COMMON_GET_CLASS(s); + int i; + + if (!s) { +@@ -201,6 +202,10 @@ void apic_init_reset(DeviceState *d) + qemu_del_timer(s->timer); + } + s->timer_expiry = -1; ++ ++ if (info->reset) { ++ info->reset(s); ++ } + } + + void apic_designate_bsp(DeviceState *d) +diff --git a/include/hw/i386/apic_internal.h b/include/hw/i386/apic_internal.h +index 1b0a7fb..a77da1c 100644 +--- a/include/hw/i386/apic_internal.h ++++ b/include/hw/i386/apic_internal.h +@@ -89,6 +89,7 @@ typedef struct APICCommonClass + void (*external_nmi)(APICCommonState *s); + void (*pre_save)(APICCommonState *s); + void (*post_load)(APICCommonState *s); ++ void (*reset)(APICCommonState *s); + } APICCommonClass; + + struct APICCommonState { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-apic-rename-apic-specific-bitopts.patch b/SOURCES/kvm-apic-rename-apic-specific-bitopts.patch new file mode 100644 index 0000000..5d012c5 --- /dev/null +++ b/SOURCES/kvm-apic-rename-apic-specific-bitopts.patch @@ -0,0 +1,191 @@ +From 96d75583baef53a94ed53eec99f14951669f4155 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:06 +0100 +Subject: [PATCH 30/81] apic: rename apic specific bitopts + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 55527 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 01/17] apic: rename apic specific bitopts +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: "Michael S. Tsirkin" + +apic has its own version of bitops, with the +difference that it works on u32 and not long. +Add apic_ prefix to avoid namespace clashes. + +We should look into reusing standard bitops long-term, +but that's not entirely trivial. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit edf9735e40841298874ee308fdecca2ac2aa5bdf) +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + hw/intc/apic.c | 42 +++++++++++++++++++++--------------------- + 1 file changed, 21 insertions(+), 21 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/intc/apic.c | 42 +++++++++++++++++++++--------------------- + 1 files changed, 21 insertions(+), 21 deletions(-) + +diff --git a/hw/intc/apic.c b/hw/intc/apic.c +index 756dff0..46cb097 100644 +--- a/hw/intc/apic.c ++++ b/hw/intc/apic.c +@@ -40,18 +40,18 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask, + uint8_t dest, uint8_t dest_mode); + + /* Find first bit starting from msb */ +-static int fls_bit(uint32_t value) ++static int apic_fls_bit(uint32_t value) + { + return 31 - clz32(value); + } + + /* Find first bit starting from lsb */ +-static int ffs_bit(uint32_t value) ++static int apic_ffs_bit(uint32_t value) + { + return ctz32(value); + } + +-static inline void set_bit(uint32_t *tab, int index) ++static inline void apic_set_bit(uint32_t *tab, int index) + { + int i, mask; + i = index >> 5; +@@ -59,7 +59,7 @@ static inline void set_bit(uint32_t *tab, int index) + tab[i] |= mask; + } + +-static inline void reset_bit(uint32_t *tab, int index) ++static inline void apic_reset_bit(uint32_t *tab, int index) + { + int i, mask; + i = index >> 5; +@@ -67,7 +67,7 @@ static inline void reset_bit(uint32_t *tab, int index) + tab[i] &= ~mask; + } + +-static inline int get_bit(uint32_t *tab, int index) ++static inline int apic_get_bit(uint32_t *tab, int index) + { + int i, mask; + i = index >> 5; +@@ -81,7 +81,7 @@ static int get_highest_priority_int(uint32_t *tab) + int i; + for (i = 7; i >= 0; i--) { + if (tab[i] != 0) { +- return i * 32 + fls_bit(tab[i]); ++ return i * 32 + apic_fls_bit(tab[i]); + } + } + return -1; +@@ -184,7 +184,7 @@ void apic_deliver_pic_intr(DeviceState *d, int level) + case APIC_DM_FIXED: + if (!(lvt & APIC_LVT_LEVEL_TRIGGER)) + break; +- reset_bit(s->irr, lvt & 0xff); ++ apic_reset_bit(s->irr, lvt & 0xff); + /* fall through */ + case APIC_DM_EXTINT: + cpu_reset_interrupt(CPU(s->cpu), CPU_INTERRUPT_HARD); +@@ -230,7 +230,7 @@ static void apic_bus_deliver(const uint32_t *deliver_bitmask, + d = -1; + for(i = 0; i < MAX_APIC_WORDS; i++) { + if (deliver_bitmask[i]) { +- d = i * 32 + ffs_bit(deliver_bitmask[i]); ++ d = i * 32 + apic_ffs_bit(deliver_bitmask[i]); + break; + } + } +@@ -386,13 +386,13 @@ void apic_poll_irq(DeviceState *d) + + static void apic_set_irq(APICCommonState *s, int vector_num, int trigger_mode) + { +- apic_report_irq_delivered(!get_bit(s->irr, vector_num)); ++ apic_report_irq_delivered(!apic_get_bit(s->irr, vector_num)); + +- set_bit(s->irr, vector_num); ++ apic_set_bit(s->irr, vector_num); + if (trigger_mode) +- set_bit(s->tmr, vector_num); ++ apic_set_bit(s->tmr, vector_num); + else +- reset_bit(s->tmr, vector_num); ++ apic_reset_bit(s->tmr, vector_num); + if (s->vapic_paddr) { + apic_sync_vapic(s, SYNC_ISR_IRR_TO_VAPIC); + /* +@@ -412,8 +412,8 @@ static void apic_eoi(APICCommonState *s) + isrv = get_highest_priority_int(s->isr); + if (isrv < 0) + return; +- reset_bit(s->isr, isrv); +- if (!(s->spurious_vec & APIC_SV_DIRECTED_IO) && get_bit(s->tmr, isrv)) { ++ apic_reset_bit(s->isr, isrv); ++ if (!(s->spurious_vec & APIC_SV_DIRECTED_IO) && apic_get_bit(s->tmr, isrv)) { + ioapic_eoi_broadcast(isrv); + } + apic_sync_vapic(s, SYNC_FROM_VAPIC | SYNC_TO_VAPIC); +@@ -452,7 +452,7 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask, + int idx = apic_find_dest(dest); + memset(deliver_bitmask, 0x00, MAX_APIC_WORDS * sizeof(uint32_t)); + if (idx >= 0) +- set_bit(deliver_bitmask, idx); ++ apic_set_bit(deliver_bitmask, idx); + } + } else { + /* XXX: cluster mode */ +@@ -462,11 +462,11 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask, + if (apic_iter) { + if (apic_iter->dest_mode == 0xf) { + if (dest & apic_iter->log_dest) +- set_bit(deliver_bitmask, i); ++ apic_set_bit(deliver_bitmask, i); + } else if (apic_iter->dest_mode == 0x0) { + if ((dest & 0xf0) == (apic_iter->log_dest & 0xf0) && + (dest & apic_iter->log_dest & 0x0f)) { +- set_bit(deliver_bitmask, i); ++ apic_set_bit(deliver_bitmask, i); + } + } + } else { +@@ -509,14 +509,14 @@ static void apic_deliver(DeviceState *d, uint8_t dest, uint8_t dest_mode, + break; + case 1: + memset(deliver_bitmask, 0x00, sizeof(deliver_bitmask)); +- set_bit(deliver_bitmask, s->idx); ++ apic_set_bit(deliver_bitmask, s->idx); + break; + case 2: + memset(deliver_bitmask, 0xff, sizeof(deliver_bitmask)); + break; + case 3: + memset(deliver_bitmask, 0xff, sizeof(deliver_bitmask)); +- reset_bit(deliver_bitmask, s->idx); ++ apic_reset_bit(deliver_bitmask, s->idx); + break; + } + +@@ -573,8 +573,8 @@ int apic_get_interrupt(DeviceState *d) + apic_sync_vapic(s, SYNC_TO_VAPIC); + return s->spurious_vec & 0xff; + } +- reset_bit(s->irr, intno); +- set_bit(s->isr, intno); ++ apic_reset_bit(s->irr, intno); ++ apic_set_bit(s->isr, intno); + apic_sync_vapic(s, SYNC_TO_VAPIC); + + /* re-inject if there is still a pending PIC interrupt */ +-- +1.7.1 + diff --git a/SOURCES/kvm-apic-set-APIC-base-as-part-of-kvm_apic_put.patch b/SOURCES/kvm-apic-set-APIC-base-as-part-of-kvm_apic_put.patch new file mode 100644 index 0000000..913ed63 --- /dev/null +++ b/SOURCES/kvm-apic-set-APIC-base-as-part-of-kvm_apic_put.patch @@ -0,0 +1,94 @@ +From 4142f7546da561898f15169f6e8085167601e878 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 15 May 2018 11:56:34 +0200 +Subject: [PATCH 08/10] kvm: apic: set APIC base as part of kvm_apic_put + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180515115634.24469-6-dgilbert@redhat.com> +Patchwork-id: 80271 +O-Subject: [RHEL-7.6 qemu-kvm PATCH v2 5/5] kvm: apic: set APIC base as part of kvm_apic_put +Bugzilla: 1577680 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Eduardo Habkost + +From: "Dr. David Alan Gilbert" + +The parsing of KVM_SET_LAPIC's input depends on the current value of the +APIC base MSR---which indeed is stored in APICCommonState---but for historical +reasons APIC base is set through KVM_SET_SREGS together with cr8 (which is +really just the APIC TPR) and the actual "special CPU registers". + +APIC base must now be set before the actual LAPIC registers, so do that +in kvm_apic_put. It will be set again to the same value with KVM_SET_SREGS, +but that's not a big issue. + +This only happens since Linux 4.8, which checks for x2apic mode in +KVM_SET_LAPIC. However it's really a QEMU bug; until the recent +commit 78d6a05 ("x86/lapic: Load LAPIC state at post_load", 2016-09-13) +QEMU was indeed setting APIC base (via KVM_SET_SREGS) before the other +LAPIC registers. + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit f8d9ccf8d5f9f4b7d364100871c4c7303b546de5) +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/apic.c | 2 ++ + target-i386/kvm.c | 8 ++++++++ + target-i386/kvm_i386.h | 2 ++ + 3 files changed, 12 insertions(+) + +diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c +index d47d8da..77d2999 100644 +--- a/hw/i386/kvm/apic.c ++++ b/hw/i386/kvm/apic.c +@@ -12,6 +12,7 @@ + #include "hw/i386/apic_internal.h" + #include "hw/pci/msi.h" + #include "sysemu/kvm.h" ++#include "target-i386/kvm_i386.h" + + static inline void kvm_apic_set_reg(struct kvm_lapic_state *kapic, + int reg_id, uint32_t val) +@@ -127,6 +128,7 @@ static void kvm_apic_put(void *data) + struct kvm_lapic_state kapic; + int ret; + ++ kvm_put_apicbase(s->cpu, s->apicbase); + kvm_put_apic_state(s, &kapic); + + ret = kvm_vcpu_ioctl(CPU(s->cpu), KVM_SET_LAPIC, &kapic); +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 71f1573..a1a49d8 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1152,6 +1152,14 @@ static int kvm_put_one_msr(X86CPU *cpu, int index, uint64_t value) + return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, &msr_data); + } + ++void kvm_put_apicbase(X86CPU *cpu, uint64_t value) ++{ ++ int ret; ++ ++ ret = kvm_put_one_msr(cpu, MSR_IA32_APICBASE, value); ++ assert(ret == 1); ++} ++ + static int kvm_put_tscdeadline_msr(X86CPU *cpu) + { + CPUX86State *env = &cpu->env; +diff --git a/target-i386/kvm_i386.h b/target-i386/kvm_i386.h +index 4392ab4..b260b31 100644 +--- a/target-i386/kvm_i386.h ++++ b/target-i386/kvm_i386.h +@@ -35,4 +35,6 @@ int kvm_device_msix_set_vector(KVMState *s, uint32_t dev_id, uint32_t vector, + int kvm_device_msix_assign(KVMState *s, uint32_t dev_id); + int kvm_device_msix_deassign(KVMState *s, uint32_t dev_id); + ++void kvm_put_apicbase(X86CPU *cpu, uint64_t value); ++ + #endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-arch_init-align-MR-size-to-target-page-size.patch b/SOURCES/kvm-arch_init-align-MR-size-to-target-page-size.patch new file mode 100644 index 0000000..96e9264 --- /dev/null +++ b/SOURCES/kvm-arch_init-align-MR-size-to-target-page-size.patch @@ -0,0 +1,57 @@ +From be5e59136ca2d08576c189ae008e0ae806065e62 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:16 +0100 +Subject: [PATCH 11/56] arch_init: align MR size to target page size + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-12-git-send-email-mst@redhat.com> +Patchwork-id: 56316 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 11/57] arch_init: align MR size to target page size +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Migration code assumes that each MR is a multiple of TARGET_PAGE_SIZE: +MR size is divided by TARGET_PAGE_SIZE, so if it isn't migration +never completes. +But this isn't really required for regions set up with +memory_region_init_ram, since that calls qemu_ram_alloc +which aligns size up using TARGET_PAGE_ALIGN. + +Align MR size up to full target page sizes, this way +migration completes even if we create a RAM MR +which is not a full target page size. + +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Laszlo Ersek +(cherry picked from commit 0851c9f75ccb0baf28f5bf901b9ffe3c91fcf969) +--- + arch_init.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch_init.c b/arch_init.c +index 5301cfd..2c0ea1b 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -341,7 +341,8 @@ ram_addr_t migration_bitmap_find_and_reset_dirty(MemoryRegion *mr, + { + unsigned long base = mr->ram_addr >> TARGET_PAGE_BITS; + unsigned long nr = base + (start >> TARGET_PAGE_BITS); +- unsigned long size = base + (int128_get64(mr->size) >> TARGET_PAGE_BITS); ++ uint64_t mr_size = TARGET_PAGE_ALIGN(memory_region_size(mr)); ++ unsigned long size = base + (mr_size >> TARGET_PAGE_BITS); + + unsigned long next; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-arch_init-make-is_zero_page-accept-size.patch b/SOURCES/kvm-arch_init-make-is_zero_page-accept-size.patch new file mode 100644 index 0000000..b5756d2 --- /dev/null +++ b/SOURCES/kvm-arch_init-make-is_zero_page-accept-size.patch @@ -0,0 +1,80 @@ +From c964e085dac5d2e47974f1275a0557ec841aeaba Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:15 +0100 +Subject: [PATCH 39/46] arch_init: make is_zero_page accept size + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-40-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55717 +O-Subject: [RHEL7.0 PATCH 39/42] arch_init: make is_zero_page accept size +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit dc3c26a479e5bd19c1b3c04f696b8f70ad57f0b7 +Author: Isaku Yamahata +Date: Sat Sep 21 01:23:36 2013 +0900 + + arch_init: make is_zero_page accept size + + Later is_zero_page will be used for non TARGET_PAGE_SIZE + range. + And rename it to is_zero_range as it isn't page size any more. + + Signed-off-by: Isaku Yamahata + Signed-off-by: Juan Quintela +--- + arch_init.c | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 26d0374..5ce9c61 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -150,10 +150,9 @@ int qemu_read_default_config_files(bool userconfig) + return 0; + } + +-static inline bool is_zero_page(uint8_t *p) ++static inline bool is_zero_range(uint8_t *p, uint64_t size) + { +- return buffer_find_nonzero_offset(p, TARGET_PAGE_SIZE) == +- TARGET_PAGE_SIZE; ++ return buffer_find_nonzero_offset(p, size) == size; + } + + /* struct contains XBZRLE cache and a static page +@@ -497,7 +496,7 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + acct_info.dup_pages++; + } + } +- } else if (is_zero_page(p)) { ++ } else if (is_zero_range(p, TARGET_PAGE_SIZE)) { + acct_info.dup_pages++; + bytes_sent = save_block_hdr(f, block, offset, cont, + RAM_SAVE_FLAG_COMPRESS); +@@ -849,7 +848,7 @@ static inline void *host_from_stream_offset(QEMUFile *f, + */ + void ram_handle_compressed(void *host, uint8_t ch, uint64_t size) + { +- if (ch != 0 || !is_zero_page(host)) { ++ if (ch != 0 || !is_zero_range(host, TARGET_PAGE_SIZE)) { + memset(host, ch, size); + #ifndef _WIN32 + if (ch == 0 && +-- +1.7.11.7 + diff --git a/SOURCES/kvm-arch_init-right-return-for-ram_save_iterate.patch b/SOURCES/kvm-arch_init-right-return-for-ram_save_iterate.patch new file mode 100644 index 0000000..1bc662d --- /dev/null +++ b/SOURCES/kvm-arch_init-right-return-for-ram_save_iterate.patch @@ -0,0 +1,77 @@ +From bf95edfa1eee98775de7daac87304ceb50be7874 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:11 +0100 +Subject: [PATCH 35/46] arch_init: right return for ram_save_iterate + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-36-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55719 +O-Subject: [RHEL7.0 PATCH 35/42] arch_init: right return for ram_save_iterate +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 6cd0beda2c3c21fd7575e944764f392be7ef50c1 +Author: Lei Li +Date: Wed Sep 4 17:02:36 2013 +0800 + + arch_init: right return for ram_save_iterate + + qemu_file_rate_limit() never return negative value since the refactor + by Commit 1964a39, this patch gets rid of the negative check for it, + adjust bytes_transferred and return value correspondingly in + ram_save_iterate(). + + Signed-off-by: Lei Li + Signed-off-by: Paolo Bonzini + Signed-off-by: Juan Quintela +--- + arch_init.c | 15 ++++++++++----- + 1 files changed, 10 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 034341c..26d0374 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -710,15 +710,20 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) + */ + ram_control_after_iterate(f, RAM_CONTROL_ROUND); + ++ bytes_transferred += total_sent; ++ ++ /* ++ * Do not count these 8 bytes into total_sent, so that we can ++ * return 0 if no page had been dirtied. ++ */ ++ qemu_put_be64(f, RAM_SAVE_FLAG_EOS); ++ bytes_transferred += 8; ++ ++ ret = qemu_file_get_error(f); + if (ret < 0) { +- bytes_transferred += total_sent; + return ret; + } + +- qemu_put_be64(f, RAM_SAVE_FLAG_EOS); +- total_sent += 8; +- bytes_transferred += total_sent; +- + return total_sent; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-atapi-migration-Throw-recoverable-error-to-avoid-rec.patch b/SOURCES/kvm-atapi-migration-Throw-recoverable-error-to-avoid-rec.patch new file mode 100644 index 0000000..82197a6 --- /dev/null +++ b/SOURCES/kvm-atapi-migration-Throw-recoverable-error-to-avoid-rec.patch @@ -0,0 +1,118 @@ +From e44bfb41173183a85bb6fa94a6f48486ac4ab0a2 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 10 Feb 2015 11:45:36 +0100 +Subject: [PATCH 10/16] atapi migration: Throw recoverable error to avoid + recovery + +Message-id: <1423568736-19538-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 63779 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] atapi migration: Throw recoverable error to avoid recovery +Bugzilla: 892258 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi + +From: "Dr. David Alan Gilbert" + +(With the previous atapi_dma flag recovery) +If migration happens between the ATAPI command being written and the +bmdma being started, the DMA is dropped. Eventually the guest times +out and recovers, but that can take many seconds. +(This is rare, on a pingpong reading the CD continuously I hit +this about ~1/30-1/50 migrates) + +I don't think we've got enough state to be able to recover safely +at this point, so I throw a 'medium error, no seek complete' +that I'm assuming guests will try and recover from an apparently +dirty CD. + +OK, it's a hack, the real solution is probably to push a lot of +ATAPI state into the migration stream, but this is a fix that +works with no stream changes. Tested only on Linux (both RHEL5 +(pre-libata) and RHEL7). + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: John Snow +Signed-off-by: Kevin Wolf +(cherry picked from commit a71754e5b03fd3b8b8c6d3bc2a39f75bead729de) +Signed-off-by: Miroslav Rezanina +--- + hw/ide/atapi.c | 17 +++++++++++++++++ + hw/ide/internal.h | 2 ++ + hw/ide/pci.c | 11 +++++++++++ + 3 files changed, 30 insertions(+) + +diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c +index 05e60b1..46a2c26 100644 +--- a/hw/ide/atapi.c ++++ b/hw/ide/atapi.c +@@ -393,6 +393,23 @@ static void ide_atapi_cmd_read(IDEState *s, int lba, int nb_sectors, + } + } + ++ ++/* Called by *_restart_bh when the transfer function points ++ * to ide_atapi_cmd ++ */ ++void ide_atapi_dma_restart(IDEState *s) ++{ ++ /* ++ * I'm not sure we have enough stored to restart the command ++ * safely, so give the guest an error it should recover from. ++ * I'm assuming most guests will try to recover from something ++ * listed as a medium error on a CD; it seems to work on Linux. ++ * This would be more of a problem if we did any other type of ++ * DMA operation. ++ */ ++ ide_atapi_cmd_error(s, MEDIUM_ERROR, ASC_NO_SEEK_COMPLETE); ++} ++ + static inline uint8_t ide_atapi_set_profile(uint8_t *buf, uint8_t *index, + uint16_t profile) + { +diff --git a/hw/ide/internal.h b/hw/ide/internal.h +index 048a052..0a2d6bc 100644 +--- a/hw/ide/internal.h ++++ b/hw/ide/internal.h +@@ -289,6 +289,7 @@ typedef struct IDEDMAOps IDEDMAOps; + #define ATAPI_INT_REASON_TAG 0xf8 + + /* same constants as bochs */ ++#define ASC_NO_SEEK_COMPLETE 0x02 + #define ASC_ILLEGAL_OPCODE 0x20 + #define ASC_LOGICAL_BLOCK_OOR 0x21 + #define ASC_INV_FIELD_IN_CMD_PACKET 0x24 +@@ -536,6 +537,7 @@ void ide_dma_error(IDEState *s); + + void ide_atapi_cmd_ok(IDEState *s); + void ide_atapi_cmd_error(IDEState *s, int sense_key, int asc); ++void ide_atapi_dma_restart(IDEState *s); + void ide_atapi_io_error(IDEState *s, int ret); + + void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val); +diff --git a/hw/ide/pci.c b/hw/ide/pci.c +index 635a364..cf7acb0 100644 +--- a/hw/ide/pci.c ++++ b/hw/ide/pci.c +@@ -220,6 +220,17 @@ static void bmdma_restart_bh(void *opaque) + } + } else if (error_status & BM_STATUS_RETRY_FLUSH) { + ide_flush_cache(bmdma_active_if(bm)); ++ } else { ++ IDEState *s = bmdma_active_if(bm); ++ ++ /* ++ * We've not got any bits to tell us about ATAPI - but ++ * we do have the end_transfer_func that tells us what ++ * we're trying to do. ++ */ ++ if (s->end_transfer_func == ide_atapi_cmd) { ++ ide_atapi_dma_restart(s); ++ } + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-atomics-add-explicit-compiler-fence-in-__atomic-memo.patch b/SOURCES/kvm-atomics-add-explicit-compiler-fence-in-__atomic-memo.patch new file mode 100644 index 0000000..827e23b --- /dev/null +++ b/SOURCES/kvm-atomics-add-explicit-compiler-fence-in-__atomic-memo.patch @@ -0,0 +1,80 @@ +From d37475eb567b61ce6a18f9fcbf35eb929be8d99f Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 19 Jun 2015 10:45:29 +0200 +Subject: [PATCH] atomics: add explicit compiler fence in __atomic memory + barriers + +Message-id: <1434710730-26183-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 66333 +O-Subject: [RHEL7.2/7.1.z qemu-kvm PATCH] atomics: add explicit compiler fence in __atomic memory barriers +Bugzilla: 1142857 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert + +Bugzilla: 1142857 (aka 8*10^6/7) + +Brew build: 9393725 + +__atomic_thread_fence does not include a compiler barrier; in the +C++11 memory model, fences take effect in combination with other +atomic operations. GCC implements this by making __atomic_load and +__atomic_store access memory as if the pointer was volatile, and +leaves no trace whatsoever of acquire and release fences in the +compiler's intermediate representation. + +In QEMU, we want memory barriers to act on all memory, but at the same +time we would like to use __atomic_thread_fence for portability reasons. +Add compiler barriers manually around the __atomic_thread_fence. + +Thanks to Uli and Kevin for analyzing this bug! + +Message-Id: <1433334080-14912-1-git-send-email-pbonzini@redhat.com> +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Paolo Bonzini +(cherry picked from commit 3bbf572345c65813f86a8fc434ea1b23beb08e16) +Signed-off-by: Miroslav Rezanina +--- + include/qemu/atomic.h | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h +index 0aa8913..690d0d6 100644 +--- a/include/qemu/atomic.h ++++ b/include/qemu/atomic.h +@@ -99,7 +99,13 @@ + + #ifndef smp_wmb + #ifdef __ATOMIC_RELEASE +-#define smp_wmb() __atomic_thread_fence(__ATOMIC_RELEASE) ++/* __atomic_thread_fence does not include a compiler barrier; instead, ++ * the barrier is part of __atomic_load/__atomic_store's "volatile-like" ++ * semantics. If smp_wmb() is a no-op, absence of the barrier means that ++ * the compiler is free to reorder stores on each side of the barrier. ++ * Add one here, and similarly in smp_rmb() and smp_read_barrier_depends(). ++ */ ++#define smp_wmb() ({ barrier(); __atomic_thread_fence(__ATOMIC_RELEASE); barrier(); }) + #else + #define smp_wmb() __sync_synchronize() + #endif +@@ -107,7 +113,7 @@ + + #ifndef smp_rmb + #ifdef __ATOMIC_ACQUIRE +-#define smp_rmb() __atomic_thread_fence(__ATOMIC_ACQUIRE) ++#define smp_rmb() ({ barrier(); __atomic_thread_fence(__ATOMIC_ACQUIRE); barrier(); }) + #else + #define smp_rmb() __sync_synchronize() + #endif +@@ -115,7 +121,7 @@ + + #ifndef smp_read_barrier_depends + #ifdef __ATOMIC_CONSUME +-#define smp_read_barrier_depends() __atomic_thread_fence(__ATOMIC_CONSUME) ++#define smp_read_barrier_depends() ({ barrier(); __atomic_thread_fence(__ATOMIC_CONSUME); barrier(); }) + #else + #define smp_read_barrier_depends() barrier() + #endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-audio-Lower-default-wakeup-rate-to-100-times-second.patch b/SOURCES/kvm-audio-Lower-default-wakeup-rate-to-100-times-second.patch new file mode 100644 index 0000000..d6767f4 --- /dev/null +++ b/SOURCES/kvm-audio-Lower-default-wakeup-rate-to-100-times-second.patch @@ -0,0 +1,49 @@ +From c67b37a75c6b76da744853a24d029f8b5fde9177 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 15 Jan 2014 09:14:32 -0500 +Subject: [PATCH 05/14] audio: Lower default wakeup rate to 100 times / second + +Message-id: +Patchwork-id: 56720 +O-Subject: [RHEL7 qemu-kvm PATCH 2/3] audio: Lower default wakeup rate to 100 times / second +Bugzilla: 1017636 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +This is more then plenty to keep audio card fifos filles / emptied. + +This drops host cpu-load for audio playback inside a linux vm from +13% to 9%. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 40a814b0b1789b94c483190b3208729b5182e5bd) +Signed-off-by: Miroslav Rezanina +--- + audio/audio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + audio/audio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/audio/audio.c b/audio/audio.c +index ebf7d3f..33b3fb6 100644 +--- a/audio/audio.c ++++ b/audio/audio.c +@@ -95,7 +95,7 @@ static struct { + } + }, + +- .period = { .hertz = 250 }, ++ .period = { .hertz = 100 }, + .plive = 0, + .log_to_monitor = 0, + .try_poll_in = 1, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-audio-adjust-pulse-to-100Hz-wakeup-rate.patch b/SOURCES/kvm-audio-adjust-pulse-to-100Hz-wakeup-rate.patch new file mode 100644 index 0000000..7d900a7 --- /dev/null +++ b/SOURCES/kvm-audio-adjust-pulse-to-100Hz-wakeup-rate.patch @@ -0,0 +1,50 @@ +From 269456948b6a1aa7d7c63cf0d4a39bd623eb6f0c Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 15 Jan 2014 09:14:33 -0500 +Subject: [PATCH 06/14] audio: adjust pulse to 100Hz wakeup rate + +Message-id: <83102d05b6ab8140cc893407509ca55fd6dd4d72.1389776721.git.mrezanin@redhat.com> +Patchwork-id: 56722 +O-Subject: [RHEL7 qemu-kvm PATCH 3/3] audio: adjust pulse to 100Hz wakeup rate +Bugzilla: 1017636 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Laszlo Ersek + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 0e8ae611bda0dfb038da2d865801d8adbd692bad) +Signed-off-by: Miroslav Rezanina +--- + audio/paaudio.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + audio/paaudio.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/audio/paaudio.c b/audio/paaudio.c +index 8b69778..90ff245 100644 +--- a/audio/paaudio.c ++++ b/audio/paaudio.c +@@ -547,11 +547,11 @@ static int qpa_init_out (HWVoiceOut *hw, struct audsettings *as) + ss.rate = as->freq; + + /* +- * qemu audio tick runs at 250 Hz (by default), so processing +- * data chunks worth 4 ms of sound should be a good fit. ++ * qemu audio tick runs at 100 Hz (by default), so processing ++ * data chunks worth 10 ms of sound should be a good fit. + */ +- ba.tlength = pa_usec_to_bytes (4 * 1000, &ss); +- ba.minreq = pa_usec_to_bytes (2 * 1000, &ss); ++ ba.tlength = pa_usec_to_bytes (10 * 1000, &ss); ++ ba.minreq = pa_usec_to_bytes (5 * 1000, &ss); + ba.maxlength = -1; + ba.prebuf = -1; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-audio-honor-QEMU_AUDIO_TIMER_PERIOD-instead-of-wakin.patch b/SOURCES/kvm-audio-honor-QEMU_AUDIO_TIMER_PERIOD-instead-of-wakin.patch new file mode 100644 index 0000000..326045a --- /dev/null +++ b/SOURCES/kvm-audio-honor-QEMU_AUDIO_TIMER_PERIOD-instead-of-wakin.patch @@ -0,0 +1,63 @@ +From 0bdb440567cacd42675c39d97fb19b20e77d93da Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 15 Jan 2014 09:14:31 -0500 +Subject: [PATCH 04/14] audio: honor QEMU_AUDIO_TIMER_PERIOD instead of waking + up every *nano* second. + +Message-id: <23a0c5622fb294ab7cbcf3a812f5ab2f2e47b461.1389776721.git.mrezanin@redhat.com> +Patchwork-id: 56719 +O-Subject: [RHEL7 qemu-kvm PATCH 1/3] audio: honor QEMU_AUDIO_TIMER_PERIOD instead of waking up every *nano* second. +Bugzilla: 1017636 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Laszlo Ersek + +From: Miroslav Rezanina + +This is manual backport of upstream commit b4350deed: + + Now that we no longer have MIN_REARM_TIMER_NS a bug in the audio subsys has + clearly shown it self by trying to make a timer fire every nano second. + + Note we have a similar problem in 1.6, 1.5 and older but there + MIN_REARM_TIMER_NS limits the wakeups caused by audio being active to + 4000 times / second. This still causes a host cpu load of 50 % for simply + playing audio, where as with this patch git master is at 13%, so we should + backport this to 1.5 and 1.6 too. + + Note this will not apply to 1.5 and 1.6 as is. + + Cc: qemu-stable@nongnu.org + Signed-off-by: Hans de Goede + Signed-off-by: Gerd Hoffmann + +RHEL does not use new timer api so patch couldn't be cherry picked. + +Signed-off-by: Miroslav Rezanina +Upstream: b4350deed67b95651896ddb60cf9f765093a4848 +--- + audio/audio.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + audio/audio.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/audio/audio.c b/audio/audio.c +index 02bb886..ebf7d3f 100644 +--- a/audio/audio.c ++++ b/audio/audio.c +@@ -1124,7 +1124,8 @@ static int audio_is_timer_needed (void) + static void audio_reset_timer (AudioState *s) + { + if (audio_is_timer_needed ()) { +- qemu_mod_timer (s->ts, qemu_get_clock_ns (vm_clock) + 1); ++ qemu_mod_timer (s->ts, ++ qemu_get_clock_ns (vm_clock) + conf.period.ticks); + } + else { + qemu_del_timer (s->ts); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-audio-remove-CONFIG_MIXEMU-configure-option.patch b/SOURCES/kvm-audio-remove-CONFIG_MIXEMU-configure-option.patch new file mode 100644 index 0000000..1485073 --- /dev/null +++ b/SOURCES/kvm-audio-remove-CONFIG_MIXEMU-configure-option.patch @@ -0,0 +1,181 @@ +From 2254d0ce9d463c8a72ec9b1e21a9310231764c3a Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Tue, 15 Oct 2013 17:11:00 +0200 +Subject: [PATCH 23/25] audio: remove CONFIG_MIXEMU configure option + +RH-Author: Bandan Das +Message-id: <1381857067-9399-4-git-send-email-bsd@redhat.com> +Patchwork-id: 54951 +O-Subject: [PATCH RHEL-7 qemu-kvm v3 3/5] audio: remove CONFIG_MIXEMU configure option +Bugzilla: 954195 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster + +Signed-off-by: Bandan Das +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 19b0dfc19c0d911c322a03899806c59bc2f593c9) + +Conflicts: + configure +--- + audio/mixeng.c | 6 ------ + configure | 8 -------- + hw/audio/hda-codec.c | 30 ------------------------------ + 3 files changed, 44 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + audio/mixeng.c | 6 ------ + configure | 8 -------- + hw/audio/hda-codec.c | 30 ------------------------------ + 3 files changed, 0 insertions(+), 44 deletions(-) + +diff --git a/audio/mixeng.c b/audio/mixeng.c +index 02a9d9f..0e4976f 100644 +--- a/audio/mixeng.c ++++ b/audio/mixeng.c +@@ -348,7 +348,6 @@ void mixeng_clear (struct st_sample *buf, int len) + + void mixeng_volume (struct st_sample *buf, int len, struct mixeng_volume *vol) + { +-#ifdef CONFIG_MIXEMU + if (vol->mute) { + mixeng_clear (buf, len); + return; +@@ -364,9 +363,4 @@ void mixeng_volume (struct st_sample *buf, int len, struct mixeng_volume *vol) + #endif + buf += 1; + } +-#else +- (void) buf; +- (void) len; +- (void) vol; +-#endif + } +diff --git a/configure b/configure +index 02e483d..4d1bc44 100755 +--- a/configure ++++ b/configure +@@ -215,7 +215,6 @@ linux_user="no" + bsd_user="no" + guest_base="yes" + uname_release="" +-mixemu="no" + aix="no" + blobs="yes" + pkgversion="" +@@ -851,8 +850,6 @@ for opt do + ;; + --enable-nptl) nptl="yes" + ;; +- --enable-mixemu) mixemu="yes" +- ;; + --disable-linux-aio) linux_aio="no" + ;; + --enable-linux-aio) linux_aio="yes" +@@ -1115,7 +1112,6 @@ echo " (affects only QEMU, not qemu-img)" + echo " --block-drv-ro-whitelist=L" + echo " set block driver read-only whitelist" + echo " (affects only QEMU, not qemu-img)" +-echo " --enable-mixemu enable mixer emulation" + echo " --disable-xen disable xen backend driver support" + echo " --enable-xen enable xen backend driver support" + echo " --disable-xen-pci-passthrough" +@@ -3537,7 +3533,6 @@ echo "mingw32 support $mingw32" + echo "Audio drivers $audio_drv_list" + echo "Block whitelist (rw) $block_drv_rw_whitelist" + echo "Block whitelist (ro) $block_drv_ro_whitelist" +-echo "Mixer emulation $mixemu" + echo "VirtFS support $virtfs" + echo "VNC support $vnc" + if test "$vnc" = "yes" ; then +@@ -3719,9 +3714,6 @@ if test "$audio_win_int" = "yes" ; then + fi + echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak + echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak +-if test "$mixemu" = "yes" ; then +- echo "CONFIG_MIXEMU=y" >> $config_host_mak +-fi + if test "$vnc" = "yes" ; then + echo "CONFIG_VNC=y" >> $config_host_mak + fi +diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c +index 3217d90..94c472c 100644 +--- a/hw/audio/hda-codec.c ++++ b/hw/audio/hda-codec.c +@@ -118,11 +118,9 @@ static void hda_codec_parse_fmt(uint32_t format, struct audsettings *as) + #define QEMU_HDA_AMP_NONE (0) + #define QEMU_HDA_AMP_STEPS 0x4a + +-#ifdef CONFIG_MIXEMU + #define PARAM mixemu + #define HDA_MIXER + #include "hda-codec-common.h" +-#endif + + #define PARAM nomixemu + #include "hda-codec-common.h" +@@ -594,11 +592,7 @@ static const VMStateDescription vmstate_hda_audio = { + + static Property hda_audio_properties[] = { + DEFINE_PROP_UINT32("debug", HDAAudioState, debug, 0), +-#ifdef CONFIG_MIXEMU + DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, true), +-#else +- DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, false), +-#endif + DEFINE_PROP_END_OF_LIST(), + }; + +@@ -609,15 +603,7 @@ static int hda_audio_init_output(HDACodecDevice *hda) + if (!a->mixer) { + return hda_audio_init(hda, &output_nomixemu); + } else { +- +-#ifdef CONFIG_MIXEMU + return hda_audio_init(hda, &output_mixemu); +-#else +- fprintf(stderr, "ERROR: " +- "hda-codec : Mixer emulation has not been compiled in!\n"); +- return -1; +-#endif +- + } + } + +@@ -628,15 +614,7 @@ static int hda_audio_init_duplex(HDACodecDevice *hda) + if (!a->mixer) { + return hda_audio_init(hda, &duplex_nomixemu); + } else { +- +-#ifdef CONFIG_MIXEMU + return hda_audio_init(hda, &duplex_mixemu); +-#else +- fprintf(stderr, "ERROR: " +- "hda-codec : Mixer emulation has not been compiled in!\n"); +- return -1; +-#endif +- + } + } + +@@ -647,15 +625,7 @@ static int hda_audio_init_micro(HDACodecDevice *hda) + if (!a->mixer) { + return hda_audio_init(hda, µ_nomixemu); + } else { +- +-#ifdef CONFIG_MIXEMU + return hda_audio_init(hda, µ_mixemu); +-#else +- fprintf(stderr, "ERROR: " +- "hda-codec : Mixer emulation has not been compiled in!\n"); +- return -1; +-#endif +- + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-avoid-a-bogus-COMPLETED-CANCELLED-transition.patch b/SOURCES/kvm-avoid-a-bogus-COMPLETED-CANCELLED-transition.patch new file mode 100644 index 0000000..fcad994 --- /dev/null +++ b/SOURCES/kvm-avoid-a-bogus-COMPLETED-CANCELLED-transition.patch @@ -0,0 +1,58 @@ +From 089e31ac09be32fce980da9b76da856ce83fe4ff Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Wed, 15 Jan 2014 19:42:27 +0100 +Subject: [PATCH 01/34] avoid a bogus COMPLETED->CANCELLED transition + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1389814948-3983-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 56730 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] avoid a bogus COMPLETED->CANCELLED transition +Bugzilla: 1053699 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek + +From: "Zhanghaoyu (A)" + +Avoid a bogus COMPLETED->CANCELLED transition. +There is a period of time from the timing of setting COMPLETED state to that of migration thread exits, so during which it's problematic in COMPLETED->CANCELLED transition. + +Signed-off-by: Zeng Junliang +Signed-off-by: Zhang Haoyu +Reviewed-by: Paolo Bonzini +Signed-off-by: Juan Quintela +(cherry picked from commit 6f2b811a61810a7fd9f9a5085de223f66b823342) +--- + migration.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/migration.c b/migration.c +index ef9a61f..735f7ca 100644 +--- a/migration.c ++++ b/migration.c +@@ -324,9 +324,16 @@ void migrate_fd_error(MigrationState *s) + + static void migrate_fd_cancel(MigrationState *s) + { ++ int old_state ; + DPRINTF("cancelling migration\n"); + +- migrate_set_state(s, s->state, MIG_STATE_CANCELLED); ++ do { ++ old_state = s->state; ++ if (old_state != MIG_STATE_SETUP && old_state != MIG_STATE_ACTIVE) { ++ break; ++ } ++ migrate_set_state(s, old_state, MIG_STATE_CANCELLED); ++ } while (s->state != MIG_STATE_CANCELLED); + } + + void add_migration_state_change_notifier(Notifier *notify) +-- +1.7.1 + diff --git a/SOURCES/kvm-balloon-Allow-multiple-inhibit-users.patch b/SOURCES/kvm-balloon-Allow-multiple-inhibit-users.patch new file mode 100644 index 0000000..453160b --- /dev/null +++ b/SOURCES/kvm-balloon-Allow-multiple-inhibit-users.patch @@ -0,0 +1,71 @@ +From 8e0778982e9a71000c6a1d999e0caf5934bebd61 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 13 Dec 2018 21:54:44 +0100 +Subject: [PATCH 2/5] balloon: Allow multiple inhibit users + +RH-Author: Alex Williamson +Message-id: <154473808463.22725.5535931320059757090.stgit@gimli.home> +Patchwork-id: 83494 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 2/5] balloon: Allow multiple inhibit users +Bugzilla: 1659229 +RH-Acked-by: Peter Xu +RH-Acked-by: Cornelia Huck +RH-Acked-by: Auger Eric + +Bugzilla: 1659229 + +A simple true/false internal state does not allow multiple users. Fix +this within the existing interface by converting to a counter, so long +as the counter is elevated, ballooning is inhibited. + +Reviewed-by: David Hildenbrand +Reviewed-by: Peter Xu +Reviewed-by: Cornelia Huck +Signed-off-by: Alex Williamson +(cherry picked from commit 01ccbec7bdf6f89f1b7d46dda05e4c1fd2dd5ade) +Signed-off-by: Miroslav Rezanina +--- + balloon.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/balloon.c b/balloon.c +index c7a0cf1..6a17096 100644 +--- a/balloon.c ++++ b/balloon.c +@@ -25,6 +25,7 @@ + */ + + #include "monitor/monitor.h" ++#include "qemu/atomic.h" + #include "exec/cpu-common.h" + #include "sysemu/kvm.h" + #include "sysemu/balloon.h" +@@ -35,16 +36,22 @@ + static QEMUBalloonEvent *balloon_event_fn; + static QEMUBalloonStatus *balloon_stat_fn; + static void *balloon_opaque; +-static bool balloon_inhibited; ++static int balloon_inhibit_count; + + bool qemu_balloon_is_inhibited(void) + { +- return balloon_inhibited; ++ return atomic_read(&balloon_inhibit_count) > 0; + } + + void qemu_balloon_inhibit(bool state) + { +- balloon_inhibited = state; ++ if (state) { ++ atomic_inc(&balloon_inhibit_count); ++ } else { ++ atomic_dec(&balloon_inhibit_count); ++ } ++ ++ assert(atomic_read(&balloon_inhibit_count) >= 0); + } + + int qemu_add_balloon_handler(QEMUBalloonEvent *event_func, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-balloon-fix-segfault-and-harden-the-stats-queue.patch b/SOURCES/kvm-balloon-fix-segfault-and-harden-the-stats-queue.patch new file mode 100644 index 0000000..b73ee3a --- /dev/null +++ b/SOURCES/kvm-balloon-fix-segfault-and-harden-the-stats-queue.patch @@ -0,0 +1,138 @@ +From 1f177df6a47fb1e2961067a50e005efad52595cc Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Wed, 5 Oct 2016 17:22:26 +0200 +Subject: [PATCH 4/8] balloon: fix segfault and harden the stats queue + +RH-Author: Ladi Prosek +Message-id: <1475666548-9186-5-git-send-email-lprosek@redhat.com> +Patchwork-id: 72483 +O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 4/6] balloon: fix segfault and harden the stats queue +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +The segfault here is triggered by the driver notifying the stats queue +twice after adding a buffer to it. This effectively resets stats_vq_elem +back to NULL and QEMU crashes on the next stats timer tick in +balloon_stats_poll_cb. + +This is a regression introduced in 51b19ebe4320f3dc, although admittedly +the device assumed too much about the stats queue protocol even before +that commit. This commit adds a few more checks and ensures that the one +stats buffer gets deallocated on device reset. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Ladi Prosek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 4eae2a657d1ff5ada56eb9b4966eae0eff333b0b) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina + +Conflicts: + * 1.5.3 does not return pointers from virtqueue_pop so only the + "harden the stats queue" part of the upstream patch description + applies + * a new field stats_vq_elem_pending is introduced to keep track + of the state of stats_vq_elem in lieu of its nullness upstream + * virtio_balloon_device_reset only resets stats_vq_elem_pending + because there is nothing to free +--- + hw/virtio/virtio-balloon.c | 27 +++++++++++++++++++++++---- + include/hw/virtio/virtio-balloon.h | 1 + + 2 files changed, 24 insertions(+), 4 deletions(-) + +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index 016dc60..17b3029 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -95,13 +95,14 @@ static void balloon_stats_poll_cb(void *opaque) + VirtIOBalloon *s = opaque; + VirtIODevice *vdev = VIRTIO_DEVICE(s); + +- if (!balloon_stats_supported(s)) { ++ if (!s->stats_vq_elem_pending || !balloon_stats_supported(s)) { + /* re-schedule */ + balloon_stats_change_timer(s, s->stats_poll_interval); + return; + } + + virtqueue_push(s->svq, &s->stats_vq_elem, s->stats_vq_offset); ++ s->stats_vq_elem_pending = false; + virtio_notify(vdev, s->svq); + } + +@@ -220,14 +221,22 @@ static void virtio_balloon_handle_output(VirtIODevice *vdev, VirtQueue *vq) + static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq) + { + VirtIOBalloon *s = VIRTIO_BALLOON(vdev); +- VirtQueueElement *elem = &s->stats_vq_elem; ++ VirtQueueElement elem; + VirtIOBalloonStat stat; + size_t offset = 0; + qemu_timeval tv; + +- if (!virtqueue_pop(vq, elem)) { ++ if (!virtqueue_pop(vq, &elem)) { + goto out; + } ++ if (s->stats_vq_elem_pending) { ++ /* This should never happen if the driver follows the spec. */ ++ virtqueue_push(vq, &s->stats_vq_elem, 0); ++ virtio_notify(vdev, vq); ++ } ++ ++ s->stats_vq_elem = elem; ++ s->stats_vq_elem_pending = true; + + /* Initialize the stats to get rid of any stale values. This is only + * needed to handle the case where a guest supports fewer stats than it +@@ -235,7 +244,7 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq) + */ + reset_stats(s); + +- while (iov_to_buf(elem->out_sg, elem->out_num, offset, &stat, sizeof(stat)) ++ while (iov_to_buf(elem.out_sg, elem.out_num, offset, &stat, sizeof(stat)) + == sizeof(stat)) { + uint16_t tag = tswap16(stat.tag); + uint64_t val = tswap64(stat.val); +@@ -384,6 +393,15 @@ static void virtio_balloon_device_exit(VirtIODevice *vdev) + virtio_cleanup(vdev); + } + ++static void virtio_balloon_device_reset(VirtIODevice *vdev) ++{ ++ VirtIOBalloon *s = VIRTIO_BALLOON(vdev); ++ ++ if (s->stats_vq_elem_pending) { ++ s->stats_vq_elem_pending = false; ++ } ++} ++ + static Property virtio_balloon_properties[] = { + DEFINE_PROP_END_OF_LIST(), + }; +@@ -396,6 +414,7 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data) + set_bit(DEVICE_CATEGORY_MISC, dc->categories); + vdc->init = virtio_balloon_device_init; + vdc->exit = virtio_balloon_device_exit; ++ vdc->reset = virtio_balloon_device_reset; + vdc->get_config = virtio_balloon_get_config; + vdc->set_config = virtio_balloon_set_config; + vdc->get_features = virtio_balloon_get_features; +diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h +index f863bfe..a84736b 100644 +--- a/include/hw/virtio/virtio-balloon.h ++++ b/include/hw/virtio/virtio-balloon.h +@@ -63,6 +63,7 @@ typedef struct VirtIOBalloon { + uint32_t actual; + uint64_t stats[VIRTIO_BALLOON_S_NR]; + VirtQueueElement stats_vq_elem; ++ bool stats_vq_elem_pending; + size_t stats_vq_offset; + QEMUTimer *stats_timer; + int64_t stats_last_update; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-bdrv-Use-Error-for-creating-images.patch b/SOURCES/kvm-bdrv-Use-Error-for-creating-images.patch new file mode 100644 index 0000000..1bb175a --- /dev/null +++ b/SOURCES/kvm-bdrv-Use-Error-for-creating-images.patch @@ -0,0 +1,321 @@ +From 3ba5256b9642a3313b9ffaf8abc0f6302e3e39e6 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:10 +0100 +Subject: [PATCH 17/87] bdrv: Use "Error" for creating images + +RH-Author: Max Reitz +Message-id: <1383604354-12743-20-git-send-email-mreitz@redhat.com> +Patchwork-id: 55319 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 19/43] bdrv: Use "Error" for creating images +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Add an Error ** parameter to BlockDriver.bdrv_create to allow more +specific error messages. + +Signed-off-by: Max Reitz +(cherry picked from commit d5124c00d80b4d948509f2c7f6b54228d9981f75) + +Signed-off-by: Max Reitz + +Conflicts: + block/raw.c + block/raw_bsd.c + +Conflicts because raw_bsd.c does not exist downstream; instead, there is +raw.c. +--- + block.c | 2 +- + block/cow.c | 3 ++- + block/gluster.c | 2 +- + block/iscsi.c | 3 ++- + block/qcow.c | 3 ++- + block/qcow2.c | 3 ++- + block/qed.c | 3 ++- + block/raw-posix.c | 6 ++++-- + block/raw-win32.c | 3 ++- + block/raw.c | 3 ++- + block/rbd.c | 3 ++- + block/sheepdog.c | 3 ++- + block/ssh.c | 3 ++- + block/vdi.c | 3 ++- + block/vmdk.c | 3 ++- + block/vpc.c | 3 ++- + include/block/block_int.h | 3 ++- + 17 files changed, 34 insertions(+), 18 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + block/cow.c | 3 ++- + block/gluster.c | 2 +- + block/iscsi.c | 3 ++- + block/qcow.c | 3 ++- + block/qcow2.c | 3 ++- + block/qed.c | 3 ++- + block/raw-posix.c | 6 ++++-- + block/raw-win32.c | 3 ++- + block/raw.c | 3 ++- + block/rbd.c | 3 ++- + block/sheepdog.c | 3 ++- + block/ssh.c | 3 ++- + block/vdi.c | 3 ++- + block/vmdk.c | 3 ++- + block/vpc.c | 3 ++- + include/block/block_int.h | 3 ++- + 17 files changed, 34 insertions(+), 18 deletions(-) + +diff --git a/block.c b/block.c +index 921fa33..0cb5ac9 100644 +--- a/block.c ++++ b/block.c +@@ -373,7 +373,7 @@ static void coroutine_fn bdrv_create_co_entry(void *opaque) + CreateCo *cco = opaque; + assert(cco->drv); + +- cco->ret = cco->drv->bdrv_create(cco->filename, cco->options); ++ cco->ret = cco->drv->bdrv_create(cco->filename, cco->options, NULL); + } + + int bdrv_create(BlockDriver *drv, const char* filename, +diff --git a/block/cow.c b/block/cow.c +index ce8deb8..c1d2dc8 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -295,7 +295,8 @@ static void cow_close(BlockDriverState *bs) + { + } + +-static int cow_create(const char *filename, QEMUOptionParameter *options) ++static int cow_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + struct cow_header_v2 cow_header; + struct stat st; +diff --git a/block/gluster.c b/block/gluster.c +index fa46b6f..bf39264 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -366,7 +366,7 @@ out: + } + + static int qemu_gluster_create(const char *filename, +- QEMUOptionParameter *options) ++ QEMUOptionParameter *options, Error **errp) + { + struct glfs *glfs; + struct glfs_fd *fd; +diff --git a/block/iscsi.c b/block/iscsi.c +index 8d49e35..ac35caa 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1249,7 +1249,8 @@ static int iscsi_has_zero_init(BlockDriverState *bs) + return 0; + } + +-static int iscsi_create(const char *filename, QEMUOptionParameter *options) ++static int iscsi_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int ret = 0; + int64_t total_size = 0; +diff --git a/block/qcow.c b/block/qcow.c +index b8887f0..1a6926f 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -659,7 +659,8 @@ static void qcow_close(BlockDriverState *bs) + error_free(s->migration_blocker); + } + +-static int qcow_create(const char *filename, QEMUOptionParameter *options) ++static int qcow_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int header_size, backing_filename_len, l1_size, shift, i; + QCowHeader header; +diff --git a/block/qcow2.c b/block/qcow2.c +index 2e7e9f5..b6e50af 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1467,7 +1467,8 @@ out: + return ret; + } + +-static int qcow2_create(const char *filename, QEMUOptionParameter *options) ++static int qcow2_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + const char *backing_file = NULL; + const char *backing_fmt = NULL; +diff --git a/block/qed.c b/block/qed.c +index d49e0cd..c56b5e2 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -604,7 +604,8 @@ out: + return ret; + } + +-static int bdrv_qed_create(const char *filename, QEMUOptionParameter *options) ++static int bdrv_qed_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + uint64_t image_size = 0; + uint32_t cluster_size = QED_DEFAULT_CLUSTER_SIZE; +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 5f4e824..249bffb 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1041,7 +1041,8 @@ static int64_t raw_get_allocated_file_size(BlockDriverState *bs) + return (int64_t)st.st_blocks * 512; + } + +-static int raw_create(const char *filename, QEMUOptionParameter *options) ++static int raw_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int fd; + int result = 0; +@@ -1505,7 +1506,8 @@ static coroutine_fn BlockDriverAIOCB *hdev_aio_discard(BlockDriverState *bs, + cb, opaque, QEMU_AIO_DISCARD|QEMU_AIO_BLKDEV); + } + +-static int hdev_create(const char *filename, QEMUOptionParameter *options) ++static int hdev_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int fd; + int ret = 0; +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 1cfec65..9ebb083 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -421,7 +421,8 @@ static int64_t raw_get_allocated_file_size(BlockDriverState *bs) + return st.st_size; + } + +-static int raw_create(const char *filename, QEMUOptionParameter *options) ++static int raw_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int fd; + int64_t total_size = 0; +diff --git a/block/raw.c b/block/raw.c +index 801591d..f92c04e 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -105,7 +105,8 @@ static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs, + return bdrv_aio_ioctl(bs->file, req, buf, cb, opaque); + } + +-static int raw_create(const char *filename, QEMUOptionParameter *options) ++static int raw_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + return bdrv_create_file(filename, options); + } +diff --git a/block/rbd.c b/block/rbd.c +index 8d4ae9f..169d3cf 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -286,7 +286,8 @@ static int qemu_rbd_set_conf(rados_t cluster, const char *conf) + return ret; + } + +-static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options) ++static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int64_t bytes = 0; + int64_t objsize; +diff --git a/block/sheepdog.c b/block/sheepdog.c +index a8ce933..952d703 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -1455,7 +1455,8 @@ out: + return ret; + } + +-static int sd_create(const char *filename, QEMUOptionParameter *options) ++static int sd_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int ret = 0; + uint32_t vid = 0, base_vid = 0; +diff --git a/block/ssh.c b/block/ssh.c +index f950fcc..fa3c78d 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -651,7 +651,8 @@ static QEMUOptionParameter ssh_create_options[] = { + { NULL } + }; + +-static int ssh_create(const char *filename, QEMUOptionParameter *options) ++static int ssh_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int r, ret; + Error *local_err = NULL; +diff --git a/block/vdi.c b/block/vdi.c +index 661c3f0..84860fe 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -645,7 +645,8 @@ static int vdi_co_write(BlockDriverState *bs, + return ret; + } + +-static int vdi_create(const char *filename, QEMUOptionParameter *options) ++static int vdi_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int fd; + int result = 0; +diff --git a/block/vmdk.c b/block/vmdk.c +index d9e2545..fa64f05 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1552,7 +1552,8 @@ static int filename_decompose(const char *filename, char *path, char *prefix, + return VMDK_OK; + } + +-static int vmdk_create(const char *filename, QEMUOptionParameter *options) ++static int vmdk_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + int fd, idx = 0; + char desc[BUF_SIZE]; +diff --git a/block/vpc.c b/block/vpc.c +index cf5e751..5d65756 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -684,7 +684,8 @@ static int create_fixed_disk(int fd, uint8_t *buf, int64_t total_size) + return ret; + } + +-static int vpc_create(const char *filename, QEMUOptionParameter *options) ++static int vpc_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) + { + uint8_t buf[1024]; + struct vhd_footer *footer = (struct vhd_footer *) buf; +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 3450b46..696bbb9 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -96,7 +96,8 @@ struct BlockDriver { + const uint8_t *buf, int nb_sectors); + void (*bdrv_close)(BlockDriverState *bs); + void (*bdrv_rebind)(BlockDriverState *bs); +- int (*bdrv_create)(const char *filename, QEMUOptionParameter *options); ++ int (*bdrv_create)(const char *filename, QEMUOptionParameter *options, ++ Error **errp); + int (*bdrv_set_key)(BlockDriverState *bs, const char *key); + int (*bdrv_make_empty)(BlockDriverState *bs); + /* aio */ +-- +1.7.1 + diff --git a/SOURCES/kvm-bdrv-Use-Error-for-opening-images.patch b/SOURCES/kvm-bdrv-Use-Error-for-opening-images.patch new file mode 100644 index 0000000..aeef381 --- /dev/null +++ b/SOURCES/kvm-bdrv-Use-Error-for-opening-images.patch @@ -0,0 +1,565 @@ +From cbf4a883b38edbd2740c0ed374e1101fe56513bf Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:09 +0100 +Subject: [PATCH 16/87] bdrv: Use "Error" for opening images + +RH-Author: Max Reitz +Message-id: <1383604354-12743-19-git-send-email-mreitz@redhat.com> +Patchwork-id: 55318 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 18/43] bdrv: Use "Error" for opening images +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Add an Error ** parameter to BlockDriver.bdrv_open and +BlockDriver.bdrv_file_open to allow more specific error messages. + +Signed-off-by: Max Reitz +(cherry picked from commit 015a1036a74ad29bb6916754911ce25587ff4db3) + +Signed-off-by: Max Reitz + +Conflicts: + block/raw.c + block/raw_bsd.c + +Conflicts because raw_bsd.c does not exist downstream; instead, there is +raw.c. +--- + block.c | 4 ++-- + block/blkdebug.c | 3 ++- + block/blkverify.c | 3 ++- + block/bochs.c | 3 ++- + block/cloop.c | 3 ++- + block/cow.c | 3 ++- + block/curl.c | 3 ++- + block/dmg.c | 3 ++- + block/gluster.c | 2 +- + block/iscsi.c | 5 +++-- + block/nbd.c | 3 ++- + block/parallels.c | 3 ++- + block/qcow.c | 3 ++- + block/qcow2.c | 5 +++-- + block/qed.c | 5 +++-- + block/raw-posix.c | 12 ++++++++---- + block/raw-win32.c | 6 ++++-- + block/raw.c | 3 ++- + block/rbd.c | 3 ++- + block/sheepdog.c | 3 ++- + block/snapshot.c | 2 +- + block/ssh.c | 3 ++- + block/vdi.c | 3 ++- + block/vhdx.c | 3 ++- + block/vmdk.c | 3 ++- + block/vpc.c | 3 ++- + block/vvfat.c | 3 ++- + include/block/block_int.h | 6 ++++-- + 28 files changed, 67 insertions(+), 37 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 4 ++-- + block/blkdebug.c | 3 ++- + block/blkverify.c | 3 ++- + block/bochs.c | 3 ++- + block/cloop.c | 3 ++- + block/cow.c | 3 ++- + block/curl.c | 3 ++- + block/dmg.c | 3 ++- + block/gluster.c | 2 +- + block/iscsi.c | 5 +++-- + block/nbd.c | 3 ++- + block/parallels.c | 3 ++- + block/qcow.c | 3 ++- + block/qcow2.c | 5 +++-- + block/qed.c | 5 +++-- + block/raw-posix.c | 12 ++++++++---- + block/raw-win32.c | 6 ++++-- + block/raw.c | 3 ++- + block/rbd.c | 3 ++- + block/sheepdog.c | 3 ++- + block/snapshot.c | 2 +- + block/ssh.c | 3 ++- + block/vdi.c | 3 ++- + block/vhdx.c | 3 ++- + block/vmdk.c | 3 ++- + block/vpc.c | 3 ++- + block/vvfat.c | 3 ++- + include/block/block_int.h | 6 ++++-- + 28 files changed, 67 insertions(+), 37 deletions(-) + +diff --git a/block.c b/block.c +index 69b70d0..921fa33 100644 +--- a/block.c ++++ b/block.c +@@ -733,7 +733,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + if (drv->bdrv_file_open) { + assert(file == NULL); + assert(drv->bdrv_parse_filename || filename != NULL); +- ret = drv->bdrv_file_open(bs, options, open_flags); ++ ret = drv->bdrv_file_open(bs, options, open_flags, NULL); + } else { + if (file == NULL) { + qerror_report(ERROR_CLASS_GENERIC_ERROR, "Can't use '%s' as a " +@@ -744,7 +744,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + } + assert(file != NULL); + bs->file = file; +- ret = drv->bdrv_open(bs, options, open_flags); ++ ret = drv->bdrv_open(bs, options, open_flags, NULL); + } + + if (ret < 0) { +diff --git a/block/blkdebug.c b/block/blkdebug.c +index d659d38..114c4c9 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -347,7 +347,8 @@ static QemuOptsList runtime_opts = { + }, + }; + +-static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags) ++static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVBlkdebugState *s = bs->opaque; + QemuOpts *opts; +diff --git a/block/blkverify.c b/block/blkverify.c +index 1d58cc3..5d716bb 100644 +--- a/block/blkverify.c ++++ b/block/blkverify.c +@@ -116,7 +116,8 @@ static QemuOptsList runtime_opts = { + }, + }; + +-static int blkverify_open(BlockDriverState *bs, QDict *options, int flags) ++static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVBlkverifyState *s = bs->opaque; + QemuOpts *opts; +diff --git a/block/bochs.c b/block/bochs.c +index d7078c0..51d9a90 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -108,7 +108,8 @@ static int bochs_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + +-static int bochs_open(BlockDriverState *bs, QDict *options, int flags) ++static int bochs_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVBochsState *s = bs->opaque; + int i; +diff --git a/block/cloop.c b/block/cloop.c +index 6ea7cf4..b907023 100644 +--- a/block/cloop.c ++++ b/block/cloop.c +@@ -53,7 +53,8 @@ static int cloop_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + +-static int cloop_open(BlockDriverState *bs, QDict *options, int flags) ++static int cloop_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVCloopState *s = bs->opaque; + uint32_t offsets_size, max_compressed_block_size = 1, i; +diff --git a/block/cow.c b/block/cow.c +index 6958808..ce8deb8 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -58,7 +58,8 @@ static int cow_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + +-static int cow_open(BlockDriverState *bs, QDict *options, int flags) ++static int cow_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVCowState *s = bs->opaque; + struct cow_header_v2 cow_header; +diff --git a/block/curl.c b/block/curl.c +index b8935fd..1b0fcf1 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -395,7 +395,8 @@ static QemuOptsList runtime_opts = { + }, + }; + +-static int curl_open(BlockDriverState *bs, QDict *options, int flags) ++static int curl_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVCURLState *s = bs->opaque; + CURLState *state = NULL; +diff --git a/block/dmg.c b/block/dmg.c +index 3141cb5..d5e9b1f 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -92,7 +92,8 @@ static int read_uint32(BlockDriverState *bs, int64_t offset, uint32_t *result) + return 0; + } + +-static int dmg_open(BlockDriverState *bs, QDict *options, int flags) ++static int dmg_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVDMGState *s = bs->opaque; + uint64_t info_begin,info_end,last_in_offset,last_out_offset; +diff --git a/block/gluster.c b/block/gluster.c +index 90a51ca..fa46b6f 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -297,7 +297,7 @@ static QemuOptsList runtime_opts = { + }; + + static int qemu_gluster_open(BlockDriverState *bs, QDict *options, +- int bdrv_flags) ++ int bdrv_flags, Error **errp) + { + BDRVGlusterState *s = bs->opaque; + int open_flags = O_BINARY; +diff --git a/block/iscsi.c b/block/iscsi.c +index cc2017e..8d49e35 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1056,7 +1056,8 @@ static QemuOptsList runtime_opts = { + * We support iscsi url's on the form + * iscsi://[%@][:]// + */ +-static int iscsi_open(BlockDriverState *bs, QDict *options, int flags) ++static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + IscsiLun *iscsilun = bs->opaque; + struct iscsi_context *iscsi = NULL; +@@ -1271,7 +1272,7 @@ static int iscsi_create(const char *filename, QEMUOptionParameter *options) + + bs_options = qdict_new(); + qdict_put(bs_options, "filename", qstring_from_str(filename)); +- ret = iscsi_open(bs, bs_options, 0); ++ ret = iscsi_open(bs, bs_options, 0, NULL); + QDECREF(bs_options); + + if (ret != 0) { +diff --git a/block/nbd.c b/block/nbd.c +index 9c480b8..48a759e 100644 +--- a/block/nbd.c ++++ b/block/nbd.c +@@ -463,7 +463,8 @@ static void nbd_teardown_connection(BlockDriverState *bs) + closesocket(s->sock); + } + +-static int nbd_open(BlockDriverState *bs, QDict *options, int flags) ++static int nbd_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVNBDState *s = bs->opaque; + int result; +diff --git a/block/parallels.c b/block/parallels.c +index 18b3ac0..2121e43 100644 +--- a/block/parallels.c ++++ b/block/parallels.c +@@ -68,7 +68,8 @@ static int parallels_probe(const uint8_t *buf, int buf_size, const char *filenam + return 0; + } + +-static int parallels_open(BlockDriverState *bs, QDict *options, int flags) ++static int parallels_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVParallelsState *s = bs->opaque; + int i; +diff --git a/block/qcow.c b/block/qcow.c +index 4ab552e..b8887f0 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -92,7 +92,8 @@ static int qcow_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + +-static int qcow_open(BlockDriverState *bs, QDict *options, int flags) ++static int qcow_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVQcowState *s = bs->opaque; + int len, i, shift, ret; +diff --git a/block/qcow2.c b/block/qcow2.c +index 8a30863..2e7e9f5 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -350,7 +350,8 @@ static QemuOptsList qcow2_runtime_opts = { + }, + }; + +-static int qcow2_open(BlockDriverState *bs, QDict *options, int flags) ++static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVQcowState *s = bs->opaque; + int len, i, ret = 0; +@@ -1059,7 +1060,7 @@ static void qcow2_invalidate_cache(BlockDriverState *bs) + qbool_from_int(s->use_lazy_refcounts)); + + memset(s, 0, sizeof(BDRVQcowState)); +- qcow2_open(bs, options, flags); ++ qcow2_open(bs, options, flags, NULL); + + QDECREF(options); + +diff --git a/block/qed.c b/block/qed.c +index 815ee1c..d49e0cd 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -373,7 +373,8 @@ static void bdrv_qed_rebind(BlockDriverState *bs) + s->bs = bs; + } + +-static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags) ++static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVQEDState *s = bs->opaque; + QEDHeader le_header; +@@ -1547,7 +1548,7 @@ static void bdrv_qed_invalidate_cache(BlockDriverState *bs) + + bdrv_qed_close(bs); + memset(s, 0, sizeof(BDRVQEDState)); +- bdrv_qed_open(bs, NULL, bs->open_flags); ++ bdrv_qed_open(bs, NULL, bs->open_flags, NULL); + } + + static int bdrv_qed_check(BlockDriverState *bs, BdrvCheckResult *result, +diff --git a/block/raw-posix.c b/block/raw-posix.c +index c7ab908..5f4e824 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -335,7 +335,8 @@ fail: + return ret; + } + +-static int raw_open(BlockDriverState *bs, QDict *options, int flags) ++static int raw_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRawState *s = bs->opaque; + +@@ -1330,7 +1331,8 @@ static int check_hdev_writable(BDRVRawState *s) + return 0; + } + +-static int hdev_open(BlockDriverState *bs, QDict *options, int flags) ++static int hdev_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRawState *s = bs->opaque; + int ret; +@@ -1570,7 +1572,8 @@ static BlockDriver bdrv_host_device = { + }; + + #ifdef __linux__ +-static int floppy_open(BlockDriverState *bs, QDict *options, int flags) ++static int floppy_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRawState *s = bs->opaque; + int ret; +@@ -1692,7 +1695,8 @@ static BlockDriver bdrv_host_floppy = { + .bdrv_eject = floppy_eject, + }; + +-static int cdrom_open(BlockDriverState *bs, QDict *options, int flags) ++static int cdrom_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRawState *s = bs->opaque; + +diff --git a/block/raw-win32.c b/block/raw-win32.c +index a324e5b..1cfec65 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -234,7 +234,8 @@ static QemuOptsList raw_runtime_opts = { + }, + }; + +-static int raw_open(BlockDriverState *bs, QDict *options, int flags) ++static int raw_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRawState *s = bs->opaque; + int access_flags; +@@ -530,7 +531,8 @@ static int hdev_probe_device(const char *filename) + return 0; + } + +-static int hdev_open(BlockDriverState *bs, QDict *options, int flags) ++static int hdev_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRawState *s = bs->opaque; + int access_flags, create_flags; +diff --git a/block/raw.c b/block/raw.c +index 7d82cf3..801591d 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -3,7 +3,8 @@ + #include "block/block_int.h" + #include "qemu/module.h" + +-static int raw_open(BlockDriverState *bs, QDict *options, int flags) ++static int raw_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + bs->sg = bs->file->sg; + return 0; +diff --git a/block/rbd.c b/block/rbd.c +index 7b6e03b..8d4ae9f 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -457,7 +457,8 @@ static QemuOptsList runtime_opts = { + }, + }; + +-static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags) ++static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVRBDState *s = bs->opaque; + char pool[RBD_MAX_POOL_NAME_SIZE]; +diff --git a/block/sheepdog.c b/block/sheepdog.c +index f7cc76e..a8ce933 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -1259,7 +1259,8 @@ static QemuOptsList runtime_opts = { + }, + }; + +-static int sd_open(BlockDriverState *bs, QDict *options, int flags) ++static int sd_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + int ret, fd; + uint32_t vid = 0; +diff --git a/block/snapshot.c b/block/snapshot.c +index 6c6d9de..51b4b96 100644 +--- a/block/snapshot.c ++++ b/block/snapshot.c +@@ -97,7 +97,7 @@ int bdrv_snapshot_goto(BlockDriverState *bs, + if (bs->file) { + drv->bdrv_close(bs); + ret = bdrv_snapshot_goto(bs->file, snapshot_id); +- open_ret = drv->bdrv_open(bs, NULL, bs->open_flags); ++ open_ret = drv->bdrv_open(bs, NULL, bs->open_flags, NULL); + if (open_ret < 0) { + bdrv_delete(bs->file); + bs->drv = NULL; +diff --git a/block/ssh.c b/block/ssh.c +index d7e7bf8..f950fcc 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -608,7 +608,8 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + return ret; + } + +-static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags) ++static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags, ++ Error **errp) + { + BDRVSSHState *s = bs->opaque; + int ret; +diff --git a/block/vdi.c b/block/vdi.c +index bc97c39..661c3f0 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -364,7 +364,8 @@ static int vdi_probe(const uint8_t *buf, int buf_size, const char *filename) + return result; + } + +-static int vdi_open(BlockDriverState *bs, QDict *options, int flags) ++static int vdi_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVVdiState *s = bs->opaque; + VdiHeader header; +diff --git a/block/vhdx.c b/block/vhdx.c +index 11d923f..6cb0412 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -717,7 +717,8 @@ exit: + } + + +-static int vhdx_open(BlockDriverState *bs, QDict *options, int flags) ++static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVVHDXState *s = bs->opaque; + int ret = 0; +diff --git a/block/vmdk.c b/block/vmdk.c +index 7456f9b..d9e2545 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -806,7 +806,8 @@ exit: + return ret; + } + +-static int vmdk_open(BlockDriverState *bs, QDict *options, int flags) ++static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + int ret; + BDRVVmdkState *s = bs->opaque; +diff --git a/block/vpc.c b/block/vpc.c +index 3cad52e..cf5e751 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -155,7 +155,8 @@ static int vpc_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + +-static int vpc_open(BlockDriverState *bs, QDict *options, int flags) ++static int vpc_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVVPCState *s = bs->opaque; + int i; +diff --git a/block/vvfat.c b/block/vvfat.c +index dd0efca..bb3b0b6 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -1065,7 +1065,8 @@ static void vvfat_parse_filename(const char *filename, QDict *options, + qdict_put(options, "rw", qbool_from_int(rw)); + } + +-static int vvfat_open(BlockDriverState *bs, QDict *options, int flags) ++static int vvfat_open(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp) + { + BDRVVVFATState *s = bs->opaque; + int cyls, heads, secs; +diff --git a/include/block/block_int.h b/include/block/block_int.h +index ea2c811..3450b46 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -86,8 +86,10 @@ struct BlockDriver { + void (*bdrv_reopen_commit)(BDRVReopenState *reopen_state); + void (*bdrv_reopen_abort)(BDRVReopenState *reopen_state); + +- int (*bdrv_open)(BlockDriverState *bs, QDict *options, int flags); +- int (*bdrv_file_open)(BlockDriverState *bs, QDict *options, int flags); ++ int (*bdrv_open)(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp); ++ int (*bdrv_file_open)(BlockDriverState *bs, QDict *options, int flags, ++ Error **errp); + int (*bdrv_read)(BlockDriverState *bs, int64_t sector_num, + uint8_t *buf, int nb_sectors); + int (*bdrv_write)(BlockDriverState *bs, int64_t sector_num, +-- +1.7.1 + diff --git a/SOURCES/kvm-bitmap-Add-bitmap_zero_extend-operation.patch b/SOURCES/kvm-bitmap-Add-bitmap_zero_extend-operation.patch new file mode 100644 index 0000000..e59df1c --- /dev/null +++ b/SOURCES/kvm-bitmap-Add-bitmap_zero_extend-operation.patch @@ -0,0 +1,49 @@ +From ff40b201543aff558f2bf681da3093bce82c6eba Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:28 +0100 +Subject: [PATCH 17/40] bitmap: Add bitmap_zero_extend operation + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-18-git-send-email-quintela@redhat.com> +Patchwork-id: 56671 +O-Subject: [RHEL7 qemu-kvm PATCH 17/40] bitmap: Add bitmap_zero_extend operation +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 164590a60fd685399da259ac41b338d9a0b9d6c0) +Signed-off-by: Juan Quintela +--- + include/qemu/bitmap.h | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/bitmap.h | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h +index afdd257..1babd5d 100644 +--- a/include/qemu/bitmap.h ++++ b/include/qemu/bitmap.h +@@ -220,4 +220,13 @@ unsigned long bitmap_find_next_zero_area(unsigned long *map, + unsigned long nr, + unsigned long align_mask); + ++static inline unsigned long *bitmap_zero_extend(unsigned long *old, ++ long old_nbits, long new_nbits) ++{ ++ long new_len = BITS_TO_LONGS(new_nbits) * sizeof(unsigned long); ++ unsigned long *new = g_realloc(old, new_len); ++ bitmap_clear(new, old_nbits, new_nbits - old_nbits); ++ return new; ++} ++ + #endif /* BITMAP_H */ +-- +1.7.1 + diff --git a/SOURCES/kvm-bitmap-use-long-as-index.patch b/SOURCES/kvm-bitmap-use-long-as-index.patch new file mode 100644 index 0000000..c7e261b --- /dev/null +++ b/SOURCES/kvm-bitmap-use-long-as-index.patch @@ -0,0 +1,468 @@ +From 3995e6984ffbdd018622ab2f31b59aec78eea17c Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:12 +0100 +Subject: [PATCH 01/40] bitmap: use long as index + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-2-git-send-email-quintela@redhat.com> +Patchwork-id: 56656 +O-Subject: [RHEL7 qemu-kvm PATCH 01/40] bitmap: use long as index +Bugzilla: 997559 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Paolo Bonzini + +Move index and size fields from int to long. We need that for +migration. long is 64 bits on sane architectures, and 32bits should +be enough on all the 32bits architectures. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 9c22687ea8c1a2644a41a683ff0a291adc9a657c) +Signed-off-by: Juan Quintela +--- + include/qemu/bitmap.h | 77 ++++++++++++++++++++++++++------------------------- + include/qemu/bitops.h | 14 +++++----- + util/bitmap.c | 60 +++++++++++++++++++-------------------- + 3 files changed, 76 insertions(+), 75 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/bitmap.h | 77 +++++++++++++++++++++++++------------------------ + include/qemu/bitops.h | 14 ++++---- + util/bitmap.c | 60 +++++++++++++++++++------------------- + 3 files changed, 76 insertions(+), 75 deletions(-) + +diff --git a/include/qemu/bitmap.h b/include/qemu/bitmap.h +index 308bbb7..afdd257 100644 +--- a/include/qemu/bitmap.h ++++ b/include/qemu/bitmap.h +@@ -31,7 +31,7 @@ + * bitmap_andnot(dst, src1, src2, nbits) *dst = *src1 & ~(*src2) + * bitmap_complement(dst, src, nbits) *dst = ~(*src) + * bitmap_equal(src1, src2, nbits) Are *src1 and *src2 equal? +- * bitmap_intersects(src1, src2, nbits) Do *src1 and *src2 overlap? ++ * bitmap_intersects(src1, src2, nbits) Do *src1 and *src2 overlap? + * bitmap_empty(src, nbits) Are all bits zero in *src? + * bitmap_full(src, nbits) Are all bits set in *src? + * bitmap_set(dst, pos, nbits) Set specified bit area +@@ -62,71 +62,71 @@ + ) + + #define DECLARE_BITMAP(name,bits) \ +- unsigned long name[BITS_TO_LONGS(bits)] ++ unsigned long name[BITS_TO_LONGS(bits)] + + #define small_nbits(nbits) \ +- ((nbits) <= BITS_PER_LONG) ++ ((nbits) <= BITS_PER_LONG) + +-int slow_bitmap_empty(const unsigned long *bitmap, int bits); +-int slow_bitmap_full(const unsigned long *bitmap, int bits); ++int slow_bitmap_empty(const unsigned long *bitmap, long bits); ++int slow_bitmap_full(const unsigned long *bitmap, long bits); + int slow_bitmap_equal(const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits); ++ const unsigned long *bitmap2, long bits); + void slow_bitmap_complement(unsigned long *dst, const unsigned long *src, +- int bits); ++ long bits); + void slow_bitmap_shift_right(unsigned long *dst, +- const unsigned long *src, int shift, int bits); ++ const unsigned long *src, int shift, long bits); + void slow_bitmap_shift_left(unsigned long *dst, +- const unsigned long *src, int shift, int bits); ++ const unsigned long *src, int shift, long bits); + int slow_bitmap_and(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits); ++ const unsigned long *bitmap2, long bits); + void slow_bitmap_or(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits); ++ const unsigned long *bitmap2, long bits); + void slow_bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits); ++ const unsigned long *bitmap2, long bits); + int slow_bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits); ++ const unsigned long *bitmap2, long bits); + int slow_bitmap_intersects(const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits); ++ const unsigned long *bitmap2, long bits); + +-static inline unsigned long *bitmap_new(int nbits) ++static inline unsigned long *bitmap_new(long nbits) + { +- int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); ++ long len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); + return g_malloc0(len); + } + +-static inline void bitmap_zero(unsigned long *dst, int nbits) ++static inline void bitmap_zero(unsigned long *dst, long nbits) + { + if (small_nbits(nbits)) { + *dst = 0UL; + } else { +- int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); ++ long len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); + memset(dst, 0, len); + } + } + +-static inline void bitmap_fill(unsigned long *dst, int nbits) ++static inline void bitmap_fill(unsigned long *dst, long nbits) + { + size_t nlongs = BITS_TO_LONGS(nbits); + if (!small_nbits(nbits)) { +- int len = (nlongs - 1) * sizeof(unsigned long); ++ long len = (nlongs - 1) * sizeof(unsigned long); + memset(dst, 0xff, len); + } + dst[nlongs - 1] = BITMAP_LAST_WORD_MASK(nbits); + } + + static inline void bitmap_copy(unsigned long *dst, const unsigned long *src, +- int nbits) ++ long nbits) + { + if (small_nbits(nbits)) { + *dst = *src; + } else { +- int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); ++ long len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); + memcpy(dst, src, len); + } + } + + static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, +- const unsigned long *src2, int nbits) ++ const unsigned long *src2, long nbits) + { + if (small_nbits(nbits)) { + return (*dst = *src1 & *src2) != 0; +@@ -135,7 +135,7 @@ static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, + } + + static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, +- const unsigned long *src2, int nbits) ++ const unsigned long *src2, long nbits) + { + if (small_nbits(nbits)) { + *dst = *src1 | *src2; +@@ -145,7 +145,7 @@ static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, + } + + static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, +- const unsigned long *src2, int nbits) ++ const unsigned long *src2, long nbits) + { + if (small_nbits(nbits)) { + *dst = *src1 ^ *src2; +@@ -155,7 +155,7 @@ static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, + } + + static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, +- const unsigned long *src2, int nbits) ++ const unsigned long *src2, long nbits) + { + if (small_nbits(nbits)) { + return (*dst = *src1 & ~(*src2)) != 0; +@@ -163,8 +163,9 @@ static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, + return slow_bitmap_andnot(dst, src1, src2, nbits); + } + +-static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, +- int nbits) ++static inline void bitmap_complement(unsigned long *dst, ++ const unsigned long *src, ++ long nbits) + { + if (small_nbits(nbits)) { + *dst = ~(*src) & BITMAP_LAST_WORD_MASK(nbits); +@@ -174,7 +175,7 @@ static inline void bitmap_complement(unsigned long *dst, const unsigned long *sr + } + + static inline int bitmap_equal(const unsigned long *src1, +- const unsigned long *src2, int nbits) ++ const unsigned long *src2, long nbits) + { + if (small_nbits(nbits)) { + return ! ((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits)); +@@ -183,7 +184,7 @@ static inline int bitmap_equal(const unsigned long *src1, + } + } + +-static inline int bitmap_empty(const unsigned long *src, int nbits) ++static inline int bitmap_empty(const unsigned long *src, long nbits) + { + if (small_nbits(nbits)) { + return ! (*src & BITMAP_LAST_WORD_MASK(nbits)); +@@ -192,7 +193,7 @@ static inline int bitmap_empty(const unsigned long *src, int nbits) + } + } + +-static inline int bitmap_full(const unsigned long *src, int nbits) ++static inline int bitmap_full(const unsigned long *src, long nbits) + { + if (small_nbits(nbits)) { + return ! (~(*src) & BITMAP_LAST_WORD_MASK(nbits)); +@@ -202,7 +203,7 @@ static inline int bitmap_full(const unsigned long *src, int nbits) + } + + static inline int bitmap_intersects(const unsigned long *src1, +- const unsigned long *src2, int nbits) ++ const unsigned long *src2, long nbits) + { + if (small_nbits(nbits)) { + return ((*src1 & *src2) & BITMAP_LAST_WORD_MASK(nbits)) != 0; +@@ -211,12 +212,12 @@ static inline int bitmap_intersects(const unsigned long *src1, + } + } + +-void bitmap_set(unsigned long *map, int i, int len); +-void bitmap_clear(unsigned long *map, int start, int nr); ++void bitmap_set(unsigned long *map, long i, long len); ++void bitmap_clear(unsigned long *map, long start, long nr); + unsigned long bitmap_find_next_zero_area(unsigned long *map, +- unsigned long size, +- unsigned long start, +- unsigned int nr, +- unsigned long align_mask); ++ unsigned long size, ++ unsigned long start, ++ unsigned long nr, ++ unsigned long align_mask); + + #endif /* BITMAP_H */ +diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h +index affcc96..5866115 100644 +--- a/include/qemu/bitops.h ++++ b/include/qemu/bitops.h +@@ -28,7 +28,7 @@ + * @nr: the bit to set + * @addr: the address to start counting from + */ +-static inline void set_bit(int nr, unsigned long *addr) ++static inline void set_bit(long nr, unsigned long *addr) + { + unsigned long mask = BIT_MASK(nr); + unsigned long *p = addr + BIT_WORD(nr); +@@ -41,7 +41,7 @@ static inline void set_bit(int nr, unsigned long *addr) + * @nr: Bit to clear + * @addr: Address to start counting from + */ +-static inline void clear_bit(int nr, unsigned long *addr) ++static inline void clear_bit(long nr, unsigned long *addr) + { + unsigned long mask = BIT_MASK(nr); + unsigned long *p = addr + BIT_WORD(nr); +@@ -54,7 +54,7 @@ static inline void clear_bit(int nr, unsigned long *addr) + * @nr: Bit to change + * @addr: Address to start counting from + */ +-static inline void change_bit(int nr, unsigned long *addr) ++static inline void change_bit(long nr, unsigned long *addr) + { + unsigned long mask = BIT_MASK(nr); + unsigned long *p = addr + BIT_WORD(nr); +@@ -67,7 +67,7 @@ static inline void change_bit(int nr, unsigned long *addr) + * @nr: Bit to set + * @addr: Address to count from + */ +-static inline int test_and_set_bit(int nr, unsigned long *addr) ++static inline int test_and_set_bit(long nr, unsigned long *addr) + { + unsigned long mask = BIT_MASK(nr); + unsigned long *p = addr + BIT_WORD(nr); +@@ -82,7 +82,7 @@ static inline int test_and_set_bit(int nr, unsigned long *addr) + * @nr: Bit to clear + * @addr: Address to count from + */ +-static inline int test_and_clear_bit(int nr, unsigned long *addr) ++static inline int test_and_clear_bit(long nr, unsigned long *addr) + { + unsigned long mask = BIT_MASK(nr); + unsigned long *p = addr + BIT_WORD(nr); +@@ -97,7 +97,7 @@ static inline int test_and_clear_bit(int nr, unsigned long *addr) + * @nr: Bit to change + * @addr: Address to count from + */ +-static inline int test_and_change_bit(int nr, unsigned long *addr) ++static inline int test_and_change_bit(long nr, unsigned long *addr) + { + unsigned long mask = BIT_MASK(nr); + unsigned long *p = addr + BIT_WORD(nr); +@@ -112,7 +112,7 @@ static inline int test_and_change_bit(int nr, unsigned long *addr) + * @nr: bit number to test + * @addr: Address to start counting from + */ +-static inline int test_bit(int nr, const unsigned long *addr) ++static inline int test_bit(long nr, const unsigned long *addr) + { + return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); + } +diff --git a/util/bitmap.c b/util/bitmap.c +index 687841d..9c6bb52 100644 +--- a/util/bitmap.c ++++ b/util/bitmap.c +@@ -36,9 +36,9 @@ + * endian architectures. + */ + +-int slow_bitmap_empty(const unsigned long *bitmap, int bits) ++int slow_bitmap_empty(const unsigned long *bitmap, long bits) + { +- int k, lim = bits/BITS_PER_LONG; ++ long k, lim = bits/BITS_PER_LONG; + + for (k = 0; k < lim; ++k) { + if (bitmap[k]) { +@@ -54,9 +54,9 @@ int slow_bitmap_empty(const unsigned long *bitmap, int bits) + return 1; + } + +-int slow_bitmap_full(const unsigned long *bitmap, int bits) ++int slow_bitmap_full(const unsigned long *bitmap, long bits) + { +- int k, lim = bits/BITS_PER_LONG; ++ long k, lim = bits/BITS_PER_LONG; + + for (k = 0; k < lim; ++k) { + if (~bitmap[k]) { +@@ -74,9 +74,9 @@ int slow_bitmap_full(const unsigned long *bitmap, int bits) + } + + int slow_bitmap_equal(const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits) ++ const unsigned long *bitmap2, long bits) + { +- int k, lim = bits/BITS_PER_LONG; ++ long k, lim = bits/BITS_PER_LONG; + + for (k = 0; k < lim; ++k) { + if (bitmap1[k] != bitmap2[k]) { +@@ -94,9 +94,9 @@ int slow_bitmap_equal(const unsigned long *bitmap1, + } + + void slow_bitmap_complement(unsigned long *dst, const unsigned long *src, +- int bits) ++ long bits) + { +- int k, lim = bits/BITS_PER_LONG; ++ long k, lim = bits/BITS_PER_LONG; + + for (k = 0; k < lim; ++k) { + dst[k] = ~src[k]; +@@ -108,10 +108,10 @@ void slow_bitmap_complement(unsigned long *dst, const unsigned long *src, + } + + int slow_bitmap_and(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits) ++ const unsigned long *bitmap2, long bits) + { +- int k; +- int nr = BITS_TO_LONGS(bits); ++ long k; ++ long nr = BITS_TO_LONGS(bits); + unsigned long result = 0; + + for (k = 0; k < nr; k++) { +@@ -121,10 +121,10 @@ int slow_bitmap_and(unsigned long *dst, const unsigned long *bitmap1, + } + + void slow_bitmap_or(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits) ++ const unsigned long *bitmap2, long bits) + { +- int k; +- int nr = BITS_TO_LONGS(bits); ++ long k; ++ long nr = BITS_TO_LONGS(bits); + + for (k = 0; k < nr; k++) { + dst[k] = bitmap1[k] | bitmap2[k]; +@@ -132,10 +132,10 @@ void slow_bitmap_or(unsigned long *dst, const unsigned long *bitmap1, + } + + void slow_bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits) ++ const unsigned long *bitmap2, long bits) + { +- int k; +- int nr = BITS_TO_LONGS(bits); ++ long k; ++ long nr = BITS_TO_LONGS(bits); + + for (k = 0; k < nr; k++) { + dst[k] = bitmap1[k] ^ bitmap2[k]; +@@ -143,10 +143,10 @@ void slow_bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, + } + + int slow_bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits) ++ const unsigned long *bitmap2, long bits) + { +- int k; +- int nr = BITS_TO_LONGS(bits); ++ long k; ++ long nr = BITS_TO_LONGS(bits); + unsigned long result = 0; + + for (k = 0; k < nr; k++) { +@@ -157,10 +157,10 @@ int slow_bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, + + #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG)) + +-void bitmap_set(unsigned long *map, int start, int nr) ++void bitmap_set(unsigned long *map, long start, long nr) + { + unsigned long *p = map + BIT_WORD(start); +- const int size = start + nr; ++ const long size = start + nr; + int bits_to_set = BITS_PER_LONG - (start % BITS_PER_LONG); + unsigned long mask_to_set = BITMAP_FIRST_WORD_MASK(start); + +@@ -177,10 +177,10 @@ void bitmap_set(unsigned long *map, int start, int nr) + } + } + +-void bitmap_clear(unsigned long *map, int start, int nr) ++void bitmap_clear(unsigned long *map, long start, long nr) + { + unsigned long *p = map + BIT_WORD(start); +- const int size = start + nr; ++ const long size = start + nr; + int bits_to_clear = BITS_PER_LONG - (start % BITS_PER_LONG); + unsigned long mask_to_clear = BITMAP_FIRST_WORD_MASK(start); + +@@ -212,10 +212,10 @@ void bitmap_clear(unsigned long *map, int start, int nr) + * power of 2. A @align_mask of 0 means no alignment is required. + */ + unsigned long bitmap_find_next_zero_area(unsigned long *map, +- unsigned long size, +- unsigned long start, +- unsigned int nr, +- unsigned long align_mask) ++ unsigned long size, ++ unsigned long start, ++ unsigned long nr, ++ unsigned long align_mask) + { + unsigned long index, end, i; + again: +@@ -237,9 +237,9 @@ again: + } + + int slow_bitmap_intersects(const unsigned long *bitmap1, +- const unsigned long *bitmap2, int bits) ++ const unsigned long *bitmap2, long bits) + { +- int k, lim = bits/BITS_PER_LONG; ++ long k, lim = bits/BITS_PER_LONG; + + for (k = 0; k < lim; ++k) { + if (bitmap1[k] & bitmap2[k]) { +-- +1.7.1 + diff --git a/SOURCES/kvm-blkdebug-Add-BLKDBG_FLUSH_TO_OS-DISK-events.patch b/SOURCES/kvm-blkdebug-Add-BLKDBG_FLUSH_TO_OS-DISK-events.patch new file mode 100644 index 0000000..b65b85e --- /dev/null +++ b/SOURCES/kvm-blkdebug-Add-BLKDBG_FLUSH_TO_OS-DISK-events.patch @@ -0,0 +1,100 @@ +From 89f3f5eafd6aed8a79b4570553af711dffc3a1d6 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:36 +0100 +Subject: [PATCH 17/27] blkdebug: Add BLKDBG_FLUSH_TO_OS/DISK events + +RH-Author: John Snow +Message-id: <1448300320-7772-18-git-send-email-jsnow@redhat.com> +Patchwork-id: 68448 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 17/21] blkdebug: Add BLKDBG_FLUSH_TO_OS/DISK events +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit bf736fe34caba0688c9095c31b9d097ea15c1296) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/blkdebug.c: debug event ordering + include/block/block.h: debug event ordering + +Signed-off-by: John Snow +--- + block.c | 8 ++++---- + block/blkdebug.c | 3 +++ + include/block/block.h | 3 +++ + 3 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/block.c b/block.c +index bc6e75c..ecb2b09 100644 +--- a/block.c ++++ b/block.c +@@ -4026,13 +4026,11 @@ int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf, + + void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event) + { +- BlockDriver *drv = bs->drv; +- +- if (!drv || !drv->bdrv_debug_event) { ++ if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) { + return; + } + +- drv->bdrv_debug_event(bs, event); ++ bs->drv->bdrv_debug_event(bs, event); + } + + int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event, +@@ -4879,6 +4877,7 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs) + } + + /* Write back cached data to the OS even with cache=unsafe */ ++ BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_OS); + if (bs->drv->bdrv_co_flush_to_os) { + ret = bs->drv->bdrv_co_flush_to_os(bs); + if (ret < 0) { +@@ -4891,6 +4890,7 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs) + goto flush_parent; + } + ++ BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_DISK); + if (bs->drv->bdrv_co_flush_to_disk) { + ret = bs->drv->bdrv_co_flush_to_disk(bs); + } else if (bs->drv->bdrv_aio_flush) { +diff --git a/block/blkdebug.c b/block/blkdebug.c +index c61ce52..8e468b2 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -184,6 +184,9 @@ static const char *event_names[BLKDBG_EVENT_MAX] = { + [BLKDBG_CLUSTER_ALLOC_BYTES] = "cluster_alloc_bytes", + [BLKDBG_CLUSTER_FREE] = "cluster_free", + ++ [BLKDBG_FLUSH_TO_OS] = "flush_to_os", ++ [BLKDBG_FLUSH_TO_DISK] = "flush_to_disk", ++ + [BLKDBG_PWRITEV_RMW_HEAD] = "pwritev_rmw.head", + [BLKDBG_PWRITEV_RMW_AFTER_HEAD] = "pwritev_rmw.after_head", + [BLKDBG_PWRITEV_RMW_TAIL] = "pwritev_rmw.tail", +diff --git a/include/block/block.h b/include/block/block.h +index 8339cac..75147b2 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -508,6 +508,9 @@ typedef enum { + BLKDBG_CLUSTER_ALLOC_BYTES, + BLKDBG_CLUSTER_FREE, + ++ BLKDBG_FLUSH_TO_OS, ++ BLKDBG_FLUSH_TO_DISK, ++ + BLKDBG_PWRITEV_RMW_HEAD, + BLKDBG_PWRITEV_RMW_AFTER_HEAD, + BLKDBG_PWRITEV_RMW_TAIL, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-blkdebug-Add-bdrv_truncate.patch b/SOURCES/kvm-blkdebug-Add-bdrv_truncate.patch new file mode 100644 index 0000000..ac3ea21 --- /dev/null +++ b/SOURCES/kvm-blkdebug-Add-bdrv_truncate.patch @@ -0,0 +1,63 @@ +From 6c316a417a80fcf892935c51eb01c0e273561b32 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:47:04 +0100 +Subject: [PATCH 16/24] blkdebug: Add bdrv_truncate() + +RH-Author: Max Reitz +Message-id: <20170313174706.29316-1-mreitz@redhat.com> +Patchwork-id: 74278 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 7/9] blkdebug: Add bdrv_truncate() +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +From: Kevin Wolf + +This is, amongst others, required for qemu-iotests 033 to run as +intended on VHDX, which uses explicit bdrv_truncate() calls to bs->file +when allocating new blocks. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +(cherry picked from commit 8eedfbd4a50299f03b3630659c34ad1b01f69370) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/blkdebug.c + +Contextual conflict due to blkdebug_refresh_filename() missing from +downstream. + +Signed-off-by: Max Reitz +--- + block/blkdebug.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/block/blkdebug.c b/block/blkdebug.c +index 8e468b2..7cfeccb 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -652,6 +652,11 @@ static int64_t blkdebug_getlength(BlockDriverState *bs) + return bdrv_getlength(bs->file); + } + ++static int blkdebug_truncate(BlockDriverState *bs, int64_t offset) ++{ ++ return bdrv_truncate(bs->file, offset); ++} ++ + static BlockDriver bdrv_blkdebug = { + .format_name = "blkdebug", + .protocol_name = "blkdebug", +@@ -661,6 +666,7 @@ static BlockDriver bdrv_blkdebug = { + .bdrv_file_open = blkdebug_open, + .bdrv_close = blkdebug_close, + .bdrv_getlength = blkdebug_getlength, ++ .bdrv_truncate = blkdebug_truncate, + + .bdrv_aio_readv = blkdebug_aio_readv, + .bdrv_aio_writev = blkdebug_aio_writev, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-blkdebug-Don-t-leak-bs-file-on-failure.patch b/SOURCES/kvm-blkdebug-Don-t-leak-bs-file-on-failure.patch new file mode 100644 index 0000000..4630272 --- /dev/null +++ b/SOURCES/kvm-blkdebug-Don-t-leak-bs-file-on-failure.patch @@ -0,0 +1,90 @@ +From 66e996f40abbca9c62a262beeefb93b7b4c6e64f Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Sat, 8 Feb 2014 09:53:22 +0100 +Subject: [PATCH 32/37] blkdebug: Don't leak bs->file on failure + +Message-id: <1392117622-28812-33-git-send-email-kwolf@redhat.com> +Patchwork-id: 57197 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 32/37] blkdebug: Don't leak bs->file on failure +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Reported-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +Reviewed-by: Laszlo Ersek + +Conflicts: + block/blkdebug.c + +Conflicts because RHEL 7 doesn't have the blockdev-add support +series for blkdebug. + +Signed-off-by: Kevin Wolf +--- + block/blkdebug.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) +--- + block/blkdebug.c | 16 ++++++++++------ + 1 files changed, 10 insertions(+), 6 deletions(-) + +diff --git a/block/blkdebug.c b/block/blkdebug.c +index ccb562b..1e772a5 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -367,7 +367,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); + ret = -EINVAL; +- goto fail; ++ goto out; + } + + /* Read rules from config file */ +@@ -376,7 +376,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + ret = read_config(s, config); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not read blkdebug config file"); +- goto fail; ++ goto out; + } + } + +@@ -388,13 +388,13 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + if (filename == NULL) { + error_setg(errp, "Could not retrieve image file name"); + ret = -EINVAL; +- goto fail; ++ goto out; + } + + ret = bdrv_file_open(&bs->file, filename, NULL, flags, &local_err); + if (ret < 0) { + error_propagate(errp, local_err); +- goto fail; ++ goto out; + } + + /* Set request alignment */ +@@ -404,11 +404,15 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + } else { + error_setg(errp, "Invalid alignment"); + ret = -EINVAL; +- goto fail; ++ goto fail_unref; + } + + ret = 0; +-fail: ++ goto out; ++ ++fail_unref: ++ bdrv_unref(bs->file); ++out: + qemu_opts_del(opts); + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-blkdebug-Employ-error-parameter.patch b/SOURCES/kvm-blkdebug-Employ-error-parameter.patch new file mode 100644 index 0000000..6dd766f --- /dev/null +++ b/SOURCES/kvm-blkdebug-Employ-error-parameter.patch @@ -0,0 +1,75 @@ +From ce32a49212b68b1325144c61b9d1e0acebdc286c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:18 +0100 +Subject: [PATCH 25/87] blkdebug: Employ error parameter + +RH-Author: Max Reitz +Message-id: <1383604354-12743-28-git-send-email-mreitz@redhat.com> +Patchwork-id: 55327 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 27/43] blkdebug: Employ error parameter +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Make use of the error parameter in blkdebug_open. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 10ffa72faed7e02805d7911d58d429efe6f95f93) + +Signed-off-by: Max Reitz +--- + block/blkdebug.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/blkdebug.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/block/blkdebug.c b/block/blkdebug.c +index eda2810..9ee4fbb 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -359,8 +359,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + opts = qemu_opts_create_nofail(&runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } +@@ -370,6 +369,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + if (config) { + ret = read_config(s, config); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read blkdebug config file"); + goto fail; + } + } +@@ -380,14 +380,14 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + /* Open the backing file */ + filename = qemu_opt_get(opts, "x-image"); + if (filename == NULL) { ++ error_setg(errp, "Could not retrieve image file name"); + ret = -EINVAL; + goto fail; + } + + ret = bdrv_file_open(&bs->file, filename, NULL, flags, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + goto fail; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-blkdebug-Make-required-alignment-configurable.patch b/SOURCES/kvm-blkdebug-Make-required-alignment-configurable.patch new file mode 100644 index 0000000..d49b75b --- /dev/null +++ b/SOURCES/kvm-blkdebug-Make-required-alignment-configurable.patch @@ -0,0 +1,79 @@ +From 9f8b66d561d7b77338f79f2adf7a7d1102ad9d24 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 14 Jan 2014 13:44:35 +0100 +Subject: [PATCH 31/37] blkdebug: Make required alignment configurable + +Message-id: <1392117622-28812-32-git-send-email-kwolf@redhat.com> +Patchwork-id: 57196 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 31/37] blkdebug: Make required alignment configurable +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +The new 'align' option of blkdebug can be used in order to emulate +backends with a required 4k alignment on hosts which only really require +512 byte alignment. + +Signed-off-by: Kevin Wolf +(cherry picked from commit b35ee7fb2308e09092488029b5a9e456ce61bbe6) + +Conflicts: + block/blkdebug.c + qapi-schema.json + +Conflicts because RHEL 7 doesn't have the blockdev-add support series +for blkdebug. + +Signed-off-by: Kevin Wolf +--- + block/blkdebug.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) +--- + block/blkdebug.c | 16 ++++++++++++++++ + 1 files changed, 16 insertions(+), 0 deletions(-) + +diff --git a/block/blkdebug.c b/block/blkdebug.c +index 9ee4fbb..ccb562b 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -343,6 +343,11 @@ static QemuOptsList runtime_opts = { + .type = QEMU_OPT_STRING, + .help = "[internal use only, will be removed]", + }, ++ { ++ .name = "align", ++ .type = QEMU_OPT_SIZE, ++ .help = "Required alignment in bytes", ++ }, + { /* end of list */ } + }, + }; +@@ -354,6 +359,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + QemuOpts *opts; + Error *local_err = NULL; + const char *filename, *config; ++ uint64_t align; + int ret; + + opts = qemu_opts_create_nofail(&runtime_opts); +@@ -391,6 +397,16 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ /* Set request alignment */ ++ align = qemu_opt_get_size(opts, "align", bs->request_alignment); ++ if (align > 0 && align < INT_MAX && !(align & (align - 1))) { ++ bs->request_alignment = align; ++ } else { ++ error_setg(errp, "Invalid alignment"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + ret = 0; + fail: + qemu_opts_del(opts); +-- +1.7.1 + diff --git a/SOURCES/kvm-blkverify-Employ-error-parameter.patch b/SOURCES/kvm-blkverify-Employ-error-parameter.patch new file mode 100644 index 0000000..d2f303c --- /dev/null +++ b/SOURCES/kvm-blkverify-Employ-error-parameter.patch @@ -0,0 +1,90 @@ +From 933ac03653bd2ec6194811b5c73b871854382298 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:19 +0100 +Subject: [PATCH 26/87] blkverify: Employ error parameter + +RH-Author: Max Reitz +Message-id: <1383604354-12743-29-git-send-email-mreitz@redhat.com> +Patchwork-id: 55328 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 28/43] blkverify: Employ error parameter +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Make use of the error parameter in blkverify_open. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit ca2884087a36c60d592aa0e8e327bf1579972077) + +Signed-off-by: Max Reitz + +Conflicts: + block/blkverify.c + +Conflicts because "Implement reference count for BlockDriverState" has +not yet been backported. +--- + block/blkverify.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/blkverify.c | 11 +++++------ + 1 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/block/blkverify.c b/block/blkverify.c +index cceb88f..92a452d 100644 +--- a/block/blkverify.c ++++ b/block/blkverify.c +@@ -128,8 +128,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + opts = qemu_opts_create_nofail(&runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } +@@ -137,20 +136,21 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + /* Parse the raw image filename */ + raw = qemu_opt_get(opts, "x-raw"); + if (raw == NULL) { ++ error_setg(errp, "Could not retrieve raw image filename"); + ret = -EINVAL; + goto fail; + } + + ret = bdrv_file_open(&bs->file, raw, NULL, flags, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + goto fail; + } + + /* Open the test file */ + filename = qemu_opt_get(opts, "x-image"); + if (filename == NULL) { ++ error_setg(errp, "Could not retrieve test image filename"); + ret = -EINVAL; + goto fail; + } +@@ -158,8 +158,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + s->test_file = bdrv_new(""); + ret = bdrv_open(s->test_file, filename, NULL, flags, NULL, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + bdrv_delete(s->test_file); + s->test_file = NULL; + goto fail; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Add-Error-argument-to-bdrv_refresh_limits.patch b/SOURCES/kvm-block-Add-Error-argument-to-bdrv_refresh_limits.patch new file mode 100644 index 0000000..38757ff --- /dev/null +++ b/SOURCES/kvm-block-Add-Error-argument-to-bdrv_refresh_limits.patch @@ -0,0 +1,307 @@ +From 1aac494dfcc4f96e04f3ad8bc14db8f17c48626f Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 17 Mar 2015 13:02:48 +0100 +Subject: [PATCH 13/16] block: Add Error argument to bdrv_refresh_limits() + +Message-id: <1424365599-9801-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 63914 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/2] block: Add Error argument to bdrv_refresh_limits() +Bugzilla: 1184363 +RH-Acked-by: Max Reitz +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3baca891391afba154e250f5a108c6bab6c92cf9) +Signed-off-by: Stefan Hajnoczi + +Conflicts: + block.c + +bdrv_set_backing_hd() does not exist downstream so there are extra +bdrv_refresh_limits() occurrences downstream. They pass a NULL errp +argument as bdrv_set_backing_hd() would. + + block/iscsi.c + +Context conflict, easy to resolve. + + block/raw_bsd.c + +Does not exist downstream, apply change to block/raw.c instead. +--- + block.c | 35 ++++++++++++++++++++++++----------- + block/iscsi.c | 4 +--- + block/qcow2.c | 4 +--- + block/qed.c | 4 +--- + block/raw-posix.c | 4 +--- + block/raw.c | 3 +-- + block/stream.c | 2 +- + block/vmdk.c | 4 +--- + include/block/block.h | 2 +- + include/block/block_int.h | 2 +- + 10 files changed, 33 insertions(+), 31 deletions(-) + +diff --git a/block.c b/block.c +index 21418a6..89ab829 100644 +--- a/block.c ++++ b/block.c +@@ -462,19 +462,24 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options, + return ret; + } + +-int bdrv_refresh_limits(BlockDriverState *bs) ++void bdrv_refresh_limits(BlockDriverState *bs, Error **errp) + { + BlockDriver *drv = bs->drv; ++ Error *local_err = NULL; + + memset(&bs->bl, 0, sizeof(bs->bl)); + + if (!drv) { +- return 0; ++ return; + } + + /* Take some limits from the children as a default */ + if (bs->file) { +- bdrv_refresh_limits(bs->file); ++ bdrv_refresh_limits(bs->file, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; ++ } + bs->bl.opt_transfer_length = bs->file->bl.opt_transfer_length; + bs->bl.opt_mem_alignment = bs->file->bl.opt_mem_alignment; + } else { +@@ -482,7 +487,11 @@ int bdrv_refresh_limits(BlockDriverState *bs) + } + + if (bs->backing_hd) { +- bdrv_refresh_limits(bs->backing_hd); ++ bdrv_refresh_limits(bs->backing_hd, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; ++ } + bs->bl.opt_transfer_length = + MAX(bs->bl.opt_transfer_length, + bs->backing_hd->bl.opt_transfer_length); +@@ -493,10 +502,8 @@ int bdrv_refresh_limits(BlockDriverState *bs) + + /* Then let the driver override it */ + if (drv->bdrv_refresh_limits) { +- return drv->bdrv_refresh_limits(bs); ++ drv->bdrv_refresh_limits(bs, errp); + } +- +- return 0; + } + + /* +@@ -856,7 +863,13 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + goto free_and_fail; + } + +- bdrv_refresh_limits(bs); ++ bdrv_refresh_limits(bs, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ ret = -EINVAL; ++ goto free_and_fail; ++ } ++ + assert(bdrv_opt_mem_align(bs) != 0); + assert((bs->request_alignment != 0) || bs->sg); + +@@ -1048,7 +1061,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + } + + /* Recalculate the BlockLimits with the backing file */ +- bdrv_refresh_limits(bs); ++ bdrv_refresh_limits(bs, NULL); + + return 0; + } +@@ -1483,7 +1496,7 @@ void bdrv_reopen_commit(BDRVReopenState *reopen_state) + BDRV_O_CACHE_WB); + reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR); + +- bdrv_refresh_limits(reopen_state->bs); ++ bdrv_refresh_limits(reopen_state->bs, NULL); + } + + /* +@@ -2398,7 +2411,7 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, + } + new_top_bs->backing_hd = base_bs; + +- bdrv_refresh_limits(new_top_bs); ++ bdrv_refresh_limits(new_top_bs, NULL); + + QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) { + /* so that bdrv_close() does not recursively close the chain */ +diff --git a/block/iscsi.c b/block/iscsi.c +index 3d61dd7..2a4ab22 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1550,7 +1550,7 @@ static void iscsi_close(BlockDriverState *bs) + memset(iscsilun, 0, sizeof(IscsiLun)); + } + +-static int iscsi_refresh_limits(BlockDriverState *bs) ++static void iscsi_refresh_limits(BlockDriverState *bs, Error **errp) + { + IscsiLun *iscsilun = bs->opaque; + +@@ -1576,8 +1576,6 @@ static int iscsi_refresh_limits(BlockDriverState *bs) + bs->bl.opt_transfer_length = sector_lun2qemu(iscsilun->bl.opt_xfer_len, + iscsilun); + } +- +- return 0; + } + + /* We have nothing to do for iSCSI reopen, stub just returns +diff --git a/block/qcow2.c b/block/qcow2.c +index 43e54d6..005d513 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -848,13 +848,11 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + return ret; + } + +-static int qcow2_refresh_limits(BlockDriverState *bs) ++static void qcow2_refresh_limits(BlockDriverState *bs, Error **errp) + { + BDRVQcowState *s = bs->opaque; + + bs->bl.write_zeroes_alignment = s->cluster_sectors; +- +- return 0; + } + + static int qcow2_set_key(BlockDriverState *bs, const char *key) +diff --git a/block/qed.c b/block/qed.c +index d1de0a2..5793fca 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -507,13 +507,11 @@ out: + return ret; + } + +-static int bdrv_qed_refresh_limits(BlockDriverState *bs) ++static void bdrv_qed_refresh_limits(BlockDriverState *bs, Error **errp) + { + BDRVQEDState *s = bs->opaque; + + bs->bl.write_zeroes_alignment = s->header.cluster_size >> BDRV_SECTOR_BITS; +- +- return 0; + } + + /* We have nothing to do for QED reopen, stubs just return +diff --git a/block/raw-posix.c b/block/raw-posix.c +index af526ca..46b941b 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -588,14 +588,12 @@ static void raw_reopen_abort(BDRVReopenState *state) + state->opaque = NULL; + } + +-static int raw_refresh_limits(BlockDriverState *bs) ++static void raw_refresh_limits(BlockDriverState *bs, Error **errp) + { + BDRVRawState *s = bs->opaque; + + raw_probe_alignment(bs, s->fd, errp); + bs->bl.opt_mem_alignment = s->buf_align; +- +- return 0; + } + + static ssize_t handle_aiocb_ioctl(RawPosixAIOData *aiocb) +diff --git a/block/raw.c b/block/raw.c +index eeadba5..a750359 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -58,10 +58,9 @@ static int64_t raw_getlength(BlockDriverState *bs) + return bdrv_getlength(bs->file); + } + +-static int raw_refresh_limits(BlockDriverState *bs) ++static void raw_refresh_limits(BlockDriverState *bs, Error **errp) + { + bs->bl = bs->file->bl; +- return 0; + } + + static int raw_truncate(BlockDriverState *bs, int64_t offset) +diff --git a/block/stream.c b/block/stream.c +index 367120d..4e4436c 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -72,7 +72,7 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base, + } + top->backing_hd = base; + +- bdrv_refresh_limits(top); ++ bdrv_refresh_limits(top, NULL); + } + + static void coroutine_fn stream_run(void *opaque) +diff --git a/block/vmdk.c b/block/vmdk.c +index cfcaa84..24e9458 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -954,7 +954,7 @@ fail: + } + + +-static int vmdk_refresh_limits(BlockDriverState *bs) ++static void vmdk_refresh_limits(BlockDriverState *bs, Error **errp) + { + BDRVVmdkState *s = bs->opaque; + int i; +@@ -966,8 +966,6 @@ static int vmdk_refresh_limits(BlockDriverState *bs) + s->extents[i].cluster_sectors); + } + } +- +- return 0; + } + + /** +diff --git a/include/block/block.h b/include/block/block.h +index c79a1e1..3170cbc 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -254,7 +254,7 @@ int64_t bdrv_nb_sectors(BlockDriverState *bs); + int64_t bdrv_getlength(BlockDriverState *bs); + int64_t bdrv_get_allocated_file_size(BlockDriverState *bs); + void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); +-int bdrv_refresh_limits(BlockDriverState *bs); ++void bdrv_refresh_limits(BlockDriverState *bs, Error **errp); + int bdrv_commit(BlockDriverState *bs); + int bdrv_commit_all(void); + int bdrv_change_backing_file(BlockDriverState *bs, +diff --git a/include/block/block_int.h b/include/block/block_int.h +index e6874b4..3f86649 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -213,7 +213,7 @@ struct BlockDriver { + int (*bdrv_debug_resume)(BlockDriverState *bs, const char *tag); + bool (*bdrv_debug_is_suspended)(BlockDriverState *bs, const char *tag); + +- int (*bdrv_refresh_limits)(BlockDriverState *bs); ++ void (*bdrv_refresh_limits)(BlockDriverState *bs, Error **errp); + + /* + * Returns 1 if newly created images are guaranteed to contain only +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Add-bdrv_get_specific_info.patch b/SOURCES/kvm-block-Add-bdrv_get_specific_info.patch new file mode 100644 index 0000000..9a3f68b --- /dev/null +++ b/SOURCES/kvm-block-Add-bdrv_get_specific_info.patch @@ -0,0 +1,101 @@ +From c6de1e3f478b5449d1283c66164c5ede351db600 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:35 +0100 +Subject: [PATCH 78/87] block: Add bdrv_get_specific_info + +RH-Author: Max Reitz +Message-id: <1383756824-6921-13-git-send-email-mreitz@redhat.com> +Patchwork-id: 55567 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 12/21] block: Add bdrv_get_specific_info +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +BZ: 980771 + +Add a function for retrieving an ImageInfoSpecific object from a block +driver. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit eae041fe6f4314962e873615134eefb32cf8ba61) + +Signed-off-by: Max Reitz +--- + block.c | 9 +++++++++ + block/qapi.c | 3 +++ + include/block/block.h | 1 + + include/block/block_int.h | 1 + + 4 files changed, 14 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 9 +++++++++ + block/qapi.c | 3 +++ + include/block/block.h | 1 + + include/block/block_int.h | 1 + + 4 files changed, 14 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index e4885da..6913799 100644 +--- a/block.c ++++ b/block.c +@@ -3309,6 +3309,15 @@ int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + return drv->bdrv_get_info(bs, bdi); + } + ++ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs) ++{ ++ BlockDriver *drv = bs->drv; ++ if (drv && drv->bdrv_get_specific_info) { ++ return drv->bdrv_get_specific_info(bs); ++ } ++ return NULL; ++} ++ + int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf, + int64_t pos, int size) + { +diff --git a/block/qapi.c b/block/qapi.c +index a4bc411..896cd37 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -134,6 +134,9 @@ void bdrv_query_image_info(BlockDriverState *bs, + info->dirty_flag = bdi.is_dirty; + info->has_dirty_flag = true; + } ++ info->format_specific = bdrv_get_specific_info(bs); ++ info->has_format_specific = info->format_specific != NULL; ++ + backing_filename = bs->backing_file; + if (backing_filename[0] != '\0') { + info->backing_filename = g_strdup(backing_filename); +diff --git a/include/block/block.h b/include/block/block.h +index 7695cae..656570e 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -338,6 +338,7 @@ int bdrv_get_flags(BlockDriverState *bs); + int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); + int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi); ++ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs); + void bdrv_round_to_clusters(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, + int64_t *cluster_sector_num, +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 9348238..0dbc34f 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -166,6 +166,7 @@ struct BlockDriver { + int (*bdrv_snapshot_load_tmp)(BlockDriverState *bs, + const char *snapshot_name); + int (*bdrv_get_info)(BlockDriverState *bs, BlockDriverInfo *bdi); ++ ImageInfoSpecific *(*bdrv_get_specific_info)(BlockDriverState *bs); + + int (*bdrv_save_vmstate)(BlockDriverState *bs, QEMUIOVector *qiov, + int64_t pos); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Add-commit_active_start.patch b/SOURCES/kvm-block-Add-commit_active_start.patch new file mode 100644 index 0000000..86d0909 --- /dev/null +++ b/SOURCES/kvm-block-Add-commit_active_start.patch @@ -0,0 +1,197 @@ +From d432da3600bfb48139ee10373122c250a9f5a003 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:59 +0100 +Subject: [PATCH 16/34] block: Add commit_active_start() + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-15-git-send-email-famz@redhat.com> +Patchwork-id: 56776 +O-Subject: [RHEL-7 qemu-kvm PATCH 14/18] block: Add commit_active_start() +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +commit_active_start is implemented in block/mirror.c, It will create a +job with "commit" type and designated base in block-commit command. This +will be used for committing active layer of device. + +Sync mode is removed from MirrorBlockJob because there's no proper type +for commit. The used information is is_none_mode. + +The common part of mirror_start and commit_active_start is moved to +mirror_start_job(). + +Fix the comment wording for commit_start. + +Signed-off-by: Fam Zheng +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 03544a6e9ecc1be115e8a29bd929f83b467d4816) +Signed-off-by: Fam Zheng +--- + block/mirror.c | 66 +++++++++++++++++++++++++++++++++++------------ + include/block/block_int.h | 22 +++++++++++++--- + 2 files changed, 69 insertions(+), 19 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 66 ++++++++++++++++++++++++++++++++++----------- + include/block/block_int.h | 22 +++++++++++++-- + 2 files changed, 69 insertions(+), 19 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 8ccde2f..01fe379 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -32,7 +32,7 @@ typedef struct MirrorBlockJob { + RateLimit limit; + BlockDriverState *target; + BlockDriverState *base; +- MirrorSyncMode mode; ++ bool is_none_mode; + BlockdevOnError on_source_error, on_target_error; + bool synced; + bool should_complete; +@@ -333,7 +333,7 @@ static void coroutine_fn mirror_run(void *opaque) + sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS; + mirror_free_init(s); + +- if (s->mode != MIRROR_SYNC_MODE_NONE) { ++ if (!s->is_none_mode) { + /* First part, loop on the sectors and initialize the dirty bitmap. */ + BlockDriverState *base = s->base; + for (sector_num = 0; sector_num < end; ) { +@@ -532,15 +532,26 @@ static const BlockJobDriver mirror_job_driver = { + .complete = mirror_complete, + }; + +-void mirror_start(BlockDriverState *bs, BlockDriverState *target, +- int64_t speed, int64_t granularity, int64_t buf_size, +- MirrorSyncMode mode, BlockdevOnError on_source_error, +- BlockdevOnError on_target_error, +- BlockDriverCompletionFunc *cb, +- void *opaque, Error **errp) ++static const BlockJobDriver commit_active_job_driver = { ++ .instance_size = sizeof(MirrorBlockJob), ++ .job_type = BLOCK_JOB_TYPE_COMMIT, ++ .set_speed = mirror_set_speed, ++ .iostatus_reset ++ = mirror_iostatus_reset, ++ .complete = mirror_complete, ++}; ++ ++static void mirror_start_job(BlockDriverState *bs, BlockDriverState *target, ++ int64_t speed, int64_t granularity, ++ int64_t buf_size, ++ BlockdevOnError on_source_error, ++ BlockdevOnError on_target_error, ++ BlockDriverCompletionFunc *cb, ++ void *opaque, Error **errp, ++ const BlockJobDriver *driver, ++ bool is_none_mode, BlockDriverState *base) + { + MirrorBlockJob *s; +- BlockDriverState *base = NULL; + + if (granularity == 0) { + /* Choose the default granularity based on the target file's cluster +@@ -563,13 +574,8 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + return; + } + +- if (mode == MIRROR_SYNC_MODE_TOP) { +- base = bs->backing_hd; +- } else { +- base = NULL; +- } + +- s = block_job_create(&mirror_job_driver, bs, speed, cb, opaque, errp); ++ s = block_job_create(driver, bs, speed, cb, opaque, errp); + if (!s) { + return; + } +@@ -577,7 +583,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + s->on_source_error = on_source_error; + s->on_target_error = on_target_error; + s->target = target; +- s->mode = mode; ++ s->is_none_mode = is_none_mode; + s->base = base; + s->granularity = granularity; + s->buf_size = MAX(buf_size, granularity); +@@ -590,3 +596,31 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + trace_mirror_start(bs, s, s->common.co, opaque); + qemu_coroutine_enter(s->common.co, s); + } ++ ++void mirror_start(BlockDriverState *bs, BlockDriverState *target, ++ int64_t speed, int64_t granularity, int64_t buf_size, ++ MirrorSyncMode mode, BlockdevOnError on_source_error, ++ BlockdevOnError on_target_error, ++ BlockDriverCompletionFunc *cb, ++ void *opaque, Error **errp) ++{ ++ bool is_none_mode; ++ BlockDriverState *base; ++ ++ is_none_mode = mode == MIRROR_SYNC_MODE_NONE; ++ base = mode == MIRROR_SYNC_MODE_TOP ? bs->backing_hd : NULL; ++ mirror_start_job(bs, target, speed, granularity, buf_size, ++ on_source_error, on_target_error, cb, opaque, errp, ++ &mirror_job_driver, is_none_mode, base); ++} ++ ++void commit_active_start(BlockDriverState *bs, BlockDriverState *base, ++ int64_t speed, ++ BlockdevOnError on_error, ++ BlockDriverCompletionFunc *cb, ++ void *opaque, Error **errp) ++{ ++ mirror_start_job(bs, base, speed, 0, 0, ++ on_error, on_error, cb, opaque, errp, ++ &commit_active_job_driver, false, base); ++} +diff --git a/include/block/block_int.h b/include/block/block_int.h +index fbfdab7..c8f30fd 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -374,8 +374,9 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base, + + /** + * commit_start: +- * @bs: Top Block device +- * @base: Block device that will be written into, and become the new top ++ * @bs: Active block device. ++ * @top: Top block device to be committed. ++ * @base: Block device that will be written into, and become the new top. + * @speed: The maximum speed, in bytes per second, or 0 for unlimited. + * @on_error: The action to take upon error. + * @cb: Completion function for the job. +@@ -387,7 +388,22 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, + BlockDriverState *top, int64_t speed, + BlockdevOnError on_error, BlockDriverCompletionFunc *cb, + void *opaque, Error **errp); +- ++/** ++ * commit_active_start: ++ * @bs: Active block device to be committed. ++ * @base: Block device that will be written into, and become the new top. ++ * @speed: The maximum speed, in bytes per second, or 0 for unlimited. ++ * @on_error: The action to take upon error. ++ * @cb: Completion function for the job. ++ * @opaque: Opaque pointer value passed to @cb. ++ * @errp: Error object. ++ * ++ */ ++void commit_active_start(BlockDriverState *bs, BlockDriverState *base, ++ int64_t speed, ++ BlockdevOnError on_error, ++ BlockDriverCompletionFunc *cb, ++ void *opaque, Error **errp); + /* + * mirror_start: + * @bs: Block device to operate on. +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Add-errp-to-bdrv_new.patch b/SOURCES/kvm-block-Add-errp-to-bdrv_new.patch new file mode 100644 index 0000000..f2c9eec --- /dev/null +++ b/SOURCES/kvm-block-Add-errp-to-bdrv_new.patch @@ -0,0 +1,308 @@ +From bfec9b88263e72c7425df04601bfcae5c06dca23 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:06 +0200 +Subject: [PATCH 06/19] block: Add errp to bdrv_new() + +Message-id: <1414059011-15516-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 61837 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 3/8] block: Add errp to bdrv_new() +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +This patch adds an errp parameter to bdrv_new() and updates all its +callers. The next patches will make use of this in order to check for +duplicate IDs. Most of the callers know that their ID is fine, so they +can simply assert that there is no error. + +Behaviour doesn't change with this patch yet as bdrv_new() doesn't +actually assign errors to errp. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 98522f63f40adaebc412481e1d2e9170160d4539) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block.c + qemu-img.c + qemu-io.c + +In RHEL 7, we have a different set of bdrv_new() callers. Fortunately, +the additional ones compared to upstream are trivial: Either we know +for sure that their name is unique (e.g. fixed names used in qemu-img) +and therefore bdrv_new() will never fail even after the final patch of +this series ('block: Catch duplicate IDs in bdrv_new()'), or they use an +empty name "" which can't conflict either. + +This patch leaks local_err in xen_disk, which was fixed in upstream +commit cedccf13. Downstream, we don't care about Xen, so it will remain +unfixed. + +Signed-off-by: Kevin Wolf +--- + block.c | 10 +++++----- + block/blkverify.c | 2 +- + block/iscsi.c | 2 +- + block/vmdk.c | 2 +- + block/vvfat.c | 4 ++-- + blockdev.c | 13 +++++++++---- + hw/block/xen_disk.c | 7 +++++-- + include/block/block.h | 2 +- + qemu-img.c | 6 +++--- + qemu-io.c | 2 +- + qemu-nbd.c | 3 ++- + 11 files changed, 31 insertions(+), 22 deletions(-) + +diff --git a/block.c b/block.c +index 496eb72..eb0810e 100644 +--- a/block.c ++++ b/block.c +@@ -300,7 +300,7 @@ void bdrv_register(BlockDriver *bdrv) + } + + /* create a new block device (by default it is empty) */ +-BlockDriverState *bdrv_new(const char *device_name) ++BlockDriverState *bdrv_new(const char *device_name, Error **errp) + { + BlockDriverState *bs; + +@@ -892,7 +892,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + options = qdict_new(); + } + +- bs = bdrv_new(""); ++ bs = bdrv_new("", &error_abort); + bs->options = options; + options = qdict_clone_shallow(options); + +@@ -1014,7 +1014,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + sizeof(backing_filename)); + } + +- bs->backing_hd = bdrv_new(""); ++ bs->backing_hd = bdrv_new("", &error_abort); + + if (bs->backing_format[0] != '\0') { + back_drv = bdrv_find_format(bs->backing_format); +@@ -1111,7 +1111,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + instead of opening 'filename' directly */ + + /* if there is a backing file, use it */ +- bs1 = bdrv_new(""); ++ bs1 = bdrv_new("", &error_abort); + ret = bdrv_open(bs1, filename, NULL, 0, drv, &local_err); + if (ret < 0) { + bdrv_unref(bs1); +@@ -5273,7 +5273,7 @@ void bdrv_img_create(const char *filename, const char *fmt, + back_flags = + flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING); + +- bs = bdrv_new(""); ++ bs = bdrv_new("", &error_abort); + + ret = bdrv_open(bs, backing_file->value.s, NULL, back_flags, + backing_drv, &local_err); +diff --git a/block/blkverify.c b/block/blkverify.c +index 4ff7688..e623f6e 100644 +--- a/block/blkverify.c ++++ b/block/blkverify.c +@@ -155,7 +155,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- s->test_file = bdrv_new(""); ++ s->test_file = bdrv_new("", &error_abort); + ret = bdrv_open(s->test_file, filename, NULL, flags, NULL, &local_err); + if (ret < 0) { + error_propagate(errp, local_err); +diff --git a/block/iscsi.c b/block/iscsi.c +index 9fe3be8..4f42f29 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1576,7 +1576,7 @@ static int iscsi_create(const char *filename, QEMUOptionParameter *options, + IscsiLun *iscsilun = NULL; + QDict *bs_options; + +- bs = bdrv_new(""); ++ bs = bdrv_new("", &error_abort); + + /* Read out options */ + while (options && options->name) { +diff --git a/block/vmdk.c b/block/vmdk.c +index eff0663..a5b1f1c 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1745,7 +1745,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + goto exit; + } + if (backing_file) { +- BlockDriverState *bs = bdrv_new(""); ++ BlockDriverState *bs = bdrv_new("", &error_abort); + ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp); + if (ret != 0) { + bdrv_unref(bs); +diff --git a/block/vvfat.c b/block/vvfat.c +index 3ddaa0b..6fd52df 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2935,7 +2935,7 @@ static int enable_write_target(BDRVVVFATState *s) + goto err; + } + +- s->qcow = bdrv_new(""); ++ s->qcow = bdrv_new("", &error_abort); + + ret = bdrv_open(s->qcow, s->qcow_filename, NULL, + BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, bdrv_qcow, +@@ -2951,7 +2951,7 @@ static int enable_write_target(BDRVVVFATState *s) + unlink(s->qcow_filename); + #endif + +- s->bs->backing_hd = bdrv_new(""); ++ s->bs->backing_hd = bdrv_new("", &error_abort); + s->bs->backing_hd->drv = &vvfat_write_target; + s->bs->backing_hd->opaque = g_malloc(sizeof(void*)); + *(void**)s->bs->backing_hd->opaque = s; +diff --git a/blockdev.c b/blockdev.c +index 1ac8804..b5792a2 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -471,7 +471,11 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + /* init */ + dinfo = g_malloc0(sizeof(*dinfo)); + dinfo->id = g_strdup(qemu_opts_id(opts)); +- dinfo->bdrv = bdrv_new(dinfo->id); ++ dinfo->bdrv = bdrv_new(dinfo->id, &error); ++ if (error) { ++ error_propagate(errp, error); ++ goto bdrv_new_err; ++ } + dinfo->bdrv->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0; + dinfo->bdrv->read_only = ro; + dinfo->type = type; +@@ -531,8 +535,9 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + + err: + bdrv_unref(dinfo->bdrv); +- g_free(dinfo->id); + QTAILQ_REMOVE(&drives, dinfo, next); ++bdrv_new_err: ++ g_free(dinfo->id); + g_free(dinfo); + early_err: + QDECREF(bs_opts); +@@ -1056,7 +1061,7 @@ static void external_snapshot_prepare(BlkTransactionStates *common, + } + + /* We will manually add the backing_hd field to the bs later */ +- states->new_bs = bdrv_new(""); ++ states->new_bs = bdrv_new("", &error_abort); + /* TODO Inherit bs->options or only take explicit options with an + * extended QMP command? */ + ret = bdrv_open(states->new_bs, new_image_file, NULL, +@@ -1678,7 +1683,7 @@ void qmp_drive_mirror(const char *device, const char *target, + /* Mirroring takes care of copy-on-write using the source's backing + * file. + */ +- target_bs = bdrv_new(""); ++ target_bs = bdrv_new("", &error_abort); + ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv, + &local_err); + if (ret < 0) { +diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c +index a2653b2..fc45f36 100644 +--- a/hw/block/xen_disk.c ++++ b/hw/block/xen_disk.c +@@ -793,11 +793,14 @@ static int blk_connect(struct XenDevice *xendev) + index = (blkdev->xendev.dev - 202 * 256) / 16; + blkdev->dinfo = drive_get(IF_XEN, 0, index); + if (!blkdev->dinfo) { ++ Error *local_err = NULL; + /* setup via xenbus -> create new block driver instance */ + xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n"); +- blkdev->bs = bdrv_new(blkdev->dev); ++ blkdev->bs = bdrv_new(blkdev->dev, &local_err); ++ if (local_err) { ++ blkdev->bs = NULL; ++ } + if (blkdev->bs) { +- Error *local_err = NULL; + BlockDriver *drv = bdrv_find_whitelisted_format(blkdev->fileproto, + readonly); + if (bdrv_open(blkdev->bs, +diff --git a/include/block/block.h b/include/block/block.h +index 03b7960..3651bd9 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -178,7 +178,7 @@ int bdrv_create(BlockDriver *drv, const char* filename, + QEMUOptionParameter *options, Error **errp); + int bdrv_create_file(const char* filename, QEMUOptionParameter *options, + Error **errp); +-BlockDriverState *bdrv_new(const char *device_name); ++BlockDriverState *bdrv_new(const char *device_name, Error **errp); + void bdrv_make_anon(BlockDriverState *bs); + void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old); + void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top); +diff --git a/qemu-img.c b/qemu-img.c +index ed1799c..5c2f36a 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -274,7 +274,7 @@ static BlockDriverState *bdrv_new_open(const char *filename, + Error *local_err = NULL; + int ret; + +- bs = bdrv_new("image"); ++ bs = bdrv_new("image", &error_abort); + + if (fmt) { + drv = bdrv_find_format(fmt); +@@ -2299,7 +2299,7 @@ static int img_rebase(int argc, char **argv) + } else { + char backing_name[1024]; + +- bs_old_backing = bdrv_new("old_backing"); ++ bs_old_backing = bdrv_new("old_backing", &error_abort); + bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); + ret = bdrv_open(bs_old_backing, backing_name, NULL, BDRV_O_FLAGS, + old_backing_drv, &local_err); +@@ -2310,7 +2310,7 @@ static int img_rebase(int argc, char **argv) + goto out; + } + if (out_baseimg[0]) { +- bs_new_backing = bdrv_new("new_backing"); ++ bs_new_backing = bdrv_new("new_backing", &error_abort); + ret = bdrv_open(bs_new_backing, out_baseimg, NULL, BDRV_O_FLAGS, + new_backing_drv, &local_err); + if (ret) { +diff --git a/qemu-io.c b/qemu-io.c +index bbe2518..cc89947 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -1831,7 +1831,7 @@ static int openfile(char *name, int flags, int growable, QDict *opts) + return 1; + } + } else { +- bs = bdrv_new("hda"); ++ bs = bdrv_new("hda", &error_abort); + + if (bdrv_open(bs, name, opts, flags, NULL, &local_err) < 0) { + fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, +diff --git a/qemu-nbd.c b/qemu-nbd.c +index 207a610..ff792ef 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -572,7 +572,8 @@ int main(int argc, char **argv) + drv = NULL; + } + +- bs = bdrv_new("hda"); ++ bs = bdrv_new("hda", &error_abort); ++ + srcpath = argv[optind]; + ret = bdrv_open(bs, srcpath, NULL, flags, drv, &local_err); + if (ret < 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Add-qemu_-try_-blockalign0.patch b/SOURCES/kvm-block-Add-qemu_-try_-blockalign0.patch new file mode 100644 index 0000000..1c0069d --- /dev/null +++ b/SOURCES/kvm-block-Add-qemu_-try_-blockalign0.patch @@ -0,0 +1,81 @@ +From ad8bc0d8901415eeea7bb27ef26f197918be0752 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:09 +0200 +Subject: [PATCH 15/42] block: Add qemu_{,try_}blockalign0() + +Message-id: <1434212556-3927-16-git-send-email-mreitz@redhat.com> +Patchwork-id: 66034 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 15/42] block: Add qemu_{,try_}blockalign0() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +These functions call their non-0-counterparts and then fill the +allocated buffer with 0 (if the allocation has been successful). + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 9ebd84480583bb6d9a7666c079d99ff3266c423d) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block.c | 16 ++++++++++++++++ + include/block/block.h | 2 ++ + 2 files changed, 18 insertions(+) + +diff --git a/block.c b/block.c +index 1afa544..22ab762 100644 +--- a/block.c ++++ b/block.c +@@ -5178,6 +5178,11 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size) + return qemu_memalign(bdrv_opt_mem_align(bs), size); + } + ++void *qemu_blockalign0(BlockDriverState *bs, size_t size) ++{ ++ return memset(qemu_blockalign(bs, size), 0, size); ++} ++ + void *qemu_try_blockalign(BlockDriverState *bs, size_t size) + { + size_t align = bdrv_opt_mem_align(bs); +@@ -5191,6 +5196,17 @@ void *qemu_try_blockalign(BlockDriverState *bs, size_t size) + return qemu_try_memalign(align, size); + } + ++void *qemu_try_blockalign0(BlockDriverState *bs, size_t size) ++{ ++ void *mem = qemu_try_blockalign(bs, size); ++ ++ if (mem) { ++ memset(mem, 0, size); ++ } ++ ++ return mem; ++} ++ + /* + * Check if all memory in this vector is sector aligned. + */ +diff --git a/include/block/block.h b/include/block/block.h +index 7b538b7..8339cac 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -417,7 +417,9 @@ void bdrv_img_create(const char *filename, const char *fmt, + size_t bdrv_opt_mem_align(BlockDriverState *bs); + void bdrv_set_guest_block_size(BlockDriverState *bs, int align); + void *qemu_blockalign(BlockDriverState *bs, size_t size); ++void *qemu_blockalign0(BlockDriverState *bs, size_t size); + void *qemu_try_blockalign(BlockDriverState *bs, size_t size); ++void *qemu_try_blockalign0(BlockDriverState *bs, size_t size); + bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); + + struct HBitmapIter; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Align-requests-in-bdrv_co_do_pwritev.patch b/SOURCES/kvm-block-Align-requests-in-bdrv_co_do_pwritev.patch new file mode 100644 index 0000000..8a99189 --- /dev/null +++ b/SOURCES/kvm-block-Align-requests-in-bdrv_co_do_pwritev.patch @@ -0,0 +1,143 @@ +From ddaa3bc746bdf8974337f176e3841b7c27d7253e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 3 Dec 2013 16:34:41 +0100 +Subject: [PATCH 24/37] block: Align requests in bdrv_co_do_pwritev() + +Message-id: <1392117622-28812-25-git-send-email-kwolf@redhat.com> +Patchwork-id: 57189 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 24/37] block: Align requests in bdrv_co_do_pwritev() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This patch changes bdrv_co_do_pwritev() to actually be what its name +promises. If requests aren't properly aligned, it performs a RMW. + +Requests touching the same block are serialised against the RMW request. +Further optimisation of this is possible by differentiating types of +requests (concurrent reads should actually be okay here). + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 3b8242e0ea2a2c201ef3d1bd24080490dae33080) + +Signed-off-by: Kevin Wolf +--- + block.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 85 insertions(+), 1 deletion(-) +--- + block.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 85 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index fd37037..3ec3949 100644 +--- a/block.c ++++ b/block.c +@@ -3078,6 +3078,12 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + BdrvRequestFlags flags) + { + BdrvTrackedRequest req; ++ /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */ ++ uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment); ++ uint8_t *head_buf = NULL; ++ uint8_t *tail_buf = NULL; ++ QEMUIOVector local_qiov; ++ bool use_local_qiov = false; + int ret; + + if (!bs->drv) { +@@ -3096,10 +3102,88 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + bdrv_io_limits_intercept(bs, true, bytes >> BDRV_SECTOR_BITS); + } + ++ /* ++ * Align write if necessary by performing a read-modify-write cycle. ++ * Pad qiov with the read parts and be sure to have a tracked request not ++ * only for bdrv_aligned_pwritev, but also for the reads of the RMW cycle. ++ */ + tracked_request_begin(&req, bs, offset, bytes, true); +- ret = bdrv_aligned_pwritev(bs, &req, offset, bytes, qiov, flags); ++ ++ if (offset & (align - 1)) { ++ QEMUIOVector head_qiov; ++ struct iovec head_iov; ++ ++ mark_request_serialising(&req, align); ++ wait_serialising_requests(&req); ++ ++ head_buf = qemu_blockalign(bs, align); ++ head_iov = (struct iovec) { ++ .iov_base = head_buf, ++ .iov_len = align, ++ }; ++ qemu_iovec_init_external(&head_qiov, &head_iov, 1); ++ ++ ret = bdrv_aligned_preadv(bs, &req, offset & ~(align - 1), align, ++ align, &head_qiov, 0); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ qemu_iovec_init(&local_qiov, qiov->niov + 2); ++ qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1)); ++ qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size); ++ use_local_qiov = true; ++ ++ bytes += offset & (align - 1); ++ offset = offset & ~(align - 1); ++ } ++ ++ if ((offset + bytes) & (align - 1)) { ++ QEMUIOVector tail_qiov; ++ struct iovec tail_iov; ++ size_t tail_bytes; ++ ++ mark_request_serialising(&req, align); ++ wait_serialising_requests(&req); ++ ++ tail_buf = qemu_blockalign(bs, align); ++ tail_iov = (struct iovec) { ++ .iov_base = tail_buf, ++ .iov_len = align, ++ }; ++ qemu_iovec_init_external(&tail_qiov, &tail_iov, 1); ++ ++ ret = bdrv_aligned_preadv(bs, &req, (offset + bytes) & ~(align - 1), align, ++ align, &tail_qiov, 0); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ if (!use_local_qiov) { ++ qemu_iovec_init(&local_qiov, qiov->niov + 1); ++ qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size); ++ use_local_qiov = true; ++ } ++ ++ tail_bytes = (offset + bytes) & (align - 1); ++ qemu_iovec_add(&local_qiov, tail_buf + tail_bytes, align - tail_bytes); ++ ++ bytes = ROUND_UP(bytes, align); ++ } ++ ++ ret = bdrv_aligned_pwritev(bs, &req, offset, bytes, ++ use_local_qiov ? &local_qiov : qiov, ++ flags); ++ ++fail: + tracked_request_end(&req); + ++ if (use_local_qiov) { ++ qemu_iovec_destroy(&local_qiov); ++ qemu_vfree(head_buf); ++ qemu_vfree(tail_buf); ++ } ++ + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Allow-JSON-filenames.patch b/SOURCES/kvm-block-Allow-JSON-filenames.patch new file mode 100644 index 0000000..bbc27d3 --- /dev/null +++ b/SOURCES/kvm-block-Allow-JSON-filenames.patch @@ -0,0 +1,89 @@ +From c2eb29efe61ffe88d3aff449446a9ac0f0f045a5 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Tue, 2 Jun 2015 09:46:37 +0200 +Subject: [PATCH 3/4] block: Allow JSON filenames + +Message-id: <1433238397-2500-3-git-send-email-rjones@redhat.com> +Patchwork-id: 65279 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] block: Allow JSON filenames +Bugzilla: 1226697 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Max Reitz + +If the filename given to bdrv_open() is prefixed with "json:", parse the +rest as a JSON object and merge the result into the options QDict. If +there are conflicts, the options QDict takes precedence. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + block.c | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +diff --git a/block.c b/block.c +index 45543d5..f2caf20 100644 +--- a/block.c ++++ b/block.c +@@ -1085,6 +1085,33 @@ static void extract_subqdict(QDict *src, QDict **dst, const char *start) + } + } + ++static QDict *parse_json_filename(const char *filename, Error **errp) ++{ ++ QObject *options_obj; ++ QDict *options; ++ int ret; ++ ++ ret = strstart(filename, "json:", &filename); ++ assert(ret); ++ ++ options_obj = qobject_from_json(filename); ++ if (!options_obj) { ++ error_setg(errp, "Could not parse the JSON options"); ++ return NULL; ++ } ++ ++ if (qobject_type(options_obj) != QTYPE_QDICT) { ++ qobject_decref(options_obj); ++ error_setg(errp, "Invalid JSON object given"); ++ return NULL; ++ } ++ ++ options = qobject_to_qdict(options_obj); ++ qdict_flatten(options); ++ ++ return options; ++} ++ + /* + * Opens a disk image (raw, qcow2, vmdk, ...) + * +@@ -1109,6 +1136,20 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + options = qdict_new(); + } + ++ if (filename && g_str_has_prefix(filename, "json:")) { ++ QDict *json_options = parse_json_filename(filename, &local_err); ++ if (local_err) { ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ /* Options given in the filename have lower priority than options ++ * specified directly */ ++ qdict_join(options, json_options, false); ++ QDECREF(json_options); ++ filename = NULL; ++ } ++ + bs->options = options; + options = qdict_clone_shallow(options); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Allow-driver-option-on-the-top-level.patch b/SOURCES/kvm-block-Allow-driver-option-on-the-top-level.patch new file mode 100644 index 0000000..e2f591e --- /dev/null +++ b/SOURCES/kvm-block-Allow-driver-option-on-the-top-level.patch @@ -0,0 +1,141 @@ +From c9489944db197e5c1b4086dc92a41f6c364976b0 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:17 +0200 +Subject: [PATCH 26/38] block: Allow "driver" option on the top level + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-27-git-send-email-kwolf@redhat.com> +Patchwork-id: 54213 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 26/32] block: Allow "driver" option on the top level +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This is traditionally -drive format=..., which is now translated into +the new driver option. This gives us a more consistent way to select the +driver of BlockDriverStates that can be used in QMP context, too. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 74fe54f2a1b5c4f4498a8fe521e1dfc936656cd4) + +Signed-off-by: Kevin Wolf +--- + block.c | 7 +++++++ + blockdev.c | 20 ++++++++++---------- + 2 files changed, 17 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 7 +++++++ + blockdev.c | 20 ++++++++++---------- + 2 files changed, 17 insertions(+), 10 deletions(-) + +diff --git a/block.c b/block.c +index 20820fa..f4a89b9 100644 +--- a/block.c ++++ b/block.c +@@ -972,6 +972,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + char tmp_filename[PATH_MAX + 1]; + BlockDriverState *file = NULL; + QDict *file_options = NULL; ++ const char *drvname; + + /* NULL means an empty set of options */ + if (options == NULL) { +@@ -1061,6 +1062,12 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + } + + /* Find the right image format driver */ ++ drvname = qdict_get_try_str(options, "driver"); ++ if (drvname) { ++ drv = bdrv_find_whitelisted_format(drvname, !(flags & BDRV_O_RDWR)); ++ qdict_del(options, "driver"); ++ } ++ + if (!drv) { + ret = find_image_format(file, filename, &drv); + } +diff --git a/blockdev.c b/blockdev.c +index bd33c17..1c9ca4d 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -322,7 +322,6 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + enum { MEDIA_DISK, MEDIA_CDROM } media; + int bus_id, unit_id; + int cyls, heads, secs, translation; +- BlockDriver *drv = NULL; + int max_devs; + int index; + int ro = 0; +@@ -338,6 +337,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + QemuOpts *opts; + QDict *bs_opts; + const char *id; ++ bool has_driver_specific_opts; + + translation = BIOS_ATA_TRANSLATION_AUTO; + media = MEDIA_DISK; +@@ -365,6 +365,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + qdict_del(bs_opts, "id"); + } + ++ has_driver_specific_opts = !!qdict_size(bs_opts); ++ + /* extract parameters */ + bus_id = qemu_opt_get_number(opts, "bus", 0); + unit_id = qemu_opt_get_number(opts, "unit", -1); +@@ -477,11 +479,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + error_printf("\n"); + return NULL; + } +- drv = bdrv_find_whitelisted_format(buf, ro); +- if (!drv) { +- error_report("'%s' invalid format", buf); +- return NULL; +- } ++ ++ qdict_put(bs_opts, "driver", qstring_from_str(buf)); + } + + /* disk I/O throttling */ +@@ -658,7 +657,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + abort(); + } + if (!file || !*file) { +- if (qdict_size(bs_opts)) { ++ if (has_driver_specific_opts) { + file = NULL; + } else { + return dinfo; +@@ -695,13 +694,13 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + error_report("warning: disabling copy_on_read on readonly drive"); + } + +- ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv); +- bs_opts = NULL; ++ QINCREF(bs_opts); ++ ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, NULL); + + if (ret < 0) { + if (ret == -EMEDIUMTYPE) { + error_report("could not open disk image %s: not in %s format", +- file ?: dinfo->id, drv->format_name); ++ file ?: dinfo->id, qdict_get_str(bs_opts, "driver")); + } else { + error_report("could not open disk image %s: %s", + file ?: dinfo->id, strerror(-ret)); +@@ -712,6 +711,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + if (bdrv_key_required(dinfo->bdrv)) + autostart = 0; + ++ QDECREF(bs_opts); + qemu_opts_del(opts); + + return dinfo; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Allow-wait_serialising_requests-at-any-point.patch b/SOURCES/kvm-block-Allow-wait_serialising_requests-at-any-point.patch new file mode 100644 index 0000000..cac1b19 --- /dev/null +++ b/SOURCES/kvm-block-Allow-wait_serialising_requests-at-any-point.patch @@ -0,0 +1,76 @@ +From 0bbe9e3a205c48c32f41ddd79292761cc625c747 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 13 Dec 2013 13:04:35 +0100 +Subject: [PATCH 23/37] block: Allow wait_serialising_requests() at any point + +Message-id: <1392117622-28812-24-git-send-email-kwolf@redhat.com> +Patchwork-id: 57188 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 23/37] block: Allow wait_serialising_requests() at any point +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +We can only have a single wait_serialising_requests() call per request +because otherwise we can run into deadlocks where requests are waiting +for each other. The same is true when wait_serialising_requests() is not +at the very beginning of a request, so that other requests can be issued +between the start of the tracking and wait_serialising_requests(). + +Fix this by changing wait_serialising_requests() to ignore requests that +are already (directly or indirectly) waiting for the calling request. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 6460440f34c709461b84375cfd8a86b27d433225) + +Conflicts: + include/block/block_int.h + +Conflicts because in RHEL 7 BdrvTrackedRequest is in block.c + +Signed-off-by: Kevin Wolf +--- + block.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) +--- + block.c | 15 ++++++++++++--- + 1 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/block.c b/block.c +index 94fd702..fd37037 100644 +--- a/block.c ++++ b/block.c +@@ -2047,6 +2047,8 @@ struct BdrvTrackedRequest { + QLIST_ENTRY(BdrvTrackedRequest) list; + Coroutine *co; /* owner, used for deadlock detection */ + CoQueue wait_queue; /* coroutines blocked on this request */ ++ ++ struct BdrvTrackedRequest *waiting_for; + }; + + /** +@@ -2176,9 +2178,16 @@ static void coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self) + */ + assert(qemu_coroutine_self() != req->co); + +- qemu_co_queue_wait(&req->wait_queue); +- retry = true; +- break; ++ /* If the request is already (indirectly) waiting for us, or ++ * will wait for us as soon as it wakes up, then just go on ++ * (instead of producing a deadlock in the former case). */ ++ if (!req->waiting_for) { ++ self->waiting_for = req; ++ qemu_co_queue_wait(&req->wait_queue); ++ self->waiting_for = NULL; ++ retry = true; ++ break; ++ } + } + } + } while (retry); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Allow-waiting-for-overlapping-requests-between.patch b/SOURCES/kvm-block-Allow-waiting-for-overlapping-requests-between.patch new file mode 100644 index 0000000..d5b3287 --- /dev/null +++ b/SOURCES/kvm-block-Allow-waiting-for-overlapping-requests-between.patch @@ -0,0 +1,174 @@ +From 971e56af33f89b4e11a2e6b07b389d729756b9ed Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 3 Dec 2013 14:55:55 +0100 +Subject: [PATCH 17/37] block: Allow waiting for overlapping requests between begin/end + +Message-id: <1392117622-28812-18-git-send-email-kwolf@redhat.com> +Patchwork-id: 57182 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 17/37] block: Allow waiting for overlapping requests between begin/end +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Previously, it was not possible to use wait_for_overlapping_requests() +between tracked_request_begin()/end() because it would wait for itself. + +Ignore the current request in the overlap check and run more of the +bdrv_co_do_preadv/pwritev code with a BdrvTrackedRequest present. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 65afd211c71fc91750d8a18f9604c1e57a5202fb) + +Conflicts: + block.c + +Conflicts because in RHEL 7 write notifiers don't exist. + +Signed-off-by: Kevin Wolf +--- + block.c | 36 +++++++++++++++++++----------------- + 1 file changed, 19 insertions(+), 17 deletions(-) +--- + block.c | 36 +++++++++++++++++++----------------- + 1 files changed, 19 insertions(+), 17 deletions(-) + +diff --git a/block.c b/block.c +index 09bb127..645bcd0 100644 +--- a/block.c ++++ b/block.c +@@ -2129,7 +2129,7 @@ static bool tracked_request_overlaps(BdrvTrackedRequest *req, + } + + static void coroutine_fn wait_for_overlapping_requests(BlockDriverState *bs, +- int64_t offset, unsigned int bytes) ++ BdrvTrackedRequest *self, int64_t offset, unsigned int bytes) + { + BdrvTrackedRequest *req; + int64_t cluster_offset; +@@ -2147,6 +2147,9 @@ static void coroutine_fn wait_for_overlapping_requests(BlockDriverState *bs, + do { + retry = false; + QLIST_FOREACH(req, &bs->tracked_requests, list) { ++ if (req == self) { ++ continue; ++ } + if (tracked_request_overlaps(req, cluster_offset, cluster_bytes)) { + /* Hitting this means there was a reentrant request, for + * example, a block driver issuing nested requests. This must +@@ -2744,10 +2747,10 @@ err: + * implemented by the caller. + */ + static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, +- int64_t offset, unsigned int bytes, QEMUIOVector *qiov, int flags) ++ BdrvTrackedRequest *req, int64_t offset, unsigned int bytes, ++ QEMUIOVector *qiov, int flags) + { + BlockDriver *drv = bs->drv; +- BdrvTrackedRequest req; + int ret; + + int64_t sector_num = offset >> BDRV_SECTOR_BITS; +@@ -2762,11 +2765,9 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + } + + if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, offset, bytes); ++ wait_for_overlapping_requests(bs, req, offset, bytes); + } + +- tracked_request_begin(&req, bs, offset, bytes, false); +- + if (flags & BDRV_REQ_COPY_ON_READ) { + int pnum; + +@@ -2813,8 +2814,6 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + } + + out: +- tracked_request_end(&req); +- + if (flags & BDRV_REQ_COPY_ON_READ) { + bs->copy_on_read_in_flight--; + } +@@ -2830,6 +2829,8 @@ static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs, + BdrvRequestFlags flags) + { + BlockDriver *drv = bs->drv; ++ BdrvTrackedRequest req; ++ + /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */ + uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment); + uint8_t *head_buf = NULL; +@@ -2880,9 +2881,11 @@ static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs, + bytes = ROUND_UP(bytes, align); + } + +- ret = bdrv_aligned_preadv(bs, offset, bytes, ++ tracked_request_begin(&req, bs, offset, bytes, false); ++ ret = bdrv_aligned_preadv(bs, &req, offset, bytes, + use_local_qiov ? &local_qiov : qiov, + flags); ++ tracked_request_end(&req); + + if (use_local_qiov) { + qemu_iovec_destroy(&local_qiov); +@@ -3001,10 +3004,10 @@ static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, + * Forwards an already correctly aligned write request to the BlockDriver. + */ + static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, +- int64_t offset, unsigned int bytes, QEMUIOVector *qiov, int flags) ++ BdrvTrackedRequest *req, int64_t offset, unsigned int bytes, ++ QEMUIOVector *qiov, int flags) + { + BlockDriver *drv = bs->drv; +- BdrvTrackedRequest req; + int ret; + + int64_t sector_num = offset >> BDRV_SECTOR_BITS; +@@ -3014,11 +3017,9 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + + if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, offset, bytes); ++ wait_for_overlapping_requests(bs, req, offset, bytes); + } + +- tracked_request_begin(&req, bs, offset, bytes, true); +- + if (flags & BDRV_REQ_ZERO_WRITE) { + ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags); + } else { +@@ -3040,8 +3041,6 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors); + } + +- tracked_request_end(&req); +- + return ret; + } + +@@ -3052,6 +3051,7 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + int64_t offset, unsigned int bytes, QEMUIOVector *qiov, + BdrvRequestFlags flags) + { ++ BdrvTrackedRequest req; + int ret; + + if (!bs->drv) { +@@ -3070,7 +3070,9 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + bdrv_io_limits_intercept(bs, true, bytes >> BDRV_SECTOR_BITS); + } + +- ret = bdrv_aligned_pwritev(bs, offset, bytes, qiov, flags); ++ tracked_request_begin(&req, bs, offset, bytes, true); ++ ret = bdrv_aligned_pwritev(bs, &req, offset, bytes, qiov, flags); ++ tracked_request_end(&req); + + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Always-enable-discard-on-the-protocol-level.patch b/SOURCES/kvm-block-Always-enable-discard-on-the-protocol-level.patch new file mode 100644 index 0000000..3848270 --- /dev/null +++ b/SOURCES/kvm-block-Always-enable-discard-on-the-protocol-level.patch @@ -0,0 +1,58 @@ +From c1a149658ffb385f55e8bb06f06b6d195b91fd1b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:03 +0200 +Subject: [PATCH 12/38] block: Always enable discard on the protocol level + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-13-git-send-email-kwolf@redhat.com> +Patchwork-id: 54196 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 12/32] block: Always enable discard on the protocol level +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Turning on discard options in qcow2 doesn't help a lot when the discard +requests that it issues are thrown away by the raw-posix layer. This +patch always enables discard functionality on the protocol level so that +it's the image format's responsibility to send (or not) discard +requests. Requests sent by the guest will be allowed or ignored by the +top level BlockDriverState, which depends on the discard=... option like +before. + +In particular, this means that even without specifying options, the +qcow2 default of discarding deleted snapshots actually takes effect now, +both for qemu and qemu-img. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 50b05b6f2e24296b4d739a638e1e7427767ed7cd) + +Signed-off-by: Kevin Wolf +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 2584ec7..20820fa 100644 +--- a/block.c ++++ b/block.c +@@ -1055,7 +1055,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + extract_subqdict(options, &file_options, "file."); + + ret = bdrv_file_open(&file, filename, file_options, +- bdrv_open_flags(bs, flags)); ++ bdrv_open_flags(bs, flags | BDRV_O_UNMAP)); + if (ret < 0) { + goto fail; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Assert-serialisation-assumptions-in-pwritev.patch b/SOURCES/kvm-block-Assert-serialisation-assumptions-in-pwritev.patch new file mode 100644 index 0000000..3e8c6a3 --- /dev/null +++ b/SOURCES/kvm-block-Assert-serialisation-assumptions-in-pwritev.patch @@ -0,0 +1,110 @@ +From e3fa109f29c42631c5f0f29e6f0167043fbd7a8d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 14 Jan 2014 11:41:35 +0100 +Subject: [PATCH 26/37] block: Assert serialisation assumptions in pwritev + +Message-id: <1392117622-28812-27-git-send-email-kwolf@redhat.com> +Patchwork-id: 57191 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 26/37] block: Assert serialisation assumptions in pwritev +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +If a request calls wait_serialising_requests() and actually has to wait +in this function (i.e. a coroutine yield), other requests can run and +previously read data (like the head or tail buffer) could become +outdated. In this case, we would have to restart from the beginning to +read in the updated data. + +However, we're lucky and don't actually need to do that: A request can +only wait in the first call of wait_serialising_requests() because we +mark it as serialising before that call, so any later requests would +wait. So as we don't wait in practice, we don't have to reload the data. + +This is an important assumption that may not be broken or data +corruption will happen. Document it with some assertions. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 28de2dcd88de31f50bbd43d9c2fcb046c3a727cb) + +Signed-off-by: Kevin Wolf +--- + block.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) +--- + block.c | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/block.c b/block.c +index 9eeb072..76de7d2 100644 +--- a/block.c ++++ b/block.c +@@ -2153,14 +2153,15 @@ static bool tracked_request_overlaps(BdrvTrackedRequest *req, + return true; + } + +-static void coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self) ++static bool coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self) + { + BlockDriverState *bs = self->bs; + BdrvTrackedRequest *req; + bool retry; ++ bool waited = false; + + if (!bs->serialising_in_flight) { +- return; ++ return false; + } + + do { +@@ -2186,11 +2187,14 @@ static void coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self) + qemu_co_queue_wait(&req->wait_queue); + self->waiting_for = NULL; + retry = true; ++ waited = true; + break; + } + } + } + } while (retry); ++ ++ return waited; + } + + /* +@@ -3036,6 +3040,7 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + QEMUIOVector *qiov, int flags) + { + BlockDriver *drv = bs->drv; ++ bool waited; + int ret; + + int64_t sector_num = offset >> BDRV_SECTOR_BITS; +@@ -3044,7 +3049,8 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0); + assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + +- wait_serialising_requests(req); ++ waited = wait_serialising_requests(req); ++ assert(!waited || !req->serialising); + + if (flags & BDRV_REQ_ZERO_WRITE) { + ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags); +@@ -3142,9 +3148,11 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + QEMUIOVector tail_qiov; + struct iovec tail_iov; + size_t tail_bytes; ++ bool waited; + + mark_request_serialising(&req, align); +- wait_serialising_requests(&req); ++ waited = wait_serialising_requests(&req); ++ assert(!waited || !use_local_qiov); + + tail_buf = qemu_blockalign(bs, align); + tail_iov = (struct iovec) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Avoid-unecessary-drv-bdrv_getlength-calls.patch b/SOURCES/kvm-block-Avoid-unecessary-drv-bdrv_getlength-calls.patch new file mode 100644 index 0000000..04c4472 --- /dev/null +++ b/SOURCES/kvm-block-Avoid-unecessary-drv-bdrv_getlength-calls.patch @@ -0,0 +1,166 @@ +From 4308c37b2fdabc82803dc9d2d521f564e2f34807 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 20 Nov 2013 09:16:43 +0100 +Subject: [PATCH 04/14] block: Avoid unecessary drv->bdrv_getlength() calls + +RH-Author: Fam Zheng +Message-id: <1384939004-30831-2-git-send-email-famz@redhat.com> +Patchwork-id: 55784 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/2] block: Avoid unecessary drv->bdrv_getlength() calls +Bugzilla: 1025138 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +The block layer generally keeps the size of an image cached in +bs->total_sectors so that it doesn't have to perform expensive +operations to get the size whenever it needs it. + +This doesn't work however when using a backend that can change its size +without qemu being aware of it, i.e. passthrough of removable media like +CD-ROMs or floppy disks. For this reason, the caching is disabled when a +removable device is used. + +It is obvious that checking whether the _guest_ device has removable +media isn't the right thing to do when we want to know whether the size +of the host backend can change. To make things worse, non-top-level +BlockDriverStates never have any device attached, which makes qemu +assume they are removable, so drv->bdrv_getlength() is always called on +the protocol layer. In the case of raw-posix, this causes unnecessary +lseek() system calls, which turned out to be rather expensive. + +This patch completely changes the logic and disables bs->total_sectors +caching only for certain block driver types, for which a size change is +expected: host_cdrom and host_floppy on POSIX, host_device on win32; also +the raw format in case it sits on top of one of these protocols, but in +the common case the nested bdrv_getlength() call on the protocol driver +will use the cache again and avoid an expensive drv->bdrv_getlength() +call. + +Signed-off-by: Kevin Wolf +Reviewed-by: Paolo Bonzini +(cherry picked from commit b94a2610573cd9314f244207c8b04cb75e42d7f8) + +Conflicts: + block/raw_bsd.c + +Conflict because only have block/raw.c. + +Signed-off-by: Fam Zheng +--- + block.c | 7 ++++--- + block/raw-posix.c | 9 ++++++--- + block/raw-win32.c | 4 +++- + block/raw.c | 1 + + include/block/block_int.h | 3 +++ + 5 files changed, 17 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 7 ++++--- + block/raw-posix.c | 9 ++++++--- + block/raw-win32.c | 4 +++- + block/raw.c | 1 + + include/block/block_int.h | 3 +++ + 5 files changed, 17 insertions(+), 7 deletions(-) + +diff --git a/block.c b/block.c +index 6913799..301c4fb 100644 +--- a/block.c ++++ b/block.c +@@ -2838,9 +2838,10 @@ int64_t bdrv_getlength(BlockDriverState *bs) + if (!drv) + return -ENOMEDIUM; + +- if (bdrv_dev_has_removable_media(bs)) { +- if (drv->bdrv_getlength) { +- return drv->bdrv_getlength(bs); ++ if (drv->has_variable_length) { ++ int ret = refresh_total_sectors(bs, bs->total_sectors); ++ if (ret < 0) { ++ return ret; + } + } + return bs->total_sectors * BDRV_SECTOR_SIZE; +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 74b15da..eae1b40 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1718,7 +1718,8 @@ static BlockDriver bdrv_host_floppy = { + .bdrv_aio_flush = raw_aio_flush, + + .bdrv_truncate = raw_truncate, +- .bdrv_getlength = raw_getlength, ++ .bdrv_getlength = raw_getlength, ++ .has_variable_length = true, + .bdrv_get_allocated_file_size + = raw_get_allocated_file_size, + +@@ -1827,7 +1828,8 @@ static BlockDriver bdrv_host_cdrom = { + .bdrv_aio_flush = raw_aio_flush, + + .bdrv_truncate = raw_truncate, +- .bdrv_getlength = raw_getlength, ++ .bdrv_getlength = raw_getlength, ++ .has_variable_length = true, + .bdrv_get_allocated_file_size + = raw_get_allocated_file_size, + +@@ -1954,7 +1956,8 @@ static BlockDriver bdrv_host_cdrom = { + .bdrv_aio_flush = raw_aio_flush, + + .bdrv_truncate = raw_truncate, +- .bdrv_getlength = raw_getlength, ++ .bdrv_getlength = raw_getlength, ++ .has_variable_length = true, + .bdrv_get_allocated_file_size + = raw_get_allocated_file_size, + +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 3e0251f..584790f 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -618,7 +618,9 @@ static BlockDriver bdrv_host_device = { + .bdrv_aio_writev = raw_aio_writev, + .bdrv_aio_flush = raw_aio_flush, + +- .bdrv_getlength = raw_getlength, ++ .bdrv_getlength = raw_getlength, ++ .has_variable_length = true, ++ + .bdrv_get_allocated_file_size + = raw_get_allocated_file_size, + }; +diff --git a/block/raw.c b/block/raw.c +index 66eda91..e1ed8cc 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -151,6 +151,7 @@ static BlockDriver bdrv_raw = { + + .bdrv_probe = raw_probe, + .bdrv_getlength = raw_getlength, ++ .has_variable_length = true, + .bdrv_truncate = raw_truncate, + + .bdrv_is_inserted = raw_is_inserted, +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 0dbc34f..54708c6 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -151,8 +151,11 @@ struct BlockDriver { + + const char *protocol_name; + int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset); ++ + int64_t (*bdrv_getlength)(BlockDriverState *bs); ++ bool has_variable_length; + int64_t (*bdrv_get_allocated_file_size)(BlockDriverState *bs); ++ + int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Bugfix-format-and-snapshot-used-in-drive-optio.patch b/SOURCES/kvm-block-Bugfix-format-and-snapshot-used-in-drive-optio.patch new file mode 100644 index 0000000..68720fb --- /dev/null +++ b/SOURCES/kvm-block-Bugfix-format-and-snapshot-used-in-drive-optio.patch @@ -0,0 +1,89 @@ +From 3cae2bf94bf3ef300facbd31214dbeae7b2ad7b7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:31:57 +0100 +Subject: [PATCH 04/87] block: Bugfix 'format' and 'snapshot' used in drive option + +RH-Author: Max Reitz +Message-id: <1383604354-12743-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 55306 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 06/43] block: Bugfix 'format' and 'snapshot' used in drive option +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Mike Qiu + +BZ: 1026524 + +When use -drive file='xxx',format=qcow2,snapshot=on the error +message "Can't use snapshot=on with driver-specific options" +can be show, and fail to start the qemu. + +This should not be happened, and there is no file.driver option +in qemu command line. + +It is because the commit 74fe54f2a1b5c4f4498a8fe521e1dfc936656cd4, +it puts 'driver' option if the command line use 'format' option. + +This patch is to solve this bug. + +Signed-off-by: Mike Qiu +Signed-off-by: Kevin Wolf +(cherry picked from commit 6db5f5d68e2ffc430ba0511e23fc36c7363510f1) + +Signed-off-by: Max Reitz +--- + blockdev.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 12 +++++++++--- + 1 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 6710f61..a6563fa 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -342,6 +342,7 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + QDict *bs_opts; + const char *id; + bool has_driver_specific_opts; ++ BlockDriver *drv = NULL; + + translation = BIOS_ATA_TRANSLATION_AUTO; + media = MEDIA_DISK; +@@ -487,7 +488,11 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + return NULL; + } + +- qdict_put(bs_opts, "driver", qstring_from_str(buf)); ++ drv = bdrv_find_whitelisted_format(buf, ro); ++ if (!drv) { ++ error_report("'%s' invalid format", buf); ++ return NULL; ++ } + } + + /* disk I/O throttling */ +@@ -702,12 +707,13 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + } + + QINCREF(bs_opts); +- ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, NULL); ++ ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv); + + if (ret < 0) { + if (ret == -EMEDIUMTYPE) { + error_report("could not open disk image %s: not in %s format", +- file ?: dinfo->id, qdict_get_str(bs_opts, "driver")); ++ file ?: dinfo->id, drv ? drv->format_name : ++ qdict_get_str(bs_opts, "driver")); + } else { + error_report("could not open disk image %s: %s", + file ?: dinfo->id, strerror(-ret)); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Catch-bs-drv-in-bdrv_check.patch b/SOURCES/kvm-block-Catch-bs-drv-in-bdrv_check.patch new file mode 100644 index 0000000..0bada8d --- /dev/null +++ b/SOURCES/kvm-block-Catch-bs-drv-in-bdrv_check.patch @@ -0,0 +1,48 @@ +From c7d5655eea99e3a62075c5ca067a6d8f670ddf9d Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:00 +0200 +Subject: [PATCH 06/42] block: Catch !bs->drv in bdrv_check() + +Message-id: <1434212556-3927-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 66025 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 06/42] block: Catch !bs->drv in bdrv_check() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +qemu-img check calls bdrv_check() twice if the first run repaired some +inconsistencies. If the first run however again triggered corruption +prevention (on qcow2) due to very bad inconsistencies, bs->drv may be +NULL afterwards. Thus, bdrv_check() should check whether bs->drv is set. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 908bcd540f489f7adf2d804347905b0025d808d3) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/block.c b/block.c +index caea2ea..1afa544 100644 +--- a/block.c ++++ b/block.c +@@ -1998,6 +1998,9 @@ bool bdrv_dev_is_medium_locked(BlockDriverState *bs) + */ + int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix) + { ++ if (bs->drv == NULL) { ++ return -ENOMEDIUM; ++ } + if (bs->drv->bdrv_check == NULL) { + return -ENOTSUP; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Catch-duplicate-IDs-in-bdrv_new.patch b/SOURCES/kvm-block-Catch-duplicate-IDs-in-bdrv_new.patch new file mode 100644 index 0000000..937aff0 --- /dev/null +++ b/SOURCES/kvm-block-Catch-duplicate-IDs-in-bdrv_new.patch @@ -0,0 +1,123 @@ +From 48398d9b96fa334e8c0e626d99cf2df8f4a5c664 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:11 +0200 +Subject: [PATCH 08/19] block: Catch duplicate IDs in bdrv_new() + +Message-id: <1414059011-15516-9-git-send-email-kwolf@redhat.com> +Patchwork-id: 61840 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 8/8] block: Catch duplicate IDs in bdrv_new() +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Since commit f298d071, block devices added with blockdev-add don't have +a QemuOpts around in dinfo->opts. Consequently, we can't rely any more +on QemuOpts catching duplicate IDs for block devices. + +This patch adds a new check for duplicate IDs to bdrv_new(), and moves +the existing check that the ID isn't already taken for a node-name there +as well. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit f2d953ec31eeeb3029ca915a55938c538a14efa8) + +In RHEL 7, node names don't exist yet, so only check the ID. + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + block.c | 6 ++++++ + tests/qemu-iotests/087 | 33 +++++++++++++++++++++++++++++++++ + tests/qemu-iotests/087.out | 13 +++++++++++++ + 3 files changed, 52 insertions(+) + +diff --git a/block.c b/block.c +index eb0810e..d7b6376 100644 +--- a/block.c ++++ b/block.c +@@ -304,6 +304,12 @@ BlockDriverState *bdrv_new(const char *device_name, Error **errp) + { + BlockDriverState *bs; + ++ if (bdrv_find(device_name)) { ++ error_setg(errp, "Device with id '%s' already exists", ++ device_name); ++ return NULL; ++ } ++ + bs = g_malloc0(sizeof(BlockDriverState)); + pstrcpy(bs->device_name, sizeof(bs->device_name), device_name); + if (device_name[0] != '\0') { +diff --git a/tests/qemu-iotests/087 b/tests/qemu-iotests/087 +index 53b6c43..f2fb3f4 100755 +--- a/tests/qemu-iotests/087 ++++ b/tests/qemu-iotests/087 +@@ -73,6 +73,39 @@ run_qemu < +Date: Thu, 5 Dec 2013 12:09:38 +0100 +Subject: [PATCH 27/37] block: Change coroutine wrapper to byte granularity + +Message-id: <1392117622-28812-28-git-send-email-kwolf@redhat.com> +Patchwork-id: 57192 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 27/37] block: Change coroutine wrapper to byte granularity +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 775aa8b6e0ea25f8cca74d0fcb1e30a764cf624f) + +Signed-off-by: Kevin Wolf +--- + block.c | 48 ++++++++++++++++++++++++++---------------------- + 1 file changed, 26 insertions(+), 22 deletions(-) +--- + block.c | 48 ++++++++++++++++++++++++++---------------------- + 1 files changed, 26 insertions(+), 22 deletions(-) + +diff --git a/block.c b/block.c +index 76de7d2..3b5b706 100644 +--- a/block.c ++++ b/block.c +@@ -64,11 +64,11 @@ static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs, + static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, + QEMUIOVector *iov); +-static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, QEMUIOVector *qiov, + BdrvRequestFlags flags); +-static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, QEMUIOVector *qiov, + BdrvRequestFlags flags); + static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs, + int64_t sector_num, +@@ -2404,8 +2404,7 @@ static int bdrv_check_request(BlockDriverState *bs, int64_t sector_num, + + typedef struct RwCo { + BlockDriverState *bs; +- int64_t sector_num; +- int nb_sectors; ++ int64_t offset; + QEMUIOVector *qiov; + bool is_write; + int ret; +@@ -2417,34 +2416,32 @@ static void coroutine_fn bdrv_rw_co_entry(void *opaque) + RwCo *rwco = opaque; + + if (!rwco->is_write) { +- rwco->ret = bdrv_co_do_readv(rwco->bs, rwco->sector_num, +- rwco->nb_sectors, rwco->qiov, +- rwco->flags); +- } else { +- rwco->ret = bdrv_co_do_writev(rwco->bs, rwco->sector_num, +- rwco->nb_sectors, rwco->qiov, ++ rwco->ret = bdrv_co_do_preadv(rwco->bs, rwco->offset, ++ rwco->qiov->size, rwco->qiov, + rwco->flags); ++ } else { ++ rwco->ret = bdrv_co_do_pwritev(rwco->bs, rwco->offset, ++ rwco->qiov->size, rwco->qiov, ++ rwco->flags); + } + } + + /* + * Process a vectored synchronous request using coroutines + */ +-static int bdrv_rwv_co(BlockDriverState *bs, int64_t sector_num, +- QEMUIOVector *qiov, bool is_write, +- BdrvRequestFlags flags) ++static int bdrv_prwv_co(BlockDriverState *bs, int64_t offset, ++ QEMUIOVector *qiov, bool is_write, ++ BdrvRequestFlags flags) + { + Coroutine *co; + RwCo rwco = { + .bs = bs, +- .sector_num = sector_num, +- .nb_sectors = qiov->size >> BDRV_SECTOR_BITS, ++ .offset = offset, + .qiov = qiov, + .is_write = is_write, + .ret = NOT_DONE, + .flags = flags, + }; +- assert((qiov->size & (BDRV_SECTOR_SIZE - 1)) == 0); + + /** + * In sync call context, when the vcpu is blocked, this throttling timer +@@ -2483,7 +2480,8 @@ static int bdrv_rw_co(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, + }; + + qemu_iovec_init_external(&qiov, &iov, 1); +- return bdrv_rwv_co(bs, sector_num, &qiov, is_write, flags); ++ return bdrv_prwv_co(bs, sector_num << BDRV_SECTOR_BITS, ++ &qiov, is_write, flags); + } + + /* return < 0 if error. See bdrv_write() for the return codes */ +@@ -2521,7 +2519,7 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, + + int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov) + { +- return bdrv_rwv_co(bs, sector_num, qiov, true, 0); ++ return bdrv_prwv_co(bs, sector_num << BDRV_SECTOR_BITS, qiov, true, 0); + } + + int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, +@@ -4793,9 +4791,15 @@ int bdrv_flush(BlockDriverState *bs) + return rwco.ret; + } + ++typedef struct DiscardCo { ++ BlockDriverState *bs; ++ int64_t sector_num; ++ int nb_sectors; ++ int ret; ++} DiscardCo; + static void coroutine_fn bdrv_discard_co_entry(void *opaque) + { +- RwCo *rwco = opaque; ++ DiscardCo *rwco = opaque; + + rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors); + } +@@ -4881,7 +4885,7 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, + int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors) + { + Coroutine *co; +- RwCo rwco = { ++ DiscardCo rwco = { + .bs = bs, + .sector_num = sector_num, + .nb_sectors = nb_sectors, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Detect-unaligned-length-in-bdrv_qiov_is_aligne.patch b/SOURCES/kvm-block-Detect-unaligned-length-in-bdrv_qiov_is_aligne.patch new file mode 100644 index 0000000..930728f --- /dev/null +++ b/SOURCES/kvm-block-Detect-unaligned-length-in-bdrv_qiov_is_aligne.patch @@ -0,0 +1,47 @@ +From 3015984eb6778214d381cf7de32d8ab81e277728 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 5 Dec 2013 13:01:46 +0100 +Subject: [PATCH 07/37] block: Detect unaligned length in bdrv_qiov_is_aligned() + +Message-id: <1392117622-28812-8-git-send-email-kwolf@redhat.com> +Patchwork-id: 57172 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 07/37] block: Detect unaligned length in bdrv_qiov_is_aligned() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +For an O_DIRECT request to succeed, it's not only necessary that all +base addresses in the qiov are aligned, but also that each length in it +is aligned. + +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +(cherry picked from commit 1ff735bdc417945bc6df1857861b127644b3f461) + +Signed-off-by: Kevin Wolf +--- + block.c | 3 +++ + 1 file changed, 3 insertions(+) +--- + block.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index f62acbd..6c98ff7 100644 +--- a/block.c ++++ b/block.c +@@ -4743,6 +4743,9 @@ bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov) + if ((uintptr_t) qiov->iov[i].iov_base % bs->buffer_alignment) { + return false; + } ++ if (qiov->iov[i].iov_len % bs->buffer_alignment) { ++ return false; ++ } + } + + return true; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Disable-BDRV_O_COPY_ON_READ-for-the-backing-fi.patch b/SOURCES/kvm-block-Disable-BDRV_O_COPY_ON_READ-for-the-backing-fi.patch new file mode 100644 index 0000000..62993de --- /dev/null +++ b/SOURCES/kvm-block-Disable-BDRV_O_COPY_ON_READ-for-the-backing-fi.patch @@ -0,0 +1,57 @@ +From 01a2d73852aa716e9e57ca9726f967f5e801d6f5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:18 +0100 +Subject: [PATCH 65/87] block: Disable BDRV_O_COPY_ON_READ for the backing file + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-25-git-send-email-kwolf@redhat.com> +Patchwork-id: 55403 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 24/24] block: Disable BDRV_O_COPY_ON_READ for the backing file +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +From: Thibaut LAURENT + +Since commit 0ebd24e0a203cf2852c310b59fbe050190dc6c8c, +bdrv_open_common will throw an error when trying to open a file +read-only with the BDRV_O_COPY_ON_READ flag set. +Although BDRV_O_RDWR is unset for the backing files, +BDRV_O_COPY_ON_READ is still passed on if copy-on-read was requested +for the drive. Let's unset this flag too before opening the backing +file, or bdrv_open_common will fail. + +Signed-off-by: Thibaut LAURENT +Reviewed-by: Benoit Canet +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 87a5debd3161d24a7d4c685e3c0d8765b5d92a74) + +Signed-off-by: Kevin Wolf +--- + block.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 01c11ee..beeb600 100644 +--- a/block.c ++++ b/block.c +@@ -968,7 +968,8 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + } + + /* backing files always opened read-only */ +- back_flags = bs->open_flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT); ++ back_flags = bs->open_flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | ++ BDRV_O_COPY_ON_READ); + + ret = bdrv_open(bs->backing_hd, + *backing_filename ? backing_filename : NULL, options, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Don-t-call-ROUND_UP-with-negative-values.patch b/SOURCES/kvm-block-Don-t-call-ROUND_UP-with-negative-values.patch new file mode 100644 index 0000000..f46646a --- /dev/null +++ b/SOURCES/kvm-block-Don-t-call-ROUND_UP-with-negative-values.patch @@ -0,0 +1,46 @@ +From d133282ff639fd022fe64172f89b203cf8669114 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 7 Feb 2014 16:00:09 +0100 +Subject: [PATCH 37/37] block: Don't call ROUND_UP with negative values + +Message-id: <1392117622-28812-37-git-send-email-kwolf@redhat.com> +Patchwork-id: 57201 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 37/37] block: Don't call ROUND_UP with negative values +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +The behaviour of the ROUND_UP macro with negative numbers isn't obvious. +It happens to do the right thing in this please, but better avoid it. + +Suggested-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Reviewed-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) +--- + block.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index b878c8b..1b57236 100644 +--- a/block.c ++++ b/block.c +@@ -2760,8 +2760,8 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + } + + total_sectors = DIV_ROUND_UP(len, BDRV_SECTOR_SIZE); +- max_nb_sectors = MAX(0, ROUND_UP(total_sectors - sector_num, +- align >> BDRV_SECTOR_BITS)); ++ max_nb_sectors = ROUND_UP(MAX(0, total_sectors - sector_num), ++ align >> BDRV_SECTOR_BITS); + if (max_nb_sectors > 0) { + ret = drv->bdrv_co_readv(bs, sector_num, + MIN(nb_sectors, max_nb_sectors), qiov); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Don-t-copy-backing-file-name-on-error.patch b/SOURCES/kvm-block-Don-t-copy-backing-file-name-on-error.patch new file mode 100644 index 0000000..69a9786 --- /dev/null +++ b/SOURCES/kvm-block-Don-t-copy-backing-file-name-on-error.patch @@ -0,0 +1,68 @@ +From b0f9197ca9efa3768253bfab3b938d06e1d2abc1 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 7 Nov 2013 11:19:18 +0100 +Subject: [PATCH 66/87] block: Don't copy backing file name on error + +RH-Author: Kevin Wolf +Message-id: <1383823158-8741-1-git-send-email-kwolf@redhat.com> +Patchwork-id: 55596 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 25/24] block: Don't copy backing file name on error +Bugzilla: 978402 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +From: Max Reitz + +bdrv_open_backing_file() tries to copy the backing file name using +pstrcpy directly after calling bdrv_open() to open the backing file +without checking whether that was actually successful. If it was not, +ps->backing_hd->file will probably be NULL and qemu will crash. + +Fix this by moving pstrcpy after checking whether bdrv_open() succeeded. + +Signed-off-by: Max Reitz +Reviewed-by: Benoit Canet +Reviewed-by: Amos Kong +Signed-off-by: Kevin Wolf +(cherry picked from commit 61ed2684539f7f31304e193d7c0e68d57ce6be88) + +Signed-off-by: Kevin Wolf +--- + +Brewing as: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6541865 + +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index beeb600..dccdb2c 100644 +--- a/block.c ++++ b/block.c +@@ -974,8 +974,6 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + ret = bdrv_open(bs->backing_hd, + *backing_filename ? backing_filename : NULL, options, + back_flags, back_drv, &local_err); +- pstrcpy(bs->backing_file, sizeof(bs->backing_file), +- bs->backing_hd->file->filename); + if (ret < 0) { + bdrv_delete(bs->backing_hd); + bs->backing_hd = NULL; +@@ -983,6 +981,8 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + error_propagate(errp, local_err); + return ret; + } ++ pstrcpy(bs->backing_file, sizeof(bs->backing_file), ++ bs->backing_hd->file->filename); + return 0; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Don-t-parse-protocol-from-file.filename.patch b/SOURCES/kvm-block-Don-t-parse-protocol-from-file.filename.patch new file mode 100644 index 0000000..031fb67 --- /dev/null +++ b/SOURCES/kvm-block-Don-t-parse-protocol-from-file.filename.patch @@ -0,0 +1,218 @@ +From 8f9ad0991d9dd978f342ff4dcc58a18d8f1a73c4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:58 +0200 +Subject: [PATCH 07/38] block: Don't parse protocol from file.filename + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-8-git-send-email-kwolf@redhat.com> +Patchwork-id: 54194 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 07/32] block: Don't parse protocol from file.filename +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +One of the major reasons for doing something new for -blockdev and +blockdev-add was that the old block layer code parses filenames instead +of just taking them literally. So we should really leave it untouched +when it's passing using the new interfaces (like -drive +file.filename=...). + +This allows opening relative file names that contain a colon. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 98289620e0460fa595581020ab20127da4a2fc44) + +Signed-off-by: Kevin Wolf +--- + block.c | 17 ++++++++++++----- + block/sheepdog.c | 2 +- + include/block/block.h | 3 ++- + qemu-img.c | 4 ++-- + tests/qemu-iotests/051 | 12 ++++++++++++ + tests/qemu-iotests/051.out | 14 ++++++++++++++ + 6 files changed, 43 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 17 ++++++++++++----- + block/sheepdog.c | 2 +- + include/block/block.h | 3 ++- + qemu-img.c | 4 ++-- + tests/qemu-iotests/051 | 12 ++++++++++++ + tests/qemu-iotests/051.out | 14 ++++++++++++++ + 6 files changed, 43 insertions(+), 9 deletions(-) + +diff --git a/block.c b/block.c +index 3c869e4..2584ec7 100644 +--- a/block.c ++++ b/block.c +@@ -419,7 +419,7 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options) + { + BlockDriver *drv; + +- drv = bdrv_find_protocol(filename); ++ drv = bdrv_find_protocol(filename, true); + if (drv == NULL) { + return -ENOENT; + } +@@ -484,7 +484,8 @@ static BlockDriver *find_hdev_driver(const char *filename) + return drv; + } + +-BlockDriver *bdrv_find_protocol(const char *filename) ++BlockDriver *bdrv_find_protocol(const char *filename, ++ bool allow_protocol_prefix) + { + BlockDriver *drv1; + char protocol[128]; +@@ -505,9 +506,10 @@ BlockDriver *bdrv_find_protocol(const char *filename) + return drv1; + } + +- if (!path_has_protocol(filename)) { ++ if (!path_has_protocol(filename) || !allow_protocol_prefix) { + return bdrv_find_format("file"); + } ++ + p = strchr(filename, ':'); + assert(p != NULL); + len = p - filename; +@@ -786,6 +788,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + BlockDriverState *bs; + BlockDriver *drv; + const char *drvname; ++ bool allow_protocol_prefix = false; + int ret; + + /* NULL means an empty set of options */ +@@ -802,6 +805,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + filename = qdict_get_try_str(options, "filename"); + } else if (filename && !qdict_haskey(options, "filename")) { + qdict_put(options, "filename", qstring_from_str(filename)); ++ allow_protocol_prefix = true; + } else { + qerror_report(ERROR_CLASS_GENERIC_ERROR, "Can't specify 'file' and " + "'filename' options at the same time"); +@@ -815,7 +819,10 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + drv = bdrv_find_whitelisted_format(drvname, !(flags & BDRV_O_RDWR)); + qdict_del(options, "driver"); + } else if (filename) { +- drv = bdrv_find_protocol(filename); ++ drv = bdrv_find_protocol(filename, allow_protocol_prefix); ++ if (!drv) { ++ qerror_report(ERROR_CLASS_GENERIC_ERROR, "Unknown protocol"); ++ } + } else { + qerror_report(ERROR_CLASS_GENERIC_ERROR, + "Must specify either driver or file"); +@@ -4770,7 +4777,7 @@ void bdrv_img_create(const char *filename, const char *fmt, + return; + } + +- proto_drv = bdrv_find_protocol(filename); ++ proto_drv = bdrv_find_protocol(filename, true); + if (!proto_drv) { + error_setg(errp, "Unknown protocol '%s'", filename); + return; +diff --git a/block/sheepdog.c b/block/sheepdog.c +index 21a4edf..2758c26 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -1510,7 +1510,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options) + BlockDriver *drv; + + /* Currently, only Sheepdog backing image is supported. */ +- drv = bdrv_find_protocol(backing_file); ++ drv = bdrv_find_protocol(backing_file, true); + if (!drv || strcmp(drv->protocol_name, "sheepdog") != 0) { + error_report("backing_file must be a sheepdog image"); + ret = -EINVAL; +diff --git a/include/block/block.h b/include/block/block.h +index db7bc4f..174295b 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -122,7 +122,8 @@ bool bdrv_io_limits_enabled(BlockDriverState *bs); + + void bdrv_init(void); + void bdrv_init_with_whitelist(void); +-BlockDriver *bdrv_find_protocol(const char *filename); ++BlockDriver *bdrv_find_protocol(const char *filename, ++ bool allow_protocol_prefix); + BlockDriver *bdrv_find_format(const char *format_name); + BlockDriver *bdrv_find_whitelisted_format(const char *format_name, + bool readonly); +diff --git a/qemu-img.c b/qemu-img.c +index 673d80f..3b11414 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -238,7 +238,7 @@ static int print_block_option_help(const char *filename, const char *fmt) + return 1; + } + +- proto_drv = bdrv_find_protocol(filename); ++ proto_drv = bdrv_find_protocol(filename, true); + if (!proto_drv) { + error_report("Unknown protocol '%s'", filename); + return 1; +@@ -1261,7 +1261,7 @@ static int img_convert(int argc, char **argv) + goto out; + } + +- proto_drv = bdrv_find_protocol(out_filename); ++ proto_drv = bdrv_find_protocol(out_filename, true); + if (!proto_drv) { + error_report("Unknown protocol '%s'", out_filename); + ret = -1; +diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051 +index 8039e23..1cf8bf7 100755 +--- a/tests/qemu-iotests/051 ++++ b/tests/qemu-iotests/051 +@@ -149,6 +149,18 @@ echo + run_qemu -drive file=$TEST_IMG,file.driver=file + run_qemu -drive file=$TEST_IMG,file.driver=qcow2 + ++echo ++echo === Parsing protocol from file name === ++echo ++ ++# Protocol strings are supposed to be parsed from traditional option strings, ++# but not when using driver-specific options. We can distinguish them by the ++# error message for non-existing files. ++ ++run_qemu -hda foo:bar ++run_qemu -drive file=foo:bar ++run_qemu -drive file.filename=foo:bar ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 3d1ac7b..6b3d636 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -169,4 +169,18 @@ Testing: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2 + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: Can't use 'qcow2' as a block driver for the protocol level + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: could not open disk image TEST_DIR/t.qcow2: Invalid argument + ++ ++=== Parsing protocol from file name === ++ ++Testing: -hda foo:bar ++QEMU_PROG: -hda foo:bar: Unknown protocol ++QEMU_PROG: -hda foo:bar: could not open disk image foo:bar: No such file or directory ++ ++Testing: -drive file=foo:bar ++QEMU_PROG: -drive file=foo:bar: Unknown protocol ++QEMU_PROG: -drive file=foo:bar: could not open disk image foo:bar: No such file or directory ++ ++Testing: -drive file.filename=foo:bar ++QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: No such file or directory ++ + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Don-t-probe-for-unknown-backing-file-format.patch b/SOURCES/kvm-block-Don-t-probe-for-unknown-backing-file-format.patch new file mode 100644 index 0000000..c77ffc3 --- /dev/null +++ b/SOURCES/kvm-block-Don-t-probe-for-unknown-backing-file-format.patch @@ -0,0 +1,203 @@ +From a0f50f0877463e9370ffa411bd826d7c704ab9fe Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:30 +0200 +Subject: [PATCH 36/42] block: Don't probe for unknown backing file format + +Message-id: <1434212556-3927-37-git-send-email-mreitz@redhat.com> +Patchwork-id: 66055 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 36/42] block: Don't probe for unknown backing file format +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +If a qcow2 image specifies a backing file format that doesn't correspond +to any format driver that qemu knows, we shouldn't fall back to probing, +but simply error out. + +Not looking up the backing file driver in bdrv_open_backing_file(), but +just filling in the "driver" option if it isn't there moves us closer to +the goal of having everything in QDict options and gets us the error +handling of bdrv_open(), which correctly refuses unknown drivers. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Message-id: 1416935562-7760-4-git-send-email-kwolf@redhat.com +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit c5f6e493bb5339d244eae5d3f21c5b6d73996739) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block.c + tests/qemu-iotests/114.out + +Downstream is missing a check whether the driver specified by the +"driver" option is actually valid (if it is not, it will be probed +anyway); this check is introduced upstream by +17b005f1d422d4581f8ce95b75d603deb081f4f3, but that commit has a couple +of dependencies and relies on a code path that is very different from +downstream (e.g. not bdrv_file_open() anymore). So I just introduced the +check in this patch. + +Also, the different code paths upstream and downstream result in the +error message missing the "Could not open backing file:" part, which +means that 114.out has to be fixed up. + +Signed-off-by: Max Reitz +--- + block.c | 12 ++++++--- + tests/qemu-iotests/114 | 61 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/114.out | 13 ++++++++++ + tests/qemu-iotests/group | 1 + + 4 files changed, 83 insertions(+), 4 deletions(-) + create mode 100755 tests/qemu-iotests/114 + create mode 100644 tests/qemu-iotests/114.out + +diff --git a/block.c b/block.c +index fa6e192..e36fa2f 100644 +--- a/block.c ++++ b/block.c +@@ -1010,7 +1010,6 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + { + char backing_filename[PATH_MAX]; + int back_flags, ret; +- BlockDriver *back_drv = NULL; + Error *local_err = NULL; + + if (bs->backing_hd != NULL) { +@@ -1036,8 +1035,8 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + + bs->backing_hd = bdrv_new("", &error_abort); + +- if (bs->backing_format[0] != '\0') { +- back_drv = bdrv_find_format(bs->backing_format); ++ if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) { ++ qdict_put(options, "driver", qstring_from_str(bs->backing_format)); + } + + /* backing files always opened read-only */ +@@ -1046,7 +1045,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + + ret = bdrv_open(bs->backing_hd, + *backing_filename ? backing_filename : NULL, options, +- back_flags, back_drv, &local_err); ++ back_flags, NULL, &local_err); + if (ret < 0) { + bdrv_unref(bs->backing_hd); + bs->backing_hd = NULL; +@@ -1244,6 +1243,11 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + if (drvname) { + drv = bdrv_find_format(drvname); + qdict_del(options, "driver"); ++ if (!drv) { ++ error_setg(errp, "Unknown driver '%s'", drvname); ++ ret = -EINVAL; ++ goto unlink_and_fail; ++ } + } + + if (!drv) { +diff --git a/tests/qemu-iotests/114 b/tests/qemu-iotests/114 +new file mode 100755 +index 0000000..d02e7ff +--- /dev/null ++++ b/tests/qemu-iotests/114 +@@ -0,0 +1,61 @@ ++#!/bin/bash ++# ++# Test invalid backing file format in qcow2 images ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++ ++TEST_IMG="$TEST_IMG.base" _make_test_img 64M ++_make_test_img -b "$TEST_IMG.base" 64M ++ ++# Set an invalid backing file format ++$PYTHON qcow2.py "$TEST_IMG" add-header-ext 0xE2792ACA "foo" ++_img_info ++ ++# Try opening the image. Should fail (and not probe) in the first case, but ++# overriding the backing file format should be possible. ++$QEMU_IO -c "open $TEST_IMG" -c "read 0 4k" 2>&1 | _filter_qemu_io | _filter_testdir ++$QEMU_IO -c "open -o backing.driver=$IMGFMT $TEST_IMG" -c "read 0 4k" | _filter_qemu_io ++ ++# success, all done ++echo '*** done' ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/114.out b/tests/qemu-iotests/114.out +new file mode 100644 +index 0000000..de8f529 +--- /dev/null ++++ b/tests/qemu-iotests/114.out +@@ -0,0 +1,13 @@ ++QA output created by 114 ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file='TEST_DIR/t.IMGFMT.base' ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 65536 ++backing file: TEST_DIR/t.IMGFMT.base ++backing file format: foo ++qemu-io: can't open device TEST_DIR/t.qcow2: Unknown driver 'foo' ++read 4096/4096 bytes at offset 0 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 695ab02..5867cf7 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -88,3 +88,4 @@ + 105 rw auto quick + 107 rw auto quick + 108 rw auto quick ++114 rw auto quick +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Don-t-use-guest-sector-size-for-qemu_blockalig.patch b/SOURCES/kvm-block-Don-t-use-guest-sector-size-for-qemu_blockalig.patch new file mode 100644 index 0000000..2a84238 --- /dev/null +++ b/SOURCES/kvm-block-Don-t-use-guest-sector-size-for-qemu_blockalig.patch @@ -0,0 +1,148 @@ +From 8603c409443521f98a73652ebf30233da879c7de Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 28 Nov 2013 10:23:32 +0100 +Subject: [PATCH 08/37] block: Don't use guest sector size for qemu_blockalign() + +Message-id: <1392117622-28812-9-git-send-email-kwolf@redhat.com> +Patchwork-id: 57173 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 08/37] block: Don't use guest sector size for qemu_blockalign() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +bs->buffer_alignment is set by the device emulation and contains the +logical block size of the guest device. This isn't something that the +block layer should know, and even less something to use for determining +the right alignment of buffers to be used for the host. + +The new BlockLimits field opt_mem_alignment tells the qemu block layer +the optimal alignment to be used so that no bounce buffer must be used +in the driver. + +This patch may change the buffer alignment from 4k to 512 for all +callers that used qemu_blockalign() with the top-level image format +BlockDriverState. The value was never propagated to other levels in the +tree, so in particular raw-posix never required anything else than 512. + +While on disks with 4k sectors direct I/O requires a 4k alignment, +memory may still be okay when aligned to 512 byte boundaries. This is +what must have happened in practice, because otherwise this would +already have failed earlier. Therefore I don't expect regressions even +with this intermediate state. Later, raw-posix can implement the hook +and expose a different memory alignment requirement. + +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +(cherry picked from commit 339064d5063924e5176842abbf6c8089f3479c5b) + +Signed-off-by: Kevin Wolf +--- + block.c | 23 ++++++++++++++++++++--- + include/block/block.h | 3 +++ + include/block/block_int.h | 3 +++ + 3 files changed, 26 insertions(+), 3 deletions(-) +--- + block.c | 23 ++++++++++++++++++++--- + include/block/block.h | 3 +++ + include/block/block_int.h | 3 +++ + 3 files changed, 26 insertions(+), 3 deletions(-) + +diff --git a/block.c b/block.c +index 6c98ff7..c85f43e 100644 +--- a/block.c ++++ b/block.c +@@ -185,6 +185,16 @@ static void bdrv_io_limits_intercept(BlockDriverState *bs, + qemu_co_queue_next(&bs->throttled_reqs); + } + ++size_t bdrv_opt_mem_align(BlockDriverState *bs) ++{ ++ if (!bs || !bs->drv) { ++ /* 4k should be on the safe side */ ++ return 4096; ++ } ++ ++ return bs->bl.opt_mem_alignment; ++} ++ + /* check if the path starts with ":" */ + static int path_has_protocol(const char *path) + { +@@ -460,6 +470,9 @@ int bdrv_refresh_limits(BlockDriverState *bs) + if (bs->file) { + bdrv_refresh_limits(bs->file); + bs->bl.opt_transfer_length = bs->file->bl.opt_transfer_length; ++ bs->bl.opt_mem_alignment = bs->file->bl.opt_mem_alignment; ++ } else { ++ bs->bl.opt_mem_alignment = 512; + } + + if (bs->backing_hd) { +@@ -467,6 +480,9 @@ int bdrv_refresh_limits(BlockDriverState *bs) + bs->bl.opt_transfer_length = + MAX(bs->bl.opt_transfer_length, + bs->backing_hd->bl.opt_transfer_length); ++ bs->bl.opt_mem_alignment = ++ MAX(bs->bl.opt_mem_alignment, ++ bs->backing_hd->bl.opt_mem_alignment); + } + + /* Then let the driver override it */ +@@ -4729,7 +4745,7 @@ void bdrv_set_buffer_alignment(BlockDriverState *bs, int align) + + void *qemu_blockalign(BlockDriverState *bs, size_t size) + { +- return qemu_memalign((bs && bs->buffer_alignment) ? bs->buffer_alignment : 512, size); ++ return qemu_memalign(bdrv_opt_mem_align(bs), size); + } + + /* +@@ -4738,12 +4754,13 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size) + bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov) + { + int i; ++ size_t alignment = bdrv_opt_mem_align(bs); + + for (i = 0; i < qiov->niov; i++) { +- if ((uintptr_t) qiov->iov[i].iov_base % bs->buffer_alignment) { ++ if ((uintptr_t) qiov->iov[i].iov_base % alignment) { + return false; + } +- if (qiov->iov[i].iov_len % bs->buffer_alignment) { ++ if (qiov->iov[i].iov_len % alignment) { + return false; + } + } +diff --git a/include/block/block.h b/include/block/block.h +index 3e22fc2..9d1ce59 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -406,6 +406,9 @@ void bdrv_img_create(const char *filename, const char *fmt, + char *options, uint64_t img_size, int flags, + Error **errp, bool quiet); + ++/* Returns the alignment in bytes that is required so that no bounce buffer ++ * is required throughout the stack */ ++size_t bdrv_opt_mem_align(BlockDriverState *bs); + void bdrv_set_buffer_alignment(BlockDriverState *bs, int align); + void *qemu_blockalign(BlockDriverState *bs, size_t size); + bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 13a52e8..ddbd53d 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -239,6 +239,9 @@ typedef struct BlockLimits { + + /* optimal transfer length in sectors */ + int opt_transfer_length; ++ ++ /* memory alignment so that no bounce buffer is needed */ ++ size_t opt_mem_alignment; + } BlockLimits; + + /* +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Dont-ignore-previously-set-bdrv_flags.patch b/SOURCES/kvm-block-Dont-ignore-previously-set-bdrv_flags.patch new file mode 100644 index 0000000..d214982 --- /dev/null +++ b/SOURCES/kvm-block-Dont-ignore-previously-set-bdrv_flags.patch @@ -0,0 +1,55 @@ +From 914cc2a5576cd45afa5f6d6f5327da9cc4d3bbac Mon Sep 17 00:00:00 2001 +Message-Id: <914cc2a5576cd45afa5f6d6f5327da9cc4d3bbac.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Tue, 10 Dec 2013 14:33:38 +0100 +Subject: [PATCH 08/16] block: Dont ignore previously set bdrv_flags + +RH-Author: Paolo Bonzini +Message-id: <1386686018-11942-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56109 +O-Subject: [RHEL 7.0 qemu-kvm PATCH] block: Dont ignore previously set bdrv_flags +Bugzilla: 1039501 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi + +From: "M. Mohan Kumar" + +Bugzilla: 1039501 + +Brew build: 6700417 + +bdrv_flags is set by bdrv_parse_discard_flags(), but later it is reset +to zero. + +Signed-off-by: M. Mohan Kumar +Message-id: 1376483201-13466-1-git-send-email-mohan@in.ibm.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 8b7a5415f9297c1fbae5bff28dcb059d50c1b045) +--- + blockdev.c | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + blockdev.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/blockdev.c b/blockdev.c +index a9c5d32..cdd453a 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -384,7 +384,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + } + } + +- bdrv_flags = 0; + if (qemu_opt_get_bool(opts, "cache.writeback", true)) { + bdrv_flags |= BDRV_O_CACHE_WB; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-Drop-superfluous-conditionals-around-g_free.patch b/SOURCES/kvm-block-Drop-superfluous-conditionals-around-g_free.patch new file mode 100644 index 0000000..e90bae7 --- /dev/null +++ b/SOURCES/kvm-block-Drop-superfluous-conditionals-around-g_free.patch @@ -0,0 +1,75 @@ +From 348879493233388280a097c75f5a371512d7918b Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:23 +0200 +Subject: [PATCH 23/30] block: Drop superfluous conditionals around g_free() + +Message-id: <1434022828-13037-17-git-send-email-rjones@redhat.com> +Patchwork-id: 65853 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 16/21] block: Drop superfluous conditionals around g_free() +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Stefan Hajnoczi + +Upstream-status: f7047c2daf760385edf83df10be4259bea190e75 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 3 +-- + block/iscsi.c | 4 +--- + hw/block/onenand.c | 4 +--- + 3 files changed, 3 insertions(+), 8 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index e48cc87..d95789a 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -614,8 +614,7 @@ static void curl_readv_bh_cb(void *p) + acb->end = (acb->nb_sectors * SECTOR_SIZE); + + state->buf_off = 0; +- if (state->orig_buf) +- g_free(state->orig_buf); ++ g_free(state->orig_buf); + state->buf_start = start; + state->buf_len = acb->end + s->readahead_size; + end = MIN(start + state->buf_len, s->len) - 1; +diff --git a/block/iscsi.c b/block/iscsi.c +index 2a4ab22..92dc1dd 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1516,9 +1516,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + + out: + qemu_opts_del(opts); +- if (initiator_name != NULL) { +- g_free(initiator_name); +- } ++ g_free(initiator_name); + if (iscsi_url != NULL) { + iscsi_destroy_url(iscsi_url); + } +diff --git a/hw/block/onenand.c b/hw/block/onenand.c +index 8b511a7..55768ec 100644 +--- a/hw/block/onenand.c ++++ b/hw/block/onenand.c +@@ -329,9 +329,7 @@ static inline int onenand_prog_spare(OneNANDState *s, int sec, int secn, + dp, 1) < 0; + } + } +- if (dp) { +- g_free(dp); +- } ++ g_free(dp); + } + return result; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Error-parameter-for-create-functions.patch b/SOURCES/kvm-block-Error-parameter-for-create-functions.patch new file mode 100644 index 0000000..0f68f57 --- /dev/null +++ b/SOURCES/kvm-block-Error-parameter-for-create-functions.patch @@ -0,0 +1,380 @@ +From 8f07e694eb932e0f3d50ad1083155b314e0162ca Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:12 +0100 +Subject: [PATCH 19/87] block: Error parameter for create functions + +RH-Author: Max Reitz +Message-id: <1383604354-12743-22-git-send-email-mreitz@redhat.com> +Patchwork-id: 55321 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 21/43] block: Error parameter for create functions +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Add an Error ** parameter to bdrv_create and its associated functions to +allow more specific error messages. + +Signed-off-by: Max Reitz +(cherry picked from commit cc84d90ff54c025190dbe49ec5fea1268217c5f2) + +Signed-off-by: Max Reitz + +Conflicts: + block/raw.c + block/raw_bsd.c + +Conflicts because raw_bsd.c does not exist downstream; instead, there is +raw.c. +--- + block.c | 80 +++++++++++++++++++++++++++++++++++---------------- + block/cow.c | 4 ++- + block/qcow.c | 4 ++- + block/qcow2.c | 2 +- + block/qed.c | 4 ++- + block/raw.c | 10 ++++++- + block/vvfat.c | 4 ++- + include/block/block.h | 5 ++-- + qemu-img.c | 16 ++++------- + 9 files changed, 86 insertions(+), 43 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 80 ++++++++++++++++++++++++++++++++++-------------- + block/cow.c | 4 ++- + block/qcow.c | 4 ++- + block/qcow2.c | 2 +- + block/qed.c | 4 ++- + block/raw.c | 10 +++++- + block/vvfat.c | 4 ++- + include/block/block.h | 5 ++- + qemu-img.c | 16 +++------- + 9 files changed, 86 insertions(+), 43 deletions(-) + +diff --git a/block.c b/block.c +index cb99faf..c2b6930 100644 +--- a/block.c ++++ b/block.c +@@ -366,18 +366,26 @@ typedef struct CreateCo { + char *filename; + QEMUOptionParameter *options; + int ret; ++ Error *err; + } CreateCo; + + static void coroutine_fn bdrv_create_co_entry(void *opaque) + { ++ Error *local_err = NULL; ++ int ret; ++ + CreateCo *cco = opaque; + assert(cco->drv); + +- cco->ret = cco->drv->bdrv_create(cco->filename, cco->options, NULL); ++ ret = cco->drv->bdrv_create(cco->filename, cco->options, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(&cco->err, local_err); ++ } ++ cco->ret = ret; + } + + int bdrv_create(BlockDriver *drv, const char* filename, +- QEMUOptionParameter *options) ++ QEMUOptionParameter *options, Error **errp) + { + int ret; + +@@ -387,9 +395,11 @@ int bdrv_create(BlockDriver *drv, const char* filename, + .filename = g_strdup(filename), + .options = options, + .ret = NOT_DONE, ++ .err = NULL, + }; + + if (!drv->bdrv_create) { ++ error_setg(errp, "Driver '%s' does not support image creation", drv->format_name); + ret = -ENOTSUP; + goto out; + } +@@ -406,22 +416,37 @@ int bdrv_create(BlockDriver *drv, const char* filename, + } + + ret = cco.ret; ++ if (ret < 0) { ++ if (error_is_set(&cco.err)) { ++ error_propagate(errp, cco.err); ++ } else { ++ error_setg_errno(errp, -ret, "Could not create image"); ++ } ++ } + + out: + g_free(cco.filename); + return ret; + } + +-int bdrv_create_file(const char* filename, QEMUOptionParameter *options) ++int bdrv_create_file(const char* filename, QEMUOptionParameter *options, ++ Error **errp) + { + BlockDriver *drv; ++ Error *local_err = NULL; ++ int ret; + + drv = bdrv_find_protocol(filename, true); + if (drv == NULL) { ++ error_setg(errp, "Could not find protocol for file '%s'", filename); + return -ENOENT; + } + +- return bdrv_create(drv, filename, options); ++ ret = bdrv_create(drv, filename, options, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } ++ return ret; + } + + /* +@@ -1055,11 +1080,14 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + drv->format_name); + } + +- ret = bdrv_create(bdrv_qcow2, tmp_filename, create_options); ++ ret = bdrv_create(bdrv_qcow2, tmp_filename, create_options, &local_err); + free_option_parameters(create_options); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not create temporary overlay " +- "'%s'", tmp_filename); ++ "'%s': %s", tmp_filename, ++ error_get_pretty(local_err)); ++ error_free(local_err); ++ local_err = NULL; + goto fail; + } + +@@ -4755,6 +4783,7 @@ void bdrv_img_create(const char *filename, const char *fmt, + BlockDriverState *bs = NULL; + BlockDriver *drv, *proto_drv; + BlockDriver *backing_drv = NULL; ++ Error *local_err = NULL; + int ret = 0; + + /* Find driver and parse its options */ +@@ -4841,10 +4870,13 @@ void bdrv_img_create(const char *filename, const char *fmt, + bs = bdrv_new(""); + + ret = bdrv_open(bs, backing_file->value.s, NULL, back_flags, +- backing_drv, NULL); ++ backing_drv, &local_err); + if (ret < 0) { +- error_setg_errno(errp, -ret, "Could not open '%s'", +- backing_file->value.s); ++ error_setg_errno(errp, -ret, "Could not open '%s': %s", ++ backing_file->value.s, ++ error_get_pretty(local_err)); ++ error_free(local_err); ++ local_err = NULL; + goto out; + } + bdrv_get_geometry(bs, &size); +@@ -4863,22 +4895,19 @@ void bdrv_img_create(const char *filename, const char *fmt, + print_option_parameters(param); + puts(""); + } +- ret = bdrv_create(drv, filename, param); +- if (ret < 0) { +- if (ret == -ENOTSUP) { +- error_setg(errp,"Formatting or formatting option not supported for " +- "file format '%s'", fmt); +- } else if (ret == -EFBIG) { +- const char *cluster_size_hint = ""; +- if (get_option_parameter(create_options, BLOCK_OPT_CLUSTER_SIZE)) { +- cluster_size_hint = " (try using a larger cluster size)"; +- } +- error_setg(errp, "The image size is too large for file format '%s'%s", +- fmt, cluster_size_hint); +- } else { +- error_setg(errp, "%s: error while creating %s: %s", filename, fmt, +- strerror(-ret)); ++ ret = bdrv_create(drv, filename, param, &local_err); ++ if (ret == -EFBIG) { ++ /* This is generally a better message than whatever the driver would ++ * deliver (especially because of the cluster_size_hint), since that ++ * is most probably not much different from "image too large". */ ++ const char *cluster_size_hint = ""; ++ if (get_option_parameter(create_options, BLOCK_OPT_CLUSTER_SIZE)) { ++ cluster_size_hint = " (try using a larger cluster size)"; + } ++ error_setg(errp, "The image size is too large for file format '%s'" ++ "%s", fmt, cluster_size_hint); ++ error_free(local_err); ++ local_err = NULL; + } + + out: +@@ -4888,6 +4917,9 @@ out: + if (bs) { + bdrv_delete(bs); + } ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } + } + + AioContext *bdrv_get_aio_context(BlockDriverState *bs) +diff --git a/block/cow.c b/block/cow.c +index 8e00f8f..cd78129 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -316,8 +316,10 @@ static int cow_create(const char *filename, QEMUOptionParameter *options, + options++; + } + +- ret = bdrv_create_file(filename, options); ++ ret = bdrv_create_file(filename, options, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +diff --git a/block/qcow.c b/block/qcow.c +index 41a578c..6d029cc 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -684,8 +684,10 @@ static int qcow_create(const char *filename, QEMUOptionParameter *options, + options++; + } + +- ret = bdrv_create_file(filename, options); ++ ret = bdrv_create_file(filename, options, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +diff --git a/block/qcow2.c b/block/qcow2.c +index a2fca7a..027d210 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1364,7 +1364,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + uint8_t* refcount_table; + int ret; + +- ret = bdrv_create_file(filename, options); ++ ret = bdrv_create_file(filename, options, NULL); + if (ret < 0) { + return ret; + } +diff --git a/block/qed.c b/block/qed.c +index fa35fe2..7b13bb5 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -555,8 +555,10 @@ static int qed_create(const char *filename, uint32_t cluster_size, + int ret = 0; + BlockDriverState *bs = NULL; + +- ret = bdrv_create_file(filename, NULL); ++ ret = bdrv_create_file(filename, NULL, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +diff --git a/block/raw.c b/block/raw.c +index f92c04e..50073b6 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -108,7 +108,15 @@ static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs, + static int raw_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { +- return bdrv_create_file(filename, options); ++ Error *local_err = NULL; ++ int ret; ++ ++ ret = bdrv_create_file(filename, options, &local_err); ++ if (error_is_set(&local_err)) { ++ qerror_report_err(local_err); ++ error_free(local_err); ++ } ++ return ret; + } + + static QEMUOptionParameter raw_create_options[] = { +diff --git a/block/vvfat.c b/block/vvfat.c +index a385b6f..cb45687 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2928,8 +2928,10 @@ static int enable_write_target(BDRVVVFATState *s) + set_option_parameter_int(options, BLOCK_OPT_SIZE, s->sector_count * 512); + set_option_parameter(options, BLOCK_OPT_BACKING_FILE, "fat:"); + +- ret = bdrv_create(bdrv_qcow, s->qcow_filename, options); ++ ret = bdrv_create(bdrv_qcow, s->qcow_filename, options, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + goto err; + } + +diff --git a/include/block/block.h b/include/block/block.h +index 168d8a8..fac1282 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -152,8 +152,9 @@ BlockDriver *bdrv_find_format(const char *format_name); + BlockDriver *bdrv_find_whitelisted_format(const char *format_name, + bool readonly); + int bdrv_create(BlockDriver *drv, const char* filename, +- QEMUOptionParameter *options); +-int bdrv_create_file(const char* filename, QEMUOptionParameter *options); ++ QEMUOptionParameter *options, Error **errp); ++int bdrv_create_file(const char* filename, QEMUOptionParameter *options, ++ Error **errp); + BlockDriverState *bdrv_new(const char *device_name); + void bdrv_make_anon(BlockDriverState *bs); + void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old); +diff --git a/qemu-img.c b/qemu-img.c +index d7d1244..9fda8cf 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1136,6 +1136,7 @@ static int img_convert(int argc, char **argv) + float local_progress = 0; + int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */ + bool quiet = false; ++ Error *local_err = NULL; + + fmt = NULL; + out_fmt = "raw"; +@@ -1338,18 +1339,11 @@ static int img_convert(int argc, char **argv) + + if (!skip_create) { + /* Create the new image */ +- ret = bdrv_create(drv, out_filename, param); ++ ret = bdrv_create(drv, out_filename, param, &local_err); + if (ret < 0) { +- if (ret == -ENOTSUP) { +- error_report("Formatting not supported for file format '%s'", +- out_fmt); +- } else if (ret == -EFBIG) { +- error_report("The image size is too large for file format '%s'", +- out_fmt); +- } else { +- error_report("%s: error while converting %s: %s", +- out_filename, out_fmt, strerror(-ret)); +- } ++ error_report("%s: error while converting %s: %s", ++ out_filename, out_fmt, error_get_pretty(local_err)); ++ error_free(local_err); + goto out; + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Error-parameter-for-open-functions.patch b/SOURCES/kvm-block-Error-parameter-for-open-functions.patch new file mode 100644 index 0000000..e8833c7 --- /dev/null +++ b/SOURCES/kvm-block-Error-parameter-for-open-functions.patch @@ -0,0 +1,940 @@ +From 8d4ddeff8f248b561affa518acc19739b76e2f08 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:11 +0100 +Subject: [PATCH 18/87] block: Error parameter for open functions + +RH-Author: Max Reitz +Message-id: <1383604354-12743-21-git-send-email-mreitz@redhat.com> +Patchwork-id: 55320 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 20/43] block: Error parameter for open functions +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Add an Error ** parameter to bdrv_open, bdrv_file_open and associated +functions to allow more specific error messages. + +Signed-off-by: Max Reitz +(cherry picked from commit 34b5d2c68eb4082c288e70fb99c61af8f7b96fde) + +Signed-off-by: Max Reitz + +Conflicts: + block/blkverify.c + block/vmdk.c + block/vvfat.c + blockdev.c + hw/block/xen_disk.c + qemu-io.c + +All files conflict because the series "Implement reference count for +BlockDriverState" has not yet been backported which "replaces" +bdrv_delete by bdrv_unref. + +blockdev.c conflicts because the series "block: drive-backup live backup +command command" has not yet been backported. + +qemu-io.c conflicts because the series "Make qemu-io commands available +in the monitor" has not yet been backported (esp. commit 734c3b85c). +--- + block.c | 100 ++++++++++++++++++++++++++++++++------------------ + block/blkdebug.c | 4 +- + block/blkverify.c | 8 +++- + block/cow.c | 5 ++- + block/mirror.c | 5 ++- + block/qcow.c | 5 ++- + block/qcow2.c | 4 +- + block/qed.c | 6 ++- + block/sheepdog.c | 10 ++++- + block/vmdk.c | 11 +++++- + block/vvfat.c | 6 ++- + blockdev.c | 26 ++++++------- + hw/block/xen_disk.c | 7 +++- + include/block/block.h | 6 +-- + qemu-img.c | 21 +++++++---- + qemu-io.c | 14 +++++-- + qemu-nbd.c | 6 ++- + 17 files changed, 161 insertions(+), 83 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 100 +++++++++++++++++++++++++++++++----------------- + block/blkdebug.c | 4 +- + block/blkverify.c | 8 +++- + block/cow.c | 5 ++- + block/mirror.c | 5 +- + block/qcow.c | 5 ++- + block/qcow2.c | 4 +- + block/qed.c | 6 ++- + block/sheepdog.c | 10 ++++- + block/vmdk.c | 11 ++++- + block/vvfat.c | 6 ++- + blockdev.c | 26 +++++------- + hw/block/xen_disk.c | 7 +++- + include/block/block.h | 6 +- + qemu-img.c | 21 +++++++--- + qemu-io.c | 14 +++++-- + qemu-nbd.c | 6 ++- + 17 files changed, 161 insertions(+), 83 deletions(-) + +diff --git a/block.c b/block.c +index 0cb5ac9..cb99faf 100644 +--- a/block.c ++++ b/block.c +@@ -524,7 +524,7 @@ BlockDriver *bdrv_find_protocol(const char *filename, + } + + static int find_image_format(BlockDriverState *bs, const char *filename, +- BlockDriver **pdrv) ++ BlockDriver **pdrv, Error **errp) + { + int score, score_max; + BlockDriver *drv1, *drv; +@@ -535,6 +535,7 @@ static int find_image_format(BlockDriverState *bs, const char *filename, + if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) { + drv = bdrv_find_format("raw"); + if (!drv) { ++ error_setg(errp, "Could not find raw image format"); + ret = -ENOENT; + } + *pdrv = drv; +@@ -543,6 +544,8 @@ static int find_image_format(BlockDriverState *bs, const char *filename, + + ret = bdrv_pread(bs, 0, buf, sizeof(buf)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read image for determining its " ++ "format"); + *pdrv = NULL; + return ret; + } +@@ -559,6 +562,8 @@ static int find_image_format(BlockDriverState *bs, const char *filename, + } + } + if (!drv) { ++ error_setg(errp, "Could not determine image format: No compatible " ++ "driver found"); + ret = -ENOENT; + } + *pdrv = drv; +@@ -678,10 +683,11 @@ static int bdrv_open_flags(BlockDriverState *bs, int flags) + * Removes all processed options from *options. + */ + static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, +- QDict *options, int flags, BlockDriver *drv) ++ QDict *options, int flags, BlockDriver *drv, Error **errp) + { + int ret, open_flags; + const char *filename; ++ Error *local_err = NULL; + + assert(drv != NULL); + assert(bs->file == NULL); +@@ -710,6 +716,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + bs->read_only = !(open_flags & BDRV_O_RDWR); + + if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) { ++ error_setg(errp, "Driver '%s' is not whitelisted", drv->format_name); + return -ENOTSUP; + } + +@@ -733,26 +740,33 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + if (drv->bdrv_file_open) { + assert(file == NULL); + assert(drv->bdrv_parse_filename || filename != NULL); +- ret = drv->bdrv_file_open(bs, options, open_flags, NULL); ++ ret = drv->bdrv_file_open(bs, options, open_flags, &local_err); + } else { + if (file == NULL) { +- qerror_report(ERROR_CLASS_GENERIC_ERROR, "Can't use '%s' as a " +- "block driver for the protocol level", +- drv->format_name); ++ error_setg(errp, "Can't use '%s' as a block driver for the " ++ "protocol level", drv->format_name); + ret = -EINVAL; + goto free_and_fail; + } + assert(file != NULL); + bs->file = file; +- ret = drv->bdrv_open(bs, options, open_flags, NULL); ++ ret = drv->bdrv_open(bs, options, open_flags, &local_err); + } + + if (ret < 0) { ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } else if (filename) { ++ error_setg_errno(errp, -ret, "Could not open '%s'", filename); ++ } else { ++ error_setg_errno(errp, -ret, "Could not open image"); ++ } + goto free_and_fail; + } + + ret = refresh_total_sectors(bs, bs->total_sectors); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not refresh total sector count"); + goto free_and_fail; + } + +@@ -781,12 +795,13 @@ free_and_fail: + * dictionary, it needs to use QINCREF() before calling bdrv_file_open. + */ + int bdrv_file_open(BlockDriverState **pbs, const char *filename, +- QDict *options, int flags) ++ QDict *options, int flags, Error **errp) + { + BlockDriverState *bs; + BlockDriver *drv; + const char *drvname; + bool allow_protocol_prefix = false; ++ Error *local_err = NULL; + int ret; + + /* NULL means an empty set of options */ +@@ -805,8 +820,8 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + qdict_put(options, "filename", qstring_from_str(filename)); + allow_protocol_prefix = true; + } else { +- qerror_report(ERROR_CLASS_GENERIC_ERROR, "Can't specify 'file' and " +- "'filename' options at the same time"); ++ error_setg(errp, "Can't specify 'file' and 'filename' options at the " ++ "same time"); + ret = -EINVAL; + goto fail; + } +@@ -815,53 +830,53 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + drvname = qdict_get_try_str(options, "driver"); + if (drvname) { + drv = bdrv_find_whitelisted_format(drvname, !(flags & BDRV_O_RDWR)); ++ if (!drv) { ++ error_setg(errp, "Unknown driver '%s'", drvname); ++ } + qdict_del(options, "driver"); + } else if (filename) { + drv = bdrv_find_protocol(filename, allow_protocol_prefix); + if (!drv) { +- qerror_report(ERROR_CLASS_GENERIC_ERROR, "Unknown protocol"); ++ error_setg(errp, "Unknown protocol"); + } + } else { +- qerror_report(ERROR_CLASS_GENERIC_ERROR, +- "Must specify either driver or file"); ++ error_setg(errp, "Must specify either driver or file"); + drv = NULL; + } + + if (!drv) { ++ /* errp has been set already */ + ret = -ENOENT; + goto fail; + } + + /* Parse the filename and open it */ + if (drv->bdrv_parse_filename && filename) { +- Error *local_err = NULL; + drv->bdrv_parse_filename(filename, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } + qdict_del(options, "filename"); + } else if (!drv->bdrv_parse_filename && !filename) { +- qerror_report(ERROR_CLASS_GENERIC_ERROR, +- "The '%s' block driver requires a file name", +- drv->format_name); ++ error_setg(errp, "The '%s' block driver requires a file name", ++ drv->format_name); + ret = -EINVAL; + goto fail; + } + +- ret = bdrv_open_common(bs, NULL, options, flags, drv); ++ ret = bdrv_open_common(bs, NULL, options, flags, drv, &local_err); + if (ret < 0) { ++ error_propagate(errp, local_err); + goto fail; + } + + /* Check if any unknown options were used */ + if (qdict_size(options) != 0) { + const QDictEntry *entry = qdict_first(options); +- qerror_report(ERROR_CLASS_GENERIC_ERROR, "Block protocol '%s' doesn't " +- "support the option '%s'", +- drv->format_name, entry->key); ++ error_setg(errp, "Block protocol '%s' doesn't support the option '%s'", ++ drv->format_name, entry->key); + ret = -EINVAL; + goto fail; + } +@@ -888,11 +903,12 @@ fail: + * function (even on failure), so if the caller intends to reuse the dictionary, + * it needs to use QINCREF() before calling bdrv_file_open. + */ +-int bdrv_open_backing_file(BlockDriverState *bs, QDict *options) ++int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + { + char backing_filename[PATH_MAX]; + int back_flags, ret; + BlockDriver *back_drv = NULL; ++ Error *local_err = NULL; + + if (bs->backing_hd != NULL) { + QDECREF(options); +@@ -925,11 +941,12 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options) + + ret = bdrv_open(bs->backing_hd, + *backing_filename ? backing_filename : NULL, options, +- back_flags, back_drv); ++ back_flags, back_drv, &local_err); + if (ret < 0) { + bdrv_delete(bs->backing_hd); + bs->backing_hd = NULL; + bs->open_flags |= BDRV_O_NO_BACKING; ++ error_propagate(errp, local_err); + return ret; + } + return 0; +@@ -963,7 +980,7 @@ static void extract_subqdict(QDict *src, QDict **dst, const char *start) + * dictionary, it needs to use QINCREF() before calling bdrv_open. + */ + int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, +- int flags, BlockDriver *drv) ++ int flags, BlockDriver *drv, Error **errp) + { + int ret; + /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */ +@@ -971,6 +988,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + BlockDriverState *file = NULL; + QDict *file_options = NULL; + const char *drvname; ++ Error *local_err = NULL; + + /* NULL means an empty set of options */ + if (options == NULL) { +@@ -989,7 +1007,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + char backing_filename[PATH_MAX]; + + if (qdict_size(options) != 0) { +- error_report("Can't use snapshot=on with driver-specific options"); ++ error_setg(errp, "Can't use snapshot=on with driver-specific options"); + ret = -EINVAL; + goto fail; + } +@@ -1000,7 +1018,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + + /* if there is a backing file, use it */ + bs1 = bdrv_new(""); +- ret = bdrv_open(bs1, filename, NULL, 0, drv); ++ ret = bdrv_open(bs1, filename, NULL, 0, drv, &local_err); + if (ret < 0) { + bdrv_delete(bs1); + goto fail; +@@ -1011,6 +1029,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + + ret = get_tmp_filename(tmp_filename, sizeof(tmp_filename)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not get temporary filename"); + goto fail; + } + +@@ -1019,6 +1038,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + snprintf(backing_filename, sizeof(backing_filename), + "%s", filename); + } else if (!realpath(filename, backing_filename)) { ++ error_setg_errno(errp, errno, "Could not resolve path '%s'", filename); + ret = -errno; + goto fail; + } +@@ -1038,6 +1058,8 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + ret = bdrv_create(bdrv_qcow2, tmp_filename, create_options); + free_option_parameters(create_options); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not create temporary overlay " ++ "'%s'", tmp_filename); + goto fail; + } + +@@ -1054,7 +1076,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + extract_subqdict(options, &file_options, "file."); + + ret = bdrv_file_open(&file, filename, file_options, +- bdrv_open_flags(bs, flags | BDRV_O_UNMAP)); ++ bdrv_open_flags(bs, flags | BDRV_O_UNMAP), &local_err); + if (ret < 0) { + goto fail; + } +@@ -1067,7 +1089,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + } + + if (!drv) { +- ret = find_image_format(file, filename, &drv); ++ ret = find_image_format(file, filename, &drv, &local_err); + } + + if (!drv) { +@@ -1075,7 +1097,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + } + + /* Open the image */ +- ret = bdrv_open_common(bs, file, options, flags, drv); ++ ret = bdrv_open_common(bs, file, options, flags, drv, &local_err); + if (ret < 0) { + goto unlink_and_fail; + } +@@ -1090,7 +1112,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + QDict *backing_options; + + extract_subqdict(options, &backing_options, "backing."); +- ret = bdrv_open_backing_file(bs, backing_options); ++ ret = bdrv_open_backing_file(bs, backing_options, &local_err); + if (ret < 0) { + goto close_and_fail; + } +@@ -1099,9 +1121,9 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + /* Check if any unknown options were used */ + if (qdict_size(options) != 0) { + const QDictEntry *entry = qdict_first(options); +- qerror_report(ERROR_CLASS_GENERIC_ERROR, "Block format '%s' used by " +- "device '%s' doesn't support the option '%s'", +- drv->format_name, bs->device_name, entry->key); ++ error_setg(errp, "Block format '%s' used by device '%s' doesn't " ++ "support the option '%s'", drv->format_name, bs->device_name, ++ entry->key); + + ret = -EINVAL; + goto close_and_fail; +@@ -1130,11 +1152,17 @@ fail: + QDECREF(bs->options); + QDECREF(options); + bs->options = NULL; ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } + return ret; + + close_and_fail: + bdrv_close(bs); + QDECREF(options); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } + return ret; + } + +@@ -4813,7 +4841,7 @@ void bdrv_img_create(const char *filename, const char *fmt, + bs = bdrv_new(""); + + ret = bdrv_open(bs, backing_file->value.s, NULL, back_flags, +- backing_drv); ++ backing_drv, NULL); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not open '%s'", + backing_file->value.s); +diff --git a/block/blkdebug.c b/block/blkdebug.c +index 114c4c9..eda2810 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -384,8 +384,10 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- ret = bdrv_file_open(&bs->file, filename, NULL, flags); ++ ret = bdrv_file_open(&bs->file, filename, NULL, flags, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + goto fail; + } + +diff --git a/block/blkverify.c b/block/blkverify.c +index 5d716bb..cceb88f 100644 +--- a/block/blkverify.c ++++ b/block/blkverify.c +@@ -141,8 +141,10 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- ret = bdrv_file_open(&bs->file, raw, NULL, flags); ++ ret = bdrv_file_open(&bs->file, raw, NULL, flags, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + goto fail; + } + +@@ -154,8 +156,10 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + } + + s->test_file = bdrv_new(""); +- ret = bdrv_open(s->test_file, filename, NULL, flags, NULL); ++ ret = bdrv_open(s->test_file, filename, NULL, flags, NULL, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + bdrv_delete(s->test_file); + s->test_file = NULL; + goto fail; +diff --git a/block/cow.c b/block/cow.c +index c1d2dc8..8e00f8f 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -302,6 +302,7 @@ static int cow_create(const char *filename, QEMUOptionParameter *options, + struct stat st; + int64_t image_sectors = 0; + const char *image_filename = NULL; ++ Error *local_err = NULL; + int ret; + BlockDriverState *cow_bs; + +@@ -320,8 +321,10 @@ static int cow_create(const char *filename, QEMUOptionParameter *options, + return ret; + } + +- ret = bdrv_file_open(&cow_bs, filename, NULL, BDRV_O_RDWR); ++ ret = bdrv_file_open(&cow_bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +diff --git a/block/mirror.c b/block/mirror.c +index dad1e3e..6fa733e 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -505,14 +505,15 @@ static void mirror_iostatus_reset(BlockJob *job) + static void mirror_complete(BlockJob *job, Error **errp) + { + MirrorBlockJob *s = container_of(job, MirrorBlockJob, common); ++ Error *local_err = NULL; + int ret; + +- ret = bdrv_open_backing_file(s->target, NULL); ++ ret = bdrv_open_backing_file(s->target, NULL, &local_err); + if (ret < 0) { + char backing_filename[PATH_MAX]; + bdrv_get_full_backing_filename(s->target, backing_filename, + sizeof(backing_filename)); +- error_setg_file_open(errp, -ret, backing_filename); ++ error_propagate(errp, local_err); + return; + } + if (!s->synced) { +diff --git a/block/qcow.c b/block/qcow.c +index 1a6926f..41a578c 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -668,6 +668,7 @@ static int qcow_create(const char *filename, QEMUOptionParameter *options, + int64_t total_size = 0; + const char *backing_file = NULL; + int flags = 0; ++ Error *local_err = NULL; + int ret; + BlockDriverState *qcow_bs; + +@@ -688,8 +689,10 @@ static int qcow_create(const char *filename, QEMUOptionParameter *options, + return ret; + } + +- ret = bdrv_file_open(&qcow_bs, filename, NULL, BDRV_O_RDWR); ++ ret = bdrv_file_open(&qcow_bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +diff --git a/block/qcow2.c b/block/qcow2.c +index b6e50af..a2fca7a 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1369,7 +1369,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + return ret; + } + +- ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR); ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, NULL); + if (ret < 0) { + return ret; + } +@@ -1422,7 +1422,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + BlockDriver* drv = bdrv_find_format("qcow2"); + assert(drv != NULL); + ret = bdrv_open(bs, filename, NULL, +- BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, drv); ++ BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, drv, NULL); + if (ret < 0) { + goto out; + } +diff --git a/block/qed.c b/block/qed.c +index c56b5e2..fa35fe2 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -551,6 +551,7 @@ static int qed_create(const char *filename, uint32_t cluster_size, + QEDHeader le_header; + uint8_t *l1_table = NULL; + size_t l1_size = header.cluster_size * header.table_size; ++ Error *local_err = NULL; + int ret = 0; + BlockDriverState *bs = NULL; + +@@ -559,8 +560,11 @@ static int qed_create(const char *filename, uint32_t cluster_size, + return ret; + } + +- ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR | BDRV_O_CACHE_WB); ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR | BDRV_O_CACHE_WB, ++ &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +diff --git a/block/sheepdog.c b/block/sheepdog.c +index 952d703..e7c4448 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -1418,10 +1418,13 @@ static int sd_prealloc(const char *filename) + uint32_t idx, max_idx; + int64_t vdi_size; + void *buf = g_malloc0(SD_DATA_OBJ_SIZE); ++ Error *local_err = NULL; + int ret; + +- ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR); ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + goto out; + } + +@@ -1466,6 +1469,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, + char vdi[SD_MAX_VDI_LEN], tag[SD_MAX_VDI_TAG_LEN]; + uint32_t snapid; + bool prealloc = false; ++ Error *local_err = NULL; + + s = g_malloc0(sizeof(BDRVSheepdogState)); + +@@ -1519,8 +1523,10 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, + goto out; + } + +- ret = bdrv_file_open(&bs, backing_file, NULL, 0); ++ ret = bdrv_file_open(&bs, backing_file, NULL, 0, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + goto out; + } + +diff --git a/block/vmdk.c b/block/vmdk.c +index fa64f05..213901f 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -697,6 +697,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + int64_t flat_offset; + char extent_path[PATH_MAX]; + BlockDriverState *extent_file; ++ Error *local_err = NULL; + + while (*p) { + /* parse extent line: +@@ -726,8 +727,11 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + + path_combine(extent_path, sizeof(extent_path), + desc_file_path, fname); +- ret = bdrv_file_open(&extent_file, extent_path, NULL, bs->open_flags); ++ ret = bdrv_file_open(&extent_file, extent_path, NULL, bs->open_flags, ++ &local_err); + if (ret) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return ret; + } + +@@ -1591,6 +1595,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + "ddb.geometry.heads = \"%d\"\n" + "ddb.geometry.sectors = \"63\"\n" + "ddb.adapterType = \"%s\"\n"; ++ Error *local_err = NULL; + + if (filename_decompose(filename, path, prefix, postfix, PATH_MAX)) { + return -EINVAL; +@@ -1653,8 +1658,10 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + } + if (backing_file) { + BlockDriverState *bs = bdrv_new(""); +- ret = bdrv_open(bs, backing_file, NULL, 0, NULL); ++ ret = bdrv_open(bs, backing_file, NULL, 0, NULL, &local_err); + if (ret != 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + bdrv_delete(bs); + return ret; + } +diff --git a/block/vvfat.c b/block/vvfat.c +index bb3b0b6..a385b6f 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2910,6 +2910,7 @@ static int enable_write_target(BDRVVVFATState *s) + { + BlockDriver *bdrv_qcow; + QEMUOptionParameter *options; ++ Error *local_err = NULL; + int ret; + int size = sector2cluster(s, s->sector_count); + s->used_clusters = calloc(size, 1); +@@ -2935,8 +2936,11 @@ static int enable_write_target(BDRVVVFATState *s) + s->qcow = bdrv_new(""); + + ret = bdrv_open(s->qcow, s->qcow_filename, NULL, +- BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, bdrv_qcow); ++ BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, bdrv_qcow, ++ &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + bdrv_delete(s->qcow); + goto err; + } +diff --git a/blockdev.c b/blockdev.c +index a6563fa..2fb6d83 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -707,17 +707,11 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + } + + QINCREF(bs_opts); +- ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv); ++ ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv, &error); + + if (ret < 0) { +- if (ret == -EMEDIUMTYPE) { +- error_report("could not open disk image %s: not in %s format", +- file ?: dinfo->id, drv ? drv->format_name : +- qdict_get_str(bs_opts, "driver")); +- } else { +- error_report("could not open disk image %s: %s", +- file ?: dinfo->id, strerror(-ret)); +- } ++ error_report("could not open disk image %s: %s", ++ file ?: dinfo->id, error_get_pretty(error)); + goto err; + } + +@@ -958,9 +952,9 @@ static void external_snapshot_prepare(BlkTransactionStates *common, + /* TODO Inherit bs->options or only take explicit options with an + * extended QMP command? */ + ret = bdrv_open(states->new_bs, new_image_file, NULL, +- flags | BDRV_O_NO_BACKING, drv); ++ flags | BDRV_O_NO_BACKING, drv, &local_err); + if (ret != 0) { +- error_setg_file_open(errp, -ret, new_image_file); ++ error_propagate(errp, local_err); + } + } + +@@ -1124,11 +1118,12 @@ static void qmp_bdrv_open_encrypted(BlockDriverState *bs, const char *filename, + int bdrv_flags, BlockDriver *drv, + const char *password, Error **errp) + { ++ Error *local_err = NULL; + int ret; + +- ret = bdrv_open(bs, filename, NULL, bdrv_flags, drv); ++ ret = bdrv_open(bs, filename, NULL, bdrv_flags, drv, &local_err); + if (ret < 0) { +- error_setg_file_open(errp, -ret, filename); ++ error_propagate(errp, local_err); + return; + } + +@@ -1538,10 +1533,11 @@ void qmp_drive_mirror(const char *device, const char *target, + * file. + */ + target_bs = bdrv_new(""); +- ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv); ++ ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv, ++ &local_err); + if (ret < 0) { + bdrv_delete(target_bs); +- error_setg_file_open(errp, -ret, target); ++ error_propagate(errp, local_err); + return; + } + +diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c +index 247f32f..2d4d263 100644 +--- a/hw/block/xen_disk.c ++++ b/hw/block/xen_disk.c +@@ -797,10 +797,15 @@ static int blk_connect(struct XenDevice *xendev) + xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n"); + blkdev->bs = bdrv_new(blkdev->dev); + if (blkdev->bs) { ++ Error *local_err = NULL; + BlockDriver *drv = bdrv_find_whitelisted_format(blkdev->fileproto, + readonly); + if (bdrv_open(blkdev->bs, +- blkdev->filename, NULL, qflags, drv) != 0) { ++ blkdev->filename, NULL, qflags, drv, &local_err) != 0) ++ { ++ xen_be_printf(&blkdev->xendev, 0, "error: %s\n", ++ error_get_pretty(local_err)); ++ error_free(local_err); + bdrv_delete(blkdev->bs); + blkdev->bs = NULL; + } +diff --git a/include/block/block.h b/include/block/block.h +index 39770a3..168d8a8 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -162,10 +162,10 @@ void bdrv_delete(BlockDriverState *bs); + int bdrv_parse_cache_flags(const char *mode, int *flags); + int bdrv_parse_discard_flags(const char *mode, int *flags); + int bdrv_file_open(BlockDriverState **pbs, const char *filename, +- QDict *options, int flags); +-int bdrv_open_backing_file(BlockDriverState *bs, QDict *options); ++ QDict *options, int flags, Error **errp); ++int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp); + int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, +- int flags, BlockDriver *drv); ++ int flags, BlockDriver *drv, Error **errp); + BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue, + BlockDriverState *bs, int flags); + int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp); +diff --git a/qemu-img.c b/qemu-img.c +index 8fcea44..d7d1244 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -264,6 +264,7 @@ static BlockDriverState *bdrv_new_open(const char *filename, + BlockDriverState *bs; + BlockDriver *drv; + char password[256]; ++ Error *local_err = NULL; + int ret; + + bs = bdrv_new("image"); +@@ -278,9 +279,11 @@ static BlockDriverState *bdrv_new_open(const char *filename, + drv = NULL; + } + +- ret = bdrv_open(bs, filename, NULL, flags, drv); ++ ret = bdrv_open(bs, filename, NULL, flags, drv, &local_err); + if (ret < 0) { +- error_report("Could not open '%s': %s", filename, strerror(-ret)); ++ error_report("Could not open '%s': %s", filename, ++ error_get_pretty(local_err)); ++ error_free(local_err); + goto fail; + } + +@@ -2266,6 +2269,7 @@ static int img_rebase(int argc, char **argv) + int unsafe = 0; + int progress = 0; + bool quiet = false; ++ Error *local_err = NULL; + + /* Parse commandline parameters */ + fmt = NULL; +@@ -2369,18 +2373,21 @@ static int img_rebase(int argc, char **argv) + bs_old_backing = bdrv_new("old_backing"); + bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); + ret = bdrv_open(bs_old_backing, backing_name, NULL, BDRV_O_FLAGS, +- old_backing_drv); ++ old_backing_drv, &local_err); + if (ret) { +- error_report("Could not open old backing file '%s'", backing_name); ++ error_report("Could not open old backing file '%s': %s", ++ backing_name, error_get_pretty(local_err)); ++ error_free(local_err); + goto out; + } + if (out_baseimg[0]) { + bs_new_backing = bdrv_new("new_backing"); + ret = bdrv_open(bs_new_backing, out_baseimg, NULL, BDRV_O_FLAGS, +- new_backing_drv); ++ new_backing_drv, &local_err); + if (ret) { +- error_report("Could not open new backing file '%s'", +- out_baseimg); ++ error_report("Could not open new backing file '%s': %s", ++ out_baseimg, error_get_pretty(local_err)); ++ error_free(local_err); + goto out; + } + } +diff --git a/qemu-io.c b/qemu-io.c +index bdcce7f..116bb1b 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -1764,21 +1764,27 @@ static const cmdinfo_t close_cmd = { + + static int openfile(char *name, int flags, int growable) + { ++ Error *local_err = NULL; ++ + if (bs) { + fprintf(stderr, "file open already, try 'help close'\n"); + return 1; + } + + if (growable) { +- if (bdrv_file_open(&bs, name, NULL, flags)) { +- fprintf(stderr, "%s: can't open device %s\n", progname, name); ++ if (bdrv_file_open(&bs, name, NULL, flags, &local_err)) { ++ fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, ++ error_get_pretty(local_err)); ++ error_free(local_err); + return 1; + } + } else { + bs = bdrv_new("hda"); + +- if (bdrv_open(bs, name, NULL, flags, NULL) < 0) { +- fprintf(stderr, "%s: can't open device %s\n", progname, name); ++ if (bdrv_open(bs, name, NULL, flags, NULL, &local_err) < 0) { ++ fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, ++ error_get_pretty(local_err)); ++ error_free(local_err); + bdrv_delete(bs); + bs = NULL; + return 1; +diff --git a/qemu-nbd.c b/qemu-nbd.c +index 9c31d45..c1b395d 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -354,6 +354,7 @@ int main(int argc, char **argv) + #endif + pthread_t client_thread; + const char *fmt = NULL; ++ Error *local_err = NULL; + + /* The client thread uses SIGTERM to interrupt the server. A signal + * handler ensures that "qemu-nbd -v -c" exits with a nice status code. +@@ -572,10 +573,11 @@ int main(int argc, char **argv) + + bs = bdrv_new("hda"); + srcpath = argv[optind]; +- ret = bdrv_open(bs, srcpath, NULL, flags, drv); ++ ret = bdrv_open(bs, srcpath, NULL, flags, drv, &local_err); + if (ret < 0) { + errno = -ret; +- err(EXIT_FAILURE, "Failed to bdrv_open '%s'", argv[optind]); ++ err(EXIT_FAILURE, "Failed to bdrv_open '%s': %s", argv[optind], ++ error_get_pretty(local_err)); + } + + fd_size = bdrv_getlength(bs); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Fix-32-bit-truncation-in-mark_request_serialis.patch b/SOURCES/kvm-block-Fix-32-bit-truncation-in-mark_request_serialis.patch new file mode 100644 index 0000000..268eeb5 --- /dev/null +++ b/SOURCES/kvm-block-Fix-32-bit-truncation-in-mark_request_serialis.patch @@ -0,0 +1,51 @@ +From 68dbc9269577747455be55f209066926d1994d3c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Sat, 8 Feb 2014 10:42:18 +0100 +Subject: [PATCH 22/37] block: Fix 32 bit truncation in mark_request_serialising() + +Message-id: <1392117622-28812-23-git-send-email-kwolf@redhat.com> +Patchwork-id: 57187 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 22/37] block: Fix 32 bit truncation in mark_request_serialising() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +On 32 bit hosts, size_t is too small for align as the bitmask +~(align - 1) will zero out the higher 32 bits of the offset. + +While at it, change the local overlap_bytes variable to unsigned to +match the field in BdrvTrackedRequest. + +Signed-off-by: Kevin Wolf +Reviewed-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +--- + block.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) +--- + block.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/block.c b/block.c +index 24e94e6..94fd702 100644 +--- a/block.c ++++ b/block.c +@@ -2088,11 +2088,11 @@ static void tracked_request_begin(BdrvTrackedRequest *req, + QLIST_INSERT_HEAD(&bs->tracked_requests, req, list); + } + +-static void mark_request_serialising(BdrvTrackedRequest *req, size_t align) ++static void mark_request_serialising(BdrvTrackedRequest *req, uint64_t align) + { + int64_t overlap_offset = req->offset & ~(align - 1); +- int overlap_bytes = ROUND_UP(req->offset + req->bytes, align) +- - overlap_offset; ++ unsigned int overlap_bytes = ROUND_UP(req->offset + req->bytes, align) ++ - overlap_offset; + + if (!req->serialising) { + req->bs->serialising_in_flight++; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Fix-NULL-deference-for-unaligned-write-if-qiov.patch b/SOURCES/kvm-block-Fix-NULL-deference-for-unaligned-write-if-qiov.patch new file mode 100644 index 0000000..b46c021 --- /dev/null +++ b/SOURCES/kvm-block-Fix-NULL-deference-for-unaligned-write-if-qiov.patch @@ -0,0 +1,174 @@ +From 22db646a6d358e08c4c11f12e3dcf96f25525bf8 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 25 May 2015 04:45:56 +0200 +Subject: [PATCH 4/6] block: Fix NULL deference for unaligned write if qiov is + NULL + +Message-id: <1432529157-20381-3-git-send-email-famz@redhat.com> +Patchwork-id: 65120 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v2 2/3] block: Fix NULL deference for unaligned write if qiov is NULL +Bugzilla: 1200295 +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +For zero write, callers pass in NULL qiov (qemu-io "write -z" or +scsi-disk "write same"). + +Commit fc3959e466 fixed bdrv_co_write_zeroes which is the common case +for this bug, but it still exists in bdrv_aio_write_zeroes. A simpler +fix would be in bdrv_co_do_pwritev which is the NULL dereference point +and covers both cases. + +So don't access it in bdrv_co_do_pwritev in this case, use three aligned +writes. + +[Initialize ret to 0 in bdrv_co_do_zero_pwritev() to avoid uninitialized +variable warning with gcc 4.9.2. +--Stefan] + +Signed-off-by: Fam Zheng +Message-id: 1431522721-3266-3-git-send-email-famz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 9eeb6dd1b27bd57eb4e3869290e87feac8e8b226) + +We don't have block/io.c in downstream, applied the change to +block.c + +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 95 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 89ab829..45543d5 100644 +--- a/block.c ++++ b/block.c +@@ -3069,6 +3069,94 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + return ret; + } + ++static int coroutine_fn bdrv_co_do_zero_pwritev(BlockDriverState *bs, ++ int64_t offset, ++ unsigned int bytes, ++ BdrvRequestFlags flags, ++ BdrvTrackedRequest *req) ++{ ++ uint8_t *buf = NULL; ++ QEMUIOVector local_qiov; ++ struct iovec iov; ++ uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment); ++ unsigned int head_padding_bytes, tail_padding_bytes; ++ int ret = 0; ++ ++ head_padding_bytes = offset & (align - 1); ++ tail_padding_bytes = align - ((offset + bytes) & (align - 1)); ++ ++ ++ assert(flags & BDRV_REQ_ZERO_WRITE); ++ if (head_padding_bytes || tail_padding_bytes) { ++ buf = qemu_blockalign(bs, align); ++ iov = (struct iovec) { ++ .iov_base = buf, ++ .iov_len = align, ++ }; ++ qemu_iovec_init_external(&local_qiov, &iov, 1); ++ } ++ if (head_padding_bytes) { ++ uint64_t zero_bytes = MIN(bytes, align - head_padding_bytes); ++ ++ /* RMW the unaligned part before head. */ ++ mark_request_serialising(req, align); ++ wait_serialising_requests(req); ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_HEAD); ++ ret = bdrv_aligned_preadv(bs, req, offset & ~(align - 1), align, ++ align, &local_qiov, 0); ++ if (ret < 0) { ++ goto fail; ++ } ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_HEAD); ++ ++ memset(buf + head_padding_bytes, 0, zero_bytes); ++ ret = bdrv_aligned_pwritev(bs, req, offset & ~(align - 1), align, ++ &local_qiov, ++ flags & ~BDRV_REQ_ZERO_WRITE); ++ if (ret < 0) { ++ goto fail; ++ } ++ offset += zero_bytes; ++ bytes -= zero_bytes; ++ } ++ ++ assert(!bytes || (offset & (align - 1)) == 0); ++ if (bytes >= align) { ++ /* Write the aligned part in the middle. */ ++ uint64_t aligned_bytes = bytes & ~(align - 1); ++ ret = bdrv_aligned_pwritev(bs, req, offset, aligned_bytes, ++ NULL, flags); ++ if (ret < 0) { ++ goto fail; ++ } ++ bytes -= aligned_bytes; ++ offset += aligned_bytes; ++ } ++ ++ assert(!bytes || (offset & (align - 1)) == 0); ++ if (bytes) { ++ assert(align == tail_padding_bytes + bytes); ++ /* RMW the unaligned part after tail. */ ++ mark_request_serialising(req, align); ++ wait_serialising_requests(req); ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_TAIL); ++ ret = bdrv_aligned_preadv(bs, req, offset, align, ++ align, &local_qiov, 0); ++ if (ret < 0) { ++ goto fail; ++ } ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_TAIL); ++ ++ memset(buf, 0, bytes); ++ ret = bdrv_aligned_pwritev(bs, req, offset, align, ++ &local_qiov, flags & ~BDRV_REQ_ZERO_WRITE); ++ } ++fail: ++ qemu_vfree(buf); ++ return ret; ++ ++} ++ + /* + * Handle a write request in coroutine context + */ +@@ -3108,6 +3196,11 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + */ + tracked_request_begin(&req, bs, offset, bytes, true); + ++ if (!qiov) { ++ ret = bdrv_co_do_zero_pwritev(bs, offset, bytes, flags, &req); ++ goto out; ++ } ++ + if (offset & (align - 1)) { + QEMUIOVector head_qiov; + struct iovec head_iov; +@@ -3181,14 +3274,14 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + flags); + + fail: +- tracked_request_end(&req); + + if (use_local_qiov) { + qemu_iovec_destroy(&local_qiov); + } + qemu_vfree(head_buf); + qemu_vfree(tail_buf); +- ++out: ++ tracked_request_end(&req); + return ret; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Fix-bdrv_commit-return-value.patch b/SOURCES/kvm-block-Fix-bdrv_commit-return-value.patch new file mode 100644 index 0000000..ed3f2dd --- /dev/null +++ b/SOURCES/kvm-block-Fix-bdrv_commit-return-value.patch @@ -0,0 +1,86 @@ +From 89bdd1d20e9ccde41f271fe5dc22c355cbbc822a Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 11 Feb 2014 16:14:28 +0100 +Subject: [PATCH 22/28] block: Fix bdrv_commit return value + +RH-Author: Jeffrey Cody +Message-id: <5019e17d0114b49c58c42415e79b81abdcb648d3.1392134912.git.jcody@redhat.com> +Patchwork-id: 57218 +O-Subject: [RHEL7 qemu-kvm PATCH 4/6] block: Fix bdrv_commit return value +Bugzilla: 1047254 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +From: Kevin Wolf + +bdrv_commit() could return 0 or 1 on success, depending on whether or +not the last sector was allocated in the overlay and whether the overlay +format had a .bdrv_make_empty callback. + +Most callers ignored it, but qemu-img commit would print an error +message while the operation actually succeeded. + +Also clean up the handling of I/O errors to return the real error code +instead of -EIO. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit dabfa6cc2e2a06269026fcb42772894f67bd0c3e) +--- + block.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 15 ++++++++++----- + 1 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/block.c b/block.c +index c7aa285..642e8d6 100644 +--- a/block.c ++++ b/block.c +@@ -2006,13 +2006,13 @@ int bdrv_commit(BlockDriverState *bs) + goto ro_cleanup; + } + if (ret) { +- if (bdrv_read(bs, sector, buf, n) != 0) { +- ret = -EIO; ++ ret = bdrv_read(bs, sector, buf, n); ++ if (ret < 0) { + goto ro_cleanup; + } + +- if (bdrv_write(bs->backing_hd, sector, buf, n) != 0) { +- ret = -EIO; ++ ret = bdrv_write(bs->backing_hd, sector, buf, n); ++ if (ret < 0) { + goto ro_cleanup; + } + } +@@ -2020,6 +2020,9 @@ int bdrv_commit(BlockDriverState *bs) + + if (drv->bdrv_make_empty) { + ret = drv->bdrv_make_empty(bs); ++ if (ret < 0) { ++ goto ro_cleanup; ++ } + bdrv_flush(bs); + } + +@@ -2027,9 +2030,11 @@ int bdrv_commit(BlockDriverState *bs) + * Make sure all data we wrote to the backing device is actually + * stable on disk. + */ +- if (bs->backing_hd) ++ if (bs->backing_hd) { + bdrv_flush(bs->backing_hd); ++ } + ++ ret = 0; + ro_cleanup: + g_free(buf); + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Fix-bs-request_alignment-assertion-for-bs-sg-1.patch b/SOURCES/kvm-block-Fix-bs-request_alignment-assertion-for-bs-sg-1.patch new file mode 100644 index 0000000..91d678b --- /dev/null +++ b/SOURCES/kvm-block-Fix-bs-request_alignment-assertion-for-bs-sg-1.patch @@ -0,0 +1,47 @@ +From bac8088573d7f0a60e8e785aeaa442a1d90de0e4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 10 Mar 2014 11:07:22 +0100 +Subject: [PATCH 14/16] block: Fix bs->request_alignment assertion for bs->sg=1 + +RH-Author: Kevin Wolf +Message-id: <1394449642-13562-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 58064 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] block: Fix bs->request_alignment assertion for bs->sg=1 +Bugzilla: 1067784 +RH-Acked-by: Juan Quintela +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +For sg backends, bs->request_alignment is meaningless and may be 0. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +Acked-by: Paolo Bonzini +(cherry picked from commit 47ea2de2d68b6c5319308b7de1980f463b7c125c) + +Signed-off-by: Kevin Wolf +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 642e8d6..ec8dc90 100644 +--- a/block.c ++++ b/block.c +@@ -847,7 +847,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + + bdrv_refresh_limits(bs); + assert(bdrv_opt_mem_align(bs) != 0); +- assert(bs->request_alignment != 0); ++ assert((bs->request_alignment != 0) || bs->sg); + + #ifndef _WIN32 + if (bs->is_temporary) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Fix-compiler-warning-Werror-uninitialized.patch b/SOURCES/kvm-block-Fix-compiler-warning-Werror-uninitialized.patch new file mode 100644 index 0000000..983909b --- /dev/null +++ b/SOURCES/kvm-block-Fix-compiler-warning-Werror-uninitialized.patch @@ -0,0 +1,72 @@ +From b888e19c99ff56e39a1e7364d66077a4dbfa512b Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:34 +0200 +Subject: [PATCH 09/81] block: Fix compiler warning (-Werror=uninitialized) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-10-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54991 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 09/26] block: Fix compiler warning (-Werror=uninitialized) +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +From: Stefan Weil + +The patch fixes a warning from gcc (Debian 4.6.3-14+rpi1) 4.6.3: + +block/stream.c:141:22: error: +‘copy’ may be used uninitialized in this function [-Werror=uninitialized] + +This is not a real bug - a better compiler would not complain. + +Now 'copy' has always a defined value, so the check for ret >= 0 +can be removed. + +Signed-off-by: Stefan Weil +Acked-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit c3e4f43a99549daa6e9b87350922e8339341c2ab) +--- + block/stream.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/stream.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/stream.c b/block/stream.c +index 995b97b..276487c 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -115,11 +115,12 @@ wait: + break; + } + ++ copy = false; ++ + ret = bdrv_is_allocated(bs, sector_num, + STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n); + if (ret == 1) { + /* Allocated in the top, no need to copy. */ +- copy = false; + } else if (ret >= 0) { + /* Copy if allocated in the intermediate images. Limit to the + * known-unallocated area [sector_num, sector_num+n). */ +@@ -134,7 +135,7 @@ wait: + copy = (ret == 1); + } + trace_stream_one_iteration(s, sector_num, n, ret); +- if (ret >= 0 && copy) { ++ if (copy) { + if (s->common.speed) { + delay_ns = ratelimit_calculate_delay(&s->limit, n); + if (delay_ns > 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Generalise-and-optimise-COR-serialisation.patch b/SOURCES/kvm-block-Generalise-and-optimise-COR-serialisation.patch new file mode 100644 index 0000000..4bea776 --- /dev/null +++ b/SOURCES/kvm-block-Generalise-and-optimise-COR-serialisation.patch @@ -0,0 +1,190 @@ +From 045f704f819575af1bf69b59ffe73db5ba0cf19b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 4 Dec 2013 16:43:44 +0100 +Subject: [PATCH 20/37] block: Generalise and optimise COR serialisation + +Message-id: <1392117622-28812-21-git-send-email-kwolf@redhat.com> +Patchwork-id: 57185 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 20/37] block: Generalise and optimise COR serialisation +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Change the API so that specific requests can be marked serialising. Only +these requests are checked for overlaps then. + +This means that during a Copy on Read operation, not all requests +overlapping other requests are serialised any more, but only those that +actually overlap with the specific COR request. + +Also remove COR from function and variable names because this +functionality can be useful in other contexts. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 2dbafdc012d3ea81a97fec6226ca82d644539c9a) + +Conflicts: + include/block/block_int.h + +Conflicts because in RHEL 7... +- ...write notifiers don't exist (context only) +- ...BdrvTrackRequest is in block.c rather than block_int.h + +Signed-off-by: Kevin Wolf +--- + block.c | 49 +++++++++++++++++++++++++++++------------------ + include/block/block_int.h | 4 ++-- + 2 files changed, 32 insertions(+), 21 deletions(-) +--- + block.c | 49 +++++++++++++++++++++++++++----------------- + include/block/block_int.h | 4 +- + 2 files changed, 32 insertions(+), 21 deletions(-) + +diff --git a/block.c b/block.c +index 6317321..7b30bb3 100644 +--- a/block.c ++++ b/block.c +@@ -2039,6 +2039,7 @@ struct BdrvTrackedRequest { + int64_t offset; + unsigned int bytes; + bool is_write; ++ bool serialising; + QLIST_ENTRY(BdrvTrackedRequest) list; + Coroutine *co; /* owner, used for deadlock detection */ + CoQueue wait_queue; /* coroutines blocked on this request */ +@@ -2051,6 +2052,10 @@ struct BdrvTrackedRequest { + */ + static void tracked_request_end(BdrvTrackedRequest *req) + { ++ if (req->serialising) { ++ req->bs->serialising_in_flight--; ++ } ++ + QLIST_REMOVE(req, list); + qemu_co_queue_restart_all(&req->wait_queue); + } +@@ -2065,10 +2070,11 @@ static void tracked_request_begin(BdrvTrackedRequest *req, + { + *req = (BdrvTrackedRequest){ + .bs = bs, +- .offset = offset, +- .bytes = bytes, +- .is_write = is_write, +- .co = qemu_coroutine_self(), ++ .offset = offset, ++ .bytes = bytes, ++ .is_write = is_write, ++ .co = qemu_coroutine_self(), ++ .serialising = false, + }; + + qemu_co_queue_init(&req->wait_queue); +@@ -2076,6 +2082,14 @@ static void tracked_request_begin(BdrvTrackedRequest *req, + QLIST_INSERT_HEAD(&bs->tracked_requests, req, list); + } + ++static void mark_request_serialising(BdrvTrackedRequest *req) ++{ ++ if (!req->serialising) { ++ req->bs->serialising_in_flight++; ++ req->serialising = true; ++ } ++} ++ + /** + * Round a region to cluster boundaries + */ +@@ -2128,26 +2142,31 @@ static bool tracked_request_overlaps(BdrvTrackedRequest *req, + return true; + } + +-static void coroutine_fn wait_for_overlapping_requests(BlockDriverState *bs, +- BdrvTrackedRequest *self, int64_t offset, unsigned int bytes) ++static void coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self) + { ++ BlockDriverState *bs = self->bs; + BdrvTrackedRequest *req; + int64_t cluster_offset; + unsigned int cluster_bytes; + bool retry; + ++ if (!bs->serialising_in_flight) { ++ return; ++ } ++ + /* If we touch the same cluster it counts as an overlap. This guarantees + * that allocating writes will be serialized and not race with each other + * for the same cluster. For example, in copy-on-read it ensures that the + * CoR read and write operations are atomic and guest writes cannot + * interleave between them. + */ +- round_bytes_to_clusters(bs, offset, bytes, &cluster_offset, &cluster_bytes); ++ round_bytes_to_clusters(bs, self->offset, self->bytes, ++ &cluster_offset, &cluster_bytes); + + do { + retry = false; + QLIST_FOREACH(req, &bs->tracked_requests, list) { +- if (req == self) { ++ if (req == self || (!req->serialising && !self->serialising)) { + continue; + } + if (tracked_request_overlaps(req, cluster_offset, cluster_bytes)) { +@@ -2761,12 +2780,10 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + + /* Handle Copy on Read and associated serialisation */ + if (flags & BDRV_REQ_COPY_ON_READ) { +- bs->copy_on_read_in_flight++; ++ mark_request_serialising(req); + } + +- if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, req, offset, bytes); +- } ++ wait_serialising_requests(req); + + if (flags & BDRV_REQ_COPY_ON_READ) { + int pnum; +@@ -2815,10 +2832,6 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + } + + out: +- if (flags & BDRV_REQ_COPY_ON_READ) { +- bs->copy_on_read_in_flight--; +- } +- + return ret; + } + +@@ -3017,9 +3030,7 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0); + assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + +- if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, req, offset, bytes); +- } ++ wait_serialising_requests(req); + + if (flags & BDRV_REQ_ZERO_WRITE) { + ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index e66bd5f..2ec4bb2 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -280,8 +280,8 @@ struct BlockDriverState { + + NotifierList close_notifiers; + +- /* number of in-flight copy-on-read requests */ +- unsigned int copy_on_read_in_flight; ++ /* number of in-flight serialising requests */ ++ unsigned int serialising_in_flight; + + /* the time for latest disk I/O */ + int64_t slice_start; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Ignore-duplicate-or-NULL-format_name-in-bdrv_i.patch b/SOURCES/kvm-block-Ignore-duplicate-or-NULL-format_name-in-bdrv_i.patch new file mode 100644 index 0000000..ede465f --- /dev/null +++ b/SOURCES/kvm-block-Ignore-duplicate-or-NULL-format_name-in-bdrv_i.patch @@ -0,0 +1,81 @@ +From 2e9c1d07ca7609d66fa0433c0eebe8ab0d2508ed Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 27 May 2014 18:34:03 +0200 +Subject: [PATCH 06/13] block: Ignore duplicate or NULL format_name in bdrv_iterate_format + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 59038 +O-Subject: [PATCH qemu-kvm RHEL7.1] block: Ignore duplicate or NULL format_name in bdrv_iterate_format +Bugzilla: 1088695 1093983 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz + +Some block drivers have multiple BlockDriver instances with identical +format_name fields (e.g. gluster, nbd). + +Both qemu-img and qemu will use bdrv_iterate_format() to list the +supported formats when a help option is invoked. As protocols and +formats may register multiple drivers, redundant listings of formats +occur (e.g., "Supported formats: ... gluster gluster gluster gluster ... +"). + +Since the list of driver formats will be small, this performs a simple +linear search on format_name, and ignores any duplicates. + +The end result change is that the iterator will no longer receive +duplicate string names, nor will it receive NULL pointers. + +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit e855e4fb7b97f7f605e1f44427b98022e39e6f8f) +--- + +RHEL7 Notes: +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7505698 +BZ: 1093983 +BZ: 1088695 + + block.c | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 17 ++++++++++++++++- + 1 files changed, 16 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 4906f6b..43e325e 100644 +--- a/block.c ++++ b/block.c +@@ -3402,10 +3402,25 @@ void bdrv_iterate_format(void (*it)(void *opaque, const char *name), + void *opaque) + { + BlockDriver *drv; ++ int count = 0; ++ const char **formats = NULL; + + QLIST_FOREACH(drv, &bdrv_drivers, list) { +- it(opaque, drv->format_name); ++ if (drv->format_name) { ++ bool found = false; ++ int i = count; ++ while (formats && i && !found) { ++ found = !strcmp(formats[--i], drv->format_name); ++ } ++ ++ if (!found) { ++ formats = g_realloc(formats, (count + 1) * sizeof(char *)); ++ formats[count++] = drv->format_name; ++ it(opaque, drv->format_name); ++ } ++ } + } ++ g_free(formats); + } + + BlockDriverState *bdrv_find(const char *name) +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Image-file-option-amendment.patch b/SOURCES/kvm-block-Image-file-option-amendment.patch new file mode 100644 index 0000000..f691b0b --- /dev/null +++ b/SOURCES/kvm-block-Image-file-option-amendment.patch @@ -0,0 +1,230 @@ +From 5fcb6627be0a9a6744546adab5e638d4a265d2b7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:09 +0100 +Subject: [PATCH 04/14] block: Image file option amendment + +RH-Author: Max Reitz +Message-id: <1389131839-12920-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 56540 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 04/14] block: Image file option amendment +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +This patch adds the "amend" option to qemu-img which allows changing +image options on existing image files. It also adds the generic bdrv +implementation which is basically just a wrapper for the image format +specific function. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 6f176b48f9f98820ed192a1355cc1c7c08ddf46b) + +Signed-off-by: Max Reitz + +Conflicts: + block.c + qemu-img.c + +Conflicts because d616b224745b2c522f965cf8de7da17b553b959a has not yet +been backported. This is a single additional function which is missing +from the context in this case, therefore later backporting of that +commit would be trivial and obvious to resolve. + +Conflicts in qemu-img.c, because it is bdrv_delete() downstream for now, +rather than bdrv_unref(). +--- + block.c | 8 +++++ + include/block/block.h | 2 ++ + include/block/block_int.h | 3 ++ + qemu-img-cmds.hx | 6 ++++ + qemu-img.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++ + qemu-img.texi | 5 +++ + 6 files changed, 108 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 8 ++++ + include/block/block.h | 2 + + include/block/block_int.h | 3 ++ + qemu-img-cmds.hx | 6 +++ + qemu-img.c | 84 +++++++++++++++++++++++++++++++++++++++++++++ + qemu-img.texi | 5 +++ + 6 files changed, 108 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index 1ac1ab3..cc7afd4 100644 +--- a/block.c ++++ b/block.c +@@ -4980,3 +4980,11 @@ AioContext *bdrv_get_aio_context(BlockDriverState *bs) + /* Currently BlockDriverState always uses the main loop AioContext */ + return qemu_get_aio_context(); + } ++ ++int bdrv_amend_options(BlockDriverState *bs, QEMUOptionParameter *options) ++{ ++ if (bs->drv->bdrv_amend_options == NULL) { ++ return -ENOTSUP; ++ } ++ return bs->drv->bdrv_amend_options(bs, options); ++} +diff --git a/include/block/block.h b/include/block/block.h +index bcf71e2..e7f718c 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -280,6 +280,8 @@ typedef enum { + + int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix); + ++int bdrv_amend_options(BlockDriverState *bs_new, QEMUOptionParameter *options); ++ + /* async block I/O */ + typedef void BlockDriverDirtyHandler(BlockDriverState *bs, int64_t sector, + int sector_num); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 71c8b53..d49a317 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -202,6 +202,9 @@ struct BlockDriver { + int (*bdrv_check)(BlockDriverState* bs, BdrvCheckResult *result, + BdrvCheckMode fix); + ++ int (*bdrv_amend_options)(BlockDriverState *bs, ++ QEMUOptionParameter *options); ++ + void (*bdrv_debug_event)(BlockDriverState *bs, BlkDebugEvent event); + + /* TODO Better pass a option string/QDict/QemuOpts to add any rule? */ +diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx +index 0c36e59..da1d965 100644 +--- a/qemu-img-cmds.hx ++++ b/qemu-img-cmds.hx +@@ -67,5 +67,11 @@ DEF("resize", img_resize, + "resize [-q] filename [+ | -]size") + STEXI + @item resize [-q] @var{filename} [+ | -]@var{size} ++ETEXI ++ ++DEF("amend", img_amend, ++ "amend [-q] [-f fmt] -o options filename") ++STEXI ++@item amend [-q] [-f @var{fmt}] -o @var{options} @var{filename} + @end table + ETEXI +diff --git a/qemu-img.c b/qemu-img.c +index 1fe175b..f0f70e4 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -2566,6 +2566,90 @@ out: + return 0; + } + ++static int img_amend(int argc, char **argv) ++{ ++ int c, ret = 0; ++ char *options = NULL; ++ QEMUOptionParameter *create_options = NULL, *options_param = NULL; ++ const char *fmt = NULL, *filename; ++ bool quiet = false; ++ BlockDriverState *bs = NULL; ++ ++ for (;;) { ++ c = getopt(argc, argv, "hqf:o:"); ++ if (c == -1) { ++ break; ++ } ++ ++ switch (c) { ++ case 'h': ++ case '?': ++ help(); ++ break; ++ case 'o': ++ options = optarg; ++ break; ++ case 'f': ++ fmt = optarg; ++ break; ++ case 'q': ++ quiet = true; ++ break; ++ } ++ } ++ ++ if (optind != argc - 1) { ++ help(); ++ } ++ ++ if (!options) { ++ help(); ++ } ++ ++ filename = argv[argc - 1]; ++ ++ bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet); ++ if (!bs) { ++ error_report("Could not open image '%s'", filename); ++ ret = -1; ++ goto out; ++ } ++ ++ fmt = bs->drv->format_name; ++ ++ if (is_help_option(options)) { ++ ret = print_block_option_help(filename, fmt); ++ goto out; ++ } ++ ++ create_options = append_option_parameters(create_options, ++ bs->drv->create_options); ++ options_param = parse_option_parameters(options, create_options, ++ options_param); ++ if (options_param == NULL) { ++ error_report("Invalid options for file format '%s'", fmt); ++ ret = -1; ++ goto out; ++ } ++ ++ ret = bdrv_amend_options(bs, options_param); ++ if (ret < 0) { ++ error_report("Error while amending options: %s", strerror(-ret)); ++ goto out; ++ } ++ ++out: ++ if (bs) { ++ bdrv_delete(bs); ++ } ++ free_option_parameters(create_options); ++ free_option_parameters(options_param); ++ if (ret) { ++ return 1; ++ } ++ return 0; ++} ++ + static const img_cmd_t img_cmds[] = { + #define DEF(option, callback, arg_string) \ + { option, callback }, +diff --git a/qemu-img.texi b/qemu-img.texi +index dc578bb..da36975 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -356,6 +356,11 @@ sizes accordingly. Failure to do so will result in data loss! + After using this command to grow a disk image, you must use file system and + partitioning tools inside the VM to actually begin using the new space on the + device. ++ ++@item amend [-f @var{fmt}] -o @var{options} @var{filename} ++ ++Amends the image format specific @var{options} for the image file ++@var{filename}. Not all file formats support this operation. + @end table + @c man end + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Improve-driver-whitelist-checks.patch b/SOURCES/kvm-block-Improve-driver-whitelist-checks.patch new file mode 100644 index 0000000..00c82e5 --- /dev/null +++ b/SOURCES/kvm-block-Improve-driver-whitelist-checks.patch @@ -0,0 +1,103 @@ +From 8a53023561ad1fdc87104ef15494803ae00e069b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 14 Jul 2014 01:05:21 -0500 +Subject: [CHANGE 21/29] block: Improve driver whitelist checks +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405299921-2619-1-git-send-email-famz@redhat.com> +Patchwork-id: 59871 +O-Subject: [RHEL-7 qemu-kvm PATCH] block: Improve driver whitelist checks +Bugzilla: 999789 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7695744 +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=999789 + +The main intent of this patch is to consolidate the whitelist checks to +a single point in the code instead of spreading it everywhere. This adds +a nicer error message for read-only whitelisting, too, in places where +it was still missing. + +The patch also contains a bonus bug fix: By finding the format first in +bdrv_open() and then independently checking against the whitelist only +later, we avoid the case that use of a non-whitelisted format results in +probing rather than an error message. Previously, this could happen when +using the driver=... option. + +Signed-off-by: Kevin Wolf +Reviewed-by: Fam Zheng +(cherry picked from commit 8f94a6e40e46cbc8e8014da825d25824b1803b34) +Signed-off-by: Fam Zheng +Signed-off-by: jen + +Conflicts: + blockdev.c +Error report is different. +--- + block.c | 10 +++++++--- + blockdev.c | 2 +- + 2 files changed, 8 insertions(+), 4 deletions(-) + +Signed-off-by: jen +--- + block.c | 10 +++++++--- + blockdev.c | 2 +- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/block.c b/block.c +index 43e325e..a2e95f6 100644 +--- a/block.c ++++ b/block.c +@@ -786,7 +786,11 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + bs->read_only = !(open_flags & BDRV_O_RDWR); + + if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) { +- error_setg(errp, "Driver '%s' is not whitelisted", drv->format_name); ++ error_setg(errp, ++ !bs->read_only && bdrv_is_whitelisted(drv, true) ++ ? "Driver '%s' can only be used for read-only devices" ++ : "Driver '%s' is not whitelisted", ++ drv->format_name); + return -ENOTSUP; + } + +@@ -908,7 +912,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, + /* Find the right block driver */ + drvname = qdict_get_try_str(options, "driver"); + if (drvname) { +- drv = bdrv_find_whitelisted_format(drvname, !(flags & BDRV_O_RDWR)); ++ drv = bdrv_find_format(drvname); + if (!drv) { + error_setg(errp, "Unknown driver '%s'", drvname); + } +@@ -1177,7 +1181,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + /* Find the right image format driver */ + drvname = qdict_get_try_str(options, "driver"); + if (drvname) { +- drv = bdrv_find_whitelisted_format(drvname, !(flags & BDRV_O_RDWR)); ++ drv = bdrv_find_format(drvname); + qdict_del(options, "driver"); + } + +diff --git a/blockdev.c b/blockdev.c +index e51203c..aa5d0a6 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -414,7 +414,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + goto early_err; + } + +- drv = bdrv_find_whitelisted_format(buf, ro); ++ drv = bdrv_find_format(buf); + if (!drv) { + error_setg(errp, "'%s' invalid format", buf); + goto early_err; +-- +1.9.3 + diff --git a/SOURCES/kvm-block-Inherit-opt_transfer_length.patch b/SOURCES/kvm-block-Inherit-opt_transfer_length.patch new file mode 100644 index 0000000..42ccd34 --- /dev/null +++ b/SOURCES/kvm-block-Inherit-opt_transfer_length.patch @@ -0,0 +1,69 @@ +From 56adc601b22b81ae4c681af6b13f38e560f16867 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 11 Dec 2013 19:50:32 +0100 +Subject: [PATCH 04/37] block: Inherit opt_transfer_length +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1392117622-28812-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 57169 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 04/37] block: Inherit opt_transfer_length +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +When there is a format driver between the backend, it's not guaranteed +that exposing the opt_transfer_length for the format driver results in +the optimal requests (because of fragmentation etc.), but it can't make +things worse, so let's just do it. + +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +Reviewed-by: Benoît Canet +(cherry picked from commit 466ad822deef3a03757d505218a52993c5d56b5d) + +Signed-off-by: Kevin Wolf +--- + block.c | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) +--- + block.c | 20 +++++++++++++++++++- + 1 files changed, 19 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 26eebcc..8b36d05 100644 +--- a/block.c ++++ b/block.c +@@ -452,7 +452,25 @@ static int bdrv_refresh_limits(BlockDriverState *bs) + + memset(&bs->bl, 0, sizeof(bs->bl)); + +- if (drv && drv->bdrv_refresh_limits) { ++ if (!drv) { ++ return 0; ++ } ++ ++ /* Take some limits from the children as a default */ ++ if (bs->file) { ++ bdrv_refresh_limits(bs->file); ++ bs->bl.opt_transfer_length = bs->file->bl.opt_transfer_length; ++ } ++ ++ if (bs->backing_hd) { ++ bdrv_refresh_limits(bs->backing_hd); ++ bs->bl.opt_transfer_length = ++ MAX(bs->bl.opt_transfer_length, ++ bs->backing_hd->bl.opt_transfer_length); ++ } ++ ++ /* Then let the driver override it */ ++ if (drv->bdrv_refresh_limits) { + return drv->bdrv_refresh_limits(bs); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Introduce-bdrv_aligned_preadv.patch b/SOURCES/kvm-block-Introduce-bdrv_aligned_preadv.patch new file mode 100644 index 0000000..b869dca --- /dev/null +++ b/SOURCES/kvm-block-Introduce-bdrv_aligned_preadv.patch @@ -0,0 +1,131 @@ +From d5b3c858d7d2d96cf89495c95c2f07eb246b6730 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Dec 2013 15:07:48 +0100 +Subject: [PATCH 11/37] block: Introduce bdrv_aligned_preadv() + +Message-id: <1392117622-28812-12-git-send-email-kwolf@redhat.com> +Patchwork-id: 57176 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 11/37] block: Introduce bdrv_aligned_preadv() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This separates the part of bdrv_co_do_readv() that needs to happen +before the request is modified to match the backend alignment, and a +part that needs to be executed afterwards and passes the request to the +BlockDriver. + +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +(cherry picked from commit d0c7f642f5eb2cb21d0c3acf766cb375eaaf4666) + +Conflicts: + block.c + +Conflicts because RHEL 7 still has the old I/O throttling code. + +Signed-off-by: Kevin Wolf +--- + block.c | 59 ++++++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 42 insertions(+), 17 deletions(-) +--- + block.c | 59 ++++++++++++++++++++++++++++++++++++++++++----------------- + 1 files changed, 42 insertions(+), 17 deletions(-) + +diff --git a/block.c b/block.c +index 40a4a34..1787ab0 100644 +--- a/block.c ++++ b/block.c +@@ -2723,31 +2723,24 @@ err: + } + + /* +- * Handle a read request in coroutine context ++ * Forwards an already correctly aligned request to the BlockDriver. This ++ * handles copy on read and zeroing after EOF; any other features must be ++ * implemented by the caller. + */ +-static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, +- BdrvRequestFlags flags) ++static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, QEMUIOVector *qiov, int flags) + { + BlockDriver *drv = bs->drv; + BdrvTrackedRequest req; + int ret; + +- if (!drv) { +- return -ENOMEDIUM; +- } +- if (bdrv_check_request(bs, sector_num, nb_sectors)) { +- return -EIO; +- } ++ int64_t sector_num = offset >> BDRV_SECTOR_BITS; ++ unsigned int nb_sectors = bytes >> BDRV_SECTOR_BITS; + +- /* throttling disk read I/O */ +- if (bs->io_limits_enabled) { +- bdrv_io_limits_intercept(bs, false, nb_sectors); +- } ++ assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0); ++ assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + +- if (bs->copy_on_read) { +- flags |= BDRV_REQ_COPY_ON_READ; +- } ++ /* Handle Copy on Read and associated serialisation */ + if (flags & BDRV_REQ_COPY_ON_READ) { + bs->copy_on_read_in_flight++; + } +@@ -2772,6 +2765,7 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, + } + } + ++ /* Forward the request to the BlockDriver */ + if (!(bs->zero_beyond_eof && bs->growable)) { + ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov); + } else { +@@ -2812,6 +2806,37 @@ out: + return ret; + } + ++/* ++ * Handle a read request in coroutine context ++ */ ++static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++ BdrvRequestFlags flags) ++{ ++ BlockDriver *drv = bs->drv; ++ int ret; ++ ++ if (!drv) { ++ return -ENOMEDIUM; ++ } ++ if (bdrv_check_request(bs, sector_num, nb_sectors)) { ++ return -EIO; ++ } ++ ++ if (bs->copy_on_read) { ++ flags |= BDRV_REQ_COPY_ON_READ; ++ } ++ ++ /* throttling disk I/O */ ++ if (bs->io_limits_enabled) { ++ bdrv_io_limits_intercept(bs, false, nb_sectors); ++ } ++ ++ ret = bdrv_aligned_preadv(bs, sector_num << BDRV_SECTOR_BITS, ++ nb_sectors << BDRV_SECTOR_BITS, qiov, flags); ++ return ret; ++} ++ + int coroutine_fn bdrv_co_readv(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Introduce-bdrv_aligned_pwritev.patch b/SOURCES/kvm-block-Introduce-bdrv_aligned_pwritev.patch new file mode 100644 index 0000000..c9cb9e3 --- /dev/null +++ b/SOURCES/kvm-block-Introduce-bdrv_aligned_pwritev.patch @@ -0,0 +1,126 @@ +From d6a03733e6755d4b59f8009239af8f0a3e12c171 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 3 Dec 2013 14:02:23 +0100 +Subject: [PATCH 13/37] block: Introduce bdrv_aligned_pwritev() + +Message-id: <1392117622-28812-14-git-send-email-kwolf@redhat.com> +Patchwork-id: 57178 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 13/37] block: Introduce bdrv_aligned_pwritev() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This separates the part of bdrv_co_do_writev() that needs to happen +before the request is modified to match the backend alignment, and a +part that needs to be executed afterwards and passes the request to the +BlockDriver. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit b404f72036716ab8ace04b83a8f0a93be4739a6a) + +Conflicts: + block.c + +Conflict because RHEL 7 still has the old I/O throttling code. + +Signed-off-by: Kevin Wolf +--- + block.c | 62 +++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 41 insertions(+), 21 deletions(-) +--- + block.c | 62 +++++++++++++++++++++++++++++++++++++++++--------------------- + 1 files changed, 41 insertions(+), 21 deletions(-) + +diff --git a/block.c b/block.c +index ce3edb0..e6b6ed4 100644 +--- a/block.c ++++ b/block.c +@@ -2982,34 +2982,20 @@ static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, + } + + /* +- * Handle a write request in coroutine context ++ * Forwards an already correctly aligned write request to the BlockDriver. + */ +-static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, +- BdrvRequestFlags flags) ++static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, QEMUIOVector *qiov, int flags) + { + BlockDriver *drv = bs->drv; + BdrvTrackedRequest req; + int ret; + +- if (!bs->drv) { +- return -ENOMEDIUM; +- } +- if (bs->read_only) { +- return -EACCES; +- } +- if (bdrv_check_request(bs, sector_num, nb_sectors)) { +- return -EIO; +- } +- +- /* throttling disk write I/O */ +- if (bs->io_limits_enabled) { +- bdrv_io_limits_intercept(bs, true, nb_sectors); +- } ++ int64_t sector_num = offset >> BDRV_SECTOR_BITS; ++ unsigned int nb_sectors = bytes >> BDRV_SECTOR_BITS; + +- if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, sector_num, nb_sectors); +- } ++ assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0); ++ assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + + tracked_request_begin(&req, bs, sector_num, nb_sectors, true); + +@@ -3039,6 +3025,40 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, + return ret; + } + ++/* ++ * Handle a write request in coroutine context ++ */ ++static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++ BdrvRequestFlags flags) ++{ ++ int ret; ++ ++ if (!bs->drv) { ++ return -ENOMEDIUM; ++ } ++ if (bs->read_only) { ++ return -EACCES; ++ } ++ if (bdrv_check_request(bs, sector_num, nb_sectors)) { ++ return -EIO; ++ } ++ ++ if (bs->copy_on_read_in_flight) { ++ wait_for_overlapping_requests(bs, sector_num, nb_sectors); ++ } ++ ++ /* throttling disk I/O */ ++ if (bs->io_limits_enabled) { ++ bdrv_io_limits_intercept(bs, true, nb_sectors); ++ } ++ ++ ret = bdrv_aligned_pwritev(bs, sector_num << BDRV_SECTOR_BITS, ++ nb_sectors << BDRV_SECTOR_BITS, qiov, flags); ++ ++ return ret; ++} ++ + int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Introduce-bdrv_co_do_preadv.patch b/SOURCES/kvm-block-Introduce-bdrv_co_do_preadv.patch new file mode 100644 index 0000000..8621aa1 --- /dev/null +++ b/SOURCES/kvm-block-Introduce-bdrv_co_do_preadv.patch @@ -0,0 +1,128 @@ +From 39ee3b773c08395007137198542c2012e11295f5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Dec 2013 16:09:46 +0100 +Subject: [PATCH 12/37] block: Introduce bdrv_co_do_preadv() + +Message-id: <1392117622-28812-13-git-send-email-kwolf@redhat.com> +Patchwork-id: 57177 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 12/37] block: Introduce bdrv_co_do_preadv() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Similar to bdrv_pread(), which aligns byte-aligned request to 512 byte +sectors, bdrv_co_do_preadv() takes a byte-aligned request and aligns it +to the alignment specified in bs->request_alignment. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 1b0288ae7fc695a8e652973f75e92464bbc13416) + +Signed-off-by: Kevin Wolf +--- + block.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 58 insertions(+), 6 deletions(-) +--- + block.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- + 1 files changed, 58 insertions(+), 6 deletions(-) + +diff --git a/block.c b/block.c +index 1787ab0..ce3edb0 100644 +--- a/block.c ++++ b/block.c +@@ -2809,17 +2809,23 @@ out: + /* + * Handle a read request in coroutine context + */ +-static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, QEMUIOVector *qiov, + BdrvRequestFlags flags) + { + BlockDriver *drv = bs->drv; ++ /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */ ++ uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment); ++ uint8_t *head_buf = NULL; ++ uint8_t *tail_buf = NULL; ++ QEMUIOVector local_qiov; ++ bool use_local_qiov = false; + int ret; + + if (!drv) { + return -ENOMEDIUM; + } +- if (bdrv_check_request(bs, sector_num, nb_sectors)) { ++ if (bdrv_check_byte_request(bs, offset, bytes)) { + return -EIO; + } + +@@ -2829,14 +2835,60 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, + + /* throttling disk I/O */ + if (bs->io_limits_enabled) { +- bdrv_io_limits_intercept(bs, false, nb_sectors); ++ /* TODO Switch to byte granularity */ ++ bdrv_io_limits_intercept(bs, false, bytes >> BDRV_SECTOR_BITS); ++ } ++ ++ /* Align read if necessary by padding qiov */ ++ if (offset & (align - 1)) { ++ head_buf = qemu_blockalign(bs, align); ++ qemu_iovec_init(&local_qiov, qiov->niov + 2); ++ qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1)); ++ qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size); ++ use_local_qiov = true; ++ ++ bytes += offset & (align - 1); ++ offset = offset & ~(align - 1); ++ } ++ ++ if ((offset + bytes) & (align - 1)) { ++ if (!use_local_qiov) { ++ qemu_iovec_init(&local_qiov, qiov->niov + 1); ++ qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size); ++ use_local_qiov = true; ++ } ++ tail_buf = qemu_blockalign(bs, align); ++ qemu_iovec_add(&local_qiov, tail_buf, ++ align - ((offset + bytes) & (align - 1))); ++ ++ bytes = ROUND_UP(bytes, align); ++ } ++ ++ ret = bdrv_aligned_preadv(bs, offset, bytes, ++ use_local_qiov ? &local_qiov : qiov, ++ flags); ++ ++ if (use_local_qiov) { ++ qemu_iovec_destroy(&local_qiov); ++ qemu_vfree(head_buf); ++ qemu_vfree(tail_buf); + } + +- ret = bdrv_aligned_preadv(bs, sector_num << BDRV_SECTOR_BITS, +- nb_sectors << BDRV_SECTOR_BITS, qiov, flags); + return ret; + } + ++static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++ BdrvRequestFlags flags) ++{ ++ if (nb_sectors < 0 || nb_sectors > (UINT_MAX >> BDRV_SECTOR_BITS)) { ++ return -EINVAL; ++ } ++ ++ return bdrv_co_do_preadv(bs, sector_num << BDRV_SECTOR_BITS, ++ nb_sectors << BDRV_SECTOR_BITS, qiov, flags); ++} ++ + int coroutine_fn bdrv_co_readv(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Introduce-bdrv_co_do_pwritev.patch b/SOURCES/kvm-block-Introduce-bdrv_co_do_pwritev.patch new file mode 100644 index 0000000..c7d1f81 --- /dev/null +++ b/SOURCES/kvm-block-Introduce-bdrv_co_do_pwritev.patch @@ -0,0 +1,86 @@ +From f1f339c365d7e68790ba8f84d0e16daac462d627 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 3 Dec 2013 14:40:18 +0100 +Subject: [PATCH 15/37] block: Introduce bdrv_co_do_pwritev() + +Message-id: <1392117622-28812-16-git-send-email-kwolf@redhat.com> +Patchwork-id: 57180 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 15/37] block: Introduce bdrv_co_do_pwritev() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This is going to become the bdrv_co_do_preadv() equivalent for writes. +In this patch, however, just a function taking byte offsets is created, +it doesn't align anything yet. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 6601553e27091ffe240bea69227adce941fe12e8) + +Signed-off-by: Kevin Wolf +--- + block.c | 24 ++++++++++++++++++------ + 1 file changed, 18 insertions(+), 6 deletions(-) +--- + block.c | 24 ++++++++++++++++++------ + 1 files changed, 18 insertions(+), 6 deletions(-) + +diff --git a/block.c b/block.c +index d8168f5..7b8131c 100644 +--- a/block.c ++++ b/block.c +@@ -3032,8 +3032,8 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + /* + * Handle a write request in coroutine context + */ +-static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, QEMUIOVector *qiov, + BdrvRequestFlags flags) + { + int ret; +@@ -3044,21 +3044,33 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, + if (bs->read_only) { + return -EACCES; + } +- if (bdrv_check_request(bs, sector_num, nb_sectors)) { ++ if (bdrv_check_byte_request(bs, offset, bytes)) { + return -EIO; + } + + /* throttling disk I/O */ + if (bs->io_limits_enabled) { +- bdrv_io_limits_intercept(bs, true, nb_sectors); ++ /* TODO Switch to byte granularity */ ++ bdrv_io_limits_intercept(bs, true, bytes >> BDRV_SECTOR_BITS); + } + +- ret = bdrv_aligned_pwritev(bs, sector_num << BDRV_SECTOR_BITS, +- nb_sectors << BDRV_SECTOR_BITS, qiov, flags); ++ ret = bdrv_aligned_pwritev(bs, offset, bytes, qiov, flags); + + return ret; + } + ++static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, QEMUIOVector *qiov, ++ BdrvRequestFlags flags) ++{ ++ if (nb_sectors < 0 || nb_sectors > (INT_MAX >> BDRV_SECTOR_BITS)) { ++ return -EINVAL; ++ } ++ ++ return bdrv_co_do_pwritev(bs, sector_num << BDRV_SECTOR_BITS, ++ nb_sectors << BDRV_SECTOR_BITS, qiov, flags); ++} ++ + int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Introduce-bs-zero_beyond_eof.patch b/SOURCES/kvm-block-Introduce-bs-zero_beyond_eof.patch new file mode 100644 index 0000000..371ed89 --- /dev/null +++ b/SOURCES/kvm-block-Introduce-bs-zero_beyond_eof.patch @@ -0,0 +1,105 @@ +From 49b4262336e2875280d7d539851b5b318a86bc39 Mon Sep 17 00:00:00 2001 +From: Asias He +Date: Thu, 12 Sep 2013 07:39:33 +0200 +Subject: [PATCH 13/29] block: Introduce bs->zero_beyond_eof + +RH-Author: Asias He +Message-id: <1378971575-22416-3-git-send-email-asias@redhat.com> +Patchwork-id: 54326 +O-Subject: [RHEL7.0 qemu-kvm PATCH 2/4] block: Introduce bs->zero_beyond_eof +Bugzilla: 1007226 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1007226 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6275752 + +In 4146b46c42e0989cb5842e04d88ab6ccb1713a48 (block: Produce zeros when +protocols reading beyond end of file), we break qemu-iotests ./check +-qcow2 022. This happens because qcow2 temporarily sets ->growable = 1 +for vmstate accesses (which are stored beyond the end of regular image +data). + +We introduce the bs->zero_beyond_eof to allow qcow2_load_vmstate() to +disable ->zero_beyond_eof temporarily in addition to enable ->growable. + +[Since the broken patch "block: Produce zeros when protocols reading +beyond end of file" has not been merged yet, I have applied this fix +*first* and will then apply the next patch to keep the tree bisectable. +-- Stefan] + +Suggested-by: Stefan Hajnoczi +Signed-off-by: Asias He +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0d51b4debee6fb322751a57097a1d675c7a7c38d) +--- + block.c | 2 ++ + block/qcow2.c | 3 +++ + include/block/block_int.h | 3 +++ + 3 files changed, 8 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 ++ + block/qcow2.c | 3 +++ + include/block/block_int.h | 3 +++ + 3 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index f4a89b9..dbcad0e 100644 +--- a/block.c ++++ b/block.c +@@ -708,6 +708,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + + bs->open_flags = flags; + bs->buffer_alignment = 512; ++ bs->zero_beyond_eof = true; + open_flags = bdrv_open_flags(bs, flags); + bs->read_only = !(open_flags & BDRV_O_RDWR); + +@@ -1407,6 +1408,7 @@ void bdrv_close(BlockDriverState *bs) + bs->valid_key = 0; + bs->sg = 0; + bs->growable = 0; ++ bs->zero_beyond_eof = false; + QDECREF(bs->options); + bs->options = NULL; + +diff --git a/block/qcow2.c b/block/qcow2.c +index abdc202..70da5bd 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1722,12 +1722,15 @@ static int qcow2_load_vmstate(BlockDriverState *bs, uint8_t *buf, + { + BDRVQcowState *s = bs->opaque; + int growable = bs->growable; ++ bool zero_beyond_eof = bs->zero_beyond_eof; + int ret; + + BLKDBG_EVENT(bs->file, BLKDBG_VMSTATE_LOAD); + bs->growable = 1; ++ bs->zero_beyond_eof = false; + ret = bdrv_pread(bs, qcow2_vm_state_offset(s) + pos, buf, size); + bs->growable = growable; ++ bs->zero_beyond_eof = zero_beyond_eof; + + return ret; + } +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 6078dd3..267be48 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -268,6 +268,9 @@ struct BlockDriverState { + /* Whether the disk can expand beyond total_sectors */ + int growable; + ++ /* Whether produces zeros when read beyond eof */ ++ bool zero_beyond_eof; ++ + /* the memory alignment required for the buffers handled by this driver */ + int buffer_alignment; + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Introduce-qemu_try_blockalign.patch b/SOURCES/kvm-block-Introduce-qemu_try_blockalign.patch new file mode 100644 index 0000000..37461a7 --- /dev/null +++ b/SOURCES/kvm-block-Introduce-qemu_try_blockalign.patch @@ -0,0 +1,156 @@ +From 90fad0c40a1947e229fdf82a30219e33a3e1dad8 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:21:57 +0200 +Subject: [PATCH 03/42] block: Introduce qemu_try_blockalign() + +Message-id: <1434212556-3927-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 66022 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 03/42] block: Introduce qemu_try_blockalign() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +This function returns NULL instead of aborting when an allocation fails. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit 7d2a35cc921ea4832083a7e8598461868bb538ce) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block.c | 13 +++++++++++++ + include/block/block.h | 1 + + include/qemu/osdep.h | 1 + + util/oslib-posix.c | 16 ++++++++++------ + util/oslib-win32.c | 9 +++++++-- + 5 files changed, 32 insertions(+), 8 deletions(-) + +diff --git a/block.c b/block.c +index f2caf20..caea2ea 100644 +--- a/block.c ++++ b/block.c +@@ -5175,6 +5175,19 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size) + return qemu_memalign(bdrv_opt_mem_align(bs), size); + } + ++void *qemu_try_blockalign(BlockDriverState *bs, size_t size) ++{ ++ size_t align = bdrv_opt_mem_align(bs); ++ ++ /* Ensure that NULL is never returned on success */ ++ assert(align > 0); ++ if (size == 0) { ++ size = align; ++ } ++ ++ return qemu_try_memalign(align, size); ++} ++ + /* + * Check if all memory in this vector is sector aligned. + */ +diff --git a/include/block/block.h b/include/block/block.h +index 3170cbc..7b538b7 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -417,6 +417,7 @@ void bdrv_img_create(const char *filename, const char *fmt, + size_t bdrv_opt_mem_align(BlockDriverState *bs); + void bdrv_set_guest_block_size(BlockDriverState *bs, int align); + void *qemu_blockalign(BlockDriverState *bs, size_t size); ++void *qemu_try_blockalign(BlockDriverState *bs, size_t size); + bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); + + struct HBitmapIter; +diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h +index 7a5ae28..8984da0 100644 +--- a/include/qemu/osdep.h ++++ b/include/qemu/osdep.h +@@ -95,6 +95,7 @@ typedef signed int int_fast16_t; + #define qemu_printf printf + + int qemu_daemon(int nochdir, int noclose); ++void *qemu_try_memalign(size_t alignment, size_t size); + void *qemu_memalign(size_t alignment, size_t size); + void *qemu_anon_ram_alloc(size_t size); + void qemu_vfree(void *ptr); +diff --git a/util/oslib-posix.c b/util/oslib-posix.c +index fef840a..f0fb297 100644 +--- a/util/oslib-posix.c ++++ b/util/oslib-posix.c +@@ -83,7 +83,7 @@ void *qemu_oom_check(void *ptr) + return ptr; + } + +-void *qemu_memalign(size_t alignment, size_t size) ++void *qemu_try_memalign(size_t alignment, size_t size) + { + void *ptr; + +@@ -95,19 +95,23 @@ void *qemu_memalign(size_t alignment, size_t size) + int ret; + ret = posix_memalign(&ptr, alignment, size); + if (ret != 0) { +- fprintf(stderr, "Failed to allocate %zu B: %s\n", +- size, strerror(ret)); +- abort(); ++ errno = ret; ++ ptr = NULL; + } + #elif defined(CONFIG_BSD) +- ptr = qemu_oom_check(valloc(size)); ++ ptr = valloc(size); + #else +- ptr = qemu_oom_check(memalign(alignment, size)); ++ ptr = memalign(alignment, size); + #endif + trace_qemu_memalign(alignment, size, ptr); + return ptr; + } + ++void *qemu_memalign(size_t alignment, size_t size) ++{ ++ return qemu_oom_check(qemu_try_memalign(alignment, size)); ++} ++ + /* alloc shared memory pages */ + void *qemu_anon_ram_alloc(size_t size) + { +diff --git a/util/oslib-win32.c b/util/oslib-win32.c +index 332e743..0fb78ef 100644 +--- a/util/oslib-win32.c ++++ b/util/oslib-win32.c +@@ -46,18 +46,23 @@ void *qemu_oom_check(void *ptr) + return ptr; + } + +-void *qemu_memalign(size_t alignment, size_t size) ++void *qemu_try_memalign(size_t alignment, size_t size) + { + void *ptr; + + if (!size) { + abort(); + } +- ptr = qemu_oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE)); ++ ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); + trace_qemu_memalign(alignment, size, ptr); + return ptr; + } + ++void *qemu_memalign(size_t alignment, size_t size) ++{ ++ return qemu_oom_check(qemu_try_memalign(alignment, size)); ++} ++ + void *qemu_anon_ram_alloc(size_t size) + { + void *ptr; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Limit-multiwrite-merge-downstream-only.patch b/SOURCES/kvm-block-Limit-multiwrite-merge-downstream-only.patch new file mode 100644 index 0000000..2ed4a7c --- /dev/null +++ b/SOURCES/kvm-block-Limit-multiwrite-merge-downstream-only.patch @@ -0,0 +1,68 @@ +From b72ee3ebf0f00962872c69ad3576e1c8c0a208d9 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 21 Sep 2017 14:23:45 -0300 +Subject: [PATCH] block: Limit multiwrite merge (downstream only) + +RH-Author: Fam Zheng +Message-id: <20170921142345.22892-1-famz@redhat.com> +Patchwork-id: 76502 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] block: Limit multiwrite merge (downstream only) +Bugzilla: 1492559 +RH-Acked-by: Max Reitz +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1492559 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=14090140 +Upstream: Fixed since 2.3, see below. + +We don't limit the size of the final request of multiwrite_merge. The BZ +has a relatively stable reproducer: Attach an iscsi:// lun as +virtio-blk, then mkfs.ext4. When the guest kernel flushes the page +cache, iscsi driver gets two huge requests that are rejected by the LIO +iscsi target, then reports EIO. + +Upstream QEMU and qemu-kvm-rhev don't have this problem because of two +things: + +1) multiread feature in virtio-blk added in 2.3 (95f7142abc8). + +2) request fragmentation in block layer I/O in 2.7 (04ed95f484 and + 1a62d0accd). + +For 1), we cannot do a faithful backport because it is a new feature, +and is invasive. The change of this patch can be seen as doing a small +part from it, though the implementation is totally different. + +For 2), we would have a serious context conflict because upstream has a +lot of intermediate changes. The patch could possibly be rewritten in +downstream but is on the one hand much more risky than this patch as it +touches the very center of the block I/O code, and on the other hand +loses the meaning because the diff will completely deviate from +upstream. + +Signed-off-by: Fam Zheng +Signed-off-by: Wainer dos Santos Moschetta +--- + block.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/block.c b/block.c +index bdcd741389..b0373d0c16 100644 +--- a/block.c ++++ b/block.c +@@ -4303,6 +4303,11 @@ static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs, + merge = 0; + } + ++ if (reqs[outidx].qiov->size + reqs[i].qiov->size >= ++ bs->bl.max_transfer_length * BDRV_SECTOR_SIZE) { ++ merge = 0; ++ } ++ + if (merge) { + size_t size; + QEMUIOVector *qiov = g_malloc0(sizeof(*qiov)); +-- +2.13.5 + diff --git a/SOURCES/kvm-block-Limit-request-size-CVE-2014-0143.patch b/SOURCES/kvm-block-Limit-request-size-CVE-2014-0143.patch new file mode 100644 index 0000000..f85ebbf --- /dev/null +++ b/SOURCES/kvm-block-Limit-request-size-CVE-2014-0143.patch @@ -0,0 +1,45 @@ +From 6d68fdd3f1fa51b2f1524f1984089057e6d1b081 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:48 +0100 +Subject: [PATCH 41/49] block: Limit request size (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-42-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 41/48] block: Limit request size (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +Limiting the size of a single request to INT_MAX not only fixes a +direct integer overflow in bdrv_check_request() (which would only +trigger bad behaviour with ridiculously huge images, as in close to +2^64 bytes), but can also prevent overflows in all block drivers. + +Signed-off-by: Kevin Wolf +--- + block.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index 0321c74..4906f6b 100644 +--- a/block.c ++++ b/block.c +@@ -2425,6 +2425,10 @@ static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset, + static int bdrv_check_request(BlockDriverState *bs, int64_t sector_num, + int nb_sectors) + { ++ if (nb_sectors > INT_MAX / BDRV_SECTOR_SIZE) { ++ return -EIO; ++ } ++ + return bdrv_check_byte_request(bs, sector_num * BDRV_SECTOR_SIZE, + nb_sectors * BDRV_SECTOR_SIZE); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Make-BlockJobTypes-const.patch b/SOURCES/kvm-block-Make-BlockJobTypes-const.patch new file mode 100644 index 0000000..09c94fc --- /dev/null +++ b/SOURCES/kvm-block-Make-BlockJobTypes-const.patch @@ -0,0 +1,74 @@ +From 7bd51b7f1ea911e7a85f1965495c4299701b5f7c Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:53 +0100 +Subject: [PATCH 10/34] block: Make BlockJobTypes const + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-9-git-send-email-famz@redhat.com> +Patchwork-id: 56770 +O-Subject: [RHEL-7 qemu-kvm PATCH 08/18] block: Make BlockJobTypes const +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +(cherry picked from commit f59fee8d509b446df24843c1145a99b740492725) +Signed-off-by: Fam Zheng +--- + block/commit.c | 2 +- + block/mirror.c | 2 +- + block/stream.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/commit.c | 2 +- + block/mirror.c | 2 +- + block/stream.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/block/commit.c b/block/commit.c +index 74c209a..37572f0 100644 +--- a/block/commit.c ++++ b/block/commit.c +@@ -173,7 +173,7 @@ static void commit_set_speed(BlockJob *job, int64_t speed, Error **errp) + ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME); + } + +-static BlockJobType commit_job_type = { ++static const BlockJobType commit_job_type = { + .instance_size = sizeof(CommitBlockJob), + .job_type = "commit", + .set_speed = commit_set_speed, +diff --git a/block/mirror.c b/block/mirror.c +index 6843e70..342c90d 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -525,7 +525,7 @@ static void mirror_complete(BlockJob *job, Error **errp) + block_job_resume(job); + } + +-static BlockJobType mirror_job_type = { ++static const BlockJobType mirror_job_type = { + .instance_size = sizeof(MirrorBlockJob), + .job_type = "mirror", + .set_speed = mirror_set_speed, +diff --git a/block/stream.c b/block/stream.c +index 82fb179..ce16b0b 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -204,7 +204,7 @@ static void stream_set_speed(BlockJob *job, int64_t speed, Error **errp) + ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME); + } + +-static BlockJobType stream_job_type = { ++static const BlockJobType stream_job_type = { + .instance_size = sizeof(StreamBlockJob), + .job_type = "stream", + .set_speed = stream_set_speed, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Make-bdrv_pread-a-bdrv_prwv_co-wrapper.patch b/SOURCES/kvm-block-Make-bdrv_pread-a-bdrv_prwv_co-wrapper.patch new file mode 100644 index 0000000..1da76fb --- /dev/null +++ b/SOURCES/kvm-block-Make-bdrv_pread-a-bdrv_prwv_co-wrapper.patch @@ -0,0 +1,98 @@ +From 94789223da7e51599209395f167a95026e707ab8 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 5 Dec 2013 12:29:59 +0100 +Subject: [PATCH 28/37] block: Make bdrv_pread() a bdrv_prwv_co() wrapper + +Message-id: <1392117622-28812-29-git-send-email-kwolf@redhat.com> +Patchwork-id: 57193 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 28/37] block: Make bdrv_pread() a bdrv_prwv_co() wrapper +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Instead of implementing the alignment adjustment here, use the now +existing functionality of bdrv_co_do_preadv(). + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit a3ef65718506fb94cb9e5a903ef9bf9ad8fbe6de) + +Signed-off-by: Kevin Wolf +--- + block.c | 49 +++++++++++++------------------------------------ + 1 file changed, 13 insertions(+), 36 deletions(-) +--- + block.c | 51 ++++++++++++++------------------------------------- + 1 files changed, 14 insertions(+), 37 deletions(-) + +diff --git a/block.c b/block.c +index 3b5b706..e76dec6 100644 +--- a/block.c ++++ b/block.c +@@ -2566,49 +2566,26 @@ int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags) + } + } + +-int bdrv_pread(BlockDriverState *bs, int64_t offset, +- void *buf, int count1) ++int bdrv_pread(BlockDriverState *bs, int64_t offset, void *buf, int bytes) + { +- uint8_t tmp_buf[BDRV_SECTOR_SIZE]; +- int len, nb_sectors, count; +- int64_t sector_num; ++ QEMUIOVector qiov; ++ struct iovec iov = { ++ .iov_base = (void *)buf, ++ .iov_len = bytes, ++ }; + int ret; + +- count = count1; +- /* first read to align to sector start */ +- len = (BDRV_SECTOR_SIZE - offset) & (BDRV_SECTOR_SIZE - 1); +- if (len > count) +- len = count; +- sector_num = offset >> BDRV_SECTOR_BITS; +- if (len > 0) { +- if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) +- return ret; +- memcpy(buf, tmp_buf + (offset & (BDRV_SECTOR_SIZE - 1)), len); +- count -= len; +- if (count == 0) +- return count1; +- sector_num++; +- buf += len; ++ if (bytes < 0) { ++ return -EINVAL; + } + +- /* read the sectors "in place" */ +- nb_sectors = count >> BDRV_SECTOR_BITS; +- if (nb_sectors > 0) { +- if ((ret = bdrv_read(bs, sector_num, buf, nb_sectors)) < 0) +- return ret; +- sector_num += nb_sectors; +- len = nb_sectors << BDRV_SECTOR_BITS; +- buf += len; +- count -= len; ++ qemu_iovec_init_external(&qiov, &iov, 1); ++ ret = bdrv_prwv_co(bs, offset, &qiov, false, 0); ++ if (ret < 0) { ++ return ret; + } + +- /* add data from the last sector */ +- if (count > 0) { +- if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) +- return ret; +- memcpy(buf, tmp_buf, count); +- } +- return count1; ++ return bytes; + } + + int bdrv_pwritev(BlockDriverState *bs, int64_t offset, QEMUIOVector *qiov) +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Make-bdrv_pwrite-a-bdrv_prwv_co-wrapper.patch b/SOURCES/kvm-block-Make-bdrv_pwrite-a-bdrv_prwv_co-wrapper.patch new file mode 100644 index 0000000..a21ba3a --- /dev/null +++ b/SOURCES/kvm-block-Make-bdrv_pwrite-a-bdrv_prwv_co-wrapper.patch @@ -0,0 +1,141 @@ +From 571796285399dce82633b305dd9e03bcb8ac5634 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 5 Dec 2013 12:34:02 +0100 +Subject: [PATCH 29/37] block: Make bdrv_pwrite() a bdrv_prwv_co() wrapper + +Message-id: <1392117622-28812-30-git-send-email-kwolf@redhat.com> +Patchwork-id: 57194 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 29/37] block: Make bdrv_pwrite() a bdrv_prwv_co() wrapper +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Instead of implementing the alignment adjustment here, use the now +existing functionality of bdrv_co_do_pwritev(). + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 8407d5d7e265911b05949ee2ffd9e45c97bf0505) + +Signed-off-by: Kevin Wolf +--- + block.c | 64 ++++++++------------------------------------------- + include/block/block.h | 1 - + 2 files changed, 9 insertions(+), 56 deletions(-) +--- + block.c | 64 +++++++------------------------------------------ + include/block/block.h | 1 - + 2 files changed, 9 insertions(+), 56 deletions(-) + +diff --git a/block.c b/block.c +index e76dec6..d18c2df 100644 +--- a/block.c ++++ b/block.c +@@ -2517,11 +2517,6 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, + return bdrv_rw_co(bs, sector_num, (uint8_t *)buf, nb_sectors, true, 0); + } + +-int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov) +-{ +- return bdrv_prwv_co(bs, sector_num << BDRV_SECTOR_BITS, qiov, true, 0); +-} +- + int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, BdrvRequestFlags flags) + { +@@ -2590,70 +2585,29 @@ int bdrv_pread(BlockDriverState *bs, int64_t offset, void *buf, int bytes) + + int bdrv_pwritev(BlockDriverState *bs, int64_t offset, QEMUIOVector *qiov) + { +- uint8_t tmp_buf[BDRV_SECTOR_SIZE]; +- int len, nb_sectors, count; +- int64_t sector_num; + int ret; + +- count = qiov->size; +- +- /* first write to align to sector start */ +- len = (BDRV_SECTOR_SIZE - offset) & (BDRV_SECTOR_SIZE - 1); +- if (len > count) +- len = count; +- sector_num = offset >> BDRV_SECTOR_BITS; +- if (len > 0) { +- if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) +- return ret; +- qemu_iovec_to_buf(qiov, 0, tmp_buf + (offset & (BDRV_SECTOR_SIZE - 1)), +- len); +- if ((ret = bdrv_write(bs, sector_num, tmp_buf, 1)) < 0) +- return ret; +- count -= len; +- if (count == 0) +- return qiov->size; +- sector_num++; +- } +- +- /* write the sectors "in place" */ +- nb_sectors = count >> BDRV_SECTOR_BITS; +- if (nb_sectors > 0) { +- QEMUIOVector qiov_inplace; +- +- qemu_iovec_init(&qiov_inplace, qiov->niov); +- qemu_iovec_concat(&qiov_inplace, qiov, len, +- nb_sectors << BDRV_SECTOR_BITS); +- ret = bdrv_writev(bs, sector_num, &qiov_inplace); +- qemu_iovec_destroy(&qiov_inplace); +- if (ret < 0) { +- return ret; +- } +- +- sector_num += nb_sectors; +- len = nb_sectors << BDRV_SECTOR_BITS; +- count -= len; ++ ret = bdrv_prwv_co(bs, offset, qiov, true, 0); ++ if (ret < 0) { ++ return ret; + } + +- /* add data from the last sector */ +- if (count > 0) { +- if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) +- return ret; +- qemu_iovec_to_buf(qiov, qiov->size - count, tmp_buf, count); +- if ((ret = bdrv_write(bs, sector_num, tmp_buf, 1)) < 0) +- return ret; +- } + return qiov->size; + } + + int bdrv_pwrite(BlockDriverState *bs, int64_t offset, +- const void *buf, int count1) ++ const void *buf, int bytes) + { + QEMUIOVector qiov; + struct iovec iov = { + .iov_base = (void *) buf, +- .iov_len = count1, ++ .iov_len = bytes, + }; + ++ if (bytes < 0) { ++ return -EINVAL; ++ } ++ + qemu_iovec_init_external(&qiov, &iov, 1); + return bdrv_pwritev(bs, offset, &qiov); + } +diff --git a/include/block/block.h b/include/block/block.h +index 2a9aa5b..feb1926 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -221,7 +221,6 @@ BlockDriverAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs, int64_t sector_num + int nb_sectors, BdrvRequestFlags flags, + BlockDriverCompletionFunc *cb, void *opaque); + int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags); +-int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov); + int bdrv_pread(BlockDriverState *bs, int64_t offset, + void *buf, int count); + int bdrv_pwrite(BlockDriverState *bs, int64_t offset, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Make-overlap-range-for-serialisation-dynamic.patch b/SOURCES/kvm-block-Make-overlap-range-for-serialisation-dynamic.patch new file mode 100644 index 0000000..ac619b4 --- /dev/null +++ b/SOURCES/kvm-block-Make-overlap-range-for-serialisation-dynamic.patch @@ -0,0 +1,174 @@ +From d8c60f4fc2bb0fb0e5b363cd61230e103fbff3ab Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 4 Dec 2013 17:08:50 +0100 +Subject: [PATCH 21/37] block: Make overlap range for serialisation dynamic + +Message-id: <1392117622-28812-22-git-send-email-kwolf@redhat.com> +Patchwork-id: 57186 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 21/37] block: Make overlap range for serialisation dynamic +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Copy on Read wants to serialise with all requests touching the same +cluster, so wait_serialising_requests() rounded to cluster boundaries. +Other users like alignment RMW will have different requirements, though +(requests touching the same sector), so make it dynamic. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 7327145f63a224c9ba9c16d0c29781feffef8dc6) + +Conflicts: + include/block/block_int.h + +Conflicts because in RHEL 7 BdrvTrackedRequest is in block.c + +Signed-off-by: Kevin Wolf +--- + block.c | 57 +++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 31 insertions(+), 26 deletions(-) +--- + block.c | 57 +++++++++++++++++++++++++++++++-------------------------- + 1 files changed, 31 insertions(+), 26 deletions(-) + +diff --git a/block.c b/block.c +index 7b30bb3..24e94e6 100644 +--- a/block.c ++++ b/block.c +@@ -2039,7 +2039,11 @@ struct BdrvTrackedRequest { + int64_t offset; + unsigned int bytes; + bool is_write; ++ + bool serialising; ++ int64_t overlap_offset; ++ unsigned int overlap_bytes; ++ + QLIST_ENTRY(BdrvTrackedRequest) list; + Coroutine *co; /* owner, used for deadlock detection */ + CoQueue wait_queue; /* coroutines blocked on this request */ +@@ -2075,6 +2079,8 @@ static void tracked_request_begin(BdrvTrackedRequest *req, + .is_write = is_write, + .co = qemu_coroutine_self(), + .serialising = false, ++ .overlap_offset = offset, ++ .overlap_bytes = bytes, + }; + + qemu_co_queue_init(&req->wait_queue); +@@ -2082,12 +2088,19 @@ static void tracked_request_begin(BdrvTrackedRequest *req, + QLIST_INSERT_HEAD(&bs->tracked_requests, req, list); + } + +-static void mark_request_serialising(BdrvTrackedRequest *req) ++static void mark_request_serialising(BdrvTrackedRequest *req, size_t align) + { ++ int64_t overlap_offset = req->offset & ~(align - 1); ++ int overlap_bytes = ROUND_UP(req->offset + req->bytes, align) ++ - overlap_offset; ++ + if (!req->serialising) { + req->bs->serialising_in_flight++; + req->serialising = true; + } ++ ++ req->overlap_offset = MIN(req->overlap_offset, overlap_offset); ++ req->overlap_bytes = MAX(req->overlap_bytes, overlap_bytes); + } + + /** +@@ -2111,20 +2124,16 @@ void bdrv_round_to_clusters(BlockDriverState *bs, + } + } + +-static void round_bytes_to_clusters(BlockDriverState *bs, +- int64_t offset, unsigned int bytes, +- int64_t *cluster_offset, +- unsigned int *cluster_bytes) ++static int bdrv_get_cluster_size(BlockDriverState *bs) + { + BlockDriverInfo bdi; ++ int ret; + +- if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) { +- *cluster_offset = offset; +- *cluster_bytes = bytes; ++ ret = bdrv_get_info(bs, &bdi); ++ if (ret < 0 || bdi.cluster_size == 0) { ++ return bs->request_alignment; + } else { +- *cluster_offset = QEMU_ALIGN_DOWN(offset, bdi.cluster_size); +- *cluster_bytes = QEMU_ALIGN_UP(offset - *cluster_offset + bytes, +- bdi.cluster_size); ++ return bdi.cluster_size; + } + } + +@@ -2132,11 +2141,11 @@ static bool tracked_request_overlaps(BdrvTrackedRequest *req, + int64_t offset, unsigned int bytes) + { + /* aaaa bbbb */ +- if (offset >= req->offset + req->bytes) { ++ if (offset >= req->overlap_offset + req->overlap_bytes) { + return false; + } + /* bbbb aaaa */ +- if (req->offset >= offset + bytes) { ++ if (req->overlap_offset >= offset + bytes) { + return false; + } + return true; +@@ -2146,30 +2155,21 @@ static void coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self) + { + BlockDriverState *bs = self->bs; + BdrvTrackedRequest *req; +- int64_t cluster_offset; +- unsigned int cluster_bytes; + bool retry; + + if (!bs->serialising_in_flight) { + return; + } + +- /* If we touch the same cluster it counts as an overlap. This guarantees +- * that allocating writes will be serialized and not race with each other +- * for the same cluster. For example, in copy-on-read it ensures that the +- * CoR read and write operations are atomic and guest writes cannot +- * interleave between them. +- */ +- round_bytes_to_clusters(bs, self->offset, self->bytes, +- &cluster_offset, &cluster_bytes); +- + do { + retry = false; + QLIST_FOREACH(req, &bs->tracked_requests, list) { + if (req == self || (!req->serialising && !self->serialising)) { + continue; + } +- if (tracked_request_overlaps(req, cluster_offset, cluster_bytes)) { ++ if (tracked_request_overlaps(req, self->overlap_offset, ++ self->overlap_bytes)) ++ { + /* Hitting this means there was a reentrant request, for + * example, a block driver issuing nested requests. This must + * never happen since it means deadlock. +@@ -2780,7 +2780,12 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + + /* Handle Copy on Read and associated serialisation */ + if (flags & BDRV_REQ_COPY_ON_READ) { +- mark_request_serialising(req); ++ /* If we touch the same cluster it counts as an overlap. This ++ * guarantees that allocating writes will be serialized and not race ++ * with each other for the same cluster. For example, in copy-on-read ++ * it ensures that the CoR read and write operations are atomic and ++ * guest writes cannot interleave between them. */ ++ mark_request_serialising(req, bdrv_get_cluster_size(bs)); + } + + wait_serialising_requests(req); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Make-zero-after-EOF-work-with-larger-alignment.patch b/SOURCES/kvm-block-Make-zero-after-EOF-work-with-larger-alignment.patch new file mode 100644 index 0000000..900192d --- /dev/null +++ b/SOURCES/kvm-block-Make-zero-after-EOF-work-with-larger-alignment.patch @@ -0,0 +1,65 @@ +From 4b6c9d80b06057886e35650b904fe332ae14d0bd Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 4 Dec 2013 12:13:10 +0100 +Subject: [PATCH 19/37] block: Make zero-after-EOF work with larger alignment + +Message-id: <1392117622-28812-20-git-send-email-kwolf@redhat.com> +Patchwork-id: 57184 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 19/37] block: Make zero-after-EOF work with larger alignment +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Odd file sizes could make bdrv_aligned_preadv() shorten the request in +non-aligned ways. Fix it by rounding to the required alignment instead +of 512 bytes. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit ec746e10cb2e6276a8d2e036454792fe0674864a) + +Signed-off-by: Kevin Wolf +--- + block.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) +--- + block.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/block.c b/block.c +index feeab4e..6317321 100644 +--- a/block.c ++++ b/block.c +@@ -2748,7 +2748,7 @@ err: + */ + static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + BdrvTrackedRequest *req, int64_t offset, unsigned int bytes, +- QEMUIOVector *qiov, int flags) ++ int64_t align, QEMUIOVector *qiov, int flags) + { + BlockDriver *drv = bs->drv; + int ret; +@@ -2796,7 +2796,8 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + } + + total_sectors = DIV_ROUND_UP(len, BDRV_SECTOR_SIZE); +- max_nb_sectors = MAX(0, total_sectors - sector_num); ++ max_nb_sectors = MAX(0, ROUND_UP(total_sectors - sector_num, ++ align >> BDRV_SECTOR_BITS)); + if (max_nb_sectors > 0) { + ret = drv->bdrv_co_readv(bs, sector_num, + MIN(nb_sectors, max_nb_sectors), qiov); +@@ -2882,7 +2883,7 @@ static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs, + } + + tracked_request_begin(&req, bs, offset, bytes, false); +- ret = bdrv_aligned_preadv(bs, &req, offset, bytes, ++ ret = bdrv_aligned_preadv(bs, &req, offset, bytes, align, + use_local_qiov ? &local_qiov : qiov, + flags); + tracked_request_end(&req); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Move-initialisation-of-BlockLimits-to-bdrv_ref.patch b/SOURCES/kvm-block-Move-initialisation-of-BlockLimits-to-bdrv_ref.patch new file mode 100644 index 0000000..3e0f8be --- /dev/null +++ b/SOURCES/kvm-block-Move-initialisation-of-BlockLimits-to-bdrv_ref.patch @@ -0,0 +1,294 @@ +From 69a283009c8736d5e063b6721b47f4b453595c15 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 11 Dec 2013 19:26:16 +0100 +Subject: [PATCH 02/37] block: Move initialisation of BlockLimits to bdrv_refresh_limits() + +Message-id: <1392117622-28812-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 57167 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 02/37] block: Move initialisation of BlockLimits to bdrv_refresh_limits() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This function separates filling the BlockLimits from bdrv_open(), which +allows it to call it from other operations which may change the limits +(e.g. modifications to the backing file chain or bdrv_reopen) + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit d34682cd4a06efe9ee3fc8cb7e8a0ea445299989) + +Conflicts: + block/qed.c + +Trivial context-only conflict. + +Signed-off-by: Kevin Wolf +--- + block.c | 18 ++++++++++++++++++ + block/iscsi.c | 46 +++++++++++++++++++++++++++++----------------- + block/qcow2.c | 11 ++++++++++- + block/qed.c | 11 ++++++++++- + block/vmdk.c | 22 ++++++++++++++++++---- + include/block/block_int.h | 2 ++ + 6 files changed, 87 insertions(+), 23 deletions(-) +--- + block.c | 18 +++++++++++++++++ + block/iscsi.c | 46 ++++++++++++++++++++++++++++---------------- + block/qcow2.c | 11 +++++++++- + block/qed.c | 11 +++++++++- + block/vmdk.c | 22 +++++++++++++++++--- + include/block/block_int.h | 2 + + 6 files changed, 87 insertions(+), 23 deletions(-) + +diff --git a/block.c b/block.c +index df0adf3..26eebcc 100644 +--- a/block.c ++++ b/block.c +@@ -446,6 +446,19 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options, + return ret; + } + ++static int bdrv_refresh_limits(BlockDriverState *bs) ++{ ++ BlockDriver *drv = bs->drv; ++ ++ memset(&bs->bl, 0, sizeof(bs->bl)); ++ ++ if (drv && drv->bdrv_refresh_limits) { ++ return drv->bdrv_refresh_limits(bs); ++ } ++ ++ return 0; ++} ++ + /* + * Create a uniquely-named empty temporary file. + * Return 0 upon success, otherwise a negative errno value. +@@ -797,6 +810,8 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + goto free_and_fail; + } + ++ bdrv_refresh_limits(bs); ++ + #ifndef _WIN32 + if (bs->is_temporary) { + assert(filename != NULL); +@@ -984,6 +999,9 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + bs->backing_hd->file->filename); + } + ++ /* Recalculate the BlockLimits with the backing file */ ++ bdrv_refresh_limits(bs); ++ + return 0; + } + +diff --git a/block/iscsi.c b/block/iscsi.c +index 1c5b0a2..83e4f15 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1445,23 +1445,6 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + sizeof(struct scsi_inquiry_block_limits)); + scsi_free_scsi_task(task); + task = NULL; +- +- if (iscsilun->bl.max_unmap < 0xffffffff) { +- bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap, +- iscsilun); +- } +- bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, +- iscsilun); +- +- if (iscsilun->bl.max_ws_len < 0xffffffff) { +- bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, +- iscsilun); +- } +- bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, +- iscsilun); +- +- bs->bl.opt_transfer_length = sector_lun2qemu(iscsilun->bl.opt_xfer_len, +- iscsilun); + } + + #if defined(LIBISCSI_FEATURE_NOP_COUNTER) +@@ -1506,6 +1489,34 @@ static void iscsi_close(BlockDriverState *bs) + memset(iscsilun, 0, sizeof(IscsiLun)); + } + ++static int iscsi_refresh_limits(BlockDriverState *bs) ++{ ++ IscsiLun *iscsilun = bs->opaque; ++ ++ /* We don't actually refresh here, but just return data queried in ++ * iscsi_open(): iscsi targets don't change their limits. */ ++ if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { ++ if (iscsilun->bl.max_unmap < 0xffffffff) { ++ bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap, ++ iscsilun); ++ } ++ bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, ++ iscsilun); ++ ++ if (iscsilun->bl.max_ws_len < 0xffffffff) { ++ bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, ++ iscsilun); ++ } ++ bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, ++ iscsilun); ++ ++ bs->bl.opt_transfer_length = sector_lun2qemu(iscsilun->bl.opt_xfer_len, ++ iscsilun); ++ } ++ ++ return 0; ++} ++ + /* We have nothing to do for iSCSI reopen, stub just returns + * success */ + static int iscsi_reopen_prepare(BDRVReopenState *state, +@@ -1626,6 +1637,7 @@ static BlockDriver bdrv_iscsi = { + .bdrv_getlength = iscsi_getlength, + .bdrv_get_info = iscsi_get_info, + .bdrv_truncate = iscsi_truncate, ++ .bdrv_refresh_limits = iscsi_refresh_limits, + + .bdrv_co_get_block_status = iscsi_co_get_block_status, + .bdrv_co_discard = iscsi_co_discard, +diff --git a/block/qcow2.c b/block/qcow2.c +index f6307af..05ea0cd 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -718,7 +718,6 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + } + + qemu_opts_del(opts); +- bs->bl.write_zeroes_alignment = s->cluster_sectors; + + if (s->use_lazy_refcounts && s->qcow_version < 3) { + error_setg(errp, "Lazy refcounts require a qcow2 image with at least " +@@ -751,6 +750,15 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + return ret; + } + ++static int qcow2_refresh_limits(BlockDriverState *bs) ++{ ++ BDRVQcowState *s = bs->opaque; ++ ++ bs->bl.write_zeroes_alignment = s->cluster_sectors; ++ ++ return 0; ++} ++ + static int qcow2_set_key(BlockDriverState *bs, const char *key) + { + BDRVQcowState *s = bs->opaque; +@@ -2262,6 +2270,7 @@ static BlockDriver bdrv_qcow2 = { + + .bdrv_change_backing_file = qcow2_change_backing_file, + ++ .bdrv_refresh_limits = qcow2_refresh_limits, + .bdrv_invalidate_cache = qcow2_invalidate_cache, + + .create_options = qcow2_create_options, +diff --git a/block/qed.c b/block/qed.c +index fb8ccd5..da68152 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -495,7 +495,6 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags, + } + } + +- bs->bl.write_zeroes_alignment = s->header.cluster_size >> BDRV_SECTOR_BITS; + s->need_check_timer = qemu_new_timer_ns(vm_clock, + qed_need_check_timer_cb, s); + +@@ -507,6 +506,15 @@ out: + return ret; + } + ++static int bdrv_qed_refresh_limits(BlockDriverState *bs) ++{ ++ BDRVQEDState *s = bs->opaque; ++ ++ bs->bl.write_zeroes_alignment = s->header.cluster_size >> BDRV_SECTOR_BITS; ++ ++ return 0; ++} ++ + /* We have nothing to do for QED reopen, stubs just return + * success */ + static int bdrv_qed_reopen_prepare(BDRVReopenState *state, +@@ -1616,6 +1624,7 @@ static BlockDriver bdrv_qed = { + .bdrv_truncate = bdrv_qed_truncate, + .bdrv_getlength = bdrv_qed_getlength, + .bdrv_get_info = bdrv_qed_get_info, ++ .bdrv_refresh_limits = bdrv_qed_refresh_limits, + .bdrv_change_backing_file = bdrv_qed_change_backing_file, + .bdrv_invalidate_cache = bdrv_qed_invalidate_cache, + .bdrv_check = bdrv_qed_check, +diff --git a/block/vmdk.c b/block/vmdk.c +index a1994a4..a966715 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -428,10 +428,6 @@ static int vmdk_add_extent(BlockDriverState *bs, + extent->l2_size = l2_size; + extent->cluster_sectors = flat ? sectors : cluster_sectors; + +- if (!flat) { +- bs->bl.write_zeroes_alignment = +- MAX(bs->bl.write_zeroes_alignment, cluster_sectors); +- } + if (s->num_extents > 1) { + extent->end_sector = (*(extent - 1)).end_sector + extent->sectors; + } else { +@@ -886,6 +882,23 @@ fail: + return ret; + } + ++ ++static int vmdk_refresh_limits(BlockDriverState *bs) ++{ ++ BDRVVmdkState *s = bs->opaque; ++ int i; ++ ++ for (i = 0; i < s->num_extents; i++) { ++ if (!s->extents[i].flat) { ++ bs->bl.write_zeroes_alignment = ++ MAX(bs->bl.write_zeroes_alignment, ++ s->extents[i].cluster_sectors); ++ } ++ } ++ ++ return 0; ++} ++ + static int get_whole_cluster(BlockDriverState *bs, + VmdkExtent *extent, + uint64_t cluster_offset, +@@ -1957,6 +1970,7 @@ static BlockDriver bdrv_vmdk = { + .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size, + .bdrv_has_zero_init = vmdk_has_zero_init, + .bdrv_get_specific_info = vmdk_get_specific_info, ++ .bdrv_refresh_limits = vmdk_refresh_limits, + + .create_options = vmdk_create_options, + }; +diff --git a/include/block/block_int.h b/include/block/block_int.h +index c8f30fd..13a52e8 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -213,6 +213,8 @@ struct BlockDriver { + int (*bdrv_debug_resume)(BlockDriverState *bs, const char *tag); + bool (*bdrv_debug_is_suspended)(BlockDriverState *bs, const char *tag); + ++ int (*bdrv_refresh_limits)(BlockDriverState *bs); ++ + /* + * Returns 1 if newly created images are guaranteed to contain only + * zeros, 0 otherwise. +-- +1.7.1 + diff --git a/SOURCES/kvm-block-New-bdrv_nb_sectors.patch b/SOURCES/kvm-block-New-bdrv_nb_sectors.patch new file mode 100644 index 0000000..3276c59 --- /dev/null +++ b/SOURCES/kvm-block-New-bdrv_nb_sectors.patch @@ -0,0 +1,135 @@ +From 47601d6fd4a620799984340c1fd44ff472f9d824 Mon Sep 17 00:00:00 2001 +Message-Id: <47601d6fd4a620799984340c1fd44ff472f9d824.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:18 -0600 +Subject: [CHANGE 24/31] block: New bdrv_nb_sectors() +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-25-git-send-email-famz@redhat.com> +Patchwork-id: 62697 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 24/30] block: New bdrv_nb_sectors() +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Markus Armbruster + +A call to retrieve the image size converts between bytes and sectors +several times: + +* BlockDriver method bdrv_getlength() returns bytes. + +* refresh_total_sectors() converts to sectors, rounding up, and stores + in total_sectors. + +* bdrv_getlength() converts total_sectors back to bytes (now rounded + up to a multiple of the sector size). + +* Callers wanting sectors rather bytes convert it right back. + Example: bdrv_get_geometry(). + +bdrv_nb_sectors() provides a way to omit the last two conversions. +It's exactly bdrv_getlength() with the conversion to bytes omitted. +It's functionally like bdrv_get_geometry() without its odd error +handling. + +Reimplement bdrv_getlength() and bdrv_get_geometry() on top of +bdrv_nb_sectors(). + +The next patches will convert some users of bdrv_getlength() to +bdrv_nb_sectors(). + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Reviewed-by: Benoit Canet +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 65a9bb25d6b7a4bb41edb102fa0363d81800b417) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block.c | 29 +++++++++++++++++++---------- + include/block/block.h | 1 + + 2 files changed, 20 insertions(+), 10 deletions(-) + +diff --git a/block.c b/block.c +index d7b6376..21418a6 100644 +--- a/block.c ++++ b/block.c +@@ -647,6 +647,7 @@ static int find_image_format(BlockDriverState *bs, const char *filename, + + /** + * Set the current 'total_sectors' value ++ * Return 0 on success, -errno on error. + */ + static int refresh_total_sectors(BlockDriverState *bs, int64_t hint) + { +@@ -3255,11 +3256,12 @@ int64_t bdrv_get_allocated_file_size(BlockDriverState *bs) + } + + /** +- * Length of a file in bytes. Return < 0 if error or unknown. ++ * Return number of sectors on success, -errno on error. + */ +-int64_t bdrv_getlength(BlockDriverState *bs) ++int64_t bdrv_nb_sectors(BlockDriverState *bs) + { + BlockDriver *drv = bs->drv; ++ + if (!drv) + return -ENOMEDIUM; + +@@ -3269,19 +3271,26 @@ int64_t bdrv_getlength(BlockDriverState *bs) + return ret; + } + } +- return bs->total_sectors * BDRV_SECTOR_SIZE; ++ return bs->total_sectors; ++} ++ ++/** ++ * Return length in bytes on success, -errno on error. ++ * The length is always a multiple of BDRV_SECTOR_SIZE. ++ */ ++int64_t bdrv_getlength(BlockDriverState *bs) ++{ ++ int64_t ret = bdrv_nb_sectors(bs); ++ ++ return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE; + } + + /* return 0 as number of sectors if no device present or error */ + void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr) + { +- int64_t length; +- length = bdrv_getlength(bs); +- if (length < 0) +- length = 0; +- else +- length = length >> BDRV_SECTOR_BITS; +- *nb_sectors_ptr = length; ++ int64_t nb_sectors = bdrv_nb_sectors(bs); ++ ++ *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors; + } + + /* throttling disk io limits */ +diff --git a/include/block/block.h b/include/block/block.h +index b06a9dc..c79a1e1 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -250,6 +250,7 @@ BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, + const char *backing_file); + int bdrv_get_backing_file_depth(BlockDriverState *bs); + int bdrv_truncate(BlockDriverState *bs, int64_t offset); ++int64_t bdrv_nb_sectors(BlockDriverState *bs); + int64_t bdrv_getlength(BlockDriverState *bs); + int64_t bdrv_get_allocated_file_size(BlockDriverState *bs); + void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); +-- +2.1.0 + diff --git a/SOURCES/kvm-block-Print-its-file-name-if-backing-file-opening-fa.patch b/SOURCES/kvm-block-Print-its-file-name-if-backing-file-opening-fa.patch new file mode 100644 index 0000000..9d0ff66 --- /dev/null +++ b/SOURCES/kvm-block-Print-its-file-name-if-backing-file-opening-fa.patch @@ -0,0 +1,172 @@ +From 82023923707c148ddd91eb3ac18fc9befc4288d5 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 22 Jul 2015 16:24:55 +0200 +Subject: [PATCH 3/5] block: Print its file name if backing file opening failed + +Message-id: <1437582297-9244-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 67106 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/3] block: Print its file name if backing file opening failed +Bugzilla: 1238639 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +From: Fam Zheng + +If backing file doesn't exist, the error message is confusing and +misleading: + + $ qemu /tmp/a.qcow2 + qemu: could not open disk image /tmp/a.qcow2: Could not open file: No + such file or directory + +But... + + $ ls /tmp/a.qcow2 + /tmp/a.qcow2 + + $ qemu-img info /tmp/a.qcow2 + image: /tmp/a.qcow2 + file format: qcow2 + virtual size: 8.0G (8589934592 bytes) + disk size: 196K + cluster_size: 65536 + backing file: /tmp/b.qcow2 + +Because... + + $ ls /tmp/b.qcow2 + ls: cannot access /tmp/b.qcow2: No such file or directory + +This is not intuitive. It's better to have the missing file's name in +the error message. With this patch: + + $ qemu-io -c 'read 0 512' /tmp/a.qcow2 + qemu-io: can't open device /tmp/a.qcow2: Could not open backing + file: Could not open '/stor/vm/arch.raw': No such file or directory + no file open, try 'help open' + +Which is a little bit better. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit b04b6b6ec3a1e0ba90c2f58617286d9fc35fa372) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/082.out + tests/qemu-iotests/114.out + +When both tests were introduced downstream +(6b1816a687831a1622637ed10605759d9e90aa9c and +a0f50f0877463e9370ffa411bd826d7c704ab9fe, respectively), they were +modified from upstream because this patch had not been backported. These +changes are now reverted. + +Signed-off-by: Max Reitz +--- + block.c | 4 +++- + block/raw-posix.c | 1 - + block/raw-win32.c | 1 - + tests/qemu-iotests/051.out | 2 +- + tests/qemu-iotests/069.out | 2 +- + tests/qemu-iotests/082.out | 4 ++-- + tests/qemu-iotests/114.out | 2 +- + 7 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/block.c b/block.c +index e36fa2f..dedfa52 100644 +--- a/block.c ++++ b/block.c +@@ -1050,7 +1050,9 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + bdrv_unref(bs->backing_hd); + bs->backing_hd = NULL; + bs->open_flags |= BDRV_O_NO_BACKING; +- error_propagate(errp, local_err); ++ error_setg(errp, "Could not open backing file: %s", ++ error_get_pretty(local_err)); ++ error_free(local_err); + return ret; + } + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 46b941b..72a9dc0 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -388,7 +388,6 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + if (ret == -EROFS) { + ret = -EACCES; + } +- error_setg_errno(errp, -ret, "Could not open file"); + goto fail; + } + s->fd = fd; +diff --git a/block/raw-win32.c b/block/raw-win32.c +index ac20370..bb6dc6a 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -319,7 +319,6 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + } else { + ret = -EINVAL; + } +- error_setg_errno(errp, -ret, "Could not open file"); + goto fail; + } + +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 4fca1ca..32c94e5 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -169,6 +169,6 @@ Testing: -drive file=foo:bar + QEMU_PROG: -drive file=foo:bar: could not open disk image foo:bar: Unknown protocol + + Testing: -drive file.filename=foo:bar +-QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: Could not open file: No such file or directory ++QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: Could not open 'foo:bar': No such file or directory + + *** done +diff --git a/tests/qemu-iotests/069.out b/tests/qemu-iotests/069.out +index 3648814..b48306d 100644 +--- a/tests/qemu-iotests/069.out ++++ b/tests/qemu-iotests/069.out +@@ -4,5 +4,5 @@ QA output created by 069 + + Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=131072 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072 backing_file='TEST_DIR/t.IMGFMT.base' +-qemu-io: can't open device TEST_DIR/t.IMGFMT: Could not open file: No such file or directory ++qemu-io: can't open device TEST_DIR/t.IMGFMT: Could not open backing file: Could not open 'TEST_DIR/t.IMGFMT.base': No such file or directory + *** done +diff --git a/tests/qemu-iotests/082.out b/tests/qemu-iotests/082.out +index 8abfde7..41324d5 100644 +--- a/tests/qemu-iotests/082.out ++++ b/tests/qemu-iotests/082.out +@@ -326,10 +326,10 @@ preallocation Preallocation mode (allowed values: off, metadata, falloc, full + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +-qemu-img: Could not open 'TEST_DIR/t.qcow2.base': Could not open file: No such file or directory ++qemu-img: Could not open 'TEST_DIR/t.qcow2.base': Could not open backing file: Could not open 'TEST_DIR/t.qcow2,help': No such file or directory + + Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2,,? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +-qemu-img: Could not open 'TEST_DIR/t.qcow2.base': Could not open file: No such file or directory ++qemu-img: Could not open 'TEST_DIR/t.qcow2.base': Could not open backing file: Could not open 'TEST_DIR/t.qcow2,?': No such file or directory + + Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2, -o help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base + qemu-img: Invalid option list: backing_file=TEST_DIR/t.qcow2, +diff --git a/tests/qemu-iotests/114.out b/tests/qemu-iotests/114.out +index de8f529..6c6b210 100644 +--- a/tests/qemu-iotests/114.out ++++ b/tests/qemu-iotests/114.out +@@ -7,7 +7,7 @@ virtual size: 64M (67108864 bytes) + cluster_size: 65536 + backing file: TEST_DIR/t.IMGFMT.base + backing file format: foo +-qemu-io: can't open device TEST_DIR/t.qcow2: Unknown driver 'foo' ++qemu-io: can't open device TEST_DIR/t.qcow2: Could not open backing file: Unknown driver 'foo' + read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Produce-zeros-when-protocols-reading-beyond-en.patch b/SOURCES/kvm-block-Produce-zeros-when-protocols-reading-beyond-en.patch new file mode 100644 index 0000000..f8ad289 --- /dev/null +++ b/SOURCES/kvm-block-Produce-zeros-when-protocols-reading-beyond-en.patch @@ -0,0 +1,106 @@ +From 12e88a4a74931578a5582b5caeca135fe85fb01b Mon Sep 17 00:00:00 2001 +From: Asias He +Date: Thu, 12 Sep 2013 07:39:34 +0200 +Subject: [PATCH 14/29] block: Produce zeros when protocols reading beyond end of file + +RH-Author: Asias He +Message-id: <1378971575-22416-4-git-send-email-asias@redhat.com> +Patchwork-id: 54325 +O-Subject: [RHEL7.0 qemu-kvm PATCH 3/4] block: Produce zeros when protocols reading beyond end of file +Bugzilla: 1007226 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +From: MORITA Kazutaka + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1005052 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6275752 + +While Asias is debugging an issue creating qcow2 images on top of +non-file protocols. It boils down to this example using NBD: + +$ qemu-io -c 'open -g nbd+unix:///?socket=/tmp/nbd.sock' -c 'read -v 0 512' + +Notice the open -g option to set bs->growable. This means you can +read/write beyond end of file. Reading beyond end of file is supposed +to produce zeroes. + +We rely on this behavior in qcow2_create2() during qcow2 image +creation. We create a new file and then write the qcow2 header +structure using bdrv_pwrite(). Since QCowHeader is not a multiple of +sector size, block.c first uses bdrv_read() on the empty file to fetch +the first sector (should be all zeroes). + +Here is the output from the qemu-io NBD example above: + +$ qemu-io -c 'open -g nbd+unix:///?socket=/tmp/nbd.sock' -c 'read -v 0 512' +00000000: ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ................ +00000010: ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ................ +00000020: ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ................ +... + +We are not zeroing the buffer! As a result qcow2 image creation on top +of protocols is not guaranteed to work even when file creation is +supported by the protocol. + +[Adapted this patch to use bs->zero_beyond_eof. +-- Stefan] + +Signed-off-by: MORITA Kazutaka +Signed-off-by: Asias He +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 893a8f6220368a9ebff9a74bd48359928545cf6a) +--- + block.c | 30 +++++++++++++++++++++++++++++- + 1 file changed, 29 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 30 +++++++++++++++++++++++++++++- + 1 files changed, 29 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index dbcad0e..a3bc800 100644 +--- a/block.c ++++ b/block.c +@@ -2555,7 +2555,35 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, + } + } + +- ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov); ++ if (!(bs->zero_beyond_eof && bs->growable)) { ++ ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov); ++ } else { ++ /* Read zeros after EOF of growable BDSes */ ++ int64_t len, total_sectors, max_nb_sectors; ++ ++ len = bdrv_getlength(bs); ++ if (len < 0) { ++ ret = len; ++ goto out; ++ } ++ ++ total_sectors = len >> BDRV_SECTOR_BITS; ++ max_nb_sectors = MAX(0, total_sectors - sector_num); ++ if (max_nb_sectors > 0) { ++ ret = drv->bdrv_co_readv(bs, sector_num, ++ MIN(nb_sectors, max_nb_sectors), qiov); ++ } else { ++ ret = 0; ++ } ++ ++ /* Reading beyond end of file is supposed to produce zeroes */ ++ if (ret == 0 && total_sectors < sector_num + nb_sectors) { ++ uint64_t offset = MAX(0, total_sectors - sector_num); ++ uint64_t bytes = (sector_num + nb_sectors - offset) * ++ BDRV_SECTOR_SIZE; ++ qemu_iovec_memset(qiov, offset * BDRV_SECTOR_SIZE, 0, bytes); ++ } ++ } + + out: + tracked_request_end(&req); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Propagate-error-in-bdrv_img_create.patch b/SOURCES/kvm-block-Propagate-error-in-bdrv_img_create.patch new file mode 100644 index 0000000..496abf1 --- /dev/null +++ b/SOURCES/kvm-block-Propagate-error-in-bdrv_img_create.patch @@ -0,0 +1,55 @@ +From 3b439999998f800a1a09d6bb779e9f3eef4f1eb9 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 22 Jul 2015 16:24:56 +0200 +Subject: [PATCH 4/5] block: Propagate error in bdrv_img_create() + +Message-id: <1437582297-9244-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 67107 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/3] block: Propagate error in bdrv_img_create() +Bugzilla: 1238639 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +If the specified backing file could not be opened, do not generate a new +error message which contains the message which has been generated by +bdrv_open(), but just propagate the latter. + +Signed-off-by: Max Reitz +Reviewed-by: Kevin Wolf +Reviewed-by: Peter Lieven +Signed-off-by: Kevin Wolf +(cherry picked from commit e56934becea70817124be1534f4289ce7d8f6733) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block.c + +A conflict in the code being removed due to +83d0521a1e35989b0cb7235aef48455fedda3ca4 missing downstream. + +Signed-off-by: Max Reitz +--- + block.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/block.c b/block.c +index dedfa52..bc6e75c 100644 +--- a/block.c ++++ b/block.c +@@ -5489,11 +5489,6 @@ void bdrv_img_create(const char *filename, const char *fmt, + ret = bdrv_open(bs, backing_file->value.s, NULL, back_flags, + backing_drv, &local_err); + if (ret < 0) { +- error_setg_errno(errp, -ret, "Could not open '%s': %s", +- backing_file->value.s, +- error_get_pretty(local_err)); +- error_free(local_err); +- local_err = NULL; + goto out; + } + bdrv_get_geometry(bs, &size); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Respect-underlying-file-s-EOF.patch b/SOURCES/kvm-block-Respect-underlying-file-s-EOF.patch new file mode 100644 index 0000000..0a8edf2 --- /dev/null +++ b/SOURCES/kvm-block-Respect-underlying-file-s-EOF.patch @@ -0,0 +1,65 @@ +From 69fe324e32aad7e1afc6ad14021a6a08ad52646c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:27 +0200 +Subject: [PATCH 33/42] block: Respect underlying file's EOF + +Message-id: <1434212556-3927-34-git-send-email-mreitz@redhat.com> +Patchwork-id: 66052 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 33/42] block: Respect underlying file's EOF +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +When falling through to the underlying file in +bdrv_co_get_block_status(), if it returns that the query offset is +beyond the file end (by setting *pnum to 0), return the range to be +zero and do not let the number of sectors for which information could be +obtained be overwritten. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 59c9a95fd29cfb3296ee58e8a446df251d14a459) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 22ab762..fa6e192 100644 +--- a/block.c ++++ b/block.c +@@ -3797,13 +3797,24 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + if (bs->file && + (ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO) && + (ret & BDRV_BLOCK_OFFSET_VALID)) { ++ int file_pnum; ++ + ret2 = bdrv_co_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS, +- *pnum, pnum); ++ *pnum, &file_pnum); + if (ret2 >= 0) { + /* Ignore errors. This is just providing extra information, it + * is useful but not necessary. + */ +- ret |= (ret2 & BDRV_BLOCK_ZERO); ++ if (!file_pnum) { ++ /* !file_pnum indicates an offset at or beyond the EOF; it is ++ * perfectly valid for the format block driver to point to such ++ * offsets, so catch it and mark everything as zero */ ++ ret |= BDRV_BLOCK_ZERO; ++ } else { ++ /* Limit request to the range reported by the protocol driver */ ++ *pnum = file_pnum; ++ ret |= (ret2 & BDRV_BLOCK_ZERO); ++ } + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-Round-up-total_sectors.patch b/SOURCES/kvm-block-Round-up-total_sectors.patch new file mode 100644 index 0000000..4797343 --- /dev/null +++ b/SOURCES/kvm-block-Round-up-total_sectors.patch @@ -0,0 +1,56 @@ +From 67a51a2fa1212326602dac399027ca94e382a7f2 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 20 Nov 2013 09:16:44 +0100 +Subject: [PATCH 05/14] block: Round up total_sectors + +RH-Author: Fam Zheng +Message-id: <1384939004-30831-3-git-send-email-famz@redhat.com> +Patchwork-id: 55785 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] block: Round up total_sectors +Bugzilla: 1025138 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Since b94a2610, bdrv_getlength() is omitted when probing image. VMDK +monolithicFlat is broken by that because a file < 512 bytes can't be +read with its total_sectors truncated to 0. This patch round up the size +to BDRV_SECTOR_SIZE, when a image size is not sector aligned. + +Signed-off-by: Fam Zheng +Reviewed-by: Benoit Canet +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7e382003f1bd9d8a441ecc5ac8a74bad3564d943) +Signed-off-by: Fam Zheng + +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +Signed-off-by: Fam Zheng +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 301c4fb..72ab36c 100644 +--- a/block.c ++++ b/block.c +@@ -612,7 +612,7 @@ static int refresh_total_sectors(BlockDriverState *bs, int64_t hint) + if (length < 0) { + return length; + } +- hint = length >> BDRV_SECTOR_BITS; ++ hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE); + } + + bs->total_sectors = hint; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Set-block-filename-sizes-to-PATH_MAX-instead-o.patch b/SOURCES/kvm-block-Set-block-filename-sizes-to-PATH_MAX-instead-o.patch new file mode 100644 index 0000000..00f6d6e --- /dev/null +++ b/SOURCES/kvm-block-Set-block-filename-sizes-to-PATH_MAX-instead-o.patch @@ -0,0 +1,155 @@ +From 339b5cbcea1d459d2a0fc4d289e17fc71622be23 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 4 Mar 2014 19:38:27 +0100 +Subject: [PATCH 6/6] block: Set block filename sizes to PATH_MAX instead of 1024 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 58013 +O-Subject: [RHEL7 qemu-kvm PATCH] block: Set block filename sizes to PATH_MAX instead of 1024 +Bugzilla: 1072339 +RH-Acked-by: Eric Blake +RH-Acked-by: Amos Kong +RH-Acked-by: Stefan Hajnoczi + +This is an interim fix for a regression introduced by: + + commit dc5a137125d6ac641c566f10e68bf6e1fe31bcb5 + qemu-img: make "info" backing file output correct and easier to use + +In that commit, bdrv_get_full_backing_filename() was introduced, +which replaced calling path_combine() manually. The difference +is that rather than using the filename string as passed to +bdrv_open(), it uses the filename string attached to the BDS. + +Both the backing_file and filename strings in the BDS are limited to +1024 characters. The backing_file string built up in bdrv_open(), +however, has a limit of PATH_MAX, which is 4096 under Linux. + +This difference comes into play when using an image chain that has +a medium-to-large number of images, all of which have relative-pathed +backing file references to the parent directory. + +For instance, consider the following backing chain: + +tstA +├── base.qcow2 +├── sn1.qcow2 (backing file ../tstA/base.qcow2) +├── sn2.qcow2 (backing file ../tstA/sn1.qcow2) +└── sn3.qcow2 (backing file ../tstA/sn2.qcow2) + +The backing filename string is built up with the relative paths intact, +like so: + + base.qcow2: ../tstA../tstA../tstA/base.qcow2 + +The backing filename is then passed into the bdrv_open() call to open +the backing file. + +When using lv volume names, the snapshot and pathname ends up longer, +and after ~23 snapshots we have hit or exceeded the 1024 byte limit +for the BDS filename. + +This fix is different then the approach for RHEL6.6/6.5.z, because in +those it was trivial to modify bdrv_get_full_backing_filename(). In +RHEL7, there are places that use bdrv_get_backing_filename(), which +call bdrv_get_full_backing_filename(), yet do not have access to a +filename string that does not originate from the BDS. The simplest +approach, that should yield identical results, is to set all of the +filename and backing_file string sizes to PATH_MAX instead of 1024. + +This is not a long-term solution, because a character limit of 4096 +bytes will be hit with additional images. The proper long-term +solution should happen upstream first, and consist of: + +1) dynamically allocated filename strings in the BDS +2) flattening redundant relative pathname strings + +This is a bug that was reported in RHEL6, that also occurs in RHEL7. To +prevent a regression in RHEL7.0, this temporary solution will prevent +the regression, while not eliminating the ultimate problem. + +Since this is not the final solution, and the fix really is relevant +just to undo a regression, the fix is downstream only. It will be +replaced by the final upstream fix, once complete. + +BZ 1072339 +RHEL Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7140291 +RHEV Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7140320 +--- + block/mirror.c | 2 +- + block/qapi.c | 2 +- + block/stream.c | 2 +- + include/block/block_int.h | 6 +++--- + 4 files changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 2 +- + block/qapi.c | 2 +- + block/stream.c | 2 +- + include/block/block_int.h | 6 +++--- + 4 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index ba1428b..47e14cd 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -297,7 +297,7 @@ static void coroutine_fn mirror_run(void *opaque) + int64_t sector_num, end, sectors_per_chunk, length; + uint64_t last_pause_ns; + BlockDriverInfo bdi; +- char backing_filename[1024]; ++ char backing_filename[PATH_MAX]; + int ret = 0; + int n; + +diff --git a/block/qapi.c b/block/qapi.c +index 77e1719..2d4bdcd 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -112,7 +112,7 @@ void bdrv_query_image_info(BlockDriverState *bs, + { + uint64_t total_sectors; + const char *backing_filename; +- char backing_filename2[1024]; ++ char backing_filename2[PATH_MAX]; + BlockDriverInfo bdi; + int ret; + Error *err = NULL; +diff --git a/block/stream.c b/block/stream.c +index 3a7d8f3..2a6f533 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -32,7 +32,7 @@ typedef struct StreamBlockJob { + RateLimit limit; + BlockDriverState *base; + BlockdevOnError on_error; +- char backing_file_id[1024]; ++ char backing_file_id[PATH_MAX]; + } StreamBlockJob; + + static int coroutine_fn stream_populate(BlockDriverState *bs, +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 2ec4bb2..53fc98c 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -269,9 +269,9 @@ struct BlockDriverState { + const BlockDevOps *dev_ops; + void *dev_opaque; + +- char filename[1024]; +- char backing_file[1024]; /* if non zero, the image is a diff of +- this file image */ ++ char filename[PATH_MAX]; ++ char backing_file[PATH_MAX]; /* if non zero, the image is a diff of ++ this file image */ + char backing_format[16]; /* if non-zero and backing_file exists */ + int is_temporary; + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Switch-BdrvTrackedRequest-to-byte-granularity.patch b/SOURCES/kvm-block-Switch-BdrvTrackedRequest-to-byte-granularity.patch new file mode 100644 index 0000000..f8039af --- /dev/null +++ b/SOURCES/kvm-block-Switch-BdrvTrackedRequest-to-byte-granularity.patch @@ -0,0 +1,163 @@ +From e0f594c3eac9fb0a89c76de3b77bce03c235b36e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 3 Dec 2013 15:31:25 +0100 +Subject: [PATCH 16/37] block: Switch BdrvTrackedRequest to byte granularity + +Message-id: <1392117622-28812-17-git-send-email-kwolf@redhat.com> +Patchwork-id: 57181 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 16/37] block: Switch BdrvTrackedRequest to byte granularity +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 793ed47a7a2b09b67cb2a8863dff531436532b5c) + +Conflicts: + block/backup.c + include/block/block_int.h + +Conflicts because in RHEL 7... +- ...block-backup doesn't exist +- ...BdrvTrackedRequest is in block.c rather than block_int.h + +Signed-off-by: Kevin Wolf +--- + block.c | 56 ++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 36 insertions(+), 20 deletions(-) +--- + block.c | 56 ++++++++++++++++++++++++++++++++++++-------------------- + 1 files changed, 36 insertions(+), 20 deletions(-) + +diff --git a/block.c b/block.c +index 7b8131c..09bb127 100644 +--- a/block.c ++++ b/block.c +@@ -2036,8 +2036,8 @@ int bdrv_commit_all(void) + + struct BdrvTrackedRequest { + BlockDriverState *bs; +- int64_t sector_num; +- int nb_sectors; ++ int64_t offset; ++ unsigned int bytes; + bool is_write; + QLIST_ENTRY(BdrvTrackedRequest) list; + Coroutine *co; /* owner, used for deadlock detection */ +@@ -2060,13 +2060,13 @@ static void tracked_request_end(BdrvTrackedRequest *req) + */ + static void tracked_request_begin(BdrvTrackedRequest *req, + BlockDriverState *bs, +- int64_t sector_num, +- int nb_sectors, bool is_write) ++ int64_t offset, ++ unsigned int bytes, bool is_write) + { + *req = (BdrvTrackedRequest){ + .bs = bs, +- .sector_num = sector_num, +- .nb_sectors = nb_sectors, ++ .offset = offset, ++ .bytes = bytes, + .is_write = is_write, + .co = qemu_coroutine_self(), + }; +@@ -2097,25 +2097,43 @@ void bdrv_round_to_clusters(BlockDriverState *bs, + } + } + ++static void round_bytes_to_clusters(BlockDriverState *bs, ++ int64_t offset, unsigned int bytes, ++ int64_t *cluster_offset, ++ unsigned int *cluster_bytes) ++{ ++ BlockDriverInfo bdi; ++ ++ if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) { ++ *cluster_offset = offset; ++ *cluster_bytes = bytes; ++ } else { ++ *cluster_offset = QEMU_ALIGN_DOWN(offset, bdi.cluster_size); ++ *cluster_bytes = QEMU_ALIGN_UP(offset - *cluster_offset + bytes, ++ bdi.cluster_size); ++ } ++} ++ + static bool tracked_request_overlaps(BdrvTrackedRequest *req, +- int64_t sector_num, int nb_sectors) { ++ int64_t offset, unsigned int bytes) ++{ + /* aaaa bbbb */ +- if (sector_num >= req->sector_num + req->nb_sectors) { ++ if (offset >= req->offset + req->bytes) { + return false; + } + /* bbbb aaaa */ +- if (req->sector_num >= sector_num + nb_sectors) { ++ if (req->offset >= offset + bytes) { + return false; + } + return true; + } + + static void coroutine_fn wait_for_overlapping_requests(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors) ++ int64_t offset, unsigned int bytes) + { + BdrvTrackedRequest *req; +- int64_t cluster_sector_num; +- int cluster_nb_sectors; ++ int64_t cluster_offset; ++ unsigned int cluster_bytes; + bool retry; + + /* If we touch the same cluster it counts as an overlap. This guarantees +@@ -2124,14 +2142,12 @@ static void coroutine_fn wait_for_overlapping_requests(BlockDriverState *bs, + * CoR read and write operations are atomic and guest writes cannot + * interleave between them. + */ +- bdrv_round_to_clusters(bs, sector_num, nb_sectors, +- &cluster_sector_num, &cluster_nb_sectors); ++ round_bytes_to_clusters(bs, offset, bytes, &cluster_offset, &cluster_bytes); + + do { + retry = false; + QLIST_FOREACH(req, &bs->tracked_requests, list) { +- if (tracked_request_overlaps(req, cluster_sector_num, +- cluster_nb_sectors)) { ++ if (tracked_request_overlaps(req, cluster_offset, cluster_bytes)) { + /* Hitting this means there was a reentrant request, for + * example, a block driver issuing nested requests. This must + * never happen since it means deadlock. +@@ -2746,10 +2762,10 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + } + + if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, sector_num, nb_sectors); ++ wait_for_overlapping_requests(bs, offset, bytes); + } + +- tracked_request_begin(&req, bs, sector_num, nb_sectors, false); ++ tracked_request_begin(&req, bs, offset, bytes, false); + + if (flags & BDRV_REQ_COPY_ON_READ) { + int pnum; +@@ -2998,10 +3014,10 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + + if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, sector_num, nb_sectors); ++ wait_for_overlapping_requests(bs, offset, bytes); + } + +- tracked_request_begin(&req, bs, sector_num, nb_sectors, true); ++ tracked_request_begin(&req, bs, offset, bytes, true); + + if (flags & BDRV_REQ_ZERO_WRITE) { + ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Update-BlockLimits-when-they-might-have-change.patch b/SOURCES/kvm-block-Update-BlockLimits-when-they-might-have-change.patch new file mode 100644 index 0000000..1e06421 --- /dev/null +++ b/SOURCES/kvm-block-Update-BlockLimits-when-they-might-have-change.patch @@ -0,0 +1,101 @@ +From 39fd66a311ade8aa330c6c32f1b2a3669e6db44f Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 11 Dec 2013 20:14:09 +0100 +Subject: [PATCH 05/37] block: Update BlockLimits when they might have changed +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1392117622-28812-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 57170 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 05/37] block: Update BlockLimits when they might have changed +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +When reopening with different flags, or when backing files disappear +from the chain, the limits may change. Make sure they get updated in +these cases. + +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +Reviewed-by: Benoît Canet +(cherry picked from commit 355ef4ac95a7a47d5c7201ccd910056a100d2fdf) + +Conflicts: + block/stream.c + +Trivial context-only conflict. + +Signed-off-by: Kevin Wolf +--- + block.c | 5 ++++- + block/stream.c | 2 ++ + include/block/block.h | 1 + + 3 files changed, 7 insertions(+), 1 deletion(-) +--- + block.c | 5 ++++- + block/stream.c | 2 ++ + include/block/block.h | 1 + + 3 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 8b36d05..f62acbd 100644 +--- a/block.c ++++ b/block.c +@@ -446,7 +446,7 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options, + return ret; + } + +-static int bdrv_refresh_limits(BlockDriverState *bs) ++int bdrv_refresh_limits(BlockDriverState *bs) + { + BlockDriver *drv = bs->drv; + +@@ -1452,6 +1452,8 @@ void bdrv_reopen_commit(BDRVReopenState *reopen_state) + reopen_state->bs->enable_write_cache = !!(reopen_state->flags & + BDRV_O_CACHE_WB); + reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR); ++ ++ bdrv_refresh_limits(reopen_state->bs); + } + + /* +@@ -2284,6 +2286,7 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, + } + new_top_bs->backing_hd = base_bs; + ++ bdrv_refresh_limits(new_top_bs); + + QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) { + /* so that bdrv_close() does not recursively close the chain */ +diff --git a/block/stream.c b/block/stream.c +index 1420d09..3a7d8f3 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -71,6 +71,8 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base, + bdrv_unref(unused); + } + top->backing_hd = base; ++ ++ bdrv_refresh_limits(top); + } + + static void coroutine_fn stream_run(void *opaque) +diff --git a/include/block/block.h b/include/block/block.h +index d20d63e..3e22fc2 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -250,6 +250,7 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset); + int64_t bdrv_getlength(BlockDriverState *bs); + int64_t bdrv_get_allocated_file_size(BlockDriverState *bs); + void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); ++int bdrv_refresh_limits(BlockDriverState *bs); + int bdrv_commit(BlockDriverState *bs); + int bdrv_commit_all(void); + int bdrv_change_backing_file(BlockDriverState *bs, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Update-image-size-in-bdrv_invalidate_cache.patch b/SOURCES/kvm-block-Update-image-size-in-bdrv_invalidate_cache.patch new file mode 100644 index 0000000..0962a9b --- /dev/null +++ b/SOURCES/kvm-block-Update-image-size-in-bdrv_invalidate_cache.patch @@ -0,0 +1,98 @@ +From ceea60585e2975d7860725bb8c6c860b791a4b72 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 17 Mar 2014 13:29:26 +0100 +Subject: [PATCH 2/6] block: Update image size in bdrv_invalidate_cache() + +RH-Author: Kevin Wolf +Message-id: <1395062967-16867-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 58111 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] block: Update image size in bdrv_invalidate_cache() +Bugzilla: 1048575 +RH-Acked-by: Max Reitz +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +After migration has completed, we call bdrv_invalidate_cache() so that +drivers which cache some data drop their stale copy of the data and +reread it from the image file to get a new version of data that the +source modified while the migration was running. + +Reloading metadata from the image file is useless, though, if the size +of the image file stays stale (this is a value that is cached for all +image formats in block.c). Reads from (meta)data after the old EOF +return only zeroes, causing image corruption. + +We need to update bs->total_sectors in all layers that could potentially +have changed their size (i.e. backing files are not a concern - if they +are changed, we're in bigger trouble) + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3456a8d1852e970688b73d03fdc44dde851759e1) +Signed-off-by: Kevin Wolf +--- + block.c | 10 +++++++++- + block/qcow2.c | 2 ++ + block/qed.c | 3 +++ + 3 files changed, 14 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 10 +++++++++- + block/qcow2.c | 2 ++ + block/qed.c | 3 +++ + 3 files changed, 14 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index ec8dc90..ae55535 100644 +--- a/block.c ++++ b/block.c +@@ -4713,9 +4713,17 @@ flush_parent: + + void bdrv_invalidate_cache(BlockDriverState *bs) + { +- if (bs->drv && bs->drv->bdrv_invalidate_cache) { ++ if (!bs->drv) { ++ return; ++ } ++ ++ if (bs->drv->bdrv_invalidate_cache) { + bs->drv->bdrv_invalidate_cache(bs); ++ } else if (bs->file) { ++ bdrv_invalidate_cache(bs->file); + } ++ ++ refresh_total_sectors(bs, bs->total_sectors); + } + + void bdrv_invalidate_cache_all(void) +diff --git a/block/qcow2.c b/block/qcow2.c +index daad932..e9bd9c9 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1176,6 +1176,8 @@ static void qcow2_invalidate_cache(BlockDriverState *bs) + + qcow2_close(bs); + ++ bdrv_invalidate_cache(bs->file); ++ + options = qdict_new(); + qdict_put(options, QCOW2_OPT_LAZY_REFCOUNTS, + qbool_from_int(s->use_lazy_refcounts)); +diff --git a/block/qed.c b/block/qed.c +index be5945b..619f2d0 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -1561,6 +1561,9 @@ static void bdrv_qed_invalidate_cache(BlockDriverState *bs) + BDRVQEDState *s = bs->opaque; + + bdrv_qed_close(bs); ++ ++ bdrv_invalidate_cache(bs->file); ++ + memset(s, 0, sizeof(BDRVQEDState)); + bdrv_qed_open(bs, NULL, bs->open_flags, NULL); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-Use-correct-width-in-format-strings.patch b/SOURCES/kvm-block-Use-correct-width-in-format-strings.patch new file mode 100644 index 0000000..381169a --- /dev/null +++ b/SOURCES/kvm-block-Use-correct-width-in-format-strings.patch @@ -0,0 +1,213 @@ +From 7e3dcd5daa2a5e7350bf3dadacdd6dcd1a2460fc Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:45 +0200 +Subject: [PATCH 07/20] block: Use correct width in format strings + +Message-id: +Patchwork-id: 61211 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 06/15] block: Use correct width in format strings +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Max Reitz + +Instead of blindly relying on a normal integer having a width of 32 bits +(which is a pretty good assumption, but we should not rely on it if +there is no need), use the correct format string macros. + +This does not touch DEBUG output. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 521b2b5df0ccad764cf95164c6e428f855067a6f) + +Conflicts: + block/vdi.c + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/cow.c | 2 +- + block/dmg.c | 8 ++++---- + block/qcow.c | 3 ++- + block/qcow2.c | 12 +++++++----- + block/sheepdog.c | 6 +++--- + block/vdi.c | 21 +++++++++++---------- + 6 files changed, 28 insertions(+), 24 deletions(-) + +diff --git a/block/cow.c b/block/cow.c +index 651bdff..c75668b 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -82,7 +82,7 @@ static int cow_open(BlockDriverState *bs, QDict *options, int flags, + if (be32_to_cpu(cow_header.version) != COW_VERSION) { + char version[64]; + snprintf(version, sizeof(version), +- "COW version %d", cow_header.version); ++ "COW version %" PRIu32, cow_header.version); + error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, + bs->device_name, "cow", version); + ret = -ENOTSUP; +diff --git a/block/dmg.c b/block/dmg.c +index 856402e..1e153cd 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -248,8 +248,8 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + offset += 8; + + if (s->sectorcounts[i] > DMG_SECTORCOUNTS_MAX) { +- error_report("sector count %" PRIu64 " for chunk %u is " +- "larger than max (%u)", ++ error_report("sector count %" PRIu64 " for chunk %" PRIu32 ++ " is larger than max (%u)", + s->sectorcounts[i], i, DMG_SECTORCOUNTS_MAX); + ret = -EINVAL; + goto fail; +@@ -269,8 +269,8 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + offset += 8; + + if (s->lengths[i] > DMG_LENGTHS_MAX) { +- error_report("length %" PRIu64 " for chunk %u is larger " +- "than max (%u)", ++ error_report("length %" PRIu64 " for chunk %" PRIu32 ++ " is larger than max (%u)", + s->lengths[i], i, DMG_LENGTHS_MAX); + ret = -EINVAL; + goto fail; +diff --git a/block/qcow.c b/block/qcow.c +index a5f601f..be5d3e9 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -121,7 +121,8 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + } + if (header.version != QCOW_VERSION) { + char version[64]; +- snprintf(version, sizeof(version), "QCOW version %d", header.version); ++ snprintf(version, sizeof(version), "QCOW version %" PRIu32, ++ header.version); + error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, + bs->device_name, "qcow", version); + ret = -ENOTSUP; +diff --git a/block/qcow2.c b/block/qcow2.c +index 0878d88..a679355 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -124,8 +124,9 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + + case QCOW2_EXT_MAGIC_BACKING_FORMAT: + if (ext.len >= sizeof(bs->backing_format)) { +- error_setg(errp, "ERROR: ext_backing_format: len=%u too large" +- " (>=%zu)", ext.len, sizeof(bs->backing_format)); ++ error_setg(errp, "ERROR: ext_backing_format: len=%" PRIu32 ++ " too large (>=%zu)", ext.len, ++ sizeof(bs->backing_format)); + return 2; + } + ret = bdrv_pread(bs->file, offset, bs->backing_format, ext.len); +@@ -480,7 +481,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + if (header.version < 2 || header.version > 3) { +- report_unsupported(bs, errp, "QCOW version %d", header.version); ++ report_unsupported(bs, errp, "QCOW version %" PRIu32, header.version); + ret = -ENOTSUP; + goto fail; + } +@@ -490,7 +491,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + /* Initialise cluster size */ + if (header.cluster_bits < MIN_CLUSTER_BITS || + header.cluster_bits > MAX_CLUSTER_BITS) { +- error_setg(errp, "Unsupported cluster size: 2^%i", header.cluster_bits); ++ error_setg(errp, "Unsupported cluster size: 2^%" PRIu32, ++ header.cluster_bits); + ret = -EINVAL; + goto fail; + } +@@ -587,7 +589,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->refcount_order = header.refcount_order; + + if (header.crypt_method > QCOW_CRYPT_AES) { +- error_setg(errp, "Unsupported encryption method: %i", ++ error_setg(errp, "Unsupported encryption method: %" PRIu32, + header.crypt_method); + ret = -EINVAL; + goto fail; +diff --git a/block/sheepdog.c b/block/sheepdog.c +index b3a2ae8..f29b4e7 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -995,7 +995,7 @@ static int find_vdi_name(BDRVSheepdogState *s, const char *filename, + } + + if (rsp->result != SD_RES_SUCCESS) { +- error_report("cannot get vdi info, %s, %s %d %s", ++ error_report("cannot get vdi info, %s, %s %" PRIu32 " %s", + sd_strerror(rsp->result), filename, snapid, tag); + if (rsp->result == SD_RES_NO_VDI) { + ret = -ENOENT; +@@ -2175,8 +2175,8 @@ static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab) + sn_tab[found].vm_state_size = inode.vm_state_size; + sn_tab[found].vm_clock_nsec = inode.vm_clock_nsec; + +- snprintf(sn_tab[found].id_str, sizeof(sn_tab[found].id_str), "%u", +- inode.snap_id); ++ snprintf(sn_tab[found].id_str, sizeof(sn_tab[found].id_str), ++ "%" PRIu32, inode.snap_id); + pstrcpy(sn_tab[found].name, + MIN(sizeof(sn_tab[found].name), sizeof(inode.tag)), + inode.tag); +diff --git a/block/vdi.c b/block/vdi.c +index 0f8b294..fecfa14 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -408,34 +408,35 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (header.signature != VDI_SIGNATURE) { +- error_setg(errp, "Image not in VDI format (bad signature %08x)", header.signature); ++ error_setg(errp, "Image not in VDI format (bad signature %08" PRIx32 ++ ")", header.signature); + ret = -EINVAL; + goto fail; + } else if (header.version != VDI_VERSION_1_1) { +- error_setg(errp, "unsupported VDI image (version %u.%u)", +- header.version >> 16, header.version & 0xffff); ++ error_setg(errp, "unsupported VDI image (version %" PRIu32 ".%" PRIu32 ++ ")", header.version >> 16, header.version & 0xffff); + ret = -ENOTSUP; + goto fail; + } else if (header.offset_bmap % SECTOR_SIZE != 0) { + /* We only support block maps which start on a sector boundary. */ + error_setg(errp, "unsupported VDI image (unaligned block map offset " +- "0x%x)", header.offset_bmap); ++ "0x%" PRIx32 ")", header.offset_bmap); + ret = -ENOTSUP; + goto fail; + } else if (header.offset_data % SECTOR_SIZE != 0) { + /* We only support data blocks which start on a sector boundary. */ +- error_setg(errp, "unsupported VDI image (unaligned data offset 0x%x)", +- header.offset_data); ++ error_setg(errp, "unsupported VDI image (unaligned data offset 0x%" ++ PRIx32 ")", header.offset_data); + ret = -ENOTSUP; + goto fail; + } else if (header.sector_size != SECTOR_SIZE) { +- error_setg(errp, "unsupported VDI image (sector size %u is not %u)", +- header.sector_size, SECTOR_SIZE); ++ error_setg(errp, "unsupported VDI image (sector size %" PRIu32 ++ " is not %u)", header.sector_size, SECTOR_SIZE); + ret = -ENOTSUP; + goto fail; + } else if (header.block_size != DEFAULT_CLUSTER_SIZE) { +- error_setg(errp, "unsupported VDI image (sector size %u is not %u)", +- header.block_size, DEFAULT_CLUSTER_SIZE); ++ error_setg(errp, "unsupported VDI image (block size %" PRIu32 ++ " is not %u)", header.block_size, DEFAULT_CLUSTER_SIZE); + ret = -ENOTSUP; + goto fail; + } else if (header.disk_size > +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-.bdrv_reopen_prepare-stub-for-iscsi.patch b/SOURCES/kvm-block-add-.bdrv_reopen_prepare-stub-for-iscsi.patch new file mode 100644 index 0000000..6541d64 --- /dev/null +++ b/SOURCES/kvm-block-add-.bdrv_reopen_prepare-stub-for-iscsi.patch @@ -0,0 +1,66 @@ +From 865f21e1199cf38bc461b91c30d97bf1baceb8ba Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 28 Jan 2014 14:21:57 +0100 +Subject: [PATCH 22/22] block: add .bdrv_reopen_prepare() stub for iscsi + +RH-Author: Jeffrey Cody +Message-id: <884dd65be83603e336fac7a2fd2640ec52fe095d.1390918756.git.jcody@redhat.com> +Patchwork-id: 57003 +O-Subject: [RHEL7 qemu-kvm PATCH v2 1/1] block: add .bdrv_reopen_prepare() stub for iscsi +Bugzilla: 1030301 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +To suppport reopen(), the .bdrv_reopen_prepare() stub must exist. +iSCSI does not have anything that needs to be done to support reopen, +so we can just implement the _prepare() stub. + +Signed-off-by: Jeff Cody +Signed-off-by: Paolo Bonzini +(cherry picked from commit dc6afb99b39a78cf416c6d19e35f680f202016be) + +RHEL7 Note: It should be noted that this _prepare() empty stub + is all that is needed when performing a reopen, because + the bdrv flags are ignored by iscsi_open. Specifically, in + this form, reopen will not reconnect to an iSCSI target. + +--- + block/iscsi.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index fa6f7c4..1c5b0a2 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1506,6 +1506,14 @@ static void iscsi_close(BlockDriverState *bs) + memset(iscsilun, 0, sizeof(IscsiLun)); + } + ++/* We have nothing to do for iSCSI reopen, stub just returns ++ * success */ ++static int iscsi_reopen_prepare(BDRVReopenState *state, ++ BlockReopenQueue *queue, Error **errp) ++{ ++ return 0; ++} ++ + static int iscsi_truncate(BlockDriverState *bs, int64_t offset) + { + IscsiLun *iscsilun = bs->opaque; +@@ -1613,6 +1621,7 @@ static BlockDriver bdrv_iscsi = { + .bdrv_close = iscsi_close, + .bdrv_create = iscsi_create, + .create_options = iscsi_create_options, ++ .bdrv_reopen_prepare = iscsi_reopen_prepare, + + .bdrv_getlength = iscsi_getlength, + .bdrv_get_info = iscsi_get_info, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-BlockLimits-structure-to-BlockDriverState.patch.patch.patch b/SOURCES/kvm-block-add-BlockLimits-structure-to-BlockDriverState.patch.patch.patch new file mode 100644 index 0000000..bbe7512 --- /dev/null +++ b/SOURCES/kvm-block-add-BlockLimits-structure-to-BlockDriverState.patch.patch.patch @@ -0,0 +1,72 @@ +From ef41c637feebd279b017838b46dc5cfdb52c1ef6 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:00 +0100 +Subject: [PATCH 12/50] block: add BlockLimits structure to BlockDriverState + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-15-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56049 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 14/52] block: add BlockLimits structure to BlockDriverState +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +this patch adds BlockLimits which introduces discard and write_zeroes +limits and alignment information to the BlockDriverState. + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit fe81c2cca6dc69a5e423f6d8b235606b7f3ca7b7) +--- + include/block/block_int.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +Signed-off-by: Michal Novotny +--- + include/block/block_int.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 236c0c2..ab98c07 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -219,6 +219,20 @@ struct BlockDriver { + QLIST_ENTRY(BlockDriver) list; + }; + ++typedef struct BlockLimits { ++ /* maximum number of sectors that can be discarded at once */ ++ int max_discard; ++ ++ /* optimal alignment for discard requests in sectors */ ++ int64_t discard_alignment; ++ ++ /* maximum number of sectors that can zeroized at once */ ++ int max_write_zeroes; ++ ++ /* optimal alignment for write zeroes requests in sectors */ ++ int64_t write_zeroes_alignment; ++} BlockLimits; ++ + /* + * Note: the function bdrv_append() copies and swaps contents of + * BlockDriverStates, so if you add new fields to this struct, please +@@ -273,6 +287,9 @@ struct BlockDriverState { + uint64_t total_time_ns[BDRV_MAX_IOTYPE]; + uint64_t wr_highest_sector; + ++ /* I/O Limits */ ++ BlockLimits bl; ++ + /* Whether the disk can expand beyond total_sectors */ + int growable; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-__com.redhat_change-backing-file-qmp-comma.patch b/SOURCES/kvm-block-add-__com.redhat_change-backing-file-qmp-comma.patch new file mode 100644 index 0000000..f3149c4 --- /dev/null +++ b/SOURCES/kvm-block-add-__com.redhat_change-backing-file-qmp-comma.patch @@ -0,0 +1,124 @@ +From 8e79bb0e25c48354f895077b206ded171507ba55 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Fri, 19 Sep 2014 03:18:59 +0200 +Subject: [PATCH 20/20] block: add __com.redhat_change-backing-file qmp command + +Message-id: +Patchwork-id: 61313 +O-Subject: [PATCH qemu-kvm-rhev RHEL7.0.z 4/4] block: add __com.redhat_change-backing-file qmp command +Bugzilla: 1122925 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Eric Blake +RH-Acked-by: Stefan Hajnoczi + +Upstream, the QAPI command 'change-backing-file' was added in a patch, +as part of a series that allowed libvirt to specify backing file +names in block-commit and block-stream. + +This standalone QAPI (change-backing-file) is not currently in use by +libvirt, except as a witness that QEMU has the ability to change backing +files in block-commit and block-stream. + +However, change-backing-file also relies on node-names functionality, +which is not present in RHEL7.0. The backport of node-names would also +be fairly instrusive, especially for a command that is not going to be +used beyond verifying its presence. + +This downstream patch adds __com.redhat_change-backing-file, which +accepts the same arguments as its upstream namesake. However, no action +is performed, and the command always returns QERR_UNSUPPORTED. + +This is not placed inside the RHEL/RHEV differentiation commands, as it +is not a live block operation (upstream or the dummy version), and +returns synchronously. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 8 ++++++++ + qapi-schema.json | 16 ++++++++++++++++ + qmp-commands.hx | 22 ++++++++++++++++++++++ + 3 files changed, 46 insertions(+), 0 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 09ef3f7..7d4a53f 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1782,6 +1782,14 @@ void qmp_block_job_complete(const char *device, Error **errp) + block_job_complete(job, errp); + } + ++void qmp___com_redhat_change_backing_file(const char *device, ++ const char *image_node_name, ++ const char *backing_file, ++ Error **errp) ++{ ++ error_set(errp, QERR_UNSUPPORTED); ++} ++ + void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + { + QmpOutputVisitor *ov = qmp_output_visitor_new(); +diff --git a/qapi-schema.json b/qapi-schema.json +index 40bd2a6..d3d4e57 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1832,6 +1832,22 @@ + 'data': {'command-line': 'str', '*cpu-index': 'int'}, + 'returns': 'str' } + ++## ++# @__com.redhat_change-backing-file ++# ++# This is a placeholder function, that exists as a witness for libvirt ++# that the ability to specify backing files in block-commit and block-stream ++# exists in this version of QEMU. ++# ++# It has the same argument requirements as the upstream 'change-backing-file', ++# but performs no action. ++# ++# Returns: NotSupported ++## ++{ 'command': '__com.redhat_change-backing-file', ++ 'data': { 'device': 'str', 'image-node-name': 'str', ++ 'backing-file': 'str' } } ++ + #_rhev-only CONFIG_LIVE_BLOCK_OPS + ## + # @block-commit +diff --git a/qmp-commands.hx b/qmp-commands.hx +index c07cf8a..e164ff8 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1241,6 +1241,28 @@ EQMP + #endif + + { ++ .name = RFQDN_REDHAT "change-backing-file", ++ .args_type = "device:s,image-node-name:s,backing-file:s", ++ .mhandler.cmd_new = qmp_marshal_input___com_redhat_change_backing_file, ++ }, ++ ++SQMP ++@__com.redhat_change-backing-file ++------------------- ++@__com.redhat_change-backing-file ++ ++This is a placeholder function, that exists as a witness for libvirt ++that the ability to specify backing files block-commit and block-stream ++exists in this version of QEMU. ++ ++It has the same argument requirements as the upstream 'change-backing-file', ++but performs no action. ++ ++Returns: NotSupported ++ ++EQMP ++ ++ { + .name = "balloon", + .args_type = "value:M", + .mhandler.cmd_new = qmp_marshal_input_balloon, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-backing-file-option-to-block-stream.patch b/SOURCES/kvm-block-add-backing-file-option-to-block-stream.patch new file mode 100644 index 0000000..ecc2c5e --- /dev/null +++ b/SOURCES/kvm-block-add-backing-file-option-to-block-stream.patch @@ -0,0 +1,234 @@ +From 9482cf37df20d18140b24751972697f9349f1441 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Fri, 19 Sep 2014 03:18:58 +0200 +Subject: [PATCH 19/20] block: add backing-file option to block-stream + +Message-id: <5b8611fab581db6b4c5eb31c998378090819268d.1411096194.git.jcody@redhat.com> +Patchwork-id: 61312 +O-Subject: [PATCH qemu-kvm-rhev RHEL7.0.z 3/4] block: add backing-file option to block-stream +Bugzilla: 1122925 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Eric Blake +RH-Acked-by: Stefan Hajnoczi + +On some image chains, QEMU may not always be able to resolve the +filenames properly, when updating the backing file of an image +after a block job. + +For instance, certain relative pathnames may fail, or drives may +have been specified originally by file descriptor (e.g. /dev/fd/???), +or a relative protocol pathname may have been used. + +In these instances, QEMU may lack the information to be able to make +the correct choice, but the user or management layer most likely does +have that knowledge. + +With this extension to the block-stream api, the user is able to change +the backing file of the active layer as part of the block-stream +operation. + +This allows the change to be 'safe', in the sense that if the attempt +to write the active image metadata fails, then the block-stream +operation returns failure, without disrupting the guest. + +If a backing file string is not specified in the command, the backing +file string to use is determined in the same manner as it was +previously. + +Reviewed-by: Eric Blake +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 13d8cc515dfcf5574077f964332d34890c0101d0) + +Conflicts: + block/stream.c + blockdev.c + qapi/block-core.json + +RHEL7 Notes: Conflicts due to: surrounding context differences, and + and the qapi json not being split into + separate files like upstream. Also + upstream used 1024 for local backing + file string size, and downstream we + already use PATH_MAX instead. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/stream.c | 11 +++++------ + blockdev.c | 23 +++++++++++++++++++---- + hmp.c | 2 +- + qapi-schema.json | 19 +++++++++++++++++-- + qmp-commands.hx | 2 +- + 5 files changed, 43 insertions(+), 14 deletions(-) + +diff --git a/block/stream.c b/block/stream.c +index 2a6f533..367120d 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -32,7 +32,7 @@ typedef struct StreamBlockJob { + RateLimit limit; + BlockDriverState *base; + BlockdevOnError on_error; +- char backing_file_id[PATH_MAX]; ++ char *backing_file_str; + } StreamBlockJob; + + static int coroutine_fn stream_populate(BlockDriverState *bs, +@@ -182,7 +182,7 @@ wait: + if (!block_job_is_cancelled(&s->common) && sector_num == end && ret == 0) { + const char *base_id = NULL, *base_fmt = NULL; + if (base) { +- base_id = s->backing_file_id; ++ base_id = s->backing_file_str; + if (base->drv) { + base_fmt = base->drv->format_name; + } +@@ -192,6 +192,7 @@ wait: + } + + qemu_vfree(buf); ++ g_free(s->backing_file_str); + block_job_completed(&s->common, ret); + } + +@@ -213,7 +214,7 @@ static const BlockJobDriver stream_job_driver = { + }; + + void stream_start(BlockDriverState *bs, BlockDriverState *base, +- const char *base_id, int64_t speed, ++ const char *backing_file_str, int64_t speed, + BlockdevOnError on_error, + BlockDriverCompletionFunc *cb, + void *opaque, Error **errp) +@@ -233,9 +234,7 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base, + } + + s->base = base; +- if (base_id) { +- pstrcpy(s->backing_file_id, sizeof(s->backing_file_id), base_id); +- } ++ s->backing_file_str = g_strdup(backing_file_str); + + s->on_error = on_error; + s->common.co = qemu_coroutine_create(stream_run); +diff --git a/blockdev.c b/blockdev.c +index 96dc3df..09ef3f7 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1425,14 +1425,17 @@ static void block_job_cb(void *opaque, int ret) + bdrv_put_ref_bh_schedule(bs); + } + +-void qmp_block_stream(const char *device, bool has_base, +- const char *base, bool has_speed, int64_t speed, ++void qmp_block_stream(const char *device, ++ bool has_base, const char *base, ++ bool has_backing_file, const char *backing_file, ++ bool has_speed, int64_t speed, + bool has_on_error, BlockdevOnError on_error, + Error **errp) + { + BlockDriverState *bs; + BlockDriverState *base_bs = NULL; + Error *local_err = NULL; ++ const char *base_name = NULL; + + if (!has_on_error) { + on_error = BLOCKDEV_ON_ERROR_REPORT; +@@ -1444,15 +1447,27 @@ void qmp_block_stream(const char *device, bool has_base, + return; + } + +- if (base) { ++ if (has_base) { + base_bs = bdrv_find_backing_image(bs, base); + if (base_bs == NULL) { + error_set(errp, QERR_BASE_NOT_FOUND, base); + return; + } ++ base_name = base; + } + +- stream_start(bs, base_bs, base, has_speed ? speed : 0, ++ /* if we are streaming the entire chain, the result will have no backing ++ * file, and specifying one is therefore an error */ ++ if (base_bs == NULL && has_backing_file) { ++ error_setg(errp, "backing file specified, but streaming the " ++ "entire chain"); ++ return; ++ } ++ ++ /* backing_file string overrides base bs filename */ ++ base_name = has_backing_file ? backing_file : base_name; ++ ++ stream_start(bs, base_bs, base_name, has_speed ? speed : 0, + on_error, block_job_cb, bs, &local_err); + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); +diff --git a/hmp.c b/hmp.c +index 841929d..b723b26 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -1046,7 +1046,7 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict) + const char *base = qdict_get_try_str(qdict, "base"); + int64_t speed = qdict_get_try_int(qdict, "speed", 0); + +- qmp_block_stream(device, base != NULL, base, ++ qmp_block_stream(device, base != NULL, base, false, NULL, + qdict_haskey(qdict, "speed"), speed, + BLOCKDEV_ON_ERROR_REPORT, true, &error); + +diff --git a/qapi-schema.json b/qapi-schema.json +index ed79eb9..40bd2a6 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -2280,6 +2280,21 @@ + # + # @base: #optional the common backing file name + # ++# @backing-file: #optional The backing file string to write into the active ++# layer. This filename is not validated. ++# ++# If a pathname string is such that it cannot be ++# resolved by QEMU, that means that subsequent QMP or ++# HMP commands must use node-names for the image in ++# question, as filename lookup methods will fail. ++# ++# If not specified, QEMU will automatically determine ++# the backing file string to use, or error out if there ++# is no obvious choice. Care should be taken when ++# specifying the string, to specify a valid filename or ++# protocol. ++# (Since 2.1) ++# + # @speed: #optional the maximum speed, in bytes per second + # + # @on-error: #optional the action to take on an error (default report). +@@ -2292,8 +2307,8 @@ + # Since: 1.1 + ## + { 'command': 'block-stream', +- 'data': { 'device': 'str', '*base': 'str', '*speed': 'int', +- '*on-error': 'BlockdevOnError' } } ++ 'data': { 'device': 'str', '*base': 'str', '*backing-file': 'str', ++ '*speed': 'int', '*on-error': 'BlockdevOnError' } } + #_end-rhev-only + + ## +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 5ece4f9..c07cf8a 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -999,7 +999,7 @@ EQMP + #ifdef CONFIG_LIVE_BLOCK_OPS + { + .name = "block-stream", +- .args_type = "device:B,base:s?,speed:o?,on-error:s?", ++ .args_type = "device:B,base:s?,speed:o?,backing-file:s?,on-error:s?", + .mhandler.cmd_new = qmp_marshal_input_block_stream, + }, + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-bdrv_aio_write_zeroes.patch.patch.patch b/SOURCES/kvm-block-add-bdrv_aio_write_zeroes.patch.patch.patch new file mode 100644 index 0000000..809da4c --- /dev/null +++ b/SOURCES/kvm-block-add-bdrv_aio_write_zeroes.patch.patch.patch @@ -0,0 +1,87 @@ +From 0e36c36c95c2616d020321782d4c8164c561eaec Mon Sep 17 00:00:00 2001 +Message-Id: <0e36c36c95c2616d020321782d4c8164c561eaec.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:14 +0100 +Subject: [PATCH 26/50] block: add bdrv_aio_write_zeroes + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-29-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56065 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 28/52] block: add bdrv_aio_write_zeroes +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +This will be used by the SCSI layer. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d5ef94d43da8c57a2d597efbdec3d9a54d97fdf7) +--- + block.c | 11 +++++++++++ + include/block/block.h | 3 +++ + trace-events | 1 + + 3 files changed, 15 insertions(+) + +Signed-off-by: Michal Novotny +--- + block.c | 11 +++++++++++ + include/block/block.h | 3 +++ + trace-events | 1 + + 3 files changed, 15 insertions(+) + +diff --git a/block.c b/block.c +index c6cad55..fc15370 100644 +--- a/block.c ++++ b/block.c +@@ -3690,6 +3690,17 @@ BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num, + cb, opaque, true); + } + ++BlockDriverAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, BdrvRequestFlags flags, ++ BlockDriverCompletionFunc *cb, void *opaque) ++{ ++ trace_bdrv_aio_write_zeroes(bs, sector_num, nb_sectors, flags, opaque); ++ ++ return bdrv_co_aio_rw_vector(bs, sector_num, NULL, nb_sectors, ++ BDRV_REQ_ZERO_WRITE | flags, ++ cb, opaque, true); ++} ++ + + typedef struct MultiwriteCB { + int error; +diff --git a/include/block/block.h b/include/block/block.h +index 6042e10..bcf71e2 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -218,6 +218,9 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); + int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, BdrvRequestFlags flags); ++BlockDriverAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, BdrvRequestFlags flags, ++ BlockDriverCompletionFunc *cb, void *opaque); + int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags); + int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov); + int bdrv_pread(BlockDriverState *bs, int64_t offset, +diff --git a/trace-events b/trace-events +index fa5a65c..40d4312 100644 +--- a/trace-events ++++ b/trace-events +@@ -60,6 +60,7 @@ bdrv_aio_discard(void *bs, int64_t sector_num, int nb_sectors, void *opaque) "bs + bdrv_aio_flush(void *bs, void *opaque) "bs %p opaque %p" + bdrv_aio_readv(void *bs, int64_t sector_num, int nb_sectors, void *opaque) "bs %p sector_num %"PRId64" nb_sectors %d opaque %p" + bdrv_aio_writev(void *bs, int64_t sector_num, int nb_sectors, void *opaque) "bs %p sector_num %"PRId64" nb_sectors %d opaque %p" ++bdrv_aio_write_zeroes(void *bs, int64_t sector_num, int nb_sectors, int flags, void *opaque) "bs %p sector_num %"PRId64" nb_sectors %d flags %#x opaque %p" + bdrv_lock_medium(void *bs, bool locked) "bs %p locked %d" + bdrv_co_readv(void *bs, int64_t sector_num, int nb_sector) "bs %p sector_num %"PRId64" nb_sectors %d" + bdrv_co_copy_on_readv(void *bs, int64_t sector_num, int nb_sector) "bs %p sector_num %"PRId64" nb_sectors %d" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-bdrv_write_zeroes.patch b/SOURCES/kvm-block-add-bdrv_write_zeroes.patch new file mode 100644 index 0000000..039c001 --- /dev/null +++ b/SOURCES/kvm-block-add-bdrv_write_zeroes.patch @@ -0,0 +1,139 @@ +From f6f47020d06eca20a99967b6ac9eef65326dfdde Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:06 +0200 +Subject: [PATCH 11/25] block: add bdrv_write_zeroes() + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-2-git-send-email-owasserm@redhat.com> +Patchwork-id: 54797 +O-Subject: [RHEL7.0 qemu-kvm v2 01/10] block: add bdrv_write_zeroes() +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4105eaaab9376ea959de711b81bba9e1494c971d) +--- + block.c | 27 +++++++++++++++++++-------- + include/block/block.h | 2 ++ + 2 files changed, 21 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 27 +++++++++++++++++++-------- + include/block/block.h | 2 ++ + 2 files changed, 21 insertions(+), 8 deletions(-) + +diff --git a/block.c b/block.c +index bd52c13..b160f62 100644 +--- a/block.c ++++ b/block.c +@@ -2190,6 +2190,7 @@ typedef struct RwCo { + QEMUIOVector *qiov; + bool is_write; + int ret; ++ BdrvRequestFlags flags; + } RwCo; + + static void coroutine_fn bdrv_rw_co_entry(void *opaque) +@@ -2198,10 +2199,12 @@ static void coroutine_fn bdrv_rw_co_entry(void *opaque) + + if (!rwco->is_write) { + rwco->ret = bdrv_co_do_readv(rwco->bs, rwco->sector_num, +- rwco->nb_sectors, rwco->qiov, 0); ++ rwco->nb_sectors, rwco->qiov, ++ rwco->flags); + } else { + rwco->ret = bdrv_co_do_writev(rwco->bs, rwco->sector_num, +- rwco->nb_sectors, rwco->qiov, 0); ++ rwco->nb_sectors, rwco->qiov, ++ rwco->flags); + } + } + +@@ -2209,7 +2212,8 @@ static void coroutine_fn bdrv_rw_co_entry(void *opaque) + * Process a vectored synchronous request using coroutines + */ + static int bdrv_rwv_co(BlockDriverState *bs, int64_t sector_num, +- QEMUIOVector *qiov, bool is_write) ++ QEMUIOVector *qiov, bool is_write, ++ BdrvRequestFlags flags) + { + Coroutine *co; + RwCo rwco = { +@@ -2219,6 +2223,7 @@ static int bdrv_rwv_co(BlockDriverState *bs, int64_t sector_num, + .qiov = qiov, + .is_write = is_write, + .ret = NOT_DONE, ++ .flags = flags, + }; + assert((qiov->size & (BDRV_SECTOR_SIZE - 1)) == 0); + +@@ -2250,7 +2255,7 @@ static int bdrv_rwv_co(BlockDriverState *bs, int64_t sector_num, + * Process a synchronous request using coroutines + */ + static int bdrv_rw_co(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, +- int nb_sectors, bool is_write) ++ int nb_sectors, bool is_write, BdrvRequestFlags flags) + { + QEMUIOVector qiov; + struct iovec iov = { +@@ -2259,14 +2264,14 @@ static int bdrv_rw_co(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, + }; + + qemu_iovec_init_external(&qiov, &iov, 1); +- return bdrv_rwv_co(bs, sector_num, &qiov, is_write); ++ return bdrv_rwv_co(bs, sector_num, &qiov, is_write, flags); + } + + /* return < 0 if error. See bdrv_write() for the return codes */ + int bdrv_read(BlockDriverState *bs, int64_t sector_num, + uint8_t *buf, int nb_sectors) + { +- return bdrv_rw_co(bs, sector_num, buf, nb_sectors, false); ++ return bdrv_rw_co(bs, sector_num, buf, nb_sectors, false, 0); + } + + /* Just like bdrv_read(), but with I/O throttling temporarily disabled */ +@@ -2292,12 +2297,18 @@ int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num, + int bdrv_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors) + { +- return bdrv_rw_co(bs, sector_num, (uint8_t *)buf, nb_sectors, true); ++ return bdrv_rw_co(bs, sector_num, (uint8_t *)buf, nb_sectors, true, 0); + } + + int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov) + { +- return bdrv_rwv_co(bs, sector_num, qiov, true); ++ return bdrv_rwv_co(bs, sector_num, qiov, true, 0); ++} ++ ++int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, int nb_sectors) ++{ ++ return bdrv_rw_co(bs, sector_num, NULL, nb_sectors, true, ++ BDRV_REQ_ZERO_WRITE); + } + + int bdrv_pread(BlockDriverState *bs, int64_t offset, +diff --git a/include/block/block.h b/include/block/block.h +index 174295b..1a3ed22 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -168,6 +168,8 @@ int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num, + uint8_t *buf, int nb_sectors); + int bdrv_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); ++int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors); + int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov); + int bdrv_pread(BlockDriverState *bs, int64_t offset, + void *buf, int count); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-default-get_block_status-implementation-fo.patch b/SOURCES/kvm-block-add-default-get_block_status-implementation-fo.patch new file mode 100644 index 0000000..044c603 --- /dev/null +++ b/SOURCES/kvm-block-add-default-get_block_status-implementation-fo.patch @@ -0,0 +1,49 @@ +From 815d053228bffeb0c2774f283c249ddf7f5fb03e Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:46 +0200 +Subject: [PATCH 21/81] block: add default get_block_status implementation for protocols + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-22-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55004 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 21/26] block: add default get_block_status implementation for protocols +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Protocols return raw data, so you can assume the offsets to pass +through unchanged. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 918e92d71b38306a6bf4fedfd1109367f1425587) +--- + block.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 36a2f24..2a4a9dd 100644 +--- a/block.c ++++ b/block.c +@@ -3060,7 +3060,11 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + + if (!bs->drv->bdrv_co_get_block_status) { + *pnum = nb_sectors; +- return BDRV_BLOCK_DATA; ++ ret = BDRV_BLOCK_DATA; ++ if (bs->drv->protocol_name) { ++ ret |= BDRV_BLOCK_OFFSET_VALID | (sector_num * BDRV_SECTOR_SIZE); ++ } ++ return ret; + } + + ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-flags-argument-to-bdrv_co_write_zeroes-tra.patch.patch.patch b/SOURCES/kvm-block-add-flags-argument-to-bdrv_co_write_zeroes-tra.patch.patch.patch new file mode 100644 index 0000000..3231782 --- /dev/null +++ b/SOURCES/kvm-block-add-flags-argument-to-bdrv_co_write_zeroes-tra.patch.patch.patch @@ -0,0 +1,62 @@ +From 04f210211997117a226e6deef0b3c062058fa5d6 Mon Sep 17 00:00:00 2001 +Message-Id: <04f210211997117a226e6deef0b3c062058fa5d6.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:13 +0100 +Subject: [PATCH 25/50] block: add flags argument to bdrv_co_write_zeroes + tracepoint + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-28-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56064 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 27/52] block: add flags argument to bdrv_co_write_zeroes tracepoint +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 94d6ff21f48c8c98e6e9eef58cc6f6346c9dd851) +--- + block.c | 2 +- + trace-events | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 2 +- + trace-events | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 1f70913..c6cad55 100644 +--- a/block.c ++++ b/block.c +@@ -2896,7 +2896,7 @@ int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, + BdrvRequestFlags flags) + { +- trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors); ++ trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags); + + if (!(bs->open_flags & BDRV_O_UNMAP)) { + flags &= ~BDRV_REQ_MAY_UNMAP; +diff --git a/trace-events b/trace-events +index b72a72f..fa5a65c 100644 +--- a/trace-events ++++ b/trace-events +@@ -64,7 +64,7 @@ bdrv_lock_medium(void *bs, bool locked) "bs %p locked %d" + bdrv_co_readv(void *bs, int64_t sector_num, int nb_sector) "bs %p sector_num %"PRId64" nb_sectors %d" + bdrv_co_copy_on_readv(void *bs, int64_t sector_num, int nb_sector) "bs %p sector_num %"PRId64" nb_sectors %d" + bdrv_co_writev(void *bs, int64_t sector_num, int nb_sector) "bs %p sector_num %"PRId64" nb_sectors %d" +-bdrv_co_write_zeroes(void *bs, int64_t sector_num, int nb_sector) "bs %p sector_num %"PRId64" nb_sectors %d" ++bdrv_co_write_zeroes(void *bs, int64_t sector_num, int nb_sector, int flags) "bs %p sector_num %"PRId64" nb_sectors %d flags %#x" + bdrv_co_io_em(void *bs, int64_t sector_num, int nb_sectors, int is_write, void *acb) "bs %p sector_num %"PRId64" nb_sectors %d is_write %d acb %p" + bdrv_co_do_copy_on_readv(void *bs, int64_t sector_num, int nb_sectors, int64_t cluster_sector_num, int cluster_nb_sectors) "bs %p sector_num %"PRId64" nb_sectors %d cluster_sector_num %"PRId64" cluster_nb_sectors %d" + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-flags-to-BlockRequest.patch.patch.patch b/SOURCES/kvm-block-add-flags-to-BlockRequest.patch.patch.patch new file mode 100644 index 0000000..210c611 --- /dev/null +++ b/SOURCES/kvm-block-add-flags-to-BlockRequest.patch.patch.patch @@ -0,0 +1,122 @@ +From 566788cb4c4f066daf10354edd8d9d497bb0043c Mon Sep 17 00:00:00 2001 +Message-Id: <566788cb4c4f066daf10354edd8d9d497bb0043c.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:12 +0100 +Subject: [PATCH 24/50] block: add flags to BlockRequest + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-27-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56063 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 26/52] block: add flags to BlockRequest +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +This lets bdrv_co_do_rw receive flags, so that it can be used for +zero writes. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d20d9b7c6723d0123b7d60dd5557aa0a6599f471) +--- + block.c | 17 +++++++++++------ + include/block/block.h | 1 + + 2 files changed, 12 insertions(+), 6 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 17 +++++++++++------ + include/block/block.h | 1 + + 2 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/block.c b/block.c +index 8dfc207..1f70913 100644 +--- a/block.c ++++ b/block.c +@@ -74,6 +74,7 @@ static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs, + int64_t sector_num, + QEMUIOVector *qiov, + int nb_sectors, ++ BdrvRequestFlags flags, + BlockDriverCompletionFunc *cb, + void *opaque, + bool is_write); +@@ -3675,7 +3676,7 @@ BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num, + { + trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque); + +- return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, ++ return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0, + cb, opaque, false); + } + +@@ -3685,7 +3686,7 @@ BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num, + { + trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque); + +- return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, ++ return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0, + cb, opaque, true); + } + +@@ -3857,8 +3858,10 @@ int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs) + /* Run the aio requests. */ + mcb->num_requests = num_reqs; + for (i = 0; i < num_reqs; i++) { +- bdrv_aio_writev(bs, reqs[i].sector, reqs[i].qiov, +- reqs[i].nb_sectors, multiwrite_cb, mcb); ++ bdrv_co_aio_rw_vector(bs, reqs[i].sector, reqs[i].qiov, ++ reqs[i].nb_sectors, reqs[i].flags, ++ multiwrite_cb, mcb, ++ true); + } + + return 0; +@@ -4163,10 +4166,10 @@ static void coroutine_fn bdrv_co_do_rw(void *opaque) + + if (!acb->is_write) { + acb->req.error = bdrv_co_do_readv(bs, acb->req.sector, +- acb->req.nb_sectors, acb->req.qiov, 0); ++ acb->req.nb_sectors, acb->req.qiov, acb->req.flags); + } else { + acb->req.error = bdrv_co_do_writev(bs, acb->req.sector, +- acb->req.nb_sectors, acb->req.qiov, 0); ++ acb->req.nb_sectors, acb->req.qiov, acb->req.flags); + } + + acb->bh = qemu_bh_new(bdrv_co_em_bh, acb); +@@ -4177,6 +4180,7 @@ static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs, + int64_t sector_num, + QEMUIOVector *qiov, + int nb_sectors, ++ BdrvRequestFlags flags, + BlockDriverCompletionFunc *cb, + void *opaque, + bool is_write) +@@ -4188,6 +4192,7 @@ static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs, + acb->req.sector = sector_num; + acb->req.nb_sectors = nb_sectors; + acb->req.qiov = qiov; ++ acb->req.flags = flags; + acb->is_write = is_write; + acb->done = NULL; + +diff --git a/include/block/block.h b/include/block/block.h +index b87ed3a..6042e10 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -297,6 +297,7 @@ typedef struct BlockRequest { + /* Fields to be filled by multiwrite caller */ + int64_t sector; + int nb_sectors; ++ int flags; + QEMUIOVector *qiov; + BlockDriverCompletionFunc *cb; + void *opaque; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-flags-to-bdrv_-_write_zeroes.patch.patch.patch b/SOURCES/kvm-block-add-flags-to-bdrv_-_write_zeroes.patch.patch.patch new file mode 100644 index 0000000..8b8c4cf --- /dev/null +++ b/SOURCES/kvm-block-add-flags-to-bdrv_-_write_zeroes.patch.patch.patch @@ -0,0 +1,256 @@ +From 0f795e4e9e128f9ff88a128ed8590d2357228b80 Mon Sep 17 00:00:00 2001 +Message-Id: <0f795e4e9e128f9ff88a128ed8590d2357228b80.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:55 +0100 +Subject: [PATCH 07/50] block: add flags to bdrv_*_write_zeroes + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-10-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56046 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 09/52] block: add flags to bdrv_*_write_zeroes +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit aa7bfbfff792538a9eeefe879fc4c629aa0b4203) + +Conflicts: + block.c [missing before_write notifier] + block/backup.c [missing] + block/qcow2-cluster.c [missing function to expand zero clusters] + block/raw_bsd.c [replaced by block/raw.c] + qemu-io-cmds.c [replaced by qemu-io.c] +--- + block-migration.c | 2 +- + block.c | 20 +++++++++++--------- + block/qcow2.c | 2 +- + block/qed.c | 3 ++- + block/raw.c | 5 +++-- + block/vmdk.c | 3 ++- + include/block/block.h | 4 ++-- + include/block/block_int.h | 2 +- + qemu-io.c | 2 +- + 9 files changed, 24 insertions(+), 19 deletions(-) + +Signed-off-by: Michal Novotny +--- + block-migration.c | 2 +- + block.c | 20 +++++++++++--------- + block/qcow2.c | 2 +- + block/qed.c | 3 ++- + block/raw.c | 5 +++-- + block/vmdk.c | 3 ++- + include/block/block.h | 4 ++-- + include/block/block_int.h | 2 +- + qemu-io.c | 2 +- + 9 files changed, 24 insertions(+), 19 deletions(-) + +diff --git a/block-migration.c b/block-migration.c +index f803f20..3b22db6 100644 +--- a/block-migration.c ++++ b/block-migration.c +@@ -780,7 +780,7 @@ static int block_load(QEMUFile *f, void *opaque, int version_id) + } + + if (flags & BLK_MIG_FLAG_ZERO_BLOCK) { +- ret = bdrv_write_zeroes(bs, addr, nr_sectors); ++ ret = bdrv_write_zeroes(bs, addr, nr_sectors, 0); + } else { + buf = g_malloc(BLOCK_SIZE); + qemu_get_buffer(f, buf, BLOCK_SIZE); +diff --git a/block.c b/block.c +index b7ca799..698334a 100644 +--- a/block.c ++++ b/block.c +@@ -79,7 +79,7 @@ static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs, + bool is_write); + static void coroutine_fn bdrv_co_do_rw(void *opaque); + static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors); ++ int64_t sector_num, int nb_sectors, BdrvRequestFlags flags); + + static bool bdrv_exceed_bps_limits(BlockDriverState *bs, int nb_sectors, + bool is_write, double elapsed_time, uint64_t *wait); +@@ -2405,10 +2405,11 @@ int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov) + return bdrv_rwv_co(bs, sector_num, qiov, true, 0); + } + +-int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, int nb_sectors) ++int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, BdrvRequestFlags flags) + { + return bdrv_rw_co(bs, sector_num, NULL, nb_sectors, true, +- BDRV_REQ_ZERO_WRITE); ++ BDRV_REQ_ZERO_WRITE | flags); + } + + int bdrv_pread(BlockDriverState *bs, int64_t offset, +@@ -2590,7 +2591,7 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BlockDriverState *bs, + if (drv->bdrv_co_write_zeroes && + buffer_is_zero(bounce_buffer, iov.iov_len)) { + ret = bdrv_co_do_write_zeroes(bs, cluster_sector_num, +- cluster_nb_sectors); ++ cluster_nb_sectors, 0); + } else { + /* This does not change the data on the disk, it is not necessary + * to flush even in cache=writethrough mode. +@@ -2724,7 +2725,7 @@ int coroutine_fn bdrv_co_copy_on_readv(BlockDriverState *bs, + } + + static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors) ++ int64_t sector_num, int nb_sectors, BdrvRequestFlags flags) + { + BlockDriver *drv = bs->drv; + QEMUIOVector qiov; +@@ -2736,7 +2737,7 @@ static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, + + /* First try the efficient write zeroes operation */ + if (drv->bdrv_co_write_zeroes) { +- ret = drv->bdrv_co_write_zeroes(bs, sector_num, nb_sectors); ++ ret = drv->bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags); + if (ret != -ENOTSUP) { + return ret; + } +@@ -2787,7 +2788,7 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, + tracked_request_begin(&req, bs, sector_num, nb_sectors, true); + + if (flags & BDRV_REQ_ZERO_WRITE) { +- ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors); ++ ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags); + } else { + ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov); + } +@@ -2821,12 +2822,13 @@ int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num, + } + + int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors) ++ int64_t sector_num, int nb_sectors, ++ BdrvRequestFlags flags) + { + trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors); + + return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL, +- BDRV_REQ_ZERO_WRITE); ++ BDRV_REQ_ZERO_WRITE | flags); + } + + /** +diff --git a/block/qcow2.c b/block/qcow2.c +index 8de8892..c109646 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1685,7 +1685,7 @@ static int qcow2_make_empty(BlockDriverState *bs) + } + + static coroutine_fn int qcow2_co_write_zeroes(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors) ++ int64_t sector_num, int nb_sectors, BdrvRequestFlags flags) + { + int ret; + BDRVQcowState *s = bs->opaque; +diff --git a/block/qed.c b/block/qed.c +index 084dc0a..e163372 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -1397,7 +1397,8 @@ static void coroutine_fn qed_co_write_zeroes_cb(void *opaque, int ret) + + static int coroutine_fn bdrv_qed_co_write_zeroes(BlockDriverState *bs, + int64_t sector_num, +- int nb_sectors) ++ int nb_sectors, ++ BdrvRequestFlags flags) + { + BlockDriverAIOCB *blockacb; + BDRVQEDState *s = bs->opaque; +diff --git a/block/raw.c b/block/raw.c +index e1ed8cc..67d6445 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -47,9 +47,10 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + + static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs, + int64_t sector_num, +- int nb_sectors) ++ int nb_sectors, ++ BdrvRequestFlags flags) + { +- return bdrv_co_write_zeroes(bs->file, sector_num, nb_sectors); ++ return bdrv_co_write_zeroes(bs->file, sector_num, nb_sectors, flags); + } + + static int64_t raw_getlength(BlockDriverState *bs) +diff --git a/block/vmdk.c b/block/vmdk.c +index 7ec6427..6d676e4 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1426,7 +1426,8 @@ static coroutine_fn int vmdk_co_write(BlockDriverState *bs, int64_t sector_num, + + static int coroutine_fn vmdk_co_write_zeroes(BlockDriverState *bs, + int64_t sector_num, +- int nb_sectors) ++ int nb_sectors, ++ BdrvRequestFlags flags) + { + int ret; + BDRVVmdkState *s = bs->opaque; +diff --git a/include/block/block.h b/include/block/block.h +index ce6e897..2d78a84 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -194,7 +194,7 @@ int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num, + int bdrv_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); + int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, +- int nb_sectors); ++ int nb_sectors, BdrvRequestFlags flags); + int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov); + int bdrv_pread(BlockDriverState *bs, int64_t offset, + void *buf, int count); +@@ -216,7 +216,7 @@ int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num, + * because it may allocate memory for the entire region. + */ + int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, int64_t sector_num, +- int nb_sectors); ++ int nb_sectors, BdrvRequestFlags flags); + BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, + const char *backing_file); + int bdrv_get_backing_file_depth(BlockDriverState *bs); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 8223f5b..236c0c2 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -125,7 +125,7 @@ struct BlockDriver { + * instead. + */ + int coroutine_fn (*bdrv_co_write_zeroes)(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors); ++ int64_t sector_num, int nb_sectors, BdrvRequestFlags flags); + int coroutine_fn (*bdrv_co_discard)(BlockDriverState *bs, + int64_t sector_num, int nb_sectors); + int64_t coroutine_fn (*bdrv_co_get_block_status)(BlockDriverState *bs, +diff --git a/qemu-io.c b/qemu-io.c +index df21022..393c2c8 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -234,7 +234,7 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque) + CoWriteZeroes *data = opaque; + + data->ret = bdrv_co_write_zeroes(bs, data->offset / BDRV_SECTOR_SIZE, +- data->count / BDRV_SECTOR_SIZE); ++ data->count / BDRV_SECTOR_SIZE, 0); + data->done = true; + if (data->ret < 0) { + *data->total = data->ret; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-helper-function-to-determine-if-a-BDS-is-i.patch b/SOURCES/kvm-block-add-helper-function-to-determine-if-a-BDS-is-i.patch new file mode 100644 index 0000000..f5c5264 --- /dev/null +++ b/SOURCES/kvm-block-add-helper-function-to-determine-if-a-BDS-is-i.patch @@ -0,0 +1,74 @@ +From e49f2991513ff786625bff7e729ebe9b292e633a Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Fri, 19 Sep 2014 03:18:56 +0200 +Subject: [PATCH 17/20] block: add helper function to determine if a BDS is in a chain + +Message-id: +Patchwork-id: 61310 +O-Subject: [PATCH qemu-kvm-rhev RHEL7.0.z 1/4] block: add helper function to determine if a BDS is in a chain +Bugzilla: 1122925 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Eric Blake +RH-Acked-by: Stefan Hajnoczi + +This is a small helper function, to determine if 'base' is in the +chain of BlockDriverState 'top'. It returns true if it is in the chain, +and false otherwise. + +If either argument is NULL, it will also return false. + +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +Signed-off-by: Jeff Cody +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5a6684d2b957f9ec75d7ed7b14332293abec1d6c) + +Conflicts: + block.c + include/block/block.h + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block.c | 11 +++++++++++ + include/block/block.h | 1 + + 2 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index af162fe..7bdbbc6 100644 +--- a/block.c ++++ b/block.c +@@ -3439,6 +3439,17 @@ BlockDriverState *bdrv_find(const char *name) + return NULL; + } + ++/* If 'base' is in the same chain as 'top', return true. Otherwise, ++ * return false. If either argument is NULL, return false. */ ++bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base) ++{ ++ while (top && top != base) { ++ top = top->backing_hd; ++ } ++ ++ return top != NULL; ++} ++ + BlockDriverState *bdrv_next(BlockDriverState *bs) + { + if (!bs) { +diff --git a/include/block/block.h b/include/block/block.h +index 13ef173..972c0e7 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -361,6 +361,7 @@ void bdrv_lock_medium(BlockDriverState *bs, bool locked); + void bdrv_eject(BlockDriverState *bs, bool eject_flag); + const char *bdrv_get_format_name(BlockDriverState *bs); + BlockDriverState *bdrv_find(const char *name); ++bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base); + BlockDriverState *bdrv_next(BlockDriverState *bs); + void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), + void *opaque); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-image-info-query-function-bdrv_query_image.patch b/SOURCES/kvm-block-add-image-info-query-function-bdrv_query_image.patch new file mode 100644 index 0000000..b8d9d8a --- /dev/null +++ b/SOURCES/kvm-block-add-image-info-query-function-bdrv_query_image.patch @@ -0,0 +1,165 @@ +From e705ed7009ed1d53dd1d382cb8cf61a562dc8a44 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:28 +0100 +Subject: [PATCH 71/87] block: add image info query function bdrv_query_image_info() + +RH-Author: Max Reitz +Message-id: <1383756824-6921-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 55560 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 05/21] block: add image info query function bdrv_query_image_info() +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Wenchao Xia + +BZ: 980771 + +This patch adds function bdrv_query_image_info(), which will +retrieve image info in qmp object format. The implementation is +based on the code moved from qemu-img.c, but uses block layer +function to get snapshot info. + +Signed-off-by: Wenchao Xia +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 43526ec8d1395fe4efbed15e9764b64641b95bcc) + +Signed-off-by: Max Reitz +--- + block/qapi.c | 43 +++++++++++++++++++++++++++++++++++++------ + include/block/qapi.h | 6 +++--- + qemu-img.c | 11 ++++++----- + 3 files changed, 46 insertions(+), 14 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qapi.c | 43 +++++++++++++++++++++++++++++++++++++------ + include/block/qapi.h | 6 +++--- + qemu-img.c | 11 ++++++----- + 3 files changed, 46 insertions(+), 14 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index 1ed56da..e9d8b74 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -88,18 +88,29 @@ int bdrv_query_snapshot_info_list(BlockDriverState *bs, + return 0; + } + +-void bdrv_collect_image_info(BlockDriverState *bs, +- ImageInfo *info, +- const char *filename) ++/** ++ * bdrv_query_image_info: ++ * @bs: block device to examine ++ * @p_info: location to store image information ++ * @errp: location to store error information ++ * ++ * @p_info will be set only on success. On error, store error in @errp. ++ */ ++void bdrv_query_image_info(BlockDriverState *bs, ++ ImageInfo **p_info, ++ Error **errp) + { + uint64_t total_sectors; +- char backing_filename[1024]; ++ const char *backing_filename; + char backing_filename2[1024]; + BlockDriverInfo bdi; ++ int ret; ++ Error *err = NULL; ++ ImageInfo *info = g_new0(ImageInfo, 1); + + bdrv_get_geometry(bs, &total_sectors); + +- info->filename = g_strdup(filename); ++ info->filename = g_strdup(bs->filename); + info->format = g_strdup(bdrv_get_format_name(bs)); + info->virtual_size = total_sectors * 512; + info->actual_size = bdrv_get_allocated_file_size(bs); +@@ -116,7 +127,7 @@ void bdrv_collect_image_info(BlockDriverState *bs, + info->dirty_flag = bdi.is_dirty; + info->has_dirty_flag = true; + } +- bdrv_get_backing_filename(bs, backing_filename, sizeof(backing_filename)); ++ backing_filename = bs->backing_file; + if (backing_filename[0] != '\0') { + info->backing_filename = g_strdup(backing_filename); + info->has_backing_filename = true; +@@ -134,6 +145,26 @@ void bdrv_collect_image_info(BlockDriverState *bs, + info->has_backing_filename_format = true; + } + } ++ ++ ret = bdrv_query_snapshot_info_list(bs, &info->snapshots, &err); ++ switch (ret) { ++ case 0: ++ if (info->snapshots) { ++ info->has_snapshots = true; ++ } ++ break; ++ /* recoverable error */ ++ case -ENOMEDIUM: ++ case -ENOTSUP: ++ error_free(err); ++ break; ++ default: ++ error_propagate(errp, err); ++ qapi_free_ImageInfo(info); ++ return; ++ } ++ ++ *p_info = info; + } + + BlockInfo *bdrv_query_info(BlockDriverState *bs) +diff --git a/include/block/qapi.h b/include/block/qapi.h +index 4f223d1..ab1f48f 100644 +--- a/include/block/qapi.h ++++ b/include/block/qapi.h +@@ -32,9 +32,9 @@ + int bdrv_query_snapshot_info_list(BlockDriverState *bs, + SnapshotInfoList **p_list, + Error **errp); +-void bdrv_collect_image_info(BlockDriverState *bs, +- ImageInfo *info, +- const char *filename); ++void bdrv_query_image_info(BlockDriverState *bs, ++ ImageInfo **p_info, ++ Error **errp); + BlockInfo *bdrv_query_info(BlockDriverState *s); + BlockStats *bdrv_query_stats(const BlockDriverState *bs); + +diff --git a/qemu-img.c b/qemu-img.c +index e1fb148..fa0fd0e 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1663,6 +1663,7 @@ static ImageInfoList *collect_image_info_list(const char *filename, + ImageInfoList *head = NULL; + ImageInfoList **last = &head; + GHashTable *filenames; ++ Error *err = NULL; + + filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL); + +@@ -1684,11 +1685,11 @@ static ImageInfoList *collect_image_info_list(const char *filename, + goto err; + } + +- info = g_new0(ImageInfo, 1); +- bdrv_collect_image_info(bs, info, filename); +- bdrv_query_snapshot_info_list(bs, &info->snapshots, NULL); +- if (info->snapshots) { +- info->has_snapshots = true; ++ bdrv_query_image_info(bs, &info, &err); ++ if (error_is_set(&err)) { ++ error_report("%s", error_get_pretty(err)); ++ error_free(err); ++ goto err; + } + + elem = g_new0(ImageInfoList, 1); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-logical-block-provisioning-info-to-BlockDr.patch.patch.patch b/SOURCES/kvm-block-add-logical-block-provisioning-info-to-BlockDr.patch.patch.patch new file mode 100644 index 0000000..f806041 --- /dev/null +++ b/SOURCES/kvm-block-add-logical-block-provisioning-info-to-BlockDr.patch.patch.patch @@ -0,0 +1,63 @@ +From 1eae92fe23ff0e5ba28374220417a44920192ee4 Mon Sep 17 00:00:00 2001 +Message-Id: <1eae92fe23ff0e5ba28374220417a44920192ee4.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:57 +0100 +Subject: [PATCH 09/50] block: add logical block provisioning info to + BlockDriverInfo + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-12-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56051 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 11/52] block: add logical block provisioning info to BlockDriverInfo +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e1a5c4bed44bc23f69f53883c657e31e150cab30) +--- + include/block/block.h | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +Signed-off-by: Michal Novotny +--- + include/block/block.h | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/include/block/block.h b/include/block/block.h +index 10abc00..ab3044e 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -18,6 +18,22 @@ typedef struct BlockDriverInfo { + /* offset at which the VM state can be saved (0 if not possible) */ + int64_t vm_state_offset; + bool is_dirty; ++ /* ++ * True if unallocated blocks read back as zeroes. This is equivalent ++ * to the the LBPRZ flag in the SCSI logical block provisioning page. ++ */ ++ bool unallocated_blocks_are_zero; ++ /* ++ * True if the driver can optimize writing zeroes by unmapping ++ * sectors. This is equivalent to the BLKDISCARDZEROES ioctl in Linux ++ * with the difference that in qemu a discard is allowed to silently ++ * fail. Therefore we have to use bdrv_write_zeroes with the ++ * BDRV_REQ_MAY_UNMAP flag for an optimized zero write with unmapping. ++ * After this call the driver has to guarantee that the contents read ++ * back as zero. It is additionally required that the block device is ++ * opened with BDRV_O_UNMAP flag for this to work. ++ */ ++ bool can_write_zeroes_with_unmap; + } BlockDriverInfo; + + typedef struct BlockFragInfo { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-opt_transfer_length-to-BlockLimits.patch.patch b/SOURCES/kvm-block-add-opt_transfer_length-to-BlockLimits.patch.patch new file mode 100644 index 0000000..9f3f4cf --- /dev/null +++ b/SOURCES/kvm-block-add-opt_transfer_length-to-BlockLimits.patch.patch @@ -0,0 +1,49 @@ +From e8ab7aeb0b874fa5f2dfecb9826154d3ab0e35ee Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:34 +0100 +Subject: [PATCH 46/50] block: add opt_transfer_length to BlockLimits + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-49-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56085 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 48/52] block: add opt_transfer_length to BlockLimits +Bugzilla: 1039557 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Paolo Bonzini +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7337acaf219fc988e7ba91780b11770ff95169b4) +--- + include/block/block_int.h | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Michal Novotny +--- + include/block/block_int.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/block/block_int.h b/include/block/block_int.h +index ab98c07..71c8b53 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -231,6 +231,9 @@ typedef struct BlockLimits { + + /* optimal alignment for write zeroes requests in sectors */ + int64_t write_zeroes_alignment; ++ ++ /* optimal transfer length in sectors */ ++ int opt_transfer_length; + } BlockLimits; + + /* +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-add-snapshot-info-query-function-bdrv_query_sn.patch b/SOURCES/kvm-block-add-snapshot-info-query-function-bdrv_query_sn.patch new file mode 100644 index 0000000..39e0370 --- /dev/null +++ b/SOURCES/kvm-block-add-snapshot-info-query-function-bdrv_query_sn.patch @@ -0,0 +1,159 @@ +From c4aaafbe296b0e38a54191d294436ffd718a2c7b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:27 +0100 +Subject: [PATCH 70/87] block: add snapshot info query function bdrv_query_snapshot_info_list() + +RH-Author: Max Reitz +Message-id: <1383756824-6921-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 55559 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 04/21] block: add snapshot info query function bdrv_query_snapshot_info_list() +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Wenchao Xia + +BZ: 980771 + +This patch adds function bdrv_query_snapshot_info_list(), which will +retrieve snapshot info of an image in qmp object format. The implementation +is based on the code moved from qemu-img.c with modification to fit more +for qmp based block layer API. + +Signed-off-by: Wenchao Xia +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit fb0ed4539c6f02fa9e5a3cf9df2549713451eeca) + +Signed-off-by: Max Reitz +--- + block/qapi.c | 55 +++++++++++++++++++++++++++++++++++++++------------- + include/block/qapi.h | 4 +++- + qemu-img.c | 5 ++++- + 3 files changed, 49 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qapi.c | 55 ++++++++++++++++++++++++++++++++++++++----------- + include/block/qapi.h | 4 ++- + qemu-img.c | 5 +++- + 3 files changed, 49 insertions(+), 15 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index 794dbf8..1ed56da 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -26,29 +26,56 @@ + #include "block/block_int.h" + #include "qmp-commands.h" + +-void bdrv_collect_snapshots(BlockDriverState *bs , ImageInfo *info) ++/* ++ * Returns 0 on success, with *p_list either set to describe snapshot ++ * information, or NULL because there are no snapshots. Returns -errno on ++ * error, with *p_list untouched. ++ */ ++int bdrv_query_snapshot_info_list(BlockDriverState *bs, ++ SnapshotInfoList **p_list, ++ Error **errp) + { + int i, sn_count; + QEMUSnapshotInfo *sn_tab = NULL; +- SnapshotInfoList *info_list, *cur_item = NULL; ++ SnapshotInfoList *info_list, *cur_item = NULL, *head = NULL; ++ SnapshotInfo *info; ++ + sn_count = bdrv_snapshot_list(bs, &sn_tab); ++ if (sn_count < 0) { ++ const char *dev = bdrv_get_device_name(bs); ++ switch (sn_count) { ++ case -ENOMEDIUM: ++ error_setg(errp, "Device '%s' is not inserted", dev); ++ break; ++ case -ENOTSUP: ++ error_setg(errp, ++ "Device '%s' does not support internal snapshots", ++ dev); ++ break; ++ default: ++ error_setg_errno(errp, -sn_count, ++ "Can't list snapshots of device '%s'", dev); ++ break; ++ } ++ return sn_count; ++ } + + for (i = 0; i < sn_count; i++) { +- info->has_snapshots = true; +- info_list = g_new0(SnapshotInfoList, 1); ++ info = g_new0(SnapshotInfo, 1); ++ info->id = g_strdup(sn_tab[i].id_str); ++ info->name = g_strdup(sn_tab[i].name); ++ info->vm_state_size = sn_tab[i].vm_state_size; ++ info->date_sec = sn_tab[i].date_sec; ++ info->date_nsec = sn_tab[i].date_nsec; ++ info->vm_clock_sec = sn_tab[i].vm_clock_nsec / 1000000000; ++ info->vm_clock_nsec = sn_tab[i].vm_clock_nsec % 1000000000; + +- info_list->value = g_new0(SnapshotInfo, 1); +- info_list->value->id = g_strdup(sn_tab[i].id_str); +- info_list->value->name = g_strdup(sn_tab[i].name); +- info_list->value->vm_state_size = sn_tab[i].vm_state_size; +- info_list->value->date_sec = sn_tab[i].date_sec; +- info_list->value->date_nsec = sn_tab[i].date_nsec; +- info_list->value->vm_clock_sec = sn_tab[i].vm_clock_nsec / 1000000000; +- info_list->value->vm_clock_nsec = sn_tab[i].vm_clock_nsec % 1000000000; ++ info_list = g_new0(SnapshotInfoList, 1); ++ info_list->value = info; + + /* XXX: waiting for the qapi to support qemu-queue.h types */ + if (!cur_item) { +- info->snapshots = cur_item = info_list; ++ head = cur_item = info_list; + } else { + cur_item->next = info_list; + cur_item = info_list; +@@ -57,6 +84,8 @@ void bdrv_collect_snapshots(BlockDriverState *bs , ImageInfo *info) + } + + g_free(sn_tab); ++ *p_list = head; ++ return 0; + } + + void bdrv_collect_image_info(BlockDriverState *bs, +diff --git a/include/block/qapi.h b/include/block/qapi.h +index e6e568d..4f223d1 100644 +--- a/include/block/qapi.h ++++ b/include/block/qapi.h +@@ -29,7 +29,9 @@ + #include "block/block.h" + #include "block/snapshot.h" + +-void bdrv_collect_snapshots(BlockDriverState *bs , ImageInfo *info); ++int bdrv_query_snapshot_info_list(BlockDriverState *bs, ++ SnapshotInfoList **p_list, ++ Error **errp); + void bdrv_collect_image_info(BlockDriverState *bs, + ImageInfo *info, + const char *filename); +diff --git a/qemu-img.c b/qemu-img.c +index 97b4212..e1fb148 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1686,7 +1686,10 @@ static ImageInfoList *collect_image_info_list(const char *filename, + + info = g_new0(ImageInfo, 1); + bdrv_collect_image_info(bs, info, filename); +- bdrv_collect_snapshots(bs, info); ++ bdrv_query_snapshot_info_list(bs, &info->snapshots, NULL); ++ if (info->snapshots) { ++ info->has_snapshots = true; ++ } + + elem = g_new0(ImageInfoList, 1); + elem->value = info; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-add-wrappers-for-logical-block-provisioning-in.patch.patch.patch b/SOURCES/kvm-block-add-wrappers-for-logical-block-provisioning-in.patch.patch.patch new file mode 100644 index 0000000..65848d8 --- /dev/null +++ b/SOURCES/kvm-block-add-wrappers-for-logical-block-provisioning-in.patch.patch.patch @@ -0,0 +1,97 @@ +From 53d8964bc0e80e99d5ccb15100ecb93a7b5f74b0 Mon Sep 17 00:00:00 2001 +Message-Id: <53d8964bc0e80e99d5ccb15100ecb93a7b5f74b0.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:58 +0100 +Subject: [PATCH 10/50] block: add wrappers for logical block provisioning + information + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-13-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56050 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 12/52] block: add wrappers for logical block provisioning information +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +This adds 2 wrappers to read the unallocated_blocks_are_zero and +can_write_zeroes_with_unmap info from the BDI. The wrappers are +required to check for the existence of a backing_hd and +if the devices are opened with the correct flags. + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4ce786914b745a144a9eda1ea33f3ff98328c527) +--- + block.c | 30 ++++++++++++++++++++++++++++++ + include/block/block.h | 2 ++ + 2 files changed, 32 insertions(+) + +Signed-off-by: Michal Novotny +--- + block.c | 30 ++++++++++++++++++++++++++++++ + include/block/block.h | 2 ++ + 2 files changed, 32 insertions(+) + +diff --git a/block.c b/block.c +index 77167f0..2fae459 100644 +--- a/block.c ++++ b/block.c +@@ -3121,6 +3121,36 @@ int bdrv_has_zero_init(BlockDriverState *bs) + return 0; + } + ++bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs) ++{ ++ BlockDriverInfo bdi; ++ ++ if (bs->backing_hd) { ++ return false; ++ } ++ ++ if (bdrv_get_info(bs, &bdi) == 0) { ++ return bdi.unallocated_blocks_are_zero; ++ } ++ ++ return false; ++} ++ ++bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs) ++{ ++ BlockDriverInfo bdi; ++ ++ if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) { ++ return false; ++ } ++ ++ if (bdrv_get_info(bs, &bdi) == 0) { ++ return bdi.can_write_zeroes_with_unmap; ++ } ++ ++ return false; ++} ++ + typedef struct BdrvCoGetBlockStatusData { + BlockDriverState *bs; + BlockDriverState *base; +diff --git a/include/block/block.h b/include/block/block.h +index ab3044e..1958d98 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -330,6 +330,8 @@ int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); + int bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); + int bdrv_has_zero_init_1(BlockDriverState *bs); + int bdrv_has_zero_init(BlockDriverState *bs); ++bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs); ++bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs); + int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, int *pnum); + int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-allow-bdrv_unref-to-be-passed-NULL-pointers.patch b/SOURCES/kvm-block-allow-bdrv_unref-to-be-passed-NULL-pointers.patch new file mode 100644 index 0000000..19e5a00 --- /dev/null +++ b/SOURCES/kvm-block-allow-bdrv_unref-to-be-passed-NULL-pointers.patch @@ -0,0 +1,44 @@ +From 9a9800bbe9e2a38adaccc98314fff2354a52037e Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:50 +0200 +Subject: [PATCH 12/20] block: allow bdrv_unref() to be passed NULL pointers + +Message-id: +Patchwork-id: 61216 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 11/15] block: allow bdrv_unref() to be passed NULL pointers +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +If bdrv_unref() is passed a NULL BDS pointer, it is safe to +exit with no operation. This will allow cleanup code to blindly +call bdrv_unref() on a BDS that has been initialized to NULL. + +Reviewed-by: Max Reitz +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 9a4d5ca60772e09d0cbac01f1b4778aa68e00eaa) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index a2e95f6..af162fe 100644 +--- a/block.c ++++ b/block.c +@@ -5083,6 +5083,9 @@ void bdrv_ref(BlockDriverState *bs) + * deleted. */ + void bdrv_unref(BlockDriverState *bs) + { ++ if (!bs) { ++ return; ++ } + assert(bs->refcnt > 0); + if (--bs->refcnt == 0) { + bdrv_delete(bs); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-backend-expose-bs-bl.max_transfer_length.patch b/SOURCES/kvm-block-backend-expose-bs-bl.max_transfer_length.patch new file mode 100644 index 0000000..587dc00 --- /dev/null +++ b/SOURCES/kvm-block-backend-expose-bs-bl.max_transfer_length.patch @@ -0,0 +1,66 @@ +From b9d7b6bbaa64404eb9b4a65d0af841bfae5c9089 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 11 Jul 2016 05:33:36 +0200 +Subject: [PATCH 3/7] block-backend: expose bs->bl.max_transfer_length + +RH-Author: Fam Zheng +Message-id: <1468215219-30793-4-git-send-email-famz@redhat.com> +Patchwork-id: 71107 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 3/6] block-backend: expose bs->bl.max_transfer_length +Bugzilla: 1318199 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 454057b7d9b9ad141bd5df8c4075745e56b4870f) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/block-backend.c + include/sysemu/block-backend.h + +Downstream doesn't have BlockBackend yet, so "blk_" -> "bdrv_" and put +the function in block.c. + +Signed-off-by: Fam Zheng +--- + block.c | 5 +++++ + include/block/block.h | 1 + + 2 files changed, 6 insertions(+) + +diff --git a/block.c b/block.c +index ae756aa..bdcd741 100644 +--- a/block.c ++++ b/block.c +@@ -3656,6 +3656,11 @@ int bdrv_get_flags(BlockDriverState *bs) + return bs->open_flags; + } + ++int bdrv_get_max_transfer_length(BlockDriverState *bs) ++{ ++ return bs->bl.max_transfer_length; ++} ++ + int bdrv_flush_all(void) + { + BlockDriverState *bs; +diff --git a/include/block/block.h b/include/block/block.h +index 75147b2..d29733a 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -379,6 +379,7 @@ void bdrv_iterate_format(void (*it)(void *opaque, const char *name), + void *opaque); + const char *bdrv_get_device_name(BlockDriverState *bs); + int bdrv_get_flags(BlockDriverState *bs); ++int bdrv_get_max_transfer_length(BlockDriverState *bs); + int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); + int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-bdrv_aligned_pwritev-Assert-overlap-range.patch b/SOURCES/kvm-block-bdrv_aligned_pwritev-Assert-overlap-range.patch new file mode 100644 index 0000000..a0b3daf --- /dev/null +++ b/SOURCES/kvm-block-bdrv_aligned_pwritev-Assert-overlap-range.patch @@ -0,0 +1,46 @@ +From 34593324ec77e3f92e27645540ed935767283dc5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 7 Feb 2014 15:35:56 +0100 +Subject: [PATCH 36/37] block: bdrv_aligned_pwritev: Assert overlap range + +Message-id: <1392117622-28812-36-git-send-email-kwolf@redhat.com> +Patchwork-id: 57200 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 36/37] block: bdrv_aligned_pwritev: Assert overlap range +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This adds assertions that the request that we actually end up passing to +the block driver (which includes RMW data and has therefore potentially +been rounded to alignment boundaries) is fully covered by the +overlap_{offset,size} fields of the associated BdrvTrackedRequest. + +Suggested-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Reviewed-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +--- + block.c | 2 ++ + 1 file changed, 2 insertions(+) +--- + block.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index d063924..b878c8b 100644 +--- a/block.c ++++ b/block.c +@@ -2980,6 +2980,8 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + + waited = wait_serialising_requests(req); + assert(!waited || !req->serialising); ++ assert(req->overlap_offset <= offset); ++ assert(offset + bytes <= req->overlap_offset + req->overlap_bytes); + + if (flags & BDRV_REQ_ZERO_WRITE) { + BLKDBG_EVENT(bs, BLKDBG_PWRITEV_ZERO); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-bdrv_reopen_prepare-don-t-use-QERR_OPEN_FILE_F.patch b/SOURCES/kvm-block-bdrv_reopen_prepare-don-t-use-QERR_OPEN_FILE_F.patch new file mode 100644 index 0000000..4bc6c88 --- /dev/null +++ b/SOURCES/kvm-block-bdrv_reopen_prepare-don-t-use-QERR_OPEN_FILE_F.patch @@ -0,0 +1,54 @@ +From a2ffa303cf6f0669c3810200211b4362ce2ac55e Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:30 +0100 +Subject: [PATCH 11/29] block: bdrv_reopen_prepare(): don't use QERR_OPEN_FILE_FAILED + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-8-git-send-email-lersek@redhat.com> +Patchwork-id: 55197 +O-Subject: [RHEL-7 qemu-kvm PATCH 7/8] block: bdrv_reopen_prepare(): don't use QERR_OPEN_FILE_FAILED +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +The call to drv->bdrv_reopen_prepare() can fail due to reasons +other than an open failure. Unfortunately, we can't use errno +nor -ret, cause they are not always set. + +Stick to a generic error message then. + +Signed-off-by: Luiz Capitulino +Reviewed-by: Stefan Hajnoczi +Acked-by: Kevin Wolf +(cherry picked from commit d8b6895f7a8e5bcc5be1557e8048db43882f3b33) +Signed-off-by: Laszlo Ersek +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index b160f62..2ba9a0a 100644 +--- a/block.c ++++ b/block.c +@@ -1309,8 +1309,8 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, + if (local_err != NULL) { + error_propagate(errp, local_err); + } else { +- error_set(errp, QERR_OPEN_FILE_FAILED, +- reopen_state->bs->filename); ++ error_setg(errp, "failed while preparing to reopen image '%s'", ++ reopen_state->bs->filename); + } + goto error; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-bs-drv-may-be-NULL-in-bdrv_debug_resume.patch b/SOURCES/kvm-block-bs-drv-may-be-NULL-in-bdrv_debug_resume.patch new file mode 100644 index 0000000..998a8b3 --- /dev/null +++ b/SOURCES/kvm-block-bs-drv-may-be-NULL-in-bdrv_debug_resume.patch @@ -0,0 +1,53 @@ +From cd67eba4f11bb3d188df01dd9c30b96c7665f8f3 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 17 Mar 2014 22:45:30 +0100 +Subject: [PATCH 5/6] block: bs->drv may be NULL in bdrv_debug_resume() + +RH-Author: Max Reitz +Message-id: <1395096331-12610-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 58120 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/3] block: bs->drv may be NULL in bdrv_debug_resume() +Bugzilla: 1048575 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +BZ: 1048575 + +Currently, bdrv_debug_resume() requires every bs->drv in the BDS stack +to be NULL until a bs->drv with an implementation of bdrv_debug_resume() +is found. For a normal function, this would be fine, but this is a +function for debugging purposes and should therefore allow intermediate +BDS not to have a driver (i.e., be "ejected"). Otherwise, it is hard to +debug such situations. + +Signed-off-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 938789ea92b3073ad1113b3e1bdf90d469ea4bf4) + +Signed-off-by: Max Reitz +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index ae55535..0321c74 100644 +--- a/block.c ++++ b/block.c +@@ -3831,7 +3831,7 @@ int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event, + + int bdrv_debug_resume(BlockDriverState *bs, const char *tag) + { +- while (bs && bs->drv && !bs->drv->bdrv_debug_resume) { ++ while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) { + bs = bs->file; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-change-default-of-.has_zero_init-to-0.patch.patch b/SOURCES/kvm-block-change-default-of-.has_zero_init-to-0.patch.patch new file mode 100644 index 0000000..a0b5dee --- /dev/null +++ b/SOURCES/kvm-block-change-default-of-.has_zero_init-to-0.patch.patch @@ -0,0 +1,295 @@ +From c8cc35838d42aa286242772d97e3a9be7bb786ba Mon Sep 17 00:00:00 2001 +Message-Id: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:49 +0100 +Subject: [PATCH 01/50] block: change default of .has_zero_init to 0 + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-4-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56040 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 03/52] block: change default of .has_zero_init to 0 +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +.has_zero_init defaults to 1 for all formats and protocols. + +this is a dangerous default since this means that all +new added drivers need to manually overwrite it to 0 if +they do not ensure that a device is zero initialized +after bdrv_create(). + +if a driver needs to explicitly set this value to +1 its easier to verify the correctness in the review process. + +during review of the existing drivers it turned out +that ssh and gluster had a wrong default of 1. +both protocols support host_devices as backend +which are not by default zero initialized. this +wrong assumption will lead to possible corruption +if qemu-img convert is used to write to such a backend. + +vpc and vmdk also defaulted to 1 altough they support +fixed respectively flat extends. this has to be addresses +in separate patches. both formats as well as the mentioned +ssh and gluster are turned to the default of 0 with this +patch for safety. + +a similar problem with the wrong default existed for +iscsi most likely because the driver developer did +oversee the default value of 1. + +Signed-off-by: Peter Lieven +Signed-off-by: Kevin Wolf +(cherry picked from commit 3ac216270a62418519c08e88c17005a8f1539cf2) + +Conflicts: [due to get_block_status going in RHEL7 before this patch] + block/qcow2.c + block/qed.c + block/raw-posix.c + block/vdi.c +--- + block.c | 8 +++++++- + block/cow.c | 1 + + block/qcow.c | 1 + + block/qcow2.c | 1 + + block/qed.c | 1 + + block/raw-posix.c | 10 +--------- + block/raw-win32.c | 7 +------ + block/rbd.c | 1 + + block/sheepdog.c | 1 + + block/vdi.c | 1 + + include/block/block.h | 1 + + 11 files changed, 17 insertions(+), 16 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 8 +++++++- + block/cow.c | 1 + + block/qcow.c | 1 + + block/qcow2.c | 1 + + block/qed.c | 1 + + block/raw-posix.c | 10 +--------- + block/raw-win32.c | 7 +------ + block/rbd.c | 1 + + block/sheepdog.c | 1 + + block/vdi.c | 1 + + include/block/block.h | 1 + + 11 files changed, 17 insertions(+), 16 deletions(-) + +diff --git a/block.c b/block.c +index 8ef07bb..02994ec 100644 +--- a/block.c ++++ b/block.c +@@ -3098,6 +3098,11 @@ int bdrv_flush_all(void) + return result; + } + ++int bdrv_has_zero_init_1(BlockDriverState *bs) ++{ ++ return 1; ++} ++ + int bdrv_has_zero_init(BlockDriverState *bs) + { + assert(bs->drv); +@@ -3111,7 +3116,8 @@ int bdrv_has_zero_init(BlockDriverState *bs) + return bs->drv->bdrv_has_zero_init(bs); + } + +- return 1; ++ /* safe default */ ++ return 0; + } + + typedef struct BdrvCoGetBlockStatusData { +diff --git a/block/cow.c b/block/cow.c +index cd78129..cb9a3b0 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -386,6 +386,7 @@ static BlockDriver bdrv_cow = { + .bdrv_open = cow_open, + .bdrv_close = cow_close, + .bdrv_create = cow_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + + .bdrv_read = cow_co_read, + .bdrv_write = cow_co_write, +diff --git a/block/qcow.c b/block/qcow.c +index 6d029cc..6bc2358 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -906,6 +906,7 @@ static BlockDriver bdrv_qcow = { + .bdrv_close = qcow_close, + .bdrv_reopen_prepare = qcow_reopen_prepare, + .bdrv_create = qcow_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + + .bdrv_co_readv = qcow_co_readv, + .bdrv_co_writev = qcow_co_writev, +diff --git a/block/qcow2.c b/block/qcow2.c +index 850d1c2..8de8892 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -2034,6 +2034,7 @@ static BlockDriver bdrv_qcow2 = { + .bdrv_close = qcow2_close, + .bdrv_reopen_prepare = qcow2_reopen_prepare, + .bdrv_create = qcow2_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = qcow2_co_get_block_status, + .bdrv_set_key = qcow2_set_key, + .bdrv_make_empty = qcow2_make_empty, +diff --git a/block/qed.c b/block/qed.c +index 7b13bb5..084dc0a 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -1603,6 +1603,7 @@ static BlockDriver bdrv_qed = { + .bdrv_close = bdrv_qed_close, + .bdrv_reopen_prepare = bdrv_qed_reopen_prepare, + .bdrv_create = bdrv_qed_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = bdrv_qed_co_get_block_status, + .bdrv_make_empty = bdrv_qed_make_empty, + .bdrv_aio_readv = bdrv_qed_aio_readv, +diff --git a/block/raw-posix.c b/block/raw-posix.c +index eae1b40..c2b3dfd 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1220,6 +1220,7 @@ static BlockDriver bdrv_file = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_close = raw_close, + .bdrv_create = raw_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = raw_co_get_block_status, + + .bdrv_aio_readv = raw_aio_readv, +@@ -1563,11 +1564,6 @@ static int hdev_create(const char *filename, QEMUOptionParameter *options, + return ret; + } + +-static int hdev_has_zero_init(BlockDriverState *bs) +-{ +- return 0; +-} +- + static BlockDriver bdrv_host_device = { + .format_name = "host_device", + .protocol_name = "host_device", +@@ -1580,7 +1576,6 @@ static BlockDriver bdrv_host_device = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_create = hdev_create, + .create_options = raw_create_options, +- .bdrv_has_zero_init = hdev_has_zero_init, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +@@ -1711,7 +1706,6 @@ static BlockDriver bdrv_host_floppy = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_create = hdev_create, + .create_options = raw_create_options, +- .bdrv_has_zero_init = hdev_has_zero_init, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +@@ -1821,7 +1815,6 @@ static BlockDriver bdrv_host_cdrom = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_create = hdev_create, + .create_options = raw_create_options, +- .bdrv_has_zero_init = hdev_has_zero_init, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +@@ -1949,7 +1942,6 @@ static BlockDriver bdrv_host_cdrom = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_create = hdev_create, + .create_options = raw_create_options, +- .bdrv_has_zero_init = hdev_has_zero_init, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 584790f..6ac3797 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -465,6 +465,7 @@ static BlockDriver bdrv_file = { + .bdrv_file_open = raw_open, + .bdrv_close = raw_close, + .bdrv_create = raw_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +@@ -600,11 +601,6 @@ done: + return ret; + } + +-static int hdev_has_zero_init(BlockDriverState *bs) +-{ +- return 0; +-} +- + static BlockDriver bdrv_host_device = { + .format_name = "host_device", + .protocol_name = "host_device", +@@ -612,7 +608,6 @@ static BlockDriver bdrv_host_device = { + .bdrv_probe_device = hdev_probe_device, + .bdrv_file_open = hdev_open, + .bdrv_close = raw_close, +- .bdrv_has_zero_init = hdev_has_zero_init, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +diff --git a/block/rbd.c b/block/rbd.c +index 169d3cf..b870401 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -974,6 +974,7 @@ static BlockDriver bdrv_rbd = { + .bdrv_file_open = qemu_rbd_open, + .bdrv_close = qemu_rbd_close, + .bdrv_create = qemu_rbd_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_get_info = qemu_rbd_getinfo, + .create_options = qemu_rbd_create_options, + .bdrv_getlength = qemu_rbd_getlength, +diff --git a/block/sheepdog.c b/block/sheepdog.c +index e7c4448..09203ad 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -2411,6 +2411,7 @@ static BlockDriver bdrv_sheepdog_unix = { + .bdrv_file_open = sd_open, + .bdrv_close = sd_close, + .bdrv_create = sd_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_getlength = sd_getlength, + .bdrv_truncate = sd_truncate, + +diff --git a/block/vdi.c b/block/vdi.c +index 84860fe..dcbc27c 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -792,6 +792,7 @@ static BlockDriver bdrv_vdi = { + .bdrv_close = vdi_close, + .bdrv_reopen_prepare = vdi_reopen_prepare, + .bdrv_create = vdi_create, ++ .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = vdi_co_get_block_status, + .bdrv_make_empty = vdi_make_empty, + +diff --git a/include/block/block.h b/include/block/block.h +index 656570e..15ffbd2 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -300,6 +300,7 @@ void bdrv_drain_all(void); + + int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); + int bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); ++int bdrv_has_zero_init_1(BlockDriverState *bs); + int bdrv_has_zero_init(BlockDriverState *bs); + int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, int *pnum); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-cloop-prevent-offsets_size-integer-overflow-CV.patch b/SOURCES/kvm-block-cloop-prevent-offsets_size-integer-overflow-CV.patch new file mode 100644 index 0000000..0afde63 --- /dev/null +++ b/SOURCES/kvm-block-cloop-prevent-offsets_size-integer-overflow-CV.patch @@ -0,0 +1,112 @@ +From f0b6df5c7146425c80ab72928aa8848c8f1a93a9 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:12 +0100 +Subject: [PATCH 05/49] block/cloop: prevent offsets_size integer overflow (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-6-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 05/48] block/cloop: prevent offsets_size integer overflow (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +The following integer overflow in offsets_size can lead to out-of-bounds +memory stores when n_blocks has a huge value: + +uint32_t n_blocks, offsets_size; +[...] +ret = bdrv_pread(bs->file, 128 + 4, &s->n_blocks, 4); +[...] +s->n_blocks = be32_to_cpu(s->n_blocks); + +/bin /boot /cgroup /dev /etc /home /lib /lib64 /lost+found /media /misc /mnt /net /opt /proc /root /sbin /selinux /srv /sys /tmp /usr /var read offsets audio/ backends/ block/ bsd-user/ default-configs/ disas/ docs/ dtc/ fpu/ fsdev/ gdb-xml/ hw/ include/ ldscripts/ libcacard/ linux-headers/ linux-user/ net/ pc-bios/ pixman/ po/ qapi/ qga/ QMP/ qobject/ qom/ redhat/ roms/ scripts/ slirp/ stubs/ sysconfigs/ target-alpha/ target-arm/ target-cris/ target-i386/ target-lm32/ target-m68k/ target-microblaze/ target-mips/ target-moxie/ target-openrisc/ target-ppc/ target-s390x/ target-sh4/ target-sparc/ target-unicore32/ target-xtensa/ tcg/ tests/ trace/ ui/ util/ +offsets_size = s->n_blocks 0001-usb-host-move-legacy-cmd-line-bits.patch 0002-usb-host-remove-usb_host_device_close.patch 0003-use-libusb-for-usb-host.patch 0004-libusb-spec-file-windup.patch aio-posix.c aio-win32.c arch_init.c async.c audio backends balloon.c block block.c blockdev.c blockdev-nbd.c blockjob.c block-migration.c bsd-user bt-host.c bt-vhci.c Changelog cmd.c cmd.h CODING_STYLE configure COPYING COPYING.LIB coroutine-gthread.c coroutine-sigaltstack.c coroutine-ucontext.c coroutine-win32.c cpu-exec.c cpus.c cputlb.c default-configs device-hotplug.c device_tree.c disas disas.c dma-helpers.c docs dtc dump.c exec.c fpu fsdev gdbstub.c gdb-xml HACKING hmp.c hmp-commands.hx hmp.h hw include iohandler.c ioport.c kvm-all.c kvm-stub.c kvmvapic-add-ioport-read-accessor.patch ldscripts libcacard LICENSE linux-headers linux-user main-loop.c MAINTAINERS Makefile Makefile.objs Makefile.target memory.c memory_mapping.c memory_mapping-stub.c migration.c migration-exec.c migration-fd.c migration-rdma.c migration-tcp.c migration-unix.c monitor.c nbd.c net os-posix.c os-win32.c page_cache.c pc-bios pixman po qapi qapi-schema.json qdev-monitor.c qdict-test-data.txt qemu-bridge-helper.c qemu-char.c qemu-coroutine.c qemu-coroutine-io.c qemu-coroutine-lock.c qemu-coroutine-sleep.c qemu-doc.texi qemu-img.c qemu-img-cmds.hx qemu-img.texi qemu-io.c qemu-log.c qemu-nbd.c qemu-nbd.texi qemu-options.h qemu-options.hx qemu-options-wrapper.h qemu.sasl qemu-seccomp.c qemu-tech.texi qemu-timer.c qga QMP qmp.c qmp-commands.hx qobject qom qtest.c readline.c README redhat roms rules.mak savevm.c scripts slirp spice-qemu-char.c stubs sysconfigs target-alpha target-arm target-cris target-i386 target-lm32 target-m68k target-microblaze target-mips target-moxie target-openrisc target-ppc target-s390x target-sh4 target-sparc target-unicore32 target-xtensa tcg tcg-runtime.c tci.c tests thread-pool.c thunk.c tpm.c trace trace-events translate-all.c translate-all.h ui user-exec.c util VERSION version.rc vl.c vl.c.orig xbzrle.c xen-all.c xen-mapcache.c xen-stub.c sizeof(uint64_t); +s->offsets = g_malloc(offsets_size); + +[...] + +for(i=0;in_blocks;i++) { +s->offsets[i] = be64_to_cpu(s->offsets[i]); + +offsets_size can be smaller than n_blocks due to integer overflow. +Therefore s->offsets[] is too small when the for loop byteswaps offsets. + +This patch refuses to open files if offsets_size would overflow. + +Note that changing the type of offsets_size is not a fix since 32-bit +hosts still only have 32-bit size_t. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/cloop.c | 7 +++++++ + tests/qemu-iotests/075 | 7 +++++++ + tests/qemu-iotests/075.out | 4 ++++ + 3 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/block/cloop.c b/block/cloop.c +index f021663..563e916 100644 +--- a/block/cloop.c ++++ b/block/cloop.c +@@ -99,6 +99,13 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags, + s->n_blocks = be32_to_cpu(s->n_blocks); + + /* read offsets */ ++ if (s->n_blocks > UINT32_MAX / sizeof(uint64_t)) { ++ /* Prevent integer overflow */ ++ error_setg(errp, "n_blocks %u must be %zu or less", ++ s->n_blocks, ++ UINT32_MAX / sizeof(uint64_t)); ++ return -EINVAL; ++ } + offsets_size = s->n_blocks * sizeof(uint64_t); + s->offsets = g_malloc(offsets_size); + +diff --git a/tests/qemu-iotests/075 b/tests/qemu-iotests/075 +index 8f54a99..9ce6b1f 100755 +--- a/tests/qemu-iotests/075 ++++ b/tests/qemu-iotests/075 +@@ -43,6 +43,7 @@ _supported_proto generic + _supported_os Linux + + block_size_offset=128 ++n_blocks_offset=132 + + echo + echo "== check that the first sector can be read ==" +@@ -67,6 +68,12 @@ _use_sample_img simple-pattern.cloop.bz2 + poke_file "$TEST_IMG" "$block_size_offset" "\xff\xff\xfe\x00" + $QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== offsets_size overflow ===" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$n_blocks_offset" "\xff\xff\xff\xff" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/075.out b/tests/qemu-iotests/075.out +index d362c95..a771789 100644 +--- a/tests/qemu-iotests/075.out ++++ b/tests/qemu-iotests/075.out +@@ -15,4 +15,8 @@ no file open, try 'help open' + == huge block_size === + qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size 4294966784 must be 64 MB or less + no file open, try 'help open' ++ ++== offsets_size overflow === ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: n_blocks 4294967295 must be 536870911 or less ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-block-cloop-refuse-images-with-bogus-offsets-CVE-201.patch b/SOURCES/kvm-block-cloop-refuse-images-with-bogus-offsets-CVE-201.patch new file mode 100644 index 0000000..a80222c --- /dev/null +++ b/SOURCES/kvm-block-cloop-refuse-images-with-bogus-offsets-CVE-201.patch @@ -0,0 +1,133 @@ +From cba6c4e21a8dce857af0ed08d26801ebd5d5598a Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:14 +0100 +Subject: [PATCH 07/49] block/cloop: refuse images with bogus offsets (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-8-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 07/48] block/cloop: refuse images with bogus offsets (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +The offsets[] array allows efficient seeking and tells us the maximum +compressed data size. If the offsets are bogus the maximum compressed +data size will be unrealistic. + +This could cause g_malloc() to abort and bogus offsets mean the image is +broken anyway. Therefore we should refuse such images. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/cloop.c | 34 +++++++++++++++++++++++++++++----- + tests/qemu-iotests/075 | 15 +++++++++++++++ + tests/qemu-iotests/075.out | 8 ++++++++ + 3 files changed, 52 insertions(+), 5 deletions(-) + +diff --git a/block/cloop.c b/block/cloop.c +index 844665e..55a804f 100644 +--- a/block/cloop.c ++++ b/block/cloop.c +@@ -124,12 +124,36 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags, + } + + for(i=0;in_blocks;i++) { ++ uint64_t size; ++ + s->offsets[i] = be64_to_cpu(s->offsets[i]); +- if (i > 0) { +- uint32_t size = s->offsets[i] - s->offsets[i - 1]; +- if (size > max_compressed_block_size) { +- max_compressed_block_size = size; +- } ++ if (i == 0) { ++ continue; ++ } ++ ++ if (s->offsets[i] < s->offsets[i - 1]) { ++ error_setg(errp, "offsets not monotonically increasing at " ++ "index %u, image file is corrupt", i); ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ size = s->offsets[i] - s->offsets[i - 1]; ++ ++ /* Compressed blocks should be smaller than the uncompressed block size ++ * but maybe compression performed poorly so the compressed block is ++ * actually bigger. Clamp down on unrealistic values to prevent ++ * ridiculous s->compressed_block allocation. ++ */ ++ if (size > 2 * MAX_BLOCK_SIZE) { ++ error_setg(errp, "invalid compressed block size at index %u, " ++ "image file is corrupt", i); ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ if (size > max_compressed_block_size) { ++ max_compressed_block_size = size; + } + } + +diff --git a/tests/qemu-iotests/075 b/tests/qemu-iotests/075 +index 9c00fa8..d74fb33 100755 +--- a/tests/qemu-iotests/075 ++++ b/tests/qemu-iotests/075 +@@ -44,6 +44,7 @@ _supported_os Linux + + block_size_offset=128 + n_blocks_offset=132 ++offsets_offset=136 + + echo + echo "== check that the first sector can be read ==" +@@ -80,6 +81,20 @@ _use_sample_img simple-pattern.cloop.bz2 + poke_file "$TEST_IMG" "$n_blocks_offset" "\x04\x00\x00\x01" + $QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== refuse images with non-monotonically increasing offsets ==" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$offsets_offset" "\x00\x00\x00\x00\xff\xff\xff\xff" ++poke_file "$TEST_IMG" $((offsets_offset + 8)) "\x00\x00\x00\x00\xff\xfe\x00\x00" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== refuse images with invalid compressed block size ==" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$offsets_offset" "\x00\x00\x00\x00\x00\x00\x00\x00" ++poke_file "$TEST_IMG" $((offsets_offset + 8)) "\xff\xff\xff\xff\xff\xff\xff\xff" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/075.out b/tests/qemu-iotests/075.out +index 7cdaee1..911cd3b 100644 +--- a/tests/qemu-iotests/075.out ++++ b/tests/qemu-iotests/075.out +@@ -23,4 +23,12 @@ no file open, try 'help open' + == refuse images that require too many offsets === + qemu-io: can't open device TEST_DIR/simple-pattern.cloop: image requires too many offsets, try increasing block size + no file open, try 'help open' ++ ++== refuse images with non-monotonically increasing offsets == ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: offsets not monotonically increasing at index 1, image file is corrupt ++no file open, try 'help open' ++ ++== refuse images with invalid compressed block size == ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: invalid compressed block size at index 1, image file is corrupt ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-block-cloop-refuse-images-with-huge-offsets-arrays-C.patch b/SOURCES/kvm-block-cloop-refuse-images-with-huge-offsets-arrays-C.patch new file mode 100644 index 0000000..6b8a31d --- /dev/null +++ b/SOURCES/kvm-block-cloop-refuse-images-with-huge-offsets-arrays-C.patch @@ -0,0 +1,88 @@ +From 54e639827c618c74ecb47690754f0299c2e35750 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:13 +0100 +Subject: [PATCH 06/49] block/cloop: refuse images with huge offsets arrays (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-7-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 06/48] block/cloop: refuse images with huge offsets arrays (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +Limit offsets_size to 512 MB so that: + +1. g_malloc() does not abort due to an unreasonable size argument. + +2. offsets_size does not overflow the bdrv_pread() int size argument. + +This limit imposes a maximum image size of 16 TB at 256 KB block size. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/cloop.c | 9 +++++++++ + tests/qemu-iotests/075 | 6 ++++++ + tests/qemu-iotests/075.out | 4 ++++ + 3 files changed, 19 insertions(+), 0 deletions(-) + +diff --git a/block/cloop.c b/block/cloop.c +index 563e916..844665e 100644 +--- a/block/cloop.c ++++ b/block/cloop.c +@@ -107,6 +107,15 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags, + return -EINVAL; + } + offsets_size = s->n_blocks * sizeof(uint64_t); ++ if (offsets_size > 512 * 1024 * 1024) { ++ /* Prevent ridiculous offsets_size which causes memory allocation to ++ * fail or overflows bdrv_pread() size. In practice the 512 MB ++ * offsets[] limit supports 16 TB images at 256 KB block size. ++ */ ++ error_setg(errp, "image requires too many offsets, " ++ "try increasing block size"); ++ return -EINVAL; ++ } + s->offsets = g_malloc(offsets_size); + + ret = bdrv_pread(bs->file, 128 + 4 + 4, s->offsets, offsets_size); +diff --git a/tests/qemu-iotests/075 b/tests/qemu-iotests/075 +index 9ce6b1f..9c00fa8 100755 +--- a/tests/qemu-iotests/075 ++++ b/tests/qemu-iotests/075 +@@ -74,6 +74,12 @@ _use_sample_img simple-pattern.cloop.bz2 + poke_file "$TEST_IMG" "$n_blocks_offset" "\xff\xff\xff\xff" + $QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== refuse images that require too many offsets ===" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$n_blocks_offset" "\x04\x00\x00\x01" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/075.out b/tests/qemu-iotests/075.out +index a771789..7cdaee1 100644 +--- a/tests/qemu-iotests/075.out ++++ b/tests/qemu-iotests/075.out +@@ -19,4 +19,8 @@ no file open, try 'help open' + == offsets_size overflow === + qemu-io: can't open device TEST_DIR/simple-pattern.cloop: n_blocks 4294967295 must be 536870911 or less + no file open, try 'help open' ++ ++== refuse images that require too many offsets === ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: image requires too many offsets, try increasing block size ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-block-cloop-validate-block_size-header-field-CVE-201.patch b/SOURCES/kvm-block-cloop-validate-block_size-header-field-CVE-201.patch new file mode 100644 index 0000000..3e66b06 --- /dev/null +++ b/SOURCES/kvm-block-cloop-validate-block_size-header-field-CVE-201.patch @@ -0,0 +1,135 @@ +From ba8c0cc73f3a13b5621c8fe44eb8af20ddb9c5d0 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:11 +0100 +Subject: [PATCH 04/49] block/cloop: validate block_size header field (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-5-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 04/48] block/cloop: validate block_size header field (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +Avoid unbounded s->uncompressed_block memory allocation by checking that +the block_size header field has a reasonable value. Also enforce the +assumption that the value is a non-zero multiple of 512. + +These constraints conform to cloop 2.639's code so we accept existing +image files. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/cloop.c | 23 +++++++++++++++++++++++ + tests/qemu-iotests/075 | 20 ++++++++++++++++++++ + tests/qemu-iotests/075.out | 12 ++++++++++++ + 3 files changed, 55 insertions(+), 0 deletions(-) + +diff --git a/block/cloop.c b/block/cloop.c +index b907023..f021663 100644 +--- a/block/cloop.c ++++ b/block/cloop.c +@@ -26,6 +26,9 @@ + #include "qemu/module.h" + #include + ++/* Maximum compressed block size */ ++#define MAX_BLOCK_SIZE (64 * 1024 * 1024) ++ + typedef struct BDRVCloopState { + CoMutex lock; + uint32_t block_size; +@@ -68,6 +71,26 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags, + return ret; + } + s->block_size = be32_to_cpu(s->block_size); ++ if (s->block_size % 512) { ++ error_setg(errp, "block_size %u must be a multiple of 512", ++ s->block_size); ++ return -EINVAL; ++ } ++ if (s->block_size == 0) { ++ error_setg(errp, "block_size cannot be zero"); ++ return -EINVAL; ++ } ++ ++ /* cloop's create_compressed_fs.c warns about block sizes beyond 256 KB but ++ * we can accept more. Prevent ridiculous values like 4 GB - 1 since we ++ * need a buffer this big. ++ */ ++ if (s->block_size > MAX_BLOCK_SIZE) { ++ error_setg(errp, "block_size %u must be %u MB or less", ++ s->block_size, ++ MAX_BLOCK_SIZE / (1024 * 1024)); ++ return -EINVAL; ++ } + + ret = bdrv_pread(bs->file, 128 + 4, &s->n_blocks, 4); + if (ret < 0) { +diff --git a/tests/qemu-iotests/075 b/tests/qemu-iotests/075 +index 88ae8bb..8f54a99 100755 +--- a/tests/qemu-iotests/075 ++++ b/tests/qemu-iotests/075 +@@ -42,11 +42,31 @@ _supported_fmt cloop + _supported_proto generic + _supported_os Linux + ++block_size_offset=128 ++ + echo + echo "== check that the first sector can be read ==" + _use_sample_img simple-pattern.cloop.bz2 + $QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== block_size must be a multiple of 512 ==" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x02\x01" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== block_size cannot be zero ==" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x00\x00" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== huge block_size ===" ++_use_sample_img simple-pattern.cloop.bz2 ++poke_file "$TEST_IMG" "$block_size_offset" "\xff\xff\xfe\x00" ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/075.out b/tests/qemu-iotests/075.out +index 26661fa..d362c95 100644 +--- a/tests/qemu-iotests/075.out ++++ b/tests/qemu-iotests/075.out +@@ -3,4 +3,16 @@ QA output created by 075 + == check that the first sector can be read == + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== block_size must be a multiple of 512 == ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size 513 must be a multiple of 512 ++no file open, try 'help open' ++ ++== block_size cannot be zero == ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size cannot be zero ++no file open, try 'help open' ++ ++== huge block_size === ++qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size 4294966784 must be 64 MB or less ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-block-coverity-fix-check-return-value-for-fcntl-in-g.patch b/SOURCES/kvm-block-coverity-fix-check-return-value-for-fcntl-in-g.patch new file mode 100644 index 0000000..05df3e8 --- /dev/null +++ b/SOURCES/kvm-block-coverity-fix-check-return-value-for-fcntl-in-g.patch @@ -0,0 +1,51 @@ +From 25730930b496dd639afe8906744ce9ebeb7db7e9 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 5 Aug 2015 14:38:26 +0200 +Subject: [PATCH 3/3] block: coverity fix: check return value for fcntl in + gluster + +Message-id: <9a482772dc4e110d2a774bbed0e1dbecdaaec43e.1438784597.git.jcody@redhat.com> +Patchwork-id: 67323 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v3] block: coverity fix: check return value for fcntl in gluster +Bugzilla: 1219217 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Check return value in the Gluster driver for fcntl, as pointed +out by coverity. + +Cleanup of s->fds is done inline in the error handling for the fcntl() +call, rather than in the function cleanup, to keep changes minimal for +future backports. + +Downstream-only, as upstream Gluster driver does not use fcntl anymore. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 5f85799..1793386 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -357,7 +357,13 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options, + ret = -errno; + goto out; + } +- fcntl(s->fds[GLUSTER_FD_READ], F_SETFL, O_NONBLOCK); ++ ret = fcntl(s->fds[GLUSTER_FD_READ], F_SETFL, O_NONBLOCK); ++ if (ret < 0) { ++ ret = -errno; ++ close(s->fds[GLUSTER_FD_READ]); ++ close(s->fds[GLUSTER_FD_WRITE]); ++ goto out; ++ } + qemu_aio_set_fd_handler(s->fds[GLUSTER_FD_READ], + qemu_gluster_aio_event_reader, NULL, qemu_gluster_aio_flush_cb, s); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-curl-Don-t-lose-original-error-when-a-connecti.patch b/SOURCES/kvm-block-curl-Don-t-lose-original-error-when-a-connecti.patch new file mode 100644 index 0000000..c3f5589 --- /dev/null +++ b/SOURCES/kvm-block-curl-Don-t-lose-original-error-when-a-connecti.patch @@ -0,0 +1,100 @@ +From 264a2066904d31c46860e0bac8790d57e6498b80 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 16 Jul 2015 15:41:54 +0200 +Subject: [PATCH 1/5] block/curl: Don't lose original error when a connection + fails. + +Message-id: <1437061314-4775-1-git-send-email-rjones@redhat.com> +Patchwork-id: 67043 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v3] block/curl: Don't lose original error when a connection fails. +Bugzilla: 1235812 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Stefan Hajnoczi + +From: "Richard W.M. Jones" + +Currently if qemu is connected to a curl source (eg. web server), and +the web server fails / times out / dies, you always see a bogus EIO +"Input/output error". + +For example, choose a large file located on any local webserver which +you control: + + $ qemu-img convert -p http://example.com/large.iso /tmp/test + +Once it starts copying the file, stop the webserver and you will see +qemu-img fail with: + + qemu-img: error while reading sector 61440: Input/output error + +This patch does two things: Firstly print the actual error from curl +so it doesn't get lost. Secondly, change EIO to EPROTO. EPROTO is a +POSIX.1 compatible errno which more accurately reflects that there was +a protocol error, rather than some kind of hardware failure. + +After this patch is applied, the error changes to: + + $ qemu-img convert -p http://example.com/large.iso /tmp/test + qemu-img: curl: transfer closed with 469989 bytes remaining to read + qemu-img: error while reading sector 16384: Protocol error + +Signed-off-by: Richard W.M. Jones +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Jeff Cody + +BZ: https://bugzilla.redhat.com/1235812 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=9529354 +Upstream-status: 796a060bc0fab40953997976a2e30d9d6235bc7b +--- + block/curl.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index 3088329..dfa8cee 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -22,6 +22,7 @@ + * THE SOFTWARE. + */ + #include "qemu-common.h" ++#include "qemu/error-report.h" + #include "block/block_int.h" + #include "qapi/qmp/qbool.h" + #include +@@ -294,6 +295,18 @@ static void curl_multi_check_completion(BDRVCURLState *s) + /* ACBs for successful messages get completed in curl_read_cb */ + if (msg->data.result != CURLE_OK) { + int i; ++ static int errcount = 100; ++ ++ /* Don't lose the original error message from curl, since ++ * it contains extra data. ++ */ ++ if (errcount > 0) { ++ error_report("curl: %s", state->errmsg); ++ if (--errcount == 0) { ++ error_report("curl: further errors suppressed"); ++ } ++ } ++ + for (i = 0; i < CURL_NUM_ACB; i++) { + CURLAIOCB *acb = state->acb[i]; + +@@ -301,7 +314,7 @@ static void curl_multi_check_completion(BDRVCURLState *s) + continue; + } + +- acb->common.cb(acb->common.opaque, -EIO); ++ acb->common.cb(acb->common.opaque, -EPROTO); + qemu_aio_release(acb); + state->acb[i] = NULL; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-curl-Implement-the-libcurl-timer-callback-inte.patch b/SOURCES/kvm-block-curl-Implement-the-libcurl-timer-callback-inte.patch new file mode 100644 index 0000000..57d6b49 --- /dev/null +++ b/SOURCES/kvm-block-curl-Implement-the-libcurl-timer-callback-inte.patch @@ -0,0 +1,200 @@ +From a8b59fd3d7aa9f6a16caf4c13534039a81552118 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:14 +0200 +Subject: [PATCH 14/30] block/curl: Implement the libcurl timer callback + interface + +Message-id: <1434022828-13037-8-git-send-email-rjones@redhat.com> +Patchwork-id: 65842 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 07/21] block/curl: Implement the libcurl timer callback interface +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Peter Maydell + +libcurl versions 7.16.0 and later have a timer callback interface which +must be implemented in order for libcurl to make forward progress (it +will sometimes rely on being called back on the timeout if there are +no file descriptors registered). Implement the callback, and use a +QEMU AIO timer to ensure we prod libcurl again when it asks us to. + +Based on Peter's original patch plus my fix to add curl_multi_timeout_do. +Should compile just fine even on older versions of libcurl. + +I also tried copy-on-read and streaming: + + $ ./qemu-img create -f qcow2 -o \ + backing_file=http://download.fedoraproject.org/pub/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso \ + foo.qcow2 1G + $ x86_64-softmmu/qemu-system-x86_64 \ + -drive if=none,file=foo.qcow2,copy-on-read=on,id=cd \ + -device ide-cd,drive=cd --enable-kvm -m 1024 + +Direct http usage is probably too slow, but with copy-on-read ultimately +the image does boot! + +After some time, streaming gets canceled by an EIO, which needs further +investigation. + +Signed-off-by: Peter Maydell +Signed-off-by: Paolo Bonzini +Signed-off-by: Kevin Wolf + +Upstream-status: 031fd1be5618c347f9aeb44ec294f14a541e42b2 + +This patch is modified from upstream by adapting the patch +to use the timers API from qemu 1.5.3. (Thanks: Kevin Wolf) + +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 70 insertions(+), 11 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index 7569dd5..a6631fe 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -34,6 +34,11 @@ + #define DPRINTF(fmt, ...) do { } while (0) + #endif + ++#if LIBCURL_VERSION_NUM >= 0x071000 ++/* The multi interface timer callback was introduced in 7.16.0 */ ++#define NEED_CURL_TIMER_CALLBACK ++#endif ++ + #define PROTOCOLS (CURLPROTO_HTTP | CURLPROTO_HTTPS | \ + CURLPROTO_FTP | CURLPROTO_FTPS | \ + CURLPROTO_TFTP) +@@ -77,6 +82,7 @@ typedef struct CURLState + + typedef struct BDRVCURLState { + CURLM *multi; ++ QEMUTimer *timer; + size_t len; + CURLState states[CURL_NUM_STATES]; + char *url; +@@ -87,6 +93,23 @@ static void curl_clean_state(CURLState *s); + static void curl_multi_do(void *arg); + static int curl_aio_flush(void *opaque); + ++#ifdef NEED_CURL_TIMER_CALLBACK ++static int curl_timer_cb(CURLM *multi, long timeout_ms, void *opaque) ++{ ++ BDRVCURLState *s = opaque; ++ ++ DPRINTF("CURL: timer callback timeout_ms %ld\n", timeout_ms); ++ if (timeout_ms == -1) { ++ qemu_del_timer(s->timer); ++ } else { ++ int64_t timeout_ns = (int64_t)timeout_ms * 1000 * 1000; ++ qemu_mod_timer(s->timer, ++ qemu_get_clock_ns(rt_clock) + timeout_ns); ++ } ++ return 0; ++} ++#endif ++ + static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action, + void *s, void *sp) + { +@@ -213,20 +236,10 @@ static int curl_find_buf(BDRVCURLState *s, size_t start, size_t len, + return FIND_RET_NONE; + } + +-static void curl_multi_do(void *arg) ++static void curl_multi_read(BDRVCURLState *s) + { +- BDRVCURLState *s = (BDRVCURLState *)arg; +- int running; +- int r; + int msgs_in_queue; + +- if (!s->multi) +- return; +- +- do { +- r = curl_multi_socket_all(s->multi, &running); +- } while(r == CURLM_CALL_MULTI_PERFORM); +- + /* Try to find done transfers, so we can free the easy + * handle again. */ + do { +@@ -271,6 +284,41 @@ static void curl_multi_do(void *arg) + } while(msgs_in_queue); + } + ++static void curl_multi_do(void *arg) ++{ ++ BDRVCURLState *s = (BDRVCURLState *)arg; ++ int running; ++ int r; ++ ++ if (!s->multi) { ++ return; ++ } ++ ++ do { ++ r = curl_multi_socket_all(s->multi, &running); ++ } while(r == CURLM_CALL_MULTI_PERFORM); ++ ++ curl_multi_read(s); ++} ++ ++static void curl_multi_timeout_do(void *arg) ++{ ++#ifdef NEED_CURL_TIMER_CALLBACK ++ BDRVCURLState *s = (BDRVCURLState *)arg; ++ int running; ++ ++ if (!s->multi) { ++ return; ++ } ++ ++ curl_multi_socket_action(s->multi, CURL_SOCKET_TIMEOUT, 0, &running); ++ ++ curl_multi_read(s); ++#else ++ abort(); ++#endif ++} ++ + static CURLState *curl_init_state(BDRVCURLState *s) + { + CURLState *state = NULL; +@@ -462,12 +510,19 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + curl_easy_cleanup(state->curl); + state->curl = NULL; + ++ s->timer = qemu_new_timer(rt_clock, SCALE_NS, ++ curl_multi_timeout_do, s); ++ + // Now we know the file exists and its size, so let's + // initialize the multi interface! + + s->multi = curl_multi_init(); + curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s); + curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb); ++#ifdef NEED_CURL_TIMER_CALLBACK ++ curl_multi_setopt(s->multi, CURLMOPT_TIMERDATA, s); ++ curl_multi_setopt(s->multi, CURLMOPT_TIMERFUNCTION, curl_timer_cb); ++#endif + curl_multi_do(s); + + qemu_opts_del(opts); +@@ -607,6 +662,10 @@ static void curl_close(BlockDriverState *bs) + } + if (s->multi) + curl_multi_cleanup(s->multi); ++ ++ qemu_del_timer(s->timer); ++ qemu_free_timer(s->timer); ++ + g_free(s->url); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-curl-Improve-type-safety-of-s-timeout.patch b/SOURCES/kvm-block-curl-Improve-type-safety-of-s-timeout.patch new file mode 100644 index 0000000..c4d38b3 --- /dev/null +++ b/SOURCES/kvm-block-curl-Improve-type-safety-of-s-timeout.patch @@ -0,0 +1,88 @@ +From c44c930396e5c19511f36bc45c3f386966b15f9d Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:28 +0200 +Subject: [PATCH 28/30] block/curl: Improve type safety of s->timeout. + +Message-id: <1434022828-13037-22-git-send-email-rjones@redhat.com> +Patchwork-id: 65856 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 21/21] block/curl: Improve type safety of s->timeout. +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: "Richard W.M. Jones" + +qemu_opt_get_number returns a uint64_t, and curl_easy_setopt expects a +long (not an int). There is no warning about the latter type error +because curl_easy_setopt uses a varargs argument. + +Store the timeout (which is a positive number of seconds) as a +uint64_t. Check that the number given by the user is reasonable. +Zero is permissible (meaning no timeout is enforced by cURL). + +Cast it to long before calling curl_easy_setopt to fix the type error. + +Example error message after this change has been applied: + +$ ./qemu-img create -f qcow2 /tmp/test.qcow2 \ + -b 'json: { "file.driver":"https", + "file.url":"https://foo/bar", + "file.timeout":-1 }' +qemu-img: /tmp/test.qcow2: Could not open 'json: { "file.driver":"https", "file.url":"https://foo/bar", "file.timeout":-1 }': timeout parameter is too large or negative: Invalid argument + +Signed-off-by: Richard W.M. Jones +Reviewed-by: Laszlo Ersek +Reviewed-by: Gonglei +Signed-off-by: Stefan Hajnoczi + +Upstream-status: f76faeda4bd59f972d09dd9d954297f17c21dd60 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index 5b407aa..3088329 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -64,6 +64,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, + #define SECTOR_SIZE 512 + #define READ_AHEAD_DEFAULT (256 * 1024) + #define CURL_TIMEOUT_DEFAULT 5 ++#define CURL_TIMEOUT_MAX 10000 + + #define FIND_RET_NONE 0 + #define FIND_RET_OK 1 +@@ -112,7 +113,7 @@ typedef struct BDRVCURLState { + char *url; + size_t readahead_size; + bool sslverify; +- int timeout; ++ uint64_t timeout; + char *cookie; + bool accept_range; + } BDRVCURLState; +@@ -387,7 +388,7 @@ static CURLState *curl_init_state(BDRVCURLState *s) + if (s->cookie) { + curl_easy_setopt(state->curl, CURLOPT_COOKIE, s->cookie); + } +- curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, s->timeout); ++ curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, (long)s->timeout); + curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, + (void *)curl_read_cb); + curl_easy_setopt(state->curl, CURLOPT_WRITEDATA, (void *)state); +@@ -496,6 +497,10 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + + s->timeout = qemu_opt_get_number(opts, CURL_BLOCK_OPT_TIMEOUT, + CURL_TIMEOUT_DEFAULT); ++ if (s->timeout > CURL_TIMEOUT_MAX) { ++ error_setg(errp, "timeout parameter is too large or negative"); ++ goto out_noclean; ++ } + + s->sslverify = qemu_opt_get_bool(opts, CURL_BLOCK_OPT_SSLVERIFY, true); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-define-get_block_status-return-value.patch b/SOURCES/kvm-block-define-get_block_status-return-value.patch new file mode 100644 index 0000000..feed64b --- /dev/null +++ b/SOURCES/kvm-block-define-get_block_status-return-value.patch @@ -0,0 +1,106 @@ +From 68c09ecc5cb4154d5d7ef839b3d20e7a4f45bc32 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:38 +0200 +Subject: [PATCH 13/81] block: define get_block_status return value + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-14-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54997 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 13/26] block: define get_block_status return value +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Define the return value of get_block_status. Bits 0, 1, 2 and 9-62 +are valid; bit 63 (the sign bit) is reserved for errors. Bits 3-8 +are left for future extensions. + +The return code is compatible with the old is_allocated API: if a driver +only returns 0 or 1 (aka BDRV_BLOCK_DATA) like is_allocated used to, +clients of is_allocated will not have any change in behavior. Still, +we will return more precise information in the next patches and the +new definition of bdrv_is_allocated is already prepared for this. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4333bb71405f58a8dc8d3255feb3ca5960b0daf8) +--- + block.c | 10 ++++++++-- + include/block/block.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 34 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 10 ++++++++-- + include/block/block.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 34 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 772f5b7..8c583bf 100644 +--- a/block.c ++++ b/block.c +@@ -3059,7 +3059,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + + if (!bs->drv->bdrv_co_get_block_status) { + *pnum = nb_sectors; +- return 1; ++ return BDRV_BLOCK_DATA; + } + + return bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); +@@ -3109,7 +3109,13 @@ int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num, + int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, int *pnum) + { +- return bdrv_get_block_status(bs, sector_num, nb_sectors, pnum); ++ int64_t ret = bdrv_get_block_status(bs, sector_num, nb_sectors, pnum); ++ if (ret < 0) { ++ return ret; ++ } ++ return ++ (ret & BDRV_BLOCK_DATA) || ++ ((ret & BDRV_BLOCK_ZERO) && !bdrv_has_zero_init(bs)); + } + + /* +diff --git a/include/block/block.h b/include/block/block.h +index a733f5f..01f5c65 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -92,6 +92,32 @@ typedef struct BlockDevOps { + #define BDRV_SECTOR_SIZE (1ULL << BDRV_SECTOR_BITS) + #define BDRV_SECTOR_MASK ~(BDRV_SECTOR_SIZE - 1) + ++/* BDRV_BLOCK_DATA: data is read from bs->file or another file ++ * BDRV_BLOCK_ZERO: sectors read as zero ++ * BDRV_BLOCK_OFFSET_VALID: sector stored in bs->file as raw data ++ * ++ * If BDRV_BLOCK_OFFSET_VALID is set, bits 9-62 represent the offset in ++ * bs->file where sector data can be read from as raw data. ++ * ++ * DATA == 0 && ZERO == 0 means that data is read from backing_hd if present. ++ * ++ * DATA ZERO OFFSET_VALID ++ * t t t sectors read as zero, bs->file is zero at offset ++ * t f t sectors read as valid from bs->file at offset ++ * f t t sectors preallocated, read as zero, bs->file not ++ * necessarily zero at offset ++ * f f t sectors preallocated but read from backing_hd, ++ * bs->file contains garbage at offset ++ * t t f sectors preallocated, read as zero, unknown offset ++ * t f f sectors read from unknown file or offset ++ * f t f not allocated or unknown offset, read as zero ++ * f f f not allocated or unknown offset, read from backing_hd ++ */ ++#define BDRV_BLOCK_DATA 1 ++#define BDRV_BLOCK_ZERO 2 ++#define BDRV_BLOCK_OFFSET_VALID 4 ++#define BDRV_BLOCK_OFFSET_MASK BDRV_SECTOR_MASK ++ + typedef enum { + BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP + } BlockErrorAction; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-delete-cow-block-driver.patch b/SOURCES/kvm-block-delete-cow-block-driver.patch new file mode 100644 index 0000000..eb674ff --- /dev/null +++ b/SOURCES/kvm-block-delete-cow-block-driver.patch @@ -0,0 +1,644 @@ +From c21689e9b457b3790a5d0294c2815f2df561dece Mon Sep 17 00:00:00 2001 +Message-Id: +From: Stefan Hajnoczi +Date: Thu, 18 Dec 2014 11:11:06 -0600 +Subject: [CHANGE] block: delete cow block driver +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Stefan Hajnoczi +Message-id: <1418901066-25891-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 62969 +O-Subject: [RHEL-7.1 qemu-kvm PATCH RESEND] block: delete cow block driver +Bugzilla: 1175325 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz + +This patch removes support for the cow file format. + +Normally we do not break backwards compatibility but in this case there +is no impact and it is the most logical option. Extraordinary claims +require extraordinary evidence so I will show why removing the cow block +driver is the right thing to do. + +The cow file format is the disk image format for Usermode Linux, a way +of running a Linux system in userspace. The performance of UML was +never great and it was hacky, but it enjoyed some popularity before +hardware virtualization support became mainstream. + +QEMU's block/cow.c is supposed to read this image file format. +Unfortunately the file format was underspecified: + +1. Earlier Linux versions used the MAXPATHLEN constant for the backing + filename field. The value of MAXPATHLEN can change, so Linux + switched to a 4096 literal but QEMU has a 1024 literal. + +2. Padding was not used on the header struct (both in the Linux kernel + and in QEMU) so the struct layout varied across architectures. In + particular, i386 and x86_64 were different due to int64_t alignment + differences. Linux now uses __attribute__((packed)), QEMU does not. + +Therefore: + +1. QEMU cow images do not conform to the Linux cow image file format. + +2. cow images cannot be shared between different host architectures. + +This means QEMU cow images are useless and QEMU has not had bug reports +from users actually hitting these issues. + +Let's get rid of this thing, it serves no purpose and no one will be +affected. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Markus Armbruster +Message-id: 1410877464-20481-1-git-send-email-stefanha@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 550830f9351291c585c963204ad9127998b1c1ce) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Jeff E. Nelson + +Conflicts: + block/Makefile.objs + +Context conflict, easy to resolve. + + block/cow.c + +No problem, we're deleting this file anyway. + + qapi/block-core.json + +Downstream still uses qapi-schema.json. + + tests/image-fuzzer/runner.py + +Not present downstream, skip it. + + tests/qemu-iotests/069 + +Context conflict, easy to resolve. + + tests/qemu-iotests/072 + tests/qemu-iotests/099 + +Not present downstream, skip these tests. + + ui/cocoa.m + +We just want to drop "cow", the context conflict does not matter. + +Signed-off-by: Jeff E. Nelson +--- + block/Makefile.objs | 2 +- + block/cow.c | 402 ---------------------------------------------- + qapi-schema.json | 2 +- + qemu-doc.texi | 9 -- + qemu-img.texi | 4 +- + qmp-commands.hx | 2 +- + tests/qemu-iotests/069 | 2 +- + tests/qemu-iotests/common | 6 - + ui/cocoa.m | 2 +- + 9 files changed, 7 insertions(+), 424 deletions(-) + delete mode 100644 block/cow.c + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 0be180f..ebc350b 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -1,4 +1,4 @@ +-block-obj-y += raw.o cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat.o ++block-obj-y += raw.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat.o + block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o qcow2-cache.o + block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o + block-obj-y += qed-check.o +diff --git a/block/cow.c b/block/cow.c +deleted file mode 100644 +index c75668b..0000000 +--- a/block/cow.c ++++ /dev/null +@@ -1,402 +0,0 @@ +-/* +- * Block driver for the COW format +- * +- * Copyright (c) 2004 Fabrice Bellard +- * +- * Permission is hereby granted, free of charge, to any person obtaining a copy +- * of this software and associated documentation files (the "Software"), to deal +- * in the Software without restriction, including without limitation the rights +- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +- * copies of the Software, and to permit persons to whom the Software is +- * furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +- * THE SOFTWARE. +- */ +-#include "qemu-common.h" +-#include "block/block_int.h" +-#include "qemu/module.h" +- +-/**************************************************************/ +-/* COW block driver using file system holes */ +- +-/* user mode linux compatible COW file */ +-#define COW_MAGIC 0x4f4f4f4d /* MOOO */ +-#define COW_VERSION 2 +- +-struct cow_header_v2 { +- uint32_t magic; +- uint32_t version; +- char backing_file[1024]; +- int32_t mtime; +- uint64_t size; +- uint32_t sectorsize; +-}; +- +-typedef struct BDRVCowState { +- CoMutex lock; +- int64_t cow_sectors_offset; +-} BDRVCowState; +- +-static int cow_probe(const uint8_t *buf, int buf_size, const char *filename) +-{ +- const struct cow_header_v2 *cow_header = (const void *)buf; +- +- if (buf_size >= sizeof(struct cow_header_v2) && +- be32_to_cpu(cow_header->magic) == COW_MAGIC && +- be32_to_cpu(cow_header->version) == COW_VERSION) +- return 100; +- else +- return 0; +-} +- +-static int cow_open(BlockDriverState *bs, QDict *options, int flags, +- Error **errp) +-{ +- BDRVCowState *s = bs->opaque; +- struct cow_header_v2 cow_header; +- int bitmap_size; +- int64_t size; +- int ret; +- +- /* see if it is a cow image */ +- ret = bdrv_pread(bs->file, 0, &cow_header, sizeof(cow_header)); +- if (ret < 0) { +- goto fail; +- } +- +- if (be32_to_cpu(cow_header.magic) != COW_MAGIC) { +- error_setg(errp, "Image not in COW format"); +- ret = -EINVAL; +- goto fail; +- } +- +- if (be32_to_cpu(cow_header.version) != COW_VERSION) { +- char version[64]; +- snprintf(version, sizeof(version), +- "COW version %" PRIu32, cow_header.version); +- error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, +- bs->device_name, "cow", version); +- ret = -ENOTSUP; +- goto fail; +- } +- +- /* cow image found */ +- size = be64_to_cpu(cow_header.size); +- bs->total_sectors = size / 512; +- +- pstrcpy(bs->backing_file, sizeof(bs->backing_file), +- cow_header.backing_file); +- +- bitmap_size = ((bs->total_sectors + 7) >> 3) + sizeof(cow_header); +- s->cow_sectors_offset = (bitmap_size + 511) & ~511; +- qemu_co_mutex_init(&s->lock); +- return 0; +- fail: +- return ret; +-} +- +-/* +- * XXX(hch): right now these functions are extremely inefficient. +- * We should just read the whole bitmap we'll need in one go instead. +- */ +-static inline int cow_set_bit(BlockDriverState *bs, int64_t bitnum, bool *first) +-{ +- uint64_t offset = sizeof(struct cow_header_v2) + bitnum / 8; +- uint8_t bitmap; +- int ret; +- +- ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap)); +- if (ret < 0) { +- return ret; +- } +- +- if (bitmap & (1 << (bitnum % 8))) { +- return 0; +- } +- +- if (*first) { +- ret = bdrv_flush(bs->file); +- if (ret < 0) { +- return ret; +- } +- *first = false; +- } +- +- bitmap |= (1 << (bitnum % 8)); +- +- ret = bdrv_pwrite(bs->file, offset, &bitmap, sizeof(bitmap)); +- if (ret < 0) { +- return ret; +- } +- return 0; +-} +- +-#define BITS_PER_BITMAP_SECTOR (512 * 8) +- +-/* Cannot use bitmap.c on big-endian machines. */ +-static int cow_test_bit(int64_t bitnum, const uint8_t *bitmap) +-{ +- return (bitmap[bitnum / 8] & (1 << (bitnum & 7))) != 0; +-} +- +-static int cow_find_streak(const uint8_t *bitmap, int value, int start, int nb_sectors) +-{ +- int streak_value = value ? 0xFF : 0; +- int last = MIN(start + nb_sectors, BITS_PER_BITMAP_SECTOR); +- int bitnum = start; +- while (bitnum < last) { +- if ((bitnum & 7) == 0 && bitmap[bitnum / 8] == streak_value) { +- bitnum += 8; +- continue; +- } +- if (cow_test_bit(bitnum, bitmap) == value) { +- bitnum++; +- continue; +- } +- break; +- } +- return MIN(bitnum, last) - start; +-} +- +-/* Return true if first block has been changed (ie. current version is +- * in COW file). Set the number of continuous blocks for which that +- * is true. */ +-static int coroutine_fn cow_co_is_allocated(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, int *num_same) +-{ +- int64_t bitnum = sector_num + sizeof(struct cow_header_v2) * 8; +- uint64_t offset = (bitnum / 8) & -BDRV_SECTOR_SIZE; +- uint8_t bitmap[BDRV_SECTOR_SIZE]; +- int ret; +- int changed; +- +- ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap)); +- if (ret < 0) { +- return ret; +- } +- +- bitnum &= BITS_PER_BITMAP_SECTOR - 1; +- changed = cow_test_bit(bitnum, bitmap); +- *num_same = cow_find_streak(bitmap, changed, bitnum, nb_sectors); +- return changed; +-} +- +-static int64_t coroutine_fn cow_co_get_block_status(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, int *num_same) +-{ +- BDRVCowState *s = bs->opaque; +- int ret = cow_co_is_allocated(bs, sector_num, nb_sectors, num_same); +- int64_t offset = s->cow_sectors_offset + (sector_num << BDRV_SECTOR_BITS); +- if (ret < 0) { +- return ret; +- } +- return (ret ? BDRV_BLOCK_DATA : 0) | offset | BDRV_BLOCK_OFFSET_VALID; +-} +- +-static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num, +- int nb_sectors) +-{ +- int error = 0; +- int i; +- bool first = true; +- +- for (i = 0; i < nb_sectors; i++) { +- error = cow_set_bit(bs, sector_num + i, &first); +- if (error) { +- break; +- } +- } +- +- return error; +-} +- +-static int coroutine_fn cow_read(BlockDriverState *bs, int64_t sector_num, +- uint8_t *buf, int nb_sectors) +-{ +- BDRVCowState *s = bs->opaque; +- int ret, n; +- +- while (nb_sectors > 0) { +- ret = cow_co_is_allocated(bs, sector_num, nb_sectors, &n); +- if (ret < 0) { +- return ret; +- } +- if (ret) { +- ret = bdrv_pread(bs->file, +- s->cow_sectors_offset + sector_num * 512, +- buf, n * 512); +- if (ret < 0) { +- return ret; +- } +- } else { +- if (bs->backing_hd) { +- /* read from the base image */ +- ret = bdrv_read(bs->backing_hd, sector_num, buf, n); +- if (ret < 0) { +- return ret; +- } +- } else { +- memset(buf, 0, n * 512); +- } +- } +- nb_sectors -= n; +- sector_num += n; +- buf += n * 512; +- } +- return 0; +-} +- +-static coroutine_fn int cow_co_read(BlockDriverState *bs, int64_t sector_num, +- uint8_t *buf, int nb_sectors) +-{ +- int ret; +- BDRVCowState *s = bs->opaque; +- qemu_co_mutex_lock(&s->lock); +- ret = cow_read(bs, sector_num, buf, nb_sectors); +- qemu_co_mutex_unlock(&s->lock); +- return ret; +-} +- +-static int cow_write(BlockDriverState *bs, int64_t sector_num, +- const uint8_t *buf, int nb_sectors) +-{ +- BDRVCowState *s = bs->opaque; +- int ret; +- +- ret = bdrv_pwrite(bs->file, s->cow_sectors_offset + sector_num * 512, +- buf, nb_sectors * 512); +- if (ret < 0) { +- return ret; +- } +- +- return cow_update_bitmap(bs, sector_num, nb_sectors); +-} +- +-static coroutine_fn int cow_co_write(BlockDriverState *bs, int64_t sector_num, +- const uint8_t *buf, int nb_sectors) +-{ +- int ret; +- BDRVCowState *s = bs->opaque; +- qemu_co_mutex_lock(&s->lock); +- ret = cow_write(bs, sector_num, buf, nb_sectors); +- qemu_co_mutex_unlock(&s->lock); +- return ret; +-} +- +-static void cow_close(BlockDriverState *bs) +-{ +-} +- +-static int cow_create(const char *filename, QEMUOptionParameter *options, +- Error **errp) +-{ +- struct cow_header_v2 cow_header; +- struct stat st; +- int64_t image_sectors = 0; +- const char *image_filename = NULL; +- Error *local_err = NULL; +- int ret; +- BlockDriverState *cow_bs; +- +- /* Read out options */ +- while (options && options->name) { +- if (!strcmp(options->name, BLOCK_OPT_SIZE)) { +- image_sectors = options->value.n / 512; +- } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) { +- image_filename = options->value.s; +- } +- options++; +- } +- +- ret = bdrv_create_file(filename, options, &local_err); +- if (ret < 0) { +- error_propagate(errp, local_err); +- return ret; +- } +- +- ret = bdrv_file_open(&cow_bs, filename, NULL, BDRV_O_RDWR, &local_err); +- if (ret < 0) { +- error_propagate(errp, local_err); +- return ret; +- } +- +- memset(&cow_header, 0, sizeof(cow_header)); +- cow_header.magic = cpu_to_be32(COW_MAGIC); +- cow_header.version = cpu_to_be32(COW_VERSION); +- if (image_filename) { +- /* Note: if no file, we put a dummy mtime */ +- cow_header.mtime = cpu_to_be32(0); +- +- if (stat(image_filename, &st) != 0) { +- goto mtime_fail; +- } +- cow_header.mtime = cpu_to_be32(st.st_mtime); +- mtime_fail: +- pstrcpy(cow_header.backing_file, sizeof(cow_header.backing_file), +- image_filename); +- } +- cow_header.sectorsize = cpu_to_be32(512); +- cow_header.size = cpu_to_be64(image_sectors * 512); +- ret = bdrv_pwrite(cow_bs, 0, &cow_header, sizeof(cow_header)); +- if (ret < 0) { +- goto exit; +- } +- +- /* resize to include at least all the bitmap */ +- ret = bdrv_truncate(cow_bs, +- sizeof(cow_header) + ((image_sectors + 7) >> 3)); +- if (ret < 0) { +- goto exit; +- } +- +-exit: +- bdrv_unref(cow_bs); +- return ret; +-} +- +-static QEMUOptionParameter cow_create_options[] = { +- { +- .name = BLOCK_OPT_SIZE, +- .type = OPT_SIZE, +- .help = "Virtual disk size" +- }, +- { +- .name = BLOCK_OPT_BACKING_FILE, +- .type = OPT_STRING, +- .help = "File name of a base image" +- }, +- { NULL } +-}; +- +-static BlockDriver bdrv_cow = { +- .format_name = "cow", +- .instance_size = sizeof(BDRVCowState), +- +- .bdrv_probe = cow_probe, +- .bdrv_open = cow_open, +- .bdrv_close = cow_close, +- .bdrv_create = cow_create, +- .bdrv_has_zero_init = bdrv_has_zero_init_1, +- +- .bdrv_read = cow_co_read, +- .bdrv_write = cow_co_write, +- .bdrv_co_get_block_status = cow_co_get_block_status, +- +- .create_options = cow_create_options, +-}; +- +-static void bdrv_cow_init(void) +-{ +- bdrv_register(&bdrv_cow); +-} +- +-block_init(bdrv_cow_init); +diff --git a/qapi-schema.json b/qapi-schema.json +index 2af2643..8a7cf0b 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -826,6 +826,7 @@ + # 'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device', + # 'host_floppy', 'http', 'https', 'nbd', 'parallels', 'qcow', + # 'qcow2', 'raw', 'tftp', 'vdi', 'vmdk', 'vpc', 'vvfat' ++# 2.2: 'cow' dropped + # + # @backing_file: #optional the name of the backing file (for copy-on-write) + # +@@ -4076,7 +4077,6 @@ + + 'bochs': 'BlockdevOptionsGenericFormat', + 'cloop': 'BlockdevOptionsGenericFormat', +- 'cow': 'BlockdevOptionsGenericCOWFormat', + 'dmg': 'BlockdevOptionsGenericFormat', + 'parallels': 'BlockdevOptionsGenericFormat', + 'qcow': 'BlockdevOptionsGenericCOWFormat', +diff --git a/qemu-doc.texi b/qemu-doc.texi +index ff124fe..33f709a 100644 +--- a/qemu-doc.texi ++++ b/qemu-doc.texi +@@ -621,15 +621,6 @@ File name of a base image (see @option{create} subcommand) + If this option is set to @code{on}, the image is encrypted. + @end table + +-@item cow +-User Mode Linux Copy On Write image format. It is supported only for +-compatibility with previous versions. +-Supported options: +-@table @code +-@item backing_file +-File name of a base image (see @option{create} subcommand) +-@end table +- + @item vdi + VirtualBox 1.1 compatible image format. + Supported options: +diff --git a/qemu-img.texi b/qemu-img.texi +index e943856..2099dd1 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -201,8 +201,8 @@ compression is read-only. It means that if a compressed sector is + rewritten, then it is rewritten as uncompressed data. + + Image conversion is also useful to get smaller image when using a +-growable format such as @code{qcow} or @code{cow}: the empty sectors +-are detected and suppressed from the destination image. ++growable format such as @code{qcow}: the empty sectors are detected and ++suppressed from the destination image. + + @var{sparse_size} indicates the consecutive number of bytes (defaults to 4k) + that must contain only zeros for qemu-img to create a sparse image during +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 9c11213..44dd48e 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1903,7 +1903,7 @@ Each json-object contain the following: + - "file": device file name (json-string) + - "ro": true if read-only, false otherwise (json-bool) + - "drv": driver format name (json-string) +- - Possible values: "blkdebug", "bochs", "cloop", "cow", "dmg", ++ - Possible values: "blkdebug", "bochs", "cloop", "dmg", + "file", "file", "ftp", "ftps", "host_cdrom", + "host_device", "host_floppy", "http", "https", + "nbd", "parallels", "qcow", "qcow2", "raw", +diff --git a/tests/qemu-iotests/069 b/tests/qemu-iotests/069 +index 50347d9..d606685 100755 +--- a/tests/qemu-iotests/069 ++++ b/tests/qemu-iotests/069 +@@ -38,7 +38,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + . ./common.rc + . ./common.filter + +-_supported_fmt cow qed qcow qcow2 vmdk ++_supported_fmt qed qcow qcow2 vmdk + _supported_proto generic + _supported_os Linux + _unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index f8c1b56..a90415a 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -129,7 +129,6 @@ common options + check options + -raw test raw (default) + -bochs test bochs +- -cow test cow + -cloop test cloop + -parallels test parallels + -qcow test qcow +@@ -171,11 +170,6 @@ testlist options + xpand=false + ;; + +- -cow) +- IMGFMT=cow +- xpand=false +- ;; +- + -cloop) + IMGFMT=cloop + IMGFMT_GENERIC=false +diff --git a/ui/cocoa.m b/ui/cocoa.m +index 1971d9c..0c35f25 100644 +--- a/ui/cocoa.m ++++ b/ui/cocoa.m +@@ -771,7 +771,7 @@ QemuCocoaView *cocoaView; + NSOpenPanel *op = [[NSOpenPanel alloc] init]; + [op setPrompt:@"Boot image"]; + [op setMessage:@"Select the disk image you want to boot.\n\nHit the \"Cancel\" button to quit"]; +- [op beginSheetForDirectory:nil file:nil types:[NSArray arrayWithObjects:@"img",@"iso",@"dmg",@"qcow",@"cow",@"cloop",@"vmdk",nil] ++ [op beginSheetForDirectory:nil file:nil types:[NSArray arrayWithObjects:@"img",@"iso",@"dmg",@"qcow",@"cloop",@"vmdk",nil] + modalForWindow:normalWindow modalDelegate:self + didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:NULL]; + } else { +-- +2.1.0 + diff --git a/SOURCES/kvm-block-do-not-abuse-EMEDIUMTYPE.patch b/SOURCES/kvm-block-do-not-abuse-EMEDIUMTYPE.patch new file mode 100644 index 0000000..8a0e916 --- /dev/null +++ b/SOURCES/kvm-block-do-not-abuse-EMEDIUMTYPE.patch @@ -0,0 +1,177 @@ +From 0b0c86931a7da43b6358b202799510b20775aa17 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:43 +0200 +Subject: [PATCH 05/20] block: do not abuse EMEDIUMTYPE + +Message-id: +Patchwork-id: 61209 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 04/15] block: do not abuse EMEDIUMTYPE +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Returning "Wrong medium type" for an image that does not have a valid +header is a bit weird. Improve the error by mentioning what format +was trying to open it. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 76abe4071d111a9ca6dcc9b9689a831c39ffa718) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/bochs.c | 3 ++- + block/cow.c | 3 ++- + block/parallels.c | 3 ++- + block/qcow.c | 3 ++- + block/qcow2.c | 2 +- + block/qed.c | 3 ++- + block/vdi.c | 4 ++-- + block/vmdk.c | 6 ++++-- + block/vpc.c | 3 ++- + 9 files changed, 19 insertions(+), 11 deletions(-) + +diff --git a/block/bochs.c b/block/bochs.c +index 5c74223..826ec12 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -113,7 +113,8 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + strcmp(bochs.subtype, GROWING_TYPE) || + ((le32_to_cpu(bochs.version) != HEADER_VERSION) && + (le32_to_cpu(bochs.version) != HEADER_V1))) { +- return -EMEDIUMTYPE; ++ error_setg(errp, "Image not in Bochs format"); ++ return -EINVAL; + } + + if (le32_to_cpu(bochs.version) == HEADER_V1) { +diff --git a/block/cow.c b/block/cow.c +index 909c3e7..46295d4 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -74,7 +74,8 @@ static int cow_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (be32_to_cpu(cow_header.magic) != COW_MAGIC) { +- ret = -EMEDIUMTYPE; ++ error_setg(errp, "Image not in COW format"); ++ ret = -EINVAL; + goto fail; + } + +diff --git a/block/parallels.c b/block/parallels.c +index d83cde4..1a5bd35 100644 +--- a/block/parallels.c ++++ b/block/parallels.c +@@ -85,7 +85,8 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, + + if (memcmp(ph.magic, HEADER_MAGIC, 16) || + (le32_to_cpu(ph.version) != HEADER_VERSION)) { +- ret = -EMEDIUMTYPE; ++ error_setg(errp, "Image not in Parallels format"); ++ ret = -EINVAL; + goto fail; + } + +diff --git a/block/qcow.c b/block/qcow.c +index ad44f78..a5f601f 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -115,7 +115,8 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + be64_to_cpus(&header.l1_table_offset); + + if (header.magic != QCOW_MAGIC) { +- ret = -EMEDIUMTYPE; ++ error_setg(errp, "Image not in qcow format"); ++ ret = -EINVAL; + goto fail; + } + if (header.version != QCOW_VERSION) { +diff --git a/block/qcow2.c b/block/qcow2.c +index 7398b16..0878d88 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -476,7 +476,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + if (header.magic != QCOW_MAGIC) { + error_setg(errp, "Image is not in qcow2 format"); +- ret = -EMEDIUMTYPE; ++ ret = -EINVAL; + goto fail; + } + if (header.version < 2 || header.version > 3) { +diff --git a/block/qed.c b/block/qed.c +index 619f2d0..d1de0a2 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -391,7 +391,8 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags, + qed_header_le_to_cpu(&le_header, &s->header); + + if (s->header.magic != QED_MAGIC) { +- return -EMEDIUMTYPE; ++ error_setg(errp, "Image not in QED format"); ++ return -EINVAL; + } + if (s->header.features & ~QED_FEATURE_MASK) { + /* image uses unsupported feature bits */ +diff --git a/block/vdi.c b/block/vdi.c +index b095bee..0f8b294 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -408,8 +408,8 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (header.signature != VDI_SIGNATURE) { +- logout("bad vdi signature %08x\n", header.signature); +- ret = -EMEDIUMTYPE; ++ error_setg(errp, "Image not in VDI format (bad signature %08x)", header.signature); ++ ret = -EINVAL; + goto fail; + } else if (header.version != VDI_VERSION_1_1) { + error_setg(errp, "unsupported VDI image (version %u.%u)", +diff --git a/block/vmdk.c b/block/vmdk.c +index 4ff9531..eff0663 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -712,7 +712,8 @@ static int vmdk_open_sparse(BlockDriverState *bs, + return vmdk_open_vmdk4(bs, file, flags, errp); + break; + default: +- return -EMEDIUMTYPE; ++ error_setg(errp, "Image not in VMDK format"); ++ return -EINVAL; + break; + } + } +@@ -828,7 +829,8 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + goto exit; + } + if (vmdk_parse_description(buf, "createType", ct, sizeof(ct))) { +- ret = -EMEDIUMTYPE; ++ error_setg(errp, "invalid VMDK image descriptor"); ++ ret = -EINVAL; + goto exit; + } + if (strcmp(ct, "monolithicFlat") && +diff --git a/block/vpc.c b/block/vpc.c +index 000d1c6..6e8fb33 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -193,7 +193,8 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + if (strncmp(footer->creator, "conectix", 8)) { +- ret = -EMEDIUMTYPE; ++ error_setg(errp, "invalid VPC image"); ++ ret = -EINVAL; + goto fail; + } + disk_type = VHD_FIXED; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-do-not-use-total_sectors-in-bdrv_co_is_allocat.patch b/SOURCES/kvm-block-do-not-use-total_sectors-in-bdrv_co_is_allocat.patch new file mode 100644 index 0000000..f70f9f6 --- /dev/null +++ b/SOURCES/kvm-block-do-not-use-total_sectors-in-bdrv_co_is_allocat.patch @@ -0,0 +1,51 @@ +From 0dbbdb969ae54cf3042ec60f740e9c4773726013 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:31 +0200 +Subject: [PATCH 06/81] block: do not use ->total_sectors in bdrv_co_is_allocated + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-7-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54989 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 06/26] block: do not use ->total_sectors in bdrv_co_is_allocated +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +This is more robust when the device has removable media. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 617ccb466e1937a5c99332ce77a47ebd29861ae4) +--- + block.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 0607cc6..9ea8221 100644 +--- a/block.c ++++ b/block.c +@@ -3031,9 +3031,15 @@ static int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, int *pnum) + { ++ int64_t length; + int64_t n; + +- if (sector_num >= bs->total_sectors) { ++ length = bdrv_getlength(bs); ++ if (length < 0) { ++ return length; ++ } ++ ++ if (sector_num >= (length >> BDRV_SECTOR_BITS)) { + *pnum = 0; + return 0; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-don-t-lose-data-from-last-incomplete-sector.patch b/SOURCES/kvm-block-don-t-lose-data-from-last-incomplete-sector.patch new file mode 100644 index 0000000..bb2353a --- /dev/null +++ b/SOURCES/kvm-block-don-t-lose-data-from-last-incomplete-sector.patch @@ -0,0 +1,48 @@ +From f0623f334b23dc9334ac9d227cc467c266b8b2c6 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 9 Oct 2013 09:50:21 +0200 +Subject: [PATCH 09/11] block: don't lose data from last incomplete sector + +RH-Author: Fam Zheng +Message-id: <1381312223-7074-2-git-send-email-famz@redhat.com> +Patchwork-id: 54793 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/3] block: don't lose data from last incomplete sector +Bugzilla: 1017049 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +To read the last sector that is not aligned to sector boundary, current +code for growable backends, since commit 893a8f6 "block: Produce zeros +when protocols reading beyond end of file", drops the data and directly +returns zeroes. That is incorrect. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit bcb9d66e8590151967e1dbe3724eec7ec71392e0) +Signed-off-by: Fam Zheng +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index a3bc800..bd52c13 100644 +--- a/block.c ++++ b/block.c +@@ -2567,7 +2567,7 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, + goto out; + } + +- total_sectors = len >> BDRV_SECTOR_BITS; ++ total_sectors = (len + BDRV_SECTOR_SIZE - 1) >> BDRV_SECTOR_BITS; + max_nb_sectors = MAX(0, total_sectors - sector_num); + if (max_nb_sectors > 0) { + ret = drv->bdrv_co_readv(bs, sector_num, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-drive-mirror-Check-for-NULL-backing_hd.patch b/SOURCES/kvm-block-drive-mirror-Check-for-NULL-backing_hd.patch new file mode 100644 index 0000000..063a4c2 --- /dev/null +++ b/SOURCES/kvm-block-drive-mirror-Check-for-NULL-backing_hd.patch @@ -0,0 +1,68 @@ +From bcc312ef8d0c8ff3c8743e01bd24fd26c4cc96f6 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:07:57 +0100 +Subject: [PATCH 23/34] block/drive-mirror: Check for NULL backing_hd + +RH-Author: Max Reitz +Message-id: <1390154881-17140-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 56816 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 3/7] block/drive-mirror: Check for NULL backing_hd +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +BZ: 921890 + +It should be possible to execute the QMP "drive-mirror" command in +"none" sync mode and "absolute-paths" mode even for block devices +lacking a backing file. + +"absolute-paths" does in fact not require a backing file to be present, +as can be seen from the "top" sync mode code path. "top" basically +states that the device should indeed have a backing file - however, the +current code catches the case if it doesn't and then simply treats it as +"full" sync mode, creating a target image without a backing file (in +"absolute-paths" mode). Thus, "absolute-paths" does not imply the target +file must indeed have a backing file. + +Therefore, the target file may be left unbacked in case of "none" sync +mode as well, if the specified device is not backed either. Currently, +qemu will crash trying to dereference the backing file pointer since it +assumes that it will always be non-NULL in that case ("none" with +"absolute-paths"). + +Signed-off-by: Max Reitz +Reviewed-by: Wenchao Xia +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 1452686495922b81d6cf43edf025c1aef15965c0) + +Signed-off-by: Max Reitz +--- + blockdev.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 0ba2504..06bbf30 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1611,7 +1611,9 @@ void qmp_drive_mirror(const char *device, const char *target, + return; + } + +- if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) { ++ if ((sync == MIRROR_SYNC_MODE_FULL || !source) ++ && mode != NEW_IMAGE_MODE_EXISTING) ++ { + /* create new image w/o backing file */ + assert(format && drv); + bdrv_img_create(target, format, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-drive-mirror-Reuse-backing-HD-for-sync-none.patch b/SOURCES/kvm-block-drive-mirror-Reuse-backing-HD-for-sync-none.patch new file mode 100644 index 0000000..5261bd9 --- /dev/null +++ b/SOURCES/kvm-block-drive-mirror-Reuse-backing-HD-for-sync-none.patch @@ -0,0 +1,70 @@ +From 0567c3f91a89c476b29341e581aac0e522d26717 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:08:00 +0100 +Subject: [PATCH 26/34] block/drive-mirror: Reuse backing HD for sync=none + +RH-Author: Max Reitz +Message-id: <1390154881-17140-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 56819 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 6/7] block/drive-mirror: Reuse backing HD for sync=none +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +BZ: 921890 + +For "none" sync mode in "absolute-paths" mode, the current image should +be used as the backing file for the newly created image. + +The current behavior is: +a) If the image to be mirrored has a backing file, use that (which is + wrong, since the operations recorded by "none" are applied to the + image itself, not to its backing file). +b) If the image to be mirrored lacks a backing file, the target doesn't + have one either (which is not really wrong, but not really right, + either; "none" records a set of operations executed on the image + file, therefore having no backing file to apply these operations on + seems rather pointless). + +For a, this is clearly a bugfix. For b, it is still a bugfix, although +it might break existing API - but since that case crashed qemu just +three weeks ago (before 1452686495922b81d6cf43edf025c1aef15965c0), we +can safely assume there is no such API relying on that case yet. + +Suggested-by: Paolo Bonzini +Signed-off-by: Max Reitz +Reviewed-by: Paolo Bonzini +Reviewed-by: Kevin Wolf +Reviewed-by: Eric Blake +Message-id: 1385407736-13941-2-git-send-email-mreitz@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 117e0c82881f05d88902d4059a3171bc6cd02df0) + +Signed-off-by: Max Reitz +--- + blockdev.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 06bbf30..80c6bb4 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1604,6 +1604,9 @@ void qmp_drive_mirror(const char *device, const char *target, + if (!source && sync == MIRROR_SYNC_MODE_TOP) { + sync = MIRROR_SYNC_MODE_FULL; + } ++ if (sync == MIRROR_SYNC_MODE_NONE) { ++ source = bs; ++ } + + size = bdrv_getlength(bs); + if (size < 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-drivers-add-discard-write_zeroes-properties-to.patch.patch.patch b/SOURCES/kvm-block-drivers-add-discard-write_zeroes-properties-to.patch.patch.patch new file mode 100644 index 0000000..8f3f733 --- /dev/null +++ b/SOURCES/kvm-block-drivers-add-discard-write_zeroes-properties-to.patch.patch.patch @@ -0,0 +1,106 @@ +From d10c277da89a9a2d288560fc6ccdc455b3d39090 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:18 +0100 +Subject: [PATCH 30/50] block drivers: add discard/write_zeroes properties to + bdrv_get_info implementation + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-33-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56069 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 32/52] block drivers: add discard/write_zeroes properties to bdrv_get_info implementation +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 95de6d7078b029b73708059a17cef20f332adcb7) +--- + block/qcow2.c | 2 ++ + block/qed.c | 2 ++ + block/vdi.c | 1 + + block/vhdx.c | 3 +++ + block/vpc.c | 1 + + 5 files changed, 9 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/qcow2.c | 2 ++ + block/qed.c | 2 ++ + block/vdi.c | 1 + + block/vhdx.c | 3 +++ + block/vpc.c | 1 + + 5 files changed, 9 insertions(+) + +diff --git a/block/qcow2.c b/block/qcow2.c +index c109646..bbba11f 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1886,6 +1886,8 @@ static int64_t qcow2_vm_state_offset(BDRVQcowState *s) + static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + { + BDRVQcowState *s = bs->opaque; ++ bdi->unallocated_blocks_are_zero = true; ++ bdi->can_write_zeroes_with_unmap = (s->qcow_version >= 3); + bdi->cluster_size = s->cluster_size; + bdi->vm_state_offset = qcow2_vm_state_offset(s); + return 0; +diff --git a/block/qed.c b/block/qed.c +index e163372..c470329 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -1475,6 +1475,8 @@ static int bdrv_qed_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + memset(bdi, 0, sizeof(*bdi)); + bdi->cluster_size = s->header.cluster_size; + bdi->is_dirty = s->header.features & QED_F_NEED_CHECK; ++ bdi->unallocated_blocks_are_zero = true; ++ bdi->can_write_zeroes_with_unmap = true; + return 0; + } + +diff --git a/block/vdi.c b/block/vdi.c +index dcbc27c..f973883 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -331,6 +331,7 @@ static int vdi_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + logout("\n"); + bdi->cluster_size = s->block_size; + bdi->vm_state_offset = 0; ++ bdi->unallocated_blocks_are_zero = true; + return 0; + } + +diff --git a/block/vhdx.c b/block/vhdx.c +index 7285b95..41c3065 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -884,6 +884,9 @@ static int vhdx_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + + bdi->cluster_size = s->block_size; + ++ bdi->unallocated_blocks_are_zero = ++ (s->params.data_bits & VHDX_PARAMS_HAS_PARENT) == 0; ++ + return 0; + } + +diff --git a/block/vpc.c b/block/vpc.c +index 49520c1..059069f 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -448,6 +448,7 @@ static int vpc_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + bdi->cluster_size = s->block_size; + } + ++ bdi->unallocated_blocks_are_zero = true; + return 0; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-drivers-expose-requirement-for-write-same-alig.patch.patch.patch b/SOURCES/kvm-block-drivers-expose-requirement-for-write-same-alig.patch.patch.patch new file mode 100644 index 0000000..daf514a --- /dev/null +++ b/SOURCES/kvm-block-drivers-expose-requirement-for-write-same-alig.patch.patch.patch @@ -0,0 +1,83 @@ +From 2ae5ce2fe476decb545f16c5af382e5959b2933a Mon Sep 17 00:00:00 2001 +Message-Id: <2ae5ce2fe476decb545f16c5af382e5959b2933a.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:19 +0100 +Subject: [PATCH 31/50] block drivers: expose requirement for write same + alignment from formats + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-34-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56070 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 33/52] block drivers: expose requirement for write same alignment from formats +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +This will let misaligned but large requests use zero clusters. This +is important because the cluster size is not guest visible. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit cffb1ec600de83f693a23578fc2f344c1af9b96f) + +Conflicts: + block/qed.c +--- + block/qcow2.c | 1 + + block/qed.c | 1 + + block/vmdk.c | 4 ++++ + 3 files changed, 6 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/qcow2.c | 1 + + block/qed.c | 1 + + block/vmdk.c | 4 ++++ + 3 files changed, 6 insertions(+) + +diff --git a/block/qcow2.c b/block/qcow2.c +index bbba11f..bf1f66f 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -717,6 +717,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + } + + qemu_opts_del(opts); ++ bs->bl.write_zeroes_alignment = s->cluster_sectors; + + if (s->use_lazy_refcounts && s->qcow_version < 3) { + error_setg(errp, "Lazy refcounts require a qcow2 image with at least " +diff --git a/block/qed.c b/block/qed.c +index c470329..0805ba3 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -495,6 +495,7 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags, + } + } + ++ bs->bl.write_zeroes_alignment = s->header.cluster_size >> BDRV_SECTOR_BITS; + s->need_check_timer = qemu_new_timer_ns(vm_clock, + qed_need_check_timer_cb, s); + +diff --git a/block/vmdk.c b/block/vmdk.c +index 6d676e4..8662016 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -428,6 +428,10 @@ static int vmdk_add_extent(BlockDriverState *bs, + extent->l2_size = l2_size; + extent->cluster_sectors = flat ? sectors : cluster_sectors; + ++ if (!flat) { ++ bs->bl.write_zeroes_alignment = ++ MAX(bs->bl.write_zeroes_alignment, cluster_sectors); ++ } + if (s->num_extents > 1) { + extent->end_sector = (*(extent - 1)).end_sector + extent->sectors; + } else { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-drop-bs_snapshots-global-variable.patch b/SOURCES/kvm-block-drop-bs_snapshots-global-variable.patch new file mode 100644 index 0000000..10052d6 --- /dev/null +++ b/SOURCES/kvm-block-drop-bs_snapshots-global-variable.patch @@ -0,0 +1,195 @@ +From bff9b33a3c4e0757c1e779ebedbffa391d926ecb Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:31:52 +0100 +Subject: [PATCH 01/87] block: drop bs_snapshots global variable + +RH-Author: Max Reitz +Message-id: <1383604354-12743-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 55301 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 01/43] block: drop bs_snapshots global variable +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Stefan Hajnoczi + +BZ: 1026524 + +The bs_snapshots global variable points to the BlockDriverState which +will be used to save vmstate. This is really a savevm.c concept but was +moved into block.c:bdrv_snapshots() when it became clear that hotplug +could result in a dangling pointer. + +While auditing the block layer's global state I came upon bs_snapshots +and realized that a variable is not necessary here. Simply find the +first BlockDriverState capable of internal snapshots each time this is +needed. + +The behavior of bdrv_snapshots() is preserved across hotplug because new +drives are always appended to the bdrv_states list. This means that +calling the new find_vmstate_bs() function is idempotent - it returns +the same BlockDriverState unless it was hot-unplugged. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Reviewed-by: Wenchao Xia +Signed-off-by: Wenchao Xia +Signed-off-by: Kevin Wolf +(cherry picked from commit 29d782710f87f01991bfc85cd9bef7d15280a5e2) + +Signed-off-by: Max Reitz +--- + block.c | 28 ---------------------------- + include/block/block.h | 1 - + savevm.c | 19 +++++++++++++++---- + 3 files changed, 15 insertions(+), 33 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 28 ---------------------------- + include/block/block.h | 1 - + savevm.c | 19 +++++++++++++++---- + 3 files changed, 15 insertions(+), 33 deletions(-) + +diff --git a/block.c b/block.c +index fdff92f..84a3a8d 100644 +--- a/block.c ++++ b/block.c +@@ -99,9 +99,6 @@ static QTAILQ_HEAD(, BlockDriverState) bdrv_states = + static QLIST_HEAD(, BlockDriver) bdrv_drivers = + QLIST_HEAD_INITIALIZER(bdrv_drivers); + +-/* The device to use for VM snapshots */ +-static BlockDriverState *bs_snapshots; +- + /* If non-zero, use only whitelisted block drivers */ + static int use_bdrv_whitelist; + +@@ -1384,9 +1381,6 @@ void bdrv_close(BlockDriverState *bs) + notifier_list_notify(&bs->close_notifiers, bs); + + if (bs->drv) { +- if (bs == bs_snapshots) { +- bs_snapshots = NULL; +- } + if (bs->backing_hd) { + bdrv_delete(bs->backing_hd); + bs->backing_hd = NULL; +@@ -1619,7 +1613,6 @@ void bdrv_delete(BlockDriverState *bs) + + bdrv_close(bs); + +- assert(bs != bs_snapshots); + g_free(bs); + } + +@@ -1663,9 +1656,6 @@ void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops, + { + bs->dev_ops = ops; + bs->dev_opaque = opaque; +- if (bdrv_dev_has_removable_media(bs) && bs == bs_snapshots) { +- bs_snapshots = NULL; +- } + } + + void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv, +@@ -3493,24 +3483,6 @@ int bdrv_is_snapshot(BlockDriverState *bs) + return !!(bs->open_flags & BDRV_O_SNAPSHOT); + } + +-BlockDriverState *bdrv_snapshots(void) +-{ +- BlockDriverState *bs; +- +- if (bs_snapshots) { +- return bs_snapshots; +- } +- +- bs = NULL; +- while ((bs = bdrv_next(bs))) { +- if (bdrv_can_snapshot(bs)) { +- bs_snapshots = bs; +- return bs; +- } +- } +- return NULL; +-} +- + int bdrv_snapshot_create(BlockDriverState *bs, + QEMUSnapshotInfo *sn_info) + { +diff --git a/include/block/block.h b/include/block/block.h +index bc1f5f6..3b3f40e 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -362,7 +362,6 @@ BlockInfo *bdrv_query_info(BlockDriverState *s); + BlockStats *bdrv_query_stats(const BlockDriverState *bs); + int bdrv_can_snapshot(BlockDriverState *bs); + int bdrv_is_snapshot(BlockDriverState *bs); +-BlockDriverState *bdrv_snapshots(void); + int bdrv_snapshot_create(BlockDriverState *bs, + QEMUSnapshotInfo *sn_info); + int bdrv_snapshot_goto(BlockDriverState *bs, +diff --git a/savevm.c b/savevm.c +index 1ed7f05..d9f3787 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -2262,6 +2262,17 @@ out: + return ret; + } + ++static BlockDriverState *find_vmstate_bs(void) ++{ ++ BlockDriverState *bs = NULL; ++ while ((bs = bdrv_next(bs))) { ++ if (bdrv_can_snapshot(bs)) { ++ return bs; ++ } ++ } ++ return NULL; ++} ++ + static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info, + const char *name) + { +@@ -2338,7 +2349,7 @@ void do_savevm(Monitor *mon, const QDict *qdict) + } + } + +- bs = bdrv_snapshots(); ++ bs = find_vmstate_bs(); + if (!bs) { + monitor_printf(mon, "No block device can accept snapshots\n"); + return; +@@ -2440,7 +2451,7 @@ int load_vmstate(const char *name) + QEMUFile *f; + int ret; + +- bs_vm_state = bdrv_snapshots(); ++ bs_vm_state = find_vmstate_bs(); + if (!bs_vm_state) { + error_report("No block device supports snapshots"); + return -ENOTSUP; +@@ -2519,7 +2530,7 @@ void do_delvm(Monitor *mon, const QDict *qdict) + int ret; + const char *name = qdict_get_str(qdict, "name"); + +- bs = bdrv_snapshots(); ++ bs = find_vmstate_bs(); + if (!bs) { + monitor_printf(mon, "No block device supports snapshots\n"); + return; +@@ -2551,7 +2562,7 @@ void do_info_snapshots(Monitor *mon, const QDict *qdict) + int *available_snapshots; + char buf[256]; + +- bs = bdrv_snapshots(); ++ bs = find_vmstate_bs(); + if (!bs) { + monitor_printf(mon, "No available block device supports snapshots\n"); + return; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-dump-snapshot-and-image-info-to-specified-outp.patch b/SOURCES/kvm-block-dump-snapshot-and-image-info-to-specified-outp.patch new file mode 100644 index 0000000..76662c9 --- /dev/null +++ b/SOURCES/kvm-block-dump-snapshot-and-image-info-to-specified-outp.patch @@ -0,0 +1,251 @@ +From 427c29cd043ba19a46096c66fafb321aecb8bc9b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:26 +0100 +Subject: [PATCH 69/87] block: dump snapshot and image info to specified output + +RH-Author: Max Reitz +Message-id: <1383756824-6921-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 55558 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 03/21] block: dump snapshot and image info to specified output +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Wenchao Xia + +BZ: 980771 + +bdrv_snapshot_dump() and bdrv_image_info_dump() do not dump to a buffer now, +some internal buffers are still used for format control, which have no +chance to be truncated. As a result, these two functions have no more issue +of truncation, and they can be used by both qemu and qemu-img with correct +parameter specified. + +Signed-off-by: Wenchao Xia +Signed-off-by: Kevin Wolf +(cherry picked from commit 5b91704469c0f801e0219f26458356872c4145ab) + +Signed-off-by: Max Reitz +--- + block/qapi.c | 66 ++++++++++++++++++++++++++++------------------------ + include/block/qapi.h | 6 +++-- + qemu-img.c | 9 +++---- + savevm.c | 7 +++--- + 4 files changed, 49 insertions(+), 39 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qapi.c | 66 +++++++++++++++++++++++++++---------------------- + include/block/qapi.h | 6 +++- + qemu-img.c | 9 ++++--- + savevm.c | 7 +++-- + 4 files changed, 49 insertions(+), 39 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index 155e77e..794dbf8 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -259,7 +259,8 @@ static char *get_human_readable_size(char *buf, int buf_size, int64_t size) + return buf; + } + +-char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) ++void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f, ++ QEMUSnapshotInfo *sn) + { + char buf1[128], date_buf[128], clock_buf[128]; + struct tm tm; +@@ -267,9 +268,9 @@ char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) + int64_t secs; + + if (!sn) { +- snprintf(buf, buf_size, +- "%-10s%-20s%7s%20s%15s", +- "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); ++ func_fprintf(f, ++ "%-10s%-20s%7s%20s%15s", ++ "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); + } else { + ti = sn->date_sec; + localtime_r(&ti, &tm); +@@ -282,17 +283,18 @@ char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) + (int)((secs / 60) % 60), + (int)(secs % 60), + (int)((sn->vm_clock_nsec / 1000000) % 1000)); +- snprintf(buf, buf_size, +- "%-10s%-20s%7s%20s%15s", +- sn->id_str, sn->name, +- get_human_readable_size(buf1, sizeof(buf1), sn->vm_state_size), +- date_buf, +- clock_buf); ++ func_fprintf(f, ++ "%-10s%-20s%7s%20s%15s", ++ sn->id_str, sn->name, ++ get_human_readable_size(buf1, sizeof(buf1), ++ sn->vm_state_size), ++ date_buf, ++ clock_buf); + } +- return buf; + } + +-void bdrv_image_info_dump(ImageInfo *info) ++void bdrv_image_info_dump(fprintf_function func_fprintf, void *f, ++ ImageInfo *info) + { + char size_buf[128], dsize_buf[128]; + if (!info->has_actual_size) { +@@ -302,43 +304,46 @@ void bdrv_image_info_dump(ImageInfo *info) + info->actual_size); + } + get_human_readable_size(size_buf, sizeof(size_buf), info->virtual_size); +- printf("image: %s\n" +- "file format: %s\n" +- "virtual size: %s (%" PRId64 " bytes)\n" +- "disk size: %s\n", +- info->filename, info->format, size_buf, +- info->virtual_size, +- dsize_buf); ++ func_fprintf(f, ++ "image: %s\n" ++ "file format: %s\n" ++ "virtual size: %s (%" PRId64 " bytes)\n" ++ "disk size: %s\n", ++ info->filename, info->format, size_buf, ++ info->virtual_size, ++ dsize_buf); + + if (info->has_encrypted && info->encrypted) { +- printf("encrypted: yes\n"); ++ func_fprintf(f, "encrypted: yes\n"); + } + + if (info->has_cluster_size) { +- printf("cluster_size: %" PRId64 "\n", info->cluster_size); ++ func_fprintf(f, "cluster_size: %" PRId64 "\n", ++ info->cluster_size); + } + + if (info->has_dirty_flag && info->dirty_flag) { +- printf("cleanly shut down: no\n"); ++ func_fprintf(f, "cleanly shut down: no\n"); + } + + if (info->has_backing_filename) { +- printf("backing file: %s", info->backing_filename); ++ func_fprintf(f, "backing file: %s", info->backing_filename); + if (info->has_full_backing_filename) { +- printf(" (actual path: %s)", info->full_backing_filename); ++ func_fprintf(f, " (actual path: %s)", info->full_backing_filename); + } +- putchar('\n'); ++ func_fprintf(f, "\n"); + if (info->has_backing_filename_format) { +- printf("backing file format: %s\n", info->backing_filename_format); ++ func_fprintf(f, "backing file format: %s\n", ++ info->backing_filename_format); + } + } + + if (info->has_snapshots) { + SnapshotInfoList *elem; +- char buf[256]; + +- printf("Snapshot list:\n"); +- printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL)); ++ func_fprintf(f, "Snapshot list:\n"); ++ bdrv_snapshot_dump(func_fprintf, f, NULL); ++ func_fprintf(f, "\n"); + + /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but + * we convert to the block layer's native QEMUSnapshotInfo for now. +@@ -354,7 +359,8 @@ void bdrv_image_info_dump(ImageInfo *info) + + pstrcpy(sn.id_str, sizeof(sn.id_str), elem->value->id); + pstrcpy(sn.name, sizeof(sn.name), elem->value->name); +- printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), &sn)); ++ bdrv_snapshot_dump(func_fprintf, f, &sn); ++ func_fprintf(f, "\n"); + } + } + } +diff --git a/include/block/qapi.h b/include/block/qapi.h +index 55d1848..e6e568d 100644 +--- a/include/block/qapi.h ++++ b/include/block/qapi.h +@@ -36,6 +36,8 @@ void bdrv_collect_image_info(BlockDriverState *bs, + BlockInfo *bdrv_query_info(BlockDriverState *s); + BlockStats *bdrv_query_stats(const BlockDriverState *bs); + +-char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn); +-void bdrv_image_info_dump(ImageInfo *info); ++void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f, ++ QEMUSnapshotInfo *sn); ++void bdrv_image_info_dump(fprintf_function func_fprintf, void *f, ++ ImageInfo *info); + #endif +diff --git a/qemu-img.c b/qemu-img.c +index 0bc084d..97b4212 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1575,16 +1575,17 @@ static void dump_snapshots(BlockDriverState *bs) + { + QEMUSnapshotInfo *sn_tab, *sn; + int nb_sns, i; +- char buf[256]; + + nb_sns = bdrv_snapshot_list(bs, &sn_tab); + if (nb_sns <= 0) + return; + printf("Snapshot list:\n"); +- printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL)); ++ bdrv_snapshot_dump(fprintf, stdout, NULL); ++ printf("\n"); + for(i = 0; i < nb_sns; i++) { + sn = &sn_tab[i]; +- printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn)); ++ bdrv_snapshot_dump(fprintf, stdout, sn); ++ printf("\n"); + } + g_free(sn_tab); + } +@@ -1634,7 +1635,7 @@ static void dump_human_image_info_list(ImageInfoList *list) + } + delim = true; + +- bdrv_image_info_dump(elem->value); ++ bdrv_image_info_dump(fprintf, stdout, elem->value); + } + } + +diff --git a/savevm.c b/savevm.c +index f126bff..4d12d92 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -2540,7 +2540,6 @@ void do_info_snapshots(Monitor *mon, const QDict *qdict) + int nb_sns, i, ret, available; + int total; + int *available_snapshots; +- char buf[256]; + + bs = find_vmstate_bs(); + if (!bs) { +@@ -2583,10 +2582,12 @@ void do_info_snapshots(Monitor *mon, const QDict *qdict) + } + + if (total > 0) { +- monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL)); ++ bdrv_snapshot_dump((fprintf_function)monitor_printf, mon, NULL); ++ monitor_printf(mon, "\n"); + for (i = 0; i < total; i++) { + sn = &sn_tab[available_snapshots[i]]; +- monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn)); ++ bdrv_snapshot_dump((fprintf_function)monitor_printf, mon, sn); ++ monitor_printf(mon, "\n"); + } + } else { + monitor_printf(mon, "There is no suitable snapshot available\n"); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-ensure-bdrv_drain_all-works-during-bdrv_delete.patch b/SOURCES/kvm-block-ensure-bdrv_drain_all-works-during-bdrv_delete.patch new file mode 100644 index 0000000..4f40c55 --- /dev/null +++ b/SOURCES/kvm-block-ensure-bdrv_drain_all-works-during-bdrv_delete.patch @@ -0,0 +1,54 @@ +From 0487ca6807db23556550e12585924546ed9923af Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 21 Jan 2014 02:59:42 +0100 +Subject: [PATCH 30/34] block: ensure bdrv_drain_all() works during bdrv_delete() + +RH-Author: Fam Zheng +Message-id: <1390273182-31302-1-git-send-email-famz@redhat.com> +Patchwork-id: 56851 +O-Subject: [RHEL-7 qemu-kvm PATCH 19/18] block: ensure bdrv_drain_all() works during bdrv_delete() +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +From: Stefan Hajnoczi + +In bdrv_delete() make sure to call bdrv_make_anon() *after* bdrv_close() +so that the device is still seen by bdrv_drain_all() when iterating +bdrv_states. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e1b5c52e04d04bb93546c6e37e8884889d047cb1) +Signed-off-by: Fam Zheng +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index b4e3ced..3232971 100644 +--- a/block.c ++++ b/block.c +@@ -1674,11 +1674,11 @@ static void bdrv_delete(BlockDriverState *bs) + assert(!bs->in_use); + assert(!bs->refcnt); + ++ bdrv_close(bs); ++ + /* remove from list, if necessary */ + bdrv_make_anon(bs); + +- bdrv_close(bs); +- + g_free(bs); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-expect-errors-from-bdrv_co_is_allocated.patch b/SOURCES/kvm-block-expect-errors-from-bdrv_co_is_allocated.patch new file mode 100644 index 0000000..ec76700 --- /dev/null +++ b/SOURCES/kvm-block-expect-errors-from-bdrv_co_is_allocated.patch @@ -0,0 +1,162 @@ +From ebd7d27935a5ec9d5c72403fc1cd60af2e450e7c Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:33 +0200 +Subject: [PATCH 08/81] block: expect errors from bdrv_co_is_allocated + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-9-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54992 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 08/26] block: expect errors from bdrv_co_is_allocated +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Some bdrv_is_allocated callers do not expect errors, but the fallback +in qcow2.c might make other callers trip on assertion failures or +infinite loops. + +Fix the callers to always look for errors. + +Cc: qemu-stable@nongnu.org +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit d663640c04f2aab810915c556390211d75457704) +--- + block.c | 7 +++++-- + block/cow.c | 6 +++++- + block/qcow2.c | 4 +--- + block/stream.c | 2 +- + qemu-img.c | 16 ++++++++++++++-- + qemu-io.c | 4 ++++ + 6 files changed, 30 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 7 +++++-- + block/cow.c | 6 +++++- + block/qcow2.c | 4 +--- + block/stream.c | 2 +- + qemu-img.c | 16 ++++++++++++++-- + qemu-io.c | 4 ++++ + 6 files changed, 30 insertions(+), 9 deletions(-) + +diff --git a/block.c b/block.c +index 46d9420..d838a3c 100644 +--- a/block.c ++++ b/block.c +@@ -1815,8 +1815,11 @@ int bdrv_commit(BlockDriverState *bs) + buf = g_malloc(COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE); + + for (sector = 0; sector < total_sectors; sector += n) { +- if (bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n)) { +- ++ ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n); ++ if (ret < 0) { ++ goto ro_cleanup; ++ } ++ if (ret) { + if (bdrv_read(bs, sector, buf, n) != 0) { + ret = -EIO; + goto ro_cleanup; +diff --git a/block/cow.c b/block/cow.c +index 21bceaa..5a33b46 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -212,7 +212,11 @@ static int coroutine_fn cow_read(BlockDriverState *bs, int64_t sector_num, + int ret, n; + + while (nb_sectors > 0) { +- if (cow_co_is_allocated(bs, sector_num, nb_sectors, &n)) { ++ ret = cow_co_is_allocated(bs, sector_num, nb_sectors, &n); ++ if (ret < 0) { ++ return ret; ++ } ++ if (ret) { + ret = bdrv_pread(bs->file, + s->cow_sectors_offset + sector_num * 512, + buf, n * 512); +diff --git a/block/qcow2.c b/block/qcow2.c +index 70da5bd..f6e64d2 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -648,13 +648,11 @@ static int coroutine_fn qcow2_co_is_allocated(BlockDriverState *bs, + int ret; + + *pnum = nb_sectors; +- /* FIXME We can get errors here, but the bdrv_co_is_allocated interface +- * can't pass them on today */ + qemu_co_mutex_lock(&s->lock); + ret = qcow2_get_cluster_offset(bs, sector_num << 9, pnum, &cluster_offset); + qemu_co_mutex_unlock(&s->lock); + if (ret < 0) { +- *pnum = 0; ++ return ret; + } + + return (cluster_offset != 0) || (ret == QCOW2_CLUSTER_ZERO); +diff --git a/block/stream.c b/block/stream.c +index 9674c31..995b97b 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -120,7 +120,7 @@ wait: + if (ret == 1) { + /* Allocated in the top, no need to copy. */ + copy = false; +- } else { ++ } else if (ret >= 0) { + /* Copy if allocated in the intermediate images. Limit to the + * known-unallocated area [sector_num, sector_num+n). */ + ret = bdrv_is_allocated_above(bs->backing_hd, base, +diff --git a/qemu-img.c b/qemu-img.c +index 3b11414..28efb4f 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1482,8 +1482,15 @@ static int img_convert(int argc, char **argv) + are present in both the output's and input's base images (no + need to copy them). */ + if (out_baseimg) { +- if (!bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, +- n, &n1)) { ++ ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, ++ n, &n1); ++ if (ret < 0) { ++ error_report("error while reading metadata for sector " ++ "%" PRId64 ": %s", ++ sector_num - bs_offset, strerror(-ret)); ++ goto out; ++ } ++ if (!ret) { + sector_num += n1; + continue; + } +@@ -2217,6 +2224,11 @@ static int img_rebase(int argc, char **argv) + + /* If the cluster is allocated, we don't need to take action */ + ret = bdrv_is_allocated(bs, sector, n, &n); ++ if (ret < 0) { ++ error_report("error while reading image metadata: %s", ++ strerror(-ret)); ++ goto out; ++ } + if (ret) { + continue; + } +diff --git a/qemu-io.c b/qemu-io.c +index 5045ff8..bdcce7f 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -1607,6 +1607,10 @@ static int alloc_f(int argc, char **argv) + sector_num = offset >> 9; + while (remaining) { + ret = bdrv_is_allocated(bs, sector_num, remaining, &num); ++ if (ret < 0) { ++ printf("is_allocated failed: %s\n", strerror(-ret)); ++ return 0; ++ } + sector_num += num; + remaining -= num; + if (ret) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-extend-block-commit-to-accept-a-string-for-the.patch b/SOURCES/kvm-block-extend-block-commit-to-accept-a-string-for-the.patch new file mode 100644 index 0000000..8e6e72e --- /dev/null +++ b/SOURCES/kvm-block-extend-block-commit-to-accept-a-string-for-the.patch @@ -0,0 +1,294 @@ +From 820c45fa40b9763a207e9eeb1268f87c2ac06351 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Fri, 19 Sep 2014 03:18:57 +0200 +Subject: [PATCH 18/20] block: extend block-commit to accept a string for the backing file + +Message-id: +Patchwork-id: 61311 +O-Subject: [PATCH qemu-kvm-rhev RHEL7.0.z 2/4] block: extend block-commit to accept a string for the backing file +Bugzilla: 1122925 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Eric Blake +RH-Acked-by: Stefan Hajnoczi + +On some image chains, QEMU may not always be able to resolve the +filenames properly, when updating the backing file of an image +after a block commit. + +For instance, certain relative pathnames may fail, or drives may +have been specified originally by file descriptor (e.g. /dev/fd/???), +or a relative protocol pathname may have been used. + +In these instances, QEMU may lack the information to be able to make +the correct choice, but the user or management layer most likely does +have that knowledge. + +With this extension to the block-commit api, the user is able to change +the backing file of the overlay image as part of the block-commit +operation. + +This allows the change to be 'safe', in the sense that if the attempt +to write the overlay image metadata fails, then the block-commit +operation returns failure, without disrupting the guest. + +If the commit top is the active layer, then specifying the backing +file string will be treated as an error (there is no overlay image +to modify in that case). + +If a backing file string is not specified in the command, the backing +file string to use is determined in the same manner as it was +previously. + +Reviewed-by: Eric Blake +Signed-off-by: Jeff Cody +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 54e269009099cdc9483be115f1e12d56ad459c5e) + +Conflicts: + qapi/block-core.json + +RHEL7 Notes: Conflict is due to qapi json being divided into separate + files upstream; downstream in RHEL7 it is still in a single + json file. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block.c | 8 ++++++-- + block/commit.c | 9 ++++++--- + blockdev.c | 8 +++++++- + include/block/block.h | 3 ++- + include/block/block_int.h | 3 ++- + qapi-schema.json | 20 ++++++++++++++++++-- + qmp-commands.hx | 19 ++++++++++++++++++- + 7 files changed, 59 insertions(+), 11 deletions(-) + +diff --git a/block.c b/block.c +index 7bdbbc6..496eb72 100644 +--- a/block.c ++++ b/block.c +@@ -2323,12 +2323,15 @@ typedef struct BlkIntermediateStates { + * + * base <- active + * ++ * If backing_file_str is non-NULL, it will be used when modifying top's ++ * overlay image metadata. ++ * + * Error conditions: + * if active == top, that is considered an error + * + */ + int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, +- BlockDriverState *base) ++ BlockDriverState *base, const char *backing_file_str) + { + BlockDriverState *intermediate; + BlockDriverState *base_bs = NULL; +@@ -2380,7 +2383,8 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, + } + + /* success - we can delete the intermediate states, and link top->base */ +- ret = bdrv_change_backing_file(new_top_bs, base_bs->filename, ++ backing_file_str = backing_file_str ? backing_file_str : base_bs->filename; ++ ret = bdrv_change_backing_file(new_top_bs, backing_file_str, + base_bs->drv ? base_bs->drv->format_name : ""); + if (ret) { + goto exit; +diff --git a/block/commit.c b/block/commit.c +index e3e395d..b6e1770 100644 +--- a/block/commit.c ++++ b/block/commit.c +@@ -37,6 +37,7 @@ typedef struct CommitBlockJob { + BlockdevOnError on_error; + int base_flags; + int orig_overlay_flags; ++ char *backing_file_str; + } CommitBlockJob; + + static int coroutine_fn commit_populate(BlockDriverState *bs, +@@ -141,7 +142,7 @@ wait: + + if (!block_job_is_cancelled(&s->common) && sector_num == end) { + /* success */ +- ret = bdrv_drop_intermediate(active, top, base); ++ ret = bdrv_drop_intermediate(active, top, base, s->backing_file_str); + } + + exit_free_buf: +@@ -158,7 +159,7 @@ exit_restore_reopen: + if (overlay_bs && s->orig_overlay_flags != bdrv_get_flags(overlay_bs)) { + bdrv_reopen(overlay_bs, s->orig_overlay_flags, NULL); + } +- ++ g_free(s->backing_file_str); + block_job_completed(&s->common, ret); + } + +@@ -182,7 +183,7 @@ static const BlockJobDriver commit_job_driver = { + void commit_start(BlockDriverState *bs, BlockDriverState *base, + BlockDriverState *top, int64_t speed, + BlockdevOnError on_error, BlockDriverCompletionFunc *cb, +- void *opaque, Error **errp) ++ void *opaque, const char *backing_file_str, Error **errp) + { + CommitBlockJob *s; + BlockReopenQueue *reopen_queue = NULL; +@@ -244,6 +245,8 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, + s->base_flags = orig_base_flags; + s->orig_overlay_flags = orig_overlay_flags; + ++ s->backing_file_str = g_strdup(backing_file_str); ++ + s->on_error = on_error; + s->common.co = qemu_coroutine_create(commit_run); + +diff --git a/blockdev.c b/blockdev.c +index 107e27e..96dc3df 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1465,6 +1465,7 @@ void qmp_block_stream(const char *device, bool has_base, + void qmp_block_commit(const char *device, + bool has_base, const char *base, + bool has_top, const char *top, ++ bool has_backing_file, const char *backing_file, + bool has_speed, int64_t speed, + Error **errp) + { +@@ -1522,11 +1523,16 @@ void qmp_block_commit(const char *device, + } + + if (top_bs == bs) { ++ if (has_backing_file) { ++ error_setg(errp, "'backing-file' specified," ++ " but 'top' is the active layer"); ++ return; ++ } + commit_active_start(bs, base_bs, speed, on_error, block_job_cb, + bs, &local_err); + } else { + commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs, +- &local_err); ++ has_backing_file ? backing_file : NULL, &local_err); + } + if (local_err != NULL) { + error_propagate(errp, local_err); +diff --git a/include/block/block.h b/include/block/block.h +index 972c0e7..03b7960 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -256,7 +256,8 @@ int bdrv_change_backing_file(BlockDriverState *bs, + const char *backing_file, const char *backing_fmt); + void bdrv_register(BlockDriver *bdrv); + int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, +- BlockDriverState *base); ++ BlockDriverState *base, ++ const char *backing_file_str); + BlockDriverState *bdrv_find_overlay(BlockDriverState *active, + BlockDriverState *bs); + BlockDriverState *bdrv_find_base(BlockDriverState *bs); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 53fc98c..e6874b4 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -389,13 +389,14 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base, + * @on_error: The action to take upon error. + * @cb: Completion function for the job. + * @opaque: Opaque pointer value passed to @cb. ++ * @backing_file_str: String to use as the backing file in @top's overlay + * @errp: Error object. + * + */ + void commit_start(BlockDriverState *bs, BlockDriverState *base, + BlockDriverState *top, int64_t speed, + BlockdevOnError on_error, BlockDriverCompletionFunc *cb, +- void *opaque, Error **errp); ++ void *opaque, const char *backing_file_str, Error **errp); + /** + * commit_active_start: + * @bs: Active block device to be committed. +diff --git a/qapi-schema.json b/qapi-schema.json +index 18ab949..ed79eb9 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1848,6 +1848,23 @@ + # which contains the topmost data to be committed down. If + # not specified, this is the active layer. + # ++# @backing-file: #optional The backing file string to write into the overlay ++# image of 'top'. If 'top' is the active layer, ++# specifying a backing file string is an error. This ++# filename is not validated. ++# ++# If a pathname string is such that it cannot be ++# resolved by QEMU, that means that subsequent QMP or ++# HMP commands must use node-names for the image in ++# question, as filename lookup methods will fail. ++# ++# If not specified, QEMU will automatically determine ++# the backing file string to use, or error out if ++# there is no obvious choice. Care should be taken ++# when specifying the string, to specify a valid ++# filename or protocol. ++# (Since 2.1) ++# + # If top == base, that is an error. + # If top == active, the job will not be completed by itself, + # user needs to complete the job with the block-job-complete +@@ -1860,7 +1877,6 @@ + # size of the smaller top, you can safely truncate it + # yourself once the commit operation successfully completes. + # +-# + # @speed: #optional the maximum speed, in bytes per second + # + # Returns: Nothing on success +@@ -1875,7 +1891,7 @@ + ## + { 'command': 'block-commit', + 'data': { 'device': 'str', '*base': 'str', '*top': 'str', +- '*speed': 'int' } } ++ '*backing-file': 'str', '*speed': 'int' } } + + ## + # @drive-mirror +diff --git a/qmp-commands.hx b/qmp-commands.hx +index f67121a..5ece4f9 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1005,7 +1005,7 @@ EQMP + + { + .name = "block-commit", +- .args_type = "device:B,base:s?,top:s?,speed:o?", ++ .args_type = "device:B,base:s?,top:s?,backing-file:s?,speed:o?", + .mhandler.cmd_new = qmp_marshal_input_block_commit, + }, + +@@ -1026,6 +1026,23 @@ Arguments: + which contains the topmost data to be committed down. If + not specified, this is the active layer. (json-string, optional) + ++- backing-file: The backing file string to write into the overlay ++ image of 'top'. If 'top' is the active layer, ++ specifying a backing file string is an error. This ++ filename is not validated. ++ ++ If a pathname string is such that it cannot be ++ resolved by QEMU, that means that subsequent QMP or ++ HMP commands must use node-names for the image in ++ question, as filename lookup methods will fail. ++ ++ If not specified, QEMU will automatically determine ++ the backing file string to use, or error out if ++ there is no obvious choice. Care should be taken ++ when specifying the string, to specify a valid ++ filename or protocol. ++ (json-string, optional) (Since 2.1) ++ + If top == base, that is an error. + If top == active, the job will not be completed by itself, + user needs to complete the job with the block-job-complete +-- +1.7.1 + diff --git a/SOURCES/kvm-block-fix-backing-file-overriding.patch b/SOURCES/kvm-block-fix-backing-file-overriding.patch new file mode 100644 index 0000000..9fd2d2e --- /dev/null +++ b/SOURCES/kvm-block-fix-backing-file-overriding.patch @@ -0,0 +1,85 @@ +From f50d8d218780ea455bb7dc6d7ccdd0c5b931f4a8 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:17 +0100 +Subject: [PATCH 64/87] block: fix backing file overriding + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-24-git-send-email-kwolf@redhat.com> +Patchwork-id: 55402 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 23/24] block: fix backing file overriding +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +From: Fam Zheng + +Providing backing.file.filename doesn't override backing file as expected: + + $ x86_64-softmmu/qemu-system-x86_64 -drive \ + file=/tmp/child.qcow2,backing.file.filename=/tmp/fake.qcow2 + + qemu-system-x86_64: -drive \ + file=/tmp/child.qcow2,backing.file.filename=/tmp/fake.qcow2: could not + open disk image /tmp/child.qcow2: Can't specify 'file' and 'filename' + options at the same time + +With + + $ qemu-img info /tmp/child.qcow2 + image: /tmp/child.qcow2 + file format: qcow2 + virtual size: 1.0G (1073741824 bytes) + disk size: 196K + cluster_size: 65536 + backing file: /tmp/fake.qcow2 + +This fixes it by calling bdrv_get_full_backing_filename only if +backing.file.filename is not provided. Also save the backing file name +to bs->backing_file so the information is correct with HMP "info block". + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit dbecebddfa4932d1c83915bcb9b5ba5984eb91be) + +Signed-off-by: Kevin Wolf +--- + block.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index d11661a..01c11ee 100644 +--- a/block.c ++++ b/block.c +@@ -956,11 +956,12 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) { + QDECREF(options); + return 0; ++ } else { ++ bdrv_get_full_backing_filename(bs, backing_filename, ++ sizeof(backing_filename)); + } + + bs->backing_hd = bdrv_new(""); +- bdrv_get_full_backing_filename(bs, backing_filename, +- sizeof(backing_filename)); + + if (bs->backing_format[0] != '\0') { + back_drv = bdrv_find_format(bs->backing_format); +@@ -972,6 +973,8 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + ret = bdrv_open(bs->backing_hd, + *backing_filename ? backing_filename : NULL, options, + back_flags, back_drv, &local_err); ++ pstrcpy(bs->backing_file, sizeof(bs->backing_file), ++ bs->backing_hd->file->filename); + if (ret < 0) { + bdrv_delete(bs->backing_hd); + bs->backing_hd = NULL; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-fix-backing-file-segfault.patch b/SOURCES/kvm-block-fix-backing-file-segfault.patch new file mode 100644 index 0000000..e9e2596 --- /dev/null +++ b/SOURCES/kvm-block-fix-backing-file-segfault.patch @@ -0,0 +1,82 @@ +From d3ec1ceddceff322c71dae8c6efff7bec166aeb8 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 8 Jan 2014 19:43:25 +0000 +Subject: [PATCH 01/37] block: fix backing file segfault + +Message-id: <1392117622-28812-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 57166 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 01/37] block: fix backing file segfault +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Peter Feiner + +When a backing file is opened such that (1) a protocol is directly +used as the block driver and (2) the block driver has bdrv_file_open, +bdrv_open_backing_file segfaults. The problem arises because +bdrv_open_common returns without setting bd->backing_hd->file. + +To effect (1), you seem to have to use the -F flag in qemu-img. There +are several block drivers that satisfy (2), such as "file" and "nbd". +Here are some concrete examples: + + #!/bin/bash + + echo Test file format + ./qemu-img create -f file base.file 1m + ./qemu-img create -f qcow2 -F file -o backing_file=base.file\ + file-overlay.qcow2 + ./qemu-img convert -O raw file-overlay.qcow2 file-convert.raw + + echo Test nbd format + SOCK=$PWD/nbd.sock + ./qemu-img create -f raw base.raw 1m + ./qemu-nbd -t -k $SOCK base.raw & + trap "kill $!" EXIT + while ! test -e $SOCK; do sleep 1; done + ./qemu-img create -f qcow2 -F nbd -o backing_file=nbd:unix:$SOCK\ + nbd-overlay.qcow2 + ./qemu-img convert -O raw nbd-overlay.qcow2 nbd-convert.raw + +Without this patch, the two qemu-img convert commands segfault. + +This is a regression that was introduced in v1.7 by +dbecebddfa4932d1c83915bcb9b5ba5984eb91be. + +Signed-off-by: Peter Feiner +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit d80ac658f2caacfb14ea386211c4a9bea0cea280) + +Signed-off-by: Kevin Wolf +--- + block.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) +--- + block.c | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 1433844..df0adf3 100644 +--- a/block.c ++++ b/block.c +@@ -978,8 +978,12 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + error_propagate(errp, local_err); + return ret; + } +- pstrcpy(bs->backing_file, sizeof(bs->backing_file), +- bs->backing_hd->file->filename); ++ ++ if (bs->backing_hd->file) { ++ pstrcpy(bs->backing_file, sizeof(bs->backing_file), ++ bs->backing_hd->file->filename); ++ } ++ + return 0; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-fix-vvfat-error-path-for-enable_write_target.patch b/SOURCES/kvm-block-fix-vvfat-error-path-for-enable_write_target.patch new file mode 100644 index 0000000..68763e3 --- /dev/null +++ b/SOURCES/kvm-block-fix-vvfat-error-path-for-enable_write_target.patch @@ -0,0 +1,104 @@ +From 631c132d062d057d4648c88e5dfa4b8a375d3442 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:31:56 +0100 +Subject: [PATCH 03/87] block: fix vvfat error path for enable_write_target + +RH-Author: Max Reitz +Message-id: <1383604354-12743-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 55305 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 05/43] block: fix vvfat error path for enable_write_target +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +BZ: 1026524 + +s->qcow and s->qcow_filename are allocated but not freed on error. Fix the +possible leaks, remove unnecessary check for bdrv_new(), propagate ret code of +bdrv_create() and also the one of enable_write_target(). + +Signed-off-by: Fam Zheng +Reviewed-by: Laszlo Ersek +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 78f27bd02ceba4a2f6ac5c725f4d4410eec205ef) + +Signed-off-by: Max Reitz +--- + block/vvfat.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vvfat.c | 25 ++++++++++++++----------- + 1 files changed, 14 insertions(+), 11 deletions(-) + +diff --git a/block/vvfat.c b/block/vvfat.c +index 415fba3..dd0efca 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -1164,8 +1164,8 @@ DLOG(if (stderr == NULL) { + s->sector_count = cyls * heads * secs - (s->first_sectors_number - 1); + + if (qemu_opt_get_bool(opts, "rw", false)) { +- if (enable_write_target(s)) { +- ret = -EIO; ++ ret = enable_write_target(s); ++ if (ret < 0) { + goto fail; + } + bs->read_only = 0; +@@ -2918,9 +2918,7 @@ static int enable_write_target(BDRVVVFATState *s) + s->qcow_filename = g_malloc(1024); + ret = get_tmp_filename(s->qcow_filename, 1024); + if (ret < 0) { +- g_free(s->qcow_filename); +- s->qcow_filename = NULL; +- return ret; ++ goto err; + } + + bdrv_qcow = bdrv_find_format("qcow"); +@@ -2928,18 +2926,18 @@ static int enable_write_target(BDRVVVFATState *s) + set_option_parameter_int(options, BLOCK_OPT_SIZE, s->sector_count * 512); + set_option_parameter(options, BLOCK_OPT_BACKING_FILE, "fat:"); + +- if (bdrv_create(bdrv_qcow, s->qcow_filename, options) < 0) +- return -1; ++ ret = bdrv_create(bdrv_qcow, s->qcow_filename, options); ++ if (ret < 0) { ++ goto err; ++ } + + s->qcow = bdrv_new(""); +- if (s->qcow == NULL) { +- return -1; +- } + + ret = bdrv_open(s->qcow, s->qcow_filename, NULL, + BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, bdrv_qcow); + if (ret < 0) { +- return ret; ++ bdrv_delete(s->qcow); ++ goto err; + } + + #ifndef _WIN32 +@@ -2952,6 +2950,11 @@ static int enable_write_target(BDRVVVFATState *s) + *(void**)s->bs->backing_hd->opaque = s; + + return 0; ++ ++err: ++ g_free(s->qcow_filename); ++ s->qcow_filename = NULL; ++ return ret; + } + + static void vvfat_close(BlockDriverState *bs) +-- +1.7.1 + diff --git a/SOURCES/kvm-block-generalize-BlockLimits-handling-to-cover-bdrv_.patch.patch.patch b/SOURCES/kvm-block-generalize-BlockLimits-handling-to-cover-bdrv_.patch.patch.patch new file mode 100644 index 0000000..8f74998 --- /dev/null +++ b/SOURCES/kvm-block-generalize-BlockLimits-handling-to-cover-bdrv_.patch.patch.patch @@ -0,0 +1,147 @@ +From 374f2dab9cd7bd26bca73ef93cf75ed919d278f4 Mon Sep 17 00:00:00 2001 +Message-Id: <374f2dab9cd7bd26bca73ef93cf75ed919d278f4.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:11 +0100 +Subject: [PATCH 23/50] block: generalize BlockLimits handling to cover + bdrv_aio_discard too + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-26-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56062 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 25/52] block: generalize BlockLimits handling to cover bdrv_aio_discard too +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +bdrv_co_discard is only covering drivers which have a .bdrv_co_discard() +implementation, but not those with .bdrv_aio_discard(). Not very nice, +and easy to avoid. + +Suggested-by: Kevin Wolf +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d51e9fe505f7c7b97762100dd0e42cef43c90524) +--- + block.c | 80 +++++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 41 insertions(+), 39 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 80 +++++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 41 insertions(+), 39 deletions(-) + +diff --git a/block.c b/block.c +index 60484a6..8dfc207 100644 +--- a/block.c ++++ b/block.c +@@ -4469,6 +4469,8 @@ static void coroutine_fn bdrv_discard_co_entry(void *opaque) + int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, + int nb_sectors) + { ++ int max_discard; ++ + if (!bs->drv) { + return -ENOMEDIUM; + } else if (bdrv_check_request(bs, sector_num, nb_sectors)) { +@@ -4486,55 +4488,55 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, + return 0; + } + +- if (bs->drv->bdrv_co_discard) { +- int max_discard = bs->bl.max_discard ? +- bs->bl.max_discard : MAX_DISCARD_DEFAULT; ++ if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_aio_discard) { ++ return 0; ++ } + +- while (nb_sectors > 0) { +- int ret; +- int num = nb_sectors; ++ max_discard = bs->bl.max_discard ? bs->bl.max_discard : MAX_DISCARD_DEFAULT; ++ while (nb_sectors > 0) { ++ int ret; ++ int num = nb_sectors; + +- /* align request */ +- if (bs->bl.discard_alignment && +- num >= bs->bl.discard_alignment && +- sector_num % bs->bl.discard_alignment) { +- if (num > bs->bl.discard_alignment) { +- num = bs->bl.discard_alignment; +- } +- num -= sector_num % bs->bl.discard_alignment; ++ /* align request */ ++ if (bs->bl.discard_alignment && ++ num >= bs->bl.discard_alignment && ++ sector_num % bs->bl.discard_alignment) { ++ if (num > bs->bl.discard_alignment) { ++ num = bs->bl.discard_alignment; + } ++ num -= sector_num % bs->bl.discard_alignment; ++ } + +- /* limit request size */ +- if (num > max_discard) { +- num = max_discard; +- } ++ /* limit request size */ ++ if (num > max_discard) { ++ num = max_discard; ++ } + ++ if (bs->drv->bdrv_co_discard) { + ret = bs->drv->bdrv_co_discard(bs, sector_num, num); +- if (ret) { +- return ret; ++ } else { ++ BlockDriverAIOCB *acb; ++ CoroutineIOCompletion co = { ++ .coroutine = qemu_coroutine_self(), ++ }; ++ ++ acb = bs->drv->bdrv_aio_discard(bs, sector_num, nb_sectors, ++ bdrv_co_io_em_complete, &co); ++ if (acb == NULL) { ++ return -EIO; ++ } else { ++ qemu_coroutine_yield(); ++ ret = co.ret; + } +- +- sector_num += num; +- nb_sectors -= num; + } +- return 0; +- } else if (bs->drv->bdrv_aio_discard) { +- BlockDriverAIOCB *acb; +- CoroutineIOCompletion co = { +- .coroutine = qemu_coroutine_self(), +- }; +- +- acb = bs->drv->bdrv_aio_discard(bs, sector_num, nb_sectors, +- bdrv_co_io_em_complete, &co); +- if (acb == NULL) { +- return -EIO; +- } else { +- qemu_coroutine_yield(); +- return co.ret; ++ if (ret) { ++ return ret; + } +- } else { +- return 0; ++ ++ sector_num += num; ++ nb_sectors -= num; + } ++ return 0; + } + + int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-get_block_status-avoid-redundant-callouts-on-r.patch b/SOURCES/kvm-block-get_block_status-avoid-redundant-callouts-on-r.patch new file mode 100644 index 0000000..2164862 --- /dev/null +++ b/SOURCES/kvm-block-get_block_status-avoid-redundant-callouts-on-r.patch @@ -0,0 +1,92 @@ +From 69813093427b02a4a0e02264abd1f851f2b49249 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Thu, 7 Nov 2013 07:23:45 +0100 +Subject: [PATCH 26/81] block/get_block_status: avoid redundant callouts on raw devices + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-27-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55009 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 26/26] block/get_block_status: avoid redundant callouts on raw devices +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +From: Peter Lieven + +if a raw device like an iscsi target or host device is used +the current implementation makes a second call out to get +the block status of bs->file. + +Signed-off-by: Peter Lieven +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 92bc50a5ad7fbc9a0bd17240eaea5027a100ca79) + +Conflicts: + block/raw_bsd.c + +Signed-off-by: Miroslav Rezanina +--- + block.c | 6 ++++++ + block/raw.c | 4 +++- + include/block/block.h | 4 ++++ + 3 files changed, 13 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 5c49461..fdff92f 100644 +--- a/block.c ++++ b/block.c +@@ -3073,6 +3073,12 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + return ret; + } + ++ if (ret & BDRV_BLOCK_RAW) { ++ assert(ret & BDRV_BLOCK_OFFSET_VALID); ++ return bdrv_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS, ++ *pnum, pnum); ++ } ++ + if (!(ret & BDRV_BLOCK_DATA)) { + if (bdrv_has_zero_init(bs)) { + ret |= BDRV_BLOCK_ZERO; +diff --git a/block/raw.c b/block/raw.c +index 844a222..7d82cf3 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -39,7 +39,9 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, int *pnum) + { +- return bdrv_get_block_status(bs->file, sector_num, nb_sectors, pnum); ++ *pnum = nb_sectors; ++ return BDRV_BLOCK_RAW | BDRV_BLOCK_OFFSET_VALID | BDRV_BLOCK_DATA | ++ (sector_num << BDRV_SECTOR_BITS); + } + + static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs, +diff --git a/include/block/block.h b/include/block/block.h +index 01f5c65..bc1f5f6 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -95,6 +95,9 @@ typedef struct BlockDevOps { + /* BDRV_BLOCK_DATA: data is read from bs->file or another file + * BDRV_BLOCK_ZERO: sectors read as zero + * BDRV_BLOCK_OFFSET_VALID: sector stored in bs->file as raw data ++ * BDRV_BLOCK_RAW: used internally to indicate that the request ++ * was answered by the raw driver and that one ++ * should look in bs->file directly. + * + * If BDRV_BLOCK_OFFSET_VALID is set, bits 9-62 represent the offset in + * bs->file where sector data can be read from as raw data. +@@ -116,6 +119,7 @@ typedef struct BlockDevOps { + #define BDRV_BLOCK_DATA 1 + #define BDRV_BLOCK_ZERO 2 + #define BDRV_BLOCK_OFFSET_VALID 4 ++#define BDRV_BLOCK_RAW 8 + #define BDRV_BLOCK_OFFSET_MASK BDRV_SECTOR_MASK + + typedef enum { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-get_block_status-avoid-segfault-if-there-is-no.patch b/SOURCES/kvm-block-get_block_status-avoid-segfault-if-there-is-no.patch new file mode 100644 index 0000000..d31a299 --- /dev/null +++ b/SOURCES/kvm-block-get_block_status-avoid-segfault-if-there-is-no.patch @@ -0,0 +1,45 @@ +From cb57c159b8ffe151ce61750507c635d1d05e51b5 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:50 +0200 +Subject: [PATCH 25/81] block/get_block_status: avoid segfault if there is no backing_hd + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-26-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55008 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 25/26] block/get_block_status: avoid segfault if there is no backing_hd +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Kevin Wolf +(cherry picked from commit 1f9db2243c1b987c834fe559a8e73b3178f50c2b) +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 02e111e..5c49461 100644 +--- a/block.c ++++ b/block.c +@@ -3076,7 +3076,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + if (!(ret & BDRV_BLOCK_DATA)) { + if (bdrv_has_zero_init(bs)) { + ret |= BDRV_BLOCK_ZERO; +- } else { ++ } else if (bs->backing_hd) { + BlockDriverState *bs2 = bs->backing_hd; + int64_t length2 = bdrv_getlength(bs2); + if (length2 >= 0 && sector_num >= (length2 >> BDRV_SECTOR_BITS)) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-get_block_status-fix-BDRV_BLOCK_ZERO-for-unall.patch.patch.patch b/SOURCES/kvm-block-get_block_status-fix-BDRV_BLOCK_ZERO-for-unall.patch.patch.patch new file mode 100644 index 0000000..5be4293 --- /dev/null +++ b/SOURCES/kvm-block-get_block_status-fix-BDRV_BLOCK_ZERO-for-unall.patch.patch.patch @@ -0,0 +1,57 @@ +From ae042c767589da954f1b6c4662371dea189fcf50 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:08 +0100 +Subject: [PATCH 20/50] block/get_block_status: fix BDRV_BLOCK_ZERO for + unallocated blocks + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-23-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56059 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 22/52] block/get_block_status: fix BDRV_BLOCK_ZERO for unallocated blocks +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +this patch does 2 things: +a) only do additional call outs if BDRV_BLOCK_ZERO is not already set. +b) use the newly introduced bdrv_unallocated_blocks_are_zero() + to return the zero state of an unallocated block. the used callout + to bdrv_has_zero_init() is only valid right after bdrv_create. + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c3d8688470a33feb0ea78c006b4399d50c13185e) +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 2e77763..60484a6 100644 +--- a/block.c ++++ b/block.c +@@ -3290,8 +3290,8 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + *pnum, pnum); + } + +- if (!(ret & BDRV_BLOCK_DATA)) { +- if (bdrv_has_zero_init(bs)) { ++ if (!(ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO)) { ++ if (bdrv_unallocated_blocks_are_zero(bs)) { + ret |= BDRV_BLOCK_ZERO; + } else if (bs->backing_hd) { + BlockDriverState *bs2 = bs->backing_hd; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-get_block_status-set-pnum-0-on-error.patch b/SOURCES/kvm-block-get_block_status-set-pnum-0-on-error.patch new file mode 100644 index 0000000..b8299ea --- /dev/null +++ b/SOURCES/kvm-block-get_block_status-set-pnum-0-on-error.patch @@ -0,0 +1,49 @@ +From d7a6dbe86fbbb30cc8142deb71763089aa1f2b62 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:49 +0200 +Subject: [PATCH 24/81] block/get_block_status: set *pnum = 0 on error + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-25-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55007 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 24/26] block/get_block_status: set *pnum = 0 on error +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +From: Peter Lieven + +if the call is invoked through bdrv_is_allocated the caller might +expect *pnum = 0 on error. however, a new implementation of +bdrv_get_block_status might only return a negative exit value on +error while keeping *pnum untouched. + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Kevin Wolf +(cherry picked from commit 3e0a233d869e74e78b516be34715b91528508cfc) +--- + block.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index f993b2e..02e111e 100644 +--- a/block.c ++++ b/block.c +@@ -3069,6 +3069,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + + ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); + if (ret < 0) { ++ *pnum = 0; + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-gluster-add-reopen-support.patch b/SOURCES/kvm-block-gluster-add-reopen-support.patch new file mode 100644 index 0000000..907d552 --- /dev/null +++ b/SOURCES/kvm-block-gluster-add-reopen-support.patch @@ -0,0 +1,195 @@ +From b24bec7c4477946f17bf4628608b60d4960b4247 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Thu, 6 Mar 2014 21:13:15 +0100 +Subject: [PATCH 05/16] block: gluster - add reopen support. + +RH-Author: Jeffrey Cody +Message-id: <2f1e357ca27ef45d16e62fbe44b0ce9cef2602fe.1394129674.git.jcody@redhat.com> +Patchwork-id: 58041 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] block: gluster - add reopen support. +Bugzilla: 1031526 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +Gluster does parse open flags in its .bdrv_open() implementation, +and the .bdrv_reopen_* implementations need to do the same. + +A new gluster connection to the image file to be created is established +in the .bdrv_reopen_prepare(), and the image file opened with the new +flags. + +If this is successful, then the old image file is closed, and the +old connection torn down. The relevant structure pointers in the gluster +state structure are updated to the new connection. + +If it is not successful, then the new file handle and connection is +abandoned (if it exists), while the old connection is not modified at +all. + +With reopen supported, block-commit (and offline commit) is now also +supported for image files whose base image uses the native gluster +protocol driver. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit adccfbcd6020e928db93b2b4faf0dbd05ffbe016) + +Conflicts: + block/gluster.c + +RHEL7 Note: Conflict was in contextual information, as RHEL7 does not + have gluster zerofill support. +--- + block/gluster.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 102 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 102 insertions(+), 0 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 95cb05a..f43d3a6 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -376,6 +376,96 @@ out: + return ret; + } + ++typedef struct BDRVGlusterReopenState { ++ struct glfs *glfs; ++ struct glfs_fd *fd; ++} BDRVGlusterReopenState; ++ ++ ++static int qemu_gluster_reopen_prepare(BDRVReopenState *state, ++ BlockReopenQueue *queue, Error **errp) ++{ ++ int ret = 0; ++ BDRVGlusterReopenState *reop_s; ++ GlusterConf *gconf = NULL; ++ int open_flags = 0; ++ ++ assert(state != NULL); ++ assert(state->bs != NULL); ++ ++ state->opaque = g_malloc0(sizeof(BDRVGlusterReopenState)); ++ reop_s = state->opaque; ++ ++ qemu_gluster_parse_flags(state->flags, &open_flags); ++ ++ gconf = g_malloc0(sizeof(GlusterConf)); ++ ++ reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename); ++ if (reop_s->glfs == NULL) { ++ ret = -errno; ++ goto exit; ++ } ++ ++ reop_s->fd = glfs_open(reop_s->glfs, gconf->image, open_flags); ++ if (reop_s->fd == NULL) { ++ /* reops->glfs will be cleaned up in _abort */ ++ ret = -errno; ++ goto exit; ++ } ++ ++exit: ++ /* state->opaque will be freed in either the _abort or _commit */ ++ qemu_gluster_gconf_free(gconf); ++ return ret; ++} ++ ++static void qemu_gluster_reopen_commit(BDRVReopenState *state) ++{ ++ BDRVGlusterReopenState *reop_s = state->opaque; ++ BDRVGlusterState *s = state->bs->opaque; ++ ++ ++ /* close the old */ ++ if (s->fd) { ++ glfs_close(s->fd); ++ } ++ if (s->glfs) { ++ glfs_fini(s->glfs); ++ } ++ ++ /* use the newly opened image / connection */ ++ s->fd = reop_s->fd; ++ s->glfs = reop_s->glfs; ++ ++ g_free(state->opaque); ++ state->opaque = NULL; ++ ++ return; ++} ++ ++ ++static void qemu_gluster_reopen_abort(BDRVReopenState *state) ++{ ++ BDRVGlusterReopenState *reop_s = state->opaque; ++ ++ if (reop_s == NULL) { ++ return; ++ } ++ ++ if (reop_s->fd) { ++ glfs_close(reop_s->fd); ++ } ++ ++ if (reop_s->glfs) { ++ glfs_fini(reop_s->glfs); ++ } ++ ++ g_free(state->opaque); ++ state->opaque = NULL; ++ ++ return; ++} ++ + static int qemu_gluster_create(const char *filename, + QEMUOptionParameter *options, Error **errp) + { +@@ -605,6 +695,9 @@ static BlockDriver bdrv_gluster = { + .protocol_name = "gluster", + .instance_size = sizeof(BDRVGlusterState), + .bdrv_file_open = qemu_gluster_open, ++ .bdrv_reopen_prepare = qemu_gluster_reopen_prepare, ++ .bdrv_reopen_commit = qemu_gluster_reopen_commit, ++ .bdrv_reopen_abort = qemu_gluster_reopen_abort, + .bdrv_close = qemu_gluster_close, + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, +@@ -622,6 +715,9 @@ static BlockDriver bdrv_gluster_tcp = { + .protocol_name = "gluster+tcp", + .instance_size = sizeof(BDRVGlusterState), + .bdrv_file_open = qemu_gluster_open, ++ .bdrv_reopen_prepare = qemu_gluster_reopen_prepare, ++ .bdrv_reopen_commit = qemu_gluster_reopen_commit, ++ .bdrv_reopen_abort = qemu_gluster_reopen_abort, + .bdrv_close = qemu_gluster_close, + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, +@@ -639,6 +735,9 @@ static BlockDriver bdrv_gluster_unix = { + .protocol_name = "gluster+unix", + .instance_size = sizeof(BDRVGlusterState), + .bdrv_file_open = qemu_gluster_open, ++ .bdrv_reopen_prepare = qemu_gluster_reopen_prepare, ++ .bdrv_reopen_commit = qemu_gluster_reopen_commit, ++ .bdrv_reopen_abort = qemu_gluster_reopen_abort, + .bdrv_close = qemu_gluster_close, + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, +@@ -656,6 +755,9 @@ static BlockDriver bdrv_gluster_rdma = { + .protocol_name = "gluster+rdma", + .instance_size = sizeof(BDRVGlusterState), + .bdrv_file_open = qemu_gluster_open, ++ .bdrv_reopen_prepare = qemu_gluster_reopen_prepare, ++ .bdrv_reopen_commit = qemu_gluster_reopen_commit, ++ .bdrv_reopen_abort = qemu_gluster_reopen_abort, + .bdrv_close = qemu_gluster_close, + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-gluster-add-support-for-selecting-debug-loggin.patch b/SOURCES/kvm-block-gluster-add-support-for-selecting-debug-loggin.patch new file mode 100644 index 0000000..031de1a --- /dev/null +++ b/SOURCES/kvm-block-gluster-add-support-for-selecting-debug-loggin.patch @@ -0,0 +1,202 @@ +From 2ffc3b31eafe39cc11678ef0e0ea39cdfef0469d Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 17 Jan 2017 19:51:32 +0100 +Subject: [PATCH 3/3] block/gluster: add support for selecting debug logging + level + +RH-Author: Jeffrey Cody +Message-id: <87a60937c8dfa4bee63e59871811dbda7794e818.1484682588.git.jcody@redhat.com> +Patchwork-id: 73255 +O-Subject: [RHEL-7.4 qemu-kvm 3/3] block/gluster: add support for selecting debug logging level +Bugzilla: 1151859 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Thomas Huth + +This adds commandline support for the logging level of the +gluster protocol driver, output to stdout. The option is 'debug', +e.g.: + +-drive filename=gluster://192.168.15.180/gv2/test.qcow2,debug=9 + +Debug levels are 0-9, with 9 being the most verbose, and 0 representing +no debugging output. The default is the same as it was before, which +is a level of 4. The current logging levels defined in the gluster +source are: + + 0 - None + 1 - Emergency + 2 - Alert + 3 - Critical + 4 - Error + 5 - Warning + 6 - Notice + 7 - Info + 8 - Debug + 9 - Trace + +(From: glusterfs/logging.h) + +Reviewed-by: Niels de Vos +Signed-off-by: Jeff Cody +(cherry picked from commit 7eac868a508cdbf4cccef5c2084941b63fa3aded) +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 61 +++++++++++++++++++++++++++++++++++++++++++++------------ + 1 file changed, 48 insertions(+), 13 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 5266dce..86e136d 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -35,6 +35,7 @@ typedef struct BDRVGlusterState { + int qemu_aio_count; + int event_reader_pos; + GlusterAIOCB *event_acb; ++ int debug_level; + } BDRVGlusterState; + + #define GLUSTER_FD_READ 0 +@@ -46,6 +47,7 @@ typedef struct GlusterConf { + char *volname; + char *image; + char *transport; ++ int debug_level; + } GlusterConf; + + static void qemu_gluster_gconf_free(GlusterConf *gconf) +@@ -208,11 +210,7 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename, + goto out; + } + +- /* +- * TODO: Use GF_LOG_ERROR instead of hard code value of 4 here when +- * GlusterFS makes GF_LOG_* macros available to libgfapi users. +- */ +- ret = glfs_set_logging(glfs, "-", 4); ++ ret = glfs_set_logging(glfs, "-", gconf->debug_level); + if (ret < 0) { + goto out; + } +@@ -292,16 +290,26 @@ static int qemu_gluster_aio_flush_cb(void *opaque) + return (s->qemu_aio_count > 0); + } + ++#define GLUSTER_OPT_FILENAME "filename" ++#define GLUSTER_OPT_DEBUG "debug" ++#define GLUSTER_DEBUG_DEFAULT 4 ++#define GLUSTER_DEBUG_MAX 9 ++ + /* TODO Convert to fine grained options */ + static QemuOptsList runtime_opts = { + .name = "gluster", + .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), + .desc = { + { +- .name = "filename", ++ .name = GLUSTER_OPT_FILENAME, + .type = QEMU_OPT_STRING, + .help = "URL to the gluster image", + }, ++ { ++ .name = GLUSTER_OPT_DEBUG, ++ .type = QEMU_OPT_NUMBER, ++ .help = "Gluster log level, valid range is 0-9", ++ }, + { /* end of list */ } + }, + }; +@@ -342,8 +350,17 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options, + goto out; + } + +- filename = qemu_opt_get(opts, "filename"); ++ filename = qemu_opt_get(opts, GLUSTER_OPT_FILENAME); + ++ s->debug_level = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG, ++ GLUSTER_DEBUG_DEFAULT); ++ if (s->debug_level < 0) { ++ s->debug_level = 0; ++ } else if (s->debug_level > GLUSTER_DEBUG_MAX) { ++ s->debug_level = GLUSTER_DEBUG_MAX; ++ } ++ ++ gconf->debug_level = s->debug_level; + s->glfs = qemu_gluster_init(gconf, filename, errp); + if (!s->glfs) { + ret = -errno; +@@ -398,6 +415,7 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state, + BlockReopenQueue *queue, Error **errp) + { + int ret = 0; ++ BDRVGlusterState *s; + BDRVGlusterReopenState *reop_s; + GlusterConf *gconf = NULL; + int open_flags = 0; +@@ -405,6 +423,8 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state, + assert(state != NULL); + assert(state->bs != NULL); + ++ s = state->bs->opaque; ++ + state->opaque = g_malloc0(sizeof(BDRVGlusterReopenState)); + reop_s = state->opaque; + +@@ -412,6 +432,7 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state, + + gconf = g_malloc0(sizeof(GlusterConf)); + ++ gconf->debug_level = s->debug_level; + reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, errp); + if (reop_s->glfs == NULL) { + ret = -errno; +@@ -487,19 +508,28 @@ static int qemu_gluster_create(const char *filename, + int64_t total_size = 0; + GlusterConf *gconf = g_malloc0(sizeof(GlusterConf)); + +- glfs = qemu_gluster_init(gconf, filename, errp); +- if (!glfs) { +- ret = -errno; +- goto out; +- } +- ++ gconf->debug_level = GLUSTER_DEBUG_DEFAULT; + while (options && options->name) { + if (!strcmp(options->name, BLOCK_OPT_SIZE)) { + total_size = options->value.n / BDRV_SECTOR_SIZE; + } ++ if (!strcmp(options->name, GLUSTER_OPT_DEBUG)) { ++ gconf->debug_level = options->value.n; ++ if (gconf->debug_level < 0) { ++ gconf->debug_level = 0; ++ } else if (gconf->debug_level > GLUSTER_DEBUG_MAX) { ++ gconf->debug_level = GLUSTER_DEBUG_MAX; ++ } ++ } + options++; + } + ++ glfs = qemu_gluster_init(gconf, filename, errp); ++ if (!glfs) { ++ ret = -errno; ++ goto out; ++ } ++ + fd = glfs_creat(glfs, gconf->image, + O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR | S_IWUSR); + if (!fd) { +@@ -732,6 +762,11 @@ static QEMUOptionParameter qemu_gluster_create_options[] = { + .type = OPT_SIZE, + .help = "Virtual disk size" + }, ++ { ++ .name = GLUSTER_OPT_DEBUG, ++ .type = QEMU_OPT_NUMBER, ++ .help = "Gluster log level, valid range is 0-9", ++ }, + { NULL } + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-gluster-code-movements-state-storage-changes.patch b/SOURCES/kvm-block-gluster-code-movements-state-storage-changes.patch new file mode 100644 index 0000000..26e96ce --- /dev/null +++ b/SOURCES/kvm-block-gluster-code-movements-state-storage-changes.patch @@ -0,0 +1,104 @@ +From 8c40036dd1ac888d9565d6d96c8478a00bce696b Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Thu, 6 Mar 2014 21:13:14 +0100 +Subject: [PATCH 04/16] block: gluster - code movements, state storage changes + +RH-Author: Jeffrey Cody +Message-id: <8b4867e7eb4ab7db9f9e7900570daf718e62851d.1394129674.git.jcody@redhat.com> +Patchwork-id: 58040 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] block: gluster - code movements, state storage changes +Bugzilla: 1031526 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +In preparation for supporting reopen on gluster, move flag +parsing out to a function. Also, add a NULL check in the +gconf cleanup. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 1b37b3442f78a77844fdaf7f53e5f04e4ce8f1d6) +--- + block/gluster.c | 41 ++++++++++++++++++++++++++--------------- + 1 file changed, 26 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 41 ++++++++++++++++++++++++++--------------- + 1 files changed, 26 insertions(+), 15 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index bf39264..95cb05a 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -50,11 +50,13 @@ typedef struct GlusterConf { + + static void qemu_gluster_gconf_free(GlusterConf *gconf) + { +- g_free(gconf->server); +- g_free(gconf->volname); +- g_free(gconf->image); +- g_free(gconf->transport); +- g_free(gconf); ++ if (gconf) { ++ g_free(gconf->server); ++ g_free(gconf->volname); ++ g_free(gconf->image); ++ g_free(gconf->transport); ++ g_free(gconf); ++ } + } + + static int parse_volume_options(GlusterConf *gconf, char *path) +@@ -296,11 +298,28 @@ static QemuOptsList runtime_opts = { + }, + }; + ++static void qemu_gluster_parse_flags(int bdrv_flags, int *open_flags) ++{ ++ assert(open_flags != NULL); ++ ++ *open_flags |= O_BINARY; ++ ++ if (bdrv_flags & BDRV_O_RDWR) { ++ *open_flags |= O_RDWR; ++ } else { ++ *open_flags |= O_RDONLY; ++ } ++ ++ if ((bdrv_flags & BDRV_O_NOCACHE)) { ++ *open_flags |= O_DIRECT; ++ } ++} ++ + static int qemu_gluster_open(BlockDriverState *bs, QDict *options, + int bdrv_flags, Error **errp) + { + BDRVGlusterState *s = bs->opaque; +- int open_flags = O_BINARY; ++ int open_flags = 0; + int ret = 0; + GlusterConf *gconf = g_malloc0(sizeof(GlusterConf)); + QemuOpts *opts; +@@ -325,15 +344,7 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options, + goto out; + } + +- if (bdrv_flags & BDRV_O_RDWR) { +- open_flags |= O_RDWR; +- } else { +- open_flags |= O_RDONLY; +- } +- +- if ((bdrv_flags & BDRV_O_NOCACHE)) { +- open_flags |= O_DIRECT; +- } ++ qemu_gluster_parse_flags(bdrv_flags, &open_flags); + + s->fd = glfs_open(s->glfs, gconf->image, open_flags); + if (!s->fd) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-handle-ENOTSUP-from-discard-in-generic-code.patch.patch.patch b/SOURCES/kvm-block-handle-ENOTSUP-from-discard-in-generic-code.patch.patch.patch new file mode 100644 index 0000000..6be005b --- /dev/null +++ b/SOURCES/kvm-block-handle-ENOTSUP-from-discard-in-generic-code.patch.patch.patch @@ -0,0 +1,91 @@ +From bb95ce076f174cba655e098fb7924364fd29aa8b Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:15 +0100 +Subject: [PATCH 27/50] block: handle ENOTSUP from discard in generic code + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-30-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56066 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 29/52] block: handle ENOTSUP from discard in generic code +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Similar to write_zeroes, let the generic code receive a ENOTSUP for +discard operations. Since bdrv_discard has advisory semantics, +we can just swallow the error. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7ce21016b69b512bf4777965a4292318f2bc7544) +--- + block.c | 2 +- + block/raw-posix.c | 12 ++++++------ + 2 files changed, 7 insertions(+), 7 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 2 +- + block/raw-posix.c | 12 ++++++------ + 2 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/block.c b/block.c +index fc15370..c9e65b4 100644 +--- a/block.c ++++ b/block.c +@@ -4545,7 +4545,7 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, + ret = co.ret; + } + } +- if (ret) { ++ if (ret && ret != -ENOTSUP) { + return ret; + } + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index c2b3dfd..7a140b0 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -324,10 +324,10 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + } + #endif + +- s->has_discard = 1; ++ s->has_discard = true; + #ifdef CONFIG_XFS + if (platform_test_xfs_fd(s->fd)) { +- s->is_xfs = 1; ++ s->is_xfs = true; + } + #endif + +@@ -699,8 +699,8 @@ static ssize_t handle_aiocb_discard(RawPosixAIOData *aiocb) + int ret = -EOPNOTSUPP; + BDRVRawState *s = aiocb->bs->opaque; + +- if (s->has_discard == 0) { +- return 0; ++ if (!s->has_discard) { ++ return -ENOTSUP; + } + + if (aiocb->aio_type & QEMU_AIO_BLKDEV) { +@@ -735,8 +735,8 @@ static ssize_t handle_aiocb_discard(RawPosixAIOData *aiocb) + + if (ret == -ENODEV || ret == -ENOSYS || ret == -EOPNOTSUPP || + ret == -ENOTTY) { +- s->has_discard = 0; +- ret = 0; ++ s->has_discard = false; ++ ret = -ENOTSUP; + } + return ret; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-honour-BlockLimits-in-bdrv_co_discard.patch.patch.patch b/SOURCES/kvm-block-honour-BlockLimits-in-bdrv_co_discard.patch.patch.patch new file mode 100644 index 0000000..e8a600e --- /dev/null +++ b/SOURCES/kvm-block-honour-BlockLimits-in-bdrv_co_discard.patch.patch.patch @@ -0,0 +1,90 @@ +From f3ba81ab59dcb21f79cf2f2053206d6b03431658 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:03 +0100 +Subject: [PATCH 15/50] block: honour BlockLimits in bdrv_co_discard + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-18-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56053 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 17/52] block: honour BlockLimits in bdrv_co_discard +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 6f14da5247076bde1e00444f6d5b2b7ca8075a09) +--- + block.c | 37 ++++++++++++++++++++++++++++++++++++- + 1 file changed, 36 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + block.c | 37 ++++++++++++++++++++++++++++++++++++- + 1 file changed, 36 insertions(+), 1 deletion(-) + +diff --git a/block.c b/block.c +index 2ed9aa9..23dbafd 100644 +--- a/block.c ++++ b/block.c +@@ -4424,6 +4424,11 @@ static void coroutine_fn bdrv_discard_co_entry(void *opaque) + rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors); + } + ++/* if no limit is specified in the BlockLimits use a default ++ * of 32768 512-byte sectors (16 MiB) per request. ++ */ ++#define MAX_DISCARD_DEFAULT 32768 ++ + int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, + int nb_sectors) + { +@@ -4445,7 +4450,37 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, + } + + if (bs->drv->bdrv_co_discard) { +- return bs->drv->bdrv_co_discard(bs, sector_num, nb_sectors); ++ int max_discard = bs->bl.max_discard ? ++ bs->bl.max_discard : MAX_DISCARD_DEFAULT; ++ ++ while (nb_sectors > 0) { ++ int ret; ++ int num = nb_sectors; ++ ++ /* align request */ ++ if (bs->bl.discard_alignment && ++ num >= bs->bl.discard_alignment && ++ sector_num % bs->bl.discard_alignment) { ++ if (num > bs->bl.discard_alignment) { ++ num = bs->bl.discard_alignment; ++ } ++ num -= sector_num % bs->bl.discard_alignment; ++ } ++ ++ /* limit request size */ ++ if (num > max_discard) { ++ num = max_discard; ++ } ++ ++ ret = bs->drv->bdrv_co_discard(bs, sector_num, num); ++ if (ret) { ++ return ret; ++ } ++ ++ sector_num += num; ++ nb_sectors -= num; ++ } ++ return 0; + } else if (bs->drv->bdrv_aio_discard) { + BlockDriverAIOCB *acb; + CoroutineIOCompletion co = { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-honour-BlockLimits-in-bdrv_co_do_write_zeroes.patch.patch.patch b/SOURCES/kvm-block-honour-BlockLimits-in-bdrv_co_do_write_zeroes.patch.patch.patch new file mode 100644 index 0000000..3cef2f7 --- /dev/null +++ b/SOURCES/kvm-block-honour-BlockLimits-in-bdrv_co_do_write_zeroes.patch.patch.patch @@ -0,0 +1,121 @@ +From 69e802baf506bd21a2f444cfebe4ac7f5b5d07a8 Mon Sep 17 00:00:00 2001 +Message-Id: <69e802baf506bd21a2f444cfebe4ac7f5b5d07a8.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:02 +0100 +Subject: [PATCH 14/50] block: honour BlockLimits in bdrv_co_do_write_zeroes + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-17-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56052 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 16/52] block: honour BlockLimits in bdrv_co_do_write_zeroes +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c31cb70728d2c0c8900b35a66784baa446fd5147) +--- + block.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++---------------- + 1 file changed, 49 insertions(+), 16 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++---------------- + 1 file changed, 49 insertions(+), 16 deletions(-) + +diff --git a/block.c b/block.c +index 2fae459..2ed9aa9 100644 +--- a/block.c ++++ b/block.c +@@ -2724,32 +2724,65 @@ int coroutine_fn bdrv_co_copy_on_readv(BlockDriverState *bs, + BDRV_REQ_COPY_ON_READ); + } + ++/* if no limit is specified in the BlockLimits use a default ++ * of 32768 512-byte sectors (16 MiB) per request. ++ */ ++#define MAX_WRITE_ZEROES_DEFAULT 32768 ++ + static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, BdrvRequestFlags flags) + { + BlockDriver *drv = bs->drv; + QEMUIOVector qiov; +- struct iovec iov; +- int ret; ++ struct iovec iov = {0}; ++ int ret = 0; + +- /* TODO Emulate only part of misaligned requests instead of letting block +- * drivers return -ENOTSUP and emulate everything */ ++ int max_write_zeroes = bs->bl.max_write_zeroes ? ++ bs->bl.max_write_zeroes : MAX_WRITE_ZEROES_DEFAULT; + +- /* First try the efficient write zeroes operation */ +- if (drv->bdrv_co_write_zeroes) { +- ret = drv->bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags); +- if (ret != -ENOTSUP) { +- return ret; ++ while (nb_sectors > 0 && !ret) { ++ int num = nb_sectors; ++ ++ /* align request */ ++ if (bs->bl.write_zeroes_alignment && ++ num >= bs->bl.write_zeroes_alignment && ++ sector_num % bs->bl.write_zeroes_alignment) { ++ if (num > bs->bl.write_zeroes_alignment) { ++ num = bs->bl.write_zeroes_alignment; ++ } ++ num -= sector_num % bs->bl.write_zeroes_alignment; + } +- } + +- /* Fall back to bounce buffer if write zeroes is unsupported */ +- iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE; +- iov.iov_base = qemu_blockalign(bs, iov.iov_len); +- memset(iov.iov_base, 0, iov.iov_len); +- qemu_iovec_init_external(&qiov, &iov, 1); ++ /* limit request size */ ++ if (num > max_write_zeroes) { ++ num = max_write_zeroes; ++ } ++ ++ ret = -ENOTSUP; ++ /* First try the efficient write zeroes operation */ ++ if (drv->bdrv_co_write_zeroes) { ++ ret = drv->bdrv_co_write_zeroes(bs, sector_num, num, flags); ++ } ++ ++ if (ret == -ENOTSUP) { ++ /* Fall back to bounce buffer if write zeroes is unsupported */ ++ iov.iov_len = num * BDRV_SECTOR_SIZE; ++ if (iov.iov_base == NULL) { ++ /* allocate bounce buffer only once and ensure that it ++ * is big enough for this and all future requests. ++ */ ++ size_t bufsize = num <= nb_sectors ? num : max_write_zeroes; ++ iov.iov_base = qemu_blockalign(bs, bufsize * BDRV_SECTOR_SIZE); ++ memset(iov.iov_base, 0, bufsize * BDRV_SECTOR_SIZE); ++ } ++ qemu_iovec_init_external(&qiov, &iov, 1); + +- ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, &qiov); ++ ret = drv->bdrv_co_writev(bs, sector_num, num, &qiov); ++ } ++ ++ sector_num += num; ++ nb_sectors -= num; ++ } + + qemu_vfree(iov.iov_base); + return ret; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-implement-reference-count-for-BlockDriverState.patch b/SOURCES/kvm-block-implement-reference-count-for-BlockDriverState.patch new file mode 100644 index 0000000..3179b6d --- /dev/null +++ b/SOURCES/kvm-block-implement-reference-count-for-BlockDriverState.patch @@ -0,0 +1,116 @@ +From 6c473bbd42becf52b10677500bb509fbfa077140 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:47 +0100 +Subject: [PATCH 04/34] block: implement reference count for BlockDriverState + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-3-git-send-email-famz@redhat.com> +Patchwork-id: 56764 +O-Subject: [RHEL-7 qemu-kvm PATCH 02/18] block: implement reference count for BlockDriverState +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Introduce bdrv_ref/bdrv_unref to manage the lifecycle of +BlockDriverState. They are unused for now but will used to replace +bdrv_delete() later. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 9fcb025146676ab376e6159b58f5a5ddb67bf03c) +Signed-off-by: Fam Zheng + +Conflicts: + block.c + Context conflict because throttling and before_write notifier + are not backported yet. + +Signed-off-by: Fam Zheng +--- + block.c | 21 +++++++++++++++++++++ + include/block/block.h | 2 ++ + include/block/block_int.h | 1 + + 3 files changed, 24 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 21 +++++++++++++++++++++ + include/block/block.h | 2 ++ + include/block/block_int.h | 1 + + 3 files changed, 24 insertions(+), 0 deletions(-) + +diff --git a/block.c b/block.c +index cc7afd4..ddf29d0 100644 +--- a/block.c ++++ b/block.c +@@ -301,6 +301,7 @@ BlockDriverState *bdrv_new(const char *device_name) + } + bdrv_iostatus_disable(bs); + notifier_list_init(&bs->close_notifiers); ++ bs->refcnt = 1; + + return bs; + } +@@ -1580,6 +1581,9 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest, + /* dirty bitmap */ + bs_dest->dirty_bitmap = bs_src->dirty_bitmap; + ++ /* reference count */ ++ bs_dest->refcnt = bs_src->refcnt; ++ + /* job */ + bs_dest->in_use = bs_src->in_use; + bs_dest->job = bs_src->job; +@@ -4754,6 +4758,23 @@ int64_t bdrv_get_dirty_count(BlockDriverState *bs) + } + } + ++/* Get a reference to bs */ ++void bdrv_ref(BlockDriverState *bs) ++{ ++ bs->refcnt++; ++} ++ ++/* Release a previously grabbed reference to bs. ++ * If after releasing, reference count is zero, the BlockDriverState is ++ * deleted. */ ++void bdrv_unref(BlockDriverState *bs) ++{ ++ assert(bs->refcnt > 0); ++ if (--bs->refcnt == 0) { ++ bdrv_delete(bs); ++ } ++} ++ + void bdrv_set_in_use(BlockDriverState *bs, int in_use) + { + assert(bs->in_use != in_use); +diff --git a/include/block/block.h b/include/block/block.h +index e7f718c..a3b7395 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -421,6 +421,8 @@ int64_t bdrv_get_dirty_count(BlockDriverState *bs); + void bdrv_enable_copy_on_read(BlockDriverState *bs); + void bdrv_disable_copy_on_read(BlockDriverState *bs); + ++void bdrv_ref(BlockDriverState *bs); ++void bdrv_unref(BlockDriverState *bs); + void bdrv_set_in_use(BlockDriverState *bs, int in_use); + int bdrv_in_use(BlockDriverState *bs); + +diff --git a/include/block/block_int.h b/include/block/block_int.h +index d49a317..fbfdab7 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -315,6 +315,7 @@ struct BlockDriverState { + BlockDeviceIoStatus iostatus; + char device_name[32]; + HBitmap *dirty_bitmap; ++ int refcnt; + int in_use; /* users other than guest access, eg. block migration */ + QTAILQ_ENTRY(BlockDriverState) list; + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-introduce-BDRV_REQ_MAY_UNMAP-request-flag.patch.patch.patch b/SOURCES/kvm-block-introduce-BDRV_REQ_MAY_UNMAP-request-flag.patch.patch.patch new file mode 100644 index 0000000..a802b10 --- /dev/null +++ b/SOURCES/kvm-block-introduce-BDRV_REQ_MAY_UNMAP-request-flag.patch.patch.patch @@ -0,0 +1,89 @@ +From c8f8c2859899c631415825beee9cb6369e302f43 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:56 +0100 +Subject: [PATCH 08/50] block: introduce BDRV_REQ_MAY_UNMAP request flag + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-11-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56047 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 10/52] block: introduce BDRV_REQ_MAY_UNMAP request flag +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d32f35cbc5a87af5e1100dd55074a79fc2cb5307) + +Conflicts: + block/backup.c [missing] +--- + block-migration.c | 3 ++- + block.c | 4 ++++ + include/block/block.h | 7 +++++++ + 3 files changed, 13 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + block-migration.c | 3 ++- + block.c | 4 ++++ + include/block/block.h | 7 +++++++ + 3 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/block-migration.c b/block-migration.c +index 3b22db6..1844066 100644 +--- a/block-migration.c ++++ b/block-migration.c +@@ -780,7 +780,8 @@ static int block_load(QEMUFile *f, void *opaque, int version_id) + } + + if (flags & BLK_MIG_FLAG_ZERO_BLOCK) { +- ret = bdrv_write_zeroes(bs, addr, nr_sectors, 0); ++ ret = bdrv_write_zeroes(bs, addr, nr_sectors, ++ BDRV_REQ_MAY_UNMAP); + } else { + buf = g_malloc(BLOCK_SIZE); + qemu_get_buffer(f, buf, BLOCK_SIZE); +diff --git a/block.c b/block.c +index 698334a..77167f0 100644 +--- a/block.c ++++ b/block.c +@@ -2827,6 +2827,10 @@ int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, + { + trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors); + ++ if (!(bs->open_flags & BDRV_O_UNMAP)) { ++ flags &= ~BDRV_REQ_MAY_UNMAP; ++ } ++ + return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL, + BDRV_REQ_ZERO_WRITE | flags); + } +diff --git a/include/block/block.h b/include/block/block.h +index 2d78a84..10abc00 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -65,6 +65,13 @@ typedef struct BlockDevOps { + typedef enum { + BDRV_REQ_COPY_ON_READ = 0x1, + BDRV_REQ_ZERO_WRITE = 0x2, ++ /* The BDRV_REQ_MAY_UNMAP flag is used to indicate that the block driver ++ * is allowed to optimize a write zeroes request by unmapping (discarding) ++ * blocks if it is guaranteed that the result will read back as ++ * zeroes. The flag is only passed to the driver if the block device is ++ * opened with BDRV_O_UNMAP. ++ */ ++ BDRV_REQ_MAY_UNMAP = 0x4, + } BdrvRequestFlags; + + #define BDRV_O_RDWR 0x0002 +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-introduce-bdrv_get_block_status-API.patch b/SOURCES/kvm-block-introduce-bdrv_get_block_status-API.patch new file mode 100644 index 0000000..4f42a36 --- /dev/null +++ b/SOURCES/kvm-block-introduce-bdrv_get_block_status-API.patch @@ -0,0 +1,447 @@ +From 89e6ba9d5ad137ecb8f981f1ec28ee519812bf50 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 6 Nov 2013 12:37:43 +0100 +Subject: [PATCH 12/81] block: introduce bdrv_get_block_status API + +RH-Author: Paolo Bonzini +Message-id: <1383741463-25811-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55521 +O-Subject: [RHEL 7.0 qemu-kvm PATCH v2 12/26] block: introduce bdrv_get_block_status API +Bugzilla: 989646 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +For now, bdrv_get_block_status is just another name for bdrv_is_allocated. +The next patches will add more flags. + +This also touches all block drivers with a mostly mechanical rename. The +sole exception is cow; because it calls cow_co_is_allocated from the read +code, we keep that function and make cow_co_get_block_status a wrapper. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit b6b8a33354a448ee421f57676c1a93a536a63269) +--- + block.c | 46 ++++++++++++++++++++++++++-------------------- + block/cow.c | 8 +++++++- + block/qcow.c | 4 ++-- + block/qcow2.c | 4 ++-- + block/qed.c | 4 ++-- + block/raw-posix.c | 4 ++-- + block/raw.c | 6 +++--- + block/sheepdog.c | 12 ++++++------ + block/vdi.c | 4 ++-- + block/vmdk.c | 4 ++-- + block/vvfat.c | 4 ++-- + include/block/block.h | 2 ++ + include/block/block_int.h | 2 +- + 13 files changed, 59 insertions(+), 45 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 46 +++++++++++++++++++++++++------------------- + block/cow.c | 8 ++++++- + block/qcow.c | 4 +- + block/qcow2.c | 4 +- + block/qed.c | 4 +- + block/raw-posix.c | 4 +- + block/raw.c | 6 ++-- + block/sheepdog.c | 12 +++++----- + block/vdi.c | 4 +- + block/vmdk.c | 4 +- + block/vvfat.c | 4 +- + include/block/block.h | 2 + + include/block/block_int.h | 2 +- + 13 files changed, 59 insertions(+), 45 deletions(-) + +diff --git a/block.c b/block.c +index f5d6658..772f5b7 100644 +--- a/block.c ++++ b/block.c +@@ -3010,15 +3010,15 @@ int bdrv_has_zero_init(BlockDriverState *bs) + return 1; + } + +-typedef struct BdrvCoIsAllocatedData { ++typedef struct BdrvCoGetBlockStatusData { + BlockDriverState *bs; + BlockDriverState *base; + int64_t sector_num; + int nb_sectors; + int *pnum; +- int ret; ++ int64_t ret; + bool done; +-} BdrvCoIsAllocatedData; ++} BdrvCoGetBlockStatusData; + + /* + * Returns true iff the specified sector is present in the disk image. Drivers +@@ -3035,9 +3035,9 @@ typedef struct BdrvCoIsAllocatedData { + * 'nb_sectors' is the max value 'pnum' should be set to. If nb_sectors goes + * beyond the end of the disk image it will be clamped. + */ +-static int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, +- int64_t sector_num, +- int nb_sectors, int *pnum) ++static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, ++ int64_t sector_num, ++ int nb_sectors, int *pnum) + { + int64_t length; + int64_t n; +@@ -3057,35 +3057,35 @@ static int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, + nb_sectors = n; + } + +- if (!bs->drv->bdrv_co_is_allocated) { ++ if (!bs->drv->bdrv_co_get_block_status) { + *pnum = nb_sectors; + return 1; + } + +- return bs->drv->bdrv_co_is_allocated(bs, sector_num, nb_sectors, pnum); ++ return bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); + } + +-/* Coroutine wrapper for bdrv_is_allocated() */ +-static void coroutine_fn bdrv_is_allocated_co_entry(void *opaque) ++/* Coroutine wrapper for bdrv_get_block_status() */ ++static void coroutine_fn bdrv_get_block_status_co_entry(void *opaque) + { +- BdrvCoIsAllocatedData *data = opaque; ++ BdrvCoGetBlockStatusData *data = opaque; + BlockDriverState *bs = data->bs; + +- data->ret = bdrv_co_is_allocated(bs, data->sector_num, data->nb_sectors, +- data->pnum); ++ data->ret = bdrv_co_get_block_status(bs, data->sector_num, data->nb_sectors, ++ data->pnum); + data->done = true; + } + + /* +- * Synchronous wrapper around bdrv_co_is_allocated(). ++ * Synchronous wrapper around bdrv_co_get_block_status(). + * +- * See bdrv_co_is_allocated() for details. ++ * See bdrv_co_get_block_status() for details. + */ +-int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, +- int *pnum) ++int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, int *pnum) + { + Coroutine *co; +- BdrvCoIsAllocatedData data = { ++ BdrvCoGetBlockStatusData data = { + .bs = bs, + .sector_num = sector_num, + .nb_sectors = nb_sectors, +@@ -3095,9 +3095,9 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, + + if (qemu_in_coroutine()) { + /* Fast-path if already in coroutine context */ +- bdrv_is_allocated_co_entry(&data); ++ bdrv_get_block_status_co_entry(&data); + } else { +- co = qemu_coroutine_create(bdrv_is_allocated_co_entry); ++ co = qemu_coroutine_create(bdrv_get_block_status_co_entry); + qemu_coroutine_enter(co, &data); + while (!data.done) { + qemu_aio_wait(); +@@ -3106,6 +3106,12 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, + return data.ret; + } + ++int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, int *pnum) ++{ ++ return bdrv_get_block_status(bs, sector_num, nb_sectors, pnum); ++} ++ + /* + * Given an image chain: ... -> [BASE] -> [INTER1] -> [INTER2] -> [TOP] + * +diff --git a/block/cow.c b/block/cow.c +index 5a33b46..5e71c76 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -188,6 +188,12 @@ static int coroutine_fn cow_co_is_allocated(BlockDriverState *bs, + return changed; + } + ++static int64_t coroutine_fn cow_co_get_block_status(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, int *num_same) ++{ ++ return cow_co_is_allocated(bs, sector_num, nb_sectors, num_same); ++} ++ + static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num, + int nb_sectors) + { +@@ -370,7 +376,7 @@ static BlockDriver bdrv_cow = { + + .bdrv_read = cow_co_read, + .bdrv_write = cow_co_write, +- .bdrv_co_is_allocated = cow_co_is_allocated, ++ .bdrv_co_get_block_status = cow_co_get_block_status, + + .create_options = cow_create_options, + }; +diff --git a/block/qcow.c b/block/qcow.c +index e2a64c7..05af25c 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -395,7 +395,7 @@ static uint64_t get_cluster_offset(BlockDriverState *bs, + return cluster_offset; + } + +-static int coroutine_fn qcow_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn qcow_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *pnum) + { + BDRVQcowState *s = bs->opaque; +@@ -895,7 +895,7 @@ static BlockDriver bdrv_qcow = { + + .bdrv_co_readv = qcow_co_readv, + .bdrv_co_writev = qcow_co_writev, +- .bdrv_co_is_allocated = qcow_co_is_allocated, ++ .bdrv_co_get_block_status = qcow_co_get_block_status, + + .bdrv_set_key = qcow_set_key, + .bdrv_make_empty = qcow_make_empty, +diff --git a/block/qcow2.c b/block/qcow2.c +index f6e64d2..8d3bf5d 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -640,7 +640,7 @@ static int qcow2_reopen_prepare(BDRVReopenState *state, + return 0; + } + +-static int coroutine_fn qcow2_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn qcow2_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *pnum) + { + BDRVQcowState *s = bs->opaque; +@@ -1786,7 +1786,7 @@ static BlockDriver bdrv_qcow2 = { + .bdrv_close = qcow2_close, + .bdrv_reopen_prepare = qcow2_reopen_prepare, + .bdrv_create = qcow2_create, +- .bdrv_co_is_allocated = qcow2_co_is_allocated, ++ .bdrv_co_get_block_status = qcow2_co_get_block_status, + .bdrv_set_key = qcow2_set_key, + .bdrv_make_empty = qcow2_make_empty, + +diff --git a/block/qed.c b/block/qed.c +index 4651403..a573039 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -667,7 +667,7 @@ static void qed_is_allocated_cb(void *opaque, int ret, uint64_t offset, size_t l + } + } + +-static int coroutine_fn bdrv_qed_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn bdrv_qed_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, int *pnum) + { +@@ -1574,7 +1574,7 @@ static BlockDriver bdrv_qed = { + .bdrv_close = bdrv_qed_close, + .bdrv_reopen_prepare = bdrv_qed_reopen_prepare, + .bdrv_create = bdrv_qed_create, +- .bdrv_co_is_allocated = bdrv_qed_co_is_allocated, ++ .bdrv_co_get_block_status = bdrv_qed_co_get_block_status, + .bdrv_make_empty = bdrv_qed_make_empty, + .bdrv_aio_readv = bdrv_qed_aio_readv, + .bdrv_aio_writev = bdrv_qed_aio_writev, +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 90ce9f8..9a7c5a8 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1084,7 +1084,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options) + * 'nb_sectors' is the max value 'pnum' should be set to. If nb_sectors goes + * beyond the end of the disk image it will be clamped. + */ +-static int coroutine_fn raw_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, int *pnum) + { +@@ -1199,7 +1199,7 @@ static BlockDriver bdrv_file = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_close = raw_close, + .bdrv_create = raw_create, +- .bdrv_co_is_allocated = raw_co_is_allocated, ++ .bdrv_co_get_block_status = raw_co_get_block_status, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +diff --git a/block/raw.c b/block/raw.c +index f78ff39..844a222 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -35,11 +35,11 @@ static void raw_close(BlockDriverState *bs) + { + } + +-static int coroutine_fn raw_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, int *pnum) + { +- return bdrv_is_allocated(bs->file, sector_num, nb_sectors, pnum); ++ return bdrv_get_block_status(bs->file, sector_num, nb_sectors, pnum); + } + + static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs, +@@ -134,7 +134,7 @@ static BlockDriver bdrv_raw = { + + .bdrv_co_readv = raw_co_readv, + .bdrv_co_writev = raw_co_writev, +- .bdrv_co_is_allocated = raw_co_is_allocated, ++ .bdrv_co_get_block_status = raw_co_get_block_status, + .bdrv_co_write_zeroes = raw_co_write_zeroes, + .bdrv_co_discard = raw_co_discard, + +diff --git a/block/sheepdog.c b/block/sheepdog.c +index 2758c26..e5398bb 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -2289,9 +2289,9 @@ static coroutine_fn int sd_co_discard(BlockDriverState *bs, int64_t sector_num, + return acb->ret; + } + +-static coroutine_fn int +-sd_co_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, +- int *pnum) ++static coroutine_fn int64_t ++sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors, ++ int *pnum) + { + BDRVSheepdogState *s = bs->opaque; + SheepdogInode *inode = &s->inode; +@@ -2356,7 +2356,7 @@ static BlockDriver bdrv_sheepdog = { + .bdrv_co_writev = sd_co_writev, + .bdrv_co_flush_to_disk = sd_co_flush_to_disk, + .bdrv_co_discard = sd_co_discard, +- .bdrv_co_is_allocated = sd_co_is_allocated, ++ .bdrv_co_get_block_status = sd_co_get_block_status, + + .bdrv_snapshot_create = sd_snapshot_create, + .bdrv_snapshot_goto = sd_snapshot_goto, +@@ -2383,7 +2383,7 @@ static BlockDriver bdrv_sheepdog_tcp = { + .bdrv_co_writev = sd_co_writev, + .bdrv_co_flush_to_disk = sd_co_flush_to_disk, + .bdrv_co_discard = sd_co_discard, +- .bdrv_co_is_allocated = sd_co_is_allocated, ++ .bdrv_co_get_block_status = sd_co_get_block_status, + + .bdrv_snapshot_create = sd_snapshot_create, + .bdrv_snapshot_goto = sd_snapshot_goto, +@@ -2410,7 +2410,7 @@ static BlockDriver bdrv_sheepdog_unix = { + .bdrv_co_writev = sd_co_writev, + .bdrv_co_flush_to_disk = sd_co_flush_to_disk, + .bdrv_co_discard = sd_co_discard, +- .bdrv_co_is_allocated = sd_co_is_allocated, ++ .bdrv_co_get_block_status = sd_co_get_block_status, + + .bdrv_snapshot_create = sd_snapshot_create, + .bdrv_snapshot_goto = sd_snapshot_goto, +diff --git a/block/vdi.c b/block/vdi.c +index 2662d89..1252ad4 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -470,7 +470,7 @@ static int vdi_reopen_prepare(BDRVReopenState *state, + return 0; + } + +-static int coroutine_fn vdi_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn vdi_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *pnum) + { + /* TODO: Check for too large sector_num (in bdrv_is_allocated or here). */ +@@ -779,7 +779,7 @@ static BlockDriver bdrv_vdi = { + .bdrv_close = vdi_close, + .bdrv_reopen_prepare = vdi_reopen_prepare, + .bdrv_create = vdi_create, +- .bdrv_co_is_allocated = vdi_co_is_allocated, ++ .bdrv_co_get_block_status = vdi_co_get_block_status, + .bdrv_make_empty = vdi_make_empty, + + .bdrv_read = vdi_co_read, +diff --git a/block/vmdk.c b/block/vmdk.c +index 66735ab..a30c3b9 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1042,7 +1042,7 @@ static VmdkExtent *find_extent(BDRVVmdkState *s, + return NULL; + } + +-static int coroutine_fn vmdk_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *pnum) + { + BDRVVmdkState *s = bs->opaque; +@@ -1820,7 +1820,7 @@ static BlockDriver bdrv_vmdk = { + .bdrv_close = vmdk_close, + .bdrv_create = vmdk_create, + .bdrv_co_flush_to_disk = vmdk_co_flush, +- .bdrv_co_is_allocated = vmdk_co_is_allocated, ++ .bdrv_co_get_block_status = vmdk_co_get_block_status, + .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size, + + .create_options = vmdk_create_options, +diff --git a/block/vvfat.c b/block/vvfat.c +index 87b0279..510a559 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2874,7 +2874,7 @@ static coroutine_fn int vvfat_co_write(BlockDriverState *bs, int64_t sector_num, + return ret; + } + +-static int coroutine_fn vvfat_co_is_allocated(BlockDriverState *bs, ++static int64_t coroutine_fn vvfat_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int* n) + { + BDRVVVFATState* s = bs->opaque; +@@ -2981,7 +2981,7 @@ static BlockDriver bdrv_vvfat = { + + .bdrv_read = vvfat_co_read, + .bdrv_write = vvfat_co_write, +- .bdrv_co_is_allocated = vvfat_co_is_allocated, ++ .bdrv_co_get_block_status = vvfat_co_get_block_status, + }; + + static void bdrv_vvfat_init(void) +diff --git a/include/block/block.h b/include/block/block.h +index ec4d4aa..a733f5f 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -281,6 +281,8 @@ void bdrv_drain_all(void); + int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); + int bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); + int bdrv_has_zero_init(BlockDriverState *bs); ++int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, int *pnum); + int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, + int *pnum); + int bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base, +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 267be48..ea2c811 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -124,7 +124,7 @@ struct BlockDriver { + int64_t sector_num, int nb_sectors); + int coroutine_fn (*bdrv_co_discard)(BlockDriverState *bs, + int64_t sector_num, int nb_sectors); +- int coroutine_fn (*bdrv_co_is_allocated)(BlockDriverState *bs, ++ int64_t coroutine_fn (*bdrv_co_get_block_status)(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *pnum); + + /* +-- +1.7.1 + diff --git a/SOURCES/kvm-block-introduce-bdrv_make_zero.patch.patch.patch b/SOURCES/kvm-block-introduce-bdrv_make_zero.patch.patch.patch new file mode 100644 index 0000000..5efec27 --- /dev/null +++ b/SOURCES/kvm-block-introduce-bdrv_make_zero.patch.patch.patch @@ -0,0 +1,103 @@ +From 2f7835f6ef83931dff5fb37729fd42cd7b431b17 Mon Sep 17 00:00:00 2001 +Message-Id: <2f7835f6ef83931dff5fb37729fd42cd7b431b17.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:07 +0100 +Subject: [PATCH 19/50] block: introduce bdrv_make_zero + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-22-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56058 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 21/52] block: introduce bdrv_make_zero +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +this patch adds a call to completely zero out a block device. +the operation is sped up by checking the block status and +only writing zeroes to the device if they currently do not +return zeroes. optionally the zero writing can be sped up +by setting the flag BDRV_REQ_MAY_UNMAP to emulate the zero +write by unmapping if the driver supports it. + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d75cbb5e68f5a7d64248ba89399a7f2073231de5) +--- + block.c | 37 +++++++++++++++++++++++++++++++++++++ + include/block/block.h | 1 + + 2 files changed, 38 insertions(+) + +Signed-off-by: Michal Novotny +--- + block.c | 37 +++++++++++++++++++++++++++++++++++++ + include/block/block.h | 1 + + 2 files changed, 38 insertions(+) + +diff --git a/block.c b/block.c +index 23dbafd..2e77763 100644 +--- a/block.c ++++ b/block.c +@@ -2412,6 +2412,43 @@ int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, + BDRV_REQ_ZERO_WRITE | flags); + } + ++/* ++ * Completely zero out a block device with the help of bdrv_write_zeroes. ++ * The operation is sped up by checking the block status and only writing ++ * zeroes to the device if they currently do not return zeroes. Optional ++ * flags are passed through to bdrv_write_zeroes (e.g. BDRV_REQ_MAY_UNMAP). ++ * ++ * Returns < 0 on error, 0 on success. For error codes see bdrv_write(). ++ */ ++int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags) ++{ ++ int64_t target_size = bdrv_getlength(bs) / BDRV_SECTOR_SIZE; ++ int64_t ret, nb_sectors, sector_num = 0; ++ int n; ++ ++ for (;;) { ++ nb_sectors = target_size - sector_num; ++ if (nb_sectors <= 0) { ++ return 0; ++ } ++ if (nb_sectors > INT_MAX) { ++ nb_sectors = INT_MAX; ++ } ++ ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &n); ++ if (ret & BDRV_BLOCK_ZERO) { ++ sector_num += n; ++ continue; ++ } ++ ret = bdrv_write_zeroes(bs, sector_num, n, flags); ++ if (ret < 0) { ++ error_report("error writing zeroes at sector %" PRId64 ": %s", ++ sector_num, strerror(-ret)); ++ return ret; ++ } ++ sector_num += n; ++ } ++} ++ + int bdrv_pread(BlockDriverState *bs, int64_t offset, + void *buf, int count1) + { +diff --git a/include/block/block.h b/include/block/block.h +index 1958d98..b87ed3a 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -218,6 +218,7 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors); + int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, BdrvRequestFlags flags); ++int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags); + int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov); + int bdrv_pread(BlockDriverState *bs, int64_t offset, + void *buf, int count); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-iotest-update-084-to-test-static-VDI-image-cre.patch b/SOURCES/kvm-block-iotest-update-084-to-test-static-VDI-image-cre.patch new file mode 100644 index 0000000..ed479af --- /dev/null +++ b/SOURCES/kvm-block-iotest-update-084-to-test-static-VDI-image-cre.patch @@ -0,0 +1,97 @@ +From a1c05e91f427ee06521bdda8013091753736781f Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:54 +0200 +Subject: [PATCH 16/20] block: iotest - update 084 to test static VDI image creation + +Message-id: <179b35695a0f8dc312f7963cb818c630bcea84c7.1410897407.git.jcody@redhat.com> +Patchwork-id: 61220 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 15/15] block: iotest - update 084 to test static VDI image creation +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This updates the VDI corruption test to also test static VDI image +creation, as well as the default dynamic image creation. + +Reviewed-by: Max Reitz +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 23d20b5b4fb7bde102e6779b7a13b88375e4db66) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/084 | 16 ++++++++++++++-- + tests/qemu-iotests/084.out | 14 ++++++++++++++ + 2 files changed, 28 insertions(+), 2 deletions(-) + +diff --git a/tests/qemu-iotests/084 b/tests/qemu-iotests/084 +index 10a5a65..66ebcc3 100755 +--- a/tests/qemu-iotests/084 ++++ b/tests/qemu-iotests/084 +@@ -1,6 +1,7 @@ + #!/bin/bash + # +-# Test case for VDI header corruption; image too large, and too many blocks ++# Test case for VDI header corruption; image too large, and too many blocks. ++# Also simple test for creating dynamic and static VDI images. + # + # Copyright (C) 2013 Red Hat, Inc. + # +@@ -43,14 +44,25 @@ _supported_fmt vdi + _supported_proto generic + _supported_os Linux + ++size=64M + ds_offset=368 # disk image size field offset + bs_offset=376 # block size field offset + bii_offset=384 # block in image field offset + + echo ++echo "=== Statically allocated image creation ===" ++echo ++_make_test_img $size -o static ++_img_info ++stat -c"disk image file size in bytes: %s" "${TEST_IMG}" ++_cleanup_test_img ++ ++echo + echo "=== Testing image size bounds ===" + echo +-_make_test_img 64M ++_make_test_img $size ++_img_info ++stat -c"disk image file size in bytes: %s" "${TEST_IMG}" + + # check for image size too large + # poke max image size, and appropriate blocks_in_image value +diff --git a/tests/qemu-iotests/084.out b/tests/qemu-iotests/084.out +index 99c8e74..943888a 100644 +--- a/tests/qemu-iotests/084.out ++++ b/tests/qemu-iotests/084.out +@@ -1,8 +1,22 @@ + QA output created by 084 + ++=== Statically allocated image creation === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 1048576 ++disk image file size in bytes: 67109888 ++ + === Testing image size bounds === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 1048576 ++disk image file size in bytes: 1024 + Test 1: Maximum size (1024 TB): + image: TEST_DIR/t.IMGFMT + file format: IMGFMT +-- +1.7.1 + diff --git a/SOURCES/kvm-block-iscsi-add-.bdrv_get_info.patch.patch b/SOURCES/kvm-block-iscsi-add-.bdrv_get_info.patch.patch new file mode 100644 index 0000000..240ade3 --- /dev/null +++ b/SOURCES/kvm-block-iscsi-add-.bdrv_get_info.patch.patch @@ -0,0 +1,61 @@ +From 8edbab3c2116944b96ba6bcbd36e8c2c5236cf5f Mon Sep 17 00:00:00 2001 +Message-Id: <8edbab3c2116944b96ba6bcbd36e8c2c5236cf5f.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:59 +0100 +Subject: [PATCH 11/50] block/iscsi: add .bdrv_get_info + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-14-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56048 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 13/52] block/iscsi: add .bdrv_get_info +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 186d4f2b1deaae5c404798959bfbdb781e762045) +--- + block/iscsi.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 3a34eb7..1e8a2bb 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1508,6 +1508,14 @@ out: + return ret; + } + ++static int iscsi_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) ++{ ++ IscsiLun *iscsilun = bs->opaque; ++ bdi->unallocated_blocks_are_zero = !!iscsilun->lbprz; ++ bdi->can_write_zeroes_with_unmap = iscsilun->lbprz && iscsilun->lbp.lbpws; ++ return 0; ++} ++ + static QEMUOptionParameter iscsi_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -1528,6 +1536,7 @@ static BlockDriver bdrv_iscsi = { + .create_options = iscsi_create_options, + + .bdrv_getlength = iscsi_getlength, ++ .bdrv_get_info = iscsi_get_info, + .bdrv_truncate = iscsi_truncate, + + .bdrv_co_get_block_status = iscsi_co_get_block_status, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-iscsi-avoid-potential-overflow-of-acb-task-cdb.patch b/SOURCES/kvm-block-iscsi-avoid-potential-overflow-of-acb-task-cdb.patch new file mode 100644 index 0000000..bd3e9f4 --- /dev/null +++ b/SOURCES/kvm-block-iscsi-avoid-potential-overflow-of-acb-task-cdb.patch @@ -0,0 +1,60 @@ +From d2291657a3d6100be53008fe8206c9e72b37c584 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 22 Jun 2016 01:06:15 +0200 +Subject: [PATCH] block/iscsi: avoid potential overflow of acb->task->cdb + +RH-Author: Fam Zheng +Message-id: <20160622010615.10307-1-famz@redhat.com> +Patchwork-id: 70730 +O-Subject: [RHEL-7.3 qemu-kvm PATCH] block/iscsi: avoid potential overflow of acb->task->cdb +Bugzilla: 1340929 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laurent Vivier +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +at least in the path via virtio-blk the maximum size is not +restricted. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Peter Lieven +Message-Id: <1464080368-29584-1-git-send-email-pl@kamp.de> +Signed-off-by: Paolo Bonzini +(cherry picked from commit a6b3167fa0e825aebb5a7cd8b437b6d41584a196) + + Conflicts: + block/iscsi.c + +Upstream uses qemu_aio_unref, downstream uses qemu_aio_release. + +Also, context in conflict because downstream doesn't have 4bb17ab51 +(iscsi: Emulate commands in iscsi_aio_ioctl as iscsi_ioctl). + +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 92dc1dd..d472ee8 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -698,6 +698,13 @@ static BlockDriverAIOCB *iscsi_aio_ioctl(BlockDriverState *bs, + acb->buf = NULL; + acb->ioh = buf; + ++ if (acb->ioh->cmd_len > SCSI_CDB_MAX_SIZE) { ++ error_report("iSCSI: ioctl error CDB exceeds max size (%d > %d)", ++ acb->ioh->cmd_len, SCSI_CDB_MAX_SIZE); ++ qemu_aio_release(acb); ++ return NULL; ++ } ++ + acb->task = malloc(sizeof(struct scsi_task)); + if (acb->task == NULL) { + error_report("iSCSI: Failed to allocate task for scsi command. %s", +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-iscsi-check-WRITE-SAME-support-differently-dep.patch.patch.patch b/SOURCES/kvm-block-iscsi-check-WRITE-SAME-support-differently-dep.patch.patch.patch new file mode 100644 index 0000000..fed7676 --- /dev/null +++ b/SOURCES/kvm-block-iscsi-check-WRITE-SAME-support-differently-dep.patch.patch.patch @@ -0,0 +1,89 @@ +From 615429e3068cb4a3e57ee60d52f318aa6ca06f6d Mon Sep 17 00:00:00 2001 +Message-Id: <615429e3068cb4a3e57ee60d52f318aa6ca06f6d.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:22 +0100 +Subject: [PATCH 34/50] block/iscsi: check WRITE SAME support differently + depending on MAY_UNMAP + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-37-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56073 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 36/52] block/iscsi: check WRITE SAME support differently depending on MAY_UNMAP +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +The current check is right for MAY_UNMAP=1. For MAY_UNMAP=0, just +try and fall back to regular writes as soon as a WRITE SAME command +fails. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit fa6252b0565526ec2347e248172f91771e0d9f47) +--- + block/iscsi.c | 19 +++++++++++++++++-- + 1 file changed, 17 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 19 +++++++++++++++++-- + 1 file changed, 17 insertions(+), 2 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 7ae61f9..8b82fe7 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -55,6 +55,7 @@ typedef struct IscsiLun { + QEMUTimer *nop_timer; + uint8_t lbpme; + uint8_t lbprz; ++ uint8_t has_write_same; + struct scsi_inquiry_logical_block_provisioning lbp; + struct scsi_inquiry_block_limits bl; + unsigned char *zeroblock; +@@ -978,8 +979,13 @@ coroutine_fn iscsi_co_write_zeroes(BlockDriverState *bs, int64_t sector_num, + return -EINVAL; + } + +- if (!iscsilun->lbp.lbpws) { +- /* WRITE SAME is not supported by the target */ ++ if (!(flags & BDRV_REQ_MAY_UNMAP) && !iscsilun->has_write_same) { ++ /* WRITE SAME without UNMAP is not supported by the target */ ++ return -ENOTSUP; ++ } ++ ++ if ((flags & BDRV_REQ_MAY_UNMAP) && !iscsilun->lbp.lbpws) { ++ /* WRITE SAME with UNMAP is not supported by the target */ + return -ENOTSUP; + } + +@@ -1014,6 +1020,14 @@ retry: + } + + if (iTask.status != SCSI_STATUS_GOOD) { ++ if (iTask.status == SCSI_STATUS_CHECK_CONDITION && ++ iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && ++ iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) { ++ /* WRITE SAME is not supported by the target */ ++ iscsilun->has_write_same = false; ++ return -ENOTSUP; ++ } ++ + return -EIO; + } + +@@ -1377,6 +1391,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + } + + iscsilun->type = inq->periperal_device_type; ++ iscsilun->has_write_same = true; + + if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { + goto out; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-iscsi-fix-segfault-if-writesame-fails.patch b/SOURCES/kvm-block-iscsi-fix-segfault-if-writesame-fails.patch new file mode 100644 index 0000000..fb940e9 --- /dev/null +++ b/SOURCES/kvm-block-iscsi-fix-segfault-if-writesame-fails.patch @@ -0,0 +1,72 @@ +From 8bb562cbc4c70ea2d338db0e86d99b0578a73955 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 4 Apr 2014 05:55:59 +0200 +Subject: [PATCH 04/12] block/iscsi: fix segfault if writesame fails + +RH-Author: Fam Zheng +Message-id: <1396590962-25815-5-git-send-email-famz@redhat.com> +Patchwork-id: 58341 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 4/7] block/iscsi: fix segfault if writesame fails +Bugzilla: 1083413 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Peter Lieven + +commit fa6252b0 introduced a segfault because it tries +to read iTask.task->sense after iTask.task has been +freed. + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit d9738fd2463f71530d8d92fbb52ebdd1d78074fc) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 17 +++++++++-------- + 1 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index d3c8802..4a535e3 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1010,6 +1010,15 @@ retry: + qemu_coroutine_yield(); + } + ++ if (iTask.status == SCSI_STATUS_CHECK_CONDITION && ++ iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && ++ iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) { ++ /* WRITE SAME is not supported by the target */ ++ iscsilun->has_write_same = false; ++ scsi_free_scsi_task(iTask.task); ++ return -ENOTSUP; ++ } ++ + if (iTask.task != NULL) { + scsi_free_scsi_task(iTask.task); + iTask.task = NULL; +@@ -1020,14 +1029,6 @@ retry: + } + + if (iTask.status != SCSI_STATUS_GOOD) { +- if (iTask.status == SCSI_STATUS_CHECK_CONDITION && +- iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && +- iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) { +- /* WRITE SAME is not supported by the target */ +- iscsilun->has_write_same = false; +- return -ENOTSUP; +- } +- + return -EIO; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-iscsi-query-for-supported-VPD-pages.patch b/SOURCES/kvm-block-iscsi-query-for-supported-VPD-pages.patch new file mode 100644 index 0000000..e776aae --- /dev/null +++ b/SOURCES/kvm-block-iscsi-query-for-supported-VPD-pages.patch @@ -0,0 +1,202 @@ +From ce9c2ba7bd509d0d92c6f5a12ea27b9899126d6d Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 4 Apr 2014 05:55:58 +0200 +Subject: [PATCH 03/12] block/iscsi: query for supported VPD pages + +RH-Author: Fam Zheng +Message-id: <1396590962-25815-4-git-send-email-famz@redhat.com> +Patchwork-id: 58340 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 3/7] block/iscsi: query for supported VPD pages +Bugzilla: 1083413 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Peter Lieven + +this patch ensures that we only query for block provisioning and +block limits vpd pages if they are advertised. It also cleans +up the inquiry code and eliminates some redundant code. + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit 24d3bd67aca958c8ea103646d9d326de00056e4d) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 107 +++++++++++++++++++++++++++++----------------------------- + 1 file changed, 54 insertions(+), 53 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 107 +++++++++++++++++++++++++++++---------------------------- + 1 files changed, 54 insertions(+), 53 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 537d2cb..d3c8802 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1240,7 +1240,7 @@ static QemuOptsList runtime_opts = { + }; + + static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, int lun, +- int evpd, int pc, Error **errp) ++ int evpd, int pc, void **inq, Error **errp) + { + int full_size; + struct scsi_task *task = NULL; +@@ -1259,14 +1259,19 @@ static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, int lun, + } + } + ++ *inq = scsi_datain_unmarshall(task); ++ if (*inq == NULL) { ++ error_setg(errp, "iSCSI: failed to unmarshall inquiry datain blob"); ++ goto fail; ++ } ++ + return task; + + fail: + error_setg(errp, "iSCSI: Inquiry command failed : %s", + iscsi_get_error(iscsi)); +- if (task) { ++ if (task != NULL) { + scsi_free_scsi_task(task); +- return NULL; + } + return NULL; + } +@@ -1283,11 +1288,12 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + struct iscsi_url *iscsi_url = NULL; + struct scsi_task *task = NULL; + struct scsi_inquiry_standard *inq = NULL; ++ struct scsi_inquiry_supported_pages *inq_vpd; + char *initiator_name = NULL; + QemuOpts *opts; + Error *local_err = NULL; + const char *filename; +- int ret; ++ int i, ret; + + if ((BDRV_SECTOR_SIZE % 512) != 0) { + error_setg(errp, "iSCSI: Invalid BDRV_SECTOR_SIZE. " +@@ -1373,24 +1379,17 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + + iscsilun->iscsi = iscsi; + iscsilun->lun = iscsi_url->lun; ++ iscsilun->has_write_same = true; + +- task = iscsi_inquiry_sync(iscsi, iscsilun->lun, 0, 0, 36); +- +- if (task == NULL || task->status != SCSI_STATUS_GOOD) { +- error_setg(errp, "iSCSI: failed to send inquiry command."); +- ret = -EINVAL; +- goto out; +- } +- +- inq = scsi_datain_unmarshall(task); +- if (inq == NULL) { +- error_setg(errp, "iSCSI: Failed to unmarshall inquiry data."); ++ task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 0, 0, ++ (void **) &inq, errp); ++ if (task == NULL) { + ret = -EINVAL; + goto out; + } +- + iscsilun->type = inq->periperal_device_type; +- iscsilun->has_write_same = true; ++ scsi_free_scsi_task(task); ++ task = NULL; + + iscsi_readcapacity_sync(iscsilun, &local_err); + if (local_err != NULL) { +@@ -1408,46 +1407,48 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + bs->sg = 1; + } + +- if (iscsilun->lbpme) { +- struct scsi_inquiry_logical_block_provisioning *inq_lbp; +- task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, +- SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, +- errp); +- if (task == NULL) { +- ret = -EINVAL; +- goto out; +- } +- inq_lbp = scsi_datain_unmarshall(task); +- if (inq_lbp == NULL) { +- error_setg(errp, "iSCSI: failed to unmarshall inquiry datain blob"); +- ret = -EINVAL; +- goto out; +- } +- memcpy(&iscsilun->lbp, inq_lbp, +- sizeof(struct scsi_inquiry_logical_block_provisioning)); +- scsi_free_scsi_task(task); +- task = NULL; ++ task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, ++ SCSI_INQUIRY_PAGECODE_SUPPORTED_VPD_PAGES, ++ (void **) &inq_vpd, errp); ++ if (task == NULL) { ++ ret = -EINVAL; ++ goto out; + } +- +- if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { ++ for (i = 0; i < inq_vpd->num_pages; i++) { ++ struct scsi_task *inq_task; ++ struct scsi_inquiry_logical_block_provisioning *inq_lbp; + struct scsi_inquiry_block_limits *inq_bl; +- task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, +- SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, errp); +- if (task == NULL) { +- ret = -EINVAL; +- goto out; +- } +- inq_bl = scsi_datain_unmarshall(task); +- if (inq_bl == NULL) { +- error_setg(errp, "iSCSI: failed to unmarshall inquiry datain blob"); +- ret = -EINVAL; +- goto out; ++ switch (inq_vpd->pages[i]) { ++ case SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING: ++ inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, ++ SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, ++ (void **) &inq_lbp, errp); ++ if (inq_task == NULL) { ++ ret = -EINVAL; ++ goto out; ++ } ++ memcpy(&iscsilun->lbp, inq_lbp, ++ sizeof(struct scsi_inquiry_logical_block_provisioning)); ++ scsi_free_scsi_task(inq_task); ++ break; ++ case SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS: ++ inq_task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, ++ SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, ++ (void **) &inq_bl, errp); ++ if (inq_task == NULL) { ++ ret = -EINVAL; ++ goto out; ++ } ++ memcpy(&iscsilun->bl, inq_bl, ++ sizeof(struct scsi_inquiry_block_limits)); ++ scsi_free_scsi_task(inq_task); ++ break; ++ default: ++ break; + } +- memcpy(&iscsilun->bl, inq_bl, +- sizeof(struct scsi_inquiry_block_limits)); +- scsi_free_scsi_task(task); +- task = NULL; + } ++ scsi_free_scsi_task(task); ++ task = NULL; + + #if defined(LIBISCSI_FEATURE_NOP_COUNTER) + /* Set up a timer for sending out iSCSI NOPs */ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-iscsi-remove-.bdrv_has_zero_init.patch.patch.patch b/SOURCES/kvm-block-iscsi-remove-.bdrv_has_zero_init.patch.patch.patch new file mode 100644 index 0000000..e2ef3ae --- /dev/null +++ b/SOURCES/kvm-block-iscsi-remove-.bdrv_has_zero_init.patch.patch.patch @@ -0,0 +1,62 @@ +From 81a1f4a5ffab6a20f5fa90c722791e6956999988 Mon Sep 17 00:00:00 2001 +Message-Id: <81a1f4a5ffab6a20f5fa90c722791e6956999988.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:20 +0100 +Subject: [PATCH 32/50] block/iscsi: remove .bdrv_has_zero_init + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-35-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56071 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 34/52] block/iscsi: remove .bdrv_has_zero_init +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +since commit 3ac21627 the default value changed to 0. + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4b52498e62d02a30f780875f54431d1bad0bcabd) +--- + block/iscsi.c | 7 ------- + 1 file changed, 7 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 3e3ae64..c5cd86d 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1507,11 +1507,6 @@ static int iscsi_truncate(BlockDriverState *bs, int64_t offset) + return 0; + } + +-static int iscsi_has_zero_init(BlockDriverState *bs) +-{ +- return 0; +-} +- + static int iscsi_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { +@@ -1607,8 +1602,6 @@ static BlockDriver bdrv_iscsi = { + .bdrv_aio_writev = iscsi_aio_writev, + .bdrv_aio_flush = iscsi_aio_flush, + +- .bdrv_has_zero_init = iscsi_has_zero_init, +- + #ifdef __linux__ + .bdrv_ioctl = iscsi_ioctl, + .bdrv_aio_ioctl = iscsi_aio_ioctl, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-iscsi-set-bdi-cluster_size.patch.patch b/SOURCES/kvm-block-iscsi-set-bdi-cluster_size.patch.patch new file mode 100644 index 0000000..ef6487f --- /dev/null +++ b/SOURCES/kvm-block-iscsi-set-bdi-cluster_size.patch.patch @@ -0,0 +1,57 @@ +From 7e4a1d08c448ddbd6e20705cd2ea38b78f833401 Mon Sep 17 00:00:00 2001 +Message-Id: <7e4a1d08c448ddbd6e20705cd2ea38b78f833401.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:33 +0100 +Subject: [PATCH 45/50] block/iscsi: set bdi->cluster_size + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-48-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56083 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 47/52] block/iscsi: set bdi->cluster_size +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +this patch aims to set bdi->cluster_size to the internal page size +of the iscsi target so that enabled callers can align requests +properly. + +Reviewed-by: Paolo Bonzini +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 1c0704a556dbb004a3b82791779760f418053951) +--- + block/iscsi.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 8b82fe7..94c5af8 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1582,6 +1582,13 @@ static int iscsi_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + IscsiLun *iscsilun = bs->opaque; + bdi->unallocated_blocks_are_zero = !!iscsilun->lbprz; + bdi->can_write_zeroes_with_unmap = iscsilun->lbprz && iscsilun->lbp.lbpws; ++ /* Guess the internal cluster (page) size of the iscsi target by the means ++ * of opt_unmap_gran. Transfer the unmap granularity only if it has a ++ * reasonable size for bdi->cluster_size */ ++ if (iscsilun->bl.opt_unmap_gran * iscsilun->block_size >= 64 * 1024 && ++ iscsilun->bl.opt_unmap_gran * iscsilun->block_size <= 16 * 1024 * 1024) { ++ bdi->cluster_size = iscsilun->bl.opt_unmap_gran * iscsilun->block_size; ++ } + return 0; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-iscsi-set-bs-bl.opt_transfer_length.patch.patch b/SOURCES/kvm-block-iscsi-set-bs-bl.opt_transfer_length.patch.patch new file mode 100644 index 0000000..aba1888 --- /dev/null +++ b/SOURCES/kvm-block-iscsi-set-bs-bl.opt_transfer_length.patch.patch @@ -0,0 +1,49 @@ +From 5e38ead2b13d0cf9477aacee2d75432fe0f2176d Mon Sep 17 00:00:00 2001 +Message-Id: <5e38ead2b13d0cf9477aacee2d75432fe0f2176d.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:35 +0100 +Subject: [PATCH 47/50] block/iscsi: set bs->bl.opt_transfer_length + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-50-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56086 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 49/52] block/iscsi: set bs->bl.opt_transfer_length +Bugzilla: 1039557 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Paolo Bonzini +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7572ddc8db114d8c437a97ca3eaedab397f66cda) +--- + block/iscsi.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 94c5af8..fce909b 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1459,6 +1459,9 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + } + bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, + iscsilun); ++ ++ bs->bl.opt_transfer_length = sector_lun2qemu(iscsilun->bl.opt_xfer_len, ++ iscsilun); + } + + #if defined(LIBISCSI_FEATURE_NOP_COUNTER) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-iscsi-updated-copyright.patch.patch.patch b/SOURCES/kvm-block-iscsi-updated-copyright.patch.patch.patch new file mode 100644 index 0000000..4f9404c --- /dev/null +++ b/SOURCES/kvm-block-iscsi-updated-copyright.patch.patch.patch @@ -0,0 +1,49 @@ +From 4a988f436f785fa9349baf66a0d44e26b94f75af Mon Sep 17 00:00:00 2001 +Message-Id: <4a988f436f785fa9349baf66a0d44e26b94f75af.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:21 +0100 +Subject: [PATCH 33/50] block/iscsi: updated copyright + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-36-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56072 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 35/52] block/iscsi: updated copyright +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +added myself to reflect recent work on the iscsi block driver. + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 2af8a1a704a352bab2e9eaf803db0b3552e826d0) +--- + block/iscsi.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index c5cd86d..7ae61f9 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -2,6 +2,7 @@ + * QEMU Block driver for iSCSI images + * + * Copyright (c) 2010-2011 Ronnie Sahlberg ++ * Copyright (c) 2012-2013 Peter Lieven + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-jobs-qemu-kvm-rhel-differentiation.patch b/SOURCES/kvm-block-jobs-qemu-kvm-rhel-differentiation.patch new file mode 100644 index 0000000..c3c30e0 --- /dev/null +++ b/SOURCES/kvm-block-jobs-qemu-kvm-rhel-differentiation.patch @@ -0,0 +1,141 @@ +From bb8aca64535578520c4b7f5186f9ae5754626694 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Thu, 5 May 2016 19:46:28 +0200 +Subject: [PATCH 10/10] block jobs: qemu-kvm-rhel differentiation + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 70344 +O-Subject: [RHEL7.3 qemu-kvm-rhel 1/1] block jobs: qemu-kvm-rhel differentiation +Bugzilla: 1156635 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +The conditional block job disablement for RHEL left some QAPI / HMP +commands in place, that are vestigial without any actual block jobs to +control. + +This patch envelopes those block-job related functions in the +conditional code that is disabled for RHEL: + +block-job-set-speed +block-job-cancel +block-job-pause +block-job-resume +block-job-complete + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 2 +- + hmp-commands.hx | 2 +- + hmp.c | 2 +- + qapi-schema.json | 2 +- + qmp-commands.hx | 3 --- + 5 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index b5792a2..69e951f 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1701,7 +1701,6 @@ void qmp_drive_mirror(const char *device, const char *target, + return; + } + } +-#endif + + static BlockJob *find_block_job(const char *device) + { +@@ -1786,6 +1785,7 @@ void qmp_block_job_complete(const char *device, Error **errp) + trace_qmp_block_job_complete(job); + block_job_complete(job, errp); + } ++#endif + + void qmp___com_redhat_change_backing_file(const char *device, + const char *image_node_name, +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 7e1855a..dd528d2 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -81,7 +81,6 @@ ETEXI + .help = "copy data from a backing file into a block device", + .mhandler.cmd = hmp_block_stream, + }, +-#endif + + STEXI + @item block_stream +@@ -160,6 +159,7 @@ STEXI + @findex block_job_resume + Resume a paused block streaming operation. + ETEXI ++#endif + + { + .name = "eject", +diff --git a/hmp.c b/hmp.c +index e1d92f4..fb9b445 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -1053,7 +1053,6 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict) + + hmp_handle_error(mon, &error); + } +-#endif + + void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict) + { +@@ -1106,6 +1105,7 @@ void hmp_block_job_complete(Monitor *mon, const QDict *qdict) + + hmp_handle_error(mon, &error); + } ++#endif + + typedef struct MigrationStatus + { +diff --git a/qapi-schema.json b/qapi-schema.json +index c8732c1..5138ed9 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -2326,7 +2326,6 @@ + { 'command': 'block-stream', + 'data': { 'device': 'str', '*base': 'str', '*backing-file': 'str', + '*speed': 'int', '*on-error': 'BlockdevOnError' } } +-#_end-rhev-only + + ## + # @block-job-set-speed: +@@ -2448,6 +2447,7 @@ + # Since: 1.3 + ## + { 'command': 'block-job-complete', 'data': { 'device': 'str' } } ++#_end-rhev-only + + ## + # @ObjectTypeInfo: +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 22a09be..9522c44 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1089,8 +1089,6 @@ Example: + + EQMP + +-#endif +- + { + .name = "block-job-set-speed", + .args_type = "device:B,speed:o", +@@ -1117,7 +1115,6 @@ EQMP + .args_type = "device:B", + .mhandler.cmd_new = qmp_marshal_input_block_job_complete, + }, +-#ifdef CONFIG_LIVE_BLOCK_OPS + { + .name = "transaction", + .args_type = "actions:q", +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-keep-bs-total_sectors-up-to-date-even-for-grow.patch b/SOURCES/kvm-block-keep-bs-total_sectors-up-to-date-even-for-grow.patch new file mode 100644 index 0000000..696d19d --- /dev/null +++ b/SOURCES/kvm-block-keep-bs-total_sectors-up-to-date-even-for-grow.patch @@ -0,0 +1,55 @@ +From 1c16f135463077e596b9156439d2482a1a8aa9b8 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:29 +0200 +Subject: [PATCH 04/81] block: keep bs->total_sectors up to date even for growable block devices + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-5-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54986 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 04/26] block: keep bs->total_sectors up to date even for growable block devices +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +If a BlockDriverState is growable, after every write we need to +check if bs->total_sectors might have changed. With this change, +bdrv_getlength does not need anymore a system call. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit df2a6f29a5019707d69f6eeb30cf792841cae5aa) +--- + block.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 2ba9a0a..d5aeff7 100644 +--- a/block.c ++++ b/block.c +@@ -2703,6 +2703,9 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, + if (bs->wr_highest_sector < sector_num + nb_sectors - 1) { + bs->wr_highest_sector = sector_num + nb_sectors - 1; + } ++ if (bs->growable && ret >= 0) { ++ bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors); ++ } + + tracked_request_end(&req); + +@@ -2777,7 +2780,7 @@ int64_t bdrv_getlength(BlockDriverState *bs) + if (!drv) + return -ENOMEDIUM; + +- if (bs->growable || bdrv_dev_has_removable_media(bs)) { ++ if (bdrv_dev_has_removable_media(bs)) { + if (drv->bdrv_getlength) { + return drv->bdrv_getlength(bs); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-linux-aio-fix-memory-and-fd-leak.patch b/SOURCES/kvm-block-linux-aio-fix-memory-and-fd-leak.patch new file mode 100644 index 0000000..12fe94d --- /dev/null +++ b/SOURCES/kvm-block-linux-aio-fix-memory-and-fd-leak.patch @@ -0,0 +1,89 @@ +From 7adcfacf9057c216beb99286e5f233e868865eae Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 21 Nov 2017 03:21:44 +0100 +Subject: [PATCH 1/9] block/linux-aio: fix memory and fd leak + +RH-Author: Fam Zheng +Message-id: <20171121032145.5681-2-famz@redhat.com> +Patchwork-id: 77766 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v2 1/2] block/linux-aio: fix memory and fd leak +Bugzilla: 1491434 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Laurent Vivier + +From: Stefan Hajnoczi + +Hot unplugging -drive aio=native,file=test.img,format=raw images leaves +the Linux AIO event notifier and struct qemu_laio_state allocated. +Luckily nothing will use the event notifier after the BlockDriverState +has been closed so the handler function is never called. + +It's still worth fixing this resource leak. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit abd269b7cf1f084a067731acb8f3272c193cb5f0) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/linux-aio.c +* Context is different: downstream we don't have raw_detach_aio_context() + in raw_close(). +* Downstream uses eventfd(2) instead of EventNotifier, so do close() + directly here as well. +--- + block/linux-aio.c | 9 +++++++++ + block/raw-aio.h | 1 + + block/raw-posix.c | 6 ++++++ + 3 files changed, 16 insertions(+) + +diff --git a/block/linux-aio.c b/block/linux-aio.c +index 40041d1..43f14f3 100644 +--- a/block/linux-aio.c ++++ b/block/linux-aio.c +@@ -225,3 +225,12 @@ out_free_state: + g_free(s); + return NULL; + } ++ ++void laio_cleanup(void *s_) ++{ ++ struct qemu_laio_state *s = s_; ++ ++ qemu_aio_set_fd_handler(s->efd, NULL, NULL, NULL, NULL); ++ close(s->efd); ++ g_free(s); ++} +diff --git a/block/raw-aio.h b/block/raw-aio.h +index 7ad0a8a..2dba2c6 100644 +--- a/block/raw-aio.h ++++ b/block/raw-aio.h +@@ -34,6 +34,7 @@ + /* linux-aio.c - Linux native implementation */ + #ifdef CONFIG_LINUX_AIO + void *laio_init(void); ++void laio_cleanup(void *s); + BlockDriverAIOCB *laio_submit(BlockDriverState *bs, void *aio_ctx, int fd, + int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, + BlockDriverCompletionFunc *cb, void *opaque, int type); +diff --git a/block/raw-posix.c b/block/raw-posix.c +index ed97bd4..c2b1be2 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1081,6 +1081,12 @@ static BlockDriverAIOCB *raw_aio_flush(BlockDriverState *bs, + static void raw_close(BlockDriverState *bs) + { + BDRVRawState *s = bs->opaque; ++ ++#ifdef CONFIG_LINUX_AIO ++ if (s->use_aio) { ++ laio_cleanup(s->aio_ctx); ++ } ++#endif + if (s->fd >= 0) { + qemu_close(s->fd); + s->fd = -1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-look-for-zero-blocks-in-bs-file.patch b/SOURCES/kvm-block-look-for-zero-blocks-in-bs-file.patch new file mode 100644 index 0000000..d78f093 --- /dev/null +++ b/SOURCES/kvm-block-look-for-zero-blocks-in-bs-file.patch @@ -0,0 +1,63 @@ +From 91a73a0f154a7d8f2c4949ea882f684d55c916e4 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:47 +0200 +Subject: [PATCH 22/81] block: look for zero blocks in bs->file + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-23-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55005 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 22/26] block: look for zero blocks in bs->file +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5daa74a6ebce7543aaad178c4061dc087bb4c705) +--- + block.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 16 +++++++++++++++- + 1 files changed, 15 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 2a4a9dd..f993b2e 100644 +--- a/block.c ++++ b/block.c +@@ -3041,7 +3041,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + { + int64_t length; + int64_t n; +- int64_t ret; ++ int64_t ret, ret2; + + length = bdrv_getlength(bs); + if (length < 0) { +@@ -3083,6 +3083,20 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + } + } + } ++ ++ if (bs->file && ++ (ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO) && ++ (ret & BDRV_BLOCK_OFFSET_VALID)) { ++ ret2 = bdrv_co_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS, ++ *pnum, pnum); ++ if (ret2 >= 0) { ++ /* Ignore errors. This is just providing extra information, it ++ * is useful but not necessary. ++ */ ++ ret |= (ret2 & BDRV_BLOCK_ZERO); ++ } ++ } ++ + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-make-BdrvRequestFlags-public.patch.patch.patch b/SOURCES/kvm-block-make-BdrvRequestFlags-public.patch.patch.patch new file mode 100644 index 0000000..430a293 --- /dev/null +++ b/SOURCES/kvm-block-make-BdrvRequestFlags-public.patch.patch.patch @@ -0,0 +1,69 @@ +From ef18859f76a1499b7d6ac1f3994dade1345088f2 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:54 +0100 +Subject: [PATCH 06/50] block: make BdrvRequestFlags public + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-9-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56045 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 08/52] block: make BdrvRequestFlags public +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 6faac15fa80c4c1f813d96afc13bceaa3bc5ffe7) +--- + block.c | 5 ----- + include/block/block.h | 5 +++++ + 2 files changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 5 ----- + include/block/block.h | 5 +++++ + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/block.c b/block.c +index 02994ec..b7ca799 100644 +--- a/block.c ++++ b/block.c +@@ -51,11 +51,6 @@ + + #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */ + +-typedef enum { +- BDRV_REQ_COPY_ON_READ = 0x1, +- BDRV_REQ_ZERO_WRITE = 0x2, +-} BdrvRequestFlags; +- + static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load); + static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs, + int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, +diff --git a/include/block/block.h b/include/block/block.h +index 15ffbd2..ce6e897 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -62,6 +62,11 @@ typedef struct BlockDevOps { + void (*resize_cb)(void *opaque); + } BlockDevOps; + ++typedef enum { ++ BDRV_REQ_COPY_ON_READ = 0x1, ++ BDRV_REQ_ZERO_WRITE = 0x2, ++} BdrvRequestFlags; ++ + #define BDRV_O_RDWR 0x0002 + #define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */ + #define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-make-all-steps-in-qmp_transaction-as-callback.patch b/SOURCES/kvm-block-make-all-steps-in-qmp_transaction-as-callback.patch new file mode 100644 index 0000000..1883272 --- /dev/null +++ b/SOURCES/kvm-block-make-all-steps-in-qmp_transaction-as-callback.patch @@ -0,0 +1,206 @@ +From 2b05ad88980acb91357598f5ed041ec33aec0de6 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:56 +0200 +Subject: [PATCH 05/38] block: make all steps in qmp_transaction() as callback + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 54192 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 05/32] block: make all steps in qmp_transaction() as callback +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Wenchao Xia + +Bugzilla: 1005818 + +Make it easier to add other operations to qmp_transaction() by using +callbacks, with external snapshots serving as an example implementation +of the callbacks. + +Signed-off-by: Wenchao Xia +Reviewed-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit ba0c86a34e29b31ef360feda74c94200a5403fdd) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++---------------- + 1 file changed, 71 insertions(+), 24 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 95 ++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 files changed, 71 insertions(+), 24 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index b040f0f..b8521c7 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -779,14 +779,43 @@ void qmp_blockdev_snapshot_sync(const char *device, const char *snapshot_file, + + + /* New and old BlockDriverState structs for group snapshots */ +-typedef struct BlkTransactionStates { ++ ++typedef struct BlkTransactionStates BlkTransactionStates; ++ ++/* Only prepare() may fail. In a single transaction, only one of commit() or ++ abort() will be called, clean() will always be called if it present. */ ++typedef struct BdrvActionOps { ++ /* Size of state struct, in bytes. */ ++ size_t instance_size; ++ /* Prepare the work, must NOT be NULL. */ ++ void (*prepare)(BlkTransactionStates *common, Error **errp); ++ /* Commit the changes, must NOT be NULL. */ ++ void (*commit)(BlkTransactionStates *common); ++ /* Abort the changes on fail, can be NULL. */ ++ void (*abort)(BlkTransactionStates *common); ++ /* Clean up resource in the end, can be NULL. */ ++ void (*clean)(BlkTransactionStates *common); ++} BdrvActionOps; ++ ++/* ++ * This structure must be arranged as first member in child type, assuming ++ * that compiler will also arrange it to the same address with parent instance. ++ * Later it will be used in free(). ++ */ ++struct BlkTransactionStates { ++ BlockdevAction *action; ++ const BdrvActionOps *ops; ++ QSIMPLEQ_ENTRY(BlkTransactionStates) entry; ++}; ++ ++/* external snapshot private data */ ++typedef struct ExternalSnapshotStates { ++ BlkTransactionStates common; + BlockDriverState *old_bs; + BlockDriverState *new_bs; +- QSIMPLEQ_ENTRY(BlkTransactionStates) entry; +-} BlkTransactionStates; ++} ExternalSnapshotStates; + +-static void external_snapshot_prepare(BlockdevAction *action, +- BlkTransactionStates *states, ++static void external_snapshot_prepare(BlkTransactionStates *common, + Error **errp) + { + BlockDriver *proto_drv; +@@ -797,6 +826,9 @@ static void external_snapshot_prepare(BlockdevAction *action, + const char *new_image_file; + const char *format = "qcow2"; + enum NewImageMode mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS; ++ ExternalSnapshotStates *states = ++ DO_UPCAST(ExternalSnapshotStates, common, common); ++ BlockdevAction *action = common->action; + + /* get parameters */ + g_assert(action->kind == BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC); +@@ -871,8 +903,11 @@ static void external_snapshot_prepare(BlockdevAction *action, + } + } + +-static void external_snapshot_commit(BlkTransactionStates *states) ++static void external_snapshot_commit(BlkTransactionStates *common) + { ++ ExternalSnapshotStates *states = ++ DO_UPCAST(ExternalSnapshotStates, common, common); ++ + /* This removes our old bs from the bdrv_states, and adds the new bs */ + bdrv_append(states->new_bs, states->old_bs); + /* We don't need (or want) to use the transactional +@@ -882,13 +917,24 @@ static void external_snapshot_commit(BlkTransactionStates *states) + NULL); + } + +-static void external_snapshot_abort(BlkTransactionStates *states) ++static void external_snapshot_abort(BlkTransactionStates *common) + { ++ ExternalSnapshotStates *states = ++ DO_UPCAST(ExternalSnapshotStates, common, common); + if (states->new_bs) { + bdrv_delete(states->new_bs); + } + } + ++static const BdrvActionOps actions[] = { ++ [BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = { ++ .instance_size = sizeof(ExternalSnapshotStates), ++ .prepare = external_snapshot_prepare, ++ .commit = external_snapshot_commit, ++ .abort = external_snapshot_abort, ++ }, ++}; ++ + /* + * 'Atomic' group snapshots. The snapshots are taken as a set, and if any fail + * then we do not pivot any of the devices in the group, and abandon the +@@ -909,32 +955,28 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + /* We don't do anything in this loop that commits us to the snapshot */ + while (NULL != dev_entry) { + BlockdevAction *dev_info = NULL; ++ const BdrvActionOps *ops; + + dev_info = dev_entry->value; + dev_entry = dev_entry->next; + +- states = g_malloc0(sizeof(BlkTransactionStates)); ++ assert(dev_info->kind < ARRAY_SIZE(actions)); ++ ++ ops = &actions[dev_info->kind]; ++ states = g_malloc0(ops->instance_size); ++ states->ops = ops; ++ states->action = dev_info; + QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, states, entry); + +- switch (dev_info->kind) { +- case BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC: +- external_snapshot_prepare(dev_info, states, errp); +- if (error_is_set(&local_err)) { +- error_propagate(errp, local_err); +- goto delete_and_fail; +- } +- break; +- default: +- abort(); ++ states->ops->prepare(states, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ goto delete_and_fail; + } +- + } + +- +- /* Now we are going to do the actual pivot. Everything up to this point +- * is reversible, but we are committed at this point */ + QSIMPLEQ_FOREACH(states, &snap_bdrv_states, entry) { +- external_snapshot_commit(states); ++ states->ops->commit(states); + } + + /* success */ +@@ -946,10 +988,15 @@ delete_and_fail: + * the original bs for all images + */ + QSIMPLEQ_FOREACH(states, &snap_bdrv_states, entry) { +- external_snapshot_abort(states); ++ if (states->ops->abort) { ++ states->ops->abort(states); ++ } + } + exit: + QSIMPLEQ_FOREACH_SAFE(states, &snap_bdrv_states, entry, next) { ++ if (states->ops->clean) { ++ states->ops->clean(states); ++ } + g_free(states); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-make-bdrv_co_do_write_zeroes-stricter-in-produ.patch.patch.patch b/SOURCES/kvm-block-make-bdrv_co_do_write_zeroes-stricter-in-produ.patch.patch.patch new file mode 100644 index 0000000..b800865 --- /dev/null +++ b/SOURCES/kvm-block-make-bdrv_co_do_write_zeroes-stricter-in-produ.patch.patch.patch @@ -0,0 +1,100 @@ +From 4a1e019ac51460ce6329892cc99fc11d518d2eb2 Mon Sep 17 00:00:00 2001 +Message-Id: <4a1e019ac51460ce6329892cc99fc11d518d2eb2.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:16 +0100 +Subject: [PATCH 28/50] block: make bdrv_co_do_write_zeroes stricter in + producing aligned requests + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-31-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56067 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 30/52] block: make bdrv_co_do_write_zeroes stricter in producing aligned requests +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Right now, bdrv_co_do_write_zeroes will only try to align the +beginning of the request. However, it is simpler for many +formats to expect the block layer to separate both the head *and* +the tail. This makes sure that the format's bdrv_co_write_zeroes +function will be called with aligned sector_num and nb_sectors for +the bulk of the request. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b8d71c09f31a9cae248d167dddc75c66d5135ff2) +--- + block.c | 35 +++++++++++++++++++++++------------ + 1 file changed, 23 insertions(+), 12 deletions(-) + +Signed-off-by: Michal Novotny +--- + block.c | 35 +++++++++++++++++++++++------------ + 1 file changed, 23 insertions(+), 12 deletions(-) + +diff --git a/block.c b/block.c +index c9e65b4..1ac1ab3 100644 +--- a/block.c ++++ b/block.c +@@ -2781,14 +2781,21 @@ static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, + while (nb_sectors > 0 && !ret) { + int num = nb_sectors; + +- /* align request */ +- if (bs->bl.write_zeroes_alignment && +- num >= bs->bl.write_zeroes_alignment && +- sector_num % bs->bl.write_zeroes_alignment) { +- if (num > bs->bl.write_zeroes_alignment) { ++ /* Align request. Block drivers can expect the "bulk" of the request ++ * to be aligned. ++ */ ++ if (bs->bl.write_zeroes_alignment ++ && num > bs->bl.write_zeroes_alignment) { ++ if (sector_num % bs->bl.write_zeroes_alignment != 0) { ++ /* Make a small request up to the first aligned sector. */ + num = bs->bl.write_zeroes_alignment; ++ num -= sector_num % bs->bl.write_zeroes_alignment; ++ } else if ((sector_num + num) % bs->bl.write_zeroes_alignment != 0) { ++ /* Shorten the request to the last aligned sector. num cannot ++ * underflow because num > bs->bl.write_zeroes_alignment. ++ */ ++ num -= (sector_num + num) % bs->bl.write_zeroes_alignment; + } +- num -= sector_num % bs->bl.write_zeroes_alignment; + } + + /* limit request size */ +@@ -2806,16 +2813,20 @@ static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs, + /* Fall back to bounce buffer if write zeroes is unsupported */ + iov.iov_len = num * BDRV_SECTOR_SIZE; + if (iov.iov_base == NULL) { +- /* allocate bounce buffer only once and ensure that it +- * is big enough for this and all future requests. +- */ +- size_t bufsize = num <= nb_sectors ? num : max_write_zeroes; +- iov.iov_base = qemu_blockalign(bs, bufsize * BDRV_SECTOR_SIZE); +- memset(iov.iov_base, 0, bufsize * BDRV_SECTOR_SIZE); ++ iov.iov_base = qemu_blockalign(bs, num * BDRV_SECTOR_SIZE); ++ memset(iov.iov_base, 0, num * BDRV_SECTOR_SIZE); + } + qemu_iovec_init_external(&qiov, &iov, 1); + + ret = drv->bdrv_co_writev(bs, sector_num, num, &qiov); ++ ++ /* Keep bounce buffer around if it is big enough for all ++ * all future requests. ++ */ ++ if (num < max_write_zeroes) { ++ qemu_vfree(iov.iov_base); ++ iov.iov_base = NULL; ++ } + } + + sector_num += num; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-make-bdrv_co_is_allocated-static.patch b/SOURCES/kvm-block-make-bdrv_co_is_allocated-static.patch new file mode 100644 index 0000000..bcfa9cf --- /dev/null +++ b/SOURCES/kvm-block-make-bdrv_co_is_allocated-static.patch @@ -0,0 +1,129 @@ +From 9b3702c45245f7bbb51350c25e8cf304c490b96a Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Thu, 7 Nov 2013 07:19:42 +0100 +Subject: [PATCH 05/81] block: make bdrv_co_is_allocated static + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-6-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54988 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 05/26] block: make bdrv_co_is_allocated static +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +bdrv_is_allocated can detect coroutine context and go through a fast +path, similar to other block layer functions. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit bdad13b9deec47d5d9eaf7f43867d19a79471244) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 24 +++++++++++++++--------- + block/raw.c | 2 +- + block/stream.c | 4 ++-- + include/block/block.h | 2 -- + 4 files changed, 18 insertions(+), 14 deletions(-) + +diff --git a/block.c b/block.c +index d5aeff7..0607cc6 100644 +--- a/block.c ++++ b/block.c +@@ -2555,7 +2555,7 @@ static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs, + if (flags & BDRV_REQ_COPY_ON_READ) { + int pnum; + +- ret = bdrv_co_is_allocated(bs, sector_num, nb_sectors, &pnum); ++ ret = bdrv_is_allocated(bs, sector_num, nb_sectors, &pnum); + if (ret < 0) { + goto out; + } +@@ -3027,8 +3027,9 @@ typedef struct BdrvCoIsAllocatedData { + * 'nb_sectors' is the max value 'pnum' should be set to. If nb_sectors goes + * beyond the end of the disk image it will be clamped. + */ +-int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, int64_t sector_num, +- int nb_sectors, int *pnum) ++static int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, ++ int64_t sector_num, ++ int nb_sectors, int *pnum) + { + int64_t n; + +@@ -3078,10 +3079,15 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, + .done = false, + }; + +- co = qemu_coroutine_create(bdrv_is_allocated_co_entry); +- qemu_coroutine_enter(co, &data); +- while (!data.done) { +- qemu_aio_wait(); ++ if (qemu_in_coroutine()) { ++ /* Fast-path if already in coroutine context */ ++ bdrv_is_allocated_co_entry(&data); ++ } else { ++ co = qemu_coroutine_create(bdrv_is_allocated_co_entry); ++ qemu_coroutine_enter(co, &data); ++ while (!data.done) { ++ qemu_aio_wait(); ++ } + } + return data.ret; + } +@@ -3109,8 +3115,8 @@ int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top, + intermediate = top; + while (intermediate && intermediate != base) { + int pnum_inter; +- ret = bdrv_co_is_allocated(intermediate, sector_num, nb_sectors, +- &pnum_inter); ++ ret = bdrv_is_allocated(intermediate, sector_num, nb_sectors, ++ &pnum_inter); + if (ret < 0) { + return ret; + } else if (ret) { +diff --git a/block/raw.c b/block/raw.c +index 8c81de9..f78ff39 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -39,7 +39,7 @@ static int coroutine_fn raw_co_is_allocated(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, int *pnum) + { +- return bdrv_co_is_allocated(bs->file, sector_num, nb_sectors, pnum); ++ return bdrv_is_allocated(bs->file, sector_num, nb_sectors, pnum); + } + + static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs, +diff --git a/block/stream.c b/block/stream.c +index d6df06f..f8efa8a 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -115,8 +115,8 @@ wait: + break; + } + +- ret = bdrv_co_is_allocated(bs, sector_num, +- STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n); ++ ret = bdrv_is_allocated(bs, sector_num, ++ STREAM_BUFFER_SIZE / BDRV_SECTOR_SIZE, &n); + if (ret == 1) { + /* Allocated in the top, no need to copy. */ + copy = false; +diff --git a/include/block/block.h b/include/block/block.h +index 1a3ed22..1932e67 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -192,8 +192,6 @@ int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num, + */ + int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, int64_t sector_num, + int nb_sectors); +-int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, int64_t sector_num, +- int nb_sectors, int *pnum); + int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top, + BlockDriverState *base, + int64_t sector_num, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-make-bdrv_delete-static.patch b/SOURCES/kvm-block-make-bdrv_delete-static.patch new file mode 100644 index 0000000..cebae69 --- /dev/null +++ b/SOURCES/kvm-block-make-bdrv_delete-static.patch @@ -0,0 +1,665 @@ +From 52d7a3ed9170da1248cadbbc746c32dd7c34c568 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:48 +0100 +Subject: [PATCH 05/34] block: make bdrv_delete() static + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-4-git-send-email-famz@redhat.com> +Patchwork-id: 56765 +O-Subject: [RHEL-7 qemu-kvm PATCH 03/18] block: make bdrv_delete() static +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Manage BlockDriverState lifecycle with refcnt, so bdrv_delete() is no +longer public and should be called by bdrv_unref() if refcnt is +decreased to 0. + +This is an identical change because effectively, there's no multiple +reference of BDS now: no caller of bdrv_ref() yet, only bdrv_new() sets +bs->refcnt to 1, so all bdrv_unref() now actually delete the BDS. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4f6fd3491cf0f768b135ed2e242bd1d1d2a2efec) +Signed-off-by: Fam Zheng + +Conflicts: + block/backup.c + block/blkverify.c + block/vvfat.c + blockdev.c + hw/block/xen_disk.c + qemu-io.c + +All are contextual conflicts. We are doing a mechanical replacing here, +so simply use the downstream code except replace bdrv_delete with +bdrv_unref. + +Several more bdrv_delete's are converted in qemu-img.c, qemu-io.c and +block/vhdx.c. + +Signed-off-by: Fam Zheng +--- + block.c | 23 ++++++++++++----------- + block/blkverify.c | 4 ++-- + block/cow.c | 2 +- + block/iscsi.c | 2 +- + block/mirror.c | 2 +- + block/qcow.c | 2 +- + block/qcow2.c | 2 +- + block/qed.c | 2 +- + block/sheepdog.c | 6 +++--- + block/snapshot.c | 2 +- + block/stream.c | 2 +- + block/vhdx.c | 2 +- + block/vmdk.c | 10 +++++----- + block/vvfat.c | 4 ++-- + blockdev.c | 10 +++++----- + hw/block/xen_disk.c | 4 ++-- + include/block/block.h | 1 - + qemu-img.c | 31 +++++++++++++++---------------- + qemu-io.c | 6 +++--- + 19 files changed, 58 insertions(+), 59 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 23 ++++++++++++----------- + block/blkverify.c | 4 ++-- + block/cow.c | 2 +- + block/iscsi.c | 2 +- + block/mirror.c | 2 +- + block/qcow.c | 2 +- + block/qcow2.c | 2 +- + block/qed.c | 2 +- + block/sheepdog.c | 6 +++--- + block/snapshot.c | 2 +- + block/stream.c | 2 +- + block/vhdx.c | 2 +- + block/vmdk.c | 10 +++++----- + block/vvfat.c | 4 ++-- + blockdev.c | 10 +++++----- + hw/block/xen_disk.c | 4 ++-- + include/block/block.h | 1 - + qemu-img.c | 31 +++++++++++++++---------------- + qemu-io.c | 6 +++--- + 19 files changed, 58 insertions(+), 59 deletions(-) + +diff --git a/block.c b/block.c +index ddf29d0..b4e3ced 100644 +--- a/block.c ++++ b/block.c +@@ -918,7 +918,7 @@ fail: + if (!bs->drv) { + QDECREF(bs->options); + } +- bdrv_delete(bs); ++ bdrv_unref(bs); + return ret; + } + +@@ -972,7 +972,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) + *backing_filename ? backing_filename : NULL, options, + back_flags, back_drv, &local_err); + if (ret < 0) { +- bdrv_delete(bs->backing_hd); ++ bdrv_unref(bs->backing_hd); + bs->backing_hd = NULL; + bs->open_flags |= BDRV_O_NO_BACKING; + error_propagate(errp, local_err); +@@ -1051,12 +1051,12 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + bs1 = bdrv_new(""); + ret = bdrv_open(bs1, filename, NULL, 0, drv, &local_err); + if (ret < 0) { +- bdrv_delete(bs1); ++ bdrv_unref(bs1); + goto fail; + } + total_size = bdrv_getlength(bs1) & BDRV_SECTOR_MASK; + +- bdrv_delete(bs1); ++ bdrv_unref(bs1); + + ret = get_tmp_filename(tmp_filename, sizeof(tmp_filename)); + if (ret < 0) { +@@ -1137,7 +1137,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + } + + if (bs->file != file) { +- bdrv_delete(file); ++ bdrv_unref(file); + file = NULL; + } + +@@ -1177,7 +1177,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options, + + unlink_and_fail: + if (file != NULL) { +- bdrv_delete(file); ++ bdrv_unref(file); + } + if (bs->is_temporary) { + unlink(filename); +@@ -1444,7 +1444,7 @@ void bdrv_close(BlockDriverState *bs) + + if (bs->drv) { + if (bs->backing_hd) { +- bdrv_delete(bs->backing_hd); ++ bdrv_unref(bs->backing_hd); + bs->backing_hd = NULL; + } + bs->drv->bdrv_close(bs); +@@ -1469,7 +1469,7 @@ void bdrv_close(BlockDriverState *bs) + bs->options = NULL; + + if (bs->file != NULL) { +- bdrv_delete(bs->file); ++ bdrv_unref(bs->file); + bs->file = NULL; + } + } +@@ -1667,11 +1667,12 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top) + bs_new->drv ? bs_new->drv->format_name : ""); + } + +-void bdrv_delete(BlockDriverState *bs) ++static void bdrv_delete(BlockDriverState *bs) + { + assert(!bs->dev); + assert(!bs->job); + assert(!bs->in_use); ++ assert(!bs->refcnt); + + /* remove from list, if necessary */ + bdrv_make_anon(bs); +@@ -2247,7 +2248,7 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, + QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) { + /* so that bdrv_close() does not recursively close the chain */ + intermediate_state->bs->backing_hd = NULL; +- bdrv_delete(intermediate_state->bs); ++ bdrv_unref(intermediate_state->bs); + } + ret = 0; + +@@ -4989,7 +4990,7 @@ out: + free_option_parameters(param); + + if (bs) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); +diff --git a/block/blkverify.c b/block/blkverify.c +index 92a452d..4ff7688 100644 +--- a/block/blkverify.c ++++ b/block/blkverify.c +@@ -159,7 +159,7 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags, + ret = bdrv_open(s->test_file, filename, NULL, flags, NULL, &local_err); + if (ret < 0) { + error_propagate(errp, local_err); +- bdrv_delete(s->test_file); ++ bdrv_unref(s->test_file); + s->test_file = NULL; + goto fail; + } +@@ -173,7 +173,7 @@ static void blkverify_close(BlockDriverState *bs) + { + BDRVBlkverifyState *s = bs->opaque; + +- bdrv_delete(s->test_file); ++ bdrv_unref(s->test_file); + s->test_file = NULL; + } + +diff --git a/block/cow.c b/block/cow.c +index cb9a3b0..909c3e7 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -360,7 +360,7 @@ static int cow_create(const char *filename, QEMUOptionParameter *options, + } + + exit: +- bdrv_delete(cow_bs); ++ bdrv_unref(cow_bs); + return ret; + } + +diff --git a/block/iscsi.c b/block/iscsi.c +index fce909b..fa6f7c4 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1576,7 +1576,7 @@ out: + } + g_free(bs->opaque); + bs->opaque = NULL; +- bdrv_delete(bs); ++ bdrv_unref(bs); + return ret; + } + +diff --git a/block/mirror.c b/block/mirror.c +index 6fa733e..6843e70 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -480,7 +480,7 @@ immediate_exit: + bdrv_swap(s->target, s->common.bs); + } + bdrv_close(s->target); +- bdrv_delete(s->target); ++ bdrv_unref(s->target); + block_job_completed(&s->common, ret); + } + +diff --git a/block/qcow.c b/block/qcow.c +index 6bc2358..c470e05 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -765,7 +765,7 @@ static int qcow_create(const char *filename, QEMUOptionParameter *options, + g_free(tmp); + ret = 0; + exit: +- bdrv_delete(qcow_bs); ++ bdrv_unref(qcow_bs); + return ret; + } + +diff --git a/block/qcow2.c b/block/qcow2.c +index 3f7fd51..f6307af 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1591,7 +1591,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + + ret = 0; + out: +- bdrv_delete(bs); ++ bdrv_unref(bs); + return ret; + } + +diff --git a/block/qed.c b/block/qed.c +index 0805ba3..fb8ccd5 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -607,7 +607,7 @@ static int qed_create(const char *filename, uint32_t cluster_size, + ret = 0; /* success */ + out: + g_free(l1_table); +- bdrv_delete(bs); ++ bdrv_unref(bs); + return ret; + } + +diff --git a/block/sheepdog.c b/block/sheepdog.c +index 09203ad..b3a2ae8 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -1451,7 +1451,7 @@ static int sd_prealloc(const char *filename) + } + out: + if (bs) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + g_free(buf); + +@@ -1534,13 +1534,13 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, + + if (!is_snapshot(&s->inode)) { + error_report("cannot clone from a non snapshot vdi"); +- bdrv_delete(bs); ++ bdrv_unref(bs); + ret = -EINVAL; + goto out; + } + + base_vid = s->inode.vdi_id; +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + + ret = do_sd_create(s, vdi, vdi_size, base_vid, &vid, 0); +diff --git a/block/snapshot.c b/block/snapshot.c +index 51b4b96..b2d7681 100644 +--- a/block/snapshot.c ++++ b/block/snapshot.c +@@ -99,7 +99,7 @@ int bdrv_snapshot_goto(BlockDriverState *bs, + ret = bdrv_snapshot_goto(bs->file, snapshot_id); + open_ret = drv->bdrv_open(bs, NULL, bs->open_flags, NULL); + if (open_ret < 0) { +- bdrv_delete(bs->file); ++ bdrv_unref(bs->file); + bs->drv = NULL; + return open_ret; + } +diff --git a/block/stream.c b/block/stream.c +index cbae815..82fb179 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -68,7 +68,7 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base, + unused = intermediate; + intermediate = intermediate->backing_hd; + unused->backing_hd = NULL; +- bdrv_delete(unused); ++ bdrv_unref(unused); + } + top->backing_hd = base; + } +diff --git a/block/vhdx.c b/block/vhdx.c +index 8b1a5c9..1995778 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -1847,7 +1847,7 @@ static int vhdx_create(const char *filename, QEMUOptionParameter *options, + + + delete_and_exit: +- bdrv_delete(bs); ++ bdrv_unref(bs); + exit: + g_free(creator); + return ret; +diff --git a/block/vmdk.c b/block/vmdk.c +index 8662016..a1994a4 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -219,7 +219,7 @@ static void vmdk_free_extents(BlockDriverState *bs) + g_free(e->l1_backup_table); + g_free(e->type); + if (e->file != bs->file) { +- bdrv_delete(e->file); ++ bdrv_unref(e->file); + } + } + g_free(s->extents); +@@ -784,7 +784,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + /* SPARSE extent and VMFSSPARSE extent are both "COWD" sparse file*/ + ret = vmdk_open_sparse(bs, extent_file, bs->open_flags, errp); + if (ret) { +- bdrv_delete(extent_file); ++ bdrv_unref(extent_file); + return ret; + } + extent = &s->extents[s->num_extents - 1]; +@@ -1703,15 +1703,15 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + BlockDriverState *bs = bdrv_new(""); + ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp); + if (ret != 0) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + return ret; + } + if (strcmp(bs->drv->format_name, "vmdk")) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + return -EINVAL; + } + parent_cid = vmdk_read_cid(bs, 0); +- bdrv_delete(bs); ++ bdrv_unref(bs); + snprintf(parent_desc_line, sizeof(parent_desc_line), + "parentFileNameHint=\"%s\"", backing_file); + } +diff --git a/block/vvfat.c b/block/vvfat.c +index 2c7970d..3ddaa0b 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2896,7 +2896,7 @@ static int write_target_commit(BlockDriverState *bs, int64_t sector_num, + + static void write_target_close(BlockDriverState *bs) { + BDRVVVFATState* s = *((BDRVVVFATState**) bs->opaque); +- bdrv_delete(s->qcow); ++ bdrv_unref(s->qcow); + g_free(s->qcow_filename); + } + +@@ -2943,7 +2943,7 @@ static int enable_write_target(BDRVVVFATState *s) + if (ret < 0) { + qerror_report_err(local_err); + error_free(local_err); +- bdrv_delete(s->qcow); ++ bdrv_unref(s->qcow); + goto err; + } + +diff --git a/blockdev.c b/blockdev.c +index 93fb339..564262a 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -221,7 +221,7 @@ static void drive_uninit(DriveInfo *dinfo) + qemu_opts_del(dinfo->opts); + } + +- bdrv_delete(dinfo->bdrv); ++ bdrv_unref(dinfo->bdrv); + g_free(dinfo->id); + QTAILQ_REMOVE(&drives, dinfo, next); + g_free(dinfo->serial); +@@ -531,7 +531,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + return dinfo; + + err: +- bdrv_delete(dinfo->bdrv); ++ bdrv_unref(dinfo->bdrv); + g_free(dinfo->id); + QTAILQ_REMOVE(&drives, dinfo, next); + g_free(dinfo); +@@ -1086,7 +1086,7 @@ static void external_snapshot_abort(BlkTransactionStates *common) + ExternalSnapshotStates *states = + DO_UPCAST(ExternalSnapshotStates, common, common); + if (states->new_bs) { +- bdrv_delete(states->new_bs); ++ bdrv_unref(states->new_bs); + } + } + +@@ -1645,7 +1645,7 @@ void qmp_drive_mirror(const char *device, const char *target, + ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv, + &local_err); + if (ret < 0) { +- bdrv_delete(target_bs); ++ bdrv_unref(target_bs); + error_propagate(errp, local_err); + return; + } +@@ -1654,7 +1654,7 @@ void qmp_drive_mirror(const char *device, const char *target, + on_source_error, on_target_error, + block_job_cb, bs, &local_err); + if (local_err != NULL) { +- bdrv_delete(target_bs); ++ bdrv_unref(target_bs); + error_propagate(errp, local_err); + return; + } +diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c +index 498f2e9..138ab94 100644 +--- a/hw/block/xen_disk.c ++++ b/hw/block/xen_disk.c +@@ -806,7 +806,7 @@ static int blk_connect(struct XenDevice *xendev) + xen_be_printf(&blkdev->xendev, 0, "error: %s\n", + error_get_pretty(local_err)); + error_free(local_err); +- bdrv_delete(blkdev->bs); ++ bdrv_unref(blkdev->bs); + blkdev->bs = NULL; + } + } +@@ -924,7 +924,7 @@ static void blk_disconnect(struct XenDevice *xendev) + /* close/delete only if we created it ourself */ + bdrv_close(blkdev->bs); + bdrv_detach_dev(blkdev->bs, blkdev); +- bdrv_delete(blkdev->bs); ++ bdrv_unref(blkdev->bs); + } + blkdev->bs = NULL; + } +diff --git a/include/block/block.h b/include/block/block.h +index a3b7395..d20d63e 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -182,7 +182,6 @@ BlockDriverState *bdrv_new(const char *device_name); + void bdrv_make_anon(BlockDriverState *bs); + void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old); + void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top); +-void bdrv_delete(BlockDriverState *bs); + int bdrv_parse_cache_flags(const char *mode, int *flags); + int bdrv_parse_discard_flags(const char *mode, int *flags); + int bdrv_file_open(BlockDriverState **pbs, const char *filename, +diff --git a/qemu-img.c b/qemu-img.c +index f0f70e4..bc48dc1 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -305,7 +305,7 @@ static BlockDriverState *bdrv_new_open(const char *filename, + return bs; + fail: + if (bs) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + return NULL; + } +@@ -658,7 +658,7 @@ static int img_check(int argc, char **argv) + + fail: + qapi_free_ImageCheck(check); +- bdrv_delete(bs); ++ bdrv_unref(bs); + + return ret; + } +@@ -728,7 +728,7 @@ static int img_commit(int argc, char **argv) + break; + } + +- bdrv_delete(bs); ++ bdrv_unref(bs); + if (ret) { + return 1; + } +@@ -1110,11 +1110,11 @@ static int img_compare(int argc, char **argv) + ret = 0; + + out: +- bdrv_delete(bs2); ++ bdrv_unref(bs2); + qemu_vfree(buf1); + qemu_vfree(buf2); + out2: +- bdrv_delete(bs1); ++ bdrv_unref(bs1); + out3: + qemu_progress_end(); + return ret; +@@ -1595,12 +1595,12 @@ out: + free_option_parameters(param); + qemu_vfree(buf); + if (out_bs) { +- bdrv_delete(out_bs); ++ bdrv_unref(out_bs); + } + if (bs) { + for (bs_i = 0; bs_i < bs_n; bs_i++) { + if (bs[bs_i]) { +- bdrv_delete(bs[bs_i]); ++ bdrv_unref(bs[bs_i]); + } + } + g_free(bs); +@@ -1738,7 +1738,7 @@ static ImageInfoList *collect_image_info_list(const char *filename, + *last = elem; + last = &elem->next; + +- bdrv_delete(bs); ++ bdrv_unref(bs); + + filename = fmt = NULL; + if (chain) { +@@ -2024,8 +2024,7 @@ static int img_map(int argc, char **argv) + dump_map_entry(output_format, &curr, NULL); + + out: +- bdrv_close(bs); +- bdrv_delete(bs); ++ bdrv_unref(bs); + return ret < 0; + } + +@@ -2144,7 +2143,7 @@ static int img_snapshot(int argc, char **argv) + } + + /* Cleanup */ +- bdrv_delete(bs); ++ bdrv_unref(bs); + if (ret) { + return 1; + } +@@ -2428,14 +2427,14 @@ out: + /* Cleanup */ + if (!unsafe) { + if (bs_old_backing != NULL) { +- bdrv_delete(bs_old_backing); ++ bdrv_unref(bs_old_backing); + } + if (bs_new_backing != NULL) { +- bdrv_delete(bs_new_backing); ++ bdrv_unref(bs_new_backing); + } + } + +- bdrv_delete(bs); ++ bdrv_unref(bs); + if (ret) { + return 1; + } +@@ -2558,7 +2557,7 @@ static int img_resize(int argc, char **argv) + } + out: + if (bs) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + if (ret) { + return 1; +@@ -2640,7 +2639,7 @@ static int img_amend(int argc, char **argv) + + out: + if (bs) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + free_option_parameters(create_options); + free_option_parameters(options_param); +diff --git a/qemu-io.c b/qemu-io.c +index 64b060c..7e258a5 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -1761,7 +1761,7 @@ static const cmdinfo_t abort_cmd = { + + static int close_f(int argc, char **argv) + { +- bdrv_delete(bs); ++ bdrv_unref(bs); + bs = NULL; + return 0; + } +@@ -1796,7 +1796,7 @@ static int openfile(char *name, int flags, int growable, QDict *opts) + fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, + error_get_pretty(local_err)); + error_free(local_err); +- bdrv_delete(bs); ++ bdrv_unref(bs); + bs = NULL; + return 1; + } +@@ -2072,7 +2072,7 @@ int main(int argc, char **argv) + bdrv_drain_all(); + + if (bs) { +- bdrv_delete(bs); ++ bdrv_unref(bs); + } + return 0; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-make-bdrv_has_zero_init-return-false-for-copy-.patch b/SOURCES/kvm-block-make-bdrv_has_zero_init-return-false-for-copy-.patch new file mode 100644 index 0000000..c6c0345 --- /dev/null +++ b/SOURCES/kvm-block-make-bdrv_has_zero_init-return-false-for-copy-.patch @@ -0,0 +1,69 @@ +From 455a0cc4e93815b2cd2741554076029f2c365e25 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:36 +0200 +Subject: [PATCH 11/81] block: make bdrv_has_zero_init return false for copy-on-write-images + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-12-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54994 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 11/26] block: make bdrv_has_zero_init return false for copy-on-write-images +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +This helps implementing is_allocated on top of get_block_status. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 11212d8fa08a4e5bd56bb4f6877f9a4c0439a02b) +--- + block.c | 5 +++++ + qemu-img.c | 9 +-------- + 2 files changed, 6 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 5 +++++ + qemu-img.c | 9 +-------- + 2 files changed, 6 insertions(+), 8 deletions(-) + +diff --git a/block.c b/block.c +index d838a3c..f5d6658 100644 +--- a/block.c ++++ b/block.c +@@ -2998,6 +2998,11 @@ int bdrv_has_zero_init(BlockDriverState *bs) + { + assert(bs->drv); + ++ /* If BS is a copy on write image, it is initialized to ++ the contents of the base image, which may not be zeroes. */ ++ if (bs->backing_hd) { ++ return 0; ++ } + if (bs->drv->bdrv_has_zero_init) { + return bs->drv->bdrv_has_zero_init(bs); + } +diff --git a/qemu-img.c b/qemu-img.c +index 71cbc59..a9aabd5 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1511,14 +1511,7 @@ static int img_convert(int argc, char **argv) + should add a specific call to have the info to go faster */ + buf1 = buf; + while (n > 0) { +- /* If the output image is being created as a copy on write image, +- copy all sectors even the ones containing only NUL bytes, +- because they may differ from the sectors in the base image. +- +- If the output is to a host device, we also write out +- sectors that are entirely 0, since whatever data was +- already there is garbage, not 0s. */ +- if (!has_zero_init || out_baseimg || ++ if (!has_zero_init || + is_allocated_sectors_min(buf1, n, &n1, min_sparse)) { + ret = bdrv_write(out_bs, sector_num, buf1, n1); + if (ret < 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-make-top-argument-to-block-commit-optional.patch b/SOURCES/kvm-block-make-top-argument-to-block-commit-optional.patch new file mode 100644 index 0000000..d78bbc8 --- /dev/null +++ b/SOURCES/kvm-block-make-top-argument-to-block-commit-optional.patch @@ -0,0 +1,201 @@ +From 2513477895b7fd9434a66be645dfeae5dc2eccb8 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:12 +0200 +Subject: [PATCH 09/11] block: make 'top' argument to block-commit optional + +Message-id: <1408552814-23031-6-git-send-email-eblake@redhat.com> +Patchwork-id: 60647 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 5/7] block: make 'top' argument to block-commit optional +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Jeff Cody + +Now that active layer block-commit is supported, the 'top' argument +no longer needs to be mandatory. + +Change it to optional, with the default being the active layer in the +device chain. + +[kwolf: Rebased and resolved conflict in tests/qemu-iotests/040] + +Reviewed-by: Eric Blake +Reviewed-by: Benoit Canet +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7676e2c597000eff3a7233b40cca768b358f9bc9) + +Conflicts: + qapi/block-core.json - downstream in qapi-schema.json still + tests/qemu-iotests/040 - context due to no common event handling + +Signed-off-by: Eric Blake +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 16 ++++++++++++++-- + qapi-schema.json | 7 ++++--- + qmp-commands.hx | 5 +++-- + tests/qemu-iotests/040 | 28 ++++++++++++++++++---------- + 4 files changed, 39 insertions(+), 17 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index aa5d0a6..107e27e 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1463,7 +1463,8 @@ void qmp_block_stream(const char *device, bool has_base, + } + + void qmp_block_commit(const char *device, +- bool has_base, const char *base, const char *top, ++ bool has_base, const char *base, ++ bool has_top, const char *top, + bool has_speed, int64_t speed, + Error **errp) + { +@@ -1478,6 +1479,11 @@ void qmp_block_commit(const char *device, + /* drain all i/o before commits */ + bdrv_drain_all(); + ++ /* Important Note: ++ * libvirt relies on the DeviceNotFound error class in order to probe for ++ * live commit feature versions; for this to work, we must make sure to ++ * perform the device lookup before any generic errors that may occur in a ++ * scenario in which all optional arguments are omitted. */ + bs = bdrv_find(device); + if (!bs) { + error_set(errp, QERR_DEVICE_NOT_FOUND, device); +@@ -1487,7 +1493,7 @@ void qmp_block_commit(const char *device, + /* default top_bs is the active layer */ + top_bs = bs; + +- if (top) { ++ if (has_top && top) { + if (strcmp(bs->filename, top) != 0) { + top_bs = bdrv_find_backing_image(bs, top); + } +@@ -1509,6 +1515,12 @@ void qmp_block_commit(const char *device, + return; + } + ++ /* Do not allow attempts to commit an image into itself */ ++ if (top_bs == base_bs) { ++ error_setg(errp, "cannot commit an image into itself"); ++ return; ++ } ++ + if (top_bs == bs) { + commit_active_start(bs, base_bs, speed, on_error, block_job_cb, + bs, &local_err); +diff --git a/qapi-schema.json b/qapi-schema.json +index 604ec69..18ab949 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1844,8 +1844,9 @@ + # @base: #optional The file name of the backing image to write data into. + # If not specified, this is the deepest backing image + # +-# @top: The file name of the backing image within the image chain, +-# which contains the topmost data to be committed down. ++# @top: #optional The file name of the backing image within the image chain, ++# which contains the topmost data to be committed down. If ++# not specified, this is the active layer. + # + # If top == base, that is an error. + # If top == active, the job will not be completed by itself, +@@ -1873,7 +1874,7 @@ + # + ## + { 'command': 'block-commit', +- 'data': { 'device': 'str', '*base': 'str', 'top': 'str', ++ 'data': { 'device': 'str', '*base': 'str', '*top': 'str', + '*speed': 'int' } } + + ## +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 405275c..f67121a 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1005,7 +1005,7 @@ EQMP + + { + .name = "block-commit", +- .args_type = "device:B,base:s?,top:s,speed:o?", ++ .args_type = "device:B,base:s?,top:s?,speed:o?", + .mhandler.cmd_new = qmp_marshal_input_block_commit, + }, + +@@ -1023,7 +1023,8 @@ Arguments: + If not specified, this is the deepest backing image + (json-string, optional) + - "top": The file name of the backing image within the image chain, +- which contains the topmost data to be committed down. ++ which contains the topmost data to be committed down. If ++ not specified, this is the active layer. (json-string, optional) + + If top == base, that is an error. + If top == active, the job will not be completed by itself, +diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040 +index cf80e0c..c5ab930 100755 +--- a/tests/qemu-iotests/040 ++++ b/tests/qemu-iotests/040 +@@ -63,11 +63,7 @@ class ImageCommitTestCase(iotests.QMPTestCase): + i = i + 512 + file.close() + +- def run_commit_test(self, top, base, need_ready=False): +- self.assert_no_active_commit() +- result = self.vm.qmp('block-commit', device='drive0', top=top, base=base) +- self.assert_qmp(result, 'return', {}) +- ++ def wait_for_complete(self, need_ready=False): + completed = False + ready = False + while not completed: +@@ -90,6 +86,18 @@ class ImageCommitTestCase(iotests.QMPTestCase): + self.assert_no_active_commit() + self.vm.shutdown() + ++ def run_commit_test(self, top, base, need_ready=False): ++ self.assert_no_active_commit() ++ result = self.vm.qmp('block-commit', device='drive0', top=top, base=base) ++ self.assert_qmp(result, 'return', {}) ++ self.wait_for_complete(need_ready) ++ ++ def run_default_commit_test(self): ++ self.assert_no_active_commit() ++ result = self.vm.qmp('block-commit', device='drive0') ++ self.assert_qmp(result, 'return', {}) ++ self.wait_for_complete() ++ + class TestSingleDrive(ImageCommitTestCase): + image_len = 1 * 1024 * 1024 + test_len = 1 * 1024 * 256 +@@ -141,17 +149,17 @@ class TestSingleDrive(ImageCommitTestCase): + self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed")) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed")) + ++ def test_top_is_default_active(self): ++ self.run_default_commit_test() ++ self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed")) ++ self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed")) ++ + def test_top_and_base_reversed(self): + self.assert_no_active_commit() + result = self.vm.qmp('block-commit', device='drive0', top='%s' % backing_img, base='%s' % mid_img) + self.assert_qmp(result, 'error/class', 'GenericError') + self.assert_qmp(result, 'error/desc', 'Base \'%s\' not found' % mid_img) + +- def test_top_omitted(self): +- self.assert_no_active_commit() +- result = self.vm.qmp('block-commit', device='drive0') +- self.assert_qmp(result, 'error/class', 'GenericError') +- self.assert_qmp(result, 'error/desc', "Parameter 'top' is missing") + + class TestRelativePaths(ImageCommitTestCase): + image_len = 1 * 1024 * 1024 +-- +1.7.1 + diff --git a/SOURCES/kvm-block-make-vdi-bounds-check-match-upstream.patch b/SOURCES/kvm-block-make-vdi-bounds-check-match-upstream.patch new file mode 100644 index 0000000..43f3737 --- /dev/null +++ b/SOURCES/kvm-block-make-vdi-bounds-check-match-upstream.patch @@ -0,0 +1,83 @@ +From 2f5fb1498fa48ea25f2d4155c9730001931bdef7 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:41 +0200 +Subject: [PATCH 03/20] block: make vdi bounds check match upstream + +Message-id: <0935a62fcd0e3cce1ed66aa79fc460804ed938c7.1410897407.git.jcody@redhat.com> +Patchwork-id: 61207 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 02/15] block: make vdi bounds check match upstream +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +There is a slight discrepancy between downstream, and upstream, +in a patch done for CVE-2014-0144. There is no difference in +functionality - the (earlier) downstream patch contained a redundant +'#define' that was removed upstream, and some upstream added error +messages and different error returns. + +Changing this to match upstream will make subsequent backports +easier. + +Downstream-only. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vdi.c | 15 ++++++++++----- + 1 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index 0457298..5e2fad5 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -120,11 +120,10 @@ typedef unsigned char uuid_t[16]; + + #define VDI_IS_ALLOCATED(X) ((X) < VDI_DISCARDED) + +-#define VDI_BLOCK_SIZE (1 * MiB) + /* max blocks in image is (0xffffffff / 4) */ + #define VDI_BLOCKS_IN_IMAGE_MAX 0x3fffffff + #define VDI_DISK_SIZE_MAX ((uint64_t)VDI_BLOCKS_IN_IMAGE_MAX * \ +- (uint64_t)VDI_BLOCK_SIZE) ++ (uint64_t)DEFAULT_CLUSTER_SIZE) + + #if !defined(CONFIG_UUID) + static inline void uuid_generate(uuid_t out) +@@ -392,7 +391,10 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + #endif + + if (header.disk_size > VDI_DISK_SIZE_MAX) { +- ret = -EINVAL; ++ error_setg(errp, "Unsupported VDI image size (size is 0x%" PRIx64 ++ ", max supported is 0x%" PRIx64 ")", ++ header.disk_size, VDI_DISK_SIZE_MAX); ++ ret = -ENOTSUP; + goto fail; + } + +@@ -428,7 +430,7 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + logout("unsupported sector size %u B\n", header.sector_size); + ret = -ENOTSUP; + goto fail; +- } else if (header.block_size != VDI_BLOCK_SIZE) { ++ } else if (header.block_size != DEFAULT_CLUSTER_SIZE) { + logout("unsupported block size %u B\n", header.block_size); + ret = -ENOTSUP; + goto fail; +@@ -698,7 +700,10 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + } + + if (bytes > VDI_DISK_SIZE_MAX) { +- result = -EINVAL; ++ result = -ENOTSUP; ++ error_setg(errp, "Unsupported VDI image size (size is 0x%" PRIx64 ++ ", max supported is 0x%" PRIx64 ")", ++ bytes, VDI_DISK_SIZE_MAX); + goto exit; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-migration-efficiently-encode-zero-blocks.patch b/SOURCES/kvm-block-migration-efficiently-encode-zero-blocks.patch new file mode 100644 index 0000000..3b5fa0f --- /dev/null +++ b/SOURCES/kvm-block-migration-efficiently-encode-zero-blocks.patch @@ -0,0 +1,183 @@ +From eb7381f07b22955557a2b7ea469c5bf5aa39281e Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:09 +0200 +Subject: [PATCH 14/25] block-migration: efficiently encode zero blocks + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-5-git-send-email-owasserm@redhat.com> +Patchwork-id: 54800 +O-Subject: [RHEL7.0 qemu-kvm v2 04/10] block-migration: efficiently encode zero blocks +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: Peter Lieven + +this patch adds a efficient encoding for zero blocks by +adding a new flag indicating a block is completely zero. + +additionally bdrv_write_zeros() is used at the destination +to efficiently write these zeroes. depending on the implementation +this avoids that the destination target gets fully provisioned. + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 323004a39d4d8d33c744a5b108f80bfe6402fca3) +Conflicts: + include/migration/migration.h + qapi-schema.json +--- + block-migration.c | 32 ++++++++++++++++++++++++++------ + include/migration/migration.h | 2 ++ + migration.c | 9 +++++++++ + qapi-schema.json | 8 +++++++- + 4 files changed, 44 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block-migration.c | 32 ++++++++++++++++++++++++++------ + include/migration/migration.h | 2 ++ + migration.c | 9 +++++++++ + qapi-schema.json | 8 +++++++- + 4 files changed, 44 insertions(+), 7 deletions(-) + +diff --git a/block-migration.c b/block-migration.c +index 2fd7699..f803f20 100644 +--- a/block-migration.c ++++ b/block-migration.c +@@ -29,6 +29,7 @@ + #define BLK_MIG_FLAG_DEVICE_BLOCK 0x01 + #define BLK_MIG_FLAG_EOS 0x02 + #define BLK_MIG_FLAG_PROGRESS 0x04 ++#define BLK_MIG_FLAG_ZERO_BLOCK 0x08 + + #define MAX_IS_ALLOCATED_SEARCH 65536 + +@@ -80,6 +81,7 @@ typedef struct BlkMigState { + int shared_base; + QSIMPLEQ_HEAD(bmds_list, BlkMigDevState) bmds_list; + int64_t total_sector_sum; ++ bool zero_blocks; + + /* Protected by lock. */ + QSIMPLEQ_HEAD(blk_list, BlkMigBlock) blk_list; +@@ -114,16 +116,30 @@ static void blk_mig_unlock(void) + static void blk_send(QEMUFile *f, BlkMigBlock * blk) + { + int len; ++ uint64_t flags = BLK_MIG_FLAG_DEVICE_BLOCK; ++ ++ if (block_mig_state.zero_blocks && ++ buffer_is_zero(blk->buf, BLOCK_SIZE)) { ++ flags |= BLK_MIG_FLAG_ZERO_BLOCK; ++ } + + /* sector number and flags */ + qemu_put_be64(f, (blk->sector << BDRV_SECTOR_BITS) +- | BLK_MIG_FLAG_DEVICE_BLOCK); ++ | flags); + + /* device name */ + len = strlen(blk->bmds->bs->device_name); + qemu_put_byte(f, len); + qemu_put_buffer(f, (uint8_t *)blk->bmds->bs->device_name, len); + ++ /* if a block is zero we need to flush here since the network ++ * bandwidth is now a lot higher than the storage device bandwidth. ++ * thus if we queue zero blocks we slow down the migration */ ++ if (flags & BLK_MIG_FLAG_ZERO_BLOCK) { ++ qemu_fflush(f); ++ return; ++ } ++ + qemu_put_buffer(f, blk->buf, BLOCK_SIZE); + } + +@@ -344,6 +360,7 @@ static void init_blk_migration(QEMUFile *f) + block_mig_state.total_sector_sum = 0; + block_mig_state.prev_progress = -1; + block_mig_state.bulk_completed = 0; ++ block_mig_state.zero_blocks = migrate_zero_blocks(); + + bdrv_iterate(init_blk_migration_it, NULL); + } +@@ -762,12 +779,15 @@ static int block_load(QEMUFile *f, void *opaque, int version_id) + nr_sectors = BDRV_SECTORS_PER_DIRTY_CHUNK; + } + +- buf = g_malloc(BLOCK_SIZE); +- +- qemu_get_buffer(f, buf, BLOCK_SIZE); +- ret = bdrv_write(bs, addr, buf, nr_sectors); ++ if (flags & BLK_MIG_FLAG_ZERO_BLOCK) { ++ ret = bdrv_write_zeroes(bs, addr, nr_sectors); ++ } else { ++ buf = g_malloc(BLOCK_SIZE); ++ qemu_get_buffer(f, buf, BLOCK_SIZE); ++ ret = bdrv_write(bs, addr, buf, nr_sectors); ++ g_free(buf); ++ } + +- g_free(buf); + if (ret < 0) { + return ret; + } +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 1fc2666..f1519dd 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -119,6 +119,8 @@ void migrate_add_blocker(Error *reason); + */ + void migrate_del_blocker(Error *reason); + ++bool migrate_zero_blocks(void); ++ + bool migrate_auto_converge(void); + + int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen, +diff --git a/migration.c b/migration.c +index 177fc22..cc0e649 100644 +--- a/migration.c ++++ b/migration.c +@@ -483,6 +483,15 @@ bool migrate_auto_converge(void) + return s->enabled_capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE]; + } + ++bool migrate_zero_blocks(void) ++{ ++ MigrationState *s; ++ ++ s = migrate_get_current(); ++ ++ return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS]; ++} ++ + int migrate_use_xbzrle(void) + { + MigrationState *s; +diff --git a/qapi-schema.json b/qapi-schema.json +index 3936337..a717fbf 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -605,10 +605,16 @@ + # @auto-converge: If enabled, QEMU will automatically throttle down the guest + # to speed up convergence of RAM migration. (since 1.6) + # ++# @zero-blocks: During storage migration encode blocks of zeroes efficiently. This ++# essentially saves 1MB of zeroes per block on the wire. Enabling requires ++# source and target VM to support this feature. To enable it is sufficient ++# to enable the capability on the source VM. The feature is disabled by ++# default. (since 1.6) ++# + # Since: 1.2 + ## + { 'enum': 'MigrationCapability', +- 'data': ['xbzrle', 'auto-converge'] } ++ 'data': ['xbzrle', 'auto-converge', 'zero-blocks'] } + + ## + # @MigrationCapabilityStatus +-- +1.7.1 + diff --git a/SOURCES/kvm-block-mirror_complete-use-error_setg_file_open.patch b/SOURCES/kvm-block-mirror_complete-use-error_setg_file_open.patch new file mode 100644 index 0000000..45acb01 --- /dev/null +++ b/SOURCES/kvm-block-mirror_complete-use-error_setg_file_open.patch @@ -0,0 +1,46 @@ +From 6793e07d618e99a30d8cc13cc53970f7cd5f0aa9 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:25 +0100 +Subject: [PATCH 06/29] block: mirror_complete(): use error_setg_file_open() + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-3-git-send-email-lersek@redhat.com> +Patchwork-id: 55192 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/8] block: mirror_complete(): use error_setg_file_open() +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Reviewed-by: Stefan Hajnoczi +Acked-by: Kevin Wolf +(cherry picked from commit dacc26aae5d291317a3277970a4f39a562939a78) +Signed-off-by: Laszlo Ersek +--- + block/mirror.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 8b07dec..1ae724f 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -512,7 +512,7 @@ static void mirror_complete(BlockJob *job, Error **errp) + char backing_filename[PATH_MAX]; + bdrv_get_full_backing_filename(s->target, backing_filename, + sizeof(backing_filename)); +- error_set(errp, QERR_OPEN_FILE_FAILED, backing_filename); ++ error_setg_file_open(errp, -ret, backing_filename); + return; + } + if (!s->synced) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-move-input-parsing-code-in-qmp_transaction.patch b/SOURCES/kvm-block-move-input-parsing-code-in-qmp_transaction.patch new file mode 100644 index 0000000..ce82d2d --- /dev/null +++ b/SOURCES/kvm-block-move-input-parsing-code-in-qmp_transaction.patch @@ -0,0 +1,112 @@ +From 80e1dce1b2b514b1553f6d02194110db0d330c2d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:53 +0200 +Subject: [PATCH 02/38] block: move input parsing code in qmp_transaction() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 54189 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 02/32] block: move input parsing code in qmp_transaction() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Wenchao Xia + +Bugzilla: 1005818 + +The code is moved into preparation function, and changed +a bit to tip more clearly what it is doing. + +Signed-off-by: Wenchao Xia +Reviewed-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit e2a31e8798e8246bed8ab396a71cd06bf95edde6) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 38 +++++++++++++++++++------------------- + 1 file changed, 19 insertions(+), 19 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 38 +++++++++++++++++++------------------- + 1 files changed, 19 insertions(+), 19 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 1bff654..9eab803 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -785,10 +785,7 @@ typedef struct BlkTransactionStates { + QSIMPLEQ_ENTRY(BlkTransactionStates) entry; + } BlkTransactionStates; + +-static void external_snapshot_prepare(const char *device, +- const char *format, +- const char *new_image_file, +- enum NewImageMode mode, ++static void external_snapshot_prepare(BlockdevAction *action, + BlkTransactionStates *states, + Error **errp) + { +@@ -796,7 +793,24 @@ static void external_snapshot_prepare(const char *device, + BlockDriver *drv; + int flags, ret; + Error *local_err = NULL; ++ const char *device; ++ const char *new_image_file; ++ const char *format = "qcow2"; ++ enum NewImageMode mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS; + ++ /* get parameters */ ++ g_assert(action->kind == BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC); ++ ++ device = action->blockdev_snapshot_sync->device; ++ new_image_file = action->blockdev_snapshot_sync->snapshot_file; ++ if (action->blockdev_snapshot_sync->has_format) { ++ format = action->blockdev_snapshot_sync->format; ++ } ++ if (action->blockdev_snapshot_sync->has_mode) { ++ mode = action->blockdev_snapshot_sync->mode; ++ } ++ ++ /* start processing */ + drv = bdrv_find_format(format); + if (!drv) { + error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); +@@ -877,10 +891,6 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + /* We don't do anything in this loop that commits us to the snapshot */ + while (NULL != dev_entry) { + BlockdevAction *dev_info = NULL; +- enum NewImageMode mode; +- const char *new_image_file; +- const char *device; +- const char *format = "qcow2"; + + dev_info = dev_entry->value; + dev_entry = dev_entry->next; +@@ -890,17 +900,7 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + + switch (dev_info->kind) { + case BLOCKDEV_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC: +- device = dev_info->blockdev_snapshot_sync->device; +- if (!dev_info->blockdev_snapshot_sync->has_mode) { +- dev_info->blockdev_snapshot_sync->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS; +- } +- new_image_file = dev_info->blockdev_snapshot_sync->snapshot_file; +- if (dev_info->blockdev_snapshot_sync->has_format) { +- format = dev_info->blockdev_snapshot_sync->format; +- } +- mode = dev_info->blockdev_snapshot_sync->mode; +- external_snapshot_prepare(device, format, new_image_file, +- mode, states, &local_err); ++ external_snapshot_prepare(dev_info, states, errp); + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); + goto delete_and_fail; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-move-qmp-and-info-dump-related-code-to-block-q.patch b/SOURCES/kvm-block-move-qmp-and-info-dump-related-code-to-block-q.patch new file mode 100644 index 0000000..ea8066a --- /dev/null +++ b/SOURCES/kvm-block-move-qmp-and-info-dump-related-code-to-block-q.patch @@ -0,0 +1,931 @@ +From 9bba35d273d094e206e29f5a328f21834a838471 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 7 Nov 2013 12:59:07 +0100 +Subject: [PATCH 68/87] block: move qmp and info dump related code to block/qapi.c + +RH-Author: Max Reitz +Message-id: <1383756824-6921-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 55557 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 02/21] block: move qmp and info dump related code to block/qapi.c +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Wenchao Xia + +BZ: 980771 + +This patch is a pure code move patch, except following modification: +1 get_human_readable_size() is changed to static function. +2 dump_human_image_info() is renamed to bdrv_image_info_dump(). +3 in qmp_query_block() and qmp_query_blockstats, use bdrv_next(bs) +instead of direct traverse of global array 'bdrv_states'. +4 collect_snapshots() and collect_image_info() are renamed, unused parameter +*fmt in collect_image_info() is removed. +5 code style fix. + +To avoid conflict and tip better, macro in header file is BLOCK_QAPI_H +instead of QAPI_H. Now block.h and snapshot.h are at the same level in +include path, block_int.h and qapi.h will both include them. + +Signed-off-by: Wenchao Xia +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit f364ec65b56b69c55b674cb6560aa1fbbea9e013) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block.c | 185 ----------------------- + block/Makefile.objs | 2 +- + block/qapi.c | 360 +++++++++++++++++++++++++++++++++++++++++++++ + include/block/block.h | 9 - + include/block/block_int.h | 1 + + include/block/qapi.h | 41 +++++ + qemu-img.c | 156 +------------------- + savevm.c | 1 + + 8 files changed, 408 insertions(+), 347 deletions(-) + create mode 100644 block/qapi.c + create mode 100644 include/block/qapi.h + +diff --git a/block.c b/block.c +index dccdb2c..e4885da 100644 +--- a/block.c ++++ b/block.c +@@ -3266,128 +3266,6 @@ int bdrv_is_allocated_above(BlockDriverState *top, + return 0; + } + +-BlockInfo *bdrv_query_info(BlockDriverState *bs) +-{ +- BlockInfo *info = g_malloc0(sizeof(*info)); +- info->device = g_strdup(bs->device_name); +- info->type = g_strdup("unknown"); +- info->locked = bdrv_dev_is_medium_locked(bs); +- info->removable = bdrv_dev_has_removable_media(bs); +- +- if (bdrv_dev_has_removable_media(bs)) { +- info->has_tray_open = true; +- info->tray_open = bdrv_dev_is_tray_open(bs); +- } +- +- if (bdrv_iostatus_is_enabled(bs)) { +- info->has_io_status = true; +- info->io_status = bs->iostatus; +- } +- +- if (bs->dirty_bitmap) { +- info->has_dirty = true; +- info->dirty = g_malloc0(sizeof(*info->dirty)); +- info->dirty->count = bdrv_get_dirty_count(bs) * BDRV_SECTOR_SIZE; +- info->dirty->granularity = +- ((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bs->dirty_bitmap)); +- } +- +- if (bs->drv) { +- info->has_inserted = true; +- info->inserted = g_malloc0(sizeof(*info->inserted)); +- info->inserted->file = g_strdup(bs->filename); +- info->inserted->ro = bs->read_only; +- info->inserted->drv = g_strdup(bs->drv->format_name); +- info->inserted->encrypted = bs->encrypted; +- info->inserted->encryption_key_missing = bdrv_key_required(bs); +- +- if (bs->backing_file[0]) { +- info->inserted->has_backing_file = true; +- info->inserted->backing_file = g_strdup(bs->backing_file); +- } +- +- info->inserted->backing_file_depth = bdrv_get_backing_file_depth(bs); +- +- if (bs->io_limits_enabled) { +- info->inserted->bps = +- bs->io_limits.bps[BLOCK_IO_LIMIT_TOTAL]; +- info->inserted->bps_rd = +- bs->io_limits.bps[BLOCK_IO_LIMIT_READ]; +- info->inserted->bps_wr = +- bs->io_limits.bps[BLOCK_IO_LIMIT_WRITE]; +- info->inserted->iops = +- bs->io_limits.iops[BLOCK_IO_LIMIT_TOTAL]; +- info->inserted->iops_rd = +- bs->io_limits.iops[BLOCK_IO_LIMIT_READ]; +- info->inserted->iops_wr = +- bs->io_limits.iops[BLOCK_IO_LIMIT_WRITE]; +- } +- } +- return info; +-} +- +-BlockInfoList *qmp_query_block(Error **errp) +-{ +- BlockInfoList *head = NULL, **p_next = &head; +- BlockDriverState *bs; +- +- QTAILQ_FOREACH(bs, &bdrv_states, list) { +- BlockInfoList *info = g_malloc0(sizeof(*info)); +- info->value = bdrv_query_info(bs); +- +- *p_next = info; +- p_next = &info->next; +- } +- +- return head; +-} +- +-BlockStats *bdrv_query_stats(const BlockDriverState *bs) +-{ +- BlockStats *s; +- +- s = g_malloc0(sizeof(*s)); +- +- if (bs->device_name[0]) { +- s->has_device = true; +- s->device = g_strdup(bs->device_name); +- } +- +- s->stats = g_malloc0(sizeof(*s->stats)); +- s->stats->rd_bytes = bs->nr_bytes[BDRV_ACCT_READ]; +- s->stats->wr_bytes = bs->nr_bytes[BDRV_ACCT_WRITE]; +- s->stats->rd_operations = bs->nr_ops[BDRV_ACCT_READ]; +- s->stats->wr_operations = bs->nr_ops[BDRV_ACCT_WRITE]; +- s->stats->wr_highest_offset = bs->wr_highest_sector * BDRV_SECTOR_SIZE; +- s->stats->flush_operations = bs->nr_ops[BDRV_ACCT_FLUSH]; +- s->stats->wr_total_time_ns = bs->total_time_ns[BDRV_ACCT_WRITE]; +- s->stats->rd_total_time_ns = bs->total_time_ns[BDRV_ACCT_READ]; +- s->stats->flush_total_time_ns = bs->total_time_ns[BDRV_ACCT_FLUSH]; +- +- if (bs->file) { +- s->has_parent = true; +- s->parent = bdrv_query_stats(bs->file); +- } +- +- return s; +-} +- +-BlockStatsList *qmp_query_blockstats(Error **errp) +-{ +- BlockStatsList *head = NULL, **p_next = &head; +- BlockDriverState *bs; +- +- QTAILQ_FOREACH(bs, &bdrv_states, list) { +- BlockStatsList *info = g_malloc0(sizeof(*info)); +- info->value = bdrv_query_stats(bs); +- +- *p_next = info; +- p_next = &info->next; +- } +- +- return head; +-} +- + const char *bdrv_get_encrypted_filename(BlockDriverState *bs) + { + if (bs->backing_hd && bs->backing_hd->encrypted) +@@ -3623,69 +3501,6 @@ BlockDriverState *bdrv_find_base(BlockDriverState *bs) + return curr_bs; + } + +-#define NB_SUFFIXES 4 +- +-char *get_human_readable_size(char *buf, int buf_size, int64_t size) +-{ +- static const char suffixes[NB_SUFFIXES] = "KMGT"; +- int64_t base; +- int i; +- +- if (size <= 999) { +- snprintf(buf, buf_size, "%" PRId64, size); +- } else { +- base = 1024; +- for(i = 0; i < NB_SUFFIXES; i++) { +- if (size < (10 * base)) { +- snprintf(buf, buf_size, "%0.1f%c", +- (double)size / base, +- suffixes[i]); +- break; +- } else if (size < (1000 * base) || i == (NB_SUFFIXES - 1)) { +- snprintf(buf, buf_size, "%" PRId64 "%c", +- ((size + (base >> 1)) / base), +- suffixes[i]); +- break; +- } +- base = base * 1024; +- } +- } +- return buf; +-} +- +-char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) +-{ +- char buf1[128], date_buf[128], clock_buf[128]; +- struct tm tm; +- time_t ti; +- int64_t secs; +- +- if (!sn) { +- snprintf(buf, buf_size, +- "%-10s%-20s%7s%20s%15s", +- "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); +- } else { +- ti = sn->date_sec; +- localtime_r(&ti, &tm); +- strftime(date_buf, sizeof(date_buf), +- "%Y-%m-%d %H:%M:%S", &tm); +- secs = sn->vm_clock_nsec / 1000000000; +- snprintf(clock_buf, sizeof(clock_buf), +- "%02d:%02d:%02d.%03d", +- (int)(secs / 3600), +- (int)((secs / 60) % 60), +- (int)(secs % 60), +- (int)((sn->vm_clock_nsec / 1000000) % 1000)); +- snprintf(buf, buf_size, +- "%-10s%-20s%7s%20s%15s", +- sn->id_str, sn->name, +- get_human_readable_size(buf1, sizeof(buf1), sn->vm_state_size), +- date_buf, +- clock_buf); +- } +- return buf; +-} +- + /**************************************************************/ + /* async I/Os */ + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 162f270..3db1839 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -4,7 +4,7 @@ block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o + block-obj-y += qed-check.o + block-obj-y += vhdx.o + block-obj-y += parallels.o blkdebug.o blkverify.o +-block-obj-y += snapshot.o ++block-obj-y += snapshot.o qapi.o + block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o + block-obj-$(CONFIG_POSIX) += raw-posix.o + block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o +diff --git a/block/qapi.c b/block/qapi.c +new file mode 100644 +index 0000000..155e77e +--- /dev/null ++++ b/block/qapi.c +@@ -0,0 +1,360 @@ ++/* ++ * Block layer qmp and info dump related functions ++ * ++ * Copyright (c) 2003-2008 Fabrice Bellard ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#include "block/qapi.h" ++#include "block/block_int.h" ++#include "qmp-commands.h" ++ ++void bdrv_collect_snapshots(BlockDriverState *bs , ImageInfo *info) ++{ ++ int i, sn_count; ++ QEMUSnapshotInfo *sn_tab = NULL; ++ SnapshotInfoList *info_list, *cur_item = NULL; ++ sn_count = bdrv_snapshot_list(bs, &sn_tab); ++ ++ for (i = 0; i < sn_count; i++) { ++ info->has_snapshots = true; ++ info_list = g_new0(SnapshotInfoList, 1); ++ ++ info_list->value = g_new0(SnapshotInfo, 1); ++ info_list->value->id = g_strdup(sn_tab[i].id_str); ++ info_list->value->name = g_strdup(sn_tab[i].name); ++ info_list->value->vm_state_size = sn_tab[i].vm_state_size; ++ info_list->value->date_sec = sn_tab[i].date_sec; ++ info_list->value->date_nsec = sn_tab[i].date_nsec; ++ info_list->value->vm_clock_sec = sn_tab[i].vm_clock_nsec / 1000000000; ++ info_list->value->vm_clock_nsec = sn_tab[i].vm_clock_nsec % 1000000000; ++ ++ /* XXX: waiting for the qapi to support qemu-queue.h types */ ++ if (!cur_item) { ++ info->snapshots = cur_item = info_list; ++ } else { ++ cur_item->next = info_list; ++ cur_item = info_list; ++ } ++ ++ } ++ ++ g_free(sn_tab); ++} ++ ++void bdrv_collect_image_info(BlockDriverState *bs, ++ ImageInfo *info, ++ const char *filename) ++{ ++ uint64_t total_sectors; ++ char backing_filename[1024]; ++ char backing_filename2[1024]; ++ BlockDriverInfo bdi; ++ ++ bdrv_get_geometry(bs, &total_sectors); ++ ++ info->filename = g_strdup(filename); ++ info->format = g_strdup(bdrv_get_format_name(bs)); ++ info->virtual_size = total_sectors * 512; ++ info->actual_size = bdrv_get_allocated_file_size(bs); ++ info->has_actual_size = info->actual_size >= 0; ++ if (bdrv_is_encrypted(bs)) { ++ info->encrypted = true; ++ info->has_encrypted = true; ++ } ++ if (bdrv_get_info(bs, &bdi) >= 0) { ++ if (bdi.cluster_size != 0) { ++ info->cluster_size = bdi.cluster_size; ++ info->has_cluster_size = true; ++ } ++ info->dirty_flag = bdi.is_dirty; ++ info->has_dirty_flag = true; ++ } ++ bdrv_get_backing_filename(bs, backing_filename, sizeof(backing_filename)); ++ if (backing_filename[0] != '\0') { ++ info->backing_filename = g_strdup(backing_filename); ++ info->has_backing_filename = true; ++ bdrv_get_full_backing_filename(bs, backing_filename2, ++ sizeof(backing_filename2)); ++ ++ if (strcmp(backing_filename, backing_filename2) != 0) { ++ info->full_backing_filename = ++ g_strdup(backing_filename2); ++ info->has_full_backing_filename = true; ++ } ++ ++ if (bs->backing_format[0]) { ++ info->backing_filename_format = g_strdup(bs->backing_format); ++ info->has_backing_filename_format = true; ++ } ++ } ++} ++ ++BlockInfo *bdrv_query_info(BlockDriverState *bs) ++{ ++ BlockInfo *info = g_malloc0(sizeof(*info)); ++ info->device = g_strdup(bs->device_name); ++ info->type = g_strdup("unknown"); ++ info->locked = bdrv_dev_is_medium_locked(bs); ++ info->removable = bdrv_dev_has_removable_media(bs); ++ ++ if (bdrv_dev_has_removable_media(bs)) { ++ info->has_tray_open = true; ++ info->tray_open = bdrv_dev_is_tray_open(bs); ++ } ++ ++ if (bdrv_iostatus_is_enabled(bs)) { ++ info->has_io_status = true; ++ info->io_status = bs->iostatus; ++ } ++ ++ if (bs->dirty_bitmap) { ++ info->has_dirty = true; ++ info->dirty = g_malloc0(sizeof(*info->dirty)); ++ info->dirty->count = bdrv_get_dirty_count(bs) * BDRV_SECTOR_SIZE; ++ info->dirty->granularity = ++ ((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bs->dirty_bitmap)); ++ } ++ ++ if (bs->drv) { ++ info->has_inserted = true; ++ info->inserted = g_malloc0(sizeof(*info->inserted)); ++ info->inserted->file = g_strdup(bs->filename); ++ info->inserted->ro = bs->read_only; ++ info->inserted->drv = g_strdup(bs->drv->format_name); ++ info->inserted->encrypted = bs->encrypted; ++ info->inserted->encryption_key_missing = bdrv_key_required(bs); ++ ++ if (bs->backing_file[0]) { ++ info->inserted->has_backing_file = true; ++ info->inserted->backing_file = g_strdup(bs->backing_file); ++ } ++ ++ info->inserted->backing_file_depth = bdrv_get_backing_file_depth(bs); ++ ++ if (bs->io_limits_enabled) { ++ info->inserted->bps = ++ bs->io_limits.bps[BLOCK_IO_LIMIT_TOTAL]; ++ info->inserted->bps_rd = ++ bs->io_limits.bps[BLOCK_IO_LIMIT_READ]; ++ info->inserted->bps_wr = ++ bs->io_limits.bps[BLOCK_IO_LIMIT_WRITE]; ++ info->inserted->iops = ++ bs->io_limits.iops[BLOCK_IO_LIMIT_TOTAL]; ++ info->inserted->iops_rd = ++ bs->io_limits.iops[BLOCK_IO_LIMIT_READ]; ++ info->inserted->iops_wr = ++ bs->io_limits.iops[BLOCK_IO_LIMIT_WRITE]; ++ } ++ } ++ return info; ++} ++ ++BlockStats *bdrv_query_stats(const BlockDriverState *bs) ++{ ++ BlockStats *s; ++ ++ s = g_malloc0(sizeof(*s)); ++ ++ if (bs->device_name[0]) { ++ s->has_device = true; ++ s->device = g_strdup(bs->device_name); ++ } ++ ++ s->stats = g_malloc0(sizeof(*s->stats)); ++ s->stats->rd_bytes = bs->nr_bytes[BDRV_ACCT_READ]; ++ s->stats->wr_bytes = bs->nr_bytes[BDRV_ACCT_WRITE]; ++ s->stats->rd_operations = bs->nr_ops[BDRV_ACCT_READ]; ++ s->stats->wr_operations = bs->nr_ops[BDRV_ACCT_WRITE]; ++ s->stats->wr_highest_offset = bs->wr_highest_sector * BDRV_SECTOR_SIZE; ++ s->stats->flush_operations = bs->nr_ops[BDRV_ACCT_FLUSH]; ++ s->stats->wr_total_time_ns = bs->total_time_ns[BDRV_ACCT_WRITE]; ++ s->stats->rd_total_time_ns = bs->total_time_ns[BDRV_ACCT_READ]; ++ s->stats->flush_total_time_ns = bs->total_time_ns[BDRV_ACCT_FLUSH]; ++ ++ if (bs->file) { ++ s->has_parent = true; ++ s->parent = bdrv_query_stats(bs->file); ++ } ++ ++ return s; ++} ++ ++BlockInfoList *qmp_query_block(Error **errp) ++{ ++ BlockInfoList *head = NULL, **p_next = &head; ++ BlockDriverState *bs = NULL; ++ ++ while ((bs = bdrv_next(bs))) { ++ BlockInfoList *info = g_malloc0(sizeof(*info)); ++ info->value = bdrv_query_info(bs); ++ ++ *p_next = info; ++ p_next = &info->next; ++ } ++ ++ return head; ++} ++ ++BlockStatsList *qmp_query_blockstats(Error **errp) ++{ ++ BlockStatsList *head = NULL, **p_next = &head; ++ BlockDriverState *bs = NULL; ++ ++ while ((bs = bdrv_next(bs))) { ++ BlockStatsList *info = g_malloc0(sizeof(*info)); ++ info->value = bdrv_query_stats(bs); ++ ++ *p_next = info; ++ p_next = &info->next; ++ } ++ ++ return head; ++} ++ ++#define NB_SUFFIXES 4 ++ ++static char *get_human_readable_size(char *buf, int buf_size, int64_t size) ++{ ++ static const char suffixes[NB_SUFFIXES] = "KMGT"; ++ int64_t base; ++ int i; ++ ++ if (size <= 999) { ++ snprintf(buf, buf_size, "%" PRId64, size); ++ } else { ++ base = 1024; ++ for (i = 0; i < NB_SUFFIXES; i++) { ++ if (size < (10 * base)) { ++ snprintf(buf, buf_size, "%0.1f%c", ++ (double)size / base, ++ suffixes[i]); ++ break; ++ } else if (size < (1000 * base) || i == (NB_SUFFIXES - 1)) { ++ snprintf(buf, buf_size, "%" PRId64 "%c", ++ ((size + (base >> 1)) / base), ++ suffixes[i]); ++ break; ++ } ++ base = base * 1024; ++ } ++ } ++ return buf; ++} ++ ++char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) ++{ ++ char buf1[128], date_buf[128], clock_buf[128]; ++ struct tm tm; ++ time_t ti; ++ int64_t secs; ++ ++ if (!sn) { ++ snprintf(buf, buf_size, ++ "%-10s%-20s%7s%20s%15s", ++ "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); ++ } else { ++ ti = sn->date_sec; ++ localtime_r(&ti, &tm); ++ strftime(date_buf, sizeof(date_buf), ++ "%Y-%m-%d %H:%M:%S", &tm); ++ secs = sn->vm_clock_nsec / 1000000000; ++ snprintf(clock_buf, sizeof(clock_buf), ++ "%02d:%02d:%02d.%03d", ++ (int)(secs / 3600), ++ (int)((secs / 60) % 60), ++ (int)(secs % 60), ++ (int)((sn->vm_clock_nsec / 1000000) % 1000)); ++ snprintf(buf, buf_size, ++ "%-10s%-20s%7s%20s%15s", ++ sn->id_str, sn->name, ++ get_human_readable_size(buf1, sizeof(buf1), sn->vm_state_size), ++ date_buf, ++ clock_buf); ++ } ++ return buf; ++} ++ ++void bdrv_image_info_dump(ImageInfo *info) ++{ ++ char size_buf[128], dsize_buf[128]; ++ if (!info->has_actual_size) { ++ snprintf(dsize_buf, sizeof(dsize_buf), "unavailable"); ++ } else { ++ get_human_readable_size(dsize_buf, sizeof(dsize_buf), ++ info->actual_size); ++ } ++ get_human_readable_size(size_buf, sizeof(size_buf), info->virtual_size); ++ printf("image: %s\n" ++ "file format: %s\n" ++ "virtual size: %s (%" PRId64 " bytes)\n" ++ "disk size: %s\n", ++ info->filename, info->format, size_buf, ++ info->virtual_size, ++ dsize_buf); ++ ++ if (info->has_encrypted && info->encrypted) { ++ printf("encrypted: yes\n"); ++ } ++ ++ if (info->has_cluster_size) { ++ printf("cluster_size: %" PRId64 "\n", info->cluster_size); ++ } ++ ++ if (info->has_dirty_flag && info->dirty_flag) { ++ printf("cleanly shut down: no\n"); ++ } ++ ++ if (info->has_backing_filename) { ++ printf("backing file: %s", info->backing_filename); ++ if (info->has_full_backing_filename) { ++ printf(" (actual path: %s)", info->full_backing_filename); ++ } ++ putchar('\n'); ++ if (info->has_backing_filename_format) { ++ printf("backing file format: %s\n", info->backing_filename_format); ++ } ++ } ++ ++ if (info->has_snapshots) { ++ SnapshotInfoList *elem; ++ char buf[256]; ++ ++ printf("Snapshot list:\n"); ++ printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL)); ++ ++ /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but ++ * we convert to the block layer's native QEMUSnapshotInfo for now. ++ */ ++ for (elem = info->snapshots; elem; elem = elem->next) { ++ QEMUSnapshotInfo sn = { ++ .vm_state_size = elem->value->vm_state_size, ++ .date_sec = elem->value->date_sec, ++ .date_nsec = elem->value->date_nsec, ++ .vm_clock_nsec = elem->value->vm_clock_sec * 1000000000ULL + ++ elem->value->vm_clock_nsec, ++ }; ++ ++ pstrcpy(sn.id_str, sizeof(sn.id_str), elem->value->id); ++ pstrcpy(sn.name, sizeof(sn.name), elem->value->name); ++ printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), &sn)); ++ } ++ } ++} +diff --git a/include/block/block.h b/include/block/block.h +index fac1282..7695cae 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -7,11 +7,6 @@ + #include "block/coroutine.h" + #include "qapi/qmp/qobject.h" + #include "qapi-types.h" +-/* +- * snapshot.h is needed since bdrv_snapshot_dump(), it can be removed when the +- * function is moved to other file. +- */ +-#include "block/snapshot.h" + + /* block.c */ + typedef struct BlockDriver BlockDriver; +@@ -353,12 +348,8 @@ void bdrv_get_backing_filename(BlockDriverState *bs, + char *filename, int filename_size); + void bdrv_get_full_backing_filename(BlockDriverState *bs, + char *dest, size_t sz); +-BlockInfo *bdrv_query_info(BlockDriverState *s); +-BlockStats *bdrv_query_stats(const BlockDriverState *bs); + int bdrv_is_snapshot(BlockDriverState *bs); +-char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn); + +-char *get_human_readable_size(char *buf, int buf_size, int64_t size); + int path_is_absolute(const char *path); + void path_combine(char *dest, int dest_size, + const char *base_path, +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 696bbb9..9348238 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -33,6 +33,7 @@ + #include "qapi/qmp/qerror.h" + #include "monitor/monitor.h" + #include "qemu/hbitmap.h" ++#include "block/snapshot.h" + + #define BLOCK_FLAG_ENCRYPT 1 + #define BLOCK_FLAG_COMPAT6 4 +diff --git a/include/block/qapi.h b/include/block/qapi.h +new file mode 100644 +index 0000000..55d1848 +--- /dev/null ++++ b/include/block/qapi.h +@@ -0,0 +1,41 @@ ++/* ++ * Block layer qmp and info dump related functions ++ * ++ * Copyright (c) 2003-2008 Fabrice Bellard ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef BLOCK_QAPI_H ++#define BLOCK_QAPI_H ++ ++#include "qapi-types.h" ++#include "block/block.h" ++#include "block/snapshot.h" ++ ++void bdrv_collect_snapshots(BlockDriverState *bs , ImageInfo *info); ++void bdrv_collect_image_info(BlockDriverState *bs, ++ ImageInfo *info, ++ const char *filename); ++BlockInfo *bdrv_query_info(BlockDriverState *s); ++BlockStats *bdrv_query_stats(const BlockDriverState *bs); ++ ++char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn); ++void bdrv_image_info_dump(ImageInfo *info); ++#endif +diff --git a/qemu-img.c b/qemu-img.c +index 0f869f3..0bc084d 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -30,6 +30,7 @@ + #include "qemu/osdep.h" + #include "sysemu/sysemu.h" + #include "block/block_int.h" ++#include "block/qapi.h" + #include + #include + #include +@@ -1605,39 +1606,6 @@ static void dump_json_image_info_list(ImageInfoList *list) + QDECREF(str); + } + +-static void collect_snapshots(BlockDriverState *bs , ImageInfo *info) +-{ +- int i, sn_count; +- QEMUSnapshotInfo *sn_tab = NULL; +- SnapshotInfoList *info_list, *cur_item = NULL; +- sn_count = bdrv_snapshot_list(bs, &sn_tab); +- +- for (i = 0; i < sn_count; i++) { +- info->has_snapshots = true; +- info_list = g_new0(SnapshotInfoList, 1); +- +- info_list->value = g_new0(SnapshotInfo, 1); +- info_list->value->id = g_strdup(sn_tab[i].id_str); +- info_list->value->name = g_strdup(sn_tab[i].name); +- info_list->value->vm_state_size = sn_tab[i].vm_state_size; +- info_list->value->date_sec = sn_tab[i].date_sec; +- info_list->value->date_nsec = sn_tab[i].date_nsec; +- info_list->value->vm_clock_sec = sn_tab[i].vm_clock_nsec / 1000000000; +- info_list->value->vm_clock_nsec = sn_tab[i].vm_clock_nsec % 1000000000; +- +- /* XXX: waiting for the qapi to support qemu-queue.h types */ +- if (!cur_item) { +- info->snapshots = cur_item = info_list; +- } else { +- cur_item->next = info_list; +- cur_item = info_list; +- } +- +- } +- +- g_free(sn_tab); +-} +- + static void dump_json_image_info(ImageInfo *info) + { + Error *errp = NULL; +@@ -1655,122 +1623,6 @@ static void dump_json_image_info(ImageInfo *info) + QDECREF(str); + } + +-static void collect_image_info(BlockDriverState *bs, +- ImageInfo *info, +- const char *filename, +- const char *fmt) +-{ +- uint64_t total_sectors; +- char backing_filename[1024]; +- char backing_filename2[1024]; +- BlockDriverInfo bdi; +- +- bdrv_get_geometry(bs, &total_sectors); +- +- info->filename = g_strdup(filename); +- info->format = g_strdup(bdrv_get_format_name(bs)); +- info->virtual_size = total_sectors * 512; +- info->actual_size = bdrv_get_allocated_file_size(bs); +- info->has_actual_size = info->actual_size >= 0; +- if (bdrv_is_encrypted(bs)) { +- info->encrypted = true; +- info->has_encrypted = true; +- } +- if (bdrv_get_info(bs, &bdi) >= 0) { +- if (bdi.cluster_size != 0) { +- info->cluster_size = bdi.cluster_size; +- info->has_cluster_size = true; +- } +- info->dirty_flag = bdi.is_dirty; +- info->has_dirty_flag = true; +- } +- bdrv_get_backing_filename(bs, backing_filename, sizeof(backing_filename)); +- if (backing_filename[0] != '\0') { +- info->backing_filename = g_strdup(backing_filename); +- info->has_backing_filename = true; +- bdrv_get_full_backing_filename(bs, backing_filename2, +- sizeof(backing_filename2)); +- +- if (strcmp(backing_filename, backing_filename2) != 0) { +- info->full_backing_filename = +- g_strdup(backing_filename2); +- info->has_full_backing_filename = true; +- } +- +- if (bs->backing_format[0]) { +- info->backing_filename_format = g_strdup(bs->backing_format); +- info->has_backing_filename_format = true; +- } +- } +-} +- +-static void dump_human_image_info(ImageInfo *info) +-{ +- char size_buf[128], dsize_buf[128]; +- if (!info->has_actual_size) { +- snprintf(dsize_buf, sizeof(dsize_buf), "unavailable"); +- } else { +- get_human_readable_size(dsize_buf, sizeof(dsize_buf), +- info->actual_size); +- } +- get_human_readable_size(size_buf, sizeof(size_buf), info->virtual_size); +- printf("image: %s\n" +- "file format: %s\n" +- "virtual size: %s (%" PRId64 " bytes)\n" +- "disk size: %s\n", +- info->filename, info->format, size_buf, +- info->virtual_size, +- dsize_buf); +- +- if (info->has_encrypted && info->encrypted) { +- printf("encrypted: yes\n"); +- } +- +- if (info->has_cluster_size) { +- printf("cluster_size: %" PRId64 "\n", info->cluster_size); +- } +- +- if (info->has_dirty_flag && info->dirty_flag) { +- printf("cleanly shut down: no\n"); +- } +- +- if (info->has_backing_filename) { +- printf("backing file: %s", info->backing_filename); +- if (info->has_full_backing_filename) { +- printf(" (actual path: %s)", info->full_backing_filename); +- } +- putchar('\n'); +- if (info->has_backing_filename_format) { +- printf("backing file format: %s\n", info->backing_filename_format); +- } +- } +- +- if (info->has_snapshots) { +- SnapshotInfoList *elem; +- char buf[256]; +- +- printf("Snapshot list:\n"); +- printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL)); +- +- /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but +- * we convert to the block layer's native QEMUSnapshotInfo for now. +- */ +- for (elem = info->snapshots; elem; elem = elem->next) { +- QEMUSnapshotInfo sn = { +- .vm_state_size = elem->value->vm_state_size, +- .date_sec = elem->value->date_sec, +- .date_nsec = elem->value->date_nsec, +- .vm_clock_nsec = elem->value->vm_clock_sec * 1000000000ULL + +- elem->value->vm_clock_nsec, +- }; +- +- pstrcpy(sn.id_str, sizeof(sn.id_str), elem->value->id); +- pstrcpy(sn.name, sizeof(sn.name), elem->value->name); +- printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), &sn)); +- } +- } +-} +- + static void dump_human_image_info_list(ImageInfoList *list) + { + ImageInfoList *elem; +@@ -1782,7 +1634,7 @@ static void dump_human_image_info_list(ImageInfoList *list) + } + delim = true; + +- dump_human_image_info(elem->value); ++ bdrv_image_info_dump(elem->value); + } + } + +@@ -1832,8 +1684,8 @@ static ImageInfoList *collect_image_info_list(const char *filename, + } + + info = g_new0(ImageInfo, 1); +- collect_image_info(bs, info, filename, fmt); +- collect_snapshots(bs, info); ++ bdrv_collect_image_info(bs, info, filename); ++ bdrv_collect_snapshots(bs, info); + + elem = g_new0(ImageInfoList, 1); + elem->value = info; +diff --git a/savevm.c b/savevm.c +index 005bf35..f126bff 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -41,6 +41,7 @@ + #include "qemu/bitops.h" + #include "qemu/iov.h" + #include "block/snapshot.h" ++#include "block/qapi.h" + + #define SELF_ANNOUNCE_ROUNDS 5 + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-move-snapshot-code-in-block.c-to-block-snapsho.patch b/SOURCES/kvm-block-move-snapshot-code-in-block.c-to-block-snapsho.patch new file mode 100644 index 0000000..664aad6 --- /dev/null +++ b/SOURCES/kvm-block-move-snapshot-code-in-block.c-to-block-snapsho.patch @@ -0,0 +1,499 @@ +From 94c066bcc75fa2e57d1bc861a7a65f21891425fe Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:31:53 +0100 +Subject: [PATCH 02/87] block: move snapshot code in block.c to block/snapshot.c + +RH-Author: Max Reitz +Message-id: <1383604354-12743-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 55302 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 02/43] block: move snapshot code in block.c to block/snapshot.c +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Wenchao Xia + +BZ: 1026524 + +All snapshot related code, except bdrv_snapshot_dump() and +bdrv_is_snapshot(), is moved to block/snapshot.c. bdrv_snapshot_dump() +will be moved to another file later. bdrv_is_snapshot() is not related +with internal snapshot. It also fixes small code style errors reported +by check script. + +Signed-off-by: Wenchao Xia +Signed-off-by: Kevin Wolf +(cherry picked from commit de08c606f9ddafe647b6843e2b10a6d6030b0fc0) + +Signed-off-by: Max Reitz +--- + block.c | 100 ------------------------------ + block/Makefile.objs | 1 + + block/snapshot.c | 157 +++++++++++++++++++++++++++++++++++++++++++++++ + include/block/block.h | 26 ++------ + include/block/snapshot.h | 53 ++++++++++++++++ + savevm.c | 23 +------ + 6 files changed, 217 insertions(+), 143 deletions(-) + create mode 100644 block/snapshot.c + create mode 100644 include/block/snapshot.h + +Signed-off-by: Miroslav Rezanina +--- + block.c | 100 ----------------------------- + block/Makefile.objs | 1 + + block/snapshot.c | 157 ++++++++++++++++++++++++++++++++++++++++++++++ + include/block/block.h | 26 ++------ + include/block/snapshot.h | 53 ++++++++++++++++ + savevm.c | 23 +------- + 6 files changed, 217 insertions(+), 143 deletions(-) + create mode 100644 block/snapshot.c + create mode 100644 include/block/snapshot.h + +diff --git a/block.c b/block.c +index 84a3a8d..69b70d0 100644 +--- a/block.c ++++ b/block.c +@@ -3458,111 +3458,11 @@ bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag) + return false; + } + +-/**************************************************************/ +-/* handling of snapshots */ +- +-int bdrv_can_snapshot(BlockDriverState *bs) +-{ +- BlockDriver *drv = bs->drv; +- if (!drv || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) { +- return 0; +- } +- +- if (!drv->bdrv_snapshot_create) { +- if (bs->file != NULL) { +- return bdrv_can_snapshot(bs->file); +- } +- return 0; +- } +- +- return 1; +-} +- + int bdrv_is_snapshot(BlockDriverState *bs) + { + return !!(bs->open_flags & BDRV_O_SNAPSHOT); + } + +-int bdrv_snapshot_create(BlockDriverState *bs, +- QEMUSnapshotInfo *sn_info) +-{ +- BlockDriver *drv = bs->drv; +- if (!drv) +- return -ENOMEDIUM; +- if (drv->bdrv_snapshot_create) +- return drv->bdrv_snapshot_create(bs, sn_info); +- if (bs->file) +- return bdrv_snapshot_create(bs->file, sn_info); +- return -ENOTSUP; +-} +- +-int bdrv_snapshot_goto(BlockDriverState *bs, +- const char *snapshot_id) +-{ +- BlockDriver *drv = bs->drv; +- int ret, open_ret; +- +- if (!drv) +- return -ENOMEDIUM; +- if (drv->bdrv_snapshot_goto) +- return drv->bdrv_snapshot_goto(bs, snapshot_id); +- +- if (bs->file) { +- drv->bdrv_close(bs); +- ret = bdrv_snapshot_goto(bs->file, snapshot_id); +- open_ret = drv->bdrv_open(bs, NULL, bs->open_flags); +- if (open_ret < 0) { +- bdrv_delete(bs->file); +- bs->drv = NULL; +- return open_ret; +- } +- return ret; +- } +- +- return -ENOTSUP; +-} +- +-int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id) +-{ +- BlockDriver *drv = bs->drv; +- if (!drv) +- return -ENOMEDIUM; +- if (drv->bdrv_snapshot_delete) +- return drv->bdrv_snapshot_delete(bs, snapshot_id); +- if (bs->file) +- return bdrv_snapshot_delete(bs->file, snapshot_id); +- return -ENOTSUP; +-} +- +-int bdrv_snapshot_list(BlockDriverState *bs, +- QEMUSnapshotInfo **psn_info) +-{ +- BlockDriver *drv = bs->drv; +- if (!drv) +- return -ENOMEDIUM; +- if (drv->bdrv_snapshot_list) +- return drv->bdrv_snapshot_list(bs, psn_info); +- if (bs->file) +- return bdrv_snapshot_list(bs->file, psn_info); +- return -ENOTSUP; +-} +- +-int bdrv_snapshot_load_tmp(BlockDriverState *bs, +- const char *snapshot_name) +-{ +- BlockDriver *drv = bs->drv; +- if (!drv) { +- return -ENOMEDIUM; +- } +- if (!bs->read_only) { +- return -EINVAL; +- } +- if (drv->bdrv_snapshot_load_tmp) { +- return drv->bdrv_snapshot_load_tmp(bs, snapshot_name); +- } +- return -ENOTSUP; +-} +- + /* backing_file can either be relative, or absolute, or a protocol. If it is + * relative, it must be relative to the chain. So, passing in bs->filename + * from a BDS as backing_file should not be done, as that may be relative to +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 41a284b..162f270 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -4,6 +4,7 @@ block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o + block-obj-y += qed-check.o + block-obj-y += vhdx.o + block-obj-y += parallels.o blkdebug.o blkverify.o ++block-obj-y += snapshot.o + block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o + block-obj-$(CONFIG_POSIX) += raw-posix.o + block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o +diff --git a/block/snapshot.c b/block/snapshot.c +new file mode 100644 +index 0000000..6c6d9de +--- /dev/null ++++ b/block/snapshot.c +@@ -0,0 +1,157 @@ ++/* ++ * Block layer snapshot related functions ++ * ++ * Copyright (c) 2003-2008 Fabrice Bellard ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#include "block/snapshot.h" ++#include "block/block_int.h" ++ ++int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info, ++ const char *name) ++{ ++ QEMUSnapshotInfo *sn_tab, *sn; ++ int nb_sns, i, ret; ++ ++ ret = -ENOENT; ++ nb_sns = bdrv_snapshot_list(bs, &sn_tab); ++ if (nb_sns < 0) { ++ return ret; ++ } ++ for (i = 0; i < nb_sns; i++) { ++ sn = &sn_tab[i]; ++ if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) { ++ *sn_info = *sn; ++ ret = 0; ++ break; ++ } ++ } ++ g_free(sn_tab); ++ return ret; ++} ++ ++int bdrv_can_snapshot(BlockDriverState *bs) ++{ ++ BlockDriver *drv = bs->drv; ++ if (!drv || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) { ++ return 0; ++ } ++ ++ if (!drv->bdrv_snapshot_create) { ++ if (bs->file != NULL) { ++ return bdrv_can_snapshot(bs->file); ++ } ++ return 0; ++ } ++ ++ return 1; ++} ++ ++int bdrv_snapshot_create(BlockDriverState *bs, ++ QEMUSnapshotInfo *sn_info) ++{ ++ BlockDriver *drv = bs->drv; ++ if (!drv) { ++ return -ENOMEDIUM; ++ } ++ if (drv->bdrv_snapshot_create) { ++ return drv->bdrv_snapshot_create(bs, sn_info); ++ } ++ if (bs->file) { ++ return bdrv_snapshot_create(bs->file, sn_info); ++ } ++ return -ENOTSUP; ++} ++ ++int bdrv_snapshot_goto(BlockDriverState *bs, ++ const char *snapshot_id) ++{ ++ BlockDriver *drv = bs->drv; ++ int ret, open_ret; ++ ++ if (!drv) { ++ return -ENOMEDIUM; ++ } ++ if (drv->bdrv_snapshot_goto) { ++ return drv->bdrv_snapshot_goto(bs, snapshot_id); ++ } ++ ++ if (bs->file) { ++ drv->bdrv_close(bs); ++ ret = bdrv_snapshot_goto(bs->file, snapshot_id); ++ open_ret = drv->bdrv_open(bs, NULL, bs->open_flags); ++ if (open_ret < 0) { ++ bdrv_delete(bs->file); ++ bs->drv = NULL; ++ return open_ret; ++ } ++ return ret; ++ } ++ ++ return -ENOTSUP; ++} ++ ++int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id) ++{ ++ BlockDriver *drv = bs->drv; ++ if (!drv) { ++ return -ENOMEDIUM; ++ } ++ if (drv->bdrv_snapshot_delete) { ++ return drv->bdrv_snapshot_delete(bs, snapshot_id); ++ } ++ if (bs->file) { ++ return bdrv_snapshot_delete(bs->file, snapshot_id); ++ } ++ return -ENOTSUP; ++} ++ ++int bdrv_snapshot_list(BlockDriverState *bs, ++ QEMUSnapshotInfo **psn_info) ++{ ++ BlockDriver *drv = bs->drv; ++ if (!drv) { ++ return -ENOMEDIUM; ++ } ++ if (drv->bdrv_snapshot_list) { ++ return drv->bdrv_snapshot_list(bs, psn_info); ++ } ++ if (bs->file) { ++ return bdrv_snapshot_list(bs->file, psn_info); ++ } ++ return -ENOTSUP; ++} ++ ++int bdrv_snapshot_load_tmp(BlockDriverState *bs, ++ const char *snapshot_name) ++{ ++ BlockDriver *drv = bs->drv; ++ if (!drv) { ++ return -ENOMEDIUM; ++ } ++ if (!bs->read_only) { ++ return -EINVAL; ++ } ++ if (drv->bdrv_snapshot_load_tmp) { ++ return drv->bdrv_snapshot_load_tmp(bs, snapshot_name); ++ } ++ return -ENOTSUP; ++} +diff --git a/include/block/block.h b/include/block/block.h +index 3b3f40e..03ebc47 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -7,6 +7,11 @@ + #include "block/coroutine.h" + #include "qapi/qmp/qobject.h" + #include "qapi-types.h" ++/* ++ * snapshot.h is needed since bdrv_snapshot_dump(), it can be removed when the ++ * function is moved to other file. ++ */ ++#include "block/snapshot.h" + + /* block.c */ + typedef struct BlockDriver BlockDriver; +@@ -27,17 +32,6 @@ typedef struct BlockFragInfo { + uint64_t compressed_clusters; + } BlockFragInfo; + +-typedef struct QEMUSnapshotInfo { +- char id_str[128]; /* unique snapshot id */ +- /* the following fields are informative. They are not needed for +- the consistency of the snapshot */ +- char name[256]; /* user chosen name */ +- uint64_t vm_state_size; /* VM state info size */ +- uint32_t date_sec; /* UTC date of the snapshot */ +- uint32_t date_nsec; +- uint64_t vm_clock_nsec; /* VM clock relative to boot */ +-} QEMUSnapshotInfo; +- + /* Callbacks for block device models */ + typedef struct BlockDevOps { + /* +@@ -360,17 +354,7 @@ void bdrv_get_full_backing_filename(BlockDriverState *bs, + char *dest, size_t sz); + BlockInfo *bdrv_query_info(BlockDriverState *s); + BlockStats *bdrv_query_stats(const BlockDriverState *bs); +-int bdrv_can_snapshot(BlockDriverState *bs); + int bdrv_is_snapshot(BlockDriverState *bs); +-int bdrv_snapshot_create(BlockDriverState *bs, +- QEMUSnapshotInfo *sn_info); +-int bdrv_snapshot_goto(BlockDriverState *bs, +- const char *snapshot_id); +-int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id); +-int bdrv_snapshot_list(BlockDriverState *bs, +- QEMUSnapshotInfo **psn_info); +-int bdrv_snapshot_load_tmp(BlockDriverState *bs, +- const char *snapshot_name); + char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn); + + char *get_human_readable_size(char *buf, int buf_size, int64_t size); +diff --git a/include/block/snapshot.h b/include/block/snapshot.h +new file mode 100644 +index 0000000..eaf61f0 +--- /dev/null ++++ b/include/block/snapshot.h +@@ -0,0 +1,53 @@ ++/* ++ * Block layer snapshot related functions ++ * ++ * Copyright (c) 2003-2008 Fabrice Bellard ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SNAPSHOT_H ++#define SNAPSHOT_H ++ ++#include "qemu-common.h" ++ ++typedef struct QEMUSnapshotInfo { ++ char id_str[128]; /* unique snapshot id */ ++ /* the following fields are informative. They are not needed for ++ the consistency of the snapshot */ ++ char name[256]; /* user chosen name */ ++ uint64_t vm_state_size; /* VM state info size */ ++ uint32_t date_sec; /* UTC date of the snapshot */ ++ uint32_t date_nsec; ++ uint64_t vm_clock_nsec; /* VM clock relative to boot */ ++} QEMUSnapshotInfo; ++ ++int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info, ++ const char *name); ++int bdrv_can_snapshot(BlockDriverState *bs); ++int bdrv_snapshot_create(BlockDriverState *bs, ++ QEMUSnapshotInfo *sn_info); ++int bdrv_snapshot_goto(BlockDriverState *bs, ++ const char *snapshot_id); ++int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id); ++int bdrv_snapshot_list(BlockDriverState *bs, ++ QEMUSnapshotInfo **psn_info); ++int bdrv_snapshot_load_tmp(BlockDriverState *bs, ++ const char *snapshot_name); ++#endif +diff --git a/savevm.c b/savevm.c +index d9f3787..005bf35 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -40,6 +40,7 @@ + #include "trace.h" + #include "qemu/bitops.h" + #include "qemu/iov.h" ++#include "block/snapshot.h" + + #define SELF_ANNOUNCE_ROUNDS 5 + +@@ -2273,28 +2274,6 @@ static BlockDriverState *find_vmstate_bs(void) + return NULL; + } + +-static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info, +- const char *name) +-{ +- QEMUSnapshotInfo *sn_tab, *sn; +- int nb_sns, i, ret; +- +- ret = -ENOENT; +- nb_sns = bdrv_snapshot_list(bs, &sn_tab); +- if (nb_sns < 0) +- return ret; +- for(i = 0; i < nb_sns; i++) { +- sn = &sn_tab[i]; +- if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) { +- *sn_info = *sn; +- ret = 0; +- break; +- } +- } +- g_free(sn_tab); +- return ret; +-} +- + /* + * Deletes snapshots of a given name in all opened images. + */ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-optionally-disable-live-block-jobs.patch b/SOURCES/kvm-block-optionally-disable-live-block-jobs.patch new file mode 100644 index 0000000..564013a --- /dev/null +++ b/SOURCES/kvm-block-optionally-disable-live-block-jobs.patch @@ -0,0 +1,441 @@ +From 6270aec1271880bb5f12db46d40f51671c548f59 Mon Sep 17 00:00:00 2001 +From: Jeff Cody +Date: Thu, 7 Nov 2013 07:28:56 +0100 +Subject: [PATCH 57/81] block: optionally disable live block jobs + +RH-Author: Jeff Cody +Message-id: <5b15ff37a1f28a76e2b66c07df996d3a7c37d6e9.1383712781.git.jcody@redhat.com> +Patchwork-id: 55478 +O-Subject: [RHEL7 qemu-kvm PATCH 1/3] block: optionally disable live block jobs +Bugzilla: 987582 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Eric Blake +RH-Acked-by: Kevin Wolf + +This disables all block job operations that are part of the virt +differentiation features. + +This includes: + * live snapshots (single and group) + * block stream + * block commit + * block mirror + * block transactions + +All of these are disabled via the CONFIG_LIVE_BLOCK_OPS config option. + +In RHEL6, block job differentiation grew from live snapshot disablement, +which was used to encompass many operations that were not live +snapshots. CONFIG_LIVE_SNAPSHOTS was used for disablement of multiple +features. + +For RHEL7, let's use naming that is more accurate: +CONFIG_LIVE_BLOCK_OPS, to denote live block operations. + +RHEL and RHEV have different binaries, where RHEV qemu-kvm binaries +support live snapshots. + +The JSON files qapi-schema-rhel.json and qapi-schema-rhev.json are +automatically generated from the qapi-schema.json, by looking for +'_rhev_only' comments in the 'master' JSON file. + +For RHEL6, the JSON file had makeshift 'ifdef' statements. This was +changed to '_rhev_only' and '_end_rhev-only' blocks, because calling +them 'ifdef' was misleading - it did not depend on the actual state +of that variable itself. + +The Makefile variable RHEV_CONFIGS can be appended with additional +config items that may appear in the qapi-schema.json file. For +instance, to have features CONFIG_LIVE_BLOCK_OPS and CONFIG_SOME_FEATURE +both be RHEV only, set the variable like so: + +RHEV_CONFIGS = CONFIG_LIVE_BLOCK_OPS CONFIG_SOME_FEATURE + +RHEV_CONFIGS is then turned into a regex. For the example above, the +following pattern is matched when generating the RHEL/RHEV JSON files: +^#_rhev-only +(\bCONFIG_LIVE_BLOCK_OPS\b|\bCONFIG_SOME_FEATURE\b) + +Unlike the RHEL6 counterpart, this one uses original qmp-commands.h, +qapi-types.h, qapi-visit.c, etc.. filenames, simplifying the Makefile a +bit. + +BZ: 987582 + +The Makefile changes were derived from +RHEL6 commit bb5bd75dd86a6d05c9df4c2d271f98744d6c90b7, but this was not +a cherry-pick as the actual changes differed significantly. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + Makefile | 48 ++++++++++++++++++++++++++++++++++++++++++------ + block/Makefile.objs | 2 ++ + blockdev.c | 7 +++++++ + configure | 14 +++++++++++++- + hmp-commands.hx | 5 ++++- + hmp.c | 4 ++++ + qapi-schema.json | 6 ++++++ + qmp-commands.hx | 4 ++++ + 8 files changed, 82 insertions(+), 8 deletions(-) + +diff --git a/Makefile b/Makefile +index dcd31c6..45048a3 100644 +--- a/Makefile ++++ b/Makefile +@@ -2,6 +2,11 @@ + + # Always point to the root of the build tree (needs GNU make). + BUILD_DIR=$(CURDIR) ++# useful for passing ' ' and ',' into Makefile functional calls, ++# as these characters cannot be passed otherwise ++_empty := ++_space := $(_empty) $(_empty) ++_comma := , + + # All following code might depend on configuration variables + ifneq ($(wildcard config-host.mak),) +@@ -213,15 +218,45 @@ qga/qapi-generated/qga-qmp-commands.h qga/qapi-generated/qga-qmp-marshal.c :\ + $(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -o qga/qapi-generated -p "qga-" < $<, " GEN $@") + ++# if there are multiple config items to be RHEV-only, simply add it to ++# RHEV_CONFIGS, like so: RHEV_CONFIGS = CONFIG_LIVE_BLOCK_OPS CONFIG_SOME_FEATURE ++RHEV_CONFIGS = CONFIG_LIVE_BLOCK_OPS ++# Turn $(RHEV_CONFIGS) into a regex with logical OR, and whole word matching ++RHEV_ONLY_CONFIG_ITEMS = (\b$(subst $(_space),\b|\b,$(strip $(RHEV_CONFIGS)))\b) ++ ++GENERATED_JSON_FILES = $(addprefix $(SRC_PATH)/, qapi-schema-rhel.json qapi-schema-rhev.json) ++ ++$(SRC_PATH)/qapi-schema-rhev.json: $(SRC_PATH)/qapi-schema.json ++ -@echo "# THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY" > $@ ++ -@echo "#" >> $@ ++ $(call quiet-command,sed -r "/^#_rhev-only +$(RHEV_ONLY_CONFIG_ITEMS)/d;/^#_end-rhev-only/d" $< >> $@, " GEN $@") ++ ++$(SRC_PATH)/qapi-schema-rhel.json: $(SRC_PATH)/qapi-schema.json ++ -@echo "# THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY" > $@ ++ -@echo "#" >> $@ ++ $(call quiet-command,sed -r "/^#_rhev-only +$(RHEV_ONLY_CONFIG_ITEMS)/$(_comma)/^#_end-rhev-only/d" $< >> $@, " GEN $@") ++ ++ifeq ($(CONFIG_LIVE_BLOCK_OPS),y) + qapi-types.c qapi-types.h :\ +-$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) +- $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." < $<, " GEN $@") ++$(SRC_PATH)/qapi-schema-rhev.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." < $<, " GEN $@") + qapi-visit.c qapi-visit.h :\ +-$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py) +- $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." < $<, " GEN $@") ++$(SRC_PATH)/qapi-schema-rhev.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py) ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." < $<, " GEN $@") + qmp-commands.h qmp-marshal.c :\ +-$(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) +- $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, " GEN $@") ++$(SRC_PATH)/qapi-schema-rhev.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, " GEN $@") ++else ++qapi-types.c qapi-types.h :\ ++$(SRC_PATH)/qapi-schema-rhel.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." < $<, " GEN $@") ++qapi-visit.c qapi-visit.h :\ ++$(SRC_PATH)/qapi-schema-rhel.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py) ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." < $<, " GEN $@") ++qmp-commands.h qmp-marshal.c :\ ++$(SRC_PATH)/qapi-schema-rhel.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, " GEN $@") ++endif + + QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h) + $(qga-obj-y) qemu-ga.o: $(QGALIB_GEN) +@@ -243,6 +278,7 @@ clean: + rm -f trace/generated-tracers-dtrace.h* + rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp) + rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp) ++ rm -f $(foreach f,$(GENERATED_JSON_FILES),$(f) $(f)-timestamp) + rm -rf qapi-generated + rm -rf qga/qapi-generated + $(MAKE) -C tests/tcg clean +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 6b8d5ec..f355271 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -17,8 +17,10 @@ block-obj-$(CONFIG_GLUSTERFS) += gluster.o + block-obj-$(CONFIG_LIBSSH2) += ssh.o + endif + ++ifeq ($(CONFIG_LIVE_BLOCK_OPS),y) + common-obj-y += stream.o + common-obj-y += commit.o + common-obj-y += mirror.o ++endif + + $(obj)/curl.o: QEMU_CFLAGS+=$(CURL_CFLAGS) +diff --git a/blockdev.c b/blockdev.c +index f65aff4..6710f61 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -237,6 +237,8 @@ typedef struct { + DriveInfo *dinfo; + } DrivePutRefBH; + ++/* right now, this is only used from block_job_cb() */ ++#ifdef CONFIG_LIVE_BLOCK_OPS + static void drive_put_ref_bh(void *opaque) + { + DrivePutRefBH *s = opaque; +@@ -262,6 +264,7 @@ static void drive_put_ref_bh_schedule(DriveInfo *dinfo) + s->dinfo = dinfo; + qemu_bh_schedule(s->bh); + } ++#endif + + static int parse_block_error_action(const char *buf, bool is_read) + { +@@ -806,6 +809,7 @@ void do_commit(Monitor *mon, const QDict *qdict) + } + } + ++#ifdef CONFIG_LIVE_BLOCK_OPS + static void blockdev_do_action(int kind, void *data, Error **errp) + { + BlockdevAction action; +@@ -1051,6 +1055,7 @@ exit: + g_free(states); + } + } ++#endif + + + static void eject_device(BlockDriverState *bs, int force, Error **errp) +@@ -1286,6 +1291,7 @@ void qmp_block_resize(const char *device, int64_t size, Error **errp) + } + } + ++#ifdef CONFIG_LIVE_BLOCK_OPS + static void block_job_cb(void *opaque, int ret) + { + BlockDriverState *bs = opaque; +@@ -1547,6 +1553,7 @@ void qmp_drive_mirror(const char *device, const char *target, + */ + drive_get_ref(drive_get_by_blockdev(bs)); + } ++#endif + + static BlockJob *find_block_job(const char *device) + { +diff --git a/configure b/configure +index 4830f7e..9260d3c 100755 +--- a/configure ++++ b/configure +@@ -240,6 +240,7 @@ gtk="" + gtkabi="2.0" + tpm="no" + libssh2="" ++live_block_ops="yes" + + # parse CC options first + for opt do +@@ -927,7 +928,11 @@ for opt do + ;; + --enable-libssh2) libssh2="yes" + ;; +- *) echo "ERROR: unknown option $opt"; show_help="yes" ++ --disable-live-block-ops) live_block_ops="no" ++ ;; ++ --enable-live-block-ops) live_block_ops="yes" ++ ;; ++*) echo "ERROR: unknown option $opt"; show_help="yes" + ;; + esac + done +@@ -1195,6 +1200,8 @@ echo " --gcov=GCOV use specified gcov [$gcov_tool]" + echo " --enable-tpm enable TPM support" + echo " --disable-libssh2 disable ssh block device support" + echo " --enable-libssh2 enable ssh block device support" ++echo " --disable-live-block-ops disable live block operations support" ++echo " --enable-live-block-ops enable live block operations support" + echo "" + echo "NOTE: The object files are built at the place where configure is launched" + exit 1 +@@ -3556,6 +3563,7 @@ echo "TPM support $tpm" + echo "libssh2 support $libssh2" + echo "TPM passthrough $tpm_passthrough" + echo "QOM debugging $qom_cast_debug" ++echo "Live block operations $live_block_ops" + + if test "$sdl_too_old" = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" +@@ -3940,6 +3948,10 @@ if test "$virtio_blk_data_plane" = "yes" ; then + echo 'CONFIG_VIRTIO_BLK_DATA_PLANE=$(CONFIG_VIRTIO)' >> $config_host_mak + fi + ++if test "$live_block_ops" = "yes" ; then ++ echo "CONFIG_LIVE_BLOCK_OPS=y" >> $config_host_mak ++fi ++ + # USB host support + if test "$libusb" = "yes"; then + echo "HOST_USB=libusb legacy" >> $config_host_mak +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 5cd6368..2fc2c0b 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -68,7 +68,7 @@ action to see the updated size. Resize to a lower size is supported, + but should be used with extreme caution. Note that this command only + resizes image files, it can not resize block devices like LVM volumes. + ETEXI +- ++#ifdef CONFIG_LIVE_BLOCK_OPS + { + .name = "block_stream", + .args_type = "device:B,speed:o?,base:s?", +@@ -76,6 +76,7 @@ ETEXI + .help = "copy data from a backing file into a block device", + .mhandler.cmd = hmp_block_stream, + }, ++#endif + + STEXI + @item block_stream +@@ -1024,6 +1025,7 @@ gdb. + ETEXI + #endif + ++#ifdef CONFIG_LIVE_BLOCK_OPS + { + .name = "snapshot_blkdev", + .args_type = "reuse:-n,device:B,snapshot-file:s?,format:s?", +@@ -1066,6 +1068,7 @@ STEXI + Start mirroring a block device's writes to a new destination, + using the specified target. + ETEXI ++#endif + + { + .name = "drive_add", +diff --git a/hmp.c b/hmp.c +index 3b3e7c7..29990d2 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -838,6 +838,7 @@ void hmp_block_resize(Monitor *mon, const QDict *qdict) + hmp_handle_error(mon, &errp); + } + ++#ifdef CONFIG_LIVE_BLOCK_OPS + void hmp_drive_mirror(Monitor *mon, const QDict *qdict) + { + const char *device = qdict_get_str(qdict, "device"); +@@ -889,6 +890,7 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict) + true, mode, &errp); + hmp_handle_error(mon, &errp); + } ++#endif + + void hmp_migrate_cancel(Monitor *mon, const QDict *qdict) + { +@@ -1030,6 +1032,7 @@ void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict) + hmp_handle_error(mon, &err); + } + ++#ifdef CONFIG_LIVE_BLOCK_OPS + void hmp_block_stream(Monitor *mon, const QDict *qdict) + { + Error *error = NULL; +@@ -1043,6 +1046,7 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict) + + hmp_handle_error(mon, &error); + } ++#endif + + void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict) + { +diff --git a/qapi-schema.json b/qapi-schema.json +index b779458..12a360a 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1617,6 +1617,7 @@ + ## + { 'command': 'block_resize', 'data': { 'device': 'str', 'size': 'int' }} + ++#_rhev-only CONFIG_LIVE_BLOCK_OPS + ## + # @NewImageMode + # +@@ -1697,6 +1698,7 @@ + ## + { 'command': 'blockdev-snapshot-sync', + 'data': 'BlockdevSnapshot' } ++#_end-rhev-only + + ## + # @human-monitor-command: +@@ -1726,6 +1728,7 @@ + 'data': {'command-line': 'str', '*cpu-index': 'int'}, + 'returns': 'str' } + ++#_rhev-only CONFIG_LIVE_BLOCK_OPS + ## + # @block-commit + # +@@ -1811,6 +1814,7 @@ + '*speed': 'int', '*granularity': 'uint32', + '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', + '*on-target-error': 'BlockdevOnError' } } ++#_end-rhev-only + + ## + # @migrate_cancel +@@ -2123,6 +2127,7 @@ + 'data': { 'device': 'str', 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int', + 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int' } } + ++#_rhev-only CONFIG_LIVE_BLOCK_OPS + ## + # @block-stream: + # +@@ -2160,6 +2165,7 @@ + { 'command': 'block-stream', + 'data': { 'device': 'str', '*base': 'str', '*speed': 'int', + '*on-error': 'BlockdevOnError' } } ++#_end-rhev-only + + ## + # @block-job-set-speed: +diff --git a/qmp-commands.hx b/qmp-commands.hx +index de5f394..e40d54d 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -904,6 +904,7 @@ Example: + + EQMP + ++#ifdef CONFIG_LIVE_BLOCK_OPS + { + .name = "block-stream", + .args_type = "device:B,base:s?,speed:o?,on-error:s?", +@@ -915,6 +916,7 @@ EQMP + .args_type = "device:B,base:s?,top:s,speed:o?", + .mhandler.cmd_new = qmp_marshal_input_block_commit, + }, ++#endif + + { + .name = "block-job-set-speed", +@@ -942,6 +944,7 @@ EQMP + .args_type = "device:B", + .mhandler.cmd_new = qmp_marshal_input_block_job_complete, + }, ++#ifdef CONFIG_LIVE_BLOCK_OPS + { + .name = "transaction", + .args_type = "actions:q", +@@ -1085,6 +1088,7 @@ Example: + <- { "return": {} } + + EQMP ++#endif + + { + .name = "balloon", +-- +1.7.1 + diff --git a/SOURCES/kvm-block-package-committing-code-in-qmp_transaction.patch b/SOURCES/kvm-block-package-committing-code-in-qmp_transaction.patch new file mode 100644 index 0000000..54eaa52 --- /dev/null +++ b/SOURCES/kvm-block-package-committing-code-in-qmp_transaction.patch @@ -0,0 +1,77 @@ +From cda3f47a339a8836037c0c88cd3cb4ac7c299211 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:54 +0200 +Subject: [PATCH 03/38] block: package committing code in qmp_transaction() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 54190 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 03/32] block: package committing code in qmp_transaction() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Wenchao Xia + +Bugzilla: 1005818 + +The code is simply moved into a separate function. + +Signed-off-by: Wenchao Xia +Reviewed-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 3b0047e86a1c215d830b1ae1da0778db4636b83a) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 19 ++++++++++++------- + 1 files changed, 12 insertions(+), 7 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 9eab803..eabb3f8 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -871,6 +871,17 @@ static void external_snapshot_prepare(BlockdevAction *action, + } + } + ++static void external_snapshot_commit(BlkTransactionStates *states) ++{ ++ /* This removes our old bs from the bdrv_states, and adds the new bs */ ++ bdrv_append(states->new_bs, states->old_bs); ++ /* We don't need (or want) to use the transactional ++ * bdrv_reopen_multiple() across all the entries at once, because we ++ * don't want to abort all of them if one of them fails the reopen */ ++ bdrv_reopen(states->new_bs, states->new_bs->open_flags & ~BDRV_O_RDWR, ++ NULL); ++} ++ + /* + * 'Atomic' group snapshots. The snapshots are taken as a set, and if any fail + * then we do not pivot any of the devices in the group, and abandon the +@@ -916,13 +927,7 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + /* Now we are going to do the actual pivot. Everything up to this point + * is reversible, but we are committed at this point */ + QSIMPLEQ_FOREACH(states, &snap_bdrv_states, entry) { +- /* This removes our old bs from the bdrv_states, and adds the new bs */ +- bdrv_append(states->new_bs, states->old_bs); +- /* We don't need (or want) to use the transactional +- * bdrv_reopen_multiple() across all the entries at once, because we +- * don't want to abort all of them if one of them fails the reopen */ +- bdrv_reopen(states->new_bs, states->new_bs->open_flags & ~BDRV_O_RDWR, +- NULL); ++ external_snapshot_commit(states); + } + + /* success */ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-package-preparation-code-in-qmp_transaction.patch b/SOURCES/kvm-block-package-preparation-code-in-qmp_transaction.patch new file mode 100644 index 0000000..572eacf --- /dev/null +++ b/SOURCES/kvm-block-package-preparation-code-in-qmp_transaction.patch @@ -0,0 +1,220 @@ +From 9845ad55c470e47c0074d92611bf9fb2903ab58a Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:52 +0200 +Subject: [PATCH 01/38] block: package preparation code in qmp_transaction() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 54188 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 01/32] block: package preparation code in qmp_transaction() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Wenchao Xia + +Bugzilla: 1005818 + +The code before really committing is moved into a function. Most +code is simply moved from qmp_transaction(), except that on fail it +just returns now. Other code such as input parsing is not touched, +to make it easier in review. + +Signed-off-by: Wenchao Xia +Reviewed-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 9b9877ee9f1c27588a286f591852c0b7c0548b6a) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 139 ++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 77 insertions(+), 62 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 139 +++++++++++++++++++++++++++++++++--------------------------- + 1 files changed, 77 insertions(+), 62 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 6500c47..1bff654 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -785,6 +785,78 @@ typedef struct BlkTransactionStates { + QSIMPLEQ_ENTRY(BlkTransactionStates) entry; + } BlkTransactionStates; + ++static void external_snapshot_prepare(const char *device, ++ const char *format, ++ const char *new_image_file, ++ enum NewImageMode mode, ++ BlkTransactionStates *states, ++ Error **errp) ++{ ++ BlockDriver *proto_drv; ++ BlockDriver *drv; ++ int flags, ret; ++ Error *local_err = NULL; ++ ++ drv = bdrv_find_format(format); ++ if (!drv) { ++ error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); ++ return; ++ } ++ ++ states->old_bs = bdrv_find(device); ++ if (!states->old_bs) { ++ error_set(errp, QERR_DEVICE_NOT_FOUND, device); ++ return; ++ } ++ ++ if (!bdrv_is_inserted(states->old_bs)) { ++ error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, device); ++ return; ++ } ++ ++ if (bdrv_in_use(states->old_bs)) { ++ error_set(errp, QERR_DEVICE_IN_USE, device); ++ return; ++ } ++ ++ if (!bdrv_is_read_only(states->old_bs)) { ++ if (bdrv_flush(states->old_bs)) { ++ error_set(errp, QERR_IO_ERROR); ++ return; ++ } ++ } ++ ++ flags = states->old_bs->open_flags; ++ ++ proto_drv = bdrv_find_protocol(new_image_file); ++ if (!proto_drv) { ++ error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); ++ return; ++ } ++ ++ /* create new image w/backing file */ ++ if (mode != NEW_IMAGE_MODE_EXISTING) { ++ bdrv_img_create(new_image_file, format, ++ states->old_bs->filename, ++ states->old_bs->drv->format_name, ++ NULL, -1, flags, &local_err, false); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ return; ++ } ++ } ++ ++ /* We will manually add the backing_hd field to the bs later */ ++ states->new_bs = bdrv_new(""); ++ /* TODO Inherit bs->options or only take explicit options with an ++ * extended QMP command? */ ++ ret = bdrv_open(states->new_bs, new_image_file, NULL, ++ flags | BDRV_O_NO_BACKING, drv); ++ if (ret != 0) { ++ error_set(errp, QERR_OPEN_FILE_FAILED, new_image_file); ++ } ++} ++ + /* + * 'Atomic' group snapshots. The snapshots are taken as a set, and if any fail + * then we do not pivot any of the devices in the group, and abandon the +@@ -792,7 +864,6 @@ typedef struct BlkTransactionStates { + */ + void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + { +- int ret = 0; + BlockdevActionList *dev_entry = dev_list; + BlkTransactionStates *states, *next; + Error *local_err = NULL; +@@ -806,9 +877,6 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + /* We don't do anything in this loop that commits us to the snapshot */ + while (NULL != dev_entry) { + BlockdevAction *dev_info = NULL; +- BlockDriver *proto_drv; +- BlockDriver *drv; +- int flags; + enum NewImageMode mode; + const char *new_image_file; + const char *device; +@@ -831,70 +899,17 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) + format = dev_info->blockdev_snapshot_sync->format; + } + mode = dev_info->blockdev_snapshot_sync->mode; +- break; +- default: +- abort(); +- } +- +- drv = bdrv_find_format(format); +- if (!drv) { +- error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); +- goto delete_and_fail; +- } +- +- states->old_bs = bdrv_find(device); +- if (!states->old_bs) { +- error_set(errp, QERR_DEVICE_NOT_FOUND, device); +- goto delete_and_fail; +- } +- +- if (!bdrv_is_inserted(states->old_bs)) { +- error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, device); +- goto delete_and_fail; +- } +- +- if (bdrv_in_use(states->old_bs)) { +- error_set(errp, QERR_DEVICE_IN_USE, device); +- goto delete_and_fail; +- } +- +- if (!bdrv_is_read_only(states->old_bs)) { +- if (bdrv_flush(states->old_bs)) { +- error_set(errp, QERR_IO_ERROR); +- goto delete_and_fail; +- } +- } +- +- flags = states->old_bs->open_flags; +- +- proto_drv = bdrv_find_protocol(new_image_file); +- if (!proto_drv) { +- error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); +- goto delete_and_fail; +- } +- +- /* create new image w/backing file */ +- if (mode != NEW_IMAGE_MODE_EXISTING) { +- bdrv_img_create(new_image_file, format, +- states->old_bs->filename, +- states->old_bs->drv->format_name, +- NULL, -1, flags, &local_err, false); ++ external_snapshot_prepare(device, format, new_image_file, ++ mode, states, &local_err); + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); + goto delete_and_fail; + } ++ break; ++ default: ++ abort(); + } + +- /* We will manually add the backing_hd field to the bs later */ +- states->new_bs = bdrv_new(""); +- /* TODO Inherit bs->options or only take explicit options with an +- * extended QMP command? */ +- ret = bdrv_open(states->new_bs, new_image_file, NULL, +- flags | BDRV_O_NO_BACKING, drv); +- if (ret != 0) { +- error_set(errp, QERR_OPEN_FILE_FAILED, new_image_file); +- goto delete_and_fail; +- } + } + + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-package-rollback-code-in-qmp_transaction.patch b/SOURCES/kvm-block-package-rollback-code-in-qmp_transaction.patch new file mode 100644 index 0000000..3f3445f --- /dev/null +++ b/SOURCES/kvm-block-package-rollback-code-in-qmp_transaction.patch @@ -0,0 +1,67 @@ +From 615e6e9c2adabbc5039e3fdbd49326eeb549f931 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:55 +0200 +Subject: [PATCH 04/38] block: package rollback code in qmp_transaction() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 54191 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 04/32] block: package rollback code in qmp_transaction() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Wenchao Xia + +Bugzilla: 1005818 + +Signed-off-by: Wenchao Xia +Reviewed-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 96b86bf72de0c6eda2799201517ef32910beb340) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index eabb3f8..b040f0f 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -882,6 +882,13 @@ static void external_snapshot_commit(BlkTransactionStates *states) + NULL); + } + ++static void external_snapshot_abort(BlkTransactionStates *states) ++{ ++ if (states->new_bs) { ++ bdrv_delete(states->new_bs); ++ } ++} ++ + /* + * 'Atomic' group snapshots. The snapshots are taken as a set, and if any fail + * then we do not pivot any of the devices in the group, and abandon the +@@ -939,9 +946,7 @@ delete_and_fail: + * the original bs for all images + */ + QSIMPLEQ_FOREACH(states, &snap_bdrv_states, entry) { +- if (states->new_bs) { +- bdrv_delete(states->new_bs); +- } ++ external_snapshot_abort(states); + } + exit: + QSIMPLEQ_FOREACH_SAFE(states, &snap_bdrv_states, entry, next) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qapi-Human-readable-ImageInfoSpecific-dump.patch b/SOURCES/kvm-block-qapi-Human-readable-ImageInfoSpecific-dump.patch new file mode 100644 index 0000000..9a7d625 --- /dev/null +++ b/SOURCES/kvm-block-qapi-Human-readable-ImageInfoSpecific-dump.patch @@ -0,0 +1,243 @@ +From 85b14be2b92e75320728a450635c80053d8cd374 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:36 +0100 +Subject: [PATCH 79/87] block/qapi: Human-readable ImageInfoSpecific dump + +RH-Author: Max Reitz +Message-id: <1383756824-6921-14-git-send-email-mreitz@redhat.com> +Patchwork-id: 55568 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 13/21] block/qapi: Human-readable ImageInfoSpecific dump +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +BZ: 980771 + +Add a function for generically dumping the ImageInfoSpecific information +in a human-readable format to block/qapi.c. + +Use this function in bdrv_image_info_dump and qemu-io-cmds.c:info_f to +allow qemu-img info resp. qemu-io -c info to print that format specific +information. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit a8d8ecb77fc16da49ea2c1edae267dc9d0c01dfd) + +Signed-off-by: Max Reitz + +Conflicts: + qemu-io.c + qemu-io-cmds.c + +Conflicts because 797ac58cb2093ab9192d8998a1fef85d87cc8661 has not been +backported, which splits qemu-io-cmds.c from qemu-io.c. +--- + block/qapi.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ + include/block/qapi.h | 2 + + qemu-io.c | 9 ++++ + 3 files changed, 132 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qapi.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++ + include/block/qapi.h | 2 + + qemu-io.c | 9 ++++ + 3 files changed, 132 insertions(+), 0 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index 896cd37..87423fb 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -25,6 +25,9 @@ + #include "block/qapi.h" + #include "block/block_int.h" + #include "qmp-commands.h" ++#include "qapi-visit.h" ++#include "qapi/qmp-output-visitor.h" ++#include "qapi/qmp/types.h" + + /* + * Returns 0 on success, with *p_list either set to describe snapshot +@@ -400,6 +403,119 @@ void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f, + } + } + ++static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation, ++ QDict *dict); ++static void dump_qlist(fprintf_function func_fprintf, void *f, int indentation, ++ QList *list); ++ ++static void dump_qobject(fprintf_function func_fprintf, void *f, ++ int comp_indent, QObject *obj) ++{ ++ switch (qobject_type(obj)) { ++ case QTYPE_QINT: { ++ QInt *value = qobject_to_qint(obj); ++ func_fprintf(f, "%" PRId64, qint_get_int(value)); ++ break; ++ } ++ case QTYPE_QSTRING: { ++ QString *value = qobject_to_qstring(obj); ++ func_fprintf(f, "%s", qstring_get_str(value)); ++ break; ++ } ++ case QTYPE_QDICT: { ++ QDict *value = qobject_to_qdict(obj); ++ dump_qdict(func_fprintf, f, comp_indent, value); ++ break; ++ } ++ case QTYPE_QLIST: { ++ QList *value = qobject_to_qlist(obj); ++ dump_qlist(func_fprintf, f, comp_indent, value); ++ break; ++ } ++ case QTYPE_QFLOAT: { ++ QFloat *value = qobject_to_qfloat(obj); ++ func_fprintf(f, "%g", qfloat_get_double(value)); ++ break; ++ } ++ case QTYPE_QBOOL: { ++ QBool *value = qobject_to_qbool(obj); ++ func_fprintf(f, "%s", qbool_get_int(value) ? "true" : "false"); ++ break; ++ } ++ case QTYPE_QERROR: { ++ QString *value = qerror_human((QError *)obj); ++ func_fprintf(f, "%s", qstring_get_str(value)); ++ break; ++ } ++ case QTYPE_NONE: ++ break; ++ case QTYPE_MAX: ++ default: ++ abort(); ++ } ++} ++ ++static void dump_qlist(fprintf_function func_fprintf, void *f, int indentation, ++ QList *list) ++{ ++ const QListEntry *entry; ++ int i = 0; ++ ++ for (entry = qlist_first(list); entry; entry = qlist_next(entry), i++) { ++ qtype_code type = qobject_type(entry->value); ++ bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST); ++ const char *format = composite ? "%*s[%i]:\n" : "%*s[%i]: "; ++ ++ func_fprintf(f, format, indentation * 4, "", i); ++ dump_qobject(func_fprintf, f, indentation + 1, entry->value); ++ if (!composite) { ++ func_fprintf(f, "\n"); ++ } ++ } ++} ++ ++static void dump_qdict(fprintf_function func_fprintf, void *f, int indentation, ++ QDict *dict) ++{ ++ const QDictEntry *entry; ++ ++ for (entry = qdict_first(dict); entry; entry = qdict_next(dict, entry)) { ++ qtype_code type = qobject_type(entry->value); ++ bool composite = (type == QTYPE_QDICT || type == QTYPE_QLIST); ++ const char *format = composite ? "%*s%s:\n" : "%*s%s: "; ++ char key[strlen(entry->key) + 1]; ++ int i; ++ ++ /* replace dashes with spaces in key (variable) names */ ++ for (i = 0; entry->key[i]; i++) { ++ key[i] = entry->key[i] == '-' ? ' ' : entry->key[i]; ++ } ++ key[i] = 0; ++ ++ func_fprintf(f, format, indentation * 4, "", key); ++ dump_qobject(func_fprintf, f, indentation + 1, entry->value); ++ if (!composite) { ++ func_fprintf(f, "\n"); ++ } ++ } ++} ++ ++void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f, ++ ImageInfoSpecific *info_spec) ++{ ++ Error *local_err = NULL; ++ QmpOutputVisitor *ov = qmp_output_visitor_new(); ++ QObject *obj, *data; ++ ++ visit_type_ImageInfoSpecific(qmp_output_get_visitor(ov), &info_spec, NULL, ++ &local_err); ++ obj = qmp_output_get_qobject(ov); ++ assert(qobject_type(obj) == QTYPE_QDICT); ++ data = qdict_get(qobject_to_qdict(obj), "data"); ++ dump_qobject(func_fprintf, f, 1, data); ++ qmp_output_visitor_cleanup(ov); ++} ++ + void bdrv_image_info_dump(fprintf_function func_fprintf, void *f, + ImageInfo *info) + { +@@ -470,4 +586,9 @@ void bdrv_image_info_dump(fprintf_function func_fprintf, void *f, + func_fprintf(f, "\n"); + } + } ++ ++ if (info->has_format_specific) { ++ func_fprintf(f, "Format specific information:\n"); ++ bdrv_image_info_specific_dump(func_fprintf, f, info->format_specific); ++ } + } +diff --git a/include/block/qapi.h b/include/block/qapi.h +index 0496cc9..9518ee4 100644 +--- a/include/block/qapi.h ++++ b/include/block/qapi.h +@@ -42,6 +42,8 @@ BlockStats *bdrv_query_stats(const BlockDriverState *bs); + + void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f, + QEMUSnapshotInfo *sn); ++void bdrv_image_info_specific_dump(fprintf_function func_fprintf, void *f, ++ ImageInfoSpecific *info_spec); + void bdrv_image_info_dump(fprintf_function func_fprintf, void *f, + ImageInfo *info); + #endif +diff --git a/qemu-io.c b/qemu-io.c +index 116bb1b..df21022 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -17,6 +17,7 @@ + #include "qemu-common.h" + #include "qemu/main-loop.h" + #include "block/block_int.h" ++#include "block/qapi.h" + #include "cmd.h" + #include "trace/control.h" + +@@ -1462,6 +1463,7 @@ static const cmdinfo_t length_cmd = { + static int info_f(int argc, char **argv) + { + BlockDriverInfo bdi; ++ ImageInfoSpecific *spec_info; + char s1[64], s2[64]; + int ret; + +@@ -1483,6 +1485,13 @@ static int info_f(int argc, char **argv) + printf("cluster size: %s\n", s1); + printf("vm state offset: %s\n", s2); + ++ spec_info = bdrv_get_specific_info(bs); ++ if (spec_info) { ++ printf("Format specific information:\n"); ++ bdrv_image_info_specific_dump(fprintf, stdout, spec_info); ++ qapi_free_ImageInfoSpecific(spec_info); ++ } ++ + return 0; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-add-check-for-multiplication-over.patch b/SOURCES/kvm-block-qemu-iotests-add-check-for-multiplication-over.patch new file mode 100644 index 0000000..e626c9b --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-add-check-for-multiplication-over.patch @@ -0,0 +1,121 @@ +From 119ce531952beab96a8b807721e2180d99382073 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 29 Jul 2015 16:59:55 +0200 +Subject: [PATCH 04/13] block: qemu-iotests - add check for multiplication + overflow in vpc + +Message-id: <9e859f3912d1852e48fb7e25a3679bd74500c36d.1438188988.git.jcody@redhat.com> +Patchwork-id: 67198 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/3] block: qemu-iotests - add check for multiplication overflow in vpc +Bugzilla: 1217349 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This checks that VPC is able to successfully fail (without segfault) +on an image file with a max_table_entries that exceeds 0x40000000. + +This table entry is within the valid range for VPC (although too large +for this sample image). + +Cc: qemu-stable@nongnu.org +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 77c102c26ead946fe7589d4bddcdfa5cb431ebfe) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Jeff Cody +--- + tests/qemu-iotests/135 | 54 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/135.out | 5 +++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 60 insertions(+) + create mode 100755 tests/qemu-iotests/135 + create mode 100644 tests/qemu-iotests/135.out + +diff --git a/tests/qemu-iotests/135 b/tests/qemu-iotests/135 +new file mode 100755 +index 0000000..16bf736 +--- /dev/null ++++ b/tests/qemu-iotests/135 +@@ -0,0 +1,54 @@ ++#!/bin/bash ++# ++# Test VPC open of image with large Max Table Entries value. ++# ++# Copyright (C) 2015 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=jcody@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt vpc ++_supported_proto generic ++_supported_os Linux ++ ++_use_sample_img afl5.img.bz2 ++ ++echo ++echo "=== Verify image open and failure ====" ++$QEMU_IMG info "$TEST_IMG" 2>&1| _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/135.out b/tests/qemu-iotests/135.out +new file mode 100644 +index 0000000..793898b +--- /dev/null ++++ b/tests/qemu-iotests/135.out +@@ -0,0 +1,5 @@ ++QA output created by 135 ++ ++=== Verify image open and failure ==== ++qemu-img: Could not open 'TEST_DIR/afl5.img': Max Table Entries too large (1073741825) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 0644c42..58b3d05 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -92,3 +92,4 @@ + 114 rw auto quick + 121 rw auto + 130 rw auto quick ++135 rw auto +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-in-0.patch b/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-in-0.patch new file mode 100644 index 0000000..b043434 --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-in-0.patch @@ -0,0 +1,54 @@ +From 37f496947f6acfc92c7a2d62925b0a8a1ed71a82 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:48 +0100 +Subject: [PATCH 05/25] block: qemu-iotests, add quotes to $TEST_IMG usage in 019 + +RH-Author: Jeffrey Cody +Message-id: <5e5cffb85c88a8d5b3d77ac793f8c12f17c12741.1384975172.git.jcody@redhat.com> +Patchwork-id: 55798 +O-Subject: [RHEL7 qemu-kvm PATCH 05/26] block: qemu-iotests, add quotes to $TEST_IMG usage in 019 +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +There were still instances of $TEST_IMG not being properly quoted. +This was in the usage of a string built up for a 'for' loop; modify +the loop so we can quote $TEST_IMG properly. + +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3cbe3e8d25529ecb4e1838d1c6856e199b3a66d4) +--- + tests/qemu-iotests/019 | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/019 | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tests/qemu-iotests/019 b/tests/qemu-iotests/019 +index cd3582c..5bb18d0 100755 +--- a/tests/qemu-iotests/019 ++++ b/tests/qemu-iotests/019 +@@ -90,12 +90,12 @@ mv "$TEST_IMG" "$TEST_IMG.orig" + # Test the conversion twice: One test with the old-style -B option and another + # one with -o backing_file + +-for backing_option in "-B $TEST_IMG.base" "-o backing_file=$TEST_IMG.base"; do ++for backing_option in "-B " "-o backing_file="; do + + echo +- echo Testing conversion with $backing_option | _filter_testdir | _filter_imgfmt ++ echo Testing conversion with $backing_option$TEST_IMG.base | _filter_testdir | _filter_imgfmt + echo +- $QEMU_IMG convert -O $IMGFMT $backing_option "$TEST_IMG.orig" "$TEST_IMG" ++ $QEMU_IMG convert -O $IMGFMT $backing_option"$TEST_IMG.base" "$TEST_IMG.orig" "$TEST_IMG" + + echo "Checking if backing clusters are allocated when they shouldn't" + echo +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-io-p.patch b/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-io-p.patch new file mode 100644 index 0000000..f8548b8 --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-io-p.patch @@ -0,0 +1,79 @@ +From b592b76b870d07c394156192913924af7d1a8079 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:45 +0100 +Subject: [PATCH 02/25] block: qemu-iotests, add quotes to $TEST_IMG usage io pattern tests + +RH-Author: Jeffrey Cody +Message-id: <0ff2c944dec278cb605a62a3ec55fd0a57432ecf.1384975172.git.jcody@redhat.com> +Patchwork-id: 55795 +O-Subject: [RHEL7 qemu-kvm PATCH 02/26] block: qemu-iotests, add quotes to $TEST_IMG usage io pattern tests +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +The usage of $TEST_IMG was not properly quoted everywhere in +common.pattern. + +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0084043888f6773d905c1b5d644b89c79d1c7714) +--- + tests/qemu-iotests/common.pattern | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/common.pattern | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/tests/qemu-iotests/common.pattern b/tests/qemu-iotests/common.pattern +index 00e0f60..ddfbca1 100644 +--- a/tests/qemu-iotests/common.pattern ++++ b/tests/qemu-iotests/common.pattern +@@ -28,7 +28,7 @@ function do_is_allocated() { + } + + function is_allocated() { +- do_is_allocated "$@" | $QEMU_IO $TEST_IMG | _filter_qemu_io ++ do_is_allocated "$@" | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + } + + function do_io() { +@@ -46,18 +46,18 @@ function do_io() { + } + + function io_pattern() { +- do_io "$@" | $QEMU_IO $TEST_IMG | _filter_qemu_io ++ do_io "$@" | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + } + + function io() { + local start=$2 + local pattern=$(( (start >> 9) % 256 )) + +- do_io "$@" $pattern | $QEMU_IO $TEST_IMG | _filter_qemu_io ++ do_io "$@" $pattern | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + } + + function io_zero() { +- do_io "$@" 0 | $QEMU_IO $TEST_IMG | _filter_qemu_io ++ do_io "$@" 0 | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + } + + function io_test() { +@@ -117,8 +117,8 @@ function io_test2() { + echo === Clusters to be compressed [3] + io_pattern writev $((offset + 8 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165 + +- mv $TEST_IMG $TEST_IMG.orig +- $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -c $TEST_IMG.orig $TEST_IMG ++ mv "$TEST_IMG" "$TEST_IMG.orig" ++ $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -c "$TEST_IMG.orig" "$TEST_IMG" + + # Write the used clusters + echo === Used clusters [1] +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG.base-usage.patch b/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG.base-usage.patch new file mode 100644 index 0000000..c61f197 --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-add-quotes-to-TEST_IMG.base-usage.patch @@ -0,0 +1,46 @@ +From 7e3c22ba8ef0cda6b963a630e75fcff2c501a4bc Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:47 +0100 +Subject: [PATCH 04/25] block: qemu-iotests, add quotes to $TEST_IMG.base usage in 017 + +RH-Author: Jeffrey Cody +Message-id: <06ac39b0b706052e005be10e809d79eb633ebe5f.1384975172.git.jcody@redhat.com> +Patchwork-id: 55797 +O-Subject: [RHEL7 qemu-kvm PATCH 04/26] block: qemu-iotests, add quotes to $TEST_IMG.base usage in 017 +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +$TEST_IMG.base is used unquoted. Add quotes so that pathnames with +spaces are supported. + +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 02cde1688131090d3abb2f210e30a44d96804167) +--- + tests/qemu-iotests/017 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/017 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/tests/qemu-iotests/017 b/tests/qemu-iotests/017 +index 45f2c0b..aba3faf 100755 +--- a/tests/qemu-iotests/017 ++++ b/tests/qemu-iotests/017 +@@ -66,7 +66,7 @@ echo "Creating test image with backing file" + echo + + TEST_IMG=$TEST_IMG_SAVE +-_make_test_img -b $TEST_IMG.base 6G ++_make_test_img -b "$TEST_IMG.base" 6G + + echo "Filling test image" + echo +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-fix-_make_test_img-to-work-with-s.patch b/SOURCES/kvm-block-qemu-iotests-fix-_make_test_img-to-work-with-s.patch new file mode 100644 index 0000000..33187e5 --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-fix-_make_test_img-to-work-with-s.patch @@ -0,0 +1,72 @@ +From 2235c9a514307669f458b5490f127c6e11989a99 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:46 +0100 +Subject: [PATCH 03/25] block: qemu-iotests, fix _make_test_img() to work with spaced pathnames + +RH-Author: Jeffrey Cody +Message-id: <4c889b5de385100b5406f2cab6dfffd04936e666.1384975172.git.jcody@redhat.com> +Patchwork-id: 55796 +O-Subject: [RHEL7 qemu-kvm PATCH 03/26] block: qemu-iotests, fix _make_test_img() to work with spaced pathnames +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +_make_test_img() currently works with spaced pathnames only when not +specifying a backing file. This fixes it so that the backing file +argument is properly quoted. + +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0018c03f5d37f3a7df23eef0e9f1e6e6189ed634) +--- + tests/qemu-iotests/common.rc | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/common.rc | 13 +++++++++++-- + 1 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 4e82604..d24de2c 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -111,6 +111,8 @@ _make_test_img() + local image_size=$* + local optstr="" + local img_name="" ++ local use_backing=0 ++ local backing_file="" + + if [ -n "$TEST_IMG_FILE" ]; then + img_name=$TEST_IMG_FILE +@@ -123,7 +125,8 @@ _make_test_img() + fi + + if [ "$1" = "-b" ]; then +- extra_img_options="$1 $2" ++ use_backing=1 ++ backing_file=$2 + image_size=$3 + fi + if [ \( "$IMGFMT" = "qcow2" -o "$IMGFMT" = "qed" \) -a -n "$CLUSTER_SIZE" ]; then +@@ -135,7 +138,13 @@ _make_test_img() + fi + + # XXX(hch): have global image options? +- $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size 2>&1 | \ ++ ( ++ if [ $use_backing = 1 ]; then ++ $QEMU_IMG create -f $IMGFMT $extra_img_options -b "$backing_file" "$img_name" $image_size 2>&1 ++ else ++ $QEMU_IMG create -f $IMGFMT $extra_img_options "$img_name" $image_size 2>&1 ++ fi ++ ) | \ + sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \ + -e "s#$TEST_DIR#TEST_DIR#g" \ + -e "s#$IMGFMT#IMGFMT#g" \ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-for-vhdx-add-write-test-support.patch b/SOURCES/kvm-block-qemu-iotests-for-vhdx-add-write-test-support.patch new file mode 100644 index 0000000..f16ee6a --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-for-vhdx-add-write-test-support.patch @@ -0,0 +1,104 @@ +From 445ea167eadbc4b951b46c8a2ab52cc0ce681aac Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:07 +0100 +Subject: [PATCH 24/25] block: qemu-iotests for vhdx, add write test support + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55817 +O-Subject: [RHEL7 qemu-kvm PATCH 24/26] block: qemu-iotests for vhdx, add write test support +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This removes the IMGFMT_GENERIC blocker for read-only, so existing +iotests run read/write tests for vhdx images created by qemu-img (e.g. +tests 001, 002, 003). + +In addition, this updates the sample image test for the Hyper-V +created image, to verify we can write it as well. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 751aec24cdcd4359b5927df5cebfe6b8d3e74515) + +RHEL7 Note: Difference from upstream - there was a typo in this patch, + that used 'MM' instead of 'M' for size passed into qemu-io. + Upstream apparently gobbles the extra 'M' without error, + but RHEL7 does not. Fix this so that test 064 passes. + +Signed-off-by: Jeff Cody +--- + tests/qemu-iotests/064 | 11 +++++++++++ + tests/qemu-iotests/064.out | 14 ++++++++++++++ + tests/qemu-iotests/common | 1 - + 3 files changed, 25 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/064 | 11 +++++++++++ + tests/qemu-iotests/064.out | 14 ++++++++++++++ + tests/qemu-iotests/common | 1 - + 3 files changed, 25 insertions(+), 1 deletions(-) + +diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064 +index 6789aa6..906205e 100755 +--- a/tests/qemu-iotests/064 ++++ b/tests/qemu-iotests/064 +@@ -56,6 +56,17 @@ echo + echo "=== Verify pattern 0x00, 66M - 1024M ===" + $QEMU_IO -r -c "read -pP 0x00 66M 958M" "$TEST_IMG" | _filter_qemu_io + ++echo ++echo "=== Verify pattern write, 0xc3 99M-157M ===" ++$QEMU_IO -c "write -pP 0xc3 99M 58M" "$TEST_IMG" | _filter_qemu_io ++# first verify we didn't write where we should not have ++$QEMU_IO -c "read -pP 0xa5 0 33M" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -pP 0x96 33M 33M" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -pP 0x00 66M 33M" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -pP 0x00 157M 867M" "$TEST_IMG" | _filter_qemu_io ++# now verify what we should have actually written ++$QEMU_IO -c "read -pP 0xc3 99M 58M" "$TEST_IMG" | _filter_qemu_io ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/064.out b/tests/qemu-iotests/064.out +index b9e8e4a..5346a4e 100644 +--- a/tests/qemu-iotests/064.out ++++ b/tests/qemu-iotests/064.out +@@ -11,4 +11,18 @@ read 34603008/34603008 bytes at offset 34603008 + === Verify pattern 0x00, 66M - 1024M === + read 1004535808/1004535808 bytes at offset 69206016 + 958 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Verify pattern write, 0xc3 99M-157M === ++wrote 60817408/60817408 bytes at offset 103809024 ++58 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 34603008/34603008 bytes at offset 0 ++33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 34603008/34603008 bytes at offset 34603008 ++33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 34603008/34603008 bytes at offset 69206016 ++33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 909115392/909115392 bytes at offset 164626432 ++867 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 60817408/60817408 bytes at offset 103809024 ++58 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index 2932e14..8cde7f1 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -200,7 +200,6 @@ testlist options + -vhdx) + IMGFMT=vhdx + xpand=false +- IMGFMT_GENERIC=false + ;; + + -rbd) +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-for-vhdx-read-sample-dynamic-imag.patch b/SOURCES/kvm-block-qemu-iotests-for-vhdx-read-sample-dynamic-imag.patch new file mode 100644 index 0000000..87bd8ab --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-for-vhdx-read-sample-dynamic-imag.patch @@ -0,0 +1,208 @@ +From 9188bcfc8f33c9340acdb6279d01d09ca6fec591 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:44 +0100 +Subject: [PATCH 01/25] block: qemu-iotests for vhdx, read sample dynamic image + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55794 +O-Subject: [RHEL7 qemu-kvm PATCH 01/26] block: qemu-iotests for vhdx, read sample dynamic image +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds the VHDX format to the qemu-iotests format, and adds +a read test. The test reads from an existing sample image, that +was created with Hyper-V under Windwos Server 2012. + +The image file is a 1GB dynamic image, with 32MB blocks. + +The pattern 0xa5 exists from 0MB-33MB (past a block size boundary) + +The pattern 0x96 exists from 33MB-66MB (past another block boundary, +and leaving a partial blank block) + +>From 66MB-1024MB, all reads should return 0. + +Although 1GB dynamic image with 66MB of data, the bzip2'ed image +file size is only 874 bytes. + +This also adds in the IMGFMT_GENERIC flag, so r/o images can be +tested (e.g. ./check -vhdx) without failing tests that assume +r/w support. + +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 89e911816a1d5cdbc9480d5464c571d216cf5ea8) +--- + tests/qemu-iotests/064 | 62 +++++++++++++++++++++ + tests/qemu-iotests/064.out | 14 +++++ + tests/qemu-iotests/common | 8 +++ + tests/qemu-iotests/common.rc | 2 +- + tests/qemu-iotests/group | 1 + + .../sample_images/iotest-dynamic-1G.vhdx.bz2 | Bin 0 -> 874 bytes + 6 files changed, 86 insertions(+), 1 deletion(-) + create mode 100755 tests/qemu-iotests/064 + create mode 100644 tests/qemu-iotests/064.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/064 | 62 ++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/064.out | 14 +++++++++ + tests/qemu-iotests/common | 8 +++++ + tests/qemu-iotests/common.rc | 2 +- + tests/qemu-iotests/group | 1 + + 5 files changed, 86 insertions(+), 1 deletions(-) + create mode 100755 tests/qemu-iotests/064 + create mode 100644 tests/qemu-iotests/064.out + +diff --git a/tests/qemu-iotests/064 b/tests/qemu-iotests/064 +new file mode 100755 +index 0000000..6789aa6 +--- /dev/null ++++ b/tests/qemu-iotests/064 +@@ -0,0 +1,62 @@ ++#!/bin/bash ++# ++# Test VHDX read/write from a sample image created with Hyper-V ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=jcody@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt vhdx ++_supported_proto generic ++_supported_os Linux ++ ++_use_sample_img iotest-dynamic-1G.vhdx.bz2 ++ ++echo ++echo "=== Verify pattern 0xa5, 0 - 33MB ===" ++$QEMU_IO -r -c "read -pP 0xa5 0 33M" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Verify pattern 0x96, 33M - 66M ===" ++$QEMU_IO -r -c "read -pP 0x96 33M 33M" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Verify pattern 0x00, 66M - 1024M ===" ++$QEMU_IO -r -c "read -pP 0x00 66M 958M" "$TEST_IMG" | _filter_qemu_io ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/064.out b/tests/qemu-iotests/064.out +new file mode 100644 +index 0000000..b9e8e4a +--- /dev/null ++++ b/tests/qemu-iotests/064.out +@@ -0,0 +1,14 @@ ++QA output created by 064 ++ ++=== Verify pattern 0xa5, 0 - 33MB === ++read 34603008/34603008 bytes at offset 0 ++33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Verify pattern 0x96, 33M - 66M === ++read 34603008/34603008 bytes at offset 34603008 ++33 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Verify pattern 0x00, 66M - 1024M === ++read 1004535808/1004535808 bytes at offset 69206016 ++958 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index fecaf85..2932e14 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -45,6 +45,7 @@ valgrind=false + rm -f $tmp.list $tmp.tmp $tmp.sed + + export IMGFMT=raw ++export IMGFMT_GENERIC=true + export IMGPROTO=file + export IMGOPTS="" + export QEMU_IO_OPTIONS="" +@@ -133,6 +134,7 @@ check options + -qed test qed + -vdi test vdi + -vpc test vpc ++ -vhdx test vhdx + -vmdk test vmdk + -rbd test rbd + -sheepdog test sheepdog +@@ -195,6 +197,12 @@ testlist options + xpand=false + ;; + ++ -vhdx) ++ IMGFMT=vhdx ++ xpand=false ++ IMGFMT_GENERIC=false ++ ;; ++ + -rbd) + IMGPROTO=rbd + xpand=false +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 227c003..4e82604 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -339,7 +339,7 @@ _fail() + _supported_fmt() + { + for f; do +- if [ "$f" = "$IMGFMT" -o "$f" = "generic" ]; then ++ if [ "$f" = "$IMGFMT" -o "$f" = "generic" -a "$IMGFMT_GENERIC" = "true" ]; then + return + fi + done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 4a211bf..1a182ed 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -64,6 +64,7 @@ + 059 rw auto + 060 rw auto + 063 rw auto ++064 rw auto + 065 rw auto + 067 rw auto + 068 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-block-qemu-iotests-removes-duplicate-double-quotes-i.patch b/SOURCES/kvm-block-qemu-iotests-removes-duplicate-double-quotes-i.patch new file mode 100644 index 0000000..ebc3f40 --- /dev/null +++ b/SOURCES/kvm-block-qemu-iotests-removes-duplicate-double-quotes-i.patch @@ -0,0 +1,45 @@ +From 1ee66862e6dac32e76687a8a2c0bdf945c2f87d6 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:49 +0100 +Subject: [PATCH 06/25] block: qemu-iotests, removes duplicate double quotes in 039 + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55799 +O-Subject: [RHEL7 qemu-kvm PATCH 06/26] block: qemu-iotests, removes duplicate double quotes in 039 +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Test 039 had $TEST_IMG with duplicate double quotes - remove duplicate. + +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f897e3939cbbcec26e99415a499654ae7ae09b64) +--- + tests/qemu-iotests/039 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/039 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039 +index f85b4ce..8bade92 100755 +--- a/tests/qemu-iotests/039 ++++ b/tests/qemu-iotests/039 +@@ -54,7 +54,7 @@ echo "== Checking that image is clean on shutdown ==" + IMGOPTS="compat=1.1,lazy_refcounts=on" + _make_test_img $size + +-$QEMU_IO -c "write -P 0x5a 0 512" ""$TEST_IMG"" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io + + # The dirty bit must not be set + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +-- +1.7.1 + diff --git a/SOURCES/kvm-block-raw-Employ-error-parameter.patch b/SOURCES/kvm-block-raw-Employ-error-parameter.patch new file mode 100644 index 0000000..821da0e --- /dev/null +++ b/SOURCES/kvm-block-raw-Employ-error-parameter.patch @@ -0,0 +1,51 @@ +From 5332d8432cf1a751cb60793ba8e80e7540dce9c0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:16 +0100 +Subject: [PATCH 23/87] block/raw: Employ error parameter + +RH-Author: Max Reitz +Message-id: <1383604354-12743-26-git-send-email-mreitz@redhat.com> +Patchwork-id: 55325 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 25/43] block/raw: Employ error parameter +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Propagate errors in raw_create rather than directly reporting and +afterwards discarding them. + +This downstream-only commit replaces upstream +92f1deec317230575726a8e0ab5c110781d30ec0 (which did the same for +raw_bsd.c instead of raw.c). + +Signed-off-by: Max Reitz +--- + block/raw.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/raw.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/block/raw.c b/block/raw.c +index 50073b6..66eda91 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -113,8 +113,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, + + ret = bdrv_create_file(filename, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + } + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-raw-add-bdrv_co_write_zeroes.patch b/SOURCES/kvm-block-raw-add-bdrv_co_write_zeroes.patch new file mode 100644 index 0000000..b2244ee --- /dev/null +++ b/SOURCES/kvm-block-raw-add-bdrv_co_write_zeroes.patch @@ -0,0 +1,58 @@ +From 6fa5e64aabc703a4338a4e8705f6398df856009a Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:07 +0200 +Subject: [PATCH 12/25] block/raw: add bdrv_co_write_zeroes + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-3-git-send-email-owasserm@redhat.com> +Patchwork-id: 54798 +O-Subject: [RHEL7.0 qemu-kvm v2 02/10] block/raw: add bdrv_co_write_zeroes +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8bf9344ad6883e6d85b69bab36d9d76e4257e9ed) +--- + block/raw.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/raw.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/block/raw.c b/block/raw.c +index ce10422..8c81de9 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -42,6 +42,13 @@ static int coroutine_fn raw_co_is_allocated(BlockDriverState *bs, + return bdrv_co_is_allocated(bs->file, sector_num, nb_sectors, pnum); + } + ++static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs, ++ int64_t sector_num, ++ int nb_sectors) ++{ ++ return bdrv_co_write_zeroes(bs->file, sector_num, nb_sectors); ++} ++ + static int64_t raw_getlength(BlockDriverState *bs) + { + return bdrv_getlength(bs->file); +@@ -128,6 +135,7 @@ static BlockDriver bdrv_raw = { + .bdrv_co_readv = raw_co_readv, + .bdrv_co_writev = raw_co_writev, + .bdrv_co_is_allocated = raw_co_is_allocated, ++ .bdrv_co_write_zeroes = raw_co_write_zeroes, + .bdrv_co_discard = raw_co_discard, + + .bdrv_probe = raw_probe, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-raw-copy-BlockLimits-on-raw_open.patch.patch.patch b/SOURCES/kvm-block-raw-copy-BlockLimits-on-raw_open.patch.patch.patch new file mode 100644 index 0000000..078fbf5 --- /dev/null +++ b/SOURCES/kvm-block-raw-copy-BlockLimits-on-raw_open.patch.patch.patch @@ -0,0 +1,49 @@ +From 42fe55d38b7b9e838d1962da6a717f765fb055d0 Mon Sep 17 00:00:00 2001 +Message-Id: <42fe55d38b7b9e838d1962da6a717f765fb055d0.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:01 +0100 +Subject: [PATCH 13/50] block/raw: copy BlockLimits on raw_open + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-16-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56054 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 15/52] block/raw: copy BlockLimits on raw_open +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 04f19e4d2da4325297c99e94f20b0aca52546209) + +Conflicts: + block/raw_bsd.c [replaced by block/raw.c] +--- + block/raw.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Michal Novotny +--- + block/raw.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/block/raw.c b/block/raw.c +index 67d6445..c853258 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -7,6 +7,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + bs->sg = bs->file->sg; ++ bs->bl = bs->file->bl; + return 0; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-block-raw-posix-Employ-error-parameter.patch b/SOURCES/kvm-block-raw-posix-Employ-error-parameter.patch new file mode 100644 index 0000000..94a1a93 --- /dev/null +++ b/SOURCES/kvm-block-raw-posix-Employ-error-parameter.patch @@ -0,0 +1,267 @@ +From 3b0640a90526abf547f13c2bd6b1bb98aec947bd Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:20 +0100 +Subject: [PATCH 27/87] block/raw-posix: Employ error parameter + +RH-Author: Max Reitz +Message-id: <1383604354-12743-30-git-send-email-mreitz@redhat.com> +Patchwork-id: 55329 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 29/43] block/raw-posix: Employ error parameter +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Make use of the error parameter in the opening and creating functions in +block/raw-posix.c. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit e428e439df4d92ac42cb913a1dd19b86155eae86) + +Signed-off-by: Max Reitz +--- + block/raw-posix.c | 72 ++++++++++++++++++++++++++++++++++++---------- + tests/qemu-iotests/051.out | 2 +- + 2 files changed, 58 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 72 ++++++++++++++++++++++++++++++++++--------- + tests/qemu-iotests/051.out | 2 +- + 2 files changed, 58 insertions(+), 16 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 249bffb..74b15da 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -276,7 +276,7 @@ static QemuOptsList raw_runtime_opts = { + }; + + static int raw_open_common(BlockDriverState *bs, QDict *options, +- int bdrv_flags, int open_flags) ++ int bdrv_flags, int open_flags, Error **errp) + { + BDRVRawState *s = bs->opaque; + QemuOpts *opts; +@@ -287,8 +287,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + opts = qemu_opts_create_nofail(&raw_runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } +@@ -297,6 +296,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + + ret = raw_normalize_devicepath(&filename); + if (ret != 0) { ++ error_setg_errno(errp, -ret, "Could not normalize device path"); + goto fail; + } + +@@ -310,6 +310,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + if (ret == -EROFS) { + ret = -EACCES; + } ++ error_setg_errno(errp, -ret, "Could not open file"); + goto fail; + } + s->fd = fd; +@@ -318,6 +319,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + if (raw_set_aio(&s->aio_ctx, &s->use_aio, bdrv_flags)) { + qemu_close(fd); + ret = -errno; ++ error_setg_errno(errp, -ret, "Could not set AIO state"); + goto fail; + } + #endif +@@ -339,9 +341,15 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVRawState *s = bs->opaque; ++ Error *local_err = NULL; ++ int ret; + + s->type = FTYPE_FILE; +- return raw_open_common(bs, options, flags, 0); ++ ret = raw_open_common(bs, options, flags, 0, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } ++ return ret; + } + + static int raw_reopen_prepare(BDRVReopenState *state, +@@ -366,6 +374,7 @@ static int raw_reopen_prepare(BDRVReopenState *state, + * valid in the 'false' condition even if aio_ctx is set, and raw_set_aio() + * won't override aio_ctx if aio_ctx is non-NULL */ + if (raw_set_aio(&s->aio_ctx, &raw_s->use_aio, state->flags)) { ++ error_setg(errp, "Could not set AIO state"); + return -1; + } + #endif +@@ -417,6 +426,7 @@ static int raw_reopen_prepare(BDRVReopenState *state, + assert(!(raw_s->open_flags & O_CREAT)); + raw_s->fd = qemu_open(state->bs->filename, raw_s->open_flags); + if (raw_s->fd == -1) { ++ error_setg_errno(errp, errno, "Could not reopen file"); + ret = -1; + } + } +@@ -1060,12 +1070,15 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, + 0644); + if (fd < 0) { + result = -errno; ++ error_setg_errno(errp, -result, "Could not create file"); + } else { + if (ftruncate(fd, total_size * BDRV_SECTOR_SIZE) != 0) { + result = -errno; ++ error_setg_errno(errp, -result, "Could not resize file"); + } + if (qemu_close(fd) != 0) { + result = -errno; ++ error_setg_errno(errp, -result, "Could not close the new file"); + } + } + return result; +@@ -1336,6 +1349,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVRawState *s = bs->opaque; ++ Error *local_err = NULL; + int ret; + const char *filename = qdict_get_str(options, "filename"); + +@@ -1379,8 +1393,11 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + } + #endif + +- ret = raw_open_common(bs, options, flags, 0); ++ ret = raw_open_common(bs, options, flags, 0, &local_err); + if (ret < 0) { ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } + return ret; + } + +@@ -1388,6 +1405,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + ret = check_hdev_writable(s); + if (ret < 0) { + raw_close(bs); ++ error_setg_errno(errp, -ret, "The device is not writable"); + return ret; + } + } +@@ -1523,15 +1541,23 @@ static int hdev_create(const char *filename, QEMUOptionParameter *options, + } + + fd = qemu_open(filename, O_WRONLY | O_BINARY); +- if (fd < 0) +- return -errno; ++ if (fd < 0) { ++ ret = -errno; ++ error_setg_errno(errp, -ret, "Could not open device"); ++ return ret; ++ } + +- if (fstat(fd, &stat_buf) < 0) ++ if (fstat(fd, &stat_buf) < 0) { + ret = -errno; +- else if (!S_ISBLK(stat_buf.st_mode) && !S_ISCHR(stat_buf.st_mode)) ++ error_setg_errno(errp, -ret, "Could not stat device"); ++ } else if (!S_ISBLK(stat_buf.st_mode) && !S_ISCHR(stat_buf.st_mode)) { ++ error_setg(errp, ++ "The given file is neither a block nor a character device"); + ret = -ENODEV; +- else if (lseek(fd, 0, SEEK_END) < total_size * BDRV_SECTOR_SIZE) ++ } else if (lseek(fd, 0, SEEK_END) < total_size * BDRV_SECTOR_SIZE) { ++ error_setg(errp, "Device is too small"); + ret = -ENOSPC; ++ } + + qemu_close(fd); + return ret; +@@ -1578,14 +1604,19 @@ static int floppy_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVRawState *s = bs->opaque; ++ Error *local_err = NULL; + int ret; + + s->type = FTYPE_FD; + + /* open will not fail even if no floppy is inserted, so add O_NONBLOCK */ +- ret = raw_open_common(bs, options, flags, O_NONBLOCK); +- if (ret) ++ ret = raw_open_common(bs, options, flags, O_NONBLOCK, &local_err); ++ if (ret) { ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } + return ret; ++ } + + /* close fd so that we can reopen it as needed */ + qemu_close(s->fd); +@@ -1701,11 +1732,17 @@ static int cdrom_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVRawState *s = bs->opaque; ++ Error *local_err = NULL; ++ int ret; + + s->type = FTYPE_CD; + + /* open will not fail even if no CD is inserted, so add O_NONBLOCK */ +- return raw_open_common(bs, options, flags, O_NONBLOCK); ++ ret = raw_open_common(bs, options, flags, O_NONBLOCK, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } ++ return ret; + } + + static int cdrom_probe_device(const char *filename) +@@ -1809,13 +1846,18 @@ static BlockDriver bdrv_host_cdrom = { + static int cdrom_open(BlockDriverState *bs, QDict *options, int flags) + { + BDRVRawState *s = bs->opaque; ++ Error *local_err = NULL; + int ret; + + s->type = FTYPE_CD; + +- ret = raw_open_common(bs, options, flags, 0); +- if (ret) ++ ret = raw_open_common(bs, options, flags, 0, &local_err); ++ if (ret) { ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } + return ret; ++ } + + /* make sure the door isn't locked at this time */ + ioctl(s->fd, CDIOCALLOW); +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index fe0b347..54a6b3a 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -166,6 +166,6 @@ Testing: -drive file=foo:bar + QEMU_PROG: -drive file=foo:bar: could not open disk image foo:bar: Unknown protocol + + Testing: -drive file.filename=foo:bar +-QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: Could not open 'foo:bar': No such file or directory ++QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: Could not open file: No such file or directory + + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-block-raw-posix-Fix-disk-corruption-in-try_fiemap.patch b/SOURCES/kvm-block-raw-posix-Fix-disk-corruption-in-try_fiemap.patch new file mode 100644 index 0000000..45b713f --- /dev/null +++ b/SOURCES/kvm-block-raw-posix-Fix-disk-corruption-in-try_fiemap.patch @@ -0,0 +1,58 @@ +From 87fe4805dfc783c221090d90ded9c01a8a7e6535 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:15 +0100 +Subject: [PATCH 36/41] block/raw-posix: Fix disk corruption in try_fiemap +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1416324620-16229-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 62437 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 2/7] block/raw-posix: Fix disk corruption in try_fiemap +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +From: Tony Breeds + +Using fiemap without FIEMAP_FLAG_SYNC is a known corrupter. + +Add the FIEMAP_FLAG_SYNC flag to the FS_IOC_FIEMAP ioctl. This has +the downside of significantly reducing performance. + +Reported-By: Michael Steffens +Signed-off-by: Tony Breeds +Cc: Kevin Wolf +Cc: Markus Armbruster +Cc: Stefan Hajnoczi +Cc: Max Reitz +Cc: Pádraig Brady +Cc: Eric Blake +Reviewed-by: Eric Blake +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 38c4d0aea3e1264c86e282d99560330adf2b6e25) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 5f57412..8d31628 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1325,7 +1325,7 @@ static int64_t try_fiemap(BlockDriverState *bs, off_t start, off_t *data, + + f.fm.fm_start = start; + f.fm.fm_length = (int64_t)nb_sectors * BDRV_SECTOR_SIZE; +- f.fm.fm_flags = 0; ++ f.fm.fm_flags = FIEMAP_FLAG_SYNC; + f.fm.fm_extent_count = 1; + f.fm.fm_reserved = 0; + if (ioctl(s->fd, FS_IOC_FIEMAP, &f) == -1) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-raw-posix-Open-file-descriptor-O_RDWR-to-work-.patch b/SOURCES/kvm-block-raw-posix-Open-file-descriptor-O_RDWR-to-work-.patch new file mode 100644 index 0000000..fc8ca11 --- /dev/null +++ b/SOURCES/kvm-block-raw-posix-Open-file-descriptor-O_RDWR-to-work-.patch @@ -0,0 +1,68 @@ +From 9452583824b50cb6f095c5ec1894b38df7b01175 Mon Sep 17 00:00:00 2001 +Message-Id: <9452583824b50cb6f095c5ec1894b38df7b01175.1464449390.git.jen@redhat.com> +In-Reply-To: +References: +From: Kevin Wolf +Date: Mon, 23 May 2016 11:28:41 -0400 +Subject: [CHANGE 3/3] block/raw-posix: Open file descriptor O_RDWR to work + around glibc posix_fallocate emulation issue. +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Kevin Wolf +Message-id: <1464002921-1079-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 70425 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] block/raw-posix: Open file descriptor O_RDWR to work around glibc posix_fallocate emulation issue. +Bugzilla: 1268345 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Richard Jones + +From: "Richard W.M. Jones" + +The following command fails on an NFS mountpoint: + + $ qemu-img create -f qcow2 -o preallocation=falloc disk.img 262144 + Formatting 'disk.img', fmt=qcow2 size=262144 encryption=off cluster_size=65536 preallocation='falloc' lazy_refcounts=off + qemu-img: disk.img: Could not preallocate data for the new file: Bad file descriptor + +The reason turns out to be because NFS doesn't support the +posix_fallocate call. glibc emulates it instead. However glibc's +emulation involves using the pread(2) syscall. The pread syscall +fails with EBADF if the file descriptor is opened without the read +open-flag (ie. open (..., O_WRONLY)). + +I contacted glibc upstream about this, and their response is here: + + https://bugzilla.redhat.com/show_bug.cgi?id=1265196#c9 + +There are two possible fixes: Use Linux fallocate directly, or (this +fix) work around the problem in qemu by opening the file with O_RDWR +instead of O_WRONLY. + +Signed-off-by: Richard W.M. Jones +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 73ba05d936e82fe01b2b2cf987bf3aecb4792af5) +Signed-off-by: Jeff E. Nelson +--- + block/raw-posix.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 1f5275f..92fcb6c 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1265,7 +1265,7 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, + options++; + } + +- fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, ++ fd = qemu_open(filename, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, + 0644); + if (fd < 0) { + result = -errno; +-- +2.5.5 + diff --git a/SOURCES/kvm-block-raw-posix-Try-both-FIEMAP-and-SEEK_HOLE.patch b/SOURCES/kvm-block-raw-posix-Try-both-FIEMAP-and-SEEK_HOLE.patch new file mode 100644 index 0000000..797ba1a --- /dev/null +++ b/SOURCES/kvm-block-raw-posix-Try-both-FIEMAP-and-SEEK_HOLE.patch @@ -0,0 +1,224 @@ +From 04981be7338ba396410cdab91612c17d6383d3a3 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:14 +0100 +Subject: [PATCH 35/41] block/raw-posix: Try both FIEMAP and SEEK_HOLE + +Message-id: <1416324620-16229-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 62436 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 1/7] block/raw-posix: Try both FIEMAP and SEEK_HOLE +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +The current version of raw-posix always uses ioctl(FS_IOC_FIEMAP) if +FIEMAP is available; lseek with SEEK_HOLE/SEEK_DATA are not even +compiled in in this case. However, there may be implementations which +support the latter but not the former (e.g., NFSv4.2) as well as vice +versa. + +To cover both cases, try FIEMAP first (as this will return -ENOTSUP if +not supported instead of returning a failsafe value (everything +allocated as a single extent)) and if that does not work, fall back to +SEEK_HOLE/SEEK_DATA. + +Signed-off-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4f11aa8a40351b28c0e67c7276e0003b38cc46ac) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 127 +++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 77 insertions(+), 50 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index cfe7452..5f57412 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -147,6 +147,9 @@ typedef struct BDRVRawState { + bool has_discard:1; + bool has_write_zeroes:1; + bool discard_zeroes:1; ++#ifdef CONFIG_FIEMAP ++ bool skip_fiemap; ++#endif + } BDRVRawState; + + typedef struct BDRVRawReopenState { +@@ -1305,53 +1308,29 @@ out: + return result; + } + +-/* +- * Returns true iff the specified sector is present in the disk image. Drivers +- * not implementing the functionality are assumed to not support backing files, +- * hence all their sectors are reported as allocated. +- * +- * If 'sector_num' is beyond the end of the disk image the return value is 0 +- * and 'pnum' is set to 0. +- * +- * 'pnum' is set to the number of sectors (including and immediately following +- * the specified sector) that are known to be in the same +- * allocated/unallocated state. +- * +- * 'nb_sectors' is the max value 'pnum' should be set to. If nb_sectors goes +- * beyond the end of the disk image it will be clamped. +- */ +-static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, +- int64_t sector_num, +- int nb_sectors, int *pnum) ++static int64_t try_fiemap(BlockDriverState *bs, off_t start, off_t *data, ++ off_t *hole, int nb_sectors, int *pnum) + { +- off_t start, data, hole; +- int64_t ret; +- +- ret = fd_open(bs); +- if (ret < 0) { +- return ret; +- } +- +- start = sector_num * BDRV_SECTOR_SIZE; +- ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; +- + #ifdef CONFIG_FIEMAP +- + BDRVRawState *s = bs->opaque; ++ int64_t ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; + struct { + struct fiemap fm; + struct fiemap_extent fe; + } f; + ++ if (s->skip_fiemap) { ++ return -ENOTSUP; ++ } ++ + f.fm.fm_start = start; + f.fm.fm_length = (int64_t)nb_sectors * BDRV_SECTOR_SIZE; + f.fm.fm_flags = 0; + f.fm.fm_extent_count = 1; + f.fm.fm_reserved = 0; + if (ioctl(s->fd, FS_IOC_FIEMAP, &f) == -1) { +- /* Assume everything is allocated. */ +- *pnum = nb_sectors; +- return ret; ++ s->skip_fiemap = true; ++ return -errno; + } + + if (f.fm.fm_mapped_extents == 0) { +@@ -1359,44 +1338,92 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + * f.fm.fm_start + f.fm.fm_length must be clamped to the file size! + */ + off_t length = lseek(s->fd, 0, SEEK_END); +- hole = f.fm.fm_start; +- data = MIN(f.fm.fm_start + f.fm.fm_length, length); ++ *hole = f.fm.fm_start; ++ *data = MIN(f.fm.fm_start + f.fm.fm_length, length); + } else { +- data = f.fe.fe_logical; +- hole = f.fe.fe_logical + f.fe.fe_length; ++ *data = f.fe.fe_logical; ++ *hole = f.fe.fe_logical + f.fe.fe_length; + if (f.fe.fe_flags & FIEMAP_EXTENT_UNWRITTEN) { + ret |= BDRV_BLOCK_ZERO; + } + } + +-#elif defined SEEK_HOLE && defined SEEK_DATA ++ return ret; ++#else ++ return -ENOTSUP; ++#endif ++} + ++static int64_t try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, ++ off_t *hole, int *pnum) ++{ ++#if defined SEEK_HOLE && defined SEEK_DATA + BDRVRawState *s = bs->opaque; + +- hole = lseek(s->fd, start, SEEK_HOLE); +- if (hole == -1) { ++ *hole = lseek(s->fd, start, SEEK_HOLE); ++ if (*hole == -1) { + /* -ENXIO indicates that sector_num was past the end of the file. + * There is a virtual hole there. */ + assert(errno != -ENXIO); + +- /* Most likely EINVAL. Assume everything is allocated. */ +- *pnum = nb_sectors; +- return ret; ++ return -errno; + } + +- if (hole > start) { +- data = start; ++ if (*hole > start) { ++ *data = start; + } else { + /* On a hole. We need another syscall to find its end. */ +- data = lseek(s->fd, start, SEEK_DATA); +- if (data == -1) { +- data = lseek(s->fd, 0, SEEK_END); ++ *data = lseek(s->fd, start, SEEK_DATA); ++ if (*data == -1) { ++ *data = lseek(s->fd, 0, SEEK_END); + } + } ++ ++ return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; + #else +- data = 0; +- hole = start + nb_sectors * BDRV_SECTOR_SIZE; ++ return -ENOTSUP; + #endif ++} ++ ++/* ++ * Returns true iff the specified sector is present in the disk image. Drivers ++ * not implementing the functionality are assumed to not support backing files, ++ * hence all their sectors are reported as allocated. ++ * ++ * If 'sector_num' is beyond the end of the disk image the return value is 0 ++ * and 'pnum' is set to 0. ++ * ++ * 'pnum' is set to the number of sectors (including and immediately following ++ * the specified sector) that are known to be in the same ++ * allocated/unallocated state. ++ * ++ * 'nb_sectors' is the max value 'pnum' should be set to. If nb_sectors goes ++ * beyond the end of the disk image it will be clamped. ++ */ ++static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, ++ int64_t sector_num, ++ int nb_sectors, int *pnum) ++{ ++ off_t start, data = 0, hole = 0; ++ int64_t ret; ++ ++ ret = fd_open(bs); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ start = sector_num * BDRV_SECTOR_SIZE; ++ ++ ret = try_fiemap(bs, start, &data, &hole, nb_sectors, pnum); ++ if (ret < 0) { ++ ret = try_seek_hole(bs, start, &data, &hole, pnum); ++ if (ret < 0) { ++ /* Assume everything is allocated. */ ++ data = 0; ++ hole = start + nb_sectors * BDRV_SECTOR_SIZE; ++ ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; ++ } ++ } + + if (data <= start) { + /* On a data extent, compute sectors to the end of the extent. */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-raw-posix-use-seek_hole-ahead-of-fiemap.patch b/SOURCES/kvm-block-raw-posix-use-seek_hole-ahead-of-fiemap.patch new file mode 100644 index 0000000..2a8f11e --- /dev/null +++ b/SOURCES/kvm-block-raw-posix-use-seek_hole-ahead-of-fiemap.patch @@ -0,0 +1,63 @@ +From 1e5cc3d3a5f9bf21d1df2967ac76b15d0e384950 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:16 +0100 +Subject: [PATCH 37/41] block/raw-posix: use seek_hole ahead of fiemap +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1416324620-16229-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 62438 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 3/7] block/raw-posix: use seek_hole ahead of fiemap +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +From: Tony Breeds + +try_fiemap() uses FIEMAP_FLAG_SYNC which has a significant performance +impact. + +Prefer seek_hole() over fiemap() to avoid this impact where possible. +seek_hole is more widely used and, arguably, has potential to be +optimised in the kernel. + +Reported-By: Michael Steffens +Signed-off-by: Tony Breeds +Cc: Kevin Wolf +Cc: Markus Armbruster +Cc: Stefan Hajnoczi +Cc: Max Reitz +Cc: Pádraig Brady +Cc: Eric Blake +Reviewed-by: Eric Blake +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 7c15903789953ead14a417882657d52dc0c19a24) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 8d31628..781ebf3 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1414,9 +1414,9 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + + start = sector_num * BDRV_SECTOR_SIZE; + +- ret = try_fiemap(bs, start, &data, &hole, nb_sectors, pnum); ++ ret = try_seek_hole(bs, start, &data, &hole, pnum); + if (ret < 0) { +- ret = try_seek_hole(bs, start, &data, &hole, pnum); ++ ret = try_fiemap(bs, start, &data, &hole, nb_sectors, pnum); + if (ret < 0) { + /* Assume everything is allocated. */ + data = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-raw-win32-Always-use-errno-in-hdev_open.patch b/SOURCES/kvm-block-raw-win32-Always-use-errno-in-hdev_open.patch new file mode 100644 index 0000000..93e8082 --- /dev/null +++ b/SOURCES/kvm-block-raw-win32-Always-use-errno-in-hdev_open.patch @@ -0,0 +1,60 @@ +From 96aa5a9a7d0dc4bb47e421168857eacbb36065a8 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:21 +0100 +Subject: [PATCH 28/87] block/raw-win32: Always use -errno in hdev_open + +RH-Author: Max Reitz +Message-id: <1383604354-12743-31-git-send-email-mreitz@redhat.com> +Patchwork-id: 55330 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 30/43] block/raw-win32: Always use -errno in hdev_open +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +On one occasion, hdev_open() returned -1 in case of an unknown error +instead of a proper -errno value. Adjust this to match the behavior of +raw_open() (in raw-win32), which is to return -EINVAL in this case. +Also, change the call to error_setg*() to match the one in raw_open() as +well. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 45d57f6e718e44e55780bcf1d09fa140dce7ec08) + +Signed-off-by: Max Reitz +--- + block/raw-win32.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/raw-win32.c | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 5a60ca5..3e0251f 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -587,12 +587,11 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + int err = GetLastError(); + + if (err == ERROR_ACCESS_DENIED) { +- error_setg_errno(errp, EACCES, "Could not open device"); + ret = -EACCES; + } else { +- error_setg(errp, "Could not open device"); +- ret = -1; ++ ret = -EINVAL; + } ++ error_setg_errno(errp, -ret, "Could not open device"); + goto done; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-raw-win32-Employ-error-parameter.patch b/SOURCES/kvm-block-raw-win32-Employ-error-parameter.patch new file mode 100644 index 0000000..1b4ac8a --- /dev/null +++ b/SOURCES/kvm-block-raw-win32-Employ-error-parameter.patch @@ -0,0 +1,116 @@ +From 50ff46f7848a999267c7f15dac727fe690dabfd7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:17 +0100 +Subject: [PATCH 24/87] block/raw-win32: Employ error parameter + +RH-Author: Max Reitz +Message-id: <1383604354-12743-27-git-send-email-mreitz@redhat.com> +Patchwork-id: 55326 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 26/43] block/raw-win32: Employ error parameter +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Make use of the error parameter in the opening and creating functions in +block/raw-win32.c. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit c6252b7cea0dfa893cf1f49de3a58f222e910783) + +Signed-off-by: Max Reitz +--- + block/raw-win32.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/raw-win32.c | 16 +++++++++++----- + 1 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 9ebb083..5a60ca5 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -250,8 +250,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + opts = qemu_opts_create_nofail(&raw_runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } +@@ -263,6 +262,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + if ((flags & BDRV_O_NATIVE_AIO) && aio == NULL) { + aio = win32_aio_init(); + if (aio == NULL) { ++ error_setg(errp, "Could not initialize AIO"); + ret = -EINVAL; + goto fail; + } +@@ -279,6 +279,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + } else { + ret = -EINVAL; + } ++ error_setg_errno(errp, -ret, "Could not open file"); + goto fail; + } + +@@ -286,6 +287,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + ret = win32_aio_attach(aio, s->hfile); + if (ret < 0) { + CloseHandle(s->hfile); ++ error_setg_errno(errp, -ret, "Could not enable AIO"); + goto fail; + } + s->aio = aio; +@@ -437,8 +439,10 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, + + fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, + 0644); +- if (fd < 0) ++ if (fd < 0) { ++ error_setg_errno(errp, errno, "Could not create file"); + return -EIO; ++ } + set_sparse(fd); + ftruncate(fd, total_size * 512); + qemu_close(fd); +@@ -547,8 +551,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + QemuOpts *opts = qemu_opts_create_nofail(&raw_runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto done; + } +@@ -557,6 +560,7 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + + if (strstart(filename, "/dev/cdrom", NULL)) { + if (find_cdrom(device_name, sizeof(device_name)) < 0) { ++ error_setg(errp, "Could not open CD-ROM drive"); + ret = -ENOENT; + goto done; + } +@@ -583,8 +587,10 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags, + int err = GetLastError(); + + if (err == ERROR_ACCESS_DENIED) { ++ error_setg_errno(errp, EACCES, "Could not open device"); + ret = -EACCES; + } else { ++ error_setg(errp, "Could not open device"); + ret = -1; + } + goto done; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-remove-QED-.bdrv_make_empty-implementation.patch b/SOURCES/kvm-block-remove-QED-.bdrv_make_empty-implementation.patch new file mode 100644 index 0000000..cbae3e9 --- /dev/null +++ b/SOURCES/kvm-block-remove-QED-.bdrv_make_empty-implementation.patch @@ -0,0 +1,61 @@ +From ebb0a0980d8347add30842be49555e4f07a4a047 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 11 Feb 2014 16:14:29 +0100 +Subject: [PATCH 23/28] block: remove QED .bdrv_make_empty implementation + +RH-Author: Jeffrey Cody +Message-id: <2f8e3c76feeda371ed325fb08b26f3bf7e776db3.1392134912.git.jcody@redhat.com> +Patchwork-id: 57219 +O-Subject: [RHEL7 qemu-kvm PATCH 5/6] block: remove QED .bdrv_make_empty implementation +Bugzilla: 1047254 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +The QED .bdrv_make_empty() implementation does nothing but return +-ENOTSUP, which causes problems in bdrv_commit(). Since the function +stub exists for QED, it is called, which then always returns an error. + +The proper way to not support an optional driver function stub is to +just not implement it, so let's remove the stub. + +Signed-off-by: Jeff Cody +Reviewed-by: Benoit Canet +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 55aff7f133b0eb20b2c8a2a3e1307240aab8044c) +--- + block/qed.c | 6 ------ + 1 file changed, 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qed.c | 6 ------ + 1 files changed, 0 insertions(+), 6 deletions(-) + +diff --git a/block/qed.c b/block/qed.c +index da68152..be5945b 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -731,11 +731,6 @@ static int64_t coroutine_fn bdrv_qed_co_get_block_status(BlockDriverState *bs, + return cb.status; + } + +-static int bdrv_qed_make_empty(BlockDriverState *bs) +-{ +- return -ENOTSUP; +-} +- + static BDRVQEDState *acb_to_s(QEDAIOCB *acb) + { + return acb->common.bs->opaque; +@@ -1617,7 +1612,6 @@ static BlockDriver bdrv_qed = { + .bdrv_create = bdrv_qed_create, + .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = bdrv_qed_co_get_block_status, +- .bdrv_make_empty = bdrv_qed_make_empty, + .bdrv_aio_readv = bdrv_qed_aio_readv, + .bdrv_aio_writev = bdrv_qed_aio_writev, + .bdrv_co_write_zeroes = bdrv_qed_co_write_zeroes, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-remove-bdrv_is_allocated_above-bdrv_co_is_allo.patch b/SOURCES/kvm-block-remove-bdrv_is_allocated_above-bdrv_co_is_allo.patch new file mode 100644 index 0000000..0b3bd78 --- /dev/null +++ b/SOURCES/kvm-block-remove-bdrv_is_allocated_above-bdrv_co_is_allo.patch @@ -0,0 +1,166 @@ +From 6a307262a0a30089eff547a9e6489ae8fd9d242d Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:32 +0200 +Subject: [PATCH 07/81] block: remove bdrv_is_allocated_above/bdrv_co_is_allocated_above distinction + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-8-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54990 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 07/26] block: remove bdrv_is_allocated_above/bdrv_co_is_allocated_above distinction +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Now that bdrv_is_allocated detects coroutine context, the two can +use the same code. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4f5786376e41980e78af45a123c56ebdc5295099) +--- + block.c | 46 ++++------------------------------------------ + block/commit.c | 6 +++--- + block/mirror.c | 4 ++-- + block/stream.c | 4 ++-- + include/block/block.h | 4 ---- + 5 files changed, 11 insertions(+), 53 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 46 ++++------------------------------------------ + block/commit.c | 6 +++--- + block/mirror.c | 4 ++-- + block/stream.c | 4 ++-- + include/block/block.h | 4 ---- + 5 files changed, 11 insertions(+), 53 deletions(-) + +diff --git a/block.c b/block.c +index 9ea8221..46d9420 100644 +--- a/block.c ++++ b/block.c +@@ -3110,10 +3110,10 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, + * allocated/unallocated state. + * + */ +-int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top, +- BlockDriverState *base, +- int64_t sector_num, +- int nb_sectors, int *pnum) ++int bdrv_is_allocated_above(BlockDriverState *top, ++ BlockDriverState *base, ++ int64_t sector_num, ++ int nb_sectors, int *pnum) + { + BlockDriverState *intermediate; + int ret, n = nb_sectors; +@@ -3149,44 +3149,6 @@ int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top, + return 0; + } + +-/* Coroutine wrapper for bdrv_is_allocated_above() */ +-static void coroutine_fn bdrv_is_allocated_above_co_entry(void *opaque) +-{ +- BdrvCoIsAllocatedData *data = opaque; +- BlockDriverState *top = data->bs; +- BlockDriverState *base = data->base; +- +- data->ret = bdrv_co_is_allocated_above(top, base, data->sector_num, +- data->nb_sectors, data->pnum); +- data->done = true; +-} +- +-/* +- * Synchronous wrapper around bdrv_co_is_allocated_above(). +- * +- * See bdrv_co_is_allocated_above() for details. +- */ +-int bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base, +- int64_t sector_num, int nb_sectors, int *pnum) +-{ +- Coroutine *co; +- BdrvCoIsAllocatedData data = { +- .bs = top, +- .base = base, +- .sector_num = sector_num, +- .nb_sectors = nb_sectors, +- .pnum = pnum, +- .done = false, +- }; +- +- co = qemu_coroutine_create(bdrv_is_allocated_above_co_entry); +- qemu_coroutine_enter(co, &data); +- while (!data.done) { +- qemu_aio_wait(); +- } +- return data.ret; +-} +- + BlockInfo *bdrv_query_info(BlockDriverState *bs) + { + BlockInfo *info = g_malloc0(sizeof(*info)); +diff --git a/block/commit.c b/block/commit.c +index 553447e..74c209a 100644 +--- a/block/commit.c ++++ b/block/commit.c +@@ -108,9 +108,9 @@ wait: + break; + } + /* Copy if allocated above the base */ +- ret = bdrv_co_is_allocated_above(top, base, sector_num, +- COMMIT_BUFFER_SIZE / BDRV_SECTOR_SIZE, +- &n); ++ ret = bdrv_is_allocated_above(top, base, sector_num, ++ COMMIT_BUFFER_SIZE / BDRV_SECTOR_SIZE, ++ &n); + copy = (ret == 1); + trace_commit_one_iteration(s, sector_num, n, ret); + if (copy) { +diff --git a/block/mirror.c b/block/mirror.c +index 1ae724f..dad1e3e 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -338,8 +338,8 @@ static void coroutine_fn mirror_run(void *opaque) + base = s->mode == MIRROR_SYNC_MODE_FULL ? NULL : bs->backing_hd; + for (sector_num = 0; sector_num < end; ) { + int64_t next = (sector_num | (sectors_per_chunk - 1)) + 1; +- ret = bdrv_co_is_allocated_above(bs, base, +- sector_num, next - sector_num, &n); ++ ret = bdrv_is_allocated_above(bs, base, ++ sector_num, next - sector_num, &n); + + if (ret < 0) { + goto immediate_exit; +diff --git a/block/stream.c b/block/stream.c +index f8efa8a..9674c31 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -123,8 +123,8 @@ wait: + } else { + /* Copy if allocated in the intermediate images. Limit to the + * known-unallocated area [sector_num, sector_num+n). */ +- ret = bdrv_co_is_allocated_above(bs->backing_hd, base, +- sector_num, n, &n); ++ ret = bdrv_is_allocated_above(bs->backing_hd, base, ++ sector_num, n, &n); + + /* Finish early if end of backing file has been reached */ + if (ret == 0 && n == 0) { +diff --git a/include/block/block.h b/include/block/block.h +index 1932e67..ec4d4aa 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -192,10 +192,6 @@ int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num, + */ + int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, int64_t sector_num, + int nb_sectors); +-int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top, +- BlockDriverState *base, +- int64_t sector_num, +- int nb_sectors, int *pnum); + BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, + const char *backing_file); + int bdrv_get_backing_file_depth(BlockDriverState *bs); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-remove-qcow2-.bdrv_make_empty-implementation.patch b/SOURCES/kvm-block-remove-qcow2-.bdrv_make_empty-implementation.patch new file mode 100644 index 0000000..fed083d --- /dev/null +++ b/SOURCES/kvm-block-remove-qcow2-.bdrv_make_empty-implementation.patch @@ -0,0 +1,75 @@ +From 6470641f3ae91f9024ac19c9884a583074930c78 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 11 Feb 2014 16:14:30 +0100 +Subject: [PATCH 24/28] block: remove qcow2 .bdrv_make_empty implementation + +RH-Author: Jeffrey Cody +Message-id: <342af85f3ded3eeaa140e44b2f4956bd6d1ee45c.1392134912.git.jcody@redhat.com> +Patchwork-id: 57220 +O-Subject: [RHEL7 qemu-kvm PATCH 6/6] block: remove qcow2 .bdrv_make_empty implementation +Bugzilla: 1047254 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +The QCOW2 .bdrv_make_empty implementation always returns 0 for success, +but does not actually do anything. + +The proper way to not support an optional driver function stub is to +just not implement it, so let's remove the stub. + +Signed-off-by: Jeff Cody +Reviewed-by: Benoit Canet +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 14b4a8b9c654b625dea0f532fae5722781fd0a7d) +--- + block/qcow2.c | 21 --------------------- + 1 file changed, 21 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 21 --------------------- + 1 files changed, 0 insertions(+), 21 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 05ea0cd..25a5b5e 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1678,26 +1678,6 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + return ret; + } + +-static int qcow2_make_empty(BlockDriverState *bs) +-{ +-#if 0 +- /* XXX: not correct */ +- BDRVQcowState *s = bs->opaque; +- uint32_t l1_length = s->l1_size * sizeof(uint64_t); +- int ret; +- +- memset(s->l1_table, 0, l1_length); +- if (bdrv_pwrite(bs->file, s->l1_table_offset, s->l1_table, l1_length) < 0) +- return -1; +- ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length); +- if (ret < 0) +- return ret; +- +- l2_cache_reset(bs); +-#endif +- return 0; +-} +- + static coroutine_fn int qcow2_co_write_zeroes(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, BdrvRequestFlags flags) + { +@@ -2246,7 +2226,6 @@ static BlockDriver bdrv_qcow2 = { + .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = qcow2_co_get_block_status, + .bdrv_set_key = qcow2_set_key, +- .bdrv_make_empty = qcow2_make_empty, + + .bdrv_co_readv = qcow2_co_readv, + .bdrv_co_writev = qcow2_co_writev, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-rename-buffer_alignment-to-guest_block_size.patch b/SOURCES/kvm-block-rename-buffer_alignment-to-guest_block_size.patch new file mode 100644 index 0000000..5b2046d --- /dev/null +++ b/SOURCES/kvm-block-rename-buffer_alignment-to-guest_block_size.patch @@ -0,0 +1,178 @@ +From 2c5f92a08224373b01d7d46053f46294fa02d00a Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 29 Nov 2011 11:35:47 +0100 +Subject: [PATCH 09/37] block: rename buffer_alignment to guest_block_size + +Message-id: <1392117622-28812-10-git-send-email-kwolf@redhat.com> +Patchwork-id: 57174 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 09/37] block: rename buffer_alignment to guest_block_size +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +The alignment field is now set to the value that is promised to the +guest, rather than required by the host. The next patches will make +QEMU aware of the host-provided values, so make this clear. + +The alignment is also not about memory buffers, but about the sectors on +the disk, change the documentation of the field. + +At this point, the field is set by the device emulation, but completely +ignored by the block layer. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 1b7fd729559c6d3b273303aa48bc653ceef08747) + +Signed-off-by: Kevin Wolf +--- + block.c | 10 +++++----- + hw/block/virtio-blk.c | 2 +- + hw/ide/core.c | 2 +- + hw/scsi/scsi-disk.c | 2 +- + hw/scsi/scsi-generic.c | 2 +- + include/block/block.h | 2 +- + include/block/block_int.h | 4 ++-- + 7 files changed, 12 insertions(+), 12 deletions(-) +--- + block.c | 10 +++++----- + hw/block/virtio-blk.c | 2 +- + hw/ide/core.c | 2 +- + hw/scsi/scsi-disk.c | 2 +- + hw/scsi/scsi-generic.c | 2 +- + include/block/block.h | 2 +- + include/block/block_int.h | 4 ++-- + 7 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/block.c b/block.c +index c85f43e..f2102bc 100644 +--- a/block.c ++++ b/block.c +@@ -779,7 +779,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + } + + bs->open_flags = flags; +- bs->buffer_alignment = 512; ++ bs->guest_block_size = 512; + bs->zero_beyond_eof = true; + open_flags = bdrv_open_flags(bs, flags); + bs->read_only = !(open_flags & BDRV_O_RDWR); +@@ -1614,7 +1614,7 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest, + bs_dest->dev_ops = bs_src->dev_ops; + bs_dest->dev_opaque = bs_src->dev_opaque; + bs_dest->dev = bs_src->dev; +- bs_dest->buffer_alignment = bs_src->buffer_alignment; ++ bs_dest->guest_block_size = bs_src->guest_block_size; + bs_dest->copy_on_read = bs_src->copy_on_read; + + bs_dest->enable_write_cache = bs_src->enable_write_cache; +@@ -1766,7 +1766,7 @@ void bdrv_detach_dev(BlockDriverState *bs, void *dev) + bs->dev = NULL; + bs->dev_ops = NULL; + bs->dev_opaque = NULL; +- bs->buffer_alignment = 512; ++ bs->guest_block_size = 512; + } + + /* TODO change to return DeviceState * when all users are qdevified */ +@@ -4738,9 +4738,9 @@ BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs, + return NULL; + } + +-void bdrv_set_buffer_alignment(BlockDriverState *bs, int align) ++void bdrv_set_guest_block_size(BlockDriverState *bs, int align) + { +- bs->buffer_alignment = align; ++ bs->guest_block_size = align; + } + + void *qemu_blockalign(BlockDriverState *bs, size_t size) +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index aa37cc9..a96207d 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -721,7 +721,7 @@ static int virtio_blk_device_init(VirtIODevice *vdev) + register_savevm(qdev, "virtio-blk", virtio_blk_id++, 2, + virtio_blk_save, virtio_blk_load, s); + bdrv_set_dev_ops(s->bs, &virtio_block_ops, s); +- bdrv_set_buffer_alignment(s->bs, s->conf->logical_block_size); ++ bdrv_set_guest_block_size(s->bs, s->conf->logical_block_size); + + bdrv_iostatus_enable(s->bs); + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 8b3dde6..c172c71 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -2007,7 +2007,7 @@ int ide_init_drive(IDEState *s, BlockDriverState *bs, IDEDriveKind kind, + s->smart_selftest_count = 0; + if (kind == IDE_CD) { + bdrv_set_dev_ops(bs, &ide_cd_block_ops, s); +- bdrv_set_buffer_alignment(bs, 2048); ++ bdrv_set_guest_block_size(bs, 2048); + } else { + if (!bdrv_is_inserted(s->bs)) { + error_report("Device needs media, but drive is empty"); +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index bce617c..6491091 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -2254,7 +2254,7 @@ static int scsi_initfn(SCSIDevice *dev) + } else { + bdrv_set_dev_ops(s->qdev.conf.bs, &scsi_disk_block_ops, s); + } +- bdrv_set_buffer_alignment(s->qdev.conf.bs, s->qdev.blocksize); ++ bdrv_set_guest_block_size(s->qdev.conf.bs, s->qdev.blocksize); + + bdrv_iostatus_enable(s->qdev.conf.bs); + add_boot_device_path(s->qdev.conf.bootindex, &dev->qdev, NULL); +diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c +index 8f195be..f08b64e 100644 +--- a/hw/scsi/scsi-generic.c ++++ b/hw/scsi/scsi-generic.c +@@ -210,7 +210,7 @@ static void scsi_read_complete(void * opaque, int ret) + s->blocksize = ldl_be_p(&r->buf[8]); + s->max_lba = ldq_be_p(&r->buf[0]); + } +- bdrv_set_buffer_alignment(s->conf.bs, s->blocksize); ++ bdrv_set_guest_block_size(s->conf.bs, s->blocksize); + + scsi_req_data(&r->req, len); + if (!r->req.io_canceled) { +diff --git a/include/block/block.h b/include/block/block.h +index 9d1ce59..2a9aa5b 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -409,7 +409,7 @@ void bdrv_img_create(const char *filename, const char *fmt, + /* Returns the alignment in bytes that is required so that no bounce buffer + * is required throughout the stack */ + size_t bdrv_opt_mem_align(BlockDriverState *bs); +-void bdrv_set_buffer_alignment(BlockDriverState *bs, int align); ++void bdrv_set_guest_block_size(BlockDriverState *bs, int align); + void *qemu_blockalign(BlockDriverState *bs, size_t size); + bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); + +diff --git a/include/block/block_int.h b/include/block/block_int.h +index ddbd53d..0445e6b 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -307,8 +307,8 @@ struct BlockDriverState { + /* Whether produces zeros when read beyond eof */ + bool zero_beyond_eof; + +- /* the memory alignment required for the buffers handled by this driver */ +- int buffer_alignment; ++ /* the block size for which the guest device expects atomicity */ ++ int guest_block_size; + + /* do we need to tell the quest if we have a volatile write cache? */ + int enable_write_cache; +-- +1.7.1 + diff --git a/SOURCES/kvm-block-resize-backing-file-image-during-offline-commi.patch b/SOURCES/kvm-block-resize-backing-file-image-during-offline-commi.patch new file mode 100644 index 0000000..4eb8344 --- /dev/null +++ b/SOURCES/kvm-block-resize-backing-file-image-during-offline-commi.patch @@ -0,0 +1,90 @@ +From c659199f9bf37c798bd741ddd151db213d5d73f8 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 11 Feb 2014 16:14:25 +0100 +Subject: [PATCH 19/28] block: resize backing file image during offline commit, if necessary + +RH-Author: Jeffrey Cody +Message-id: <54cb47d8cd589585e9788df80b9612ea527e193d.1392134912.git.jcody@redhat.com> +Patchwork-id: 57215 +O-Subject: [RHEL7 qemu-kvm PATCH 1/6] block: resize backing file image during offline commit, if necessary +Bugzilla: 1047254 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +Currently, if an image file is logically larger than its backing file, +committing it via 'qemu-img commit' will fail. + +For instance, if we have a base image with a virtual size 10G, and a +snapshot image of size 20G, then committing the snapshot offline with +'qemu-img commit' will likely fail. + +This will automatically attempt to resize the base image, if the +snapshot image to be committed is larger. + +Signed-off-by: Jeff Cody +Reviewed-by: Fam Zheng +Reviewed-by: Eric Blake +Reviewed-by: Benoit Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 72706ea4cd38bfcb151265df0178ba21863d7518) +--- + block.c | 28 +++++++++++++++++++++++++--- + 1 file changed, 25 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 28 +++++++++++++++++++++++++--- + 1 files changed, 25 insertions(+), 3 deletions(-) + +diff --git a/block.c b/block.c +index 1b57236..c7aa285 100644 +--- a/block.c ++++ b/block.c +@@ -1947,10 +1947,10 @@ int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix) + int bdrv_commit(BlockDriverState *bs) + { + BlockDriver *drv = bs->drv; +- int64_t sector, total_sectors; ++ int64_t sector, total_sectors, length, backing_length; + int n, ro, open_flags; + int ret = 0; +- uint8_t *buf; ++ uint8_t *buf = NULL; + char filename[PATH_MAX]; + + if (!drv) +@@ -1975,7 +1975,29 @@ int bdrv_commit(BlockDriverState *bs) + } + } + +- total_sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS; ++ length = bdrv_getlength(bs); ++ if (length < 0) { ++ ret = length; ++ goto ro_cleanup; ++ } ++ ++ backing_length = bdrv_getlength(bs->backing_hd); ++ if (backing_length < 0) { ++ ret = backing_length; ++ goto ro_cleanup; ++ } ++ ++ /* If our top snapshot is larger than the backing file image, ++ * grow the backing file image if possible. If not possible, ++ * we must return an error */ ++ if (length > backing_length) { ++ ret = bdrv_truncate(bs->backing_hd, length); ++ if (ret < 0) { ++ goto ro_cleanup; ++ } ++ } ++ ++ total_sectors = length >> BDRV_SECTOR_BITS; + buf = g_malloc(COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE); + + for (sector = 0; sector < total_sectors; sector += n) { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-resize-backing-image-during-active-layer-commi.patch b/SOURCES/kvm-block-resize-backing-image-during-active-layer-commi.patch new file mode 100644 index 0000000..14cb1e3 --- /dev/null +++ b/SOURCES/kvm-block-resize-backing-image-during-active-layer-commi.patch @@ -0,0 +1,96 @@ +From 31c90390db10329e2e7da072492fa7ec728abed0 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 11 Feb 2014 16:14:26 +0100 +Subject: [PATCH 20/28] block: resize backing image during active layer commit, if needed + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 57216 +O-Subject: [RHEL7 qemu-kvm PATCH 2/6] block: resize backing image during active layer commit, if needed +Bugzilla: 1047254 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +If the top image to commit is the active layer, and also larger than +the base image, then an I/O error will likely be returned during +block-commit. + +For instance, if we have a base image with a virtual size 10G, and a +active layer image of size 20G, then committing the snapshot via +'block-commit' will likely fail. + +This will automatically attempt to resize the base image, if the +active layer image to be committed is larger. + +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Reviewed-by: Benoit Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 4da83585961631bfc10831dd26c4afda2a8b23e8) +--- + block/mirror.c | 38 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 38 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 38 ++++++++++++++++++++++++++++++++++++++ + 1 files changed, 38 insertions(+), 0 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 6e1f9b1..ba1428b 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -627,11 +627,49 @@ void commit_active_start(BlockDriverState *bs, BlockDriverState *base, + BlockDriverCompletionFunc *cb, + void *opaque, Error **errp) + { ++ int64_t length, base_length; ++ int orig_base_flags; ++ ++ orig_base_flags = bdrv_get_flags(base); ++ + if (bdrv_reopen(base, bs->open_flags, errp)) { + return; + } ++ ++ length = bdrv_getlength(bs); ++ if (length < 0) { ++ error_setg(errp, "Unable to determine length of %s", bs->filename); ++ goto error_restore_flags; ++ } ++ ++ base_length = bdrv_getlength(base); ++ if (base_length < 0) { ++ error_setg(errp, "Unable to determine length of %s", base->filename); ++ goto error_restore_flags; ++ } ++ ++ if (length > base_length) { ++ if (bdrv_truncate(base, length) < 0) { ++ error_setg(errp, "Top image %s is larger than base image %s, and " ++ "resize of base image failed", ++ bs->filename, base->filename); ++ goto error_restore_flags; ++ } ++ } ++ + bdrv_ref(base); + mirror_start_job(bs, base, speed, 0, 0, + on_error, on_error, cb, opaque, errp, + &commit_active_job_driver, false, base); ++ if (error_is_set(errp)) { ++ goto error_restore_flags; ++ } ++ ++ return; ++ ++error_restore_flags: ++ /* ignore error and errp for bdrv_reopen, because we want to propagate ++ * the original error */ ++ bdrv_reopen(base, orig_base_flags, NULL); ++ return; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-return-BDRV_BLOCK_ZERO-past-end-of-backing-fil.patch b/SOURCES/kvm-block-return-BDRV_BLOCK_ZERO-past-end-of-backing-fil.patch new file mode 100644 index 0000000..cd1dafc --- /dev/null +++ b/SOURCES/kvm-block-return-BDRV_BLOCK_ZERO-past-end-of-backing-fil.patch @@ -0,0 +1,54 @@ +From 231ea3db5b4c6b9de25fa62b2e6c39ebc4987a6f Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:41 +0200 +Subject: [PATCH 16/81] block: return BDRV_BLOCK_ZERO past end of backing file + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-17-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54999 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 16/26] block: return BDRV_BLOCK_ZERO past end of backing file +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +If the sectors are unallocated and we are past the end of the +backing file, they will read as zero. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit f0ad5712d5d15ff272b9e107910be4aae468fb3d) +--- + block.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 12 ++++++++++-- + 1 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 00bc3b2..36a2f24 100644 +--- a/block.c ++++ b/block.c +@@ -3068,8 +3068,16 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + return ret; + } + +- if (!(ret & BDRV_BLOCK_DATA) && bdrv_has_zero_init(bs)) { +- ret |= BDRV_BLOCK_ZERO; ++ if (!(ret & BDRV_BLOCK_DATA)) { ++ if (bdrv_has_zero_init(bs)) { ++ ret |= BDRV_BLOCK_ZERO; ++ } else { ++ BlockDriverState *bs2 = bs->backing_hd; ++ int64_t length2 = bdrv_getlength(bs2); ++ if (length2 >= 0 && sector_num >= (length2 >> BDRV_SECTOR_BITS)) { ++ ret |= BDRV_BLOCK_ZERO; ++ } ++ } + } + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-return-get_block_status-data-and-flags-for-for.patch b/SOURCES/kvm-block-return-get_block_status-data-and-flags-for-for.patch new file mode 100644 index 0000000..cd7a8e8 --- /dev/null +++ b/SOURCES/kvm-block-return-get_block_status-data-and-flags-for-for.patch @@ -0,0 +1,285 @@ +From 90d033044f22ff96e5fc7c409934f7318d03f103 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:39 +0200 +Subject: [PATCH 14/81] block: return get_block_status data and flags for formats + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-15-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54996 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 14/26] block: return get_block_status data and flags for formats +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4bc74be997a72922170f4f272fd5e8074a3ecc27) +--- + block/cow.c | 8 +++++++- + block/qcow.c | 9 ++++++++- + block/qcow2.c | 16 ++++++++++++++-- + block/qed.c | 35 ++++++++++++++++++++++++++++------- + block/sheepdog.c | 2 +- + block/vdi.c | 13 ++++++++++++- + block/vmdk.c | 19 ++++++++++++++++++- + block/vvfat.c | 11 ++++++----- + 8 files changed, 94 insertions(+), 19 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/cow.c | 8 +++++++- + block/qcow.c | 9 ++++++++- + block/qcow2.c | 16 ++++++++++++++-- + block/qed.c | 35 ++++++++++++++++++++++++++++------- + block/sheepdog.c | 2 +- + block/vdi.c | 13 ++++++++++++- + block/vmdk.c | 19 ++++++++++++++++++- + block/vvfat.c | 11 ++++++----- + 8 files changed, 94 insertions(+), 19 deletions(-) + +diff --git a/block/cow.c b/block/cow.c +index 5e71c76..6958808 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -191,7 +191,13 @@ static int coroutine_fn cow_co_is_allocated(BlockDriverState *bs, + static int64_t coroutine_fn cow_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *num_same) + { +- return cow_co_is_allocated(bs, sector_num, nb_sectors, num_same); ++ BDRVCowState *s = bs->opaque; ++ int ret = cow_co_is_allocated(bs, sector_num, nb_sectors, num_same); ++ int64_t offset = s->cow_sectors_offset + (sector_num << BDRV_SECTOR_BITS); ++ if (ret < 0) { ++ return ret; ++ } ++ return (ret ? BDRV_BLOCK_DATA : 0) | offset | BDRV_BLOCK_OFFSET_VALID; + } + + static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num, +diff --git a/block/qcow.c b/block/qcow.c +index 05af25c..4ab552e 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -410,7 +410,14 @@ static int64_t coroutine_fn qcow_co_get_block_status(BlockDriverState *bs, + if (n > nb_sectors) + n = nb_sectors; + *pnum = n; +- return (cluster_offset != 0); ++ if (!cluster_offset) { ++ return 0; ++ } ++ if ((cluster_offset & QCOW_OFLAG_COMPRESSED) || s->crypt_method) { ++ return BDRV_BLOCK_DATA; ++ } ++ cluster_offset |= (index_in_cluster << BDRV_SECTOR_BITS); ++ return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | cluster_offset; + } + + static int decompress_buffer(uint8_t *out_buf, int out_buf_size, +diff --git a/block/qcow2.c b/block/qcow2.c +index 8d3bf5d..8e894b9 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -645,7 +645,8 @@ static int64_t coroutine_fn qcow2_co_get_block_status(BlockDriverState *bs, + { + BDRVQcowState *s = bs->opaque; + uint64_t cluster_offset; +- int ret; ++ int index_in_cluster, ret; ++ int64_t status = 0; + + *pnum = nb_sectors; + qemu_co_mutex_lock(&s->lock); +@@ -655,7 +656,18 @@ static int64_t coroutine_fn qcow2_co_get_block_status(BlockDriverState *bs, + return ret; + } + +- return (cluster_offset != 0) || (ret == QCOW2_CLUSTER_ZERO); ++ if (cluster_offset != 0 && ret != QCOW2_CLUSTER_COMPRESSED && ++ !s->crypt_method) { ++ index_in_cluster = sector_num & (s->cluster_sectors - 1); ++ cluster_offset |= (index_in_cluster << BDRV_SECTOR_BITS); ++ status |= BDRV_BLOCK_OFFSET_VALID | cluster_offset; ++ } ++ if (ret == QCOW2_CLUSTER_ZERO) { ++ status |= BDRV_BLOCK_ZERO; ++ } else if (ret != QCOW2_CLUSTER_UNALLOCATED) { ++ status |= BDRV_BLOCK_DATA; ++ } ++ return status; + } + + /* handle reading after the end of the backing file */ +diff --git a/block/qed.c b/block/qed.c +index a573039..815ee1c 100644 +--- a/block/qed.c ++++ b/block/qed.c +@@ -652,16 +652,36 @@ static int bdrv_qed_create(const char *filename, QEMUOptionParameter *options) + } + + typedef struct { ++ BlockDriverState *bs; + Coroutine *co; +- int is_allocated; ++ uint64_t pos; ++ int64_t status; + int *pnum; + } QEDIsAllocatedCB; + + static void qed_is_allocated_cb(void *opaque, int ret, uint64_t offset, size_t len) + { + QEDIsAllocatedCB *cb = opaque; ++ BDRVQEDState *s = cb->bs->opaque; + *cb->pnum = len / BDRV_SECTOR_SIZE; +- cb->is_allocated = (ret == QED_CLUSTER_FOUND || ret == QED_CLUSTER_ZERO); ++ switch (ret) { ++ case QED_CLUSTER_FOUND: ++ offset |= qed_offset_into_cluster(s, cb->pos); ++ cb->status = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | offset; ++ break; ++ case QED_CLUSTER_ZERO: ++ cb->status = BDRV_BLOCK_ZERO; ++ break; ++ case QED_CLUSTER_L2: ++ case QED_CLUSTER_L1: ++ cb->status = 0; ++ break; ++ default: ++ assert(ret < 0); ++ cb->status = ret; ++ break; ++ } ++ + if (cb->co) { + qemu_coroutine_enter(cb->co, NULL); + } +@@ -672,25 +692,26 @@ static int64_t coroutine_fn bdrv_qed_co_get_block_status(BlockDriverState *bs, + int nb_sectors, int *pnum) + { + BDRVQEDState *s = bs->opaque; +- uint64_t pos = (uint64_t)sector_num * BDRV_SECTOR_SIZE; + size_t len = (size_t)nb_sectors * BDRV_SECTOR_SIZE; + QEDIsAllocatedCB cb = { +- .is_allocated = -1, ++ .bs = bs, ++ .pos = (uint64_t)sector_num * BDRV_SECTOR_SIZE, ++ .status = BDRV_BLOCK_OFFSET_MASK, + .pnum = pnum, + }; + QEDRequest request = { .l2_table = NULL }; + +- qed_find_cluster(s, &request, pos, len, qed_is_allocated_cb, &cb); ++ qed_find_cluster(s, &request, cb.pos, len, qed_is_allocated_cb, &cb); + + /* Now sleep if the callback wasn't invoked immediately */ +- while (cb.is_allocated == -1) { ++ while (cb.status == BDRV_BLOCK_OFFSET_MASK) { + cb.co = qemu_coroutine_self(); + qemu_coroutine_yield(); + } + + qed_unref_l2_cache_entry(request.l2_table); + +- return cb.is_allocated; ++ return cb.status; + } + + static int bdrv_qed_make_empty(BlockDriverState *bs) +diff --git a/block/sheepdog.c b/block/sheepdog.c +index e5398bb..f7cc76e 100644 +--- a/block/sheepdog.c ++++ b/block/sheepdog.c +@@ -2299,7 +2299,7 @@ sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors, + end = DIV_ROUND_UP((sector_num + nb_sectors) * + BDRV_SECTOR_SIZE, SD_DATA_OBJ_SIZE); + unsigned long idx; +- int ret = 1; ++ int64_t ret = BDRV_BLOCK_DATA; + + for (idx = start; idx < end; idx++) { + if (inode->data_vdi_id[idx] == 0) { +diff --git a/block/vdi.c b/block/vdi.c +index 1252ad4..bc97c39 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -479,12 +479,23 @@ static int64_t coroutine_fn vdi_co_get_block_status(BlockDriverState *bs, + size_t sector_in_block = sector_num % s->block_sectors; + int n_sectors = s->block_sectors - sector_in_block; + uint32_t bmap_entry = le32_to_cpu(s->bmap[bmap_index]); ++ uint64_t offset; ++ int result; ++ + logout("%p, %" PRId64 ", %d, %p\n", bs, sector_num, nb_sectors, pnum); + if (n_sectors > nb_sectors) { + n_sectors = nb_sectors; + } + *pnum = n_sectors; +- return VDI_IS_ALLOCATED(bmap_entry); ++ result = VDI_IS_ALLOCATED(bmap_entry); ++ if (!result) { ++ return 0; ++ } ++ ++ offset = s->header.offset_data + ++ (uint64_t)bmap_entry * s->block_size + ++ sector_in_block * SECTOR_SIZE; ++ return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | offset; + } + + static int vdi_co_read(BlockDriverState *bs, +diff --git a/block/vmdk.c b/block/vmdk.c +index a30c3b9..7456f9b 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1059,7 +1059,24 @@ static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + sector_num * 512, 0, &offset); + qemu_co_mutex_unlock(&s->lock); + +- ret = (ret == VMDK_OK || ret == VMDK_ZEROED); ++ switch (ret) { ++ case VMDK_ERROR: ++ ret = -EIO; ++ break; ++ case VMDK_UNALLOC: ++ ret = 0; ++ break; ++ case VMDK_ZEROED: ++ ret = BDRV_BLOCK_ZERO; ++ break; ++ case VMDK_OK: ++ ret = BDRV_BLOCK_DATA; ++ if (extent->file == bs->file) { ++ ret |= BDRV_BLOCK_OFFSET_VALID | offset; ++ } ++ ++ break; ++ } + + index_in_cluster = sector_num % extent->cluster_sectors; + n = extent->cluster_sectors - index_in_cluster; +diff --git a/block/vvfat.c b/block/vvfat.c +index 510a559..415fba3 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2879,11 +2879,12 @@ static int64_t coroutine_fn vvfat_co_get_block_status(BlockDriverState *bs, + { + BDRVVVFATState* s = bs->opaque; + *n = s->sector_count - sector_num; +- if (*n > nb_sectors) +- *n = nb_sectors; +- else if (*n < 0) +- return 0; +- return 1; ++ if (*n > nb_sectors) { ++ *n = nb_sectors; ++ } else if (*n < 0) { ++ return 0; ++ } ++ return BDRV_BLOCK_DATA; + } + + static int write_target_commit(BlockDriverState *bs, int64_t sector_num, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-ssh-Drop-superfluous-libssh2_session_last_errn.patch b/SOURCES/kvm-block-ssh-Drop-superfluous-libssh2_session_last_errn.patch new file mode 100644 index 0000000..1d5ad07 --- /dev/null +++ b/SOURCES/kvm-block-ssh-Drop-superfluous-libssh2_session_last_errn.patch @@ -0,0 +1,60 @@ +From 8d385a8bc9d20d1c0ec09579f14a98294b448985 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Mon, 8 Jun 2015 11:56:55 +0200 +Subject: [PATCH 02/30] block/ssh: Drop superfluous + libssh2_session_last_errno() calls + +Message-id: <1433764620-20506-2-git-send-email-rjones@redhat.com> +Patchwork-id: 65477 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/6] block/ssh: Drop superfluous libssh2_session_last_errno() calls +Bugzilla: 1226683 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +libssh2_session_last_error() already returns the error code. + +Signed-off-by: Markus Armbruster +Reviewed-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 04bc7c0e38fc77afc116031f1e25af80374b1971 +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/block/ssh.c b/block/ssh.c +index fa3c78d..1f7c6ed 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -121,10 +121,9 @@ session_error_report(BDRVSSHState *s, const char *fs, ...) + char *ssh_err; + int ssh_err_code; + +- libssh2_session_last_error((s)->session, &ssh_err, NULL, 0); + /* This is not an errno. See . */ +- ssh_err_code = libssh2_session_last_errno((s)->session); +- ++ ssh_err_code = libssh2_session_last_error(s->session, ++ &ssh_err, NULL, 0); + error_printf(": %s (libssh2 error code: %d)", ssh_err, ssh_err_code); + } + +@@ -145,9 +144,9 @@ sftp_error_report(BDRVSSHState *s, const char *fs, ...) + int ssh_err_code; + unsigned long sftp_err_code; + +- libssh2_session_last_error((s)->session, &ssh_err, NULL, 0); + /* This is not an errno. See . */ +- ssh_err_code = libssh2_session_last_errno((s)->session); ++ ssh_err_code = libssh2_session_last_error(s->session, ++ &ssh_err, NULL, 0); + /* See . */ + sftp_err_code = libssh2_sftp_last_error((s)->sftp); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-ssh-Propagate-errors-through-authenticate.patch b/SOURCES/kvm-block-ssh-Propagate-errors-through-authenticate.patch new file mode 100644 index 0000000..e6d2e56 --- /dev/null +++ b/SOURCES/kvm-block-ssh-Propagate-errors-through-authenticate.patch @@ -0,0 +1,106 @@ +From aa59c26b76954860b4c7f7e57d1d4b8b99ccfa6f Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Mon, 8 Jun 2015 11:56:57 +0200 +Subject: [PATCH 04/30] block/ssh: Propagate errors through authenticate() + +Message-id: <1433764620-20506-4-git-send-email-rjones@redhat.com> +Patchwork-id: 65478 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/6] block/ssh: Propagate errors through authenticate() +Bugzilla: 1226683 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 4618e658e6dadd1ba53585157984eac71cb706c6 +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/block/ssh.c b/block/ssh.c +index 6ffcff1..5908e6d 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -434,7 +434,7 @@ static int check_host_key(BDRVSSHState *s, const char *host, int port, + return -EINVAL; + } + +-static int authenticate(BDRVSSHState *s, const char *user) ++static int authenticate(BDRVSSHState *s, const char *user, Error **errp) + { + int r, ret; + const char *userauthlist; +@@ -445,7 +445,8 @@ static int authenticate(BDRVSSHState *s, const char *user) + userauthlist = libssh2_userauth_list(s->session, user, strlen(user)); + if (strstr(userauthlist, "publickey") == NULL) { + ret = -EPERM; +- error_report("remote server does not support \"publickey\" authentication"); ++ error_setg(errp, ++ "remote server does not support \"publickey\" authentication"); + goto out; + } + +@@ -453,17 +454,18 @@ static int authenticate(BDRVSSHState *s, const char *user) + agent = libssh2_agent_init(s->session); + if (!agent) { + ret = -EINVAL; +- session_error_report(s, "failed to initialize ssh-agent support"); ++ session_error_setg(errp, s, "failed to initialize ssh-agent support"); + goto out; + } + if (libssh2_agent_connect(agent)) { + ret = -ECONNREFUSED; +- session_error_report(s, "failed to connect to ssh-agent"); ++ session_error_setg(errp, s, "failed to connect to ssh-agent"); + goto out; + } + if (libssh2_agent_list_identities(agent)) { + ret = -EINVAL; +- session_error_report(s, "failed requesting identities from ssh-agent"); ++ session_error_setg(errp, s, ++ "failed requesting identities from ssh-agent"); + goto out; + } + +@@ -474,7 +476,8 @@ static int authenticate(BDRVSSHState *s, const char *user) + } + if (r < 0) { + ret = -EINVAL; +- session_error_report(s, "failed to obtain identity from ssh-agent"); ++ session_error_setg(errp, s, ++ "failed to obtain identity from ssh-agent"); + goto out; + } + r = libssh2_agent_userauth(agent, user, identity); +@@ -488,8 +491,8 @@ static int authenticate(BDRVSSHState *s, const char *user) + } + + ret = -EPERM; +- error_report("failed to authenticate using publickey authentication " +- "and the identities held by your ssh-agent"); ++ error_setg(errp, "failed to authenticate using publickey authentication " ++ "and the identities held by your ssh-agent"); + + out: + if (agent != NULL) { +@@ -577,8 +580,10 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + } + + /* Authenticate. */ +- ret = authenticate(s, user); ++ ret = authenticate(s, user, &err); + if (ret < 0) { ++ qerror_report_err(err); ++ error_free(err); + goto err; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-ssh-Propagate-errors-through-check_host_key.patch b/SOURCES/kvm-block-ssh-Propagate-errors-through-check_host_key.patch new file mode 100644 index 0000000..d3c7f2f --- /dev/null +++ b/SOURCES/kvm-block-ssh-Propagate-errors-through-check_host_key.patch @@ -0,0 +1,193 @@ +From 6151164b6f33870c511a7f5f0f64356bb8fe2ff2 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Mon, 8 Jun 2015 11:56:56 +0200 +Subject: [PATCH 03/30] block/ssh: Propagate errors through check_host_key() + +Message-id: <1433764620-20506-3-git-send-email-rjones@redhat.com> +Patchwork-id: 65479 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/6] block/ssh: Propagate errors through check_host_key() +Bugzilla: 1226683 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 01c2b265fce921d6460e06f5af4dfb405119cbab +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 68 ++++++++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 49 insertions(+), 19 deletions(-) + +diff --git a/block/ssh.c b/block/ssh.c +index 1f7c6ed..6ffcff1 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -106,6 +106,31 @@ static void ssh_state_free(BDRVSSHState *s) + } + } + ++static void GCC_FMT_ATTR(3, 4) ++session_error_setg(Error **errp, BDRVSSHState *s, const char *fs, ...) ++{ ++ va_list args; ++ char *msg; ++ ++ va_start(args, fs); ++ msg = g_strdup_vprintf(fs, args); ++ va_end(args); ++ ++ if (s->session) { ++ char *ssh_err; ++ int ssh_err_code; ++ ++ /* This is not an errno. See . */ ++ ssh_err_code = libssh2_session_last_error(s->session, ++ &ssh_err, NULL, 0); ++ error_setg(errp, "%s: %s (libssh2 error code: %d)", ++ msg, ssh_err, ssh_err_code); ++ } else { ++ error_setg(errp, "%s", msg); ++ } ++ g_free(msg); ++} ++ + /* Wrappers around error_report which make sure to dump as much + * information from libssh2 as possible. + */ +@@ -242,7 +267,7 @@ static void ssh_parse_filename(const char *filename, QDict *options, + } + + static int check_host_key_knownhosts(BDRVSSHState *s, +- const char *host, int port) ++ const char *host, int port, Error **errp) + { + const char *home; + char *knh_file = NULL; +@@ -256,14 +281,15 @@ static int check_host_key_knownhosts(BDRVSSHState *s, + hostkey = libssh2_session_hostkey(s->session, &len, &type); + if (!hostkey) { + ret = -EINVAL; +- session_error_report(s, "failed to read remote host key"); ++ session_error_setg(errp, s, "failed to read remote host key"); + goto out; + } + + knh = libssh2_knownhost_init(s->session); + if (!knh) { + ret = -EINVAL; +- session_error_report(s, "failed to initialize known hosts support"); ++ session_error_setg(errp, s, ++ "failed to initialize known hosts support"); + goto out; + } + +@@ -288,21 +314,23 @@ static int check_host_key_knownhosts(BDRVSSHState *s, + break; + case LIBSSH2_KNOWNHOST_CHECK_MISMATCH: + ret = -EINVAL; +- session_error_report(s, "host key does not match the one in known_hosts (found key %s)", +- found->key); ++ session_error_setg(errp, s, ++ "host key does not match the one in known_hosts" ++ " (found key %s)", found->key); + goto out; + case LIBSSH2_KNOWNHOST_CHECK_NOTFOUND: + ret = -EINVAL; +- session_error_report(s, "no host key was found in known_hosts"); ++ session_error_setg(errp, s, "no host key was found in known_hosts"); + goto out; + case LIBSSH2_KNOWNHOST_CHECK_FAILURE: + ret = -EINVAL; +- session_error_report(s, "failure matching the host key with known_hosts"); ++ session_error_setg(errp, s, ++ "failure matching the host key with known_hosts"); + goto out; + default: + ret = -EINVAL; +- session_error_report(s, "unknown error matching the host key with known_hosts (%d)", +- r); ++ session_error_setg(errp, s, "unknown error matching the host key" ++ " with known_hosts (%d)", r); + goto out; + } + +@@ -357,20 +385,20 @@ static int compare_fingerprint(const unsigned char *fingerprint, size_t len, + + static int + check_host_key_hash(BDRVSSHState *s, const char *hash, +- int hash_type, size_t fingerprint_len) ++ int hash_type, size_t fingerprint_len, Error **errp) + { + const char *fingerprint; + + fingerprint = libssh2_hostkey_hash(s->session, hash_type); + if (!fingerprint) { +- session_error_report(s, "failed to read remote host key"); ++ session_error_setg(errp, s, "failed to read remote host key"); + return -EINVAL; + } + + if(compare_fingerprint((unsigned char *) fingerprint, fingerprint_len, + hash) != 0) { +- error_report("remote host key does not match host_key_check '%s'", +- hash); ++ error_setg(errp, "remote host key does not match host_key_check '%s'", ++ hash); + return -EPERM; + } + +@@ -378,7 +406,7 @@ check_host_key_hash(BDRVSSHState *s, const char *hash, + } + + static int check_host_key(BDRVSSHState *s, const char *host, int port, +- const char *host_key_check) ++ const char *host_key_check, Error **errp) + { + /* host_key_check=no */ + if (strcmp(host_key_check, "no") == 0) { +@@ -388,21 +416,21 @@ static int check_host_key(BDRVSSHState *s, const char *host, int port, + /* host_key_check=md5:xx:yy:zz:... */ + if (strncmp(host_key_check, "md5:", 4) == 0) { + return check_host_key_hash(s, &host_key_check[4], +- LIBSSH2_HOSTKEY_HASH_MD5, 16); ++ LIBSSH2_HOSTKEY_HASH_MD5, 16, errp); + } + + /* host_key_check=sha1:xx:yy:zz:... */ + if (strncmp(host_key_check, "sha1:", 5) == 0) { + return check_host_key_hash(s, &host_key_check[5], +- LIBSSH2_HOSTKEY_HASH_SHA1, 20); ++ LIBSSH2_HOSTKEY_HASH_SHA1, 20, errp); + } + + /* host_key_check=yes */ + if (strcmp(host_key_check, "yes") == 0) { +- return check_host_key_knownhosts(s, host, port); ++ return check_host_key_knownhosts(s, host, port, errp); + } + +- error_report("unknown host_key_check setting (%s)", host_key_check); ++ error_setg(errp, "unknown host_key_check setting (%s)", host_key_check); + return -EINVAL; + } + +@@ -541,8 +569,10 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + } + + /* Check the remote host's key against known_hosts. */ +- ret = check_host_key(s, host, port, host_key_check); ++ ret = check_host_key(s, host, port, host_key_check, &err); + if (ret < 0) { ++ qerror_report_err(err); ++ error_free(err); + goto err; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-ssh-Propagate-errors-through-connect_to_ssh.patch b/SOURCES/kvm-block-ssh-Propagate-errors-through-connect_to_ssh.patch new file mode 100644 index 0000000..753826d --- /dev/null +++ b/SOURCES/kvm-block-ssh-Propagate-errors-through-connect_to_ssh.patch @@ -0,0 +1,143 @@ +From bd7acae27a2bc4bc1a7865fdaeb30fd9c3a0430c Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Mon, 8 Jun 2015 11:56:58 +0200 +Subject: [PATCH 05/30] block/ssh: Propagate errors through connect_to_ssh() + +Message-id: <1433764620-20506-5-git-send-email-rjones@redhat.com> +Patchwork-id: 65480 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 4/6] block/ssh: Propagate errors through connect_to_ssh() +Bugzilla: 1226683 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 5f0c39e59822fdfd6a730824eded06209942e495 +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 34 +++++++++++++++++----------------- + 1 file changed, 17 insertions(+), 17 deletions(-) + +diff --git a/block/ssh.c b/block/ssh.c +index 5908e6d..07f8a2c 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -506,10 +506,9 @@ static int authenticate(BDRVSSHState *s, const char *user, Error **errp) + } + + static int connect_to_ssh(BDRVSSHState *s, QDict *options, +- int ssh_flags, int creat_mode) ++ int ssh_flags, int creat_mode, Error **errp) + { + int r, ret; +- Error *err = NULL; + const char *host, *user, *path, *host_key_check; + int port; + +@@ -528,6 +527,7 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + } else { + user = g_get_user_name(); + if (!user) { ++ error_setg_errno(errp, errno, "Can't get user name"); + ret = -errno; + goto err; + } +@@ -544,11 +544,9 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + s->hostport = g_strdup_printf("%s:%d", host, port); + + /* Open the socket and connect. */ +- s->sock = inet_connect(s->hostport, &err); +- if (err != NULL) { ++ s->sock = inet_connect(s->hostport, errp); ++ if (s->sock < 0) { + ret = -errno; +- qerror_report_err(err); +- error_free(err); + goto err; + } + +@@ -556,7 +554,7 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + s->session = libssh2_session_init(); + if (!s->session) { + ret = -EINVAL; +- session_error_report(s, "failed to initialize libssh2 session"); ++ session_error_setg(errp, s, "failed to initialize libssh2 session"); + goto err; + } + +@@ -567,30 +565,26 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + r = libssh2_session_handshake(s->session, s->sock); + if (r != 0) { + ret = -EINVAL; +- session_error_report(s, "failed to establish SSH session"); ++ session_error_setg(errp, s, "failed to establish SSH session"); + goto err; + } + + /* Check the remote host's key against known_hosts. */ +- ret = check_host_key(s, host, port, host_key_check, &err); ++ ret = check_host_key(s, host, port, host_key_check, errp); + if (ret < 0) { +- qerror_report_err(err); +- error_free(err); + goto err; + } + + /* Authenticate. */ +- ret = authenticate(s, user, &err); ++ ret = authenticate(s, user, errp); + if (ret < 0) { +- qerror_report_err(err); +- error_free(err); + goto err; + } + + /* Start SFTP. */ + s->sftp = libssh2_sftp_init(s->session); + if (!s->sftp) { +- session_error_report(s, "failed to initialize sftp handle"); ++ session_error_setg(errp, s, "failed to initialize sftp handle"); + ret = -EINVAL; + goto err; + } +@@ -645,6 +639,7 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags, + Error **errp) + { ++ Error *local_err = NULL; + BDRVSSHState *s = bs->opaque; + int ret; + int ssh_flags; +@@ -657,8 +652,10 @@ static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags, + } + + /* Start up SSH. */ +- ret = connect_to_ssh(s, options, ssh_flags, 0); ++ ret = connect_to_ssh(s, options, ssh_flags, 0, &local_err); + if (ret < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + goto err; + } + +@@ -718,8 +715,11 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options, + + r = connect_to_ssh(&s, uri_options, + LIBSSH2_FXF_READ|LIBSSH2_FXF_WRITE| +- LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC, 0644); ++ LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC, ++ 0644, &local_err); + if (r < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + ret = r; + goto out; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-ssh-Propagate-errors-to-open-and-create-method.patch b/SOURCES/kvm-block-ssh-Propagate-errors-to-open-and-create-method.patch new file mode 100644 index 0000000..f85344c --- /dev/null +++ b/SOURCES/kvm-block-ssh-Propagate-errors-to-open-and-create-method.patch @@ -0,0 +1,158 @@ +From 82480db1c89f2ac291e44c74274bd0b6a860a720 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Mon, 8 Jun 2015 11:56:59 +0200 +Subject: [PATCH 06/30] block/ssh: Propagate errors to open and create methods + +Message-id: <1433764620-20506-6-git-send-email-rjones@redhat.com> +Patchwork-id: 65482 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 5/6] block/ssh: Propagate errors to open and create methods +Bugzilla: 1226683 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Completes the conversion to Error started in commit 015a103^..d5124c0. + +Signed-off-by: Markus Armbruster +Reviewed-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 5496fb1aebb624b379a503a8b2a156922a275fa1 +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 47 ++++++++++++++++++++++------------------------- + 1 file changed, 22 insertions(+), 25 deletions(-) + +diff --git a/block/ssh.c b/block/ssh.c +index 07f8a2c..3b4d9e7 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -131,29 +131,34 @@ session_error_setg(Error **errp, BDRVSSHState *s, const char *fs, ...) + g_free(msg); + } + +-/* Wrappers around error_report which make sure to dump as much +- * information from libssh2 as possible. +- */ +-static void GCC_FMT_ATTR(2, 3) +-session_error_report(BDRVSSHState *s, const char *fs, ...) ++static void GCC_FMT_ATTR(3, 4) ++sftp_error_setg(Error **errp, BDRVSSHState *s, const char *fs, ...) + { + va_list args; ++ char *msg; + + va_start(args, fs); +- error_vprintf(fs, args); ++ msg = g_strdup_vprintf(fs, args); ++ va_end(args); + +- if ((s)->session) { ++ if (s->sftp) { + char *ssh_err; + int ssh_err_code; ++ unsigned long sftp_err_code; + + /* This is not an errno. See . */ + ssh_err_code = libssh2_session_last_error(s->session, + &ssh_err, NULL, 0); +- error_printf(": %s (libssh2 error code: %d)", ssh_err, ssh_err_code); +- } ++ /* See . */ ++ sftp_err_code = libssh2_sftp_last_error((s)->sftp); + +- va_end(args); +- error_printf("\n"); ++ error_setg(errp, ++ "%s: %s (libssh2 error code: %d, sftp error code: %lu)", ++ msg, ssh_err, ssh_err_code, sftp_err_code); ++ } else { ++ error_setg(errp, "%s", msg); ++ } ++ g_free(msg); + } + + static void GCC_FMT_ATTR(2, 3) +@@ -594,14 +599,14 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + path, ssh_flags, creat_mode); + s->sftp_handle = libssh2_sftp_open(s->sftp, path, ssh_flags, creat_mode); + if (!s->sftp_handle) { +- session_error_report(s, "failed to open remote file '%s'", path); ++ session_error_setg(errp, s, "failed to open remote file '%s'", path); + ret = -EINVAL; + goto err; + } + + r = libssh2_sftp_fstat(s->sftp_handle, &s->attrs); + if (r < 0) { +- sftp_error_report(s, "failed to read file attributes"); ++ sftp_error_setg(errp, s, "failed to read file attributes"); + return -EINVAL; + } + +@@ -639,7 +644,6 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags, + Error **errp) + { +- Error *local_err = NULL; + BDRVSSHState *s = bs->opaque; + int ret; + int ssh_flags; +@@ -652,10 +656,8 @@ static int ssh_file_open(BlockDriverState *bs, QDict *options, int bdrv_flags, + } + + /* Start up SSH. */ +- ret = connect_to_ssh(s, options, ssh_flags, 0, &local_err); ++ ret = connect_to_ssh(s, options, ssh_flags, 0, errp); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); + goto err; + } + +@@ -686,7 +688,6 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { + int r, ret; +- Error *local_err = NULL; + int64_t total_size = 0; + QDict *uri_options = NULL; + BDRVSSHState s; +@@ -705,10 +706,8 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options, + DPRINTF("total_size=%" PRIi64, total_size); + + uri_options = qdict_new(); +- r = parse_uri(filename, uri_options, &local_err); ++ r = parse_uri(filename, uri_options, errp); + if (r < 0) { +- qerror_report_err(local_err); +- error_free(local_err); + ret = r; + goto out; + } +@@ -716,10 +715,8 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options, + r = connect_to_ssh(&s, uri_options, + LIBSSH2_FXF_READ|LIBSSH2_FXF_WRITE| + LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC, +- 0644, &local_err); ++ 0644, errp); + if (r < 0) { +- qerror_report_err(local_err); +- error_free(local_err); + ret = r; + goto out; + } +@@ -728,7 +725,7 @@ static int ssh_create(const char *filename, QEMUOptionParameter *options, + libssh2_sftp_seek64(s.sftp_handle, total_size-1); + r2 = libssh2_sftp_write(s.sftp_handle, c, 1); + if (r2 < 0) { +- sftp_error_report(&s, "truncate failed"); ++ sftp_error_setg(errp, &s, "truncate failed"); + ret = -EINVAL; + goto out; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-ssh-Use-QemuOpts-for-runtime-options.patch b/SOURCES/kvm-block-ssh-Use-QemuOpts-for-runtime-options.patch new file mode 100644 index 0000000..935b40e --- /dev/null +++ b/SOURCES/kvm-block-ssh-Use-QemuOpts-for-runtime-options.patch @@ -0,0 +1,167 @@ +From 1f5e04965db81bea1eac402110166290bfc774db Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Sun, 1 Oct 2017 03:55:19 +0200 +Subject: [PATCH 4/4] block/ssh: Use QemuOpts for runtime options + +RH-Author: Jeffrey Cody +Message-id: <798f4a5f4498382bd5764a5e7889595a36aab78c.1506829990.git.jcody@redhat.com> +Patchwork-id: 76786 +O-Subject: [RHEL-7.5 1/1] block/ssh: Use QemuOpts for runtime options +Bugzilla: 1461672 +RH-Acked-by: Thomas Huth +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Max Reitz + +Using QemuOpts will prevent qemu from crashing if the input options have +not been validated (which is the case when they are specified on the +command line or in a json: filename) and some have the wrong type. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 8a6a80896d6af03b8ee0c17cdf37219eca2588a7) +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 79 ++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 55 insertions(+), 24 deletions(-) + +diff --git a/block/ssh.c b/block/ssh.c +index b00ff7f..a9341b8 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -510,36 +510,73 @@ static int authenticate(BDRVSSHState *s, const char *user, Error **errp) + return ret; + } + ++static QemuOptsList ssh_runtime_opts = { ++ .name = "ssh", ++ .head = QTAILQ_HEAD_INITIALIZER(ssh_runtime_opts.head), ++ .desc = { ++ { ++ .name = "host", ++ .type = QEMU_OPT_STRING, ++ .help = "Host to connect to", ++ }, ++ { ++ .name = "port", ++ .type = QEMU_OPT_NUMBER, ++ .help = "Port to connect to", ++ }, ++ { ++ .name = "path", ++ .type = QEMU_OPT_STRING, ++ .help = "Path of the image on the host", ++ }, ++ { ++ .name = "user", ++ .type = QEMU_OPT_STRING, ++ .help = "User as which to connect", ++ }, ++ { ++ .name = "host_key_check", ++ .type = QEMU_OPT_STRING, ++ .help = "Defines how and what to check the host key against", ++ }, ++ }, ++}; ++ + static int connect_to_ssh(BDRVSSHState *s, QDict *options, + int ssh_flags, int creat_mode, Error **errp) + { + int r, ret; ++ QemuOpts *opts = NULL; ++ Error *local_err = NULL; + const char *host, *user, *path, *host_key_check; + int port; + +- if (!qdict_haskey(options, "host")) { ++ opts = qemu_opts_create(&ssh_runtime_opts, NULL, 0, &error_abort); ++ qemu_opts_absorb_qdict(opts, options, &local_err); ++ if (local_err) { + ret = -EINVAL; +- error_setg(errp, "No hostname was specified"); ++ error_propagate(errp, local_err); + goto err; + } +- host = qdict_get_str(options, "host"); + +- if (qdict_haskey(options, "port")) { +- port = qdict_get_int(options, "port"); +- } else { +- port = 22; ++ host = qemu_opt_get(opts, "host"); ++ if (!host) { ++ ret = -EINVAL; ++ error_setg(errp, "No hostname was specified"); ++ goto err; + } + +- if (!qdict_haskey(options, "path")) { ++ port = qemu_opt_get_number(opts, "port", 22); ++ ++ path = qemu_opt_get(opts, "path"); ++ if (!path) { + ret = -EINVAL; + error_setg(errp, "No path was specified"); + goto err; + } +- path = qdict_get_str(options, "path"); + +- if (qdict_haskey(options, "user")) { +- user = qdict_get_str(options, "user"); +- } else { ++ user = qemu_opt_get(opts, "user"); ++ if (!user) { + user = g_get_user_name(); + if (!user) { + error_setg_errno(errp, errno, "Can't get user name"); +@@ -548,9 +585,8 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + } + } + +- if (qdict_haskey(options, "host_key_check")) { +- host_key_check = qdict_get_str(options, "host_key_check"); +- } else { ++ host_key_check = qemu_opt_get(opts, "host_key_check"); ++ if (!host_key_check) { + host_key_check = "yes"; + } + +@@ -614,21 +650,14 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + goto err; + } + ++ qemu_opts_del(opts); ++ + r = libssh2_sftp_fstat(s->sftp_handle, &s->attrs); + if (r < 0) { + sftp_error_setg(errp, s, "failed to read file attributes"); + return -EINVAL; + } + +- /* Delete the options we've used; any not deleted will cause the +- * block layer to give an error about unused options. +- */ +- qdict_del(options, "host"); +- qdict_del(options, "port"); +- qdict_del(options, "user"); +- qdict_del(options, "path"); +- qdict_del(options, "host_key_check"); +- + return 0; + + err: +@@ -648,6 +677,8 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + } + s->session = NULL; + ++ qemu_opts_del(opts); ++ + return ret; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-stream-Don-t-stream-unbacked-devices.patch b/SOURCES/kvm-block-stream-Don-t-stream-unbacked-devices.patch new file mode 100644 index 0000000..75bd164 --- /dev/null +++ b/SOURCES/kvm-block-stream-Don-t-stream-unbacked-devices.patch @@ -0,0 +1,55 @@ +From b8159f39be879b1133ce89bcb2c892e0d6711fdb Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 22 Dec 2013 16:12:39 +0100 +Subject: [PATCH 1/8] block/stream: Don't stream unbacked devices + +RH-Author: Max Reitz +Message-id: <1387728759-7141-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 56422 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] block/stream: Don't stream unbacked devices +Bugzilla: 965636 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 965636 + +If a block device is unbacked, a streaming blockjob should immediately +finish instead of beginning to try to stream, then noticing the backing +file does not contain even the first sector (since it does not exist) +and then finishing normally. + +Signed-off-by: Max Reitz +Reviewed-by: Wenchao Xia +Signed-off-by: Kevin Wolf +(cherry picked from commit f4a193e717e6b5179a2e57423bfe110b724662d8) + +Signed-off-by: Max Reitz +--- + block/stream.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/stream.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/block/stream.c b/block/stream.c +index 276487c..cbae815 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -84,6 +84,11 @@ static void coroutine_fn stream_run(void *opaque) + int n = 0; + void *buf; + ++ if (!bs->backing_hd) { ++ block_job_completed(&s->common, 0); ++ return; ++ } ++ + s->common.len = bdrv_getlength(bs); + if (s->common.len < 0) { + block_job_completed(&s->common, s->common.len); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-update-block-commit-documentation-regarding-im.patch b/SOURCES/kvm-block-update-block-commit-documentation-regarding-im.patch new file mode 100644 index 0000000..fb71c3d --- /dev/null +++ b/SOURCES/kvm-block-update-block-commit-documentation-regarding-im.patch @@ -0,0 +1,156 @@ +From c7c21ebc0dcddd666c616e161b0f9bbb4ade9cf4 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 11 Feb 2014 16:14:27 +0100 +Subject: [PATCH 21/28] block: update block commit documentation regarding image truncation + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 57217 +O-Subject: [RHEL7 qemu-kvm PATCH 3/6] block: update block commit documentation regarding image truncation +Bugzilla: 1047254 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +This updates the documentation for commiting snapshot images. +Specifically, this highlights what happens when the base image +is either smaller or larger than the snapshot image being committed. + +In the case of the base image being smaller, it is resized to the +larger size of the snapshot image. In the case of the base image +being larger, it is not resized automatically, but once the commit +has completed it is safe for the user to truncate the base image. + +Signed-off-by: Jeff Cody +Reviewed-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 37222900743962e146a82b7077a18c3f39859a19) + +Conflicts: + qmp-commands.hx + +RHEL7 Notes: Conflict is due to 2 things: 1) drive-backup + not present in RHEL7, and 2) the block job + differentiation #ifdefs. +--- + hmp-commands.hx | 5 +++++ + qapi-schema.json | 7 +++++++ + qemu-img.texi | 7 ++++++- + qmp-commands.hx | 40 ++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 58 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 5 +++++ + qapi-schema.json | 7 +++++++ + qemu-img.texi | 7 ++++++- + qmp-commands.hx | 40 ++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 58 insertions(+), 1 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 8e08ebf..467dd70 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -35,6 +35,11 @@ STEXI + @item commit + @findex commit + Commit changes to the disk images (if -snapshot is used) or backing files. ++If the backing file is smaller than the snapshot, then the backing file will be ++resized to be the same size as the snapshot. If the snapshot is smaller than ++the backing file, the backing file will not be truncated. If you want the ++backing file to match the size of the smaller snapshot, you can safely truncate ++it yourself once the commit operation successfully completes. + ETEXI + + { +diff --git a/qapi-schema.json b/qapi-schema.json +index 8b257e2..017b3b7 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1846,6 +1846,13 @@ + # user needs to complete the job with the block-job-complete + # command after getting the ready event. (Since 2.0) + # ++# If the base image is smaller than top, then the base image ++# will be resized to be the same size as top. If top is ++# smaller than the base image, the base will not be ++# truncated. If you want the base image size to match the ++# size of the smaller top, you can safely truncate it ++# yourself once the commit operation successfully completes. ++# + # + # @speed: #optional the maximum speed, in bytes per second + # +diff --git a/qemu-img.texi b/qemu-img.texi +index 1078791..d75a780 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -136,7 +136,12 @@ it doesn't need to be specified separately in this case. + + @item commit [-f @var{fmt}] [-t @var{cache}] @var{filename} + +-Commit the changes recorded in @var{filename} in its base image. ++Commit the changes recorded in @var{filename} in its base image or backing file. ++If the backing file is smaller than the snapshot, then the backing file will be ++resized to be the same size as the snapshot. If the snapshot is smaller than ++the backing file, the backing file will not be truncated. If you want the ++backing file to match the size of the smaller snapshot, you can safely truncate ++it yourself once the commit operation successfully completes. + + @item compare [-f @var{fmt}] [-F @var{fmt}] [-p] [-s] [-q] @var{filename1} @var{filename2} + +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 7a1bfd4..08a01ee 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1008,6 +1008,46 @@ EQMP + .args_type = "device:B,base:s?,top:s,speed:o?", + .mhandler.cmd_new = qmp_marshal_input_block_commit, + }, ++ ++SQMP ++block-commit ++------------ ++ ++Live commit of data from overlay image nodes into backing nodes - i.e., writes ++data between 'top' and 'base' into 'base'. ++ ++Arguments: ++ ++- "device": The device's ID, must be unique (json-string) ++- "base": The file name of the backing image to write data into. ++ If not specified, this is the deepest backing image ++ (json-string, optional) ++- "top": The file name of the backing image within the image chain, ++ which contains the topmost data to be committed down. ++ ++ If top == base, that is an error. ++ If top == active, the job will not be completed by itself, ++ user needs to complete the job with the block-job-complete ++ command after getting the ready event. (Since 2.0) ++ ++ If the base image is smaller than top, then the base image ++ will be resized to be the same size as top. If top is ++ smaller than the base image, the base will not be ++ truncated. If you want the base image size to match the ++ size of the smaller top, you can safely truncate it ++ yourself once the commit operation successfully completes. ++ (json-string) ++- "speed": the maximum speed, in bytes per second (json-int, optional) ++ ++ ++Example: ++ ++-> { "execute": "block-commit", "arguments": { "device": "virtio0", ++ "top": "/tmp/snap1.qcow2" } } ++<- { "return": {} } ++ ++EQMP ++ + #endif + + { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-update-test-070-for-vhdx.patch b/SOURCES/kvm-block-update-test-070-for-vhdx.patch new file mode 100644 index 0000000..299ed3c --- /dev/null +++ b/SOURCES/kvm-block-update-test-070-for-vhdx.patch @@ -0,0 +1,56 @@ +From 3c073988909052fb85088be3b45134fb0817286a Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 21 Jul 2015 17:30:55 +0200 +Subject: [PATCH 2/3] block: update test 070 for vhdx + +Message-id: +Patchwork-id: 67091 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] block: update test 070 for vhdx +Bugzilla: 1171576 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +This updates test 070 for VHDX - the sample image is added, and the +expected error output is update to reflect the error message present +downstream. + +Downstream only, as this image file already exists upstream, and was +missing downstream. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/070 | 2 +- + tests/qemu-iotests/070.out | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/qemu-iotests/070 b/tests/qemu-iotests/070 +index 41bf100..ac23281 100755 +--- a/tests/qemu-iotests/070 ++++ b/tests/qemu-iotests/070 +@@ -56,7 +56,7 @@ _use_sample_img iotest-dirtylog-10G-4M.vhdx.bz2 + + echo + echo "=== Verify open image read-only fails, due to dirty log ===" +-$QEMU_IO -r -c "read -pP 0xa5 0 18M" "$TEST_IMG" 2>&1 | grep -o "Permission denied" ++$QEMU_IO -r -c "read -pP 0xa5 0 18M" "$TEST_IMG" 2>&1 | grep -o "Operation not permitted" + + echo "=== Verify open image replays log ===" + $QEMU_IO -c "read -pP 0xa5 0 18M" "$TEST_IMG" | _filter_qemu_io +diff --git a/tests/qemu-iotests/070.out b/tests/qemu-iotests/070.out +index 9db8ff2..91bfb04 100644 +--- a/tests/qemu-iotests/070.out ++++ b/tests/qemu-iotests/070.out +@@ -1,7 +1,7 @@ + QA output created by 070 + + === Verify open image read-only fails, due to dirty log === +-Permission denied ++Operation not permitted + === Verify open image replays log === + read 18874368/18874368 bytes at offset 0 + 18 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-use-BDS-ref-for-block-jobs.patch b/SOURCES/kvm-block-use-BDS-ref-for-block-jobs.patch new file mode 100644 index 0000000..237f823 --- /dev/null +++ b/SOURCES/kvm-block-use-BDS-ref-for-block-jobs.patch @@ -0,0 +1,154 @@ +From d83c96945764748dff98dbe37169ae7c65a3dac5 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:52 +0100 +Subject: [PATCH 09/34] block: use BDS ref for block jobs + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-8-git-send-email-famz@redhat.com> +Patchwork-id: 56769 +O-Subject: [RHEL-7 qemu-kvm PATCH 07/18] block: use BDS ref for block jobs +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Block jobs used drive_get_ref(drive_get_by_blockdev(bs)) to avoid BDS +being deleted. Now we have BDS reference count, and block jobs don't +care about dinfo, so replace them to get cleaner code. It is also the +safe way when BDS has no drive info. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit fa510ebffa1fd509323e2e0888e369e23adbb508) +Signed-off-by: Fam Zheng + +Conflicts: + blockdev.c + +Conflict because drive-backup is not backported, and downstream has +6270aec (block: optionally disable live block jobs). + +Signed-off-by: Fam Zheng +--- + blockdev.c | 44 +++++++++++++++----------------------------- + blockjob.c | 1 + + 2 files changed, 16 insertions(+), 29 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 44 +++++++++++++++----------------------------- + blockjob.c | 1 + + 2 files changed, 16 insertions(+), 29 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 564262a..d795af2 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -243,34 +243,34 @@ void drive_get_ref(DriveInfo *dinfo) + + typedef struct { + QEMUBH *bh; +- DriveInfo *dinfo; +-} DrivePutRefBH; ++ BlockDriverState *bs; ++} BDRVPutRefBH; + + /* right now, this is only used from block_job_cb() */ + #ifdef CONFIG_LIVE_BLOCK_OPS +-static void drive_put_ref_bh(void *opaque) ++static void bdrv_put_ref_bh(void *opaque) + { +- DrivePutRefBH *s = opaque; ++ BDRVPutRefBH *s = opaque; + +- drive_put_ref(s->dinfo); ++ bdrv_unref(s->bs); + qemu_bh_delete(s->bh); + g_free(s); + } + + /* +- * Release a drive reference in a BH ++ * Release a BDS reference in a BH + * +- * It is not possible to use drive_put_ref() from a callback function when the +- * callers still need the drive. In such cases we schedule a BH to release the +- * reference. ++ * It is not safe to use bdrv_unref() from a callback function when the callers ++ * still need the BlockDriverState. In such cases we schedule a BH to release ++ * the reference. + */ +-static void drive_put_ref_bh_schedule(DriveInfo *dinfo) ++static void bdrv_put_ref_bh_schedule(BlockDriverState *bs) + { +- DrivePutRefBH *s; ++ BDRVPutRefBH *s; + +- s = g_new(DrivePutRefBH, 1); +- s->bh = qemu_bh_new(drive_put_ref_bh, s); +- s->dinfo = dinfo; ++ s = g_new(BDRVPutRefBH, 1); ++ s->bh = qemu_bh_new(bdrv_put_ref_bh, s); ++ s->bs = bs; + qemu_bh_schedule(s->bh); + } + #endif +@@ -1423,7 +1423,7 @@ static void block_job_cb(void *opaque, int ret) + } + qobject_decref(obj); + +- drive_put_ref_bh_schedule(drive_get_by_blockdev(bs)); ++ bdrv_put_ref_bh_schedule(bs); + } + + void qmp_block_stream(const char *device, bool has_base, +@@ -1460,11 +1460,6 @@ void qmp_block_stream(const char *device, bool has_base, + return; + } + +- /* Grab a reference so hotplug does not delete the BlockDriverState from +- * underneath us. +- */ +- drive_get_ref(drive_get_by_blockdev(bs)); +- + trace_qmp_block_stream(bs, bs->job); + } + +@@ -1521,10 +1516,6 @@ void qmp_block_commit(const char *device, + error_propagate(errp, local_err); + return; + } +- /* Grab a reference so hotplug does not delete the BlockDriverState from +- * underneath us. +- */ +- drive_get_ref(drive_get_by_blockdev(bs)); + } + + #define DEFAULT_MIRROR_BUF_SIZE (10 << 20) +@@ -1658,11 +1649,6 @@ void qmp_drive_mirror(const char *device, const char *target, + error_propagate(errp, local_err); + return; + } +- +- /* Grab a reference so hotplug does not delete the BlockDriverState from +- * underneath us. +- */ +- drive_get_ref(drive_get_by_blockdev(bs)); + } + #endif + +diff --git a/blockjob.c b/blockjob.c +index c0a22d9..6d8c3a2 100644 +--- a/blockjob.c ++++ b/blockjob.c +@@ -45,6 +45,7 @@ void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs, + error_set(errp, QERR_DEVICE_IN_USE, bdrv_get_device_name(bs)); + return NULL; + } ++ bdrv_ref(bs); + bdrv_set_in_use(bs, 1); + + job = g_malloc0(job_type->instance_size); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-use-DIV_ROUND_UP-in-bdrv_co_do_readv.patch b/SOURCES/kvm-block-use-DIV_ROUND_UP-in-bdrv_co_do_readv.patch new file mode 100644 index 0000000..cf3048c --- /dev/null +++ b/SOURCES/kvm-block-use-DIV_ROUND_UP-in-bdrv_co_do_readv.patch @@ -0,0 +1,44 @@ +From 707398814bf924b6c430a49897171d1322011bff Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Sep 2013 19:55:33 +0800 +Subject: [PATCH 18/37] block: use DIV_ROUND_UP in bdrv_co_do_readv + +Message-id: <1392117622-28812-19-git-send-email-kwolf@redhat.com> +Patchwork-id: 57183 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 18/37] block: use DIV_ROUND_UP in bdrv_co_do_readv +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Fam Zheng + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit d055a1fec37ec84fd3e87d48a0e766a9ff8369c4) + +Signed-off-by: Kevin Wolf +--- + block.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) +--- + block.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 645bcd0..feeab4e 100644 +--- a/block.c ++++ b/block.c +@@ -2795,7 +2795,7 @@ static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs, + goto out; + } + +- total_sectors = (len + BDRV_SECTOR_SIZE - 1) >> BDRV_SECTOR_BITS; ++ total_sectors = DIV_ROUND_UP(len, BDRV_SECTOR_SIZE); + max_nb_sectors = MAX(0, total_sectors - sector_num); + if (max_nb_sectors > 0) { + ret = drv->bdrv_co_readv(bs, sector_num, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-use-bdrv_has_zero_init-to-return-BDRV_BLOCK_ZE.patch b/SOURCES/kvm-block-use-bdrv_has_zero_init-to-return-BDRV_BLOCK_ZE.patch new file mode 100644 index 0000000..9a0e601 --- /dev/null +++ b/SOURCES/kvm-block-use-bdrv_has_zero_init-to-return-BDRV_BLOCK_ZE.patch @@ -0,0 +1,61 @@ +From 95dd0c697b1b924c282cad302fc7f5af3330993d Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:40 +0200 +Subject: [PATCH 15/81] block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-16-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54998 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 15/26] block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Alternatively, this could use a "discard zeroes data" flag returned +by bdrv_get_info. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 415b5b013ce74126e71459b922a92377918ae2ef) +--- + block.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +diff --git a/block.c b/block.c +index 8c583bf..00bc3b2 100644 +--- a/block.c ++++ b/block.c +@@ -3041,6 +3041,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + { + int64_t length; + int64_t n; ++ int64_t ret; + + length = bdrv_getlength(bs); + if (length < 0) { +@@ -3062,7 +3063,15 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs, + return BDRV_BLOCK_DATA; + } + +- return bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); ++ ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ if (!(ret & BDRV_BLOCK_DATA) && bdrv_has_zero_init(bs)) { ++ ret |= BDRV_BLOCK_ZERO; ++ } ++ return ret; + } + + /* Coroutine wrapper for bdrv_get_block_status() */ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-use-correct-filename-for-error-report.patch b/SOURCES/kvm-block-use-correct-filename-for-error-report.patch new file mode 100644 index 0000000..00e3493 --- /dev/null +++ b/SOURCES/kvm-block-use-correct-filename-for-error-report.patch @@ -0,0 +1,58 @@ +From bde3157fa573b77a573a248ed27a7ad6974a329e Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Thu, 23 Jan 2014 21:02:38 +0100 +Subject: [PATCH 14/14] block: use correct filename for error report + +RH-Author: Jeffrey Cody +Message-id: <8724e61ff2600d6daa9a50e4e920e35e658d252b.1390510896.git.jcody@redhat.com> +Patchwork-id: 56934 +O-Subject: [RHEL7 qemu-kvm PATCH] block: use correct filename for error report +Bugzilla: 1051438 +RH-Acked-by: Fam Zheng +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf + +From: Dunrong Huang + +The content filename point to will be erased by qemu_opts_absorb_qdict() +in raw_open_common() in drv->bdrv_file_open() + +So it's better to use bs->filename. + +Signed-off-by: Dunrong Huang +Reviewed-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 2fa9aa59cfc472c16309c4e84547aa873423b2f5) + +RHEL7 Notes: + BZ: 1051438 + Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6926450 + +Signed-off-by: Jeff Cody +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 3232971..1433844 100644 +--- a/block.c ++++ b/block.c +@@ -783,8 +783,8 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + if (ret < 0) { + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); +- } else if (filename) { +- error_setg_errno(errp, -ret, "Could not open '%s'", filename); ++ } else if (bs->filename[0]) { ++ error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename); + } else { + error_setg_errno(errp, -ret, "Could not open image"); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-block-use-per-object-cflags-and-libs.patch b/SOURCES/kvm-block-use-per-object-cflags-and-libs.patch new file mode 100644 index 0000000..4a37fc3 --- /dev/null +++ b/SOURCES/kvm-block-use-per-object-cflags-and-libs.patch @@ -0,0 +1,157 @@ +From 37782b793485e0f45a6e6f0da40d24c04191a13b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 16 Jul 2014 02:20:28 -0500 +Subject: [CHANGE 28/29] block: use per-object cflags and libs +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405477228-11490-5-git-send-email-famz@redhat.com> +Patchwork-id: 59918 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/4] block: use per-object cflags and libs +Bugzilla: 1017685 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Miroslav Rezanina + +Upstream: 6ebc91e5d0f408371460ab4329dc6de7f93306ac + +No longer adds flags and libs for them to global variables, instead +create config-host.mak variables like FOO_CFLAGS and FOO_LIBS, which is +used as per object cflags and libs. + +This removes unwanted dependencies from libcacard. + +Signed-off-by: Fam Zheng +[Split from Fam's patch to enable modules. - Paolo] +Signed-off-by: Paolo Bonzini + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini + +Manual backport. +Signed-off-by: Miroslav Rezanina +Signed-off-by: Fam Zheng +--- + block/Makefile.objs | 13 ++++++++++++- + configure | 20 ++++++++------------ + 2 files changed, 20 insertions(+), 13 deletions(-) + +Signed-off-by: jen +--- + block/Makefile.objs | 13 ++++++++++++- + configure | 20 ++++++++------------ + 2 files changed, 20 insertions(+), 13 deletions(-) + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 84dd57f..dd01fb3 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -24,4 +24,15 @@ common-obj-y += commit.o + common-obj-y += mirror.o + endif + +-$(obj)/curl.o: QEMU_CFLAGS+=$(CURL_CFLAGS) ++iscsi.o-cflags := $(LIBISCSI_CFLAGS) ++iscsi.o-libs := $(LIBISCSI_LIBS) ++curl.o-cflags := $(CURL_CFLAGS) ++curl.o-libs := $(CURL_LIBS) ++rbd.o-cflags := $(RBD_CFLAGS) ++rbd.o-libs := $(RBD_LIBS) ++gluster.o-cflags := $(GLUSTERFS_CFLAGS) ++gluster.o-libs := $(GLUSTERFS_LIBS) ++ssh.o-cflags := $(LIBSSH2_CFLAGS) ++ssh.o-libs := $(LIBSSH2_LIBS) ++qcow.o-libs := -lz ++linux-aio.o-libs := -laio +diff --git a/configure b/configure +index 8c6f4e5..4552e08 100755 +--- a/configure ++++ b/configure +@@ -2290,8 +2290,6 @@ EOF + curl_libs=`$curlconfig --libs 2>/dev/null` + if compile_prog "$curl_cflags" "$curl_libs" ; then + curl=yes +- libs_tools="$curl_libs $libs_tools" +- libs_softmmu="$curl_libs $libs_softmmu" + else + if test "$curl" = "yes" ; then + feature_not_found "curl" +@@ -2442,9 +2440,6 @@ if test "$libssh2" != "no" ; then + libssh2_cflags=`$pkg_config libssh2 --cflags` + libssh2_libs=`$pkg_config libssh2 --libs` + libssh2=yes +- libs_tools="$libssh2_libs $libs_tools" +- libs_softmmu="$libssh2_libs $libs_softmmu" +- QEMU_CFLAGS="$QEMU_CFLAGS $libssh2_cflags" + else + if test "$libssh2" = "yes" ; then + error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" +@@ -2490,8 +2485,6 @@ int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); retu + EOF + if compile_prog "" "-laio" ; then + linux_aio=yes +- libs_softmmu="$libs_softmmu -laio" +- libs_tools="$libs_tools -laio" + else + if test "$linux_aio" = "yes" ; then + feature_not_found "linux AIO" +@@ -2644,8 +2637,6 @@ EOF + glusterfs_libs="-lgfapi -lgfrpc -lgfxdr" + if compile_prog "" "$glusterfs_libs" ; then + glusterfs=yes +- libs_tools="$glusterfs_libs $libs_tools" +- libs_softmmu="$glusterfs_libs $libs_softmmu" + else + if test "$glusterfs" = "yes" ; then + feature_not_found "GlusterFS backend support" +@@ -3002,11 +2993,9 @@ EOF + libiscsi="yes" + libiscsi_cflags=$($pkg_config --cflags libiscsi 2>/dev/null) + libiscsi_libs=$($pkg_config --libs libiscsi 2>/dev/null) +- CFLAGS="$CFLAGS $libiscsi_cflags" +- LIBS="$LIBS $libiscsi_libs" + elif compile_prog "" "-liscsi" ; then + libiscsi="yes" +- LIBS="$LIBS -liscsi" ++ libiscsi_libs="-liscsi" + else + if test "$libiscsi" = "yes" ; then + feature_not_found "libiscsi" +@@ -3877,6 +3866,7 @@ fi + if test "$curl" = "yes" ; then + echo "CONFIG_CURL=y" >> $config_host_mak + echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak ++ echo "CURL_LIBS=$curl_libs" >> $config_host_mak + fi + if test "$brlapi" = "yes" ; then + echo "CONFIG_BRLAPI=y" >> $config_host_mak +@@ -3966,6 +3956,8 @@ fi + + if test "$libiscsi" = "yes" ; then + echo "CONFIG_LIBISCSI=y" >> $config_host_mak ++ echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak ++ echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak + fi + + if test "$seccomp" = "yes"; then +@@ -4022,10 +4014,14 @@ fi + + if test "$glusterfs" = "yes" ; then + echo "CONFIG_GLUSTERFS=y" >> $config_host_mak ++ echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak ++ echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak + fi + + if test "$libssh2" = "yes" ; then + echo "CONFIG_LIBSSH2=y" >> $config_host_mak ++ echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak ++ echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak + fi + + if test "$virtio_blk_data_plane" = "yes" ; then +-- +1.9.3 + diff --git a/SOURCES/kvm-block-use-the-standard-ret-instead-of-result.patch b/SOURCES/kvm-block-use-the-standard-ret-instead-of-result.patch new file mode 100644 index 0000000..bb09b27 --- /dev/null +++ b/SOURCES/kvm-block-use-the-standard-ret-instead-of-result.patch @@ -0,0 +1,143 @@ +From 826ac25b8740b86a5c6081ae35eed45d6cbb5f2b Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:52 +0200 +Subject: [PATCH 14/20] block: use the standard 'ret' instead of 'result' + +Message-id: <48fc259f545a424dff6e0308e0f7a12ec425d0dc.1410897407.git.jcody@redhat.com> +Patchwork-id: 61218 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 13/15] block: use the standard 'ret' instead of 'result' +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Most QEMU code uses 'ret' for function return values. The VDI driver +uses a mix of 'result' and 'ret'. This cleans that up, switching over +to the standard 'ret' usage. + +Reviewed-by: Max Reitz +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit dddc7750d68c3ea86d88b060a77acb60d2eeb4a7) + +RHEL7 Notes: Difference from upstream is due to conflict resolution from + previous patch. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vdi.c | 34 +++++++++++++++++----------------- + 1 files changed, 17 insertions(+), 17 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index 1f4491f..298ee12 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -350,23 +350,23 @@ static int vdi_make_empty(BlockDriverState *bs) + static int vdi_probe(const uint8_t *buf, int buf_size, const char *filename) + { + const VdiHeader *header = (const VdiHeader *)buf; +- int result = 0; ++ int ret = 0; + + logout("\n"); + + if (buf_size < sizeof(*header)) { + /* Header too small, no VDI. */ + } else if (le32_to_cpu(header->signature) == VDI_SIGNATURE) { +- result = 100; ++ ret = 100; + } + +- if (result == 0) { ++ if (ret == 0) { + logout("no vdi image\n"); + } else { + logout("%s", header->text); + } + +- return result; ++ return ret; + } + + static int vdi_open(BlockDriverState *bs, QDict *options, int flags, +@@ -673,7 +673,7 @@ static int vdi_co_write(BlockDriverState *bs, + static int vdi_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { +- int result = 0; ++ int ret = 0; + uint64_t bytes = 0; + uint32_t blocks; + size_t block_size = DEFAULT_CLUSTER_SIZE; +@@ -710,20 +710,20 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + } + + if (bytes > VDI_DISK_SIZE_MAX) { +- result = -ENOTSUP; ++ ret = -ENOTSUP; + error_setg(errp, "Unsupported VDI image size (size is 0x%" PRIx64 + ", max supported is 0x%" PRIx64 ")", + bytes, VDI_DISK_SIZE_MAX); + goto exit; + } + +- result = bdrv_create_file(filename, options, &local_err); +- if (result < 0) { ++ ret = bdrv_create_file(filename, options, &local_err); ++ if (ret < 0) { + error_propagate(errp, local_err); + goto exit; + } +- result = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); +- if (result < 0) { ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); ++ if (ret < 0) { + error_propagate(errp, local_err); + goto exit; + } +@@ -757,8 +757,8 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + vdi_header_print(&header); + #endif + vdi_header_to_le(&header); +- result = bdrv_pwrite_sync(bs, offset, &header, sizeof(header)); +- if (result < 0) { ++ ret = bdrv_pwrite_sync(bs, offset, &header, sizeof(header)); ++ if (ret < 0) { + error_setg(errp, "Error writing header to %s", filename); + goto exit; + } +@@ -773,8 +773,8 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + bmap[i] = VDI_UNALLOCATED; + } + } +- result = bdrv_pwrite_sync(bs, offset, bmap, bmap_size); +- if (result < 0) { ++ ret = bdrv_pwrite_sync(bs, offset, bmap, bmap_size); ++ if (ret < 0) { + error_setg(errp, "Error writing bmap to %s", filename); + goto exit; + } +@@ -782,8 +782,8 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + } + + if (image_type == VDI_TYPE_STATIC) { +- result = bdrv_truncate(bs, offset + blocks * block_size); +- if (result < 0) { ++ ret = bdrv_truncate(bs, offset + blocks * block_size); ++ if (ret < 0) { + error_setg(errp, "Failed to statically allocate %s", filename); + goto exit; + } +@@ -792,7 +792,7 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + exit: + bdrv_unref(bs); + g_free(bmap); +- return result; ++ return ret; + } + + static void vdi_close(BlockDriverState *bs) +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vdi-Error-out-immediately-in-vdi_create.patch b/SOURCES/kvm-block-vdi-Error-out-immediately-in-vdi_create.patch new file mode 100644 index 0000000..c8c580e --- /dev/null +++ b/SOURCES/kvm-block-vdi-Error-out-immediately-in-vdi_create.patch @@ -0,0 +1,72 @@ +From 5a762ccf05fea97bc3e98b8dd317374c51c14c26 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:47 +0200 +Subject: [PATCH 09/20] block/vdi: Error out immediately in vdi_create() + +Message-id: <2947dd91a4c9967cbd5a241145c355263e04207a.1410897407.git.jcody@redhat.com> +Patchwork-id: 61213 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 08/15] block/vdi: Error out immediately in vdi_create() +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Max Reitz + +Currently, if an error occurs during the part of vdi_create() which +actually writes the image, the function stores -errno, but continues +anyway. + +Instead of trying to write data which (if it can be written at all) does +not make any sense without the operations before succeeding (e.g., +writing the image header), just error out immediately. + +Signed-off-by: Max Reitz +Reviewed-by: Stefan Weil +Signed-off-by: Kevin Wolf +(cherry picked from commit 0549ea8b6d3ed4eba9a3bd0abfaed3af5de69873) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/vdi.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index 0211023..fb25424 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -753,6 +753,7 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + vdi_header_to_le(&header); + if (write(fd, &header, sizeof(header)) < 0) { + result = -errno; ++ goto close_and_exit; + } + + if (bmap_size > 0) { +@@ -766,6 +767,8 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + } + if (write(fd, bmap, bmap_size) < 0) { + result = -errno; ++ g_free(bmap); ++ goto close_and_exit; + } + g_free(bmap); + } +@@ -773,10 +776,12 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + if (image_type == VDI_TYPE_STATIC) { + if (ftruncate(fd, sizeof(header) + bmap_size + blocks * block_size)) { + result = -errno; ++ goto close_and_exit; + } + } + +- if (close(fd) < 0) { ++close_and_exit: ++ if ((close(fd) < 0) && !result) { + result = -errno; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vdi-bounds-check-qemu-io-tests.patch b/SOURCES/kvm-block-vdi-bounds-check-qemu-io-tests.patch new file mode 100644 index 0000000..23308a4 --- /dev/null +++ b/SOURCES/kvm-block-vdi-bounds-check-qemu-io-tests.patch @@ -0,0 +1,218 @@ +From a8a02156e1893fa0ea440c50a58171842f2aff1b Mon Sep 17 00:00:00 2001 +From: Jeff Cody +Date: Tue, 25 Mar 2014 14:23:47 +0100 +Subject: [PATCH 40/49] block: vdi bounds check qemu-io tests + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-41-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 40/48] block: vdi bounds check qemu-io tests +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Jeff Cody + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +This test checks for proper bounds checking of some VDI input +headers. The following is checked: + +1. Max image size (1024TB) with the appropriate Blocks In Image +value (0x3fffffff) is detected as valid. + +2. Image size exceeding max (1024TB) is seen as invalid + +3. Valid image size but with Blocks In Image value that is too +small fails + +4. Blocks In Image size exceeding max (0x3fffffff) is seen as invalid + +5. 64MB image, with 64 Blocks In Image, and 1MB Block Size is seen +as valid + +6. Block Size < 1MB not supported + +7. Block Size > 1MB not supported + +Signed-off-by: Jeff Cody +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf + +Conflicts: +tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/084 | 104 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/084.out | 33 ++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 138 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/084 + create mode 100644 tests/qemu-iotests/084.out + +diff --git a/tests/qemu-iotests/084 b/tests/qemu-iotests/084 +new file mode 100755 +index 0000000..10a5a65 +--- /dev/null ++++ b/tests/qemu-iotests/084 +@@ -0,0 +1,104 @@ ++#!/bin/bash ++# ++# Test case for VDI header corruption; image too large, and too many blocks ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=jcody@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests vdi-specific header fields ++_supported_fmt vdi ++_supported_proto generic ++_supported_os Linux ++ ++ds_offset=368 # disk image size field offset ++bs_offset=376 # block size field offset ++bii_offset=384 # block in image field offset ++ ++echo ++echo "=== Testing image size bounds ===" ++echo ++_make_test_img 64M ++ ++# check for image size too large ++# poke max image size, and appropriate blocks_in_image value ++echo "Test 1: Maximum size (1024 TB):" ++poke_file "$TEST_IMG" "$ds_offset" "\x00\x00\xf0\xff\xff\xff\x03\x00" ++poke_file "$TEST_IMG" "$bii_offset" "\xff\xff\xff\x3f" ++_img_info ++ ++echo ++echo "Test 2: Size too large (1024TB + 1)" ++# This should be too large (-EINVAL): ++poke_file "$TEST_IMG" "$ds_offset" "\x00\x00\xf1\xff\xff\xff\x03\x00" ++_img_info ++ ++echo ++echo "Test 3: Size valid (64M), but Blocks In Image too small (63)" ++# This sets the size to 64M, but with a blocks_in_image size that is ++# too small ++poke_file "$TEST_IMG" "$ds_offset" "\x00\x00\x00\x04\x00\x00\x00\x00" ++# For a 64M image, we would need a blocks_in_image value of at least 64, ++# so 63 should be too small and give us -ENOTSUP ++poke_file "$TEST_IMG" "$bii_offset" "\x3f\x00\x00\x00" ++_img_info ++ ++echo ++echo "Test 4: Size valid (64M), but Blocks In Image exceeds max allowed" ++# Now check the bounds of blocks_in_image - 0x3fffffff should be the max ++# value here, and we should get -ENOTSUP ++poke_file "$TEST_IMG" "$bii_offset" "\x00\x00\x00\x40" ++_img_info ++ ++# Finally, 1MB is the only block size supported. Verify that ++# a value != 1MB results in error, both smaller and larger ++echo ++echo "Test 5: Valid Image: 64MB, Blocks In Image 64, Block Size 1MB" ++poke_file "$TEST_IMG" "$bii_offset" "\x40\x00\x00\x00" # reset bii to valid ++poke_file "$TEST_IMG" "$bs_offset" "\x00\x00\x10\x00" # valid ++_img_info ++echo ++echo "Test 6: Block Size != 1MB; too small test (1MB - 1)" ++poke_file "$TEST_IMG" "$bs_offset" "\xff\xff\x0f\x00" # invalid (too small) ++_img_info ++echo ++echo "Test 7: Block Size != 1MB; too large test (1MB + 1)" ++poke_file "$TEST_IMG" "$bs_offset" "\x00\x00\x11\x00" # invalid (too large) ++_img_info ++# success, all done ++echo ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/084.out b/tests/qemu-iotests/084.out +new file mode 100644 +index 0000000..99c8e74 +--- /dev/null ++++ b/tests/qemu-iotests/084.out +@@ -0,0 +1,33 @@ ++QA output created by 084 ++ ++=== Testing image size bounds === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Test 1: Maximum size (1024 TB): ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 1024T (1125899905794048 bytes) ++cluster_size: 1048576 ++ ++Test 2: Size too large (1024TB + 1) ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Invalid argument ++ ++Test 3: Size valid (64M), but Blocks In Image too small (63) ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Operation not supported ++ ++Test 4: Size valid (64M), but Blocks In Image exceeds max allowed ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Operation not supported ++ ++Test 5: Valid Image: 64MB, Blocks In Image 64, Block Size 1MB ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 1048576 ++ ++Test 6: Block Size != 1MB; too small test (1MB - 1) ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Operation not supported ++ ++Test 7: Block Size != 1MB; too large test (1MB + 1) ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Operation not supported ++ ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index fc34194..e8ad780 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -77,5 +77,6 @@ + 079 rw auto + 080 rw auto + 082 rw auto quick ++084 img auto + 086 rw auto quick + 088 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vdi-use-block-layer-ops-in-vdi_create-instead-.patch b/SOURCES/kvm-block-vdi-use-block-layer-ops-in-vdi_create-instead-.patch new file mode 100644 index 0000000..1bc0f52 --- /dev/null +++ b/SOURCES/kvm-block-vdi-use-block-layer-ops-in-vdi_create-instead-.patch @@ -0,0 +1,148 @@ +From 9628ef39a4866417b7c2dc5af81ba12bfeb33630 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:51 +0200 +Subject: [PATCH 13/20] block: vdi - use block layer ops in vdi_create, instead of posix calls + +Message-id: +Patchwork-id: 61217 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 12/15] block: vdi - use block layer ops in vdi_create, instead of posix calls +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Use the block layer to create, and write to, the image file in the +VDI .bdrv_create() operation. + +This has a couple of benefits: Images can now be created over protocols, +and hacks such as NOCOW are not needed in the image format driver, and +the underlying file protocol appropriate for the host OS can be relied +upon. + +Also some minor cleanup for error handling. + +Reviewed-by: Max Reitz +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 70747862f129ea0af5e3910f204cc93174c549e4) + +Conflicts: + block/vdi.c + +RHEL7 notes: conflicts due to not having the 'nocow' commit, as + well as not using QemuOpts yet. Arguments for bdrv_open() + are different, and downstream does not have + BDRV_O_PROTOCOL. In addition, bdrv_file_open() must be + used instead of just bdrv_open(). + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vdi.c | 52 +++++++++++++++++++++++++++++----------------------- + 1 files changed, 29 insertions(+), 23 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index fb25424..1f4491f 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -673,7 +673,6 @@ static int vdi_co_write(BlockDriverState *bs, + static int vdi_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { +- int fd; + int result = 0; + uint64_t bytes = 0; + uint32_t blocks; +@@ -682,6 +681,10 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + VdiHeader header; + size_t i; + size_t bmap_size; ++ int64_t offset = 0; ++ Error *local_err = NULL; ++ BlockDriverState *bs = NULL; ++ uint32_t *bmap = NULL; + + logout("\n"); + +@@ -714,11 +717,14 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + goto exit; + } + +- fd = qemu_open(filename, +- O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, +- 0644); +- if (fd < 0) { +- result = -errno; ++ result = bdrv_create_file(filename, options, &local_err); ++ if (result < 0) { ++ error_propagate(errp, local_err); ++ goto exit; ++ } ++ result = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); ++ if (result < 0) { ++ error_propagate(errp, local_err); + goto exit; + } + +@@ -751,13 +757,15 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + vdi_header_print(&header); + #endif + vdi_header_to_le(&header); +- if (write(fd, &header, sizeof(header)) < 0) { +- result = -errno; +- goto close_and_exit; ++ result = bdrv_pwrite_sync(bs, offset, &header, sizeof(header)); ++ if (result < 0) { ++ error_setg(errp, "Error writing header to %s", filename); ++ goto exit; + } ++ offset += sizeof(header); + + if (bmap_size > 0) { +- uint32_t *bmap = g_malloc0(bmap_size); ++ bmap = g_malloc0(bmap_size); + for (i = 0; i < blocks; i++) { + if (image_type == VDI_TYPE_STATIC) { + bmap[i] = i; +@@ -765,27 +773,25 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + bmap[i] = VDI_UNALLOCATED; + } + } +- if (write(fd, bmap, bmap_size) < 0) { +- result = -errno; +- g_free(bmap); +- goto close_and_exit; ++ result = bdrv_pwrite_sync(bs, offset, bmap, bmap_size); ++ if (result < 0) { ++ error_setg(errp, "Error writing bmap to %s", filename); ++ goto exit; + } +- g_free(bmap); ++ offset += bmap_size; + } + + if (image_type == VDI_TYPE_STATIC) { +- if (ftruncate(fd, sizeof(header) + bmap_size + blocks * block_size)) { +- result = -errno; +- goto close_and_exit; ++ result = bdrv_truncate(bs, offset + blocks * block_size); ++ if (result < 0) { ++ error_setg(errp, "Failed to statically allocate %s", filename); ++ goto exit; + } + } + +-close_and_exit: +- if ((close(fd) < 0) && !result) { +- result = -errno; +- } +- + exit: ++ bdrv_unref(bs); ++ g_free(bmap); + return result; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-account-for-identical-header-sections.patch b/SOURCES/kvm-block-vhdx-account-for-identical-header-sections.patch new file mode 100644 index 0000000..ac50c5d --- /dev/null +++ b/SOURCES/kvm-block-vhdx-account-for-identical-header-sections.patch @@ -0,0 +1,86 @@ +From 6fb76589c86264784014d8b555dc9c479c534898 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 27 May 2014 19:05:11 +0200 +Subject: [PATCH 07/13] block: vhdx - account for identical header sections +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Jeffrey Cody +Message-id: <6a956eaa23796489845aaf8b0ef8aa390014e98b.1401217451.git.jcody@redhat.com> +Patchwork-id: 59040 +O-Subject: [PATCH qemu-kvm RHEL7.1] block: vhdx - account for identical header sections +Bugzilla: 1097020 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +The VHDX spec v1.00 declares that "a header is current if it is the only +valid header or if it is valid and its SequenceNumber field is greater +than the other header’s SequenceNumber field. The parser must only use +data from the current header. If there is no current header, then the +VHDX file is corrupt." + +However, the Disk2VHD tool from Microsoft creates a VHDX image file that +has 2 identical headers, including matching checksums and matching +sequence numbers. Likely, as a shortcut the tool is just writing the +header twice, for the active and inactive headers, during the image +creation. Technically, this should be considered a corrupt VHDX file +(at least per the 1.00 spec, and that is how we currently treat it). + +But in order to accomodate images created with Disk2VHD, we can safely +create an exception for this case. If we find identical sequence +numbers, then we check the VHDXHeader-sized chunks of each 64KB header +sections (we won't rely just on the crc32c to indicate the headers are +the same). If they are identical, then we go ahead and use the first +one. + +Reported-by: Nerijus Baliūnas +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 6906046169ffa9d829beeeaafe1fadeba51669fb) + +Conflicts: + block/vhdx.c + +Signed-off-by: Jeff Cody +--- +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7505809 +BZ: 1097020 + +Conflict notes: the conflict was with the ret value; current upstream + removed that in favor of passing in errp to the function + + block/vhdx.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 11 +++++++++-- + 1 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 66a25c9..21ad6ad 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -473,8 +473,15 @@ static int vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s) + } else if (h2_seq > h1_seq) { + s->curr_header = 1; + } else { +- ret = -EINVAL; +- goto fail; ++ /* The Microsoft Disk2VHD tool will create 2 identical ++ * headers, with identical sequence numbers. If the headers are ++ * identical, don't consider the file corrupt */ ++ if (!memcmp(header1, header2, sizeof(VHDXHeader))) { ++ s->curr_header = 0; ++ } else { ++ ret = -EINVAL; ++ goto fail; ++ } + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-add-.bdrv_create-support.patch b/SOURCES/kvm-block-vhdx-add-.bdrv_create-support.patch new file mode 100644 index 0000000..78eb0f8 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-add-.bdrv_create-support.patch @@ -0,0 +1,739 @@ +From 243d499717ebba0c0644620237c266112164d5ed Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:05 +0100 +Subject: [PATCH 22/25] block: vhdx - add .bdrv_create() support + +RH-Author: Jeffrey Cody +Message-id: <450971418e351130082c4c5f3c8ac8231810c556.1384975172.git.jcody@redhat.com> +Patchwork-id: 55814 +O-Subject: [RHEL7 qemu-kvm PATCH 22/26] block: vhdx - add .bdrv_create() support +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds support for VHDX image creation, for images of type "Fixed" +and "Dynamic". "Differencing" types (i.e., VHDX images with backing +files) are currently not supported. + +Options for image creation include: + * log size: + The size of the journaling log for VHDX. Minimum is 1MB, + and it must be a multiple of 1MB. Invalid log sizes will be + silently fixed by rounding up to the nearest MB. + + Default is 1MB. + + * block size: + This is the size of a payload block. The range is 1MB to 256MB, + inclusive, and must be a multiple of 1MB as well. Invalid sizes + and multiples will be silently fixed. If '0' is passed, then + a sane size is chosen (depending on virtual image size). + + Default is 0 (Auto-select). + + * subformat: + - "dynamic" + An image without data pre-allocated. + - "fixed" + An image with data pre-allocated. + + Default is "dynamic" + +When creating the image file, the lettered sections are created: + +-----------------------------------------------------------------. +| (A) | (B) | (C) | (D) | (E) +| File ID | Header1 | Header 2 | Region Tbl 1 | Region Tbl 2 +| | | | | +.-----------------------------------------------------------------. +0 64KB 128KB 192KB 256KB 320KB + +.---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------. +| (F) | (G) | (H) | +| Journal Log | BAT / Bitmap | Metadata | .... data ...... +| | | | +.---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------. +1MB (var.) (var.) (var.) + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3412f7b1bd8f250c34c9f933767d06b9444bb821) + +RHEL7 Note: Although the cherry-pick applied clean, the 'bdrv_unref()' + call in the upstream version was reverted back to the + original 'bdrv_delete()' that is present in RHEL7. + +Signed-off-by: Jeff Cody +--- + block/vhdx.c | 558 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.h | 15 +- + 2 files changed, 572 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 557 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.h | 15 ++- + 2 files changed, 571 insertions(+), 1 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 5a112e8..8e3b371 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -23,6 +23,19 @@ + #include "migration/migration.h" + + #include ++#include ++ ++/* Options for VHDX creation */ ++ ++#define VHDX_BLOCK_OPT_LOG_SIZE "log_size" ++#define VHDX_BLOCK_OPT_BLOCK_SIZE "block_size" ++#define VHDX_BLOCK_OPT_ZERO "block_state_zero" ++ ++typedef enum VHDXImageType { ++ VHDX_TYPE_DYNAMIC = 0, ++ VHDX_TYPE_FIXED, ++ VHDX_TYPE_DIFFERENCING, /* Currently unsupported */ ++} VHDXImageType; + + /* Several metadata and region table data entries are identified by + * guids in a MS-specific GUID format. */ +@@ -1332,6 +1345,548 @@ exit: + } + + ++ ++/* ++ * Create VHDX Headers ++ * ++ * There are 2 headers, and the highest sequence number will represent ++ * the active header ++ */ ++static int vhdx_create_new_headers(BlockDriverState *bs, uint64_t image_size, ++ uint32_t log_size) ++{ ++ int ret = 0; ++ VHDXHeader *hdr = NULL; ++ ++ hdr = g_malloc0(sizeof(VHDXHeader)); ++ ++ hdr->signature = VHDX_HEADER_SIGNATURE; ++ hdr->sequence_number = g_random_int(); ++ hdr->log_version = 0; ++ hdr->version = 1; ++ hdr->log_length = log_size; ++ hdr->log_offset = VHDX_HEADER_SECTION_END; ++ vhdx_guid_generate(&hdr->file_write_guid); ++ vhdx_guid_generate(&hdr->data_write_guid); ++ ++ ret = vhdx_write_header(bs, hdr, VHDX_HEADER1_OFFSET, false); ++ if (ret < 0) { ++ goto exit; ++ } ++ hdr->sequence_number++; ++ ret = vhdx_write_header(bs, hdr, VHDX_HEADER2_OFFSET, false); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++exit: ++ g_free(hdr); ++ return ret; ++} ++ ++ ++/* ++ * Create the Metadata entries. ++ * ++ * For more details on the entries, see section 3.5 (pg 29) in the ++ * VHDX 1.00 specification. ++ * ++ * We support 5 metadata entries (all required by spec): ++ * File Parameters, ++ * Virtual Disk Size, ++ * Page 83 Data, ++ * Logical Sector Size, ++ * Physical Sector Size ++ * ++ * The first 64KB of the Metadata section is reserved for the metadata ++ * header and entries; beyond that, the metadata items themselves reside. ++ */ ++static int vhdx_create_new_metadata(BlockDriverState *bs, ++ uint64_t image_size, ++ uint32_t block_size, ++ uint32_t sector_size, ++ uint64_t metadata_offset, ++ VHDXImageType type) ++{ ++ int ret = 0; ++ uint32_t offset = 0; ++ void *buffer = NULL; ++ void *entry_buffer; ++ VHDXMetadataTableHeader *md_table;; ++ VHDXMetadataTableEntry *md_table_entry; ++ ++ /* Metadata entries */ ++ VHDXFileParameters *mt_file_params; ++ VHDXVirtualDiskSize *mt_virtual_size; ++ VHDXPage83Data *mt_page83; ++ VHDXVirtualDiskLogicalSectorSize *mt_log_sector_size; ++ VHDXVirtualDiskPhysicalSectorSize *mt_phys_sector_size; ++ ++ entry_buffer = g_malloc0(sizeof(VHDXFileParameters) + ++ sizeof(VHDXVirtualDiskSize) + ++ sizeof(VHDXPage83Data) + ++ sizeof(VHDXVirtualDiskLogicalSectorSize) + ++ sizeof(VHDXVirtualDiskPhysicalSectorSize)); ++ ++ mt_file_params = entry_buffer; ++ offset += sizeof(VHDXFileParameters); ++ mt_virtual_size = entry_buffer + offset; ++ offset += sizeof(VHDXVirtualDiskSize); ++ mt_page83 = entry_buffer + offset; ++ offset += sizeof(VHDXPage83Data); ++ mt_log_sector_size = entry_buffer + offset; ++ offset += sizeof(VHDXVirtualDiskLogicalSectorSize); ++ mt_phys_sector_size = entry_buffer + offset; ++ ++ mt_file_params->block_size = cpu_to_le32(block_size); ++ if (type == VHDX_TYPE_FIXED) { ++ mt_file_params->data_bits |= VHDX_PARAMS_LEAVE_BLOCKS_ALLOCED; ++ cpu_to_le32s(&mt_file_params->data_bits); ++ } ++ ++ vhdx_guid_generate(&mt_page83->page_83_data); ++ cpu_to_leguids(&mt_page83->page_83_data); ++ mt_virtual_size->virtual_disk_size = cpu_to_le64(image_size); ++ mt_log_sector_size->logical_sector_size = cpu_to_le32(sector_size); ++ mt_phys_sector_size->physical_sector_size = cpu_to_le32(sector_size); ++ ++ buffer = g_malloc0(VHDX_HEADER_BLOCK_SIZE); ++ md_table = buffer; ++ ++ md_table->signature = VHDX_METADATA_SIGNATURE; ++ md_table->entry_count = 5; ++ vhdx_metadata_header_le_export(md_table); ++ ++ ++ /* This will reference beyond the reserved table portion */ ++ offset = 64 * KiB; ++ ++ md_table_entry = buffer + sizeof(VHDXMetadataTableHeader); ++ ++ md_table_entry[0].item_id = file_param_guid; ++ md_table_entry[0].offset = offset; ++ md_table_entry[0].length = sizeof(VHDXFileParameters); ++ md_table_entry[0].data_bits |= VHDX_META_FLAGS_IS_REQUIRED; ++ offset += md_table_entry[0].length; ++ vhdx_metadata_entry_le_export(&md_table_entry[0]); ++ ++ md_table_entry[1].item_id = virtual_size_guid; ++ md_table_entry[1].offset = offset; ++ md_table_entry[1].length = sizeof(VHDXVirtualDiskSize); ++ md_table_entry[1].data_bits |= VHDX_META_FLAGS_IS_REQUIRED | ++ VHDX_META_FLAGS_IS_VIRTUAL_DISK; ++ offset += md_table_entry[1].length; ++ vhdx_metadata_entry_le_export(&md_table_entry[1]); ++ ++ md_table_entry[2].item_id = page83_guid; ++ md_table_entry[2].offset = offset; ++ md_table_entry[2].length = sizeof(VHDXPage83Data); ++ md_table_entry[2].data_bits |= VHDX_META_FLAGS_IS_REQUIRED | ++ VHDX_META_FLAGS_IS_VIRTUAL_DISK; ++ offset += md_table_entry[2].length; ++ vhdx_metadata_entry_le_export(&md_table_entry[2]); ++ ++ md_table_entry[3].item_id = logical_sector_guid; ++ md_table_entry[3].offset = offset; ++ md_table_entry[3].length = sizeof(VHDXVirtualDiskLogicalSectorSize); ++ md_table_entry[3].data_bits |= VHDX_META_FLAGS_IS_REQUIRED | ++ VHDX_META_FLAGS_IS_VIRTUAL_DISK; ++ offset += md_table_entry[3].length; ++ vhdx_metadata_entry_le_export(&md_table_entry[3]); ++ ++ md_table_entry[4].item_id = phys_sector_guid; ++ md_table_entry[4].offset = offset; ++ md_table_entry[4].length = sizeof(VHDXVirtualDiskPhysicalSectorSize); ++ md_table_entry[4].data_bits |= VHDX_META_FLAGS_IS_REQUIRED | ++ VHDX_META_FLAGS_IS_VIRTUAL_DISK; ++ vhdx_metadata_entry_le_export(&md_table_entry[4]); ++ ++ ret = bdrv_pwrite(bs, metadata_offset, buffer, VHDX_HEADER_BLOCK_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ ret = bdrv_pwrite(bs, metadata_offset + (64 * KiB), entry_buffer, ++ VHDX_HEADER_BLOCK_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ ++exit: ++ g_free(buffer); ++ g_free(entry_buffer); ++ return ret; ++} ++ ++/* This create the actual BAT itself. We currently only support ++ * 'Dynamic' and 'Fixed' image types. ++ * ++ * Dynamic images: default state of the BAT is all zeroes. ++ * ++ * Fixed images: default state of the BAT is fully populated, with ++ * file offsets and state PAYLOAD_BLOCK_FULLY_PRESENT. ++ */ ++static int vhdx_create_bat(BlockDriverState *bs, BDRVVHDXState *s, ++ uint64_t image_size, VHDXImageType type, ++ bool use_zero_blocks, VHDXRegionTableEntry *rt_bat) ++{ ++ int ret = 0; ++ uint64_t data_file_offset; ++ uint64_t total_sectors = 0; ++ uint64_t sector_num = 0; ++ uint64_t unused; ++ int block_state; ++ VHDXSectorInfo sinfo; ++ ++ assert(s->bat == NULL); ++ ++ /* this gives a data start after BAT/bitmap entries, and well ++ * past any metadata entries (with a 4 MB buffer for future ++ * expansion */ ++ data_file_offset = rt_bat->file_offset + rt_bat->length + 5 * MiB; ++ total_sectors = image_size >> s->logical_sector_size_bits; ++ ++ if (type == VHDX_TYPE_DYNAMIC) { ++ /* All zeroes, so we can just extend the file - the end of the BAT ++ * is the furthest thing we have written yet */ ++ ret = bdrv_truncate(bs, data_file_offset); ++ if (ret < 0) { ++ goto exit; ++ } ++ } else if (type == VHDX_TYPE_FIXED) { ++ ret = bdrv_truncate(bs, data_file_offset + image_size); ++ if (ret < 0) { ++ goto exit; ++ } ++ } else { ++ ret = -ENOTSUP; ++ goto exit; ++ } ++ ++ if (type == VHDX_TYPE_FIXED || ++ use_zero_blocks || ++ bdrv_has_zero_init(bs) == 0) { ++ /* for a fixed file, the default BAT entry is not zero */ ++ s->bat = g_malloc0(rt_bat->length); ++ block_state = type == VHDX_TYPE_FIXED ? PAYLOAD_BLOCK_FULLY_PRESENT : ++ PAYLOAD_BLOCK_NOT_PRESENT; ++ block_state = use_zero_blocks ? PAYLOAD_BLOCK_ZERO : block_state; ++ /* fill the BAT by emulating sector writes of sectors_per_block size */ ++ while (sector_num < total_sectors) { ++ vhdx_block_translate(s, sector_num, s->sectors_per_block, &sinfo); ++ sinfo.file_offset = data_file_offset + ++ (sector_num << s->logical_sector_size_bits); ++ sinfo.file_offset = ROUND_UP(sinfo.file_offset, MiB); ++ vhdx_update_bat_table_entry(bs, s, &sinfo, &unused, &unused, ++ block_state); ++ cpu_to_le64s(&s->bat[sinfo.bat_idx]); ++ sector_num += s->sectors_per_block; ++ } ++ ret = bdrv_pwrite(bs, rt_bat->file_offset, s->bat, rt_bat->length); ++ if (ret < 0) { ++ goto exit; ++ } ++ } ++ ++ ++ ++exit: ++ g_free(s->bat); ++ return ret; ++} ++ ++/* Creates the region table header, and region table entries. ++ * There are 2 supported region table entries: BAT, and Metadata/ ++ * ++ * As the calculations for the BAT region table are also needed ++ * to create the BAT itself, we will also cause the BAT to be ++ * created. ++ */ ++static int vhdx_create_new_region_table(BlockDriverState *bs, ++ uint64_t image_size, ++ uint32_t block_size, ++ uint32_t sector_size, ++ uint32_t log_size, ++ bool use_zero_blocks, ++ VHDXImageType type, ++ uint64_t *metadata_offset) ++{ ++ int ret = 0; ++ uint32_t offset = 0; ++ void *buffer = NULL; ++ BDRVVHDXState *s = NULL; ++ VHDXRegionTableHeader *region_table; ++ VHDXRegionTableEntry *rt_bat; ++ VHDXRegionTableEntry *rt_metadata; ++ ++ assert(metadata_offset != NULL); ++ ++ /* Populate enough of the BDRVVHDXState to be able to use the ++ * pre-existing BAT calculation, translation, and update functions */ ++ s = g_malloc0(sizeof(BDRVVHDXState)); ++ ++ s->chunk_ratio = (VHDX_MAX_SECTORS_PER_BLOCK) * ++ (uint64_t) sector_size / (uint64_t) block_size; ++ ++ s->sectors_per_block = block_size / sector_size; ++ s->virtual_disk_size = image_size; ++ s->block_size = block_size; ++ s->logical_sector_size = sector_size; ++ ++ vhdx_set_shift_bits(s); ++ ++ vhdx_calc_bat_entries(s); ++ ++ /* At this point the VHDX state is populated enough for creation */ ++ ++ /* a single buffer is used so we can calculate the checksum over the ++ * entire 64KB block */ ++ buffer = g_malloc0(VHDX_HEADER_BLOCK_SIZE); ++ region_table = buffer; ++ offset += sizeof(VHDXRegionTableHeader); ++ rt_bat = buffer + offset; ++ offset += sizeof(VHDXRegionTableEntry); ++ rt_metadata = buffer + offset; ++ ++ region_table->signature = VHDX_REGION_SIGNATURE; ++ region_table->entry_count = 2; /* BAT and Metadata */ ++ ++ rt_bat->guid = bat_guid; ++ rt_bat->length = ROUND_UP(s->bat_entries * sizeof(VHDXBatEntry), MiB); ++ rt_bat->file_offset = ROUND_UP(VHDX_HEADER_SECTION_END + log_size, MiB); ++ s->bat_offset = rt_bat->file_offset; ++ ++ rt_metadata->guid = metadata_guid; ++ rt_metadata->file_offset = ROUND_UP(rt_bat->file_offset + rt_bat->length, ++ MiB); ++ rt_metadata->length = 1 * MiB; /* min size, and more than enough */ ++ *metadata_offset = rt_metadata->file_offset; ++ ++ vhdx_update_checksum(buffer, VHDX_HEADER_BLOCK_SIZE, ++ offsetof(VHDXRegionTableHeader, checksum)); ++ ++ ++ /* The region table gives us the data we need to create the BAT, ++ * so do that now */ ++ ret = vhdx_create_bat(bs, s, image_size, type, use_zero_blocks, rt_bat); ++ ++ /* Now write out the region headers to disk */ ++ vhdx_region_header_le_export(region_table); ++ vhdx_region_entry_le_export(rt_bat); ++ vhdx_region_entry_le_export(rt_metadata); ++ ++ ret = bdrv_pwrite(bs, VHDX_REGION_TABLE_OFFSET, buffer, ++ VHDX_HEADER_BLOCK_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ ret = bdrv_pwrite(bs, VHDX_REGION_TABLE2_OFFSET, buffer, ++ VHDX_HEADER_BLOCK_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ ++exit: ++ g_free(s); ++ g_free(buffer); ++ return ret; ++} ++ ++/* We need to create the following elements: ++ * ++ * .-----------------------------------------------------------------. ++ * | (A) | (B) | (C) | (D) | (E) | ++ * | File ID | Header1 | Header 2 | Region Tbl 1 | Region Tbl 2 | ++ * | | | | | | ++ * .-----------------------------------------------------------------. ++ * 0 64KB 128KB 192KB 256KB 320KB ++ * ++ * ++ * .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------. ++ * | (F) | (G) | (H) | | ++ * | Journal Log | BAT / Bitmap | Metadata | .... data ...... | ++ * | | | | | ++ * .---- ~ ----------- ~ ------------ ~ ---------------- ~ -----------. ++ * 1MB ++ */ ++static int vhdx_create(const char *filename, QEMUOptionParameter *options, ++ Error **errp) ++{ ++ int ret = 0; ++ uint64_t image_size = (uint64_t) 2 * GiB; ++ uint32_t log_size = 1 * MiB; ++ uint32_t block_size = 0; ++ uint64_t signature; ++ uint64_t metadata_offset; ++ bool use_zero_blocks = false; ++ ++ gunichar2 *creator = NULL; ++ glong creator_items; ++ BlockDriverState *bs; ++ const char *type = NULL; ++ VHDXImageType image_type; ++ Error *local_err = NULL; ++ ++ while (options && options->name) { ++ if (!strcmp(options->name, BLOCK_OPT_SIZE)) { ++ image_size = options->value.n; ++ } else if (!strcmp(options->name, VHDX_BLOCK_OPT_LOG_SIZE)) { ++ log_size = options->value.n; ++ } else if (!strcmp(options->name, VHDX_BLOCK_OPT_BLOCK_SIZE)) { ++ block_size = options->value.n; ++ } else if (!strcmp(options->name, BLOCK_OPT_SUBFMT)) { ++ type = options->value.s; ++ } else if (!strcmp(options->name, VHDX_BLOCK_OPT_ZERO)) { ++ use_zero_blocks = options->value.n != 0; ++ } ++ options++; ++ } ++ ++ if (image_size > VHDX_MAX_IMAGE_SIZE) { ++ error_setg_errno(errp, EINVAL, "Image size too large; max of 64TB"); ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ if (type == NULL) { ++ type = "dynamic"; ++ } ++ ++ if (!strcmp(type, "dynamic")) { ++ image_type = VHDX_TYPE_DYNAMIC; ++ } else if (!strcmp(type, "fixed")) { ++ image_type = VHDX_TYPE_FIXED; ++ } else if (!strcmp(type, "differencing")) { ++ error_setg_errno(errp, ENOTSUP, ++ "Differencing files not yet supported"); ++ ret = -ENOTSUP; ++ goto exit; ++ } else { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ /* These are pretty arbitrary, and mainly designed to keep the BAT ++ * size reasonable to load into RAM */ ++ if (block_size == 0) { ++ if (image_size > 32 * TiB) { ++ block_size = 64 * MiB; ++ } else if (image_size > (uint64_t) 100 * GiB) { ++ block_size = 32 * MiB; ++ } else if (image_size > 1 * GiB) { ++ block_size = 16 * MiB; ++ } else { ++ block_size = 8 * MiB; ++ } ++ } ++ ++ ++ /* make the log size close to what was specified, but must be ++ * min 1MB, and multiple of 1MB */ ++ log_size = ROUND_UP(log_size, MiB); ++ ++ block_size = ROUND_UP(block_size, MiB); ++ block_size = block_size > VHDX_BLOCK_SIZE_MAX ? VHDX_BLOCK_SIZE_MAX : ++ block_size; ++ ++ ret = bdrv_create_file(filename, options, &local_err); ++ if (ret < 0) { ++ error_propagate(errp, local_err); ++ goto exit; ++ } ++ ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); ++ if (ret < 0) { ++ error_propagate(errp, local_err); ++ goto exit; ++ } ++ ++ /* Create (A) */ ++ ++ /* The creator field is optional, but may be useful for ++ * debugging / diagnostics */ ++ creator = g_utf8_to_utf16("QEMU v" QEMU_VERSION, -1, NULL, ++ &creator_items, NULL); ++ signature = cpu_to_le64(VHDX_FILE_SIGNATURE); ++ bdrv_pwrite(bs, VHDX_FILE_ID_OFFSET, &signature, sizeof(signature)); ++ if (ret < 0) { ++ goto delete_and_exit; ++ } ++ if (creator) { ++ bdrv_pwrite(bs, VHDX_FILE_ID_OFFSET + sizeof(signature), creator, ++ creator_items * sizeof(gunichar2)); ++ if (ret < 0) { ++ goto delete_and_exit; ++ } ++ } ++ ++ ++ /* Creates (B),(C) */ ++ ret = vhdx_create_new_headers(bs, image_size, log_size); ++ if (ret < 0) { ++ goto delete_and_exit; ++ } ++ ++ /* Creates (D),(E),(G) explicitly. (F) created as by-product */ ++ ret = vhdx_create_new_region_table(bs, image_size, block_size, 512, ++ log_size, use_zero_blocks, image_type, ++ &metadata_offset); ++ if (ret < 0) { ++ goto delete_and_exit; ++ } ++ ++ /* Creates (H) */ ++ ret = vhdx_create_new_metadata(bs, image_size, block_size, 512, ++ metadata_offset, image_type); ++ if (ret < 0) { ++ goto delete_and_exit; ++ } ++ ++ ++ ++delete_and_exit: ++ bdrv_delete(bs); ++exit: ++ g_free(creator); ++ return ret; ++} ++ ++static QEMUOptionParameter vhdx_create_options[] = { ++ { ++ .name = BLOCK_OPT_SIZE, ++ .type = OPT_SIZE, ++ .help = "Virtual disk size; max of 64TB." ++ }, ++ { ++ .name = VHDX_BLOCK_OPT_LOG_SIZE, ++ .type = OPT_SIZE, ++ .value.n = 1 * MiB, ++ .help = "Log size; min 1MB." ++ }, ++ { ++ .name = VHDX_BLOCK_OPT_BLOCK_SIZE, ++ .type = OPT_SIZE, ++ .value.n = 0, ++ .help = "Block Size; min 1MB, max 256MB. " \ ++ "0 means auto-calculate based on image size." ++ }, ++ { ++ .name = BLOCK_OPT_SUBFMT, ++ .type = OPT_STRING, ++ .help = "VHDX format type, can be either 'dynamic' or 'fixed'. "\ ++ "Default is 'dynamic'." ++ }, ++ { ++ .name = VHDX_BLOCK_OPT_ZERO, ++ .type = OPT_FLAG, ++ .help = "Force use of payload blocks of type 'ZERO'. Non-standard." ++ }, ++ { NULL } ++}; ++ + static BlockDriver bdrv_vhdx = { + .format_name = "vhdx", + .instance_size = sizeof(BDRVVHDXState), +@@ -1342,6 +1897,8 @@ static BlockDriver bdrv_vhdx = { + .bdrv_co_readv = vhdx_co_readv, + .bdrv_co_writev = vhdx_co_writev, + .bdrv_get_info = vhdx_get_info, ++ .bdrv_create = vhdx_create, ++ .create_options = vhdx_create_options, + }; + + static void bdrv_vhdx_init(void) +diff --git a/block/vhdx.h b/block/vhdx.h +index 245547b..365eca0 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -18,6 +18,11 @@ + #ifndef BLOCK_VHDX_H + #define BLOCK_VHDX_H + ++#define KiB (1 * 1024) ++#define MiB (KiB * 1024) ++#define GiB (MiB * 1024) ++#define TiB ((uint64_t) GiB * 1024) ++ + /* Structures and fields present in the VHDX file */ + + /* The header section has the following blocks, +@@ -36,8 +41,9 @@ + #define VHDX_HEADER1_OFFSET (VHDX_HEADER_BLOCK_SIZE * 1) + #define VHDX_HEADER2_OFFSET (VHDX_HEADER_BLOCK_SIZE * 2) + #define VHDX_REGION_TABLE_OFFSET (VHDX_HEADER_BLOCK_SIZE * 3) ++#define VHDX_REGION_TABLE2_OFFSET (VHDX_HEADER_BLOCK_SIZE * 4) + +- ++#define VHDX_HEADER_SECTION_END (1 * MiB) + /* + * A note on the use of MS-GUID fields. For more details on the GUID, + * please see: https://en.wikipedia.org/wiki/Globally_unique_identifier. +@@ -55,6 +61,7 @@ + /* These structures are ones that are defined in the VHDX specification + * document */ + ++#define VHDX_FILE_SIGNATURE 0x656C696678646876 /* "vhdxfile" in ASCII */ + typedef struct VHDXFileIdentifier { + uint64_t signature; /* "vhdxfile" in ASCII */ + uint16_t creator[256]; /* optional; utf-16 string to identify +@@ -85,6 +92,7 @@ typedef struct QEMU_PACKED MSGUID { + /* The full header is 4KB, although the actual header data is much smaller. + * But for the checksum calculation, it is over the entire 4KB structure, + * not just the defined portion of it */ ++#define VHDX_HEADER_SIGNATURE 0x64616568 + typedef struct QEMU_PACKED VHDXHeader { + uint32_t signature; /* "head" in ASCII */ + uint32_t checksum; /* CRC-32C hash of the whole header */ +@@ -125,6 +133,7 @@ typedef struct QEMU_PACKED VHDXHeader { + } VHDXHeader; + + /* Header for the region table block */ ++#define VHDX_REGION_SIGNATURE 0x69676572 /* "regi" in ASCII */ + typedef struct QEMU_PACKED VHDXRegionTableHeader { + uint32_t signature; /* "regi" in ASCII */ + uint32_t checksum; /* CRC-32C hash of the 64KB table */ +@@ -238,6 +247,7 @@ typedef uint64_t VHDXBatEntry; + #define VHDX_METADATA_MAX_ENTRIES 2047 /* not including the header */ + #define VHDX_METADATA_TABLE_MAX_SIZE \ + (VHDX_METADATA_ENTRY_SIZE * (VHDX_METADATA_MAX_ENTRIES+1)) ++#define VHDX_METADATA_SIGNATURE 0x617461646174656D /* "metadata" in ASCII */ + typedef struct QEMU_PACKED VHDXMetadataTableHeader { + uint64_t signature; /* "metadata" in ASCII */ + uint16_t reserved; +@@ -267,6 +277,8 @@ typedef struct QEMU_PACKED VHDXMetadataTableEntry { + If set indicates a fixed + size VHDX file */ + #define VHDX_PARAMS_HAS_PARENT 0x02 /* has parent / backing file */ ++#define VHDX_BLOCK_SIZE_MIN (1 * MiB) ++#define VHDX_BLOCK_SIZE_MAX (256 * MiB) + typedef struct QEMU_PACKED VHDXFileParameters { + uint32_t block_size; /* size of each payload block, always + power of 2, <= 256MB and >= 1MB. */ +@@ -274,6 +286,7 @@ typedef struct QEMU_PACKED VHDXFileParameters { + the rest are reserved (see above) */ + } VHDXFileParameters; + ++#define VHDX_MAX_IMAGE_SIZE ((uint64_t) 64 * TiB) + typedef struct QEMU_PACKED VHDXVirtualDiskSize { + uint64_t virtual_disk_size; /* Size of the virtual disk, in bytes. + Must be multiple of the sector size, +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-add-header-update-capability.patch b/SOURCES/kvm-block-vhdx-add-header-update-capability.patch new file mode 100644 index 0000000..816bcfa --- /dev/null +++ b/SOURCES/kvm-block-vhdx-add-header-update-capability.patch @@ -0,0 +1,392 @@ +From 47299b9e7ac4a8318e0cf3c88cc3f24cc214da1b Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:51 +0100 +Subject: [PATCH 08/25] block: vhdx - add header update capability. + +RH-Author: Jeffrey Cody +Message-id: <42b5dd4b297781538d090b292503c89e2dcb9ed5.1384975172.git.jcody@redhat.com> +Patchwork-id: 55801 +O-Subject: [RHEL7 qemu-kvm PATCH 08/26] block: vhdx - add header update capability. +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds the ability to update the headers in a VHDX image, including +generating a new MS-compatible GUID. + +As VHDX depends on uuid.h, VHDX is now a configurable build option. If +VHDX support is enabled, that will also enable uuid as well. The +default is to have VHDX enabled. + +To enable/disable VHDX: --enable-vhdx, --disable-vhdx + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4f18b7824ab5eda9fe051f5b24e90e5f34d08a23) + +Conflicts: + configure + +RHEL7 Notes: Conflict due to the changes for VHDX enable/disable in the + same area of the file as the RHEL7 live block differentiation. + +Signed-off-by: Jeff Cody +--- + block/Makefile.objs | 2 +- + block/vhdx.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++- + block/vhdx.h | 14 ++++- + configure | 26 ++++++++- + 4 files changed, 197 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/Makefile.objs | 2 +- + block/vhdx.c | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++- + block/vhdx.h | 14 ++++- + configure | 26 ++++++++- + 4 files changed, 197 insertions(+), 6 deletions(-) + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 3db1839..114f8a5 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -2,7 +2,7 @@ block-obj-y += raw.o cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat + block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o qcow2-cache.o + block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o + block-obj-y += qed-check.o +-block-obj-y += vhdx.o ++block-obj-$(CONFIG_VHDX) += vhdx.o + block-obj-y += parallels.o blkdebug.o blkverify.o + block-obj-y += snapshot.o qapi.o + block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o +diff --git a/block/vhdx.c b/block/vhdx.c +index 23be4e3..fba2aa9 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -22,6 +22,7 @@ + #include "block/vhdx.h" + #include "migration/migration.h" + ++#include + + /* Several metadata and region table data entries are identified by + * guids in a MS-specific GUID format. */ +@@ -157,12 +158,41 @@ typedef struct BDRVVHDXState { + VHDXBatEntry *bat; + uint64_t bat_offset; + ++ MSGUID session_guid; ++ ++ + VHDXParentLocatorHeader parent_header; + VHDXParentLocatorEntry *parent_entries; + + Error *migration_blocker; + } BDRVVHDXState; + ++/* Calculates new checksum. ++ * ++ * Zero is substituted during crc calculation for the original crc field ++ * crc_offset: byte offset in buf of the buffer crc ++ * buf: buffer pointer ++ * size: size of buffer (must be > crc_offset+4) ++ * ++ * Note: The resulting checksum is in the CPU endianness, not necessarily ++ * in the file format endianness (LE). Any header export to disk should ++ * make sure that vhdx_header_le_export() is used to convert to the ++ * correct endianness ++ */ ++uint32_t vhdx_update_checksum(uint8_t *buf, size_t size, int crc_offset) ++{ ++ uint32_t crc; ++ ++ assert(buf != NULL); ++ assert(size > (crc_offset + sizeof(crc))); ++ ++ memset(buf + crc_offset, 0, sizeof(crc)); ++ crc = crc32c(0xffffffff, buf, size); ++ memcpy(buf + crc_offset, &crc, sizeof(crc)); ++ ++ return crc; ++} ++ + uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size, + int crc_offset) + { +@@ -214,6 +244,19 @@ bool vhdx_checksum_is_valid(uint8_t *buf, size_t size, int crc_offset) + + + /* ++ * This generates a UUID that is compliant with the MS GUIDs used ++ * in the VHDX spec (and elsewhere). ++ */ ++void vhdx_guid_generate(MSGUID *guid) ++{ ++ uuid_t uuid; ++ assert(guid != NULL); ++ ++ uuid_generate(uuid); ++ memcpy(guid, uuid, sizeof(MSGUID)); ++} ++ ++/* + * Per the MS VHDX Specification, for every VHDX file: + * - The header section is fixed size - 1 MB + * - The header section is always the first "object" +@@ -251,6 +294,113 @@ static void vhdx_header_le_import(VHDXHeader *h) + le64_to_cpus(&h->log_offset); + } + ++/* All VHDX structures on disk are little endian */ ++static void vhdx_header_le_export(VHDXHeader *orig_h, VHDXHeader *new_h) ++{ ++ assert(orig_h != NULL); ++ assert(new_h != NULL); ++ ++ new_h->signature = cpu_to_le32(orig_h->signature); ++ new_h->checksum = cpu_to_le32(orig_h->checksum); ++ new_h->sequence_number = cpu_to_le64(orig_h->sequence_number); ++ ++ new_h->file_write_guid = orig_h->file_write_guid; ++ new_h->data_write_guid = orig_h->data_write_guid; ++ new_h->log_guid = orig_h->log_guid; ++ ++ cpu_to_leguids(&new_h->file_write_guid); ++ cpu_to_leguids(&new_h->data_write_guid); ++ cpu_to_leguids(&new_h->log_guid); ++ ++ new_h->log_version = cpu_to_le16(orig_h->log_version); ++ new_h->version = cpu_to_le16(orig_h->version); ++ new_h->log_length = cpu_to_le32(orig_h->log_length); ++ new_h->log_offset = cpu_to_le64(orig_h->log_offset); ++} ++ ++/* Update the VHDX headers ++ * ++ * This follows the VHDX spec procedures for header updates. ++ * ++ * - non-current header is updated with largest sequence number ++ */ ++static int vhdx_update_header(BlockDriverState *bs, BDRVVHDXState *s, ++ bool generate_data_write_guid) ++{ ++ int ret = 0; ++ int hdr_idx = 0; ++ uint64_t header_offset = VHDX_HEADER1_OFFSET; ++ ++ VHDXHeader *active_header; ++ VHDXHeader *inactive_header; ++ VHDXHeader header_le; ++ uint8_t *buffer; ++ ++ /* operate on the non-current header */ ++ if (s->curr_header == 0) { ++ hdr_idx = 1; ++ header_offset = VHDX_HEADER2_OFFSET; ++ } ++ ++ active_header = s->headers[s->curr_header]; ++ inactive_header = s->headers[hdr_idx]; ++ ++ inactive_header->sequence_number = active_header->sequence_number + 1; ++ ++ /* a new file guid must be generated before any file write, including ++ * headers */ ++ inactive_header->file_write_guid = s->session_guid; ++ ++ /* a new data guid only needs to be generated before any guest-visible ++ * writes (i.e. something observable via virtual disk read) */ ++ if (generate_data_write_guid) { ++ vhdx_guid_generate(&inactive_header->data_write_guid); ++ } ++ ++ /* the header checksum is not over just the packed size of VHDXHeader, ++ * but rather over the entire 'reserved' range for the header, which is ++ * 4KB (VHDX_HEADER_SIZE). */ ++ ++ buffer = qemu_blockalign(bs, VHDX_HEADER_SIZE); ++ /* we can't assume the extra reserved bytes are 0 */ ++ ret = bdrv_pread(bs->file, header_offset, buffer, VHDX_HEADER_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ /* overwrite the actual VHDXHeader portion */ ++ memcpy(buffer, inactive_header, sizeof(VHDXHeader)); ++ inactive_header->checksum = ++ vhdx_update_checksum(buffer, VHDX_HEADER_SIZE, ++ offsetof(VHDXHeader, checksum)); ++ vhdx_header_le_export(inactive_header, &header_le); ++ ret = bdrv_pwrite_sync(bs->file, header_offset, &header_le, ++ sizeof(VHDXHeader)); ++ if (ret < 0) { ++ goto exit; ++ } ++ s->curr_header = hdr_idx; ++ ++exit: ++ qemu_vfree(buffer); ++ return ret; ++} ++ ++/* ++ * The VHDX spec calls for header updates to be performed twice, so that both ++ * the current and non-current header have valid info ++ */ ++static int vhdx_update_headers(BlockDriverState *bs, BDRVVHDXState *s, ++ bool generate_data_write_guid) ++{ ++ int ret; ++ ++ ret = vhdx_update_header(bs, s, generate_data_write_guid); ++ if (ret < 0) { ++ return ret; ++ } ++ ret = vhdx_update_header(bs, s, generate_data_write_guid); ++ return ret; ++} + + /* opens the specified header block from the VHDX file header section */ + static int vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s) +@@ -742,6 +892,11 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ /* This is used for any header updates, for the file_write_guid. ++ * The spec dictates that a new value should be used for the first ++ * header update */ ++ vhdx_guid_generate(&s->session_guid); ++ + ret = vhdx_parse_header(bs, s); + if (ret) { + goto fail; +@@ -804,8 +959,10 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (flags & BDRV_O_RDWR) { +- ret = -ENOTSUP; +- goto fail; ++ ret = vhdx_update_headers(bs, s, false); ++ if (ret < 0) { ++ goto fail; ++ } + } + + /* TODO: differencing files, write */ +diff --git a/block/vhdx.h b/block/vhdx.h +index 1dbb320..2223b15 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -67,7 +67,7 @@ typedef struct VHDXFileIdentifier { + * Microsoft is not just 16 bytes though - it is a structure that is defined, + * so we need to follow it here so that endianness does not trip us up */ + +-typedef struct MSGUID { ++typedef struct QEMU_PACKED MSGUID { + uint32_t data1; + uint16_t data2; + uint16_t data3; +@@ -309,17 +309,27 @@ typedef struct QEMU_PACKED VHDXParentLocatorEntry { + /* ----- END VHDX SPECIFICATION STRUCTURES ---- */ + + ++void vhdx_guid_generate(MSGUID *guid); ++ ++uint32_t vhdx_update_checksum(uint8_t *buf, size_t size, int crc_offset); + uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size, + int crc_offset); + + bool vhdx_checksum_is_valid(uint8_t *buf, size_t size, int crc_offset); + + +-static void leguid_to_cpus(MSGUID *guid) ++static inline void leguid_to_cpus(MSGUID *guid) + { + le32_to_cpus(&guid->data1); + le16_to_cpus(&guid->data2); + le16_to_cpus(&guid->data3); + } + ++static inline void cpu_to_leguids(MSGUID *guid) ++{ ++ cpu_to_le32s(&guid->data1); ++ cpu_to_le16s(&guid->data2); ++ cpu_to_le16s(&guid->data3); ++} ++ + #endif +diff --git a/configure b/configure +index 33235c4..5161fec 100755 +--- a/configure ++++ b/configure +@@ -245,6 +245,7 @@ libssh2="" + live_block_ops="yes" + live_block_migration="no" + ceph_support="yes" ++vhdx="" + + # parse CC options first + for opt do +@@ -950,7 +951,11 @@ for opt do + ;; + --enable-ceph-support) ceph_support=="yes" + ;; +-*) echo "ERROR: unknown option $opt"; show_help="yes" ++ --enable-vhdx) vhdx="yes" ++ ;; ++ --disable-vhdx) vhdx="no" ++ ;; ++ *) echo "ERROR: unknown option $opt"; show_help="yes" + ;; + esac + done +@@ -1227,6 +1232,8 @@ echo " --disable-live-block-migration disable live block migration" + echo " --enable-live-block-migration enable live block migration" + echo " --disable-ceph-support disable support for rbd block driver support" + echo " --enable-ceph-support enable support for rbd block driver support" ++echo " --disable-vhdx disables support for the Microsoft VHDX image format" ++echo " --enable-vhdx enable support for the Microsoft VHDX image format" + echo "" + echo "NOTE: The object files are built at the place where configure is launched" + exit 1 +@@ -2027,6 +2034,18 @@ EOF + fi + fi + ++if test "$vhdx" = "yes" ; then ++ if test "$uuid" = "no" ; then ++ error_exit "uuid required for VHDX support" ++ fi ++elif test "$vhdx" != "no" ; then ++ if test "$uuid" = "yes" ; then ++ vhdx=yes ++ else ++ vhdx=no ++ fi ++fi ++ + ########################################## + # xfsctl() probe, used for raw-posix + if test "$xfs" != "no" ; then +@@ -3615,6 +3634,7 @@ echo "TPM passthrough $tpm_passthrough" + echo "QOM debugging $qom_cast_debug" + echo "Live block operations $live_block_ops" + echo "Live block migration $live_block_migration" ++echo "vhdx $vhdx" + + if test "$sdl_too_old" = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" +@@ -4011,6 +4031,10 @@ if test "ceph_support" = "yes"; then + echo "CONFIG_CEPH_SUPPORT=y" >> $config_host_mak + fi + ++if test "$vhdx" = "yes" ; then ++ echo "CONFIG_VHDX=y" >> $config_host_mak ++fi ++ + # USB host support + if test "$libusb" = "yes"; then + echo "HOST_USB=libusb legacy" >> $config_host_mak +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-add-log-write-support.patch b/SOURCES/kvm-block-vhdx-add-log-write-support.patch new file mode 100644 index 0000000..2e0e37c --- /dev/null +++ b/SOURCES/kvm-block-vhdx-add-log-write-support.patch @@ -0,0 +1,360 @@ +From db9d361c509aea4ce8aca7b7f16a1808880bad29 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:59 +0100 +Subject: [PATCH 16/25] block: vhdx - add log write support + +RH-Author: Jeffrey Cody +Message-id: <376bced13e2a7e1069a50bcbd09f3d822306865a.1384975172.git.jcody@redhat.com> +Patchwork-id: 55809 +O-Subject: [RHEL7 qemu-kvm PATCH 16/26] block: vhdx - add log write support +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds support for writing to the VHDX log. + +For spec details, see VHDX Specification Format v1.00: +https://www.microsoft.com/en-us/download/details.aspx?id=34750 + +There are a few limitations to this log support: +1.) There is no caching yet +2.) The log is flushed after each entry + +The primary write interface, vhdx_log_write_and_flush(), performs a log +write followed by an immediate flush of the log. + +As each log entry sector is a minimum of 4KB, partial sector writes are +filled in with data from the disk write destination. + +If the current file log GUID is 0, a new GUID is generated and updated +in the header. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8adc52336d9c44ab4c7b9358a7be22ac0ef962bf) +--- + block/vhdx-log.c | 282 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.h | 3 + + 2 files changed, 285 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx-log.c | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.h | 3 + + 2 files changed, 285 insertions(+), 0 deletions(-) + +diff --git a/block/vhdx-log.c b/block/vhdx-log.c +index 0284729..ee5583c 100644 +--- a/block/vhdx-log.c ++++ b/block/vhdx-log.c +@@ -156,6 +156,55 @@ exit: + return ret; + } + ++/* Writes num_sectors to the log (all log sectors are 4096 bytes), ++ * from buffer 'buffer'. Upon return, *sectors_written will contain ++ * the number of sectors successfully written. ++ * ++ * It is assumed that 'buffer' is at least 4096*num_sectors large. ++ * ++ * 0 is returned on success, -errno otherwise */ ++static int vhdx_log_write_sectors(BlockDriverState *bs, VHDXLogEntries *log, ++ uint32_t *sectors_written, void *buffer, ++ uint32_t num_sectors) ++{ ++ int ret = 0; ++ uint64_t offset; ++ uint32_t write; ++ void *buffer_tmp; ++ BDRVVHDXState *s = bs->opaque; ++ ++ ret = vhdx_user_visible_write(bs, s); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ write = log->write; ++ ++ buffer_tmp = buffer; ++ while (num_sectors) { ++ ++ offset = log->offset + write; ++ write = vhdx_log_inc_idx(write, log->length); ++ if (write == log->read) { ++ /* full */ ++ break; ++ } ++ ret = bdrv_pwrite(bs->file, offset, buffer_tmp, VHDX_LOG_SECTOR_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ buffer_tmp += VHDX_LOG_SECTOR_SIZE; ++ ++ log->write = write; ++ *sectors_written = *sectors_written + 1; ++ num_sectors--; ++ } ++ ++exit: ++ return ret; ++} ++ ++ + /* Validates a log entry header */ + static bool vhdx_log_hdr_is_valid(VHDXLogEntries *log, VHDXLogEntryHeader *hdr, + BDRVVHDXState *s) +@@ -726,3 +775,236 @@ exit: + } + + ++ ++static void vhdx_log_raw_to_le_sector(VHDXLogDescriptor *desc, ++ VHDXLogDataSector *sector, void *data, ++ uint64_t seq) ++{ ++ /* 8 + 4084 + 4 = 4096, 1 log sector */ ++ memcpy(&desc->leading_bytes, data, 8); ++ data += 8; ++ cpu_to_le64s(&desc->leading_bytes); ++ memcpy(sector->data, data, 4084); ++ data += 4084; ++ memcpy(&desc->trailing_bytes, data, 4); ++ cpu_to_le32s(&desc->trailing_bytes); ++ data += 4; ++ ++ sector->sequence_high = (uint32_t) (seq >> 32); ++ sector->sequence_low = (uint32_t) (seq & 0xffffffff); ++ sector->data_signature = VHDX_LOG_DATA_SIGNATURE; ++ ++ vhdx_log_desc_le_export(desc); ++ vhdx_log_data_le_export(sector); ++} ++ ++ ++static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s, ++ void *data, uint32_t length, uint64_t offset) ++{ ++ int ret = 0; ++ void *buffer = NULL; ++ void *merged_sector = NULL; ++ void *data_tmp, *sector_write; ++ unsigned int i; ++ int sector_offset; ++ uint32_t desc_sectors, sectors, total_length; ++ uint32_t sectors_written = 0; ++ uint32_t aligned_length; ++ uint32_t leading_length = 0; ++ uint32_t trailing_length = 0; ++ uint32_t partial_sectors = 0; ++ uint32_t bytes_written = 0; ++ uint64_t file_offset; ++ VHDXHeader *header; ++ VHDXLogEntryHeader new_hdr; ++ VHDXLogDescriptor *new_desc = NULL; ++ VHDXLogDataSector *data_sector = NULL; ++ MSGUID new_guid = { 0 }; ++ ++ header = s->headers[s->curr_header]; ++ ++ /* need to have offset read data, and be on 4096 byte boundary */ ++ ++ if (length > header->log_length) { ++ /* no log present. we could create a log here instead of failing */ ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ if (guid_eq(header->log_guid, zero_guid)) { ++ vhdx_guid_generate(&new_guid); ++ vhdx_update_headers(bs, s, false, &new_guid); ++ } else { ++ /* currently, we require that the log be flushed after ++ * every write. */ ++ ret = -ENOTSUP; ++ goto exit; ++ } ++ ++ /* 0 is an invalid sequence number, but may also represent the first ++ * log write (or a wrapped seq) */ ++ if (s->log.sequence == 0) { ++ s->log.sequence = 1; ++ } ++ ++ sector_offset = offset % VHDX_LOG_SECTOR_SIZE; ++ file_offset = (offset / VHDX_LOG_SECTOR_SIZE) * VHDX_LOG_SECTOR_SIZE; ++ ++ aligned_length = length; ++ ++ /* add in the unaligned head and tail bytes */ ++ if (sector_offset) { ++ leading_length = (VHDX_LOG_SECTOR_SIZE - sector_offset); ++ leading_length = leading_length > length ? length : leading_length; ++ aligned_length -= leading_length; ++ partial_sectors++; ++ } ++ ++ sectors = aligned_length / VHDX_LOG_SECTOR_SIZE; ++ trailing_length = aligned_length - (sectors * VHDX_LOG_SECTOR_SIZE); ++ if (trailing_length) { ++ partial_sectors++; ++ } ++ ++ sectors += partial_sectors; ++ ++ /* sectors is now how many sectors the data itself takes, not ++ * including the header and descriptor metadata */ ++ ++ new_hdr = (VHDXLogEntryHeader) { ++ .signature = VHDX_LOG_SIGNATURE, ++ .tail = s->log.tail, ++ .sequence_number = s->log.sequence, ++ .descriptor_count = sectors, ++ .reserved = 0, ++ .flushed_file_offset = bdrv_getlength(bs->file), ++ .last_file_offset = bdrv_getlength(bs->file), ++ }; ++ ++ new_hdr.log_guid = header->log_guid; ++ ++ desc_sectors = vhdx_compute_desc_sectors(new_hdr.descriptor_count); ++ ++ total_length = (desc_sectors + sectors) * VHDX_LOG_SECTOR_SIZE; ++ new_hdr.entry_length = total_length; ++ ++ vhdx_log_entry_hdr_le_export(&new_hdr); ++ ++ buffer = qemu_blockalign(bs, total_length); ++ memcpy(buffer, &new_hdr, sizeof(new_hdr)); ++ ++ new_desc = (VHDXLogDescriptor *) (buffer + sizeof(new_hdr)); ++ data_sector = buffer + (desc_sectors * VHDX_LOG_SECTOR_SIZE); ++ data_tmp = data; ++ ++ /* All log sectors are 4KB, so for any partial sectors we must ++ * merge the data with preexisting data from the final file ++ * destination */ ++ merged_sector = qemu_blockalign(bs, VHDX_LOG_SECTOR_SIZE); ++ ++ for (i = 0; i < sectors; i++) { ++ new_desc->signature = VHDX_LOG_DESC_SIGNATURE; ++ new_desc->sequence_number = s->log.sequence; ++ new_desc->file_offset = file_offset; ++ ++ if (i == 0 && leading_length) { ++ /* partial sector at the front of the buffer */ ++ ret = bdrv_pread(bs->file, file_offset, merged_sector, ++ VHDX_LOG_SECTOR_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ memcpy(merged_sector + sector_offset, data_tmp, leading_length); ++ bytes_written = leading_length; ++ sector_write = merged_sector; ++ } else if (i == sectors - 1 && trailing_length) { ++ /* partial sector at the end of the buffer */ ++ ret = bdrv_pread(bs->file, ++ file_offset, ++ merged_sector + trailing_length, ++ VHDX_LOG_SECTOR_SIZE - trailing_length); ++ if (ret < 0) { ++ goto exit; ++ } ++ memcpy(merged_sector, data_tmp, trailing_length); ++ bytes_written = trailing_length; ++ sector_write = merged_sector; ++ } else { ++ bytes_written = VHDX_LOG_SECTOR_SIZE; ++ sector_write = data_tmp; ++ } ++ ++ /* populate the raw sector data into the proper structures, ++ * as well as update the descriptor, and convert to proper ++ * endianness */ ++ vhdx_log_raw_to_le_sector(new_desc, data_sector, sector_write, ++ s->log.sequence); ++ ++ data_tmp += bytes_written; ++ data_sector++; ++ new_desc++; ++ file_offset += VHDX_LOG_SECTOR_SIZE; ++ } ++ ++ /* checksum covers entire entry, from the log header through the ++ * last data sector */ ++ vhdx_update_checksum(buffer, total_length, ++ offsetof(VHDXLogEntryHeader, checksum)); ++ cpu_to_le32s((uint32_t *)(buffer + 4)); ++ ++ /* now write to the log */ ++ vhdx_log_write_sectors(bs, &s->log, §ors_written, buffer, ++ desc_sectors + sectors); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ if (sectors_written != desc_sectors + sectors) { ++ /* instead of failing, we could flush the log here */ ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ s->log.sequence++; ++ /* write new tail */ ++ s->log.tail = s->log.write; ++ ++exit: ++ qemu_vfree(buffer); ++ qemu_vfree(merged_sector); ++ return ret; ++} ++ ++/* Perform a log write, and then immediately flush the entire log */ ++int vhdx_log_write_and_flush(BlockDriverState *bs, BDRVVHDXState *s, ++ void *data, uint32_t length, uint64_t offset) ++{ ++ int ret = 0; ++ VHDXLogSequence logs = { .valid = true, ++ .count = 1, ++ .hdr = { 0 } }; ++ ++ ++ /* Make sure data written (new and/or changed blocks) is stable ++ * on disk, before creating log entry */ ++ bdrv_flush(bs); ++ ret = vhdx_log_write(bs, s, data, length, offset); ++ if (ret < 0) { ++ goto exit; ++ } ++ logs.log = s->log; ++ ++ /* Make sure log is stable on disk */ ++ bdrv_flush(bs); ++ ret = vhdx_log_flush(bs, s, &logs); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ s->log = logs.log; ++ ++exit: ++ return ret; ++} ++ +diff --git a/block/vhdx.h b/block/vhdx.h +index 91ef8fe..4bb83de 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -398,6 +398,9 @@ bool vhdx_checksum_is_valid(uint8_t *buf, size_t size, int crc_offset); + + int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed); + ++int vhdx_log_write_and_flush(BlockDriverState *bs, BDRVVHDXState *s, ++ void *data, uint32_t length, uint64_t offset); ++ + static inline void leguid_to_cpus(MSGUID *guid) + { + le32_to_cpus(&guid->data1); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-add-migration-blocker.patch b/SOURCES/kvm-block-vhdx-add-migration-blocker.patch new file mode 100644 index 0000000..91ac7bb --- /dev/null +++ b/SOURCES/kvm-block-vhdx-add-migration-blocker.patch @@ -0,0 +1,75 @@ +From 7ac8b98c5873a6c69a73a2a1c03518137024efb8 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 6 Nov 2013 19:01:09 +0100 +Subject: [PATCH 79/81] block: vhdx - add migration blocker + +RH-Author: Jeffrey Cody +Message-id: <92e2ff0b02d3cfe596589be909331fd83e66667b.1383763969.git.jcody@redhat.com> +Patchwork-id: 55578 +O-Subject: [RHEL7 qemu-kvm PATCH 1/3] block: vhdx - add migration blocker +Bugzilla: 1007176 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Alex Williamson +RH-Acked-by: Fam Zheng + +This blocks migration for VHDX image files, until the +functionality can be supported. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5641bf405608cc89578fafed8ec689a19046285a) +--- + block/vhdx.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index e9704b1..11d923f 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -20,6 +20,7 @@ + #include "qemu/module.h" + #include "qemu/crc32c.h" + #include "block/vhdx.h" ++#include "migration/migration.h" + + + /* Several metadata and region table data entries are identified by +@@ -159,6 +160,7 @@ typedef struct BDRVVHDXState { + VHDXParentLocatorHeader parent_header; + VHDXParentLocatorEntry *parent_entries; + ++ Error *migration_blocker; + } BDRVVHDXState; + + uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size, +@@ -805,6 +807,12 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags) + + /* TODO: differencing files, write */ + ++ /* Disable migration when VHDX images are used */ ++ error_set(&s->migration_blocker, ++ QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED, ++ "vhdx", bs->device_name, "live migration"); ++ migrate_add_blocker(s->migration_blocker); ++ + return 0; + fail: + qemu_vfree(s->headers[0]); +@@ -951,6 +959,8 @@ static void vhdx_close(BlockDriverState *bs) + qemu_vfree(s->headers[1]); + qemu_vfree(s->bat); + qemu_vfree(s->parent_entries); ++ migrate_del_blocker(s->migration_blocker); ++ error_free(s->migration_blocker); + } + + static BlockDriver bdrv_vhdx = { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-add-region-overlap-detection-for-image-fi.patch b/SOURCES/kvm-block-vhdx-add-region-overlap-detection-for-image-fi.patch new file mode 100644 index 0000000..15e8568 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-add-region-overlap-detection-for-image-fi.patch @@ -0,0 +1,215 @@ +From a5319d241b02f44f273b9283271b5017b45c0b50 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:58 +0100 +Subject: [PATCH 15/25] block: vhdx - add region overlap detection for image files + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55808 +O-Subject: [RHEL7 qemu-kvm PATCH 15/26] block: vhdx - add region overlap detection for image files +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Regions in the image file cannot overlap - the log, region tables, +and metdata must all be unique and non-overlapping. + +This adds region checking by means of a QLIST; there can be a variable +number of regions and metadata (there may be metadata or region tables +that we do not recognize / know about, but are not required). + +This adds the capability to register a region for later checking, and +to check against registered regions for any overlap. + +Also, if neither the BAT or Metadata region tables are found, return +error. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 1a848fd4517820981b542e0d10e64c0426414229) +--- + block/vhdx.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.h | 9 +++++++ + 2 files changed, 91 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.h | 9 ++++++ + 2 files changed, 91 insertions(+), 0 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index b552dde..e36c60e 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -204,6 +204,50 @@ void vhdx_guid_generate(MSGUID *guid) + memcpy(guid, uuid, sizeof(MSGUID)); + } + ++/* Check for region overlaps inside the VHDX image */ ++static int vhdx_region_check(BDRVVHDXState *s, uint64_t start, uint64_t length) ++{ ++ int ret = 0; ++ uint64_t end; ++ VHDXRegionEntry *r; ++ ++ end = start + length; ++ QLIST_FOREACH(r, &s->regions, entries) { ++ if (!((start >= r->end) || (end <= r->start))) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ } ++ ++exit: ++ return ret; ++} ++ ++/* Register a region for future checks */ ++static void vhdx_region_register(BDRVVHDXState *s, ++ uint64_t start, uint64_t length) ++{ ++ VHDXRegionEntry *r; ++ ++ r = g_malloc0(sizeof(*r)); ++ ++ r->start = start; ++ r->end = start + length; ++ ++ QLIST_INSERT_HEAD(&s->regions, r, entries); ++} ++ ++/* Free all registered regions */ ++static void vhdx_region_unregister_all(BDRVVHDXState *s) ++{ ++ VHDXRegionEntry *r, *r_next; ++ ++ QLIST_FOREACH_SAFE(r, &s->regions, entries, r_next) { ++ QLIST_REMOVE(r, entries); ++ g_free(r); ++ } ++} ++ + /* + * Per the MS VHDX Specification, for every VHDX file: + * - The header section is fixed size - 1 MB +@@ -389,6 +433,9 @@ static int vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s) + } + } + ++ vhdx_region_register(s, s->headers[s->curr_header]->log_offset, ++ s->headers[s->curr_header]->log_length); ++ + ret = 0; + + goto exit; +@@ -452,6 +499,15 @@ static int vhdx_open_region_tables(BlockDriverState *bs, BDRVVHDXState *s) + le32_to_cpus(&rt_entry.length); + le32_to_cpus(&rt_entry.data_bits); + ++ /* check for region overlap between these entries, and any ++ * other memory regions in the file */ ++ ret = vhdx_region_check(s, rt_entry.file_offset, rt_entry.length); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ vhdx_region_register(s, rt_entry.file_offset, rt_entry.length); ++ + /* see if we recognize the entry */ + if (guid_eq(rt_entry.guid, bat_guid)) { + /* must be unique; if we have already found it this is invalid */ +@@ -482,6 +538,12 @@ static int vhdx_open_region_tables(BlockDriverState *bs, BDRVVHDXState *s) + goto fail; + } + } ++ ++ if (!bat_rt_found || !metadata_rt_found) { ++ ret = -EINVAL; ++ goto fail; ++ } ++ + ret = 0; + + fail: +@@ -751,6 +813,7 @@ static void vhdx_close(BlockDriverState *bs) + error_free(s->migration_blocker); + qemu_vfree(s->log.hdr); + s->log.hdr = NULL; ++ vhdx_region_unregister_all(s); + } + + static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, +@@ -768,6 +831,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + s->first_visible_write = true; + + qemu_co_mutex_init(&s->lock); ++ QLIST_INIT(&s->regions); + + /* validate the file signature */ + ret = bdrv_pread(bs->file, 0, &signature, sizeof(uint64_t)); +@@ -842,8 +906,26 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ uint64_t payblocks = s->chunk_ratio; ++ /* endian convert, and verify populated BAT field file offsets against ++ * region table and log entries */ + for (i = 0; i < s->bat_entries; i++) { + le64_to_cpus(&s->bat[i]); ++ if (payblocks--) { ++ /* payload bat entries */ ++ if ((s->bat[i] & VHDX_BAT_STATE_BIT_MASK) == ++ PAYLOAD_BLOCK_FULL_PRESENT) { ++ ret = vhdx_region_check(s, s->bat[i] & VHDX_BAT_FILE_OFF_MASK, ++ s->block_size); ++ if (ret < 0) { ++ goto fail; ++ } ++ } ++ } else { ++ payblocks = s->chunk_ratio; ++ /* Once differencing files are supported, verify sector bitmap ++ * blocks here */ ++ } + } + + if (flags & BDRV_O_RDWR) { +diff --git a/block/vhdx.h b/block/vhdx.h +index b150ad1..91ef8fe 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -230,6 +230,7 @@ typedef struct QEMU_PACKED VHDXLogDataSector { + other bits are reserved */ + #define VHDX_BAT_STATE_BIT_MASK 0x07 + #define VHDX_BAT_FILE_OFF_BITS (64 - 44) ++#define VHDX_BAT_FILE_OFF_MASK 0xFFFFFFFFFFF00000 /* upper 44 bits */ + typedef uint64_t VHDXBatEntry; + + /* ---- METADATA REGION STRUCTURES ---- */ +@@ -334,6 +335,12 @@ typedef struct VHDXLogEntries { + uint32_t tail; + } VHDXLogEntries; + ++typedef struct VHDXRegionEntry { ++ uint64_t start; ++ uint64_t end; ++ QLIST_ENTRY(VHDXRegionEntry) entries; ++} VHDXRegionEntry; ++ + typedef struct BDRVVHDXState { + CoMutex lock; + +@@ -374,6 +381,8 @@ typedef struct BDRVVHDXState { + VHDXParentLocatorEntry *parent_entries; + + Error *migration_blocker; ++ ++ QLIST_HEAD(VHDXRegionHead, VHDXRegionEntry) regions; + } BDRVVHDXState; + + void vhdx_guid_generate(MSGUID *guid); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-break-endian-translation-functions-out.patch b/SOURCES/kvm-block-vhdx-break-endian-translation-functions-out.patch new file mode 100644 index 0000000..875f9ad --- /dev/null +++ b/SOURCES/kvm-block-vhdx-break-endian-translation-functions-out.patch @@ -0,0 +1,273 @@ +From 88e96c366d923305d0d3f124bbe295ef5068c6bc Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:54 +0100 +Subject: [PATCH 11/25] block: vhdx - break endian translation functions out + +RH-Author: Jeffrey Cody +Message-id: <0f4c21e92172fde45d0a5c609a19afa2e1f5a015.1384975172.git.jcody@redhat.com> +Patchwork-id: 55804 +O-Subject: [RHEL7 qemu-kvm PATCH 11/26] block: vhdx - break endian translation functions out +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This moves the endian translation functions out from the vhdx.c source, +into a separate source file. In addition to the previously defined +endian functions, new endian translation functions for log support are +added as well. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0f48e8f0978afe0bd44c63749e7df6411da6c437) +--- + block/Makefile.objs | 2 +- + block/vhdx-endian.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.c | 43 ---------------- + block/vhdx.h | 8 +++ + 4 files changed, 150 insertions(+), 44 deletions(-) + create mode 100644 block/vhdx-endian.c + +Signed-off-by: Miroslav Rezanina +--- + block/Makefile.objs | 2 +- + block/vhdx-endian.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.c | 43 ---------------- + block/vhdx.h | 8 +++ + 4 files changed, 150 insertions(+), 44 deletions(-) + create mode 100644 block/vhdx-endian.c + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 114f8a5..a7b3b87 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -2,7 +2,7 @@ block-obj-y += raw.o cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat + block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o qcow2-cache.o + block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o + block-obj-y += qed-check.o +-block-obj-$(CONFIG_VHDX) += vhdx.o ++block-obj-$(CONFIG_VHDX) += vhdx.o vhdx-endian.o + block-obj-y += parallels.o blkdebug.o blkverify.o + block-obj-y += snapshot.o qapi.o + block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o +diff --git a/block/vhdx-endian.c b/block/vhdx-endian.c +new file mode 100644 +index 0000000..3e93e63 +--- /dev/null ++++ b/block/vhdx-endian.c +@@ -0,0 +1,141 @@ ++/* ++ * Block driver for Hyper-V VHDX Images ++ * ++ * Copyright (c) 2013 Red Hat, Inc., ++ * ++ * Authors: ++ * Jeff Cody ++ * ++ * This is based on the "VHDX Format Specification v1.00", published 8/25/2012 ++ * by Microsoft: ++ * https://www.microsoft.com/en-us/download/details.aspx?id=34750 ++ * ++ * This work is licensed under the terms of the GNU LGPL, version 2 or later. ++ * See the COPYING.LIB file in the top-level directory. ++ * ++ */ ++ ++#include "qemu-common.h" ++#include "block/block_int.h" ++#include "block/vhdx.h" ++ ++#include ++ ++ ++/* ++ * All the VHDX formats on disk are little endian - the following ++ * are helper import/export functions to correctly convert ++ * endianness from disk read to native cpu format, and back again. ++ */ ++ ++ ++/* VHDX File Header */ ++ ++ ++void vhdx_header_le_import(VHDXHeader *h) ++{ ++ assert(h != NULL); ++ ++ le32_to_cpus(&h->signature); ++ le32_to_cpus(&h->checksum); ++ le64_to_cpus(&h->sequence_number); ++ ++ leguid_to_cpus(&h->file_write_guid); ++ leguid_to_cpus(&h->data_write_guid); ++ leguid_to_cpus(&h->log_guid); ++ ++ le16_to_cpus(&h->log_version); ++ le16_to_cpus(&h->version); ++ le32_to_cpus(&h->log_length); ++ le64_to_cpus(&h->log_offset); ++} ++ ++void vhdx_header_le_export(VHDXHeader *orig_h, VHDXHeader *new_h) ++{ ++ assert(orig_h != NULL); ++ assert(new_h != NULL); ++ ++ new_h->signature = cpu_to_le32(orig_h->signature); ++ new_h->checksum = cpu_to_le32(orig_h->checksum); ++ new_h->sequence_number = cpu_to_le64(orig_h->sequence_number); ++ ++ new_h->file_write_guid = orig_h->file_write_guid; ++ new_h->data_write_guid = orig_h->data_write_guid; ++ new_h->log_guid = orig_h->log_guid; ++ ++ cpu_to_leguids(&new_h->file_write_guid); ++ cpu_to_leguids(&new_h->data_write_guid); ++ cpu_to_leguids(&new_h->log_guid); ++ ++ new_h->log_version = cpu_to_le16(orig_h->log_version); ++ new_h->version = cpu_to_le16(orig_h->version); ++ new_h->log_length = cpu_to_le32(orig_h->log_length); ++ new_h->log_offset = cpu_to_le64(orig_h->log_offset); ++} ++ ++ ++/* VHDX Log Headers */ ++ ++ ++void vhdx_log_desc_le_import(VHDXLogDescriptor *d) ++{ ++ assert(d != NULL); ++ ++ le32_to_cpus(&d->signature); ++ le32_to_cpus(&d->trailing_bytes); ++ le64_to_cpus(&d->leading_bytes); ++ le64_to_cpus(&d->file_offset); ++ le64_to_cpus(&d->sequence_number); ++} ++ ++void vhdx_log_desc_le_export(VHDXLogDescriptor *d) ++{ ++ assert(d != NULL); ++ ++ cpu_to_le32s(&d->signature); ++ cpu_to_le32s(&d->trailing_bytes); ++ cpu_to_le64s(&d->leading_bytes); ++ cpu_to_le64s(&d->file_offset); ++ cpu_to_le64s(&d->sequence_number); ++} ++ ++void vhdx_log_data_le_export(VHDXLogDataSector *d) ++{ ++ assert(d != NULL); ++ ++ cpu_to_le32s(&d->data_signature); ++ cpu_to_le32s(&d->sequence_high); ++ cpu_to_le32s(&d->sequence_low); ++} ++ ++void vhdx_log_entry_hdr_le_import(VHDXLogEntryHeader *hdr) ++{ ++ assert(hdr != NULL); ++ ++ le32_to_cpus(&hdr->signature); ++ le32_to_cpus(&hdr->checksum); ++ le32_to_cpus(&hdr->entry_length); ++ le32_to_cpus(&hdr->tail); ++ le64_to_cpus(&hdr->sequence_number); ++ le32_to_cpus(&hdr->descriptor_count); ++ leguid_to_cpus(&hdr->log_guid); ++ le64_to_cpus(&hdr->flushed_file_offset); ++ le64_to_cpus(&hdr->last_file_offset); ++} ++ ++void vhdx_log_entry_hdr_le_export(VHDXLogEntryHeader *hdr) ++{ ++ assert(hdr != NULL); ++ ++ cpu_to_le32s(&hdr->signature); ++ cpu_to_le32s(&hdr->checksum); ++ cpu_to_le32s(&hdr->entry_length); ++ cpu_to_le32s(&hdr->tail); ++ cpu_to_le64s(&hdr->sequence_number); ++ cpu_to_le32s(&hdr->descriptor_count); ++ cpu_to_leguids(&hdr->log_guid); ++ cpu_to_le64s(&hdr->flushed_file_offset); ++ cpu_to_le64s(&hdr->last_file_offset); ++} ++ ++ +diff --git a/block/vhdx.c b/block/vhdx.c +index 16321ff..2efece1 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -223,49 +223,6 @@ static int vhdx_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + +-/* All VHDX structures on disk are little endian */ +-static void vhdx_header_le_import(VHDXHeader *h) +-{ +- assert(h != NULL); +- +- le32_to_cpus(&h->signature); +- le32_to_cpus(&h->checksum); +- le64_to_cpus(&h->sequence_number); +- +- leguid_to_cpus(&h->file_write_guid); +- leguid_to_cpus(&h->data_write_guid); +- leguid_to_cpus(&h->log_guid); +- +- le16_to_cpus(&h->log_version); +- le16_to_cpus(&h->version); +- le32_to_cpus(&h->log_length); +- le64_to_cpus(&h->log_offset); +-} +- +-/* All VHDX structures on disk are little endian */ +-static void vhdx_header_le_export(VHDXHeader *orig_h, VHDXHeader *new_h) +-{ +- assert(orig_h != NULL); +- assert(new_h != NULL); +- +- new_h->signature = cpu_to_le32(orig_h->signature); +- new_h->checksum = cpu_to_le32(orig_h->checksum); +- new_h->sequence_number = cpu_to_le64(orig_h->sequence_number); +- +- new_h->file_write_guid = orig_h->file_write_guid; +- new_h->data_write_guid = orig_h->data_write_guid; +- new_h->log_guid = orig_h->log_guid; +- +- cpu_to_leguids(&new_h->file_write_guid); +- cpu_to_leguids(&new_h->data_write_guid); +- cpu_to_leguids(&new_h->log_guid); +- +- new_h->log_version = cpu_to_le16(orig_h->log_version); +- new_h->version = cpu_to_le16(orig_h->version); +- new_h->log_length = cpu_to_le32(orig_h->log_length); +- new_h->log_offset = cpu_to_le64(orig_h->log_offset); +-} +- + /* Update the VHDX headers + * + * This follows the VHDX spec procedures for header updates. +diff --git a/block/vhdx.h b/block/vhdx.h +index 76ce4aa..55975a2 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -394,4 +394,12 @@ static inline void cpu_to_leguids(MSGUID *guid) + cpu_to_le16s(&guid->data3); + } + ++void vhdx_header_le_import(VHDXHeader *h); ++void vhdx_header_le_export(VHDXHeader *orig_h, VHDXHeader *new_h); ++void vhdx_log_desc_le_import(VHDXLogDescriptor *d); ++void vhdx_log_desc_le_export(VHDXLogDescriptor *d); ++void vhdx_log_data_le_export(VHDXLogDataSector *d); ++void vhdx_log_entry_hdr_le_import(VHDXLogEntryHeader *hdr); ++void vhdx_log_entry_hdr_le_export(VHDXLogEntryHeader *hdr); ++ + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-break-out-code-operations-to-functions.patch b/SOURCES/kvm-block-vhdx-break-out-code-operations-to-functions.patch new file mode 100644 index 0000000..61c9912 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-break-out-code-operations-to-functions.patch @@ -0,0 +1,220 @@ +From e9029068354e2c9dbfe7e7deaa6a96344a8b4d46 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:03 +0100 +Subject: [PATCH 20/25] block: vhdx - break out code operations to functions + +RH-Author: Jeffrey Cody +Message-id: <7f3a67c6c0988ecccac88cc5a8985058611e4cfa.1384975172.git.jcody@redhat.com> +Patchwork-id: 55815 +O-Subject: [RHEL7 qemu-kvm PATCH 20/26] block: vhdx - break out code operations to functions +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This is preperation for vhdx_create(). The ability to write headers, +and calculate the number of BAT entries will be needed within the +create() functions, so move this relevant code into helper functions. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 1e74a971cb3229813112c74dca81e599812b66f3) +--- + block/vhdx.c | 121 +++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 80 insertions(+), 41 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 121 ++++++++++++++++++++++++++++++++++++++-------------------- + 1 files changed, 80 insertions(+), 41 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 9d51176..5a112e8 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -248,6 +248,14 @@ static void vhdx_region_unregister_all(BDRVVHDXState *s) + } + } + ++static void vhdx_set_shift_bits(BDRVVHDXState *s) ++{ ++ s->logical_sector_size_bits = 31 - clz32(s->logical_sector_size); ++ s->sectors_per_block_bits = 31 - clz32(s->sectors_per_block); ++ s->chunk_ratio_bits = 63 - clz64(s->chunk_ratio); ++ s->block_size_bits = 31 - clz32(s->block_size); ++} ++ + /* + * Per the MS VHDX Specification, for every VHDX file: + * - The header section is fixed size - 1 MB +@@ -267,6 +275,50 @@ static int vhdx_probe(const uint8_t *buf, int buf_size, const char *filename) + return 0; + } + ++/* ++ * Writes the header to the specified offset. ++ * ++ * This will optionally read in buffer data from disk (otherwise zero-fill), ++ * and then update the header checksum. Header is converted to proper ++ * endianness before being written to the specified file offset ++ */ ++static int vhdx_write_header(BlockDriverState *bs_file, VHDXHeader *hdr, ++ uint64_t offset, bool read) ++{ ++ uint8_t *buffer = NULL; ++ int ret; ++ VHDXHeader header_le; ++ ++ assert(bs_file != NULL); ++ assert(hdr != NULL); ++ ++ /* the header checksum is not over just the packed size of VHDXHeader, ++ * but rather over the entire 'reserved' range for the header, which is ++ * 4KB (VHDX_HEADER_SIZE). */ ++ ++ buffer = qemu_blockalign(bs_file, VHDX_HEADER_SIZE); ++ if (read) { ++ /* if true, we can't assume the extra reserved bytes are 0 */ ++ ret = bdrv_pread(bs_file, offset, buffer, VHDX_HEADER_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ } else { ++ memset(buffer, 0, VHDX_HEADER_SIZE); ++ } ++ ++ /* overwrite the actual VHDXHeader portion */ ++ memcpy(buffer, hdr, sizeof(VHDXHeader)); ++ hdr->checksum = vhdx_update_checksum(buffer, VHDX_HEADER_SIZE, ++ offsetof(VHDXHeader, checksum)); ++ vhdx_header_le_export(hdr, &header_le); ++ ret = bdrv_pwrite_sync(bs_file, offset, &header_le, sizeof(VHDXHeader)); ++ ++exit: ++ qemu_vfree(buffer); ++ return ret; ++} ++ + /* Update the VHDX headers + * + * This follows the VHDX spec procedures for header updates. +@@ -282,8 +334,6 @@ static int vhdx_update_header(BlockDriverState *bs, BDRVVHDXState *s, + + VHDXHeader *active_header; + VHDXHeader *inactive_header; +- VHDXHeader header_le; +- uint8_t *buffer; + + /* operate on the non-current header */ + if (s->curr_header == 0) { +@@ -311,31 +361,13 @@ static int vhdx_update_header(BlockDriverState *bs, BDRVVHDXState *s, + inactive_header->log_guid = *log_guid; + } + +- /* the header checksum is not over just the packed size of VHDXHeader, +- * but rather over the entire 'reserved' range for the header, which is +- * 4KB (VHDX_HEADER_SIZE). */ +- +- buffer = qemu_blockalign(bs, VHDX_HEADER_SIZE); +- /* we can't assume the extra reserved bytes are 0 */ +- ret = bdrv_pread(bs->file, header_offset, buffer, VHDX_HEADER_SIZE); +- if (ret < 0) { +- goto exit; +- } +- /* overwrite the actual VHDXHeader portion */ +- memcpy(buffer, inactive_header, sizeof(VHDXHeader)); +- inactive_header->checksum = +- vhdx_update_checksum(buffer, VHDX_HEADER_SIZE, +- offsetof(VHDXHeader, checksum)); +- vhdx_header_le_export(inactive_header, &header_le); +- ret = bdrv_pwrite_sync(bs->file, header_offset, &header_le, +- sizeof(VHDXHeader)); ++ vhdx_write_header(bs->file, inactive_header, header_offset, true); + if (ret < 0) { + goto exit; + } + s->curr_header = hdr_idx; + + exit: +- qemu_vfree(buffer); + return ret; + } + +@@ -773,10 +805,7 @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s) + goto exit; + } + +- s->logical_sector_size_bits = 31 - clz32(s->logical_sector_size); +- s->sectors_per_block_bits = 31 - clz32(s->sectors_per_block); +- s->chunk_ratio_bits = 63 - clz64(s->chunk_ratio); +- s->block_size_bits = 31 - clz32(s->block_size); ++ vhdx_set_shift_bits(s); + + ret = 0; + +@@ -785,6 +814,31 @@ exit: + return ret; + } + ++/* ++ * Calculate the number of BAT entries, including sector ++ * bitmap entries. ++ */ ++static void vhdx_calc_bat_entries(BDRVVHDXState *s) ++{ ++ uint32_t data_blocks_cnt, bitmap_blocks_cnt; ++ ++ data_blocks_cnt = s->virtual_disk_size >> s->block_size_bits; ++ if (s->virtual_disk_size - (data_blocks_cnt << s->block_size_bits)) { ++ data_blocks_cnt++; ++ } ++ bitmap_blocks_cnt = data_blocks_cnt >> s->chunk_ratio_bits; ++ if (data_blocks_cnt - (bitmap_blocks_cnt << s->chunk_ratio_bits)) { ++ bitmap_blocks_cnt++; ++ } ++ ++ if (s->parent_entries) { ++ s->bat_entries = bitmap_blocks_cnt * (s->chunk_ratio + 1); ++ } else { ++ s->bat_entries = data_blocks_cnt + ++ ((data_blocks_cnt - 1) >> s->chunk_ratio_bits); ++ } ++ ++} + + static void vhdx_close(BlockDriverState *bs) + { +@@ -811,7 +865,6 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + int ret = 0; + uint32_t i; + uint64_t signature; +- uint32_t data_blocks_cnt, bitmap_blocks_cnt; + bool log_flushed = false; + + +@@ -862,21 +915,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + * logical_sector_size */ + bs->total_sectors = s->virtual_disk_size >> s->logical_sector_size_bits; + +- data_blocks_cnt = s->virtual_disk_size >> s->block_size_bits; +- if (s->virtual_disk_size - (data_blocks_cnt << s->block_size_bits)) { +- data_blocks_cnt++; +- } +- bitmap_blocks_cnt = data_blocks_cnt >> s->chunk_ratio_bits; +- if (data_blocks_cnt - (bitmap_blocks_cnt << s->chunk_ratio_bits)) { +- bitmap_blocks_cnt++; +- } +- +- if (s->parent_entries) { +- s->bat_entries = bitmap_blocks_cnt * (s->chunk_ratio + 1); +- } else { +- s->bat_entries = data_blocks_cnt + +- ((data_blocks_cnt - 1) >> s->chunk_ratio_bits); +- } ++ vhdx_calc_bat_entries(s); + + s->bat_offset = s->bat_rt.file_offset; + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-code-movement-VHDXMetadataEntries-and-BDR.patch b/SOURCES/kvm-block-vhdx-code-movement-VHDXMetadataEntries-and-BDR.patch new file mode 100644 index 0000000..a69ab02 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-code-movement-VHDXMetadataEntries-and-BDR.patch @@ -0,0 +1,163 @@ +From 2abbf288d8f8cd28b89358c50bb881b2afd974c2 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:52 +0100 +Subject: [PATCH 09/25] block: vhdx code movement - VHDXMetadataEntries and BDRVVHDXState to header. + +RH-Author: Jeffrey Cody +Message-id: <9c245806ba56c5fa2386de02cffbaace28aa928c.1384975172.git.jcody@redhat.com> +Patchwork-id: 55802 +O-Subject: [RHEL7 qemu-kvm PATCH 09/26] block: vhdx code movement - VHDXMetadataEntries and BDRVVHDXState to header. +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +In preparation for VHDX log support, move these structures to the +header. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 28541d46280733b9afe7b106a3a6665275a45e5f) +--- + block/vhdx.c | 52 ---------------------------------------------------- + block/vhdx.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 48 insertions(+), 52 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 52 ---------------------------------------------------- + block/vhdx.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 48 insertions(+), 52 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index fba2aa9..16321ff 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -105,16 +105,6 @@ static const MSGUID parent_vhdx_guid = { .data1 = 0xb04aefb7, + META_PAGE_83_PRESENT | META_LOGICAL_SECTOR_SIZE_PRESENT | \ + META_PHYS_SECTOR_SIZE_PRESENT) + +-typedef struct VHDXMetadataEntries { +- VHDXMetadataTableEntry file_parameters_entry; +- VHDXMetadataTableEntry virtual_disk_size_entry; +- VHDXMetadataTableEntry page83_data_entry; +- VHDXMetadataTableEntry logical_sector_size_entry; +- VHDXMetadataTableEntry phys_sector_size_entry; +- VHDXMetadataTableEntry parent_locator_entry; +- uint16_t present; +-} VHDXMetadataEntries; +- + + typedef struct VHDXSectorInfo { + uint32_t bat_idx; /* BAT entry index */ +@@ -125,48 +115,6 @@ typedef struct VHDXSectorInfo { + uint64_t block_offset; /* block offset, in bytes */ + } VHDXSectorInfo; + +- +- +-typedef struct BDRVVHDXState { +- CoMutex lock; +- +- int curr_header; +- VHDXHeader *headers[2]; +- +- VHDXRegionTableHeader rt; +- VHDXRegionTableEntry bat_rt; /* region table for the BAT */ +- VHDXRegionTableEntry metadata_rt; /* region table for the metadata */ +- +- VHDXMetadataTableHeader metadata_hdr; +- VHDXMetadataEntries metadata_entries; +- +- VHDXFileParameters params; +- uint32_t block_size; +- uint32_t block_size_bits; +- uint32_t sectors_per_block; +- uint32_t sectors_per_block_bits; +- +- uint64_t virtual_disk_size; +- uint32_t logical_sector_size; +- uint32_t physical_sector_size; +- +- uint64_t chunk_ratio; +- uint32_t chunk_ratio_bits; +- uint32_t logical_sector_size_bits; +- +- uint32_t bat_entries; +- VHDXBatEntry *bat; +- uint64_t bat_offset; +- +- MSGUID session_guid; +- +- +- VHDXParentLocatorHeader parent_header; +- VHDXParentLocatorEntry *parent_entries; +- +- Error *migration_blocker; +-} BDRVVHDXState; +- + /* Calculates new checksum. + * + * Zero is substituted during crc calculation for the original crc field +diff --git a/block/vhdx.h b/block/vhdx.h +index 2223b15..57375ff 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -308,6 +308,54 @@ typedef struct QEMU_PACKED VHDXParentLocatorEntry { + + /* ----- END VHDX SPECIFICATION STRUCTURES ---- */ + ++typedef struct VHDXMetadataEntries { ++ VHDXMetadataTableEntry file_parameters_entry; ++ VHDXMetadataTableEntry virtual_disk_size_entry; ++ VHDXMetadataTableEntry page83_data_entry; ++ VHDXMetadataTableEntry logical_sector_size_entry; ++ VHDXMetadataTableEntry phys_sector_size_entry; ++ VHDXMetadataTableEntry parent_locator_entry; ++ uint16_t present; ++} VHDXMetadataEntries; ++ ++typedef struct BDRVVHDXState { ++ CoMutex lock; ++ ++ int curr_header; ++ VHDXHeader *headers[2]; ++ ++ VHDXRegionTableHeader rt; ++ VHDXRegionTableEntry bat_rt; /* region table for the BAT */ ++ VHDXRegionTableEntry metadata_rt; /* region table for the metadata */ ++ ++ VHDXMetadataTableHeader metadata_hdr; ++ VHDXMetadataEntries metadata_entries; ++ ++ VHDXFileParameters params; ++ uint32_t block_size; ++ uint32_t block_size_bits; ++ uint32_t sectors_per_block; ++ uint32_t sectors_per_block_bits; ++ ++ uint64_t virtual_disk_size; ++ uint32_t logical_sector_size; ++ uint32_t physical_sector_size; ++ ++ uint64_t chunk_ratio; ++ uint32_t chunk_ratio_bits; ++ uint32_t logical_sector_size_bits; ++ ++ uint32_t bat_entries; ++ VHDXBatEntry *bat; ++ uint64_t bat_offset; ++ ++ MSGUID session_guid; ++ ++ VHDXParentLocatorHeader parent_header; ++ VHDXParentLocatorEntry *parent_entries; ++ ++ Error *migration_blocker; ++} BDRVVHDXState; + + void vhdx_guid_generate(MSGUID *guid); + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-code-movement-move-vhdx_close-above-vhdx_.patch b/SOURCES/kvm-block-vhdx-code-movement-move-vhdx_close-above-vhdx_.patch new file mode 100644 index 0000000..262daef --- /dev/null +++ b/SOURCES/kvm-block-vhdx-code-movement-move-vhdx_close-above-vhdx_.patch @@ -0,0 +1,69 @@ +From a9978815f1d701d0f995ec1c8a49b2a05e1fad12 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:56 +0100 +Subject: [PATCH 13/25] block: vhdx code movement - move vhdx_close() above vhdx_open() + +RH-Author: Jeffrey Cody +Message-id: <577e97e41700b11687818a8dd0169444f6c58f40.1384975172.git.jcody@redhat.com> +Patchwork-id: 55805 +O-Subject: [RHEL7 qemu-kvm PATCH 13/26] block: vhdx code movement - move vhdx_close() above vhdx_open() +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c46415afc2c99ea052f52f9d68ed9a78799f2c10) +--- + block/vhdx.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 49219df..7d697e4 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -778,6 +778,17 @@ exit: + } + + ++static void vhdx_close(BlockDriverState *bs) ++{ ++ BDRVVHDXState *s = bs->opaque; ++ qemu_vfree(s->headers[0]); ++ qemu_vfree(s->headers[1]); ++ qemu_vfree(s->bat); ++ qemu_vfree(s->parent_entries); ++ migrate_del_blocker(s->migration_blocker); ++ error_free(s->migration_blocker); ++} ++ + static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { +@@ -1047,17 +1058,6 @@ static coroutine_fn int vhdx_co_writev(BlockDriverState *bs, int64_t sector_num, + } + + +-static void vhdx_close(BlockDriverState *bs) +-{ +- BDRVVHDXState *s = bs->opaque; +- qemu_vfree(s->headers[0]); +- qemu_vfree(s->headers[1]); +- qemu_vfree(s->bat); +- qemu_vfree(s->parent_entries); +- migrate_del_blocker(s->migration_blocker); +- error_free(s->migration_blocker); +-} +- + static BlockDriver bdrv_vhdx = { + .format_name = "vhdx", + .instance_size = sizeof(BDRVVHDXState), +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-fix-comment-typos-in-header-fix-incorrect.patch b/SOURCES/kvm-block-vhdx-fix-comment-typos-in-header-fix-incorrect.patch new file mode 100644 index 0000000..6a3604e --- /dev/null +++ b/SOURCES/kvm-block-vhdx-fix-comment-typos-in-header-fix-incorrect.patch @@ -0,0 +1,79 @@ +From 25ed81be92c2171ceae075daa9823e01d7f90da3 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:04 +0100 +Subject: [PATCH 21/25] block: vhdx - fix comment typos in header, fix incorrect struct fields + +RH-Author: Jeffrey Cody +Message-id: <65dd76628b4fc349d4a5f58f433e2e682881e85f.1384975172.git.jcody@redhat.com> +Patchwork-id: 55813 +O-Subject: [RHEL7 qemu-kvm PATCH 21/26] block: vhdx - fix comment typos in header, fix incorrect struct fields +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +VHDXPage83Data and VHDXParentLocatorHeader both incorrectly had their +MSGUID fields set as arrays of 16. This is incorrect (it stems from +an early version where those fields were uint_8 arrays). Those fields +were, up to this patch, unused. + +Also, there were a couple of typos and incorrect wording in comments, +and those have been fixed up as well. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 61c02e5687dcc581c9d3413b61040b023adeaa9c) +--- + block/vhdx.h | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.h | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/block/vhdx.h b/block/vhdx.h +index 0acad37..245547b 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -58,7 +58,7 @@ + typedef struct VHDXFileIdentifier { + uint64_t signature; /* "vhdxfile" in ASCII */ + uint16_t creator[256]; /* optional; utf-16 string to identify +- the vhdx file creator. Diagnotistic ++ the vhdx file creator. Diagnostic + only */ + } VHDXFileIdentifier; + +@@ -114,8 +114,8 @@ typedef struct QEMU_PACKED VHDXHeader { + there is no valid log. If non-zero, + log entries with this guid are + valid. */ +- uint16_t log_version; /* version of the log format. Mustn't be +- zero, unless log_guid is also zero */ ++ uint16_t log_version; /* version of the log format. Must be ++ set to zero */ + uint16_t version; /* version of the vhdx file. Currently, + only supported version is "1" */ + uint32_t log_length; /* length of the log. Must be multiple +@@ -281,7 +281,7 @@ typedef struct QEMU_PACKED VHDXVirtualDiskSize { + } VHDXVirtualDiskSize; + + typedef struct QEMU_PACKED VHDXPage83Data { +- MSGUID page_83_data[16]; /* unique id for scsi devices that ++ MSGUID page_83_data; /* unique id for scsi devices that + support page 0x83 */ + } VHDXPage83Data; + +@@ -296,7 +296,7 @@ typedef struct QEMU_PACKED VHDXVirtualDiskPhysicalSectorSize { + } VHDXVirtualDiskPhysicalSectorSize; + + typedef struct QEMU_PACKED VHDXParentLocatorHeader { +- MSGUID locator_type[16]; /* type of the parent virtual disk. */ ++ MSGUID locator_type; /* type of the parent virtual disk. */ + uint16_t reserved; + uint16_t key_value_count; /* number of key/value pairs for this + locator */ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-improve-error-message-and-.bdrv_check-imp.patch b/SOURCES/kvm-block-vhdx-improve-error-message-and-.bdrv_check-imp.patch new file mode 100644 index 0000000..8f64060 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-improve-error-message-and-.bdrv_check-imp.patch @@ -0,0 +1,174 @@ +From ef9c4188157e2349ff68710982d9922f4a335b82 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Mon, 13 Jan 2014 20:52:04 +0100 +Subject: [PATCH 12/16] block: vhdx - improve error message, and .bdrv_check implementation + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 56643 +O-Subject: [RHEL7 qemu-kvm PATCH] block: vhdx - improve error message, and .bdrv_check implementation +Bugzilla: 1035001 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +If there is a dirty log file to be replayed in a VHDX image, it is +replayed in .vhdx_open(). However, if the file is opened read-only, +then a somewhat cryptic error message results. + +This adds a more helpful error message for the user. If an image file +contains a log to be replayed, and is opened read-only, the user is +instructed to run 'qemu-img check -r all' on the image file. + +Running qemu-img check -r all will cause the image file to be opened +r/w, which will replay the log file. If a log file replay is detected, +this is flagged, and bdrv_check will increase the corruptions_fixed +count for the image. + +[Fixed typo in error message that was pointed out by Eric Blake +. +--Stefan] + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7e30e6a6746b417c7e0dbc9af009560fbb63f336) + +Conflicts: + block/vhdx.c + +RHEL7 Notes: Conflict due to different order of members in the + BlockDriver struct. Resolved so that the order matches + what is upstream. + +BZ 1035001 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6861970 + +Signed-off-by: Jeff Cody +--- + block/vhdx-log.c | 13 ++++++++++++- + block/vhdx.c | 25 ++++++++++++++++++++++--- + block/vhdx.h | 5 ++++- + 3 files changed, 38 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx-log.c | 13 ++++++++++++- + block/vhdx.c | 25 ++++++++++++++++++++++--- + block/vhdx.h | 5 ++++- + 3 files changed, 38 insertions(+), 5 deletions(-) + +diff --git a/block/vhdx-log.c b/block/vhdx-log.c +index ee5583c..8c9ae0d 100644 +--- a/block/vhdx-log.c ++++ b/block/vhdx-log.c +@@ -706,7 +706,8 @@ exit: + * + * If read-only, we must replay the log in RAM (or refuse to open + * a dirty VHDX file read-only) */ +-int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed) ++int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed, ++ Error **errp) + { + int ret = 0; + VHDXHeader *hdr; +@@ -761,6 +762,16 @@ int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed) + } + + if (logs.valid) { ++ if (bs->read_only) { ++ ret = -EPERM; ++ error_setg_errno(errp, EPERM, ++ "VHDX image file '%s' opened read-only, but " ++ "contains a log that needs to be replayed. To " ++ "replay the log, execute:\n qemu-img check -r " ++ "all '%s'", ++ bs->filename, bs->filename); ++ goto exit; ++ } + /* now flush the log */ + ret = vhdx_log_flush(bs, s, &logs); + if (ret < 0) { +diff --git a/block/vhdx.c b/block/vhdx.c +index 8e3b371..8b1a5c9 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -878,7 +878,6 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + int ret = 0; + uint32_t i; + uint64_t signature; +- bool log_flushed = false; + + + s->bat = NULL; +@@ -907,7 +906,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- ret = vhdx_parse_log(bs, s, &log_flushed); ++ ret = vhdx_parse_log(bs, s, &s->log_replayed_on_open, errp); + if (ret < 0) { + goto fail; + } +@@ -1854,6 +1853,24 @@ exit: + return ret; + } + ++/* If opened r/w, the VHDX driver will automatically replay the log, ++ * if one is present, inside the vhdx_open() call. ++ * ++ * If qemu-img check -r all is called, the image is automatically opened ++ * r/w and any log has already been replayed, so there is nothing (currently) ++ * for us to do here ++ */ ++static int vhdx_check(BlockDriverState *bs, BdrvCheckResult *result, ++ BdrvCheckMode fix) ++{ ++ BDRVVHDXState *s = bs->opaque; ++ ++ if (s->log_replayed_on_open) { ++ result->corruptions_fixed++; ++ } ++ return 0; ++} ++ + static QEMUOptionParameter vhdx_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -1896,8 +1913,10 @@ static BlockDriver bdrv_vhdx = { + .bdrv_reopen_prepare = vhdx_reopen_prepare, + .bdrv_co_readv = vhdx_co_readv, + .bdrv_co_writev = vhdx_co_writev, +- .bdrv_get_info = vhdx_get_info, + .bdrv_create = vhdx_create, ++ .bdrv_get_info = vhdx_get_info, ++ .bdrv_check = vhdx_check, ++ + .create_options = vhdx_create_options, + }; + +diff --git a/block/vhdx.h b/block/vhdx.h +index 365eca0..469e95c 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -394,6 +394,8 @@ typedef struct BDRVVHDXState { + + Error *migration_blocker; + ++ bool log_replayed_on_open; ++ + QLIST_HEAD(VHDXRegionHead, VHDXRegionEntry) regions; + } BDRVVHDXState; + +@@ -408,7 +410,8 @@ uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size, + + bool vhdx_checksum_is_valid(uint8_t *buf, size_t size, int crc_offset); + +-int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed); ++int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed, ++ Error **errp); + + int vhdx_log_write_and_flush(BlockDriverState *bs, BDRVVHDXState *s, + void *data, uint32_t length, uint64_t offset); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-log-parsing-replay-and-flush-support.patch b/SOURCES/kvm-block-vhdx-log-parsing-replay-and-flush-support.patch new file mode 100644 index 0000000..ec9cc44 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-log-parsing-replay-and-flush-support.patch @@ -0,0 +1,959 @@ +From 457fd5fdb8a089eec09fc21e06ce3099633a248a Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:57 +0100 +Subject: [PATCH 14/25] block: vhdx - log parsing, replay, and flush support + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55807 +O-Subject: [RHEL7 qemu-kvm PATCH 14/26] block: vhdx - log parsing, replay, and flush support +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds support for VHDX v0 logs, as specified in Microsoft's +VHDX Specification Format v1.00: +https://www.microsoft.com/en-us/download/details.aspx?id=34750 + +The following support is added: + +* Log parsing, and validation - validate that an existing log + is correct. + +* Log search - search through an existing log, to find any valid + sequence of entries. + +* Log replay and flush - replay an existing log, and flush/clear + the log when complete. + +The VHDX log is a circular buffer, with elements (sectors) of 4KB. + +A log entry is a variably-length number of sectors, that is +comprised of a header and 'descriptors', that describe each sector. + +A log may contain multiple entries, know as a log sequence. In a log +sequence, each log entry immediately follows the previous entry, with an +incrementing sequence number. There can only ever be one active and +valid sequence in the log. + +Each log entry must match the file log GUID in order to be valid (along +with other criteria). Once we have flushed all valid log entries, we +marked the file log GUID to be zero, which indicates a buffer with no +valid entries. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0a43a1b5d7c33208120eeb2d98ebb9ab15dc2c87) +--- + block/Makefile.objs | 2 +- + block/vhdx-log.c | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.c | 65 +---- + block/vhdx.h | 7 +- + 4 files changed, 749 insertions(+), 53 deletions(-) + create mode 100644 block/vhdx-log.c + +Signed-off-by: Miroslav Rezanina +--- + block/Makefile.objs | 2 +- + block/vhdx-log.c | 728 +++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.c | 65 +---- + block/vhdx.h | 7 +- + 4 files changed, 749 insertions(+), 53 deletions(-) + create mode 100644 block/vhdx-log.c + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index a7b3b87..84dd57f 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -2,7 +2,7 @@ block-obj-y += raw.o cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat + block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o qcow2-cache.o + block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o + block-obj-y += qed-check.o +-block-obj-$(CONFIG_VHDX) += vhdx.o vhdx-endian.o ++block-obj-$(CONFIG_VHDX) += vhdx.o vhdx-endian.o vhdx-log.o + block-obj-y += parallels.o blkdebug.o blkverify.o + block-obj-y += snapshot.o qapi.o + block-obj-$(CONFIG_WIN32) += raw-win32.o win32-aio.o +diff --git a/block/vhdx-log.c b/block/vhdx-log.c +new file mode 100644 +index 0000000..0284729 +--- /dev/null ++++ b/block/vhdx-log.c +@@ -0,0 +1,728 @@ ++/* ++ * Block driver for Hyper-V VHDX Images ++ * ++ * Copyright (c) 2013 Red Hat, Inc., ++ * ++ * Authors: ++ * Jeff Cody ++ * ++ * This is based on the "VHDX Format Specification v1.00", published 8/25/2012 ++ * by Microsoft: ++ * https://www.microsoft.com/en-us/download/details.aspx?id=34750 ++ * ++ * This file covers the functionality of the metadata log writing, parsing, and ++ * replay. ++ * ++ * This work is licensed under the terms of the GNU LGPL, version 2 or later. ++ * See the COPYING.LIB file in the top-level directory. ++ * ++ */ ++#include "qemu-common.h" ++#include "block/block_int.h" ++#include "qemu/module.h" ++#include "block/vhdx.h" ++ ++ ++typedef struct VHDXLogSequence { ++ bool valid; ++ uint32_t count; ++ VHDXLogEntries log; ++ VHDXLogEntryHeader hdr; ++} VHDXLogSequence; ++ ++typedef struct VHDXLogDescEntries { ++ VHDXLogEntryHeader hdr; ++ VHDXLogDescriptor desc[]; ++} VHDXLogDescEntries; ++ ++static const MSGUID zero_guid = { 0 }; ++ ++/* The log located on the disk is circular buffer containing ++ * sectors of 4096 bytes each. ++ * ++ * It is assumed for the read/write functions below that the ++ * circular buffer scheme uses a 'one sector open' to indicate ++ * the buffer is full. Given the validation methods used for each ++ * sector, this method should be compatible with other methods that ++ * do not waste a sector. ++ */ ++ ++ ++/* Allow peeking at the hdr entry at the beginning of the current ++ * read index, without advancing the read index */ ++static int vhdx_log_peek_hdr(BlockDriverState *bs, VHDXLogEntries *log, ++ VHDXLogEntryHeader *hdr) ++{ ++ int ret = 0; ++ uint64_t offset; ++ uint32_t read; ++ ++ assert(hdr != NULL); ++ ++ /* peek is only supported on sector boundaries */ ++ if (log->read % VHDX_LOG_SECTOR_SIZE) { ++ ret = -EFAULT; ++ goto exit; ++ } ++ ++ read = log->read; ++ /* we are guaranteed that a) log sectors are 4096 bytes, ++ * and b) the log length is a multiple of 1MB. So, there ++ * is always a round number of sectors in the buffer */ ++ if ((read + sizeof(VHDXLogEntryHeader)) > log->length) { ++ read = 0; ++ } ++ ++ if (read == log->write) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ offset = log->offset + read; ++ ++ ret = bdrv_pread(bs->file, offset, hdr, sizeof(VHDXLogEntryHeader)); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++exit: ++ return ret; ++} ++ ++/* Index increment for log, based on sector boundaries */ ++static int vhdx_log_inc_idx(uint32_t idx, uint64_t length) ++{ ++ idx += VHDX_LOG_SECTOR_SIZE; ++ /* we are guaranteed that a) log sectors are 4096 bytes, ++ * and b) the log length is a multiple of 1MB. So, there ++ * is always a round number of sectors in the buffer */ ++ return idx >= length ? 0 : idx; ++} ++ ++ ++/* Reset the log to empty */ ++static void vhdx_log_reset(BlockDriverState *bs, BDRVVHDXState *s) ++{ ++ MSGUID guid = { 0 }; ++ s->log.read = s->log.write = 0; ++ /* a log guid of 0 indicates an empty log to any parser of v0 ++ * VHDX logs */ ++ vhdx_update_headers(bs, s, false, &guid); ++} ++ ++/* Reads num_sectors from the log (all log sectors are 4096 bytes), ++ * into buffer 'buffer'. Upon return, *sectors_read will contain ++ * the number of sectors successfully read. ++ * ++ * It is assumed that 'buffer' is already allocated, and of sufficient ++ * size (i.e. >= 4096*num_sectors). ++ * ++ * If 'peek' is true, then the tail (read) pointer for the circular buffer is ++ * not modified. ++ * ++ * 0 is returned on success, -errno otherwise. */ ++static int vhdx_log_read_sectors(BlockDriverState *bs, VHDXLogEntries *log, ++ uint32_t *sectors_read, void *buffer, ++ uint32_t num_sectors, bool peek) ++{ ++ int ret = 0; ++ uint64_t offset; ++ uint32_t read; ++ ++ read = log->read; ++ ++ *sectors_read = 0; ++ while (num_sectors) { ++ if (read == log->write) { ++ /* empty */ ++ break; ++ } ++ offset = log->offset + read; ++ ++ ret = bdrv_pread(bs->file, offset, buffer, VHDX_LOG_SECTOR_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ read = vhdx_log_inc_idx(read, log->length); ++ ++ *sectors_read = *sectors_read + 1; ++ num_sectors--; ++ } ++ ++exit: ++ if (!peek) { ++ log->read = read; ++ } ++ return ret; ++} ++ ++/* Validates a log entry header */ ++static bool vhdx_log_hdr_is_valid(VHDXLogEntries *log, VHDXLogEntryHeader *hdr, ++ BDRVVHDXState *s) ++{ ++ int valid = false; ++ ++ if (memcmp(&hdr->signature, "loge", 4)) { ++ goto exit; ++ } ++ ++ /* if the individual entry length is larger than the whole log ++ * buffer, that is obviously invalid */ ++ if (log->length < hdr->entry_length) { ++ goto exit; ++ } ++ ++ /* length of entire entry must be in units of 4KB (log sector size) */ ++ if (hdr->entry_length % (VHDX_LOG_SECTOR_SIZE)) { ++ goto exit; ++ } ++ ++ /* per spec, sequence # must be > 0 */ ++ if (hdr->sequence_number == 0) { ++ goto exit; ++ } ++ ++ /* log entries are only valid if they match the file-wide log guid ++ * found in the active header */ ++ if (!guid_eq(hdr->log_guid, s->headers[s->curr_header]->log_guid)) { ++ goto exit; ++ } ++ ++ if (hdr->descriptor_count * sizeof(VHDXLogDescriptor) > hdr->entry_length) { ++ goto exit; ++ } ++ ++ valid = true; ++ ++exit: ++ return valid; ++} ++ ++/* ++ * Given a log header, this will validate that the descriptors and the ++ * corresponding data sectors (if applicable) ++ * ++ * Validation consists of: ++ * 1. Making sure the sequence numbers matches the entry header ++ * 2. Verifying a valid signature ('zero' or 'desc' for descriptors) ++ * 3. File offset field is a multiple of 4KB ++ * 4. If a data descriptor, the corresponding data sector ++ * has its signature ('data') and matching sequence number ++ * ++ * @desc: the data buffer containing the descriptor ++ * @hdr: the log entry header ++ * ++ * Returns true if valid ++ */ ++static bool vhdx_log_desc_is_valid(VHDXLogDescriptor *desc, ++ VHDXLogEntryHeader *hdr) ++{ ++ bool ret = false; ++ ++ if (desc->sequence_number != hdr->sequence_number) { ++ goto exit; ++ } ++ if (desc->file_offset % VHDX_LOG_SECTOR_SIZE) { ++ goto exit; ++ } ++ ++ if (!memcmp(&desc->signature, "zero", 4)) { ++ if (desc->zero_length % VHDX_LOG_SECTOR_SIZE == 0) { ++ /* valid */ ++ ret = true; ++ } ++ } else if (!memcmp(&desc->signature, "desc", 4)) { ++ /* valid */ ++ ret = true; ++ } ++ ++exit: ++ return ret; ++} ++ ++ ++/* Prior to sector data for a log entry, there is the header ++ * and the descriptors referenced in the header: ++ * ++ * [] = 4KB sector ++ * ++ * [ hdr, desc ][ desc ][ ... ][ data ][ ... ] ++ * ++ * The first sector in a log entry has a 64 byte header, and ++ * up to 126 32-byte descriptors. If more descriptors than ++ * 126 are required, then subsequent sectors can have up to 128 ++ * descriptors. Each sector is 4KB. Data follows the descriptor ++ * sectors. ++ * ++ * This will return the number of sectors needed to encompass ++ * the passed number of descriptors in desc_cnt. ++ * ++ * This will never return 0, even if desc_cnt is 0. ++ */ ++static int vhdx_compute_desc_sectors(uint32_t desc_cnt) ++{ ++ uint32_t desc_sectors; ++ ++ desc_cnt += 2; /* account for header in first sector */ ++ desc_sectors = desc_cnt / 128; ++ if (desc_cnt % 128) { ++ desc_sectors++; ++ } ++ ++ return desc_sectors; ++} ++ ++ ++/* Reads the log header, and subsequent descriptors (if any). This ++ * will allocate all the space for buffer, which must be NULL when ++ * passed into this function. Each descriptor will also be validated, ++ * and error returned if any are invalid. */ ++static int vhdx_log_read_desc(BlockDriverState *bs, BDRVVHDXState *s, ++ VHDXLogEntries *log, VHDXLogDescEntries **buffer) ++{ ++ int ret = 0; ++ uint32_t desc_sectors; ++ uint32_t sectors_read; ++ VHDXLogEntryHeader hdr; ++ VHDXLogDescEntries *desc_entries = NULL; ++ int i; ++ ++ assert(*buffer == NULL); ++ ++ ret = vhdx_log_peek_hdr(bs, log, &hdr); ++ if (ret < 0) { ++ goto exit; ++ } ++ vhdx_log_entry_hdr_le_import(&hdr); ++ if (vhdx_log_hdr_is_valid(log, &hdr, s) == false) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ desc_sectors = vhdx_compute_desc_sectors(hdr.descriptor_count); ++ desc_entries = qemu_blockalign(bs, desc_sectors * VHDX_LOG_SECTOR_SIZE); ++ ++ ret = vhdx_log_read_sectors(bs, log, §ors_read, desc_entries, ++ desc_sectors, false); ++ if (ret < 0) { ++ goto free_and_exit; ++ } ++ if (sectors_read != desc_sectors) { ++ ret = -EINVAL; ++ goto free_and_exit; ++ } ++ ++ /* put in proper endianness, and validate each desc */ ++ for (i = 0; i < hdr.descriptor_count; i++) { ++ vhdx_log_desc_le_import(&desc_entries->desc[i]); ++ if (vhdx_log_desc_is_valid(&desc_entries->desc[i], &hdr) == false) { ++ ret = -EINVAL; ++ goto free_and_exit; ++ } ++ } ++ ++ *buffer = desc_entries; ++ goto exit; ++ ++free_and_exit: ++ qemu_vfree(desc_entries); ++exit: ++ return ret; ++} ++ ++ ++/* Flushes the descriptor described by desc to the VHDX image file. ++ * If the descriptor is a data descriptor, than 'data' must be non-NULL, ++ * and >= 4096 bytes (VHDX_LOG_SECTOR_SIZE), containing the data to be ++ * written. ++ * ++ * Verification is performed to make sure the sequence numbers of a data ++ * descriptor match the sequence number in the desc. ++ * ++ * For a zero descriptor, it may describe multiple sectors to fill with zeroes. ++ * In this case, it should be noted that zeroes are written to disk, and the ++ * image file is not extended as a sparse file. */ ++static int vhdx_log_flush_desc(BlockDriverState *bs, VHDXLogDescriptor *desc, ++ VHDXLogDataSector *data) ++{ ++ int ret = 0; ++ uint64_t seq, file_offset; ++ uint32_t offset = 0; ++ void *buffer = NULL; ++ uint64_t count = 1; ++ int i; ++ ++ buffer = qemu_blockalign(bs, VHDX_LOG_SECTOR_SIZE); ++ ++ if (!memcmp(&desc->signature, "desc", 4)) { ++ /* data sector */ ++ if (data == NULL) { ++ ret = -EFAULT; ++ goto exit; ++ } ++ ++ /* The sequence number of the data sector must match that ++ * in the descriptor */ ++ seq = data->sequence_high; ++ seq <<= 32; ++ seq |= data->sequence_low & 0xffffffff; ++ ++ if (seq != desc->sequence_number) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ /* Each data sector is in total 4096 bytes, however the first ++ * 8 bytes, and last 4 bytes, are located in the descriptor */ ++ memcpy(buffer, &desc->leading_bytes, 8); ++ offset += 8; ++ ++ memcpy(buffer+offset, data->data, 4084); ++ offset += 4084; ++ ++ memcpy(buffer+offset, &desc->trailing_bytes, 4); ++ ++ } else if (!memcmp(&desc->signature, "zero", 4)) { ++ /* write 'count' sectors of sector */ ++ memset(buffer, 0, VHDX_LOG_SECTOR_SIZE); ++ count = desc->zero_length / VHDX_LOG_SECTOR_SIZE; ++ } ++ ++ file_offset = desc->file_offset; ++ ++ /* count is only > 1 if we are writing zeroes */ ++ for (i = 0; i < count; i++) { ++ ret = bdrv_pwrite_sync(bs->file, file_offset, buffer, ++ VHDX_LOG_SECTOR_SIZE); ++ if (ret < 0) { ++ goto exit; ++ } ++ file_offset += VHDX_LOG_SECTOR_SIZE; ++ } ++ ++exit: ++ qemu_vfree(buffer); ++ return ret; ++} ++ ++/* Flush the entire log (as described by 'logs') to the VHDX image ++ * file, and then set the log to 'empty' status once complete. ++ * ++ * The log entries should be validate prior to flushing */ ++static int vhdx_log_flush(BlockDriverState *bs, BDRVVHDXState *s, ++ VHDXLogSequence *logs) ++{ ++ int ret = 0; ++ int i; ++ uint32_t cnt, sectors_read; ++ uint64_t new_file_size; ++ void *data = NULL; ++ VHDXLogDescEntries *desc_entries = NULL; ++ VHDXLogEntryHeader hdr_tmp = { 0 }; ++ ++ cnt = logs->count; ++ ++ data = qemu_blockalign(bs, VHDX_LOG_SECTOR_SIZE); ++ ++ ret = vhdx_user_visible_write(bs, s); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ /* each iteration represents one log sequence, which may span multiple ++ * sectors */ ++ while (cnt--) { ++ ret = vhdx_log_peek_hdr(bs, &logs->log, &hdr_tmp); ++ if (ret < 0) { ++ goto exit; ++ } ++ /* if the log shows a FlushedFileOffset larger than our current file ++ * size, then that means the file has been truncated / corrupted, and ++ * we must refused to open it / use it */ ++ if (hdr_tmp.flushed_file_offset > bdrv_getlength(bs->file)) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ ret = vhdx_log_read_desc(bs, s, &logs->log, &desc_entries); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ for (i = 0; i < desc_entries->hdr.descriptor_count; i++) { ++ if (!memcmp(&desc_entries->desc[i].signature, "desc", 4)) { ++ /* data sector, so read a sector to flush */ ++ ret = vhdx_log_read_sectors(bs, &logs->log, §ors_read, ++ data, 1, false); ++ if (ret < 0) { ++ goto exit; ++ } ++ if (sectors_read != 1) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ } ++ ++ ret = vhdx_log_flush_desc(bs, &desc_entries->desc[i], data); ++ if (ret < 0) { ++ goto exit; ++ } ++ } ++ if (bdrv_getlength(bs->file) < desc_entries->hdr.last_file_offset) { ++ new_file_size = desc_entries->hdr.last_file_offset; ++ if (new_file_size % (1024*1024)) { ++ /* round up to nearest 1MB boundary */ ++ new_file_size = ((new_file_size >> 20) + 1) << 20; ++ bdrv_truncate(bs->file, new_file_size); ++ } ++ } ++ qemu_vfree(desc_entries); ++ desc_entries = NULL; ++ } ++ ++ bdrv_flush(bs); ++ /* once the log is fully flushed, indicate that we have an empty log ++ * now. This also sets the log guid to 0, to indicate an empty log */ ++ vhdx_log_reset(bs, s); ++ ++exit: ++ qemu_vfree(data); ++ qemu_vfree(desc_entries); ++ return ret; ++} ++ ++static int vhdx_validate_log_entry(BlockDriverState *bs, BDRVVHDXState *s, ++ VHDXLogEntries *log, uint64_t seq, ++ bool *valid, VHDXLogEntryHeader *entry) ++{ ++ int ret = 0; ++ VHDXLogEntryHeader hdr; ++ void *buffer = NULL; ++ uint32_t i, desc_sectors, total_sectors, crc; ++ uint32_t sectors_read = 0; ++ VHDXLogDescEntries *desc_buffer = NULL; ++ ++ *valid = false; ++ ++ ret = vhdx_log_peek_hdr(bs, log, &hdr); ++ if (ret < 0) { ++ goto inc_and_exit; ++ } ++ ++ vhdx_log_entry_hdr_le_import(&hdr); ++ ++ ++ if (vhdx_log_hdr_is_valid(log, &hdr, s) == false) { ++ goto inc_and_exit; ++ } ++ ++ if (seq > 0) { ++ if (hdr.sequence_number != seq + 1) { ++ goto inc_and_exit; ++ } ++ } ++ ++ desc_sectors = vhdx_compute_desc_sectors(hdr.descriptor_count); ++ ++ /* Read desc sectors, and calculate log checksum */ ++ ++ total_sectors = hdr.entry_length / VHDX_LOG_SECTOR_SIZE; ++ ++ ++ /* read_desc() will incrememnt the read idx */ ++ ret = vhdx_log_read_desc(bs, s, log, &desc_buffer); ++ if (ret < 0) { ++ goto free_and_exit; ++ } ++ ++ crc = vhdx_checksum_calc(0xffffffff, (void *)desc_buffer, ++ desc_sectors * VHDX_LOG_SECTOR_SIZE, 4); ++ crc ^= 0xffffffff; ++ ++ buffer = qemu_blockalign(bs, VHDX_LOG_SECTOR_SIZE); ++ if (total_sectors > desc_sectors) { ++ for (i = 0; i < total_sectors - desc_sectors; i++) { ++ sectors_read = 0; ++ ret = vhdx_log_read_sectors(bs, log, §ors_read, buffer, ++ 1, false); ++ if (ret < 0 || sectors_read != 1) { ++ goto free_and_exit; ++ } ++ crc = vhdx_checksum_calc(crc, buffer, VHDX_LOG_SECTOR_SIZE, -1); ++ crc ^= 0xffffffff; ++ } ++ } ++ crc ^= 0xffffffff; ++ if (crc != desc_buffer->hdr.checksum) { ++ goto free_and_exit; ++ } ++ ++ *valid = true; ++ *entry = hdr; ++ goto free_and_exit; ++ ++inc_and_exit: ++ log->read = vhdx_log_inc_idx(log->read, log->length); ++ ++free_and_exit: ++ qemu_vfree(buffer); ++ qemu_vfree(desc_buffer); ++ return ret; ++} ++ ++/* Search through the log circular buffer, and find the valid, active ++ * log sequence, if any exists ++ * */ ++static int vhdx_log_search(BlockDriverState *bs, BDRVVHDXState *s, ++ VHDXLogSequence *logs) ++{ ++ int ret = 0; ++ uint32_t tail; ++ bool seq_valid = false; ++ VHDXLogSequence candidate = { 0 }; ++ VHDXLogEntryHeader hdr = { 0 }; ++ VHDXLogEntries curr_log; ++ ++ memcpy(&curr_log, &s->log, sizeof(VHDXLogEntries)); ++ curr_log.write = curr_log.length; /* assume log is full */ ++ curr_log.read = 0; ++ ++ ++ /* now we will go through the whole log sector by sector, until ++ * we find a valid, active log sequence, or reach the end of the ++ * log buffer */ ++ for (;;) { ++ uint64_t curr_seq = 0; ++ VHDXLogSequence current = { 0 }; ++ ++ tail = curr_log.read; ++ ++ ret = vhdx_validate_log_entry(bs, s, &curr_log, curr_seq, ++ &seq_valid, &hdr); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ if (seq_valid) { ++ current.valid = true; ++ current.log = curr_log; ++ current.log.read = tail; ++ current.log.write = curr_log.read; ++ current.count = 1; ++ current.hdr = hdr; ++ ++ ++ for (;;) { ++ ret = vhdx_validate_log_entry(bs, s, &curr_log, curr_seq, ++ &seq_valid, &hdr); ++ if (ret < 0) { ++ goto exit; ++ } ++ if (seq_valid == false) { ++ break; ++ } ++ current.log.write = curr_log.read; ++ current.count++; ++ ++ curr_seq = hdr.sequence_number; ++ } ++ } ++ ++ if (current.valid) { ++ if (candidate.valid == false || ++ current.hdr.sequence_number > candidate.hdr.sequence_number) { ++ candidate = current; ++ } ++ } ++ ++ if (curr_log.read < tail) { ++ break; ++ } ++ } ++ ++ *logs = candidate; ++ ++ if (candidate.valid) { ++ /* this is the next sequence number, for writes */ ++ s->log.sequence = candidate.hdr.sequence_number + 1; ++ } ++ ++ ++exit: ++ return ret; ++} ++ ++/* Parse the replay log. Per the VHDX spec, if the log is present ++ * it must be replayed prior to opening the file, even read-only. ++ * ++ * If read-only, we must replay the log in RAM (or refuse to open ++ * a dirty VHDX file read-only) */ ++int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed) ++{ ++ int ret = 0; ++ VHDXHeader *hdr; ++ VHDXLogSequence logs = { 0 }; ++ ++ hdr = s->headers[s->curr_header]; ++ ++ *flushed = false; ++ ++ /* s->log.hdr is freed in vhdx_close() */ ++ if (s->log.hdr == NULL) { ++ s->log.hdr = qemu_blockalign(bs, sizeof(VHDXLogEntryHeader)); ++ } ++ ++ s->log.offset = hdr->log_offset; ++ s->log.length = hdr->log_length; ++ ++ if (s->log.offset < VHDX_LOG_MIN_SIZE || ++ s->log.offset % VHDX_LOG_MIN_SIZE) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ /* per spec, only log version of 0 is supported */ ++ if (hdr->log_version != 0) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ /* If either the log guid, or log length is zero, ++ * then a replay log is not present */ ++ if (guid_eq(hdr->log_guid, zero_guid)) { ++ goto exit; ++ } ++ ++ if (hdr->log_length == 0) { ++ goto exit; ++ } ++ ++ if (hdr->log_length % VHDX_LOG_MIN_SIZE) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ ++ /* The log is present, we need to find if and where there is an active ++ * sequence of valid entries present in the log. */ ++ ++ ret = vhdx_log_search(bs, s, &logs); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ if (logs.valid) { ++ /* now flush the log */ ++ ret = vhdx_log_flush(bs, s, &logs); ++ if (ret < 0) { ++ goto exit; ++ } ++ *flushed = true; ++ } ++ ++ ++exit: ++ return ret; ++} ++ ++ +diff --git a/block/vhdx.c b/block/vhdx.c +index 7d697e4..b552dde 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -735,58 +735,22 @@ exit: + return ret; + } + +-/* Parse the replay log. Per the VHDX spec, if the log is present +- * it must be replayed prior to opening the file, even read-only. +- * +- * If read-only, we must replay the log in RAM (or refuse to open +- * a dirty VHDX file read-only */ +-static int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s) +-{ +- int ret = 0; +- int i; +- VHDXHeader *hdr; +- +- hdr = s->headers[s->curr_header]; +- +- /* either the log guid, or log length is zero, +- * then a replay log is present */ +- for (i = 0; i < sizeof(hdr->log_guid.data4); i++) { +- ret |= hdr->log_guid.data4[i]; +- } +- if (hdr->log_guid.data1 == 0 && +- hdr->log_guid.data2 == 0 && +- hdr->log_guid.data3 == 0 && +- ret == 0) { +- goto exit; +- } +- +- /* per spec, only log version of 0 is supported */ +- if (hdr->log_version != 0) { +- ret = -EINVAL; +- goto exit; +- } +- +- if (hdr->log_length == 0) { +- goto exit; +- } +- +- /* We currently do not support images with logs to replay */ +- ret = -ENOTSUP; +- +-exit: +- return ret; +-} +- + + static void vhdx_close(BlockDriverState *bs) + { + BDRVVHDXState *s = bs->opaque; + qemu_vfree(s->headers[0]); ++ s->headers[0] = NULL; + qemu_vfree(s->headers[1]); ++ s->headers[1] = NULL; + qemu_vfree(s->bat); ++ s->bat = NULL; + qemu_vfree(s->parent_entries); ++ s->parent_entries = NULL; + migrate_del_blocker(s->migration_blocker); + error_free(s->migration_blocker); ++ qemu_vfree(s->log.hdr); ++ s->log.hdr = NULL; + } + + static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, +@@ -797,6 +761,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + uint32_t i; + uint64_t signature; + uint32_t data_blocks_cnt, bitmap_blocks_cnt; ++ bool log_flushed = false; + + + s->bat = NULL; +@@ -820,24 +785,25 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + vhdx_guid_generate(&s->session_guid); + + ret = vhdx_parse_header(bs, s); +- if (ret) { ++ if (ret < 0) { + goto fail; + } + +- ret = vhdx_parse_log(bs, s); +- if (ret) { ++ ret = vhdx_parse_log(bs, s, &log_flushed); ++ if (ret < 0) { + goto fail; + } + + ret = vhdx_open_region_tables(bs, s); +- if (ret) { ++ if (ret < 0) { + goto fail; + } + + ret = vhdx_parse_metadata(bs, s); +- if (ret) { ++ if (ret < 0) { + goto fail; + } ++ + s->block_size = s->params.block_size; + + /* the VHDX spec dictates that virtual_disk_size is always a multiple of +@@ -897,10 +863,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + + return 0; + fail: +- qemu_vfree(s->headers[0]); +- qemu_vfree(s->headers[1]); +- qemu_vfree(s->bat); +- qemu_vfree(s->parent_entries); ++ vhdx_close(bs); + return ret; + } + +diff --git a/block/vhdx.h b/block/vhdx.h +index 81785e5..b150ad1 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -326,7 +326,11 @@ typedef struct VHDXMetadataEntries { + typedef struct VHDXLogEntries { + uint64_t offset; + uint64_t length; +- uint32_t head; ++ uint32_t write; ++ uint32_t read; ++ VHDXLogEntryHeader *hdr; ++ void *desc_buffer; ++ uint64_t sequence; + uint32_t tail; + } VHDXLogEntries; + +@@ -383,6 +387,7 @@ uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size, + + bool vhdx_checksum_is_valid(uint8_t *buf, size_t size, int crc_offset); + ++int vhdx_parse_log(BlockDriverState *bs, BDRVVHDXState *s, bool *flushed); + + static inline void leguid_to_cpus(MSGUID *guid) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-log-support-struct-and-defines.patch b/SOURCES/kvm-block-vhdx-log-support-struct-and-defines.patch new file mode 100644 index 0000000..a26128d --- /dev/null +++ b/SOURCES/kvm-block-vhdx-log-support-struct-and-defines.patch @@ -0,0 +1,169 @@ +From a60094cdc27c9913ad93fc42383161ed40015e44 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:53 +0100 +Subject: [PATCH 10/25] block: vhdx - log support struct and defines + +RH-Author: Jeffrey Cody +Message-id: <2dae7f05c8661b506f3bbaa60cd8b3ad35d7a7e4.1384975172.git.jcody@redhat.com> +Patchwork-id: 55803 +O-Subject: [RHEL7 qemu-kvm PATCH 10/26] block: vhdx - log support struct and defines +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds some magic number defines, and internal structure definitions +for VHDX log replay support. The struct VHDXLogEntries does not reflect +an on-disk data structure, and thus does not need to be packed. + +Some minor code style fixes are applied as well. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 625565d27e8d7c7f7238ccd118a2cd49c1c52963) +--- + block/vhdx.h | 46 ++++++++++++++++++++++++++++++---------------- + 1 file changed, 30 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.h | 46 ++++++++++++++++++++++++++++++---------------- + 1 files changed, 30 insertions(+), 16 deletions(-) + +diff --git a/block/vhdx.h b/block/vhdx.h +index 57375ff..76ce4aa 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -30,12 +30,12 @@ + * 0.........64KB...........128KB........192KB..........256KB................1MB + */ + +-#define VHDX_HEADER_BLOCK_SIZE (64*1024) ++#define VHDX_HEADER_BLOCK_SIZE (64 * 1024) + + #define VHDX_FILE_ID_OFFSET 0 +-#define VHDX_HEADER1_OFFSET (VHDX_HEADER_BLOCK_SIZE*1) +-#define VHDX_HEADER2_OFFSET (VHDX_HEADER_BLOCK_SIZE*2) +-#define VHDX_REGION_TABLE_OFFSET (VHDX_HEADER_BLOCK_SIZE*3) ++#define VHDX_HEADER1_OFFSET (VHDX_HEADER_BLOCK_SIZE * 1) ++#define VHDX_HEADER2_OFFSET (VHDX_HEADER_BLOCK_SIZE * 2) ++#define VHDX_REGION_TABLE_OFFSET (VHDX_HEADER_BLOCK_SIZE * 3) + + + /* +@@ -77,10 +77,10 @@ typedef struct QEMU_PACKED MSGUID { + #define guid_eq(a, b) \ + (memcmp(&(a), &(b), sizeof(MSGUID)) == 0) + +-#define VHDX_HEADER_SIZE (4*1024) /* although the vhdx_header struct in disk +- is only 582 bytes, for purposes of crc +- the header is the first 4KB of the 64KB +- block */ ++#define VHDX_HEADER_SIZE (4 * 1024) /* although the vhdx_header struct in disk ++ is only 582 bytes, for purposes of crc ++ the header is the first 4KB of the 64KB ++ block */ + + /* The full header is 4KB, although the actual header data is much smaller. + * But for the checksum calculation, it is over the entire 4KB structure, +@@ -92,7 +92,7 @@ typedef struct QEMU_PACKED VHDXHeader { + VHDX file has 2 of these headers, + and only the header with the highest + sequence number is valid */ +- MSGUID file_write_guid; /* 128 bit unique identifier. Must be ++ MSGUID file_write_guid; /* 128 bit unique identifier. Must be + updated to new, unique value before + the first modification is made to + file */ +@@ -151,7 +151,10 @@ typedef struct QEMU_PACKED VHDXRegionTableEntry { + + + /* ---- LOG ENTRY STRUCTURES ---- */ ++#define VHDX_LOG_MIN_SIZE (1024 * 1024) ++#define VHDX_LOG_SECTOR_SIZE 4096 + #define VHDX_LOG_HDR_SIZE 64 ++#define VHDX_LOG_SIGNATURE 0x65676f6c + typedef struct QEMU_PACKED VHDXLogEntryHeader { + uint32_t signature; /* "loge" in ASCII */ + uint32_t checksum; /* CRC-32C hash of the 64KB table */ +@@ -174,7 +177,8 @@ typedef struct QEMU_PACKED VHDXLogEntryHeader { + } VHDXLogEntryHeader; + + #define VHDX_LOG_DESC_SIZE 32 +- ++#define VHDX_LOG_DESC_SIGNATURE 0x63736564 ++#define VHDX_LOG_ZERO_SIGNATURE 0x6f72657a + typedef struct QEMU_PACKED VHDXLogDescriptor { + uint32_t signature; /* "zero" or "desc" in ASCII */ + union { +@@ -194,6 +198,7 @@ typedef struct QEMU_PACKED VHDXLogDescriptor { + vhdx_log_entry_header */ + } VHDXLogDescriptor; + ++#define VHDX_LOG_DATA_SIGNATURE 0x61746164 + typedef struct QEMU_PACKED VHDXLogDataSector { + uint32_t data_signature; /* "data" in ASCII */ + uint32_t sequence_high; /* 4 MSB of 8 byte sequence_number */ +@@ -219,12 +224,12 @@ typedef struct QEMU_PACKED VHDXLogDataSector { + #define SB_BLOCK_PRESENT 6 + + /* per the spec */ +-#define VHDX_MAX_SECTORS_PER_BLOCK (1<<23) ++#define VHDX_MAX_SECTORS_PER_BLOCK (1 << 23) + + /* upper 44 bits are the file offset in 1MB units lower 3 bits are the state + other bits are reserved */ + #define VHDX_BAT_STATE_BIT_MASK 0x07 +-#define VHDX_BAT_FILE_OFF_BITS (64-44) ++#define VHDX_BAT_FILE_OFF_BITS (64 - 44) + typedef uint64_t VHDXBatEntry; + + /* ---- METADATA REGION STRUCTURES ---- */ +@@ -252,8 +257,8 @@ typedef struct QEMU_PACKED VHDXMetadataTableEntry { + metadata region */ + /* note: if length = 0, so is offset */ + uint32_t length; /* length of metadata. <= 1MB. */ +- uint32_t data_bits; /* least-significant 3 bits are flags, the +- rest are reserved (see above) */ ++ uint32_t data_bits; /* least-significant 3 bits are flags, ++ the rest are reserved (see above) */ + uint32_t reserved2; + } VHDXMetadataTableEntry; + +@@ -265,8 +270,8 @@ typedef struct QEMU_PACKED VHDXMetadataTableEntry { + typedef struct QEMU_PACKED VHDXFileParameters { + uint32_t block_size; /* size of each payload block, always + power of 2, <= 256MB and >= 1MB. */ +- uint32_t data_bits; /* least-significant 2 bits are flags, the rest +- are reserved (see above) */ ++ uint32_t data_bits; /* least-significant 2 bits are flags, ++ the rest are reserved (see above) */ + } VHDXFileParameters; + + typedef struct QEMU_PACKED VHDXVirtualDiskSize { +@@ -318,6 +323,13 @@ typedef struct VHDXMetadataEntries { + uint16_t present; + } VHDXMetadataEntries; + ++typedef struct VHDXLogEntries { ++ uint64_t offset; ++ uint64_t length; ++ uint32_t head; ++ uint32_t tail; ++} VHDXLogEntries; ++ + typedef struct BDRVVHDXState { + CoMutex lock; + +@@ -351,6 +363,8 @@ typedef struct BDRVVHDXState { + + MSGUID session_guid; + ++ VHDXLogEntries log; ++ + VHDXParentLocatorHeader parent_header; + VHDXParentLocatorEntry *parent_entries; + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-minor-comments-and-typo-correction.patch b/SOURCES/kvm-block-vhdx-minor-comments-and-typo-correction.patch new file mode 100644 index 0000000..38ba616 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-minor-comments-and-typo-correction.patch @@ -0,0 +1,91 @@ +From 59e64d4b4ebda3ec50e4f962f44fb31d5ff5fa86 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:50 +0100 +Subject: [PATCH 07/25] block: vhdx - minor comments and typo correction. + +RH-Author: Jeffrey Cody +Message-id: <132355fbfb44520bc218abfdd3e67f9a18201cf6.1384975172.git.jcody@redhat.com> +Patchwork-id: 55800 +O-Subject: [RHEL7 qemu-kvm PATCH 07/26] block: vhdx - minor comments and typo correction. +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Just a couple of minor comments to help note where allocated +buffers are freed, and a typo fix. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 6e9d290bf62406098ca3d7bf3796463681ed3c39) +--- + block/vhdx.c | 6 ++++-- + block/vhdx.h | 6 +++--- + 2 files changed, 7 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 6 ++++-- + block/vhdx.h | 6 +++--- + 2 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 41c3065..23be4e3 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -6,9 +6,9 @@ + * Authors: + * Jeff Cody + * +- * This is based on the "VHDX Format Specification v0.95", published 4/12/2012 ++ * This is based on the "VHDX Format Specification v1.00", published 8/25/2012 + * by Microsoft: +- * https://www.microsoft.com/en-us/download/details.aspx?id=29681 ++ * https://www.microsoft.com/en-us/download/details.aspx?id=34750 + * + * This work is licensed under the terms of the GNU LGPL, version 2 or later. + * See the COPYING.LIB file in the top-level directory. +@@ -264,6 +264,7 @@ static int vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s) + uint64_t h2_seq = 0; + uint8_t *buffer; + ++ /* header1 & header2 are freed in vhdx_close() */ + header1 = qemu_blockalign(bs, sizeof(VHDXHeader)); + header2 = qemu_blockalign(bs, sizeof(VHDXHeader)); + +@@ -790,6 +791,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ /* s->bat is freed in vhdx_close() */ + s->bat = qemu_blockalign(bs, s->bat_rt.length); + + ret = bdrv_pread(bs->file, s->bat_offset, s->bat, s->bat_rt.length); +diff --git a/block/vhdx.h b/block/vhdx.h +index c3b64c6..1dbb320 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -6,9 +6,9 @@ + * Authors: + * Jeff Cody + * +- * This is based on the "VHDX Format Specification v0.95", published 4/12/2012 ++ * This is based on the "VHDX Format Specification v1.00", published 8/25/2012 + * by Microsoft: +- * https://www.microsoft.com/en-us/download/details.aspx?id=29681 ++ * https://www.microsoft.com/en-us/download/details.aspx?id=34750 + * + * This work is licensed under the terms of the GNU LGPL, version 2 or later. + * See the COPYING.LIB file in the top-level directory. +@@ -116,7 +116,7 @@ typedef struct QEMU_PACKED VHDXHeader { + valid. */ + uint16_t log_version; /* version of the log format. Mustn't be + zero, unless log_guid is also zero */ +- uint16_t version; /* version of th evhdx file. Currently, ++ uint16_t version; /* version of the vhdx file. Currently, + only supported version is "1" */ + uint32_t log_length; /* length of the log. Must be multiple + of 1MB */ +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-move-more-endian-translations-to-vhdx-end.patch b/SOURCES/kvm-block-vhdx-move-more-endian-translations-to-vhdx-end.patch new file mode 100644 index 0000000..13c4d5c --- /dev/null +++ b/SOURCES/kvm-block-vhdx-move-more-endian-translations-to-vhdx-end.patch @@ -0,0 +1,191 @@ +From 71ef58e93b4a9aafa838117bdaeebc72c2b826c3 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:02 +0100 +Subject: [PATCH 19/25] block: vhdx - move more endian translations to vhdx-endian.c + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55812 +O-Subject: [RHEL7 qemu-kvm PATCH 19/26] block: vhdx - move more endian translations to vhdx-endian.c +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +In preparation for vhdx_create(), move more endian translation +functions out to vhdx-endian.c. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c325ee1de84dde5b2a90c30e1b788defa31c5d53) +--- + block/vhdx-endian.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.c | 20 +++----------- + block/vhdx.h | 9 ++++++- + 3 files changed, 87 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx-endian.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ + block/vhdx.c | 20 +++----------- + block/vhdx.h | 9 +++++- + 3 files changed, 87 insertions(+), 17 deletions(-) + +diff --git a/block/vhdx-endian.c b/block/vhdx-endian.c +index 3e93e63..fe879ed 100644 +--- a/block/vhdx-endian.c ++++ b/block/vhdx-endian.c +@@ -139,3 +139,78 @@ void vhdx_log_entry_hdr_le_export(VHDXLogEntryHeader *hdr) + } + + ++/* Region table entries */ ++void vhdx_region_header_le_import(VHDXRegionTableHeader *hdr) ++{ ++ assert(hdr != NULL); ++ ++ le32_to_cpus(&hdr->signature); ++ le32_to_cpus(&hdr->checksum); ++ le32_to_cpus(&hdr->entry_count); ++} ++ ++void vhdx_region_header_le_export(VHDXRegionTableHeader *hdr) ++{ ++ assert(hdr != NULL); ++ ++ cpu_to_le32s(&hdr->signature); ++ cpu_to_le32s(&hdr->checksum); ++ cpu_to_le32s(&hdr->entry_count); ++} ++ ++void vhdx_region_entry_le_import(VHDXRegionTableEntry *e) ++{ ++ assert(e != NULL); ++ ++ leguid_to_cpus(&e->guid); ++ le64_to_cpus(&e->file_offset); ++ le32_to_cpus(&e->length); ++ le32_to_cpus(&e->data_bits); ++} ++ ++void vhdx_region_entry_le_export(VHDXRegionTableEntry *e) ++{ ++ assert(e != NULL); ++ ++ cpu_to_leguids(&e->guid); ++ cpu_to_le64s(&e->file_offset); ++ cpu_to_le32s(&e->length); ++ cpu_to_le32s(&e->data_bits); ++} ++ ++ ++/* Metadata headers & table */ ++void vhdx_metadata_header_le_import(VHDXMetadataTableHeader *hdr) ++{ ++ assert(hdr != NULL); ++ ++ le64_to_cpus(&hdr->signature); ++ le16_to_cpus(&hdr->entry_count); ++} ++ ++void vhdx_metadata_header_le_export(VHDXMetadataTableHeader *hdr) ++{ ++ assert(hdr != NULL); ++ ++ cpu_to_le64s(&hdr->signature); ++ cpu_to_le16s(&hdr->entry_count); ++} ++ ++void vhdx_metadata_entry_le_import(VHDXMetadataTableEntry *e) ++{ ++ assert(e != NULL); ++ ++ leguid_to_cpus(&e->item_id); ++ le32_to_cpus(&e->offset); ++ le32_to_cpus(&e->length); ++ le32_to_cpus(&e->data_bits); ++} ++void vhdx_metadata_entry_le_export(VHDXMetadataTableEntry *e) ++{ ++ assert(e != NULL); ++ ++ cpu_to_leguids(&e->item_id); ++ cpu_to_le32s(&e->offset); ++ cpu_to_le32s(&e->length); ++ cpu_to_le32s(&e->data_bits); ++} +diff --git a/block/vhdx.c b/block/vhdx.c +index 97099aa..9d51176 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -472,10 +472,7 @@ static int vhdx_open_region_tables(BlockDriverState *bs, BDRVVHDXState *s) + goto fail; + } + memcpy(&s->rt, buffer, sizeof(s->rt)); +- le32_to_cpus(&s->rt.signature); +- le32_to_cpus(&s->rt.checksum); +- le32_to_cpus(&s->rt.entry_count); +- le32_to_cpus(&s->rt.reserved); ++ vhdx_region_header_le_import(&s->rt); + offset += sizeof(s->rt); + + if (!vhdx_checksum_is_valid(buffer, VHDX_HEADER_BLOCK_SIZE, 4) || +@@ -494,10 +491,7 @@ static int vhdx_open_region_tables(BlockDriverState *bs, BDRVVHDXState *s) + memcpy(&rt_entry, buffer + offset, sizeof(rt_entry)); + offset += sizeof(rt_entry); + +- leguid_to_cpus(&rt_entry.guid); +- le64_to_cpus(&rt_entry.file_offset); +- le32_to_cpus(&rt_entry.length); +- le32_to_cpus(&rt_entry.data_bits); ++ vhdx_region_entry_le_import(&rt_entry); + + /* check for region overlap between these entries, and any + * other memory regions in the file */ +@@ -587,9 +581,7 @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s) + memcpy(&s->metadata_hdr, buffer, sizeof(s->metadata_hdr)); + offset += sizeof(s->metadata_hdr); + +- le64_to_cpus(&s->metadata_hdr.signature); +- le16_to_cpus(&s->metadata_hdr.reserved); +- le16_to_cpus(&s->metadata_hdr.entry_count); ++ vhdx_metadata_header_le_import(&s->metadata_hdr); + + if (memcmp(&s->metadata_hdr.signature, "metadata", 8)) { + ret = -EINVAL; +@@ -608,11 +600,7 @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s) + memcpy(&md_entry, buffer + offset, sizeof(md_entry)); + offset += sizeof(md_entry); + +- leguid_to_cpus(&md_entry.item_id); +- le32_to_cpus(&md_entry.offset); +- le32_to_cpus(&md_entry.length); +- le32_to_cpus(&md_entry.data_bits); +- le32_to_cpus(&md_entry.reserved2); ++ vhdx_metadata_entry_le_import(&md_entry); + + if (guid_eq(md_entry.item_id, file_param_guid)) { + if (s->metadata_entries.present & META_FILE_PARAMETER_PRESENT) { +diff --git a/block/vhdx.h b/block/vhdx.h +index 7deb7fd..0acad37 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -421,7 +421,14 @@ void vhdx_log_desc_le_export(VHDXLogDescriptor *d); + void vhdx_log_data_le_export(VHDXLogDataSector *d); + void vhdx_log_entry_hdr_le_import(VHDXLogEntryHeader *hdr); + void vhdx_log_entry_hdr_le_export(VHDXLogEntryHeader *hdr); +- ++void vhdx_region_header_le_import(VHDXRegionTableHeader *hdr); ++void vhdx_region_header_le_export(VHDXRegionTableHeader *hdr); ++void vhdx_region_entry_le_import(VHDXRegionTableEntry *e); ++void vhdx_region_entry_le_export(VHDXRegionTableEntry *e); ++void vhdx_metadata_header_le_import(VHDXMetadataTableHeader *hdr); ++void vhdx_metadata_header_le_export(VHDXMetadataTableHeader *hdr); ++void vhdx_metadata_entry_le_import(VHDXMetadataTableEntry *e); ++void vhdx_metadata_entry_le_export(VHDXMetadataTableEntry *e); + int vhdx_user_visible_write(BlockDriverState *bs, BDRVVHDXState *s); + + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-qemu-iotest-log-replay-of-data-sector.patch b/SOURCES/kvm-block-vhdx-qemu-iotest-log-replay-of-data-sector.patch new file mode 100644 index 0000000..21a3fcb --- /dev/null +++ b/SOURCES/kvm-block-vhdx-qemu-iotest-log-replay-of-data-sector.patch @@ -0,0 +1,150 @@ +From 5f1f1921575005ea286f1eb408f62064728df972 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:08 +0100 +Subject: [PATCH 25/25] block: vhdx qemu-iotest - log replay of data sector + +RH-Author: Jeffrey Cody +Message-id: <1a13302bddec68d7ee3e2f3be3a457c4bc61eea4.1384975172.git.jcody@redhat.com> +Patchwork-id: 55818 +O-Subject: [RHEL7 qemu-kvm PATCH 25/26] block: vhdx qemu-iotest - log replay of data sector +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This tests the replay of a data sector in a VHDX image file. + +The image file is a 10G dynamic image, with 4MB block size. The +image was created with qemu-img, and the log left unplayed by +modification of the vhdx image format driver. + +It was verified under both QEMU and Hyper-V that the image file, +post log replay, matched. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e78835b722eb26f5a56370166e99b69e9751ea2a) + +Conflicts: + tests/qemu-iotests/group + +RHEL7 Notes: Conflict due to test number leapfrogging tests that have + not yet been backported into RHEL7. + +Signed-off-by: Jeff Cody +--- + tests/qemu-iotests/070 | 67 +++++++++++++++++++++ + tests/qemu-iotests/070.out | 8 +++ + tests/qemu-iotests/group | 1 + + 4 files changed, 76 insertions(+) + create mode 100755 tests/qemu-iotests/070 + create mode 100644 tests/qemu-iotests/070.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/070 | 67 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/070.out | 8 +++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 76 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/070 + create mode 100644 tests/qemu-iotests/070.out + +diff --git a/tests/qemu-iotests/070 b/tests/qemu-iotests/070 +new file mode 100755 +index 0000000..41bf100 +--- /dev/null ++++ b/tests/qemu-iotests/070 +@@ -0,0 +1,67 @@ ++#!/bin/bash ++# ++# Test VHDX log replay from an image with a journal that needs to be ++# replayed ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=jcody@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt vhdx ++_supported_proto generic ++_supported_os Linux ++ ++# With the log replayed, the pattern 0xa5 extends to 0xc025000 ++# If the log was not replayed, it would only extend to 0xc000000 ++# ++# This image is a 10G dynamic image, with 4M block size, and 1 unplayed ++# data sector in the log ++# ++# This image was created with qemu-img, however it was verified using ++# Hyper-V to properly replay the logs and give the same post-replay ++# image as qemu. ++_use_sample_img iotest-dirtylog-10G-4M.vhdx.bz2 ++ ++echo ++echo "=== Verify open image read-only fails, due to dirty log ===" ++$QEMU_IO -r -c "read -pP 0xa5 0 18M" "$TEST_IMG" 2>&1 | grep -o "Permission denied" ++ ++echo "=== Verify open image replays log ===" ++$QEMU_IO -c "read -pP 0xa5 0 18M" "$TEST_IMG" | _filter_qemu_io ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/070.out b/tests/qemu-iotests/070.out +new file mode 100644 +index 0000000..9db8ff2 +--- /dev/null ++++ b/tests/qemu-iotests/070.out +@@ -0,0 +1,8 @@ ++QA output created by 070 ++ ++=== Verify open image read-only fails, due to dirty log === ++Permission denied ++=== Verify open image replays log === ++read 18874368/18874368 bytes at offset 0 ++18 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 1a182ed..0867b0f 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -68,3 +68,4 @@ + 065 rw auto + 067 rw auto + 068 rw auto ++070 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-remove-BAT-file-offset-bit-shifting.patch b/SOURCES/kvm-block-vhdx-remove-BAT-file-offset-bit-shifting.patch new file mode 100644 index 0000000..f087f4a --- /dev/null +++ b/SOURCES/kvm-block-vhdx-remove-BAT-file-offset-bit-shifting.patch @@ -0,0 +1,84 @@ +From 989d971046a36afa7acb67855f565603297ad2e8 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:01 +0100 +Subject: [PATCH 18/25] block: vhdx - remove BAT file offset bit shifting + +RH-Author: Jeffrey Cody +Message-id: <348f6a1952aa68e9a5cfefb56a7e86f5ff1d01c9.1384975172.git.jcody@redhat.com> +Patchwork-id: 55811 +O-Subject: [RHEL7 qemu-kvm PATCH 18/26] block: vhdx - remove BAT file offset bit shifting +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Bit shifting can be fun, but in this case it was unnecessary. The +upper 44 bits of the 64-bit BAT entry is specifies the File Offset, +so we shifted the bits to get access to the value. + +However, per the spec the value is in MB. So we dutifully shifted back +to the left by 20 bits, to convert to a true uint64_t file offset. + +This replaces those steps with just a bit mask, to get rid of the lower +20 bits instead. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0b7da092b40734538631c3ad461c1753a87535fc) +--- + block/vhdx.c | 6 ++---- + block/vhdx.h | 1 - + 2 files changed, 2 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 6 ++---- + block/vhdx.h | 1 - + 2 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index baf8970..97099aa 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -985,7 +985,7 @@ static void vhdx_block_translate(BDRVVHDXState *s, int64_t sector_num, + + sinfo->bytes_avail = sinfo->sectors_avail << s->logical_sector_size_bits; + +- sinfo->file_offset = s->bat[sinfo->bat_idx] >> VHDX_BAT_FILE_OFF_BITS; ++ sinfo->file_offset = s->bat[sinfo->bat_idx] & VHDX_BAT_FILE_OFF_MASK; + + sinfo->block_offset = block_offset << s->logical_sector_size_bits; + +@@ -999,7 +999,6 @@ static void vhdx_block_translate(BDRVVHDXState *s, int64_t sector_num, + * in the block, and add in the payload data block offset + * in the file, in bytes, to get the final read address */ + +- sinfo->file_offset <<= 20; /* now in bytes, rather than 1MB units */ + sinfo->file_offset += sinfo->block_offset; + } + +@@ -1110,8 +1109,7 @@ static void vhdx_update_bat_table_entry(BlockDriverState *bs, BDRVVHDXState *s, + { + /* The BAT entry is a uint64, with 44 bits for the file offset in units of + * 1MB, and 3 bits for the block state. */ +- s->bat[sinfo->bat_idx] = ((sinfo->file_offset>>20) << +- VHDX_BAT_FILE_OFF_BITS); ++ s->bat[sinfo->bat_idx] = sinfo->file_offset; + + s->bat[sinfo->bat_idx] |= state & VHDX_BAT_STATE_BIT_MASK; + +diff --git a/block/vhdx.h b/block/vhdx.h +index a85c5c8..7deb7fd 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -229,7 +229,6 @@ typedef struct QEMU_PACKED VHDXLogDataSector { + /* upper 44 bits are the file offset in 1MB units lower 3 bits are the state + other bits are reserved */ + #define VHDX_BAT_STATE_BIT_MASK 0x07 +-#define VHDX_BAT_FILE_OFF_BITS (64 - 44) + #define VHDX_BAT_FILE_OFF_MASK 0xFFFFFFFFFFF00000 /* upper 44 bits */ + typedef uint64_t VHDXBatEntry; + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-update-_make_test_img-to-filter-out-vhdx-.patch b/SOURCES/kvm-block-vhdx-update-_make_test_img-to-filter-out-vhdx-.patch new file mode 100644 index 0000000..ccf4958 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-update-_make_test_img-to-filter-out-vhdx-.patch @@ -0,0 +1,50 @@ +From 98ce0a262f9b19a452e202e01ca84584079d22f2 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:06 +0100 +Subject: [PATCH 23/25] block: vhdx - update _make_test_img() to filter out vhdx options + +RH-Author: Jeffrey Cody +Message-id: <8632a15d525b341bea089780916ffab61f44a34f.1384975172.git.jcody@redhat.com> +Patchwork-id: 55816 +O-Subject: [RHEL7 qemu-kvm PATCH 23/26] block: vhdx - update _make_test_img() to filter out vhdx options +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +The non-global option output is suppresed in _make_test_img() for +output verification in the 0?? tests. This adds suppression for +the vhdx-unique options as well. This allows check -vhdx to run +successfully. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 228b234dd73383408743d749d29a6c37e9d99981) +--- + tests/qemu-iotests/common.rc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/common.rc | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index d24de2c..7f62457 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -157,7 +157,10 @@ _make_test_img() + -e "s# zeroed_grain=\\(on\\|off\\)##g" \ + -e "s# subformat='[^']*'##g" \ + -e "s# adapter_type='[^']*'##g" \ +- -e "s# lazy_refcounts=\\(on\\|off\\)##g" ++ -e "s# lazy_refcounts=\\(on\\|off\\)##g" \ ++ -e "s# block_size=[0-9]\\+##g" \ ++ -e "s# block_state_zero=\\(on\\|off\\)##g" \ ++ -e "s# log_size=[0-9]\\+##g" + + # Start an NBD server on the image file, which is what we'll be talking to + if [ $IMGPROTO = "nbd" ]; then +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-update-log-guid-in-header-and-first-write.patch b/SOURCES/kvm-block-vhdx-update-log-guid-in-header-and-first-write.patch new file mode 100644 index 0000000..f67ee73 --- /dev/null +++ b/SOURCES/kvm-block-vhdx-update-log-guid-in-header-and-first-write.patch @@ -0,0 +1,146 @@ +From c310637234eeafe32d0eb5626f91e12b5a2399b9 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:43:55 +0100 +Subject: [PATCH 12/25] block: vhdx - update log guid in header, and first write tracker + +RH-Author: Jeffrey Cody +Message-id: <313d521b2aab6f6657de5b4fbb9cc10e58d9d5c4.1384975172.git.jcody@redhat.com> +Patchwork-id: 55806 +O-Subject: [RHEL7 qemu-kvm PATCH 12/26] block: vhdx - update log guid in header, and first write tracker +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Allow tracking of first file write in the VHDX image, as well as +the ability to update the GUID in the header. This is in preparation +for log support. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c3906c5e8281b37a526c706596af8575d6ac00d3) +--- + block/vhdx.c | 30 ++++++++++++++++++++++++------ + block/vhdx.h | 6 ++++++ + 2 files changed, 30 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 30 ++++++++++++++++++++++++------ + block/vhdx.h | 6 ++++++ + 2 files changed, 30 insertions(+), 6 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 2efece1..49219df 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -230,7 +230,7 @@ static int vhdx_probe(const uint8_t *buf, int buf_size, const char *filename) + * - non-current header is updated with largest sequence number + */ + static int vhdx_update_header(BlockDriverState *bs, BDRVVHDXState *s, +- bool generate_data_write_guid) ++ bool generate_data_write_guid, MSGUID *log_guid) + { + int ret = 0; + int hdr_idx = 0; +@@ -262,6 +262,11 @@ static int vhdx_update_header(BlockDriverState *bs, BDRVVHDXState *s, + vhdx_guid_generate(&inactive_header->data_write_guid); + } + ++ /* update the log guid if present */ ++ if (log_guid) { ++ inactive_header->log_guid = *log_guid; ++ } ++ + /* the header checksum is not over just the packed size of VHDXHeader, + * but rather over the entire 'reserved' range for the header, which is + * 4KB (VHDX_HEADER_SIZE). */ +@@ -294,16 +299,16 @@ exit: + * The VHDX spec calls for header updates to be performed twice, so that both + * the current and non-current header have valid info + */ +-static int vhdx_update_headers(BlockDriverState *bs, BDRVVHDXState *s, +- bool generate_data_write_guid) ++int vhdx_update_headers(BlockDriverState *bs, BDRVVHDXState *s, ++ bool generate_data_write_guid, MSGUID *log_guid) + { + int ret; + +- ret = vhdx_update_header(bs, s, generate_data_write_guid); ++ ret = vhdx_update_header(bs, s, generate_data_write_guid, log_guid); + if (ret < 0) { + return ret; + } +- ret = vhdx_update_header(bs, s, generate_data_write_guid); ++ ret = vhdx_update_header(bs, s, generate_data_write_guid, log_guid); + return ret; + } + +@@ -784,6 +789,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + + + s->bat = NULL; ++ s->first_visible_write = true; + + qemu_co_mutex_init(&s->lock); + +@@ -864,7 +870,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (flags & BDRV_O_RDWR) { +- ret = vhdx_update_headers(bs, s, false); ++ ret = vhdx_update_headers(bs, s, false, NULL); + if (ret < 0) { + goto fail; + } +@@ -1022,6 +1028,18 @@ exit: + + + ++/* Per the spec, on the first write of guest-visible data to the file the ++ * data write guid must be updated in the header */ ++int vhdx_user_visible_write(BlockDriverState *bs, BDRVVHDXState *s) ++{ ++ int ret = 0; ++ if (s->first_visible_write) { ++ s->first_visible_write = false; ++ ret = vhdx_update_headers(bs, s, true, NULL); ++ } ++ return ret; ++} ++ + static coroutine_fn int vhdx_co_writev(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) + { +diff --git a/block/vhdx.h b/block/vhdx.h +index 55975a2..81785e5 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -361,6 +361,7 @@ typedef struct BDRVVHDXState { + VHDXBatEntry *bat; + uint64_t bat_offset; + ++ bool first_visible_write; + MSGUID session_guid; + + VHDXLogEntries log; +@@ -373,6 +374,9 @@ typedef struct BDRVVHDXState { + + void vhdx_guid_generate(MSGUID *guid); + ++int vhdx_update_headers(BlockDriverState *bs, BDRVVHDXState *s, bool rw, ++ MSGUID *log_guid); ++ + uint32_t vhdx_update_checksum(uint8_t *buf, size_t size, int crc_offset); + uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size, + int crc_offset); +@@ -402,4 +406,6 @@ void vhdx_log_data_le_export(VHDXLogDataSector *d); + void vhdx_log_entry_hdr_le_import(VHDXLogEntryHeader *hdr); + void vhdx_log_entry_hdr_le_export(VHDXLogEntryHeader *hdr); + ++int vhdx_user_visible_write(BlockDriverState *bs, BDRVVHDXState *s); ++ + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vhdx-write-support.patch b/SOURCES/kvm-block-vhdx-write-support.patch new file mode 100644 index 0000000..c1c7daf --- /dev/null +++ b/SOURCES/kvm-block-vhdx-write-support.patch @@ -0,0 +1,301 @@ +From f02d8f3eb38c3ed03742cbb981823a1917b3c5b2 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 20 Nov 2013 19:44:00 +0100 +Subject: [PATCH 17/25] block: vhdx write support + +RH-Author: Jeffrey Cody +Message-id: +Patchwork-id: 55810 +O-Subject: [RHEL7 qemu-kvm PATCH 17/26] block: vhdx write support +Bugzilla: 879234 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +This adds support for writing to VHDX image files, using coroutines. +Writes into the BAT table goes through the VHDX log. Currently, BAT +table writes occur when expanding a dynamic VHDX file, and allocating a +new BAT entry. + +Signed-off-by: Jeff Cody +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d92aa8833c051b53d3bf2614ff885df0037f10bb) +--- + block/vhdx.c | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + block/vhdx.h | 2 +- + 2 files changed, 209 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 212 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + block/vhdx.h | 2 +- + 2 files changed, 209 insertions(+), 5 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index e36c60e..baf8970 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -914,7 +914,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + if (payblocks--) { + /* payload bat entries */ + if ((s->bat[i] & VHDX_BAT_STATE_BIT_MASK) == +- PAYLOAD_BLOCK_FULL_PRESENT) { ++ PAYLOAD_BLOCK_FULLY_PRESENT) { + ret = vhdx_region_check(s, s->bat[i] & VHDX_BAT_FILE_OFF_MASK, + s->block_size); + if (ret < 0) { +@@ -935,7 +935,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags, + } + } + +- /* TODO: differencing files, write */ ++ /* TODO: differencing files */ + + /* Disable migration when VHDX images are used */ + error_set(&s->migration_blocker, +@@ -1052,7 +1052,7 @@ static coroutine_fn int vhdx_co_readv(BlockDriverState *bs, int64_t sector_num, + /* return zero */ + qemu_iovec_memset(&hd_qiov, 0, 0, sinfo.bytes_avail); + break; +- case PAYLOAD_BLOCK_FULL_PRESENT: ++ case PAYLOAD_BLOCK_FULLY_PRESENT: + qemu_co_mutex_unlock(&s->lock); + ret = bdrv_co_readv(bs->file, + sinfo.file_offset >> BDRV_SECTOR_BITS, +@@ -1082,7 +1082,43 @@ exit: + return ret; + } + ++/* ++ * Allocate a new payload block at the end of the file. ++ * ++ * Allocation will happen at 1MB alignment inside the file ++ * ++ * Returns the file offset start of the new payload block ++ */ ++static int vhdx_allocate_block(BlockDriverState *bs, BDRVVHDXState *s, ++ uint64_t *new_offset) ++{ ++ *new_offset = bdrv_getlength(bs->file); ++ ++ /* per the spec, the address for a block is in units of 1MB */ ++ *new_offset = ROUND_UP(*new_offset, 1024 * 1024); ++ ++ return bdrv_truncate(bs->file, *new_offset + s->block_size); ++} ++ ++/* ++ * Update the BAT table entry with the new file offset, and the new entry ++ * state */ ++static void vhdx_update_bat_table_entry(BlockDriverState *bs, BDRVVHDXState *s, ++ VHDXSectorInfo *sinfo, ++ uint64_t *bat_entry_le, ++ uint64_t *bat_offset, int state) ++{ ++ /* The BAT entry is a uint64, with 44 bits for the file offset in units of ++ * 1MB, and 3 bits for the block state. */ ++ s->bat[sinfo->bat_idx] = ((sinfo->file_offset>>20) << ++ VHDX_BAT_FILE_OFF_BITS); + ++ s->bat[sinfo->bat_idx] |= state & VHDX_BAT_STATE_BIT_MASK; ++ ++ *bat_entry_le = cpu_to_le64(s->bat[sinfo->bat_idx]); ++ *bat_offset = s->bat_offset + sinfo->bat_idx * sizeof(VHDXBatEntry); ++ ++} + + /* Per the spec, on the first write of guest-visible data to the file the + * data write guid must be updated in the header */ +@@ -1099,7 +1135,175 @@ int vhdx_user_visible_write(BlockDriverState *bs, BDRVVHDXState *s) + static coroutine_fn int vhdx_co_writev(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) + { +- return -ENOTSUP; ++ int ret = -ENOTSUP; ++ BDRVVHDXState *s = bs->opaque; ++ VHDXSectorInfo sinfo; ++ uint64_t bytes_done = 0; ++ uint64_t bat_entry = 0; ++ uint64_t bat_entry_offset = 0; ++ QEMUIOVector hd_qiov; ++ struct iovec iov1 = { 0 }; ++ struct iovec iov2 = { 0 }; ++ int sectors_to_write; ++ int bat_state; ++ uint64_t bat_prior_offset = 0; ++ bool bat_update = false; ++ ++ qemu_iovec_init(&hd_qiov, qiov->niov); ++ ++ qemu_co_mutex_lock(&s->lock); ++ ++ ret = vhdx_user_visible_write(bs, s); ++ if (ret < 0) { ++ goto exit; ++ } ++ ++ while (nb_sectors > 0) { ++ bool use_zero_buffers = false; ++ bat_update = false; ++ if (s->params.data_bits & VHDX_PARAMS_HAS_PARENT) { ++ /* not supported yet */ ++ ret = -ENOTSUP; ++ goto exit; ++ } else { ++ vhdx_block_translate(s, sector_num, nb_sectors, &sinfo); ++ sectors_to_write = sinfo.sectors_avail; ++ ++ qemu_iovec_reset(&hd_qiov); ++ /* check the payload block state */ ++ bat_state = s->bat[sinfo.bat_idx] & VHDX_BAT_STATE_BIT_MASK; ++ switch (bat_state) { ++ case PAYLOAD_BLOCK_ZERO: ++ /* in this case, we need to preserve zero writes for ++ * data that is not part of this write, so we must pad ++ * the rest of the buffer to zeroes */ ++ ++ /* if we are on a posix system with ftruncate() that extends ++ * a file, then it is zero-filled for us. On Win32, the raw ++ * layer uses SetFilePointer and SetFileEnd, which does not ++ * zero fill AFAIK */ ++ ++ /* Queue another write of zero buffers if the underlying file ++ * does not zero-fill on file extension */ ++ ++ if (bdrv_has_zero_init(bs->file) == 0) { ++ use_zero_buffers = true; ++ ++ /* zero fill the front, if any */ ++ if (sinfo.block_offset) { ++ iov1.iov_len = sinfo.block_offset; ++ iov1.iov_base = qemu_blockalign(bs, iov1.iov_len); ++ memset(iov1.iov_base, 0, iov1.iov_len); ++ qemu_iovec_concat_iov(&hd_qiov, &iov1, 1, 0, ++ sinfo.block_offset); ++ sectors_to_write += iov1.iov_len >> BDRV_SECTOR_BITS; ++ } ++ ++ /* our actual data */ ++ qemu_iovec_concat(&hd_qiov, qiov, bytes_done, ++ sinfo.bytes_avail); ++ ++ /* zero fill the back, if any */ ++ if ((sinfo.bytes_avail - sinfo.block_offset) < ++ s->block_size) { ++ iov2.iov_len = s->block_size - ++ (sinfo.bytes_avail + sinfo.block_offset); ++ iov2.iov_base = qemu_blockalign(bs, iov2.iov_len); ++ memset(iov2.iov_base, 0, iov2.iov_len); ++ qemu_iovec_concat_iov(&hd_qiov, &iov2, 1, 0, ++ sinfo.block_offset); ++ sectors_to_write += iov2.iov_len >> BDRV_SECTOR_BITS; ++ } ++ } ++ ++ /* fall through */ ++ case PAYLOAD_BLOCK_NOT_PRESENT: /* fall through */ ++ case PAYLOAD_BLOCK_UNMAPPED: /* fall through */ ++ case PAYLOAD_BLOCK_UNDEFINED: /* fall through */ ++ bat_prior_offset = sinfo.file_offset; ++ ret = vhdx_allocate_block(bs, s, &sinfo.file_offset); ++ if (ret < 0) { ++ goto exit; ++ } ++ /* once we support differencing files, this may also be ++ * partially present */ ++ /* update block state to the newly specified state */ ++ vhdx_update_bat_table_entry(bs, s, &sinfo, &bat_entry, ++ &bat_entry_offset, ++ PAYLOAD_BLOCK_FULLY_PRESENT); ++ bat_update = true; ++ /* since we just allocated a block, file_offset is the ++ * beginning of the payload block. It needs to be the ++ * write address, which includes the offset into the block */ ++ if (!use_zero_buffers) { ++ sinfo.file_offset += sinfo.block_offset; ++ } ++ /* fall through */ ++ case PAYLOAD_BLOCK_FULLY_PRESENT: ++ /* if the file offset address is in the header zone, ++ * there is a problem */ ++ if (sinfo.file_offset < (1024 * 1024)) { ++ ret = -EFAULT; ++ goto error_bat_restore; ++ } ++ ++ if (!use_zero_buffers) { ++ qemu_iovec_concat(&hd_qiov, qiov, bytes_done, ++ sinfo.bytes_avail); ++ } ++ /* block exists, so we can just overwrite it */ ++ qemu_co_mutex_unlock(&s->lock); ++ ret = bdrv_co_writev(bs->file, ++ sinfo.file_offset >> BDRV_SECTOR_BITS, ++ sectors_to_write, &hd_qiov); ++ qemu_co_mutex_lock(&s->lock); ++ if (ret < 0) { ++ goto error_bat_restore; ++ } ++ break; ++ case PAYLOAD_BLOCK_PARTIALLY_PRESENT: ++ /* we don't yet support difference files, fall through ++ * to error */ ++ default: ++ ret = -EIO; ++ goto exit; ++ break; ++ } ++ ++ if (bat_update) { ++ /* this will update the BAT entry into the log journal, and ++ * then flush the log journal out to disk */ ++ ret = vhdx_log_write_and_flush(bs, s, &bat_entry, ++ sizeof(VHDXBatEntry), ++ bat_entry_offset); ++ if (ret < 0) { ++ goto exit; ++ } ++ } ++ ++ nb_sectors -= sinfo.sectors_avail; ++ sector_num += sinfo.sectors_avail; ++ bytes_done += sinfo.bytes_avail; ++ ++ } ++ } ++ ++ goto exit; ++ ++error_bat_restore: ++ if (bat_update) { ++ /* keep metadata in sync, and restore the bat entry state ++ * if error. */ ++ sinfo.file_offset = bat_prior_offset; ++ vhdx_update_bat_table_entry(bs, s, &sinfo, &bat_entry, ++ &bat_entry_offset, bat_state); ++ } ++exit: ++ qemu_vfree(iov1.iov_base); ++ qemu_vfree(iov2.iov_base); ++ qemu_co_mutex_unlock(&s->lock); ++ qemu_iovec_destroy(&hd_qiov); ++ return ret; + } + + +diff --git a/block/vhdx.h b/block/vhdx.h +index 4bb83de..a85c5c8 100644 +--- a/block/vhdx.h ++++ b/block/vhdx.h +@@ -217,7 +217,7 @@ typedef struct QEMU_PACKED VHDXLogDataSector { + #define PAYLOAD_BLOCK_UNDEFINED 1 + #define PAYLOAD_BLOCK_ZERO 2 + #define PAYLOAD_BLOCK_UNMAPPED 5 +-#define PAYLOAD_BLOCK_FULL_PRESENT 6 ++#define PAYLOAD_BLOCK_FULLY_PRESENT 6 + #define PAYLOAD_BLOCK_PARTIALLY_PRESENT 7 + + #define SB_BLOCK_NOT_PRESENT 0 +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vmdk-add-basic-.bdrv_check-support.patch b/SOURCES/kvm-block-vmdk-add-basic-.bdrv_check-support.patch new file mode 100644 index 0000000..33b6b6c --- /dev/null +++ b/SOURCES/kvm-block-vmdk-add-basic-.bdrv_check-support.patch @@ -0,0 +1,103 @@ +From d78a26ac572e339d115c3485d3a19ead0e9d4dcf Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:02 -0600 +Subject: [CHANGE 08/31] block/vmdk: add basic .bdrv_check support +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-9-git-send-email-famz@redhat.com> +Patchwork-id: 62681 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 08/30] block/vmdk: add basic .bdrv_check support +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Peter Lieven + +this adds a basic vmdk corruption check. it should detect severe +table corruptions and file truncation. + +Signed-off-by: Peter Lieven +Reviewed-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f43aa8e18ad83508c2786403e7230a584d357c8e) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 7ea3aef..eda2962 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1944,6 +1944,53 @@ static ImageInfo *vmdk_get_extent_info(VmdkExtent *extent) + return info; + } + ++static int vmdk_check(BlockDriverState *bs, BdrvCheckResult *result, ++ BdrvCheckMode fix) ++{ ++ BDRVVmdkState *s = bs->opaque; ++ VmdkExtent *extent = NULL; ++ int64_t sector_num = 0; ++ int64_t total_sectors = bdrv_getlength(bs) / BDRV_SECTOR_SIZE; ++ int ret; ++ uint64_t cluster_offset; ++ ++ if (fix) { ++ return -ENOTSUP; ++ } ++ ++ for (;;) { ++ if (sector_num >= total_sectors) { ++ return 0; ++ } ++ extent = find_extent(s, sector_num, extent); ++ if (!extent) { ++ fprintf(stderr, ++ "ERROR: could not find extent for sector %" PRId64 "\n", ++ sector_num); ++ break; ++ } ++ ret = get_cluster_offset(bs, extent, NULL, ++ sector_num << BDRV_SECTOR_BITS, ++ 0, &cluster_offset); ++ if (ret == VMDK_ERROR) { ++ fprintf(stderr, ++ "ERROR: could not get cluster_offset for sector %" ++ PRId64 "\n", sector_num); ++ break; ++ } ++ if (ret == VMDK_OK && cluster_offset >= bdrv_getlength(extent->file)) { ++ fprintf(stderr, ++ "ERROR: cluster offset for sector %" ++ PRId64 " points after EOF\n", sector_num); ++ break; ++ } ++ sector_num += extent->cluster_sectors; ++ } ++ ++ result->corruptions++; ++ return 0; ++} ++ + static ImageInfoSpecific *vmdk_get_specific_info(BlockDriverState *bs) + { + int i; +@@ -2017,6 +2064,7 @@ static BlockDriver bdrv_vmdk = { + .instance_size = sizeof(BDRVVmdkState), + .bdrv_probe = vmdk_probe, + .bdrv_open = vmdk_open, ++ .bdrv_check = vmdk_check, + .bdrv_reopen_prepare = vmdk_reopen_prepare, + .bdrv_read = vmdk_co_read, + .bdrv_write = vmdk_co_write, +-- +2.1.0 + diff --git a/SOURCES/kvm-block-vmdk-do-not-report-file-offset-for-compressed-.patch b/SOURCES/kvm-block-vmdk-do-not-report-file-offset-for-compressed-.patch new file mode 100644 index 0000000..91c47ec --- /dev/null +++ b/SOURCES/kvm-block-vmdk-do-not-report-file-offset-for-compressed-.patch @@ -0,0 +1,48 @@ +From a03967321235d8ddf2cdf1db749a5a7109ab7451 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:09 -0600 +Subject: [CHANGE 15/31] block/vmdk: do not report file offset for compressed + extents +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-16-git-send-email-famz@redhat.com> +Patchwork-id: 62688 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 15/30] block/vmdk: do not report file offset for compressed extents +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3eba13ec25341ce473591ff338eab3196890a4eb) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index c7b930f..e78a184 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1183,7 +1183,7 @@ static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + break; + case VMDK_OK: + ret = BDRV_BLOCK_DATA; +- if (extent->file == bs->file) { ++ if (extent->file == bs->file && !extent->compressed) { + ret |= BDRV_BLOCK_OFFSET_VALID | offset; + } + +-- +2.1.0 + diff --git a/SOURCES/kvm-block-vmdk-fixed-sizeof-error.patch b/SOURCES/kvm-block-vmdk-fixed-sizeof-error.patch new file mode 100644 index 0000000..34c517c --- /dev/null +++ b/SOURCES/kvm-block-vmdk-fixed-sizeof-error.patch @@ -0,0 +1,50 @@ +From 37bf9db781d9507501649ee04d23b0dab103a126 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:23 +0100 +Subject: [PATCH 10/18] block: vmdk - fixed sizeof() error + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-11-git-send-email-famz@redhat.com> +Patchwork-id: 69176 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 10/18] block: vmdk - fixed sizeof() error +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +From: Jeff Cody + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +The size compared should be PATH_MAX, rather than sizeof(char *). + +Reported-by: Paolo Bonzini +Signed-off-by: Jeff Cody +Reviewed-by: Eric Blake +Reviewed-by: Max Reitz +Message-id: 46d873261433f4527e88885582f96942d61758d6.1423592487.git.jcody@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a7be17bee855f26c317e99aa6582e1dc9b8ebd71) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 45ecf02..32b3d4c 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -838,8 +838,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + } + + extent_path = g_malloc0(PATH_MAX); +- path_combine(extent_path, sizeof(extent_path), +- desc_file_path, fname); ++ path_combine(extent_path, PATH_MAX, desc_file_path, fname); + extent_file = NULL; + ret = bdrv_file_open(&extent_file, extent_path, NULL, bs->open_flags, + errp); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-vmdk-make-ret-variable-usage-clear.patch b/SOURCES/kvm-block-vmdk-make-ret-variable-usage-clear.patch new file mode 100644 index 0000000..afc092c --- /dev/null +++ b/SOURCES/kvm-block-vmdk-make-ret-variable-usage-clear.patch @@ -0,0 +1,86 @@ +From 931d28d0c1c1015df16fbffb8422895497193a78 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:21 +0100 +Subject: [PATCH 08/18] block: vmdk - make ret variable usage clear + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-9-git-send-email-famz@redhat.com> +Patchwork-id: 69174 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 08/18] block: vmdk - make ret variable usage clear +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +From: Jeff Cody + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Keep the variable 'ret' something that is returned by the function it is +defined in. For the return value of 'sscanf', use a more meaningful +variable name. + +Reviewed-by: Stefan Hajnoczi +Reviewed-by: John Snow +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 395a22fae064df64d987d703cf70ae0f57306be8) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 1247ea4..3351782 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -788,6 +788,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + const char *desc_file_path, Error **errp) + { + int ret; ++ int matches; + char access[11]; + char type[11]; + char fname[512]; +@@ -799,6 +800,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + BDRVVmdkState *s = bs->opaque; + VmdkExtent *extent; + ++ + while (*p) { + /* parse extent line in one of below formats: + * +@@ -808,23 +810,23 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + * RW [size in sectors] VMFSSPARSE "file-name.vmdk" + */ + flat_offset = -1; +- ret = sscanf(p, "%10s %" SCNd64 " %10s \"%511[^\n\r\"]\" %" SCNd64, +- access, §ors, type, fname, &flat_offset); +- if (ret < 4 || strcmp(access, "RW")) { ++ matches = sscanf(p, "%10s %" SCNd64 " %10s \"%511[^\n\r\"]\" %" SCNd64, ++ access, §ors, type, fname, &flat_offset); ++ if (matches < 4 || strcmp(access, "RW")) { + goto next_line; + } else if (!strcmp(type, "FLAT")) { +- if (ret != 5 || flat_offset < 0) { ++ if (matches != 5 || flat_offset < 0) { + error_setg(errp, "Invalid extent lines: \n%s", p); + return -EINVAL; + } + } else if (!strcmp(type, "VMFS")) { +- if (ret == 4) { ++ if (matches == 4) { + flat_offset = 0; + } else { + error_setg(errp, "Invalid extent lines:\n%s", p); + return -EINVAL; + } +- } else if (ret != 4) { ++ } else if (matches != 4) { + error_setg(errp, "Invalid extent lines:\n%s", p); + return -EINVAL; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-vmdk-move-string-allocations-from-stack-to-the.patch b/SOURCES/kvm-block-vmdk-move-string-allocations-from-stack-to-the.patch new file mode 100644 index 0000000..e1d5c95 --- /dev/null +++ b/SOURCES/kvm-block-vmdk-move-string-allocations-from-stack-to-the.patch @@ -0,0 +1,146 @@ +From a767838caf6c761d714a9466d008f8dddaf1a162 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:22 +0100 +Subject: [PATCH 09/18] block: vmdk - move string allocations from stack to the + heap + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-10-git-send-email-famz@redhat.com> +Patchwork-id: 69175 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 09/18] block: vmdk - move string allocations from stack to the heap +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +From: Jeff Cody + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Functions 'vmdk_parse_extents' and 'vmdk_create' allocate several +PATH_MAX sized arrays on the stack. Make these dynamically allocated. + +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit fe2065629a9c256f836770ca54449ae77b22d188) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 40 ++++++++++++++++++++++++---------------- + 1 file changed, 24 insertions(+), 16 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 3351782..45ecf02 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -795,12 +795,11 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + const char *p = desc; + int64_t sectors = 0; + int64_t flat_offset; +- char extent_path[PATH_MAX]; ++ char *extent_path; + BlockDriverState *extent_file; + BDRVVmdkState *s = bs->opaque; + VmdkExtent *extent; + +- + while (*p) { + /* parse extent line in one of below formats: + * +@@ -838,10 +837,13 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + goto next_line; + } + ++ extent_path = g_malloc0(PATH_MAX); + path_combine(extent_path, sizeof(extent_path), + desc_file_path, fname); ++ extent_file = NULL; + ret = bdrv_file_open(&extent_file, extent_path, NULL, bs->open_flags, + errp); ++ g_free(extent_path); + if (ret) { + return ret; + } +@@ -1790,10 +1792,15 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + int ret = 0; + bool flat, split, compress; + GString *ext_desc_lines; +- char path[PATH_MAX], prefix[PATH_MAX], postfix[PATH_MAX]; ++ char *path = g_malloc0(PATH_MAX); ++ char *prefix = g_malloc0(PATH_MAX); ++ char *postfix = g_malloc0(PATH_MAX); ++ char *desc_line = g_malloc0(BUF_SIZE); ++ char *ext_filename = g_malloc0(PATH_MAX); ++ char *desc_filename = g_malloc0(PATH_MAX); + const int64_t split_size = 0x80000000; /* VMDK has constant split size */ + const char *desc_extent_line; +- char parent_desc_line[BUF_SIZE] = ""; ++ char *parent_desc_line = g_malloc0(BUF_SIZE); + uint32_t parent_cid = 0xffffffff; + uint32_t number_heads = 16; + bool zeroed_grain = false; +@@ -1902,33 +1909,27 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + } + parent_cid = vmdk_read_cid(bs, 0); + bdrv_unref(bs); +- snprintf(parent_desc_line, sizeof(parent_desc_line), ++ snprintf(parent_desc_line, BUF_SIZE, + "parentFileNameHint=\"%s\"", backing_file); + } + + /* Create extents */ + filesize = total_size; + while (filesize > 0) { +- char desc_line[BUF_SIZE]; +- char ext_filename[PATH_MAX]; +- char desc_filename[PATH_MAX]; + int64_t size = filesize; + + if (split && size > split_size) { + size = split_size; + } + if (split) { +- snprintf(desc_filename, sizeof(desc_filename), "%s-%c%03d%s", ++ snprintf(desc_filename, PATH_MAX, "%s-%c%03d%s", + prefix, flat ? 'f' : 's', ++idx, postfix); + } else if (flat) { +- snprintf(desc_filename, sizeof(desc_filename), "%s-flat%s", +- prefix, postfix); ++ snprintf(desc_filename, PATH_MAX, "%s-flat%s", prefix, postfix); + } else { +- snprintf(desc_filename, sizeof(desc_filename), "%s%s", +- prefix, postfix); ++ snprintf(desc_filename, PATH_MAX, "%s%s", prefix, postfix); + } +- snprintf(ext_filename, sizeof(ext_filename), "%s%s", +- path, desc_filename); ++ snprintf(ext_filename, PATH_MAX, "%s%s", path, desc_filename); + + if (vmdk_create_extent(ext_filename, size, + flat, compress, zeroed_grain, errp)) { +@@ -1938,7 +1939,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + filesize -= size; + + /* Format description line */ +- snprintf(desc_line, sizeof(desc_line), ++ snprintf(desc_line, BUF_SIZE, + desc_extent_line, size / BDRV_SECTOR_SIZE, desc_filename); + g_string_append(ext_desc_lines, desc_line); + } +@@ -1988,6 +1989,13 @@ exit: + bdrv_unref(new_bs); + } + g_free(desc); ++ g_free(path); ++ g_free(prefix); ++ g_free(postfix); ++ g_free(desc_line); ++ g_free(ext_filename); ++ g_free(desc_filename); ++ g_free(parent_desc_line); + g_string_free(ext_desc_lines, true); + return ret; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-vpc-prevent-overflow-if-max_table_entries-0x40.patch b/SOURCES/kvm-block-vpc-prevent-overflow-if-max_table_entries-0x40.patch new file mode 100644 index 0000000..411598a --- /dev/null +++ b/SOURCES/kvm-block-vpc-prevent-overflow-if-max_table_entries-0x40.patch @@ -0,0 +1,94 @@ +From aab4d4ef24bf36c65e4d33cf817903118061ad85 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 29 Jul 2015 16:59:54 +0200 +Subject: [PATCH 03/13] block: vpc - prevent overflow if max_table_entries >= + 0x40000000 + +Message-id: <6ed83012cdee022f7015ed8fc7bc93abc3a8ef76.1438188988.git.jcody@redhat.com> +Patchwork-id: 67199 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/3] block: vpc - prevent overflow if max_table_entries >= 0x40000000 +Bugzilla: 1217349 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +When we allocate the pagetable based on max_table_entries, we multiply +the max table entry value by 4 to accomodate a table of 32-bit integers. +However, max_table_entries is a uint32_t, and the VPC driver accepts +ranges for that entry over 0x40000000. So during this allocation: + +s->pagetable = qemu_try_blockalign(bs->file, s->max_table_entries * 4); + +The size arg overflows, allocating significantly less memory than +expected. + +Since qemu_try_blockalign() size argument is size_t, cast the +multiplication correctly to prevent overflow. + +The value of "max_table_entries * 4" is used elsewhere in the code as +well, so store the correct value for use in all those cases. + +We also check the Max Tables Entries value, to make sure that it is < +SIZE_MAX / 4, so we know the pagetable size will fit in size_t. + +Cc: qemu-stable@nongnu.org +Reported-by: Richard W.M. Jones +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit b15deac79530d818092cb49a8021bcce83d71b5b) +Signed-off-by: Miroslav Rezanina +--- + block/vpc.c | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +diff --git a/block/vpc.c b/block/vpc.c +index 6fdce40..1ded510 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -167,6 +167,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + uint8_t buf[HEADER_SIZE]; + uint32_t checksum; + uint64_t computed_size; ++ uint64_t pagetable_size; + int disk_type = VHD_DYNAMIC; + int ret; + +@@ -260,7 +261,17 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- s->pagetable = qemu_try_blockalign(bs->file, s->max_table_entries * 4); ++ if (s->max_table_entries > SIZE_MAX / 4 || ++ s->max_table_entries > (int) INT_MAX / 4) { ++ error_setg(errp, "Max Table Entries too large (%" PRId32 ")", ++ s->max_table_entries); ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ pagetable_size = (uint64_t) s->max_table_entries * 4; ++ ++ s->pagetable = qemu_try_blockalign(bs->file, pagetable_size); + if (s->pagetable == NULL) { + ret = -ENOMEM; + goto fail; +@@ -268,14 +279,13 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + + s->bat_offset = be64_to_cpu(dyndisk_header->table_offset); + +- ret = bdrv_pread(bs->file, s->bat_offset, s->pagetable, +- s->max_table_entries * 4); ++ ret = bdrv_pread(bs->file, s->bat_offset, s->pagetable, pagetable_size); + if (ret < 0) { + goto fail; + } + + s->free_data_block_offset = +- (s->bat_offset + (s->max_table_entries * 4) + 511) & ~511; ++ ROUND_UP(s->bat_offset + pagetable_size, 512); + + for (i = 0; i < s->max_table_entries; i++) { + be32_to_cpus(&s->pagetable[i]); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-block-vpc-use-QEMU_PACKED-for-on-disk-structures.patch b/SOURCES/kvm-block-vpc-use-QEMU_PACKED-for-on-disk-structures.patch new file mode 100644 index 0000000..fd1de52 --- /dev/null +++ b/SOURCES/kvm-block-vpc-use-QEMU_PACKED-for-on-disk-structures.patch @@ -0,0 +1,144 @@ +From 18fbf10e53408ce0a74abb32490bacf077713e9a Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:49 +0200 +Subject: [PATCH 11/20] block: vpc - use QEMU_PACKED for on-disk structures + +Message-id: <924b119681bb117e6551215f16be3f38e80c1179.1410897407.git.jcody@redhat.com> +Patchwork-id: 61215 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 10/15] block: vpc - use QEMU_PACKED for on-disk structures +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +The VHD footer and header structs (vhd_footer and vhd_dyndisk_header) +are on-disk structures for the image format, and as such should be +packed. + +Go ahead and make these typedefs as well, with the preferred QEMU +naming convention, so that the packed attribute is used consistently +with the struct. + +Signed-off-by: Jeff Cody +Reviewed-by: Richard Henderson +Signed-off-by: Kevin Wolf +(cherry picked from commit e54835c06d1f4896941c1505a86532aa1403ebe8) + +Signed-off-by: Miroslav Rezanina +--- + block/vpc.c | 28 ++++++++++++++-------------- + 1 files changed, 14 insertions(+), 14 deletions(-) + +diff --git a/block/vpc.c b/block/vpc.c +index 2f3d4ac..ab74eb9 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -48,7 +48,7 @@ enum vhd_type { + #define VHD_MAX_SECTORS (65535LL * 255 * 255) + + // always big-endian +-struct vhd_footer { ++typedef struct vhd_footer { + char creator[8]; // "conectix" + uint32_t features; + uint32_t version; +@@ -81,9 +81,9 @@ struct vhd_footer { + uint8_t uuid[16]; + + uint8_t in_saved_state; +-}; ++} QEMU_PACKED VHDFooter; + +-struct vhd_dyndisk_header { ++typedef struct vhd_dyndisk_header { + char magic[8]; // "cxsparse" + + // Offset of next header structure, 0xFFFFFFFF if none +@@ -113,7 +113,7 @@ struct vhd_dyndisk_header { + uint32_t reserved; + uint64_t data_offset; + } parent_locator[8]; +-}; ++} QEMU_PACKED VHDDynDiskHeader; + + typedef struct BDRVVPCState { + CoMutex lock; +@@ -162,8 +162,8 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + { + BDRVVPCState *s = bs->opaque; + int i; +- struct vhd_footer* footer; +- struct vhd_dyndisk_header* dyndisk_header; ++ VHDFooter *footer; ++ VHDDynDiskHeader *dyndisk_header; + uint8_t buf[HEADER_SIZE]; + uint32_t checksum; + uint64_t computed_size; +@@ -175,7 +175,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- footer = (struct vhd_footer*) s->footer_buf; ++ footer = (VHDFooter *) s->footer_buf; + if (strncmp(footer->creator, "conectix", 8)) { + int64_t offset = bdrv_getlength(bs->file); + if (offset < 0) { +@@ -228,7 +228,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- dyndisk_header = (struct vhd_dyndisk_header *) buf; ++ dyndisk_header = (VHDDynDiskHeader *) buf; + + if (strncmp(dyndisk_header->magic, "cxsparse", 8)) { + ret = -EINVAL; +@@ -484,7 +484,7 @@ static int vpc_read(BlockDriverState *bs, int64_t sector_num, + int ret; + int64_t offset; + int64_t sectors, sectors_per_block; +- struct vhd_footer *footer = (struct vhd_footer *) s->footer_buf; ++ VHDFooter *footer = (VHDFooter *) s->footer_buf; + + if (cpu_to_be32(footer->type) == VHD_FIXED) { + return bdrv_read(bs->file, sector_num, buf, nb_sectors); +@@ -533,7 +533,7 @@ static int vpc_write(BlockDriverState *bs, int64_t sector_num, + int64_t offset; + int64_t sectors, sectors_per_block; + int ret; +- struct vhd_footer *footer = (struct vhd_footer *) s->footer_buf; ++ VHDFooter *footer = (VHDFooter *) s->footer_buf; + + if (cpu_to_be32(footer->type) == VHD_FIXED) { + return bdrv_write(bs->file, sector_num, buf, nb_sectors); +@@ -635,8 +635,8 @@ static int calculate_geometry(int64_t total_sectors, uint16_t* cyls, + + static int create_dynamic_disk(int fd, uint8_t *buf, int64_t total_sectors) + { +- struct vhd_dyndisk_header* dyndisk_header = +- (struct vhd_dyndisk_header*) buf; ++ VHDDynDiskHeader *dyndisk_header = ++ (VHDDynDiskHeader *) buf; + size_t block_size, num_bat_entries; + int i; + int ret = -EIO; +@@ -726,7 +726,7 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { + uint8_t buf[1024]; +- struct vhd_footer *footer = (struct vhd_footer *) buf; ++ VHDFooter *footer = (VHDFooter *) buf; + QEMUOptionParameter *disk_type_param; + int fd, i; + uint16_t cyls = 0; +@@ -829,7 +829,7 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + static int vpc_has_zero_init(BlockDriverState *bs) + { + BDRVVPCState *s = bs->opaque; +- struct vhd_footer *footer = (struct vhd_footer *) s->footer_buf; ++ VHDFooter *footer = (VHDFooter *) s->footer_buf; + + if (cpu_to_be32(footer->type) == VHD_FIXED) { + return bdrv_has_zero_init(bs->file); +-- +1.7.1 + diff --git a/SOURCES/kvm-block-vpc-use-block-layer-ops-in-vpc_create-instead-.patch b/SOURCES/kvm-block-vpc-use-block-layer-ops-in-vpc_create-instead-.patch new file mode 100644 index 0000000..45063a5 --- /dev/null +++ b/SOURCES/kvm-block-vpc-use-block-layer-ops-in-vpc_create-instead-.patch @@ -0,0 +1,220 @@ +From 4df7179eae48f59406dbef4fc0fb0185a09e8289 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:53 +0200 +Subject: [PATCH 15/20] block: vpc - use block layer ops in vpc_create, instead of posix calls + +Message-id: +Patchwork-id: 61219 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 14/15] block: vpc - use block layer ops in vpc_create, instead of posix calls +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Use the block layer to create, and write to, the image file in the VPC +.bdrv_create() operation. + +This has a couple of benefits: Images can now be created over protocols, +and hacks such as NOCOW are not needed in the image format driver, and +the underlying file protocol appropriate for the host OS can be relied +upon. + +Reviewed-by: Max Reitz +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit fef6070eff233400015cede968b0afe46c80bb0f) + +Conflicts: + block/vpc.c + +RHEL7 Notes: Conflict due to not having the 'nocow' commit + backported, as well as still using QEMUOptionParameter. + BDRV_O_PROTOCOL is also not downstream, and bdrv_open() + arguments are different. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vpc.c | 85 +++++++++++++++++++++++++++++++--------------------------- + 1 files changed, 45 insertions(+), 40 deletions(-) + +diff --git a/block/vpc.c b/block/vpc.c +index ab74eb9..849501a 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -633,39 +633,41 @@ static int calculate_geometry(int64_t total_sectors, uint16_t* cyls, + return 0; + } + +-static int create_dynamic_disk(int fd, uint8_t *buf, int64_t total_sectors) ++static int create_dynamic_disk(BlockDriverState *bs, uint8_t *buf, ++ int64_t total_sectors) + { + VHDDynDiskHeader *dyndisk_header = + (VHDDynDiskHeader *) buf; + size_t block_size, num_bat_entries; + int i; +- int ret = -EIO; ++ int ret; ++ int64_t offset = 0; + + // Write the footer (twice: at the beginning and at the end) + block_size = 0x200000; + num_bat_entries = (total_sectors + block_size / 512) / (block_size / 512); + +- if (write(fd, buf, HEADER_SIZE) != HEADER_SIZE) { ++ ret = bdrv_pwrite_sync(bs, offset, buf, HEADER_SIZE); ++ if (ret) { + goto fail; + } + +- if (lseek(fd, 1536 + ((num_bat_entries * 4 + 511) & ~511), SEEK_SET) < 0) { +- goto fail; +- } +- if (write(fd, buf, HEADER_SIZE) != HEADER_SIZE) { ++ offset = 1536 + ((num_bat_entries * 4 + 511) & ~511); ++ ret = bdrv_pwrite_sync(bs, offset, buf, HEADER_SIZE); ++ if (ret < 0) { + goto fail; + } + + // Write the initial BAT +- if (lseek(fd, 3 * 512, SEEK_SET) < 0) { +- goto fail; +- } ++ offset = 3 * 512; + + memset(buf, 0xFF, 512); + for (i = 0; i < (num_bat_entries * 4 + 511) / 512; i++) { +- if (write(fd, buf, 512) != 512) { ++ ret = bdrv_pwrite_sync(bs, offset, buf, 512); ++ if (ret < 0) { + goto fail; + } ++ offset += 512; + } + + // Prepare the Dynamic Disk Header +@@ -686,39 +688,35 @@ static int create_dynamic_disk(int fd, uint8_t *buf, int64_t total_sectors) + dyndisk_header->checksum = be32_to_cpu(vpc_checksum(buf, 1024)); + + // Write the header +- if (lseek(fd, 512, SEEK_SET) < 0) { +- goto fail; +- } ++ offset = 512; + +- if (write(fd, buf, 1024) != 1024) { ++ ret = bdrv_pwrite_sync(bs, offset, buf, 1024); ++ if (ret < 0) { + goto fail; + } +- ret = 0; + + fail: + return ret; + } + +-static int create_fixed_disk(int fd, uint8_t *buf, int64_t total_size) ++static int create_fixed_disk(BlockDriverState *bs, uint8_t *buf, ++ int64_t total_size) + { +- int ret = -EIO; ++ int ret; + + /* Add footer to total size */ +- total_size += 512; +- if (ftruncate(fd, total_size) != 0) { +- ret = -errno; +- goto fail; +- } +- if (lseek(fd, -512, SEEK_END) < 0) { +- goto fail; +- } +- if (write(fd, buf, HEADER_SIZE) != HEADER_SIZE) { +- goto fail; ++ total_size += HEADER_SIZE; ++ ++ ret = bdrv_truncate(bs, total_size); ++ if (ret < 0) { ++ return ret; + } + +- ret = 0; ++ ret = bdrv_pwrite_sync(bs, total_size - HEADER_SIZE, buf, HEADER_SIZE); ++ if (ret < 0) { ++ return ret; ++ } + +- fail: + return ret; + } + +@@ -728,7 +726,7 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + uint8_t buf[1024]; + VHDFooter *footer = (VHDFooter *) buf; + QEMUOptionParameter *disk_type_param; +- int fd, i; ++ int i; + uint16_t cyls = 0; + uint8_t heads = 0; + uint8_t secs_per_cyl = 0; +@@ -736,6 +734,8 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + int64_t total_size; + int disk_type; + int ret = -EIO; ++ Error *local_err = NULL; ++ BlockDriverState *bs = NULL; + + /* Read out options */ + total_size = get_option_parameter(options, BLOCK_OPT_SIZE)->value.n; +@@ -753,10 +753,15 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + disk_type = VHD_DYNAMIC; + } + +- /* Create the file */ +- fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); +- if (fd < 0) { +- return -EIO; ++ ret = bdrv_create_file(filename, options, &local_err); ++ if (ret < 0) { ++ error_propagate(errp, local_err); ++ goto out; ++ } ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); ++ if (ret < 0) { ++ error_propagate(errp, local_err); ++ goto out; + } + + /* +@@ -770,7 +775,7 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + &secs_per_cyl)) + { + ret = -EFBIG; +- goto fail; ++ goto out; + } + } + +@@ -816,13 +821,13 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + footer->checksum = be32_to_cpu(vpc_checksum(buf, HEADER_SIZE)); + + if (disk_type == VHD_DYNAMIC) { +- ret = create_dynamic_disk(fd, buf, total_sectors); ++ ret = create_dynamic_disk(bs, buf, total_sectors); + } else { +- ret = create_fixed_disk(fd, buf, total_size); ++ ret = create_fixed_disk(bs, buf, total_size); + } + +- fail: +- qemu_close(fd); ++out: ++ bdrv_unref(bs); + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-block-write-Handle-COR-dependency-after-I-O-throttli.patch b/SOURCES/kvm-block-write-Handle-COR-dependency-after-I-O-throttli.patch new file mode 100644 index 0000000..fa609c2 --- /dev/null +++ b/SOURCES/kvm-block-write-Handle-COR-dependency-after-I-O-throttli.patch @@ -0,0 +1,60 @@ +From b66f204fcdb797b85050f3f6af6b4967247fd0f5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 3 Dec 2013 14:30:44 +0100 +Subject: [PATCH 14/37] block: write: Handle COR dependency after I/O throttling + +Message-id: <1392117622-28812-15-git-send-email-kwolf@redhat.com> +Patchwork-id: 57179 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 14/37] block: write: Handle COR dependency after I/O throttling +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +First waiting for all COR requests to complete and calling the +throttling function afterwards means that the request could be delayed +and we still need to wait for the COR request even if it was issued only +after the throttled write request. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +(cherry picked from commit 244eadef5c797c674b0aef96366671be4b33d03a) + +Signed-off-by: Kevin Wolf +--- + block.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) +--- + block.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/block.c b/block.c +index e6b6ed4..d8168f5 100644 +--- a/block.c ++++ b/block.c +@@ -2997,6 +2997,10 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0); + assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + ++ if (bs->copy_on_read_in_flight) { ++ wait_for_overlapping_requests(bs, sector_num, nb_sectors); ++ } ++ + tracked_request_begin(&req, bs, sector_num, nb_sectors, true); + + if (flags & BDRV_REQ_ZERO_WRITE) { +@@ -3044,10 +3048,6 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, + return -EIO; + } + +- if (bs->copy_on_read_in_flight) { +- wait_for_overlapping_requests(bs, sector_num, nb_sectors); +- } +- + /* throttling disk I/O */ + if (bs->io_limits_enabled) { + bdrv_io_limits_intercept(bs, true, nb_sectors); +-- +1.7.1 + diff --git a/SOURCES/kvm-block.curl-adding-timeout-option.patch b/SOURCES/kvm-block.curl-adding-timeout-option.patch new file mode 100644 index 0000000..8a32009 --- /dev/null +++ b/SOURCES/kvm-block.curl-adding-timeout-option.patch @@ -0,0 +1,102 @@ +From 06b79081237eff3ebd8719af55265855d446f3e6 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:25 +0200 +Subject: [PATCH 25/30] block.curl: adding 'timeout' option + +Message-id: <1434022828-13037-19-git-send-email-rjones@redhat.com> +Patchwork-id: 65851 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 18/21] block.curl: adding 'timeout' option +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Daniel Henrique Barboza + +The curl hardcoded timeout (5 seconds) sometimes is not long +enough depending on the remote server configuration and network +traffic. The user should be able to set how much long he is +willing to wait for the connection. + +Adding a new option to set this timeout gives the user this +flexibility. The previous default timeout of 5 seconds will be +used if this option is not present. + +Reviewed-by: Fam Zheng +Signed-off-by: Daniel Henrique Barboza +Reviewed-by: Benoit Canet +Tested-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 212aefaa53d142baa9a22f5aadd2e72eb916c0c0 + +Note this intentionally omits the documentation changes in +'qemu-options.hx' from the upstream patch. + +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index 2486449..1f1df4f 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -63,6 +63,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, + #define CURL_NUM_ACB 8 + #define SECTOR_SIZE 512 + #define READ_AHEAD_DEFAULT (256 * 1024) ++#define CURL_TIMEOUT_DEFAULT 5 + + #define FIND_RET_NONE 0 + #define FIND_RET_OK 1 +@@ -71,6 +72,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, + #define CURL_BLOCK_OPT_URL "url" + #define CURL_BLOCK_OPT_READAHEAD "readahead" + #define CURL_BLOCK_OPT_SSLVERIFY "sslverify" ++#define CURL_BLOCK_OPT_TIMEOUT "timeout" + + struct BDRVCURLState; + +@@ -109,6 +111,7 @@ typedef struct BDRVCURLState { + char *url; + size_t readahead_size; + bool sslverify; ++ int timeout; + bool accept_range; + } BDRVCURLState; + +@@ -379,7 +382,7 @@ static CURLState *curl_init_state(BDRVCURLState *s) + curl_easy_setopt(state->curl, CURLOPT_URL, s->url); + curl_easy_setopt(state->curl, CURLOPT_SSL_VERIFYPEER, + (long) s->sslverify); +- curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, 5); ++ curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, s->timeout); + curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, + (void *)curl_read_cb); + curl_easy_setopt(state->curl, CURLOPT_WRITEDATA, (void *)state); +@@ -443,6 +446,11 @@ static QemuOptsList runtime_opts = { + .type = QEMU_OPT_BOOL, + .help = "Verify SSL certificate" + }, ++ { ++ .name = CURL_BLOCK_OPT_TIMEOUT, ++ .type = QEMU_OPT_NUMBER, ++ .help = "Curl timeout" ++ }, + { /* end of list */ } + }, + }; +@@ -475,6 +483,9 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + goto out_noclean; + } + ++ s->timeout = qemu_opt_get_number(opts, CURL_BLOCK_OPT_TIMEOUT, ++ CURL_TIMEOUT_DEFAULT); ++ + s->sslverify = qemu_opt_get_bool(opts, CURL_BLOCK_OPT_SSLVERIFY, true); + + file = qemu_opt_get(opts, CURL_BLOCK_OPT_URL); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-blockdev-Don-t-disable-COR-automatically-with-blockd.patch b/SOURCES/kvm-blockdev-Don-t-disable-COR-automatically-with-blockd.patch new file mode 100644 index 0000000..7b6ec5f --- /dev/null +++ b/SOURCES/kvm-blockdev-Don-t-disable-COR-automatically-with-blockd.patch @@ -0,0 +1,121 @@ +From f511f5b093b500474168bb0c7e95b1a48a0d5d42 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:13 +0100 +Subject: [PATCH 60/87] blockdev: Don't disable COR automatically with blockdev-add + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-20-git-send-email-kwolf@redhat.com> +Patchwork-id: 55398 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 19/24] blockdev: Don't disable COR automatically with blockdev-add +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +If a read-only device is configured with copy-on-read=on, the old code +only prints a warning and automatically disables copy on read. Make it +a real error for blockdev-add. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +(cherry picked from commit 0ebd24e0a203cf2852c310b59fbe050190dc6c8c) + +Signed-off-by: Kevin Wolf +--- + block.c | 9 +++++++-- + blockdev.c | 31 +++++++++++++++++++++++++++---- + 2 files changed, 34 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block.c | 9 +++++++-- + blockdev.c | 31 +++++++++++++++++++++++++++---- + 2 files changed, 34 insertions(+), 6 deletions(-) + +diff --git a/block.c b/block.c +index c2b6930..d11661a 100644 +--- a/block.c ++++ b/block.c +@@ -746,8 +746,13 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + } + + assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */ +- if (!bs->read_only && (flags & BDRV_O_COPY_ON_READ)) { +- bdrv_enable_copy_on_read(bs); ++ if (flags & BDRV_O_COPY_ON_READ) { ++ if (!bs->read_only) { ++ bdrv_enable_copy_on_read(bs); ++ } else { ++ error_setg(errp, "Can't use copy-on-read on read-only device"); ++ return -EINVAL; ++ } + } + + if (filename != NULL) { +diff --git a/blockdev.c b/blockdev.c +index d4b18c5..cbf01eb 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -511,10 +511,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + + bdrv_flags |= ro ? 0 : BDRV_O_RDWR; + +- if (ro && copy_on_read) { +- error_report("warning: disabling copy_on_read on read-only drive"); +- } +- + QINCREF(bs_opts); + ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv, &error); + +@@ -602,6 +598,18 @@ QemuOptsList qemu_legacy_drive_opts = { + .type = QEMU_OPT_STRING, + .help = "pci address (virtio only)", + }, ++ ++ /* Options that are passed on, but have special semantics with -drive */ ++ { ++ .name = "read-only", ++ .type = QEMU_OPT_BOOL, ++ .help = "open drive file as read-only", ++ },{ ++ .name = "copy-on-read", ++ .type = QEMU_OPT_BOOL, ++ .help = "copy read data from backing file into image file", ++ }, ++ + { /* end of list */ } + }, + }; +@@ -617,6 +625,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + int cyls, heads, secs, translation; + int max_devs, bus_id, unit_id, index; + const char *devaddr; ++ bool read_only, copy_on_read; + Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ +@@ -688,6 +697,20 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + } + } + ++ /* copy-on-read is disabled with a warning for read-only devices */ ++ read_only = qemu_opt_get_bool(legacy_opts, "read-only", false); ++ copy_on_read = qemu_opt_get_bool(legacy_opts, "copy-on-read", false); ++ ++ if (read_only && copy_on_read) { ++ error_report("warning: disabling copy-on-read on read-only drive"); ++ copy_on_read = false; ++ } ++ ++ qdict_put(bs_opts, "read-only", ++ qstring_from_str(read_only ? "on" : "off")); ++ qdict_put(bs_opts, "copy-on-read", ++ qstring_from_str(copy_on_read ? "on" :"off")); ++ + /* Controller type */ + value = qemu_opt_get(legacy_opts, "if"); + if (value) { +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Fail-blockdev-add-with-encrypted-images.patch b/SOURCES/kvm-blockdev-Fail-blockdev-add-with-encrypted-images.patch new file mode 100644 index 0000000..080ccc4 --- /dev/null +++ b/SOURCES/kvm-blockdev-Fail-blockdev-add-with-encrypted-images.patch @@ -0,0 +1,68 @@ +From b1e9937d355d28809635967f3ada98c2ecf8ae7f Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:08 +0200 +Subject: [PATCH 03/19] blockdev: Fail blockdev-add with encrypted images + +Message-id: <1414059011-15516-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 61839 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 5/8] blockdev: Fail blockdev-add with encrypted images +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Encrypted images need a password before they can be used, and we don't +want blockdev-add to create BDSes that aren't fully initialised. So for +now simply forbid encrypted images; we can come back to it later if we +need the functionality. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 8ae8e904fcba484ff7c3f8f31339b56ebd88fbad) +Signed-off-by: Miroslav Rezanina + +Conflicts: + blockdev.c + +Trivial bonus bugfix so that the backported test 087 won't fail. + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/blockdev.c b/blockdev.c +index 7d4a53f..a2d5f02 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1793,6 +1793,7 @@ void qmp___com_redhat_change_backing_file(const char *device, + void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + { + QmpOutputVisitor *ov = qmp_output_visitor_new(); ++ DriveInfo *dinfo; + QObject *obj; + QDict *qdict; + Error *local_err = NULL; +@@ -1828,12 +1829,18 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + + qdict_flatten(qdict); + +- blockdev_init(qdict, IF_NONE, &local_err); ++ dinfo = blockdev_init(qdict, IF_NONE, &local_err); + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); + goto fail; + } + ++ if (bdrv_key_required(dinfo->bdrv)) { ++ drive_uninit(dinfo); ++ error_setg(errp, "blockdev-add doesn't support encrypted devices"); ++ goto fail; ++ } ++ + fail: + qmp_output_visitor_cleanup(ov); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-blockdev-Fix-NULL-pointer-dereference-in-blockdev-ad.patch b/SOURCES/kvm-blockdev-Fix-NULL-pointer-dereference-in-blockdev-ad.patch new file mode 100644 index 0000000..7753dd8 --- /dev/null +++ b/SOURCES/kvm-blockdev-Fix-NULL-pointer-dereference-in-blockdev-ad.patch @@ -0,0 +1,53 @@ +From 55355b00b588e875583e2463beac3d5d1b53ac35 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:07 +0200 +Subject: [PATCH 04/19] blockdev: Fix NULL pointer dereference in blockdev-add + +Message-id: <1414059011-15516-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 61838 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 4/8] blockdev: Fix NULL pointer dereference in blockdev-add +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +If aio=native, we check that cache.direct is set as well. If however +cache wasn't specified at all, qemu just segfaulted. + +The old condition didn't make any sense anyway because it effectively +only checked for the default cache mode case, but not for an explicitly +set cache.direct=off mode. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +(cherry picked from commit c6e0bd9b7037937aafeb1d34ec17975a7d685bb7) + +Trivial bonus bugfix so that the backported test 087 won't fail. + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index a2d5f02..1ac8804 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1810,8 +1810,10 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + * + * For now, simply forbidding the combination for all drivers will do. */ + if (options->has_aio && options->aio == BLOCKDEV_AIO_OPTIONS_NATIVE) { +- bool direct = options->cache->has_direct && options->cache->direct; +- if (!options->has_cache && !direct) { ++ bool direct = options->has_cache && ++ options->cache->has_direct && ++ options->cache->direct; ++ if (!direct) { + error_setg(errp, "aio=native requires cache.direct=true"); + goto fail; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-blockdev-Introduce-DriveInfo.enable_auto_del.patch b/SOURCES/kvm-blockdev-Introduce-DriveInfo.enable_auto_del.patch new file mode 100644 index 0000000..f3a913e --- /dev/null +++ b/SOURCES/kvm-blockdev-Introduce-DriveInfo.enable_auto_del.patch @@ -0,0 +1,95 @@ +From 543610e2a818c44591670da35107ae8d17406382 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:08:59 +0100 +Subject: [PATCH 46/87] blockdev: Introduce DriveInfo.enable_auto_del + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 55384 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 05/24] blockdev: Introduce DriveInfo.enable_auto_del +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +BlockDriverStates shouldn't be affected by an unplugged guest device, +except if created with the legacy -drive command line option or the +drive_add HMP command. + +Make the automatic deletion as well as cancelling of jobs conditional on +an enable_auto_del boolean that is only set in drive_init(). + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Reviewed-by: Wenchao Xia +(cherry picked from commit 2d246f01d374c1a10c48c45aa931aa18f0a56634) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 17 ++++++++++++++++- + include/sysemu/blockdev.h | 1 + + 2 files changed, 17 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 17 ++++++++++++++++- + include/sysemu/blockdev.h | 1 + + 2 files changed, 17 insertions(+), 1 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 2fb6d83..e379a91 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -89,6 +89,10 @@ void blockdev_mark_auto_del(BlockDriverState *bs) + { + DriveInfo *dinfo = drive_get_by_blockdev(bs); + ++ if (dinfo && !dinfo->enable_auto_del) { ++ return; ++ } ++ + if (bs->job) { + block_job_cancel(bs->job); + } +@@ -747,6 +751,7 @@ static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to) + DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + { + const char *value; ++ DriveInfo *dinfo; + + /* Change legacy command line options into QMP ones */ + qemu_opt_rename(all_opts, "iops", "throttling.iops-total"); +@@ -784,7 +789,17 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + qemu_opt_unset(all_opts, "cache"); + } + +- return blockdev_init(all_opts, block_default_type); ++ /* Actual block device init: Functionality shared with blockdev-add */ ++ dinfo = blockdev_init(all_opts, block_default_type); ++ if (dinfo == NULL) { ++ goto fail; ++ } ++ ++ /* Set legacy DriveInfo fields */ ++ dinfo->enable_auto_del = true; ++ ++fail: ++ return dinfo; + } + + void do_commit(Monitor *mon, const QDict *qdict) +diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h +index 804ec88..1082091 100644 +--- a/include/sysemu/blockdev.h ++++ b/include/sysemu/blockdev.h +@@ -37,6 +37,7 @@ struct DriveInfo { + int bus; + int unit; + int auto_del; /* see blockdev_mark_auto_del() */ ++ bool enable_auto_del; /* Only for legacy drive_init() */ + int media_cd; + int cyls, heads, secs, trans; + QemuOpts *opts; +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Move-bus-unit-index-processing-to-drive_ini.patch b/SOURCES/kvm-blockdev-Move-bus-unit-index-processing-to-drive_ini.patch new file mode 100644 index 0000000..35c9d12 --- /dev/null +++ b/SOURCES/kvm-blockdev-Move-bus-unit-index-processing-to-drive_ini.patch @@ -0,0 +1,266 @@ +From 9ab9b4d966cf80520ad0864bc61b1d3a255ce39c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:08 +0100 +Subject: [PATCH 55/87] blockdev: Move bus/unit/index processing to drive_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-15-git-send-email-kwolf@redhat.com> +Patchwork-id: 55393 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 14/24] blockdev: Move bus/unit/index processing to drive_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +This requires moving the automatic ID generation at the same time, so +let's do that as well. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +(cherry picked from commit 87a899c5090c7864fc7dcff3ea0ac34153ea621b) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 157 ++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 73 insertions(+), 84 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 157 ++++++++++++++++++++++++++++-------------------------------- + 1 files changed, 73 insertions(+), 84 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 9f9cbba..b6dff50 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -334,10 +334,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + const char *buf; + const char *file = NULL; + const char *serial; +- const char *mediastr = ""; +- int bus_id, unit_id; +- int max_devs; +- int index; + int ro = 0; + int bdrv_flags = 0; + int on_read_error, on_write_error; +@@ -377,10 +373,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + has_driver_specific_opts = !!qdict_size(bs_opts); + + /* extract parameters */ +- bus_id = qemu_opt_get_number(opts, "bus", 0); +- unit_id = qemu_opt_get_number(opts, "unit", -1); +- index = qemu_opt_get_number(opts, "index", -1); +- + snapshot = qemu_opt_get_bool(opts, "snapshot", 0); + ro = qemu_opt_get_bool(opts, "read-only", 0); + copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false); +@@ -388,8 +380,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + file = qemu_opt_get(opts, "file"); + serial = qemu_opt_get(opts, "serial"); + +- max_devs = if_max_devs[type]; +- + if ((buf = qemu_opt_get(opts, "discard")) != NULL) { + if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) { + error_report("invalid discard option"); +@@ -489,66 +479,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + } + } + +- /* compute bus and unit according index */ +- +- if (index != -1) { +- if (bus_id != 0 || unit_id != -1) { +- error_report("index cannot be used with bus and unit"); +- return NULL; +- } +- bus_id = drive_index_to_bus_id(type, index); +- unit_id = drive_index_to_unit_id(type, index); +- } +- +- /* if user doesn't specify a unit_id, +- * try to find the first free +- */ +- +- if (unit_id == -1) { +- unit_id = 0; +- while (drive_get(type, bus_id, unit_id) != NULL) { +- unit_id++; +- if (max_devs && unit_id >= max_devs) { +- unit_id -= max_devs; +- bus_id++; +- } +- } +- } +- +- /* check unit id */ +- +- if (max_devs && unit_id >= max_devs) { +- error_report("unit %d too big (max is %d)", +- unit_id, max_devs - 1); +- return NULL; +- } +- +- /* +- * catch multiple definitions +- */ +- +- if (drive_get(type, bus_id, unit_id) != NULL) { +- error_report("drive with bus=%d, unit=%d (index=%d) exists", +- bus_id, unit_id, index); +- return NULL; +- } +- +- /* no id supplied -> create one */ +- if (qemu_opts_id(opts) == NULL) { +- char *new_id; +- if (type == IF_IDE || type == IF_SCSI) { +- mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd"; +- } +- if (max_devs) { +- new_id = g_strdup_printf("%s%i%s%i", if_name[type], bus_id, +- mediastr, unit_id); +- } else { +- new_id = g_strdup_printf("%s%s%i", if_name[type], +- mediastr, unit_id); +- } +- qemu_opts_set_id(opts, new_id); +- } +- + /* init */ + dinfo = g_malloc0(sizeof(*dinfo)); + dinfo->id = g_strdup(qemu_opts_id(opts)); +@@ -557,8 +487,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + dinfo->bdrv->read_only = ro; + dinfo->devaddr = devaddr; + dinfo->type = type; +- dinfo->bus = bus_id; +- dinfo->unit = unit_id; + dinfo->refcount = 1; + if (serial != NULL) { + dinfo->serial = g_strdup(serial); +@@ -681,6 +609,18 @@ QemuOptsList qemu_legacy_drive_opts = { + .head = QTAILQ_HEAD_INITIALIZER(qemu_legacy_drive_opts.head), + .desc = { + { ++ .name = "bus", ++ .type = QEMU_OPT_NUMBER, ++ .help = "bus number", ++ },{ ++ .name = "unit", ++ .type = QEMU_OPT_NUMBER, ++ .help = "unit number (i.e. lun for scsi)", ++ },{ ++ .name = "index", ++ .type = QEMU_OPT_NUMBER, ++ .help = "index number", ++ },{ + .name = "media", + .type = QEMU_OPT_STRING, + .help = "media type (disk, cdrom)", +@@ -722,6 +662,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + DriveMediaType media = MEDIA_DISK; + BlockInterfaceType type; + int cyls, heads, secs, translation; ++ int max_devs, bus_id, unit_id, index; + Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ +@@ -854,6 +795,63 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + } + } + ++ /* Device address specified by bus/unit or index. ++ * If none was specified, try to find the first free one. */ ++ bus_id = qemu_opt_get_number(legacy_opts, "bus", 0); ++ unit_id = qemu_opt_get_number(legacy_opts, "unit", -1); ++ index = qemu_opt_get_number(legacy_opts, "index", -1); ++ ++ max_devs = if_max_devs[type]; ++ ++ if (index != -1) { ++ if (bus_id != 0 || unit_id != -1) { ++ error_report("index cannot be used with bus and unit"); ++ goto fail; ++ } ++ bus_id = drive_index_to_bus_id(type, index); ++ unit_id = drive_index_to_unit_id(type, index); ++ } ++ ++ if (unit_id == -1) { ++ unit_id = 0; ++ while (drive_get(type, bus_id, unit_id) != NULL) { ++ unit_id++; ++ if (max_devs && unit_id >= max_devs) { ++ unit_id -= max_devs; ++ bus_id++; ++ } ++ } ++ } ++ ++ if (max_devs && unit_id >= max_devs) { ++ error_report("unit %d too big (max is %d)", unit_id, max_devs - 1); ++ goto fail; ++ } ++ ++ if (drive_get(type, bus_id, unit_id) != NULL) { ++ error_report("drive with bus=%d, unit=%d (index=%d) exists", ++ bus_id, unit_id, index); ++ goto fail; ++ } ++ ++ /* no id supplied -> create one */ ++ if (qemu_opts_id(all_opts) == NULL) { ++ char *new_id; ++ const char *mediastr = ""; ++ if (type == IF_IDE || type == IF_SCSI) { ++ mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd"; ++ } ++ if (max_devs) { ++ new_id = g_strdup_printf("%s%i%s%i", if_name[type], bus_id, ++ mediastr, unit_id); ++ } else { ++ new_id = g_strdup_printf("%s%s%i", if_name[type], ++ mediastr, unit_id); ++ } ++ qdict_put(bs_opts, "id", qstring_from_str(new_id)); ++ g_free(new_id); ++ } ++ + /* Actual block device init: Functionality shared with blockdev-add */ + dinfo = blockdev_init(bs_opts, type, media); + if (dinfo == NULL) { +@@ -869,6 +867,9 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + dinfo->secs = secs; + dinfo->trans = translation; + ++ dinfo->bus = bus_id; ++ dinfo->unit = unit_id; ++ + fail: + qemu_opts_del(legacy_opts); + return dinfo; +@@ -1804,18 +1805,6 @@ QemuOptsList qemu_common_drive_opts = { + .head = QTAILQ_HEAD_INITIALIZER(qemu_common_drive_opts.head), + .desc = { + { +- .name = "bus", +- .type = QEMU_OPT_NUMBER, +- .help = "bus number", +- },{ +- .name = "unit", +- .type = QEMU_OPT_NUMBER, +- .help = "unit number (i.e. lun for scsi)", +- },{ +- .name = "index", +- .type = QEMU_OPT_NUMBER, +- .help = "index number", +- },{ + .name = "snapshot", + .type = QEMU_OPT_BOOL, + .help = "enable/disable snapshot mode", +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Move-parsing-of-boot-option-to-drive_init.patch b/SOURCES/kvm-blockdev-Move-parsing-of-boot-option-to-drive_init.patch new file mode 100644 index 0000000..7b04e14 --- /dev/null +++ b/SOURCES/kvm-blockdev-Move-parsing-of-boot-option-to-drive_init.patch @@ -0,0 +1,87 @@ +From f57c1d76bbddfd3a12f35c59c043eaed7be44206 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:07 +0100 +Subject: [PATCH 54/87] blockdev: Move parsing of 'boot' option to drive_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-14-git-send-email-kwolf@redhat.com> +Patchwork-id: 55392 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 13/24] blockdev: Move parsing of 'boot' option to drive_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +It's already ignored and only prints a deprecation message. No use in +making it available in new interfaces. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 26929298023b0592dc6ac8bc15163b5a24341670) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 21 +++++++++++---------- + 1 file changed, 11 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 21 +++++++++++---------- + 1 files changed, 11 insertions(+), 10 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index d69c4a8..9f9cbba 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -456,12 +456,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + return NULL; + } + +- if (qemu_opt_get(opts, "boot") != NULL) { +- fprintf(stderr, "qemu-kvm: boot=on|off is deprecated and will be " +- "ignored. Future versions will reject this parameter. Please " +- "update your scripts.\n"); +- } +- + on_write_error = BLOCKDEV_ON_ERROR_ENOSPC; + if ((buf = qemu_opt_get(opts, "werror")) != NULL) { + if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO && type != IF_NONE) { +@@ -710,6 +704,10 @@ QemuOptsList qemu_legacy_drive_opts = { + .name = "trans", + .type = QEMU_OPT_STRING, + .help = "chs translation (auto, lba, none)", ++ },{ ++ .name = "boot", ++ .type = QEMU_OPT_BOOL, ++ .help = "(deprecated, ignored)", + }, + { /* end of list */ } + }, +@@ -774,6 +772,13 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + goto fail; + } + ++ /* Deprecated option boot=[on|off] */ ++ if (qemu_opt_get(legacy_opts, "boot") != NULL) { ++ fprintf(stderr, "qemu-kvm: boot=on|off is deprecated and will be " ++ "ignored. Future versions will reject this parameter. Please " ++ "update your scripts.\n"); ++ } ++ + /* Media type */ + value = qemu_opt_get(legacy_opts, "media"); + if (value) { +@@ -1890,10 +1895,6 @@ QemuOptsList qemu_common_drive_opts = { + .name = "copy-on-read", + .type = QEMU_OPT_BOOL, + .help = "copy read data from backing file into image file", +- },{ +- .name = "boot", +- .type = QEMU_OPT_BOOL, +- .help = "(deprecated, ignored)", + }, + { /* end of list */ } + }, +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Move-parsing-of-if-option-to-drive_init.patch b/SOURCES/kvm-blockdev-Move-parsing-of-if-option-to-drive_init.patch new file mode 100644 index 0000000..6dd8885 --- /dev/null +++ b/SOURCES/kvm-blockdev-Move-parsing-of-if-option-to-drive_init.patch @@ -0,0 +1,127 @@ +From d3346d7e6dea698bc00eb18be4e174e9036ebeee Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:05 +0100 +Subject: [PATCH 52/87] blockdev: Move parsing of 'if' option to drive_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-12-git-send-email-kwolf@redhat.com> +Patchwork-id: 55390 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 11/24] blockdev: Move parsing of 'if' option to drive_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +It's always IF_NONE for blockdev-add. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +(cherry picked from commit 593d464bd43900c2a0c8800b76212f6a93e99a0d) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 40 ++++++++++++++++++++++------------------ + 1 file changed, 22 insertions(+), 18 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 40 ++++++++++++++++++++++------------------ + 1 files changed, 22 insertions(+), 18 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index e6d3c15..9bc3417 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -328,14 +328,13 @@ typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType; + + /* Takes the ownership of bs_opts */ + static DriveInfo *blockdev_init(QDict *bs_opts, +- BlockInterfaceType block_default_type, ++ BlockInterfaceType type, + DriveMediaType media) + { + const char *buf; + const char *file = NULL; + const char *serial; + const char *mediastr = ""; +- BlockInterfaceType type; + int bus_id, unit_id; + int cyls, heads, secs, translation; + int max_devs; +@@ -396,17 +395,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + file = qemu_opt_get(opts, "file"); + serial = qemu_opt_get(opts, "serial"); + +- if ((buf = qemu_opt_get(opts, "if")) != NULL) { +- for (type = 0; type < IF_COUNT && strcmp(buf, if_name[type]); type++) +- ; +- if (type == IF_COUNT) { +- error_report("unsupported bus type '%s'", buf); +- return NULL; +- } +- } else { +- type = block_default_type; +- } +- + max_devs = if_max_devs[type]; + + if (cyls || heads || secs) { +@@ -753,6 +741,10 @@ QemuOptsList qemu_legacy_drive_opts = { + .name = "media", + .type = QEMU_OPT_STRING, + .help = "media type (disk, cdrom)", ++ },{ ++ .name = "if", ++ .type = QEMU_OPT_STRING, ++ .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", + }, + { /* end of list */ } + }, +@@ -765,6 +757,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + QDict *bs_opts; + QemuOpts *legacy_opts; + DriveMediaType media = MEDIA_DISK; ++ BlockInterfaceType type; + Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ +@@ -828,8 +821,23 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + } + } + ++ /* Controller type */ ++ value = qemu_opt_get(legacy_opts, "if"); ++ if (value) { ++ for (type = 0; ++ type < IF_COUNT && strcmp(value, if_name[type]); ++ type++) { ++ } ++ if (type == IF_COUNT) { ++ error_report("unsupported bus type '%s'", value); ++ goto fail; ++ } ++ } else { ++ type = block_default_type; ++ } ++ + /* Actual block device init: Functionality shared with blockdev-add */ +- dinfo = blockdev_init(bs_opts, block_default_type, media); ++ dinfo = blockdev_init(bs_opts, type, media); + if (dinfo == NULL) { + goto fail; + } +@@ -1781,10 +1789,6 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_NUMBER, + .help = "unit number (i.e. lun for scsi)", + },{ +- .name = "if", +- .type = QEMU_OPT_STRING, +- .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", +- },{ + .name = "index", + .type = QEMU_OPT_NUMBER, + .help = "index number", +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Move-parsing-of-media-option-to-drive_init.patch b/SOURCES/kvm-blockdev-Move-parsing-of-media-option-to-drive_init.patch new file mode 100644 index 0000000..0f753bc --- /dev/null +++ b/SOURCES/kvm-blockdev-Move-parsing-of-media-option-to-drive_init.patch @@ -0,0 +1,182 @@ +From 90321b7139eb0c078f2dffa2d78a121852389e40 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:04 +0100 +Subject: [PATCH 51/87] blockdev: Move parsing of 'media' option to drive_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-11-git-send-email-kwolf@redhat.com> +Patchwork-id: 55389 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 10/24] blockdev: Move parsing of 'media' option to drive_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +This moves as much as possible of the processing of the 'media' option +to drive_init so that it can only be accessed using legacy functions, +but never with anything blockdev-add related. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +(cherry picked from commit 33cb7dc8b7a26ccdff2f054056d3f2e487cbb4cd) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 73 ++++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 50 insertions(+), 23 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 73 +++++++++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 50 insertions(+), 23 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 8dd9fd7..e6d3c15 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -324,16 +324,18 @@ static bool do_check_io_limits(BlockIOLimit *io_limits, Error **errp) + return true; + } + ++typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType; ++ + /* Takes the ownership of bs_opts */ + static DriveInfo *blockdev_init(QDict *bs_opts, +- BlockInterfaceType block_default_type) ++ BlockInterfaceType block_default_type, ++ DriveMediaType media) + { + const char *buf; + const char *file = NULL; + const char *serial; + const char *mediastr = ""; + BlockInterfaceType type; +- enum { MEDIA_DISK, MEDIA_CDROM } media; + int bus_id, unit_id; + int cyls, heads, secs, translation; + int max_devs; +@@ -354,7 +356,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + BlockDriver *drv = NULL; + + translation = BIOS_ATA_TRANSLATION_AUTO; +- media = MEDIA_DISK; + + /* Check common options by copying from bs_opts to opts, all other options + * stay in bs_opts for processing by bdrv_open(). */ +@@ -441,19 +442,11 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + } + } + +- if ((buf = qemu_opt_get(opts, "media")) != NULL) { +- if (!strcmp(buf, "disk")) { +- media = MEDIA_DISK; +- } else if (!strcmp(buf, "cdrom")) { +- if (cyls || secs || heads) { +- error_report("CHS can't be set with media=%s", buf); +- return NULL; +- } +- media = MEDIA_CDROM; +- } else { +- error_report("'%s' invalid media", buf); +- return NULL; +- } ++ if (media == MEDIA_CDROM) { ++ if (cyls || secs || heads) { ++ error_report("CHS can't be set with media=cdrom"); ++ return NULL; ++ } + } + + if ((buf = qemu_opt_get(opts, "discard")) != NULL) { +@@ -752,11 +745,27 @@ static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to) + } + } + ++QemuOptsList qemu_legacy_drive_opts = { ++ .name = "drive", ++ .head = QTAILQ_HEAD_INITIALIZER(qemu_legacy_drive_opts.head), ++ .desc = { ++ { ++ .name = "media", ++ .type = QEMU_OPT_STRING, ++ .help = "media type (disk, cdrom)", ++ }, ++ { /* end of list */ } ++ }, ++}; ++ + DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + { + const char *value; +- DriveInfo *dinfo; ++ DriveInfo *dinfo = NULL; + QDict *bs_opts; ++ QemuOpts *legacy_opts; ++ DriveMediaType media = MEDIA_DISK; ++ Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ + qemu_opt_rename(all_opts, "iops", "throttling.iops-total"); +@@ -798,8 +807,29 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + bs_opts = qdict_new(); + qemu_opts_to_qdict(all_opts, bs_opts); + ++ legacy_opts = qemu_opts_create_nofail(&qemu_legacy_drive_opts); ++ qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err); ++ if (error_is_set(&local_err)) { ++ qerror_report_err(local_err); ++ error_free(local_err); ++ goto fail; ++ } ++ ++ /* Media type */ ++ value = qemu_opt_get(legacy_opts, "media"); ++ if (value) { ++ if (!strcmp(value, "disk")) { ++ media = MEDIA_DISK; ++ } else if (!strcmp(value, "cdrom")) { ++ media = MEDIA_CDROM; ++ } else { ++ error_report("'%s' invalid media", value); ++ goto fail; ++ } ++ } ++ + /* Actual block device init: Functionality shared with blockdev-add */ +- dinfo = blockdev_init(bs_opts, block_default_type); ++ dinfo = blockdev_init(bs_opts, block_default_type, media); + if (dinfo == NULL) { + goto fail; + } +@@ -809,6 +839,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + dinfo->opts = all_opts; + + fail: ++ qemu_opts_del(legacy_opts); + return dinfo; + } + +@@ -1705,7 +1736,7 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + + qdict_flatten(qdict); + +- dinfo = blockdev_init(qdict, IF_NONE); ++ dinfo = blockdev_init(qdict, IF_NONE, MEDIA_DISK); + if (!dinfo) { + error_setg(errp, "Could not open image"); + goto fail; +@@ -1774,10 +1805,6 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_STRING, + .help = "chs translation (auto, lba. none)", + },{ +- .name = "media", +- .type = QEMU_OPT_STRING, +- .help = "media type (disk, cdrom)", +- },{ + .name = "snapshot", + .type = QEMU_OPT_BOOL, + .help = "enable/disable snapshot mode", +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Move-virtio-blk-device-creation-to-drive_in.patch b/SOURCES/kvm-blockdev-Move-virtio-blk-device-creation-to-drive_in.patch new file mode 100644 index 0000000..244e7fa --- /dev/null +++ b/SOURCES/kvm-blockdev-Move-virtio-blk-device-creation-to-drive_in.patch @@ -0,0 +1,154 @@ +From 1a3ba7716b6559be0e4a236c96229b98eb92d9a6 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:09 +0100 +Subject: [PATCH 56/87] blockdev: Move virtio-blk device creation to drive_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-16-git-send-email-kwolf@redhat.com> +Patchwork-id: 55394 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 15/24] blockdev: Move virtio-blk device creation to drive_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +(cherry picked from commit 394c7d4d6bd06386308e2fef0cf1c613a10e0d23) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 54 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 27 insertions(+), 27 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 54 +++++++++++++++++++++++++++--------------------------- + 1 files changed, 27 insertions(+), 27 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index b6dff50..14b357a 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -337,7 +337,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + int ro = 0; + int bdrv_flags = 0; + int on_read_error, on_write_error; +- const char *devaddr; + DriveInfo *dinfo; + BlockIOLimit io_limits; + int snapshot = 0; +@@ -472,20 +471,12 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + } + } + +- if ((devaddr = qemu_opt_get(opts, "addr")) != NULL) { +- if (type != IF_VIRTIO) { +- error_report("addr is not supported by this bus type"); +- return NULL; +- } +- } +- + /* init */ + dinfo = g_malloc0(sizeof(*dinfo)); + dinfo->id = g_strdup(qemu_opts_id(opts)); + dinfo->bdrv = bdrv_new(dinfo->id); + dinfo->bdrv->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0; + dinfo->bdrv->read_only = ro; +- dinfo->devaddr = devaddr; + dinfo->type = type; + dinfo->refcount = 1; + if (serial != NULL) { +@@ -509,22 +500,8 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + case IF_FLOPPY: + case IF_PFLASH: + case IF_MTD: +- break; + case IF_VIRTIO: +- { +- /* add virtio block device */ +- QemuOpts *devopts; +- devopts = qemu_opts_create_nofail(qemu_find_opts("device")); +- if (arch_type == QEMU_ARCH_S390X) { +- qemu_opt_set(devopts, "driver", "virtio-blk-s390"); +- } else { +- qemu_opt_set(devopts, "driver", "virtio-blk-pci"); +- } +- qemu_opt_set(devopts, "drive", dinfo->id); +- if (devaddr) +- qemu_opt_set(devopts, "addr", devaddr); + break; +- } + default: + abort(); + } +@@ -648,6 +625,10 @@ QemuOptsList qemu_legacy_drive_opts = { + .name = "boot", + .type = QEMU_OPT_BOOL, + .help = "(deprecated, ignored)", ++ },{ ++ .name = "addr", ++ .type = QEMU_OPT_STRING, ++ .help = "pci address (virtio only)", + }, + { /* end of list */ } + }, +@@ -663,6 +644,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + BlockInterfaceType type; + int cyls, heads, secs, translation; + int max_devs, bus_id, unit_id, index; ++ const char *devaddr; + Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ +@@ -852,6 +834,27 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + g_free(new_id); + } + ++ /* Add virtio block device */ ++ devaddr = qemu_opt_get(legacy_opts, "addr"); ++ if (devaddr && type != IF_VIRTIO) { ++ error_report("addr is not supported by this bus type"); ++ goto fail; ++ } ++ ++ if (type == IF_VIRTIO) { ++ QemuOpts *devopts; ++ devopts = qemu_opts_create_nofail(qemu_find_opts("device")); ++ if (arch_type == QEMU_ARCH_S390X) { ++ qemu_opt_set(devopts, "driver", "virtio-blk-s390"); ++ } else { ++ qemu_opt_set(devopts, "driver", "virtio-blk-pci"); ++ } ++ qemu_opt_set(devopts, "drive", qdict_get_str(bs_opts, "id")); ++ if (devaddr) { ++ qemu_opt_set(devopts, "addr", devaddr); ++ } ++ } ++ + /* Actual block device init: Functionality shared with blockdev-add */ + dinfo = blockdev_init(bs_opts, type, media); + if (dinfo == NULL) { +@@ -869,6 +872,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + + dinfo->bus = bus_id; + dinfo->unit = unit_id; ++ dinfo->devaddr = devaddr; + + fail: + qemu_opts_del(legacy_opts); +@@ -1849,10 +1853,6 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_STRING, + .help = "write error action", + },{ +- .name = "addr", +- .type = QEMU_OPT_STRING, +- .help = "pci address (virtio only)", +- },{ + .name = "read-only", + .type = QEMU_OPT_BOOL, + .help = "open drive file as read-only", +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Moving-parsing-of-geometry-options-to-drive.patch b/SOURCES/kvm-blockdev-Moving-parsing-of-geometry-options-to-drive.patch new file mode 100644 index 0000000..c8a10ab --- /dev/null +++ b/SOURCES/kvm-blockdev-Moving-parsing-of-geometry-options-to-drive.patch @@ -0,0 +1,245 @@ +From b434963222bd7ce4b4a7ff493217f3ab00ac734c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:06 +0100 +Subject: [PATCH 53/87] blockdev: Moving parsing of geometry options to drive_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-13-git-send-email-kwolf@redhat.com> +Patchwork-id: 55391 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 12/24] blockdev: Moving parsing of geometry options to drive_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +This moves all of the geometry options (cyls/heads/secs/trans) to +drive_init so that they can only be accessed using legacy functions, but +never with anything blockdev-add related. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit b41a7338cfdeeb913ee4846d79a3f7e221350aed) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 136 +++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 69 insertions(+), 67 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 136 ++++++++++++++++++++++++++++++----------------------------- + 1 files changed, 69 insertions(+), 67 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 9bc3417..d69c4a8 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -336,7 +336,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + const char *serial; + const char *mediastr = ""; + int bus_id, unit_id; +- int cyls, heads, secs, translation; + int max_devs; + int index; + int ro = 0; +@@ -354,8 +353,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + bool has_driver_specific_opts; + BlockDriver *drv = NULL; + +- translation = BIOS_ATA_TRANSLATION_AUTO; +- + /* Check common options by copying from bs_opts to opts, all other options + * stay in bs_opts for processing by bdrv_open(). */ + id = qdict_get_try_str(bs_opts, "id"); +@@ -384,10 +381,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + unit_id = qemu_opt_get_number(opts, "unit", -1); + index = qemu_opt_get_number(opts, "index", -1); + +- cyls = qemu_opt_get_number(opts, "cyls", 0); +- heads = qemu_opt_get_number(opts, "heads", 0); +- secs = qemu_opt_get_number(opts, "secs", 0); +- + snapshot = qemu_opt_get_bool(opts, "snapshot", 0); + ro = qemu_opt_get_bool(opts, "read-only", 0); + copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false); +@@ -397,46 +390,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + + max_devs = if_max_devs[type]; + +- if (cyls || heads || secs) { +- if (cyls < 1) { +- error_report("invalid physical cyls number"); +- return NULL; +- } +- if (heads < 1) { +- error_report("invalid physical heads number"); +- return NULL; +- } +- if (secs < 1) { +- error_report("invalid physical secs number"); +- return NULL; +- } +- } +- +- if ((buf = qemu_opt_get(opts, "trans")) != NULL) { +- if (!cyls) { +- error_report("'%s' trans must be used with cyls, heads and secs", +- buf); +- return NULL; +- } +- if (!strcmp(buf, "none")) +- translation = BIOS_ATA_TRANSLATION_NONE; +- else if (!strcmp(buf, "lba")) +- translation = BIOS_ATA_TRANSLATION_LBA; +- else if (!strcmp(buf, "auto")) +- translation = BIOS_ATA_TRANSLATION_AUTO; +- else { +- error_report("'%s' invalid translation type", buf); +- return NULL; +- } +- } +- +- if (media == MEDIA_CDROM) { +- if (cyls || secs || heads) { +- error_report("CHS can't be set with media=cdrom"); +- return NULL; +- } +- } +- + if ((buf = qemu_opt_get(opts, "discard")) != NULL) { + if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) { + error_report("invalid discard option"); +@@ -612,10 +565,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + dinfo->type = type; + dinfo->bus = bus_id; + dinfo->unit = unit_id; +- dinfo->cyls = cyls; +- dinfo->heads = heads; +- dinfo->secs = secs; +- dinfo->trans = translation; + dinfo->refcount = 1; + if (serial != NULL) { + dinfo->serial = g_strdup(serial); +@@ -745,6 +694,22 @@ QemuOptsList qemu_legacy_drive_opts = { + .name = "if", + .type = QEMU_OPT_STRING, + .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)", ++ },{ ++ .name = "cyls", ++ .type = QEMU_OPT_NUMBER, ++ .help = "number of cylinders (ide disk geometry)", ++ },{ ++ .name = "heads", ++ .type = QEMU_OPT_NUMBER, ++ .help = "number of heads (ide disk geometry)", ++ },{ ++ .name = "secs", ++ .type = QEMU_OPT_NUMBER, ++ .help = "number of sectors (ide disk geometry)", ++ },{ ++ .name = "trans", ++ .type = QEMU_OPT_STRING, ++ .help = "chs translation (auto, lba, none)", + }, + { /* end of list */ } + }, +@@ -758,6 +723,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + QemuOpts *legacy_opts; + DriveMediaType media = MEDIA_DISK; + BlockInterfaceType type; ++ int cyls, heads, secs, translation; + Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ +@@ -836,6 +802,53 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + type = block_default_type; + } + ++ /* Geometry */ ++ cyls = qemu_opt_get_number(legacy_opts, "cyls", 0); ++ heads = qemu_opt_get_number(legacy_opts, "heads", 0); ++ secs = qemu_opt_get_number(legacy_opts, "secs", 0); ++ ++ if (cyls || heads || secs) { ++ if (cyls < 1) { ++ error_report("invalid physical cyls number"); ++ goto fail; ++ } ++ if (heads < 1) { ++ error_report("invalid physical heads number"); ++ goto fail; ++ } ++ if (secs < 1) { ++ error_report("invalid physical secs number"); ++ goto fail; ++ } ++ } ++ ++ translation = BIOS_ATA_TRANSLATION_AUTO; ++ value = qemu_opt_get(legacy_opts, "trans"); ++ if (value != NULL) { ++ if (!cyls) { ++ error_report("'%s' trans must be used with cyls, heads and secs", ++ value); ++ goto fail; ++ } ++ if (!strcmp(value, "none")) { ++ translation = BIOS_ATA_TRANSLATION_NONE; ++ } else if (!strcmp(value, "lba")) { ++ translation = BIOS_ATA_TRANSLATION_LBA; ++ } else if (!strcmp(value, "auto")) { ++ translation = BIOS_ATA_TRANSLATION_AUTO; ++ } else { ++ error_report("'%s' invalid translation type", value); ++ goto fail; ++ } ++ } ++ ++ if (media == MEDIA_CDROM) { ++ if (cyls || secs || heads) { ++ error_report("CHS can't be set with media=cdrom"); ++ goto fail; ++ } ++ } ++ + /* Actual block device init: Functionality shared with blockdev-add */ + dinfo = blockdev_init(bs_opts, type, media); + if (dinfo == NULL) { +@@ -846,6 +859,11 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + dinfo->enable_auto_del = true; + dinfo->opts = all_opts; + ++ dinfo->cyls = cyls; ++ dinfo->heads = heads; ++ dinfo->secs = secs; ++ dinfo->trans = translation; ++ + fail: + qemu_opts_del(legacy_opts); + return dinfo; +@@ -1793,22 +1811,6 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_NUMBER, + .help = "index number", + },{ +- .name = "cyls", +- .type = QEMU_OPT_NUMBER, +- .help = "number of cylinders (ide disk geometry)", +- },{ +- .name = "heads", +- .type = QEMU_OPT_NUMBER, +- .help = "number of heads (ide disk geometry)", +- },{ +- .name = "secs", +- .type = QEMU_OPT_NUMBER, +- .help = "number of sectors (ide disk geometry)", +- },{ +- .name = "trans", +- .type = QEMU_OPT_STRING, +- .help = "chs translation (auto, lba. none)", +- },{ + .name = "snapshot", + .type = QEMU_OPT_BOOL, + .help = "enable/disable snapshot mode", +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Pass-QDict-to-blockdev_init.patch b/SOURCES/kvm-blockdev-Pass-QDict-to-blockdev_init.patch new file mode 100644 index 0000000..823b5ad --- /dev/null +++ b/SOURCES/kvm-blockdev-Pass-QDict-to-blockdev_init.patch @@ -0,0 +1,151 @@ +From 615669f863855880e3adfcc8046e34cdc6d7e8d6 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:03 +0100 +Subject: [PATCH 50/87] blockdev: Pass QDict to blockdev_init() + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-10-git-send-email-kwolf@redhat.com> +Patchwork-id: 55388 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 09/24] blockdev: Pass QDict to blockdev_init() +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +Working on a QDict instead of a QemuOpts that accepts anything is more +in line with bdrv_open(). A QDict is what qmp_blockdev_add() already has +anyway, so this saves additional conversions. And last, but not least, +it allows later patches to easily extract legacy options into a +separate, typed QemuOpts for drive_init() (the untyped QemuOpts that +drive_init already has doesn't allow access to numbers, only strings, +and is therefore useless without conversion). + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +(cherry picked from commit f298d071662af6cf5dc221ee3e3bd0154035e570) + +Conflicts: + blockdev.c + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 34 +++++++++++++++++----------------- + 1 file changed, 17 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 34 +++++++++++++++++----------------- + 1 files changed, 17 insertions(+), 17 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 03ee554..8dd9fd7 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -217,7 +217,10 @@ static void bdrv_format_print(void *opaque, const char *name) + + static void drive_uninit(DriveInfo *dinfo) + { +- qemu_opts_del(dinfo->opts); ++ if (dinfo->opts) { ++ qemu_opts_del(dinfo->opts); ++ } ++ + bdrv_delete(dinfo->bdrv); + g_free(dinfo->id); + QTAILQ_REMOVE(&drives, dinfo, next); +@@ -321,7 +324,8 @@ static bool do_check_io_limits(BlockIOLimit *io_limits, Error **errp) + return true; + } + +-static DriveInfo *blockdev_init(QemuOpts *all_opts, ++/* Takes the ownership of bs_opts */ ++static DriveInfo *blockdev_init(QDict *bs_opts, + BlockInterfaceType block_default_type) + { + const char *buf; +@@ -345,7 +349,6 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + int ret; + Error *error = NULL; + QemuOpts *opts; +- QDict *bs_opts; + const char *id; + bool has_driver_specific_opts; + BlockDriver *drv = NULL; +@@ -353,9 +356,9 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + translation = BIOS_ATA_TRANSLATION_AUTO; + media = MEDIA_DISK; + +- /* Check common options by copying from all_opts to opts, all other options +- * are stored in bs_opts. */ +- id = qemu_opts_id(all_opts); ++ /* Check common options by copying from bs_opts to opts, all other options ++ * stay in bs_opts for processing by bdrv_open(). */ ++ id = qdict_get_try_str(bs_opts, "id"); + opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error); + if (error_is_set(&error)) { + qerror_report_err(error); +@@ -363,8 +366,6 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + return NULL; + } + +- bs_opts = qdict_new(); +- qemu_opts_to_qdict(all_opts, bs_opts); + qemu_opts_absorb_qdict(opts, bs_opts, &error); + if (error_is_set(&error)) { + qerror_report_err(error); +@@ -634,7 +635,6 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + dinfo->heads = heads; + dinfo->secs = secs; + dinfo->trans = translation; +- dinfo->opts = all_opts; + dinfo->refcount = 1; + if (serial != NULL) { + dinfo->serial = g_strdup(serial); +@@ -756,6 +756,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + { + const char *value; + DriveInfo *dinfo; ++ QDict *bs_opts; + + /* Change legacy command line options into QMP ones */ + qemu_opt_rename(all_opts, "iops", "throttling.iops-total"); +@@ -793,14 +794,19 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + qemu_opt_unset(all_opts, "cache"); + } + ++ /* Get a QDict for processing the options */ ++ bs_opts = qdict_new(); ++ qemu_opts_to_qdict(all_opts, bs_opts); ++ + /* Actual block device init: Functionality shared with blockdev-add */ +- dinfo = blockdev_init(all_opts, block_default_type); ++ dinfo = blockdev_init(bs_opts, block_default_type); + if (dinfo == NULL) { + goto fail; + } + + /* Set legacy DriveInfo fields */ + dinfo->enable_auto_del = true; ++ dinfo->opts = all_opts; + + fail: + return dinfo; +@@ -1699,13 +1705,7 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + + qdict_flatten(qdict); + +- QemuOpts *opts = qemu_opts_from_qdict(&qemu_drive_opts, qdict, &local_err); +- if (error_is_set(&local_err)) { +- error_propagate(errp, local_err); +- goto fail; +- } +- +- dinfo = blockdev_init(opts, IF_NONE); ++ dinfo = blockdev_init(qdict, IF_NONE); + if (!dinfo) { + error_setg(errp, "Could not open image"); + goto fail; +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Remove-IF_-check-for-read-only-blockdev_ini.patch b/SOURCES/kvm-blockdev-Remove-IF_-check-for-read-only-blockdev_ini.patch new file mode 100644 index 0000000..e41e0f6 --- /dev/null +++ b/SOURCES/kvm-blockdev-Remove-IF_-check-for-read-only-blockdev_ini.patch @@ -0,0 +1,231 @@ +From 6048f02ce5388f14c0ff1a77122d26be9dffcac0 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 7 Nov 2013 12:41:46 +0100 +Subject: [PATCH 57/87] blockdev: Remove IF_* check for read-only blockdev_init + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-17-git-send-email-kwolf@redhat.com> +Patchwork-id: 55395 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 16/24] blockdev: Remove IF_* check for read-only blockdev_init +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +IF_NONE allows read-only, which makes forbidding it in this place +for other types pretty much pointless. + +Instead, make sure that all devices for which the check would have +errored out check in their init function that they don't get a read-only +BlockDriverState. This catches even cases where IF_NONE and -device is +used. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 4f8a066b5fc254eeaabbbde56ba4f5b29cc68fdf) + +Conflicts: + hw/block/xen_disk.c + hw/sd/milkymist-memcard.c + hw/sd/omap_mmc.c + hw/sd/pl181.c + hw/sd/pxa2xx_mmci.c + hw/sd/sdhci.c + hw/sd/ssi-sd.c + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 6 ------ + hw/block/m25p80.c | 5 +++++ + hw/block/xen_disk.c | 5 +++++ + hw/sd/milkymist-memcard.c | 4 ++++ + hw/sd/omap_mmc.c | 6 ++++++ + hw/sd/pl181.c | 4 ++++ + hw/sd/pxa2xx_mmci.c | 3 +++ + hw/sd/sd.c | 5 +++++ + hw/sd/sdhci.c | 3 +++ + hw/sd/ssi-sd.c | 3 +++ + tests/qemu-iotests/051.out | 5 ++++- + 11 files changed, 42 insertions(+), 7 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 14b357a..680ba22 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -529,12 +529,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + if (media == MEDIA_CDROM) { + /* CDROM is fine for any interface, don't check. */ + ro = 1; +- } else if (ro == 1) { +- if (type != IF_SCSI && type != IF_VIRTIO && type != IF_FLOPPY && +- type != IF_NONE && type != IF_PFLASH) { +- error_report("read-only not supported by this bus type"); +- goto err; +- } + } + + bdrv_flags |= ro ? 0 : BDRV_O_RDWR; +diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c +index 759c84d..ccec5ab 100644 +--- a/hw/block/m25p80.c ++++ b/hw/block/m25p80.c +@@ -619,6 +619,11 @@ static int m25p80_init(SSISlave *ss) + if (dinfo && dinfo->bdrv) { + DB_PRINT_L(0, "Binding to IF_MTD drive\n"); + s->bdrv = dinfo->bdrv; ++ if (bdrv_is_read_only(s->bdrv)) { ++ fprintf(stderr, "Can't use a read-only drive"); ++ return 1; ++ } ++ + /* FIXME: Move to late init */ + if (bdrv_read(s->bdrv, 0, s->storage, DIV_ROUND_UP(s->size, + BDRV_SECTOR_SIZE))) { +diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c +index 2d4d263..498f2e9 100644 +--- a/hw/block/xen_disk.c ++++ b/hw/block/xen_disk.c +@@ -817,6 +817,11 @@ static int blk_connect(struct XenDevice *xendev) + /* setup via qemu cmdline -> already setup for us */ + xen_be_printf(&blkdev->xendev, 2, "get configured bdrv (cmdline setup)\n"); + blkdev->bs = blkdev->dinfo->bdrv; ++ if (bdrv_is_read_only(blkdev->bs) && !readonly) { ++ xen_be_printf(&blkdev->xendev, 0, "Unexpected read-only drive"); ++ blkdev->bs = NULL; ++ return -1; ++ } + } + bdrv_attach_dev_nofail(blkdev->bs, blkdev); + blkdev->file_size = bdrv_getlength(blkdev->bs); +diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c +index d5944bc..a7dfbff 100644 +--- a/hw/sd/milkymist-memcard.c ++++ b/hw/sd/milkymist-memcard.c +@@ -251,6 +251,10 @@ static int milkymist_memcard_init(SysBusDevice *dev) + + dinfo = drive_get_next(IF_SD); + s->card = sd_init(dinfo ? dinfo->bdrv : NULL, 0); ++ if (s->card == NULL) { ++ return -1; ++ } ++ + s->enabled = dinfo ? bdrv_is_inserted(dinfo->bdrv) : 0; + + memory_region_init_io(&s->regs_region, &memcard_mmio_ops, s, +diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c +index d4079cd..aefdc3e 100644 +--- a/hw/sd/omap_mmc.c ++++ b/hw/sd/omap_mmc.c +@@ -593,6 +593,9 @@ struct omap_mmc_s *omap_mmc_init(hwaddr base, + + /* Instantiate the storage */ + s->card = sd_init(bd, 0); ++ if (s->card == NULL) { ++ exit(1); ++ } + + return s; + } +@@ -618,6 +621,9 @@ struct omap_mmc_s *omap2_mmc_init(struct omap_target_agent_s *ta, + + /* Instantiate the storage */ + s->card = sd_init(bd, 0); ++ if (s->card == NULL) { ++ exit(1); ++ } + + s->cdet = qemu_allocate_irqs(omap_mmc_cover_cb, s, 1)[0]; + sd_set_cb(s->card, NULL, s->cdet); +diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c +index c5ad890..a7f85b8 100644 +--- a/hw/sd/pl181.c ++++ b/hw/sd/pl181.c +@@ -486,6 +486,10 @@ static int pl181_init(SysBusDevice *dev) + qdev_init_gpio_out(&s->busdev.qdev, s->cardstatus, 2); + dinfo = drive_get_next(IF_SD); + s->card = sd_init(dinfo ? dinfo->bdrv : NULL, 0); ++ if (s->card == NULL) { ++ return -1; ++ } ++ + return 0; + } + +diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c +index 2db1cab..066d523 100644 +--- a/hw/sd/pxa2xx_mmci.c ++++ b/hw/sd/pxa2xx_mmci.c +@@ -539,6 +539,9 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem, + + /* Instantiate the actual storage */ + s->card = sd_init(bd, 0); ++ if (s->card == NULL) { ++ exit(1); ++ } + + register_savevm(NULL, "pxa2xx_mmci", 0, 0, + pxa2xx_mmci_save, pxa2xx_mmci_load, s); +diff --git a/hw/sd/sd.c b/hw/sd/sd.c +index 2e0ef3e..e816c78 100644 +--- a/hw/sd/sd.c ++++ b/hw/sd/sd.c +@@ -492,6 +492,11 @@ SDState *sd_init(BlockDriverState *bs, bool is_spi) + { + SDState *sd; + ++ if (bdrv_is_read_only(bs)) { ++ fprintf(stderr, "sd_init: Cannot use read-only drive\n"); ++ return NULL; ++ } ++ + sd = (SDState *) g_malloc0(sizeof(SDState)); + sd->buf = qemu_blockalign(bs, 512); + sd->spi = is_spi; +diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c +index 91dc9b0..d8a4987 100644 +--- a/hw/sd/sdhci.c ++++ b/hw/sd/sdhci.c +@@ -1166,6 +1166,9 @@ static void sdhci_initfn(Object *obj) + + di = drive_get_next(IF_SD); + s->card = sd_init(di ? di->bdrv : NULL, 0); ++ if (s->card == NULL) { ++ exit(1); ++ } + s->eject_cb = qemu_allocate_irqs(sdhci_insert_eject_cb, s, 1)[0]; + s->ro_cb = qemu_allocate_irqs(sdhci_card_readonly_cb, s, 1)[0]; + sd_set_cb(s->card, s->ro_cb, s->eject_cb); +diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c +index 4d3c4f6..79ec51a 100644 +--- a/hw/sd/ssi-sd.c ++++ b/hw/sd/ssi-sd.c +@@ -246,6 +246,9 @@ static int ssi_sd_init(SSISlave *dev) + s->mode = SSI_SD_CMD; + dinfo = drive_get_next(IF_SD); + s->sd = sd_init(dinfo ? dinfo->bdrv : NULL, 1); ++ if (s->sd == NULL) { ++ return -1; ++ } + register_savevm(&dev->qdev, "ssi_sd", -1, 1, ssi_sd_save, ssi_sd_load, s); + return 0; + } +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 54a6b3a..4fca1ca 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -98,7 +98,10 @@ QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on: read-only not supported by this bus type ++QEMU X.Y.Z monitor - type 'help' for more information ++(qemu) QEMU_PROG: Can't use a read-only drive ++QEMU_PROG: Device initialization failed. ++QEMU_PROG: Initialization of device ide-hd failed + + Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on + QEMU X.Y.Z monitor - type 'help' for more information +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Remove-media-parameter-from-blockdev_init.patch b/SOURCES/kvm-blockdev-Remove-media-parameter-from-blockdev_init.patch new file mode 100644 index 0000000..ccf803d --- /dev/null +++ b/SOURCES/kvm-blockdev-Remove-media-parameter-from-blockdev_init.patch @@ -0,0 +1,132 @@ +From 0c82774abd19c0f11b5cca29be188176d6f447ef Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:12 +0100 +Subject: [PATCH 59/87] blockdev: Remove 'media' parameter from blockdev_init() + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-19-git-send-email-kwolf@redhat.com> +Patchwork-id: 55396 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 18/24] blockdev: Remove 'media' parameter from blockdev_init() +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +The remaining users shouldn't be there with blockdev-add and are easy to +move to drive_init(). + +Bonus bug fix: As a side effect, CD-ROM drives can now use block drivers +on the read-only whitelist without explicitly specifying read-only=on, +even if a format is explicitly specified. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +(cherry picked from commit e34ef046412431acf5b4e30762390b4048187bb8) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 40 +++++++++++++++------------------------- + 1 file changed, 15 insertions(+), 25 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 40 +++++++++++++++------------------------- + 1 files changed, 15 insertions(+), 25 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 680ba22..d4b18c5 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -328,8 +328,7 @@ typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType; + + /* Takes the ownership of bs_opts */ + static DriveInfo *blockdev_init(QDict *bs_opts, +- BlockInterfaceType type, +- DriveMediaType media) ++ BlockInterfaceType type) + { + const char *buf; + const char *file = NULL; +@@ -489,22 +488,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + /* disk I/O throttling */ + bdrv_set_io_limits(dinfo->bdrv, &io_limits); + +- switch(type) { +- case IF_IDE: +- case IF_SCSI: +- case IF_XEN: +- case IF_NONE: +- dinfo->media_cd = media == MEDIA_CDROM; +- break; +- case IF_SD: +- case IF_FLOPPY: +- case IF_PFLASH: +- case IF_MTD: +- case IF_VIRTIO: +- break; +- default: +- abort(); +- } + if (!file || !*file) { + if (has_driver_specific_opts) { + file = NULL; +@@ -526,11 +509,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + bdrv_flags |= BDRV_O_INCOMING; + } + +- if (media == MEDIA_CDROM) { +- /* CDROM is fine for any interface, don't check. */ +- ro = 1; +- } +- + bdrv_flags |= ro ? 0 : BDRV_O_RDWR; + + if (ro && copy_on_read) { +@@ -703,6 +681,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + media = MEDIA_DISK; + } else if (!strcmp(value, "cdrom")) { + media = MEDIA_CDROM; ++ qdict_put(bs_opts, "read-only", qstring_from_str("on")); + } else { + error_report("'%s' invalid media", value); + goto fail; +@@ -850,7 +829,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + } + + /* Actual block device init: Functionality shared with blockdev-add */ +- dinfo = blockdev_init(bs_opts, type, media); ++ dinfo = blockdev_init(bs_opts, type); + if (dinfo == NULL) { + goto fail; + } +@@ -868,6 +847,17 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + dinfo->unit = unit_id; + dinfo->devaddr = devaddr; + ++ switch(type) { ++ case IF_IDE: ++ case IF_SCSI: ++ case IF_XEN: ++ case IF_NONE: ++ dinfo->media_cd = media == MEDIA_CDROM; ++ break; ++ default: ++ break; ++ } ++ + fail: + qemu_opts_del(legacy_opts); + return dinfo; +@@ -1766,7 +1756,7 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + + qdict_flatten(qdict); + +- dinfo = blockdev_init(qdict, IF_NONE, MEDIA_DISK); ++ dinfo = blockdev_init(qdict, IF_NONE); + if (!dinfo) { + error_setg(errp, "Could not open image"); + goto fail; +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Rename-I-O-throttling-options-for-QMP.patch b/SOURCES/kvm-blockdev-Rename-I-O-throttling-options-for-QMP.patch new file mode 100644 index 0000000..d027299 --- /dev/null +++ b/SOURCES/kvm-blockdev-Rename-I-O-throttling-options-for-QMP.patch @@ -0,0 +1,145 @@ +From 6407962af839506d7dcd956d48986324264a3587 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:19 +0200 +Subject: [PATCH 28/38] blockdev: Rename I/O throttling options for QMP + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-29-git-send-email-kwolf@redhat.com> +Patchwork-id: 54215 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 28/32] blockdev: Rename I/O throttling options for QMP +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +In QMP, we want to use dashes instead of underscores in QMP argument +names, and use nested options for throttling. + +The new option names affect the command line as well, but for +compatibility drive_init() will convert the old option names before +calling into the code that will be shared between -drive and +blockdev-add. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 57975222b6a928dd4a4a8a7b37093cc8ecba5045) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 52 +++++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 39 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 52 +++++++++++++++++++++++++++++++++++++++------------- + 1 files changed, 39 insertions(+), 13 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 1c9ca4d..08b1aaf 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -312,7 +312,8 @@ static bool do_check_io_limits(BlockIOLimit *io_limits, Error **errp) + return true; + } + +-DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) ++static DriveInfo *blockdev_init(QemuOpts *all_opts, ++ BlockInterfaceType block_default_type) + { + const char *buf; + const char *file = NULL; +@@ -485,17 +486,17 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + + /* disk I/O throttling */ + io_limits.bps[BLOCK_IO_LIMIT_TOTAL] = +- qemu_opt_get_number(opts, "bps", 0); ++ qemu_opt_get_number(opts, "throttling.bps-total", 0); + io_limits.bps[BLOCK_IO_LIMIT_READ] = +- qemu_opt_get_number(opts, "bps_rd", 0); ++ qemu_opt_get_number(opts, "throttling.bps-read", 0); + io_limits.bps[BLOCK_IO_LIMIT_WRITE] = +- qemu_opt_get_number(opts, "bps_wr", 0); ++ qemu_opt_get_number(opts, "throttling.bps-write", 0); + io_limits.iops[BLOCK_IO_LIMIT_TOTAL] = +- qemu_opt_get_number(opts, "iops", 0); ++ qemu_opt_get_number(opts, "throttling.iops-total", 0); + io_limits.iops[BLOCK_IO_LIMIT_READ] = +- qemu_opt_get_number(opts, "iops_rd", 0); ++ qemu_opt_get_number(opts, "throttling.iops-read", 0); + io_limits.iops[BLOCK_IO_LIMIT_WRITE] = +- qemu_opt_get_number(opts, "iops_wr", 0); ++ qemu_opt_get_number(opts, "throttling.iops-write", 0); + + if (!do_check_io_limits(&io_limits, &error)) { + error_report("%s", error_get_pretty(error)); +@@ -726,6 +727,31 @@ err: + return NULL; + } + ++static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to) ++{ ++ const char *value; ++ ++ value = qemu_opt_get(opts, from); ++ if (value) { ++ qemu_opt_set(opts, to, value); ++ qemu_opt_unset(opts, from); ++ } ++} ++ ++DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) ++{ ++ /* Change legacy command line options into QMP ones */ ++ qemu_opt_rename(all_opts, "iops", "throttling.iops-total"); ++ qemu_opt_rename(all_opts, "iops_rd", "throttling.iops-read"); ++ qemu_opt_rename(all_opts, "iops_wr", "throttling.iops-write"); ++ ++ qemu_opt_rename(all_opts, "bps", "throttling.bps-total"); ++ qemu_opt_rename(all_opts, "bps_rd", "throttling.bps-read"); ++ qemu_opt_rename(all_opts, "bps_wr", "throttling.bps-write"); ++ ++ return blockdev_init(all_opts, block_default_type); ++} ++ + void do_commit(Monitor *mon, const QDict *qdict) + { + const char *device = qdict_get_str(qdict, "device"); +@@ -1679,27 +1705,27 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_BOOL, + .help = "open drive file as read-only", + },{ +- .name = "iops", ++ .name = "throttling.iops-total", + .type = QEMU_OPT_NUMBER, + .help = "limit total I/O operations per second", + },{ +- .name = "iops_rd", ++ .name = "throttling.iops-read", + .type = QEMU_OPT_NUMBER, + .help = "limit read operations per second", + },{ +- .name = "iops_wr", ++ .name = "throttling.iops-write", + .type = QEMU_OPT_NUMBER, + .help = "limit write operations per second", + },{ +- .name = "bps", ++ .name = "throttling.bps-total", + .type = QEMU_OPT_NUMBER, + .help = "limit total bytes per second", + },{ +- .name = "bps_rd", ++ .name = "throttling.bps-read", + .type = QEMU_OPT_NUMBER, + .help = "limit read bytes per second", + },{ +- .name = "bps_wr", ++ .name = "throttling.bps-write", + .type = QEMU_OPT_NUMBER, + .help = "limit write bytes per second", + },{ +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Rename-readonly-option-to-read-only.patch b/SOURCES/kvm-blockdev-Rename-readonly-option-to-read-only.patch new file mode 100644 index 0000000..9b70cdd --- /dev/null +++ b/SOURCES/kvm-blockdev-Rename-readonly-option-to-read-only.patch @@ -0,0 +1,92 @@ +From f093ad3c94cae221641ea0dd13ec3cf666a0fccd Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 19 Jul 2013 20:07:29 +0200 +Subject: [PATCH 30/38] blockdev: Rename 'readonly' option to 'read-only' + +Message-id: <1378736903-18489-31-git-send-email-kwolf@redhat.com> +Patchwork-id: 54217 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 30/32] blockdev: Rename 'readonly' option to 'read-only' +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Option name cleanup before it becomes a QMP API. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 0f227a947004aa9043d4386f4a47d6739499b88f) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 10 ++++++---- + tests/qemu-iotests/051.out | 2 +- + 2 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 08b1aaf..5d4f2f8 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -378,7 +378,7 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + secs = qemu_opt_get_number(opts, "secs", 0); + + snapshot = qemu_opt_get_bool(opts, "snapshot", 0); +- ro = qemu_opt_get_bool(opts, "readonly", 0); ++ ro = qemu_opt_get_bool(opts, "read-only", 0); + copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false); + + file = qemu_opt_get(opts, "file"); +@@ -684,7 +684,7 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + } else if (ro == 1) { + if (type != IF_SCSI && type != IF_VIRTIO && type != IF_FLOPPY && + type != IF_NONE && type != IF_PFLASH) { +- error_report("readonly not supported by this bus type"); ++ error_report("read-only not supported by this bus type"); + goto err; + } + } +@@ -692,7 +692,7 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + bdrv_flags |= ro ? 0 : BDRV_O_RDWR; + + if (ro && copy_on_read) { +- error_report("warning: disabling copy_on_read on readonly drive"); ++ error_report("warning: disabling copy_on_read on read-only drive"); + } + + QINCREF(bs_opts); +@@ -749,6 +749,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + qemu_opt_rename(all_opts, "bps_rd", "throttling.bps-read"); + qemu_opt_rename(all_opts, "bps_wr", "throttling.bps-write"); + ++ qemu_opt_rename(all_opts, "readonly", "read-only"); ++ + return blockdev_init(all_opts, block_default_type); + } + +@@ -1701,7 +1703,7 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_STRING, + .help = "pci address (virtio only)", + },{ +- .name = "readonly", ++ .name = "read-only", + .type = QEMU_OPT_BOOL, + .help = "open drive file as read-only", + },{ +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 95ff245..8630382 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -137,7 +137,7 @@ QEMU 1.5.50 monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on: readonly not supported by this bus type ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on: read-only not supported by this bus type + + Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on + QEMU 1.5.50 monitor - type 'help' for more information +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Separate-ID-generation-from-DriveInfo-creat.patch b/SOURCES/kvm-blockdev-Separate-ID-generation-from-DriveInfo-creat.patch new file mode 100644 index 0000000..dec43d4 --- /dev/null +++ b/SOURCES/kvm-blockdev-Separate-ID-generation-from-DriveInfo-creat.patch @@ -0,0 +1,114 @@ +From abc45043366f4031947a55c23ae0533d2409413e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:02 +0100 +Subject: [PATCH 49/87] blockdev: Separate ID generation from DriveInfo creation + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-9-git-send-email-kwolf@redhat.com> +Patchwork-id: 55387 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 08/24] blockdev: Separate ID generation from DriveInfo creation +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +blockdev-add shouldn't automatically generate IDs, but will keep most of +the DriveInfo creation code. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Wenchao Xia +Reviewed-by: Eric Blake +(cherry picked from commit 326642bc7f0ff95a0c08db527861a9a114a109da) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 32 +++++++++++++++++--------------- + include/qemu/option.h | 1 + + util/qemu-option.c | 6 ++++++ + 3 files changed, 24 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 32 +++++++++++++++++--------------- + include/qemu/option.h | 1 + + util/qemu-option.c | 6 ++++++ + 3 files changed, 24 insertions(+), 15 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index d4f66db..03ee554 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -604,23 +604,25 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + return NULL; + } + +- /* init */ +- +- dinfo = g_malloc0(sizeof(*dinfo)); +- if ((buf = qemu_opts_id(opts)) != NULL) { +- dinfo->id = g_strdup(buf); +- } else { +- /* no id supplied -> create one */ +- dinfo->id = g_malloc0(32); +- if (type == IF_IDE || type == IF_SCSI) ++ /* no id supplied -> create one */ ++ if (qemu_opts_id(opts) == NULL) { ++ char *new_id; ++ if (type == IF_IDE || type == IF_SCSI) { + mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd"; +- if (max_devs) +- snprintf(dinfo->id, 32, "%s%i%s%i", +- if_name[type], bus_id, mediastr, unit_id); +- else +- snprintf(dinfo->id, 32, "%s%s%i", +- if_name[type], mediastr, unit_id); ++ } ++ if (max_devs) { ++ new_id = g_strdup_printf("%s%i%s%i", if_name[type], bus_id, ++ mediastr, unit_id); ++ } else { ++ new_id = g_strdup_printf("%s%s%i", if_name[type], ++ mediastr, unit_id); ++ } ++ qemu_opts_set_id(opts, new_id); + } ++ ++ /* init */ ++ dinfo = g_malloc0(sizeof(*dinfo)); ++ dinfo->id = g_strdup(qemu_opts_id(opts)); + dinfo->bdrv = bdrv_new(dinfo->id); + dinfo->bdrv->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0; + dinfo->bdrv->read_only = ro; +diff --git a/include/qemu/option.h b/include/qemu/option.h +index 13f5e72..f5ebb05 100644 +--- a/include/qemu/option.h ++++ b/include/qemu/option.h +@@ -139,6 +139,7 @@ void qemu_opts_loc_restore(QemuOpts *opts); + int qemu_opts_set(QemuOptsList *list, const char *id, + const char *name, const char *value); + const char *qemu_opts_id(QemuOpts *opts); ++void qemu_opts_set_id(QemuOpts *opts, char *id); + void qemu_opts_del(QemuOpts *opts); + void qemu_opts_validate(QemuOpts *opts, const QemuOptDesc *desc, Error **errp); + int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname); +diff --git a/util/qemu-option.c b/util/qemu-option.c +index 5d686c8..fcbd1b8 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -825,6 +825,12 @@ const char *qemu_opts_id(QemuOpts *opts) + return opts->id; + } + ++/* The id string will be g_free()d by qemu_opts_del */ ++void qemu_opts_set_id(QemuOpts *opts, char *id) ++{ ++ opts->id = id; ++} ++ + void qemu_opts_del(QemuOpts *opts) + { + QemuOpt *opt; +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-Split-up-cache-option.patch b/SOURCES/kvm-blockdev-Split-up-cache-option.patch new file mode 100644 index 0000000..296d2f6 --- /dev/null +++ b/SOURCES/kvm-blockdev-Split-up-cache-option.patch @@ -0,0 +1,133 @@ +From d106c599acad51da2d0eff0d3f87cff867d52f18 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:22 +0200 +Subject: [PATCH 31/38] blockdev: Split up 'cache' option + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-32-git-send-email-kwolf@redhat.com> +Patchwork-id: 54218 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 31/32] blockdev: Split up 'cache' option +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +The old 'cache' option really encodes three different boolean flags into +a cache mode name, without providing all combinations. Make them three +separate options instead and translate the old option to the new ones +for drive_init(). + +The specific boolean options take precedence if the old cache option is +specified as well, so the following options are equivalent: + +-drive file=x,cache=none,cache.no-flush=true +-drive file=x,cache.writeback=true,cache.direct=true,cache.no-flush=true + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 29c4e2b50d95f4a15c3dd62b39f3402f05a34907) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 47 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++---------- + 1 files changed, 47 insertions(+), 10 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 5d4f2f8..8ffed03 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -452,12 +452,15 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + } + } + +- bdrv_flags |= BDRV_O_CACHE_WB; +- if ((buf = qemu_opt_get(opts, "cache")) != NULL) { +- if (bdrv_parse_cache_flags(buf, &bdrv_flags) != 0) { +- error_report("invalid cache option"); +- return NULL; +- } ++ bdrv_flags = 0; ++ if (qemu_opt_get_bool(opts, "cache.writeback", true)) { ++ bdrv_flags |= BDRV_O_CACHE_WB; ++ } ++ if (qemu_opt_get_bool(opts, "cache.direct", false)) { ++ bdrv_flags |= BDRV_O_NOCACHE; ++ } ++ if (qemu_opt_get_bool(opts, "cache.no-flush", true)) { ++ bdrv_flags |= BDRV_O_NO_FLUSH; + } + + #ifdef CONFIG_LINUX_AIO +@@ -740,6 +743,8 @@ static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to) + + DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + { ++ const char *value; ++ + /* Change legacy command line options into QMP ones */ + qemu_opt_rename(all_opts, "iops", "throttling.iops-total"); + qemu_opt_rename(all_opts, "iops_rd", "throttling.iops-read"); +@@ -751,6 +756,31 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + + qemu_opt_rename(all_opts, "readonly", "read-only"); + ++ value = qemu_opt_get(all_opts, "cache"); ++ if (value) { ++ int flags = 0; ++ ++ if (bdrv_parse_cache_flags(value, &flags) != 0) { ++ error_report("invalid cache option"); ++ return NULL; ++ } ++ ++ /* Specific options take precedence */ ++ if (!qemu_opt_get(all_opts, "cache.writeback")) { ++ qemu_opt_set_bool(all_opts, "cache.writeback", ++ !!(flags & BDRV_O_CACHE_WB)); ++ } ++ if (!qemu_opt_get(all_opts, "cache.direct")) { ++ qemu_opt_set_bool(all_opts, "cache.direct", ++ !!(flags & BDRV_O_NOCACHE)); ++ } ++ if (!qemu_opt_get(all_opts, "cache.no-flush")) { ++ qemu_opt_set_bool(all_opts, "cache.no-flush", ++ !!(flags & BDRV_O_NO_FLUSH)); ++ } ++ qemu_opt_unset(all_opts, "cache"); ++ } ++ + return blockdev_init(all_opts, block_default_type); + } + +@@ -1674,10 +1704,17 @@ QemuOptsList qemu_common_drive_opts = { + .type = QEMU_OPT_STRING, + .help = "discard operation (ignore/off, unmap/on)", + },{ +- .name = "cache", +- .type = QEMU_OPT_STRING, +- .help = "host cache usage (none, writeback, writethrough, " +- "directsync, unsafe)", ++ .name = "cache.writeback", ++ .type = QEMU_OPT_BOOL, ++ .help = "enables writeback mode for any caches", ++ },{ ++ .name = "cache.direct", ++ .type = QEMU_OPT_BOOL, ++ .help = "enables use of O_DIRECT (bypass the host page cache)", ++ },{ ++ .name = "cache.no-flush", ++ .type = QEMU_OPT_BOOL, ++ .help = "ignore any flush requests for the device", + },{ + .name = "aio", + .type = QEMU_OPT_STRING, +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-blockdev-add-QMP-command.patch b/SOURCES/kvm-blockdev-blockdev-add-QMP-command.patch new file mode 100644 index 0000000..4b378c9 --- /dev/null +++ b/SOURCES/kvm-blockdev-blockdev-add-QMP-command.patch @@ -0,0 +1,422 @@ +From 0404a8f41dd2d4b7a76bdf07dac6b267adf694cb Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:01 +0100 +Subject: [PATCH 48/87] blockdev: 'blockdev-add' QMP command + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-8-git-send-email-kwolf@redhat.com> +Patchwork-id: 55386 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 07/24] blockdev: 'blockdev-add' QMP command +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +For examples see the changes to qmp-commands.hx. + +Signed-off-by: Kevin Wolf +(cherry picked from commit d26c9a15738147a8dccc451c6f6d1ddc2305713d) + +Conflicts: + qapi-schema.json + qmp-commands.hx + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 57 ++++++++++++++ + qapi-schema.json | 236 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + qmp-commands.hx | 55 +++++++++++++ + 3 files changed, 348 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 57 +++++++++++++ + qapi-schema.json | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + qmp-commands.hx | 55 +++++++++++++ + 3 files changed, 348 insertions(+), 0 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index e379a91..d4f66db 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -38,6 +38,8 @@ + #include "qemu/option.h" + #include "qemu/config-file.h" + #include "qapi/qmp/types.h" ++#include "qapi-visit.h" ++#include "qapi/qmp-output-visitor.h" + #include "sysemu/sysemu.h" + #include "block/block_int.h" + #include "qmp-commands.h" +@@ -1656,6 +1658,61 @@ void qmp_block_job_complete(const char *device, Error **errp) + block_job_complete(job, errp); + } + ++void qmp_blockdev_add(BlockdevOptions *options, Error **errp) ++{ ++ QmpOutputVisitor *ov = qmp_output_visitor_new(); ++ QObject *obj; ++ QDict *qdict; ++ DriveInfo *dinfo; ++ Error *local_err = NULL; ++ ++ /* Require an ID in the top level */ ++ if (!options->has_id) { ++ error_setg(errp, "Block device needs an ID"); ++ goto fail; ++ } ++ ++ /* TODO Sort it out in raw-posix and drive_init: Reject aio=native with ++ * cache.direct=false instead of silently switching to aio=threads, except ++ * if called from drive_init. ++ * ++ * For now, simply forbidding the combination for all drivers will do. */ ++ if (options->has_aio && options->aio == BLOCKDEV_AIO_OPTIONS_NATIVE) { ++ bool direct = options->cache->has_direct && options->cache->direct; ++ if (!options->has_cache && !direct) { ++ error_setg(errp, "aio=native requires cache.direct=true"); ++ goto fail; ++ } ++ } ++ ++ visit_type_BlockdevOptions(qmp_output_get_visitor(ov), ++ &options, NULL, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ goto fail; ++ } ++ ++ obj = qmp_output_get_qobject(ov); ++ qdict = qobject_to_qdict(obj); ++ ++ qdict_flatten(qdict); ++ ++ QemuOpts *opts = qemu_opts_from_qdict(&qemu_drive_opts, qdict, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ goto fail; ++ } ++ ++ dinfo = blockdev_init(opts, IF_NONE); ++ if (!dinfo) { ++ error_setg(errp, "Could not open image"); ++ goto fail; ++ } ++ ++fail: ++ qmp_output_visitor_cleanup(ov); ++} ++ + static void do_qmp_query_block_jobs_one(void *opaque, BlockDriverState *bs) + { + BlockJobInfoList **prev = opaque; +diff --git a/qapi-schema.json b/qapi-schema.json +index 12a360a..32b41b0 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -3674,3 +3674,239 @@ + '*cpuid-input-ecx': 'int', + 'cpuid-register': 'X86CPURegister32', + 'features': 'int' } } ++ ++ ++## ++# @BlockdevDiscardOptions ++# ++# Determines how to handle discard requests. ++# ++# @ignore: Ignore the request ++# @unmap: Forward as an unmap request ++# ++# Since: 1.7 ++## ++{ 'enum': 'BlockdevDiscardOptions', ++ 'data': [ 'ignore', 'unmap' ] } ++ ++## ++# @BlockdevAioOptions ++# ++# Selects the AIO backend to handle I/O requests ++# ++# @threads: Use qemu's thread pool ++# @native: Use native AIO backend (only Linux and Windows) ++# ++# Since: 1.7 ++## ++{ 'enum': 'BlockdevAioOptions', ++ 'data': [ 'threads', 'native' ] } ++ ++## ++# @BlockdevCacheOptions ++# ++# Includes cache-related options for block devices ++# ++# @writeback: #optional enables writeback mode for any caches (default: true) ++# @direct: #optional enables use of O_DIRECT (bypass the host page cache; ++# default: false) ++# @no-flush: #optional ignore any flush requests for the device (default: ++# false) ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevCacheOptions', ++ 'data': { '*writeback': 'bool', ++ '*direct': 'bool', ++ '*no-flush': 'bool' } } ++ ++## ++# @BlockdevOptionsBase ++# ++# Options that are available for all block devices, independent of the block ++# driver. ++# ++# @driver: block driver name ++# @id: #optional id by which the new block device can be referred to. ++# This is a required option on the top level of blockdev-add, and ++# currently not allowed on any other level. ++# @discard: #optional discard-related options (default: ignore) ++# @cache: #optional cache-related options ++# @aio: #optional AIO backend (default: threads) ++# @rerror: #optional how to handle read errors on the device ++# (default: report) ++# @werror: #optional how to handle write errors on the device ++# (default: enospc) ++# @read-only: #optional whether the block device should be read-only ++# (default: false) ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevOptionsBase', ++ 'data': { 'driver': 'str', ++ '*id': 'str', ++ '*discard': 'BlockdevDiscardOptions', ++ '*cache': 'BlockdevCacheOptions', ++ '*aio': 'BlockdevAioOptions', ++ '*rerror': 'BlockdevOnError', ++ '*werror': 'BlockdevOnError', ++ '*read-only': 'bool' } } ++ ++## ++# @BlockdevOptionsFile ++# ++# Driver specific block device options for the file backend and similar ++# protocols. ++# ++# @filename: path to the image file ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevOptionsFile', ++ 'data': { 'filename': 'str' } } ++ ++## ++# @BlockdevOptionsVVFAT ++# ++# Driver specific block device options for the vvfat protocol. ++# ++# @dir: directory to be exported as FAT image ++# @fat-type: #optional FAT type: 12, 16 or 32 ++# @floppy: #optional whether to export a floppy image (true) or ++# partitioned hard disk (false; default) ++# @rw: #optional whether to allow write operations (default: false) ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevOptionsVVFAT', ++ 'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool', ++ '*rw': 'bool' } } ++ ++## ++# @BlockdevOptionsGenericFormat ++# ++# Driver specific block device options for image format that have no option ++# besides their data source. ++# ++# @file: reference to or definition of the data source block device ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevOptionsGenericFormat', ++ 'data': { 'file': 'BlockdevRef' } } ++ ++## ++# @BlockdevOptionsGenericCOWFormat ++# ++# Driver specific block device options for image format that have no option ++# besides their data source and an optional backing file. ++# ++# @backing: #optional reference to or definition of the backing file block ++# device (if missing, taken from the image file content). It is ++# allowed to pass an empty string here in order to disable the ++# default backing file. ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevOptionsGenericCOWFormat', ++ 'base': 'BlockdevOptionsGenericFormat', ++ 'data': { '*backing': 'BlockdevRef' } } ++ ++## ++# @BlockdevOptionsQcow2 ++# ++# Driver specific block device options for qcow2. ++# ++# @lazy-refcounts: #optional whether to enable the lazy refcounts ++# feature (default is taken from the image file) ++# ++# @pass-discard-request: #optional whether discard requests to the qcow2 ++# device should be forwarded to the data source ++# ++# @pass-discard-snapshot: #optional whether discard requests for the data source ++# should be issued when a snapshot operation (e.g. ++# deleting a snapshot) frees clusters in the qcow2 file ++# ++# @pass-discard-other: #optional whether discard requests for the data source ++# should be issued on other occasions where a cluster ++# gets freed ++# ++# Since: 1.7 ++## ++{ 'type': 'BlockdevOptionsQcow2', ++ 'base': 'BlockdevOptionsGenericCOWFormat', ++ 'data': { '*lazy-refcounts': 'bool', ++ '*pass-discard-request': 'bool', ++ '*pass-discard-snapshot': 'bool', ++ '*pass-discard-other': 'bool' } } ++ ++## ++# @BlockdevOptions ++# ++# Options for creating a block device. ++# ++# Since: 1.7 ++## ++{ 'union': 'BlockdevOptions', ++ 'base': 'BlockdevOptionsBase', ++ 'discriminator': 'driver', ++ 'data': { ++ 'file': 'BlockdevOptionsFile', ++ 'http': 'BlockdevOptionsFile', ++ 'https': 'BlockdevOptionsFile', ++ 'ftp': 'BlockdevOptionsFile', ++ 'ftps': 'BlockdevOptionsFile', ++ 'tftp': 'BlockdevOptionsFile', ++# TODO gluster: Wait for structured options ++# TODO iscsi: Wait for structured options ++# TODO nbd: Should take InetSocketAddress for 'host'? ++# TODO rbd: Wait for structured options ++# TODO sheepdog: Wait for structured options ++# TODO ssh: Should take InetSocketAddress for 'host'? ++ 'vvfat': 'BlockdevOptionsVVFAT', ++ ++# TODO blkdebug: Wait for structured options ++# TODO blkverify: Wait for structured options ++ ++ 'bochs': 'BlockdevOptionsGenericFormat', ++ 'cloop': 'BlockdevOptionsGenericFormat', ++ 'cow': 'BlockdevOptionsGenericCOWFormat', ++ 'dmg': 'BlockdevOptionsGenericFormat', ++ 'parallels': 'BlockdevOptionsGenericFormat', ++ 'qcow': 'BlockdevOptionsGenericCOWFormat', ++ 'qcow2': 'BlockdevOptionsQcow2', ++ 'qed': 'BlockdevOptionsGenericCOWFormat', ++ 'raw': 'BlockdevOptionsGenericFormat', ++ 'vdi': 'BlockdevOptionsGenericFormat', ++ 'vhdx': 'BlockdevOptionsGenericFormat', ++ 'vmdk': 'BlockdevOptionsGenericCOWFormat', ++ 'vpc': 'BlockdevOptionsGenericFormat' ++ } } ++ ++## ++# @BlockdevRef ++# ++# Reference to a block device. ++# ++# @definition: defines a new block device inline ++# @reference: references the ID of an existing block device. An ++# empty string means that no block device should be ++# referenced. ++# ++# Since: 1.7 ++## ++{ 'union': 'BlockdevRef', ++ 'discriminator': {}, ++ 'data': { 'definition': 'BlockdevOptions', ++ 'reference': 'str' } } ++ ++## ++# @blockdev-add: ++# ++# Creates a new block device. ++# ++# @options: block device options for the new device ++# ++# Since: 1.7 ++## ++{ 'command': 'blockdev-add', 'data': { 'options': 'BlockdevOptions' } } +diff --git a/qmp-commands.hx b/qmp-commands.hx +index e40d54d..d1f6f8b 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -2941,3 +2941,58 @@ Example: + <- { "return": {} } + + EQMP ++ ++ { ++ .name = "blockdev-add", ++ .args_type = "options:q", ++ .mhandler.cmd_new = qmp_marshal_input_blockdev_add, ++ }, ++ ++SQMP ++blockdev-add ++------------ ++ ++Add a block device. ++ ++Arguments: ++ ++- "options": block driver options ++ ++Example (1): ++ ++-> { "execute": "blockdev-add", ++ "arguments": { "options" : { "driver": "qcow2", ++ "file": { "driver": "file", ++ "filename": "test.qcow2" } } } } ++<- { "return": {} } ++ ++Example (2): ++ ++-> { "execute": "blockdev-add", ++ "arguments": { ++ "options": { ++ "driver": "qcow2", ++ "id": "my_disk", ++ "discard": "unmap", ++ "cache": { ++ "direct": true, ++ "writeback": true ++ }, ++ "file": { ++ "driver": "file", ++ "filename": "/tmp/test.qcow2" ++ }, ++ "backing": { ++ "driver": "raw", ++ "file": { ++ "driver": "file", ++ "filename": "/dev/fdset/4" ++ } ++ } ++ } ++ } ++ } ++ ++<- { "return": {} } ++ ++EQMP +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-blockdev_init-error-conversion.patch b/SOURCES/kvm-blockdev-blockdev_init-error-conversion.patch new file mode 100644 index 0000000..b2b2c8f --- /dev/null +++ b/SOURCES/kvm-blockdev-blockdev_init-error-conversion.patch @@ -0,0 +1,205 @@ +From 8e44095beac9a5c6da5e91339c5cf7746afaa623 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 7 Nov 2013 12:53:07 +0100 +Subject: [PATCH 61/87] blockdev: blockdev_init() error conversion + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-21-git-send-email-kwolf@redhat.com> +Patchwork-id: 55399 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 20/24] blockdev: blockdev_init() error conversion +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +This gives us meaningful error messages for the blockdev-add QMP +command. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +(cherry picked from commit b681072d2005911b79835d2a6af208eba3983a48) + +Conflicts: + blockdev.c + +Conflict caused by do_check_io_limits(), which has been replaced by +check_throttle_config() in upstream (commit cc0681c4 'block: Enable the +new throttling code in the block layer.') + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 56 +++++++++++++++++++++++++++++++------------------------- + 1 files changed, 31 insertions(+), 25 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index cbf01eb..a248480 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -275,7 +275,7 @@ static void drive_put_ref_bh_schedule(DriveInfo *dinfo) + } + #endif + +-static int parse_block_error_action(const char *buf, bool is_read) ++static int parse_block_error_action(const char *buf, bool is_read, Error **errp) + { + if (!strcmp(buf, "ignore")) { + return BLOCKDEV_ON_ERROR_IGNORE; +@@ -286,8 +286,8 @@ static int parse_block_error_action(const char *buf, bool is_read) + } else if (!strcmp(buf, "report")) { + return BLOCKDEV_ON_ERROR_REPORT; + } else { +- error_report("'%s' invalid %s error action", +- buf, is_read ? "read" : "write"); ++ error_setg(errp, "'%s' invalid %s error action", ++ buf, is_read ? "read" : "write"); + return -1; + } + } +@@ -328,7 +328,8 @@ typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType; + + /* Takes the ownership of bs_opts */ + static DriveInfo *blockdev_init(QDict *bs_opts, +- BlockInterfaceType type) ++ BlockInterfaceType type, ++ Error **errp) + { + const char *buf; + const char *file = NULL; +@@ -352,15 +353,13 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + id = qdict_get_try_str(bs_opts, "id"); + opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error); + if (error_is_set(&error)) { +- qerror_report_err(error); +- error_free(error); ++ error_propagate(errp, error); + return NULL; + } + + qemu_opts_absorb_qdict(opts, bs_opts, &error); + if (error_is_set(&error)) { +- qerror_report_err(error); +- error_free(error); ++ error_propagate(errp, error); + return NULL; + } + +@@ -380,7 +379,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + + if ((buf = qemu_opt_get(opts, "discard")) != NULL) { + if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) { +- error_report("invalid discard option"); ++ error_setg(errp, "invalid discard option"); + return NULL; + } + } +@@ -403,7 +402,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + } else if (!strcmp(buf, "threads")) { + /* this is the default */ + } else { +- error_report("invalid aio option"); ++ error_setg(errp, "invalid aio option"); + return NULL; + } + } +@@ -419,7 +418,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + + drv = bdrv_find_whitelisted_format(buf, ro); + if (!drv) { +- error_report("'%s' invalid format", buf); ++ error_setg(errp, "'%s' invalid format", buf); + return NULL; + } + } +@@ -439,20 +438,20 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + qemu_opt_get_number(opts, "throttling.iops-write", 0); + + if (!do_check_io_limits(&io_limits, &error)) { +- error_report("%s", error_get_pretty(error)); +- error_free(error); ++ error_propagate(errp, error); + return NULL; + } + + on_write_error = BLOCKDEV_ON_ERROR_ENOSPC; + if ((buf = qemu_opt_get(opts, "werror")) != NULL) { + if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO && type != IF_NONE) { +- error_report("werror is not supported by this bus type"); ++ error_setg(errp, "werror is not supported by this bus type"); + return NULL; + } + +- on_write_error = parse_block_error_action(buf, 0); +- if (on_write_error < 0) { ++ on_write_error = parse_block_error_action(buf, 0, &error); ++ if (error_is_set(&error)) { ++ error_propagate(errp, error); + return NULL; + } + } +@@ -464,8 +463,9 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + return NULL; + } + +- on_read_error = parse_block_error_action(buf, 1); +- if (on_read_error < 0) { ++ on_read_error = parse_block_error_action(buf, 1, &error); ++ if (error_is_set(&error)) { ++ error_propagate(errp, error); + return NULL; + } + } +@@ -515,8 +515,9 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv, &error); + + if (ret < 0) { +- error_report("could not open disk image %s: %s", +- file ?: dinfo->id, error_get_pretty(error)); ++ error_setg(errp, "could not open disk image %s: %s", ++ file ?: dinfo->id, error_get_pretty(error)); ++ error_free(error); + goto err; + } + +@@ -852,9 +853,15 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + } + + /* Actual block device init: Functionality shared with blockdev-add */ +- dinfo = blockdev_init(bs_opts, type); ++ dinfo = blockdev_init(bs_opts, type, &local_err); + if (dinfo == NULL) { ++ if (error_is_set(&local_err)) { ++ qerror_report_err(local_err); ++ error_free(local_err); ++ } + goto fail; ++ } else { ++ assert(!error_is_set(&local_err)); + } + + /* Set legacy DriveInfo fields */ +@@ -1745,7 +1752,6 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + QmpOutputVisitor *ov = qmp_output_visitor_new(); + QObject *obj; + QDict *qdict; +- DriveInfo *dinfo; + Error *local_err = NULL; + + /* Require an ID in the top level */ +@@ -1779,9 +1785,9 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) + + qdict_flatten(qdict); + +- dinfo = blockdev_init(qdict, IF_NONE); +- if (!dinfo) { +- error_setg(errp, "Could not open image"); ++ blockdev_init(qdict, IF_NONE, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); + goto fail; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-do-not-default-cache.no-flush-to-true.patch b/SOURCES/kvm-blockdev-do-not-default-cache.no-flush-to-true.patch new file mode 100644 index 0000000..8a7f5a0 --- /dev/null +++ b/SOURCES/kvm-blockdev-do-not-default-cache.no-flush-to-true.patch @@ -0,0 +1,48 @@ +From ae3974ef64713d94dcb2766e3d8f89edc1a01c0c Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 23 Sep 2013 17:08:01 +0200 +Subject: [PATCH 03/29] blockdev: do not default cache.no-flush to true + +RH-Author: Paolo Bonzini +Message-id: <1379956082-3646-2-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54491 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 1/2] blockdev: do not default cache.no-flush to true +Bugzilla: 1009993 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +That's why all my VMs were so fast lately. :) + +This changed in 1.6.0 by mistake in patch 29c4e2b (blockdev: Split up +'cache' option, 2013-07-18). + +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 1df6fa4bc6754a170cf511a78e2e6fef84eb5228) +--- + blockdev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 8ffed03..073f553 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -459,7 +459,7 @@ static DriveInfo *blockdev_init(QemuOpts *all_opts, + if (qemu_opt_get_bool(opts, "cache.direct", false)) { + bdrv_flags |= BDRV_O_NOCACHE; + } +- if (qemu_opt_get_bool(opts, "cache.no-flush", true)) { ++ if (qemu_opt_get_bool(opts, "cache.no-flush", false)) { + bdrv_flags |= BDRV_O_NO_FLUSH; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-drop-redundant-proto_drv-check.patch b/SOURCES/kvm-blockdev-drop-redundant-proto_drv-check.patch new file mode 100644 index 0000000..9a3ac53 --- /dev/null +++ b/SOURCES/kvm-blockdev-drop-redundant-proto_drv-check.patch @@ -0,0 +1,104 @@ +From d9420445fe0b78de91dc8615a61b973ed64e4f78 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:27:57 +0200 +Subject: [PATCH 06/38] blockdev: drop redundant proto_drv check + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 54193 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 06/32] blockdev: drop redundant proto_drv check +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Stefan Hajnoczi + +Bugzilla: 1005818 + +It is not necessary to check that we can find a protocol block driver +since we create or open the image file. This produces the error that we +need anyway. + +Besides, the QERR_INVALID_BLOCK_FORMAT is inappropriate since the +protocol is incorrect rather than the format. + +Also drop an empty line between bdrv_open() and checking its return +value. This may be due to copy-pasting from earlier code that performed +other operations before handling errors. + +Reported-by: Kevin Wolf +Reviewed-by: Eric Blake +Reviewed-by: Wenchao Xia +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit cb78466ef60ccf707a6f38a1294c435b65a828e0) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 15 --------------- + 1 file changed, 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 15 --------------- + 1 files changed, 0 insertions(+), 15 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index b8521c7..1f405c9 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -818,7 +818,6 @@ typedef struct ExternalSnapshotStates { + static void external_snapshot_prepare(BlkTransactionStates *common, + Error **errp) + { +- BlockDriver *proto_drv; + BlockDriver *drv; + int flags, ret; + Error *local_err = NULL; +@@ -874,12 +873,6 @@ static void external_snapshot_prepare(BlkTransactionStates *common, + + flags = states->old_bs->open_flags; + +- proto_drv = bdrv_find_protocol(new_image_file); +- if (!proto_drv) { +- error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); +- return; +- } +- + /* create new image w/backing file */ + if (mode != NEW_IMAGE_MODE_EXISTING) { + bdrv_img_create(new_image_file, format, +@@ -1372,7 +1365,6 @@ void qmp_drive_mirror(const char *device, const char *target, + { + BlockDriverState *bs; + BlockDriverState *source, *target_bs; +- BlockDriver *proto_drv; + BlockDriver *drv = NULL; + Error *local_err = NULL; + int flags; +@@ -1440,12 +1432,6 @@ void qmp_drive_mirror(const char *device, const char *target, + sync = MIRROR_SYNC_MODE_FULL; + } + +- proto_drv = bdrv_find_protocol(target); +- if (!proto_drv) { +- error_set(errp, QERR_INVALID_BLOCK_FORMAT, format); +- return; +- } +- + bdrv_get_geometry(bs, &size); + size *= 512; + if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) { +@@ -1480,7 +1466,6 @@ void qmp_drive_mirror(const char *device, const char *target, + */ + target_bs = bdrv_new(""); + ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv); +- + if (ret < 0) { + bdrv_delete(target_bs); + error_set(errp, QERR_OPEN_FILE_FAILED, target); +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-fix-cdrom-read_only-flag.patch b/SOURCES/kvm-blockdev-fix-cdrom-read_only-flag.patch new file mode 100644 index 0000000..19a62d1 --- /dev/null +++ b/SOURCES/kvm-blockdev-fix-cdrom-read_only-flag.patch @@ -0,0 +1,72 @@ +From b760a59d212007cbe0276d6027fb24809f1330d9 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:16 +0100 +Subject: [PATCH 63/87] blockdev: fix cdrom read_only flag + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-23-git-send-email-kwolf@redhat.com> +Patchwork-id: 55401 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 22/24] blockdev: fix cdrom read_only flag +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +From: Fam Zheng + +Since 0ebd24e0, cdrom doesn't have read-only on by default, which will +error out when using an read only image. Fix it by setting the default +value when parsing opts. + +Reported-by: Edivaldo de Araujo Pereira +Signed-off-by: Fam Zheng + +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a7fdbcf0e6e52d935ebff6d849fe4b5473e5860d) + +Signed-off-by: Kevin Wolf +--- + blockdev.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index a248480..a9c5d32 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -626,7 +626,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + int cyls, heads, secs, translation; + int max_devs, bus_id, unit_id, index; + const char *devaddr; +- bool read_only, copy_on_read; ++ bool read_only = false; ++ bool copy_on_read; + Error *local_err = NULL; + + /* Change legacy command line options into QMP ones */ +@@ -691,7 +692,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + media = MEDIA_DISK; + } else if (!strcmp(value, "cdrom")) { + media = MEDIA_CDROM; +- qdict_put(bs_opts, "read-only", qstring_from_str("on")); ++ read_only = true; + } else { + error_report("'%s' invalid media", value); + goto fail; +@@ -699,7 +700,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) + } + + /* copy-on-read is disabled with a warning for read-only devices */ +- read_only = qemu_opt_get_bool(legacy_opts, "read-only", false); ++ read_only |= qemu_opt_get_bool(legacy_opts, "read-only", false); + copy_on_read = qemu_opt_get_bool(legacy_opts, "copy-on-read", false); + + if (read_only && copy_on_read) { +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-fix-drive_init-opts-and-bs_opts-leaks.patch b/SOURCES/kvm-blockdev-fix-drive_init-opts-and-bs_opts-leaks.patch new file mode 100644 index 0000000..db681da --- /dev/null +++ b/SOURCES/kvm-blockdev-fix-drive_init-opts-and-bs_opts-leaks.patch @@ -0,0 +1,153 @@ +From 792e58622d0a5c0015673e2929c89b4bd36ef008 Mon Sep 17 00:00:00 2001 +Message-Id: <792e58622d0a5c0015673e2929c89b4bd36ef008.1387288155.git.minovotn@redhat.com> +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:23 +0100 +Subject: [PATCH 3/8] blockdev: fix drive_init() opts and bs_opts leaks + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-4-git-send-email-stefanha@redhat.com> +Patchwork-id: 56257 +O-Subject: [RHEL7 qemu-kvm PATCH 3/8] blockdev: fix drive_init() opts and bs_opts leaks +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +These memory leaks also make drive_add if=none,id=drive0 without a file= +option leak the options list. This keeps ID "drive0" around forever. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +(cherry picked from commit ec9c10d29c6bb5613a680af62f5825d3bb2d31d4) +Signed-off-by: Stefan Hajnoczi + +Conflicts: + blockdev.c + +s/bdrv_delete/bdrv_unref/ upstream has resulted in a trivial conflict. +--- + blockdev.c | 27 +++++++++++++++------------ + 1 file changed, 15 insertions(+), 12 deletions(-) + +Signed-off-by: Michal Novotny +--- + blockdev.c | 27 +++++++++++++++------------ + 1 file changed, 15 insertions(+), 12 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index cdd453a..f6d607c 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -360,7 +360,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + qemu_opts_absorb_qdict(opts, bs_opts, &error); + if (error_is_set(&error)) { + error_propagate(errp, error); +- return NULL; ++ goto early_err; + } + + if (id) { +@@ -380,7 +380,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + if ((buf = qemu_opt_get(opts, "discard")) != NULL) { + if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) { + error_setg(errp, "invalid discard option"); +- return NULL; ++ goto early_err; + } + } + +@@ -402,7 +402,7 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + /* this is the default */ + } else { + error_setg(errp, "invalid aio option"); +- return NULL; ++ goto early_err; + } + } + #endif +@@ -412,13 +412,13 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + error_printf("Supported formats:"); + bdrv_iterate_format(bdrv_format_print, NULL); + error_printf("\n"); +- return NULL; ++ goto early_err; + } + + drv = bdrv_find_whitelisted_format(buf, ro); + if (!drv) { + error_setg(errp, "'%s' invalid format", buf); +- return NULL; ++ goto early_err; + } + } + +@@ -438,20 +438,20 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + + if (!do_check_io_limits(&io_limits, &error)) { + error_propagate(errp, error); +- return NULL; ++ goto early_err; + } + + on_write_error = BLOCKDEV_ON_ERROR_ENOSPC; + if ((buf = qemu_opt_get(opts, "werror")) != NULL) { + if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO && type != IF_NONE) { + error_setg(errp, "werror is not supported by this bus type"); +- return NULL; ++ goto early_err; + } + + on_write_error = parse_block_error_action(buf, 0, &error); + if (error_is_set(&error)) { + error_propagate(errp, error); +- return NULL; ++ goto early_err; + } + } + +@@ -459,13 +459,13 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + if ((buf = qemu_opt_get(opts, "rerror")) != NULL) { + if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI && type != IF_NONE) { + error_report("rerror is not supported by this bus type"); +- return NULL; ++ goto early_err; + } + + on_read_error = parse_block_error_action(buf, 1, &error); + if (error_is_set(&error)) { + error_propagate(errp, error); +- return NULL; ++ goto early_err; + } + } + +@@ -491,6 +491,8 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + if (has_driver_specific_opts) { + file = NULL; + } else { ++ QDECREF(bs_opts); ++ qemu_opts_del(opts); + return dinfo; + } + } +@@ -529,12 +531,13 @@ static DriveInfo *blockdev_init(QDict *bs_opts, + return dinfo; + + err: +- qemu_opts_del(opts); +- QDECREF(bs_opts); + bdrv_delete(dinfo->bdrv); + g_free(dinfo->id); + QTAILQ_REMOVE(&drives, dinfo, next); + g_free(dinfo); ++early_err: ++ QDECREF(bs_opts); ++ qemu_opts_del(opts); + return NULL; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-blockdev-test-add-test-case-for-drive_add-duplicate-.patch b/SOURCES/kvm-blockdev-test-add-test-case-for-drive_add-duplicate-.patch new file mode 100644 index 0000000..97d1b44 --- /dev/null +++ b/SOURCES/kvm-blockdev-test-add-test-case-for-drive_add-duplicate-.patch @@ -0,0 +1,137 @@ +From 470de5e13e415a5e218d80114676a10c7dcb52c1 Mon Sep 17 00:00:00 2001 +Message-Id: <470de5e13e415a5e218d80114676a10c7dcb52c1.1387288155.git.minovotn@redhat.com> +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:26 +0100 +Subject: [PATCH 6/8] blockdev-test: add test case for drive_add duplicate IDs + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-7-git-send-email-stefanha@redhat.com> +Patchwork-id: 56260 +O-Subject: [RHEL7 qemu-kvm PATCH 6/8] blockdev-test: add test case for drive_add duplicate IDs +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +The following should work: + + (qemu) drive_add if=none,id=drive0 + (qemu) drive_del drive0 + (qemu) drive_add if=none,id=drive0 + +Previous versions of QEMU produced a duplicate ID error because +drive_add leaked the options. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +(cherry picked from commit 7ceeedd016facf8d58e14a0d1417fa7225d71072) +Signed-off-by: Stefan Hajnoczi + +Conflicts: + tests/Makefile + +Trivial conflicts because upstream has additional tests that change the +diff context. +--- + tests/Makefile | 2 ++ + tests/blockdev-test.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 61 insertions(+) + create mode 100644 tests/blockdev-test.c + +Signed-off-by: Michal Novotny +--- + tests/Makefile | 2 ++ + tests/blockdev-test.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 61 insertions(+) + create mode 100644 tests/blockdev-test.c + +diff --git a/tests/Makefile b/tests/Makefile +index 394e029..91231e8 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -58,6 +58,7 @@ check-qtest-i386-y += tests/boot-order-test$(EXESUF) + check-qtest-i386-y += tests/rtc-test$(EXESUF) + check-qtest-i386-y += tests/i440fx-test$(EXESUF) + check-qtest-i386-y += tests/fw_cfg-test$(EXESUF) ++check-qtest-i386-y += tests/blockdev-test$(EXESUF) + check-qtest-x86_64-y = $(check-qtest-i386-y) + gcov-files-i386-y += i386-softmmu/hw/mc146818rtc.c + gcov-files-x86_64-y = $(subst i386-softmmu/,x86_64-softmmu/,$(gcov-files-i386-y)) +@@ -135,6 +136,7 @@ tests/boot-order-test$(EXESUF): tests/boot-order-test.o + tests/tmp105-test$(EXESUF): tests/tmp105-test.o $(libqos-omap-obj-y) + tests/i440fx-test$(EXESUF): tests/i440fx-test.o $(libqos-pc-obj-y) + tests/fw_cfg-test$(EXESUF): tests/fw_cfg-test.o $(libqos-pc-obj-y) ++tests/blockdev-test$(EXESUF): tests/blockdev-test.o $(libqos-pc-obj-y) + + # QTest rules + +diff --git a/tests/blockdev-test.c b/tests/blockdev-test.c +new file mode 100644 +index 0000000..c940e00 +--- /dev/null ++++ b/tests/blockdev-test.c +@@ -0,0 +1,59 @@ ++/* ++ * blockdev.c test cases ++ * ++ * Copyright (C) 2013 Red Hat Inc. ++ * ++ * Authors: ++ * Stefan Hajnoczi ++ * ++ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. ++ * See the COPYING.LIB file in the top-level directory. ++ */ ++ ++#include ++#include ++#include "libqtest.h" ++ ++static void test_drive_add_empty(void) ++{ ++ QDict *response; ++ const char *response_return; ++ ++ /* Start with an empty drive */ ++ qtest_start("-drive if=none,id=drive0"); ++ ++ /* Delete the drive */ ++ response = qmp("{\"execute\": \"human-monitor-command\"," ++ " \"arguments\": {" ++ " \"command-line\": \"drive_del drive0\"" ++ "}}"); ++ g_assert(response); ++ response_return = qdict_get_try_str(response, "return"); ++ g_assert(response_return); ++ g_assert(strcmp(response_return, "") == 0); ++ QDECREF(response); ++ ++ /* Ensure re-adding the drive works - there should be no duplicate ID error ++ * because the old drive must be gone. ++ */ ++ response = qmp("{\"execute\": \"human-monitor-command\"," ++ " \"arguments\": {" ++ " \"command-line\": \"drive_add 0 if=none,id=drive0\"" ++ "}}"); ++ g_assert(response); ++ response_return = qdict_get_try_str(response, "return"); ++ g_assert(response_return); ++ g_assert(strcmp(response_return, "OK\r\n") == 0); ++ QDECREF(response); ++ ++ qtest_end(); ++} ++ ++int main(int argc, char **argv) ++{ ++ g_test_init(&argc, &argv, NULL); ++ ++ qtest_add_func("/qmp/drive_add_empty", test_drive_add_empty); ++ ++ return g_test_run(); ++} +-- +1.7.11.7 + diff --git a/SOURCES/kvm-blockdev-use-bdrv_getlength-in-qmp_drive_mirror.patch b/SOURCES/kvm-blockdev-use-bdrv_getlength-in-qmp_drive_mirror.patch new file mode 100644 index 0000000..07cd3c1 --- /dev/null +++ b/SOURCES/kvm-blockdev-use-bdrv_getlength-in-qmp_drive_mirror.patch @@ -0,0 +1,69 @@ +From 38d5e0867780e352a3890792f684594deb7afd7e Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:07:55 +0100 +Subject: [PATCH 21/34] blockdev: use bdrv_getlength() in qmp_drive_mirror() + +RH-Author: Max Reitz +Message-id: <1390154881-17140-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 56814 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 1/7] blockdev: use bdrv_getlength() in qmp_drive_mirror() +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Stefan Hajnoczi + +BZ: 921890 + +Use bdrv_getlength() for its byte units and error return instead of +bdrv_get_geometry(). + +Reported-by: Kevin Wolf +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit ac3c5d831aa0ff796659300e186be1a35862dbd3) + +Signed-off-by: Max Reitz +--- + blockdev.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 10 +++++++--- + 1 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 33a5f5f..0ba2504 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1541,7 +1541,7 @@ void qmp_drive_mirror(const char *device, const char *target, + BlockDriver *drv = NULL; + Error *local_err = NULL; + int flags; +- uint64_t size; ++ int64_t size; + int ret; + + if (!has_speed) { +@@ -1605,8 +1605,12 @@ void qmp_drive_mirror(const char *device, const char *target, + sync = MIRROR_SYNC_MODE_FULL; + } + +- bdrv_get_geometry(bs, &size); +- size *= 512; ++ size = bdrv_getlength(bs); ++ if (size < 0) { ++ error_setg_errno(errp, -size, "bdrv_getlength failed"); ++ return; ++ } ++ + if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) { + /* create new image w/o backing file */ + assert(format && drv); +-- +1.7.1 + diff --git a/SOURCES/kvm-blockdev-use-error_setg_file_open.patch b/SOURCES/kvm-blockdev-use-error_setg_file_open.patch new file mode 100644 index 0000000..0c57b4e --- /dev/null +++ b/SOURCES/kvm-blockdev-use-error_setg_file_open.patch @@ -0,0 +1,69 @@ +From 4aeb6d14385793a46b11d4d129bbad6c9fe9132b Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:26 +0100 +Subject: [PATCH 07/29] blockdev: use error_setg_file_open() + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-4-git-send-email-lersek@redhat.com> +Patchwork-id: 55193 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/8] blockdev: use error_setg_file_open() +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Reviewed-by: Stefan Hajnoczi +Acked-by: Kevin Wolf +(cherry picked from commit 0eef407c7b4130d13138c1f75d9975165433f654) +Signed-off-by: Laszlo Ersek +--- + blockdev.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 073f553..f65aff4 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -950,7 +950,7 @@ static void external_snapshot_prepare(BlkTransactionStates *common, + ret = bdrv_open(states->new_bs, new_image_file, NULL, + flags | BDRV_O_NO_BACKING, drv); + if (ret != 0) { +- error_set(errp, QERR_OPEN_FILE_FAILED, new_image_file); ++ error_setg_file_open(errp, -ret, new_image_file); + } + } + +@@ -1113,8 +1113,11 @@ static void qmp_bdrv_open_encrypted(BlockDriverState *bs, const char *filename, + int bdrv_flags, BlockDriver *drv, + const char *password, Error **errp) + { +- if (bdrv_open(bs, filename, NULL, bdrv_flags, drv) < 0) { +- error_set(errp, QERR_OPEN_FILE_FAILED, filename); ++ int ret; ++ ++ ret = bdrv_open(bs, filename, NULL, bdrv_flags, drv); ++ if (ret < 0) { ++ error_setg_file_open(errp, -ret, filename); + return; + } + +@@ -1526,7 +1529,7 @@ void qmp_drive_mirror(const char *device, const char *target, + ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv); + if (ret < 0) { + bdrv_delete(target_bs); +- error_set(errp, QERR_OPEN_FILE_FAILED, target); ++ error_setg_file_open(errp, -ret, target); + return; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-blockjob-Add-block_job_yield.patch b/SOURCES/kvm-blockjob-Add-block_job_yield.patch new file mode 100644 index 0000000..5d73919 --- /dev/null +++ b/SOURCES/kvm-blockjob-Add-block_job_yield.patch @@ -0,0 +1,77 @@ +From 96f8c9bed66c9c910332d86368b7e0e94c190f62 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:09 +0200 +Subject: [PATCH 06/11] blockjob: Add block_job_yield() + +Message-id: <1408552814-23031-3-git-send-email-eblake@redhat.com> +Patchwork-id: 60644 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 2/7] blockjob: Add block_job_yield() +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +This will unset busy flag and put coroutine to sleep, can be used to +wait for QMP complete/cancel. + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit dc71ce45ded4e872e25c2de32d5e7a71842b0985) +Signed-off-by: Eric Blake + +Signed-off-by: Miroslav Rezanina +--- + blockjob.c | 14 ++++++++++++++ + include/block/blockjob.h | 8 ++++++++ + 2 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/blockjob.c b/blockjob.c +index a4430a0..1117ee7 100644 +--- a/blockjob.c ++++ b/blockjob.c +@@ -206,6 +206,20 @@ void block_job_sleep_ns(BlockJob *job, QEMUClock *clock, int64_t ns) + job->busy = true; + } + ++void block_job_yield(BlockJob *job) ++{ ++ assert(job->busy); ++ ++ /* Check cancellation *before* setting busy = false, too! */ ++ if (block_job_is_cancelled(job)) { ++ return; ++ } ++ ++ job->busy = false; ++ qemu_coroutine_yield(); ++ job->busy = true; ++} ++ + BlockJobInfo *block_job_query(BlockJob *job) + { + BlockJobInfo *info = g_new0(BlockJobInfo, 1); +diff --git a/include/block/blockjob.h b/include/block/blockjob.h +index 5a7d859..11f7c7e 100644 +--- a/include/block/blockjob.h ++++ b/include/block/blockjob.h +@@ -144,6 +144,14 @@ void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs, + void block_job_sleep_ns(BlockJob *job, QEMUClock *clock, int64_t ns); + + /** ++ * block_job_yield: ++ * @job: The job that calls the function. ++ * ++ * Yield the block job coroutine. ++ */ ++void block_job_yield(BlockJob *job); ++ ++/** + * block_job_completed: + * @job: The job being completed. + * @ret: The status code. +-- +1.7.1 + diff --git a/SOURCES/kvm-blockjob-rename-BlockJobType-to-BlockJobDriver.patch b/SOURCES/kvm-blockjob-rename-BlockJobType-to-BlockJobDriver.patch new file mode 100644 index 0000000..bf4e52f --- /dev/null +++ b/SOURCES/kvm-blockjob-rename-BlockJobType-to-BlockJobDriver.patch @@ -0,0 +1,244 @@ +From 324996d0200ab451158581e199d9e5673e4adfd6 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:54 +0100 +Subject: [PATCH 11/34] blockjob: rename BlockJobType to BlockJobDriver + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-10-git-send-email-famz@redhat.com> +Patchwork-id: 56771 +O-Subject: [RHEL-7 qemu-kvm PATCH 09/18] blockjob: rename BlockJobType to BlockJobDriver +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +We will use BlockJobType as the enum type name of block jobs in QAPI, +rename current BlockJobType to BlockJobDriver, which will eventually +become a set of operations, similar to block drivers. + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 3fc4b10af09b75a1cb811b61abc9d8c90771dfb2) +Signed-off-by: Fam Zheng + +Conflicts: + block/backup.c + +Not present downstream. + +Signed-off-by: Fam Zheng +--- + block/commit.c | 4 ++-- + block/mirror.c | 4 ++-- + block/stream.c | 4 ++-- + blockjob.c | 22 +++++++++++----------- + include/block/blockjob.h | 12 ++++++------ + 5 files changed, 23 insertions(+), 23 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/commit.c | 4 ++-- + block/mirror.c | 4 ++-- + block/stream.c | 4 ++-- + blockjob.c | 22 +++++++++++----------- + include/block/blockjob.h | 12 ++++++------ + 5 files changed, 23 insertions(+), 23 deletions(-) + +diff --git a/block/commit.c b/block/commit.c +index 37572f0..28f45e4 100644 +--- a/block/commit.c ++++ b/block/commit.c +@@ -173,7 +173,7 @@ static void commit_set_speed(BlockJob *job, int64_t speed, Error **errp) + ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME); + } + +-static const BlockJobType commit_job_type = { ++static const BlockJobDriver commit_job_driver = { + .instance_size = sizeof(CommitBlockJob), + .job_type = "commit", + .set_speed = commit_set_speed, +@@ -238,7 +238,7 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, + } + + +- s = block_job_create(&commit_job_type, bs, speed, cb, opaque, errp); ++ s = block_job_create(&commit_job_driver, bs, speed, cb, opaque, errp); + if (!s) { + return; + } +diff --git a/block/mirror.c b/block/mirror.c +index 342c90d..139be06 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -525,7 +525,7 @@ static void mirror_complete(BlockJob *job, Error **errp) + block_job_resume(job); + } + +-static const BlockJobType mirror_job_type = { ++static const BlockJobDriver mirror_job_driver = { + .instance_size = sizeof(MirrorBlockJob), + .job_type = "mirror", + .set_speed = mirror_set_speed, +@@ -563,7 +563,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + return; + } + +- s = block_job_create(&mirror_job_type, bs, speed, cb, opaque, errp); ++ s = block_job_create(&mirror_job_driver, bs, speed, cb, opaque, errp); + if (!s) { + return; + } +diff --git a/block/stream.c b/block/stream.c +index ce16b0b..ffa4e9a 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -204,7 +204,7 @@ static void stream_set_speed(BlockJob *job, int64_t speed, Error **errp) + ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME); + } + +-static const BlockJobType stream_job_type = { ++static const BlockJobDriver stream_job_driver = { + .instance_size = sizeof(StreamBlockJob), + .job_type = "stream", + .set_speed = stream_set_speed, +@@ -225,7 +225,7 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base, + return; + } + +- s = block_job_create(&stream_job_type, bs, speed, cb, opaque, errp); ++ s = block_job_create(&stream_job_driver, bs, speed, cb, opaque, errp); + if (!s) { + return; + } +diff --git a/blockjob.c b/blockjob.c +index 6d8c3a2..dc0fa6d 100644 +--- a/blockjob.c ++++ b/blockjob.c +@@ -35,7 +35,7 @@ + #include "qmp-commands.h" + #include "qemu/timer.h" + +-void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs, ++void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs, + int64_t speed, BlockDriverCompletionFunc *cb, + void *opaque, Error **errp) + { +@@ -48,8 +48,8 @@ void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs, + bdrv_ref(bs); + bdrv_set_in_use(bs, 1); + +- job = g_malloc0(job_type->instance_size); +- job->job_type = job_type; ++ job = g_malloc0(driver->instance_size); ++ job->driver = driver; + job->bs = bs; + job->cb = cb; + job->opaque = opaque; +@@ -87,11 +87,11 @@ void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp) + { + Error *local_err = NULL; + +- if (!job->job_type->set_speed) { ++ if (!job->driver->set_speed) { + error_set(errp, QERR_NOT_SUPPORTED); + return; + } +- job->job_type->set_speed(job, speed, &local_err); ++ job->driver->set_speed(job, speed, &local_err); + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); + return; +@@ -102,12 +102,12 @@ void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp) + + void block_job_complete(BlockJob *job, Error **errp) + { +- if (job->paused || job->cancelled || !job->job_type->complete) { ++ if (job->paused || job->cancelled || !job->driver->complete) { + error_set(errp, QERR_BLOCK_JOB_NOT_READY, job->bs->device_name); + return; + } + +- job->job_type->complete(job, errp); ++ job->driver->complete(job, errp); + } + + void block_job_pause(BlockJob *job) +@@ -143,8 +143,8 @@ bool block_job_is_cancelled(BlockJob *job) + void block_job_iostatus_reset(BlockJob *job) + { + job->iostatus = BLOCK_DEVICE_IO_STATUS_OK; +- if (job->job_type->iostatus_reset) { +- job->job_type->iostatus_reset(job); ++ if (job->driver->iostatus_reset) { ++ job->driver->iostatus_reset(job); + } + } + +@@ -209,7 +209,7 @@ void block_job_sleep_ns(BlockJob *job, QEMUClock *clock, int64_t ns) + BlockJobInfo *block_job_query(BlockJob *job) + { + BlockJobInfo *info = g_new0(BlockJobInfo, 1); +- info->type = g_strdup(job->job_type->job_type); ++ info->type = g_strdup(job->driver->job_type); + info->device = g_strdup(bdrv_get_device_name(job->bs)); + info->len = job->len; + info->busy = job->busy; +@@ -236,7 +236,7 @@ QObject *qobject_from_block_job(BlockJob *job) + "'len': %" PRId64 "," + "'offset': %" PRId64 "," + "'speed': %" PRId64 " }", +- job->job_type->job_type, ++ job->driver->job_type, + bdrv_get_device_name(job->bs), + job->len, + job->offset, +diff --git a/include/block/blockjob.h b/include/block/blockjob.h +index c290d07..dadcd48 100644 +--- a/include/block/blockjob.h ++++ b/include/block/blockjob.h +@@ -28,11 +28,11 @@ + #include "block/block.h" + + /** +- * BlockJobType: ++ * BlockJobDriver: + * +- * A class type for block job objects. ++ * A class type for block job driver. + */ +-typedef struct BlockJobType { ++typedef struct BlockJobDriver { + /** Derived BlockJob struct size */ + size_t instance_size; + +@@ -50,7 +50,7 @@ typedef struct BlockJobType { + * manually. + */ + void (*complete)(BlockJob *job, Error **errp); +-} BlockJobType; ++} BlockJobDriver; + + /** + * BlockJob: +@@ -59,7 +59,7 @@ typedef struct BlockJobType { + */ + struct BlockJob { + /** The job type, including the job vtable. */ +- const BlockJobType *job_type; ++ const BlockJobDriver *driver; + + /** The block device on which the job is operating. */ + BlockDriverState *bs; +@@ -128,7 +128,7 @@ struct BlockJob { + * This function is not part of the public job interface; it should be + * called from a wrapper that is specific to the job type. + */ +-void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs, ++void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs, + int64_t speed, BlockDriverCompletionFunc *cb, + void *opaque, Error **errp); + +-- +1.7.1 + diff --git a/SOURCES/kvm-bochs-Check-catalog_size-header-field-CVE-2014-0143.patch b/SOURCES/kvm-bochs-Check-catalog_size-header-field-CVE-2014-0143.patch new file mode 100644 index 0000000..88cc67f --- /dev/null +++ b/SOURCES/kvm-bochs-Check-catalog_size-header-field-CVE-2014-0143.patch @@ -0,0 +1,115 @@ +From 920f41e5268801ff36a4f76ccaf2ac2584ac009e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:19 +0100 +Subject: [PATCH 12/49] bochs: Check catalog_size header field (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-13-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 12/48] bochs: Check catalog_size header field (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +It should neither become negative nor allow unbounded memory +allocations. This fixes aborts in g_malloc() and an s->catalog_bitmap +buffer overflow on big endian hosts. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +--- + block/bochs.c | 13 +++++++++++++ + tests/qemu-iotests/078 | 13 +++++++++++++ + tests/qemu-iotests/078.out | 10 +++++++++- + 3 files changed, 35 insertions(+), 1 deletions(-) + +diff --git a/block/bochs.c b/block/bochs.c +index 04cca71..d1b1a2c 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -122,7 +122,14 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + bs->total_sectors = le64_to_cpu(bochs.extra.redolog.disk) / 512; + } + ++ /* Limit to 1M entries to avoid unbounded allocation. This is what is ++ * needed for the largest image that bximage can create (~8 TB). */ + s->catalog_size = le32_to_cpu(bochs.catalog); ++ if (s->catalog_size > 0x100000) { ++ error_setg(errp, "Catalog size is too large"); ++ return -EFBIG; ++ } ++ + s->catalog_bitmap = g_malloc(s->catalog_size * 4); + + ret = bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_bitmap, +@@ -141,6 +148,12 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + + s->extent_size = le32_to_cpu(bochs.extent); + ++ if (s->catalog_size < bs->total_sectors / s->extent_size) { ++ error_setg(errp, "Catalog size is too small for this disk size"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + qemu_co_mutex_init(&s->lock); + return 0; + +diff --git a/tests/qemu-iotests/078 b/tests/qemu-iotests/078 +index 73b573a..902ef0f 100755 +--- a/tests/qemu-iotests/078 ++++ b/tests/qemu-iotests/078 +@@ -43,6 +43,7 @@ _supported_proto generic + _supported_os Linux + + catalog_size_offset=$((0x48)) ++disk_size_offset=$((0x58)) + + echo + echo "== Read from a valid image ==" +@@ -55,6 +56,18 @@ _use_sample_img empty.bochs.bz2 + poke_file "$TEST_IMG" "$catalog_size_offset" "\xff\xff\xff\xff" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Overflow for catalog size * sizeof(uint32_t) ==" ++_use_sample_img empty.bochs.bz2 ++poke_file "$TEST_IMG" "$catalog_size_offset" "\x00\x00\x00\x40" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== Too small catalog bitmap for image size ==" ++_use_sample_img empty.bochs.bz2 ++poke_file "$TEST_IMG" "$disk_size_offset" "\x00\xc0\x0f\x00\x00\x00\x00\x7f" ++{ $QEMU_IO -c "read 2T 4k" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/078.out b/tests/qemu-iotests/078.out +index ef8c42d..7254693 100644 +--- a/tests/qemu-iotests/078.out ++++ b/tests/qemu-iotests/078.out +@@ -5,6 +5,14 @@ read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + + == Negative catalog size == +-qemu-io: can't open device TEST_DIR/empty.bochs: Could not open 'TEST_DIR/empty.bochs': Interrupted system call ++qemu-io: can't open device TEST_DIR/empty.bochs: Catalog size is too large ++no file open, try 'help open' ++ ++== Overflow for catalog size * sizeof(uint32_t) == ++qemu-io: can't open device TEST_DIR/empty.bochs: Catalog size is too large ++no file open, try 'help open' ++ ++== Too small catalog bitmap for image size == ++qemu-io: can't open device TEST_DIR/empty.bochs: Catalog size is too small for this disk size + no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-bochs-Check-extent_size-header-field-CVE-2014-0142.patch b/SOURCES/kvm-bochs-Check-extent_size-header-field-CVE-2014-0142.patch new file mode 100644 index 0000000..909b5a0 --- /dev/null +++ b/SOURCES/kvm-bochs-Check-extent_size-header-field-CVE-2014-0142.patch @@ -0,0 +1,98 @@ +From 3150a448434da70b69e0b96d71223161a78d536f Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:20 +0100 +Subject: [PATCH 13/49] bochs: Check extent_size header field (CVE-2014-0142) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-14-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 13/48] bochs: Check extent_size header field (CVE-2014-0142) +Bugzilla: 1079315 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079315 +Upstream status: Embargoed + +This fixes two possible division by zero crashes: In bochs_open() and in +seek_to_sector(). + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +--- + block/bochs.c | 8 ++++++++ + tests/qemu-iotests/078 | 13 +++++++++++++ + tests/qemu-iotests/078.out | 8 ++++++++ + 3 files changed, 29 insertions(+), 0 deletions(-) + +diff --git a/block/bochs.c b/block/bochs.c +index d1b1a2c..0ec980a 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -147,6 +147,14 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + s->extent_blocks = 1 + (le32_to_cpu(bochs.extent) - 1) / 512; + + s->extent_size = le32_to_cpu(bochs.extent); ++ if (s->extent_size == 0) { ++ error_setg(errp, "Extent size may not be zero"); ++ return -EINVAL; ++ } else if (s->extent_size > 0x800000) { ++ error_setg(errp, "Extent size %" PRIu32 " is too large", ++ s->extent_size); ++ return -EINVAL; ++ } + + if (s->catalog_size < bs->total_sectors / s->extent_size) { + error_setg(errp, "Catalog size is too small for this disk size"); +diff --git a/tests/qemu-iotests/078 b/tests/qemu-iotests/078 +index 902ef0f..872e734 100755 +--- a/tests/qemu-iotests/078 ++++ b/tests/qemu-iotests/078 +@@ -43,6 +43,7 @@ _supported_proto generic + _supported_os Linux + + catalog_size_offset=$((0x48)) ++extent_size_offset=$((0x50)) + disk_size_offset=$((0x58)) + + echo +@@ -68,6 +69,18 @@ _use_sample_img empty.bochs.bz2 + poke_file "$TEST_IMG" "$disk_size_offset" "\x00\xc0\x0f\x00\x00\x00\x00\x7f" + { $QEMU_IO -c "read 2T 4k" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Negative extent size ==" ++_use_sample_img empty.bochs.bz2 ++poke_file "$TEST_IMG" "$extent_size_offset" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 768k 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== Zero extent size ==" ++_use_sample_img empty.bochs.bz2 ++poke_file "$TEST_IMG" "$extent_size_offset" "\x00\x00\x00\x00" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/078.out b/tests/qemu-iotests/078.out +index 7254693..ea95ffd 100644 +--- a/tests/qemu-iotests/078.out ++++ b/tests/qemu-iotests/078.out +@@ -15,4 +15,12 @@ no file open, try 'help open' + == Too small catalog bitmap for image size == + qemu-io: can't open device TEST_DIR/empty.bochs: Catalog size is too small for this disk size + no file open, try 'help open' ++ ++== Negative extent size == ++qemu-io: can't open device TEST_DIR/empty.bochs: Extent size 4294967295 is too large ++no file open, try 'help open' ++ ++== Zero extent size == ++qemu-io: can't open device TEST_DIR/empty.bochs: Extent size may not be zero ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-bochs-Fix-bitmap-offset-calculation.patch b/SOURCES/kvm-bochs-Fix-bitmap-offset-calculation.patch new file mode 100644 index 0000000..39fbd81 --- /dev/null +++ b/SOURCES/kvm-bochs-Fix-bitmap-offset-calculation.patch @@ -0,0 +1,44 @@ +From faa093fc3b71b073a73f800785c3cdabe5a91cc3 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:21 +0100 +Subject: [PATCH 14/49] bochs: Fix bitmap offset calculation + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-15-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 14/48] bochs: Fix bitmap offset calculation +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +32 bit truncation could let us access the wrong offset in the image. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +--- + block/bochs.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/bochs.c b/block/bochs.c +index 0ec980a..5c74223 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -185,8 +185,9 @@ static int64_t seek_to_sector(BlockDriverState *bs, int64_t sector_num) + return -1; /* not allocated */ + } + +- bitmap_offset = s->data_offset + (512 * s->catalog_bitmap[extent_index] * +- (s->extent_blocks + s->bitmap_blocks)); ++ bitmap_offset = s->data_offset + ++ (512 * (uint64_t) s->catalog_bitmap[extent_index] * ++ (s->extent_blocks + s->bitmap_blocks)); + + /* read in bitmap for current extent */ + if (bdrv_pread(bs->file, bitmap_offset + (extent_offset / 8), +-- +1.7.1 + diff --git a/SOURCES/kvm-bochs-Unify-header-structs-and-make-them-QEMU_PACKED.patch b/SOURCES/kvm-bochs-Unify-header-structs-and-make-them-QEMU_PACKED.patch new file mode 100644 index 0000000..647872b --- /dev/null +++ b/SOURCES/kvm-bochs-Unify-header-structs-and-make-them-QEMU_PACKED.patch @@ -0,0 +1,146 @@ +From 30e78b5a6fc16e3669f83b27e02c8eb53e646b48 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:17 +0100 +Subject: [PATCH 10/49] bochs: Unify header structs and make them QEMU_PACKED + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-11-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 10/48] bochs: Unify header structs and make them QEMU_PACKED +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +This is an on-disk structure, so offsets must be accurate. + +Before this patch, sizeof(bochs) != sizeof(header_v1), which makes the +memcpy() between both invalid. We're lucky enough that the destination +buffer happened to be the larger one, and the memcpy size to be taken +from the smaller one, so we didn't get a buffer overflow in practice. + +This patch unifies the both structures, eliminating the need to do a +memcpy in the first place. The common fields are extracted to the top +level of the struct and the actually differing part gets a union of the +two versions. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +--- + block/bochs.c | 67 +++++++++++++++++++++----------------------------------- + 1 files changed, 25 insertions(+), 42 deletions(-) + +diff --git a/block/bochs.c b/block/bochs.c +index 51d9a90..708780d 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -39,45 +39,30 @@ + // not allocated: 0xffffffff + + // always little-endian +-struct bochs_header_v1 { +- char magic[32]; // "Bochs Virtual HD Image" +- char type[16]; // "Redolog" +- char subtype[16]; // "Undoable" / "Volatile" / "Growing" +- uint32_t version; +- uint32_t header; // size of header +- +- union { +- struct { +- uint32_t catalog; // num of entries +- uint32_t bitmap; // bitmap size +- uint32_t extent; // extent size +- uint64_t disk; // disk size +- char padding[HEADER_SIZE - 64 - 8 - 20]; +- } redolog; +- char padding[HEADER_SIZE - 64 - 8]; +- } extra; +-}; +- +-// always little-endian + struct bochs_header { +- char magic[32]; // "Bochs Virtual HD Image" +- char type[16]; // "Redolog" +- char subtype[16]; // "Undoable" / "Volatile" / "Growing" ++ char magic[32]; /* "Bochs Virtual HD Image" */ ++ char type[16]; /* "Redolog" */ ++ char subtype[16]; /* "Undoable" / "Volatile" / "Growing" */ + uint32_t version; +- uint32_t header; // size of header ++ uint32_t header; /* size of header */ ++ ++ uint32_t catalog; /* num of entries */ ++ uint32_t bitmap; /* bitmap size */ ++ uint32_t extent; /* extent size */ + + union { +- struct { +- uint32_t catalog; // num of entries +- uint32_t bitmap; // bitmap size +- uint32_t extent; // extent size +- uint32_t reserved; // for ??? +- uint64_t disk; // disk size +- char padding[HEADER_SIZE - 64 - 8 - 24]; +- } redolog; +- char padding[HEADER_SIZE - 64 - 8]; ++ struct { ++ uint32_t reserved; /* for ??? */ ++ uint64_t disk; /* disk size */ ++ char padding[HEADER_SIZE - 64 - 20 - 12]; ++ } QEMU_PACKED redolog; ++ struct { ++ uint64_t disk; /* disk size */ ++ char padding[HEADER_SIZE - 64 - 20 - 8]; ++ } QEMU_PACKED redolog_v1; ++ char padding[HEADER_SIZE - 64 - 20]; + } extra; +-}; ++} QEMU_PACKED; + + typedef struct BDRVBochsState { + CoMutex lock; +@@ -114,7 +99,6 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + BDRVBochsState *s = bs->opaque; + int i; + struct bochs_header bochs; +- struct bochs_header_v1 header_v1; + int ret; + + bs->read_only = 1; // no write support yet +@@ -133,13 +117,12 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (le32_to_cpu(bochs.version) == HEADER_V1) { +- memcpy(&header_v1, &bochs, sizeof(bochs)); +- bs->total_sectors = le64_to_cpu(header_v1.extra.redolog.disk) / 512; ++ bs->total_sectors = le64_to_cpu(bochs.extra.redolog_v1.disk) / 512; + } else { +- bs->total_sectors = le64_to_cpu(bochs.extra.redolog.disk) / 512; ++ bs->total_sectors = le64_to_cpu(bochs.extra.redolog.disk) / 512; + } + +- s->catalog_size = le32_to_cpu(bochs.extra.redolog.catalog); ++ s->catalog_size = le32_to_cpu(bochs.catalog); + s->catalog_bitmap = g_malloc(s->catalog_size * 4); + + ret = bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_bitmap, +@@ -153,10 +136,10 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + + s->data_offset = le32_to_cpu(bochs.header) + (s->catalog_size * 4); + +- s->bitmap_blocks = 1 + (le32_to_cpu(bochs.extra.redolog.bitmap) - 1) / 512; +- s->extent_blocks = 1 + (le32_to_cpu(bochs.extra.redolog.extent) - 1) / 512; ++ s->bitmap_blocks = 1 + (le32_to_cpu(bochs.bitmap) - 1) / 512; ++ s->extent_blocks = 1 + (le32_to_cpu(bochs.extent) - 1) / 512; + +- s->extent_size = le32_to_cpu(bochs.extra.redolog.extent); ++ s->extent_size = le32_to_cpu(bochs.extent); + + qemu_co_mutex_init(&s->lock); + return 0; +-- +1.7.1 + diff --git a/SOURCES/kvm-bochs-Use-unsigned-variables-for-offsets-and-sizes-C.patch b/SOURCES/kvm-bochs-Use-unsigned-variables-for-offsets-and-sizes-C.patch new file mode 100644 index 0000000..50c4756 --- /dev/null +++ b/SOURCES/kvm-bochs-Use-unsigned-variables-for-offsets-and-sizes-C.patch @@ -0,0 +1,111 @@ +From abf79316045a3c634e9633553942763fd358f9b2 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:18 +0100 +Subject: [PATCH 11/49] bochs: Use unsigned variables for offsets and sizes (CVE-2014-0147) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-12-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 11/48] bochs: Use unsigned variables for offsets and sizes (CVE-2014-0147) +Bugzilla: 1079339 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079339 +Upstream status: Embargoed + +Gets us rid of integer overflows resulting in negative sizes which +aren't correctly checked. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +--- + block/bochs.c | 16 ++++++++-------- + tests/qemu-iotests/078 | 8 ++++++++ + tests/qemu-iotests/078.out | 4 ++++ + 3 files changed, 20 insertions(+), 8 deletions(-) + +diff --git a/block/bochs.c b/block/bochs.c +index 708780d..04cca71 100644 +--- a/block/bochs.c ++++ b/block/bochs.c +@@ -67,13 +67,13 @@ struct bochs_header { + typedef struct BDRVBochsState { + CoMutex lock; + uint32_t *catalog_bitmap; +- int catalog_size; ++ uint32_t catalog_size; + +- int data_offset; ++ uint32_t data_offset; + +- int bitmap_blocks; +- int extent_blocks; +- int extent_size; ++ uint32_t bitmap_blocks; ++ uint32_t extent_blocks; ++ uint32_t extent_size; + } BDRVBochsState; + + static int bochs_probe(const uint8_t *buf, int buf_size, const char *filename) +@@ -97,7 +97,7 @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVBochsState *s = bs->opaque; +- int i; ++ uint32_t i; + struct bochs_header bochs; + int ret; + +@@ -152,8 +152,8 @@ fail: + static int64_t seek_to_sector(BlockDriverState *bs, int64_t sector_num) + { + BDRVBochsState *s = bs->opaque; +- int64_t offset = sector_num * 512; +- int64_t extent_index, extent_offset, bitmap_offset; ++ uint64_t offset = sector_num * 512; ++ uint64_t extent_index, extent_offset, bitmap_offset; + char bitmap_entry; + + // seek to sector +diff --git a/tests/qemu-iotests/078 b/tests/qemu-iotests/078 +index f55f46d..73b573a 100755 +--- a/tests/qemu-iotests/078 ++++ b/tests/qemu-iotests/078 +@@ -42,11 +42,19 @@ _supported_fmt bochs + _supported_proto generic + _supported_os Linux + ++catalog_size_offset=$((0x48)) ++ + echo + echo "== Read from a valid image ==" + _use_sample_img empty.bochs.bz2 + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Negative catalog size ==" ++_use_sample_img empty.bochs.bz2 ++poke_file "$TEST_IMG" "$catalog_size_offset" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/078.out b/tests/qemu-iotests/078.out +index 25d37c5..ef8c42d 100644 +--- a/tests/qemu-iotests/078.out ++++ b/tests/qemu-iotests/078.out +@@ -3,4 +3,8 @@ QA output created by 078 + == Read from a valid image == + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== Negative catalog size == ++qemu-io: can't open device TEST_DIR/empty.bochs: Could not open 'TEST_DIR/empty.bochs': Interrupted system call ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-boot-order-test-New-covering-just-PC-for-now.patch b/SOURCES/kvm-boot-order-test-New-covering-just-PC-for-now.patch new file mode 100644 index 0000000..082b01c --- /dev/null +++ b/SOURCES/kvm-boot-order-test-New-covering-just-PC-for-now.patch @@ -0,0 +1,138 @@ +From 99dd65105a5f7048d231e311b55995ef41f37278 Mon Sep 17 00:00:00 2001 +Message-Id: <99dd65105a5f7048d231e311b55995ef41f37278.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:20 +0200 +Subject: [PATCH 10/14] boot-order-test: New; covering just PC for now + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-11-git-send-email-armbru@redhat.com> +Patchwork-id: 54563 +O-Subject: [PATCH 7.0 qemu-kvm 10/10] boot-order-test: New; covering just PC for now +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Message-id: 1372254743-15808-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit edbd790d20cf19d039dfe431aaf0973a9e0afa8f) +--- + tests/Makefile | 2 ++ + tests/boot-order-test.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 75 insertions(+) + create mode 100644 tests/boot-order-test.c + +Signed-off-by: Michal Novotny +--- + tests/Makefile | 2 ++ + tests/boot-order-test.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 75 insertions(+) + create mode 100644 tests/boot-order-test.c + +diff --git a/tests/Makefile b/tests/Makefile +index c107489..394e029 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -54,6 +54,7 @@ gcov-files-i386-y = hw/fdc.c + check-qtest-i386-y += tests/ide-test$(EXESUF) + check-qtest-i386-y += tests/hd-geo-test$(EXESUF) + gcov-files-i386-y += hw/hd-geometry.c ++check-qtest-i386-y += tests/boot-order-test$(EXESUF) + check-qtest-i386-y += tests/rtc-test$(EXESUF) + check-qtest-i386-y += tests/i440fx-test$(EXESUF) + check-qtest-i386-y += tests/fw_cfg-test$(EXESUF) +@@ -130,6 +131,7 @@ tests/m48t59-test$(EXESUF): tests/m48t59-test.o + tests/fdc-test$(EXESUF): tests/fdc-test.o + tests/ide-test$(EXESUF): tests/ide-test.o $(libqos-pc-obj-y) + tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o ++tests/boot-order-test$(EXESUF): tests/boot-order-test.o + tests/tmp105-test$(EXESUF): tests/tmp105-test.o $(libqos-omap-obj-y) + tests/i440fx-test$(EXESUF): tests/i440fx-test.o $(libqos-pc-obj-y) + tests/fw_cfg-test$(EXESUF): tests/fw_cfg-test.o $(libqos-pc-obj-y) +diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c +new file mode 100644 +index 0000000..447be31 +--- /dev/null ++++ b/tests/boot-order-test.c +@@ -0,0 +1,73 @@ ++/* ++ * Boot order test cases. ++ * ++ * Copyright (c) 2013 Red Hat Inc. ++ * ++ * Authors: ++ * Markus Armbruster , ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ */ ++ ++#include ++#include "libqtest.h" ++ ++static void test_pc_cmos_byte(int reg, int expected) ++{ ++ int actual; ++ ++ outb(0x70, reg); ++ actual = inb(0x71); ++ g_assert_cmphex(actual, ==, expected); ++} ++ ++static void test_pc_cmos(uint8_t boot1, uint8_t boot2) ++{ ++ test_pc_cmos_byte(0x38, boot1); ++ test_pc_cmos_byte(0x3d, boot2); ++} ++ ++static void test_pc_with_args(const char *test_args, ++ uint8_t boot1, uint8_t boot2, ++ uint8_t reboot1, uint8_t reboot2) ++{ ++ char *args = g_strdup_printf("-nodefaults -display none %s", test_args); ++ ++ qtest_start(args); ++ test_pc_cmos(boot1, boot2); ++ qmp("{ 'execute': 'system_reset' }"); ++ /* ++ * system_reset only requests reset. We get a RESET event after ++ * the actual reset completes. Need to wait for that. ++ */ ++ qmp(""); /* HACK: wait for event */ ++ test_pc_cmos(reboot1, reboot2); ++ qtest_quit(global_qtest); ++ g_free(args); ++} ++ ++static void test_pc_boot_order(void) ++{ ++ test_pc_with_args("", 0x30, 0x12, 0x30, 0x12); ++ test_pc_with_args("-no-fd-bootchk", 0x31, 0x12, 0x31, 0x12); ++ test_pc_with_args("-boot c", 0, 0x02, 0, 0x02); ++ test_pc_with_args("-boot nda", 0x10, 0x34, 0x10, 0x34); ++ test_pc_with_args("-boot order=", 0, 0, 0, 0); ++ test_pc_with_args("-boot order= -boot order=c", 0, 0x02, 0, 0x02); ++ test_pc_with_args("-boot once=a", 0, 0x01, 0x30, 0x12); ++ test_pc_with_args("-boot once=a -no-fd-bootchk", 0x01, 0x01, 0x31, 0x12); ++ test_pc_with_args("-boot once=a,order=c", 0, 0x01, 0, 0x02); ++ test_pc_with_args("-boot once=d -boot order=nda", 0, 0x03, 0x10, 0x34); ++ test_pc_with_args("-boot once=a -boot once=b -boot once=c", ++ 0, 0x02, 0x30, 0x12); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ g_test_init(&argc, &argv, NULL); ++ ++ qtest_add_func("boot-order/pc", test_pc_boot_order); ++ ++ return g_test_run(); ++} +-- +1.7.11.7 + diff --git a/SOURCES/kvm-bswap.h-Remove-cpu_to_32wu.patch b/SOURCES/kvm-bswap.h-Remove-cpu_to_32wu.patch new file mode 100644 index 0000000..daf374c --- /dev/null +++ b/SOURCES/kvm-bswap.h-Remove-cpu_to_32wu.patch @@ -0,0 +1,68 @@ +From b718e298552cbecd1737c9401dc3ea613d6cd63b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:13 +0200 +Subject: [PATCH 17/27] bswap.h: Remove cpu_to_32wu() + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-2-kraxel@redhat.com> +Patchwork-id: 76821 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/7] bswap.h: Remove cpu_to_32wu() +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Peter Maydell + +Replace the legacy cpu_to_32wu() with stl_p(). + +Signed-off-by: Peter Maydell +Reviewed-by: Richard Henderson +Reviewed-by: Michael S. Tsirkin +Message-id: 1383669517-25598-10-git-send-email-peter.maydell@linaro.org +Signed-off-by: Anthony Liguori +(cherry picked from commit 7d579514a5a7b308b52d4e8567aa9bd1f7aa761b) + +[ rhel: pick vga update, drop drop include/qemu/bswap.h chunk ] + +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga_template.h | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/hw/display/vga_template.h b/hw/display/vga_template.h +index f6f6a01..6cfae56 100644 +--- a/hw/display/vga_template.h ++++ b/hw/display/vga_template.h +@@ -113,20 +113,22 @@ static void glue(vga_draw_glyph9_, DEPTH)(uint8_t *d, int linesize, + do { + font_data = font_ptr[0]; + #if BPP == 1 +- cpu_to_32wu((uint32_t *)d, (dmask16[(font_data >> 4)] & xorcol) ^ bgcol); ++ stl_p((uint32_t *)d, (dmask16[(font_data >> 4)] & xorcol) ^ bgcol); + v = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol; +- cpu_to_32wu(((uint32_t *)d)+1, v); ++ stl_p(((uint32_t *)d)+1, v); + if (dup9) + ((uint8_t *)d)[8] = v >> (24 * (1 - BIG)); + else + ((uint8_t *)d)[8] = bgcol; + + #elif BPP == 2 +- cpu_to_32wu(((uint32_t *)d)+0, (dmask4[(font_data >> 6)] & xorcol) ^ bgcol); +- cpu_to_32wu(((uint32_t *)d)+1, (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol); +- cpu_to_32wu(((uint32_t *)d)+2, (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol); ++ stl_p(((uint32_t *)d)+0, (dmask4[(font_data >> 6)] & xorcol) ^ bgcol); ++ stl_p(((uint32_t *)d)+1, ++ (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol); ++ stl_p(((uint32_t *)d)+2, ++ (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol); + v = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol; +- cpu_to_32wu(((uint32_t *)d)+3, v); ++ stl_p(((uint32_t *)d)+3, v); + if (dup9) + ((uint16_t *)d)[8] = v >> (16 * (1 - BIG)); + else +-- +1.8.3.1 + diff --git a/SOURCES/kvm-bswap.h-Remove-cpu_to_be16wu.patch b/SOURCES/kvm-bswap.h-Remove-cpu_to_be16wu.patch new file mode 100644 index 0000000..c3ca93e --- /dev/null +++ b/SOURCES/kvm-bswap.h-Remove-cpu_to_be16wu.patch @@ -0,0 +1,197 @@ +From 30ed4a7f03ef8820773f6eb7d63e982ad04aa8d6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= +Date: Sat, 13 Jul 2019 12:38:01 +0200 +Subject: [PATCH 2/4] bswap.h: Remove cpu_to_be16wu() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Philippe Mathieu-Daudé +Message-id: <20190713123802.23932-2-philmd@redhat.com> +Patchwork-id: 89507 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 1/2] bswap.h: Remove cpu_to_be16wu() +Bugzilla: 1270166 +RH-Acked-by: Xiao Wang +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Stefano Garzarella + +From: Peter Maydell + +Replace the legacy cpu_to_be16wu() with stw_be_p(). + +Signed-off-by: Peter Maydell +Reviewed-by: Richard Henderson +Reviewed-by: Michael S. Tsirkin +Message-id: 1383669517-25598-7-git-send-email-peter.maydell@linaro.org +Signed-off-by: Anthony Liguori +(cherry picked from commit d8ee2591e495d5feb0e0250866222dedc805c8d8) +[PMD: fix conflict in include/qemu/bswap.h] +Signed-off-by: Philippe Mathieu-Daudé + +Signed-off-by: Miroslav Rezanina +--- + hw/block/cdrom.c | 4 ++-- + hw/ide/atapi.c | 16 ++++++++-------- + hw/net/e1000.c | 19 ++++++++----------- + include/qemu/bswap.h | 5 ----- + 4 files changed, 18 insertions(+), 26 deletions(-) + +diff --git a/hw/block/cdrom.c b/hw/block/cdrom.c +index 38469fa..5c69f34 100644 +--- a/hw/block/cdrom.c ++++ b/hw/block/cdrom.c +@@ -77,7 +77,7 @@ int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track) + q += 4; + } + len = q - buf; +- cpu_to_be16wu((uint16_t *)buf, len - 2); ++ stw_be_p(buf, len - 2); + return len; + } + +@@ -150,6 +150,6 @@ int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num) + } + + len = q - buf; +- cpu_to_be16wu((uint16_t *)buf, len - 2); ++ stw_be_p(buf, len - 2); + return len; + } +diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c +index a411748..490070a 100644 +--- a/hw/ide/atapi.c ++++ b/hw/ide/atapi.c +@@ -454,7 +454,7 @@ static int ide_dvd_read_structure(IDEState *s, int format, + cpu_to_ube32(buf + 16, total_sectors - 1); /* l0 end sector */ + + /* Size of buffer, not including 2 byte size field */ +- cpu_to_be16wu((uint16_t *)buf, 2048 + 2); ++ stw_be_p(buf, 2048 + 2); + + /* 2k data + 4 byte header */ + return (2048 + 4); +@@ -465,7 +465,7 @@ static int ide_dvd_read_structure(IDEState *s, int format, + buf[5] = 0; /* no region restrictions */ + + /* Size of buffer, not including 2 byte size field */ +- cpu_to_be16wu((uint16_t *)buf, 4 + 2); ++ stw_be_p(buf, 4 + 2); + + /* 4 byte header + 4 byte data */ + return (4 + 4); +@@ -475,7 +475,7 @@ static int ide_dvd_read_structure(IDEState *s, int format, + + case 0x04: /* DVD disc manufacturing information */ + /* Size of buffer, not including 2 byte size field */ +- cpu_to_be16wu((uint16_t *)buf, 2048 + 2); ++ stw_be_p(buf, 2048 + 2); + + /* 2k data + 4 byte header */ + return (2048 + 4); +@@ -488,22 +488,22 @@ static int ide_dvd_read_structure(IDEState *s, int format, + + buf[4] = 0x00; /* Physical format */ + buf[5] = 0x40; /* Not writable, is readable */ +- cpu_to_be16wu((uint16_t *)(buf + 6), 2048 + 4); ++ stw_be_p(buf + 6, 2048 + 4); + + buf[8] = 0x01; /* Copyright info */ + buf[9] = 0x40; /* Not writable, is readable */ +- cpu_to_be16wu((uint16_t *)(buf + 10), 4 + 4); ++ stw_be_p(buf + 10, 4 + 4); + + buf[12] = 0x03; /* BCA info */ + buf[13] = 0x40; /* Not writable, is readable */ +- cpu_to_be16wu((uint16_t *)(buf + 14), 188 + 4); ++ stw_be_p(buf + 14, 188 + 4); + + buf[16] = 0x04; /* Manufacturing info */ + buf[17] = 0x40; /* Not writable, is readable */ +- cpu_to_be16wu((uint16_t *)(buf + 18), 2048 + 4); ++ stw_be_p(buf + 18, 2048 + 4); + + /* Size of buffer, not including 2 byte size field */ +- cpu_to_be16wu((uint16_t *)buf, 16 + 2); ++ stw_be_p(buf, 16 + 2); + + /* data written + 4 byte header */ + return (16 + 4); +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index 2cd38bc..711d369 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -442,8 +442,7 @@ putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse) + n = cse + 1; + if (sloc < n-1) { + sum = net_checksum_add(n-css, data+css); +- cpu_to_be16wu((uint16_t *)(data + sloc), +- net_checksum_finish(sum)); ++ stw_be_p(data + sloc, net_checksum_finish(sum)); + } + } + +@@ -504,13 +503,11 @@ xmit_seg(E1000State *s) + DBGOUT(TXSUM, "frames %d size %d ipcss %d\n", + frames, tp->size, css); + if (tp->ip) { // IPv4 +- cpu_to_be16wu((uint16_t *)(tp->data+css+2), +- tp->size - css); +- cpu_to_be16wu((uint16_t *)(tp->data+css+4), ++ stw_be_p(tp->data+css+2, tp->size - css); ++ stw_be_p(tp->data+css+4, + be16_to_cpup((uint16_t *)(tp->data+css+4))+frames); + } else // IPv6 +- cpu_to_be16wu((uint16_t *)(tp->data+css+4), +- tp->size - css); ++ stw_be_p(tp->data+css+4, tp->size - css); + css = tp->tucss; + len = tp->size - css; + DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len); +@@ -521,14 +518,14 @@ xmit_seg(E1000State *s) + if (tp->paylen - sofar > tp->mss) + tp->data[css + 13] &= ~9; // PSH, FIN + } else // UDP +- cpu_to_be16wu((uint16_t *)(tp->data+css+4), len); ++ stw_be_p(tp->data+css+4, len); + if (tp->sum_needed & E1000_TXD_POPTS_TXSM) { + unsigned int phsum; + // add pseudo-header length before checksum calculation + sp = (uint16_t *)(tp->data + tp->tucso); + phsum = be16_to_cpup(sp) + len; + phsum = (phsum >> 16) + (phsum & 0xffff); +- cpu_to_be16wu(sp, phsum); ++ stw_be_p(sp, phsum); + } + tp->tso_frames++; + } +@@ -596,9 +593,9 @@ process_tx_desc(E1000State *s, struct e1000_tx_desc *dp) + if (vlan_enabled(s) && is_vlan_txd(txd_lower) && + (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) { + tp->vlan_needed = 1; +- cpu_to_be16wu((uint16_t *)(tp->vlan_header), ++ stw_be_p(tp->vlan_header, + le16_to_cpup((uint16_t *)(s->mac_reg + VET))); +- cpu_to_be16wu((uint16_t *)(tp->vlan_header + 2), ++ stw_be_p(tp->vlan_header + 2, + le16_to_cpu(dp->upper.fields.special)); + } + +diff --git a/include/qemu/bswap.h b/include/qemu/bswap.h +index 14a5f65..91734ad 100644 +--- a/include/qemu/bswap.h ++++ b/include/qemu/bswap.h +@@ -437,11 +437,6 @@ static inline uint32_t be32_to_cpupu(const uint32_t *p) + return ldl_be_p(p); + } + +-static inline void cpu_to_be16wu(uint16_t *p, uint16_t v) +-{ +- stw_be_p(p, v); +-} +- + static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) + { + stl_be_p(p, v); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-buffer-add-buffer_move.patch b/SOURCES/kvm-buffer-add-buffer_move.patch new file mode 100644 index 0000000..528157d --- /dev/null +++ b/SOURCES/kvm-buffer-add-buffer_move.patch @@ -0,0 +1,74 @@ +From e0406c32a13c399b646834089779c39341143253 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:20 +0100 +Subject: [PATCH 06/27] buffer: add buffer_move + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-7-berrange@redhat.com> +Patchwork-id: 78944 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 06/27] buffer: add buffer_move +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-5-git-send-email-kraxel@redhat.com +(cherry picked from commit 830a9583206a051c240b74c3f688a015dc5d2967) + + Conflicts: + include/qemu/buffer.h + util/buffer.c - APIs are still in vnc.{c,h} + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 16 ++++++++++++++++ + ui/vnc.h | 1 + + 2 files changed, 17 insertions(+) + +diff --git a/ui/vnc.c b/ui/vnc.c +index b520f58..95457ad 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -530,6 +530,22 @@ void buffer_move_empty(Buffer *to, Buffer *from) + from->buffer = NULL; + } + ++void buffer_move(Buffer *to, Buffer *from) ++{ ++ if (to->offset == 0) { ++ buffer_move_empty(to, from); ++ return; ++ } ++ ++ buffer_reserve(to, from->offset); ++ buffer_append(to, from->buffer, from->offset); ++ ++ g_free(from->buffer); ++ from->offset = 0; ++ from->capacity = 0; ++ from->buffer = NULL; ++} ++ + + static void vnc_desktop_resize(VncState *vs) + { +diff --git a/ui/vnc.h b/ui/vnc.h +index c300660..703fef9 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -549,6 +549,7 @@ void buffer_append(Buffer *buffer, const void *data, size_t len); + void buffer_advance(Buffer *buf, size_t len); + uint8_t *buffer_end(Buffer *buffer); + void buffer_move_empty(Buffer *to, Buffer *from); ++void buffer_move(Buffer *to, Buffer *from); + + + /* Misc helpers */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-buffer-add-buffer_move_empty.patch b/SOURCES/kvm-buffer-add-buffer_move_empty.patch new file mode 100644 index 0000000..8983b1a --- /dev/null +++ b/SOURCES/kvm-buffer-add-buffer_move_empty.patch @@ -0,0 +1,73 @@ +From 4c2f805375c0dc66cdd2a30b29c03021833e02ca Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:19 +0100 +Subject: [PATCH 05/27] buffer: add buffer_move_empty + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-6-berrange@redhat.com> +Patchwork-id: 78934 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 05/27] buffer: add buffer_move_empty +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel Berrange +Message-id: 1446203414-4013-4-git-send-email-kraxel@redhat.com +(cherry picked from commit 4d1eb5fdb141c9100eb82e1dc7d4547fb1decd8b) + + Conflicts: + include/qemu/buffer.h + util/buffer.c - APIs are still in vnc.{c,h} + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 15 +++++++++++++++ + ui/vnc.h | 1 + + 2 files changed, 16 insertions(+) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 9047862..b520f58 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -516,6 +516,21 @@ void buffer_advance(Buffer *buf, size_t len) + buf->offset -= len; + } + ++void buffer_move_empty(Buffer *to, Buffer *from) ++{ ++ assert(to->offset == 0); ++ ++ g_free(to->buffer); ++ to->offset = from->offset; ++ to->capacity = from->capacity; ++ to->buffer = from->buffer; ++ ++ from->offset = 0; ++ from->capacity = 0; ++ from->buffer = NULL; ++} ++ ++ + static void vnc_desktop_resize(VncState *vs) + { + if (vs->csock == -1 || !vnc_has_feature(vs, VNC_FEATURE_RESIZE)) { +diff --git a/ui/vnc.h b/ui/vnc.h +index d1badbb..c300660 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -548,6 +548,7 @@ void buffer_free(Buffer *buffer); + void buffer_append(Buffer *buffer, const void *data, size_t len); + void buffer_advance(Buffer *buf, size_t len); + uint8_t *buffer_end(Buffer *buffer); ++void buffer_move_empty(Buffer *to, Buffer *from); + + + /* Misc helpers */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-build-reenable-local-builds-to-pass-enable-debug-RHE.patch b/SOURCES/kvm-build-reenable-local-builds-to-pass-enable-debug-RHE.patch new file mode 100644 index 0000000..4de900b --- /dev/null +++ b/SOURCES/kvm-build-reenable-local-builds-to-pass-enable-debug-RHE.patch @@ -0,0 +1,80 @@ +From 984faac66812652082fc9aa46eceb21669c1131b Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 10 Feb 2015 19:41:34 +0100 +Subject: [PATCH 11/16] build: reenable local builds to pass --enable-debug + (RHEL only) + +Message-id: <1423597294-16022-2-git-send-email-lersek@redhat.com> +Patchwork-id: 63788 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/1] build: reenable local builds to pass --enable-debug (RHEL only) +Bugzilla: +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Max Reitz + +RHEL-7 commit f6852e27 dropped the "isa-ide" device, and observed: + + Unresolved extern symbols pose no real danger, because they fail safely + at link time. Note for the curious: the optimizer gets rid of the + reference to isa_ide_init() in hw/i386/pc_piix.c. + +For local builds it is sometimes useful to pass --enable-debug to the +configure script. However that flag disables the optimizer, and the +isa_ide_init() call is not eliminated during compilation; it reaches the +linker. The linker then barfs + + LINK x86_64-softmmu/qemu-system-x86_64 + hw/i386/pc_piix.o: In function `pc_init1': + .../hw/i386/pc_piix.c:221: undefined reference to `isa_ide_init' + collect2: error: ld returned 1 exit status + +Provide a stub implementation for isa_ide_init(), reenabling local debug +builds. + +No copyright notice is added to the top of the new file, following the +pattern set by other stub files. + +Signed-off-by: Laszlo Ersek +--- + stubs/Makefile.objs | 1 + + stubs/ide-isa.c | 12 ++++++++++++ + 2 files changed, 13 insertions(+) + create mode 100644 stubs/ide-isa.c + +Signed-off-by: Miroslav Rezanina +--- + stubs/Makefile.objs | 1 + + stubs/ide-isa.c | 12 ++++++++++++ + 2 files changed, 13 insertions(+) + create mode 100644 stubs/ide-isa.c + +diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs +index 4b2cb7d..590008e 100644 +--- a/stubs/Makefile.objs ++++ b/stubs/Makefile.objs +@@ -26,3 +26,4 @@ stub-obj-y += vm-stop.o + stub-obj-y += vmstate.o + stub-obj-$(CONFIG_WIN32) += fd-register.o + stub-obj-y += cpus.o ++stub-obj-y += ide-isa.o +diff --git a/stubs/ide-isa.c b/stubs/ide-isa.c +new file mode 100644 +index 0000000..4074aff +--- /dev/null ++++ b/stubs/ide-isa.c +@@ -0,0 +1,12 @@ ++#include ++#include ++ ++ISADevice *isa_ide_init(ISABus *bus, int iobase, int iobase2, int isairq, ++ DriveInfo *hd0, DriveInfo *hd1) ++{ ++ /* ++ * In theory the real isa_ide_init() function can return NULL, but no ++ * caller actually checks for that. Make sure we go out with a clear bang. ++ */ ++ abort(); ++} +-- +1.8.3.1 + diff --git a/SOURCES/kvm-build-sys-restrict-vmcoreinfo-to-fw_cfg-dma-capable-.patch b/SOURCES/kvm-build-sys-restrict-vmcoreinfo-to-fw_cfg-dma-capable-.patch new file mode 100644 index 0000000..83ab55d --- /dev/null +++ b/SOURCES/kvm-build-sys-restrict-vmcoreinfo-to-fw_cfg-dma-capable-.patch @@ -0,0 +1,77 @@ +From bf8a461cbf2030ed4d18aa9b5dc9c23d7a1059df Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:46 +0100 +Subject: [PATCH 15/41] build-sys: restrict vmcoreinfo to fw_cfg+dma capable + targets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-16-marcandre.lureau@redhat.com> +Patchwork-id: 78365 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 15/41] build-sys: restrict vmcoreinfo to fw_cfg+dma capable targets +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +vmcoreinfo is built for all targets. However, it requires fw_cfg with +DMA operations support (write operation). Restrict vmcoreinfo exposure +to x86 architectures that are supporting FW_CFG_DMA. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Thomas Huth +Reviewed-by: Daniel Henrique Barboza +Tested-by: Daniel Henrique Barboza +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit f865da7c369fa00b2ccaf6bce158ad2701b2a27c) + +RHEL: minor build-sys conflicts. + +Removed unsupport architectures, update commit message. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + default-configs/i386-softmmu.mak | 1 + + default-configs/x86_64-softmmu.mak | 1 + + hw/misc/Makefile.objs | 2 +- + 3 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index fb84f80..aeeac4e 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -45,3 +45,4 @@ CONFIG_APIC=y + CONFIG_IOAPIC=y + CONFIG_ICC_BUS=y + CONFIG_PVPANIC=y ++CONFIG_FW_CFG_DMA=y +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index a6fdf84..19667bf 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -38,3 +38,4 @@ CONFIG_APIC=y + CONFIG_IOAPIC=y + CONFIG_ICC_BUS=y + CONFIG_PVPANIC=y ++CONFIG_FW_CFG_DMA=y +diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs +index 39b6593..f692fcd 100644 +--- a/hw/misc/Makefile.objs ++++ b/hw/misc/Makefile.objs +@@ -5,7 +5,7 @@ common-obj-$(CONFIG_ISA_DEBUG) += debugexit.o + common-obj-$(CONFIG_SGA) += sga.o + common-obj-$(CONFIG_ISA_TESTDEV) += pc-testdev.o + common-obj-$(CONFIG_PCI_TESTDEV) += pci-testdev.o +-common-obj-y += vmcoreinfo.o ++common-obj-$(CONFIG_FW_CFG_DMA) += vmcoreinfo.o + + obj-$(CONFIG_VMPORT) += vmport.o + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-change-qemu_chr_fe_add_watch-to-return-unsigned.patch b/SOURCES/kvm-char-change-qemu_chr_fe_add_watch-to-return-unsigned.patch new file mode 100644 index 0000000..6792339 --- /dev/null +++ b/SOURCES/kvm-char-change-qemu_chr_fe_add_watch-to-return-unsigned.patch @@ -0,0 +1,102 @@ +From 6106261b0f1501a3772f4f9b67ae329697c7b815 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 23 May 2017 13:43:59 +0200 +Subject: [PATCH] char: change qemu_chr_fe_add_watch to return unsigned + +RH-Author: Eduardo Habkost +Message-id: <20170523134359.8747-1-ehabkost@redhat.com> +Patchwork-id: 75396 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] char: change qemu_chr_fe_add_watch to return unsigned +Bugzilla: 1451470 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1451470#c32 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=13257025 + +g_source_attach can return any value between 1 and UINT_MAX if you let +QEMU run long enough. However, qemu_chr_fe_add_watch can also return +a negative errno value when the device is disconnected or does not +support chr_add_watch. Change it to return zero to avoid overloading +these values. + +Fix the cadence_uart which asserts in this case (easily obtained with +"-serial pty"). + +Backport Conflicts: + hw/char/cadence_uart.c (no qemu_chr_fe_add_watch() call) + net/vhost-user.c (doesn't exit) + qemu-char.c (trivial conflict) + +Tested-by: Bret Ketchum +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 6f1de6b70d857d5e316ae6fd908f52818b827b08) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/char.h | 16 ++++++++++++++-- + qemu-char.c | 8 ++++---- + 2 files changed, 18 insertions(+), 6 deletions(-) + +diff --git a/include/sysemu/char.h b/include/sysemu/char.h +index ad101d9..c0e5b25 100644 +--- a/include/sysemu/char.h ++++ b/include/sysemu/char.h +@@ -147,8 +147,20 @@ void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open); + void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...) + GCC_FMT_ATTR(2, 3); + +-int qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond, +- GIOFunc func, void *user_data); ++/** ++ * @qemu_chr_fe_add_watch: ++ * ++ * If the backend is connected, create and add a #GSource that fires ++ * when the given condition (typically G_IO_OUT|G_IO_HUP or G_IO_HUP) ++ * is active; return the #GSource's tag. If it is disconnected, ++ * return 0. ++ * ++ * @cond the condition to poll for ++ * @func the function to call when the condition happens ++ * @user_data the opaque pointer to pass to @func ++ */ ++guint qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond, ++ GIOFunc func, void *user_data); + + /** + * @qemu_chr_fe_write: +diff --git a/qemu-char.c b/qemu-char.c +index 08cb959..5edca0a 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3373,19 +3373,19 @@ void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open) + } + } + +-int qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond, +- GIOFunc func, void *user_data) ++guint qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond, ++ GIOFunc func, void *user_data) + { + GSource *src; + guint tag; + + if (s->chr_add_watch == NULL) { +- return -ENOSYS; ++ return 0; + } + + src = s->chr_add_watch(s, cond); + if (!src) { +- return -EINVAL; ++ return 0; + } + + g_source_set_callback(src, (GSourceFunc)func, user_data, NULL); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-io_channel_send-don-t-lose-written-bytes.patch b/SOURCES/kvm-char-io_channel_send-don-t-lose-written-bytes.patch new file mode 100644 index 0000000..c412fc6 --- /dev/null +++ b/SOURCES/kvm-char-io_channel_send-don-t-lose-written-bytes.patch @@ -0,0 +1,93 @@ +From ddc3793752ae726e761173ce214ab895b936d15a Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 19 Jul 2013 13:05:22 +0200 +Subject: char: io_channel_send: don't lose written bytes + +RH-Author: Laszlo Ersek +Message-id: <1374239123-4841-2-git-send-email-lersek@redhat.com> +Patchwork-id: 52615 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/2] char: io_channel_send: don't lose written bytes +Bugzilla: 970047 +RH-Acked-by: Amit Shah +RH-Acked-by: Markus Armbruster +RH-Acked-by: Luiz Capitulino + +The g_io_channel_write_chars() documentation states, + + bytes_written: The number of bytes written. This can be nonzero even if + the return value is not G_IO_STATUS_NORMAL. [...] + +io_channel_send() could lose such bytes before. + +Furthermore, the (status == G_IO_STATUS_EOF) condition used to evaluate to +constant false whenever it was reached. When that condition actually held, +it always led to -1 / EINVAL. This patch (almost) distinguishes +G_IO_STATUS_EOF only when no bytes have been written, and then treats it +as an error. + +Signed-off-by: Laszlo Ersek +Reviewed-by: Amit Shah +Reviewed-by: Anthony Liguori +Message-id: 1373998781-29561-2-git-send-email-lersek@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit ac8c26f633b01bb32cdf347f9dbd5a80c6712925) + +diff --git a/qemu-char.c b/qemu-char.c +index efe706d..c01deae 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -722,35 +722,32 @@ static GIOChannel *io_channel_from_socket(int fd) + + static int io_channel_send(GIOChannel *fd, const void *buf, size_t len) + { +- GIOStatus status; +- size_t offset; ++ size_t offset = 0; ++ GIOStatus status = G_IO_STATUS_NORMAL; + +- offset = 0; +- while (offset < len) { +- gsize bytes_written; ++ while (offset < len && status == G_IO_STATUS_NORMAL) { ++ gsize bytes_written = 0; + + status = g_io_channel_write_chars(fd, buf + offset, len - offset, + &bytes_written, NULL); +- if (status != G_IO_STATUS_NORMAL) { +- if (status == G_IO_STATUS_AGAIN) { +- /* If we've written any data, return a partial write. */ +- if (offset) { +- break; +- } +- errno = EAGAIN; +- } else { +- errno = EINVAL; +- } +- +- return -1; +- } else if (status == G_IO_STATUS_EOF) { +- break; +- } +- + offset += bytes_written; + } + +- return offset; ++ if (offset > 0) { ++ return offset; ++ } ++ switch (status) { ++ case G_IO_STATUS_NORMAL: ++ g_assert(len == 0); ++ return 0; ++ case G_IO_STATUS_AGAIN: ++ errno = EAGAIN; ++ return -1; ++ default: ++ break; ++ } ++ errno = EINVAL; ++ return -1; + } + + #ifndef _WIN32 diff --git a/SOURCES/kvm-char-move-backends-io-watch-tag-to-CharDriverState.patch b/SOURCES/kvm-char-move-backends-io-watch-tag-to-CharDriverState.patch new file mode 100644 index 0000000..a58b868 --- /dev/null +++ b/SOURCES/kvm-char-move-backends-io-watch-tag-to-CharDriverState.patch @@ -0,0 +1,248 @@ +From 418c81950cabb2c5b51060476396ddb0897ee2e7 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Tue, 8 Oct 2013 06:13:05 +0200 +Subject: [PATCH 06/11] char: move backends' io watch tag to CharDriverState + +RH-Author: Amit Shah +Message-id: <425ec481c2ad94003f59ce6febaa1143fcf853e5.1381210228.git.amit.shah@redhat.com> +Patchwork-id: 54727 +O-Subject: [RHEL7 qemu-kvm PATCH 1/3] char: move backends' io watch tag to CharDriverState +Bugzilla: 1007222 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Michael S. Tsirkin + +All the backends implement an io watcher tag for callbacks. Move it to +CharDriverState from each backend's struct to make accessing the tag from +backend-neutral functions easier. + +This will be used later to cancel a callback on chardev detach from a +frontend. + +CC: +Reviewed-by: Gerd Hoffmann +Signed-off-by: Amit Shah +--- + include/sysemu/char.h | 1 + + qemu-char.c | 77 ++++++++++++++++++++++++++------------------------- + 2 files changed, 40 insertions(+), 38 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/char.h | 1 + + qemu-char.c | 77 +++++++++++++++++++++++++------------------------ + 2 files changed, 40 insertions(+), 38 deletions(-) + +diff --git a/include/sysemu/char.h b/include/sysemu/char.h +index ac2aaaf..f0ed280 100644 +--- a/include/sysemu/char.h ++++ b/include/sysemu/char.h +@@ -78,6 +78,7 @@ struct CharDriverState { + int explicit_be_open; + int avail_connections; + int is_mux; ++ guint fd_in_tag; + QemuOpts *opts; + QTAILQ_ENTRY(CharDriverState) next; + }; +diff --git a/qemu-char.c b/qemu-char.c +index 566267a..00cbf88 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -800,7 +800,6 @@ static int io_channel_send(GIOChannel *fd, const void *buf, size_t len) + typedef struct FDCharDriver { + CharDriverState *chr; + GIOChannel *fd_in, *fd_out; +- guint fd_in_tag; + int max_size; + QTAILQ_ENTRY(FDCharDriver) node; + } FDCharDriver; +@@ -832,9 +831,9 @@ static gboolean fd_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) + status = g_io_channel_read_chars(chan, (gchar *)buf, + len, &bytes_read, NULL); + if (status == G_IO_STATUS_EOF) { +- if (s->fd_in_tag) { +- io_remove_watch_poll(s->fd_in_tag); +- s->fd_in_tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + qemu_chr_be_event(chr, CHR_EVENT_CLOSED); + return FALSE; +@@ -865,13 +864,14 @@ static void fd_chr_update_read_handler(CharDriverState *chr) + { + FDCharDriver *s = chr->opaque; + +- if (s->fd_in_tag) { +- io_remove_watch_poll(s->fd_in_tag); +- s->fd_in_tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + + if (s->fd_in) { +- s->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll, fd_chr_read, chr); ++ chr->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll, ++ fd_chr_read, chr); + } + } + +@@ -879,9 +879,9 @@ static void fd_chr_close(struct CharDriverState *chr) + { + FDCharDriver *s = chr->opaque; + +- if (s->fd_in_tag) { +- io_remove_watch_poll(s->fd_in_tag); +- s->fd_in_tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + + if (s->fd_in) { +@@ -1016,7 +1016,6 @@ static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts) + + typedef struct { + GIOChannel *fd; +- guint fd_tag; + int connected; + int read_bytes; + guint timer_tag; +@@ -1131,9 +1130,9 @@ static void pty_chr_state(CharDriverState *chr, int connected) + PtyCharDriver *s = chr->opaque; + + if (!connected) { +- if (s->fd_tag) { +- io_remove_watch_poll(s->fd_tag); +- s->fd_tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + s->connected = 0; + /* (re-)connect poll interval for idle guests: once per second. +@@ -1148,7 +1147,8 @@ static void pty_chr_state(CharDriverState *chr, int connected) + if (!s->connected) { + s->connected = 1; + qemu_chr_be_generic_open(chr); +- s->fd_tag = io_add_watch_poll(s->fd, pty_chr_read_poll, pty_chr_read, chr); ++ chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll, ++ pty_chr_read, chr); + } + } + } +@@ -1159,9 +1159,9 @@ static void pty_chr_close(struct CharDriverState *chr) + PtyCharDriver *s = chr->opaque; + int fd; + +- if (s->fd_tag) { +- io_remove_watch_poll(s->fd_tag); +- s->fd_tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + fd = g_io_channel_unix_get_fd(s->fd); + g_io_channel_unref(s->fd); +@@ -2169,7 +2169,6 @@ static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts) + typedef struct { + int fd; + GIOChannel *chan; +- guint tag; + uint8_t buf[READ_BUF_LEN]; + int bufcnt; + int bufptr; +@@ -2225,9 +2224,9 @@ static gboolean udp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) + s->bufcnt = bytes_read; + s->bufptr = s->bufcnt; + if (status != G_IO_STATUS_NORMAL) { +- if (s->tag) { +- io_remove_watch_poll(s->tag); +- s->tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + return FALSE; + } +@@ -2246,22 +2245,23 @@ static void udp_chr_update_read_handler(CharDriverState *chr) + { + NetCharDriver *s = chr->opaque; + +- if (s->tag) { +- io_remove_watch_poll(s->tag); +- s->tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + + if (s->chan) { +- s->tag = io_add_watch_poll(s->chan, udp_chr_read_poll, udp_chr_read, chr); ++ chr->fd_in_tag = io_add_watch_poll(s->chan, udp_chr_read_poll, ++ udp_chr_read, chr); + } + } + + static void udp_chr_close(CharDriverState *chr) + { + NetCharDriver *s = chr->opaque; +- if (s->tag) { +- io_remove_watch_poll(s->tag); +- s->tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + if (s->chan) { + g_io_channel_unref(s->chan); +@@ -2310,7 +2310,7 @@ static CharDriverState *qemu_chr_open_udp(QemuOpts *opts) + typedef struct { + + GIOChannel *chan, *listen_chan; +- guint tag, listen_tag; ++ guint listen_tag; + int fd, listen_fd; + int connected; + int max_size; +@@ -2495,9 +2495,9 @@ static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) + if (s->listen_chan) { + s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN, tcp_chr_accept, chr); + } +- if (s->tag) { +- io_remove_watch_poll(s->tag); +- s->tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + g_io_channel_unref(s->chan); + s->chan = NULL; +@@ -2528,7 +2528,8 @@ static void tcp_chr_connect(void *opaque) + + s->connected = 1; + if (s->chan) { +- s->tag = io_add_watch_poll(s->chan, tcp_chr_read_poll, tcp_chr_read, chr); ++ chr->fd_in_tag = io_add_watch_poll(s->chan, tcp_chr_read_poll, ++ tcp_chr_read, chr); + } + qemu_chr_be_generic_open(chr); + } +@@ -2611,9 +2612,9 @@ static void tcp_chr_close(CharDriverState *chr) + { + TCPCharDriver *s = chr->opaque; + if (s->fd >= 0) { +- if (s->tag) { +- io_remove_watch_poll(s->tag); +- s->tag = 0; ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; + } + if (s->chan) { + g_io_channel_unref(s->chan); +-- +1.7.1 + diff --git a/SOURCES/kvm-char-remove-watch-callback-on-chardev-detach-from-fr.patch b/SOURCES/kvm-char-remove-watch-callback-on-chardev-detach-from-fr.patch new file mode 100644 index 0000000..753f372 --- /dev/null +++ b/SOURCES/kvm-char-remove-watch-callback-on-chardev-detach-from-fr.patch @@ -0,0 +1,66 @@ +From dd0ab2d849f8a93fe54a29eedb8a536fbc42fe5d Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Tue, 8 Oct 2013 06:13:07 +0200 +Subject: [PATCH 08/11] char: remove watch callback on chardev detach from frontend + +RH-Author: Amit Shah +Message-id: <0044db8c12053fd38667200f350132d7a3485cde.1381210228.git.amit.shah@redhat.com> +Patchwork-id: 54729 +O-Subject: [RHEL7 qemu-kvm PATCH 3/3] char: remove watch callback on chardev detach from frontend +Bugzilla: 1007222 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Michael S. Tsirkin + +If a frontend device releases the chardev (via unplug), the chr handlers +are set to NULL via qdev's exit callbacks invoking +qemu_chr_add_handlers(). If the chardev had a pending operation, a +callback will be invoked, which will try to access data in the +just-released frontend, causing a segfault. + +Ensure the callbacks are disabled when frontends release chardevs. + +This was seen when a virtio-serial port was unplugged when heavy +guest->host IO was in progress (causing a callback to be registered). +In the window in which the throttling was active, unplugging ports +caused a qemu segfault. + +https://bugzilla.redhat.com/show_bug.cgi?id=985205 + +CC: +Reported-by: Sibiao Luo +Reviewed-by: Gerd Hoffmann +Signed-off-by: Amit Shah +--- + qemu-char.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 8d46f98..2fb876c 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -195,6 +195,8 @@ void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...) + va_end(ap); + } + ++static void remove_fd_in_watch(CharDriverState *chr); ++ + void qemu_chr_add_handlers(CharDriverState *s, + IOCanReadHandler *fd_can_read, + IOReadHandler *fd_read, +@@ -205,6 +207,7 @@ void qemu_chr_add_handlers(CharDriverState *s, + + if (!opaque && !fd_can_read && !fd_read && !fd_event) { + fe_open = 0; ++ remove_fd_in_watch(s); + } else { + fe_open = 1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-char-report-frontend-open-closed-state-in-query-char.patch b/SOURCES/kvm-char-report-frontend-open-closed-state-in-query-char.patch new file mode 100644 index 0000000..3a515e6 --- /dev/null +++ b/SOURCES/kvm-char-report-frontend-open-closed-state-in-query-char.patch @@ -0,0 +1,119 @@ +From e49b0dccdd8687fb269610c86381bdcc8ec42222 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 22 Jul 2014 18:31:23 +0200 +Subject: [PATCH 03/11] char: report frontend open/closed state in 'query-chardev' + +Message-id: <1406053883-21237-3-git-send-email-lersek@redhat.com> +Patchwork-id: 60230 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/2] char: report frontend open/closed state in 'query-chardev' +Bugzilla: 1122151 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Amit Shah +RH-Acked-by: Eric Blake + +In addition to the on-line reporting added in the previous patch, allow +libvirt to query frontend state independently of events. + +Libvirt's path to identify the guest agent channel it cares about differs +between the event added in the previous patch and the QMP response field +added here. The event identifies the frontend device, by "id". The +'query-chardev' QMP command identifies the backend device (again by "id"). +The association is under libvirt's control. + +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1080376 + +Reviewed-by: Amit Shah +Signed-off-by: Laszlo Ersek +Reviewed-by: Eric Blake +Signed-off-by: Luiz Capitulino +(cherry picked from commit 32a97ea1711f43388e178b7c43e02143a61e47ee) +--- + qapi-schema.json | 8 +++++++- + qemu-char.c | 1 + + qmp-commands.hx | 19 ++++++++++++++----- + 3 files changed, 22 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 8 +++++++- + qemu-char.c | 1 + + qmp-commands.hx | 19 ++++++++++++++----- + 3 files changed, 22 insertions(+), 6 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index aaa86f5..604ec69 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -418,12 +418,18 @@ + # + # @filename: the filename of the character device + # ++# @frontend-open: shows whether the frontend device attached to this backend ++# (eg. with the chardev=... option) is in open or closed state ++# (since 2.1) ++# + # Notes: @filename is encoded using the QEMU command line character device + # encoding. See the QEMU man page for details. + # + # Since: 0.14.0 + ## +-{ 'type': 'ChardevInfo', 'data': {'label': 'str', 'filename': 'str'} } ++{ 'type': 'ChardevInfo', 'data': {'label': 'str', ++ 'filename': 'str', ++ 'frontend-open': 'bool'} } + + ## + # @query-chardev: +diff --git a/qemu-char.c b/qemu-char.c +index 930f3d4..47ac55a 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3435,6 +3435,7 @@ ChardevInfoList *qmp_query_chardev(Error **errp) + info->value = g_malloc0(sizeof(*info->value)); + info->value->label = g_strdup(chr->label); + info->value->filename = g_strdup(chr->filename); ++ info->value->frontend_open = chr->fe_open; + + info->next = chr_list; + chr_list = info; +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 1d4be84..405275c 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1782,19 +1782,28 @@ Each json-object contain the following: + + - "label": device's label (json-string) + - "filename": device's file (json-string) ++- "frontend-open": open/closed state of the frontend device attached to this ++ backend (json-bool) + + Example: + + -> { "execute": "query-chardev" } + <- { +- "return":[ ++ "return": [ ++ { ++ "label": "charchannel0", ++ "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server", ++ "frontend-open": false ++ }, + { +- "label":"monitor", +- "filename":"stdio" ++ "label": "charmonitor", ++ "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server", ++ "frontend-open": true + }, + { +- "label":"serial0", +- "filename":"vc" ++ "label": "charserial0", ++ "filename": "pty:/dev/pts/2", ++ "frontend-open": true + } + ] + } +-- +1.7.1 + diff --git a/SOURCES/kvm-char-restore-read-callback-on-a-reattached-hotplug-c.patch b/SOURCES/kvm-char-restore-read-callback-on-a-reattached-hotplug-c.patch new file mode 100644 index 0000000..90907b1 --- /dev/null +++ b/SOURCES/kvm-char-restore-read-callback-on-a-reattached-hotplug-c.patch @@ -0,0 +1,94 @@ +From 9c6b84014b3650e478494d3c19b7461b947b3b14 Mon Sep 17 00:00:00 2001 +From: Gal Hammer +Date: Sun, 16 Mar 2014 09:57:09 +0100 +Subject: [PATCH 01/31] char: restore read callback on a reattached (hotplug) chardev + +RH-Author: Gal Hammer +Message-id: <1394963829-5384-1-git-send-email-ghammer@redhat.com> +Patchwork-id: 58105 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] char: restore read callback on a reattached (hotplug) chardev +Bugzilla: 1038914 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Amit Shah +RH-Acked-by: Amos Kong + +Bugzilla: 1027181 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7207613 +Upstream: commit ac1b84dd1e020648db82a99260891aa982d1142c + +Fix a bug that was introduced in commit 386a5a1e. A removal of a device +set the chr handlers to NULL. However when the device is plugged back, +its read callback is not restored so data can't be transferred from the +host to the guest (e.g. via the virtio-serial port). + +https://bugzilla.redhat.com/show_bug.cgi?id=1027181 + +Signed-off-by: Gal Hammer +Signed-off-by: Gerd Hoffmann +--- + qemu-char.c | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 17 +++++++++++++++-- + 1 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 983f686..930f3d4 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -215,7 +215,7 @@ void qemu_chr_add_handlers(CharDriverState *s, + s->chr_read = fd_read; + s->chr_event = fd_event; + s->handler_opaque = opaque; +- if (s->chr_update_read_handler) ++ if (fe_open && s->chr_update_read_handler) + s->chr_update_read_handler(s); + + if (!s->explicit_fe_open) { +@@ -1140,13 +1140,14 @@ static void pty_chr_state(CharDriverState *chr, int connected) + if (!s->connected) { + s->connected = 1; + qemu_chr_be_generic_open(chr); ++ } ++ if (!chr->fd_in_tag) { + chr->fd_in_tag = io_add_watch_poll(s->fd, pty_chr_read_poll, + pty_chr_read, chr); + } + } + } + +- + static void pty_chr_close(struct CharDriverState *chr) + { + PtyCharDriver *s = chr->opaque; +@@ -2514,6 +2515,17 @@ static void tcp_chr_connect(void *opaque) + qemu_chr_be_generic_open(chr); + } + ++static void tcp_chr_update_read_handler(CharDriverState *chr) ++{ ++ TCPCharDriver *s = chr->opaque; ++ ++ remove_fd_in_watch(chr); ++ if (s->chan) { ++ chr->fd_in_tag = io_add_watch_poll(s->chan, tcp_chr_read_poll, ++ tcp_chr_read, chr); ++ } ++} ++ + #define IACSET(x,a,b,c) x[0] = a; x[1] = b; x[2] = c; + static void tcp_chr_telnet_init(int fd) + { +@@ -2669,6 +2681,7 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay, + chr->get_msgfd = tcp_get_msgfd; + chr->chr_add_client = tcp_chr_add_client; + chr->chr_add_watch = tcp_chr_add_watch; ++ chr->chr_update_read_handler = tcp_chr_update_read_handler; + /* be isn't opened until we get a connection */ + chr->explicit_be_open = true; + +-- +1.7.1 + diff --git a/SOURCES/kvm-char-serial-Fix-emptyness-check.patch b/SOURCES/kvm-char-serial-Fix-emptyness-check.patch new file mode 100644 index 0000000..4a30500 --- /dev/null +++ b/SOURCES/kvm-char-serial-Fix-emptyness-check.patch @@ -0,0 +1,46 @@ +From a7f735cccb7d7b98998600eebc789c709eac5bca Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:18 +0200 +Subject: [PATCH 05/18] char/serial: Fix emptyness check + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-6-famz@redhat.com> +Patchwork-id: 75296 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 05/18] char/serial: Fix emptyness check +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Peter Crosthwaite + +This was guarding against a full fifo rather than an empty fifo when +popping. Fix. + +Signed-off-by: Peter Crosthwaite +Reviewed-by: Martin Kletzander +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Michael Tokarev +(cherry picked from commit 88c1ee73d3231c74ff90bcfc084a7589670ec244) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 3345de1..489a885 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -225,7 +225,7 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + + if (s->tsr_retry <= 0) { + if (s->fcr & UART_FCR_FE) { +- s->tsr = fifo8_is_full(&s->xmit_fifo) ? ++ s->tsr = fifo8_is_empty(&s->xmit_fifo) ? + 0 : fifo8_pop(&s->xmit_fifo); + if (!s->xmit_fifo.num) { + s->lsr |= UART_LSR_THRE; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-serial-Fix-emptyness-handling.patch b/SOURCES/kvm-char-serial-Fix-emptyness-handling.patch new file mode 100644 index 0000000..3f42fe8 --- /dev/null +++ b/SOURCES/kvm-char-serial-Fix-emptyness-handling.patch @@ -0,0 +1,54 @@ +From 63857964e14bbf4bcb91eaa56ca46a30d14934ed Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:19 +0200 +Subject: [PATCH 06/18] char/serial: Fix emptyness handling + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-7-famz@redhat.com> +Patchwork-id: 75298 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 06/18] char/serial: Fix emptyness handling +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Don Slutz + +The commit 88c1ee73d3231c74ff90bcfc084a7589670ec244 +char/serial: Fix emptyness check + +Still causes extra NULL byte(s) to be sent. + +So if the fifo is empty, do not send an extra NULL byte. + +Reviewed-by: Peter Crosthwaite +Signed-off-by: Don Slutz +Message-id: 1395160174-16006-1-git-send-email-dslutz@verizon.com +Signed-off-by: Peter Maydell +(cherry picked from commit dffacd4654ec8bf2898aed230852154c6ed755ed) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 489a885..e020b0e 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -225,8 +225,10 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + + if (s->tsr_retry <= 0) { + if (s->fcr & UART_FCR_FE) { +- s->tsr = fifo8_is_empty(&s->xmit_fifo) ? +- 0 : fifo8_pop(&s->xmit_fifo); ++ if (fifo8_is_empty(&s->xmit_fifo)) { ++ return FALSE; ++ } ++ s->tsr = fifo8_pop(&s->xmit_fifo); + if (!s->xmit_fifo.num) { + s->lsr |= UART_LSR_THRE; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-serial-Use-generic-Fifo8.patch b/SOURCES/kvm-char-serial-Use-generic-Fifo8.patch new file mode 100644 index 0000000..bf9a9a4 --- /dev/null +++ b/SOURCES/kvm-char-serial-Use-generic-Fifo8.patch @@ -0,0 +1,290 @@ +From 18e92ed681383c787912d0cd4b8164d8e7df26d4 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:15 +0200 +Subject: [PATCH 02/18] char/serial: Use generic Fifo8 + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-3-famz@redhat.com> +Patchwork-id: 75292 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 02/18] char/serial: Use generic Fifo8 +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Peter Crosthwaite + +Use the generic Fifo8 helper provided by QEMU, rather than re-implement +privately. + +Signed-off-by: Peter Crosthwaite +Signed-off-by: Michael Tokarev +(cherry picked from commit 8e8638fa87ff045f5dadec7342301bf10de776ff) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/char/serial.c +Conflict because in downstream we've got 4df7961faa out of order. +--- + hw/char/serial.c | 98 +++++++++++++++++------------------------------- + include/hw/char/serial.h | 15 +++----- + 2 files changed, 39 insertions(+), 74 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 7866b0f..0d4450e 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -93,8 +93,6 @@ + #define UART_FCR_RFR 0x02 /* RCVR Fifo Reset */ + #define UART_FCR_FE 0x01 /* FIFO Enable */ + +-#define XMIT_FIFO 0 +-#define RECV_FIFO 1 + #define MAX_XMIT_RETRY 4 + + #ifdef DEBUG_SERIAL +@@ -107,50 +105,14 @@ do {} while (0) + + static void serial_receive1(void *opaque, const uint8_t *buf, int size); + +-static void fifo_clear(SerialState *s, int fifo) ++static inline void recv_fifo_put(SerialState *s, uint8_t chr) + { +- SerialFIFO *f = (fifo) ? &s->recv_fifo : &s->xmit_fifo; +- memset(f->data, 0, UART_FIFO_LENGTH); +- f->count = 0; +- f->head = 0; +- f->tail = 0; +-} +- +-static int fifo_put(SerialState *s, int fifo, uint8_t chr) +-{ +- SerialFIFO *f = (fifo) ? &s->recv_fifo : &s->xmit_fifo; +- + /* Receive overruns do not overwrite FIFO contents. */ +- if (fifo == XMIT_FIFO || f->count < UART_FIFO_LENGTH) { +- +- f->data[f->head++] = chr; +- +- if (f->head == UART_FIFO_LENGTH) +- f->head = 0; +- } +- +- if (f->count < UART_FIFO_LENGTH) +- f->count++; +- else if (fifo == RECV_FIFO) ++ if (!fifo8_is_full(&s->recv_fifo)) { ++ fifo8_push(&s->recv_fifo, chr); ++ } else { + s->lsr |= UART_LSR_OE; +- +- return 1; +-} +- +-static uint8_t fifo_get(SerialState *s, int fifo) +-{ +- SerialFIFO *f = (fifo) ? &s->recv_fifo : &s->xmit_fifo; +- uint8_t c; +- +- if(f->count == 0) +- return 0; +- +- c = f->data[f->tail++]; +- if (f->tail == UART_FIFO_LENGTH) +- f->tail = 0; +- f->count--; +- +- return c; ++ } + } + + static void serial_update_irq(SerialState *s) +@@ -166,7 +128,7 @@ static void serial_update_irq(SerialState *s) + tmp_iir = UART_IIR_CTI; + } else if ((s->ier & UART_IER_RDI) && (s->lsr & UART_LSR_DR) && + (!(s->fcr & UART_FCR_FE) || +- s->recv_fifo.count >= s->recv_fifo.itl)) { ++ s->recv_fifo.num >= s->recv_fifo_itl)) { + tmp_iir = UART_IIR_RDI; + } else if ((s->ier & UART_IER_THRI) && s->thr_ipending) { + tmp_iir = UART_IIR_THRI; +@@ -263,8 +225,9 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + + if (s->tsr_retry <= 0) { + if (s->fcr & UART_FCR_FE) { +- s->tsr = fifo_get(s,XMIT_FIFO); +- if (!s->xmit_fifo.count) { ++ s->tsr = fifo8_is_full(&s->xmit_fifo) ? ++ 0 : fifo8_pop(&s->xmit_fifo); ++ if (!s->xmit_fifo.num) { + s->lsr |= UART_LSR_THRE; + } + } else if ((s->lsr & UART_LSR_THRE)) { +@@ -318,7 +281,11 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + } else { + s->thr = (uint8_t) val; + if(s->fcr & UART_FCR_FE) { +- fifo_put(s, XMIT_FIFO, s->thr); ++ /* xmit overruns overwrite data, so make space if needed */ ++ if (fifo8_is_full(&s->xmit_fifo)) { ++ fifo8_pop(&s->xmit_fifo); ++ } ++ fifo8_push(&s->xmit_fifo, s->thr); + s->thr_ipending = 0; + s->lsr &= ~UART_LSR_TEMT; + s->lsr &= ~UART_LSR_THRE; +@@ -369,28 +336,28 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + if (val & UART_FCR_RFR) { + qemu_del_timer(s->fifo_timeout_timer); + s->timeout_ipending=0; +- fifo_clear(s,RECV_FIFO); ++ fifo8_reset(&s->recv_fifo); + } + + if (val & UART_FCR_XFR) { +- fifo_clear(s,XMIT_FIFO); ++ fifo8_reset(&s->xmit_fifo); + } + + if (val & UART_FCR_FE) { + s->iir |= UART_IIR_FE; +- /* Set RECV_FIFO trigger Level */ ++ /* Set recv_fifo trigger Level */ + switch (val & 0xC0) { + case UART_FCR_ITL_1: +- s->recv_fifo.itl = 1; ++ s->recv_fifo_itl = 1; + break; + case UART_FCR_ITL_2: +- s->recv_fifo.itl = 4; ++ s->recv_fifo_itl = 4; + break; + case UART_FCR_ITL_3: +- s->recv_fifo.itl = 8; ++ s->recv_fifo_itl = 8; + break; + case UART_FCR_ITL_4: +- s->recv_fifo.itl = 14; ++ s->recv_fifo_itl = 14; + break; + } + } else +@@ -462,8 +429,9 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size) + ret = s->divider & 0xff; + } else { + if(s->fcr & UART_FCR_FE) { +- ret = fifo_get(s,RECV_FIFO); +- if (s->recv_fifo.count == 0) { ++ ret = fifo8_is_full(&s->recv_fifo) ? ++ 0 : fifo8_pop(&s->recv_fifo); ++ if (s->recv_fifo.num == 0) { + s->lsr &= ~(UART_LSR_DR | UART_LSR_BI); + } else { + qemu_mod_timer(s->fifo_timeout_timer, qemu_get_clock_ns (vm_clock) + s->char_transmit_time * 4); +@@ -537,7 +505,7 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size) + static int serial_can_receive(SerialState *s) + { + if(s->fcr & UART_FCR_FE) { +- if (s->recv_fifo.count < UART_FIFO_LENGTH) { ++ if (s->recv_fifo.num < UART_FIFO_LENGTH) { + /* + * Advertise (fifo.itl - fifo.count) bytes when count < ITL, and 1 + * if above. If UART_FIFO_LENGTH - fifo.count is advertised the +@@ -545,8 +513,8 @@ static int serial_can_receive(SerialState *s) + * the guest has a chance to respond, effectively overriding the ITL + * that the guest has set. + */ +- return (s->recv_fifo.count <= s->recv_fifo.itl) ? +- s->recv_fifo.itl - s->recv_fifo.count : 1; ++ return (s->recv_fifo.num <= s->recv_fifo_itl) ? ++ s->recv_fifo_itl - s->recv_fifo.num : 1; + } else { + return 0; + } +@@ -559,7 +527,7 @@ static void serial_receive_break(SerialState *s) + { + s->rbr = 0; + /* When the LSR_DR is set a null byte is pushed into the fifo */ +- fifo_put(s, RECV_FIFO, '\0'); ++ recv_fifo_put(s, '\0'); + s->lsr |= UART_LSR_BI | UART_LSR_DR; + serial_update_irq(s); + } +@@ -567,7 +535,7 @@ static void serial_receive_break(SerialState *s) + /* There's data in recv_fifo and s->rbr has not been read for 4 char transmit times */ + static void fifo_timeout_int (void *opaque) { + SerialState *s = opaque; +- if (s->recv_fifo.count) { ++ if (s->recv_fifo.num) { + s->timeout_ipending = 1; + serial_update_irq(s); + } +@@ -589,7 +557,7 @@ static void serial_receive1(void *opaque, const uint8_t *buf, int size) + if(s->fcr & UART_FCR_FE) { + int i; + for (i = 0; i < size; i++) { +- fifo_put(s, RECV_FIFO, buf[i]); ++ recv_fifo_put(s, buf[i]); + } + s->lsr |= UART_LSR_DR; + /* call the timeout receive callback in 4 char transmit time */ +@@ -669,8 +637,8 @@ static void serial_reset(void *opaque) + s->char_transmit_time = (get_ticks_per_sec() / 9600) * 10; + s->poll_msl = 0; + +- fifo_clear(s,RECV_FIFO); +- fifo_clear(s,XMIT_FIFO); ++ fifo8_reset(&s->recv_fifo); ++ fifo8_reset(&s->xmit_fifo); + + s->last_xmit_ts = qemu_get_clock_ns(vm_clock); + +@@ -693,6 +661,8 @@ void serial_init_core(SerialState *s) + + qemu_chr_add_handlers(s->chr, serial_can_receive1, serial_receive1, + serial_event, s); ++ fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); ++ fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); + serial_reset(s); + } + +diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h +index bca79f1..9ab81f6 100644 +--- a/include/hw/char/serial.h ++++ b/include/hw/char/serial.h +@@ -28,17 +28,10 @@ + #include "hw/hw.h" + #include "sysemu/sysemu.h" + #include "exec/memory.h" ++#include "qemu/fifo8.h" + + #define UART_FIFO_LENGTH 16 /* 16550A Fifo Length */ + +-typedef struct SerialFIFO { +- uint8_t data[UART_FIFO_LENGTH]; +- uint8_t count; +- uint8_t itl; /* Interrupt Trigger Level */ +- uint8_t tail; +- uint8_t head; +-} SerialFIFO; +- + struct SerialState { + uint16_t divider; + uint8_t rbr; /* receive register */ +@@ -67,8 +60,10 @@ struct SerialState { + + /* Time when the last byte was successfully sent out of the tsr */ + uint64_t last_xmit_ts; +- SerialFIFO recv_fifo; +- SerialFIFO xmit_fifo; ++ Fifo8 recv_fifo; ++ Fifo8 xmit_fifo; ++ /* Interrupt trigger level for recv_fifo */ ++ uint8_t recv_fifo_itl; + + struct QEMUTimer *fifo_timeout_timer; + int timeout_ipending; /* timeout interrupt pending state */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-serial-cosmetic-fixes.patch b/SOURCES/kvm-char-serial-cosmetic-fixes.patch new file mode 100644 index 0000000..2a507bd --- /dev/null +++ b/SOURCES/kvm-char-serial-cosmetic-fixes.patch @@ -0,0 +1,95 @@ +From 30482e796857e7d29877d93cc017aca5c844e4e1 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:14 +0200 +Subject: [PATCH 01/18] char/serial: cosmetic fixes. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-2-famz@redhat.com> +Patchwork-id: 75293 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 01/18] char/serial: cosmetic fixes. +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Peter Crosthwaite + +Some cosmetic fixes to char/serial fixing some checkpatch errors. + +Cc: qemu-trivial@nongnu.org + +Signed-off-by: Peter Crosthwaite +Reviewed-by: Andreas Färber +Signed-off-by: Michael Tokarev +(cherry picked from commit 7f4f0a227fe0b24c35d0898f9ae7d5909fb51137) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 30 +++++++++++++++++++----------- + 1 file changed, 19 insertions(+), 11 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 2383c31..7866b0f 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -264,8 +264,9 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + if (s->tsr_retry <= 0) { + if (s->fcr & UART_FCR_FE) { + s->tsr = fifo_get(s,XMIT_FIFO); +- if (!s->xmit_fifo.count) ++ if (!s->xmit_fifo.count) { + s->lsr |= UART_LSR_THRE; ++ } + } else if ((s->lsr & UART_LSR_THRE)) { + return FALSE; + } else { +@@ -462,10 +463,11 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size) + } else { + if(s->fcr & UART_FCR_FE) { + ret = fifo_get(s,RECV_FIFO); +- if (s->recv_fifo.count == 0) ++ if (s->recv_fifo.count == 0) { + s->lsr &= ~(UART_LSR_DR | UART_LSR_BI); +- else ++ } else { + qemu_mod_timer(s->fifo_timeout_timer, qemu_get_clock_ns (vm_clock) + s->char_transmit_time * 4); ++ } + s->timeout_ipending = 0; + } else { + ret = s->rbr; +@@ -535,15 +537,21 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size) + static int serial_can_receive(SerialState *s) + { + if(s->fcr & UART_FCR_FE) { +- if(s->recv_fifo.count < UART_FIFO_LENGTH) +- /* Advertise (fifo.itl - fifo.count) bytes when count < ITL, and 1 if above. If UART_FIFO_LENGTH - fifo.count is +- advertised the effect will be to almost always fill the fifo completely before the guest has a chance to respond, +- effectively overriding the ITL that the guest has set. */ +- return (s->recv_fifo.count <= s->recv_fifo.itl) ? s->recv_fifo.itl - s->recv_fifo.count : 1; +- else +- return 0; ++ if (s->recv_fifo.count < UART_FIFO_LENGTH) { ++ /* ++ * Advertise (fifo.itl - fifo.count) bytes when count < ITL, and 1 ++ * if above. If UART_FIFO_LENGTH - fifo.count is advertised the ++ * effect will be to almost always fill the fifo completely before ++ * the guest has a chance to respond, effectively overriding the ITL ++ * that the guest has set. ++ */ ++ return (s->recv_fifo.count <= s->recv_fifo.itl) ? ++ s->recv_fifo.itl - s->recv_fifo.count : 1; ++ } else { ++ return 0; ++ } + } else { +- return !(s->lsr & UART_LSR_DR); ++ return !(s->lsr & UART_LSR_DR); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-serial-fix-copy-paste-error-fifo8_is_full-vs-em.patch b/SOURCES/kvm-char-serial-fix-copy-paste-error-fifo8_is_full-vs-em.patch new file mode 100644 index 0000000..0778ad2 --- /dev/null +++ b/SOURCES/kvm-char-serial-fix-copy-paste-error-fifo8_is_full-vs-em.patch @@ -0,0 +1,46 @@ +From 6239c2bb55847293db2defeff645e1d5e6456a19 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:17 +0200 +Subject: [PATCH 04/18] char/serial: fix copy&paste error (fifo8_is_full vs + empty) + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-5-famz@redhat.com> +Patchwork-id: 75294 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 04/18] char/serial: fix copy&paste error (fifo8_is_full vs empty) +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Vladimir Senkov + +Copy&paste error in serial.c causes a crash when attempting +to read from UART (if there is no data to be read) + +Signed-off-by: Vladimir Senkov +Reviewed-by: Peter Crosthwaite +Signed-off-by: Michael Tokarev +(cherry picked from commit b165b0d8e62bb65a02d7670d75ebb77a9280bde1) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 72112cc..3345de1 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -425,7 +425,7 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size) + ret = s->divider & 0xff; + } else { + if(s->fcr & UART_FCR_FE) { +- ret = fifo8_is_full(&s->recv_fifo) ? ++ ret = fifo8_is_empty(&s->recv_fifo) ? + 0 : fifo8_pop(&s->recv_fifo); + if (s->recv_fifo.num == 0) { + s->lsr &= ~(UART_LSR_DR | UART_LSR_BI); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-serial-serial_ioport_write-Factor-out-common-co.patch b/SOURCES/kvm-char-serial-serial_ioport_write-Factor-out-common-co.patch new file mode 100644 index 0000000..6b43fff --- /dev/null +++ b/SOURCES/kvm-char-serial-serial_ioport_write-Factor-out-common-co.patch @@ -0,0 +1,62 @@ +From e675e8ae59a4eb6a39fa9d1f13011fd4e718ce67 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:16 +0200 +Subject: [PATCH 03/18] char/serial: serial_ioport_write: Factor out common + code +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-4-famz@redhat.com> +Patchwork-id: 75295 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 03/18] char/serial: serial_ioport_write: Factor out common code +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Peter Crosthwaite + +These three lines are common to both FIFO and regular mode. Just factor +them out to outside the if rather than replicate the same lines inside +both if and else. + +Cc: qemu-trivial@nongnu.org + +Signed-off-by: Peter Crosthwaite +Reviewed-by: Andreas Färber +Signed-off-by: Michael Tokarev +(cherry picked from commit b5601df7624b461759651c49ac72a189951780b9) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 0d4450e..72112cc 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -286,15 +286,11 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + fifo8_pop(&s->xmit_fifo); + } + fifo8_push(&s->xmit_fifo, s->thr); +- s->thr_ipending = 0; + s->lsr &= ~UART_LSR_TEMT; +- s->lsr &= ~UART_LSR_THRE; +- serial_update_irq(s); +- } else { +- s->thr_ipending = 0; +- s->lsr &= ~UART_LSR_THRE; +- serial_update_irq(s); + } ++ s->thr_ipending = 0; ++ s->lsr &= ~UART_LSR_THRE; ++ serial_update_irq(s); + serial_xmit(NULL, G_IO_OUT, s); + } + break; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-char-use-common-function-to-disable-callbacks-on-cha.patch b/SOURCES/kvm-char-use-common-function-to-disable-callbacks-on-cha.patch new file mode 100644 index 0000000..d7fb5da --- /dev/null +++ b/SOURCES/kvm-char-use-common-function-to-disable-callbacks-on-cha.patch @@ -0,0 +1,174 @@ +From a553f55610d9c5f016aefc8cc2914c769664ef53 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Tue, 8 Oct 2013 06:13:06 +0200 +Subject: [PATCH 07/11] char: use common function to disable callbacks on chardev close + +RH-Author: Amit Shah +Message-id: <50da0ea80f5257a98f27567ce2bbd987355f795e.1381210228.git.amit.shah@redhat.com> +Patchwork-id: 54728 +O-Subject: [RHEL7 qemu-kvm PATCH 2/3] char: use common function to disable callbacks on chardev close +Bugzilla: 1007222 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Michael S. Tsirkin + +This deduplicates code used a lot of times. + +CC: +Reviewed-by: Gerd Hoffmann +Signed-off-by: Amit Shah +--- + qemu-char.c | 62 +++++++++++++++++++------------------------------------------ + 1 file changed, 19 insertions(+), 43 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 62 ++++++++++++++++++---------------------------------------- + 1 files changed, 19 insertions(+), 43 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 00cbf88..8d46f98 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -727,6 +727,14 @@ static void io_remove_watch_poll(guint tag) + g_source_destroy(&iwp->parent); + } + ++static void remove_fd_in_watch(CharDriverState *chr) ++{ ++ if (chr->fd_in_tag) { ++ io_remove_watch_poll(chr->fd_in_tag); ++ chr->fd_in_tag = 0; ++ } ++} ++ + #ifndef _WIN32 + static GIOChannel *io_channel_from_fd(int fd) + { +@@ -831,10 +839,7 @@ static gboolean fd_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) + status = g_io_channel_read_chars(chan, (gchar *)buf, + len, &bytes_read, NULL); + if (status == G_IO_STATUS_EOF) { +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ remove_fd_in_watch(chr); + qemu_chr_be_event(chr, CHR_EVENT_CLOSED); + return FALSE; + } +@@ -864,11 +869,7 @@ static void fd_chr_update_read_handler(CharDriverState *chr) + { + FDCharDriver *s = chr->opaque; + +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } +- ++ remove_fd_in_watch(chr); + if (s->fd_in) { + chr->fd_in_tag = io_add_watch_poll(s->fd_in, fd_chr_read_poll, + fd_chr_read, chr); +@@ -879,11 +880,7 @@ static void fd_chr_close(struct CharDriverState *chr) + { + FDCharDriver *s = chr->opaque; + +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } +- ++ remove_fd_in_watch(chr); + if (s->fd_in) { + g_io_channel_unref(s->fd_in); + } +@@ -1130,10 +1127,7 @@ static void pty_chr_state(CharDriverState *chr, int connected) + PtyCharDriver *s = chr->opaque; + + if (!connected) { +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ remove_fd_in_watch(chr); + s->connected = 0; + /* (re-)connect poll interval for idle guests: once per second. + * We check more frequently in case the guests sends data to +@@ -1159,10 +1153,7 @@ static void pty_chr_close(struct CharDriverState *chr) + PtyCharDriver *s = chr->opaque; + int fd; + +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ remove_fd_in_watch(chr); + fd = g_io_channel_unix_get_fd(s->fd); + g_io_channel_unref(s->fd); + close(fd); +@@ -2224,10 +2215,7 @@ static gboolean udp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) + s->bufcnt = bytes_read; + s->bufptr = s->bufcnt; + if (status != G_IO_STATUS_NORMAL) { +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ remove_fd_in_watch(chr); + return FALSE; + } + +@@ -2245,11 +2233,7 @@ static void udp_chr_update_read_handler(CharDriverState *chr) + { + NetCharDriver *s = chr->opaque; + +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } +- ++ remove_fd_in_watch(chr); + if (s->chan) { + chr->fd_in_tag = io_add_watch_poll(s->chan, udp_chr_read_poll, + udp_chr_read, chr); +@@ -2259,10 +2243,8 @@ static void udp_chr_update_read_handler(CharDriverState *chr) + static void udp_chr_close(CharDriverState *chr) + { + NetCharDriver *s = chr->opaque; +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ ++ remove_fd_in_watch(chr); + if (s->chan) { + g_io_channel_unref(s->chan); + closesocket(s->fd); +@@ -2495,10 +2477,7 @@ static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) + if (s->listen_chan) { + s->listen_tag = g_io_add_watch(s->listen_chan, G_IO_IN, tcp_chr_accept, chr); + } +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ remove_fd_in_watch(chr); + g_io_channel_unref(s->chan); + s->chan = NULL; + closesocket(s->fd); +@@ -2612,10 +2591,7 @@ static void tcp_chr_close(CharDriverState *chr) + { + TCPCharDriver *s = chr->opaque; + if (s->fd >= 0) { +- if (chr->fd_in_tag) { +- io_remove_watch_poll(chr->fd_in_tag); +- chr->fd_in_tag = 0; +- } ++ remove_fd_in_watch(chr); + if (s->chan) { + g_io_channel_unref(s->chan); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-chardev-fix-pty_chr_timer.patch b/SOURCES/kvm-chardev-fix-pty_chr_timer.patch new file mode 100644 index 0000000..6a9a24a --- /dev/null +++ b/SOURCES/kvm-chardev-fix-pty_chr_timer.patch @@ -0,0 +1,67 @@ +From 65b9fb19d5853b28b6748963d9e0053429655921 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 18 Sep 2013 09:53:54 +0200 +Subject: [PATCH 01/18] chardev: fix pty_chr_timer + +RH-Author: Gerd Hoffmann +Message-id: <1379498034-29529-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 54429 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] chardev: fix pty_chr_timer +Bugzilla: 994414 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +pty_chr_timer first calls pty_chr_update_read_handler(), then clears +timer_tag (because it is a one-shot timer). This is the wrong order +though. pty_chr_update_read_handler might re-arm time timer, and the +new timer_tag gets overwitten in that case. + +This leads to crashes when unplugging a pty chardev: pty_chr_close +thinks no timer is running -> timer isn't canceled -> pty_chr_timer gets +called with stale CharDevState -> BOOM. + +This patch fixes the ordering. +Kill the pointless goto while being at it. + +https://bugzilla.redhat.com/show_bug.cgi?id=994414 + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b0d768c35e08d2057b63e8e77e7a513c447199fa) +--- + qemu-char.c | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 12 ++++-------- + 1 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 2fb876c..660d758 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -1029,15 +1029,11 @@ static gboolean pty_chr_timer(gpointer opaque) + struct CharDriverState *chr = opaque; + PtyCharDriver *s = chr->opaque; + +- if (s->connected) { +- goto out; +- } +- +- /* Next poll ... */ +- pty_chr_update_read_handler(chr); +- +-out: + s->timer_tag = 0; ++ if (!s->connected) { ++ /* Next poll ... */ ++ pty_chr_update_read_handler(chr); ++ } + return FALSE; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-chardev-handle-qmp_chardev_add-KIND_MUX-failure.patch b/SOURCES/kvm-chardev-handle-qmp_chardev_add-KIND_MUX-failure.patch new file mode 100644 index 0000000..7c92ec2 --- /dev/null +++ b/SOURCES/kvm-chardev-handle-qmp_chardev_add-KIND_MUX-failure.patch @@ -0,0 +1,47 @@ +From a498fc16bc9b1bfa983a95ca97dae183d8d4627e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:23 +0200 +Subject: [PATCH 16/18] chardev: handle qmp_chardev_add(KIND_MUX) failure + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-16-git-send-email-kraxel@redhat.com> +Patchwork-id: 54860 +O-Subject: [RHEL-7 qemu-kvm PATCH 15/15] chardev: handle qmp_chardev_add(KIND_MUX) failure +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Cc: Markus Armbruster +Signed-off-by: Gerd Hoffmann +(cherry picked from commit ee6ee83de29923483b4905b35f18abf5333f6ea9) +--- + qemu-char.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index bacc7b7..983f686 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3255,7 +3255,12 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, + backend->kind = CHARDEV_BACKEND_KIND_MUX; + backend->mux->chardev = g_strdup(bid); + ret = qmp_chardev_add(id, backend, errp); +- assert(!error_is_set(errp)); ++ if (error_is_set(errp)) { ++ chr = qemu_chr_find(bid); ++ qemu_chr_delete(chr); ++ chr = NULL; ++ goto qapi_out; ++ } + } + + chr = qemu_chr_find(id); +-- +1.7.1 + diff --git a/SOURCES/kvm-check-KVM_CAP_SYNC_MMU-with-kvm_vm_check_extensi.patch b/SOURCES/kvm-check-KVM_CAP_SYNC_MMU-with-kvm_vm_check_extensi.patch new file mode 100644 index 0000000..32dae59 --- /dev/null +++ b/SOURCES/kvm-check-KVM_CAP_SYNC_MMU-with-kvm_vm_check_extensi.patch @@ -0,0 +1,116 @@ +From 53c0d0dcad838ef8b9b0faf0c8066d47380f2cf1 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 13 Dec 2018 21:55:04 +0100 +Subject: [PATCH 3/5] kvm: check KVM_CAP_SYNC_MMU with kvm_vm_check_extension() + +RH-Author: Alex Williamson +Message-id: <154473810399.22725.17809569801460658619.stgit@gimli.home> +Patchwork-id: 83495 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 3/5] kvm: check KVM_CAP_SYNC_MMU with kvm_vm_check_extension() +Bugzilla: 1659229 +RH-Acked-by: Peter Xu +RH-Acked-by: Cornelia Huck +RH-Acked-by: Auger Eric + +From: Greg Kurz + +Bugzilla: 1659229 +Notes: We don't have kvm_vm_check_extension() but we can still + cache the result, which gives us the same hook to trigger + the balloon inhibitor here. + +On a server-class ppc host, this capability depends on the KVM type, +ie, HV or PR. If both KVM are present in the kernel, we will always +get the HV specific value, even if we explicitely requested PR on +the command line. + +This can have an impact if we're using hugepages or a balloon device. + +Since we've already created the VM at the time any user calls +kvm_has_sync_mmu(), switching to kvm_vm_check_extension() is +enough to fix any potential issue. + +It is okay for the other archs that also implement KVM_CAP_SYNC_MMU, +ie, mips, s390, x86 and arm, because they don't depend on the VM being +created or not. + +While here, let's cache the state of this extension in a bool variable, +since it has several users in the code, as suggested by Thomas Huth. + +Signed-off-by: Greg Kurz +Message-Id: <150600965332.30533.14702405809647835716.stgit@bahia.lan> +Reviewed-by: David Gibson +Signed-off-by: Paolo Bonzini +(cherry picked from commit 62dd4edaaf859b60f74a51f2a526d4d3d85d0248) +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/kvm.h | 2 +- + kvm-all.c | 7 +++++-- + kvm-stub.c | 4 ++-- + 3 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h +index 49cfc42..e4403be 100644 +--- a/include/sysemu/kvm.h ++++ b/include/sysemu/kvm.h +@@ -135,7 +135,7 @@ extern KVMState *kvm_state; + + int kvm_init(void); + +-int kvm_has_sync_mmu(void); ++bool kvm_has_sync_mmu(void); + int kvm_has_vcpu_events(void); + int kvm_has_robust_singlestep(void); + int kvm_has_debugregs(void); +diff --git a/kvm-all.c b/kvm-all.c +index 9486b9a..f5b7958 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -92,6 +92,7 @@ struct KVMState + int xsave, xcrs; + int many_ioeventfds; + int intx_set_mask; ++ bool sync_mmu; + /* The man page (and posix) say ioctl numbers are signed int, but + * they're not. Linux, glibc and *BSD all treat ioctl numbers as + * unsigned, and treating them as signed here can break things */ +@@ -1479,6 +1480,8 @@ int kvm_init(void) + + cpu_interrupt_handler = kvm_handle_interrupt; + ++ s->sync_mmu = !!kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU); ++ + return 0; + + err: +@@ -1775,9 +1778,9 @@ int kvm_vcpu_ioctl(CPUState *cpu, int type, ...) + return ret; + } + +-int kvm_has_sync_mmu(void) ++bool kvm_has_sync_mmu(void) + { +- return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU); ++ return kvm_state->sync_mmu; + } + + int kvm_has_vcpu_events(void) +diff --git a/kvm-stub.c b/kvm-stub.c +index 22eaff0..ca6ddd7 100644 +--- a/kvm-stub.c ++++ b/kvm-stub.c +@@ -59,9 +59,9 @@ int kvm_cpu_exec(CPUArchState *env) + abort (); + } + +-int kvm_has_sync_mmu(void) ++bool kvm_has_sync_mmu(void) + { +- return 0; ++ return false; + } + + int kvm_has_many_ioeventfds(void) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-check-qjson-Add-test-for-JSON-nesting-depth-limit.patch b/SOURCES/kvm-check-qjson-Add-test-for-JSON-nesting-depth-limit.patch new file mode 100644 index 0000000..aac6412 --- /dev/null +++ b/SOURCES/kvm-check-qjson-Add-test-for-JSON-nesting-depth-limit.patch @@ -0,0 +1,73 @@ +From 38d4fe12ad2e3bc18842201f437c480120eace2b Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:02 +0200 +Subject: [PATCH 04/16] check-qjson: Add test for JSON nesting depth limit + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-6-git-send-email-armbru@redhat.com> +Patchwork-id: 71481 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 04/15] check-qjson: Add test for JSON nesting depth limit +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +This would have prevented the regression mentioned in the previous +commit. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-Id: <1448486613-17634-4-git-send-email-armbru@redhat.com> +(cherry picked from commit f0ae0304c7a41a42b7d4a6cde450da938d3c2cc7) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + tests/check-qjson.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/tests/check-qjson.c b/tests/check-qjson.c +index 4e74548..c5dd74d 100644 +--- a/tests/check-qjson.c ++++ b/tests/check-qjson.c +@@ -1465,6 +1465,30 @@ static void unterminated_literal(void) + g_assert(obj == NULL); + } + ++static char *make_nest(char *buf, size_t cnt) ++{ ++ memset(buf, '[', cnt - 1); ++ buf[cnt - 1] = '{'; ++ buf[cnt] = '}'; ++ memset(buf + cnt + 1, ']', cnt - 1); ++ buf[2 * cnt] = 0; ++ return buf; ++} ++ ++static void limits_nesting(void) ++{ ++ enum { max_nesting = 1024 }; /* see qobject/json-streamer.c */ ++ char buf[2 * (max_nesting + 1) + 1]; ++ QObject *obj; ++ ++ obj = qobject_from_json(make_nest(buf, max_nesting)); ++ g_assert(obj != NULL); ++ qobject_decref(obj); ++ ++ obj = qobject_from_json(make_nest(buf, max_nesting + 1)); ++ g_assert(obj == NULL); ++} ++ + int main(int argc, char **argv) + { + g_test_init(&argc, &argv, NULL); +@@ -1500,6 +1524,7 @@ int main(int argc, char **argv) + g_test_add_func("/errors/invalid_array_comma", invalid_array_comma); + g_test_add_func("/errors/invalid_dict_comma", invalid_dict_comma); + g_test_add_func("/errors/unterminated/literal", unterminated_literal); ++ g_test_add_func("/errors/limits/nesting", limits_nesting); + + return g_test_run(); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-add-blit_is_unsafe-call-to-cirrus_bitblt_cput.patch b/SOURCES/kvm-cirrus-add-blit_is_unsafe-call-to-cirrus_bitblt_cput.patch new file mode 100644 index 0000000..b6bfea6 --- /dev/null +++ b/SOURCES/kvm-cirrus-add-blit_is_unsafe-call-to-cirrus_bitblt_cput.patch @@ -0,0 +1,70 @@ +From 74db251c34369bd32148864b3abea6d6586270dc Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 10 Feb 2017 08:30:15 +0100 +Subject: [PATCH 3/3] cirrus: add blit_is_unsafe call to + cirrus_bitblt_cputovideo + +RH-Author: Gerd Hoffmann +Message-id: <1486715415-3462-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 73773 +O-Subject: [virt-devel] [EMBARGOED RHEL-7.4 qemu-kvm PATCH 3/3] cirrus: add blit_is_unsafe call to cirrus_bitblt_cputovideo +Bugzilla: 1420492 +CVE: CVE-2017-2620/20170221 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laurent Vivier +RH-Acked-by: Dr. David Alan Gilbert + +CIRRUS_BLTMODE_MEMSYSSRC blits do NOT check blit destination +and blit width, at all. Oops. Fix it. + +Security impact: high. + +The missing blit destination check allows to write to host memory. +Basically same as CVE-2014-8106 for the other blit variants. + +The missing blit width check allows to overflow cirrus_bltbuf, +with the attractive target cirrus_srcptr (current cirrus_bltbuf write +position) being located right after cirrus_bltbuf in CirrusVGAState. + +Due to cirrus emulation writing cirrus_bltbuf bytewise the attacker +hasn't full control over cirrus_srcptr though, only one byte can be +changed. Once the first byte has been modified further writes land +elsewhere. + +Signed-off-by: Gerd Hoffmann + +Upstream: TBD (embargoed until Feb 21st) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 9a9501f..1b972db 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -894,6 +894,10 @@ static int cirrus_bitblt_cputovideo(CirrusVGAState * s) + { + int w; + ++ if (blit_is_unsafe(s, true)) { ++ return 0; ++ } ++ + s->cirrus_blt_mode &= ~CIRRUS_BLTMODE_MEMSYSSRC; + s->cirrus_srcptr = &s->cirrus_bltbuf[0]; + s->cirrus_srcptr_end = &s->cirrus_bltbuf[0]; +@@ -919,6 +923,10 @@ static int cirrus_bitblt_cputovideo(CirrusVGAState * s) + } + s->cirrus_srccounter = s->cirrus_blt_srcpitch * s->cirrus_blt_height; + } ++ ++ /* the blit_is_unsafe call above should catch this */ ++ assert(s->cirrus_blt_srcpitch <= CIRRUS_BLTBUFSIZE); ++ + s->cirrus_srcptr = s->cirrus_bltbuf; + s->cirrus_srcptr_end = s->cirrus_bltbuf + s->cirrus_blt_srcpitch; + cirrus_update_memory_access(s); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-add-option-to-disable-blitter.patch b/SOURCES/kvm-cirrus-add-option-to-disable-blitter.patch new file mode 100644 index 0000000..48c7d9e --- /dev/null +++ b/SOURCES/kvm-cirrus-add-option-to-disable-blitter.patch @@ -0,0 +1,84 @@ +From 04b0eed67c2564cf9c10a62f57ed606f627c9317 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:18 +0200 +Subject: [PATCH 3/7] cirrus: add option to disable blitter + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 74551 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 3/7] cirrus: add option to disable blitter +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +Ok, we have this beast in the cirrus code which is not used at all by +modern guests, except when you try to find security holes in qemu. So, +add an option to disable blitter altogether. Guests released within +the last ten years should not show any rendering issues if you turn off +blitter support. + +There are no known bugs in the cirrus blitter code. But in the past we +hoped a few times already that we've finally nailed the last issue. So +having some easy way to mitigate in case yet another blitter issue shows +up certainly makes me sleep a bit better at night. + +For completeness: The by far better way to mitigate is to switch away +from cirrus and use stdvga instead. Or something more modern like +virtio-vga in case your guest has support for it. + +Signed-off-by: Gerd Hoffmann +Message-id: 1489494540-15745-1-git-send-email-kraxel@redhat.com +(cherry picked from commit 827bd5172641f2a360ff9a3bad57bcf82e7f03f0) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/display/cirrus_vga.c +--- + hw/display/cirrus_vga.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 83cef70..86b4c8b 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -203,6 +203,7 @@ typedef struct CirrusVGAState { + uint8_t cirrus_hidden_palette[48]; + uint32_t hw_cursor_x; + uint32_t hw_cursor_y; ++ bool enable_blitter; + int cirrus_blt_pixelwidth; + int cirrus_blt_width; + int cirrus_blt_height; +@@ -954,6 +955,10 @@ static void cirrus_bitblt_start(CirrusVGAState * s) + { + uint8_t blt_rop; + ++ if (!s->enable_blitter) { ++ goto bitblt_ignore; ++ } ++ + s->vga.gr[0x31] |= CIRRUS_BLT_BUSY; + + s->cirrus_blt_width = (s->vga.gr[0x20] | (s->vga.gr[0x21] << 8)) + 1; +@@ -2995,6 +3000,8 @@ static int vga_initfn(ISADevice *dev) + static Property isa_cirrus_vga_properties[] = { + DEFINE_PROP_UINT32("vgamem_mb", struct ISACirrusVGAState, + cirrus_vga.vga.vram_size_mb, 16), ++ DEFINE_PROP_BOOL("blitter", struct ISACirrusVGAState, ++ cirrus_vga.enable_blitter, true), + DEFINE_PROP_END_OF_LIST(), + }; + +@@ -3060,6 +3067,8 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) + static Property pci_vga_cirrus_properties[] = { + DEFINE_PROP_UINT32("vgamem_mb", struct PCICirrusVGAState, + cirrus_vga.vga.vram_size_mb, 16), ++ DEFINE_PROP_BOOL("blitter", struct PCICirrusVGAState, ++ cirrus_vga.enable_blitter, true), + DEFINE_PROP_END_OF_LIST(), + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-allow-zero-source-pitch-in-pattern-fill-rops.patch b/SOURCES/kvm-cirrus-allow-zero-source-pitch-in-pattern-fill-rops.patch new file mode 100644 index 0000000..e710937 --- /dev/null +++ b/SOURCES/kvm-cirrus-allow-zero-source-pitch-in-pattern-fill-rops.patch @@ -0,0 +1,115 @@ +From 03b4fe1dacb0e4a2bdebb86d11e1cff13b2972c1 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:50 +0100 +Subject: [PATCH 07/11] cirrus: allow zero source pitch in pattern fill rops + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 73569 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 5/7] cirrus: allow zero source pitch in pattern fill rops +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Wolfgang Bumiller + +The rops used by cirrus_bitblt_common_patterncopy only use +the destination pitch, so the source pitch shoul allowed to +be zero and the blit with used for the range check around the +source address. + +Signed-off-by: Wolfgang Bumiller +Message-id: 1485272138-23249-1-git-send-email-w.bumiller@proxmox.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 5858dd1801883309bdd208d72ddb81c4e9fee30c) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 27 +++++++++++++++++++-------- + 1 file changed, 19 insertions(+), 8 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index e09076a..b040ab1 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -267,9 +267,6 @@ static void cirrus_update_memory_access(CirrusVGAState *s); + static bool blit_region_is_unsafe(struct CirrusVGAState *s, + int32_t pitch, int32_t addr) + { +- if (!pitch) { +- return true; +- } + if (pitch < 0) { + int64_t min = addr + + ((int64_t)s->cirrus_blt_height-1) * pitch; +@@ -289,8 +286,11 @@ static bool blit_region_is_unsafe(struct CirrusVGAState *s, + return false; + } + +-static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) ++static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only, ++ bool zero_src_pitch_ok) + { ++ int32_t check_pitch; ++ + /* should be the case, see cirrus_bitblt_start */ + assert(s->cirrus_blt_width > 0); + assert(s->cirrus_blt_height > 0); +@@ -299,6 +299,10 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) + return true; + } + ++ if (!s->cirrus_blt_dstpitch) { ++ return true; ++ } ++ + if (blit_region_is_unsafe(s, s->cirrus_blt_dstpitch, + s->cirrus_blt_dstaddr & s->cirrus_addr_mask)) { + return true; +@@ -306,7 +310,13 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) + if (dst_only) { + return false; + } +- if (blit_region_is_unsafe(s, s->cirrus_blt_srcpitch, ++ ++ check_pitch = s->cirrus_blt_srcpitch; ++ if (!zero_src_pitch_ok && !check_pitch) { ++ check_pitch = s->cirrus_blt_width; ++ } ++ ++ if (blit_region_is_unsafe(s, check_pitch, + s->cirrus_blt_srcaddr & s->cirrus_addr_mask)) { + return true; + } +@@ -676,8 +686,9 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s, + + dst = s->vga.vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask); + +- if (blit_is_unsafe(s, false)) ++ if (blit_is_unsafe(s, false, true)) { + return 0; ++ } + + (*s->cirrus_rop) (s, dst, src, + s->cirrus_blt_dstpitch, 0, +@@ -694,7 +705,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + { + cirrus_fill_t rop_func; + +- if (blit_is_unsafe(s, true)) { ++ if (blit_is_unsafe(s, true, true)) { + return 0; + } + rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; +@@ -798,7 +809,7 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + + static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s) + { +- if (blit_is_unsafe(s, false)) ++ if (blit_is_unsafe(s, false, false)) + return 0; + + return cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-don-t-overflow-CirrusVGAState-cirrus_bltbuf.patch b/SOURCES/kvm-cirrus-don-t-overflow-CirrusVGAState-cirrus_bltbuf.patch new file mode 100644 index 0000000..98e3b0d --- /dev/null +++ b/SOURCES/kvm-cirrus-don-t-overflow-CirrusVGAState-cirrus_bltbuf.patch @@ -0,0 +1,39 @@ +From b990e99b42e638a5719cf1cdc2881a6467886fcf Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 3 Dec 2014 09:17:56 +0100 +Subject: [PATCH 3/3] cirrus: don't overflow CirrusVGAState->cirrus_bltbuf + +RH-Author: Gerd Hoffmann +Message-id: <1417594676-5663-3-git-send-email-kraxel@redhat.com> +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/2] cirrus: don't overflow CirrusVGAState->cirrus_bltbuf +Bugzilla: 1169456 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +This is CVE-2014-8106. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit bf25983345ca44aec3dd92c57142be45452bd38a) +--- + hw/display/cirrus_vga.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 9ae8313..717ecdb 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -292,6 +292,10 @@ static bool blit_is_unsafe(struct CirrusVGAState *s) + assert(s->cirrus_blt_width > 0); + assert(s->cirrus_blt_height > 0); + ++ if (s->cirrus_blt_width > CIRRUS_BLTBUFSIZE) { ++ return true; ++ } ++ + if (blit_region_is_unsafe(s, s->cirrus_blt_dstpitch, + s->cirrus_blt_dstaddr & s->cirrus_addr_mask)) { + return true; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-blit-address-mask-handling.patch b/SOURCES/kvm-cirrus-fix-blit-address-mask-handling.patch new file mode 100644 index 0000000..158737d --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-blit-address-mask-handling.patch @@ -0,0 +1,115 @@ +From a5ce32ef09ab8eb8ba2467e12d37020048c8803f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:51 +0100 +Subject: [PATCH 08/11] cirrus: fix blit address mask handling + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-7-git-send-email-kraxel@redhat.com> +Patchwork-id: 73570 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 6/7] cirrus: fix blit address mask handling +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +Apply the cirrus_addr_mask to cirrus_blt_dstaddr and cirrus_blt_srcaddr +right after assigning them, in cirrus_bitblt_start(), instead of having +this all over the place in the cirrus code, and missing a few places. + +Reported-by: Wolfgang Bumiller +Signed-off-by: Gerd Hoffmann +Message-id: 1485338996-17095-1-git-send-email-kraxel@redhat.com +(cherry picked from commit 60cd23e85151525ab26591394c4e7e06fa07d216) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index b040ab1..6aa29a3 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -304,7 +304,7 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only, + } + + if (blit_region_is_unsafe(s, s->cirrus_blt_dstpitch, +- s->cirrus_blt_dstaddr & s->cirrus_addr_mask)) { ++ s->cirrus_blt_dstaddr)) { + return true; + } + if (dst_only) { +@@ -317,7 +317,7 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only, + } + + if (blit_region_is_unsafe(s, check_pitch, +- s->cirrus_blt_srcaddr & s->cirrus_addr_mask)) { ++ s->cirrus_blt_srcaddr)) { + return true; + } + +@@ -684,7 +684,7 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s, + { + uint8_t *dst; + +- dst = s->vga.vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask); ++ dst = s->vga.vram_ptr + s->cirrus_blt_dstaddr; + + if (blit_is_unsafe(s, false, true)) { + return 0; +@@ -709,7 +709,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + return 0; + } + rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; +- rop_func(s, s->vga.vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), ++ rop_func(s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, + s->cirrus_blt_dstpitch, + s->cirrus_blt_width, s->cirrus_blt_height); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, +@@ -727,9 +727,8 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + + static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s) + { +- return cirrus_bitblt_common_patterncopy(s, +- s->vga.vram_ptr + ((s->cirrus_blt_srcaddr & ~7) & +- s->cirrus_addr_mask)); ++ return cirrus_bitblt_common_patterncopy(s, s->vga.vram_ptr + ++ (s->cirrus_blt_srcaddr & ~7)); + } + + static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) +@@ -783,10 +782,8 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + if (notify) + graphic_hw_update(s->vga.con); + +- (*s->cirrus_rop) (s, s->vga.vram_ptr + +- (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), +- s->vga.vram_ptr + +- (s->cirrus_blt_srcaddr & s->cirrus_addr_mask), ++ (*s->cirrus_rop) (s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, ++ s->vga.vram_ptr + s->cirrus_blt_srcaddr, + s->cirrus_blt_dstpitch, s->cirrus_blt_srcpitch, + s->cirrus_blt_width, s->cirrus_blt_height); + +@@ -837,8 +834,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s) + } else { + /* at least one scan line */ + do { +- (*s->cirrus_rop)(s, s->vga.vram_ptr + +- (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), ++ (*s->cirrus_rop)(s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, + s->cirrus_bltbuf, 0, 0, s->cirrus_blt_width, 1); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, 0, + s->cirrus_blt_width, 1); +@@ -957,6 +953,9 @@ static void cirrus_bitblt_start(CirrusVGAState * s) + s->cirrus_blt_modeext = s->vga.gr[0x33]; + blt_rop = s->vga.gr[0x32]; + ++ s->cirrus_blt_dstaddr &= s->cirrus_addr_mask; ++ s->cirrus_blt_srcaddr &= s->cirrus_addr_mask; ++ + #ifdef DEBUG_BITBLT + printf("rop=0x%02x mode=0x%02x modeext=0x%02x w=%d h=%d dpitch=%d spitch=%d daddr=0x%08x saddr=0x%08x writemask=0x%02x\n", + blt_rop, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-blit-region-check.patch b/SOURCES/kvm-cirrus-fix-blit-region-check.patch new file mode 100644 index 0000000..4ff7cf7 --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-blit-region-check.patch @@ -0,0 +1,134 @@ +From 6febc393af5d81e2c3f6f0d2f0e5b7dd58d4974a Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 3 Dec 2014 09:17:55 +0100 +Subject: [PATCH 2/3] cirrus: fix blit region check + +RH-Author: Gerd Hoffmann +Message-id: <1417594676-5663-2-git-send-email-kraxel@redhat.com> +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/2] cirrus: fix blit region check +Bugzilla: 1169456 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +Issues: + * Doesn't check pitches correctly in case it is negative. + * Doesn't check width at all. + +Turn macro into functions while being at it, also factor out the check +for one region which we then can simply call twice for src + dst. + +This is CVE-2014-8106. + +Reported-by: Paolo Bonzini +Signed-off-by: Gerd Hoffmann +Reviewed-by: Paolo Bonzini +(cherry picked from commit d3532a0db02296e687711b8cdc7791924efccea0) +--- + hw/display/cirrus_vga.c | 61 +++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 44 insertions(+), 17 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index bfaa0b0..9ae8313 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -172,20 +172,6 @@ + + #define CIRRUS_PNPMMIO_SIZE 0x1000 + +-#define BLTUNSAFE(s) \ +- ( \ +- ( /* check dst is within bounds */ \ +- (s)->cirrus_blt_height * ABS((s)->cirrus_blt_dstpitch) \ +- + ((s)->cirrus_blt_dstaddr & (s)->cirrus_addr_mask) > \ +- (s)->vga.vram_size \ +- ) || \ +- ( /* check src is within bounds */ \ +- (s)->cirrus_blt_height * ABS((s)->cirrus_blt_srcpitch) \ +- + ((s)->cirrus_blt_srcaddr & (s)->cirrus_addr_mask) > \ +- (s)->vga.vram_size \ +- ) \ +- ) +- + struct CirrusVGAState; + typedef void (*cirrus_bitblt_rop_t) (struct CirrusVGAState *s, + uint8_t * dst, const uint8_t * src, +@@ -278,6 +264,46 @@ static void cirrus_update_memory_access(CirrusVGAState *s); + * + ***************************************/ + ++static bool blit_region_is_unsafe(struct CirrusVGAState *s, ++ int32_t pitch, int32_t addr) ++{ ++ if (pitch < 0) { ++ int64_t min = addr ++ + ((int64_t)s->cirrus_blt_height-1) * pitch; ++ int32_t max = addr ++ + s->cirrus_blt_width; ++ if (min < 0 || max >= s->vga.vram_size) { ++ return true; ++ } ++ } else { ++ int64_t max = addr ++ + ((int64_t)s->cirrus_blt_height-1) * pitch ++ + s->cirrus_blt_width; ++ if (max >= s->vga.vram_size) { ++ return true; ++ } ++ } ++ return false; ++} ++ ++static bool blit_is_unsafe(struct CirrusVGAState *s) ++{ ++ /* should be the case, see cirrus_bitblt_start */ ++ assert(s->cirrus_blt_width > 0); ++ assert(s->cirrus_blt_height > 0); ++ ++ if (blit_region_is_unsafe(s, s->cirrus_blt_dstpitch, ++ s->cirrus_blt_dstaddr & s->cirrus_addr_mask)) { ++ return true; ++ } ++ if (blit_region_is_unsafe(s, s->cirrus_blt_srcpitch, ++ s->cirrus_blt_srcaddr & s->cirrus_addr_mask)) { ++ return true; ++ } ++ ++ return false; ++} ++ + static void cirrus_bitblt_rop_nop(CirrusVGAState *s, + uint8_t *dst,const uint8_t *src, + int dstpitch,int srcpitch, +@@ -635,7 +661,7 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s, + + dst = s->vga.vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask); + +- if (BLTUNSAFE(s)) ++ if (blit_is_unsafe(s)) + return 0; + + (*s->cirrus_rop) (s, dst, src, +@@ -653,8 +679,9 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + { + cirrus_fill_t rop_func; + +- if (BLTUNSAFE(s)) ++ if (blit_is_unsafe(s)) { + return 0; ++ } + rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; + rop_func(s, s->vga.vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), + s->cirrus_blt_dstpitch, +@@ -751,7 +778,7 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + + static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s) + { +- if (BLTUNSAFE(s)) ++ if (blit_is_unsafe(s)) + return 0; + + cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-cirrus_invalidate_region.patch b/SOURCES/kvm-cirrus-fix-cirrus_invalidate_region.patch new file mode 100644 index 0000000..0e38fac --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-cirrus_invalidate_region.patch @@ -0,0 +1,51 @@ +From 8396435dbcd13dc27c7f1c7576499354be48d2c7 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:19 +0200 +Subject: [PATCH 4/7] cirrus: fix cirrus_invalidate_region + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 74552 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 4/7] cirrus: fix cirrus_invalidate_region +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +off_cur_end is exclusive, so off_cur_end == cirrus_addr_mask is valid. +Fix calculation to make sure to allow that, otherwise the assert added +by commit f153b563f8cf121aebf5a2fff5f0110faf58ccb3 can trigger for valid +blits. + +Test case: boot windows nt 4.0 + +Signed-off-by: Gerd Hoffmann +Message-id: 1489579606-26020-1-git-send-email-kraxel@redhat.com +(cherry picked from commit e048dac616748273c2153490e9fdf1da242f0cad) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 86b4c8b..aab6e02 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -661,11 +661,11 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin, + } + + for (y = 0; y < lines; y++) { +- off_cur = off_begin; +- off_cur_end = (off_cur + bytesperline) & s->cirrus_addr_mask; ++ off_cur = off_begin; ++ off_cur_end = ((off_cur + bytesperline - 1) & s->cirrus_addr_mask) + 1; + assert(off_cur_end >= off_cur); + memory_region_set_dirty(&s->vga.vram, off_cur, off_cur_end - off_cur); +- off_begin += off_pitch; ++ off_begin += off_pitch; + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-off-by-one-in-cirrus_bitblt_rop_bkwd_tran.patch b/SOURCES/kvm-cirrus-fix-off-by-one-in-cirrus_bitblt_rop_bkwd_tran.patch new file mode 100644 index 0000000..fc0f512 --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-off-by-one-in-cirrus_bitblt_rop_bkwd_tran.patch @@ -0,0 +1,49 @@ +From 081ddf9d66155dbec8ec064d7671ba0799642fd6 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:22 +0200 +Subject: [PATCH 7/7] cirrus: fix off-by-one in + cirrus_bitblt_rop_bkwd_transp_*_16 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-8-git-send-email-kraxel@redhat.com> +Patchwork-id: 74555 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 7/7] cirrus: fix off-by-one in cirrus_bitblt_rop_bkwd_transp_*_16 +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +The switch from pointers to addresses (commit +026aeffcb4752054830ba203020ed6eb05bcaba8 and +ffaf857778286ca54e3804432a2369a279e73aa7) added +a off-by-one bug to 16bit backward blits. Fix. + +Reported-by: 李强 +Signed-off-by: Gerd Hoffmann +Reviewed-by: Li Qiang +Message-id: 1489735296-19047-1-git-send-email-kraxel@redhat.com +(cherry picked from commit f019722cbbb45aea153294fc8921fcc96a4d3fa2) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga_rop.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/display/cirrus_vga_rop.h b/hw/display/cirrus_vga_rop.h +index 16dffb8..c1fc070 100644 +--- a/hw/display/cirrus_vga_rop.h ++++ b/hw/display/cirrus_vga_rop.h +@@ -220,7 +220,7 @@ glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x+=2) { +- ROP_OP_TR_16(s, dstaddr, cirrus_src16(s, srcaddr), transp); ++ ROP_OP_TR_16(s, dstaddr - 1, cirrus_src16(s, srcaddr - 1), transp); + dstaddr -= 2; + srcaddr -= 2; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-oob-access-in-mode4and5-write-functions.patch b/SOURCES/kvm-cirrus-fix-oob-access-in-mode4and5-write-functions.patch new file mode 100644 index 0000000..715c8fe --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-oob-access-in-mode4and5-write-functions.patch @@ -0,0 +1,69 @@ +From 6420a8c59712cce74ad689c0d692982665a785b0 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 20 Oct 2017 11:06:19 +0200 +Subject: [PATCH 4/7] cirrus: fix oob access in mode4and5 write functions + +RH-Author: Gerd Hoffmann +Message-id: <20171020110619.2541-12-kraxel@redhat.com> +Patchwork-id: 77403 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 11/11] cirrus: fix oob access in mode4and5 write functions +Bugzilla: 1501295 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Miroslav Rezanina + +Move dst calculation into the loop, so we apply the mask on each +interation and will not overflow vga memory. + +Cc: Prasad J Pandit +Reported-by: Niu Guoxiang +Signed-off-by: Gerd Hoffmann +Message-id: 20171011084314.21752-1-kraxel@redhat.com +(cherry picked from commit eb38e1bc3740725ca29a535351de94107ec58d51) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index c1324ab..a07fa9c 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -2023,15 +2023,14 @@ static void cirrus_mem_writeb_mode4and5_8bpp(CirrusVGAState * s, + unsigned val = mem_value; + uint8_t *dst; + +- dst = s->vga.vram_ptr + (offset &= s->cirrus_addr_mask); + for (x = 0; x < 8; x++) { ++ dst = s->vga.vram_ptr + ((offset + x) & s->cirrus_addr_mask); + if (val & 0x80) { + *dst = s->cirrus_shadow_gr1; + } else if (mode == 5) { + *dst = s->cirrus_shadow_gr0; + } + val <<= 1; +- dst++; + } + memory_region_set_dirty(&s->vga.vram, offset, 8); + } +@@ -2045,8 +2044,8 @@ static void cirrus_mem_writeb_mode4and5_16bpp(CirrusVGAState * s, + unsigned val = mem_value; + uint8_t *dst; + +- dst = s->vga.vram_ptr + (offset &= s->cirrus_addr_mask); + for (x = 0; x < 8; x++) { ++ dst = s->vga.vram_ptr + ((offset + 2 * x) & s->cirrus_addr_mask & ~1); + if (val & 0x80) { + *dst = s->cirrus_shadow_gr1; + *(dst + 1) = s->vga.gr[0x11]; +@@ -2055,7 +2054,6 @@ static void cirrus_mem_writeb_mode4and5_16bpp(CirrusVGAState * s, + *(dst + 1) = s->vga.gr[0x10]; + } + val <<= 1; +- dst += 2; + } + memory_region_set_dirty(&s->vga.vram, offset, 16); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-oob-access-issue-CVE-2017-2615.patch b/SOURCES/kvm-cirrus-fix-oob-access-issue-CVE-2017-2615.patch new file mode 100644 index 0000000..01aecbd --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-oob-access-issue-CVE-2017-2615.patch @@ -0,0 +1,61 @@ +From 2ff46c139a37bbe66732b9024daa771eff3e6c36 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:52 +0100 +Subject: [PATCH 09/11] cirrus: fix oob access issue (CVE-2017-2615) + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-8-git-send-email-kraxel@redhat.com> +Patchwork-id: 73565 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 7/7] cirrus: fix oob access issue (CVE-2017-2615) +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Li Qiang + +When doing bitblt copy in backward mode, we should minus the +blt width first just like the adding in the forward mode. This +can avoid the oob access of the front of vga's vram. + +Signed-off-by: Li Qiang + +{ kraxel: with backward blits (negative pitch) addr is the topmost + address, so check it as-is against vram size ] + +Cc: qemu-stable@nongnu.org +Cc: P J P +Cc: Laszlo Ersek +Cc: Paolo Bonzini +Cc: Wolfgang Bumiller +Fixes: d3532a0db02296e687711b8cdc7791924efccea0 (CVE-2014-8106) +Signed-off-by: Gerd Hoffmann +Message-id: 1485938101-26602-1-git-send-email-kraxel@redhat.com +Reviewed-by: Laszlo Ersek +(cherry picked from commit 62d4c6bd5263bb8413a06c80144fc678df6dfb64) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 6aa29a3..e0e39ef 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -269,10 +269,9 @@ static bool blit_region_is_unsafe(struct CirrusVGAState *s, + { + if (pitch < 0) { + int64_t min = addr +- + ((int64_t)s->cirrus_blt_height-1) * pitch; +- int32_t max = addr +- + s->cirrus_blt_width; +- if (min < 0 || max > s->vga.vram_size) { ++ + ((int64_t)s->cirrus_blt_height - 1) * pitch ++ - s->cirrus_blt_width; ++ if (min < -1 || addr >= s->vga.vram_size) { + return true; + } + } else { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-fix-patterncopy-checks.patch b/SOURCES/kvm-cirrus-fix-patterncopy-checks.patch new file mode 100644 index 0000000..057c2b3 --- /dev/null +++ b/SOURCES/kvm-cirrus-fix-patterncopy-checks.patch @@ -0,0 +1,113 @@ +From 8ce7227f70248c7f4926124e16baab74c5689841 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 10 Feb 2017 08:30:13 +0100 +Subject: [PATCH 1/3] cirrus: fix patterncopy checks + +RH-Author: Gerd Hoffmann +Message-id: <1486715415-3462-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 73775 +O-Subject: [virt-devel] [RHEL-7.4 qemu-kvm PATCH 1/3] cirrus: fix patterncopy checks +Bugzilla: 1420492 +CVE: CVE-2017-2620/20170221 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier + +The blit_region_is_unsafe checks don't work correctly for the +patterncopy source. It's a fixed-sized region, which doesn't +depend on cirrus_blt_{width,height}. So go do the check in +cirrus_bitblt_common_patterncopy instead, then tell blit_is_unsafe that +it doesn't need to verify the source. Also handle the case where we +blit from cirrus_bitbuf correctly. + +This patch replaces 5858dd1801883309bdd208d72ddb81c4e9fee30c. + +Security impact: I think for the most part error on the safe side this +time, refusing blits which should have been allowed. + +Only exception is placing the blit source at the end of the video ram, +so cirrus_blt_srcaddr + 256 goes beyond the end of video memory. But +even in that case I'm not fully sure this actually allows read access to +host memory. To trick the commit 5858dd18 security checks one has to +pick very small cirrus_blt_{width,height} values, which in turn implies +only a fraction of the blit source will actually be used. + +Cc: Wolfgang Bumiller +Cc: Dr. David Alan Gilbert +Signed-off-by: Gerd Hoffmann + +Upstream: WIP (https://patchwork.ozlabs.org/patch/726080/) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 36 ++++++++++++++++++++++++++++++------ + 1 file changed, 30 insertions(+), 6 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index e0e39ef..fff9bf0 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -678,14 +678,39 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin, + } + } + +-static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s, +- const uint8_t * src) ++static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s, bool videosrc) + { ++ uint32_t patternsize; + uint8_t *dst; ++ uint8_t *src; + + dst = s->vga.vram_ptr + s->cirrus_blt_dstaddr; + +- if (blit_is_unsafe(s, false, true)) { ++ if (videosrc) { ++ switch (s->vga.get_bpp(&s->vga)) { ++ case 8: ++ patternsize = 64; ++ break; ++ case 15: ++ case 16: ++ patternsize = 128; ++ break; ++ case 24: ++ case 32: ++ default: ++ patternsize = 256; ++ break; ++ } ++ s->cirrus_blt_srcaddr &= ~(patternsize - 1); ++ if (s->cirrus_blt_srcaddr + patternsize > s->vga.vram_size) { ++ return 0; ++ } ++ src = s->vga.vram_ptr + s->cirrus_blt_srcaddr; ++ } else { ++ src = s->cirrus_bltbuf; ++ } ++ ++ if (blit_is_unsafe(s, true, true)) { + return 0; + } + +@@ -726,8 +751,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + + static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s) + { +- return cirrus_bitblt_common_patterncopy(s, s->vga.vram_ptr + +- (s->cirrus_blt_srcaddr & ~7)); ++ return cirrus_bitblt_common_patterncopy(s, true); + } + + static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) +@@ -826,7 +850,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s) + + if (s->cirrus_srccounter > 0) { + if (s->cirrus_blt_mode & CIRRUS_BLTMODE_PATTERNCOPY) { +- cirrus_bitblt_common_patterncopy(s, s->cirrus_bltbuf); ++ cirrus_bitblt_common_patterncopy(s, false); + the_end: + s->cirrus_srccounter = 0; + cirrus_bitblt_reset(s); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-handle-negative-pitch-in-cirrus_invalidate_re.patch b/SOURCES/kvm-cirrus-handle-negative-pitch-in-cirrus_invalidate_re.patch new file mode 100644 index 0000000..cd87244 --- /dev/null +++ b/SOURCES/kvm-cirrus-handle-negative-pitch-in-cirrus_invalidate_re.patch @@ -0,0 +1,64 @@ +From 45023277a5822c89806eae1cc5f4d5f897e28fcd Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:49 +0100 +Subject: [PATCH 06/11] cirrus: handle negative pitch in + cirrus_invalidate_region() + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 73566 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 4/7] cirrus: handle negative pitch in cirrus_invalidate_region() +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Wolfgang Bumiller + +cirrus_invalidate_region() calls memory_region_set_dirty() +on a per-line basis, always ranging from off_begin to +off_begin+bytesperline. With a negative pitch off_begin +marks the top most used address and thus we need to do an +initial shift backwards by a line for negative pitches of +backward blits, otherwise the first iteration covers the +line going from the start offset forwards instead of +backwards. +Additionally since the start address is inclusive, if we +shift by a full `bytesperline` we move to the first address +*not* included in the blit, so we only shift by one less +than bytesperline. + +Signed-off-by: Wolfgang Bumiller +Message-id: 1485352137-29367-1-git-send-email-w.bumiller@proxmox.com + +[ kraxel: codestyle fixes ] + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit f153b563f8cf121aebf5a2fff5f0110faf58ccb3) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index c8f2f26..e09076a 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -656,9 +656,14 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin, + int off_cur; + int off_cur_end; + ++ if (off_pitch < 0) { ++ off_begin -= bytesperline - 1; ++ } ++ + for (y = 0; y < lines; y++) { + off_cur = off_begin; + off_cur_end = (off_cur + bytesperline) & s->cirrus_addr_mask; ++ assert(off_cur_end >= off_cur); + memory_region_set_dirty(&s->vga.vram, off_cur, off_cur_end - off_cur); + off_begin += off_pitch; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-stop-passing-around-dst-pointers-in-the-blitt.patch b/SOURCES/kvm-cirrus-stop-passing-around-dst-pointers-in-the-blitt.patch new file mode 100644 index 0000000..35b9eb0 --- /dev/null +++ b/SOURCES/kvm-cirrus-stop-passing-around-dst-pointers-in-the-blitt.patch @@ -0,0 +1,630 @@ +From f0327afe876acff27221cdeead1aca0444364133 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:20 +0200 +Subject: [PATCH 5/7] cirrus: stop passing around dst pointers in the blitter + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 74550 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 5/7] cirrus: stop passing around dst pointers in the blitter +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +Instead pass around the address (aka offset into vga memory). Calculate +the pointer in the rop_* functions, after applying the mask to the +address, to make sure the address stays within the valid range. + +Signed-off-by: Gerd Hoffmann +Message-id: 1489574872-8679-1-git-send-email-kraxel@redhat.com +(cherry picked from commit 026aeffcb4752054830ba203020ed6eb05bcaba8) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 20 +++--- + hw/display/cirrus_vga_rop.h | 161 +++++++++++++++++++++++++------------------ + hw/display/cirrus_vga_rop2.h | 97 +++++++++++++------------- + 3 files changed, 153 insertions(+), 125 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index aab6e02..003cc4c 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -174,11 +174,12 @@ + + struct CirrusVGAState; + typedef void (*cirrus_bitblt_rop_t) (struct CirrusVGAState *s, +- uint8_t * dst, const uint8_t * src, ++ uint32_t dstaddr, const uint8_t *src, + int dstpitch, int srcpitch, + int bltwidth, int bltheight); + typedef void (*cirrus_fill_t)(struct CirrusVGAState *s, +- uint8_t *dst, int dst_pitch, int width, int height); ++ uint32_t dstaddr, int dst_pitch, ++ int width, int height); + + typedef struct CirrusVGAState { + VGACommonState vga; +@@ -315,14 +316,14 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) + } + + static void cirrus_bitblt_rop_nop(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, ++ uint32_t dstaddr, const uint8_t *src, + int dstpitch,int srcpitch, + int bltwidth,int bltheight) + { + } + + static void cirrus_bitblt_fill_nop(CirrusVGAState *s, +- uint8_t *dst, ++ uint32_t dstaddr, + int dstpitch, int bltwidth,int bltheight) + { + } +@@ -672,11 +673,8 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin, + static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s, bool videosrc) + { + uint32_t patternsize; +- uint8_t *dst; + uint8_t *src; + +- dst = s->vga.vram_ptr + s->cirrus_blt_dstaddr; +- + if (videosrc) { + switch (s->vga.get_bpp(&s->vga)) { + case 8: +@@ -705,7 +703,7 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s, bool videosrc) + return 0; + } + +- (*s->cirrus_rop) (s, dst, src, ++ (*s->cirrus_rop) (s, s->cirrus_blt_dstaddr, src, + s->cirrus_blt_dstpitch, 0, + s->cirrus_blt_width, s->cirrus_blt_height); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, +@@ -724,7 +722,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + return 0; + } + rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; +- rop_func(s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, ++ rop_func(s, s->cirrus_blt_dstaddr, + s->cirrus_blt_dstpitch, + s->cirrus_blt_width, s->cirrus_blt_height); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, +@@ -791,7 +789,7 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + } + } + +- (*s->cirrus_rop) (s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, ++ (*s->cirrus_rop) (s, s->cirrus_blt_dstaddr, + s->vga.vram_ptr + s->cirrus_blt_srcaddr, + s->cirrus_blt_dstpitch, s->cirrus_blt_srcpitch, + s->cirrus_blt_width, s->cirrus_blt_height); +@@ -842,7 +840,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s) + } else { + /* at least one scan line */ + do { +- (*s->cirrus_rop)(s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, ++ (*s->cirrus_rop)(s, s->cirrus_blt_dstaddr, + s->cirrus_bltbuf, 0, 0, s->cirrus_blt_width, 1); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, 0, + s->cirrus_blt_width, 1); +diff --git a/hw/display/cirrus_vga_rop.h b/hw/display/cirrus_vga_rop.h +index a4f96c6..3b16d70 100644 +--- a/hw/display/cirrus_vga_rop.h ++++ b/hw/display/cirrus_vga_rop.h +@@ -22,31 +22,65 @@ + * THE SOFTWARE. + */ + +-static inline void glue(rop_8_,ROP_NAME)(uint8_t *dst, uint8_t src) ++static inline void glue(rop_8_, ROP_NAME)(CirrusVGAState *s, ++ uint32_t dstaddr, uint8_t src) + { ++ uint8_t *dst = &s->vga.vram_ptr[dstaddr & s->cirrus_addr_mask]; + *dst = ROP_FN(*dst, src); + } + +-static inline void glue(rop_16_,ROP_NAME)(uint16_t *dst, uint16_t src) ++static inline void glue(rop_tr_8_, ROP_NAME)(CirrusVGAState *s, ++ uint32_t dstaddr, uint8_t src, ++ uint8_t transp) + { ++ uint8_t *dst = &s->vga.vram_ptr[dstaddr & s->cirrus_addr_mask]; ++ uint8_t pixel = ROP_FN(*dst, src); ++ if (pixel != transp) { ++ *dst = pixel; ++ } ++} ++ ++static inline void glue(rop_16_, ROP_NAME)(CirrusVGAState *s, ++ uint32_t dstaddr, uint16_t src) ++{ ++ uint16_t *dst = (uint16_t *) ++ (&s->vga.vram_ptr[dstaddr & s->cirrus_addr_mask & ~1]); + *dst = ROP_FN(*dst, src); + } + +-static inline void glue(rop_32_,ROP_NAME)(uint32_t *dst, uint32_t src) ++static inline void glue(rop_tr_16_, ROP_NAME)(CirrusVGAState *s, ++ uint32_t dstaddr, uint16_t src, ++ uint16_t transp) ++{ ++ uint16_t *dst = (uint16_t *) ++ (&s->vga.vram_ptr[dstaddr & s->cirrus_addr_mask & ~1]); ++ uint16_t pixel = ROP_FN(*dst, src); ++ if (pixel != transp) { ++ *dst = pixel; ++ } ++} ++ ++static inline void glue(rop_32_, ROP_NAME)(CirrusVGAState *s, ++ uint32_t dstaddr, uint32_t src) + { ++ uint32_t *dst = (uint32_t *) ++ (&s->vga.vram_ptr[dstaddr & s->cirrus_addr_mask & ~3]); + *dst = ROP_FN(*dst, src); + } + +-#define ROP_OP(d, s) glue(rop_8_,ROP_NAME)(d, s) +-#define ROP_OP_16(d, s) glue(rop_16_,ROP_NAME)(d, s) +-#define ROP_OP_32(d, s) glue(rop_32_,ROP_NAME)(d, s) ++#define ROP_OP(st, d, s) glue(rop_8_, ROP_NAME)(st, d, s) ++#define ROP_OP_TR(st, d, s, t) glue(rop_tr_8_, ROP_NAME)(st, d, s, t) ++#define ROP_OP_16(st, d, s) glue(rop_16_, ROP_NAME)(st, d, s) ++#define ROP_OP_TR_16(st, d, s, t) glue(rop_tr_16_, ROP_NAME)(st, d, s, t) ++#define ROP_OP_32(st, d, s) glue(rop_32_, ROP_NAME)(st, d, s) + #undef ROP_FN + + static void + glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, +- int dstpitch,int srcpitch, +- int bltwidth,int bltheight) ++ uint32_t dstaddr, ++ const uint8_t *src, ++ int dstpitch, int srcpitch, ++ int bltwidth, int bltheight) + { + int x,y; + dstpitch -= bltwidth; +@@ -59,43 +93,47 @@ glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(CirrusVGAState *s, + + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- ROP_OP(dst, *src); +- dst++; ++ ROP_OP(s, dstaddr, *src); ++ dstaddr++; + src++; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + src += srcpitch; + } + } + + static void + glue(cirrus_bitblt_rop_bkwd_, ROP_NAME)(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, +- int dstpitch,int srcpitch, +- int bltwidth,int bltheight) ++ uint32_t dstaddr, ++ const uint8_t *src, ++ int dstpitch, int srcpitch, ++ int bltwidth, int bltheight) + { + int x,y; + dstpitch += bltwidth; + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- ROP_OP(dst, *src); +- dst--; ++ ROP_OP(s, dstaddr, *src); ++ dstaddr--; + src--; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + src += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, +- int dstpitch,int srcpitch, +- int bltwidth,int bltheight) ++ uint32_t dstaddr, ++ const uint8_t *src, ++ int dstpitch, ++ int srcpitch, ++ int bltwidth, ++ int bltheight) + { + int x,y; +- uint8_t p; ++ uint8_t transp = s->vga.gr[0x34]; + dstpitch -= bltwidth; + srcpitch -= bltwidth; + +@@ -105,48 +143,50 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, + + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- p = *dst; +- ROP_OP(&p, *src); +- if (p != s->vga.gr[0x34]) *dst = p; +- dst++; ++ ROP_OP_TR(s, dstaddr, *src, transp); ++ dstaddr++; + src++; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + src += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, +- int dstpitch,int srcpitch, +- int bltwidth,int bltheight) ++ uint32_t dstaddr, ++ const uint8_t *src, ++ int dstpitch, ++ int srcpitch, ++ int bltwidth, ++ int bltheight) + { + int x,y; +- uint8_t p; ++ uint8_t transp = s->vga.gr[0x34]; + dstpitch += bltwidth; + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- p = *dst; +- ROP_OP(&p, *src); +- if (p != s->vga.gr[0x34]) *dst = p; +- dst--; ++ ROP_OP_TR(s, dstaddr, *src, transp); ++ dstaddr--; + src--; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + src += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, +- int dstpitch,int srcpitch, +- int bltwidth,int bltheight) ++ uint32_t dstaddr, ++ const uint8_t *src, ++ int dstpitch, ++ int srcpitch, ++ int bltwidth, ++ int bltheight) + { + int x,y; +- uint8_t p1, p2; ++ uint16_t transp = s->vga.gr[0x34] | (uint16_t)s->vga.gr[0x35] << 8; + dstpitch -= bltwidth; + srcpitch -= bltwidth; + +@@ -156,46 +196,35 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x+=2) { +- p1 = *dst; +- p2 = *(dst+1); +- ROP_OP(&p1, *src); +- ROP_OP(&p2, *(src + 1)); +- if ((p1 != s->vga.gr[0x34]) || (p2 != s->vga.gr[0x35])) { +- *dst = p1; +- *(dst+1) = p2; +- } +- dst+=2; +- src+=2; ++ ROP_OP_TR_16(s, dstaddr, *(uint16_t *)src, transp); ++ dstaddr += 2; ++ src += 2; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + src += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, +- uint8_t *dst,const uint8_t *src, +- int dstpitch,int srcpitch, +- int bltwidth,int bltheight) ++ uint32_t dstaddr, ++ const uint8_t *src, ++ int dstpitch, ++ int srcpitch, ++ int bltwidth, ++ int bltheight) + { + int x,y; +- uint8_t p1, p2; ++ uint16_t transp = s->vga.gr[0x34] | (uint16_t)s->vga.gr[0x35] << 8; + dstpitch += bltwidth; + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x+=2) { +- p1 = *(dst-1); +- p2 = *dst; +- ROP_OP(&p1, *(src - 1)); +- ROP_OP(&p2, *src); +- if ((p1 != s->vga.gr[0x34]) || (p2 != s->vga.gr[0x35])) { +- *(dst-1) = p1; +- *dst = p2; +- } +- dst-=2; +- src-=2; ++ ROP_OP_TR_16(s, dstaddr, *(uint16_t *)src, transp); ++ dstaddr -= 2; ++ src -= 2; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + src += srcpitch; + } + } +diff --git a/hw/display/cirrus_vga_rop2.h b/hw/display/cirrus_vga_rop2.h +index d28bcc6..bc92f0e 100644 +--- a/hw/display/cirrus_vga_rop2.h ++++ b/hw/display/cirrus_vga_rop2.h +@@ -23,27 +23,29 @@ + */ + + #if DEPTH == 8 +-#define PUTPIXEL() ROP_OP(&d[0], col) ++#define PUTPIXEL(s, a, c) ROP_OP(s, a, c) + #elif DEPTH == 16 +-#define PUTPIXEL() ROP_OP_16((uint16_t *)&d[0], col) ++#define PUTPIXEL(s, a, c) ROP_OP_16(s, a, c) + #elif DEPTH == 24 +-#define PUTPIXEL() ROP_OP(&d[0], col); \ +- ROP_OP(&d[1], (col >> 8)); \ +- ROP_OP(&d[2], (col >> 16)) ++#define PUTPIXEL(s, a, c) do { \ ++ ROP_OP(s, a, c); \ ++ ROP_OP(s, a + 1, (col >> 8)); \ ++ ROP_OP(s, a + 2, (col >> 16)); \ ++ } while (0) + #elif DEPTH == 32 +-#define PUTPIXEL() ROP_OP_32(((uint32_t *)&d[0]), col) ++#define PUTPIXEL(s, a, c) ROP_OP_32(s, a, c) + #else + #error unsupported DEPTH + #endif + + static void + glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) +- (CirrusVGAState * s, uint8_t * dst, +- const uint8_t * src, ++ (CirrusVGAState *s, uint32_t dstaddr, ++ const uint8_t *src, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +- uint8_t *d; ++ uint32_t addr; + int x, y, pattern_y, pattern_pitch, pattern_x; + unsigned int col; + const uint8_t *src1; +@@ -63,7 +65,7 @@ glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) + pattern_y = s->cirrus_blt_srcaddr & 7; + for(y = 0; y < bltheight; y++) { + pattern_x = skipleft; +- d = dst + skipleft; ++ addr = dstaddr + skipleft; + src1 = src + pattern_y * pattern_pitch; + for (x = skipleft; x < bltwidth; x += (DEPTH / 8)) { + #if DEPTH == 8 +@@ -82,23 +84,23 @@ glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) + col = ((uint32_t *)(src1 + pattern_x))[0]; + pattern_x = (pattern_x + 4) & 31; + #endif +- PUTPIXEL(); +- d += (DEPTH / 8); ++ PUTPIXEL(s, addr, col); ++ addr += (DEPTH / 8); + } + pattern_y = (pattern_y + 1) & 7; +- dst += dstpitch; ++ dstaddr += dstpitch; + } + } + + /* NOTE: srcpitch is ignored */ + static void + glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) +- (CirrusVGAState * s, uint8_t * dst, +- const uint8_t * src, ++ (CirrusVGAState *s, uint32_t dstaddr, ++ const uint8_t *src, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +- uint8_t *d; ++ uint32_t addr; + int x, y; + unsigned bits, bits_xor; + unsigned int col; +@@ -123,7 +125,7 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) + for(y = 0; y < bltheight; y++) { + bitmask = 0x80 >> srcskipleft; + bits = *src++ ^ bits_xor; +- d = dst + dstskipleft; ++ addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; +@@ -131,24 +133,24 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) + } + index = (bits & bitmask); + if (index) { +- PUTPIXEL(); ++ PUTPIXEL(s, addr, col); + } +- d += (DEPTH / 8); ++ addr += (DEPTH / 8); + bitmask >>= 1; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + } + } + + static void + glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) +- (CirrusVGAState * s, uint8_t * dst, +- const uint8_t * src, ++ (CirrusVGAState *s, uint32_t dstaddr, ++ const uint8_t *src, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { + uint32_t colors[2]; +- uint8_t *d; ++ uint32_t addr; + int x, y; + unsigned bits; + unsigned int col; +@@ -161,29 +163,29 @@ glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) + for(y = 0; y < bltheight; y++) { + bitmask = 0x80 >> srcskipleft; + bits = *src++; +- d = dst + dstskipleft; ++ addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; + bits = *src++; + } + col = colors[!!(bits & bitmask)]; +- PUTPIXEL(); +- d += (DEPTH / 8); ++ PUTPIXEL(s, addr, col); ++ addr += (DEPTH / 8); + bitmask >>= 1; + } +- dst += dstpitch; ++ dstaddr += dstpitch; + } + } + + static void + glue(glue(glue(cirrus_colorexpand_pattern_transp_, ROP_NAME), _),DEPTH) +- (CirrusVGAState * s, uint8_t * dst, +- const uint8_t * src, ++ (CirrusVGAState *s, uint32_t dstaddr, ++ const uint8_t *src, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +- uint8_t *d; ++ uint32_t addr; + int x, y, bitpos, pattern_y; + unsigned int bits, bits_xor; + unsigned int col; +@@ -207,28 +209,28 @@ glue(glue(glue(cirrus_colorexpand_pattern_transp_, ROP_NAME), _),DEPTH) + for(y = 0; y < bltheight; y++) { + bits = src[pattern_y] ^ bits_xor; + bitpos = 7 - srcskipleft; +- d = dst + dstskipleft; ++ addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { + if ((bits >> bitpos) & 1) { +- PUTPIXEL(); ++ PUTPIXEL(s, addr, col); + } +- d += (DEPTH / 8); ++ addr += (DEPTH / 8); + bitpos = (bitpos - 1) & 7; + } + pattern_y = (pattern_y + 1) & 7; +- dst += dstpitch; ++ dstaddr += dstpitch; + } + } + + static void + glue(glue(glue(cirrus_colorexpand_pattern_, ROP_NAME), _),DEPTH) +- (CirrusVGAState * s, uint8_t * dst, +- const uint8_t * src, ++ (CirrusVGAState *s, uint32_t dstaddr, ++ const uint8_t *src, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { + uint32_t colors[2]; +- uint8_t *d; ++ uint32_t addr; + int x, y, bitpos, pattern_y; + unsigned int bits; + unsigned int col; +@@ -242,38 +244,37 @@ glue(glue(glue(cirrus_colorexpand_pattern_, ROP_NAME), _),DEPTH) + for(y = 0; y < bltheight; y++) { + bits = src[pattern_y]; + bitpos = 7 - srcskipleft; +- d = dst + dstskipleft; ++ addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { + col = colors[(bits >> bitpos) & 1]; +- PUTPIXEL(); +- d += (DEPTH / 8); ++ PUTPIXEL(s, addr, col); ++ addr += (DEPTH / 8); + bitpos = (bitpos - 1) & 7; + } + pattern_y = (pattern_y + 1) & 7; +- dst += dstpitch; ++ dstaddr += dstpitch; + } + } + + static void + glue(glue(glue(cirrus_fill_, ROP_NAME), _),DEPTH) + (CirrusVGAState *s, +- uint8_t *dst, int dst_pitch, ++ uint32_t dstaddr, int dst_pitch, + int width, int height) + { +- uint8_t *d, *d1; ++ uint32_t addr; + uint32_t col; + int x, y; + + col = s->cirrus_blt_fgcol; + +- d1 = dst; + for(y = 0; y < height; y++) { +- d = d1; ++ addr = dstaddr; + for(x = 0; x < width; x += (DEPTH / 8)) { +- PUTPIXEL(); +- d += (DEPTH / 8); ++ PUTPIXEL(s, addr, col); ++ addr += (DEPTH / 8); + } +- d1 += dst_pitch; ++ dstaddr += dst_pitch; + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-stop-passing-around-src-pointers-in-the-blitt.patch b/SOURCES/kvm-cirrus-stop-passing-around-src-pointers-in-the-blitt.patch new file mode 100644 index 0000000..d3f34c1 --- /dev/null +++ b/SOURCES/kvm-cirrus-stop-passing-around-src-pointers-in-the-blitt.patch @@ -0,0 +1,455 @@ +From cc965429746aac94b7c37991f676dcd323ef212d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:21 +0200 +Subject: [PATCH 6/7] cirrus: stop passing around src pointers in the blitter + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-7-git-send-email-kraxel@redhat.com> +Patchwork-id: 74549 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 6/7] cirrus: stop passing around src pointers in the blitter +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +Does basically the same as "cirrus: stop passing around dst pointers in +the blitter", just for the src pointer instead of the dst pointer. + +For the src we have to care about cputovideo blits though and fetch the +data from s->cirrus_bltbuf instead of vga memory. The cirrus_src*() +helper functions handle that. + +Signed-off-by: Gerd Hoffmann +Message-id: 1489584487-3489-1-git-send-email-kraxel@redhat.com +(cherry picked from commit ffaf857778286ca54e3804432a2369a279e73aa7) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 61 +++++++++++++++++++++++++++++++++++--------- + hw/display/cirrus_vga_rop.h | 48 +++++++++++++++++----------------- + hw/display/cirrus_vga_rop2.h | 38 ++++++++++++++------------- + 3 files changed, 93 insertions(+), 54 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 003cc4c..c1324ab 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -174,7 +174,7 @@ + + struct CirrusVGAState; + typedef void (*cirrus_bitblt_rop_t) (struct CirrusVGAState *s, +- uint32_t dstaddr, const uint8_t *src, ++ uint32_t dstaddr, uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight); + typedef void (*cirrus_fill_t)(struct CirrusVGAState *s, +@@ -316,7 +316,7 @@ static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) + } + + static void cirrus_bitblt_rop_nop(CirrusVGAState *s, +- uint32_t dstaddr, const uint8_t *src, ++ uint32_t dstaddr, uint32_t srcaddr, + int dstpitch,int srcpitch, + int bltwidth,int bltheight) + { +@@ -328,6 +328,45 @@ static void cirrus_bitblt_fill_nop(CirrusVGAState *s, + { + } + ++static inline uint8_t cirrus_src(CirrusVGAState *s, uint32_t srcaddr) ++{ ++ if (s->cirrus_srccounter) { ++ /* cputovideo */ ++ return s->cirrus_bltbuf[srcaddr & (CIRRUS_BLTBUFSIZE - 1)]; ++ } else { ++ /* videotovideo */ ++ return s->vga.vram_ptr[srcaddr & s->cirrus_addr_mask]; ++ } ++} ++ ++static inline uint16_t cirrus_src16(CirrusVGAState *s, uint32_t srcaddr) ++{ ++ uint16_t *src; ++ ++ if (s->cirrus_srccounter) { ++ /* cputovideo */ ++ src = (void *)&s->cirrus_bltbuf[srcaddr & (CIRRUS_BLTBUFSIZE - 1) & ~1]; ++ } else { ++ /* videotovideo */ ++ src = (void *)&s->vga.vram_ptr[srcaddr & s->cirrus_addr_mask & ~1]; ++ } ++ return *src; ++} ++ ++static inline uint32_t cirrus_src32(CirrusVGAState *s, uint32_t srcaddr) ++{ ++ uint32_t *src; ++ ++ if (s->cirrus_srccounter) { ++ /* cputovideo */ ++ src = (void *)&s->cirrus_bltbuf[srcaddr & (CIRRUS_BLTBUFSIZE - 1) & ~3]; ++ } else { ++ /* videotovideo */ ++ src = (void *)&s->vga.vram_ptr[srcaddr & s->cirrus_addr_mask & ~3]; ++ } ++ return *src; ++} ++ + #define ROP_NAME 0 + #define ROP_FN(d, s) 0 + #include "cirrus_vga_rop.h" +@@ -670,10 +709,10 @@ static void cirrus_invalidate_region(CirrusVGAState * s, int off_begin, + } + } + +-static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s, bool videosrc) ++static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s) + { + uint32_t patternsize; +- uint8_t *src; ++ bool videosrc = !s->cirrus_srccounter; + + if (videosrc) { + switch (s->vga.get_bpp(&s->vga)) { +@@ -694,16 +733,14 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState *s, bool videosrc) + if (s->cirrus_blt_srcaddr + patternsize > s->vga.vram_size) { + return 0; + } +- src = s->vga.vram_ptr + s->cirrus_blt_srcaddr; +- } else { +- src = s->cirrus_bltbuf; + } + + if (blit_is_unsafe(s, true)) { + return 0; + } + +- (*s->cirrus_rop) (s, s->cirrus_blt_dstaddr, src, ++ (*s->cirrus_rop) (s, s->cirrus_blt_dstaddr, ++ videosrc ? s->cirrus_blt_srcaddr : 0, + s->cirrus_blt_dstpitch, 0, + s->cirrus_blt_width, s->cirrus_blt_height); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, +@@ -740,7 +777,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + + static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s) + { +- return cirrus_bitblt_common_patterncopy(s, true); ++ return cirrus_bitblt_common_patterncopy(s); + } + + static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) +@@ -790,7 +827,7 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + } + + (*s->cirrus_rop) (s, s->cirrus_blt_dstaddr, +- s->vga.vram_ptr + s->cirrus_blt_srcaddr, ++ s->cirrus_blt_srcaddr, + s->cirrus_blt_dstpitch, s->cirrus_blt_srcpitch, + s->cirrus_blt_width, s->cirrus_blt_height); + +@@ -833,7 +870,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s) + + if (s->cirrus_srccounter > 0) { + if (s->cirrus_blt_mode & CIRRUS_BLTMODE_PATTERNCOPY) { +- cirrus_bitblt_common_patterncopy(s, false); ++ cirrus_bitblt_common_patterncopy(s); + the_end: + s->cirrus_srccounter = 0; + cirrus_bitblt_reset(s); +@@ -841,7 +878,7 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s) + /* at least one scan line */ + do { + (*s->cirrus_rop)(s, s->cirrus_blt_dstaddr, +- s->cirrus_bltbuf, 0, 0, s->cirrus_blt_width, 1); ++ 0, 0, 0, s->cirrus_blt_width, 1); + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, 0, + s->cirrus_blt_width, 1); + s->cirrus_blt_dstaddr += s->cirrus_blt_dstpitch; +diff --git a/hw/display/cirrus_vga_rop.h b/hw/display/cirrus_vga_rop.h +index 3b16d70..16dffb8 100644 +--- a/hw/display/cirrus_vga_rop.h ++++ b/hw/display/cirrus_vga_rop.h +@@ -78,7 +78,7 @@ static inline void glue(rop_32_, ROP_NAME)(CirrusVGAState *s, + static void + glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(CirrusVGAState *s, + uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +@@ -93,19 +93,19 @@ glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(CirrusVGAState *s, + + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- ROP_OP(s, dstaddr, *src); ++ ROP_OP(s, dstaddr, cirrus_src(s, srcaddr)); + dstaddr++; +- src++; ++ srcaddr++; + } + dstaddr += dstpitch; +- src += srcpitch; ++ srcaddr += srcpitch; + } + } + + static void + glue(cirrus_bitblt_rop_bkwd_, ROP_NAME)(CirrusVGAState *s, + uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +@@ -114,19 +114,19 @@ glue(cirrus_bitblt_rop_bkwd_, ROP_NAME)(CirrusVGAState *s, + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- ROP_OP(s, dstaddr, *src); ++ ROP_OP(s, dstaddr, cirrus_src(s, srcaddr)); + dstaddr--; +- src--; ++ srcaddr--; + } + dstaddr += dstpitch; +- src += srcpitch; ++ srcaddr += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, + uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, + int srcpitch, + int bltwidth, +@@ -143,19 +143,19 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, + + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- ROP_OP_TR(s, dstaddr, *src, transp); ++ ROP_OP_TR(s, dstaddr, cirrus_src(s, srcaddr), transp); + dstaddr++; +- src++; ++ srcaddr++; + } + dstaddr += dstpitch; +- src += srcpitch; ++ srcaddr += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, + uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, + int srcpitch, + int bltwidth, +@@ -167,19 +167,19 @@ glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { +- ROP_OP_TR(s, dstaddr, *src, transp); ++ ROP_OP_TR(s, dstaddr, cirrus_src(s, srcaddr), transp); + dstaddr--; +- src--; ++ srcaddr--; + } + dstaddr += dstpitch; +- src += srcpitch; ++ srcaddr += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, + int srcpitch, + int bltwidth, +@@ -196,19 +196,19 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x+=2) { +- ROP_OP_TR_16(s, dstaddr, *(uint16_t *)src, transp); ++ ROP_OP_TR_16(s, dstaddr, cirrus_src16(s, srcaddr), transp); + dstaddr += 2; +- src += 2; ++ srcaddr += 2; + } + dstaddr += dstpitch; +- src += srcpitch; ++ srcaddr += srcpitch; + } + } + + static void + glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, + int srcpitch, + int bltwidth, +@@ -220,12 +220,12 @@ glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + srcpitch += bltwidth; + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x+=2) { +- ROP_OP_TR_16(s, dstaddr, *(uint16_t *)src, transp); ++ ROP_OP_TR_16(s, dstaddr, cirrus_src16(s, srcaddr), transp); + dstaddr -= 2; +- src -= 2; ++ srcaddr -= 2; + } + dstaddr += dstpitch; +- src += srcpitch; ++ srcaddr += srcpitch; + } + } + +diff --git a/hw/display/cirrus_vga_rop2.h b/hw/display/cirrus_vga_rop2.h +index bc92f0e..b86bcd6 100644 +--- a/hw/display/cirrus_vga_rop2.h ++++ b/hw/display/cirrus_vga_rop2.h +@@ -41,14 +41,14 @@ + static void + glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) + (CirrusVGAState *s, uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { + uint32_t addr; + int x, y, pattern_y, pattern_pitch, pattern_x; + unsigned int col; +- const uint8_t *src1; ++ uint32_t src1addr; + #if DEPTH == 24 + int skipleft = s->vga.gr[0x2f] & 0x1f; + #else +@@ -66,22 +66,24 @@ glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) + for(y = 0; y < bltheight; y++) { + pattern_x = skipleft; + addr = dstaddr + skipleft; +- src1 = src + pattern_y * pattern_pitch; ++ src1addr = srcaddr + pattern_y * pattern_pitch; + for (x = skipleft; x < bltwidth; x += (DEPTH / 8)) { + #if DEPTH == 8 +- col = src1[pattern_x]; ++ col = cirrus_src(s, src1addr + pattern_x); + pattern_x = (pattern_x + 1) & 7; + #elif DEPTH == 16 +- col = ((uint16_t *)(src1 + pattern_x))[0]; ++ col = cirrus_src16(s, src1addr + pattern_x); + pattern_x = (pattern_x + 2) & 15; + #elif DEPTH == 24 + { +- const uint8_t *src2 = src1 + pattern_x * 3; +- col = src2[0] | (src2[1] << 8) | (src2[2] << 16); ++ uint32_t src2addr = src1addr + pattern_x * 3; ++ col = cirrus_src(s, src2addr) | ++ (cirrus_src(s, src2addr + 1) << 8) | ++ (cirrus_src(s, src2addr + 2) << 16); + pattern_x = (pattern_x + 1) & 7; + } + #else +- col = ((uint32_t *)(src1 + pattern_x))[0]; ++ col = cirrus_src32(s, src1addr + pattern_x); + pattern_x = (pattern_x + 4) & 31; + #endif + PUTPIXEL(s, addr, col); +@@ -96,7 +98,7 @@ glue(glue(glue(cirrus_patternfill_, ROP_NAME), _),DEPTH) + static void + glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) + (CirrusVGAState *s, uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +@@ -124,12 +126,12 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) + + for(y = 0; y < bltheight; y++) { + bitmask = 0x80 >> srcskipleft; +- bits = *src++ ^ bits_xor; ++ bits = cirrus_src(s, srcaddr++) ^ bits_xor; + addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; +- bits = *src++ ^ bits_xor; ++ bits = cirrus_src(s, srcaddr++) ^ bits_xor; + } + index = (bits & bitmask); + if (index) { +@@ -145,7 +147,7 @@ glue(glue(glue(cirrus_colorexpand_transp_, ROP_NAME), _),DEPTH) + static void + glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) + (CirrusVGAState *s, uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +@@ -162,12 +164,12 @@ glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) + colors[1] = s->cirrus_blt_fgcol; + for(y = 0; y < bltheight; y++) { + bitmask = 0x80 >> srcskipleft; +- bits = *src++; ++ bits = cirrus_src(s, srcaddr++); + addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { + if ((bitmask & 0xff) == 0) { + bitmask = 0x80; +- bits = *src++; ++ bits = cirrus_src(s, srcaddr++); + } + col = colors[!!(bits & bitmask)]; + PUTPIXEL(s, addr, col); +@@ -181,7 +183,7 @@ glue(glue(glue(cirrus_colorexpand_, ROP_NAME), _),DEPTH) + static void + glue(glue(glue(cirrus_colorexpand_pattern_transp_, ROP_NAME), _),DEPTH) + (CirrusVGAState *s, uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +@@ -207,7 +209,7 @@ glue(glue(glue(cirrus_colorexpand_pattern_transp_, ROP_NAME), _),DEPTH) + pattern_y = s->cirrus_blt_srcaddr & 7; + + for(y = 0; y < bltheight; y++) { +- bits = src[pattern_y] ^ bits_xor; ++ bits = cirrus_src(s, srcaddr + pattern_y) ^ bits_xor; + bitpos = 7 - srcskipleft; + addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { +@@ -225,7 +227,7 @@ glue(glue(glue(cirrus_colorexpand_pattern_transp_, ROP_NAME), _),DEPTH) + static void + glue(glue(glue(cirrus_colorexpand_pattern_, ROP_NAME), _),DEPTH) + (CirrusVGAState *s, uint32_t dstaddr, +- const uint8_t *src, ++ uint32_t srcaddr, + int dstpitch, int srcpitch, + int bltwidth, int bltheight) + { +@@ -242,7 +244,7 @@ glue(glue(glue(cirrus_colorexpand_pattern_, ROP_NAME), _),DEPTH) + pattern_y = s->cirrus_blt_srcaddr & 7; + + for(y = 0; y < bltheight; y++) { +- bits = src[pattern_y]; ++ bits = cirrus_src(s, srcaddr + pattern_y); + bitpos = 7 - srcskipleft; + addr = dstaddr + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus-vnc-zap-bitblit-support-from-console-code.patch b/SOURCES/kvm-cirrus-vnc-zap-bitblit-support-from-console-code.patch new file mode 100644 index 0000000..87006bf --- /dev/null +++ b/SOURCES/kvm-cirrus-vnc-zap-bitblit-support-from-console-code.patch @@ -0,0 +1,300 @@ +From 9bd81fb917c9ac22055e0dc7b3a89a22d5cfbfc1 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:17 +0200 +Subject: [PATCH 2/7] cirrus/vnc: zap bitblit support from console code. + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 74554 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 2/7] cirrus/vnc: zap bitblit support from console code. +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +There is a special code path (dpy_gfx_copy) to allow graphic emulation +notify user interface code about bitblit operations carryed out by +guests. It is supported by cirrus and vnc server. The intended purpose +is to optimize display scrolls and just send over the scroll op instead +of a full display update. + +This is rarely used these days though because modern guests simply don't +use the cirrus blitter any more. Any linux guest using the cirrus drm +driver doesn't. Any windows guest newer than winxp doesn't ship with a +cirrus driver any more and thus uses the cirrus as simple framebuffer. + +So this code tends to bitrot and bugs can go unnoticed for a long time. +See for example commit "3e10c3e vnc: fix qemu crash because of SIGSEGV" +which fixes a bug lingering in the code for almost a year, added by +commit "c7628bf vnc: only alloc server surface with clients connected". + +Also the vnc server will throttle the frame rate in case it figures the +network can't keep up (send buffers are full). This doesn't work with +dpy_gfx_copy, for any copy operation sent to the vnc client we have to +send all outstanding updates beforehand, otherwise the vnc client might +run the client side blit on outdated data and thereby corrupt the +display. So this dpy_gfx_copy "optimization" might even make things +worse on slow network links. + +Lets kill it once for all. + +Oh, and one more reason: Turns out (after writing the patch) we have a +security bug in that code path ... + +Fixes: CVE-2016-9603 +Signed-off-by: Gerd Hoffmann +Message-id: 1489494419-14340-1-git-send-email-kraxel@redhat.com +(cherry picked from commit 50628d3479e4f9aa97e323506856e394fe7ad7a6) +Signed-off-by: Miroslav Rezanina + +Conflicts: + include/ui/console.h + ui/vnc.c +--- + hw/display/cirrus_vga.c | 12 ++---- + include/ui/console.h | 7 ---- + ui/console.c | 28 -------------- + ui/vnc.c | 99 ------------------------------------------------- + 4 files changed, 3 insertions(+), 143 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 1b972db..83cef70 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -790,21 +790,15 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + } + } + +- /* we have to flush all pending changes so that the copy +- is generated at the appropriate moment in time */ +- if (notify) +- graphic_hw_update(s->vga.con); +- + (*s->cirrus_rop) (s, s->vga.vram_ptr + s->cirrus_blt_dstaddr, + s->vga.vram_ptr + s->cirrus_blt_srcaddr, + s->cirrus_blt_dstpitch, s->cirrus_blt_srcpitch, + s->cirrus_blt_width, s->cirrus_blt_height); + + if (notify) { +- qemu_console_copy(s->vga.con, +- sx, sy, dx, dy, +- s->cirrus_blt_width / depth, +- s->cirrus_blt_height); ++ dpy_gfx_update(s->vga.con, dx, dy, ++ s->cirrus_blt_width / depth, ++ s->cirrus_blt_height); + } + + /* we don't have to notify the display that this portion has +diff --git a/include/ui/console.h b/include/ui/console.h +index 4307b5f..7f5fa66 100644 +--- a/include/ui/console.h ++++ b/include/ui/console.h +@@ -159,9 +159,6 @@ typedef struct DisplayChangeListenerOps { + int x, int y, int w, int h); + void (*dpy_gfx_switch)(DisplayChangeListener *dcl, + struct DisplaySurface *new_surface); +- void (*dpy_gfx_copy)(DisplayChangeListener *dcl, +- int src_x, int src_y, +- int dst_x, int dst_y, int w, int h); + + void (*dpy_text_cursor)(DisplayChangeListener *dcl, + int x, int y); +@@ -216,8 +213,6 @@ void unregister_displaychangelistener(DisplayChangeListener *dcl); + void dpy_gfx_update(QemuConsole *con, int x, int y, int w, int h); + void dpy_gfx_replace_surface(QemuConsole *con, + DisplaySurface *surface); +-void dpy_gfx_copy(QemuConsole *con, int src_x, int src_y, +- int dst_x, int dst_y, int w, int h); + void dpy_text_cursor(QemuConsole *con, int x, int y); + void dpy_text_update(QemuConsole *con, int x, int y, int w, int h); + void dpy_text_resize(QemuConsole *con, int w, int h); +@@ -295,8 +290,6 @@ void text_consoles_set_display(DisplayState *ds); + void console_select(unsigned int index); + void console_color_init(DisplayState *ds); + void qemu_console_resize(QemuConsole *con, int width, int height); +-void qemu_console_copy(QemuConsole *con, int src_x, int src_y, +- int dst_x, int dst_y, int w, int h); + DisplaySurface *qemu_console_surface(QemuConsole *con); + DisplayState *qemu_console_displaystate(QemuConsole *console); + +diff --git a/ui/console.c b/ui/console.c +index d422083..fb08ec0 100644 +--- a/ui/console.c ++++ b/ui/console.c +@@ -1461,27 +1461,6 @@ void dpy_refresh(DisplayState *s) + } + } + +-void dpy_gfx_copy(QemuConsole *con, int src_x, int src_y, +- int dst_x, int dst_y, int w, int h) +-{ +- DisplayState *s = con->ds; +- DisplayChangeListener *dcl; +- +- if (!qemu_console_is_visible(con)) { +- return; +- } +- QLIST_FOREACH(dcl, &s->listeners, next) { +- if (con != (dcl->con ? dcl->con : active_console)) { +- continue; +- } +- if (dcl->ops->dpy_gfx_copy) { +- dcl->ops->dpy_gfx_copy(dcl, src_x, src_y, dst_x, dst_y, w, h); +- } else { /* TODO */ +- dcl->ops->dpy_gfx_update(dcl, dst_x, dst_y, w, h); +- } +- } +-} +- + void dpy_text_cursor(QemuConsole *con, int x, int y) + { + DisplayState *s = con->ds; +@@ -1843,13 +1822,6 @@ void qemu_console_resize(QemuConsole *s, int width, int height) + dpy_gfx_replace_surface(s, surface); + } + +-void qemu_console_copy(QemuConsole *con, int src_x, int src_y, +- int dst_x, int dst_y, int w, int h) +-{ +- assert(con->console_type == GRAPHIC_CONSOLE); +- dpy_gfx_copy(con, src_x, src_y, dst_x, dst_y, w, h); +-} +- + DisplaySurface *qemu_console_surface(QemuConsole *console) + { + return console->surface; +diff --git a/ui/vnc.c b/ui/vnc.c +index b68918e..1834db0 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -417,7 +417,6 @@ out_error: + */ + + static int vnc_update_client(VncState *vs, int has_dirty); +-static int vnc_update_client_sync(VncState *vs, int has_dirty); + static void vnc_disconnect_start(VncState *vs); + + static void vnc_colordepth(VncState *vs); +@@ -728,96 +727,6 @@ int vnc_send_framebuffer_update(VncState *vs, int x, int y, int w, int h) + return n; + } + +-static void vnc_copy(VncState *vs, int src_x, int src_y, int dst_x, int dst_y, int w, int h) +-{ +- /* send bitblit op to the vnc client */ +- vnc_lock_output(vs); +- vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); +- vnc_write_u8(vs, 0); +- vnc_write_u16(vs, 1); /* number of rects */ +- vnc_framebuffer_update(vs, dst_x, dst_y, w, h, VNC_ENCODING_COPYRECT); +- vnc_write_u16(vs, src_x); +- vnc_write_u16(vs, src_y); +- vnc_unlock_output(vs); +- vnc_flush(vs); +-} +- +-static void vnc_dpy_copy(DisplayChangeListener *dcl, +- int src_x, int src_y, +- int dst_x, int dst_y, int w, int h) +-{ +- VncDisplay *vd = container_of(dcl, VncDisplay, dcl); +- VncState *vs, *vn; +- uint8_t *src_row; +- uint8_t *dst_row; +- int i, x, y, pitch, inc, w_lim, s; +- int cmp_bytes; +- +- vnc_refresh_server_surface(vd); +- QTAILQ_FOREACH_SAFE(vs, &vd->clients, next, vn) { +- if (vnc_has_feature(vs, VNC_FEATURE_COPYRECT)) { +- vs->force_update = 1; +- vnc_update_client_sync(vs, 1); +- /* vs might be free()ed here */ +- } +- } +- +- /* do bitblit op on the local surface too */ +- pitch = vnc_server_fb_stride(vd); +- src_row = vnc_server_fb_ptr(vd, src_x, src_y); +- dst_row = vnc_server_fb_ptr(vd, dst_x, dst_y); +- y = dst_y; +- inc = 1; +- if (dst_y > src_y) { +- /* copy backwards */ +- src_row += pitch * (h-1); +- dst_row += pitch * (h-1); +- pitch = -pitch; +- y = dst_y + h - 1; +- inc = -1; +- } +- w_lim = w - (VNC_DIRTY_PIXELS_PER_BIT - (dst_x % VNC_DIRTY_PIXELS_PER_BIT)); +- if (w_lim < 0) { +- w_lim = w; +- } else { +- w_lim = w - (w_lim % VNC_DIRTY_PIXELS_PER_BIT); +- } +- for (i = 0; i < h; i++) { +- for (x = 0; x <= w_lim; +- x += s, src_row += cmp_bytes, dst_row += cmp_bytes) { +- if (x == w_lim) { +- if ((s = w - w_lim) == 0) +- break; +- } else if (!x) { +- s = (VNC_DIRTY_PIXELS_PER_BIT - +- (dst_x % VNC_DIRTY_PIXELS_PER_BIT)); +- s = MIN(s, w_lim); +- } else { +- s = VNC_DIRTY_PIXELS_PER_BIT; +- } +- cmp_bytes = s * VNC_SERVER_FB_BYTES; +- if (memcmp(src_row, dst_row, cmp_bytes) == 0) +- continue; +- memmove(dst_row, src_row, cmp_bytes); +- QTAILQ_FOREACH(vs, &vd->clients, next) { +- if (!vnc_has_feature(vs, VNC_FEATURE_COPYRECT)) { +- set_bit(((x + dst_x) / VNC_DIRTY_PIXELS_PER_BIT), +- vs->dirty[y]); +- } +- } +- } +- src_row += pitch - w * VNC_SERVER_FB_BYTES; +- dst_row += pitch - w * VNC_SERVER_FB_BYTES; +- y += inc; +- } +- +- QTAILQ_FOREACH(vs, &vd->clients, next) { +- if (vnc_has_feature(vs, VNC_FEATURE_COPYRECT)) { +- vnc_copy(vs, src_x, src_y, dst_x, dst_y, w, h); +- } +- } +-} +- + static void vnc_mouse_set(DisplayChangeListener *dcl, + int x, int y, int visible) + { +@@ -883,13 +792,6 @@ static int find_and_clear_dirty_height(struct VncState *vs, + return h; + } + +-static int vnc_update_client_sync(VncState *vs, int has_dirty) +-{ +- int ret = vnc_update_client(vs, has_dirty); +- vnc_jobs_join(vs); +- return ret; +-} +- + static int vnc_update_client(VncState *vs, int has_dirty) + { + if (vs->need_update && vs->csock != -1) { +@@ -2936,7 +2838,6 @@ static void vnc_listen_websocket_read(void *opaque) + static const DisplayChangeListenerOps dcl_ops = { + .dpy_name = "vnc", + .dpy_refresh = vnc_refresh, +- .dpy_gfx_copy = vnc_dpy_copy, + .dpy_gfx_update = vnc_dpy_update, + .dpy_gfx_switch = vnc_dpy_switch, + .dpy_mouse_set = vnc_mouse_set, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cirrus_vga-fix-off-by-one-in-blit_region_is_unsafe.patch b/SOURCES/kvm-cirrus_vga-fix-off-by-one-in-blit_region_is_unsafe.patch new file mode 100644 index 0000000..fb66656 --- /dev/null +++ b/SOURCES/kvm-cirrus_vga-fix-off-by-one-in-blit_region_is_unsafe.patch @@ -0,0 +1,59 @@ +From 8d230a5a57512c84545bd6345775e69b4b3b1983 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:46 +0100 +Subject: [PATCH 03/11] cirrus_vga: fix off-by-one in blit_region_is_unsafe + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 73564 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/7] cirrus_vga: fix off-by-one in blit_region_is_unsafe +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Paolo Bonzini + +The "max" value is being compared with >=, but addr + width points to +the first byte that will _not_ be copied. Laszlo suggested using a +"greater than" comparison, instead of subtracting one like it is +already done above for the height, so that max remains always positive. + +The mistake is "safe"---it will reject some blits, but will never cause +out-of-bounds writes. + +Cc: Gerd Hoffmann +Signed-off-by: Paolo Bonzini +Reviewed-by: Laszlo Ersek +Message-id: 1455121059-18280-1-git-send-email-pbonzini@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit d2ba7ecb348d3b996fcd920cf1ca7b72722c1dfd) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 717ecdb..c42dfcf 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -272,14 +272,14 @@ static bool blit_region_is_unsafe(struct CirrusVGAState *s, + + ((int64_t)s->cirrus_blt_height-1) * pitch; + int32_t max = addr + + s->cirrus_blt_width; +- if (min < 0 || max >= s->vga.vram_size) { ++ if (min < 0 || max > s->vga.vram_size) { + return true; + } + } else { + int64_t max = addr + + ((int64_t)s->cirrus_blt_height-1) * pitch + + s->cirrus_blt_width; +- if (max >= s->vga.vram_size) { ++ if (max > s->vga.vram_size) { + return true; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cleanup-object.h-include-error.h-directly.patch b/SOURCES/kvm-cleanup-object.h-include-error.h-directly.patch new file mode 100644 index 0000000..13d0826 --- /dev/null +++ b/SOURCES/kvm-cleanup-object.h-include-error.h-directly.patch @@ -0,0 +1,52 @@ +From 5d01df56c48d0ef9f08840598a57fa693ac43dcf Mon Sep 17 00:00:00 2001 +Message-Id: <5d01df56c48d0ef9f08840598a57fa693ac43dcf.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:47 +0100 +Subject: [PATCH 23/56] cleanup object.h: include error.h directly + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-24-git-send-email-mst@redhat.com> +Patchwork-id: 56329 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 23/57] cleanup object.h: include error.h directly +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Igor Mammedov + +qapi/error.h is simple enough to be included in qom/object.h +direcly and prepares qom/object.h to use Error typedef. + +Signed-off-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 008e05662ae5ff314b2b8462508ffd4b40503369) +--- + include/qom/object.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + include/qom/object.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/qom/object.h b/include/qom/object.h +index 23fc048..c37f3ca 100644 +--- a/include/qom/object.h ++++ b/include/qom/object.h +@@ -18,9 +18,9 @@ + #include + #include + #include "qemu/queue.h" ++#include "qapi/error.h" + + struct Visitor; +-struct Error; + + struct TypeImpl; + typedef struct TypeImpl *Type; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-cleanup-trace-events.pl-New.patch b/SOURCES/kvm-cleanup-trace-events.pl-New.patch new file mode 100644 index 0000000..ad9c9e3 --- /dev/null +++ b/SOURCES/kvm-cleanup-trace-events.pl-New.patch @@ -0,0 +1,96 @@ +From 5fde31188fab75d48e9a3d508ac8f9088e09bf3d Mon Sep 17 00:00:00 2001 +Message-Id: <5fde31188fab75d48e9a3d508ac8f9088e09bf3d.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:50 +0100 +Subject: [PATCH 09/16] cleanup-trace-events.pl: New + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56112 +O-Subject: [PATCH 7.0 qemu-kvm 1/7] cleanup-trace-events.pl: New +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Simple script to drop unused events and fix up source file comments. +The next few commits put it to use. + +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f0c03c8cf6184f25ba91449c1ff77e5e006ce514) +--- + scripts/cleanup-trace-events.pl | 51 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + create mode 100755 scripts/cleanup-trace-events.pl + +Signed-off-by: Michal Novotny +--- + scripts/cleanup-trace-events.pl | 51 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + create mode 100755 scripts/cleanup-trace-events.pl + +diff --git a/scripts/cleanup-trace-events.pl b/scripts/cleanup-trace-events.pl +new file mode 100755 +index 0000000..cffbf16 +--- /dev/null ++++ b/scripts/cleanup-trace-events.pl +@@ -0,0 +1,51 @@ ++#!/usr/bin/perl ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# Authors: ++# Markus Armbruster ++# ++# This work is licensed under the terms of the GNU GPL, version 2 or ++# later. See the COPYING file in the top-level directory. ++ ++# Usage: cleanup-trace-events.pl trace-events ++# ++# Print cleaned up trace-events to standard output. ++ ++use warnings; ++use strict; ++ ++my $buf = ''; ++my %seen = (); ++ ++sub out { ++ print $buf; ++ $buf = ''; ++ %seen = (); ++} ++ ++while (<>) { ++ if (/^(disable )?([a-z_0-9]+)\(/) { ++ open GREP, '-|', 'git', 'grep', '-l', "trace_$2" ++ or die "run git grep: $!"; ++ my $fname; ++ while ($fname = ) { ++ chomp $fname; ++ next if $seen{$fname} || $fname eq 'trace-events'; ++ $seen{$fname} = 1; ++ $buf = "# $fname\n" . $buf; ++ } ++ unless (close GREP) { ++ die "close git grep: $!" ++ if $!; ++ next; ++ } ++ } elsif (/^# ([^ ]*\.[ch])$/) { ++ out; ++ next; ++ } elsif (!/^#|^$/) { ++ warn "unintelligible line"; ++ } ++ $buf .= $_; ++} ++ ++out; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-commit-Remove-unused-check.patch b/SOURCES/kvm-commit-Remove-unused-check.patch new file mode 100644 index 0000000..1dd2205 --- /dev/null +++ b/SOURCES/kvm-commit-Remove-unused-check.patch @@ -0,0 +1,53 @@ +From 1d78e14b1774a799db6336a4381f91a7af295f38 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:08:03 +0100 +Subject: [PATCH 20/34] commit: Remove unused check + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-19-git-send-email-famz@redhat.com> +Patchwork-id: 56780 +O-Subject: [RHEL-7 qemu-kvm PATCH 18/18] commit: Remove unused check +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +We support top == active for commit now, remove the check and add an +assertion here. + +Signed-off-by: Fam Zheng +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 18da7f94cdce130f2a71387de4980ffa817181a1) +Signed-off-by: Fam Zheng +--- + block/commit.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/commit.c | 8 +------- + 1 files changed, 1 insertions(+), 7 deletions(-) + +diff --git a/block/commit.c b/block/commit.c +index d237729..e3e395d 100644 +--- a/block/commit.c ++++ b/block/commit.c +@@ -198,13 +198,7 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, + return; + } + +- /* Once we support top == active layer, remove this check */ +- if (top == bs) { +- error_setg(errp, +- "Top image as the active layer is currently unsupported"); +- return; +- } +- ++ assert(top != bs); + if (top == base) { + error_setg(errp, "Invalid files for merge: top and base are the same"); + return; +-- +1.7.1 + diff --git a/SOURCES/kvm-commit-Support-commit-active-layer.patch b/SOURCES/kvm-commit-Support-commit-active-layer.patch new file mode 100644 index 0000000..7ed4296 --- /dev/null +++ b/SOURCES/kvm-commit-Support-commit-active-layer.patch @@ -0,0 +1,113 @@ +From b55e2f4749d2e4ebfc7dfc8782de85391c1026e8 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:08:00 +0100 +Subject: [PATCH 17/34] commit: Support commit active layer + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-16-git-send-email-famz@redhat.com> +Patchwork-id: 56777 +O-Subject: [RHEL-7 qemu-kvm PATCH 15/18] commit: Support commit active layer +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +If active is top, it will be mirrored to base, (with block/mirror.c +code), then the image is switched when user completes the block job. + +QMP documentation is updated. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 20a63d2cec838c2dde4d246c4d7abe747d9b7a11) +Signed-off-by: Fam Zheng +--- + block/mirror.c | 11 +++++++++++ + blockdev.c | 9 +++++++-- + qapi-schema.json | 5 +++-- + 3 files changed, 21 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 11 +++++++++++ + blockdev.c | 9 +++++++-- + qapi-schema.json | 5 +++-- + 3 files changed, 21 insertions(+), 4 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 01fe379..6e1f9b1 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -478,6 +478,13 @@ immediate_exit: + bdrv_reopen(s->target, bdrv_get_flags(s->common.bs), NULL); + } + bdrv_swap(s->target, s->common.bs); ++ if (s->common.driver->job_type == BLOCK_JOB_TYPE_COMMIT) { ++ /* drop the bs loop chain formed by the swap: break the loop then ++ * trigger the unref from the top one */ ++ BlockDriverState *p = s->base->backing_hd; ++ s->base->backing_hd = NULL; ++ bdrv_unref(p); ++ } + } + bdrv_unref(s->target); + block_job_completed(&s->common, ret); +@@ -620,6 +627,10 @@ void commit_active_start(BlockDriverState *bs, BlockDriverState *base, + BlockDriverCompletionFunc *cb, + void *opaque, Error **errp) + { ++ if (bdrv_reopen(base, bs->open_flags, errp)) { ++ return; ++ } ++ bdrv_ref(base); + mirror_start_job(bs, base, speed, 0, 0, + on_error, on_error, cb, opaque, errp, + &commit_active_job_driver, false, base); +diff --git a/blockdev.c b/blockdev.c +index d795af2..33a5f5f 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -1510,8 +1510,13 @@ void qmp_block_commit(const char *device, + return; + } + +- commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs, +- &local_err); ++ if (top_bs == bs) { ++ commit_active_start(bs, base_bs, speed, on_error, block_job_cb, ++ bs, &local_err); ++ } else { ++ commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs, ++ &local_err); ++ } + if (local_err != NULL) { + error_propagate(errp, local_err); + return; +diff --git a/qapi-schema.json b/qapi-schema.json +index b0bd53c..a783e8e 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1837,9 +1837,11 @@ + # + # @top: The file name of the backing image within the image chain, + # which contains the topmost data to be committed down. +-# Note, the active layer as 'top' is currently unsupported. + # + # If top == base, that is an error. ++# If top == active, the job will not be completed by itself, ++# user needs to complete the job with the block-job-complete ++# command after getting the ready event. (Since 2.0) + # + # + # @speed: #optional the maximum speed, in bytes per second +@@ -1849,7 +1851,6 @@ + # If @device does not exist, DeviceNotFound + # If image commit is not supported by this device, NotSupported + # If @base or @top is invalid, a generic error is returned +-# If @top is the active layer, or omitted, a generic error is returned + # If @speed is invalid, InvalidParameter + # + # Since: 1.3 +-- +1.7.1 + diff --git a/SOURCES/kvm-configure-Add-handling-code-for-AArch64-targets.patch b/SOURCES/kvm-configure-Add-handling-code-for-AArch64-targets.patch new file mode 100644 index 0000000..e88585a --- /dev/null +++ b/SOURCES/kvm-configure-Add-handling-code-for-AArch64-targets.patch @@ -0,0 +1,68 @@ +From de5ec0b147e227e4429033070e432f7b5b6b749f Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 2 Jun 2015 13:21:51 +0200 +Subject: [PATCH 4/8] configure: Add handling code for AArch64 targets + +Message-id: <33907397e8692eaafe8700f27021516eab227257.1433250807.git.mrezanin@redhat.com> +Patchwork-id: 65306 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/4] configure: Add handling code for AArch64 targets +Bugzilla: 1217850 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Wei Huang +RH-Acked-by: Jeff Nelson + +From: Alexander Graf + +Add the necessary code to configure to handle AArch64 as a target +CPU (we already have some code for supporting it as host). Note +that this doesn't enable the AArch64 targets yet. + +Signed-off-by: Alexander Graf +Signed-off-by: John Rigby +Signed-off-by: Peter Maydell +Message-id: 1378235544-22290-23-git-send-email-peter.maydell@linaro.org +Message-id: 1368505980-17151-12-git-send-email-john.rigby@linaro.org +[PMM: + * don't need to set TARGET_ABI_DIR to aarch64 as that is the default + * don't build nwfpe -- this is 32 bit legacy only + * rewrite commit message + * add aarch64 to the list of "fdt required" targets +] +Signed-off-by: Peter Maydell +(cherry-picked from 6a49fa95c98cd155f7aaf48e5c6fa6bb6adea862) +Signed-off-by: Miroslav Rezanina + +Signed-off-by: Miroslav Rezanina +--- + configure | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/configure b/configure +index 4f63345..7cc7725 100755 +--- a/configure ++++ b/configure +@@ -2650,7 +2650,7 @@ fi + fdt_required=no + for target in $target_list; do + case $target in +- arm*-softmmu|ppc*-softmmu|microblaze*-softmmu) ++ aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu) + fdt_required=yes + ;; + esac +@@ -4383,6 +4383,11 @@ case "$target_arch2" in + target_nptl="yes" + gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" + ;; ++ aarch64) ++ TARGET_BASE_ARCH=arm ++ bflt="yes" ++ gdb_xml_files="aarch64-core.xml" ++ ;; + cris) + target_nptl="yes" + ;; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-configure-Add-support-for-tcmalloc.patch b/SOURCES/kvm-configure-Add-support-for-tcmalloc.patch new file mode 100644 index 0000000..73fbf0c --- /dev/null +++ b/SOURCES/kvm-configure-Add-support-for-tcmalloc.patch @@ -0,0 +1,129 @@ +From 7016ef484a8150337f22f45f694c0901c5ae0a26 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 26 Jun 2015 11:23:50 +0200 +Subject: [PATCH 10/10] configure: Add support for tcmalloc + +Message-id: <1435317831-6743-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 66518 +O-Subject: [RHEL7.2 qemu-kvm PATCH] configure: Add support for tcmalloc +Bugzilla: 1213881 +RH-Acked-by: Jeff Nelson +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +This adds "--enable-tcmalloc" and "--disable-tcmalloc" to allow linking +to libtcmalloc from gperftools. + +tcmalloc is a malloc implementation that works well with threads and is +fast, so it is good for performance. + +It is disabled by default, because the MALLOC_PERTURB_ flag we use in +tests doesn't work with tcmalloc. However we can enable tcmalloc +specific heap checker and profilers later. + +An IOPS gain can be observed with virtio-blk-dataplane, other parts of +QEMU will directly benefit from it as well: + +========================================================== + glibc malloc +---------------------------------------------------------- +rw bs iodepth bw iops latency +read 4k 1 150 38511 24 +---------------------------------------------------------- + +========================================================== + tcmalloc +---------------------------------------------------------- +rw bs iodepth bw iops latency +read 4k 1 156 39969 23 +---------------------------------------------------------- + +Signed-off-by: Fam Zheng +Message-Id: <1427338992-27057-1-git-send-email-famz@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2847b46958ab0bd604e1b3fcafba0f5ba4375833) +Signed-off-by: Miroslav Rezanina + +Conflicts: + configure + +Note on the RHEL7 part: + malloc(1) would fail to compile due to -D_FORTIFY_SOURCE=2 that + configure passes in --extra-cflags. The flag enables warnings + for unused result of malloc. However, QEMU already knows about + -D_FORTIFY_SOURCE and enables it after configure tests are run. + So, remove it from --extra-cflags and trust configure to do the + right thing. +--- + configure | 24 ++++++++++++++++++++++++ + redhat/qemu-kvm.spec.template | 10 ++++++++++ + 2 files changed, 34 insertions(+) + +diff --git a/configure b/configure +index 85dbfb0..5877e82 100755 +--- a/configure ++++ b/configure +@@ -250,6 +250,7 @@ libssh2="" + live_block_ops="yes" + live_block_migration="no" + vhdx="" ++tcmalloc="no" + + # parse CC options first + for opt do +@@ -972,6 +973,10 @@ for opt do + ;; + --disable-vhdx) vhdx="no" + ;; ++ --disable-tcmalloc) tcmalloc="no" ++ ;; ++ --enable-tcmalloc) tcmalloc="yes" ++ ;; + *) echo "ERROR: unknown option $opt"; show_help="yes" + ;; + esac +@@ -1253,6 +1258,8 @@ echo " --disable-live-block-migration disable live block migration" + echo " --enable-live-block-migration enable live block migration" + echo " --disable-vhdx disables support for the Microsoft VHDX image format" + echo " --enable-vhdx enable support for the Microsoft VHDX image format" ++echo " --disable-tcmalloc disable tcmalloc support" ++echo " --enable-tcmalloc enable tcmalloc support" + echo "" + echo "NOTE: The object files are built at the place where configure is launched" + exit 1 +@@ -2878,6 +2885,22 @@ if compile_prog "" "" ; then + fi + + ########################################## ++# tcmalloc probe ++ ++if test "$tcmalloc" = "yes" ; then ++ cat > $TMPC << EOF ++#include ++int main(void) { malloc(1); return 0; } ++EOF ++ ++ if compile_prog "" "-ltcmalloc" ; then ++ LIBS="-ltcmalloc $LIBS" ++ else ++ feature_not_found "tcmalloc" "install gperftools devel" ++ fi ++fi ++ ++########################################## + # signalfd probe + signalfd="no" + cat > $TMPC << EOF +@@ -3744,6 +3767,7 @@ echo "Live block migration $live_block_migration" + echo "vhdx $vhdx" + echo "lzo support $lzo" + echo "snappy support $snappy" ++echo "tcmalloc support $tcmalloc" + + if test "$sdl_too_old" = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-configure-Fix-bugs-preventing-Ceph-inclusion.patch b/SOURCES/kvm-configure-Fix-bugs-preventing-Ceph-inclusion.patch new file mode 100644 index 0000000..1e2dd37 --- /dev/null +++ b/SOURCES/kvm-configure-Fix-bugs-preventing-Ceph-inclusion.patch @@ -0,0 +1,59 @@ +From af94bc39b8a4ce40083d15f660e147fb6a62b404 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 20 Mar 2014 10:59:23 +0100 +Subject: [PATCH] configure: Fix bugs preventing Ceph inclusion + +RH-Author: Kevin Wolf +Message-id: <1395313163-1002-1-git-send-email-kwolf@redhat.com> +Patchwork-id: 58164 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] configure: Fix bugs preventing Ceph inclusion +Bugzilla: 1078809 +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Ademar de Souza Reis Jr. + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1078809 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7230126 +Upstream status: Fix for downstream-only code + +CONFIG_CEPH_SUPPORT=y never really ended up being set, neither by +default nor with an explicit --enable-ceph-support. + +Signed-off-by: Kevin Wolf +--- + configure | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + configure | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/configure b/configure +index 3f68220..0ac437c 100755 +--- a/configure ++++ b/configure +@@ -952,9 +952,9 @@ for opt do + ;; + --enable-live-block-migration) live_block_migration="yes" + ;; +- --disable-ceph-support) ceph_support=="no" ++ --disable-ceph-support) ceph_support="no" + ;; +- --enable-ceph-support) ceph_support=="yes" ++ --enable-ceph-support) ceph_support="yes" + ;; + --enable-vhdx) vhdx="yes" + ;; +@@ -4039,7 +4039,7 @@ if test "$live_block_migration" = "yes" ; then + echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak + fi + +-if test "ceph_support" = "yes"; then ++if test "$ceph_support" = "yes"; then + echo "CONFIG_CEPH_SUPPORT=y" >> $config_host_mak + fi + +-- +1.7.1 + diff --git a/SOURCES/kvm-configure-Require-libfdt-for-arm-ppc-microblaze-soft.patch b/SOURCES/kvm-configure-Require-libfdt-for-arm-ppc-microblaze-soft.patch new file mode 100644 index 0000000..2993e1b --- /dev/null +++ b/SOURCES/kvm-configure-Require-libfdt-for-arm-ppc-microblaze-soft.patch @@ -0,0 +1,69 @@ +From 72b1305cb8cbcd0847a435326c7fa90273ac9c56 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 2 Jun 2015 13:21:50 +0200 +Subject: [PATCH 3/8] configure: Require libfdt for arm, ppc, microblaze + softmmu targets + +Message-id: +Patchwork-id: 65305 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/4] configure: Require libfdt for arm, ppc, microblaze softmmu targets +Bugzilla: 1217850 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Wei Huang +RH-Acked-by: Jeff Nelson + +From: Peter Maydell + +A number of our softmmu targets (PPC, ARM, Microblaze) now more or +less require flattened device tree support for various board models +to work correctly. Make libfdt mandatory if the target list includes +these, rather than building unhelpful half-functional binaries. + +Signed-off-by: Peter Maydell +Reviewed-by: Edgar E. Iglesias +Reviewed-by: Peter Crosthwaite +Tested-by: Edgar E. Iglesias +Message-id: 1369409217-7553-2-git-send-email-peter.maydell@linaro.org +(cherry-picked from e169e1e1ae1e75c522f932554890fb0f2f3e9999) +Signed-off-by: Miroslav Rezanina + +Signed-off-by: Miroslav Rezanina +--- + configure | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/configure b/configure +index 1583359..4f63345 100755 +--- a/configure ++++ b/configure +@@ -2645,6 +2645,26 @@ fi + + ########################################## + # fdt probe ++# fdt support is mandatory for at least some target architectures, ++# so insist on it if we're building those system emulators. ++fdt_required=no ++for target in $target_list; do ++ case $target in ++ arm*-softmmu|ppc*-softmmu|microblaze*-softmmu) ++ fdt_required=yes ++ ;; ++ esac ++done ++ ++if test "$fdt_required" = "yes"; then ++ if test "$fdt" = "no"; then ++ error_exit "fdt disabled but some requested targets require it." \ ++ "You can turn off fdt only if you also disable all the system emulation" \ ++ "targets which need it (by specifying a cut down --target-list)." ++ fi ++ fdt=yes ++fi ++ + if test "$fdt" != "no" ; then + fdt_libs="-lfdt" + cat > $TMPC << EOF +-- +1.8.3.1 + diff --git a/SOURCES/kvm-configure-add-option-to-disable-fstack-protect.patch b/SOURCES/kvm-configure-add-option-to-disable-fstack-protect.patch new file mode 100644 index 0000000..bc81295 --- /dev/null +++ b/SOURCES/kvm-configure-add-option-to-disable-fstack-protect.patch @@ -0,0 +1,126 @@ +From d43267efbe5634bfe9c8ca9cccd3d3d0a36759ae Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 5 Feb 2014 15:02:19 +0100 +Subject: [PATCH 09/28] configure: add option to disable -fstack-protect + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 57118 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] configure: add option to disable -fstack-protect +Bugzilla: 1044182 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Markus Armbruster + +From: Miroslav Rezanina + +upstream: submitted +(Do not wait for apply to get to RHEL 7.0 before Snapshot 8) + +The -fstack-protector flag family is useful for ensuring safety and for +debugging, but has a performance impact. Here are some boot time comparisons +of the various versions of -fstack-protector using qemu-system-arm on an +x86_64 host: + # -fstack-protector-all + Startup finished in 1.810s (kernel) + 12.331s (initrd) + 49.016s +(userspace) = 1min 3.159s + Startup finished in 1.801s (kernel) + 12.287s (initrd) + 47.925s +(userspace) = 1min 2.013s + Startup finished in 1.812s (kernel) + 12.302s (initrd) + 47.995s +(userspace) = 1min 2.111s + + # -fstack-protector-strong + Startup finished in 1.744s (kernel) + 11.223s (initrd) + 44.688s +(userspace) = 57.657s + Startup finished in 1.721s (kernel) + 11.222s (initrd) + 44.194s +(userspace) = 57.138s + Startup finished in 1.693s (kernel) + 11.250s (initrd) + 44.426s +(userspace) = 57.370s + + # -fstack-protector + Startup finished in 1.705s (kernel) + 11.409s (initrd) + 43.563s +(userspace) = 56.677s + Startup finished in 1.877s (kernel) + 11.137s (initrd) + 43.719s +(userspace) = 56.734s + Startup finished in 1.708s (kernel) + 11.141s (initrd) + 43.628s +(userspace) = 56.478s + + # no stack protector + Startup finished in 1.743s (kernel) + 11.190s (initrd) + 43.709s +(userspace) = 56.643s + Startup finished in 1.763s (kernel) + 11.216s (initrd) + 43.767s +(userspace) = 56.747s + Startup finished in 1.711s (kernel) + 11.283s (initrd) + 43.878s +(userspace) = 56.873s + +This patch introduces a configure option to disable the stack protector +entirely, and conditional stack protector flag selection (in order, based on +availability): -fstack-protector-strong, -fstack-protector, no stack protector. + +Signed-off-by: Steven Noonan +Cc: Anthony Liguori +Reviewed-by: Stefan Weil + +Signed-off-by: Miroslav Rezanina +--- + configure | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + configure | 18 +++++++++++++++--- + 1 files changed, 15 insertions(+), 3 deletions(-) + +diff --git a/configure b/configure +index b892b88..3f68220 100755 +--- a/configure ++++ b/configure +@@ -134,6 +134,7 @@ audio_win_int="" + cc_i386=i386-pc-linux-gnu-gcc + libs_qga="" + debug_info="yes" ++stack_protector="" + + # Don't accept a target_list environment variable. + unset target_list +@@ -839,6 +840,10 @@ for opt do + ;; + --disable-werror) werror="no" + ;; ++ --enable-stack-protector) stack_protector="yes" ++ ;; ++ --disable-stack-protector) stack_protector="no" ++ ;; + --disable-curses) curses="no" + ;; + --enable-curses) curses="yes" +@@ -1115,6 +1120,7 @@ echo " --enable-sparse enable sparse checker" + echo " --disable-sparse disable sparse checker (default)" + echo " --disable-strip disable stripping binaries" + echo " --disable-werror disable compilation abort on warning" ++echo " --disable-stack-protector disable compiler-provided stack protection" + echo " --disable-sdl disable SDL" + echo " --enable-sdl enable SDL" + echo " --disable-gtk disable gtk UI" +@@ -1296,9 +1302,15 @@ for flag in $gcc_flags; do + fi + done + +-if compile_prog "-Werror -fstack-protector-all" "" ; then +- QEMU_CFLAGS="$QEMU_CFLAGS -fstack-protector-all" +- LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,-fstack-protector-all" ++if test "$stack_protector" != "no" ; then ++ gcc_flags="-fstack-protector-strong -fstack-protector" ++ for flag in $gcc_flags; do ++ if compile_prog "-Werror $flag" "" ; then ++ QEMU_CFLAGS="$QEMU_CFLAGS $flag" ++ LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag" ++ break ++ fi ++ done + fi + + # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and +-- +1.7.1 + diff --git a/SOURCES/kvm-configure-don-t-save-any-fixed-local_statedir-for-wi.patch b/SOURCES/kvm-configure-don-t-save-any-fixed-local_statedir-for-wi.patch new file mode 100644 index 0000000..8edba15 --- /dev/null +++ b/SOURCES/kvm-configure-don-t-save-any-fixed-local_statedir-for-wi.patch @@ -0,0 +1,82 @@ +From a7b1e640330bf53d45d9d68af84df13917907c35 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 14:03:24 +0200 +Subject: [PATCH 03/28] configure: don't save any fixed local_statedir for win32 + +RH-Author: Laszlo Ersek +Message-id: <1375279407-13573-4-git-send-email-lersek@redhat.com> +Patchwork-id: 52865 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/6] configure: don't save any fixed local_statedir for win32 +Bugzilla: 964304 +RH-Acked-by: Michal Novotny +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Paolo Bonzini + +... because now we can get the dynamic value with +qemu_get_local_state_pathname(). + +The only user of the fixed value was the guest agent, which we've moved to +qemu_get_local_state_pathname() in the previous patch. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael Roth +(cherry picked from commit 5a699bbbf300902141d2458682d05cd310d7a07f) +--- + configure | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + configure | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/configure b/configure +index a71e8a1..02e483d 100755 +--- a/configure ++++ b/configure +@@ -588,7 +588,7 @@ EOF + qemu_docdir="\${prefix}" + bindir="\${prefix}" + sysconfdir="\${prefix}" +- local_statedir="\${prefix}" ++ local_statedir= + confsuffix="" + libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga" + fi +@@ -1085,7 +1085,7 @@ echo " --docdir=PATH install documentation in PATH$confsuffix" + echo " --bindir=PATH install binaries in PATH" + echo " --libdir=PATH install libraries in PATH" + echo " --sysconfdir=PATH install config in PATH$confsuffix" +-echo " --localstatedir=PATH install local state in PATH" ++echo " --localstatedir=PATH install local state in PATH (set at runtime on win32)" + echo " --with-confsuffix=SUFFIX suffix for QEMU data inside datadir and sysconfdir [$confsuffix]" + echo " --enable-debug-tcg enable TCG debugging" + echo " --disable-debug-tcg disable TCG debugging (default)" +@@ -3495,10 +3495,12 @@ echo "library directory `eval echo $libdir`" + echo "libexec directory `eval echo $libexecdir`" + echo "include directory `eval echo $includedir`" + echo "config directory `eval echo $sysconfdir`" +-echo "local state directory `eval echo $local_statedir`" + if test "$mingw32" = "no" ; then ++echo "local state directory `eval echo $local_statedir`" + echo "Manual directory `eval echo $mandir`" + echo "ELF interp prefix $interp_prefix" ++else ++echo "local state directory queried at runtime" + fi + echo "Source path $source_path" + echo "C compiler $cc" +@@ -3620,7 +3622,9 @@ echo "sysconfdir=$sysconfdir" >> $config_host_mak + echo "qemu_confdir=$qemu_confdir" >> $config_host_mak + echo "qemu_datadir=$qemu_datadir" >> $config_host_mak + echo "qemu_docdir=$qemu_docdir" >> $config_host_mak +-echo "qemu_localstatedir=$local_statedir" >> $config_host_mak ++if test "$mingw32" = "no" ; then ++ echo "qemu_localstatedir=$local_statedir" >> $config_host_mak ++fi + echo "qemu_helperdir=$libexecdir" >> $config_host_mak + echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak + echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak +-- +1.7.1 + diff --git a/SOURCES/kvm-configure-make-iasl-option-actually-work.patch b/SOURCES/kvm-configure-make-iasl-option-actually-work.patch new file mode 100644 index 0000000..6b7d9fd --- /dev/null +++ b/SOURCES/kvm-configure-make-iasl-option-actually-work.patch @@ -0,0 +1,60 @@ +From c30d1f4f94d18b19a1f17deb79b491e794e7e5a5 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Sun, 12 Jan 2014 09:40:43 +0100 +Subject: [PATCH 07/16] configure: make --iasl option actually work + +RH-Author: Michael S. Tsirkin +Message-id: <1389519492-6867-4-git-send-email-mst@redhat.com> +Patchwork-id: 56635 +O-Subject: [PATCH qemu-kvm RHEL7.0 3/4] configure: make --iasl option actually work +Bugzilla: 1034876 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +--iasl option was added to CC option parsing section by mistake, +it's not effective there and attempts to use cause +an 'unknown option' error. + +Fix this up. + +Tested-by: Marcel Apfelbaum +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit e007dbece5fc4e55e10116c6cb42753e35a945bf) + +Conflicts: + configure +--- + configure | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + configure | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure b/configure +index 5161fec..b892b88 100755 +--- a/configure ++++ b/configure +@@ -255,8 +255,6 @@ for opt do + ;; + --cc=*) CC="$optarg" + ;; +- --iasl=*) iasl="$optarg" +- ;; + --source-path=*) source_path="$optarg" + ;; + --cpu=*) cpu="$optarg" +@@ -618,6 +616,8 @@ for opt do + ;; + --host-cc=*) host_cc="$optarg" + ;; ++ --iasl=*) iasl="$optarg" ++ ;; + --objcc=*) objcc="$optarg" + ;; + --make=*) make="$optarg" +-- +1.7.1 + diff --git a/SOURCES/kvm-configure-permit-compilation-on-arm-aarch64.patch b/SOURCES/kvm-configure-permit-compilation-on-arm-aarch64.patch new file mode 100644 index 0000000..73bf945 --- /dev/null +++ b/SOURCES/kvm-configure-permit-compilation-on-arm-aarch64.patch @@ -0,0 +1,67 @@ +From f4e64f793b273e319587b9052c9f8cde77b6db52 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 2 Jun 2015 13:21:52 +0200 +Subject: [PATCH 5/8] configure: permit compilation on arm aarch64 + +Message-id: <40b5931574ca633cff2c4a27507680b321009906.1433250807.git.mrezanin@redhat.com> +Patchwork-id: 65307 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/4] configure: permit compilation on arm aarch64 +Bugzilla: 1217850 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Wei Huang +RH-Acked-by: Jeff Nelson + +From: Claudio Fontana + +support compiling on aarch64. + +Reviewed-by: Peter Maydell +Signed-off-by: Claudio Fontana +Reviewed-by: Richard Henderson +Message-id: 51A5C5ED.90103@huawei.com +Signed-off-by: Peter Maydell +(cherry-picked from 1f0803137df68c1fc02ebd0c5ec2e7aad54bbf3b) +Signed-off-by: Miroslav Rezanina + +Signed-off-by: Miroslav Rezanina +--- + configure | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/configure b/configure +index 7cc7725..85dbfb0 100755 +--- a/configure ++++ b/configure +@@ -394,6 +394,8 @@ elif check_define __s390__ ; then + fi + elif check_define __arm__ ; then + cpu="arm" ++elif check_define __aarch64__ ; then ++ cpu="aarch64" + elif check_define __hppa__ ; then + cpu="hppa" + else +@@ -416,6 +418,9 @@ case "$cpu" in + armv*b|armv*l|arm) + cpu="arm" + ;; ++ aarch64) ++ cpu="aarch64" ++ ;; + hppa|parisc|parisc64) + cpu="hppa" + ;; +@@ -4306,6 +4311,9 @@ if test "$linux" = "yes" ; then + s390x) + linux_arch=s390 + ;; ++ aarch64) ++ linux_arch=arm64 ++ ;; + *) + # For most CPUs the kernel architecture name and QEMU CPU name match. + linux_arch="$cpu" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-console-minimal-hotplug-suport.patch b/SOURCES/kvm-console-minimal-hotplug-suport.patch new file mode 100644 index 0000000..4f19619 --- /dev/null +++ b/SOURCES/kvm-console-minimal-hotplug-suport.patch @@ -0,0 +1,194 @@ +From 8d537fb77d744265a23b0eda33da269ed672e549 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:19 +0200 +Subject: [PATCH 11/17] console: minimal hotplug suport + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-6-git-send-email-tgupta@redhat.com> +Patchwork-id: 80914 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 05/11] console: minimal hotplug suport +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +This patch allows to unbind devices from QemuConsoles, using the new +graphic_console_close() function. The QemuConsole will show a static +display then, saying the device was unplugged. When re-plugging a +display later on the QemuConsole will be reused. + +Eventually we will allocate and release QemuConsoles dynamically at some +point in the future, that'll need more infrastructure though to notify +user interfaces (gtk, sdl, spice, ...) about QemuConsoles coming and +going. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Alex Williamson + +(cherry picked from 9588d67e72f853349dbb318503368ad01b12feb6) + +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-kvm does not have ui/trace-events, so adding traces in + trace_events. + + qemu-kvm does not have graphic_console_set_hwops() function, + so manually setting the ops. +--- + include/ui/console.h | 3 ++- + trace-events | 2 ++ + ui/console.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++---- + 3 files changed, 74 insertions(+), 6 deletions(-) + +diff --git a/include/ui/console.h b/include/ui/console.h +index 7f5fa66..e23f809 100644 +--- a/include/ui/console.h ++++ b/include/ui/console.h +@@ -275,13 +275,14 @@ typedef struct GraphicHwOps { + QemuConsole *graphic_console_init(DeviceState *dev, + const GraphicHwOps *ops, + void *opaque); +- ++void graphic_console_close(QemuConsole *con); + void graphic_hw_update(QemuConsole *con); + void graphic_hw_invalidate(QemuConsole *con); + void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata); + + QemuConsole *qemu_console_lookup_by_index(unsigned int index); + QemuConsole *qemu_console_lookup_by_device(DeviceState *dev); ++QemuConsole *qemu_console_lookup_unused(void); + bool qemu_console_is_visible(QemuConsole *con); + bool qemu_console_is_graphic(QemuConsole *con); + bool qemu_console_is_fixedsize(QemuConsole *con); +diff --git a/trace-events b/trace-events +index 8c3ce0c..7b7aad1 100644 +--- a/trace-events ++++ b/trace-events +@@ -994,6 +994,8 @@ dma_map_wait(void *dbs) "dbs=%p" + + # ui/console.c + console_gfx_new(void) "" ++console_gfx_reuse(int index) "%d" ++console_gfx_close(int index) "%d" + console_txt_new(int w, int h) "%dx%d" + console_select(int nr) "%d" + console_refresh(int interval) "interval %d ms" +diff --git a/ui/console.c b/ui/console.c +index c14a0bc..cc319a9 100644 +--- a/ui/console.c ++++ b/ui/console.c +@@ -1246,11 +1246,16 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type) + } + s->ds = ds; + s->console_type = console_type; +- if (console_type != GRAPHIC_CONSOLE) { ++ if (console_type != GRAPHIC_CONSOLE || qdev_hotplug) { + s->index = nb_consoles; + consoles[nb_consoles++] = s; + } else { +- /* HACK: Put graphical consoles before text consoles. */ ++ /* ++ * HACK: Put graphical consoles before text consoles. ++ * ++ * Only do that for coldplugged devices. After initial device ++ * initialization we will not renumber the consoles any more. ++ */ + for (i = nb_consoles; i > 0; i--) { + if (consoles[i - 1]->console_type == GRAPHIC_CONSOLE) + break; +@@ -1610,21 +1615,59 @@ QemuConsole *graphic_console_init(DeviceState *dev, + int height = 480; + QemuConsole *s; + DisplayState *ds; ++ DisplaySurface *surface; + + ds = get_alloc_displaystate(); +- trace_console_gfx_new(); +- s = new_console(ds, GRAPHIC_CONSOLE); ++ s = qemu_console_lookup_unused(); ++ if (s) { ++ trace_console_gfx_reuse(s->index); ++ if (s->surface) { ++ width = surface_width(s->surface); ++ height = surface_height(s->surface); ++ } ++ } else { ++ trace_console_gfx_new(); ++ s = new_console(ds, GRAPHIC_CONSOLE); ++ } ++ + s->hw_ops = hw_ops; + s->hw = opaque; ++ + if (dev) { + object_property_set_link(OBJECT(s), OBJECT(dev), + "device", &local_err); + } + +- s->surface = qemu_create_message_surface(width, height, noinit); ++ surface = qemu_create_message_surface(width, height, noinit); ++ dpy_gfx_replace_surface(s, surface); + return s; + } + ++static const GraphicHwOps unused_ops = { ++ /* no callbacks */ ++}; ++ ++void graphic_console_close(QemuConsole *con) ++{ ++ DisplaySurface *surface; ++ int width = 640; ++ int height = 480; ++ ++ if (con->surface) { ++ width = surface_width(con->surface); ++ height = surface_height(con->surface); ++ } ++ ++ trace_console_gfx_close(con->index); ++ object_property_set_link(OBJECT(con), NULL, "device", &error_abort); ++ ++ con->hw_ops = &unused_ops; ++ con->hw = NULL; ++ ++ surface = qemu_create_displaysurface(width, height); ++ dpy_gfx_replace_surface(con, surface); ++} ++ + QemuConsole *qemu_console_lookup_by_index(unsigned int index) + { + if (index >= MAX_CONSOLES) { +@@ -1652,6 +1695,28 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev) + return NULL; + } + ++QemuConsole *qemu_console_lookup_unused(void) ++{ ++ Object *obj; ++ int i; ++ ++ for (i = 0; i < nb_consoles; i++) { ++ if (!consoles[i]) { ++ continue; ++ } ++ if (consoles[i]->hw_ops != &unused_ops) { ++ continue; ++ } ++ obj = object_property_get_link(OBJECT(consoles[i]), ++ "device", &error_abort); ++ if (obj != NULL) { ++ continue; ++ } ++ return consoles[i]; ++ } ++ return NULL; ++} ++ + bool qemu_console_is_visible(QemuConsole *con) + { + return (con == active_console) || (con->dcls > 0); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-console-nicer-initial-screen.patch b/SOURCES/kvm-console-nicer-initial-screen.patch new file mode 100644 index 0000000..478e300 --- /dev/null +++ b/SOURCES/kvm-console-nicer-initial-screen.patch @@ -0,0 +1,102 @@ +From 7d82cea3c5aa7abc7942eb63c9ce232e10084bd5 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:18 +0200 +Subject: [PATCH 10/17] console: nicer initial screen + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-5-git-send-email-tgupta@redhat.com> +Patchwork-id: 80915 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 04/11] console: nicer initial screen +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Now that we have a function to create a fancy DisplaySurface with a +message for the user, to handle non-existing graphics hardware, we +can make it more generic and use it for other things too. + +This patch adds a text line to the in initial DisplaySurface, +notifying the user that the display isn't initialized yet by the guest. + +You can see this in action when starting qemu with '-S'. Also when +booting ovmf in qemu (which needs a few moments to initialize itself +before it initializes the vga). + +Signed-off-by: Gerd Hoffmann + +(cherry picked from 521a580d2352ad30086babcabb91e6338e47cf62) + +Signed-off-by: Miroslav Rezanina +--- + ui/console.c | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +diff --git a/ui/console.c b/ui/console.c +index fb08ec0..c14a0bc 100644 +--- a/ui/console.c ++++ b/ui/console.c +@@ -1323,19 +1323,18 @@ DisplaySurface *qemu_create_displaysurface_from(int width, int height, int bpp, + return surface; + } + +-static DisplaySurface *qemu_create_dummy_surface(void) ++static DisplaySurface *qemu_create_message_surface(int w, int h, ++ const char *msg) + { +- static const char msg[] = +- "This VM has no graphic display device."; +- DisplaySurface *surface = qemu_create_displaysurface(640, 480); ++ DisplaySurface *surface = qemu_create_displaysurface(w, h); + pixman_color_t bg = color_table_rgb[0][COLOR_BLACK]; + pixman_color_t fg = color_table_rgb[0][COLOR_WHITE]; + pixman_image_t *glyph; + int len, x, y, i; + + len = strlen(msg); +- x = (640/FONT_WIDTH - len) / 2; +- y = (480/FONT_HEIGHT - 1) / 2; ++ x = (w/FONT_WIDTH - len) / 2; ++ y = (h/FONT_HEIGHT - 1) / 2; + for (i = 0; i < len; i++) { + glyph = qemu_pixman_glyph_from_vgafont(FONT_HEIGHT, vgafont16, msg[i]); + qemu_pixman_glyph_render(glyph, surface->image, &fg, &bg, +@@ -1357,6 +1356,8 @@ void qemu_free_displaysurface(DisplaySurface *surface) + + void register_displaychangelistener(DisplayChangeListener *dcl) + { ++ static const char nodev[] = ++ "This VM has no graphic display device."; + static DisplaySurface *dummy; + QemuConsole *con; + +@@ -1375,7 +1376,7 @@ void register_displaychangelistener(DisplayChangeListener *dcl) + dcl->ops->dpy_gfx_switch(dcl, con->surface); + } else { + if (!dummy) { +- dummy = qemu_create_dummy_surface(); ++ dummy = qemu_create_message_surface(640, 480, nodev); + } + dcl->ops->dpy_gfx_switch(dcl, dummy); + } +@@ -1602,6 +1603,8 @@ QemuConsole *graphic_console_init(DeviceState *dev, + const GraphicHwOps *hw_ops, + void *opaque) + { ++ static const char noinit[] = ++ "Guest has not initialized the display (yet)."; + Error *local_err = NULL; + int width = 640; + int height = 480; +@@ -1618,7 +1621,7 @@ QemuConsole *graphic_console_init(DeviceState *dev, + "device", &local_err); + } + +- s->surface = qemu_create_displaysurface(width, height); ++ s->surface = qemu_create_message_surface(width, height, noinit); + return s; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cow-correctly-propagate-errors.patch b/SOURCES/kvm-cow-correctly-propagate-errors.patch new file mode 100644 index 0000000..2a753e4 --- /dev/null +++ b/SOURCES/kvm-cow-correctly-propagate-errors.patch @@ -0,0 +1,60 @@ +From 96d707c999c6a64c843f0bf10c3b687ed91b92fa Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:44 +0200 +Subject: [PATCH 06/20] cow: correctly propagate errors + +Message-id: <974b27fc4f7aad8a056618cafcd4e31224709449.1410897407.git.jcody@redhat.com> +Patchwork-id: 61210 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 05/15] cow: correctly propagate errors +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit f8d924e48167ec14ec4556441ec7999a30ef6640) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/cow.c | 8 +++----- + 1 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/block/cow.c b/block/cow.c +index 46295d4..651bdff 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -83,7 +83,7 @@ static int cow_open(BlockDriverState *bs, QDict *options, int flags, + char version[64]; + snprintf(version, sizeof(version), + "COW version %d", cow_header.version); +- qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, ++ error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, + bs->device_name, "cow", version); + ret = -ENOTSUP; + goto fail; +@@ -319,15 +319,13 @@ static int cow_create(const char *filename, QEMUOptionParameter *options, + + ret = bdrv_create_file(filename, options, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + return ret; + } + + ret = bdrv_file_open(&cow_bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-cow-do-not-call-bdrv_co_is_allocated.patch b/SOURCES/kvm-cow-do-not-call-bdrv_co_is_allocated.patch new file mode 100644 index 0000000..8b60307 --- /dev/null +++ b/SOURCES/kvm-cow-do-not-call-bdrv_co_is_allocated.patch @@ -0,0 +1,46 @@ +From 48a9eea657b6533556026d5eda813736ab36844b Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:28 +0200 +Subject: [PATCH 03/81] cow: do not call bdrv_co_is_allocated + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-4-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54987 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 03/26] cow: do not call bdrv_co_is_allocated +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +As we change bdrv_is_allocated to gather more information from bs and +bs->file, it will become a bit slower. It is still appropriate for online +jobs, but not for reads/writes. Call the internal function instead. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit e641c1e81e54fc14908ff6785ef7d51e42c2e1bb) +--- + block/cow.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/cow.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/cow.c b/block/cow.c +index 2f72334..21bceaa 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -212,7 +212,7 @@ static int coroutine_fn cow_read(BlockDriverState *bs, int64_t sector_num, + int ret, n; + + while (nb_sectors > 0) { +- if (bdrv_co_is_allocated(bs, sector_num, nb_sectors, &n)) { ++ if (cow_co_is_allocated(bs, sector_num, nb_sectors, &n)) { + ret = bdrv_pread(bs->file, + s->cow_sectors_offset + sector_num * 512, + buf, n * 512); +-- +1.7.1 + diff --git a/SOURCES/kvm-cow-make-reads-go-at-a-decent-speed.patch b/SOURCES/kvm-cow-make-reads-go-at-a-decent-speed.patch new file mode 100644 index 0000000..3ce3693 --- /dev/null +++ b/SOURCES/kvm-cow-make-reads-go-at-a-decent-speed.patch @@ -0,0 +1,113 @@ +From 2a46f74bc62cd8affeb7516d1adf5dd855f3ed5a Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:26 +0200 +Subject: [PATCH 01/81] cow: make reads go at a decent speed + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-2-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54983 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 01/26] cow: make reads go at a decent speed +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Do not do two reads for each sector; load each sector of the bitmap +and use bitmap operations to process it. + +Writes are still dog slow! + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 276cbc7f2fc1bd3810887995dbc9cbb739c975bf) +--- + block/cow.c | 54 ++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 32 insertions(+), 22 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/cow.c | 54 ++++++++++++++++++++++++++++++++---------------------- + 1 files changed, 32 insertions(+), 22 deletions(-) + +diff --git a/block/cow.c b/block/cow.c +index 9f94599..c12088b 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -126,18 +126,31 @@ static inline int cow_set_bit(BlockDriverState *bs, int64_t bitnum) + return 0; + } + +-static inline int is_bit_set(BlockDriverState *bs, int64_t bitnum) ++#define BITS_PER_BITMAP_SECTOR (512 * 8) ++ ++/* Cannot use bitmap.c on big-endian machines. */ ++static int cow_test_bit(int64_t bitnum, const uint8_t *bitmap) + { +- uint64_t offset = sizeof(struct cow_header_v2) + bitnum / 8; +- uint8_t bitmap; +- int ret; ++ return (bitmap[bitnum / 8] & (1 << (bitnum & 7))) != 0; ++} + +- ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap)); +- if (ret < 0) { +- return ret; ++static int cow_find_streak(const uint8_t *bitmap, int value, int start, int nb_sectors) ++{ ++ int streak_value = value ? 0xFF : 0; ++ int last = MIN(start + nb_sectors, BITS_PER_BITMAP_SECTOR); ++ int bitnum = start; ++ while (bitnum < last) { ++ if ((bitnum & 7) == 0 && bitmap[bitnum / 8] == streak_value) { ++ bitnum += 8; ++ continue; ++ } ++ if (cow_test_bit(bitnum, bitmap) == value) { ++ bitnum++; ++ continue; ++ } ++ break; + } +- +- return !!(bitmap & (1 << (bitnum % 8))); ++ return MIN(bitnum, last) - start; + } + + /* Return true if first block has been changed (ie. current version is +@@ -146,23 +159,20 @@ static inline int is_bit_set(BlockDriverState *bs, int64_t bitnum) + static int coroutine_fn cow_co_is_allocated(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *num_same) + { ++ int64_t bitnum = sector_num + sizeof(struct cow_header_v2) * 8; ++ uint64_t offset = (bitnum / 8) & -BDRV_SECTOR_SIZE; ++ uint8_t bitmap[BDRV_SECTOR_SIZE]; ++ int ret; + int changed; + +- if (nb_sectors == 0) { +- *num_same = nb_sectors; +- return 0; +- } +- +- changed = is_bit_set(bs, sector_num); +- if (changed < 0) { +- return 0; /* XXX: how to return I/O errors? */ +- } +- +- for (*num_same = 1; *num_same < nb_sectors; (*num_same)++) { +- if (is_bit_set(bs, sector_num + *num_same) != changed) +- break; ++ ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap)); ++ if (ret < 0) { ++ return ret; + } + ++ bitnum &= BITS_PER_BITMAP_SECTOR - 1; ++ changed = cow_test_bit(bitnum, bitmap); ++ *num_same = cow_find_streak(bitmap, changed, bitnum, nb_sectors); + return changed; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-cow-make-writes-go-at-a-less-indecent-speed.patch b/SOURCES/kvm-cow-make-writes-go-at-a-less-indecent-speed.patch new file mode 100644 index 0000000..9d16530 --- /dev/null +++ b/SOURCES/kvm-cow-make-writes-go-at-a-less-indecent-speed.patch @@ -0,0 +1,79 @@ +From a1a7f1301c20582d3326e33acd94a4c198c60bcd Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:27 +0200 +Subject: [PATCH 02/81] cow: make writes go at a less indecent speed + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-3-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54985 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 02/26] cow: make writes go at a less indecent speed +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Only sync once per write, rather than once per sector. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 26ae980492920e417bc91761cc85950f18e41f85) +--- + block/cow.c | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/cow.c | 19 ++++++++++++++++--- + 1 files changed, 16 insertions(+), 3 deletions(-) + +diff --git a/block/cow.c b/block/cow.c +index c12088b..2f72334 100644 +--- a/block/cow.c ++++ b/block/cow.c +@@ -106,7 +106,7 @@ static int cow_open(BlockDriverState *bs, QDict *options, int flags) + * XXX(hch): right now these functions are extremely inefficient. + * We should just read the whole bitmap we'll need in one go instead. + */ +-static inline int cow_set_bit(BlockDriverState *bs, int64_t bitnum) ++static inline int cow_set_bit(BlockDriverState *bs, int64_t bitnum, bool *first) + { + uint64_t offset = sizeof(struct cow_header_v2) + bitnum / 8; + uint8_t bitmap; +@@ -117,9 +117,21 @@ static inline int cow_set_bit(BlockDriverState *bs, int64_t bitnum) + return ret; + } + ++ if (bitmap & (1 << (bitnum % 8))) { ++ return 0; ++ } ++ ++ if (*first) { ++ ret = bdrv_flush(bs->file); ++ if (ret < 0) { ++ return ret; ++ } ++ *first = false; ++ } ++ + bitmap |= (1 << (bitnum % 8)); + +- ret = bdrv_pwrite_sync(bs->file, offset, &bitmap, sizeof(bitmap)); ++ ret = bdrv_pwrite(bs->file, offset, &bitmap, sizeof(bitmap)); + if (ret < 0) { + return ret; + } +@@ -181,9 +193,10 @@ static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num, + { + int error = 0; + int i; ++ bool first = true; + + for (i = 0; i < nb_sectors; i++) { +- error = cow_set_bit(bs, sector_num + i); ++ error = cow_set_bit(bs, sector_num + i, &first); + if (error) { + break; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-cpu-Document-why-cannot_instantiate_with_device_add_.patch b/SOURCES/kvm-cpu-Document-why-cannot_instantiate_with_device_add_.patch new file mode 100644 index 0000000..d5be296 --- /dev/null +++ b/SOURCES/kvm-cpu-Document-why-cannot_instantiate_with_device_add_.patch @@ -0,0 +1,50 @@ +From d7eb9186c64094d6413bf98220e04b5350d2292d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:14 +0100 +Subject: [PATCH 38/81] cpu: Document why cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-10-git-send-email-kwolf@redhat.com> +Patchwork-id: 55535 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 09/17] cpu: Document why cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Peter Maydell +(cherry picked from pending upstream submission) +Signed-off-by: Kevin Wolf +--- + qom/cpu.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qom/cpu.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/qom/cpu.c b/qom/cpu.c +index f97e1b8..859dae5 100644 +--- a/qom/cpu.c ++++ b/qom/cpu.c +@@ -210,7 +210,11 @@ static void cpu_class_init(ObjectClass *klass, void *data) + k->write_elf64_qemunote = cpu_common_write_elf64_qemunote; + k->write_elf64_note = cpu_common_write_elf64_note; + dc->realize = cpu_common_realizefn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ ++ /* ++ * Reason: CPUs still need special care by board code: wiring up ++ * IRQs, adding reset handlers, halting non-first CPUS, ... ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo cpu_type_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-cpu-Turn-cpu_get_memory_mapping-into-a-CPUState-hook.patch b/SOURCES/kvm-cpu-Turn-cpu_get_memory_mapping-into-a-CPUState-hook.patch new file mode 100644 index 0000000..668c94e --- /dev/null +++ b/SOURCES/kvm-cpu-Turn-cpu_get_memory_mapping-into-a-CPUState-hook.patch @@ -0,0 +1,208 @@ +From 4a8aa152fc7244b36cae10a64759ec1c50bc9c87 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:34 +0200 +Subject: cpu: Turn cpu_get_memory_mapping() into a CPUState hook + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-5-git-send-email-lersek@redhat.com> +Patchwork-id: 53163 +O-Subject: [RHEL-7 qemu-kvm PATCH 04/10] cpu: Turn cpu_get_memory_mapping() into a CPUState hook +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +From: Andreas Färber + +Change error reporting from return value to Error argument. + +Reviewed-by: Jens Freimann +Reviewed-by: Luiz Capitulino +[AF: Fixed cpu_get_memory_mapping() documentation] +Signed-off-by: Andreas Färber +(cherry picked from commit a23bbfda75118eb738acce84afd64965934828f0) +Signed-off-by: Laszlo Ersek + +diff --git a/include/qom/cpu.h b/include/qom/cpu.h +index 490f5f1..b555c22 100644 +--- a/include/qom/cpu.h ++++ b/include/qom/cpu.h +@@ -23,6 +23,7 @@ + #include + #include "hw/qdev-core.h" + #include "qemu/thread.h" ++#include "qemu/typedefs.h" + + typedef int (*WriteCoreDumpFunction)(void *buf, size_t size, void *opaque); + +@@ -49,6 +50,7 @@ typedef struct CPUState CPUState; + * @do_interrupt: Callback for interrupt handling. + * @get_arch_id: Callback for getting architecture-dependent CPU ID. + * @get_paging_enabled: Callback for inquiring whether paging is enabled. ++ * @get_memory_mapping: Callback for obtaining the memory mappings. + * @vmsd: State description for migration. + * + * Represents a CPU family or model. +@@ -64,6 +66,8 @@ typedef struct CPUClass { + void (*do_interrupt)(CPUState *cpu); + int64_t (*get_arch_id)(CPUState *cpu); + bool (*get_paging_enabled)(const CPUState *cpu); ++ void (*get_memory_mapping)(CPUState *cpu, MemoryMappingList *list, ++ Error **errp); + + const struct VMStateDescription *vmsd; + int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu, +@@ -148,6 +152,15 @@ struct CPUState { + bool cpu_paging_enabled(const CPUState *cpu); + + /** ++ * cpu_get_memory_mapping: ++ * @cpu: The CPU whose memory mappings are to be obtained. ++ * @list: Where to write the memory mappings to. ++ * @errp: Pointer for reporting an #Error. ++ */ ++void cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, ++ Error **errp); ++ ++/** + * cpu_write_elf64_note: + * @f: pointer to a function that writes memory to a file + * @cpu: The CPU whose memory is to be dumped +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index 1f71c32..c47e6ee 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -31,8 +31,6 @@ struct MemoryMappingList { + QTAILQ_HEAD(, MemoryMapping) head; + }; + +-int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env); +- + /* + * add or merge the memory region [phys_addr, phys_addr + length) into the + * memory mapping's list. The region's virtual address starts with virt_addr, +diff --git a/memory_mapping-stub.c b/memory_mapping-stub.c +index 6c0dfeb..989dc00 100644 +--- a/memory_mapping-stub.c ++++ b/memory_mapping-stub.c +@@ -19,9 +19,3 @@ int qemu_get_guest_memory_mapping(MemoryMappingList *list) + { + return -2; + } +- +-int cpu_get_memory_mapping(MemoryMappingList *list, +- CPUArchState *env) +-{ +- return -1; +-} +diff --git a/memory_mapping.c b/memory_mapping.c +index 0790aac..9bd24ce 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -183,13 +183,14 @@ int qemu_get_guest_memory_mapping(MemoryMappingList *list) + CPUArchState *env, *first_paging_enabled_cpu; + RAMBlock *block; + ram_addr_t offset, length; +- int ret; + + first_paging_enabled_cpu = find_paging_enabled_cpu(first_cpu); + if (first_paging_enabled_cpu) { + for (env = first_paging_enabled_cpu; env != NULL; env = env->next_cpu) { +- ret = cpu_get_memory_mapping(list, env); +- if (ret < 0) { ++ Error *err = NULL; ++ cpu_get_memory_mapping(ENV_GET_CPU(env), list, &err); ++ if (err) { ++ error_free(err); + return -1; + } + } +diff --git a/qom/cpu.c b/qom/cpu.c +index 9f6da0f..b25fbc9 100644 +--- a/qom/cpu.c ++++ b/qom/cpu.c +@@ -62,6 +62,21 @@ static bool cpu_common_get_paging_enabled(const CPUState *cpu) + return true; + } + ++void cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, ++ Error **errp) ++{ ++ CPUClass *cc = CPU_GET_CLASS(cpu); ++ ++ return cc->get_memory_mapping(cpu, list, errp); ++} ++ ++static void cpu_common_get_memory_mapping(CPUState *cpu, ++ MemoryMappingList *list, ++ Error **errp) ++{ ++ error_setg(errp, "Obtaining memory mappings is unsupported on this CPU."); ++} ++ + /* CPU hot-plug notifiers */ + static NotifierList cpu_added_notifiers = + NOTIFIER_LIST_INITIALIZER(cpu_add_notifiers); +@@ -189,6 +204,7 @@ static void cpu_class_init(ObjectClass *klass, void *data) + k->reset = cpu_common_reset; + k->get_arch_id = cpu_common_get_arch_id; + k->get_paging_enabled = cpu_common_get_paging_enabled; ++ k->get_memory_mapping = cpu_common_get_memory_mapping; + k->write_elf32_qemunote = cpu_common_write_elf32_qemunote; + k->write_elf32_note = cpu_common_write_elf32_note; + k->write_elf64_qemunote = cpu_common_write_elf64_qemunote; +diff --git a/target-i386/arch_memory_mapping.c b/target-i386/arch_memory_mapping.c +index 39def3d..ca47970 100644 +--- a/target-i386/arch_memory_mapping.c ++++ b/target-i386/arch_memory_mapping.c +@@ -239,11 +239,15 @@ static void walk_pml4e(MemoryMappingList *list, + } + #endif + +-int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env) ++void x86_cpu_get_memory_mapping(CPUState *cs, MemoryMappingList *list, ++ Error **errp) + { +- if (!cpu_paging_enabled(ENV_GET_CPU(env))) { ++ X86CPU *cpu = X86_CPU(cs); ++ CPUX86State *env = &cpu->env; ++ ++ if (!cpu_paging_enabled(cs)) { + /* paging is disabled */ +- return 0; ++ return; + } + + if (env->cr[4] & CR4_PAE_MASK) { +@@ -269,7 +273,5 @@ int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env) + pse = !!(env->cr[4] & CR4_PSE_MASK); + walk_pde2(list, pde_addr, env->a20_mask, pse); + } +- +- return 0; + } + +diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h +index 5231005..12c7bea 100644 +--- a/target-i386/cpu-qom.h ++++ b/target-i386/cpu-qom.h +@@ -105,4 +105,7 @@ int x86_cpu_write_elf64_qemunote(WriteCoreDumpFunction f, CPUState *cpu, + int x86_cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu, + void *opaque); + ++void x86_cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, ++ Error **errp); ++ + #endif +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index dfa2a86..e915157 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2540,6 +2540,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) + cc->get_arch_id = x86_cpu_get_arch_id; + cc->get_paging_enabled = x86_cpu_get_paging_enabled; + #ifndef CONFIG_USER_ONLY ++ cc->get_memory_mapping = x86_cpu_get_memory_mapping; + cc->write_elf64_note = x86_cpu_write_elf64_note; + cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote; + cc->write_elf32_note = x86_cpu_write_elf32_note; diff --git a/SOURCES/kvm-cpu-Turn-cpu_paging_enabled-into-a-CPUState-hook.patch b/SOURCES/kvm-cpu-Turn-cpu_paging_enabled-into-a-CPUState-hook.patch new file mode 100644 index 0000000..6154b89 --- /dev/null +++ b/SOURCES/kvm-cpu-Turn-cpu_paging_enabled-into-a-CPUState-hook.patch @@ -0,0 +1,195 @@ +From 0fb4264531471230dfe37f1c04d38cd46e38027a Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:32 +0200 +Subject: cpu: Turn cpu_paging_enabled() into a CPUState hook + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-3-git-send-email-lersek@redhat.com> +Patchwork-id: 53161 +O-Subject: [RHEL-7 qemu-kvm PATCH 02/10] cpu: Turn cpu_paging_enabled() into a CPUState hook +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +Relocate assignment of x86 get_arch_id to have all hooks in one place. + +Reviewed-by: Jens Freimann +Reviewed-by: Luiz Capitulino +Signed-off-by: Andreas Färber +(cherry picked from commit 444d55907871f88276a654fc7fdc8c7db95f4b59) + +Conflicts (due to RHEL-7 commit c93d9248, "target-i386: Disable PMU CPUID +leaf by default"): + + target-i386/cpu.c +Signed-off-by: Laszlo Ersek + +diff --git a/include/qom/cpu.h b/include/qom/cpu.h +index 46465e9..490f5f1 100644 +--- a/include/qom/cpu.h ++++ b/include/qom/cpu.h +@@ -48,6 +48,7 @@ typedef struct CPUState CPUState; + * @reset: Callback to reset the #CPUState to its initial state. + * @do_interrupt: Callback for interrupt handling. + * @get_arch_id: Callback for getting architecture-dependent CPU ID. ++ * @get_paging_enabled: Callback for inquiring whether paging is enabled. + * @vmsd: State description for migration. + * + * Represents a CPU family or model. +@@ -62,6 +63,7 @@ typedef struct CPUClass { + void (*reset)(CPUState *cpu); + void (*do_interrupt)(CPUState *cpu); + int64_t (*get_arch_id)(CPUState *cpu); ++ bool (*get_paging_enabled)(const CPUState *cpu); + + const struct VMStateDescription *vmsd; + int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu, +@@ -138,6 +140,14 @@ struct CPUState { + }; + + /** ++ * cpu_paging_enabled: ++ * @cpu: The CPU whose state is to be inspected. ++ * ++ * Returns: %true if paging is enabled, %false otherwise. ++ */ ++bool cpu_paging_enabled(const CPUState *cpu); ++ ++/** + * cpu_write_elf64_note: + * @f: pointer to a function that writes memory to a file + * @cpu: The CPU whose memory is to be dumped +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index 1256125..6f01524 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -31,7 +31,6 @@ typedef struct MemoryMappingList { + } MemoryMappingList; + + int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env); +-bool cpu_paging_enabled(CPUArchState *env); + + /* + * add or merge the memory region [phys_addr, phys_addr + length) into the +diff --git a/memory_mapping-stub.c b/memory_mapping-stub.c +index 24d5d67..6c0dfeb 100644 +--- a/memory_mapping-stub.c ++++ b/memory_mapping-stub.c +@@ -25,9 +25,3 @@ int cpu_get_memory_mapping(MemoryMappingList *list, + { + return -1; + } +- +-bool cpu_paging_enabled(CPUArchState *env) +-{ +- return true; +-} +- +diff --git a/memory_mapping.c b/memory_mapping.c +index ff45b3a..0790aac 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -170,7 +170,7 @@ static CPUArchState *find_paging_enabled_cpu(CPUArchState *start_cpu) + CPUArchState *env; + + for (env = start_cpu; env != NULL; env = env->next_cpu) { +- if (cpu_paging_enabled(env)) { ++ if (cpu_paging_enabled(ENV_GET_CPU(env))) { + return env; + } + } +diff --git a/qom/cpu.c b/qom/cpu.c +index 04aefbb..9f6da0f 100644 +--- a/qom/cpu.c ++++ b/qom/cpu.c +@@ -50,6 +50,18 @@ bool cpu_exists(int64_t id) + return data.found; + } + ++bool cpu_paging_enabled(const CPUState *cpu) ++{ ++ CPUClass *cc = CPU_GET_CLASS(cpu); ++ ++ return cc->get_paging_enabled(cpu); ++} ++ ++static bool cpu_common_get_paging_enabled(const CPUState *cpu) ++{ ++ return true; ++} ++ + /* CPU hot-plug notifiers */ + static NotifierList cpu_added_notifiers = + NOTIFIER_LIST_INITIALIZER(cpu_add_notifiers); +@@ -176,6 +188,7 @@ static void cpu_class_init(ObjectClass *klass, void *data) + k->class_by_name = cpu_common_class_by_name; + k->reset = cpu_common_reset; + k->get_arch_id = cpu_common_get_arch_id; ++ k->get_paging_enabled = cpu_common_get_paging_enabled; + k->write_elf32_qemunote = cpu_common_write_elf32_qemunote; + k->write_elf32_note = cpu_common_write_elf32_note; + k->write_elf64_qemunote = cpu_common_write_elf64_qemunote; +diff --git a/target-i386/arch_memory_mapping.c b/target-i386/arch_memory_mapping.c +index 24884bd..39def3d 100644 +--- a/target-i386/arch_memory_mapping.c ++++ b/target-i386/arch_memory_mapping.c +@@ -241,7 +241,7 @@ static void walk_pml4e(MemoryMappingList *list, + + int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env) + { +- if (!cpu_paging_enabled(env)) { ++ if (!cpu_paging_enabled(ENV_GET_CPU(env))) { + /* paging is disabled */ + return 0; + } +@@ -273,7 +273,3 @@ int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env) + return 0; + } + +-bool cpu_paging_enabled(CPUArchState *env) +-{ +- return env->cr[0] & CR0_PG_MASK; +-} +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 2bcc21e..dfa2a86 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2509,11 +2509,19 @@ static int64_t x86_cpu_get_arch_id(CPUState *cs) + return env->cpuid_apic_id; + } + ++ + static Property x86_cpu_properties[] = { + DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), + DEFINE_PROP_END_OF_LIST() + }; + ++static bool x86_cpu_get_paging_enabled(const CPUState *cs) ++{ ++ X86CPU *cpu = X86_CPU(cs); ++ ++ return cpu->env.cr[0] & CR0_PG_MASK; ++} ++ + static void x86_cpu_common_class_init(ObjectClass *oc, void *data) + { + X86CPUClass *xcc = X86_CPU_CLASS(oc); +@@ -2529,6 +2537,8 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) + cc->reset = x86_cpu_reset; + + cc->do_interrupt = x86_cpu_do_interrupt; ++ cc->get_arch_id = x86_cpu_get_arch_id; ++ cc->get_paging_enabled = x86_cpu_get_paging_enabled; + #ifndef CONFIG_USER_ONLY + cc->write_elf64_note = x86_cpu_write_elf64_note; + cc->write_elf64_qemunote = x86_cpu_write_elf64_qemunote; +@@ -2536,8 +2546,6 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) + cc->write_elf32_qemunote = x86_cpu_write_elf32_qemunote; + #endif + cpu_class_set_vmsd(cc, &vmstate_x86_cpu); +- +- cc->get_arch_id = x86_cpu_get_arch_id; + } + + static const TypeInfo x86_cpu_type_info = { diff --git a/SOURCES/kvm-cpus-use-error_setg_file_open.patch b/SOURCES/kvm-cpus-use-error_setg_file_open.patch new file mode 100644 index 0000000..a332db6 --- /dev/null +++ b/SOURCES/kvm-cpus-use-error_setg_file_open.patch @@ -0,0 +1,54 @@ +From 36268b43efcc3d639e973a4a47cb32d38e92bc93 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:27 +0100 +Subject: [PATCH 08/29] cpus: use error_setg_file_open() + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-5-git-send-email-lersek@redhat.com> +Patchwork-id: 55194 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/8] cpus: use error_setg_file_open() +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Acked-by: Kevin Wolf +(cherry picked from commit 618da851ec8059460be8e0670bc835d3c2003708) +Signed-off-by: Laszlo Ersek +--- + cpus.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + cpus.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cpus.c b/cpus.c +index 3b7b380..caccf5a 100644 +--- a/cpus.c ++++ b/cpus.c +@@ -1316,7 +1316,7 @@ void qmp_memsave(int64_t addr, int64_t size, const char *filename, + + f = fopen(filename, "wb"); + if (!f) { +- error_set(errp, QERR_OPEN_FILE_FAILED, filename); ++ error_setg_file_open(errp, errno, filename); + return; + } + +@@ -1346,7 +1346,7 @@ void qmp_pmemsave(int64_t addr, int64_t size, const char *filename, + + f = fopen(filename, "wb"); + if (!f) { +- error_set(errp, QERR_OPEN_FILE_FAILED, filename); ++ error_setg_file_open(errp, errno, filename); + return; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-curl-Add-sslverify-option.patch b/SOURCES/kvm-curl-Add-sslverify-option.patch new file mode 100644 index 0000000..39c9304 --- /dev/null +++ b/SOURCES/kvm-curl-Add-sslverify-option.patch @@ -0,0 +1,88 @@ +From 00346b0ddbb4cffa91b69421353ab20f8be17f9e Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:22 +0200 +Subject: [PATCH 22/30] curl: Add sslverify option + +Message-id: <1434022828-13037-16-git-send-email-rjones@redhat.com> +Patchwork-id: 65850 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 15/21] curl: Add sslverify option +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +This allows qemu to use images over https with a self-signed certificate. It +defaults to verifying the certificate. + +Signed-off-by: Matthew Booth +Signed-off-by: Kevin Wolf + +Upstream-status: 97a3ea57198b39b8366cd2a7514707abdcd0a7bc +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/block/curl.c b/block/curl.c +index e97682f..e48cc87 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -23,6 +23,7 @@ + */ + #include "qemu-common.h" + #include "block/block_int.h" ++#include "qapi/qmp/qbool.h" + #include + + // #define DEBUG +@@ -69,6 +70,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, + + #define CURL_BLOCK_OPT_URL "url" + #define CURL_BLOCK_OPT_READAHEAD "readahead" ++#define CURL_BLOCK_OPT_SSLVERIFY "sslverify" + + struct BDRVCURLState; + +@@ -106,6 +108,7 @@ typedef struct BDRVCURLState { + CURLState states[CURL_NUM_STATES]; + char *url; + size_t readahead_size; ++ bool sslverify; + bool accept_range; + } BDRVCURLState; + +@@ -374,6 +377,8 @@ static CURLState *curl_init_state(BDRVCURLState *s) + return NULL; + } + curl_easy_setopt(state->curl, CURLOPT_URL, s->url); ++ curl_easy_setopt(state->curl, CURLOPT_SSL_VERIFYPEER, ++ (long) s->sslverify); + curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, 5); + curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, + (void *)curl_read_cb); +@@ -433,6 +438,11 @@ static QemuOptsList runtime_opts = { + .type = QEMU_OPT_SIZE, + .help = "Readahead size", + }, ++ { ++ .name = CURL_BLOCK_OPT_SSLVERIFY, ++ .type = QEMU_OPT_BOOL, ++ .help = "Verify SSL certificate" ++ }, + { /* end of list */ } + }, + }; +@@ -465,6 +475,8 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + goto out_noclean; + } + ++ s->sslverify = qemu_opt_get_bool(opts, CURL_BLOCK_OPT_SSLVERIFY, true); ++ + file = qemu_opt_get(opts, CURL_BLOCK_OPT_URL); + if (file == NULL) { + qerror_report(ERROR_CLASS_GENERIC_ERROR, "curl block driver requires " +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Allow-a-cookie-or-cookies-to-be-sent-with-http-.patch b/SOURCES/kvm-curl-Allow-a-cookie-or-cookies-to-be-sent-with-http-.patch new file mode 100644 index 0000000..42f12f8 --- /dev/null +++ b/SOURCES/kvm-curl-Allow-a-cookie-or-cookies-to-be-sent-with-http-.patch @@ -0,0 +1,126 @@ +From 1eeb050a2cc6c582c390614080fbeaea019b2dac Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:26 +0200 +Subject: [PATCH 26/30] curl: Allow a cookie or cookies to be sent with + http/https requests. + +Message-id: <1434022828-13037-20-git-send-email-rjones@redhat.com> +Patchwork-id: 65854 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 19/21] curl: Allow a cookie or cookies to be sent with http/https requests. +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: "Richard W.M. Jones" + +In order to access VMware ESX efficiently, we need to send a session +cookie. This patch is very simple and just allows you to send that +session cookie. It punts on the question of how you get the session +cookie in the first place, but in practice you can just run a `curl' +command against the server and extract the cookie that way. + +To use it, add file.cookie to the curl URL. For example: + +$ qemu-img info 'json: { + "file.driver":"https", + "file.url":"https://vcenter/folder/Windows%202003/Windows%202003-flat.vmdk?dcPath=Datacenter&dsName=datastore1", + "file.sslverify":"off", + "file.cookie":"vmware_soap_session=\"52a01262-bf93-ccce-d379-8dabb3e55560\""}' +image: [...] +file format: raw +virtual size: 8.0G (8589934592 bytes) +disk size: unavailable + +Signed-off-by: Richard W.M. Jones +Signed-off-by: Stefan Hajnoczi + +Upstream-status: a94f83d94fdf907680f068f1be7ad13d1f697067 + +Note this intentionally omits the documentation changes in +'qemu-options.hx' from the upstream patch. + +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/block/curl.c b/block/curl.c +index 1f1df4f..ca881ee 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -73,6 +73,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, + #define CURL_BLOCK_OPT_READAHEAD "readahead" + #define CURL_BLOCK_OPT_SSLVERIFY "sslverify" + #define CURL_BLOCK_OPT_TIMEOUT "timeout" ++#define CURL_BLOCK_OPT_COOKIE "cookie" + + struct BDRVCURLState; + +@@ -112,6 +113,7 @@ typedef struct BDRVCURLState { + size_t readahead_size; + bool sslverify; + int timeout; ++ char *cookie; + bool accept_range; + } BDRVCURLState; + +@@ -382,6 +384,9 @@ static CURLState *curl_init_state(BDRVCURLState *s) + curl_easy_setopt(state->curl, CURLOPT_URL, s->url); + curl_easy_setopt(state->curl, CURLOPT_SSL_VERIFYPEER, + (long) s->sslverify); ++ if (s->cookie) { ++ curl_easy_setopt(state->curl, CURLOPT_COOKIE, s->cookie); ++ } + curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, s->timeout); + curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, + (void *)curl_read_cb); +@@ -451,6 +456,11 @@ static QemuOptsList runtime_opts = { + .type = QEMU_OPT_NUMBER, + .help = "Curl timeout" + }, ++ { ++ .name = CURL_BLOCK_OPT_COOKIE, ++ .type = QEMU_OPT_STRING, ++ .help = "Pass the cookie or list of cookies with each request" ++ }, + { /* end of list */ } + }, + }; +@@ -463,6 +473,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + QemuOpts *opts; + Error *local_err = NULL; + const char *file; ++ const char *cookie; + double d; + + static int inited = 0; +@@ -488,6 +499,9 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + + s->sslverify = qemu_opt_get_bool(opts, CURL_BLOCK_OPT_SSLVERIFY, true); + ++ cookie = qemu_opt_get(opts, CURL_BLOCK_OPT_COOKIE); ++ s->cookie = g_strdup(cookie); ++ + file = qemu_opt_get(opts, CURL_BLOCK_OPT_URL); + if (file == NULL) { + qerror_report(ERROR_CLASS_GENERIC_ERROR, "curl block driver requires " +@@ -556,6 +570,7 @@ out: + curl_easy_cleanup(state->curl); + state->curl = NULL; + out_noclean: ++ g_free(s->cookie); + g_free(s->url); + qemu_opts_del(opts); + return -EINVAL; +@@ -696,6 +711,7 @@ static void curl_close(BlockDriverState *bs) + qemu_del_timer(s->timer); + qemu_free_timer(s->timer); + ++ g_free(s->cookie); + g_free(s->url); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Eliminate-unnecessary-use-of-curl_multi_socket_.patch b/SOURCES/kvm-curl-Eliminate-unnecessary-use-of-curl_multi_socket_.patch new file mode 100644 index 0000000..a1c36b2 --- /dev/null +++ b/SOURCES/kvm-curl-Eliminate-unnecessary-use-of-curl_multi_socket_.patch @@ -0,0 +1,142 @@ +From 2b07b0558685c234fd93214be705a4feb058e27b Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:16 +0200 +Subject: [PATCH 16/30] curl: Eliminate unnecessary use of + curl_multi_socket_all + +Message-id: <1434022828-13037-10-git-send-email-rjones@redhat.com> +Patchwork-id: 65844 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 09/21] curl: Eliminate unnecessary use of curl_multi_socket_all +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +curl_multi_socket_all is a deprecated catch-all which checks for +activities on all open curl sockets. We have enough information from +the event loop to check only the sockets with activity. This change +removes use of curl_multi_socket_all in favour of +curl_multi_socket_action called with the relevant handle. + +At the same time, it also ensures that the driver only checks for +completion of read operations after reading from a socket, rather than +both reading and writing. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: 838ef602498b8d1985a231a06f5e328e2946a81d +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 34 +++++++++++++++++++++++----------- + 1 file changed, 23 insertions(+), 11 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index e4332c5..b19e632 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -71,6 +71,7 @@ typedef struct CURLState + struct BDRVCURLState *s; + CURLAIOCB *acb[CURL_NUM_ACB]; + CURL *curl; ++ curl_socket_t sock_fd; + char *orig_buf; + size_t buf_start; + size_t buf_off; +@@ -92,6 +93,7 @@ typedef struct BDRVCURLState { + static void curl_clean_state(CURLState *s); + static void curl_multi_do(void *arg); + static int curl_aio_flush(void *opaque); ++static void curl_multi_read(void *arg); + + #ifdef NEED_CURL_TIMER_CALLBACK + static int curl_timer_cb(CURLM *multi, long timeout_ms, void *opaque) +@@ -113,17 +115,21 @@ static int curl_timer_cb(CURLM *multi, long timeout_ms, void *opaque) + static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action, + void *s, void *sp) + { ++ CURLState *state = NULL; ++ curl_easy_getinfo(curl, CURLINFO_PRIVATE, (char **)&state); ++ state->sock_fd = fd; ++ + DPRINTF("CURL (AIO): Sock action %d on fd %d\n", action, fd); + switch (action) { + case CURL_POLL_IN: +- qemu_aio_set_fd_handler(fd, curl_multi_do, NULL, curl_aio_flush, s); ++ qemu_aio_set_fd_handler(fd, curl_multi_read, NULL, curl_aio_flush, state); + break; + case CURL_POLL_OUT: +- qemu_aio_set_fd_handler(fd, NULL, curl_multi_do, curl_aio_flush, s); ++ qemu_aio_set_fd_handler(fd, NULL, curl_multi_do, curl_aio_flush, state); + break; + case CURL_POLL_INOUT: +- qemu_aio_set_fd_handler(fd, curl_multi_do, curl_multi_do, +- curl_aio_flush, s); ++ qemu_aio_set_fd_handler(fd, curl_multi_read, curl_multi_do, ++ curl_aio_flush, state); + break; + case CURL_POLL_REMOVE: + qemu_aio_set_fd_handler(fd, NULL, NULL, NULL, NULL); +@@ -236,7 +242,7 @@ static int curl_find_buf(BDRVCURLState *s, size_t start, size_t len, + return FIND_RET_NONE; + } + +-static void curl_multi_read(BDRVCURLState *s) ++static void curl_multi_check_completion(BDRVCURLState *s) + { + int msgs_in_queue; + +@@ -286,19 +292,26 @@ static void curl_multi_read(BDRVCURLState *s) + + static void curl_multi_do(void *arg) + { +- BDRVCURLState *s = (BDRVCURLState *)arg; ++ CURLState *s = (CURLState *)arg; + int running; + int r; + +- if (!s->multi) { ++ if (!s->s->multi) { + return; + } + + do { +- r = curl_multi_socket_all(s->multi, &running); ++ r = curl_multi_socket_action(s->s->multi, s->sock_fd, 0, &running); + } while(r == CURLM_CALL_MULTI_PERFORM); + +- curl_multi_read(s); ++} ++ ++static void curl_multi_read(void *arg) ++{ ++ CURLState *s = (CURLState *)arg; ++ ++ curl_multi_do(arg); ++ curl_multi_check_completion(s->s); + } + + static void curl_multi_timeout_do(void *arg) +@@ -313,7 +326,7 @@ static void curl_multi_timeout_do(void *arg) + + curl_multi_socket_action(s->multi, CURL_SOCKET_TIMEOUT, 0, &running); + +- curl_multi_read(s); ++ curl_multi_check_completion(s); + #else + abort(); + #endif +@@ -517,7 +530,6 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + // initialize the multi interface! + + s->multi = curl_multi_init(); +- curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s); + curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb); + #ifdef NEED_CURL_TIMER_CALLBACK + curl_multi_setopt(s->multi, CURLMOPT_TIMERDATA, s); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Ensure-all-informationals-are-checked-for-compl.patch b/SOURCES/kvm-curl-Ensure-all-informationals-are-checked-for-compl.patch new file mode 100644 index 0000000..8d37630 --- /dev/null +++ b/SOURCES/kvm-curl-Ensure-all-informationals-are-checked-for-compl.patch @@ -0,0 +1,107 @@ +From 92a8426bb06ecb65af6fc6953e11870872bf52d1 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:17 +0200 +Subject: [PATCH 17/30] curl: Ensure all informationals are checked for + completion + +Message-id: <1434022828-13037-11-git-send-email-rjones@redhat.com> +Patchwork-id: 65845 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 10/21] curl: Ensure all informationals are checked for completion +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +According to the documentation, the correct way to ensure all +informationals have been returned by curl_multi_info_read is to loop +until it returns NULL. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: 1f2cead324436da25c3607f4b957f0198a01fc01 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 53 +++++++++++++++++++++++------------------------------ + 1 file changed, 23 insertions(+), 30 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index b19e632..41cf015 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -248,46 +248,39 @@ static void curl_multi_check_completion(BDRVCURLState *s) + + /* Try to find done transfers, so we can free the easy + * handle again. */ +- do { ++ for (;;) { + CURLMsg *msg; + msg = curl_multi_info_read(s->multi, &msgs_in_queue); + ++ /* Quit when there are no more completions */ + if (!msg) + break; +- if (msg->msg == CURLMSG_NONE) +- break; + +- switch (msg->msg) { +- case CURLMSG_DONE: +- { +- CURLState *state = NULL; +- curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, +- (char **)&state); +- +- /* ACBs for successful messages get completed in curl_read_cb */ +- if (msg->data.result != CURLE_OK) { +- int i; +- for (i = 0; i < CURL_NUM_ACB; i++) { +- CURLAIOCB *acb = state->acb[i]; +- +- if (acb == NULL) { +- continue; +- } +- +- acb->common.cb(acb->common.opaque, -EIO); +- qemu_aio_release(acb); +- state->acb[i] = NULL; ++ if (msg->msg == CURLMSG_DONE) { ++ CURLState *state = NULL; ++ curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, ++ (char **)&state); ++ ++ /* ACBs for successful messages get completed in curl_read_cb */ ++ if (msg->data.result != CURLE_OK) { ++ int i; ++ for (i = 0; i < CURL_NUM_ACB; i++) { ++ CURLAIOCB *acb = state->acb[i]; ++ ++ if (acb == NULL) { ++ continue; + } +- } + +- curl_clean_state(state); +- break; ++ acb->common.cb(acb->common.opaque, -EIO); ++ qemu_aio_release(acb); ++ state->acb[i] = NULL; ++ } + } +- default: +- msgs_in_queue = 0; +- break; ++ ++ curl_clean_state(state); ++ break; + } +- } while(msgs_in_queue); ++ } + } + + static void curl_multi_do(void *arg) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Fix-build-when-curl_multi_socket_action-isn-t-a.patch b/SOURCES/kvm-curl-Fix-build-when-curl_multi_socket_action-isn-t-a.patch new file mode 100644 index 0000000..76b8e3e --- /dev/null +++ b/SOURCES/kvm-curl-Fix-build-when-curl_multi_socket_action-isn-t-a.patch @@ -0,0 +1,54 @@ +From e1ae27052f1c226e2cabe2199ab98d7e243c8cd2 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:19 +0200 +Subject: [PATCH 19/30] curl: Fix build when curl_multi_socket_action isn't + available + +Message-id: <1434022828-13037-13-git-send-email-rjones@redhat.com> +Patchwork-id: 65846 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 12/21] curl: Fix build when curl_multi_socket_action isn't available +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +Signed-off-by: Matthew Booth +Signed-off-by: Kevin Wolf + +Upstream-status: 9aedd5a5d607216e41bfa6a2c1f7f5d2b17041c3 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/block/curl.c b/block/curl.c +index 1bff71a..be2d3f4 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -37,6 +37,21 @@ + #if LIBCURL_VERSION_NUM >= 0x071000 + /* The multi interface timer callback was introduced in 7.16.0 */ + #define NEED_CURL_TIMER_CALLBACK ++#define HAVE_SOCKET_ACTION ++#endif ++ ++#ifndef HAVE_SOCKET_ACTION ++/* If curl_multi_socket_action isn't available, define it statically here in ++ * terms of curl_multi_socket. Note that ev_bitmask will be ignored, which is ++ * less efficient but still safe. */ ++static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, ++ curl_socket_t sockfd, ++ int ev_bitmask, ++ int *running_handles) ++{ ++ return curl_multi_socket(multi_handle, sockfd, running_handles); ++} ++#define curl_multi_socket_action __curl_multi_socket_action + #endif + + #define PROTOCOLS (CURLPROTO_HTTP | CURLPROTO_HTTPS | \ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Fix-hang-reading-from-slow-connections.patch b/SOURCES/kvm-curl-Fix-hang-reading-from-slow-connections.patch new file mode 100644 index 0000000..48f901b --- /dev/null +++ b/SOURCES/kvm-curl-Fix-hang-reading-from-slow-connections.patch @@ -0,0 +1,49 @@ +From 188c4737c54787bbd734c628121f7f0e4f833cd1 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:18 +0200 +Subject: [PATCH 18/30] curl: Fix hang reading from slow connections + +Message-id: <1434022828-13037-12-git-send-email-rjones@redhat.com> +Patchwork-id: 65847 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 11/21] curl: Fix hang reading from slow connections +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +When receiving a new aio read request, we first look for an existing +transaction whose range will cover the read request by the time it +completes. However, we weren't checking that the existing transaction +was still active. If it had timed out, we were adding the request to a +transaction which would never complete and had already been cancelled, +resulting in a hang. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: b7079df4100069959f4e9d90d5cb5ba7d4ebbf1a +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index 41cf015..1bff71a 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -220,7 +220,8 @@ static int curl_find_buf(BDRVCURLState *s, size_t start, size_t len, + } + + // Wait for unfinished chunks +- if ((start >= state->buf_start) && ++ if (state->in_use && ++ (start >= state->buf_start) && + (start <= buf_fend) && + (end >= state->buf_start) && + (end <= buf_fend)) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Fix-long-line.patch b/SOURCES/kvm-curl-Fix-long-line.patch new file mode 100644 index 0000000..0475741 --- /dev/null +++ b/SOURCES/kvm-curl-Fix-long-line.patch @@ -0,0 +1,42 @@ +From 4df5e14e48bd02ea2b6414d1e8ea105ab510dccd Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:09 +0200 +Subject: [PATCH 09/30] curl: Fix long line + +Message-id: <1434022828-13037-3-git-send-email-rjones@redhat.com> +Patchwork-id: 65837 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 02/21] curl: Fix long line +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: f6246509be602369cfa1250965e1e62a0c62c99f +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index a877dea..f69e337 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -243,7 +243,8 @@ static void curl_multi_do(void *arg) + case CURLMSG_DONE: + { + CURLState *state = NULL; +- curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, (char**)&state); ++ curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, ++ (char **)&state); + + /* ACBs for successful messages get completed in curl_read_cb */ + if (msg->data.result != CURLE_OK) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Fix-return-from-curl_read_cb-with-invalid-state.patch b/SOURCES/kvm-curl-Fix-return-from-curl_read_cb-with-invalid-state.patch new file mode 100644 index 0000000..5431dcb --- /dev/null +++ b/SOURCES/kvm-curl-Fix-return-from-curl_read_cb-with-invalid-state.patch @@ -0,0 +1,53 @@ +From 331b54ab7f261fd24844f7345aaaad03ef474e7e Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:11 +0200 +Subject: [PATCH 11/30] curl: Fix return from curl_read_cb with invalid state + +Message-id: <1434022828-13037-5-git-send-email-rjones@redhat.com> +Patchwork-id: 65839 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 04/21] curl: Fix return from curl_read_cb with invalid state +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +A curl write callback is supposed to return the number of bytes it +handled. curl_read_cb would have erroneously reported it had handled +all bytes in the event that the internal curl state was invalid. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: 38bbc0a580f9f10570b1d1b5d3e92f0e6feb2970 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index d399e3a..8c707e1 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -132,7 +132,7 @@ static size_t curl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque) + DPRINTF("CURL: Just reading %zd bytes\n", realsize); + + if (!s || !s->orig_buf) +- goto read_end; ++ return 0; + + if (s->buf_off >= s->buf_len) { + /* buffer full, read nothing */ +@@ -157,7 +157,6 @@ static size_t curl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque) + } + } + +-read_end: + return realsize; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Handle-failure-for-potentially-large-allocation.patch b/SOURCES/kvm-curl-Handle-failure-for-potentially-large-allocation.patch new file mode 100644 index 0000000..c0e6daf --- /dev/null +++ b/SOURCES/kvm-curl-Handle-failure-for-potentially-large-allocation.patch @@ -0,0 +1,53 @@ +From e7ec271f6886eb7c37e200309d677a0f4dc32efe Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:24 +0200 +Subject: [PATCH 24/30] curl: Handle failure for potentially large allocations + +Message-id: <1434022828-13037-18-git-send-email-rjones@redhat.com> +Patchwork-id: 65852 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 17/21] curl: Handle failure for potentially large allocations +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Kevin Wolf + +Some code in the block layer makes potentially huge allocations. Failure +is not completely unexpected there, so avoid aborting qemu and handle +out-of-memory situations gracefully. + +This patch addresses the allocations in the curl block driver. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Benoit Canet + +Upstream-status: 8dc7a7725bd6db2aa7e3c09b49bc21a1a25f40cb +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index d95789a..2486449 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -618,7 +618,13 @@ static void curl_readv_bh_cb(void *p) + state->buf_start = start; + state->buf_len = acb->end + s->readahead_size; + end = MIN(start + state->buf_len, s->len) - 1; +- state->orig_buf = g_malloc(state->buf_len); ++ state->orig_buf = g_try_malloc(state->buf_len); ++ if (state->buf_len && state->orig_buf == NULL) { ++ curl_clean_state(state); ++ acb->common.cb(acb->common.opaque, -ENOMEM); ++ qemu_aio_release(acb); ++ return; ++ } + state->acb[0] = acb; + + snprintf(state->range, 127, "%zd-%zd", start, end); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Remove-broken-parsing-of-options-from-url.patch b/SOURCES/kvm-curl-Remove-broken-parsing-of-options-from-url.patch new file mode 100644 index 0000000..9ff8e88 --- /dev/null +++ b/SOURCES/kvm-curl-Remove-broken-parsing-of-options-from-url.patch @@ -0,0 +1,129 @@ +From d935f2a3eafd649a2b40c27c8b6f8536a2e486e5 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:20 +0200 +Subject: [PATCH 20/30] curl: Remove broken parsing of options from url + +Message-id: <1434022828-13037-14-git-send-email-rjones@redhat.com> +Patchwork-id: 65848 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 13/21] curl: Remove broken parsing of options from url +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +The block layer now supports a generic json syntax for passing option parameters +explicitly, making parsing of options from the url redundant. + +Signed-off-by: Matthew Booth +Signed-off-by: Kevin Wolf + +Upstream-status: e3542c67af4cb4fd90e3be912630be9acd97b9c0 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 52 ++++++++++------------------------------------------ + 1 file changed, 10 insertions(+), 42 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index be2d3f4..67ea05f 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -61,12 +61,15 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, + #define CURL_NUM_STATES 8 + #define CURL_NUM_ACB 8 + #define SECTOR_SIZE 512 +-#define READ_AHEAD_SIZE (256 * 1024) ++#define READ_AHEAD_DEFAULT (256 * 1024) + + #define FIND_RET_NONE 0 + #define FIND_RET_OK 1 + #define FIND_RET_WAIT 2 + ++#define CURL_BLOCK_OPT_URL "url" ++#define CURL_BLOCK_OPT_READAHEAD "readahead" ++ + struct BDRVCURLState; + + typedef struct CURLAIOCB { +@@ -411,43 +414,7 @@ static void curl_clean_state(CURLState *s) + static void curl_parse_filename(const char *filename, QDict *options, + Error **errp) + { +- +- #define RA_OPTSTR ":readahead=" +- char *file; +- char *ra; +- const char *ra_val; +- int parse_state = 0; +- +- file = g_strdup(filename); +- +- /* Parse a trailing ":readahead=#:" param, if present. */ +- ra = file + strlen(file) - 1; +- while (ra >= file) { +- if (parse_state == 0) { +- if (*ra == ':') { +- parse_state++; +- } else { +- break; +- } +- } else if (parse_state == 1) { +- if (*ra > '9' || *ra < '0') { +- char *opt_start = ra - strlen(RA_OPTSTR) + 1; +- if (opt_start > file && +- strncmp(opt_start, RA_OPTSTR, strlen(RA_OPTSTR)) == 0) { +- ra_val = ra + 1; +- ra -= strlen(RA_OPTSTR) - 1; +- *ra = '\0'; +- qdict_put(options, "readahead", qstring_from_str(ra_val)); +- } +- break; +- } +- } +- ra--; +- } +- +- qdict_put(options, "url", qstring_from_str(file)); +- +- g_free(file); ++ qdict_put(options, CURL_BLOCK_OPT_URL, qstring_from_str(filename)); + } + + static QemuOptsList runtime_opts = { +@@ -455,12 +422,12 @@ static QemuOptsList runtime_opts = { + .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), + .desc = { + { +- .name = "url", ++ .name = CURL_BLOCK_OPT_URL, + .type = QEMU_OPT_STRING, + .help = "URL to open", + }, + { +- .name = "readahead", ++ .name = CURL_BLOCK_OPT_READAHEAD, + .type = QEMU_OPT_SIZE, + .help = "Readahead size", + }, +@@ -488,14 +455,15 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + goto out_noclean; + } + +- s->readahead_size = qemu_opt_get_size(opts, "readahead", READ_AHEAD_SIZE); ++ s->readahead_size = qemu_opt_get_size(opts, CURL_BLOCK_OPT_READAHEAD, ++ READ_AHEAD_DEFAULT); + if ((s->readahead_size & 0x1ff) != 0) { + fprintf(stderr, "HTTP_READAHEAD_SIZE %zd is not a multiple of 512\n", + s->readahead_size); + goto out_noclean; + } + +- file = qemu_opt_get(opts, "url"); ++ file = qemu_opt_get(opts, CURL_BLOCK_OPT_URL); + if (file == NULL) { + qerror_report(ERROR_CLASS_GENERIC_ERROR, "curl block driver requires " + "an 'url' option"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Remove-erroneous-sleep-waiting-for-curl-complet.patch b/SOURCES/kvm-curl-Remove-erroneous-sleep-waiting-for-curl-complet.patch new file mode 100644 index 0000000..13f9958 --- /dev/null +++ b/SOURCES/kvm-curl-Remove-erroneous-sleep-waiting-for-curl-complet.patch @@ -0,0 +1,53 @@ +From 6313c97af86d08de7928433ab29ed4450f49c425 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:12 +0200 +Subject: [PATCH 12/30] curl: Remove erroneous sleep waiting for curl + completion + +Message-id: <1434022828-13037-6-git-send-email-rjones@redhat.com> +Patchwork-id: 65841 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 05/21] curl: Remove erroneous sleep waiting for curl completion +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +The driver will not start more than a fixed number of curl sessions. +If it needs more, it must wait for the completion of an existing one. +The driver was sleeping, which will prevent the main loop from +running, and therefore the event it's waiting on. It was also directly +calling its internal handler rather than waiting on existing +registered handlers to be called from the main loop. + +This change causes it simply to wait for a period of time whilst +allowing the main loop to execute. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: e466183718bfaaf347a3c02499473068a0072114 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index 8c707e1..e06c222 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -289,8 +289,7 @@ static CURLState *curl_init_state(BDRVCURLState *s) + break; + } + if (!state) { +- g_usleep(100); +- curl_multi_do(s); ++ qemu_aio_wait(); + } + } while(!state); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Remove-unnecessary-explicit-calls-to-internal-e.patch b/SOURCES/kvm-curl-Remove-unnecessary-explicit-calls-to-internal-e.patch new file mode 100644 index 0000000..31433fb --- /dev/null +++ b/SOURCES/kvm-curl-Remove-unnecessary-explicit-calls-to-internal-e.patch @@ -0,0 +1,66 @@ +From 3ed5149c2375201051e0e8d38146dffaa0452fcd Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:15 +0200 +Subject: [PATCH 15/30] curl: Remove unnecessary explicit calls to internal + event handler + +Message-id: <1434022828-13037-9-git-send-email-rjones@redhat.com> +Patchwork-id: 65843 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 08/21] curl: Remove unnecessary explicit calls to internal event handler +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +Remove calls to curl_multi_do where the relevant handles are already +registered to the event loop. + +Ensure that we kick off socket handling with CURL_SOCKET_TIMEOUT after +adding a new handle. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: b69cdef876340624bb40a2054d14f298471a40a6 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index a6631fe..e4332c5 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -523,7 +523,6 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + curl_multi_setopt(s->multi, CURLMOPT_TIMERDATA, s); + curl_multi_setopt(s->multi, CURLMOPT_TIMERFUNCTION, curl_timer_cb); + #endif +- curl_multi_do(s); + + qemu_opts_del(opts); + return 0; +@@ -567,6 +566,7 @@ static const AIOCBInfo curl_aiocb_info = { + static void curl_readv_bh_cb(void *p) + { + CURLState *state; ++ int running; + + CURLAIOCB *acb = p; + BDRVCURLState *s = acb->common.bs->opaque; +@@ -615,8 +615,9 @@ static void curl_readv_bh_cb(void *p) + curl_easy_setopt(state->curl, CURLOPT_RANGE, state->range); + + curl_multi_add_handle(s->multi, state->curl); +- curl_multi_do(s); + ++ /* Tell curl it needs to kick things off */ ++ curl_multi_socket_action(s->multi, CURL_SOCKET_TIMEOUT, 0, &running); + } + + static BlockDriverAIOCB *curl_aio_readv(BlockDriverState *bs, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Remove-unnecessary-use-of-goto.patch b/SOURCES/kvm-curl-Remove-unnecessary-use-of-goto.patch new file mode 100644 index 0000000..adc9b07 --- /dev/null +++ b/SOURCES/kvm-curl-Remove-unnecessary-use-of-goto.patch @@ -0,0 +1,101 @@ +From d34f673f0d08eff0dce82db232574fe4b5e9ed95 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:10 +0200 +Subject: [PATCH 10/30] curl: Remove unnecessary use of goto + +Message-id: <1434022828-13037-4-git-send-email-rjones@redhat.com> +Patchwork-id: 65838 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 03/21] curl: Remove unnecessary use of goto +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Matthew Booth + +This isn't any of the usually acceptable uses of goto. + +Signed-off-by: Matthew Booth +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf + +Upstream-status: 9e550b326076caf4a1756b77eee95ad60b4adc27 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 55 +++++++++++++++++++++++++++---------------------------- + 1 file changed, 27 insertions(+), 28 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index f69e337..d399e3a 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -295,39 +295,38 @@ static CURLState *curl_init_state(BDRVCURLState *s) + } + } while(!state); + +- if (state->curl) +- goto has_curl; +- +- state->curl = curl_easy_init(); +- if (!state->curl) +- return NULL; +- curl_easy_setopt(state->curl, CURLOPT_URL, s->url); +- curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, 5); +- curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, (void *)curl_read_cb); +- curl_easy_setopt(state->curl, CURLOPT_WRITEDATA, (void *)state); +- curl_easy_setopt(state->curl, CURLOPT_PRIVATE, (void *)state); +- curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1); +- curl_easy_setopt(state->curl, CURLOPT_FOLLOWLOCATION, 1); +- curl_easy_setopt(state->curl, CURLOPT_NOSIGNAL, 1); +- curl_easy_setopt(state->curl, CURLOPT_ERRORBUFFER, state->errmsg); +- curl_easy_setopt(state->curl, CURLOPT_FAILONERROR, 1); +- +- /* Restrict supported protocols to avoid security issues in the more +- * obscure protocols. For example, do not allow POP3/SMTP/IMAP see +- * CVE-2013-0249. +- * +- * Restricting protocols is only supported from 7.19.4 upwards. +- */ ++ if (!state->curl) { ++ state->curl = curl_easy_init(); ++ if (!state->curl) { ++ return NULL; ++ } ++ curl_easy_setopt(state->curl, CURLOPT_URL, s->url); ++ curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, 5); ++ curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, ++ (void *)curl_read_cb); ++ curl_easy_setopt(state->curl, CURLOPT_WRITEDATA, (void *)state); ++ curl_easy_setopt(state->curl, CURLOPT_PRIVATE, (void *)state); ++ curl_easy_setopt(state->curl, CURLOPT_AUTOREFERER, 1); ++ curl_easy_setopt(state->curl, CURLOPT_FOLLOWLOCATION, 1); ++ curl_easy_setopt(state->curl, CURLOPT_NOSIGNAL, 1); ++ curl_easy_setopt(state->curl, CURLOPT_ERRORBUFFER, state->errmsg); ++ curl_easy_setopt(state->curl, CURLOPT_FAILONERROR, 1); ++ ++ /* Restrict supported protocols to avoid security issues in the more ++ * obscure protocols. For example, do not allow POP3/SMTP/IMAP see ++ * CVE-2013-0249. ++ * ++ * Restricting protocols is only supported from 7.19.4 upwards. ++ */ + #if LIBCURL_VERSION_NUM >= 0x071304 +- curl_easy_setopt(state->curl, CURLOPT_PROTOCOLS, PROTOCOLS); +- curl_easy_setopt(state->curl, CURLOPT_REDIR_PROTOCOLS, PROTOCOLS); ++ curl_easy_setopt(state->curl, CURLOPT_PROTOCOLS, PROTOCOLS); ++ curl_easy_setopt(state->curl, CURLOPT_REDIR_PROTOCOLS, PROTOCOLS); + #endif + + #ifdef DEBUG_VERBOSE +- curl_easy_setopt(state->curl, CURLOPT_VERBOSE, 1); ++ curl_easy_setopt(state->curl, CURLOPT_VERBOSE, 1); + #endif +- +-has_curl: ++ } + + state->s = s; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Replaced-old-error-handling-with-error-reportin.patch b/SOURCES/kvm-curl-Replaced-old-error-handling-with-error-reportin.patch new file mode 100644 index 0000000..a366198 --- /dev/null +++ b/SOURCES/kvm-curl-Replaced-old-error-handling-with-error-reportin.patch @@ -0,0 +1,42 @@ +From 7074c0e6d1de6b9861e176ea70a2f16cd7a93df1 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:08 +0200 +Subject: [PATCH 08/30] curl: Replaced old error handling with error reporting + API. + +Message-id: <1434022828-13037-2-git-send-email-rjones@redhat.com> +Patchwork-id: 65836 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 01/21] curl: Replaced old error handling with error reporting API. +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Maria Kustova + +Signed-off-by: Maria Kustova +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf + +Upstream-status: acd7fdc6d80711371d7a1507a22438d9465da63c) +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index b3d948e..a877dea 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -476,7 +476,7 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + return 0; + + out: +- fprintf(stderr, "CURL: Error opening file: %s\n", state->errmsg); ++ error_setg(errp, "CURL: Error opening file: %s", state->errmsg); + curl_easy_cleanup(state->curl); + state->curl = NULL; + out_noclean: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-The-macro-that-you-have-to-uncomment-to-get-deb.patch b/SOURCES/kvm-curl-The-macro-that-you-have-to-uncomment-to-get-deb.patch new file mode 100644 index 0000000..2329bda --- /dev/null +++ b/SOURCES/kvm-curl-The-macro-that-you-have-to-uncomment-to-get-deb.patch @@ -0,0 +1,41 @@ +From 65b21896d630af97cc50e24550516b3e76a30039 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:27 +0200 +Subject: [PATCH 27/30] curl: The macro that you have to uncomment to get + debugging is DEBUG_CURL. + +Message-id: <1434022828-13037-21-git-send-email-rjones@redhat.com> +Patchwork-id: 65855 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 20/21] curl: The macro that you have to uncomment to get debugging is DEBUG_CURL. +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: "Richard W.M. Jones" + +Signed-off-by: Richard W.M. Jones +Signed-off-by: Michael Tokarev + +Upstream-status: 41c2346716ff41df78062753128a87124f78ea29 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/curl.c b/block/curl.c +index ca881ee..5b407aa 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -26,7 +26,7 @@ + #include "qapi/qmp/qbool.h" + #include + +-// #define DEBUG ++// #define DEBUG_CURL + // #define DEBUG_VERBOSE + + #ifdef DEBUG_CURL +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-Whitespace-only-changes.patch b/SOURCES/kvm-curl-Whitespace-only-changes.patch new file mode 100644 index 0000000..eb9c181 --- /dev/null +++ b/SOURCES/kvm-curl-Whitespace-only-changes.patch @@ -0,0 +1,44 @@ +From 5f3e36a4b2e3cc0591913778fcce9ee56f3292ac Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:13 +0200 +Subject: [PATCH 13/30] curl: Whitespace only changes. + +Message-id: <1434022828-13037-7-git-send-email-rjones@redhat.com> +Patchwork-id: 65840 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 06/21] curl: Whitespace only changes. +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: "Richard W.M. Jones" + +Trivial patch to remove odd whitespace. + +Signed-off-by: Richard W.M. Jones +Signed-off-by: Michael Tokarev + +Upstream-status: 9e5e2b23d301b1562677c6c115165eed6ce20a68 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index e06c222..7569dd5 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -466,8 +466,8 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + // initialize the multi interface! + + s->multi = curl_multi_init(); +- curl_multi_setopt( s->multi, CURLMOPT_SOCKETDATA, s); +- curl_multi_setopt( s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb ); ++ curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s); ++ curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb); + curl_multi_do(s); + + qemu_opts_del(opts); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-curl-check-data-size-before-memcpy-to-local-buffer.-.patch b/SOURCES/kvm-curl-check-data-size-before-memcpy-to-local-buffer.-.patch new file mode 100644 index 0000000..161079f --- /dev/null +++ b/SOURCES/kvm-curl-check-data-size-before-memcpy-to-local-buffer.-.patch @@ -0,0 +1,50 @@ +From e64c6e9054f97e5894d875380d241124d8f0bcc9 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 25 Mar 2014 14:23:26 +0100 +Subject: [PATCH 19/49] curl: check data size before memcpy to local buffer. (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-20-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 19/48] curl: check data size before memcpy to local buffer. (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Fam Zheng + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +curl_read_cb is callback function for libcurl when data arrives. The +data size passed in here is not guaranteed to be within the range of +request we submitted, so we may overflow the guest IO buffer. Check the +real size we have before memcpy to buffer to avoid overflow. + +Signed-off-by: Fam Zheng +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/curl.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index 1b0fcf1..b3d948e 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -134,6 +134,11 @@ static size_t curl_read_cb(void *ptr, size_t size, size_t nmemb, void *opaque) + if (!s || !s->orig_buf) + goto read_end; + ++ if (s->buf_off >= s->buf_len) { ++ /* buffer full, read nothing */ ++ return 0; ++ } ++ realsize = MIN(realsize, s->buf_len - s->buf_off); + memcpy(s->orig_buf + s->buf_off, ptr, realsize); + s->buf_off += realsize; + +-- +1.7.1 + diff --git a/SOURCES/kvm-curl-refuse-to-open-URL-from-HTTP-server-without-ran.patch b/SOURCES/kvm-curl-refuse-to-open-URL-from-HTTP-server-without-ran.patch new file mode 100644 index 0000000..731c1b8 --- /dev/null +++ b/SOURCES/kvm-curl-refuse-to-open-URL-from-HTTP-server-without-ran.patch @@ -0,0 +1,112 @@ +From cb2dd196bc247db6a40ea2847f86b63e9a923351 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Thu, 11 Jun 2015 11:40:21 +0200 +Subject: [PATCH 21/30] curl: refuse to open URL from HTTP server without range + support + +Message-id: <1434022828-13037-15-git-send-email-rjones@redhat.com> +Patchwork-id: 65849 +O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 14/21] curl: refuse to open URL from HTTP server without range support +Bugzilla: 1226684 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: Fam Zheng + +CURL driver requests partial data from server on guest IO req. For HTTP +and HTTPS, it uses "Range: ***" in requests, and this will not work if +server not accepting range. This patch does this check when open. + + * Removed curl_size_cb, which is not used: On one hand it's registered to + libcurl as CURLOPT_WRITEFUNCTION, instead of CURLOPT_HEADERFUNCTION, + which will get called with *data*, not *header*. On the other hand the + s->len is assigned unconditionally later. + + In this gone function, the sscanf for "Content-Length: %zd", on + (void *)ptr, which is not guaranteed to be zero-terminated, is + potentially a security bug. So this patch fixes it as a side-effect. The + bug is reported as: https://bugs.launchpad.net/qemu/+bug/1188943 + (Note the bug is marked "private" so you might not be able to see it) + + * Introduced curl_header_cb, which is used to parse header and mark the + server as accepting range if "Accept-Ranges: bytes" line is seen from + response header. If protocol is HTTP or HTTPS, but server response has + no not this support, refuse to open this URL. + +Note that python builtin module SimpleHTTPServer is an example of not +supporting range, if you need to test this driver, get a better server +or use internet URLs. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 3494d650273e619606c6cb2c38aa9b8b7bed98e2 +Signed-off-by: Miroslav Rezanina +--- + block/curl.c | 24 ++++++++++++++++++------ + 1 file changed, 18 insertions(+), 6 deletions(-) + +diff --git a/block/curl.c b/block/curl.c +index 67ea05f..e97682f 100644 +--- a/block/curl.c ++++ b/block/curl.c +@@ -106,6 +106,7 @@ typedef struct BDRVCURLState { + CURLState states[CURL_NUM_STATES]; + char *url; + size_t readahead_size; ++ bool accept_range; + } BDRVCURLState; + + static void curl_clean_state(CURLState *s); +@@ -157,14 +158,15 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action, + return 0; + } + +-static size_t curl_size_cb(void *ptr, size_t size, size_t nmemb, void *opaque) ++static size_t curl_header_cb(void *ptr, size_t size, size_t nmemb, void *opaque) + { +- CURLState *s = ((CURLState*)opaque); ++ BDRVCURLState *s = opaque; + size_t realsize = size * nmemb; +- size_t fsize; ++ const char *accept_line = "Accept-Ranges: bytes"; + +- if(sscanf(ptr, "Content-Length: %zd", &fsize) == 1) { +- s->s->len = fsize; ++ if (realsize >= strlen(accept_line) ++ && strncmp((char *)ptr, accept_line, strlen(accept_line)) == 0) { ++ s->accept_range = true; + } + + return realsize; +@@ -483,8 +485,11 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + + // Get file size + ++ s->accept_range = false; + curl_easy_setopt(state->curl, CURLOPT_NOBODY, 1); +- curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, (void *)curl_size_cb); ++ curl_easy_setopt(state->curl, CURLOPT_HEADERFUNCTION, ++ curl_header_cb); ++ curl_easy_setopt(state->curl, CURLOPT_HEADERDATA, s); + if (curl_easy_perform(state->curl)) + goto out; + curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d); +@@ -494,6 +499,13 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, + s->len = (size_t)d; + else if(!s->len) + goto out; ++ if ((!strncasecmp(s->url, "http://", strlen("http://")) ++ || !strncasecmp(s->url, "https://", strlen("https://"))) ++ && !s->accept_range) { ++ pstrcpy(state->errmsg, CURL_ERROR_SIZE, ++ "Server does not support 'range' (byte ranges)."); ++ goto out; ++ } + DPRINTF("CURL: Size = %zd\n", s->len); + + curl_clean_state(state); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-cutils-Support-P-and-E-suffixes-in-strtosz.patch b/SOURCES/kvm-cutils-Support-P-and-E-suffixes-in-strtosz.patch new file mode 100644 index 0000000..d5937c8 --- /dev/null +++ b/SOURCES/kvm-cutils-Support-P-and-E-suffixes-in-strtosz.patch @@ -0,0 +1,132 @@ +From b7cea737b24456765a21ed43ebd9b68ebbbf3537 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:21 +0100 +Subject: [PATCH 02/27] cutils: Support 'P' and 'E' suffixes in strtosz() + +RH-Author: John Snow +Message-id: <1448300320-7772-3-git-send-email-jsnow@redhat.com> +Patchwork-id: 68430 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 02/21] cutils: Support 'P' and 'E' suffixes in strtosz() +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5e00984aef7c1c317e27c0e8acf66526513c770f) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + include/qemu-common.h | 2 ++ + monitor.c | 8 ++++---- + qemu-img.c | 10 ++++++---- + tests/qemu-iotests/049.out | 8 ++++---- + util/cutils.c | 4 ++++ + 5 files changed, 20 insertions(+), 12 deletions(-) + +diff --git a/include/qemu-common.h b/include/qemu-common.h +index aee85e3..67f57c9 100644 +--- a/include/qemu-common.h ++++ b/include/qemu-common.h +@@ -178,6 +178,8 @@ int parse_uint_full(const char *s, unsigned long long *value, int base); + * A-Z, as strtosz() will use qemu_toupper() on the given argument + * prior to comparison. + */ ++#define STRTOSZ_DEFSUFFIX_EB 'E' ++#define STRTOSZ_DEFSUFFIX_PB 'P' + #define STRTOSZ_DEFSUFFIX_TB 'T' + #define STRTOSZ_DEFSUFFIX_GB 'G' + #define STRTOSZ_DEFSUFFIX_MB 'M' +diff --git a/monitor.c b/monitor.c +index 6a1d06e..33c5bc8 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -94,10 +94,10 @@ + * 'M' Non-negative target long (32 or 64 bit), in user mode the + * value is multiplied by 2^20 (think Mebibyte) + * 'o' octets (aka bytes) +- * user mode accepts an optional T, t, G, g, M, m, K, k +- * suffix, which multiplies the value by 2^40 for +- * suffixes T and t, 2^30 for suffixes G and g, 2^20 for +- * M and m, 2^10 for K and k ++ * user mode accepts an optional E, e, P, p, T, t, G, g, M, m, ++ * K, k suffix, which multiplies the value by 2^60 for suffixes E ++ * and e, 2^50 for suffixes P and p, 2^40 for suffixes T and t, ++ * 2^30 for suffixes G and g, 2^20 for M and m, 2^10 for K and k + * 'T' double + * user mode accepts an optional ms, us, ns suffix, + * which divides the value by 1e3, 1e6, 1e9, respectively +diff --git a/qemu-img.c b/qemu-img.c +index 9c021e7..eb2d4cb 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -87,8 +87,9 @@ static void help(void) + " 'src_cache' is the cache mode used to read input disk images, the valid\n" + " options are the same as for the 'cache' option\n" + " 'size' is the disk image size in bytes. Optional suffixes\n" +- " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M)\n" +- " and T (terabyte, 1024G) are supported. 'b' is ignored.\n" ++ " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),\n" ++ " 'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P) are\n" ++ " supported. 'b' is ignored.\n" + " 'output_filename' is the destination disk image filename\n" + " 'output_fmt' is the destination format\n" + " 'options' is a comma separated list of format specific options in a\n" +@@ -417,8 +418,9 @@ static int img_create(int argc, char **argv) + error_report("Image size must be less than 8 EiB!"); + } else { + error_report("Invalid image size specified! You may use k, M, " +- "G or T suffixes for "); +- error_report("kilobytes, megabytes, gigabytes and terabytes."); ++ "G, T, P or E suffixes for "); ++ error_report("kilobytes, megabytes, gigabytes, terabytes, " ++ "petabytes and exabytes."); + } + goto fail; + } +diff --git a/tests/qemu-iotests/049.out b/tests/qemu-iotests/049.out +index b2fcf0b..3e56772 100644 +--- a/tests/qemu-iotests/049.out ++++ b/tests/qemu-iotests/049.out +@@ -108,15 +108,15 @@ qemu-img: TEST_DIR/t.qcow2: Could not resize image: Operation not supported + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=-1024 encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- 1kilobyte +-qemu-img: Invalid image size specified! You may use k, M, G or T suffixes for +-qemu-img: kilobytes, megabytes, gigabytes and terabytes. ++qemu-img: Invalid image size specified! You may use k, M, G, T, P or E suffixes for ++qemu-img: kilobytes, megabytes, gigabytes, terabytes, petabytes and exabytes. + + qemu-img create -f qcow2 -o size=1kilobyte TEST_DIR/t.qcow2 + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=1024 encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- foobar +-qemu-img: Invalid image size specified! You may use k, M, G or T suffixes for +-qemu-img: kilobytes, megabytes, gigabytes and terabytes. ++qemu-img: Invalid image size specified! You may use k, M, G, T, P or E suffixes for ++qemu-img: kilobytes, megabytes, gigabytes, terabytes, petabytes and exabytes. + + qemu-img create -f qcow2 -o size=foobar TEST_DIR/t.qcow2 + qemu-img: Parameter 'size' expects a size +diff --git a/util/cutils.c b/util/cutils.c +index a165819..8f28896 100644 +--- a/util/cutils.c ++++ b/util/cutils.c +@@ -267,6 +267,10 @@ static int64_t suffix_mul(char suffix, int64_t unit) + return unit * unit * unit; + case STRTOSZ_DEFSUFFIX_TB: + return unit * unit * unit * unit; ++ case STRTOSZ_DEFSUFFIX_PB: ++ return unit * unit * unit * unit * unit; ++ case STRTOSZ_DEFSUFFIX_EB: ++ return unit * unit * unit * unit * unit * unit; + } + return -1; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dataplane-Fix-startup-race.patch b/SOURCES/kvm-dataplane-Fix-startup-race.patch new file mode 100644 index 0000000..9ae32ec --- /dev/null +++ b/SOURCES/kvm-dataplane-Fix-startup-race.patch @@ -0,0 +1,101 @@ +From f1ae5247cd1de4374905421e105d371aea6d7c75 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Wed, 5 Mar 2014 14:15:03 +0100 +Subject: [PATCH 01/16] dataplane: Fix startup race. + +RH-Author: Stefan Hajnoczi +Message-id: <1394028903-5087-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 58018 +O-Subject: [RHEL7 qemu-kvm PATCH] dataplane: Fix startup race. +Bugzilla: 1069541 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Cornelia Huck + +Bugzilla: 1069541 +Upstream: 8caf907f07688972e5e7cd11526079b1665d6dba +BREW: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7144761 + +Avoid trying to setup dataplane again if dataplane setup is already in +progress. This may happen if an eventfd is triggered during setup. + +I saw this occasionally with an experimental s390 irqfd implementation: + +virtio_blk_handle_output +-> virtio_blk_data_plane_start +-> virtio_ccw_set_host_notifier +... +-> virtio_queue_set_host_notifier_fd_handler +-> virtio_queue_host_notifier_read +-> virtio_queue_notify_vq +-> virtio_blk_handle_output +-> virtio_blk_data_plane_start +-> vring_setup +-> hostmem_init +-> memory_listener_register +-> BOOM + +As virtio-ccw tries to follow what virtio-pci does, it might be triggerable +for other platforms as well. + +Signed-off-by: Cornelia Huck +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8caf907f07688972e5e7cd11526079b1665d6dba) +Signed-off-by: Stefan Hajnoczi +--- +[----] : patches are identical +[####] : number of functional differences between upstream/downstream patch +[down] : patch is downstream-only +The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively + +001/1:[----] [-C] 'dataplane: Fix startup race.' + + hw/block/dataplane/virtio-blk.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/dataplane/virtio-blk.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c +index 411becc..0b002ba 100644 +--- a/hw/block/dataplane/virtio-blk.c ++++ b/hw/block/dataplane/virtio-blk.c +@@ -42,6 +42,7 @@ typedef struct { + + struct VirtIOBlockDataPlane { + bool started; ++ bool starting; + bool stopping; + QEMUBH *start_bh; + QemuThread thread; +@@ -464,8 +465,15 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s) + return; + } + ++ if (s->starting) { ++ return; ++ } ++ ++ s->starting = true; ++ + vq = virtio_get_queue(s->vdev, 0); + if (!vring_setup(&s->vring, s->vdev, 0)) { ++ s->starting = false; + return; + } + +@@ -495,6 +503,7 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s) + s->io_notifier = *ioq_get_notifier(&s->ioqueue); + aio_set_event_notifier(s->ctx, &s->io_notifier, handle_io, flush_io); + ++ s->starting = false; + s->started = true; + trace_virtio_blk_data_plane_start(s); + +-- +1.7.1 + diff --git a/SOURCES/kvm-dataplane-enable-virtio-blk-x-data-plane-on-live-migration.patch b/SOURCES/kvm-dataplane-enable-virtio-blk-x-data-plane-on-live-migration.patch new file mode 100644 index 0000000..fd4ab49 --- /dev/null +++ b/SOURCES/kvm-dataplane-enable-virtio-blk-x-data-plane-on-live-migration.patch @@ -0,0 +1,145 @@ +From 714d313805542063ea68e26a0d47b5059ee9952e Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 13 Aug 2013 09:06:36 +0200 +Subject: dataplane: enable virtio-blk x-data-plane=on live migration + +RH-Author: Stefan Hajnoczi +Message-id: <1376384797-4701-6-git-send-email-stefanha@redhat.com> +Patchwork-id: 53210 +O-Subject: [PATCH v2 5/6] dataplane: enable virtio-blk x-data-plane=on live migration +Bugzilla: 995030 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Michael S. Tsirkin + +Although the dataplane thread does not cooperate with dirty memory +logging yet it's fairly easy to temporarily disable dataplane during +live migration. This way virtio-blk can live migrate when +x-data-plane=on. + +The dataplane thread will restart after migration is cancelled or if the +guest resuming virtio-blk operation after migration completes. + +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 84db52d059f3296abf7783968645c4a96d21b099) + +Signed-off-by: Stefan Hajnoczi + +diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c +index 2faed43..63c3ffa 100644 +--- a/hw/block/dataplane/virtio-blk.c ++++ b/hw/block/dataplane/virtio-blk.c +@@ -18,7 +18,6 @@ + #include "qemu/error-report.h" + #include "hw/virtio/dataplane/vring.h" + #include "ioq.h" +-#include "migration/migration.h" + #include "block/block.h" + #include "hw/virtio/virtio-blk.h" + #include "virtio-blk.h" +@@ -69,8 +68,6 @@ struct VirtIOBlockDataPlane { + queue */ + + unsigned int num_reqs; +- +- Error *migration_blocker; + }; + + /* Raise an interrupt to signal guest, if necessary */ +@@ -433,10 +430,6 @@ bool virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, + /* Prevent block operations that conflict with data plane thread */ + bdrv_set_in_use(blk->conf.bs, 1); + +- error_setg(&s->migration_blocker, +- "x-data-plane does not support migration"); +- migrate_add_blocker(s->migration_blocker); +- + *dataplane = s; + return true; + } +@@ -448,8 +441,6 @@ void virtio_blk_data_plane_destroy(VirtIOBlockDataPlane *s) + } + + virtio_blk_data_plane_stop(s); +- migrate_del_blocker(s->migration_blocker); +- error_free(s->migration_blocker); + bdrv_set_in_use(s->blk->conf.bs, 0); + g_free(s); + } +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index cf12469..cca0c77 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -19,6 +19,7 @@ + #include "hw/virtio/virtio-blk.h" + #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + # include "dataplane/virtio-blk.h" ++# include "migration/migration.h" + #endif + #include "block/scsi.h" + #ifdef __linux__ +@@ -628,6 +629,34 @@ void virtio_blk_set_conf(DeviceState *dev, VirtIOBlkConf *blk) + memcpy(&(s->blk), blk, sizeof(struct VirtIOBlkConf)); + } + ++#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE ++/* Disable dataplane thread during live migration since it does not ++ * update the dirty memory bitmap yet. ++ */ ++static void virtio_blk_migration_state_changed(Notifier *notifier, void *data) ++{ ++ VirtIOBlock *s = container_of(notifier, VirtIOBlock, ++ migration_state_notifier); ++ MigrationState *mig = data; ++ ++ if (migration_is_active(mig)) { ++ if (!s->dataplane) { ++ return; ++ } ++ virtio_blk_data_plane_destroy(s->dataplane); ++ s->dataplane = NULL; ++ } else if (migration_has_finished(mig) || ++ migration_has_failed(mig)) { ++ if (s->dataplane) { ++ return; ++ } ++ bdrv_drain_all(); /* complete in-flight non-dataplane requests */ ++ virtio_blk_data_plane_create(VIRTIO_DEVICE(s), &s->blk, ++ &s->dataplane); ++ } ++} ++#endif /* CONFIG_VIRTIO_BLK_DATA_PLANE */ ++ + static int virtio_blk_device_init(VirtIODevice *vdev) + { + DeviceState *qdev = DEVICE(vdev); +@@ -664,6 +693,8 @@ static int virtio_blk_device_init(VirtIODevice *vdev) + virtio_cleanup(vdev); + return -1; + } ++ s->migration_state_notifier.notify = virtio_blk_migration_state_changed; ++ add_migration_state_change_notifier(&s->migration_state_notifier); + #endif + + s->change = qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s); +@@ -683,6 +714,7 @@ static int virtio_blk_device_exit(DeviceState *dev) + VirtIODevice *vdev = VIRTIO_DEVICE(dev); + VirtIOBlock *s = VIRTIO_BLK(dev); + #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE ++ remove_migration_state_change_notifier(&s->migration_state_notifier); + virtio_blk_data_plane_destroy(s->dataplane); + s->dataplane = NULL; + #endif +diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h +index fc71853..b87cf49 100644 +--- a/include/hw/virtio/virtio-blk.h ++++ b/include/hw/virtio/virtio-blk.h +@@ -125,6 +125,7 @@ typedef struct VirtIOBlock { + unsigned short sector_mask; + VMChangeStateEntry *change; + #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE ++ Notifier migration_state_notifier; + struct VirtIOBlockDataPlane *dataplane; + #endif + } VirtIOBlock; diff --git a/SOURCES/kvm-devices-Associate-devices-to-their-logical-category.patch b/SOURCES/kvm-devices-Associate-devices-to-their-logical-category.patch new file mode 100644 index 0000000..ea78e15 --- /dev/null +++ b/SOURCES/kvm-devices-Associate-devices-to-their-logical-category.patch @@ -0,0 +1,1848 @@ +From 2fecbf68b60416c352ded3ea496028b477cce6b4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:09 +0100 +Subject: [PATCH 33/81] devices: Associate devices to their logical category + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 55530 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 04/17] devices: Associate devices to their logical category +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Marcel Apfelbaum + +The category will be used to sort the devices displayed in +the command line help. + +Signed-off-by: Marcel Apfelbaum +Message-id: 1375107465-25767-4-git-send-email-marcel.a@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 125ee0ed9cad04307498ac2b7b0d51ad8a807360) + +Conflicts: + hw/audio/adlib.c + hw/audio/cs4231a.c + hw/audio/gus.c + hw/audio/pcspk.c + hw/audio/sb16.c + hw/block/nvme.c + hw/misc/pc-testdev.c + hw/misc/sga.c + hw/pci-bridge/i82801b11.c + hw/usb/hcd-ehci-sysbus.c + hw/usb/hcd-ohci.c + hw/virtio/virtio-mmio.c + +Trivial conflicts in + +* ISA devices because we don't have commit db895a1 "isa: Use realizefn + for ISADevice" + +* i82801b11.c because we backported commit 4965b7f out of order, as + commit ccf2798 + +* hcd-ehci-sysbus because we don't have commit 20c5704 "usb/hcd-ehci: + Add Tegra2 SysBus EHCI device" and commit 4e3d8b4 "usb/hcd-ehci: Add + Faraday FUSBH200 support" + +* hcd-ohci.c because we don't have commit 457215e "ohci: Use QOM + realize for OHCI" + +* nvme.c and virtio-mmio.c because we don't have them +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + hw/9pfs/virtio-9p-device.c | 1 + + hw/audio/ac97.c | 1 + + hw/audio/adlib.c | 1 + + hw/audio/cs4231a.c | 1 + + hw/audio/es1370.c | 1 + + hw/audio/gus.c | 1 + + hw/audio/hda-codec.c | 3 +++ + hw/audio/intel-hda.c | 3 +++ + hw/audio/pcspk.c | 1 + + hw/audio/pl041.c | 1 + + hw/audio/sb16.c | 1 + + hw/block/fdc.c | 3 +++ + hw/block/pc_sysfw.c | 1 + + hw/block/pflash_cfi01.c | 1 + + hw/block/virtio-blk.c | 1 + + hw/char/debugcon.c | 1 + + hw/char/imx_serial.c | 1 + + hw/char/ipack.c | 1 + + hw/char/ipoctal232.c | 1 + + hw/char/parallel.c | 1 + + hw/char/serial-isa.c | 1 + + hw/char/serial-pci.c | 3 +++ + hw/char/tpci200.c | 1 + + hw/char/virtio-serial-bus.c | 2 ++ + hw/cpu/icc_bus.c | 8 ++++++++ + hw/display/cirrus_vga.c | 2 ++ + hw/display/g364fb.c | 1 + + hw/display/pl110.c | 3 +++ + hw/display/qxl.c | 2 ++ + hw/display/vga-isa.c | 1 + + hw/display/vga-pci.c | 1 + + hw/display/vmware_vga.c | 1 + + hw/i2c/bitbang_i2c.c | 1 + + hw/i2c/core.c | 1 + + hw/i386/kvm/pci-assign.c | 1 + + hw/ide/ahci.c | 1 + + hw/ide/ich.c | 1 + + hw/ide/isa.c | 1 + + hw/ide/piix.c | 3 +++ + hw/ide/qdev.c | 1 + + hw/ide/via.c | 1 + + hw/isa/i82378.c | 1 + + hw/isa/lpc_ich9.c | 1 + + hw/isa/vt82c686.c | 3 +++ + hw/misc/applesmc.c | 1 + + hw/misc/debugexit.c | 1 + + hw/misc/ivshmem.c | 1 + + hw/misc/pc-testdev.c | 2 ++ + hw/misc/pci-testdev.c | 1 + + hw/misc/sga.c | 1 + + hw/misc/vfio.c | 1 + + hw/net/e1000.c | 1 + + hw/net/eepro100.c | 1 + + hw/net/lance.c | 1 + + hw/net/mipsnet.c | 1 + + hw/net/ne2000-isa.c | 1 + + hw/net/ne2000.c | 1 + + hw/net/opencores_eth.c | 1 + + hw/net/pcnet-pci.c | 1 + + hw/net/rtl8139.c | 1 + + hw/net/virtio-net.c | 1 + + hw/net/vmxnet3.c | 1 + + hw/pci-bridge/i82801b11.c | 2 ++ + hw/pci-bridge/ioh3420.c | 1 + + hw/pci-bridge/pci_bridge_dev.c | 1 + + hw/pci-bridge/xio3130_downstream.c | 1 + + hw/pci-bridge/xio3130_upstream.c | 1 + + hw/pci-host/apb.c | 2 ++ + hw/pci-host/ppce500.c | 1 + + hw/pci-host/prep.c | 1 + + hw/pci-host/q35.c | 2 ++ + hw/scsi/esp-pci.c | 2 ++ + hw/scsi/esp.c | 1 + + hw/scsi/lsi53c895a.c | 1 + + hw/scsi/megasas.c | 1 + + hw/scsi/scsi-bus.c | 1 + + hw/scsi/vhost-scsi.c | 1 + + hw/scsi/virtio-scsi.c | 3 +++ + hw/scsi/vmw_pvscsi.c | 1 + + hw/usb/ccid-card-emulated.c | 1 + + hw/usb/ccid-card-passthru.c | 1 + + hw/usb/dev-audio.c | 1 + + hw/usb/dev-bluetooth.c | 1 + + hw/usb/dev-hid.c | 3 +++ + hw/usb/dev-hub.c | 1 + + hw/usb/dev-network.c | 1 + + hw/usb/dev-serial.c | 2 ++ + hw/usb/dev-smartcard-reader.c | 1 + + hw/usb/dev-storage.c | 1 + + hw/usb/dev-uas.c | 1 + + hw/usb/dev-wacom.c | 1 + + hw/usb/hcd-ehci-pci.c | 2 ++ + hw/usb/hcd-ehci-sysbus.c | 5 +++++ + hw/usb/hcd-ohci.c | 2 ++ + hw/usb/hcd-uhci.c | 1 + + hw/usb/hcd-xhci.c | 1 + + hw/usb/host-libusb.c | 1 + + hw/usb/redirect.c | 1 + + hw/virtio/virtio-balloon.c | 1 + + hw/virtio/virtio-pci.c | 8 ++++++++ + hw/virtio/virtio-rng.c | 1 + + hw/watchdog/wdt_i6300esb.c | 1 + + hw/watchdog/wdt_ib700.c | 1 + + hw/xen/xen_platform.c | 1 + + hw/xen/xen_pt.c | 1 + + 105 files changed, 152 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/9pfs/virtio-9p-device.c | 1 + + hw/audio/ac97.c | 1 + + hw/audio/adlib.c | 1 + + hw/audio/cs4231a.c | 1 + + hw/audio/es1370.c | 1 + + hw/audio/gus.c | 1 + + hw/audio/hda-codec.c | 3 +++ + hw/audio/intel-hda.c | 3 +++ + hw/audio/pcspk.c | 1 + + hw/audio/pl041.c | 1 + + hw/audio/sb16.c | 1 + + hw/block/fdc.c | 3 +++ + hw/block/pc_sysfw.c | 1 + + hw/block/pflash_cfi01.c | 1 + + hw/block/virtio-blk.c | 1 + + hw/char/debugcon.c | 1 + + hw/char/imx_serial.c | 1 + + hw/char/ipack.c | 1 + + hw/char/ipoctal232.c | 1 + + hw/char/parallel.c | 1 + + hw/char/serial-isa.c | 1 + + hw/char/serial-pci.c | 3 +++ + hw/char/tpci200.c | 1 + + hw/char/virtio-serial-bus.c | 2 ++ + hw/cpu/icc_bus.c | 8 ++++++++ + hw/display/cirrus_vga.c | 2 ++ + hw/display/g364fb.c | 1 + + hw/display/pl110.c | 3 +++ + hw/display/qxl.c | 2 ++ + hw/display/vga-isa.c | 1 + + hw/display/vga-pci.c | 1 + + hw/display/vmware_vga.c | 1 + + hw/i2c/bitbang_i2c.c | 1 + + hw/i2c/core.c | 1 + + hw/i386/kvm/pci-assign.c | 1 + + hw/ide/ahci.c | 1 + + hw/ide/ich.c | 1 + + hw/ide/isa.c | 1 + + hw/ide/piix.c | 3 +++ + hw/ide/qdev.c | 1 + + hw/ide/via.c | 1 + + hw/isa/i82378.c | 1 + + hw/isa/lpc_ich9.c | 1 + + hw/isa/vt82c686.c | 3 +++ + hw/misc/applesmc.c | 1 + + hw/misc/debugexit.c | 1 + + hw/misc/ivshmem.c | 1 + + hw/misc/pc-testdev.c | 2 ++ + hw/misc/pci-testdev.c | 1 + + hw/misc/sga.c | 1 + + hw/misc/vfio.c | 1 + + hw/net/e1000.c | 1 + + hw/net/eepro100.c | 1 + + hw/net/lance.c | 1 + + hw/net/mipsnet.c | 1 + + hw/net/ne2000-isa.c | 1 + + hw/net/ne2000.c | 1 + + hw/net/opencores_eth.c | 1 + + hw/net/pcnet-pci.c | 1 + + hw/net/rtl8139.c | 1 + + hw/net/virtio-net.c | 1 + + hw/net/vmxnet3.c | 1 + + hw/pci-bridge/i82801b11.c | 2 ++ + hw/pci-bridge/ioh3420.c | 1 + + hw/pci-bridge/pci_bridge_dev.c | 1 + + hw/pci-bridge/xio3130_downstream.c | 1 + + hw/pci-bridge/xio3130_upstream.c | 1 + + hw/pci-host/apb.c | 2 ++ + hw/pci-host/ppce500.c | 1 + + hw/pci-host/prep.c | 1 + + hw/pci-host/q35.c | 2 ++ + hw/scsi/esp-pci.c | 2 ++ + hw/scsi/esp.c | 1 + + hw/scsi/lsi53c895a.c | 1 + + hw/scsi/megasas.c | 1 + + hw/scsi/scsi-bus.c | 1 + + hw/scsi/vhost-scsi.c | 1 + + hw/scsi/virtio-scsi.c | 3 +++ + hw/scsi/vmw_pvscsi.c | 1 + + hw/usb/ccid-card-emulated.c | 1 + + hw/usb/ccid-card-passthru.c | 1 + + hw/usb/dev-audio.c | 1 + + hw/usb/dev-bluetooth.c | 1 + + hw/usb/dev-hid.c | 3 +++ + hw/usb/dev-hub.c | 1 + + hw/usb/dev-network.c | 1 + + hw/usb/dev-serial.c | 2 ++ + hw/usb/dev-smartcard-reader.c | 1 + + hw/usb/dev-storage.c | 1 + + hw/usb/dev-uas.c | 1 + + hw/usb/dev-wacom.c | 1 + + hw/usb/hcd-ehci-pci.c | 2 ++ + hw/usb/hcd-ehci-sysbus.c | 5 +++++ + hw/usb/hcd-ohci.c | 2 ++ + hw/usb/hcd-uhci.c | 1 + + hw/usb/hcd-xhci.c | 1 + + hw/usb/host-libusb.c | 1 + + hw/usb/redirect.c | 1 + + hw/virtio/virtio-balloon.c | 1 + + hw/virtio/virtio-pci.c | 8 ++++++++ + hw/virtio/virtio-rng.c | 1 + + hw/watchdog/wdt_i6300esb.c | 1 + + hw/watchdog/wdt_ib700.c | 1 + + hw/xen/xen_platform.c | 1 + + hw/xen/xen_pt.c | 1 + + 105 files changed, 152 insertions(+), 0 deletions(-) + +diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c +index dc6f4e4..69d781d 100644 +--- a/hw/9pfs/virtio-9p-device.c ++++ b/hw/9pfs/virtio-9p-device.c +@@ -141,6 +141,7 @@ static void virtio_9p_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->props = virtio_9p_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = virtio_9p_device_init; + vdc->get_features = virtio_9p_get_features; + vdc->get_config = virtio_9p_get_config; +diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c +index baf138b..8455a96 100644 +--- a/hw/audio/ac97.c ++++ b/hw/audio/ac97.c +@@ -1418,6 +1418,7 @@ static void ac97_class_init (ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82801AA_5; + k->revision = 0x01; + k->class_id = PCI_CLASS_MULTIMEDIA_AUDIO; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "Intel 82801AA AC97 Audio"; + dc->vmsd = &vmstate_ac97; + dc->props = ac97_properties; +diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c +index fc20857..46934c7 100644 +--- a/hw/audio/adlib.c ++++ b/hw/audio/adlib.c +@@ -361,6 +361,7 @@ static void adlib_class_initfn (ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS (klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS (klass); + ic->init = Adlib_initfn; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = ADLIB_DESC; + dc->props = adlib_properties; + } +diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c +index cc605e5..c970722 100644 +--- a/hw/audio/cs4231a.c ++++ b/hw/audio/cs4231a.c +@@ -677,6 +677,7 @@ static void cs4231a_class_initfn (ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS (klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS (klass); + ic->init = cs4231a_initfn; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "Crystal Semiconductor CS4231A"; + dc->vmsd = &vmstate_cs4231a; + dc->props = cs4231a_properties; +diff --git a/hw/audio/es1370.c b/hw/audio/es1370.c +index c1cd169..8678e1e 100644 +--- a/hw/audio/es1370.c ++++ b/hw/audio/es1370.c +@@ -1069,6 +1069,7 @@ static void es1370_class_init (ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_MULTIMEDIA_AUDIO; + k->subsystem_vendor_id = 0x4942; + k->subsystem_id = 0x4c4c; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "ENSONIQ AudioPCI ES1370"; + dc->vmsd = &vmstate_es1370; + } +diff --git a/hw/audio/gus.c b/hw/audio/gus.c +index a91921c..3cafca5 100644 +--- a/hw/audio/gus.c ++++ b/hw/audio/gus.c +@@ -312,6 +312,7 @@ static void gus_class_initfn (ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS (klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS (klass); + ic->init = gus_initfn; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "Gravis Ultrasound GF1"; + dc->vmsd = &vmstate_gus; + dc->props = gus_properties; +diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c +index 94c472c..07a43bf 100644 +--- a/hw/audio/hda-codec.c ++++ b/hw/audio/hda-codec.c +@@ -638,6 +638,7 @@ static void hda_audio_output_class_init(ObjectClass *klass, void *data) + k->exit = hda_audio_exit; + k->command = hda_audio_command; + k->stream = hda_audio_stream; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "HDA Audio Codec, output-only (line-out)"; + dc->vmsd = &vmstate_hda_audio; + dc->props = hda_audio_properties; +@@ -659,6 +660,7 @@ static void hda_audio_duplex_class_init(ObjectClass *klass, void *data) + k->exit = hda_audio_exit; + k->command = hda_audio_command; + k->stream = hda_audio_stream; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "HDA Audio Codec, duplex (line-out, line-in)"; + dc->vmsd = &vmstate_hda_audio; + dc->props = hda_audio_properties; +@@ -680,6 +682,7 @@ static void hda_audio_micro_class_init(ObjectClass *klass, void *data) + k->exit = hda_audio_exit; + k->command = hda_audio_command; + k->stream = hda_audio_stream; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "HDA Audio Codec, duplex (speaker, microphone)"; + dc->vmsd = &vmstate_hda_audio; + dc->props = hda_audio_properties; +diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c +index 1016af0..e747342 100644 +--- a/hw/audio/intel-hda.c ++++ b/hw/audio/intel-hda.c +@@ -1254,6 +1254,7 @@ static void intel_hda_class_init_ich6(ObjectClass *klass, void *data) + intel_hda_class_init_common(klass); + k->device_id = 0x2668; + k->revision = 1; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "Intel HD Audio Controller (ich6)"; + } + +@@ -1265,6 +1266,7 @@ static void intel_hda_class_init_ich9(ObjectClass *klass, void *data) + intel_hda_class_init_common(klass); + k->device_id = 0x293e; + k->revision = 3; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "Intel HD Audio Controller (ich9)"; + } + +@@ -1287,6 +1289,7 @@ static void hda_codec_device_class_init(ObjectClass *klass, void *data) + DeviceClass *k = DEVICE_CLASS(klass); + k->init = hda_codec_dev_init; + k->exit = hda_codec_dev_exit; ++ set_bit(DEVICE_CATEGORY_SOUND, k->categories); + k->bus_type = TYPE_HDA_BUS; + k->props = hda_props; + } +diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c +index 3a7285f..4e03bc9 100644 +--- a/hw/audio/pcspk.c ++++ b/hw/audio/pcspk.c +@@ -187,6 +187,7 @@ static void pcspk_class_initfn(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + + ic->init = pcspk_initfn; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->no_user = 1; + dc->props = pcspk_properties; + } +diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c +index 653ab4f..9b11cc9 100644 +--- a/hw/audio/pl041.c ++++ b/hw/audio/pl041.c +@@ -626,6 +626,7 @@ static void pl041_device_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl041_init; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->no_user = 1; + dc->reset = pl041_device_reset; + dc->vmsd = &vmstate_pl041; +diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c +index 6ddc0ac..277bde1 100644 +--- a/hw/audio/sb16.c ++++ b/hw/audio/sb16.c +@@ -1406,6 +1406,7 @@ static void sb16_class_initfn (ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS (klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS (klass); + ic->init = sb16_initfn; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "Creative Sound Blaster 16"; + dc->vmsd = &vmstate_sb16; + dc->props = sb16_properties; +diff --git a/hw/block/fdc.c b/hw/block/fdc.c +index 0888652..e292f4c 100644 +--- a/hw/block/fdc.c ++++ b/hw/block/fdc.c +@@ -2210,6 +2210,7 @@ static void isabus_fdc_class_init(ObjectClass *klass, void *data) + dc->reset = fdctrl_external_reset_isa; + dc->vmsd = &vmstate_isa_fdc; + dc->props = isa_fdc_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo isa_fdc_info = { +@@ -2244,6 +2245,7 @@ static void sysbus_fdc_class_init(ObjectClass *klass, void *data) + dc->reset = fdctrl_external_reset_sysbus; + dc->vmsd = &vmstate_sysbus_fdc; + dc->props = sysbus_fdc_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo sysbus_fdc_info = { +@@ -2267,6 +2269,7 @@ static void sun4m_fdc_class_init(ObjectClass *klass, void *data) + dc->reset = fdctrl_external_reset_sysbus; + dc->vmsd = &vmstate_sysbus_fdc; + dc->props = sun4m_fdc_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo sun4m_fdc_info = { +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 4e3e6b6..0bc5b7a 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -268,6 +268,7 @@ static void pcsysfw_class_init (ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS (klass); + ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->desc = "PC System Firmware"; + dc->init = pcsysfw_init; + dc->props = pcsysfw_properties; +diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c +index 3ff20e0..0bbb1a3 100644 +--- a/hw/block/pflash_cfi01.c ++++ b/hw/block/pflash_cfi01.c +@@ -715,6 +715,7 @@ static void pflash_cfi01_class_init(ObjectClass *klass, void *data) + k->init = pflash_cfi01_init; + dc->props = pflash_cfi01_properties; + dc->vmsd = &vmstate_pflash; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index ce1a523..9fe622d 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -756,6 +756,7 @@ static void virtio_blk_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = virtio_blk_device_exit; + dc->props = virtio_blk_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = virtio_blk_device_init; + vdc->get_config = virtio_blk_update_config; + vdc->set_config = virtio_blk_set_config; +diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c +index 02c9577..b974889 100644 +--- a/hw/char/debugcon.c ++++ b/hw/char/debugcon.c +@@ -117,6 +117,7 @@ static void debugcon_isa_class_initfn(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = debugcon_isa_initfn; + dc->props = debugcon_isa_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo debugcon_isa_info = { +diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c +index 2a2c230..a11b9c2 100644 +--- a/hw/char/imx_serial.c ++++ b/hw/char/imx_serial.c +@@ -448,6 +448,7 @@ static void imx_serial_class_init(ObjectClass *klass, void *data) + k->init = imx_serial_init; + dc->vmsd = &vmstate_imx_serial; + dc->reset = imx_serial_reset_at_boot; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "i.MX series UART"; + dc->props = imx32_serial_properties; + } +diff --git a/hw/char/ipack.c b/hw/char/ipack.c +index e15540d..f890471 100644 +--- a/hw/char/ipack.c ++++ b/hw/char/ipack.c +@@ -74,6 +74,7 @@ static Property ipack_device_props[] = { + static void ipack_device_class_init(ObjectClass *klass, void *data) + { + DeviceClass *k = DEVICE_CLASS(klass); ++ set_bit(DEVICE_CATEGORY_INPUT, k->categories); + k->bus_type = TYPE_IPACK_BUS; + k->init = ipack_device_dev_init; + k->exit = ipack_device_dev_exit; +diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c +index c9698a6..88e2cca 100644 +--- a/hw/char/ipoctal232.c ++++ b/hw/char/ipoctal232.c +@@ -585,6 +585,7 @@ static void ipoctal_class_init(ObjectClass *klass, void *data) + ic->mem_read8 = mem_read8; + ic->mem_write8 = mem_write8; + ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "GE IP-Octal 232 8-channel RS-232 IndustryPack"; + dc->props = ipoctal_properties; + dc->vmsd = &vmstate_ipoctal; +diff --git a/hw/char/parallel.c b/hw/char/parallel.c +index 8e48284..046e453 100644 +--- a/hw/char/parallel.c ++++ b/hw/char/parallel.c +@@ -602,6 +602,7 @@ static void parallel_isa_class_initfn(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = parallel_isa_initfn; + dc->props = parallel_isa_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo parallel_isa_info = { +diff --git a/hw/char/serial-isa.c b/hw/char/serial-isa.c +index 342b4cc..cc00544 100644 +--- a/hw/char/serial-isa.c ++++ b/hw/char/serial-isa.c +@@ -100,6 +100,7 @@ static void serial_isa_class_initfn(ObjectClass *klass, void *data) + ic->init = serial_isa_initfn; + dc->vmsd = &vmstate_isa_serial; + dc->props = serial_isa_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo serial_isa_info = { +diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c +index 2138e35..77fec01 100644 +--- a/hw/char/serial-pci.c ++++ b/hw/char/serial-pci.c +@@ -191,6 +191,7 @@ static void serial_pci_class_initfn(ObjectClass *klass, void *data) + pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL; + dc->vmsd = &vmstate_pci_serial; + dc->props = serial_pci_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data) +@@ -205,6 +206,7 @@ static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data) + pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL; + dc->vmsd = &vmstate_pci_multi_serial; + dc->props = multi_2x_serial_pci_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static void multi_4x_serial_pci_class_initfn(ObjectClass *klass, void *data) +@@ -219,6 +221,7 @@ static void multi_4x_serial_pci_class_initfn(ObjectClass *klass, void *data) + pc->class_id = PCI_CLASS_COMMUNICATION_SERIAL; + dc->vmsd = &vmstate_pci_multi_serial; + dc->props = multi_4x_serial_pci_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo serial_pci_info = { +diff --git a/hw/char/tpci200.c b/hw/char/tpci200.c +index 0170602..cc6a963 100644 +--- a/hw/char/tpci200.c ++++ b/hw/char/tpci200.c +@@ -652,6 +652,7 @@ static void tpci200_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_BRIDGE_OTHER; + k->subsystem_vendor_id = PCI_VENDOR_ID_TEWS; + k->subsystem_id = 0x300A; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "TEWS TPCI200 IndustryPack carrier"; + dc->vmsd = &vmstate_tpci200; + } +diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c +index cc3d1dd..da417c7 100644 +--- a/hw/char/virtio-serial-bus.c ++++ b/hw/char/virtio-serial-bus.c +@@ -971,6 +971,7 @@ static void virtio_serial_port_class_init(ObjectClass *klass, void *data) + { + DeviceClass *k = DEVICE_CLASS(klass); + k->init = virtser_port_qdev_init; ++ set_bit(DEVICE_CATEGORY_INPUT, k->categories); + k->bus_type = TYPE_VIRTIO_SERIAL_BUS; + k->exit = virtser_port_qdev_exit; + k->unplug = qdev_simple_unplug_cb; +@@ -1017,6 +1018,7 @@ static void virtio_serial_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = virtio_serial_device_exit; + dc->props = virtio_serial_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + vdc->init = virtio_serial_device_init; + vdc->get_features = get_features; + vdc->get_config = get_config; +diff --git a/hw/cpu/icc_bus.c b/hw/cpu/icc_bus.c +index 73a1dc9..4df814b 100644 +--- a/hw/cpu/icc_bus.c ++++ b/hw/cpu/icc_bus.c +@@ -101,11 +101,19 @@ static void icc_bridge_init(Object *obj) + s->icc_bus.apic_address_space = &s->apic_container; + } + ++static void icc_bridge_class_init(ObjectClass *oc, void *data) ++{ ++ DeviceClass *dc = DEVICE_CLASS(oc); ++ ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); ++} ++ + static const TypeInfo icc_bridge_info = { + .name = TYPE_ICC_BRIDGE, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_init = icc_bridge_init, + .instance_size = sizeof(ICCBridgeState), ++ .class_init = icc_bridge_class_init, + }; + + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index fa8eae2..a7634ba 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -2936,6 +2936,7 @@ static void isa_cirrus_vga_class_init(ObjectClass *klass, void *data) + dc->vmsd = &vmstate_cirrus_vga; + k->init = vga_initfn; + dc->props = isa_cirrus_vga_properties; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + } + + static const TypeInfo isa_cirrus_vga_info = { +@@ -3001,6 +3002,7 @@ static void cirrus_vga_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_CIRRUS; + k->device_id = CIRRUS_ID_CLGD5446; + k->class_id = PCI_CLASS_DISPLAY_VGA; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->desc = "Cirrus CLGD 54xx VGA"; + dc->vmsd = &vmstate_pci_cirrus_vga; + dc->props = pci_vga_cirrus_properties; +diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c +index 2a4047e..2b974ca 100644 +--- a/hw/display/g364fb.c ++++ b/hw/display/g364fb.c +@@ -528,6 +528,7 @@ static void g364fb_sysbus_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = g364fb_sysbus_init; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->desc = "G364 framebuffer"; + dc->reset = g364fb_sysbus_reset; + dc->vmsd = &vmstate_g364fb; +diff --git a/hw/display/pl110.c b/hw/display/pl110.c +index f259955..b45a7be 100644 +--- a/hw/display/pl110.c ++++ b/hw/display/pl110.c +@@ -481,6 +481,7 @@ static void pl110_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl110_init; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->no_user = 1; + dc->vmsd = &vmstate_pl110; + } +@@ -498,6 +499,7 @@ static void pl110_versatile_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl110_versatile_init; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->no_user = 1; + dc->vmsd = &vmstate_pl110; + } +@@ -515,6 +517,7 @@ static void pl111_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl111_init; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->no_user = 1; + dc->vmsd = &vmstate_pl110; + } +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 937a402..ea985d2 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -2317,6 +2317,7 @@ static void qxl_primary_class_init(ObjectClass *klass, void *data) + k->vendor_id = REDHAT_PCI_VENDOR_ID; + k->device_id = QXL_DEVICE_ID_STABLE; + k->class_id = PCI_CLASS_DISPLAY_VGA; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->desc = "Spice QXL GPU (primary, vga compatible)"; + dc->reset = qxl_reset_handler; + dc->vmsd = &qxl_vmstate; +@@ -2339,6 +2340,7 @@ static void qxl_secondary_class_init(ObjectClass *klass, void *data) + k->vendor_id = REDHAT_PCI_VENDOR_ID; + k->device_id = QXL_DEVICE_ID_STABLE; + k->class_id = PCI_CLASS_DISPLAY_OTHER; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->desc = "Spice QXL GPU (secondary)"; + dc->reset = qxl_reset_handler; + dc->vmsd = &qxl_vmstate; +diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c +index 2f34ee3..775b800 100644 +--- a/hw/display/vga-isa.c ++++ b/hw/display/vga-isa.c +@@ -88,6 +88,7 @@ static void vga_isa_class_initfn(ObjectClass *klass, void *data) + dc->reset = vga_isa_reset; + dc->vmsd = &vmstate_vga_common; + dc->props = vga_isa_properties; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + } + + static const TypeInfo vga_isa_info = { +diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c +index cea8db7..21aa4bf 100644 +--- a/hw/display/vga-pci.c ++++ b/hw/display/vga-pci.c +@@ -197,6 +197,7 @@ static void vga_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_DISPLAY_VGA; + dc->vmsd = &vmstate_vga_pci; + dc->props = vga_pci_properties; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + } + + static const TypeInfo vga_info = { +diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c +index fd3569d..df76aec 100644 +--- a/hw/display/vmware_vga.c ++++ b/hw/display/vmware_vga.c +@@ -1296,6 +1296,7 @@ static void vmsvga_class_init(ObjectClass *klass, void *data) + dc->reset = vmsvga_reset; + dc->vmsd = &vmstate_vmware_vga; + dc->props = vga_vmware_properties; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + } + + static const TypeInfo vmsvga_info = { +diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c +index 854b8e1..f5e4836 100644 +--- a/hw/i2c/bitbang_i2c.c ++++ b/hw/i2c/bitbang_i2c.c +@@ -227,6 +227,7 @@ static void gpio_i2c_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = gpio_i2c_init; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->desc = "Virtual GPIO to I2C bridge"; + } + +diff --git a/hw/i2c/core.c b/hw/i2c/core.c +index 0c4fc1d..ef3b000 100644 +--- a/hw/i2c/core.c ++++ b/hw/i2c/core.c +@@ -224,6 +224,7 @@ static void i2c_slave_class_init(ObjectClass *klass, void *data) + { + DeviceClass *k = DEVICE_CLASS(klass); + k->init = i2c_slave_qdev_init; ++ set_bit(DEVICE_CATEGORY_MISC, k->categories); + k->bus_type = TYPE_I2C_BUS; + k->props = i2c_props; + } +diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c +index c1e08ec..1684f8c 100644 +--- a/hw/i386/kvm/pci-assign.c ++++ b/hw/i386/kvm/pci-assign.c +@@ -1835,6 +1835,7 @@ static void assign_class_init(ObjectClass *klass, void *data) + dc->props = assigned_dev_properties; + dc->vmsd = &vmstate_assigned_device; + dc->reset = reset_assigned_device; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->desc = "KVM-based PCI passthrough"; + } + +diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c +index ade9f64..011e796 100644 +--- a/hw/ide/ahci.c ++++ b/hw/ide/ahci.c +@@ -1326,6 +1326,7 @@ static void sysbus_ahci_class_init(ObjectClass *klass, void *data) + dc->vmsd = &vmstate_sysbus_ahci; + dc->props = sysbus_ahci_properties; + dc->reset = sysbus_ahci_reset; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo sysbus_ahci_info = { +diff --git a/hw/ide/ich.c b/hw/ide/ich.c +index ed1f1a2..4d53564 100644 +--- a/hw/ide/ich.c ++++ b/hw/ide/ich.c +@@ -160,6 +160,7 @@ static void ich_ahci_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_STORAGE_SATA; + dc->vmsd = &vmstate_ich9_ahci; + dc->reset = pci_ich9_reset; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo ich_ahci_info = { +diff --git a/hw/ide/isa.c b/hw/ide/isa.c +index 369a7fa..2a14260 100644 +--- a/hw/ide/isa.c ++++ b/hw/ide/isa.c +@@ -118,6 +118,7 @@ static void isa_ide_class_initfn(ObjectClass *klass, void *data) + dc->fw_name = "ide"; + dc->reset = isa_ide_reset; + dc->props = isa_ide_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo isa_ide_info = { +diff --git a/hw/ide/piix.c b/hw/ide/piix.c +index bf2856f..8d4bf2f 100644 +--- a/hw/ide/piix.c ++++ b/hw/ide/piix.c +@@ -248,6 +248,7 @@ static void piix3_ide_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_INTEL; + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->no_user = 1; + } + +@@ -267,6 +268,7 @@ static void piix3_ide_xen_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_INTEL; + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->no_user = 1; + dc->unplug = pci_piix3_xen_ide_unplug; + } +@@ -289,6 +291,7 @@ static void piix4_ide_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_INTEL; + k->device_id = PCI_DEVICE_ID_INTEL_82371AB; + k->class_id = PCI_CLASS_STORAGE_IDE; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->no_user = 1; + } + +diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c +index 6a272b0..1d84e15 100644 +--- a/hw/ide/qdev.c ++++ b/hw/ide/qdev.c +@@ -282,6 +282,7 @@ static void ide_device_class_init(ObjectClass *klass, void *data) + { + DeviceClass *k = DEVICE_CLASS(klass); + k->init = ide_qdev_init; ++ set_bit(DEVICE_CATEGORY_STORAGE, k->categories); + k->bus_type = TYPE_IDE_BUS; + k->props = ide_props; + } +diff --git a/hw/ide/via.c b/hw/ide/via.c +index 5fe053c..30dedd8 100644 +--- a/hw/ide/via.c ++++ b/hw/ide/via.c +@@ -223,6 +223,7 @@ static void via_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_VIA_IDE; + k->revision = 0x06; + k->class_id = PCI_CLASS_STORAGE_IDE; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->no_user = 1; + } + +diff --git a/hw/isa/i82378.c b/hw/isa/i82378.c +index cced9af..3c62519 100644 +--- a/hw/isa/i82378.c ++++ b/hw/isa/i82378.c +@@ -259,6 +259,7 @@ static void pci_i82378_class_init(ObjectClass *klass, void *data) + k->subsystem_vendor_id = 0x0; + k->subsystem_id = 0x0; + dc->vmsd = &vmstate_pci_i82378; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->props = i82378_properties; + } + +diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c +index 667e882..2760dce 100644 +--- a/hw/isa/lpc_ich9.c ++++ b/hw/isa/lpc_ich9.c +@@ -599,6 +599,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->reset = ich9_lpc_reset; + k->init = ich9_lpc_initfn; + dc->vmsd = &vmstate_ich9_lpc; +diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c +index 5261927..79057a6 100644 +--- a/hw/isa/vt82c686.c ++++ b/hw/isa/vt82c686.c +@@ -279,6 +279,7 @@ static void via_ac97_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_VIA_AC97; + k->revision = 0x50; + k->class_id = PCI_CLASS_MULTIMEDIA_AUDIO; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "AC97"; + } + +@@ -320,6 +321,7 @@ static void via_mc97_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_VIA_MC97; + k->class_id = PCI_CLASS_COMMUNICATION_OTHER; + k->revision = 0x30; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->desc = "MC97"; + } + +@@ -399,6 +401,7 @@ static void via_pm_class_init(ObjectClass *klass, void *data) + k->revision = 0x40; + dc->desc = "PM"; + dc->vmsd = &vmstate_acpi; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->props = via_pm_properties; + } + +diff --git a/hw/misc/applesmc.c b/hw/misc/applesmc.c +index 78904a8..69f3cd0 100644 +--- a/hw/misc/applesmc.c ++++ b/hw/misc/applesmc.c +@@ -239,6 +239,7 @@ static void qdev_applesmc_class_init(ObjectClass *klass, void *data) + ic->init = applesmc_isa_init; + dc->reset = qdev_applesmc_isa_reset; + dc->props = applesmc_isa_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo applesmc_isa_info = { +diff --git a/hw/misc/debugexit.c b/hw/misc/debugexit.c +index 59bed5b..9fd72ec 100644 +--- a/hw/misc/debugexit.c ++++ b/hw/misc/debugexit.c +@@ -58,6 +58,7 @@ static void debug_exit_class_initfn(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = debug_exit_initfn; + dc->props = debug_exit_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo debug_exit_info = { +diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c +index 5658f73..5acef7a 100644 +--- a/hw/misc/ivshmem.c ++++ b/hw/misc/ivshmem.c +@@ -810,6 +810,7 @@ static void ivshmem_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_MEMORY_RAM; + dc->reset = ivshmem_reset; + dc->props = ivshmem_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo ivshmem_info = { +diff --git a/hw/misc/pc-testdev.c b/hw/misc/pc-testdev.c +index 32df175..cae8d70 100644 +--- a/hw/misc/pc-testdev.c ++++ b/hw/misc/pc-testdev.c +@@ -167,9 +167,11 @@ static int init_test_device(ISADevice *isa) + + static void testdev_class_init(ObjectClass *klass, void *data) + { ++ DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *k = ISA_DEVICE_CLASS(klass); + + k->init = init_test_device; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo testdev_info = { +diff --git a/hw/misc/pci-testdev.c b/hw/misc/pci-testdev.c +index 71ce5a3..b11bc5f 100644 +--- a/hw/misc/pci-testdev.c ++++ b/hw/misc/pci-testdev.c +@@ -307,6 +307,7 @@ static void pci_testdev_class_init(ObjectClass *klass, void *data) + k->revision = 0x00; + k->class_id = PCI_CLASS_OTHERS; + dc->desc = "PCI Test Device"; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->reset = qdev_pci_testdev_reset; + } + +diff --git a/hw/misc/sga.c b/hw/misc/sga.c +index c842190..5ea124b 100644 +--- a/hw/misc/sga.c ++++ b/hw/misc/sga.c +@@ -49,6 +49,7 @@ static void sga_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = sga_initfn; ++ set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->desc = "Serial Graphics Adapter"; + } + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index f8fef8c..a966c58 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3309,6 +3309,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) + dc->props = vfio_pci_dev_properties; + dc->vmsd = &vfio_pci_vmstate; + dc->desc = "VFIO-based PCI device assignment"; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + pdc->init = vfio_initfn; + pdc->exit = vfio_exitfn; + pdc->config_read = vfio_pci_read_config; +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index 76df2f3..a813523 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -1393,6 +1393,7 @@ static void e1000_class_init(ObjectClass *klass, void *data) + k->device_id = E1000_DEVID; + k->revision = 0x03; + k->class_id = PCI_CLASS_NETWORK_ETHERNET; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->desc = "Intel Gigabit Ethernet"; + dc->reset = qdev_e1000_reset; + dc->vmsd = &vmstate_e1000; +diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c +index b69cc60..5190f88 100644 +--- a/hw/net/eepro100.c ++++ b/hw/net/eepro100.c +@@ -2083,6 +2083,7 @@ static void eepro100_class_init(ObjectClass *klass, void *data) + + info = eepro100_get_class_by_name(object_class_get_name(klass)); + ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->props = e100_properties; + dc->desc = info->desc; + k->vendor_id = PCI_VENDOR_ID_INTEL; +diff --git a/hw/net/lance.c b/hw/net/lance.c +index 187497c..90641e7 100644 +--- a/hw/net/lance.c ++++ b/hw/net/lance.c +@@ -149,6 +149,7 @@ static void lance_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = lance_init; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->fw_name = "ethernet"; + dc->reset = lance_reset; + dc->vmsd = &vmstate_lance; +diff --git a/hw/net/mipsnet.c b/hw/net/mipsnet.c +index ac6193a..52cb4ff 100644 +--- a/hw/net/mipsnet.c ++++ b/hw/net/mipsnet.c +@@ -263,6 +263,7 @@ static void mipsnet_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = mipsnet_sysbus_init; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->desc = "MIPS Simulator network device"; + dc->reset = mipsnet_sysbus_reset; + dc->vmsd = &vmstate_mipsnet; +diff --git a/hw/net/ne2000-isa.c b/hw/net/ne2000-isa.c +index f8e610c..877a6b1 100644 +--- a/hw/net/ne2000-isa.c ++++ b/hw/net/ne2000-isa.c +@@ -99,6 +99,7 @@ static void isa_ne2000_class_initfn(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = isa_ne2000_initfn; + dc->props = ne2000_isa_properties; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + } + + static const TypeInfo ne2000_isa_info = { +diff --git a/hw/net/ne2000.c b/hw/net/ne2000.c +index 94d6110..b401cb8 100644 +--- a/hw/net/ne2000.c ++++ b/hw/net/ne2000.c +@@ -772,6 +772,7 @@ static void ne2000_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_NETWORK_ETHERNET; + dc->vmsd = &vmstate_pci_ne2000; + dc->props = ne2000_properties; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + } + + static const TypeInfo ne2000_info = { +diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c +index be64bf2..7491718 100644 +--- a/hw/net/opencores_eth.c ++++ b/hw/net/opencores_eth.c +@@ -713,6 +713,7 @@ static void open_eth_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = sysbus_open_eth_init; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->desc = "Opencores 10/100 Mbit Ethernet"; + dc->reset = qdev_open_eth_reset; + dc->props = open_eth_properties; +diff --git a/hw/net/pcnet-pci.c b/hw/net/pcnet-pci.c +index e07f388..befc6ce 100644 +--- a/hw/net/pcnet-pci.c ++++ b/hw/net/pcnet-pci.c +@@ -359,6 +359,7 @@ static void pcnet_class_init(ObjectClass *klass, void *data) + dc->reset = pci_reset; + dc->vmsd = &vmstate_pci_pcnet; + dc->props = pcnet_properties; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + } + + static const TypeInfo pcnet_info = { +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 1e5a679..8f20ef4 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -3541,6 +3541,7 @@ static void rtl8139_class_init(ObjectClass *klass, void *data) + dc->reset = rtl8139_reset; + dc->vmsd = &vmstate_rtl8139; + dc->props = rtl8139_properties; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + } + + static const TypeInfo rtl8139_info = { +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index bed0822..9ebcdfe 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1448,6 +1448,7 @@ static void virtio_net_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = virtio_net_device_exit; + dc->props = virtio_net_properties; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + vdc->init = virtio_net_device_init; + vdc->get_config = virtio_net_get_config; + vdc->set_config = virtio_net_set_config; +diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c +index 4c575e5..d43284a 100644 +--- a/hw/net/vmxnet3.c ++++ b/hw/net/vmxnet3.c +@@ -2453,6 +2453,7 @@ static void vmxnet3_class_init(ObjectClass *class, void *data) + dc->reset = vmxnet3_qdev_reset; + dc->vmsd = &vmstate_vmxnet3; + dc->props = vmxnet3_properties; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + } + + static const TypeInfo vmxnet3_info = { +diff --git a/hw/pci-bridge/i82801b11.c b/hw/pci-bridge/i82801b11.c +index 0841531..21b3225 100644 +--- a/hw/pci-bridge/i82801b11.c ++++ b/hw/pci-bridge/i82801b11.c +@@ -81,6 +81,7 @@ err_bridge: + static void i82801b11_bridge_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->is_bridge = 1; + k->vendor_id = PCI_VENDOR_ID_INTEL; +@@ -88,6 +89,7 @@ static void i82801b11_bridge_class_init(ObjectClass *klass, void *data) + k->revision = ICH9_D2P_A2_REVISION; + k->init = i82801b11_bridge_initfn; + k->config_write = pci_bridge_write_config; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + } + + static const TypeInfo i82801b11_bridge_info = { +diff --git a/hw/pci-bridge/ioh3420.c b/hw/pci-bridge/ioh3420.c +index bb541eb..47122c5 100644 +--- a/hw/pci-bridge/ioh3420.c ++++ b/hw/pci-bridge/ioh3420.c +@@ -220,6 +220,7 @@ static void ioh3420_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_INTEL; + k->device_id = PCI_DEVICE_ID_IOH_EPORT; + k->revision = PCI_DEVICE_ID_IOH_REV; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->desc = "Intel IOH device id 3420 PCIE Root Port"; + dc->reset = ioh3420_reset; + dc->vmsd = &vmstate_ioh3420; +diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c +index 971b432..43f94fc 100644 +--- a/hw/pci-bridge/pci_bridge_dev.c ++++ b/hw/pci-bridge/pci_bridge_dev.c +@@ -141,6 +141,7 @@ static void pci_bridge_dev_class_init(ObjectClass *klass, void *data) + dc->reset = qdev_pci_bridge_dev_reset; + dc->props = pci_bridge_dev_properties; + dc->vmsd = &pci_bridge_dev_vmstate; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + } + + static const TypeInfo pci_bridge_dev_info = { +diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c +index 1810dd2..33eff37 100644 +--- a/hw/pci-bridge/xio3130_downstream.c ++++ b/hw/pci-bridge/xio3130_downstream.c +@@ -187,6 +187,7 @@ static void xio3130_downstream_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_TI; + k->device_id = PCI_DEVICE_ID_TI_XIO3130D; + k->revision = XIO3130_REVISION; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->desc = "TI X3130 Downstream Port of PCI Express Switch"; + dc->reset = xio3130_downstream_reset; + dc->vmsd = &vmstate_xio3130_downstream; +diff --git a/hw/pci-bridge/xio3130_upstream.c b/hw/pci-bridge/xio3130_upstream.c +index 8e0d97a..e9969a9 100644 +--- a/hw/pci-bridge/xio3130_upstream.c ++++ b/hw/pci-bridge/xio3130_upstream.c +@@ -161,6 +161,7 @@ static void xio3130_upstream_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_TI; + k->device_id = PCI_DEVICE_ID_TI_XIO3130U; + k->revision = XIO3130_REVISION; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->desc = "TI X3130 Upstream Port of PCI Express Switch"; + dc->reset = xio3130_upstream_reset; + dc->vmsd = &vmstate_xio3130_upstream; +diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c +index e099655..5ac7556 100644 +--- a/hw/pci-host/apb.c ++++ b/hw/pci-host/apb.c +@@ -577,6 +577,7 @@ static void pbm_host_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pci_pbm_init_device; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->reset = pci_pbm_reset; + } + +@@ -599,6 +600,7 @@ static void pbm_pci_bridge_class_init(ObjectClass *klass, void *data) + k->revision = 0x11; + k->config_write = pci_bridge_write_config; + k->is_bridge = 1; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->reset = pci_bridge_reset; + dc->vmsd = &vmstate_pci_device; + } +diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c +index 5e7ad94..0d0a001 100644 +--- a/hw/pci-host/ppce500.c ++++ b/hw/pci-host/ppce500.c +@@ -407,6 +407,7 @@ static void e500_pcihost_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = e500_pcihost_initfn; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->props = pcihost_properties; + dc->vmsd = &vmstate_ppce500_pci; + } +diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c +index 6130253..8c4e6eb 100644 +--- a/hw/pci-host/prep.c ++++ b/hw/pci-host/prep.c +@@ -210,6 +210,7 @@ static void raven_pcihost_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->realize = raven_pcihost_realizefn; + dc->fw_name = "pci"; + dc->no_user = 1; +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 24df6b5..5f8e7ff 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -76,6 +76,7 @@ static void q35_host_class_init(ObjectClass *klass, void *data) + + k->init = q35_host_init; + dc->props = mch_props; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->fw_name = "pci"; + } + +@@ -287,6 +288,7 @@ static void mch_class_init(ObjectClass *klass, void *data) + k->init = mch_init; + k->config_write = mch_write_config; + dc->reset = mch_reset; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->desc = "Host bridge"; + dc->vmsd = &vmstate_mch; + k->vendor_id = PCI_VENDOR_ID_INTEL; +diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c +index 029789a..0be165f 100644 +--- a/hw/scsi/esp-pci.c ++++ b/hw/scsi/esp-pci.c +@@ -379,6 +379,7 @@ static void esp_pci_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_AMD_SCSI; + k->revision = 0x10; + k->class_id = PCI_CLASS_STORAGE_SCSI; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->desc = "AMD Am53c974 PCscsi-PCI SCSI adapter"; + dc->reset = esp_pci_hard_reset; + dc->vmsd = &vmstate_esp_pci_scsi; +@@ -499,6 +500,7 @@ static void dc390_class_init(ObjectClass *klass, void *data) + k->init = dc390_scsi_init; + k->config_read = dc390_read_config; + k->config_write = dc390_write_config; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->desc = "Tekram DC-390 SCSI adapter"; + } + +diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c +index 0c81a50..a1a7279 100644 +--- a/hw/scsi/esp.c ++++ b/hw/scsi/esp.c +@@ -710,6 +710,7 @@ static void sysbus_esp_class_init(ObjectClass *klass, void *data) + k->init = sysbus_esp_init; + dc->reset = sysbus_esp_hard_reset; + dc->vmsd = &vmstate_sysbus_esp_scsi; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo sysbus_esp_info = { +diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c +index 22b8e98..2e322d7 100644 +--- a/hw/scsi/lsi53c895a.c ++++ b/hw/scsi/lsi53c895a.c +@@ -2119,6 +2119,7 @@ static void lsi_class_init(ObjectClass *klass, void *data) + k->subsystem_id = 0x1000; + dc->reset = lsi_scsi_reset; + dc->vmsd = &vmstate_lsi_scsi; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static const TypeInfo lsi_info = { +diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c +index 27288b9..d916a81 100644 +--- a/hw/scsi/megasas.c ++++ b/hw/scsi/megasas.c +@@ -2198,6 +2198,7 @@ static void megasas_class_init(ObjectClass *oc, void *data) + dc->props = megasas_properties; + dc->reset = megasas_scsi_reset; + dc->vmsd = &vmstate_megasas; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->desc = "LSI MegaRAID SAS 1078"; + } + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 0885d9d..18a0399 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -1865,6 +1865,7 @@ const VMStateDescription vmstate_scsi_device = { + static void scsi_device_class_init(ObjectClass *klass, void *data) + { + DeviceClass *k = DEVICE_CLASS(klass); ++ set_bit(DEVICE_CATEGORY_STORAGE, k->categories); + k->bus_type = TYPE_SCSI_BUS; + k->init = scsi_qdev_init; + k->unplug = scsi_qdev_unplug; +diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c +index 785e93f..9e770fb 100644 +--- a/hw/scsi/vhost-scsi.c ++++ b/hw/scsi/vhost-scsi.c +@@ -267,6 +267,7 @@ static void vhost_scsi_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = vhost_scsi_exit; + dc->props = vhost_scsi_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = vhost_scsi_init; + vdc->get_features = vhost_scsi_get_features; + vdc->set_config = vhost_scsi_set_config; +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 4074088..038cd83 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -662,8 +662,10 @@ static Property virtio_scsi_properties[] = { + static void virtio_scsi_common_class_init(ObjectClass *klass, void *data) + { + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + vdc->get_config = virtio_scsi_get_config; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + } + + static void virtio_scsi_class_init(ObjectClass *klass, void *data) +@@ -672,6 +674,7 @@ static void virtio_scsi_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = virtio_scsi_device_exit; + dc->props = virtio_scsi_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = virtio_scsi_device_init; + vdc->set_config = virtio_scsi_set_config; + vdc->get_features = virtio_scsi_get_features; +diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c +index 48d12f4..8600a18 100644 +--- a/hw/scsi/vmw_pvscsi.c ++++ b/hw/scsi/vmw_pvscsi.c +@@ -1197,6 +1197,7 @@ static void pvscsi_class_init(ObjectClass *klass, void *data) + dc->reset = pvscsi_reset; + dc->vmsd = &vmstate_pvscsi; + dc->props = pvscsi_properties; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + k->config_write = pvscsi_write_config; + } + +diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c +index deb6d47..aa913df 100644 +--- a/hw/usb/ccid-card-emulated.c ++++ b/hw/usb/ccid-card-emulated.c +@@ -592,6 +592,7 @@ static void emulated_class_initfn(ObjectClass *klass, void *data) + cc->exitfn = emulated_exitfn; + cc->get_atr = emulated_get_atr; + cc->apdu_from_guest = emulated_apdu_from_guest; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "emulated smartcard"; + dc->props = emulated_card_properties; + } +diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c +index 01c7e6f..c1d20c0 100644 +--- a/hw/usb/ccid-card-passthru.c ++++ b/hw/usb/ccid-card-passthru.c +@@ -392,6 +392,7 @@ static void passthru_class_initfn(ObjectClass *klass, void *data) + cc->exitfn = passthru_exitfn; + cc->get_atr = passthru_get_atr; + cc->apdu_from_guest = passthru_apdu_from_guest; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "passthrough smartcard"; + dc->vmsd = &passthru_vmstate; + dc->props = passthru_card_properties; +diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c +index 04933a9..c5420eb 100644 +--- a/hw/usb/dev-audio.c ++++ b/hw/usb/dev-audio.c +@@ -673,6 +673,7 @@ static void usb_audio_class_init(ObjectClass *klass, void *data) + + dc->vmsd = &vmstate_usb_audio; + dc->props = usb_audio_properties; ++ set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + k->product_desc = "QEMU USB Audio Interface"; + k->usb_desc = &desc_audio; + k->init = usb_audio_initfn; +diff --git a/hw/usb/dev-bluetooth.c b/hw/usb/dev-bluetooth.c +index 786e30e..7f292b1 100644 +--- a/hw/usb/dev-bluetooth.c ++++ b/hw/usb/dev-bluetooth.c +@@ -560,6 +560,7 @@ static void usb_bt_class_initfn(ObjectClass *klass, void *data) + uc->handle_data = usb_bt_handle_data; + uc->handle_destroy = usb_bt_handle_destroy; + dc->vmsd = &vmstate_usb_bt; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + } + + static const TypeInfo bt_info = { +diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c +index 31f3cde..66c6331 100644 +--- a/hw/usb/dev-hid.c ++++ b/hw/usb/dev-hid.c +@@ -658,6 +658,7 @@ static void usb_tablet_class_initfn(ObjectClass *klass, void *data) + uc->product_desc = "QEMU USB Tablet"; + dc->vmsd = &vmstate_usb_ptr; + dc->props = usb_tablet_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo usb_tablet_info = { +@@ -677,6 +678,7 @@ static void usb_mouse_class_initfn(ObjectClass *klass, void *data) + uc->product_desc = "QEMU USB Mouse"; + uc->usb_desc = &desc_mouse; + dc->vmsd = &vmstate_usb_ptr; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo usb_mouse_info = { +@@ -696,6 +698,7 @@ static void usb_keyboard_class_initfn(ObjectClass *klass, void *data) + uc->product_desc = "QEMU USB Keyboard"; + uc->usb_desc = &desc_keyboard; + dc->vmsd = &vmstate_usb_kbd; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo usb_keyboard_info = { +diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c +index a5f092b..4188a3c 100644 +--- a/hw/usb/dev-hub.c ++++ b/hw/usb/dev-hub.c +@@ -570,6 +570,7 @@ static void usb_hub_class_initfn(ObjectClass *klass, void *data) + uc->handle_control = usb_hub_handle_control; + uc->handle_data = usb_hub_handle_data; + uc->handle_destroy = usb_hub_handle_destroy; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->fw_name = "hub"; + dc->vmsd = &vmstate_usb_hub; + } +diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c +index 5473ac2..660d774 100644 +--- a/hw/usb/dev-network.c ++++ b/hw/usb/dev-network.c +@@ -1429,6 +1429,7 @@ static void usb_net_class_initfn(ObjectClass *klass, void *data) + uc->handle_control = usb_net_handle_control; + uc->handle_data = usb_net_handle_data; + uc->handle_destroy = usb_net_handle_destroy; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->fw_name = "network"; + dc->vmsd = &vmstate_usb_net; + dc->props = net_properties; +diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c +index 2fc8a3b..0b150d4 100644 +--- a/hw/usb/dev-serial.c ++++ b/hw/usb/dev-serial.c +@@ -590,6 +590,7 @@ static void usb_serial_class_initfn(ObjectClass *klass, void *data) + uc->handle_data = usb_serial_handle_data; + dc->vmsd = &vmstate_usb_serial; + dc->props = serial_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo serial_info = { +@@ -617,6 +618,7 @@ static void usb_braille_class_initfn(ObjectClass *klass, void *data) + uc->handle_data = usb_serial_handle_data; + dc->vmsd = &vmstate_usb_serial; + dc->props = braille_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo braille_info = { +diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c +index 125cc2c..c1acf70 100644 +--- a/hw/usb/dev-smartcard-reader.c ++++ b/hw/usb/dev-smartcard-reader.c +@@ -1449,6 +1449,7 @@ static void ccid_class_initfn(ObjectClass *klass, void *data) + dc->desc = "CCID Rev 1.1 smartcard reader"; + dc->vmsd = &ccid_vmstate; + dc->props = ccid_properties; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + } + + static const TypeInfo ccid_info = { +diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c +index fe914ab..44a0e34 100644 +--- a/hw/usb/dev-storage.c ++++ b/hw/usb/dev-storage.c +@@ -744,6 +744,7 @@ static void usb_msd_class_initfn_common(ObjectClass *klass) + uc->handle_reset = usb_msd_handle_reset; + uc->handle_control = usb_msd_handle_control; + uc->handle_data = usb_msd_handle_data; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->fw_name = "storage"; + dc->vmsd = &vmstate_usb_msd; + } +diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c +index 6efab62..63ad12e 100644 +--- a/hw/usb/dev-uas.c ++++ b/hw/usb/dev-uas.c +@@ -916,6 +916,7 @@ static void usb_uas_class_initfn(ObjectClass *klass, void *data) + uc->handle_control = usb_uas_handle_control; + uc->handle_data = usb_uas_handle_data; + uc->handle_destroy = usb_uas_handle_destroy; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->fw_name = "storage"; + dc->vmsd = &vmstate_usb_uas; + } +diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c +index 3be5cde..1b09235 100644 +--- a/hw/usb/dev-wacom.c ++++ b/hw/usb/dev-wacom.c +@@ -362,6 +362,7 @@ static void usb_wacom_class_init(ObjectClass *klass, void *data) + uc->handle_control = usb_wacom_handle_control; + uc->handle_data = usb_wacom_handle_data; + uc->handle_destroy = usb_wacom_handle_destroy; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "QEMU PenPartner Tablet"; + dc->vmsd = &vmstate_usb_wacom; + } +diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c +index 0eb7826..2f9aa0e 100644 +--- a/hw/usb/hcd-ehci-pci.c ++++ b/hw/usb/hcd-ehci-pci.c +@@ -129,11 +129,13 @@ static const TypeInfo ehci_pci_type_info = { + static void ehci_data_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + EHCIPCIInfo *i = data; + + k->vendor_id = i->vendor_id; + k->device_id = i->device_id; + k->revision = i->revision; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + } + + static struct EHCIPCIInfo ehci_pci_info[] = { +diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c +index b68a66a..b0b25d4 100644 +--- a/hw/usb/hcd-ehci-sysbus.c ++++ b/hw/usb/hcd-ehci-sysbus.c +@@ -56,6 +56,7 @@ static void ehci_sysbus_class_init(ObjectClass *klass, void *data) + k->init = usb_ehci_sysbus_initfn; + dc->vmsd = &vmstate_ehci_sysbus; + dc->props = ehci_sysbus_properties; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + } + + static const TypeInfo ehci_type_info = { +@@ -70,7 +71,9 @@ static const TypeInfo ehci_type_info = { + static void ehci_xlnx_class_init(ObjectClass *oc, void *data) + { + SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc); ++ DeviceClass *dc = DEVICE_CLASS(oc); + ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + sec->capsbase = 0x100; + sec->opregbase = 0x140; + } +@@ -84,9 +87,11 @@ static const TypeInfo ehci_xlnx_type_info = { + static void ehci_exynos4210_class_init(ObjectClass *oc, void *data) + { + SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc); ++ DeviceClass *dc = DEVICE_CLASS(oc); + + sec->capsbase = 0x0; + sec->opregbase = 0x10; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + } + + static const TypeInfo ehci_exynos4210_type_info = { +diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c +index 51241cd..c8d1420 100644 +--- a/hw/usb/hcd-ohci.c ++++ b/hw/usb/hcd-ohci.c +@@ -1906,6 +1906,7 @@ static void ohci_pci_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_APPLE_IPID_USB; + k->class_id = PCI_CLASS_SERIAL_USB; + k->no_hotplug = 1; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + dc->desc = "Apple USB Controller"; + dc->props = ohci_pci_properties; + } +@@ -1929,6 +1930,7 @@ static void ohci_sysbus_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *sbc = SYS_BUS_DEVICE_CLASS(klass); + + sbc->init = ohci_init_pxa; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + dc->desc = "OHCI USB Controller"; + dc->props = ohci_sysbus_properties; + } +diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c +index c85b203..4fc3410 100644 +--- a/hw/usb/hcd-uhci.c ++++ b/hw/usb/hcd-uhci.c +@@ -1313,6 +1313,7 @@ static void uhci_class_init(ObjectClass *klass, void *data) + k->no_hotplug = 1; + dc->vmsd = &vmstate_uhci; + dc->props = uhci_properties; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + u->info = *info; + } + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 0061cbe..9d7315f 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -3611,6 +3611,7 @@ static void xhci_class_init(ObjectClass *klass, void *data) + dc->vmsd = &vmstate_xhci; + dc->props = xhci_properties; + dc->reset = xhci_reset; ++ set_bit(DEVICE_CATEGORY_USB, dc->categories); + k->init = usb_xhci_initfn; + k->vendor_id = PCI_VENDOR_ID_NEC; + k->device_id = PCI_DEVICE_ID_NEC_UPD720200; +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index e2f3cc8..f660770 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -1351,6 +1351,7 @@ static void usb_host_class_initfn(ObjectClass *klass, void *data) + uc->flush_ep_queue = usb_host_flush_ep_queue; + dc->vmsd = &vmstate_usb_host; + dc->props = usb_host_dev_properties; ++ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + } + + static TypeInfo usb_host_dev_info = { +diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c +index a594e95..8b8c010 100644 +--- a/hw/usb/redirect.c ++++ b/hw/usb/redirect.c +@@ -2362,6 +2362,7 @@ static void usbredir_class_initfn(ObjectClass *klass, void *data) + uc->ep_stopped = usbredir_ep_stopped; + dc->vmsd = &usbredir_vmstate; + dc->props = usbredir_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo usbredir_dev_info = { +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index d669756..85661f6 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -391,6 +391,7 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = virtio_balloon_device_exit; + dc->props = virtio_balloon_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + vdc->init = virtio_balloon_device_init; + vdc->get_config = virtio_balloon_get_config; + vdc->set_config = virtio_balloon_set_config; +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index d82f6ff..ba8848f 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -917,6 +917,7 @@ static void virtio_9p_pci_class_init(ObjectClass *klass, void *data) + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_9P; + pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; + pcidev_k->class_id = 0x2; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->props = virtio_9p_pci_properties; + } + +@@ -1071,6 +1072,7 @@ static void virtio_blk_pci_class_init(ObjectClass *klass, void *data) + VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->props = virtio_blk_pci_properties; + k->init = virtio_blk_pci_init; + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; +@@ -1141,6 +1143,7 @@ static void virtio_scsi_pci_class_init(ObjectClass *klass, void *data) + VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + k->init = virtio_scsi_pci_init_pci; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->props = virtio_scsi_pci_properties; + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI; +@@ -1197,6 +1200,7 @@ static void vhost_scsi_pci_class_init(ObjectClass *klass, void *data) + VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + k->init = vhost_scsi_pci_init_pci; ++ set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->props = vhost_scsi_pci_properties; + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI; +@@ -1277,6 +1281,7 @@ static void virtio_balloon_pci_class_init(ObjectClass *klass, void *data) + VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + k->init = virtio_balloon_pci_init; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->props = virtio_balloon_pci_properties; + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BALLOON; +@@ -1362,6 +1367,7 @@ static void virtio_serial_pci_class_init(ObjectClass *klass, void *data) + VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + k->init = virtio_serial_pci_init; ++ set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->props = virtio_serial_pci_properties; + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_CONSOLE; +@@ -1423,6 +1429,7 @@ static void virtio_net_pci_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_VIRTIO_NET; + k->revision = VIRTIO_PCI_ABI_VERSION; + k->class_id = PCI_CLASS_NETWORK_ETHERNET; ++ set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + dc->props = virtio_net_properties; + vpciklass->init = virtio_net_pci_init; + } +@@ -1474,6 +1481,7 @@ static void virtio_rng_pci_class_init(ObjectClass *klass, void *data) + PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); + + k->init = virtio_rng_pci_init; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->props = virtio_rng_pci_properties; + + pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; +diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c +index cb787c7..bac8421 100644 +--- a/hw/virtio/virtio-rng.c ++++ b/hw/virtio/virtio-rng.c +@@ -207,6 +207,7 @@ static void virtio_rng_class_init(ObjectClass *klass, void *data) + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); + dc->exit = virtio_rng_device_exit; + dc->props = virtio_rng_properties; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + vdc->init = virtio_rng_device_init; + vdc->get_features = get_features; + } +diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c +index 05af0b1..a2ace52 100644 +--- a/hw/watchdog/wdt_i6300esb.c ++++ b/hw/watchdog/wdt_i6300esb.c +@@ -450,6 +450,7 @@ static void i6300esb_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_SYSTEM_OTHER; + dc->reset = i6300esb_reset; + dc->vmsd = &vmstate_i6300esb; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo i6300esb_info = { +diff --git a/hw/watchdog/wdt_ib700.c b/hw/watchdog/wdt_ib700.c +index 6b8e33a..ac88cec 100644 +--- a/hw/watchdog/wdt_ib700.c ++++ b/hw/watchdog/wdt_ib700.c +@@ -131,6 +131,7 @@ static void wdt_ib700_class_init(ObjectClass *klass, void *data) + ic->init = wdt_ib700_init; + dc->reset = wdt_ib700_reset; + dc->vmsd = &vmstate_ib700; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo wdt_ib700_info = { +diff --git a/hw/xen/xen_platform.c b/hw/xen/xen_platform.c +index b6c6793..bb9d0cd 100644 +--- a/hw/xen/xen_platform.c ++++ b/hw/xen/xen_platform.c +@@ -414,6 +414,7 @@ static void xen_platform_class_init(ObjectClass *klass, void *data) + k->subsystem_vendor_id = PCI_VENDOR_ID_XEN; + k->subsystem_id = PCI_DEVICE_ID_XEN_PLATFORM; + k->revision = 1; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->desc = "XEN platform pci device"; + dc->reset = platform_reset; + dc->vmsd = &vmstate_xen_platform; +diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c +index c199818..8ba577c 100644 +--- a/hw/xen/xen_pt.c ++++ b/hw/xen/xen_pt.c +@@ -825,6 +825,7 @@ static void xen_pci_passthrough_class_init(ObjectClass *klass, void *data) + k->exit = xen_pt_unregister_device; + k->config_read = xen_pt_pci_read_config; + k->config_write = xen_pt_pci_write_config; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->desc = "Assign an host PCI device with Xen"; + dc->props = xen_pci_passthrough_properties; + }; +-- +1.7.1 + diff --git a/SOURCES/kvm-display-cirrus-check-vga-bits-per-pixel-bpp-value.patch b/SOURCES/kvm-display-cirrus-check-vga-bits-per-pixel-bpp-value.patch new file mode 100644 index 0000000..e3cbced --- /dev/null +++ b/SOURCES/kvm-display-cirrus-check-vga-bits-per-pixel-bpp-value.patch @@ -0,0 +1,89 @@ +From 4394f52159cec32cded60ec8f86cd4b92a85bfe5 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:47 +0100 +Subject: [PATCH 04/11] display: cirrus: check vga bits per pixel(bpp) value + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 73568 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/7] display: cirrus: check vga bits per pixel(bpp) value +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Prasad J Pandit + +In Cirrus CLGD 54xx VGA Emulator, if cirrus graphics mode is VGA, +'cirrus_get_bpp' returns zero(0), which could lead to a divide +by zero error in while copying pixel data. The same could occur +via blit pitch values. Add check to avoid it. + +Reported-by: Huawei PSIRT +Signed-off-by: Prasad J Pandit +Message-id: 1476776717-24807-1-git-send-email-ppandit@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4299b90e9ba9ce5ca9024572804ba751aa1a7e70) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index c42dfcf..dacfac6 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -267,6 +267,9 @@ static void cirrus_update_memory_access(CirrusVGAState *s); + static bool blit_region_is_unsafe(struct CirrusVGAState *s, + int32_t pitch, int32_t addr) + { ++ if (!pitch) { ++ return true; ++ } + if (pitch < 0) { + int64_t min = addr + + ((int64_t)s->cirrus_blt_height-1) * pitch; +@@ -710,7 +713,7 @@ static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s) + s->cirrus_addr_mask)); + } + +-static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) ++static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + { + int sx = 0, sy = 0; + int dx = 0, dy = 0; +@@ -724,6 +727,9 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + int width, height; + + depth = s->vga.get_bpp(&s->vga) / 8; ++ if (!depth) { ++ return 0; ++ } + s->vga.get_resolution(&s->vga, &width, &height); + + /* extra x, y */ +@@ -778,6 +784,8 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, + s->cirrus_blt_dstpitch, s->cirrus_blt_width, + s->cirrus_blt_height); ++ ++ return 1; + } + + static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s) +@@ -785,11 +793,9 @@ static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s) + if (blit_is_unsafe(s)) + return 0; + +- cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr, ++ return cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr, + s->cirrus_blt_srcaddr - s->vga.start_addr, + s->cirrus_blt_width, s->cirrus_blt_height); +- +- return 1; + } + + /*************************************** +-- +1.8.3.1 + diff --git a/SOURCES/kvm-display-cirrus-ignore-source-pitch-value-as-needed-i.patch b/SOURCES/kvm-display-cirrus-ignore-source-pitch-value-as-needed-i.patch new file mode 100644 index 0000000..a61d958 --- /dev/null +++ b/SOURCES/kvm-display-cirrus-ignore-source-pitch-value-as-needed-i.patch @@ -0,0 +1,85 @@ +From 23ae0a2bec72997626c3ba834f036b9a3626eedc Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 7 Feb 2017 10:07:48 +0100 +Subject: [PATCH 05/11] display: cirrus: ignore source pitch value as needed in + blit_is_unsafe + +RH-Author: Gerd Hoffmann +Message-id: <1486462072-32174-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 73563 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 3/7] display: cirrus: ignore source pitch value as needed in blit_is_unsafe +Bugzilla: 1418233 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Bruce Rogers + +Commit 4299b90 added a check which is too broad, given that the source +pitch value is not required to be initialized for solid fill operations. +This patch refines the blit_is_unsafe() check to ignore source pitch in +that case. After applying the above commit as a security patch, we +noticed the SLES 11 SP4 guest gui failed to initialize properly. + +Signed-off-by: Bruce Rogers +Message-id: 20170109203520.5619-1-brogers@suse.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 913a87885f589d263e682c2eb6637c6e14538061) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index dacfac6..c8f2f26 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -289,7 +289,7 @@ static bool blit_region_is_unsafe(struct CirrusVGAState *s, + return false; + } + +-static bool blit_is_unsafe(struct CirrusVGAState *s) ++static bool blit_is_unsafe(struct CirrusVGAState *s, bool dst_only) + { + /* should be the case, see cirrus_bitblt_start */ + assert(s->cirrus_blt_width > 0); +@@ -303,6 +303,9 @@ static bool blit_is_unsafe(struct CirrusVGAState *s) + s->cirrus_blt_dstaddr & s->cirrus_addr_mask)) { + return true; + } ++ if (dst_only) { ++ return false; ++ } + if (blit_region_is_unsafe(s, s->cirrus_blt_srcpitch, + s->cirrus_blt_srcaddr & s->cirrus_addr_mask)) { + return true; +@@ -668,7 +671,7 @@ static int cirrus_bitblt_common_patterncopy(CirrusVGAState * s, + + dst = s->vga.vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask); + +- if (blit_is_unsafe(s)) ++ if (blit_is_unsafe(s, false)) + return 0; + + (*s->cirrus_rop) (s, dst, src, +@@ -686,7 +689,7 @@ static int cirrus_bitblt_solidfill(CirrusVGAState *s, int blt_rop) + { + cirrus_fill_t rop_func; + +- if (blit_is_unsafe(s)) { ++ if (blit_is_unsafe(s, true)) { + return 0; + } + rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; +@@ -790,7 +793,7 @@ static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) + + static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s) + { +- if (blit_is_unsafe(s)) ++ if (blit_is_unsafe(s, false)) + return 0; + + return cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dmg-coding-style-and-indentation-cleanup.patch b/SOURCES/kvm-dmg-coding-style-and-indentation-cleanup.patch new file mode 100644 index 0000000..f8d21c2 --- /dev/null +++ b/SOURCES/kvm-dmg-coding-style-and-indentation-cleanup.patch @@ -0,0 +1,336 @@ +From 746c0b5934008a7e6a31c5de8ee5e799f88da9d9 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:40 +0100 +Subject: [PATCH 33/49] dmg: coding style and indentation cleanup + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-34-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 33/48] dmg: coding style and indentation cleanup +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Clean up the mix of tabs and spaces, as well as the coding style +violations in block/dmg.c. There are no semantic changes since this +patch simply reformats the code. + +This patch is necessary before we can make meaningful changes to this +file, due to the inconsistent formatting and confusing indentation. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 224 +++++++++++++++++++++++++++++++--------------------------- + 1 files changed, 120 insertions(+), 104 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index d5e9b1f..be2f26e 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -96,9 +96,9 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVDMGState *s = bs->opaque; +- uint64_t info_begin,info_end,last_in_offset,last_out_offset; ++ uint64_t info_begin, info_end, last_in_offset, last_out_offset; + uint32_t count, tmp; +- uint32_t max_compressed_size=1,max_sectors_per_chunk=1,i; ++ uint32_t max_compressed_size = 1, max_sectors_per_chunk = 1, i; + int64_t offset; + int ret; + +@@ -160,37 +160,39 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- if (type == 0x6d697368 && count >= 244) { +- int new_size, chunk_count; ++ if (type == 0x6d697368 && count >= 244) { ++ int new_size, chunk_count; + + offset += 4; + offset += 200; + +- chunk_count = (count-204)/40; +- new_size = sizeof(uint64_t) * (s->n_chunks + chunk_count); +- s->types = g_realloc(s->types, new_size/2); +- s->offsets = g_realloc(s->offsets, new_size); +- s->lengths = g_realloc(s->lengths, new_size); +- s->sectors = g_realloc(s->sectors, new_size); +- s->sectorcounts = g_realloc(s->sectorcounts, new_size); ++ chunk_count = (count - 204) / 40; ++ new_size = sizeof(uint64_t) * (s->n_chunks + chunk_count); ++ s->types = g_realloc(s->types, new_size / 2); ++ s->offsets = g_realloc(s->offsets, new_size); ++ s->lengths = g_realloc(s->lengths, new_size); ++ s->sectors = g_realloc(s->sectors, new_size); ++ s->sectorcounts = g_realloc(s->sectorcounts, new_size); + + for (i = s->n_chunks; i < s->n_chunks + chunk_count; i++) { + ret = read_uint32(bs, offset, &s->types[i]); + if (ret < 0) { + goto fail; + } +- offset += 4; +- if(s->types[i]!=0x80000005 && s->types[i]!=1 && s->types[i]!=2) { +- if(s->types[i]==0xffffffff) { +- last_in_offset = s->offsets[i-1]+s->lengths[i-1]; +- last_out_offset = s->sectors[i-1]+s->sectorcounts[i-1]; +- } +- chunk_count--; +- i--; +- offset += 36; +- continue; +- } +- offset += 4; ++ offset += 4; ++ if (s->types[i] != 0x80000005 && s->types[i] != 1 && ++ s->types[i] != 2) { ++ if (s->types[i] == 0xffffffff) { ++ last_in_offset = s->offsets[i - 1] + s->lengths[i - 1]; ++ last_out_offset = s->sectors[i - 1] + ++ s->sectorcounts[i - 1]; ++ } ++ chunk_count--; ++ i--; ++ offset += 36; ++ continue; ++ } ++ offset += 4; + + ret = read_uint64(bs, offset, &s->sectors[i]); + if (ret < 0) { +@@ -218,19 +220,21 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + } + offset += 8; + +- if(s->lengths[i]>max_compressed_size) +- max_compressed_size = s->lengths[i]; +- if(s->sectorcounts[i]>max_sectors_per_chunk) +- max_sectors_per_chunk = s->sectorcounts[i]; +- } +- s->n_chunks+=chunk_count; +- } ++ if (s->lengths[i] > max_compressed_size) { ++ max_compressed_size = s->lengths[i]; ++ } ++ if (s->sectorcounts[i] > max_sectors_per_chunk) { ++ max_sectors_per_chunk = s->sectorcounts[i]; ++ } ++ } ++ s->n_chunks += chunk_count; ++ } + } + + /* initialize zlib engine */ +- s->compressed_chunk = g_malloc(max_compressed_size+1); +- s->uncompressed_chunk = g_malloc(512*max_sectors_per_chunk); +- if(inflateInit(&s->zstream) != Z_OK) { ++ s->compressed_chunk = g_malloc(max_compressed_size + 1); ++ s->uncompressed_chunk = g_malloc(512 * max_sectors_per_chunk); ++ if (inflateInit(&s->zstream) != Z_OK) { + ret = -EINVAL; + goto fail; + } +@@ -252,27 +256,29 @@ fail: + } + + static inline int is_sector_in_chunk(BDRVDMGState* s, +- uint32_t chunk_num,int sector_num) ++ uint32_t chunk_num, int sector_num) + { +- if(chunk_num>=s->n_chunks || s->sectors[chunk_num]>sector_num || +- s->sectors[chunk_num]+s->sectorcounts[chunk_num]<=sector_num) +- return 0; +- else +- return -1; ++ if (chunk_num >= s->n_chunks || s->sectors[chunk_num] > sector_num || ++ s->sectors[chunk_num] + s->sectorcounts[chunk_num] <= sector_num) { ++ return 0; ++ } else { ++ return -1; ++ } + } + +-static inline uint32_t search_chunk(BDRVDMGState* s,int sector_num) ++static inline uint32_t search_chunk(BDRVDMGState *s, int sector_num) + { + /* binary search */ +- uint32_t chunk1=0,chunk2=s->n_chunks,chunk3; +- while(chunk1!=chunk2) { +- chunk3 = (chunk1+chunk2)/2; +- if(s->sectors[chunk3]>sector_num) +- chunk2 = chunk3; +- else if(s->sectors[chunk3]+s->sectorcounts[chunk3]>sector_num) +- return chunk3; +- else +- chunk1 = chunk3; ++ uint32_t chunk1 = 0, chunk2 = s->n_chunks, chunk3; ++ while (chunk1 != chunk2) { ++ chunk3 = (chunk1 + chunk2) / 2; ++ if (s->sectors[chunk3] > sector_num) { ++ chunk2 = chunk3; ++ } else if (s->sectors[chunk3] + s->sectorcounts[chunk3] > sector_num) { ++ return chunk3; ++ } else { ++ chunk1 = chunk3; ++ } + } + return s->n_chunks; /* error */ + } +@@ -281,54 +287,62 @@ static inline int dmg_read_chunk(BlockDriverState *bs, int sector_num) + { + BDRVDMGState *s = bs->opaque; + +- if(!is_sector_in_chunk(s,s->current_chunk,sector_num)) { +- int ret; +- uint32_t chunk = search_chunk(s,sector_num); ++ if (!is_sector_in_chunk(s, s->current_chunk, sector_num)) { ++ int ret; ++ uint32_t chunk = search_chunk(s, sector_num); + +- if(chunk>=s->n_chunks) +- return -1; ++ if (chunk >= s->n_chunks) { ++ return -1; ++ } + +- s->current_chunk = s->n_chunks; +- switch(s->types[chunk]) { +- case 0x80000005: { /* zlib compressed */ +- int i; ++ s->current_chunk = s->n_chunks; ++ switch (s->types[chunk]) { ++ case 0x80000005: { /* zlib compressed */ ++ int i; + +- /* we need to buffer, because only the chunk as whole can be +- * inflated. */ +- i=0; +- do { ++ /* we need to buffer, because only the chunk as whole can be ++ * inflated. */ ++ i = 0; ++ do { + ret = bdrv_pread(bs->file, s->offsets[chunk] + i, +- s->compressed_chunk+i, s->lengths[chunk]-i); +- if(ret<0 && errno==EINTR) +- ret=0; +- i+=ret; +- } while(ret>=0 && ret+ilengths[chunk]); +- +- if (ret != s->lengths[chunk]) +- return -1; +- +- s->zstream.next_in = s->compressed_chunk; +- s->zstream.avail_in = s->lengths[chunk]; +- s->zstream.next_out = s->uncompressed_chunk; +- s->zstream.avail_out = 512*s->sectorcounts[chunk]; +- ret = inflateReset(&s->zstream); +- if(ret != Z_OK) +- return -1; +- ret = inflate(&s->zstream, Z_FINISH); +- if(ret != Z_STREAM_END || s->zstream.total_out != 512*s->sectorcounts[chunk]) +- return -1; +- break; } +- case 1: /* copy */ +- ret = bdrv_pread(bs->file, s->offsets[chunk], ++ s->compressed_chunk + i, ++ s->lengths[chunk] - i); ++ if (ret < 0 && errno == EINTR) { ++ ret = 0; ++ } ++ i += ret; ++ } while (ret >= 0 && ret + i < s->lengths[chunk]); ++ ++ if (ret != s->lengths[chunk]) { ++ return -1; ++ } ++ ++ s->zstream.next_in = s->compressed_chunk; ++ s->zstream.avail_in = s->lengths[chunk]; ++ s->zstream.next_out = s->uncompressed_chunk; ++ s->zstream.avail_out = 512 * s->sectorcounts[chunk]; ++ ret = inflateReset(&s->zstream); ++ if (ret != Z_OK) { ++ return -1; ++ } ++ ret = inflate(&s->zstream, Z_FINISH); ++ if (ret != Z_STREAM_END || ++ s->zstream.total_out != 512 * s->sectorcounts[chunk]) { ++ return -1; ++ } ++ break; } ++ case 1: /* copy */ ++ ret = bdrv_pread(bs->file, s->offsets[chunk], + s->uncompressed_chunk, s->lengths[chunk]); +- if (ret != s->lengths[chunk]) +- return -1; +- break; +- case 2: /* zero */ +- memset(s->uncompressed_chunk, 0, 512*s->sectorcounts[chunk]); +- break; +- } +- s->current_chunk = chunk; ++ if (ret != s->lengths[chunk]) { ++ return -1; ++ } ++ break; ++ case 2: /* zero */ ++ memset(s->uncompressed_chunk, 0, 512 * s->sectorcounts[chunk]); ++ break; ++ } ++ s->current_chunk = chunk; + } + return 0; + } +@@ -339,12 +353,14 @@ static int dmg_read(BlockDriverState *bs, int64_t sector_num, + BDRVDMGState *s = bs->opaque; + int i; + +- for(i=0;isectors[s->current_chunk]; +- memcpy(buf+i*512,s->uncompressed_chunk+sector_offset_in_chunk*512,512); ++ for (i = 0; i < nb_sectors; i++) { ++ uint32_t sector_offset_in_chunk; ++ if (dmg_read_chunk(bs, sector_num + i) != 0) { ++ return -1; ++ } ++ sector_offset_in_chunk = sector_num + i - s->sectors[s->current_chunk]; ++ memcpy(buf + i * 512, ++ s->uncompressed_chunk + sector_offset_in_chunk * 512, 512); + } + return 0; + } +@@ -376,12 +392,12 @@ static void dmg_close(BlockDriverState *bs) + } + + static BlockDriver bdrv_dmg = { +- .format_name = "dmg", +- .instance_size = sizeof(BDRVDMGState), +- .bdrv_probe = dmg_probe, +- .bdrv_open = dmg_open, +- .bdrv_read = dmg_co_read, +- .bdrv_close = dmg_close, ++ .format_name = "dmg", ++ .instance_size = sizeof(BDRVDMGState), ++ .bdrv_probe = dmg_probe, ++ .bdrv_open = dmg_open, ++ .bdrv_read = dmg_co_read, ++ .bdrv_close = dmg_close, + }; + + static void bdrv_dmg_init(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-dmg-drop-broken-bdrv_pread-loop.patch b/SOURCES/kvm-dmg-drop-broken-bdrv_pread-loop.patch new file mode 100644 index 0000000..b3ed27a --- /dev/null +++ b/SOURCES/kvm-dmg-drop-broken-bdrv_pread-loop.patch @@ -0,0 +1,71 @@ +From 35538bdb46122fdf90ca869df29869b8aeaefa09 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:42 +0100 +Subject: [PATCH 35/49] dmg: drop broken bdrv_pread() loop + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-36-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 35/48] dmg: drop broken bdrv_pread() loop +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +It is not necessary to check errno for EINTR and the block layer does +not produce short reads. Therefore we can drop the loop that attempts +to read a compressed chunk. + +The loop is buggy because it incorrectly adds the transferred bytes +twice: + +do { +ret = bdrv_pread(...); +i += ret; +} while (ret >= 0 && ret + i < s->lengths[chunk]); + +Luckily we can drop the loop completely and perform a single +bdrv_pread(). + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 15 ++------------- + 1 files changed, 2 insertions(+), 13 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index f4f3e8e..1cc5426 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -298,21 +298,10 @@ static inline int dmg_read_chunk(BlockDriverState *bs, int sector_num) + s->current_chunk = s->n_chunks; + switch (s->types[chunk]) { + case 0x80000005: { /* zlib compressed */ +- int i; +- + /* we need to buffer, because only the chunk as whole can be + * inflated. */ +- i = 0; +- do { +- ret = bdrv_pread(bs->file, s->offsets[chunk] + i, +- s->compressed_chunk + i, +- s->lengths[chunk] - i); +- if (ret < 0 && errno == EINTR) { +- ret = 0; +- } +- i += ret; +- } while (ret >= 0 && ret + i < s->lengths[chunk]); +- ++ ret = bdrv_pread(bs->file, s->offsets[chunk], ++ s->compressed_chunk, s->lengths[chunk]); + if (ret != s->lengths[chunk]) { + return -1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-dmg-prevent-chunk-buffer-overflow-CVE-2014-0145.patch b/SOURCES/kvm-dmg-prevent-chunk-buffer-overflow-CVE-2014-0145.patch new file mode 100644 index 0000000..9e2578c --- /dev/null +++ b/SOURCES/kvm-dmg-prevent-chunk-buffer-overflow-CVE-2014-0145.patch @@ -0,0 +1,105 @@ +From 0b7385ddaa538c5995d2f16333a80a0f579a6212 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:46 +0100 +Subject: [PATCH 39/49] dmg: prevent chunk buffer overflow (CVE-2014-0145) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-40-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 39/48] dmg: prevent chunk buffer overflow (CVE-2014-0145) +Bugzilla: 1079325 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079325 +Upstream status: Embargoed + +Both compressed and uncompressed I/O is buffered. dmg_open() calculates +the maximum buffer size needed from the metadata in the image file. + +There is currently a buffer overflow since ->lengths[] is accounted +against the maximum compressed buffer size but actually uses the +uncompressed buffer: + +switch (s->types[chunk]) { +case 1: /bin /boot /cgroup /dev /etc /home /lib /lib64 /lost+found /media /misc /mnt /net /opt /proc /root /sbin /selinux /srv /sys /tmp /usr /var copy audio/ backends/ block/ bsd-user/ default-configs/ disas/ docs/ dtc/ fpu/ fsdev/ gdb-xml/ hw/ include/ ldscripts/ libcacard/ linux-headers/ linux-user/ net/ pc-bios/ pixman/ po/ qapi/ qga/ QMP/ qobject/ qom/ redhat/ roms/ scripts/ slirp/ stubs/ sysconfigs/ target-alpha/ target-arm/ target-cris/ target-i386/ target-lm32/ target-m68k/ target-microblaze/ target-mips/ target-moxie/ target-openrisc/ target-ppc/ target-s390x/ target-sh4/ target-sparc/ target-unicore32/ target-xtensa/ tcg/ tests/ trace/ ui/ util/ +ret = bdrv_pread(bs->file, s->offsets[chunk], +s->uncompressed_chunk, s->lengths[chunk]); + +We must account against the maximum uncompressed buffer size for type=1 +chunks. + +This patch fixes the maximum buffer size calculation to take into +account the chunk type. It is critical that we update the correct +maximum since there are two buffers ->compressed_chunk and +->uncompressed_chunk. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 39 +++++++++++++++++++++++++++++++++------ + 1 files changed, 33 insertions(+), 6 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index be0ee33..856402e 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -100,6 +100,37 @@ static int read_uint32(BlockDriverState *bs, int64_t offset, uint32_t *result) + return 0; + } + ++/* Increase max chunk sizes, if necessary. This function is used to calculate ++ * the buffer sizes needed for compressed/uncompressed chunk I/O. ++ */ ++static void update_max_chunk_size(BDRVDMGState *s, uint32_t chunk, ++ uint32_t *max_compressed_size, ++ uint32_t *max_sectors_per_chunk) ++{ ++ uint32_t compressed_size = 0; ++ uint32_t uncompressed_sectors = 0; ++ ++ switch (s->types[chunk]) { ++ case 0x80000005: /* zlib compressed */ ++ compressed_size = s->lengths[chunk]; ++ uncompressed_sectors = s->sectorcounts[chunk]; ++ break; ++ case 1: /* copy */ ++ uncompressed_sectors = (s->lengths[chunk] + 511) / 512; ++ break; ++ case 2: /* zero */ ++ uncompressed_sectors = s->sectorcounts[chunk]; ++ break; ++ } ++ ++ if (compressed_size > *max_compressed_size) { ++ *max_compressed_size = compressed_size; ++ } ++ if (uncompressed_sectors > *max_sectors_per_chunk) { ++ *max_sectors_per_chunk = uncompressed_sectors; ++ } ++} ++ + static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { +@@ -245,12 +276,8 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- if (s->lengths[i] > max_compressed_size) { +- max_compressed_size = s->lengths[i]; +- } +- if (s->sectorcounts[i] > max_sectors_per_chunk) { +- max_sectors_per_chunk = s->sectorcounts[i]; +- } ++ update_max_chunk_size(s, i, &max_compressed_size, ++ &max_sectors_per_chunk); + } + s->n_chunks += chunk_count; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-dmg-prevent-out-of-bounds-array-access-on-terminator.patch b/SOURCES/kvm-dmg-prevent-out-of-bounds-array-access-on-terminator.patch new file mode 100644 index 0000000..5181e77 --- /dev/null +++ b/SOURCES/kvm-dmg-prevent-out-of-bounds-array-access-on-terminator.patch @@ -0,0 +1,48 @@ +From bf5a2fd38203f176501ad891da1e7ea19da1673a Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:41 +0100 +Subject: [PATCH 34/49] dmg: prevent out-of-bounds array access on terminator + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-35-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 34/48] dmg: prevent out-of-bounds array access on terminator +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +When a terminator is reached the base for offsets and sectors is stored. +The following records that are processed will use this base value. + +If the first record we encounter is a terminator, then calculating the +base values would result in out-of-bounds array accesses. Don't do +that. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index be2f26e..f4f3e8e 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -182,7 +182,7 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + offset += 4; + if (s->types[i] != 0x80000005 && s->types[i] != 1 && + s->types[i] != 2) { +- if (s->types[i] == 0xffffffff) { ++ if (s->types[i] == 0xffffffff && i > 0) { + last_in_offset = s->offsets[i - 1] + s->lengths[i - 1]; + last_out_offset = s->sectors[i - 1] + + s->sectorcounts[i - 1]; +-- +1.7.1 + diff --git a/SOURCES/kvm-dmg-sanitize-chunk-length-and-sectorcount-CVE-2014-0.patch b/SOURCES/kvm-dmg-sanitize-chunk-length-and-sectorcount-CVE-2014-0.patch new file mode 100644 index 0000000..11cec63 --- /dev/null +++ b/SOURCES/kvm-dmg-sanitize-chunk-length-and-sectorcount-CVE-2014-0.patch @@ -0,0 +1,82 @@ +From ec4d254830e3da2ebb1cd9fec16c407e5b644ca6 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:44 +0100 +Subject: [PATCH 37/49] dmg: sanitize chunk length and sectorcount (CVE-2014-0145) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-38-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 37/48] dmg: sanitize chunk length and sectorcount (CVE-2014-0145) +Bugzilla: 1079325 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079325 +Upstream status: Embargoed + +Chunk length and sectorcount are used for decompression buffers as well +as the bdrv_pread() count argument. Ensure that they have reasonable +values so neither memory allocation nor conversion from uint64_t to int +will cause problems. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 24 ++++++++++++++++++++++++ + 1 files changed, 24 insertions(+), 0 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index f98c94d..ad253fe 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -27,6 +27,14 @@ + #include "qemu/module.h" + #include + ++enum { ++ /* Limit chunk sizes to prevent unreasonable amounts of memory being used ++ * or truncating when converting to 32-bit types ++ */ ++ DMG_LENGTHS_MAX = 64 * 1024 * 1024, /* 64 MB */ ++ DMG_SECTORCOUNTS_MAX = DMG_LENGTHS_MAX / 512, ++}; ++ + typedef struct BDRVDMGState { + CoMutex lock; + /* each chunk contains a certain number of sectors, +@@ -208,6 +216,14 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + } + offset += 8; + ++ if (s->sectorcounts[i] > DMG_SECTORCOUNTS_MAX) { ++ error_report("sector count %" PRIu64 " for chunk %u is " ++ "larger than max (%u)", ++ s->sectorcounts[i], i, DMG_SECTORCOUNTS_MAX); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + ret = read_uint64(bs, offset, &s->offsets[i]); + if (ret < 0) { + goto fail; +@@ -221,6 +237,14 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + } + offset += 8; + ++ if (s->lengths[i] > DMG_LENGTHS_MAX) { ++ error_report("length %" PRIu64 " for chunk %u is larger " ++ "than max (%u)", ++ s->lengths[i], i, DMG_LENGTHS_MAX); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + if (s->lengths[i] > max_compressed_size) { + max_compressed_size = s->lengths[i]; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-dmg-use-appropriate-types-when-reading-chunks.patch b/SOURCES/kvm-dmg-use-appropriate-types-when-reading-chunks.patch new file mode 100644 index 0000000..9f60c91 --- /dev/null +++ b/SOURCES/kvm-dmg-use-appropriate-types-when-reading-chunks.patch @@ -0,0 +1,56 @@ +From 6be48dc02a2906f7b88dc5b2751f19b530ec0f58 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:43 +0100 +Subject: [PATCH 36/49] dmg: use appropriate types when reading chunks + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-37-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 36/48] dmg: use appropriate types when reading chunks +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Use the right types instead of signed int: + +size_t new_size; + +This is a byte count for g_realloc() that is calculated from uint32_t +and size_t values. + +uint32_t chunk_count; + +Use the same type as s->n_chunks, which is used together with +chunk_count. + +This patch is a cleanup and does not fix bugs. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index 1cc5426..f98c94d 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -161,7 +161,8 @@ static int dmg_open(BlockDriverState *bs, QDict *options, int flags, + } + + if (type == 0x6d697368 && count >= 244) { +- int new_size, chunk_count; ++ size_t new_size; ++ uint32_t chunk_count; + + offset += 4; + offset += 200; +-- +1.7.1 + diff --git a/SOURCES/kvm-dmg-use-uint64_t-consistently-for-sectors-and-length.patch b/SOURCES/kvm-dmg-use-uint64_t-consistently-for-sectors-and-length.patch new file mode 100644 index 0000000..4262da7 --- /dev/null +++ b/SOURCES/kvm-dmg-use-uint64_t-consistently-for-sectors-and-length.patch @@ -0,0 +1,63 @@ +From dbcfb970e94adbf251dadb900128d576a7e0a737 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:45 +0100 +Subject: [PATCH 38/49] dmg: use uint64_t consistently for sectors and lengths + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-39-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 38/48] dmg: use uint64_t consistently for sectors and lengths +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +The DMG metadata is stored as uint64_t, so use the same type for +sector_num. int was a particularly poor choice since it is only 32-bit +and would truncate large values. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/dmg.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/block/dmg.c b/block/dmg.c +index ad253fe..be0ee33 100644 +--- a/block/dmg.c ++++ b/block/dmg.c +@@ -281,7 +281,7 @@ fail: + } + + static inline int is_sector_in_chunk(BDRVDMGState* s, +- uint32_t chunk_num, int sector_num) ++ uint32_t chunk_num, uint64_t sector_num) + { + if (chunk_num >= s->n_chunks || s->sectors[chunk_num] > sector_num || + s->sectors[chunk_num] + s->sectorcounts[chunk_num] <= sector_num) { +@@ -291,7 +291,7 @@ static inline int is_sector_in_chunk(BDRVDMGState* s, + } + } + +-static inline uint32_t search_chunk(BDRVDMGState *s, int sector_num) ++static inline uint32_t search_chunk(BDRVDMGState *s, uint64_t sector_num) + { + /* binary search */ + uint32_t chunk1 = 0, chunk2 = s->n_chunks, chunk3; +@@ -308,7 +308,7 @@ static inline uint32_t search_chunk(BDRVDMGState *s, int sector_num) + return s->n_chunks; /* error */ + } + +-static inline int dmg_read_chunk(BlockDriverState *bs, int sector_num) ++static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num) + { + BDRVDMGState *s = bs->opaque; + +-- +1.7.1 + diff --git a/SOURCES/kvm-doc-Drop-ref-to-Bochs-from-no-fd-bootchk-documentati.patch b/SOURCES/kvm-doc-Drop-ref-to-Bochs-from-no-fd-bootchk-documentati.patch new file mode 100644 index 0000000..65767f0 --- /dev/null +++ b/SOURCES/kvm-doc-Drop-ref-to-Bochs-from-no-fd-bootchk-documentati.patch @@ -0,0 +1,56 @@ +From 1af4a2c0eed60017741611d15b22bcdaffc97453 Mon Sep 17 00:00:00 2001 +Message-Id: <1af4a2c0eed60017741611d15b22bcdaffc97453.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:16 +0200 +Subject: [PATCH 06/14] doc: Drop ref to Bochs from -no-fd-bootchk + documentation + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-7-git-send-email-armbru@redhat.com> +Patchwork-id: 54562 +O-Subject: [PATCH 7.0 qemu-kvm 06/10] doc: Drop ref to Bochs from -no-fd-bootchk documentation +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Manual page and qemu-doc on talk about "Bochs BIOS". We use SeaBIOS, +and it implements the feature. Replace by just "BIOS", and drop the +TODO line wondering about the Bochs reference. + +Signed-off-by: Markus Armbruster +Reviewed-by: Anthony Liguori +Message-id: 1371208516-7857-7-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 4eda32f588086b6cd0ec2be6a7a6c131f8c2b427) +--- + qemu-options.hx | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + qemu-options.hx | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/qemu-options.hx b/qemu-options.hx +index 202a2cf..3c60140 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -1268,9 +1268,8 @@ DEF("no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk, + STEXI + @item -no-fd-bootchk + @findex -no-fd-bootchk +-Disable boot signature checking for floppy disks in Bochs BIOS. It may ++Disable boot signature checking for floppy disks in BIOS. May + be needed to boot from old floppy disks. +-TODO: check reference to Bochs BIOS. + ETEXI + + DEF("no-acpi", 0, QEMU_OPTION_no_acpi, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-doc-fix-hardcoded-helper-path.patch b/SOURCES/kvm-doc-fix-hardcoded-helper-path.patch new file mode 100644 index 0000000..20dcf31 --- /dev/null +++ b/SOURCES/kvm-doc-fix-hardcoded-helper-path.patch @@ -0,0 +1,74 @@ +From 4df441f7a38bf7bdbc625cfd7b79c7b9f0780adc Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Thu, 21 Nov 2013 04:58:50 +0100 +Subject: [PATCH 06/14] doc: fix hardcoded helper path + +RH-Author: Amos Kong +Message-id: <1385009930-5005-1-git-send-email-akong@redhat.com> +Patchwork-id: 55827 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2] doc: fix hardcoded helper path +Bugzilla: 1016952 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: 1016952 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6621357 +Upstream: merged, we should parse C macros in texi mode in future + +The install directory of qemu-bridge-helper is configurable, +but we use a fixed path in the documentation. + +DEFAULT_BRIDGE_HELPER macro isn't available in texi mode, +we should always use "/path/to/" prefix for dynamic paths +(e.g.: /path/to/image, /path/to/linux, etc). + +Signed-off-by: Amos Kong +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 420508fbba2a6e8eaff008715b5f7eff83f8e865) +--- +v2: replace hardcode path prefix by '/path/to/' +--- + qemu-options.hx | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-options.hx | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/qemu-options.hx b/qemu-options.hx +index 3c60140..e3c5d67 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -1593,7 +1593,7 @@ to disable script execution. + + If running QEMU as an unprivileged user, use the network helper + @var{helper} to configure the TAP interface. The default network +-helper executable is @file{/usr/local/libexec/qemu-bridge-helper}. ++helper executable is @file{/path/to/qemu-bridge-helper}. + + @option{fd}=@var{h} can be used to specify the handle of an already + opened host TAP interface. +@@ -1617,7 +1617,7 @@ qemu-system-i386 linux.img \ + #launch a QEMU instance with the default network helper to + #connect a TAP device to bridge br0 + qemu-system-i386 linux.img \ +- -net nic -net tap,"helper=/usr/local/libexec/qemu-bridge-helper" ++ -net nic -net tap,"helper=/path/to/qemu-bridge-helper" + @end example + + @item -netdev bridge,id=@var{id}[,br=@var{bridge}][,helper=@var{helper}] +@@ -1626,7 +1626,7 @@ Connect a host TAP network interface to a host bridge device. + + Use the network helper @var{helper} to configure the TAP interface and + attach it to the bridge. The default network helper executable is +-@file{/usr/local/libexec/qemu-bridge-helper} and the default bridge ++@file{/path/to/qemu-bridge-helper} and the default bridge + device is @file{br0}. + + Examples: +-- +1.7.1 + diff --git a/SOURCES/kvm-docs-Document-QAPI-union-types.patch b/SOURCES/kvm-docs-Document-QAPI-union-types.patch new file mode 100644 index 0000000..171089f --- /dev/null +++ b/SOURCES/kvm-docs-Document-QAPI-union-types.patch @@ -0,0 +1,125 @@ +From 9ff6403c20232b826766d34cbb66caea8c650bf1 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:10 +0200 +Subject: [PATCH 19/38] docs: Document QAPI union types + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-20-git-send-email-kwolf@redhat.com> +Patchwork-id: 54206 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 19/32] docs: Document QAPI union types +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 51631493e4876081ae27078b50bd95bd4418bf37) + +Signed-off-by: Kevin Wolf +--- + docs/qapi-code-gen.txt | 62 ++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 55 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + docs/qapi-code-gen.txt | 62 ++++++++++++++++++++++++++++++++++++++++++----- + 1 files changed, 55 insertions(+), 7 deletions(-) + +diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt +index cccb11e..f6f8d33 100644 +--- a/docs/qapi-code-gen.txt ++++ b/docs/qapi-code-gen.txt +@@ -34,9 +34,15 @@ OrderedDicts so that ordering is preserved. + There are two basic syntaxes used, type definitions and command definitions. + + The first syntax defines a type and is represented by a dictionary. There are +-two kinds of types that are supported: complex user-defined types, and enums. ++three kinds of user-defined types that are supported: complex types, ++enumeration types and union types. + +-A complex type is a dictionary containing a single key who's value is a ++Generally speaking, types definitions should always use CamelCase for the type ++names. Command names should be all lower case with words separated by a hyphen. ++ ++=== Complex types === ++ ++A complex type is a dictionary containing a single key whose value is a + dictionary. This corresponds to a struct in C or an Object in JSON. An + example of a complex type is: + +@@ -47,13 +53,57 @@ The use of '*' as a prefix to the name means the member is optional. Optional + members should always be added to the end of the dictionary to preserve + backwards compatibility. + +-An enumeration type is a dictionary containing a single key who's value is a ++=== Enumeration types === ++ ++An enumeration type is a dictionary containing a single key whose value is a + list of strings. An example enumeration is: + + { 'enum': 'MyEnum', 'data': [ 'value1', 'value2', 'value3' ] } + +-Generally speaking, complex types and enums should always use CamelCase for +-the type names. ++=== Union types === ++ ++Union types are used to let the user choose between several different data ++types. A union type is defined using a dictionary as explained in the ++following paragraphs. ++ ++ ++A simple union type defines a mapping from discriminator values to data types ++like in this example: ++ ++ { 'type': 'FileOptions', 'data': { 'filename': 'str' } } ++ { 'type': 'Qcow2Options', ++ 'data': { 'backing-file': 'str', 'lazy-refcounts': 'bool' } } ++ ++ { 'union': 'BlockdevOptions', ++ 'data': { 'file': 'FileOptions', ++ 'qcow2': 'Qcow2Options' } } ++ ++In the QMP wire format, a simple union is represented by a dictionary that ++contains the 'type' field as a discriminator, and a 'data' field that is of the ++specified data type corresponding to the discriminator value: ++ ++ { "type": "qcow2", "data" : { "backing-file": "/some/place/my-image", ++ "lazy-refcounts": true } } ++ ++ ++A union definition can specify a complex type as its base. In this case, the ++fields of the complex type are included as top-level fields of the union ++dictionary in the QMP wire format. An example definition is: ++ ++ { 'type': 'BlockdevCommonOptions', 'data': { 'readonly': 'bool' } } ++ { 'union': 'BlockdevOptions', ++ 'base': 'BlockdevCommonOptions', ++ 'data': { 'raw': 'RawOptions', ++ 'qcow2': 'Qcow2Options' } } ++ ++And it looks like this on the wire: ++ ++ { "type": "qcow2", ++ "readonly": false, ++ "data" : { "backing-file": "/some/place/my-image", ++ "lazy-refcounts": true } } ++ ++=== Commands === + + Commands are defined by using a list containing three members. The first + member is the command name, the second member is a dictionary containing +@@ -65,8 +115,6 @@ An example command is: + 'data': { 'arg1': 'str', '*arg2': 'str' }, + 'returns': 'str' } + +-Command names should be all lower case with words separated by a hyphen. +- + + == Code generation == + +-- +1.7.1 + diff --git a/SOURCES/kvm-docs-qapi-document-qemu-img-map.patch b/SOURCES/kvm-docs-qapi-document-qemu-img-map.patch new file mode 100644 index 0000000..14ac840 --- /dev/null +++ b/SOURCES/kvm-docs-qapi-document-qemu-img-map.patch @@ -0,0 +1,139 @@ +From f7c79aada82c99552499bc075021128f4a8653a6 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:43 +0200 +Subject: [PATCH 18/81] docs, qapi: document qemu-img map + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-19-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55001 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 18/26] docs, qapi: document qemu-img map +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Eric Blake also requested including the output in qapi-schema.json, +so that it is published through the introspection mechanism. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit facd6e2b5c0217f9d9eeb2ee497dda28009518bd) +--- + qapi-schema.json | 29 +++++++++++++++++++++++++++++ + qemu-img.texi | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 84 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 29 ++++++++++++++++++++++++++++ + qemu-img.texi | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 84 insertions(+), 0 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 780c6fe..b779458 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -795,6 +795,35 @@ + { 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] } + + ## ++# @BlockDeviceMapEntry: ++# ++# Entry in the metadata map of the device (returned by "qemu-img map") ++# ++# @start: Offset in the image of the first byte described by this entry ++# (in bytes) ++# ++# @length: Length of the range described by this entry (in bytes) ++# ++# @depth: Number of layers (0 = top image, 1 = top image's backing file, etc.) ++# before reaching one for which the range is allocated. The value is ++# in the range 0 to the depth of the image chain - 1. ++# ++# @zero: the sectors in this range read as zeros ++# ++# @data: reading the image will actually read data from a file (in particular, ++# if @offset is present this means that the sectors are not simply ++# preallocated, but contain actual data in raw format) ++# ++# @offset: if present, the image file stores the data for this range in ++# raw format at the given offset. ++# ++# Since 1.7 ++## ++{ 'type': 'BlockDeviceMapEntry', ++ 'data': { 'start': 'int', 'length': 'int', 'depth': 'int', 'zero': 'bool', ++ 'data': 'bool', '*offset': 'int' } } ++ ++## + # @BlockDirtyInfo: + # + # Block dirty bitmap information. +diff --git a/qemu-img.texi b/qemu-img.texi +index 69f1bda..8364fa1 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -213,6 +213,61 @@ To enumerate information about each disk image in the above chain, starting from + qemu-img info --backing-chain snap2.qcow2 + @end example + ++@item map [-f @var{fmt}] [--output=@var{ofmt}] @var{filename} ++ ++Dump the metadata of image @var{filename} and its backing file chain. ++In particular, this commands dumps the allocation state of every sector ++of @var{filename}, together with the topmost file that allocates it in ++the backing file chain. ++ ++Two option formats are possible. The default format (@code{human}) ++only dumps known-nonzero areas of the file. Known-zero parts of the ++file are omitted altogether, and likewise for parts that are not allocated ++throughout the chain. @command{qemu-img} output will identify a file ++from where the data can be read, and the offset in the file. Each line ++will include four fields, the first three of which are hexadecimal ++numbers. For example the first line of: ++@example ++Offset Length Mapped to File ++0 0x20000 0x50000 /tmp/overlay.qcow2 ++0x100000 0x10000 0x95380000 /tmp/backing.qcow2 ++@end example ++@noindent ++means that 0x20000 (131072) bytes starting at offset 0 in the image are ++available in /tmp/overlay.qcow2 (opened in @code{raw} format) starting ++at offset 0x50000 (327680). Data that is compressed, encrypted, or ++otherwise not available in raw format will cause an error if @code{human} ++format is in use. Note that file names can include newlines, thus it is ++not safe to parse this output format in scripts. ++ ++The alternative format @code{json} will return an array of dictionaries ++in JSON format. It will include similar information in ++the @code{start}, @code{length}, @code{offset} fields; ++it will also include other more specific information: ++@itemize @minus ++@item ++whether the sectors contain actual data or not (boolean field @code{data}; ++if false, the sectors are either unallocated or stored as optimized ++all-zero clusters); ++ ++@item ++whether the data is known to read as zero (boolean field @code{zero}); ++ ++@item ++in order to make the output shorter, the target file is expressed as ++a @code{depth}; for example, a depth of 2 refers to the backing file ++of the backing file of @var{filename}. ++@end itemize ++ ++In JSON format, the @code{offset} field is optional; it is absent in ++cases where @code{human} format would omit the entry or exit with an error. ++If @code{data} is false and the @code{offset} field is present, the ++corresponding sectors in the file are not yet in use, but they are ++preallocated. ++ ++For more information, consult @file{include/block/block.h} in QEMU's ++source code. ++ + @item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot} ] @var{filename} + + List, apply, create or delete snapshots in image @var{filename}. +-- +1.7.1 + diff --git a/SOURCES/kvm-docs-qcow2-compat-1.1-is-now-the-default.patch b/SOURCES/kvm-docs-qcow2-compat-1.1-is-now-the-default.patch new file mode 100644 index 0000000..e06aeac --- /dev/null +++ b/SOURCES/kvm-docs-qcow2-compat-1.1-is-now-the-default.patch @@ -0,0 +1,81 @@ +From cac4420752da06e6d42b5b6b9f669e9f224524b3 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 3 Feb 2014 10:52:55 -0500 +Subject: [PATCH 3/6] docs: qcow2 compat=1.1 is now the default + +Message-id: <1391424775-30596-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 57069 +O-Subject: [PATCH RHEL7.0 qemu-kvm] docs: qcow2 compat=1.1 is now the default +Bugzilla: 1048092 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Max Reitz + +Bugzilla: 1048092 +Upstream: merged +BREW: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6990898 + +Commit 9117b47717ad208b12786ce88eacb013f9b3dd1c ("qcow2: Change default +for new images to compat=1.1") changed the default qcow2 image format +version but forgot to update qemu-doc.texi and qemu-img.texi. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 7fa9e1f941b4be1f71bb42de2f2ed8805d7e7326) +Signed-off-by: Stefan Hajnoczi +--- + qemu-doc.texi | 8 ++++---- + qemu-img.texi | 8 ++++---- + 2 files changed, 8 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-doc.texi | 8 ++++---- + qemu-img.texi | 8 ++++---- + 2 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/qemu-doc.texi b/qemu-doc.texi +index 319c2f2..54ab3c5 100644 +--- a/qemu-doc.texi ++++ b/qemu-doc.texi +@@ -536,11 +536,11 @@ support of multiple VM snapshots. + Supported options: + @table @code + @item compat +-Determines the qcow2 version to use. @code{compat=0.10} uses the traditional +-image format that can be read by any QEMU since 0.10 (this is the default). ++Determines the qcow2 version to use. @code{compat=0.10} uses the ++traditional image format that can be read by any QEMU since 0.10. + @code{compat=1.1} enables image format extensions that only QEMU 1.1 and +-newer understand. Amongst others, this includes zero clusters, which allow +-efficient copy-on-read for sparse images. ++newer understand (this is the default). Amongst others, this includes ++zero clusters, which allow efficient copy-on-read for sparse images. + + @item backing_file + File name of a base image (see @option{create} subcommand) +diff --git a/qemu-img.texi b/qemu-img.texi +index a71f132..1078791 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -387,11 +387,11 @@ support of multiple VM snapshots. + Supported options: + @table @code + @item compat +-Determines the qcow2 version to use. @code{compat=0.10} uses the traditional +-image format that can be read by any QEMU since 0.10 (this is the default). ++Determines the qcow2 version to use. @code{compat=0.10} uses the ++traditional image format that can be read by any QEMU since 0.10. + @code{compat=1.1} enables image format extensions that only QEMU 1.1 and +-newer understand. Amongst others, this includes zero clusters, which allow +-efficient copy-on-read for sparse images. ++newer understand (this is the default). Amongst others, this includes zero ++clusters, which allow efficient copy-on-read for sparse images. + + @item backing_file + File name of a base image (see @option{create} subcommand) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-docs-updated-qemu-img-man-page-and-qemu-doc-to-refle.patch b/SOURCES/kvm-docs-updated-qemu-img-man-page-and-qemu-doc-to-refle.patch new file mode 100644 index 0000000..102ed67 --- /dev/null +++ b/SOURCES/kvm-docs-updated-qemu-img-man-page-and-qemu-doc-to-refle.patch @@ -0,0 +1,86 @@ +From af46a6d4f31243a842661383dc02548a1b1a3387 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Mon, 13 Jan 2014 20:53:20 +0100 +Subject: [PATCH 13/16] docs: updated qemu-img man page and qemu-doc to reflect VHDX support. + +RH-Author: Jeffrey Cody +Message-id: <8e219e849b375a123cef62478edc843bb4439841.1389633864.git.jcody@redhat.com> +Patchwork-id: 56644 +O-Subject: [RHEL7 qemu-kvm PATCH] docs: updated qemu-img man page and qemu-doc to reflect VHDX support. +Bugzilla: 1017650 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +The man page for qemu-img, and the qemu-doc, did not mention VHDX +as a supported format. This adds in reference to VHDX in those +documents. + +[Stefan Weil suggested s/Block Size/Block size/ for +consistency. I have made this change. +--Stefan] + +Signed-off-by: Jeff Cody +Reviewed-by: Stefan Weil +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8282db1b2e7394574cb55fcc608c5cb0df159d8f) + +BZ 1017650 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6861830 + +Signed-off-by: Jeff Cody +--- + qemu-doc.texi | 15 +++++++++++++++ + qemu-img.texi | 4 ++-- + 2 files changed, 17 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-doc.texi | 15 +++++++++++++++ + qemu-img.texi | 4 ++-- + 2 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/qemu-doc.texi b/qemu-doc.texi +index 5fc0eae..319c2f2 100644 +--- a/qemu-doc.texi ++++ b/qemu-doc.texi +@@ -654,6 +654,21 @@ Supported options: + Specifies which VHD subformat to use. Valid options are + @code{dynamic} (default) and @code{fixed}. + @end table ++ ++@item VHDX ++Hyper-V compatible image format (VHDX). ++Supported options: ++@table @code ++@item subformat ++Specifies which VHDX subformat to use. Valid options are ++@code{dynamic} (default) and @code{fixed}. ++@item block_state_zero ++Force use of payload blocks of type 'ZERO'. ++@item block_size ++Block size; min 1 MB, max 256 MB. 0 means auto-calculate based on image size. ++@item log_size ++Log size; min 1 MB. ++@end table + @end table + + @subsubsection Read-only formats +diff --git a/qemu-img.texi b/qemu-img.texi +index da36975..a71f132 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -427,8 +427,8 @@ This option can only be enabled if @code{compat=1.1} is specified. + + @item Other + QEMU also supports various other image file formats for compatibility with +-older QEMU versions or other hypervisors, including VMDK, VDI, VHD (vpc), qcow1 +-and QED. For a full list of supported formats see @code{qemu-img --help}. ++older QEMU versions or other hypervisors, including VMDK, VDI, VHD (vpc), VHDX, ++qcow1 and QED. For a full list of supported formats see @code{qemu-img --help}. + For a more detailed description of these formats, see the QEMU Emulation User + Documentation. + +-- +1.7.1 + diff --git a/SOURCES/kvm-don-t-disable-ctrl_mac_addr-feature-for-6.5-machine-.patch b/SOURCES/kvm-don-t-disable-ctrl_mac_addr-feature-for-6.5-machine-.patch new file mode 100644 index 0000000..aaeb05f --- /dev/null +++ b/SOURCES/kvm-don-t-disable-ctrl_mac_addr-feature-for-6.5-machine-.patch @@ -0,0 +1,60 @@ +From d3c44f73a61d44e53612fde282466a3479f33739 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Thu, 7 Nov 2013 08:38:28 +0100 +Subject: [PATCH 25/25] don't disable ctrl_mac_addr feature for 6.5 machine (RHEL only) + +RH-Author: Amos Kong +Message-id: <1383813508-6353-1-git-send-email-akong@redhat.com> +Patchwork-id: 55592 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] don't disable ctrl_mac_addr feature for 6.5 machine (RHEL only) +Bugzilla: 1005039 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: 1005039 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6540840 +Test: tested by myself + +ctrl_mac_addr is already supported in qemu-kvm 6.5, +we should not disable this feature for 6.5 machine type. + +Signed-off-by: Amos Kong +--- + hw/i386/pc_piix.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 2d8e79f..8bae4c5 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -784,10 +784,6 @@ static QEMUMachine pc_machine_rhel700 = { + .value = stringify(1),\ + },{\ + .driver = "virtio-net-pci",\ +- .property = "ctrl_mac_addr",\ +- .value = "off",\ +- },{\ +- .driver = "virtio-net-pci",\ + .property = "mq",\ + .value = "off",\ + },{\ +@@ -916,6 +912,10 @@ static QEMUMachine pc_machine_rhel650 = { + .driver = "hda-output",\ + .property = "mixer",\ + .value = "off",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "ctrl_mac_addr",\ ++ .value = "off",\ + } + + static void pc_init_rhel640(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-dump-Abstract-dump_init-with-cpu_synchronize_all_states.patch b/SOURCES/kvm-dump-Abstract-dump_init-with-cpu_synchronize_all_states.patch new file mode 100644 index 0000000..63632da --- /dev/null +++ b/SOURCES/kvm-dump-Abstract-dump_init-with-cpu_synchronize_all_states.patch @@ -0,0 +1,51 @@ +From 5f3d2969b85b5e679b6d110d180500914a499993 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:35 +0200 +Subject: dump: Abstract dump_init() with cpu_synchronize_all_states() + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-6-git-send-email-lersek@redhat.com> +Patchwork-id: 53164 +O-Subject: [RHEL-7 qemu-kvm PATCH 05/10] dump: Abstract dump_init() with cpu_synchronize_all_states() +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +From: Andreas Färber + +Instead of calling cpu_synchronize_state() for each CPU, call the +existing cpu_synchronize_all_states() helper. + +Reviewed-by: Luiz Capitulino +Signed-off-by: Andreas Färber +(cherry picked from commit 1b3509ca5bbd8e7d2be92ac42196a3ee2e31cb03) +Signed-off-by: Laszlo Ersek + +diff --git a/dump.c b/dump.c +index c0d3da5..87ca12c 100644 +--- a/dump.c ++++ b/dump.c +@@ -21,6 +21,7 @@ + #include "sysemu/dump.h" + #include "sysemu/sysemu.h" + #include "sysemu/memory_mapping.h" ++#include "sysemu/cpus.h" + #include "qapi/error.h" + #include "qmp-commands.h" + +@@ -731,12 +732,12 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + * If the target architecture is not supported, cpu_get_dump_info() will + * return -1. + * +- * if we use kvm, we should synchronize the register before we get dump ++ * If we use KVM, we should synchronize the registers before we get dump + * info. + */ ++ cpu_synchronize_all_states(); + nr_cpus = 0; + for (env = first_cpu; env != NULL; env = env->next_cpu) { +- cpu_synchronize_state(env); + nr_cpus++; + } + diff --git a/SOURCES/kvm-dump-Drop-pointless-error_is_set-DumpState-member-er.patch b/SOURCES/kvm-dump-Drop-pointless-error_is_set-DumpState-member-er.patch new file mode 100644 index 0000000..370c51f --- /dev/null +++ b/SOURCES/kvm-dump-Drop-pointless-error_is_set-DumpState-member-er.patch @@ -0,0 +1,69 @@ +From 5b83dc5c849412b09a7e54ba7223ce5de8a3fd70 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:06 +0100 +Subject: [PATCH 19/41] dump: Drop pointless error_is_set(), DumpState member + errp + +Message-id: <1415380693-16593-20-git-send-email-lersek@redhat.com> +Patchwork-id: 62205 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 19/26] dump: Drop pointless error_is_set(), DumpState member errp +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: Markus Armbruster + +In qmp_dump_guest_memory(), the error must be clear on entry, and we +always bail out after setting it, directly or via dump_init(). +Therefore, both error_is_set() are always false. Drop them. + +DumpState member errp is now write-only. Drop it, too. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Luiz Capitulino +(cherry picked from commit 66ef8bd9c16b547c985cbe7468dcf60280c993eb) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/dump.c b/dump.c +index 25bf8e6..9250594 100644 +--- a/dump.c ++++ b/dump.c +@@ -86,7 +86,6 @@ typedef struct DumpState { + bool has_filter; + int64_t begin; + int64_t length; +- Error **errp; + + uint8_t *note_buf; /* buffer for notes */ + size_t note_buf_offset; /* the writing place in note_buf */ +@@ -1576,7 +1575,6 @@ static int dump_init(DumpState *s, int fd, bool has_format, + nr_cpus++; + } + +- s->errp = errp; + s->fd = fd; + s->has_filter = has_filter; + s->begin = begin; +@@ -1786,11 +1784,11 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + } + + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +- if (create_kdump_vmcore(s) < 0 && !error_is_set(s->errp)) { ++ if (create_kdump_vmcore(s) < 0) { + error_set(errp, QERR_IO_ERROR); + } + } else { +- if (create_vmcore(s) < 0 && !error_is_set(s->errp)) { ++ if (create_vmcore(s) < 0) { + error_set(errp, QERR_IO_ERROR); + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-Drop-qmp_dump_guest_memory-stub-and-build-for-a.patch b/SOURCES/kvm-dump-Drop-qmp_dump_guest_memory-stub-and-build-for-a.patch new file mode 100644 index 0000000..773e31d --- /dev/null +++ b/SOURCES/kvm-dump-Drop-qmp_dump_guest_memory-stub-and-build-for-a.patch @@ -0,0 +1,114 @@ +From bf8262fae14e0dd80ad8a9c302bd2317139d18a3 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:02 +0100 +Subject: [PATCH 15/41] dump: Drop qmp_dump_guest_memory() stub and build for + all targets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1415380693-16593-16-git-send-email-lersek@redhat.com> +Patchwork-id: 62201 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 15/26] dump: Drop qmp_dump_guest_memory() stub and build for all targets +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: Andreas Färber + +qmp_dump_guest_memory() calls dump_init() and returns an Error when +cpu_get_dump_info() returns an error, as done by the stub. +So there is no need to have a stub for qmp_dump_guest_memory(). + +Enable the documentation of the always-present dump-guest-memory command. + +That way we can drop CONFIG_HAVE_CORE_DUMP and leave configure +completely out of the picture for target CPU features. + +Signed-off-by: Andreas Färber +(cherry picked from commit 2a78636bd204e389068d203473ec76558083b44b) +Signed-off-by: Miroslav Rezanina + +Conflicts: + Makefile.target + stubs/dump.c + +Signed-off-by: Laszlo Ersek +--- + Makefile.target | 2 +- + configure | 4 ---- + hmp-commands.hx | 2 -- + stubs/dump.c | 8 -------- + 4 files changed, 1 insertion(+), 15 deletions(-) + +diff --git a/Makefile.target b/Makefile.target +index ca407d7..ea874c9 100644 +--- a/Makefile.target ++++ b/Makefile.target +@@ -119,7 +119,7 @@ obj-$(CONFIG_FDT) += device_tree.o + obj-$(CONFIG_KVM) += kvm-all.o + obj-y += memory.o savevm.o cputlb.o + obj-$(CONFIG_HAVE_GET_MEMORY_MAPPING) += memory_mapping.o +-obj-$(CONFIG_HAVE_CORE_DUMP) += dump.o ++obj-y += dump.o + obj-$(CONFIG_NO_GET_MEMORY_MAPPING) += memory_mapping-stub.o + LIBS+=$(libs_softmmu) + +diff --git a/configure b/configure +index 5373237..ca8b107 100755 +--- a/configure ++++ b/configure +@@ -4483,10 +4483,6 @@ if test "$target_bigendian" = "yes" ; then + fi + if test "$target_softmmu" = "yes" ; then + echo "CONFIG_SOFTMMU=y" >> $config_target_mak +- case "$target_arch2" in +- i386|x86_64) +- echo "CONFIG_HAVE_CORE_DUMP=y" >> $config_target_mak +- esac + fi + if test "$target_user_only" = "yes" ; then + echo "CONFIG_USER_ONLY=y" >> $config_target_mak +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 467dd70..58498f7 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1013,7 +1013,6 @@ server will ask the spice/vnc client to automatically reconnect using the + new parameters (if specified) once the vm migration finished successfully. + ETEXI + +-#if defined(CONFIG_HAVE_CORE_DUMP) + { + .name = "dump-guest-memory", + .args_type = "paging:-p,filename:F,begin:i?,length:i?", +@@ -1037,7 +1036,6 @@ gdb. + length: the memory size, in bytes. It's optional, and should be specified + with begin together. + ETEXI +-#endif + + #ifdef CONFIG_LIVE_BLOCK_OPS + { +diff --git a/stubs/dump.c b/stubs/dump.c +index 5749e2c..370cd96 100644 +--- a/stubs/dump.c ++++ b/stubs/dump.c +@@ -16,14 +16,6 @@ + #include "qapi/qmp/qerror.h" + #include "qmp-commands.h" + +-/* we need this function in hmp.c */ +-void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, +- int64_t begin, bool has_length, int64_t length, +- Error **errp) +-{ +- error_set(errp, QERR_UNSUPPORTED); +-} +- + int cpu_get_dump_info(ArchDumpInfo *info, + const struct GuestPhysBlockList *guest_phys_blocks) + { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-Fix-dump-guest-memory-termination-and-use-after.patch b/SOURCES/kvm-dump-Fix-dump-guest-memory-termination-and-use-after.patch new file mode 100644 index 0000000..a5d0686 --- /dev/null +++ b/SOURCES/kvm-dump-Fix-dump-guest-memory-termination-and-use-after.patch @@ -0,0 +1,85 @@ +From a32c9e8da011b25ba9a056bc41c990694b730566 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:51 +0100 +Subject: [PATCH 20/41] dump: Fix dump-guest-memory termination and + use-after-close +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-21-marcandre.lureau@redhat.com> +Patchwork-id: 78374 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 20/41] dump: Fix dump-guest-memory termination and use-after-close +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Gonglei + +dump_iterate() dumps blocks in a loop. Eventually, get_next_block() +returns "no more". We then call dump_completed(). But we neglect to +break the loop! Broken in commit 4c7e251a. + +Because of that, we dump the last block again. This attempts to write +to s->fd, which fails if we're lucky. The error makes dump_iterate() +return failure. It's the only way it can ever return. + +Theoretical: if we're not so lucky, something else has opened something +for writing and got the same fd. dump_iterate() then keeps looping, +messing up the something else's output, until a write fails, or the +process mercifully terminates. + +The obvious fix is to restore the return lost in commit 4c7e251a. But +the root cause of the bug is needlessly opaque loop control. Replace it +by a clean do ... while loop. + +This makes the badly chosen return values of get_next_block() more +visible. Cleaning that up is outside the scope of this bug fix. + +Signed-off-by: Gonglei +Signed-off-by: Markus Armbruster +Signed-off-by: Michael Tokarev + +(cherry picked from commit 08a655be71d0a130a5d9bf7816d096ec31c4f055) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +diff --git a/dump.c b/dump.c +index 099346a..83b6d20 100644 +--- a/dump.c ++++ b/dump.c +@@ -610,10 +610,9 @@ static void dump_iterate(DumpState *s, Error **errp) + { + GuestPhysBlock *block; + int64_t size; +- int ret; + Error *local_err = NULL; + +- while (1) { ++ do { + block = s->next_block; + + size = block->target_end - block->target_start; +@@ -629,11 +628,9 @@ static void dump_iterate(DumpState *s, Error **errp) + return; + } + +- ret = get_next_block(s, block); +- if (ret == 1) { +- dump_completed(s); +- } +- } ++ } while (!get_next_block(s, block)); ++ ++ dump_completed(s); + } + + static void create_vmcore(DumpState *s, Error **errp) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-Make-DumpState-and-endian-conversion-routines-a.patch b/SOURCES/kvm-dump-Make-DumpState-and-endian-conversion-routines-a.patch new file mode 100644 index 0000000..f8739e9 --- /dev/null +++ b/SOURCES/kvm-dump-Make-DumpState-and-endian-conversion-routines-a.patch @@ -0,0 +1,635 @@ +From 36cd1b1bdc56da8e18d69df82731fb79a2ed01dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:47 +0100 +Subject: [PATCH 16/41] dump: Make DumpState and endian conversion routines + available for arch-specific dump code +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-17-marcandre.lureau@redhat.com> +Patchwork-id: 78366 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 16/41] dump: Make DumpState and endian conversion routines available for arch-specific dump code +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Bharata B Rao + +Make DumpState and endian conversion routines available for arch-specific dump +code by moving into dump.h. DumpState will be needed by arch-specific dump +code to access target endian information from DumpState->ArchDumpInfo. Also +break the dependency of dump.h from stubs/dump.c by creating a separate +dump-arch.h. + +This patch doesn't change any functionality. + +Signed-off-by: Bharata B Rao +[ rebased on top of current master branch, + renamed endian helpers to cpu_to_dump{16,32,64}, + pass a DumpState * argument to endian helpers, + Greg Kurz ] +Signed-off-by: Greg Kurz +[agraf: fix to apply] +Signed-off-by: Alexander Graf + +(cherry picked from commit acb0ef5801fc0caafdcfd34ae62e48d276866a1b) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 231 ++++++++++++++++++--------------------------- + include/sysemu/dump-arch.h | 28 ++++++ + include/sysemu/dump.h | 45 +++++++-- + stubs/dump.c | 2 +- + 4 files changed, 154 insertions(+), 152 deletions(-) + create mode 100644 include/sysemu/dump-arch.h + +diff --git a/dump.c b/dump.c +index e9bd237..c902944 100644 +--- a/dump.c ++++ b/dump.c +@@ -36,9 +36,9 @@ + #define ELF_MACHINE_UNAME "Unknown" + #endif + +-static uint16_t cpu_convert_to_target16(uint16_t val, int endian) ++uint16_t cpu_to_dump16(DumpState *s, uint16_t val) + { +- if (endian == ELFDATA2LSB) { ++ if (s->dump_info.d_endian == ELFDATA2LSB) { + val = cpu_to_le16(val); + } else { + val = cpu_to_be16(val); +@@ -47,9 +47,9 @@ static uint16_t cpu_convert_to_target16(uint16_t val, int endian) + return val; + } + +-static uint32_t cpu_convert_to_target32(uint32_t val, int endian) ++uint32_t cpu_to_dump32(DumpState *s, uint32_t val) + { +- if (endian == ELFDATA2LSB) { ++ if (s->dump_info.d_endian == ELFDATA2LSB) { + val = cpu_to_le32(val); + } else { + val = cpu_to_be32(val); +@@ -58,9 +58,9 @@ static uint32_t cpu_convert_to_target32(uint32_t val, int endian) + return val; + } + +-static uint64_t cpu_convert_to_target64(uint64_t val, int endian) ++uint64_t cpu_to_dump64(DumpState *s, uint64_t val) + { +- if (endian == ELFDATA2LSB) { ++ if (s->dump_info.d_endian == ELFDATA2LSB) { + val = cpu_to_le64(val); + } else { + val = cpu_to_be64(val); +@@ -69,36 +69,6 @@ static uint64_t cpu_convert_to_target64(uint64_t val, int endian) + return val; + } + +-typedef struct DumpState { +- GuestPhysBlockList guest_phys_blocks; +- ArchDumpInfo dump_info; +- MemoryMappingList list; +- uint16_t phdr_num; +- uint32_t sh_info; +- bool have_section; +- bool resume; +- ssize_t note_size; +- hwaddr memory_offset; +- int fd; +- +- GuestPhysBlock *next_block; +- ram_addr_t start; +- bool has_filter; +- int64_t begin; +- int64_t length; +- +- uint8_t *note_buf; /* buffer for notes */ +- size_t note_buf_offset; /* the writing place in note_buf */ +- uint32_t nr_cpus; /* number of guest's cpu */ +- uint64_t max_mapnr; /* the biggest guest's phys-mem's number */ +- size_t len_dump_bitmap; /* the size of the place used to store +- dump_bitmap in vmcore */ +- off_t offset_dump_bitmap; /* offset of dump_bitmap part in vmcore */ +- off_t offset_page; /* offset of page part in vmcore */ +- size_t num_dumpable; /* number of page that can be dumped */ +- uint32_t flag_compress; /* indicate the compression format */ +-} DumpState; +- + static int dump_cleanup(DumpState *s) + { + int ret = 0; +@@ -137,29 +107,25 @@ static int write_elf64_header(DumpState *s) + { + Elf64_Ehdr elf_header; + int ret; +- int endian = s->dump_info.d_endian; + + memset(&elf_header, 0, sizeof(Elf64_Ehdr)); + memcpy(&elf_header, ELFMAG, SELFMAG); + elf_header.e_ident[EI_CLASS] = ELFCLASS64; + elf_header.e_ident[EI_DATA] = s->dump_info.d_endian; + elf_header.e_ident[EI_VERSION] = EV_CURRENT; +- elf_header.e_type = cpu_convert_to_target16(ET_CORE, endian); +- elf_header.e_machine = cpu_convert_to_target16(s->dump_info.d_machine, +- endian); +- elf_header.e_version = cpu_convert_to_target32(EV_CURRENT, endian); +- elf_header.e_ehsize = cpu_convert_to_target16(sizeof(elf_header), endian); +- elf_header.e_phoff = cpu_convert_to_target64(sizeof(Elf64_Ehdr), endian); +- elf_header.e_phentsize = cpu_convert_to_target16(sizeof(Elf64_Phdr), +- endian); +- elf_header.e_phnum = cpu_convert_to_target16(s->phdr_num, endian); ++ elf_header.e_type = cpu_to_dump16(s, ET_CORE); ++ elf_header.e_machine = cpu_to_dump16(s, s->dump_info.d_machine); ++ elf_header.e_version = cpu_to_dump32(s, EV_CURRENT); ++ elf_header.e_ehsize = cpu_to_dump16(s, sizeof(elf_header)); ++ elf_header.e_phoff = cpu_to_dump64(s, sizeof(Elf64_Ehdr)); ++ elf_header.e_phentsize = cpu_to_dump16(s, sizeof(Elf64_Phdr)); ++ elf_header.e_phnum = cpu_to_dump16(s, s->phdr_num); + if (s->have_section) { + uint64_t shoff = sizeof(Elf64_Ehdr) + sizeof(Elf64_Phdr) * s->sh_info; + +- elf_header.e_shoff = cpu_convert_to_target64(shoff, endian); +- elf_header.e_shentsize = cpu_convert_to_target16(sizeof(Elf64_Shdr), +- endian); +- elf_header.e_shnum = cpu_convert_to_target16(1, endian); ++ elf_header.e_shoff = cpu_to_dump64(s, shoff); ++ elf_header.e_shentsize = cpu_to_dump16(s, sizeof(Elf64_Shdr)); ++ elf_header.e_shnum = cpu_to_dump16(s, 1); + } + + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); +@@ -175,29 +141,25 @@ static int write_elf32_header(DumpState *s) + { + Elf32_Ehdr elf_header; + int ret; +- int endian = s->dump_info.d_endian; + + memset(&elf_header, 0, sizeof(Elf32_Ehdr)); + memcpy(&elf_header, ELFMAG, SELFMAG); + elf_header.e_ident[EI_CLASS] = ELFCLASS32; +- elf_header.e_ident[EI_DATA] = endian; ++ elf_header.e_ident[EI_DATA] = s->dump_info.d_endian; + elf_header.e_ident[EI_VERSION] = EV_CURRENT; +- elf_header.e_type = cpu_convert_to_target16(ET_CORE, endian); +- elf_header.e_machine = cpu_convert_to_target16(s->dump_info.d_machine, +- endian); +- elf_header.e_version = cpu_convert_to_target32(EV_CURRENT, endian); +- elf_header.e_ehsize = cpu_convert_to_target16(sizeof(elf_header), endian); +- elf_header.e_phoff = cpu_convert_to_target32(sizeof(Elf32_Ehdr), endian); +- elf_header.e_phentsize = cpu_convert_to_target16(sizeof(Elf32_Phdr), +- endian); +- elf_header.e_phnum = cpu_convert_to_target16(s->phdr_num, endian); ++ elf_header.e_type = cpu_to_dump16(s, ET_CORE); ++ elf_header.e_machine = cpu_to_dump16(s, s->dump_info.d_machine); ++ elf_header.e_version = cpu_to_dump32(s, EV_CURRENT); ++ elf_header.e_ehsize = cpu_to_dump16(s, sizeof(elf_header)); ++ elf_header.e_phoff = cpu_to_dump32(s, sizeof(Elf32_Ehdr)); ++ elf_header.e_phentsize = cpu_to_dump16(s, sizeof(Elf32_Phdr)); ++ elf_header.e_phnum = cpu_to_dump16(s, s->phdr_num); + if (s->have_section) { + uint32_t shoff = sizeof(Elf32_Ehdr) + sizeof(Elf32_Phdr) * s->sh_info; + +- elf_header.e_shoff = cpu_convert_to_target32(shoff, endian); +- elf_header.e_shentsize = cpu_convert_to_target16(sizeof(Elf32_Shdr), +- endian); +- elf_header.e_shnum = cpu_convert_to_target16(1, endian); ++ elf_header.e_shoff = cpu_to_dump32(s, shoff); ++ elf_header.e_shentsize = cpu_to_dump16(s, sizeof(Elf32_Shdr)); ++ elf_header.e_shnum = cpu_to_dump16(s, 1); + } + + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); +@@ -215,15 +177,14 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + { + Elf64_Phdr phdr; + int ret; +- int endian = s->dump_info.d_endian; + + memset(&phdr, 0, sizeof(Elf64_Phdr)); +- phdr.p_type = cpu_convert_to_target32(PT_LOAD, endian); +- phdr.p_offset = cpu_convert_to_target64(offset, endian); +- phdr.p_paddr = cpu_convert_to_target64(memory_mapping->phys_addr, endian); +- phdr.p_filesz = cpu_convert_to_target64(filesz, endian); +- phdr.p_memsz = cpu_convert_to_target64(memory_mapping->length, endian); +- phdr.p_vaddr = cpu_convert_to_target64(memory_mapping->virt_addr, endian); ++ phdr.p_type = cpu_to_dump32(s, PT_LOAD); ++ phdr.p_offset = cpu_to_dump64(s, offset); ++ phdr.p_paddr = cpu_to_dump64(s, memory_mapping->phys_addr); ++ phdr.p_filesz = cpu_to_dump64(s, filesz); ++ phdr.p_memsz = cpu_to_dump64(s, memory_mapping->length); ++ phdr.p_vaddr = cpu_to_dump64(s, memory_mapping->virt_addr); + + assert(memory_mapping->length >= filesz); + +@@ -242,15 +203,14 @@ static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + { + Elf32_Phdr phdr; + int ret; +- int endian = s->dump_info.d_endian; + + memset(&phdr, 0, sizeof(Elf32_Phdr)); +- phdr.p_type = cpu_convert_to_target32(PT_LOAD, endian); +- phdr.p_offset = cpu_convert_to_target32(offset, endian); +- phdr.p_paddr = cpu_convert_to_target32(memory_mapping->phys_addr, endian); +- phdr.p_filesz = cpu_convert_to_target32(filesz, endian); +- phdr.p_memsz = cpu_convert_to_target32(memory_mapping->length, endian); +- phdr.p_vaddr = cpu_convert_to_target32(memory_mapping->virt_addr, endian); ++ phdr.p_type = cpu_to_dump32(s, PT_LOAD); ++ phdr.p_offset = cpu_to_dump32(s, offset); ++ phdr.p_paddr = cpu_to_dump32(s, memory_mapping->phys_addr); ++ phdr.p_filesz = cpu_to_dump32(s, filesz); ++ phdr.p_memsz = cpu_to_dump32(s, memory_mapping->length); ++ phdr.p_vaddr = cpu_to_dump32(s, memory_mapping->virt_addr); + + assert(memory_mapping->length >= filesz); + +@@ -266,16 +226,15 @@ static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + static int write_elf64_note(DumpState *s) + { + Elf64_Phdr phdr; +- int endian = s->dump_info.d_endian; + hwaddr begin = s->memory_offset - s->note_size; + int ret; + + memset(&phdr, 0, sizeof(Elf64_Phdr)); +- phdr.p_type = cpu_convert_to_target32(PT_NOTE, endian); +- phdr.p_offset = cpu_convert_to_target64(begin, endian); ++ phdr.p_type = cpu_to_dump32(s, PT_NOTE); ++ phdr.p_offset = cpu_to_dump64(s, begin); + phdr.p_paddr = 0; +- phdr.p_filesz = cpu_convert_to_target64(s->note_size, endian); +- phdr.p_memsz = cpu_convert_to_target64(s->note_size, endian); ++ phdr.p_filesz = cpu_to_dump64(s, s->note_size); ++ phdr.p_memsz = cpu_to_dump64(s, s->note_size); + phdr.p_vaddr = 0; + + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); +@@ -325,15 +284,14 @@ static int write_elf32_note(DumpState *s) + { + hwaddr begin = s->memory_offset - s->note_size; + Elf32_Phdr phdr; +- int endian = s->dump_info.d_endian; + int ret; + + memset(&phdr, 0, sizeof(Elf32_Phdr)); +- phdr.p_type = cpu_convert_to_target32(PT_NOTE, endian); +- phdr.p_offset = cpu_convert_to_target32(begin, endian); ++ phdr.p_type = cpu_to_dump32(s, PT_NOTE); ++ phdr.p_offset = cpu_to_dump32(s, begin); + phdr.p_paddr = 0; +- phdr.p_filesz = cpu_convert_to_target32(s->note_size, endian); +- phdr.p_memsz = cpu_convert_to_target32(s->note_size, endian); ++ phdr.p_filesz = cpu_to_dump32(s, s->note_size); ++ phdr.p_memsz = cpu_to_dump32(s, s->note_size); + phdr.p_vaddr = 0; + + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); +@@ -378,7 +336,6 @@ static int write_elf_section(DumpState *s, int type) + { + Elf32_Shdr shdr32; + Elf64_Shdr shdr64; +- int endian = s->dump_info.d_endian; + int shdr_size; + void *shdr; + int ret; +@@ -386,12 +343,12 @@ static int write_elf_section(DumpState *s, int type) + if (type == 0) { + shdr_size = sizeof(Elf32_Shdr); + memset(&shdr32, 0, shdr_size); +- shdr32.sh_info = cpu_convert_to_target32(s->sh_info, endian); ++ shdr32.sh_info = cpu_to_dump32(s, s->sh_info); + shdr = &shdr32; + } else { + shdr_size = sizeof(Elf64_Shdr); + memset(&shdr64, 0, shdr_size); +- shdr64.sh_info = cpu_convert_to_target32(s->sh_info, endian); ++ shdr64.sh_info = cpu_to_dump32(s, s->sh_info); + shdr = &shdr64; + } + +@@ -797,7 +754,6 @@ static int create_header32(DumpState *s) + DiskDumpHeader32 *dh = NULL; + KdumpSubHeader32 *kh = NULL; + size_t size; +- int endian = s->dump_info.d_endian; + uint32_t block_size; + uint32_t sub_hdr_size; + uint32_t bitmap_blocks; +@@ -809,18 +765,17 @@ static int create_header32(DumpState *s) + dh = g_malloc0(size); + + strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); +- dh->header_version = cpu_convert_to_target32(6, endian); ++ dh->header_version = cpu_to_dump32(s, 6); + block_size = TARGET_PAGE_SIZE; +- dh->block_size = cpu_convert_to_target32(block_size, endian); ++ dh->block_size = cpu_to_dump32(s, block_size); + sub_hdr_size = sizeof(struct KdumpSubHeader32) + s->note_size; + sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); +- dh->sub_hdr_size = cpu_convert_to_target32(sub_hdr_size, endian); ++ dh->sub_hdr_size = cpu_to_dump32(s, sub_hdr_size); + /* dh->max_mapnr may be truncated, full 64bit is in kh.max_mapnr_64 */ +- dh->max_mapnr = cpu_convert_to_target32(MIN(s->max_mapnr, UINT_MAX), +- endian); +- dh->nr_cpus = cpu_convert_to_target32(s->nr_cpus, endian); ++ dh->max_mapnr = cpu_to_dump32(s, MIN(s->max_mapnr, UINT_MAX)); ++ dh->nr_cpus = cpu_to_dump32(s, s->nr_cpus); + bitmap_blocks = DIV_ROUND_UP(s->len_dump_bitmap, block_size) * 2; +- dh->bitmap_blocks = cpu_convert_to_target32(bitmap_blocks, endian); ++ dh->bitmap_blocks = cpu_to_dump32(s, bitmap_blocks); + strncpy(dh->utsname.machine, ELF_MACHINE_UNAME, sizeof(dh->utsname.machine)); + + if (s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) { +@@ -836,7 +791,7 @@ static int create_header32(DumpState *s) + status |= DUMP_DH_COMPRESSED_SNAPPY; + } + #endif +- dh->status = cpu_convert_to_target32(status, endian); ++ dh->status = cpu_to_dump32(s, status); + + if (write_buffer(s->fd, 0, dh, size) < 0) { + dump_error(s, "dump: failed to write disk dump header.\n"); +@@ -849,13 +804,13 @@ static int create_header32(DumpState *s) + kh = g_malloc0(size); + + /* 64bit max_mapnr_64 */ +- kh->max_mapnr_64 = cpu_convert_to_target64(s->max_mapnr, endian); +- kh->phys_base = cpu_convert_to_target32(PHYS_BASE, endian); +- kh->dump_level = cpu_convert_to_target32(DUMP_LEVEL, endian); ++ kh->max_mapnr_64 = cpu_to_dump64(s, s->max_mapnr); ++ kh->phys_base = cpu_to_dump32(s, PHYS_BASE); ++ kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); + + offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; +- kh->offset_note = cpu_convert_to_target64(offset_note, endian); +- kh->note_size = cpu_convert_to_target32(s->note_size, endian); ++ kh->offset_note = cpu_to_dump64(s, offset_note); ++ kh->note_size = cpu_to_dump32(s, s->note_size); + + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { +@@ -904,7 +859,6 @@ static int create_header64(DumpState *s) + DiskDumpHeader64 *dh = NULL; + KdumpSubHeader64 *kh = NULL; + size_t size; +- int endian = s->dump_info.d_endian; + uint32_t block_size; + uint32_t sub_hdr_size; + uint32_t bitmap_blocks; +@@ -916,18 +870,17 @@ static int create_header64(DumpState *s) + dh = g_malloc0(size); + + strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); +- dh->header_version = cpu_convert_to_target32(6, endian); ++ dh->header_version = cpu_to_dump32(s, 6); + block_size = TARGET_PAGE_SIZE; +- dh->block_size = cpu_convert_to_target32(block_size, endian); ++ dh->block_size = cpu_to_dump32(s, block_size); + sub_hdr_size = sizeof(struct KdumpSubHeader64) + s->note_size; + sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); +- dh->sub_hdr_size = cpu_convert_to_target32(sub_hdr_size, endian); ++ dh->sub_hdr_size = cpu_to_dump32(s, sub_hdr_size); + /* dh->max_mapnr may be truncated, full 64bit is in kh.max_mapnr_64 */ +- dh->max_mapnr = cpu_convert_to_target32(MIN(s->max_mapnr, UINT_MAX), +- endian); +- dh->nr_cpus = cpu_convert_to_target32(s->nr_cpus, endian); ++ dh->max_mapnr = cpu_to_dump32(s, MIN(s->max_mapnr, UINT_MAX)); ++ dh->nr_cpus = cpu_to_dump32(s, s->nr_cpus); + bitmap_blocks = DIV_ROUND_UP(s->len_dump_bitmap, block_size) * 2; +- dh->bitmap_blocks = cpu_convert_to_target32(bitmap_blocks, endian); ++ dh->bitmap_blocks = cpu_to_dump32(s, bitmap_blocks); + strncpy(dh->utsname.machine, ELF_MACHINE_UNAME, sizeof(dh->utsname.machine)); + + if (s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) { +@@ -943,7 +896,7 @@ static int create_header64(DumpState *s) + status |= DUMP_DH_COMPRESSED_SNAPPY; + } + #endif +- dh->status = cpu_convert_to_target32(status, endian); ++ dh->status = cpu_to_dump32(s, status); + + if (write_buffer(s->fd, 0, dh, size) < 0) { + dump_error(s, "dump: failed to write disk dump header.\n"); +@@ -956,13 +909,13 @@ static int create_header64(DumpState *s) + kh = g_malloc0(size); + + /* 64bit max_mapnr_64 */ +- kh->max_mapnr_64 = cpu_convert_to_target64(s->max_mapnr, endian); +- kh->phys_base = cpu_convert_to_target64(PHYS_BASE, endian); +- kh->dump_level = cpu_convert_to_target32(DUMP_LEVEL, endian); ++ kh->max_mapnr_64 = cpu_to_dump64(s, s->max_mapnr); ++ kh->phys_base = cpu_to_dump64(s, PHYS_BASE); ++ kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); + + offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; +- kh->offset_note = cpu_convert_to_target64(offset_note, endian); +- kh->note_size = cpu_convert_to_target64(s->note_size, endian); ++ kh->offset_note = cpu_to_dump64(s, offset_note); ++ kh->note_size = cpu_to_dump64(s, s->note_size); + + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { +@@ -1266,7 +1219,6 @@ static int write_dump_pages(DumpState *s) + off_t offset_desc, offset_data; + PageDescriptor pd, pd_zero; + uint8_t *buf; +- int endian = s->dump_info.d_endian; + GuestPhysBlock *block_iter = NULL; + uint64_t pfn_iter; + +@@ -1291,10 +1243,10 @@ static int write_dump_pages(DumpState *s) + * init zero page's page_desc and page_data, because every zero page + * uses the same page_data + */ +- pd_zero.size = cpu_convert_to_target32(TARGET_PAGE_SIZE, endian); +- pd_zero.flags = cpu_convert_to_target32(0, endian); +- pd_zero.offset = cpu_convert_to_target64(offset_data, endian); +- pd_zero.page_flags = cpu_convert_to_target64(0, endian); ++ pd_zero.size = cpu_to_dump32(s, TARGET_PAGE_SIZE); ++ pd_zero.flags = cpu_to_dump32(s, 0); ++ pd_zero.offset = cpu_to_dump64(s, offset_data); ++ pd_zero.page_flags = cpu_to_dump64(s, 0); + buf = g_malloc0(TARGET_PAGE_SIZE); + ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); + g_free(buf); +@@ -1332,12 +1284,11 @@ static int write_dump_pages(DumpState *s) + */ + size_out = len_buf_out; + if ((s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) && +- (compress2(buf_out, (uLongf *)&size_out, buf, +- TARGET_PAGE_SIZE, Z_BEST_SPEED) == Z_OK) && +- (size_out < TARGET_PAGE_SIZE)) { +- pd.flags = cpu_convert_to_target32(DUMP_DH_COMPRESSED_ZLIB, +- endian); +- pd.size = cpu_convert_to_target32(size_out, endian); ++ (compress2(buf_out, (uLongf *)&size_out, buf, ++ TARGET_PAGE_SIZE, Z_BEST_SPEED) == Z_OK) && ++ (size_out < TARGET_PAGE_SIZE)) { ++ pd.flags = cpu_to_dump32(s, DUMP_DH_COMPRESSED_ZLIB); ++ pd.size = cpu_to_dump32(s, size_out); + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +@@ -1349,9 +1300,8 @@ static int write_dump_pages(DumpState *s) + (lzo1x_1_compress(buf, TARGET_PAGE_SIZE, buf_out, + (lzo_uint *)&size_out, wrkmem) == LZO_E_OK) && + (size_out < TARGET_PAGE_SIZE)) { +- pd.flags = cpu_convert_to_target32(DUMP_DH_COMPRESSED_LZO, +- endian); +- pd.size = cpu_convert_to_target32(size_out, endian); ++ pd.flags = cpu_to_dump32(s, DUMP_DH_COMPRESSED_LZO); ++ pd.size = cpu_to_dump32(s, size_out); + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +@@ -1364,9 +1314,8 @@ static int write_dump_pages(DumpState *s) + (snappy_compress((char *)buf, TARGET_PAGE_SIZE, + (char *)buf_out, &size_out) == SNAPPY_OK) && + (size_out < TARGET_PAGE_SIZE)) { +- pd.flags = cpu_convert_to_target32( +- DUMP_DH_COMPRESSED_SNAPPY, endian); +- pd.size = cpu_convert_to_target32(size_out, endian); ++ pd.flags = cpu_to_dump32(s, DUMP_DH_COMPRESSED_SNAPPY); ++ pd.size = cpu_to_dump32(s, size_out); + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +@@ -1379,9 +1328,9 @@ static int write_dump_pages(DumpState *s) + * fall back to save in plaintext, size_out should be + * assigned TARGET_PAGE_SIZE + */ +- pd.flags = cpu_convert_to_target32(0, endian); ++ pd.flags = cpu_to_dump32(s, 0); + size_out = TARGET_PAGE_SIZE; +- pd.size = cpu_convert_to_target32(size_out, endian); ++ pd.size = cpu_to_dump32(s, size_out); + + ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); + if (ret < 0) { +@@ -1391,8 +1340,8 @@ static int write_dump_pages(DumpState *s) + } + + /* get and write page desc here */ +- pd.page_flags = cpu_convert_to_target64(0, endian); +- pd.offset = cpu_convert_to_target64(offset_data, endian); ++ pd.page_flags = cpu_to_dump64(s, 0); ++ pd.offset = cpu_to_dump64(s, offset_data); + offset_data += size_out; + + ret = write_cache(&page_desc, &pd, sizeof(PageDescriptor), false); +diff --git a/include/sysemu/dump-arch.h b/include/sysemu/dump-arch.h +new file mode 100644 +index 0000000..9c95ced +--- /dev/null ++++ b/include/sysemu/dump-arch.h +@@ -0,0 +1,28 @@ ++/* ++ * QEMU dump ++ * ++ * Copyright Fujitsu, Corp. 2011, 2012 ++ * ++ * Authors: ++ * Wen Congyang ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ * ++ */ ++ ++#ifndef DUMP_ARCH_H ++#define DUMP_ARCH_H ++ ++typedef struct ArchDumpInfo { ++ int d_machine; /* Architecture */ ++ int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ ++ int d_class; /* ELFCLASS32 or ELFCLASS64 */ ++} ArchDumpInfo; ++ ++struct GuestPhysBlockList; /* memory_mapping.h */ ++int cpu_get_dump_info(ArchDumpInfo *info, ++ const struct GuestPhysBlockList *guest_phys_blocks); ++ssize_t cpu_get_note_size(int class, int machine, int nr_cpus); ++ ++#endif +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 12af557..7e4ec5c 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -43,11 +43,8 @@ + #define PFN_BUFBITMAP (CHAR_BIT * BUFSIZE_BITMAP) + #define BUFSIZE_DATA_CACHE (TARGET_PAGE_SIZE * 4) + +-typedef struct ArchDumpInfo { +- int d_machine; /* Architecture */ +- int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ +- int d_class; /* ELFCLASS32 or ELFCLASS64 */ +-} ArchDumpInfo; ++#include "sysemu/dump-arch.h" ++#include "sysemu/memory_mapping.h" + + typedef struct QEMU_PACKED MakedumpfileHeader { + char signature[16]; /* = "makedumpfile" */ +@@ -158,9 +155,37 @@ typedef struct QEMU_PACKED PageDescriptor { + uint64_t page_flags; /* page flags */ + } PageDescriptor; + +-struct GuestPhysBlockList; /* memory_mapping.h */ +-int cpu_get_dump_info(ArchDumpInfo *info, +- const struct GuestPhysBlockList *guest_phys_blocks); +-ssize_t cpu_get_note_size(int class, int machine, int nr_cpus); +- ++typedef struct DumpState { ++ GuestPhysBlockList guest_phys_blocks; ++ ArchDumpInfo dump_info; ++ MemoryMappingList list; ++ uint16_t phdr_num; ++ uint32_t sh_info; ++ bool have_section; ++ bool resume; ++ ssize_t note_size; ++ hwaddr memory_offset; ++ int fd; ++ ++ GuestPhysBlock *next_block; ++ ram_addr_t start; ++ bool has_filter; ++ int64_t begin; ++ int64_t length; ++ ++ uint8_t *note_buf; /* buffer for notes */ ++ size_t note_buf_offset; /* the writing place in note_buf */ ++ uint32_t nr_cpus; /* number of guest's cpu */ ++ uint64_t max_mapnr; /* the biggest guest's phys-mem's number */ ++ size_t len_dump_bitmap; /* the size of the place used to store ++ dump_bitmap in vmcore */ ++ off_t offset_dump_bitmap; /* offset of dump_bitmap part in vmcore */ ++ off_t offset_page; /* offset of page part in vmcore */ ++ size_t num_dumpable; /* number of page that can be dumped */ ++ uint32_t flag_compress; /* indicate the compression format */ ++} DumpState; ++ ++uint16_t cpu_to_dump16(DumpState *s, uint16_t val); ++uint32_t cpu_to_dump32(DumpState *s, uint32_t val); ++uint64_t cpu_to_dump64(DumpState *s, uint64_t val); + #endif +diff --git a/stubs/dump.c b/stubs/dump.c +index 370cd96..fac7019 100644 +--- a/stubs/dump.c ++++ b/stubs/dump.c +@@ -12,7 +12,7 @@ + */ + + #include "qemu-common.h" +-#include "sysemu/dump.h" ++#include "sysemu/dump-arch.h" + #include "qapi/qmp/qerror.h" + #include "qmp-commands.h" + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-Move-stubs-into-libqemustub-a.patch b/SOURCES/kvm-dump-Move-stubs-into-libqemustub-a.patch new file mode 100644 index 0000000..3d23ca7 --- /dev/null +++ b/SOURCES/kvm-dump-Move-stubs-into-libqemustub-a.patch @@ -0,0 +1,142 @@ +From fe80e7d53fa6cb0e8f26b76cf6c73acd7010290e Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:31 +0200 +Subject: dump: Move stubs into libqemustub.a + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-2-git-send-email-lersek@redhat.com> +Patchwork-id: 53160 +O-Subject: [RHEL-7 qemu-kvm PATCH 01/10] dump: Move stubs into libqemustub.a +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +From: Andreas Färber + +This allows us to drop CONFIG_NO_CORE_DUMP with its indirect dependency +on CONFIG_HAVE_CORE_DUMP. + +Acked-by: Paolo Bonzini +Signed-off-by: Andreas Färber +(cherry picked from commit 88f62c2b1deb466749e340a8a241975c509bd9b6) +Signed-off-by: Laszlo Ersek + +Signed-off-by: Miroslav Rezanina + +diff --git a/Makefile.target b/Makefile.target +index ce4391f..1cafb17 100644 +--- a/Makefile.target ++++ b/Makefile.target +@@ -64,7 +64,6 @@ CONFIG_NO_PCI = $(if $(subst n,,$(CONFIG_PCI)),n,y) + CONFIG_NO_KVM = $(if $(subst n,,$(CONFIG_KVM)),n,y) + CONFIG_NO_XEN = $(if $(subst n,,$(CONFIG_XEN)),n,y) + CONFIG_NO_GET_MEMORY_MAPPING = $(if $(subst n,,$(CONFIG_HAVE_GET_MEMORY_MAPPING)),n,y) +-CONFIG_NO_CORE_DUMP = $(if $(subst n,,$(CONFIG_HAVE_CORE_DUMP)),n,y) + + ######################################################### + # cpu emulator library +@@ -114,7 +113,6 @@ obj-y += memory.o savevm.o cputlb.o + obj-$(CONFIG_HAVE_GET_MEMORY_MAPPING) += memory_mapping.o + obj-$(CONFIG_HAVE_CORE_DUMP) += dump.o + obj-$(CONFIG_NO_GET_MEMORY_MAPPING) += memory_mapping-stub.o +-obj-$(CONFIG_NO_CORE_DUMP) += dump-stub.o + LIBS+=$(libs_softmmu) + + # xen support +diff --git a/dump-stub.c b/dump-stub.c +deleted file mode 100644 +index b3f42cb..0000000 +--- a/dump-stub.c ++++ /dev/null +@@ -1,36 +0,0 @@ +-/* +- * QEMU dump +- * +- * Copyright Fujitsu, Corp. 2011, 2012 +- * +- * Authors: +- * Wen Congyang +- * +- * This work is licensed under the terms of the GNU GPL, version 2 or later. +- * See the COPYING file in the top-level directory. +- * +- */ +- +-#include "qemu-common.h" +-#include "sysemu/dump.h" +-#include "qapi/qmp/qerror.h" +-#include "qmp-commands.h" +- +-/* we need this function in hmp.c */ +-void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, +- int64_t begin, bool has_length, int64_t length, +- Error **errp) +-{ +- error_set(errp, QERR_UNSUPPORTED); +-} +- +-int cpu_get_dump_info(ArchDumpInfo *info) +-{ +- return -1; +-} +- +-ssize_t cpu_get_note_size(int class, int machine, int nr_cpus) +-{ +- return -1; +-} +- +diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs +index 03dff20..9b701b4 100644 +--- a/stubs/Makefile.objs ++++ b/stubs/Makefile.objs +@@ -2,6 +2,7 @@ stub-obj-y += arch-query-cpu-def.o + stub-obj-y += clock-warp.o + stub-obj-y += cpu-get-clock.o + stub-obj-y += cpu-get-icount.o ++stub-obj-y += dump.o + stub-obj-y += fdset-add-fd.o + stub-obj-y += fdset-find-fd.o + stub-obj-y += fdset-get-fd.o +diff --git a/stubs/dump.c b/stubs/dump.c +new file mode 100644 +index 0000000..b3f42cb +--- /dev/null ++++ b/stubs/dump.c +@@ -0,0 +1,36 @@ ++/* ++ * QEMU dump ++ * ++ * Copyright Fujitsu, Corp. 2011, 2012 ++ * ++ * Authors: ++ * Wen Congyang ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ * ++ */ ++ ++#include "qemu-common.h" ++#include "sysemu/dump.h" ++#include "qapi/qmp/qerror.h" ++#include "qmp-commands.h" ++ ++/* we need this function in hmp.c */ ++void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, ++ int64_t begin, bool has_length, int64_t length, ++ Error **errp) ++{ ++ error_set(errp, QERR_UNSUPPORTED); ++} ++ ++int cpu_get_dump_info(ArchDumpInfo *info) ++{ ++ return -1; ++} ++ ++ssize_t cpu_get_note_size(int class, int machine, int nr_cpus) ++{ ++ return -1; ++} ++ diff --git a/SOURCES/kvm-dump-Propagate-errors-into-qmp_dump_guest_memory.patch b/SOURCES/kvm-dump-Propagate-errors-into-qmp_dump_guest_memory.patch new file mode 100644 index 0000000..0808cfb --- /dev/null +++ b/SOURCES/kvm-dump-Propagate-errors-into-qmp_dump_guest_memory.patch @@ -0,0 +1,692 @@ +From 888eb5bb28377bc392629e34133bf5bc50b0554f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:49 +0100 +Subject: [PATCH 18/41] dump: Propagate errors into qmp_dump_guest_memory() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-19-marcandre.lureau@redhat.com> +Patchwork-id: 78367 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 18/41] dump: Propagate errors into qmp_dump_guest_memory() +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: zhanghailiang + +The code calls dump_error() on error, and even passes it a suitable +message. However, the message is thrown away, and its callers pass +up only success/failure. All qmp_dump_guest_memory() can do is set +a generic error. + +Propagate the errors properly, so qmp_dump_guest_memory() can return +a more useful error. + +Signed-off-by: zhanghailiang +Reviewed-by: Eric Blake +Reviewed-by: Markus Armbruster +Signed-off-by: Luiz Capitulino + +(cherry picked from commit 37917da2d071ab5273703f5169b0b2fefd40cbb5) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 165 ++++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 82 insertions(+), 83 deletions(-) + +diff --git a/dump.c b/dump.c +index c709fc2..3718a79 100644 +--- a/dump.c ++++ b/dump.c +@@ -81,9 +81,10 @@ static int dump_cleanup(DumpState *s) + return 0; + } + +-static void dump_error(DumpState *s, const char *reason) ++static void dump_error(DumpState *s, const char *reason, Error **errp) + { + dump_cleanup(s); ++ error_setg(errp, "%s", reason); + } + + static int fd_write_vmcore(const void *buf, size_t size, void *opaque) +@@ -99,7 +100,7 @@ static int fd_write_vmcore(const void *buf, size_t size, void *opaque) + return 0; + } + +-static int write_elf64_header(DumpState *s) ++static int write_elf64_header(DumpState *s, Error **errp) + { + Elf64_Ehdr elf_header; + int ret; +@@ -126,14 +127,14 @@ static int write_elf64_header(DumpState *s) + + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf header.\n"); ++ dump_error(s, "dump: failed to write elf header", errp); + return -1; + } + + return 0; + } + +-static int write_elf32_header(DumpState *s) ++static int write_elf32_header(DumpState *s, Error **errp) + { + Elf32_Ehdr elf_header; + int ret; +@@ -160,7 +161,7 @@ static int write_elf32_header(DumpState *s) + + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf header.\n"); ++ dump_error(s, "dump: failed to write elf header", errp); + return -1; + } + +@@ -169,7 +170,7 @@ static int write_elf32_header(DumpState *s) + + static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + int phdr_index, hwaddr offset, +- hwaddr filesz) ++ hwaddr filesz, Error **errp) + { + Elf64_Phdr phdr; + int ret; +@@ -186,7 +187,7 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table.\n"); ++ dump_error(s, "dump: failed to write program header table", errp); + return -1; + } + +@@ -195,7 +196,7 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + + static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + int phdr_index, hwaddr offset, +- hwaddr filesz) ++ hwaddr filesz, Error **errp) + { + Elf32_Phdr phdr; + int ret; +@@ -212,14 +213,14 @@ static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table.\n"); ++ dump_error(s, "dump: failed to write program header table", errp); + return -1; + } + + return 0; + } + +-static int write_elf64_note(DumpState *s) ++static int write_elf64_note(DumpState *s, Error **errp) + { + Elf64_Phdr phdr; + hwaddr begin = s->memory_offset - s->note_size; +@@ -235,7 +236,7 @@ static int write_elf64_note(DumpState *s) + + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table.\n"); ++ dump_error(s, "dump: failed to write program header table", errp); + return -1; + } + +@@ -247,7 +248,8 @@ static inline int cpu_index(CPUState *cpu) + return cpu->cpu_index + 1; + } + +-static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s) ++static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, ++ Error **errp) + { + CPUArchState *env; + CPUState *cpu; +@@ -259,7 +261,7 @@ static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s) + id = cpu_index(cpu); + ret = cpu_write_elf64_note(f, cpu, id, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf notes.\n"); ++ dump_error(s, "dump: failed to write elf notes", errp); + return -1; + } + } +@@ -268,7 +270,7 @@ static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s) + cpu = ENV_GET_CPU(env); + ret = cpu_write_elf64_qemunote(f, cpu, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write CPU status.\n"); ++ dump_error(s, "dump: failed to write CPU status", errp); + return -1; + } + } +@@ -276,7 +278,7 @@ static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s) + return 0; + } + +-static int write_elf32_note(DumpState *s) ++static int write_elf32_note(DumpState *s, Error **errp) + { + hwaddr begin = s->memory_offset - s->note_size; + Elf32_Phdr phdr; +@@ -292,14 +294,15 @@ static int write_elf32_note(DumpState *s) + + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table.\n"); ++ dump_error(s, "dump: failed to write program header table", errp); + return -1; + } + + return 0; + } + +-static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s) ++static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, ++ Error **errp) + { + CPUArchState *env; + CPUState *cpu; +@@ -311,7 +314,7 @@ static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s) + id = cpu_index(cpu); + ret = cpu_write_elf32_note(f, cpu, id, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf notes.\n"); ++ dump_error(s, "dump: failed to write elf notes", errp); + return -1; + } + } +@@ -320,7 +323,7 @@ static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s) + cpu = ENV_GET_CPU(env); + ret = cpu_write_elf32_qemunote(f, cpu, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write CPU status.\n"); ++ dump_error(s, "dump: failed to write CPU status", errp); + return -1; + } + } +@@ -328,7 +331,7 @@ static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s) + return 0; + } + +-static int write_elf_section(DumpState *s, int type) ++static int write_elf_section(DumpState *s, int type, Error **errp) + { + Elf32_Shdr shdr32; + Elf64_Shdr shdr64; +@@ -350,20 +353,20 @@ static int write_elf_section(DumpState *s, int type) + + ret = fd_write_vmcore(&shdr, shdr_size, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write section header table.\n"); ++ dump_error(s, "dump: failed to write section header table", errp); + return -1; + } + + return 0; + } + +-static int write_data(DumpState *s, void *buf, int length) ++static int write_data(DumpState *s, void *buf, int length, Error **errp) + { + int ret; + + ret = fd_write_vmcore(buf, length, s); + if (ret < 0) { +- dump_error(s, "dump: failed to save memory.\n"); ++ dump_error(s, "dump: failed to save memory", errp); + return -1; + } + +@@ -372,14 +375,14 @@ static int write_data(DumpState *s, void *buf, int length) + + /* write the memroy to vmcore. 1 page per I/O. */ + static int write_memory(DumpState *s, GuestPhysBlock *block, ram_addr_t start, +- int64_t size) ++ int64_t size, Error **errp) + { + int64_t i; + int ret; + + for (i = 0; i < size / TARGET_PAGE_SIZE; i++) { + ret = write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, +- TARGET_PAGE_SIZE); ++ TARGET_PAGE_SIZE, errp); + if (ret < 0) { + return ret; + } +@@ -387,7 +390,7 @@ static int write_memory(DumpState *s, GuestPhysBlock *block, ram_addr_t start, + + if ((size % TARGET_PAGE_SIZE) != 0) { + ret = write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, +- size % TARGET_PAGE_SIZE); ++ size % TARGET_PAGE_SIZE, errp); + if (ret < 0) { + return ret; + } +@@ -458,7 +461,7 @@ static void get_offset_range(hwaddr phys_addr, + } + } + +-static int write_elf_loads(DumpState *s) ++static int write_elf_loads(DumpState *s, Error **errp) + { + hwaddr offset, filesz; + MemoryMapping *memory_mapping; +@@ -478,10 +481,10 @@ static int write_elf_loads(DumpState *s) + s, &offset, &filesz); + if (s->dump_info.d_class == ELFCLASS64) { + ret = write_elf64_load(s, memory_mapping, phdr_index++, offset, +- filesz); ++ filesz, errp); + } else { + ret = write_elf32_load(s, memory_mapping, phdr_index++, offset, +- filesz); ++ filesz, errp); + } + + if (ret < 0) { +@@ -497,7 +500,7 @@ static int write_elf_loads(DumpState *s) + } + + /* write elf header, PT_NOTE and elf note to vmcore. */ +-static int dump_begin(DumpState *s) ++static int dump_begin(DumpState *s, Error **errp) + { + int ret; + +@@ -527,9 +530,9 @@ static int dump_begin(DumpState *s) + + /* write elf header to vmcore */ + if (s->dump_info.d_class == ELFCLASS64) { +- ret = write_elf64_header(s); ++ ret = write_elf64_header(s, errp); + } else { +- ret = write_elf32_header(s); ++ ret = write_elf32_header(s, errp); + } + if (ret < 0) { + return -1; +@@ -537,47 +540,47 @@ static int dump_begin(DumpState *s) + + if (s->dump_info.d_class == ELFCLASS64) { + /* write PT_NOTE to vmcore */ +- if (write_elf64_note(s) < 0) { ++ if (write_elf64_note(s, errp) < 0) { + return -1; + } + + /* write all PT_LOAD to vmcore */ +- if (write_elf_loads(s) < 0) { ++ if (write_elf_loads(s, errp) < 0) { + return -1; + } + + /* write section to vmcore */ + if (s->have_section) { +- if (write_elf_section(s, 1) < 0) { ++ if (write_elf_section(s, 1, errp) < 0) { + return -1; + } + } + + /* write notes to vmcore */ +- if (write_elf64_notes(fd_write_vmcore, s) < 0) { ++ if (write_elf64_notes(fd_write_vmcore, s, errp) < 0) { + return -1; + } + + } else { + /* write PT_NOTE to vmcore */ +- if (write_elf32_note(s) < 0) { ++ if (write_elf32_note(s, errp) < 0) { + return -1; + } + + /* write all PT_LOAD to vmcore */ +- if (write_elf_loads(s) < 0) { ++ if (write_elf_loads(s, errp) < 0) { + return -1; + } + + /* write section to vmcore */ + if (s->have_section) { +- if (write_elf_section(s, 0) < 0) { ++ if (write_elf_section(s, 0, errp) < 0) { + return -1; + } + } + + /* write notes to vmcore */ +- if (write_elf32_notes(fd_write_vmcore, s) < 0) { ++ if (write_elf32_notes(fd_write_vmcore, s, errp) < 0) { + return -1; + } + } +@@ -620,7 +623,7 @@ static int get_next_block(DumpState *s, GuestPhysBlock *block) + } + + /* write all memory to vmcore */ +-static int dump_iterate(DumpState *s) ++static int dump_iterate(DumpState *s, Error **errp) + { + GuestPhysBlock *block; + int64_t size; +@@ -636,7 +639,7 @@ static int dump_iterate(DumpState *s) + size -= block->target_end - (s->begin + s->length); + } + } +- ret = write_memory(s, block, s->start, size); ++ ret = write_memory(s, block, s->start, size, errp); + if (ret == -1) { + return ret; + } +@@ -649,16 +652,16 @@ static int dump_iterate(DumpState *s) + } + } + +-static int create_vmcore(DumpState *s) ++static int create_vmcore(DumpState *s, Error **errp) + { + int ret; + +- ret = dump_begin(s); ++ ret = dump_begin(s, errp); + if (ret < 0) { + return -1; + } + +- ret = dump_iterate(s); ++ ret = dump_iterate(s, errp); + if (ret < 0) { + return -1; + } +@@ -744,7 +747,7 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) + } + + /* write common header, sub header and elf note to vmcore */ +-static int create_header32(DumpState *s) ++static int create_header32(DumpState *s, Error **errp) + { + int ret = 0; + DiskDumpHeader32 *dh = NULL; +@@ -790,7 +793,7 @@ static int create_header32(DumpState *s) + dh->status = cpu_to_dump32(s, status); + + if (write_buffer(s->fd, 0, dh, size) < 0) { +- dump_error(s, "dump: failed to write disk dump header.\n"); ++ dump_error(s, "dump: failed to write disk dump header", errp); + ret = -1; + goto out; + } +@@ -810,7 +813,7 @@ static int create_header32(DumpState *s) + + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { +- dump_error(s, "dump: failed to write kdump sub header.\n"); ++ dump_error(s, "dump: failed to write kdump sub header", errp); + ret = -1; + goto out; + } +@@ -820,14 +823,14 @@ static int create_header32(DumpState *s) + s->note_buf_offset = 0; + + /* use s->note_buf to store notes temporarily */ +- if (write_elf32_notes(buf_write_note, s) < 0) { ++ if (write_elf32_notes(buf_write_note, s, errp) < 0) { + ret = -1; + goto out; + } + + if (write_buffer(s->fd, offset_note, s->note_buf, + s->note_size) < 0) { +- dump_error(s, "dump: failed to write notes"); ++ dump_error(s, "dump: failed to write notes", errp); + ret = -1; + goto out; + } +@@ -849,7 +852,7 @@ out: + } + + /* write common header, sub header and elf note to vmcore */ +-static int create_header64(DumpState *s) ++static int create_header64(DumpState *s, Error **errp) + { + int ret = 0; + DiskDumpHeader64 *dh = NULL; +@@ -895,7 +898,7 @@ static int create_header64(DumpState *s) + dh->status = cpu_to_dump32(s, status); + + if (write_buffer(s->fd, 0, dh, size) < 0) { +- dump_error(s, "dump: failed to write disk dump header.\n"); ++ dump_error(s, "dump: failed to write disk dump header", errp); + ret = -1; + goto out; + } +@@ -915,7 +918,7 @@ static int create_header64(DumpState *s) + + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { +- dump_error(s, "dump: failed to write kdump sub header.\n"); ++ dump_error(s, "dump: failed to write kdump sub header", errp); + ret = -1; + goto out; + } +@@ -925,14 +928,14 @@ static int create_header64(DumpState *s) + s->note_buf_offset = 0; + + /* use s->note_buf to store notes temporarily */ +- if (write_elf64_notes(buf_write_note, s) < 0) { ++ if (write_elf64_notes(buf_write_note, s, errp) < 0) { + ret = -1; + goto out; + } + + if (write_buffer(s->fd, offset_note, s->note_buf, + s->note_size) < 0) { +- dump_error(s, "dump: failed to write notes"); ++ dump_error(s, "dump: failed to write notes", errp); + ret = -1; + goto out; + } +@@ -953,12 +956,12 @@ out: + return ret; + } + +-static int write_dump_header(DumpState *s) ++static int write_dump_header(DumpState *s, Error **errp) + { + if (s->dump_info.d_class == ELFCLASS32) { +- return create_header32(s); ++ return create_header32(s, errp); + } else { +- return create_header64(s); ++ return create_header64(s, errp); + } + } + +@@ -1072,7 +1075,7 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + return true; + } + +-static int write_dump_bitmap(DumpState *s) ++static int write_dump_bitmap(DumpState *s, Error **errp) + { + int ret = 0; + uint64_t last_pfn, pfn; +@@ -1093,7 +1096,7 @@ static int write_dump_bitmap(DumpState *s) + while (get_next_page(&block_iter, &pfn, NULL, s)) { + ret = set_dump_bitmap(last_pfn, pfn, true, dump_bitmap_buf, s); + if (ret < 0) { +- dump_error(s, "dump: failed to set dump_bitmap.\n"); ++ dump_error(s, "dump: failed to set dump_bitmap", errp); + ret = -1; + goto out; + } +@@ -1111,7 +1114,7 @@ static int write_dump_bitmap(DumpState *s) + ret = set_dump_bitmap(last_pfn, last_pfn + PFN_BUFBITMAP, false, + dump_bitmap_buf, s); + if (ret < 0) { +- dump_error(s, "dump: failed to sync dump_bitmap.\n"); ++ dump_error(s, "dump: failed to sync dump_bitmap", errp); + ret = -1; + goto out; + } +@@ -1203,7 +1206,7 @@ static inline bool is_zero_page(const uint8_t *buf, size_t page_size) + return buffer_is_zero(buf, page_size); + } + +-static int write_dump_pages(DumpState *s) ++static int write_dump_pages(DumpState *s, Error **errp) + { + int ret = 0; + DataCache page_desc, page_data; +@@ -1247,7 +1250,7 @@ static int write_dump_pages(DumpState *s) + ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); + g_free(buf); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data(zero page).\n"); ++ dump_error(s, "dump: failed to write page data (zero page)", errp); + goto out; + } + +@@ -1263,7 +1266,7 @@ static int write_dump_pages(DumpState *s) + ret = write_cache(&page_desc, &pd_zero, sizeof(PageDescriptor), + false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page desc.\n"); ++ dump_error(s, "dump: failed to write page desc", errp); + goto out; + } + } else { +@@ -1288,7 +1291,7 @@ static int write_dump_pages(DumpState *s) + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data.\n"); ++ dump_error(s, "dump: failed to write page data", errp); + goto out; + } + #ifdef CONFIG_LZO +@@ -1301,7 +1304,7 @@ static int write_dump_pages(DumpState *s) + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data.\n"); ++ dump_error(s, "dump: failed to write page data", errp); + goto out; + } + #endif +@@ -1315,7 +1318,7 @@ static int write_dump_pages(DumpState *s) + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data.\n"); ++ dump_error(s, "dump: failed to write page data", errp); + goto out; + } + #endif +@@ -1330,7 +1333,7 @@ static int write_dump_pages(DumpState *s) + + ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data.\n"); ++ dump_error(s, "dump: failed to write page data", errp); + goto out; + } + } +@@ -1342,7 +1345,7 @@ static int write_dump_pages(DumpState *s) + + ret = write_cache(&page_desc, &pd, sizeof(PageDescriptor), false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page desc.\n"); ++ dump_error(s, "dump: failed to write page desc", errp); + goto out; + } + } +@@ -1350,12 +1353,12 @@ static int write_dump_pages(DumpState *s) + + ret = write_cache(&page_desc, NULL, 0, true); + if (ret < 0) { +- dump_error(s, "dump: failed to sync cache for page_desc.\n"); ++ dump_error(s, "dump: failed to sync cache for page_desc", errp); + goto out; + } + ret = write_cache(&page_data, NULL, 0, true); + if (ret < 0) { +- dump_error(s, "dump: failed to sync cache for page_data.\n"); ++ dump_error(s, "dump: failed to sync cache for page_data", errp); + goto out; + } + +@@ -1372,7 +1375,7 @@ out: + return ret; + } + +-static int create_kdump_vmcore(DumpState *s) ++static int create_kdump_vmcore(DumpState *s, Error **errp) + { + int ret; + +@@ -1400,28 +1403,28 @@ static int create_kdump_vmcore(DumpState *s) + + ret = write_start_flat_header(s->fd); + if (ret < 0) { +- dump_error(s, "dump: failed to write start flat header.\n"); ++ dump_error(s, "dump: failed to write start flat header", errp); + return -1; + } + +- ret = write_dump_header(s); ++ ret = write_dump_header(s, errp); + if (ret < 0) { + return -1; + } + +- ret = write_dump_bitmap(s); ++ ret = write_dump_bitmap(s, errp); + if (ret < 0) { + return -1; + } + +- ret = write_dump_pages(s); ++ ret = write_dump_pages(s, errp); + if (ret < 0) { + return -1; + } + + ret = write_end_flat_header(s->fd); + if (ret < 0) { +- dump_error(s, "dump: failed to write end flat header.\n"); ++ dump_error(s, "dump: failed to write end flat header", errp); + return -1; + } + +@@ -1705,13 +1708,9 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + } + + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +- if (create_kdump_vmcore(s) < 0) { +- error_set(errp, QERR_IO_ERROR); +- } ++ create_kdump_vmcore(s, errp); + } else { +- if (create_vmcore(s) < 0) { +- error_set(errp, QERR_IO_ERROR); +- } ++ create_vmcore(s, errp); + } + + g_free(s); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-RHEL-specific-fix-for-CPUState-bug-introduced-b.patch b/SOURCES/kvm-dump-RHEL-specific-fix-for-CPUState-bug-introduced-b.patch new file mode 100644 index 0000000..0856450 --- /dev/null +++ b/SOURCES/kvm-dump-RHEL-specific-fix-for-CPUState-bug-introduced-b.patch @@ -0,0 +1,126 @@ +From 2feb6c83f5f22cb4b5060d8224f42d25dcb21fe7 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:48 +0100 +Subject: [PATCH 01/41] dump: RHEL-specific fix for CPUState bug introduced by + upstream c72bf4682 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1415380693-16593-2-git-send-email-lersek@redhat.com> +Patchwork-id: 62187 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 01/26] dump: RHEL-specific fix for CPUState bug introduced by upstream c72bf4682 +Bugzilla: 1161563 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +In qemu-kvm-1.5.3-77.el7, the write_elf64_notes() and write_elf32_notes() +functions are broken due to upstream commit c72bf4682. + + commit c72bf468259935a80ea185f2cbe807c3da9c1bbd + Author: Jens Freimann + Date: Fri Apr 19 16:45:06 2013 +0200 + + cpu: Move cpu_write_elfXX_note() functions to CPUState + + Convert cpu_write_elfXX_note() functions to CPUClass methods and + pass CPUState as argument. Update target-i386 accordingly. + + Signed-off-by: Jens Freimann + [AF: Retain stubs as CPUClass' default method implementation; + style changes] + Signed-off-by: Andreas Färber + +This commit changed the signature of the following functions so that they +take CPUState rather than CPUArchState: +- cpu_write_elf64_note() +- cpu_write_elf64_qemunote() +- cpu_write_elf32_note() +- cpu_write_elf32_qemunote() + +The callers of these functions, write_elf64_notes() and +write_elf32_notes(), each iterate over CPUArchState objects (starting from +"first_cpu") *twice*, the first loop calling cpu_write_elfXX_note(), the +second loop calling cpu_write_elfXX_qemunote(). The loop variable is +called "env". When calling the above functions after c72bf468, "env" (of +type CPUArchState) needs to be converted to CPUState, with the +ENV_GET_CPU() macro. + +Now, even before c72bf468, the *first* loop in each of both callers used +to do the conversion already, because cpu_write_elfXX_note() needs a CPU +index, and that's only reachable via cpu_index(ENV_GET_CPU(env)). +Therefore the first loop in each caller already set the "cpu" local +variable correctly, for each "env" in question. + +However, the *second* loop in each caller had never done that, because +cpu_write_elfXX_qemunote() had never needed a CPUState for anything. + +Upstream commit c72bf4682 simply replaced "env" with "cpu" in both loop +bodies (in both callers). This was correct for the first loops (because +they already had set "cpu" correctly), but the commit missed to add + + cpu = ENV_GET_CPU(env); + +to the second loops. Hence cpu_write_elfXX_qemunote() is always called +with the last "cpu" value inherited from the first loop! (Which is why the +bug is invisible for single-VCPU guests.) + +Add the missing assignments. + +For upstream, this was silently fixed in + + commit 182735efaf956ccab50b6d74a4fed163e0f35660 + Author: Andreas Färber + Date: Wed May 29 22:29:20 2013 +0200 + + cpu: Make first_cpu and next_cpu CPUState + + Move next_cpu from CPU_COMMON to CPUState. + Move first_cpu variable to qom/cpu.h. + + gdbstub needs to use CPUState::env_ptr for now. + cpu_copy() no longer needs to save and restore cpu_next. + + Acked-by: Paolo Bonzini + [AF: Rebased, simplified cpu_copy()] + Signed-off-by: Andreas Färber + +because it obviated and eliminated the + + cpu = ENV_GET_CPU(env); + +conversions completely. The bug-introducing commit c72bf4682 had been +released in v1.5.0 (and it persisted even into 1.5.3, which is why we have +it in RHEL). The silent / unintended fix (182735ef) is part of v1.6.0 (and +we never backported that commit to RHEL-7.0). + +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/dump.c b/dump.c +index b203a8d..a2b6e45 100644 +--- a/dump.c ++++ b/dump.c +@@ -289,6 +289,7 @@ static int write_elf64_notes(DumpState *s) + } + + for (env = first_cpu; env != NULL; env = env->next_cpu) { ++ cpu = ENV_GET_CPU(env); + ret = cpu_write_elf64_qemunote(fd_write_vmcore, cpu, s); + if (ret < 0) { + dump_error(s, "dump: failed to write CPU status.\n"); +@@ -341,6 +342,7 @@ static int write_elf32_notes(DumpState *s) + } + + for (env = first_cpu; env != NULL; env = env->next_cpu) { ++ cpu = ENV_GET_CPU(env); + ret = cpu_write_elf32_qemunote(fd_write_vmcore, cpu, s); + if (ret < 0) { + dump_error(s, "dump: failed to write CPU status.\n"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-Turn-some-functions-to-void-to-make-code-cleane.patch b/SOURCES/kvm-dump-Turn-some-functions-to-void-to-make-code-cleane.patch new file mode 100644 index 0000000..0d77605 --- /dev/null +++ b/SOURCES/kvm-dump-Turn-some-functions-to-void-to-make-code-cleane.patch @@ -0,0 +1,801 @@ +From 4a4865cb64b429fc95d4466be707c812c7f3ee06 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:50 +0100 +Subject: [PATCH 19/41] dump: Turn some functions to void to make code cleaner +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-20-marcandre.lureau@redhat.com> +Patchwork-id: 78368 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 19/41] dump: Turn some functions to void to make code cleaner +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: zhanghailiang + +Functions shouldn't return an error code and an Error object at the same time. +Turn all these functions that returning Error object to void. +We also judge if a function success or fail by reference to the local_err. + +Signed-off-by: zhanghailiang +Reviewed-by: Eric Blake +Signed-off-by: Luiz Capitulino + +(cherry picked from commit 4c7e251ae6d9c328850d62d8aeafa14ca600c858) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 312 ++++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 142 insertions(+), 170 deletions(-) + +diff --git a/dump.c b/dump.c +index 3718a79..099346a 100644 +--- a/dump.c ++++ b/dump.c +@@ -100,7 +100,7 @@ static int fd_write_vmcore(const void *buf, size_t size, void *opaque) + return 0; + } + +-static int write_elf64_header(DumpState *s, Error **errp) ++static void write_elf64_header(DumpState *s, Error **errp) + { + Elf64_Ehdr elf_header; + int ret; +@@ -128,13 +128,10 @@ static int write_elf64_header(DumpState *s, Error **errp) + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); + if (ret < 0) { + dump_error(s, "dump: failed to write elf header", errp); +- return -1; + } +- +- return 0; + } + +-static int write_elf32_header(DumpState *s, Error **errp) ++static void write_elf32_header(DumpState *s, Error **errp) + { + Elf32_Ehdr elf_header; + int ret; +@@ -162,15 +159,12 @@ static int write_elf32_header(DumpState *s, Error **errp) + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); + if (ret < 0) { + dump_error(s, "dump: failed to write elf header", errp); +- return -1; + } +- +- return 0; + } + +-static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, +- int phdr_index, hwaddr offset, +- hwaddr filesz, Error **errp) ++static void write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, ++ int phdr_index, hwaddr offset, ++ hwaddr filesz, Error **errp) + { + Elf64_Phdr phdr; + int ret; +@@ -188,15 +182,12 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { + dump_error(s, "dump: failed to write program header table", errp); +- return -1; + } +- +- return 0; + } + +-static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, +- int phdr_index, hwaddr offset, +- hwaddr filesz, Error **errp) ++static void write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, ++ int phdr_index, hwaddr offset, ++ hwaddr filesz, Error **errp) + { + Elf32_Phdr phdr; + int ret; +@@ -214,13 +205,10 @@ static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { + dump_error(s, "dump: failed to write program header table", errp); +- return -1; + } +- +- return 0; + } + +-static int write_elf64_note(DumpState *s, Error **errp) ++static void write_elf64_note(DumpState *s, Error **errp) + { + Elf64_Phdr phdr; + hwaddr begin = s->memory_offset - s->note_size; +@@ -237,10 +225,7 @@ static int write_elf64_note(DumpState *s, Error **errp) + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { + dump_error(s, "dump: failed to write program header table", errp); +- return -1; + } +- +- return 0; + } + + static inline int cpu_index(CPUState *cpu) +@@ -248,8 +233,8 @@ static inline int cpu_index(CPUState *cpu) + return cpu->cpu_index + 1; + } + +-static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, +- Error **errp) ++static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, ++ Error **errp) + { + CPUArchState *env; + CPUState *cpu; +@@ -262,7 +247,7 @@ static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, + ret = cpu_write_elf64_note(f, cpu, id, s); + if (ret < 0) { + dump_error(s, "dump: failed to write elf notes", errp); +- return -1; ++ return; + } + } + +@@ -271,14 +256,12 @@ static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, + ret = cpu_write_elf64_qemunote(f, cpu, s); + if (ret < 0) { + dump_error(s, "dump: failed to write CPU status", errp); +- return -1; ++ return; + } + } +- +- return 0; + } + +-static int write_elf32_note(DumpState *s, Error **errp) ++static void write_elf32_note(DumpState *s, Error **errp) + { + hwaddr begin = s->memory_offset - s->note_size; + Elf32_Phdr phdr; +@@ -295,14 +278,11 @@ static int write_elf32_note(DumpState *s, Error **errp) + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { + dump_error(s, "dump: failed to write program header table", errp); +- return -1; + } +- +- return 0; + } + +-static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, +- Error **errp) ++static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, ++ Error **errp) + { + CPUArchState *env; + CPUState *cpu; +@@ -315,7 +295,7 @@ static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, + ret = cpu_write_elf32_note(f, cpu, id, s); + if (ret < 0) { + dump_error(s, "dump: failed to write elf notes", errp); +- return -1; ++ return; + } + } + +@@ -324,14 +304,12 @@ static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, + ret = cpu_write_elf32_qemunote(f, cpu, s); + if (ret < 0) { + dump_error(s, "dump: failed to write CPU status", errp); +- return -1; ++ return; + } + } +- +- return 0; + } + +-static int write_elf_section(DumpState *s, int type, Error **errp) ++static void write_elf_section(DumpState *s, int type, Error **errp) + { + Elf32_Shdr shdr32; + Elf64_Shdr shdr64; +@@ -354,49 +332,43 @@ static int write_elf_section(DumpState *s, int type, Error **errp) + ret = fd_write_vmcore(&shdr, shdr_size, s); + if (ret < 0) { + dump_error(s, "dump: failed to write section header table", errp); +- return -1; + } +- +- return 0; + } + +-static int write_data(DumpState *s, void *buf, int length, Error **errp) ++static void write_data(DumpState *s, void *buf, int length, Error **errp) + { + int ret; + + ret = fd_write_vmcore(buf, length, s); + if (ret < 0) { + dump_error(s, "dump: failed to save memory", errp); +- return -1; + } +- +- return 0; + } + +-/* write the memroy to vmcore. 1 page per I/O. */ +-static int write_memory(DumpState *s, GuestPhysBlock *block, ram_addr_t start, +- int64_t size, Error **errp) ++/* write the memory to vmcore. 1 page per I/O. */ ++static void write_memory(DumpState *s, GuestPhysBlock *block, ram_addr_t start, ++ int64_t size, Error **errp) + { + int64_t i; +- int ret; ++ Error *local_err = NULL; + + for (i = 0; i < size / TARGET_PAGE_SIZE; i++) { +- ret = write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, +- TARGET_PAGE_SIZE, errp); +- if (ret < 0) { +- return ret; ++ write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, ++ TARGET_PAGE_SIZE, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + } + + if ((size % TARGET_PAGE_SIZE) != 0) { +- ret = write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, +- size % TARGET_PAGE_SIZE, errp); +- if (ret < 0) { +- return ret; ++ write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, ++ size % TARGET_PAGE_SIZE, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + } +- +- return 0; + } + + /* get the memory's offset and size in the vmcore */ +@@ -461,13 +433,13 @@ static void get_offset_range(hwaddr phys_addr, + } + } + +-static int write_elf_loads(DumpState *s, Error **errp) ++static void write_elf_loads(DumpState *s, Error **errp) + { + hwaddr offset, filesz; + MemoryMapping *memory_mapping; + uint32_t phdr_index = 1; +- int ret; + uint32_t max_index; ++ Error *local_err = NULL; + + if (s->have_section) { + max_index = s->sh_info; +@@ -480,29 +452,28 @@ static int write_elf_loads(DumpState *s, Error **errp) + memory_mapping->length, + s, &offset, &filesz); + if (s->dump_info.d_class == ELFCLASS64) { +- ret = write_elf64_load(s, memory_mapping, phdr_index++, offset, +- filesz, errp); ++ write_elf64_load(s, memory_mapping, phdr_index++, offset, ++ filesz, &local_err); + } else { +- ret = write_elf32_load(s, memory_mapping, phdr_index++, offset, +- filesz, errp); ++ write_elf32_load(s, memory_mapping, phdr_index++, offset, ++ filesz, &local_err); + } + +- if (ret < 0) { +- return -1; ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + if (phdr_index >= max_index) { + break; + } + } +- +- return 0; + } + + /* write elf header, PT_NOTE and elf note to vmcore. */ +-static int dump_begin(DumpState *s, Error **errp) ++static void dump_begin(DumpState *s, Error **errp) + { +- int ret; ++ Error *local_err = NULL; + + /* + * the vmcore's format is: +@@ -530,69 +501,81 @@ static int dump_begin(DumpState *s, Error **errp) + + /* write elf header to vmcore */ + if (s->dump_info.d_class == ELFCLASS64) { +- ret = write_elf64_header(s, errp); ++ write_elf64_header(s, &local_err); + } else { +- ret = write_elf32_header(s, errp); ++ write_elf32_header(s, &local_err); + } +- if (ret < 0) { +- return -1; ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + if (s->dump_info.d_class == ELFCLASS64) { + /* write PT_NOTE to vmcore */ +- if (write_elf64_note(s, errp) < 0) { +- return -1; ++ write_elf64_note(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + /* write all PT_LOAD to vmcore */ +- if (write_elf_loads(s, errp) < 0) { +- return -1; ++ write_elf_loads(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + /* write section to vmcore */ + if (s->have_section) { +- if (write_elf_section(s, 1, errp) < 0) { +- return -1; ++ write_elf_section(s, 1, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + } + + /* write notes to vmcore */ +- if (write_elf64_notes(fd_write_vmcore, s, errp) < 0) { +- return -1; ++ write_elf64_notes(fd_write_vmcore, s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } +- + } else { + /* write PT_NOTE to vmcore */ +- if (write_elf32_note(s, errp) < 0) { +- return -1; ++ write_elf32_note(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + /* write all PT_LOAD to vmcore */ +- if (write_elf_loads(s, errp) < 0) { +- return -1; ++ write_elf_loads(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + /* write section to vmcore */ + if (s->have_section) { +- if (write_elf_section(s, 0, errp) < 0) { +- return -1; ++ write_elf_section(s, 0, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + } + + /* write notes to vmcore */ +- if (write_elf32_notes(fd_write_vmcore, s, errp) < 0) { +- return -1; ++ write_elf32_notes(fd_write_vmcore, s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + } +- +- return 0; + } + +-/* write PT_LOAD to vmcore */ +-static int dump_completed(DumpState *s) ++static void dump_completed(DumpState *s) + { + dump_cleanup(s); +- return 0; + } + + static int get_next_block(DumpState *s, GuestPhysBlock *block) +@@ -623,11 +606,12 @@ static int get_next_block(DumpState *s, GuestPhysBlock *block) + } + + /* write all memory to vmcore */ +-static int dump_iterate(DumpState *s, Error **errp) ++static void dump_iterate(DumpState *s, Error **errp) + { + GuestPhysBlock *block; + int64_t size; + int ret; ++ Error *local_err = NULL; + + while (1) { + block = s->next_block; +@@ -639,34 +623,30 @@ static int dump_iterate(DumpState *s, Error **errp) + size -= block->target_end - (s->begin + s->length); + } + } +- ret = write_memory(s, block, s->start, size, errp); +- if (ret == -1) { +- return ret; ++ write_memory(s, block, s->start, size, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + ret = get_next_block(s, block); + if (ret == 1) { + dump_completed(s); +- return 0; + } + } + } + +-static int create_vmcore(DumpState *s, Error **errp) ++static void create_vmcore(DumpState *s, Error **errp) + { +- int ret; ++ Error *local_err = NULL; + +- ret = dump_begin(s, errp); +- if (ret < 0) { +- return -1; +- } +- +- ret = dump_iterate(s, errp); +- if (ret < 0) { +- return -1; ++ dump_begin(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + +- return 0; ++ dump_iterate(s, errp); + } + + static int write_start_flat_header(int fd) +@@ -747,9 +727,8 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) + } + + /* write common header, sub header and elf note to vmcore */ +-static int create_header32(DumpState *s, Error **errp) ++static void create_header32(DumpState *s, Error **errp) + { +- int ret = 0; + DiskDumpHeader32 *dh = NULL; + KdumpSubHeader32 *kh = NULL; + size_t size; +@@ -758,6 +737,7 @@ static int create_header32(DumpState *s, Error **errp) + uint32_t bitmap_blocks; + uint32_t status = 0; + uint64_t offset_note; ++ Error *local_err = NULL; + + /* write common header, the version of kdump-compressed format is 6th */ + size = sizeof(DiskDumpHeader32); +@@ -794,7 +774,6 @@ static int create_header32(DumpState *s, Error **errp) + + if (write_buffer(s->fd, 0, dh, size) < 0) { + dump_error(s, "dump: failed to write disk dump header", errp); +- ret = -1; + goto out; + } + +@@ -814,7 +793,6 @@ static int create_header32(DumpState *s, Error **errp) + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { + dump_error(s, "dump: failed to write kdump sub header", errp); +- ret = -1; + goto out; + } + +@@ -823,15 +801,14 @@ static int create_header32(DumpState *s, Error **errp) + s->note_buf_offset = 0; + + /* use s->note_buf to store notes temporarily */ +- if (write_elf32_notes(buf_write_note, s, errp) < 0) { +- ret = -1; ++ write_elf32_notes(buf_write_note, s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); + goto out; + } +- + if (write_buffer(s->fd, offset_note, s->note_buf, + s->note_size) < 0) { + dump_error(s, "dump: failed to write notes", errp); +- ret = -1; + goto out; + } + +@@ -847,14 +824,11 @@ out: + g_free(dh); + g_free(kh); + g_free(s->note_buf); +- +- return ret; + } + + /* write common header, sub header and elf note to vmcore */ +-static int create_header64(DumpState *s, Error **errp) ++static void create_header64(DumpState *s, Error **errp) + { +- int ret = 0; + DiskDumpHeader64 *dh = NULL; + KdumpSubHeader64 *kh = NULL; + size_t size; +@@ -863,6 +837,7 @@ static int create_header64(DumpState *s, Error **errp) + uint32_t bitmap_blocks; + uint32_t status = 0; + uint64_t offset_note; ++ Error *local_err = NULL; + + /* write common header, the version of kdump-compressed format is 6th */ + size = sizeof(DiskDumpHeader64); +@@ -899,7 +874,6 @@ static int create_header64(DumpState *s, Error **errp) + + if (write_buffer(s->fd, 0, dh, size) < 0) { + dump_error(s, "dump: failed to write disk dump header", errp); +- ret = -1; + goto out; + } + +@@ -919,7 +893,6 @@ static int create_header64(DumpState *s, Error **errp) + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { + dump_error(s, "dump: failed to write kdump sub header", errp); +- ret = -1; + goto out; + } + +@@ -928,15 +901,15 @@ static int create_header64(DumpState *s, Error **errp) + s->note_buf_offset = 0; + + /* use s->note_buf to store notes temporarily */ +- if (write_elf64_notes(buf_write_note, s, errp) < 0) { +- ret = -1; ++ write_elf64_notes(buf_write_note, s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); + goto out; + } + + if (write_buffer(s->fd, offset_note, s->note_buf, + s->note_size) < 0) { + dump_error(s, "dump: failed to write notes", errp); +- ret = -1; + goto out; + } + +@@ -952,16 +925,19 @@ out: + g_free(dh); + g_free(kh); + g_free(s->note_buf); +- +- return ret; + } + +-static int write_dump_header(DumpState *s, Error **errp) ++static void write_dump_header(DumpState *s, Error **errp) + { ++ Error *local_err = NULL; ++ + if (s->dump_info.d_class == ELFCLASS32) { +- return create_header32(s, errp); ++ create_header32(s, &local_err); + } else { +- return create_header64(s, errp); ++ create_header64(s, &local_err); ++ } ++ if (local_err) { ++ error_propagate(errp, local_err); + } + } + +@@ -1075,7 +1051,7 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + return true; + } + +-static int write_dump_bitmap(DumpState *s, Error **errp) ++static void write_dump_bitmap(DumpState *s, Error **errp) + { + int ret = 0; + uint64_t last_pfn, pfn; +@@ -1097,7 +1073,6 @@ static int write_dump_bitmap(DumpState *s, Error **errp) + ret = set_dump_bitmap(last_pfn, pfn, true, dump_bitmap_buf, s); + if (ret < 0) { + dump_error(s, "dump: failed to set dump_bitmap", errp); +- ret = -1; + goto out; + } + +@@ -1115,7 +1090,6 @@ static int write_dump_bitmap(DumpState *s, Error **errp) + dump_bitmap_buf, s); + if (ret < 0) { + dump_error(s, "dump: failed to sync dump_bitmap", errp); +- ret = -1; + goto out; + } + } +@@ -1125,8 +1099,6 @@ static int write_dump_bitmap(DumpState *s, Error **errp) + + out: + g_free(dump_bitmap_buf); +- +- return ret; + } + + static void prepare_data_cache(DataCache *data_cache, DumpState *s, +@@ -1206,7 +1178,7 @@ static inline bool is_zero_page(const uint8_t *buf, size_t page_size) + return buffer_is_zero(buf, page_size); + } + +-static int write_dump_pages(DumpState *s, Error **errp) ++static void write_dump_pages(DumpState *s, Error **errp) + { + int ret = 0; + DataCache page_desc, page_data; +@@ -1371,13 +1343,12 @@ out: + #endif + + g_free(buf_out); +- +- return ret; + } + +-static int create_kdump_vmcore(DumpState *s, Error **errp) ++static void create_kdump_vmcore(DumpState *s, Error **errp) + { + int ret; ++ Error *local_err = NULL; + + /* + * the kdump-compressed format is: +@@ -1404,33 +1375,34 @@ static int create_kdump_vmcore(DumpState *s, Error **errp) + ret = write_start_flat_header(s->fd); + if (ret < 0) { + dump_error(s, "dump: failed to write start flat header", errp); +- return -1; ++ return; + } + +- ret = write_dump_header(s, errp); +- if (ret < 0) { +- return -1; ++ write_dump_header(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + +- ret = write_dump_bitmap(s, errp); +- if (ret < 0) { +- return -1; ++ write_dump_bitmap(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + +- ret = write_dump_pages(s, errp); +- if (ret < 0) { +- return -1; ++ write_dump_pages(s, &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ return; + } + + ret = write_end_flat_header(s->fd); + if (ret < 0) { + dump_error(s, "dump: failed to write end flat header", errp); +- return -1; ++ return; + } + + dump_completed(s); +- +- return 0; + } + + static ram_addr_t get_start_block(DumpState *s) +@@ -1469,9 +1441,9 @@ static void get_max_mapnr(DumpState *s) + s->max_mapnr = paddr_to_pfn(last_block->target_end); + } + +-static int dump_init(DumpState *s, int fd, bool has_format, +- DumpGuestMemoryFormat format, bool paging, bool has_filter, +- int64_t begin, int64_t length, Error **errp) ++static void dump_init(DumpState *s, int fd, bool has_format, ++ DumpGuestMemoryFormat format, bool paging, bool has_filter, ++ int64_t begin, int64_t length, Error **errp) + { + CPUArchState *env; + int nr_cpus; +@@ -1576,7 +1548,7 @@ static int dump_init(DumpState *s, int fd, bool has_format, + s->flag_compress = 0; + } + +- return 0; ++ return; + } + + if (s->has_filter) { +@@ -1625,11 +1597,10 @@ static int dump_init(DumpState *s, int fd, bool has_format, + } + } + +- return 0; ++ return; + + cleanup: + dump_cleanup(s); +- return -1; + } + + void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, +@@ -1640,7 +1611,7 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + const char *p; + int fd = -1; + DumpState *s; +- int ret; ++ Error *local_err = NULL; + + /* + * kdump-compressed format need the whole memory dumped, so paging or +@@ -1700,10 +1671,11 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + + s = g_malloc0(sizeof(DumpState)); + +- ret = dump_init(s, fd, has_format, format, paging, has_begin, +- begin, length, errp); +- if (ret < 0) { ++ dump_init(s, fd, has_format, format, paging, has_begin, ++ begin, length, &local_err); ++ if (local_err) { + g_free(s); ++ error_propagate(errp, local_err); + return; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-API-to-write-dump-header.patch b/SOURCES/kvm-dump-add-API-to-write-dump-header.patch new file mode 100644 index 0000000..91edaba --- /dev/null +++ b/SOURCES/kvm-dump-add-API-to-write-dump-header.patch @@ -0,0 +1,383 @@ +From 86459b009f0402a2cdf3ef6a944684b62ac2ea0a Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:58 +0100 +Subject: [PATCH 11/41] dump: add API to write dump header + +Message-id: <1415380693-16593-12-git-send-email-lersek@redhat.com> +Patchwork-id: 62197 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 11/26] dump: add API to write dump header +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +the functions are used to write header of kdump-compressed format to vmcore. +Header of kdump-compressed format includes: +1. common header: DiskDumpHeader32 / DiskDumpHeader64 +2. sub header: KdumpSubHeader32 / KdumpSubHeader64 +3. extra information: only elf notes here + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 298f116827405f37dde10a2a6cbc75d20f9ba99c) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 96 ++++++++++++++++++++++ + 2 files changed, 319 insertions(+) + +diff --git a/dump.c b/dump.c +index 88e8cc0..4d135fd 100644 +--- a/dump.c ++++ b/dump.c +@@ -784,6 +784,229 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) + return 0; + } + ++/* write common header, sub header and elf note to vmcore */ ++static int create_header32(DumpState *s) ++{ ++ int ret = 0; ++ DiskDumpHeader32 *dh = NULL; ++ KdumpSubHeader32 *kh = NULL; ++ size_t size; ++ int endian = s->dump_info.d_endian; ++ uint32_t block_size; ++ uint32_t sub_hdr_size; ++ uint32_t bitmap_blocks; ++ uint32_t status = 0; ++ uint64_t offset_note; ++ ++ /* write common header, the version of kdump-compressed format is 6th */ ++ size = sizeof(DiskDumpHeader32); ++ dh = g_malloc0(size); ++ ++ strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); ++ dh->header_version = cpu_convert_to_target32(6, endian); ++ block_size = s->page_size; ++ dh->block_size = cpu_convert_to_target32(block_size, endian); ++ sub_hdr_size = sizeof(struct KdumpSubHeader32) + s->note_size; ++ sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); ++ dh->sub_hdr_size = cpu_convert_to_target32(sub_hdr_size, endian); ++ /* dh->max_mapnr may be truncated, full 64bit is in kh.max_mapnr_64 */ ++ dh->max_mapnr = cpu_convert_to_target32(MIN(s->max_mapnr, UINT_MAX), ++ endian); ++ dh->nr_cpus = cpu_convert_to_target32(s->nr_cpus, endian); ++ bitmap_blocks = DIV_ROUND_UP(s->len_dump_bitmap, block_size) * 2; ++ dh->bitmap_blocks = cpu_convert_to_target32(bitmap_blocks, endian); ++ memcpy(&(dh->utsname.machine), "i686", 4); ++ ++ if (s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) { ++ status |= DUMP_DH_COMPRESSED_ZLIB; ++ } ++#ifdef CONFIG_LZO ++ if (s->flag_compress & DUMP_DH_COMPRESSED_LZO) { ++ status |= DUMP_DH_COMPRESSED_LZO; ++ } ++#endif ++#ifdef CONFIG_SNAPPY ++ if (s->flag_compress & DUMP_DH_COMPRESSED_SNAPPY) { ++ status |= DUMP_DH_COMPRESSED_SNAPPY; ++ } ++#endif ++ dh->status = cpu_convert_to_target32(status, endian); ++ ++ if (write_buffer(s->fd, 0, dh, size) < 0) { ++ dump_error(s, "dump: failed to write disk dump header.\n"); ++ ret = -1; ++ goto out; ++ } ++ ++ /* write sub header */ ++ size = sizeof(KdumpSubHeader32); ++ kh = g_malloc0(size); ++ ++ /* 64bit max_mapnr_64 */ ++ kh->max_mapnr_64 = cpu_convert_to_target64(s->max_mapnr, endian); ++ kh->phys_base = cpu_convert_to_target32(PHYS_BASE, endian); ++ kh->dump_level = cpu_convert_to_target32(DUMP_LEVEL, endian); ++ ++ offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; ++ kh->offset_note = cpu_convert_to_target64(offset_note, endian); ++ kh->note_size = cpu_convert_to_target32(s->note_size, endian); ++ ++ if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * ++ block_size, kh, size) < 0) { ++ dump_error(s, "dump: failed to write kdump sub header.\n"); ++ ret = -1; ++ goto out; ++ } ++ ++ /* write note */ ++ s->note_buf = g_malloc0(s->note_size); ++ s->note_buf_offset = 0; ++ ++ /* use s->note_buf to store notes temporarily */ ++ if (write_elf32_notes(buf_write_note, s) < 0) { ++ ret = -1; ++ goto out; ++ } ++ ++ if (write_buffer(s->fd, offset_note, s->note_buf, ++ s->note_size) < 0) { ++ dump_error(s, "dump: failed to write notes"); ++ ret = -1; ++ goto out; ++ } ++ ++ /* get offset of dump_bitmap */ ++ s->offset_dump_bitmap = (DISKDUMP_HEADER_BLOCKS + sub_hdr_size) * ++ block_size; ++ ++ /* get offset of page */ ++ s->offset_page = (DISKDUMP_HEADER_BLOCKS + sub_hdr_size + bitmap_blocks) * ++ block_size; ++ ++out: ++ g_free(dh); ++ g_free(kh); ++ g_free(s->note_buf); ++ ++ return ret; ++} ++ ++/* write common header, sub header and elf note to vmcore */ ++static int create_header64(DumpState *s) ++{ ++ int ret = 0; ++ DiskDumpHeader64 *dh = NULL; ++ KdumpSubHeader64 *kh = NULL; ++ size_t size; ++ int endian = s->dump_info.d_endian; ++ uint32_t block_size; ++ uint32_t sub_hdr_size; ++ uint32_t bitmap_blocks; ++ uint32_t status = 0; ++ uint64_t offset_note; ++ ++ /* write common header, the version of kdump-compressed format is 6th */ ++ size = sizeof(DiskDumpHeader64); ++ dh = g_malloc0(size); ++ ++ strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); ++ dh->header_version = cpu_convert_to_target32(6, endian); ++ block_size = s->page_size; ++ dh->block_size = cpu_convert_to_target32(block_size, endian); ++ sub_hdr_size = sizeof(struct KdumpSubHeader64) + s->note_size; ++ sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); ++ dh->sub_hdr_size = cpu_convert_to_target32(sub_hdr_size, endian); ++ /* dh->max_mapnr may be truncated, full 64bit is in kh.max_mapnr_64 */ ++ dh->max_mapnr = cpu_convert_to_target32(MIN(s->max_mapnr, UINT_MAX), ++ endian); ++ dh->nr_cpus = cpu_convert_to_target32(s->nr_cpus, endian); ++ bitmap_blocks = DIV_ROUND_UP(s->len_dump_bitmap, block_size) * 2; ++ dh->bitmap_blocks = cpu_convert_to_target32(bitmap_blocks, endian); ++ memcpy(&(dh->utsname.machine), "x86_64", 6); ++ ++ if (s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) { ++ status |= DUMP_DH_COMPRESSED_ZLIB; ++ } ++#ifdef CONFIG_LZO ++ if (s->flag_compress & DUMP_DH_COMPRESSED_LZO) { ++ status |= DUMP_DH_COMPRESSED_LZO; ++ } ++#endif ++#ifdef CONFIG_SNAPPY ++ if (s->flag_compress & DUMP_DH_COMPRESSED_SNAPPY) { ++ status |= DUMP_DH_COMPRESSED_SNAPPY; ++ } ++#endif ++ dh->status = cpu_convert_to_target32(status, endian); ++ ++ if (write_buffer(s->fd, 0, dh, size) < 0) { ++ dump_error(s, "dump: failed to write disk dump header.\n"); ++ ret = -1; ++ goto out; ++ } ++ ++ /* write sub header */ ++ size = sizeof(KdumpSubHeader64); ++ kh = g_malloc0(size); ++ ++ /* 64bit max_mapnr_64 */ ++ kh->max_mapnr_64 = cpu_convert_to_target64(s->max_mapnr, endian); ++ kh->phys_base = cpu_convert_to_target64(PHYS_BASE, endian); ++ kh->dump_level = cpu_convert_to_target32(DUMP_LEVEL, endian); ++ ++ offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; ++ kh->offset_note = cpu_convert_to_target64(offset_note, endian); ++ kh->note_size = cpu_convert_to_target64(s->note_size, endian); ++ ++ if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * ++ block_size, kh, size) < 0) { ++ dump_error(s, "dump: failed to write kdump sub header.\n"); ++ ret = -1; ++ goto out; ++ } ++ ++ /* write note */ ++ s->note_buf = g_malloc0(s->note_size); ++ s->note_buf_offset = 0; ++ ++ /* use s->note_buf to store notes temporarily */ ++ if (write_elf64_notes(buf_write_note, s) < 0) { ++ ret = -1; ++ goto out; ++ } ++ ++ if (write_buffer(s->fd, offset_note, s->note_buf, ++ s->note_size) < 0) { ++ dump_error(s, "dump: failed to write notes"); ++ ret = -1; ++ goto out; ++ } ++ ++ /* get offset of dump_bitmap */ ++ s->offset_dump_bitmap = (DISKDUMP_HEADER_BLOCKS + sub_hdr_size) * ++ block_size; ++ ++ /* get offset of page */ ++ s->offset_page = (DISKDUMP_HEADER_BLOCKS + sub_hdr_size + bitmap_blocks) * ++ block_size; ++ ++out: ++ g_free(dh); ++ g_free(kh); ++ g_free(s->note_buf); ++ ++ return ret; ++} ++ ++static int write_dump_header(DumpState *s) ++{ ++ if (s->dump_info.d_machine == EM_386) { ++ return create_header32(s); ++ } else { ++ return create_header64(s); ++ } ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 995bf47..dfee238 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -27,6 +27,19 @@ + #define pfn_to_paddr(X, page_shift) \ + (((unsigned long long)(X) + ARCH_PFN_OFFSET) << (page_shift)) + ++/* ++ * flag for compressed format ++ */ ++#define DUMP_DH_COMPRESSED_ZLIB (0x1) ++#define DUMP_DH_COMPRESSED_LZO (0x2) ++#define DUMP_DH_COMPRESSED_SNAPPY (0x4) ++ ++#define KDUMP_SIGNATURE "KDUMP " ++#define SIG_LEN (sizeof(KDUMP_SIGNATURE) - 1) ++#define PHYS_BASE (0) ++#define DUMP_LEVEL (1) ++#define DISKDUMP_HEADER_BLOCKS (1) ++ + typedef struct ArchDumpInfo { + int d_machine; /* Architecture */ + int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ +@@ -44,6 +57,89 @@ typedef struct QEMU_PACKED MakedumpfileDataHeader { + int64_t buf_size; + } MakedumpfileDataHeader; + ++typedef struct QEMU_PACKED NewUtsname { ++ char sysname[65]; ++ char nodename[65]; ++ char release[65]; ++ char version[65]; ++ char machine[65]; ++ char domainname[65]; ++} NewUtsname; ++ ++typedef struct QEMU_PACKED DiskDumpHeader32 { ++ char signature[SIG_LEN]; /* = "KDUMP " */ ++ uint32_t header_version; /* Dump header version */ ++ NewUtsname utsname; /* copy of system_utsname */ ++ char timestamp[10]; /* Time stamp */ ++ uint32_t status; /* Above flags */ ++ uint32_t block_size; /* Size of a block in byte */ ++ uint32_t sub_hdr_size; /* Size of arch dependent header in block */ ++ uint32_t bitmap_blocks; /* Size of Memory bitmap in block */ ++ uint32_t max_mapnr; /* = max_mapnr , ++ obsoleted in header_version 6 */ ++ uint32_t total_ram_blocks; /* Number of blocks should be written */ ++ uint32_t device_blocks; /* Number of total blocks in dump device */ ++ uint32_t written_blocks; /* Number of written blocks */ ++ uint32_t current_cpu; /* CPU# which handles dump */ ++ uint32_t nr_cpus; /* Number of CPUs */ ++} DiskDumpHeader32; ++ ++typedef struct QEMU_PACKED DiskDumpHeader64 { ++ char signature[SIG_LEN]; /* = "KDUMP " */ ++ uint32_t header_version; /* Dump header version */ ++ NewUtsname utsname; /* copy of system_utsname */ ++ char timestamp[22]; /* Time stamp */ ++ uint32_t status; /* Above flags */ ++ uint32_t block_size; /* Size of a block in byte */ ++ uint32_t sub_hdr_size; /* Size of arch dependent header in block */ ++ uint32_t bitmap_blocks; /* Size of Memory bitmap in block */ ++ uint32_t max_mapnr; /* = max_mapnr, ++ obsoleted in header_version 6 */ ++ uint32_t total_ram_blocks; /* Number of blocks should be written */ ++ uint32_t device_blocks; /* Number of total blocks in dump device */ ++ uint32_t written_blocks; /* Number of written blocks */ ++ uint32_t current_cpu; /* CPU# which handles dump */ ++ uint32_t nr_cpus; /* Number of CPUs */ ++} DiskDumpHeader64; ++ ++typedef struct QEMU_PACKED KdumpSubHeader32 { ++ uint32_t phys_base; ++ uint32_t dump_level; /* header_version 1 and later */ ++ uint32_t split; /* header_version 2 and later */ ++ uint32_t start_pfn; /* header_version 2 and later, ++ obsoleted in header_version 6 */ ++ uint32_t end_pfn; /* header_version 2 and later, ++ obsoleted in header_version 6 */ ++ uint64_t offset_vmcoreinfo; /* header_version 3 and later */ ++ uint32_t size_vmcoreinfo; /* header_version 3 and later */ ++ uint64_t offset_note; /* header_version 4 and later */ ++ uint32_t note_size; /* header_version 4 and later */ ++ uint64_t offset_eraseinfo; /* header_version 5 and later */ ++ uint32_t size_eraseinfo; /* header_version 5 and later */ ++ uint64_t start_pfn_64; /* header_version 6 and later */ ++ uint64_t end_pfn_64; /* header_version 6 and later */ ++ uint64_t max_mapnr_64; /* header_version 6 and later */ ++} KdumpSubHeader32; ++ ++typedef struct QEMU_PACKED KdumpSubHeader64 { ++ uint64_t phys_base; ++ uint32_t dump_level; /* header_version 1 and later */ ++ uint32_t split; /* header_version 2 and later */ ++ uint64_t start_pfn; /* header_version 2 and later, ++ obsoleted in header_version 6 */ ++ uint64_t end_pfn; /* header_version 2 and later, ++ obsoleted in header_version 6 */ ++ uint64_t offset_vmcoreinfo; /* header_version 3 and later */ ++ uint64_t size_vmcoreinfo; /* header_version 3 and later */ ++ uint64_t offset_note; /* header_version 4 and later */ ++ uint64_t note_size; /* header_version 4 and later */ ++ uint64_t offset_eraseinfo; /* header_version 5 and later */ ++ uint64_t size_eraseinfo; /* header_version 5 and later */ ++ uint64_t start_pfn_64; /* header_version 6 and later */ ++ uint64_t end_pfn_64; /* header_version 6 and later */ ++ uint64_t max_mapnr_64; /* header_version 6 and later */ ++} KdumpSubHeader64; ++ + struct GuestPhysBlockList; /* memory_mapping.h */ + int cpu_get_dump_info(ArchDumpInfo *info, + const struct GuestPhysBlockList *guest_phys_blocks); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-API-to-write-dump-pages.patch b/SOURCES/kvm-dump-add-API-to-write-dump-pages.patch new file mode 100644 index 0000000..25312f3 --- /dev/null +++ b/SOURCES/kvm-dump-add-API-to-write-dump-pages.patch @@ -0,0 +1,300 @@ +From 55c524d38cafb5856220c76b9573efa6e22dd1f1 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:01 +0100 +Subject: [PATCH 14/41] dump: add API to write dump pages + +Message-id: <1415380693-16593-15-git-send-email-lersek@redhat.com> +Patchwork-id: 62200 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 14/26] dump: add API to write dump pages +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +functions are used to write page to vmcore. vmcore is written page by page. +page desc is used to store the information of a page, including a page's size, +offset, compression format, etc. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit d12f57ec6640d36e380367a0ab6ab9f3f29b6d51) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 231 ++++++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 7 ++ + 2 files changed, 238 insertions(+) + +diff --git a/dump.c b/dump.c +index 926ab84..fc5530f 100644 +--- a/dump.c ++++ b/dump.c +@@ -25,6 +25,14 @@ + #include "qapi/error.h" + #include "qmp-commands.h" + ++#include ++#ifdef CONFIG_LZO ++#include ++#endif ++#ifdef CONFIG_SNAPPY ++#include ++#endif ++ + static uint16_t cpu_convert_to_target16(uint16_t val, int endian) + { + if (endian == ELFDATA2LSB) { +@@ -1218,6 +1226,229 @@ static void free_data_cache(DataCache *data_cache) + g_free(data_cache->buf); + } + ++static size_t get_len_buf_out(size_t page_size, uint32_t flag_compress) ++{ ++ size_t len_buf_out_zlib, len_buf_out_lzo, len_buf_out_snappy; ++ size_t len_buf_out; ++ ++ /* init buf_out */ ++ len_buf_out_zlib = len_buf_out_lzo = len_buf_out_snappy = 0; ++ ++ /* buf size for zlib */ ++ len_buf_out_zlib = compressBound(page_size); ++ ++ /* buf size for lzo */ ++#ifdef CONFIG_LZO ++ if (flag_compress & DUMP_DH_COMPRESSED_LZO) { ++ if (lzo_init() != LZO_E_OK) { ++ /* return 0 to indicate lzo is unavailable */ ++ return 0; ++ } ++ } ++ ++ /* ++ * LZO will expand incompressible data by a little amount. please check the ++ * following URL to see the expansion calculation: ++ * http://www.oberhumer.com/opensource/lzo/lzofaq.php ++ */ ++ len_buf_out_lzo = page_size + page_size / 16 + 64 + 3; ++#endif ++ ++#ifdef CONFIG_SNAPPY ++ /* buf size for snappy */ ++ len_buf_out_snappy = snappy_max_compressed_length(page_size); ++#endif ++ ++ /* get the biggest that can store all kinds of compressed page */ ++ len_buf_out = MAX(len_buf_out_zlib, ++ MAX(len_buf_out_lzo, len_buf_out_snappy)); ++ ++ return len_buf_out; ++} ++ ++/* ++ * check if the page is all 0 ++ */ ++static inline bool is_zero_page(const uint8_t *buf, size_t page_size) ++{ ++ return buffer_is_zero(buf, page_size); ++} ++ ++static int write_dump_pages(DumpState *s) ++{ ++ int ret = 0; ++ DataCache page_desc, page_data; ++ size_t len_buf_out, size_out; ++#ifdef CONFIG_LZO ++ lzo_bytep wrkmem = NULL; ++#endif ++ uint8_t *buf_out = NULL; ++ off_t offset_desc, offset_data; ++ PageDescriptor pd, pd_zero; ++ uint8_t *buf; ++ int endian = s->dump_info.d_endian; ++ GuestPhysBlock *block_iter = NULL; ++ uint64_t pfn_iter; ++ ++ /* get offset of page_desc and page_data in dump file */ ++ offset_desc = s->offset_page; ++ offset_data = offset_desc + sizeof(PageDescriptor) * s->num_dumpable; ++ ++ prepare_data_cache(&page_desc, s, offset_desc); ++ prepare_data_cache(&page_data, s, offset_data); ++ ++ /* prepare buffer to store compressed data */ ++ len_buf_out = get_len_buf_out(s->page_size, s->flag_compress); ++ if (len_buf_out == 0) { ++ dump_error(s, "dump: failed to get length of output buffer.\n"); ++ goto out; ++ } ++ ++#ifdef CONFIG_LZO ++ wrkmem = g_malloc(LZO1X_1_MEM_COMPRESS); ++#endif ++ ++ buf_out = g_malloc(len_buf_out); ++ ++ /* ++ * init zero page's page_desc and page_data, because every zero page ++ * uses the same page_data ++ */ ++ pd_zero.size = cpu_convert_to_target32(s->page_size, endian); ++ pd_zero.flags = cpu_convert_to_target32(0, endian); ++ pd_zero.offset = cpu_convert_to_target64(offset_data, endian); ++ pd_zero.page_flags = cpu_convert_to_target64(0, endian); ++ buf = g_malloc0(s->page_size); ++ ret = write_cache(&page_data, buf, s->page_size, false); ++ g_free(buf); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page data(zero page).\n"); ++ goto out; ++ } ++ ++ offset_data += s->page_size; ++ ++ /* ++ * dump memory to vmcore page by page. zero page will all be resided in the ++ * first page of page section ++ */ ++ while (get_next_page(&block_iter, &pfn_iter, &buf, s)) { ++ /* check zero page */ ++ if (is_zero_page(buf, s->page_size)) { ++ ret = write_cache(&page_desc, &pd_zero, sizeof(PageDescriptor), ++ false); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page desc.\n"); ++ goto out; ++ } ++ } else { ++ /* ++ * not zero page, then: ++ * 1. compress the page ++ * 2. write the compressed page into the cache of page_data ++ * 3. get page desc of the compressed page and write it into the ++ * cache of page_desc ++ * ++ * only one compression format will be used here, for ++ * s->flag_compress is set. But when compression fails to work, ++ * we fall back to save in plaintext. ++ */ ++ size_out = len_buf_out; ++ if ((s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) && ++ (compress2(buf_out, (uLongf *)&size_out, buf, s->page_size, ++ Z_BEST_SPEED) == Z_OK) && (size_out < s->page_size)) { ++ pd.flags = cpu_convert_to_target32(DUMP_DH_COMPRESSED_ZLIB, ++ endian); ++ pd.size = cpu_convert_to_target32(size_out, endian); ++ ++ ret = write_cache(&page_data, buf_out, size_out, false); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page data.\n"); ++ goto out; ++ } ++#ifdef CONFIG_LZO ++ } else if ((s->flag_compress & DUMP_DH_COMPRESSED_LZO) && ++ (lzo1x_1_compress(buf, s->page_size, buf_out, ++ (lzo_uint *)&size_out, wrkmem) == LZO_E_OK) && ++ (size_out < s->page_size)) { ++ pd.flags = cpu_convert_to_target32(DUMP_DH_COMPRESSED_LZO, ++ endian); ++ pd.size = cpu_convert_to_target32(size_out, endian); ++ ++ ret = write_cache(&page_data, buf_out, size_out, false); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page data.\n"); ++ goto out; ++ } ++#endif ++#ifdef CONFIG_SNAPPY ++ } else if ((s->flag_compress & DUMP_DH_COMPRESSED_SNAPPY) && ++ (snappy_compress((char *)buf, s->page_size, ++ (char *)buf_out, &size_out) == SNAPPY_OK) && ++ (size_out < s->page_size)) { ++ pd.flags = cpu_convert_to_target32( ++ DUMP_DH_COMPRESSED_SNAPPY, endian); ++ pd.size = cpu_convert_to_target32(size_out, endian); ++ ++ ret = write_cache(&page_data, buf_out, size_out, false); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page data.\n"); ++ goto out; ++ } ++#endif ++ } else { ++ /* ++ * fall back to save in plaintext, size_out should be ++ * assigned to s->page_size ++ */ ++ pd.flags = cpu_convert_to_target32(0, endian); ++ size_out = s->page_size; ++ pd.size = cpu_convert_to_target32(size_out, endian); ++ ++ ret = write_cache(&page_data, buf, s->page_size, false); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page data.\n"); ++ goto out; ++ } ++ } ++ ++ /* get and write page desc here */ ++ pd.page_flags = cpu_convert_to_target64(0, endian); ++ pd.offset = cpu_convert_to_target64(offset_data, endian); ++ offset_data += size_out; ++ ++ ret = write_cache(&page_desc, &pd, sizeof(PageDescriptor), false); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write page desc.\n"); ++ goto out; ++ } ++ } ++ } ++ ++ ret = write_cache(&page_desc, NULL, 0, true); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to sync cache for page_desc.\n"); ++ goto out; ++ } ++ ret = write_cache(&page_data, NULL, 0, true); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to sync cache for page_data.\n"); ++ goto out; ++ } ++ ++out: ++ free_data_cache(&page_desc); ++ free_data_cache(&page_data); ++ ++#ifdef CONFIG_LZO ++ g_free(wrkmem); ++#endif ++ ++ g_free(buf_out); ++ ++ return ret; ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 92a95e4..efab7a3 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -151,6 +151,13 @@ typedef struct DataCache { + off_t offset; /* offset of the file */ + } DataCache; + ++typedef struct QEMU_PACKED PageDescriptor { ++ uint64_t offset; /* the offset of the page data*/ ++ uint32_t size; /* the size of this dump page */ ++ uint32_t flags; /* flags */ ++ uint64_t page_flags; /* page flags */ ++} PageDescriptor; ++ + struct GuestPhysBlockList; /* memory_mapping.h */ + int cpu_get_dump_info(ArchDumpInfo *info, + const struct GuestPhysBlockList *guest_phys_blocks); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-API-to-write-dump_bitmap.patch b/SOURCES/kvm-dump-add-API-to-write-dump_bitmap.patch new file mode 100644 index 0000000..5eab4b9 --- /dev/null +++ b/SOURCES/kvm-dump-add-API-to-write-dump_bitmap.patch @@ -0,0 +1,221 @@ +From 3555c9b0e05c410028022a1b1af34ad7a2e83e98 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:59 +0100 +Subject: [PATCH 12/41] dump: add API to write dump_bitmap + +Message-id: <1415380693-16593-13-git-send-email-lersek@redhat.com> +Patchwork-id: 62198 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 12/26] dump: add API to write dump_bitmap +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +functions are used to write 1st and 2nd dump_bitmap of kdump-compressed format, +which is used to indicate whether the corresponded page is existed in vmcore. +1st and 2nd dump_bitmap are same, because dump level is specified to 1 here. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit d0686c7291fe8f0210e7a666f80892fa71395510) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 2 + + 2 files changed, 166 insertions(+) + +diff --git a/dump.c b/dump.c +index 4d135fd..f416093 100644 +--- a/dump.c ++++ b/dump.c +@@ -1007,6 +1007,170 @@ static int write_dump_header(DumpState *s) + } + } + ++/* ++ * set dump_bitmap sequencely. the bit before last_pfn is not allowed to be ++ * rewritten, so if need to set the first bit, set last_pfn and pfn to 0. ++ * set_dump_bitmap will always leave the recently set bit un-sync. And setting ++ * (last bit + sizeof(buf) * 8) to 0 will do flushing the content in buf into ++ * vmcore, ie. synchronizing un-sync bit into vmcore. ++ */ ++static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, ++ uint8_t *buf, DumpState *s) ++{ ++ off_t old_offset, new_offset; ++ off_t offset_bitmap1, offset_bitmap2; ++ uint32_t byte, bit; ++ ++ /* should not set the previous place */ ++ assert(last_pfn <= pfn); ++ ++ /* ++ * if the bit needed to be set is not cached in buf, flush the data in buf ++ * to vmcore firstly. ++ * making new_offset be bigger than old_offset can also sync remained data ++ * into vmcore. ++ */ ++ old_offset = BUFSIZE_BITMAP * (last_pfn / PFN_BUFBITMAP); ++ new_offset = BUFSIZE_BITMAP * (pfn / PFN_BUFBITMAP); ++ ++ while (old_offset < new_offset) { ++ /* calculate the offset and write dump_bitmap */ ++ offset_bitmap1 = s->offset_dump_bitmap + old_offset; ++ if (write_buffer(s->fd, offset_bitmap1, buf, ++ BUFSIZE_BITMAP) < 0) { ++ return -1; ++ } ++ ++ /* dump level 1 is chosen, so 1st and 2nd bitmap are same */ ++ offset_bitmap2 = s->offset_dump_bitmap + s->len_dump_bitmap + ++ old_offset; ++ if (write_buffer(s->fd, offset_bitmap2, buf, ++ BUFSIZE_BITMAP) < 0) { ++ return -1; ++ } ++ ++ memset(buf, 0, BUFSIZE_BITMAP); ++ old_offset += BUFSIZE_BITMAP; ++ } ++ ++ /* get the exact place of the bit in the buf, and set it */ ++ byte = (pfn % PFN_BUFBITMAP) / CHAR_BIT; ++ bit = (pfn % PFN_BUFBITMAP) % CHAR_BIT; ++ if (value) { ++ buf[byte] |= 1u << bit; ++ } else { ++ buf[byte] &= ~(1u << bit); ++ } ++ ++ return 0; ++} ++ ++/* ++ * exam every page and return the page frame number and the address of the page. ++ * bufptr can be NULL. note: the blocks here is supposed to reflect guest-phys ++ * blocks, so block->target_start and block->target_end should be interal ++ * multiples of the target page size. ++ */ ++static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, ++ uint8_t **bufptr, DumpState *s) ++{ ++ GuestPhysBlock *block = *blockptr; ++ hwaddr addr; ++ uint8_t *buf; ++ ++ /* block == NULL means the start of the iteration */ ++ if (!block) { ++ block = QTAILQ_FIRST(&s->guest_phys_blocks.head); ++ *blockptr = block; ++ assert(block->target_start % s->page_size == 0); ++ assert(block->target_end % s->page_size == 0); ++ *pfnptr = paddr_to_pfn(block->target_start, s->page_shift); ++ if (bufptr) { ++ *bufptr = block->host_addr; ++ } ++ return true; ++ } ++ ++ *pfnptr = *pfnptr + 1; ++ addr = pfn_to_paddr(*pfnptr, s->page_shift); ++ ++ if ((addr >= block->target_start) && ++ (addr + s->page_size <= block->target_end)) { ++ buf = block->host_addr + (addr - block->target_start); ++ } else { ++ /* the next page is in the next block */ ++ block = QTAILQ_NEXT(block, next); ++ *blockptr = block; ++ if (!block) { ++ return false; ++ } ++ assert(block->target_start % s->page_size == 0); ++ assert(block->target_end % s->page_size == 0); ++ *pfnptr = paddr_to_pfn(block->target_start, s->page_shift); ++ buf = block->host_addr; ++ } ++ ++ if (bufptr) { ++ *bufptr = buf; ++ } ++ ++ return true; ++} ++ ++static int write_dump_bitmap(DumpState *s) ++{ ++ int ret = 0; ++ uint64_t last_pfn, pfn; ++ void *dump_bitmap_buf; ++ size_t num_dumpable; ++ GuestPhysBlock *block_iter = NULL; ++ ++ /* dump_bitmap_buf is used to store dump_bitmap temporarily */ ++ dump_bitmap_buf = g_malloc0(BUFSIZE_BITMAP); ++ ++ num_dumpable = 0; ++ last_pfn = 0; ++ ++ /* ++ * exam memory page by page, and set the bit in dump_bitmap corresponded ++ * to the existing page. ++ */ ++ while (get_next_page(&block_iter, &pfn, NULL, s)) { ++ ret = set_dump_bitmap(last_pfn, pfn, true, dump_bitmap_buf, s); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to set dump_bitmap.\n"); ++ ret = -1; ++ goto out; ++ } ++ ++ last_pfn = pfn; ++ num_dumpable++; ++ } ++ ++ /* ++ * set_dump_bitmap will always leave the recently set bit un-sync. Here we ++ * set last_pfn + PFN_BUFBITMAP to 0 and those set but un-sync bit will be ++ * synchronized into vmcore. ++ */ ++ if (num_dumpable > 0) { ++ ret = set_dump_bitmap(last_pfn, last_pfn + PFN_BUFBITMAP, false, ++ dump_bitmap_buf, s); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to sync dump_bitmap.\n"); ++ ret = -1; ++ goto out; ++ } ++ } ++ ++ /* number of dumpable pages that will be dumped later */ ++ s->num_dumpable = num_dumpable; ++ ++out: ++ g_free(dump_bitmap_buf); ++ ++ return ret; ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index dfee238..6d4d0bc 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -39,6 +39,8 @@ + #define PHYS_BASE (0) + #define DUMP_LEVEL (1) + #define DISKDUMP_HEADER_BLOCKS (1) ++#define BUFSIZE_BITMAP (TARGET_PAGE_SIZE) ++#define PFN_BUFBITMAP (CHAR_BIT * BUFSIZE_BITMAP) + + typedef struct ArchDumpInfo { + int d_machine; /* Architecture */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-API-to-write-elf-notes-to-buffer.patch b/SOURCES/kvm-dump-add-API-to-write-elf-notes-to-buffer.patch new file mode 100644 index 0000000..49233ee --- /dev/null +++ b/SOURCES/kvm-dump-add-API-to-write-elf-notes-to-buffer.patch @@ -0,0 +1,70 @@ +From 251ac1dcd456c524eb7b79507c4a8a1bf4a4fa32 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:54 +0100 +Subject: [PATCH 07/41] dump: add API to write elf notes to buffer + +Message-id: <1415380693-16593-8-git-send-email-lersek@redhat.com> +Patchwork-id: 62193 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 07/26] dump: add API to write elf notes to buffer +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +the function can be used by write_elf32_notes/write_elf64_notes to write notes +to a buffer. If fd_write_vmcore is used, write_elf32_notes/write_elf64_notes +will write elf notes to vmcore directly. Instead, if buf_write_note is used, +elf notes will be written to opaque->note_buf at first. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 4835ef7784502c231f243c3133054850d23dd837) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/dump.c b/dump.c +index 710893f..3c6d526 100644 +--- a/dump.c ++++ b/dump.c +@@ -76,6 +76,9 @@ typedef struct DumpState { + int64_t begin; + int64_t length; + Error **errp; ++ ++ uint8_t *note_buf; /* buffer for notes */ ++ size_t note_buf_offset; /* the writing place in note_buf */ + } DumpState; + + static int dump_cleanup(DumpState *s) +@@ -755,6 +758,22 @@ static int write_buffer(int fd, off_t offset, const void *buf, size_t size) + return 0; + } + ++static int buf_write_note(const void *buf, size_t size, void *opaque) ++{ ++ DumpState *s = opaque; ++ ++ /* note_buf is not enough */ ++ if (s->note_buf_offset + size > s->note_size) { ++ return -1; ++ } ++ ++ memcpy(s->note_buf + s->note_buf_offset, buf, size); ++ ++ s->note_buf_offset += size; ++ ++ return 0; ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-API-to-write-header-of-flatten-format.patch b/SOURCES/kvm-dump-add-API-to-write-header-of-flatten-format.patch new file mode 100644 index 0000000..eb60eab --- /dev/null +++ b/SOURCES/kvm-dump-add-API-to-write-header-of-flatten-format.patch @@ -0,0 +1,141 @@ +From faa6207ac40f548cb7f033e07717e98c9bfb1249 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:52 +0100 +Subject: [PATCH 05/41] dump: add API to write header of flatten format + +Message-id: <1415380693-16593-6-git-send-email-lersek@redhat.com> +Patchwork-id: 62191 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 05/26] dump: add API to write header of flatten format +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +flatten format will be used when writing kdump-compressed format. The format is +also used by makedumpfile, you can refer to the following URL to get more +detailed information about flatten format of kdump-compressed format: +http://sourceforge.net/projects/makedumpfile/ + +The two functions here are used to write start flat header and end flat header +to vmcore, and they will be called later when flatten format is used. + +struct MakedumpfileHeader stored at the head of vmcore is used to indicate the +vmcore is in flatten format. + +struct MakedumpfileHeader { + char signature[16]; /* = "makedumpfile" */ + int64_t type; /* = 1 */ + int64_t version; /* = 1 */ +}; + +And struct MakedumpfileDataHeader, with offset and buf_size set to -1, is used +to indicate the end of vmcore in flatten format. + +struct MakedumpfileDataHeader { + int64_t offset; /* = -1 */ + int64_t buf_size; /* = -1 */ +}; + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit fda053875e69120b2fde5fb34975ef5a49290f12) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 17 +++++++++++++++++ + 2 files changed, 59 insertions(+) + +diff --git a/dump.c b/dump.c +index fed8bd6..6c902e5 100644 +--- a/dump.c ++++ b/dump.c +@@ -692,6 +692,48 @@ static int create_vmcore(DumpState *s) + return 0; + } + ++static int write_start_flat_header(int fd) ++{ ++ uint8_t *buf; ++ MakedumpfileHeader mh; ++ int ret = 0; ++ ++ memset(&mh, 0, sizeof(mh)); ++ strncpy(mh.signature, MAKEDUMPFILE_SIGNATURE, ++ strlen(MAKEDUMPFILE_SIGNATURE)); ++ ++ mh.type = cpu_to_be64(TYPE_FLAT_HEADER); ++ mh.version = cpu_to_be64(VERSION_FLAT_HEADER); ++ ++ buf = g_malloc0(MAX_SIZE_MDF_HEADER); ++ memcpy(buf, &mh, sizeof(mh)); ++ ++ size_t written_size; ++ written_size = qemu_write_full(fd, buf, MAX_SIZE_MDF_HEADER); ++ if (written_size != MAX_SIZE_MDF_HEADER) { ++ ret = -1; ++ } ++ ++ g_free(buf); ++ return ret; ++} ++ ++static int write_end_flat_header(int fd) ++{ ++ MakedumpfileDataHeader mdh; ++ ++ mdh.offset = END_FLAG_FLAT_HEADER; ++ mdh.buf_size = END_FLAG_FLAT_HEADER; ++ ++ size_t written_size; ++ written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); ++ if (written_size != sizeof(mdh)) { ++ return -1; ++ } ++ ++ return 0; ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 19fafb2..b32b390 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -14,12 +14,29 @@ + #ifndef DUMP_H + #define DUMP_H + ++#define MAKEDUMPFILE_SIGNATURE "makedumpfile" ++#define MAX_SIZE_MDF_HEADER (4096) /* max size of makedumpfile_header */ ++#define TYPE_FLAT_HEADER (1) /* type of flattened format */ ++#define VERSION_FLAT_HEADER (1) /* version of flattened format */ ++#define END_FLAG_FLAT_HEADER (-1) ++ + typedef struct ArchDumpInfo { + int d_machine; /* Architecture */ + int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ + int d_class; /* ELFCLASS32 or ELFCLASS64 */ + } ArchDumpInfo; + ++typedef struct QEMU_PACKED MakedumpfileHeader { ++ char signature[16]; /* = "makedumpfile" */ ++ int64_t type; ++ int64_t version; ++} MakedumpfileHeader; ++ ++typedef struct QEMU_PACKED MakedumpfileDataHeader { ++ int64_t offset; ++ int64_t buf_size; ++} MakedumpfileDataHeader; ++ + struct GuestPhysBlockList; /* memory_mapping.h */ + int cpu_get_dump_info(ArchDumpInfo *info, + const struct GuestPhysBlockList *guest_phys_blocks); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-API-to-write-vmcore.patch b/SOURCES/kvm-dump-add-API-to-write-vmcore.patch new file mode 100644 index 0000000..177680d --- /dev/null +++ b/SOURCES/kvm-dump-add-API-to-write-vmcore.patch @@ -0,0 +1,70 @@ +From f1155542d2e8ce5192a4001b1156b9d3bff4a398 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:53 +0100 +Subject: [PATCH 06/41] dump: add API to write vmcore + +Message-id: <1415380693-16593-7-git-send-email-lersek@redhat.com> +Patchwork-id: 62192 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 06/26] dump: add API to write vmcore +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +Function is used to write vmcore in flatten format. In flatten format, data is +written block by block, and in front of each block, a struct +MakedumpfileDataHeader is stored there to indicate the offset and size of the +data block. + +struct MakedumpfileDataHeader { + int64_t offset; + int64_t buf_size; +}; + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 5d31babe5c7d854d6b8470bc9fa67a698926e65d) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/dump.c b/dump.c +index 6c902e5..710893f 100644 +--- a/dump.c ++++ b/dump.c +@@ -734,6 +734,27 @@ static int write_end_flat_header(int fd) + return 0; + } + ++static int write_buffer(int fd, off_t offset, const void *buf, size_t size) ++{ ++ size_t written_size; ++ MakedumpfileDataHeader mdh; ++ ++ mdh.offset = cpu_to_be64(offset); ++ mdh.buf_size = cpu_to_be64(size); ++ ++ written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); ++ if (written_size != sizeof(mdh)) { ++ return -1; ++ } ++ ++ written_size = qemu_write_full(fd, buf, size); ++ if (written_size != size) { ++ return -1; ++ } ++ ++ return 0; ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-APIs-to-operate-DataCache.patch b/SOURCES/kvm-dump-add-APIs-to-operate-DataCache.patch new file mode 100644 index 0000000..299f37f --- /dev/null +++ b/SOURCES/kvm-dump-add-APIs-to-operate-DataCache.patch @@ -0,0 +1,118 @@ +From 33af2fc0d1fd87e26c9ed15a3ce07a61cbbaa490 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:00 +0100 +Subject: [PATCH 13/41] dump: add APIs to operate DataCache + +Message-id: <1415380693-16593-14-git-send-email-lersek@redhat.com> +Patchwork-id: 62199 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 13/26] dump: add APIs to operate DataCache +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +DataCache is used to store data temporarily, then the data will be written to +vmcore. These functions will be called later when writing data of page to +vmcore. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 64cfba6a47411092c941c8d17256fb5673cc8cbf) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 9 +++++++++ + 2 files changed, 56 insertions(+) + +diff --git a/dump.c b/dump.c +index f416093..926ab84 100644 +--- a/dump.c ++++ b/dump.c +@@ -1171,6 +1171,53 @@ out: + return ret; + } + ++static void prepare_data_cache(DataCache *data_cache, DumpState *s, ++ off_t offset) ++{ ++ data_cache->fd = s->fd; ++ data_cache->data_size = 0; ++ data_cache->buf_size = BUFSIZE_DATA_CACHE; ++ data_cache->buf = g_malloc0(BUFSIZE_DATA_CACHE); ++ data_cache->offset = offset; ++} ++ ++static int write_cache(DataCache *dc, const void *buf, size_t size, ++ bool flag_sync) ++{ ++ /* ++ * dc->buf_size should not be less than size, otherwise dc will never be ++ * enough ++ */ ++ assert(size <= dc->buf_size); ++ ++ /* ++ * if flag_sync is set, synchronize data in dc->buf into vmcore. ++ * otherwise check if the space is enough for caching data in buf, if not, ++ * write the data in dc->buf to dc->fd and reset dc->buf ++ */ ++ if ((!flag_sync && dc->data_size + size > dc->buf_size) || ++ (flag_sync && dc->data_size > 0)) { ++ if (write_buffer(dc->fd, dc->offset, dc->buf, dc->data_size) < 0) { ++ return -1; ++ } ++ ++ dc->offset += dc->data_size; ++ dc->data_size = 0; ++ } ++ ++ if (!flag_sync) { ++ memcpy(dc->buf + dc->data_size, buf, size); ++ dc->data_size += size; ++ } ++ ++ return 0; ++} ++ ++static void free_data_cache(DataCache *data_cache) ++{ ++ g_free(data_cache->buf); ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 6d4d0bc..92a95e4 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -41,6 +41,7 @@ + #define DISKDUMP_HEADER_BLOCKS (1) + #define BUFSIZE_BITMAP (TARGET_PAGE_SIZE) + #define PFN_BUFBITMAP (CHAR_BIT * BUFSIZE_BITMAP) ++#define BUFSIZE_DATA_CACHE (TARGET_PAGE_SIZE * 4) + + typedef struct ArchDumpInfo { + int d_machine; /* Architecture */ +@@ -142,6 +143,14 @@ typedef struct QEMU_PACKED KdumpSubHeader64 { + uint64_t max_mapnr_64; /* header_version 6 and later */ + } KdumpSubHeader64; + ++typedef struct DataCache { ++ int fd; /* fd of the file where to write the cached data */ ++ uint8_t *buf; /* buffer for cached data */ ++ size_t buf_size; /* size of the buf */ ++ size_t data_size; /* size of cached data in buf */ ++ off_t offset; /* offset of the file */ ++} DataCache; ++ + struct GuestPhysBlockList; /* memory_mapping.h */ + int cpu_get_dump_info(ArchDumpInfo *info, + const struct GuestPhysBlockList *guest_phys_blocks); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-argument-to-write_elfxx_notes.patch b/SOURCES/kvm-dump-add-argument-to-write_elfxx_notes.patch new file mode 100644 index 0000000..efb4741 --- /dev/null +++ b/SOURCES/kvm-dump-add-argument-to-write_elfxx_notes.patch @@ -0,0 +1,115 @@ +From 1f9d175ded89c7d1e3d3b76b32d107c565887e81 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:51 +0100 +Subject: [PATCH 04/41] dump: add argument to write_elfxx_notes + +Message-id: <1415380693-16593-5-git-send-email-lersek@redhat.com> +Patchwork-id: 62190 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 04/26] dump: add argument to write_elfxx_notes +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +write_elf32_notes/wirte_elf64_notes use fd_write_vmcore to write elf notes to +vmcore. Adding parameter "WriteCoreDumpFunction f" makes it available to choose +the method of writing elf notes + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 6a519918b3f666759e20bcd0bb88378f3e4ffb57) +Signed-off-by: Miroslav Rezanina + +Conflicts: + dump.c + +Conflicts are due to our not having upstream commit 182735ef ("cpu: Make +first_cpu and next_cpu CPUState"). + +Signed-off-by: Laszlo Ersek +--- + dump.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/dump.c b/dump.c +index aa56aba..fed8bd6 100644 +--- a/dump.c ++++ b/dump.c +@@ -271,7 +271,7 @@ static inline int cpu_index(CPUState *cpu) + return cpu->cpu_index + 1; + } + +-static int write_elf64_notes(DumpState *s) ++static int write_elf64_notes(WriteCoreDumpFunction f, DumpState *s) + { + CPUArchState *env; + CPUState *cpu; +@@ -281,7 +281,7 @@ static int write_elf64_notes(DumpState *s) + for (env = first_cpu; env != NULL; env = env->next_cpu) { + cpu = ENV_GET_CPU(env); + id = cpu_index(cpu); +- ret = cpu_write_elf64_note(fd_write_vmcore, cpu, id, s); ++ ret = cpu_write_elf64_note(f, cpu, id, s); + if (ret < 0) { + dump_error(s, "dump: failed to write elf notes.\n"); + return -1; +@@ -290,7 +290,7 @@ static int write_elf64_notes(DumpState *s) + + for (env = first_cpu; env != NULL; env = env->next_cpu) { + cpu = ENV_GET_CPU(env); +- ret = cpu_write_elf64_qemunote(fd_write_vmcore, cpu, s); ++ ret = cpu_write_elf64_qemunote(f, cpu, s); + if (ret < 0) { + dump_error(s, "dump: failed to write CPU status.\n"); + return -1; +@@ -324,7 +324,7 @@ static int write_elf32_note(DumpState *s) + return 0; + } + +-static int write_elf32_notes(DumpState *s) ++static int write_elf32_notes(WriteCoreDumpFunction f, DumpState *s) + { + CPUArchState *env; + CPUState *cpu; +@@ -334,7 +334,7 @@ static int write_elf32_notes(DumpState *s) + for (env = first_cpu; env != NULL; env = env->next_cpu) { + cpu = ENV_GET_CPU(env); + id = cpu_index(cpu); +- ret = cpu_write_elf32_note(fd_write_vmcore, cpu, id, s); ++ ret = cpu_write_elf32_note(f, cpu, id, s); + if (ret < 0) { + dump_error(s, "dump: failed to write elf notes.\n"); + return -1; +@@ -343,7 +343,7 @@ static int write_elf32_notes(DumpState *s) + + for (env = first_cpu; env != NULL; env = env->next_cpu) { + cpu = ENV_GET_CPU(env); +- ret = cpu_write_elf32_qemunote(fd_write_vmcore, cpu, s); ++ ret = cpu_write_elf32_qemunote(f, cpu, s); + if (ret < 0) { + dump_error(s, "dump: failed to write CPU status.\n"); + return -1; +@@ -580,7 +580,7 @@ static int dump_begin(DumpState *s) + } + + /* write notes to vmcore */ +- if (write_elf64_notes(s) < 0) { ++ if (write_elf64_notes(fd_write_vmcore, s) < 0) { + return -1; + } + +@@ -603,7 +603,7 @@ static int dump_begin(DumpState *s) + } + + /* write notes to vmcore */ +- if (write_elf32_notes(s) < 0) { ++ if (write_elf32_notes(fd_write_vmcore, s) < 0) { + return -1; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-guest-ELF-note.patch b/SOURCES/kvm-dump-add-guest-ELF-note.patch new file mode 100644 index 0000000..1a2f29e --- /dev/null +++ b/SOURCES/kvm-dump-add-guest-ELF-note.patch @@ -0,0 +1,226 @@ +From 693375003f594a1d19acd35df19141b92a5c8822 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:01 +0100 +Subject: [PATCH 30/41] dump: add guest ELF note +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-31-marcandre.lureau@redhat.com> +Patchwork-id: 78377 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 30/41] dump: add guest ELF note +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +Read the guest ELF PT_NOTE from guest memory when fw_cfg +etc/vmcoreinfo entry provides the location, and write it as an +additional note in the dump. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit 903ef7349699dcd932b5981b85c1f1ebe4a4bf2a) + +RHEL: Minor conflicts due to "detach" mode not being backported. + Replace warn_report() with error_report(). + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++ + include/sysemu/dump.h | 2 + + 2 files changed, 108 insertions(+) + +diff --git a/dump.c b/dump.c +index d629c8d..823d1ad 100644 +--- a/dump.c ++++ b/dump.c +@@ -24,6 +24,7 @@ + #include "sysemu/cpus.h" + #include "qapi/error.h" + #include "qmp-commands.h" ++#include "hw/misc/vmcoreinfo.h" + + #include + #ifdef CONFIG_LZO +@@ -36,6 +37,13 @@ + #define ELF_MACHINE_UNAME "Unknown" + #endif + ++#define MAX_GUEST_NOTE_SIZE (1 << 20) /* 1MB should be enough */ ++ ++#define ELF_NOTE_SIZE(hdr_size, name_size, desc_size) \ ++ ((DIV_ROUND_UP((hdr_size), 4) + \ ++ DIV_ROUND_UP((name_size), 4) + \ ++ DIV_ROUND_UP((desc_size), 4)) * 4) ++ + uint16_t cpu_to_dump16(DumpState *s, uint16_t val) + { + if (s->dump_info.d_endian == ELFDATA2LSB) { +@@ -74,6 +82,8 @@ static int dump_cleanup(DumpState *s) + guest_phys_blocks_free(&s->guest_phys_blocks); + memory_mapping_list_free(&s->list); + close(s->fd); ++ g_free(s->guest_note); ++ s->guest_note = NULL; + if (s->resume) { + vm_start(); + } +@@ -227,6 +237,19 @@ static inline int cpu_index(CPUState *cpu) + return cpu->cpu_index + 1; + } + ++static void write_guest_note(WriteCoreDumpFunction f, DumpState *s, ++ Error **errp) ++{ ++ int ret; ++ ++ if (s->guest_note) { ++ ret = f(s->guest_note, s->guest_note_size, s); ++ if (ret < 0) { ++ error_setg(errp, "dump: failed to write guest note"); ++ } ++ } ++} ++ + static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, + Error **errp) + { +@@ -253,6 +276,8 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, + return; + } + } ++ ++ write_guest_note(f, s, errp); + } + + static void write_elf32_note(DumpState *s, Error **errp) +@@ -301,6 +326,8 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, + return; + } + } ++ ++ write_guest_note(f, s, errp); + } + + static void write_elf_section(DumpState *s, int type, Error **errp) +@@ -712,6 +739,44 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) + return 0; + } + ++/* ++ * This function retrieves various sizes from an elf header. ++ * ++ * @note has to be a valid ELF note. The return sizes are unmodified ++ * (not padded or rounded up to be multiple of 4). ++ */ ++static void get_note_sizes(DumpState *s, const void *note, ++ uint64_t *note_head_size, ++ uint64_t *name_size, ++ uint64_t *desc_size) ++{ ++ uint64_t note_head_sz; ++ uint64_t name_sz; ++ uint64_t desc_sz; ++ ++ if (s->dump_info.d_class == ELFCLASS64) { ++ const Elf64_Nhdr *hdr = note; ++ note_head_sz = sizeof(Elf64_Nhdr); ++ name_sz = tswap64(hdr->n_namesz); ++ desc_sz = tswap64(hdr->n_descsz); ++ } else { ++ const Elf32_Nhdr *hdr = note; ++ note_head_sz = sizeof(Elf32_Nhdr); ++ name_sz = tswap32(hdr->n_namesz); ++ desc_sz = tswap32(hdr->n_descsz); ++ } ++ ++ if (note_head_size) { ++ *note_head_size = note_head_sz; ++ } ++ if (name_size) { ++ *name_size = name_sz; ++ } ++ if (desc_size) { ++ *desc_size = desc_sz; ++ } ++} ++ + /* write common header, sub header and elf note to vmcore */ + static void create_header32(DumpState *s, Error **errp) + { +@@ -1493,6 +1558,7 @@ static void dump_init(DumpState *s, int fd, bool has_format, + int64_t begin, int64_t length, Error **errp) + { + CPUArchState *env; ++ VMCoreInfoState *vmci = vmcoreinfo_find(); + int nr_cpus; + Error *err = NULL; + int ret; +@@ -1569,6 +1635,46 @@ static void dump_init(DumpState *s, int fd, bool has_format, + goto cleanup; + } + ++ /* ++ * The goal of this block is to copy the guest note out of ++ * the guest. Failure to do so is not fatal for dumping. ++ */ ++ if (vmci) { ++ uint64_t addr, note_head_size, name_size, desc_size; ++ uint32_t size; ++ uint16_t format; ++ ++ note_head_size = s->dump_info.d_class == ELFCLASS32 ? ++ sizeof(Elf32_Nhdr) : sizeof(Elf64_Nhdr); ++ ++ format = le16_to_cpu(vmci->vmcoreinfo.guest_format); ++ size = le32_to_cpu(vmci->vmcoreinfo.size); ++ addr = le64_to_cpu(vmci->vmcoreinfo.paddr); ++ if (!vmci->has_vmcoreinfo) { ++ error_report("guest note is not present"); ++ } else if (size < note_head_size || size > MAX_GUEST_NOTE_SIZE) { ++ error_report("guest note size is invalid: %" PRIu32, size); ++ } else if (format != VMCOREINFO_FORMAT_ELF) { ++ error_report("guest note format is unsupported: %" PRIu16, format); ++ } else { ++ s->guest_note = g_malloc(size + 1); /* +1 for adding \0 */ ++ cpu_physical_memory_read(addr, s->guest_note, size); ++ ++ get_note_sizes(s, s->guest_note, NULL, &name_size, &desc_size); ++ s->guest_note_size = ELF_NOTE_SIZE(note_head_size, name_size, ++ desc_size); ++ if (name_size > MAX_GUEST_NOTE_SIZE || ++ desc_size > MAX_GUEST_NOTE_SIZE || ++ s->guest_note_size > size) { ++ error_report("Invalid guest note header"); ++ g_free(s->guest_note); ++ s->guest_note = NULL; ++ } else { ++ s->note_size += s->guest_note_size; ++ } ++ } ++ } ++ + /* get memory mapping */ + if (paging) { + qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, &err); +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index b5ebb0a..343dad4 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -189,6 +189,8 @@ typedef struct DumpState { + * this could be used to calculate + * how much work we have + * finished. */ ++ uint8_t *guest_note; /* ELF note content */ ++ size_t guest_note_size; + } DumpState; + + uint16_t cpu_to_dump16(DumpState *s, uint16_t val); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-members-to-DumpState-and-init-some-of-them.patch b/SOURCES/kvm-dump-add-members-to-DumpState-and-init-some-of-them.patch new file mode 100644 index 0000000..3c266bf --- /dev/null +++ b/SOURCES/kvm-dump-add-members-to-DumpState-and-init-some-of-them.patch @@ -0,0 +1,104 @@ +From 1f333717698aecbd70732d4dac609db8eda895d5 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:57 +0100 +Subject: [PATCH 10/41] dump: add members to DumpState and init some of them + +Message-id: <1415380693-16593-11-git-send-email-lersek@redhat.com> +Patchwork-id: 62196 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 10/26] dump: add members to DumpState and init some of them +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +add some members to DumpState that will be used in writing vmcore in +kdump-compressed format. some of them, like page_size, will be initialized +in the patch. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 7aad248d3596a1fb94778f2cd215f86a802b3abb) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 28 ++++++++++++++++++++++++++++ + include/sysemu/dump.h | 7 +++++++ + 2 files changed, 35 insertions(+) + +diff --git a/dump.c b/dump.c +index 3c6d526..88e8cc0 100644 +--- a/dump.c ++++ b/dump.c +@@ -79,6 +79,16 @@ typedef struct DumpState { + + uint8_t *note_buf; /* buffer for notes */ + size_t note_buf_offset; /* the writing place in note_buf */ ++ uint32_t nr_cpus; /* number of guest's cpu */ ++ size_t page_size; /* guest's page size */ ++ uint32_t page_shift; /* guest's page shift */ ++ uint64_t max_mapnr; /* the biggest guest's phys-mem's number */ ++ size_t len_dump_bitmap; /* the size of the place used to store ++ dump_bitmap in vmcore */ ++ off_t offset_dump_bitmap; /* offset of dump_bitmap part in vmcore */ ++ off_t offset_page; /* offset of page part in vmcore */ ++ size_t num_dumpable; /* number of page that can be dumped */ ++ uint32_t flag_compress; /* indicate the compression format */ + } DumpState; + + static int dump_cleanup(DumpState *s) +@@ -802,6 +812,14 @@ static ram_addr_t get_start_block(DumpState *s) + return -1; + } + ++static void get_max_mapnr(DumpState *s) ++{ ++ GuestPhysBlock *last_block; ++ ++ last_block = QTAILQ_LAST(&s->guest_phys_blocks.head, GuestPhysBlockHead); ++ s->max_mapnr = paddr_to_pfn(last_block->target_end, s->page_shift); ++} ++ + static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + int64_t begin, int64_t length, Error **errp) + { +@@ -870,6 +888,16 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + qemu_get_guest_simple_memory_mapping(&s->list, &s->guest_phys_blocks); + } + ++ s->nr_cpus = nr_cpus; ++ s->page_size = TARGET_PAGE_SIZE; ++ s->page_shift = ffs(s->page_size) - 1; ++ ++ get_max_mapnr(s); ++ ++ uint64_t tmp; ++ tmp = DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), s->page_size); ++ s->len_dump_bitmap = tmp * s->page_size; ++ + if (s->has_filter) { + memory_mapping_filter(&s->list, s->begin, s->length); + } +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index b32b390..995bf47 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -20,6 +20,13 @@ + #define VERSION_FLAT_HEADER (1) /* version of flattened format */ + #define END_FLAG_FLAT_HEADER (-1) + ++#define ARCH_PFN_OFFSET (0) ++ ++#define paddr_to_pfn(X, page_shift) \ ++ (((unsigned long long)(X) >> (page_shift)) - ARCH_PFN_OFFSET) ++#define pfn_to_paddr(X, page_shift) \ ++ (((unsigned long long)(X) + ARCH_PFN_OFFSET) << (page_shift)) ++ + typedef struct ArchDumpInfo { + int d_machine; /* Architecture */ + int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-query-dump-guest-memory-capability-command.patch b/SOURCES/kvm-dump-add-query-dump-guest-memory-capability-command.patch new file mode 100644 index 0000000..7c198e1 --- /dev/null +++ b/SOURCES/kvm-dump-add-query-dump-guest-memory-capability-command.patch @@ -0,0 +1,144 @@ +From 1b2628fe2375d602a6f123a0aa4a5cd190e72d3e Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:05 +0100 +Subject: [PATCH 18/41] dump: add 'query-dump-guest-memory-capability' command + +Message-id: <1415380693-16593-19-git-send-email-lersek@redhat.com> +Patchwork-id: 62204 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 18/26] dump: add 'query-dump-guest-memory-capability' command +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +'query-dump-guest-memory-capability' is used to query the available formats for +'dump-guest-memory'. The output of the command will be like: + +-> { "execute": "query-dump-guest-memory-capability" } +<- { "return": { "formats": + ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] } + +Signed-off-by: Qiao Nuohan +Reviewed-by: Eric Blake +Signed-off-by: Luiz Capitulino +(cherry picked from commit 7d6dc7f30c4781857ce230333da6ddd21fe0dcde) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 33 +++++++++++++++++++++++++++++++++ + qapi-schema.json | 24 ++++++++++++++++++++++++ + qmp-commands.hx | 20 ++++++++++++++++++++ + 3 files changed, 77 insertions(+) + +diff --git a/dump.c b/dump.c +index 507a250..25bf8e6 100644 +--- a/dump.c ++++ b/dump.c +@@ -1797,3 +1797,36 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + + g_free(s); + } ++ ++DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp) ++{ ++ DumpGuestMemoryFormatList *item; ++ DumpGuestMemoryCapability *cap = ++ g_malloc0(sizeof(DumpGuestMemoryCapability)); ++ ++ /* elf is always available */ ++ item = g_malloc0(sizeof(DumpGuestMemoryFormatList)); ++ cap->formats = item; ++ item->value = DUMP_GUEST_MEMORY_FORMAT_ELF; ++ ++ /* kdump-zlib is always available */ ++ item->next = g_malloc0(sizeof(DumpGuestMemoryFormatList)); ++ item = item->next; ++ item->value = DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB; ++ ++ /* add new item if kdump-lzo is available */ ++#ifdef CONFIG_LZO ++ item->next = g_malloc0(sizeof(DumpGuestMemoryFormatList)); ++ item = item->next; ++ item->value = DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO; ++#endif ++ ++ /* add new item if kdump-snappy is available */ ++#ifdef CONFIG_SNAPPY ++ item->next = g_malloc0(sizeof(DumpGuestMemoryFormatList)); ++ item = item->next; ++ item->value = DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY; ++#endif ++ ++ return cap; ++} +diff --git a/qapi-schema.json b/qapi-schema.json +index 8f81c76..31ac5c5 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -2645,6 +2645,30 @@ + '*length': 'int', '*format': 'DumpGuestMemoryFormat' } } + + ## ++# @DumpGuestMemoryCapability: ++# ++# A list of the available formats for dump-guest-memory ++# ++# Since: 2.0 ++## ++{ 'type': 'DumpGuestMemoryCapability', ++ 'data': { ++ 'formats': ['DumpGuestMemoryFormat'] } } ++ ++## ++# @query-dump-guest-memory-capability: ++# ++# Returns the available formats for dump-guest-memory ++# ++# Returns: A @DumpGuestMemoryCapability object listing available formats for ++# dump-guest-memory ++# ++# Since: 2.0 ++## ++{ 'command': 'query-dump-guest-memory-capability', ++ 'returns': 'DumpGuestMemoryCapability' } ++ ++## + # @netdev_add: + # + # Add a network backend. +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 61aa3bf..9c11213 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -923,6 +923,26 @@ Notes: + EQMP + + { ++ .name = "query-dump-guest-memory-capability", ++ .args_type = "", ++ .mhandler.cmd_new = qmp_marshal_input_query_dump_guest_memory_capability, ++ }, ++ ++SQMP ++query-dump-guest-memory-capability ++---------- ++ ++Show available formats for 'dump-guest-memory' ++ ++Example: ++ ++-> { "execute": "query-dump-guest-memory-capability" } ++<- { "return": { "formats": ++ ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] } ++ ++EQMP ++ ++ { + .name = "netdev_add", + .args_type = "netdev:O", + .mhandler.cmd_new = qmp_netdev_add, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-add-support-for-lzo-snappy.patch b/SOURCES/kvm-dump-add-support-for-lzo-snappy.patch new file mode 100644 index 0000000..a108f37 --- /dev/null +++ b/SOURCES/kvm-dump-add-support-for-lzo-snappy.patch @@ -0,0 +1,137 @@ +From 018133d4217c5aebaa09a43b341b0765075f4254 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:55 +0100 +Subject: [PATCH 08/41] dump: add support for lzo/snappy + +Message-id: <1415380693-16593-9-git-send-email-lersek@redhat.com> +Patchwork-id: 62194 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 08/26] dump: add support for lzo/snappy +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +kdump-compressed format supports three compression format, zlib/lzo/snappy. +Currently, only zlib is available. This patch is used to support lzo/snappy. +'--enable-lzo/--enable-snappy' is needed to be specified with configure to make +lzo/snappy available for qemu + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 607dacd0a082a4ea73a7a16a1c70406f37ebacdb) +Signed-off-by: Miroslav Rezanina + +Conflicts: + configure + +Signed-off-by: Laszlo Ersek +--- + configure | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 54 insertions(+) + +diff --git a/configure b/configure +index fb0c839..5373237 100755 +--- a/configure ++++ b/configure +@@ -232,6 +232,8 @@ libusb="" + usb_redir="" + glx="" + zlib="yes" ++lzo="no" ++snappy="no" + guest_agent="yes" + want_tools="yes" + libiscsi="" +@@ -909,6 +911,10 @@ for opt do + ;; + --disable-zlib-test) zlib="no" + ;; ++ --enable-lzo) lzo="yes" ++ ;; ++ --enable-snappy) snappy="yes" ++ ;; + --enable-guest-agent) guest_agent="yes" + ;; + --disable-guest-agent) guest_agent="no" +@@ -1220,6 +1226,8 @@ echo " --disable-libusb disable libusb (for usb passthrough)" + echo " --enable-libusb enable libusb (for usb passthrough)" + echo " --disable-usb-redir disable usb network redirection support" + echo " --enable-usb-redir enable usb network redirection support" ++echo " --enable-lzo enable the support of lzo compression library" ++echo " --enable-snappy enable the support of snappy compression library" + echo " --disable-guest-agent disable building of the QEMU Guest Agent" + echo " --enable-guest-agent enable building of the QEMU Guest Agent" + echo " --disable-seccomp disable seccomp support" +@@ -1554,6 +1562,42 @@ fi + libs_softmmu="$libs_softmmu -lz" + + ########################################## ++# lzo check ++ ++if test "$lzo" != "no" ; then ++ cat > $TMPC << EOF ++#include ++int main(void) { lzo_version(); return 0; } ++EOF ++ if compile_prog "" "-llzo2" ; then ++ : ++ else ++ error_exit "lzo check failed" \ ++ "Make sure to have the lzo libs and headers installed." ++ fi ++ ++ libs_softmmu="$libs_softmmu -llzo2" ++fi ++ ++########################################## ++# snappy check ++ ++if test "$snappy" != "no" ; then ++ cat > $TMPC << EOF ++#include ++int main(void) { snappy_max_compressed_length(4096); return 0; } ++EOF ++ if compile_prog "" "-lsnappy" ; then ++ : ++ else ++ error_exit "snappy check failed" \ ++ "Make sure to have the snappy libs and headers installed." ++ fi ++ ++ libs_softmmu="$libs_softmmu -lsnappy" ++fi ++ ++########################################## + # libseccomp check + + if test "$seccomp" != "no" ; then +@@ -3648,6 +3692,8 @@ echo "QOM debugging $qom_cast_debug" + echo "Live block operations $live_block_ops" + echo "Live block migration $live_block_migration" + echo "vhdx $vhdx" ++echo "lzo support $lzo" ++echo "snappy support $snappy" + + if test "$sdl_too_old" = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" +@@ -3965,6 +4011,14 @@ if test "$glx" = "yes" ; then + echo "GLX_LIBS=$glx_libs" >> $config_host_mak + fi + ++if test "$lzo" = "yes" ; then ++ echo "CONFIG_LZO=y" >> $config_host_mak ++fi ++ ++if test "$snappy" = "yes" ; then ++ echo "CONFIG_SNAPPY=y" >> $config_host_mak ++fi ++ + if test "$libiscsi" = "yes" ; then + echo "CONFIG_LIBISCSI=y" >> $config_host_mak + echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-allow-target-to-set-the-page-size.patch b/SOURCES/kvm-dump-allow-target-to-set-the-page-size.patch new file mode 100644 index 0000000..badf89f --- /dev/null +++ b/SOURCES/kvm-dump-allow-target-to-set-the-page-size.patch @@ -0,0 +1,434 @@ +From 4e6b46284cde10374bd0660e89958fe9c2477887 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:52 +0100 +Subject: [PATCH 21/41] dump: allow target to set the page size +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-22-marcandre.lureau@redhat.com> +Patchwork-id: 78370 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 21/41] dump: allow target to set the page size +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Andrew Jones + +This is necessary for targets that don't have TARGET_PAGE_SIZE == +real-target-page-size. The target should set the page size to the +correct one, if known, or, if not known, to the maximum page size +it supports. + +(No functional change.) + +Signed-off-by: Andrew Jones +Reviewed-by: Peter Maydell +Message-id: 1452542185-10914-4-git-send-email-drjones@redhat.com +Signed-off-by: Peter Maydell + +(cherry picked from commit 8161befdd15ddc5a8bb9e807ff1ac5907c594688) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 127 ++++++++++++++++++++++++++++----------------- + include/sysemu/dump-arch.h | 8 +-- + include/sysemu/dump.h | 10 +--- + 3 files changed, 85 insertions(+), 60 deletions(-) + +diff --git a/dump.c b/dump.c +index 83b6d20..b5d6608 100644 +--- a/dump.c ++++ b/dump.c +@@ -352,18 +352,18 @@ static void write_memory(DumpState *s, GuestPhysBlock *block, ram_addr_t start, + int64_t i; + Error *local_err = NULL; + +- for (i = 0; i < size / TARGET_PAGE_SIZE; i++) { +- write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, +- TARGET_PAGE_SIZE, &local_err); ++ for (i = 0; i < size / s->dump_info.page_size; i++) { ++ write_data(s, block->host_addr + start + i * s->dump_info.page_size, ++ s->dump_info.page_size, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + } + +- if ((size % TARGET_PAGE_SIZE) != 0) { +- write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, +- size % TARGET_PAGE_SIZE, &local_err); ++ if ((size % s->dump_info.page_size) != 0) { ++ write_data(s, block->host_addr + start + i * s->dump_info.page_size, ++ size % s->dump_info.page_size, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; +@@ -742,7 +742,7 @@ static void create_header32(DumpState *s, Error **errp) + + strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); + dh->header_version = cpu_to_dump32(s, 6); +- block_size = TARGET_PAGE_SIZE; ++ block_size = s->dump_info.page_size; + dh->block_size = cpu_to_dump32(s, block_size); + sub_hdr_size = sizeof(struct KdumpSubHeader32) + s->note_size; + sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); +@@ -842,7 +842,7 @@ static void create_header64(DumpState *s, Error **errp) + + strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); + dh->header_version = cpu_to_dump32(s, 6); +- block_size = TARGET_PAGE_SIZE; ++ block_size = s->dump_info.page_size; + dh->block_size = cpu_to_dump32(s, block_size); + sub_hdr_size = sizeof(struct KdumpSubHeader64) + s->note_size; + sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); +@@ -938,6 +938,11 @@ static void write_dump_header(DumpState *s, Error **errp) + } + } + ++static size_t dump_bitmap_get_bufsize(DumpState *s) ++{ ++ return s->dump_info.page_size; ++} ++ + /* + * set dump_bitmap sequencely. the bit before last_pfn is not allowed to be + * rewritten, so if need to set the first bit, set last_pfn and pfn to 0. +@@ -951,6 +956,8 @@ static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, + off_t old_offset, new_offset; + off_t offset_bitmap1, offset_bitmap2; + uint32_t byte, bit; ++ size_t bitmap_bufsize = dump_bitmap_get_bufsize(s); ++ size_t bits_per_buf = bitmap_bufsize * CHAR_BIT; + + /* should not set the previous place */ + assert(last_pfn <= pfn); +@@ -961,14 +968,14 @@ static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, + * making new_offset be bigger than old_offset can also sync remained data + * into vmcore. + */ +- old_offset = BUFSIZE_BITMAP * (last_pfn / PFN_BUFBITMAP); +- new_offset = BUFSIZE_BITMAP * (pfn / PFN_BUFBITMAP); ++ old_offset = bitmap_bufsize * (last_pfn / bits_per_buf); ++ new_offset = bitmap_bufsize * (pfn / bits_per_buf); + + while (old_offset < new_offset) { + /* calculate the offset and write dump_bitmap */ + offset_bitmap1 = s->offset_dump_bitmap + old_offset; + if (write_buffer(s->fd, offset_bitmap1, buf, +- BUFSIZE_BITMAP) < 0) { ++ bitmap_bufsize) < 0) { + return -1; + } + +@@ -976,17 +983,17 @@ static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, + offset_bitmap2 = s->offset_dump_bitmap + s->len_dump_bitmap + + old_offset; + if (write_buffer(s->fd, offset_bitmap2, buf, +- BUFSIZE_BITMAP) < 0) { ++ bitmap_bufsize) < 0) { + return -1; + } + +- memset(buf, 0, BUFSIZE_BITMAP); +- old_offset += BUFSIZE_BITMAP; ++ memset(buf, 0, bitmap_bufsize); ++ old_offset += bitmap_bufsize; + } + + /* get the exact place of the bit in the buf, and set it */ +- byte = (pfn % PFN_BUFBITMAP) / CHAR_BIT; +- bit = (pfn % PFN_BUFBITMAP) % CHAR_BIT; ++ byte = (pfn % bits_per_buf) / CHAR_BIT; ++ bit = (pfn % bits_per_buf) % CHAR_BIT; + if (value) { + buf[byte] |= 1u << bit; + } else { +@@ -996,6 +1003,20 @@ static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, + return 0; + } + ++static uint64_t dump_paddr_to_pfn(DumpState *s, uint64_t addr) ++{ ++ int target_page_shift = ctz32(s->dump_info.page_size); ++ ++ return (addr >> target_page_shift) - ARCH_PFN_OFFSET; ++} ++ ++static uint64_t dump_pfn_to_paddr(DumpState *s, uint64_t pfn) ++{ ++ int target_page_shift = ctz32(s->dump_info.page_size); ++ ++ return (pfn + ARCH_PFN_OFFSET) << target_page_shift; ++} ++ + /* + * exam every page and return the page frame number and the address of the page. + * bufptr can be NULL. note: the blocks here is supposed to reflect guest-phys +@@ -1006,16 +1027,16 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + uint8_t **bufptr, DumpState *s) + { + GuestPhysBlock *block = *blockptr; +- hwaddr addr; ++ hwaddr addr, target_page_mask = ~((hwaddr)s->dump_info.page_size - 1); + uint8_t *buf; + + /* block == NULL means the start of the iteration */ + if (!block) { + block = QTAILQ_FIRST(&s->guest_phys_blocks.head); + *blockptr = block; +- assert((block->target_start & ~TARGET_PAGE_MASK) == 0); +- assert((block->target_end & ~TARGET_PAGE_MASK) == 0); +- *pfnptr = paddr_to_pfn(block->target_start); ++ assert((block->target_start & ~target_page_mask) == 0); ++ assert((block->target_end & ~target_page_mask) == 0); ++ *pfnptr = dump_paddr_to_pfn(s, block->target_start); + if (bufptr) { + *bufptr = block->host_addr; + } +@@ -1023,10 +1044,10 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + } + + *pfnptr = *pfnptr + 1; +- addr = pfn_to_paddr(*pfnptr); ++ addr = dump_pfn_to_paddr(s, *pfnptr); + + if ((addr >= block->target_start) && +- (addr + TARGET_PAGE_SIZE <= block->target_end)) { ++ (addr + s->dump_info.page_size <= block->target_end)) { + buf = block->host_addr + (addr - block->target_start); + } else { + /* the next page is in the next block */ +@@ -1035,9 +1056,9 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + if (!block) { + return false; + } +- assert((block->target_start & ~TARGET_PAGE_MASK) == 0); +- assert((block->target_end & ~TARGET_PAGE_MASK) == 0); +- *pfnptr = paddr_to_pfn(block->target_start); ++ assert((block->target_start & ~target_page_mask) == 0); ++ assert((block->target_end & ~target_page_mask) == 0); ++ *pfnptr = dump_paddr_to_pfn(s, block->target_start); + buf = block->host_addr; + } + +@@ -1055,9 +1076,11 @@ static void write_dump_bitmap(DumpState *s, Error **errp) + void *dump_bitmap_buf; + size_t num_dumpable; + GuestPhysBlock *block_iter = NULL; ++ size_t bitmap_bufsize = dump_bitmap_get_bufsize(s); ++ size_t bits_per_buf = bitmap_bufsize * CHAR_BIT; + + /* dump_bitmap_buf is used to store dump_bitmap temporarily */ +- dump_bitmap_buf = g_malloc0(BUFSIZE_BITMAP); ++ dump_bitmap_buf = g_malloc0(bitmap_bufsize); + + num_dumpable = 0; + last_pfn = 0; +@@ -1079,11 +1102,11 @@ static void write_dump_bitmap(DumpState *s, Error **errp) + + /* + * set_dump_bitmap will always leave the recently set bit un-sync. Here we +- * set last_pfn + PFN_BUFBITMAP to 0 and those set but un-sync bit will be +- * synchronized into vmcore. ++ * set the remaining bits from last_pfn to the end of the bitmap buffer to ++ * 0. With those set, the un-sync bit will be synchronized into the vmcore. + */ + if (num_dumpable > 0) { +- ret = set_dump_bitmap(last_pfn, last_pfn + PFN_BUFBITMAP, false, ++ ret = set_dump_bitmap(last_pfn, last_pfn + bits_per_buf, false, + dump_bitmap_buf, s); + if (ret < 0) { + dump_error(s, "dump: failed to sync dump_bitmap", errp); +@@ -1103,8 +1126,8 @@ static void prepare_data_cache(DataCache *data_cache, DumpState *s, + { + data_cache->fd = s->fd; + data_cache->data_size = 0; +- data_cache->buf_size = BUFSIZE_DATA_CACHE; +- data_cache->buf = g_malloc0(BUFSIZE_DATA_CACHE); ++ data_cache->buf_size = 4 * dump_bitmap_get_bufsize(s); ++ data_cache->buf = g_malloc0(data_cache->buf_size); + data_cache->offset = offset; + } + +@@ -1198,7 +1221,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + prepare_data_cache(&page_data, s, offset_data); + + /* prepare buffer to store compressed data */ +- len_buf_out = get_len_buf_out(TARGET_PAGE_SIZE, s->flag_compress); ++ len_buf_out = get_len_buf_out(s->dump_info.page_size, s->flag_compress); + assert(len_buf_out != 0); + + #ifdef CONFIG_LZO +@@ -1211,19 +1234,19 @@ static void write_dump_pages(DumpState *s, Error **errp) + * init zero page's page_desc and page_data, because every zero page + * uses the same page_data + */ +- pd_zero.size = cpu_to_dump32(s, TARGET_PAGE_SIZE); ++ pd_zero.size = cpu_to_dump32(s, s->dump_info.page_size); + pd_zero.flags = cpu_to_dump32(s, 0); + pd_zero.offset = cpu_to_dump64(s, offset_data); + pd_zero.page_flags = cpu_to_dump64(s, 0); +- buf = g_malloc0(TARGET_PAGE_SIZE); +- ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); ++ buf = g_malloc0(s->dump_info.page_size); ++ ret = write_cache(&page_data, buf, s->dump_info.page_size, false); + g_free(buf); + if (ret < 0) { + dump_error(s, "dump: failed to write page data (zero page)", errp); + goto out; + } + +- offset_data += TARGET_PAGE_SIZE; ++ offset_data += s->dump_info.page_size; + + /* + * dump memory to vmcore page by page. zero page will all be resided in the +@@ -1231,7 +1254,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + */ + while (get_next_page(&block_iter, &pfn_iter, &buf, s)) { + /* check zero page */ +- if (is_zero_page(buf, TARGET_PAGE_SIZE)) { ++ if (is_zero_page(buf, s->dump_info.page_size)) { + ret = write_cache(&page_desc, &pd_zero, sizeof(PageDescriptor), + false); + if (ret < 0) { +@@ -1253,8 +1276,8 @@ static void write_dump_pages(DumpState *s, Error **errp) + size_out = len_buf_out; + if ((s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) && + (compress2(buf_out, (uLongf *)&size_out, buf, +- TARGET_PAGE_SIZE, Z_BEST_SPEED) == Z_OK) && +- (size_out < TARGET_PAGE_SIZE)) { ++ s->dump_info.page_size, Z_BEST_SPEED) == Z_OK) && ++ (size_out < s->dump_info.page_size)) { + pd.flags = cpu_to_dump32(s, DUMP_DH_COMPRESSED_ZLIB); + pd.size = cpu_to_dump32(s, size_out); + +@@ -1265,9 +1288,9 @@ static void write_dump_pages(DumpState *s, Error **errp) + } + #ifdef CONFIG_LZO + } else if ((s->flag_compress & DUMP_DH_COMPRESSED_LZO) && +- (lzo1x_1_compress(buf, TARGET_PAGE_SIZE, buf_out, ++ (lzo1x_1_compress(buf, s->dump_info.page_size, buf_out, + (lzo_uint *)&size_out, wrkmem) == LZO_E_OK) && +- (size_out < TARGET_PAGE_SIZE)) { ++ (size_out < s->dump_info.page_size)) { + pd.flags = cpu_to_dump32(s, DUMP_DH_COMPRESSED_LZO); + pd.size = cpu_to_dump32(s, size_out); + +@@ -1279,9 +1302,9 @@ static void write_dump_pages(DumpState *s, Error **errp) + #endif + #ifdef CONFIG_SNAPPY + } else if ((s->flag_compress & DUMP_DH_COMPRESSED_SNAPPY) && +- (snappy_compress((char *)buf, TARGET_PAGE_SIZE, ++ (snappy_compress((char *)buf, s->dump_info.page_size, + (char *)buf_out, &size_out) == SNAPPY_OK) && +- (size_out < TARGET_PAGE_SIZE)) { ++ (size_out < s->dump_info.page_size)) { + pd.flags = cpu_to_dump32(s, DUMP_DH_COMPRESSED_SNAPPY); + pd.size = cpu_to_dump32(s, size_out); + +@@ -1294,13 +1317,14 @@ static void write_dump_pages(DumpState *s, Error **errp) + } else { + /* + * fall back to save in plaintext, size_out should be +- * assigned TARGET_PAGE_SIZE ++ * assigned the target's page size + */ + pd.flags = cpu_to_dump32(s, 0); +- size_out = TARGET_PAGE_SIZE; ++ size_out = s->dump_info.page_size; + pd.size = cpu_to_dump32(s, size_out); + +- ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); ++ ret = write_cache(&page_data, buf, ++ s->dump_info.page_size, false); + if (ret < 0) { + dump_error(s, "dump: failed to write page data", errp); + goto out; +@@ -1435,7 +1459,7 @@ static void get_max_mapnr(DumpState *s) + GuestPhysBlock *last_block; + + last_block = QTAILQ_LAST(&s->guest_phys_blocks.head, GuestPhysBlockHead); +- s->max_mapnr = paddr_to_pfn(last_block->target_end); ++ s->max_mapnr = dump_paddr_to_pfn(s, last_block->target_end); + } + + static void dump_init(DumpState *s, int fd, bool has_format, +@@ -1494,6 +1518,10 @@ static void dump_init(DumpState *s, int fd, bool has_format, + goto cleanup; + } + ++ if (!s->dump_info.page_size) { ++ s->dump_info.page_size = TARGET_PAGE_SIZE; ++ } ++ + s->note_size = cpu_get_note_size(s->dump_info.d_class, + s->dump_info.d_machine, nr_cpus); + if (s->note_size < 0) { +@@ -1517,8 +1545,9 @@ static void dump_init(DumpState *s, int fd, bool has_format, + get_max_mapnr(s); + + uint64_t tmp; +- tmp = DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), TARGET_PAGE_SIZE); +- s->len_dump_bitmap = tmp * TARGET_PAGE_SIZE; ++ tmp = DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), ++ s->dump_info.page_size); ++ s->len_dump_bitmap = tmp * s->dump_info.page_size; + + /* init for kdump-compressed format */ + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +diff --git a/include/sysemu/dump-arch.h b/include/sysemu/dump-arch.h +index 9c95ced..4335839 100644 +--- a/include/sysemu/dump-arch.h ++++ b/include/sysemu/dump-arch.h +@@ -15,9 +15,11 @@ + #define DUMP_ARCH_H + + typedef struct ArchDumpInfo { +- int d_machine; /* Architecture */ +- int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ +- int d_class; /* ELFCLASS32 or ELFCLASS64 */ ++ int d_machine; /* Architecture */ ++ int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */ ++ int d_class; /* ELFCLASS32 or ELFCLASS64 */ ++ uint32_t page_size; /* The target's page size. If it's variable and ++ * unknown, then this should be the maximum. */ + } ArchDumpInfo; + + struct GuestPhysBlockList; /* memory_mapping.h */ +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 7e4ec5c..16cbd8d 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -20,12 +20,9 @@ + #define VERSION_FLAT_HEADER (1) /* version of flattened format */ + #define END_FLAG_FLAT_HEADER (-1) + ++#ifndef ARCH_PFN_OFFSET + #define ARCH_PFN_OFFSET (0) +- +-#define paddr_to_pfn(X) \ +- (((unsigned long long)(X) >> TARGET_PAGE_BITS) - ARCH_PFN_OFFSET) +-#define pfn_to_paddr(X) \ +- (((unsigned long long)(X) + ARCH_PFN_OFFSET) << TARGET_PAGE_BITS) ++#endif + + /* + * flag for compressed format +@@ -39,9 +36,6 @@ + #define PHYS_BASE (0) + #define DUMP_LEVEL (1) + #define DISKDUMP_HEADER_BLOCKS (1) +-#define BUFSIZE_BITMAP (TARGET_PAGE_SIZE) +-#define PFN_BUFBITMAP (CHAR_BIT * BUFSIZE_BITMAP) +-#define BUFSIZE_DATA_CACHE (TARGET_PAGE_SIZE * 4) + + #include "sysemu/dump-arch.h" + #include "sysemu/memory_mapping.h" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-allow-target-to-set-the-physical-base.patch b/SOURCES/kvm-dump-allow-target-to-set-the-physical-base.patch new file mode 100644 index 0000000..dc02b9b --- /dev/null +++ b/SOURCES/kvm-dump-allow-target-to-set-the-physical-base.patch @@ -0,0 +1,88 @@ +From 26e8c3574944585f9f02a92b03a6e7097dd3a7dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:53 +0100 +Subject: [PATCH 22/41] dump: allow target to set the physical base +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-23-marcandre.lureau@redhat.com> +Patchwork-id: 78371 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 22/41] dump: allow target to set the physical base +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Andrew Jones + +crash assumes the physical base in the kdump subheader of +makedumpfile formatted dumps is correct. Zero is not correct +for all architectures, so allow it to be changed. + +(No functional change.) + +Signed-off-by: Andrew Jones +Reviewed-by: Peter Maydell +Message-id: 1452542185-10914-5-git-send-email-drjones@redhat.com +Signed-off-by: Peter Maydell + +(cherry picked from commit b6e05aa473b52e049654fae834453232e6b6e798) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 4 ++-- + include/sysemu/dump-arch.h | 1 + + include/sysemu/dump.h | 1 - + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/dump.c b/dump.c +index b5d6608..a359c29 100644 +--- a/dump.c ++++ b/dump.c +@@ -780,7 +780,7 @@ static void create_header32(DumpState *s, Error **errp) + + /* 64bit max_mapnr_64 */ + kh->max_mapnr_64 = cpu_to_dump64(s, s->max_mapnr); +- kh->phys_base = cpu_to_dump32(s, PHYS_BASE); ++ kh->phys_base = cpu_to_dump32(s, s->dump_info.phys_base); + kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); + + offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; +@@ -880,7 +880,7 @@ static void create_header64(DumpState *s, Error **errp) + + /* 64bit max_mapnr_64 */ + kh->max_mapnr_64 = cpu_to_dump64(s, s->max_mapnr); +- kh->phys_base = cpu_to_dump64(s, PHYS_BASE); ++ kh->phys_base = cpu_to_dump64(s, s->dump_info.phys_base); + kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); + + offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; +diff --git a/include/sysemu/dump-arch.h b/include/sysemu/dump-arch.h +index 4335839..e25b02e 100644 +--- a/include/sysemu/dump-arch.h ++++ b/include/sysemu/dump-arch.h +@@ -20,6 +20,7 @@ typedef struct ArchDumpInfo { + int d_class; /* ELFCLASS32 or ELFCLASS64 */ + uint32_t page_size; /* The target's page size. If it's variable and + * unknown, then this should be the maximum. */ ++ uint64_t phys_base; /* The target's physmem base. */ + } ArchDumpInfo; + + struct GuestPhysBlockList; /* memory_mapping.h */ +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 16cbd8d..2f04b24 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -33,7 +33,6 @@ + + #define KDUMP_SIGNATURE "KDUMP " + #define SIG_LEN (sizeof(KDUMP_SIGNATURE) - 1) +-#define PHYS_BASE (0) + #define DUMP_LEVEL (1) + #define DISKDUMP_HEADER_BLOCKS (1) + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-clamp-guest-provided-mapping-lengths-to-ramblock-sizes.patch b/SOURCES/kvm-dump-clamp-guest-provided-mapping-lengths-to-ramblock-sizes.patch new file mode 100644 index 0000000..f121402 --- /dev/null +++ b/SOURCES/kvm-dump-clamp-guest-provided-mapping-lengths-to-ramblock-sizes.patch @@ -0,0 +1,167 @@ +From 198cca2028659addc6cce1a4fe2f14b7b84d1a22 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:37 +0200 +Subject: dump: clamp guest-provided mapping lengths to ramblock sizes + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-8-git-send-email-lersek@redhat.com> +Patchwork-id: 53169 +O-Subject: [RHEL-7 qemu-kvm PATCH 07/10] dump: clamp guest-provided mapping lengths to ramblock sizes +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +Even a trusted & clean-state guest can map more memory than what it was +given. Since the vmcore contains RAMBlocks, mapping sizes should be +clamped to RAMBlock sizes. Otherwise such oversized mappings can exceed +the entire file size, and ELF parsers might refuse even the valid portion +of the PT_LOAD entry. + +Related RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=981582 + +Signed-off-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 2cac260768b9d4253737417ea7501cf2950e257f) + +diff --git a/dump.c b/dump.c +index 44a1339..cbfad1c 100644 +--- a/dump.c ++++ b/dump.c +@@ -187,7 +187,8 @@ static int write_elf32_header(DumpState *s) + } + + static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, +- int phdr_index, hwaddr offset) ++ int phdr_index, hwaddr offset, ++ hwaddr filesz) + { + Elf64_Phdr phdr; + int ret; +@@ -197,15 +198,12 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + phdr.p_type = cpu_convert_to_target32(PT_LOAD, endian); + phdr.p_offset = cpu_convert_to_target64(offset, endian); + phdr.p_paddr = cpu_convert_to_target64(memory_mapping->phys_addr, endian); +- if (offset == -1) { +- /* When the memory is not stored into vmcore, offset will be -1 */ +- phdr.p_filesz = 0; +- } else { +- phdr.p_filesz = cpu_convert_to_target64(memory_mapping->length, endian); +- } ++ phdr.p_filesz = cpu_convert_to_target64(filesz, endian); + phdr.p_memsz = cpu_convert_to_target64(memory_mapping->length, endian); + phdr.p_vaddr = cpu_convert_to_target64(memory_mapping->virt_addr, endian); + ++ assert(memory_mapping->length >= filesz); ++ + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { + dump_error(s, "dump: failed to write program header table.\n"); +@@ -216,7 +214,8 @@ static int write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + } + + static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, +- int phdr_index, hwaddr offset) ++ int phdr_index, hwaddr offset, ++ hwaddr filesz) + { + Elf32_Phdr phdr; + int ret; +@@ -226,15 +225,12 @@ static int write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + phdr.p_type = cpu_convert_to_target32(PT_LOAD, endian); + phdr.p_offset = cpu_convert_to_target32(offset, endian); + phdr.p_paddr = cpu_convert_to_target32(memory_mapping->phys_addr, endian); +- if (offset == -1) { +- /* When the memory is not stored into vmcore, offset will be -1 */ +- phdr.p_filesz = 0; +- } else { +- phdr.p_filesz = cpu_convert_to_target32(memory_mapping->length, endian); +- } ++ phdr.p_filesz = cpu_convert_to_target32(filesz, endian); + phdr.p_memsz = cpu_convert_to_target32(memory_mapping->length, endian); + phdr.p_vaddr = cpu_convert_to_target32(memory_mapping->virt_addr, endian); + ++ assert(memory_mapping->length >= filesz); ++ + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { + dump_error(s, "dump: failed to write program header table.\n"); +@@ -422,17 +418,24 @@ static int write_memory(DumpState *s, RAMBlock *block, ram_addr_t start, + return 0; + } + +-/* get the memory's offset in the vmcore */ +-static hwaddr get_offset(hwaddr phys_addr, +- DumpState *s) ++/* get the memory's offset and size in the vmcore */ ++static void get_offset_range(hwaddr phys_addr, ++ ram_addr_t mapping_length, ++ DumpState *s, ++ hwaddr *p_offset, ++ hwaddr *p_filesz) + { + RAMBlock *block; + hwaddr offset = s->memory_offset; + int64_t size_in_block, start; + ++ /* When the memory is not stored into vmcore, offset will be -1 */ ++ *p_offset = -1; ++ *p_filesz = 0; ++ + if (s->has_filter) { + if (phys_addr < s->begin || phys_addr >= s->begin + s->length) { +- return -1; ++ return; + } + } + +@@ -461,18 +464,26 @@ static hwaddr get_offset(hwaddr phys_addr, + } + + if (phys_addr >= start && phys_addr < start + size_in_block) { +- return phys_addr - start + offset; ++ *p_offset = phys_addr - start + offset; ++ ++ /* The offset range mapped from the vmcore file must not spill over ++ * the RAMBlock, clamp it. The rest of the mapping will be ++ * zero-filled in memory at load time; see ++ * . ++ */ ++ *p_filesz = phys_addr + mapping_length <= start + size_in_block ? ++ mapping_length : ++ size_in_block - (phys_addr - start); ++ return; + } + + offset += size_in_block; + } +- +- return -1; + } + + static int write_elf_loads(DumpState *s) + { +- hwaddr offset; ++ hwaddr offset, filesz; + MemoryMapping *memory_mapping; + uint32_t phdr_index = 1; + int ret; +@@ -485,11 +496,15 @@ static int write_elf_loads(DumpState *s) + } + + QTAILQ_FOREACH(memory_mapping, &s->list.head, next) { +- offset = get_offset(memory_mapping->phys_addr, s); ++ get_offset_range(memory_mapping->phys_addr, ++ memory_mapping->length, ++ s, &offset, &filesz); + if (s->dump_info.d_class == ELFCLASS64) { +- ret = write_elf64_load(s, memory_mapping, phdr_index++, offset); ++ ret = write_elf64_load(s, memory_mapping, phdr_index++, offset, ++ filesz); + } else { +- ret = write_elf32_load(s, memory_mapping, phdr_index++, offset); ++ ret = write_elf32_load(s, memory_mapping, phdr_index++, offset, ++ filesz); + } + + if (ret < 0) { diff --git a/SOURCES/kvm-dump-const-qualify-the-buf-of-WriteCoreDumpFunction.patch b/SOURCES/kvm-dump-const-qualify-the-buf-of-WriteCoreDumpFunction.patch new file mode 100644 index 0000000..0476cd6 --- /dev/null +++ b/SOURCES/kvm-dump-const-qualify-the-buf-of-WriteCoreDumpFunction.patch @@ -0,0 +1,59 @@ +From 4e72a97c81c6fe61fe051bfe41e9b53425bcd7af Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:50 +0100 +Subject: [PATCH 03/41] dump: const-qualify the buf of WriteCoreDumpFunction + +Message-id: <1415380693-16593-4-git-send-email-lersek@redhat.com> +Patchwork-id: 62189 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 03/26] dump: const-qualify the buf of WriteCoreDumpFunction +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +WriteCoreDumpFunction is a function pointer that points to the function used to +write content in "buf" into core file, so "buf" should be const-qualify. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit b5ba1cc6260917926781fb79fbb05d53bf586d53) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 2 +- + include/qom/cpu.h | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/dump.c b/dump.c +index 8c31386..aa56aba 100644 +--- a/dump.c ++++ b/dump.c +@@ -99,7 +99,7 @@ static void dump_error(DumpState *s, const char *reason) + dump_cleanup(s); + } + +-static int fd_write_vmcore(void *buf, size_t size, void *opaque) ++static int fd_write_vmcore(const void *buf, size_t size, void *opaque) + { + DumpState *s = opaque; + size_t written_size; +diff --git a/include/qom/cpu.h b/include/qom/cpu.h +index b555c22..a5cc6c3 100644 +--- a/include/qom/cpu.h ++++ b/include/qom/cpu.h +@@ -25,7 +25,8 @@ + #include "qemu/thread.h" + #include "qemu/typedefs.h" + +-typedef int (*WriteCoreDumpFunction)(void *buf, size_t size, void *opaque); ++typedef int (*WriteCoreDumpFunction)(const void *buf, size_t size, ++ void *opaque); + + /** + * SECTION:cpu +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-do-not-dump-non-existent-guest-memory.patch b/SOURCES/kvm-dump-do-not-dump-non-existent-guest-memory.patch new file mode 100644 index 0000000..cdafef1 --- /dev/null +++ b/SOURCES/kvm-dump-do-not-dump-non-existent-guest-memory.patch @@ -0,0 +1,67 @@ +From 725ecdf6e40eaebbfa8e5328a5ff96163b61637f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:00 +0100 +Subject: [PATCH 29/41] dump: do not dump non-existent guest memory +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-30-marcandre.lureau@redhat.com> +Patchwork-id: 78379 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 29/41] dump: do not dump non-existent guest memory +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Cornelia Huck + +It does not really make sense to dump memory that is not there. + +Moreover, that fixes a segmentation fault when calling dump-guest-memory +with no filter for a machine with no memory defined. + +New behaviour is: + +(qemu) dump-guest-memory /dev/null +dump: no guest memory to dump +(qemu) dump-guest-memory /dev/null 0 4096 +dump: no guest memory to dump + +Signed-off-by: Cornelia Huck +Tested-by: Laurent Vivier +Reviewed-by: Laurent Vivier +Reviewed-by: Greg Kurz +Reviewed-by: Peter Xu +Message-Id: <20170913142036.2469-4-lvivier@redhat.com> +Signed-off-by: Laurent Vivier +Signed-off-by: Dr. David Alan Gilbert + +(cherry picked from commit d1e6994abcd12c7f54aa73ff848fb6215c783898) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/dump.c b/dump.c +index 008a722..d629c8d 100644 +--- a/dump.c ++++ b/dump.c +@@ -1536,6 +1536,12 @@ static void dump_init(DumpState *s, int fd, bool has_format, + fprintf(stderr, "DUMP: total memory to dump: %lu\n", s->total_size); + #endif + ++ /* it does not make sense to dump non-existent memory */ ++ if (!s->total_size) { ++ error_setg(errp, "dump: no guest memory to dump"); ++ goto cleanup; ++ } ++ + s->start = get_start_block(s); + if (s->start == -1) { + error_set(errp, QERR_INVALID_PARAMETER, "begin"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-eliminate-DumpState.page_shift-guest-s-page-shi.patch b/SOURCES/kvm-dump-eliminate-DumpState.page_shift-guest-s-page-shi.patch new file mode 100644 index 0000000..fc2fd68 --- /dev/null +++ b/SOURCES/kvm-dump-eliminate-DumpState.page_shift-guest-s-page-shi.patch @@ -0,0 +1,110 @@ +From 8bc06ed35e121131f16d08b9c2ecaa0b122d7ad3 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:09 +0100 +Subject: [PATCH 22/41] dump: eliminate DumpState.page_shift ("guest's page + shift") + +Message-id: <1415380693-16593-23-git-send-email-lersek@redhat.com> +Patchwork-id: 62210 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 22/26] dump: eliminate DumpState.page_shift ("guest's page shift") +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +Just use TARGET_PAGE_BITS. + +"DumpState.page_shift" used to have type "uint32_t", while the replacement +TARGET_PAGE_BITS has type "int". Since "DumpState.page_shift" was only +used as bit shift counts in the paddr_to_pfn() and pfn_to_paddr() macros, +this is safe. + +Suggested-by: Paolo Bonzini +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit 22227f121bddb038a0335cf83a3c24f451e2e836) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 10 ++++------ + include/sysemu/dump.h | 8 ++++---- + 2 files changed, 8 insertions(+), 10 deletions(-) + +diff --git a/dump.c b/dump.c +index ee28777..bc82b55 100644 +--- a/dump.c ++++ b/dump.c +@@ -91,7 +91,6 @@ typedef struct DumpState { + size_t note_buf_offset; /* the writing place in note_buf */ + uint32_t nr_cpus; /* number of guest's cpu */ + size_t page_size; /* guest's page size */ +- uint32_t page_shift; /* guest's page shift */ + uint64_t max_mapnr; /* the biggest guest's phys-mem's number */ + size_t len_dump_bitmap; /* the size of the place used to store + dump_bitmap in vmcore */ +@@ -1092,7 +1091,7 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + *blockptr = block; + assert(block->target_start % s->page_size == 0); + assert(block->target_end % s->page_size == 0); +- *pfnptr = paddr_to_pfn(block->target_start, s->page_shift); ++ *pfnptr = paddr_to_pfn(block->target_start); + if (bufptr) { + *bufptr = block->host_addr; + } +@@ -1100,7 +1099,7 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + } + + *pfnptr = *pfnptr + 1; +- addr = pfn_to_paddr(*pfnptr, s->page_shift); ++ addr = pfn_to_paddr(*pfnptr); + + if ((addr >= block->target_start) && + (addr + s->page_size <= block->target_end)) { +@@ -1114,7 +1113,7 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + } + assert(block->target_start % s->page_size == 0); + assert(block->target_end % s->page_size == 0); +- *pfnptr = paddr_to_pfn(block->target_start, s->page_shift); ++ *pfnptr = paddr_to_pfn(block->target_start); + buf = block->host_addr; + } + +@@ -1540,7 +1539,7 @@ static void get_max_mapnr(DumpState *s) + GuestPhysBlock *last_block; + + last_block = QTAILQ_LAST(&s->guest_phys_blocks.head, GuestPhysBlockHead); +- s->max_mapnr = paddr_to_pfn(last_block->target_end, s->page_shift); ++ s->max_mapnr = paddr_to_pfn(last_block->target_end); + } + + static int dump_init(DumpState *s, int fd, bool has_format, +@@ -1618,7 +1617,6 @@ static int dump_init(DumpState *s, int fd, bool has_format, + + s->nr_cpus = nr_cpus; + s->page_size = TARGET_PAGE_SIZE; +- s->page_shift = ffs(s->page_size) - 1; + + get_max_mapnr(s); + +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index efab7a3..12af557 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -22,10 +22,10 @@ + + #define ARCH_PFN_OFFSET (0) + +-#define paddr_to_pfn(X, page_shift) \ +- (((unsigned long long)(X) >> (page_shift)) - ARCH_PFN_OFFSET) +-#define pfn_to_paddr(X, page_shift) \ +- (((unsigned long long)(X) + ARCH_PFN_OFFSET) << (page_shift)) ++#define paddr_to_pfn(X) \ ++ (((unsigned long long)(X) >> TARGET_PAGE_BITS) - ARCH_PFN_OFFSET) ++#define pfn_to_paddr(X) \ ++ (((unsigned long long)(X) + ARCH_PFN_OFFSET) << TARGET_PAGE_BITS) + + /* + * flag for compressed format +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-eliminate-DumpState.page_size-guest-s-page-size.patch b/SOURCES/kvm-dump-eliminate-DumpState.page_size-guest-s-page-size.patch new file mode 100644 index 0000000..103984e --- /dev/null +++ b/SOURCES/kvm-dump-eliminate-DumpState.page_size-guest-s-page-size.patch @@ -0,0 +1,265 @@ +From e660f3651e349f658fe393917bab3ef8da44448c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:10 +0100 +Subject: [PATCH 23/41] dump: eliminate DumpState.page_size ("guest's page + size") + +Message-id: <1415380693-16593-24-git-send-email-lersek@redhat.com> +Patchwork-id: 62211 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 23/26] dump: eliminate DumpState.page_size ("guest's page size") +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +Use TARGET_PAGE_SIZE and ~TARGET_PAGE_MASK instead. + +"DumpState.page_size" has type "size_t", whereas TARGET_PAGE_SIZE has type +"int". TARGET_PAGE_MASK is of type "int" and has negative value. The patch +affects the implicit type conversions as follows: + +- create_header32() and create_header64(): assigned to "block_size", which + has type "uint32_t". No change. + +- get_next_page(): "block->target_start", "block->target_end" and "addr" + have type "hwaddr" (uint64_t). + + Before the patch, + - if "size_t" was "uint64_t", then no additional conversion was done as + part of the usual arithmetic conversions, + - If "size_t" was "uint32_t", then it was widened to uint64_t as part of + the usual arithmetic conversions, + for the remainder and addition operators. + + After the patch, + - "~TARGET_PAGE_MASK" expands to ~~((1 << TARGET_PAGE_BITS) - 1). It + has type "int" and positive value (only least significant bits set). + That's converted (widened) to "uint64_t" for the bit-ands. No visible + change. + - The same holds for the (addr + TARGET_PAGE_SIZE) addition. + +- write_dump_pages(): + - TARGET_PAGE_SIZE passed as argument to a bunch of functions that all + have prototypes. No change. + + - When incrementing "offset_data" (of type "off_t"): given that we never + build for ILP32_OFF32 (see "-D_FILE_OFFSET_BITS=64" in configure), + "off_t" is always "int64_t", and we only need to consider: + - ILP32_OFFBIG: "size_t" is "uint32_t". + - before: int64_t += uint32_t. Page size converted to int64_t for + the addition. + - after: int64_t += int32_t. No change. + - LP64_OFF64: "size_t" is "uint64_t". + - before: int64_t += uint64_t. Offset converted to uint64_t for the + addition, then the uint64_t result is converted to int64_t for + storage. + - after: int64_t += int32_t. Same as the ILP32_OFFBIG/after case. + No visible change. + + - (size_out < s->page_size) comparisons, and (size_out = s->page_size) + assignment: + - before: "size_out" is of type "size_t", no implicit conversion for + either operator. + - after: TARGET_PAGE_SIZE (of type "int" and positive value) is + converted to "size_t" (for the relop because the latter is + one of "uint32_t" and "uint64_t"). No visible change. + +- dump_init(): + - DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), s->page_size): The + innermost "DumpState.max_mapnr" field has type uint64_t, which + propagates through all implicit conversions at hand: + + #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) + + regardless of the page size macro argument's type. In the outer macro + replacement, the page size is converted from uint32_t and int32_t + alike to uint64_t. + + - (tmp * s->page_size) multiplication: "tmp" has size "uint64_t"; the + RHS is converted to that type from uint32_t and int32_t just the same + if it's not uint64_t to begin with. + +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit 2f859f80c2077e00237ea1dfae2523ebd8377f5f) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 51 +++++++++++++++++++++++++-------------------------- + 1 file changed, 25 insertions(+), 26 deletions(-) + +diff --git a/dump.c b/dump.c +index bc82b55..f8e0fd7 100644 +--- a/dump.c ++++ b/dump.c +@@ -90,7 +90,6 @@ typedef struct DumpState { + uint8_t *note_buf; /* buffer for notes */ + size_t note_buf_offset; /* the writing place in note_buf */ + uint32_t nr_cpus; /* number of guest's cpu */ +- size_t page_size; /* guest's page size */ + uint64_t max_mapnr; /* the biggest guest's phys-mem's number */ + size_t len_dump_bitmap; /* the size of the place used to store + dump_bitmap in vmcore */ +@@ -811,7 +810,7 @@ static int create_header32(DumpState *s) + + strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); + dh->header_version = cpu_convert_to_target32(6, endian); +- block_size = s->page_size; ++ block_size = TARGET_PAGE_SIZE; + dh->block_size = cpu_convert_to_target32(block_size, endian); + sub_hdr_size = sizeof(struct KdumpSubHeader32) + s->note_size; + sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); +@@ -918,7 +917,7 @@ static int create_header64(DumpState *s) + + strncpy(dh->signature, KDUMP_SIGNATURE, strlen(KDUMP_SIGNATURE)); + dh->header_version = cpu_convert_to_target32(6, endian); +- block_size = s->page_size; ++ block_size = TARGET_PAGE_SIZE; + dh->block_size = cpu_convert_to_target32(block_size, endian); + sub_hdr_size = sizeof(struct KdumpSubHeader64) + s->note_size; + sub_hdr_size = DIV_ROUND_UP(sub_hdr_size, block_size); +@@ -1089,8 +1088,8 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + if (!block) { + block = QTAILQ_FIRST(&s->guest_phys_blocks.head); + *blockptr = block; +- assert(block->target_start % s->page_size == 0); +- assert(block->target_end % s->page_size == 0); ++ assert((block->target_start & ~TARGET_PAGE_MASK) == 0); ++ assert((block->target_end & ~TARGET_PAGE_MASK) == 0); + *pfnptr = paddr_to_pfn(block->target_start); + if (bufptr) { + *bufptr = block->host_addr; +@@ -1102,7 +1101,7 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + addr = pfn_to_paddr(*pfnptr); + + if ((addr >= block->target_start) && +- (addr + s->page_size <= block->target_end)) { ++ (addr + TARGET_PAGE_SIZE <= block->target_end)) { + buf = block->host_addr + (addr - block->target_start); + } else { + /* the next page is in the next block */ +@@ -1111,8 +1110,8 @@ static bool get_next_page(GuestPhysBlock **blockptr, uint64_t *pfnptr, + if (!block) { + return false; + } +- assert(block->target_start % s->page_size == 0); +- assert(block->target_end % s->page_size == 0); ++ assert((block->target_start & ~TARGET_PAGE_MASK) == 0); ++ assert((block->target_end & ~TARGET_PAGE_MASK) == 0); + *pfnptr = paddr_to_pfn(block->target_start); + buf = block->host_addr; + } +@@ -1297,7 +1296,7 @@ static int write_dump_pages(DumpState *s) + prepare_data_cache(&page_data, s, offset_data); + + /* prepare buffer to store compressed data */ +- len_buf_out = get_len_buf_out(s->page_size, s->flag_compress); ++ len_buf_out = get_len_buf_out(TARGET_PAGE_SIZE, s->flag_compress); + if (len_buf_out == 0) { + dump_error(s, "dump: failed to get length of output buffer.\n"); + goto out; +@@ -1313,19 +1312,19 @@ static int write_dump_pages(DumpState *s) + * init zero page's page_desc and page_data, because every zero page + * uses the same page_data + */ +- pd_zero.size = cpu_convert_to_target32(s->page_size, endian); ++ pd_zero.size = cpu_convert_to_target32(TARGET_PAGE_SIZE, endian); + pd_zero.flags = cpu_convert_to_target32(0, endian); + pd_zero.offset = cpu_convert_to_target64(offset_data, endian); + pd_zero.page_flags = cpu_convert_to_target64(0, endian); +- buf = g_malloc0(s->page_size); +- ret = write_cache(&page_data, buf, s->page_size, false); ++ buf = g_malloc0(TARGET_PAGE_SIZE); ++ ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); + g_free(buf); + if (ret < 0) { + dump_error(s, "dump: failed to write page data(zero page).\n"); + goto out; + } + +- offset_data += s->page_size; ++ offset_data += TARGET_PAGE_SIZE; + + /* + * dump memory to vmcore page by page. zero page will all be resided in the +@@ -1333,7 +1332,7 @@ static int write_dump_pages(DumpState *s) + */ + while (get_next_page(&block_iter, &pfn_iter, &buf, s)) { + /* check zero page */ +- if (is_zero_page(buf, s->page_size)) { ++ if (is_zero_page(buf, TARGET_PAGE_SIZE)) { + ret = write_cache(&page_desc, &pd_zero, sizeof(PageDescriptor), + false); + if (ret < 0) { +@@ -1354,8 +1353,9 @@ static int write_dump_pages(DumpState *s) + */ + size_out = len_buf_out; + if ((s->flag_compress & DUMP_DH_COMPRESSED_ZLIB) && +- (compress2(buf_out, (uLongf *)&size_out, buf, s->page_size, +- Z_BEST_SPEED) == Z_OK) && (size_out < s->page_size)) { ++ (compress2(buf_out, (uLongf *)&size_out, buf, ++ TARGET_PAGE_SIZE, Z_BEST_SPEED) == Z_OK) && ++ (size_out < TARGET_PAGE_SIZE)) { + pd.flags = cpu_convert_to_target32(DUMP_DH_COMPRESSED_ZLIB, + endian); + pd.size = cpu_convert_to_target32(size_out, endian); +@@ -1367,9 +1367,9 @@ static int write_dump_pages(DumpState *s) + } + #ifdef CONFIG_LZO + } else if ((s->flag_compress & DUMP_DH_COMPRESSED_LZO) && +- (lzo1x_1_compress(buf, s->page_size, buf_out, ++ (lzo1x_1_compress(buf, TARGET_PAGE_SIZE, buf_out, + (lzo_uint *)&size_out, wrkmem) == LZO_E_OK) && +- (size_out < s->page_size)) { ++ (size_out < TARGET_PAGE_SIZE)) { + pd.flags = cpu_convert_to_target32(DUMP_DH_COMPRESSED_LZO, + endian); + pd.size = cpu_convert_to_target32(size_out, endian); +@@ -1382,9 +1382,9 @@ static int write_dump_pages(DumpState *s) + #endif + #ifdef CONFIG_SNAPPY + } else if ((s->flag_compress & DUMP_DH_COMPRESSED_SNAPPY) && +- (snappy_compress((char *)buf, s->page_size, ++ (snappy_compress((char *)buf, TARGET_PAGE_SIZE, + (char *)buf_out, &size_out) == SNAPPY_OK) && +- (size_out < s->page_size)) { ++ (size_out < TARGET_PAGE_SIZE)) { + pd.flags = cpu_convert_to_target32( + DUMP_DH_COMPRESSED_SNAPPY, endian); + pd.size = cpu_convert_to_target32(size_out, endian); +@@ -1398,13 +1398,13 @@ static int write_dump_pages(DumpState *s) + } else { + /* + * fall back to save in plaintext, size_out should be +- * assigned to s->page_size ++ * assigned TARGET_PAGE_SIZE + */ + pd.flags = cpu_convert_to_target32(0, endian); +- size_out = s->page_size; ++ size_out = TARGET_PAGE_SIZE; + pd.size = cpu_convert_to_target32(size_out, endian); + +- ret = write_cache(&page_data, buf, s->page_size, false); ++ ret = write_cache(&page_data, buf, TARGET_PAGE_SIZE, false); + if (ret < 0) { + dump_error(s, "dump: failed to write page data.\n"); + goto out; +@@ -1616,13 +1616,12 @@ static int dump_init(DumpState *s, int fd, bool has_format, + } + + s->nr_cpus = nr_cpus; +- s->page_size = TARGET_PAGE_SIZE; + + get_max_mapnr(s); + + uint64_t tmp; +- tmp = DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), s->page_size); +- s->len_dump_bitmap = tmp * s->page_size; ++ tmp = DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), TARGET_PAGE_SIZE); ++ s->len_dump_bitmap = tmp * TARGET_PAGE_SIZE; + + /* init for kdump-compressed format */ + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-fill-in-the-flat-header-signature-more-pleasing.patch b/SOURCES/kvm-dump-fill-in-the-flat-header-signature-more-pleasing.patch new file mode 100644 index 0000000..7c06a42 --- /dev/null +++ b/SOURCES/kvm-dump-fill-in-the-flat-header-signature-more-pleasing.patch @@ -0,0 +1,51 @@ +From e40ba375b6007ff227d18aa55be7f1070145ccac Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:07 +0100 +Subject: [PATCH 20/41] dump: fill in the flat header signature more pleasingly + to the eye + +Message-id: <1415380693-16593-21-git-send-email-lersek@redhat.com> +Patchwork-id: 62206 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 20/26] dump: fill in the flat header signature more pleasingly to the eye +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +The "mh.signature" array field has size 16, and is zeroed by the preceding +memset(). MAKEDUMPFILE_SIGNATURE expands to a string literal with string +length 12 (size 13). There's no need to measure the length of +MAKEDUMPFILE_SIGNATURE at runtime, nor for the extra zero-filling of +"mh.signature" with strncpy(). + +Use memcpy() with MIN(sizeof, sizeof) for robustness (which is an integer +constant expression, evaluable at compile time.) + +Approximately-suggested-by: Paolo Bonzini +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit ae3f88f60fb9f42bb3679311c2fbff8e1868ea47) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dump.c b/dump.c +index 9250594..533b914 100644 +--- a/dump.c ++++ b/dump.c +@@ -722,8 +722,8 @@ static int write_start_flat_header(int fd) + int ret = 0; + + memset(&mh, 0, sizeof(mh)); +- strncpy(mh.signature, MAKEDUMPFILE_SIGNATURE, +- strlen(MAKEDUMPFILE_SIGNATURE)); ++ memcpy(mh.signature, MAKEDUMPFILE_SIGNATURE, ++ MIN(sizeof mh.signature, sizeof MAKEDUMPFILE_SIGNATURE)); + + mh.type = cpu_to_be64(TYPE_FLAT_HEADER); + mh.version = cpu_to_be64(VERSION_FLAT_HEADER); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory-Check-for-the-correct-return-value.patch b/SOURCES/kvm-dump-guest-memory-Check-for-the-correct-return-value.patch new file mode 100644 index 0000000..b223f37 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory-Check-for-the-correct-return-value.patch @@ -0,0 +1,51 @@ +From 9c1134e8923157059587541b4f318e63ad8c39fe Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:17:49 +0100 +Subject: [PATCH 02/41] dump-guest-memory: Check for the correct return value + +Message-id: <1415380693-16593-3-git-send-email-lersek@redhat.com> +Patchwork-id: 62188 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 02/26] dump-guest-memory: Check for the correct return value +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: "Aneesh Kumar K.V" + +We should check for error with s->note_size + +Signed-off-by: Aneesh Kumar K.V +Signed-off-by: Alexander Graf +(cherry picked from commit bb6b684363e83586c90d20127b0d0a79793ab1e2) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dump.c b/dump.c +index a2b6e45..8c31386 100644 +--- a/dump.c ++++ b/dump.c +@@ -66,7 +66,7 @@ typedef struct DumpState { + uint32_t sh_info; + bool have_section; + bool resume; +- size_t note_size; ++ ssize_t note_size; + hwaddr memory_offset; + int fd; + +@@ -771,7 +771,7 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + + s->note_size = cpu_get_note_size(s->dump_info.d_class, + s->dump_info.d_machine, nr_cpus); +- if (ret < 0) { ++ if (s->note_size < 0) { + error_set(errp, QERR_UNSUPPORTED); + goto cleanup; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory-add-dump_in_progress-helper-functi.patch b/SOURCES/kvm-dump-guest-memory-add-dump_in_progress-helper-functi.patch new file mode 100644 index 0000000..ce51b89 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory-add-dump_in_progress-helper-functi.patch @@ -0,0 +1,118 @@ +From 68ed14180549185ab27c37baacd47843ae45511c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:56 +0100 +Subject: [PATCH 25/41] dump-guest-memory: add dump_in_progress() helper + function +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-26-marcandre.lureau@redhat.com> +Patchwork-id: 78376 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 25/41] dump-guest-memory: add dump_in_progress() helper function +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Peter Xu + +For now, it has no effect. It will be used in dump detach support. + +Signed-off-by: Peter Xu +Reviewed-by: Fam Zheng +Message-Id: <1455772616-8668-5-git-send-email-peterx@redhat.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 65d64f362326a57b590b8b76e3422030a2aa5c44) + +RHEL: minor conflict in function declaration area. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 13 +++++++++++++ + include/qemu-common.h | 4 ++++ + qmp.c | 14 ++++++++++++++ + 3 files changed, 31 insertions(+) + +diff --git a/dump.c b/dump.c +index 254c0ba..639d52a 100644 +--- a/dump.c ++++ b/dump.c +@@ -1455,6 +1455,12 @@ static void dump_state_prepare(DumpState *s) + *s = (DumpState) { .status = DUMP_STATUS_ACTIVE }; + } + ++bool dump_in_progress(void) ++{ ++ DumpState *state = &dump_state_global; ++ return (state->status == DUMP_STATUS_ACTIVE); ++} ++ + static void dump_init(DumpState *s, int fd, bool has_format, + DumpGuestMemoryFormat format, bool paging, bool has_filter, + int64_t begin, int64_t length, Error **errp) +@@ -1632,6 +1638,13 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + DumpState *s; + Error *local_err = NULL; + ++ /* if there is a dump in background, we should wait until the dump ++ * finished */ ++ if (dump_in_progress()) { ++ error_setg(errp, "There is a dump in process, please wait."); ++ return; ++ } ++ + /* + * kdump-compressed format need the whole memory dumped, so paging or + * filter is not supported here. +diff --git a/include/qemu-common.h b/include/qemu-common.h +index 8c1132c..4569d52 100644 +--- a/include/qemu-common.h ++++ b/include/qemu-common.h +@@ -481,4 +481,8 @@ size_t buffer_find_nonzero_offset(const void *buf, size_t len); + */ + int parse_debug_env(const char *name, int max, int initial); + ++/* returns non-zero if dump is in progress, otherwise zero is ++ * returned. */ ++bool dump_in_progress(void); ++ + #endif +diff --git a/qmp.c b/qmp.c +index 4c149b3..5996056 100644 +--- a/qmp.c ++++ b/qmp.c +@@ -87,6 +87,13 @@ void qmp_quit(Error **err) + + void qmp_stop(Error **errp) + { ++ /* if there is a dump in background, we should wait until the dump ++ * finished */ ++ if (dump_in_progress()) { ++ error_setg(errp, "There is a dump in process, please wait."); ++ return; ++ } ++ + if (runstate_check(RUN_STATE_INMIGRATE)) { + autostart = 0; + } else { +@@ -159,6 +166,13 @@ void qmp_cont(Error **errp) + { + Error *local_err = NULL; + ++ /* if there is a dump in background, we should wait until the dump ++ * finished */ ++ if (dump_in_progress()) { ++ error_setg(errp, "There is a dump in process, please wait."); ++ return; ++ } ++ + if (runstate_needs_reset()) { + error_set(errp, QERR_RESET_REQUIRED); + return; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory-cleanup-removing-dump_-error-clean.patch b/SOURCES/kvm-dump-guest-memory-cleanup-removing-dump_-error-clean.patch new file mode 100644 index 0000000..c1db657 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory-cleanup-removing-dump_-error-clean.patch @@ -0,0 +1,366 @@ +From e105226b0203159f15fc932eac668c67686ec923 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:54 +0100 +Subject: [PATCH 23/41] dump-guest-memory: cleanup: removing + dump_{error|cleanup}(). +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-24-marcandre.lureau@redhat.com> +Patchwork-id: 78372 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 23/41] dump-guest-memory: cleanup: removing dump_{error|cleanup}(). +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Peter Xu + +It might be a little bit confusing and error prone to do +dump_cleanup() in these two functions. A better way is to do +dump_cleanup() before dump finish, no matter whether dump has +succeeded or not. + +Signed-off-by: Peter Xu +Reviewed-by: Fam Zheng +Message-Id: <1455772616-8668-2-git-send-email-peterx@redhat.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit e3517a529913a2a48c12ba8eef4975ad561af97c) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 78 +++++++++++++++++++++++++++--------------------------------------- + 1 file changed, 32 insertions(+), 46 deletions(-) + +diff --git a/dump.c b/dump.c +index a359c29..790bfe4 100644 +--- a/dump.c ++++ b/dump.c +@@ -81,12 +81,6 @@ static int dump_cleanup(DumpState *s) + return 0; + } + +-static void dump_error(DumpState *s, const char *reason, Error **errp) +-{ +- dump_cleanup(s); +- error_setg(errp, "%s", reason); +-} +- + static int fd_write_vmcore(const void *buf, size_t size, void *opaque) + { + DumpState *s = opaque; +@@ -127,7 +121,7 @@ static void write_elf64_header(DumpState *s, Error **errp) + + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf header", errp); ++ error_setg(errp, "dump: failed to write elf header"); + } + } + +@@ -158,7 +152,7 @@ static void write_elf32_header(DumpState *s, Error **errp) + + ret = fd_write_vmcore(&elf_header, sizeof(elf_header), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf header", errp); ++ error_setg(errp, "dump: failed to write elf header"); + } + } + +@@ -181,7 +175,7 @@ static void write_elf64_load(DumpState *s, MemoryMapping *memory_mapping, + + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table", errp); ++ error_setg(errp, "dump: failed to write program header table"); + } + } + +@@ -204,7 +198,7 @@ static void write_elf32_load(DumpState *s, MemoryMapping *memory_mapping, + + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table", errp); ++ error_setg(errp, "dump: failed to write program header table"); + } + } + +@@ -224,7 +218,7 @@ static void write_elf64_note(DumpState *s, Error **errp) + + ret = fd_write_vmcore(&phdr, sizeof(Elf64_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table", errp); ++ error_setg(errp, "dump: failed to write program header table"); + } + } + +@@ -246,7 +240,7 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, + id = cpu_index(cpu); + ret = cpu_write_elf64_note(f, cpu, id, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf notes", errp); ++ error_setg(errp, "dump: failed to write elf notes"); + return; + } + } +@@ -255,7 +249,7 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, + cpu = ENV_GET_CPU(env); + ret = cpu_write_elf64_qemunote(f, cpu, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write CPU status", errp); ++ error_setg(errp, "dump: failed to write CPU status"); + return; + } + } +@@ -277,7 +271,7 @@ static void write_elf32_note(DumpState *s, Error **errp) + + ret = fd_write_vmcore(&phdr, sizeof(Elf32_Phdr), s); + if (ret < 0) { +- dump_error(s, "dump: failed to write program header table", errp); ++ error_setg(errp, "dump: failed to write program header table"); + } + } + +@@ -294,7 +288,7 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, + id = cpu_index(cpu); + ret = cpu_write_elf32_note(f, cpu, id, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write elf notes", errp); ++ error_setg(errp, "dump: failed to write elf notes"); + return; + } + } +@@ -303,7 +297,7 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, + cpu = ENV_GET_CPU(env); + ret = cpu_write_elf32_qemunote(f, cpu, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write CPU status", errp); ++ error_setg(errp, "dump: failed to write CPU status"); + return; + } + } +@@ -331,7 +325,7 @@ static void write_elf_section(DumpState *s, int type, Error **errp) + + ret = fd_write_vmcore(&shdr, shdr_size, s); + if (ret < 0) { +- dump_error(s, "dump: failed to write section header table", errp); ++ error_setg(errp, "dump: failed to write section header table"); + } + } + +@@ -341,7 +335,7 @@ static void write_data(DumpState *s, void *buf, int length, Error **errp) + + ret = fd_write_vmcore(buf, length, s); + if (ret < 0) { +- dump_error(s, "dump: failed to save memory", errp); ++ error_setg(errp, "dump: failed to save memory"); + } + } + +@@ -573,11 +567,6 @@ static void dump_begin(DumpState *s, Error **errp) + } + } + +-static void dump_completed(DumpState *s) +-{ +- dump_cleanup(s); +-} +- + static int get_next_block(DumpState *s, GuestPhysBlock *block) + { + while (1) { +@@ -629,8 +618,6 @@ static void dump_iterate(DumpState *s, Error **errp) + } + + } while (!get_next_block(s, block)); +- +- dump_completed(s); + } + + static void create_vmcore(DumpState *s, Error **errp) +@@ -770,7 +757,7 @@ static void create_header32(DumpState *s, Error **errp) + dh->status = cpu_to_dump32(s, status); + + if (write_buffer(s->fd, 0, dh, size) < 0) { +- dump_error(s, "dump: failed to write disk dump header", errp); ++ error_setg(errp, "dump: failed to write disk dump header"); + goto out; + } + +@@ -789,7 +776,7 @@ static void create_header32(DumpState *s, Error **errp) + + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { +- dump_error(s, "dump: failed to write kdump sub header", errp); ++ error_setg(errp, "dump: failed to write kdump sub header"); + goto out; + } + +@@ -805,7 +792,7 @@ static void create_header32(DumpState *s, Error **errp) + } + if (write_buffer(s->fd, offset_note, s->note_buf, + s->note_size) < 0) { +- dump_error(s, "dump: failed to write notes", errp); ++ error_setg(errp, "dump: failed to write notes"); + goto out; + } + +@@ -870,7 +857,7 @@ static void create_header64(DumpState *s, Error **errp) + dh->status = cpu_to_dump32(s, status); + + if (write_buffer(s->fd, 0, dh, size) < 0) { +- dump_error(s, "dump: failed to write disk dump header", errp); ++ error_setg(errp, "dump: failed to write disk dump header"); + goto out; + } + +@@ -889,7 +876,7 @@ static void create_header64(DumpState *s, Error **errp) + + if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + block_size, kh, size) < 0) { +- dump_error(s, "dump: failed to write kdump sub header", errp); ++ error_setg(errp, "dump: failed to write kdump sub header"); + goto out; + } + +@@ -906,7 +893,7 @@ static void create_header64(DumpState *s, Error **errp) + + if (write_buffer(s->fd, offset_note, s->note_buf, + s->note_size) < 0) { +- dump_error(s, "dump: failed to write notes", errp); ++ error_setg(errp, "dump: failed to write notes"); + goto out; + } + +@@ -1092,7 +1079,7 @@ static void write_dump_bitmap(DumpState *s, Error **errp) + while (get_next_page(&block_iter, &pfn, NULL, s)) { + ret = set_dump_bitmap(last_pfn, pfn, true, dump_bitmap_buf, s); + if (ret < 0) { +- dump_error(s, "dump: failed to set dump_bitmap", errp); ++ error_setg(errp, "dump: failed to set dump_bitmap"); + goto out; + } + +@@ -1109,7 +1096,7 @@ static void write_dump_bitmap(DumpState *s, Error **errp) + ret = set_dump_bitmap(last_pfn, last_pfn + bits_per_buf, false, + dump_bitmap_buf, s); + if (ret < 0) { +- dump_error(s, "dump: failed to sync dump_bitmap", errp); ++ error_setg(errp, "dump: failed to sync dump_bitmap"); + goto out; + } + } +@@ -1242,7 +1229,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + ret = write_cache(&page_data, buf, s->dump_info.page_size, false); + g_free(buf); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data (zero page)", errp); ++ error_setg(errp, "dump: failed to write page data (zero page)"); + goto out; + } + +@@ -1258,7 +1245,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + ret = write_cache(&page_desc, &pd_zero, sizeof(PageDescriptor), + false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page desc", errp); ++ error_setg(errp, "dump: failed to write page desc"); + goto out; + } + } else { +@@ -1283,7 +1270,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data", errp); ++ error_setg(errp, "dump: failed to write page data"); + goto out; + } + #ifdef CONFIG_LZO +@@ -1296,7 +1283,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data", errp); ++ error_setg(errp, "dump: failed to write page data"); + goto out; + } + #endif +@@ -1310,7 +1297,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + + ret = write_cache(&page_data, buf_out, size_out, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data", errp); ++ error_setg(errp, "dump: failed to write page data"); + goto out; + } + #endif +@@ -1326,7 +1313,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + ret = write_cache(&page_data, buf, + s->dump_info.page_size, false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page data", errp); ++ error_setg(errp, "dump: failed to write page data"); + goto out; + } + } +@@ -1338,7 +1325,7 @@ static void write_dump_pages(DumpState *s, Error **errp) + + ret = write_cache(&page_desc, &pd, sizeof(PageDescriptor), false); + if (ret < 0) { +- dump_error(s, "dump: failed to write page desc", errp); ++ error_setg(errp, "dump: failed to write page desc"); + goto out; + } + } +@@ -1346,12 +1333,12 @@ static void write_dump_pages(DumpState *s, Error **errp) + + ret = write_cache(&page_desc, NULL, 0, true); + if (ret < 0) { +- dump_error(s, "dump: failed to sync cache for page_desc", errp); ++ error_setg(errp, "dump: failed to sync cache for page_desc"); + goto out; + } + ret = write_cache(&page_data, NULL, 0, true); + if (ret < 0) { +- dump_error(s, "dump: failed to sync cache for page_data", errp); ++ error_setg(errp, "dump: failed to sync cache for page_data"); + goto out; + } + +@@ -1395,7 +1382,7 @@ static void create_kdump_vmcore(DumpState *s, Error **errp) + + ret = write_start_flat_header(s->fd); + if (ret < 0) { +- dump_error(s, "dump: failed to write start flat header", errp); ++ error_setg(errp, "dump: failed to write start flat header"); + return; + } + +@@ -1419,11 +1406,9 @@ static void create_kdump_vmcore(DumpState *s, Error **errp) + + ret = write_end_flat_header(s->fd); + if (ret < 0) { +- dump_error(s, "dump: failed to write end flat header", errp); ++ error_setg(errp, "dump: failed to write end flat header"); + return; + } +- +- dump_completed(s); + } + + static ram_addr_t get_start_block(DumpState *s) +@@ -1711,6 +1696,7 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + create_vmcore(s, errp); + } + ++ dump_cleanup(s); + g_free(s); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory-disable-dump-when-in-INMIGRATE-sta.patch b/SOURCES/kvm-dump-guest-memory-disable-dump-when-in-INMIGRATE-sta.patch new file mode 100644 index 0000000..d136b16 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory-disable-dump-when-in-INMIGRATE-sta.patch @@ -0,0 +1,50 @@ +From 10a4f18fb24f6d005e00828018f38285347b6fd8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:58 +0100 +Subject: [PATCH 27/41] dump-guest-memory: disable dump when in INMIGRATE state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-28-marcandre.lureau@redhat.com> +Patchwork-id: 78381 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 27/41] dump-guest-memory: disable dump when in INMIGRATE state +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Peter Xu + +Signed-off-by: Peter Xu +Reviewed-by: Fam Zheng +Message-Id: <1455772616-8668-7-git-send-email-peterx@redhat.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 63e27f28f281986de791f099efa4fa15cc47f4fc) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/dump.c b/dump.c +index 4bce6cf..8618230 100644 +--- a/dump.c ++++ b/dump.c +@@ -1658,6 +1658,11 @@ void qmp_dump_guest_memory(bool paging, const char *file, + DumpState *s; + Error *local_err = NULL; + ++ if (runstate_check(RUN_STATE_INMIGRATE)) { ++ error_setg(errp, "Dump not allowed during incoming migration."); ++ return; ++ } ++ + /* if there is a dump in background, we should wait until the dump + * finished */ + if (dump_in_progress()) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory-introduce-dump_process-helper-func.patch b/SOURCES/kvm-dump-guest-memory-introduce-dump_process-helper-func.patch new file mode 100644 index 0000000..efb6d52 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory-introduce-dump_process-helper-func.patch @@ -0,0 +1,115 @@ +From b67ef65a1f5d8ceb02ca11c0af92d2c06fd006cb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:57 +0100 +Subject: [PATCH 26/41] dump-guest-memory: introduce dump_process() helper + function. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-27-marcandre.lureau@redhat.com> +Patchwork-id: 78375 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 26/41] dump-guest-memory: introduce dump_process() helper function. +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Peter Xu + +No functional change. Cleanup only. + +Signed-off-by: Peter Xu +Reviewed-by: Fam Zheng +Message-Id: <1455772616-8668-6-git-send-email-peterx@redhat.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit ca1fc8c97e9f26690b1ddbbbced5bafb3d65f6b5) + +RHEL: minor conflict due to "detach" mode not being backported. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 35 +++++++++++++++++++++++------------ + include/sysemu/dump.h | 3 +++ + 2 files changed, 26 insertions(+), 12 deletions(-) + +diff --git a/dump.c b/dump.c +index 639d52a..4bce6cf 100644 +--- a/dump.c ++++ b/dump.c +@@ -1470,6 +1470,9 @@ static void dump_init(DumpState *s, int fd, bool has_format, + Error *err = NULL; + int ret; + ++ s->has_format = has_format; ++ s->format = format; ++ + /* kdump-compressed is conflict with paging and filter */ + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { + assert(!paging && !has_filter); +@@ -1628,8 +1631,25 @@ cleanup: + dump_cleanup(s); + } + +-void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, +- int64_t begin, bool has_length, ++/* this operation might be time consuming. */ ++static void dump_process(DumpState *s, Error **errp) ++{ ++ Error *local_err = NULL; ++ ++ if (s->has_format && s->format != DUMP_GUEST_MEMORY_FORMAT_ELF) { ++ create_kdump_vmcore(s, &local_err); ++ } else { ++ create_vmcore(s, &local_err); ++ } ++ ++ s->status = (local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED); ++ error_propagate(errp, local_err); ++ ++ dump_cleanup(s); ++} ++ ++void qmp_dump_guest_memory(bool paging, const char *file, ++ bool has_begin, int64_t begin, bool has_length, + int64_t length, bool has_format, + DumpGuestMemoryFormat format, Error **errp) + { +@@ -1712,16 +1732,7 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + return; + } + +- if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +- create_kdump_vmcore(s, &local_err); +- } else { +- create_vmcore(s, &local_err); +- } +- +- s->status = (local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED); +- error_propagate(errp, local_err); +- +- dump_cleanup(s); ++ dump_process(s, errp); + } + + DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp) +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 21fc02d..1da3ddb 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -178,6 +178,9 @@ typedef struct DumpState { + size_t num_dumpable; /* number of page that can be dumped */ + uint32_t flag_compress; /* indicate the compression format */ + DumpStatus status; /* current dump status */ ++ ++ bool has_format; /* whether format is provided */ ++ DumpGuestMemoryFormat format; /* valid only if has_format == true */ + } DumpState; + + uint16_t cpu_to_dump16(DumpState *s, uint16_t val); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory-using-static-DumpState-add-DumpSta.patch b/SOURCES/kvm-dump-guest-memory-using-static-DumpState-add-DumpSta.patch new file mode 100644 index 0000000..c24cd7b --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory-using-static-DumpState-add-DumpSta.patch @@ -0,0 +1,143 @@ +From 7924dd9493c5b90bb1a10b3b9ec486fa10d87304 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:55 +0100 +Subject: [PATCH 24/41] dump-guest-memory: using static DumpState, add + DumpStatus +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-25-marcandre.lureau@redhat.com> +Patchwork-id: 78373 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 24/41] dump-guest-memory: using static DumpState, add DumpStatus +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Peter Xu + +Instead of malloc/free each time for DumpState, make it +static. Added DumpStatus to show status for dump. + +This is to be used for detached dump. + +Signed-off-by: Peter Xu +Reviewed-by: Fam Zheng +Message-Id: <1455772616-8668-4-git-send-email-peterx@redhat.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit baf28f57e2dec63eebfcd3c00f8d4dea9fcde21e) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 21 ++++++++++++++++----- + include/sysemu/dump.h | 2 ++ + qapi-schema.json | 18 ++++++++++++++++++ + 3 files changed, 36 insertions(+), 5 deletions(-) + +diff --git a/dump.c b/dump.c +index 790bfe4..254c0ba 100644 +--- a/dump.c ++++ b/dump.c +@@ -1447,6 +1447,14 @@ static void get_max_mapnr(DumpState *s) + s->max_mapnr = dump_paddr_to_pfn(s, last_block->target_end); + } + ++static DumpState dump_state_global = { .status = DUMP_STATUS_NONE }; ++ ++static void dump_state_prepare(DumpState *s) ++{ ++ /* zero the struct, setting status to active */ ++ *s = (DumpState) { .status = DUMP_STATUS_ACTIVE }; ++} ++ + static void dump_init(DumpState *s, int fd, bool has_format, + DumpGuestMemoryFormat format, bool paging, bool has_filter, + int64_t begin, int64_t length, Error **errp) +@@ -1680,24 +1688,27 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + return; + } + +- s = g_malloc0(sizeof(DumpState)); ++ s = &dump_state_global; ++ dump_state_prepare(s); + + dump_init(s, fd, has_format, format, paging, has_begin, + begin, length, &local_err); + if (local_err) { +- g_free(s); + error_propagate(errp, local_err); ++ s->status = DUMP_STATUS_FAILED; + return; + } + + if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { +- create_kdump_vmcore(s, errp); ++ create_kdump_vmcore(s, &local_err); + } else { +- create_vmcore(s, errp); ++ create_vmcore(s, &local_err); + } + ++ s->status = (local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED); ++ error_propagate(errp, local_err); ++ + dump_cleanup(s); +- g_free(s); + } + + DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **errp) +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index 2f04b24..21fc02d 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -38,6 +38,7 @@ + + #include "sysemu/dump-arch.h" + #include "sysemu/memory_mapping.h" ++#include "qapi-types.h" + + typedef struct QEMU_PACKED MakedumpfileHeader { + char signature[16]; /* = "makedumpfile" */ +@@ -176,6 +177,7 @@ typedef struct DumpState { + off_t offset_page; /* offset of page part in vmcore */ + size_t num_dumpable; /* number of page that can be dumped */ + uint32_t flag_compress; /* indicate the compression format */ ++ DumpStatus status; /* current dump status */ + } DumpState; + + uint16_t cpu_to_dump16(DumpState *s, uint16_t val); +diff --git a/qapi-schema.json b/qapi-schema.json +index 5138ed9..7988ae5 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -2646,6 +2646,24 @@ + '*length': 'int', '*format': 'DumpGuestMemoryFormat' } } + + ## ++# @DumpStatus ++# ++# Describe the status of a long-running background guest memory dump. ++# ++# @none: no dump-guest-memory has started yet. ++# ++# @active: there is one dump running in background. ++# ++# @completed: the last dump has finished successfully. ++# ++# @failed: the last dump has failed. ++# ++# Since 2.6 ++## ++{ 'enum': 'DumpStatus', ++ 'data': [ 'none', 'active', 'completed', 'failed' ] } ++ ++## + # @DumpGuestMemoryCapability: + # + # A list of the available formats for dump-guest-memory +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory.py-fix-No-symbol-vmcoreinfo_find.patch b/SOURCES/kvm-dump-guest-memory.py-fix-No-symbol-vmcoreinfo_find.patch new file mode 100644 index 0000000..182ecf7 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory.py-fix-No-symbol-vmcoreinfo_find.patch @@ -0,0 +1,65 @@ +From 6d5a6268d535d641147f16a5d0343beadaaab3d9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:11 +0100 +Subject: [PATCH 40/41] dump-guest-memory.py: fix No symbol "vmcoreinfo_find" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-41-marcandre.lureau@redhat.com> +Patchwork-id: 78390 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 40/41] dump-guest-memory.py: fix No symbol "vmcoreinfo_find" +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +When qemu is compiled without debug, the dump gdb python script can fail with: + +Error occurred in Python command: No symbol "vmcoreinfo_find" in current context. + +Because vmcoreinfo_find() is inlined and not exported. + +Use the underlying object_resolve_path_type() to get the instance instead. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Laszlo Ersek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit d36d0a9d152316a41e02c2613a71f5859f407da1) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 471aa73..12b9b7d 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -546,13 +546,15 @@ shape and this command should mostly work.""" + return None + + def add_vmcoreinfo(self): +- if not gdb.parse_and_eval("vmcoreinfo_find()") \ +- or not gdb.parse_and_eval("vmcoreinfo_find()->has_vmcoreinfo"): ++ vmci = '(VMCoreInfoState *)' + \ ++ 'object_resolve_path_type("", "vmcoreinfo", 0)' ++ if not gdb.parse_and_eval("%s" % vmci) \ ++ or not gdb.parse_and_eval("(%s)->has_vmcoreinfo" % vmci): + return + +- fmt = gdb.parse_and_eval("vmcoreinfo_find()->vmcoreinfo.guest_format") +- addr = gdb.parse_and_eval("vmcoreinfo_find()->vmcoreinfo.paddr") +- size = gdb.parse_and_eval("vmcoreinfo_find()->vmcoreinfo.size") ++ fmt = gdb.parse_and_eval("(%s)->vmcoreinfo.guest_format" % vmci) ++ addr = gdb.parse_and_eval("(%s)->vmcoreinfo.paddr" % vmci) ++ size = gdb.parse_and_eval("(%s)->vmcoreinfo.size" % vmci) + + fmt = le16_to_cpu(fmt) + addr = le64_to_cpu(addr) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory.py-fix-You-can-t-do-that-without-a.patch b/SOURCES/kvm-dump-guest-memory.py-fix-You-can-t-do-that-without-a.patch new file mode 100644 index 0000000..557d5cc --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory.py-fix-You-can-t-do-that-without-a.patch @@ -0,0 +1,91 @@ +From c42ed2abf0e58a0c4cf069f52756bfa412794d15 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:12 +0100 +Subject: [PATCH 41/41] dump-guest-memory.py: fix "You can't do that without a + process to debug" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-42-marcandre.lureau@redhat.com> +Patchwork-id: 78391 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 41/41] dump-guest-memory.py: fix "You can't do that without a process to debug" +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +Upstream-status: <20171212172208.13588-1-marcandre.lureau@redhat.com> +(reviewed, pending for release and merge window to open) + +If the script is run with a core (no running process), it produces an +error: + +(gdb) dump-guest-memory /tmp/vmcore X86_64 +guest RAM blocks: +target_start target_end host_addr message count +---------------- ---------------- ---------------- ------- ----- +0000000000000000 00000000000a0000 00007f7935800000 added 1 +00000000000a0000 00000000000b0000 00007f7934200000 added 2 +00000000000c0000 00000000000ca000 00007f79358c0000 added 3 +00000000000ca000 00000000000cd000 00007f79358ca000 joined 3 +00000000000cd000 00000000000e8000 00007f79358cd000 joined 3 +00000000000e8000 00000000000f0000 00007f79358e8000 joined 3 +00000000000f0000 0000000000100000 00007f79358f0000 joined 3 +0000000000100000 0000000080000000 00007f7935900000 joined 3 +00000000fd000000 00000000fe000000 00007f7934200000 added 4 +00000000fffc0000 0000000100000000 00007f7935600000 added 5 +Python Exception You can't do that without a process to debug.: +Error occurred in Python command: You can't do that without a process +to debug. + +Replace the object_resolve_path_type() function call with a local +volatile variable. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vmcoreinfo.c | 3 +++ + scripts/dump-guest-memory.py | 3 +-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c +index fa5f610..65b5755 100644 +--- a/hw/misc/vmcoreinfo.c ++++ b/hw/misc/vmcoreinfo.c +@@ -35,6 +35,8 @@ static void vmcoreinfo_realize(DeviceState *dev, Error **errp) + { + VMCoreInfoState *s = VMCOREINFO(dev); + FWCfgState *fw_cfg = fw_cfg_find(); ++ /* for gdb script dump-guest-memory.py */ ++ static VMCoreInfoState * volatile vmcoreinfo_state G_GNUC_UNUSED; + + /* Given that this function is executing, there is at least one VMCOREINFO + * device. Check if there are several. +@@ -57,6 +59,7 @@ static void vmcoreinfo_realize(DeviceState *dev, Error **errp) + false); + + qemu_register_reset(vmcoreinfo_reset, dev); ++ vmcoreinfo_state = s; + } + + static const VMStateDescription vmstate_vmcoreinfo = { +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 12b9b7d..8a13db0 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -546,8 +546,7 @@ shape and this command should mostly work.""" + return None + + def add_vmcoreinfo(self): +- vmci = '(VMCoreInfoState *)' + \ +- 'object_resolve_path_type("", "vmcoreinfo", 0)' ++ vmci = 'vmcoreinfo_realize::vmcoreinfo_state' + if not gdb.parse_and_eval("%s" % vmci) \ + or not gdb.parse_and_eval("(%s)->has_vmcoreinfo" % vmci): + return +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-guest-memory.py-fix-python-2-support.patch b/SOURCES/kvm-dump-guest-memory.py-fix-python-2-support.patch new file mode 100644 index 0000000..8007950 --- /dev/null +++ b/SOURCES/kvm-dump-guest-memory.py-fix-python-2-support.patch @@ -0,0 +1,59 @@ +From 8bd9fce5250f9abcca1e80afb5425bcf6e867b28 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Mon, 22 Jan 2018 14:04:40 +0100 +Subject: [PATCH 2/3] dump-guest-memory.py: fix python 2 support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20180122140440.24988-1-marcandre.lureau@redhat.com> +Patchwork-id: 78692 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v2] dump-guest-memory.py: fix python 2 support +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +Python GDB support may use Python 2 or 3. + +Inferior.read_memory() may return a 'buffer' with Python 2 or a +'memoryview' with Python 3 (see also +https://sourceware.org/gdb/onlinedocs/gdb/Inferiors-In-Python.html) + +The elf.add_vmcoreinfo_note() method expects a "bytes" object. Wrap +the returned memory with bytes(), which works with both 'memoryview' +and 'buffer'. + +Fixes a regression introduced with commit +d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo"). + +Suggested-by: Peter Maydell +Signed-off-by: Marc-André Lureau +Acked-by: Laszlo Ersek +Reviewed-by: Eric Blake + +(cherry picked from commit 6f49ec4034e55dfb675a56a62c9579384f7fb8cc) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 8a13db0..adb942e 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -564,7 +564,7 @@ shape and this command should mostly work.""" + + vmcoreinfo = self.phys_memory_read(addr, size) + if vmcoreinfo: +- self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes()) ++ self.elf.add_vmcoreinfo_note(bytes(vmcoreinfo)) + + def invoke(self, args, from_tty): + """Handles command invocation from gdb.""" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-hoist-lzo_init-from-get_len_buf_out-to-dump_ini.patch b/SOURCES/kvm-dump-hoist-lzo_init-from-get_len_buf_out-to-dump_ini.patch new file mode 100644 index 0000000..065c246 --- /dev/null +++ b/SOURCES/kvm-dump-hoist-lzo_init-from-get_len_buf_out-to-dump_ini.patch @@ -0,0 +1,70 @@ +From 83178d872394db83d8e4cc91f34edd7c2af43bc2 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:12 +0100 +Subject: [PATCH 25/41] dump: hoist lzo_init() from get_len_buf_out() to + dump_init() + +Message-id: <1415380693-16593-26-git-send-email-lersek@redhat.com> +Patchwork-id: 62208 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 25/26] dump: hoist lzo_init() from get_len_buf_out() to dump_init() +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +qmp_dump_guest_memory() + dump_init() + lzo_init() <---------+ + create_kdump_vmcore() | + write_dump_pages() | + get_len_buf_out() | + lzo_init() ------+ + +This patch doesn't change the fact that lzo_init() is called for every +LZO-compressed dump, but it makes get_len_buf_out() more focused (single +responsibility). + +Suggested-by: Paolo Bonzini +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit c998acb03df614ddf2f3e206582586f191d07fff) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +diff --git a/dump.c b/dump.c +index 450f658..f980354 100644 +--- a/dump.c ++++ b/dump.c +@@ -1237,13 +1237,6 @@ static size_t get_len_buf_out(size_t page_size, uint32_t flag_compress) + + /* buf size for lzo */ + #ifdef CONFIG_LZO +- if (flag_compress & DUMP_DH_COMPRESSED_LZO) { +- if (lzo_init() != LZO_E_OK) { +- /* return 0 to indicate lzo is unavailable */ +- return 0; +- } +- } +- + /* + * LZO will expand incompressible data by a little amount. please check the + * following URL to see the expansion calculation: +@@ -1631,6 +1624,12 @@ static int dump_init(DumpState *s, int fd, bool has_format, + break; + + case DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO: ++#ifdef CONFIG_LZO ++ if (lzo_init() != LZO_E_OK) { ++ error_setg(errp, "failed to initialize the LZO library"); ++ goto cleanup; ++ } ++#endif + s->flag_compress = DUMP_DH_COMPRESSED_LZO; + break; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-introduce-GuestPhysBlockList.patch b/SOURCES/kvm-dump-introduce-GuestPhysBlockList.patch new file mode 100644 index 0000000..5455783 --- /dev/null +++ b/SOURCES/kvm-dump-introduce-GuestPhysBlockList.patch @@ -0,0 +1,186 @@ +From 0c26814e42d1090b3ad3a20ca97b5a74accee7e9 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:38 +0200 +Subject: dump: introduce GuestPhysBlockList + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-9-git-send-email-lersek@redhat.com> +Patchwork-id: 53166 +O-Subject: [RHEL-7 qemu-kvm PATCH 08/10] dump: introduce GuestPhysBlockList +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +The vmcore must use physical addresses that are visible to the guest, not +addresses that point into linear RAMBlocks. As first step, introduce the +list type into which we'll collect the physical mappings in effect at the +time of the dump. + +Related RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=981582 + +Signed-off-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 5ee163e8ea2fb6610339f494e039159e08a69066) + +Conflicts: + + dump.c + memory_mapping.c + +The conflicts are due to RHEL-7 not having upstream commit 182735ef ("cpu: +Make first_cpu and next_cpu CPUState"), whose backport I rejected due to +its many dependencies. + +diff --git a/dump.c b/dump.c +index cbfad1c..351233b 100644 +--- a/dump.c ++++ b/dump.c +@@ -59,6 +59,7 @@ static uint64_t cpu_convert_to_target64(uint64_t val, int endian) + } + + typedef struct DumpState { ++ GuestPhysBlockList guest_phys_blocks; + ArchDumpInfo dump_info; + MemoryMappingList list; + uint16_t phdr_num; +@@ -81,6 +82,7 @@ static int dump_cleanup(DumpState *s) + { + int ret = 0; + ++ guest_phys_blocks_free(&s->guest_phys_blocks); + memory_mapping_list_free(&s->list); + if (s->fd != -1) { + close(s->fd); +@@ -732,31 +734,34 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + s->resume = false; + } + ++ /* If we use KVM, we should synchronize the registers before we get dump ++ * info or physmap info. ++ */ ++ cpu_synchronize_all_states(); ++ nr_cpus = 0; ++ for (env = first_cpu; env != NULL; env = env->next_cpu) { ++ nr_cpus++; ++ } ++ + s->errp = errp; + s->fd = fd; + s->has_filter = has_filter; + s->begin = begin; + s->length = length; ++ ++ guest_phys_blocks_init(&s->guest_phys_blocks); ++ /* FILL LIST */ ++ + s->start = get_start_block(s); + if (s->start == -1) { + error_set(errp, QERR_INVALID_PARAMETER, "begin"); + goto cleanup; + } + +- /* +- * get dump info: endian, class and architecture. ++ /* get dump info: endian, class and architecture. + * If the target architecture is not supported, cpu_get_dump_info() will + * return -1. +- * +- * If we use KVM, we should synchronize the registers before we get dump +- * info. + */ +- cpu_synchronize_all_states(); +- nr_cpus = 0; +- for (env = first_cpu; env != NULL; env = env->next_cpu) { +- nr_cpus++; +- } +- + ret = cpu_get_dump_info(&s->dump_info); + if (ret < 0) { + error_set(errp, QERR_UNSUPPORTED); +@@ -831,6 +836,8 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + return 0; + + cleanup: ++ guest_phys_blocks_free(&s->guest_phys_blocks); ++ + if (s->resume) { + vm_start(); + } +@@ -878,7 +885,7 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + return; + } + +- s = g_malloc(sizeof(DumpState)); ++ s = g_malloc0(sizeof(DumpState)); + + ret = dump_init(s, fd, paging, has_begin, begin, length, errp); + if (ret < 0) { +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index 6dfb68d..d2d06cd 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -17,6 +17,25 @@ + #include "qemu/queue.h" + #include "qemu/typedefs.h" + ++typedef struct GuestPhysBlock { ++ /* visible to guest, reflects PCI hole, etc */ ++ hwaddr target_start; ++ ++ /* implies size */ ++ hwaddr target_end; ++ ++ /* points into host memory */ ++ uint8_t *host_addr; ++ ++ QTAILQ_ENTRY(GuestPhysBlock) next; ++} GuestPhysBlock; ++ ++/* point-in-time snapshot of guest-visible physical mappings */ ++typedef struct GuestPhysBlockList { ++ unsigned num; ++ QTAILQ_HEAD(GuestPhysBlockHead, GuestPhysBlock) head; ++} GuestPhysBlockList; ++ + /* The physical and virtual address in the memory mapping are contiguous. */ + typedef struct MemoryMapping { + hwaddr phys_addr; +@@ -45,6 +64,9 @@ void memory_mapping_list_free(MemoryMappingList *list); + + void memory_mapping_list_init(MemoryMappingList *list); + ++void guest_phys_blocks_free(GuestPhysBlockList *list); ++void guest_phys_blocks_init(GuestPhysBlockList *list); ++ + void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp); + + /* get guest's memory mapping without do paging(virtual address is 0). */ +diff --git a/memory_mapping.c b/memory_mapping.c +index 5634f81..78a9829 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -165,6 +165,23 @@ void memory_mapping_list_init(MemoryMappingList *list) + QTAILQ_INIT(&list->head); + } + ++void guest_phys_blocks_free(GuestPhysBlockList *list) ++{ ++ GuestPhysBlock *p, *q; ++ ++ QTAILQ_FOREACH_SAFE(p, &list->head, next, q) { ++ QTAILQ_REMOVE(&list->head, p, next); ++ g_free(p); ++ } ++ list->num = 0; ++} ++ ++void guest_phys_blocks_init(GuestPhysBlockList *list) ++{ ++ list->num = 0; ++ QTAILQ_INIT(&list->head); ++} ++ + static CPUArchState *find_paging_enabled_cpu(CPUArchState *start_cpu) + { + CPUArchState *env; diff --git a/SOURCES/kvm-dump-make-kdump-compressed-format-available-for-dump.patch b/SOURCES/kvm-dump-make-kdump-compressed-format-available-for-dump.patch new file mode 100644 index 0000000..773ad3a --- /dev/null +++ b/SOURCES/kvm-dump-make-kdump-compressed-format-available-for-dump.patch @@ -0,0 +1,345 @@ +From 7cc714c354fc4dbfaeca66156ca331f57bf9653e Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:03 +0100 +Subject: [PATCH 16/41] dump: make kdump-compressed format available for + 'dump-guest-memory' + +Message-id: <1415380693-16593-17-git-send-email-lersek@redhat.com> +Patchwork-id: 62202 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 16/26] dump: make kdump-compressed format available for 'dump-guest-memory' +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +From: qiaonuohan + +Make monitor command 'dump-guest-memory' be able to dump in kdump-compressed +format. The command's usage: + + dump [-p] protocol [begin] [length] [format] + +'format' is used to specified the format of vmcore and can be: +1. 'elf': ELF format, without compression +2. 'kdump-zlib': kdump-compressed format, with zlib-compressed +3. 'kdump-lzo': kdump-compressed format, with lzo-compressed +4. 'kdump-snappy': kdump-compressed format, with snappy-compressed +Without 'format' being set, it is same as 'elf'. And if non-elf format is +specified, paging and filter is not allowed. + +Note: + 1. The kdump-compressed format is readable only with the crash utility and + makedumpfile, and it can be smaller than the ELF format because of the + compression support. + 2. The kdump-compressed format is the 6th edition. + +Signed-off-by: Qiao Nuohan +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit b53ccc30c40df52d192e469a86c188a8649c6df3) +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + dump.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- + hmp.c | 5 ++- + qapi-schema.json | 25 ++++++++++- + qmp-commands.hx | 7 ++- + 4 files changed, 158 insertions(+), 10 deletions(-) + +diff --git a/dump.c b/dump.c +index fc5530f..c0d5877 100644 +--- a/dump.c ++++ b/dump.c +@@ -1449,6 +1449,64 @@ out: + return ret; + } + ++static int create_kdump_vmcore(DumpState *s) ++{ ++ int ret; ++ ++ /* ++ * the kdump-compressed format is: ++ * File offset ++ * +------------------------------------------+ 0x0 ++ * | main header (struct disk_dump_header) | ++ * |------------------------------------------+ block 1 ++ * | sub header (struct kdump_sub_header) | ++ * |------------------------------------------+ block 2 ++ * | 1st-dump_bitmap | ++ * |------------------------------------------+ block 2 + X blocks ++ * | 2nd-dump_bitmap | (aligned by block) ++ * |------------------------------------------+ block 2 + 2 * X blocks ++ * | page desc for pfn 0 (struct page_desc) | (aligned by block) ++ * | page desc for pfn 1 (struct page_desc) | ++ * | : | ++ * |------------------------------------------| (not aligned by block) ++ * | page data (pfn 0) | ++ * | page data (pfn 1) | ++ * | : | ++ * +------------------------------------------+ ++ */ ++ ++ ret = write_start_flat_header(s->fd); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write start flat header.\n"); ++ return -1; ++ } ++ ++ ret = write_dump_header(s); ++ if (ret < 0) { ++ return -1; ++ } ++ ++ ret = write_dump_bitmap(s); ++ if (ret < 0) { ++ return -1; ++ } ++ ++ ret = write_dump_pages(s); ++ if (ret < 0) { ++ return -1; ++ } ++ ++ ret = write_end_flat_header(s->fd); ++ if (ret < 0) { ++ dump_error(s, "dump: failed to write end flat header.\n"); ++ return -1; ++ } ++ ++ dump_completed(s); ++ ++ return 0; ++} ++ + static ram_addr_t get_start_block(DumpState *s) + { + GuestPhysBlock *block; +@@ -1485,7 +1543,8 @@ static void get_max_mapnr(DumpState *s) + s->max_mapnr = paddr_to_pfn(last_block->target_end, s->page_shift); + } + +-static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, ++static int dump_init(DumpState *s, int fd, bool has_format, ++ DumpGuestMemoryFormat format, bool paging, bool has_filter, + int64_t begin, int64_t length, Error **errp) + { + CPUArchState *env; +@@ -1493,6 +1552,11 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + Error *err = NULL; + int ret; + ++ /* kdump-compressed is conflict with paging and filter */ ++ if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { ++ assert(!paging && !has_filter); ++ } ++ + if (runstate_is_running()) { + vm_stop(RUN_STATE_SAVE_VM); + s->resume = true; +@@ -1563,6 +1627,28 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + tmp = DIV_ROUND_UP(DIV_ROUND_UP(s->max_mapnr, CHAR_BIT), s->page_size); + s->len_dump_bitmap = tmp * s->page_size; + ++ /* init for kdump-compressed format */ ++ if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { ++ switch (format) { ++ case DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB: ++ s->flag_compress = DUMP_DH_COMPRESSED_ZLIB; ++ break; ++ ++ case DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO: ++ s->flag_compress = DUMP_DH_COMPRESSED_LZO; ++ break; ++ ++ case DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY: ++ s->flag_compress = DUMP_DH_COMPRESSED_SNAPPY; ++ break; ++ ++ default: ++ s->flag_compress = 0; ++ } ++ ++ return 0; ++ } ++ + if (s->has_filter) { + memory_mapping_filter(&s->list, s->begin, s->length); + } +@@ -1622,14 +1708,25 @@ cleanup: + } + + void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, +- int64_t begin, bool has_length, int64_t length, +- Error **errp) ++ int64_t begin, bool has_length, ++ int64_t length, bool has_format, ++ DumpGuestMemoryFormat format, Error **errp) + { + const char *p; + int fd = -1; + DumpState *s; + int ret; + ++ /* ++ * kdump-compressed format need the whole memory dumped, so paging or ++ * filter is not supported here. ++ */ ++ if ((has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) && ++ (paging || has_begin || has_length)) { ++ error_setg(errp, "kdump-compressed format doesn't support paging or " ++ "filter"); ++ return; ++ } + if (has_begin && !has_length) { + error_set(errp, QERR_MISSING_PARAMETER, "length"); + return; +@@ -1639,6 +1736,21 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + return; + } + ++ /* check whether lzo/snappy is supported */ ++#ifndef CONFIG_LZO ++ if (has_format && format == DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO) { ++ error_setg(errp, "kdump-lzo is not available now"); ++ return; ++ } ++#endif ++ ++#ifndef CONFIG_SNAPPY ++ if (has_format && format == DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY) { ++ error_setg(errp, "kdump-snappy is not available now"); ++ return; ++ } ++#endif ++ + #if !defined(WIN32) + if (strstart(file, "fd:", &p)) { + fd = monitor_get_fd(cur_mon, p, errp); +@@ -1663,14 +1775,21 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + + s = g_malloc0(sizeof(DumpState)); + +- ret = dump_init(s, fd, paging, has_begin, begin, length, errp); ++ ret = dump_init(s, fd, has_format, format, paging, has_begin, ++ begin, length, errp); + if (ret < 0) { + g_free(s); + return; + } + +- if (create_vmcore(s) < 0 && !error_is_set(s->errp)) { +- error_set(errp, QERR_IO_ERROR); ++ if (has_format && format != DUMP_GUEST_MEMORY_FORMAT_ELF) { ++ if (create_kdump_vmcore(s) < 0 && !error_is_set(s->errp)) { ++ error_set(errp, QERR_IO_ERROR); ++ } ++ } else { ++ if (create_vmcore(s) < 0 && !error_is_set(s->errp)) { ++ error_set(errp, QERR_IO_ERROR); ++ } + } + + g_free(s); +diff --git a/hmp.c b/hmp.c +index b723b26..1805926 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -1195,8 +1195,11 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict) + const char *file = qdict_get_str(qdict, "filename"); + bool has_begin = qdict_haskey(qdict, "begin"); + bool has_length = qdict_haskey(qdict, "length"); ++ /* kdump-compressed format is not supported for HMP */ ++ bool has_format = false; + int64_t begin = 0; + int64_t length = 0; ++ enum DumpGuestMemoryFormat dump_format = DUMP_GUEST_MEMORY_FORMAT_ELF; + char *prot; + + if (has_begin) { +@@ -1209,7 +1212,7 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict) + prot = g_strconcat("file:", file, NULL); + + qmp_dump_guest_memory(paging, prot, has_begin, begin, has_length, length, +- &errp); ++ has_format, dump_format, &errp); + hmp_handle_error(mon, &errp); + g_free(prot); + } +diff --git a/qapi-schema.json b/qapi-schema.json +index d3d4e57..8f81c76 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -2578,6 +2578,24 @@ + { 'command': 'device_del', 'data': {'id': 'str'} } + + ## ++# @DumpGuestMemoryFormat: ++# ++# An enumeration of guest-memory-dump's format. ++# ++# @elf: elf format ++# ++# @kdump-zlib: kdump-compressed format with zlib-compressed ++# ++# @kdump-lzo: kdump-compressed format with lzo-compressed ++# ++# @kdump-snappy: kdump-compressed format with snappy-compressed ++# ++# Since: 2.0 ++## ++{ 'enum': 'DumpGuestMemoryFormat', ++ 'data': [ 'elf', 'kdump-zlib', 'kdump-lzo', 'kdump-snappy' ] } ++ ++## + # @dump-guest-memory + # + # Dump guest's memory to vmcore. It is a synchronous operation that can take +@@ -2613,13 +2631,18 @@ + # want to dump all guest's memory, please specify the start @begin + # and @length + # ++# @format: #optional if specified, the format of guest memory dump. But non-elf ++# format is conflict with paging and filter, ie. @paging, @begin and ++# @length is not allowed to be specified with non-elf @format at the ++# same time (since 2.0) ++# + # Returns: nothing on success + # + # Since: 1.2 + ## + { 'command': 'dump-guest-memory', + 'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int', +- '*length': 'int' } } ++ '*length': 'int', '*format': 'DumpGuestMemoryFormat' } } + + ## + # @netdev_add: +diff --git a/qmp-commands.hx b/qmp-commands.hx +index e164ff8..61aa3bf 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -885,8 +885,8 @@ EQMP + + { + .name = "dump-guest-memory", +- .args_type = "paging:b,protocol:s,begin:i?,end:i?", +- .params = "-p protocol [begin] [length]", ++ .args_type = "paging:b,protocol:s,begin:i?,end:i?,format:s?", ++ .params = "-p protocol [begin] [length] [format]", + .help = "dump guest memory to file", + .user_print = monitor_user_noop, + .mhandler.cmd_new = qmp_marshal_input_dump_guest_memory, +@@ -907,6 +907,9 @@ Arguments: + with length together (json-int) + - "length": the memory size, in bytes. It's optional, and should be specified + with begin together (json-int) ++- "format": the format of guest memory dump. It's optional, and can be ++ elf|kdump-zlib|kdump-lzo|kdump-snappy, but non-elf formats will ++ conflict with paging and filter, ie. begin and length (json-string) + + Example: + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-populate-guest_phys_blocks.patch b/SOURCES/kvm-dump-populate-guest_phys_blocks.patch new file mode 100644 index 0000000..e0a2885 --- /dev/null +++ b/SOURCES/kvm-dump-populate-guest_phys_blocks.patch @@ -0,0 +1,174 @@ +From f13968b5693d5316f4904cdc32b4327b3974fcc6 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:39 +0200 +Subject: dump: populate guest_phys_blocks + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-10-git-send-email-lersek@redhat.com> +Patchwork-id: 53167 +O-Subject: [RHEL-7 qemu-kvm PATCH 09/10] dump: populate guest_phys_blocks +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +While the machine is paused, in guest_phys_blocks_append() we register a +one-shot MemoryListener, solely for the initial collection of the valid +guest-physical memory ranges that happens at listener registration time. + +For each range that is reported to guest_phys_blocks_region_add(), we +attempt to merge the range with the preceding one. + +Ranges can only be joined if they are contiguous in both guest-physical +address space, and contiguous in host virtual address space. + +The "maximal" ranges that remain in the end constitute the guest-physical +memory map that the dump will be based on. + +Related RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=981582 + +Signed-off-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit c5d7f60f0614250bd925071e25220ce5958f75d0) + +Conflicts: + + memory_mapping.c + +The conflicts are due to RHEL-7 not having: +- upstream commit 182735ef ("cpu: Make first_cpu and next_cpu CPUState"), + whose backport I rejected due to its many dependencies, +- upstream commit 052e87b0 ("memory: make section size a 128-bit + integer"), which seems quite intrusive, and to belong to the middle of a + series. + +diff --git a/dump.c b/dump.c +index 351233b..e6b7a00 100644 +--- a/dump.c ++++ b/dump.c +@@ -750,7 +750,7 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + s->length = length; + + guest_phys_blocks_init(&s->guest_phys_blocks); +- /* FILL LIST */ ++ guest_phys_blocks_append(&s->guest_phys_blocks); + + s->start = get_start_block(s); + if (s->start == -1) { +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index d2d06cd..b2d7d85 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -66,6 +66,7 @@ void memory_mapping_list_init(MemoryMappingList *list); + + void guest_phys_blocks_free(GuestPhysBlockList *list); + void guest_phys_blocks_init(GuestPhysBlockList *list); ++void guest_phys_blocks_append(GuestPhysBlockList *list); + + void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp); + +diff --git a/memory_mapping.c b/memory_mapping.c +index 78a9829..411aba6 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -11,9 +11,15 @@ + * + */ + ++#include ++ + #include "cpu.h" + #include "exec/cpu-all.h" + #include "sysemu/memory_mapping.h" ++#include "exec/memory.h" ++#include "exec/address-spaces.h" ++ ++//#define DEBUG_GUEST_PHYS_REGION_ADD + + static void memory_mapping_list_add_mapping_sorted(MemoryMappingList *list, + MemoryMapping *mapping) +@@ -182,6 +188,84 @@ void guest_phys_blocks_init(GuestPhysBlockList *list) + QTAILQ_INIT(&list->head); + } + ++typedef struct GuestPhysListener { ++ GuestPhysBlockList *list; ++ MemoryListener listener; ++} GuestPhysListener; ++ ++static void guest_phys_blocks_region_add(MemoryListener *listener, ++ MemoryRegionSection *section) ++{ ++ GuestPhysListener *g; ++ uint64_t section_size; ++ hwaddr target_start, target_end; ++ uint8_t *host_addr; ++ GuestPhysBlock *predecessor; ++ ++ /* we only care about RAM */ ++ if (!memory_region_is_ram(section->mr)) { ++ return; ++ } ++ ++ g = container_of(listener, GuestPhysListener, listener); ++ section_size = section->size; ++ target_start = section->offset_within_address_space; ++ target_end = target_start + section_size; ++ host_addr = memory_region_get_ram_ptr(section->mr) + ++ section->offset_within_region; ++ predecessor = NULL; ++ ++ /* find continuity in guest physical address space */ ++ if (!QTAILQ_EMPTY(&g->list->head)) { ++ hwaddr predecessor_size; ++ ++ predecessor = QTAILQ_LAST(&g->list->head, GuestPhysBlockHead); ++ predecessor_size = predecessor->target_end - predecessor->target_start; ++ ++ /* the memory API guarantees monotonically increasing traversal */ ++ g_assert(predecessor->target_end <= target_start); ++ ++ /* we want continuity in both guest-physical and host-virtual memory */ ++ if (predecessor->target_end < target_start || ++ predecessor->host_addr + predecessor_size != host_addr) { ++ predecessor = NULL; ++ } ++ } ++ ++ if (predecessor == NULL) { ++ /* isolated mapping, allocate it and add it to the list */ ++ GuestPhysBlock *block = g_malloc0(sizeof *block); ++ ++ block->target_start = target_start; ++ block->target_end = target_end; ++ block->host_addr = host_addr; ++ ++ QTAILQ_INSERT_TAIL(&g->list->head, block, next); ++ ++g->list->num; ++ } else { ++ /* expand predecessor until @target_end; predecessor's start doesn't ++ * change ++ */ ++ predecessor->target_end = target_end; ++ } ++ ++#ifdef DEBUG_GUEST_PHYS_REGION_ADD ++ fprintf(stderr, "%s: target_start=" TARGET_FMT_plx " target_end=" ++ TARGET_FMT_plx ": %s (count: %u)\n", __FUNCTION__, target_start, ++ target_end, predecessor ? "joined" : "added", g->list->num); ++#endif ++} ++ ++void guest_phys_blocks_append(GuestPhysBlockList *list) ++{ ++ GuestPhysListener g = { 0 }; ++ ++ g.list = list; ++ g.listener.region_add = &guest_phys_blocks_region_add; ++ memory_listener_register(&g.listener, &address_space_memory); ++ memory_listener_unregister(&g.listener); ++} ++ + static CPUArchState *find_paging_enabled_cpu(CPUArchState *start_cpu) + { + CPUArchState *env; diff --git a/SOURCES/kvm-dump-qmp_dump_guest_memory-use-error_setg_file_open.patch b/SOURCES/kvm-dump-qmp_dump_guest_memory-use-error_setg_file_open.patch new file mode 100644 index 0000000..087be1c --- /dev/null +++ b/SOURCES/kvm-dump-qmp_dump_guest_memory-use-error_setg_file_open.patch @@ -0,0 +1,45 @@ +From a434d825ab57df108ada2531d82e428f0b10e203 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:28 +0100 +Subject: [PATCH 09/29] dump: qmp_dump_guest_memory(): use error_setg_file_open() + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-6-git-send-email-lersek@redhat.com> +Patchwork-id: 55195 +O-Subject: [RHEL-7 qemu-kvm PATCH 5/8] dump: qmp_dump_guest_memory(): use error_setg_file_open() +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Acked-by: Kevin Wolf +(cherry picked from commit 7581766b719afd63dcf922ddbf982291f596ed12) +Signed-off-by: Laszlo Ersek +--- + dump.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + dump.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/dump.c b/dump.c +index 0523ad4..b203a8d 100644 +--- a/dump.c ++++ b/dump.c +@@ -874,7 +874,7 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + if (strstart(file, "file:", &p)) { + fd = qemu_open(p, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, S_IRUSR); + if (fd < 0) { +- error_set(errp, QERR_OPEN_FILE_FAILED, p); ++ error_setg_file_open(errp, errno, p); + return; + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-dump-rebase-from-host-private-RAMBlock-offsets-to-guest-physical-addresses.patch b/SOURCES/kvm-dump-rebase-from-host-private-RAMBlock-offsets-to-guest-physical-addresses.patch new file mode 100644 index 0000000..0ca0c95 --- /dev/null +++ b/SOURCES/kvm-dump-rebase-from-host-private-RAMBlock-offsets-to-guest-physical-addresses.patch @@ -0,0 +1,412 @@ +From c67daf48e19c0a73c933d09a4c748cfda8d6d3f2 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:40 +0200 +Subject: dump: rebase from host-private RAMBlock offsets to guest-physical addresses + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-11-git-send-email-lersek@redhat.com> +Patchwork-id: 53168 +O-Subject: [RHEL-7 qemu-kvm PATCH 10/10] dump: rebase from host-private RAMBlock offsets to guest-physical addresses +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +RAMBlock.offset --> GuestPhysBlock.target_start +RAMBlock.offset + RAMBlock.length --> GuestPhysBlock.target_end +RAMBlock.length --> GuestPhysBlock.target_end - + GuestPhysBlock.target_start + +"GuestPhysBlock.host_addr" is only used when writing the dump contents. + +This patch enables "crash" to work with the vmcore by rebasing the vmcore +from the left side of the following diagram to the right side: + +host-private +offset +relative +to ram_addr RAMBlock guest-visible paddrs + 0 +-------------------+.....+-------------------+ 0 + | ^ | | ^ | + | 640 KB | | 640 KB | + | v | | v | + 0x0000a0000 +-------------------+.....+-------------------+ 0x0000a0000 + | ^ | |XXXXXXXXXXXXXXXXXXX| + | 384 KB | |XXXXXXXXXXXXXXXXXXX| + | v | |XXXXXXXXXXXXXXXXXXX| + 0x000100000 +-------------------+.....+-------------------+ 0x000100000 + | ^ | | ^ | + | 3583 MB | | 3583 MB | + | v | | v | + 0x0e0000000 +-------------------+.....+-------------------+ 0x0e0000000 + | ^ |. |XXXXXXXXXXXXXXXXXXX| + | above_4g_mem_size | . |XXXX PCI hole XXXXX| + | v | . |XXXX XXXXX| + ram_size +-------------------+ . |XXXX 512 MB XXXXX| + . .|XXXXXXXXXXXXXXXXXXX| + . +-------------------+ 0x100000000 + . | ^ | + . | above_4g_mem_size | + .| v | + +-------------------+ ram_size + + 512 MB + +Related RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=981582 + +Signed-off-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino +(cherry picked from commit 56c4bfb3f07f3107894c00281276aea4f5e8834d) + +Conflicts: + + memory_mapping.c + stubs/dump.c + target-s390x/arch_dump.c + +The conflicts are due to RHEL-7 not having +- upstream commit 182735ef ("cpu: Make first_cpu and next_cpu CPUState"), + whose backport I rejected due to its many dependencies, +- upstream commit 9b4f38e1 ("s390: Implement dump-guest-memory support for + target s390x") -- we don't support the s390x target. + +diff --git a/dump.c b/dump.c +index e6b7a00..0523ad4 100644 +--- a/dump.c ++++ b/dump.c +@@ -70,7 +70,7 @@ typedef struct DumpState { + hwaddr memory_offset; + int fd; + +- RAMBlock *block; ++ GuestPhysBlock *next_block; + ram_addr_t start; + bool has_filter; + int64_t begin; +@@ -395,14 +395,14 @@ static int write_data(DumpState *s, void *buf, int length) + } + + /* write the memroy to vmcore. 1 page per I/O. */ +-static int write_memory(DumpState *s, RAMBlock *block, ram_addr_t start, ++static int write_memory(DumpState *s, GuestPhysBlock *block, ram_addr_t start, + int64_t size) + { + int64_t i; + int ret; + + for (i = 0; i < size / TARGET_PAGE_SIZE; i++) { +- ret = write_data(s, block->host + start + i * TARGET_PAGE_SIZE, ++ ret = write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, + TARGET_PAGE_SIZE); + if (ret < 0) { + return ret; +@@ -410,7 +410,7 @@ static int write_memory(DumpState *s, RAMBlock *block, ram_addr_t start, + } + + if ((size % TARGET_PAGE_SIZE) != 0) { +- ret = write_data(s, block->host + start + i * TARGET_PAGE_SIZE, ++ ret = write_data(s, block->host_addr + start + i * TARGET_PAGE_SIZE, + size % TARGET_PAGE_SIZE); + if (ret < 0) { + return ret; +@@ -427,7 +427,7 @@ static void get_offset_range(hwaddr phys_addr, + hwaddr *p_offset, + hwaddr *p_filesz) + { +- RAMBlock *block; ++ GuestPhysBlock *block; + hwaddr offset = s->memory_offset; + int64_t size_in_block, start; + +@@ -441,35 +441,34 @@ static void get_offset_range(hwaddr phys_addr, + } + } + +- QTAILQ_FOREACH(block, &ram_list.blocks, next) { ++ QTAILQ_FOREACH(block, &s->guest_phys_blocks.head, next) { + if (s->has_filter) { +- if (block->offset >= s->begin + s->length || +- block->offset + block->length <= s->begin) { ++ if (block->target_start >= s->begin + s->length || ++ block->target_end <= s->begin) { + /* This block is out of the range */ + continue; + } + +- if (s->begin <= block->offset) { +- start = block->offset; ++ if (s->begin <= block->target_start) { ++ start = block->target_start; + } else { + start = s->begin; + } + +- size_in_block = block->length - (start - block->offset); +- if (s->begin + s->length < block->offset + block->length) { +- size_in_block -= block->offset + block->length - +- (s->begin + s->length); ++ size_in_block = block->target_end - start; ++ if (s->begin + s->length < block->target_end) { ++ size_in_block -= block->target_end - (s->begin + s->length); + } + } else { +- start = block->offset; +- size_in_block = block->length; ++ start = block->target_start; ++ size_in_block = block->target_end - block->target_start; + } + + if (phys_addr >= start && phys_addr < start + size_in_block) { + *p_offset = phys_addr - start + offset; + + /* The offset range mapped from the vmcore file must not spill over +- * the RAMBlock, clamp it. The rest of the mapping will be ++ * the GuestPhysBlock, clamp it. The rest of the mapping will be + * zero-filled in memory at load time; see + * . + */ +@@ -617,7 +616,7 @@ static int dump_completed(DumpState *s) + return 0; + } + +-static int get_next_block(DumpState *s, RAMBlock *block) ++static int get_next_block(DumpState *s, GuestPhysBlock *block) + { + while (1) { + block = QTAILQ_NEXT(block, next); +@@ -627,16 +626,16 @@ static int get_next_block(DumpState *s, RAMBlock *block) + } + + s->start = 0; +- s->block = block; ++ s->next_block = block; + if (s->has_filter) { +- if (block->offset >= s->begin + s->length || +- block->offset + block->length <= s->begin) { ++ if (block->target_start >= s->begin + s->length || ++ block->target_end <= s->begin) { + /* This block is out of the range */ + continue; + } + +- if (s->begin > block->offset) { +- s->start = s->begin - block->offset; ++ if (s->begin > block->target_start) { ++ s->start = s->begin - block->target_start; + } + } + +@@ -647,18 +646,18 @@ static int get_next_block(DumpState *s, RAMBlock *block) + /* write all memory to vmcore */ + static int dump_iterate(DumpState *s) + { +- RAMBlock *block; ++ GuestPhysBlock *block; + int64_t size; + int ret; + + while (1) { +- block = s->block; ++ block = s->next_block; + +- size = block->length; ++ size = block->target_end - block->target_start; + if (s->has_filter) { + size -= s->start; +- if (s->begin + s->length < block->offset + block->length) { +- size -= block->offset + block->length - (s->begin + s->length); ++ if (s->begin + s->length < block->target_end) { ++ size -= block->target_end - (s->begin + s->length); + } + } + ret = write_memory(s, block, s->start, size); +@@ -693,23 +692,23 @@ static int create_vmcore(DumpState *s) + + static ram_addr_t get_start_block(DumpState *s) + { +- RAMBlock *block; ++ GuestPhysBlock *block; + + if (!s->has_filter) { +- s->block = QTAILQ_FIRST(&ram_list.blocks); ++ s->next_block = QTAILQ_FIRST(&s->guest_phys_blocks.head); + return 0; + } + +- QTAILQ_FOREACH(block, &ram_list.blocks, next) { +- if (block->offset >= s->begin + s->length || +- block->offset + block->length <= s->begin) { ++ QTAILQ_FOREACH(block, &s->guest_phys_blocks.head, next) { ++ if (block->target_start >= s->begin + s->length || ++ block->target_end <= s->begin) { + /* This block is out of the range */ + continue; + } + +- s->block = block; +- if (s->begin > block->offset) { +- s->start = s->begin - block->offset; ++ s->next_block = block; ++ if (s->begin > block->target_start) { ++ s->start = s->begin - block->target_start; + } else { + s->start = 0; + } +@@ -762,7 +761,7 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + * If the target architecture is not supported, cpu_get_dump_info() will + * return -1. + */ +- ret = cpu_get_dump_info(&s->dump_info); ++ ret = cpu_get_dump_info(&s->dump_info, &s->guest_phys_blocks); + if (ret < 0) { + error_set(errp, QERR_UNSUPPORTED); + goto cleanup; +@@ -778,13 +777,13 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + /* get memory mapping */ + memory_mapping_list_init(&s->list); + if (paging) { +- qemu_get_guest_memory_mapping(&s->list, &err); ++ qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, &err); + if (err != NULL) { + error_propagate(errp, err); + goto cleanup; + } + } else { +- qemu_get_guest_simple_memory_mapping(&s->list); ++ qemu_get_guest_simple_memory_mapping(&s->list, &s->guest_phys_blocks); + } + + if (s->has_filter) { +diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h +index b8c770f..19fafb2 100644 +--- a/include/sysemu/dump.h ++++ b/include/sysemu/dump.h +@@ -20,7 +20,9 @@ typedef struct ArchDumpInfo { + int d_class; /* ELFCLASS32 or ELFCLASS64 */ + } ArchDumpInfo; + +-int cpu_get_dump_info(ArchDumpInfo *info); ++struct GuestPhysBlockList; /* memory_mapping.h */ ++int cpu_get_dump_info(ArchDumpInfo *info, ++ const struct GuestPhysBlockList *guest_phys_blocks); + ssize_t cpu_get_note_size(int class, int machine, int nr_cpus); + + #endif +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index b2d7d85..a75d59a 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -68,10 +68,13 @@ void guest_phys_blocks_free(GuestPhysBlockList *list); + void guest_phys_blocks_init(GuestPhysBlockList *list); + void guest_phys_blocks_append(GuestPhysBlockList *list); + +-void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp); ++void qemu_get_guest_memory_mapping(MemoryMappingList *list, ++ const GuestPhysBlockList *guest_phys_blocks, ++ Error **errp); + + /* get guest's memory mapping without do paging(virtual address is 0). */ +-void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list); ++void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list, ++ const GuestPhysBlockList *guest_phys_blocks); + + void memory_mapping_filter(MemoryMappingList *list, int64_t begin, + int64_t length); +diff --git a/memory_mapping.c b/memory_mapping.c +index 411aba6..65082d8 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -279,10 +279,12 @@ static CPUArchState *find_paging_enabled_cpu(CPUArchState *start_cpu) + return NULL; + } + +-void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp) ++void qemu_get_guest_memory_mapping(MemoryMappingList *list, ++ const GuestPhysBlockList *guest_phys_blocks, ++ Error **errp) + { + CPUArchState *env, *first_paging_enabled_cpu; +- RAMBlock *block; ++ GuestPhysBlock *block; + ram_addr_t offset, length; + + first_paging_enabled_cpu = find_paging_enabled_cpu(first_cpu); +@@ -302,19 +304,21 @@ void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp) + * If the guest doesn't use paging, the virtual address is equal to physical + * address. + */ +- QTAILQ_FOREACH(block, &ram_list.blocks, next) { +- offset = block->offset; +- length = block->length; ++ QTAILQ_FOREACH(block, &guest_phys_blocks->head, next) { ++ offset = block->target_start; ++ length = block->target_end - block->target_start; + create_new_memory_mapping(list, offset, offset, length); + } + } + +-void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list) ++void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list, ++ const GuestPhysBlockList *guest_phys_blocks) + { +- RAMBlock *block; ++ GuestPhysBlock *block; + +- QTAILQ_FOREACH(block, &ram_list.blocks, next) { +- create_new_memory_mapping(list, block->offset, 0, block->length); ++ QTAILQ_FOREACH(block, &guest_phys_blocks->head, next) { ++ create_new_memory_mapping(list, block->target_start, 0, ++ block->target_end - block->target_start); + } + } + +diff --git a/stubs/dump.c b/stubs/dump.c +index b3f42cb..5749e2c 100644 +--- a/stubs/dump.c ++++ b/stubs/dump.c +@@ -24,7 +24,8 @@ void qmp_dump_guest_memory(bool paging, const char *file, bool has_begin, + error_set(errp, QERR_UNSUPPORTED); + } + +-int cpu_get_dump_info(ArchDumpInfo *info) ++int cpu_get_dump_info(ArchDumpInfo *info, ++ const struct GuestPhysBlockList *guest_phys_blocks) + { + return -1; + } +diff --git a/target-i386/arch_dump.c b/target-i386/arch_dump.c +index 83898cd..a99ef8c 100644 +--- a/target-i386/arch_dump.c ++++ b/target-i386/arch_dump.c +@@ -15,6 +15,7 @@ + #include "exec/cpu-all.h" + #include "sysemu/dump.h" + #include "elf.h" ++#include "sysemu/memory_mapping.h" + + #ifdef TARGET_X86_64 + typedef struct { +@@ -388,10 +389,11 @@ int x86_cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cs, + return cpu_write_qemu_note(f, &cpu->env, opaque, 0); + } + +-int cpu_get_dump_info(ArchDumpInfo *info) ++int cpu_get_dump_info(ArchDumpInfo *info, ++ const GuestPhysBlockList *guest_phys_blocks) + { + bool lma = false; +- RAMBlock *block; ++ GuestPhysBlock *block; + + #ifdef TARGET_X86_64 + lma = !!(first_cpu->hflags & HF_LMA_MASK); +@@ -409,8 +411,8 @@ int cpu_get_dump_info(ArchDumpInfo *info) + } else { + info->d_class = ELFCLASS32; + +- QTAILQ_FOREACH(block, &ram_list.blocks, next) { +- if (block->offset + block->length > UINT_MAX) { ++ QTAILQ_FOREACH(block, &guest_phys_blocks->head, next) { ++ if (block->target_end > UINT_MAX) { + /* The memory size is greater than 4G */ + info->d_class = ELFCLASS64; + break; diff --git a/SOURCES/kvm-dump-select-header-bitness-based-on-ELF-class-not-EL.patch b/SOURCES/kvm-dump-select-header-bitness-based-on-ELF-class-not-EL.patch new file mode 100644 index 0000000..5e27e48 --- /dev/null +++ b/SOURCES/kvm-dump-select-header-bitness-based-on-ELF-class-not-EL.patch @@ -0,0 +1,56 @@ +From c4249cf0d89f6a5ba4448eb1ff22f496387d0e50 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:11 +0100 +Subject: [PATCH 24/41] dump: select header bitness based on ELF class, not ELF + architecture + +Message-id: <1415380693-16593-25-git-send-email-lersek@redhat.com> +Patchwork-id: 62212 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 24/26] dump: select header bitness based on ELF class, not ELF architecture +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +The specific ELF architecture (d_machine) carries Too Much Information +(TM) for deciding between create_header32() and create_header64(), use +"d_class" instead (ELFCLASS32 vs. ELFCLASS64). + +This change adapts write_dump_header() to write_elf_loads(), dump_begin() +etc. that also rely on the ELF class of the target for bitness selection. + +Considering the current targets that support dumping, cpu_get_dump_info() +works as follows: +- target-s390x/arch_dump.c: (EM_S390, ELFCLASS64) only +- target-ppc/arch_dump.c (EM_PPC64, ELFCLASS64) only +- target-i386/arch_dump.c: sets (EM_X86_64, ELFCLASS64) vs. (EM_386, + ELFCLASS32) keying off the same Long Mode Active flag. + +Hence no observable change. + +Approximately-suggested-by: Paolo Bonzini +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit 24aeeace7a9f264688e9eda77b6c04db607cbdfd) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dump.c b/dump.c +index f8e0fd7..450f658 100644 +--- a/dump.c ++++ b/dump.c +@@ -1006,7 +1006,7 @@ out: + + static int write_dump_header(DumpState *s) + { +- if (s->dump_info.d_machine == EM_386) { ++ if (s->dump_info.d_class == ELFCLASS32) { + return create_header32(s); + } else { + return create_header64(s); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-simplify-get_len_buf_out.patch b/SOURCES/kvm-dump-simplify-get_len_buf_out.patch new file mode 100644 index 0000000..153eb72 --- /dev/null +++ b/SOURCES/kvm-dump-simplify-get_len_buf_out.patch @@ -0,0 +1,99 @@ +From 82282810cd1209496183ccadfdaf0dba7d7621e8 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:13 +0100 +Subject: [PATCH 26/41] dump: simplify get_len_buf_out() + +Message-id: <1415380693-16593-27-git-send-email-lersek@redhat.com> +Patchwork-id: 62209 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 26/26] dump: simplify get_len_buf_out() +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +We can (and should) rely on the fact that s->flag_compress is exactly one +of DUMP_DH_COMPRESSED_ZLIB, DUMP_DH_COMPRESSED_LZO, and +DUMP_DH_COMPRESSED_SNAPPY. + +This is ensured by the QMP schema and dump_init() in combination. + +Suggested-by: Paolo Bonzini +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit b87ef3518b2eeb9a57ee0d06d7e82a07ab5e4ffd) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 46 ++++++++++++++++------------------------------ + 1 file changed, 16 insertions(+), 30 deletions(-) + +diff --git a/dump.c b/dump.c +index f980354..e9bd237 100644 +--- a/dump.c ++++ b/dump.c +@@ -1226,35 +1226,24 @@ static void free_data_cache(DataCache *data_cache) + + static size_t get_len_buf_out(size_t page_size, uint32_t flag_compress) + { +- size_t len_buf_out_zlib, len_buf_out_lzo, len_buf_out_snappy; +- size_t len_buf_out; +- +- /* init buf_out */ +- len_buf_out_zlib = len_buf_out_lzo = len_buf_out_snappy = 0; +- +- /* buf size for zlib */ +- len_buf_out_zlib = compressBound(page_size); +- +- /* buf size for lzo */ +-#ifdef CONFIG_LZO +- /* +- * LZO will expand incompressible data by a little amount. please check the +- * following URL to see the expansion calculation: +- * http://www.oberhumer.com/opensource/lzo/lzofaq.php +- */ +- len_buf_out_lzo = page_size + page_size / 16 + 64 + 3; +-#endif ++ switch (flag_compress) { ++ case DUMP_DH_COMPRESSED_ZLIB: ++ return compressBound(page_size); ++ ++ case DUMP_DH_COMPRESSED_LZO: ++ /* ++ * LZO will expand incompressible data by a little amount. Please check ++ * the following URL to see the expansion calculation: ++ * http://www.oberhumer.com/opensource/lzo/lzofaq.php ++ */ ++ return page_size + page_size / 16 + 64 + 3; + + #ifdef CONFIG_SNAPPY +- /* buf size for snappy */ +- len_buf_out_snappy = snappy_max_compressed_length(page_size); ++ case DUMP_DH_COMPRESSED_SNAPPY: ++ return snappy_max_compressed_length(page_size); + #endif +- +- /* get the biggest that can store all kinds of compressed page */ +- len_buf_out = MAX(len_buf_out_zlib, +- MAX(len_buf_out_lzo, len_buf_out_snappy)); +- +- return len_buf_out; ++ } ++ return 0; + } + + /* +@@ -1290,10 +1279,7 @@ static int write_dump_pages(DumpState *s) + + /* prepare buffer to store compressed data */ + len_buf_out = get_len_buf_out(TARGET_PAGE_SIZE, s->flag_compress); +- if (len_buf_out == 0) { +- dump_error(s, "dump: failed to get length of output buffer.\n"); +- goto out; +- } ++ assert(len_buf_out != 0); + + #ifdef CONFIG_LZO + wrkmem = g_malloc(LZO1X_1_MEM_COMPRESS); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-simplify-write_start_flat_header.patch b/SOURCES/kvm-dump-simplify-write_start_flat_header.patch new file mode 100644 index 0000000..016959c --- /dev/null +++ b/SOURCES/kvm-dump-simplify-write_start_flat_header.patch @@ -0,0 +1,76 @@ +From b170e55f6dff27d44e32667af0f79a4c2704711b Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 7 Nov 2014 17:18:08 +0100 +Subject: [PATCH 21/41] dump: simplify write_start_flat_header() + +Message-id: <1415380693-16593-22-git-send-email-lersek@redhat.com> +Patchwork-id: 62207 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 21/26] dump: simplify write_start_flat_header() +Bugzilla: 1157798 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Luiz Capitulino +RH-Acked-by: dgibson + +Currently, the function +- defines and populates an auto variable of type MakedumpfileHeader +- allocates and zeroes a buffer of size MAX_SIZE_MDF_HEADER (4096) +- copies the former into the latter (covering an initial portion of the + latter) + +Fill in the MakedumpfileHeader structure in its final place (the alignment +is OK because the structure lives at the address returned by g_malloc0()). + +Approximately-suggested-by: Luiz Capitulino +Signed-off-by: Laszlo Ersek +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit 92ba1401e0f81ea170803045c1ae366bf5d9d87e) +Signed-off-by: Miroslav Rezanina +--- + dump.c | 20 +++++++++----------- + 1 file changed, 9 insertions(+), 11 deletions(-) + +diff --git a/dump.c b/dump.c +index 533b914..ee28777 100644 +--- a/dump.c ++++ b/dump.c +@@ -717,27 +717,25 @@ static int create_vmcore(DumpState *s) + + static int write_start_flat_header(int fd) + { +- uint8_t *buf; +- MakedumpfileHeader mh; ++ MakedumpfileHeader *mh; + int ret = 0; + +- memset(&mh, 0, sizeof(mh)); +- memcpy(mh.signature, MAKEDUMPFILE_SIGNATURE, +- MIN(sizeof mh.signature, sizeof MAKEDUMPFILE_SIGNATURE)); ++ QEMU_BUILD_BUG_ON(sizeof *mh > MAX_SIZE_MDF_HEADER); ++ mh = g_malloc0(MAX_SIZE_MDF_HEADER); + +- mh.type = cpu_to_be64(TYPE_FLAT_HEADER); +- mh.version = cpu_to_be64(VERSION_FLAT_HEADER); ++ memcpy(mh->signature, MAKEDUMPFILE_SIGNATURE, ++ MIN(sizeof mh->signature, sizeof MAKEDUMPFILE_SIGNATURE)); + +- buf = g_malloc0(MAX_SIZE_MDF_HEADER); +- memcpy(buf, &mh, sizeof(mh)); ++ mh->type = cpu_to_be64(TYPE_FLAT_HEADER); ++ mh->version = cpu_to_be64(VERSION_FLAT_HEADER); + + size_t written_size; +- written_size = qemu_write_full(fd, buf, MAX_SIZE_MDF_HEADER); ++ written_size = qemu_write_full(fd, mh, MAX_SIZE_MDF_HEADER); + if (written_size != MAX_SIZE_MDF_HEADER) { + ret = -1; + } + +- g_free(buf); ++ g_free(mh); + return ret; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump-update-phys_base-header-field-based-on-VMCOREIN.patch b/SOURCES/kvm-dump-update-phys_base-header-field-based-on-VMCOREIN.patch new file mode 100644 index 0000000..c171676 --- /dev/null +++ b/SOURCES/kvm-dump-update-phys_base-header-field-based-on-VMCOREIN.patch @@ -0,0 +1,143 @@ +From 9a2ab369a3685f85dfa7449c31a2267333cb1468 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:02 +0100 +Subject: [PATCH 31/41] dump: update phys_base header field based on VMCOREINFO + content +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-32-marcandre.lureau@redhat.com> +Patchwork-id: 78380 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 31/41] dump: update phys_base header field based on VMCOREINFO content +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +If the guest note is VMCOREINFO, try to get phys_base from it. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit d9feb51772b4ade9700c7fa54529327a6c8183a7) + +RHEL: replace qemu_strotu64() usage, warn_report()->error_report() + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + docs/specs/vmcoreinfo.txt | 8 +++++++ + dump.c | 57 +++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 63 insertions(+), 2 deletions(-) + +diff --git a/docs/specs/vmcoreinfo.txt b/docs/specs/vmcoreinfo.txt +index 2868a77..8212610 100644 +--- a/docs/specs/vmcoreinfo.txt ++++ b/docs/specs/vmcoreinfo.txt +@@ -39,3 +39,11 @@ qemu dumps. + + The note format/class must be of the target bitness and the size must + be less than 1Mb. ++ ++If the ELF note name is "VMCOREINFO", it is expected to be the Linux ++vmcoreinfo note (see Documentation/ABI/testing/sysfs-kernel-vmcoreinfo ++in Linux source). In this case, qemu dump code will read the content ++as a key=value text file, looking for "NUMBER(phys_base)" key ++value. The value is expected to be more accurate than architecture ++guess of the value. This is useful for KASLR-enabled guest with ++ancient tools not handling the VMCOREINFO note. +diff --git a/dump.c b/dump.c +index 823d1ad..3bce730 100644 +--- a/dump.c ++++ b/dump.c +@@ -777,6 +777,23 @@ static void get_note_sizes(DumpState *s, const void *note, + } + } + ++static bool note_name_equal(DumpState *s, ++ const uint8_t *note, const char *name) ++{ ++ int len = strlen(name) + 1; ++ uint64_t head_size, name_size; ++ ++ get_note_sizes(s, note, &head_size, &name_size, NULL); ++ head_size = ROUND_UP(head_size, 4); ++ ++ if (name_size != len || ++ memcmp(note + head_size, "VMCOREINFO", len)) { ++ return false; ++ } ++ ++ return true; ++} ++ + /* write common header, sub header and elf note to vmcore */ + static void create_header32(DumpState *s, Error **errp) + { +@@ -1553,6 +1570,40 @@ static int64_t dump_calculate_size(DumpState *s) + return total; + } + ++static void vmcoreinfo_update_phys_base(DumpState *s) ++{ ++ uint64_t size, note_head_size, name_size, phys_base; ++ char **lines; ++ uint8_t *vmci; ++ size_t i; ++ ++ if (!note_name_equal(s, s->guest_note, "VMCOREINFO")) { ++ return; ++ } ++ ++ get_note_sizes(s, s->guest_note, ¬e_head_size, &name_size, &size); ++ note_head_size = ROUND_UP(note_head_size, 4); ++ ++ vmci = s->guest_note + note_head_size + ROUND_UP(name_size, 4); ++ *(vmci + size) = '\0'; ++ ++ lines = g_strsplit((char *)vmci, "\n", -1); ++ for (i = 0; lines[i]; i++) { ++ if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { ++ errno = 0; ++ phys_base = strtoull(lines[i] + 18, NULL, 16); ++ if (errno == ERANGE) { ++ error_report("Failed to read NUMBER(phys_base)="); ++ } else { ++ s->dump_info.phys_base = phys_base; ++ } ++ break; ++ } ++ } ++ ++ g_strfreev(lines); ++} ++ + static void dump_init(DumpState *s, int fd, bool has_format, + DumpGuestMemoryFormat format, bool paging, bool has_filter, + int64_t begin, int64_t length, Error **errp) +@@ -1636,8 +1687,9 @@ static void dump_init(DumpState *s, int fd, bool has_format, + } + + /* +- * The goal of this block is to copy the guest note out of +- * the guest. Failure to do so is not fatal for dumping. ++ * The goal of this block is to (a) update the previously guessed ++ * phys_base, (b) copy the guest note out of the guest. ++ * Failure to do so is not fatal for dumping. + */ + if (vmci) { + uint64_t addr, note_head_size, name_size, desc_size; +@@ -1670,6 +1722,7 @@ static void dump_init(DumpState *s, int fd, bool has_format, + g_free(s->guest_note); + s->guest_note = NULL; + } else { ++ vmcoreinfo_update_phys_base(s); + s->note_size += s->guest_note_size; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-dump.c-Fix-memory-leak-issue-in-cleanup-processing-f.patch b/SOURCES/kvm-dump.c-Fix-memory-leak-issue-in-cleanup-processing-f.patch new file mode 100644 index 0000000..ae10136 --- /dev/null +++ b/SOURCES/kvm-dump.c-Fix-memory-leak-issue-in-cleanup-processing-f.patch @@ -0,0 +1,97 @@ +From c3bae9746b9d3995369ba2fa315b42b3faf0efe3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:48 +0100 +Subject: [PATCH 17/41] dump.c: Fix memory leak issue in cleanup processing for + dump_init() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-18-marcandre.lureau@redhat.com> +Patchwork-id: 78369 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 17/41] dump.c: Fix memory leak issue in cleanup processing for dump_init() +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Chen Gang + +In dump_init(), when failure occurs, need notice about 'fd' and memory +mapping. So call dump_cleanup() for it (need let all initializations at +front). + +Also simplify dump_cleanup(): remove redundant 'ret' and redundant 'fd' +checking. + +Signed-off-by: Chen Gang +Reviewed-by: Laszlo Ersek +Signed-off-by: Luiz Capitulino + +(cherry picked from commit 2928207ac1bb2751a1554ea0f9a9641179f51488) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 18 +++++------------- + 1 file changed, 5 insertions(+), 13 deletions(-) + +diff --git a/dump.c b/dump.c +index c902944..c709fc2 100644 +--- a/dump.c ++++ b/dump.c +@@ -71,18 +71,14 @@ uint64_t cpu_to_dump64(DumpState *s, uint64_t val) + + static int dump_cleanup(DumpState *s) + { +- int ret = 0; +- + guest_phys_blocks_free(&s->guest_phys_blocks); + memory_mapping_list_free(&s->list); +- if (s->fd != -1) { +- close(s->fd); +- } ++ close(s->fd); + if (s->resume) { + vm_start(); + } + +- return ret; ++ return 0; + } + + static void dump_error(DumpState *s, const char *reason) +@@ -1505,6 +1501,8 @@ static int dump_init(DumpState *s, int fd, bool has_format, + s->begin = begin; + s->length = length; + ++ memory_mapping_list_init(&s->list); ++ + guest_phys_blocks_init(&s->guest_phys_blocks); + guest_phys_blocks_append(&s->guest_phys_blocks); + +@@ -1532,7 +1530,6 @@ static int dump_init(DumpState *s, int fd, bool has_format, + } + + /* get memory mapping */ +- memory_mapping_list_init(&s->list); + if (paging) { + qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, &err); + if (err != NULL) { +@@ -1628,12 +1625,7 @@ static int dump_init(DumpState *s, int fd, bool has_format, + return 0; + + cleanup: +- guest_phys_blocks_free(&s->guest_phys_blocks); +- +- if (s->resume) { +- vm_start(); +- } +- ++ dump_cleanup(s); + return -1; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-e1000-eliminate-infinite-loops-on-out-of-bounds-tran.patch b/SOURCES/kvm-e1000-eliminate-infinite-loops-on-out-of-bounds-tran.patch new file mode 100644 index 0000000..41398a8 --- /dev/null +++ b/SOURCES/kvm-e1000-eliminate-infinite-loops-on-out-of-bounds-tran.patch @@ -0,0 +1,109 @@ +From 4fef3479339001ef3ea529fb0552533fae422240 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 5 Feb 2016 14:26:18 +0100 +Subject: [PATCH 1/5] e1000: eliminate infinite loops on out-of-bounds transfer + start + +RH-Author: Laszlo Ersek +Message-id: <1454682378-29144-2-git-send-email-lersek@redhat.com> +Patchwork-id: 69116 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] e1000: eliminate infinite loops on out-of-bounds transfer start +Bugzilla: 1296044 +RH-Acked-by: Xiao Wang +RH-Acked-by: P J P +RH-Acked-by: Stefan Hajnoczi + +The start_xmit() and e1000_receive_iov() functions implement DMA transfers +iterating over a set of descriptors that the guest's e1000 driver +prepares: + +- the TDLEN and RDLEN registers store the total size of the descriptor + area, + +- while the TDH and RDH registers store the offset (in whole tx / rx + descriptors) into the area where the transfer is supposed to start. + +Each time a descriptor is processed, the TDH and RDH register is bumped +(as appropriate for the transfer direction). + +QEMU already contains logic to deal with bogus transfers submitted by the +guest: + +- Normally, the transmit case wants to increase TDH from its initial value + to TDT. (TDT is allowed to be numerically smaller than the initial TDH + value; wrapping at or above TDLEN bytes to zero is normal.) The failsafe + that QEMU currently has here is a check against reaching the original + TDH value again -- a complete wraparound, which should never happen. + +- In the receive case RDH is increased from its initial value until + "total_size" bytes have been received; preferably in a single step, or + in "s->rxbuf_size" byte steps, if the latter is smaller. However, null + RX descriptors are skipped without receiving data, while RDH is + incremented just the same. QEMU tries to prevent an infinite loop + (processing only null RX descriptors) by detecting whether RDH assumes + its original value during the loop. (Again, wrapping from RDLEN to 0 is + normal.) + +What both directions miss is that the guest could program TDLEN and RDLEN +so low, and the initial TDH and RDH so high, that these registers will +immediately be truncated to zero, and then never reassume their initial +values in the loop -- a full wraparound will never occur. + +The condition that expresses this is: + + xdh_start >= s->mac_reg[XDLEN] / sizeof(desc) + +i.e., TDH or RDH start out after the last whole rx or tx descriptor that +fits into the TDLEN or RDLEN sized area. + +This condition could be checked before we enter the loops, but +pci_dma_read() / pci_dma_write() knows how to fill in buffers safely for +bogus DMA addresses, so we just extend the existing failsafes with the +above condition. + +This is CVE-2016-1981. + +Cc: "Michael S. Tsirkin" +Cc: Petr Matousek +Cc: Stefano Stabellini +Cc: Prasad Pandit +Cc: Michael Roth +Cc: Jason Wang +Cc: qemu-stable@nongnu.org +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1296044 +Signed-off-by: Laszlo Ersek +Reviewed-by: Jason Wang +Signed-off-by: Jason Wang +(cherry picked from commit dd793a74882477ca38d49e191110c17dfee51dcc) +Signed-off-by: Miroslav Rezanina +--- + hw/net/e1000.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index 87a84a7..2cd38bc 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -697,7 +697,8 @@ start_xmit(E1000State *s) + * bogus values to TDT/TDLEN. + * there's nothing too intelligent we could do about this. + */ +- if (s->mac_reg[TDH] == tdh_start) { ++ if (s->mac_reg[TDH] == tdh_start || ++ tdh_start >= s->mac_reg[TDLEN] / sizeof(desc)) { + DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n", + tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]); + break; +@@ -902,7 +903,8 @@ e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size) + if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN]) + s->mac_reg[RDH] = 0; + /* see comment in start_xmit; same here */ +- if (s->mac_reg[RDH] == rdh_start) { ++ if (s->mac_reg[RDH] == rdh_start || ++ rdh_start >= s->mac_reg[RDLEN] / sizeof(desc)) { + DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n", + rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]); + set_ics(s, 0, E1000_ICS_RXO); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ehci-clear-suspend-bit-on-detach.patch b/SOURCES/kvm-ehci-clear-suspend-bit-on-detach.patch new file mode 100644 index 0000000..9a38ccd --- /dev/null +++ b/SOURCES/kvm-ehci-clear-suspend-bit-on-detach.patch @@ -0,0 +1,48 @@ +From ad3f6b5b188c572bd07cc5929e844138c2d95915 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 13 Nov 2015 13:32:34 +0100 +Subject: [PATCH 1/6] ehci: clear suspend bit on detach + +Message-id: <1447421554-28366-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 68349 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] ehci: clear suspend bit on detach +Bugzilla: 1268879 +RH-Acked-by: Markus Armbruster +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +When a device is detached, clear the suspend bit (PORTSC_SUSPEND) +in the port status register. + +The specs are not *that* clear what is supposed to happen in case +a suspended device is unplugged. But the enable bit (PORTSC_PED) +is cleared, and the specs mention setting suspend with enable being +unset is undefined behavior. So clearing them both looks reasonable, +and it actually fixes the reported bug. + +Cc: Hans de Goede +Signed-off-by: Gerd Hoffmann +Reviewed-by: Hans de Goede +Message-id: 1445413462-18004-1-git-send-email-kraxel@redhat.com +(cherry picked from commit cbf82fa01e6fd4ecb234b235b10ffce548154a95) +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-ehci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c +index 02d2ab7..3429c77 100644 +--- a/hw/usb/hcd-ehci.c ++++ b/hw/usb/hcd-ehci.c +@@ -802,7 +802,7 @@ static void ehci_detach(USBPort *port) + ehci_queues_rip_device(s, port->dev, 0); + ehci_queues_rip_device(s, port->dev, 1); + +- *portsc &= ~(PORTSC_CONNECT|PORTSC_PED); ++ *portsc &= ~(PORTSC_CONNECT|PORTSC_PED|PORTSC_SUSPEND); + *portsc |= PORTSC_CSC; + + ehci_raise_irq(s, USBSTS_PCD); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ehci-implement-port-wakeup.patch b/SOURCES/kvm-ehci-implement-port-wakeup.patch new file mode 100644 index 0000000..f91a685 --- /dev/null +++ b/SOURCES/kvm-ehci-implement-port-wakeup.patch @@ -0,0 +1,103 @@ +From e29585889b3c33b370bf09c58cb4a0f4b3fae482 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 18 Dec 2013 20:05:26 +0100 +Subject: [PATCH 10/16] ehci: implement port wakeup + +RH-Author: Marcel Apfelbaum +Message-id: <1387397126-27754-1-git-send-email-marcel.a@redhat.com> +Patchwork-id: 56377 +O-Subject: [RHEL-7 qemu-kvm PATCH v2] ehci: implement port wakeup +Bugzilla: 1039513 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Paolo Bonzini + +From: Gerd Hoffmann + +Update portsc register and raise irq in case a suspended +port is woken up, so remote wakeup works on our ehci ports. + +bugzilla: #1039513 ASSIGNED - Gerd Hoffmann - backport remote wakeup for ehci +brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6755209 + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Marcel Apfelbaum +(cherry picked from commit e489df40caa96d895d9672d77f536f23c9e42f94) + +Conflicts: + trace-events +--- + v1->v2: + Rebased the patch. Minor conflicts. + + hw/usb/hcd-ehci.c | 18 ++++++++++++++++-- + trace-events | 3 +++ + 2 files changed, 19 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-ehci.c | 18 ++++++++++++++++-- + trace-events | 3 +++ + 2 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c +index 0d3799d..02d2ab7 100644 +--- a/hw/usb/hcd-ehci.c ++++ b/hw/usb/hcd-ehci.c +@@ -826,9 +826,9 @@ static void ehci_child_detach(USBPort *port, USBDevice *child) + static void ehci_wakeup(USBPort *port) + { + EHCIState *s = port->opaque; +- uint32_t portsc = s->portsc[port->index]; ++ uint32_t *portsc = &s->portsc[port->index]; + +- if (portsc & PORTSC_POWNER) { ++ if (*portsc & PORTSC_POWNER) { + USBPort *companion = s->companion_ports[port->index]; + if (companion->ops->wakeup) { + companion->ops->wakeup(companion); +@@ -836,6 +836,12 @@ static void ehci_wakeup(USBPort *port) + return; + } + ++ if (*portsc & PORTSC_SUSPEND) { ++ trace_usb_ehci_port_wakeup(port->index); ++ *portsc |= PORTSC_FPRES; ++ ehci_raise_irq(s, USBSTS_PCD); ++ } ++ + qemu_bh_schedule(s->async_bh); + } + +@@ -1067,6 +1073,14 @@ static void ehci_port_write(void *ptr, hwaddr addr, + } + } + ++ if ((val & PORTSC_SUSPEND) && !(*portsc & PORTSC_SUSPEND)) { ++ trace_usb_ehci_port_suspend(port); ++ } ++ if (!(val & PORTSC_FPRES) && (*portsc & PORTSC_FPRES)) { ++ trace_usb_ehci_port_resume(port); ++ val &= ~PORTSC_SUSPEND; ++ } ++ + *portsc &= ~PORTSC_RO_MASK; + *portsc |= val; + trace_usb_ehci_portsc_change(addr + PORTSC_BEGIN, addr >> 2, *portsc, old); +diff --git a/trace-events b/trace-events +index e9ee94f..dbbd25d 100644 +--- a/trace-events ++++ b/trace-events +@@ -303,6 +303,9 @@ usb_ehci_sitd(uint32_t addr, uint32_t nxt, uint32_t active) "ITD @ %08x: next %0 + usb_ehci_port_attach(uint32_t port, const char *owner, const char *device) "attach port #%d, owner %s, device %s" + usb_ehci_port_detach(uint32_t port, const char *owner) "detach port #%d, owner %s" + usb_ehci_port_reset(uint32_t port, int enable) "reset port #%d - %d" ++usb_ehci_port_suspend(uint32_t port) "port #%d" ++usb_ehci_port_wakeup(uint32_t port) "port #%d" ++usb_ehci_port_resume(uint32_t port) "port #%d" + usb_ehci_queue_action(void *q, const char *action) "q %p: %s" + usb_ehci_packet_action(void *q, void *p, const char *action) "q %p p %p: %s" + usb_ehci_irq(uint32_t level, uint32_t frindex, uint32_t sts, uint32_t mask) "level %d, frindex 0x%04x, sts 0x%x, mask 0x%x" +-- +1.7.1 + diff --git a/SOURCES/kvm-enable-pvticketlocks-by-default.patch b/SOURCES/kvm-enable-pvticketlocks-by-default.patch new file mode 100644 index 0000000..2b90b9f --- /dev/null +++ b/SOURCES/kvm-enable-pvticketlocks-by-default.patch @@ -0,0 +1,95 @@ +From 5763ad32288d76433b01ce87f75cbf886f6f0e20 Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 14 Jan 2014 09:26:23 +0100 +Subject: [PATCH 14/16] enable pvticketlocks by default + +RH-Author: Andrew Jones +Message-id: <1389691583-3060-1-git-send-email-drjones@redhat.com> +Patchwork-id: 56650 +O-Subject: [RHEL7.0 qemu-kvm PATCH] enable pvticketlocks by default +Bugzilla: 1052340 +RH-Acked-by: Rik van Riel +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +RHEL-only +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1052340 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6860390 + +Let's turn pvticketlocks on by default. We need to get them more exposed +if we're ever going to make a final decision about them being on/off. +So we turn them on now, and if we'll have any issues during our +pre-release testing, then we'll just revert this patch. Since this is +something of a test patch, we leave it as RHEL only for now. We can post +an upstream patch later when we're sure it's the right way to go. + +We only enable by default on rhel7 for now, not rhel6 and earlier, +although rhel6 kernels wouldn't enable it anyway, as they don't have +pvticketlocks. Tested by me. + +Signed-off-by: Andrew Jones +--- + hw/i386/pc_piix.c | 2 ++ + target-i386/cpu.c | 6 ++++++ + target-i386/cpu.h | 1 + + 3 files changed, 9 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 2 ++ + target-i386/cpu.c | 6 ++++++ + target-i386/cpu.h | 1 + + 3 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 76d6e93..2961bc8 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -902,6 +902,8 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); + ++ disable_kvm_pv_unhalt(); ++ + rom_file_in_ram = false; + has_acpi_build = false; + pc_init_rhel700(args); +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 42105aa..2959915 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -253,6 +253,7 @@ static uint32_t kvm_default_features = (1 << KVM_FEATURE_CLOCKSOURCE) | + (1 << KVM_FEATURE_ASYNC_PF) | + (1 << KVM_FEATURE_STEAL_TIME) | + (1 << KVM_FEATURE_PV_EOI) | ++ (1 << KVM_FEATURE_PV_UNHALT) | + (1 << KVM_FEATURE_CLOCKSOURCE_STABLE_BIT); + + void disable_kvm_pv_eoi(void) +@@ -260,6 +261,11 @@ void disable_kvm_pv_eoi(void) + kvm_default_features &= ~(1UL << KVM_FEATURE_PV_EOI); + } + ++void disable_kvm_pv_unhalt(void) ++{ ++ kvm_default_features &= ~(1UL << KVM_FEATURE_PV_UNHALT); ++} ++ + void host_cpuid(uint32_t function, uint32_t count, + uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) + { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 9c55953..37ff264 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -1281,6 +1281,7 @@ void do_smm_enter(CPUX86State *env1); + void cpu_report_tpr_access(CPUX86State *env, TPRAccess access); + + void disable_kvm_pv_eoi(void); ++void disable_kvm_pv_unhalt(void); + + void x86_cpu_compat_set_features(const char *cpu_model, FeatureWord w, + uint32_t feat_add, uint32_t feat_remove); +-- +1.7.1 + diff --git a/SOURCES/kvm-error-Add-error_abort.patch b/SOURCES/kvm-error-Add-error_abort.patch new file mode 100644 index 0000000..27e8236 --- /dev/null +++ b/SOURCES/kvm-error-Add-error_abort.patch @@ -0,0 +1,123 @@ +From 2112c4a8297592045ac8ed8b0677e81208296364 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:05 +0200 +Subject: [PATCH 02/19] error: Add error_abort + +Message-id: <1414059011-15516-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 61836 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 2/8] error: Add error_abort +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Peter Crosthwaite + +Add a special Error * that can be passed to error handling APIs to +signal that any errors are fatal and should abort QEMU. There are two +advantages to this: + +- allows for brevity when wishing to assert success of Error ** + accepting APIs. No need for this pattern: + Error * local_err = NULL; + api_call(foo, bar, &local_err); + assert_no_error(local_err); + This also removes the need for _nofail variants of APIs with + asserting call sites now reduced to 1LOC. +- SIGABRT happens from within the offending API. When a fatal error + occurs in an API call (when the caller is asserting sucess) failure + often means the API itself is broken. With the abort happening in the + API call now, the stack frames into the call are available at debug + time. In the assert_no_error scheme the abort happens after the fact. + +The exact semantic is that when an error is raised, if the argument +Error ** matches &error_abort, then the abort occurs immediately. The +error messaged is reported. + +For error_propagate, if the destination error is &error_abort, then +the abort happens at propagation time. + +Signed-off-by: Peter Crosthwaite +Reviewed-by: Markus Armbruster +Signed-off-by: Luiz Capitulino +(cherry picked from commit 5d24ee70bcbcf578614193526bcd5ed30a8eb16c) +Signed-off-by: Miroslav Rezanina + +Conflicts: + util/error.c + +Conflicts because RHEL 7 doesn't have error_set_win32(). + +Signed-off-by: Kevin Wolf +--- + include/qapi/error.h | 6 ++++++ + util/error.c | 17 ++++++++++++++++- + 2 files changed, 22 insertions(+), 1 deletion(-) + +diff --git a/include/qapi/error.h b/include/qapi/error.h +index ffd1cea..fc7f44a 100644 +--- a/include/qapi/error.h ++++ b/include/qapi/error.h +@@ -82,4 +82,10 @@ void error_propagate(Error **dst_err, Error *local_err); + */ + void error_free(Error *err); + ++/** ++ * If passed to error_set and friends, abort(). ++ */ ++ ++extern Error *error_abort; ++ + #endif +diff --git a/util/error.c b/util/error.c +index 53b0435..82658bb 100644 +--- a/util/error.c ++++ b/util/error.c +@@ -23,6 +23,8 @@ struct Error + ErrorClass err_class; + }; + ++Error *error_abort; ++ + void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...) + { + Error *err; +@@ -40,6 +42,11 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...) + va_end(ap); + err->err_class = err_class; + ++ if (errp == &error_abort) { ++ error_report("%s", error_get_pretty(err)); ++ abort(); ++ } ++ + *errp = err; + } + +@@ -68,6 +75,11 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class, + va_end(ap); + err->err_class = err_class; + ++ if (errp == &error_abort) { ++ error_report("%s", error_get_pretty(err)); ++ abort(); ++ } ++ + *errp = err; + } + +@@ -112,7 +124,10 @@ void error_free(Error *err) + + void error_propagate(Error **dst_err, Error *local_err) + { +- if (dst_err && !*dst_err) { ++ if (local_err && dst_err == &error_abort) { ++ error_report("%s", error_get_pretty(local_err)); ++ abort(); ++ } else if (dst_err && !*dst_err) { + *dst_err = local_err; + } else if (local_err) { + error_free(local_err); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-error-add-error_setg_file_open-helper.patch b/SOURCES/kvm-error-add-error_setg_file_open-helper.patch new file mode 100644 index 0000000..ddcb8ab --- /dev/null +++ b/SOURCES/kvm-error-add-error_setg_file_open-helper.patch @@ -0,0 +1,65 @@ +From ab4cb1fa308e6352003b16ef3227e6bcacd2ba08 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:13 +0200 +Subject: [PATCH 06/18] error: add error_setg_file_open() helper + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 54853 +O-Subject: [RHEL-7 qemu-kvm PATCH 05/15] error: add error_setg_file_open() helper +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Acked-by: Kevin Wolf +(cherry picked from commit 54028d7542cffe97c4685994baac66988c4b7db9) +--- + include/qapi/error.h | 5 +++++ + util/error.c | 5 +++++ + 2 files changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qapi/error.h | 5 +++++ + util/error.c | 5 +++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/include/qapi/error.h b/include/qapi/error.h +index 5cd2f0c..ffd1cea 100644 +--- a/include/qapi/error.h ++++ b/include/qapi/error.h +@@ -45,6 +45,11 @@ void error_set_errno(Error **err, int os_error, ErrorClass err_class, const char + error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__) + + /** ++ * Helper for open() errors ++ */ ++void error_setg_file_open(Error **errp, int os_errno, const char *filename); ++ ++/** + * Returns true if an indirect pointer to an error is pointing to a valid + * error object. + */ +diff --git a/util/error.c b/util/error.c +index 519f6b6..53b0435 100644 +--- a/util/error.c ++++ b/util/error.c +@@ -71,6 +71,11 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class, + *errp = err; + } + ++void error_setg_file_open(Error **errp, int os_errno, const char *filename) ++{ ++ error_setg_errno(errp, os_errno, "Could not open '%s'", filename); ++} ++ + Error *error_copy(const Error *err) + { + Error *err_new; +-- +1.7.1 + diff --git a/SOURCES/kvm-error-reason-in-BLOCK_IO_ERROR-BLOCK_JOB_ERROR-event.patch b/SOURCES/kvm-error-reason-in-BLOCK_IO_ERROR-BLOCK_JOB_ERROR-event.patch new file mode 100644 index 0000000..120d3d2 --- /dev/null +++ b/SOURCES/kvm-error-reason-in-BLOCK_IO_ERROR-BLOCK_JOB_ERROR-event.patch @@ -0,0 +1,215 @@ +From 771a3a333eb0c9299a69a78ddb9c4181850b827d Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 21 Nov 2013 16:27:18 +0100 +Subject: [PATCH 08/14] error reason in BLOCK_IO_ERROR / BLOCK_JOB_ERROR events (RHEL 6->7 fwd) + +RH-Author: Laszlo Ersek +Message-id: <1385051239-3677-3-git-send-email-lersek@redhat.com> +Patchwork-id: 55835 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/3] error reason in BLOCK_IO_ERROR / BLOCK_JOB_ERROR events (RHEL 6->7 fwd) +Bugzilla: 971938 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jiri Denemark +RH-Acked-by: Luiz Capitulino + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=971938 + +This is the RHEL-7 forward port of the RHEL-6 only commit + + commit a635efd74e0968dd4402ba87679af3015930a8cb + Author: Luiz Capitulino + Date: Fri May 14 22:49:20 2010 -0300 + + QMP: Add error reason to BLOCK_IO_ERROR event + +The RHEL-6 patch had to be updated due to the following three upstream +commits that we have in RHEL-7 by virtue of forking: + + [v1.1.0] + commit 329c0a48a92664eb48b70993c0f2473b37aa7429 + Author: Luiz Capitulino + Date: Wed Jan 25 16:59:43 2012 -0200 + + block: Rename bdrv_mon_event() & BlockMonEventAction + + [v1.3.0] + commit 3e1caa5f76a9104a0d574b0f28b3dafe986a8408 + Author: Paolo Bonzini + Date: Fri Sep 28 17:22:57 2012 +0200 + + iostatus: reorganize io error code + + [v1.3.0] + commit 32c81a4a6ecc3f50efc9c270a269e4d3d8a9fbd5 + Author: Paolo Bonzini + Date: Fri Sep 28 17:22:58 2012 +0200 + + block: introduce block job error + +The 2nd and 3rd of these actually simplified the RHEL-6 to RHEL-7 +forward-port because it had concentrated all calls to +bdrv_emit_qmp_error_event() to two locations, taking the error code as an +input parameter. The forward-ported patch can simply forward the error +code now. + +RHEL-6 doesn't have BLOCK_JOB_ERROR at all. This forward-port extends the +RH-specific error reason reporting to BLOCK_JOB_ERROR automatically. +(Except for "QMP/qmp-events.txt", where BLOCK_JOB_ERROR's documentation +needed manual patching.) + +Signed-off-by: Laszlo Ersek +--- + include/block/block_int.h | 4 +++- + block.c | 33 +++++++++++++++++++++++++++++++-- + blockjob.c | 3 ++- + QMP/qmp-events.txt | 18 ++++++++++++++++-- + 4 files changed, 52 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + QMP/qmp-events.txt | 18 ++++++++++++++++-- + block.c | 33 +++++++++++++++++++++++++++++++-- + blockjob.c | 3 ++- + include/block/block_int.h | 4 +++- + 4 files changed, 52 insertions(+), 6 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index 79fb1c9..c8c6d75 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -53,13 +53,20 @@ Data: + "ignore": error has been ignored + "report": error has been reported to the device + "stop": error caused VM to be stopped ++- "__com.redhat_reason": error reason, this is a RHEL7 extension, it's one of ++ the following (json-string): ++ "eio": errno EIO ++ "eperm": errno EPERM ++ "enospc": errno ENOSPC ++ "eother": any other errno (other than EIO, EPERM, ENOSPC) + + Example: + + { "event": "BLOCK_IO_ERROR", + "data": { "device": "ide0-hd1", + "operation": "write", +- "action": "stop" }, ++ "action": "stop", ++ "__com.redhat_reason": "enospc" }, + "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } + + Note: If action is "stop", a STOP event will eventually follow the +@@ -131,13 +138,20 @@ Data: + "ignore": error has been ignored, the job may fail later + "report": error will be reported and the job canceled + "stop": error caused job to be paused ++- "__com.redhat_reason": error reason, this is a RHEL7 extension, it's one of ++ the following (json-string): ++ "eio": errno EIO ++ "eperm": errno EPERM ++ "enospc": errno ENOSPC ++ "eother": any other errno (other than EIO, EPERM, ENOSPC) + + Example: + + { "event": "BLOCK_JOB_ERROR", + "data": { "device": "ide0-hd1", + "operation": "write", +- "action": "stop" }, ++ "action": "stop", ++ "__com.redhat_reason": "enospc" }, + "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } + + BLOCK_JOB_READY +diff --git a/block.c b/block.c +index 72ab36c..68755bf 100644 +--- a/block.c ++++ b/block.c +@@ -1723,9 +1723,36 @@ void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops, + bs->dev_opaque = opaque; + } + ++#define BDRV_REASON_KEY RFQDN_REDHAT "reason" ++ ++/* RHEL7 vendor extension */ ++static void bdrv_put_rhel7_reason(QDict *event, int error) ++{ ++ const char *reason; ++ ++ switch (error) { ++ case ENOSPC: ++ reason = "enospc"; ++ break; ++ case EPERM: ++ reason = "eperm"; ++ break; ++ case EIO: ++ reason = "eio"; ++ break; ++ default: ++ reason = "eother"; ++ break; ++ } ++ ++ qdict_put(event, BDRV_REASON_KEY, qstring_from_str(reason)); ++} ++ + void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv, + enum MonitorEvent ev, +- BlockErrorAction action, bool is_read) ++ BlockErrorAction action, ++ int error, ++ bool is_read) + { + QObject *data; + const char *action_str; +@@ -1748,6 +1775,7 @@ void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv, + bdrv->device_name, + action_str, + is_read ? "read" : "write"); ++ bdrv_put_rhel7_reason(qobject_to_qdict(data), error); + monitor_protocol_event(ev, data); + + qobject_decref(data); +@@ -2905,7 +2933,8 @@ void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action, + bool is_read, int error) + { + assert(error >= 0); +- bdrv_emit_qmp_error_event(bs, QEVENT_BLOCK_IO_ERROR, action, is_read); ++ bdrv_emit_qmp_error_event(bs, QEVENT_BLOCK_IO_ERROR, action, error, ++ is_read); + if (action == BDRV_ACTION_STOP) { + vm_stop(RUN_STATE_IO_ERROR); + bdrv_iostatus_set_err(bs, error); +diff --git a/blockjob.c b/blockjob.c +index ca80df1..c0a22d9 100644 +--- a/blockjob.c ++++ b/blockjob.c +@@ -271,7 +271,8 @@ BlockErrorAction block_job_error_action(BlockJob *job, BlockDriverState *bs, + default: + abort(); + } +- bdrv_emit_qmp_error_event(job->bs, QEVENT_BLOCK_JOB_ERROR, action, is_read); ++ bdrv_emit_qmp_error_event(job->bs, QEVENT_BLOCK_JOB_ERROR, action, error, ++ is_read); + if (action == BDRV_ACTION_STOP) { + block_job_pause(job); + block_job_iostatus_set_err(job, error); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 54708c6..8223f5b 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -320,7 +320,9 @@ int is_windows_drive(const char *filename); + #endif + void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv, + enum MonitorEvent ev, +- BlockErrorAction action, bool is_read); ++ BlockErrorAction action, ++ int error, ++ bool is_read); + + /** + * stream_start: +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Clean-up-fall-back-when-mem-path-allocation-fai.patch b/SOURCES/kvm-exec-Clean-up-fall-back-when-mem-path-allocation-fai.patch new file mode 100644 index 0000000..64ab4b8 --- /dev/null +++ b/SOURCES/kvm-exec-Clean-up-fall-back-when-mem-path-allocation-fai.patch @@ -0,0 +1,66 @@ +From 897142f67237f772669d48d024e8e7719f6a5a79 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:03 +0200 +Subject: [PATCH 19/29] exec: Clean up fall back when -mem-path allocation fails + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-3-git-send-email-armbru@redhat.com> +Patchwork-id: 54421 +O-Subject: [PATCH 7.0 qemu-kvm 2/8] exec: Clean up fall back when -mem-path allocation fails +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +With -mem-path, qemu_ram_alloc_from_ptr() first tries to allocate +accordingly, but when it fails, it falls back to normal allocation. + +The fall back allocation code used to be effectively identical to the +"-mem-path not given" code, until it started to diverge in commit +432d268. I believe the code still works, but clean it up anyway: drop +the special fall back allocation code, and fall back to the ordinary +"-mem-path not given" code instead. + +Reviewed-by: Paolo Bonzini +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Message-id: 1375276272-15988-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 0628c18267bbe8d44f0faf3e71acf0ae31bea7fd) +--- + exec.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 7 ++----- + 1 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/exec.c b/exec.c +index 914d066..ef8d311 100644 +--- a/exec.c ++++ b/exec.c +@@ -1063,15 +1063,12 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + if (mem_path) { + #if defined (__linux__) && !defined(TARGET_S390X) + new_block->host = file_ram_alloc(new_block, size, mem_path); +- if (!new_block->host) { +- new_block->host = qemu_anon_ram_alloc(size); +- memory_try_enable_merging(new_block->host, size); +- } + #else + fprintf(stderr, "-mem-path option unsupported\n"); + exit(1); + #endif +- } else { ++ } ++ if (!new_block->host) { + if (kvm_enabled()) { + /* some s390/kvm configurations have special constraints */ + new_block->host = kvm_ram_alloc(size); +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Clean-up-unnecessary-S390-ifdeffery.patch b/SOURCES/kvm-exec-Clean-up-unnecessary-S390-ifdeffery.patch new file mode 100644 index 0000000..2647dca --- /dev/null +++ b/SOURCES/kvm-exec-Clean-up-unnecessary-S390-ifdeffery.patch @@ -0,0 +1,98 @@ +From e4927c8d2802be4adeb25fbdfd538d15211d925e Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:07 +0200 +Subject: [PATCH 23/29] exec: Clean up unnecessary S390 ifdeffery + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-7-git-send-email-armbru@redhat.com> +Patchwork-id: 54428 +O-Subject: [PATCH 7.0 qemu-kvm 6/8] exec: Clean up unnecessary S390 ifdeffery +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Another issue missed in commit fdec991 is -mem-path: it needs to be +rejected only for old S390 KVM, not for any S390. Not that I +personally care, but the ifdeffery in qemu_ram_alloc_from_ptr() annoys +me. + +Note that this doesn't actually make -mem-path work, as the kernel +doesn't (yet?) support large pages in the host for KVM guests. Clean +it up anyway. + +Thanks to Christian Borntraeger for pointing out the S390 kernel +limitations. + +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Acked-by: Christian Borntraeger +Message-id: 1375276272-15988-7-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit e1e84ba050538bae24393e40b737078ecad99747) +--- + exec.c | 25 +++++++++++++++++++------ + 1 file changed, 19 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 25 +++++++++++++++++++------ + 1 files changed, 19 insertions(+), 6 deletions(-) + +diff --git a/exec.c b/exec.c +index 185155c..a75c200 100644 +--- a/exec.c ++++ b/exec.c +@@ -839,7 +839,7 @@ void qemu_mutex_unlock_ramlist(void) + qemu_mutex_unlock(&ram_list.mutex); + } + +-#if defined(__linux__) && !defined(TARGET_S390X) ++#ifdef __linux__ + + #include + +@@ -942,6 +942,14 @@ static void *file_ram_alloc(RAMBlock *block, + block->fd = fd; + return area; + } ++#else ++static void *file_ram_alloc(RAMBlock *block, ++ ram_addr_t memory, ++ const char *path) ++{ ++ fprintf(stderr, "-mem-path not supported on this host\n"); ++ exit(1); ++} + #endif + + static ram_addr_t find_ram_offset(ram_addr_t size) +@@ -1075,12 +1083,17 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + xen_ram_alloc(new_block->offset, size, mr); + } else { + if (mem_path) { +-#if defined (__linux__) && !defined(TARGET_S390X) ++ if (phys_mem_alloc != qemu_anon_ram_alloc) { ++ /* ++ * file_ram_alloc() needs to allocate just like ++ * phys_mem_alloc, but we haven't bothered to provide ++ * a hook there. ++ */ ++ fprintf(stderr, ++ "-mem-path not supported with this accelerator\n"); ++ exit(1); ++ } + new_block->host = file_ram_alloc(new_block, size, mem_path); +-#else +- fprintf(stderr, "-mem-path option unsupported\n"); +- exit(1); +-#endif + } + if (!new_block->host) { + new_block->host = phys_mem_alloc(size); +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Don-t-abort-when-we-can-t-allocate-guest-memory.patch b/SOURCES/kvm-exec-Don-t-abort-when-we-can-t-allocate-guest-memory.patch new file mode 100644 index 0000000..f5ca77d --- /dev/null +++ b/SOURCES/kvm-exec-Don-t-abort-when-we-can-t-allocate-guest-memory.patch @@ -0,0 +1,117 @@ +From 37bd9dc61bdc4d1a295403360cb0dcab7fbb8936 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:08 +0200 +Subject: [PATCH 24/29] exec: Don't abort when we can't allocate guest memory +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-8-git-send-email-armbru@redhat.com> +Patchwork-id: 54425 +O-Subject: [PATCH 7.0 qemu-kvm 7/8] exec: Don't abort when we can't allocate guest memory +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +We abort() on memory allocation failure. abort() is appropriate for +programming errors. Maybe most memory allocation failures are +programming errors, maybe not. But guest memory allocation failure +isn't, and aborting when the user asks for more memory than we can +provide is not nice. exit(1) instead, and do it in just one place, so +the error message is consistent. + +Tested-by: Christian Borntraeger +Signed-off-by: Markus Armbruster +Reviewed-by: Andreas Färber +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Acked-by: Christian Borntraeger +Message-id: 1375276272-15988-8-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 39228250ce6cf67eb1c3799791d271f53c5c6347) +--- + exec.c | 5 +++++ + target-s390x/kvm.c | 6 +----- + util/oslib-posix.c | 4 +--- + util/oslib-win32.c | 5 +---- + 4 files changed, 8 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 5 +++++ + target-s390x/kvm.c | 6 +----- + util/oslib-posix.c | 4 +--- + util/oslib-win32.c | 5 +---- + 4 files changed, 8 insertions(+), 12 deletions(-) + +diff --git a/exec.c b/exec.c +index a75c200..9117a59 100644 +--- a/exec.c ++++ b/exec.c +@@ -1097,6 +1097,11 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + } + if (!new_block->host) { + new_block->host = phys_mem_alloc(size); ++ if (!new_block->host) { ++ fprintf(stderr, "Cannot set up guest memory '%s': %s\n", ++ new_block->mr->name, strerror(errno)); ++ exit(1); ++ } + memory_try_enable_merging(new_block->host, size); + } + } +diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c +index 0b18db4..a106e62 100644 +--- a/target-s390x/kvm.c ++++ b/target-s390x/kvm.c +@@ -331,11 +331,7 @@ static void *legacy_s390_alloc(ram_addr_t size) + mem = mmap((void *) 0x800000000ULL, size, + PROT_EXEC|PROT_READ|PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0); +- if (mem == MAP_FAILED) { +- fprintf(stderr, "Allocating RAM failed\n"); +- abort(); +- } +- return mem; ++ return mem == MAP_FAILED ? NULL : mem; + } + + int kvm_arch_insert_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp) +diff --git a/util/oslib-posix.c b/util/oslib-posix.c +index 3dc8b1b..253bc3d 100644 +--- a/util/oslib-posix.c ++++ b/util/oslib-posix.c +@@ -112,9 +112,7 @@ void *qemu_anon_ram_alloc(size_t size) + size_t offset = QEMU_ALIGN_UP((uintptr_t)ptr, align) - (uintptr_t)ptr; + + if (ptr == MAP_FAILED) { +- fprintf(stderr, "Failed to allocate %zu B: %s\n", +- size, strerror(errno)); +- abort(); ++ return NULL; + } + + ptr += offset; +diff --git a/util/oslib-win32.c b/util/oslib-win32.c +index 961fbf5..983b7a2 100644 +--- a/util/oslib-win32.c ++++ b/util/oslib-win32.c +@@ -65,10 +65,7 @@ void *qemu_anon_ram_alloc(size_t size) + /* FIXME: this is not exactly optimal solution since VirtualAlloc + has 64Kb granularity, but at least it guarantees us that the + memory is page aligned. */ +- if (!size) { +- abort(); +- } +- ptr = qemu_oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE)); ++ ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); + trace_qemu_anon_ram_alloc(size, ptr); + return ptr; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Drop-incorrect-dead-S390-code-in-qemu_ram_remap.patch b/SOURCES/kvm-exec-Drop-incorrect-dead-S390-code-in-qemu_ram_remap.patch new file mode 100644 index 0000000..bba8546 --- /dev/null +++ b/SOURCES/kvm-exec-Drop-incorrect-dead-S390-code-in-qemu_ram_remap.patch @@ -0,0 +1,82 @@ +From b65927de7dd0ac9a52fa9b855cd17860c5303e6c Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:06 +0200 +Subject: [PATCH 22/29] exec: Drop incorrect & dead S390 code in qemu_ram_remap() + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-6-git-send-email-armbru@redhat.com> +Patchwork-id: 54426 +O-Subject: [PATCH 7.0 qemu-kvm 5/8] exec: Drop incorrect & dead S390 code in qemu_ram_remap() +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Old S390 KVM wants guest RAM mapped in a peculiar way. Commit 6b02494 +implemented that. + +When qemu_ram_remap() got added in commit cd19cfa, its code carefully +mimicked the allocation code: peculiar way if defined(TARGET_S390X) && +defined(CONFIG_KVM), else normal way. + +For new S390 KVM, we actually want the normal way. Commit fdec991 +changed qemu_ram_alloc_from_ptr() accordingly, but forgot to update +qemu_ram_remap(). If qemu_ram_alloc_from_ptr() maps RAM the normal +way, but qemu_ram_remap() remaps it the peculiar way, remapping +changes protection and flags, which it shouldn't. + +Fortunately, this can't happen, as we never remap on S390. + +Replace the incorrect code with an assertion. + +Thanks to Christian Borntraeger for help with assessing the bug's +(non-)impact. + +Acked-by: Christian Borntraeger +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Message-id: 1375276272-15988-6-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 2eb9fbaab56c6350c7d137428f4bd0bc79168214) +--- + exec.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 13 +++++++------ + 1 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/exec.c b/exec.c +index 42a0005..185155c 100644 +--- a/exec.c ++++ b/exec.c +@@ -1201,15 +1201,16 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) + area = mmap(vaddr, length, PROT_READ | PROT_WRITE, + flags, block->fd, offset); + } else { +-#if defined(TARGET_S390X) && defined(CONFIG_KVM) +- flags |= MAP_SHARED | MAP_ANONYMOUS; +- area = mmap(vaddr, length, PROT_EXEC|PROT_READ|PROT_WRITE, +- flags, -1, 0); +-#else ++ /* ++ * Remap needs to match alloc. Accelerators that ++ * set phys_mem_alloc never remap. If they did, ++ * we'd need a remap hook here. ++ */ ++ assert(phys_mem_alloc == qemu_anon_ram_alloc); ++ + flags |= MAP_PRIVATE | MAP_ANONYMOUS; + area = mmap(vaddr, length, PROT_READ | PROT_WRITE, + flags, -1, 0); +-#endif + } + if (area != vaddr) { + fprintf(stderr, "Could not remap addr: " +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Fix-Xen-RAM-allocation-with-unusual-options.patch b/SOURCES/kvm-exec-Fix-Xen-RAM-allocation-with-unusual-options.patch new file mode 100644 index 0000000..f4e2349 --- /dev/null +++ b/SOURCES/kvm-exec-Fix-Xen-RAM-allocation-with-unusual-options.patch @@ -0,0 +1,103 @@ +From 4cdc106eb2e23157acc594b8318a96803df408d0 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:02 +0200 +Subject: [PATCH 18/29] exec: Fix Xen RAM allocation with unusual options + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-2-git-send-email-armbru@redhat.com> +Patchwork-id: 54420 +O-Subject: [PATCH 7.0 qemu-kvm 1/8] exec: Fix Xen RAM allocation with unusual options +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Issues: + +* We try to obey -mem-path even though it can't work with Xen. + +* To implement -machine mem-merge, we call + memory_try_enable_merging(new_block->host, size). But with Xen, + new_block->host remains null. Oops. + +Fix by separating Xen allocation from normal allocation. + +Acked-by: Stefano Stabellini +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Message-id: 1375276272-15988-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit dfeaf2abc73429171ecc5b0b26ac4e5a24c047fc) +--- + exec.c | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 20 ++++++++++++-------- + 1 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/exec.c b/exec.c +index ee22b9b..914d066 100644 +--- a/exec.c ++++ b/exec.c +@@ -1053,6 +1053,12 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + if (host) { + new_block->host = host; + new_block->flags |= RAM_PREALLOC_MASK; ++ } else if (xen_enabled()) { ++ if (mem_path) { ++ fprintf(stderr, "-mem-path not supported with Xen\n"); ++ exit(1); ++ } ++ xen_ram_alloc(new_block->offset, size, mr); + } else { + if (mem_path) { + #if defined (__linux__) && !defined(TARGET_S390X) +@@ -1066,9 +1072,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + exit(1); + #endif + } else { +- if (xen_enabled()) { +- xen_ram_alloc(new_block->offset, size, mr); +- } else if (kvm_enabled()) { ++ if (kvm_enabled()) { + /* some s390/kvm configurations have special constraints */ + new_block->host = kvm_ram_alloc(size); + } else { +@@ -1146,6 +1150,8 @@ void qemu_ram_free(ram_addr_t addr) + ram_list.version++; + if (block->flags & RAM_PREALLOC_MASK) { + ; ++ } else if (xen_enabled()) { ++ xen_invalidate_map_cache_entry(block->host); + } else if (mem_path) { + #if defined (__linux__) && !defined(TARGET_S390X) + if (block->fd) { +@@ -1158,11 +1164,7 @@ void qemu_ram_free(ram_addr_t addr) + abort(); + #endif + } else { +- if (xen_enabled()) { +- xen_invalidate_map_cache_entry(block->host); +- } else { +- qemu_anon_ram_free(block->host, block->length); +- } ++ qemu_anon_ram_free(block->host, block->length); + } + g_free(block); + break; +@@ -1186,6 +1188,8 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) + vaddr = block->host + offset; + if (block->flags & RAM_PREALLOC_MASK) { + ; ++ } else if (xen_enabled()) { ++ abort(); + } else { + flags = MAP_FIXED; + munmap(vaddr, length); +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Fix-prototype-of-phys_mem_set_alloc-and-related.patch b/SOURCES/kvm-exec-Fix-prototype-of-phys_mem_set_alloc-and-related.patch new file mode 100644 index 0000000..f6ca8e0 --- /dev/null +++ b/SOURCES/kvm-exec-Fix-prototype-of-phys_mem_set_alloc-and-related.patch @@ -0,0 +1,122 @@ +From 394423ac51f2b4f551bece834aa9c8586dc0a984 Mon Sep 17 00:00:00 2001 +Message-Id: <394423ac51f2b4f551bece834aa9c8586dc0a984.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:29 +0100 +Subject: [PATCH 56/56] exec: Fix prototype of phys_mem_set_alloc and related + functions + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-57-git-send-email-mst@redhat.com> +Patchwork-id: 56362 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 56/57] exec: Fix prototype of phys_mem_set_alloc and related functions +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +From: Stefan Weil + +phys_mem_alloc and its assigned values qemu_anon_ram_alloc and +legacy_s390_alloc must have identical argument lists. + +legacy_s390_alloc uses the size parameter to call mmap, so size_t is +good enough for all of them. + +This patch fixes compiler errors on i686 Linux hosts: + + CC alpha-softmmu/exec.o +exec.c:752:51: error: + initialization from incompatible pointer type [-Werror] +exec.c: In function 'qemu_ram_alloc_from_ptr': +exec.c:1139:32: error: + comparison of distinct pointer types lacks a cast [-Werror] +exec.c: In function 'qemu_ram_remap': +exec.c:1283:21: error: + comparison of distinct pointer types lacks a cast [-Werror] + +Signed-off-by: Stefan Weil +Reviewed-by: Markus Armbruster +Message-id: 1380481005-32399-1-git-send-email-sw@weilnetz.de +Signed-off-by: Anthony Liguori +(cherry picked from commit 575ddeb459f622a114cbfe37d220c0519ec9c2a4) + +Note: not directly related to this change, and we don't have +to support building on i686. +However this is gratitious and ugly difference from upstream, +and some machines I use to test ACPI are i686, so including +this here was required for testing. +--- + include/exec/exec-all.h | 2 +- + exec.c | 4 ++-- + target-s390x/kvm.c | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + exec.c | 4 ++-- + include/exec/exec-all.h | 2 +- + target-s390x/kvm.c | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/exec.c b/exec.c +index 9117a59..cb11571 100644 +--- a/exec.c ++++ b/exec.c +@@ -680,14 +680,14 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, + uint16_t section); + static subpage_t *subpage_init(hwaddr base); + +-static void *(*phys_mem_alloc)(ram_addr_t size) = qemu_anon_ram_alloc; ++static void *(*phys_mem_alloc)(size_t size) = qemu_anon_ram_alloc; + + /* + * Set a custom physical guest memory alloator. + * Accelerators with unusual needs may need this. Hopefully, we can + * get rid of it eventually. + */ +-void phys_mem_set_alloc(void *(*alloc)(ram_addr_t)) ++void phys_mem_set_alloc(void *(*alloc)(size_t)) + { + phys_mem_alloc = alloc; + } +diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h +index 993c655..3fddc3b 100644 +--- a/include/exec/exec-all.h ++++ b/include/exec/exec-all.h +@@ -366,7 +366,7 @@ bool is_tcg_gen_code(uintptr_t pc_ptr); + + #if !defined(CONFIG_USER_ONLY) + +-void phys_mem_set_alloc(void *(*alloc)(ram_addr_t)); ++void phys_mem_set_alloc(void *(*alloc)(size_t)); + + struct MemoryRegion *iotlb_to_region(hwaddr index); + uint64_t io_mem_read(struct MemoryRegion *mr, hwaddr addr, +diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c +index a106e62..3fd8be5 100644 +--- a/target-s390x/kvm.c ++++ b/target-s390x/kvm.c +@@ -92,7 +92,7 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = { + + static int cap_sync_regs; + +-static void *legacy_s390_alloc(ram_addr_t size); ++static void *legacy_s390_alloc(size_t size); + + int kvm_arch_init(KVMState *s) + { +@@ -324,7 +324,7 @@ int kvm_s390_get_registers_partial(CPUState *cs) + * to grow. We also have to use MAP parameters that avoid + * read-only mapping of guest pages. + */ +-static void *legacy_s390_alloc(ram_addr_t size) ++static void *legacy_s390_alloc(size_t size) + { + void *mem; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-exec-Reduce-ifdeffery-around-mem-path.patch b/SOURCES/kvm-exec-Reduce-ifdeffery-around-mem-path.patch new file mode 100644 index 0000000..189f3e9 --- /dev/null +++ b/SOURCES/kvm-exec-Reduce-ifdeffery-around-mem-path.patch @@ -0,0 +1,119 @@ +From 24775aa5499bad8dea9c067908390c778b4ede6c Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:04 +0200 +Subject: [PATCH 20/29] exec: Reduce ifdeffery around -mem-path + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-4-git-send-email-armbru@redhat.com> +Patchwork-id: 54423 +O-Subject: [PATCH 7.0 qemu-kvm 3/8] exec: Reduce ifdeffery around -mem-path +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Instead of spreading its ifdeffery everywhere, confine it to +qemu_ram_alloc_from_ptr(). Everywhere else, simply test block->fd, +which is non-negative exactly when block uses -mem-path. + +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Message-id: 1375276272-15988-4-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 3435f39513a104294b5e3bbf3612047028d25cfc) +--- + exec.c | 37 ++++++++++--------------------------- + include/exec/cpu-all.h | 2 -- + 2 files changed, 10 insertions(+), 29 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 37 ++++++++++--------------------------- + include/exec/cpu-all.h | 2 -- + 2 files changed, 10 insertions(+), 29 deletions(-) + +diff --git a/exec.c b/exec.c +index ef8d311..32ed61c 100644 +--- a/exec.c ++++ b/exec.c +@@ -1045,6 +1045,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + + size = TARGET_PAGE_ALIGN(size); + new_block = g_malloc0(sizeof(*new_block)); ++ new_block->fd = -1; + + /* This assumes the iothread lock is taken here too. */ + qemu_mutex_lock_ramlist(); +@@ -1149,17 +1150,9 @@ void qemu_ram_free(ram_addr_t addr) + ; + } else if (xen_enabled()) { + xen_invalidate_map_cache_entry(block->host); +- } else if (mem_path) { +-#if defined (__linux__) && !defined(TARGET_S390X) +- if (block->fd) { +- munmap(block->host, block->length); +- close(block->fd); +- } else { +- qemu_anon_ram_free(block->host, block->length); +- } +-#else +- abort(); +-#endif ++ } else if (block->fd >= 0) { ++ munmap(block->host, block->length); ++ close(block->fd); + } else { + qemu_anon_ram_free(block->host, block->length); + } +@@ -1190,25 +1183,15 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) + } else { + flags = MAP_FIXED; + munmap(vaddr, length); +- if (mem_path) { +-#if defined(__linux__) && !defined(TARGET_S390X) +- if (block->fd) { ++ if (block->fd >= 0) { + #ifdef MAP_POPULATE +- flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED : +- MAP_PRIVATE; ++ flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED : ++ MAP_PRIVATE; + #else +- flags |= MAP_PRIVATE; +-#endif +- area = mmap(vaddr, length, PROT_READ | PROT_WRITE, +- flags, block->fd, offset); +- } else { +- flags |= MAP_PRIVATE | MAP_ANONYMOUS; +- area = mmap(vaddr, length, PROT_READ | PROT_WRITE, +- flags, -1, 0); +- } +-#else +- abort(); ++ flags |= MAP_PRIVATE; + #endif ++ area = mmap(vaddr, length, PROT_READ | PROT_WRITE, ++ flags, block->fd, offset); + } else { + #if defined(TARGET_S390X) && defined(CONFIG_KVM) + flags |= MAP_SHARED | MAP_ANONYMOUS; +diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h +index e9c3717..c369b25 100644 +--- a/include/exec/cpu-all.h ++++ b/include/exec/cpu-all.h +@@ -476,9 +476,7 @@ typedef struct RAMBlock { + * Writes must take both locks. + */ + QTAILQ_ENTRY(RAMBlock) next; +-#if defined(__linux__) && !defined(TARGET_S390X) + int fd; +-#endif + } RAMBlock; + + typedef struct RAMList { +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Remove-unused-global-variable-phys_ram_fd.patch b/SOURCES/kvm-exec-Remove-unused-global-variable-phys_ram_fd.patch new file mode 100644 index 0000000..80125ef --- /dev/null +++ b/SOURCES/kvm-exec-Remove-unused-global-variable-phys_ram_fd.patch @@ -0,0 +1,66 @@ +From a3180e79422e20d704e8a65643bbfac002142cf8 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:41 +0100 +Subject: [PATCH 30/40] exec: Remove unused global variable phys_ram_fd +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-31-git-send-email-quintela@redhat.com> +Patchwork-id: 56686 +O-Subject: [RHEL7 qemu-kvm PATCH 30/40] exec: Remove unused global variable phys_ram_fd +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +From: Stefan Weil + +It seems to be unused since several years (commit +be995c27640a82c7056b6f53d02ec823570114e5 in 2006). + +Signed-off-by: Stefan Weil +Reviewed-by: Andreas Färber +Message-id: 1373044036-14443-1-git-send-email-sw@weilnetz.de +Signed-off-by: Anthony Liguori +(cherry picked from commit 154bb106dc195b4fbb76df0452ab6e3e24e80d72) +Signed-off-by: Juan Quintela +--- + exec.c | 1 - + include/exec/cpu-all.h | 1 - + 2 files changed, 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 1 - + include/exec/cpu-all.h | 1 - + 2 files changed, 0 insertions(+), 2 deletions(-) + +diff --git a/exec.c b/exec.c +index 79ea3b2..443de79 100644 +--- a/exec.c ++++ b/exec.c +@@ -55,7 +55,6 @@ + //#define DEBUG_SUBPAGE + + #if !defined(CONFIG_USER_ONLY) +-int phys_ram_fd; + static int in_migration; + + RAMList ram_list = { .blocks = QTAILQ_HEAD_INITIALIZER(ram_list.blocks) }; +diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h +index 9c85c1c..b88e56e 100644 +--- a/include/exec/cpu-all.h ++++ b/include/exec/cpu-all.h +@@ -460,7 +460,6 @@ hwaddr cpu_get_phys_page_debug(CPUArchState *env, target_ulong addr); + + /* memory API */ + +-extern int phys_ram_fd; + extern ram_addr_t ram_size; + + /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */ +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-Simplify-the-guest-physical-memory-allocation-h.patch b/SOURCES/kvm-exec-Simplify-the-guest-physical-memory-allocation-h.patch new file mode 100644 index 0000000..4dd16c7 --- /dev/null +++ b/SOURCES/kvm-exec-Simplify-the-guest-physical-memory-allocation-h.patch @@ -0,0 +1,184 @@ +From b84b9552e5d474f237824a33e7211dfac8d2de60 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:05 +0200 +Subject: [PATCH 21/29] exec: Simplify the guest physical memory allocation hook + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-5-git-send-email-armbru@redhat.com> +Patchwork-id: 54424 +O-Subject: [PATCH 7.0 qemu-kvm 4/8] exec: Simplify the guest physical memory allocation hook +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Make it a generic hook rather than a KVM hook. Less code and +ifdeffery. + +Since the only user of the hook is old S390 KVM, there's hope we can +get rid of it some day. + +Acked-by: Christian Borntraeger +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Message-id: 1375276272-15988-5-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 91138037cb341a04a66e4c43b6cb31d5d8a43a73) + +Conflicts: + exec.c + +Trivial conflict because we don't have upstream commits acc9d80 and +058bc4b. +--- + exec.c | 20 ++++++++++++++------ + include/exec/exec-all.h | 2 ++ + include/sysemu/kvm.h | 5 ----- + kvm-all.c | 13 ------------- + target-s390x/kvm.c | 17 ++++++----------- + 5 files changed, 22 insertions(+), 35 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 20 ++++++++++++++------ + include/exec/exec-all.h | 2 ++ + include/sysemu/kvm.h | 5 ----- + kvm-all.c | 13 ------------- + target-s390x/kvm.c | 17 ++++++----------- + 5 files changed, 22 insertions(+), 35 deletions(-) + +diff --git a/exec.c b/exec.c +index 32ed61c..42a0005 100644 +--- a/exec.c ++++ b/exec.c +@@ -679,6 +679,19 @@ typedef struct subpage_t { + static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, + uint16_t section); + static subpage_t *subpage_init(hwaddr base); ++ ++static void *(*phys_mem_alloc)(ram_addr_t size) = qemu_anon_ram_alloc; ++ ++/* ++ * Set a custom physical guest memory alloator. ++ * Accelerators with unusual needs may need this. Hopefully, we can ++ * get rid of it eventually. ++ */ ++void phys_mem_set_alloc(void *(*alloc)(ram_addr_t)) ++{ ++ phys_mem_alloc = alloc; ++} ++ + static void destroy_page_desc(uint16_t section_index) + { + MemoryRegionSection *section = &phys_sections[section_index]; +@@ -1070,12 +1083,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + #endif + } + if (!new_block->host) { +- if (kvm_enabled()) { +- /* some s390/kvm configurations have special constraints */ +- new_block->host = kvm_ram_alloc(size); +- } else { +- new_block->host = qemu_anon_ram_alloc(size); +- } ++ new_block->host = phys_mem_alloc(size); + memory_try_enable_merging(new_block->host, size); + } + } +diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h +index 6362074..993c655 100644 +--- a/include/exec/exec-all.h ++++ b/include/exec/exec-all.h +@@ -366,6 +366,8 @@ bool is_tcg_gen_code(uintptr_t pc_ptr); + + #if !defined(CONFIG_USER_ONLY) + ++void phys_mem_set_alloc(void *(*alloc)(ram_addr_t)); ++ + struct MemoryRegion *iotlb_to_region(hwaddr index); + uint64_t io_mem_read(struct MemoryRegion *mr, hwaddr addr, + unsigned size); +diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h +index 08284ef..7fc3844 100644 +--- a/include/sysemu/kvm.h ++++ b/include/sysemu/kvm.h +@@ -141,11 +141,6 @@ int kvm_init_vcpu(CPUState *cpu); + #ifdef NEED_CPU_H + int kvm_cpu_exec(CPUArchState *env); + +-#if !defined(CONFIG_USER_ONLY) +-void *kvm_ram_alloc(ram_addr_t size); +-void *kvm_arch_ram_alloc(ram_addr_t size); +-#endif +- + void kvm_setup_guest_memory(void *start, size_t size); + void kvm_flush_coalesced_mmio_buffer(void); + +diff --git a/kvm-all.c b/kvm-all.c +index 545b470..d0a7c21 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1794,19 +1794,6 @@ int kvm_has_intx_set_mask(void) + return kvm_state->intx_set_mask; + } + +-void *kvm_ram_alloc(ram_addr_t size) +-{ +-#ifdef TARGET_S390X +- void *mem; +- +- mem = kvm_arch_ram_alloc(size); +- if (mem) { +- return mem; +- } +-#endif +- return qemu_anon_ram_alloc(size); +-} +- + void kvm_setup_guest_memory(void *start, size_t size) + { + #ifdef CONFIG_VALGRIND_H +diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c +index 862fb12..0b18db4 100644 +--- a/target-s390x/kvm.c ++++ b/target-s390x/kvm.c +@@ -92,9 +92,15 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = { + + static int cap_sync_regs; + ++static void *legacy_s390_alloc(ram_addr_t size); ++ + int kvm_arch_init(KVMState *s) + { + cap_sync_regs = kvm_check_extension(s, KVM_CAP_SYNC_REGS); ++ if (!kvm_check_extension(s, KVM_CAP_S390_GMAP) ++ || !kvm_check_extension(s, KVM_CAP_S390_COW)) { ++ phys_mem_set_alloc(legacy_s390_alloc); ++ } + return 0; + } + +@@ -332,17 +338,6 @@ static void *legacy_s390_alloc(ram_addr_t size) + return mem; + } + +-void *kvm_arch_ram_alloc(ram_addr_t size) +-{ +- /* Can we use the standard allocation ? */ +- if (kvm_check_extension(kvm_state, KVM_CAP_S390_GMAP) && +- kvm_check_extension(kvm_state, KVM_CAP_S390_COW)) { +- return NULL; +- } else { +- return legacy_s390_alloc(size); +- } +-} +- + int kvm_arch_insert_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp) + { + S390CPU *cpu = S390_CPU(cs); +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-always-use-MADV_DONTFORK.patch b/SOURCES/kvm-exec-always-use-MADV_DONTFORK.patch new file mode 100644 index 0000000..8e69da4 --- /dev/null +++ b/SOURCES/kvm-exec-always-use-MADV_DONTFORK.patch @@ -0,0 +1,58 @@ +From 38dcbd1ff68da81b9172d8036622e41fe591c5c0 Mon Sep 17 00:00:00 2001 +From: Andrea Arcangeli +Date: Fri, 7 Feb 2014 11:02:33 +0100 +Subject: [PATCH 10/28] exec: always use MADV_DONTFORK + +RH-Author: Andrea Arcangeli +Message-id: <1391770953-20138-2-git-send-email-aarcange@redhat.com> +Patchwork-id: 57131 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] exec: always use MADV_DONTFORK +Bugzilla: 1004197 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Andrew Jones +RH-Acked-by: Dr. David Alan Gilbert (git) + +MADV_DONTFORK prevents fork to fail with -ENOMEM if the default +overcommit heuristics decides there's too much anonymous virtual +memory allocated. If the KVM secondary MMU is synchronized with MMU +notifiers or not, doesn't make a difference in that regard. + +Secondly it's always more efficient to avoid copying the guest +physical address space in the fork child (so we avoid to mark all the +guest memory readonly in the parent and so we skip the establishment +and teardown of lots of pagetables in the child). + +In the common case we can ignore the error if MADV_DONTFORK is not +available. Leave a second invocation that errors out in the KVM path +if MMU notifiers are missing and KVM is enabled, to abort in such +case. + +Signed-off-by: Andrea Arcangeli +Tested-By: Benoit Canet +Acked-by: Paolo Bonzini +Signed-off-by: Gleb Natapov +(cherry picked from upstream commit 3e469dbfe413c25d48321c3a19ddfae0727dc6e5) +--- + exec.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/exec.c b/exec.c +index ce9310c..6fe2fe7 100644 +--- a/exec.c ++++ b/exec.c +@@ -1194,6 +1194,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + + qemu_ram_setup_dump(new_block->host, size); + qemu_madvise(new_block->host, size, QEMU_MADV_HUGEPAGE); ++ qemu_madvise(new_block->host, size, QEMU_MADV_DONTFORK); + + if (kvm_enabled()) + kvm_setup_guest_memory(new_block->host, size); +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-change-well-known-physical-sections-to-macros.patch b/SOURCES/kvm-exec-change-well-known-physical-sections-to-macros.patch new file mode 100644 index 0000000..20a2666 --- /dev/null +++ b/SOURCES/kvm-exec-change-well-known-physical-sections-to-macros.patch @@ -0,0 +1,167 @@ +From 348710ce46ee2ddf02396aad4bd3978c6dfc2a07 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Sun, 19 Jan 2014 13:07:35 +0100 +Subject: [PATCH 10/11] exec: change well-known physical sections to macros + +RH-Author: Marcel Apfelbaum +Message-id: <1390136856-7024-2-git-send-email-marcel.a@redhat.com> +Patchwork-id: 56810 +O-Subject: [RHEL-7 qemu-kvm PATCH v2 1/2] exec: change well-known physical sections to macros +Bugzilla: 1003535 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster + +From: Liu Ping Fan + +Sections like phys_section_unassigned always have fixed address +in phys_sections. Declared as macro, so we can use them +when having more than one phys_sections array. + +Signed-off-by: Liu Ping Fan +Signed-off-by: Liu Ping Fan +Signed-off-by: Paolo Bonzini +(cherry picked from commit b41aac4f0d17000babd815e088699d58e59917b8) +Signed-off-by: Marcel Apfelbaum + +Conflicts: + exec.c + +Signed-off-by: Marcel Apfelbaum +--- + exec.c | 42 ++++++++++++++++++++++++------------------ + 1 file changed, 24 insertions(+), 18 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 42 ++++++++++++++++++++++++------------------ + 1 files changed, 24 insertions(+), 18 deletions(-) + +diff --git a/exec.c b/exec.c +index b16ef4a..01c74cd 100644 +--- a/exec.c ++++ b/exec.c +@@ -101,10 +101,10 @@ struct AddressSpaceDispatch { + + static MemoryRegionSection *phys_sections; + static unsigned phys_sections_nb, phys_sections_nb_alloc; +-static uint16_t phys_section_unassigned; +-static uint16_t phys_section_notdirty; +-static uint16_t phys_section_rom; +-static uint16_t phys_section_watch; ++#define PHYS_SECTION_UNASSIGNED 0 ++#define PHYS_SECTION_NOTDIRTY 1 ++#define PHYS_SECTION_ROM 2 ++#define PHYS_SECTION_WATCH 3 + + /* Simple allocator for PhysPageEntry nodes */ + static PhysPageEntry (*phys_map_nodes)[L2_SIZE]; +@@ -168,7 +168,7 @@ static void phys_page_set_level(PhysPageEntry *lp, hwaddr *index, + if (level == 0) { + for (i = 0; i < L2_SIZE; i++) { + p[i].is_leaf = 1; +- p[i].ptr = phys_section_unassigned; ++ p[i].ptr = PHYS_SECTION_UNASSIGNED; + } + } + } else { +@@ -204,7 +204,7 @@ MemoryRegionSection *phys_page_find(AddressSpaceDispatch *d, hwaddr index) + PhysPageEntry lp = d->phys_map; + PhysPageEntry *p; + int i; +- uint16_t s_index = phys_section_unassigned; ++ uint16_t s_index = PHYS_SECTION_UNASSIGNED; + + for (i = P_L2_LEVELS - 1; i >= 0 && !lp.is_leaf; i--) { + if (lp.ptr == PHYS_MAP_NODE_NIL) { +@@ -646,9 +646,9 @@ hwaddr memory_region_section_get_iotlb(CPUArchState *env, + iotlb = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK) + + memory_region_section_addr(section, paddr); + if (!section->readonly) { +- iotlb |= phys_section_notdirty; ++ iotlb |= PHYS_SECTION_NOTDIRTY; + } else { +- iotlb |= phys_section_rom; ++ iotlb |= PHYS_SECTION_ROM; + } + } else { + /* IO handlers are currently passed a physical address. +@@ -667,7 +667,7 @@ hwaddr memory_region_section_get_iotlb(CPUArchState *env, + if (vaddr == (wp->vaddr & TARGET_PAGE_MASK)) { + /* Avoid trapping reads of pages with a write breakpoint. */ + if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) { +- iotlb = phys_section_watch + paddr; ++ iotlb = PHYS_SECTION_WATCH + paddr; + *address |= TLB_MMIO; + break; + } +@@ -1722,7 +1722,7 @@ static subpage_t *subpage_init(hwaddr base) + printf("%s: %p base " TARGET_FMT_plx " len %08x %d\n", __func__, + mmio, base, TARGET_PAGE_SIZE, subpage_memory); + #endif +- subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, phys_section_unassigned); ++ subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, PHYS_SECTION_UNASSIGNED); + + return mmio; + } +@@ -1768,11 +1768,17 @@ static void mem_begin(MemoryListener *listener) + + static void core_begin(MemoryListener *listener) + { ++ uint16_t n; ++ + phys_sections_clear(); +- phys_section_unassigned = dummy_section(&io_mem_unassigned); +- phys_section_notdirty = dummy_section(&io_mem_notdirty); +- phys_section_rom = dummy_section(&io_mem_rom); +- phys_section_watch = dummy_section(&io_mem_watch); ++ n = dummy_section(&io_mem_unassigned); ++ assert(n == PHYS_SECTION_UNASSIGNED); ++ n = dummy_section(&io_mem_notdirty); ++ assert(n == PHYS_SECTION_NOTDIRTY); ++ n = dummy_section(&io_mem_rom); ++ assert(n == PHYS_SECTION_ROM); ++ n = dummy_section(&io_mem_watch); ++ assert(n == PHYS_SECTION_WATCH); + } + + static void tcg_commit(MemoryListener *listener) +@@ -2440,7 +2446,7 @@ void stl_phys_notdirty(hwaddr addr, uint32_t val) + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[phys_section_rom]; ++ section = &phys_sections[PHYS_SECTION_ROM]; + } + io_mem_write(section->mr, addr, val, 4); + } else { +@@ -2473,7 +2479,7 @@ void stq_phys_notdirty(hwaddr addr, uint64_t val) + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[phys_section_rom]; ++ section = &phys_sections[PHYS_SECTION_ROM]; + } + #ifdef TARGET_WORDS_BIGENDIAN + io_mem_write(section->mr, addr, val >> 32, 4); +@@ -2502,7 +2508,7 @@ static inline void stl_phys_internal(hwaddr addr, uint32_t val, + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[phys_section_rom]; ++ section = &phys_sections[PHYS_SECTION_ROM]; + } + #if defined(TARGET_WORDS_BIGENDIAN) + if (endian == DEVICE_LITTLE_ENDIAN) { +@@ -2569,7 +2575,7 @@ static inline void stw_phys_internal(hwaddr addr, uint32_t val, + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[phys_section_rom]; ++ section = &phys_sections[PHYS_SECTION_ROM]; + } + #if defined(TARGET_WORDS_BIGENDIAN) + if (endian == DEVICE_LITTLE_ENDIAN) { +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-create-function-to-get-a-single-dirty-bit.patch b/SOURCES/kvm-exec-create-function-to-get-a-single-dirty-bit.patch new file mode 100644 index 0000000..b8d8a4a --- /dev/null +++ b/SOURCES/kvm-exec-create-function-to-get-a-single-dirty-bit.patch @@ -0,0 +1,63 @@ +From c3347218d224591fe59debbf2006811b418f9070 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:18 +0100 +Subject: [PATCH 07/40] exec: create function to get a single dirty bit + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-8-git-send-email-quintela@redhat.com> +Patchwork-id: 56663 +O-Subject: [RHEL7 qemu-kvm PATCH 07/40] exec: create function to get a single dirty bit +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 7e5609a85e3f35965af5e4c7b1480254642cf2dd) +Signed-off-by: Juan Quintela +--- + exec.c | 2 +- + include/exec/memory-internal.h | 6 ++++++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 2 +- + include/exec/memory-internal.h | 6 ++++++ + 2 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/exec.c b/exec.c +index 436dbe9..e993049 100644 +--- a/exec.c ++++ b/exec.c +@@ -1482,7 +1482,7 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + { + int dirty_flags; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); +- if (!(dirty_flags & CODE_DIRTY_FLAG)) { ++ if (!cpu_physical_memory_get_dirty_flag(ram_addr, CODE_DIRTY_FLAG)) { + tb_invalidate_phys_page_fast(ram_addr, size); + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); + } +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 4f476d2..8872e36 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -58,6 +58,12 @@ static inline int cpu_physical_memory_get_dirty_flags(ram_addr_t addr) + return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS]; + } + ++static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, ++ int dirty_flag) ++{ ++ return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] & dirty_flag; ++} ++ + /* read dirty bit (return 0 or 1) */ + static inline int cpu_physical_memory_is_dirty(ram_addr_t addr) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-drop-useless-if.patch b/SOURCES/kvm-exec-drop-useless-if.patch new file mode 100644 index 0000000..6003aee --- /dev/null +++ b/SOURCES/kvm-exec-drop-useless-if.patch @@ -0,0 +1,49 @@ +From 746535f5d5ced7f1df4f1cb483621939ac8076e8 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:17 +0100 +Subject: [PATCH 06/40] exec: drop useless #if + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-7-git-send-email-quintela@redhat.com> +Patchwork-id: 56658 +O-Subject: [RHEL7 qemu-kvm PATCH 06/40] exec: drop useless #if +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +From: Paolo Bonzini + +This code is only compiled for softmmu targets. + +Reviewed-by: Richard Henderson +Signed-off-by: Paolo Bonzini +(cherry picked from commit ae4e43e80f3e1e65d096ebbc643eed9d763e1441) +Signed-off-by: Juan Quintela +--- + exec.c | 2 -- + 1 file changed, 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +diff --git a/exec.c b/exec.c +index 389888d..436dbe9 100644 +--- a/exec.c ++++ b/exec.c +@@ -1483,10 +1483,8 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + int dirty_flags; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); + if (!(dirty_flags & CODE_DIRTY_FLAG)) { +-#if !defined(CONFIG_USER_ONLY) + tb_invalidate_phys_page_fast(ram_addr, size); + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); +-#endif + } + switch (size) { + case 1: +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-separate-sections-and-nodes-per-address-space.patch b/SOURCES/kvm-exec-separate-sections-and-nodes-per-address-space.patch new file mode 100644 index 0000000..9d64440 --- /dev/null +++ b/SOURCES/kvm-exec-separate-sections-and-nodes-per-address-space.patch @@ -0,0 +1,507 @@ +From a2c4efbb5b968a80eb552757308c2fb2f28157c6 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Sun, 19 Jan 2014 13:07:36 +0100 +Subject: [PATCH 11/11] exec: separate sections and nodes per address space + +RH-Author: Marcel Apfelbaum +Message-id: <1390136856-7024-3-git-send-email-marcel.a@redhat.com> +Patchwork-id: 56811 +O-Subject: [RHEL-7 qemu-kvm PATCH v2 2/2] exec: separate sections and nodes per address space +Bugzilla: 1003535 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster + +Every address space has its own nodes and sections, but +it uses the same global arrays of nodes/section. + +This limits the number of devices that can be attached +to the guest to 20-30 devices. It happens because: + - The sections array is limited to 2^12 entries. + - The main memory has at least 100 sections. + - Each device address space is actually an alias to + main memory, multiplying its number of nodes/sections. + +Remove the limitation by using separate arrays of +nodes and sections for each address space. + +Closest upstream commit: 53cb28cbfea038f8ad50132dc8a684e638c7d48b +Signed-off-by: Marcel Apfelbaum +--- +v1 -> v2: + - The series confilcted with Juan's series: + - [RHEL7 qemu-kvm PATCH 00/40] bitmap optmization + - Conflicts solved: + - AddressSpaceDispatch was moved to exec.c + - PhysPageEntry was moved to exec.c + - Moved also PhysPageMap to exec.c + + exec.c | 166 ++++++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 86 insertions(+), 80 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 166 +++++++++++++++++++++++++++++++++------------------------------- + 1 files changed, 86 insertions(+), 80 deletions(-) + +diff --git a/exec.c b/exec.c +index 01c74cd..ce9310c 100644 +--- a/exec.c ++++ b/exec.c +@@ -91,25 +91,32 @@ struct PhysPageEntry { + uint16_t ptr : 15; + }; + ++typedef PhysPageEntry Node[L2_SIZE]; ++ ++typedef struct PhysPageMap { ++ unsigned sections_nb; ++ unsigned sections_nb_alloc; ++ unsigned nodes_nb; ++ unsigned nodes_nb_alloc; ++ Node *nodes; ++ MemoryRegionSection *sections; ++} PhysPageMap; ++ + struct AddressSpaceDispatch { + /* This is a multi-level map on the physical address space. + * The bottom level has pointers to MemoryRegionSections. + */ + PhysPageEntry phys_map; ++ PhysPageMap map; + MemoryListener listener; ++ AddressSpace *as; + }; + +-static MemoryRegionSection *phys_sections; +-static unsigned phys_sections_nb, phys_sections_nb_alloc; + #define PHYS_SECTION_UNASSIGNED 0 + #define PHYS_SECTION_NOTDIRTY 1 + #define PHYS_SECTION_ROM 2 + #define PHYS_SECTION_WATCH 3 + +-/* Simple allocator for PhysPageEntry nodes */ +-static PhysPageEntry (*phys_map_nodes)[L2_SIZE]; +-static unsigned phys_map_nodes_nb, phys_map_nodes_nb_alloc; +- + #define PHYS_MAP_NODE_NIL (((uint16_t)~0) >> 1) + + static void io_mem_init(void); +@@ -121,41 +128,38 @@ static MemoryRegion io_mem_watch; + + #if !defined(CONFIG_USER_ONLY) + +-static void phys_map_node_reserve(unsigned nodes) ++static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes) + { +- if (phys_map_nodes_nb + nodes > phys_map_nodes_nb_alloc) { +- typedef PhysPageEntry Node[L2_SIZE]; +- phys_map_nodes_nb_alloc = MAX(phys_map_nodes_nb_alloc * 2, 16); +- phys_map_nodes_nb_alloc = MAX(phys_map_nodes_nb_alloc, +- phys_map_nodes_nb + nodes); +- phys_map_nodes = g_renew(Node, phys_map_nodes, +- phys_map_nodes_nb_alloc); ++ if (map->nodes_nb + nodes > map->nodes_nb_alloc) { ++ map->nodes_nb_alloc = MAX(map->nodes_nb_alloc * 2, 16); ++ map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes); ++ map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc); + } + } + +-static uint16_t phys_map_node_alloc(void) ++static uint16_t phys_map_node_alloc(PhysPageMap *map) + { + unsigned i; + uint16_t ret; + +- ret = phys_map_nodes_nb++; ++ ret = map->nodes_nb++; + assert(ret != PHYS_MAP_NODE_NIL); +- assert(ret != phys_map_nodes_nb_alloc); ++ assert(ret != map->nodes_nb_alloc); + for (i = 0; i < L2_SIZE; ++i) { +- phys_map_nodes[ret][i].is_leaf = 0; +- phys_map_nodes[ret][i].ptr = PHYS_MAP_NODE_NIL; ++ map->nodes[ret][i].is_leaf = 0; ++ map->nodes[ret][i].ptr = PHYS_MAP_NODE_NIL; + } + return ret; + } + +-static void phys_map_nodes_reset(void) ++static void phys_map_nodes_reset(PhysPageMap *map) + { +- phys_map_nodes_nb = 0; ++ map->nodes_nb = 0; + } + + +-static void phys_page_set_level(PhysPageEntry *lp, hwaddr *index, +- hwaddr *nb, uint16_t leaf, ++static void phys_page_set_level(PhysPageMap *map, PhysPageEntry *lp, ++ hwaddr *index, hwaddr *nb, uint16_t leaf, + int level) + { + PhysPageEntry *p; +@@ -163,8 +167,8 @@ static void phys_page_set_level(PhysPageEntry *lp, hwaddr *index, + hwaddr step = (hwaddr)1 << (level * L2_BITS); + + if (!lp->is_leaf && lp->ptr == PHYS_MAP_NODE_NIL) { +- lp->ptr = phys_map_node_alloc(); +- p = phys_map_nodes[lp->ptr]; ++ lp->ptr = phys_map_node_alloc(map); ++ p = map->nodes[lp->ptr]; + if (level == 0) { + for (i = 0; i < L2_SIZE; i++) { + p[i].is_leaf = 1; +@@ -172,7 +176,7 @@ static void phys_page_set_level(PhysPageEntry *lp, hwaddr *index, + } + } + } else { +- p = phys_map_nodes[lp->ptr]; ++ p = map->nodes[lp->ptr]; + } + lp = &p[(*index >> (level * L2_BITS)) & (L2_SIZE - 1)]; + +@@ -183,7 +187,7 @@ static void phys_page_set_level(PhysPageEntry *lp, hwaddr *index, + *index += step; + *nb -= step; + } else { +- phys_page_set_level(lp, index, nb, leaf, level - 1); ++ phys_page_set_level(map, lp, index, nb, leaf, level - 1); + } + ++lp; + } +@@ -194,9 +198,10 @@ static void phys_page_set(AddressSpaceDispatch *d, + uint16_t leaf) + { + /* Wildly overreserve - it doesn't matter much. */ +- phys_map_node_reserve(3 * P_L2_LEVELS); ++ phys_map_node_reserve(&d->map, 3 * P_L2_LEVELS); + +- phys_page_set_level(&d->phys_map, &index, &nb, leaf, P_L2_LEVELS - 1); ++ phys_page_set_level(&d->map, &d->phys_map, &index, ++ &nb, leaf, P_L2_LEVELS - 1); + } + + MemoryRegionSection *phys_page_find(AddressSpaceDispatch *d, hwaddr index) +@@ -210,13 +215,13 @@ MemoryRegionSection *phys_page_find(AddressSpaceDispatch *d, hwaddr index) + if (lp.ptr == PHYS_MAP_NODE_NIL) { + goto not_found; + } +- p = phys_map_nodes[lp.ptr]; ++ p = d->map.nodes[lp.ptr]; + lp = p[(index >> (i * L2_BITS)) & (L2_SIZE - 1)]; + } + + s_index = lp.ptr; + not_found: +- return &phys_sections[s_index]; ++ return &d->map.sections[s_index]; + } + + bool memory_region_is_unassigned(MemoryRegion *mr) +@@ -657,7 +662,7 @@ hwaddr memory_region_section_get_iotlb(CPUArchState *env, + and avoid full address decoding in every device. + We can't use the high bits of pd for this because + IO_MEM_ROMD uses these as a ram address. */ +- iotlb = section - phys_sections; ++ iotlb = section - address_space_memory.dispatch->map.sections; + iotlb += memory_region_section_addr(section, paddr); + } + +@@ -683,13 +688,14 @@ hwaddr memory_region_section_get_iotlb(CPUArchState *env, + #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK) + typedef struct subpage_t { + MemoryRegion iomem; ++ AddressSpace *as; + hwaddr base; + uint16_t sub_section[TARGET_PAGE_SIZE]; + } subpage_t; + + static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, + uint16_t section); +-static subpage_t *subpage_init(hwaddr base); ++static subpage_t *subpage_init(AddressSpace *as, hwaddr base); + + static void *(*phys_mem_alloc)(size_t size) = qemu_anon_ram_alloc; + +@@ -703,9 +709,9 @@ void phys_mem_set_alloc(void *(*alloc)(size_t)) + phys_mem_alloc = alloc; + } + +-static void destroy_page_desc(uint16_t section_index) ++static void destroy_page_desc(PhysPageMap *map, uint16_t section_index) + { +- MemoryRegionSection *section = &phys_sections[section_index]; ++ MemoryRegionSection *section = &map->sections[section_index]; + MemoryRegion *mr = section->mr; + + if (mr->subpage) { +@@ -715,7 +721,8 @@ static void destroy_page_desc(uint16_t section_index) + } + } + +-static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level) ++static void destroy_l2_mapping(PhysPageMap *map, PhysPageEntry *lp, ++ unsigned level) + { + unsigned i; + PhysPageEntry *p; +@@ -724,12 +731,12 @@ static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level) + return; + } + +- p = phys_map_nodes[lp->ptr]; ++ p = map->nodes[lp->ptr]; + for (i = 0; i < L2_SIZE; ++i) { + if (!p[i].is_leaf) { +- destroy_l2_mapping(&p[i], level - 1); ++ destroy_l2_mapping(map, &p[i], level - 1); + } else { +- destroy_page_desc(p[i].ptr); ++ destroy_page_desc(map, p[i].ptr); + } + } + lp->is_leaf = 0; +@@ -738,24 +745,25 @@ static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level) + + static void destroy_all_mappings(AddressSpaceDispatch *d) + { +- destroy_l2_mapping(&d->phys_map, P_L2_LEVELS - 1); +- phys_map_nodes_reset(); ++ destroy_l2_mapping(&d->map, &d->phys_map, P_L2_LEVELS - 1); ++ phys_map_nodes_reset(&d->map); + } + +-static uint16_t phys_section_add(MemoryRegionSection *section) ++static uint16_t phys_section_add(PhysPageMap *map, ++ MemoryRegionSection *section) + { +- if (phys_sections_nb == phys_sections_nb_alloc) { +- phys_sections_nb_alloc = MAX(phys_sections_nb_alloc * 2, 16); +- phys_sections = g_renew(MemoryRegionSection, phys_sections, +- phys_sections_nb_alloc); ++ if (map->sections_nb == map->sections_nb_alloc) { ++ map->sections_nb_alloc = MAX(map->sections_nb_alloc * 2, 16); ++ map->sections = g_renew(MemoryRegionSection, map->sections, ++ map->sections_nb_alloc); + } +- phys_sections[phys_sections_nb] = *section; +- return phys_sections_nb++; ++ map->sections[map->sections_nb] = *section; ++ return map->sections_nb++; + } + +-static void phys_sections_clear(void) ++static void phys_sections_clear(PhysPageMap *map) + { +- phys_sections_nb = 0; ++ map->sections_nb = 0; + } + + static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section) +@@ -773,16 +781,16 @@ static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *secti + assert(existing->mr->subpage || existing->mr == &io_mem_unassigned); + + if (!(existing->mr->subpage)) { +- subpage = subpage_init(base); ++ subpage = subpage_init(d->as, base); + subsection.mr = &subpage->iomem; + phys_page_set(d, base >> TARGET_PAGE_BITS, 1, +- phys_section_add(&subsection)); ++ phys_section_add(&d->map, &subsection)); + } else { + subpage = container_of(existing->mr, subpage_t, iomem); + } + start = section->offset_within_address_space & ~TARGET_PAGE_MASK; + end = start + section->size - 1; +- subpage_register(subpage, start, end, phys_section_add(section)); ++ subpage_register(subpage, start, end, phys_section_add(&d->map, section)); + } + + +@@ -791,7 +799,7 @@ static void register_multipage(AddressSpaceDispatch *d, MemoryRegionSection *sec + hwaddr start_addr = section->offset_within_address_space; + ram_addr_t size = section->size; + hwaddr addr; +- uint16_t section_index = phys_section_add(section); ++ uint16_t section_index = phys_section_add(&d->map, section); + + assert(size); + +@@ -1619,7 +1627,7 @@ static uint64_t subpage_read(void *opaque, hwaddr addr, + mmio, len, addr, idx); + #endif + +- section = &phys_sections[mmio->sub_section[idx]]; ++ section = &mmio->as->dispatch->map.sections[mmio->sub_section[idx]]; + addr += mmio->base; + addr -= section->offset_within_address_space; + addr += section->offset_within_region; +@@ -1638,7 +1646,7 @@ static void subpage_write(void *opaque, hwaddr addr, + __func__, mmio, len, addr, idx, value); + #endif + +- section = &phys_sections[mmio->sub_section[idx]]; ++ section = &mmio->as->dispatch->map.sections[mmio->sub_section[idx]]; + addr += mmio->base; + addr -= section->offset_within_address_space; + addr += section->offset_within_region; +@@ -1696,10 +1704,10 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, + printf("%s: %p start %08x end %08x idx %08x eidx %08x mem %ld\n", __func__, + mmio, start, end, idx, eidx, memory); + #endif +- if (memory_region_is_ram(phys_sections[section].mr)) { +- MemoryRegionSection new_section = phys_sections[section]; ++ if (memory_region_is_ram(mmio->as->dispatch->map.sections[section].mr)) { ++ MemoryRegionSection new_section = mmio->as->dispatch->map.sections[section]; + new_section.mr = &io_mem_subpage_ram; +- section = phys_section_add(&new_section); ++ section = phys_section_add(&mmio->as->dispatch->map, &new_section); + } + for (; idx <= eidx; idx++) { + mmio->sub_section[idx] = section; +@@ -1708,12 +1716,13 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, + return 0; + } + +-static subpage_t *subpage_init(hwaddr base) ++static subpage_t *subpage_init(AddressSpace *as, hwaddr base) + { + subpage_t *mmio; + + mmio = g_malloc0(sizeof(subpage_t)); + ++ mmio->as = as; + mmio->base = base; + memory_region_init_io(&mmio->iomem, &subpage_ops, mmio, + "subpage", TARGET_PAGE_SIZE); +@@ -1727,7 +1736,7 @@ static subpage_t *subpage_init(hwaddr base) + return mmio; + } + +-static uint16_t dummy_section(MemoryRegion *mr) ++static uint16_t dummy_section(PhysPageMap *map, MemoryRegion *mr) + { + MemoryRegionSection section = { + .mr = mr, +@@ -1736,12 +1745,13 @@ static uint16_t dummy_section(MemoryRegion *mr) + .size = UINT64_MAX, + }; + +- return phys_section_add(§ion); ++ return phys_section_add(map, §ion); + } + + MemoryRegion *iotlb_to_region(hwaddr index) + { +- return phys_sections[index & ~TARGET_PAGE_MASK].mr; ++ return address_space_memory.dispatch->map.sections[ ++ index & ~TARGET_PAGE_MASK].mr; + } + + static void io_mem_init(void) +@@ -1761,23 +1771,19 @@ static void io_mem_init(void) + static void mem_begin(MemoryListener *listener) + { + AddressSpaceDispatch *d = container_of(listener, AddressSpaceDispatch, listener); ++ uint16_t n; + + destroy_all_mappings(d); + d->phys_map.ptr = PHYS_MAP_NODE_NIL; +-} +- +-static void core_begin(MemoryListener *listener) +-{ +- uint16_t n; + +- phys_sections_clear(); +- n = dummy_section(&io_mem_unassigned); ++ phys_sections_clear(&d->map); ++ n = dummy_section(&d->map, &io_mem_unassigned); + assert(n == PHYS_SECTION_UNASSIGNED); +- n = dummy_section(&io_mem_notdirty); ++ n = dummy_section(&d->map, &io_mem_notdirty); + assert(n == PHYS_SECTION_NOTDIRTY); +- n = dummy_section(&io_mem_rom); ++ n = dummy_section(&d->map, &io_mem_rom); + assert(n == PHYS_SECTION_ROM); +- n = dummy_section(&io_mem_watch); ++ n = dummy_section(&d->map, &io_mem_watch); + assert(n == PHYS_SECTION_WATCH); + } + +@@ -1822,7 +1828,6 @@ static void io_region_del(MemoryListener *listener, + } + + static MemoryListener core_memory_listener = { +- .begin = core_begin, + .log_global_start = core_log_global_start, + .log_global_stop = core_log_global_stop, + .priority = 1, +@@ -1840,7 +1845,7 @@ static MemoryListener tcg_memory_listener = { + + void address_space_init_dispatch(AddressSpace *as) + { +- AddressSpaceDispatch *d = g_new(AddressSpaceDispatch, 1); ++ AddressSpaceDispatch *d = g_new0(AddressSpaceDispatch, 1); + + d->phys_map = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .is_leaf = 0 }; + d->listener = (MemoryListener) { +@@ -1849,6 +1854,7 @@ void address_space_init_dispatch(AddressSpace *as) + .region_nop = mem_add, + .priority = 0, + }; ++ d->as = as; + as->dispatch = d; + memory_listener_register(&d->listener, as); + } +@@ -1858,7 +1864,7 @@ void address_space_destroy_dispatch(AddressSpace *as) + AddressSpaceDispatch *d = as->dispatch; + + memory_listener_unregister(&d->listener); +- destroy_l2_mapping(&d->phys_map, P_L2_LEVELS - 1); ++ destroy_l2_mapping(&d->map, &d->phys_map, P_L2_LEVELS - 1); + g_free(d); + as->dispatch = NULL; + } +@@ -2446,7 +2452,7 @@ void stl_phys_notdirty(hwaddr addr, uint32_t val) + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[PHYS_SECTION_ROM]; ++ section = &address_space_memory.dispatch->map.sections[PHYS_SECTION_ROM]; + } + io_mem_write(section->mr, addr, val, 4); + } else { +@@ -2479,7 +2485,7 @@ void stq_phys_notdirty(hwaddr addr, uint64_t val) + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[PHYS_SECTION_ROM]; ++ section = &address_space_memory.dispatch->map.sections[PHYS_SECTION_ROM]; + } + #ifdef TARGET_WORDS_BIGENDIAN + io_mem_write(section->mr, addr, val >> 32, 4); +@@ -2508,7 +2514,7 @@ static inline void stl_phys_internal(hwaddr addr, uint32_t val, + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[PHYS_SECTION_ROM]; ++ section = &address_space_memory.dispatch->map.sections[PHYS_SECTION_ROM]; + } + #if defined(TARGET_WORDS_BIGENDIAN) + if (endian == DEVICE_LITTLE_ENDIAN) { +@@ -2575,7 +2581,7 @@ static inline void stw_phys_internal(hwaddr addr, uint32_t val, + if (!memory_region_is_ram(section->mr) || section->readonly) { + addr = memory_region_section_addr(section, addr); + if (memory_region_is_ram(section->mr)) { +- section = &phys_sections[PHYS_SECTION_ROM]; ++ section = &address_space_memory.dispatch->map.sections[PHYS_SECTION_ROM]; + } + #if defined(TARGET_WORDS_BIGENDIAN) + if (endian == DEVICE_LITTLE_ENDIAN) { +-- +1.7.1 + diff --git a/SOURCES/kvm-exec-use-accessor-function-to-know-if-memory-is-dirt.patch b/SOURCES/kvm-exec-use-accessor-function-to-know-if-memory-is-dirt.patch new file mode 100644 index 0000000..57d222a --- /dev/null +++ b/SOURCES/kvm-exec-use-accessor-function-to-know-if-memory-is-dirt.patch @@ -0,0 +1,59 @@ +From 66ab02bc657f102955f3077914bbaf00bc6546e9 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:15 +0100 +Subject: [PATCH 04/40] exec: use accessor function to know if memory is dirty +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-5-git-send-email-quintela@redhat.com> +Patchwork-id: 56662 +O-Subject: [RHEL7 qemu-kvm PATCH 04/40] exec: use accessor function to know if memory is dirty +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +Reviewed-by: Eric Blake +(cherry picked from commit 06567942e5e92cc649b608205d5d31ff3ac21c58) + +Conflicts: + exec.c + +Conflict is due to the following comming irrelevant to migration: + +ommit 4917cf44326a1bda2fd7f27303aff7a25ad86518 +Author: Andreas Färber +Date: Mon May 27 05:17:50 2013 +0200 + + cpu: Replace cpu_single_env with CPUState current_cpu + +Signed-off-by: Juan Quintela +--- + exec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/exec.c b/exec.c +index 571cea4..389888d 100644 +--- a/exec.c ++++ b/exec.c +@@ -1505,7 +1505,7 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); + /* we remove the notdirty callback only if the code has been + flushed */ +- if (dirty_flags == 0xff) ++ if (cpu_physical_memory_is_dirty(ram_addr)) + tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-exit-when-no-kvm-and-vcpu-count-160.patch b/SOURCES/kvm-exit-when-no-kvm-and-vcpu-count-160.patch new file mode 100644 index 0000000..a112c50 --- /dev/null +++ b/SOURCES/kvm-exit-when-no-kvm-and-vcpu-count-160.patch @@ -0,0 +1,121 @@ +From bc949bc00c11f49ba6be7be5b4f1bfc7df93aad5 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Wed, 9 Jul 2014 13:17:15 +0200 +Subject: [PATCH 04/13] exit when -no-kvm and vcpu count > 160 + +Message-id: <20140506072044.GA25261@amt.cnet> +Patchwork-id: 58695 +O-Subject: [RHEL7 qemu-kvm PATCH] exit when -no-kvm and vcpu count > 160 +Bugzilla: 1076326 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Andrew Jones +RH-Acked-by: Markus Armbruster +RH-Acked-by: Eduardo Habkost + +Exit when booting with -no-kvm and number of vcpus is +larger than 160. + +Signed-off-by: Marcelo Tosatti +BZ: 1076326 +--- + hw/i386/pc_piix.c | 14 +++++++------- + hw/i386/pc_q35.c | 2 +- + include/hw/i386/pc.h | 2 ++ + 3 files changed, 10 insertions(+), 8 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index aeec6f2..550acd8 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -788,7 +788,7 @@ static QEMUMachine pc_machine_rhel700 = { + .desc = "RHEL 7.0.0 PC (i440FX + PIIX, 1996)", + .init = pc_init_rhel700, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .is_default = 1, + .default_machine_opts = "firmware=bios-256k.bin", + DEFAULT_MACHINE_OPTIONS, +@@ -969,7 +969,7 @@ static QEMUMachine pc_machine_rhel650 = { + .desc = "RHEL 6.5.0 PC", + .init = pc_init_rhel650, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_5_COMPAT, + { /* end of list */ } +@@ -1018,7 +1018,7 @@ static QEMUMachine pc_machine_rhel640 = { + .desc = "RHEL 6.4.0 PC", + .init = pc_init_rhel640, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_4_COMPAT, + { /* end of list */ } +@@ -1094,7 +1094,7 @@ static QEMUMachine pc_machine_rhel630 = { + .desc = "RHEL 6.3.0 PC", + .init = pc_init_rhel630, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_3_COMPAT, + { /* end of list */ } +@@ -1126,7 +1126,7 @@ static QEMUMachine pc_machine_rhel620 = { + .desc = "RHEL 6.2.0 PC", + .init = pc_init_rhel620, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_2_COMPAT, + { /* end of list */ } +@@ -1199,7 +1199,7 @@ static QEMUMachine pc_machine_rhel610 = { + .desc = "RHEL 6.1.0 PC", + .init = pc_init_rhel610, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_1_COMPAT, + { /* end of list */ } +@@ -1239,7 +1239,7 @@ static QEMUMachine pc_machine_rhel600 = { + .desc = "RHEL 6.0.0 PC", + .init = pc_init_rhel600, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_0_COMPAT, + { /* end of list */ } +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 1aa8bde..4534539 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -311,7 +311,7 @@ static QEMUMachine pc_q35_machine_rhel700 = { + .desc = "RHEL-7.0.0 PC (Q35 + ICH9, 2009)", + .init = pc_q35_init_rhel700, + .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = 255, ++ .max_cpus = RHEL_MAX_CPUS, + .default_machine_opts = "firmware=bios-256k.bin", + DEFAULT_MACHINE_OPTIONS, + }; +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 8a69347..57e2f93 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -15,6 +15,8 @@ + #include "sysemu/sysemu.h" + #include "hw/pci/pci.h" + ++#define RHEL_MAX_CPUS 160 ++ + /* PC-style peripherals (also used by other machines). */ + + typedef struct PcPciInfo { +-- +1.7.1 + diff --git a/SOURCES/kvm-fdc-force-the-fifo-access-to-be-in-bounds-of-the-all.patch b/SOURCES/kvm-fdc-force-the-fifo-access-to-be-in-bounds-of-the-all.patch new file mode 100644 index 0000000..af9d0b1 --- /dev/null +++ b/SOURCES/kvm-fdc-force-the-fifo-access-to-be-in-bounds-of-the-all.patch @@ -0,0 +1,91 @@ +From ef9148789f335927506b9f86fe6805b764d57d27 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Mon, 11 May 2015 10:13:23 +0200 +Subject: [PATCH 6/6] fdc: force the fifo access to be in bounds of the + allocated buffer + +Message-id: <1431332003-30588-1-git-send-email-mrezanin@redhat.com> +O-Subject: [RHEL-7.2 qemu-kvm EMBARGOED PATCH] fdc: force the fifo access + to be in bounds of the allocated buffer +Bugzilla: 1219270 +RH-Acked-by: Reviewed-by: Markus Armbruster +RH-Acked-by: Reviewed-by: Kevin Wolf +RH-Acked-by: Reviewed-by: Stefan Hajnoczi + +During processing of certain commands such as FD_CMD_READ_ID and +FD_CMD_DRIVE_SPECIFICATION_COMMAND the fifo memory access could +get out of bounds leading to memory corruption with values coming +from the guest. + +Fix this by making sure that the index is always bounded by the +allocated memory. + +This is CVE-2015-3456. + +Signed-off-by: Miroslav Rezanina +--- + hw/block/fdc.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/hw/block/fdc.c b/hw/block/fdc.c +index 322d863..56aedcc 100644 +--- a/hw/block/fdc.c ++++ b/hw/block/fdc.c +@@ -1434,7 +1434,7 @@ static uint32_t fdctrl_read_data(FDCtrl *fdctrl) + { + FDrive *cur_drv; + uint32_t retval = 0; +- int pos; ++ uint32_t pos; + + cur_drv = get_cur_drv(fdctrl); + fdctrl->dsr &= ~FD_DSR_PWRDOWN; +@@ -1443,8 +1443,8 @@ static uint32_t fdctrl_read_data(FDCtrl *fdctrl) + return 0; + } + pos = fdctrl->data_pos; ++ pos %= FD_SECTOR_LEN; + if (fdctrl->msr & FD_MSR_NONDMA) { +- pos %= FD_SECTOR_LEN; + if (pos == 0) { + if (fdctrl->data_pos != 0) + if (!fdctrl_seek_to_next_sect(fdctrl, cur_drv)) { +@@ -1788,10 +1788,13 @@ static void fdctrl_handle_option(FDCtrl *fdctrl, int direction) + static void fdctrl_handle_drive_specification_command(FDCtrl *fdctrl, int direction) + { + FDrive *cur_drv = get_cur_drv(fdctrl); ++ uint32_t pos; + +- if (fdctrl->fifo[fdctrl->data_pos - 1] & 0x80) { ++ pos = fdctrl->data_pos - 1; ++ pos %= FD_SECTOR_LEN; ++ if (fdctrl->fifo[pos] & 0x80) { + /* Command parameters done */ +- if (fdctrl->fifo[fdctrl->data_pos - 1] & 0x40) { ++ if (fdctrl->fifo[pos] & 0x40) { + fdctrl->fifo[0] = fdctrl->fifo[1]; + fdctrl->fifo[2] = 0; + fdctrl->fifo[3] = 0; +@@ -1891,7 +1894,7 @@ static uint8_t command_to_handler[256]; + static void fdctrl_write_data(FDCtrl *fdctrl, uint32_t value) + { + FDrive *cur_drv; +- int pos; ++ uint32_t pos; + + /* Reset mode */ + if (!(fdctrl->dor & FD_DOR_nRESET)) { +@@ -1939,7 +1942,9 @@ static void fdctrl_write_data(FDCtrl *fdctrl, uint32_t value) + } + + FLOPPY_DPRINTF("%s: %02x\n", __func__, value); +- fdctrl->fifo[fdctrl->data_pos++] = value; ++ pos = fdctrl->data_pos++; ++ pos %= FD_SECTOR_LEN; ++ fdctrl->fifo[pos] = value; + if (fdctrl->data_pos == fdctrl->data_len) { + /* We now have all parameters + * and will be able to treat the command +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fix-boot-strict-regressed-in-commit-6ef4716.patch b/SOURCES/kvm-fix-boot-strict-regressed-in-commit-6ef4716.patch new file mode 100644 index 0000000..6d53986 --- /dev/null +++ b/SOURCES/kvm-fix-boot-strict-regressed-in-commit-6ef4716.patch @@ -0,0 +1,55 @@ +From 98fa25db65984e59d72eebcc42265bdf5e02fd95 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 14 Jan 2014 09:56:39 +0100 +Subject: [PATCH 15/16] fix -boot strict regressed in commit 6ef4716 + +RH-Author: Amos Kong +Message-id: <1389693400-21546-2-git-send-email-akong@redhat.com> +Patchwork-id: 56652 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] fix -boot strict regressed in commit 6ef4716 +Bugzilla: 997817 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster + +Commit 6ef4716 cleaned up parsing of -boot option argument, but +accidentally dropped parameter strict. It should have been updated +exactly like parameter menu. Do that. + +Signed-off-by: Amos Kong +Reviewed-by: Markus Armbruster +Signed-off-by: Michael Tokarev +(cherry picked from commit e5187b561ff7b241d609a2848131879072169565) +--- + vl.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + vl.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/vl.c b/vl.c +index 781c352..11899dc 100644 +--- a/vl.c ++++ b/vl.c +@@ -459,7 +459,7 @@ static QemuOptsList qemu_boot_opts = { + .type = QEMU_OPT_STRING, + }, { + .name = "strict", +- .type = QEMU_OPT_STRING, ++ .type = QEMU_OPT_BOOL, + }, + { /*End of list */ } + }, +@@ -4059,6 +4059,7 @@ int main(int argc, char **argv, char **envp) + } + + boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu); ++ boot_strict = qemu_opt_get_bool(opts, "strict", false); + } + + if (!kernel_cmdline) { +-- +1.7.1 + diff --git a/SOURCES/kvm-fix-cirrus_vga-fix-OOB-read-case-qemu-Segmentation-f.patch b/SOURCES/kvm-fix-cirrus_vga-fix-OOB-read-case-qemu-Segmentation-f.patch new file mode 100644 index 0000000..7c32197 --- /dev/null +++ b/SOURCES/kvm-fix-cirrus_vga-fix-OOB-read-case-qemu-Segmentation-f.patch @@ -0,0 +1,64 @@ +From f9b9adc4b66f991e655f51f2ef67dac46f6bd7d4 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Mar 2017 10:01:16 +0200 +Subject: [PATCH 1/7] fix :cirrus_vga fix OOB read case qemu Segmentation fault + +RH-Author: Gerd Hoffmann +Message-id: <1490608882-10242-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 74553 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 1/7] fix :cirrus_vga fix OOB read case qemu Segmentation fault +Bugzilla: 1430060 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laurent Vivier +RH-Acked-by: Paolo Bonzini + +From: hangaohuai + +check the validity of parameters in cirrus_bitblt_rop_fwd_transp_xxx +and cirrus_bitblt_rop_fwd_xxx to avoid the OOB read which causes qemu Segmentation fault. + +After the fix, we will touch the assert in +cirrus_invalidate_region: +assert(off_cur_end >= off_cur); + +Signed-off-by: fangying +Signed-off-by: hangaohuai +Message-id: 20170314063919.16200-1-hangaohuai@huawei.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 215902d7b6fb50c6fc216fc74f770858278ed904) +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga_rop.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/hw/display/cirrus_vga_rop.h b/hw/display/cirrus_vga_rop.h +index 9c7bb09..a4f96c6 100644 +--- a/hw/display/cirrus_vga_rop.h ++++ b/hw/display/cirrus_vga_rop.h +@@ -98,6 +98,11 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_8)(CirrusVGAState *s, + uint8_t p; + dstpitch -= bltwidth; + srcpitch -= bltwidth; ++ ++ if (bltheight > 1 && (dstpitch < 0 || srcpitch < 0)) { ++ return; ++ } ++ + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x++) { + p = *dst; +@@ -144,6 +149,11 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_16)(CirrusVGAState *s, + uint8_t p1, p2; + dstpitch -= bltwidth; + srcpitch -= bltwidth; ++ ++ if (bltheight > 1 && (dstpitch < 0 || srcpitch < 0)) { ++ return; ++ } ++ + for (y = 0; y < bltheight; y++) { + for (x = 0; x < bltwidth; x+=2) { + p1 = *dst; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fix-coexistence-of-KVM-and-Hyper-V-leaves.patch b/SOURCES/kvm-fix-coexistence-of-KVM-and-Hyper-V-leaves.patch new file mode 100644 index 0000000..1684be8 --- /dev/null +++ b/SOURCES/kvm-fix-coexistence-of-KVM-and-Hyper-V-leaves.patch @@ -0,0 +1,114 @@ +From e77dfa0b88d9efdf6b2125817cd6febdcf4385b0 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:15 +0100 +Subject: [PATCH 03/12] KVM: fix coexistence of KVM and Hyper-V leaves + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-4-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57959 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 03/12] KVM: fix coexistence of KVM and Hyper-V leaves +Bugzilla: 1004773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Juan Quintela +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +kvm_arch_init_vcpu's initialization of the KVM leaves at 0x40000100 +is broken, because KVM_CPUID_FEATURES is left at 0x40000001. Move +it to 0x40000101 if Hyper-V is enabled. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 234cc64796557eea829544e4ff72ee99b6149187) +--- + target-i386/kvm.c | 47 +++++++++++++++++++++++++---------------------- + 1 file changed, 25 insertions(+), 22 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 47 +++++++++++++++++++++++++---------------------- + 1 files changed, 25 insertions(+), 22 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 3a9e376..3688371 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -451,6 +451,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + uint32_t unused; + struct kvm_cpuid_entry2 *c; + uint32_t signature[3]; ++ int kvm_base = KVM_CPUID_SIGNATURE; + int r; + + memset(&cpuid_data, 0, sizeof(cpuid_data)); +@@ -458,26 +459,22 @@ int kvm_arch_init_vcpu(CPUState *cs) + cpuid_i = 0; + + /* Paravirtualization CPUIDs */ +- c = &cpuid_data.entries[cpuid_i++]; +- c->function = KVM_CPUID_SIGNATURE; +- if (!hyperv_enabled(cpu)) { +- memcpy(signature, "KVMKVMKVM\0\0\0", 12); +- c->eax = 0; +- } else { ++ if (hyperv_enabled(cpu)) { ++ c = &cpuid_data.entries[cpuid_i++]; ++ c->function = HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS; + memcpy(signature, "Microsoft Hv", 12); + c->eax = HYPERV_CPUID_MIN; +- } +- c->ebx = signature[0]; +- c->ecx = signature[1]; +- c->edx = signature[2]; +- +- c = &cpuid_data.entries[cpuid_i++]; +- c->function = KVM_CPUID_FEATURES; +- c->eax = env->features[FEAT_KVM]; ++ c->ebx = signature[0]; ++ c->ecx = signature[1]; ++ c->edx = signature[2]; + +- if (hyperv_enabled(cpu)) { ++ c = &cpuid_data.entries[cpuid_i++]; ++ c->function = HYPERV_CPUID_INTERFACE; + memcpy(signature, "Hv#1\0\0\0\0\0\0\0\0", 12); + c->eax = signature[0]; ++ c->ebx = 0; ++ c->ecx = 0; ++ c->edx = 0; + + c = &cpuid_data.entries[cpuid_i++]; + c->function = HYPERV_CPUID_VERSION; +@@ -509,15 +506,21 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->eax = 0x40; + c->ebx = 0x40; + +- c = &cpuid_data.entries[cpuid_i++]; +- c->function = KVM_CPUID_SIGNATURE_NEXT; +- memcpy(signature, "KVMKVMKVM\0\0\0", 12); +- c->eax = 0; +- c->ebx = signature[0]; +- c->ecx = signature[1]; +- c->edx = signature[2]; ++ kvm_base = KVM_CPUID_SIGNATURE_NEXT; + } + ++ memcpy(signature, "KVMKVMKVM\0\0\0", 12); ++ c = &cpuid_data.entries[cpuid_i++]; ++ c->function = KVM_CPUID_SIGNATURE | kvm_base; ++ c->eax = 0; ++ c->ebx = signature[0]; ++ c->ecx = signature[1]; ++ c->edx = signature[2]; ++ ++ c = &cpuid_data.entries[cpuid_i++]; ++ c->function = KVM_CPUID_FEATURES | kvm_base; ++ c->eax = env->features[FEAT_KVM]; ++ + has_msr_async_pf_en = c->eax & (1 << KVM_FEATURE_ASYNC_PF); + + has_msr_pv_eoi_en = c->eax & (1 << KVM_FEATURE_PV_EOI); +-- +1.7.1 + diff --git a/SOURCES/kvm-fix-double-free-the-memslot-in-kvm_set_phys_mem.patch b/SOURCES/kvm-fix-double-free-the-memslot-in-kvm_set_phys_mem.patch new file mode 100644 index 0000000..073ad01 --- /dev/null +++ b/SOURCES/kvm-fix-double-free-the-memslot-in-kvm_set_phys_mem.patch @@ -0,0 +1,56 @@ +From dc37b3a1cd7c01dfccf9459a973694cee266957f Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:59 +0100 +Subject: [PATCH 09/22] fix double free the memslot in kvm_set_phys_mem + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-10-git-send-email-lersek@redhat.com> +Patchwork-id: 56622 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 09/18] fix double free the memslot in kvm_set_phys_mem +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Xiao Guangrong + +Luiz Capitulino reported that guest refused to boot and qemu +complained with: +kvm_set_phys_mem: error unregistering overlapping slot: Invalid argument + +It is caused by commit 235e8982ad that did double free for the memslot +so that the second one raises the -EINVAL error + +Fix it by reset memory size only if it is needed + +Reported-by: Luiz Capitulino +Signed-off-by: Xiao Guangrong +Signed-off-by: Anthony Liguori +(cherry picked from commit 651eb0f41b793021f7de672de78892def5819fb9) +Signed-off-by: Laszlo Ersek +--- + kvm-all.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 42c71b9..16e4f65 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -208,7 +208,8 @@ static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot) + if (s->migration_log) { + mem.flags |= KVM_MEM_LOG_DIRTY_PAGES; + } +- if (mem.flags & KVM_MEM_READONLY) { ++ ++ if (slot->memory_size && mem.flags & KVM_MEM_READONLY) { + /* Set the slot size to 0 before setting the slot to the desired + * value. This is needed based on KVM commit 75d61fbc. */ + mem.memory_size = 0; +-- +1.7.1 + diff --git a/SOURCES/kvm-fix-full-frame-updates-for-VNC-clients.patch b/SOURCES/kvm-fix-full-frame-updates-for-VNC-clients.patch new file mode 100644 index 0000000..fee20ea --- /dev/null +++ b/SOURCES/kvm-fix-full-frame-updates-for-VNC-clients.patch @@ -0,0 +1,43 @@ +From ce84fa12f9d9ae751da24638d4437abda26aaece Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:16 +0100 +Subject: [PATCH 02/27] fix full frame updates for VNC clients + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-3-berrange@redhat.com> +Patchwork-id: 78933 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 02/27] fix full frame updates for VNC clients +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Stephan Kulow + +If the client asks for !incremental frame updates, it has lost its content +so dirty doesn't matter - it has to see the full frame, so setting force_update + +Signed-off-by: Stephan Kulow +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +(cherry picked from commit 07535a890200e640517be0ae04fcff28860ecd37) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 29b216c..5226295 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -1777,6 +1777,7 @@ static void framebuffer_update_request(VncState *vs, int incremental, + return; + } + ++ vs->force_update = 1; + vnc_set_area_dirty(vs->dirty, width, height, x, y, w, h); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fix-guest-physical-bits-to-match-host-to-go-beyond-1.patch b/SOURCES/kvm-fix-guest-physical-bits-to-match-host-to-go-beyond-1.patch new file mode 100644 index 0000000..e027b68 --- /dev/null +++ b/SOURCES/kvm-fix-guest-physical-bits-to-match-host-to-go-beyond-1.patch @@ -0,0 +1,62 @@ +From 4c20b901edfb53e4545aab8fcefb6f40fca25964 Mon Sep 17 00:00:00 2001 +From: Andrea Arcangeli +Date: Wed, 12 Feb 2014 13:30:18 +0100 +Subject: [PATCH 2/3] fix guest physical bits to match host, to go beyond 1TB guests + +RH-Author: Andrea Arcangeli +Message-id: <1392211818-14964-2-git-send-email-aarcange@redhat.com> +Patchwork-id: 57245 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] fix guest physical bits to match host, to go beyond 1TB guests +Bugzilla: 989677 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Andrew Jones +RH-Acked-by: Marcelo Tosatti + +Without this patch the guest physical bits are advertised as 40, not +44 or more depending on the hardware capability of the host. + +That leads to guest kernel crashes with injection of page faults 9 +(see oops: 0009) as bits above 40 in the guest pagetables are +considered reserved. + +exregion-0206 [324572448] [17] ex_system_memory_space: System-Memory (width 32) R/W 0 Address=00000000FED00000 +BUG: unable to handle kernel paging request at ffffc9006030e000 +IP: [] acpi_ex_system_memory_space_handler+0x23e/0x2cb +PGD e01f875067 PUD 1001f075067 PMD e0178d8067 PTE 80000000fed00173 +Oops: 0009 [#1] SMP + +(see PUD with bit >=40 set) + +Signed-off-by: Andrea Arcangeli +Reported-by: Chegu Vinod +--- + target-i386/cpu.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 2959915..31ff568 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2174,8 +2174,13 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + /* XXX: This value must match the one used in the MMU code. */ + if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { + /* 64 bit processor */ +-/* XXX: The physical address space is limited to 42 bits in exec.c. */ + *eax = 0x00003028; /* 48 bits virtual, 40 bits physical */ ++ if (kvm_enabled()) { ++ uint32_t _eax; ++ host_cpuid(0x80000000, 0, &_eax, NULL, NULL, NULL); ++ if (_eax >= 0x80000008) ++ host_cpuid(0x80000008, 0, eax, NULL, NULL, NULL); ++ } + } else { + if (env->features[FEAT_1_EDX] & CPUID_PSE36) { + *eax = 0x00000024; /* 36 bits physical */ +-- +1.7.1 + diff --git a/SOURCES/kvm-fix-intel-hda-live-migration.patch b/SOURCES/kvm-fix-intel-hda-live-migration.patch new file mode 100644 index 0000000..6204660 --- /dev/null +++ b/SOURCES/kvm-fix-intel-hda-live-migration.patch @@ -0,0 +1,48 @@ +From 73e7e8ffd938923f5e30132dd90003ebc9e423dc Mon Sep 17 00:00:00 2001 +Message-Id: <73e7e8ffd938923f5e30132dd90003ebc9e423dc.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Gerd Hoffmann +Date: Mon, 9 Dec 2013 13:57:35 +0100 +Subject: [PATCH 05/16] fix intel-hda live migration + +RH-Author: Gerd Hoffmann +Message-id: <1386597455-25593-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56035 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] fix intel-hda live migration +Bugzilla: 1036537 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Orit Wasserman + +RHEL-6 intel-hda emulation doesn't support MSI, so we have +to turn it off for thel RHEL-6 machine types in RHEL-7. + +Signed-off-by: Gerd Hoffmann +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index e6771a9..8c3f2d6 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -811,6 +811,10 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "use_broken_id",\ + .value = stringify(1),\ + },{\ ++ .driver = "intel-hda",\ ++ .property = "msi",\ ++ .value = stringify(0),\ ++ },{\ + .driver = "qemu32-" TYPE_X86_CPU,\ + .property = "xlevel",\ + .value = stringify(0),\ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-fix-machine-check-propagation.patch b/SOURCES/kvm-fix-machine-check-propagation.patch new file mode 100644 index 0000000..3ef71fe --- /dev/null +++ b/SOURCES/kvm-fix-machine-check-propagation.patch @@ -0,0 +1,75 @@ +From a573bf83cd8f541f3129a53238ee7c2e9ad61ff8 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 26 Mar 2014 12:30:43 +0100 +Subject: [PATCH 49/49] fix machine-check propagation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Paolo Bonzini +Message-id: <1395837043-17408-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 58256 +O-Subject: [RHEL 7.0 qemu-kvm PATCH] fix machine-check propagation +Bugzilla: 740107 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Dr. David Alan Gilbert (git) + +From: Dean Nelson + +Bugzilla: 740107 + +Upstream status: fixed by a big patch that should not be backported + +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7257203 + +Machine-check propagation was broken by this commit + + commit a60f24b56b07f46453424263b276b0879c25c4e6 + Author: Andreas Färber + Date: Sat Dec 1 05:35:08 2012 +0100 + + cpu: Move kvm_state field into CPUState + + Adapt some functions to take CPUState / {PowerPC,S390}CPU argument. + + Signed-off-by: Andreas Färber + +due to a typo. In RHEL7, first_cpu is an "env" so you need ENV_GET_CPU +to convert it to a "cpu" and fish out the kvm_state. ENV_GET_CPU is +basically a "container_of" type of operation. Instead, CPU was being used +(which is just a cast). + +Upstream, everything was fixed magically when first_cpu was changed +from "env" to "cpu" in commit 182735e (cpu: Make first_cpu and next_cpu +CPUState, 2013-05-29). + +This patch fixes the bug by using the right cast. All the work was done +by Dean Nelson. + +Signed-off-by: Paolo Bonzini +--- + target-i386/kvm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index ba2cd7f..6b250f5 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -357,7 +357,7 @@ int kvm_arch_on_sigbus(int code, void *addr) + + /* Hope we are lucky for AO MCE */ + if (qemu_ram_addr_from_host(addr, &ram_addr) || +- !kvm_physical_memory_addr_from_host(CPU(first_cpu)->kvm_state, ++ !kvm_physical_memory_addr_from_host(ENV_GET_CPU(first_cpu)->kvm_state, + addr, &paddr)) { + fprintf(stderr, "Hardware memory error for memory used by " + "QEMU itself instead of guest system!: %p\n", addr); +-- +1.7.1 + diff --git a/SOURCES/kvm-fix-steal-time-MSR-vmsd-callback-to-proper-opaque-ty.patch b/SOURCES/kvm-fix-steal-time-MSR-vmsd-callback-to-proper-opaque-ty.patch new file mode 100644 index 0000000..5bb17d2 --- /dev/null +++ b/SOURCES/kvm-fix-steal-time-MSR-vmsd-callback-to-proper-opaque-ty.patch @@ -0,0 +1,55 @@ +From 1cec05857c5aaa0eebe75e7c2e6c6116fb9759cd Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Mon, 23 Sep 2013 20:00:13 +0200 +Subject: [PATCH 29/29] fix steal time MSR vmsd callback to proper opaque type + +RH-Author: Marcelo Tosatti +Message-id: <20130923200013.GA20765@amt.cnet> +Patchwork-id: 54498 +O-Subject: [RHEL7 qemu-kvm PATCH] fix steal time MSR vmsd callback to proper opaque type +Bugzilla: 903889 +RH-Acked-by: Andrew Jones +RH-Acked-by: Gleb Natapov +RH-Acked-by: Paolo Bonzini + +BZ: 903889 + +commit 0e5035776df31380a44a1a851850d110b551ecb6 of uq/master branch of qemu-kvm.git repo + +Convert steal time MSR vmsd callback pointer to proper X86CPU type. + +Signed-off-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + target-i386/machine.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 3659db9..ecf1617 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -294,9 +294,9 @@ static bool pv_eoi_msr_needed(void *opaque) + + static bool steal_time_msr_needed(void *opaque) + { +- CPUX86State *cpu = opaque; ++ X86CPU *cpu = opaque; + +- return cpu->steal_time_msr != 0; ++ return cpu->env.steal_time_msr != 0; + } + + static const VMStateDescription vmstate_steal_time_msr = { +@@ -305,7 +305,7 @@ static const VMStateDescription vmstate_steal_time_msr = { + .minimum_version_id = 1, + .minimum_version_id_old = 1, + .fields = (VMStateField []) { +- VMSTATE_UINT64(steal_time_msr, CPUX86State), ++ VMSTATE_UINT64(env.steal_time_msr, X86CPU), + VMSTATE_END_OF_LIST() + } + }; +-- +1.7.1 + diff --git a/SOURCES/kvm-fpu-softfloat-drop-INLINE-macro.patch b/SOURCES/kvm-fpu-softfloat-drop-INLINE-macro.patch new file mode 100644 index 0000000..1eb37bd --- /dev/null +++ b/SOURCES/kvm-fpu-softfloat-drop-INLINE-macro.patch @@ -0,0 +1,704 @@ +From 05ea4eb9e64508f25f806683a470b68fb286770e Mon Sep 17 00:00:00 2001 +Message-Id: <05ea4eb9e64508f25f806683a470b68fb286770e.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:17 -0600 +Subject: [CHANGE 23/31] fpu: softfloat: drop INLINE macro +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-24-git-send-email-famz@redhat.com> +Patchwork-id: 62696 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 23/30] fpu: softfloat: drop INLINE macro +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Luiz Capitulino + +This commit expands all uses of the INLINE macro and drop it. + +The reason for this is to avoid clashes with external libraries with +bad name conventions and also because renaming keywords is not a good +practice. + +PS: I'm fine with this change to be licensed under softfloat-2a or +softfloat-2b. + +Signed-off-by: Luiz Capitulino +(cherry picked from commit a49db98d1f85ada0c4e5bb22bd93d541e7159c43) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson + +Conflicts: + fpu/softfloat.c + include/fpu/softfloat.h +The code that uses "INLINE" is different, but the conflict resolution is +trivially expand "INLINE" to "static inline". + +Signed-off-by: Jeff E. Nelson +--- + fpu/softfloat-macros.h | 38 ++++++++++++------------- + fpu/softfloat.c | 48 ++++++++++++++++---------------- + include/fpu/softfloat.h | 73 ++++++++++++++++++++++++------------------------- + 3 files changed, 79 insertions(+), 80 deletions(-) + +diff --git a/fpu/softfloat-macros.h b/fpu/softfloat-macros.h +index b5164af..24ec452 100644 +--- a/fpu/softfloat-macros.h ++++ b/fpu/softfloat-macros.h +@@ -55,7 +55,7 @@ these four paragraphs for those parts of this code that are retained. + | The result is stored in the location pointed to by `zPtr'. + *----------------------------------------------------------------------------*/ + +-INLINE void shift32RightJamming(uint32_t a, int_fast16_t count, uint32_t *zPtr) ++static inline void shift32RightJamming(uint32_t a, int_fast16_t count, uint32_t *zPtr) + { + uint32_t z; + +@@ -81,7 +81,7 @@ INLINE void shift32RightJamming(uint32_t a, int_fast16_t count, uint32_t *zPtr) + | The result is stored in the location pointed to by `zPtr'. + *----------------------------------------------------------------------------*/ + +-INLINE void shift64RightJamming(uint64_t a, int_fast16_t count, uint64_t *zPtr) ++static inline void shift64RightJamming(uint64_t a, int_fast16_t count, uint64_t *zPtr) + { + uint64_t z; + +@@ -115,7 +115,7 @@ INLINE void shift64RightJamming(uint64_t a, int_fast16_t count, uint64_t *zPtr) + | described above, and is returned at the location pointed to by `z1Ptr'.) + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + shift64ExtraRightJamming( + uint64_t a0, uint64_t a1, int_fast16_t count, uint64_t *z0Ptr, uint64_t *z1Ptr) + { +@@ -152,7 +152,7 @@ INLINE void + | which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + shift128Right( + uint64_t a0, uint64_t a1, int_fast16_t count, uint64_t *z0Ptr, uint64_t *z1Ptr) + { +@@ -187,7 +187,7 @@ INLINE void + | the locations pointed to by `z0Ptr' and `z1Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + shift128RightJamming( + uint64_t a0, uint64_t a1, int_fast16_t count, uint64_t *z0Ptr, uint64_t *z1Ptr) + { +@@ -238,7 +238,7 @@ INLINE void + | `z2Ptr'.) + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + shift128ExtraRightJamming( + uint64_t a0, + uint64_t a1, +@@ -296,7 +296,7 @@ INLINE void + | pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + shortShift128Left( + uint64_t a0, uint64_t a1, int_fast16_t count, uint64_t *z0Ptr, uint64_t *z1Ptr) + { +@@ -315,7 +315,7 @@ INLINE void + | `z1Ptr', and `z2Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + shortShift192Left( + uint64_t a0, + uint64_t a1, +@@ -350,7 +350,7 @@ INLINE void + | are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + add128( + uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1, uint64_t *z0Ptr, uint64_t *z1Ptr ) + { +@@ -370,7 +370,7 @@ INLINE void + | `z1Ptr', and `z2Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + add192( + uint64_t a0, + uint64_t a1, +@@ -408,7 +408,7 @@ INLINE void + | `z1Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + sub128( + uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1, uint64_t *z0Ptr, uint64_t *z1Ptr ) + { +@@ -426,7 +426,7 @@ INLINE void + | pointed to by `z0Ptr', `z1Ptr', and `z2Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + sub192( + uint64_t a0, + uint64_t a1, +@@ -462,7 +462,7 @@ INLINE void + | `z0Ptr' and `z1Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void mul64To128( uint64_t a, uint64_t b, uint64_t *z0Ptr, uint64_t *z1Ptr ) ++static inline void mul64To128( uint64_t a, uint64_t b, uint64_t *z0Ptr, uint64_t *z1Ptr ) + { + uint32_t aHigh, aLow, bHigh, bLow; + uint64_t z0, zMiddleA, zMiddleB, z1; +@@ -492,7 +492,7 @@ INLINE void mul64To128( uint64_t a, uint64_t b, uint64_t *z0Ptr, uint64_t *z1Ptr + | `z2Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + mul128By64To192( + uint64_t a0, + uint64_t a1, +@@ -520,7 +520,7 @@ INLINE void + | the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'. + *----------------------------------------------------------------------------*/ + +-INLINE void ++static inline void + mul128To256( + uint64_t a0, + uint64_t a1, +@@ -702,7 +702,7 @@ static int8 countLeadingZeros64( uint64_t a ) + | Otherwise, returns 0. + *----------------------------------------------------------------------------*/ + +-INLINE flag eq128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) ++static inline flag eq128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + { + + return ( a0 == b0 ) && ( a1 == b1 ); +@@ -715,7 +715,7 @@ INLINE flag eq128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + | Otherwise, returns 0. + *----------------------------------------------------------------------------*/ + +-INLINE flag le128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) ++static inline flag le128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + { + + return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) ); +@@ -728,7 +728,7 @@ INLINE flag le128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + | returns 0. + *----------------------------------------------------------------------------*/ + +-INLINE flag lt128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) ++static inline flag lt128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + { + + return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) ); +@@ -741,7 +741,7 @@ INLINE flag lt128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + | Otherwise, returns 0. + *----------------------------------------------------------------------------*/ + +-INLINE flag ne128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) ++static inline flag ne128( uint64_t a0, uint64_t a1, uint64_t b0, uint64_t b1 ) + { + + return ( a0 != b0 ) || ( a1 != b1 ); +diff --git a/fpu/softfloat.c b/fpu/softfloat.c +index 7ba51b6..30623cb 100644 +--- a/fpu/softfloat.c ++++ b/fpu/softfloat.c +@@ -78,7 +78,7 @@ void set_floatx80_rounding_precision(int val STATUS_PARAM) + | Returns the fraction bits of the half-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE uint32_t extractFloat16Frac(float16 a) ++static inline uint32_t extractFloat16Frac(float16 a) + { + return float16_val(a) & 0x3ff; + } +@@ -87,7 +87,7 @@ INLINE uint32_t extractFloat16Frac(float16 a) + | Returns the exponent bits of the half-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE int_fast16_t extractFloat16Exp(float16 a) ++static inline int_fast16_t extractFloat16Exp(float16 a) + { + return (float16_val(a) >> 10) & 0x1f; + } +@@ -96,7 +96,7 @@ INLINE int_fast16_t extractFloat16Exp(float16 a) + | Returns the sign bit of the single-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE flag extractFloat16Sign(float16 a) ++static inline flag extractFloat16Sign(float16 a) + { + return float16_val(a)>>15; + } +@@ -207,7 +207,7 @@ static int64 roundAndPackInt64( flag zSign, uint64_t absZ0, uint64_t absZ1 STATU + | Returns the fraction bits of the single-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE uint32_t extractFloat32Frac( float32 a ) ++static inline uint32_t extractFloat32Frac( float32 a ) + { + + return float32_val(a) & 0x007FFFFF; +@@ -218,7 +218,7 @@ INLINE uint32_t extractFloat32Frac( float32 a ) + | Returns the exponent bits of the single-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE int_fast16_t extractFloat32Exp(float32 a) ++static inline int_fast16_t extractFloat32Exp(float32 a) + { + + return ( float32_val(a)>>23 ) & 0xFF; +@@ -229,7 +229,7 @@ INLINE int_fast16_t extractFloat32Exp(float32 a) + | Returns the sign bit of the single-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE flag extractFloat32Sign( float32 a ) ++static inline flag extractFloat32Sign( float32 a ) + { + + return float32_val(a)>>31; +@@ -280,7 +280,7 @@ static void + | significand. + *----------------------------------------------------------------------------*/ + +-INLINE float32 packFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig) ++static inline float32 packFloat32(flag zSign, int_fast16_t zExp, uint32_t zSig) + { + + return make_float32( +@@ -389,7 +389,7 @@ static float32 + | Returns the fraction bits of the double-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE uint64_t extractFloat64Frac( float64 a ) ++static inline uint64_t extractFloat64Frac( float64 a ) + { + + return float64_val(a) & LIT64( 0x000FFFFFFFFFFFFF ); +@@ -400,7 +400,7 @@ INLINE uint64_t extractFloat64Frac( float64 a ) + | Returns the exponent bits of the double-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE int_fast16_t extractFloat64Exp(float64 a) ++static inline int_fast16_t extractFloat64Exp(float64 a) + { + + return ( float64_val(a)>>52 ) & 0x7FF; +@@ -411,7 +411,7 @@ INLINE int_fast16_t extractFloat64Exp(float64 a) + | Returns the sign bit of the double-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE flag extractFloat64Sign( float64 a ) ++static inline flag extractFloat64Sign( float64 a ) + { + + return float64_val(a)>>63; +@@ -462,7 +462,7 @@ static void + | significand. + *----------------------------------------------------------------------------*/ + +-INLINE float64 packFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig) ++static inline float64 packFloat64(flag zSign, int_fast16_t zExp, uint64_t zSig) + { + + return make_float64( +@@ -572,7 +572,7 @@ static float64 + | value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE uint64_t extractFloatx80Frac( floatx80 a ) ++static inline uint64_t extractFloatx80Frac( floatx80 a ) + { + + return a.low; +@@ -584,7 +584,7 @@ INLINE uint64_t extractFloatx80Frac( floatx80 a ) + | value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE int32 extractFloatx80Exp( floatx80 a ) ++static inline int32 extractFloatx80Exp( floatx80 a ) + { + + return a.high & 0x7FFF; +@@ -596,7 +596,7 @@ INLINE int32 extractFloatx80Exp( floatx80 a ) + | `a'. + *----------------------------------------------------------------------------*/ + +-INLINE flag extractFloatx80Sign( floatx80 a ) ++static inline flag extractFloatx80Sign( floatx80 a ) + { + + return a.high>>15; +@@ -626,7 +626,7 @@ static void + | extended double-precision floating-point value, returning the result. + *----------------------------------------------------------------------------*/ + +-INLINE floatx80 packFloatx80( flag zSign, int32 zExp, uint64_t zSig ) ++static inline floatx80 packFloatx80( flag zSign, int32 zExp, uint64_t zSig ) + { + floatx80 z; + +@@ -857,7 +857,7 @@ static floatx80 + | floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE uint64_t extractFloat128Frac1( float128 a ) ++static inline uint64_t extractFloat128Frac1( float128 a ) + { + + return a.low; +@@ -869,7 +869,7 @@ INLINE uint64_t extractFloat128Frac1( float128 a ) + | floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE uint64_t extractFloat128Frac0( float128 a ) ++static inline uint64_t extractFloat128Frac0( float128 a ) + { + + return a.high & LIT64( 0x0000FFFFFFFFFFFF ); +@@ -881,7 +881,7 @@ INLINE uint64_t extractFloat128Frac0( float128 a ) + | `a'. + *----------------------------------------------------------------------------*/ + +-INLINE int32 extractFloat128Exp( float128 a ) ++static inline int32 extractFloat128Exp( float128 a ) + { + + return ( a.high>>48 ) & 0x7FFF; +@@ -892,7 +892,7 @@ INLINE int32 extractFloat128Exp( float128 a ) + | Returns the sign bit of the quadruple-precision floating-point value `a'. + *----------------------------------------------------------------------------*/ + +-INLINE flag extractFloat128Sign( float128 a ) ++static inline flag extractFloat128Sign( float128 a ) + { + + return a.high>>63; +@@ -953,7 +953,7 @@ static void + | significand. + *----------------------------------------------------------------------------*/ + +-INLINE float128 ++static inline float128 + packFloat128( flag zSign, int32 zExp, uint64_t zSig0, uint64_t zSig1 ) + { + float128 z; +@@ -6560,7 +6560,7 @@ uint64_t float64_to_uint64_round_to_zero (float64 a STATUS_PARAM) + } + + #define COMPARE(s, nan_exp) \ +-INLINE int float ## s ## _compare_internal( float ## s a, float ## s b, \ ++static inline int float ## s ## _compare_internal( float ## s a, float ## s b, \ + int is_quiet STATUS_PARAM ) \ + { \ + flag aSign, bSign; \ +@@ -6612,7 +6612,7 @@ int float ## s ## _compare_quiet( float ## s a, float ## s b STATUS_PARAM ) \ + COMPARE(32, 0xff) + COMPARE(64, 0x7ff) + +-INLINE int floatx80_compare_internal( floatx80 a, floatx80 b, ++static inline int floatx80_compare_internal( floatx80 a, floatx80 b, + int is_quiet STATUS_PARAM ) + { + flag aSign, bSign; +@@ -6658,7 +6658,7 @@ int floatx80_compare_quiet( floatx80 a, floatx80 b STATUS_PARAM ) + return floatx80_compare_internal(a, b, 1 STATUS_VAR); + } + +-INLINE int float128_compare_internal( float128 a, float128 b, ++static inline int float128_compare_internal( float128 a, float128 b, + int is_quiet STATUS_PARAM ) + { + flag aSign, bSign; +@@ -6707,7 +6707,7 @@ int float128_compare_quiet( float128 a, float128 b STATUS_PARAM ) + * NaNs and +0 vs -0. + */ + #define MINMAX(s, nan_exp) \ +-INLINE float ## s float ## s ## _minmax(float ## s a, float ## s b, \ ++static inline float ## s float ## s ## _minmax(float ## s a, float ## s b, \ + int ismin STATUS_PARAM ) \ + { \ + flag aSign, bSign; \ +diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h +index f3927e2..de4940c 100644 +--- a/include/fpu/softfloat.h ++++ b/include/fpu/softfloat.h +@@ -63,7 +63,6 @@ typedef uint64_t uint64; + typedef int64_t int64; + + #define LIT64( a ) a##LL +-#define INLINE static inline + + #define STATUS_PARAM , float_status *status + #define STATUS(field) status->field +@@ -182,23 +181,23 @@ typedef struct float_status { + + void set_float_rounding_mode(int val STATUS_PARAM); + void set_float_exception_flags(int val STATUS_PARAM); +-INLINE void set_float_detect_tininess(int val STATUS_PARAM) ++static inline void set_float_detect_tininess(int val STATUS_PARAM) + { + STATUS(float_detect_tininess) = val; + } +-INLINE void set_flush_to_zero(flag val STATUS_PARAM) ++static inline void set_flush_to_zero(flag val STATUS_PARAM) + { + STATUS(flush_to_zero) = val; + } +-INLINE void set_flush_inputs_to_zero(flag val STATUS_PARAM) ++static inline void set_flush_inputs_to_zero(flag val STATUS_PARAM) + { + STATUS(flush_inputs_to_zero) = val; + } +-INLINE void set_default_nan_mode(flag val STATUS_PARAM) ++static inline void set_default_nan_mode(flag val STATUS_PARAM) + { + STATUS(default_nan_mode) = val; + } +-INLINE int get_float_exception_flags(float_status *status) ++static inline int get_float_exception_flags(float_status *status) + { + return STATUS(float_exception_flags); + } +@@ -252,7 +251,7 @@ int float16_is_quiet_nan( float16 ); + int float16_is_signaling_nan( float16 ); + float16 float16_maybe_silence_nan( float16 ); + +-INLINE int float16_is_any_nan(float16 a) ++static inline int float16_is_any_nan(float16 a) + { + return ((float16_val(a) & ~0x8000) > 0x7c00); + } +@@ -307,7 +306,7 @@ int float32_is_signaling_nan( float32 ); + float32 float32_maybe_silence_nan( float32 ); + float32 float32_scalbn( float32, int STATUS_PARAM ); + +-INLINE float32 float32_abs(float32 a) ++static inline float32 float32_abs(float32 a) + { + /* Note that abs does *not* handle NaN specially, nor does + * it flush denormal inputs to zero. +@@ -315,7 +314,7 @@ INLINE float32 float32_abs(float32 a) + return make_float32(float32_val(a) & 0x7fffffff); + } + +-INLINE float32 float32_chs(float32 a) ++static inline float32 float32_chs(float32 a) + { + /* Note that chs does *not* handle NaN specially, nor does + * it flush denormal inputs to zero. +@@ -323,32 +322,32 @@ INLINE float32 float32_chs(float32 a) + return make_float32(float32_val(a) ^ 0x80000000); + } + +-INLINE int float32_is_infinity(float32 a) ++static inline int float32_is_infinity(float32 a) + { + return (float32_val(a) & 0x7fffffff) == 0x7f800000; + } + +-INLINE int float32_is_neg(float32 a) ++static inline int float32_is_neg(float32 a) + { + return float32_val(a) >> 31; + } + +-INLINE int float32_is_zero(float32 a) ++static inline int float32_is_zero(float32 a) + { + return (float32_val(a) & 0x7fffffff) == 0; + } + +-INLINE int float32_is_any_nan(float32 a) ++static inline int float32_is_any_nan(float32 a) + { + return ((float32_val(a) & ~(1 << 31)) > 0x7f800000UL); + } + +-INLINE int float32_is_zero_or_denormal(float32 a) ++static inline int float32_is_zero_or_denormal(float32 a) + { + return (float32_val(a) & 0x7f800000) == 0; + } + +-INLINE float32 float32_set_sign(float32 a, int sign) ++static inline float32 float32_set_sign(float32 a, int sign) + { + return make_float32((float32_val(a) & 0x7fffffff) | (sign << 31)); + } +@@ -413,7 +412,7 @@ int float64_is_signaling_nan( float64 ); + float64 float64_maybe_silence_nan( float64 ); + float64 float64_scalbn( float64, int STATUS_PARAM ); + +-INLINE float64 float64_abs(float64 a) ++static inline float64 float64_abs(float64 a) + { + /* Note that abs does *not* handle NaN specially, nor does + * it flush denormal inputs to zero. +@@ -421,7 +420,7 @@ INLINE float64 float64_abs(float64 a) + return make_float64(float64_val(a) & 0x7fffffffffffffffLL); + } + +-INLINE float64 float64_chs(float64 a) ++static inline float64 float64_chs(float64 a) + { + /* Note that chs does *not* handle NaN specially, nor does + * it flush denormal inputs to zero. +@@ -429,32 +428,32 @@ INLINE float64 float64_chs(float64 a) + return make_float64(float64_val(a) ^ 0x8000000000000000LL); + } + +-INLINE int float64_is_infinity(float64 a) ++static inline int float64_is_infinity(float64 a) + { + return (float64_val(a) & 0x7fffffffffffffffLL ) == 0x7ff0000000000000LL; + } + +-INLINE int float64_is_neg(float64 a) ++static inline int float64_is_neg(float64 a) + { + return float64_val(a) >> 63; + } + +-INLINE int float64_is_zero(float64 a) ++static inline int float64_is_zero(float64 a) + { + return (float64_val(a) & 0x7fffffffffffffffLL) == 0; + } + +-INLINE int float64_is_any_nan(float64 a) ++static inline int float64_is_any_nan(float64 a) + { + return ((float64_val(a) & ~(1ULL << 63)) > 0x7ff0000000000000ULL); + } + +-INLINE int float64_is_zero_or_denormal(float64 a) ++static inline int float64_is_zero_or_denormal(float64 a) + { + return (float64_val(a) & 0x7ff0000000000000LL) == 0; + } + +-INLINE float64 float64_set_sign(float64 a, int sign) ++static inline float64 float64_set_sign(float64 a, int sign) + { + return make_float64((float64_val(a) & 0x7fffffffffffffffULL) + | ((int64_t)sign << 63)); +@@ -508,39 +507,39 @@ int floatx80_is_signaling_nan( floatx80 ); + floatx80 floatx80_maybe_silence_nan( floatx80 ); + floatx80 floatx80_scalbn( floatx80, int STATUS_PARAM ); + +-INLINE floatx80 floatx80_abs(floatx80 a) ++static inline floatx80 floatx80_abs(floatx80 a) + { + a.high &= 0x7fff; + return a; + } + +-INLINE floatx80 floatx80_chs(floatx80 a) ++static inline floatx80 floatx80_chs(floatx80 a) + { + a.high ^= 0x8000; + return a; + } + +-INLINE int floatx80_is_infinity(floatx80 a) ++static inline int floatx80_is_infinity(floatx80 a) + { + return (a.high & 0x7fff) == 0x7fff && a.low == 0x8000000000000000LL; + } + +-INLINE int floatx80_is_neg(floatx80 a) ++static inline int floatx80_is_neg(floatx80 a) + { + return a.high >> 15; + } + +-INLINE int floatx80_is_zero(floatx80 a) ++static inline int floatx80_is_zero(floatx80 a) + { + return (a.high & 0x7fff) == 0 && a.low == 0; + } + +-INLINE int floatx80_is_zero_or_denormal(floatx80 a) ++static inline int floatx80_is_zero_or_denormal(floatx80 a) + { + return (a.high & 0x7fff) == 0; + } + +-INLINE int floatx80_is_any_nan(floatx80 a) ++static inline int floatx80_is_any_nan(floatx80 a) + { + return ((a.high & 0x7fff) == 0x7fff) && (a.low<<1); + } +@@ -593,39 +592,39 @@ int float128_is_signaling_nan( float128 ); + float128 float128_maybe_silence_nan( float128 ); + float128 float128_scalbn( float128, int STATUS_PARAM ); + +-INLINE float128 float128_abs(float128 a) ++static inline float128 float128_abs(float128 a) + { + a.high &= 0x7fffffffffffffffLL; + return a; + } + +-INLINE float128 float128_chs(float128 a) ++static inline float128 float128_chs(float128 a) + { + a.high ^= 0x8000000000000000LL; + return a; + } + +-INLINE int float128_is_infinity(float128 a) ++static inline int float128_is_infinity(float128 a) + { + return (a.high & 0x7fffffffffffffffLL) == 0x7fff000000000000LL && a.low == 0; + } + +-INLINE int float128_is_neg(float128 a) ++static inline int float128_is_neg(float128 a) + { + return a.high >> 63; + } + +-INLINE int float128_is_zero(float128 a) ++static inline int float128_is_zero(float128 a) + { + return (a.high & 0x7fffffffffffffffLL) == 0 && a.low == 0; + } + +-INLINE int float128_is_zero_or_denormal(float128 a) ++static inline int float128_is_zero_or_denormal(float128 a) + { + return (a.high & 0x7fff000000000000LL) == 0; + } + +-INLINE int float128_is_any_nan(float128 a) ++static inline int float128_is_any_nan(float128 a) + { + return ((a.high >> 48) & 0x7fff) == 0x7fff && + ((a.low != 0) || ((a.high & 0xffffffffffffLL) != 0)); +-- +2.1.0 + diff --git a/SOURCES/kvm-fw-cfg-support-writeable-blobs.patch b/SOURCES/kvm-fw-cfg-support-writeable-blobs.patch new file mode 100644 index 0000000..bc7a8cb --- /dev/null +++ b/SOURCES/kvm-fw-cfg-support-writeable-blobs.patch @@ -0,0 +1,317 @@ +From 1cc1455511ff6ada7f4b3c4e23d8ff82f820f1ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:38 +0100 +Subject: [PATCH 07/41] fw-cfg: support writeable blobs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-8-marcandre.lureau@redhat.com> +Patchwork-id: 78356 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 07/41] fw-cfg: support writeable blobs +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: "Michael S. Tsirkin" + +Useful to send guest data back to QEMU. + +Changes from Laszlo Ersek : +- rebase the patch from Michael Tsirkin's original postings at [1] and [2] + to the following patches: + - loader: Allow a custom AddressSpace when loading ROMs + - loader: Add AddressSpace loading support to uImages + - loader: fix handling of custom address spaces when adding ROM blobs +- reject such writes immediately that would exceed the end of the array, + rather than performing a partial write before setting the error bit: see + the (len != dma.length) condition +- document the write interface + +[1] http://lists.nongnu.org/archive/html/qemu-devel/2016-02/msg04968.html +[2] http://lists.nongnu.org/archive/html/qemu-devel/2016-03/msg02735.html + +Cc: "Gabriel L. Somlo" +Cc: "Michael S. Tsirkin" +Cc: Gerd Hoffmann +Cc: Igor Mammedov +Cc: Michael Walle +Cc: Paolo Bonzini +Cc: Peter Maydell +Cc: Shannon Zhao +Cc: qemu-arm@nongnu.org +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Laszlo Ersek +Reviewed-by: Marcel Apfelbaum +Acked-by: Gabriel Somlo +Tested-by: Gabriel Somlo +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Eduardo Habkost + +(cherry picked from commit baf2d5bfbac015b27f4db74feab235e167df0c84) + +RHEL: major conflict due to internal API changes, but functional + changes minor. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/core/loader.c | 19 ++++++++++++------- + hw/i386/acpi-build.c | 2 +- + hw/lm32/lm32_hwsetup.h | 3 ++- + hw/nvram/fw_cfg.c | 35 +++++++++++++++++++++++++++++------ + include/hw/loader.h | 5 +++-- + include/hw/nvram/fw_cfg.h | 2 +- + 6 files changed, 48 insertions(+), 18 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index 9309b8c..c824bc2 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -575,13 +575,13 @@ static void rom_insert(Rom *rom) + QTAILQ_INSERT_TAIL(&roms, rom, next); + } + +-static void *rom_set_mr(Rom *rom, const char *name) ++static void *rom_set_mr(Rom *rom, const char *name, bool ro) + { + void *data; + + rom->mr = g_malloc(sizeof(*rom->mr)); + memory_region_init_ram(rom->mr, name, rom->datasize); +- memory_region_set_readonly(rom->mr, true); ++ memory_region_set_readonly(rom->mr, ro); + vmstate_register_ram_global(rom->mr); + + data = memory_region_get_ram_ptr(rom->mr); +@@ -645,7 +645,7 @@ int rom_add_file(const char *file, const char *fw_dir, + snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); + + if ((!option_rom || option_rom_has_mr) && rom_file_has_mr) { +- data = rom_set_mr(rom, devpath); ++ data = rom_set_mr(rom, devpath, true); + } else { + data = rom->data; + } +@@ -670,7 +670,8 @@ err: + + void *rom_add_blob(const char *name, const void *blob, size_t len, + hwaddr addr, const char *fw_file_name, +- FWCfgReadCallback fw_callback, void *callback_opaque) ++ FWCfgReadCallback fw_callback, void *callback_opaque, ++ bool read_only) + { + Rom *rom; + void *data = NULL; +@@ -686,17 +687,21 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, + if (fw_file_name && fw_cfg) { + char devpath[100]; + +- snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); ++ if (read_only) { ++ snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); ++ } else { ++ snprintf(devpath, sizeof(devpath), "/ram@%s", fw_file_name); ++ } + + if (rom_file_has_mr) { +- data = rom_set_mr(rom, devpath); ++ data = rom_set_mr(rom, devpath, read_only); + } else { + data = rom->data; + } + + fw_cfg_add_file_callback(fw_cfg, fw_file_name, + fw_callback, callback_opaque, +- data, rom->romsize); ++ data, rom->romsize, read_only); + } + return data; + } +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index 85291f5..52dd500 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -1182,7 +1182,7 @@ static void *acpi_add_rom_blob(AcpiBuildState *build_state, GArray *blob, + const char *name) + { + return rom_add_blob(name, blob->data, acpi_data_len(blob), -1, name, +- acpi_build_update, build_state); ++ acpi_build_update, build_state, true); + } + + static const VMStateDescription vmstate_acpi_build = { +diff --git a/hw/lm32/lm32_hwsetup.h b/hw/lm32/lm32_hwsetup.h +index 9fd5e69..92f952f 100644 +--- a/hw/lm32/lm32_hwsetup.h ++++ b/hw/lm32/lm32_hwsetup.h +@@ -73,7 +73,8 @@ static inline void hwsetup_free(HWSetup *hw) + static inline void hwsetup_create_rom(HWSetup *hw, + hwaddr base) + { +- rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE, base, NULL, NULL, NULL); ++ rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE, ++ base, NULL, NULL, NULL, true); + } + + static inline void hwsetup_add_u8(HWSetup *hw, uint8_t u) +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 1317df7..1789487 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -46,9 +46,11 @@ + #define FW_CFG_DMA_CTL_READ 0x02 + #define FW_CFG_DMA_CTL_SKIP 0x04 + #define FW_CFG_DMA_CTL_SELECT 0x08 ++#define FW_CFG_DMA_CTL_WRITE 0x10 + + typedef struct FWCfgEntry { + uint32_t len; ++ bool allow_write; + uint8_t *data; + void *callback_opaque; + FWCfgReadCallback read_callback; +@@ -279,7 +281,7 @@ static void fw_cfg_dma_transfer(FWCfgState *s) + FWCfgDmaAccess dma; + int arch; + FWCfgEntry *e; +- int read; ++ int read = 0, write = 0; + dma_addr_t dma_addr; + + /* Reset the address before the next access */ +@@ -306,8 +308,13 @@ static void fw_cfg_dma_transfer(FWCfgState *s) + + if (dma.control & FW_CFG_DMA_CTL_READ) { + read = 1; ++ write = 0; ++ } else if (dma.control & FW_CFG_DMA_CTL_WRITE) { ++ read = 0; ++ write = 1; + } else if (dma.control & FW_CFG_DMA_CTL_SKIP) { + read = 0; ++ write = 0; + } else { + dma.length = 0; + } +@@ -328,6 +335,9 @@ static void fw_cfg_dma_transfer(FWCfgState *s) + } + } + ++ if (write) { ++ dma.control |= FW_CFG_DMA_CTL_ERROR; ++ } + } else { + if (dma.length <= (e->len - s->cur_offset)) { + len = dma.length; +@@ -349,6 +359,16 @@ static void fw_cfg_dma_transfer(FWCfgState *s) + } + } + ++ if (write) { ++ if (!e->allow_write || ++ len != dma.length || ++ dma_memory_read(s->dma, dma.address, ++ &e->data[s->cur_offset], len)) { ++ dma.control |= FW_CFG_DMA_CTL_ERROR; ++ } ++ } ++ ++ + s->cur_offset += len; + } + +@@ -539,7 +559,8 @@ static const VMStateDescription vmstate_fw_cfg = { + static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key, + FWCfgReadCallback callback, + void *callback_opaque, +- void *data, size_t len) ++ void *data, size_t len, ++ bool read_only) + { + int arch = !!(key & FW_CFG_ARCH_LOCAL); + +@@ -552,11 +573,12 @@ static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key, + s->entries[arch][key].len = (uint32_t)len; + s->entries[arch][key].read_callback = callback; + s->entries[arch][key].callback_opaque = callback_opaque; ++ s->entries[arch][key].allow_write = !read_only; + } + + void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len) + { +- fw_cfg_add_bytes_read_callback(s, key, NULL, NULL, data, len); ++ fw_cfg_add_bytes_read_callback(s, key, NULL, NULL, data, len, true); + } + + void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value) +@@ -595,7 +617,7 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value) + + void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + FWCfgReadCallback callback, void *callback_opaque, +- void *data, size_t len) ++ void *data, size_t len, bool read_only) + { + int i, index; + size_t dsize; +@@ -620,7 +642,8 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + } + + fw_cfg_add_bytes_read_callback(s, FW_CFG_FILE_FIRST + index, +- callback, callback_opaque, data, len); ++ callback, callback_opaque, data, len, ++ read_only); + + s->files->f[index].size = cpu_to_be32(len); + s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index); +@@ -632,7 +655,7 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + void fw_cfg_add_file(FWCfgState *s, const char *filename, + void *data, size_t len) + { +- fw_cfg_add_file_callback(s, filename, NULL, NULL, data, len); ++ fw_cfg_add_file_callback(s, filename, NULL, NULL, data, len, true); + } + + static void fw_cfg_machine_ready(struct Notifier *n, void *data) +diff --git a/include/hw/loader.h b/include/hw/loader.h +index a5e02ce..f04a834 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -31,7 +31,8 @@ int rom_add_file(const char *file, const char *fw_dir, + bool option_rom); + void *rom_add_blob(const char *name, const void *blob, size_t len, + hwaddr addr, const char *fw_file_name, +- FWCfgReadCallback fw_callback, void *callback_opaque); ++ FWCfgReadCallback fw_callback, void *callback_opaque, ++ bool read_only); + int rom_add_elf_program(const char *name, void *data, size_t datasize, + size_t romsize, hwaddr addr); + int rom_load_all(void); +@@ -44,7 +45,7 @@ void do_info_roms(Monitor *mon, const QDict *qdict); + #define rom_add_file_fixed(_f, _a, _i) \ + rom_add_file(_f, NULL, _a, _i, false) + #define rom_add_blob_fixed(_f, _b, _l, _a) \ +- (rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL) ? 0 : -1) ++ (rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL, true) ? 0 : -1) + + #define PC_ROM_MIN_VGA 0xc0000 + #define PC_ROM_MIN_OPTION 0xc8000 +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index b193e38..76fc787 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -83,7 +83,7 @@ void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, + size_t len); + void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + FWCfgReadCallback callback, void *callback_opaque, +- void *data, size_t len); ++ void *data, size_t len, bool read_only); + FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + hwaddr crl_addr, hwaddr data_addr); + FWCfgState *fw_cfg_init_io_dma(uint32_t iobase, uint32_t dma_iobase, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-add-API-to-find-FW-cfg-object.patch b/SOURCES/kvm-fw_cfg-add-API-to-find-FW-cfg-object.patch new file mode 100644 index 0000000..77955c2 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-add-API-to-find-FW-cfg-object.patch @@ -0,0 +1,113 @@ +From b33784c26d96c3c020f4b0245f77731af3f88b8e Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:29 +0100 +Subject: [PATCH 70/81] fw_cfg: add API to find FW cfg object + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-2-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55546 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 1/9] fw_cfg: add API to find FW cfg object +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: "Michael S. Tsirkin" + +Remove some code duplication by adding a +function to look up the fw cfg file. +This way, we don't need to duplicate same strings everywhere. +Use by both fw cfg and pvpanic device. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 600c60b76d0682f6c39d19bfff79da9321e8cf86) +Signed-off-by: Marcel Apfelbaum +--- + hw/misc/pvpanic.c | 2 +- + hw/nvram/fw_cfg.c | 15 ++++++++++++--- + include/hw/nvram/fw_cfg.h | 2 ++ + 3 files changed, 15 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/pvpanic.c | 2 +- + hw/nvram/fw_cfg.c | 15 ++++++++++++--- + include/hw/nvram/fw_cfg.h | 2 ++ + 3 files changed, 15 insertions(+), 4 deletions(-) + +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index 439d636..d17c3c9 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -96,7 +96,7 @@ static int pvpanic_isa_initfn(ISADevice *dev) + isa_register_ioport(dev, &s->io, s->ioport); + + if (!port_configured) { +- fw_cfg = object_resolve_path("/machine/fw_cfg", NULL); ++ fw_cfg = fw_cfg_find(); + if (fw_cfg) { + fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", + g_memdup(&s->ioport, sizeof(s->ioport)), +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 3fa1488..064344d 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -32,6 +32,9 @@ + + #define FW_CFG_SIZE 2 + #define FW_CFG_DATA_SIZE 1 ++#define TYPE_FW_CFG "fw_cfg" ++#define FW_CFG_NAME "fw_cfg" ++#define FW_CFG_PATH "/machine/" FW_CFG_NAME + + typedef struct FWCfgEntry { + uint32_t len; +@@ -493,8 +496,8 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + + s = DO_UPCAST(FWCfgState, busdev.qdev, dev); + +- if (!object_resolve_path("/machine/fw_cfg", NULL)) { +- object_property_add_child(qdev_get_machine(), "fw_cfg", OBJECT(s), ++ if (!object_resolve_path(FW_CFG_PATH, NULL)) { ++ object_property_add_child(qdev_get_machine(), FW_CFG_NAME, OBJECT(s), + NULL); + } + +@@ -553,6 +556,12 @@ static Property fw_cfg_properties[] = { + DEFINE_PROP_END_OF_LIST(), + }; + ++FWCfgState *fw_cfg_find(void) ++{ ++ return OBJECT_CHECK(FWCfgState, object_resolve_path(FW_CFG_PATH, NULL), ++ TYPE_FW_CFG); ++} ++ + static void fw_cfg_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); +@@ -565,7 +574,7 @@ static void fw_cfg_class_init(ObjectClass *klass, void *data) + } + + static const TypeInfo fw_cfg_info = { +- .name = "fw_cfg", ++ .name = TYPE_FW_CFG, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(FWCfgState), + .class_init = fw_cfg_class_init, +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index 3e4a334..48a8aa4 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -73,6 +73,8 @@ void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, + FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + hwaddr crl_addr, hwaddr data_addr); + ++FWCfgState *fw_cfg_find(void); ++ + #endif /* NO_QEMU_PROTOS */ + + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-fw_cfg-add-check-to-validate-current-entry-value-CVE.patch b/SOURCES/kvm-fw_cfg-add-check-to-validate-current-entry-value-CVE.patch new file mode 100644 index 0000000..ac3c08f --- /dev/null +++ b/SOURCES/kvm-fw_cfg-add-check-to-validate-current-entry-value-CVE.patch @@ -0,0 +1,98 @@ +From ba24567fd90702ea40ff320a79bc921b38510f22 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 21 Jan 2016 07:17:43 +0100 +Subject: [PATCH 2/2] fw_cfg: add check to validate current entry value + (CVE-2016-1714) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Miroslav Rezanina +Message-id: <1453360663-5066-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 68834 +O-Subject: [RHEL-7.2.z/RHEL-7.3 qemu-kvm PATCH] fw_cfg: add check to validate current entry value (CVE-2016-1714) +Bugzilla: 1298048 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann + +From: Prasad J Pandit + +When processing firmware configurations, an OOB r/w access occurs +if 's->cur_entry' is set to be invalid(FW_CFG_INVALID=0xffff). +Add a check to validate 's->cur_entry' to avoid such access. + +This patch is based on upstream commit 66f8fd9dda312191b78d2a2ba2848bcee76127a2 + Author: Gabriel L. Somlo + Date: Thu Nov 5 09:32:50 2015 -0500 + + fw_cfg: avoid calculating invalid current entry pointer + + When calculating a pointer to the currently selected fw_cfg item, the + following is used: + + FWCfgEntry *e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; + + When s->cur_entry is FW_CFG_INVALID, we are calculating the address of + a non-existent element in s->entries[arch][...], which is undefined. + + This patch ensures the resulting entry pointer is set to NULL whenever + s->cur_entry is FW_CFG_INVALID. + + Reported-by: Laszlo Ersek + Reviewed-by: Laszlo Ersek + Signed-off-by: Gabriel Somlo + Message-id: 1446733972-1602-5-git-send-email-somlo@cmu.edu + Cc: Marc Marí + Signed-off-by: Gabriel Somlo + Reviewed-by: Laszlo Ersek + Signed-off-by: Gerd Hoffmann + +with added chunk for fw_cfg_write() that was removed in commit +023e3148567ac898c7258138f8e86c3c2bb40d07 +and missing chunk for fw_cfg_dma_transfer that was added in commit +a4c0d1deb785611c96a455f65ec032976b00b36f. + +Reported-by: Donghai Zdh +Signed-off-by: Prasad J Pandit +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index b865c09..fcb3146 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -207,12 +207,15 @@ static void fw_cfg_reboot(FWCfgState *s) + static void fw_cfg_write(FWCfgState *s, uint8_t value) + { + int arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL); +- FWCfgEntry *e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; ++ FWCfgEntry *e = (s->cur_entry == FW_CFG_INVALID) ? NULL : ++ &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; + + trace_fw_cfg_write(s, value); + +- if (s->cur_entry & FW_CFG_WRITE_CHANNEL && e->callback && +- s->cur_offset < e->len) { ++ if (s->cur_entry & FW_CFG_WRITE_CHANNEL ++ && e != NULL ++ && e->callback ++ && s->cur_offset < e->len) { + e->data[s->cur_offset++] = value; + if (s->cur_offset == e->len) { + e->callback(e->callback_opaque, e->data); +@@ -241,7 +244,8 @@ static int fw_cfg_select(FWCfgState *s, uint16_t key) + static uint8_t fw_cfg_read(FWCfgState *s) + { + int arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL); +- FWCfgEntry *e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; ++ FWCfgEntry *e = (s->cur_entry == FW_CFG_INVALID) ? NULL : ++ &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; + uint8_t ret; + + if (s->cur_entry == FW_CFG_INVALID || !e->data || s->cur_offset >= e->len) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-add-write-callback.patch b/SOURCES/kvm-fw_cfg-add-write-callback.patch new file mode 100644 index 0000000..01f90d6 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-add-write-callback.patch @@ -0,0 +1,173 @@ +From f865f4fe293db1dfdfbb2e03963d0c6a25a398cc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:42 +0100 +Subject: [PATCH 11/41] fw_cfg: add write callback +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-12-marcandre.lureau@redhat.com> +Patchwork-id: 78361 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 11/41] fw_cfg: add write callback +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +Reintroduce the write callback that was removed when write support was +removed in commit 023e3148567ac898c7258138f8e86c3c2bb40d07. + +Contrary to the previous callback implementation, the write_cb +callback is called whenever a write happened, so handlers must be +ready to handle partial write as necessary. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit 5f9252f7cc12c5cec1b3c6695aca02eb52ea7acc) + +RHEL: major conflict due to API changes, but minor functional changes. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/core/loader.c | 2 +- + hw/nvram/fw_cfg.c | 32 ++++++++++++++++++++------------ + include/hw/nvram/fw_cfg.h | 8 ++++++-- + 3 files changed, 27 insertions(+), 15 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index c824bc2..5a15449 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -700,7 +700,7 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, + } + + fw_cfg_add_file_callback(fw_cfg, fw_file_name, +- fw_callback, callback_opaque, ++ fw_callback, NULL, callback_opaque, + data, rom->romsize, read_only); + } + return data; +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index a7bc98e..616c782 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -54,6 +54,7 @@ typedef struct FWCfgEntry { + uint8_t *data; + void *callback_opaque; + FWCfgReadCallback read_callback; ++ FWCfgWriteCallback write_cb; + } FWCfgEntry; + + struct FWCfgState { +@@ -365,6 +366,8 @@ static void fw_cfg_dma_transfer(FWCfgState *s) + dma_memory_read(s->dma, dma.address, + &e->data[s->cur_offset], len)) { + dma.control |= FW_CFG_DMA_CTL_ERROR; ++ } else if (e->write_cb) { ++ e->write_cb(e->callback_opaque, s->cur_offset, len); + } + } + +@@ -556,11 +559,12 @@ static const VMStateDescription vmstate_fw_cfg = { + } + }; + +-static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key, +- FWCfgReadCallback callback, +- void *callback_opaque, +- void *data, size_t len, +- bool read_only) ++static void fw_cfg_add_bytes_callback(FWCfgState *s, uint16_t key, ++ FWCfgReadCallback callback, ++ FWCfgWriteCallback write_cb, ++ void *callback_opaque, ++ void *data, size_t len, ++ bool read_only) + { + int arch = !!(key & FW_CFG_ARCH_LOCAL); + +@@ -572,13 +576,14 @@ static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key, + s->entries[arch][key].data = data; + s->entries[arch][key].len = (uint32_t)len; + s->entries[arch][key].read_callback = callback; ++ s->entries[arch][key].write_cb = write_cb; + s->entries[arch][key].callback_opaque = callback_opaque; + s->entries[arch][key].allow_write = !read_only; + } + + void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len) + { +- fw_cfg_add_bytes_read_callback(s, key, NULL, NULL, data, len, true); ++ fw_cfg_add_bytes_callback(s, key, NULL, NULL, NULL, data, len, true); + } + + void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value) +@@ -616,8 +621,11 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value) + } + + void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, +- FWCfgReadCallback callback, void *callback_opaque, +- void *data, size_t len, bool read_only) ++ FWCfgReadCallback callback, ++ FWCfgWriteCallback write_cb, ++ void *callback_opaque, ++ void *data, size_t len, ++ bool read_only) + { + int i, index; + size_t dsize; +@@ -641,9 +649,9 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + } + } + +- fw_cfg_add_bytes_read_callback(s, FW_CFG_FILE_FIRST + index, +- callback, callback_opaque, data, len, +- read_only); ++ fw_cfg_add_bytes_callback(s, FW_CFG_FILE_FIRST + index, ++ callback, write_cb, callback_opaque, data, len, ++ read_only); + + s->files->f[index].size = cpu_to_be32(len); + s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index); +@@ -655,7 +663,7 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + void fw_cfg_add_file(FWCfgState *s, const char *filename, + void *data, size_t len) + { +- fw_cfg_add_file_callback(s, filename, NULL, NULL, data, len, true); ++ fw_cfg_add_file_callback(s, filename, NULL, NULL, NULL, data, len, true); + } + + static void fw_cfg_machine_ready(struct Notifier *n, void *data) +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index 76fc787..a77ab84 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -73,6 +73,7 @@ typedef struct FWCfgDmaAccess { + + typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); + typedef void (*FWCfgReadCallback)(void *opaque, uint32_t offset); ++typedef void (*FWCfgWriteCallback)(void *opaque, off_t start, size_t len); + + void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len); + void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value); +@@ -82,8 +83,11 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); + void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, + size_t len); + void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, +- FWCfgReadCallback callback, void *callback_opaque, +- void *data, size_t len, bool read_only); ++ FWCfgReadCallback callback, ++ FWCfgWriteCallback write_cb, ++ void *callback_opaque, ++ void *data, size_t len, ++ bool read_only); + FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + hwaddr crl_addr, hwaddr data_addr); + FWCfgState *fw_cfg_init_io_dma(uint32_t iobase, uint32_t dma_iobase, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-avoid-calculating-invalid-current-entry-point.patch b/SOURCES/kvm-fw_cfg-avoid-calculating-invalid-current-entry-point.patch new file mode 100644 index 0000000..5ab5257 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-avoid-calculating-invalid-current-entry-point.patch @@ -0,0 +1,67 @@ +From 8fb3ac70845fbe261407e7782d3e6233e368da8f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:37 +0100 +Subject: [PATCH 06/41] fw_cfg: avoid calculating invalid current entry pointer +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-7-marcandre.lureau@redhat.com> +Patchwork-id: 78355 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 06/41] fw_cfg: avoid calculating invalid current entry pointer +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: "Gabriel L. Somlo" + +When calculating a pointer to the currently selected fw_cfg item, the +following is used: + + FWCfgEntry *e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; + +When s->cur_entry is FW_CFG_INVALID, we are calculating the address of +a non-existent element in s->entries[arch][...], which is undefined. + +This patch ensures the resulting entry pointer is set to NULL whenever +s->cur_entry is FW_CFG_INVALID. + +Reported-by: Laszlo Ersek +Reviewed-by: Laszlo Ersek +Signed-off-by: Gabriel Somlo +Message-id: 1446733972-1602-5-git-send-email-somlo@cmu.edu +Cc: Marc Marí +Signed-off-by: Gabriel Somlo +Reviewed-by: Laszlo Ersek +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit 66f8fd9dda312191b78d2a2ba2848bcee76127a2) + +RHEL: fix minor conflicts due to previous partial backport in commit + ba24567fd90702ea40ff320a79bc921b38510f22. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 85e950c..1317df7 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -301,7 +301,8 @@ static void fw_cfg_dma_transfer(FWCfgState *s) + } + + arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL); +- e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; ++ e = (s->cur_entry == FW_CFG_INVALID) ? NULL : ++ &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; + + if (dma.control & FW_CFG_DMA_CTL_READ) { + read = 1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-enable-DMA-if-device-vmcoreinfo.patch b/SOURCES/kvm-fw_cfg-enable-DMA-if-device-vmcoreinfo.patch new file mode 100644 index 0000000..7553cc9 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-enable-DMA-if-device-vmcoreinfo.patch @@ -0,0 +1,75 @@ +From 9d150071a8170807a0e5f638e3eddbbc29219ddc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:45 +0100 +Subject: [PATCH 14/41] fw_cfg: enable DMA if -device vmcoreinfo +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-15-marcandre.lureau@redhat.com> +Patchwork-id: 78364 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 14/41] fw_cfg: enable DMA if -device vmcoreinfo +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +Upstream status: RHEL-only + +vmcoreinfo needs fw_cfg with DMA enabled. However, for compatibility +reasons, DMA can't be enabled by default. In order to avoid having a +RHEL-specific libvirt patch to enable DMA when vmcoreinfo device is +requested, it can be done in qemu directly. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 616c782..7caf43c 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -30,6 +30,7 @@ + #include "trace.h" + #include "qemu/error-report.h" + #include "qemu/config-file.h" ++#include "qemu/option.h" + + #define FW_CFG_CTL_SIZE 2 + #define FW_CFG_DATA_SIZE 1 +@@ -675,6 +676,17 @@ static void fw_cfg_machine_ready(struct Notifier *n, void *data) + fw_cfg_add_file(s, "bootorder", (uint8_t*)bootindex, len); + } + ++static int driver_is_vmcoreinfo(QemuOpts *opts, void *opaque) ++{ ++ return g_strcmp0(qemu_opt_get(opts, "driver"), "vmcoreinfo") == 0; ++} ++ ++static bool opts_has_vmcoreinfo(void) ++{ ++ return qemu_opts_foreach(qemu_find_opts("device"), ++ driver_is_vmcoreinfo, NULL, 1) != 0; ++} ++ + static FWCfgState * + fw_cfg_init_dma(uint32_t ctl_port, uint32_t data_port, + uint32_t dma_port, +@@ -692,6 +704,11 @@ fw_cfg_init_dma(uint32_t ctl_port, uint32_t data_port, + qdev_prop_set_uint32(dev, "data_iobase", data_port); + qdev_prop_set_uint32(dev, "dma_iobase", dma_port); + ++ if (opts_has_vmcoreinfo()) { ++ /* RHEL-only: enable DMA operations for vmcoreinfo device */ ++ qdev_prop_set_bit(dev, "dma_enabled", true); ++ } ++ + if (!dma_requested) { + qdev_prop_set_bit(dev, "dma_enabled", false); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-factor-out-initialization-of-FW_CFG_ID-rev.-n.patch b/SOURCES/kvm-fw_cfg-factor-out-initialization-of-FW_CFG_ID-rev.-n.patch new file mode 100644 index 0000000..9cd13ec --- /dev/null +++ b/SOURCES/kvm-fw_cfg-factor-out-initialization-of-FW_CFG_ID-rev.-n.patch @@ -0,0 +1,149 @@ +From 0dbf3617c8b4dda06460190d4017a5bc605f79d9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:35 +0100 +Subject: [PATCH 04/41] fw_cfg: factor out initialization of FW_CFG_ID (rev. + number) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-5-marcandre.lureau@redhat.com> +Patchwork-id: 78354 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 04/41] fw_cfg: factor out initialization of FW_CFG_ID (rev. number) +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: "Gabriel L. Somlo" + +The fw_cfg documentation says this of the revision key (0x0001, FW_CFG_ID): + +> A 32-bit little-endian unsigned int, this item is used as an interface +> revision number, and is currently set to 1 by all QEMU architectures +> which expose a fw_cfg device. + +arm/virt doesn't. It could be argued that that's an error in +"hw/arm/virt.c"; on the other hand, all of the other fw_cfg providing +boards set the interface version to 1 manually, despite the device +coming from the same, shared implementation. Therefore, instead of +adding + + fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + +to arm/virt, consolidate all such existing calls in the fw_cfg +initialization code. + +Signed-off-by: Gabriel Somlo +Message-Id: <1426789244-26318-1-git-send-email-somlo@cmu.edu> +Reviewed-by: Laszlo Ersek +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 3a5c76baf312d83cb77c8faa72c5f7a477effed0) + +RHEL: Remove a few extra calls that got removed in upstream + commit 6a4e17711442849bf2cc731ccddef5a2a2d92d29. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc.c | 1 - + hw/nvram/fw_cfg.c | 1 + + hw/ppc/mac_newworld.c | 1 - + hw/ppc/mac_oldworld.c | 1 - + hw/sparc/sun4m.c | 3 --- + hw/sparc64/sun4u.c | 1 - + 6 files changed, 1 insertion(+), 7 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 1468d50..29d6588 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -625,7 +625,6 @@ static FWCfgState *bochs_bios_init(void) + * the APIC ID, not the "CPU index" + */ + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)apic_id_limit); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_bytes(fw_cfg, FW_CFG_ACPI_TABLES, + acpi_tables, acpi_tables_len); +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index a33e861..01d4566 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -506,6 +506,7 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + sysbus_mmio_map(d, 1, data_addr); + } + fw_cfg_add_bytes(s, FW_CFG_SIGNATURE, (char *)"QEMU", 4); ++ fw_cfg_add_i32(s, FW_CFG_ID, 1); + fw_cfg_add_bytes(s, FW_CFG_UUID, qemu_uuid, 16); + fw_cfg_add_i16(s, FW_CFG_NOGRAPHIC, (uint16_t)(display_type == DT_NOGRAPHIC)); + fw_cfg_add_i16(s, FW_CFG_NB_CPUS, (uint16_t)smp_cpus); +diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c +index ce44e95..77446d7 100644 +--- a/hw/ppc/mac_newworld.c ++++ b/hw/ppc/mac_newworld.c +@@ -416,7 +416,6 @@ static void ppc_core99_init(QEMUMachineInitArgs *args) + + fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2); + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, machine_arch); + fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, kernel_base); +diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c +index 3acca94..d52a110 100644 +--- a/hw/ppc/mac_oldworld.c ++++ b/hw/ppc/mac_oldworld.c +@@ -300,7 +300,6 @@ static void ppc_heathrow_init(QEMUMachineInitArgs *args) + + fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2); + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, ARCH_HEATHROW); + fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, kernel_base); +diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c +index 7c5b8e7..3c126e0 100644 +--- a/hw/sparc/sun4m.c ++++ b/hw/sparc/sun4m.c +@@ -1029,7 +1029,6 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, + + fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2); + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id); + fw_cfg_add_i16(fw_cfg, FW_CFG_SUN4M_DEPTH, graphic_depth); +@@ -1674,7 +1673,6 @@ static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, ram_addr_t RAM_size, + + fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2); + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id); + fw_cfg_add_i16(fw_cfg, FW_CFG_SUN4M_DEPTH, graphic_depth); +@@ -1875,7 +1873,6 @@ static void sun4c_hw_init(const struct sun4c_hwdef *hwdef, ram_addr_t RAM_size, + + fw_cfg = fw_cfg_init(0, 0, CFG_ADDR, CFG_ADDR + 2); + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id); + fw_cfg_add_i16(fw_cfg, FW_CFG_SUN4M_DEPTH, graphic_depth); +diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c +index 5ce5ed6..63447fc 100644 +--- a/hw/sparc64/sun4u.c ++++ b/hw/sparc64/sun4u.c +@@ -885,7 +885,6 @@ static void sun4uv_init(MemoryRegion *address_space_mem, + + fw_cfg = fw_cfg_init(BIOS_CFG_IOPORT, BIOS_CFG_IOPORT + 1, 0, 0); + fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)max_cpus); +- fw_cfg_add_i32(fw_cfg, FW_CFG_ID, 1); + fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); + fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id); + fw_cfg_add_i64(fw_cfg, FW_CFG_KERNEL_ADDR, kernel_entry); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-interface-to-trigger-callback-on-read.patch b/SOURCES/kvm-fw_cfg-interface-to-trigger-callback-on-read.patch new file mode 100644 index 0000000..4d203f2 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-interface-to-trigger-callback-on-read.patch @@ -0,0 +1,146 @@ +From 8ef464d9f69895ad603c8104460ec667892be48c Mon Sep 17 00:00:00 2001 +Message-Id: <8ef464d9f69895ad603c8104460ec667892be48c.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:56 +0100 +Subject: [PATCH 26/56] fw_cfg: interface to trigger callback on read + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-27-git-send-email-mst@redhat.com> +Patchwork-id: 56332 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 26/57] fw_cfg: interface to trigger callback on read +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit d87072ceeccf4f84a64d4bc59124bcd64286c070) +--- + include/hw/nvram/fw_cfg.h | 4 ++++ + hw/nvram/fw_cfg.c | 33 ++++++++++++++++++++++++++++----- + 2 files changed, 32 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/nvram/fw_cfg.c | 33 ++++++++++++++++++++++++++++----- + include/hw/nvram/fw_cfg.h | 4 ++++ + 2 files changed, 32 insertions(+), 5 deletions(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 064344d..b865c09 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -41,6 +41,7 @@ typedef struct FWCfgEntry { + uint8_t *data; + void *callback_opaque; + FWCfgCallback callback; ++ FWCfgReadCallback read_callback; + } FWCfgEntry; + + struct FWCfgState { +@@ -245,8 +246,12 @@ static uint8_t fw_cfg_read(FWCfgState *s) + + if (s->cur_entry == FW_CFG_INVALID || !e->data || s->cur_offset >= e->len) + ret = 0; +- else ++ else { ++ if (e->read_callback) { ++ e->read_callback(e->callback_opaque, s->cur_offset); ++ } + ret = e->data[s->cur_offset++]; ++ } + + trace_fw_cfg_read(s, ret); + return ret; +@@ -377,7 +382,10 @@ static const VMStateDescription vmstate_fw_cfg = { + } + }; + +-void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len) ++static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key, ++ FWCfgReadCallback callback, ++ void *callback_opaque, ++ void *data, size_t len) + { + int arch = !!(key & FW_CFG_ARCH_LOCAL); + +@@ -387,6 +395,13 @@ void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len) + + s->entries[arch][key].data = data; + s->entries[arch][key].len = (uint32_t)len; ++ s->entries[arch][key].read_callback = callback; ++ s->entries[arch][key].callback_opaque = callback_opaque; ++} ++ ++void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len) ++{ ++ fw_cfg_add_bytes_read_callback(s, key, NULL, NULL, data, len); + } + + void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value) +@@ -440,8 +455,9 @@ void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, + s->entries[arch][key].callback = callback; + } + +-void fw_cfg_add_file(FWCfgState *s, const char *filename, +- void *data, size_t len) ++void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, ++ FWCfgReadCallback callback, void *callback_opaque, ++ void *data, size_t len) + { + int i, index; + size_t dsize; +@@ -455,7 +471,8 @@ void fw_cfg_add_file(FWCfgState *s, const char *filename, + index = be32_to_cpu(s->files->count); + assert(index < FW_CFG_FILE_SLOTS); + +- fw_cfg_add_bytes(s, FW_CFG_FILE_FIRST + index, data, len); ++ fw_cfg_add_bytes_read_callback(s, FW_CFG_FILE_FIRST + index, ++ callback, callback_opaque, data, len); + + pstrcpy(s->files->f[index].name, sizeof(s->files->f[index].name), + filename); +@@ -473,6 +490,12 @@ void fw_cfg_add_file(FWCfgState *s, const char *filename, + s->files->count = cpu_to_be32(index+1); + } + ++void fw_cfg_add_file(FWCfgState *s, const char *filename, ++ void *data, size_t len) ++{ ++ fw_cfg_add_file_callback(s, filename, NULL, NULL, data, len); ++} ++ + static void fw_cfg_machine_ready(struct Notifier *n, void *data) + { + size_t len; +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index f60dd67..2ab0fc2 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -60,6 +60,7 @@ typedef struct FWCfgFiles { + } FWCfgFiles; + + typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); ++typedef void (*FWCfgReadCallback)(void *opaque, uint32_t offset); + + void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len); + void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value); +@@ -70,6 +71,9 @@ void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, + void *callback_opaque, void *data, size_t len); + void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, + size_t len); ++void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, ++ FWCfgReadCallback callback, void *callback_opaque, ++ void *data, size_t len); + FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, + hwaddr crl_addr, hwaddr data_addr); + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-fw_cfg-move-typedef-to-qemu-typedefs.h.patch b/SOURCES/kvm-fw_cfg-move-typedef-to-qemu-typedefs.h.patch new file mode 100644 index 0000000..d450eba --- /dev/null +++ b/SOURCES/kvm-fw_cfg-move-typedef-to-qemu-typedefs.h.patch @@ -0,0 +1,81 @@ +From c2e580f1f3137d8517894ba6d5cd6d7f85682587 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:13 +0100 +Subject: [PATCH 10/56] fw_cfg: move typedef to qemu/typedefs.h + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-11-git-send-email-mst@redhat.com> +Patchwork-id: 56315 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 10/57] fw_cfg: move typedef to qemu/typedefs.h +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Less header dependencies this way. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 45936c8b79012da4c8986c20af4afcc9cd14bb8e) +--- + include/hw/i386/pc.h | 1 - + include/hw/nvram/fw_cfg.h | 2 +- + include/qemu/typedefs.h | 1 + + 3 files changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/hw/i386/pc.h | 1 - + include/hw/nvram/fw_cfg.h | 2 +- + include/qemu/typedefs.h | 1 + + 3 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 4175c1b..2cf7baa 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -9,7 +9,6 @@ + #include "net/net.h" + #include "exec/memory.h" + #include "hw/i386/ioapic.h" +-#include "hw/nvram/fw_cfg.h" + + /* PC-style peripherals (also used by other machines). */ + +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index 48a8aa4..f60dd67 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -6,6 +6,7 @@ + #include + + #include "exec/hwaddr.h" ++#include "qemu/typedefs.h" + #endif + + #define FW_CFG_SIGNATURE 0x00 +@@ -60,7 +61,6 @@ typedef struct FWCfgFiles { + + typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); + +-typedef struct FWCfgState FWCfgState; + void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len); + void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value); + void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value); +diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h +index 2e7d942..a332d88 100644 +--- a/include/qemu/typedefs.h ++++ b/include/qemu/typedefs.h +@@ -63,6 +63,7 @@ typedef struct EventNotifier EventNotifier; + typedef struct VirtIODevice VirtIODevice; + typedef struct QEMUSGList QEMUSGList; + typedef struct SHPCDevice SHPCDevice; ++typedef struct FWCfgState FWCfgState; + typedef struct Range Range; + + #endif /* QEMU_TYPEDEFS_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-fw_cfg-prevent-selector-key-conflict.patch b/SOURCES/kvm-fw_cfg-prevent-selector-key-conflict.patch new file mode 100644 index 0000000..5bc98f7 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-prevent-selector-key-conflict.patch @@ -0,0 +1,47 @@ +From f893c8d5665ce4c9978eb7428b57f5e84448836c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:33 +0100 +Subject: [PATCH 02/41] fw_cfg: prevent selector key conflict +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-3-marcandre.lureau@redhat.com> +Patchwork-id: 78352 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 02/41] fw_cfg: prevent selector key conflict +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: "Gabriel L. Somlo" + +Enforce a single assignment of data for each distinct selector key. + +Signed-off-by: Gabriel Somlo +Reviewed-by: Laszlo Ersek +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit 0f9b214139d11ef058fa0f1c11c89e94fa6ef95d) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 9d7b99e..149e2fb 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -380,6 +380,7 @@ static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key, + key &= FW_CFG_ENTRY_MASK; + + assert(key < FW_CFG_MAX_ENTRY && len < UINT32_MAX); ++ assert(s->entries[arch][key].data == NULL); /* avoid key conflict */ + + s->entries[arch][key].data = data; + s->entries[arch][key].len = (uint32_t)len; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-prohibit-insertion-of-duplicate-fw_cfg-file-n.patch b/SOURCES/kvm-fw_cfg-prohibit-insertion-of-duplicate-fw_cfg-file-n.patch new file mode 100644 index 0000000..ac5184c --- /dev/null +++ b/SOURCES/kvm-fw_cfg-prohibit-insertion-of-duplicate-fw_cfg-file-n.patch @@ -0,0 +1,80 @@ +From 08eb83666fe11d81813270541bcb76bad8bd5902 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:34 +0100 +Subject: [PATCH 03/41] fw_cfg: prohibit insertion of duplicate fw_cfg file + names +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-4-marcandre.lureau@redhat.com> +Patchwork-id: 78351 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 03/41] fw_cfg: prohibit insertion of duplicate fw_cfg file names +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: "Gabriel L. Somlo" + +Exit with an error (instead of simply logging a trace event) +whenever the same fw_cfg file name is added multiple times via +one of the fw_cfg_add_file[_callback]() host-side API calls. + +Signed-off-by: Gabriel Somlo +Reviewed-by: Laszlo Ersek +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit 0eb973f91521c6bcb6399d25327711d083f6eb10) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 11 ++++++----- + trace-events | 1 - + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 149e2fb..a33e861 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -443,18 +443,19 @@ void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + index = be32_to_cpu(s->files->count); + assert(index < FW_CFG_FILE_SLOTS); + +- fw_cfg_add_bytes_read_callback(s, FW_CFG_FILE_FIRST + index, +- callback, callback_opaque, data, len); +- + pstrcpy(s->files->f[index].name, sizeof(s->files->f[index].name), + filename); + for (i = 0; i < index; i++) { + if (strcmp(s->files->f[index].name, s->files->f[i].name) == 0) { +- trace_fw_cfg_add_file_dupe(s, s->files->f[index].name); +- return; ++ error_report("duplicate fw_cfg file name: %s", ++ s->files->f[index].name); ++ exit(1); + } + } + ++ fw_cfg_add_bytes_read_callback(s, FW_CFG_FILE_FIRST + index, ++ callback, callback_opaque, data, len); ++ + s->files->f[index].size = cpu_to_be32(len); + s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index); + trace_fw_cfg_add_file(s, index, s->files->f[index].name, len); +diff --git a/trace-events b/trace-events +index a987dfa..8c3ce0c 100644 +--- a/trace-events ++++ b/trace-events +@@ -178,7 +178,6 @@ ecc_diag_mem_readb(uint64_t addr, uint32_t ret) "Read diagnostic %"PRId64"= %02x + # hw/nvram/fw_cfg.c + fw_cfg_select(void *s, uint16_t key, int ret) "%p key %d = %d" + fw_cfg_read(void *s, uint8_t ret) "%p = %d" +-fw_cfg_add_file_dupe(void *s, char *name) "%p %s" + fw_cfg_add_file(void *s, int index, char *name, size_t len) "%p #%d: %s (%zd bytes)" + + # hw/block/hd-geometry.c +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-remove-support-for-guest-side-data-writes.patch b/SOURCES/kvm-fw_cfg-remove-support-for-guest-side-data-writes.patch new file mode 100644 index 0000000..bf1b7c7 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-remove-support-for-guest-side-data-writes.patch @@ -0,0 +1,130 @@ +From bc5ebe6df8479b32dbf46f75f32cfad7008a14f0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:32 +0100 +Subject: [PATCH 01/41] fw_cfg: remove support for guest-side data writes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-2-marcandre.lureau@redhat.com> +Patchwork-id: 78353 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 01/41] fw_cfg: remove support for guest-side data writes +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: "Gabriel L. Somlo" + +>From this point forward, any guest-side writes to the fw_cfg +data register will be treated as no-ops. This patch also removes +the unused host-side API function fw_cfg_add_callback(), which +allowed the registration of a callback to be executed each time +the guest completed a full overwrite of a given fw_cfg data item. + +Signed-off-by: Gabriel Somlo +Reviewed-by: Laszlo Ersek +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit 023e3148567ac898c7258138f8e86c3c2bb40d07) + +RHEL: Fix conflicts, due to fw_cfg_modify_bytes_read() introduction in + upstream commit bdbb5b1706d165e8d4222121f1e9b59b6b4359ce. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 35 +---------------------------------- + include/hw/nvram/fw_cfg.h | 2 -- + trace-events | 1 - + 3 files changed, 1 insertion(+), 37 deletions(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index fcb3146..9d7b99e 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -40,7 +40,6 @@ typedef struct FWCfgEntry { + uint32_t len; + uint8_t *data; + void *callback_opaque; +- FWCfgCallback callback; + FWCfgReadCallback read_callback; + } FWCfgEntry; + +@@ -206,22 +205,7 @@ static void fw_cfg_reboot(FWCfgState *s) + + static void fw_cfg_write(FWCfgState *s, uint8_t value) + { +- int arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL); +- FWCfgEntry *e = (s->cur_entry == FW_CFG_INVALID) ? NULL : +- &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; +- +- trace_fw_cfg_write(s, value); +- +- if (s->cur_entry & FW_CFG_WRITE_CHANNEL +- && e != NULL +- && e->callback +- && s->cur_offset < e->len) { +- e->data[s->cur_offset++] = value; +- if (s->cur_offset == e->len) { +- e->callback(e->callback_opaque, e->data); +- s->cur_offset = 0; +- } +- } ++ /* nothing, write support removed in QEMU v2.4+ */ + } + + static int fw_cfg_select(FWCfgState *s, uint16_t key) +@@ -442,23 +426,6 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value) + fw_cfg_add_bytes(s, key, copy, sizeof(value)); + } + +-void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, +- void *callback_opaque, void *data, size_t len) +-{ +- int arch = !!(key & FW_CFG_ARCH_LOCAL); +- +- assert(key & FW_CFG_WRITE_CHANNEL); +- +- key &= FW_CFG_ENTRY_MASK; +- +- assert(key < FW_CFG_MAX_ENTRY && len <= UINT32_MAX); +- +- s->entries[arch][key].data = data; +- s->entries[arch][key].len = (uint32_t)len; +- s->entries[arch][key].callback_opaque = callback_opaque; +- s->entries[arch][key].callback = callback; +-} +- + void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, + FWCfgReadCallback callback, void *callback_opaque, + void *data, size_t len) +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index 72b1549..aa5f351 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -69,8 +69,6 @@ void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value); + void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value); + void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); + void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); +-void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, +- void *callback_opaque, void *data, size_t len); + void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, + size_t len); + void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, +diff --git a/trace-events b/trace-events +index fa2618d..a987dfa 100644 +--- a/trace-events ++++ b/trace-events +@@ -176,7 +176,6 @@ ecc_diag_mem_writeb(uint64_t addr, uint32_t val) "Write diagnostic %"PRId64" = % + ecc_diag_mem_readb(uint64_t addr, uint32_t ret) "Read diagnostic %"PRId64"= %02x" + + # hw/nvram/fw_cfg.c +-fw_cfg_write(void *s, uint8_t value) "%p %d" + fw_cfg_select(void *s, uint16_t key, int ret) "%p key %d = %d" + fw_cfg_read(void *s, uint8_t ret) "%p = %d" + fw_cfg_add_file_dupe(void *s, char *name) "%p %s" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-fw_cfg-unbreak-migration-compatibility.patch b/SOURCES/kvm-fw_cfg-unbreak-migration-compatibility.patch new file mode 100644 index 0000000..8c0a6f6 --- /dev/null +++ b/SOURCES/kvm-fw_cfg-unbreak-migration-compatibility.patch @@ -0,0 +1,74 @@ +From 1d05047c15ca1d8e29dcb0892e449987739682b4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:40 +0100 +Subject: [PATCH 09/41] fw_cfg: unbreak migration compatibility +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-10-marcandre.lureau@redhat.com> +Patchwork-id: 78359 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 09/41] fw_cfg: unbreak migration compatibility +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Laszlo Ersek + +Upstream-status: RHEL only + +fw_cfg DMA shouldn't be enabled by default on x86, or it will break +migration from new (DMA) to old (non-DMA) qemu. + +Thus we must maintain DMA disabled by default. Since we don't +introduce a new machine, only if requested explicitely with -global +fw_cfg.dma_enabled=on, or -device vmcoreinfo (see upcoming RHEL-only +patch) should DMA be enabled. + +(this is somewhat similar to upstream commit +e6915b5f3a874a467a9a65f7ec1d6ef8d251a51a, except that we can't enable +DMA by default on RHEL qemu) + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/nvram/fw_cfg.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 1789487..a7bc98e 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -677,13 +677,16 @@ fw_cfg_init_dma(uint32_t ctl_port, uint32_t data_port, + SysBusDevice *d; + FWCfgState *s; + uint32_t version = FW_CFG_VERSION; +- bool dma_enabled = dma_port && dma_as; ++ bool dma_requested = dma_port && dma_as; + + dev = qdev_create(NULL, "fw_cfg"); + qdev_prop_set_uint32(dev, "ctl_iobase", ctl_port); + qdev_prop_set_uint32(dev, "data_iobase", data_port); + qdev_prop_set_uint32(dev, "dma_iobase", dma_port); +- qdev_prop_set_bit(dev, "dma_enabled", dma_enabled); ++ ++ if (!dma_requested) { ++ qdev_prop_set_bit(dev, "dma_enabled", false); ++ } + + d = SYS_BUS_DEVICE(dev); + +@@ -702,7 +705,7 @@ fw_cfg_init_dma(uint32_t ctl_port, uint32_t data_port, + if (data_addr) { + sysbus_mmio_map(d, 1, data_addr); + } +- if (dma_enabled) { ++ if (s->dma_enabled) { + /* 64 bits for the address field */ + s->dma = &dma_context_memory; + s->dma_addr = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-gdbstub-do-not-restart-crashed-guest.patch b/SOURCES/kvm-gdbstub-do-not-restart-crashed-guest.patch new file mode 100644 index 0000000..1c5309d --- /dev/null +++ b/SOURCES/kvm-gdbstub-do-not-restart-crashed-guest.patch @@ -0,0 +1,53 @@ +From c1da75fb13fdb39be174be97ce3428356f10d320 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:34 +0100 +Subject: [PATCH 75/81] gdbstub: do not restart crashed guest + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-7-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55551 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 6/9] gdbstub: do not restart crashed guest +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: Paolo Bonzini + +If a guest has crashed with an internal error or similar, detaching +gdb (or any other debugger action) should not restart it. + +Cc: Jan Kiszka +Signed-off-by: Paolo Bonzini +Reviewed-by: Laszlo Ersek +Message-id: 1369912840-18577-1-git-send-email-pbonzini@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 87f25c12bfeaaa0c41fb857713bbc7e8a9b757dc) +Signed-off-by: Marcel Apfelbaum +--- + gdbstub.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + gdbstub.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/gdbstub.c b/gdbstub.c +index e80e1d3..90e54cb 100644 +--- a/gdbstub.c ++++ b/gdbstub.c +@@ -371,7 +371,9 @@ static inline void gdb_continue(GDBState *s) + #ifdef CONFIG_USER_ONLY + s->running_state = 1; + #else +- vm_start(); ++ if (runstate_check(RUN_STATE_DEBUG)) { ++ vm_start(); ++ } + #endif + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-gdbstub-fix-for-commit-87f25c12bfeaaa0c41fb857713bbc.patch b/SOURCES/kvm-gdbstub-fix-for-commit-87f25c12bfeaaa0c41fb857713bbc.patch new file mode 100644 index 0000000..3d87f19 --- /dev/null +++ b/SOURCES/kvm-gdbstub-fix-for-commit-87f25c12bfeaaa0c41fb857713bbc.patch @@ -0,0 +1,54 @@ +From 8ca5737b301aa2fe62dcb749c9c559195b534dd3 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:35 +0100 +Subject: [PATCH 76/81] gdbstub: fix for commit 87f25c12bfeaaa0c41fb857713bbc7e8a9b757dc + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-8-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55552 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 7/9] gdbstub: fix for commit 87f25c12bfeaaa0c41fb857713bbc7e8a9b757dc +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: Paolo Bonzini + +This commit used the wrong check to prevent an assertion failure. +After this commit, you need to start a guest in the monitor, you +cannot use anymore the "c" command in the debugger. This is +undesirable. The commit's aim was to prevent a restart +after a KVM internal error or something like that; use +runstate_needs_reset() for that. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Luiz Capitulino +Message-id: 1370272015-9659-2-git-send-email-pbonzini@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 26ac7a31fbf5522d2ca3f0e2e5b5c8e915701f66) +Signed-off-by: Marcel Apfelbaum +--- + gdbstub.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + gdbstub.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/gdbstub.c b/gdbstub.c +index 90e54cb..e8541f3 100644 +--- a/gdbstub.c ++++ b/gdbstub.c +@@ -371,7 +371,7 @@ static inline void gdb_continue(GDBState *s) + #ifdef CONFIG_USER_ONLY + s->running_state = 1; + #else +- if (runstate_check(RUN_STATE_DEBUG)) { ++ if (!runstate_needs_reset()) { + vm_start(); + } + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-gluster-Abort-on-AIO-completion-failure.patch b/SOURCES/kvm-gluster-Abort-on-AIO-completion-failure.patch new file mode 100644 index 0000000..2b202a8 --- /dev/null +++ b/SOURCES/kvm-gluster-Abort-on-AIO-completion-failure.patch @@ -0,0 +1,73 @@ +From ecfbec2139f06a75a03c510e24f265a869684edb Mon Sep 17 00:00:00 2001 +From: Asias He +Date: Thu, 12 Sep 2013 07:39:35 +0200 +Subject: [PATCH 15/29] gluster: Abort on AIO completion failure + +RH-Author: Asias He +Message-id: <1378971575-22416-5-git-send-email-asias@redhat.com> +Patchwork-id: 54324 +O-Subject: [RHEL7.0 qemu-kvm PATCH 4/4] gluster: Abort on AIO completion failure +Bugzilla: 1007226 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +From: Bharata B Rao + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1004733 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6275752 + +Currently if gluster AIO callback thread fails to notify the QEMU thread about +AIO completion, we try graceful recovery by marking the disk drive as +inaccessible. This error recovery code is race-prone as found by Asias and +Stefan. However as found out by Paolo, this kind of error is impossible and +hence simplify the code that handles this error recovery. + +Signed-off-by: Bharata B Rao +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 9faa574f7d07109e2256c0b4b63e8711d650f2d8) + +Conflicts: + block/gluster.c +--- + block/gluster.c | 17 ++--------------- + 1 file changed, 2 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 17 ++--------------- + 1 files changed, 2 insertions(+), 15 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 7b10e9c..90a51ca 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -436,22 +436,9 @@ static void gluster_finish_aiocb(struct glfs_fd *fd, ssize_t ret, void *arg) + /* + * Gluster AIO callback thread failed to notify the waiting + * QEMU thread about IO completion. +- * +- * Complete this IO request and make the disk inaccessible for +- * subsequent reads and writes. + */ +- error_report("Gluster failed to notify QEMU about IO completion"); +- +- qemu_mutex_lock_iothread(); /* We are in gluster thread context */ +- acb->common.cb(acb->common.opaque, -EIO); +- qemu_aio_release(acb); +- s->qemu_aio_count--; +- close(s->fds[GLUSTER_FD_READ]); +- close(s->fds[GLUSTER_FD_WRITE]); +- qemu_aio_set_fd_handler(s->fds[GLUSTER_FD_READ], NULL, NULL, NULL, +- NULL); +- bs->drv = NULL; /* Make the disk inaccessible */ +- qemu_mutex_unlock_iothread(); ++ error_report("Gluster AIO completion failed: %s", strerror(errno)); ++ abort(); + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-gluster-Add-discard-support-for-GlusterFS-block-driv.patch b/SOURCES/kvm-gluster-Add-discard-support-for-GlusterFS-block-driv.patch new file mode 100644 index 0000000..460f00b --- /dev/null +++ b/SOURCES/kvm-gluster-Add-discard-support-for-GlusterFS-block-driv.patch @@ -0,0 +1,149 @@ +From d4ddb41fc6868d41f38d9a4bec0f4ad7d332add9 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 2 Sep 2014 19:34:06 +0200 +Subject: [PATCH 3/6] gluster: Add discard support for GlusterFS block driver. + +Message-id: <6b5e10e9b95a3030bb19540324915e0b774bd5bb.1409686386.git.jcody@redhat.com> +Patchwork-id: 60815 +O-Subject: [PATCH qemu-kvm-rhev RHEL7.1] gluster: Add discard support for GlusterFS block driver. +Bugzilla: 1136534 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Bharata B Rao + +Implement bdrv_aio_discard for gluster. + +Signed-off-by: Bharata B Rao +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0c14fb47ece5ef42d7a0a4b3e8e43e022b375720) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + configure | 8 ++++++++ + 2 files changed, 53 insertions(+), 0 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index f43d3a6..da43d0c 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -633,6 +633,39 @@ out: + return NULL; + } + ++#ifdef CONFIG_GLUSTERFS_DISCARD ++static BlockDriverAIOCB *qemu_gluster_aio_discard(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, BlockDriverCompletionFunc *cb, ++ void *opaque) ++{ ++ int ret; ++ GlusterAIOCB *acb; ++ BDRVGlusterState *s = bs->opaque; ++ size_t size; ++ off_t offset; ++ ++ offset = sector_num * BDRV_SECTOR_SIZE; ++ size = nb_sectors * BDRV_SECTOR_SIZE; ++ ++ acb = qemu_aio_get(&gluster_aiocb_info, bs, cb, opaque); ++ acb->size = 0; ++ acb->ret = 0; ++ acb->finished = NULL; ++ s->qemu_aio_count++; ++ ++ ret = glfs_discard_async(s->fd, offset, size, &gluster_finish_aiocb, acb); ++ if (ret < 0) { ++ goto out; ++ } ++ return &acb->common; ++ ++out: ++ s->qemu_aio_count--; ++ qemu_aio_release(acb); ++ return NULL; ++} ++#endif ++ + static int64_t qemu_gluster_getlength(BlockDriverState *bs) + { + BDRVGlusterState *s = bs->opaque; +@@ -707,6 +740,9 @@ static BlockDriver bdrv_gluster = { + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, + .bdrv_has_zero_init = qemu_gluster_has_zero_init, ++#ifdef CONFIG_GLUSTERFS_DISCARD ++ .bdrv_aio_discard = qemu_gluster_aio_discard, ++#endif + .create_options = qemu_gluster_create_options, + }; + +@@ -727,6 +763,9 @@ static BlockDriver bdrv_gluster_tcp = { + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, + .bdrv_has_zero_init = qemu_gluster_has_zero_init, ++#ifdef CONFIG_GLUSTERFS_DISCARD ++ .bdrv_aio_discard = qemu_gluster_aio_discard, ++#endif + .create_options = qemu_gluster_create_options, + }; + +@@ -747,6 +786,9 @@ static BlockDriver bdrv_gluster_unix = { + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, + .bdrv_has_zero_init = qemu_gluster_has_zero_init, ++#ifdef CONFIG_GLUSTERFS_DISCARD ++ .bdrv_aio_discard = qemu_gluster_aio_discard, ++#endif + .create_options = qemu_gluster_create_options, + }; + +@@ -767,6 +809,9 @@ static BlockDriver bdrv_gluster_rdma = { + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, + .bdrv_has_zero_init = qemu_gluster_has_zero_init, ++#ifdef CONFIG_GLUSTERFS_DISCARD ++ .bdrv_aio_discard = qemu_gluster_aio_discard, ++#endif + .create_options = qemu_gluster_create_options, + }; + +diff --git a/configure b/configure +index 0c666e5..fb0c839 100755 +--- a/configure ++++ b/configure +@@ -238,6 +238,7 @@ libiscsi="" + coroutine="" + seccomp="" + glusterfs="" ++glusterfs_discard="no" + virtio_blk_data_plane="" + gtk="" + gtkabi="2.0" +@@ -2644,6 +2645,9 @@ EOF + glusterfs_libs="-lgfapi -lgfrpc -lgfxdr" + if compile_prog "" "$glusterfs_libs" ; then + glusterfs=yes ++ if $pkg_config --atleast-version=5 glusterfs-api >/dev/null 2>&1; then ++ glusterfs_discard="yes" ++ fi + else + if test "$glusterfs" = "yes" ; then + feature_not_found "GlusterFS backend support" +@@ -4025,6 +4029,10 @@ if test "$glusterfs" = "yes" ; then + echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak + fi + ++if test "$glusterfs_discard" = "yes" ; then ++ echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak ++fi ++ + if test "$libssh2" = "yes" ; then + echo "CONFIG_LIBSSH2=y" >> $config_host_mak + echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak +-- +1.7.1 + diff --git a/SOURCES/kvm-gluster-Add-image-resize-support.patch b/SOURCES/kvm-gluster-Add-image-resize-support.patch new file mode 100644 index 0000000..0055723 --- /dev/null +++ b/SOURCES/kvm-gluster-Add-image-resize-support.patch @@ -0,0 +1,96 @@ +From 4f7481a9815ec6b879db9cb20be7dcc419274e11 Mon Sep 17 00:00:00 2001 +From: Asias He +Date: Thu, 12 Sep 2013 07:39:32 +0200 +Subject: [PATCH 12/29] gluster: Add image resize support + +RH-Author: Asias He +Message-id: <1378971575-22416-2-git-send-email-asias@redhat.com> +Patchwork-id: 54323 +O-Subject: [RHEL7.0 qemu-kvm PATCH 1/4] gluster: Add image resize support +Bugzilla: 1007226 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +From: Paolo Bonzini + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1005052 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6275752 + +Implement .bdrv_truncate in GlusterFS block driver so that GlusterFS backend +can support image resizing. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Bharata B Rao +Tested-by: Bharata B Rao +Acked-by: Stefan Hajnoczi +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 42ec24e2851674e0899f71933e0d7d9125f31d76) +--- + block/gluster.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 17 +++++++++++++++++ + 1 files changed, 17 insertions(+), 0 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 61424bc..7b10e9c 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -493,6 +493,19 @@ out: + return NULL; + } + ++static int qemu_gluster_truncate(BlockDriverState *bs, int64_t offset) ++{ ++ int ret; ++ BDRVGlusterState *s = bs->opaque; ++ ++ ret = glfs_ftruncate(s->fd, offset); ++ if (ret < 0) { ++ return -errno; ++ } ++ ++ return 0; ++} ++ + static BlockDriverAIOCB *qemu_gluster_aio_readv(BlockDriverState *bs, + int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, + BlockDriverCompletionFunc *cb, void *opaque) +@@ -598,6 +611,7 @@ static BlockDriver bdrv_gluster = { + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, + .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, ++ .bdrv_truncate = qemu_gluster_truncate, + .bdrv_aio_readv = qemu_gluster_aio_readv, + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, +@@ -614,6 +628,7 @@ static BlockDriver bdrv_gluster_tcp = { + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, + .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, ++ .bdrv_truncate = qemu_gluster_truncate, + .bdrv_aio_readv = qemu_gluster_aio_readv, + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, +@@ -630,6 +645,7 @@ static BlockDriver bdrv_gluster_unix = { + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, + .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, ++ .bdrv_truncate = qemu_gluster_truncate, + .bdrv_aio_readv = qemu_gluster_aio_readv, + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, +@@ -646,6 +662,7 @@ static BlockDriver bdrv_gluster_rdma = { + .bdrv_create = qemu_gluster_create, + .bdrv_getlength = qemu_gluster_getlength, + .bdrv_get_allocated_file_size = qemu_gluster_allocated_file_size, ++ .bdrv_truncate = qemu_gluster_truncate, + .bdrv_aio_readv = qemu_gluster_aio_readv, + .bdrv_aio_writev = qemu_gluster_aio_writev, + .bdrv_aio_flush = qemu_gluster_aio_flush, +-- +1.7.1 + diff --git a/SOURCES/kvm-gluster-Correctly-propagate-errors-when-volume-isn-t.patch b/SOURCES/kvm-gluster-Correctly-propagate-errors-when-volume-isn-t.patch new file mode 100644 index 0000000..92eeffb --- /dev/null +++ b/SOURCES/kvm-gluster-Correctly-propagate-errors-when-volume-isn-t.patch @@ -0,0 +1,75 @@ +From 22e47c104ff73885357a0be7b94270f3955427ea Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 17 Jan 2017 19:51:31 +0100 +Subject: [PATCH 2/3] gluster: Correctly propagate errors when volume isn't + accessible + +RH-Author: Jeffrey Cody +Message-id: <963a714d4eae919df79e2031e02c77af5a8697e2.1484682588.git.jcody@redhat.com> +Patchwork-id: 73256 +O-Subject: [RHEL-7.4 qemu-kvm 2/3] gluster: Correctly propagate errors when volume isn't accessible +Bugzilla: 1151859 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Thomas Huth + +From: Peter Krempa + +The docs for glfs_init suggest that the function sets errno on every +failure. In fact it doesn't. As other functions such as +qemu_gluster_open() in the gluster block code report their errors based +on this fact we need to make sure that errno is set on each failure. + +This fixes a crash of qemu-img/qemu when a gluster brick isn't +accessible from given host while the server serving the volume +description is. + +Thread 1 (Thread 0x7ffff7fba740 (LWP 203880)): + #0 0x00007ffff77673f8 in glfs_lseek () from /usr/lib64/libgfapi.so.0 + #1 0x0000555555574a68 in qemu_gluster_getlength () + #2 0x0000555555565742 in refresh_total_sectors () + #3 0x000055555556914f in bdrv_open_common () + #4 0x000055555556e8e8 in bdrv_open () + #5 0x000055555556f02f in bdrv_open_image () + #6 0x000055555556e5f6 in bdrv_open () + #7 0x00005555555c5775 in bdrv_new_open () + #8 0x00005555555c5b91 in img_info () + #9 0x00007ffff62c9c05 in __libc_start_main () from /lib64/libc.so.6 + #10 0x00005555555648ad in _start () + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4557117d9eed8cadc360aec23b42fc39a7011864) +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 248a031..5266dce 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -224,6 +224,11 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename, + "volume=%s image=%s transport=%s", gconf->server, + gconf->port, gconf->volname, gconf->image, + gconf->transport); ++ ++ /* glfs_init sometimes doesn't set errno although docs suggest that */ ++ if (errno == 0) ++ errno = EINVAL; ++ + goto out; + } + return glfs; +@@ -484,7 +489,7 @@ static int qemu_gluster_create(const char *filename, + + glfs = qemu_gluster_init(gconf, filename, errp); + if (!glfs) { +- ret = -EINVAL; ++ ret = -errno; + goto out; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-gluster-correctly-propagate-errors.patch b/SOURCES/kvm-gluster-correctly-propagate-errors.patch new file mode 100644 index 0000000..0ab585f --- /dev/null +++ b/SOURCES/kvm-gluster-correctly-propagate-errors.patch @@ -0,0 +1,111 @@ +From 582eb6c9eef89809283e8d79b3f39e1ae9eeb64a Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 17 Jan 2017 19:51:30 +0100 +Subject: [PATCH 1/3] gluster: correctly propagate errors + +RH-Author: Jeffrey Cody +Message-id: <9299039bbb1797e4e61cdc8b4be062efeb152abb.1484682588.git.jcody@redhat.com> +Patchwork-id: 73254 +O-Subject: [RHEL-7.4 qemu-kvm 1/3] gluster: correctly propagate errors +Bugzilla: 1151859 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Thomas Huth + +From: Paolo Bonzini + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit a7451cb850d115f257080aff3fbc54f255ebf8f7) +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 29 +++++++++++++++-------------- + 1 file changed, 15 insertions(+), 14 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index 1793386..248a031 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -182,7 +182,8 @@ out: + return ret; + } + +-static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename) ++static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename, ++ Error **errp) + { + struct glfs *glfs = NULL; + int ret; +@@ -190,8 +191,8 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename) + + ret = qemu_gluster_parseuri(gconf, filename); + if (ret < 0) { +- error_report("Usage: file=gluster[+transport]://[server[:port]]/" +- "volname/image[?socket=...]"); ++ error_setg(errp, "Usage: file=gluster[+transport]://[server[:port]]/" ++ "volname/image[?socket=...]"); + errno = -ret; + goto out; + } +@@ -218,9 +219,11 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename) + + ret = glfs_init(glfs); + if (ret) { +- error_report("Gluster connection failed for server=%s port=%d " +- "volume=%s image=%s transport=%s", gconf->server, gconf->port, +- gconf->volname, gconf->image, gconf->transport); ++ error_setg_errno(errp, errno, ++ "Gluster connection failed for server=%s port=%d " ++ "volume=%s image=%s transport=%s", gconf->server, ++ gconf->port, gconf->volname, gconf->image, ++ gconf->transport); + goto out; + } + return glfs; +@@ -328,17 +331,15 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options, + + opts = qemu_opts_create_nofail(&runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); +- if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto out; + } + + filename = qemu_opt_get(opts, "filename"); + +- +- s->glfs = qemu_gluster_init(gconf, filename); ++ s->glfs = qemu_gluster_init(gconf, filename, errp); + if (!s->glfs) { + ret = -errno; + goto out; +@@ -406,7 +407,7 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state, + + gconf = g_malloc0(sizeof(GlusterConf)); + +- reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename); ++ reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, errp); + if (reop_s->glfs == NULL) { + ret = -errno; + goto exit; +@@ -481,9 +482,9 @@ static int qemu_gluster_create(const char *filename, + int64_t total_size = 0; + GlusterConf *gconf = g_malloc0(sizeof(GlusterConf)); + +- glfs = qemu_gluster_init(gconf, filename); ++ glfs = qemu_gluster_init(gconf, filename, errp); + if (!glfs) { +- ret = -errno; ++ ret = -EINVAL; + goto out; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-gluster-default-scheme-to-gluster-and-host-to-localh.patch b/SOURCES/kvm-gluster-default-scheme-to-gluster-and-host-to-localh.patch new file mode 100644 index 0000000..828acd7 --- /dev/null +++ b/SOURCES/kvm-gluster-default-scheme-to-gluster-and-host-to-localh.patch @@ -0,0 +1,58 @@ +From a5dba057d87136b90802c822f296164b52266273 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 2 Sep 2014 19:26:26 +0200 +Subject: [PATCH 4/6] gluster: default scheme to gluster:// and host to localhost. + +Message-id: +Patchwork-id: 60813 +O-Subject: [PATCH qemu-kvm-rhev RHEL7.1] gluster: default scheme to gluster:// and host to localhost. +Bugzilla: 1088150 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Paolo Bonzini + +Currently, "gluster:///volname/img" and (using file. options) +"file.driver=gluster,file.filename=foo" will segfault. Also, +"//host/volname/img" will be rejected, but it is a valid URL +that should be accepted just fine with "file.driver=gluster". +Accept all of these, by inferring missing transport and host +as TCP and localhost respectively. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 24897a767bd778fc6a050537d024565f9272cd06) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/gluster.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/gluster.c b/block/gluster.c +index da43d0c..5f85799 100644 +--- a/block/gluster.c ++++ b/block/gluster.c +@@ -134,7 +134,7 @@ static int qemu_gluster_parseuri(GlusterConf *gconf, const char *filename) + } + + /* transport */ +- if (!strcmp(uri->scheme, "gluster")) { ++ if (!uri->scheme || !strcmp(uri->scheme, "gluster")) { + gconf->transport = g_strdup("tcp"); + } else if (!strcmp(uri->scheme, "gluster+tcp")) { + gconf->transport = g_strdup("tcp"); +@@ -170,7 +170,7 @@ static int qemu_gluster_parseuri(GlusterConf *gconf, const char *filename) + } + gconf->server = g_strdup(qp->p[0].value); + } else { +- gconf->server = g_strdup(uri->server); ++ gconf->server = g_strdup(uri->server ? uri->server : "localhost"); + gconf->port = uri->port; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-hda-codec-disable-streams-on-reset.patch b/SOURCES/kvm-hda-codec-disable-streams-on-reset.patch new file mode 100644 index 0000000..d0c0a24 --- /dev/null +++ b/SOURCES/kvm-hda-codec-disable-streams-on-reset.patch @@ -0,0 +1,77 @@ +From 22f1816abcb97b9df9f0c7b896202a4c3c5d89ec Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 3 Feb 2014 14:18:24 -0500 +Subject: [PATCH 4/6] hda-codec: disable streams on reset + +Message-id: <1391437104-22283-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 57073 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] hda-codec: disable streams on reset +Bugzilla: 947812 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 39e6a38cdd4b235b2918b4977f31fde2c0da3bc4) +--- + hw/audio/hda-codec.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/audio/hda-codec.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c +index 07a43bf..986f2a9 100644 +--- a/hw/audio/hda-codec.c ++++ b/hw/audio/hda-codec.c +@@ -559,6 +559,21 @@ static int hda_audio_post_load(void *opaque, int version) + return 0; + } + ++static void hda_audio_reset(DeviceState *dev) ++{ ++ HDAAudioState *a = DO_UPCAST(HDAAudioState, hda.qdev, dev); ++ HDAAudioStream *st; ++ int i; ++ ++ dprint(a, 1, "%s\n", __func__); ++ for (i = 0; i < ARRAY_SIZE(a->st); i++) { ++ st = a->st + i; ++ if (st->node != NULL) { ++ hda_audio_set_running(st, false); ++ } ++ } ++} ++ + static const VMStateDescription vmstate_hda_audio_stream = { + .name = "hda-audio-stream", + .version_id = 1, +@@ -640,6 +655,7 @@ static void hda_audio_output_class_init(ObjectClass *klass, void *data) + k->stream = hda_audio_stream; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "HDA Audio Codec, output-only (line-out)"; ++ dc->reset = hda_audio_reset; + dc->vmsd = &vmstate_hda_audio; + dc->props = hda_audio_properties; + } +@@ -662,6 +678,7 @@ static void hda_audio_duplex_class_init(ObjectClass *klass, void *data) + k->stream = hda_audio_stream; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "HDA Audio Codec, duplex (line-out, line-in)"; ++ dc->reset = hda_audio_reset; + dc->vmsd = &vmstate_hda_audio; + dc->props = hda_audio_properties; + } +@@ -684,6 +701,7 @@ static void hda_audio_micro_class_init(ObjectClass *klass, void *data) + k->stream = hda_audio_stream; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->desc = "HDA Audio Codec, duplex (speaker, microphone)"; ++ dc->reset = hda_audio_reset; + dc->vmsd = &vmstate_hda_audio; + dc->props = hda_audio_properties; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hda-codec-make-mixemu-selectable-at-runtime.patch b/SOURCES/kvm-hda-codec-make-mixemu-selectable-at-runtime.patch new file mode 100644 index 0000000..b5f7ada --- /dev/null +++ b/SOURCES/kvm-hda-codec-make-mixemu-selectable-at-runtime.patch @@ -0,0 +1,438 @@ +From 76e63c2bd20deda91bf99de161deb85b5229bf7e Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Tue, 15 Oct 2013 17:10:59 +0200 +Subject: [PATCH 22/25] hda-codec: make mixemu selectable at runtime + +RH-Author: Bandan Das +Message-id: <1381857067-9399-3-git-send-email-bsd@redhat.com> +Patchwork-id: 54950 +O-Subject: [PATCH RHEL-7 qemu-kvm v3 2/5] hda-codec: make mixemu selectable at runtime +Bugzilla: 954195 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster + +Define PARAM so that we have two versions of the "desc_codec +and family" structs. Add a property called "mixer" whose default +value depends on whether CONFIG_MIXEMU is defined or not which +will help us call the appropriate instance init functions. + +Signed-off-by: Bandan Das +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 2690e61e8e313461428334586ed9dbf56531dae9) +--- + hw/audio/hda-codec-common.h | 117 +++++++++++++++++++++++--------------------- + hw/audio/hda-codec.c | 64 ++++++++++++++++++++++-- + 2 files changed, 122 insertions(+), 59 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/audio/hda-codec-common.h | 117 +++++++++++++++++++++++-------------------- + hw/audio/hda-codec.c | 64 ++++++++++++++++++++++-- + 2 files changed, 122 insertions(+), 59 deletions(-) + +diff --git a/hw/audio/hda-codec-common.h b/hw/audio/hda-codec-common.h +index 2f7e95f..b4fdb51 100644 +--- a/hw/audio/hda-codec-common.h ++++ b/hw/audio/hda-codec-common.h +@@ -24,7 +24,7 @@ + * HDA codec descriptions + */ + +-#ifdef CONFIG_MIXEMU ++#ifdef HDA_MIXER + #define QEMU_HDA_ID_OUTPUT ((QEMU_HDA_ID_VENDOR << 16) | 0x12) + #define QEMU_HDA_ID_DUPLEX ((QEMU_HDA_ID_VENDOR << 16) | 0x22) + #define QEMU_HDA_ID_MICRO ((QEMU_HDA_ID_VENDOR << 16) | 0x32) +@@ -42,7 +42,7 @@ + + + /* common: audio output widget */ +-static const desc_param common_params_audio_dac[] = { ++static const desc_param glue(common_params_audio_dac_, PARAM)[] = { + { + .id = AC_PAR_AUDIO_WIDGET_CAP, + .val = ((AC_WID_AUD_OUT << AC_WCAP_TYPE_SHIFT) | +@@ -66,7 +66,7 @@ static const desc_param common_params_audio_dac[] = { + }; + + /* common: audio input widget */ +-static const desc_param common_params_audio_adc[] = { ++static const desc_param glue(common_params_audio_adc_, PARAM)[] = { + { + .id = AC_PAR_AUDIO_WIDGET_CAP, + .val = ((AC_WID_AUD_IN << AC_WCAP_TYPE_SHIFT) | +@@ -94,7 +94,7 @@ static const desc_param common_params_audio_adc[] = { + }; + + /* common: pin widget (line-out) */ +-static const desc_param common_params_audio_lineout[] = { ++static const desc_param glue(common_params_audio_lineout_, PARAM)[] = { + { + .id = AC_PAR_AUDIO_WIDGET_CAP, + .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | +@@ -116,7 +116,7 @@ static const desc_param common_params_audio_lineout[] = { + }; + + /* common: pin widget (line-in) */ +-static const desc_param common_params_audio_linein[] = { ++static const desc_param glue(common_params_audio_linein_, PARAM)[] = { + { + .id = AC_PAR_AUDIO_WIDGET_CAP, + .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | +@@ -134,7 +134,7 @@ static const desc_param common_params_audio_linein[] = { + }; + + /* output: root node */ +-static const desc_param output_params_root[] = { ++static const desc_param glue(output_params_root_, PARAM)[] = { + { + .id = AC_PAR_VENDOR_ID, + .val = QEMU_HDA_ID_OUTPUT, +@@ -151,7 +151,7 @@ static const desc_param output_params_root[] = { + }; + + /* output: audio function */ +-static const desc_param output_params_audio_func[] = { ++static const desc_param glue(output_params_audio_func_, PARAM)[] = { + { + .id = AC_PAR_FUNCTION_TYPE, + .val = AC_GRP_AUDIO_FUNCTION, +@@ -186,28 +186,28 @@ static const desc_param output_params_audio_func[] = { + }; + + /* output: nodes */ +-static const desc_node output_nodes[] = { ++static const desc_node glue(output_nodes_, PARAM)[] = { + { + .nid = AC_NODE_ROOT, + .name = "root", +- .params = output_params_root, +- .nparams = ARRAY_SIZE(output_params_root), ++ .params = glue(output_params_root_, PARAM), ++ .nparams = ARRAY_SIZE(glue(output_params_root_, PARAM)), + },{ + .nid = 1, + .name = "func", +- .params = output_params_audio_func, +- .nparams = ARRAY_SIZE(output_params_audio_func), ++ .params = glue(output_params_audio_func_, PARAM), ++ .nparams = ARRAY_SIZE(glue(output_params_audio_func_, PARAM)), + },{ + .nid = 2, + .name = "dac", +- .params = common_params_audio_dac, +- .nparams = ARRAY_SIZE(common_params_audio_dac), ++ .params = glue(common_params_audio_dac_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)), + .stindex = 0, + },{ + .nid = 3, + .name = "out", +- .params = common_params_audio_lineout, +- .nparams = ARRAY_SIZE(common_params_audio_lineout), ++ .params = glue(common_params_audio_lineout_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)), + .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | + (AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | + (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +@@ -219,15 +219,15 @@ static const desc_node output_nodes[] = { + }; + + /* output: codec */ +-static const desc_codec output = { ++static const desc_codec glue(output_, PARAM) = { + .name = "output", + .iid = QEMU_HDA_ID_OUTPUT, +- .nodes = output_nodes, +- .nnodes = ARRAY_SIZE(output_nodes), ++ .nodes = glue(output_nodes_, PARAM), ++ .nnodes = ARRAY_SIZE(glue(output_nodes_, PARAM)), + }; + + /* duplex: root node */ +-static const desc_param duplex_params_root[] = { ++static const desc_param glue(duplex_params_root_, PARAM)[] = { + { + .id = AC_PAR_VENDOR_ID, + .val = QEMU_HDA_ID_DUPLEX, +@@ -244,7 +244,7 @@ static const desc_param duplex_params_root[] = { + }; + + /* duplex: audio function */ +-static const desc_param duplex_params_audio_func[] = { ++static const desc_param glue(duplex_params_audio_func_, PARAM)[] = { + { + .id = AC_PAR_FUNCTION_TYPE, + .val = AC_GRP_AUDIO_FUNCTION, +@@ -279,28 +279,28 @@ static const desc_param duplex_params_audio_func[] = { + }; + + /* duplex: nodes */ +-static const desc_node duplex_nodes[] = { ++static const desc_node glue(duplex_nodes_, PARAM)[] = { + { + .nid = AC_NODE_ROOT, + .name = "root", +- .params = duplex_params_root, +- .nparams = ARRAY_SIZE(duplex_params_root), ++ .params = glue(duplex_params_root_, PARAM), ++ .nparams = ARRAY_SIZE(glue(duplex_params_root_, PARAM)), + },{ + .nid = 1, + .name = "func", +- .params = duplex_params_audio_func, +- .nparams = ARRAY_SIZE(duplex_params_audio_func), ++ .params = glue(duplex_params_audio_func_, PARAM), ++ .nparams = ARRAY_SIZE(glue(duplex_params_audio_func_, PARAM)), + },{ + .nid = 2, + .name = "dac", +- .params = common_params_audio_dac, +- .nparams = ARRAY_SIZE(common_params_audio_dac), ++ .params = glue(common_params_audio_dac_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)), + .stindex = 0, + },{ + .nid = 3, + .name = "out", +- .params = common_params_audio_lineout, +- .nparams = ARRAY_SIZE(common_params_audio_lineout), ++ .params = glue(common_params_audio_lineout_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)), + .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | + (AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | + (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +@@ -311,15 +311,15 @@ static const desc_node duplex_nodes[] = { + },{ + .nid = 4, + .name = "adc", +- .params = common_params_audio_adc, +- .nparams = ARRAY_SIZE(common_params_audio_adc), ++ .params = glue(common_params_audio_adc_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_adc_, PARAM)), + .stindex = 1, + .conn = (uint32_t[]) { 5 }, + },{ + .nid = 5, + .name = "in", +- .params = common_params_audio_linein, +- .nparams = ARRAY_SIZE(common_params_audio_linein), ++ .params = glue(common_params_audio_linein_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_linein_, PARAM)), + .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | + (AC_JACK_LINE_IN << AC_DEFCFG_DEVICE_SHIFT) | + (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +@@ -330,15 +330,15 @@ static const desc_node duplex_nodes[] = { + }; + + /* duplex: codec */ +-static const desc_codec duplex = { ++static const desc_codec glue(duplex_, PARAM) = { + .name = "duplex", + .iid = QEMU_HDA_ID_DUPLEX, +- .nodes = duplex_nodes, +- .nnodes = ARRAY_SIZE(duplex_nodes), ++ .nodes = glue(duplex_nodes_, PARAM), ++ .nnodes = ARRAY_SIZE(glue(duplex_nodes_, PARAM)), + }; + + /* micro: root node */ +-static const desc_param micro_params_root[] = { ++static const desc_param glue(micro_params_root_, PARAM)[] = { + { + .id = AC_PAR_VENDOR_ID, + .val = QEMU_HDA_ID_MICRO, +@@ -355,7 +355,7 @@ static const desc_param micro_params_root[] = { + }; + + /* micro: audio function */ +-static const desc_param micro_params_audio_func[] = { ++static const desc_param glue(micro_params_audio_func_, PARAM)[] = { + { + .id = AC_PAR_FUNCTION_TYPE, + .val = AC_GRP_AUDIO_FUNCTION, +@@ -390,28 +390,28 @@ static const desc_param micro_params_audio_func[] = { + }; + + /* micro: nodes */ +-static const desc_node micro_nodes[] = { ++static const desc_node glue(micro_nodes_, PARAM)[] = { + { + .nid = AC_NODE_ROOT, + .name = "root", +- .params = micro_params_root, +- .nparams = ARRAY_SIZE(micro_params_root), ++ .params = glue(micro_params_root_, PARAM), ++ .nparams = ARRAY_SIZE(glue(micro_params_root_, PARAM)), + },{ + .nid = 1, + .name = "func", +- .params = micro_params_audio_func, +- .nparams = ARRAY_SIZE(micro_params_audio_func), ++ .params = glue(micro_params_audio_func_, PARAM), ++ .nparams = ARRAY_SIZE(glue(micro_params_audio_func_, PARAM)), + },{ + .nid = 2, + .name = "dac", +- .params = common_params_audio_dac, +- .nparams = ARRAY_SIZE(common_params_audio_dac), ++ .params = glue(common_params_audio_dac_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_dac_, PARAM)), + .stindex = 0, + },{ + .nid = 3, + .name = "out", +- .params = common_params_audio_lineout, +- .nparams = ARRAY_SIZE(common_params_audio_lineout), ++ .params = glue(common_params_audio_lineout_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_lineout_, PARAM)), + .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | + (AC_JACK_SPEAKER << AC_DEFCFG_DEVICE_SHIFT) | + (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +@@ -422,15 +422,15 @@ static const desc_node micro_nodes[] = { + },{ + .nid = 4, + .name = "adc", +- .params = common_params_audio_adc, +- .nparams = ARRAY_SIZE(common_params_audio_adc), ++ .params = glue(common_params_audio_adc_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_adc_, PARAM)), + .stindex = 1, + .conn = (uint32_t[]) { 5 }, + },{ + .nid = 5, + .name = "in", +- .params = common_params_audio_linein, +- .nparams = ARRAY_SIZE(common_params_audio_linein), ++ .params = glue(common_params_audio_linein_, PARAM), ++ .nparams = ARRAY_SIZE(glue(common_params_audio_linein_, PARAM)), + .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | + (AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT) | + (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +@@ -441,9 +441,16 @@ static const desc_node micro_nodes[] = { + }; + + /* micro: codec */ +-static const desc_codec micro = { ++static const desc_codec glue(micro_, PARAM) = { + .name = "micro", + .iid = QEMU_HDA_ID_MICRO, +- .nodes = micro_nodes, +- .nnodes = ARRAY_SIZE(micro_nodes), ++ .nodes = glue(micro_nodes_, PARAM), ++ .nnodes = ARRAY_SIZE(glue(micro_nodes_, PARAM)), + }; ++ ++#undef PARAM ++#undef HDA_MIXER ++#undef QEMU_HDA_ID_OUTPUT ++#undef QEMU_HDA_ID_DUPLEX ++#undef QEMU_HDA_ID_MICRO ++#undef QEMU_HDA_AMP_CAPS +diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c +index cb498fc..3217d90 100644 +--- a/hw/audio/hda-codec.c ++++ b/hw/audio/hda-codec.c +@@ -118,7 +118,15 @@ static void hda_codec_parse_fmt(uint32_t format, struct audsettings *as) + #define QEMU_HDA_AMP_NONE (0) + #define QEMU_HDA_AMP_STEPS 0x4a + ++#ifdef CONFIG_MIXEMU ++#define PARAM mixemu ++#define HDA_MIXER + #include "hda-codec-common.h" ++#endif ++ ++#define PARAM nomixemu ++#include "hda-codec-common.h" ++ + /* -------------------------------------------------------------------------- */ + + static const char *fmt2name[] = { +@@ -163,6 +171,7 @@ struct HDAAudioState { + + /* properties */ + uint32_t debug; ++ bool mixer; + }; + + static void hda_audio_input_cb(void *opaque, int avail) +@@ -584,23 +593,70 @@ static const VMStateDescription vmstate_hda_audio = { + }; + + static Property hda_audio_properties[] = { +- DEFINE_PROP_UINT32("debug", HDAAudioState, debug, 0), ++ DEFINE_PROP_UINT32("debug", HDAAudioState, debug, 0), ++#ifdef CONFIG_MIXEMU ++ DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, true), ++#else ++ DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, false), ++#endif + DEFINE_PROP_END_OF_LIST(), + }; + + static int hda_audio_init_output(HDACodecDevice *hda) + { +- return hda_audio_init(hda, &output); ++ HDAAudioState *a = DO_UPCAST(HDAAudioState, hda, hda); ++ ++ if (!a->mixer) { ++ return hda_audio_init(hda, &output_nomixemu); ++ } else { ++ ++#ifdef CONFIG_MIXEMU ++ return hda_audio_init(hda, &output_mixemu); ++#else ++ fprintf(stderr, "ERROR: " ++ "hda-codec : Mixer emulation has not been compiled in!\n"); ++ return -1; ++#endif ++ ++ } + } + + static int hda_audio_init_duplex(HDACodecDevice *hda) + { +- return hda_audio_init(hda, &duplex); ++ HDAAudioState *a = DO_UPCAST(HDAAudioState, hda, hda); ++ ++ if (!a->mixer) { ++ return hda_audio_init(hda, &duplex_nomixemu); ++ } else { ++ ++#ifdef CONFIG_MIXEMU ++ return hda_audio_init(hda, &duplex_mixemu); ++#else ++ fprintf(stderr, "ERROR: " ++ "hda-codec : Mixer emulation has not been compiled in!\n"); ++ return -1; ++#endif ++ ++ } + } + + static int hda_audio_init_micro(HDACodecDevice *hda) + { +- return hda_audio_init(hda, µ); ++ HDAAudioState *a = DO_UPCAST(HDAAudioState, hda, hda); ++ ++ if (!a->mixer) { ++ return hda_audio_init(hda, µ_nomixemu); ++ } else { ++ ++#ifdef CONFIG_MIXEMU ++ return hda_audio_init(hda, µ_mixemu); ++#else ++ fprintf(stderr, "ERROR: " ++ "hda-codec : Mixer emulation has not been compiled in!\n"); ++ return -1; ++#endif ++ ++ } + } + + static void hda_audio_output_class_init(ObjectClass *klass, void *data) +-- +1.7.1 + diff --git a/SOURCES/kvm-hda-codec-refactor-common-definitions-into-a-header-.patch b/SOURCES/kvm-hda-codec-refactor-common-definitions-into-a-header-.patch new file mode 100644 index 0000000..5efe384 --- /dev/null +++ b/SOURCES/kvm-hda-codec-refactor-common-definitions-into-a-header-.patch @@ -0,0 +1,927 @@ +From 05205ba1d42e1381c4b0ecee32dd34535a68dace Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Tue, 15 Oct 2013 17:10:58 +0200 +Subject: [PATCH 21/25] hda-codec: refactor common definitions into a header file + +RH-Author: Bandan Das +Message-id: <1381857067-9399-2-git-send-email-bsd@redhat.com> +Patchwork-id: 54949 +O-Subject: [PATCH RHEL-7 qemu-kvm v3 1/5] hda-codec: refactor common definitions into a header file +Bugzilla: 954195 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster + +Move common defines and structs to a header file. +The next commit will include it twice, once for a device with a +mixer, and once for device without a mixer. + +Signed-off-by: Bandan Das +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 7953793c033343dbea97836645edbe4e61754b11) +--- + hw/audio/hda-codec-common.h | 449 ++++++++++++++++++++++++++++++++++++++++++++ + hw/audio/hda-codec.c | 424 +---------------------------------------- + 2 files changed, 450 insertions(+), 423 deletions(-) + create mode 100644 hw/audio/hda-codec-common.h + +Signed-off-by: Miroslav Rezanina +--- + hw/audio/hda-codec-common.h | 449 +++++++++++++++++++++++++++++++++++++++++++ + hw/audio/hda-codec.c | 424 +---------------------------------------- + 2 files changed, 450 insertions(+), 423 deletions(-) + create mode 100644 hw/audio/hda-codec-common.h + +diff --git a/hw/audio/hda-codec-common.h b/hw/audio/hda-codec-common.h +new file mode 100644 +index 0000000..2f7e95f +--- /dev/null ++++ b/hw/audio/hda-codec-common.h +@@ -0,0 +1,449 @@ ++/* ++ * Common code to disable/enable mixer emulation at run time ++ * ++ * Copyright (C) 2013 Red Hat, Inc. ++ * ++ * Written by Bandan Das ++ * with important bits picked up from hda-codec.c ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 or ++ * (at your option) version 3 of the License. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, see . ++ */ ++ ++/* ++ * HDA codec descriptions ++ */ ++ ++#ifdef CONFIG_MIXEMU ++#define QEMU_HDA_ID_OUTPUT ((QEMU_HDA_ID_VENDOR << 16) | 0x12) ++#define QEMU_HDA_ID_DUPLEX ((QEMU_HDA_ID_VENDOR << 16) | 0x22) ++#define QEMU_HDA_ID_MICRO ((QEMU_HDA_ID_VENDOR << 16) | 0x32) ++#define QEMU_HDA_AMP_CAPS \ ++ (AC_AMPCAP_MUTE | \ ++ (QEMU_HDA_AMP_STEPS << AC_AMPCAP_OFFSET_SHIFT) | \ ++ (QEMU_HDA_AMP_STEPS << AC_AMPCAP_NUM_STEPS_SHIFT) | \ ++ (3 << AC_AMPCAP_STEP_SIZE_SHIFT)) ++#else ++#define QEMU_HDA_ID_OUTPUT ((QEMU_HDA_ID_VENDOR << 16) | 0x11) ++#define QEMU_HDA_ID_DUPLEX ((QEMU_HDA_ID_VENDOR << 16) | 0x21) ++#define QEMU_HDA_ID_MICRO ((QEMU_HDA_ID_VENDOR << 16) | 0x31) ++#define QEMU_HDA_AMP_CAPS QEMU_HDA_AMP_NONE ++#endif ++ ++ ++/* common: audio output widget */ ++static const desc_param common_params_audio_dac[] = { ++ { ++ .id = AC_PAR_AUDIO_WIDGET_CAP, ++ .val = ((AC_WID_AUD_OUT << AC_WCAP_TYPE_SHIFT) | ++ AC_WCAP_FORMAT_OVRD | ++ AC_WCAP_AMP_OVRD | ++ AC_WCAP_OUT_AMP | ++ AC_WCAP_STEREO), ++ },{ ++ .id = AC_PAR_PCM, ++ .val = QEMU_HDA_PCM_FORMATS, ++ },{ ++ .id = AC_PAR_STREAM, ++ .val = AC_SUPFMT_PCM, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_CAPS, ++ }, ++}; ++ ++/* common: audio input widget */ ++static const desc_param common_params_audio_adc[] = { ++ { ++ .id = AC_PAR_AUDIO_WIDGET_CAP, ++ .val = ((AC_WID_AUD_IN << AC_WCAP_TYPE_SHIFT) | ++ AC_WCAP_CONN_LIST | ++ AC_WCAP_FORMAT_OVRD | ++ AC_WCAP_AMP_OVRD | ++ AC_WCAP_IN_AMP | ++ AC_WCAP_STEREO), ++ },{ ++ .id = AC_PAR_CONNLIST_LEN, ++ .val = 1, ++ },{ ++ .id = AC_PAR_PCM, ++ .val = QEMU_HDA_PCM_FORMATS, ++ },{ ++ .id = AC_PAR_STREAM, ++ .val = AC_SUPFMT_PCM, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_CAPS, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ }, ++}; ++ ++/* common: pin widget (line-out) */ ++static const desc_param common_params_audio_lineout[] = { ++ { ++ .id = AC_PAR_AUDIO_WIDGET_CAP, ++ .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | ++ AC_WCAP_CONN_LIST | ++ AC_WCAP_STEREO), ++ },{ ++ .id = AC_PAR_PIN_CAP, ++ .val = AC_PINCAP_OUT, ++ },{ ++ .id = AC_PAR_CONNLIST_LEN, ++ .val = 1, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ }, ++}; ++ ++/* common: pin widget (line-in) */ ++static const desc_param common_params_audio_linein[] = { ++ { ++ .id = AC_PAR_AUDIO_WIDGET_CAP, ++ .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | ++ AC_WCAP_STEREO), ++ },{ ++ .id = AC_PAR_PIN_CAP, ++ .val = AC_PINCAP_IN, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ }, ++}; ++ ++/* output: root node */ ++static const desc_param output_params_root[] = { ++ { ++ .id = AC_PAR_VENDOR_ID, ++ .val = QEMU_HDA_ID_OUTPUT, ++ },{ ++ .id = AC_PAR_SUBSYSTEM_ID, ++ .val = QEMU_HDA_ID_OUTPUT, ++ },{ ++ .id = AC_PAR_REV_ID, ++ .val = 0x00100101, ++ },{ ++ .id = AC_PAR_NODE_COUNT, ++ .val = 0x00010001, ++ }, ++}; ++ ++/* output: audio function */ ++static const desc_param output_params_audio_func[] = { ++ { ++ .id = AC_PAR_FUNCTION_TYPE, ++ .val = AC_GRP_AUDIO_FUNCTION, ++ },{ ++ .id = AC_PAR_SUBSYSTEM_ID, ++ .val = QEMU_HDA_ID_OUTPUT, ++ },{ ++ .id = AC_PAR_NODE_COUNT, ++ .val = 0x00020002, ++ },{ ++ .id = AC_PAR_PCM, ++ .val = QEMU_HDA_PCM_FORMATS, ++ },{ ++ .id = AC_PAR_STREAM, ++ .val = AC_SUPFMT_PCM, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_GPIO_CAP, ++ .val = 0, ++ },{ ++ .id = AC_PAR_AUDIO_FG_CAP, ++ .val = 0x00000808, ++ },{ ++ .id = AC_PAR_POWER_STATE, ++ .val = 0, ++ }, ++}; ++ ++/* output: nodes */ ++static const desc_node output_nodes[] = { ++ { ++ .nid = AC_NODE_ROOT, ++ .name = "root", ++ .params = output_params_root, ++ .nparams = ARRAY_SIZE(output_params_root), ++ },{ ++ .nid = 1, ++ .name = "func", ++ .params = output_params_audio_func, ++ .nparams = ARRAY_SIZE(output_params_audio_func), ++ },{ ++ .nid = 2, ++ .name = "dac", ++ .params = common_params_audio_dac, ++ .nparams = ARRAY_SIZE(common_params_audio_dac), ++ .stindex = 0, ++ },{ ++ .nid = 3, ++ .name = "out", ++ .params = common_params_audio_lineout, ++ .nparams = ARRAY_SIZE(common_params_audio_lineout), ++ .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | ++ (AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | ++ (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | ++ (AC_JACK_COLOR_GREEN << AC_DEFCFG_COLOR_SHIFT) | ++ 0x10), ++ .pinctl = AC_PINCTL_OUT_EN, ++ .conn = (uint32_t[]) { 2 }, ++ } ++}; ++ ++/* output: codec */ ++static const desc_codec output = { ++ .name = "output", ++ .iid = QEMU_HDA_ID_OUTPUT, ++ .nodes = output_nodes, ++ .nnodes = ARRAY_SIZE(output_nodes), ++}; ++ ++/* duplex: root node */ ++static const desc_param duplex_params_root[] = { ++ { ++ .id = AC_PAR_VENDOR_ID, ++ .val = QEMU_HDA_ID_DUPLEX, ++ },{ ++ .id = AC_PAR_SUBSYSTEM_ID, ++ .val = QEMU_HDA_ID_DUPLEX, ++ },{ ++ .id = AC_PAR_REV_ID, ++ .val = 0x00100101, ++ },{ ++ .id = AC_PAR_NODE_COUNT, ++ .val = 0x00010001, ++ }, ++}; ++ ++/* duplex: audio function */ ++static const desc_param duplex_params_audio_func[] = { ++ { ++ .id = AC_PAR_FUNCTION_TYPE, ++ .val = AC_GRP_AUDIO_FUNCTION, ++ },{ ++ .id = AC_PAR_SUBSYSTEM_ID, ++ .val = QEMU_HDA_ID_DUPLEX, ++ },{ ++ .id = AC_PAR_NODE_COUNT, ++ .val = 0x00020004, ++ },{ ++ .id = AC_PAR_PCM, ++ .val = QEMU_HDA_PCM_FORMATS, ++ },{ ++ .id = AC_PAR_STREAM, ++ .val = AC_SUPFMT_PCM, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_GPIO_CAP, ++ .val = 0, ++ },{ ++ .id = AC_PAR_AUDIO_FG_CAP, ++ .val = 0x00000808, ++ },{ ++ .id = AC_PAR_POWER_STATE, ++ .val = 0, ++ }, ++}; ++ ++/* duplex: nodes */ ++static const desc_node duplex_nodes[] = { ++ { ++ .nid = AC_NODE_ROOT, ++ .name = "root", ++ .params = duplex_params_root, ++ .nparams = ARRAY_SIZE(duplex_params_root), ++ },{ ++ .nid = 1, ++ .name = "func", ++ .params = duplex_params_audio_func, ++ .nparams = ARRAY_SIZE(duplex_params_audio_func), ++ },{ ++ .nid = 2, ++ .name = "dac", ++ .params = common_params_audio_dac, ++ .nparams = ARRAY_SIZE(common_params_audio_dac), ++ .stindex = 0, ++ },{ ++ .nid = 3, ++ .name = "out", ++ .params = common_params_audio_lineout, ++ .nparams = ARRAY_SIZE(common_params_audio_lineout), ++ .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | ++ (AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | ++ (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | ++ (AC_JACK_COLOR_GREEN << AC_DEFCFG_COLOR_SHIFT) | ++ 0x10), ++ .pinctl = AC_PINCTL_OUT_EN, ++ .conn = (uint32_t[]) { 2 }, ++ },{ ++ .nid = 4, ++ .name = "adc", ++ .params = common_params_audio_adc, ++ .nparams = ARRAY_SIZE(common_params_audio_adc), ++ .stindex = 1, ++ .conn = (uint32_t[]) { 5 }, ++ },{ ++ .nid = 5, ++ .name = "in", ++ .params = common_params_audio_linein, ++ .nparams = ARRAY_SIZE(common_params_audio_linein), ++ .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | ++ (AC_JACK_LINE_IN << AC_DEFCFG_DEVICE_SHIFT) | ++ (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | ++ (AC_JACK_COLOR_RED << AC_DEFCFG_COLOR_SHIFT) | ++ 0x20), ++ .pinctl = AC_PINCTL_IN_EN, ++ } ++}; ++ ++/* duplex: codec */ ++static const desc_codec duplex = { ++ .name = "duplex", ++ .iid = QEMU_HDA_ID_DUPLEX, ++ .nodes = duplex_nodes, ++ .nnodes = ARRAY_SIZE(duplex_nodes), ++}; ++ ++/* micro: root node */ ++static const desc_param micro_params_root[] = { ++ { ++ .id = AC_PAR_VENDOR_ID, ++ .val = QEMU_HDA_ID_MICRO, ++ },{ ++ .id = AC_PAR_SUBSYSTEM_ID, ++ .val = QEMU_HDA_ID_MICRO, ++ },{ ++ .id = AC_PAR_REV_ID, ++ .val = 0x00100101, ++ },{ ++ .id = AC_PAR_NODE_COUNT, ++ .val = 0x00010001, ++ }, ++}; ++ ++/* micro: audio function */ ++static const desc_param micro_params_audio_func[] = { ++ { ++ .id = AC_PAR_FUNCTION_TYPE, ++ .val = AC_GRP_AUDIO_FUNCTION, ++ },{ ++ .id = AC_PAR_SUBSYSTEM_ID, ++ .val = QEMU_HDA_ID_MICRO, ++ },{ ++ .id = AC_PAR_NODE_COUNT, ++ .val = 0x00020004, ++ },{ ++ .id = AC_PAR_PCM, ++ .val = QEMU_HDA_PCM_FORMATS, ++ },{ ++ .id = AC_PAR_STREAM, ++ .val = AC_SUPFMT_PCM, ++ },{ ++ .id = AC_PAR_AMP_IN_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_AMP_OUT_CAP, ++ .val = QEMU_HDA_AMP_NONE, ++ },{ ++ .id = AC_PAR_GPIO_CAP, ++ .val = 0, ++ },{ ++ .id = AC_PAR_AUDIO_FG_CAP, ++ .val = 0x00000808, ++ },{ ++ .id = AC_PAR_POWER_STATE, ++ .val = 0, ++ }, ++}; ++ ++/* micro: nodes */ ++static const desc_node micro_nodes[] = { ++ { ++ .nid = AC_NODE_ROOT, ++ .name = "root", ++ .params = micro_params_root, ++ .nparams = ARRAY_SIZE(micro_params_root), ++ },{ ++ .nid = 1, ++ .name = "func", ++ .params = micro_params_audio_func, ++ .nparams = ARRAY_SIZE(micro_params_audio_func), ++ },{ ++ .nid = 2, ++ .name = "dac", ++ .params = common_params_audio_dac, ++ .nparams = ARRAY_SIZE(common_params_audio_dac), ++ .stindex = 0, ++ },{ ++ .nid = 3, ++ .name = "out", ++ .params = common_params_audio_lineout, ++ .nparams = ARRAY_SIZE(common_params_audio_lineout), ++ .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | ++ (AC_JACK_SPEAKER << AC_DEFCFG_DEVICE_SHIFT) | ++ (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | ++ (AC_JACK_COLOR_GREEN << AC_DEFCFG_COLOR_SHIFT) | ++ 0x10), ++ .pinctl = AC_PINCTL_OUT_EN, ++ .conn = (uint32_t[]) { 2 }, ++ },{ ++ .nid = 4, ++ .name = "adc", ++ .params = common_params_audio_adc, ++ .nparams = ARRAY_SIZE(common_params_audio_adc), ++ .stindex = 1, ++ .conn = (uint32_t[]) { 5 }, ++ },{ ++ .nid = 5, ++ .name = "in", ++ .params = common_params_audio_linein, ++ .nparams = ARRAY_SIZE(common_params_audio_linein), ++ .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | ++ (AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT) | ++ (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | ++ (AC_JACK_COLOR_RED << AC_DEFCFG_COLOR_SHIFT) | ++ 0x20), ++ .pinctl = AC_PINCTL_IN_EN, ++ } ++}; ++ ++/* micro: codec */ ++static const desc_codec micro = { ++ .name = "micro", ++ .iid = QEMU_HDA_ID_MICRO, ++ .nodes = micro_nodes, ++ .nnodes = ARRAY_SIZE(micro_nodes), ++}; +diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c +index 362d8c0..cb498fc 100644 +--- a/hw/audio/hda-codec.c ++++ b/hw/audio/hda-codec.c +@@ -118,429 +118,7 @@ static void hda_codec_parse_fmt(uint32_t format, struct audsettings *as) + #define QEMU_HDA_AMP_NONE (0) + #define QEMU_HDA_AMP_STEPS 0x4a + +-#ifdef CONFIG_MIXEMU +-# define QEMU_HDA_ID_OUTPUT ((QEMU_HDA_ID_VENDOR << 16) | 0x12) +-# define QEMU_HDA_ID_DUPLEX ((QEMU_HDA_ID_VENDOR << 16) | 0x22) +-# define QEMU_HDA_ID_MICRO ((QEMU_HDA_ID_VENDOR << 16) | 0x32) +-# define QEMU_HDA_AMP_CAPS \ +- (AC_AMPCAP_MUTE | \ +- (QEMU_HDA_AMP_STEPS << AC_AMPCAP_OFFSET_SHIFT) | \ +- (QEMU_HDA_AMP_STEPS << AC_AMPCAP_NUM_STEPS_SHIFT) | \ +- (3 << AC_AMPCAP_STEP_SIZE_SHIFT)) +-#else +-# define QEMU_HDA_ID_OUTPUT ((QEMU_HDA_ID_VENDOR << 16) | 0x11) +-# define QEMU_HDA_ID_DUPLEX ((QEMU_HDA_ID_VENDOR << 16) | 0x21) +-# define QEMU_HDA_ID_MICRO ((QEMU_HDA_ID_VENDOR << 16) | 0x31) +-# define QEMU_HDA_AMP_CAPS QEMU_HDA_AMP_NONE +-#endif +- +-/* common: audio output widget */ +-static const desc_param common_params_audio_dac[] = { +- { +- .id = AC_PAR_AUDIO_WIDGET_CAP, +- .val = ((AC_WID_AUD_OUT << AC_WCAP_TYPE_SHIFT) | +- AC_WCAP_FORMAT_OVRD | +- AC_WCAP_AMP_OVRD | +- AC_WCAP_OUT_AMP | +- AC_WCAP_STEREO), +- },{ +- .id = AC_PAR_PCM, +- .val = QEMU_HDA_PCM_FORMATS, +- },{ +- .id = AC_PAR_STREAM, +- .val = AC_SUPFMT_PCM, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_CAPS, +- }, +-}; +- +-/* common: audio input widget */ +-static const desc_param common_params_audio_adc[] = { +- { +- .id = AC_PAR_AUDIO_WIDGET_CAP, +- .val = ((AC_WID_AUD_IN << AC_WCAP_TYPE_SHIFT) | +- AC_WCAP_CONN_LIST | +- AC_WCAP_FORMAT_OVRD | +- AC_WCAP_AMP_OVRD | +- AC_WCAP_IN_AMP | +- AC_WCAP_STEREO), +- },{ +- .id = AC_PAR_CONNLIST_LEN, +- .val = 1, +- },{ +- .id = AC_PAR_PCM, +- .val = QEMU_HDA_PCM_FORMATS, +- },{ +- .id = AC_PAR_STREAM, +- .val = AC_SUPFMT_PCM, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_CAPS, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_NONE, +- }, +-}; +- +-/* common: pin widget (line-out) */ +-static const desc_param common_params_audio_lineout[] = { +- { +- .id = AC_PAR_AUDIO_WIDGET_CAP, +- .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | +- AC_WCAP_CONN_LIST | +- AC_WCAP_STEREO), +- },{ +- .id = AC_PAR_PIN_CAP, +- .val = AC_PINCAP_OUT, +- },{ +- .id = AC_PAR_CONNLIST_LEN, +- .val = 1, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_NONE, +- }, +-}; +- +-/* common: pin widget (line-in) */ +-static const desc_param common_params_audio_linein[] = { +- { +- .id = AC_PAR_AUDIO_WIDGET_CAP, +- .val = ((AC_WID_PIN << AC_WCAP_TYPE_SHIFT) | +- AC_WCAP_STEREO), +- },{ +- .id = AC_PAR_PIN_CAP, +- .val = AC_PINCAP_IN, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_NONE, +- }, +-}; +- +-/* output: root node */ +-static const desc_param output_params_root[] = { +- { +- .id = AC_PAR_VENDOR_ID, +- .val = QEMU_HDA_ID_OUTPUT, +- },{ +- .id = AC_PAR_SUBSYSTEM_ID, +- .val = QEMU_HDA_ID_OUTPUT, +- },{ +- .id = AC_PAR_REV_ID, +- .val = 0x00100101, +- },{ +- .id = AC_PAR_NODE_COUNT, +- .val = 0x00010001, +- }, +-}; +- +-/* output: audio function */ +-static const desc_param output_params_audio_func[] = { +- { +- .id = AC_PAR_FUNCTION_TYPE, +- .val = AC_GRP_AUDIO_FUNCTION, +- },{ +- .id = AC_PAR_SUBSYSTEM_ID, +- .val = QEMU_HDA_ID_OUTPUT, +- },{ +- .id = AC_PAR_NODE_COUNT, +- .val = 0x00020002, +- },{ +- .id = AC_PAR_PCM, +- .val = QEMU_HDA_PCM_FORMATS, +- },{ +- .id = AC_PAR_STREAM, +- .val = AC_SUPFMT_PCM, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_GPIO_CAP, +- .val = 0, +- },{ +- .id = AC_PAR_AUDIO_FG_CAP, +- .val = 0x00000808, +- },{ +- .id = AC_PAR_POWER_STATE, +- .val = 0, +- }, +-}; +- +-/* output: nodes */ +-static const desc_node output_nodes[] = { +- { +- .nid = AC_NODE_ROOT, +- .name = "root", +- .params = output_params_root, +- .nparams = ARRAY_SIZE(output_params_root), +- },{ +- .nid = 1, +- .name = "func", +- .params = output_params_audio_func, +- .nparams = ARRAY_SIZE(output_params_audio_func), +- },{ +- .nid = 2, +- .name = "dac", +- .params = common_params_audio_dac, +- .nparams = ARRAY_SIZE(common_params_audio_dac), +- .stindex = 0, +- },{ +- .nid = 3, +- .name = "out", +- .params = common_params_audio_lineout, +- .nparams = ARRAY_SIZE(common_params_audio_lineout), +- .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | +- (AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | +- (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +- (AC_JACK_COLOR_GREEN << AC_DEFCFG_COLOR_SHIFT) | +- 0x10), +- .pinctl = AC_PINCTL_OUT_EN, +- .conn = (uint32_t[]) { 2 }, +- } +-}; +- +-/* output: codec */ +-static const desc_codec output = { +- .name = "output", +- .iid = QEMU_HDA_ID_OUTPUT, +- .nodes = output_nodes, +- .nnodes = ARRAY_SIZE(output_nodes), +-}; +- +-/* duplex: root node */ +-static const desc_param duplex_params_root[] = { +- { +- .id = AC_PAR_VENDOR_ID, +- .val = QEMU_HDA_ID_DUPLEX, +- },{ +- .id = AC_PAR_SUBSYSTEM_ID, +- .val = QEMU_HDA_ID_DUPLEX, +- },{ +- .id = AC_PAR_REV_ID, +- .val = 0x00100101, +- },{ +- .id = AC_PAR_NODE_COUNT, +- .val = 0x00010001, +- }, +-}; +- +-/* duplex: audio function */ +-static const desc_param duplex_params_audio_func[] = { +- { +- .id = AC_PAR_FUNCTION_TYPE, +- .val = AC_GRP_AUDIO_FUNCTION, +- },{ +- .id = AC_PAR_SUBSYSTEM_ID, +- .val = QEMU_HDA_ID_DUPLEX, +- },{ +- .id = AC_PAR_NODE_COUNT, +- .val = 0x00020004, +- },{ +- .id = AC_PAR_PCM, +- .val = QEMU_HDA_PCM_FORMATS, +- },{ +- .id = AC_PAR_STREAM, +- .val = AC_SUPFMT_PCM, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_GPIO_CAP, +- .val = 0, +- },{ +- .id = AC_PAR_AUDIO_FG_CAP, +- .val = 0x00000808, +- },{ +- .id = AC_PAR_POWER_STATE, +- .val = 0, +- }, +-}; +- +-/* duplex: nodes */ +-static const desc_node duplex_nodes[] = { +- { +- .nid = AC_NODE_ROOT, +- .name = "root", +- .params = duplex_params_root, +- .nparams = ARRAY_SIZE(duplex_params_root), +- },{ +- .nid = 1, +- .name = "func", +- .params = duplex_params_audio_func, +- .nparams = ARRAY_SIZE(duplex_params_audio_func), +- },{ +- .nid = 2, +- .name = "dac", +- .params = common_params_audio_dac, +- .nparams = ARRAY_SIZE(common_params_audio_dac), +- .stindex = 0, +- },{ +- .nid = 3, +- .name = "out", +- .params = common_params_audio_lineout, +- .nparams = ARRAY_SIZE(common_params_audio_lineout), +- .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | +- (AC_JACK_LINE_OUT << AC_DEFCFG_DEVICE_SHIFT) | +- (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +- (AC_JACK_COLOR_GREEN << AC_DEFCFG_COLOR_SHIFT) | +- 0x10), +- .pinctl = AC_PINCTL_OUT_EN, +- .conn = (uint32_t[]) { 2 }, +- },{ +- .nid = 4, +- .name = "adc", +- .params = common_params_audio_adc, +- .nparams = ARRAY_SIZE(common_params_audio_adc), +- .stindex = 1, +- .conn = (uint32_t[]) { 5 }, +- },{ +- .nid = 5, +- .name = "in", +- .params = common_params_audio_linein, +- .nparams = ARRAY_SIZE(common_params_audio_linein), +- .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | +- (AC_JACK_LINE_IN << AC_DEFCFG_DEVICE_SHIFT) | +- (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +- (AC_JACK_COLOR_RED << AC_DEFCFG_COLOR_SHIFT) | +- 0x20), +- .pinctl = AC_PINCTL_IN_EN, +- } +-}; +- +-/* duplex: codec */ +-static const desc_codec duplex = { +- .name = "duplex", +- .iid = QEMU_HDA_ID_DUPLEX, +- .nodes = duplex_nodes, +- .nnodes = ARRAY_SIZE(duplex_nodes), +-}; +- +-/* micro: root node */ +-static const desc_param micro_params_root[] = { +- { +- .id = AC_PAR_VENDOR_ID, +- .val = QEMU_HDA_ID_MICRO, +- },{ +- .id = AC_PAR_SUBSYSTEM_ID, +- .val = QEMU_HDA_ID_MICRO, +- },{ +- .id = AC_PAR_REV_ID, +- .val = 0x00100101, +- },{ +- .id = AC_PAR_NODE_COUNT, +- .val = 0x00010001, +- }, +-}; +- +-/* micro: audio function */ +-static const desc_param micro_params_audio_func[] = { +- { +- .id = AC_PAR_FUNCTION_TYPE, +- .val = AC_GRP_AUDIO_FUNCTION, +- },{ +- .id = AC_PAR_SUBSYSTEM_ID, +- .val = QEMU_HDA_ID_MICRO, +- },{ +- .id = AC_PAR_NODE_COUNT, +- .val = 0x00020004, +- },{ +- .id = AC_PAR_PCM, +- .val = QEMU_HDA_PCM_FORMATS, +- },{ +- .id = AC_PAR_STREAM, +- .val = AC_SUPFMT_PCM, +- },{ +- .id = AC_PAR_AMP_IN_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_AMP_OUT_CAP, +- .val = QEMU_HDA_AMP_NONE, +- },{ +- .id = AC_PAR_GPIO_CAP, +- .val = 0, +- },{ +- .id = AC_PAR_AUDIO_FG_CAP, +- .val = 0x00000808, +- },{ +- .id = AC_PAR_POWER_STATE, +- .val = 0, +- }, +-}; +- +-/* micro: nodes */ +-static const desc_node micro_nodes[] = { +- { +- .nid = AC_NODE_ROOT, +- .name = "root", +- .params = micro_params_root, +- .nparams = ARRAY_SIZE(micro_params_root), +- },{ +- .nid = 1, +- .name = "func", +- .params = micro_params_audio_func, +- .nparams = ARRAY_SIZE(micro_params_audio_func), +- },{ +- .nid = 2, +- .name = "dac", +- .params = common_params_audio_dac, +- .nparams = ARRAY_SIZE(common_params_audio_dac), +- .stindex = 0, +- },{ +- .nid = 3, +- .name = "out", +- .params = common_params_audio_lineout, +- .nparams = ARRAY_SIZE(common_params_audio_lineout), +- .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | +- (AC_JACK_SPEAKER << AC_DEFCFG_DEVICE_SHIFT) | +- (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +- (AC_JACK_COLOR_GREEN << AC_DEFCFG_COLOR_SHIFT) | +- 0x10), +- .pinctl = AC_PINCTL_OUT_EN, +- .conn = (uint32_t[]) { 2 }, +- },{ +- .nid = 4, +- .name = "adc", +- .params = common_params_audio_adc, +- .nparams = ARRAY_SIZE(common_params_audio_adc), +- .stindex = 1, +- .conn = (uint32_t[]) { 5 }, +- },{ +- .nid = 5, +- .name = "in", +- .params = common_params_audio_linein, +- .nparams = ARRAY_SIZE(common_params_audio_linein), +- .config = ((AC_JACK_PORT_COMPLEX << AC_DEFCFG_PORT_CONN_SHIFT) | +- (AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT) | +- (AC_JACK_CONN_UNKNOWN << AC_DEFCFG_CONN_TYPE_SHIFT) | +- (AC_JACK_COLOR_RED << AC_DEFCFG_COLOR_SHIFT) | +- 0x20), +- .pinctl = AC_PINCTL_IN_EN, +- } +-}; +- +-/* micro: codec */ +-static const desc_codec micro = { +- .name = "micro", +- .iid = QEMU_HDA_ID_MICRO, +- .nodes = micro_nodes, +- .nnodes = ARRAY_SIZE(micro_nodes), +-}; +- ++#include "hda-codec-common.h" + /* -------------------------------------------------------------------------- */ + + static const char *fmt2name[] = { +-- +1.7.1 + diff --git a/SOURCES/kvm-headers-add-drm_fourcc.h.patch b/SOURCES/kvm-headers-add-drm_fourcc.h.patch new file mode 100644 index 0000000..0473c21 --- /dev/null +++ b/SOURCES/kvm-headers-add-drm_fourcc.h.patch @@ -0,0 +1,450 @@ +From c1da33afa02ed4978c34f16ec56d60dbfa5ac2c0 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:15 +0200 +Subject: [PATCH 07/17] headers: add drm_fourcc.h + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-2-git-send-email-tgupta@redhat.com> +Patchwork-id: 80909 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 01/11] headers: add drm_fourcc.h +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +So we can use the drm fourcc codes without a dependency on libdrm-devel. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Alex Williamson + +(cherry picked from 8e8ee8509a0d2d5a65d7533e6e9179b6f3b0a0d4) + +Conflict: qemu-kvm does not have the standard-headers directory. +So, adding the drm_fourcc.h in include/ directory. + +Signed-off-by: Miroslav Rezanina +--- + include/drm_fourcc.h | 411 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 411 insertions(+) + create mode 100644 include/drm_fourcc.h + +diff --git a/include/drm_fourcc.h b/include/drm_fourcc.h +new file mode 100644 +index 0000000..11912fd +--- /dev/null ++++ b/include/drm_fourcc.h +@@ -0,0 +1,411 @@ ++/* ++ * Copyright 2011 Intel Corporation ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR ++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef DRM_FOURCC_H ++#define DRM_FOURCC_H ++ ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++#define fourcc_code(a, b, c, d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \ ++ ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) ++ ++#define DRM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */ ++ ++/* color index */ ++#define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ') /* [7:0] C */ ++ ++/* 8 bpp Red */ ++#define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ') /* [7:0] R */ ++ ++/* 16 bpp Red */ ++#define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ') /* [15:0] R little endian */ ++ ++/* 16 bpp RG */ ++#define DRM_FORMAT_RG88 fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */ ++#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */ ++ ++/* 32 bpp RG */ ++#define DRM_FORMAT_RG1616 fourcc_code('R', 'G', '3', '2') /* [31:0] R:G 16:16 little endian */ ++#define DRM_FORMAT_GR1616 fourcc_code('G', 'R', '3', '2') /* [31:0] G:R 16:16 little endian */ ++ ++/* 8 bpp RGB */ ++#define DRM_FORMAT_RGB332 fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */ ++#define DRM_FORMAT_BGR233 fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */ ++ ++/* 16 bpp RGB */ ++#define DRM_FORMAT_XRGB4444 fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */ ++#define DRM_FORMAT_XBGR4444 fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */ ++#define DRM_FORMAT_RGBX4444 fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */ ++#define DRM_FORMAT_BGRX4444 fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */ ++ ++#define DRM_FORMAT_ARGB4444 fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */ ++#define DRM_FORMAT_ABGR4444 fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */ ++#define DRM_FORMAT_RGBA4444 fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */ ++#define DRM_FORMAT_BGRA4444 fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */ ++ ++#define DRM_FORMAT_XRGB1555 fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */ ++#define DRM_FORMAT_XBGR1555 fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */ ++#define DRM_FORMAT_RGBX5551 fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */ ++#define DRM_FORMAT_BGRX5551 fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */ ++ ++#define DRM_FORMAT_ARGB1555 fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */ ++#define DRM_FORMAT_ABGR1555 fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */ ++#define DRM_FORMAT_RGBA5551 fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */ ++#define DRM_FORMAT_BGRA5551 fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */ ++ ++#define DRM_FORMAT_RGB565 fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */ ++#define DRM_FORMAT_BGR565 fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */ ++ ++/* 24 bpp RGB */ ++#define DRM_FORMAT_RGB888 fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */ ++#define DRM_FORMAT_BGR888 fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */ ++ ++/* 32 bpp RGB */ ++#define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ ++#define DRM_FORMAT_XBGR8888 fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */ ++#define DRM_FORMAT_RGBX8888 fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */ ++#define DRM_FORMAT_BGRX8888 fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */ ++ ++#define DRM_FORMAT_ARGB8888 fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */ ++#define DRM_FORMAT_ABGR8888 fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */ ++#define DRM_FORMAT_RGBA8888 fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */ ++#define DRM_FORMAT_BGRA8888 fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */ ++ ++#define DRM_FORMAT_XRGB2101010 fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */ ++#define DRM_FORMAT_XBGR2101010 fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */ ++#define DRM_FORMAT_RGBX1010102 fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */ ++#define DRM_FORMAT_BGRX1010102 fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */ ++ ++#define DRM_FORMAT_ARGB2101010 fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */ ++#define DRM_FORMAT_ABGR2101010 fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */ ++#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */ ++#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */ ++ ++/* packed YCbCr */ ++#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ ++#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ ++#define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ ++#define DRM_FORMAT_VYUY fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */ ++ ++#define DRM_FORMAT_AYUV fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */ ++ ++/* ++ * 2 plane RGB + A ++ * index 0 = RGB plane, same format as the corresponding non _A8 format has ++ * index 1 = A plane, [7:0] A ++ */ ++#define DRM_FORMAT_XRGB8888_A8 fourcc_code('X', 'R', 'A', '8') ++#define DRM_FORMAT_XBGR8888_A8 fourcc_code('X', 'B', 'A', '8') ++#define DRM_FORMAT_RGBX8888_A8 fourcc_code('R', 'X', 'A', '8') ++#define DRM_FORMAT_BGRX8888_A8 fourcc_code('B', 'X', 'A', '8') ++#define DRM_FORMAT_RGB888_A8 fourcc_code('R', '8', 'A', '8') ++#define DRM_FORMAT_BGR888_A8 fourcc_code('B', '8', 'A', '8') ++#define DRM_FORMAT_RGB565_A8 fourcc_code('R', '5', 'A', '8') ++#define DRM_FORMAT_BGR565_A8 fourcc_code('B', '5', 'A', '8') ++ ++/* ++ * 2 plane YCbCr ++ * index 0 = Y plane, [7:0] Y ++ * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian ++ * or ++ * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian ++ */ ++#define DRM_FORMAT_NV12 fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */ ++#define DRM_FORMAT_NV21 fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */ ++#define DRM_FORMAT_NV16 fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */ ++#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */ ++#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */ ++#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */ ++ ++/* ++ * 3 plane YCbCr ++ * index 0: Y plane, [7:0] Y ++ * index 1: Cb plane, [7:0] Cb ++ * index 2: Cr plane, [7:0] Cr ++ * or ++ * index 1: Cr plane, [7:0] Cr ++ * index 2: Cb plane, [7:0] Cb ++ */ ++#define DRM_FORMAT_YUV410 fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */ ++#define DRM_FORMAT_YVU410 fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */ ++#define DRM_FORMAT_YUV411 fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */ ++#define DRM_FORMAT_YVU411 fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */ ++#define DRM_FORMAT_YUV420 fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */ ++#define DRM_FORMAT_YVU420 fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */ ++#define DRM_FORMAT_YUV422 fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */ ++#define DRM_FORMAT_YVU422 fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */ ++#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ ++#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ ++ ++ ++/* ++ * Format Modifiers: ++ * ++ * Format modifiers describe, typically, a re-ordering or modification ++ * of the data in a plane of an FB. This can be used to express tiled/ ++ * swizzled formats, or compression, or a combination of the two. ++ * ++ * The upper 8 bits of the format modifier are a vendor-id as assigned ++ * below. The lower 56 bits are assigned as vendor sees fit. ++ */ ++ ++/* Vendor Ids: */ ++#define DRM_FORMAT_MOD_NONE 0 ++#define DRM_FORMAT_MOD_VENDOR_NONE 0 ++#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 ++#define DRM_FORMAT_MOD_VENDOR_AMD 0x02 ++#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03 ++#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 ++#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 ++#define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06 ++#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07 ++/* add more to the end as needed */ ++ ++#define DRM_FORMAT_RESERVED ((1ULL << 56) - 1) ++ ++#define fourcc_mod_code(vendor, val) \ ++ ((((uint64_t)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | ((val) & 0x00ffffffffffffffULL)) ++ ++/* ++ * Format Modifier tokens: ++ * ++ * When adding a new token please document the layout with a code comment, ++ * similar to the fourcc codes above. drm_fourcc.h is considered the ++ * authoritative source for all of these. ++ */ ++ ++/* ++ * Invalid Modifier ++ * ++ * This modifier can be used as a sentinel to terminate the format modifiers ++ * list, or to initialize a variable with an invalid modifier. It might also be ++ * used to report an error back to userspace for certain APIs. ++ */ ++#define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED) ++ ++/* ++ * Linear Layout ++ * ++ * Just plain linear layout. Note that this is different from no specifying any ++ * modifier (e.g. not setting DRM_MODE_FB_MODIFIERS in the DRM_ADDFB2 ioctl), ++ * which tells the driver to also take driver-internal information into account ++ * and so might actually result in a tiled framebuffer. ++ */ ++#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0) ++ ++/* Intel framebuffer modifiers */ ++ ++/* ++ * Intel X-tiling layout ++ * ++ * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) ++ * in row-major layout. Within the tile bytes are laid out row-major, with ++ * a platform-dependent stride. On top of that the memory can apply ++ * platform-depending swizzling of some higher address bits into bit6. ++ * ++ * This format is highly platforms specific and not useful for cross-driver ++ * sharing. It exists since on a given platform it does uniquely identify the ++ * layout in a simple way for i915-specific userspace. ++ */ ++#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1) ++ ++/* ++ * Intel Y-tiling layout ++ * ++ * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) ++ * in row-major layout. Within the tile bytes are laid out in OWORD (16 bytes) ++ * chunks column-major, with a platform-dependent height. On top of that the ++ * memory can apply platform-depending swizzling of some higher address bits ++ * into bit6. ++ * ++ * This format is highly platforms specific and not useful for cross-driver ++ * sharing. It exists since on a given platform it does uniquely identify the ++ * layout in a simple way for i915-specific userspace. ++ */ ++#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2) ++ ++/* ++ * Intel Yf-tiling layout ++ * ++ * This is a tiled layout using 4Kb tiles in row-major layout. ++ * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which ++ * are arranged in four groups (two wide, two high) with column-major layout. ++ * Each group therefore consits out of four 256 byte units, which are also laid ++ * out as 2x2 column-major. ++ * 256 byte units are made out of four 64 byte blocks of pixels, producing ++ * either a square block or a 2:1 unit. ++ * 64 byte blocks of pixels contain four pixel rows of 16 bytes, where the width ++ * in pixel depends on the pixel depth. ++ */ ++#define I915_FORMAT_MOD_Yf_TILED fourcc_mod_code(INTEL, 3) ++ ++/* ++ * Intel color control surface (CCS) for render compression ++ * ++ * The framebuffer format must be one of the 8:8:8:8 RGB formats. ++ * The main surface will be plane index 0 and must be Y/Yf-tiled, ++ * the CCS will be plane index 1. ++ * ++ * Each CCS tile matches a 1024x512 pixel area of the main surface. ++ * To match certain aspects of the 3D hardware the CCS is ++ * considered to be made up of normal 128Bx32 Y tiles, Thus ++ * the CCS pitch must be specified in multiples of 128 bytes. ++ * ++ * In reality the CCS tile appears to be a 64Bx64 Y tile, composed ++ * of QWORD (8 bytes) chunks instead of OWORD (16 bytes) chunks. ++ * But that fact is not relevant unless the memory is accessed ++ * directly. ++ */ ++#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4) ++#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5) ++ ++/* ++ * Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks ++ * ++ * Macroblocks are laid in a Z-shape, and each pixel data is following the ++ * standard NV12 style. ++ * As for NV12, an image is the result of two frame buffers: one for Y, ++ * one for the interleaved Cb/Cr components (1/2 the height of the Y buffer). ++ * Alignment requirements are (for each buffer): ++ * - multiple of 128 pixels for the width ++ * - multiple of 32 pixels for the height ++ * ++ * For more information: see https://linuxtv.org/downloads/v4l-dvb-apis/re32.html ++ */ ++#define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1) ++ ++/* Vivante framebuffer modifiers */ ++ ++/* ++ * Vivante 4x4 tiling layout ++ * ++ * This is a simple tiled layout using tiles of 4x4 pixels in a row-major ++ * layout. ++ */ ++#define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1) ++ ++/* ++ * Vivante 64x64 super-tiling layout ++ * ++ * This is a tiled layout using 64x64 pixel super-tiles, where each super-tile ++ * contains 8x4 groups of 2x4 tiles of 4x4 pixels (like above) each, all in row- ++ * major layout. ++ * ++ * For more information: see ++ * https://github.com/etnaviv/etna_viv/blob/master/doc/hardware.md#texture-tiling ++ */ ++#define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2) ++ ++/* ++ * Vivante 4x4 tiling layout for dual-pipe ++ * ++ * Same as the 4x4 tiling layout, except every second 4x4 pixel tile starts at a ++ * different base address. Offsets from the base addresses are therefore halved ++ * compared to the non-split tiled layout. ++ */ ++#define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3) ++ ++/* ++ * Vivante 64x64 super-tiling layout for dual-pipe ++ * ++ * Same as the 64x64 super-tiling layout, except every second 4x4 pixel tile ++ * starts at a different base address. Offsets from the base addresses are ++ * therefore halved compared to the non-split super-tiled layout. ++ */ ++#define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4) ++ ++/* NVIDIA frame buffer modifiers */ ++ ++/* ++ * Tegra Tiled Layout, used by Tegra 2, 3 and 4. ++ * ++ * Pixels are arranged in simple tiles of 16 x 16 bytes. ++ */ ++#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1) ++ ++/* ++ * 16Bx2 Block Linear layout, used by desktop GPUs, and Tegra K1 and later ++ * ++ * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked ++ * vertically by a power of 2 (1 to 32 GOBs) to form a block. ++ * ++ * Within a GOB, data is ordered as 16B x 2 lines sectors laid in Z-shape. ++ * ++ * Parameter 'v' is the log2 encoding of the number of GOBs stacked vertically. ++ * Valid values are: ++ * ++ * 0 == ONE_GOB ++ * 1 == TWO_GOBS ++ * 2 == FOUR_GOBS ++ * 3 == EIGHT_GOBS ++ * 4 == SIXTEEN_GOBS ++ * 5 == THIRTYTWO_GOBS ++ * ++ * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format ++ * in full detail. ++ */ ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \ ++ fourcc_mod_code(NVIDIA, 0x10 | ((v) & 0xf)) ++ ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \ ++ fourcc_mod_code(NVIDIA, 0x10) ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \ ++ fourcc_mod_code(NVIDIA, 0x11) ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \ ++ fourcc_mod_code(NVIDIA, 0x12) ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \ ++ fourcc_mod_code(NVIDIA, 0x13) ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \ ++ fourcc_mod_code(NVIDIA, 0x14) ++#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \ ++ fourcc_mod_code(NVIDIA, 0x15) ++ ++/* ++ * Broadcom VC4 "T" format ++ * ++ * This is the primary layout that the V3D GPU can texture from (it ++ * can't do linear). The T format has: ++ * ++ * - 64b utiles of pixels in a raster-order grid according to cpp. It's 4x4 ++ * pixels at 32 bit depth. ++ * ++ * - 1k subtiles made of a 4x4 raster-order grid of 64b utiles (so usually ++ * 16x16 pixels). ++ * ++ * - 4k tiles made of a 2x2 grid of 1k subtiles (so usually 32x32 pixels). On ++ * even 4k tile rows, they're arranged as (BL, TL, TR, BR), and on odd rows ++ * they're (TR, BR, BL, TL), where bottom left is start of memory. ++ * ++ * - an image made of 4k tiles in rows either left-to-right (even rows of 4k ++ * tiles) or right-to-left (odd rows of 4k tiles). ++ */ ++#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1) ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif /* DRM_FOURCC_H */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-help-add-id-suboption-to-iscsi.patch b/SOURCES/kvm-help-add-id-suboption-to-iscsi.patch new file mode 100644 index 0000000..f85748c --- /dev/null +++ b/SOURCES/kvm-help-add-id-suboption-to-iscsi.patch @@ -0,0 +1,47 @@ +From 066f23689bf4b417bf82895aa37d8d5a00e704bf Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 20 Jan 2014 12:49:35 +0100 +Subject: [PATCH 1/4] help: add id suboption to -iscsi + +RH-Author: Paolo Bonzini +Message-id: <1390222175-24815-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56830 +O-Subject: [RHEL 7.0 qemu-kvm PATCH] help: add id suboption to -iscsi +Bugzilla: 1019221 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Amos Kong +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1019221 + +Brew build: 6896455 + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2fe3798cd5fab65ee7c86758b1b7701d7fe3709f) +--- + As requested by QE. + + qemu-options.hx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-options.hx | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/qemu-options.hx b/qemu-options.hx +index 49b4bc2..1f2bb57 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -2073,7 +2073,7 @@ ETEXI + DEF("iscsi", HAS_ARG, QEMU_OPTION_iscsi, + "-iscsi [user=user][,password=password]\n" + " [,header-digest=CRC32C|CR32C-NONE|NONE-CRC32C|NONE\n" +- " [,initiator-name=iqn]\n" ++ " [,initiator-name=initiator-iqn][,id=target-iqn]\n" + " iSCSI session parameters\n", QEMU_ARCH_ALL) + STEXI + +-- +1.7.1 + diff --git a/SOURCES/kvm-hpet-add-API-to-find-it.patch b/SOURCES/kvm-hpet-add-API-to-find-it.patch new file mode 100644 index 0000000..19fcada --- /dev/null +++ b/SOURCES/kvm-hpet-add-API-to-find-it.patch @@ -0,0 +1,67 @@ +From be90d9992517cf1247bcce2f0ddae2ddf8e75291 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:57 +0100 +Subject: [PATCH 44/56] hpet: add API to find it + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-45-git-send-email-mst@redhat.com> +Patchwork-id: 56350 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 44/57] hpet: add API to find it +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +Add API to find HPET using QOM. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 64e9df8d34e493e59c1920358257a7576a560a1a) +--- + include/hw/timer/hpet.h | 2 ++ + hw/timer/hpet.c | 5 +++++ + 2 files changed, 7 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/timer/hpet.c | 5 +++++ + include/hw/timer/hpet.h | 2 ++ + 2 files changed, 7 insertions(+) + +diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c +index dd486a1..8c26851 100644 +--- a/hw/timer/hpet.c ++++ b/hw/timer/hpet.c +@@ -744,6 +744,11 @@ static void hpet_device_class_init(ObjectClass *klass, void *data) + dc->props = hpet_device_properties; + } + ++bool hpet_find(void) ++{ ++ return object_resolve_path_type("", "hpet", NULL); ++} ++ + static const TypeInfo hpet_device_info = { + .name = "hpet", + .parent = TYPE_SYS_BUS_DEVICE, +diff --git a/include/hw/timer/hpet.h b/include/hw/timer/hpet.h +index 757f79f..ab44bd3 100644 +--- a/include/hw/timer/hpet.h ++++ b/include/hw/timer/hpet.h +@@ -71,4 +71,6 @@ struct hpet_fw_config + } QEMU_PACKED; + + extern struct hpet_fw_config hpet_cfg; ++ ++bool hpet_find(void); + #endif +-- +1.7.11.7 + diff --git a/SOURCES/kvm-hpet-fix-buffer-overrun-on-invalid-state-load.patch b/SOURCES/kvm-hpet-fix-buffer-overrun-on-invalid-state-load.patch new file mode 100644 index 0000000..0179ece --- /dev/null +++ b/SOURCES/kvm-hpet-fix-buffer-overrun-on-invalid-state-load.patch @@ -0,0 +1,73 @@ +From 4b41911968cb53458b86b027f0d028e38618df46 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:52:54 +0200 +Subject: [PATCH 23/31] hpet: fix buffer overrun on invalid state load + +RH-Author: Michael S. Tsirkin +Message-id: <1400057538-6975-5-git-send-email-mst@redhat.com> +Patchwork-id: 58871 +O-Subject: [PATCH qemu-kvm RHEL7.1 4/5] hpet: fix buffer overrun on invalid state load +Bugzilla: 1095707 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +CVE-2013-4527 hw/timer/hpet.c buffer overrun + +hpet is a VARRAY with a uint8 size but static array of 32 + +To fix, make sure num_timers is valid using VMSTATE_VALID hook. + +Reported-by: Anthony Liguori +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit 3f1c49e2136fa08ab1ef3183fd55def308829584) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095707 +--- + hw/timer/hpet.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/timer/hpet.c | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c +index dd486a1..54ffa49 100644 +--- a/hw/timer/hpet.c ++++ b/hw/timer/hpet.c +@@ -222,6 +222,18 @@ static int hpet_pre_load(void *opaque) + return 0; + } + ++static bool hpet_validate_num_timers(void *opaque, int version_id) ++{ ++ HPETState *s = opaque; ++ ++ if (s->num_timers < HPET_MIN_TIMERS) { ++ return false; ++ } else if (s->num_timers > HPET_MAX_TIMERS) { ++ return false; ++ } ++ return true; ++} ++ + static int hpet_post_load(void *opaque, int version_id) + { + HPETState *s = opaque; +@@ -290,6 +302,7 @@ static const VMStateDescription vmstate_hpet = { + VMSTATE_UINT64(isr, HPETState), + VMSTATE_UINT64(hpet_counter, HPETState), + VMSTATE_UINT8_V(num_timers, HPETState, 2), ++ VMSTATE_VALIDATE("num_timers in range", hpet_validate_num_timers), + VMSTATE_STRUCT_VARRAY_UINT8(timer, HPETState, num_timers, 0, + vmstate_hpet_timer, HPETTimer), + VMSTATE_END_OF_LIST() +-- +1.7.1 + diff --git a/SOURCES/kvm-hpet-fix-build-with-CONFIG_HPET-off.patch b/SOURCES/kvm-hpet-fix-build-with-CONFIG_HPET-off.patch new file mode 100644 index 0000000..d0be925 --- /dev/null +++ b/SOURCES/kvm-hpet-fix-build-with-CONFIG_HPET-off.patch @@ -0,0 +1,83 @@ +From b166f0998eba97144034f39382e2e90339f4c5b1 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:59 +0100 +Subject: [PATCH 45/56] hpet: fix build with CONFIG_HPET off + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-46-git-send-email-mst@redhat.com> +Patchwork-id: 56351 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 45/57] hpet: fix build with CONFIG_HPET off +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +make hpet_find inline so we don't need +to build hpet.c to check if hpet is enabled. + +Fixes link error with CONFIG_HPET off. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Michael S. Tsirkin + +Upstream status: posted +--- + include/hw/timer/hpet.h | 10 +++++++++- + hw/timer/hpet.c | 5 ----- + 2 files changed, 9 insertions(+), 6 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/timer/hpet.c | 5 ----- + include/hw/timer/hpet.h | 10 +++++++++- + 2 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c +index 8c26851..dd486a1 100644 +--- a/hw/timer/hpet.c ++++ b/hw/timer/hpet.c +@@ -744,11 +744,6 @@ static void hpet_device_class_init(ObjectClass *klass, void *data) + dc->props = hpet_device_properties; + } + +-bool hpet_find(void) +-{ +- return object_resolve_path_type("", "hpet", NULL); +-} +- + static const TypeInfo hpet_device_info = { + .name = "hpet", + .parent = TYPE_SYS_BUS_DEVICE, +diff --git a/include/hw/timer/hpet.h b/include/hw/timer/hpet.h +index ab44bd3..773953b 100644 +--- a/include/hw/timer/hpet.h ++++ b/include/hw/timer/hpet.h +@@ -13,6 +13,8 @@ + #ifndef QEMU_HPET_EMUL_H + #define QEMU_HPET_EMUL_H + ++#include "qom/object.h" ++ + #define HPET_BASE 0xfed00000 + #define HPET_CLK_PERIOD 10000000ULL /* 10000000 femtoseconds == 10ns*/ + +@@ -72,5 +74,11 @@ struct hpet_fw_config + + extern struct hpet_fw_config hpet_cfg; + +-bool hpet_find(void); ++#define TYPE_HPET "hpet" ++ ++static inline bool hpet_find(void) ++{ ++ return object_resolve_path_type("", TYPE_HPET, NULL); ++} ++ + #endif +-- +1.7.11.7 + diff --git a/SOURCES/kvm-hw-Pass-QEMUMachine-to-its-init-method.patch b/SOURCES/kvm-hw-Pass-QEMUMachine-to-its-init-method.patch new file mode 100644 index 0000000..25b6ab4 --- /dev/null +++ b/SOURCES/kvm-hw-Pass-QEMUMachine-to-its-init-method.patch @@ -0,0 +1,88 @@ +From b63a24d9875589b40cad66a381b22f8304d0fdcd Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:25 +0100 +Subject: [PATCH 25/29] hw: Pass QEMUMachine to its init() method + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-9-git-send-email-armbru@redhat.com> +Patchwork-id: 55246 +O-Subject: [PATCH 7.0 qemu-kvm 08/11] hw: Pass QEMUMachine to its init() method +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Put it in QEMUMachineInitArgs, so I don't have to touch every board. + +Signed-off-by: Markus Armbruster +(cherry picked from pending upstream submission) + +Conflicts: + include/hw/boards.h + vl.c + +Conflicts because we don't have commit c165473 "hw: Clean up bogus +default boot order". +--- + include/hw/boards.h | 7 +++++-- + vl.c | 3 ++- + 2 files changed, 7 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/hw/boards.h | 7 +++++-- + vl.c | 3 ++- + 2 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/include/hw/boards.h b/include/hw/boards.h +index fb7c6f1..dd65e30 100644 +--- a/include/hw/boards.h ++++ b/include/hw/boards.h +@@ -9,7 +9,10 @@ + #define DEFAULT_MACHINE_OPTIONS \ + .boot_order = "cad" + ++typedef struct QEMUMachine QEMUMachine; ++ + typedef struct QEMUMachineInitArgs { ++ const QEMUMachine *machine; + ram_addr_t ram_size; + const char *boot_device; + const char *kernel_filename; +@@ -24,7 +27,7 @@ typedef void QEMUMachineResetFunc(void); + + typedef void QEMUMachineHotAddCPUFunc(const int64_t id, Error **errp); + +-typedef struct QEMUMachine { ++struct QEMUMachine { + const char *name; + const char *alias; + const char *desc; +@@ -46,7 +49,7 @@ typedef struct QEMUMachine { + GlobalProperty *compat_props; + struct QEMUMachine *next; + const char *hw_version; +-} QEMUMachine; ++}; + + int qemu_register_machine(QEMUMachine *m); + QEMUMachine *find_default_machine(void); +diff --git a/vl.c b/vl.c +index 19cc3b2..7c8ba63 100644 +--- a/vl.c ++++ b/vl.c +@@ -4218,7 +4218,8 @@ int main(int argc, char **argv, char **envp) + + qdev_machine_init(); + +- QEMUMachineInitArgs args = { .ram_size = ram_size, ++ QEMUMachineInitArgs args = { .machine = machine, ++ .ram_size = ram_size, + .boot_device = boot_order, + .kernel_filename = kernel_filename, + .kernel_cmdline = kernel_cmdline, +-- +1.7.1 + diff --git a/SOURCES/kvm-hw-cannot_instantiate_with_device_add_yet-due-to-poi.patch b/SOURCES/kvm-hw-cannot_instantiate_with_device_add_yet-due-to-poi.patch new file mode 100644 index 0000000..6199ec5 --- /dev/null +++ b/SOURCES/kvm-hw-cannot_instantiate_with_device_add_yet-due-to-poi.patch @@ -0,0 +1,221 @@ +From 8aa43c6e4e8def26812cb435b9f3c3146488e3bd Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 16 Jan 2014 15:25:18 -0500 +Subject: [PATCH 12/14] hw: cannot_instantiate_with_device_add_yet due to + pointer props +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1389885919-16158-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56750 +O-Subject: [PATCH 7.0 qemu-kvm 1/2] hw: cannot_instantiate_with_device_add_yet due to pointer props +Bugzilla: 1031098 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +Pointer properties can be set only by code, not by device_add. A +device with a pointer property can work with device_add only when the +property may remain null. + +This is the case for property "interrupt_vector" of device +"etraxfs,pic". Add a comment there. + +Set cannot_instantiate_with_device_add_yet for the other devices with +pointer properties, with a comment explaining why. + +Juha Riihimäki and Peter Maydell deserve my thanks for making "pointer +property must not remain null" blatantly obvious in the OMAP devices. + +Only device "smbus-eeprom" is actually changed. The others are all +sysbus devices, which get cannot_instantiate_with_device_add_yet set +in their abstract base's class init function. Setting it again in +their class init function is technically redundant, but serves as +insurance for when sysbus devices become available with device_add, +and as documentation. + +Signed-off-by: Markus Armbruster +Reviewed-by: Edgar E. Iglesias (for ETRAX) +Signed-off-by: Andreas Färber +(cherry picked from commit 1b111dc1216be2a89770fdc1ab3dfa8025957442) +--- + hw/audio/marvell_88w8618.c | 2 ++ + hw/dma/sparc32_dma.c | 2 ++ + hw/gpio/omap_gpio.c | 4 ++++ + hw/i2c/omap_i2c.c | 2 ++ + hw/i2c/smbus_eeprom.c | 2 ++ + hw/intc/etraxfs_pic.c | 4 ++++ + hw/intc/grlib_irqmp.c | 2 ++ + hw/intc/omap_intc.c | 4 ++++ + hw/net/etraxfs_eth.c | 2 ++ + hw/net/lance.c | 2 ++ + 10 files changed, 26 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/audio/marvell_88w8618.c | 2 ++ + hw/dma/sparc32_dma.c | 2 ++ + hw/gpio/omap_gpio.c | 4 ++++ + hw/i2c/omap_i2c.c | 2 ++ + hw/i2c/smbus_eeprom.c | 2 ++ + hw/intc/etraxfs_pic.c | 4 ++++ + hw/intc/grlib_irqmp.c | 2 ++ + hw/intc/omap_intc.c | 4 ++++ + hw/net/etraxfs_eth.c | 2 ++ + hw/net/lance.c | 2 ++ + 10 files changed, 26 insertions(+) + +diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c +index de06dfd..4f7196a 100644 +--- a/hw/audio/marvell_88w8618.c ++++ b/hw/audio/marvell_88w8618.c +@@ -285,6 +285,8 @@ static void mv88w8618_audio_class_init(ObjectClass *klass, void *data) + dc->reset = mv88w8618_audio_reset; + dc->vmsd = &mv88w8618_audio_vmsd; + dc->props = mv88w8618_audio_properties; ++ /* Reason: pointer property "wm8750" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo mv88w8618_audio_info = { +diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c +index fd21533..c866da7 100644 +--- a/hw/dma/sparc32_dma.c ++++ b/hw/dma/sparc32_dma.c +@@ -298,6 +298,8 @@ static void sparc32_dma_class_init(ObjectClass *klass, void *data) + dc->reset = dma_reset; + dc->vmsd = &vmstate_dma; + dc->props = sparc32_dma_properties; ++ /* Reason: pointer property "iommu_opaque" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo sparc32_dma_info = { +diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c +index f5eeaea..3f423dd 100644 +--- a/hw/gpio/omap_gpio.c ++++ b/hw/gpio/omap_gpio.c +@@ -745,6 +745,8 @@ static void omap_gpio_class_init(ObjectClass *klass, void *data) + k->init = omap_gpio_init; + dc->reset = omap_gpif_reset; + dc->props = omap_gpio_properties; ++ /* Reason: pointer property "clk" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo omap_gpio_info = { +@@ -774,6 +776,8 @@ static void omap2_gpio_class_init(ObjectClass *klass, void *data) + k->init = omap2_gpio_init; + dc->reset = omap2_gpif_reset; + dc->props = omap2_gpio_properties; ++ /* Reason: pointer properties "iclk", "fclk0", ..., "fclk5" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo omap2_gpio_info = { +diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c +index efb2254..464308e 100644 +--- a/hw/i2c/omap_i2c.c ++++ b/hw/i2c/omap_i2c.c +@@ -469,6 +469,8 @@ static void omap_i2c_class_init(ObjectClass *klass, void *data) + k->init = omap_i2c_init; + dc->props = omap_i2c_properties; + dc->reset = omap_i2c_reset; ++ /* Reason: pointer properties "iclk", "fclk" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo omap_i2c_info = { +diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c +index 0154283..0218f8a 100644 +--- a/hw/i2c/smbus_eeprom.c ++++ b/hw/i2c/smbus_eeprom.c +@@ -121,6 +121,8 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data) + sc->write_data = eeprom_write_data; + sc->read_data = eeprom_read_data; + dc->props = smbus_eeprom_properties; ++ /* Reason: pointer property "data" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo smbus_eeprom_info = { +diff --git a/hw/intc/etraxfs_pic.c b/hw/intc/etraxfs_pic.c +index 635103c..57650c4 100644 +--- a/hw/intc/etraxfs_pic.c ++++ b/hw/intc/etraxfs_pic.c +@@ -163,6 +163,10 @@ static void etraxfs_pic_class_init(ObjectClass *klass, void *data) + + k->init = etraxfs_pic_init; + dc->props = etraxfs_pic_properties; ++ /* ++ * Note: pointer property "interrupt_vector" may remain null, thus ++ * no need for dc->cannot_instantiate_with_device_add_yet = true; ++ */ + } + + static const TypeInfo etraxfs_pic_info = { +diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c +index 68dfe6a..1cfa960 100644 +--- a/hw/intc/grlib_irqmp.c ++++ b/hw/intc/grlib_irqmp.c +@@ -368,6 +368,8 @@ static void grlib_irqmp_class_init(ObjectClass *klass, void *data) + k->init = grlib_irqmp_init; + dc->reset = grlib_irqmp_reset; + dc->props = grlib_irqmp_properties; ++ /* Reason: pointer properties "set_pil_in", "set_pil_in_opaque" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo grlib_irqmp_info = { +diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c +index 875eba4..e846fd6 100644 +--- a/hw/intc/omap_intc.c ++++ b/hw/intc/omap_intc.c +@@ -387,6 +387,8 @@ static void omap_intc_class_init(ObjectClass *klass, void *data) + k->init = omap_intc_init; + dc->reset = omap_inth_reset; + dc->props = omap_intc_properties; ++ /* Reason: pointer property "clk" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo omap_intc_info = { +@@ -631,6 +633,8 @@ static void omap2_intc_class_init(ObjectClass *klass, void *data) + k->init = omap2_intc_init; + dc->reset = omap_inth_reset; + dc->props = omap2_intc_properties; ++ /* Reason: pointer property "iclk", "fclk" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo omap2_intc_info = { +diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c +index 1039913..374eb5a 100644 +--- a/hw/net/etraxfs_eth.c ++++ b/hw/net/etraxfs_eth.c +@@ -639,6 +639,8 @@ static void etraxfs_eth_class_init(ObjectClass *klass, void *data) + + k->init = fs_eth_init; + dc->props = etraxfs_eth_properties; ++ /* Reason: pointer properties "dma_out", "dma_in" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo etraxfs_eth_info = { +diff --git a/hw/net/lance.c b/hw/net/lance.c +index 90641e7..df62dcb 100644 +--- a/hw/net/lance.c ++++ b/hw/net/lance.c +@@ -154,6 +154,8 @@ static void lance_class_init(ObjectClass *klass, void *data) + dc->reset = lance_reset; + dc->vmsd = &vmstate_lance; + dc->props = lance_properties; ++ /* Reason: pointer property "dma" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo lance_info = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-i386-Makefile.obj-use-PYTHON-to-run-.py-scripts-c.patch b/SOURCES/kvm-hw-i386-Makefile.obj-use-PYTHON-to-run-.py-scripts-c.patch new file mode 100644 index 0000000..fe1df66 --- /dev/null +++ b/SOURCES/kvm-hw-i386-Makefile.obj-use-PYTHON-to-run-.py-scripts-c.patch @@ -0,0 +1,38 @@ +From 091eecc4fa42754760dfff393dabcc2b444e9693 Mon Sep 17 00:00:00 2001 +Message-Id: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Michael Tokarev +Date: Tue, 17 Dec 2013 17:19:32 +0200 +Subject: [PATCH 01/21] hw/i386/Makefile.obj: use $(PYTHON) to run .py scripts + consistently + +$(PYTHON) is a Make variable which is set by configure. +In all other places over the tree, .py files are run from +Makefiles using this variable, except of a single leftover +in hw/i386/Makefile.obj (and a nearby place in there uses +$(PYTHON) correctly). Fix this leftover too. + +Signed-off-by: Michael Tokarev +Cc: Luigi Rizzo +Reviewed-by:: Stefan Weil +(cherry picked from commit 0478f37ce258438d74164dd182b0ae125f174ec6) +Signed-off-by: Michal Novotny +--- + hw/i386/Makefile.objs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs +index 6754fd5..6a17cf8 100644 +--- a/hw/i386/Makefile.objs ++++ b/hw/i386/Makefile.objs +@@ -19,7 +19,7 @@ hw/i386/%.hex: $(SRC_PATH)/hw/i386/%.dsl $(SRC_PATH)/scripts/acpi_extract_prepro + $(call quiet-command, cpp -P $< -o $*.dsl.i.orig, " CPP $(TARGET_DIR)$*.dsl.i.orig") + $(call quiet-command, $(PYTHON) $(SRC_PATH)/scripts/acpi_extract_preprocess.py $*.dsl.i.orig > $*.dsl.i, " ACPI_PREPROCESS $(TARGET_DIR)$*.dsl.i") + $(call quiet-command, $(IASL) $(call iasl-option,$(IASL),-Pn,) -vs -l -tc -p $* $*.dsl.i $(if $(V), , > /dev/null) 2>&1 ," IASL $(TARGET_DIR)$*.dsl.i") +- $(call quiet-command, $(SRC_PATH)/scripts/acpi_extract.py $*.lst > $*.off, " ACPI_EXTRACT $(TARGET_DIR)$*.off") ++ $(call quiet-command, $(PYTHON) $(SRC_PATH)/scripts/acpi_extract.py $*.lst > $*.off, " ACPI_EXTRACT $(TARGET_DIR)$*.off") + $(call quiet-command, cat $*.off > $@, " CAT $(TARGET_DIR)$@") + else + #IASL Not present. Restore pre-generated hex files. +-- +1.7.11.7 + diff --git a/SOURCES/kvm-hw-i386-pc_sysfw-support-two-flash-drives.patch b/SOURCES/kvm-hw-i386-pc_sysfw-support-two-flash-drives.patch new file mode 100644 index 0000000..38b6ae1 --- /dev/null +++ b/SOURCES/kvm-hw-i386-pc_sysfw-support-two-flash-drives.patch @@ -0,0 +1,192 @@ +From e1fb6e4160e9d9eb1c7b01ea4b5b3a94c953c379 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:03 +0100 +Subject: [PATCH 13/22] hw/i386/pc_sysfw: support two flash drives + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-14-git-send-email-lersek@redhat.com> +Patchwork-id: 56626 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 13/18] hw/i386/pc_sysfw: support two flash drives +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +This patch allows the user to usefully specify + + -drive file=img_1,if=pflash,format=raw,readonly \ + -drive file=img_2,if=pflash,format=raw + +on the command line. The flash images will be mapped under 4G in their +reverse unit order -- that is, with their base addresses progressing +downwards, in increasing unit order. + +(The unit number increases with command line order if not explicitly +specified.) + +This accommodates the following use case: suppose that OVMF is split in +two parts, a writeable host file for non-volatile variable storage, and a +read-only part for bootstrap and decompressible executable code. + +The binary code part would be read-only, centrally managed on the host +system, and passed in as unit 0. The variable store would be writeable, +VM-specific, and passed in as unit 1. + + 00000000ffe00000-00000000ffe1ffff (prio 0, R-): system.flash1 + 00000000ffe20000-00000000ffffffff (prio 0, R-): system.flash0 + +(If the guest tries to write to the flash range that is backed by the +read-only drive, pflash_update() is never called; various flash +programming/erase errors are returned to the guest instead. See the +callers of pflash_update(), and the initialization of "pfl->ro", in +"hw/block/pflash_cfi01.c".) + +Signed-off-by: Laszlo Ersek +Reviewed-by: Markus Armbruster +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 637a5acb46b36a25b506ba6545e9a53350585b03) +--- + hw/i386/pc_sysfw.c | 105 +++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 86 insertions(+), 19 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_sysfw.c | 105 ++++++++++++++++++++++++++++++++++++++++++--------- + 1 files changed, 86 insertions(+), 19 deletions(-) + +diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c +index eb56dee..6f5ecde 100644 +--- a/hw/i386/pc_sysfw.c ++++ b/hw/i386/pc_sysfw.c +@@ -72,35 +72,102 @@ static void pc_isa_bios_init(MemoryRegion *rom_memory, + memory_region_set_readonly(isa_bios, true); + } + +-static void pc_system_flash_init(MemoryRegion *rom_memory, +- DriveInfo *pflash_drv) ++#define FLASH_MAP_UNIT_MAX 2 ++ ++/* We don't have a theoretically justifiable exact lower bound on the base ++ * address of any flash mapping. In practice, the IO-APIC MMIO range is ++ * [0xFEE00000..0xFEE01000[ -- see IO_APIC_DEFAULT_ADDRESS --, leaving free ++ * only 18MB-4KB below 4G. For now, restrict the cumulative mapping to 8MB in ++ * size. ++ */ ++#define FLASH_MAP_BASE_MIN ((hwaddr)(0x100000000ULL - 8*1024*1024)) ++ ++/* This function maps flash drives from 4G downward, in order of their unit ++ * numbers. The mapping starts at unit#0, with unit number increments of 1, and ++ * stops before the first missing flash drive, or before ++ * unit#FLASH_MAP_UNIT_MAX, whichever is reached first. ++ * ++ * Addressing within one flash drive is of course not reversed. ++ * ++ * An error message is printed and the process exits if: ++ * - the size of the backing file for a flash drive is non-positive, or not a ++ * multiple of the required sector size, or ++ * - the current mapping's base address would fall below FLASH_MAP_BASE_MIN. ++ * ++ * The drive with unit#0 (if available) is mapped at the highest address, and ++ * it is passed to pc_isa_bios_init(). Merging several drives for isa-bios is ++ * not supported. ++ */ ++static void pc_system_flash_init(MemoryRegion *rom_memory) + { ++ int unit; ++ DriveInfo *pflash_drv; + BlockDriverState *bdrv; + int64_t size; +- hwaddr phys_addr; ++ char *fatal_errmsg = NULL; ++ hwaddr phys_addr = 0x100000000ULL; + int sector_bits, sector_size; + pflash_t *system_flash; + MemoryRegion *flash_mem; ++ char name[64]; + +- bdrv = pflash_drv->bdrv; +- size = bdrv_getlength(pflash_drv->bdrv); + sector_bits = 12; + sector_size = 1 << sector_bits; + +- if ((size % sector_size) != 0) { +- fprintf(stderr, +- "qemu: PC system firmware (pflash) must be a multiple of 0x%x\n", +- sector_size); +- exit(1); ++ for (unit = 0; ++ (unit < FLASH_MAP_UNIT_MAX && ++ (pflash_drv = drive_get(IF_PFLASH, 0, unit)) != NULL); ++ ++unit) { ++ bdrv = pflash_drv->bdrv; ++ size = bdrv_getlength(bdrv); ++ if (size < 0) { ++ fatal_errmsg = g_strdup_printf("failed to get backing file size"); ++ } else if (size == 0) { ++ fatal_errmsg = g_strdup_printf("PC system firmware (pflash) " ++ "cannot have zero size"); ++ } else if ((size % sector_size) != 0) { ++ fatal_errmsg = g_strdup_printf("PC system firmware (pflash) " ++ "must be a multiple of 0x%x", sector_size); ++ } else if (phys_addr < size || phys_addr - size < FLASH_MAP_BASE_MIN) { ++ fatal_errmsg = g_strdup_printf("oversized backing file, pflash " ++ "segments cannot be mapped under " ++ TARGET_FMT_plx, FLASH_MAP_BASE_MIN); ++ } ++ if (fatal_errmsg != NULL) { ++ Location loc; ++ ++ /* push a new, "none" location on the location stack; overwrite its ++ * contents with the location saved in the option; print the error ++ * (includes location); pop the top ++ */ ++ loc_push_none(&loc); ++ if (pflash_drv->opts != NULL) { ++ qemu_opts_loc_restore(pflash_drv->opts); ++ } ++ error_report("%s", fatal_errmsg); ++ loc_pop(&loc); ++ g_free(fatal_errmsg); ++ exit(1); ++ } ++ ++ phys_addr -= size; ++ ++ /* pflash_cfi01_register() creates a deep copy of the name */ ++ snprintf(name, sizeof name, "system.flash%d", unit); ++ system_flash = pflash_cfi01_register(phys_addr, NULL /* qdev */, name, ++ size, bdrv, sector_size, ++ size >> sector_bits, ++ 1 /* width */, ++ 0x0000 /* id0 */, ++ 0x0000 /* id1 */, ++ 0x0000 /* id2 */, ++ 0x0000 /* id3 */, ++ 0 /* be */); ++ if (unit == 0) { ++ flash_mem = pflash_cfi01_get_memory(system_flash); ++ pc_isa_bios_init(rom_memory, flash_mem, size); ++ } + } +- +- phys_addr = 0x100000000ULL - size; +- system_flash = pflash_cfi01_register(phys_addr, NULL, "system.flash", size, +- bdrv, sector_size, size >> sector_bits, +- 1, 0x0000, 0x0000, 0x0000, 0x0000, 0); +- flash_mem = pflash_cfi01_get_memory(system_flash); +- +- pc_isa_bios_init(rom_memory, flash_mem, size); + } + + static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) +@@ -181,5 +248,5 @@ void pc_system_firmware_init(MemoryRegion *rom_memory, bool isapc_ram_fw) + exit(1); + } + +- pc_system_flash_init(rom_memory, pflash_drv); ++ pc_system_flash_init(rom_memory); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-hw-i386-regenerate-checked-in-AML-payload-RHEL-only.patch b/SOURCES/kvm-hw-i386-regenerate-checked-in-AML-payload-RHEL-only.patch new file mode 100644 index 0000000..e591156 --- /dev/null +++ b/SOURCES/kvm-hw-i386-regenerate-checked-in-AML-payload-RHEL-only.patch @@ -0,0 +1,179 @@ +From 436e7a406724efa98d05d4c32cae027f31a66033 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 23 Sep 2016 14:39:35 -0300 +Subject: [PATCH 1/2] hw/i386: regenerate checked-in AML payload (RHEL only) + +RH-Author: Laszlo Ersek +Message-id: <20160923143936.25594-2-lersek@redhat.com> +Patchwork-id: 72414 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/2] hw/i386: regenerate checked-in AML payload (RHEL only) +Bugzilla: 1377087 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Igor Mammedov + +In preparation for the next patch, which will flip the build from IASL to +pre-generated AML, rebuild the checked-in AML content, with the last iasl +version that's known -- from Brew -- to generate good AML, namely +"acpica-tools-20150619-3.el7.x86_64". + +Only checksums and likely some metadata change in the AML payload. This +proves that our checked-in files have been up to date, and it's safe to +switch the build to them. I actually verified this in a RHEL-7 guest, with +"acpidump -b" and "iasl -d" -- the dumped and disassembled DSL files +remained identical across this change. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Danilo C. L. de Paula +--- + hw/i386/acpi-dsdt.hex.generated | 8 ++++---- + hw/i386/q35-acpi-dsdt.hex.generated | 8 ++++---- + hw/i386/ssdt-misc.hex.generated | 8 ++++---- + hw/i386/ssdt-pcihp.hex.generated | 8 ++++---- + hw/i386/ssdt-proc.hex.generated | 12 ++++++------ + 5 files changed, 22 insertions(+), 22 deletions(-) + +diff --git a/hw/i386/acpi-dsdt.hex.generated b/hw/i386/acpi-dsdt.hex.generated +index 2c01107..b2af8d0 100644 +--- a/hw/i386/acpi-dsdt.hex.generated ++++ b/hw/i386/acpi-dsdt.hex.generated +@@ -8,7 +8,7 @@ static unsigned char AcpiDsdtAmlCode[] = { + 0x0, + 0x0, + 0x1, +-0xe0, ++0xea, + 0x42, + 0x58, + 0x50, +@@ -31,9 +31,9 @@ static unsigned char AcpiDsdtAmlCode[] = { + 0x4e, + 0x54, + 0x4c, +-0x23, +-0x8, +-0x13, ++0x19, ++0x6, ++0x15, + 0x20, + 0x10, + 0x49, +diff --git a/hw/i386/q35-acpi-dsdt.hex.generated b/hw/i386/q35-acpi-dsdt.hex.generated +index 32c16ff..23ab305 100644 +--- a/hw/i386/q35-acpi-dsdt.hex.generated ++++ b/hw/i386/q35-acpi-dsdt.hex.generated +@@ -8,7 +8,7 @@ static unsigned char Q35AcpiDsdtAmlCode[] = { + 0x0, + 0x0, + 0x1, +-0x6, ++0x10, + 0x42, + 0x58, + 0x50, +@@ -31,9 +31,9 @@ static unsigned char Q35AcpiDsdtAmlCode[] = { + 0x4e, + 0x54, + 0x4c, +-0x23, +-0x8, +-0x13, ++0x19, ++0x6, ++0x15, + 0x20, + 0x10, + 0x49, +diff --git a/hw/i386/ssdt-misc.hex.generated b/hw/i386/ssdt-misc.hex.generated +index 55e3bd2..86c5725 100644 +--- a/hw/i386/ssdt-misc.hex.generated ++++ b/hw/i386/ssdt-misc.hex.generated +@@ -23,7 +23,7 @@ static unsigned char ssdp_misc_aml[] = { + 0x0, + 0x0, + 0x1, +-0x76, ++0x80, + 0x42, + 0x58, + 0x50, +@@ -46,9 +46,9 @@ static unsigned char ssdp_misc_aml[] = { + 0x4e, + 0x54, + 0x4c, +-0x23, +-0x8, +-0x13, ++0x19, ++0x6, ++0x15, + 0x20, + 0x10, + 0x42, +diff --git a/hw/i386/ssdt-pcihp.hex.generated b/hw/i386/ssdt-pcihp.hex.generated +index b3c2cd5..2f946d5 100644 +--- a/hw/i386/ssdt-pcihp.hex.generated ++++ b/hw/i386/ssdt-pcihp.hex.generated +@@ -17,7 +17,7 @@ static unsigned char ssdp_pcihp_aml[] = { + 0x0, + 0x0, + 0x1, +-0x76, ++0x80, + 0x42, + 0x58, + 0x50, +@@ -40,9 +40,9 @@ static unsigned char ssdp_pcihp_aml[] = { + 0x4e, + 0x54, + 0x4c, +-0x23, +-0x8, +-0x13, ++0x19, ++0x6, ++0x15, + 0x20, + 0x10, + 0x33, +diff --git a/hw/i386/ssdt-proc.hex.generated b/hw/i386/ssdt-proc.hex.generated +index bb9920d..1b4118a 100644 +--- a/hw/i386/ssdt-proc.hex.generated ++++ b/hw/i386/ssdt-proc.hex.generated +@@ -11,7 +11,7 @@ static unsigned char ssdp_proc_aml[] = { + 0x0, + 0x0, + 0x1, +-0xb8, ++0x82, + 0x42, + 0x58, + 0x50, +@@ -34,9 +34,9 @@ static unsigned char ssdp_proc_aml[] = { + 0x4e, + 0x54, + 0x4c, +-0x23, +-0x8, +-0x13, ++0x19, ++0x6, ++0x15, + 0x20, + 0x5b, + 0x83, +@@ -47,8 +47,8 @@ static unsigned char ssdp_proc_aml[] = { + 0x41, + 0x41, + 0xaa, +-0x10, +-0xb0, ++0x0, ++0x0, + 0x0, + 0x0, + 0x0, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-import-bitmap-operations-in-qdev-core-header.patch b/SOURCES/kvm-hw-import-bitmap-operations-in-qdev-core-header.patch new file mode 100644 index 0000000..5c52564 --- /dev/null +++ b/SOURCES/kvm-hw-import-bitmap-operations-in-qdev-core-header.patch @@ -0,0 +1,117 @@ +From 7d299e618bd3833b3874619d7b9b18b65dcc63e2 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:07 +0100 +Subject: [PATCH 31/81] hw: import bitmap operations in qdev-core header + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 55528 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 02/17] hw: import bitmap operations in qdev-core header +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Marcel Apfelbaum + +Made small tweaks in code to prevent compilation issues +when importing qemu/bitmap.h in qdev-core + +Signed-off-by: Marcel Apfelbaum +Message-id: 1375107465-25767-2-git-send-email-marcel.a@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 949fc82314cc84162e64a5323764527a542421ce) +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + hw/core/qdev-properties.c | 13 +++++++------ + hw/net/eepro100.c | 2 +- + include/hw/qdev-core.h | 1 + + 3 files changed, 9 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/core/qdev-properties.c | 13 +++++++------ + hw/net/eepro100.c | 2 +- + include/hw/qdev-core.h | 1 + + 3 files changed, 9 insertions(+), 7 deletions(-) + +diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c +index 3a324fb..6e1ed1e 100644 +--- a/hw/core/qdev-properties.c ++++ b/hw/core/qdev-properties.c +@@ -74,13 +74,14 @@ static void bit_prop_set(DeviceState *dev, Property *props, bool val) + } + } + +-static int print_bit(DeviceState *dev, Property *prop, char *dest, size_t len) ++static int prop_print_bit(DeviceState *dev, Property *prop, char *dest, ++ size_t len) + { + uint32_t *p = qdev_get_prop_ptr(dev, prop); + return snprintf(dest, len, (*p & qdev_get_prop_mask(prop)) ? "on" : "off"); + } + +-static void get_bit(Object *obj, Visitor *v, void *opaque, ++static void prop_get_bit(Object *obj, Visitor *v, void *opaque, + const char *name, Error **errp) + { + DeviceState *dev = DEVICE(obj); +@@ -91,7 +92,7 @@ static void get_bit(Object *obj, Visitor *v, void *opaque, + visit_type_bool(v, &value, name, errp); + } + +-static void set_bit(Object *obj, Visitor *v, void *opaque, ++static void prop_set_bit(Object *obj, Visitor *v, void *opaque, + const char *name, Error **errp) + { + DeviceState *dev = DEVICE(obj); +@@ -115,9 +116,9 @@ static void set_bit(Object *obj, Visitor *v, void *opaque, + PropertyInfo qdev_prop_bit = { + .name = "boolean", + .legacy_name = "on/off", +- .print = print_bit, +- .get = get_bit, +- .set = set_bit, ++ .print = prop_print_bit, ++ .get = prop_get_bit, ++ .set = prop_set_bit, + }; + + /* --- bool --- */ +diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c +index dc99ea6..b69cc60 100644 +--- a/hw/net/eepro100.c ++++ b/hw/net/eepro100.c +@@ -47,6 +47,7 @@ + #include "hw/nvram/eeprom93xx.h" + #include "sysemu/sysemu.h" + #include "sysemu/dma.h" ++#include "qemu/bitops.h" + + /* QEMU sends frames smaller than 60 bytes to ethernet nics. + * Such frames are rejected by real nics and their emulations. +@@ -105,7 +106,6 @@ + #define PCI_IO_SIZE 64 + #define PCI_FLASH_SIZE (128 * KiB) + +-#define BIT(n) (1 << (n)) + #define BITS(n, m) (((0xffffffffU << (31 - n)) >> (31 - n + m)) << m) + + /* The SCB accepts the following controls for the Tx and Rx units: */ +diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h +index cf83d54..9d995bf 100644 +--- a/include/hw/qdev-core.h ++++ b/include/hw/qdev-core.h +@@ -4,6 +4,7 @@ + #include "qemu/queue.h" + #include "qemu/option.h" + #include "qemu/typedefs.h" ++#include "qemu/bitmap.h" + #include "qom/object.h" + #include "hw/irq.h" + #include "qapi/error.h" +-- +1.7.1 + diff --git a/SOURCES/kvm-hw-input-hid.c-Fix-capslock-hid-code.patch b/SOURCES/kvm-hw-input-hid.c-Fix-capslock-hid-code.patch new file mode 100644 index 0000000..4a15536 --- /dev/null +++ b/SOURCES/kvm-hw-input-hid.c-Fix-capslock-hid-code.patch @@ -0,0 +1,50 @@ +From 61ecb3c995018bc9ec901d376004c1d092d166ff Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 1 Jun 2016 12:24:01 +0200 +Subject: [PATCH 1/3] hw/input/hid.c Fix capslock hid code + +RH-Author: Gerd Hoffmann +Message-id: <1464783841-27701-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 70522 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] hw/input/hid.c Fix capslock hid code +Bugzilla: 1256741 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth + +From: Dinar Valeev + +When ever USB keyboard is used, e.g. '-usbdevice keyboard' pressing +caps lock key send 0x32 hid code, which is treated as backslash. +Instead it should be 0x39 code. This affects sending uppercase keys, +as they typed whith caps lock active. + +While on x86 this can be workarounded by using ps/2 protocol. On +Power it is crusial as we don't have anything else than USB. + +This is fixes guest automation tasts over vnc. + +Signed-off-by: Dinar Valeev +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 0ee4de5840ccc1072459ec68062bfb63c888a94d) +Signed-off-by: Miroslav Rezanina +--- + hw/input/hid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/input/hid.c b/hw/input/hid.c +index 14b3125..db45c89 100644 +--- a/hw/input/hid.c ++++ b/hw/input/hid.c +@@ -41,7 +41,7 @@ static const uint8_t hid_usage_keys[0x100] = { + 0x07, 0x09, 0x0a, 0x0b, 0x0d, 0x0e, 0x0f, 0x33, + 0x34, 0x35, 0xe1, 0x31, 0x1d, 0x1b, 0x06, 0x19, + 0x05, 0x11, 0x10, 0x36, 0x37, 0x38, 0xe5, 0x55, +- 0xe2, 0x2c, 0x32, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, ++ 0xe2, 0x2c, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x41, 0x42, 0x43, 0x53, 0x47, 0x5f, + 0x60, 0x61, 0x56, 0x5c, 0x5d, 0x5e, 0x57, 0x59, + 0x5a, 0x5b, 0x62, 0x63, 0x00, 0x00, 0x00, 0x44, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-misc-add-vmcoreinfo-device.patch b/SOURCES/kvm-hw-misc-add-vmcoreinfo-device.patch new file mode 100644 index 0000000..4b83a2d --- /dev/null +++ b/SOURCES/kvm-hw-misc-add-vmcoreinfo-device.patch @@ -0,0 +1,262 @@ +From 8d7f958d14fa739c64436d0926bc712eaa63fe14 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:43 +0100 +Subject: [PATCH 12/41] hw/misc: add vmcoreinfo device +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-13-marcandre.lureau@redhat.com> +Patchwork-id: 78362 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 12/41] hw/misc: add vmcoreinfo device +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +See docs/specs/vmcoreinfo.txt for details. + +"etc/vmcoreinfo" fw_cfg entry is added when using "-device vmcoreinfo". + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit 6e43353f10c6688060af0bc26bdfdd4cf9c96ea2) + +RHEL: adapted to qemu 1.5 API. + +FWCfgState is not exposed, use object_property_get_bool() instead. + +DeviceClass.hotpluggable doesn't exist. Not important since libvirt +shouldn't allow or do 'device_add vmcoreinfo'. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + docs/specs/vmcoreinfo.txt | 41 +++++++++++++++++++ + hw/misc/Makefile.objs | 1 + + hw/misc/vmcoreinfo.c | 96 ++++++++++++++++++++++++++++++++++++++++++++ + include/hw/misc/vmcoreinfo.h | 46 +++++++++++++++++++++ + 4 files changed, 184 insertions(+) + create mode 100644 docs/specs/vmcoreinfo.txt + create mode 100644 hw/misc/vmcoreinfo.c + create mode 100644 include/hw/misc/vmcoreinfo.h + +diff --git a/docs/specs/vmcoreinfo.txt b/docs/specs/vmcoreinfo.txt +new file mode 100644 +index 0000000..2868a77 +--- /dev/null ++++ b/docs/specs/vmcoreinfo.txt +@@ -0,0 +1,41 @@ ++================= ++VMCoreInfo device ++================= ++ ++The `-device vmcoreinfo` will create a fw_cfg entry for a guest to ++store dump details. ++ ++etc/vmcoreinfo ++************** ++ ++A guest may use this fw_cfg entry to add information details to qemu ++dumps. ++ ++The entry of 16 bytes has the following layout, in little-endian:: ++ ++#define VMCOREINFO_FORMAT_NONE 0x0 ++#define VMCOREINFO_FORMAT_ELF 0x1 ++ ++ struct FWCfgVMCoreInfo { ++ uint16_t host_format; /* formats host supports */ ++ uint16_t guest_format; /* format guest supplies */ ++ uint32_t size; /* size of vmcoreinfo region */ ++ uint64_t paddr; /* physical address of vmcoreinfo region */ ++ }; ++ ++Only full write (of 16 bytes) are considered valid for further ++processing of entry values. ++ ++A write of 0 in guest_format will disable further processing of ++vmcoreinfo entry values & content. ++ ++Format & content ++**************** ++ ++As of qemu 2.11, only VMCOREINFO_FORMAT_ELF is supported. ++ ++The entry gives location and size of an ELF note that is appended in ++qemu dumps. ++ ++The note format/class must be of the target bitness and the size must ++be less than 1Mb. +diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs +index cd3123b..39b6593 100644 +--- a/hw/misc/Makefile.objs ++++ b/hw/misc/Makefile.objs +@@ -5,6 +5,7 @@ common-obj-$(CONFIG_ISA_DEBUG) += debugexit.o + common-obj-$(CONFIG_SGA) += sga.o + common-obj-$(CONFIG_ISA_TESTDEV) += pc-testdev.o + common-obj-$(CONFIG_PCI_TESTDEV) += pci-testdev.o ++common-obj-y += vmcoreinfo.o + + obj-$(CONFIG_VMPORT) += vmport.o + +diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c +new file mode 100644 +index 0000000..1bf6735 +--- /dev/null ++++ b/hw/misc/vmcoreinfo.c +@@ -0,0 +1,96 @@ ++/* ++ * Virtual Machine coreinfo device ++ * ++ * Copyright (C) 2017 Red Hat, Inc. ++ * ++ * Authors: Marc-André Lureau ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ * ++ */ ++#include "qemu/osdep.h" ++#include "qapi/error.h" ++#include "hw/nvram/fw_cfg.h" ++#include "hw/misc/vmcoreinfo.h" ++ ++static void fw_cfg_vmci_write(void *dev, off_t offset, size_t len) ++{ ++ VMCoreInfoState *s = VMCOREINFO(dev); ++ ++ s->has_vmcoreinfo = offset == 0 && len == sizeof(s->vmcoreinfo) ++ && s->vmcoreinfo.guest_format != VMCOREINFO_FORMAT_NONE; ++} ++ ++static void vmcoreinfo_reset(void *dev) ++{ ++ VMCoreInfoState *s = VMCOREINFO(dev); ++ ++ s->has_vmcoreinfo = false; ++ memset(&s->vmcoreinfo, 0, sizeof(s->vmcoreinfo)); ++ s->vmcoreinfo.host_format = cpu_to_le16(VMCOREINFO_FORMAT_ELF); ++} ++ ++static void vmcoreinfo_realize(DeviceState *dev, Error **errp) ++{ ++ VMCoreInfoState *s = VMCOREINFO(dev); ++ FWCfgState *fw_cfg = fw_cfg_find(); ++ ++ /* Given that this function is executing, there is at least one VMCOREINFO ++ * device. Check if there are several. ++ */ ++ if (!vmcoreinfo_find()) { ++ error_setg(errp, "at most one %s device is permitted", ++ VMCOREINFO_DEVICE); ++ return; ++ } ++ ++ if (!fw_cfg || !object_property_get_bool(OBJECT(fw_cfg), "dma_enabled", NULL)) { ++ error_setg(errp, "%s device requires fw_cfg with DMA", ++ VMCOREINFO_DEVICE); ++ return; ++ } ++ ++ fw_cfg_add_file_callback(fw_cfg, "etc/vmcoreinfo", ++ NULL, fw_cfg_vmci_write, s, ++ &s->vmcoreinfo, sizeof(s->vmcoreinfo), ++ false); ++ ++ qemu_register_reset(vmcoreinfo_reset, dev); ++} ++ ++static const VMStateDescription vmstate_vmcoreinfo = { ++ .name = "vmcoreinfo", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_BOOL(has_vmcoreinfo, VMCoreInfoState), ++ VMSTATE_UINT16(vmcoreinfo.host_format, VMCoreInfoState), ++ VMSTATE_UINT16(vmcoreinfo.guest_format, VMCoreInfoState), ++ VMSTATE_UINT32(vmcoreinfo.size, VMCoreInfoState), ++ VMSTATE_UINT64(vmcoreinfo.paddr, VMCoreInfoState), ++ VMSTATE_END_OF_LIST() ++ }, ++}; ++ ++static void vmcoreinfo_device_class_init(ObjectClass *klass, void *data) ++{ ++ DeviceClass *dc = DEVICE_CLASS(klass); ++ ++ dc->vmsd = &vmstate_vmcoreinfo; ++ dc->realize = vmcoreinfo_realize; ++} ++ ++static const TypeInfo vmcoreinfo_device_info = { ++ .name = VMCOREINFO_DEVICE, ++ .parent = TYPE_DEVICE, ++ .instance_size = sizeof(VMCoreInfoState), ++ .class_init = vmcoreinfo_device_class_init, ++}; ++ ++static void vmcoreinfo_register_types(void) ++{ ++ type_register_static(&vmcoreinfo_device_info); ++} ++ ++type_init(vmcoreinfo_register_types) +diff --git a/include/hw/misc/vmcoreinfo.h b/include/hw/misc/vmcoreinfo.h +new file mode 100644 +index 0000000..c3aa856 +--- /dev/null ++++ b/include/hw/misc/vmcoreinfo.h +@@ -0,0 +1,46 @@ ++/* ++ * Virtual Machine coreinfo device ++ * ++ * Copyright (C) 2017 Red Hat, Inc. ++ * ++ * Authors: Marc-André Lureau ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ * ++ */ ++#ifndef VMCOREINFO_H ++#define VMCOREINFO_H ++ ++#include "hw/qdev.h" ++ ++#define VMCOREINFO_DEVICE "vmcoreinfo" ++#define VMCOREINFO(obj) OBJECT_CHECK(VMCoreInfoState, (obj), VMCOREINFO_DEVICE) ++ ++#define VMCOREINFO_FORMAT_NONE 0x0 ++#define VMCOREINFO_FORMAT_ELF 0x1 ++ ++/* all fields are little-endian */ ++typedef struct FWCfgVMCoreInfo { ++ uint16_t host_format; /* set on reset */ ++ uint16_t guest_format; ++ uint32_t size; ++ uint64_t paddr; ++} QEMU_PACKED FWCfgVMCoreInfo; ++ ++typedef struct VMCoreInfoState { ++ DeviceClass parent_obj; ++ ++ bool has_vmcoreinfo; ++ FWCfgVMCoreInfo vmcoreinfo; ++} VMCoreInfoState; ++ ++/* returns NULL unless there is exactly one device */ ++static inline VMCoreInfoState *vmcoreinfo_find(void) ++{ ++ Object *o = object_resolve_path_type("", VMCOREINFO_DEVICE, NULL); ++ ++ return o ? VMCOREINFO(o) : NULL; ++} ++ ++#endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-misc-don-t-create-pvpanic-device-by-default.patch b/SOURCES/kvm-hw-misc-don-t-create-pvpanic-device-by-default.patch new file mode 100644 index 0000000..db7cee6 --- /dev/null +++ b/SOURCES/kvm-hw-misc-don-t-create-pvpanic-device-by-default.patch @@ -0,0 +1,207 @@ +From 45dc4ec297fdb6ba95e7a8c1f3d904fe88b0e282 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:37 +0100 +Subject: [PATCH 78/81] hw/misc: don't create pvpanic device by default + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-10-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55554 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 9/9] hw/misc: don't create pvpanic device by default +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +We don't need compatibility with 1.5 so we can simply +revert the patch creating it by default. + +This patch: + - reverts "pvpanic: create pvpanic by default for machine 1.5" + - removes cannot_instantiate_with_device_add_yet flag + +Closest upstream commit (currently in qemu-devl-list): + [Qemu-devel] [PATCH v2 1.7] pc: get rid of builtin pvpanic for "-M pc-1.5" + +Related upstream commit: + commit 7f3e341a008c585deed174eaf1f826c88c67948a + Author: Marcel Apfelbaum + Date: Sun Aug 11 18:10:42 2013 +0300 + + hw/misc: don't create pvpanic device by default + + This patch is based on Hu Tao's: + http://lists.nongnu.org/archive/html/qemu-devel/2013-08/msg00124.html + + No need to hard-code pvpanic as part of the machine. + It can be added with "-device pvpanic" from command line (The next patch). + Anyway, for backport compatibility it is still part of 1.5 + machine. + + Signed-off-by: Marcel Apfelbaum + Reviewed-by: Hu Tao + Message-id: 1376233843-19410-2-git-send-email-marcel.a@redhat.com + Signed-off-by: Anthony Liguori + +losest upstream patch: + +Signed-off-by: Marcel Apfelbaum +--- + hw/i386/pc_piix.c | 12 ------------ + hw/i386/pc_q35.c | 6 ------ + hw/misc/pvpanic.c | 11 ----------- + 3 files changed, 29 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 12 ------------ + hw/i386/pc_q35.c | 6 ------ + hw/misc/pvpanic.c | 11 ----------- + 3 files changed, 0 insertions(+), 29 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 825a5b1..2d8e79f 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -57,7 +57,6 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 }; + static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; + static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + +-static bool has_pvpanic = true; + static bool smbios_type1_defaults = true; + + /* PC hardware initialisation */ +@@ -227,10 +226,6 @@ static void pc_init1(QEMUMachineInitArgs *args, + if (pci_enabled) { + pc_pci_device_init(pci_bus); + } +- +- if (has_pvpanic) { +- pvpanic_init(isa_bus); +- } + } + + static void pc_init_pci(QEMUMachineInitArgs *args) +@@ -242,7 +237,6 @@ static void pc_init_pci(QEMUMachineInitArgs *args) + + static void pc_init_pci_1_4(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); + pc_init_pci(args); +@@ -251,7 +245,6 @@ static void pc_init_pci_1_4(QEMUMachineInitArgs *args) + static void pc_init_pci_1_3(QEMUMachineInitArgs *args) + { + enable_compat_apic_id_mode(); +- has_pvpanic = false; + pc_init_pci(args); + } + +@@ -260,7 +253,6 @@ static void pc_init_pci_1_2(QEMUMachineInitArgs *args) + { + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); +- has_pvpanic = false; + pc_init_pci(args); + } + +@@ -269,14 +261,12 @@ static void pc_init_pci_1_0(QEMUMachineInitArgs *args) + { + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); +- has_pvpanic = false; + pc_init_pci(args); + } + + /* PC init function for pc-0.10 to pc-0.13, and reused by xenfv */ + static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); + pc_init1(args, get_system_memory(), get_system_io(), 1, 0); +@@ -284,7 +274,6 @@ static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args) + + static void pc_init_isa(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; + if (!args->cpu_model) { + args->cpu_model = "486"; + } +@@ -931,7 +920,6 @@ static QEMUMachine pc_machine_rhel650 = { + + static void pc_init_rhel640(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; + x86_cpu_compat_set_features(NULL, FEAT_1_EDX, 0, CPUID_SEP); + pc_init_rhel650(args); + } +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 64995ac..f308098 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -47,7 +47,6 @@ + /* ICH9 AHCI has 6 ports */ + #define MAX_SATA_PORTS 6 + +-static bool has_pvpanic = true; + static bool smbios_type1_defaults = true; + + /* PC hardware initialisation */ +@@ -205,17 +204,12 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + if (pci_enabled) { + pc_pci_device_init(host_bus); + } +- +- if (has_pvpanic) { +- pvpanic_init(isa_bus); +- } + } + + #if 0 /* Disabled for Red Hat Enterprise Linux */ + + static void pc_q35_init_1_4(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); + pc_q35_init(args); +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index 1d3178d..1838bc7 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -19,7 +19,6 @@ + #include "qemu/log.h" + + #include "hw/nvram/fw_cfg.h" +-#include "hw/i386/pc.h" + + /* The bit of supported pv event */ + #define PVPANIC_F_PANICKED 0 +@@ -108,11 +107,6 @@ static int pvpanic_isa_initfn(ISADevice *dev) + return 0; + } + +-void pvpanic_init(ISABus *bus) +-{ +- isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE); +-} +- + static Property pvpanic_isa_properties[] = { + DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505), + DEFINE_PROP_END_OF_LIST(), +@@ -125,11 +119,6 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data) + + ic->init = pvpanic_isa_initfn; + dc->props = pvpanic_isa_properties; +- /* +- * To be dropped in future backport of commit a5d3f64 "hw/misc: +- * make pvpanic known to user": +- */ +- dc->cannot_instantiate_with_device_add_yet = true; + } + + static TypeInfo pvpanic_isa_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-hw-misc-make-pvpanic-known-to-user.patch b/SOURCES/kvm-hw-misc-make-pvpanic-known-to-user.patch new file mode 100644 index 0000000..c67e357 --- /dev/null +++ b/SOURCES/kvm-hw-misc-make-pvpanic-known-to-user.patch @@ -0,0 +1,92 @@ +From b3f60a169126dd6a4ef7c64442494d943f9ffbd2 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:33 +0100 +Subject: [PATCH 74/81] hw/misc: make pvpanic known to user + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-6-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55550 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 5/9] hw/misc: make pvpanic known to user +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +This patch is based on Hu Tao's: +http://lists.nongnu.org/archive/html/qemu-devel/2013-08/msg00125.html + +The pvpanic device may be enabled now with "-device pvpanic" +from command line. + +Signed-off-by: Marcel Apfelbaum +Reviewed-by: Hu Tao +Message-id: 1376233843-19410-3-git-send-email-marcel.a@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit a5d3f640a0fa56eaed712c9361150568e32e1d08) +Signed-off-by: Marcel Apfelbaum + +Conflicts: + hw/misc/pvpanic.c + +Signed-off-by: Marcel Apfelbaum +--- + hw/misc/pvpanic.c | 28 ++++++++++++---------------- + 1 file changed, 12 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/pvpanic.c | 28 ++++++++++++---------------- + 1 files changed, 12 insertions(+), 16 deletions(-) + +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index 1aab787..1d3178d 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -89,32 +89,28 @@ static const MemoryRegionOps pvpanic_ops = { + static int pvpanic_isa_initfn(ISADevice *dev) + { + PVPanicState *s = ISA_PVPANIC_DEVICE(dev); ++ FWCfgState *fw_cfg = fw_cfg_find(); ++ uint16_t *pvpanic_port; + +- memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1); +- isa_register_ioport(dev, &s->io, s->ioport); ++ if (!fw_cfg) { ++ return -1; ++ } + +- return 0; +-} ++ memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1); + +-static void pvpanic_fw_cfg(ISADevice *dev, FWCfgState *fw_cfg) +-{ +- PVPanicState *s = ISA_PVPANIC_DEVICE(dev); +- uint16_t *pvpanic_port = g_malloc(sizeof(*pvpanic_port)); ++ pvpanic_port = g_malloc(sizeof(*pvpanic_port)); + *pvpanic_port = cpu_to_le16(s->ioport); +- + fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", pvpanic_port, + sizeof(*pvpanic_port)); ++ ++ isa_register_ioport(dev, &s->io, s->ioport); ++ ++ return 0; + } + + void pvpanic_init(ISABus *bus) + { +- ISADevice *dev; +- FWCfgState *fw_cfg = fw_cfg_find(); +- if (!fw_cfg) { +- return; +- } +- dev = isa_create_simple (bus, TYPE_ISA_PVPANIC_DEVICE); +- pvpanic_fw_cfg(dev, fw_cfg); ++ isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE); + } + + static Property pvpanic_isa_properties[] = { +-- +1.7.1 + diff --git a/SOURCES/kvm-hw-pci-fix-error-flow-in-pci-multifunction-init.patch b/SOURCES/kvm-hw-pci-fix-error-flow-in-pci-multifunction-init.patch new file mode 100644 index 0000000..297706c --- /dev/null +++ b/SOURCES/kvm-hw-pci-fix-error-flow-in-pci-multifunction-init.patch @@ -0,0 +1,113 @@ +From e346f15b5c72e3cf58fbf1af4a89c929dea783ad Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Tue, 28 Oct 2014 14:13:15 +0100 +Subject: [PATCH 2/9] hw/pci: fix error flow in pci multifunction init + +Message-id: <1414505595-17009-1-git-send-email-marcel.a@redhat.com> +Patchwork-id: 61953 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] hw/pci: fix error flow in pci multifunction init +Bugzilla: 1049734 +RH-Acked-by: Amos Kong +RH-Acked-by: Markus Armbruster +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1049734 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=8164686 +Upstream-status: 306077640a652e090779498aadbeb0c605feaacd + +Scenario: + - There is a non multifunction pci device A on 00:0X.0. + - Hot-plug another multifunction pci device B at 00:0X.1. + - The operation will fail of course. + - Try to hot-plug the B device 2-3 more times, qemu will crash. + +Reason: The error flow leaves the B's address space into global address spaces +list, but the device object is freed. Fixed that. + +Signed-off-by: Marcel Apfelbaum +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 306077640a652e090779498aadbeb0c605feaacd) +Signed-off-by: Marcel Apfelbaum +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/pci/pci.c + - The patch moves a function within a file and the function's + content is different from upstream. + - The upstream does not call anymore to qemu_free_irqs, but + the downstream version still does. We need to check that + the irq is allocated before calling it. + +scripts/git-backport-diff: + 001/1:[0021] [FC] 'hw/pci: fix error flow in pci multifunction init' + +Signed-off-by: Marcel Apfelbaum +--- + hw/pci/pci.c | 33 ++++++++++++++++++--------------- + 1 file changed, 18 insertions(+), 15 deletions(-) +--- + hw/pci/pci.c | 33 ++++++++++++++++++--------------- + 1 file changed, 18 insertions(+), 15 deletions(-) + +diff --git a/hw/pci/pci.c b/hw/pci/pci.c +index d166ab0..703b111 100644 +--- a/hw/pci/pci.c ++++ b/hw/pci/pci.c +@@ -784,6 +784,23 @@ static void pci_config_free(PCIDevice *pci_dev) + g_free(pci_dev->used); + } + ++static void do_pci_unregister_device(PCIDevice *pci_dev) ++{ ++ if (pci_dev->irq) { ++ qemu_free_irqs(pci_dev->irq); ++ } ++ ++ pci_dev->bus->devices[pci_dev->devfn] = NULL; ++ pci_config_free(pci_dev); ++ ++ if (!pci_dev->bus->dma_context_fn) { ++ address_space_destroy(&pci_dev->bus_master_as); ++ memory_region_destroy(&pci_dev->bus_master_enable_region); ++ g_free(pci_dev->dma); ++ pci_dev->dma = NULL; ++ } ++} ++ + /* -1 for devfn means auto assign */ + static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, + const char *name, int devfn) +@@ -852,7 +869,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, + pci_init_mask_bridge(pci_dev); + } + if (pci_init_multifunction(bus, pci_dev)) { +- pci_config_free(pci_dev); ++ do_pci_unregister_device(pci_dev); + return NULL; + } + +@@ -868,20 +885,6 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, + return pci_dev; + } + +-static void do_pci_unregister_device(PCIDevice *pci_dev) +-{ +- qemu_free_irqs(pci_dev->irq); +- pci_dev->bus->devices[pci_dev->devfn] = NULL; +- pci_config_free(pci_dev); +- +- if (!pci_dev->bus->dma_context_fn) { +- address_space_destroy(&pci_dev->bus_master_as); +- memory_region_destroy(&pci_dev->bus_master_enable_region); +- g_free(pci_dev->dma); +- pci_dev->dma = NULL; +- } +-} +- + static void pci_unregister_io_regions(PCIDevice *pci_dev) + { + PCIIORegion *r; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-pci-fixed-error-flow-in-pci_qdev_init.patch b/SOURCES/kvm-hw-pci-fixed-error-flow-in-pci_qdev_init.patch new file mode 100644 index 0000000..37797e0 --- /dev/null +++ b/SOURCES/kvm-hw-pci-fixed-error-flow-in-pci_qdev_init.patch @@ -0,0 +1,48 @@ +From 041c25ce0ca658d4426ec18a116a464e4bac9862 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Thu, 20 Nov 2014 10:33:13 +0100 +Subject: [PATCH 1/2] hw/pci: fixed error flow in pci_qdev_init + +Message-id: <1416479594-22022-2-git-send-email-marcel.a@redhat.com> +Patchwork-id: 62484 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/2] hw/pci: fixed error flow in pci_qdev_init +Bugzilla: 1046007 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Amos Kong +RH-Acked-by: Eric Blake +RH-Acked-by: Markus Armbruster + +Verify return code for pci_add_option_rom. + +Signed-off-by: Marcel Apfelbaum +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Markus Armbruster +(cherry picked from commit 178e785fb4507ec3462dc772bbe08303416ece47) +Signed-off-by: Marcel Apfelbaum +Signed-off-by: Miroslav Rezanina +--- + hw/pci/pci.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/hw/pci/pci.c b/hw/pci/pci.c +index 703b111..0918f4e 100644 +--- a/hw/pci/pci.c ++++ b/hw/pci/pci.c +@@ -1733,7 +1733,12 @@ static int pci_qdev_init(DeviceState *qdev) + pci_dev->romfile = g_strdup(pc->romfile); + is_default_rom = true; + } +- pci_add_option_rom(pci_dev, is_default_rom); ++ ++ rc = pci_add_option_rom(pci_dev, is_default_rom); ++ if (rc != 0) { ++ pci_unregister_device(DEVICE(pci_dev)); ++ return rc; ++ } + + if (bus->hotplug) { + /* Let buses differentiate between hotplug and when device is +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-pci-fixed-hotplug-crash-when-using-rombar-0-with-.patch b/SOURCES/kvm-hw-pci-fixed-hotplug-crash-when-using-rombar-0-with-.patch new file mode 100644 index 0000000..04f3711 --- /dev/null +++ b/SOURCES/kvm-hw-pci-fixed-hotplug-crash-when-using-rombar-0-with-.patch @@ -0,0 +1,52 @@ +From bdd21901f9f1f10de38611d3b2b36e6e3d20fbd4 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Thu, 20 Nov 2014 10:33:14 +0100 +Subject: [PATCH 2/2] hw/pci: fixed hotplug crash when using rombar=0 with + devices having romfile + +Message-id: <1416479594-22022-3-git-send-email-marcel.a@redhat.com> +Patchwork-id: 62485 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile +Bugzilla: 1046007 +RH-Acked-by: Amos Kong +RH-Acked-by: Eric Blake +RH-Acked-by: Markus Armbruster + +Hot-plugging a device that has a romfile (either supplied by user +or built-in) using rombar=0 option is a user error, +do not allow the device to be hot-plugged. + +Reviewed-by: Eric Blake +Signed-off-by: Marcel Apfelbaum +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit db80c7b974f4ccab56bd5e8ff2248c7339b00c73) +Signed-off-by: Marcel Apfelbaum +Signed-off-by: Miroslav Rezanina +--- + hw/pci/pci.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/hw/pci/pci.c b/hw/pci/pci.c +index 0918f4e..18773fe 100644 +--- a/hw/pci/pci.c ++++ b/hw/pci/pci.c +@@ -1924,6 +1924,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) + * for 0.11 compatibility. + */ + int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); ++ ++ /* ++ * Hot-plugged devices can't use the option ROM ++ * if the rom bar is disabled. ++ */ ++ if (DEVICE(pdev)->hotplugged) { ++ return -1; ++ } ++ + if (class == 0x0300) { + rom_add_vga(pdev->romfile); + } else { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-pci-pcie_aer.c-fix-buffer-overruns-on-invalid-sta.patch b/SOURCES/kvm-hw-pci-pcie_aer.c-fix-buffer-overruns-on-invalid-sta.patch new file mode 100644 index 0000000..2df11d6 --- /dev/null +++ b/SOURCES/kvm-hw-pci-pcie_aer.c-fix-buffer-overruns-on-invalid-sta.patch @@ -0,0 +1,77 @@ +From 546f9e97d193307a2ca26c11bf1162d07cc2d31f Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:52:59 +0200 +Subject: [PATCH 24/31] hw/pci/pcie_aer.c: fix buffer overruns on invalid state load + +RH-Author: Michael S. Tsirkin +Message-id: <1400057538-6975-6-git-send-email-mst@redhat.com> +Patchwork-id: 58872 +O-Subject: [PATCH qemu-kvm RHEL7.1 5/5] hw/pci/pcie_aer.c: fix buffer overruns on invalid state load +Bugzilla: 1095716 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +4) CVE-2013-4529 +hw/pci/pcie_aer.c pcie aer log can overrun the buffer if log_num is + too large + +There are two issues in this file: +1. log_max from remote can be larger than on local +then buffer will overrun with data coming from state file. +2. log_num can be larger then we get data corruption +again with an overflow but not adversary controlled. + +Fix both issues. + +Reported-by: Anthony Liguori +Reported-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit 5f691ff91d323b6f97c6600405a7f9dc115a0ad1) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095716 +--- + hw/pci/pcie_aer.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/pci/pcie_aer.c | 10 +++++++++- + 1 files changed, 9 insertions(+), 1 deletions(-) + +diff --git a/hw/pci/pcie_aer.c b/hw/pci/pcie_aer.c +index 1ce72ce..ab5c9c6 100644 +--- a/hw/pci/pcie_aer.c ++++ b/hw/pci/pcie_aer.c +@@ -795,6 +795,13 @@ static const VMStateDescription vmstate_pcie_aer_err = { + } + }; + ++static bool pcie_aer_state_log_num_valid(void *opaque, int version_id) ++{ ++ PCIEAERLog *s = opaque; ++ ++ return s->log_num <= s->log_max; ++} ++ + const VMStateDescription vmstate_pcie_aer_log = { + .name = "PCIE_AER_ERROR_LOG", + .version_id = 1, +@@ -802,7 +809,8 @@ const VMStateDescription vmstate_pcie_aer_log = { + .minimum_version_id_old = 1, + .fields = (VMStateField[]) { + VMSTATE_UINT16(log_num, PCIEAERLog), +- VMSTATE_UINT16(log_max, PCIEAERLog), ++ VMSTATE_UINT16_EQUAL(log_max, PCIEAERLog), ++ VMSTATE_VALIDATE("log_num <= log_max", pcie_aer_state_log_num_valid), + VMSTATE_STRUCT_VARRAY_POINTER_UINT16(log, PCIEAERLog, log_num, + vmstate_pcie_aer_err, PCIEAERErr), + VMSTATE_END_OF_LIST() +-- +1.7.1 + diff --git a/SOURCES/kvm-hw-use-ld_p-st_p-instead-of-ld_raw-st_raw.patch b/SOURCES/kvm-hw-use-ld_p-st_p-instead-of-ld_raw-st_raw.patch new file mode 100644 index 0000000..6892a53 --- /dev/null +++ b/SOURCES/kvm-hw-use-ld_p-st_p-instead-of-ld_raw-st_raw.patch @@ -0,0 +1,518 @@ +From 7303beb9c00357762941f602807439512b2b1916 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:14 +0200 +Subject: [PATCH 18/27] hw: use ld_p/st_p instead of ld_raw/st_raw + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-3-kraxel@redhat.com> +Patchwork-id: 76827 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/7] hw: use ld_p/st_p instead of ld_raw/st_raw +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Paolo Bonzini + +The ld_raw and st_raw definitions are only needed in code that +must compile for both user-mode and softmmu emulation. Device +models can use the equivalent ld_p/st_p which are simple +pointer accessors. + +Reviewed-by: Peter Maydell +Signed-off-by: Paolo Bonzini +(cherry picked from commit 0983979b3a5edbff399c092b90c8be6dc656f2a4) + +[ rhel: drop hw/arm/nseries.c chunk ] + +Signed-off-by: Miroslav Rezanina +--- + hw/9pfs/virtio-9p-device.c | 2 +- + hw/block/virtio-blk.c | 12 +-- + hw/display/omap_lcd_template.h | 10 +-- + hw/display/sm501_template.h | 6 +- + hw/display/vga_template.h | 4 +- + hw/mips/mips_fulong2e.c | 28 +++---- + hw/mips/mips_malta.c | 176 ++++++++++++++++++++--------------------- + hw/scsi/vhost-scsi.c | 4 +- + hw/scsi/virtio-scsi.c | 28 +++---- + 9 files changed, 135 insertions(+), 135 deletions(-) + +diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c +index 69d781d..0658b2d 100644 +--- a/hw/9pfs/virtio-9p-device.c ++++ b/hw/9pfs/virtio-9p-device.c +@@ -34,7 +34,7 @@ static void virtio_9p_get_config(VirtIODevice *vdev, uint8_t *config) + + len = strlen(s->tag); + cfg = g_malloc0(sizeof(struct virtio_9p_config) + len); +- stw_raw(&cfg->tag_len, len); ++ stw_p(&cfg->tag_len, len); + /* We don't copy the terminating null to config space */ + memcpy(cfg->tag, s->tag, len); + memcpy(config, cfg, s->config_size); +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index 462ac81..50ada79 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -508,12 +508,12 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config) + + bdrv_get_geometry(s->bs, &capacity); + memset(&blkcfg, 0, sizeof(blkcfg)); +- stq_raw(&blkcfg.capacity, capacity); +- stl_raw(&blkcfg.seg_max, 128 - 2); +- stw_raw(&blkcfg.cylinders, s->conf->cyls); +- stl_raw(&blkcfg.blk_size, blk_size); +- stw_raw(&blkcfg.min_io_size, s->conf->min_io_size / blk_size); +- stw_raw(&blkcfg.opt_io_size, s->conf->opt_io_size / blk_size); ++ stq_p(&blkcfg.capacity, capacity); ++ stl_p(&blkcfg.seg_max, 128 - 2); ++ stw_p(&blkcfg.cylinders, s->conf->cyls); ++ stl_p(&blkcfg.blk_size, blk_size); ++ stw_p(&blkcfg.min_io_size, s->conf->min_io_size / blk_size); ++ stw_p(&blkcfg.opt_io_size, s->conf->opt_io_size / blk_size); + blkcfg.heads = s->conf->heads; + /* + * We must ensure that the block device capacity is a multiple of +diff --git a/hw/display/omap_lcd_template.h b/hw/display/omap_lcd_template.h +index 2fb96f8..e5dd447 100644 +--- a/hw/display/omap_lcd_template.h ++++ b/hw/display/omap_lcd_template.h +@@ -50,7 +50,7 @@ static void glue(draw_line2_, DEPTH)(void *opaque, + uint8_t v, r, g, b; + + do { +- v = ldub_raw((void *) s); ++ v = ldub_p((void *) s); + r = (pal[v & 3] >> 4) & 0xf0; + g = pal[v & 3] & 0xf0; + b = (pal[v & 3] << 4) & 0xf0; +@@ -89,7 +89,7 @@ static void glue(draw_line4_, DEPTH)(void *opaque, + uint8_t v, r, g, b; + + do { +- v = ldub_raw((void *) s); ++ v = ldub_p((void *) s); + r = (pal[v & 0xf] >> 4) & 0xf0; + g = pal[v & 0xf] & 0xf0; + b = (pal[v & 0xf] << 4) & 0xf0; +@@ -116,7 +116,7 @@ static void glue(draw_line8_, DEPTH)(void *opaque, + uint8_t v, r, g, b; + + do { +- v = ldub_raw((void *) s); ++ v = ldub_p((void *) s); + r = (pal[v] >> 4) & 0xf0; + g = pal[v] & 0xf0; + b = (pal[v] << 4) & 0xf0; +@@ -136,7 +136,7 @@ static void glue(draw_line12_, DEPTH)(void *opaque, + uint8_t r, g, b; + + do { +- v = lduw_raw((void *) s); ++ v = lduw_p((void *) s); + r = (v >> 4) & 0xf0; + g = v & 0xf0; + b = (v << 4) & 0xf0; +@@ -159,7 +159,7 @@ static void glue(draw_line16_, DEPTH)(void *opaque, + uint8_t r, g, b; + + do { +- v = lduw_raw((void *) s); ++ v = lduw_p((void *) s); + r = (v >> 8) & 0xf8; + g = (v >> 3) & 0xfc; + b = (v << 3) & 0xf8; +diff --git a/hw/display/sm501_template.h b/hw/display/sm501_template.h +index 2d4a3d8..87374f5 100644 +--- a/hw/display/sm501_template.h ++++ b/hw/display/sm501_template.h +@@ -47,7 +47,7 @@ static void glue(draw_line8_, PIXEL_NAME)( + { + uint8_t v, r, g, b; + do { +- v = ldub_raw(s); ++ v = ldub_p(s); + r = (pal[v] >> 16) & 0xff; + g = (pal[v] >> 8) & 0xff; + b = (pal[v] >> 0) & 0xff; +@@ -64,7 +64,7 @@ static void glue(draw_line16_, PIXEL_NAME)( + uint8_t r, g, b; + + do { +- rgb565 = lduw_raw(s); ++ rgb565 = lduw_p(s); + r = ((rgb565 >> 11) & 0x1f) << 3; + g = ((rgb565 >> 5) & 0x3f) << 2; + b = ((rgb565 >> 0) & 0x1f) << 3; +@@ -80,7 +80,7 @@ static void glue(draw_line32_, PIXEL_NAME)( + uint8_t r, g, b; + + do { +- ldub_raw(s); ++ ldub_p(s); + #if defined(TARGET_WORDS_BIGENDIAN) + r = s[1]; + g = s[2]; +diff --git a/hw/display/vga_template.h b/hw/display/vga_template.h +index 6cfae56..90ec9c2 100644 +--- a/hw/display/vga_template.h ++++ b/hw/display/vga_template.h +@@ -361,7 +361,7 @@ static void glue(vga_draw_line15_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, + + w = width; + do { +- v = lduw_raw((void *)s); ++ v = lduw_p((void *)s); + r = (v >> 7) & 0xf8; + g = (v >> 2) & 0xf8; + b = (v << 3) & 0xf8; +@@ -386,7 +386,7 @@ static void glue(vga_draw_line16_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, + + w = width; + do { +- v = lduw_raw((void *)s); ++ v = lduw_p((void *)s); + r = (v >> 8) & 0xf8; + g = (v >> 3) & 0xfc; + b = (v << 3) & 0xf8; +diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c +index 1aac93a..31c67c6 100644 +--- a/hw/mips/mips_fulong2e.c ++++ b/hw/mips/mips_fulong2e.c +@@ -176,24 +176,24 @@ static void write_bootloader (CPUMIPSState *env, uint8_t *base, int64_t kernel_a + /* Small bootloader */ + p = (uint32_t *) base; + +- stl_raw(p++, 0x0bf00010); /* j 0x1fc00040 */ +- stl_raw(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x0bf00010); /* j 0x1fc00040 */ ++ stl_p(p++, 0x00000000); /* nop */ + + /* Second part of the bootloader */ + p = (uint32_t *) (base + 0x040); + +- stl_raw(p++, 0x3c040000); /* lui a0, 0 */ +- stl_raw(p++, 0x34840002); /* ori a0, a0, 2 */ +- stl_raw(p++, 0x3c050000 | ((ENVP_ADDR >> 16) & 0xffff)); /* lui a1, high(ENVP_ADDR) */ +- stl_raw(p++, 0x34a50000 | (ENVP_ADDR & 0xffff)); /* ori a1, a0, low(ENVP_ADDR) */ +- stl_raw(p++, 0x3c060000 | (((ENVP_ADDR + 8) >> 16) & 0xffff)); /* lui a2, high(ENVP_ADDR + 8) */ +- stl_raw(p++, 0x34c60000 | ((ENVP_ADDR + 8) & 0xffff)); /* ori a2, a2, low(ENVP_ADDR + 8) */ +- stl_raw(p++, 0x3c070000 | (loaderparams.ram_size >> 16)); /* lui a3, high(env->ram_size) */ +- stl_raw(p++, 0x34e70000 | (loaderparams.ram_size & 0xffff)); /* ori a3, a3, low(env->ram_size) */ +- stl_raw(p++, 0x3c1f0000 | ((kernel_addr >> 16) & 0xffff)); /* lui ra, high(kernel_addr) */; +- stl_raw(p++, 0x37ff0000 | (kernel_addr & 0xffff)); /* ori ra, ra, low(kernel_addr) */ +- stl_raw(p++, 0x03e00008); /* jr ra */ +- stl_raw(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x3c040000); /* lui a0, 0 */ ++ stl_p(p++, 0x34840002); /* ori a0, a0, 2 */ ++ stl_p(p++, 0x3c050000 | ((ENVP_ADDR >> 16) & 0xffff)); /* lui a1, high(ENVP_ADDR) */ ++ stl_p(p++, 0x34a50000 | (ENVP_ADDR & 0xffff)); /* ori a1, a0, low(ENVP_ADDR) */ ++ stl_p(p++, 0x3c060000 | (((ENVP_ADDR + 8) >> 16) & 0xffff)); /* lui a2, high(ENVP_ADDR + 8) */ ++ stl_p(p++, 0x34c60000 | ((ENVP_ADDR + 8) & 0xffff)); /* ori a2, a2, low(ENVP_ADDR + 8) */ ++ stl_p(p++, 0x3c070000 | (loaderparams.ram_size >> 16)); /* lui a3, high(env->ram_size) */ ++ stl_p(p++, 0x34e70000 | (loaderparams.ram_size & 0xffff)); /* ori a3, a3, low(env->ram_size) */ ++ stl_p(p++, 0x3c1f0000 | ((kernel_addr >> 16) & 0xffff)); /* lui ra, high(kernel_addr) */; ++ stl_p(p++, 0x37ff0000 | (kernel_addr & 0xffff)); /* ori ra, ra, low(kernel_addr) */ ++ stl_p(p++, 0x03e00008); /* jr ra */ ++ stl_p(p++, 0x00000000); /* nop */ + } + + +diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c +index 9d521cc..cf719de 100644 +--- a/hw/mips/mips_malta.c ++++ b/hw/mips/mips_malta.c +@@ -514,136 +514,136 @@ static void write_bootloader (CPUMIPSState *env, uint8_t *base, + + /* Small bootloader */ + p = (uint32_t *)base; +- stl_raw(p++, 0x0bf00160); /* j 0x1fc00580 */ +- stl_raw(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x0bf00160); /* j 0x1fc00580 */ ++ stl_p(p++, 0x00000000); /* nop */ + + /* YAMON service vector */ +- stl_raw(base + 0x500, 0xbfc00580); /* start: */ +- stl_raw(base + 0x504, 0xbfc0083c); /* print_count: */ +- stl_raw(base + 0x520, 0xbfc00580); /* start: */ +- stl_raw(base + 0x52c, 0xbfc00800); /* flush_cache: */ +- stl_raw(base + 0x534, 0xbfc00808); /* print: */ +- stl_raw(base + 0x538, 0xbfc00800); /* reg_cpu_isr: */ +- stl_raw(base + 0x53c, 0xbfc00800); /* unred_cpu_isr: */ +- stl_raw(base + 0x540, 0xbfc00800); /* reg_ic_isr: */ +- stl_raw(base + 0x544, 0xbfc00800); /* unred_ic_isr: */ +- stl_raw(base + 0x548, 0xbfc00800); /* reg_esr: */ +- stl_raw(base + 0x54c, 0xbfc00800); /* unreg_esr: */ +- stl_raw(base + 0x550, 0xbfc00800); /* getchar: */ +- stl_raw(base + 0x554, 0xbfc00800); /* syscon_read: */ ++ stl_p(base + 0x500, 0xbfc00580); /* start: */ ++ stl_p(base + 0x504, 0xbfc0083c); /* print_count: */ ++ stl_p(base + 0x520, 0xbfc00580); /* start: */ ++ stl_p(base + 0x52c, 0xbfc00800); /* flush_cache: */ ++ stl_p(base + 0x534, 0xbfc00808); /* print: */ ++ stl_p(base + 0x538, 0xbfc00800); /* reg_cpu_isr: */ ++ stl_p(base + 0x53c, 0xbfc00800); /* unred_cpu_isr: */ ++ stl_p(base + 0x540, 0xbfc00800); /* reg_ic_isr: */ ++ stl_p(base + 0x544, 0xbfc00800); /* unred_ic_isr: */ ++ stl_p(base + 0x548, 0xbfc00800); /* reg_esr: */ ++ stl_p(base + 0x54c, 0xbfc00800); /* unreg_esr: */ ++ stl_p(base + 0x550, 0xbfc00800); /* getchar: */ ++ stl_p(base + 0x554, 0xbfc00800); /* syscon_read: */ + + + /* Second part of the bootloader */ + p = (uint32_t *) (base + 0x580); +- stl_raw(p++, 0x24040002); /* addiu a0, zero, 2 */ +- stl_raw(p++, 0x3c1d0000 | (((ENVP_ADDR - 64) >> 16) & 0xffff)); /* lui sp, high(ENVP_ADDR) */ +- stl_raw(p++, 0x37bd0000 | ((ENVP_ADDR - 64) & 0xffff)); /* ori sp, sp, low(ENVP_ADDR) */ +- stl_raw(p++, 0x3c050000 | ((ENVP_ADDR >> 16) & 0xffff)); /* lui a1, high(ENVP_ADDR) */ +- stl_raw(p++, 0x34a50000 | (ENVP_ADDR & 0xffff)); /* ori a1, a1, low(ENVP_ADDR) */ +- stl_raw(p++, 0x3c060000 | (((ENVP_ADDR + 8) >> 16) & 0xffff)); /* lui a2, high(ENVP_ADDR + 8) */ +- stl_raw(p++, 0x34c60000 | ((ENVP_ADDR + 8) & 0xffff)); /* ori a2, a2, low(ENVP_ADDR + 8) */ +- stl_raw(p++, 0x3c070000 | (loaderparams.ram_size >> 16)); /* lui a3, high(ram_size) */ +- stl_raw(p++, 0x34e70000 | (loaderparams.ram_size & 0xffff)); /* ori a3, a3, low(ram_size) */ ++ stl_p(p++, 0x24040002); /* addiu a0, zero, 2 */ ++ stl_p(p++, 0x3c1d0000 | (((ENVP_ADDR - 64) >> 16) & 0xffff)); /* lui sp, high(ENVP_ADDR) */ ++ stl_p(p++, 0x37bd0000 | ((ENVP_ADDR - 64) & 0xffff)); /* ori sp, sp, low(ENVP_ADDR) */ ++ stl_p(p++, 0x3c050000 | ((ENVP_ADDR >> 16) & 0xffff)); /* lui a1, high(ENVP_ADDR) */ ++ stl_p(p++, 0x34a50000 | (ENVP_ADDR & 0xffff)); /* ori a1, a1, low(ENVP_ADDR) */ ++ stl_p(p++, 0x3c060000 | (((ENVP_ADDR + 8) >> 16) & 0xffff)); /* lui a2, high(ENVP_ADDR + 8) */ ++ stl_p(p++, 0x34c60000 | ((ENVP_ADDR + 8) & 0xffff)); /* ori a2, a2, low(ENVP_ADDR + 8) */ ++ stl_p(p++, 0x3c070000 | (loaderparams.ram_size >> 16)); /* lui a3, high(ram_size) */ ++ stl_p(p++, 0x34e70000 | (loaderparams.ram_size & 0xffff)); /* ori a3, a3, low(ram_size) */ + + /* Load BAR registers as done by YAMON */ +- stl_raw(p++, 0x3c09b400); /* lui t1, 0xb400 */ ++ stl_p(p++, 0x3c09b400); /* lui t1, 0xb400 */ + + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c08df00); /* lui t0, 0xdf00 */ ++ stl_p(p++, 0x3c08df00); /* lui t0, 0xdf00 */ + #else +- stl_raw(p++, 0x340800df); /* ori t0, r0, 0x00df */ ++ stl_p(p++, 0x340800df); /* ori t0, r0, 0x00df */ + #endif +- stl_raw(p++, 0xad280068); /* sw t0, 0x0068(t1) */ ++ stl_p(p++, 0xad280068); /* sw t0, 0x0068(t1) */ + +- stl_raw(p++, 0x3c09bbe0); /* lui t1, 0xbbe0 */ ++ stl_p(p++, 0x3c09bbe0); /* lui t1, 0xbbe0 */ + + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c08c000); /* lui t0, 0xc000 */ ++ stl_p(p++, 0x3c08c000); /* lui t0, 0xc000 */ + #else +- stl_raw(p++, 0x340800c0); /* ori t0, r0, 0x00c0 */ ++ stl_p(p++, 0x340800c0); /* ori t0, r0, 0x00c0 */ + #endif +- stl_raw(p++, 0xad280048); /* sw t0, 0x0048(t1) */ ++ stl_p(p++, 0xad280048); /* sw t0, 0x0048(t1) */ + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c084000); /* lui t0, 0x4000 */ ++ stl_p(p++, 0x3c084000); /* lui t0, 0x4000 */ + #else +- stl_raw(p++, 0x34080040); /* ori t0, r0, 0x0040 */ ++ stl_p(p++, 0x34080040); /* ori t0, r0, 0x0040 */ + #endif +- stl_raw(p++, 0xad280050); /* sw t0, 0x0050(t1) */ ++ stl_p(p++, 0xad280050); /* sw t0, 0x0050(t1) */ + + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c088000); /* lui t0, 0x8000 */ ++ stl_p(p++, 0x3c088000); /* lui t0, 0x8000 */ + #else +- stl_raw(p++, 0x34080080); /* ori t0, r0, 0x0080 */ ++ stl_p(p++, 0x34080080); /* ori t0, r0, 0x0080 */ + #endif +- stl_raw(p++, 0xad280058); /* sw t0, 0x0058(t1) */ ++ stl_p(p++, 0xad280058); /* sw t0, 0x0058(t1) */ + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c083f00); /* lui t0, 0x3f00 */ ++ stl_p(p++, 0x3c083f00); /* lui t0, 0x3f00 */ + #else +- stl_raw(p++, 0x3408003f); /* ori t0, r0, 0x003f */ ++ stl_p(p++, 0x3408003f); /* ori t0, r0, 0x003f */ + #endif +- stl_raw(p++, 0xad280060); /* sw t0, 0x0060(t1) */ ++ stl_p(p++, 0xad280060); /* sw t0, 0x0060(t1) */ + + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c08c100); /* lui t0, 0xc100 */ ++ stl_p(p++, 0x3c08c100); /* lui t0, 0xc100 */ + #else +- stl_raw(p++, 0x340800c1); /* ori t0, r0, 0x00c1 */ ++ stl_p(p++, 0x340800c1); /* ori t0, r0, 0x00c1 */ + #endif +- stl_raw(p++, 0xad280080); /* sw t0, 0x0080(t1) */ ++ stl_p(p++, 0xad280080); /* sw t0, 0x0080(t1) */ + #ifdef TARGET_WORDS_BIGENDIAN +- stl_raw(p++, 0x3c085e00); /* lui t0, 0x5e00 */ ++ stl_p(p++, 0x3c085e00); /* lui t0, 0x5e00 */ + #else +- stl_raw(p++, 0x3408005e); /* ori t0, r0, 0x005e */ ++ stl_p(p++, 0x3408005e); /* ori t0, r0, 0x005e */ + #endif +- stl_raw(p++, 0xad280088); /* sw t0, 0x0088(t1) */ ++ stl_p(p++, 0xad280088); /* sw t0, 0x0088(t1) */ + + /* Jump to kernel code */ +- stl_raw(p++, 0x3c1f0000 | ((kernel_entry >> 16) & 0xffff)); /* lui ra, high(kernel_entry) */ +- stl_raw(p++, 0x37ff0000 | (kernel_entry & 0xffff)); /* ori ra, ra, low(kernel_entry) */ +- stl_raw(p++, 0x03e00008); /* jr ra */ +- stl_raw(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x3c1f0000 | ((kernel_entry >> 16) & 0xffff)); /* lui ra, high(kernel_entry) */ ++ stl_p(p++, 0x37ff0000 | (kernel_entry & 0xffff)); /* ori ra, ra, low(kernel_entry) */ ++ stl_p(p++, 0x03e00008); /* jr ra */ ++ stl_p(p++, 0x00000000); /* nop */ + + /* YAMON subroutines */ + p = (uint32_t *) (base + 0x800); +- stl_raw(p++, 0x03e00008); /* jr ra */ +- stl_raw(p++, 0x24020000); /* li v0,0 */ ++ stl_p(p++, 0x03e00008); /* jr ra */ ++ stl_p(p++, 0x24020000); /* li v0,0 */ + /* 808 YAMON print */ +- stl_raw(p++, 0x03e06821); /* move t5,ra */ +- stl_raw(p++, 0x00805821); /* move t3,a0 */ +- stl_raw(p++, 0x00a05021); /* move t2,a1 */ +- stl_raw(p++, 0x91440000); /* lbu a0,0(t2) */ +- stl_raw(p++, 0x254a0001); /* addiu t2,t2,1 */ +- stl_raw(p++, 0x10800005); /* beqz a0,834 */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x0ff0021c); /* jal 870 */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x08000205); /* j 814 */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x01a00008); /* jr t5 */ +- stl_raw(p++, 0x01602021); /* move a0,t3 */ ++ stl_p(p++, 0x03e06821); /* move t5,ra */ ++ stl_p(p++, 0x00805821); /* move t3,a0 */ ++ stl_p(p++, 0x00a05021); /* move t2,a1 */ ++ stl_p(p++, 0x91440000); /* lbu a0,0(t2) */ ++ stl_p(p++, 0x254a0001); /* addiu t2,t2,1 */ ++ stl_p(p++, 0x10800005); /* beqz a0,834 */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x0ff0021c); /* jal 870 */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x08000205); /* j 814 */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x01a00008); /* jr t5 */ ++ stl_p(p++, 0x01602021); /* move a0,t3 */ + /* 0x83c YAMON print_count */ +- stl_raw(p++, 0x03e06821); /* move t5,ra */ +- stl_raw(p++, 0x00805821); /* move t3,a0 */ +- stl_raw(p++, 0x00a05021); /* move t2,a1 */ +- stl_raw(p++, 0x00c06021); /* move t4,a2 */ +- stl_raw(p++, 0x91440000); /* lbu a0,0(t2) */ +- stl_raw(p++, 0x0ff0021c); /* jal 870 */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x254a0001); /* addiu t2,t2,1 */ +- stl_raw(p++, 0x258cffff); /* addiu t4,t4,-1 */ +- stl_raw(p++, 0x1580fffa); /* bnez t4,84c */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x01a00008); /* jr t5 */ +- stl_raw(p++, 0x01602021); /* move a0,t3 */ ++ stl_p(p++, 0x03e06821); /* move t5,ra */ ++ stl_p(p++, 0x00805821); /* move t3,a0 */ ++ stl_p(p++, 0x00a05021); /* move t2,a1 */ ++ stl_p(p++, 0x00c06021); /* move t4,a2 */ ++ stl_p(p++, 0x91440000); /* lbu a0,0(t2) */ ++ stl_p(p++, 0x0ff0021c); /* jal 870 */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x254a0001); /* addiu t2,t2,1 */ ++ stl_p(p++, 0x258cffff); /* addiu t4,t4,-1 */ ++ stl_p(p++, 0x1580fffa); /* bnez t4,84c */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x01a00008); /* jr t5 */ ++ stl_p(p++, 0x01602021); /* move a0,t3 */ + /* 0x870 */ +- stl_raw(p++, 0x3c08b800); /* lui t0,0xb400 */ +- stl_raw(p++, 0x350803f8); /* ori t0,t0,0x3f8 */ +- stl_raw(p++, 0x91090005); /* lbu t1,5(t0) */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x31290040); /* andi t1,t1,0x40 */ +- stl_raw(p++, 0x1120fffc); /* beqz t1,878 */ +- stl_raw(p++, 0x00000000); /* nop */ +- stl_raw(p++, 0x03e00008); /* jr ra */ +- stl_raw(p++, 0xa1040000); /* sb a0,0(t0) */ ++ stl_p(p++, 0x3c08b800); /* lui t0,0xb400 */ ++ stl_p(p++, 0x350803f8); /* ori t0,t0,0x3f8 */ ++ stl_p(p++, 0x91090005); /* lbu t1,5(t0) */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x31290040); /* andi t1,t1,0x40 */ ++ stl_p(p++, 0x1120fffc); /* beqz t1,878 */ ++ stl_p(p++, 0x00000000); /* nop */ ++ stl_p(p++, 0x03e00008); /* jr ra */ ++ stl_p(p++, 0xa1040000); /* sb a0,0(t0) */ + + } + +diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c +index 5e3cc61..96c4fb7 100644 +--- a/hw/scsi/vhost-scsi.c ++++ b/hw/scsi/vhost-scsi.c +@@ -164,8 +164,8 @@ static void vhost_scsi_set_config(VirtIODevice *vdev, + VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config; + VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev); + +- if ((uint32_t) ldl_raw(&scsiconf->sense_size) != vs->sense_size || +- (uint32_t) ldl_raw(&scsiconf->cdb_size) != vs->cdb_size) { ++ if ((uint32_t) ldl_p(&scsiconf->sense_size) != vs->sense_size || ++ (uint32_t) ldl_p(&scsiconf->cdb_size) != vs->cdb_size) { + error_report("vhost-scsi does not support changing the sense data and CDB sizes"); + exit(1); + } +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 808eb54..0b2dc9c 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -423,16 +423,16 @@ static void virtio_scsi_get_config(VirtIODevice *vdev, + VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config; + VirtIOSCSICommon *s = VIRTIO_SCSI_COMMON(vdev); + +- stl_raw(&scsiconf->num_queues, s->conf.num_queues); +- stl_raw(&scsiconf->seg_max, 128 - 2); +- stl_raw(&scsiconf->max_sectors, s->conf.max_sectors); +- stl_raw(&scsiconf->cmd_per_lun, s->conf.cmd_per_lun); +- stl_raw(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent)); +- stl_raw(&scsiconf->sense_size, s->sense_size); +- stl_raw(&scsiconf->cdb_size, s->cdb_size); +- stw_raw(&scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL); +- stw_raw(&scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET); +- stl_raw(&scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN); ++ stl_p(&scsiconf->num_queues, s->conf.num_queues); ++ stl_p(&scsiconf->seg_max, 128 - 2); ++ stl_p(&scsiconf->max_sectors, s->conf.max_sectors); ++ stl_p(&scsiconf->cmd_per_lun, s->conf.cmd_per_lun); ++ stl_p(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent)); ++ stl_p(&scsiconf->sense_size, s->sense_size); ++ stl_p(&scsiconf->cdb_size, s->cdb_size); ++ stw_p(&scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL); ++ stw_p(&scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET); ++ stl_p(&scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN); + } + + static void virtio_scsi_set_config(VirtIODevice *vdev, +@@ -441,14 +441,14 @@ static void virtio_scsi_set_config(VirtIODevice *vdev, + VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config; + VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev); + +- if ((uint32_t) ldl_raw(&scsiconf->sense_size) >= 65536 || +- (uint32_t) ldl_raw(&scsiconf->cdb_size) >= 256) { ++ if ((uint32_t) ldl_p(&scsiconf->sense_size) >= 65536 || ++ (uint32_t) ldl_p(&scsiconf->cdb_size) >= 256) { + error_report("bad data written to virtio-scsi configuration space"); + exit(1); + } + +- vs->sense_size = ldl_raw(&scsiconf->sense_size); +- vs->cdb_size = ldl_raw(&scsiconf->cdb_size); ++ vs->sense_size = ldl_p(&scsiconf->sense_size); ++ vs->cdb_size = ldl_p(&scsiconf->cdb_size); + } + + static uint32_t virtio_scsi_get_features(VirtIODevice *vdev, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-Introduce-VFIORegion.patch b/SOURCES/kvm-hw-vfio-pci-Introduce-VFIORegion.patch new file mode 100644 index 0000000..b3e5d05 --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-Introduce-VFIORegion.patch @@ -0,0 +1,517 @@ +From 725ad24f771adcc8aeacaf27b21a6d95cab41e69 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:02 +0200 +Subject: [PATCH 07/27] hw/vfio/pci: Introduce VFIORegion + +RH-Author: Alex Williamson +Message-id: <20170929214502.16765.46217.stgit@gimli.home> +Patchwork-id: 76765 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 07/16] hw/vfio/pci: Introduce VFIORegion +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: a664477db8dac84cc046e9d79701eefda1d58703 + +This structure is going to be shared by VFIOPCIDevice and +VFIOPlatformDevice. VFIOBAR includes it. + +vfio_eoi becomes an ops of VFIODevice specialized by parent device. +This makes possible to transform vfio_bar_write/read into generic +vfio_region_write/read that will be used by VFIOPlatformDevice too. + +vfio_mmap_bar becomes vfio_map_region + +Signed-off-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 188 +++++++++++++++++++++++++++++---------------------------- + 1 file changed, 97 insertions(+), 91 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 3e559ed..92414b9 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -84,15 +84,19 @@ typedef struct VFIOQuirk { + } data; + } VFIOQuirk; + +-typedef struct VFIOBAR { +- off_t fd_offset; /* offset of BAR within device fd */ +- int fd; /* device fd, allows us to pass VFIOBAR as opaque data */ ++typedef struct VFIORegion { ++ struct VFIODevice *vbasedev; ++ off_t fd_offset; /* offset of region within device fd */ + MemoryRegion mem; /* slow, read/write access */ + MemoryRegion mmap_mem; /* direct mapped access */ + void *mmap; + size_t size; + uint32_t flags; /* VFIO region flags (rd/wr/mmap) */ +- uint8_t nr; /* cache the BAR number for debug */ ++ uint8_t nr; /* cache the region number for debug */ ++} VFIORegion; ++ ++typedef struct VFIOBAR { ++ VFIORegion region; + bool ioport; + bool mem64; + QLIST_HEAD(, VFIOQuirk) quirks; +@@ -194,6 +198,7 @@ typedef struct VFIODevice { + struct VFIODeviceOps { + void (*vfio_compute_needs_reset)(VFIODevice *vdev); + int (*vfio_hot_reset_multi)(VFIODevice *vdev); ++ void (*vfio_eoi)(VFIODevice *vdev); + }; + + typedef struct VFIOPCIDevice { +@@ -383,8 +388,10 @@ static void vfio_intx_interrupt(void *opaque) + } + } + +-static void vfio_eoi(VFIOPCIDevice *vdev) ++static void vfio_eoi(VFIODevice *vbasedev) + { ++ VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev); ++ + if (!vdev->intx.pending) { + return; + } +@@ -394,7 +401,7 @@ static void vfio_eoi(VFIOPCIDevice *vdev) + + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); +- vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_unmask_single_irqindex(vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + } + + static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) +@@ -549,7 +556,7 @@ static void vfio_update_irq(PCIDevice *pdev) + vfio_enable_intx_kvm(vdev); + + /* Re-enable the interrupt in cased we missed an EOI */ +- vfio_eoi(vdev); ++ vfio_eoi(&vdev->vbasedev); + } + + static int vfio_enable_intx(VFIOPCIDevice *vdev) +@@ -1086,10 +1093,11 @@ static void vfio_update_msi(VFIOPCIDevice *vdev) + /* + * IO Port/MMIO - Beware of the endians, VFIO is always little endian + */ +-static void vfio_bar_write(void *opaque, hwaddr addr, +- uint64_t data, unsigned size) ++static void vfio_region_write(void *opaque, hwaddr addr, ++ uint64_t data, unsigned size) + { +- VFIOBAR *bar = opaque; ++ VFIORegion *region = opaque; ++ VFIODevice *vbasedev = region->vbasedev; + union { + uint8_t byte; + uint16_t word; +@@ -1112,21 +1120,15 @@ static void vfio_bar_write(void *opaque, hwaddr addr, + break; + } + +- if (pwrite(bar->fd, &buf, size, bar->fd_offset + addr) != size) { +- error_report("%s(,0x%"HWADDR_PRIx", 0x%"PRIx64", %d) failed: %m", +- __func__, addr, data, size); ++ if (pwrite(vbasedev->fd, &buf, size, region->fd_offset + addr) != size) { ++ error_report("%s(%s:region%d+0x%"HWADDR_PRIx", 0x%"PRIx64 ++ ",%d) failed: %m", ++ __func__, vbasedev->name, region->nr, ++ addr, data, size); + } + +-#ifdef DEBUG_VFIO +- { +- VFIOPCIDevice *vdev = container_of(bar, VFIOPCIDevice, bars[bar->nr]); +- +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", 0x%"PRIx64 +- ", %d)\n", __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, bar->nr, addr, +- data, size); +- } +-#endif ++ DPRINTF("%s(%s:BAR%d+0x%"HWADDR_PRIx", 0x%"PRIx64", %d)\n", __func__, ++ vbasedev->name, region->nr, addr, data, size); + + /* + * A read or write to a BAR always signals an INTx EOI. This will +@@ -1136,13 +1138,14 @@ static void vfio_bar_write(void *opaque, hwaddr addr, + * which access will service the interrupt, so we're potentially + * getting quite a few host interrupts per guest interrupt. + */ +- vfio_eoi(container_of(bar, VFIOPCIDevice, bars[bar->nr])); ++ vbasedev->ops->vfio_eoi(vbasedev); + } + +-static uint64_t vfio_bar_read(void *opaque, +- hwaddr addr, unsigned size) ++static uint64_t vfio_region_read(void *opaque, ++ hwaddr addr, unsigned size) + { +- VFIOBAR *bar = opaque; ++ VFIORegion *region = opaque; ++ VFIODevice *vbasedev = region->vbasedev; + union { + uint8_t byte; + uint16_t word; +@@ -1151,9 +1154,10 @@ static uint64_t vfio_bar_read(void *opaque, + } buf; + uint64_t data = 0; + +- if (pread(bar->fd, &buf, size, bar->fd_offset + addr) != size) { +- error_report("%s(,0x%"HWADDR_PRIx", %d) failed: %m", +- __func__, addr, size); ++ if (pread(vbasedev->fd, &buf, size, region->fd_offset + addr) != size) { ++ error_report("%s(%s:region%d+0x%"HWADDR_PRIx", %d) failed: %m", ++ __func__, vbasedev->name, region->nr, ++ addr, size); + return (uint64_t)-1; + } + +@@ -1172,26 +1176,18 @@ static uint64_t vfio_bar_read(void *opaque, + break; + } + +-#ifdef DEBUG_VFIO +- { +- VFIOPCIDevice *vdev = container_of(bar, VFIOPCIDevice, bars[bar->nr]); +- +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx +- ", %d) = 0x%"PRIx64"\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, +- bar->nr, addr, size, data); +- } +-#endif ++ DPRINTF("%s(%s:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%"PRIx64"\n", __func__, ++ vbasedev->name, region->nr, addr, size, data); + + /* Same as write above */ +- vfio_eoi(container_of(bar, VFIOPCIDevice, bars[bar->nr])); ++ vbasedev->ops->vfio_eoi(vbasedev); + + return data; + } + +-static const MemoryRegionOps vfio_bar_ops = { +- .read = vfio_bar_read, +- .write = vfio_bar_write, ++static const MemoryRegionOps vfio_region_ops = { ++ .read = vfio_region_read, ++ .write = vfio_region_write, + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +@@ -1505,8 +1501,8 @@ static uint64_t vfio_generic_window_quirk_read(void *opaque, + vdev->host.bus, vdev->host.slot, vdev->host.function, + quirk->data.bar, addr, size, data); + } else { +- data = vfio_bar_read(&vdev->bars[quirk->data.bar], +- addr + quirk->data.base_offset, size); ++ data = vfio_region_read(&vdev->bars[quirk->data.bar].region, ++ addr + quirk->data.base_offset, size); + } + + return data; +@@ -1556,7 +1552,7 @@ static void vfio_generic_window_quirk_write(void *opaque, hwaddr addr, + return; + } + +- vfio_bar_write(&vdev->bars[quirk->data.bar], ++ vfio_region_write(&vdev->bars[quirk->data.bar].region, + addr + quirk->data.base_offset, data, size); + } + +@@ -1590,7 +1586,8 @@ static uint64_t vfio_generic_quirk_read(void *opaque, + vdev->host.bus, vdev->host.slot, vdev->host.function, + quirk->data.bar, addr + base, size, data); + } else { +- data = vfio_bar_read(&vdev->bars[quirk->data.bar], addr + base, size); ++ data = vfio_region_read(&vdev->bars[quirk->data.bar].region, ++ addr + base, size); + } + + return data; +@@ -1619,7 +1616,8 @@ static void vfio_generic_quirk_write(void *opaque, hwaddr addr, + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function, quirk->data.bar, addr + base, data, size); + } else { +- vfio_bar_write(&vdev->bars[quirk->data.bar], addr + base, data, size); ++ vfio_region_write(&vdev->bars[quirk->data.bar].region, ++ addr + base, data, size); + } + } + +@@ -1672,7 +1670,7 @@ static void vfio_vga_probe_ati_3c3_quirk(VFIOPCIDevice *vdev) + * As long as the BAR is >= 256 bytes it will be aligned such that the + * lower byte is always zero. Filter out anything else, if it exists. + */ +- if (!vdev->bars[4].ioport || vdev->bars[4].size < 256) { ++ if (!vdev->bars[4].ioport || vdev->bars[4].region.size < 256) { + return; + } + +@@ -1725,7 +1723,7 @@ static void vfio_probe_ati_bar4_window_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, + &vfio_generic_window_quirk, quirk, + "vfio-ati-bar4-window-quirk", 8); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, ++ memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, + quirk->data.base_offset, &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); +@@ -1759,7 +1757,7 @@ static void vfio_probe_ati_bar2_4000_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, &vfio_generic_quirk, quirk, + "vfio-ati-bar2-4000-quirk", + TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, ++ memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, + quirk->data.address_match & TARGET_PAGE_MASK, + &quirk->mem, 1); + +@@ -1878,7 +1876,7 @@ static void vfio_vga_probe_nvidia_3d0_quirk(VFIOPCIDevice *vdev) + VFIOQuirk *quirk; + + if (pci_get_word(pdev->config + PCI_VENDOR_ID) != PCI_VENDOR_ID_NVIDIA || +- !vdev->bars[1].size) { ++ !vdev->bars[1].region.size) { + return; + } + +@@ -1986,7 +1984,8 @@ static void vfio_probe_nvidia_bar5_window_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, + &vfio_nvidia_bar5_window_quirk, quirk, + "vfio-nvidia-bar5-window-quirk", 16); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, 0, &quirk->mem, 1); ++ memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, ++ 0, &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +@@ -2024,7 +2023,7 @@ static void vfio_probe_nvidia_bar0_88000_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, &vfio_generic_quirk, + quirk, "vfio-nvidia-bar0-88000-quirk", + TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, ++ memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, + quirk->data.address_match & TARGET_PAGE_MASK, + &quirk->mem, 1); + +@@ -2050,7 +2049,8 @@ static void vfio_probe_nvidia_bar0_1800_quirk(VFIOPCIDevice *vdev, int nr) + + /* Log the chipset ID */ + DPRINTF("Nvidia NV%02x\n", +- (unsigned int)(vfio_bar_read(&vdev->bars[0], 0, 4) >> 20) & 0xff); ++ (unsigned int)(vfio_region_read(&vdev->bars[0].region, 0, 4) >> 20) ++ & 0xff); + + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; +@@ -2062,7 +2062,7 @@ static void vfio_probe_nvidia_bar0_1800_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, &vfio_generic_quirk, quirk, + "vfio-nvidia-bar0-1800-quirk", + TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, ++ memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, + quirk->data.address_match & TARGET_PAGE_MASK, + &quirk->mem, 1); + +@@ -2118,7 +2118,7 @@ static void vfio_bar_quirk_teardown(VFIOPCIDevice *vdev, int nr) + + while (!QLIST_EMPTY(&bar->quirks)) { + VFIOQuirk *quirk = QLIST_FIRST(&bar->quirks); +- memory_region_del_subregion(&bar->mem, &quirk->mem); ++ memory_region_del_subregion(&bar->region.mem, &quirk->mem); + memory_region_destroy(&quirk->mem); + QLIST_REMOVE(quirk, next); + g_free(quirk); +@@ -2495,7 +2495,7 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev) + * specific quirk if the device is known or we have a broken configuration. + */ + if (vdev->msix->pba_offset >= +- vdev->bars[vdev->msix->pba_bar].size) { ++ vdev->bars[vdev->msix->pba_bar].region.size) { + + PCIDevice *pdev = &vdev->pdev; + uint16_t vendor = pci_get_word(pdev->config + PCI_VENDOR_ID); +@@ -2524,9 +2524,9 @@ static int vfio_setup_msix(VFIOPCIDevice *vdev, int pos) + int ret; + + ret = msix_init(&vdev->pdev, vdev->msix->entries, +- &vdev->bars[vdev->msix->table_bar].mem, ++ &vdev->bars[vdev->msix->table_bar].region.mem, + vdev->msix->table_bar, vdev->msix->table_offset, +- &vdev->bars[vdev->msix->pba_bar].mem, ++ &vdev->bars[vdev->msix->pba_bar].region.mem, + vdev->msix->pba_bar, vdev->msix->pba_offset, pos); + if (ret < 0) { + if (ret == -ENOTSUP) { +@@ -2544,8 +2544,9 @@ static void vfio_teardown_msi(VFIOPCIDevice *vdev) + msi_uninit(&vdev->pdev); + + if (vdev->msix) { +- msix_uninit(&vdev->pdev, &vdev->bars[vdev->msix->table_bar].mem, +- &vdev->bars[vdev->msix->pba_bar].mem); ++ msix_uninit(&vdev->pdev, ++ &vdev->bars[vdev->msix->table_bar].region.mem, ++ &vdev->bars[vdev->msix->pba_bar].region.mem); + } + } + +@@ -2559,11 +2560,11 @@ static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled) + for (i = 0; i < PCI_ROM_SLOT; i++) { + VFIOBAR *bar = &vdev->bars[i]; + +- if (!bar->size) { ++ if (!bar->region.size) { + continue; + } + +- memory_region_set_enabled(&bar->mmap_mem, enabled); ++ memory_region_set_enabled(&bar->region.mmap_mem, enabled); + if (vdev->msix && vdev->msix->table_bar == i) { + memory_region_set_enabled(&vdev->msix->mmap_mem, enabled); + } +@@ -2574,45 +2575,47 @@ static void vfio_unmap_bar(VFIOPCIDevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; + +- if (!bar->size) { ++ if (!bar->region.size) { + return; + } + + vfio_bar_quirk_teardown(vdev, nr); + +- memory_region_del_subregion(&bar->mem, &bar->mmap_mem); +- munmap(bar->mmap, memory_region_size(&bar->mmap_mem)); +- memory_region_destroy(&bar->mmap_mem); ++ memory_region_del_subregion(&bar->region.mem, &bar->region.mmap_mem); ++ munmap(bar->region.mmap, memory_region_size(&bar->region.mmap_mem)); ++ memory_region_destroy(&bar->region.mmap_mem); + + if (vdev->msix && vdev->msix->table_bar == nr) { +- memory_region_del_subregion(&bar->mem, &vdev->msix->mmap_mem); ++ memory_region_del_subregion(&bar->region.mem, &vdev->msix->mmap_mem); + munmap(vdev->msix->mmap, memory_region_size(&vdev->msix->mmap_mem)); + memory_region_destroy(&vdev->msix->mmap_mem); + } + +- memory_region_destroy(&bar->mem); ++ memory_region_destroy(&bar->region.mem); + } + +-static int vfio_mmap_bar(VFIOPCIDevice *vdev, VFIOBAR *bar, +- MemoryRegion *mem, MemoryRegion *submem, +- void **map, size_t size, off_t offset, +- const char *name) ++static int vfio_mmap_region(Object *obj, VFIORegion *region, ++ MemoryRegion *mem, MemoryRegion *submem, ++ void **map, size_t size, off_t offset, ++ const char *name) + { + int ret = 0; ++ VFIODevice *vbasedev = region->vbasedev; + +- if (VFIO_ALLOW_MMAP && size && bar->flags & VFIO_REGION_INFO_FLAG_MMAP) { ++ if (VFIO_ALLOW_MMAP && size && region->flags & ++ VFIO_REGION_INFO_FLAG_MMAP) { + int prot = 0; + +- if (bar->flags & VFIO_REGION_INFO_FLAG_READ) { ++ if (region->flags & VFIO_REGION_INFO_FLAG_READ) { + prot |= PROT_READ; + } + +- if (bar->flags & VFIO_REGION_INFO_FLAG_WRITE) { ++ if (region->flags & VFIO_REGION_INFO_FLAG_WRITE) { + prot |= PROT_WRITE; + } + + *map = mmap(NULL, size, prot, MAP_SHARED, +- bar->fd, bar->fd_offset + offset); ++ vbasedev->fd, region->fd_offset + offset); + if (*map == MAP_FAILED) { + *map = NULL; + ret = -errno; +@@ -2635,7 +2638,7 @@ empty_region: + static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; +- uint64_t size = bar->size; ++ uint64_t size = bar->region.size; + char name[64]; + uint32_t pci_bar; + uint8_t type; +@@ -2665,9 +2668,9 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + ~PCI_BASE_ADDRESS_MEM_MASK); + + /* A "slow" read/write mapping underlies all BARs */ +- memory_region_init_io(&bar->mem, &vfio_bar_ops, ++ memory_region_init_io(&bar->region.mem, &vfio_region_ops, + bar, name, size); +- pci_register_bar(&vdev->pdev, nr, type, &bar->mem); ++ pci_register_bar(&vdev->pdev, nr, type, &bar->region.mem); + + /* + * We can't mmap areas overlapping the MSIX vector table, so we +@@ -2678,8 +2681,9 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + } + + strncat(name, " mmap", sizeof(name) - strlen(name) - 1); +- if (vfio_mmap_bar(vdev, bar, &bar->mem, +- &bar->mmap_mem, &bar->mmap, size, 0, name)) { ++ if (vfio_mmap_region(OBJECT(vdev), &bar->region, &bar->region.mem, ++ &bar->region.mmap_mem, &bar->region.mmap, ++ size, 0, name)) { + error_report("%s unsupported. Performance may be slow", name); + } + +@@ -2689,10 +2693,11 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + start = TARGET_PAGE_ALIGN((uint64_t)vdev->msix->table_offset + + (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE)); + +- size = start < bar->size ? bar->size - start : 0; ++ size = start < bar->region.size ? bar->region.size - start : 0; + strncat(name, " msix-hi", sizeof(name) - strlen(name) - 1); + /* VFIOMSIXInfo contains another MemoryRegion for this mapping */ +- if (vfio_mmap_bar(vdev, bar, &bar->mem, &vdev->msix->mmap_mem, ++ if (vfio_mmap_region(OBJECT(vdev), &bar->region, &bar->region.mem, ++ &vdev->msix->mmap_mem, + &vdev->msix->mmap, size, start, name)) { + error_report("%s unsupported. Performance may be slow", name); + } +@@ -3281,6 +3286,7 @@ static void vfio_pci_compute_needs_reset(VFIODevice *vbasedev) + static VFIODeviceOps vfio_pci_ops = { + .vfio_compute_needs_reset = vfio_pci_compute_needs_reset, + .vfio_hot_reset_multi = vfio_pci_hot_reset_multi, ++ .vfio_eoi = vfio_eoi, + }; + + static void vfio_reset_handler(void *opaque) +@@ -3607,11 +3613,11 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + (unsigned long)reg_info.size, (unsigned long)reg_info.offset, + (unsigned long)reg_info.flags); + +- vdev->bars[i].flags = reg_info.flags; +- vdev->bars[i].size = reg_info.size; +- vdev->bars[i].fd_offset = reg_info.offset; +- vdev->bars[i].fd = vdev->vbasedev.fd; +- vdev->bars[i].nr = i; ++ vdev->bars[i].region.vbasedev = &vdev->vbasedev; ++ vdev->bars[i].region.flags = reg_info.flags; ++ vdev->bars[i].region.size = reg_info.size; ++ vdev->bars[i].region.fd_offset = reg_info.offset; ++ vdev->bars[i].region.nr = i; + QLIST_INIT(&vdev->bars[i].quirks); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-Rename-VFIODevice-into-VFIOPCIDevice.patch b/SOURCES/kvm-hw-vfio-pci-Rename-VFIODevice-into-VFIOPCIDevice.patch new file mode 100644 index 0000000..7bfc3d9 --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-Rename-VFIODevice-into-VFIOPCIDevice.patch @@ -0,0 +1,917 @@ +From c0cad7dde740ad701c4a095c607970e1f76ad720 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:44:12 +0200 +Subject: [PATCH 02/27] hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice + +RH-Author: Alex Williamson +Message-id: <20170929214412.16765.59126.stgit@gimli.home> +Patchwork-id: 76760 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 02/16] hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: 9ee27d7381c2d540ee976c7cbae941c66bb66e70 +RHEL: Request notifier didn't exist upstream yet, included in change. + +This prepares for the introduction of VFIOPlatformDevice + +Signed-off-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 209 +++++++++++++++++++++++++++++---------------------------- + 1 file changed, 105 insertions(+), 104 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 363c646..a1ca883 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -55,11 +55,11 @@ + #define VFIO_ALLOW_KVM_MSI 1 + #define VFIO_ALLOW_KVM_MSIX 1 + +-struct VFIODevice; ++struct VFIOPCIDevice; + + typedef struct VFIOQuirk { + MemoryRegion mem; +- struct VFIODevice *vdev; ++ struct VFIOPCIDevice *vdev; + QLIST_ENTRY(VFIOQuirk) next; + struct { + uint32_t base_offset:TARGET_PAGE_BITS; +@@ -130,7 +130,7 @@ typedef struct VFIOMSIVector { + */ + EventNotifier interrupt; + EventNotifier kvm_interrupt; +- struct VFIODevice *vdev; /* back pointer to device */ ++ struct VFIOPCIDevice *vdev; /* back pointer to device */ + int virq; + bool use; + } VFIOMSIVector; +@@ -174,7 +174,7 @@ typedef struct VFIOMSIXInfo { + void *mmap; + } VFIOMSIXInfo; + +-typedef struct VFIODevice { ++typedef struct VFIOPCIDevice { + PCIDevice pdev; + int fd; + VFIOINTx intx; +@@ -192,7 +192,7 @@ typedef struct VFIODevice { + VFIOBAR bars[PCI_NUM_REGIONS - 1]; /* No ROM */ + VFIOVGA vga; /* 0xa0000, 0x3b0, 0x3c0 */ + PCIHostDeviceAddress host; +- QLIST_ENTRY(VFIODevice) next; ++ QLIST_ENTRY(VFIOPCIDevice) next; + struct VFIOGroup *group; + EventNotifier err_notifier; + EventNotifier req_notifier; +@@ -211,13 +211,13 @@ typedef struct VFIODevice { + bool has_pm_reset; + bool needs_reset; + bool rom_read_failed; +-} VFIODevice; ++} VFIOPCIDevice; + + typedef struct VFIOGroup { + int fd; + int groupid; + VFIOContainer *container; +- QLIST_HEAD(, VFIODevice) device_list; ++ QLIST_HEAD(, VFIOPCIDevice) device_list; + QLIST_ENTRY(VFIOGroup) next; + QLIST_ENTRY(VFIOGroup) container_next; + } VFIOGroup; +@@ -263,16 +263,16 @@ static QLIST_HEAD(, VFIOGroup) + */ + static int vfio_kvm_device_fd = -1; + +-static void vfio_disable_interrupts(VFIODevice *vdev); ++static void vfio_disable_interrupts(VFIOPCIDevice *vdev); + static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len); + static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + uint32_t val, int len); +-static void vfio_mmap_set_enabled(VFIODevice *vdev, bool enabled); ++static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); + + /* + * Common VFIO interrupt disable + */ +-static void vfio_disable_irqindex(VFIODevice *vdev, int index) ++static void vfio_disable_irqindex(VFIOPCIDevice *vdev, int index) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), +@@ -288,7 +288,7 @@ static void vfio_disable_irqindex(VFIODevice *vdev, int index) + /* + * INTx + */ +-static void vfio_unmask_intx(VFIODevice *vdev) ++static void vfio_unmask_intx(VFIOPCIDevice *vdev) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), +@@ -302,7 +302,7 @@ static void vfio_unmask_intx(VFIODevice *vdev) + } + + #ifdef CONFIG_KVM /* Unused outside of CONFIG_KVM code */ +-static void vfio_mask_intx(VFIODevice *vdev) ++static void vfio_mask_intx(VFIOPCIDevice *vdev) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), +@@ -333,7 +333,7 @@ static void vfio_mask_intx(VFIODevice *vdev) + */ + static void vfio_intx_mmap_enable(void *opaque) + { +- VFIODevice *vdev = opaque; ++ VFIOPCIDevice *vdev = opaque; + + if (vdev->intx.pending) { + qemu_mod_timer(vdev->intx.mmap_timer, +@@ -346,7 +346,7 @@ static void vfio_intx_mmap_enable(void *opaque) + + static void vfio_intx_interrupt(void *opaque) + { +- VFIODevice *vdev = opaque; ++ VFIOPCIDevice *vdev = opaque; + + if (!event_notifier_test_and_clear(&vdev->intx.interrupt)) { + return; +@@ -365,7 +365,7 @@ static void vfio_intx_interrupt(void *opaque) + } + } + +-static void vfio_eoi(VFIODevice *vdev) ++static void vfio_eoi(VFIOPCIDevice *vdev) + { + if (!vdev->intx.pending) { + return; +@@ -379,7 +379,7 @@ static void vfio_eoi(VFIODevice *vdev) + vfio_unmask_intx(vdev); + } + +-static void vfio_enable_intx_kvm(VFIODevice *vdev) ++static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + { + #ifdef CONFIG_KVM + struct kvm_irqfd irqfd = { +@@ -458,7 +458,7 @@ fail: + #endif + } + +-static void vfio_disable_intx_kvm(VFIODevice *vdev) ++static void vfio_disable_intx_kvm(VFIOPCIDevice *vdev) + { + #ifdef CONFIG_KVM + struct kvm_irqfd irqfd = { +@@ -503,7 +503,7 @@ static void vfio_disable_intx_kvm(VFIODevice *vdev) + + static void vfio_update_irq(PCIDevice *pdev) + { +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + PCIINTxRoute route; + + if (vdev->interrupt != VFIO_INT_INTx) { +@@ -534,7 +534,7 @@ static void vfio_update_irq(PCIDevice *pdev) + vfio_eoi(vdev); + } + +-static int vfio_enable_intx(VFIODevice *vdev) ++static int vfio_enable_intx(VFIOPCIDevice *vdev) + { + uint8_t pin = vfio_pci_read_config(&vdev->pdev, PCI_INTERRUPT_PIN, 1); + int ret, argsz; +@@ -599,7 +599,7 @@ static int vfio_enable_intx(VFIODevice *vdev) + return 0; + } + +-static void vfio_disable_intx(VFIODevice *vdev) ++static void vfio_disable_intx(VFIOPCIDevice *vdev) + { + int fd; + +@@ -626,7 +626,7 @@ static void vfio_disable_intx(VFIODevice *vdev) + static void vfio_msi_interrupt(void *opaque) + { + VFIOMSIVector *vector = opaque; +- VFIODevice *vdev = vector->vdev; ++ VFIOPCIDevice *vdev = vector->vdev; + int nr = vector - vdev->msi_vectors; + + if (!event_notifier_test_and_clear(&vector->interrupt)) { +@@ -658,7 +658,7 @@ static void vfio_msi_interrupt(void *opaque) + } + } + +-static int vfio_enable_vectors(VFIODevice *vdev, bool msix) ++static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) + { + struct vfio_irq_set *irq_set; + int ret = 0, i, argsz; +@@ -749,7 +749,7 @@ static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg) + static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + MSIMessage *msg, IOHandler *handler) + { +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + VFIOMSIVector *vector; + int ret; + +@@ -838,7 +838,7 @@ static int vfio_msix_vector_use(PCIDevice *pdev, + + static void vfio_msix_vector_release(PCIDevice *pdev, unsigned int nr) + { +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + VFIOMSIVector *vector = &vdev->msi_vectors[nr]; + + DPRINTF("%s(%04x:%02x:%02x.%x) vector %d released\n", __func__, +@@ -877,7 +877,7 @@ static void vfio_msix_vector_release(PCIDevice *pdev, unsigned int nr) + } + } + +-static void vfio_enable_msix(VFIODevice *vdev) ++static void vfio_enable_msix(VFIOPCIDevice *vdev) + { + vfio_disable_interrupts(vdev); + +@@ -910,7 +910,7 @@ static void vfio_enable_msix(VFIODevice *vdev) + vdev->host.bus, vdev->host.slot, vdev->host.function); + } + +-static void vfio_enable_msi(VFIODevice *vdev) ++static void vfio_enable_msi(VFIOPCIDevice *vdev) + { + int ret, i; + +@@ -988,7 +988,7 @@ retry: + vdev->host.function, vdev->nr_vectors); + } + +-static void vfio_disable_msi_common(VFIODevice *vdev) ++static void vfio_disable_msi_common(VFIOPCIDevice *vdev) + { + int i; + +@@ -1012,7 +1012,7 @@ static void vfio_disable_msi_common(VFIODevice *vdev) + vfio_enable_intx(vdev); + } + +-static void vfio_disable_msix(VFIODevice *vdev) ++static void vfio_disable_msix(VFIOPCIDevice *vdev) + { + int i; + +@@ -1039,7 +1039,7 @@ static void vfio_disable_msix(VFIODevice *vdev) + vdev->host.bus, vdev->host.slot, vdev->host.function); + } + +-static void vfio_disable_msi(VFIODevice *vdev) ++static void vfio_disable_msi(VFIOPCIDevice *vdev) + { + vfio_disable_irqindex(vdev, VFIO_PCI_MSI_IRQ_INDEX); + vfio_disable_msi_common(vdev); +@@ -1048,7 +1048,7 @@ static void vfio_disable_msi(VFIODevice *vdev) + vdev->host.bus, vdev->host.slot, vdev->host.function); + } + +-static void vfio_update_msi(VFIODevice *vdev) ++static void vfio_update_msi(VFIOPCIDevice *vdev) + { + int i; + +@@ -1101,7 +1101,7 @@ static void vfio_bar_write(void *opaque, hwaddr addr, + + #ifdef DEBUG_VFIO + { +- VFIODevice *vdev = container_of(bar, VFIODevice, bars[bar->nr]); ++ VFIOPCIDevice *vdev = container_of(bar, VFIOPCIDevice, bars[bar->nr]); + + DPRINTF("%s(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", 0x%"PRIx64 + ", %d)\n", __func__, vdev->host.domain, vdev->host.bus, +@@ -1118,7 +1118,7 @@ static void vfio_bar_write(void *opaque, hwaddr addr, + * which access will service the interrupt, so we're potentially + * getting quite a few host interrupts per guest interrupt. + */ +- vfio_eoi(container_of(bar, VFIODevice, bars[bar->nr])); ++ vfio_eoi(container_of(bar, VFIOPCIDevice, bars[bar->nr])); + } + + static uint64_t vfio_bar_read(void *opaque, +@@ -1156,7 +1156,7 @@ static uint64_t vfio_bar_read(void *opaque, + + #ifdef DEBUG_VFIO + { +- VFIODevice *vdev = container_of(bar, VFIODevice, bars[bar->nr]); ++ VFIOPCIDevice *vdev = container_of(bar, VFIOPCIDevice, bars[bar->nr]); + + DPRINTF("%s(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx + ", %d) = 0x%"PRIx64"\n", __func__, vdev->host.domain, +@@ -1166,7 +1166,7 @@ static uint64_t vfio_bar_read(void *opaque, + #endif + + /* Same as write above */ +- vfio_eoi(container_of(bar, VFIODevice, bars[bar->nr])); ++ vfio_eoi(container_of(bar, VFIOPCIDevice, bars[bar->nr])); + + return data; + } +@@ -1177,7 +1177,7 @@ static const MemoryRegionOps vfio_bar_ops = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static void vfio_pci_load_rom(VFIODevice *vdev) ++static void vfio_pci_load_rom(VFIOPCIDevice *vdev) + { + struct vfio_region_info reg_info = { + .argsz = sizeof(reg_info), +@@ -1235,7 +1235,7 @@ static void vfio_pci_load_rom(VFIODevice *vdev) + + static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) + { +- VFIODevice *vdev = opaque; ++ VFIOPCIDevice *vdev = opaque; + uint64_t val = ((uint64_t)1 << (size * 8)) - 1; + + /* Load the ROM lazily when the guest tries to read it */ +@@ -1264,7 +1264,7 @@ static const MemoryRegionOps vfio_rom_ops = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static bool vfio_blacklist_opt_rom(VFIODevice *vdev) ++static bool vfio_blacklist_opt_rom(VFIOPCIDevice *vdev) + { + PCIDevice *pdev = &vdev->pdev; + uint16_t vendor_id, device_id; +@@ -1284,7 +1284,7 @@ static bool vfio_blacklist_opt_rom(VFIODevice *vdev) + return false; + } + +-static void vfio_pci_size_rom(VFIODevice *vdev) ++static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + { + uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK); + off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; +@@ -1463,7 +1463,7 @@ static uint64_t vfio_generic_window_quirk_read(void *opaque, + hwaddr addr, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + uint64_t data; + + if (vfio_flags_enabled(quirk->data.flags, quirk->data.read_flags) && +@@ -1496,7 +1496,7 @@ static void vfio_generic_window_quirk_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + + if (ranges_overlap(addr, size, + quirk->data.address_offset, quirk->data.address_size)) { +@@ -1550,7 +1550,7 @@ static uint64_t vfio_generic_quirk_read(void *opaque, + hwaddr addr, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + hwaddr base = quirk->data.address_match & TARGET_PAGE_MASK; + hwaddr offset = quirk->data.address_match & ~TARGET_PAGE_MASK; + uint64_t data; +@@ -1580,7 +1580,7 @@ static void vfio_generic_quirk_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + hwaddr base = quirk->data.address_match & TARGET_PAGE_MASK; + hwaddr offset = quirk->data.address_match & ~TARGET_PAGE_MASK; + +@@ -1625,7 +1625,7 @@ static uint64_t vfio_ati_3c3_quirk_read(void *opaque, + hwaddr addr, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + uint64_t data = vfio_pci_read_config(&vdev->pdev, + PCI_BASE_ADDRESS_0 + (4 * 4) + 1, + size); +@@ -1639,7 +1639,7 @@ static const MemoryRegionOps vfio_ati_3c3_quirk = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static void vfio_vga_probe_ati_3c3_quirk(VFIODevice *vdev) ++static void vfio_vga_probe_ati_3c3_quirk(VFIOPCIDevice *vdev) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -1682,7 +1682,7 @@ static void vfio_vga_probe_ati_3c3_quirk(VFIODevice *vdev) + * that only read-only access is provided, but we drop writes when the window + * is enabled to config space nonetheless. + */ +-static void vfio_probe_ati_bar4_window_quirk(VFIODevice *vdev, int nr) ++static void vfio_probe_ati_bar4_window_quirk(VFIOPCIDevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -1718,7 +1718,7 @@ static void vfio_probe_ati_bar4_window_quirk(VFIODevice *vdev, int nr) + /* + * Trap the BAR2 MMIO window to config space as well. + */ +-static void vfio_probe_ati_bar2_4000_quirk(VFIODevice *vdev, int nr) ++static void vfio_probe_ati_bar2_4000_quirk(VFIOPCIDevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -1786,7 +1786,7 @@ static uint64_t vfio_nvidia_3d0_quirk_read(void *opaque, + hwaddr addr, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + PCIDevice *pdev = &vdev->pdev; + uint64_t data = vfio_vga_read(&vdev->vga.region[QEMU_PCI_VGA_IO_HI], + addr + quirk->data.base_offset, size); +@@ -1805,7 +1805,7 @@ static void vfio_nvidia_3d0_quirk_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ VFIOPCIDevice *vdev = quirk->vdev; + PCIDevice *pdev = &vdev->pdev; + + switch (quirk->data.flags) { +@@ -1852,7 +1852,7 @@ static const MemoryRegionOps vfio_nvidia_3d0_quirk = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static void vfio_vga_probe_nvidia_3d0_quirk(VFIODevice *vdev) ++static void vfio_vga_probe_nvidia_3d0_quirk(VFIOPCIDevice *vdev) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -1944,7 +1944,7 @@ static const MemoryRegionOps vfio_nvidia_bar5_window_quirk = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static void vfio_probe_nvidia_bar5_window_quirk(VFIODevice *vdev, int nr) ++static void vfio_probe_nvidia_bar5_window_quirk(VFIOPCIDevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -1984,7 +1984,7 @@ static void vfio_probe_nvidia_bar5_window_quirk(VFIODevice *vdev, int nr) + * + * Here's offset 0x88000... + */ +-static void vfio_probe_nvidia_bar0_88000_quirk(VFIODevice *vdev, int nr) ++static void vfio_probe_nvidia_bar0_88000_quirk(VFIOPCIDevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -2018,7 +2018,7 @@ static void vfio_probe_nvidia_bar0_88000_quirk(VFIODevice *vdev, int nr) + /* + * And here's the same for BAR0 offset 0x1800... + */ +-static void vfio_probe_nvidia_bar0_1800_quirk(VFIODevice *vdev, int nr) ++static void vfio_probe_nvidia_bar0_1800_quirk(VFIOPCIDevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; + VFIOQuirk *quirk; +@@ -2062,13 +2062,13 @@ static void vfio_probe_nvidia_bar0_1800_quirk(VFIODevice *vdev, int nr) + /* + * Common quirk probe entry points. + */ +-static void vfio_vga_quirk_setup(VFIODevice *vdev) ++static void vfio_vga_quirk_setup(VFIOPCIDevice *vdev) + { + vfio_vga_probe_ati_3c3_quirk(vdev); + vfio_vga_probe_nvidia_3d0_quirk(vdev); + } + +-static void vfio_vga_quirk_teardown(VFIODevice *vdev) ++static void vfio_vga_quirk_teardown(VFIOPCIDevice *vdev) + { + int i; + +@@ -2083,7 +2083,7 @@ static void vfio_vga_quirk_teardown(VFIODevice *vdev) + } + } + +-static void vfio_bar_quirk_setup(VFIODevice *vdev, int nr) ++static void vfio_bar_quirk_setup(VFIOPCIDevice *vdev, int nr) + { + vfio_probe_ati_bar4_window_quirk(vdev, nr); + vfio_probe_ati_bar2_4000_quirk(vdev, nr); +@@ -2092,7 +2092,7 @@ static void vfio_bar_quirk_setup(VFIODevice *vdev, int nr) + vfio_probe_nvidia_bar0_1800_quirk(vdev, nr); + } + +-static void vfio_bar_quirk_teardown(VFIODevice *vdev, int nr) ++static void vfio_bar_quirk_teardown(VFIOPCIDevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; + +@@ -2110,7 +2110,7 @@ static void vfio_bar_quirk_teardown(VFIODevice *vdev, int nr) + */ + static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) + { +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + uint32_t emu_bits = 0, emu_val = 0, phys_val = 0, val; + + memcpy(&emu_bits, vdev->emulated_config_bits + addr, len); +@@ -2145,7 +2145,7 @@ static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) + static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + uint32_t val, int len) + { +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + uint32_t val_le = cpu_to_le32(val); + + DPRINTF("%s(%04x:%02x:%02x.%x, @0x%x, 0x%x, len=0x%x)\n", __func__, +@@ -2365,7 +2365,7 @@ static void vfio_listener_release(VFIOContainer *container) + /* + * Interrupt setup + */ +-static void vfio_disable_interrupts(VFIODevice *vdev) ++static void vfio_disable_interrupts(VFIOPCIDevice *vdev) + { + /* + * More complicated than it looks. Disabling MSI/X transitions the +@@ -2383,7 +2383,7 @@ static void vfio_disable_interrupts(VFIODevice *vdev) + } + } + +-static int vfio_setup_msi(VFIODevice *vdev, int pos) ++static int vfio_setup_msi(VFIOPCIDevice *vdev, int pos) + { + uint16_t ctrl; + bool msi_64bit, msi_maskbit; +@@ -2423,7 +2423,7 @@ static int vfio_setup_msi(VFIODevice *vdev, int pos) + * need to first look for where the MSI-X table lives. So we + * unfortunately split MSI-X setup across two functions. + */ +-static int vfio_early_setup_msix(VFIODevice *vdev) ++static int vfio_early_setup_msix(VFIOPCIDevice *vdev) + { + uint8_t pos; + uint16_t ctrl; +@@ -2496,7 +2496,7 @@ static int vfio_early_setup_msix(VFIODevice *vdev) + return 0; + } + +-static int vfio_setup_msix(VFIODevice *vdev, int pos) ++static int vfio_setup_msix(VFIOPCIDevice *vdev, int pos) + { + int ret; + +@@ -2516,7 +2516,7 @@ static int vfio_setup_msix(VFIODevice *vdev, int pos) + return 0; + } + +-static void vfio_teardown_msi(VFIODevice *vdev) ++static void vfio_teardown_msi(VFIOPCIDevice *vdev) + { + msi_uninit(&vdev->pdev); + +@@ -2529,7 +2529,7 @@ static void vfio_teardown_msi(VFIODevice *vdev) + /* + * Resource setup + */ +-static void vfio_mmap_set_enabled(VFIODevice *vdev, bool enabled) ++static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled) + { + int i; + +@@ -2547,7 +2547,7 @@ static void vfio_mmap_set_enabled(VFIODevice *vdev, bool enabled) + } + } + +-static void vfio_unmap_bar(VFIODevice *vdev, int nr) ++static void vfio_unmap_bar(VFIOPCIDevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; + +@@ -2570,7 +2570,7 @@ static void vfio_unmap_bar(VFIODevice *vdev, int nr) + memory_region_destroy(&bar->mem); + } + +-static int vfio_mmap_bar(VFIODevice *vdev, VFIOBAR *bar, ++static int vfio_mmap_bar(VFIOPCIDevice *vdev, VFIOBAR *bar, + MemoryRegion *mem, MemoryRegion *submem, + void **map, size_t size, off_t offset, + const char *name) +@@ -2609,7 +2609,7 @@ empty_region: + return ret; + } + +-static void vfio_map_bar(VFIODevice *vdev, int nr) ++static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; + uint64_t size = bar->size; +@@ -2678,7 +2678,7 @@ static void vfio_map_bar(VFIODevice *vdev, int nr) + vfio_bar_quirk_setup(vdev, nr); + } + +-static void vfio_map_bars(VFIODevice *vdev) ++static void vfio_map_bars(VFIOPCIDevice *vdev) + { + int i; + +@@ -2710,7 +2710,7 @@ static void vfio_map_bars(VFIODevice *vdev) + } + } + +-static void vfio_unmap_bars(VFIODevice *vdev) ++static void vfio_unmap_bars(VFIOPCIDevice *vdev) + { + int i; + +@@ -2749,7 +2749,7 @@ static void vfio_set_word_bits(uint8_t *buf, uint16_t val, uint16_t mask) + pci_set_word(buf, (pci_get_word(buf) & ~mask) | val); + } + +-static void vfio_add_emulated_word(VFIODevice *vdev, int pos, ++static void vfio_add_emulated_word(VFIOPCIDevice *vdev, int pos, + uint16_t val, uint16_t mask) + { + vfio_set_word_bits(vdev->pdev.config + pos, val, mask); +@@ -2762,7 +2762,7 @@ static void vfio_set_long_bits(uint8_t *buf, uint32_t val, uint32_t mask) + pci_set_long(buf, (pci_get_long(buf) & ~mask) | val); + } + +-static void vfio_add_emulated_long(VFIODevice *vdev, int pos, ++static void vfio_add_emulated_long(VFIOPCIDevice *vdev, int pos, + uint32_t val, uint32_t mask) + { + vfio_set_long_bits(vdev->pdev.config + pos, val, mask); +@@ -2770,7 +2770,7 @@ static void vfio_add_emulated_long(VFIODevice *vdev, int pos, + vfio_set_long_bits(vdev->emulated_config_bits + pos, mask, mask); + } + +-static int vfio_setup_pcie_cap(VFIODevice *vdev, int pos, uint8_t size) ++static int vfio_setup_pcie_cap(VFIOPCIDevice *vdev, int pos, uint8_t size) + { + uint16_t flags; + uint8_t type; +@@ -2862,7 +2862,7 @@ static int vfio_setup_pcie_cap(VFIODevice *vdev, int pos, uint8_t size) + return pos; + } + +-static void vfio_check_pcie_flr(VFIODevice *vdev, uint8_t pos) ++static void vfio_check_pcie_flr(VFIOPCIDevice *vdev, uint8_t pos) + { + uint32_t cap = pci_get_long(vdev->pdev.config + pos + PCI_EXP_DEVCAP); + +@@ -2874,7 +2874,7 @@ static void vfio_check_pcie_flr(VFIODevice *vdev, uint8_t pos) + } + } + +-static void vfio_check_pm_reset(VFIODevice *vdev, uint8_t pos) ++static void vfio_check_pm_reset(VFIOPCIDevice *vdev, uint8_t pos) + { + uint16_t csr = pci_get_word(vdev->pdev.config + pos + PCI_PM_CTRL); + +@@ -2886,7 +2886,7 @@ static void vfio_check_pm_reset(VFIODevice *vdev, uint8_t pos) + } + } + +-static void vfio_check_af_flr(VFIODevice *vdev, uint8_t pos) ++static void vfio_check_af_flr(VFIOPCIDevice *vdev, uint8_t pos) + { + uint8_t cap = pci_get_byte(vdev->pdev.config + pos + PCI_AF_CAP); + +@@ -2898,7 +2898,7 @@ static void vfio_check_af_flr(VFIODevice *vdev, uint8_t pos) + } + } + +-static int vfio_add_std_cap(VFIODevice *vdev, uint8_t pos) ++static int vfio_add_std_cap(VFIOPCIDevice *vdev, uint8_t pos) + { + PCIDevice *pdev = &vdev->pdev; + uint8_t cap_id, next, size; +@@ -2973,7 +2973,7 @@ static int vfio_add_std_cap(VFIODevice *vdev, uint8_t pos) + return 0; + } + +-static int vfio_add_capabilities(VFIODevice *vdev) ++static int vfio_add_capabilities(VFIOPCIDevice *vdev) + { + PCIDevice *pdev = &vdev->pdev; + +@@ -2985,7 +2985,7 @@ static int vfio_add_capabilities(VFIODevice *vdev) + return vfio_add_std_cap(vdev, pdev->config[PCI_CAPABILITY_LIST]); + } + +-static void vfio_pci_pre_reset(VFIODevice *vdev) ++static void vfio_pci_pre_reset(VFIOPCIDevice *vdev) + { + PCIDevice *pdev = &vdev->pdev; + uint16_t cmd; +@@ -3022,7 +3022,7 @@ static void vfio_pci_pre_reset(VFIODevice *vdev) + vfio_pci_write_config(pdev, PCI_COMMAND, cmd, 2); + } + +-static void vfio_pci_post_reset(VFIODevice *vdev) ++static void vfio_pci_post_reset(VFIOPCIDevice *vdev) + { + vfio_enable_intx(vdev); + } +@@ -3034,7 +3034,7 @@ static bool vfio_pci_host_match(PCIHostDeviceAddress *host1, + host1->slot == host2->slot && host1->function == host2->function); + } + +-static int vfio_pci_hot_reset(VFIODevice *vdev, bool single) ++static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + { + VFIOGroup *group; + struct vfio_pci_hot_reset_info *info; +@@ -3084,7 +3084,7 @@ static int vfio_pci_hot_reset(VFIODevice *vdev, bool single) + /* Verify that we have all the groups required */ + for (i = 0; i < info->count; i++) { + PCIHostDeviceAddress host; +- VFIODevice *tmp; ++ VFIOPCIDevice *tmp; + + host.domain = devices[i].segment; + host.bus = devices[i].bus; +@@ -3176,7 +3176,7 @@ out: + /* Re-enable INTx on affected devices */ + for (i = 0; i < info->count; i++) { + PCIHostDeviceAddress host; +- VFIODevice *tmp; ++ VFIOPCIDevice *tmp; + + host.domain = devices[i].segment; + host.bus = devices[i].bus; +@@ -3226,12 +3226,12 @@ out_single: + * _one() will only do a hot reset for the one in-use devices case, calling + * _multi() will do nothing if a _one() would have been sufficient. + */ +-static int vfio_pci_hot_reset_one(VFIODevice *vdev) ++static int vfio_pci_hot_reset_one(VFIOPCIDevice *vdev) + { + return vfio_pci_hot_reset(vdev, true); + } + +-static int vfio_pci_hot_reset_multi(VFIODevice *vdev) ++static int vfio_pci_hot_reset_multi(VFIOPCIDevice *vdev) + { + return vfio_pci_hot_reset(vdev, false); + } +@@ -3239,7 +3239,7 @@ static int vfio_pci_hot_reset_multi(VFIODevice *vdev) + static void vfio_pci_reset_handler(void *opaque) + { + VFIOGroup *group; +- VFIODevice *vdev; ++ VFIOPCIDevice *vdev; + + QLIST_FOREACH(group, &group_list, next) { + QLIST_FOREACH(vdev, &group->device_list, next) { +@@ -3499,7 +3499,8 @@ static void vfio_put_group(VFIOGroup *group) + } + } + +-static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) ++static int vfio_get_device(VFIOGroup *group, const char *name, ++ VFIOPCIDevice *vdev) + { + struct vfio_device_info dev_info = { .argsz = sizeof(dev_info) }; + struct vfio_region_info reg_info = { .argsz = sizeof(reg_info) }; +@@ -3654,7 +3655,7 @@ error: + return ret; + } + +-static void vfio_put_device(VFIODevice *vdev) ++static void vfio_put_device(VFIOPCIDevice *vdev) + { + QLIST_REMOVE(vdev, next); + vdev->group = NULL; +@@ -3668,7 +3669,7 @@ static void vfio_put_device(VFIODevice *vdev) + + static void vfio_err_notifier_handler(void *opaque) + { +- VFIODevice *vdev = opaque; ++ VFIOPCIDevice *vdev = opaque; + + if (!event_notifier_test_and_clear(&vdev->err_notifier)) { + return; +@@ -3697,7 +3698,7 @@ static void vfio_err_notifier_handler(void *opaque) + * and continue after disabling error recovery support for the + * device. + */ +-static void vfio_register_err_notifier(VFIODevice *vdev) ++static void vfio_register_err_notifier(VFIOPCIDevice *vdev) + { + int ret; + int argsz; +@@ -3738,7 +3739,7 @@ static void vfio_register_err_notifier(VFIODevice *vdev) + g_free(irq_set); + } + +-static void vfio_unregister_err_notifier(VFIODevice *vdev) ++static void vfio_unregister_err_notifier(VFIOPCIDevice *vdev) + { + int argsz; + struct vfio_irq_set *irq_set; +@@ -3773,7 +3774,7 @@ static void vfio_unregister_err_notifier(VFIODevice *vdev) + + static void vfio_req_notifier_handler(void *opaque) + { +- VFIODevice *vdev = opaque; ++ VFIOPCIDevice *vdev = opaque; + + if (!event_notifier_test_and_clear(&vdev->req_notifier)) { + return; +@@ -3782,7 +3783,7 @@ static void vfio_req_notifier_handler(void *opaque) + qdev_unplug(&vdev->pdev.qdev, NULL); + } + +-static void vfio_register_req_notifier(VFIODevice *vdev) ++static void vfio_register_req_notifier(VFIOPCIDevice *vdev) + { + struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info), + .index = VFIO_PCI_REQ_IRQ_INDEX }; +@@ -3829,7 +3830,7 @@ static void vfio_register_req_notifier(VFIODevice *vdev) + g_free(irq_set); + } + +-static void vfio_unregister_req_notifier(VFIODevice *vdev) ++static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev) + { + int argsz; + struct vfio_irq_set *irq_set; +@@ -3864,7 +3865,7 @@ static void vfio_unregister_req_notifier(VFIODevice *vdev) + + static int vfio_initfn(PCIDevice *pdev) + { +- VFIODevice *pvdev, *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *pvdev, *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + VFIOGroup *group; + char path[PATH_MAX], iommu_group_path[PATH_MAX], *group_name; + ssize_t len; +@@ -4031,7 +4032,7 @@ out_put: + + static void vfio_exitfn(PCIDevice *pdev) + { +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + VFIOGroup *group = vdev->group; + + vfio_unregister_req_notifier(vdev); +@@ -4052,7 +4053,7 @@ static void vfio_exitfn(PCIDevice *pdev) + static void vfio_pci_reset(DeviceState *dev) + { + PCIDevice *pdev = DO_UPCAST(PCIDevice, qdev, dev); +- VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + + DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function); +@@ -4084,18 +4085,18 @@ post_reset: + } + + static Property vfio_pci_dev_properties[] = { +- DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIODevice, host), +- DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIODevice, ++ DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), ++ DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice, + intx.mmap_timeout, 1100), +- DEFINE_PROP_BIT("x-vga", VFIODevice, features, ++ DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, + VFIO_FEATURE_ENABLE_VGA_BIT, false), +- DEFINE_PROP_BIT("x-req", VFIODevice, features, ++ DEFINE_PROP_BIT("x-req", VFIOPCIDevice, features, + VFIO_FEATURE_ENABLE_REQ_BIT, true), +- DEFINE_PROP_INT32("bootindex", VFIODevice, bootindex, -1), ++ DEFINE_PROP_INT32("bootindex", VFIOPCIDevice, bootindex, -1), + /* + * TODO - support passed fds... is this necessary? +- * DEFINE_PROP_STRING("vfiofd", VFIODevice, vfiofd_name), +- * DEFINE_PROP_STRING("vfiogroupfd, VFIODevice, vfiogroupfd_name), ++ * DEFINE_PROP_STRING("vfiofd", VFIOPCIDevice, vfiofd_name), ++ * DEFINE_PROP_STRING("vfiogroupfd, VFIOPCIDevice, vfiogroupfd_name), + */ + DEFINE_PROP_END_OF_LIST(), + }; +@@ -4125,7 +4126,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) + static const TypeInfo vfio_pci_dev_info = { + .name = "vfio-pci", + .parent = TYPE_PCI_DEVICE, +- .instance_size = sizeof(VFIODevice), ++ .instance_size = sizeof(VFIOPCIDevice), + .class_init = vfio_pci_dev_class_init, + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-add-type-name-and-group-fields-in-VFIODe.patch b/SOURCES/kvm-hw-vfio-pci-add-type-name-and-group-fields-in-VFIODe.patch new file mode 100644 index 0000000..dd17e5d --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-add-type-name-and-group-fields-in-VFIODe.patch @@ -0,0 +1,136 @@ +From dde4b959d6722bc2ebc5cd247b4e21055d2f0abd Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:44:35 +0200 +Subject: [PATCH 05/27] hw/vfio/pci: add type, name and group fields in + VFIODevice + +RH-Author: Alex Williamson +Message-id: <20170929214435.16765.27045.stgit@gimli.home> +Patchwork-id: 76763 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 05/16] hw/vfio/pci: add type, name and group fields in VFIODevice +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: 462037c9e85b27149e71d7f5c7f41375ca6e47d5 + +Add 3 new fields in the VFIODevice struct. Type is set to +VFIO_DEVICE_TYPE_PCI. The type enum value will later be used +to discriminate between VFIO PCI and platform devices. The name is +set to domain:bus:slot:function. Currently used to test whether +the device already is attached to the group. Later on, the name +will be used to simplify all traces. The group is simply moved +from VFIOPCIDevice to VFIODevice. + +Signed-off-by: Eric Auger +[Fix g_strdup_printf() usage] +Signed-off-by: Alex Williamson + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 27 ++++++++++++++++++--------- + 1 file changed, 18 insertions(+), 9 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 340d967..cc151e2 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -55,6 +55,10 @@ + #define VFIO_ALLOW_KVM_MSI 1 + #define VFIO_ALLOW_KVM_MSIX 1 + ++enum { ++ VFIO_DEVICE_TYPE_PCI = 0, ++}; ++ + struct VFIOPCIDevice; + + typedef struct VFIOQuirk { +@@ -175,7 +179,10 @@ typedef struct VFIOMSIXInfo { + } VFIOMSIXInfo; + + typedef struct VFIODevice { ++ struct VFIOGroup *group; ++ char *name; + int fd; ++ int type; + } VFIODevice; + + typedef struct VFIOPCIDevice { +@@ -197,7 +204,6 @@ typedef struct VFIOPCIDevice { + VFIOVGA vga; /* 0xa0000, 0x3b0, 0x3c0 */ + PCIHostDeviceAddress host; + QLIST_ENTRY(VFIOPCIDevice) next; +- struct VFIOGroup *group; + EventNotifier err_notifier; + EventNotifier req_notifier; + uint32_t features; +@@ -3526,7 +3532,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + } + + vdev->vbasedev.fd = ret; +- vdev->group = group; ++ vdev->vbasedev.group = group; + QLIST_INSERT_HEAD(&group->device_list, vdev, next); + + /* Sanity check device */ +@@ -3658,7 +3664,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + error: + if (ret) { + QLIST_REMOVE(vdev, next); +- vdev->group = NULL; ++ vdev->vbasedev.group = NULL; + close(vdev->vbasedev.fd); + } + return ret; +@@ -3667,9 +3673,10 @@ error: + static void vfio_put_device(VFIOPCIDevice *vdev) + { + QLIST_REMOVE(vdev, next); +- vdev->group = NULL; ++ vdev->vbasedev.group = NULL; + DPRINTF("vfio_put_device: close vdev->vbasedev.fd\n"); + close(vdev->vbasedev.fd); ++ g_free(vdev->vbasedev.name); + if (vdev->msix) { + g_free(vdev->msix); + vdev->msix = NULL; +@@ -3904,6 +3911,11 @@ static int vfio_initfn(PCIDevice *pdev) + return -errno; + } + ++ vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI; ++ vdev->vbasedev.name = g_strdup_printf("%04x:%02x:%02x.%01x", ++ vdev->host.domain, vdev->host.bus, ++ vdev->host.slot, vdev->host.function); ++ + strncat(path, "iommu_group", sizeof(path) - strlen(path) - 1); + + len = readlink(path, iommu_group_path, sizeof(path)); +@@ -3934,10 +3946,7 @@ static int vfio_initfn(PCIDevice *pdev) + vdev->host.function); + + QLIST_FOREACH(pvdev, &group->device_list, next) { +- if (pvdev->host.domain == vdev->host.domain && +- pvdev->host.bus == vdev->host.bus && +- pvdev->host.slot == vdev->host.slot && +- pvdev->host.function == vdev->host.function) { ++ if (strcmp(pvdev->vbasedev.name, vdev->vbasedev.name) == 0) { + + error_report("vfio: error: device %s is already attached", path); + vfio_put_group(group); +@@ -4042,7 +4051,7 @@ out_put: + static void vfio_exitfn(PCIDevice *pdev) + { + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); +- VFIOGroup *group = vdev->group; ++ VFIOGroup *group = vdev->vbasedev.group; + + vfio_unregister_req_notifier(vdev); + vfio_unregister_err_notifier(vdev); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-generalize-mask-unmask-to-any-IRQ-index.patch b/SOURCES/kvm-hw-vfio-pci-generalize-mask-unmask-to-any-IRQ-index.patch new file mode 100644 index 0000000..c650b7e --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-generalize-mask-unmask-to-any-IRQ-index.patch @@ -0,0 +1,123 @@ +From c7e1a8da5c3576d962c10c7afc11b0146f6b9adc Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:44:24 +0200 +Subject: [PATCH 03/27] hw/vfio/pci: generalize mask/unmask to any IRQ index + +RH-Author: Alex Williamson +Message-id: <20170929214424.16765.25345.stgit@gimli.home> +Patchwork-id: 76761 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 03/16] hw/vfio/pci: generalize mask/unmask to any IRQ index +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: 079eb19cbb3079536788dfd58832824804815e48 + +To prepare for platform device introduction, rename vfio_mask_intx +and vfio_unmask_intx into vfio_mask_single_irqindex and respectively +unmask_single_irqindex. Also use a nex index parameter. + +With that name and prototype the function will be usable for other +indexes than VFIO_PCI_INTX_IRQ_INDEX. + +Signed-off-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index a1ca883..ed9b8c4 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -288,12 +288,12 @@ static void vfio_disable_irqindex(VFIOPCIDevice *vdev, int index) + /* + * INTx + */ +-static void vfio_unmask_intx(VFIOPCIDevice *vdev) ++static void vfio_unmask_single_irqindex(VFIOPCIDevice *vdev, int index) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), + .flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_UNMASK, +- .index = VFIO_PCI_INTX_IRQ_INDEX, ++ .index = index, + .start = 0, + .count = 1, + }; +@@ -302,12 +302,12 @@ static void vfio_unmask_intx(VFIOPCIDevice *vdev) + } + + #ifdef CONFIG_KVM /* Unused outside of CONFIG_KVM code */ +-static void vfio_mask_intx(VFIOPCIDevice *vdev) ++static void vfio_mask_single_irqindex(VFIOPCIDevice *vdev, int index) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), + .flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_MASK, +- .index = VFIO_PCI_INTX_IRQ_INDEX, ++ .index = index, + .start = 0, + .count = 1, + }; +@@ -376,7 +376,7 @@ static void vfio_eoi(VFIOPCIDevice *vdev) + + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); +- vfio_unmask_intx(vdev); ++ vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); + } + + static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) +@@ -399,7 +399,7 @@ static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + + /* Get to a known interrupt state */ + qemu_set_fd_handler(irqfd.fd, NULL, NULL, vdev); +- vfio_mask_intx(vdev); ++ vfio_mask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); + +@@ -437,7 +437,7 @@ static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + } + + /* Let'em rip */ +- vfio_unmask_intx(vdev); ++ vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); + + vdev->intx.kvm_accel = true; + +@@ -454,7 +454,7 @@ fail_irqfd: + event_notifier_cleanup(&vdev->intx.unmask); + fail: + qemu_set_fd_handler(irqfd.fd, vfio_intx_interrupt, NULL, vdev); +- vfio_unmask_intx(vdev); ++ vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); + #endif + } + +@@ -475,7 +475,7 @@ static void vfio_disable_intx_kvm(VFIOPCIDevice *vdev) + * Get to a known state, hardware masked, QEMU ready to accept new + * interrupts, QEMU IRQ de-asserted. + */ +- vfio_mask_intx(vdev); ++ vfio_mask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); + +@@ -493,7 +493,7 @@ static void vfio_disable_intx_kvm(VFIOPCIDevice *vdev) + vdev->intx.kvm_accel = false; + + /* If we've missed an event, let it re-fire through QEMU */ +- vfio_unmask_intx(vdev); ++ vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); + + DPRINTF("%s(%04x:%02x:%02x.%x) KVM INTx accel disabled\n", + __func__, vdev->host.domain, vdev->host.bus, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-handle-reset-at-VFIODevice.patch b/SOURCES/kvm-hw-vfio-pci-handle-reset-at-VFIODevice.patch new file mode 100644 index 0000000..07a343b --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-handle-reset-at-VFIODevice.patch @@ -0,0 +1,320 @@ +From f81cc30fefd469f19b2f4550d4453a8aaff3239a Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:44:49 +0200 +Subject: [PATCH 06/27] hw/vfio/pci: handle reset at VFIODevice + +RH-Author: Alex Williamson +Message-id: <20170929214449.16765.43500.stgit@gimli.home> +Patchwork-id: 76764 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 06/16] hw/vfio/pci: handle reset at VFIODevice +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: b47d8efa9f430c332bf96ce6eede169eb48422ad + +Since we can potentially have both PCI and platform devices in +the same VFIO group, this latter now owns a list of VFIODevices. +A unified reset handler, vfio_reset_handler, is registered, looping +through this VFIODevice list. 2 specialized operations are introduced +(vfio_compute_needs_reset and vfio_hot_reset_multi): they allow to +implement type specific behavior. also reset_works and needs_reset +VFIOPCIDevice fields are moved into VFIODevice. + +Signed-off-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 95 +++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 64 insertions(+), 31 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index cc151e2..3e559ed 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -178,13 +178,24 @@ typedef struct VFIOMSIXInfo { + void *mmap; + } VFIOMSIXInfo; + ++typedef struct VFIODeviceOps VFIODeviceOps; ++ + typedef struct VFIODevice { ++ QLIST_ENTRY(VFIODevice) next; + struct VFIOGroup *group; + char *name; + int fd; + int type; ++ bool reset_works; ++ bool needs_reset; ++ VFIODeviceOps *ops; + } VFIODevice; + ++struct VFIODeviceOps { ++ void (*vfio_compute_needs_reset)(VFIODevice *vdev); ++ int (*vfio_hot_reset_multi)(VFIODevice *vdev); ++}; ++ + typedef struct VFIOPCIDevice { + PCIDevice pdev; + VFIODevice vbasedev; +@@ -203,7 +214,6 @@ typedef struct VFIOPCIDevice { + VFIOBAR bars[PCI_NUM_REGIONS - 1]; /* No ROM */ + VFIOVGA vga; /* 0xa0000, 0x3b0, 0x3c0 */ + PCIHostDeviceAddress host; +- QLIST_ENTRY(VFIOPCIDevice) next; + EventNotifier err_notifier; + EventNotifier req_notifier; + uint32_t features; +@@ -213,13 +223,11 @@ typedef struct VFIOPCIDevice { + #define VFIO_FEATURE_ENABLE_REQ (1 << VFIO_FEATURE_ENABLE_REQ_BIT) + int32_t bootindex; + uint8_t pm_cap; +- bool reset_works; + bool has_vga; + bool pci_aer; + bool req_enabled; + bool has_flr; + bool has_pm_reset; +- bool needs_reset; + bool rom_read_failed; + } VFIOPCIDevice; + +@@ -227,7 +235,7 @@ typedef struct VFIOGroup { + int fd; + int groupid; + VFIOContainer *container; +- QLIST_HEAD(, VFIOPCIDevice) device_list; ++ QLIST_HEAD(, VFIODevice) device_list; + QLIST_ENTRY(VFIOGroup) next; + QLIST_ENTRY(VFIOGroup) container_next; + } VFIOGroup; +@@ -3064,7 +3072,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + single ? "one" : "multi"); + + vfio_pci_pre_reset(vdev); +- vdev->needs_reset = false; ++ vdev->vbasedev.needs_reset = false; + + info = g_malloc0(sizeof(*info)); + info->argsz = sizeof(*info); +@@ -3100,6 +3108,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + for (i = 0; i < info->count; i++) { + PCIHostDeviceAddress host; + VFIOPCIDevice *tmp; ++ VFIODevice *vbasedev_iter; + + host.domain = devices[i].segment; + host.bus = devices[i].bus; +@@ -3131,7 +3140,11 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + } + + /* Prep dependent devices for reset and clear our marker. */ +- QLIST_FOREACH(tmp, &group->device_list, next) { ++ QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { ++ if (vbasedev_iter->type != VFIO_DEVICE_TYPE_PCI) { ++ continue; ++ } ++ tmp = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev); + if (vfio_pci_host_match(&host, &tmp->host)) { + if (single) { + DPRINTF("vfio: found another in-use device " +@@ -3141,7 +3154,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + goto out_single; + } + vfio_pci_pre_reset(tmp); +- tmp->needs_reset = false; ++ tmp->vbasedev.needs_reset = false; + multi = true; + break; + } +@@ -3192,6 +3205,7 @@ out: + for (i = 0; i < info->count; i++) { + PCIHostDeviceAddress host; + VFIOPCIDevice *tmp; ++ VFIODevice *vbasedev_iter; + + host.domain = devices[i].segment; + host.bus = devices[i].bus; +@@ -3212,7 +3226,11 @@ out: + break; + } + +- QLIST_FOREACH(tmp, &group->device_list, next) { ++ QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { ++ if (vbasedev_iter->type != VFIO_DEVICE_TYPE_PCI) { ++ continue; ++ } ++ tmp = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev); + if (vfio_pci_host_match(&host, &tmp->host)) { + vfio_pci_post_reset(tmp); + break; +@@ -3246,28 +3264,40 @@ static int vfio_pci_hot_reset_one(VFIOPCIDevice *vdev) + return vfio_pci_hot_reset(vdev, true); + } + +-static int vfio_pci_hot_reset_multi(VFIOPCIDevice *vdev) ++static int vfio_pci_hot_reset_multi(VFIODevice *vbasedev) + { ++ VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev); + return vfio_pci_hot_reset(vdev, false); + } + +-static void vfio_pci_reset_handler(void *opaque) ++static void vfio_pci_compute_needs_reset(VFIODevice *vbasedev) ++{ ++ VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev); ++ if (!vbasedev->reset_works || (!vdev->has_flr && vdev->has_pm_reset)) { ++ vbasedev->needs_reset = true; ++ } ++} ++ ++static VFIODeviceOps vfio_pci_ops = { ++ .vfio_compute_needs_reset = vfio_pci_compute_needs_reset, ++ .vfio_hot_reset_multi = vfio_pci_hot_reset_multi, ++}; ++ ++static void vfio_reset_handler(void *opaque) + { + VFIOGroup *group; +- VFIOPCIDevice *vdev; ++ VFIODevice *vbasedev; + + QLIST_FOREACH(group, &group_list, next) { +- QLIST_FOREACH(vdev, &group->device_list, next) { +- if (!vdev->reset_works || (!vdev->has_flr && vdev->has_pm_reset)) { +- vdev->needs_reset = true; +- } ++ QLIST_FOREACH(vbasedev, &group->device_list, next) { ++ vbasedev->ops->vfio_compute_needs_reset(vbasedev); + } + } + + QLIST_FOREACH(group, &group_list, next) { +- QLIST_FOREACH(vdev, &group->device_list, next) { +- if (vdev->needs_reset) { +- vfio_pci_hot_reset_multi(vdev); ++ QLIST_FOREACH(vbasedev, &group->device_list, next) { ++ if (vbasedev->needs_reset) { ++ vbasedev->ops->vfio_hot_reset_multi(vbasedev); + } + } + } +@@ -3486,7 +3516,7 @@ static VFIOGroup *vfio_get_group(int groupid) + } + + if (QLIST_EMPTY(&group_list)) { +- qemu_register_reset(vfio_pci_reset_handler, NULL); ++ qemu_register_reset(vfio_reset_handler, NULL); + } + + QLIST_INSERT_HEAD(&group_list, group, next); +@@ -3510,7 +3540,7 @@ static void vfio_put_group(VFIOGroup *group) + g_free(group); + + if (QLIST_EMPTY(&group_list)) { +- qemu_unregister_reset(vfio_pci_reset_handler, NULL); ++ qemu_unregister_reset(vfio_reset_handler, NULL); + } + } + +@@ -3533,7 +3563,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + + vdev->vbasedev.fd = ret; + vdev->vbasedev.group = group; +- QLIST_INSERT_HEAD(&group->device_list, vdev, next); ++ QLIST_INSERT_HEAD(&group->device_list, &vdev->vbasedev, next); + + /* Sanity check device */ + ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_INFO, &dev_info); +@@ -3550,7 +3580,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + goto error; + } + +- vdev->reset_works = !!(dev_info.flags & VFIO_DEVICE_FLAGS_RESET); ++ vdev->vbasedev.reset_works = !!(dev_info.flags & VFIO_DEVICE_FLAGS_RESET); + + if (dev_info.num_regions < VFIO_PCI_CONFIG_REGION_INDEX + 1) { + error_report("vfio: unexpected number of io regions %u", +@@ -3663,7 +3693,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + + error: + if (ret) { +- QLIST_REMOVE(vdev, next); ++ QLIST_REMOVE(&vdev->vbasedev, next); + vdev->vbasedev.group = NULL; + close(vdev->vbasedev.fd); + } +@@ -3672,7 +3702,7 @@ error: + + static void vfio_put_device(VFIOPCIDevice *vdev) + { +- QLIST_REMOVE(vdev, next); ++ QLIST_REMOVE(&vdev->vbasedev, next); + vdev->vbasedev.group = NULL; + DPRINTF("vfio_put_device: close vdev->vbasedev.fd\n"); + close(vdev->vbasedev.fd); +@@ -3881,7 +3911,8 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev) + + static int vfio_initfn(PCIDevice *pdev) + { +- VFIOPCIDevice *pvdev, *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); ++ VFIODevice *vbasedev_iter; + VFIOGroup *group; + char path[PATH_MAX], iommu_group_path[PATH_MAX], *group_name; + ssize_t len; +@@ -3890,7 +3921,7 @@ static int vfio_initfn(PCIDevice *pdev) + int ret, i = 0; + + QLIST_FOREACH(group, &group_list, next) { +- QLIST_FOREACH(pvdev, &group->device_list, next) { ++ QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { + i++; + } + } +@@ -3911,6 +3942,8 @@ static int vfio_initfn(PCIDevice *pdev) + return -errno; + } + ++ vdev->vbasedev.ops = &vfio_pci_ops; ++ + vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI; + vdev->vbasedev.name = g_strdup_printf("%04x:%02x:%02x.%01x", + vdev->host.domain, vdev->host.bus, +@@ -3945,9 +3978,8 @@ static int vfio_initfn(PCIDevice *pdev) + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function); + +- QLIST_FOREACH(pvdev, &group->device_list, next) { +- if (strcmp(pvdev->vbasedev.name, vdev->vbasedev.name) == 0) { +- ++ QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { ++ if (strcmp(vbasedev_iter->name, vdev->vbasedev.name) == 0) { + error_report("vfio: error: device %s is already attached", path); + vfio_put_group(group); + return -EBUSY; +@@ -4078,7 +4110,8 @@ static void vfio_pci_reset(DeviceState *dev) + + vfio_pci_pre_reset(vdev); + +- if (vdev->reset_works && (vdev->has_flr || !vdev->has_pm_reset) && ++ if (vdev->vbasedev.reset_works && ++ (vdev->has_flr || !vdev->has_pm_reset) && + !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { + DPRINTF("%04x:%02x:%02x.%x FLR/VFIO_DEVICE_RESET\n", vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function); +@@ -4091,7 +4124,7 @@ static void vfio_pci_reset(DeviceState *dev) + } + + /* If nothing else works and the device supports PM reset, use it */ +- if (vdev->reset_works && vdev->has_pm_reset && ++ if (vdev->vbasedev.reset_works && vdev->has_pm_reset && + !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { + DPRINTF("%04x:%02x:%02x.%x PCI PM Reset\n", vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-introduce-minimalist-VFIODevice-with-fd.patch b/SOURCES/kvm-hw-vfio-pci-introduce-minimalist-VFIODevice-with-fd.patch new file mode 100644 index 0000000..3a89f16 --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-introduce-minimalist-VFIODevice-with-fd.patch @@ -0,0 +1,534 @@ +From ec24bb3a66429e7b1d086ab6f3597c550099831d Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:44:30 +0200 +Subject: [PATCH 04/27] hw/vfio/pci: introduce minimalist VFIODevice with fd + +RH-Author: Alex Williamson +Message-id: <20170929214430.16765.39580.stgit@gimli.home> +Patchwork-id: 76762 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 04/16] hw/vfio/pci: introduce minimalist VFIODevice with fd +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: 5546a621a8801351601537b311539486b9b3ee79 +RHEL: Include request notifier + +Introduce a new base VFIODevice strcut that will be used by both PCI +and Platform VFIO device. Move VFIOPCIDevice fd field there. Obviously +other fields from VFIOPCIDevice will be moved there but this patch +file is introduced to ease the review. + +Also vfio_mask_single_irqindex, vfio_unmask_single_irqindex, +vfio_disable_irqindex now take a VFIODevice handle as argument. + +Signed-off-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 123 +++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 66 insertions(+), 57 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index ed9b8c4..340d967 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -174,9 +174,13 @@ typedef struct VFIOMSIXInfo { + void *mmap; + } VFIOMSIXInfo; + ++typedef struct VFIODevice { ++ int fd; ++} VFIODevice; ++ + typedef struct VFIOPCIDevice { + PCIDevice pdev; +- int fd; ++ VFIODevice vbasedev; + VFIOINTx intx; + unsigned int config_size; + uint8_t *emulated_config_bits; /* QEMU emulated bits, little-endian */ +@@ -272,7 +276,7 @@ static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); + /* + * Common VFIO interrupt disable + */ +-static void vfio_disable_irqindex(VFIOPCIDevice *vdev, int index) ++static void vfio_disable_irqindex(VFIODevice *vbasedev, int index) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), +@@ -282,13 +286,13 @@ static void vfio_disable_irqindex(VFIOPCIDevice *vdev, int index) + .count = 0, + }; + +- ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); ++ ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); + } + + /* + * INTx + */ +-static void vfio_unmask_single_irqindex(VFIOPCIDevice *vdev, int index) ++static void vfio_unmask_single_irqindex(VFIODevice *vbasedev, int index) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), +@@ -298,11 +302,11 @@ static void vfio_unmask_single_irqindex(VFIOPCIDevice *vdev, int index) + .count = 1, + }; + +- ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); ++ ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); + } + + #ifdef CONFIG_KVM /* Unused outside of CONFIG_KVM code */ +-static void vfio_mask_single_irqindex(VFIOPCIDevice *vdev, int index) ++static void vfio_mask_single_irqindex(VFIODevice *vbasedev, int index) + { + struct vfio_irq_set irq_set = { + .argsz = sizeof(irq_set), +@@ -312,7 +316,7 @@ static void vfio_mask_single_irqindex(VFIOPCIDevice *vdev, int index) + .count = 1, + }; + +- ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); ++ ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); + } + #endif + +@@ -376,7 +380,7 @@ static void vfio_eoi(VFIOPCIDevice *vdev) + + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); +- vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + } + + static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) +@@ -399,7 +403,7 @@ static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + + /* Get to a known interrupt state */ + qemu_set_fd_handler(irqfd.fd, NULL, NULL, vdev); +- vfio_mask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_mask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); + +@@ -429,7 +433,7 @@ static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + + *pfd = irqfd.resamplefd; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + g_free(irq_set); + if (ret) { + error_report("vfio: Error: Failed to setup INTx unmask fd: %m"); +@@ -437,7 +441,7 @@ static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + } + + /* Let'em rip */ +- vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + + vdev->intx.kvm_accel = true; + +@@ -454,7 +458,7 @@ fail_irqfd: + event_notifier_cleanup(&vdev->intx.unmask); + fail: + qemu_set_fd_handler(irqfd.fd, vfio_intx_interrupt, NULL, vdev); +- vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + #endif + } + +@@ -475,7 +479,7 @@ static void vfio_disable_intx_kvm(VFIOPCIDevice *vdev) + * Get to a known state, hardware masked, QEMU ready to accept new + * interrupts, QEMU IRQ de-asserted. + */ +- vfio_mask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_mask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); + +@@ -493,7 +497,7 @@ static void vfio_disable_intx_kvm(VFIOPCIDevice *vdev) + vdev->intx.kvm_accel = false; + + /* If we've missed an event, let it re-fire through QEMU */ +- vfio_unmask_single_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + + DPRINTF("%s(%04x:%02x:%02x.%x) KVM INTx accel disabled\n", + __func__, vdev->host.domain, vdev->host.bus, +@@ -580,7 +584,7 @@ static int vfio_enable_intx(VFIOPCIDevice *vdev) + *pfd = event_notifier_get_fd(&vdev->intx.interrupt); + qemu_set_fd_handler(*pfd, vfio_intx_interrupt, NULL, vdev); + +- ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + g_free(irq_set); + if (ret) { + error_report("vfio: Error: Failed to setup INTx fd: %m"); +@@ -605,7 +609,7 @@ static void vfio_disable_intx(VFIOPCIDevice *vdev) + + qemu_del_timer(vdev->intx.mmap_timer); + vfio_disable_intx_kvm(vdev); +- vfio_disable_irqindex(vdev, VFIO_PCI_INTX_IRQ_INDEX); ++ vfio_disable_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); + vfio_mmap_set_enabled(vdev, true); +@@ -695,7 +699,7 @@ static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) + fds[i] = fd; + } + +- ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + + g_free(irq_set); + +@@ -792,7 +796,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + * increase them as needed. + */ + if (vdev->nr_vectors < nr + 1) { +- vfio_disable_irqindex(vdev, VFIO_PCI_MSIX_IRQ_INDEX); ++ vfio_disable_irqindex(&vdev->vbasedev, VFIO_PCI_MSIX_IRQ_INDEX); + vdev->nr_vectors = nr + 1; + ret = vfio_enable_vectors(vdev, true); + if (ret) { +@@ -820,7 +824,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + *pfd = event_notifier_get_fd(&vector->interrupt); + } + +- ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + g_free(irq_set); + if (ret) { + error_report("vfio: failed to modify vector, %d", ret); +@@ -871,7 +875,7 @@ static void vfio_msix_vector_release(PCIDevice *pdev, unsigned int nr) + + *pfd = event_notifier_get_fd(&vector->interrupt); + +- ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + + g_free(irq_set); + } +@@ -1030,7 +1034,7 @@ static void vfio_disable_msix(VFIOPCIDevice *vdev) + } + + if (vdev->nr_vectors) { +- vfio_disable_irqindex(vdev, VFIO_PCI_MSIX_IRQ_INDEX); ++ vfio_disable_irqindex(&vdev->vbasedev, VFIO_PCI_MSIX_IRQ_INDEX); + } + + vfio_disable_msi_common(vdev); +@@ -1041,7 +1045,7 @@ static void vfio_disable_msix(VFIOPCIDevice *vdev) + + static void vfio_disable_msi(VFIOPCIDevice *vdev) + { +- vfio_disable_irqindex(vdev, VFIO_PCI_MSI_IRQ_INDEX); ++ vfio_disable_irqindex(&vdev->vbasedev, VFIO_PCI_MSI_IRQ_INDEX); + vfio_disable_msi_common(vdev); + + DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +@@ -1187,7 +1191,7 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) + off_t off = 0; + size_t bytes; + +- if (ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info)) { ++ if (ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, ®_info)) { + error_report("vfio: Error getting ROM info: %m"); + return; + } +@@ -1217,7 +1221,8 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) + memset(vdev->rom, 0xff, size); + + while (size) { +- bytes = pread(vdev->fd, vdev->rom + off, size, vdev->rom_offset + off); ++ bytes = pread(vdev->vbasedev.fd, vdev->rom + off, ++ size, vdev->rom_offset + off); + if (bytes == 0) { + break; + } else if (bytes > 0) { +@@ -1290,6 +1295,7 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; + DeviceState *dev = DEVICE(vdev); + char name[32]; ++ int fd = vdev->vbasedev.fd; + + if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { + /* Since pci handles romfile, just print a message and return */ +@@ -1308,10 +1314,10 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + * Use the same size ROM BAR as the physical device. The contents + * will get filled in later when the guest tries to read it. + */ +- if (pread(vdev->fd, &orig, 4, offset) != 4 || +- pwrite(vdev->fd, &size, 4, offset) != 4 || +- pread(vdev->fd, &size, 4, offset) != 4 || +- pwrite(vdev->fd, &orig, 4, offset) != 4) { ++ if (pread(fd, &orig, 4, offset) != 4 || ++ pwrite(fd, &size, 4, offset) != 4 || ++ pread(fd, &size, 4, offset) != 4 || ++ pwrite(fd, &orig, 4, offset) != 4) { + error_report("%s(%04x:%02x:%02x.%x) failed: %m", + __func__, vdev->host.domain, vdev->host.bus, + vdev->host.slot, vdev->host.function); +@@ -2123,7 +2129,8 @@ static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) + if (~emu_bits & (0xffffffffU >> (32 - len * 8))) { + ssize_t ret; + +- ret = pread(vdev->fd, &phys_val, len, vdev->config_offset + addr); ++ ret = pread(vdev->vbasedev.fd, &phys_val, len, ++ vdev->config_offset + addr); + if (ret != len) { + error_report("%s(%04x:%02x:%02x.%x, 0x%x, 0x%x) failed: %m", + __func__, vdev->host.domain, vdev->host.bus, +@@ -2153,7 +2160,8 @@ static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + vdev->host.function, addr, val, len); + + /* Write everything to VFIO, let it filter out what we can't write */ +- if (pwrite(vdev->fd, &val_le, len, vdev->config_offset + addr) != len) { ++ if (pwrite(vdev->vbasedev.fd, &val_le, len, vdev->config_offset + addr) ++ != len) { + error_report("%s(%04x:%02x:%02x.%x, 0x%x, 0x%x, 0x%x) failed: %m", + __func__, vdev->host.domain, vdev->host.bus, + vdev->host.slot, vdev->host.function, addr, val, len); +@@ -2389,7 +2397,7 @@ static int vfio_setup_msi(VFIOPCIDevice *vdev, int pos) + bool msi_64bit, msi_maskbit; + int ret, entries; + +- if (pread(vdev->fd, &ctrl, sizeof(ctrl), ++ if (pread(vdev->vbasedev.fd, &ctrl, sizeof(ctrl), + vdev->config_offset + pos + PCI_CAP_FLAGS) != sizeof(ctrl)) { + return -errno; + } +@@ -2428,23 +2436,24 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev) + uint8_t pos; + uint16_t ctrl; + uint32_t table, pba; ++ int fd = vdev->vbasedev.fd; + + pos = pci_find_capability(&vdev->pdev, PCI_CAP_ID_MSIX); + if (!pos) { + return 0; + } + +- if (pread(vdev->fd, &ctrl, sizeof(ctrl), ++ if (pread(fd, &ctrl, sizeof(ctrl), + vdev->config_offset + pos + PCI_CAP_FLAGS) != sizeof(ctrl)) { + return -errno; + } + +- if (pread(vdev->fd, &table, sizeof(table), ++ if (pread(fd, &table, sizeof(table), + vdev->config_offset + pos + PCI_MSIX_TABLE) != sizeof(table)) { + return -errno; + } + +- if (pread(vdev->fd, &pba, sizeof(pba), ++ if (pread(fd, &pba, sizeof(pba), + vdev->config_offset + pos + PCI_MSIX_PBA) != sizeof(pba)) { + return -errno; + } +@@ -2628,7 +2637,7 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + vdev->host.function, nr); + + /* Determine what type of BAR this is for registration */ +- ret = pread(vdev->fd, &pci_bar, sizeof(pci_bar), ++ ret = pread(vdev->vbasedev.fd, &pci_bar, sizeof(pci_bar), + vdev->config_offset + PCI_BASE_ADDRESS_0 + (4 * nr)); + if (ret != sizeof(pci_bar)) { + error_report("vfio: Failed to read BAR %d (%m)", nr); +@@ -3054,7 +3063,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + info = g_malloc0(sizeof(*info)); + info->argsz = sizeof(*info); + +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_PCI_HOT_RESET_INFO, info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_PCI_HOT_RESET_INFO, info); + if (ret && errno != ENOSPC) { + ret = -errno; + if (!vdev->has_pm_reset) { +@@ -3070,7 +3079,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + info->argsz = sizeof(*info) + (count * sizeof(*devices)); + devices = &info->devices[0]; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_PCI_HOT_RESET_INFO, info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_PCI_HOT_RESET_INFO, info); + if (ret) { + ret = -errno; + error_report("vfio: hot reset info failed: %m"); +@@ -3165,7 +3174,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + } + + /* Bus reset! */ +- ret = ioctl(vdev->fd, VFIO_DEVICE_PCI_HOT_RESET, reset); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_PCI_HOT_RESET, reset); + g_free(reset); + + DPRINTF("%04x:%02x:%02x.%x hot reset: %s\n", vdev->host.domain, +@@ -3516,12 +3525,12 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + return ret; + } + +- vdev->fd = ret; ++ vdev->vbasedev.fd = ret; + vdev->group = group; + QLIST_INSERT_HEAD(&group->device_list, vdev, next); + + /* Sanity check device */ +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_INFO, &dev_info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_INFO, &dev_info); + if (ret) { + error_report("vfio: error getting device info: %m"); + goto error; +@@ -3551,7 +3560,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + for (i = VFIO_PCI_BAR0_REGION_INDEX; i < VFIO_PCI_ROM_REGION_INDEX; i++) { + reg_info.index = i; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); + if (ret) { + error_report("vfio: Error getting region %d info: %m", i); + goto error; +@@ -3565,14 +3574,14 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + vdev->bars[i].flags = reg_info.flags; + vdev->bars[i].size = reg_info.size; + vdev->bars[i].fd_offset = reg_info.offset; +- vdev->bars[i].fd = vdev->fd; ++ vdev->bars[i].fd = vdev->vbasedev.fd; + vdev->bars[i].nr = i; + QLIST_INIT(&vdev->bars[i].quirks); + } + + reg_info.index = VFIO_PCI_CONFIG_REGION_INDEX; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); + if (ret) { + error_report("vfio: Error getting config info: %m"); + goto error; +@@ -3596,7 +3605,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + .index = VFIO_PCI_VGA_REGION_INDEX, + }; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, &vga_info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, &vga_info); + if (ret) { + error_report( + "vfio: Device does not support requested feature x-vga"); +@@ -3613,7 +3622,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + } + + vdev->vga.fd_offset = vga_info.offset; +- vdev->vga.fd = vdev->fd; ++ vdev->vga.fd = vdev->vbasedev.fd; + + vdev->vga.region[QEMU_PCI_VGA_MEM].offset = QEMU_PCI_VGA_MEM_BASE; + vdev->vga.region[QEMU_PCI_VGA_MEM].nr = QEMU_PCI_VGA_MEM; +@@ -3632,7 +3641,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + + irq_info.index = VFIO_PCI_ERR_IRQ_INDEX; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); + if (ret) { + /* This can fail for an old kernel or legacy PCI dev */ + DPRINTF("VFIO_DEVICE_GET_IRQ_INFO failure: %m\n"); +@@ -3650,7 +3659,7 @@ error: + if (ret) { + QLIST_REMOVE(vdev, next); + vdev->group = NULL; +- close(vdev->fd); ++ close(vdev->vbasedev.fd); + } + return ret; + } +@@ -3659,8 +3668,8 @@ static void vfio_put_device(VFIOPCIDevice *vdev) + { + QLIST_REMOVE(vdev, next); + vdev->group = NULL; +- DPRINTF("vfio_put_device: close vdev->fd\n"); +- close(vdev->fd); ++ DPRINTF("vfio_put_device: close vdev->vbasedev.fd\n"); ++ close(vdev->vbasedev.fd); + if (vdev->msix) { + g_free(vdev->msix); + vdev->msix = NULL; +@@ -3729,7 +3738,7 @@ static void vfio_register_err_notifier(VFIOPCIDevice *vdev) + *pfd = event_notifier_get_fd(&vdev->err_notifier); + qemu_set_fd_handler(*pfd, vfio_err_notifier_handler, NULL, vdev); + +- ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + if (ret) { + error_report("vfio: Failed to set up error notification"); + qemu_set_fd_handler(*pfd, NULL, NULL, vdev); +@@ -3762,7 +3771,7 @@ static void vfio_unregister_err_notifier(VFIOPCIDevice *vdev) + pfd = (int32_t *)&irq_set->data; + *pfd = -1; + +- ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set); + if (ret) { + error_report("vfio: Failed to de-assign error fd: %m"); + } +@@ -3795,7 +3804,7 @@ static void vfio_register_req_notifier(VFIOPCIDevice *vdev) + return; + } + +- if (ioctl(vdev->fd, ++ if (ioctl(vdev->vbasedev.fd, + VFIO_DEVICE_GET_IRQ_INFO, &irq_info) < 0 || irq_info.count < 1) { + return; + } +@@ -3819,7 +3828,7 @@ static void vfio_register_req_notifier(VFIOPCIDevice *vdev) + *pfd = event_notifier_get_fd(&vdev->req_notifier); + qemu_set_fd_handler(*pfd, vfio_req_notifier_handler, NULL, vdev); + +- if (ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) { ++ if (ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set)) { + error_report("vfio: Failed to set up device request notification"); + qemu_set_fd_handler(*pfd, NULL, NULL, vdev); + event_notifier_cleanup(&vdev->req_notifier); +@@ -3852,7 +3861,7 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev) + pfd = (int32_t *)&irq_set->data; + *pfd = -1; + +- if (ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) { ++ if (ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set)) { + error_report("vfio: Failed to de-assign device request fd: %m"); + } + g_free(irq_set); +@@ -3944,7 +3953,7 @@ static int vfio_initfn(PCIDevice *pdev) + } + + /* Get a copy of config space */ +- ret = pread(vdev->fd, vdev->pdev.config, ++ ret = pread(vdev->vbasedev.fd, vdev->pdev.config, + MIN(pci_config_size(&vdev->pdev), vdev->config_size), + vdev->config_offset); + if (ret < (int)MIN(pci_config_size(&vdev->pdev), vdev->config_size)) { +@@ -4061,7 +4070,7 @@ static void vfio_pci_reset(DeviceState *dev) + vfio_pci_pre_reset(vdev); + + if (vdev->reset_works && (vdev->has_flr || !vdev->has_pm_reset) && +- !ioctl(vdev->fd, VFIO_DEVICE_RESET)) { ++ !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { + DPRINTF("%04x:%02x:%02x.%x FLR/VFIO_DEVICE_RESET\n", vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function); + goto post_reset; +@@ -4074,7 +4083,7 @@ static void vfio_pci_reset(DeviceState *dev) + + /* If nothing else works and the device supports PM reset, use it */ + if (vdev->reset_works && vdev->has_pm_reset && +- !ioctl(vdev->fd, VFIO_DEVICE_RESET)) { ++ !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { + DPRINTF("%04x:%02x:%02x.%x PCI PM Reset\n", vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function); + goto post_reset; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-hw-vfio-pci-use-name-field-in-format-strings.patch b/SOURCES/kvm-hw-vfio-pci-use-name-field-in-format-strings.patch new file mode 100644 index 0000000..958cbb7 --- /dev/null +++ b/SOURCES/kvm-hw-vfio-pci-use-name-field-in-format-strings.patch @@ -0,0 +1,550 @@ +From 38023d511ff6770e4ff1d2a4e3fdcc3820a45b3f Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:08 +0200 +Subject: [PATCH 08/27] hw/vfio/pci: use name field in format strings + +RH-Author: Alex Williamson +Message-id: <20170929214508.16765.18033.stgit@gimli.home> +Patchwork-id: 76766 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 08/16] hw/vfio/pci: use name field in format strings +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: df92ee444884ba66b5cc95e3ff3d5579f89ed4aa + +Signed-off-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 193 ++++++++++++++++++++------------------------------------- + 1 file changed, 68 insertions(+), 125 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 92414b9..0d88313 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -375,8 +375,7 @@ static void vfio_intx_interrupt(void *opaque) + return; + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) Pin %c\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, ++ DPRINTF("%s(%s) Pin %c\n", __func__, vdev->vbasedev.name, + 'A' + vdev->intx.pin); + + vdev->intx.pending = true; +@@ -396,8 +395,7 @@ static void vfio_eoi(VFIODevice *vbasedev) + return; + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) EOI\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s) EOI\n", __func__, vbasedev->name); + + vdev->intx.pending = false; + qemu_set_irq(vdev->pdev.irq[vdev->intx.pin], 0); +@@ -466,9 +464,7 @@ static void vfio_enable_intx_kvm(VFIOPCIDevice *vdev) + + vdev->intx.kvm_accel = true; + +- DPRINTF("%s(%04x:%02x:%02x.%x) KVM INTx accel enabled\n", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s) KVM INTx accel enabled\n", __func__, vdev->vbasedev.name); + + return; + +@@ -520,9 +516,7 @@ static void vfio_disable_intx_kvm(VFIOPCIDevice *vdev) + /* If we've missed an event, let it re-fire through QEMU */ + vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + +- DPRINTF("%s(%04x:%02x:%02x.%x) KVM INTx accel disabled\n", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s) KVM INTx accel disabled\n", __func__, vdev->vbasedev.name); + #endif + } + +@@ -541,9 +535,8 @@ static void vfio_update_irq(PCIDevice *pdev) + return; /* Nothing changed */ + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) IRQ moved %d -> %d\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, vdev->intx.route.irq, route.irq); ++ DPRINTF("%s(%s) IRQ moved %d -> %d\n", __func__, ++ vdev->vbasedev.name, vdev->intx.route.irq, route.irq); + + vfio_disable_intx_kvm(vdev); + +@@ -618,8 +611,7 @@ static int vfio_enable_intx(VFIOPCIDevice *vdev) + + vdev->interrupt = VFIO_INT_INTx; + +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + + return 0; + } +@@ -641,8 +633,7 @@ static void vfio_disable_intx(VFIOPCIDevice *vdev) + + vdev->interrupt = VFIO_INT_NONE; + +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + } + + /* +@@ -669,9 +660,8 @@ static void vfio_msi_interrupt(void *opaque) + abort(); + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) vector %d 0x%"PRIx64"/0x%x\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, nr, msg.address, msg.data); ++ DPRINTF("%s(%s) vector %d 0x%"PRIx64"/0x%x\n", __func__, ++ vdev->vbasedev.name, nr, msg.address, msg.data); + #endif + + if (vdev->interrupt == VFIO_INT_MSIX) { +@@ -778,9 +768,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + VFIOMSIVector *vector; + int ret; + +- DPRINTF("%s(%04x:%02x:%02x.%x) vector %d used\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, nr); ++ DPRINTF("%s(%s) vector %d used\n", __func__, vdev->vbasedev.name, nr); + + vector = &vdev->msi_vectors[nr]; + +@@ -866,9 +854,7 @@ static void vfio_msix_vector_release(PCIDevice *pdev, unsigned int nr) + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + VFIOMSIVector *vector = &vdev->msi_vectors[nr]; + +- DPRINTF("%s(%04x:%02x:%02x.%x) vector %d released\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, nr); ++ DPRINTF("%s(%s) vector %d released\n", __func__, vdev->vbasedev.name, nr); + + /* + * There are still old guests that mask and unmask vectors on every +@@ -931,8 +917,7 @@ static void vfio_enable_msix(VFIOPCIDevice *vdev) + error_report("vfio: msix_set_vector_notifiers failed"); + } + +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + } + + static void vfio_enable_msi(VFIOPCIDevice *vdev) +@@ -1008,9 +993,8 @@ retry: + return; + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) Enabled %d MSI vectors\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, vdev->nr_vectors); ++ DPRINTF("%s(%s) Enabled %d MSI vectors\n", __func__, ++ vdev->vbasedev.name, vdev->nr_vectors); + } + + static void vfio_disable_msi_common(VFIOPCIDevice *vdev) +@@ -1060,8 +1044,7 @@ static void vfio_disable_msix(VFIOPCIDevice *vdev) + + vfio_disable_msi_common(vdev); + +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + } + + static void vfio_disable_msi(VFIOPCIDevice *vdev) +@@ -1069,8 +1052,7 @@ static void vfio_disable_msi(VFIOPCIDevice *vdev) + vfio_disable_irqindex(&vdev->vbasedev, VFIO_PCI_MSI_IRQ_INDEX); + vfio_disable_msi_common(vdev); + +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + } + + static void vfio_update_msi(VFIOPCIDevice *vdev) +@@ -1206,8 +1188,7 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) + return; + } + +- DPRINTF("Device %04x:%02x:%02x.%x ROM:\n", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("Device %s ROM:\n", vdev->vbasedev.name); + DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", + (unsigned long)reg_info.size, (unsigned long)reg_info.offset, + (unsigned long)reg_info.flags); +@@ -1218,9 +1199,7 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) + if (!vdev->rom_size) { + vdev->rom_read_failed = true; + error_report("vfio-pci: Cannot read device rom at " +- "%04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ "%s\n", vdev->vbasedev.name); + error_printf("Device option ROM contents are probably invalid " + "(check dmesg).\nSkip option ROM probe with rombar=0, " + "or load from file with romfile=\n"); +@@ -1261,9 +1240,8 @@ static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) + memcpy(&val, vdev->rom + addr, + (addr < vdev->rom_size) ? MIN(size, vdev->rom_size - addr) : 0); + +- DPRINTF("%s(%04x:%02x:%02x.%x, 0x%"HWADDR_PRIx", 0x%x) = 0x%"PRIx64"\n", +- __func__, vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, addr, size, val); ++ DPRINTF("%s(%s, 0x%"HWADDR_PRIx", 0x%x) = 0x%"PRIx64"\n", ++ __func__, vdev->vbasedev.name, addr, size, val); + + return val; + } +@@ -1360,8 +1338,7 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + } + } + +- DPRINTF("%04x:%02x:%02x.%x ROM size 0x%x\n", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, size); ++ DPRINTF("%s ROM size 0x%x\n", vdev->vbasedev.name, size); + + snprintf(name, sizeof(name), "vfio[%04x:%02x:%02x.%x].rom", + vdev->host.domain, vdev->host.bus, vdev->host.slot, +@@ -1496,10 +1473,9 @@ static uint64_t vfio_generic_window_quirk_read(void *opaque, + data = vfio_pci_read_config(&vdev->pdev, + quirk->data.address_val + offset, size); + +- DPRINTF("%s read(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%" +- PRIx64"\n", memory_region_name(&quirk->mem), vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, +- quirk->data.bar, addr, size, data); ++ DPRINTF("%s read(%s:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%" ++ PRIx64"\n", memory_region_name(&quirk->mem), ++ vdev->vbasedev.name, quirk->data.bar, addr, size, data); + } else { + data = vfio_region_read(&vdev->bars[quirk->data.bar].region, + addr + quirk->data.base_offset, size); +@@ -1545,10 +1521,9 @@ static void vfio_generic_window_quirk_write(void *opaque, hwaddr addr, + + vfio_pci_write_config(&vdev->pdev, + quirk->data.address_val + offset, data, size); +- DPRINTF("%s write(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", 0x%" ++ DPRINTF("%s write(%s:BAR%d+0x%"HWADDR_PRIx", 0x%" + PRIx64", %d)\n", memory_region_name(&quirk->mem), +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, quirk->data.bar, addr, data, size); ++ vdev->vbasedev.name, quirk->data.bar, addr, data, size); + return; + } + +@@ -1581,10 +1556,9 @@ static uint64_t vfio_generic_quirk_read(void *opaque, + + data = vfio_pci_read_config(&vdev->pdev, addr - offset, size); + +- DPRINTF("%s read(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%" +- PRIx64"\n", memory_region_name(&quirk->mem), vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, +- quirk->data.bar, addr + base, size, data); ++ DPRINTF("%s read(%s:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%" ++ PRIx64"\n", memory_region_name(&quirk->mem), ++ vdev->vbasedev.name, quirk->data.bar, addr + base, size, data); + } else { + data = vfio_region_read(&vdev->bars[quirk->data.bar].region, + addr + base, size); +@@ -1611,10 +1585,9 @@ static void vfio_generic_quirk_write(void *opaque, hwaddr addr, + + vfio_pci_write_config(&vdev->pdev, addr - offset, data, size); + +- DPRINTF("%s write(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", 0x%" ++ DPRINTF("%s write(%s:BAR%d+0x%"HWADDR_PRIx", 0x%" + PRIx64", %d)\n", memory_region_name(&quirk->mem), +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, quirk->data.bar, addr + base, data, size); ++ vdev->vbasedev.name, quirk->data.bar, addr + base, data, size); + } else { + vfio_region_write(&vdev->bars[quirk->data.bar].region, + addr + base, data, size); +@@ -1685,9 +1658,8 @@ static void vfio_vga_probe_ati_3c3_quirk(VFIOPCIDevice *vdev) + QLIST_INSERT_HEAD(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].quirks, + quirk, next); + +- DPRINTF("Enabled ATI/AMD quirk 0x3c3 BAR4for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled ATI/AMD quirk 0x3c3 BAR4for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -1728,9 +1700,8 @@ static void vfio_probe_ati_bar4_window_quirk(VFIOPCIDevice *vdev, int nr) + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- DPRINTF("Enabled ATI/AMD BAR4 window quirk for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled ATI/AMD BAR4 window quirk for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -1763,9 +1734,8 @@ static void vfio_probe_ati_bar2_4000_quirk(VFIOPCIDevice *vdev, int nr) + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- DPRINTF("Enabled ATI/AMD BAR2 0x4000 quirk for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled ATI/AMD BAR2 0x4000 quirk for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -1898,9 +1868,8 @@ static void vfio_vga_probe_nvidia_3d0_quirk(VFIOPCIDevice *vdev) + QLIST_INSERT_HEAD(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].quirks, + quirk, next); + +- DPRINTF("Enabled NVIDIA VGA 0x3d0 quirk for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled NVIDIA VGA 0x3d0 quirk for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -1989,9 +1958,8 @@ static void vfio_probe_nvidia_bar5_window_quirk(VFIOPCIDevice *vdev, int nr) + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- DPRINTF("Enabled NVIDIA BAR5 window quirk for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled NVIDIA BAR5 window quirk for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -2029,9 +1997,8 @@ static void vfio_probe_nvidia_bar0_88000_quirk(VFIOPCIDevice *vdev, int nr) + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- DPRINTF("Enabled NVIDIA BAR0 0x88000 quirk for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled NVIDIA BAR0 0x88000 quirk for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -2068,9 +2035,8 @@ static void vfio_probe_nvidia_bar0_1800_quirk(VFIOPCIDevice *vdev, int nr) + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- DPRINTF("Enabled NVIDIA BAR0 0x1800 quirk for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("Enabled NVIDIA BAR0 0x1800 quirk for device %s\n", ++ vdev->vbasedev.name); + } + + /* +@@ -2156,9 +2122,8 @@ static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) + + val = (emu_val & emu_bits) | (phys_val & ~emu_bits); + +- DPRINTF("%s(%04x:%02x:%02x.%x, @0x%x, len=0x%x) %x\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, addr, len, val); ++ DPRINTF("%s(%s, @0x%x, len=0x%x) %x\n", __func__, ++ vdev->vbasedev.name, addr, len, val); + + return val; + } +@@ -2169,9 +2134,8 @@ static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + uint32_t val_le = cpu_to_le32(val); + +- DPRINTF("%s(%04x:%02x:%02x.%x, @0x%x, 0x%x, len=0x%x)\n", __func__, +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, addr, val, len); ++ DPRINTF("%s(%s, @0x%x, 0x%x, len=0x%x)\n", __func__, ++ vdev->vbasedev.name, addr, val, len); + + /* Write everything to VFIO, let it filter out what we can't write */ + if (pwrite(vdev->vbasedev.fd, &val_le, len, vdev->config_offset + addr) +@@ -2421,8 +2385,7 @@ static int vfio_setup_msi(VFIOPCIDevice *vdev, int pos) + msi_maskbit = !!(ctrl & PCI_MSI_FLAGS_MASKBIT); + entries = 1 << ((ctrl & PCI_MSI_FLAGS_QMASK) >> 1); + +- DPRINTF("%04x:%02x:%02x.%x PCI MSI CAP @0x%x\n", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, pos); ++ DPRINTF("%s PCI MSI CAP @0x%x\n", vdev->vbasedev.name, pos); + + ret = msi_init(&vdev->pdev, pos, entries, msi_64bit, msi_maskbit); + if (ret < 0) { +@@ -2483,10 +2446,8 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev) + vdev->msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK; + vdev->msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1; + +- DPRINTF("%04x:%02x:%02x.%x " +- "PCI MSI-X CAP @0x%x, BAR %d, offset 0x%x, entries %d\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, pos, vdev->msix->table_bar, ++ DPRINTF("%s PCI MSI-X CAP @0x%x, BAR %d, offset 0x%x, entries %d\n", ++ vdev->vbasedev.name, pos, vdev->msix->table_bar, + vdev->msix->table_offset, vdev->msix->entries); + + /* +@@ -2895,9 +2856,7 @@ static void vfio_check_pcie_flr(VFIOPCIDevice *vdev, uint8_t pos) + uint32_t cap = pci_get_long(vdev->pdev.config + pos + PCI_EXP_DEVCAP); + + if (cap & PCI_EXP_DEVCAP_FLR) { +- DPRINTF("%04x:%02x:%02x.%x Supports FLR via PCIe cap\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("%s Supports FLR via PCIe cap\n", vdev->vbasedev.name); + vdev->has_flr = true; + } + } +@@ -2907,9 +2866,7 @@ static void vfio_check_pm_reset(VFIOPCIDevice *vdev, uint8_t pos) + uint16_t csr = pci_get_word(vdev->pdev.config + pos + PCI_PM_CTRL); + + if (!(csr & PCI_PM_CTRL_NO_SOFT_RESET)) { +- DPRINTF("%04x:%02x:%02x.%x Supports PM reset\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("%s Supports PM reset\n", vdev->vbasedev.name); + vdev->has_pm_reset = true; + } + } +@@ -2919,9 +2876,7 @@ static void vfio_check_af_flr(VFIOPCIDevice *vdev, uint8_t pos) + uint8_t cap = pci_get_byte(vdev->pdev.config + pos + PCI_AF_CAP); + + if ((cap & PCI_AF_CAP_TP) && (cap & PCI_AF_CAP_FLR)) { +- DPRINTF("%04x:%02x:%02x.%x Supports FLR via AF cap\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("%s Supports FLR via AF cap\n", vdev->vbasedev.name); + vdev->has_flr = true; + } + } +@@ -3072,8 +3027,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + int ret, i, count; + bool multi = false; + +- DPRINTF("%s(%04x:%02x:%02x.%x) %s\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, ++ DPRINTF("%s(%s) %s\n", __func__, vdev->vbasedev.name, + single ? "one" : "multi"); + + vfio_pci_pre_reset(vdev); +@@ -3105,9 +3059,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + goto out_single; + } + +- DPRINTF("%04x:%02x:%02x.%x: hot reset dependent devices:\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ DPRINTF("%s: hot reset dependent devices:\n", vdev->vbasedev.name); + + /* Verify that we have all the groups required */ + for (i = 0; i < info->count; i++) { +@@ -3135,10 +3087,9 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + + if (!group) { + if (!vdev->has_pm_reset) { +- error_report("vfio: Cannot reset device %04x:%02x:%02x.%x, " ++ error_report("vfio: Cannot reset device %s, " + "depends on group %d which is not owned.", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, devices[i].group_id); ++ vdev->vbasedev.name, devices[i].group_id); + } + ret = -EPERM; + goto out; +@@ -3153,8 +3104,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + if (vfio_pci_host_match(&host, &tmp->host)) { + if (single) { + DPRINTF("vfio: found another in-use device " +- "%04x:%02x:%02x.%x\n", host.domain, host.bus, +- host.slot, host.function); ++ "%s\n", tmp->vbasedev.name); + ret = -EINVAL; + goto out_single; + } +@@ -3201,9 +3151,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_PCI_HOT_RESET, reset); + g_free(reset); + +- DPRINTF("%04x:%02x:%02x.%x hot reset: %s\n", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, +- ret ? "%m" : "Success"); ++ DPRINTF("%s hot reset: %s\n", vdev->vbasedev.name, ret ? "%m" : "Success"); + + out: + /* Re-enable INTx on affected devices */ +@@ -3691,10 +3639,9 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + } else if (irq_info.count == 1) { + vdev->pci_aer = true; + } else { +- error_report("vfio: %04x:%02x:%02x.%x " ++ error_report("vfio: %s " + "Could not enable error recovery for the device", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ vdev->vbasedev.name); + } + + error: +@@ -3971,8 +3918,7 @@ static int vfio_initfn(PCIDevice *pdev) + return -errno; + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) group %d\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, groupid); ++ DPRINTF("%s(%s) group %d\n", __func__, vdev->vbasedev.name, groupid); + + group = vfio_get_group(groupid); + if (!group) { +@@ -4111,16 +4057,14 @@ static void vfio_pci_reset(DeviceState *dev) + PCIDevice *pdev = DO_UPCAST(PCIDevice, qdev, dev); + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + + vfio_pci_pre_reset(vdev); + + if (vdev->vbasedev.reset_works && + (vdev->has_flr || !vdev->has_pm_reset) && + !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { +- DPRINTF("%04x:%02x:%02x.%x FLR/VFIO_DEVICE_RESET\n", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s FLR/VFIO_DEVICE_RESET\n", vdev->vbasedev.name); + goto post_reset; + } + +@@ -4132,8 +4076,7 @@ static void vfio_pci_reset(DeviceState *dev) + /* If nothing else works and the device supports PM reset, use it */ + if (vdev->vbasedev.reset_works && vdev->has_pm_reset && + !ioctl(vdev->vbasedev.fd, VFIO_DEVICE_RESET)) { +- DPRINTF("%04x:%02x:%02x.%x PCI PM Reset\n", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF("%s PCI PM Reset\n", vdev->vbasedev.name); + goto post_reset; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-ACPI-table-generation-code-from-seabios.patch b/SOURCES/kvm-i386-ACPI-table-generation-code-from-seabios.patch new file mode 100644 index 0000000..957647b --- /dev/null +++ b/SOURCES/kvm-i386-ACPI-table-generation-code-from-seabios.patch @@ -0,0 +1,1823 @@ +From b451ecc8fa5bb1283a1dddc20057282676ad2593 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:08 +0100 +Subject: [PATCH 48/56] i386: ACPI table generation code from seabios + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-49-git-send-email-mst@redhat.com> +Patchwork-id: 56354 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 48/57] i386: ACPI table generation code from seabios +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +This adds C code for generating ACPI tables at runtime, +imported from seabios git tree + commit 51684b7ced75fb76776e8ee84833fcfb6ecf12dd + +Although ACPI tables come from a system BIOS on real hw, +it makes sense that the ACPI tables are coupled with the +virtual machine, since they have to abstract the x86 machine to +the OS's. + +This is widely desired as a way to avoid the churn +and proliferation of QEMU-specific interfaces +associated with ACPI tables in bios code. + +Notes: +As BIOS can reprogram devices prior to loading +ACPI tables, we pre-format ACPI tables but defer loading +hardware configuration there until tables are loaded. + +The code structure was intentionally kept as close +to the seabios original as possible, to simplify +comparison and making sure we didn't lose anything +in translation. + +Minor code duplication results, to help ensure there are no functional +regressions, I think it's better to merge it like this and do more code +changes in follow-up patches. + +Cross-version compatibility concerns have been addressed: + ACPI tables are exposed to guest as FW_CFG entries. + When running with -M 1.5 and older, this patch disables ACPI + table generation, and doesn't expose ACPI + tables to guest. + + As table content is likely to change over time, + the following measures are taken to simplify + cross-version migration: + - All tables besides the RSDP are packed in a single FW CFG entry. + This entry size is currently 23K. We round it up to 64K + to avoid too much churn there. + - Tables are placed in special ROM blob (not mapped into guest memory) + which is automatically migrated together with the guest, same + as BIOS code. + - Offsets where hardware configuration is loaded in ACPI tables + are also migrated, this is in case future ACPI changes make us + rearrange the tables in memory. + +This patch reuses some code from SeaBIOS, which was originally under +LGPLv2 and then relicensed to GPLv3 or LGPLv3, in QEMU under GPLv2+. This +relicensing has been acked by all contributors that had contributed to the +code since the v2->v3 relicense. ACKs approving the v2+ relicensing are +listed below. The list might include ACKs from people not holding +copyright on any parts of the reused code, but it's better to err on the +side of caution and include them. + +Affected SeaBIOS files (GPLv2+ license headers added) +: + + src/acpi-dsdt-cpu-hotplug.dsl + src/acpi-dsdt-dbug.dsl + src/acpi-dsdt-hpet.dsl + src/acpi-dsdt-isa.dsl + src/acpi-dsdt-pci-crs.dsl + src/acpi.c + src/acpi.h + src/ssdt-misc.dsl + src/ssdt-pcihp.dsl + src/ssdt-proc.dsl + tools/acpi_extract.py + tools/acpi_extract_preprocess.py + +Each one of the listed people agreed to the following: + +> If you allow the use of your contribution in QEMU under the +> terms of GPLv2 or later as proposed by this patch, +> please respond to this mail including the line: +> +> Acked-by: Name + + Acked-by: Gerd Hoffmann + Acked-by: Jan Kiszka + Acked-by: Jason Baron + Acked-by: David Woodhouse + Acked-by: Gleb Natapov + Acked-by: Marcelo Tosatti + Acked-by: Dave Frodin + Acked-by: Paolo Bonzini + Acked-by: Kevin O'Connor + Acked-by: Laszlo Ersek + Acked-by: Kenji Kaneshige + Acked-by: Isaku Yamahata + Acked-by: Magnus Christensson + Acked-by: Hu Tao + Acked-by: Eduardo Habkost + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 72c194f7e75cb64b2558111cb111adb49fbf4097) + +Conflicts: + hw/i386/pc_piix.c + hw/i386/pc_q35.c +--- + hw/i386/acpi-build.h | 9 + + hw/i386/acpi-defs.h | 331 ++++++++++++++ + include/hw/i386/pc.h | 1 + + hw/i386/acpi-build.c | 1214 +++++++++++++++++++++++++++++++++++++++++++++++++ + hw/i386/pc.c | 2 + + hw/i386/pc_piix.c | 5 + + hw/i386/pc_q35.c | 2 + + hw/i386/Makefile.objs | 4 + + 8 files changed, 1568 insertions(+) + create mode 100644 hw/i386/acpi-build.h + create mode 100644 hw/i386/acpi-defs.h + create mode 100644 hw/i386/acpi-build.c + +Signed-off-by: Michal Novotny +--- + hw/i386/Makefile.objs | 4 + + hw/i386/acpi-build.c | 1214 +++++++++++++++++++++++++++++++++++++++++++++++++ + hw/i386/acpi-build.h | 9 + + hw/i386/acpi-defs.h | 331 ++++++++++++++ + hw/i386/pc.c | 2 + + hw/i386/pc_piix.c | 5 + + hw/i386/pc_q35.c | 2 + + include/hw/i386/pc.h | 1 + + 8 files changed, 1568 insertions(+) + create mode 100644 hw/i386/acpi-build.c + create mode 100644 hw/i386/acpi-build.h + create mode 100644 hw/i386/acpi-defs.h + +diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs +index 71be2da..6754fd5 100644 +--- a/hw/i386/Makefile.objs ++++ b/hw/i386/Makefile.objs +@@ -4,7 +4,11 @@ obj-y += pc.o pc_piix.o pc_q35.o + obj-$(CONFIG_XEN) += xen_domainbuild.o xen_machine_pv.o + + obj-y += kvmvapic.o ++obj-y += acpi-build.o + obj-y += bios-linker-loader.o ++hw/i386/acpi-build.o: hw/i386/acpi-build.c hw/i386/acpi-dsdt.hex \ ++ hw/i386/ssdt-proc.hex hw/i386/ssdt-pcihp.hex hw/i386/ssdt-misc.hex \ ++ hw/i386/acpi-dsdt.hex hw/i386/q35-acpi-dsdt.hex + + iasl-option=$(shell if test -z "`$(1) $(2) 2>&1 > /dev/null`" \ + ; then echo "$(2)"; else echo "$(3)"; fi ;) +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +new file mode 100644 +index 0000000..6cfa044 +--- /dev/null ++++ b/hw/i386/acpi-build.c +@@ -0,0 +1,1214 @@ ++/* Support for generating ACPI tables and passing them to Guests ++ * ++ * Copyright (C) 2008-2010 Kevin O'Connor ++ * Copyright (C) 2006 Fabrice Bellard ++ * Copyright (C) 2013 Red Hat Inc ++ * ++ * Author: Michael S. Tsirkin ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++#include "acpi-build.h" ++#include ++#include ++#include "qemu-common.h" ++#include "qemu/bitmap.h" ++#include "qemu/range.h" ++#include "hw/pci/pci.h" ++#include "qom/cpu.h" ++#include "hw/i386/pc.h" ++#include "target-i386/cpu.h" ++#include "hw/timer/hpet.h" ++#include "hw/i386/acpi-defs.h" ++#include "hw/acpi/acpi.h" ++#include "hw/nvram/fw_cfg.h" ++#include "bios-linker-loader.h" ++#include "hw/loader.h" ++ ++/* Supported chipsets: */ ++#include "hw/acpi/piix4.h" ++#include "hw/i386/ich9.h" ++#include "hw/pci/pci_bus.h" ++#include "hw/pci-host/q35.h" ++ ++#include "hw/i386/q35-acpi-dsdt.hex" ++#include "hw/i386/acpi-dsdt.hex" ++ ++#include "qapi/qmp/qint.h" ++#include "qom/qom-qobject.h" ++ ++typedef struct AcpiCpuInfo { ++ DECLARE_BITMAP(found_cpus, MAX_CPUMASK_BITS + 1); ++} AcpiCpuInfo; ++ ++typedef struct AcpiMcfgInfo { ++ uint64_t mcfg_base; ++ uint32_t mcfg_size; ++} AcpiMcfgInfo; ++ ++typedef struct AcpiPmInfo { ++ bool s3_disabled; ++ bool s4_disabled; ++ uint8_t s4_val; ++ uint16_t sci_int; ++ uint8_t acpi_enable_cmd; ++ uint8_t acpi_disable_cmd; ++ uint32_t gpe0_blk; ++ uint32_t gpe0_blk_len; ++ uint32_t io_base; ++} AcpiPmInfo; ++ ++typedef struct AcpiMiscInfo { ++ bool has_hpet; ++ DECLARE_BITMAP(slot_hotplug_enable, PCI_SLOT_MAX); ++ const unsigned char *dsdt_code; ++ unsigned dsdt_size; ++ uint16_t pvpanic_port; ++} AcpiMiscInfo; ++ ++static void acpi_get_dsdt(AcpiMiscInfo *info) ++{ ++ Object *piix = piix4_pm_find(); ++ Object *lpc = ich9_lpc_find(); ++ assert(!!piix != !!lpc); ++ ++ if (piix) { ++ info->dsdt_code = AcpiDsdtAmlCode; ++ info->dsdt_size = sizeof AcpiDsdtAmlCode; ++ } ++ if (lpc) { ++ info->dsdt_code = Q35AcpiDsdtAmlCode; ++ info->dsdt_size = sizeof Q35AcpiDsdtAmlCode; ++ } ++} ++ ++static ++int acpi_add_cpu_info(Object *o, void *opaque) ++{ ++ AcpiCpuInfo *cpu = opaque; ++ uint64_t apic_id; ++ ++ if (object_dynamic_cast(o, TYPE_CPU)) { ++ apic_id = object_property_get_int(o, "apic-id", NULL); ++ assert(apic_id <= MAX_CPUMASK_BITS); ++ ++ set_bit(apic_id, cpu->found_cpus); ++ } ++ ++ object_child_foreach(o, acpi_add_cpu_info, opaque); ++ return 0; ++} ++ ++static void acpi_get_cpu_info(AcpiCpuInfo *cpu) ++{ ++ Object *root = object_get_root(); ++ ++ memset(cpu->found_cpus, 0, sizeof cpu->found_cpus); ++ object_child_foreach(root, acpi_add_cpu_info, cpu); ++} ++ ++static void acpi_get_pm_info(AcpiPmInfo *pm) ++{ ++ Object *piix = piix4_pm_find(); ++ Object *lpc = ich9_lpc_find(); ++ Object *obj = NULL; ++ QObject *o; ++ ++ if (piix) { ++ obj = piix; ++ } ++ if (lpc) { ++ obj = lpc; ++ } ++ assert(obj); ++ ++ /* Fill in optional s3/s4 related properties */ ++ o = object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); ++ if (o) { ++ pm->s3_disabled = qint_get_int(qobject_to_qint(o)); ++ } else { ++ pm->s3_disabled = false; ++ } ++ o = object_property_get_qobject(obj, ACPI_PM_PROP_S4_DISABLED, NULL); ++ if (o) { ++ pm->s4_disabled = qint_get_int(qobject_to_qint(o)); ++ } else { ++ pm->s4_disabled = false; ++ } ++ o = object_property_get_qobject(obj, ACPI_PM_PROP_S4_VAL, NULL); ++ if (o) { ++ pm->s4_val = qint_get_int(qobject_to_qint(o)); ++ } else { ++ pm->s4_val = false; ++ } ++ ++ /* Fill in mandatory properties */ ++ pm->sci_int = object_property_get_int(obj, ACPI_PM_PROP_SCI_INT, NULL); ++ ++ pm->acpi_enable_cmd = object_property_get_int(obj, ++ ACPI_PM_PROP_ACPI_ENABLE_CMD, ++ NULL); ++ pm->acpi_disable_cmd = object_property_get_int(obj, ++ ACPI_PM_PROP_ACPI_DISABLE_CMD, ++ NULL); ++ pm->io_base = object_property_get_int(obj, ACPI_PM_PROP_PM_IO_BASE, ++ NULL); ++ pm->gpe0_blk = object_property_get_int(obj, ACPI_PM_PROP_GPE0_BLK, ++ NULL); ++ pm->gpe0_blk_len = object_property_get_int(obj, ACPI_PM_PROP_GPE0_BLK_LEN, ++ NULL); ++} ++ ++static void acpi_get_hotplug_info(AcpiMiscInfo *misc) ++{ ++ int i; ++ PCIBus *bus = find_i440fx(); ++ ++ if (!bus) { ++ /* Only PIIX supports ACPI hotplug */ ++ memset(misc->slot_hotplug_enable, 0, sizeof misc->slot_hotplug_enable); ++ return; ++ } ++ ++ memset(misc->slot_hotplug_enable, 0xff, ++ DIV_ROUND_UP(PCI_SLOT_MAX, BITS_PER_BYTE)); ++ ++ for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { ++ PCIDeviceClass *pc; ++ PCIDevice *pdev = bus->devices[i]; ++ ++ if (!pdev) { ++ continue; ++ } ++ ++ pc = PCI_DEVICE_GET_CLASS(pdev); ++ ++ if (pc->no_hotplug) { ++ int slot = PCI_SLOT(i); ++ ++ clear_bit(slot, misc->slot_hotplug_enable); ++ } ++ } ++} ++ ++static void acpi_get_misc_info(AcpiMiscInfo *info) ++{ ++ info->has_hpet = hpet_find(); ++ info->pvpanic_port = pvpanic_port(); ++} ++ ++static void acpi_get_pci_info(PcPciInfo *info) ++{ ++ Object *pci_host; ++ bool ambiguous; ++ ++ pci_host = object_resolve_path_type("", TYPE_PCI_HOST_BRIDGE, &ambiguous); ++ g_assert(!ambiguous); ++ g_assert(pci_host); ++ ++ info->w32.begin = object_property_get_int(pci_host, ++ PCI_HOST_PROP_PCI_HOLE_START, ++ NULL); ++ info->w32.end = object_property_get_int(pci_host, ++ PCI_HOST_PROP_PCI_HOLE_END, ++ NULL); ++ info->w64.begin = object_property_get_int(pci_host, ++ PCI_HOST_PROP_PCI_HOLE64_START, ++ NULL); ++ info->w64.end = object_property_get_int(pci_host, ++ PCI_HOST_PROP_PCI_HOLE64_END, ++ NULL); ++} ++ ++#define ACPI_BUILD_APPNAME "Bochs" ++#define ACPI_BUILD_APPNAME6 "BOCHS " ++#define ACPI_BUILD_APPNAME4 "BXPC" ++ ++#define ACPI_BUILD_DPRINTF(level, fmt, ...) do {} while (0) ++ ++#define ACPI_BUILD_TABLE_FILE "etc/acpi/tables" ++#define ACPI_BUILD_RSDP_FILE "etc/acpi/rsdp" ++ ++static void ++build_header(GArray *linker, GArray *table_data, ++ AcpiTableHeader *h, uint32_t sig, int len, uint8_t rev) ++{ ++ h->signature = cpu_to_le32(sig); ++ h->length = cpu_to_le32(len); ++ h->revision = rev; ++ memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6); ++ memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4); ++ memcpy(h->oem_table_id + 4, (void *)&sig, 4); ++ h->oem_revision = cpu_to_le32(1); ++ memcpy(h->asl_compiler_id, ACPI_BUILD_APPNAME4, 4); ++ h->asl_compiler_revision = cpu_to_le32(1); ++ h->checksum = 0; ++ /* Checksum to be filled in by Guest linker */ ++ bios_linker_loader_add_checksum(linker, ACPI_BUILD_TABLE_FILE, ++ table_data->data, h, len, &h->checksum); ++} ++ ++static inline GArray *build_alloc_array(void) ++{ ++ return g_array_new(false, true /* clear */, 1); ++} ++ ++static inline void build_free_array(GArray *array) ++{ ++ g_array_free(array, true); ++} ++ ++static inline void build_prepend_byte(GArray *array, uint8_t val) ++{ ++ g_array_prepend_val(array, val); ++} ++ ++static inline void build_append_byte(GArray *array, uint8_t val) ++{ ++ g_array_append_val(array, val); ++} ++ ++static inline void build_append_array(GArray *array, GArray *val) ++{ ++ g_array_append_vals(array, val->data, val->len); ++} ++ ++static void build_append_nameseg(GArray *array, const char *format, ...) ++{ ++ GString *s = g_string_new(""); ++ va_list args; ++ ++ va_start(args, format); ++ g_string_vprintf(s, format, args); ++ va_end(args); ++ ++ assert(s->len == 4); ++ g_array_append_vals(array, s->str, s->len); ++ g_string_free(s, true); ++} ++ ++/* 5.4 Definition Block Encoding */ ++enum { ++ PACKAGE_LENGTH_1BYTE_SHIFT = 6, /* Up to 63 - use extra 2 bits. */ ++ PACKAGE_LENGTH_2BYTE_SHIFT = 4, ++ PACKAGE_LENGTH_3BYTE_SHIFT = 12, ++ PACKAGE_LENGTH_4BYTE_SHIFT = 20, ++}; ++ ++static void build_prepend_package_length(GArray *package, unsigned min_bytes) ++{ ++ uint8_t byte; ++ unsigned length = package->len; ++ unsigned length_bytes; ++ ++ if (length + 1 < (1 << PACKAGE_LENGTH_1BYTE_SHIFT)) { ++ length_bytes = 1; ++ } else if (length + 2 < (1 << PACKAGE_LENGTH_3BYTE_SHIFT)) { ++ length_bytes = 2; ++ } else if (length + 3 < (1 << PACKAGE_LENGTH_4BYTE_SHIFT)) { ++ length_bytes = 3; ++ } else { ++ length_bytes = 4; ++ } ++ ++ /* Force length to at least min_bytes. ++ * This wastes memory but that's how bios did it. ++ */ ++ length_bytes = MAX(length_bytes, min_bytes); ++ ++ /* PkgLength is the length of the inclusive length of the data. */ ++ length += length_bytes; ++ ++ switch (length_bytes) { ++ case 1: ++ byte = length; ++ build_prepend_byte(package, byte); ++ return; ++ case 4: ++ byte = length >> PACKAGE_LENGTH_4BYTE_SHIFT; ++ build_prepend_byte(package, byte); ++ length &= (1 << PACKAGE_LENGTH_4BYTE_SHIFT) - 1; ++ /* fall through */ ++ case 3: ++ byte = length >> PACKAGE_LENGTH_3BYTE_SHIFT; ++ build_prepend_byte(package, byte); ++ length &= (1 << PACKAGE_LENGTH_3BYTE_SHIFT) - 1; ++ /* fall through */ ++ case 2: ++ byte = length >> PACKAGE_LENGTH_2BYTE_SHIFT; ++ build_prepend_byte(package, byte); ++ length &= (1 << PACKAGE_LENGTH_2BYTE_SHIFT) - 1; ++ /* fall through */ ++ } ++ /* ++ * Most significant two bits of byte zero indicate how many following bytes ++ * are in PkgLength encoding. ++ */ ++ byte = ((length_bytes - 1) << PACKAGE_LENGTH_1BYTE_SHIFT) | length; ++ build_prepend_byte(package, byte); ++} ++ ++static void build_package(GArray *package, uint8_t op, unsigned min_bytes) ++{ ++ build_prepend_package_length(package, min_bytes); ++ build_prepend_byte(package, op); ++} ++ ++static void build_append_value(GArray *table, uint32_t value, int size) ++{ ++ uint8_t prefix; ++ int i; ++ ++ switch (size) { ++ case 1: ++ prefix = 0x0A; /* BytePrefix */ ++ break; ++ case 2: ++ prefix = 0x0B; /* WordPrefix */ ++ break; ++ case 4: ++ prefix = 0x0C; /* DWordPrefix */ ++ break; ++ default: ++ assert(0); ++ return; ++ } ++ build_append_byte(table, prefix); ++ for (i = 0; i < size; ++i) { ++ build_append_byte(table, value & 0xFF); ++ value = value >> 8; ++ } ++} ++ ++static void build_append_notify_target(GArray *method, GArray *target_name, ++ uint32_t value, int size) ++{ ++ GArray *notify = build_alloc_array(); ++ uint8_t op = 0xA0; /* IfOp */ ++ ++ build_append_byte(notify, 0x93); /* LEqualOp */ ++ build_append_byte(notify, 0x68); /* Arg0Op */ ++ build_append_value(notify, value, size); ++ build_append_byte(notify, 0x86); /* NotifyOp */ ++ build_append_array(notify, target_name); ++ build_append_byte(notify, 0x69); /* Arg1Op */ ++ ++ /* Pack it up */ ++ build_package(notify, op, 1); ++ ++ build_append_array(method, notify); ++ ++ build_free_array(notify); ++} ++ ++#define ACPI_PORT_SMI_CMD 0x00b2 /* TODO: this is APM_CNT_IOPORT */ ++ ++static inline void *acpi_data_push(GArray *table_data, unsigned size) ++{ ++ unsigned off = table_data->len; ++ g_array_set_size(table_data, off + size); ++ return table_data->data + off; ++} ++ ++static unsigned acpi_data_len(GArray *table) ++{ ++ return table->len * g_array_get_element_size(table); ++} ++ ++static void acpi_align_size(GArray *blob, unsigned align) ++{ ++ /* Align size to multiple of given size. This reduces the chance ++ * we need to change size in the future (breaking cross version migration). ++ */ ++ g_array_set_size(blob, (ROUND_UP(acpi_data_len(blob), align) + ++ g_array_get_element_size(blob) - 1) / ++ g_array_get_element_size(blob)); ++} ++ ++/* Get pointer within table in a safe manner */ ++#define ACPI_BUILD_PTR(table, size, off, type) \ ++ ((type *)(acpi_data_get_ptr(table, size, off, sizeof(type)))) ++ ++static inline void *acpi_data_get_ptr(uint8_t *table_data, unsigned table_size, ++ unsigned off, unsigned size) ++{ ++ assert(off + size > off); ++ assert(off + size <= table_size); ++ return table_data + off; ++} ++ ++static inline void acpi_add_table(GArray *table_offsets, GArray *table_data) ++{ ++ uint32_t offset = cpu_to_le32(table_data->len); ++ g_array_append_val(table_offsets, offset); ++} ++ ++/* FACS */ ++static void ++build_facs(GArray *table_data, GArray *linker, PcGuestInfo *guest_info) ++{ ++ AcpiFacsDescriptorRev1 *facs = acpi_data_push(table_data, sizeof *facs); ++ facs->signature = cpu_to_le32(ACPI_FACS_SIGNATURE); ++ facs->length = cpu_to_le32(sizeof(*facs)); ++} ++ ++/* Load chipset information in FADT */ ++static void fadt_setup(AcpiFadtDescriptorRev1 *fadt, AcpiPmInfo *pm) ++{ ++ fadt->model = 1; ++ fadt->reserved1 = 0; ++ fadt->sci_int = cpu_to_le16(pm->sci_int); ++ fadt->smi_cmd = cpu_to_le32(ACPI_PORT_SMI_CMD); ++ fadt->acpi_enable = pm->acpi_enable_cmd; ++ fadt->acpi_disable = pm->acpi_disable_cmd; ++ /* EVT, CNT, TMR offset matches hw/acpi/core.c */ ++ fadt->pm1a_evt_blk = cpu_to_le32(pm->io_base); ++ fadt->pm1a_cnt_blk = cpu_to_le32(pm->io_base + 0x04); ++ fadt->pm_tmr_blk = cpu_to_le32(pm->io_base + 0x08); ++ fadt->gpe0_blk = cpu_to_le32(pm->gpe0_blk); ++ /* EVT, CNT, TMR length matches hw/acpi/core.c */ ++ fadt->pm1_evt_len = 4; ++ fadt->pm1_cnt_len = 2; ++ fadt->pm_tmr_len = 4; ++ fadt->gpe0_blk_len = pm->gpe0_blk_len; ++ fadt->plvl2_lat = cpu_to_le16(0xfff); /* C2 state not supported */ ++ fadt->plvl3_lat = cpu_to_le16(0xfff); /* C3 state not supported */ ++ fadt->flags = cpu_to_le32((1 << ACPI_FADT_F_WBINVD) | ++ (1 << ACPI_FADT_F_PROC_C1) | ++ (1 << ACPI_FADT_F_SLP_BUTTON) | ++ (1 << ACPI_FADT_F_RTC_S4)); ++ fadt->flags |= cpu_to_le32(1 << ACPI_FADT_F_USE_PLATFORM_CLOCK); ++} ++ ++ ++/* FADT */ ++static void ++build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo *pm, ++ unsigned facs, unsigned dsdt) ++{ ++ AcpiFadtDescriptorRev1 *fadt = acpi_data_push(table_data, sizeof(*fadt)); ++ ++ fadt->firmware_ctrl = cpu_to_le32(facs); ++ /* FACS address to be filled by Guest linker */ ++ bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, ++ ACPI_BUILD_TABLE_FILE, ++ table_data, &fadt->firmware_ctrl, ++ sizeof fadt->firmware_ctrl); ++ ++ fadt->dsdt = cpu_to_le32(dsdt); ++ /* DSDT address to be filled by Guest linker */ ++ bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, ++ ACPI_BUILD_TABLE_FILE, ++ table_data, &fadt->dsdt, ++ sizeof fadt->dsdt); ++ ++ fadt_setup(fadt, pm); ++ ++ build_header(linker, table_data, ++ (void *)fadt, ACPI_FACP_SIGNATURE, sizeof(*fadt), 1); ++} ++ ++static void ++build_madt(GArray *table_data, GArray *linker, AcpiCpuInfo *cpu, ++ PcGuestInfo *guest_info) ++{ ++ int madt_start = table_data->len; ++ ++ AcpiMultipleApicTable *madt; ++ AcpiMadtIoApic *io_apic; ++ AcpiMadtIntsrcovr *intsrcovr; ++ AcpiMadtLocalNmi *local_nmi; ++ int i; ++ ++ madt = acpi_data_push(table_data, sizeof *madt); ++ madt->local_apic_address = cpu_to_le32(APIC_DEFAULT_ADDRESS); ++ madt->flags = cpu_to_le32(1); ++ ++ for (i = 0; i < guest_info->apic_id_limit; i++) { ++ AcpiMadtProcessorApic *apic = acpi_data_push(table_data, sizeof *apic); ++ apic->type = ACPI_APIC_PROCESSOR; ++ apic->length = sizeof(*apic); ++ apic->processor_id = i; ++ apic->local_apic_id = i; ++ if (test_bit(i, cpu->found_cpus)) { ++ apic->flags = cpu_to_le32(1); ++ } else { ++ apic->flags = cpu_to_le32(0); ++ } ++ } ++ io_apic = acpi_data_push(table_data, sizeof *io_apic); ++ io_apic->type = ACPI_APIC_IO; ++ io_apic->length = sizeof(*io_apic); ++#define ACPI_BUILD_IOAPIC_ID 0x0 ++ io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID; ++ io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS); ++ io_apic->interrupt = cpu_to_le32(0); ++ ++ if (guest_info->apic_xrupt_override) { ++ intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); ++ intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; ++ intsrcovr->length = sizeof(*intsrcovr); ++ intsrcovr->source = 0; ++ intsrcovr->gsi = cpu_to_le32(2); ++ intsrcovr->flags = cpu_to_le16(0); /* conforms to bus specifications */ ++ } ++ for (i = 1; i < 16; i++) { ++#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) ++ if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { ++ /* No need for a INT source override structure. */ ++ continue; ++ } ++ intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); ++ intsrcovr->type = ACPI_APIC_XRUPT_OVERRIDE; ++ intsrcovr->length = sizeof(*intsrcovr); ++ intsrcovr->source = i; ++ intsrcovr->gsi = cpu_to_le32(i); ++ intsrcovr->flags = cpu_to_le16(0xd); /* active high, level triggered */ ++ } ++ ++ local_nmi = acpi_data_push(table_data, sizeof *local_nmi); ++ local_nmi->type = ACPI_APIC_LOCAL_NMI; ++ local_nmi->length = sizeof(*local_nmi); ++ local_nmi->processor_id = 0xff; /* all processors */ ++ local_nmi->flags = cpu_to_le16(0); ++ local_nmi->lint = 1; /* ACPI_LINT1 */ ++ ++ build_header(linker, table_data, ++ (void *)(table_data->data + madt_start), ACPI_APIC_SIGNATURE, ++ table_data->len - madt_start, 1); ++} ++ ++/* Encode a hex value */ ++static inline char acpi_get_hex(uint32_t val) ++{ ++ val &= 0x0f; ++ return (val <= 9) ? ('0' + val) : ('A' + val - 10); ++} ++ ++#include "hw/i386/ssdt-proc.hex" ++ ++/* 0x5B 0x83 ProcessorOp PkgLength NameString ProcID */ ++#define ACPI_PROC_OFFSET_CPUHEX (*ssdt_proc_name - *ssdt_proc_start + 2) ++#define ACPI_PROC_OFFSET_CPUID1 (*ssdt_proc_name - *ssdt_proc_start + 4) ++#define ACPI_PROC_OFFSET_CPUID2 (*ssdt_proc_id - *ssdt_proc_start) ++#define ACPI_PROC_SIZEOF (*ssdt_proc_end - *ssdt_proc_start) ++#define ACPI_PROC_AML (ssdp_proc_aml + *ssdt_proc_start) ++ ++/* 0x5B 0x82 DeviceOp PkgLength NameString */ ++#define ACPI_PCIHP_OFFSET_HEX (*ssdt_pcihp_name - *ssdt_pcihp_start + 1) ++#define ACPI_PCIHP_OFFSET_ID (*ssdt_pcihp_id - *ssdt_pcihp_start) ++#define ACPI_PCIHP_OFFSET_ADR (*ssdt_pcihp_adr - *ssdt_pcihp_start) ++#define ACPI_PCIHP_OFFSET_EJ0 (*ssdt_pcihp_ej0 - *ssdt_pcihp_start) ++#define ACPI_PCIHP_SIZEOF (*ssdt_pcihp_end - *ssdt_pcihp_start) ++#define ACPI_PCIHP_AML (ssdp_pcihp_aml + *ssdt_pcihp_start) ++ ++#define ACPI_SSDT_SIGNATURE 0x54445353 /* SSDT */ ++#define ACPI_SSDT_HEADER_LENGTH 36 ++ ++#include "hw/i386/ssdt-misc.hex" ++#include "hw/i386/ssdt-pcihp.hex" ++ ++static void ++build_append_notify(GArray *device, const char *name, ++ const char *format, int skip, int count) ++{ ++ int i; ++ GArray *method = build_alloc_array(); ++ uint8_t op = 0x14; /* MethodOp */ ++ ++ build_append_nameseg(method, name); ++ build_append_byte(method, 0x02); /* MethodFlags: ArgCount */ ++ for (i = skip; i < count; i++) { ++ GArray *target = build_alloc_array(); ++ build_append_nameseg(target, format, i); ++ assert(i < 256); /* Fits in 1 byte */ ++ build_append_notify_target(method, target, i, 1); ++ build_free_array(target); ++ } ++ build_package(method, op, 2); ++ ++ build_append_array(device, method); ++ build_free_array(method); ++} ++ ++static void patch_pcihp(int slot, uint8_t *ssdt_ptr, uint32_t eject) ++{ ++ ssdt_ptr[ACPI_PCIHP_OFFSET_HEX] = acpi_get_hex(slot >> 4); ++ ssdt_ptr[ACPI_PCIHP_OFFSET_HEX + 1] = acpi_get_hex(slot); ++ ssdt_ptr[ACPI_PCIHP_OFFSET_ID] = slot; ++ ssdt_ptr[ACPI_PCIHP_OFFSET_ADR + 2] = slot; ++ ++ /* Runtime patching of ACPI_EJ0: to disable hotplug for a slot, ++ * replace the method name: _EJ0 by ACPI_EJ0_. ++ */ ++ /* Sanity check */ ++ assert(!memcmp(ssdt_ptr + ACPI_PCIHP_OFFSET_EJ0, "_EJ0", 4)); ++ ++ if (!eject) { ++ memcpy(ssdt_ptr + ACPI_PCIHP_OFFSET_EJ0, "EJ0_", 4); ++ } ++} ++ ++static void patch_pci_windows(PcPciInfo *pci, uint8_t *start, unsigned size) ++{ ++ *ACPI_BUILD_PTR(start, size, acpi_pci32_start[0], uint32_t) = ++ cpu_to_le32(pci->w32.begin); ++ ++ *ACPI_BUILD_PTR(start, size, acpi_pci32_end[0], uint32_t) = ++ cpu_to_le32(pci->w32.end - 1); ++ ++ if (pci->w64.end || pci->w64.begin) { ++ *ACPI_BUILD_PTR(start, size, acpi_pci64_valid[0], uint8_t) = 1; ++ *ACPI_BUILD_PTR(start, size, acpi_pci64_start[0], uint64_t) = ++ cpu_to_le64(pci->w64.begin); ++ *ACPI_BUILD_PTR(start, size, acpi_pci64_end[0], uint64_t) = ++ cpu_to_le64(pci->w64.end - 1); ++ *ACPI_BUILD_PTR(start, size, acpi_pci64_length[0], uint64_t) = ++ cpu_to_le64(pci->w64.end - pci->w64.begin); ++ } else { ++ *ACPI_BUILD_PTR(start, size, acpi_pci64_valid[0], uint8_t) = 0; ++ } ++} ++ ++static void ++build_ssdt(GArray *table_data, GArray *linker, ++ AcpiCpuInfo *cpu, AcpiPmInfo *pm, AcpiMiscInfo *misc, ++ PcPciInfo *pci, PcGuestInfo *guest_info) ++{ ++ int acpi_cpus = MIN(0xff, guest_info->apic_id_limit); ++ int ssdt_start = table_data->len; ++ uint8_t *ssdt_ptr; ++ int i; ++ ++ /* Copy header and patch values in the S3_ / S4_ / S5_ packages */ ++ ssdt_ptr = acpi_data_push(table_data, sizeof(ssdp_misc_aml)); ++ memcpy(ssdt_ptr, ssdp_misc_aml, sizeof(ssdp_misc_aml)); ++ if (pm->s3_disabled) { ++ ssdt_ptr[acpi_s3_name[0]] = 'X'; ++ } ++ if (pm->s4_disabled) { ++ ssdt_ptr[acpi_s4_name[0]] = 'X'; ++ } else { ++ ssdt_ptr[acpi_s4_pkg[0] + 1] = ssdt_ptr[acpi_s4_pkg[0] + 3] = ++ pm->s4_val; ++ } ++ ++ patch_pci_windows(pci, ssdt_ptr, sizeof(ssdp_misc_aml)); ++ ++ *(uint16_t *)(ssdt_ptr + *ssdt_isa_pest) = ++ cpu_to_le16(misc->pvpanic_port); ++ ++ { ++ GArray *sb_scope = build_alloc_array(); ++ uint8_t op = 0x10; /* ScopeOp */ ++ ++ build_append_nameseg(sb_scope, "_SB_"); ++ ++ /* build Processor object for each processor */ ++ for (i = 0; i < acpi_cpus; i++) { ++ uint8_t *proc = acpi_data_push(sb_scope, ACPI_PROC_SIZEOF); ++ memcpy(proc, ACPI_PROC_AML, ACPI_PROC_SIZEOF); ++ proc[ACPI_PROC_OFFSET_CPUHEX] = acpi_get_hex(i >> 4); ++ proc[ACPI_PROC_OFFSET_CPUHEX+1] = acpi_get_hex(i); ++ proc[ACPI_PROC_OFFSET_CPUID1] = i; ++ proc[ACPI_PROC_OFFSET_CPUID2] = i; ++ } ++ ++ /* build this code: ++ * Method(NTFY, 2) {If (LEqual(Arg0, 0x00)) {Notify(CP00, Arg1)} ...} ++ */ ++ /* Arg0 = Processor ID = APIC ID */ ++ build_append_notify(sb_scope, "NTFY", "CP%0.02X", 0, acpi_cpus); ++ ++ /* build "Name(CPON, Package() { One, One, ..., Zero, Zero, ... })" */ ++ build_append_byte(sb_scope, 0x08); /* NameOp */ ++ build_append_nameseg(sb_scope, "CPON"); ++ ++ { ++ GArray *package = build_alloc_array(); ++ uint8_t op = 0x12; /* PackageOp */ ++ ++ build_append_byte(package, acpi_cpus); /* NumElements */ ++ for (i = 0; i < acpi_cpus; i++) { ++ uint8_t b = test_bit(i, cpu->found_cpus) ? 0x01 : 0x00; ++ build_append_byte(package, b); ++ } ++ ++ build_package(package, op, 2); ++ build_append_array(sb_scope, package); ++ build_free_array(package); ++ } ++ ++ { ++ GArray *pci0 = build_alloc_array(); ++ uint8_t op = 0x10; /* ScopeOp */; ++ ++ build_append_nameseg(pci0, "PCI0"); ++ ++ /* build Device object for each slot */ ++ for (i = 1; i < PCI_SLOT_MAX; i++) { ++ bool eject = test_bit(i, misc->slot_hotplug_enable); ++ void *pcihp = acpi_data_push(pci0, ACPI_PCIHP_SIZEOF); ++ ++ memcpy(pcihp, ACPI_PCIHP_AML, ACPI_PCIHP_SIZEOF); ++ patch_pcihp(i, pcihp, eject); ++ } ++ ++ build_append_notify(pci0, "PCNT", "S%0.02X_", 1, PCI_SLOT_MAX); ++ build_package(pci0, op, 3); ++ build_append_array(sb_scope, pci0); ++ build_free_array(pci0); ++ } ++ ++ build_package(sb_scope, op, 3); ++ build_append_array(table_data, sb_scope); ++ build_free_array(sb_scope); ++ } ++ ++ build_header(linker, table_data, ++ (void *)(table_data->data + ssdt_start), ++ ACPI_SSDT_SIGNATURE, table_data->len - ssdt_start, 1); ++} ++ ++static void ++build_hpet(GArray *table_data, GArray *linker) ++{ ++ Acpi20Hpet *hpet; ++ ++ hpet = acpi_data_push(table_data, sizeof(*hpet)); ++ /* Note timer_block_id value must be kept in sync with value advertised by ++ * emulated hpet ++ */ ++ hpet->timer_block_id = cpu_to_le32(0x8086a201); ++ hpet->addr.address = cpu_to_le64(HPET_BASE); ++ build_header(linker, table_data, ++ (void *)hpet, ACPI_HPET_SIGNATURE, sizeof(*hpet), 1); ++} ++ ++static void ++acpi_build_srat_memory(AcpiSratMemoryAffinity *numamem, ++ uint64_t base, uint64_t len, int node, int enabled) ++{ ++ numamem->type = ACPI_SRAT_MEMORY; ++ numamem->length = sizeof(*numamem); ++ memset(numamem->proximity, 0, 4); ++ numamem->proximity[0] = node; ++ numamem->flags = cpu_to_le32(!!enabled); ++ numamem->base_addr = cpu_to_le64(base); ++ numamem->range_length = cpu_to_le64(len); ++} ++ ++static void ++build_srat(GArray *table_data, GArray *linker, ++ AcpiCpuInfo *cpu, PcGuestInfo *guest_info) ++{ ++ AcpiSystemResourceAffinityTable *srat; ++ AcpiSratProcessorAffinity *core; ++ AcpiSratMemoryAffinity *numamem; ++ ++ int i; ++ uint64_t curnode; ++ int srat_start, numa_start, slots; ++ uint64_t mem_len, mem_base, next_base; ++ ++ srat_start = table_data->len; ++ ++ srat = acpi_data_push(table_data, sizeof *srat); ++ srat->reserved1 = cpu_to_le32(1); ++ core = (void *)(srat + 1); ++ ++ for (i = 0; i < guest_info->apic_id_limit; ++i) { ++ core = acpi_data_push(table_data, sizeof *core); ++ core->type = ACPI_SRAT_PROCESSOR; ++ core->length = sizeof(*core); ++ core->local_apic_id = i; ++ curnode = guest_info->node_cpu[i]; ++ core->proximity_lo = curnode; ++ memset(core->proximity_hi, 0, 3); ++ core->local_sapic_eid = 0; ++ if (test_bit(i, cpu->found_cpus)) { ++ core->flags = cpu_to_le32(1); ++ } else { ++ core->flags = cpu_to_le32(0); ++ } ++ } ++ ++ ++ /* the memory map is a bit tricky, it contains at least one hole ++ * from 640k-1M and possibly another one from 3.5G-4G. ++ */ ++ next_base = 0; ++ numa_start = table_data->len; ++ ++ numamem = acpi_data_push(table_data, sizeof *numamem); ++ acpi_build_srat_memory(numamem, 0, 640*1024, 0, 1); ++ next_base = 1024 * 1024; ++ for (i = 1; i < guest_info->numa_nodes + 1; ++i) { ++ mem_base = next_base; ++ mem_len = guest_info->node_mem[i - 1]; ++ if (i == 1) { ++ mem_len -= 1024 * 1024; ++ } ++ next_base = mem_base + mem_len; ++ ++ /* Cut out the ACPI_PCI hole */ ++ if (mem_base <= guest_info->ram_size && ++ next_base > guest_info->ram_size) { ++ mem_len -= next_base - guest_info->ram_size; ++ if (mem_len > 0) { ++ numamem = acpi_data_push(table_data, sizeof *numamem); ++ acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1); ++ } ++ mem_base = 1ULL << 32; ++ mem_len = next_base - guest_info->ram_size; ++ next_base += (1ULL << 32) - guest_info->ram_size; ++ } ++ numamem = acpi_data_push(table_data, sizeof *numamem); ++ acpi_build_srat_memory(numamem, mem_base, mem_len, i - 1, 1); ++ } ++ slots = (table_data->len - numa_start) / sizeof *numamem; ++ for (; slots < guest_info->numa_nodes + 2; slots++) { ++ numamem = acpi_data_push(table_data, sizeof *numamem); ++ acpi_build_srat_memory(numamem, 0, 0, 0, 0); ++ } ++ ++ build_header(linker, table_data, ++ (void *)(table_data->data + srat_start), ++ ACPI_SRAT_SIGNATURE, ++ table_data->len - srat_start, 1); ++} ++ ++static void ++build_mcfg_q35(GArray *table_data, GArray *linker, AcpiMcfgInfo *info) ++{ ++ AcpiTableMcfg *mcfg; ++ uint32_t sig; ++ int len = sizeof(*mcfg) + 1 * sizeof(mcfg->allocation[0]); ++ ++ mcfg = acpi_data_push(table_data, len); ++ mcfg->allocation[0].address = cpu_to_le64(info->mcfg_base); ++ /* Only a single allocation so no need to play with segments */ ++ mcfg->allocation[0].pci_segment = cpu_to_le16(0); ++ mcfg->allocation[0].start_bus_number = 0; ++ mcfg->allocation[0].end_bus_number = PCIE_MMCFG_BUS(info->mcfg_size - 1); ++ ++ /* MCFG is used for ECAM which can be enabled or disabled by guest. ++ * To avoid table size changes (which create migration issues), ++ * always create the table even if there are no allocations, ++ * but set the signature to a reserved value in this case. ++ * ACPI spec requires OSPMs to ignore such tables. ++ */ ++ if (info->mcfg_base == PCIE_BASE_ADDR_UNMAPPED) { ++ sig = ACPI_RSRV_SIGNATURE; ++ } else { ++ sig = ACPI_MCFG_SIGNATURE; ++ } ++ build_header(linker, table_data, (void *)mcfg, sig, len, 1); ++} ++ ++static void ++build_dsdt(GArray *table_data, GArray *linker, AcpiMiscInfo *misc) ++{ ++ void *dsdt; ++ assert(misc->dsdt_code && misc->dsdt_size); ++ dsdt = acpi_data_push(table_data, misc->dsdt_size); ++ memcpy(dsdt, misc->dsdt_code, misc->dsdt_size); ++} ++ ++/* Build final rsdt table */ ++static void ++build_rsdt(GArray *table_data, GArray *linker, GArray *table_offsets) ++{ ++ AcpiRsdtDescriptorRev1 *rsdt; ++ size_t rsdt_len; ++ int i; ++ ++ rsdt_len = sizeof(*rsdt) + sizeof(uint32_t) * table_offsets->len; ++ rsdt = acpi_data_push(table_data, rsdt_len); ++ memcpy(rsdt->table_offset_entry, table_offsets->data, ++ sizeof(uint32_t) * table_offsets->len); ++ for (i = 0; i < table_offsets->len; ++i) { ++ /* rsdt->table_offset_entry to be filled by Guest linker */ ++ bios_linker_loader_add_pointer(linker, ++ ACPI_BUILD_TABLE_FILE, ++ ACPI_BUILD_TABLE_FILE, ++ table_data, &rsdt->table_offset_entry[i], ++ sizeof(uint32_t)); ++ } ++ build_header(linker, table_data, ++ (void *)rsdt, ACPI_RSDT_SIGNATURE, rsdt_len, 1); ++} ++ ++static GArray * ++build_rsdp(GArray *rsdp_table, GArray *linker, unsigned rsdt) ++{ ++ AcpiRsdpDescriptor *rsdp = acpi_data_push(rsdp_table, sizeof *rsdp); ++ ++ bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, 1, ++ true /* fseg memory */); ++ ++ rsdp->signature = cpu_to_le64(ACPI_RSDP_SIGNATURE); ++ memcpy(rsdp->oem_id, ACPI_BUILD_APPNAME6, 6); ++ rsdp->rsdt_physical_address = cpu_to_le32(rsdt); ++ /* Address to be filled by Guest linker */ ++ bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE, ++ ACPI_BUILD_TABLE_FILE, ++ rsdp_table, &rsdp->rsdt_physical_address, ++ sizeof rsdp->rsdt_physical_address); ++ rsdp->checksum = 0; ++ /* Checksum to be filled by Guest linker */ ++ bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE, ++ rsdp, rsdp, sizeof *rsdp, &rsdp->checksum); ++ ++ return rsdp_table; ++} ++ ++typedef ++struct AcpiBuildTables { ++ GArray *table_data; ++ GArray *rsdp; ++ GArray *linker; ++} AcpiBuildTables; ++ ++static inline void acpi_build_tables_init(AcpiBuildTables *tables) ++{ ++ tables->rsdp = g_array_new(false, true /* clear */, 1); ++ tables->table_data = g_array_new(false, true /* clear */, 1); ++ tables->linker = bios_linker_loader_init(); ++} ++ ++static inline void acpi_build_tables_cleanup(AcpiBuildTables *tables, bool mfre) ++{ ++ void *linker_data = bios_linker_loader_cleanup(tables->linker); ++ if (mfre) { ++ g_free(linker_data); ++ } ++ g_array_free(tables->rsdp, mfre); ++ g_array_free(tables->table_data, mfre); ++} ++ ++typedef ++struct AcpiBuildState { ++ /* Copy of table in RAM (for patching). */ ++ uint8_t *table_ram; ++ uint32_t table_size; ++ /* Is table patched? */ ++ uint8_t patched; ++ PcGuestInfo *guest_info; ++} AcpiBuildState; ++ ++static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg) ++{ ++ Object *pci_host; ++ QObject *o; ++ bool ambiguous; ++ ++ pci_host = object_resolve_path_type("", TYPE_PCI_HOST_BRIDGE, &ambiguous); ++ g_assert(!ambiguous); ++ g_assert(pci_host); ++ ++ o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_BASE, NULL); ++ if (!o) { ++ return false; ++ } ++ mcfg->mcfg_base = qint_get_int(qobject_to_qint(o)); ++ ++ o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_SIZE, NULL); ++ assert(o); ++ mcfg->mcfg_size = qint_get_int(qobject_to_qint(o)); ++ return true; ++} ++ ++static ++void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) ++{ ++ GArray *table_offsets; ++ unsigned facs, dsdt, rsdt; ++ AcpiCpuInfo cpu; ++ AcpiPmInfo pm; ++ AcpiMiscInfo misc; ++ AcpiMcfgInfo mcfg; ++ PcPciInfo pci; ++ uint8_t *u; ++ ++ acpi_get_cpu_info(&cpu); ++ acpi_get_pm_info(&pm); ++ acpi_get_dsdt(&misc); ++ acpi_get_hotplug_info(&misc); ++ acpi_get_misc_info(&misc); ++ acpi_get_pci_info(&pci); ++ ++ table_offsets = g_array_new(false, true /* clear */, ++ sizeof(uint32_t)); ++ ACPI_BUILD_DPRINTF(3, "init ACPI tables\n"); ++ ++ bios_linker_loader_alloc(tables->linker, ACPI_BUILD_TABLE_FILE, ++ 64 /* Ensure FACS is aligned */, ++ false /* high memory */); ++ ++ /* ++ * FACS is pointed to by FADT. ++ * We place it first since it's the only table that has alignment ++ * requirements. ++ */ ++ facs = tables->table_data->len; ++ build_facs(tables->table_data, tables->linker, guest_info); ++ ++ /* DSDT is pointed to by FADT */ ++ dsdt = tables->table_data->len; ++ build_dsdt(tables->table_data, tables->linker, &misc); ++ ++ /* ACPI tables pointed to by RSDT */ ++ acpi_add_table(table_offsets, tables->table_data); ++ build_fadt(tables->table_data, tables->linker, &pm, facs, dsdt); ++ acpi_add_table(table_offsets, tables->table_data); ++ ++ build_ssdt(tables->table_data, tables->linker, &cpu, &pm, &misc, &pci, ++ guest_info); ++ acpi_add_table(table_offsets, tables->table_data); ++ ++ build_madt(tables->table_data, tables->linker, &cpu, guest_info); ++ acpi_add_table(table_offsets, tables->table_data); ++ if (misc.has_hpet) { ++ build_hpet(tables->table_data, tables->linker); ++ } ++ if (guest_info->numa_nodes) { ++ acpi_add_table(table_offsets, tables->table_data); ++ build_srat(tables->table_data, tables->linker, &cpu, guest_info); ++ } ++ if (acpi_get_mcfg(&mcfg)) { ++ acpi_add_table(table_offsets, tables->table_data); ++ build_mcfg_q35(tables->table_data, tables->linker, &mcfg); ++ } ++ ++ /* Add tables supplied by user (if any) */ ++ for (u = acpi_table_first(); u; u = acpi_table_next(u)) { ++ unsigned len = acpi_table_len(u); ++ ++ acpi_add_table(table_offsets, tables->table_data); ++ g_array_append_vals(tables->table_data, u, len); ++ } ++ ++ /* RSDT is pointed to by RSDP */ ++ rsdt = tables->table_data->len; ++ build_rsdt(tables->table_data, tables->linker, table_offsets); ++ ++ /* RSDP is in FSEG memory, so allocate it separately */ ++ build_rsdp(tables->rsdp, tables->linker, rsdt); ++ ++ /* We'll expose it all to Guest so align size to reduce ++ * chance of size changes. ++ * RSDP is small so it's easy to keep it immutable, no need to ++ * bother with alignment. ++ */ ++ acpi_align_size(tables->table_data, 0x1000); ++ ++ acpi_align_size(tables->linker, 0x1000); ++ ++ /* Cleanup memory that's no longer used. */ ++ g_array_free(table_offsets, true); ++} ++ ++static void acpi_build_update(void *build_opaque, uint32_t offset) ++{ ++ AcpiBuildState *build_state = build_opaque; ++ AcpiBuildTables tables; ++ ++ /* No state to update or already patched? Nothing to do. */ ++ if (!build_state || build_state->patched) { ++ return; ++ } ++ build_state->patched = 1; ++ ++ acpi_build_tables_init(&tables); ++ ++ acpi_build(build_state->guest_info, &tables); ++ ++ assert(acpi_data_len(tables.table_data) == build_state->table_size); ++ memcpy(build_state->table_ram, tables.table_data->data, ++ build_state->table_size); ++ ++ acpi_build_tables_cleanup(&tables, true); ++} ++ ++static void acpi_build_reset(void *build_opaque) ++{ ++ AcpiBuildState *build_state = build_opaque; ++ build_state->patched = 0; ++} ++ ++static void *acpi_add_rom_blob(AcpiBuildState *build_state, GArray *blob, ++ const char *name) ++{ ++ return rom_add_blob(name, blob->data, acpi_data_len(blob), -1, name, ++ acpi_build_update, build_state); ++} ++ ++static const VMStateDescription vmstate_acpi_build = { ++ .name = "acpi_build", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT8(patched, AcpiBuildState), ++ VMSTATE_END_OF_LIST() ++ }, ++}; ++ ++void acpi_setup(PcGuestInfo *guest_info) ++{ ++ AcpiBuildTables tables; ++ AcpiBuildState *build_state; ++ ++ if (!guest_info->fw_cfg) { ++ ACPI_BUILD_DPRINTF(3, "No fw cfg. Bailing out.\n"); ++ return; ++ } ++ ++ if (!guest_info->has_acpi_build) { ++ ACPI_BUILD_DPRINTF(3, "ACPI build disabled. Bailing out.\n"); ++ return; ++ } ++ ++ build_state = g_malloc0(sizeof *build_state); ++ ++ build_state->guest_info = guest_info; ++ ++ acpi_build_tables_init(&tables); ++ acpi_build(build_state->guest_info, &tables); ++ ++ /* Now expose it all to Guest */ ++ build_state->table_ram = acpi_add_rom_blob(build_state, tables.table_data, ++ ACPI_BUILD_TABLE_FILE); ++ build_state->table_size = acpi_data_len(tables.table_data); ++ ++ acpi_add_rom_blob(NULL, tables.linker, "etc/table-loader"); ++ ++ /* ++ * RSDP is small so it's easy to keep it immutable, no need to ++ * bother with ROM blobs. ++ */ ++ fw_cfg_add_file(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE, ++ tables.rsdp->data, acpi_data_len(tables.rsdp)); ++ ++ qemu_register_reset(acpi_build_reset, build_state); ++ acpi_build_reset(build_state); ++ vmstate_register(NULL, 0, &vmstate_acpi_build, build_state); ++ ++ /* Cleanup tables but don't free the memory: we track it ++ * in build_state. ++ */ ++ acpi_build_tables_cleanup(&tables, false); ++} +diff --git a/hw/i386/acpi-build.h b/hw/i386/acpi-build.h +new file mode 100644 +index 0000000..e57b1aa +--- /dev/null ++++ b/hw/i386/acpi-build.h +@@ -0,0 +1,9 @@ ++ ++#ifndef HW_I386_ACPI_BUILD_H ++#define HW_I386_ACPI_BUILD_H ++ ++#include "qemu/typedefs.h" ++ ++void acpi_setup(PcGuestInfo *); ++ ++#endif +diff --git a/hw/i386/acpi-defs.h b/hw/i386/acpi-defs.h +new file mode 100644 +index 0000000..78ca204 +--- /dev/null ++++ b/hw/i386/acpi-defs.h +@@ -0,0 +1,331 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++#ifndef QEMU_ACPI_DEFS_H ++#define QEMU_ACPI_DEFS_H ++ ++enum { ++ ACPI_FADT_F_WBINVD, ++ ACPI_FADT_F_WBINVD_FLUSH, ++ ACPI_FADT_F_PROC_C1, ++ ACPI_FADT_F_P_LVL2_UP, ++ ACPI_FADT_F_PWR_BUTTON, ++ ACPI_FADT_F_SLP_BUTTON, ++ ACPI_FADT_F_FIX_RTC, ++ ACPI_FADT_F_RTC_S4, ++ ACPI_FADT_F_TMR_VAL_EXT, ++ ACPI_FADT_F_DCK_CAP, ++ ACPI_FADT_F_RESET_REG_SUP, ++ ACPI_FADT_F_SEALED_CASE, ++ ACPI_FADT_F_HEADLESS, ++ ACPI_FADT_F_CPU_SW_SLP, ++ ACPI_FADT_F_PCI_EXP_WAK, ++ ACPI_FADT_F_USE_PLATFORM_CLOCK, ++ ACPI_FADT_F_S4_RTC_STS_VALID, ++ ACPI_FADT_F_REMOTE_POWER_ON_CAPABLE, ++ ACPI_FADT_F_FORCE_APIC_CLUSTER_MODEL, ++ ACPI_FADT_F_FORCE_APIC_PHYSICAL_DESTINATION_MODE, ++ ACPI_FADT_F_HW_REDUCED_ACPI, ++ ACPI_FADT_F_LOW_POWER_S0_IDLE_CAPABLE, ++}; ++ ++/* ++ * ACPI 2.0 Generic Address Space definition. ++ */ ++struct Acpi20GenericAddress { ++ uint8_t address_space_id; ++ uint8_t register_bit_width; ++ uint8_t register_bit_offset; ++ uint8_t reserved; ++ uint64_t address; ++} QEMU_PACKED; ++typedef struct Acpi20GenericAddress Acpi20GenericAddress; ++ ++#define ACPI_RSDP_SIGNATURE 0x2052545020445352LL // "RSD PTR " ++ ++struct AcpiRsdpDescriptor { /* Root System Descriptor Pointer */ ++ uint64_t signature; /* ACPI signature, contains "RSD PTR " */ ++ uint8_t checksum; /* To make sum of struct == 0 */ ++ uint8_t oem_id [6]; /* OEM identification */ ++ uint8_t revision; /* Must be 0 for 1.0, 2 for 2.0 */ ++ uint32_t rsdt_physical_address; /* 32-bit physical address of RSDT */ ++ uint32_t length; /* XSDT Length in bytes including hdr */ ++ uint64_t xsdt_physical_address; /* 64-bit physical address of XSDT */ ++ uint8_t extended_checksum; /* Checksum of entire table */ ++ uint8_t reserved [3]; /* Reserved field must be 0 */ ++} QEMU_PACKED; ++typedef struct AcpiRsdpDescriptor AcpiRsdpDescriptor; ++ ++/* Table structure from Linux kernel (the ACPI tables are under the ++ BSD license) */ ++ ++ ++#define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \ ++ uint32_t signature; /* ACPI signature (4 ASCII characters) */ \ ++ uint32_t length; /* Length of table, in bytes, including header */ \ ++ uint8_t revision; /* ACPI Specification minor version # */ \ ++ uint8_t checksum; /* To make sum of entire table == 0 */ \ ++ uint8_t oem_id [6]; /* OEM identification */ \ ++ uint8_t oem_table_id [8]; /* OEM table identification */ \ ++ uint32_t oem_revision; /* OEM revision number */ \ ++ uint8_t asl_compiler_id [4]; /* ASL compiler vendor ID */ \ ++ uint32_t asl_compiler_revision; /* ASL compiler revision number */ ++ ++ ++struct AcpiTableHeader /* ACPI common table header */ ++{ ++ ACPI_TABLE_HEADER_DEF ++} QEMU_PACKED; ++typedef struct AcpiTableHeader AcpiTableHeader; ++ ++/* ++ * ACPI 1.0 Fixed ACPI Description Table (FADT) ++ */ ++#define ACPI_FACP_SIGNATURE 0x50434146 // FACP ++struct AcpiFadtDescriptorRev1 ++{ ++ ACPI_TABLE_HEADER_DEF /* ACPI common table header */ ++ uint32_t firmware_ctrl; /* Physical address of FACS */ ++ uint32_t dsdt; /* Physical address of DSDT */ ++ uint8_t model; /* System Interrupt Model */ ++ uint8_t reserved1; /* Reserved */ ++ uint16_t sci_int; /* System vector of SCI interrupt */ ++ uint32_t smi_cmd; /* Port address of SMI command port */ ++ uint8_t acpi_enable; /* Value to write to smi_cmd to enable ACPI */ ++ uint8_t acpi_disable; /* Value to write to smi_cmd to disable ACPI */ ++ uint8_t S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ ++ uint8_t reserved2; /* Reserved - must be zero */ ++ uint32_t pm1a_evt_blk; /* Port address of Power Mgt 1a acpi_event Reg Blk */ ++ uint32_t pm1b_evt_blk; /* Port address of Power Mgt 1b acpi_event Reg Blk */ ++ uint32_t pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ ++ uint32_t pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ ++ uint32_t pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ ++ uint32_t pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ ++ uint32_t gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */ ++ uint32_t gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */ ++ uint8_t pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */ ++ uint8_t pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */ ++ uint8_t pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ ++ uint8_t pm_tmr_len; /* Byte Length of ports at pm_tm_blk */ ++ uint8_t gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ ++ uint8_t gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ ++ uint8_t gpe1_base; /* Offset in gpe model where gpe1 events start */ ++ uint8_t reserved3; /* Reserved */ ++ uint16_t plvl2_lat; /* Worst case HW latency to enter/exit C2 state */ ++ uint16_t plvl3_lat; /* Worst case HW latency to enter/exit C3 state */ ++ uint16_t flush_size; /* Size of area read to flush caches */ ++ uint16_t flush_stride; /* Stride used in flushing caches */ ++ uint8_t duty_offset; /* Bit location of duty cycle field in p_cnt reg */ ++ uint8_t duty_width; /* Bit width of duty cycle field in p_cnt reg */ ++ uint8_t day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */ ++ uint8_t mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */ ++ uint8_t century; /* Index to century in RTC CMOS RAM */ ++ uint8_t reserved4; /* Reserved */ ++ uint8_t reserved4a; /* Reserved */ ++ uint8_t reserved4b; /* Reserved */ ++ uint32_t flags; ++} QEMU_PACKED; ++typedef struct AcpiFadtDescriptorRev1 AcpiFadtDescriptorRev1; ++ ++/* ++ * ACPI 1.0 Root System Description Table (RSDT) ++ */ ++#define ACPI_RSDT_SIGNATURE 0x54445352 // RSDT ++struct AcpiRsdtDescriptorRev1 ++{ ++ ACPI_TABLE_HEADER_DEF /* ACPI common table header */ ++ uint32_t table_offset_entry[0]; /* Array of pointers to other */ ++ /* ACPI tables */ ++} QEMU_PACKED; ++typedef struct AcpiRsdtDescriptorRev1 AcpiRsdtDescriptorRev1; ++ ++/* ++ * ACPI 1.0 Firmware ACPI Control Structure (FACS) ++ */ ++#define ACPI_FACS_SIGNATURE 0x53434146 // FACS ++struct AcpiFacsDescriptorRev1 ++{ ++ uint32_t signature; /* ACPI Signature */ ++ uint32_t length; /* Length of structure, in bytes */ ++ uint32_t hardware_signature; /* Hardware configuration signature */ ++ uint32_t firmware_waking_vector; /* ACPI OS waking vector */ ++ uint32_t global_lock; /* Global Lock */ ++ uint32_t flags; ++ uint8_t resverved3 [40]; /* Reserved - must be zero */ ++} QEMU_PACKED; ++typedef struct AcpiFacsDescriptorRev1 AcpiFacsDescriptorRev1; ++ ++/* ++ * Differentiated System Description Table (DSDT) ++ */ ++#define ACPI_DSDT_SIGNATURE 0x54445344 // DSDT ++ ++/* ++ * MADT values and structures ++ */ ++ ++/* Values for MADT PCATCompat */ ++ ++#define ACPI_DUAL_PIC 0 ++#define ACPI_MULTIPLE_APIC 1 ++ ++/* Master MADT */ ++ ++#define ACPI_APIC_SIGNATURE 0x43495041 // APIC ++struct AcpiMultipleApicTable ++{ ++ ACPI_TABLE_HEADER_DEF /* ACPI common table header */ ++ uint32_t local_apic_address; /* Physical address of local APIC */ ++ uint32_t flags; ++} QEMU_PACKED; ++typedef struct AcpiMultipleApicTable AcpiMultipleApicTable; ++ ++/* Values for Type in APIC sub-headers */ ++ ++#define ACPI_APIC_PROCESSOR 0 ++#define ACPI_APIC_IO 1 ++#define ACPI_APIC_XRUPT_OVERRIDE 2 ++#define ACPI_APIC_NMI 3 ++#define ACPI_APIC_LOCAL_NMI 4 ++#define ACPI_APIC_ADDRESS_OVERRIDE 5 ++#define ACPI_APIC_IO_SAPIC 6 ++#define ACPI_APIC_LOCAL_SAPIC 7 ++#define ACPI_APIC_XRUPT_SOURCE 8 ++#define ACPI_APIC_RESERVED 9 /* 9 and greater are reserved */ ++ ++/* ++ * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE) ++ */ ++#define ACPI_SUB_HEADER_DEF /* Common ACPI sub-structure header */\ ++ uint8_t type; \ ++ uint8_t length; ++ ++/* Sub-structures for MADT */ ++ ++struct AcpiMadtProcessorApic ++{ ++ ACPI_SUB_HEADER_DEF ++ uint8_t processor_id; /* ACPI processor id */ ++ uint8_t local_apic_id; /* Processor's local APIC id */ ++ uint32_t flags; ++} QEMU_PACKED; ++typedef struct AcpiMadtProcessorApic AcpiMadtProcessorApic; ++ ++struct AcpiMadtIoApic ++{ ++ ACPI_SUB_HEADER_DEF ++ uint8_t io_apic_id; /* I/O APIC ID */ ++ uint8_t reserved; /* Reserved - must be zero */ ++ uint32_t address; /* APIC physical address */ ++ uint32_t interrupt; /* Global system interrupt where INTI ++ * lines start */ ++} QEMU_PACKED; ++typedef struct AcpiMadtIoApic AcpiMadtIoApic; ++ ++struct AcpiMadtIntsrcovr { ++ ACPI_SUB_HEADER_DEF ++ uint8_t bus; ++ uint8_t source; ++ uint32_t gsi; ++ uint16_t flags; ++} QEMU_PACKED; ++typedef struct AcpiMadtIntsrcovr AcpiMadtIntsrcovr; ++ ++struct AcpiMadtLocalNmi { ++ ACPI_SUB_HEADER_DEF ++ uint8_t processor_id; /* ACPI processor id */ ++ uint16_t flags; /* MPS INTI flags */ ++ uint8_t lint; /* Local APIC LINT# */ ++} QEMU_PACKED; ++typedef struct AcpiMadtLocalNmi AcpiMadtLocalNmi; ++ ++/* ++ * HPET Description Table ++ */ ++#define ACPI_HPET_SIGNATURE 0x54455048 // HPET ++struct Acpi20Hpet { ++ ACPI_TABLE_HEADER_DEF /* ACPI common table header */ ++ uint32_t timer_block_id; ++ Acpi20GenericAddress addr; ++ uint8_t hpet_number; ++ uint16_t min_tick; ++ uint8_t page_protect; ++} QEMU_PACKED; ++typedef struct Acpi20Hpet Acpi20Hpet; ++ ++/* ++ * SRAT (NUMA topology description) table ++ */ ++ ++#define ACPI_SRAT_SIGNATURE 0x54415253 // SRAT ++struct AcpiSystemResourceAffinityTable ++{ ++ ACPI_TABLE_HEADER_DEF ++ uint32_t reserved1; ++ uint32_t reserved2[2]; ++} QEMU_PACKED; ++typedef struct AcpiSystemResourceAffinityTable AcpiSystemResourceAffinityTable; ++ ++#define ACPI_SRAT_PROCESSOR 0 ++#define ACPI_SRAT_MEMORY 1 ++ ++struct AcpiSratProcessorAffinity ++{ ++ ACPI_SUB_HEADER_DEF ++ uint8_t proximity_lo; ++ uint8_t local_apic_id; ++ uint32_t flags; ++ uint8_t local_sapic_eid; ++ uint8_t proximity_hi[3]; ++ uint32_t reserved; ++} QEMU_PACKED; ++typedef struct AcpiSratProcessorAffinity AcpiSratProcessorAffinity; ++ ++struct AcpiSratMemoryAffinity ++{ ++ ACPI_SUB_HEADER_DEF ++ uint8_t proximity[4]; ++ uint16_t reserved1; ++ uint64_t base_addr; ++ uint64_t range_length; ++ uint32_t reserved2; ++ uint32_t flags; ++ uint32_t reserved3[2]; ++} QEMU_PACKED; ++typedef struct AcpiSratMemoryAffinity AcpiSratMemoryAffinity; ++ ++/* PCI fw r3.0 MCFG table. */ ++/* Subtable */ ++struct AcpiMcfgAllocation { ++ uint64_t address; /* Base address, processor-relative */ ++ uint16_t pci_segment; /* PCI segment group number */ ++ uint8_t start_bus_number; /* Starting PCI Bus number */ ++ uint8_t end_bus_number; /* Final PCI Bus number */ ++ uint32_t reserved; ++} QEMU_PACKED; ++typedef struct AcpiMcfgAllocation AcpiMcfgAllocation; ++ ++#define ACPI_MCFG_SIGNATURE 0x4746434d // MCFG ++ ++/* Reserved signature: ignored by OSPM */ ++#define ACPI_RSRV_SIGNATURE 0x554d4551 // QEMU ++ ++struct AcpiTableMcfg { ++ ACPI_TABLE_HEADER_DEF; ++ uint8_t reserved[8]; ++ AcpiMcfgAllocation allocation[0]; ++} QEMU_PACKED; ++typedef struct AcpiTableMcfg AcpiTableMcfg; ++ ++#endif +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 041e537..320f668 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -56,6 +56,7 @@ + #include "hw/cpu/icc_bus.h" + #include "hw/boards.h" + #include "hw/pci/pci_host.h" ++#include "acpi-build.h" + + /* debug PC/ISA interrupts */ + //#define DEBUG_IRQ +@@ -1035,6 +1036,7 @@ void pc_guest_info_machine_done(Notifier *notifier, void *data) + PcGuestInfoState, + machine_done); + pc_fw_cfg_guest_info(&guest_info_state->info); ++ acpi_setup(&guest_info_state->info); + } + + PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 211ff8e..ffa35d3 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -60,6 +60,7 @@ static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + + static bool smbios_type1_defaults = true; + static bool has_pci_info = true; ++static bool has_acpi_build = true; + + /* PC hardware initialisation */ + static void pc_init1(QEMUMachineInitArgs *args, +@@ -123,6 +124,9 @@ static void pc_init1(QEMUMachineInitArgs *args, + } + + guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); ++ ++ guest_info->has_acpi_build = has_acpi_build; ++ + guest_info->has_pci_info = has_pci_info; + + /* allocate ram and load rom/bios */ +@@ -899,6 +903,7 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + 0, CPUID_EXT2_RDTSCP); + + rom_file_in_ram = false; ++ has_acpi_build = false; + pc_init_rhel700(args); + } + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 7a58b61..824295d 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -50,6 +50,7 @@ + + static bool smbios_type1_defaults = true; + static bool has_pci_info = true; ++static bool has_acpi_build = true; + + /* PC hardware initialisation */ + static void pc_q35_init(QEMUMachineInitArgs *args) +@@ -110,6 +111,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + + guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); + guest_info->has_pci_info = has_pci_info; ++ guest_info->has_acpi_build = has_acpi_build; + + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 8793715..5c69abe 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -41,6 +41,7 @@ struct PcGuestInfo { + uint64_t *node_mem; + uint64_t *node_cpu; + FWCfgState *fw_cfg; ++ bool has_acpi_build; + }; + + /* parallel.c */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-i386-Add-CPUID-bit-and-feature-words-for-IA32_ARCH_C.patch b/SOURCES/kvm-i386-Add-CPUID-bit-and-feature-words-for-IA32_ARCH_C.patch new file mode 100644 index 0000000..ba295b6 --- /dev/null +++ b/SOURCES/kvm-i386-Add-CPUID-bit-and-feature-words-for-IA32_ARCH_C.patch @@ -0,0 +1,49 @@ +From 1dd8f3631cc86fcf670f69befb5cd02e0b548da4 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:21 +0200 +Subject: [PATCH 05/12] i386: Add CPUID bit and feature words for + IA32_ARCH_CAPABILITIES MSR + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-5-git-send-email-plai@redhat.com> +Patchwork-id: 90857 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 04/10] i386: Add CPUID bit and feature words for IA32_ARCH_CAPABILITIES MSR +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Robert Hoo + +Support of IA32_PRED_CMD MSR already be enumerated by same CPUID bit as +SPEC_CTRL. + +At present, mark CPUID_7_0_EDX_ARCH_CAPABILITIES unmigratable, per Paolo's +comment. + +Signed-off-by: Robert Hoo +Message-Id: <1530781798-183214-3-git-send-email-robert.hu@linux.intel.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit 3fc7c73139d2d38ae80c3b0bc963b1ac1555924c) +Signed-off-by: Paul Lai +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index ff0921f..838c616 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -174,7 +174,7 @@ static const char *cpuid_7_0_edx_feature_name[] = { + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, "spec-ctrl", "stibp", +- NULL, "arch-facilities", NULL, "ssbd", ++ NULL, "arch-facilities|arch-capabilities", NULL, "ssbd", + }; + + static const char *cpuid_80000008_ebx_feature_name[] = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-Add-new-MSR-indices-for-IA32_PRED_CMD-and-IA32_.patch b/SOURCES/kvm-i386-Add-new-MSR-indices-for-IA32_PRED_CMD-and-IA32_.patch new file mode 100644 index 0000000..acb74dd --- /dev/null +++ b/SOURCES/kvm-i386-Add-new-MSR-indices-for-IA32_PRED_CMD-and-IA32_.patch @@ -0,0 +1,50 @@ +From 2ef29c217183a2e16bbc8d209d94a2bb5a009204 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:20 +0200 +Subject: [PATCH 04/12] i386: Add new MSR indices for IA32_PRED_CMD and + IA32_ARCH_CAPABILITIES + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-4-git-send-email-plai@redhat.com> +Patchwork-id: 90862 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 03/10] i386: Add new MSR indices for IA32_PRED_CMD and IA32_ARCH_CAPABILITIES +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Robert Hoo + +IA32_PRED_CMD MSR gives software a way to issue commands that affect the state +of indirect branch predictors. Enumerated by CPUID.(EAX=7H,ECX=0):EDX[26]. +IA32_ARCH_CAPABILITIES MSR enumerates architectural features of RDCL_NO and +IBRS_ALL. Enumerated by CPUID.(EAX=07H, ECX=0):EDX[29]. + +https://software.intel.com/sites/default/files/managed/c5/63/336996-Speculative-Execution-Side-Channel-Mitigations.pdf + +Signed-off-by: Robert Hoo +Message-Id: <1530781798-183214-2-git-send-email-robert.hu@linux.intel.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit 8c80c99fcceabd0708a5a83f08577e778c9419f5) +Signed-off-by: Paul Lai +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index cbbc34f..0ce479a 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -306,6 +306,8 @@ + #define MSR_TSC_ADJUST 0x0000003b + #define MSR_IA32_SPEC_CTRL 0x48 + #define MSR_VIRT_SSBD 0xc001011f ++#define MSR_IA32_PRED_CMD 0x49 ++#define MSR_IA32_ARCH_CAPABILITIES 0x10a + #define MSR_IA32_TSCDEADLINE 0x6e0 + + #define MSR_P6_PERFCTR0 0xc1 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-Define-the-Virt-SSBD-MSR-and-handling-of-it-CVE.patch b/SOURCES/kvm-i386-Define-the-Virt-SSBD-MSR-and-handling-of-it-CVE.patch new file mode 100644 index 0000000..1d3e2aa --- /dev/null +++ b/SOURCES/kvm-i386-Define-the-Virt-SSBD-MSR-and-handling-of-it-CVE.patch @@ -0,0 +1,168 @@ +From eba382cf6a9a9b0003f10ac3da3e638d6f70d492 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 13 Jun 2018 18:50:55 +0200 +Subject: [PATCH 03/17] i386: Define the Virt SSBD MSR and handling of it + (CVE-2018-3639) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20180613185056.18066-2-ehabkost@redhat.com> +Patchwork-id: 80679 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/2] i386: Define the Virt SSBD MSR and handling of it (CVE-2018-3639) +Bugzilla: 1584583 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +From: Konrad Rzeszutek Wilk + +"Some AMD processors only support a non-architectural means of enabling +speculative store bypass disable (SSBD). To allow a simplified view of +this to a guest, an architectural definition has been created through a new +CPUID bit, 0x80000008_EBX[25], and a new MSR, 0xc001011f. With this, a +hypervisor can virtualize the existence of this definition and provide an +architectural method for using SSBD to a guest. + +Add the new CPUID feature, the new MSR and update the existing SSBD +support to use this MSR when present." (from x86/speculation: Add virtualized +speculative store bypass disable support in Linux). + +Signed-off-by: Konrad Rzeszutek Wilk +Reviewed-by: Daniel P. Berrangé +Signed-off-by: Daniel P. Berrangé +Message-Id: <20180521215424.13520-4-berrange@redhat.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit cfeea0c021db6234c154dbc723730e81553924ff) +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/kvm.c (MSR code) + target-i386/machine.c (trivial change from + VMStateDescription.needed to VMStateSubsection.needed) + +Signed-off-by: Eduardo Habkost +--- + target-i386/cpu.h | 2 ++ + target-i386/kvm.c | 17 +++++++++++++++-- + target-i386/machine.c | 21 +++++++++++++++++++++ + 3 files changed, 38 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index c72b545..debb0e5 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -305,6 +305,7 @@ + #define MSR_IA32_APICBASE_BASE (0xfffff<<12) + #define MSR_TSC_ADJUST 0x0000003b + #define MSR_IA32_SPEC_CTRL 0x48 ++#define MSR_VIRT_SSBD 0xc001011f + #define MSR_IA32_TSCDEADLINE 0x6e0 + + #define MSR_P6_PERFCTR0 0xc1 +@@ -1052,6 +1053,7 @@ typedef struct CPUX86State { + uint32_t pkru; + + uint64_t spec_ctrl; ++ uint64_t virt_ssbd; + + TPRAccess tpr_access_type; + } CPUX86State; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index a1a49d8..35a9cf4 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -78,6 +78,7 @@ static bool has_msr_hv_tsc; + static bool has_msr_mtrr; + static bool has_msr_xss; + static bool has_msr_spec_ctrl; ++static bool has_msr_virt_ssbd; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -805,6 +806,10 @@ static int kvm_get_supported_msrs(KVMState *s) + has_msr_spec_ctrl = true; + continue; + } ++ if (kvm_msr_list->indices[i] == MSR_VIRT_SSBD) { ++ has_msr_virt_ssbd = true; ++ continue; ++ } + } + } + +@@ -1217,6 +1222,10 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + if (has_msr_spec_ctrl) { + kvm_msr_entry_set(&msrs[n++], MSR_IA32_SPEC_CTRL, env->spec_ctrl); + } ++ if (has_msr_virt_ssbd) { ++ kvm_msr_entry_set(&msrs[n++], MSR_VIRT_SSBD, env->virt_ssbd); ++ } ++ + #ifdef TARGET_X86_64 + if (lm_capable_kernel) { + kvm_msr_entry_set(&msrs[n++], MSR_CSTAR, env->cstar); +@@ -1577,8 +1586,9 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_spec_ctrl) { + msrs[n++].index = MSR_IA32_SPEC_CTRL; + } +- +- ++ if (has_msr_virt_ssbd) { ++ msrs[n++].index = MSR_VIRT_SSBD; ++ } + if (!env->tsc_valid) { + msrs[n++].index = MSR_IA32_TSC; + env->tsc_valid = !runstate_is_running(); +@@ -1822,6 +1832,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_IA32_SPEC_CTRL: + env->spec_ctrl = msrs[i].data; + break; ++ case MSR_VIRT_SSBD: ++ env->virt_ssbd = msrs[i].data; ++ break; + } + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index d883c86..507ab1a 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -760,6 +760,24 @@ static const VMStateDescription vmstate_spec_ctrl = { + } + }; + ++static bool virt_ssbd_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->virt_ssbd != 0; ++} ++ ++static const VMStateDescription vmstate_msr_virt_ssbd = { ++ .name = "cpu/virt_ssbd", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]){ ++ VMSTATE_UINT64(env.virt_ssbd, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -917,6 +935,9 @@ const VMStateDescription vmstate_x86_cpu = { + }, { + .vmsd = &vmstate_spec_ctrl, + .needed = spec_ctrl_needed, ++ }, { ++ .vmsd = &vmstate_msr_virt_ssbd, ++ .needed = virt_ssbd_needed, + } , { + /* empty */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-Deprecate-arch-facilities-and-make-it-block-liv.patch b/SOURCES/kvm-i386-Deprecate-arch-facilities-and-make-it-block-liv.patch new file mode 100644 index 0000000..8011d2d --- /dev/null +++ b/SOURCES/kvm-i386-Deprecate-arch-facilities-and-make-it-block-liv.patch @@ -0,0 +1,114 @@ +From 59c1aecdd92dc66e92f8ffe8a2a5e121031a2ae7 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 21 Dec 2018 00:31:11 +0100 +Subject: [PATCH 1/2] i386: Deprecate arch-facilities and make it block live + migration + +RH-Author: Eduardo Habkost +Message-id: <20181221003111.32374-1-ehabkost@redhat.com> +Patchwork-id: 83733 +O-Subject: [RHEL-7.7 qemu-kvm PATCH] i386: Deprecate arch-facilities and make it block live migration +Bugzilla: 1658407 +RH-Acked-by: Bandan Das +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Jiri Denemark + +The arch-facilities feature flag is being deprecated because it +was never supported upstream. The upstream property is +called "arch-capabilities", but it was not backported to +RHEL7/qemu-kvm. + +Note that arch-capabilities is not required for mitigation of +CVE-2017-5715. + +In addition to being deprecated, arch-facilities will now block +live migration because the value of MSR_IA32_ARCH_CAPABILITIES is +host-dependent and not migration-safe. + +Note that the "arch-facilities" option didn't work in RHEL-7.5. +It only started working (by accident) on RHEL-7.6, after the KVM +kernel module code was updated to report the feature flag on +GET_SUPPORTED_CPUID. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 35 +++++++++++++++++++++++++++++++++++ + target-i386/cpu.h | 1 + + 2 files changed, 36 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 4b3a238e8d..a36483eca9 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -34,6 +34,7 @@ + #include "qapi-visit.h" + #include "qapi/visitor.h" + #include "sysemu/arch_init.h" ++#include "migration/migration.h" + + #include "hw/hw.h" + #if defined(CONFIG_KVM) +@@ -1742,6 +1743,14 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + wi->cpuid_reg); + } + ++ /* ++ * Features that won't be enabled automatically by "-cpu host" even if ++ * reported by GET_SUPPORTED_CPUID: ++ */ ++ ++ /* arch-facilities: deprecated (see comment on x86_cpu_realizefn()) */ ++ x86_cpu_def->features[FEAT_7_0_EDX] &= ~CPUID_7_0_EDX_ARCH_CAPABILITIES; ++ + #endif /* CONFIG_KVM */ + } + +@@ -3089,6 +3098,32 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + #endif + } + ++ /* ++ * RHEL-only: ++ * ++ * The arch-facilities feature flag is deprecated because it was never ++ * supported upstream. The upstream property is "arch-capabilities", ++ * but it was not backported to this QEMU version. Note that ++ * arch-capabilities is not required for mitigation of CVE-2017-5715. ++ * ++ * In addition to being deprecated, arch-facilities blocks live migration ++ * because the value of MSR_IA32_ARCH_CAPABILITIES is host-dependent and ++ * not migration-safe. ++ */ ++ if (cpu->env.features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_CAPABILITIES) { ++ static bool warned = false; ++ static Error *arch_facilities_blocker; ++ if (!warned) { ++ error_setg(&arch_facilities_blocker, ++ "The arch-facilities CPU feature is deprecated and " ++ "does not support live migration"); ++ migrate_add_blocker(arch_facilities_blocker); ++ error_report("WARNING: the arch-facilities CPU feature is " ++ "deprecated and does not support live migration"); ++ warned = true; ++ } ++ } ++ + #ifndef CONFIG_USER_ONLY + qemu_register_reset(x86_cpu_machine_reset_cb, cpu); + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index debb0e5bf4..73437f16c5 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -597,6 +597,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ + #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ + #define CPUID_7_0_EDX_SPEC_CTRL (1U << 26) /* Indirect Branch - Restrict Speculation */ ++#define CPUID_7_0_EDX_ARCH_CAPABILITIES (1U << 29) /*Arch Capabilities*/ + #define CPUID_7_0_EDX_SPEC_CTRL_SSBD (1U << 31) /* Speculative Store Bypass Disable */ + + #define CPUID_8000_0008_EBX_IBPB (1U << 12) /* Indirect Branch Prediction Barrier */ +-- +2.19.1 + diff --git a/SOURCES/kvm-i386-Don-t-copy-host-virtual-address-limit.patch b/SOURCES/kvm-i386-Don-t-copy-host-virtual-address-limit.patch new file mode 100644 index 0000000..08fa4c7 --- /dev/null +++ b/SOURCES/kvm-i386-Don-t-copy-host-virtual-address-limit.patch @@ -0,0 +1,55 @@ +From ba222e201e070d95e282762e890cf8e86251e84c Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 21 Aug 2019 22:28:26 +0200 +Subject: [PATCH 3/3] i386: Don't copy host virtual address limit + +RH-Author: Eduardo Habkost +Message-id: <20190821222826.11853-1-ehabkost@redhat.com> +Patchwork-id: 90110 +O-Subject: [RHEL-7.8 qemu-kvm PATCH] i386: Don't copy host virtual address limit +Bugzilla: 1706658 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Bandan Das + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1706658 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23157241 +Upstream: not applicable + +The KVM code in RHEL-7 supports only 48-bit virtual addresses. +Copying the host virtual address size to the guest is pointless +and only makes the VM crash if the host virtual address size is +not 48 bits. + +Change the downstream-only code that copies host CPUID to just +copy the physical address limit, and keep the hardcoded virtual +address size. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index c74f597..ca43268 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2841,7 +2841,13 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + uint32_t _eax; + host_cpuid(0x80000000, 0, &_eax, NULL, NULL, NULL); + if (_eax >= 0x80000008) +- host_cpuid(0x80000008, 0, eax, NULL, NULL, NULL); ++ host_cpuid(0x80000008, 0, &_eax, NULL, NULL, NULL); ++ /* ++ * Override physical size only, as RHEL-7 KVM only supports ++ * 48 bits virtual. ++ */ ++ *eax &= ~0xff; ++ *eax |= _eax & 0xff; + } + } else { + if (env->features[FEAT_1_EDX] & CPUID_PSE36) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-add-ACPI-table-files-from-seabios.patch b/SOURCES/kvm-i386-add-ACPI-table-files-from-seabios.patch new file mode 100644 index 0000000..ec595a5 --- /dev/null +++ b/SOURCES/kvm-i386-add-ACPI-table-files-from-seabios.patch @@ -0,0 +1,2058 @@ +From 4d111d7b23baba92ce5a2f7deb7d33f4088d8342 Mon Sep 17 00:00:00 2001 +Message-Id: <4d111d7b23baba92ce5a2f7deb7d33f4088d8342.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:12 +0100 +Subject: [PATCH 32/56] i386: add ACPI table files from seabios + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-33-git-send-email-mst@redhat.com> +Patchwork-id: 56338 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 32/57] i386: add ACPI table files from seabios +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +This adds ASL code as well as scripts for processing it, +imported from seabios git tree +commit 51684b7ced75fb76776e8ee84833fcfb6ecf12dd + +Will be used for runtime acpi table generation. + +Note: +This patch reuses some code from SeaBIOS, which was originally under +LGPLv2 and then relicensed to GPLv3 or LGPLv3, in QEMU under GPLv2+. This +relicensing has been acked by all contributors that had contributed to the +code since the v2->v3 relicense. ACKs approving the v2+ relicensing are +listed below. The list might include ACKs from people not holding +copyright on any parts of the reused code, but it's better to err on the +side of caution and include them. + +Affected SeaBIOS files (GPLv2+ license headers added) +: + + src/acpi-dsdt-cpu-hotplug.dsl + src/acpi-dsdt-dbug.dsl + src/acpi-dsdt-hpet.dsl + src/acpi-dsdt-isa.dsl + src/acpi-dsdt-pci-crs.dsl + src/acpi.c + src/acpi.h + src/ssdt-misc.dsl + src/ssdt-pcihp.dsl + src/ssdt-proc.dsl + tools/acpi_extract.py + tools/acpi_extract_preprocess.py + +Each one of the listed people agreed to the following: + +> If you allow the use of your contribution in QEMU under the +> terms of GPLv2 or later as proposed by this patch, +> please respond to this mail including the line: +> +> Acked-by: Name + + Acked-by: Gerd Hoffmann + Acked-by: Jan Kiszka + Acked-by: Jason Baron + Acked-by: David Woodhouse + Acked-by: Gleb Natapov + Acked-by: Marcelo Tosatti + Acked-by: Dave Frodin + Acked-by: Paolo Bonzini + Acked-by: Kevin O'Connor + Acked-by: Laszlo Ersek + Acked-by: Kenji Kaneshige + Acked-by: Isaku Yamahata + Acked-by: Magnus Christensson + Acked-by: Hu Tao + Acked-by: Eduardo Habkost + +Reviewed-by: Laszlo Ersek +Reviewed-by: Hu Tao +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 74523b850189afc23b608918c458b9242757f6d9) +--- + hw/i386/acpi-dsdt-cpu-hotplug.dsl | 93 ++++++++ + hw/i386/acpi-dsdt-dbug.dsl | 41 ++++ + hw/i386/acpi-dsdt-hpet.dsl | 51 +++++ + hw/i386/acpi-dsdt-isa.dsl | 117 ++++++++++ + hw/i386/acpi-dsdt-pci-crs.dsl | 105 +++++++++ + hw/i386/acpi-dsdt.dsl | 343 ++++++++++++++++++++++++++++ + hw/i386/q35-acpi-dsdt.dsl | 452 +++++++++++++++++++++++++++++++++++++ + hw/i386/ssdt-misc.dsl | 119 ++++++++++ + hw/i386/ssdt-pcihp.dsl | 51 +++++ + hw/i386/ssdt-proc.dsl | 63 ++++++ + scripts/acpi_extract.py | 362 +++++++++++++++++++++++++++++ + scripts/acpi_extract_preprocess.py | 51 +++++ + 12 files changed, 1848 insertions(+) + create mode 100644 hw/i386/acpi-dsdt-cpu-hotplug.dsl + create mode 100644 hw/i386/acpi-dsdt-dbug.dsl + create mode 100644 hw/i386/acpi-dsdt-hpet.dsl + create mode 100644 hw/i386/acpi-dsdt-isa.dsl + create mode 100644 hw/i386/acpi-dsdt-pci-crs.dsl + create mode 100644 hw/i386/acpi-dsdt.dsl + create mode 100644 hw/i386/q35-acpi-dsdt.dsl + create mode 100644 hw/i386/ssdt-misc.dsl + create mode 100644 hw/i386/ssdt-pcihp.dsl + create mode 100644 hw/i386/ssdt-proc.dsl + create mode 100755 scripts/acpi_extract.py + create mode 100755 scripts/acpi_extract_preprocess.py + +Signed-off-by: Michal Novotny +--- + hw/i386/acpi-dsdt-cpu-hotplug.dsl | 93 ++++++++ + hw/i386/acpi-dsdt-dbug.dsl | 41 ++++ + hw/i386/acpi-dsdt-hpet.dsl | 51 +++++ + hw/i386/acpi-dsdt-isa.dsl | 117 ++++++++++ + hw/i386/acpi-dsdt-pci-crs.dsl | 105 +++++++++ + hw/i386/acpi-dsdt.dsl | 343 ++++++++++++++++++++++++++++ + hw/i386/q35-acpi-dsdt.dsl | 452 +++++++++++++++++++++++++++++++++++++ + hw/i386/ssdt-misc.dsl | 119 ++++++++++ + hw/i386/ssdt-pcihp.dsl | 51 +++++ + hw/i386/ssdt-proc.dsl | 63 ++++++ + scripts/acpi_extract.py | 362 +++++++++++++++++++++++++++++ + scripts/acpi_extract_preprocess.py | 51 +++++ + 12 files changed, 1848 insertions(+) + create mode 100644 hw/i386/acpi-dsdt-cpu-hotplug.dsl + create mode 100644 hw/i386/acpi-dsdt-dbug.dsl + create mode 100644 hw/i386/acpi-dsdt-hpet.dsl + create mode 100644 hw/i386/acpi-dsdt-isa.dsl + create mode 100644 hw/i386/acpi-dsdt-pci-crs.dsl + create mode 100644 hw/i386/acpi-dsdt.dsl + create mode 100644 hw/i386/q35-acpi-dsdt.dsl + create mode 100644 hw/i386/ssdt-misc.dsl + create mode 100644 hw/i386/ssdt-pcihp.dsl + create mode 100644 hw/i386/ssdt-proc.dsl + create mode 100755 scripts/acpi_extract.py + create mode 100755 scripts/acpi_extract_preprocess.py + +diff --git a/hw/i386/acpi-dsdt-cpu-hotplug.dsl b/hw/i386/acpi-dsdt-cpu-hotplug.dsl +new file mode 100644 +index 0000000..c96ac42 +--- /dev/null ++++ b/hw/i386/acpi-dsdt-cpu-hotplug.dsl +@@ -0,0 +1,93 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++/**************************************************************** ++ * CPU hotplug ++ ****************************************************************/ ++ ++Scope(\_SB) { ++ /* Objects filled in by run-time generated SSDT */ ++ External(NTFY, MethodObj) ++ External(CPON, PkgObj) ++ ++ /* Methods called by run-time generated SSDT Processor objects */ ++ Method(CPMA, 1, NotSerialized) { ++ // _MAT method - create an madt apic buffer ++ // Arg0 = Processor ID = Local APIC ID ++ // Local0 = CPON flag for this cpu ++ Store(DerefOf(Index(CPON, Arg0)), Local0) ++ // Local1 = Buffer (in madt apic form) to return ++ Store(Buffer(8) {0x00, 0x08, 0x00, 0x00, 0x00, 0, 0, 0}, Local1) ++ // Update the processor id, lapic id, and enable/disable status ++ Store(Arg0, Index(Local1, 2)) ++ Store(Arg0, Index(Local1, 3)) ++ Store(Local0, Index(Local1, 4)) ++ Return (Local1) ++ } ++ Method(CPST, 1, NotSerialized) { ++ // _STA method - return ON status of cpu ++ // Arg0 = Processor ID = Local APIC ID ++ // Local0 = CPON flag for this cpu ++ Store(DerefOf(Index(CPON, Arg0)), Local0) ++ If (Local0) { ++ Return (0xF) ++ } Else { ++ Return (0x0) ++ } ++ } ++ Method(CPEJ, 2, NotSerialized) { ++ // _EJ0 method - eject callback ++ Sleep(200) ++ } ++ ++ /* CPU hotplug notify method */ ++ OperationRegion(PRST, SystemIO, 0xaf00, 32) ++ Field(PRST, ByteAcc, NoLock, Preserve) { ++ PRS, 256 ++ } ++ Method(PRSC, 0) { ++ // Local5 = active cpu bitmap ++ Store(PRS, Local5) ++ // Local2 = last read byte from bitmap ++ Store(Zero, Local2) ++ // Local0 = Processor ID / APIC ID iterator ++ Store(Zero, Local0) ++ While (LLess(Local0, SizeOf(CPON))) { ++ // Local1 = CPON flag for this cpu ++ Store(DerefOf(Index(CPON, Local0)), Local1) ++ If (And(Local0, 0x07)) { ++ // Shift down previously read bitmap byte ++ ShiftRight(Local2, 1, Local2) ++ } Else { ++ // Read next byte from cpu bitmap ++ Store(DerefOf(Index(Local5, ShiftRight(Local0, 3))), Local2) ++ } ++ // Local3 = active state for this cpu ++ Store(And(Local2, 1), Local3) ++ ++ If (LNotEqual(Local1, Local3)) { ++ // State change - update CPON with new state ++ Store(Local3, Index(CPON, Local0)) ++ // Do CPU notify ++ If (LEqual(Local3, 1)) { ++ NTFY(Local0, 1) ++ } Else { ++ NTFY(Local0, 3) ++ } ++ } ++ Increment(Local0) ++ } ++ } ++} +diff --git a/hw/i386/acpi-dsdt-dbug.dsl b/hw/i386/acpi-dsdt-dbug.dsl +new file mode 100644 +index 0000000..86230f7 +--- /dev/null ++++ b/hw/i386/acpi-dsdt-dbug.dsl +@@ -0,0 +1,41 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++/**************************************************************** ++ * Debugging ++ ****************************************************************/ ++ ++Scope(\) { ++ /* Debug Output */ ++ OperationRegion(DBG, SystemIO, 0x0402, 0x01) ++ Field(DBG, ByteAcc, NoLock, Preserve) { ++ DBGB, 8, ++ } ++ ++ /* Debug method - use this method to send output to the QEMU ++ * BIOS debug port. This method handles strings, integers, ++ * and buffers. For example: DBUG("abc") DBUG(0x123) */ ++ Method(DBUG, 1) { ++ ToHexString(Arg0, Local0) ++ ToBuffer(Local0, Local0) ++ Subtract(SizeOf(Local0), 1, Local1) ++ Store(Zero, Local2) ++ While (LLess(Local2, Local1)) { ++ Store(DerefOf(Index(Local0, Local2)), DBGB) ++ Increment(Local2) ++ } ++ Store(0x0A, DBGB) ++ } ++} +diff --git a/hw/i386/acpi-dsdt-hpet.dsl b/hw/i386/acpi-dsdt-hpet.dsl +new file mode 100644 +index 0000000..dfde174 +--- /dev/null ++++ b/hw/i386/acpi-dsdt-hpet.dsl +@@ -0,0 +1,51 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++/**************************************************************** ++ * HPET ++ ****************************************************************/ ++ ++Scope(\_SB) { ++ Device(HPET) { ++ Name(_HID, EISAID("PNP0103")) ++ Name(_UID, 0) ++ OperationRegion(HPTM, SystemMemory, 0xFED00000, 0x400) ++ Field(HPTM, DWordAcc, Lock, Preserve) { ++ VEND, 32, ++ PRD, 32, ++ } ++ Method(_STA, 0, NotSerialized) { ++ Store(VEND, Local0) ++ Store(PRD, Local1) ++ ShiftRight(Local0, 16, Local0) ++ If (LOr(LEqual(Local0, 0), LEqual(Local0, 0xffff))) { ++ Return (0x0) ++ } ++ If (LOr(LEqual(Local1, 0), LGreater(Local1, 100000000))) { ++ Return (0x0) ++ } ++ Return (0x0F) ++ } ++ Name(_CRS, ResourceTemplate() { ++#if 0 /* This makes WinXP BSOD for not yet figured reasons. */ ++ IRQNoFlags() {2, 8} ++#endif ++ Memory32Fixed(ReadOnly, ++ 0xFED00000, // Address Base ++ 0x00000400, // Address Length ++ ) ++ }) ++ } ++} +diff --git a/hw/i386/acpi-dsdt-isa.dsl b/hw/i386/acpi-dsdt-isa.dsl +new file mode 100644 +index 0000000..89caa16 +--- /dev/null ++++ b/hw/i386/acpi-dsdt-isa.dsl +@@ -0,0 +1,117 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++/* Common legacy ISA style devices. */ ++Scope(\_SB.PCI0.ISA) { ++ ++ Device(RTC) { ++ Name(_HID, EisaId("PNP0B00")) ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x0070, 0x0070, 0x10, 0x02) ++ IRQNoFlags() { 8 } ++ IO(Decode16, 0x0072, 0x0072, 0x02, 0x06) ++ }) ++ } ++ ++ Device(KBD) { ++ Name(_HID, EisaId("PNP0303")) ++ Method(_STA, 0, NotSerialized) { ++ Return (0x0f) ++ } ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x0060, 0x0060, 0x01, 0x01) ++ IO(Decode16, 0x0064, 0x0064, 0x01, 0x01) ++ IRQNoFlags() { 1 } ++ }) ++ } ++ ++ Device(MOU) { ++ Name(_HID, EisaId("PNP0F13")) ++ Method(_STA, 0, NotSerialized) { ++ Return (0x0f) ++ } ++ Name(_CRS, ResourceTemplate() { ++ IRQNoFlags() { 12 } ++ }) ++ } ++ ++ Device(FDC0) { ++ Name(_HID, EisaId("PNP0700")) ++ Method(_STA, 0, NotSerialized) { ++ Store(FDEN, Local0) ++ If (LEqual(Local0, 0)) { ++ Return (0x00) ++ } Else { ++ Return (0x0F) ++ } ++ } ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x03F2, 0x03F2, 0x00, 0x04) ++ IO(Decode16, 0x03F7, 0x03F7, 0x00, 0x01) ++ IRQNoFlags() { 6 } ++ DMA(Compatibility, NotBusMaster, Transfer8) { 2 } ++ }) ++ } ++ ++ Device(LPT) { ++ Name(_HID, EisaId("PNP0400")) ++ Method(_STA, 0, NotSerialized) { ++ Store(LPEN, Local0) ++ If (LEqual(Local0, 0)) { ++ Return (0x00) ++ } Else { ++ Return (0x0F) ++ } ++ } ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x0378, 0x0378, 0x08, 0x08) ++ IRQNoFlags() { 7 } ++ }) ++ } ++ ++ Device(COM1) { ++ Name(_HID, EisaId("PNP0501")) ++ Name(_UID, 0x01) ++ Method(_STA, 0, NotSerialized) { ++ Store(CAEN, Local0) ++ If (LEqual(Local0, 0)) { ++ Return (0x00) ++ } Else { ++ Return (0x0F) ++ } ++ } ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x03F8, 0x03F8, 0x00, 0x08) ++ IRQNoFlags() { 4 } ++ }) ++ } ++ ++ Device(COM2) { ++ Name(_HID, EisaId("PNP0501")) ++ Name(_UID, 0x02) ++ Method(_STA, 0, NotSerialized) { ++ Store(CBEN, Local0) ++ If (LEqual(Local0, 0)) { ++ Return (0x00) ++ } Else { ++ Return (0x0F) ++ } ++ } ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x02F8, 0x02F8, 0x00, 0x08) ++ IRQNoFlags() { 3 } ++ }) ++ } ++} +diff --git a/hw/i386/acpi-dsdt-pci-crs.dsl b/hw/i386/acpi-dsdt-pci-crs.dsl +new file mode 100644 +index 0000000..b375a19 +--- /dev/null ++++ b/hw/i386/acpi-dsdt-pci-crs.dsl +@@ -0,0 +1,105 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++/* PCI CRS (current resources) definition. */ ++Scope(\_SB.PCI0) { ++ ++ Name(CRES, ResourceTemplate() { ++ WordBusNumber(ResourceProducer, MinFixed, MaxFixed, PosDecode, ++ 0x0000, // Address Space Granularity ++ 0x0000, // Address Range Minimum ++ 0x00FF, // Address Range Maximum ++ 0x0000, // Address Translation Offset ++ 0x0100, // Address Length ++ ,, ) ++ IO(Decode16, ++ 0x0CF8, // Address Range Minimum ++ 0x0CF8, // Address Range Maximum ++ 0x01, // Address Alignment ++ 0x08, // Address Length ++ ) ++ WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, ++ 0x0000, // Address Space Granularity ++ 0x0000, // Address Range Minimum ++ 0x0CF7, // Address Range Maximum ++ 0x0000, // Address Translation Offset ++ 0x0CF8, // Address Length ++ ,, , TypeStatic) ++ WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, ++ 0x0000, // Address Space Granularity ++ 0x0D00, // Address Range Minimum ++ 0xFFFF, // Address Range Maximum ++ 0x0000, // Address Translation Offset ++ 0xF300, // Address Length ++ ,, , TypeStatic) ++ DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, ++ 0x00000000, // Address Space Granularity ++ 0x000A0000, // Address Range Minimum ++ 0x000BFFFF, // Address Range Maximum ++ 0x00000000, // Address Translation Offset ++ 0x00020000, // Address Length ++ ,, , AddressRangeMemory, TypeStatic) ++ DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, NonCacheable, ReadWrite, ++ 0x00000000, // Address Space Granularity ++ 0xE0000000, // Address Range Minimum ++ 0xFEBFFFFF, // Address Range Maximum ++ 0x00000000, // Address Translation Offset ++ 0x1EC00000, // Address Length ++ ,, PW32, AddressRangeMemory, TypeStatic) ++ }) ++ ++ Name(CR64, ResourceTemplate() { ++ QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, ++ 0x00000000, // Address Space Granularity ++ 0x8000000000, // Address Range Minimum ++ 0xFFFFFFFFFF, // Address Range Maximum ++ 0x00000000, // Address Translation Offset ++ 0x8000000000, // Address Length ++ ,, PW64, AddressRangeMemory, TypeStatic) ++ }) ++ ++ Method(_CRS, 0) { ++ /* Fields provided by dynamically created ssdt */ ++ External(P0S, IntObj) ++ External(P0E, IntObj) ++ External(P1V, IntObj) ++ External(P1S, BuffObj) ++ External(P1E, BuffObj) ++ External(P1L, BuffObj) ++ ++ /* fixup 32bit pci io window */ ++ CreateDWordField(CRES, \_SB.PCI0.PW32._MIN, PS32) ++ CreateDWordField(CRES, \_SB.PCI0.PW32._MAX, PE32) ++ CreateDWordField(CRES, \_SB.PCI0.PW32._LEN, PL32) ++ Store(P0S, PS32) ++ Store(P0E, PE32) ++ Store(Add(Subtract(P0E, P0S), 1), PL32) ++ ++ If (LEqual(P1V, Zero)) { ++ Return (CRES) ++ } ++ ++ /* fixup 64bit pci io window */ ++ CreateQWordField(CR64, \_SB.PCI0.PW64._MIN, PS64) ++ CreateQWordField(CR64, \_SB.PCI0.PW64._MAX, PE64) ++ CreateQWordField(CR64, \_SB.PCI0.PW64._LEN, PL64) ++ Store(P1S, PS64) ++ Store(P1E, PE64) ++ Store(P1L, PL64) ++ /* add window and return result */ ++ ConcatenateResTemplate(CRES, CR64, Local0) ++ Return (Local0) ++ } ++} +diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl +new file mode 100644 +index 0000000..90efce0 +--- /dev/null ++++ b/hw/i386/acpi-dsdt.dsl +@@ -0,0 +1,343 @@ ++/* ++ * Bochs/QEMU ACPI DSDT ASL definition ++ * ++ * Copyright (c) 2006 Fabrice Bellard ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License version 2 as published by the Free Software Foundation. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++ACPI_EXTRACT_ALL_CODE AcpiDsdtAmlCode ++ ++DefinitionBlock ( ++ "acpi-dsdt.aml", // Output Filename ++ "DSDT", // Signature ++ 0x01, // DSDT Compliance Revision ++ "BXPC", // OEMID ++ "BXDSDT", // TABLE ID ++ 0x1 // OEM Revision ++ ) ++{ ++ ++#include "acpi-dsdt-dbug.dsl" ++ ++ ++/**************************************************************** ++ * PCI Bus definition ++ ****************************************************************/ ++ ++ Scope(\_SB) { ++ Device(PCI0) { ++ Name(_HID, EisaId("PNP0A03")) ++ Name(_ADR, 0x00) ++ Name(_UID, 1) ++ } ++ } ++ ++#include "acpi-dsdt-pci-crs.dsl" ++#include "acpi-dsdt-hpet.dsl" ++ ++ ++/**************************************************************** ++ * VGA ++ ****************************************************************/ ++ ++ Scope(\_SB.PCI0) { ++ Device(VGA) { ++ Name(_ADR, 0x00020000) ++ OperationRegion(PCIC, PCI_Config, Zero, 0x4) ++ Field(PCIC, DWordAcc, NoLock, Preserve) { ++ VEND, 32 ++ } ++ Method(_S1D, 0, NotSerialized) { ++ Return (0x00) ++ } ++ Method(_S2D, 0, NotSerialized) { ++ Return (0x00) ++ } ++ Method(_S3D, 0, NotSerialized) { ++ If (LEqual(VEND, 0x1001b36)) { ++ Return (0x03) // QXL ++ } Else { ++ Return (0x00) ++ } ++ } ++ } ++ } ++ ++ ++/**************************************************************** ++ * PIIX4 PM ++ ****************************************************************/ ++ ++ Scope(\_SB.PCI0) { ++ Device(PX13) { ++ Name(_ADR, 0x00010003) ++ OperationRegion(P13C, PCI_Config, 0x00, 0xff) ++ } ++ } ++ ++ ++/**************************************************************** ++ * PIIX3 ISA bridge ++ ****************************************************************/ ++ ++ Scope(\_SB.PCI0) { ++ Device(ISA) { ++ Name(_ADR, 0x00010000) ++ ++ /* PIIX PCI to ISA irq remapping */ ++ OperationRegion(P40C, PCI_Config, 0x60, 0x04) ++ ++ /* enable bits */ ++ Field(\_SB.PCI0.PX13.P13C, AnyAcc, NoLock, Preserve) { ++ Offset(0x5f), ++ , 7, ++ LPEN, 1, // LPT ++ Offset(0x67), ++ , 3, ++ CAEN, 1, // COM1 ++ , 3, ++ CBEN, 1, // COM2 ++ } ++ Name(FDEN, 1) ++ } ++ } ++ ++#include "acpi-dsdt-isa.dsl" ++ ++ ++/**************************************************************** ++ * PCI hotplug ++ ****************************************************************/ ++ ++ Scope(\_SB.PCI0) { ++ OperationRegion(PCST, SystemIO, 0xae00, 0x08) ++ Field(PCST, DWordAcc, NoLock, WriteAsZeros) { ++ PCIU, 32, ++ PCID, 32, ++ } ++ ++ OperationRegion(SEJ, SystemIO, 0xae08, 0x04) ++ Field(SEJ, DWordAcc, NoLock, WriteAsZeros) { ++ B0EJ, 32, ++ } ++ ++ /* Methods called by bulk generated PCI devices below */ ++ ++ /* Methods called by hotplug devices */ ++ Method(PCEJ, 1, NotSerialized) { ++ // _EJ0 method - eject callback ++ Store(ShiftLeft(1, Arg0), B0EJ) ++ Return (0x0) ++ } ++ ++ /* Hotplug notification method supplied by SSDT */ ++ External(\_SB.PCI0.PCNT, MethodObj) ++ ++ /* PCI hotplug notify method */ ++ Method(PCNF, 0) { ++ // Local0 = iterator ++ Store(Zero, Local0) ++ While (LLess(Local0, 31)) { ++ Increment(Local0) ++ If (And(PCIU, ShiftLeft(1, Local0))) { ++ PCNT(Local0, 1) ++ } ++ If (And(PCID, ShiftLeft(1, Local0))) { ++ PCNT(Local0, 3) ++ } ++ } ++ } ++ } ++ ++ ++/**************************************************************** ++ * PCI IRQs ++ ****************************************************************/ ++ ++ Scope(\_SB) { ++ Scope(PCI0) { ++ Name(_PRT, Package() { ++ /* PCI IRQ routing table, example from ACPI 2.0a specification, ++ section 6.2.8.1 */ ++ /* Note: we provide the same info as the PCI routing ++ table of the Bochs BIOS */ ++ ++#define prt_slot(nr, lnk0, lnk1, lnk2, lnk3) \ ++ Package() { nr##ffff, 0, lnk0, 0 }, \ ++ Package() { nr##ffff, 1, lnk1, 0 }, \ ++ Package() { nr##ffff, 2, lnk2, 0 }, \ ++ Package() { nr##ffff, 3, lnk3, 0 } ++ ++#define prt_slot0(nr) prt_slot(nr, LNKD, LNKA, LNKB, LNKC) ++#define prt_slot1(nr) prt_slot(nr, LNKA, LNKB, LNKC, LNKD) ++#define prt_slot2(nr) prt_slot(nr, LNKB, LNKC, LNKD, LNKA) ++#define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) ++ ++ prt_slot0(0x0000), ++ /* Device 1 is power mgmt device, and can only use irq 9 */ ++ prt_slot(0x0001, LNKS, LNKB, LNKC, LNKD), ++ prt_slot2(0x0002), ++ prt_slot3(0x0003), ++ prt_slot0(0x0004), ++ prt_slot1(0x0005), ++ prt_slot2(0x0006), ++ prt_slot3(0x0007), ++ prt_slot0(0x0008), ++ prt_slot1(0x0009), ++ prt_slot2(0x000a), ++ prt_slot3(0x000b), ++ prt_slot0(0x000c), ++ prt_slot1(0x000d), ++ prt_slot2(0x000e), ++ prt_slot3(0x000f), ++ prt_slot0(0x0010), ++ prt_slot1(0x0011), ++ prt_slot2(0x0012), ++ prt_slot3(0x0013), ++ prt_slot0(0x0014), ++ prt_slot1(0x0015), ++ prt_slot2(0x0016), ++ prt_slot3(0x0017), ++ prt_slot0(0x0018), ++ prt_slot1(0x0019), ++ prt_slot2(0x001a), ++ prt_slot3(0x001b), ++ prt_slot0(0x001c), ++ prt_slot1(0x001d), ++ prt_slot2(0x001e), ++ prt_slot3(0x001f), ++ }) ++ } ++ ++ Field(PCI0.ISA.P40C, ByteAcc, NoLock, Preserve) { ++ PRQ0, 8, ++ PRQ1, 8, ++ PRQ2, 8, ++ PRQ3, 8 ++ } ++ ++ Method(IQST, 1, NotSerialized) { ++ // _STA method - get status ++ If (And(0x80, Arg0)) { ++ Return (0x09) ++ } ++ Return (0x0B) ++ } ++ Method(IQCR, 1, NotSerialized) { ++ // _CRS method - get current settings ++ Name(PRR0, ResourceTemplate() { ++ Interrupt(, Level, ActiveHigh, Shared) { 0 } ++ }) ++ CreateDWordField(PRR0, 0x05, PRRI) ++ If (LLess(Arg0, 0x80)) { ++ Store(Arg0, PRRI) ++ } ++ Return (PRR0) ++ } ++ ++#define define_link(link, uid, reg) \ ++ Device(link) { \ ++ Name(_HID, EISAID("PNP0C0F")) \ ++ Name(_UID, uid) \ ++ Name(_PRS, ResourceTemplate() { \ ++ Interrupt(, Level, ActiveHigh, Shared) { \ ++ 5, 10, 11 \ ++ } \ ++ }) \ ++ Method(_STA, 0, NotSerialized) { \ ++ Return (IQST(reg)) \ ++ } \ ++ Method(_DIS, 0, NotSerialized) { \ ++ Or(reg, 0x80, reg) \ ++ } \ ++ Method(_CRS, 0, NotSerialized) { \ ++ Return (IQCR(reg)) \ ++ } \ ++ Method(_SRS, 1, NotSerialized) { \ ++ CreateDWordField(Arg0, 0x05, PRRI) \ ++ Store(PRRI, reg) \ ++ } \ ++ } ++ ++ define_link(LNKA, 0, PRQ0) ++ define_link(LNKB, 1, PRQ1) ++ define_link(LNKC, 2, PRQ2) ++ define_link(LNKD, 3, PRQ3) ++ ++ Device(LNKS) { ++ Name(_HID, EISAID("PNP0C0F")) ++ Name(_UID, 4) ++ Name(_PRS, ResourceTemplate() { ++ Interrupt(, Level, ActiveHigh, Shared) { 9 } ++ }) ++ ++ // The SCI cannot be disabled and is always attached to GSI 9, ++ // so these are no-ops. We only need this link to override the ++ // polarity to active high and match the content of the MADT. ++ Method(_STA, 0, NotSerialized) { Return (0x0b) } ++ Method(_DIS, 0, NotSerialized) { } ++ Method(_CRS, 0, NotSerialized) { Return (_PRS) } ++ Method(_SRS, 1, NotSerialized) { } ++ } ++ } ++ ++#include "acpi-dsdt-cpu-hotplug.dsl" ++ ++ ++/**************************************************************** ++ * General purpose events ++ ****************************************************************/ ++ ++ Scope(\_GPE) { ++ Name(_HID, "ACPI0006") ++ ++ Method(_L00) { ++ } ++ Method(_E01) { ++ // PCI hotplug event ++ \_SB.PCI0.PCNF() ++ } ++ Method(_E02) { ++ // CPU hotplug event ++ \_SB.PRSC() ++ } ++ Method(_L03) { ++ } ++ Method(_L04) { ++ } ++ Method(_L05) { ++ } ++ Method(_L06) { ++ } ++ Method(_L07) { ++ } ++ Method(_L08) { ++ } ++ Method(_L09) { ++ } ++ Method(_L0A) { ++ } ++ Method(_L0B) { ++ } ++ Method(_L0C) { ++ } ++ Method(_L0D) { ++ } ++ Method(_L0E) { ++ } ++ Method(_L0F) { ++ } ++ } ++} +diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl +new file mode 100644 +index 0000000..21c89b0 +--- /dev/null ++++ b/hw/i386/q35-acpi-dsdt.dsl +@@ -0,0 +1,452 @@ ++/* ++ * Bochs/QEMU ACPI DSDT ASL definition ++ * ++ * Copyright (c) 2006 Fabrice Bellard ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License version 2 as published by the Free Software Foundation. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++/* ++ * Copyright (c) 2010 Isaku Yamahata ++ * yamahata at valinux co jp ++ * Based on acpi-dsdt.dsl, but heavily modified for q35 chipset. ++ */ ++ ++ACPI_EXTRACT_ALL_CODE Q35AcpiDsdtAmlCode ++ ++DefinitionBlock ( ++ "q35-acpi-dsdt.aml",// Output Filename ++ "DSDT", // Signature ++ 0x01, // DSDT Compliance Revision ++ "BXPC", // OEMID ++ "BXDSDT", // TABLE ID ++ 0x2 // OEM Revision ++ ) ++{ ++ ++#include "acpi-dsdt-dbug.dsl" ++ ++ Scope(\_SB) { ++ OperationRegion(PCST, SystemIO, 0xae00, 0x0c) ++ OperationRegion(PCSB, SystemIO, 0xae0c, 0x01) ++ Field(PCSB, AnyAcc, NoLock, WriteAsZeros) { ++ PCIB, 8, ++ } ++ } ++ ++ ++/**************************************************************** ++ * PCI Bus definition ++ ****************************************************************/ ++ ++ Scope(\_SB) { ++ Device(PCI0) { ++ Name(_HID, EisaId("PNP0A08")) ++ Name(_CID, EisaId("PNP0A03")) ++ Name(_ADR, 0x00) ++ Name(_UID, 1) ++ ++ // _OSC: based on sample of ACPI3.0b spec ++ Name(SUPP, 0) // PCI _OSC Support Field value ++ Name(CTRL, 0) // PCI _OSC Control Field value ++ Method(_OSC, 4) { ++ // Create DWORD-addressable fields from the Capabilities Buffer ++ CreateDWordField(Arg3, 0, CDW1) ++ ++ // Check for proper UUID ++ If (LEqual(Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) { ++ // Create DWORD-addressable fields from the Capabilities Buffer ++ CreateDWordField(Arg3, 4, CDW2) ++ CreateDWordField(Arg3, 8, CDW3) ++ ++ // Save Capabilities DWORD2 & 3 ++ Store(CDW2, SUPP) ++ Store(CDW3, CTRL) ++ ++ // Always allow native PME, AER (no dependencies) ++ // Never allow SHPC (no SHPC controller in this system) ++ And(CTRL, 0x1D, CTRL) ++ ++#if 0 // For now, nothing to do ++ If (Not(And(CDW1, 1))) { // Query flag clear? ++ // Disable GPEs for features granted native control. ++ If (And(CTRL, 0x01)) { // Hot plug control granted? ++ Store(0, HPCE) // clear the hot plug SCI enable bit ++ Store(1, HPCS) // clear the hot plug SCI status bit ++ } ++ If (And(CTRL, 0x04)) { // PME control granted? ++ Store(0, PMCE) // clear the PME SCI enable bit ++ Store(1, PMCS) // clear the PME SCI status bit ++ } ++ If (And(CTRL, 0x10)) { // OS restoring PCI Express cap structure? ++ // Set status to not restore PCI Express cap structure ++ // upon resume from S3 ++ Store(1, S3CR) ++ } ++ } ++#endif ++ If (LNotEqual(Arg1, One)) { ++ // Unknown revision ++ Or(CDW1, 0x08, CDW1) ++ } ++ If (LNotEqual(CDW3, CTRL)) { ++ // Capabilities bits were masked ++ Or(CDW1, 0x10, CDW1) ++ } ++ // Update DWORD3 in the buffer ++ Store(CTRL, CDW3) ++ } Else { ++ Or(CDW1, 4, CDW1) // Unrecognized UUID ++ } ++ Return (Arg3) ++ } ++ } ++ } ++ ++#include "acpi-dsdt-pci-crs.dsl" ++#include "acpi-dsdt-hpet.dsl" ++ ++ ++/**************************************************************** ++ * VGA ++ ****************************************************************/ ++ ++ Scope(\_SB.PCI0) { ++ Device(VGA) { ++ Name(_ADR, 0x00010000) ++ Method(_S1D, 0, NotSerialized) { ++ Return (0x00) ++ } ++ Method(_S2D, 0, NotSerialized) { ++ Return (0x00) ++ } ++ Method(_S3D, 0, NotSerialized) { ++ Return (0x00) ++ } ++ } ++ } ++ ++ ++/**************************************************************** ++ * LPC ISA bridge ++ ****************************************************************/ ++ ++ Scope(\_SB.PCI0) { ++ /* PCI D31:f0 LPC ISA bridge */ ++ Device(ISA) { ++ /* PCI D31:f0 */ ++ Name(_ADR, 0x001f0000) ++ ++ /* ICH9 PCI to ISA irq remapping */ ++ OperationRegion(PIRQ, PCI_Config, 0x60, 0x0C) ++ ++ OperationRegion(LPCD, PCI_Config, 0x80, 0x2) ++ Field(LPCD, AnyAcc, NoLock, Preserve) { ++ COMA, 3, ++ , 1, ++ COMB, 3, ++ ++ Offset(0x01), ++ LPTD, 2, ++ , 2, ++ FDCD, 2 ++ } ++ OperationRegion(LPCE, PCI_Config, 0x82, 0x2) ++ Field(LPCE, AnyAcc, NoLock, Preserve) { ++ CAEN, 1, ++ CBEN, 1, ++ LPEN, 1, ++ FDEN, 1 ++ } ++ } ++ } ++ ++#include "acpi-dsdt-isa.dsl" ++ ++ ++/**************************************************************** ++ * PCI IRQs ++ ****************************************************************/ ++ ++ /* Zero => PIC mode, One => APIC Mode */ ++ Name(\PICF, Zero) ++ Method(\_PIC, 1, NotSerialized) { ++ Store(Arg0, \PICF) ++ } ++ ++ Scope(\_SB) { ++ Scope(PCI0) { ++#define prt_slot_lnk(nr, lnk0, lnk1, lnk2, lnk3) \ ++ Package() { nr##ffff, 0, lnk0, 0 }, \ ++ Package() { nr##ffff, 1, lnk1, 0 }, \ ++ Package() { nr##ffff, 2, lnk2, 0 }, \ ++ Package() { nr##ffff, 3, lnk3, 0 } ++ ++#define prt_slot_lnkA(nr) prt_slot_lnk(nr, LNKA, LNKB, LNKC, LNKD) ++#define prt_slot_lnkB(nr) prt_slot_lnk(nr, LNKB, LNKC, LNKD, LNKA) ++#define prt_slot_lnkC(nr) prt_slot_lnk(nr, LNKC, LNKD, LNKA, LNKB) ++#define prt_slot_lnkD(nr) prt_slot_lnk(nr, LNKD, LNKA, LNKB, LNKC) ++ ++#define prt_slot_lnkE(nr) prt_slot_lnk(nr, LNKE, LNKF, LNKG, LNKH) ++#define prt_slot_lnkF(nr) prt_slot_lnk(nr, LNKF, LNKG, LNKH, LNKE) ++#define prt_slot_lnkG(nr) prt_slot_lnk(nr, LNKG, LNKH, LNKE, LNKF) ++#define prt_slot_lnkH(nr) prt_slot_lnk(nr, LNKH, LNKE, LNKF, LNKG) ++ ++ Name(PRTP, package() { ++ prt_slot_lnkE(0x0000), ++ prt_slot_lnkF(0x0001), ++ prt_slot_lnkG(0x0002), ++ prt_slot_lnkH(0x0003), ++ prt_slot_lnkE(0x0004), ++ prt_slot_lnkF(0x0005), ++ prt_slot_lnkG(0x0006), ++ prt_slot_lnkH(0x0007), ++ prt_slot_lnkE(0x0008), ++ prt_slot_lnkF(0x0009), ++ prt_slot_lnkG(0x000a), ++ prt_slot_lnkH(0x000b), ++ prt_slot_lnkE(0x000c), ++ prt_slot_lnkF(0x000d), ++ prt_slot_lnkG(0x000e), ++ prt_slot_lnkH(0x000f), ++ prt_slot_lnkE(0x0010), ++ prt_slot_lnkF(0x0011), ++ prt_slot_lnkG(0x0012), ++ prt_slot_lnkH(0x0013), ++ prt_slot_lnkE(0x0014), ++ prt_slot_lnkF(0x0015), ++ prt_slot_lnkG(0x0016), ++ prt_slot_lnkH(0x0017), ++ prt_slot_lnkE(0x0018), ++ ++ /* INTA -> PIRQA for slot 25 - 31 ++ see the default value of DIR */ ++ prt_slot_lnkA(0x0019), ++ prt_slot_lnkA(0x001a), ++ prt_slot_lnkA(0x001b), ++ prt_slot_lnkA(0x001c), ++ prt_slot_lnkA(0x001d), ++ ++ /* PCIe->PCI bridge. use PIRQ[E-H] */ ++ prt_slot_lnkE(0x001e), ++ ++ prt_slot_lnkA(0x001f) ++ }) ++ ++#define prt_slot_gsi(nr, gsi0, gsi1, gsi2, gsi3) \ ++ Package() { nr##ffff, 0, gsi0, 0 }, \ ++ Package() { nr##ffff, 1, gsi1, 0 }, \ ++ Package() { nr##ffff, 2, gsi2, 0 }, \ ++ Package() { nr##ffff, 3, gsi3, 0 } ++ ++#define prt_slot_gsiA(nr) prt_slot_gsi(nr, GSIA, GSIB, GSIC, GSID) ++#define prt_slot_gsiB(nr) prt_slot_gsi(nr, GSIB, GSIC, GSID, GSIA) ++#define prt_slot_gsiC(nr) prt_slot_gsi(nr, GSIC, GSID, GSIA, GSIB) ++#define prt_slot_gsiD(nr) prt_slot_gsi(nr, GSID, GSIA, GSIB, GSIC) ++ ++#define prt_slot_gsiE(nr) prt_slot_gsi(nr, GSIE, GSIF, GSIG, GSIH) ++#define prt_slot_gsiF(nr) prt_slot_gsi(nr, GSIF, GSIG, GSIH, GSIE) ++#define prt_slot_gsiG(nr) prt_slot_gsi(nr, GSIG, GSIH, GSIE, GSIF) ++#define prt_slot_gsiH(nr) prt_slot_gsi(nr, GSIH, GSIE, GSIF, GSIG) ++ ++ Name(PRTA, package() { ++ prt_slot_gsiE(0x0000), ++ prt_slot_gsiF(0x0001), ++ prt_slot_gsiG(0x0002), ++ prt_slot_gsiH(0x0003), ++ prt_slot_gsiE(0x0004), ++ prt_slot_gsiF(0x0005), ++ prt_slot_gsiG(0x0006), ++ prt_slot_gsiH(0x0007), ++ prt_slot_gsiE(0x0008), ++ prt_slot_gsiF(0x0009), ++ prt_slot_gsiG(0x000a), ++ prt_slot_gsiH(0x000b), ++ prt_slot_gsiE(0x000c), ++ prt_slot_gsiF(0x000d), ++ prt_slot_gsiG(0x000e), ++ prt_slot_gsiH(0x000f), ++ prt_slot_gsiE(0x0010), ++ prt_slot_gsiF(0x0011), ++ prt_slot_gsiG(0x0012), ++ prt_slot_gsiH(0x0013), ++ prt_slot_gsiE(0x0014), ++ prt_slot_gsiF(0x0015), ++ prt_slot_gsiG(0x0016), ++ prt_slot_gsiH(0x0017), ++ prt_slot_gsiE(0x0018), ++ ++ /* INTA -> PIRQA for slot 25 - 31, but 30 ++ see the default value of DIR */ ++ prt_slot_gsiA(0x0019), ++ prt_slot_gsiA(0x001a), ++ prt_slot_gsiA(0x001b), ++ prt_slot_gsiA(0x001c), ++ prt_slot_gsiA(0x001d), ++ ++ /* PCIe->PCI bridge. use PIRQ[E-H] */ ++ prt_slot_gsiE(0x001e), ++ ++ prt_slot_gsiA(0x001f) ++ }) ++ ++ Method(_PRT, 0, NotSerialized) { ++ /* PCI IRQ routing table, example from ACPI 2.0a specification, ++ section 6.2.8.1 */ ++ /* Note: we provide the same info as the PCI routing ++ table of the Bochs BIOS */ ++ If (LEqual(\PICF, Zero)) { ++ Return (PRTP) ++ } Else { ++ Return (PRTA) ++ } ++ } ++ } ++ ++ Field(PCI0.ISA.PIRQ, ByteAcc, NoLock, Preserve) { ++ PRQA, 8, ++ PRQB, 8, ++ PRQC, 8, ++ PRQD, 8, ++ ++ Offset(0x08), ++ PRQE, 8, ++ PRQF, 8, ++ PRQG, 8, ++ PRQH, 8 ++ } ++ ++ Method(IQST, 1, NotSerialized) { ++ // _STA method - get status ++ If (And(0x80, Arg0)) { ++ Return (0x09) ++ } ++ Return (0x0B) ++ } ++ Method(IQCR, 1, NotSerialized) { ++ // _CRS method - get current settings ++ Name(PRR0, ResourceTemplate() { ++ Interrupt(, Level, ActiveHigh, Shared) { 0 } ++ }) ++ CreateDWordField(PRR0, 0x05, PRRI) ++ Store(And(Arg0, 0x0F), PRRI) ++ Return (PRR0) ++ } ++ ++#define define_link(link, uid, reg) \ ++ Device(link) { \ ++ Name(_HID, EISAID("PNP0C0F")) \ ++ Name(_UID, uid) \ ++ Name(_PRS, ResourceTemplate() { \ ++ Interrupt(, Level, ActiveHigh, Shared) { \ ++ 5, 10, 11 \ ++ } \ ++ }) \ ++ Method(_STA, 0, NotSerialized) { \ ++ Return (IQST(reg)) \ ++ } \ ++ Method(_DIS, 0, NotSerialized) { \ ++ Or(reg, 0x80, reg) \ ++ } \ ++ Method(_CRS, 0, NotSerialized) { \ ++ Return (IQCR(reg)) \ ++ } \ ++ Method(_SRS, 1, NotSerialized) { \ ++ CreateDWordField(Arg0, 0x05, PRRI) \ ++ Store(PRRI, reg) \ ++ } \ ++ } ++ ++ define_link(LNKA, 0, PRQA) ++ define_link(LNKB, 1, PRQB) ++ define_link(LNKC, 2, PRQC) ++ define_link(LNKD, 3, PRQD) ++ define_link(LNKE, 4, PRQE) ++ define_link(LNKF, 5, PRQF) ++ define_link(LNKG, 6, PRQG) ++ define_link(LNKH, 7, PRQH) ++ ++#define define_gsi_link(link, uid, gsi) \ ++ Device(link) { \ ++ Name(_HID, EISAID("PNP0C0F")) \ ++ Name(_UID, uid) \ ++ Name(_PRS, ResourceTemplate() { \ ++ Interrupt(, Level, ActiveHigh, Shared) { \ ++ gsi \ ++ } \ ++ }) \ ++ Name(_CRS, ResourceTemplate() { \ ++ Interrupt(, Level, ActiveHigh, Shared) { \ ++ gsi \ ++ } \ ++ }) \ ++ Method(_SRS, 1, NotSerialized) { \ ++ } \ ++ } ++ ++ define_gsi_link(GSIA, 0, 0x10) ++ define_gsi_link(GSIB, 0, 0x11) ++ define_gsi_link(GSIC, 0, 0x12) ++ define_gsi_link(GSID, 0, 0x13) ++ define_gsi_link(GSIE, 0, 0x14) ++ define_gsi_link(GSIF, 0, 0x15) ++ define_gsi_link(GSIG, 0, 0x16) ++ define_gsi_link(GSIH, 0, 0x17) ++ } ++ ++#include "acpi-dsdt-cpu-hotplug.dsl" ++ ++ ++/**************************************************************** ++ * General purpose events ++ ****************************************************************/ ++ ++ Scope(\_GPE) { ++ Name(_HID, "ACPI0006") ++ ++ Method(_L00) { ++ } ++ Method(_L01) { ++ // CPU hotplug event ++ \_SB.PRSC() ++ } ++ Method(_L02) { ++ } ++ Method(_L03) { ++ } ++ Method(_L04) { ++ } ++ Method(_L05) { ++ } ++ Method(_L06) { ++ } ++ Method(_L07) { ++ } ++ Method(_L08) { ++ } ++ Method(_L09) { ++ } ++ Method(_L0A) { ++ } ++ Method(_L0B) { ++ } ++ Method(_L0C) { ++ } ++ Method(_L0D) { ++ } ++ Method(_L0E) { ++ } ++ Method(_L0F) { ++ } ++ } ++} +diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl +new file mode 100644 +index 0000000..a4484b8 +--- /dev/null ++++ b/hw/i386/ssdt-misc.dsl +@@ -0,0 +1,119 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++ACPI_EXTRACT_ALL_CODE ssdp_misc_aml ++ ++DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1) ++{ ++ ++/**************************************************************** ++ * PCI memory ranges ++ ****************************************************************/ ++ ++ Scope(\) { ++ ACPI_EXTRACT_NAME_DWORD_CONST acpi_pci32_start ++ Name(P0S, 0x12345678) ++ ACPI_EXTRACT_NAME_DWORD_CONST acpi_pci32_end ++ Name(P0E, 0x12345678) ++ ACPI_EXTRACT_NAME_BYTE_CONST acpi_pci64_valid ++ Name(P1V, 0x12) ++ ACPI_EXTRACT_NAME_BUFFER8 acpi_pci64_start ++ Name(P1S, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) ++ ACPI_EXTRACT_NAME_BUFFER8 acpi_pci64_end ++ Name(P1E, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) ++ ACPI_EXTRACT_NAME_BUFFER8 acpi_pci64_length ++ Name(P1L, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) ++ } ++ ++ ++/**************************************************************** ++ * Suspend ++ ****************************************************************/ ++ ++ Scope(\) { ++ /* ++ * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes: ++ * must match piix4 emulation. ++ */ ++ ++ ACPI_EXTRACT_NAME_STRING acpi_s3_name ++ Name(_S3, Package(0x04) { ++ One, /* PM1a_CNT.SLP_TYP */ ++ One, /* PM1b_CNT.SLP_TYP */ ++ Zero, /* reserved */ ++ Zero /* reserved */ ++ }) ++ ACPI_EXTRACT_NAME_STRING acpi_s4_name ++ ACPI_EXTRACT_PKG_START acpi_s4_pkg ++ Name(_S4, Package(0x04) { ++ 0x2, /* PM1a_CNT.SLP_TYP */ ++ 0x2, /* PM1b_CNT.SLP_TYP */ ++ Zero, /* reserved */ ++ Zero /* reserved */ ++ }) ++ Name(_S5, Package(0x04) { ++ Zero, /* PM1a_CNT.SLP_TYP */ ++ Zero, /* PM1b_CNT.SLP_TYP */ ++ Zero, /* reserved */ ++ Zero /* reserved */ ++ }) ++ } ++ ++ External(\_SB.PCI0, DeviceObj) ++ External(\_SB.PCI0.ISA, DeviceObj) ++ ++ Scope(\_SB.PCI0.ISA) { ++ Device(PEVT) { ++ Name(_HID, "QEMU0001") ++ /* PEST will be patched to be Zero if no such device */ ++ ACPI_EXTRACT_NAME_WORD_CONST ssdt_isa_pest ++ Name(PEST, 0xFFFF) ++ OperationRegion(PEOR, SystemIO, PEST, 0x01) ++ Field(PEOR, ByteAcc, NoLock, Preserve) { ++ PEPT, 8, ++ } ++ ++ Method(_STA, 0, NotSerialized) { ++ Store(PEST, Local0) ++ If (LEqual(Local0, Zero)) { ++ Return (0x00) ++ } Else { ++ Return (0x0F) ++ } ++ } ++ ++ Method(RDPT, 0, NotSerialized) { ++ Store(PEPT, Local0) ++ Return (Local0) ++ } ++ ++ Method(WRPT, 1, NotSerialized) { ++ Store(Arg0, PEPT) ++ } ++ ++ Name(_CRS, ResourceTemplate() { ++ IO(Decode16, 0x00, 0x00, 0x01, 0x01, IO) ++ }) ++ ++ CreateWordField(_CRS, IO._MIN, IOMN) ++ CreateWordField(_CRS, IO._MAX, IOMX) ++ ++ Method(_INI, 0, NotSerialized) { ++ Store(PEST, IOMN) ++ Store(PEST, IOMX) ++ } ++ } ++ } ++} +diff --git a/hw/i386/ssdt-pcihp.dsl b/hw/i386/ssdt-pcihp.dsl +new file mode 100644 +index 0000000..d29a5b9 +--- /dev/null ++++ b/hw/i386/ssdt-pcihp.dsl +@@ -0,0 +1,51 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++ACPI_EXTRACT_ALL_CODE ssdp_pcihp_aml ++ ++DefinitionBlock ("ssdt-pcihp.aml", "SSDT", 0x01, "BXPC", "BXSSDTPCIHP", 0x1) ++{ ++ ++/**************************************************************** ++ * PCI hotplug ++ ****************************************************************/ ++ ++ /* Objects supplied by DSDT */ ++ External(\_SB.PCI0, DeviceObj) ++ External(\_SB.PCI0.PCEJ, MethodObj) ++ ++ Scope(\_SB.PCI0) { ++ ++ /* Bulk generated PCI hotplug devices */ ++ ACPI_EXTRACT_DEVICE_START ssdt_pcihp_start ++ ACPI_EXTRACT_DEVICE_END ssdt_pcihp_end ++ ACPI_EXTRACT_DEVICE_STRING ssdt_pcihp_name ++ ++ // Method _EJ0 can be patched by BIOS to EJ0_ ++ // at runtime, if the slot is detected to not support hotplug. ++ // Extract the offset of the address dword and the ++ // _EJ0 name to allow this patching. ++ Device(SAA) { ++ ACPI_EXTRACT_NAME_BYTE_CONST ssdt_pcihp_id ++ Name(_SUN, 0xAA) ++ ACPI_EXTRACT_NAME_DWORD_CONST ssdt_pcihp_adr ++ Name(_ADR, 0xAA0000) ++ ACPI_EXTRACT_METHOD_STRING ssdt_pcihp_ej0 ++ Method(_EJ0, 1) { ++ Return (PCEJ(_SUN)) ++ } ++ } ++ } ++} +diff --git a/hw/i386/ssdt-proc.dsl b/hw/i386/ssdt-proc.dsl +new file mode 100644 +index 0000000..58333c7 +--- /dev/null ++++ b/hw/i386/ssdt-proc.dsl +@@ -0,0 +1,63 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++/* This file is the basis for the ssdt table generated in src/acpi.c. ++ * It defines the contents of the per-cpu Processor() object. At ++ * runtime, a dynamically generated SSDT will contain one copy of this ++ * AML snippet for every possible cpu in the system. The objects will ++ * be placed in the \_SB_ namespace. ++ * ++ * In addition to the aml code generated from this file, the ++ * src/acpi.c file creates a NTFY method with an entry for each cpu: ++ * Method(NTFY, 2) { ++ * If (LEqual(Arg0, 0x00)) { Notify(CP00, Arg1) } ++ * If (LEqual(Arg0, 0x01)) { Notify(CP01, Arg1) } ++ * ... ++ * } ++ * and a CPON array with the list of active and inactive cpus: ++ * Name(CPON, Package() { One, One, ..., Zero, Zero, ... }) ++ */ ++ ++ACPI_EXTRACT_ALL_CODE ssdp_proc_aml ++ ++DefinitionBlock ("ssdt-proc.aml", "SSDT", 0x01, "BXPC", "BXSSDT", 0x1) ++{ ++ ACPI_EXTRACT_PROCESSOR_START ssdt_proc_start ++ ACPI_EXTRACT_PROCESSOR_END ssdt_proc_end ++ ACPI_EXTRACT_PROCESSOR_STRING ssdt_proc_name ++ Processor(CPAA, 0xAA, 0x0000b010, 0x06) { ++ ACPI_EXTRACT_NAME_BYTE_CONST ssdt_proc_id ++ Name(ID, 0xAA) ++/* ++ * The src/acpi.c code requires the above ACP_EXTRACT tags so that it can update ++ * CPAA and 0xAA with the appropriate CPU id (see ++ * SD_OFFSET_CPUHEX/CPUID1/CPUID2). Don't change the above without ++ * also updating the C code. ++ */ ++ Name(_HID, "ACPI0007") ++ External(CPMA, MethodObj) ++ External(CPST, MethodObj) ++ External(CPEJ, MethodObj) ++ Method(_MAT, 0) { ++ Return (CPMA(ID)) ++ } ++ Method(_STA, 0) { ++ Return (CPST(ID)) ++ } ++ Method(_EJ0, 1, NotSerialized) { ++ CPEJ(ID, Arg0) ++ } ++ } ++} +diff --git a/scripts/acpi_extract.py b/scripts/acpi_extract.py +new file mode 100755 +index 0000000..22ea468 +--- /dev/null ++++ b/scripts/acpi_extract.py +@@ -0,0 +1,362 @@ ++#!/usr/bin/python ++# Copyright (C) 2011 Red Hat, Inc., Michael S. Tsirkin ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License along ++# with this program; if not, see . ++ ++# Process mixed ASL/AML listing (.lst file) produced by iasl -l ++# Locate and execute ACPI_EXTRACT directives, output offset info ++# ++# Documentation of ACPI_EXTRACT_* directive tags: ++# ++# These directive tags output offset information from AML for BIOS runtime ++# table generation. ++# Each directive is of the form: ++# ACPI_EXTRACT_ (...) ++# and causes the extractor to create an array ++# named with offset, in the generated AML, ++# of an object of a given type in the following . ++# ++# A directive must fit on a single code line. ++# ++# Object type in AML is verified, a mismatch causes a build failure. ++# ++# Directives and operators currently supported are: ++# ACPI_EXTRACT_NAME_DWORD_CONST - extract a Dword Const object from Name() ++# ACPI_EXTRACT_NAME_WORD_CONST - extract a Word Const object from Name() ++# ACPI_EXTRACT_NAME_BYTE_CONST - extract a Byte Const object from Name() ++# ACPI_EXTRACT_METHOD_STRING - extract a NameString from Method() ++# ACPI_EXTRACT_NAME_STRING - extract a NameString from Name() ++# ACPI_EXTRACT_PROCESSOR_START - start of Processor() block ++# ACPI_EXTRACT_PROCESSOR_STRING - extract a NameString from Processor() ++# ACPI_EXTRACT_PROCESSOR_END - offset at last byte of Processor() + 1 ++# ACPI_EXTRACT_PKG_START - start of Package block ++# ++# ACPI_EXTRACT_ALL_CODE - create an array storing the generated AML bytecode ++# ++# ACPI_EXTRACT is not allowed anywhere else in code, except in comments. ++ ++import re; ++import sys; ++import fileinput; ++ ++aml = [] ++asl = [] ++output = {} ++debug = "" ++ ++class asl_line: ++ line = None ++ lineno = None ++ aml_offset = None ++ ++def die(diag): ++ sys.stderr.write("Error: %s; %s\n" % (diag, debug)) ++ sys.exit(1) ++ ++#Store an ASL command, matching AML offset, and input line (for debugging) ++def add_asl(lineno, line): ++ l = asl_line() ++ l.line = line ++ l.lineno = lineno ++ l.aml_offset = len(aml) ++ asl.append(l) ++ ++#Store an AML byte sequence ++#Verify that offset output by iasl matches # of bytes so far ++def add_aml(offset, line): ++ o = int(offset, 16); ++ # Sanity check: offset must match size of code so far ++ if (o != len(aml)): ++ die("Offset 0x%x != 0x%x" % (o, len(aml))) ++ # Strip any trailing dots and ASCII dump after " ++ line = re.sub(r'\s*\.*\s*".*$',"", line) ++ # Strip traling whitespace ++ line = re.sub(r'\s+$',"", line) ++ # Strip leading whitespace ++ line = re.sub(r'^\s+',"", line) ++ # Split on whitespace ++ code = re.split(r'\s+', line) ++ for c in code: ++ # Require a legal hex number, two digits ++ if (not(re.search(r'^[0-9A-Fa-f][0-9A-Fa-f]$', c))): ++ die("Unexpected octet %s" % c); ++ aml.append(int(c, 16)); ++ ++# Process aml bytecode array, decoding AML ++def aml_pkglen_bytes(offset): ++ # PkgLength can be multibyte. Bits 8-7 give the # of extra bytes. ++ pkglenbytes = aml[offset] >> 6; ++ return pkglenbytes + 1 ++ ++def aml_pkglen(offset): ++ pkgstart = offset ++ pkglenbytes = aml_pkglen_bytes(offset) ++ pkglen = aml[offset] & 0x3F ++ # If multibyte, first nibble only uses bits 0-3 ++ if ((pkglenbytes > 1) and (pkglen & 0x30)): ++ die("PkgLen bytes 0x%x but first nibble 0x%x expected 0x0X" % ++ (pkglen, pkglen)) ++ offset += 1 ++ pkglenbytes -= 1 ++ for i in range(pkglenbytes): ++ pkglen |= aml[offset + i] << (i * 8 + 4) ++ if (len(aml) < pkgstart + pkglen): ++ die("PckgLen 0x%x at offset 0x%x exceeds AML size 0x%x" % ++ (pkglen, offset, len(aml))) ++ return pkglen ++ ++# Given method offset, find its NameString offset ++def aml_method_string(offset): ++ #0x14 MethodOp PkgLength NameString MethodFlags TermList ++ if (aml[offset] != 0x14): ++ die( "Method offset 0x%x: expected 0x14 actual 0x%x" % ++ (offset, aml[offset])); ++ offset += 1; ++ pkglenbytes = aml_pkglen_bytes(offset) ++ offset += pkglenbytes; ++ return offset; ++ ++# Given name offset, find its NameString offset ++def aml_name_string(offset): ++ #0x08 NameOp NameString DataRef ++ if (aml[offset] != 0x08): ++ die( "Name offset 0x%x: expected 0x08 actual 0x%x" % ++ (offset, aml[offset])); ++ offset += 1 ++ # Block Name Modifier. Skip it. ++ if (aml[offset] == 0x5c or aml[offset] == 0x5e): ++ offset += 1 ++ return offset; ++ ++# Given data offset, find 8 byte buffer offset ++def aml_data_buffer8(offset): ++ #0x08 NameOp NameString DataRef ++ expect = [0x11, 0x0B, 0x0A, 0x08] ++ if (aml[offset:offset+4] != expect): ++ die( "Name offset 0x%x: expected %s actual %s" % ++ (offset, aml[offset:offset+4], expect)) ++ return offset + len(expect) ++ ++# Given data offset, find dword const offset ++def aml_data_dword_const(offset): ++ #0x08 NameOp NameString DataRef ++ if (aml[offset] != 0x0C): ++ die( "Name offset 0x%x: expected 0x0C actual 0x%x" % ++ (offset, aml[offset])); ++ return offset + 1; ++ ++# Given data offset, find word const offset ++def aml_data_word_const(offset): ++ #0x08 NameOp NameString DataRef ++ if (aml[offset] != 0x0B): ++ die( "Name offset 0x%x: expected 0x0B actual 0x%x" % ++ (offset, aml[offset])); ++ return offset + 1; ++ ++# Given data offset, find byte const offset ++def aml_data_byte_const(offset): ++ #0x08 NameOp NameString DataRef ++ if (aml[offset] != 0x0A): ++ die( "Name offset 0x%x: expected 0x0A actual 0x%x" % ++ (offset, aml[offset])); ++ return offset + 1; ++ ++# Find name'd buffer8 ++def aml_name_buffer8(offset): ++ return aml_data_buffer8(aml_name_string(offset) + 4) ++ ++# Given name offset, find dword const offset ++def aml_name_dword_const(offset): ++ return aml_data_dword_const(aml_name_string(offset) + 4) ++ ++# Given name offset, find word const offset ++def aml_name_word_const(offset): ++ return aml_data_word_const(aml_name_string(offset) + 4) ++ ++# Given name offset, find byte const offset ++def aml_name_byte_const(offset): ++ return aml_data_byte_const(aml_name_string(offset) + 4) ++ ++def aml_device_start(offset): ++ #0x5B 0x82 DeviceOp PkgLength NameString ++ if ((aml[offset] != 0x5B) or (aml[offset + 1] != 0x82)): ++ die( "Name offset 0x%x: expected 0x5B 0x82 actual 0x%x 0x%x" % ++ (offset, aml[offset], aml[offset + 1])); ++ return offset ++ ++def aml_device_string(offset): ++ #0x5B 0x82 DeviceOp PkgLength NameString ++ start = aml_device_start(offset) ++ offset += 2 ++ pkglenbytes = aml_pkglen_bytes(offset) ++ offset += pkglenbytes ++ return offset ++ ++def aml_device_end(offset): ++ start = aml_device_start(offset) ++ offset += 2 ++ pkglenbytes = aml_pkglen_bytes(offset) ++ pkglen = aml_pkglen(offset) ++ return offset + pkglen ++ ++def aml_processor_start(offset): ++ #0x5B 0x83 ProcessorOp PkgLength NameString ProcID ++ if ((aml[offset] != 0x5B) or (aml[offset + 1] != 0x83)): ++ die( "Name offset 0x%x: expected 0x5B 0x83 actual 0x%x 0x%x" % ++ (offset, aml[offset], aml[offset + 1])); ++ return offset ++ ++def aml_processor_string(offset): ++ #0x5B 0x83 ProcessorOp PkgLength NameString ProcID ++ start = aml_processor_start(offset) ++ offset += 2 ++ pkglenbytes = aml_pkglen_bytes(offset) ++ offset += pkglenbytes ++ return offset ++ ++def aml_processor_end(offset): ++ start = aml_processor_start(offset) ++ offset += 2 ++ pkglenbytes = aml_pkglen_bytes(offset) ++ pkglen = aml_pkglen(offset) ++ return offset + pkglen ++ ++def aml_package_start(offset): ++ offset = aml_name_string(offset) + 4 ++ # 0x12 PkgLength NumElements PackageElementList ++ if (aml[offset] != 0x12): ++ die( "Name offset 0x%x: expected 0x12 actual 0x%x" % ++ (offset, aml[offset])); ++ offset += 1 ++ return offset + aml_pkglen_bytes(offset) + 1 ++ ++lineno = 0 ++for line in fileinput.input(): ++ # Strip trailing newline ++ line = line.rstrip(); ++ # line number and debug string to output in case of errors ++ lineno = lineno + 1 ++ debug = "input line %d: %s" % (lineno, line) ++ #ASL listing: space, then line#, then ...., then code ++ pasl = re.compile('^\s+([0-9]+)(:\s\s|\.\.\.\.)\s*') ++ m = pasl.search(line) ++ if (m): ++ add_asl(lineno, pasl.sub("", line)); ++ # AML listing: offset in hex, then ...., then code ++ paml = re.compile('^([0-9A-Fa-f]+)(:\s\s|\.\.\.\.)\s*') ++ m = paml.search(line) ++ if (m): ++ add_aml(m.group(1), paml.sub("", line)) ++ ++# Now go over code ++# Track AML offset of a previous non-empty ASL command ++prev_aml_offset = -1 ++for i in range(len(asl)): ++ debug = "input line %d: %s" % (asl[i].lineno, asl[i].line) ++ ++ l = asl[i].line ++ ++ # skip if not an extract directive ++ a = len(re.findall(r'ACPI_EXTRACT', l)) ++ if (not a): ++ # If not empty, store AML offset. Will be used for sanity checks ++ # IASL seems to put {}. at random places in the listing. ++ # Ignore any non-words for the purpose of this test. ++ m = re.search(r'\w+', l) ++ if (m): ++ prev_aml_offset = asl[i].aml_offset ++ continue ++ ++ if (a > 1): ++ die("Expected at most one ACPI_EXTRACT per line, actual %d" % a) ++ ++ mext = re.search(r''' ++ ^\s* # leading whitespace ++ /\*\s* # start C comment ++ (ACPI_EXTRACT_\w+) # directive: group(1) ++ \s+ # whitspace separates directive from array name ++ (\w+) # array name: group(2) ++ \s*\*/ # end of C comment ++ \s*$ # trailing whitespace ++ ''', l, re.VERBOSE) ++ if (not mext): ++ die("Stray ACPI_EXTRACT in input") ++ ++ # previous command must have produced some AML, ++ # otherwise we are in a middle of a block ++ if (prev_aml_offset == asl[i].aml_offset): ++ die("ACPI_EXTRACT directive in the middle of a block") ++ ++ directive = mext.group(1) ++ array = mext.group(2) ++ offset = asl[i].aml_offset ++ ++ if (directive == "ACPI_EXTRACT_ALL_CODE"): ++ if array in output: ++ die("%s directive used more than once" % directive) ++ output[array] = aml ++ continue ++ if (directive == "ACPI_EXTRACT_NAME_BUFFER8"): ++ offset = aml_name_buffer8(offset) ++ elif (directive == "ACPI_EXTRACT_NAME_DWORD_CONST"): ++ offset = aml_name_dword_const(offset) ++ elif (directive == "ACPI_EXTRACT_NAME_WORD_CONST"): ++ offset = aml_name_word_const(offset) ++ elif (directive == "ACPI_EXTRACT_NAME_BYTE_CONST"): ++ offset = aml_name_byte_const(offset) ++ elif (directive == "ACPI_EXTRACT_NAME_STRING"): ++ offset = aml_name_string(offset) ++ elif (directive == "ACPI_EXTRACT_METHOD_STRING"): ++ offset = aml_method_string(offset) ++ elif (directive == "ACPI_EXTRACT_DEVICE_START"): ++ offset = aml_device_start(offset) ++ elif (directive == "ACPI_EXTRACT_DEVICE_STRING"): ++ offset = aml_device_string(offset) ++ elif (directive == "ACPI_EXTRACT_DEVICE_END"): ++ offset = aml_device_end(offset) ++ elif (directive == "ACPI_EXTRACT_PROCESSOR_START"): ++ offset = aml_processor_start(offset) ++ elif (directive == "ACPI_EXTRACT_PROCESSOR_STRING"): ++ offset = aml_processor_string(offset) ++ elif (directive == "ACPI_EXTRACT_PROCESSOR_END"): ++ offset = aml_processor_end(offset) ++ elif (directive == "ACPI_EXTRACT_PKG_START"): ++ offset = aml_package_start(offset) ++ else: ++ die("Unsupported directive %s" % directive) ++ ++ if array not in output: ++ output[array] = [] ++ output[array].append(offset) ++ ++debug = "at end of file" ++ ++def get_value_type(maxvalue): ++ #Use type large enough to fit the table ++ if (maxvalue >= 0x10000): ++ return "int" ++ elif (maxvalue >= 0x100): ++ return "short" ++ else: ++ return "char" ++ ++# Pretty print output ++for array in output.keys(): ++ otype = get_value_type(max(output[array])) ++ odata = [] ++ for value in output[array]: ++ odata.append("0x%x" % value) ++ sys.stdout.write("static unsigned %s %s[] = {\n" % (otype, array)) ++ sys.stdout.write(",\n".join(odata)) ++ sys.stdout.write('\n};\n'); +diff --git a/scripts/acpi_extract_preprocess.py b/scripts/acpi_extract_preprocess.py +new file mode 100755 +index 0000000..69d10d6 +--- /dev/null ++++ b/scripts/acpi_extract_preprocess.py +@@ -0,0 +1,51 @@ ++#!/usr/bin/python ++# Copyright (C) 2011 Red Hat, Inc., Michael S. Tsirkin ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License along ++# with this program; if not, see . ++ ++# Read a preprocessed ASL listing and put each ACPI_EXTRACT ++# directive in a comment, to make iasl skip it. ++# We also put each directive on a new line, the machinery ++# in tools/acpi_extract.py requires this. ++ ++import re; ++import sys; ++import fileinput; ++ ++def die(diag): ++ sys.stderr.write("Error: %s\n" % (diag)) ++ sys.exit(1) ++ ++# Note: () around pattern make split return matched string as part of list ++psplit = re.compile(r''' ( ++ \b # At word boundary ++ ACPI_EXTRACT_\w+ # directive ++ \s+ # some whitespace ++ \w+ # array name ++ )''', re.VERBOSE); ++ ++lineno = 0 ++for line in fileinput.input(): ++ # line number and debug string to output in case of errors ++ lineno = lineno + 1 ++ debug = "input line %d: %s" % (lineno, line.rstrip()) ++ ++ s = psplit.split(line); ++ # The way split works, each odd item is the matching ACPI_EXTRACT directive. ++ # Put each in a comment, and on a line by itself. ++ for i in range(len(s)): ++ if (i % 2): ++ sys.stdout.write("\n/* %s */\n" % s[i]) ++ else: ++ sys.stdout.write(s[i]) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-i386-add-Skylake-Server-cpu-model.patch b/SOURCES/kvm-i386-add-Skylake-Server-cpu-model.patch new file mode 100644 index 0000000..d615304 --- /dev/null +++ b/SOURCES/kvm-i386-add-Skylake-Server-cpu-model.patch @@ -0,0 +1,103 @@ +From 839a96660680e11ad494a02e5b14f64ebd9c8552 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 17 Oct 2017 20:36:53 +0200 +Subject: [PATCH 27/27] i386: add Skylake-Server cpu model + +RH-Author: Eduardo Habkost +Message-id: <20171017203653.28578-3-ehabkost@redhat.com> +Patchwork-id: 77351 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/2] i386: add Skylake-Server cpu model +Bugzilla: 1501510 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das + +From: "Boqun Feng (Intel)" + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1501510 + +Introduce Skylake-Server cpu mode which inherits the features from +Skylake-Client and supports some additional features that are: AVX512, +CLWB and PGPE1GB. + +Backport notes: +* ARAT feature not included, as it is not available in the + qemu-kvm-1.5.3 tree (and disabled by compat code in + pc-i440fx-rhel7.2.0 and older on qemu-kvm-rhev) + +Signed-off-by: Boqun Feng (Intel) +Message-Id: <20170621052935.20715-1-boqun.feng@gmail.com> +[ehabkost: copied comment about XSAVES from Skylake-Client] +Signed-off-by: Eduardo Habkost +(cherry picked from commit 53f9a6f45fb214540cb40af45efc11ac40ac454c) +Signed-off-by: Eduardo Habkost + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index e739647..539d659 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1066,6 +1066,56 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core Processor (Skylake)", + }, + { ++ .name = "Skylake-Server", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 85, ++ .stepping = 4, ++ .features[FEAT_1_EDX] = ++ CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_PDPE1GB | CPUID_EXT2_RDTSCP | ++ CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | ++ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX | CPUID_7_0_EBX_CLWB | ++ CPUID_7_0_EBX_AVX512F | CPUID_7_0_EBX_AVX512DQ | ++ CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512CD | ++ CPUID_7_0_EBX_AVX512VL, ++ /* Missing: XSAVES (not supported by some Linux versions, ++ * including v4.1 to v4.12). ++ * KVM doesn't yet expose any XSAVES state save component, ++ * and the only one defined in Skylake (processor tracing) ++ * probably will block migration anyway. ++ */ ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1, ++ /* Missing: ARAT. not available in the qemu-kvm-1.5.3 tree (and ++ * disabled by compat code in pc-i440fx-rhel7.2.0 and older on ++ * qemu-kvm-rhev) ++ */ ++ .xlevel = 0x80000008, ++ .model_id = "Intel Xeon Processor (Skylake)", ++ }, ++ { + .name = "Opteron_G1", + .level = 5, + .vendor = CPUID_VENDOR_AMD, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-add-bios-linker-loader.patch b/SOURCES/kvm-i386-add-bios-linker-loader.patch new file mode 100644 index 0000000..d31cde9 --- /dev/null +++ b/SOURCES/kvm-i386-add-bios-linker-loader.patch @@ -0,0 +1,259 @@ +From 54cd29fdf716fa676866b75b7faa32aff0cf7dac Mon Sep 17 00:00:00 2001 +Message-Id: <54cd29fdf716fa676866b75b7faa32aff0cf7dac.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:34 +0100 +Subject: [PATCH 37/56] i386: add bios linker/loader + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-38-git-send-email-mst@redhat.com> +Patchwork-id: 56343 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 37/57] i386: add bios linker/loader +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +This adds a dynamic bios linker/loader. +This will be used by acpi table generation +code to: + - load each table in the appropriate memory segment + - link tables to each other + - fix up checksums after said linking + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit bc70232918ad3fb45c2b5423455a5de6bc7efdef) +--- + hw/i386/bios-linker-loader.h | 27 ++++++++ + hw/i386/bios-linker-loader.c | 158 +++++++++++++++++++++++++++++++++++++++++++ + hw/i386/Makefile.objs | 1 + + 3 files changed, 186 insertions(+) + create mode 100644 hw/i386/bios-linker-loader.h + create mode 100644 hw/i386/bios-linker-loader.c + +Signed-off-by: Michal Novotny +--- + hw/i386/Makefile.objs | 1 + + hw/i386/bios-linker-loader.c | 158 +++++++++++++++++++++++++++++++++++++++++++ + hw/i386/bios-linker-loader.h | 27 ++++++++ + 3 files changed, 186 insertions(+) + create mode 100644 hw/i386/bios-linker-loader.c + create mode 100644 hw/i386/bios-linker-loader.h + +diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs +index 013d250..71be2da 100644 +--- a/hw/i386/Makefile.objs ++++ b/hw/i386/Makefile.objs +@@ -4,6 +4,7 @@ obj-y += pc.o pc_piix.o pc_q35.o + obj-$(CONFIG_XEN) += xen_domainbuild.o xen_machine_pv.o + + obj-y += kvmvapic.o ++obj-y += bios-linker-loader.o + + iasl-option=$(shell if test -z "`$(1) $(2) 2>&1 > /dev/null`" \ + ; then echo "$(2)"; else echo "$(3)"; fi ;) +diff --git a/hw/i386/bios-linker-loader.c b/hw/i386/bios-linker-loader.c +new file mode 100644 +index 0000000..0833853 +--- /dev/null ++++ b/hw/i386/bios-linker-loader.c +@@ -0,0 +1,158 @@ ++/* Dynamic linker/loader of ACPI tables ++ * ++ * Copyright (C) 2013 Red Hat Inc ++ * ++ * Author: Michael S. Tsirkin ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, see . ++ */ ++ ++#include "bios-linker-loader.h" ++#include "hw/nvram/fw_cfg.h" ++ ++#include ++#include ++#include "qemu/bswap.h" ++ ++#define BIOS_LINKER_LOADER_FILESZ FW_CFG_MAX_FILE_PATH ++ ++struct BiosLinkerLoaderEntry { ++ uint32_t command; ++ union { ++ /* ++ * COMMAND_ALLOCATE - allocate a table from @alloc.file ++ * subject to @alloc.align alignment (must be power of 2) ++ * and @alloc.zone (can be HIGH or FSEG) requirements. ++ * ++ * Must appear exactly once for each file, and before ++ * this file is referenced by any other command. ++ */ ++ struct { ++ char file[BIOS_LINKER_LOADER_FILESZ]; ++ uint32_t align; ++ uint8_t zone; ++ } alloc; ++ ++ /* ++ * COMMAND_ADD_POINTER - patch the table (originating from ++ * @dest_file) at @pointer.offset, by adding a pointer to the table ++ * originating from @src_file. 1,2,4 or 8 byte unsigned ++ * addition is used depending on @pointer.size. ++ */ ++ struct { ++ char dest_file[BIOS_LINKER_LOADER_FILESZ]; ++ char src_file[BIOS_LINKER_LOADER_FILESZ]; ++ uint32_t offset; ++ uint8_t size; ++ } pointer; ++ ++ /* ++ * COMMAND_ADD_CHECKSUM - calculate checksum of the range specified by ++ * @cksum_start and @cksum_length fields, ++ * and then add the value at @cksum.offset. ++ * Checksum simply sums -X for each byte X in the range ++ * using 8-bit math. ++ */ ++ struct { ++ char file[BIOS_LINKER_LOADER_FILESZ]; ++ uint32_t offset; ++ uint32_t start; ++ uint32_t length; ++ } cksum; ++ ++ /* padding */ ++ char pad[124]; ++ }; ++} QEMU_PACKED; ++typedef struct BiosLinkerLoaderEntry BiosLinkerLoaderEntry; ++ ++enum { ++ BIOS_LINKER_LOADER_COMMAND_ALLOCATE = 0x1, ++ BIOS_LINKER_LOADER_COMMAND_ADD_POINTER = 0x2, ++ BIOS_LINKER_LOADER_COMMAND_ADD_CHECKSUM = 0x3, ++}; ++ ++enum { ++ BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH = 0x1, ++ BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG = 0x2, ++}; ++ ++GArray *bios_linker_loader_init(void) ++{ ++ return g_array_new(false, true /* clear */, sizeof(BiosLinkerLoaderEntry)); ++} ++ ++/* Free linker wrapper and return the linker array. */ ++void *bios_linker_loader_cleanup(GArray *linker) ++{ ++ return g_array_free(linker, false); ++} ++ ++void bios_linker_loader_alloc(GArray *linker, ++ const char *file, ++ uint32_t alloc_align, ++ bool alloc_fseg) ++{ ++ BiosLinkerLoaderEntry entry; ++ ++ memset(&entry, 0, sizeof entry); ++ strncpy(entry.alloc.file, file, sizeof entry.alloc.file - 1); ++ entry.command = cpu_to_le32(BIOS_LINKER_LOADER_COMMAND_ALLOCATE); ++ entry.alloc.align = cpu_to_le32(alloc_align); ++ entry.alloc.zone = cpu_to_le32(alloc_fseg ? ++ BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG : ++ BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH); ++ ++ /* Alloc entries must come first, so prepend them */ ++ g_array_prepend_val(linker, entry); ++} ++ ++void bios_linker_loader_add_checksum(GArray *linker, const char *file, ++ void *table, ++ void *start, unsigned size, ++ uint8_t *checksum) ++{ ++ BiosLinkerLoaderEntry entry; ++ ++ memset(&entry, 0, sizeof entry); ++ strncpy(entry.cksum.file, file, sizeof entry.cksum.file - 1); ++ entry.command = cpu_to_le32(BIOS_LINKER_LOADER_COMMAND_ADD_CHECKSUM); ++ entry.cksum.offset = cpu_to_le32(checksum - (uint8_t *)table); ++ entry.cksum.start = cpu_to_le32((uint8_t *)start - (uint8_t *)table); ++ entry.cksum.length = cpu_to_le32(size); ++ ++ g_array_append_val(linker, entry); ++} ++ ++void bios_linker_loader_add_pointer(GArray *linker, ++ const char *dest_file, ++ const char *src_file, ++ GArray *table, void *pointer, ++ uint8_t pointer_size) ++{ ++ BiosLinkerLoaderEntry entry; ++ ++ memset(&entry, 0, sizeof entry); ++ strncpy(entry.pointer.dest_file, dest_file, ++ sizeof entry.pointer.dest_file - 1); ++ strncpy(entry.pointer.src_file, src_file, ++ sizeof entry.pointer.src_file - 1); ++ entry.command = cpu_to_le32(BIOS_LINKER_LOADER_COMMAND_ADD_POINTER); ++ entry.pointer.offset = cpu_to_le32((gchar *)pointer - table->data); ++ entry.pointer.size = pointer_size; ++ assert(pointer_size == 1 || pointer_size == 2 || ++ pointer_size == 4 || pointer_size == 8); ++ ++ g_array_append_val(linker, entry); ++} +diff --git a/hw/i386/bios-linker-loader.h b/hw/i386/bios-linker-loader.h +new file mode 100644 +index 0000000..498c0af +--- /dev/null ++++ b/hw/i386/bios-linker-loader.h +@@ -0,0 +1,27 @@ ++#ifndef BIOS_LINKER_LOADER_H ++#define BIOS_LINKER_LOADER_H ++ ++#include ++#include ++#include ++ ++GArray *bios_linker_loader_init(void); ++ ++void bios_linker_loader_alloc(GArray *linker, ++ const char *file, ++ uint32_t alloc_align, ++ bool alloc_fseg); ++ ++void bios_linker_loader_add_checksum(GArray *linker, const char *file, ++ void *table, ++ void *start, unsigned size, ++ uint8_t *checksum); ++ ++void bios_linker_loader_add_pointer(GArray *linker, ++ const char *dest_file, ++ const char *src_file, ++ GArray *table, void *pointer, ++ uint8_t pointer_size); ++ ++void *bios_linker_loader_cleanup(GArray *linker); ++#endif +-- +1.7.11.7 + diff --git a/SOURCES/kvm-i386-define-pc-guest-info.patch b/SOURCES/kvm-i386-define-pc-guest-info.patch new file mode 100644 index 0000000..7d0e651 --- /dev/null +++ b/SOURCES/kvm-i386-define-pc-guest-info.patch @@ -0,0 +1,103 @@ +From 9ac777bc498f6be28cab47c96a1f0822b5a01868 Mon Sep 17 00:00:00 2001 +Message-Id: <9ac777bc498f6be28cab47c96a1f0822b5a01868.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:44 +0100 +Subject: [PATCH 39/56] i386: define pc guest info + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-40-git-send-email-mst@redhat.com> +Patchwork-id: 56345 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 39/57] i386: define pc guest info +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +This defines a structure that will be used to fill in acpi tables +where relevant properties are not yet available using QOM. + +Reviewed-by: Laszlo Ersek +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit b20c9bd5f6d8860856f6078836d197c6c2e27ef1) + +Conflicts: + include/hw/i386/pc.h +--- + include/hw/i386/pc.h | 9 +++++++++ + hw/i386/pc.c | 21 +++++++++++++++++++++ + 2 files changed, 30 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 21 +++++++++++++++++++++ + include/hw/i386/pc.h | 9 +++++++++ + 2 files changed, 30 insertions(+) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index e5ebd52..4d54c0b 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -1042,6 +1042,27 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, + { + PcGuestInfoState *guest_info_state = g_malloc0(sizeof *guest_info_state); + PcGuestInfo *guest_info = &guest_info_state->info; ++ int i, j; ++ ++ guest_info->ram_size = below_4g_mem_size + above_4g_mem_size; ++ guest_info->apic_id_limit = pc_apic_id_limit(max_cpus); ++ guest_info->apic_xrupt_override = kvm_allows_irq0_override(); ++ guest_info->numa_nodes = nb_numa_nodes; ++ guest_info->node_mem = g_memdup(node_mem, guest_info->numa_nodes * ++ sizeof *guest_info->node_mem); ++ guest_info->node_cpu = g_malloc0(guest_info->apic_id_limit * ++ sizeof *guest_info->node_cpu); ++ ++ for (i = 0; i < max_cpus; i++) { ++ unsigned int apic_id = x86_cpu_apic_id_from_index(i); ++ assert(apic_id < guest_info->apic_id_limit); ++ for (j = 0; j < nb_numa_nodes; j++) { ++ if (test_bit(i, node_cpumask[j])) { ++ guest_info->node_cpu[apic_id] = j; ++ break; ++ } ++ } ++ } + + guest_info_state->machine_done.notify = pc_guest_info_machine_done; + qemu_add_machine_init_done_notifier(&guest_info_state->machine_done); +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index abaaf93..ec91fae 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -11,6 +11,9 @@ + #include "hw/i386/ioapic.h" + + #include "qemu/range.h" ++#include "qemu/bitmap.h" ++#include "sysemu/sysemu.h" ++#include "hw/pci/pci.h" + + /* PC-style peripherals (also used by other machines). */ + +@@ -21,6 +24,12 @@ typedef struct PcPciInfo { + + struct PcGuestInfo { + bool has_pci_info; ++ hwaddr ram_size; ++ unsigned apic_id_limit; ++ bool apic_xrupt_override; ++ uint64_t numa_nodes; ++ uint64_t *node_mem; ++ uint64_t *node_cpu; + FWCfgState *fw_cfg; + }; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-i386-define-the-AMD-virt-ssbd-CPUID-feature-bit-CVE-.patch b/SOURCES/kvm-i386-define-the-AMD-virt-ssbd-CPUID-feature-bit-CVE-.patch new file mode 100644 index 0000000..11e6e57 --- /dev/null +++ b/SOURCES/kvm-i386-define-the-AMD-virt-ssbd-CPUID-feature-bit-CVE-.patch @@ -0,0 +1,57 @@ +From c95345b4fea239a4482652ad57b4106254cd79f0 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 13 Jun 2018 18:50:56 +0200 +Subject: [PATCH 04/17] i386: define the AMD 'virt-ssbd' CPUID feature bit + (CVE-2018-3639) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20180613185056.18066-3-ehabkost@redhat.com> +Patchwork-id: 80680 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/2] i386: define the AMD 'virt-ssbd' CPUID feature bit (CVE-2018-3639) +Bugzilla: 1584583 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +From: Konrad Rzeszutek Wilk + +AMD Zen expose the Intel equivalant to Speculative Store Bypass Disable +via the 0x80000008_EBX[25] CPUID feature bit. + +This needs to be exposed to guest OS to allow them to protect +against CVE-2018-3639. + +Signed-off-by: Konrad Rzeszutek Wilk +Reviewed-by: Daniel P. Berrangé +Signed-off-by: Daniel P. Berrangé +Message-Id: <20180521215424.13520-3-berrange@redhat.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit 403503b162ffc33fb64cfefdf7b880acf41772cd) +Signed-off-by: Miroslav Rezanina + +Conflicts: + target/i386/cpu.c is target-i386/cpu.c + +Signed-off-by: Eduardo Habkost +--- + target-i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 0254747..4b3a238 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -183,7 +183,7 @@ static const char *cpuid_80000008_ebx_feature_name[] = { + "ibpb", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, ++ NULL, "virt-ssbd", NULL, NULL, + NULL, NULL, NULL, NULL, + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch b/SOURCES/kvm-i386-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch new file mode 100644 index 0000000..77e33ee --- /dev/null +++ b/SOURCES/kvm-i386-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch @@ -0,0 +1,53 @@ +From 3aa3deed539cd90a2eee32d3d8c2f673adb58aa8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= +Date: Wed, 9 May 2018 09:06:29 +0100 +Subject: [PATCH 03/10] i386: define the 'ssbd' CPUID feature bit + (CVE-2018-3639) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrangé +Bugzilla: 1574082 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +New microcode introduces the "Speculative Store Bypass Disable" +CPUID feature bit. This needs to be exposed to guest OS to allow +them to protect against CVE-2018-3639. + +Signed-off-by: Daniel P. Berrangé +--- + target-i386/cpu.c | 2 +- + target-i386/cpu.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 08b43f5..539c202 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -173,7 +173,7 @@ static const char *cpuid_7_0_edx_feature_name[] = { + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, "spec-ctrl", "stibp", +- NULL, "arch-facilities", NULL, NULL, ++ NULL, "arch-facilities", NULL, "ssbd", + }; + + static const char *cpuid_80000008_ebx_feature_name[] = { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index a8a640a..da84443 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -590,6 +590,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ + #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ + #define CPUID_7_0_EDX_SPEC_CTRL (1U << 26) /* Indirect Branch - Restrict Speculation */ ++#define CPUID_7_0_EDX_SPEC_CTRL_SSBD (1U << 31) /* Speculative Store Bypass Disable */ + + #define CPUID_8000_0008_EBX_IBPB (1U << 12) /* Indirect Branch Prediction Barrier */ + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-expose-fw_cfg-QEMU0002-in-SSDT.patch b/SOURCES/kvm-i386-expose-fw_cfg-QEMU0002-in-SSDT.patch new file mode 100644 index 0000000..e4d9c73 --- /dev/null +++ b/SOURCES/kvm-i386-expose-fw_cfg-QEMU0002-in-SSDT.patch @@ -0,0 +1,51 @@ +From d7b246e19d4e81f231b3aff6c3885c325be9a9d2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:41 +0100 +Subject: [PATCH 10/41] i386: expose fw_cfg QEMU0002 in SSDT +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-11-marcandre.lureau@redhat.com> +Patchwork-id: 78360 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 10/41] i386: expose fw_cfg QEMU0002 in SSDT +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +RHEL only: This is needed so kernel module can find the device and +load the driver. Upstream qemu uses different API to build ACPI +tables. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/i386/ssdt-misc.dsl | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl +index a4484b8..d124c74 100644 +--- a/hw/i386/ssdt-misc.dsl ++++ b/hw/i386/ssdt-misc.dsl +@@ -74,6 +74,16 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1) + External(\_SB.PCI0, DeviceObj) + External(\_SB.PCI0.ISA, DeviceObj) + ++ Scope(\_SB.PCI0) { ++ Device(FWCF) { ++ Name(_HID, "QEMU0002") ++ Name(_STA, 0x0B) ++ Name(_CRS, ResourceTemplate () { ++ IO(Decode16, 0x0510, 0x0510, 0x01, 0x0C, IO) ++ }) ++ } ++ } ++ + Scope(\_SB.PCI0.ISA) { + Device(PEVT) { + Name(_HID, "QEMU0001") +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-fix-LAPIC-TSC-deadline-timer-save-restore.patch b/SOURCES/kvm-i386-fix-LAPIC-TSC-deadline-timer-save-restore.patch new file mode 100644 index 0000000..0785147 --- /dev/null +++ b/SOURCES/kvm-i386-fix-LAPIC-TSC-deadline-timer-save-restore.patch @@ -0,0 +1,90 @@ +From 12623687c4bd5eeb5b3ca8f23cf3b646357e2bc3 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Tue, 20 Aug 2013 21:42:24 +0200 +Subject: [PATCH 25/28] kvm: i386: fix LAPIC TSC deadline timer save/restore + +RH-Author: Marcelo Tosatti +Message-id: <20130820214224.GA9334@amt.cnet> +Patchwork-id: 53623 +O-Subject: [RHEL7 qemu-kvm PATCH] kvm: i386: fix LAPIC TSC deadline timer save/restore +Bugzilla: 972433 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Gleb Natapov + +BZ: 972433 + +commit 7477cd3897082d2650d520a4e9aa7f8affa3dd5d of uq/master branch +of qemu-kvm.git repository + +The configuration of the timer represented by MSR_IA32_TSCDEADLINE depends on: + +- APIC LVT Timer register. +- TSC value. + +Change the order to respect the dependency. + +Signed-off-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 29 ++++++++++++++++++++++++++--- + 1 files changed, 26 insertions(+), 3 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 8da6a0d..c5a9416 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1042,6 +1042,26 @@ static void kvm_msr_entry_set(struct kvm_msr_entry *entry, + entry->data = value; + } + ++static int kvm_put_tscdeadline_msr(X86CPU *cpu) ++{ ++ CPUX86State *env = &cpu->env; ++ struct { ++ struct kvm_msrs info; ++ struct kvm_msr_entry entries[1]; ++ } msr_data; ++ struct kvm_msr_entry *msrs = msr_data.entries; ++ ++ if (!has_msr_tsc_deadline) { ++ return 0; ++ } ++ ++ kvm_msr_entry_set(&msrs[0], MSR_IA32_TSCDEADLINE, env->tsc_deadline); ++ ++ msr_data.info.nmsrs = 1; ++ ++ return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, &msr_data); ++} ++ + static int kvm_put_msrs(X86CPU *cpu, int level) + { + CPUX86State *env = &cpu->env; +@@ -1065,9 +1085,6 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + if (has_msr_tsc_adjust) { + kvm_msr_entry_set(&msrs[n++], MSR_TSC_ADJUST, env->tsc_adjust); + } +- if (has_msr_tsc_deadline) { +- kvm_msr_entry_set(&msrs[n++], MSR_IA32_TSCDEADLINE, env->tsc_deadline); +- } + if (has_msr_misc_enable) { + kvm_msr_entry_set(&msrs[n++], MSR_IA32_MISC_ENABLE, + env->msr_ia32_misc_enable); +@@ -1705,6 +1722,12 @@ int kvm_arch_put_registers(CPUState *cpu, int level) + return ret; + } + } ++ ++ ret = kvm_put_tscdeadline_msr(x86_cpu); ++ if (ret < 0) { ++ return ret; ++ } ++ + ret = kvm_put_vcpu_events(x86_cpu, level); + if (ret < 0) { + return ret; +-- +1.7.1 + diff --git a/SOURCES/kvm-i386-kvm-Disable-arch_capabilities-if-MSR-can-t-be-s.patch b/SOURCES/kvm-i386-kvm-Disable-arch_capabilities-if-MSR-can-t-be-s.patch new file mode 100644 index 0000000..13b6953 --- /dev/null +++ b/SOURCES/kvm-i386-kvm-Disable-arch_capabilities-if-MSR-can-t-be-s.patch @@ -0,0 +1,74 @@ +From 178a63f8515a461a6625b856d25f4d4154ada960 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:26 +0200 +Subject: [PATCH 10/12] i386: kvm: Disable arch_capabilities if MSR can't be + set + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-10-git-send-email-plai@redhat.com> +Patchwork-id: 90858 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 09/10] i386: kvm: Disable arch_capabilities if MSR can't be set +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Eduardo Habkost + +KVM has two bugs in the handling of MSR_IA32_ARCH_CAPABILITIES: + +1) Linux commit commit 1eaafe91a0df ("kvm: x86: IA32_ARCH_CAPABILITIES + is always supported") makes GET_SUPPORTED_CPUID return + arch_capabilities even if running on SVM. This makes "-cpu + host,migratable=off" incorrectly expose arch_capabilities on CPUID on + AMD hosts (where the MSR is not emulated by KVM). + +2) KVM_GET_MSR_INDEX_LIST does not return MSR_IA32_ARCH_CAPABILITIES if + the MSR is not supported by the host CPU. This makes QEMU not + initialize the MSR properly at kvm_put_msrs() on those hosts. + +Work around both bugs on the QEMU side, by checking if the MSR +was returned by KVM_GET_MSR_INDEX_LIST before returning the +feature flag on kvm_arch_get_supported_cpuid(). + +This has the unfortunate side effect of making arch_capabilities +unavailable on hosts without hardware support for the MSR until bug #2 +is fixed on KVM, but I can't see another way to work around bug #1 +without that side effect. + +Signed-off-by: Eduardo Habkost +Message-Id: <20190125220606.4864-2-ehabkost@redhat.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit 485b1d256bcb0874bcde0223727c159b6837e6f8) +Signed-off-by: Paul Lai +Signed-off-by: Miroslav Rezanina + +Conflicts: + target/i386/kvm.c changes to target-i386/kvm.c +--- + target-i386/kvm.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 12781a8..c79b0ea 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -235,6 +235,15 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function, + if (!kvm_irqchip_in_kernel()) { + ret &= ~CPUID_EXT_X2APIC; + } ++ } else if (function == 7 && index == 0 && reg == R_EDX) { ++ /* ++ * Linux v4.17-v4.20 incorrectly return ARCH_CAPABILITIES on SVM hosts. ++ * We can detect the bug by checking if MSR_IA32_ARCH_CAPABILITIES is ++ * returned by KVM_GET_MSR_INDEX_LIST. ++ */ ++ if (!has_msr_arch_capabs) { ++ ret &= ~CPUID_7_0_EDX_ARCH_CAPABILITIES; ++ } + } else if (function == 0x80000001 && reg == R_EDX) { + /* On Intel, kvm returns cpuid according to the Intel spec, + * so add missing bits according to the AMD spec: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-kvmvapic-initialise-imm32-variable.patch b/SOURCES/kvm-i386-kvmvapic-initialise-imm32-variable.patch new file mode 100644 index 0000000..f8919b6 --- /dev/null +++ b/SOURCES/kvm-i386-kvmvapic-initialise-imm32-variable.patch @@ -0,0 +1,46 @@ +From edb9059eb8f42f892d67df324eeb0098c05d1f4a Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 28 Feb 2017 12:07:54 +0100 +Subject: [PATCH 09/24] i386: kvmvapic: initialise imm32 variable + +RH-Author: Paolo Bonzini +Message-id: <20170228120754.16073-1-pbonzini@redhat.com> +Patchwork-id: 74089 +O-Subject: [RHEL7.4 qemu-kvm PATCH] i386: kvmvapic: initialise imm32 variable +Bugzilla: 1335751 +RH-Acked-by: David Hildenbrand +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +When processing Task Priorty Register(TPR) access, it could leak +automatic stack variable 'imm32' in patch_instruction(). +Initialise the variable to avoid it. + +Reported by: Donghai Zdh +Cc: qemu-stable@nongnu.org +Signed-off-by: Prasad J Pandit +Message-Id: <1460013608-16670-1-git-send-email-ppandit@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 691a02e2ce0c413236a78dee6f2651c937b09fb0) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvmvapic.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c +index 577ae64..a5dd9dd 100644 +--- a/hw/i386/kvmvapic.c ++++ b/hw/i386/kvmvapic.c +@@ -390,7 +390,7 @@ static void patch_instruction(VAPICROMState *s, X86CPU *cpu, target_ulong ip) + CPUX86State *env = &cpu->env; + VAPICHandlers *handlers; + uint8_t opcode[2]; +- uint32_t imm32; ++ uint32_t imm32 = 0; + target_ulong current_pc = 0; + target_ulong current_cs_base = 0; + int current_flags = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i386-update-ssdt-misc.hex.generated.patch b/SOURCES/kvm-i386-update-ssdt-misc.hex.generated.patch new file mode 100644 index 0000000..4d76492 --- /dev/null +++ b/SOURCES/kvm-i386-update-ssdt-misc.hex.generated.patch @@ -0,0 +1,135 @@ +From 7062c4cd0e110af1bbf165db42c11ca2cbb50fc1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Thu, 4 Jan 2018 20:19:02 +0100 +Subject: [PATCH 1/2] i386: update ssdt-misc.hex.generated +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20180104201902.4364-1-marcandre.lureau@redhat.com> +Patchwork-id: 78516 +O-Subject: [RHEL-7.5 qemu-kvm PATCH] i386: update ssdt-misc.hex.generated +Bugzilla: 1411490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov + +RHEL commit d7b246e19d4e81f231b3aff6c3885c325be9a9d2 "i386: expose +fw_cfg QEMU0002 in SSDT" modified ssdt-misc.dsl to export fw_cfg in +ACPI tables. However, the file isn't compiled in RHEL. + +Use known good version acpica-tools-20150619-3.el7.x86_64 to build the +new compiled version. I verified with a RHEL5 guest that #1377087 +isn't happening again after this update. + +RHEL only: This is needed so kernel module can find the device and +load the driver. Upstream qemu uses different API to build ACPI +tables. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/i386/ssdt-misc.hex.generated | 68 ++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 64 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/ssdt-misc.hex.generated b/hw/i386/ssdt-misc.hex.generated +index 86c5725..52ad0b7 100644 +--- a/hw/i386/ssdt-misc.hex.generated ++++ b/hw/i386/ssdt-misc.hex.generated +@@ -18,12 +18,12 @@ static unsigned char ssdp_misc_aml[] = { + 0x53, + 0x44, + 0x54, +-0x62, ++0x9e, + 0x1, + 0x0, + 0x0, + 0x1, +-0x80, ++0xbf, + 0x42, + 0x58, + 0x50, +@@ -176,6 +176,66 @@ static unsigned char ssdp_misc_aml[] = { + 0x0, + 0x0, + 0x10, ++0x3b, ++0x5c, ++0x2e, ++0x5f, ++0x53, ++0x42, ++0x5f, ++0x50, ++0x43, ++0x49, ++0x30, ++0x5b, ++0x82, ++0x2e, ++0x46, ++0x57, ++0x43, ++0x46, ++0x8, ++0x5f, ++0x48, ++0x49, ++0x44, ++0xd, ++0x51, ++0x45, ++0x4d, ++0x55, ++0x30, ++0x30, ++0x30, ++0x32, ++0x0, ++0x8, ++0x5f, ++0x53, ++0x54, ++0x41, ++0xa, ++0xb, ++0x8, ++0x5f, ++0x43, ++0x52, ++0x53, ++0x11, ++0xd, ++0xa, ++0xa, ++0x47, ++0x1, ++0x10, ++0x5, ++0x10, ++0x5, ++0x1, ++0xc, ++0x79, ++0x0, ++0x10, + 0x40, + 0xc, + 0x5c, +@@ -369,8 +429,8 @@ static unsigned char ssdp_misc_aml[] = { + 0x4d, + 0x58 + }; +-static unsigned char ssdt_isa_pest[] = { +-0xd0 ++static unsigned short ssdt_isa_pest[] = { ++0x10c + }; + static unsigned char acpi_s4_name[] = { + 0x88 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i440fx-test-generate-temporary-firmware-blob.patch b/SOURCES/kvm-i440fx-test-generate-temporary-firmware-blob.patch new file mode 100644 index 0000000..59d51d6 --- /dev/null +++ b/SOURCES/kvm-i440fx-test-generate-temporary-firmware-blob.patch @@ -0,0 +1,120 @@ +From a577ed3eaa3c3ba84133d9bea1907c69c01063ad Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:06 +0100 +Subject: [PATCH 16/22] i440fx-test: generate temporary firmware blob + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-17-git-send-email-lersek@redhat.com> +Patchwork-id: 56629 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 16/18] i440fx-test: generate temporary firmware blob +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +The blob is 64K in size and contains 0x00..0xFF repeatedly. + +The client code added to main() wouldn't make much sense in the long term. +It helps with debugging and it silences gcc about create_blob_file() being +unused, and we'll replace it in the next patch anyway. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 27d59ccd89a5b112e5a5804250440ea30dbfb891) +--- + tests/i440fx-test.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 60 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/i440fx-test.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 60 insertions(+), 0 deletions(-) + +diff --git a/tests/i440fx-test.c b/tests/i440fx-test.c +index 3962bca..b6e0cd3 100644 +--- a/tests/i440fx-test.c ++++ b/tests/i440fx-test.c +@@ -20,6 +20,11 @@ + + #include + #include ++#include ++#include ++#include ++#include ++#include + + #define BROKEN 1 + +@@ -272,13 +277,68 @@ static void test_i440fx_pam(gconstpointer opaque) + qtest_end(); + } + ++#define BLOB_SIZE ((size_t)65536) ++ ++/* Create a blob file, and return its absolute pathname as a dynamically ++ * allocated string. ++ * The file is closed before the function returns. ++ * In case of error, NULL is returned. The function prints the error message. ++ */ ++static char *create_blob_file(void) ++{ ++ int ret, fd; ++ char *pathname; ++ GError *error = NULL; ++ ++ ret = -1; ++ fd = g_file_open_tmp("blob_XXXXXX", &pathname, &error); ++ if (fd == -1) { ++ fprintf(stderr, "unable to create blob file: %s\n", error->message); ++ g_error_free(error); ++ } else { ++ if (ftruncate(fd, BLOB_SIZE) == -1) { ++ fprintf(stderr, "ftruncate(\"%s\", %zu): %s\n", pathname, ++ BLOB_SIZE, strerror(errno)); ++ } else { ++ void *buf; ++ ++ buf = mmap(NULL, BLOB_SIZE, PROT_WRITE, MAP_SHARED, fd, 0); ++ if (buf == MAP_FAILED) { ++ fprintf(stderr, "mmap(\"%s\", %zu): %s\n", pathname, BLOB_SIZE, ++ strerror(errno)); ++ } else { ++ size_t i; ++ ++ for (i = 0; i < BLOB_SIZE; ++i) { ++ ((uint8_t *)buf)[i] = i; ++ } ++ munmap(buf, BLOB_SIZE); ++ ret = 0; ++ } ++ } ++ close(fd); ++ if (ret == -1) { ++ unlink(pathname); ++ g_free(pathname); ++ } ++ } ++ ++ return ret == -1 ? NULL : pathname; ++} ++ + int main(int argc, char **argv) + { ++ char *fw_pathname; + TestData data; + int ret; + + g_test_init(&argc, &argv, NULL); + ++ fw_pathname = create_blob_file(); ++ g_assert(fw_pathname != NULL); ++ unlink(fw_pathname); ++ g_free(fw_pathname); ++ + data.num_cpus = 1; + + g_test_add_data_func("/i440fx/defaults", &data, test_i440fx_defaults); +-- +1.7.1 + diff --git a/SOURCES/kvm-i440fx-test-give-each-GTest-case-its-own-qtest.patch b/SOURCES/kvm-i440fx-test-give-each-GTest-case-its-own-qtest.patch new file mode 100644 index 0000000..0b36c5c --- /dev/null +++ b/SOURCES/kvm-i440fx-test-give-each-GTest-case-its-own-qtest.patch @@ -0,0 +1,135 @@ +From f57ff93bf55cfdf09995c441cbbf8ad886f1afcb Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:05 +0100 +Subject: [PATCH 15/22] i440fx-test: give each GTest case its own qtest + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-16-git-send-email-lersek@redhat.com> +Patchwork-id: 56628 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 15/18] i440fx-test: give each GTest case its own qtest +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +The current two GTest cases, /i440fx/defaults and /i440fx/pam can share a +qemu process, but the next two cases will need dedicated instances. It is +messy (and order-dependent) to dynamically configure GTest cases one by +one to start, stop, or keep the current qtest (*); let's just have each +GTest work with its own qtest. The performance difference should be +negligible. + +(*) As g_test_run() can be invoked at most once per process startup, and +it runs GTest cases in sequence, we'd need clumsy data structures to +control each GTest case to start/stop/keep the qemu instance. Or, we'd +have to code the same information into the test methods themselves, which +would make them even more order-dependent. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit c37805b6724e5d4c3ad41653630b72b43619474e) +--- + tests/i440fx-test.c | 32 +++++++++++++++++++------------- + 1 file changed, 19 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/i440fx-test.c | 32 +++++++++++++++++++------------- + 1 files changed, 19 insertions(+), 13 deletions(-) + +diff --git a/tests/i440fx-test.c b/tests/i440fx-test.c +index 6ac46bf..3962bca 100644 +--- a/tests/i440fx-test.c ++++ b/tests/i440fx-test.c +@@ -28,16 +28,27 @@ + typedef struct TestData + { + int num_cpus; +- QPCIBus *bus; + } TestData; + ++static QPCIBus *test_start_get_bus(const TestData *s) ++{ ++ char *cmdline; ++ ++ cmdline = g_strdup_printf("-smp %d", s->num_cpus); ++ qtest_start(cmdline); ++ g_free(cmdline); ++ return qpci_init_pc(); ++} ++ + static void test_i440fx_defaults(gconstpointer opaque) + { + const TestData *s = opaque; ++ QPCIBus *bus; + QPCIDevice *dev; + uint32_t value; + +- dev = qpci_device_find(s->bus, QPCI_DEVFN(0, 0)); ++ bus = test_start_get_bus(s); ++ dev = qpci_device_find(bus, QPCI_DEVFN(0, 0)); + g_assert(dev != NULL); + + /* 3.2.2 */ +@@ -121,6 +132,8 @@ static void test_i440fx_defaults(gconstpointer opaque) + g_assert_cmpint(qpci_config_readb(dev, 0x91), ==, 0x00); /* ERRSTS */ + /* 3.2.26 */ + g_assert_cmpint(qpci_config_readb(dev, 0x93), ==, 0x00); /* TRC */ ++ ++ qtest_end(); + } + + #define PAM_RE 1 +@@ -179,6 +192,7 @@ static void write_area(uint32_t start, uint32_t end, uint8_t value) + static void test_i440fx_pam(gconstpointer opaque) + { + const TestData *s = opaque; ++ QPCIBus *bus; + QPCIDevice *dev; + int i; + static struct { +@@ -201,7 +215,8 @@ static void test_i440fx_pam(gconstpointer opaque) + { 0xEC000, 0xEFFFF }, /* BIOS Extension */ + }; + +- dev = qpci_device_find(s->bus, QPCI_DEVFN(0, 0)); ++ bus = test_start_get_bus(s); ++ dev = qpci_device_find(bus, QPCI_DEVFN(0, 0)); + g_assert(dev != NULL); + + for (i = 0; i < ARRAY_SIZE(pam_area); i++) { +@@ -254,30 +269,21 @@ static void test_i440fx_pam(gconstpointer opaque) + /* Verify the area is not our new mask */ + g_assert(!verify_area(pam_area[i].start, pam_area[i].end, 0x82)); + } ++ qtest_end(); + } + + int main(int argc, char **argv) + { + TestData data; +- char *cmdline; + int ret; + + g_test_init(&argc, &argv, NULL); + + data.num_cpus = 1; + +- cmdline = g_strdup_printf("-smp %d", data.num_cpus); +- qtest_start(cmdline); +- g_free(cmdline); +- +- data.bus = qpci_init_pc(); +- + g_test_add_data_func("/i440fx/defaults", &data, test_i440fx_defaults); + g_test_add_data_func("/i440fx/pam", &data, test_i440fx_pam); + + ret = g_test_run(); +- +- qtest_end(); +- + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-i440fx-test-qtest_start-should-be-paired-with-qtest_.patch b/SOURCES/kvm-i440fx-test-qtest_start-should-be-paired-with-qtest_.patch new file mode 100644 index 0000000..59e5acf --- /dev/null +++ b/SOURCES/kvm-i440fx-test-qtest_start-should-be-paired-with-qtest_.patch @@ -0,0 +1,79 @@ +From 79eec4a8ab4eb5897563cc140c0fc2ee0738dc0b Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:04 +0100 +Subject: [PATCH 14/22] i440fx-test: qtest_start() should be paired with qtest_end() + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-15-git-send-email-lersek@redhat.com> +Patchwork-id: 56627 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 14/18] i440fx-test: qtest_start() should be paired with qtest_end() +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +Similarly to commit 1d9358e6 +("libqtest: New qtest_end() to go with qtest_start()"). + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit b817e3fb5401bfab49e3c212e6daa1ff1f5a4c9a) +--- + tests/i440fx-test.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/i440fx-test.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/tests/i440fx-test.c b/tests/i440fx-test.c +index 65c786c..6ac46bf 100644 +--- a/tests/i440fx-test.c ++++ b/tests/i440fx-test.c +@@ -2,9 +2,11 @@ + * qtest I440FX test case + * + * Copyright IBM, Corp. 2012-2013 ++ * Copyright Red Hat, Inc. 2013 + * + * Authors: + * Anthony Liguori ++ * Laszlo Ersek + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. +@@ -256,7 +258,6 @@ static void test_i440fx_pam(gconstpointer opaque) + + int main(int argc, char **argv) + { +- QTestState *s; + TestData data; + char *cmdline; + int ret; +@@ -266,20 +267,17 @@ int main(int argc, char **argv) + data.num_cpus = 1; + + cmdline = g_strdup_printf("-smp %d", data.num_cpus); +- s = qtest_start(cmdline); ++ qtest_start(cmdline); + g_free(cmdline); + + data.bus = qpci_init_pc(); + + g_test_add_data_func("/i440fx/defaults", &data, test_i440fx_defaults); + g_test_add_data_func("/i440fx/pam", &data, test_i440fx_pam); +- + + ret = g_test_run(); + +- if (s) { +- qtest_quit(s); +- } ++ qtest_end(); + + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-i440fx-test-verify-firmware-under-4G-and-1M-both-bio.patch b/SOURCES/kvm-i440fx-test-verify-firmware-under-4G-and-1M-both-bio.patch new file mode 100644 index 0000000..c28d6e8 --- /dev/null +++ b/SOURCES/kvm-i440fx-test-verify-firmware-under-4G-and-1M-both-bio.patch @@ -0,0 +1,151 @@ +From 473a279de264f7d56a41ac77aa9db4d783733f34 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:07 +0100 +Subject: [PATCH 17/22] i440fx-test: verify firmware under 4G and 1M, both -bios and -pflash + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-18-git-send-email-lersek@redhat.com> +Patchwork-id: 56631 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 17/18] i440fx-test: verify firmware under 4G and 1M, both -bios and -pflash +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +Check whether the firmware is not hidden by other memory regions. + +Qemu is started in paused mode: it shouldn't try to interpret generated +garbage. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 3bcc77ae9935c8c3d10f63492af81f1d7d99d492) +--- + tests/i440fx-test.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 75 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/i440fx-test.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++---- + 1 files changed, 75 insertions(+), 6 deletions(-) + +diff --git a/tests/i440fx-test.c b/tests/i440fx-test.c +index b6e0cd3..fa3e3d6 100644 +--- a/tests/i440fx-test.c ++++ b/tests/i440fx-test.c +@@ -35,6 +35,11 @@ typedef struct TestData + int num_cpus; + } TestData; + ++typedef struct FirmwareTestFixture { ++ /* decides whether we're testing -bios or -pflash */ ++ bool is_bios; ++} FirmwareTestFixture; ++ + static QPCIBus *test_start_get_bus(const TestData *s) + { + char *cmdline; +@@ -278,6 +283,7 @@ static void test_i440fx_pam(gconstpointer opaque) + } + + #define BLOB_SIZE ((size_t)65536) ++#define ISA_BIOS_MAXSZ ((size_t)(128 * 1024)) + + /* Create a blob file, and return its absolute pathname as a dynamically + * allocated string. +@@ -326,23 +332,86 @@ static char *create_blob_file(void) + return ret == -1 ? NULL : pathname; + } + +-int main(int argc, char **argv) ++static void test_i440fx_firmware(FirmwareTestFixture *fixture, ++ gconstpointer user_data) + { +- char *fw_pathname; +- TestData data; +- int ret; +- +- g_test_init(&argc, &argv, NULL); ++ char *fw_pathname, *cmdline; ++ uint8_t *buf; ++ size_t i, isa_bios_size; + + fw_pathname = create_blob_file(); + g_assert(fw_pathname != NULL); ++ ++ /* Better hope the user didn't put metacharacters in TMPDIR and co. */ ++ cmdline = g_strdup_printf("-S %s %s", ++ fixture->is_bios ? "-bios" : "-pflash", ++ fw_pathname); ++ g_test_message("qemu cmdline: %s", cmdline); ++ qtest_start(cmdline); ++ g_free(cmdline); ++ ++ /* Qemu has loaded the firmware (because qtest_start() only returns after ++ * the QMP handshake completes). We must unlink the firmware blob right ++ * here, because any assertion firing below would leak it in the ++ * filesystem. This is also the reason why we recreate the blob every time ++ * this function is invoked. ++ */ + unlink(fw_pathname); + g_free(fw_pathname); + ++ /* check below 4G */ ++ buf = g_malloc0(BLOB_SIZE); ++ memread(0x100000000ULL - BLOB_SIZE, buf, BLOB_SIZE); ++ for (i = 0; i < BLOB_SIZE; ++i) { ++ g_assert_cmphex(buf[i], ==, (uint8_t)i); ++ } ++ ++ /* check in ISA space too */ ++ memset(buf, 0, BLOB_SIZE); ++ isa_bios_size = ISA_BIOS_MAXSZ < BLOB_SIZE ? ISA_BIOS_MAXSZ : BLOB_SIZE; ++ memread(0x100000 - isa_bios_size, buf, isa_bios_size); ++ for (i = 0; i < isa_bios_size; ++i) { ++ g_assert_cmphex(buf[i], ==, ++ (uint8_t)((BLOB_SIZE - isa_bios_size) + i)); ++ } ++ ++ g_free(buf); ++ qtest_end(); ++} ++ ++static void add_firmware_test(const char *testpath, ++ void (*setup_fixture)(FirmwareTestFixture *f, ++ gconstpointer test_data)) ++{ ++ g_test_add(testpath, FirmwareTestFixture, NULL, setup_fixture, ++ test_i440fx_firmware, NULL); ++} ++ ++static void request_bios(FirmwareTestFixture *fixture, ++ gconstpointer user_data) ++{ ++ fixture->is_bios = true; ++} ++ ++static void request_pflash(FirmwareTestFixture *fixture, ++ gconstpointer user_data) ++{ ++ fixture->is_bios = false; ++} ++ ++int main(int argc, char **argv) ++{ ++ TestData data; ++ int ret; ++ ++ g_test_init(&argc, &argv, NULL); ++ + data.num_cpus = 1; + + g_test_add_data_func("/i440fx/defaults", &data, test_i440fx_defaults); + g_test_add_data_func("/i440fx/pam", &data, test_i440fx_pam); ++ add_firmware_test("/i440fx/firmware/bios", request_bios); ++ add_firmware_test("/i440fx/firmware/pflash", request_pflash); + + ret = g_test_run(); + return ret; +-- +1.7.1 + diff --git a/SOURCES/kvm-i6300esb-Fix-signed-integer-overflow.patch b/SOURCES/kvm-i6300esb-Fix-signed-integer-overflow.patch new file mode 100644 index 0000000..2e048e9 --- /dev/null +++ b/SOURCES/kvm-i6300esb-Fix-signed-integer-overflow.patch @@ -0,0 +1,79 @@ +From 7f476950b0f5780d1112f8e9d0d92ece55ae6912 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Wed, 1 Nov 2017 11:33:00 +0100 +Subject: [PATCH 5/7] i6300esb: Fix signed integer overflow + +RH-Author: Richard Jones +Message-id: <1509535982-27927-2-git-send-email-rjones@redhat.com> +Patchwork-id: 77461 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 1/3] i6300esb: Fix signed integer overflow +Bugzilla: 1470244 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: David Gibson + +If the guest programs a sufficiently large timeout value an integer +overflow can occur in i6300esb_restart_timer(). e.g. if the maximum +possible timer preload value of 0xfffff is programmed then we end up with +the calculation: + +timeout = get_ticks_per_sec() * (0xfffff << 15) / 33000000; + +get_ticks_per_sec() returns 1000000000 (10^9) giving: + + 10^9 * (0xfffff * 2^15) == 0x1dcd632329b000000 (65 bits) + +Obviously the division by 33MHz brings it back under 64-bits, but the +overflow has already occurred. + +Since signed integer overflow has undefined behaviour in C, in theory this +could be arbitrarily bad. In practice, the overflowed value wraps around +to something negative, causing the watchdog to immediately expire, killing +the guest, which is still fairly bad. + +The bug can be triggered by running a Linux guest, loading the i6300esb +driver with parameter "heartbeat=2046" and opening /dev/watchdog. The +watchdog will trigger as soon as the device is opened. + +This patch corrects the problem by using muldiv64(), which effectively +allows a 128-bit intermediate value between the multiplication and +division. + +Signed-off-by: David Gibson +Message-Id: <1427075508-12099-3-git-send-email-david@gibson.dropbear.id.au> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4bc7b4d56657ebf75b986ad46e959cf7232ff26a) + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1470244 +Upstream-status: 4bc7b4d56657ebf75b986ad46e959cf7232ff26a +Signed-off-by: Miroslav Rezanina +--- + hw/watchdog/wdt_i6300esb.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c +index a2ace52..be35034 100644 +--- a/hw/watchdog/wdt_i6300esb.c ++++ b/hw/watchdog/wdt_i6300esb.c +@@ -125,8 +125,14 @@ static void i6300esb_restart_timer(I6300State *d, int stage) + else + timeout <<= 5; + +- /* Get the timeout in units of ticks_per_sec. */ +- timeout = get_ticks_per_sec() * timeout / 33000000; ++ /* Get the timeout in units of ticks_per_sec. ++ * ++ * ticks_per_sec is typically 10^9 == 0x3B9ACA00 (30 bits), with ++ * 20 bits of user supplied preload, and 15 bits of scale, the ++ * multiply here can exceed 64-bits, before we divide by 33MHz, so ++ * we use a higher-precision intermediate result. ++ */ ++ timeout = muldiv64(get_ticks_per_sec(), timeout, 33000000); + + i6300esb_debug("stage %d, timeout %" PRIi64 "\n", d->stage, timeout); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i6300esb-fix-timer-overflow.patch b/SOURCES/kvm-i6300esb-fix-timer-overflow.patch new file mode 100644 index 0000000..9503902 --- /dev/null +++ b/SOURCES/kvm-i6300esb-fix-timer-overflow.patch @@ -0,0 +1,63 @@ +From 5918245d224a7a527052ed30af2627187777a282 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Wed, 1 Nov 2017 11:33:01 +0100 +Subject: [PATCH 6/7] i6300esb: fix timer overflow + +RH-Author: Richard Jones +Message-id: <1509535982-27927-3-git-send-email-rjones@redhat.com> +Patchwork-id: 77460 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 2/3] i6300esb: fix timer overflow +Bugzilla: 1470244 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Laurent Vivier + +We use muldiv64() to compute the time to wait: + + timeout = muldiv64(get_ticks_per_sec(), timeout, 33000000); + +but get_ticks_per_sec() is 10^9 (30 bit value) and timeout +is a 35 bit value. + +Whereas muldiv64 is: + + uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c) + +So we loose 3 bits of timeout. + +Swapping get_ticks_per_sec() and timeout fixes it. + +We can also replace it by a multiplication by 30 ns, +but this changes PCI clock frequency from 33MHz to 33.333333MHz +and we need to do this on all the QEMU PCI devices (later...) + +Signed-off-by: Laurent Vivier +Reviewed-by: David Gibson +Signed-off-by: Michael Tokarev +(cherry picked from commit fee562e9e41290a22623de83b673a8929ec5280d) + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1470244 +Upstream-status: fee562e9e41290a22623de83b673a8929ec5280d +Signed-off-by: Miroslav Rezanina +--- + hw/watchdog/wdt_i6300esb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c +index be35034..fa8e3b9 100644 +--- a/hw/watchdog/wdt_i6300esb.c ++++ b/hw/watchdog/wdt_i6300esb.c +@@ -132,7 +132,7 @@ static void i6300esb_restart_timer(I6300State *d, int stage) + * multiply here can exceed 64-bits, before we divide by 33MHz, so + * we use a higher-precision intermediate result. + */ +- timeout = muldiv64(get_ticks_per_sec(), timeout, 33000000); ++ timeout = muldiv64(timeout, get_ticks_per_sec(), 33000000); + + i6300esb_debug("stage %d, timeout %" PRIi64 "\n", d->stage, timeout); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i6300esb-remove-muldiv64.patch b/SOURCES/kvm-i6300esb-remove-muldiv64.patch new file mode 100644 index 0000000..a512b24 --- /dev/null +++ b/SOURCES/kvm-i6300esb-remove-muldiv64.patch @@ -0,0 +1,78 @@ +From a548a4b5d3a130ada6498669b4bf01bf47fe4560 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Wed, 1 Nov 2017 11:33:02 +0100 +Subject: [PATCH 7/7] i6300esb: remove muldiv64() + +RH-Author: Richard Jones +Message-id: <1509535982-27927-4-git-send-email-rjones@redhat.com> +Patchwork-id: 77463 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 3/3] i6300esb: remove muldiv64() +Bugzilla: 1470244 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Laurent Vivier + +Originally, timers were ticks based, and it made sense to +add ticks to current time to know when to trigger an alarm. + +But since commit: + +7447545 change all other clock references to use nanosecond resolution accessors + +All timers use nanoseconds and we need to convert ticks to nanoseconds, by +doing something like: + + y = muldiv64(x, get_ticks_per_sec(), PCI_FREQUENCY) + +where x is the number of device ticks and y the number of system ticks. + +y is used as nanoseconds in timer functions, +it works because 1 tick is 1 nanosecond. +(get_ticks_per_sec() is 10^9) + +But as PCI frequency is 33 MHz, we can also do: + + y = x * 30; /* 33 MHz PCI period is 30 ns */ + +Which is much more simple. + +This implies a 33.333333 MHz PCI frequency, +but this is correct. + +Signed-off-by: Laurent Vivier +(cherry picked from commit 9491e9bc019a365dfa9780f462984a0d052f4c0d) + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1470244 +Upstream-status: 9491e9bc019a365dfa9780f462984a0d052f4c0d +Signed-off-by: Miroslav Rezanina +--- + hw/watchdog/wdt_i6300esb.c | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c +index fa8e3b9..6dede4e 100644 +--- a/hw/watchdog/wdt_i6300esb.c ++++ b/hw/watchdog/wdt_i6300esb.c +@@ -125,14 +125,9 @@ static void i6300esb_restart_timer(I6300State *d, int stage) + else + timeout <<= 5; + +- /* Get the timeout in units of ticks_per_sec. +- * +- * ticks_per_sec is typically 10^9 == 0x3B9ACA00 (30 bits), with +- * 20 bits of user supplied preload, and 15 bits of scale, the +- * multiply here can exceed 64-bits, before we divide by 33MHz, so +- * we use a higher-precision intermediate result. +- */ +- timeout = muldiv64(timeout, get_ticks_per_sec(), 33000000); ++ /* Get the timeout in nanoseconds. */ ++ ++ timeout = timeout * 30; /* on a PCI bus, 1 tick is 30 ns*/ + + i6300esb_debug("stage %d, timeout %" PRIi64 "\n", d->stage, timeout); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-i8254-fix-out-of-bounds-memory-access-in-pit_ioport_.patch b/SOURCES/kvm-i8254-fix-out-of-bounds-memory-access-in-pit_ioport_.patch new file mode 100644 index 0000000..7ee00b4 --- /dev/null +++ b/SOURCES/kvm-i8254-fix-out-of-bounds-memory-access-in-pit_ioport_.patch @@ -0,0 +1,57 @@ +From 5ba6a1889f6da826b7a3b16381977806d8efe553 Mon Sep 17 00:00:00 2001 +From: Petr Matousek +Date: Thu, 25 Jun 2015 12:46:37 +0200 +Subject: [PATCH 01/10] i8254: fix out-of-bounds memory access in + pit_ioport_read() + +Message-id: <20150625124637.GJ18896@dhcp-25-225.brq.redhat.com> +Patchwork-id: 66478 +O-Subject: [RHEL-7.2 qemu-kvm PATCH] i8254: fix out-of-bounds memory access in pit_ioport_read() +Bugzilla: 1229646 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Michael S. Tsirkin + +Upstream: d4862a87e31a51de9eb260f25c9e99a75efe3235 + +Due converting PIO to the new memory read/write api we no longer provide +separate I/O region lenghts for read and write operations. As a result, +reading from PIT Mode/Command register will end with accessing +pit->channels with invalid index. + +Fix this by ignoring read from the Mode/Command register. + +This is CVE-2015-3214. + +Reported-by: Matt Tait +Fixes: 0505bcdec8228d8de39ab1a02644e71999e7c052 +Cc: qemu-stable@nongnu.org +Signed-off-by: Petr Matousek +Signed-off-by: Paolo Bonzini + +Signed-off-by: Petr Matousek +Signed-off-by: Miroslav Rezanina +--- + hw/timer/i8254.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hw/timer/i8254.c b/hw/timer/i8254.c +index 20c0c36..64c9f58 100644 +--- a/hw/timer/i8254.c ++++ b/hw/timer/i8254.c +@@ -187,6 +187,12 @@ static uint64_t pit_ioport_read(void *opaque, hwaddr addr, + PITChannelState *s; + + addr &= 3; ++ ++ if (addr == 3) { ++ /* Mode/Command register is write only, read is ignored */ ++ return 0; ++ } ++ + s = &pit->channels[addr]; + if (s->status_latched) { + s->status_latched = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ich9-APIs-for-pc-guest-info.patch b/SOURCES/kvm-ich9-APIs-for-pc-guest-info.patch new file mode 100644 index 0000000..bafe253 --- /dev/null +++ b/SOURCES/kvm-ich9-APIs-for-pc-guest-info.patch @@ -0,0 +1,211 @@ +From 3cb467f6950fee049415dfe54a5d0f498efaead8 Mon Sep 17 00:00:00 2001 +Message-Id: <3cb467f6950fee049415dfe54a5d0f498efaead8.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:52 +0100 +Subject: [PATCH 42/56] ich9: APIs for pc guest info + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-43-git-send-email-mst@redhat.com> +Patchwork-id: 56348 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 42/57] ich9: APIs for pc guest info +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +This adds APIs that will be used to fill in +acpi tables, implemented using QOM, +to various ich9 components. +Some information is still missing in QOM, +so we fall back on lookups by type instead. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 6f1426ab0fad715bccbad60e976ebf420442006c) +--- + include/hw/acpi/ich9.h | 2 ++ + include/hw/i386/ich9.h | 2 ++ + include/hw/pci-host/q35.h | 2 ++ + hw/acpi/ich9.c | 24 ++++++++++++++++++++++++ + hw/isa/lpc_ich9.c | 40 ++++++++++++++++++++++++++++++++++++++++ + hw/pci-host/q35.c | 10 ++++++++++ + 6 files changed, 80 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/acpi/ich9.c | 24 ++++++++++++++++++++++++ + hw/isa/lpc_ich9.c | 40 ++++++++++++++++++++++++++++++++++++++++ + hw/pci-host/q35.c | 10 ++++++++++ + include/hw/acpi/ich9.h | 2 ++ + include/hw/i386/ich9.h | 2 ++ + include/hw/pci-host/q35.h | 2 ++ + 6 files changed, 80 insertions(+) + +diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c +index 4a17f32..e747183 100644 +--- a/hw/acpi/ich9.c ++++ b/hw/acpi/ich9.c +@@ -24,6 +24,7 @@ + * GNU GPL, version 2 or (at your option) any later version. + */ + #include "hw/hw.h" ++#include "qapi/visitor.h" + #include "hw/i386/pc.h" + #include "hw/pci/pci.h" + #include "qemu/timer.h" +@@ -228,3 +229,26 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm, + pm->powerdown_notifier.notify = pm_powerdown_req; + qemu_register_powerdown_notifier(&pm->powerdown_notifier); + } ++ ++static void ich9_pm_get_gpe0_blk(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ ICH9LPCPMRegs *pm = opaque; ++ uint32_t value = pm->pm_io_base + ICH9_PMIO_GPE0_STS; ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp) ++{ ++ static const uint32_t gpe0_len = ICH9_PMIO_GPE0_LEN; ++ ++ object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE, ++ &pm->pm_io_base, errp); ++ object_property_add(obj, ACPI_PM_PROP_GPE0_BLK, "uint32", ++ ich9_pm_get_gpe0_blk, ++ NULL, NULL, pm, NULL); ++ object_property_add_uint32_ptr(obj, ACPI_PM_PROP_GPE0_BLK_LEN, ++ &gpe0_len, errp); ++} +diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c +index 4f834b9..7a5a92f 100644 +--- a/hw/isa/lpc_ich9.c ++++ b/hw/isa/lpc_ich9.c +@@ -29,6 +29,7 @@ + */ + #include "qemu-common.h" + #include "hw/hw.h" ++#include "qapi/visitor.h" + #include "qemu/range.h" + #include "hw/isa/isa.h" + #include "hw/sysbus.h" +@@ -524,6 +525,43 @@ static const MemoryRegionOps ich9_rst_cnt_ops = { + .endianness = DEVICE_LITTLE_ENDIAN + }; + ++Object *ich9_lpc_find(void) ++{ ++ bool ambig; ++ Object *o = object_resolve_path_type("", TYPE_ICH9_LPC_DEVICE, &ambig); ++ ++ if (ambig) { ++ return NULL; ++ } ++ return o; ++} ++ ++static void ich9_lpc_get_sci_int(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ ICH9LPCState *lpc = ICH9_LPC_DEVICE(obj); ++ uint32_t value = ich9_lpc_sci_irq(lpc); ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++static void ich9_lpc_add_properties(ICH9LPCState *lpc) ++{ ++ static const uint8_t acpi_enable_cmd = ICH9_APM_ACPI_ENABLE; ++ static const uint8_t acpi_disable_cmd = ICH9_APM_ACPI_DISABLE; ++ ++ object_property_add(OBJECT(lpc), ACPI_PM_PROP_SCI_INT, "uint32", ++ ich9_lpc_get_sci_int, ++ NULL, NULL, NULL, NULL); ++ object_property_add_uint8_ptr(OBJECT(lpc), ACPI_PM_PROP_ACPI_ENABLE_CMD, ++ &acpi_enable_cmd, NULL); ++ object_property_add_uint8_ptr(OBJECT(lpc), ACPI_PM_PROP_ACPI_DISABLE_CMD, ++ &acpi_disable_cmd, NULL); ++ ++ ich9_pm_add_properties(OBJECT(lpc), &lpc->pm, NULL); ++} ++ + static int ich9_lpc_initfn(PCIDevice *d) + { + ICH9LPCState *lpc = ICH9_LPC_DEVICE(d); +@@ -551,6 +589,8 @@ static int ich9_lpc_initfn(PCIDevice *d) + ICH9_RST_CNT_IOPORT, &lpc->rst_cnt_mem, + 1); + ++ ich9_lpc_add_properties(lpc); ++ + return 0; + } + +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 87691d1..befa9d4 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -378,6 +378,16 @@ static int mch_init(PCIDevice *d) + return 0; + } + ++uint64_t mch_mcfg_base(void) ++{ ++ bool ambiguous; ++ Object *o = object_resolve_path_type("", TYPE_MCH_PCI_DEVICE, &ambiguous); ++ if (!o) { ++ return 0; ++ } ++ return MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT; ++} ++ + static void mch_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); +diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h +index b1fe71f..82fcf9f 100644 +--- a/include/hw/acpi/ich9.h ++++ b/include/hw/acpi/ich9.h +@@ -49,4 +49,6 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm, + void ich9_pm_iospace_update(ICH9LPCPMRegs *pm, uint32_t pm_io_base); + extern const VMStateDescription vmstate_ich9_pm; + ++void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp); ++ + #endif /* HW_ACPI_ICH9_H */ +diff --git a/include/hw/i386/ich9.h b/include/hw/i386/ich9.h +index c5f637b..4a68b35 100644 +--- a/include/hw/i386/ich9.h ++++ b/include/hw/i386/ich9.h +@@ -66,6 +66,8 @@ typedef struct ICH9LPCState { + qemu_irq *ioapic; + } ICH9LPCState; + ++Object *ich9_lpc_find(void); ++ + #define Q35_MASK(bit, ms_bit, ls_bit) \ + ((uint##bit##_t)(((1ULL << ((ms_bit) + 1)) - 1) & ~((1ULL << ls_bit) - 1))) + +diff --git a/include/hw/pci-host/q35.h b/include/hw/pci-host/q35.h +index e660a40..856d39f 100644 +--- a/include/hw/pci-host/q35.h ++++ b/include/hw/pci-host/q35.h +@@ -150,4 +150,6 @@ typedef struct Q35PCIHost { + #define MCH_PCIE_DEV 1 + #define MCH_PCIE_FUNC 0 + ++uint64_t mch_mcfg_base(void); ++ + #endif /* HW_Q35_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-ich9-Document-why-cannot_instantiate_with_device_add.patch b/SOURCES/kvm-ich9-Document-why-cannot_instantiate_with_device_add.patch new file mode 100644 index 0000000..c934c45 --- /dev/null +++ b/SOURCES/kvm-ich9-Document-why-cannot_instantiate_with_device_add.patch @@ -0,0 +1,85 @@ +From 085e956d2dbbc280727760ffa620b8a22db1cb6e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:17 +0100 +Subject: [PATCH 41/81] ich9: Document why cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-13-git-send-email-kwolf@redhat.com> +Patchwork-id: 55538 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 12/17] ich9: Document why cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +An ICH9 southbridge contains several PCI devices, some of them with +multiple functions. We model each function as a separate qdev. Two +of them need some special wiring set up in pc_q35_init() to work: the +LPC controller at 00:1f.0, and the SMBus controller at 00:1f.3. + +Signed-off-by: Markus Armbruster +Reviewed-by: Peter Maydell +(cherry picked from pending upstream submission) +Signed-off-by: Kevin Wolf +--- + hw/i2c/smbus_ich9.c | 6 +++++- + hw/isa/lpc_ich9.c | 7 +++++-- + 2 files changed, 10 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i2c/smbus_ich9.c | 6 +++++- + hw/isa/lpc_ich9.c | 7 +++++-- + 2 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c +index c1ffa34..8d47eaf 100644 +--- a/hw/i2c/smbus_ich9.c ++++ b/hw/i2c/smbus_ich9.c +@@ -97,11 +97,15 @@ static void ich9_smb_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_ICH9_6; + k->revision = ICH9_A2_SMB_REVISION; + k->class_id = PCI_CLASS_SERIAL_SMBUS; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_ich9_smbus; + dc->desc = "ICH9 SMBUS Bridge"; + k->init = ich9_smbus_initfn; + k->config_write = ich9_smbus_write_config; ++ /* ++ * Reason: part of ICH9 southbridge, needs to be wired up by ++ * pc_q35_init() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + i2c_bus *ich9_smb_init(PCIBus *bus, int devfn, uint32_t smb_io_base) +diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c +index 580e9ac..4f834b9 100644 +--- a/hw/isa/lpc_ich9.c ++++ b/hw/isa/lpc_ich9.c +@@ -603,14 +603,17 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data) + dc->reset = ich9_lpc_reset; + k->init = ich9_lpc_initfn; + dc->vmsd = &vmstate_ich9_lpc; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + k->config_write = ich9_lpc_config_write; + dc->desc = "ICH9 LPC bridge"; + k->vendor_id = PCI_VENDOR_ID_INTEL; + k->device_id = PCI_DEVICE_ID_INTEL_ICH9_8; + k->revision = ICH9_A2_LPC_REVISION; + k->class_id = PCI_CLASS_BRIDGE_ISA; +- ++ /* ++ * Reason: part of ICH9 southbridge, needs to be wired up by ++ * pc_q35_init() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo ich9_lpc_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-ide-Add-wwn-support-to-IDE-ATAPI-drive.patch b/SOURCES/kvm-ide-Add-wwn-support-to-IDE-ATAPI-drive.patch new file mode 100644 index 0000000..8fe4e66 --- /dev/null +++ b/SOURCES/kvm-ide-Add-wwn-support-to-IDE-ATAPI-drive.patch @@ -0,0 +1,67 @@ +From e67d424de7c9f4ab359757195e8d3319c03b70a0 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 8 Sep 2014 22:34:25 +0200 +Subject: [PATCH 01/20] ide: Add wwn support to IDE-ATAPI drive + +Message-id: <1410215665-27240-2-git-send-email-jsnow@redhat.com> +Patchwork-id: 60913 +O-Subject: [RHEL7.1 qemu-kvm PATCH] ide: Add wwn support to IDE-ATAPI drive +Bugzilla: 1131316 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Although it is possible to specify the wwn +property for cdrom devices on the command line, +the underlying driver fails to relay this information +to the guest operating system via IDENTIFY. + +This is a simple patch to correct that. + +See ATA8-ACS, Table 22 parts 5, 6, and 9. + +Signed-off-by: John Snow +Reviewed-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c5fe97e359bf03db9a005433092f25d27d57398f) +Signed-off-by: John Snow +--- + hw/ide/core.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index a2947a9..98128fb 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -230,9 +230,23 @@ static void ide_atapi_identify(IDEState *s) + } + + put_le16(p + 80, 0x1e); /* support up to ATA/ATAPI-4 */ ++ if (s->wwn) { ++ put_le16(p + 84, (1 << 8)); /* supports WWN for words 108-111 */ ++ put_le16(p + 87, (1 << 8)); /* WWN enabled */ ++ } ++ + #ifdef USE_DMA_CDROM + put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */ + #endif ++ ++ if (s->wwn) { ++ /* LE 16-bit words 111-108 contain 64-bit World Wide Name */ ++ put_le16(p + 108, s->wwn >> 48); ++ put_le16(p + 109, s->wwn >> 32); ++ put_le16(p + 110, s->wwn >> 16); ++ put_le16(p + 111, s->wwn); ++ } ++ + memcpy(s->identify_data, p, sizeof(s->identify_data)); + s->identify_set = 1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-ide-Check-array-bounds-before-writing-to-io_buffer-C.patch b/SOURCES/kvm-ide-Check-array-bounds-before-writing-to-io_buffer-C.patch new file mode 100644 index 0000000..3adae68 --- /dev/null +++ b/SOURCES/kvm-ide-Check-array-bounds-before-writing-to-io_buffer-C.patch @@ -0,0 +1,86 @@ +From 03f2b3e5198471d80c3740450113643dff2109ce Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 16 Jul 2015 16:15:58 +0200 +Subject: [PATCH 1/3] ide: Check array bounds before writing to io_buffer + (CVE-2015-5154) + +Message-id: <1437056160-3284-2-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [RHEL/RHEV-7 qemu-kvm(-rhev) EMBARGOED PATCH 1/3] ide: + Check array bounds before writing to io_buffer (CVE-2015-5154) +Bugzilla: 1243690 +RH-Acked-by: Petr Matousek +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi + +If the end_transfer_func of a command is called because enough data has +been read or written for the current PIO transfer, and it fails to +correctly call the command completion functions, the DRQ bit in the +status register and s->end_transfer_func may remain set. This allows the +guest to access further bytes in s->io_buffer beyond s->data_end, and +eventually overflowing the io_buffer. + +One case where this currently happens is emulation of the ATAPI command +START STOP UNIT. + +This patch fixes the problem by adding explicit array bounds checks +before accessing the buffer instead of relying on end_transfer_func to +function correctly. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +--- + hw/ide/core.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index d9fdb03..29bda6b 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -1850,6 +1850,10 @@ void ide_data_writew(void *opaque, uint32_t addr, uint32_t val) + } + + p = s->data_ptr; ++ if (p + 2 > s->data_end) { ++ return; ++ } ++ + *(uint16_t *)p = le16_to_cpu(val); + p += 2; + s->data_ptr = p; +@@ -1871,6 +1875,10 @@ uint32_t ide_data_readw(void *opaque, uint32_t addr) + } + + p = s->data_ptr; ++ if (p + 2 > s->data_end) { ++ return 0; ++ } ++ + ret = cpu_to_le16(*(uint16_t *)p); + p += 2; + s->data_ptr = p; +@@ -1892,6 +1900,10 @@ void ide_data_writel(void *opaque, uint32_t addr, uint32_t val) + } + + p = s->data_ptr; ++ if (p + 4 > s->data_end) { ++ return; ++ } ++ + *(uint32_t *)p = le32_to_cpu(val); + p += 4; + s->data_ptr = p; +@@ -1913,6 +1925,10 @@ uint32_t ide_data_readl(void *opaque, uint32_t addr) + } + + p = s->data_ptr; ++ if (p + 4 > s->data_end) { ++ return 0; ++ } ++ + ret = cpu_to_le32(*(uint32_t *)p); + p += 4; + s->data_ptr = p; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-Check-validity-of-logical-block-size.patch b/SOURCES/kvm-ide-Check-validity-of-logical-block-size.patch new file mode 100644 index 0000000..f35def6 --- /dev/null +++ b/SOURCES/kvm-ide-Check-validity-of-logical-block-size.patch @@ -0,0 +1,51 @@ +From e6e48f3e4e46ec72d85cfa663425ec820d438f5b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 12 Aug 2015 14:18:40 +0200 +Subject: [PATCH 2/2] ide: Check validity of logical block size + +Message-id: <1439389120-20473-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 67519 +O-Subject: [RHEL-7.2 qemu-kvm PATCH] ide: Check validity of logical block size +Bugzilla: 1134670 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi + +Our IDE emulation can't handle logical block sizes other than 512. Check +for it. + +The original assumption was that other values would silently be ignored +(which is bad enough), but it's not quite true: The physical block size +is exposed in IDENTIFY DEVICE as a multiple of the logical block size. +Setting a logical block size therefore also corrupts the physical block +size (4096/4096 doesn't silently downgrade to 4096/512, but 512/512). + +Signed-off-by: Kevin Wolf +Reviewed-by: Markus Armbruster +Reviewed-by: John Snow +(cherry picked from commit d20051856cd2fa8f10fed2d2a0b2751de5f7b20d) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/ide/qdev.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c +index 1d84e15..44f36c3 100644 +--- a/hw/ide/qdev.c ++++ b/hw/ide/qdev.c +@@ -159,6 +159,11 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind) + return -1; + } + ++ if (dev->conf.logical_block_size != 512) { ++ error_report("logical_block_size must be 512 for IDE"); ++ return -1; ++ } ++ + blkconf_serial(&dev->conf, &dev->serial); + if (kind != IDE_CD + && blkconf_geometry(&dev->conf, &dev->chs_trans, 65536, 16, 255) < 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-Clear-DRQ-after-handling-all-expected-accesses.patch b/SOURCES/kvm-ide-Clear-DRQ-after-handling-all-expected-accesses.patch new file mode 100644 index 0000000..79c5b7e --- /dev/null +++ b/SOURCES/kvm-ide-Clear-DRQ-after-handling-all-expected-accesses.patch @@ -0,0 +1,80 @@ +From c887704e6425ee43d8b65e34dc0f57a4878231cf Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 16 Jul 2015 16:16:00 +0200 +Subject: [PATCH 3/3] ide: Clear DRQ after handling all expected accesses + +Message-id: <1437056160-3284-4-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [RHEL/RHEV-7 qemu-kvm(-rhev) EMBARGOED PATCH 3/3] ide: + Clear DRQ after handling all expected accesses +Bugzilla: 1243690 +RH-Acked-by: Petr Matousek +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi + +This is additional hardening against an end_transfer_func that fails to +clear the DRQ status bit. The bit must be unset as soon as the PIO +transfer has completed, so it's better to do this in a central place +instead of duplicating the code in all commands (and forgetting it in +some). + +Signed-off-by: Kevin Wolf +--- + hw/ide/core.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 29bda6b..5d40093 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -1857,8 +1857,10 @@ void ide_data_writew(void *opaque, uint32_t addr, uint32_t val) + *(uint16_t *)p = le16_to_cpu(val); + p += 2; + s->data_ptr = p; +- if (p >= s->data_end) ++ if (p >= s->data_end) { ++ s->status &= ~DRQ_STAT; + s->end_transfer_func(s); ++ } + } + + uint32_t ide_data_readw(void *opaque, uint32_t addr) +@@ -1882,8 +1884,10 @@ uint32_t ide_data_readw(void *opaque, uint32_t addr) + ret = cpu_to_le16(*(uint16_t *)p); + p += 2; + s->data_ptr = p; +- if (p >= s->data_end) ++ if (p >= s->data_end) { ++ s->status &= ~DRQ_STAT; + s->end_transfer_func(s); ++ } + return ret; + } + +@@ -1907,8 +1911,10 @@ void ide_data_writel(void *opaque, uint32_t addr, uint32_t val) + *(uint32_t *)p = le32_to_cpu(val); + p += 4; + s->data_ptr = p; +- if (p >= s->data_end) ++ if (p >= s->data_end) { ++ s->status &= ~DRQ_STAT; + s->end_transfer_func(s); ++ } + } + + uint32_t ide_data_readl(void *opaque, uint32_t addr) +@@ -1932,8 +1938,10 @@ uint32_t ide_data_readl(void *opaque, uint32_t addr) + ret = cpu_to_le32(*(uint32_t *)p); + p += 4; + s->data_ptr = p; +- if (p >= s->data_end) ++ if (p >= s->data_end) { ++ s->status &= ~DRQ_STAT; + s->end_transfer_func(s); ++ } + return ret; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-Correct-handling-of-malformed-short-PRDTs.patch b/SOURCES/kvm-ide-Correct-handling-of-malformed-short-PRDTs.patch new file mode 100644 index 0000000..a766a1f --- /dev/null +++ b/SOURCES/kvm-ide-Correct-handling-of-malformed-short-PRDTs.patch @@ -0,0 +1,333 @@ +From 6a5797ecb4e557c746356a2f8636cceafa787851 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Fri, 26 Jun 2015 21:52:47 +0200 +Subject: [PATCH 2/2] ide: Correct handling of malformed/short PRDTs + +Message-id: <1435355567-29641-3-git-send-email-jsnow@redhat.com> +Patchwork-id: 66536 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] ide: Correct handling of malformed/short PRDTs +Bugzilla: 1205100 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Juan Quintela +RH-Acked-by: Stefan Hajnoczi + +This impacts both BMDMA and AHCI HBA interfaces for IDE. +Currently, we confuse the difference between a PRDT having +"0 bytes" and a PRDT having "0 complete sectors." + +When we receive an incomplete sector, inconsistent error checking +leads to an infinite loop wherein the call succeeds, but it +didn't give us enough bytes -- leading us to re-call the +DMA chain over and over again. This leads to, in the BMDMA case, +leaked memory for short PRDTs, and infinite loops and resource +usage in the AHCI case. + +The .prepare_buf() callback is reworked to return the number of +bytes that it successfully prepared. 0 is a valid, non-error +answer that means the table was empty and described no bytes. +-1 indicates an error. + +Our current implementation uses the io_buffer in IDEState to +ultimately describe the size of a prepared scatter-gather list. +Even though the AHCI PRDT/SGList can be as large as 256GiB, the +AHCI command header limits transactions to just 4GiB. ATA8-ACS3, +however, defines the largest transaction to be an LBA48 command +that transfers 65,536 sectors. With a 512 byte sector size, this +is just 32MiB. + +Since our current state structures use the int type to describe +the size of the buffer, and this state is migrated as int32, we +are limited to describing 2GiB buffer sizes unless we change the +migration protocol. + +For this reason, this patch begins to unify the assertions in the +IDE pathways that the scatter-gather list provided by either the +AHCI PRDT or the PCI BMDMA PRDs can only describe, at a maximum, +2GiB. This should be resilient enough unless we need a sector +size that exceeds 32KiB. + +Further, the likelihood of any guest operating system actually +attempting to transfer this much data in a single operation is +very slim. + +To this end, the IDEState variables have been updated to more +explicitly clarify our maximum supported size. Callers to the +prepare_buf callback have been reworked to understand the new +return code, and all versions of the prepare_buf callback have +been adjusted accordingly. + +Lastly, the ahci_populate_sglist helper, relied upon by the +AHCI implementation of .prepare_buf() as well as the PCI +implementation of the callback have had overflow assertions +added to help make clear the reasonings behind the various +type changes. + +[Added %d -> %"PRId64" fix John sent because off_pos changed from int to +int64_t. +--Stefan] + +Signed-off-by: John Snow +Reviewed-by: Paolo Bonzini +Message-id: 1414785819-26209-4-git-send-email-jsnow@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3251bdcf1c67427d964517053c3d185b46e618e8) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/ide/ahci.c: Conflicts arising from not backporting bef1301ac + ahci: unify sglist preparation + hw/ide/core.c: Conflicts from not backporting IDEDMAOps changes, + including 9898586d8 and dependencies. + hw/ide/internal.h: Same as hw/ide/core.c. + hw/ide/macio.c: Conflicts from not backporting (many) IDEDMAOps + refactorings, 4aa3510f6 and others. + hw/ide/pci.c: Conflicts arising form not backporting f6c11d564 + ide: Introduce abstract QOM type for PCIIDEState + +Signed-off-by: John Snow +--- + hw/ide/ahci.c | 33 ++++++++++++++++++++++++++------- + hw/ide/core.c | 10 ++++++++-- + hw/ide/internal.h | 13 +++++++------ + hw/ide/pci.c | 26 +++++++++++++++++++++----- + 4 files changed, 62 insertions(+), 20 deletions(-) + +diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c +index 7f3927a..e951ba0 100644 +--- a/hw/ide/ahci.c ++++ b/hw/ide/ahci.c +@@ -640,7 +640,8 @@ static int prdt_tbl_entry_size(const AHCI_SG *tbl) + return (le32_to_cpu(tbl->flags_size) & AHCI_PRDT_SIZE_MASK) + 1; + } + +-static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) ++static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, ++ int32_t offset) + { + AHCICmdHdr *cmd = ad->cur_cmd; + uint32_t opts = le32_to_cpu(cmd->opts); +@@ -651,11 +652,19 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) + uint8_t *prdt; + int i; + int r = 0; +- int sum = 0; ++ uint64_t sum = 0; + int off_idx = -1; +- int off_pos = -1; ++ int64_t off_pos = -1; + int tbl_entry_size; + ++ /* ++ * Note: AHCI PRDT can describe up to 256GiB. SATA/ATA only support ++ * transactions of up to 32MiB as of ATA8-ACS3 rev 1b, assuming a ++ * 512 byte sector size. We limit the PRDT in this implementation to ++ * a reasonably large 2GiB, which can accommodate the maximum transfer ++ * request for sector sizes up to 32K. ++ */ ++ + if (!sglist_alloc_hint) { + DPRINTF(ad->port_no, "no sg list given by guest: 0x%08x\n", opts); + return -1; +@@ -690,7 +699,7 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) + } + if ((off_idx == -1) || (off_pos < 0) || (off_pos > tbl_entry_size)) { + DPRINTF(ad->port_no, "%s: Incorrect offset! " +- "off_idx: %d, off_pos: %d\n", ++ "off_idx: %d, off_pos: %"PRId64"\n", + __func__, off_idx, off_pos); + r = -1; + goto out; +@@ -704,6 +713,13 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist, int offset) + /* flags_size is zero-based */ + qemu_sglist_add(sglist, le64_to_cpu(tbl[i].addr), + prdt_tbl_entry_size(&tbl[i])); ++ if (sglist->size > INT32_MAX) { ++ error_report("AHCI Physical Region Descriptor Table describes " ++ "more than 2 GiB.\n"); ++ qemu_sglist_destroy(sglist); ++ r = -1; ++ goto out; ++ } + } + } + +@@ -1047,16 +1063,19 @@ static void ahci_start_dma(IDEDMA *dma, IDEState *s, + dma_cb(s, 0); + } + +-static int ahci_dma_prepare_buf(IDEDMA *dma, int is_write) ++static int32_t ahci_dma_prepare_buf(IDEDMA *dma, int is_write) + { + AHCIDevice *ad = DO_UPCAST(AHCIDevice, dma, dma); + IDEState *s = &ad->port.ifs[0]; + +- ahci_populate_sglist(ad, &s->sg, 0); ++ if (ahci_populate_sglist(ad, &s->sg, 0) == -1) { ++ DPRINTF(ad->port_no, "ahci_dma_prepare_buf failed.\n"); ++ return -1; ++ } + s->io_buffer_size = s->sg.size; + + DPRINTF(ad->port_no, "len=%#x\n", s->io_buffer_size); +- return s->io_buffer_size != 0; ++ return s->io_buffer_size; + } + + static int ahci_dma_rw_buf(IDEDMA *dma, int is_write) +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 9a22425..d9fdb03 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -690,10 +690,11 @@ void ide_dma_cb(void *opaque, int ret) + n = s->nsector; + s->io_buffer_index = 0; + s->io_buffer_size = n * 512; +- if (s->bus->dma->ops->prepare_buf(s->bus->dma, ide_cmd_is_read(s)) == 0) { ++ if (s->bus->dma->ops->prepare_buf(s->bus->dma, ide_cmd_is_read(s)) < 512) { + /* The PRDs were too short. Reset the Active bit, but don't raise an + * interrupt. */ + s->status = READY_STAT | SEEK_STAT; ++ dma_buf_commit(s); + goto eot; + } + +@@ -2131,6 +2132,11 @@ static int ide_nop_int(IDEDMA *dma, int x) + return 0; + } + ++static int32_t ide_nop_int32(IDEDMA *dma, int x) ++{ ++ return 0; ++} ++ + static void ide_nop_restart(void *opaque, int x, RunState y) + { + } +@@ -2138,7 +2144,7 @@ static void ide_nop_restart(void *opaque, int x, RunState y) + static const IDEDMAOps ide_dma_nop_ops = { + .start_dma = ide_nop_start, + .start_transfer = ide_nop, +- .prepare_buf = ide_nop_int, ++ .prepare_buf = ide_nop_int32, + .rw_buf = ide_nop_int, + .set_unit = ide_nop_int, + .add_status = ide_nop_int, +diff --git a/hw/ide/internal.h b/hw/ide/internal.h +index 0a2d6bc..f8fb564 100644 +--- a/hw/ide/internal.h ++++ b/hw/ide/internal.h +@@ -323,6 +323,7 @@ typedef void EndTransferFunc(IDEState *); + typedef void DMAStartFunc(IDEDMA *, IDEState *, BlockDriverCompletionFunc *); + typedef int DMAFunc(IDEDMA *); + typedef int DMAIntFunc(IDEDMA *, int); ++typedef int32_t DMAInt32Func(IDEDMA *, int); + typedef void DMARestartFunc(void *, int, RunState); + + struct unreported_events { +@@ -384,7 +385,7 @@ struct IDEState { + uint8_t cdrom_changed; + int packet_transfer_size; + int elementary_transfer_size; +- int io_buffer_index; ++ int32_t io_buffer_index; + int lba; + int cd_sector_size; + int atapi_dma; /* true if dma is requested for the packet cmd */ +@@ -393,8 +394,8 @@ struct IDEState { + struct iovec iov; + QEMUIOVector qiov; + /* ATA DMA state */ +- int io_buffer_offset; +- int io_buffer_size; ++ int32_t io_buffer_offset; ++ int32_t io_buffer_size; + QEMUSGList sg; + /* PIO transfer handling */ + int req_nb_sectors; /* number of sectors per interrupt */ +@@ -404,8 +405,8 @@ struct IDEState { + uint8_t *io_buffer; + /* PIO save/restore */ + int32_t io_buffer_total_len; +- int cur_io_buffer_offset; +- int cur_io_buffer_len; ++ int32_t cur_io_buffer_offset; ++ int32_t cur_io_buffer_len; + uint8_t end_transfer_fn_idx; + QEMUTimer *sector_write_timer; /* only used for win2k install hack */ + uint32_t irq_count; /* counts IRQs when using win2k install hack */ +@@ -429,7 +430,7 @@ struct IDEState { + struct IDEDMAOps { + DMAStartFunc *start_dma; + DMAFunc *start_transfer; +- DMAIntFunc *prepare_buf; ++ DMAInt32Func *prepare_buf; + DMAIntFunc *rw_buf; + DMAIntFunc *set_unit; + DMAIntFunc *add_status; +diff --git a/hw/ide/pci.c b/hw/ide/pci.c +index cf7acb0..03b2081 100644 +--- a/hw/ide/pci.c ++++ b/hw/ide/pci.c +@@ -28,6 +28,7 @@ + #include + #include "block/block.h" + #include "sysemu/dma.h" ++#include "qemu/error-report.h" + + #include + +@@ -51,8 +52,11 @@ static void bmdma_start_dma(IDEDMA *dma, IDEState *s, + } + } + +-/* return 0 if buffer completed */ +-static int bmdma_prepare_buf(IDEDMA *dma, int is_write) ++/** ++ * Return the number of bytes successfully prepared. ++ * -1 on error. ++ */ ++static int32_t bmdma_prepare_buf(IDEDMA *dma, int is_write) + { + BMDMAState *bm = DO_UPCAST(BMDMAState, dma, dma); + IDEState *s = bmdma_active_if(bm); +@@ -69,8 +73,9 @@ static int bmdma_prepare_buf(IDEDMA *dma, int is_write) + if (bm->cur_prd_len == 0) { + /* end of table (with a fail safe of one page) */ + if (bm->cur_prd_last || +- (bm->cur_addr - bm->addr) >= BMDMA_PAGE_SIZE) +- return s->io_buffer_size != 0; ++ (bm->cur_addr - bm->addr) >= BMDMA_PAGE_SIZE) { ++ return s->io_buffer_size; ++ } + pci_dma_read(&bm->pci_dev->dev, bm->cur_addr, &prd, 8); + bm->cur_addr += 8; + prd.addr = le32_to_cpu(prd.addr); +@@ -85,12 +90,23 @@ static int bmdma_prepare_buf(IDEDMA *dma, int is_write) + l = bm->cur_prd_len; + if (l > 0) { + qemu_sglist_add(&s->sg, bm->cur_prd_addr, l); ++ ++ /* Note: We limit the max transfer to be 2GiB. ++ * This should accommodate the largest ATA transaction ++ * for LBA48 (65,536 sectors) and 32K sector sizes. */ ++ if (s->sg.size > INT32_MAX) { ++ error_report("IDE: sglist describes more than 2GiB.\n"); ++ break; ++ } + bm->cur_prd_addr += l; + bm->cur_prd_len -= l; + s->io_buffer_size += l; + } + } +- return 1; ++ ++ qemu_sglist_destroy(&s->sg); ++ s->io_buffer_size = 0; ++ return -1; + } + + /* return 0 if buffer completed */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-Correct-improper-smart-self-test-counter-reset-i.patch b/SOURCES/kvm-ide-Correct-improper-smart-self-test-counter-reset-i.patch new file mode 100644 index 0000000..a8edf87 --- /dev/null +++ b/SOURCES/kvm-ide-Correct-improper-smart-self-test-counter-reset-i.patch @@ -0,0 +1,65 @@ +From 1958d41c7db1f415f84cb3ef316708ca83e6e72f Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 25 Apr 2014 17:54:05 +0200 +Subject: [PATCH 12/12] ide: Correct improper smart self test counter reset in ide core. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1398448445-17245-2-git-send-email-armbru@redhat.com> +Patchwork-id: 58568 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] ide: Correct improper smart self test counter reset in ide core. +Bugzilla: 1087980 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +From: Benoît Canet + +The SMART self test counter was incorrectly being reset to zero, +not 1. This had the effect that on every 21st SMART EXECUTE OFFLINE: + * We would write off the beginning of a dynamically allocated buffer + * We forgot the SMART history +Fix this. + +Signed-off-by: Benoit Canet +Message-id: 1397336390-24664-1-git-send-email-benoit.canet@irqsave.net +Reviewed-by: Markus Armbruster +Cc: qemu-stable@nongnu.org +Acked-by: Kevin Wolf +[PMM: tweaked commit message as per suggestions from Markus] +Signed-off-by: Peter Maydell +(cherry picked from commit 940973ae0b45c9b6817bab8e4cf4df99a9ef83d7) + +Conflicts: + hw/ide/core.c + +CVE-2014-2894 +Signed-off-by: Markus Armbruster +--- + hw/ide/core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index c172c71..0313250 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -1617,7 +1617,7 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val) + case 2: /* extended self test */ + s->smart_selftest_count++; + if(s->smart_selftest_count > 21) +- s->smart_selftest_count = 0; ++ s->smart_selftest_count = 1; + n = 2 + (s->smart_selftest_count - 1) * 24; + s->smart_selftest_data[n] = s->sector; + s->smart_selftest_data[n+1] = 0x00; /* OK and finished */ +-- +1.7.1 + diff --git a/SOURCES/kvm-ide-Fix-segfault-when-flushing-a-device-that-doesn-t.patch b/SOURCES/kvm-ide-Fix-segfault-when-flushing-a-device-that-doesn-t.patch new file mode 100644 index 0000000..904f973 --- /dev/null +++ b/SOURCES/kvm-ide-Fix-segfault-when-flushing-a-device-that-doesn-t.patch @@ -0,0 +1,74 @@ +From 3272771d5dd899876eb8d7ea3af3ed1d2b2472d2 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 10 Sep 2014 11:06:09 +0200 +Subject: [PATCH 10/12] ide: Fix segfault when flushing a device that doesn't exist + +Message-id: <1410347169-4368-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 60955 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 3/3] ide: Fix segfault when flushing a device that doesn't exist +Bugzilla: 1123372 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f7f3ff1da0c451befc8d32f977f9c352d1303f40) +Signed-off-by: Kevin Wolf + +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 4 +++- + tests/ide-test.c | 14 ++++++++++++++ + 2 files changed, 17 insertions(+), 1 deletions(-) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 0313250..a2947a9 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -810,7 +810,9 @@ static void ide_flush_cb(void *opaque, int ret) + } + } + +- bdrv_acct_done(s->bs, &s->acct); ++ if (s->bs) { ++ bdrv_acct_done(s->bs, &s->acct); ++ } + s->status = READY_STAT | SEEK_STAT; + ide_async_cmd_done(s); + ide_set_irq(s->bus); +diff --git a/tests/ide-test.c b/tests/ide-test.c +index 739d2bf..51f9239 100644 +--- a/tests/ide-test.c ++++ b/tests/ide-test.c +@@ -462,6 +462,19 @@ static void test_flush(void) + ide_test_quit(); + } + ++static void test_flush_nodev(void) ++{ ++ ide_test_start(""); ++ ++ /* FLUSH CACHE command on device 0*/ ++ outb(IDE_BASE + reg_device, 0); ++ outb(IDE_BASE + reg_command, CMD_FLUSH_CACHE); ++ ++ /* Just testing that qemu doesn't crash... */ ++ ++ ide_test_quit(); ++} ++ + int main(int argc, char **argv) + { + const char *arch = qtest_get_arch(); +@@ -493,6 +506,7 @@ int main(int argc, char **argv) + qtest_add_func("/ide/bmdma/teardown", test_bmdma_teardown); + + qtest_add_func("/ide/flush", test_flush); ++ qtest_add_func("/ide/flush_nodev", test_flush_nodev); + + ret = g_test_run(); + +-- +1.7.1 + diff --git a/SOURCES/kvm-ide-Treat-read-write-beyond-end-as-invalid.patch b/SOURCES/kvm-ide-Treat-read-write-beyond-end-as-invalid.patch new file mode 100644 index 0000000..a6abb27 --- /dev/null +++ b/SOURCES/kvm-ide-Treat-read-write-beyond-end-as-invalid.patch @@ -0,0 +1,94 @@ +From 7262d3c7280343601ab3b0be0d469ffb867b86d7 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 31 Oct 2014 16:29:55 +0100 +Subject: [PATCH 18/19] ide: Treat read/write beyond end as invalid + +Message-id: <1414772996-17272-5-git-send-email-armbru@redhat.com> +Patchwork-id: 62015 +O-Subject: [PATCH RHEL-7.1 qemu-kvm 4/5] ide: Treat read/write beyond end as invalid +Bugzilla: 1085232 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +The block layer fails such reads and writes just fine. However, they +then get treated like valid operations that fail: the error action +gets executed. Unwanted; reporting the error to the guest is the only +sensible action. + +Reject them before passing them to the block layer. This bypasses the +error action and I/O accounting. Not quite correct for DMA, because +DMA can fail after some success, and when that happens, the part that +succeeded isn't counted. Tolerable, because I/O accounting is an +inconsistent mess anyway. + +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +(cherry picked from commit 58ac321135af890b503ebe56d0d00e184779918f) +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 98128fb..4c36f52 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -513,6 +513,18 @@ static void ide_rw_error(IDEState *s) { + ide_set_irq(s->bus); + } + ++static bool ide_sect_range_ok(IDEState *s, ++ uint64_t sector, uint64_t nb_sectors) ++{ ++ uint64_t total_sectors; ++ ++ bdrv_get_geometry(s->bs, &total_sectors); ++ if (sector > total_sectors || nb_sectors > total_sectors - sector) { ++ return false; ++ } ++ return true; ++} ++ + static void ide_sector_read_cb(void *opaque, int ret) + { + IDEState *s = opaque; +@@ -568,6 +580,11 @@ void ide_sector_read(IDEState *s) + printf("sector=%" PRId64 "\n", sector_num); + #endif + ++ if (!ide_sect_range_ok(s, sector_num, n)) { ++ ide_rw_error(s); ++ return; ++ } ++ + s->iov.iov_base = s->io_buffer; + s->iov.iov_len = n * BDRV_SECTOR_SIZE; + qemu_iovec_init_external(&s->qiov, &s->iov, 1); +@@ -685,6 +702,12 @@ void ide_dma_cb(void *opaque, int ret) + sector_num, n, s->dma_cmd); + #endif + ++ if (!ide_sect_range_ok(s, sector_num, n)) { ++ dma_buf_commit(s); ++ ide_dma_error(s); ++ return; ++ } ++ + switch (s->dma_cmd) { + case IDE_DMA_READ: + s->bus->dma->aiocb = dma_bdrv_read(s->bs, &s->sg, sector_num, +@@ -804,6 +827,11 @@ void ide_sector_write(IDEState *s) + n = s->req_nb_sectors; + } + ++ if (!ide_sect_range_ok(s, sector_num, n)) { ++ ide_rw_error(s); ++ return; ++ } ++ + s->iov.iov_base = s->io_buffer; + s->iov.iov_len = n * BDRV_SECTOR_SIZE; + qemu_iovec_init_external(&s->qiov, &s->iov, 1); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-atapi-Fix-START-STOP-UNIT-command-completion.patch b/SOURCES/kvm-ide-atapi-Fix-START-STOP-UNIT-command-completion.patch new file mode 100644 index 0000000..d690082 --- /dev/null +++ b/SOURCES/kvm-ide-atapi-Fix-START-STOP-UNIT-command-completion.patch @@ -0,0 +1,37 @@ +From cbc1dc59790015e0e86853ee523fed921ef6fe4e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 16 Jul 2015 16:15:59 +0200 +Subject: [PATCH 2/3] ide/atapi: Fix START STOP UNIT command completion + +Message-id: <1437056160-3284-3-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [RHEL/RHEV-7 qemu-kvm(-rhev) EMBARGOED PATCH 2/3] + ide/atapi: Fix START STOP UNIT command completion +Bugzilla: 1243690 +RH-Acked-by: Petr Matousek +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi + +The command must be completed on all code paths. START STOP UNIT with +pwrcnd set should succeed without doing anything. + +Signed-off-by: Kevin Wolf +--- + hw/ide/atapi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c +index 46a2c26..a411748 100644 +--- a/hw/ide/atapi.c ++++ b/hw/ide/atapi.c +@@ -896,6 +896,7 @@ static void cmd_start_stop_unit(IDEState *s, uint8_t* buf) + + if (pwrcnd) { + /* eject/load only happens for power condition == 0 */ ++ ide_atapi_cmd_ok(s); + return; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-avoid-referencing-NULL-dev-in-rotational-rate-se.patch b/SOURCES/kvm-ide-avoid-referencing-NULL-dev-in-rotational-rate-se.patch new file mode 100644 index 0000000..68e6046 --- /dev/null +++ b/SOURCES/kvm-ide-avoid-referencing-NULL-dev-in-rotational-rate-se.patch @@ -0,0 +1,49 @@ +From a967318ce21d68d30afbb02bcd8b43dd7157916d Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Thu, 2 Aug 2018 15:53:36 +0200 +Subject: [PATCH 3/4] ide: avoid referencing NULL dev in rotational rate + setting + +RH-Author: John Snow +Message-id: <20180802155336.10347-4-jsnow@redhat.com> +Patchwork-id: 81611 +O-Subject: [RHEL-7.6 qemu-kvm PATCH 3/3] ide: avoid referencing NULL dev in rotational rate setting +Bugzilla: 1583807 +RH-Acked-by: Daniel P. Berrange +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Thomas Huth + +From: "Daniel P. Berrange" + +The 'dev' variable can be NULL when the guest OS calls identify on an IDE +unit that does not have a drive attached to it. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Stefan Hajnoczi +Message-id: 20171020091403.1479-1-berrange@redhat.com +Signed-off-by: John Snow +(cherry picked from commit 96f43c2b0a663f4789b51ed97297163321e7ba5e) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index aea2ff9..be6e0c9 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -179,7 +179,9 @@ static void ide_identify(IDEState *s) + if (dev && dev->conf.discard_granularity) { + put_le16(p + 169, 1); /* TRIM support */ + } +- put_le16(p + 217, dev->rotation_rate); /* Nominal media rotation rate */ ++ if (dev) { ++ put_le16(p + 217, dev->rotation_rate); /* Nominal media rotation rate */ ++ } + + memcpy(s->identify_data, p, sizeof(s->identify_data)); + s->identify_set = 1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-fix-halted-IO-segfault-at-reset.patch b/SOURCES/kvm-ide-fix-halted-IO-segfault-at-reset.patch new file mode 100644 index 0000000..1fe27a1 --- /dev/null +++ b/SOURCES/kvm-ide-fix-halted-IO-segfault-at-reset.patch @@ -0,0 +1,54 @@ +From 4fbb16d71e7e9a893c665926642122b165c63425 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Wed, 26 Apr 2017 23:49:07 +0200 +Subject: [PATCH] ide: fix halted IO segfault at reset + +RH-Author: John Snow +Message-id: <20170426234907.21151-2-jsnow@redhat.com> +Patchwork-id: 74905 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 1/1] ide: fix halted IO segfault at reset +Bugzilla: 1299875 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster + +If one attempts to perform a system_reset after a failed IO request +that causes the VM to enter a paused state, QEMU will segfault trying +to free up the pending IO requests. + +These requests have already been completed and freed, though, so all +we need to do is NULL them before we enter the paused state. + +Existing AHCI tests verify that halted requests are still resumed +successfully after a STOP event. + +Analyzed-by: Laszlo Ersek +Reviewed-by: Laszlo Ersek +Signed-off-by: John Snow +Message-id: 1469635201-11918-2-git-send-email-jsnow@redhat.com +Signed-off-by: John Snow +(cherry picked from commit 87ac25fd1fed05a30a93d27dbeb2a4c4b83ec95f) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/ide/core.c: Context and formatting of handle_rw_error +--- + hw/ide/core.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 5d40093..5c33735 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -658,6 +658,7 @@ void ide_dma_cb(void *opaque, int ret) + op |= BM_STATUS_RETRY_TRIM; + + if (ide_handle_rw_error(s, -ret, op)) { ++ s->bus->dma->aiocb = NULL; + return; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-only-constrain-read-write-requests-to-drive-size.patch b/SOURCES/kvm-ide-only-constrain-read-write-requests-to-drive-size.patch new file mode 100644 index 0000000..1dfe671 --- /dev/null +++ b/SOURCES/kvm-ide-only-constrain-read-write-requests-to-drive-size.patch @@ -0,0 +1,47 @@ +From 466d66e193341115f2a48e27997d61d8fddc811e Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 31 Oct 2014 16:29:56 +0100 +Subject: [PATCH 19/19] ide: only constrain read/write requests to drive size, + not other types + +Message-id: <1414772996-17272-6-git-send-email-armbru@redhat.com> +Patchwork-id: 62017 +O-Subject: [PATCH RHEL-7.1 qemu-kvm 5/5] ide: only constrain read/write requests to drive size, not other types +Bugzilla: 1085232 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +From: Michael Tokarev + +Commit 58ac321135a introduced a check to ide dma processing which +constrains all requests to drive size. However, apparently, some +valid requests (like TRIM) does not fit in this constraint, and +fails in 2.1. So check the range only for reads and writes. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Michael Tokarev +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d66168ed687325aa6d338ce3a3cff18ce3098ed6) +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 4c36f52..24a1708 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -702,7 +702,8 @@ void ide_dma_cb(void *opaque, int ret) + sector_num, n, s->dma_cmd); + #endif + +- if (!ide_sect_range_ok(s, sector_num, n)) { ++ if ((s->dma_cmd == IDE_DMA_READ || s->dma_cmd == IDE_DMA_WRITE) && ++ !ide_sect_range_ok(s, sector_num, n)) { + dma_buf_commit(s); + ide_dma_error(s); + return; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-support-reporting-of-rotation-rate.patch b/SOURCES/kvm-ide-support-reporting-of-rotation-rate.patch new file mode 100644 index 0000000..0ccf067 --- /dev/null +++ b/SOURCES/kvm-ide-support-reporting-of-rotation-rate.patch @@ -0,0 +1,89 @@ +From f4030862f7ac7e6217415e3ca6be6a4151fa8208 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Thu, 2 Aug 2018 15:53:35 +0200 +Subject: [PATCH 2/4] ide: support reporting of rotation rate + +RH-Author: John Snow +Message-id: <20180802155336.10347-3-jsnow@redhat.com> +Patchwork-id: 81614 +O-Subject: [RHEL-7.6 qemu-kvm PATCH 2/3] ide: support reporting of rotation rate +Bugzilla: 1583807 +RH-Acked-by: Daniel P. Berrange +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Thomas Huth + +From: "Daniel P. Berrange" + +The Linux kernel will query the ATA IDENTITY DEVICE data, word 217 +to determine the rotations per minute of the disk. If this has +the value 1, it is taken to be an SSD and so Linux sets the +'rotational' flag to 0 for the I/O queue and will stop using that +disk as a source of random entropy. Other operating systems may +also take into account rotation rate when setting up default +behaviour. + +Mgmt apps should be able to set the rotation rate for virtualized +block devices, based on characteristics of the host storage in use, +so that the guest OS gets sensible behaviour out of the box. This +patch thus adds a 'rotation-rate' parameter for 'ide-hd' device +types. + +Signed-off-by: Daniel P. Berrange +Message-Id: <20171004114008.14849-3-berrange@redhat.com> +Reviewed-by: John Snow +Signed-off-by: Paolo Bonzini +(cherry picked from commit 3b19f4506901ecce25ff36cf62353a2b4bfe4f2b) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + hw/ide/core.c | 1 + + hw/ide/internal.h | 8 ++++++++ + hw/ide/qdev.c | 1 + + 3 files changed, 10 insertions(+) + +diff --git a/hw/ide/core.c b/hw/ide/core.c +index 5c33735..aea2ff9 100644 +--- a/hw/ide/core.c ++++ b/hw/ide/core.c +@@ -179,6 +179,7 @@ static void ide_identify(IDEState *s) + if (dev && dev->conf.discard_granularity) { + put_le16(p + 169, 1); /* TRIM support */ + } ++ put_le16(p + 217, dev->rotation_rate); /* Nominal media rotation rate */ + + memcpy(s->identify_data, p, sizeof(s->identify_data)); + s->identify_set = 1; +diff --git a/hw/ide/internal.h b/hw/ide/internal.h +index f8fb564..1062f85 100644 +--- a/hw/ide/internal.h ++++ b/hw/ide/internal.h +@@ -484,6 +484,14 @@ struct IDEDevice { + char *serial; + char *model; + uint64_t wwn; ++ /* ++ * 0x0000 - rotation rate not reported ++ * 0x0001 - non-rotating medium (SSD) ++ * 0x0002-0x0400 - reserved ++ * 0x0401-0xffe - rotations per minute ++ * 0xffff - reserved ++ */ ++ uint16_t rotation_rate; + }; + + #define BM_STATUS_DMAING 0x01 +diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c +index 44f36c3..4ba2c63 100644 +--- a/hw/ide/qdev.c ++++ b/hw/ide/qdev.c +@@ -219,6 +219,7 @@ static Property ide_hd_properties[] = { + DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf), + DEFINE_PROP_BIOS_CHS_TRANS("bios-chs-trans", + IDEDrive, dev.chs_trans, BIOS_ATA_TRANSLATION_AUTO), ++ DEFINE_PROP_UINT16("rotation_rate", IDEDrive, dev.rotation_rate, 0), + DEFINE_PROP_END_OF_LIST(), + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ide-test-Add-FLUSH-CACHE-test-case.patch b/SOURCES/kvm-ide-test-Add-FLUSH-CACHE-test-case.patch new file mode 100644 index 0000000..8e59d66 --- /dev/null +++ b/SOURCES/kvm-ide-test-Add-FLUSH-CACHE-test-case.patch @@ -0,0 +1,97 @@ +From d1c34ff41de0ece966991adb6aef6f2bce2ccfc4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 10 Sep 2014 11:06:08 +0200 +Subject: [PATCH 09/12] ide-test: Add FLUSH CACHE test case + +Message-id: <1410347169-4368-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 60954 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/3] ide-test: Add FLUSH CACHE test case +Bugzilla: 1123372 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +This checks in particular that BSY is set while the flush request is in +flight. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit bd07684aacfb61668ae2c25b7dd00b64f3d7c7f3) + +RHEL: Whitelist the blkdebug driver so that the new qtest can succeed. + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + redhat/qemu-kvm.spec.template | 4 ++-- + tests/ide-test.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 42 insertions(+), 2 deletions(-) + +diff --git a/tests/ide-test.c b/tests/ide-test.c +index ac59259..739d2bf 100644 +--- a/tests/ide-test.c ++++ b/tests/ide-test.c +@@ -77,6 +77,7 @@ enum { + enum { + CMD_READ_DMA = 0xc8, + CMD_WRITE_DMA = 0xca, ++ CMD_FLUSH_CACHE = 0xe7, + CMD_IDENTIFY = 0xec, + + CMDF_ABORT = 0x100, +@@ -424,6 +425,43 @@ static void test_identify(void) + ide_test_quit(); + } + ++static void test_flush(void) ++{ ++ uint8_t data; ++ ++ ide_test_start( ++ "-vnc none " ++ "-drive file=blkdebug::%s,if=ide,cache=writeback", ++ tmp_path); ++ ++ /* Delay the completion of the flush request until we explicitly do it */ ++ qmp("{'execute':'human-monitor-command', 'arguments': { " ++ "'command-line': 'qemu-io ide0-hd0 \"break flush_to_os A\"'} }"); ++ ++ /* FLUSH CACHE command on device 0*/ ++ outb(IDE_BASE + reg_device, 0); ++ outb(IDE_BASE + reg_command, CMD_FLUSH_CACHE); ++ ++ /* Check status while request is in flight*/ ++ data = inb(IDE_BASE + reg_status); ++ assert_bit_set(data, BSY | DRDY); ++ assert_bit_clear(data, DF | ERR | DRQ); ++ ++ /* Complete the command */ ++ qmp("{'execute':'human-monitor-command', 'arguments': { " ++ "'command-line': 'qemu-io ide0-hd0 \"resume A\"'} }"); ++ ++ /* Check registers */ ++ data = inb(IDE_BASE + reg_device); ++ g_assert_cmpint(data & DEV, ==, 0); ++ ++ data = inb(IDE_BASE + reg_status); ++ assert_bit_set(data, DRDY); ++ assert_bit_clear(data, BSY | DF | ERR | DRQ); ++ ++ ide_test_quit(); ++} ++ + int main(int argc, char **argv) + { + const char *arch = qtest_get_arch(); +@@ -454,6 +492,8 @@ int main(int argc, char **argv) + qtest_add_func("/ide/bmdma/long_prdt", test_bmdma_long_prdt); + qtest_add_func("/ide/bmdma/teardown", test_bmdma_teardown); + ++ qtest_add_func("/ide/flush", test_flush); ++ + ret = g_test_run(); + + /* Cleanup */ +-- +1.7.1 + diff --git a/SOURCES/kvm-ide-test-Add-enum-value-for-DEV.patch b/SOURCES/kvm-ide-test-Add-enum-value-for-DEV.patch new file mode 100644 index 0000000..e32e8d8 --- /dev/null +++ b/SOURCES/kvm-ide-test-Add-enum-value-for-DEV.patch @@ -0,0 +1,49 @@ +From bfc4f8a432d111a63ae2a5bf9846b2b3413c2479 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 10 Sep 2014 11:06:07 +0200 +Subject: [PATCH 08/12] ide-test: Add enum value for DEV + +Message-id: <1410347169-4368-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 60953 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/3] ide-test: Add enum value for DEV +Bugzilla: 1123372 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Get rid of the magic number. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c27d565604038c1572b16dd1cd06e277e6ef02e2) +Signed-off-by: Kevin Wolf + +Signed-off-by: Miroslav Rezanina +--- + tests/ide-test.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/tests/ide-test.c b/tests/ide-test.c +index 177ab00..ac59259 100644 +--- a/tests/ide-test.c ++++ b/tests/ide-test.c +@@ -64,6 +64,7 @@ enum { + }; + + enum { ++ DEV = 0x10, + LBA = 0x40, + }; + +@@ -394,7 +395,7 @@ static void test_identify(void) + + /* Read in the IDENTIFY buffer and check registers */ + data = inb(IDE_BASE + reg_device); +- g_assert_cmpint(data & 0x10, ==, 0); ++ g_assert_cmpint(data & DEV, ==, 0); + + for (i = 0; i < 256; i++) { + data = inb(IDE_BASE + reg_status); +-- +1.7.1 + diff --git a/SOURCES/kvm-ide-test-fix-failure-for-test_flush.patch b/SOURCES/kvm-ide-test-fix-failure-for-test_flush.patch new file mode 100644 index 0000000..d7e4c96 --- /dev/null +++ b/SOURCES/kvm-ide-test-fix-failure-for-test_flush.patch @@ -0,0 +1,113 @@ +From 31ce74359a069be69af0f6ba2f7867ed2083317a Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Tue, 8 Dec 2015 20:30:59 +0100 +Subject: [PATCH 21/27] ide-test: fix failure for test_flush + +RH-Author: John Snow +Message-id: <1449606659-23710-1-git-send-email-jsnow@redhat.com> +Patchwork-id: 68521 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v3 21/21] ide-test: fix failure for test_flush +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +This patch is a combination of two patches: + +(1) Revert "qtest/ide-test: disable flush-test" +(2) ide-test: fix failure for test_flush + +First, the downstream-only revert: +This reverts commit 228e49fabffa644ab7a6a03e98205f293115dc89. + +Second, the backported fix: + +bd07684aacfb61668ae2c25b7dd00b64f3d7c7f3 added a test to ensure BSY +flag is set when a flush request is in flight. It does this by setting +a blkdebug breakpoint on flush_to_os before issuing a CMD_FLUSH_CACHE. +It then resumes CMD_FLUSH_CACHE operation and checks that BSY is unset. + +The actual unsetting of BSY does not occur until ide_flush_cb gets +called in a bh, however, so in some cases this check will race with +the actual completion. + +Fix this by polling the ide status register until BSY flag gets unset +before we do our final sanity checks. According to +f68ec8379e88502b4841a110c070e9b118d3151c this is in line with how a guest +would determine whether or not the device is still busy. + +Signed-off-by: Michael Roth +Signed-off-by: Anthony Liguori +(cherry picked from commit 22bfa16ed3d4c9d534dcfe6f2381a654f32296b9) +Signed-off-by: John Snow +--- + tests/ide-test.c | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/ide-test.c | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +diff --git a/tests/ide-test.c b/tests/ide-test.c +index 43b7fd6..92dd0e5 100644 +--- a/tests/ide-test.c ++++ b/tests/ide-test.c +@@ -425,6 +425,46 @@ static void test_identify(void) + ide_test_quit(); + } + ++static void test_flush(void) ++{ ++ uint8_t data; ++ ++ ide_test_start( ++ "-vnc none " ++ "-drive file=blkdebug::%s,if=ide,cache=writeback", ++ tmp_path); ++ ++ /* Delay the completion of the flush request until we explicitly do it */ ++ qmp("{'execute':'human-monitor-command', 'arguments': { " ++ "'command-line': 'qemu-io ide0-hd0 \"break flush_to_os A\"'} }"); ++ ++ /* FLUSH CACHE command on device 0*/ ++ outb(IDE_BASE + reg_device, 0); ++ outb(IDE_BASE + reg_command, CMD_FLUSH_CACHE); ++ ++ /* Check status while request is in flight*/ ++ data = inb(IDE_BASE + reg_status); ++ assert_bit_set(data, BSY | DRDY); ++ assert_bit_clear(data, DF | ERR | DRQ); ++ ++ /* Complete the command */ ++ qmp("{'execute':'human-monitor-command', 'arguments': { " ++ "'command-line': 'qemu-io ide0-hd0 \"resume A\"'} }"); ++ ++ /* Check registers */ ++ data = inb(IDE_BASE + reg_device); ++ g_assert_cmpint(data & DEV, ==, 0); ++ ++ do { ++ data = inb(IDE_BASE + reg_status); ++ } while (data & BSY); ++ ++ assert_bit_set(data, DRDY); ++ assert_bit_clear(data, BSY | DF | ERR | DRQ); ++ ++ ide_test_quit(); ++} ++ + static void test_flush_nodev(void) + { + ide_test_start(""); +@@ -468,6 +508,7 @@ int main(int argc, char **argv) + qtest_add_func("/ide/bmdma/long_prdt", test_bmdma_long_prdt); + qtest_add_func("/ide/bmdma/teardown", test_bmdma_teardown); + ++ qtest_add_func("/ide/flush", test_flush); + qtest_add_func("/ide/flush_nodev", test_flush_nodev); + + ret = g_test_run(); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-improve-debuggability-of-BLOCK_IO_ERROR-BLOCK_JOB_ER.patch b/SOURCES/kvm-improve-debuggability-of-BLOCK_IO_ERROR-BLOCK_JOB_ER.patch new file mode 100644 index 0000000..88a9d19 --- /dev/null +++ b/SOURCES/kvm-improve-debuggability-of-BLOCK_IO_ERROR-BLOCK_JOB_ER.patch @@ -0,0 +1,140 @@ +From bfea65d6f229fd65c78ae4daaddf0d0711d0aedd Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 21 Nov 2013 16:27:19 +0100 +Subject: [PATCH 09/14] improve debuggability of BLOCK_IO_ERROR / BLOCK_JOB_ERROR (RHEL 6->7 fwd) + +RH-Author: Laszlo Ersek +Message-id: <1385051239-3677-4-git-send-email-lersek@redhat.com> +Patchwork-id: 55837 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/3] improve debuggability of BLOCK_IO_ERROR / BLOCK_JOB_ERROR (RHEL 6->7 fwd) +Bugzilla: 895041 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jiri Denemark +RH-Acked-by: Luiz Capitulino + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=895041 + +Forward-port of RHEL-6-only commit + + commit 1a2b98f958fb770b70fa5a244e86c93655400858 + Author: Luiz Capitulino + Date: Thu Nov 4 13:51:42 2010 -0200 + + QMP: Improve debuggability of the BLOCK_IO_ERROR event + +Again, the code & docs are extended to BLOCK_JOB_ERROR. + +In the printf() added to bdrv_emit_qmp_error_event() I could have +scavenged the static global "monitor_event_names", but I would have had +to make it extern (or rather add a public getter function), which I deemed +too much. + +Signed-off-by: Laszlo Ersek +--- + block.c | 19 +++++++++++++++++++ + QMP/qmp-events.txt | 20 ++++++++++++++++++-- + 2 files changed, 37 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + QMP/qmp-events.txt | 20 ++++++++++++++++++-- + block.c | 19 +++++++++++++++++++ + 2 files changed, 37 insertions(+), 2 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index c8c6d75..fc4b7db 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -59,6 +59,11 @@ Data: + "eperm": errno EPERM + "enospc": errno ENOSPC + "eother": any other errno (other than EIO, EPERM, ENOSPC) ++- "__com.redhat_debug_info": RHEL7 extension containing debug information for ++ humans, applications should NOT read any ++ information from this member (json-object): ++ - "errno": errno value (json-int) ++ - "message": error message returned by strerror() (json-string) + + Example: + +@@ -66,7 +71,10 @@ Example: + "data": { "device": "ide0-hd1", + "operation": "write", + "action": "stop", +- "__com.redhat_reason": "enospc" }, ++ "__com.redhat_reason": "enospc", ++ "__com.redhat_debug_info": { ++ "message": "No space left on device", ++ "errno": 28 } } + "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } + + Note: If action is "stop", a STOP event will eventually follow the +@@ -144,6 +152,11 @@ Data: + "eperm": errno EPERM + "enospc": errno ENOSPC + "eother": any other errno (other than EIO, EPERM, ENOSPC) ++- "__com.redhat_debug_info": RHEL7 extension containing debug information for ++ humans, applications should NOT read any ++ information from this member (json-object): ++ - "errno": errno value (json-int) ++ - "message": error message returned by strerror() (json-string) + + Example: + +@@ -151,7 +164,10 @@ Example: + "data": { "device": "ide0-hd1", + "operation": "write", + "action": "stop", +- "__com.redhat_reason": "enospc" }, ++ "__com.redhat_reason": "enospc", ++ "__com.redhat_debug_info": { ++ "message": "No space left on device", ++ "errno": 28 } } + "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } + + BLOCK_JOB_READY +diff --git a/block.c b/block.c +index 68755bf..8ef07bb 100644 +--- a/block.c ++++ b/block.c +@@ -1748,6 +1748,18 @@ static void bdrv_put_rhel7_reason(QDict *event, int error) + qdict_put(event, BDRV_REASON_KEY, qstring_from_str(reason)); + } + ++#define BDRV_DEBUG_KEY RFQDN_REDHAT "debug_info" ++ ++/* RHEL7 vendor extension */ ++static void bdrv_put_rhel7_debug_info(QDict *event, int error) ++{ ++ QObject *info; ++ ++ info = qobject_from_jsonf("{ 'errno': %d, 'message': %s }", error, ++ strerror(error)); ++ qdict_put_obj(event, BDRV_DEBUG_KEY, info); ++} ++ + void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv, + enum MonitorEvent ev, + BlockErrorAction action, +@@ -1771,11 +1783,18 @@ void bdrv_emit_qmp_error_event(const BlockDriverState *bdrv, + abort(); + } + ++ fprintf(stderr, "%s error in device '%s': %s (%d)\n", ++ ev == QEVENT_BLOCK_IO_ERROR ? "block I/O" : ++ ev == QEVENT_BLOCK_JOB_ERROR ? "block job" : ++ "other block", ++ bdrv->device_name, strerror(error), error); ++ + data = qobject_from_jsonf("{ 'device': %s, 'action': %s, 'operation': %s }", + bdrv->device_name, + action_str, + is_read ? "read" : "write"); + bdrv_put_rhel7_reason(qobject_to_qdict(data), error); ++ bdrv_put_rhel7_debug_info(qobject_to_qdict(data), error); + monitor_protocol_event(ev, data); + + qobject_decref(data); +-- +1.7.1 + diff --git a/SOURCES/kvm-intel-hda-fix-position-buffer.patch b/SOURCES/kvm-intel-hda-fix-position-buffer.patch new file mode 100644 index 0000000..333db16 --- /dev/null +++ b/SOURCES/kvm-intel-hda-fix-position-buffer.patch @@ -0,0 +1,51 @@ +From 91bcfcc9583a61158f7f69f52ff3575eb432067f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 11 Dec 2013 09:49:07 -0500 +Subject: [PATCH 01/14] intel-hda: fix position buffer + +Message-id: <1386755347-9800-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56156 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] intel-hda: fix position buffer +Bugzilla: 947785 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Orit Wasserman + +Fix position buffer updates to use the correct stream offset. + +Without this patch both IN (record) and OUT (playback) streams +will update the IN buffer positions. The linux kernel notices +and complains: + hda-intel: Invalid position buffer, using LPIB read method instead. + +The bug may also lead to glitches when recording and playing +at the same time: + https://bugzilla.redhat.com/show_bug.cgi?id=947785 + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +(cherry picked from commit d58ce68a454e5ae9cbde0308def379e272f13b10) +--- + hw/audio/intel-hda.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/audio/intel-hda.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c +index e747342..cc948de 100644 +--- a/hw/audio/intel-hda.c ++++ b/hw/audio/intel-hda.c +@@ -439,6 +439,7 @@ static bool intel_hda_xfer(HDACodecDevice *dev, uint32_t stnr, bool output, + } + } + if (d->dp_lbase & 0x01) { ++ s = st - d->st; + addr = intel_hda_addr(d->dp_lbase & ~0x01, d->dp_ubase); + stl_le_pci_dma(&d->pci, addr + 8*s, st->lpib); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-introduce-MIG_STATE_CANCELLING-state.patch b/SOURCES/kvm-introduce-MIG_STATE_CANCELLING-state.patch new file mode 100644 index 0000000..c3c2e13 --- /dev/null +++ b/SOURCES/kvm-introduce-MIG_STATE_CANCELLING-state.patch @@ -0,0 +1,115 @@ +From b5a3f9ac5db568ddfb572d11fb4d6a659c0f5bfa Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Wed, 15 Jan 2014 19:42:28 +0100 +Subject: [PATCH 02/34] introduce MIG_STATE_CANCELLING state + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1389814948-3983-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 56731 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] introduce MIG_STATE_CANCELLING state +Bugzilla: 1053699 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek + +From: "Zhanghaoyu (A)" + +Introduce MIG_STATE_CANCELLING state to avoid starting a new migration task while the previous one still exist. + +Signed-off-by: Zeng Junliang +Signed-off-by: Zhang Haoyu +Reviewed-by: Paolo Bonzini +Signed-off-by: Juan Quintela +(cherry picked from commit 51cf4c1a99a172679c2949a2d58a2a4ee307b557) + +Conflicts: + migration.c +--- + migration.c | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 26 ++++++++++++++++---------- + 1 files changed, 16 insertions(+), 10 deletions(-) + +diff --git a/migration.c b/migration.c +index 735f7ca..21f7247 100644 +--- a/migration.c ++++ b/migration.c +@@ -39,6 +39,7 @@ enum { + MIG_STATE_ERROR = -1, + MIG_STATE_NONE, + MIG_STATE_SETUP, ++ MIG_STATE_CANCELLING, + MIG_STATE_CANCELLED, + MIG_STATE_ACTIVE, + MIG_STATE_COMPLETED, +@@ -194,6 +195,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) + info->has_total_time = false; + break; + case MIG_STATE_ACTIVE: ++ case MIG_STATE_CANCELLING: + info->has_status = true; + info->status = g_strdup("active"); + info->has_total_time = true; +@@ -280,6 +282,13 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, + + /* shared migration helpers */ + ++static void migrate_set_state(MigrationState *s, int old_state, int new_state) ++{ ++ if (atomic_cmpxchg(&s->state, old_state, new_state) == new_state) { ++ trace_migrate_set_state(new_state); ++ } ++} ++ + static void migrate_fd_cleanup(void *opaque) + { + MigrationState *s = opaque; +@@ -301,18 +310,14 @@ static void migrate_fd_cleanup(void *opaque) + + if (s->state != MIG_STATE_COMPLETED) { + qemu_savevm_state_cancel(); ++ if (s->state == MIG_STATE_CANCELLING) { ++ migrate_set_state(s, MIG_STATE_CANCELLING, MIG_STATE_CANCELLED); ++ } + } + + notifier_list_notify(&migration_state_notifiers, s); + } + +-static void migrate_set_state(MigrationState *s, int old_state, int new_state) +-{ +- if (atomic_cmpxchg(&s->state, old_state, new_state) == new_state) { +- trace_migrate_set_state(new_state); +- } +-} +- + void migrate_fd_error(MigrationState *s) + { + DPRINTF("setting error state\n"); +@@ -332,8 +337,8 @@ static void migrate_fd_cancel(MigrationState *s) + if (old_state != MIG_STATE_SETUP && old_state != MIG_STATE_ACTIVE) { + break; + } +- migrate_set_state(s, old_state, MIG_STATE_CANCELLED); +- } while (s->state != MIG_STATE_CANCELLED); ++ migrate_set_state(s, old_state, MIG_STATE_CANCELLING); ++ } while (s->state != MIG_STATE_CANCELLING); + } + + void add_migration_state_change_notifier(Notifier *notify) +@@ -418,7 +423,8 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + } + #endif + +- if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP) { ++ if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP || ++ s->state == MIG_STATE_CANCELLING) { + error_set(errp, QERR_MIGRATION_ACTIVE); + return; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-introduce-RFQDN_REDHAT-RHEL-6-7-fwd.patch b/SOURCES/kvm-introduce-RFQDN_REDHAT-RHEL-6-7-fwd.patch new file mode 100644 index 0000000..0ccf248 --- /dev/null +++ b/SOURCES/kvm-introduce-RFQDN_REDHAT-RHEL-6-7-fwd.patch @@ -0,0 +1,51 @@ +From eef2b7f5dd51a0b27cb291fccb995f1e3630b11f Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 21 Nov 2013 16:27:17 +0100 +Subject: [PATCH 07/14] introduce RFQDN_REDHAT (RHEL 6->7 fwd) + +RH-Author: Laszlo Ersek +Message-id: <1385051239-3677-2-git-send-email-lersek@redhat.com> +Patchwork-id: 55836 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/3] introduce RFQDN_REDHAT (RHEL 6->7 fwd) +Bugzilla: 971933 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jiri Denemark +RH-Acked-by: Luiz Capitulino + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=971933 + +This forward ports the final effect of RHEL-6 commit + + commit 8d99c4ad4d9fa53768bfbca8606457f8179f4404 + Author: Luiz Capitulino + Date: Fri May 14 22:49:19 2010 -0300 + + Monitor: Make RFQDN_REDHAT public + +Signed-off-by: Laszlo Ersek +--- + include/monitor/monitor.h | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/monitor/monitor.h | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h +index 10fa0e3..dcce609 100644 +--- a/include/monitor/monitor.h ++++ b/include/monitor/monitor.h +@@ -19,6 +19,9 @@ extern Monitor *default_mon; + /* flags for monitor commands */ + #define MONITOR_CMD_ASYNC 0x0001 + ++/* Red Hat Monitor's prefix (reversed fully qualified domain) */ ++#define RFQDN_REDHAT "__com.redhat_" ++ + /* QMP events */ + typedef enum MonitorEvent { + QEVENT_SHUTDOWN, +-- +1.7.1 + diff --git a/SOURCES/kvm-io-skip-updates-to-client-if-websocket-output-buffer.patch b/SOURCES/kvm-io-skip-updates-to-client-if-websocket-output-buffer.patch new file mode 100644 index 0000000..70d4360 --- /dev/null +++ b/SOURCES/kvm-io-skip-updates-to-client-if-websocket-output-buffer.patch @@ -0,0 +1,96 @@ +From 0ee28ebbde0313e54b0c8e0f316aa75f97c87169 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:41 +0100 +Subject: [PATCH 27/27] io: skip updates to client if websocket output buffer + is non-zero + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-28-berrange@redhat.com> +Patchwork-id: 78959 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 27/27] io: skip updates to client if websocket output buffer is non-zero +Bugzilla: 1518711 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +When getting a framebuffer update from the guest, we first check +to see if there's still any queued data in the VNC send buffer. +If there is, we skip the update so that we avoid having the send +buffer grow without bound. Unfortunately, the code is only +monitoring the normal send buffer, and not the websockets send +buffer which is separate. + +This flaw causes the websockets send buffer to grow without bound +if the other end of the underlying data channel doesn't +read data being sent. This can be seen with VNC if a client +is on a slow WAN link and the guest OS is sending many screen +updates. A malicious VNC client can act like it is on a slow +link by playing a video in the guest and then reading data +very slowly, causing QEMU host memory to expand arbitrarily. + +This issue is assigned CVE-2017-15268, publically reported in + + https://bugs.launchpad.net/qemu/+bug/1718964 + +Reviewed-by: Eric Blake +Signed-off-by: Daniel P. Berrange + +The corresponding upstream fix is present in commit +a7b20a8efa28e5f22c26c06cd06c2f12bc863493, however, this +patch is a complete re-implementation since the upstream +code for websockets is completely different to that in +QEMU 1.5.3. As such ignore the Reviewed-by tag above. + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-ws.c | 10 ++++++++-- + ui/vnc.c | 3 +++ + 2 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/ui/vnc-ws.c b/ui/vnc-ws.c +index 7133be9..fbfadde 100644 +--- a/ui/vnc-ws.c ++++ b/ui/vnc-ws.c +@@ -173,8 +173,13 @@ long vnc_client_write_ws(VncState *vs) + long ret; + VNC_DEBUG("Write WS: Pending output %p size %zd offset %zd\n", + vs->output.buffer, vs->output.capacity, vs->output.offset); +- vncws_encode_frame(&vs->ws_output, vs->output.buffer, vs->output.offset); +- buffer_reset(&vs->output); ++ /* We don't consume more from 'output' unless we've finished ++ * sending the previous websockets frame. This ensures that ++ * we still correctly throttle forced framebuffer updates */ ++ if (vs->ws_output.offset == 0) { ++ vncws_encode_frame(&vs->ws_output, vs->output.buffer, vs->output.offset); ++ buffer_reset(&vs->output); ++ } + ret = vnc_client_write_buf(vs, vs->ws_output.buffer, vs->ws_output.offset); + if (!ret) { + return 0; +@@ -183,6 +188,7 @@ long vnc_client_write_ws(VncState *vs) + buffer_advance(&vs->ws_output, ret); + + if (vs->ws_output.offset == 0) { ++ vs->force_update_offset = 0; + qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, NULL, vs); + } + +diff --git a/ui/vnc.c b/ui/vnc.c +index 2be87b8..99b1ab1 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -915,6 +915,9 @@ static bool vnc_should_update(VncState *vs) + * is completely idle. + */ + if (vs->output.offset < vs->throttle_output_offset && ++#ifdef CONFIG_VNC_WS ++ vs->ws_output.offset < vs->throttle_output_offset && ++#endif + vs->job_update == VNC_STATE_UPDATE_NONE) { + return true; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-more-tests-for-qcow2-corruption.patch b/SOURCES/kvm-iotests-Add-more-tests-for-qcow2-corruption.patch new file mode 100644 index 0000000..597bbd2 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-more-tests-for-qcow2-corruption.patch @@ -0,0 +1,162 @@ +From 36dbb9edadf3cd22fd6f0da96cf293da35b0234c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:05 +0200 +Subject: [PATCH 11/42] iotests: Add more tests for qcow2 corruption + +Message-id: <1434212556-3927-12-git-send-email-mreitz@redhat.com> +Patchwork-id: 66030 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 11/42] iotests: Add more tests for qcow2 corruption +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Add tests for unaligned L1/L2/reftable entries and non-fatal corruption +reports. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Message-id: 1409926039-29044-6-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5b0ed2be883238f52567ba2635ea38f34e8eb90d) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/060 | 56 ++++++++++++++++++++++++++++++++++++++++++++-- + tests/qemu-iotests/060.out | 51 +++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 105 insertions(+), 2 deletions(-) + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +index 5180e23..e1187a3 100644 +--- a/tests/qemu-iotests/060 ++++ b/tests/qemu-iotests/060 +@@ -169,9 +169,61 @@ echo "=== Testing unallocated image header ===" + echo + _make_test_img 64M + # Create L1/L2 +-$QEMU_IO -c "$OPEN_RW" -c "write 0 64k" | _filter_qemu_io ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io + poke_file "$TEST_IMG" "$rb_offset" "\x00\x00" +-$QEMU_IO -c "$OPEN_RW" -c "write 64k 64k" | _filter_qemu_io ++$QEMU_IO -c "write 64k 64k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing unaligned L1 entry ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++# This will be masked with ~(512 - 1) = ~0x1ff, so whether the lower 9 bits are ++# aligned or not does not matter ++poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x04\x2a\x00" ++$QEMU_IO -c "read 0 64k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing unaligned L2 entry ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x05\x2a\x00" ++$QEMU_IO -c "read 0 64k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing unaligned reftable entry ===" ++echo ++_make_test_img 64M ++poke_file "$TEST_IMG" "$rt_offset" "\x00\x00\x00\x00\x00\x02\x2a\x00" ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing non-fatal corruption on freeing ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x05\x2a\x00" ++$QEMU_IO -c "discard 0 64k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing read-only corruption report ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x05\x2a\x00" ++# Should only emit a single error message ++$QEMU_IO -c "$OPEN_RO" -c "read 0 64k" -c "read 0 64k" | _filter_qemu_io ++ ++echo ++echo "=== Testing non-fatal and then fatal corruption report ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "write 0 128k" "$TEST_IMG" | _filter_qemu_io ++poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x05\x2a\x00" ++poke_file "$TEST_IMG" "$(($l2_offset+8))" "\x80\x00\x00\x00\x00\x06\x2a\x00" ++# Should emit two error messages ++$QEMU_IO -c "discard 0 64k" -c "read 64k 64k" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index 30806da..4f0c6d0 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -101,4 +101,55 @@ wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with qcow2_header); further corruption events will be suppressed + write failed: Input/output error ++ ++=== Testing unaligned L1 entry === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Marking image as corrupt: L2 table offset 0x42a00 unaligned (L1 index: 0); further corruption events will be suppressed ++read failed: Input/output error ++ ++=== Testing unaligned L2 entry === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Marking image as corrupt: Data cluster offset 0x52a00 unaligned (L2 offset: 0x40000, L2 index: 0); further corruption events will be suppressed ++read failed: Input/output error ++ ++=== Testing unaligned reftable entry === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qcow2: Marking image as corrupt: Refblock offset 0x22a00 unaligned (reftable index: 0); further corruption events will be suppressed ++write failed: Input/output error ++ ++=== Testing non-fatal corruption on freeing === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Image is corrupt: Cannot free unaligned cluster 0x52a00; further non-fatal corruption events will be suppressed ++discard 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing read-only corruption report === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Image is corrupt: Data cluster offset 0x52a00 unaligned (L2 offset: 0x40000, L2 index: 0); further non-fatal corruption events will be suppressed ++read failed: Input/output error ++read failed: Input/output error ++ ++=== Testing non-fatal and then fatal corruption report === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Image is corrupt: Cannot free unaligned cluster 0x52a00; further non-fatal corruption events will be suppressed ++qcow2: Marking image as corrupt: Data cluster offset 0x62a00 unaligned (L2 offset: 0x40000, L2 index: 0x1); further corruption events will be suppressed ++discard 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read failed: Input/output error + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-test-for-image-header-overlap.patch b/SOURCES/kvm-iotests-Add-test-for-image-header-overlap.patch new file mode 100644 index 0000000..2341216 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-test-for-image-header-overlap.patch @@ -0,0 +1,70 @@ +From f65ef16bd01c14e252e262ec24ff3ac16e0e335d Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:21:59 +0200 +Subject: [PATCH 05/42] iotests: Add test for image header overlap + +Message-id: <1434212556-3927-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 66024 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 05/42] iotests: Add test for image header overlap +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Add a test for an image with an unallocated image header; instead of an +assertion, this should result in the image being marked corrupt. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit a42f8a3d05c5598cee893c9cf5ffeee48bacb83e) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/060 | 9 +++++++++ + tests/qemu-iotests/060.out | 8 ++++++++ + 2 files changed, 17 insertions(+) + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +index 2abd566..5180e23 100644 +--- a/tests/qemu-iotests/060 ++++ b/tests/qemu-iotests/060 +@@ -164,6 +164,15 @@ wait_break 0 + write 64k 64k + resume 0" | $QEMU_IO | _filter_qemu_io + ++echo ++echo "=== Testing unallocated image header ===" ++echo ++_make_test_img 64M ++# Create L1/L2 ++$QEMU_IO -c "$OPEN_RW" -c "write 0 64k" | _filter_qemu_io ++poke_file "$TEST_IMG" "$rb_offset" "\x00\x00" ++$QEMU_IO -c "$OPEN_RW" -c "write 64k 64k" | _filter_qemu_io ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index a517948..c27c952 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -93,4 +93,12 @@ blkdebug: Suspended request '0' + write failed: Input/output error + blkdebug: Resuming request '0' + aio_write failed: No medium found ++ ++=== Testing unallocated image header === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Preventing invalid write on metadata (overlaps with qcow2_header); image marked as corrupt. ++write failed: Input/output error + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-test-for-non-existing-backing-file.patch b/SOURCES/kvm-iotests-Add-test-for-non-existing-backing-file.patch new file mode 100644 index 0000000..177cf17 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-test-for-non-existing-backing-file.patch @@ -0,0 +1,120 @@ +From f42cefd020d8fcd3a2b9ef2007af6fc473d628a5 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 22 Jul 2015 16:24:57 +0200 +Subject: [PATCH 5/5] iotests: Add test for non-existing backing file + +Message-id: <1437582297-9244-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 67108 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/3] iotests: Add test for non-existing backing file +Bugzilla: 1238639 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +Test the error message when a COW file is about to be created which is +supposed to inherit the size of its backing file, while the backing file +given does not actually exist. + +Signed-off-by: Max Reitz +Reviewed-by: Kevin Wolf +Reviewed-by: Peter Lieven +Signed-off-by: Kevin Wolf +(cherry picked from commit c4d01535dcc2c6a573c03a85a9b7502d15f2bb45) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/111 | 53 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/111.out | 3 +++ + tests/qemu-iotests/group | 1 + + 3 files changed, 57 insertions(+) + create mode 100755 tests/qemu-iotests/111 + create mode 100644 tests/qemu-iotests/111.out + +diff --git a/tests/qemu-iotests/111 b/tests/qemu-iotests/111 +new file mode 100755 +index 0000000..6011c94 +--- /dev/null ++++ b/tests/qemu-iotests/111 +@@ -0,0 +1,53 @@ ++#!/bin/bash ++# ++# Test case for non-existing backing file when creating a qcow2 image ++# and not specifying the size ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qed qcow qcow2 vmdk ++_supported_proto file ++_supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" ++ ++$QEMU_IMG create -f $IMGFMT -b "$TEST_IMG.inexistent" "$TEST_IMG" 2>&1 \ ++ | _filter_testdir | _filter_imgfmt ++ ++# success, all done ++echo '*** done' ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/111.out b/tests/qemu-iotests/111.out +new file mode 100644 +index 0000000..683c01a +--- /dev/null ++++ b/tests/qemu-iotests/111.out +@@ -0,0 +1,3 @@ ++QA output created by 111 ++qemu-img: TEST_DIR/t.IMGFMT: Could not open 'TEST_DIR/t.IMGFMT.inexistent': No such file or directory ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 739c266..0644c42 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -88,6 +88,7 @@ + 105 rw auto quick + 107 rw auto quick + 108 rw auto quick ++111 rw auto quick + 114 rw auto quick + 121 rw auto + 130 rw auto quick +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-test-for-potentially-damaging-repairs.patch b/SOURCES/kvm-iotests-Add-test-for-potentially-damaging-repairs.patch new file mode 100644 index 0000000..fe87798 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-test-for-potentially-damaging-repairs.patch @@ -0,0 +1,316 @@ +From de5dd97bab0923fdd8cd4ffebbbf3c031446030c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:25 +0200 +Subject: [PATCH 31/42] iotests: Add test for potentially damaging repairs + +Message-id: <1434212556-3927-32-git-send-email-mreitz@redhat.com> +Patchwork-id: 66050 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 31/42] iotests: Add test for potentially damaging repairs +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +There are certain cases where repairing a qcow2 image might actually +damage it further (or rather, where repairing it has in fact damaged it +further with the old qcow2 check implementation). This should not +happen, so add a test for these cases. + +Furthermore, the repair function now repairs refblocks beyond the image +end by resizing the image accordingly. Add several tests for this as +well. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 234764eed1aab56a657a161e9a0c65730442e6f8) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/108 | 141 +++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/108.out | 110 +++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 252 insertions(+) + create mode 100755 tests/qemu-iotests/108 + create mode 100644 tests/qemu-iotests/108.out + +diff --git a/tests/qemu-iotests/108 b/tests/qemu-iotests/108 +new file mode 100755 +index 0000000..12fc92a +--- /dev/null ++++ b/tests/qemu-iotests/108 +@@ -0,0 +1,141 @@ ++#!/bin/bash ++# ++# Test case for repairing qcow2 images which cannot be repaired using ++# the on-disk refcount structures ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests qocw2-specific low-level functionality ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++echo ++echo '=== Repairing an image without any refcount table ===' ++echo ++ ++_make_test_img 64M ++# just write some data ++$QEMU_IO -c 'write -P 42 0 64k' "$TEST_IMG" | _filter_qemu_io ++ ++# refcount_table_offset ++poke_file "$TEST_IMG" $((0x30)) "\x00\x00\x00\x00\x00\x00\x00\x00" ++# refcount_table_clusters ++poke_file "$TEST_IMG" $((0x38)) "\x00\x00\x00\x00" ++ ++_check_test_img -r all ++ ++$QEMU_IO -c 'read -P 42 0 64k' "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo '=== Repairing unreferenced data cluster in new refblock area ===' ++echo ++ ++IMGOPTS='cluster_size=512' _make_test_img 64M ++# Allocate the first 128 kB in the image (first refblock) ++$QEMU_IO -c 'write 0 0x1b200' "$TEST_IMG" | _filter_qemu_io ++# should be 131072 == 0x20000 ++stat -c '%s' "$TEST_IMG" ++ ++# Enter a cluster at 128 kB (0x20000) ++# XXX: This should be the first free entry in the last L2 table, but we cannot ++# be certain ++poke_file "$TEST_IMG" $((0x1ccc8)) "\x80\x00\x00\x00\x00\x02\x00\x00" ++ ++# Fill the cluster ++truncate -s $((0x20200)) "$TEST_IMG" ++$QEMU_IO -c "open -o driver=raw $TEST_IMG" -c 'write -P 42 128k 512' \ ++ | _filter_qemu_io ++ ++# The data should now appear at this guest offset ++$QEMU_IO -c 'read -P 42 0x1b200 512' "$TEST_IMG" | _filter_qemu_io ++ ++# This cluster is unallocated; fix it ++_check_test_img -r all ++ ++# This repair operation must have allocated a new refblock; and that refblock ++# should not overlap with the unallocated data cluster. If it does, the data ++# will be damaged, so check it. ++$QEMU_IO -c 'read -P 42 0x1b200 512' "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo '=== Repairing refblock beyond the image end ===' ++echo ++ ++echo ++echo '--- Otherwise clean ---' ++echo ++ ++_make_test_img 64M ++# Normally, qemu doesn't create empty refblocks, so we just have to do it by ++# hand ++# XXX: This should be the entry for the second refblock ++poke_file "$TEST_IMG" $((0x10008)) "\x00\x00\x00\x00\x00\x10\x00\x00" ++# Mark that refblock as used ++# XXX: This should be the 17th entry (cluster 16) of the first ++# refblock ++poke_file "$TEST_IMG" $((0x20020)) "\x00\x01" ++_check_test_img -r all ++ ++echo ++echo '--- Refblock is unallocated ---' ++echo ++ ++_make_test_img 64M ++poke_file "$TEST_IMG" $((0x10008)) "\x00\x00\x00\x00\x00\x10\x00\x00" ++_check_test_img -r all ++ ++echo ++echo '--- Signed overflow after the refblock ---' ++echo ++ ++_make_test_img 64M ++poke_file "$TEST_IMG" $((0x10008)) "\x7f\xff\xff\xff\xff\xff\x00\x00" ++_check_test_img -r all ++ ++echo ++echo '--- Unsigned overflow after the refblock ---' ++echo ++ ++_make_test_img 64M ++poke_file "$TEST_IMG" $((0x10008)) "\xff\xff\xff\xff\xff\xff\x00\x00" ++_check_test_img -r all ++ ++# success, all done ++echo '*** done' ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/108.out b/tests/qemu-iotests/108.out +new file mode 100644 +index 0000000..824d5cf +--- /dev/null ++++ b/tests/qemu-iotests/108.out +@@ -0,0 +1,110 @@ ++QA output created by 108 ++ ++=== Repairing an image without any refcount table === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ERROR cluster 0 refcount=0 reference=1 ++ERROR cluster 3 refcount=0 reference=1 ++ERROR cluster 4 refcount=0 reference=1 ++ERROR cluster 5 refcount=0 reference=1 ++Rebuilding refcount structure ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 4 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++read 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Repairing unreferenced data cluster in new refblock area === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 111104/111104 bytes at offset 0 ++108.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++131072 ++wrote 512/512 bytes at offset 131072 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 512/512 bytes at offset 111104 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ERROR cluster 256 refcount=0 reference=1 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 1 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++read 512/512 bytes at offset 111104 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Repairing refblock beyond the image end === ++ ++ ++--- Otherwise clean --- ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Repairing refcount block 1 is outside image ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 1 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++ ++--- Refblock is unallocated --- ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Repairing refcount block 1 is outside image ++ERROR cluster 16 refcount=0 reference=1 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 ++Repairing cluster 16 refcount=1 reference=0 ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 2 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++ ++--- Signed overflow after the refblock --- ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Repairing refcount block 1 is outside image ++ERROR could not resize image: Invalid argument ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 1 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++ ++--- Unsigned overflow after the refblock --- ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Repairing refcount block 1 is outside image ++ERROR could not resize image: Invalid argument ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 1 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index dd3c5fe..695ab02 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -87,3 +87,4 @@ + 092 rw auto quick + 105 rw auto quick + 107 rw auto quick ++108 rw auto quick +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-test-for-qcow2-L1-table-update.patch b/SOURCES/kvm-iotests-Add-test-for-qcow2-L1-table-update.patch new file mode 100644 index 0000000..2ac40d2 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-test-for-qcow2-L1-table-update.patch @@ -0,0 +1,131 @@ +From 8c0c745cfd6e5e8e366449ed421edb250f24abf1 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:08 +0200 +Subject: [PATCH 14/42] iotests: Add test for qcow2 L1 table update + +Message-id: <1434212556-3927-15-git-send-email-mreitz@redhat.com> +Patchwork-id: 66033 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 14/42] iotests: Add test for qcow2 L1 table update +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Updating the L1 table should not result in random data being written. +This adds a test for that. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 1b2dd0bee6bd03045b90c8a7549c8134466b2938) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/107 | 61 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/107.out | 10 ++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 72 insertions(+) + create mode 100755 tests/qemu-iotests/107 + create mode 100644 tests/qemu-iotests/107.out + +diff --git a/tests/qemu-iotests/107 b/tests/qemu-iotests/107 +new file mode 100755 +index 0000000..cad1cf9 +--- /dev/null ++++ b/tests/qemu-iotests/107 +@@ -0,0 +1,61 @@ ++#!/bin/bash ++# ++# Tests updates of the qcow2 L1 table ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++ ++IMG_SIZE=64K ++ ++echo ++echo '=== Updates should not write random data ===' ++echo ++ ++_make_test_img $IMG_SIZE ++$QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "open -o driver=raw $TEST_IMG" -c 'read -p -P 0 196616 65528' \ ++ | _filter_qemu_io ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 ++ +diff --git a/tests/qemu-iotests/107.out b/tests/qemu-iotests/107.out +new file mode 100644 +index 0000000..93445b7 +--- /dev/null ++++ b/tests/qemu-iotests/107.out +@@ -0,0 +1,10 @@ ++QA output created by 107 ++ ++=== Updates should not write random data === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=65536 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 65528/65528 bytes at offset 196616 ++63.992 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index cd8384a..dd3c5fe 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -86,3 +86,4 @@ + 088 rw auto + 092 rw auto quick + 105 rw auto quick ++107 rw auto quick +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-tests-for-more-corruption-cases.patch b/SOURCES/kvm-iotests-Add-tests-for-more-corruption-cases.patch new file mode 100644 index 0000000..af8b583 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-tests-for-more-corruption-cases.patch @@ -0,0 +1,94 @@ +From 39256a95ce8205edc697a21b0478047908cb440b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:32 +0200 +Subject: [PATCH 38/42] iotests: Add tests for more corruption cases + +Message-id: <1434212556-3927-39-git-send-email-mreitz@redhat.com> +Patchwork-id: 66057 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 38/42] iotests: Add tests for more corruption cases +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit f30136b35a271109b89353b9a5349cf32e6aeda7) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/060 | 15 +++++++++++++++ + tests/qemu-iotests/060.out | 13 +++++++++++++ + 2 files changed, 28 insertions(+) + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +index e1187a3..ab44c83 100644 +--- a/tests/qemu-iotests/060 ++++ b/tests/qemu-iotests/060 +@@ -183,6 +183,12 @@ $QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io + poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x04\x2a\x00" + $QEMU_IO -c "read 0 64k" "$TEST_IMG" | _filter_qemu_io + ++# Test how well zero cluster expansion can cope with this ++_make_test_img 64M ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x04\x2a\x00" ++$QEMU_IMG amend -o compat=0.10 "$TEST_IMG" ++ + echo + echo "=== Testing unaligned L2 entry ===" + echo +@@ -192,6 +198,15 @@ poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x05\x2a\x00" + $QEMU_IO -c "read 0 64k" "$TEST_IMG" | _filter_qemu_io + + echo ++echo "=== Testing unaligned pre-allocated zero cluster ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "write 0 64k" "$TEST_IMG" | _filter_qemu_io ++poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x05\x2a\x01" ++# zero cluster expansion ++$QEMU_IMG amend -o compat=0.10 "$TEST_IMG" ++ ++echo + echo "=== Testing unaligned reftable entry ===" + echo + _make_test_img 64M +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index 88332e4..def7447 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -115,6 +115,11 @@ wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + qcow2: Marking image as corrupt: L2 table offset 0x42a00 unaligned (L1 index: 0); further corruption events will be suppressed + read failed: Input/output error ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Marking image as corrupt: L2 table offset 0x42a00 unaligned (L1 index: 0); further corruption events will be suppressed ++qemu-img: Error while amending options: Input/output error + + === Testing unaligned L2 entry === + +@@ -124,6 +129,14 @@ wrote 65536/65536 bytes at offset 0 + qcow2: Marking image as corrupt: Data cluster offset 0x52a00 unaligned (L2 offset: 0x40000, L2 index: 0); further corruption events will be suppressed + read failed: Input/output error + ++=== Testing unaligned pre-allocated zero cluster === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Marking image as corrupt: Data cluster offset 0x52a00 unaligned (L2 offset: 0x40000, L2 index: 0); further corruption events will be suppressed ++qemu-img: Error while amending options: Input/output error ++ + === Testing unaligned reftable entry === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Add-tests-for-refcount-table-growth.patch b/SOURCES/kvm-iotests-Add-tests-for-refcount-table-growth.patch new file mode 100644 index 0000000..ff725b5 --- /dev/null +++ b/SOURCES/kvm-iotests-Add-tests-for-refcount-table-growth.patch @@ -0,0 +1,184 @@ +From 65d01862c82d46a2f440dab3818e8e08e6879551 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:34 +0200 +Subject: [PATCH 40/42] iotests: Add tests for refcount table growth + +Message-id: <1434212556-3927-41-git-send-email-mreitz@redhat.com> +Patchwork-id: 66059 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 40/42] iotests: Add tests for refcount table growth +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Signed-off-by: Max Reitz +Message-id: 1423598552-24301-3-git-send-email-mreitz@redhat.com +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Max Reitz +(cherry picked from commit 0e8a371468ce24513b15a9ae362f12822e1973a3) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/121 | 102 +++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/121.out | 23 ++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 126 insertions(+) + create mode 100755 tests/qemu-iotests/121 + create mode 100644 tests/qemu-iotests/121.out + +diff --git a/tests/qemu-iotests/121 b/tests/qemu-iotests/121 +new file mode 100755 +index 0000000..0912c3f +--- /dev/null ++++ b/tests/qemu-iotests/121 +@@ -0,0 +1,102 @@ ++#!/bin/bash ++# ++# Test cases for qcow2 refcount table growth ++# ++# Copyright (C) 2015 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++echo ++echo '=== New refcount structures may not conflict with existing structures ===' ++ ++echo ++echo '--- Test 1 ---' ++echo ++ ++# Preallocation speeds up the write operation, but preallocating everything will ++# destroy the purpose of the write; so preallocate one KB less than what would ++# cause a reftable growth... ++IMGOPTS='preallocation=metadata,cluster_size=1k' _make_test_img 64512K ++# ...and make the image the desired size afterwards. ++$QEMU_IMG resize "$TEST_IMG" 65M ++ ++# The first write results in a growth of the refcount table during an allocation ++# which has precisely the required size so that the new refcount block allocated ++# in alloc_refcount_block() is right after cluster_index; this did lead to a ++# different refcount block being written to disk (a zeroed cluster) than what is ++# cached (a refblock with one entry having a refcount of 1), and the second ++# write would then result in that cached cluster being marked dirty and then ++# in it being written to disk. ++# This should not happen, the new refcount structures may not conflict with ++# new_block. ++# (Note that for some reason, 'write 63M 1K' does not trigger the problem) ++$QEMU_IO -c 'write 62M 1025K' -c 'write 64M 1M' "$TEST_IMG" | _filter_qemu_io ++ ++_check_test_img ++ ++ ++echo ++echo '--- Test 2 ---' ++echo ++ ++IMGOPTS='preallocation=metadata,cluster_size=1k' _make_test_img 64513K ++# This results in an L1 table growth which in turn results in some clusters at ++# the start of the image becoming free ++$QEMU_IMG resize "$TEST_IMG" 65M ++ ++# This write results in a refcount table growth; but the refblock allocated ++# immediately before that (new_block) takes cluster index 4 (which is now free) ++# and is thus not self-describing (in contrast to test 1, where new_block was ++# self-describing). The refcount table growth algorithm then used to place the ++# new refcount structures at cluster index 65536 (which is the same as the ++# cluster_index parameter in this case), allocating a new refcount block for ++# that cluster while new_block already existed, leaking new_block. ++# Therefore, the new refcount structures may not be put at cluster_index ++# (because new_block already describes that cluster, and the new structures try ++# to be self-describing). ++$QEMU_IO -c 'write 63M 130K' "$TEST_IMG" | _filter_qemu_io ++ ++_check_test_img ++ ++ ++# success, all done ++echo ++echo '*** done' ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/121.out b/tests/qemu-iotests/121.out +new file mode 100644 +index 0000000..ff18e2c +--- /dev/null ++++ b/tests/qemu-iotests/121.out +@@ -0,0 +1,23 @@ ++QA output created by 121 ++ ++=== New refcount structures may not conflict with existing structures === ++ ++--- Test 1 --- ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=66060288 preallocation='metadata' ++Image resized. ++wrote 1049600/1049600 bytes at offset 65011712 ++1.001 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 1048576/1048576 bytes at offset 67108864 ++1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++--- Test 2 --- ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=66061312 preallocation='metadata' ++Image resized. ++wrote 133120/133120 bytes at offset 66060288 ++130 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 5867cf7..dbb2a36 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -89,3 +89,4 @@ + 107 rw auto quick + 108 rw auto quick + 114 rw auto quick ++121 rw auto +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Filter-for-Killed-in-qemu-io-output.patch b/SOURCES/kvm-iotests-Filter-for-Killed-in-qemu-io-output.patch new file mode 100644 index 0000000..ab7ff1e --- /dev/null +++ b/SOURCES/kvm-iotests-Filter-for-Killed-in-qemu-io-output.patch @@ -0,0 +1,44 @@ +From 27158eec51a5a443d9ae9a7b565b40b749f6f41b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:46:45 +0100 +Subject: [PATCH 14/24] iotests: Filter for "Killed" in qemu-io output + +RH-Author: Max Reitz +Message-id: <20170313174649.28932-1-mreitz@redhat.com> +Patchwork-id: 74276 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 5/9] iotests: Filter for "Killed" in qemu-io output +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +_filter_qemu_io already filters out the process ID when qemu-io is +aborted; the same should be done when it is killed. + +Signed-off-by: Max Reitz +Reviewed-by: Fam Zheng +Message-id: 1418032092-16813-3-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 9e0c3e8df5d1b12517d587d60b2fe587ea252ebe) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/common.filter | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter +index dcd246d..041e001 100644 +--- a/tests/qemu-iotests/common.filter ++++ b/tests/qemu-iotests/common.filter +@@ -150,7 +150,7 @@ _filter_win32() + _filter_qemu_io() + { + _filter_win32 | sed -e "s/[0-9]* ops\; [0-9/:. sec]* ([0-9/.inf]* [EPTGMKiBbytes]*\/sec and [0-9/.inf]* ops\/sec)/X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" \ +- -e "s/: line [0-9][0-9]*: *[0-9][0-9]*\( Aborted\)/:\1/" \ ++ -e "s/: line [0-9][0-9]*: *[0-9][0-9]*\( Aborted\| Killed\)/:\1/" \ + -e "s/qemu-io> //g" + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Fix-test-039.patch b/SOURCES/kvm-iotests-Fix-test-039.patch new file mode 100644 index 0000000..4dc4c38 --- /dev/null +++ b/SOURCES/kvm-iotests-Fix-test-039.patch @@ -0,0 +1,116 @@ +From 5eef8556fa85c070a242f93b675e7fb8e24a2fa0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:46:56 +0100 +Subject: [PATCH 15/24] iotests: Fix test 039 + +RH-Author: Max Reitz +Message-id: <20170313174659.29164-1-mreitz@redhat.com> +Patchwork-id: 74277 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 6/9] iotests: Fix test 039 +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +Test 039 used qemu-io -c abort for simulating a qemu crash; however, +abort() generally results in a core dump and ulimit -c 0 is no reliable +way of preventing that. Use "sigraise $(kill -l KILL)" instead to have +it crash without a core dump. + +Signed-off-by: Max Reitz +Reviewed-by: Fam Zheng +Message-id: 1418032092-16813-4-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3f394472c5bca59de5cab9baafdff1984b0213a3) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/039 | 18 +++++++++++++----- + tests/qemu-iotests/039.out | 6 +++--- + 2 files changed, 16 insertions(+), 8 deletions(-) + +diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039 +index 1e50651..ac85476 100755 +--- a/tests/qemu-iotests/039 ++++ b/tests/qemu-iotests/039 +@@ -46,9 +46,11 @@ _supported_proto generic + _supported_os Linux + _unsupported_qemu_io_options --nocache + +-_no_dump_exec() ++_subshell_exec() + { +- (ulimit -c 0; exec "$@") ++ # Executing crashing commands in a subshell prevents information like the ++ # "Killed" line from being lost ++ (exec "$@") + } + + size=128M +@@ -71,7 +73,9 @@ echo "== Creating a dirty image file ==" + IMGOPTS="compat=1.1,lazy_refcounts=on" + _make_test_img $size + +-_no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io ++_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \ ++ -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \ ++ | _filter_qemu_io + + # The dirty bit must be set + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +@@ -104,7 +108,9 @@ echo "== Opening a dirty image read/write should repair it ==" + IMGOPTS="compat=1.1,lazy_refcounts=on" + _make_test_img $size + +-_no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io ++_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \ ++ -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \ ++ | _filter_qemu_io + + # The dirty bit must be set + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +@@ -120,7 +126,9 @@ echo "== Creating an image file with lazy_refcounts=off ==" + IMGOPTS="compat=1.1,lazy_refcounts=off" + _make_test_img $size + +-_no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io ++_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \ ++ -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \ ++ | _filter_qemu_io + + # The dirty bit must not be set since lazy_refcounts=off + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +diff --git a/tests/qemu-iotests/039.out b/tests/qemu-iotests/039.out +index af62da1..f3fe58b 100644 +--- a/tests/qemu-iotests/039.out ++++ b/tests/qemu-iotests/039.out +@@ -11,7 +11,7 @@ No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-./039: Aborted ( ulimit -c 0; exec "$@" ) ++./039: Killed ( exec "$@" ) + incompatible_features 0x1 + ERROR cluster 5 refcount=0 reference=1 + ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0 +@@ -46,7 +46,7 @@ read 512/512 bytes at offset 0 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-./039: Aborted ( ulimit -c 0; exec "$@" ) ++./039: Killed ( exec "$@" ) + incompatible_features 0x1 + ERROR cluster 5 refcount=0 reference=1 + Rebuilding refcount structure +@@ -60,7 +60,7 @@ incompatible_features 0x0 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-./039: Aborted ( ulimit -c 0; exec "$@" ) ++./039: Killed ( exec "$@" ) + incompatible_features 0x0 + No errors were found on the image. + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Fix-test-outputs.patch b/SOURCES/kvm-iotests-Fix-test-outputs.patch new file mode 100644 index 0000000..4924ecb --- /dev/null +++ b/SOURCES/kvm-iotests-Fix-test-outputs.patch @@ -0,0 +1,147 @@ +From 2e9f9fc69b25cd73b46750497f494d3ea28d21e6 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:24 +0200 +Subject: [PATCH 30/42] iotests: Fix test outputs + +Message-id: <1434212556-3927-31-git-send-email-mreitz@redhat.com> +Patchwork-id: 66049 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 30/42] iotests: Fix test outputs +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +039, 060 and 061 all create images with referenced clusters having a +refcount of 0. Because previous commits changed handling of such errors, +these tests now have a different output. Fix it. + +Furthermore, 060 created a refblock with a refcount greater than one +which now results in having to rebuild the refcount structure as well. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit d26e6ec052b8768ab45654dbf35d5213818a2cb8) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/039.out | 10 ++++++++-- + tests/qemu-iotests/060.out | 10 ++++++++-- + tests/qemu-iotests/061.out | 18 ++++++++++++------ + 3 files changed, 28 insertions(+), 10 deletions(-) + +diff --git a/tests/qemu-iotests/039.out b/tests/qemu-iotests/039.out +index 077fa64..d25bf0b 100644 +--- a/tests/qemu-iotests/039.out ++++ b/tests/qemu-iotests/039.out +@@ -24,7 +24,10 @@ read 512/512 bytes at offset 0 + incompatible_features 0x1 + + == Repairing the image file must succeed == +-Repairing cluster 5 refcount=0 reference=1 ++ERROR cluster 5 refcount=0 reference=1 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 + The following inconsistencies were found and repaired: + + 0 leaked clusters +@@ -43,7 +46,10 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + incompatible_features 0x1 +-Repairing cluster 5 refcount=0 reference=1 ++ERROR cluster 5 refcount=0 reference=1 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + incompatible_features 0x0 +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index 4f0c6d0..88332e4 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -27,11 +27,15 @@ incompatible_features 0x0 + qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with refcount block); further corruption events will be suppressed + write failed: Input/output error + incompatible_features 0x2 +-Repairing refcount block 0 refcount=2 ++ERROR refcount block 0 refcount=2 ++ERROR cluster 2 refcount=1 reference=2 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=2 reference=1 + The following inconsistencies were found and repaired: + + 0 leaked clusters +- 1 corruptions ++ 2 corruptions + + Double checking the fixed image now... + No errors were found on the image. +@@ -59,6 +63,8 @@ incompatible_features 0x0 + qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with inactive L2 table); further corruption events will be suppressed + write failed: Input/output error + incompatible_features 0x2 ++ERROR cluster 4 refcount=1 reference=2 ++Leaked cluster 9 refcount=1 reference=0 + Repairing cluster 4 refcount=1 reference=2 + Repairing cluster 9 refcount=1 reference=0 + Repairing OFLAG_COPIED data cluster: l2_entry=8000000000040000 refcount=2 +diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out +index 4027e00..c5127cf 100644 +--- a/tests/qemu-iotests/061.out ++++ b/tests/qemu-iotests/061.out +@@ -76,8 +76,11 @@ autoclear_features 0x0 + refcount_order 4 + header_length 104 + +-Repairing cluster 5 refcount=0 reference=1 +-Repairing cluster 6 refcount=0 reference=1 ++ERROR cluster 5 refcount=0 reference=1 ++ERROR cluster 6 refcount=0 reference=1 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 + magic 0x514649fb + version 2 + backing_file_offset 0x0 +@@ -87,7 +90,7 @@ size 67108864 + crypt_method 0 + l1_size 1 + l1_table_offset 0x30000 +-refcount_table_offset 0x10000 ++refcount_table_offset 0x80000 + refcount_table_clusters 1 + nb_snapshots 0 + snapshot_offset 0x0 +@@ -230,8 +233,11 @@ autoclear_features 0x0 + refcount_order 4 + header_length 104 + +-Repairing cluster 5 refcount=0 reference=1 +-Repairing cluster 6 refcount=0 reference=1 ++ERROR cluster 5 refcount=0 reference=1 ++ERROR cluster 6 refcount=0 reference=1 ++Rebuilding refcount structure ++Repairing cluster 1 refcount=1 reference=0 ++Repairing cluster 2 refcount=1 reference=0 + magic 0x514649fb + version 3 + backing_file_offset 0x0 +@@ -241,7 +247,7 @@ size 67108864 + crypt_method 0 + l1_size 1 + l1_table_offset 0x30000 +-refcount_table_offset 0x10000 ++refcount_table_offset 0x80000 + refcount_table_clusters 1 + nb_snapshots 0 + snapshot_offset 0x0 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iotests-Repairing-error-during-snapshot-deletion.patch b/SOURCES/kvm-iotests-Repairing-error-during-snapshot-deletion.patch new file mode 100644 index 0000000..393c66d --- /dev/null +++ b/SOURCES/kvm-iotests-Repairing-error-during-snapshot-deletion.patch @@ -0,0 +1,199 @@ +From dd504cf4643e80d0b7afe16c82ac247a9e35a4af Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 18 Jun 2018 17:24:54 +0200 +Subject: [PATCH 06/17] iotests: Repairing error during snapshot deletion + +RH-Author: Max Reitz +Message-id: <20180618172454.27434-3-mreitz@redhat.com> +Patchwork-id: 80787 +O-Subject: [RHEL-7.6 qemu-kvm PATCH 2/2] iotests: Repairing error during snapshot deletion +Bugzilla: 1527122 +RH-Acked-by: John Snow +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +This adds a test for an I/O error during snapshot deletion, and maybe +more importantly, for how to repair the resulting image. If the +snapshot has been deleted before the error occurs, the only negative +result will be leaked clusters -- and those should be repairable with +qemu-img check -r leaks. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Message-id: 20180509200059.31125-3-mreitz@redhat.com +Signed-off-by: Max Reitz +(cherry picked from commit b41ad73a3bb972eb43cf52d28669f67ea3fe1762) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + tests/qemu-iotests/217.out + +The error message when a snapshot failed to be deleted is less verbose +(just based on errno instead of a nice Error object). + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/217 | 90 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/217.out | 42 ++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 133 insertions(+) + create mode 100755 tests/qemu-iotests/217 + create mode 100644 tests/qemu-iotests/217.out + +diff --git a/tests/qemu-iotests/217 b/tests/qemu-iotests/217 +new file mode 100755 +index 0000000..d3ab5d7 +--- /dev/null ++++ b/tests/qemu-iotests/217 +@@ -0,0 +1,90 @@ ++#!/bin/bash ++# ++# I/O errors when working with internal qcow2 snapshots, and repairing ++# the result ++# ++# Copyright (C) 2018 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++seq=$(basename $0) ++echo "QA output created by $seq" ++ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++ rm -f "$TEST_DIR/blkdebug.conf" ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This test is specific to qcow2 ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++# This test needs clusters with at least a refcount of 2 so that ++# OFLAG_COPIED is not set. refcount_bits=1 is therefore unsupported. ++_unsupported_imgopts 'refcount_bits=1[^0-9]' ++ ++echo ++echo '=== Simulating an I/O error during snapshot deletion ===' ++echo ++ ++_make_test_img 64M ++$QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io ++ ++# Create the snapshot ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++ ++# Verify the snapshot is there ++echo ++_img_info | grep 'Snapshot list' ++echo '(Snapshot filtered)' ++echo ++ ++# Try to delete the snapshot (with an error happening when freeing the ++# then leaked clusters) ++cat > "$TEST_DIR/blkdebug.conf" < +Date: Mon, 17 Mar 2014 22:45:31 +0100 +Subject: [PATCH 6/6] iotests: Test corruption during COW request + +RH-Author: Max Reitz +Message-id: <1395096331-12610-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 58121 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/3] iotests: Test corruption during COW request +Bugzilla: 1048575 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +BZ: 1048575 + +Extend test file 060 by a test case for corruption occuring concurrently +to a COW request. QEMU should not crash but rather return an appropriate +error message. + +Signed-off-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 98d39e34fe95f8609be3ccbd1b67926631d2c7c0) + +Conflicts: + tests/qemu-iotests/060 + +As the series allowing blkdebug to be used through the QMP interfaces +has not yet been backported, this test may not use +"-o file.driver=blkdebug" to select the blkdebug block driver, but +rather "blkdebug::$TEST_IMG" as the filename. + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/060 | 26 ++++++++++++++++++++++++++ + tests/qemu-iotests/060.out | 15 +++++++++++++++ + 2 files changed, 41 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/060 | 26 ++++++++++++++++++++++++++ + tests/qemu-iotests/060.out | 15 +++++++++++++++ + 2 files changed, 41 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +index bbb1909..2abd566 100644 +--- a/tests/qemu-iotests/060 ++++ b/tests/qemu-iotests/060 +@@ -138,6 +138,32 @@ $QEMU_IMG snapshot -a foo "$TEST_IMG" + _check_test_img + $QEMU_IO -c "$OPEN_RO" -c "read -P 1 0 512" | _filter_qemu_io + ++echo ++echo "=== Testing overlap while COW is in flight ===" ++echo ++# compat=0.10 is required in order to make the following discard actually ++# unallocate the sector rather than make it a zero sector - we want COW, after ++# all. ++IMGOPTS='compat=0.10' _make_test_img 1G ++# Write two clusters, the second one enforces creation of an L2 table after ++# the first data cluster. ++$QEMU_IO -c 'write 0k 64k' -c 'write 512M 64k' "$TEST_IMG" | _filter_qemu_io ++# Discard the first cluster. This cluster will soon enough be reallocated and ++# used for COW. ++$QEMU_IO -c 'discard 0k 64k' "$TEST_IMG" | _filter_qemu_io ++# Now, corrupt the image by marking the second L2 table cluster as free. ++poke_file "$TEST_IMG" '131084' "\x00\x00" # 0x2000c ++# Start a write operation requiring COW on the image stopping it right before ++# doing the read; then, trigger the corruption prevention by writing anything to ++# any unallocated cluster, leading to an attempt to overwrite the second L2 ++# table. Finally, resume the COW write and see it fail (but not crash). ++echo "open blkdebug::$TEST_IMG ++break cow_read 0 ++aio_write 0k 1k ++wait_break 0 ++write 64k 64k ++resume 0" | $QEMU_IO | _filter_qemu_io ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index 6c7bdbb..a517948 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -78,4 +78,19 @@ read 512/512 bytes at offset 0 + No errors were found on the image. + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing overlap while COW is in flight === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 65536/65536 bytes at offset 536870912 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++discard 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qcow2: Preventing invalid write on metadata (overlaps with active L2 table); image marked as corrupt. ++blkdebug: Suspended request '0' ++write failed: Input/output error ++blkdebug: Resuming request '0' ++aio_write failed: No medium found + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-isa-Clean-up-use-of-cannot_instantiate_with_device_a.patch b/SOURCES/kvm-isa-Clean-up-use-of-cannot_instantiate_with_device_a.patch new file mode 100644 index 0000000..efac809 --- /dev/null +++ b/SOURCES/kvm-isa-Clean-up-use-of-cannot_instantiate_with_device_a.patch @@ -0,0 +1,280 @@ +From 7e9beb48fd9438354ea6d6747cbbefdc3b553590 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:20 +0100 +Subject: [PATCH 44/81] isa: Clean up use of cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-16-git-send-email-kwolf@redhat.com> +Patchwork-id: 55541 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 15/17] isa: Clean up use of cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Drop it when there's no obvious reason why device_add could not work. +Else keep and document why. + +* isa-fdc: drop + +* i8042: drop, even though its I/O base is hardcoded (because you + could conceivably still add one to a board that has none), and even + though PC board code wires up the A20 line (because that wiring is + optional) + +* port92: keep because it needs additional wiring by port92_init() + +* mc146818rtc: keep because it needs to be wired up by rtc_init() + +* m48t59_isa: keep because needs to be wired up by m48t59_init_isa() + +* isa-pit, kvm-pit: keep (in their abstract base pic-common) because + the PIT needs additional wiring by board code, depending on HPET + presence + +* pcspk: keep because of pointer property pit, and because realize + sets global pcspk_state + +* vmmouse: keep because of pointer property ps2_mouse + +* vmport: keep because realize sets global port_state + +* isa-i8259, kvm-i8259: keep (in their abstract base pic-common), + because the PICs' IRQ input lines are set up by board code, and the + wiring of the slave to the master is hard-coded in device model code +(cherry picked from pending upstream submission) + +Conflicts: + hw/i386/pc.c + hw/input/pckbd.c + hw/input/vmmouse.c + hw/intc/i8259_common.c + hw/misc/vmport.c + hw/timer/m48t59.c + hw/timer/mc146818rtc.c + +Conflicts because we don't have commit db895a1 "isa: Use realizefn +for ISADevice". Resolution is straightforward. + +We got one more ISA device to cover than upstream: + +* pvpanic : keep, so the future backport of commit a5d3f64 "hw/misc: + make pvpanic known to user" can drop it, just like it dropped + no_user upstream. Artifact of backporting out-of-order. + +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + hw/audio/pcspk.c | 3 ++- + hw/block/fdc.c | 1 - + hw/i386/pc.c | 7 ++++++- + hw/input/pckbd.c | 1 - + hw/input/vmmouse.c | 3 ++- + hw/intc/i8259_common.c | 8 +++++++- + hw/misc/pvpanic.c | 6 +++++- + hw/misc/vmport.c | 3 ++- + hw/timer/i8254_common.c | 7 ++++++- + hw/timer/m48t59.c | 3 ++- + hw/timer/mc146818rtc.c | 3 ++- + 11 files changed, 34 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/audio/pcspk.c | 3 ++- + hw/block/fdc.c | 1 - + hw/i386/pc.c | 7 ++++++- + hw/input/pckbd.c | 1 - + hw/input/vmmouse.c | 3 ++- + hw/intc/i8259_common.c | 8 +++++++- + hw/misc/pvpanic.c | 6 +++++- + hw/misc/vmport.c | 3 ++- + hw/timer/i8254_common.c | 7 ++++++- + hw/timer/m48t59.c | 3 ++- + hw/timer/mc146818rtc.c | 3 ++- + 11 files changed, 34 insertions(+), 11 deletions(-) + +diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c +index 9186304..c54b78d 100644 +--- a/hw/audio/pcspk.c ++++ b/hw/audio/pcspk.c +@@ -188,8 +188,9 @@ static void pcspk_class_initfn(ObjectClass *klass, void *data) + + ic->init = pcspk_initfn; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = pcspk_properties; ++ /* Reason: pointer property "pit", realize sets global pcspk_state */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo pcspk_info = { +diff --git a/hw/block/fdc.c b/hw/block/fdc.c +index 1524e09..f3b5bec 100644 +--- a/hw/block/fdc.c ++++ b/hw/block/fdc.c +@@ -2206,7 +2206,6 @@ static void isabus_fdc_class_init(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = isabus_fdc_init1; + dc->fw_name = "fdc"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = fdctrl_external_reset_isa; + dc->vmsd = &vmstate_isa_fdc; + dc->props = isa_fdc_properties; +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 0a8840a..9e5a082 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -538,9 +538,14 @@ static void port92_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = port92_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = port92_reset; + dc->vmsd = &vmstate_port92_isa; ++ /* ++ * Reason: unlike ordinary ISA devices, this one needs additional ++ * wiring: its A20 output line needs to be wired up by ++ * port92_init(). ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo port92_info = { +diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c +index 98b8b15..ed396bf 100644 +--- a/hw/input/pckbd.c ++++ b/hw/input/pckbd.c +@@ -514,7 +514,6 @@ static void i8042_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = i8042_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_kbd_isa; + } + +diff --git a/hw/input/vmmouse.c b/hw/input/vmmouse.c +index c9d5131..c6059a4 100644 +--- a/hw/input/vmmouse.c ++++ b/hw/input/vmmouse.c +@@ -284,10 +284,11 @@ static void vmmouse_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = vmmouse_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = vmmouse_reset; + dc->vmsd = &vmstate_vmmouse; + dc->props = vmmouse_properties; ++ /* Reason: pointer property "ps2_mouse" */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo vmmouse_info = { +diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c +index 70868a5..3358341 100644 +--- a/hw/intc/i8259_common.c ++++ b/hw/intc/i8259_common.c +@@ -139,9 +139,15 @@ static void pic_common_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + + dc->vmsd = &vmstate_pic_common; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = pic_properties_common; + ic->init = pic_init_common; ++ /* ++ * Reason: unlike ordinary ISA devices, the PICs need additional ++ * wiring: its IRQ input lines are set up by board code, and the ++ * wiring of the slave to the master is hard-coded in device model ++ * code. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo pic_common_type = { +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index af4a8b2..439d636 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -125,8 +125,12 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + + ic->init = pvpanic_isa_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = pvpanic_isa_properties; ++ /* ++ * To be dropped in future backport of commit a5d3f64 "hw/misc: ++ * make pvpanic known to user": ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static TypeInfo pvpanic_isa_info = { +diff --git a/hw/misc/vmport.c b/hw/misc/vmport.c +index ab7adf1..d7e1182 100644 +--- a/hw/misc/vmport.c ++++ b/hw/misc/vmport.c +@@ -156,7 +156,8 @@ static void vmport_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = vmport_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ ++ /* Reason: realize sets global port_state */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo vmport_info = { +diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c +index 8f01313..d0737fa 100644 +--- a/hw/timer/i8254_common.c ++++ b/hw/timer/i8254_common.c +@@ -291,7 +291,12 @@ static void pit_common_class_init(ObjectClass *klass, void *data) + + ic->init = pit_init_common; + dc->vmsd = &vmstate_pit_common; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ ++ /* ++ * Reason: unlike ordinary ISA devices, the PIT may need to be ++ * wired to the HPET, and because of that, some wiring is always ++ * done by board code. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo pit_common_type = { +diff --git a/hw/timer/m48t59.c b/hw/timer/m48t59.c +index e536bb9..d8a13fb 100644 +--- a/hw/timer/m48t59.c ++++ b/hw/timer/m48t59.c +@@ -740,9 +740,10 @@ static void m48t59_isa_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = m48t59_init_isa1; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = m48t59_reset_isa; + dc->props = m48t59_isa_properties; ++ /* Reason: needs to be wired up by m48t59_init_isa() */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo m48t59_isa_info = { +diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c +index 7a70556..432b16c 100644 +--- a/hw/timer/mc146818rtc.c ++++ b/hw/timer/mc146818rtc.c +@@ -904,9 +904,10 @@ static void rtc_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = rtc_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_rtc; + dc->props = mc146818rtc_properties; ++ /* Reason: needs to be wired up by rtc_init() */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo mc146818rtc_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-isapc-Fix-non-KVM-qemu-boot-read-write-memory-for-is.patch b/SOURCES/kvm-isapc-Fix-non-KVM-qemu-boot-read-write-memory-for-is.patch new file mode 100644 index 0000000..4d10feb --- /dev/null +++ b/SOURCES/kvm-isapc-Fix-non-KVM-qemu-boot-read-write-memory-for-is.patch @@ -0,0 +1,135 @@ +From 5554a8bea7ed5a16e306fc384a88fe4ff25d9f1a Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:55 +0100 +Subject: [PATCH 05/22] isapc: Fix non-KVM qemu boot (read/write memory for isapc BIOS) + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-6-git-send-email-lersek@redhat.com> +Patchwork-id: 56618 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 05/18] isapc: Fix non-KVM qemu boot (read/write memory for isapc BIOS) +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones +RH-Acked-by: Kevin Wolf + +From: Jordan Justen + +The isapc machine with seabios currently requires the BIOS region +to be read/write memory rather than read-only memory. + +KVM currently cannot support the BIOS as a ROM region, but qemu +in non-KVM mode can. Based on this, isapc machine currently only +works with KVM. + +To work-around this isapc issue, this change avoids marking the +BIOS as readonly for isapc. + +This change also will allow KVM to start supporting ROM mode +via KVM_CAP_READONLY_MEM. + +Signed-off-by: Jordan Justen +Reviewed-by: Paolo Bonzini +Message-id: 1369816047-16384-2-git-send-email-jordan.l.justen@intel.com +Signed-off-by: Anthony Liguori +(cherry picked from commit dade922f357c709c02eed2e1b1891453896756dd) +Signed-off-by: Laszlo Ersek +--- + hw/block/pc_sysfw.c | 16 +++++++++++----- + hw/i386/pc_piix.c | 5 +++++ + 2 files changed, 16 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pc_sysfw.c | 16 +++++++++++----- + hw/i386/pc_piix.c | 5 +++++ + 2 files changed, 16 insertions(+), 5 deletions(-) + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 6149b20..4d82c70 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -39,6 +39,7 @@ + typedef struct PcSysFwDevice { + SysBusDevice busdev; + uint8_t rom_only; ++ uint8_t isapc_ram_fw; + } PcSysFwDevice; + + static void pc_isa_bios_init(MemoryRegion *rom_memory, +@@ -136,7 +137,7 @@ static void pc_system_flash_init(MemoryRegion *rom_memory, + pc_isa_bios_init(rom_memory, flash_mem, size); + } + +-static void old_pc_system_rom_init(MemoryRegion *rom_memory) ++static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) + { + char *filename; + MemoryRegion *bios, *isa_bios; +@@ -160,7 +161,9 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory) + bios = g_malloc(sizeof(*bios)); + memory_region_init_ram(bios, "pc.bios", bios_size); + vmstate_register_ram_global(bios); +- memory_region_set_readonly(bios, true); ++ if (!isapc_ram_fw) { ++ memory_region_set_readonly(bios, true); ++ } + ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1); + if (ret != 0) { + bios_error: +@@ -183,7 +186,9 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory) + 0x100000 - isa_bios_size, + isa_bios, + 1); +- memory_region_set_readonly(isa_bios, true); ++ if (!isapc_ram_fw) { ++ memory_region_set_readonly(isa_bios, true); ++ } + + /* map all the bios at the top of memory */ + memory_region_add_subregion(rom_memory, +@@ -213,7 +218,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory) + qdev_init_nofail(DEVICE(sysfw_dev)); + + if (sysfw_dev->rom_only) { +- old_pc_system_rom_init(rom_memory); ++ old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); + return; + } + +@@ -231,7 +236,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory) + exit(1); + } else { + sysfw_dev->rom_only = 1; +- old_pc_system_rom_init(rom_memory); ++ old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); + return; + } + } +@@ -252,6 +257,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory) + } + + static Property pcsysfw_properties[] = { ++ DEFINE_PROP_UINT8("isapc_ram_fw", PcSysFwDevice, isapc_ram_fw, 0), + DEFINE_PROP_UINT8("rom_only", PcSysFwDevice, rom_only, 0), + DEFINE_PROP_END_OF_LIST(), + }; +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 12351f9..0a8a4e5 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -714,6 +714,11 @@ static QEMUMachine isapc_machine = { + .property = "rom_only", + .value = stringify(1), + }, ++ { ++ .driver = "pc-sysfw", ++ .property = "isapc_ram_fw", ++ .value = stringify(1), ++ }, + { /* end of list */ } + }, + DEFAULT_MACHINE_OPTIONS, +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-Don-t-set-error-if-already-set-in-iscsi_do_inq.patch b/SOURCES/kvm-iscsi-Don-t-set-error-if-already-set-in-iscsi_do_inq.patch new file mode 100644 index 0000000..0b528b7 --- /dev/null +++ b/SOURCES/kvm-iscsi-Don-t-set-error-if-already-set-in-iscsi_do_inq.patch @@ -0,0 +1,53 @@ +From 9085aa99ac8f2ac99440e23cfed4b80c44f89814 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Sun, 6 Apr 2014 01:10:17 +0200 +Subject: [PATCH 08/12] iscsi: Don't set error if already set in iscsi_do_inquiry + +RH-Author: Fam Zheng +Message-id: <1396746617-11978-1-git-send-email-famz@redhat.com> +Patchwork-id: 58350 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 8/7] iscsi: Don't set error if already set in iscsi_do_inquiry +Bugzilla: 1083413 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1083413 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7308220 + +This eliminates the possible assertion failure in error_setg(). + +Signed-off-by: Fam Zheng +Reviewed-by: Paolo Bonzini +Signed-off-by: Kevin Wolf +(cherry picked from commit cbee81f6de57ddc1b21ba28f01f6a3b5d87428a5) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 78ab91e..ff5ca20 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1280,8 +1280,10 @@ static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, int lun, + return task; + + fail: +- error_setg(errp, "iSCSI: Inquiry command failed : %s", +- iscsi_get_error(iscsi)); ++ if (!error_is_set(errp)) { ++ error_setg(errp, "iSCSI: Inquiry command failed : %s", ++ iscsi_get_error(iscsi)); ++ } + if (task != NULL) { + scsi_free_scsi_task(task); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-Refuse-to-open-as-writable-if-the-LUN-is-write.patch b/SOURCES/kvm-iscsi-Refuse-to-open-as-writable-if-the-LUN-is-write.patch new file mode 100644 index 0000000..8fd957d --- /dev/null +++ b/SOURCES/kvm-iscsi-Refuse-to-open-as-writable-if-the-LUN-is-write.patch @@ -0,0 +1,103 @@ +From 8f412efbb8bb57fde0f924a7ad084f1c536c4a0b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 20 Jan 2015 03:42:13 +0100 +Subject: [PATCH 06/16] iscsi: Refuse to open as writable if the LUN is write + protected + +Message-id: <1421725333-27072-1-git-send-email-famz@redhat.com> +Patchwork-id: 63370 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v2] iscsi: Refuse to open as writable if the LUN is write protected +Bugzilla: 1032412 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +Before, when a write protected iSCSI target is attached as scsi-disk +with BDRV_O_RDWR, we report it as writable, while in fact all writes +will fail. + +One way to improve this is to report write protect flag as true to +guest, but a even better way is to refuse using a write protected LUN to +guest. + +Target write protect flag is checked with a mode sense query. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit c1d4096b0f033d0a52c542f0948403783c3682e9) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/iscsi.c + +Trivial context conflict: AioContext attach/detach functions are not +present in downstream. +--- + block/iscsi.c | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 4f42f29..3d61dd7 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1290,6 +1290,41 @@ fail: + return NULL; + } + ++ ++static bool iscsi_is_write_protected(IscsiLun *iscsilun) ++{ ++ struct scsi_task *task; ++ struct scsi_mode_sense *ms = NULL; ++ bool wrprotected = false; ++ ++ task = iscsi_modesense6_sync(iscsilun->iscsi, iscsilun->lun, ++ 1, SCSI_MODESENSE_PC_CURRENT, ++ 0x3F, 0, 255); ++ if (task == NULL) { ++ error_report("iSCSI: Failed to send MODE_SENSE(6) command: %s", ++ iscsi_get_error(iscsilun->iscsi)); ++ goto out; ++ } ++ ++ if (task->status != SCSI_STATUS_GOOD) { ++ error_report("iSCSI: Failed MODE_SENSE(6), LUN assumed writable"); ++ goto out; ++ } ++ ms = scsi_datain_unmarshall(task); ++ if (!ms) { ++ error_report("iSCSI: Failed to unmarshall MODE_SENSE(6) data: %s", ++ iscsi_get_error(iscsilun->iscsi)); ++ goto out; ++ } ++ wrprotected = ms->device_specific_parameter & 0x80; ++ ++out: ++ if (task) { ++ scsi_free_scsi_task(task); ++ } ++ return wrprotected; ++} ++ + /* + * We support iscsi url's on the form + * iscsi://[%@][:]// +@@ -1405,6 +1440,14 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + scsi_free_scsi_task(task); + task = NULL; + ++ /* Check the write protect flag of the LUN if we want to write */ ++ if (iscsilun->type == TYPE_DISK && (flags & BDRV_O_RDWR) && ++ iscsi_is_write_protected(iscsilun)) { ++ error_setg(errp, "Cannot open a write protected LUN as read-write"); ++ ret = -EACCES; ++ goto out; ++ } ++ + iscsi_readcapacity_sync(iscsilun, &local_err); + if (local_err != NULL) { + error_propagate(errp, local_err); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-iscsi-Remember-to-set-ret-for-iscsi_open-in-error-ca.patch b/SOURCES/kvm-iscsi-Remember-to-set-ret-for-iscsi_open-in-error-ca.patch new file mode 100644 index 0000000..2147ea8 --- /dev/null +++ b/SOURCES/kvm-iscsi-Remember-to-set-ret-for-iscsi_open-in-error-ca.patch @@ -0,0 +1,42 @@ +From 20bb4af6d97719f250a0424e55b7342601a2b7ef Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 14 Apr 2014 02:05:19 +0200 +Subject: [PATCH 09/12] iscsi: Remember to set ret for iscsi_open in error case + +RH-Author: Fam Zheng +Message-id: <1397441119-8563-1-git-send-email-famz@redhat.com> +Patchwork-id: 58457 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 9/7] iscsi: Remember to set ret for iscsi_open in error case +Bugzilla: 1083413 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit cd82b6fb4daf87f17742f7971ba6cb90d23e6703) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index ff5ca20..9fe3be8 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1408,6 +1408,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + iscsi_readcapacity_sync(iscsilun, &local_err); + if (local_err != NULL) { + error_propagate(errp, local_err); ++ ret = -EINVAL; + goto out; + } + bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-Set-bs-request_alignment.patch b/SOURCES/kvm-iscsi-Set-bs-request_alignment.patch new file mode 100644 index 0000000..a9cf204 --- /dev/null +++ b/SOURCES/kvm-iscsi-Set-bs-request_alignment.patch @@ -0,0 +1,47 @@ +From 36fb92fbc1edd351b923199559a0a923da9f72c4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 29 Nov 2011 12:41:35 +0100 +Subject: [PATCH 30/37] iscsi: Set bs->request_alignment + +Message-id: <1392117622-28812-31-git-send-email-kwolf@redhat.com> +Patchwork-id: 57195 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 30/37] iscsi: Set bs->request_alignment +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +The iSCSI backend already gets the block size from the READ CAPACITY +command it sends. Save it so that the generic block layer gets it +too. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 2c9880c45e2f9a98d11d44ce9966515c23870a86) + +Signed-off-by: Kevin Wolf +--- + block/iscsi.c | 1 + + 1 file changed, 1 insertion(+) +--- + block/iscsi.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 83e4f15..63a21e2 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1397,6 +1397,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + goto out; + } + bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); ++ bs->request_alignment = iscsilun->block_size; + + /* Medium changer or tape. We dont have any emulation for this so this must + * be sg ioctl compatible. We force it to be sg, otherwise qemu will try +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-Use-bs-sg-for-everything-else-than-disks.patch b/SOURCES/kvm-iscsi-Use-bs-sg-for-everything-else-than-disks.patch new file mode 100644 index 0000000..6f2fe32 --- /dev/null +++ b/SOURCES/kvm-iscsi-Use-bs-sg-for-everything-else-than-disks.patch @@ -0,0 +1,63 @@ +From 9273caf09add518239e77f02081bc4f455e24425 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 10 Mar 2014 11:07:21 +0100 +Subject: [PATCH 13/16] iscsi: Use bs->sg for everything else than disks + +RH-Author: Kevin Wolf +Message-id: <1394449642-13562-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 58063 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] iscsi: Use bs->sg for everything else than disks +Bugzilla: 1067784 +RH-Acked-by: Juan Quintela +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +The current iscsi block driver code makes the rather arbitrary decision +that TYPE_MEDIUM_CHANGER and TYPE_TAPE devices have bs->sg = 1 and all +other device types are disks. + +Instead of this, check for TYPE_DISK to expose the disk interface and +make everything else bs->sg = 1. In particular, this includes devices +with TYPE_STORAGE_ARRAY, which is what LUN 0 of an iscsi target is. +(See https://bugzilla.redhat.com/show_bug.cgi?id=1067784 for the exact +scenario.) + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +Acked-by: Paolo Bonzini +(cherry picked from commit f47c3f5a800a927238d20de9f99b5c77f0bc3fe0) + +Signed-off-by: Kevin Wolf +--- + block/iscsi.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 63a21e2..64a8295 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1399,12 +1399,11 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); + bs->request_alignment = iscsilun->block_size; + +- /* Medium changer or tape. We dont have any emulation for this so this must +- * be sg ioctl compatible. We force it to be sg, otherwise qemu will try +- * to read from the device to guess the image format. ++ /* We don't have any emulation for devices other than disks and CD-ROMs, so ++ * this must be sg ioctl compatible. We force it to be sg, otherwise qemu ++ * will try to read from the device to guess the image format. + */ +- if (iscsilun->type == TYPE_MEDIUM_CHANGER || +- iscsilun->type == TYPE_TAPE) { ++ if (iscsilun->type != TYPE_DISK && iscsilun->type != TYPE_ROM) { + bs->sg = 1; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-add-.bdrv_get_block_status.patch.patch.patch b/SOURCES/kvm-iscsi-add-.bdrv_get_block_status.patch.patch.patch new file mode 100644 index 0000000..185c3de --- /dev/null +++ b/SOURCES/kvm-iscsi-add-.bdrv_get_block_status.patch.patch.patch @@ -0,0 +1,205 @@ +From a976099b24c5db9cb4ab1a059b01610d2fc48537 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:52 +0100 +Subject: [PATCH 04/50] iscsi: add .bdrv_get_block_status + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-7-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56043 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 06/52] iscsi: add .bdrv_get_block_status +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +this patch adds a coroutine for .bdrv_co_block_status as well as +a generic framework that can be used to build coroutines in block/iscsi. + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit 54a5c1d5db47b4146490937ed73e3f56022aaba6) +--- + block/iscsi.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 136 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 136 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 6804b6d..f8d021a 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -58,6 +58,15 @@ typedef struct IscsiLun { + struct scsi_inquiry_block_limits bl; + } IscsiLun; + ++typedef struct IscsiTask { ++ int status; ++ int complete; ++ int retries; ++ int do_retry; ++ struct scsi_task *task; ++ Coroutine *co; ++} IscsiTask; ++ + typedef struct IscsiAIOCB { + BlockDriverAIOCB common; + QEMUIOVector *qiov; +@@ -111,6 +120,41 @@ iscsi_schedule_bh(IscsiAIOCB *acb) + qemu_bh_schedule(acb->bh); + } + ++static void ++iscsi_co_generic_cb(struct iscsi_context *iscsi, int status, ++ void *command_data, void *opaque) ++{ ++ struct IscsiTask *iTask = opaque; ++ struct scsi_task *task = command_data; ++ ++ iTask->complete = 1; ++ iTask->status = status; ++ iTask->do_retry = 0; ++ iTask->task = task; ++ ++ if (iTask->retries-- > 0 && status == SCSI_STATUS_CHECK_CONDITION ++ && task->sense.key == SCSI_SENSE_UNIT_ATTENTION) { ++ iTask->do_retry = 1; ++ goto out; ++ } ++ ++ if (status != SCSI_STATUS_GOOD) { ++ error_report("iSCSI: Failure. %s", iscsi_get_error(iscsi)); ++ } ++ ++out: ++ if (iTask->co) { ++ qemu_coroutine_enter(iTask->co, NULL); ++ } ++} ++ ++static void iscsi_co_init_iscsitask(IscsiLun *iscsilun, struct IscsiTask *iTask) ++{ ++ *iTask = (struct IscsiTask) { ++ .co = qemu_coroutine_self(), ++ .retries = ISCSI_CMD_RETRIES, ++ }; ++} + + static void + iscsi_abort_task_cb(struct iscsi_context *iscsi, int status, void *command_data, +@@ -854,6 +898,96 @@ iscsi_getlength(BlockDriverState *bs) + return len; + } + ++static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs, ++ int64_t sector_num, ++ int nb_sectors, int *pnum) ++{ ++ IscsiLun *iscsilun = bs->opaque; ++ struct scsi_get_lba_status *lbas = NULL; ++ struct scsi_lba_status_descriptor *lbasd = NULL; ++ struct IscsiTask iTask; ++ int64_t ret; ++ ++ iscsi_co_init_iscsitask(iscsilun, &iTask); ++ ++ if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) { ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* default to all sectors allocated */ ++ ret = BDRV_BLOCK_DATA; ++ ret |= (sector_num << BDRV_SECTOR_BITS) | BDRV_BLOCK_OFFSET_VALID; ++ *pnum = nb_sectors; ++ ++ /* LUN does not support logical block provisioning */ ++ if (iscsilun->lbpme == 0) { ++ goto out; ++ } ++ ++retry: ++ if (iscsi_get_lba_status_task(iscsilun->iscsi, iscsilun->lun, ++ sector_qemu2lun(sector_num, iscsilun), ++ 8 + 16, iscsi_co_generic_cb, ++ &iTask) == NULL) { ++ ret = -EIO; ++ goto out; ++ } ++ ++ while (!iTask.complete) { ++ iscsi_set_events(iscsilun); ++ qemu_coroutine_yield(); ++ } ++ ++ if (iTask.do_retry) { ++ if (iTask.task != NULL) { ++ scsi_free_scsi_task(iTask.task); ++ iTask.task = NULL; ++ } ++ goto retry; ++ } ++ ++ if (iTask.status != SCSI_STATUS_GOOD) { ++ /* in case the get_lba_status_callout fails (i.e. ++ * because the device is busy or the cmd is not ++ * supported) we pretend all blocks are allocated ++ * for backwards compatiblity */ ++ goto out; ++ } ++ ++ lbas = scsi_datain_unmarshall(iTask.task); ++ if (lbas == NULL) { ++ ret = -EIO; ++ goto out; ++ } ++ ++ lbasd = &lbas->descriptors[0]; ++ ++ if (sector_qemu2lun(sector_num, iscsilun) != lbasd->lba) { ++ ret = -EIO; ++ goto out; ++ } ++ ++ *pnum = sector_lun2qemu(lbasd->num_blocks, iscsilun); ++ if (*pnum > nb_sectors) { ++ *pnum = nb_sectors; ++ } ++ ++ if (lbasd->provisioning == SCSI_PROVISIONING_TYPE_DEALLOCATED || ++ lbasd->provisioning == SCSI_PROVISIONING_TYPE_ANCHORED) { ++ ret &= ~BDRV_BLOCK_DATA; ++ if (iscsilun->lbprz) { ++ ret |= BDRV_BLOCK_ZERO; ++ } ++ } ++ ++out: ++ if (iTask.task != NULL) { ++ scsi_free_scsi_task(iTask.task); ++ } ++ return ret; ++} ++ + static int parse_chap(struct iscsi_context *iscsi, const char *target) + { + QemuOptsList *list; +@@ -1406,6 +1540,8 @@ static BlockDriver bdrv_iscsi = { + .bdrv_getlength = iscsi_getlength, + .bdrv_truncate = iscsi_truncate, + ++ .bdrv_co_get_block_status = iscsi_co_get_block_status, ++ + .bdrv_aio_readv = iscsi_aio_readv, + .bdrv_aio_writev = iscsi_aio_writev, + .bdrv_aio_flush = iscsi_aio_flush, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-add-bdrv_co_write_zeroes.patch.patch.patch b/SOURCES/kvm-iscsi-add-bdrv_co_write_zeroes.patch.patch.patch new file mode 100644 index 0000000..7096251 --- /dev/null +++ b/SOURCES/kvm-iscsi-add-bdrv_co_write_zeroes.patch.patch.patch @@ -0,0 +1,130 @@ +From 0923f651d0a8ec837dc2c85dc6fbb9cfabd86172 Mon Sep 17 00:00:00 2001 +Message-Id: <0923f651d0a8ec837dc2c85dc6fbb9cfabd86172.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:06 +0100 +Subject: [PATCH 18/50] iscsi: add bdrv_co_write_zeroes + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-21-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56057 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 20/52] iscsi: add bdrv_co_write_zeroes +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d4cd961507e6f013fd0f9b1dc609f15ed2aaa40d) +--- + block/iscsi.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 64 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 64 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 567a63a..3e3ae64 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -56,6 +56,7 @@ typedef struct IscsiLun { + uint8_t lbprz; + struct scsi_inquiry_logical_block_provisioning lbp; + struct scsi_inquiry_block_limits bl; ++ unsigned char *zeroblock; + } IscsiLun; + + typedef struct IscsiTask { +@@ -961,6 +962,65 @@ retry: + return 0; + } + ++#if defined(SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED) ++ ++static int ++coroutine_fn iscsi_co_write_zeroes(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, BdrvRequestFlags flags) ++{ ++ IscsiLun *iscsilun = bs->opaque; ++ struct IscsiTask iTask; ++ uint64_t lba; ++ uint32_t nb_blocks; ++ ++ if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) { ++ return -EINVAL; ++ } ++ ++ if (!iscsilun->lbp.lbpws) { ++ /* WRITE SAME is not supported by the target */ ++ return -ENOTSUP; ++ } ++ ++ lba = sector_qemu2lun(sector_num, iscsilun); ++ nb_blocks = sector_qemu2lun(nb_sectors, iscsilun); ++ ++ if (iscsilun->zeroblock == NULL) { ++ iscsilun->zeroblock = g_malloc0(iscsilun->block_size); ++ } ++ ++ iscsi_co_init_iscsitask(iscsilun, &iTask); ++retry: ++ if (iscsi_writesame16_task(iscsilun->iscsi, iscsilun->lun, lba, ++ iscsilun->zeroblock, iscsilun->block_size, ++ nb_blocks, 0, !!(flags & BDRV_REQ_MAY_UNMAP), ++ 0, 0, iscsi_co_generic_cb, &iTask) == NULL) { ++ return -EIO; ++ } ++ ++ while (!iTask.complete) { ++ iscsi_set_events(iscsilun); ++ qemu_coroutine_yield(); ++ } ++ ++ if (iTask.task != NULL) { ++ scsi_free_scsi_task(iTask.task); ++ iTask.task = NULL; ++ } ++ ++ if (iTask.do_retry) { ++ goto retry; ++ } ++ ++ if (iTask.status != SCSI_STATUS_GOOD) { ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++#endif /* SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED */ ++ + static int parse_chap(struct iscsi_context *iscsi, const char *target) + { + QemuOptsList *list; +@@ -1423,6 +1483,7 @@ static void iscsi_close(BlockDriverState *bs) + } + qemu_aio_set_fd_handler(iscsi_get_fd(iscsi), NULL, NULL, NULL, NULL); + iscsi_destroy_context(iscsi); ++ g_free(iscsilun->zeroblock); + memset(iscsilun, 0, sizeof(IscsiLun)); + } + +@@ -1538,6 +1599,9 @@ static BlockDriver bdrv_iscsi = { + + .bdrv_co_get_block_status = iscsi_co_get_block_status, + .bdrv_co_discard = iscsi_co_discard, ++#if defined(SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED) ++ .bdrv_co_write_zeroes = iscsi_co_write_zeroes, ++#endif + + .bdrv_aio_readv = iscsi_aio_readv, + .bdrv_aio_writev = iscsi_aio_writev, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-add-logical-block-provisioning-information-to-.patch.patch b/SOURCES/kvm-iscsi-add-logical-block-provisioning-information-to-.patch.patch new file mode 100644 index 0000000..ec63090 --- /dev/null +++ b/SOURCES/kvm-iscsi-add-logical-block-provisioning-information-to-.patch.patch @@ -0,0 +1,144 @@ +From 7f3514b0392635f132a8e1158d91536e5aed7783 Mon Sep 17 00:00:00 2001 +Message-Id: <7f3514b0392635f132a8e1158d91536e5aed7783.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:51 +0100 +Subject: [PATCH 03/50] iscsi: add logical block provisioning information to + iscsilun + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-6-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56042 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 05/52] iscsi: add logical block provisioning information to iscsilun +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit f18a7cbb0992a02225d26afd336aaf47de75e11c) +--- + block/iscsi.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 77 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 77 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 8086957..6804b6d 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -52,6 +52,10 @@ typedef struct IscsiLun { + uint64_t num_blocks; + int events; + QEMUTimer *nop_timer; ++ uint8_t lbpme; ++ uint8_t lbprz; ++ struct scsi_inquiry_logical_block_provisioning lbp; ++ struct scsi_inquiry_block_limits bl; + } IscsiLun; + + typedef struct IscsiAIOCB { +@@ -1005,6 +1009,8 @@ static int iscsi_readcapacity_sync(IscsiLun *iscsilun) + } else { + iscsilun->block_size = rc16->block_length; + iscsilun->num_blocks = rc16->returned_lba + 1; ++ iscsilun->lbpme = rc16->lbpme; ++ iscsilun->lbprz = rc16->lbprz; + } + } + break; +@@ -1057,6 +1063,37 @@ static QemuOptsList runtime_opts = { + }, + }; + ++static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, ++ int lun, int evpd, int pc) { ++ int full_size; ++ struct scsi_task *task = NULL; ++ task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, 64); ++ if (task == NULL || task->status != SCSI_STATUS_GOOD) { ++ goto fail; ++ } ++ full_size = scsi_datain_getfullsize(task); ++ if (full_size > task->datain.size) { ++ scsi_free_scsi_task(task); ++ ++ /* we need more data for the full list */ ++ task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, full_size); ++ if (task == NULL || task->status != SCSI_STATUS_GOOD) { ++ goto fail; ++ } ++ } ++ ++ return task; ++ ++fail: ++ error_report("iSCSI: Inquiry command failed : %s", ++ iscsi_get_error(iscsi)); ++ if (task) { ++ scsi_free_scsi_task(task); ++ return NULL; ++ } ++ return NULL; ++} ++ + /* + * We support iscsi url's on the form + * iscsi://[%@][:]// +@@ -1187,6 +1224,46 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + bs->sg = 1; + } + ++ if (iscsilun->lbpme) { ++ struct scsi_inquiry_logical_block_provisioning *inq_lbp; ++ task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, ++ SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING); ++ if (task == NULL) { ++ ret = -EINVAL; ++ goto out; ++ } ++ inq_lbp = scsi_datain_unmarshall(task); ++ if (inq_lbp == NULL) { ++ error_report("iSCSI: failed to unmarshall inquiry datain blob"); ++ ret = -EINVAL; ++ goto out; ++ } ++ memcpy(&iscsilun->lbp, inq_lbp, ++ sizeof(struct scsi_inquiry_logical_block_provisioning)); ++ scsi_free_scsi_task(task); ++ task = NULL; ++ } ++ ++ if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { ++ struct scsi_inquiry_block_limits *inq_bl; ++ task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, ++ SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS); ++ if (task == NULL) { ++ ret = -EINVAL; ++ goto out; ++ } ++ inq_bl = scsi_datain_unmarshall(task); ++ if (inq_bl == NULL) { ++ error_report("iSCSI: failed to unmarshall inquiry datain blob"); ++ ret = -EINVAL; ++ goto out; ++ } ++ memcpy(&iscsilun->bl, inq_bl, ++ sizeof(struct scsi_inquiry_block_limits)); ++ scsi_free_scsi_task(task); ++ task = NULL; ++ } ++ + #if defined(LIBISCSI_FEATURE_NOP_COUNTER) + /* Set up a timer for sending out iSCSI NOPs */ + iscsilun->nop_timer = qemu_new_timer_ms(rt_clock, iscsi_nop_timed_event, iscsilun); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-always-query-max-WRITE-SAME-length.patch b/SOURCES/kvm-iscsi-always-query-max-WRITE-SAME-length.patch new file mode 100644 index 0000000..cf40190 --- /dev/null +++ b/SOURCES/kvm-iscsi-always-query-max-WRITE-SAME-length.patch @@ -0,0 +1,70 @@ +From 5ef7ecc30ffede5d4970165f471ae5d066488fcd Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 4 Apr 2014 05:56:02 +0200 +Subject: [PATCH 07/12] iscsi: always query max WRITE SAME length + +RH-Author: Fam Zheng +Message-id: <1396590962-25815-8-git-send-email-famz@redhat.com> +Patchwork-id: 58344 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 7/7] iscsi: always query max WRITE SAME length +Bugzilla: 1083413 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Paolo Bonzini + +Max WRITE SAME length is also used when the UNMAP bit is zero, so it +should be queried even if LBPWS=0. Same for the optimal transfer +length. + +However, the write_zeroes_alignment only matters for UNMAP=1 so we +still restrict it to LBPWS=1. + +Reviewed-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit c97ca29db0a68deb281a901f535cec5ea4862244) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index b80ebd3..78ab91e 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1510,18 +1510,20 @@ static int iscsi_refresh_limits(BlockDriverState *bs) + + /* We don't actually refresh here, but just return data queried in + * iscsi_open(): iscsi targets don't change their limits. */ +- if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { ++ if (iscsilun->lbp.lbpu) { + if (iscsilun->bl.max_unmap < 0xffffffff) { + bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap, + iscsilun); + } + bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, + iscsilun); ++ } + +- if (iscsilun->bl.max_ws_len < 0xffffffff) { +- bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, +- iscsilun); +- } ++ if (iscsilun->bl.max_ws_len < 0xffffffff) { ++ bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, ++ iscsilun); ++ } ++ if (iscsilun->lbp.lbpws) { + bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, + iscsilun); + +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-correctly-propagate-errors-in-iscsi_open.patch b/SOURCES/kvm-iscsi-correctly-propagate-errors-in-iscsi_open.patch new file mode 100644 index 0000000..60af6b8 --- /dev/null +++ b/SOURCES/kvm-iscsi-correctly-propagate-errors-in-iscsi_open.patch @@ -0,0 +1,377 @@ +From 9e46b4be497106cff27fd67c5c3cc79023e21762 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 4 Apr 2014 05:55:57 +0200 +Subject: [PATCH 02/12] iscsi: correctly propagate errors in iscsi_open + +RH-Author: Fam Zheng +Message-id: <1396590962-25815-3-git-send-email-famz@redhat.com> +Patchwork-id: 58339 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 2/7] iscsi: correctly propagate errors in iscsi_open +Bugzilla: 1083413 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Paolo Bonzini + +Before: + $ ./qemu-io-old + qemu-io-old> open -r -o file.driver=iscsi,file.filename=foo + Failed to parse URL : foo + qemu-io-old: can't open device (null): Could not open 'foo': Invalid argument + +After: + $ ./qemu-io + qemu-io> open -r -o file.driver=iscsi,file.filename=foo + qemu-io: can't open device (null): Failed to parse URL : foo + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit f2917853f715b0ef55df29eb2ffea29dc69ce814) +Signed-off-by: Fam Zheng + +Conflicts: + block/iscsi.c + Because 84d18f065fb041a1c0d78d20320d740ae0673c8a (Use + error_is_set() only when necessary) is not backpored, which + converted "if (error_is_set(&local_err))" to "if (local_err)". + +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 105 ++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 54 insertions(+), 51 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 105 +++++++++++++++++++++++++++++--------------------------- + 1 files changed, 54 insertions(+), 51 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 082956c..537d2cb 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1036,7 +1036,8 @@ retry: + + #endif /* SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED */ + +-static int parse_chap(struct iscsi_context *iscsi, const char *target) ++static void parse_chap(struct iscsi_context *iscsi, const char *target, ++ Error **errp) + { + QemuOptsList *list; + QemuOpts *opts; +@@ -1045,37 +1046,35 @@ static int parse_chap(struct iscsi_context *iscsi, const char *target) + + list = qemu_find_opts("iscsi"); + if (!list) { +- return 0; ++ return; + } + + opts = qemu_opts_find(list, target); + if (opts == NULL) { + opts = QTAILQ_FIRST(&list->head); + if (!opts) { +- return 0; ++ return; + } + } + + user = qemu_opt_get(opts, "user"); + if (!user) { +- return 0; ++ return; + } + + password = qemu_opt_get(opts, "password"); + if (!password) { +- error_report("CHAP username specified but no password was given"); +- return -1; ++ error_setg(errp, "CHAP username specified but no password was given"); ++ return; + } + + if (iscsi_set_initiator_username_pwd(iscsi, user, password)) { +- error_report("Failed to set initiator username and password"); +- return -1; ++ error_setg(errp, "Failed to set initiator username and password"); + } +- +- return 0; + } + +-static void parse_header_digest(struct iscsi_context *iscsi, const char *target) ++static void parse_header_digest(struct iscsi_context *iscsi, const char *target, ++ Error **errp) + { + QemuOptsList *list; + QemuOpts *opts; +@@ -1108,7 +1107,7 @@ static void parse_header_digest(struct iscsi_context *iscsi, const char *target) + } else if (!strcmp(digest, "NONE-CRC32C")) { + iscsi_set_header_digest(iscsi, ISCSI_HEADER_DIGEST_NONE_CRC32C); + } else { +- error_report("Invalid header-digest setting : %s", digest); ++ error_setg(errp, "Invalid header-digest setting : %s", digest); + } + } + +@@ -1166,12 +1165,11 @@ static void iscsi_nop_timed_event(void *opaque) + } + #endif + +-static int iscsi_readcapacity_sync(IscsiLun *iscsilun) ++static void iscsi_readcapacity_sync(IscsiLun *iscsilun, Error **errp) + { + struct scsi_task *task = NULL; + struct scsi_readcapacity10 *rc10 = NULL; + struct scsi_readcapacity16 *rc16 = NULL; +- int ret = 0; + int retries = ISCSI_CMD_RETRIES; + + do { +@@ -1186,8 +1184,7 @@ static int iscsi_readcapacity_sync(IscsiLun *iscsilun) + if (task != NULL && task->status == SCSI_STATUS_GOOD) { + rc16 = scsi_datain_unmarshall(task); + if (rc16 == NULL) { +- error_report("iSCSI: Failed to unmarshall readcapacity16 data."); +- ret = -EINVAL; ++ error_setg(errp, "iSCSI: Failed to unmarshall readcapacity16 data."); + } else { + iscsilun->block_size = rc16->block_length; + iscsilun->num_blocks = rc16->returned_lba + 1; +@@ -1201,8 +1198,7 @@ static int iscsi_readcapacity_sync(IscsiLun *iscsilun) + if (task != NULL && task->status == SCSI_STATUS_GOOD) { + rc10 = scsi_datain_unmarshall(task); + if (rc10 == NULL) { +- error_report("iSCSI: Failed to unmarshall readcapacity10 data."); +- ret = -EINVAL; ++ error_setg(errp, "iSCSI: Failed to unmarshall readcapacity10 data."); + } else { + iscsilun->block_size = rc10->block_size; + if (rc10->lba == 0) { +@@ -1215,20 +1211,18 @@ static int iscsi_readcapacity_sync(IscsiLun *iscsilun) + } + break; + default: +- return 0; ++ return; + } + } while (task != NULL && task->status == SCSI_STATUS_CHECK_CONDITION + && task->sense.key == SCSI_SENSE_UNIT_ATTENTION + && retries-- > 0); + + if (task == NULL || task->status != SCSI_STATUS_GOOD) { +- error_report("iSCSI: failed to send readcapacity10 command."); +- ret = -EINVAL; ++ error_setg(errp, "iSCSI: failed to send readcapacity10 command."); + } + if (task) { + scsi_free_scsi_task(task); + } +- return ret; + } + + /* TODO Convert to fine grained options */ +@@ -1246,7 +1240,7 @@ static QemuOptsList runtime_opts = { + }; + + static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, int lun, +- int evpd, int pc) ++ int evpd, int pc, Error **errp) + { + int full_size; + struct scsi_task *task = NULL; +@@ -1268,8 +1262,8 @@ static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, int lun, + return task; + + fail: +- error_report("iSCSI: Inquiry command failed : %s", +- iscsi_get_error(iscsi)); ++ error_setg(errp, "iSCSI: Inquiry command failed : %s", ++ iscsi_get_error(iscsi)); + if (task) { + scsi_free_scsi_task(task); + return NULL; +@@ -1296,27 +1290,25 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + int ret; + + if ((BDRV_SECTOR_SIZE % 512) != 0) { +- error_report("iSCSI: Invalid BDRV_SECTOR_SIZE. " +- "BDRV_SECTOR_SIZE(%lld) is not a multiple " +- "of 512", BDRV_SECTOR_SIZE); ++ error_setg(errp, "iSCSI: Invalid BDRV_SECTOR_SIZE. " ++ "BDRV_SECTOR_SIZE(%lld) is not a multiple " ++ "of 512", BDRV_SECTOR_SIZE); + return -EINVAL; + } + + opts = qemu_opts_create_nofail(&runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); +- if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto out; + } + + filename = qemu_opt_get(opts, "filename"); + +- + iscsi_url = iscsi_parse_full_url(iscsi, filename); + if (iscsi_url == NULL) { +- error_report("Failed to parse URL : %s", filename); ++ error_setg(errp, "Failed to parse URL : %s", filename); + ret = -EINVAL; + goto out; + } +@@ -1327,13 +1319,13 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + + iscsi = iscsi_create_context(initiator_name); + if (iscsi == NULL) { +- error_report("iSCSI: Failed to create iSCSI context."); ++ error_setg(errp, "iSCSI: Failed to create iSCSI context."); + ret = -ENOMEM; + goto out; + } + + if (iscsi_set_targetname(iscsi, iscsi_url->target)) { +- error_report("iSCSI: Failed to set target name."); ++ error_setg(errp, "iSCSI: Failed to set target name."); + ret = -EINVAL; + goto out; + } +@@ -1342,21 +1334,22 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + ret = iscsi_set_initiator_username_pwd(iscsi, iscsi_url->user, + iscsi_url->passwd); + if (ret != 0) { +- error_report("Failed to set initiator username and password"); ++ error_setg(errp, "Failed to set initiator username and password"); + ret = -EINVAL; + goto out; + } + } + + /* check if we got CHAP username/password via the options */ +- if (parse_chap(iscsi, iscsi_url->target) != 0) { +- error_report("iSCSI: Failed to set CHAP user/password"); ++ parse_chap(iscsi, iscsi_url->target, &local_err); ++ if (local_err != NULL) { ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto out; + } + + if (iscsi_set_session_type(iscsi, ISCSI_SESSION_NORMAL) != 0) { +- error_report("iSCSI: Failed to set session type to normal."); ++ error_setg(errp, "iSCSI: Failed to set session type to normal."); + ret = -EINVAL; + goto out; + } +@@ -1364,10 +1357,15 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + iscsi_set_header_digest(iscsi, ISCSI_HEADER_DIGEST_NONE_CRC32C); + + /* check if we got HEADER_DIGEST via the options */ +- parse_header_digest(iscsi, iscsi_url->target); ++ parse_header_digest(iscsi, iscsi_url->target, &local_err); ++ if (local_err != NULL) { ++ error_propagate(errp, local_err); ++ ret = -EINVAL; ++ goto out; ++ } + + if (iscsi_full_connect_sync(iscsi, iscsi_url->portal, iscsi_url->lun) != 0) { +- error_report("iSCSI: Failed to connect to LUN : %s", ++ error_setg(errp, "iSCSI: Failed to connect to LUN : %s", + iscsi_get_error(iscsi)); + ret = -EINVAL; + goto out; +@@ -1379,14 +1377,14 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + task = iscsi_inquiry_sync(iscsi, iscsilun->lun, 0, 0, 36); + + if (task == NULL || task->status != SCSI_STATUS_GOOD) { +- error_report("iSCSI: failed to send inquiry command."); ++ error_setg(errp, "iSCSI: failed to send inquiry command."); + ret = -EINVAL; + goto out; + } + + inq = scsi_datain_unmarshall(task); + if (inq == NULL) { +- error_report("iSCSI: Failed to unmarshall inquiry data."); ++ error_setg(errp, "iSCSI: Failed to unmarshall inquiry data."); + ret = -EINVAL; + goto out; + } +@@ -1394,7 +1392,9 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + iscsilun->type = inq->periperal_device_type; + iscsilun->has_write_same = true; + +- if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { ++ iscsi_readcapacity_sync(iscsilun, &local_err); ++ if (local_err != NULL) { ++ error_propagate(errp, local_err); + goto out; + } + bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); +@@ -1411,14 +1411,15 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + if (iscsilun->lbpme) { + struct scsi_inquiry_logical_block_provisioning *inq_lbp; + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, +- SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING); ++ SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, ++ errp); + if (task == NULL) { + ret = -EINVAL; + goto out; + } + inq_lbp = scsi_datain_unmarshall(task); + if (inq_lbp == NULL) { +- error_report("iSCSI: failed to unmarshall inquiry datain blob"); ++ error_setg(errp, "iSCSI: failed to unmarshall inquiry datain blob"); + ret = -EINVAL; + goto out; + } +@@ -1431,14 +1432,14 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) { + struct scsi_inquiry_block_limits *inq_bl; + task = iscsi_do_inquiry(iscsilun->iscsi, iscsilun->lun, 1, +- SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS); ++ SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, errp); + if (task == NULL) { + ret = -EINVAL; + goto out; + } + inq_bl = scsi_datain_unmarshall(task); + if (inq_bl == NULL) { +- error_report("iSCSI: failed to unmarshall inquiry datain blob"); ++ error_setg(errp, "iSCSI: failed to unmarshall inquiry datain blob"); + ret = -EINVAL; + goto out; + } +@@ -1529,14 +1530,16 @@ static int iscsi_reopen_prepare(BDRVReopenState *state, + static int iscsi_truncate(BlockDriverState *bs, int64_t offset) + { + IscsiLun *iscsilun = bs->opaque; +- int ret = 0; ++ Error *local_err = NULL; + + if (iscsilun->type != TYPE_DISK) { + return -ENOTSUP; + } + +- if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { +- return ret; ++ iscsi_readcapacity_sync(iscsilun, &local_err); ++ if (local_err != NULL) { ++ error_free(local_err); ++ return -EIO; + } + + if (offset > iscsi_getlength(bs)) { +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-factor-out-sector-conversions.patch.patch b/SOURCES/kvm-iscsi-factor-out-sector-conversions.patch.patch new file mode 100644 index 0000000..68c048d --- /dev/null +++ b/SOURCES/kvm-iscsi-factor-out-sector-conversions.patch.patch @@ -0,0 +1,70 @@ +From dba21483b097900b47ba5e1e597ba4a4150b1aa1 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:50 +0100 +Subject: [PATCH 02/50] iscsi: factor out sector conversions + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-5-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56041 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 04/52] iscsi: factor out sector conversions +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Kevin Wolf +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit 0777b5dde42f4f453abc8bb2c4e145fb8749415d) +--- + block/iscsi.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index ac35caa..8086957 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -234,6 +234,11 @@ iscsi_aio_write16_cb(struct iscsi_context *iscsi, int status, + iscsi_schedule_bh(acb); + } + ++static int64_t sector_lun2qemu(int64_t sector, IscsiLun *iscsilun) ++{ ++ return sector * iscsilun->block_size / BDRV_SECTOR_SIZE; ++} ++ + static int64_t sector_qemu2lun(int64_t sector, IscsiLun *iscsilun) + { + return sector * BDRV_SECTOR_SIZE / iscsilun->block_size; +@@ -298,7 +303,7 @@ iscsi_aio_writev_acb(IscsiAIOCB *acb) + lba = sector_qemu2lun(acb->sector_num, acb->iscsilun); + *(uint32_t *)&acb->task->cdb[2] = htonl(lba >> 32); + *(uint32_t *)&acb->task->cdb[6] = htonl(lba & 0xffffffff); +- num_sectors = size / acb->iscsilun->block_size; ++ num_sectors = sector_qemu2lun(acb->nb_sectors, acb->iscsilun); + *(uint32_t *)&acb->task->cdb[10] = htonl(num_sectors); + acb->task->expxferlen = size; + +@@ -1171,8 +1176,7 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + if ((ret = iscsi_readcapacity_sync(iscsilun)) != 0) { + goto out; + } +- bs->total_sectors = iscsilun->num_blocks * +- iscsilun->block_size / BDRV_SECTOR_SIZE ; ++ bs->total_sectors = sector_lun2qemu(iscsilun->num_blocks, iscsilun); + + /* Medium changer or tape. We dont have any emulation for this so this must + * be sg ioctl compatible. We force it to be sg, otherwise qemu will try +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-fix-indentation.patch b/SOURCES/kvm-iscsi-fix-indentation.patch new file mode 100644 index 0000000..8b2bc64 --- /dev/null +++ b/SOURCES/kvm-iscsi-fix-indentation.patch @@ -0,0 +1,97 @@ +From 2f080efe2f5055117b1083c01618305dd08e4aa9 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 4 Apr 2014 05:55:56 +0200 +Subject: [PATCH 01/12] iscsi: fix indentation + +RH-Author: Fam Zheng +Message-id: <1396590962-25815-2-git-send-email-famz@redhat.com> +Patchwork-id: 58338 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 1/7] iscsi: fix indentation +Bugzilla: 1083413 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Paolo Bonzini + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 35cb1748d54c8e56881a5e10138b3eb090f3a6bc) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 45 +++++++++++++++++++++++---------------------- + 1 file changed, 23 insertions(+), 22 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 45 +++++++++++++++++++++++---------------------- + 1 files changed, 23 insertions(+), 22 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 64a8295..082956c 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1245,35 +1245,36 @@ static QemuOptsList runtime_opts = { + }, + }; + +-static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, +- int lun, int evpd, int pc) { +- int full_size; +- struct scsi_task *task = NULL; +- task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, 64); ++static struct scsi_task *iscsi_do_inquiry(struct iscsi_context *iscsi, int lun, ++ int evpd, int pc) ++{ ++ int full_size; ++ struct scsi_task *task = NULL; ++ task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, 64); ++ if (task == NULL || task->status != SCSI_STATUS_GOOD) { ++ goto fail; ++ } ++ full_size = scsi_datain_getfullsize(task); ++ if (full_size > task->datain.size) { ++ scsi_free_scsi_task(task); ++ ++ /* we need more data for the full list */ ++ task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, full_size); + if (task == NULL || task->status != SCSI_STATUS_GOOD) { + goto fail; + } +- full_size = scsi_datain_getfullsize(task); +- if (full_size > task->datain.size) { +- scsi_free_scsi_task(task); +- +- /* we need more data for the full list */ +- task = iscsi_inquiry_sync(iscsi, lun, evpd, pc, full_size); +- if (task == NULL || task->status != SCSI_STATUS_GOOD) { +- goto fail; +- } +- } ++ } + +- return task; ++ return task; + + fail: +- error_report("iSCSI: Inquiry command failed : %s", +- iscsi_get_error(iscsi)); +- if (task) { +- scsi_free_scsi_task(task); +- return NULL; +- } ++ error_report("iSCSI: Inquiry command failed : %s", ++ iscsi_get_error(iscsi)); ++ if (task) { ++ scsi_free_scsi_task(task); + return NULL; ++ } ++ return NULL; + } + + /* +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-ignore-flushes-on-scsi-generic-devices.patch b/SOURCES/kvm-iscsi-ignore-flushes-on-scsi-generic-devices.patch new file mode 100644 index 0000000..e646d81 --- /dev/null +++ b/SOURCES/kvm-iscsi-ignore-flushes-on-scsi-generic-devices.patch @@ -0,0 +1,70 @@ +From ae4902714a5ff8e905e69c25d48652a7a5e930f0 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 14 Apr 2014 09:59:22 +0200 +Subject: [PATCH 06/12] iscsi: ignore flushes on scsi-generic devices + +RH-Author: Fam Zheng +Message-id: <1397469562-5050-1-git-send-email-famz@redhat.com> +Patchwork-id: 58458 +O-Subject: [RHEL-7 0day qemu-kvm PATCH v2 6/7] iscsi: ignore flushes on scsi-generic devices +Bugzilla: 1083413 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1083413 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7342452 + +Non-block SCSI devices do not support flushing, but we may still send +them requests via bdrv_flush_all. Just ignore them. + +Reviewed-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit b2f9c08a4f11f16ec101e95feab8e71d7cfcfee9) +Signed-off-by: Fam Zheng + +Conflicts: + block/iscsi.c + Because upstream iscsi driver is converted to coroutine while + downstream is aio. So the bdrv_flush code is different. + +--- +v2: Schedule BH instead of returning NULL (which is interpreted as error +for AIO). (Thanks Kevin) + +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 268da2f..b80ebd3 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -617,6 +617,16 @@ iscsi_aio_flush(BlockDriverState *bs, + acb->iscsilun = iscsilun; + acb->retries = ISCSI_CMD_RETRIES; + ++ if (bs->sg) { ++ acb->canceled = 0; ++ acb->status = 0; ++ acb->bh = NULL; ++ acb->buf = NULL; ++ acb->task = NULL; ++ iscsi_schedule_bh(acb); ++ return &acb->common; ++ } ++ + if (iscsi_aio_flush_acb(acb) != 0) { + qemu_aio_release(acb); + return NULL; +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-recognize-invalid-field-ASCQ-from-WRITE-SAME-c.patch b/SOURCES/kvm-iscsi-recognize-invalid-field-ASCQ-from-WRITE-SAME-c.patch new file mode 100644 index 0000000..5c1e17f --- /dev/null +++ b/SOURCES/kvm-iscsi-recognize-invalid-field-ASCQ-from-WRITE-SAME-c.patch @@ -0,0 +1,51 @@ +From 8ba513a1fa324d87a412705d2ded64e2154e1f2a Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 4 Apr 2014 05:56:00 +0200 +Subject: [PATCH 05/12] iscsi: recognize "invalid field" ASCQ from WRITE SAME command + +RH-Author: Fam Zheng +Message-id: <1396590962-25815-6-git-send-email-famz@redhat.com> +Patchwork-id: 58342 +O-Subject: [RHEL-7 0day qemu-kvm PATCH 5/7] iscsi: recognize "invalid field" ASCQ from WRITE SAME command +Bugzilla: 1083413 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Paolo Bonzini + +Some targets may return "invalid field" as the ASCQ from WRITE SAME +if they support the command only without the UNMAP field. Recognize +that, and return ENOTSUP just like for "invalid operation code". + +Reviewed-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit 27898a5daa4c6d28adb32b401a011d7198494482) +Signed-off-by: Fam Zheng +--- + block/iscsi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 4a535e3..268da2f 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1012,7 +1012,8 @@ retry: + + if (iTask.status == SCSI_STATUS_CHECK_CONDITION && + iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && +- iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) { ++ (iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE || ++ iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB)) { + /* WRITE SAME is not supported by the target */ + iscsilun->has_write_same = false; + scsi_free_scsi_task(iTask.task); +-- +1.7.1 + diff --git a/SOURCES/kvm-iscsi-set-limits-in-BlockDriverState.patch.patch.patch b/SOURCES/kvm-iscsi-set-limits-in-BlockDriverState.patch.patch.patch new file mode 100644 index 0000000..543d81a --- /dev/null +++ b/SOURCES/kvm-iscsi-set-limits-in-BlockDriverState.patch.patch.patch @@ -0,0 +1,60 @@ +From a9bf8d1acc8589ebda4fb96acd08822a7937af9b Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:04 +0100 +Subject: [PATCH 16/50] iscsi: set limits in BlockDriverState + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-19-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56055 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 18/52] iscsi: set limits in BlockDriverState +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit ba6c59191f245147e7ee0c2b9ecaf5fb116f7877) +--- + block/iscsi.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 1e8a2bb..e5f4670 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1386,6 +1386,20 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags, + sizeof(struct scsi_inquiry_block_limits)); + scsi_free_scsi_task(task); + task = NULL; ++ ++ if (iscsilun->bl.max_unmap < 0xffffffff) { ++ bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap, ++ iscsilun); ++ } ++ bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, ++ iscsilun); ++ ++ if (iscsilun->bl.max_ws_len < 0xffffffff) { ++ bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len, ++ iscsilun); ++ } ++ bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran, ++ iscsilun); + } + + #if defined(LIBISCSI_FEATURE_NOP_COUNTER) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-simplify-iscsi_co_discard.patch.patch.patch b/SOURCES/kvm-iscsi-simplify-iscsi_co_discard.patch.patch.patch new file mode 100644 index 0000000..0f3ea5d --- /dev/null +++ b/SOURCES/kvm-iscsi-simplify-iscsi_co_discard.patch.patch.patch @@ -0,0 +1,137 @@ +From 2094ed57c6e6e765d7e28a0c92f05d2b3cb43fd4 Mon Sep 17 00:00:00 2001 +Message-Id: <2094ed57c6e6e765d7e28a0c92f05d2b3cb43fd4.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:05 +0100 +Subject: [PATCH 17/50] iscsi: simplify iscsi_co_discard + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-20-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56056 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 19/52] iscsi: simplify iscsi_co_discard +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +now that bdrv_co_discard can handle limits we do not need +the request split logic here anymore. + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 01a6a238a30b0381846e3e68ba06e232567a7026) +--- + block/iscsi.c | 67 ++++++++++++++++++++++------------------------------------- + 1 file changed, 25 insertions(+), 42 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 67 ++++++++++++++++++++++------------------------------------- + 1 file changed, 25 insertions(+), 42 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index e5f4670..567a63a 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -87,7 +87,6 @@ typedef struct IscsiAIOCB { + #define NOP_INTERVAL 5000 + #define MAX_NOP_FAILURES 3 + #define ISCSI_CMD_RETRIES 5 +-#define ISCSI_MAX_UNMAP 131072 + + static void + iscsi_bh_cb(void *p) +@@ -914,8 +913,6 @@ coroutine_fn iscsi_co_discard(BlockDriverState *bs, int64_t sector_num, + IscsiLun *iscsilun = bs->opaque; + struct IscsiTask iTask; + struct unmap_list list; +- uint32_t nb_blocks; +- uint32_t max_unmap; + + if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) { + return -EINVAL; +@@ -927,52 +924,38 @@ coroutine_fn iscsi_co_discard(BlockDriverState *bs, int64_t sector_num, + } + + list.lba = sector_qemu2lun(sector_num, iscsilun); +- nb_blocks = sector_qemu2lun(nb_sectors, iscsilun); ++ list.num = sector_qemu2lun(nb_sectors, iscsilun); + +- max_unmap = iscsilun->bl.max_unmap; +- if (max_unmap == 0xffffffff) { +- max_unmap = ISCSI_MAX_UNMAP; +- } +- +- while (nb_blocks > 0) { +- iscsi_co_init_iscsitask(iscsilun, &iTask); +- list.num = nb_blocks; +- if (list.num > max_unmap) { +- list.num = max_unmap; +- } ++ iscsi_co_init_iscsitask(iscsilun, &iTask); + retry: +- if (iscsi_unmap_task(iscsilun->iscsi, iscsilun->lun, 0, 0, &list, 1, +- iscsi_co_generic_cb, &iTask) == NULL) { +- return -EIO; +- } +- +- while (!iTask.complete) { +- iscsi_set_events(iscsilun); +- qemu_coroutine_yield(); +- } ++ if (iscsi_unmap_task(iscsilun->iscsi, iscsilun->lun, 0, 0, &list, 1, ++ iscsi_co_generic_cb, &iTask) == NULL) { ++ return -EIO; ++ } + +- if (iTask.task != NULL) { +- scsi_free_scsi_task(iTask.task); +- iTask.task = NULL; +- } ++ while (!iTask.complete) { ++ iscsi_set_events(iscsilun); ++ qemu_coroutine_yield(); ++ } + +- if (iTask.do_retry) { +- goto retry; +- } ++ if (iTask.task != NULL) { ++ scsi_free_scsi_task(iTask.task); ++ iTask.task = NULL; ++ } + +- if (iTask.status == SCSI_STATUS_CHECK_CONDITION) { +- /* the target might fail with a check condition if it +- is not happy with the alignment of the UNMAP request +- we silently fail in this case */ +- return 0; +- } ++ if (iTask.do_retry) { ++ goto retry; ++ } + +- if (iTask.status != SCSI_STATUS_GOOD) { +- return -EIO; +- } ++ if (iTask.status == SCSI_STATUS_CHECK_CONDITION) { ++ /* the target might fail with a check condition if it ++ is not happy with the alignment of the UNMAP request ++ we silently fail in this case */ ++ return 0; ++ } + +- list.lba += list.num; +- nb_blocks -= list.num; ++ if (iTask.status != SCSI_STATUS_GOOD) { ++ return -EIO; + } + + return 0; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-split-discard-requests-in-multiple-parts.patch.patch.patch b/SOURCES/kvm-iscsi-split-discard-requests-in-multiple-parts.patch.patch.patch new file mode 100644 index 0000000..85e0cdb --- /dev/null +++ b/SOURCES/kvm-iscsi-split-discard-requests-in-multiple-parts.patch.patch.patch @@ -0,0 +1,234 @@ +From 2865e534fce4969a316a5ba764b65e540da08cee Mon Sep 17 00:00:00 2001 +Message-Id: <2865e534fce4969a316a5ba764b65e540da08cee.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:08:53 +0100 +Subject: [PATCH 05/50] iscsi: split discard requests in multiple parts + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-8-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56044 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 07/52] iscsi: split discard requests in multiple parts +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Replace .bdrv_aio_discard with .bdrv_co_discard so that discard +requests can be split in multiple parts, each for a small amount +of sectors. + +This is useful because we expose a generic API with no limit +on the amount of sectors that can be unmapped in one request. + +Signed-off-by: Peter Lieven +Signed-off-by: Paolo Bonzini +(cherry picked from commit 65f3e33964bc4bb634d61463814a4ccca794e3c0) +--- + block/iscsi.c | 156 +++++++++++++++++++++++++++------------------------------- + 1 file changed, 73 insertions(+), 83 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/iscsi.c | 156 +++++++++++++++++++++++++++------------------------------- + 1 file changed, 73 insertions(+), 83 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index f8d021a..3a34eb7 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -87,6 +87,7 @@ typedef struct IscsiAIOCB { + #define NOP_INTERVAL 5000 + #define MAX_NOP_FAILURES 3 + #define ISCSI_CMD_RETRIES 5 ++#define ISCSI_MAX_UNMAP 131072 + + static void + iscsi_bh_cb(void *p) +@@ -624,88 +625,6 @@ iscsi_aio_flush(BlockDriverState *bs, + return &acb->common; + } + +-static int iscsi_aio_discard_acb(IscsiAIOCB *acb); +- +-static void +-iscsi_unmap_cb(struct iscsi_context *iscsi, int status, +- void *command_data, void *opaque) +-{ +- IscsiAIOCB *acb = opaque; +- +- if (acb->canceled != 0) { +- return; +- } +- +- acb->status = 0; +- if (status != 0) { +- if (status == SCSI_STATUS_CHECK_CONDITION +- && acb->task->sense.key == SCSI_SENSE_UNIT_ATTENTION +- && acb->retries-- > 0) { +- scsi_free_scsi_task(acb->task); +- acb->task = NULL; +- if (iscsi_aio_discard_acb(acb) == 0) { +- iscsi_set_events(acb->iscsilun); +- return; +- } +- } +- error_report("Failed to unmap data on iSCSI lun. %s", +- iscsi_get_error(iscsi)); +- acb->status = -EIO; +- } +- +- iscsi_schedule_bh(acb); +-} +- +-static int iscsi_aio_discard_acb(IscsiAIOCB *acb) { +- struct iscsi_context *iscsi = acb->iscsilun->iscsi; +- struct unmap_list list[1]; +- +- acb->canceled = 0; +- acb->bh = NULL; +- acb->status = -EINPROGRESS; +- acb->buf = NULL; +- +- list[0].lba = sector_qemu2lun(acb->sector_num, acb->iscsilun); +- list[0].num = acb->nb_sectors * BDRV_SECTOR_SIZE / acb->iscsilun->block_size; +- +- acb->task = iscsi_unmap_task(iscsi, acb->iscsilun->lun, +- 0, 0, &list[0], 1, +- iscsi_unmap_cb, +- acb); +- if (acb->task == NULL) { +- error_report("iSCSI: Failed to send unmap command. %s", +- iscsi_get_error(iscsi)); +- return -1; +- } +- +- return 0; +-} +- +-static BlockDriverAIOCB * +-iscsi_aio_discard(BlockDriverState *bs, +- int64_t sector_num, int nb_sectors, +- BlockDriverCompletionFunc *cb, void *opaque) +-{ +- IscsiLun *iscsilun = bs->opaque; +- IscsiAIOCB *acb; +- +- acb = qemu_aio_get(&iscsi_aiocb_info, bs, cb, opaque); +- +- acb->iscsilun = iscsilun; +- acb->nb_sectors = nb_sectors; +- acb->sector_num = sector_num; +- acb->retries = ISCSI_CMD_RETRIES; +- +- if (iscsi_aio_discard_acb(acb) != 0) { +- qemu_aio_release(acb); +- return NULL; +- } +- +- iscsi_set_events(iscsilun); +- +- return &acb->common; +-} +- + #ifdef __linux__ + static void + iscsi_aio_ioctl_cb(struct iscsi_context *iscsi, int status, +@@ -988,6 +907,77 @@ out: + return ret; + } + ++static int ++coroutine_fn iscsi_co_discard(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors) ++{ ++ IscsiLun *iscsilun = bs->opaque; ++ struct IscsiTask iTask; ++ struct unmap_list list; ++ uint32_t nb_blocks; ++ uint32_t max_unmap; ++ ++ if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) { ++ return -EINVAL; ++ } ++ ++ if (!iscsilun->lbp.lbpu) { ++ /* UNMAP is not supported by the target */ ++ return 0; ++ } ++ ++ list.lba = sector_qemu2lun(sector_num, iscsilun); ++ nb_blocks = sector_qemu2lun(nb_sectors, iscsilun); ++ ++ max_unmap = iscsilun->bl.max_unmap; ++ if (max_unmap == 0xffffffff) { ++ max_unmap = ISCSI_MAX_UNMAP; ++ } ++ ++ while (nb_blocks > 0) { ++ iscsi_co_init_iscsitask(iscsilun, &iTask); ++ list.num = nb_blocks; ++ if (list.num > max_unmap) { ++ list.num = max_unmap; ++ } ++retry: ++ if (iscsi_unmap_task(iscsilun->iscsi, iscsilun->lun, 0, 0, &list, 1, ++ iscsi_co_generic_cb, &iTask) == NULL) { ++ return -EIO; ++ } ++ ++ while (!iTask.complete) { ++ iscsi_set_events(iscsilun); ++ qemu_coroutine_yield(); ++ } ++ ++ if (iTask.task != NULL) { ++ scsi_free_scsi_task(iTask.task); ++ iTask.task = NULL; ++ } ++ ++ if (iTask.do_retry) { ++ goto retry; ++ } ++ ++ if (iTask.status == SCSI_STATUS_CHECK_CONDITION) { ++ /* the target might fail with a check condition if it ++ is not happy with the alignment of the UNMAP request ++ we silently fail in this case */ ++ return 0; ++ } ++ ++ if (iTask.status != SCSI_STATUS_GOOD) { ++ return -EIO; ++ } ++ ++ list.lba += list.num; ++ nb_blocks -= list.num; ++ } ++ ++ return 0; ++} ++ + static int parse_chap(struct iscsi_context *iscsi, const char *target) + { + QemuOptsList *list; +@@ -1541,12 +1531,12 @@ static BlockDriver bdrv_iscsi = { + .bdrv_truncate = iscsi_truncate, + + .bdrv_co_get_block_status = iscsi_co_get_block_status, ++ .bdrv_co_discard = iscsi_co_discard, + + .bdrv_aio_readv = iscsi_aio_readv, + .bdrv_aio_writev = iscsi_aio_writev, + .bdrv_aio_flush = iscsi_aio_flush, + +- .bdrv_aio_discard = iscsi_aio_discard, + .bdrv_has_zero_init = iscsi_has_zero_init, + + #ifdef __linux__ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-iscsi-use-bdrv_new-instead-of-stack-structure.patch b/SOURCES/kvm-iscsi-use-bdrv_new-instead-of-stack-structure.patch new file mode 100644 index 0000000..0e72bda --- /dev/null +++ b/SOURCES/kvm-iscsi-use-bdrv_new-instead-of-stack-structure.patch @@ -0,0 +1,95 @@ +From 8ca7d4d814e7443da7f00696f37fb9f6f06dd668 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:31:58 +0100 +Subject: [PATCH 05/87] iscsi: use bdrv_new() instead of stack structure + +RH-Author: Max Reitz +Message-id: <1383604354-12743-8-git-send-email-mreitz@redhat.com> +Patchwork-id: 55307 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 07/43] iscsi: use bdrv_new() instead of stack structure +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +BZ: 1026524 + +BlockDriverState structure needs bdrv_new() to initialize refcnt, don't +allocate a local structure variable and memset to 0, becasue with coming +refcnt implementation, bdrv_unref will crash if bs->refcnt not +initialized to 1. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 13c91cb7e28b47f5c4227f7e88a1378570117704) + +Signed-off-by: Max Reitz +--- + block/iscsi.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) + +diff --git a/block/iscsi.c b/block/iscsi.c +index 4ab9edc..cc2017e 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -1252,11 +1252,11 @@ static int iscsi_create(const char *filename, QEMUOptionParameter *options) + { + int ret = 0; + int64_t total_size = 0; +- BlockDriverState bs; ++ BlockDriverState *bs; + IscsiLun *iscsilun = NULL; + QDict *bs_options; + +- memset(&bs, 0, sizeof(BlockDriverState)); ++ bs = bdrv_new(""); + + /* Read out options */ + while (options && options->name) { +@@ -1266,12 +1266,12 @@ static int iscsi_create(const char *filename, QEMUOptionParameter *options) + options++; + } + +- bs.opaque = g_malloc0(sizeof(struct IscsiLun)); +- iscsilun = bs.opaque; ++ bs->opaque = g_malloc0(sizeof(struct IscsiLun)); ++ iscsilun = bs->opaque; + + bs_options = qdict_new(); + qdict_put(bs_options, "filename", qstring_from_str(filename)); +- ret = iscsi_open(&bs, bs_options, 0); ++ ret = iscsi_open(bs, bs_options, 0); + QDECREF(bs_options); + + if (ret != 0) { +@@ -1285,7 +1285,7 @@ static int iscsi_create(const char *filename, QEMUOptionParameter *options) + ret = -ENODEV; + goto out; + } +- if (bs.total_sectors < total_size) { ++ if (bs->total_sectors < total_size) { + ret = -ENOSPC; + goto out; + } +@@ -1295,7 +1295,9 @@ out: + if (iscsilun->iscsi != NULL) { + iscsi_destroy_context(iscsilun->iscsi); + } +- g_free(bs.opaque); ++ g_free(bs->opaque); ++ bs->opaque = NULL; ++ bdrv_delete(bs); + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-json-parser-drop-superfluous-assignment-for-token-va.patch b/SOURCES/kvm-json-parser-drop-superfluous-assignment-for-token-va.patch new file mode 100644 index 0000000..3e6503f --- /dev/null +++ b/SOURCES/kvm-json-parser-drop-superfluous-assignment-for-token-va.patch @@ -0,0 +1,97 @@ +From 110f5902133db4e8a46c9cc18ed0d4ed2e99aec2 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:34:59 +0200 +Subject: [PATCH 01/16] json-parser: drop superfluous assignment for token + variable + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-3-git-send-email-armbru@redhat.com> +Patchwork-id: 71470 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 01/15] json-parser: drop superfluous assignment for token variable +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Gonglei + +Signed-off-by: ChenLiang +Signed-off-by: Gonglei +Reviewed-by: Eric Blake +Reviewed-by: Paolo Bonzini +Signed-off-by: Luiz Capitulino +(cherry picked from commit a491af471bf8f1188b2665f54d109065d4591e45) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + qobject/json-parser.c | 15 ++------------- + 1 file changed, 2 insertions(+), 13 deletions(-) + +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index e7947b3..fa09769 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -423,7 +423,6 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + if (!token_is_operator(token, '{')) { + goto out; + } +- token = NULL; + + dict = qdict_new(); + +@@ -449,7 +448,6 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + parse_error(ctxt, token, "expected separator in dict"); + goto out; + } +- token = NULL; + + if (parse_pair(ctxt, dict, ap) == -1) { + goto out; +@@ -461,10 +459,8 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + goto out; + } + } +- token = NULL; + } else { +- token = parser_context_pop_token(ctxt); +- token = NULL; ++ (void)parser_context_pop_token(ctxt); + } + + return QOBJECT(dict); +@@ -487,10 +483,8 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + } + + if (!token_is_operator(token, '[')) { +- token = NULL; + goto out; + } +- token = NULL; + + list = qlist_new(); + +@@ -523,8 +517,6 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- token = NULL; +- + obj = parse_value(ctxt, ap); + if (obj == NULL) { + parse_error(ctxt, token, "expecting value"); +@@ -539,11 +531,8 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + } +- +- token = NULL; + } else { +- token = parser_context_pop_token(ctxt); +- token = NULL; ++ (void)parser_context_pop_token(ctxt); + } + + return QOBJECT(list); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-json-parser-fix-handling-of-large-whole-number-value.patch b/SOURCES/kvm-json-parser-fix-handling-of-large-whole-number-value.patch new file mode 100644 index 0000000..9e51b73 --- /dev/null +++ b/SOURCES/kvm-json-parser-fix-handling-of-large-whole-number-value.patch @@ -0,0 +1,82 @@ +From 2263af4c1921520ddc9177c13a176860c0069fab Mon Sep 17 00:00:00 2001 +Message-Id: <2263af4c1921520ddc9177c13a176860c0069fab.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:04 +0100 +Subject: [PATCH 04/21] json-parser: fix handling of large whole number values + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56120 +O-Subject: [PATCH 7.0 qemu-kvm 01/18] json-parser: fix handling of large whole number values +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Michael Roth + +Currently our JSON parser assumes that numbers lacking a fractional +value are integers and attempts to store them as QInt/int64 values. This +breaks in the case where the number overflows/underflows int64 values (which +is still valid JSON) + +Fix this by detecting such cases and using a QFloat to store the value +instead. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 3d5b3ec6d460a92245215aaf7b349b0b9e5ffa25) +Signed-off-by: Markus Armbruster +--- + qobject/json-parser.c | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + qobject/json-parser.c | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index 05279c1..e7947b3 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -640,9 +640,29 @@ static QObject *parse_literal(JSONParserContext *ctxt) + case JSON_STRING: + obj = QOBJECT(qstring_from_escaped_str(ctxt, token)); + break; +- case JSON_INTEGER: +- obj = QOBJECT(qint_from_int(strtoll(token_get_value(token), NULL, 10))); +- break; ++ case JSON_INTEGER: { ++ /* A possibility exists that this is a whole-valued float where the ++ * fractional part was left out due to being 0 (.0). It's not a big ++ * deal to treat these as ints in the parser, so long as users of the ++ * resulting QObject know to expect a QInt in place of a QFloat in ++ * cases like these. ++ * ++ * However, in some cases these values will overflow/underflow a ++ * QInt/int64 container, thus we should assume these are to be handled ++ * as QFloats/doubles rather than silently changing their values. ++ * ++ * strtoll() indicates these instances by setting errno to ERANGE ++ */ ++ int64_t value; ++ ++ errno = 0; /* strtoll doesn't set errno on success */ ++ value = strtoll(token_get_value(token), NULL, 10); ++ if (errno != ERANGE) { ++ obj = QOBJECT(qint_from_int(value)); ++ break; ++ } ++ /* fall through to JSON_FLOAT */ ++ } + case JSON_FLOAT: + /* FIXME dependent on locale */ + obj = QOBJECT(qfloat_from_double(strtod(token_get_value(token), NULL))); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-json-streamer-Don-t-leak-tokens-on-incomplete-parse.patch b/SOURCES/kvm-json-streamer-Don-t-leak-tokens-on-incomplete-parse.patch new file mode 100644 index 0000000..73a78fd --- /dev/null +++ b/SOURCES/kvm-json-streamer-Don-t-leak-tokens-on-incomplete-parse.patch @@ -0,0 +1,65 @@ +From b3e87d63aec8631b853cb86a0736af41954769a4 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:12 +0200 +Subject: [PATCH 14/16] json-streamer: Don't leak tokens on incomplete parse + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-16-git-send-email-armbru@redhat.com> +Patchwork-id: 71477 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 14/15] json-streamer: Don't leak tokens on incomplete parse +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Eric Blake + +Valgrind complained about a number of leaks in +tests/check-qobject-json: + +==12657== definitely lost: 17,247 bytes in 1,234 blocks + +All of which had the same root cause: on an incomplete parse, +we were abandoning the token queue without cleaning up the +allocated data within each queue element. Introduced in +commit 95385fe, when we switched from QList (which recursively +frees contents) to g_queue (which does not). + +We don't yet require glib 2.32 with its g_queue_free_full(), +so open-code it instead. + +CC: qemu-stable@nongnu.org +Signed-off-by: Eric Blake +Message-Id: <1463608012-12760-1-git-send-email-eblake@redhat.com> +Reviewed-by: Markus Armbruster +Signed-off-by: Markus Armbruster +(cherry picked from commit ba4dba54347d5062436a8553f527dbbed6dcf069) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + qobject/json-streamer.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index a4db4b8..3c7d6be 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -19,9 +19,15 @@ + #define MAX_TOKEN_COUNT (2ULL << 20) + #define MAX_NESTING (1ULL << 10) + ++static void json_message_free_token(void *token, void *opaque) ++{ ++ g_free(token); ++} ++ + static void json_message_free_tokens(JSONMessageParser *parser) + { + if (parser->tokens) { ++ g_queue_foreach(parser->tokens, json_message_free_token, NULL); + g_queue_free(parser->tokens); + parser->tokens = NULL; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-json-streamer-fix-double-free-on-exiting-during-a-pa.patch b/SOURCES/kvm-json-streamer-fix-double-free-on-exiting-during-a-pa.patch new file mode 100644 index 0000000..602f1a7 --- /dev/null +++ b/SOURCES/kvm-json-streamer-fix-double-free-on-exiting-during-a-pa.patch @@ -0,0 +1,64 @@ +From a781053c1b5084ba32b86229b98b9601c990722c Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:13 +0200 +Subject: [PATCH 15/16] json-streamer: fix double-free on exiting during a + parse + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-17-git-send-email-armbru@redhat.com> +Patchwork-id: 71484 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 15/15] json-streamer: fix double-free on exiting during a parse +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +Now that json-streamer tries not to leak tokens on incomplete parse, +the tokens can be freed twice if QEMU destroys the json-streamer +object during the parser->emit call. To fix this, create the new +empty GQueue earlier, so that it is already in place when the old +one is passed to parser->emit. + +Reported-by: Changlong Xie +Signed-off-by: Paolo Bonzini +Message-Id: <1467636059-12557-1-git-send-email-pbonzini@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit a942d8fa01f65279cdc135f4294db611bbc088ef) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + qobject/json-streamer.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index 3c7d6be..7d041e1 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -38,6 +38,7 @@ static void json_message_process_token(JSONLexer *lexer, GString *input, + { + JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer); + JSONToken *token; ++ GQueue *tokens; + + switch (type) { + case JSON_LCURLY: +@@ -95,9 +96,12 @@ out_emit: + /* send current list of tokens to parser and reset tokenizer */ + parser->brace_count = 0; + parser->bracket_count = 0; +- /* parser->emit takes ownership of parser->tokens. */ +- parser->emit(parser, parser->tokens); ++ /* parser->emit takes ownership of parser->tokens. Remove our own ++ * reference to parser->tokens before handing it out to parser->emit. ++ */ ++ tokens = parser->tokens; + parser->tokens = g_queue_new(); ++ parser->emit(parser, tokens); + parser->token_size = 0; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-kdump-set-vmcoreinfo-location.patch b/SOURCES/kvm-kdump-set-vmcoreinfo-location.patch new file mode 100644 index 0000000..bb79320 --- /dev/null +++ b/SOURCES/kvm-kdump-set-vmcoreinfo-location.patch @@ -0,0 +1,79 @@ +From 266135a48594041655e0e2e4b647251bc812670c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:03 +0100 +Subject: [PATCH 32/41] kdump: set vmcoreinfo location +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-33-marcandre.lureau@redhat.com> +Patchwork-id: 78383 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 32/41] kdump: set vmcoreinfo location +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +kdump header provides offset and size of the vmcoreinfo content, +append it if available (skip the ELF note header). + +crash-7.1.9 was the first version that started looking in the +vmcoreinfo data for phys_base instead of in the kdump_sub_header. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit 9ada575bbafaf6d3724a7f59df9da89776817cac) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + dump.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/dump.c b/dump.c +index 3bce730..5aeff02 100644 +--- a/dump.c ++++ b/dump.c +@@ -855,6 +855,18 @@ static void create_header32(DumpState *s, Error **errp) + kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); + + offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; ++ if (s->guest_note && ++ note_name_equal(s, s->guest_note, "VMCOREINFO")) { ++ uint64_t hsize, name_size, size_vmcoreinfo_desc, offset_vmcoreinfo; ++ ++ get_note_sizes(s, s->guest_note, ++ &hsize, &name_size, &size_vmcoreinfo_desc); ++ offset_vmcoreinfo = offset_note + s->note_size - s->guest_note_size + ++ (DIV_ROUND_UP(hsize, 4) + DIV_ROUND_UP(name_size, 4)) * 4; ++ kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo); ++ kh->size_vmcoreinfo = cpu_to_dump32(s, size_vmcoreinfo_desc); ++ } ++ + kh->offset_note = cpu_to_dump64(s, offset_note); + kh->note_size = cpu_to_dump32(s, s->note_size); + +@@ -955,6 +967,18 @@ static void create_header64(DumpState *s, Error **errp) + kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); + + offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; ++ if (s->guest_note && ++ note_name_equal(s, s->guest_note, "VMCOREINFO")) { ++ uint64_t hsize, name_size, size_vmcoreinfo_desc, offset_vmcoreinfo; ++ ++ get_note_sizes(s, s->guest_note, ++ &hsize, &name_size, &size_vmcoreinfo_desc); ++ offset_vmcoreinfo = offset_note + s->note_size - s->guest_note_size + ++ (DIV_ROUND_UP(hsize, 4) + DIV_ROUND_UP(name_size, 4)) * 4; ++ kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo); ++ kh->size_vmcoreinfo = cpu_to_dump64(s, size_vmcoreinfo_desc); ++ } ++ + kh->offset_note = cpu_to_dump64(s, offset_note); + kh->note_size = cpu_to_dump64(s, s->note_size); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock.v2.patch b/SOURCES/kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock.v2.patch new file mode 100644 index 0000000..63fa6b4 --- /dev/null +++ b/SOURCES/kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock.v2.patch @@ -0,0 +1,57 @@ +From e055a194315471312ae2a1d8da4b69c3a5e545a5 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Wed, 22 Oct 2014 09:46:36 +0200 +Subject: [PATCH 5/6] kvmclock: Ensure proper env->tsc value for + kvmclock_current_nsec calculation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1413971197-4624-5-git-send-email-dgilbert@redhat.com> +Patchwork-id: 61790 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 4/5] kvmclock: Ensure proper env->tsc value for kvmclock_current_nsec calculation +Bugzilla: 1098602 1130428 +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini + +From: Marcelo Tosatti + +Ensure proper env->tsc value for kvmclock_current_nsec calculation. + +Reported-by: Marcin Gibuła +Analyzed-by: Marcin Gibuła +Cc: qemu-stable@nongnu.org +Signed-off-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +(cherry picked from commit 317b0a6d8ba44e9bf8f9c3dbd776c4536843d82c) +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/clock.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 6d6f3a7..53056d4 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -16,6 +16,7 @@ + #include "qemu-common.h" + #include "sysemu/sysemu.h" + #include "sysemu/kvm.h" ++#include "sysemu/cpus.h" + #include "hw/sysbus.h" + #include "hw/kvm/clock.h" + +@@ -69,6 +70,9 @@ static void kvmclock_vm_state_change(void *opaque, int running, + if (s->clock_valid) { + return; + } ++ ++ cpu_synchronize_all_states(); ++ cpu_clean_all_dirty(); + ret = kvm_vm_ioctl(kvm_state, KVM_GET_CLOCK, &data); + if (ret < 0) { + fprintf(stderr, "KVM_GET_CLOCK failed: %s\n", strerror(ret)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock_cu.patch b/SOURCES/kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock_cu.patch new file mode 100644 index 0000000..53985ae --- /dev/null +++ b/SOURCES/kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock_cu.patch @@ -0,0 +1,69 @@ +From da4fe791cecafbec05395041c52cb545308b1b61 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Thu, 26 Jun 2014 15:06:15 +0200 +Subject: [PATCH 13/13] kvmclock: Ensure proper env->tsc value for kvmclock_current_nsec calculation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marcelo Tosatti +Message-id: <20140626150716.639538444@amt.cnet> +Patchwork-id: 59386 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/2] kvmclock: Ensure proper env->tsc value for kvmclock_current_nsec calculation +Bugzilla: 1098602 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Andrew Jones + +commit 9b1786829aefb83f37a8f3135e3ea91c56001b56 upstream + +Ensure proper env->tsc value for kvmclock_current_nsec calculation. + +Reported-by: Marcin Gibuła +Cc: qemu-stable@nongnu.org +Signed-off-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini + +BZ: 1098602 + +--- + hw/i386/kvm/clock.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/clock.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 1f2a26e..d52c2ea 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -17,6 +17,7 @@ + #include "qemu/host-utils.h" + #include "sysemu/sysemu.h" + #include "sysemu/kvm.h" ++#include "sysemu/cpus.h" + #include "hw/sysbus.h" + #include "hw/kvm/clock.h" + +@@ -60,6 +61,7 @@ static uint64_t kvmclock_current_nsec(KVMClockState *s) + + cpu_physical_memory_read(kvmclock_struct_pa, &time, sizeof(time)); + ++ assert(time.tsc_timestamp <= migration_tsc); + delta = migration_tsc - time.tsc_timestamp; + if (time.tsc_shift < 0) { + delta >>= -time.tsc_shift; +@@ -118,6 +120,8 @@ static void kvmclock_vm_state_change(void *opaque, int running, + if (s->clock_valid) { + return; + } ++ ++ cpu_synchronize_all_states(); + ret = kvm_vm_ioctl(kvm_state, KVM_GET_CLOCK, &data); + if (ret < 0) { + fprintf(stderr, "KVM_GET_CLOCK failed: %s\n", strerror(ret)); +-- +1.7.1 + diff --git a/SOURCES/kvm-kvmclock-Ensure-time-in-migration-never-goes-back.v2.patch b/SOURCES/kvm-kvmclock-Ensure-time-in-migration-never-goes-back.v2.patch new file mode 100644 index 0000000..2b58b84 --- /dev/null +++ b/SOURCES/kvm-kvmclock-Ensure-time-in-migration-never-goes-back.v2.patch @@ -0,0 +1,117 @@ +From db50fd1dfca6131e29def9ed3cfd120b30894356 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Wed, 22 Oct 2014 09:46:37 +0200 +Subject: [PATCH 6/6] kvmclock: Ensure time in migration never goes backward + +Message-id: <1413971197-4624-6-git-send-email-dgilbert@redhat.com> +Patchwork-id: 61792 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 5/5] kvmclock: Ensure time in migration never goes backward +Bugzilla: 1098602 1130428 +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini + +From: Alexander Graf + +When we migrate we ask the kernel about its current belief on what the guest +time would be. However, I've seen cases where the kvmclock guest structure +indicates a time more recent than the kvm returned time. + +To make sure we never go backwards, calculate what the guest would have seen as time at the point of migration and use that value instead of the kernel returned one when it's more recent. +This bases the view of the kvmclock after migration on the +same foundation in host as well as guest. + +Signed-off-by: Alexander Graf +Cc: qemu-stable@nongnu.org +Reviewed-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +(cherry picked from commit 9a48bcd1b82494671c111109b0eefdb882581499) + +dgilbert: Rework kvmclock_current_nsec code to get 'env' since the types + have changed + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/clock.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 53056d4..4bac13e 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -14,6 +14,7 @@ + */ + + #include "qemu-common.h" ++#include "qemu/host-utils.h" + #include "sysemu/sysemu.h" + #include "sysemu/kvm.h" + #include "sysemu/cpus.h" +@@ -29,6 +30,47 @@ typedef struct KVMClockState { + bool clock_valid; + } KVMClockState; + ++struct pvclock_vcpu_time_info { ++ uint32_t version; ++ uint32_t pad0; ++ uint64_t tsc_timestamp; ++ uint64_t system_time; ++ uint32_t tsc_to_system_mul; ++ int8_t tsc_shift; ++ uint8_t flags; ++ uint8_t pad[2]; ++} __attribute__((__packed__)); /* 32 bytes */ ++ ++static uint64_t kvmclock_current_nsec(KVMClockState *s) ++{ ++ CPUX86State *env = first_cpu; ++ hwaddr kvmclock_struct_pa = env->system_time_msr & ~1ULL; ++ uint64_t migration_tsc = env->tsc; ++ struct pvclock_vcpu_time_info time; ++ uint64_t delta; ++ uint64_t nsec_lo; ++ uint64_t nsec_hi; ++ uint64_t nsec; ++ ++ if (!(env->system_time_msr & 1ULL)) { ++ /* KVM clock not active */ ++ return 0; ++ } ++ ++ cpu_physical_memory_read(kvmclock_struct_pa, &time, sizeof(time)); ++ ++ assert(time.tsc_timestamp <= migration_tsc); ++ delta = migration_tsc - time.tsc_timestamp; ++ if (time.tsc_shift < 0) { ++ delta >>= -time.tsc_shift; ++ } else { ++ delta <<= time.tsc_shift; ++ } ++ ++ mulu64(&nsec_lo, &nsec_hi, delta, time.tsc_to_system_mul); ++ nsec = (nsec_lo >> 32) | (nsec_hi << 32); ++ return nsec + time.system_time; ++} + + static void kvmclock_vm_state_change(void *opaque, int running, + RunState state) +@@ -40,9 +82,15 @@ static void kvmclock_vm_state_change(void *opaque, int running, + + if (running) { + struct kvm_clock_data data; ++ uint64_t time_at_migration = kvmclock_current_nsec(s); + + s->clock_valid = false; + ++ /* We can't rely on the migrated clock value, just discard it */ ++ if (time_at_migration) { ++ s->clock = time_at_migration; ++ } ++ + data.clock = s->clock; + data.flags = 0; + ret = kvm_vm_ioctl(kvm_state, KVM_SET_CLOCK, &data); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-kvmclock-Ensure-time-in-migration-never-goes-backwar.patch b/SOURCES/kvm-kvmclock-Ensure-time-in-migration-never-goes-backwar.patch new file mode 100644 index 0000000..0e0d8b5 --- /dev/null +++ b/SOURCES/kvm-kvmclock-Ensure-time-in-migration-never-goes-backwar.patch @@ -0,0 +1,122 @@ +From 4b6035c2a739bc4c086abbb36f0883a1178a8f1c Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Thu, 26 Jun 2014 15:06:14 +0200 +Subject: [PATCH 12/13] kvmclock: Ensure time in migration never goes backward + +RH-Author: Marcelo Tosatti +Message-id: <20140626150716.560273759@amt.cnet> +Patchwork-id: 59388 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/2] kvmclock: Ensure time in migration never goes backward +Bugzilla: 1098602 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Andrew Jones + +commit a096b3a6732f846ec57dc28b47ee9435aa0609bf upstream +Author: Alexander Graf +Date: Fri May 16 17:15:21 2014 +0200 + +When we migrate we ask the kernel about its current belief on what the guest +time would be. However, I've seen cases where the kvmclock guest structure +indicates a time more recent than the kvm returned time. + +To make sure we never go backwards, calculate what the guest would have seen +as time at the point of migration and use that value instead of the kernel +returned one when it's more recent. This bases the view of the kvmclock +after migration on the same foundation in host as well as guest. + +Signed-off-by: Alexander Graf +Cc: qemu-stable@nongnu.org +Reviewed-by: Marcelo Tosatti +Signed-off-by: Paolo Bonzini +BZ: 1098602 + +--- + hw/i386/kvm/clock.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/clock.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 49 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 6d6f3a7..1f2a26e 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -14,6 +14,7 @@ + */ + + #include "qemu-common.h" ++#include "qemu/host-utils.h" + #include "sysemu/sysemu.h" + #include "sysemu/kvm.h" + #include "hw/sysbus.h" +@@ -28,6 +29,48 @@ typedef struct KVMClockState { + bool clock_valid; + } KVMClockState; + ++struct pvclock_vcpu_time_info { ++ uint32_t version; ++ uint32_t pad0; ++ uint64_t tsc_timestamp; ++ uint64_t system_time; ++ uint32_t tsc_to_system_mul; ++ int8_t tsc_shift; ++ uint8_t flags; ++ uint8_t pad[2]; ++} __attribute__((__packed__)); /* 32 bytes */ ++ ++static uint64_t kvmclock_current_nsec(KVMClockState *s) ++{ ++ CPUArchState *acpu = first_cpu; ++ CPUState *cpu = ENV_GET_CPU(acpu); ++ CPUX86State *env = cpu->env_ptr; ++ hwaddr kvmclock_struct_pa = env->system_time_msr & ~1ULL; ++ uint64_t migration_tsc = env->tsc; ++ struct pvclock_vcpu_time_info time; ++ uint64_t delta; ++ uint64_t nsec_lo; ++ uint64_t nsec_hi; ++ uint64_t nsec; ++ ++ if (!(env->system_time_msr & 1ULL)) { ++ /* KVM clock not active */ ++ return 0; ++ } ++ ++ cpu_physical_memory_read(kvmclock_struct_pa, &time, sizeof(time)); ++ ++ delta = migration_tsc - time.tsc_timestamp; ++ if (time.tsc_shift < 0) { ++ delta >>= -time.tsc_shift; ++ } else { ++ delta <<= time.tsc_shift; ++ } ++ ++ mulu64(&nsec_lo, &nsec_hi, delta, time.tsc_to_system_mul); ++ nsec = (nsec_lo >> 32) | (nsec_hi << 32); ++ return nsec + time.system_time; ++} + + static void kvmclock_vm_state_change(void *opaque, int running, + RunState state) +@@ -39,9 +82,15 @@ static void kvmclock_vm_state_change(void *opaque, int running, + + if (running) { + struct kvm_clock_data data; ++ uint64_t time_at_migration = kvmclock_current_nsec(s); + + s->clock_valid = false; + ++ /* We can't rely on the migrated clock value, just discard it */ ++ if (time_at_migration) { ++ s->clock = time_at_migration; ++ } ++ + data.clock = s->clock; + data.flags = 0; + ret = kvm_vm_ioctl(kvm_state, KVM_SET_CLOCK, &data); +-- +1.7.1 + diff --git a/SOURCES/kvm-kvmvapic-Catch-invalid-ROM-size.patch b/SOURCES/kvm-kvmvapic-Catch-invalid-ROM-size.patch new file mode 100644 index 0000000..04688b1 --- /dev/null +++ b/SOURCES/kvm-kvmvapic-Catch-invalid-ROM-size.patch @@ -0,0 +1,80 @@ +From ae31d75c7c2872dfc2172921422bf6b1c8bb6b03 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Wed, 6 Nov 2013 02:11:01 +0100 +Subject: [PATCH 54/81] kvmvapic: Catch invalid ROM size + +RH-Author: Bandan Das +Message-id: <1383703863-4840-1-git-send-email-bsd@redhat.com> +Patchwork-id: 55471 +O-Subject: [PATCH RHEL-7.0 qemu-kvm 1/3] kvmvapic: Catch invalid ROM size +Bugzilla: 920021 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov +RH-Acked-by: Alex Williamson +RH-Acked-by: Eduardo Habkost + +From: Jan Kiszka + +If not caught early, a zero-length ROM will cause a NULL-pointer access +later on in patch_hypercalls when allocating a zero-length ROM copy and +trying to read from it. + +Signed-off-by: Jan Kiszka +Signed-off-by: Paolo Bonzini +(cherry picked from commit 18e5eec4db96a00907eb588a2b803401637c7f67) + +Conflicts: + hw/i386/kvmvapic.c +--- + hw/i386/kvmvapic.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvmvapic.c | 11 +++++++++-- + 1 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c +index a7db94d..a2c7e8f 100644 +--- a/hw/i386/kvmvapic.c ++++ b/hw/i386/kvmvapic.c +@@ -572,7 +572,7 @@ static int patch_hypercalls(VAPICROMState *s) + * enable write access to the option ROM so that variables can be updated by + * the guest. + */ +-static void vapic_map_rom_writable(VAPICROMState *s) ++static int vapic_map_rom_writable(VAPICROMState *s) + { + hwaddr rom_paddr = s->rom_state_paddr & ROM_BLOCK_MASK; + MemoryRegionSection section; +@@ -593,6 +593,9 @@ static void vapic_map_rom_writable(VAPICROMState *s) + /* read ROM size from RAM region */ + ram = memory_region_get_ram_ptr(section.mr); + rom_size = ram[rom_paddr + 2] * ROM_BLOCK_SIZE; ++ if (rom_size == 0) { ++ return -1; ++ } + s->rom_size = rom_size; + + /* We need to round to avoid creating subpages +@@ -605,11 +608,15 @@ static void vapic_map_rom_writable(VAPICROMState *s) + rom_size); + memory_region_add_subregion_overlap(as, rom_paddr, &s->rom, 1000); + s->rom_mapped_writable = true; ++ ++ return 0; + } + + static int vapic_prepare(VAPICROMState *s) + { +- vapic_map_rom_writable(s); ++ if (vapic_map_rom_writable(s) < 0) { ++ return -1; ++ } + + if (patch_hypercalls(s) < 0) { + return -1; +-- +1.7.1 + diff --git a/SOURCES/kvm-kvmvapic-Clear-also-physical-ROM-address-when-enteri.patch b/SOURCES/kvm-kvmvapic-Clear-also-physical-ROM-address-when-enteri.patch new file mode 100644 index 0000000..d3a9c65 --- /dev/null +++ b/SOURCES/kvm-kvmvapic-Clear-also-physical-ROM-address-when-enteri.patch @@ -0,0 +1,55 @@ +From 9d0c4b3d52464cb38b531e610a71ff1e0f6fcf61 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Wed, 6 Nov 2013 02:11:03 +0100 +Subject: [PATCH 56/81] kvmvapic: Clear also physical ROM address when entering INACTIVE state + +RH-Author: Bandan Das +Message-id: <1383703863-4840-3-git-send-email-bsd@redhat.com> +Patchwork-id: 55473 +O-Subject: [PATCH RHEL-7.0 qemu-kvm 3/3] kvmvapic: Clear also physical ROM address when entering INACTIVE state +Bugzilla: 920021 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov +RH-Acked-by: Alex Williamson + +From: Jan Kiszka + +To avoid misinterpreting INACTIVE after migration as old qemu-kvm's +STANDBY, also clear rom_state_paddr when going back to this state. + +Signed-off-by: Jan Kiszka +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4357930b8a7d2fcff2d8121ec518117428a781e7) +--- + hw/i386/kvmvapic.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvmvapic.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c +index a96ea85..577ae64 100644 +--- a/hw/i386/kvmvapic.c ++++ b/hw/i386/kvmvapic.c +@@ -505,6 +505,7 @@ static void vapic_reset(DeviceState *dev) + VAPICROMState *s = DO_UPCAST(VAPICROMState, busdev.qdev, dev); + + s->state = VAPIC_INACTIVE; ++ s->rom_state_paddr = 0; + vapic_enable_tpr_reporting(false); + } + +@@ -655,6 +656,7 @@ static void vapic_write(void *opaque, hwaddr addr, uint64_t data, + } + if (vapic_prepare(s) < 0) { + s->state = VAPIC_INACTIVE; ++ s->rom_state_paddr = 0; + break; + } + break; +-- +1.7.1 + diff --git a/SOURCES/kvm-kvmvapic-Enter-inactive-state-on-hardware-reset.patch b/SOURCES/kvm-kvmvapic-Enter-inactive-state-on-hardware-reset.patch new file mode 100644 index 0000000..d5b1949 --- /dev/null +++ b/SOURCES/kvm-kvmvapic-Enter-inactive-state-on-hardware-reset.patch @@ -0,0 +1,51 @@ +From 1199c18251b039c80d66b0036e4f22bb2ce7dbd8 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Wed, 6 Nov 2013 02:11:02 +0100 +Subject: [PATCH 55/81] kvmvapic: Enter inactive state on hardware reset + +RH-Author: Bandan Das +Message-id: <1383703863-4840-2-git-send-email-bsd@redhat.com> +Patchwork-id: 55472 +O-Subject: [PATCH RHEL-7.0 qemu-kvm 2/3] kvmvapic: Enter inactive state on hardware reset +Bugzilla: 920021 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov +RH-Acked-by: Alex Williamson + +From: Jan Kiszka + +ROM layout may change after reset of devices are hotplugged, so we have +to pick up the physical address again when the ROM is initialized. This +is best achieved by resetting the state to INACTIVE. + +Signed-off-by: Jan Kiszka +Signed-off-by: Paolo Bonzini +(cherry picked from commit c056bc3f3464cfae1c94b7dd633d3ec13b13b655) +--- + hw/i386/kvmvapic.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvmvapic.c | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c +index a2c7e8f..a96ea85 100644 +--- a/hw/i386/kvmvapic.c ++++ b/hw/i386/kvmvapic.c +@@ -504,9 +504,7 @@ static void vapic_reset(DeviceState *dev) + { + VAPICROMState *s = DO_UPCAST(VAPICROMState, busdev.qdev, dev); + +- if (s->state == VAPIC_ACTIVE) { +- s->state = VAPIC_STANDBY; +- } ++ s->state = VAPIC_INACTIVE; + vapic_enable_tpr_reporting(false); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-libcacard-link-against-qemu-error.o-for-error_report.patch b/SOURCES/kvm-libcacard-link-against-qemu-error.o-for-error_report.patch new file mode 100644 index 0000000..146610e --- /dev/null +++ b/SOURCES/kvm-libcacard-link-against-qemu-error.o-for-error_report.patch @@ -0,0 +1,44 @@ +From 4117c536c678c75683236e48246d78aa87a6212d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:04 +0200 +Subject: [PATCH 01/19] libcacard: link against qemu-error.o for error_report() + +Message-id: <1414059011-15516-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 61835 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 1/8] libcacard: link against qemu-error.o for error_report() +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Stefan Hajnoczi + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 975a0015ee380f49a3be744279a6a06ab97e960a) +Signed-off-by: Miroslav Rezanina + +Conflicts: + libcacard/Makefile + +Signed-off-by: Kevin Wolf +--- + libcacard/Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/libcacard/Makefile b/libcacard/Makefile +index 6bdf0c4..c93cc6a 100644 +--- a/libcacard/Makefile ++++ b/libcacard/Makefile +@@ -4,7 +4,8 @@ TOOLS += vscclient$(EXESUF) + + # objects linked into a shared library, built with libtool with -fPIC if required + libcacard-obj-y = $(stub-obj-y) $(libcacard-y) +-libcacard-obj-y += util/osdep.o util/iov.o util/cutils.o util/qemu-timer-common.o util/error.o util/hexdump.o ++libcacard-obj-y += util/osdep.o util/iov.o util/cutils.o util/qemu-timer-common.o util/hexdump.o ++libcacard-obj-y += util/error.o util/qemu-error.o + libcacard-obj-$(CONFIG_WIN32) += util/oslib-win32.o util/qemu-thread-win32.o + libcacard-obj-$(CONFIG_POSIX) += util/oslib-posix.o util/qemu-thread-posix.o + libcacard-obj-y += $(filter trace/%, $(util-obj-y)) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-libqtest-New-qtest_end-to-go-with-qtest_start.patch b/SOURCES/kvm-libqtest-New-qtest_end-to-go-with-qtest_start.patch new file mode 100644 index 0000000..f62f41f --- /dev/null +++ b/SOURCES/kvm-libqtest-New-qtest_end-to-go-with-qtest_start.patch @@ -0,0 +1,142 @@ +From ab193a7368375c73e232f3b64d9c372c70bbf52c Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:18 +0200 +Subject: [PATCH 08/14] libqtest: New qtest_end() to go with qtest_start() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-9-git-send-email-armbru@redhat.com> +Patchwork-id: 54566 +O-Subject: [PATCH 7.0 qemu-kvm 08/10] libqtest: New qtest_end() to go with qtest_start() +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Andreas Färber +Reviewed-by: Anthony Liguori +Message-id: 1371711329-9144-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 1d9358e686125c125b52529fa68baf36aa2d0d09) +--- + tests/fdc-test.c | 2 +- + tests/hd-geo-test.c | 8 ++++---- + tests/ide-test.c | 2 +- + tests/libqtest.h | 12 ++++++++++++ + 4 files changed, 18 insertions(+), 6 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/fdc-test.c | 2 +- + tests/hd-geo-test.c | 8 ++++---- + tests/ide-test.c | 2 +- + tests/libqtest.h | 12 ++++++++++++ + 4 files changed, 18 insertions(+), 6 deletions(-) + +diff --git a/tests/fdc-test.c b/tests/fdc-test.c +index 4b0301d..fd198dc 100644 +--- a/tests/fdc-test.c ++++ b/tests/fdc-test.c +@@ -556,7 +556,7 @@ int main(int argc, char **argv) + ret = g_test_run(); + + /* Cleanup */ +- qtest_quit(global_qtest); ++ qtest_end(); + unlink(test_image); + + return ret; +diff --git a/tests/hd-geo-test.c b/tests/hd-geo-test.c +index 9a31e85..b72042e 100644 +--- a/tests/hd-geo-test.c ++++ b/tests/hd-geo-test.c +@@ -244,7 +244,7 @@ static void test_ide_none(void) + setup_common(argv, ARRAY_SIZE(argv)); + qtest_start(g_strjoinv(" ", argv)); + test_cmos(); +- qtest_quit(global_qtest); ++ qtest_end(); + } + + static void test_ide_mbr(bool use_device, MBRcontents mbr) +@@ -262,7 +262,7 @@ static void test_ide_mbr(bool use_device, MBRcontents mbr) + } + qtest_start(g_strjoinv(" ", argv)); + test_cmos(); +- qtest_quit(global_qtest); ++ qtest_end(); + } + + /* +@@ -334,7 +334,7 @@ static void test_ide_drive_user(const char *dev, bool trans) + g_free(opts); + qtest_start(g_strjoinv(" ", argv)); + test_cmos(); +- qtest_quit(global_qtest); ++ qtest_end(); + } + + /* +@@ -387,7 +387,7 @@ static void test_ide_drive_cd_0(void) + } + qtest_start(g_strjoinv(" ", argv)); + test_cmos(); +- qtest_quit(global_qtest); ++ qtest_end(); + } + + int main(int argc, char **argv) +diff --git a/tests/ide-test.c b/tests/ide-test.c +index 365e995..177ab00 100644 +--- a/tests/ide-test.c ++++ b/tests/ide-test.c +@@ -120,7 +120,7 @@ static void ide_test_start(const char *cmdline_fmt, ...) + + static void ide_test_quit(void) + { +- qtest_quit(global_qtest); ++ qtest_end(); + } + + static QPCIDevice *get_pci_device(uint16_t *bmdma_base) +diff --git a/tests/libqtest.h b/tests/libqtest.h +index 437bda3..0f6aade 100644 +--- a/tests/libqtest.h ++++ b/tests/libqtest.h +@@ -17,6 +17,7 @@ + #ifndef LIBQTEST_H + #define LIBQTEST_H + ++#include + #include + #include + #include +@@ -319,6 +320,17 @@ static inline QTestState *qtest_start(const char *args) + } + + /** ++ * qtest_end: ++ * ++ * Shut down the QEMU process started by qtest_start(). ++ */ ++static inline void qtest_end(void) ++{ ++ qtest_quit(global_qtest); ++ global_qtest = NULL; ++} ++ ++/** + * qmp: + * @fmt...: QMP message to send to qemu + * +-- +1.7.11.7 + diff --git a/SOURCES/kvm-libqtest-Plug-fd-and-memory-leaks-in-qtest_quit.patch b/SOURCES/kvm-libqtest-Plug-fd-and-memory-leaks-in-qtest_quit.patch new file mode 100644 index 0000000..4c39b2f --- /dev/null +++ b/SOURCES/kvm-libqtest-Plug-fd-and-memory-leaks-in-qtest_quit.patch @@ -0,0 +1,61 @@ +From 5d33e5e1bedee73ef893f1ad4141e8a613e15a84 Mon Sep 17 00:00:00 2001 +Message-Id: <5d33e5e1bedee73ef893f1ad4141e8a613e15a84.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:17 +0200 +Subject: [PATCH 07/14] libqtest: Plug fd and memory leaks in qtest_quit() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-8-git-send-email-armbru@redhat.com> +Patchwork-id: 54561 +O-Subject: [PATCH 7.0 qemu-kvm 07/10] libqtest: Plug fd and memory leaks in qtest_quit() +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Reviewed-by: Anthony Liguori +Signed-off-by: Markus Armbruster +Reviewed-by: Andreas Färber +Message-id: 1371711329-9144-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit fdd26fca3ce66863e547560fbde1a444fc5d71b7) +--- + tests/libqtest.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Michal Novotny +--- + tests/libqtest.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/tests/libqtest.c b/tests/libqtest.c +index 879ffe9..bb82069 100644 +--- a/tests/libqtest.c ++++ b/tests/libqtest.c +@@ -171,12 +171,16 @@ void qtest_quit(QTestState *s) + waitpid(pid, &status, 0); + } + ++ close(s->fd); ++ close(s->qmp_fd); ++ g_string_free(s->rx, true); + unlink(s->pid_file); + unlink(s->socket_path); + unlink(s->qmp_socket_path); + g_free(s->pid_file); + g_free(s->socket_path); + g_free(s->qmp_socket_path); ++ g_free(s); + } + + static void socket_sendf(int fd, const char *fmt, va_list ap) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-libqtest-add-qmp-fmt-.-QDict-function.patch b/SOURCES/kvm-libqtest-add-qmp-fmt-.-QDict-function.patch new file mode 100644 index 0000000..f09bccf --- /dev/null +++ b/SOURCES/kvm-libqtest-add-qmp-fmt-.-QDict-function.patch @@ -0,0 +1,218 @@ +From 5f073207f144613806bc0b004a01ef66da9ad5e0 Mon Sep 17 00:00:00 2001 +Message-Id: <5f073207f144613806bc0b004a01ef66da9ad5e0.1387288155.git.minovotn@redhat.com> +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:25 +0100 +Subject: [PATCH 5/8] libqtest: add qmp(fmt, ...) -> QDict* function +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-6-git-send-email-stefanha@redhat.com> +Patchwork-id: 56259 +O-Subject: [RHEL7 qemu-kvm PATCH 5/8] libqtest: add qmp(fmt, ...) -> QDict* function +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +Add a qtest qmp() function that returns the response object. This +allows test cases to verify the result or to check for error responses. +It also allows waiting for QMP events. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Reviewed-by: Andreas Färber +(cherry picked from commit 0c460dac03e7919079525d8e24ef2c4c607c219d) +Signed-off-by: Stefan Hajnoczi +--- + tests/libqtest.c | 66 ++++++++++++++++++++++++++++++++++++++++++++------------ + tests/libqtest.h | 37 +++++++++++++++++++++++++++++++ + 2 files changed, 89 insertions(+), 14 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/libqtest.c | 66 ++++++++++++++++++++++++++++++++++++++++++++------------ + tests/libqtest.h | 37 +++++++++++++++++++++++++++++++ + 2 files changed, 89 insertions(+), 14 deletions(-) + +diff --git a/tests/libqtest.c b/tests/libqtest.c +index dc4c983..83424c3 100644 +--- a/tests/libqtest.c ++++ b/tests/libqtest.c +@@ -30,6 +30,8 @@ + + #include "qemu/compiler.h" + #include "qemu/osdep.h" ++#include "qapi/qmp/json-streamer.h" ++#include "qapi/qmp/json-parser.h" + + #define MAX_IRQ 256 + +@@ -291,16 +293,38 @@ redo: + return words; + } + +-void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap) ++typedef struct { ++ JSONMessageParser parser; ++ QDict *response; ++} QMPResponseParser; ++ ++static void qmp_response(JSONMessageParser *parser, QList *tokens) + { +- bool has_reply = false; +- int nesting = 0; ++ QMPResponseParser *qmp = container_of(parser, QMPResponseParser, parser); ++ QObject *obj; ++ ++ obj = json_parser_parse(tokens, NULL); ++ if (!obj) { ++ fprintf(stderr, "QMP JSON response parsing failed\n"); ++ exit(1); ++ } ++ ++ g_assert(qobject_type(obj) == QTYPE_QDICT); ++ g_assert(!qmp->response); ++ qmp->response = (QDict *)obj; ++} ++ ++QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap) ++{ ++ QMPResponseParser qmp; + + /* Send QMP request */ + socket_sendf(s->qmp_fd, fmt, ap); + + /* Receive reply */ +- while (!has_reply || nesting > 0) { ++ qmp.response = NULL; ++ json_message_parser_init(&qmp.parser, qmp_response); ++ while (!qmp.response) { + ssize_t len; + char c; + +@@ -314,25 +338,39 @@ void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap) + exit(1); + } + +- switch (c) { +- case '{': +- nesting++; +- has_reply = true; +- break; +- case '}': +- nesting--; +- break; +- } ++ json_message_parser_feed(&qmp.parser, &c, 1); + } ++ json_message_parser_destroy(&qmp.parser); ++ ++ return qmp.response; ++} ++ ++QDict *qtest_qmp(QTestState *s, const char *fmt, ...) ++{ ++ va_list ap; ++ QDict *response; ++ ++ va_start(ap, fmt); ++ response = qtest_qmpv(s, fmt, ap); ++ va_end(ap); ++ return response; ++} ++ ++void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap) ++{ ++ QDict *response = qtest_qmpv(s, fmt, ap); ++ QDECREF(response); + } + + void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...) + { + va_list ap; ++ QDict *response; + + va_start(ap, fmt); +- qtest_qmpv_discard_response(s, fmt, ap); ++ response = qtest_qmpv(s, fmt, ap); + va_end(ap); ++ QDECREF(response); + } + + const char *qtest_get_arch(void) +diff --git a/tests/libqtest.h b/tests/libqtest.h +index 3faa49b..0d914f6 100644 +--- a/tests/libqtest.h ++++ b/tests/libqtest.h +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include "qapi/qmp/qdict.h" + + typedef struct QTestState QTestState; + +@@ -53,6 +54,15 @@ void qtest_quit(QTestState *s); + void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...); + + /** ++ * qtest_qmp: ++ * @s: #QTestState instance to operate on. ++ * @fmt...: QMP message to send to qemu ++ * ++ * Sends a QMP message to QEMU and returns the response. ++ */ ++QDict *qtest_qmp(QTestState *s, const char *fmt, ...); ++ ++/** + * qtest_qmpv_discard_response: + * @s: #QTestState instance to operate on. + * @fmt: QMP message to send to QEMU +@@ -63,6 +73,16 @@ void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...); + void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap); + + /** ++ * qtest_qmpv: ++ * @s: #QTestState instance to operate on. ++ * @fmt: QMP message to send to QEMU ++ * @ap: QMP message arguments ++ * ++ * Sends a QMP message to QEMU and returns the response. ++ */ ++QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap); ++ ++/** + * qtest_get_irq: + * @s: #QTestState instance to operate on. + * @num: Interrupt to observe. +@@ -331,6 +351,23 @@ static inline void qtest_end(void) + } + + /** ++ * qmp: ++ * @fmt...: QMP message to send to qemu ++ * ++ * Sends a QMP message to QEMU and returns the response. ++ */ ++static inline QDict *qmp(const char *fmt, ...) ++{ ++ va_list ap; ++ QDict *response; ++ ++ va_start(ap, fmt); ++ response = qtest_qmpv(global_qtest, fmt, ap); ++ va_end(ap); ++ return response; ++} ++ ++/** + * qmp_discard_response: + * @fmt...: QMP message to send to qemu + * +-- +1.7.11.7 + diff --git a/SOURCES/kvm-libqtest-rename-qmp-to-qmp_discard_response.patch b/SOURCES/kvm-libqtest-rename-qmp-to-qmp_discard_response.patch new file mode 100644 index 0000000..5cf6cb8 --- /dev/null +++ b/SOURCES/kvm-libqtest-rename-qmp-to-qmp_discard_response.patch @@ -0,0 +1,204 @@ +From ecbbc511c0c4239fed38527e05677f058e5dd5f9 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:24 +0100 +Subject: [PATCH 4/8] libqtest: rename qmp() to qmp_discard_response() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-5-git-send-email-stefanha@redhat.com> +Patchwork-id: 56258 +O-Subject: [RHEL7 qemu-kvm PATCH 4/8] libqtest: rename qmp() to qmp_discard_response() +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +Existing qmp() callers do not expect a response object. In order to +implement real QMP test cases it will be necessary to inspect the +response object. + +Rename qmp() to qmp_discard_response(). Later patches will introduce a +qmp() function that returns the response object and tests that use it. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Reviewed-by: Andreas Färber +(cherry picked from commit 0d1aa05e9eba2437fdcdfbaa846c850c986bf7c6) +Signed-off-by: Stefan Hajnoczi + +Conflicts: + tests/boot-order-test.c + tests/ide-test.c + +RHEL does not have tests/ide-test.c:test_flush() and the +boot-order-test.c is also slightly older. +--- + tests/boot-order-test.c | 4 ++-- + tests/fdc-test.c | 15 +++++++++------ + tests/libqtest.c | 10 +++++----- + tests/libqtest.h | 20 ++++++++++---------- + 4 files changed, 26 insertions(+), 23 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/boot-order-test.c | 4 ++-- + tests/fdc-test.c | 15 +++++++++------ + tests/libqtest.c | 10 +++++----- + tests/libqtest.h | 20 ++++++++++---------- + 4 files changed, 26 insertions(+), 23 deletions(-) + +diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c +index 447be31..a35e9f7 100644 +--- a/tests/boot-order-test.c ++++ b/tests/boot-order-test.c +@@ -36,12 +36,12 @@ static void test_pc_with_args(const char *test_args, + + qtest_start(args); + test_pc_cmos(boot1, boot2); +- qmp("{ 'execute': 'system_reset' }"); ++ qmp_discard_response("{ 'execute': 'system_reset' }"); + /* + * system_reset only requests reset. We get a RESET event after + * the actual reset completes. Need to wait for that. + */ +- qmp(""); /* HACK: wait for event */ ++ qmp_discard_response(""); /* HACK: wait for event */ + test_pc_cmos(reboot1, reboot2); + qtest_quit(global_qtest); + g_free(args); +diff --git a/tests/fdc-test.c b/tests/fdc-test.c +index fd198dc..38b5b17 100644 +--- a/tests/fdc-test.c ++++ b/tests/fdc-test.c +@@ -290,10 +290,12 @@ static void test_media_insert(void) + + /* Insert media in drive. DSKCHK should not be reset until a step pulse + * is sent. */ +- qmp("{'execute':'change', 'arguments':{ 'device':'floppy0', " +- "'target': '%s' }}", test_image); +- qmp(""); /* ignore event (FIXME open -> open transition?!) */ +- qmp(""); /* ignore event */ ++ qmp_discard_response("{'execute':'change', 'arguments':{" ++ " 'device':'floppy0', 'target': '%s' }}", ++ test_image); ++ qmp_discard_response(""); /* ignore event ++ (FIXME open -> open transition?!) */ ++ qmp_discard_response(""); /* ignore event */ + + dir = inb(FLOPPY_BASE + reg_dir); + assert_bit_set(dir, DSKCHG); +@@ -322,8 +324,9 @@ static void test_media_change(void) + + /* Eject the floppy and check that DSKCHG is set. Reading it out doesn't + * reset the bit. */ +- qmp("{'execute':'eject', 'arguments':{ 'device':'floppy0' }}"); +- qmp(""); /* ignore event */ ++ qmp_discard_response("{'execute':'eject', 'arguments':{" ++ " 'device':'floppy0' }}"); ++ qmp_discard_response(""); /* ignore event */ + + dir = inb(FLOPPY_BASE + reg_dir); + assert_bit_set(dir, DSKCHG); +diff --git a/tests/libqtest.c b/tests/libqtest.c +index bb82069..dc4c983 100644 +--- a/tests/libqtest.c ++++ b/tests/libqtest.c +@@ -151,8 +151,8 @@ QTestState *qtest_init(const char *extra_args) + } + + /* Read the QMP greeting and then do the handshake */ +- qtest_qmp(s, ""); +- qtest_qmp(s, "{ 'execute': 'qmp_capabilities' }"); ++ qtest_qmp_discard_response(s, ""); ++ qtest_qmp_discard_response(s, "{ 'execute': 'qmp_capabilities' }"); + + if (getenv("QTEST_STOP")) { + kill(qtest_qemu_pid(s), SIGSTOP); +@@ -291,7 +291,7 @@ redo: + return words; + } + +-void qtest_qmpv(QTestState *s, const char *fmt, va_list ap) ++void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap) + { + bool has_reply = false; + int nesting = 0; +@@ -326,12 +326,12 @@ void qtest_qmpv(QTestState *s, const char *fmt, va_list ap) + } + } + +-void qtest_qmp(QTestState *s, const char *fmt, ...) ++void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...) + { + va_list ap; + + va_start(ap, fmt); +- qtest_qmpv(s, fmt, ap); ++ qtest_qmpv_discard_response(s, fmt, ap); + va_end(ap); + } + +diff --git a/tests/libqtest.h b/tests/libqtest.h +index 0f6aade..3faa49b 100644 +--- a/tests/libqtest.h ++++ b/tests/libqtest.h +@@ -44,23 +44,23 @@ QTestState *qtest_init(const char *extra_args); + void qtest_quit(QTestState *s); + + /** +- * qtest_qmp: ++ * qtest_qmp_discard_response: + * @s: #QTestState instance to operate on. + * @fmt...: QMP message to send to qemu + * +- * Sends a QMP message to QEMU ++ * Sends a QMP message to QEMU and consumes the response. + */ +-void qtest_qmp(QTestState *s, const char *fmt, ...); ++void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...); + + /** +- * qtest_qmpv: ++ * qtest_qmpv_discard_response: + * @s: #QTestState instance to operate on. + * @fmt: QMP message to send to QEMU + * @ap: QMP message arguments + * +- * Sends a QMP message to QEMU. ++ * Sends a QMP message to QEMU and consumes the response. + */ +-void qtest_qmpv(QTestState *s, const char *fmt, va_list ap); ++void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap); + + /** + * qtest_get_irq: +@@ -331,17 +331,17 @@ static inline void qtest_end(void) + } + + /** +- * qmp: ++ * qmp_discard_response: + * @fmt...: QMP message to send to qemu + * +- * Sends a QMP message to QEMU ++ * Sends a QMP message to QEMU and consumes the response. + */ +-static inline void qmp(const char *fmt, ...) ++static inline void qmp_discard_response(const char *fmt, ...) + { + va_list ap; + + va_start(ap, fmt); +- qtest_qmpv(global_qtest, fmt, ap); ++ qtest_qmpv_discard_response(global_qtest, fmt, ap); + va_end(ap); + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-linux-aio-Fix-laio-resource-leak.patch b/SOURCES/kvm-linux-aio-Fix-laio-resource-leak.patch new file mode 100644 index 0000000..811019c --- /dev/null +++ b/SOURCES/kvm-linux-aio-Fix-laio-resource-leak.patch @@ -0,0 +1,61 @@ +From e5f537a8b3821b68040eada7a964b2dd1b17d3d3 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 21 Nov 2017 03:21:45 +0100 +Subject: [PATCH 2/9] linux-aio: Fix laio resource leak + +RH-Author: Fam Zheng +Message-id: <20171121032145.5681-3-famz@redhat.com> +Patchwork-id: 77767 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v2 2/2] linux-aio: Fix laio resource leak +Bugzilla: 1491434 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Laurent Vivier + +From: Gonglei + +when hotplug virtio-scsi disks using laio, the aio_nr will +increase in laio_init() by io_setup(), we can see the number by + # cat /proc/sys/fs/aio-nr + 128 +if the aio_nr attach the maxnum, which found from + # cat /proc/sys/fs/aio-max-nr + 65536 +the hotplug process will fail because of aio context leak. + +Fix it by io_destroy in laio_cleanup(). + +Reported-by: daifulai +Signed-off-by: Gonglei +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a1abf40d6be2fc4b40d90ae3b46442f4a671776b) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/linux-aio.c + +Contextual conflict because of the previous patch's necessary deviation +from upstream. +--- + block/linux-aio.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/block/linux-aio.c b/block/linux-aio.c +index 43f14f3..e1d2593 100644 +--- a/block/linux-aio.c ++++ b/block/linux-aio.c +@@ -232,5 +232,10 @@ void laio_cleanup(void *s_) + + qemu_aio_set_fd_handler(s->efd, NULL, NULL, NULL, NULL); + close(s->efd); ++ ++ if (io_destroy(s->ctx) != 0) { ++ fprintf(stderr, "%s: destroy AIO context %p failed\n", ++ __func__, &s->ctx); ++ } + g_free(s); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-linux-headers-Update-for-KVM-VFIO-device.patch b/SOURCES/kvm-linux-headers-Update-for-KVM-VFIO-device.patch new file mode 100644 index 0000000..835fbc4 --- /dev/null +++ b/SOURCES/kvm-linux-headers-Update-for-KVM-VFIO-device.patch @@ -0,0 +1,45 @@ +From 5bf6f353b202b4b3cfcf7c570dddf0557f39480c Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 17:51:05 +0100 +Subject: [PATCH 20/25] linux-headers: Update for KVM-VFIO device + +RH-Author: Alex Williamson +Message-id: <20131105175105.19705.91817.stgit@bling.home> +Patchwork-id: 55442 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] linux-headers: Update for KVM-VFIO device +Bugzilla: 1025474 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1025474 +Upstream: Posted - http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg00090.html + +Signed-off-by: Alex Williamson +--- + linux-headers/linux/kvm.h | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + linux-headers/linux/kvm.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h +index 01bf15b..e32ef4a 100644 +--- a/linux-headers/linux/kvm.h ++++ b/linux-headers/linux/kvm.h +@@ -840,6 +840,10 @@ struct kvm_device_attr { + #define KVM_DEV_TYPE_FSL_MPIC_20 1 + #define KVM_DEV_TYPE_FSL_MPIC_42 2 + #define KVM_DEV_TYPE_XICS 3 ++#define KVM_DEV_TYPE_VFIO 4 ++#define KVM_DEV_VFIO_GROUP 1 ++#define KVM_DEV_VFIO_GROUP_ADD 1 ++#define KVM_DEV_VFIO_GROUP_DEL 2 + + /* + * ioctls for VM fds +-- +1.7.1 + diff --git a/SOURCES/kvm-linux-headers-Update-to-include-region-based-display.patch b/SOURCES/kvm-linux-headers-Update-to-include-region-based-display.patch new file mode 100644 index 0000000..92d8171 --- /dev/null +++ b/SOURCES/kvm-linux-headers-Update-to-include-region-based-display.patch @@ -0,0 +1,97 @@ +From 2065c7a1c75f56c8ea23952fd4de4b031a96552c Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:21 +0200 +Subject: [PATCH 13/17] linux-headers: Update to include region based display + support. + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-8-git-send-email-tgupta@redhat.com> +Patchwork-id: 80913 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 07/11] linux-headers: Update to include region based display support. +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +update Linux headers to 4.16-rc5 + +Note that VIRTIO_GPU_CAPSET_VIRGL2 was added manually so it has to +be added manually after re-running scripts/update-linux-headers.sh. + +Signed-off-by: Paolo Bonzini +(cherry picked from 9f2d175db5c29b23bc1a560041043d0b10ee57dc) + +Conflict: Only cherry-picking macros for adding region based display +support + +Signed-off-by: Miroslav Rezanina +--- + linux-headers/linux/vfio.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 52 insertions(+) + +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index 8995a34..0dab0cc 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -414,6 +414,58 @@ struct vfio_pci_hot_reset { + + #define VFIO_DEVICE_PCI_HOT_RESET _IO(VFIO_TYPE, VFIO_BASE + 13) + ++/** ++ * VFIO_DEVICE_QUERY_GFX_PLANE - _IOW(VFIO_TYPE, VFIO_BASE + 14, ++ * struct vfio_device_query_gfx_plane) ++ * ++ * Set the drm_plane_type and flags, then retrieve the gfx plane info. ++ * ++ * flags supported: ++ * - VFIO_GFX_PLANE_TYPE_PROBE and VFIO_GFX_PLANE_TYPE_DMABUF are set ++ * to ask if the mdev supports dma-buf. 0 on support, -EINVAL on no ++ * support for dma-buf. ++ * - VFIO_GFX_PLANE_TYPE_PROBE and VFIO_GFX_PLANE_TYPE_REGION are set ++ * to ask if the mdev supports region. 0 on support, -EINVAL on no ++ * support for region. ++ * - VFIO_GFX_PLANE_TYPE_DMABUF or VFIO_GFX_PLANE_TYPE_REGION is set ++ * with each call to query the plane info. ++ * - Others are invalid and return -EINVAL. ++ * ++ * Note: ++ * 1. Plane could be disabled by guest. In that case, success will be ++ * returned with zero-initialized drm_format, size, width and height ++ * fields. ++ * 2. x_hot/y_hot is set to 0xFFFFFFFF if no hotspot information available ++ * ++ * Return: 0 on success, -errno on other failure. ++ */ ++struct vfio_device_gfx_plane_info { ++ __u32 argsz; ++ __u32 flags; ++#define VFIO_GFX_PLANE_TYPE_PROBE (1 << 0) ++#define VFIO_GFX_PLANE_TYPE_DMABUF (1 << 1) ++#define VFIO_GFX_PLANE_TYPE_REGION (1 << 2) ++ /* in */ ++ __u32 drm_plane_type; /* type of plane: DRM_PLANE_TYPE_* */ ++ /* out */ ++ __u32 drm_format; /* drm format of plane */ ++ __u64 drm_format_mod; /* tiled mode */ ++ __u32 width; /* width of plane */ ++ __u32 height; /* height of plane */ ++ __u32 stride; /* stride of plane */ ++ __u32 size; /* size of plane in bytes, align on page*/ ++ __u32 x_pos; /* horizontal position of cursor plane */ ++ __u32 y_pos; /* vertical position of cursor plane*/ ++ __u32 x_hot; /* horizontal position of cursor hotspot */ ++ __u32 y_hot; /* vertical position of cursor hotspot */ ++ union { ++ __u32 region_index; /* region index */ ++ __u32 dmabuf_id; /* dma-buf id */ ++ }; ++}; ++ ++#define VFIO_DEVICE_QUERY_GFX_PLANE _IO(VFIO_TYPE, VFIO_BASE + 14) ++ + /* -------- API for Type1 VFIO IOMMU -------- */ + + /** +-- +1.8.3.1 + diff --git a/SOURCES/kvm-linux-headers-Update-to-include-vfio-pci-hot-reset-s.patch b/SOURCES/kvm-linux-headers-Update-to-include-vfio-pci-hot-reset-s.patch new file mode 100644 index 0000000..2b068a1 --- /dev/null +++ b/SOURCES/kvm-linux-headers-Update-to-include-vfio-pci-hot-reset-s.patch @@ -0,0 +1,80 @@ +From 576a2f71ac459b96deb1caee171fb6ff45915688 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 17:31:05 +0100 +Subject: [PATCH 18/25] linux-headers: Update to include vfio pci hot reset support + +RH-Author: Alex Williamson +Message-id: <20131105173105.19372.39854.stgit@bling.home> +Patchwork-id: 55439 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] linux-headers: Update to include vfio pci hot reset support +Bugzilla: 1025472 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1025472 +Upstream commit: Subset of 4f265607 + +Signed-off-by: Alex Williamson +--- + linux-headers/linux/vfio.h | 38 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 38 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + linux-headers/linux/vfio.h | 38 ++++++++++++++++++++++++++++++++++++++ + 1 files changed, 38 insertions(+), 0 deletions(-) + +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index 9e6df92..d341312 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -323,6 +323,44 @@ enum { + VFIO_PCI_NUM_IRQS + }; + ++/** ++ * VFIO_DEVICE_GET_PCI_HOT_RESET_INFO - _IORW(VFIO_TYPE, VFIO_BASE + 12, ++ * struct vfio_pci_hot_reset_info) ++ * ++ * Return: 0 on success, -errno on failure: ++ * -enospc = insufficient buffer, -enodev = unsupported for device. ++ */ ++struct vfio_pci_dependent_device { ++ __u32 group_id; ++ __u16 segment; ++ __u8 bus; ++ __u8 devfn; /* Use PCI_SLOT/PCI_FUNC */ ++}; ++ ++struct vfio_pci_hot_reset_info { ++ __u32 argsz; ++ __u32 flags; ++ __u32 count; ++ struct vfio_pci_dependent_device devices[]; ++}; ++ ++#define VFIO_DEVICE_GET_PCI_HOT_RESET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12) ++ ++/** ++ * VFIO_DEVICE_PCI_HOT_RESET - _IOW(VFIO_TYPE, VFIO_BASE + 13, ++ * struct vfio_pci_hot_reset) ++ * ++ * Return: 0 on success, -errno on failure. ++ */ ++struct vfio_pci_hot_reset { ++ __u32 argsz; ++ __u32 flags; ++ __u32 count; ++ __s32 group_fds[]; ++}; ++ ++#define VFIO_DEVICE_PCI_HOT_RESET _IO(VFIO_TYPE, VFIO_BASE + 13) ++ + /* -------- API for Type1 VFIO IOMMU -------- */ + + /** +-- +1.7.1 + diff --git a/SOURCES/kvm-linux-headers-Update-to-v3-10-rc5.patch b/SOURCES/kvm-linux-headers-Update-to-v3-10-rc5.patch new file mode 100644 index 0000000..1cacb18 --- /dev/null +++ b/SOURCES/kvm-linux-headers-Update-to-v3-10-rc5.patch @@ -0,0 +1,472 @@ +From 203e2f3b71821558653d08bbd90ee493396ec1a6 Mon Sep 17 00:00:00 2001 +From: Nigel Croxon +Date: Tue, 6 Aug 2013 19:52:03 +0200 +Subject: linux-headers: Update to v3.10-rc5 + +RH-Author: Nigel Croxon +Message-id: <1375818724-41239-2-git-send-email-ncroxon@redhat.com> +Patchwork-id: 53016 +O-Subject: [RHEL7.0 qemu-kvm PATCH v2 1/2] linux-headers: Update to v3.10-rc5 +Bugzilla: 984604 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Alex Williamson +RH-Acked-by: Miroslav Rezanina + +From: Alexey Kardashevskiy + +This adds symbols required for PPC64 pseries platform features: +1. sPAPR live migration; +2. in-kernel XICS interrupt controller. + +Signed-off-by: Alexey Kardashevskiy +Signed-off-by: Michael Tokarev +(cherry picked from commit e098b45386a86fecc1e573d305a240a2f4aa461d) + +diff --git a/linux-headers/asm-arm/kvm.h b/linux-headers/asm-arm/kvm.h +index 023bfeb..c1ee007 100644 +--- a/linux-headers/asm-arm/kvm.h ++++ b/linux-headers/asm-arm/kvm.h +@@ -53,12 +53,12 @@ + #define KVM_ARM_FIQ_spsr fiq_regs[7] + + struct kvm_regs { +- struct pt_regs usr_regs;/* R0_usr - R14_usr, PC, CPSR */ +- __u32 svc_regs[3]; /* SP_svc, LR_svc, SPSR_svc */ +- __u32 abt_regs[3]; /* SP_abt, LR_abt, SPSR_abt */ +- __u32 und_regs[3]; /* SP_und, LR_und, SPSR_und */ +- __u32 irq_regs[3]; /* SP_irq, LR_irq, SPSR_irq */ +- __u32 fiq_regs[8]; /* R8_fiq - R14_fiq, SPSR_fiq */ ++ struct pt_regs usr_regs; /* R0_usr - R14_usr, PC, CPSR */ ++ unsigned long svc_regs[3]; /* SP_svc, LR_svc, SPSR_svc */ ++ unsigned long abt_regs[3]; /* SP_abt, LR_abt, SPSR_abt */ ++ unsigned long und_regs[3]; /* SP_und, LR_und, SPSR_und */ ++ unsigned long irq_regs[3]; /* SP_irq, LR_irq, SPSR_irq */ ++ unsigned long fiq_regs[8]; /* R8_fiq - R14_fiq, SPSR_fiq */ + }; + + /* Supported Processor Types */ +diff --git a/linux-headers/asm-mips/kvm.h b/linux-headers/asm-mips/kvm.h +new file mode 100644 +index 0000000..3f424f5 +--- /dev/null ++++ b/linux-headers/asm-mips/kvm.h +@@ -0,0 +1,138 @@ ++/* ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. ++ * Copyright (C) 2013 Cavium, Inc. ++ * Authors: Sanjay Lal ++ */ ++ ++#ifndef __LINUX_KVM_MIPS_H ++#define __LINUX_KVM_MIPS_H ++ ++#include ++ ++/* ++ * KVM MIPS specific structures and definitions. ++ * ++ * Some parts derived from the x86 version of this file. ++ */ ++ ++/* ++ * for KVM_GET_REGS and KVM_SET_REGS ++ * ++ * If Config[AT] is zero (32-bit CPU), the register contents are ++ * stored in the lower 32-bits of the struct kvm_regs fields and sign ++ * extended to 64-bits. ++ */ ++struct kvm_regs { ++ /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */ ++ __u64 gpr[32]; ++ __u64 hi; ++ __u64 lo; ++ __u64 pc; ++}; ++ ++/* ++ * for KVM_GET_FPU and KVM_SET_FPU ++ * ++ * If Status[FR] is zero (32-bit FPU), the upper 32-bits of the FPRs ++ * are zero filled. ++ */ ++struct kvm_fpu { ++ __u64 fpr[32]; ++ __u32 fir; ++ __u32 fccr; ++ __u32 fexr; ++ __u32 fenr; ++ __u32 fcsr; ++ __u32 pad; ++}; ++ ++ ++/* ++ * For MIPS, we use KVM_SET_ONE_REG and KVM_GET_ONE_REG to access CP0 ++ * registers. The id field is broken down as follows: ++ * ++ * bits[2..0] - Register 'sel' index. ++ * bits[7..3] - Register 'rd' index. ++ * bits[15..8] - Must be zero. ++ * bits[63..16] - 1 -> CP0 registers. ++ * ++ * Other sets registers may be added in the future. Each set would ++ * have its own identifier in bits[63..16]. ++ * ++ * The addr field of struct kvm_one_reg must point to an aligned ++ * 64-bit wide location. For registers that are narrower than ++ * 64-bits, the value is stored in the low order bits of the location, ++ * and sign extended to 64-bits. ++ * ++ * The registers defined in struct kvm_regs are also accessible, the ++ * id values for these are below. ++ */ ++ ++#define KVM_REG_MIPS_R0 0 ++#define KVM_REG_MIPS_R1 1 ++#define KVM_REG_MIPS_R2 2 ++#define KVM_REG_MIPS_R3 3 ++#define KVM_REG_MIPS_R4 4 ++#define KVM_REG_MIPS_R5 5 ++#define KVM_REG_MIPS_R6 6 ++#define KVM_REG_MIPS_R7 7 ++#define KVM_REG_MIPS_R8 8 ++#define KVM_REG_MIPS_R9 9 ++#define KVM_REG_MIPS_R10 10 ++#define KVM_REG_MIPS_R11 11 ++#define KVM_REG_MIPS_R12 12 ++#define KVM_REG_MIPS_R13 13 ++#define KVM_REG_MIPS_R14 14 ++#define KVM_REG_MIPS_R15 15 ++#define KVM_REG_MIPS_R16 16 ++#define KVM_REG_MIPS_R17 17 ++#define KVM_REG_MIPS_R18 18 ++#define KVM_REG_MIPS_R19 19 ++#define KVM_REG_MIPS_R20 20 ++#define KVM_REG_MIPS_R21 21 ++#define KVM_REG_MIPS_R22 22 ++#define KVM_REG_MIPS_R23 23 ++#define KVM_REG_MIPS_R24 24 ++#define KVM_REG_MIPS_R25 25 ++#define KVM_REG_MIPS_R26 26 ++#define KVM_REG_MIPS_R27 27 ++#define KVM_REG_MIPS_R28 28 ++#define KVM_REG_MIPS_R29 29 ++#define KVM_REG_MIPS_R30 30 ++#define KVM_REG_MIPS_R31 31 ++ ++#define KVM_REG_MIPS_HI 32 ++#define KVM_REG_MIPS_LO 33 ++#define KVM_REG_MIPS_PC 34 ++ ++/* ++ * KVM MIPS specific structures and definitions ++ * ++ */ ++struct kvm_debug_exit_arch { ++ __u64 epc; ++}; ++ ++/* for KVM_SET_GUEST_DEBUG */ ++struct kvm_guest_debug_arch { ++}; ++ ++/* definition of registers in kvm_run */ ++struct kvm_sync_regs { ++}; ++ ++/* dummy definition */ ++struct kvm_sregs { ++}; ++ ++struct kvm_mips_interrupt { ++ /* in */ ++ __u32 cpu; ++ __u32 irq; ++}; ++ ++#endif /* __LINUX_KVM_MIPS_H */ +diff --git a/linux-headers/asm-mips/kvm_para.h b/linux-headers/asm-mips/kvm_para.h +new file mode 100644 +index 0000000..14fab8f +--- /dev/null ++++ b/linux-headers/asm-mips/kvm_para.h +@@ -0,0 +1 @@ ++#include +diff --git a/linux-headers/asm-powerpc/kvm.h b/linux-headers/asm-powerpc/kvm.h +index ef072b1..0fb1a6e 100644 +--- a/linux-headers/asm-powerpc/kvm.h ++++ b/linux-headers/asm-powerpc/kvm.h +@@ -25,6 +25,8 @@ + /* Select powerpc specific features in */ + #define __KVM_HAVE_SPAPR_TCE + #define __KVM_HAVE_PPC_SMT ++#define __KVM_HAVE_IRQCHIP ++#define __KVM_HAVE_IRQ_LINE + + struct kvm_regs { + __u64 pc; +@@ -272,8 +274,31 @@ struct kvm_debug_exit_arch { + + /* for KVM_SET_GUEST_DEBUG */ + struct kvm_guest_debug_arch { ++ struct { ++ /* H/W breakpoint/watchpoint address */ ++ __u64 addr; ++ /* ++ * Type denotes h/w breakpoint, read watchpoint, write ++ * watchpoint or watchpoint (both read and write). ++ */ ++#define KVMPPC_DEBUG_NONE 0x0 ++#define KVMPPC_DEBUG_BREAKPOINT (1UL << 1) ++#define KVMPPC_DEBUG_WATCH_WRITE (1UL << 2) ++#define KVMPPC_DEBUG_WATCH_READ (1UL << 3) ++ __u32 type; ++ __u32 reserved; ++ } bp[16]; + }; + ++/* Debug related defines */ ++/* ++ * kvm_guest_debug->control is a 32 bit field. The lower 16 bits are generic ++ * and upper 16 bits are architecture specific. Architecture specific defines ++ * that ioctl is for setting hardware breakpoint or software breakpoint. ++ */ ++#define KVM_GUESTDBG_USE_SW_BP 0x00010000 ++#define KVM_GUESTDBG_USE_HW_BP 0x00020000 ++ + /* definition of registers in kvm_run */ + struct kvm_sync_regs { + }; +@@ -299,6 +324,12 @@ struct kvm_allocate_rma { + __u64 rma_size; + }; + ++/* for KVM_CAP_PPC_RTAS */ ++struct kvm_rtas_token_args { ++ char name[120]; ++ __u64 token; /* Use a token of 0 to undefine a mapping */ ++}; ++ + struct kvm_book3e_206_tlb_entry { + __u32 mas8; + __u32 mas1; +@@ -359,6 +390,26 @@ struct kvm_get_htab_header { + __u16 n_invalid; + }; + ++/* Per-vcpu XICS interrupt controller state */ ++#define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c) ++ ++#define KVM_REG_PPC_ICP_CPPR_SHIFT 56 /* current proc priority */ ++#define KVM_REG_PPC_ICP_CPPR_MASK 0xff ++#define KVM_REG_PPC_ICP_XISR_SHIFT 32 /* interrupt status field */ ++#define KVM_REG_PPC_ICP_XISR_MASK 0xffffff ++#define KVM_REG_PPC_ICP_MFRR_SHIFT 24 /* pending IPI priority */ ++#define KVM_REG_PPC_ICP_MFRR_MASK 0xff ++#define KVM_REG_PPC_ICP_PPRI_SHIFT 16 /* pending irq priority */ ++#define KVM_REG_PPC_ICP_PPRI_MASK 0xff ++ ++/* Device control API: PPC-specific devices */ ++#define KVM_DEV_MPIC_GRP_MISC 1 ++#define KVM_DEV_MPIC_BASE_ADDR 0 /* 64-bit */ ++ ++#define KVM_DEV_MPIC_GRP_REGISTER 2 /* 32-bit */ ++#define KVM_DEV_MPIC_GRP_IRQ_ACTIVE 3 /* 32-bit */ ++ ++/* One-Reg API: PPC-specific registers */ + #define KVM_REG_PPC_HIOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1) + #define KVM_REG_PPC_IAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2) + #define KVM_REG_PPC_IAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3) +@@ -422,4 +473,42 @@ struct kvm_get_htab_header { + #define KVM_REG_PPC_CLEAR_TSR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88) + #define KVM_REG_PPC_TCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89) + #define KVM_REG_PPC_TSR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a) ++ ++/* Debugging: Special instruction for software breakpoint */ ++#define KVM_REG_PPC_DEBUG_INST (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b) ++ ++/* MMU registers */ ++#define KVM_REG_PPC_MAS0 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8c) ++#define KVM_REG_PPC_MAS1 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8d) ++#define KVM_REG_PPC_MAS2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8e) ++#define KVM_REG_PPC_MAS7_3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8f) ++#define KVM_REG_PPC_MAS4 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x90) ++#define KVM_REG_PPC_MAS6 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x91) ++#define KVM_REG_PPC_MMUCFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x92) ++/* ++ * TLBnCFG fields TLBnCFG_N_ENTRY and TLBnCFG_ASSOC can be changed only using ++ * KVM_CAP_SW_TLB ioctl ++ */ ++#define KVM_REG_PPC_TLB0CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x93) ++#define KVM_REG_PPC_TLB1CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x94) ++#define KVM_REG_PPC_TLB2CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x95) ++#define KVM_REG_PPC_TLB3CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x96) ++#define KVM_REG_PPC_TLB0PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x97) ++#define KVM_REG_PPC_TLB1PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x98) ++#define KVM_REG_PPC_TLB2PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x99) ++#define KVM_REG_PPC_TLB3PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9a) ++#define KVM_REG_PPC_EPTCFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9b) ++ ++/* PPC64 eXternal Interrupt Controller Specification */ ++#define KVM_DEV_XICS_GRP_SOURCES 1 /* 64-bit source attributes */ ++ ++/* Layout of 64-bit source attribute values */ ++#define KVM_XICS_DESTINATION_SHIFT 0 ++#define KVM_XICS_DESTINATION_MASK 0xffffffffULL ++#define KVM_XICS_PRIORITY_SHIFT 32 ++#define KVM_XICS_PRIORITY_MASK 0xff ++#define KVM_XICS_LEVEL_SENSITIVE (1ULL << 40) ++#define KVM_XICS_MASKED (1ULL << 41) ++#define KVM_XICS_PENDING (1ULL << 42) ++ + #endif /* __LINUX_KVM_POWERPC_H */ +diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h +index a65ec29..5d9a303 100644 +--- a/linux-headers/asm-x86/kvm.h ++++ b/linux-headers/asm-x86/kvm.h +@@ -29,7 +29,6 @@ + #define __KVM_HAVE_PIT + #define __KVM_HAVE_IOAPIC + #define __KVM_HAVE_IRQ_LINE +-#define __KVM_HAVE_DEVICE_ASSIGNMENT + #define __KVM_HAVE_MSI + #define __KVM_HAVE_USER_NMI + #define __KVM_HAVE_GUEST_DEBUG +diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h +index eb02d8a..c614070 100644 +--- a/linux-headers/linux/kvm.h ++++ b/linux-headers/linux/kvm.h +@@ -561,9 +561,7 @@ struct kvm_ppc_smmu_info { + #define KVM_CAP_MP_STATE 14 + #define KVM_CAP_COALESCED_MMIO 15 + #define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ +-#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT + #define KVM_CAP_DEVICE_ASSIGNMENT 17 +-#endif + #define KVM_CAP_IOMMU 18 + #ifdef __KVM_HAVE_MSI + #define KVM_CAP_DEVICE_MSI 20 +@@ -579,13 +577,9 @@ struct kvm_ppc_smmu_info { + #ifdef __KVM_HAVE_PIT + #define KVM_CAP_REINJECT_CONTROL 24 + #endif +-#ifdef __KVM_HAVE_IOAPIC + #define KVM_CAP_IRQ_ROUTING 25 +-#endif + #define KVM_CAP_IRQ_INJECT_STATUS 26 +-#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT + #define KVM_CAP_DEVICE_DEASSIGNMENT 27 +-#endif + #ifdef __KVM_HAVE_MSIX + #define KVM_CAP_DEVICE_MSIX 28 + #endif +@@ -668,6 +662,10 @@ struct kvm_ppc_smmu_info { + #define KVM_CAP_PPC_EPR 86 + #define KVM_CAP_ARM_PSCI 87 + #define KVM_CAP_ARM_SET_DEVICE_ADDR 88 ++#define KVM_CAP_DEVICE_CTRL 89 ++#define KVM_CAP_IRQ_MPIC 90 ++#define KVM_CAP_PPC_RTAS 91 ++#define KVM_CAP_IRQ_XICS 92 + + #ifdef KVM_CAP_IRQ_ROUTING + +@@ -821,6 +819,28 @@ struct kvm_arm_device_addr { + }; + + /* ++ * Device control API, available with KVM_CAP_DEVICE_CTRL ++ */ ++#define KVM_CREATE_DEVICE_TEST 1 ++ ++struct kvm_create_device { ++ __u32 type; /* in: KVM_DEV_TYPE_xxx */ ++ __u32 fd; /* out: device handle */ ++ __u32 flags; /* in: KVM_CREATE_DEVICE_xxx */ ++}; ++ ++struct kvm_device_attr { ++ __u32 flags; /* no flags currently defined */ ++ __u32 group; /* device-defined */ ++ __u64 attr; /* group-defined */ ++ __u64 addr; /* userspace address of attr data */ ++}; ++ ++#define KVM_DEV_TYPE_FSL_MPIC_20 1 ++#define KVM_DEV_TYPE_FSL_MPIC_42 2 ++#define KVM_DEV_TYPE_XICS 3 ++ ++/* + * ioctls for VM fds + */ + #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) +@@ -907,6 +927,16 @@ struct kvm_s390_ucas_mapping { + #define KVM_PPC_GET_HTAB_FD _IOW(KVMIO, 0xaa, struct kvm_get_htab_fd) + /* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */ + #define KVM_ARM_SET_DEVICE_ADDR _IOW(KVMIO, 0xab, struct kvm_arm_device_addr) ++/* Available with KVM_CAP_PPC_RTAS */ ++#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO, 0xac, struct kvm_rtas_token_args) ++ ++/* ioctl for vm fd */ ++#define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device) ++ ++/* ioctls for fds returned by KVM_CREATE_DEVICE */ ++#define KVM_SET_DEVICE_ATTR _IOW(KVMIO, 0xe1, struct kvm_device_attr) ++#define KVM_GET_DEVICE_ATTR _IOW(KVMIO, 0xe2, struct kvm_device_attr) ++#define KVM_HAS_DEVICE_ATTR _IOW(KVMIO, 0xe3, struct kvm_device_attr) + + /* + * ioctls for vcpu fds +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index e094121..7ec1864 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -319,6 +319,7 @@ enum { + VFIO_PCI_INTX_IRQ_INDEX, + VFIO_PCI_MSI_IRQ_INDEX, + VFIO_PCI_MSIX_IRQ_INDEX, ++ VFIO_PCI_ERR_IRQ_INDEX, + VFIO_PCI_NUM_IRQS + }; + +diff --git a/linux-headers/linux/vhost.h b/linux-headers/linux/vhost.h +index 165a484..c656f61 100644 +--- a/linux-headers/linux/vhost.h ++++ b/linux-headers/linux/vhost.h +@@ -127,4 +127,32 @@ struct vhost_memory { + /* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */ + #define VHOST_NET_F_VIRTIO_NET_HDR 27 + ++/* VHOST_SCSI specific definitions */ ++ ++/* ++ * Used by QEMU userspace to ensure a consistent vhost-scsi ABI. ++ * ++ * ABI Rev 0: July 2012 version starting point for v3.6-rc merge candidate + ++ * RFC-v2 vhost-scsi userspace. Add GET_ABI_VERSION ioctl usage ++ * ABI Rev 1: January 2013. Ignore vhost_tpgt filed in struct vhost_scsi_target. ++ * All the targets under vhost_wwpn can be seen and used by guset. ++ */ ++ ++#define VHOST_SCSI_ABI_VERSION 1 ++ ++struct vhost_scsi_target { ++ int abi_version; ++ char vhost_wwpn[224]; /* TRANSPORT_IQN_LEN */ ++ unsigned short vhost_tpgt; ++ unsigned short reserved; ++}; ++ ++#define VHOST_SCSI_SET_ENDPOINT _IOW(VHOST_VIRTIO, 0x40, struct vhost_scsi_target) ++#define VHOST_SCSI_CLEAR_ENDPOINT _IOW(VHOST_VIRTIO, 0x41, struct vhost_scsi_target) ++/* Changing this breaks userspace. */ ++#define VHOST_SCSI_GET_ABI_VERSION _IOW(VHOST_VIRTIO, 0x42, int) ++/* Set and get the events missed flag */ ++#define VHOST_SCSI_SET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x43, __u32) ++#define VHOST_SCSI_GET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x44, __u32) ++ + #endif diff --git a/SOURCES/kvm-linux-headers-update-to-kernel-3.10.0-26.el7.patch b/SOURCES/kvm-linux-headers-update-to-kernel-3.10.0-26.el7.patch new file mode 100644 index 0000000..0fee906 --- /dev/null +++ b/SOURCES/kvm-linux-headers-update-to-kernel-3.10.0-26.el7.patch @@ -0,0 +1,194 @@ +From 4ab077cab6755cb2bad369b769a5ba077ae3264e Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 24 Sep 2013 13:08:52 +0200 +Subject: [PATCH 03/11] linux-headers: update to kernel-3.10.0-26.el7 + +RH-Author: Andrew Jones +Message-id: <1380028133-15578-2-git-send-email-drjones@redhat.com> +Patchwork-id: 54524 +O-Subject: [RHEL7.0 qemu-kvm PATCH 1/2] linux-headers: update to kernel-3.10.0-26.el7 +Bugzilla: 1008987 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Radim Krcmar +RH-Acked-by: Igor Mammedov + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1008987 + +Signed-off-by: Andrew Jones +--- + linux-headers/asm-mips/kvm.h | 81 +++++++++++++++++++--------------------- + linux-headers/asm-x86/kvm_para.h | 1 + + linux-headers/linux/kvm.h | 1 + + linux-headers/linux/kvm_para.h | 1 + + linux-headers/linux/vfio.h | 8 +++- + 5 files changed, 48 insertions(+), 44 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + linux-headers/asm-mips/kvm.h | 81 ++++++++++++++++++------------------- + linux-headers/asm-x86/kvm_para.h | 1 + + linux-headers/linux/kvm.h | 1 + + linux-headers/linux/kvm_para.h | 1 + + linux-headers/linux/vfio.h | 8 +++- + 5 files changed, 48 insertions(+), 44 deletions(-) + +diff --git a/linux-headers/asm-mips/kvm.h b/linux-headers/asm-mips/kvm.h +index 3f424f5..f09ff5a 100644 +--- a/linux-headers/asm-mips/kvm.h ++++ b/linux-headers/asm-mips/kvm.h +@@ -58,56 +58,53 @@ struct kvm_fpu { + * bits[2..0] - Register 'sel' index. + * bits[7..3] - Register 'rd' index. + * bits[15..8] - Must be zero. +- * bits[63..16] - 1 -> CP0 registers. ++ * bits[31..16] - 1 -> CP0 registers. ++ * bits[51..32] - Must be zero. ++ * bits[63..52] - As per linux/kvm.h + * + * Other sets registers may be added in the future. Each set would +- * have its own identifier in bits[63..16]. +- * +- * The addr field of struct kvm_one_reg must point to an aligned +- * 64-bit wide location. For registers that are narrower than +- * 64-bits, the value is stored in the low order bits of the location, +- * and sign extended to 64-bits. ++ * have its own identifier in bits[31..16]. + * + * The registers defined in struct kvm_regs are also accessible, the + * id values for these are below. + */ + +-#define KVM_REG_MIPS_R0 0 +-#define KVM_REG_MIPS_R1 1 +-#define KVM_REG_MIPS_R2 2 +-#define KVM_REG_MIPS_R3 3 +-#define KVM_REG_MIPS_R4 4 +-#define KVM_REG_MIPS_R5 5 +-#define KVM_REG_MIPS_R6 6 +-#define KVM_REG_MIPS_R7 7 +-#define KVM_REG_MIPS_R8 8 +-#define KVM_REG_MIPS_R9 9 +-#define KVM_REG_MIPS_R10 10 +-#define KVM_REG_MIPS_R11 11 +-#define KVM_REG_MIPS_R12 12 +-#define KVM_REG_MIPS_R13 13 +-#define KVM_REG_MIPS_R14 14 +-#define KVM_REG_MIPS_R15 15 +-#define KVM_REG_MIPS_R16 16 +-#define KVM_REG_MIPS_R17 17 +-#define KVM_REG_MIPS_R18 18 +-#define KVM_REG_MIPS_R19 19 +-#define KVM_REG_MIPS_R20 20 +-#define KVM_REG_MIPS_R21 21 +-#define KVM_REG_MIPS_R22 22 +-#define KVM_REG_MIPS_R23 23 +-#define KVM_REG_MIPS_R24 24 +-#define KVM_REG_MIPS_R25 25 +-#define KVM_REG_MIPS_R26 26 +-#define KVM_REG_MIPS_R27 27 +-#define KVM_REG_MIPS_R28 28 +-#define KVM_REG_MIPS_R29 29 +-#define KVM_REG_MIPS_R30 30 +-#define KVM_REG_MIPS_R31 31 ++#define KVM_REG_MIPS_R0 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 0) ++#define KVM_REG_MIPS_R1 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 1) ++#define KVM_REG_MIPS_R2 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 2) ++#define KVM_REG_MIPS_R3 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 3) ++#define KVM_REG_MIPS_R4 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 4) ++#define KVM_REG_MIPS_R5 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 5) ++#define KVM_REG_MIPS_R6 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 6) ++#define KVM_REG_MIPS_R7 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 7) ++#define KVM_REG_MIPS_R8 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 8) ++#define KVM_REG_MIPS_R9 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 9) ++#define KVM_REG_MIPS_R10 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 10) ++#define KVM_REG_MIPS_R11 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 11) ++#define KVM_REG_MIPS_R12 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 12) ++#define KVM_REG_MIPS_R13 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 13) ++#define KVM_REG_MIPS_R14 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 14) ++#define KVM_REG_MIPS_R15 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 15) ++#define KVM_REG_MIPS_R16 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 16) ++#define KVM_REG_MIPS_R17 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 17) ++#define KVM_REG_MIPS_R18 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 18) ++#define KVM_REG_MIPS_R19 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 19) ++#define KVM_REG_MIPS_R20 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 20) ++#define KVM_REG_MIPS_R21 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 21) ++#define KVM_REG_MIPS_R22 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 22) ++#define KVM_REG_MIPS_R23 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 23) ++#define KVM_REG_MIPS_R24 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 24) ++#define KVM_REG_MIPS_R25 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 25) ++#define KVM_REG_MIPS_R26 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 26) ++#define KVM_REG_MIPS_R27 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 27) ++#define KVM_REG_MIPS_R28 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 28) ++#define KVM_REG_MIPS_R29 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 29) ++#define KVM_REG_MIPS_R30 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 30) ++#define KVM_REG_MIPS_R31 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 31) + +-#define KVM_REG_MIPS_HI 32 +-#define KVM_REG_MIPS_LO 33 +-#define KVM_REG_MIPS_PC 34 ++#define KVM_REG_MIPS_HI (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 32) ++#define KVM_REG_MIPS_LO (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 33) ++#define KVM_REG_MIPS_PC (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 34) + + /* + * KVM MIPS specific structures and definitions +diff --git a/linux-headers/asm-x86/kvm_para.h b/linux-headers/asm-x86/kvm_para.h +index a1c3d72..e41c5c1 100644 +--- a/linux-headers/asm-x86/kvm_para.h ++++ b/linux-headers/asm-x86/kvm_para.h +@@ -23,6 +23,7 @@ + #define KVM_FEATURE_ASYNC_PF 4 + #define KVM_FEATURE_STEAL_TIME 5 + #define KVM_FEATURE_PV_EOI 6 ++#define KVM_FEATURE_PV_UNHALT 7 + + /* The last 8 bits are used to indicate how to interpret the flags field + * in pvclock structure. If no bits are set, all flags are ignored. +diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h +index c614070..01bf15b 100644 +--- a/linux-headers/linux/kvm.h ++++ b/linux-headers/linux/kvm.h +@@ -783,6 +783,7 @@ struct kvm_dirty_tlb { + #define KVM_REG_IA64 0x3000000000000000ULL + #define KVM_REG_ARM 0x4000000000000000ULL + #define KVM_REG_S390 0x5000000000000000ULL ++#define KVM_REG_MIPS 0x7000000000000000ULL + + #define KVM_REG_SIZE_SHIFT 52 + #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL +diff --git a/linux-headers/linux/kvm_para.h b/linux-headers/linux/kvm_para.h +index 7bdcf93..2dff783 100644 +--- a/linux-headers/linux/kvm_para.h ++++ b/linux-headers/linux/kvm_para.h +@@ -19,6 +19,7 @@ + #define KVM_HC_MMU_OP 2 + #define KVM_HC_FEATURES 3 + #define KVM_HC_PPC_MAP_MAGIC_PAGE 4 ++#define KVM_HC_KICK_CPU 5 + + /* + * hypercalls use architecture specific +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index 7ec1864..9e6df92 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -361,10 +361,14 @@ struct vfio_iommu_type1_dma_map { + #define VFIO_IOMMU_MAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 13) + + /** +- * VFIO_IOMMU_UNMAP_DMA - _IOW(VFIO_TYPE, VFIO_BASE + 14, struct vfio_dma_unmap) ++ * VFIO_IOMMU_UNMAP_DMA - _IOWR(VFIO_TYPE, VFIO_BASE + 14, ++ * struct vfio_dma_unmap) + * + * Unmap IO virtual addresses using the provided struct vfio_dma_unmap. +- * Caller sets argsz. ++ * Caller sets argsz. The actual unmapped size is returned in the size ++ * field. No guarantee is made to the user that arbitrary unmaps of iova ++ * or size different from those used in the original mapping call will ++ * succeed. + */ + struct vfio_iommu_type1_dma_unmap { + __u32 argsz; +-- +1.7.1 + diff --git a/SOURCES/kvm-loader-allow-adding-ROMs-in-done-callbacks.patch b/SOURCES/kvm-loader-allow-adding-ROMs-in-done-callbacks.patch new file mode 100644 index 0000000..6a69689 --- /dev/null +++ b/SOURCES/kvm-loader-allow-adding-ROMs-in-done-callbacks.patch @@ -0,0 +1,87 @@ +From 26aeacdc397f54120d52ae10b543bb4050b940c7 Mon Sep 17 00:00:00 2001 +Message-Id: <26aeacdc397f54120d52ae10b543bb4050b940c7.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:39 +0100 +Subject: [PATCH 38/56] loader: allow adding ROMs in done callbacks + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-39-git-send-email-mst@redhat.com> +Patchwork-id: 56344 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 38/57] loader: allow adding ROMs in done callbacks +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Don't abort if machine done callbacks add ROMs. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit d916b46494a2a477636a59900ab1609de192f47a) +--- + include/hw/loader.h | 1 + + hw/core/loader.c | 6 +++++- + vl.c | 3 +++ + 3 files changed, 9 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/core/loader.c | 6 +++++- + include/hw/loader.h | 1 + + vl.c | 3 +++ + 3 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index ab4c7bd..4e72e01 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -777,10 +777,14 @@ int rom_load_all(void) + rom->isrom = section.size && memory_region_is_rom(section.mr); + } + qemu_register_reset(rom_reset, NULL); +- roms_loaded = 1; + return 0; + } + ++void rom_load_done(void) ++{ ++ roms_loaded = 1; ++} ++ + void rom_set_fw(FWCfgState *f) + { + fw_cfg = f; +diff --git a/include/hw/loader.h b/include/hw/loader.h +index 1381a1d..50a017b 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -33,6 +33,7 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, + int rom_add_elf_program(const char *name, void *data, size_t datasize, + size_t romsize, hwaddr addr); + int rom_load_all(void); ++void rom_load_done(void); + void rom_set_fw(FWCfgState *f); + int rom_copy(uint8_t *dest, hwaddr addr, size_t size); + void *rom_ptr(hwaddr addr); +diff --git a/vl.c b/vl.c +index 9b1738b..0cbbdf0 100644 +--- a/vl.c ++++ b/vl.c +@@ -4318,6 +4318,9 @@ int main(int argc, char **argv, char **envp) + qemu_register_reset(qbus_reset_all_fn, sysbus_get_default()); + qemu_run_machine_init_done_notifiers(); + ++ /* Done notifiers can load ROMs */ ++ rom_load_done(); ++ + qemu_system_reset(VMRESET_SILENT); + if (loadvm) { + if (load_vmstate(loadvm) < 0) { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-loader-rename-in_ram-has_mr.patch b/SOURCES/kvm-loader-rename-in_ram-has_mr.patch new file mode 100644 index 0000000..fcf0560 --- /dev/null +++ b/SOURCES/kvm-loader-rename-in_ram-has_mr.patch @@ -0,0 +1,97 @@ +From 478b5f940bb1898c2bdc8dce560f82da3b55e78f Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 12 Mar 2014 07:00:11 +0100 +Subject: [PATCH 09/16] loader: rename in_ram/has_mr + +Message-id: <1394390868-24135-1-git-send-email-mst@redhat.com> +Patchwork-id: 58053 +O-Subject: [PATCH qemu-kvm RHEL7.0 v3 1/2] loader: rename in_ram/has_mr +Bugzilla: 1064018 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Gerd Hoffmann + +we put copy of ROMs in MR for migration. +but the name rom_in_ram makes one think we +load it in guest RAM. +Rename has_mr to make intent clearer. + +Signed-off-by: Michael S. Tsirkin + +Upstream: posted +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7173355 +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1064018#c6 +Tested: by developer +--- + include/hw/loader.h | 2 +- + hw/core/loader.c | 6 +++--- + hw/i386/pc_piix.c | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/core/loader.c | 6 +++--- + hw/i386/pc_piix.c | 2 +- + include/hw/loader.h | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index 4e72e01..c363aef 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -54,7 +54,7 @@ + + #include + +-bool rom_file_in_ram = true; ++bool rom_file_has_mr = true; + + static int roms_loaded; + +@@ -642,7 +642,7 @@ int rom_add_file(const char *file, const char *fw_dir, + basename); + snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); + +- if (rom_file_in_ram) { ++ if (rom_file_has_mr) { + data = rom_set_mr(rom, devpath); + } else { + data = rom->data; +@@ -686,7 +686,7 @@ void *rom_add_blob(const char *name, const void *blob, size_t len, + + snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); + +- if (rom_file_in_ram) { ++ if (rom_file_has_mr) { + data = rom_set_mr(rom, devpath); + } else { + data = rom->data; +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 6773fff..be68098 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -948,7 +948,7 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + + disable_kvm_pv_unhalt(); + +- rom_file_in_ram = false; ++ rom_file_has_mr = false; + has_acpi_build = false; + gigabyte_align = false; + } +diff --git a/include/hw/loader.h b/include/hw/loader.h +index 50a017b..7ceccce 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -23,7 +23,7 @@ void pstrcpy_targphys(const char *name, + hwaddr dest, int buf_size, + const char *source); + +-extern bool rom_file_in_ram; ++extern bool rom_file_has_mr; + + int rom_add_file(const char *file, const char *fw_dir, + hwaddr addr, int32_t bootindex); +-- +1.7.1 + diff --git a/SOURCES/kvm-loader-store-FW-CFG-ROM-files-in-RAM.patch b/SOURCES/kvm-loader-store-FW-CFG-ROM-files-in-RAM.patch new file mode 100644 index 0000000..7f0a548 --- /dev/null +++ b/SOURCES/kvm-loader-store-FW-CFG-ROM-files-in-RAM.patch @@ -0,0 +1,221 @@ +From 4fb30d2478b2d030262bcd1699a683973e481cfd Mon Sep 17 00:00:00 2001 +Message-Id: <4fb30d2478b2d030262bcd1699a683973e481cfd.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:19 +0100 +Subject: [PATCH 12/56] loader: store FW CFG ROM files in RAM + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-13-git-send-email-mst@redhat.com> +Patchwork-id: 56317 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 12/57] loader: store FW CFG ROM files in RAM +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +ROM files that are put in FW CFG are copied to guest ram, by BIOS, but +they are not backed by RAM so they don't get migrated. + +Each time we change two bytes in such a ROM this breaks cross-version +migration: since we can migrate after BIOS has read the first byte but +before it has read the second one, getting an inconsistent state. + +Future-proof this by creating, for each such ROM, +an MR serving as the backing store. +This MR is never mapped into guest memory, but it's registered +as RAM so it's migrated with the guest. + +Naturally, this only helps for -M 1.7 and up, older machine types +will still have the cross-version migration bug. +Luckily the race window for the problem to trigger is very small, +which is also likely why we didn't notice the cross-version +migration bug in testing yet. + +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Laszlo Ersek +(cherry picked from commit 04920fc0faa4760f9c4fc0e73b992b768099be70) + +Conflicts: + hw/i386/pc_piix.c + hw/i386/pc_q35.c +--- + include/hw/loader.h | 1 + + hw/core/loader.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- + hw/i386/pc_piix.c | 2 ++ + hw/i386/pc_q35.c | 1 + + 4 files changed, 50 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/core/loader.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- + hw/i386/pc_piix.c | 2 ++ + hw/i386/pc_q35.c | 1 + + include/hw/loader.h | 1 + + 4 files changed, 50 insertions(+), 3 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index 7d61537..6bdbd15 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -54,6 +54,8 @@ + + #include + ++bool rom_file_in_ram = true; ++ + static int roms_loaded; + + /* return the size or -1 if error */ +@@ -542,6 +544,7 @@ struct Rom { + size_t datasize; + + uint8_t *data; ++ MemoryRegion *mr; + int isrom; + char *fw_dir; + char *fw_file; +@@ -571,6 +574,21 @@ static void rom_insert(Rom *rom) + QTAILQ_INSERT_TAIL(&roms, rom, next); + } + ++static void *rom_set_mr(Rom *rom, const char *name) ++{ ++ void *data; ++ ++ rom->mr = g_malloc(sizeof(*rom->mr)); ++ memory_region_init_ram(rom->mr, name, rom->datasize); ++ memory_region_set_readonly(rom->mr, true); ++ vmstate_register_ram_global(rom->mr); ++ ++ data = memory_region_get_ram_ptr(rom->mr); ++ memcpy(data, rom->data, rom->datasize); ++ ++ return data; ++} ++ + int rom_add_file(const char *file, const char *fw_dir, + hwaddr addr, int32_t bootindex) + { +@@ -612,6 +630,7 @@ int rom_add_file(const char *file, const char *fw_dir, + if (rom->fw_file && fw_cfg) { + const char *basename; + char fw_file_name[56]; ++ void *data; + + basename = strrchr(rom->fw_file, '/'); + if (basename) { +@@ -621,8 +640,15 @@ int rom_add_file(const char *file, const char *fw_dir, + } + snprintf(fw_file_name, sizeof(fw_file_name), "%s/%s", rom->fw_dir, + basename); +- fw_cfg_add_file(fw_cfg, fw_file_name, rom->data, rom->romsize); + snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); ++ ++ if (rom_file_in_ram) { ++ data = rom_set_mr(rom, devpath); ++ } else { ++ data = rom->data; ++ } ++ ++ fw_cfg_add_file(fw_cfg, fw_file_name, data, rom->romsize); + } else { + snprintf(devpath, sizeof(devpath), "/rom@" TARGET_FMT_plx, addr); + } +@@ -697,7 +723,12 @@ static void rom_reset(void *unused) + if (rom->data == NULL) { + continue; + } +- cpu_physical_memory_write_rom(rom->addr, rom->data, rom->datasize); ++ if (rom->mr) { ++ void *host = memory_region_get_ram_ptr(rom->mr); ++ memcpy(host, rom->data, rom->datasize); ++ } else { ++ cpu_physical_memory_write_rom(rom->addr, rom->data, rom->datasize); ++ } + if (rom->isrom) { + /* rom needs to be written only once */ + g_free(rom->data); +@@ -746,6 +777,9 @@ static Rom *find_rom(hwaddr addr) + if (rom->fw_file) { + continue; + } ++ if (rom->mr) { ++ continue; ++ } + if (rom->addr > addr) { + continue; + } +@@ -773,6 +807,9 @@ int rom_copy(uint8_t *dest, hwaddr addr, size_t size) + if (rom->fw_file) { + continue; + } ++ if (rom->mr) { ++ continue; ++ } + if (rom->addr + rom->romsize < addr) { + continue; + } +@@ -831,7 +868,13 @@ void do_info_roms(Monitor *mon, const QDict *qdict) + Rom *rom; + + QTAILQ_FOREACH(rom, &roms, next) { +- if (!rom->fw_file) { ++ if (rom->mr) { ++ monitor_printf(mon, "%s" ++ " size=0x%06zx name=\"%s\"\n", ++ rom->mr->name, ++ rom->romsize, ++ rom->name); ++ } else if (!rom->fw_file) { + monitor_printf(mon, "addr=" TARGET_FMT_plx + " size=0x%06zx mem=%s name=\"%s\"\n", + rom->addr, rom->romsize, +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index b6f9288..07848c1 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -25,6 +25,7 @@ + #include + + #include "hw/hw.h" ++#include "hw/loader.h" + #include "hw/i386/pc.h" + #include "hw/i386/apic.h" + #include "hw/i386/smbios.h" +@@ -883,6 +884,7 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); + ++ rom_file_in_ram = false; + pc_init_rhel700(args); + } + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index f308098..8fa6793 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -28,6 +28,7 @@ + * THE SOFTWARE. + */ + #include "hw/hw.h" ++#include "hw/loader.h" + #include "sysemu/arch_init.h" + #include "hw/i2c/smbus.h" + #include "hw/boards.h" +diff --git a/include/hw/loader.h b/include/hw/loader.h +index 15d4cc9..19e11ea 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -23,6 +23,7 @@ void pstrcpy_targphys(const char *name, + hwaddr dest, int buf_size, + const char *source); + ++extern bool rom_file_in_ram; + + int rom_add_file(const char *file, const char *fw_dir, + hwaddr addr, int32_t bootindex); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-loader-support-for-unmapped-ROM-blobs.patch b/SOURCES/kvm-loader-support-for-unmapped-ROM-blobs.patch new file mode 100644 index 0000000..497fb21 --- /dev/null +++ b/SOURCES/kvm-loader-support-for-unmapped-ROM-blobs.patch @@ -0,0 +1,128 @@ +From 829a4521369f93923f4787cc1e45f1a0d432d71b Mon Sep 17 00:00:00 2001 +Message-Id: <829a4521369f93923f4787cc1e45f1a0d432d71b.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:59 +0100 +Subject: [PATCH 27/56] loader: support for unmapped ROM blobs + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-28-git-send-email-mst@redhat.com> +Patchwork-id: 56333 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 27/57] loader: support for unmapped ROM blobs +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Support ROM blobs not mapped into guest memory: +same as ROM files really but use caller's buffer. + +Support invoking callback on access and +return memory pointer making it easier +for caller to update memory if necessary. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 48354cc5a3744c9a56462e5053e1f267a0ce69de) +--- + hw/lm32/lm32_hwsetup.h | 2 +- + include/hw/loader.h | 7 ++++--- + hw/core/loader.c | 23 ++++++++++++++++++++--- + 3 files changed, 25 insertions(+), 7 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/core/loader.c | 23 ++++++++++++++++++++--- + hw/lm32/lm32_hwsetup.h | 2 +- + include/hw/loader.h | 7 ++++--- + 3 files changed, 25 insertions(+), 7 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index 6bdbd15..2bfff48 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -666,10 +666,12 @@ err: + return -1; + } + +-int rom_add_blob(const char *name, const void *blob, size_t len, +- hwaddr addr) ++void *rom_add_blob(const char *name, const void *blob, size_t len, ++ hwaddr addr, const char *fw_file_name, ++ FWCfgReadCallback fw_callback, void *callback_opaque) + { + Rom *rom; ++ void *data = NULL; + + rom = g_malloc0(sizeof(*rom)); + rom->name = g_strdup(name); +@@ -679,7 +681,22 @@ int rom_add_blob(const char *name, const void *blob, size_t len, + rom->data = g_malloc0(rom->datasize); + memcpy(rom->data, blob, len); + rom_insert(rom); +- return 0; ++ if (fw_file_name && fw_cfg) { ++ char devpath[100]; ++ ++ snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); ++ ++ if (rom_file_in_ram) { ++ data = rom_set_mr(rom, devpath); ++ } else { ++ data = rom->data; ++ } ++ ++ fw_cfg_add_file_callback(fw_cfg, fw_file_name, ++ fw_callback, callback_opaque, ++ data, rom->romsize); ++ } ++ return data; + } + + /* This function is specific for elf program because we don't need to allocate +diff --git a/hw/lm32/lm32_hwsetup.h b/hw/lm32/lm32_hwsetup.h +index 3449bd8..9fd5e69 100644 +--- a/hw/lm32/lm32_hwsetup.h ++++ b/hw/lm32/lm32_hwsetup.h +@@ -73,7 +73,7 @@ static inline void hwsetup_free(HWSetup *hw) + static inline void hwsetup_create_rom(HWSetup *hw, + hwaddr base) + { +- rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE, base); ++ rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE, base, NULL, NULL, NULL); + } + + static inline void hwsetup_add_u8(HWSetup *hw, uint8_t u) +diff --git a/include/hw/loader.h b/include/hw/loader.h +index 19e11ea..1381a1d 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -27,8 +27,9 @@ extern bool rom_file_in_ram; + + int rom_add_file(const char *file, const char *fw_dir, + hwaddr addr, int32_t bootindex); +-int rom_add_blob(const char *name, const void *blob, size_t len, +- hwaddr addr); ++void *rom_add_blob(const char *name, const void *blob, size_t len, ++ hwaddr addr, const char *fw_file_name, ++ FWCfgReadCallback fw_callback, void *callback_opaque); + int rom_add_elf_program(const char *name, void *data, size_t datasize, + size_t romsize, hwaddr addr); + int rom_load_all(void); +@@ -40,7 +41,7 @@ void do_info_roms(Monitor *mon, const QDict *qdict); + #define rom_add_file_fixed(_f, _a, _i) \ + rom_add_file(_f, NULL, _a, _i) + #define rom_add_blob_fixed(_f, _b, _l, _a) \ +- rom_add_blob(_f, _b, _l, _a) ++ (rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL) ? 0 : -1) + + #define PC_ROM_MIN_VGA 0xc0000 + #define PC_ROM_MIN_OPTION 0xc8000 +-- +1.7.11.7 + diff --git a/SOURCES/kvm-loader-use-file-path-size-from-fw_cfg.h.patch b/SOURCES/kvm-loader-use-file-path-size-from-fw_cfg.h.patch new file mode 100644 index 0000000..bbd5973 --- /dev/null +++ b/SOURCES/kvm-loader-use-file-path-size-from-fw_cfg.h.patch @@ -0,0 +1,74 @@ +From 3090a6d3f085dea8f7f6539bf12709cd79d57cb4 Mon Sep 17 00:00:00 2001 +Message-Id: <3090a6d3f085dea8f7f6539bf12709cd79d57cb4.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:28 +0100 +Subject: [PATCH 36/56] loader: use file path size from fw_cfg.h + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-37-git-send-email-mst@redhat.com> +Patchwork-id: 56342 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 36/57] loader: use file path size from fw_cfg.h +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Avoid a bit of code duplication, make +max file path constant reusable. + +Suggested-by: Laszlo Ersek +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 35c12e60c840bc4840cbbe3f6ca514a53b2e36bc) +--- + include/hw/nvram/fw_cfg.h | 4 +++- + hw/core/loader.c | 2 +- + 2 files changed, 4 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/core/loader.c | 2 +- + include/hw/nvram/fw_cfg.h | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index 2bfff48..ab4c7bd 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -629,7 +629,7 @@ int rom_add_file(const char *file, const char *fw_dir, + rom_insert(rom); + if (rom->fw_file && fw_cfg) { + const char *basename; +- char fw_file_name[56]; ++ char fw_file_name[FW_CFG_MAX_FILE_PATH]; + void *data; + + basename = strrchr(rom->fw_file, '/'); +diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h +index 2ab0fc2..72b1549 100644 +--- a/include/hw/nvram/fw_cfg.h ++++ b/include/hw/nvram/fw_cfg.h +@@ -46,12 +46,14 @@ + + #define FW_CFG_INVALID 0xffff + ++#define FW_CFG_MAX_FILE_PATH 56 ++ + #ifndef NO_QEMU_PROTOS + typedef struct FWCfgFile { + uint32_t size; /* file size */ + uint16_t select; /* write this to 0x510 to read it */ + uint16_t reserved; +- char name[56]; ++ char name[FW_CFG_MAX_FILE_PATH]; + } FWCfgFile; + + typedef struct FWCfgFiles { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-lock-Fix-memory-leaks-in-bdrv_co_do_pwritev.patch b/SOURCES/kvm-lock-Fix-memory-leaks-in-bdrv_co_do_pwritev.patch new file mode 100644 index 0000000..b1dab86 --- /dev/null +++ b/SOURCES/kvm-lock-Fix-memory-leaks-in-bdrv_co_do_pwritev.patch @@ -0,0 +1,48 @@ +From 8dddbd7dc9948e743695166bab2b7ca94012badf Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 7 Feb 2014 15:29:00 +0100 +Subject: [PATCH 25/37] lock: Fix memory leaks in bdrv_co_do_pwritev() + +Message-id: <1392117622-28812-26-git-send-email-kwolf@redhat.com> +Patchwork-id: 57190 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 25/37] block: Fix memory leaks in bdrv_co_do_pwritev() +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +The error path for a failure in one of the two bdrv_aligned_preadv() +calls leaked head_buf or tail_buf, respectively. This fixes the memory +leak. + +Reported-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Reviewed-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +--- + block.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) +--- + block.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block.c b/block.c +index 3ec3949..9eeb072 100644 +--- a/block.c ++++ b/block.c +@@ -3180,9 +3180,9 @@ fail: + + if (use_local_qiov) { + qemu_iovec_destroy(&local_qiov); +- qemu_vfree(head_buf); +- qemu_vfree(tail_buf); + } ++ qemu_vfree(head_buf); ++ qemu_vfree(tail_buf); + + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-main-loop-Acquire-main_context-lock-around-os_host_m.patch b/SOURCES/kvm-main-loop-Acquire-main_context-lock-around-os_host_m.patch new file mode 100644 index 0000000..abfab1c --- /dev/null +++ b/SOURCES/kvm-main-loop-Acquire-main_context-lock-around-os_host_m.patch @@ -0,0 +1,128 @@ +From 6baaf82a7742a1de9160146b08ba0cc86b3d4e79 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 10 Jan 2018 17:02:21 +0100 +Subject: [PATCH 2/2] main-loop: Acquire main_context lock around + os_host_main_loop_wait. + +RH-Author: Paolo Bonzini +Message-id: <20180110170221.28975-1-pbonzini@redhat.com> +Patchwork-id: 78541 +O-Subject: [RHEL7.5 qemu-kvm PATCH] main-loop: Acquire main_context lock around os_host_main_loop_wait. +Bugzilla: 1473536 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: John Snow +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1473536 + +Brew build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=14912977 + +When running virt-rescue the serial console hangs from time to time. +Virt-rescue runs an ordinary Linux kernel "appliance", but there is +only a single idle process running inside, so the qemu main loop is +largely idle. With virt-rescue >= 1.37 you may be able to observe the +hang by doing: + + $ virt-rescue -e ^] --scratch + > while true; do ls -l /usr/bin; done + +The hang in virt-rescue can be resolved by pressing a key on the +serial console. + +Possibly with the same root cause, we also observed hangs during very +early boot of regular Linux VMs with a serial console. Those hangs +are extremely rare, but you may be able to observe them by running +this command on baremetal for a sufficiently long time: + + $ while libguestfs-test-tool -t 60 >& /tmp/log ; do echo -n . ; done + +(Check in /tmp/log that the failure was caused by a hang during early +boot, and not some other reason) + +During investigation of this bug, Paolo Bonzini wrote: + +> glib is expecting QEMU to use g_main_context_acquire around accesses to +> GMainContext. However QEMU is not doing that, instead it is taking its +> own mutex. So we should add g_main_context_acquire and +> g_main_context_release in the two implementations of +> os_host_main_loop_wait; these should undo the effect of Frediano's +> glib patch. + +This patch exactly implements Paolo's suggestion in that paragraph. + +This fixes the serial console hang in my testing, across 3 different +physical machines (AMD, Intel Core i7 and Intel Xeon), over many hours +of automated testing. I wasn't able to reproduce the early boot hangs +(but as noted above, these are extremely rare in any case). + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1435432 +Reported-by: Richard W.M. Jones +Tested-by: Richard W.M. Jones +Signed-off-by: Richard W.M. Jones +Message-Id: <20170331205133.23906-1-rjones@redhat.com> +[Paolo: this is actually a glib bug: recent glib versions are also +expecting g_main_context_acquire around g_poll---but that is not +documented and probably not even intended]. +Signed-off-by: Paolo Bonzini +(cherry picked from commit ecbddbb106114f90008024b4e6c3ba1c38d7ca0e) + +Signed-off-by: Miroslav Rezanina +--- + main-loop.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/main-loop.c b/main-loop.c +index cf36645..a93d37b 100644 +--- a/main-loop.c ++++ b/main-loop.c +@@ -192,9 +192,12 @@ static void glib_pollfds_poll(void) + + static int os_host_main_loop_wait(uint32_t timeout) + { ++ GMainContext *context = g_main_context_default(); + int ret; + static int spin_counter; + ++ g_main_context_acquire(context); ++ + glib_pollfds_fill(&timeout); + + /* If the I/O thread is very busy or we are incorrectly busy waiting in +@@ -230,6 +233,9 @@ static int os_host_main_loop_wait(uint32_t timeout) + } + + glib_pollfds_poll(); ++ ++ g_main_context_release(context); ++ + return ret; + } + #else +@@ -385,12 +391,15 @@ static int os_host_main_loop_wait(uint32_t timeout) + fd_set rfds, wfds, xfds; + int nfds; + ++ g_main_context_acquire(context); ++ + /* XXX: need to suppress polling by better using win32 events */ + ret = 0; + for (pe = first_polling_entry; pe != NULL; pe = pe->next) { + ret |= pe->func(pe->opaque); + } + if (ret != 0) { ++ g_main_context_release(context); + return ret; + } + +@@ -440,6 +449,8 @@ static int os_host_main_loop_wait(uint32_t timeout) + g_main_context_dispatch(context); + } + ++ g_main_context_release(context); ++ + return select_ret || g_poll_ret; + } + #endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-main-set-current_machine-before-calling-machine-init.patch b/SOURCES/kvm-main-set-current_machine-before-calling-machine-init.patch new file mode 100644 index 0000000..f06964b --- /dev/null +++ b/SOURCES/kvm-main-set-current_machine-before-calling-machine-init.patch @@ -0,0 +1,67 @@ +From aec2ed0972eec0b7d251de1ae27de00b2bf29936 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 27 Jan 2015 17:48:10 +0100 +Subject: [PATCH 07/16] main(): set current_machine before calling + machine->init() + +Message-id: <1422380891-11054-2-git-send-email-lersek@redhat.com> +Patchwork-id: 63584 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] main(): set current_machine before calling machine->init() +Bugzilla: 1176283 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Markus Armbruster + +Performing the assignment earlier allows machine->init() and its children +to access current_machine->name. + +The alternative would be to pass QEMUMachineInitArgs down to +pc_memory_init() and even deeper, which I deem to cause more annoyance for +future backports than this patch. + +Note that upstream commit 0056ae24bc36798fdd96d0b31e217e9f73896736 moved +the assignment similarly (but it is not backportable to RHEL-7). + +This patch could only regress code that depends on the nullity of +"current_machine". I only found one such site, qemu_system_reset(). +qemu_system_reset() is called from the following places: +- load_vmstate(), which is not called in the code straddled by the + assignment movement, +- main_loop_should_exit(), ditto, +- later in main(), +- "xen-all.c", irrelevant. + +Downstream only. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + vl.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/vl.c b/vl.c +index 2b3dc88..35b927e 100644 +--- a/vl.c ++++ b/vl.c +@@ -4252,6 +4252,9 @@ int main(int argc, char **argv, char **envp) + .kernel_cmdline = kernel_cmdline, + .initrd_filename = initrd_filename, + .cpu_model = cpu_model }; ++ ++ current_machine = machine; ++ + machine->init(&args); + + audio_init(); +@@ -4260,8 +4263,6 @@ int main(int argc, char **argv, char **envp) + + set_numa_modes(); + +- current_machine = machine; +- + /* init USB devices */ + if (usb_enabled(false)) { + if (foreach_device_config(DEV_USB, usb_parse) < 0) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-make-availability-of-Hyper-V-enlightenments-depe.patch b/SOURCES/kvm-make-availability-of-Hyper-V-enlightenments-depe.patch new file mode 100644 index 0000000..33cd780 --- /dev/null +++ b/SOURCES/kvm-make-availability-of-Hyper-V-enlightenments-depe.patch @@ -0,0 +1,101 @@ +From 4e424b837ade87f4d44cbd51e8994e4ac8f36515 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:16 +0100 +Subject: [PATCH 04/12] kvm: make availability of Hyper-V enlightenments dependent on KVM_CAP_HYPERV + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-5-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57960 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 04/12] kvm: make availability of Hyper-V enlightenments dependent on KVM_CAP_HYPERV +Bugzilla: 1004773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Juan Quintela +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +The MS docs specify HV_X64_MSR_HYPERCALL as a mandatory interface, +thus we must provide the MSRs even if the user only specified +features that, like relaxed timing, in principle don't require them. +And the MSRs are only there if the hypervisor has KVM_CAP_HYPERV. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 7bc3d711b45d6feacab96eda410c5655f4ddafcf) +--- + target-i386/kvm.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 16 +++++++++++----- + 1 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 3688371..495021b 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -70,6 +70,8 @@ static bool has_msr_pv_eoi_en; + static bool has_msr_misc_enable; + static bool has_msr_kvm_steal_time; + static int lm_capable_kernel; ++static bool has_msr_hv_hypercall; ++static bool has_msr_hv_vapic; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -433,8 +435,10 @@ static bool hyperv_hypercall_available(X86CPU *cpu) + + static bool hyperv_enabled(X86CPU *cpu) + { +- return hyperv_hypercall_available(cpu) || +- cpu->hyperv_relaxed_timing; ++ CPUState *cs = CPU(cpu); ++ return kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0 && ++ (hyperv_hypercall_available(cpu) || ++ cpu->hyperv_relaxed_timing); + } + + #define KVM_MAX_CPUID_ENTRIES 100 +@@ -489,6 +493,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + if (cpu->hyperv_vapic) { + c->eax |= HV_X64_MSR_HYPERCALL_AVAILABLE; + c->eax |= HV_X64_MSR_APIC_ACCESS_AVAILABLE; ++ has_msr_hv_vapic = true; + } + + c = &cpuid_data.entries[cpuid_i++]; +@@ -496,7 +501,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + if (cpu->hyperv_relaxed_timing) { + c->eax |= HV_X64_RELAXED_TIMING_RECOMMENDED; + } +- if (cpu->hyperv_vapic) { ++ if (has_msr_hv_vapic) { + c->eax |= HV_X64_APIC_ACCESS_RECOMMENDED; + } + c->ebx = cpu->hyperv_spinlock_attempts; +@@ -507,6 +512,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->ebx = 0x40; + + kvm_base = KVM_CPUID_SIGNATURE_NEXT; ++ has_msr_hv_hypercall = true; + } + + memcpy(signature, "KVMKVMKVM\0\0\0", 12); +@@ -1191,11 +1197,11 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_GLOBAL_CTRL, + env->msr_global_ctrl); + } +- if (hyperv_hypercall_available(cpu)) { ++ if (has_msr_hv_hypercall) { + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_GUEST_OS_ID, 0); + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_HYPERCALL, 0); + } +- if (cpu->hyperv_vapic) { ++ if (has_msr_hv_vapic) { + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_APIC_ASSIST_PAGE, 0); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-make-hyperv-hypercall-and-guest-os-id-MSRs-migra.patch b/SOURCES/kvm-make-hyperv-hypercall-and-guest-os-id-MSRs-migra.patch new file mode 100644 index 0000000..6111615 --- /dev/null +++ b/SOURCES/kvm-make-hyperv-hypercall-and-guest-os-id-MSRs-migra.patch @@ -0,0 +1,135 @@ +From ab03fc7dbf876e611f43be34faa6945728977056 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:17 +0100 +Subject: [PATCH 05/12] kvm: make hyperv hypercall and guest os id MSRs migratable. + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-6-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57961 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 05/12] kvm: make hyperv hypercall and guest os id MSRs migratable. +Bugzilla: 1004773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +Note: The field order in vmstate_msr_hypercall_hypercall follows the same + pattern as in RHEL6, but not upstream. + +Signed-off-by: Vadim Rozenfeld +Signed-off-by: Paolo Bonzini +(cherry picked from commit 1c90ef2619dd6e5c4fec7e9e18c04c0a08e93aac) + +Conflicts: + target-i386/machine.c +--- + target-i386/cpu.h | 2 ++ + target-i386/kvm.c | 16 ++++++++++++++-- + target-i386/machine.c | 23 +++++++++++++++++++++++ + 3 files changed, 39 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 2 ++ + target-i386/kvm.c | 16 ++++++++++++++-- + target-i386/machine.c | 23 +++++++++++++++++++++++ + 3 files changed, 39 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 4c4c9ff..4835a64 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -844,6 +844,8 @@ typedef struct CPUX86State { + uint64_t msr_fixed_counters[MAX_FIXED_COUNTERS]; + uint64_t msr_gp_counters[MAX_GP_COUNTERS]; + uint64_t msr_gp_evtsel[MAX_GP_COUNTERS]; ++ uint64_t msr_hv_hypercall; ++ uint64_t msr_hv_guest_os_id; + + /* exception/interrupt handling */ + int error_code; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 495021b..943abe1 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1198,8 +1198,10 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + env->msr_global_ctrl); + } + if (has_msr_hv_hypercall) { +- kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_GUEST_OS_ID, 0); +- kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_HYPERCALL, 0); ++ kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_GUEST_OS_ID, ++ env->msr_hv_guest_os_id); ++ kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_HYPERCALL, ++ env->msr_hv_hypercall); + } + if (has_msr_hv_vapic) { + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_APIC_ASSIST_PAGE, 0); +@@ -1475,6 +1477,10 @@ static int kvm_get_msrs(X86CPU *cpu) + } + } + ++ if (has_msr_hv_hypercall) { ++ msrs[n++].index = HV_X64_MSR_HYPERCALL; ++ msrs[n++].index = HV_X64_MSR_GUEST_OS_ID; ++ } + msr_data.info.nmsrs = n; + ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, &msr_data); + if (ret < 0) { +@@ -1576,6 +1582,12 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_P6_EVNTSEL0 ... MSR_P6_EVNTSEL0 + MAX_GP_COUNTERS - 1: + env->msr_gp_evtsel[index - MSR_P6_EVNTSEL0] = msrs[i].data; + break; ++ case HV_X64_MSR_HYPERCALL: ++ env->msr_hv_hypercall = msrs[i].data; ++ break; ++ case HV_X64_MSR_GUEST_OS_ID: ++ env->msr_hv_guest_os_id = msrs[i].data; ++ break; + } + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 08b4ed3..817f8e4 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -506,6 +506,26 @@ static const VMStateDescription vmstate_msr_architectural_pmu = { + } + }; + ++static bool hyperv_hypercall_enable_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->msr_hv_hypercall != 0 || env->msr_hv_guest_os_id != 0; ++} ++ ++static const VMStateDescription vmstate_msr_hypercall_hypercall = { ++ .name = "cpu/msr_hyperv_hypercall", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField []) { ++ VMSTATE_UINT64(env.msr_hv_guest_os_id, X86CPU), ++ VMSTATE_UINT64(env.msr_hv_hypercall, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -638,6 +658,9 @@ const VMStateDescription vmstate_x86_cpu = { + .vmsd = &vmstate_msr_architectural_pmu, + .needed = pmu_enable_needed, + }, { ++ .vmsd = &vmstate_msr_hypercall_hypercall, ++ .needed = hyperv_hypercall_enable_needed, ++ } , { + /* empty */ + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-make-hyperv-vapic-assist-page-migratable.patch b/SOURCES/kvm-make-hyperv-vapic-assist-page-migratable.patch new file mode 100644 index 0000000..33109c0 --- /dev/null +++ b/SOURCES/kvm-make-hyperv-vapic-assist-page-migratable.patch @@ -0,0 +1,121 @@ +From b8aa71df9dc7135c4894732449745f1e8a130798 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:18 +0100 +Subject: [PATCH 06/12] kvm: make hyperv vapic assist page migratable + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-7-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57962 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 06/12] kvm: make hyperv vapic assist page migratable +Bugzilla: 1004773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +Signed-off-by: Vadim Rozenfeld +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5ef68987e5671edf5f51f845d1bbf3e5759a8526) +--- + target-i386/cpu.h | 1 + + target-i386/kvm.c | 10 +++++++++- + target-i386/machine.c | 22 ++++++++++++++++++++++ + 3 files changed, 32 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 1 + + target-i386/kvm.c | 10 +++++++++- + target-i386/machine.c | 22 ++++++++++++++++++++++ + 3 files changed, 32 insertions(+), 1 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 4835a64..0773499 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -846,6 +846,7 @@ typedef struct CPUX86State { + uint64_t msr_gp_evtsel[MAX_GP_COUNTERS]; + uint64_t msr_hv_hypercall; + uint64_t msr_hv_guest_os_id; ++ uint64_t msr_hv_vapic; + + /* exception/interrupt handling */ + int error_code; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 943abe1..a2946c4 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1204,7 +1204,8 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + env->msr_hv_hypercall); + } + if (has_msr_hv_vapic) { +- kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_APIC_ASSIST_PAGE, 0); ++ kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_APIC_ASSIST_PAGE, ++ env->msr_hv_vapic); + } + } + if (env->mcg_cap) { +@@ -1481,6 +1482,10 @@ static int kvm_get_msrs(X86CPU *cpu) + msrs[n++].index = HV_X64_MSR_HYPERCALL; + msrs[n++].index = HV_X64_MSR_GUEST_OS_ID; + } ++ if (has_msr_hv_vapic) { ++ msrs[n++].index = HV_X64_MSR_APIC_ASSIST_PAGE; ++ } ++ + msr_data.info.nmsrs = n; + ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, &msr_data); + if (ret < 0) { +@@ -1588,6 +1593,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case HV_X64_MSR_GUEST_OS_ID: + env->msr_hv_guest_os_id = msrs[i].data; + break; ++ case HV_X64_MSR_APIC_ASSIST_PAGE: ++ env->msr_hv_vapic = msrs[i].data; ++ break; + } + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 817f8e4..021390b 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -526,6 +526,25 @@ static const VMStateDescription vmstate_msr_hypercall_hypercall = { + } + }; + ++static bool hyperv_vapic_enable_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->msr_hv_vapic != 0; ++} ++ ++static const VMStateDescription vmstate_msr_hyperv_vapic = { ++ .name = "cpu/msr_hyperv_vapic", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField []) { ++ VMSTATE_UINT64(env.msr_hv_vapic, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -660,6 +679,9 @@ const VMStateDescription vmstate_x86_cpu = { + }, { + .vmsd = &vmstate_msr_hypercall_hypercall, + .needed = hyperv_hypercall_enable_needed, ++ }, { ++ .vmsd = &vmstate_msr_hyperv_vapic, ++ .needed = hyperv_vapic_enable_needed, + } , { + /* empty */ + } +-- +1.7.1 + diff --git a/SOURCES/kvm-mc146818rtc-add-rtc-reset-reinjection-QMP-command.patch b/SOURCES/kvm-mc146818rtc-add-rtc-reset-reinjection-QMP-command.patch new file mode 100644 index 0000000..4c349c5 --- /dev/null +++ b/SOURCES/kvm-mc146818rtc-add-rtc-reset-reinjection-QMP-command.patch @@ -0,0 +1,156 @@ +From 6fa144cedf0719b284355c9cd13ea6ec9a7c26d4 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Fri, 28 Aug 2015 01:07:55 +0200 +Subject: [PATCH] mc146818rtc: add rtc-reset-reinjection QMP command + +Message-id: <20150828010755.GA11313@amt.cnet> +Patchwork-id: 67629 +O-Subject: [RHEL-7.2 qemu-kvm PATCH] mc146818rtc: add rtc-reset-reinjection QMP command +Bugzilla: 1191226 +RH-Acked-by: Juan Quintela +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek + +Without this command libvirt refuses to allow guest agent +time synchronization to function. + +Upstream commit f2ae8abf1fa003e7ec6ee22cc3871924422a01d0 + +It is necessary to reset RTC interrupt reinjection backlog if +guest time is synchronized via a different mechanism, such as +QGA's guest-set-time command. + +Failing to do so causes both corrections to be applied (summed), +resulting in an incorrect guest time. + +Signed-off-by: Marcelo Tosatti +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Miroslav Rezanina +--- + hw/timer/mc146818rtc.c | 18 ++++++++++++++++++ + monitor.c | 7 +++++++ + qapi-schema.json | 13 +++++++++++++ + qmp-commands.hx | 23 +++++++++++++++++++++++ + 4 files changed, 61 insertions(+) + +diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c +index 432b16c..083f573 100644 +--- a/hw/timer/mc146818rtc.c ++++ b/hw/timer/mc146818rtc.c +@@ -26,6 +26,7 @@ + #include "sysemu/sysemu.h" + #include "hw/timer/mc146818rtc.h" + #include "qapi/visitor.h" ++#include "qmp-commands.h" + + #ifdef TARGET_I386 + #include "hw/i386/apic.h" +@@ -85,6 +86,7 @@ typedef struct RTCState { + Notifier clock_reset_notifier; + LostTickPolicy lost_tick_policy; + Notifier suspend_notifier; ++ QLIST_ENTRY(RTCState) link; + } RTCState; + + static void rtc_set_time(RTCState *s); +@@ -529,6 +531,20 @@ static void rtc_get_time(RTCState *s, struct tm *tm) + rtc_from_bcd(s, s->cmos_data[RTC_CENTURY]) * 100 - 1900; + } + ++static QLIST_HEAD(, RTCState) rtc_devices = ++ QLIST_HEAD_INITIALIZER(rtc_devices); ++ ++#ifdef TARGET_I386 ++void qmp_rtc_reset_reinjection(Error **errp) ++{ ++ RTCState *s; ++ ++ QLIST_FOREACH(s, &rtc_devices, link) { ++ s->irq_coalesced = 0; ++ } ++} ++#endif ++ + static void rtc_set_time(RTCState *s) + { + struct tm tm; +@@ -889,6 +905,8 @@ ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq) + } else { + isa_init_irq(isadev, &s->irq, RTC_ISA_IRQ); + } ++ QLIST_INSERT_HEAD(&rtc_devices, s, link); ++ + return isadev; + } + +diff --git a/monitor.c b/monitor.c +index 798885d..6a1d06e 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -4878,3 +4878,10 @@ QemuOptsList qemu_mon_opts = { + { /* end of list */ } + }, + }; ++ ++#ifndef TARGET_I386 ++void qmp_rtc_reset_reinjection(Error **errp) ++{ ++ error_set(errp, QERR_FEATURE_DISABLED, "rtc-reset-reinjection"); ++} ++#endif +diff --git a/qapi-schema.json b/qapi-schema.json +index 8a7cf0b..c8732c1 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -4213,3 +4213,16 @@ + ## + { 'command': 'query-rx-filter', 'data': { '*name': 'str' }, + 'returns': ['RxFilterInfo'] } ++ ++## ++# @rtc-reset-reinjection ++# ++# This command will reset the RTC interrupt reinjection backlog. ++# Can be used if another mechanism to synchronize guest time ++# is in effect, for example QEMU guest agent's guest-set-time ++# command. ++# ++# Since: 2.1 ++## ++{ 'command': 'rtc-reset-reinjection' } ++ +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 44dd48e..22a09be 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -3341,3 +3341,26 @@ Example: + } + + EQMP ++ ++#if defined TARGET_I386 ++ { ++ .name = "rtc-reset-reinjection", ++ .args_type = "", ++ .mhandler.cmd_new = qmp_marshal_input_rtc_reset_reinjection, ++ }, ++#endif ++ ++SQMP ++rtc-reset-reinjection ++--------------------- ++ ++Reset the RTC interrupt reinjection backlog. ++ ++Arguments: None. ++ ++Example: ++ ++-> { "execute": "rtc-reset-reinjection" } ++<- { "return": {} } ++ ++EQMP +-- +1.8.3.1 + diff --git a/SOURCES/kvm-memory-Allow-access-only-upto-the-maximum-alignment-.patch b/SOURCES/kvm-memory-Allow-access-only-upto-the-maximum-alignment-.patch new file mode 100644 index 0000000..0f4df3e --- /dev/null +++ b/SOURCES/kvm-memory-Allow-access-only-upto-the-maximum-alignment-.patch @@ -0,0 +1,169 @@ +From 2ee2492513f9685cb716dc1cb4cf5b580da43e07 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Wed, 25 Jan 2017 03:36:07 +0100 +Subject: [PATCH 01/11] memory: Allow access only upto the maximum alignment + for memory_region_* functions + +RH-Author: Bandan Das +Message-id: +Patchwork-id: 73367 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] memory: Allow access only upto the maximum alignment for memory_region_* functions +Bugzilla: 1342768 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laurent Vivier +RH-Acked-by: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1342768 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=12437870 +Upstream: N/A, upstream doesn't exhibit this behavior + +Currently, there is no check in memory_region_iorange_* functions for whether +the size requested is greater than the maximum alignment. This causes +an abort with a specific version of the Linux kernel (4.7.0-RC1): +/usr/libexec/qemu-kvm -kernel ~/vmlinuz-4.7.0-rc1 --enable-kvm -m 1G -vnc :2 -monitor stdio + +0 0x00007fb057cb65f7 in raise () from /lib64/libc.so.6 +1 0x00007fb057cb7ce8 in abort () from /lib64/libc.so.6 +2 0x00007fb05eca5537 in acpi_gpe_ioport_readb () +3 0x00007fb05eca5ff0 in gpe_readb () +4 0x00007fb05ede6f4c in memory_region_read_accessor () +5 0x00007fb05ede6993 in access_with_adjusted_size () +6 0x00007fb05ede7ce8 in memory_region_iorange_read () +7 0x00007fb05ede2ac7 in ioport_readl_thunk () +8 0x00007fb05ede3141 in cpu_inl () +9 0x00007fb05ede5c49 in kvm_cpu_exec () +10 0x00007fb05ed98485 in qemu_kvm_cpu_thread_fn () +11 0x00007fb05bcc9dc5 in start_thread () from /lib64/libpthread.so.0 +12 0x00007fb057d77ced in clone () from /lib64/libc.so.6 + +This happens because guest code tries to read(l=4) from 0xafe2 +with GPE base being 0xafe0 which causes the abort in +acpi_gpe_ioport_get_ptr() to trigger. This change adds a +memory_access_size() which is similar to the one in upstream that +forces size to be equal to the maximum alignment if it's greater. +It also keeps the other checks present in upstream for safety and +is called from the memory_region_read/write functions before +calling the call specific access functions. + +Signed-off-by: Bandan Das +Signed-off-by: Miroslav Rezanina +--- + memory.c | 44 ++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 40 insertions(+), 4 deletions(-) + +diff --git a/memory.c b/memory.c +index 7bd6e87..573ecdd 100644 +--- a/memory.c ++++ b/memory.c +@@ -381,6 +381,33 @@ static const MemoryRegionPortio *find_portio(MemoryRegion *mr, uint64_t offset, + return NULL; + } + ++static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr) ++{ ++ unsigned access_size_max = mr->ops->valid.max_access_size; ++ ++ /* Regions are assumed to support 1-4 byte accesses unless ++ otherwise specified. */ ++ if (access_size_max == 0) { ++ access_size_max = 4; ++ } ++ ++ /* Bound the maximum access by the alignment of the address. */ ++ if (!mr->ops->impl.unaligned) { ++ unsigned align_size_max = addr & -addr; ++ if (align_size_max != 0 && align_size_max < access_size_max) { ++ access_size_max = align_size_max; ++ } ++ } ++ ++ /* Don't attempt accesses larger than the maximum. */ ++ if (l > access_size_max) { ++ l = access_size_max; ++ } ++ l = pow2floor(l); ++ ++ return l; ++} ++ + static void memory_region_iorange_read(IORange *iorange, + uint64_t offset, + unsigned width, +@@ -389,6 +416,7 @@ static void memory_region_iorange_read(IORange *iorange, + MemoryRegionIORange *mrio + = container_of(iorange, MemoryRegionIORange, iorange); + MemoryRegion *mr = mrio->mr; ++ unsigned l; + + offset += mrio->offset; + if (mr->ops->old_portio) { +@@ -407,7 +435,8 @@ static void memory_region_iorange_read(IORange *iorange, + return; + } + *data = 0; +- access_with_adjusted_size(offset, data, width, ++ l = memory_access_size(mr, width, offset); ++ access_with_adjusted_size(offset, data, l, + mr->ops->impl.min_access_size, + mr->ops->impl.max_access_size, + memory_region_read_accessor, mr); +@@ -421,6 +450,7 @@ static void memory_region_iorange_write(IORange *iorange, + MemoryRegionIORange *mrio + = container_of(iorange, MemoryRegionIORange, iorange); + MemoryRegion *mr = mrio->mr; ++ unsigned l; + + offset += mrio->offset; + if (mr->ops->old_portio) { +@@ -437,7 +467,8 @@ static void memory_region_iorange_write(IORange *iorange, + } + return; + } +- access_with_adjusted_size(offset, &data, width, ++ l = memory_access_size(mr, width, offset); ++ access_with_adjusted_size(offset, &data, l, + mr->ops->impl.min_access_size, + mr->ops->impl.max_access_size, + memory_region_write_accessor, mr); +@@ -850,6 +881,7 @@ static uint64_t memory_region_dispatch_read1(MemoryRegion *mr, + unsigned size) + { + uint64_t data = 0; ++ unsigned l; + + if (!memory_region_access_valid(mr, addr, size, false)) { + return -1U; /* FIXME: better signalling */ +@@ -859,8 +891,9 @@ static uint64_t memory_region_dispatch_read1(MemoryRegion *mr, + return mr->ops->old_mmio.read[ctz32(size)](mr->opaque, addr); + } + ++ l = memory_access_size(mr, size, addr); + /* FIXME: support unaligned access */ +- access_with_adjusted_size(addr, &data, size, ++ access_with_adjusted_size(addr, &data, l, + mr->ops->impl.min_access_size, + mr->ops->impl.max_access_size, + memory_region_read_accessor, mr); +@@ -902,6 +935,8 @@ static void memory_region_dispatch_write(MemoryRegion *mr, + uint64_t data, + unsigned size) + { ++ unsigned l; ++ + if (!memory_region_access_valid(mr, addr, size, true)) { + return; /* FIXME: better signalling */ + } +@@ -913,8 +948,9 @@ static void memory_region_dispatch_write(MemoryRegion *mr, + return; + } + ++ l = memory_access_size(mr, size, addr); + /* FIXME: support unaligned access */ +- access_with_adjusted_size(addr, &data, size, ++ access_with_adjusted_size(addr, &data, l, + mr->ops->impl.min_access_size, + mr->ops->impl.max_access_size, + memory_region_write_accessor, mr); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-memory-Don-t-call-memory_region_update_coalesced_ran.patch b/SOURCES/kvm-memory-Don-t-call-memory_region_update_coalesced_ran.patch new file mode 100644 index 0000000..2545192 --- /dev/null +++ b/SOURCES/kvm-memory-Don-t-call-memory_region_update_coalesced_ran.patch @@ -0,0 +1,64 @@ +From 67f736a89722dcaa425c70510c080e95216a165f Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 19 Jun 2014 10:21:56 +0200 +Subject: [PATCH 11/13] memory: Don't call memory_region_update_coalesced_range if nothing changed + +RH-Author: Fam Zheng +Message-id: <1403173316-12035-1-git-send-email-famz@redhat.com> +Patchwork-id: 59289 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH] memory: Don't call memory_region_update_coalesced_range if nothing changed +Bugzilla: 1096645 +RH-Acked-by: Amos Kong +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7596269 +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1096645 + +With huge number of PCI devices in the system (for example, 200 +virtio-blk-pci), this unconditional call can slow down emulation of +irrelevant PCI operations drastically, such as a BAR update on a device +that has no coalescing region. So avoid it. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit ab5b3db5d711b290d63e954dc64647dd51cef962) +Signed-off-by: Fam Zheng +--- + memory.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + memory.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/memory.c b/memory.c +index edaf6fd..a71d096 100644 +--- a/memory.c ++++ b/memory.c +@@ -1210,6 +1210,7 @@ void memory_region_add_coalescing(MemoryRegion *mr, + void memory_region_clear_coalescing(MemoryRegion *mr) + { + CoalescedMemoryRange *cmr; ++ bool updated = false; + + qemu_flush_coalesced_mmio_buffer(); + mr->flush_coalesced_mmio = false; +@@ -1218,8 +1219,12 @@ void memory_region_clear_coalescing(MemoryRegion *mr) + cmr = QTAILQ_FIRST(&mr->coalesced); + QTAILQ_REMOVE(&mr->coalesced, cmr, link); + g_free(cmr); ++ updated = true; ++ } ++ ++ if (updated) { ++ memory_region_update_coalesced_range(mr); + } +- memory_region_update_coalesced_range(mr); + } + + void memory_region_set_flush_coalesced(MemoryRegion *mr) +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-Rename-readable-flag-to-romd_mode.patch b/SOURCES/kvm-memory-Rename-readable-flag-to-romd_mode.patch new file mode 100644 index 0000000..571daf8 --- /dev/null +++ b/SOURCES/kvm-memory-Rename-readable-flag-to-romd_mode.patch @@ -0,0 +1,252 @@ +From bf17f7d5651bdf24cc15268ff20ecbccf74ea138 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:54 +0100 +Subject: [PATCH 04/22] memory: Rename readable flag to romd_mode + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-5-git-send-email-lersek@redhat.com> +Patchwork-id: 56617 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 04/18] memory: Rename readable flag to romd_mode +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones +RH-Acked-by: Kevin Wolf + +From: Jan Kiszka + +"Readable" is a very unfortunate name for this flag because even a +rom_device region will always be readable from the guest POV. What +differs is the mapping, just like the comments had to explain already. +Also, readable could currently be understood as being a generic region +flag, but it only applies to rom_device regions. + +So rename the flag and the function to modify it after the original term +"ROMD" which could also be interpreted as "ROM direct", i.e. ROM mode +with direct access. In any case, the scope of the flag is clearer now. + +Signed-off-by: Jan Kiszka +Reviewed-by: Peter Maydell +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5f9a5ea1c0a8391033e7d33abd335dd804a1001a) +Signed-off-by: Laszlo Ersek +--- + include/exec/memory.h | 22 +++++++++++----------- + hw/block/pflash_cfi01.c | 6 +++--- + hw/block/pflash_cfi02.c | 2 +- + memory.c | 30 +++++++++++++++--------------- + 4 files changed, 30 insertions(+), 30 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pflash_cfi01.c | 6 +++--- + hw/block/pflash_cfi02.c | 2 +- + include/exec/memory.h | 22 +++++++++++----------- + memory.c | 30 +++++++++++++++--------------- + 4 files changed, 30 insertions(+), 30 deletions(-) + +diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c +index 0bbb1a3..18eb0bc 100644 +--- a/hw/block/pflash_cfi01.c ++++ b/hw/block/pflash_cfi01.c +@@ -105,7 +105,7 @@ static void pflash_timer (void *opaque) + DPRINTF("%s: command %02x done\n", __func__, pfl->cmd); + /* Reset flash */ + pfl->status ^= 0x80; +- memory_region_rom_device_set_readable(&pfl->mem, true); ++ memory_region_rom_device_set_romd(&pfl->mem, true); + pfl->wcycle = 0; + pfl->cmd = 0; + } +@@ -281,7 +281,7 @@ static void pflash_write(pflash_t *pfl, hwaddr offset, + + if (!pfl->wcycle) { + /* Set the device in I/O access mode */ +- memory_region_rom_device_set_readable(&pfl->mem, false); ++ memory_region_rom_device_set_romd(&pfl->mem, false); + } + + switch (pfl->wcycle) { +@@ -458,7 +458,7 @@ static void pflash_write(pflash_t *pfl, hwaddr offset, + "\n", __func__, offset, pfl->wcycle, pfl->cmd, value); + + reset_flash: +- memory_region_rom_device_set_readable(&pfl->mem, true); ++ memory_region_rom_device_set_romd(&pfl->mem, true); + + pfl->wcycle = 0; + pfl->cmd = 0; +diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c +index 9a7fa70..5f25246 100644 +--- a/hw/block/pflash_cfi02.c ++++ b/hw/block/pflash_cfi02.c +@@ -111,7 +111,7 @@ static void pflash_setup_mappings(pflash_t *pfl) + + static void pflash_register_memory(pflash_t *pfl, int rom_mode) + { +- memory_region_rom_device_set_readable(&pfl->orig_mem, rom_mode); ++ memory_region_rom_device_set_romd(&pfl->orig_mem, rom_mode); + pfl->rom_mode = rom_mode; + } + +diff --git a/include/exec/memory.h b/include/exec/memory.h +index bd6d31a..3bbe378 100644 +--- a/include/exec/memory.h ++++ b/include/exec/memory.h +@@ -124,7 +124,7 @@ struct MemoryRegion { + ram_addr_t ram_addr; + bool subpage; + bool terminates; +- bool readable; ++ bool romd_mode; + bool ram; + bool readonly; /* For RAM regions */ + bool enabled; +@@ -353,16 +353,16 @@ uint64_t memory_region_size(MemoryRegion *mr); + bool memory_region_is_ram(MemoryRegion *mr); + + /** +- * memory_region_is_romd: check whether a memory region is ROMD ++ * memory_region_is_romd: check whether a memory region is in ROMD mode + * +- * Returns %true is a memory region is ROMD and currently set to allow ++ * Returns %true if a memory region is a ROM device and currently set to allow + * direct reads. + * + * @mr: the memory region being queried + */ + static inline bool memory_region_is_romd(MemoryRegion *mr) + { +- return mr->rom_device && mr->readable; ++ return mr->rom_device && mr->romd_mode; + } + + /** +@@ -500,18 +500,18 @@ void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr, + void memory_region_set_readonly(MemoryRegion *mr, bool readonly); + + /** +- * memory_region_rom_device_set_readable: enable/disable ROM readability ++ * memory_region_rom_device_set_romd: enable/disable ROMD mode + * + * Allows a ROM device (initialized with memory_region_init_rom_device() to +- * to be marked as readable (default) or not readable. When it is readable, +- * the device is mapped to guest memory. When not readable, reads are +- * forwarded to the #MemoryRegion.read function. ++ * set to ROMD mode (default) or MMIO mode. When it is in ROMD mode, the ++ * device is mapped to guest memory and satisfies read access directly. ++ * When in MMIO mode, reads are forwarded to the #MemoryRegion.read function. ++ * Writes are always handled by the #MemoryRegion.write function. + * + * @mr: the memory region to be updated +- * @readable: whether reads are satisified directly (%true) or via callbacks +- * (%false) ++ * @romd_mode: %true to put the region into ROMD mode + */ +-void memory_region_rom_device_set_readable(MemoryRegion *mr, bool readable); ++void memory_region_rom_device_set_romd(MemoryRegion *mr, bool romd_mode); + + /** + * memory_region_set_coalescing: Enable memory coalescing for the region. +diff --git a/memory.c b/memory.c +index 685912d..edaf6fd 100644 +--- a/memory.c ++++ b/memory.c +@@ -214,7 +214,7 @@ struct FlatRange { + hwaddr offset_in_region; + AddrRange addr; + uint8_t dirty_log_mask; +- bool readable; ++ bool romd_mode; + bool readonly; + }; + +@@ -237,7 +237,7 @@ static bool flatrange_equal(FlatRange *a, FlatRange *b) + return a->mr == b->mr + && addrrange_equal(a->addr, b->addr) + && a->offset_in_region == b->offset_in_region +- && a->readable == b->readable ++ && a->romd_mode == b->romd_mode + && a->readonly == b->readonly; + } + +@@ -277,7 +277,7 @@ static bool can_merge(FlatRange *r1, FlatRange *r2) + r1->addr.size), + int128_make64(r2->offset_in_region)) + && r1->dirty_log_mask == r2->dirty_log_mask +- && r1->readable == r2->readable ++ && r1->romd_mode == r2->romd_mode + && r1->readonly == r2->readonly; + } + +@@ -533,7 +533,7 @@ static void render_memory_region(FlatView *view, + fr.offset_in_region = offset_in_region; + fr.addr = addrrange_make(base, now); + fr.dirty_log_mask = mr->dirty_log_mask; +- fr.readable = mr->readable; ++ fr.romd_mode = mr->romd_mode; + fr.readonly = readonly; + flatview_insert(view, i, &fr); + ++i; +@@ -553,7 +553,7 @@ static void render_memory_region(FlatView *view, + fr.offset_in_region = offset_in_region; + fr.addr = addrrange_make(base, remain); + fr.dirty_log_mask = mr->dirty_log_mask; +- fr.readable = mr->readable; ++ fr.romd_mode = mr->romd_mode; + fr.readonly = readonly; + flatview_insert(view, i, &fr); + } +@@ -802,7 +802,7 @@ void memory_region_init(MemoryRegion *mr, + mr->enabled = true; + mr->terminates = false; + mr->ram = false; +- mr->readable = true; ++ mr->romd_mode = true; + mr->readonly = false; + mr->rom_device = false; + mr->destructor = memory_region_destructor_none; +@@ -1118,11 +1118,11 @@ void memory_region_set_readonly(MemoryRegion *mr, bool readonly) + } + } + +-void memory_region_rom_device_set_readable(MemoryRegion *mr, bool readable) ++void memory_region_rom_device_set_romd(MemoryRegion *mr, bool romd_mode) + { +- if (mr->readable != readable) { ++ if (mr->romd_mode != romd_mode) { + memory_region_transaction_begin(); +- mr->readable = readable; ++ mr->romd_mode = romd_mode; + memory_region_update_pending |= mr->enabled; + memory_region_transaction_commit(); + } +@@ -1644,9 +1644,9 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, + base + mr->addr + + (hwaddr)int128_get64(mr->size) - 1, + mr->priority, +- mr->readable ? 'R' : '-', +- !mr->readonly && !(mr->rom_device && mr->readable) ? 'W' +- : '-', ++ mr->romd_mode ? 'R' : '-', ++ !mr->readonly && !(mr->rom_device && mr->romd_mode) ? 'W' ++ : '-', + mr->name, + mr->alias->name, + mr->alias_offset, +@@ -1659,9 +1659,9 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, + base + mr->addr + + (hwaddr)int128_get64(mr->size) - 1, + mr->priority, +- mr->readable ? 'R' : '-', +- !mr->readonly && !(mr->rom_device && mr->readable) ? 'W' +- : '-', ++ mr->romd_mode ? 'R' : '-', ++ !mr->readonly && !(mr->rom_device && mr->romd_mode) ? 'W' ++ : '-', + mr->name); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-Replace-open-coded-memory_region_is_romd.patch b/SOURCES/kvm-memory-Replace-open-coded-memory_region_is_romd.patch new file mode 100644 index 0000000..5d02268 --- /dev/null +++ b/SOURCES/kvm-memory-Replace-open-coded-memory_region_is_romd.patch @@ -0,0 +1,48 @@ +From 8b8d0c6584741845558eb066c8b1c393dc86bb29 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:53 +0100 +Subject: [PATCH 03/22] memory: Replace open-coded memory_region_is_romd + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-4-git-send-email-lersek@redhat.com> +Patchwork-id: 56616 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 03/18] memory: Replace open-coded memory_region_is_romd +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones +RH-Acked-by: Kevin Wolf + +From: Jan Kiszka + +Improves readability. + +Reviewed-by: Peter Maydell +Signed-off-by: Jan Kiszka +(cherry picked from commit 4b81126e3399bfbcc47a4d696902c93401169f72) +Signed-off-by: Laszlo Ersek +--- + translate-all.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + translate-all.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/translate-all.c b/translate-all.c +index da93608..0d84b0d 100644 +--- a/translate-all.c ++++ b/translate-all.c +@@ -1359,7 +1359,7 @@ void tb_invalidate_phys_addr(hwaddr addr) + section = phys_page_find(address_space_memory.dispatch, + addr >> TARGET_PAGE_BITS); + if (!(memory_region_is_ram(section->mr) +- || (section->mr->rom_device && section->mr->readable))) { ++ || memory_region_is_romd(section->mr))) { + return; + } + ram_addr = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK) +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-all-users-of-cpu_physical_memory_get_dirty-us.patch b/SOURCES/kvm-memory-all-users-of-cpu_physical_memory_get_dirty-us.patch new file mode 100644 index 0000000..c8dcd94 --- /dev/null +++ b/SOURCES/kvm-memory-all-users-of-cpu_physical_memory_get_dirty-us.patch @@ -0,0 +1,67 @@ +From 34f281f51324d0b4638803025b2a107c37ee6c4c Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:20 +0100 +Subject: [PATCH 09/40] memory: all users of cpu_physical_memory_get_dirty used only one flag + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-10-git-send-email-quintela@redhat.com> +Patchwork-id: 56665 +O-Subject: [RHEL7 qemu-kvm PATCH 09/40] memory: all users of cpu_physical_memory_get_dirty used only one flag +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +So cpu_physical_memory_get_dirty_flags is not needed anymore + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 36187e2ca0295364dcb9a3f256a6fcd77e983c02) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index dfc03e1..571a5ef 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -53,11 +53,6 @@ void qemu_ram_free_from_ptr(ram_addr_t addr); + #define CODE_DIRTY_FLAG 0x02 + #define MIGRATION_DIRTY_FLAG 0x08 + +-static inline int cpu_physical_memory_get_dirty_flags(ram_addr_t addr) +-{ +- return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS]; +-} +- + static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, + int dirty_flag) + { +@@ -76,7 +71,7 @@ static inline bool cpu_physical_memory_is_dirty(ram_addr_t addr) + + static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + ram_addr_t length, +- int dirty_flags) ++ int dirty_flag) + { + int ret = 0; + ram_addr_t addr, end; +@@ -84,7 +79,7 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- ret |= cpu_physical_memory_get_dirty_flags(addr) & dirty_flags; ++ ret |= cpu_physical_memory_get_dirty_flag(addr, dirty_flag); + } + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_clear_dirty_flag-result-i.patch b/SOURCES/kvm-memory-cpu_physical_memory_clear_dirty_flag-result-i.patch new file mode 100644 index 0000000..293150e --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_clear_dirty_flag-result-i.patch @@ -0,0 +1,52 @@ +From 40df172dc059d425c1d557c2e21fc931bf3c2251 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:27 +0100 +Subject: [PATCH 16/40] memory: cpu_physical_memory_clear_dirty_flag() result is never used + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-17-git-send-email-quintela@redhat.com> +Patchwork-id: 56670 +O-Subject: [RHEL7 qemu-kvm PATCH 16/40] memory: cpu_physical_memory_clear_dirty_flag() result is never used +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit e8a97cafc4108fa964807eb9cbce7eda698f99bb) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index ef5de3e..2c86add 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -95,14 +95,14 @@ static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) + cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_CODE); + } + +-static inline int cpu_physical_memory_clear_dirty_flag(ram_addr_t addr, ++static inline void cpu_physical_memory_clear_dirty_flag(ram_addr_t addr, + unsigned client) + { + int mask = ~(1 << client); + + assert(client < DIRTY_MEMORY_NUM); + +- return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] &= mask; ++ ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] &= mask; + } + + static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_clear_dirty_range-now-use.patch b/SOURCES/kvm-memory-cpu_physical_memory_clear_dirty_range-now-use.patch new file mode 100644 index 0000000..59aaf35 --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_clear_dirty_range-now-use.patch @@ -0,0 +1,56 @@ +From 4130035f29158309e86b3a1e0f25dbd5bec81af0 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:38 +0100 +Subject: [PATCH 27/40] memory: cpu_physical_memory_clear_dirty_range() now uses bitmap operations + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-28-git-send-email-quintela@redhat.com> +Patchwork-id: 56685 +O-Subject: [RHEL7 qemu-kvm PATCH 27/40] memory: cpu_physical_memory_clear_dirty_range() now uses bitmap operations +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +We were clearing a range of bits, so use bitmap_clear(). + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit a461e389f489e72cdc770ff887512c2c9109bc43) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 9d32a5a..94bd6af 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -104,14 +104,12 @@ static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, + ram_addr_t length, + unsigned client) + { +- ram_addr_t addr, end; ++ unsigned long end, page; + + assert(client < DIRTY_MEMORY_NUM); +- end = TARGET_PAGE_ALIGN(start + length); +- start &= TARGET_PAGE_MASK; +- for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- clear_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); +- } ++ end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; ++ page = start >> TARGET_PAGE_BITS; ++ bitmap_clear(ram_list.dirty_memory[client], page, end - page); + } + + void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_get_dirty-is-used-as-retu.patch b/SOURCES/kvm-memory-cpu_physical_memory_get_dirty-is-used-as-retu.patch new file mode 100644 index 0000000..3eb27b3 --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_get_dirty-is-used-as-retu.patch @@ -0,0 +1,66 @@ +From 0a833a763d5ab1da11f11303e96b0c56100ce2b9 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:34 +0100 +Subject: [PATCH 23/40] memory: cpu_physical_memory_get_dirty() is used as returning a bool + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-24-git-send-email-quintela@redhat.com> +Patchwork-id: 56676 +O-Subject: [RHEL7 qemu-kvm PATCH 23/40] memory: cpu_physical_memory_get_dirty() is used as returning a bool +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 94833c896d2d339571a66542f2715b1897d70fa7) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 15 ++++++++------- + 1 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 9099561..f27b830 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -49,11 +49,10 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr); + void qemu_ram_free(ram_addr_t addr); + void qemu_ram_free_from_ptr(ram_addr_t addr); + +-static inline int cpu_physical_memory_get_dirty(ram_addr_t start, +- ram_addr_t length, +- unsigned client) ++static inline bool cpu_physical_memory_get_dirty(ram_addr_t start, ++ ram_addr_t length, ++ unsigned client) + { +- int ret = 0; + ram_addr_t addr, end; + + assert(client < DIRTY_MEMORY_NUM); +@@ -61,10 +60,12 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- ret |= test_bit(addr >> TARGET_PAGE_BITS, +- ram_list.dirty_memory[client]); ++ if (test_bit(addr >> TARGET_PAGE_BITS, ++ ram_list.dirty_memory[client])) { ++ return true; ++ } + } +- return ret; ++ return false; + } + + static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_mask_dirty_range-always-c.patch b/SOURCES/kvm-memory-cpu_physical_memory_mask_dirty_range-always-c.patch new file mode 100644 index 0000000..d5e7be5 --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_mask_dirty_range-always-c.patch @@ -0,0 +1,281 @@ +From e892037c3e5cf8ec5f0278dcbc97167831100a54 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:23 +0100 +Subject: [PATCH 12/40] memory: cpu_physical_memory_mask_dirty_range() always clears a single flag + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-13-git-send-email-quintela@redhat.com> +Patchwork-id: 56667 +O-Subject: [RHEL7 qemu-kvm PATCH 12/40] memory: cpu_physical_memory_mask_dirty_range() always clears a single flag +Bugzilla: 997559 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Paolo Bonzini + +Document it + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 52159192919469b424b54c167312e53d5a62d233) +Signed-off-by: Juan Quintela +--- + cputlb.c | 4 ++-- + exec.c | 19 ++++++++++--------- + include/exec/memory-internal.h | 40 ++++++++++++++++++---------------------- + include/exec/memory.h | 3 --- + memory.c | 10 ++++------ + 5 files changed, 34 insertions(+), 42 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + cputlb.c | 4 ++-- + exec.c | 19 ++++++++++--------- + include/exec/memory-internal.h | 40 ++++++++++++++++++---------------------- + include/exec/memory.h | 3 --- + memory.c | 10 ++++------ + 5 files changed, 34 insertions(+), 42 deletions(-) + +diff --git a/cputlb.c b/cputlb.c +index 84e83e0..9c89c01 100644 +--- a/cputlb.c ++++ b/cputlb.c +@@ -129,7 +129,7 @@ void tlb_protect_code(ram_addr_t ram_addr) + { + cpu_physical_memory_reset_dirty(ram_addr, + ram_addr + TARGET_PAGE_SIZE, +- CODE_DIRTY_FLAG); ++ DIRTY_MEMORY_CODE); + } + + /* update the TLB so that writes in physical page 'phys_addr' are no longer +@@ -137,7 +137,7 @@ void tlb_protect_code(ram_addr_t ram_addr) + void tlb_unprotect_code_phys(CPUArchState *env, ram_addr_t ram_addr, + target_ulong vaddr) + { +- cpu_physical_memory_set_dirty_flag(ram_addr, CODE_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_CODE); + } + + static bool tlb_is_dirty_ram(CPUTLBEntry *tlbe) +diff --git a/exec.c b/exec.c +index 069e082..8942d50 100644 +--- a/exec.c ++++ b/exec.c +@@ -596,7 +596,7 @@ static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t end, + + /* Note: start and end must be within the same ram block. */ + void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, +- int dirty_flags) ++ unsigned client) + { + uintptr_t length; + +@@ -606,7 +606,7 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, + length = end - start; + if (length == 0) + return; +- cpu_physical_memory_mask_dirty_range(start, length, dirty_flags); ++ cpu_physical_memory_mask_dirty_range(start, length, client); + + if (tcg_enabled()) { + tlb_reset_dirty_range_all(start, end, length); +@@ -1480,7 +1480,7 @@ static const MemoryRegionOps rom_mem_ops = { + static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + uint64_t val, unsigned size) + { +- if (!cpu_physical_memory_get_dirty_flag(ram_addr, CODE_DIRTY_FLAG)) { ++ if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) { + tb_invalidate_phys_page_fast(ram_addr, size); + } + switch (size) { +@@ -1496,8 +1496,8 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + default: + abort(); + } +- cpu_physical_memory_set_dirty_flag(ram_addr, MIGRATION_DIRTY_FLAG); +- cpu_physical_memory_set_dirty_flag(ram_addr, VGA_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_MIGRATION); ++ cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_VGA); + /* we remove the notdirty callback only if the code has been + flushed */ + if (cpu_physical_memory_is_dirty(ram_addr)) +@@ -1919,8 +1919,8 @@ static void invalidate_and_set_dirty(hwaddr addr, + /* invalidate code */ + tb_invalidate_phys_page_range(addr, addr + length, 0); + /* set dirty bit */ +- cpu_physical_memory_set_dirty_flag(addr, VGA_DIRTY_FLAG); +- cpu_physical_memory_set_dirty_flag(addr, MIGRATION_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_VGA); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); + } + xen_modified_memory(addr, length); + } +@@ -2435,8 +2435,9 @@ void stl_phys_notdirty(hwaddr addr, uint32_t val) + /* invalidate code */ + tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); + /* set dirty bit */ +- cpu_physical_memory_set_dirty_flag(addr1, MIGRATION_DIRTY_FLAG); +- cpu_physical_memory_set_dirty_flag(addr1, VGA_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr1, ++ DIRTY_MEMORY_MIGRATION); ++ cpu_physical_memory_set_dirty_flag(addr1, DIRTY_MEMORY_VGA); + } + } + } +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 794fabd..fbcd384 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -49,29 +49,25 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr); + void qemu_ram_free(ram_addr_t addr); + void qemu_ram_free_from_ptr(ram_addr_t addr); + +-#define VGA_DIRTY_FLAG 0x01 +-#define CODE_DIRTY_FLAG 0x02 +-#define MIGRATION_DIRTY_FLAG 0x08 +- + static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, +- int dirty_flag) ++ unsigned client) + { +- return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] & dirty_flag; ++ return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] & (1 << client); + } + + /* read dirty bit (return 0 or 1) */ + static inline bool cpu_physical_memory_is_dirty(ram_addr_t addr) + { +- bool vga = cpu_physical_memory_get_dirty_flag(addr, VGA_DIRTY_FLAG); +- bool code = cpu_physical_memory_get_dirty_flag(addr, CODE_DIRTY_FLAG); ++ bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA); ++ bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE); + bool migration = +- cpu_physical_memory_get_dirty_flag(addr, MIGRATION_DIRTY_FLAG); ++ cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); + return vga && code && migration; + } + + static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + ram_addr_t length, +- int dirty_flag) ++ unsigned client) + { + int ret = 0; + ram_addr_t addr, end; +@@ -79,28 +75,28 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- ret |= cpu_physical_memory_get_dirty_flag(addr, dirty_flag); ++ ret |= cpu_physical_memory_get_dirty_flag(addr, client); + } + return ret; + } + + static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, +- int dirty_flag) ++ unsigned client) + { +- ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flag; ++ ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= (1 << client); + } + + static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) + { +- cpu_physical_memory_set_dirty_flag(addr, MIGRATION_DIRTY_FLAG); +- cpu_physical_memory_set_dirty_flag(addr, VGA_DIRTY_FLAG); +- cpu_physical_memory_set_dirty_flag(addr, CODE_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_VGA); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_CODE); + } + +-static inline int cpu_physical_memory_clear_dirty_flags(ram_addr_t addr, +- int dirty_flags) ++static inline int cpu_physical_memory_clear_dirty_flag(ram_addr_t addr, ++ unsigned client) + { +- int mask = ~dirty_flags; ++ int mask = ~(1 << client); + + return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] &= mask; + } +@@ -120,19 +116,19 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + + static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start, + ram_addr_t length, +- int dirty_flags) ++ unsigned client) + { + ram_addr_t addr, end; + + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- cpu_physical_memory_clear_dirty_flags(addr, dirty_flags); ++ cpu_physical_memory_clear_dirty_flag(addr, client); + } + } + + void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, +- int dirty_flags); ++ unsigned client); + + extern const IORangeOps memory_region_iorange_ops; + +diff --git a/include/exec/memory.h b/include/exec/memory.h +index 9e88320..868fdb1 100644 +--- a/include/exec/memory.h ++++ b/include/exec/memory.h +@@ -30,9 +30,6 @@ typedef struct MemoryRegionOps MemoryRegionOps; + typedef struct MemoryRegionPortio MemoryRegionPortio; + typedef struct MemoryRegionMmio MemoryRegionMmio; + +-/* Must match *_DIRTY_FLAGS in cpu-all.h. To be replaced with dynamic +- * registration. +- */ + #define DIRTY_MEMORY_VGA 0 + #define DIRTY_MEMORY_CODE 1 + #define DIRTY_MEMORY_MIGRATION 3 +diff --git a/memory.c b/memory.c +index e7a454f..2883da5 100644 +--- a/memory.c ++++ b/memory.c +@@ -1070,8 +1070,7 @@ bool memory_region_get_dirty(MemoryRegion *mr, hwaddr addr, + hwaddr size, unsigned client) + { + assert(mr->terminates); +- return cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, +- 1 << client); ++ return cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, client); + } + + void memory_region_set_dirty(MemoryRegion *mr, hwaddr addr, +@@ -1086,12 +1085,11 @@ bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr, + { + bool ret; + assert(mr->terminates); +- ret = cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, +- 1 << client); ++ ret = cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, client); + if (ret) { + cpu_physical_memory_reset_dirty(mr->ram_addr + addr, + mr->ram_addr + addr + size, +- 1 << client); ++ client); + } + return ret; + } +@@ -1137,7 +1135,7 @@ void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr, + assert(mr->terminates); + cpu_physical_memory_reset_dirty(mr->ram_addr + addr, + mr->ram_addr + addr + size, +- 1 << client); ++ client); + } + + void *memory_region_get_ram_ptr(MemoryRegion *mr) +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_flags-result-is.patch b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_flags-result-is.patch new file mode 100644 index 0000000..a4a9a04 --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_flags-result-is.patch @@ -0,0 +1,50 @@ +From 7ed93a1e2246aca0686810f2a32582c31bd7219f Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:13 +0100 +Subject: [PATCH 02/40] memory: cpu_physical_memory_set_dirty_flags() result is never used + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-3-git-send-email-quintela@redhat.com> +Patchwork-id: 56660 +O-Subject: [RHEL7 qemu-kvm PATCH 02/40] memory: cpu_physical_memory_set_dirty_flags() result is never used +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +So return void. + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +Reviewed-by: Eric Blake +(cherry picked from commit e2da99d582300bb8deecb25d26a179ef5b92e066) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 1b156fd..eac149a 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -79,10 +79,10 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + return ret; + } + +-static inline int cpu_physical_memory_set_dirty_flags(ram_addr_t addr, ++static inline void cpu_physical_memory_set_dirty_flags(ram_addr_t addr, + int dirty_flags) + { +- return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags; ++ ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags; + } + + static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-always-di.patch b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-always-di.patch new file mode 100644 index 0000000..1ac1bae --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-always-di.patch @@ -0,0 +1,100 @@ +From 0ef152ec4827c61924b0e05d32e4ba44a8aa996f Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:22 +0100 +Subject: [PATCH 11/40] memory: cpu_physical_memory_set_dirty_range() always dirty all flags + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-12-git-send-email-quintela@redhat.com> +Patchwork-id: 56666 +O-Subject: [RHEL7 qemu-kvm PATCH 11/40] memory: cpu_physical_memory_set_dirty_range() always dirty all flags +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +So remove the flag argument and do it directly. After this change, +there is nothing else using cpu_physical_memory_set_dirty_flags() so +remove it. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 75218e7f2b7f052c6f44489afaf45b3ea4369f45) +Signed-off-by: Juan Quintela +--- + exec.c | 2 +- + include/exec/memory-internal.h | 11 ++--------- + memory.c | 2 +- + 3 files changed, 4 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 2 +- + include/exec/memory-internal.h | 11 ++--------- + memory.c | 2 +- + 3 files changed, 4 insertions(+), 11 deletions(-) + +diff --git a/exec.c b/exec.c +index 178ed4a..069e082 100644 +--- a/exec.c ++++ b/exec.c +@@ -1162,7 +1162,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + last_ram_offset() >> TARGET_PAGE_BITS); + memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS), + 0, size >> TARGET_PAGE_BITS); +- cpu_physical_memory_set_dirty_range(new_block->offset, size, 0xff); ++ cpu_physical_memory_set_dirty_range(new_block->offset, size); + + qemu_ram_setup_dump(new_block->host, size); + qemu_madvise(new_block->host, size, QEMU_MADV_HUGEPAGE); +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 55b4022..794fabd 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -84,12 +84,6 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + return ret; + } + +-static inline void cpu_physical_memory_set_dirty_flags(ram_addr_t addr, +- int dirty_flags) +-{ +- ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags; +-} +- + static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + int dirty_flag) + { +@@ -112,15 +106,14 @@ static inline int cpu_physical_memory_clear_dirty_flags(ram_addr_t addr, + } + + static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, +- ram_addr_t length, +- int dirty_flags) ++ ram_addr_t length) + { + ram_addr_t addr, end; + + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- cpu_physical_memory_set_dirty_flags(addr, dirty_flags); ++ cpu_physical_memory_set_dirty(addr); + } + xen_modified_memory(addr, length); + } +diff --git a/memory.c b/memory.c +index fc11859..e7a454f 100644 +--- a/memory.c ++++ b/memory.c +@@ -1078,7 +1078,7 @@ void memory_region_set_dirty(MemoryRegion *mr, hwaddr addr, + hwaddr size) + { + assert(mr->terminates); +- cpu_physical_memory_set_dirty_range(mr->ram_addr + addr, size, -1); ++ cpu_physical_memory_set_dirty_range(mr->ram_addr + addr, size); + } + + bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-now-uses-.patch b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-now-uses-.patch new file mode 100644 index 0000000..55689df --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-now-uses-.patch @@ -0,0 +1,67 @@ +From 07e1f1362ec868bde3cd99d55541e572ae5aa300 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:37 +0100 +Subject: [PATCH 26/40] memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-27-git-send-email-quintela@redhat.com> +Patchwork-id: 56681 +O-Subject: [RHEL7 qemu-kvm PATCH 26/40] memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +We were setting a range of bits, so use bitmap_set(). + +Note: xen has always been wrong, and should have used start instead +of addr from the beginning. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 5b9a3a5f77e3458af6c1bb0654ee0f32936a5594) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 19 +++++++------------ + 1 file changed, 7 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 19 +++++++------------ + 1 files changed, 7 insertions(+), 12 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 1eda526..9d32a5a 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -90,19 +90,14 @@ static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + ram_addr_t length) + { +- ram_addr_t addr, end; ++ unsigned long end, page; + +- end = TARGET_PAGE_ALIGN(start + length); +- start &= TARGET_PAGE_MASK; +- for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- set_bit(addr >> TARGET_PAGE_BITS, +- ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION]); +- set_bit(addr >> TARGET_PAGE_BITS, +- ram_list.dirty_memory[DIRTY_MEMORY_VGA]); +- set_bit(addr >> TARGET_PAGE_BITS, +- ram_list.dirty_memory[DIRTY_MEMORY_CODE]); +- } +- xen_modified_memory(addr, length); ++ end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; ++ page = start >> TARGET_PAGE_BITS; ++ bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION], page, end - page); ++ bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_VGA], page, end - page); ++ bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page); ++ xen_modified_memory(start, length); + } + + static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-return-vo.patch b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-return-vo.patch new file mode 100644 index 0000000..9e612bc --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_range-return-vo.patch @@ -0,0 +1,44 @@ +From 9a690622915308d0832e5565b4f0ce66563fa09f Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:14 +0100 +Subject: [PATCH 03/40] memory: cpu_physical_memory_set_dirty_range() return void + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-4-git-send-email-quintela@redhat.com> +Patchwork-id: 56659 +O-Subject: [RHEL7 qemu-kvm PATCH 03/40] memory: cpu_physical_memory_set_dirty_range() return void +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +Reviewed-by: Eric Blake +(cherry picked from commit 78d0042642a415b56b3c53a6044f30eff47bf69c) +Signed-off-by: Juan Quintela +--- + memory.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + memory.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/memory.c b/memory.c +index 75ca281..fc11859 100644 +--- a/memory.c ++++ b/memory.c +@@ -1078,7 +1078,7 @@ void memory_region_set_dirty(MemoryRegion *mr, hwaddr addr, + hwaddr size) + { + assert(mr->terminates); +- return cpu_physical_memory_set_dirty_range(mr->ram_addr + addr, size, -1); ++ cpu_physical_memory_set_dirty_range(mr->ram_addr + addr, size, -1); + } + + bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_tracking-should.patch b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_tracking-should.patch new file mode 100644 index 0000000..faa880e --- /dev/null +++ b/SOURCES/kvm-memory-cpu_physical_memory_set_dirty_tracking-should.patch @@ -0,0 +1,75 @@ +From 5446e66dd3df0b07dd1d3554ce3356ae7f6e3fed Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:42 +0100 +Subject: [PATCH 31/40] memory: cpu_physical_memory_set_dirty_tracking() should return void + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-32-git-send-email-quintela@redhat.com> +Patchwork-id: 56684 +O-Subject: [RHEL7 qemu-kvm PATCH 31/40] memory: cpu_physical_memory_set_dirty_tracking() should return void +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Result was always 0, and not used anywhere. Once there, use bool type +for the parameter. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 981fdf2353d5e708adbe5227260d5e46eececc05) +Signed-off-by: Juan Quintela +--- + exec.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/exec.c b/exec.c +index 443de79..2bf71bf 100644 +--- a/exec.c ++++ b/exec.c +@@ -55,7 +55,7 @@ + //#define DEBUG_SUBPAGE + + #if !defined(CONFIG_USER_ONLY) +-static int in_migration; ++static bool in_migration; + + RAMList ram_list = { .blocks = QTAILQ_HEAD_INITIALIZER(ram_list.blocks) }; + +@@ -609,11 +609,9 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length, + } + } + +-static int cpu_physical_memory_set_dirty_tracking(int enable) ++static void cpu_physical_memory_set_dirty_tracking(bool enable) + { +- int ret = 0; + in_migration = enable; +- return ret; + } + + hwaddr memory_region_section_get_iotlb(CPUArchState *env, +@@ -1774,12 +1772,12 @@ static void tcg_commit(MemoryListener *listener) + + static void core_log_global_start(MemoryListener *listener) + { +- cpu_physical_memory_set_dirty_tracking(1); ++ cpu_physical_memory_set_dirty_tracking(true); + } + + static void core_log_global_stop(MemoryListener *listener) + { +- cpu_physical_memory_set_dirty_tracking(0); ++ cpu_physical_memory_set_dirty_tracking(false); + } + + static void io_region_add(MemoryListener *listener, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-create-function-to-set-a-single-dirty-bit.patch b/SOURCES/kvm-memory-create-function-to-set-a-single-dirty-bit.patch new file mode 100644 index 0000000..3c6f4be --- /dev/null +++ b/SOURCES/kvm-memory-create-function-to-set-a-single-dirty-bit.patch @@ -0,0 +1,63 @@ +From 7c7071e191d00c972db07e90eddb40ad9214fe59 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:16 +0100 +Subject: [PATCH 05/40] memory: create function to set a single dirty bit + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-6-git-send-email-quintela@redhat.com> +Patchwork-id: 56657 +O-Subject: [RHEL7 qemu-kvm PATCH 05/40] memory: create function to set a single dirty bit +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +Reviewed-by: Eric Blake +(cherry picked from commit a1390db4df32ad95bf7854944180d2343f7f6368) +Signed-off-by: Juan Quintela +--- + cputlb.c | 2 +- + include/exec/memory-internal.h | 6 ++++++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + cputlb.c | 2 +- + include/exec/memory-internal.h | 6 ++++++ + 2 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/cputlb.c b/cputlb.c +index aba7e44..84e83e0 100644 +--- a/cputlb.c ++++ b/cputlb.c +@@ -137,7 +137,7 @@ void tlb_protect_code(ram_addr_t ram_addr) + void tlb_unprotect_code_phys(CPUArchState *env, ram_addr_t ram_addr, + target_ulong vaddr) + { +- cpu_physical_memory_set_dirty_flags(ram_addr, CODE_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(ram_addr, CODE_DIRTY_FLAG); + } + + static bool tlb_is_dirty_ram(CPUTLBEntry *tlbe) +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index eac149a..4f476d2 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -85,6 +85,12 @@ static inline void cpu_physical_memory_set_dirty_flags(ram_addr_t addr, + ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags; + } + ++static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, ++ int dirty_flag) ++{ ++ ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flag; ++} ++ + static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) + { + cpu_physical_memory_set_dirty_flags(addr, 0xff); +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-make-cpu_physical_memory_get_dirty-the-main-f.patch b/SOURCES/kvm-memory-make-cpu_physical_memory_get_dirty-the-main-f.patch new file mode 100644 index 0000000..71ae9f6 --- /dev/null +++ b/SOURCES/kvm-memory-make-cpu_physical_memory_get_dirty-the-main-f.patch @@ -0,0 +1,91 @@ +From b48448f26497b1d92d21cc5bf5bd662f9759b65d Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:33 +0100 +Subject: [PATCH 22/40] memory: make cpu_physical_memory_get_dirty() the main function + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-23-git-send-email-quintela@redhat.com> +Patchwork-id: 56678 +O-Subject: [RHEL7 qemu-kvm PATCH 22/40] memory: make cpu_physical_memory_get_dirty() the main function +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +And make cpu_physical_memory_get_dirty_flag() to use it. It used to +be the other way around. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 9f2c43e41a13605d3ab1e37ba433aa669652fb6b) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 36 +++++++++++++++++++----------------- + 1 file changed, 19 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 36 +++++++++++++++++++----------------- + 1 files changed, 19 insertions(+), 17 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index e8fae2a..9099561 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -49,11 +49,28 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr); + void qemu_ram_free(ram_addr_t addr); + void qemu_ram_free_from_ptr(ram_addr_t addr); + ++static inline int cpu_physical_memory_get_dirty(ram_addr_t start, ++ ram_addr_t length, ++ unsigned client) ++{ ++ int ret = 0; ++ ram_addr_t addr, end; ++ ++ assert(client < DIRTY_MEMORY_NUM); ++ ++ end = TARGET_PAGE_ALIGN(start + length); ++ start &= TARGET_PAGE_MASK; ++ for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { ++ ret |= test_bit(addr >> TARGET_PAGE_BITS, ++ ram_list.dirty_memory[client]); ++ } ++ return ret; ++} ++ + static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, + unsigned client) + { +- assert(client < DIRTY_MEMORY_NUM); +- return test_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); ++ return cpu_physical_memory_get_dirty(addr, 1, client); + } + + /* read dirty bit (return 0 or 1) */ +@@ -66,21 +83,6 @@ static inline bool cpu_physical_memory_is_dirty(ram_addr_t addr) + return vga && code && migration; + } + +-static inline int cpu_physical_memory_get_dirty(ram_addr_t start, +- ram_addr_t length, +- unsigned client) +-{ +- int ret = 0; +- ram_addr_t addr, end; +- +- end = TARGET_PAGE_ALIGN(start + length); +- start &= TARGET_PAGE_MASK; +- for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- ret |= cpu_physical_memory_get_dirty_flag(addr, client); +- } +- return ret; +-} +- + static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + unsigned client) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-make-cpu_physical_memory_is_dirty-return-bool.patch b/SOURCES/kvm-memory-make-cpu_physical_memory_is_dirty-return-bool.patch new file mode 100644 index 0000000..6bba7bb --- /dev/null +++ b/SOURCES/kvm-memory-make-cpu_physical_memory_is_dirty-return-bool.patch @@ -0,0 +1,80 @@ +From 478863d3d5428211d0d64a9928484e0b1f5be8a4 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:19 +0100 +Subject: [PATCH 08/40] memory: make cpu_physical_memory_is_dirty return bool + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-9-git-send-email-quintela@redhat.com> +Patchwork-id: 56664 +O-Subject: [RHEL7 qemu-kvm PATCH 08/40] memory: make cpu_physical_memory_is_dirty return bool +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 4f08cabe9e6efe8a50abc30cfa59e8470ad434d7) +Signed-off-by: Juan Quintela +--- + exec.c | 7 ++----- + include/exec/memory-internal.h | 8 ++++++-- + 2 files changed, 8 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 7 ++----- + include/exec/memory-internal.h | 8 ++++++-- + 2 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/exec.c b/exec.c +index e993049..ea81329 100644 +--- a/exec.c ++++ b/exec.c +@@ -1480,11 +1480,8 @@ static const MemoryRegionOps rom_mem_ops = { + static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + uint64_t val, unsigned size) + { +- int dirty_flags; +- dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); + if (!cpu_physical_memory_get_dirty_flag(ram_addr, CODE_DIRTY_FLAG)) { + tb_invalidate_phys_page_fast(ram_addr, size); +- dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); + } + switch (size) { + case 1: +@@ -1499,8 +1496,8 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + default: + abort(); + } +- dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); +- cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); ++ cpu_physical_memory_set_dirty_flag(ram_addr, MIGRATION_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(ram_addr, VGA_DIRTY_FLAG); + /* we remove the notdirty callback only if the code has been + flushed */ + if (cpu_physical_memory_is_dirty(ram_addr)) +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 8872e36..dfc03e1 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -65,9 +65,13 @@ static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, + } + + /* read dirty bit (return 0 or 1) */ +-static inline int cpu_physical_memory_is_dirty(ram_addr_t addr) ++static inline bool cpu_physical_memory_is_dirty(ram_addr_t addr) + { +- return cpu_physical_memory_get_dirty_flags(addr) == 0xff; ++ bool vga = cpu_physical_memory_get_dirty_flag(addr, VGA_DIRTY_FLAG); ++ bool code = cpu_physical_memory_get_dirty_flag(addr, CODE_DIRTY_FLAG); ++ bool migration = ++ cpu_physical_memory_get_dirty_flag(addr, MIGRATION_DIRTY_FLAG); ++ return vga && code && migration; + } + + static inline int cpu_physical_memory_get_dirty(ram_addr_t start, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-make-cpu_physical_memory_reset_dirty-take-a-l.patch b/SOURCES/kvm-memory-make-cpu_physical_memory_reset_dirty-take-a-l.patch new file mode 100644 index 0000000..36f5c35 --- /dev/null +++ b/SOURCES/kvm-memory-make-cpu_physical_memory_reset_dirty-take-a-l.patch @@ -0,0 +1,154 @@ +From 60aa55e63ee56107ed2fd639b08ee166ca0b6264 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:40 +0100 +Subject: [PATCH 29/40] memory: make cpu_physical_memory_reset_dirty() take a length parameter + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-30-git-send-email-quintela@redhat.com> +Patchwork-id: 56683 +O-Subject: [RHEL7 qemu-kvm PATCH 29/40] memory: make cpu_physical_memory_reset_dirty() take a length parameter +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +We have an end parameter in all the callers, and this make it coherent +with the rest of cpu_physical_memory_* functions, that also take a +length parameter. + +Once here, move the start/end calculation to +tlb_reset_dirty_range_all() as we don't need it here anymore. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit a2f4d5bef2cfde557d76fc45a40d2c89b6bed4e4) + +Conflicts: + exec.c + +Missing upstream commit: + +commit 041603fe5d4537cd165941f96bd76a31f7f662fd +Author: Paolo Bonzini +Date: Mon Sep 9 17:49:45 2013 +0200 + + exec: remove qemu_safe_ram_ptr + +Signed-off-by: Juan Quintela +--- + cputlb.c | 3 +-- + exec.c | 19 ++++++++----------- + include/exec/memory-internal.h | 2 +- + memory.c | 8 ++------ + 4 files changed, 12 insertions(+), 20 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + cputlb.c | 3 +-- + exec.c | 19 ++++++++----------- + include/exec/memory-internal.h | 2 +- + memory.c | 8 ++------ + 4 files changed, 12 insertions(+), 20 deletions(-) + +diff --git a/cputlb.c b/cputlb.c +index 04d7f14..44ec9bc 100644 +--- a/cputlb.c ++++ b/cputlb.c +@@ -127,8 +127,7 @@ void tlb_flush_page(CPUArchState *env, target_ulong addr) + can be detected */ + void tlb_protect_code(ram_addr_t ram_addr) + { +- cpu_physical_memory_reset_dirty(ram_addr, +- ram_addr + TARGET_PAGE_SIZE, ++ cpu_physical_memory_reset_dirty(ram_addr, TARGET_PAGE_SIZE, + DIRTY_MEMORY_CODE); + } + +diff --git a/exec.c b/exec.c +index ec01b0f..79ea3b2 100644 +--- a/exec.c ++++ b/exec.c +@@ -576,10 +576,13 @@ CPUArchState *cpu_copy(CPUArchState *env) + } + + #if !defined(CONFIG_USER_ONLY) +-static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t end, +- uintptr_t length) ++static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length) + { +- uintptr_t start1; ++ ram_addr_t start1; ++ ram_addr_t end; ++ ++ end = TARGET_PAGE_ALIGN(start + length); ++ start &= TARGET_PAGE_MASK; + + /* we modify the TLB cache so that the dirty bit will be set again + when accessing the range */ +@@ -595,21 +598,15 @@ static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t end, + } + + /* Note: start and end must be within the same ram block. */ +-void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, ++void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length, + unsigned client) + { +- uintptr_t length; +- +- start &= TARGET_PAGE_MASK; +- end = TARGET_PAGE_ALIGN(end); +- +- length = end - start; + if (length == 0) + return; + cpu_physical_memory_clear_dirty_range(start, length, client); + + if (tcg_enabled()) { +- tlb_reset_dirty_range_all(start, end, length); ++ tlb_reset_dirty_range_all(start, length); + } + } + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 416ce86..d2b85de 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -111,7 +111,7 @@ static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, + bitmap_clear(ram_list.dirty_memory[client], page, end - page); + } + +-void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, ++void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length, + unsigned client); + + extern const IORangeOps memory_region_iorange_ops; +diff --git a/memory.c b/memory.c +index 2883da5..b49642b 100644 +--- a/memory.c ++++ b/memory.c +@@ -1087,9 +1087,7 @@ bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr, + assert(mr->terminates); + ret = cpu_physical_memory_get_dirty(mr->ram_addr + addr, size, client); + if (ret) { +- cpu_physical_memory_reset_dirty(mr->ram_addr + addr, +- mr->ram_addr + addr + size, +- client); ++ cpu_physical_memory_reset_dirty(mr->ram_addr + addr, size, client); + } + return ret; + } +@@ -1133,9 +1131,7 @@ void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr, + hwaddr size, unsigned client) + { + assert(mr->terminates); +- cpu_physical_memory_reset_dirty(mr->ram_addr + addr, +- mr->ram_addr + addr + size, +- client); ++ cpu_physical_memory_reset_dirty(mr->ram_addr + addr, size, client); + } + + void *memory_region_get_ram_ptr(MemoryRegion *mr) +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-make-sure-that-client-is-always-inside-range.patch b/SOURCES/kvm-memory-make-sure-that-client-is-always-inside-range.patch new file mode 100644 index 0000000..e91d5ac --- /dev/null +++ b/SOURCES/kvm-memory-make-sure-that-client-is-always-inside-range.patch @@ -0,0 +1,60 @@ +From 11b9b3f7b11d113e5789877dec1ab41be838c007 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:25 +0100 +Subject: [PATCH 14/40] memory: make sure that client is always inside range + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-15-git-send-email-quintela@redhat.com> +Patchwork-id: 56669 +O-Subject: [RHEL7 qemu-kvm PATCH 14/40] memory: make sure that client is always inside range +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 7a5b558c9d061814f34d9b95d70d17ef75037937) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index fbcd384..ef5de3e 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -52,6 +52,7 @@ void qemu_ram_free_from_ptr(ram_addr_t addr); + static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, + unsigned client) + { ++ assert(client < DIRTY_MEMORY_NUM); + return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] & (1 << client); + } + +@@ -83,6 +84,7 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t start, + static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + unsigned client) + { ++ assert(client < DIRTY_MEMORY_NUM); + ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= (1 << client); + } + +@@ -98,6 +100,8 @@ static inline int cpu_physical_memory_clear_dirty_flag(ram_addr_t addr, + { + int mask = ~(1 << client); + ++ assert(client < DIRTY_MEMORY_NUM); ++ + return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] &= mask; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-move-bitmap-synchronization-to-its-own-functi.patch b/SOURCES/kvm-memory-move-bitmap-synchronization-to-its-own-functi.patch new file mode 100644 index 0000000..941e981 --- /dev/null +++ b/SOURCES/kvm-memory-move-bitmap-synchronization-to-its-own-functi.patch @@ -0,0 +1,129 @@ +From e484992052b63d94c3bcdce6f070eb55f635212b Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:48 +0100 +Subject: [PATCH 37/40] memory: move bitmap synchronization to its own function +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-38-git-send-email-quintela@redhat.com> +Patchwork-id: 56692 +O-Subject: [RHEL7 qemu-kvm PATCH 37/40] memory: move bitmap synchronization to its own function +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +We want to have all the functions that handle directly the dirty +bitmap near. We will change it later. + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit 5ff7fb77b3cee8e26648e4fdccb23a77c2a6d3c6) + +Conflicts: + kvm-all.c + +commit dd1750d7981cf9e38985c9dfa474dcdbbe236270 +Author: Andreas Färber +Date: Wed May 1 13:45:44 2013 +0200 + + kvm: Change kvm_cpu_synchronize_state() argument to CPUState + +Signed-off-by: Juan Quintela +--- + include/exec/ram_addr.h | 31 +++++++++++++++++++++++++++++++ + kvm-all.c | 26 ++------------------------ + 2 files changed, 33 insertions(+), 24 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/ram_addr.h | 31 +++++++++++++++++++++++++++++++ + kvm-all.c | 28 +++------------------------- + 2 files changed, 34 insertions(+), 25 deletions(-) + +diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h +index 0caa239..9962e12 100644 +--- a/include/exec/ram_addr.h ++++ b/include/exec/ram_addr.h +@@ -78,6 +78,37 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + xen_modified_memory(start, length); + } + ++static inline void cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap, ++ ram_addr_t start, ++ ram_addr_t pages) ++{ ++ unsigned int i, j; ++ unsigned long page_number, c; ++ hwaddr addr; ++ ram_addr_t ram_addr; ++ unsigned int len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS; ++ unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE; ++ ++ /* ++ * bitmap-traveling is faster than memory-traveling (for addr...) ++ * especially when most of the memory is not dirty. ++ */ ++ for (i = 0; i < len; i++) { ++ if (bitmap[i] != 0) { ++ c = leul_to_cpu(bitmap[i]); ++ do { ++ j = ffsl(c) - 1; ++ c &= ~(1ul << j); ++ page_number = (i * HOST_LONG_BITS + j) * hpratio; ++ addr = page_number * TARGET_PAGE_SIZE; ++ ram_addr = start + addr; ++ cpu_physical_memory_set_dirty_range(ram_addr, ++ TARGET_PAGE_SIZE * hpratio); ++ } while (c != 0); ++ } ++ } ++} ++ + static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, + ram_addr_t length, + unsigned client) +diff --git a/kvm-all.c b/kvm-all.c +index d3aa869..19acd58 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -365,32 +365,10 @@ static int kvm_set_migration_log(int enable) + static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section, + unsigned long *bitmap) + { +- unsigned int i, j; +- unsigned long page_number, c; +- hwaddr addr; + ram_addr_t start = section->offset_within_region + section->mr->ram_addr; +- ram_addr_t ram_addr; +- unsigned int len = ((section->size / getpagesize()) + HOST_LONG_BITS - 1) / HOST_LONG_BITS; +- unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE; ++ ram_addr_t pages = section->size / getpagesize(); + +- /* +- * bitmap-traveling is faster than memory-traveling (for addr...) +- * especially when most of the memory is not dirty. +- */ +- for (i = 0; i < len; i++) { +- if (bitmap[i] != 0) { +- c = leul_to_cpu(bitmap[i]); +- do { +- j = ffsl(c) - 1; +- c &= ~(1ul << j); +- page_number = (i * HOST_LONG_BITS + j) * hpratio; +- addr = page_number * TARGET_PAGE_SIZE; +- ram_addr = start + addr; +- cpu_physical_memory_set_dirty_range(ram_addr, +- TARGET_PAGE_SIZE * hpratio); +- } while (c != 0); +- } +- } ++ cpu_physical_memory_set_dirty_lebitmap(bitmap, start, pages); + return 0; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-move-private-types-to-exec.c.patch b/SOURCES/kvm-memory-move-private-types-to-exec.c.patch new file mode 100644 index 0000000..9f42fee --- /dev/null +++ b/SOURCES/kvm-memory-move-private-types-to-exec.c.patch @@ -0,0 +1,89 @@ +From 1c6276766eb0cb15ebefbf14f81accd3fe7716bc Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:43 +0100 +Subject: [PATCH 32/40] memory: move private types to exec.c + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-33-git-send-email-quintela@redhat.com> +Patchwork-id: 56687 +O-Subject: [RHEL7 qemu-kvm PATCH 32/40] memory: move private types to exec.c +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +From: Paolo Bonzini + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 1db8abb10243abe969a2ba307664ba51b60fcac6) +Signed-off-by: Juan Quintela +--- + exec.c | 16 ++++++++++++++++ + include/exec/memory-internal.h | 15 --------------- + 2 files changed, 16 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 16 ++++++++++++++++ + include/exec/memory-internal.h | 15 --------------- + 2 files changed, 16 insertions(+), 15 deletions(-) + +diff --git a/exec.c b/exec.c +index 2bf71bf..12adb12 100644 +--- a/exec.c ++++ b/exec.c +@@ -82,6 +82,22 @@ int use_icount; + + #if !defined(CONFIG_USER_ONLY) + ++typedef struct PhysPageEntry PhysPageEntry; ++ ++struct PhysPageEntry { ++ uint16_t is_leaf : 1; ++ /* index into phys_sections (is_leaf) or phys_map_nodes (!is_leaf) */ ++ uint16_t ptr : 15; ++}; ++ ++struct AddressSpaceDispatch { ++ /* This is a multi-level map on the physical address space. ++ * The bottom level has pointers to MemoryRegionSections. ++ */ ++ PhysPageEntry phys_map; ++ MemoryListener listener; ++}; ++ + static MemoryRegionSection *phys_sections; + static unsigned phys_sections_nb, phys_sections_nb_alloc; + static uint16_t phys_section_unassigned; +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index d2b85de..327d54e 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -22,24 +22,9 @@ + #ifndef CONFIG_USER_ONLY + #include "hw/xen/xen.h" + +-typedef struct PhysPageEntry PhysPageEntry; +- +-struct PhysPageEntry { +- uint16_t is_leaf : 1; +- /* index into phys_sections (is_leaf) or phys_map_nodes (!is_leaf) */ +- uint16_t ptr : 15; +-}; + + typedef struct AddressSpaceDispatch AddressSpaceDispatch; + +-struct AddressSpaceDispatch { +- /* This is a multi-level map on the physical address space. +- * The bottom level has pointers to MemoryRegionSections. +- */ +- PhysPageEntry phys_map; +- MemoryListener listener; +-}; +- + void address_space_init_dispatch(AddressSpace *as); + void address_space_destroy_dispatch(AddressSpace *as); + +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-only-resize-dirty-bitmap-when-memory-size-inc.patch b/SOURCES/kvm-memory-only-resize-dirty-bitmap-when-memory-size-inc.patch new file mode 100644 index 0000000..fca8c2d --- /dev/null +++ b/SOURCES/kvm-memory-only-resize-dirty-bitmap-when-memory-size-inc.patch @@ -0,0 +1,62 @@ +From 1e5621a56dcf27b1b9d04bc749e7fbeaa1e17729 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:26 +0100 +Subject: [PATCH 15/40] memory: only resize dirty bitmap when memory size increases + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-16-git-send-email-quintela@redhat.com> +Patchwork-id: 56672 +O-Subject: [RHEL7 qemu-kvm PATCH 15/40] memory: only resize dirty bitmap when memory size increases +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 2152f5ca782e51a4d05a1f7d9bfa83286323cbc9) +Signed-off-by: Juan Quintela +--- + exec.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 12 +++++++++--- + 1 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/exec.c b/exec.c +index 8942d50..be99d45 100644 +--- a/exec.c ++++ b/exec.c +@@ -1098,6 +1098,9 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + MemoryRegion *mr) + { + RAMBlock *block, *new_block; ++ ram_addr_t old_ram_size, new_ram_size; ++ ++ old_ram_size = last_ram_offset() >> TARGET_PAGE_BITS; + + size = TARGET_PAGE_ALIGN(size); + new_block = g_malloc0(sizeof(*new_block)); +@@ -1158,10 +1161,13 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + ram_list.version++; + qemu_mutex_unlock_ramlist(); + +- ram_list.phys_dirty = g_realloc(ram_list.phys_dirty, +- last_ram_offset() >> TARGET_PAGE_BITS); +- memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS), ++ new_ram_size = last_ram_offset() >> TARGET_PAGE_BITS; ++ ++ if (new_ram_size > old_ram_size) { ++ ram_list.phys_dirty = g_realloc(ram_list.phys_dirty, new_ram_size); ++ memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS), + 0, size >> TARGET_PAGE_BITS); ++ } + cpu_physical_memory_set_dirty_range(new_block->offset, size); + + qemu_ram_setup_dump(new_block->host, size); +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-s-dirty-clean-in-cpu_physical_memory_is_dirty.patch b/SOURCES/kvm-memory-s-dirty-clean-in-cpu_physical_memory_is_dirty.patch new file mode 100644 index 0000000..9206ba7 --- /dev/null +++ b/SOURCES/kvm-memory-s-dirty-clean-in-cpu_physical_memory_is_dirty.patch @@ -0,0 +1,134 @@ +From 8683104151659e4d210bdeb2eaf9da667b005fd2 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:39 +0100 +Subject: [PATCH 28/40] memory: s/dirty/clean/ in cpu_physical_memory_is_dirty() + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-29-git-send-email-quintela@redhat.com> +Patchwork-id: 56682 +O-Subject: [RHEL7 qemu-kvm PATCH 28/40] memory: s/dirty/clean/ in cpu_physical_memory_is_dirty() +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +All uses except one really want the other meaning. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit a2cd8c852d2d8c2a084b68b2470f214d6726f6d2) + +Conflicts: + cputlb.c + exec.c + +Missing upstream commit: + +commit 149f54b53b7666a3facd45e86eece60ce7d3b114 +Author: Paolo Bonzini +Date: Fri May 24 12:59:37 2013 +0200 + + memory: add address_space_translate + +and + +commit 0cac1b66c88c4cd3ec1d358091486787837215a3 +Author: Blue Swirl +Date: Mon Apr 9 16:50:52 2012 +0000 + + cputlb: move TLB handling to a separate file + +is what remove tlb_udate_dirty() that we have to change + +Signed-off-by: Juan Quintela +--- + cputlb.c | 4 ++-- + exec.c | 6 +++--- + include/exec/memory-internal.h | 5 ++--- + 3 files changed, 7 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + cputlb.c | 4 ++-- + exec.c | 6 +++--- + include/exec/memory-internal.h | 5 ++--- + 3 files changed, 7 insertions(+), 8 deletions(-) + +diff --git a/cputlb.c b/cputlb.c +index 9c89c01..04d7f14 100644 +--- a/cputlb.c ++++ b/cputlb.c +@@ -167,7 +167,7 @@ static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry) + p = (void *)(uintptr_t)((tlb_entry->addr_write & TARGET_PAGE_MASK) + + tlb_entry->addend); + ram_addr = qemu_ram_addr_from_host_nofail(p); +- if (!cpu_physical_memory_is_dirty(ram_addr)) { ++ if (cpu_physical_memory_is_clean(ram_addr)) { + tlb_entry->addr_write |= TLB_NOTDIRTY; + } + } +@@ -300,7 +300,7 @@ void tlb_set_page(CPUArchState *env, target_ulong vaddr, + /* Write access calls the I/O callback. */ + te->addr_write = address | TLB_MMIO; + } else if (memory_region_is_ram(section->mr) +- && !cpu_physical_memory_is_dirty( ++ && cpu_physical_memory_is_clean( + section->mr->ram_addr + + memory_region_section_addr(section, paddr))) { + te->addr_write = address | TLB_NOTDIRTY; +diff --git a/exec.c b/exec.c +index 77c2a0a..ec01b0f 100644 +--- a/exec.c ++++ b/exec.c +@@ -1509,7 +1509,7 @@ static void notdirty_mem_write(void *opaque, hwaddr ram_addr, + cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_VGA); + /* we remove the notdirty callback only if the code has been + flushed */ +- if (cpu_physical_memory_is_dirty(ram_addr)) ++ if (!cpu_physical_memory_is_clean(ram_addr)) + tlb_set_dirty(cpu_single_env, cpu_single_env->mem_io_vaddr); + } + +@@ -1924,7 +1924,7 @@ int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr, + static void invalidate_and_set_dirty(hwaddr addr, + hwaddr length) + { +- if (!cpu_physical_memory_is_dirty(addr)) { ++ if (cpu_physical_memory_is_clean(addr)) { + /* invalidate code */ + tb_invalidate_phys_page_range(addr, addr + length, 0); + /* set dirty bit */ +@@ -2440,7 +2440,7 @@ void stl_phys_notdirty(hwaddr addr, uint32_t val) + stl_p(ptr, val); + + if (unlikely(in_migration)) { +- if (!cpu_physical_memory_is_dirty(addr1)) { ++ if (cpu_physical_memory_is_clean(addr1)) { + /* invalidate code */ + tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); + /* set dirty bit */ +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 94bd6af..416ce86 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -70,14 +70,13 @@ static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, + return cpu_physical_memory_get_dirty(addr, 1, client); + } + +-/* read dirty bit (return 0 or 1) */ +-static inline bool cpu_physical_memory_is_dirty(ram_addr_t addr) ++static inline bool cpu_physical_memory_is_clean(ram_addr_t addr) + { + bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA); + bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE); + bool migration = + cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); +- return vga && code && migration; ++ return !(vga && code && migration); + } + + static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-s-mask-clear-cpu_physical_memory_mask_dirty_r.patch b/SOURCES/kvm-memory-s-mask-clear-cpu_physical_memory_mask_dirty_r.patch new file mode 100644 index 0000000..0f3cf0f --- /dev/null +++ b/SOURCES/kvm-memory-s-mask-clear-cpu_physical_memory_mask_dirty_r.patch @@ -0,0 +1,65 @@ +From 7565f009dfdc2a54fab24deb0a5887be00777acc Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:35 +0100 +Subject: [PATCH 24/40] memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-25-git-send-email-quintela@redhat.com> +Patchwork-id: 56679 +O-Subject: [RHEL7 qemu-kvm PATCH 24/40] memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Now all functions use the same wording that bitops/bitmap operations + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit ace694cccccf343852d9f0b34171ad475e248bbf) +Signed-off-by: Juan Quintela +--- + exec.c | 2 +- + include/exec/memory-internal.h | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 2 +- + include/exec/memory-internal.h | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/exec.c b/exec.c +index 45b2c46..77c2a0a 100644 +--- a/exec.c ++++ b/exec.c +@@ -606,7 +606,7 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, + length = end - start; + if (length == 0) + return; +- cpu_physical_memory_mask_dirty_range(start, length, client); ++ cpu_physical_memory_clear_dirty_range(start, length, client); + + if (tcg_enabled()) { + tlb_reset_dirty_range_all(start, end, length); +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index f27b830..caff5b4 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -109,9 +109,9 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + xen_modified_memory(addr, length); + } + +-static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start, +- ram_addr_t length, +- unsigned client) ++static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, ++ ram_addr_t length, ++ unsigned client) + { + ram_addr_t addr, end; + +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-set-single-dirty-flags-when-possible.patch b/SOURCES/kvm-memory-set-single-dirty-flags-when-possible.patch new file mode 100644 index 0000000..c56099e --- /dev/null +++ b/SOURCES/kvm-memory-set-single-dirty-flags-when-possible.patch @@ -0,0 +1,73 @@ +From 370fe54037a8d715db78f35d1853dbecdbcef3a0 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:21 +0100 +Subject: [PATCH 10/40] memory: set single dirty flags when possible + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-11-git-send-email-quintela@redhat.com> +Patchwork-id: 56661 +O-Subject: [RHEL7 qemu-kvm PATCH 10/40] memory: set single dirty flags when possible +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 63995cebfaa283586682ea6236c9686b2a49ece7) +Signed-off-by: Juan Quintela +--- + exec.c | 7 ++++--- + include/exec/memory-internal.h | 4 +++- + 2 files changed, 7 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 7 ++++--- + include/exec/memory-internal.h | 4 +++- + 2 files changed, 7 insertions(+), 4 deletions(-) + +diff --git a/exec.c b/exec.c +index ea81329..178ed4a 100644 +--- a/exec.c ++++ b/exec.c +@@ -1919,7 +1919,8 @@ static void invalidate_and_set_dirty(hwaddr addr, + /* invalidate code */ + tb_invalidate_phys_page_range(addr, addr + length, 0); + /* set dirty bit */ +- cpu_physical_memory_set_dirty_flags(addr, (0xff & ~CODE_DIRTY_FLAG)); ++ cpu_physical_memory_set_dirty_flag(addr, VGA_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr, MIGRATION_DIRTY_FLAG); + } + xen_modified_memory(addr, length); + } +@@ -2434,8 +2435,8 @@ void stl_phys_notdirty(hwaddr addr, uint32_t val) + /* invalidate code */ + tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); + /* set dirty bit */ +- cpu_physical_memory_set_dirty_flags( +- addr1, (0xff & ~CODE_DIRTY_FLAG)); ++ cpu_physical_memory_set_dirty_flag(addr1, MIGRATION_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr1, VGA_DIRTY_FLAG); + } + } + } +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 571a5ef..55b4022 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -98,7 +98,9 @@ static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + + static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) + { +- cpu_physical_memory_set_dirty_flags(addr, 0xff); ++ cpu_physical_memory_set_dirty_flag(addr, MIGRATION_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr, VGA_DIRTY_FLAG); ++ cpu_physical_memory_set_dirty_flag(addr, CODE_DIRTY_FLAG); + } + + static inline int cpu_physical_memory_clear_dirty_flags(ram_addr_t addr, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-split-cpu_physical_memory_-functions-to-its-o.patch b/SOURCES/kvm-memory-split-cpu_physical_memory_-functions-to-its-o.patch new file mode 100644 index 0000000..da41441 --- /dev/null +++ b/SOURCES/kvm-memory-split-cpu_physical_memory_-functions-to-its-o.patch @@ -0,0 +1,304 @@ +From e2bf4a6155c08480e42afe12d5ea1ce083c35f00 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:44 +0100 +Subject: [PATCH 33/40] memory: split cpu_physical_memory_* functions to its own include + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-34-git-send-email-quintela@redhat.com> +Patchwork-id: 56688 +O-Subject: [RHEL7 qemu-kvm PATCH 33/40] memory: split cpu_physical_memory_* functions to its own include +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +All the functions that use ram_addr_t should be here. + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit 220c3ebddbd1ac289ae7fc64733c9501b3921d94) + +Conflicts: + exec.c + include/exec/memory-internal.h + +Conflicts due to missing upstream commits: + +commit d2702032b4746515cff0bf29891a6b6decfc3d86 +Author: Paolo Bonzini +Date: Fri May 24 11:55:06 2013 +0200 + + memory: export memory_region_access_valid to exec.c + +commit d197063fcf969e1269dc53c9c9e9a073f87aa3b4 +Author: Paolo Bonzini +Date: Fri May 24 13:23:38 2013 +0200 + + memory: move unassigned_mem_ops to memory.c + +commit b40acf99bef69fa8ab0f9092ff162fde945eec12 +Author: Jan Kiszka +Date: Mon Jun 24 10:45:09 2013 +0200 + + ioport: Switch dispatching to memory core layer + +commit ee983cb3cc8f856b408a272269f434cc9a82ceff +Author: Paolo Bonzini +Date: Tue May 14 11:47:56 2013 +0200 + + exec: make qemu_get_ram_ptr private + +Signed-off-by: Juan Quintela +--- + cputlb.c | 1 + + exec.c | 1 + + include/exec/memory-internal.h | 76 --------------------------------- + include/exec/ram_addr.h | 97 ++++++++++++++++++++++++++++++++++++++++++ + memory.c | 1 + + 5 files changed, 100 insertions(+), 76 deletions(-) + create mode 100644 include/exec/ram_addr.h + +Signed-off-by: Miroslav Rezanina +--- + cputlb.c | 1 + + exec.c | 1 + + include/exec/memory-internal.h | 76 ------------------------------- + include/exec/ram_addr.h | 97 ++++++++++++++++++++++++++++++++++++++++ + memory.c | 1 + + 5 files changed, 100 insertions(+), 76 deletions(-) + create mode 100644 include/exec/ram_addr.h + +diff --git a/cputlb.c b/cputlb.c +index 44ec9bc..7699fdd 100644 +--- a/cputlb.c ++++ b/cputlb.c +@@ -26,6 +26,7 @@ + #include "exec/cputlb.h" + + #include "exec/memory-internal.h" ++#include "exec/ram_addr.h" + + //#define DEBUG_TLB + //#define DEBUG_TLB_CHECK +diff --git a/exec.c b/exec.c +index 12adb12..b16ef4a 100644 +--- a/exec.c ++++ b/exec.c +@@ -50,6 +50,7 @@ + #include "translate-all.h" + + #include "exec/memory-internal.h" ++#include "exec/ram_addr.h" + + //#define DEBUG_UNASSIGNED + //#define DEBUG_SUBPAGE +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 327d54e..8b558bf 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -20,87 +20,11 @@ + #define MEMORY_INTERNAL_H + + #ifndef CONFIG_USER_ONLY +-#include "hw/xen/xen.h" +- +- + typedef struct AddressSpaceDispatch AddressSpaceDispatch; + + void address_space_init_dispatch(AddressSpace *as); + void address_space_destroy_dispatch(AddressSpace *as); + +-ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, +- MemoryRegion *mr); +-ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr); +-void qemu_ram_free(ram_addr_t addr); +-void qemu_ram_free_from_ptr(ram_addr_t addr); +- +-static inline bool cpu_physical_memory_get_dirty(ram_addr_t start, +- ram_addr_t length, +- unsigned client) +-{ +- unsigned long end, page, next; +- +- assert(client < DIRTY_MEMORY_NUM); +- +- end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; +- page = start >> TARGET_PAGE_BITS; +- next = find_next_bit(ram_list.dirty_memory[client], end, page); +- +- return next < end; +-} +- +-static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, +- unsigned client) +-{ +- return cpu_physical_memory_get_dirty(addr, 1, client); +-} +- +-static inline bool cpu_physical_memory_is_clean(ram_addr_t addr) +-{ +- bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA); +- bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE); +- bool migration = +- cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); +- return !(vga && code && migration); +-} +- +-static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, +- unsigned client) +-{ +- assert(client < DIRTY_MEMORY_NUM); +- set_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); +-} +- +-static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, +- ram_addr_t length) +-{ +- unsigned long end, page; +- +- end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; +- page = start >> TARGET_PAGE_BITS; +- bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION], page, end - page); +- bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_VGA], page, end - page); +- bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page); +- xen_modified_memory(start, length); +-} +- +-static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, +- ram_addr_t length, +- unsigned client) +-{ +- unsigned long end, page; +- +- assert(client < DIRTY_MEMORY_NUM); +- end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; +- page = start >> TARGET_PAGE_BITS; +- bitmap_clear(ram_list.dirty_memory[client], page, end - page); +-} +- +-void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length, +- unsigned client); +- + extern const IORangeOps memory_region_iorange_ops; +- + #endif +- + #endif +diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h +new file mode 100644 +index 0000000..0caa239 +--- /dev/null ++++ b/include/exec/ram_addr.h +@@ -0,0 +1,97 @@ ++/* ++ * Declarations for cpu physical memory functions ++ * ++ * Copyright 2011 Red Hat, Inc. and/or its affiliates ++ * ++ * Authors: ++ * Avi Kivity ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or ++ * later. See the COPYING file in the top-level directory. ++ * ++ */ ++ ++/* ++ * This header is for use by exec.c and memory.c ONLY. Do not include it. ++ * The functions declared here will be removed soon. ++ */ ++ ++#ifndef RAM_ADDR_H ++#define RAM_ADDR_H ++ ++#ifndef CONFIG_USER_ONLY ++#include "hw/xen/xen.h" ++ ++ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, ++ MemoryRegion *mr); ++ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr); ++void qemu_ram_free(ram_addr_t addr); ++void qemu_ram_free_from_ptr(ram_addr_t addr); ++ ++static inline bool cpu_physical_memory_get_dirty(ram_addr_t start, ++ ram_addr_t length, ++ unsigned client) ++{ ++ unsigned long end, page, next; ++ ++ assert(client < DIRTY_MEMORY_NUM); ++ ++ end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; ++ page = start >> TARGET_PAGE_BITS; ++ next = find_next_bit(ram_list.dirty_memory[client], end, page); ++ ++ return next < end; ++} ++ ++static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, ++ unsigned client) ++{ ++ return cpu_physical_memory_get_dirty(addr, 1, client); ++} ++ ++static inline bool cpu_physical_memory_is_clean(ram_addr_t addr) ++{ ++ bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA); ++ bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE); ++ bool migration = ++ cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); ++ return !(vga && code && migration); ++} ++ ++static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, ++ unsigned client) ++{ ++ assert(client < DIRTY_MEMORY_NUM); ++ set_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); ++} ++ ++static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, ++ ram_addr_t length) ++{ ++ unsigned long end, page; ++ ++ end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; ++ page = start >> TARGET_PAGE_BITS; ++ bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION], page, end - page); ++ bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_VGA], page, end - page); ++ bitmap_set(ram_list.dirty_memory[DIRTY_MEMORY_CODE], page, end - page); ++ xen_modified_memory(start, length); ++} ++ ++static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start, ++ ram_addr_t length, ++ unsigned client) ++{ ++ unsigned long end, page; ++ ++ assert(client < DIRTY_MEMORY_NUM); ++ end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; ++ page = start >> TARGET_PAGE_BITS; ++ bitmap_clear(ram_list.dirty_memory[client], page, end - page); ++} ++ ++void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length, ++ unsigned client); ++ ++#endif ++#endif +diff --git a/memory.c b/memory.c +index b49642b..685912d 100644 +--- a/memory.c ++++ b/memory.c +@@ -21,6 +21,7 @@ + #include + + #include "exec/memory-internal.h" ++#include "exec/ram_addr.h" + + static unsigned memory_region_transaction_depth; + static bool memory_region_update_pending; +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-split-dirty-bitmap-into-three.patch b/SOURCES/kvm-memory-split-dirty-bitmap-into-three.patch new file mode 100644 index 0000000..eea4cf3 --- /dev/null +++ b/SOURCES/kvm-memory-split-dirty-bitmap-into-three.patch @@ -0,0 +1,169 @@ +From e6b7d9c30dfcdf22dcf87eab667a4212e803ec54 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:29 +0100 +Subject: [PATCH 18/40] memory: split dirty bitmap into three + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-19-git-send-email-quintela@redhat.com> +Patchwork-id: 56673 +O-Subject: [RHEL7 qemu-kvm PATCH 18/40] memory: split dirty bitmap into three +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +After all the previous patches, spliting the bitmap gets direct. + +Note: For some reason, I have to move DIRTY_MEMORY_* definitions to +the beginning of memory.h to make compilation work. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 1ab4c8ceaa5ec55af9bb25e88e46d461a8550280) + +Manual compilation fix: + +- For some reason includes get completely wrong, I had to change the + order of memory.h in ioport.c + Upstream has a much saner layout of include dependences + +Signed-off-by: Juan Quintela +--- + exec.c | 9 ++++++--- + include/exec/cpu-all.h | 3 ++- + include/exec/memory-internal.h | 9 +++------ + include/exec/memory.h | 10 +++++----- + ioport.c | 2 +- + 5 files changed, 17 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + exec.c | 9 ++++++--- + include/exec/cpu-all.h | 3 ++- + include/exec/memory-internal.h | 9 +++------ + include/exec/memory.h | 10 +++++----- + ioport.c | 2 +- + 5 files changed, 17 insertions(+), 16 deletions(-) + +diff --git a/exec.c b/exec.c +index be99d45..45b2c46 100644 +--- a/exec.c ++++ b/exec.c +@@ -1164,9 +1164,12 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + new_ram_size = last_ram_offset() >> TARGET_PAGE_BITS; + + if (new_ram_size > old_ram_size) { +- ram_list.phys_dirty = g_realloc(ram_list.phys_dirty, new_ram_size); +- memset(ram_list.phys_dirty + (new_block->offset >> TARGET_PAGE_BITS), +- 0, size >> TARGET_PAGE_BITS); ++ int i; ++ for (i = 0; i < DIRTY_MEMORY_NUM; i++) { ++ ram_list.dirty_memory[i] = ++ bitmap_zero_extend(ram_list.dirty_memory[i], ++ old_ram_size, new_ram_size); ++ } + } + cpu_physical_memory_set_dirty_range(new_block->offset, size); + +diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h +index c369b25..9c85c1c 100644 +--- a/include/exec/cpu-all.h ++++ b/include/exec/cpu-all.h +@@ -22,6 +22,7 @@ + #include "qemu-common.h" + #include "qemu/tls.h" + #include "exec/cpu-common.h" ++#include "exec/memory.h" + #include "qemu/thread.h" + + /* some important defines: +@@ -482,7 +483,7 @@ typedef struct RAMBlock { + typedef struct RAMList { + QemuMutex mutex; + /* Protected by the iothread lock. */ +- uint8_t *phys_dirty; ++ unsigned long *dirty_memory[DIRTY_MEMORY_NUM]; + RAMBlock *mru_block; + /* Protected by the ramlist lock. */ + QTAILQ_HEAD(, RAMBlock) blocks; +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 2c86add..962b292 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -53,7 +53,7 @@ static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, + unsigned client) + { + assert(client < DIRTY_MEMORY_NUM); +- return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] & (1 << client); ++ return test_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); + } + + /* read dirty bit (return 0 or 1) */ +@@ -85,7 +85,7 @@ static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + unsigned client) + { + assert(client < DIRTY_MEMORY_NUM); +- ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= (1 << client); ++ set_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); + } + + static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) +@@ -98,11 +98,8 @@ static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) + static inline void cpu_physical_memory_clear_dirty_flag(ram_addr_t addr, + unsigned client) + { +- int mask = ~(1 << client); +- + assert(client < DIRTY_MEMORY_NUM); +- +- ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] &= mask; ++ clear_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); + } + + static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, +diff --git a/include/exec/memory.h b/include/exec/memory.h +index 0023edf..bd6d31a 100644 +--- a/include/exec/memory.h ++++ b/include/exec/memory.h +@@ -16,6 +16,11 @@ + + #ifndef CONFIG_USER_ONLY + ++#define DIRTY_MEMORY_VGA 0 ++#define DIRTY_MEMORY_CODE 1 ++#define DIRTY_MEMORY_MIGRATION 2 ++#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ ++ + #include + #include + #include "qemu-common.h" +@@ -30,11 +35,6 @@ typedef struct MemoryRegionOps MemoryRegionOps; + typedef struct MemoryRegionPortio MemoryRegionPortio; + typedef struct MemoryRegionMmio MemoryRegionMmio; + +-#define DIRTY_MEMORY_VGA 0 +-#define DIRTY_MEMORY_CODE 1 +-#define DIRTY_MEMORY_MIGRATION 2 +-#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ +- + struct MemoryRegionMmio { + CPUReadMemoryFunc *read[3]; + CPUWriteMemoryFunc *write[3]; +diff --git a/ioport.c b/ioport.c +index a0ac2a0..957e980 100644 +--- a/ioport.c ++++ b/ioport.c +@@ -25,8 +25,8 @@ + * splitted out ioport related stuffs from vl.c. + */ + +-#include "exec/ioport.h" + #include "trace.h" ++#include "exec/ioport.h" + #include "exec/memory.h" + + /***********************************************************/ +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-syncronize-kvm-bitmap-using-bitmaps-operation.patch b/SOURCES/kvm-memory-syncronize-kvm-bitmap-using-bitmaps-operation.patch new file mode 100644 index 0000000..22ebaa0 --- /dev/null +++ b/SOURCES/kvm-memory-syncronize-kvm-bitmap-using-bitmaps-operation.patch @@ -0,0 +1,103 @@ +From c18e8f4bf7a628949f0d79facf91ddf6d07401e9 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:49 +0100 +Subject: [PATCH 38/40] memory: syncronize kvm bitmap using bitmaps operations + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-39-git-send-email-quintela@redhat.com> +Patchwork-id: 56693 +O-Subject: [RHEL7 qemu-kvm PATCH 38/40] memory: syncronize kvm bitmap using bitmaps operations +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +If bitmaps are aligned properly, use bitmap operations. If they are +not, just use old bit at a time code. + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit ae2810c4bb3b383176e8e1b33931b16c01483aab) +Signed-off-by: Juan Quintela +--- + include/exec/ram_addr.h | 54 ++++++++++++++++++++++++++++++++----------------- + 1 file changed, 36 insertions(+), 18 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/ram_addr.h | 54 +++++++++++++++++++++++++++++++--------------- + 1 files changed, 36 insertions(+), 18 deletions(-) + +diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h +index 9962e12..080a8b1 100644 +--- a/include/exec/ram_addr.h ++++ b/include/exec/ram_addr.h +@@ -82,29 +82,47 @@ static inline void cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap, + ram_addr_t start, + ram_addr_t pages) + { +- unsigned int i, j; ++ unsigned long i, j; + unsigned long page_number, c; + hwaddr addr; + ram_addr_t ram_addr; +- unsigned int len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS; ++ unsigned long len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS; + unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE; ++ unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS); + +- /* +- * bitmap-traveling is faster than memory-traveling (for addr...) +- * especially when most of the memory is not dirty. +- */ +- for (i = 0; i < len; i++) { +- if (bitmap[i] != 0) { +- c = leul_to_cpu(bitmap[i]); +- do { +- j = ffsl(c) - 1; +- c &= ~(1ul << j); +- page_number = (i * HOST_LONG_BITS + j) * hpratio; +- addr = page_number * TARGET_PAGE_SIZE; +- ram_addr = start + addr; +- cpu_physical_memory_set_dirty_range(ram_addr, +- TARGET_PAGE_SIZE * hpratio); +- } while (c != 0); ++ /* start address is aligned at the start of a word? */ ++ if (((page * BITS_PER_LONG) << TARGET_PAGE_BITS) == start) { ++ long k; ++ long nr = BITS_TO_LONGS(pages); ++ ++ for (k = 0; k < nr; k++) { ++ if (bitmap[k]) { ++ unsigned long temp = leul_to_cpu(bitmap[k]); ++ ++ ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION][page + k] |= temp; ++ ram_list.dirty_memory[DIRTY_MEMORY_VGA][page + k] |= temp; ++ ram_list.dirty_memory[DIRTY_MEMORY_CODE][page + k] |= temp; ++ } ++ } ++ xen_modified_memory(start, pages); ++ } else { ++ /* ++ * bitmap-traveling is faster than memory-traveling (for addr...) ++ * especially when most of the memory is not dirty. ++ */ ++ for (i = 0; i < len; i++) { ++ if (bitmap[i] != 0) { ++ c = leul_to_cpu(bitmap[i]); ++ do { ++ j = ffsl(c) - 1; ++ c &= ~(1ul << j); ++ page_number = (i * HOST_LONG_BITS + j) * hpratio; ++ addr = page_number * TARGET_PAGE_SIZE; ++ ram_addr = start + addr; ++ cpu_physical_memory_set_dirty_range(ram_addr, ++ TARGET_PAGE_SIZE * hpratio); ++ } while (c != 0); ++ } + } + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-unfold-cpu_physical_memory_clear_dirty_flag-i.patch b/SOURCES/kvm-memory-unfold-cpu_physical_memory_clear_dirty_flag-i.patch new file mode 100644 index 0000000..a9c1395 --- /dev/null +++ b/SOURCES/kvm-memory-unfold-cpu_physical_memory_clear_dirty_flag-i.patch @@ -0,0 +1,62 @@ +From f59303c7088fc5408c60fbdba36ebe72cbc3ea30 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:30 +0100 +Subject: [PATCH 19/40] memory: unfold cpu_physical_memory_clear_dirty_flag() in its only user + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-20-git-send-email-quintela@redhat.com> +Patchwork-id: 56674 +O-Subject: [RHEL7 qemu-kvm PATCH 19/40] memory: unfold cpu_physical_memory_clear_dirty_flag() in its only user +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 86a49582dbe66d59a9366d2f002f0d6af965ecb8) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 10 ++-------- + 1 files changed, 2 insertions(+), 8 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 962b292..c6372e4 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -95,13 +95,6 @@ static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) + cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_CODE); + } + +-static inline void cpu_physical_memory_clear_dirty_flag(ram_addr_t addr, +- unsigned client) +-{ +- assert(client < DIRTY_MEMORY_NUM); +- clear_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); +-} +- + static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + ram_addr_t length) + { +@@ -121,10 +114,11 @@ static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start, + { + ram_addr_t addr, end; + ++ assert(client < DIRTY_MEMORY_NUM); + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- cpu_physical_memory_clear_dirty_flag(addr, client); ++ clear_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-unfold-cpu_physical_memory_set_dirty-in-its-o.patch b/SOURCES/kvm-memory-unfold-cpu_physical_memory_set_dirty-in-its-o.patch new file mode 100644 index 0000000..59bf1ca --- /dev/null +++ b/SOURCES/kvm-memory-unfold-cpu_physical_memory_set_dirty-in-its-o.patch @@ -0,0 +1,60 @@ +From 7f3acd02a66cd7b2172a5bf264ba26e2f25ae1b9 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:31 +0100 +Subject: [PATCH 20/40] memory: unfold cpu_physical_memory_set_dirty() in its only user + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-21-git-send-email-quintela@redhat.com> +Patchwork-id: 56675 +O-Subject: [RHEL7 qemu-kvm PATCH 20/40] memory: unfold cpu_physical_memory_set_dirty() in its only user +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 4f13bb80a2dc1bb851b43da6dd9117473772b197) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 11 +++-------- + 1 files changed, 3 insertions(+), 8 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index c6372e4..19d8393 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -88,13 +88,6 @@ static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, + set_bit(addr >> TARGET_PAGE_BITS, ram_list.dirty_memory[client]); + } + +-static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) +-{ +- cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); +- cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_VGA); +- cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_CODE); +-} +- + static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + ram_addr_t length) + { +@@ -103,7 +96,9 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- cpu_physical_memory_set_dirty(addr); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_VGA); ++ cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_CODE); + } + xen_modified_memory(addr, length); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-unfold-cpu_physical_memory_set_dirty_flag.patch b/SOURCES/kvm-memory-unfold-cpu_physical_memory_set_dirty_flag.patch new file mode 100644 index 0000000..0ab0d86 --- /dev/null +++ b/SOURCES/kvm-memory-unfold-cpu_physical_memory_set_dirty_flag.patch @@ -0,0 +1,51 @@ +From 10cef67ef7714773f79e444450983d5bbdb2e014 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:32 +0100 +Subject: [PATCH 21/40] memory: unfold cpu_physical_memory_set_dirty_flag() + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-22-git-send-email-quintela@redhat.com> +Patchwork-id: 56677 +O-Subject: [RHEL7 qemu-kvm PATCH 21/40] memory: unfold cpu_physical_memory_set_dirty_flag() +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit c1427a3f84c42d5159d10927700eafc9b653d68f) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index 19d8393..e8fae2a 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -96,9 +96,12 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start, + end = TARGET_PAGE_ALIGN(start + length); + start &= TARGET_PAGE_MASK; + for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_MIGRATION); +- cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_VGA); +- cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_CODE); ++ set_bit(addr >> TARGET_PAGE_BITS, ++ ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION]); ++ set_bit(addr >> TARGET_PAGE_BITS, ++ ram_list.dirty_memory[DIRTY_MEMORY_VGA]); ++ set_bit(addr >> TARGET_PAGE_BITS, ++ ram_list.dirty_memory[DIRTY_MEMORY_CODE]); + } + xen_modified_memory(addr, length); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-unfold-memory_region_test_and_clear.patch b/SOURCES/kvm-memory-unfold-memory_region_test_and_clear.patch new file mode 100644 index 0000000..1bb8460 --- /dev/null +++ b/SOURCES/kvm-memory-unfold-memory_region_test_and_clear.patch @@ -0,0 +1,60 @@ +From bde7a88eaae5b1f1d2dd83a4d4fd232991d2397d Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:45 +0100 +Subject: [PATCH 34/40] memory: unfold memory_region_test_and_clear() + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-35-git-send-email-quintela@redhat.com> +Patchwork-id: 56689 +O-Subject: [RHEL7 qemu-kvm PATCH 34/40] memory: unfold memory_region_test_and_clear() +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +We are going to update the bitmap directly + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit 12291ec18fdce3c1973c172f5a942a1bd26b9a5f) +Signed-off-by: Juan Quintela +--- + arch_init.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 10 +++++++--- + 1 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index d71fb33..41da357 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -48,6 +48,7 @@ + #include "qmp-commands.h" + #include "trace.h" + #include "exec/cpu-all.h" ++#include "exec/ram_addr.h" + #include "hw/acpi/acpi.h" + + #ifdef DEBUG_ARCH_INIT +@@ -400,9 +401,12 @@ static void migration_bitmap_sync(void) + + QTAILQ_FOREACH(block, &ram_list.blocks, next) { + for (addr = 0; addr < block->length; addr += TARGET_PAGE_SIZE) { +- if (memory_region_test_and_clear_dirty(block->mr, +- addr, TARGET_PAGE_SIZE, +- DIRTY_MEMORY_MIGRATION)) { ++ if (cpu_physical_memory_get_dirty(block->mr->ram_addr + addr, ++ TARGET_PAGE_SIZE, ++ DIRTY_MEMORY_MIGRATION)) { ++ cpu_physical_memory_reset_dirty(block->mr->ram_addr + addr, ++ TARGET_PAGE_SIZE, ++ DIRTY_MEMORY_MIGRATION); + migration_bitmap_set_dirty(block->mr, addr); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-use-bit-2-for-migration.patch b/SOURCES/kvm-memory-use-bit-2-for-migration.patch new file mode 100644 index 0000000..6b61fd0 --- /dev/null +++ b/SOURCES/kvm-memory-use-bit-2-for-migration.patch @@ -0,0 +1,48 @@ +From 620f885e15281ca32108331e68aec4ace5bdcec2 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:24 +0100 +Subject: [PATCH 13/40] memory: use bit 2 for migration + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-14-git-send-email-quintela@redhat.com> +Patchwork-id: 56668 +O-Subject: [RHEL7 qemu-kvm PATCH 13/40] memory: use bit 2 for migration +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +For historical reasons it was bit 3. Once there, create a constant to +know the number of clients. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 5adca7ace9b80bf594e4c52c0d5b23573cba3639) +Signed-off-by: Juan Quintela +--- + include/exec/memory.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/include/exec/memory.h b/include/exec/memory.h +index 868fdb1..0023edf 100644 +--- a/include/exec/memory.h ++++ b/include/exec/memory.h +@@ -32,7 +32,8 @@ typedef struct MemoryRegionMmio MemoryRegionMmio; + + #define DIRTY_MEMORY_VGA 0 + #define DIRTY_MEMORY_CODE 1 +-#define DIRTY_MEMORY_MIGRATION 3 ++#define DIRTY_MEMORY_MIGRATION 2 ++#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ + + struct MemoryRegionMmio { + CPUReadMemoryFunc *read[3]; +-- +1.7.1 + diff --git a/SOURCES/kvm-memory-use-find_next_bit-to-find-dirty-bits.patch b/SOURCES/kvm-memory-use-find_next_bit-to-find-dirty-bits.patch new file mode 100644 index 0000000..fa86038 --- /dev/null +++ b/SOURCES/kvm-memory-use-find_next_bit-to-find-dirty-bits.patch @@ -0,0 +1,63 @@ +From 11ef790c7cca491bba62d8cb94018c1cf78e033c Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:36 +0100 +Subject: [PATCH 25/40] memory: use find_next_bit() to find dirty bits + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-26-git-send-email-quintela@redhat.com> +Patchwork-id: 56680 +O-Subject: [RHEL7 qemu-kvm PATCH 25/40] memory: use find_next_bit() to find dirty bits +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +This operation is way faster than doing it bit by bit. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +(cherry picked from commit 1bafff0c7cb99972fd243464632eca0780c6a8f1) +Signed-off-by: Juan Quintela +--- + include/exec/memory-internal.h | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/exec/memory-internal.h | 16 ++++++---------- + 1 files changed, 6 insertions(+), 10 deletions(-) + +diff --git a/include/exec/memory-internal.h b/include/exec/memory-internal.h +index caff5b4..1eda526 100644 +--- a/include/exec/memory-internal.h ++++ b/include/exec/memory-internal.h +@@ -53,19 +53,15 @@ static inline bool cpu_physical_memory_get_dirty(ram_addr_t start, + ram_addr_t length, + unsigned client) + { +- ram_addr_t addr, end; ++ unsigned long end, page, next; + + assert(client < DIRTY_MEMORY_NUM); + +- end = TARGET_PAGE_ALIGN(start + length); +- start &= TARGET_PAGE_MASK; +- for (addr = start; addr < end; addr += TARGET_PAGE_SIZE) { +- if (test_bit(addr >> TARGET_PAGE_BITS, +- ram_list.dirty_memory[client])) { +- return true; +- } +- } +- return false; ++ end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS; ++ page = start >> TARGET_PAGE_BITS; ++ next = find_next_bit(ram_list.dirty_memory[client], end, page); ++ ++ return next < end; + } + + static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, +-- +1.7.1 + diff --git a/SOURCES/kvm-memory_mapping-Improve-qemu_get_guest_memory_mapping-error-reporting.patch b/SOURCES/kvm-memory_mapping-Improve-qemu_get_guest_memory_mapping-error-reporting.patch new file mode 100644 index 0000000..9fdefb1 --- /dev/null +++ b/SOURCES/kvm-memory_mapping-Improve-qemu_get_guest_memory_mapping-error-reporting.patch @@ -0,0 +1,107 @@ +From 810b9028eba23f399b2dcd22e746f99f2577150f Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:36 +0200 +Subject: memory_mapping: Improve qemu_get_guest_memory_mapping() error reporting + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-7-git-send-email-lersek@redhat.com> +Patchwork-id: 53165 +O-Subject: [RHEL-7 qemu-kvm PATCH 06/10] memory_mapping: Improve qemu_get_guest_memory_mapping() error reporting +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +From: Andreas Färber + +Pass any Error out into dump_init() and have it actually stop on errors. +Whether it is unsupported on a certain CPU can be checked by looking for +a NULL CPUClass::get_memory_mapping field. + +Reviewed-by: Luiz Capitulino +[AF: Reverted changes to CPU loops] +Signed-off-by: Andreas Färber +(cherry picked from commit 11ed09cf0753c1288a97f00138fc4534135442bb) +Signed-off-by: Laszlo Ersek + +diff --git a/dump.c b/dump.c +index 87ca12c..44a1339 100644 +--- a/dump.c ++++ b/dump.c +@@ -707,6 +707,7 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + { + CPUArchState *env; + int nr_cpus; ++ Error *err = NULL; + int ret; + + if (runstate_is_running()) { +@@ -757,7 +758,11 @@ static int dump_init(DumpState *s, int fd, bool paging, bool has_filter, + /* get memory mapping */ + memory_mapping_list_init(&s->list); + if (paging) { +- qemu_get_guest_memory_mapping(&s->list); ++ qemu_get_guest_memory_mapping(&s->list, &err); ++ if (err != NULL) { ++ error_propagate(errp, err); ++ goto cleanup; ++ } + } else { + qemu_get_guest_simple_memory_mapping(&s->list); + } +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index c47e6ee..6dfb68d 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -45,13 +45,7 @@ void memory_mapping_list_free(MemoryMappingList *list); + + void memory_mapping_list_init(MemoryMappingList *list); + +-/* +- * Return value: +- * 0: success +- * -1: failed +- * -2: unsupported +- */ +-int qemu_get_guest_memory_mapping(MemoryMappingList *list); ++void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp); + + /* get guest's memory mapping without do paging(virtual address is 0). */ + void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list); +diff --git a/memory_mapping.c b/memory_mapping.c +index 9bd24ce..5634f81 100644 +--- a/memory_mapping.c ++++ b/memory_mapping.c +@@ -178,7 +178,7 @@ static CPUArchState *find_paging_enabled_cpu(CPUArchState *start_cpu) + return NULL; + } + +-int qemu_get_guest_memory_mapping(MemoryMappingList *list) ++void qemu_get_guest_memory_mapping(MemoryMappingList *list, Error **errp) + { + CPUArchState *env, *first_paging_enabled_cpu; + RAMBlock *block; +@@ -190,11 +190,11 @@ int qemu_get_guest_memory_mapping(MemoryMappingList *list) + Error *err = NULL; + cpu_get_memory_mapping(ENV_GET_CPU(env), list, &err); + if (err) { +- error_free(err); +- return -1; ++ error_propagate(errp, err); ++ return; + } + } +- return 0; ++ return; + } + + /* +@@ -206,8 +206,6 @@ int qemu_get_guest_memory_mapping(MemoryMappingList *list) + length = block->length; + create_new_memory_mapping(list, offset, offset, length); + } +- +- return 0; + } + + void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list) diff --git a/SOURCES/kvm-memory_mapping-Move-MemoryMappingList-typedef-to-qemu-typedefs-h.patch b/SOURCES/kvm-memory_mapping-Move-MemoryMappingList-typedef-to-qemu-typedefs-h.patch new file mode 100644 index 0000000..8856b7e --- /dev/null +++ b/SOURCES/kvm-memory_mapping-Move-MemoryMappingList-typedef-to-qemu-typedefs-h.patch @@ -0,0 +1,62 @@ +From 7c11083dcfe6e621276d306d18ef09b789ecb119 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 12 Aug 2013 15:59:33 +0200 +Subject: memory_mapping: Move MemoryMappingList typedef to qemu/typedefs.h + +RH-Author: Laszlo Ersek +Message-id: <1376323180-12863-4-git-send-email-lersek@redhat.com> +Patchwork-id: 53162 +O-Subject: [RHEL-7 qemu-kvm PATCH 03/10] memory_mapping: Move MemoryMappingList typedef to qemu/typedefs.h +Bugzilla: 981582 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Radim Krcmar +RH-Acked-by: Miroslav Rezanina + +From: Andreas Färber + +This will avoid issues with hwaddr and ram_addr_t when including +sysemu/memory_mapping.h for CONFIG_USER_ONLY, e.g., from qom/cpu.h. + +Signed-off-by: Andreas Färber +(cherry picked from commit 6d4d3ae77dbb756d454c2deb2ef844b0cc7bde7b) +Signed-off-by: Laszlo Ersek + +diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h +index 93aae81..1218a61 100644 +--- a/include/qemu/typedefs.h ++++ b/include/qemu/typedefs.h +@@ -22,6 +22,8 @@ typedef struct AddressSpace AddressSpace; + typedef struct MemoryRegion MemoryRegion; + typedef struct MemoryRegionSection MemoryRegionSection; + ++typedef struct MemoryMappingList MemoryMappingList; ++ + typedef struct NICInfo NICInfo; + typedef struct HCIInfo HCIInfo; + typedef struct AudioState AudioState; +diff --git a/include/sysemu/memory_mapping.h b/include/sysemu/memory_mapping.h +index 6f01524..1f71c32 100644 +--- a/include/sysemu/memory_mapping.h ++++ b/include/sysemu/memory_mapping.h +@@ -15,6 +15,7 @@ + #define MEMORY_MAPPING_H + + #include "qemu/queue.h" ++#include "qemu/typedefs.h" + + /* The physical and virtual address in the memory mapping are contiguous. */ + typedef struct MemoryMapping { +@@ -24,11 +25,11 @@ typedef struct MemoryMapping { + QTAILQ_ENTRY(MemoryMapping) next; + } MemoryMapping; + +-typedef struct MemoryMappingList { ++struct MemoryMappingList { + unsigned int num; + MemoryMapping *last_mapping; + QTAILQ_HEAD(, MemoryMapping) head; +-} MemoryMappingList; ++}; + + int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env); + diff --git a/SOURCES/kvm-mempath-prefault-fix-off-by-one-error.patch b/SOURCES/kvm-mempath-prefault-fix-off-by-one-error.patch new file mode 100644 index 0000000..e1d64b3 --- /dev/null +++ b/SOURCES/kvm-mempath-prefault-fix-off-by-one-error.patch @@ -0,0 +1,43 @@ +From 3dfe8a98ffab1c5194818f623f4bcf80d49f3a07 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Mon, 24 Feb 2014 14:59:16 +0100 +Subject: [PATCH 1/7] mempath prefault: fix off-by-one error + +RH-Author: Marcelo Tosatti +Message-id: <20140224145916.GA9047@amt.cnet> +Patchwork-id: 57767 +O-Subject: [RHEL7 qemu-kvm PATCH] mempath prefault: fix off-by-one error +Bugzilla: 1069039 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Radim Krcmar +RH-Acked-by: Andrea Arcangeli + +commit 2ba82852894c762299b7d05e9a2be184116b80f0 of uq/master branch +of qemu-kvm.git + +Fix off-by-one error (noticed by Andrea Arcangeli). + +Reviewed-by: Paolo Bonzini +Signed-off-by: Marcelo Tosatti +BZ: 1069039 +Signed-off-by: Miroslav Rezanina +--- + exec.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/exec.c b/exec.c +index 6fe2fe7..b7d9e1a 100644 +--- a/exec.c ++++ b/exec.c +@@ -980,7 +980,7 @@ static void *file_ram_alloc(RAMBlock *block, + } + + /* MAP_POPULATE silently ignores failures */ +- for (i = 0; i < (memory/hpagesize)-1; i++) { ++ for (i = 0; i < (memory/hpagesize); i++) { + memset(area + (hpagesize*i), 0, 1); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-mempath-prefault-pages-manually-v4.patch b/SOURCES/kvm-mempath-prefault-pages-manually-v4.patch new file mode 100644 index 0000000..d7f980c --- /dev/null +++ b/SOURCES/kvm-mempath-prefault-pages-manually-v4.patch @@ -0,0 +1,170 @@ +From 0de3b24dc9428a37330f9065bc3626a3a07a9200 Mon Sep 17 00:00:00 2001 +Message-Id: <0de3b24dc9428a37330f9065bc3626a3a07a9200.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Marcelo Tosatti +Date: Thu, 12 Dec 2013 01:36:44 +0100 +Subject: [PATCH 46/46] mempath: prefault pages manually (v4) + +RH-Author: Marcelo Tosatti +Message-id: <20131212013644.GA8646@amt.cnet> +Patchwork-id: 56243 +O-Subject: [RHEL7 qemu-kvm PATCH] mempath: prefault pages manually (v4) +Bugzilla: 1026554 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Andrew Jones + +commit ef36fa1492e9105f3fa607b56edc63df513d7da1 upstream + +v4: s/fail/failed/ (Peter Maydell) + +Signed-off-by: Paolo Bonzini +Signed-off-by: Marcelo Tosatti +BZ: 1026554 +Signed-off-by: Michal Novotny +--- + exec.c | 59 +++++++++++++++++++++++++++++++++++++++++++++------------ + qemu-options.hx | 2 -- + vl.c | 4 ---- + 3 files changed, 47 insertions(+), 18 deletions(-) + +diff --git a/exec.c b/exec.c +index 64af205..571cea4 100644 +--- a/exec.c ++++ b/exec.c +@@ -865,6 +865,13 @@ static long gethugepagesize(const char *path) + return fs.f_bsize; + } + ++static sigjmp_buf sigjump; ++ ++static void sigbus_handler(int signal) ++{ ++ siglongjmp(sigjump, 1); ++} ++ + static void *file_ram_alloc(RAMBlock *block, + ram_addr_t memory, + const char *path) +@@ -874,9 +881,6 @@ static void *file_ram_alloc(RAMBlock *block, + char *c; + void *area; + int fd; +-#ifdef MAP_POPULATE +- int flags; +-#endif + unsigned long hpagesize; + + hpagesize = gethugepagesize(path); +@@ -924,21 +928,52 @@ static void *file_ram_alloc(RAMBlock *block, + if (ftruncate(fd, memory)) + perror("ftruncate"); + +-#ifdef MAP_POPULATE +- /* NB: MAP_POPULATE won't exhaustively alloc all phys pages in the case +- * MAP_PRIVATE is requested. For mem_prealloc we mmap as MAP_SHARED +- * to sidestep this quirk. +- */ +- flags = mem_prealloc ? MAP_POPULATE | MAP_SHARED : MAP_PRIVATE; +- area = mmap(0, memory, PROT_READ | PROT_WRITE, flags, fd, 0); +-#else + area = mmap(0, memory, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); +-#endif + if (area == MAP_FAILED) { + perror("file_ram_alloc: can't mmap RAM pages"); + close(fd); + return (NULL); + } ++ ++ if (mem_prealloc) { ++ int ret, i; ++ struct sigaction act, oldact; ++ sigset_t set, oldset; ++ ++ memset(&act, 0, sizeof(act)); ++ act.sa_handler = &sigbus_handler; ++ act.sa_flags = 0; ++ ++ ret = sigaction(SIGBUS, &act, &oldact); ++ if (ret) { ++ perror("file_ram_alloc: failed to install signal handler"); ++ exit(1); ++ } ++ ++ /* unblock SIGBUS */ ++ sigemptyset(&set); ++ sigaddset(&set, SIGBUS); ++ pthread_sigmask(SIG_UNBLOCK, &set, &oldset); ++ ++ if (sigsetjmp(sigjump, 1)) { ++ fprintf(stderr, "file_ram_alloc: failed to preallocate pages\n"); ++ exit(1); ++ } ++ ++ /* MAP_POPULATE silently ignores failures */ ++ for (i = 0; i < (memory/hpagesize)-1; i++) { ++ memset(area + (hpagesize*i), 0, 1); ++ } ++ ++ ret = sigaction(SIGBUS, &oldact, NULL); ++ if (ret) { ++ perror("file_ram_alloc: failed to reinstall signal handler"); ++ exit(1); ++ } ++ ++ pthread_sigmask(SIG_SETMASK, &oldset, NULL); ++ } ++ + block->fd = fd; + return area; + } +diff --git a/qemu-options.hx b/qemu-options.hx +index e3c5d67..d9320b5 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -228,7 +228,6 @@ STEXI + Allocate guest RAM from a temporarily created file in @var{path}. + ETEXI + +-#ifdef MAP_POPULATE + DEF("mem-prealloc", 0, QEMU_OPTION_mem_prealloc, + "-mem-prealloc preallocate guest memory (use with -mem-path)\n", + QEMU_ARCH_ALL) +@@ -237,7 +236,6 @@ STEXI + @findex -mem-prealloc + Preallocate memory when using -mem-path. + ETEXI +-#endif + + DEF("k", HAS_ARG, QEMU_OPTION_k, + "-k language use keyboard layout (for example 'fr' for French)\n", +diff --git a/vl.c b/vl.c +index 0cbbdf0..da12b90 100644 +--- a/vl.c ++++ b/vl.c +@@ -188,9 +188,7 @@ static int display_remote; + const char* keyboard_layout = NULL; + ram_addr_t ram_size; + const char *mem_path = NULL; +-#ifdef MAP_POPULATE + int mem_prealloc = 0; /* force preallocation of physical target memory */ +-#endif + int nb_nics; + NICInfo nd_table[MAX_NICS]; + int autostart; +@@ -3174,11 +3172,9 @@ int main(int argc, char **argv, char **envp) + case QEMU_OPTION_mempath: + mem_path = optarg; + break; +-#ifdef MAP_POPULATE + case QEMU_OPTION_mem_prealloc: + mem_prealloc = 1; + break; +-#endif + case QEMU_OPTION_d: + log_mask = optarg; + break; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-microblaze-Fix-latent-bug-with-default-DTB-lookup.patch b/SOURCES/kvm-microblaze-Fix-latent-bug-with-default-DTB-lookup.patch new file mode 100644 index 0000000..ffa8f08 --- /dev/null +++ b/SOURCES/kvm-microblaze-Fix-latent-bug-with-default-DTB-lookup.patch @@ -0,0 +1,82 @@ +From 216010b25271a2814abef68971d672632ddbd122 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 6 Aug 2013 13:17:04 +0200 +Subject: [PATCH 11/28] microblaze: Fix latent bug with default DTB lookup + +RH-Author: Markus Armbruster +Message-id: <1375795025-28674-6-git-send-email-armbru@redhat.com> +Patchwork-id: 52994 +O-Subject: [PATCH 7.0 qemu-kvm 5/6] microblaze: Fix latent bug with default DTB lookup +Bugzilla: 980782 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny +RH-Acked-by: Orit Wasserman + +microblaze_load_kernel() fails to call +qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename) when no -machine +options are given. This can't normally happen, because -machine +option kernel is mandatory for this target. Fix it anyway, by using +qemu_get_machine_opts(). + +Cc: Peter Crosthwaite +Signed-off-by: Markus Armbruster +Message-id: 1372943363-24081-6-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 7bccd9402691e712305bc3b5cc6cf2fa1cc27631) +--- + hw/microblaze/boot.c | 27 +++++++++++++-------------- + 1 file changed, 13 insertions(+), 14 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/microblaze/boot.c | 27 +++++++++++++-------------- + 1 files changed, 13 insertions(+), 14 deletions(-) + +diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c +index e543d88..f03934b 100644 +--- a/hw/microblaze/boot.c ++++ b/hw/microblaze/boot.c +@@ -28,6 +28,7 @@ + #include "qemu/config-file.h" + #include "qemu-common.h" + #include "sysemu/device_tree.h" ++#include "sysemu/sysemu.h" + #include "hw/loader.h" + #include "elf.h" + +@@ -105,20 +106,18 @@ void microblaze_load_kernel(MicroBlazeCPU *cpu, hwaddr ddr_base, + void (*machine_cpu_reset)(MicroBlazeCPU *)) + { + QemuOpts *machine_opts; +- const char *kernel_filename = NULL; +- const char *kernel_cmdline = NULL; +- +- machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0); +- if (machine_opts) { +- const char *dtb_arg; +- kernel_filename = qemu_opt_get(machine_opts, "kernel"); +- kernel_cmdline = qemu_opt_get(machine_opts, "append"); +- dtb_arg = qemu_opt_get(machine_opts, "dtb"); +- if (dtb_arg) { /* Preference a -dtb argument */ +- dtb_filename = dtb_arg; +- } else { /* default to pcbios dtb as passed by machine_init */ +- dtb_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename); +- } ++ const char *kernel_filename; ++ const char *kernel_cmdline; ++ const char *dtb_arg; ++ ++ machine_opts = qemu_get_machine_opts(); ++ kernel_filename = qemu_opt_get(machine_opts, "kernel"); ++ kernel_cmdline = qemu_opt_get(machine_opts, "append"); ++ dtb_arg = qemu_opt_get(machine_opts, "dtb"); ++ if (dtb_arg) { /* Preference a -dtb argument */ ++ dtb_filename = dtb_arg; ++ } else { /* default to pcbios dtb as passed by machine_init */ ++ dtb_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename); + } + + boot_info.machine_cpu_reset = machine_cpu_reset; +-- +1.7.1 + diff --git a/SOURCES/kvm-migrate-vPMU-state.patch b/SOURCES/kvm-migrate-vPMU-state.patch new file mode 100644 index 0000000..c78d1cf --- /dev/null +++ b/SOURCES/kvm-migrate-vPMU-state.patch @@ -0,0 +1,309 @@ +From 7bb09ff3360af16599cc2cae834f676a20cdfa88 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 6 Nov 2013 08:27:29 +0100 +Subject: [PATCH 02/29] kvm: migrate vPMU state + +RH-Author: Paolo Bonzini +Message-id: <1379955972-3080-3-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54487 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 2/2] kvm: migrate vPMU state +Bugzilla: 928867 +RH-Acked-by: Juan Quintela +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Bandan Das + +Reviewed-by: Gleb Natapov +Signed-off-by: Paolo Bonzini +(cherry-picked from commit 0d89436786b02a9e7d561c4d7dc4982e4a2739db) + +Conflicts: + target-i386/machine.c + [missing 0779cae, Initialize IA32_FEATURE_CONTROL MSR in reset and migration, 2013-07-07] + +Signed-of-by: Miroslav Rezanina +--- + target-i386/cpu.h | 23 ++++++++++++ + target-i386/kvm.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++--- + target-i386/machine.c | 44 +++++++++++++++++++++++ + 3 files changed, 155 insertions(+), 5 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 74c7899..6aebc80 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -304,6 +304,8 @@ + #define MSR_TSC_ADJUST 0x0000003b + #define MSR_IA32_TSCDEADLINE 0x6e0 + ++#define MSR_P6_PERFCTR0 0xc1 ++ + #define MSR_MTRRcap 0xfe + #define MSR_MTRRcap_VCNT 8 + #define MSR_MTRRcap_FIXRANGE_SUPPORT (1 << 8) +@@ -317,6 +319,8 @@ + #define MSR_MCG_STATUS 0x17a + #define MSR_MCG_CTL 0x17b + ++#define MSR_P6_EVNTSEL0 0x186 ++ + #define MSR_IA32_PERF_STATUS 0x198 + + #define MSR_IA32_MISC_ENABLE 0x1a0 +@@ -342,6 +346,14 @@ + + #define MSR_MTRRdefType 0x2ff + ++#define MSR_CORE_PERF_FIXED_CTR0 0x309 ++#define MSR_CORE_PERF_FIXED_CTR1 0x30a ++#define MSR_CORE_PERF_FIXED_CTR2 0x30b ++#define MSR_CORE_PERF_FIXED_CTR_CTRL 0x38d ++#define MSR_CORE_PERF_GLOBAL_STATUS 0x38e ++#define MSR_CORE_PERF_GLOBAL_CTRL 0x38f ++#define MSR_CORE_PERF_GLOBAL_OVF_CTRL 0x390 ++ + #define MSR_MC0_CTL 0x400 + #define MSR_MC0_STATUS 0x401 + #define MSR_MC0_ADDR 0x402 +@@ -720,6 +732,9 @@ typedef struct { + #define CPU_NB_REGS CPU_NB_REGS32 + #endif + ++#define MAX_FIXED_COUNTERS 3 ++#define MAX_GP_COUNTERS (MSR_IA32_PERF_STATUS - MSR_P6_EVNTSEL0) ++ + #define NB_MMU_MODES 3 + + typedef enum TPRAccess { +@@ -814,6 +829,14 @@ typedef struct CPUX86State { + uint64_t mcg_status; + uint64_t msr_ia32_misc_enable; + ++ uint64_t msr_fixed_ctr_ctrl; ++ uint64_t msr_global_ctrl; ++ uint64_t msr_global_status; ++ uint64_t msr_global_ovf_ctrl; ++ uint64_t msr_fixed_counters[MAX_FIXED_COUNTERS]; ++ uint64_t msr_gp_counters[MAX_GP_COUNTERS]; ++ uint64_t msr_gp_evtsel[MAX_GP_COUNTERS]; ++ + /* exception/interrupt handling */ + int error_code; + int exception_is_int; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index c5a9416..4b470e4 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -71,6 +71,9 @@ static bool has_msr_misc_enable; + static bool has_msr_kvm_steal_time; + static int lm_capable_kernel; + ++static bool has_msr_architectural_pmu; ++static uint32_t num_architectural_pmu_counters; ++ + bool kvm_allows_irq0_override(void) + { + return !kvm_irqchip_in_kernel() || kvm_has_gsi_routing(); +@@ -579,6 +582,25 @@ int kvm_arch_init_vcpu(CPUState *cs) + break; + } + } ++ ++ if (limit >= 0x0a) { ++ uint32_t ver; ++ ++ cpu_x86_cpuid(env, 0x0a, 0, &ver, &unused, &unused, &unused); ++ if ((ver & 0xff) > 0) { ++ has_msr_architectural_pmu = true; ++ num_architectural_pmu_counters = (ver & 0xff00) >> 8; ++ ++ /* Shouldn't be more than 32, since that's the number of bits ++ * available in EBX to tell us _which_ counters are available. ++ * Play it safe. ++ */ ++ if (num_architectural_pmu_counters > MAX_GP_COUNTERS) { ++ num_architectural_pmu_counters = MAX_GP_COUNTERS; ++ } ++ } ++ } ++ + cpu_x86_cpuid(env, 0x80000000, 0, &limit, &unused, &unused, &unused); + + for (i = 0x80000000; i <= limit; i++) { +@@ -1070,7 +1092,7 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + struct kvm_msr_entry entries[100]; + } msr_data; + struct kvm_msr_entry *msrs = msr_data.entries; +- int n = 0; ++ int n = 0, i; + + kvm_msr_entry_set(&msrs[n++], MSR_IA32_SYSENTER_CS, env->sysenter_cs); + kvm_msr_entry_set(&msrs[n++], MSR_IA32_SYSENTER_ESP, env->sysenter_esp); +@@ -1109,9 +1131,8 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + } + } + /* +- * The following paravirtual MSRs have side effects on the guest or are +- * too heavy for normal writeback. Limit them to reset or full state +- * updates. ++ * The following MSRs have side effects on the guest or are too heavy ++ * for normal writeback. Limit them to reset or full state updates. + */ + if (level >= KVM_PUT_RESET_STATE) { + kvm_msr_entry_set(&msrs[n++], MSR_KVM_SYSTEM_TIME, +@@ -1129,6 +1150,33 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], MSR_KVM_STEAL_TIME, + env->steal_time_msr); + } ++ if (has_msr_architectural_pmu) { ++ /* Stop the counter. */ ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_FIXED_CTR_CTRL, 0); ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_GLOBAL_CTRL, 0); ++ ++ /* Set the counter values. */ ++ for (i = 0; i < MAX_FIXED_COUNTERS; i++) { ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_FIXED_CTR0 + i, ++ env->msr_fixed_counters[i]); ++ } ++ for (i = 0; i < num_architectural_pmu_counters; i++) { ++ kvm_msr_entry_set(&msrs[n++], MSR_P6_PERFCTR0 + i, ++ env->msr_gp_counters[i]); ++ kvm_msr_entry_set(&msrs[n++], MSR_P6_EVNTSEL0 + i, ++ env->msr_gp_evtsel[i]); ++ } ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_GLOBAL_STATUS, ++ env->msr_global_status); ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_GLOBAL_OVF_CTRL, ++ env->msr_global_ovf_ctrl); ++ ++ /* Now start the PMU. */ ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_FIXED_CTR_CTRL, ++ env->msr_fixed_ctr_ctrl); ++ kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_GLOBAL_CTRL, ++ env->msr_global_ctrl); ++ } + if (hyperv_hypercall_available()) { + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_GUEST_OS_ID, 0); + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_HYPERCALL, 0); +@@ -1385,6 +1433,19 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_kvm_steal_time) { + msrs[n++].index = MSR_KVM_STEAL_TIME; + } ++ if (has_msr_architectural_pmu) { ++ msrs[n++].index = MSR_CORE_PERF_FIXED_CTR_CTRL; ++ msrs[n++].index = MSR_CORE_PERF_GLOBAL_CTRL; ++ msrs[n++].index = MSR_CORE_PERF_GLOBAL_STATUS; ++ msrs[n++].index = MSR_CORE_PERF_GLOBAL_OVF_CTRL; ++ for (i = 0; i < MAX_FIXED_COUNTERS; i++) { ++ msrs[n++].index = MSR_CORE_PERF_FIXED_CTR0 + i; ++ } ++ for (i = 0; i < num_architectural_pmu_counters; i++) { ++ msrs[n++].index = MSR_P6_PERFCTR0 + i; ++ msrs[n++].index = MSR_P6_EVNTSEL0 + i; ++ } ++ } + + if (env->mcg_cap) { + msrs[n++].index = MSR_MCG_STATUS; +@@ -1401,7 +1462,8 @@ static int kvm_get_msrs(X86CPU *cpu) + } + + for (i = 0; i < ret; i++) { +- switch (msrs[i].index) { ++ uint32_t index = msrs[i].index; ++ switch (index) { + case MSR_IA32_SYSENTER_CS: + env->sysenter_cs = msrs[i].data; + break; +@@ -1473,6 +1535,27 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_KVM_STEAL_TIME: + env->steal_time_msr = msrs[i].data; + break; ++ case MSR_CORE_PERF_FIXED_CTR_CTRL: ++ env->msr_fixed_ctr_ctrl = msrs[i].data; ++ break; ++ case MSR_CORE_PERF_GLOBAL_CTRL: ++ env->msr_global_ctrl = msrs[i].data; ++ break; ++ case MSR_CORE_PERF_GLOBAL_STATUS: ++ env->msr_global_status = msrs[i].data; ++ break; ++ case MSR_CORE_PERF_GLOBAL_OVF_CTRL: ++ env->msr_global_ovf_ctrl = msrs[i].data; ++ break; ++ case MSR_CORE_PERF_FIXED_CTR0 ... MSR_CORE_PERF_FIXED_CTR0 + MAX_FIXED_COUNTERS - 1: ++ env->msr_fixed_counters[index - MSR_CORE_PERF_FIXED_CTR0] = msrs[i].data; ++ break; ++ case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR0 + MAX_GP_COUNTERS - 1: ++ env->msr_gp_counters[index - MSR_P6_PERFCTR0] = msrs[i].data; ++ break; ++ case MSR_P6_EVNTSEL0 ... MSR_P6_EVNTSEL0 + MAX_GP_COUNTERS - 1: ++ env->msr_gp_evtsel[index - MSR_P6_EVNTSEL0] = msrs[i].data; ++ break; + } + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 4f30347..08b4ed3 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -465,6 +465,47 @@ static const VMStateDescription vmstate_xsave ={ + } + }; + ++static bool pmu_enable_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ int i; ++ ++ if (env->msr_fixed_ctr_ctrl || env->msr_global_ctrl || ++ env->msr_global_status || env->msr_global_ovf_ctrl) { ++ return true; ++ } ++ for (i = 0; i < MAX_FIXED_COUNTERS; i++) { ++ if (env->msr_fixed_counters[i]) { ++ return true; ++ } ++ } ++ for (i = 0; i < MAX_GP_COUNTERS; i++) { ++ if (env->msr_gp_counters[i] || env->msr_gp_evtsel[i]) { ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++static const VMStateDescription vmstate_msr_architectural_pmu = { ++ .name = "cpu/msr_architectural_pmu", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField []) { ++ VMSTATE_UINT64(env.msr_fixed_ctr_ctrl, X86CPU), ++ VMSTATE_UINT64(env.msr_global_ctrl, X86CPU), ++ VMSTATE_UINT64(env.msr_global_status, X86CPU), ++ VMSTATE_UINT64(env.msr_global_ovf_ctrl, X86CPU), ++ VMSTATE_UINT64_ARRAY(env.msr_fixed_counters, X86CPU, MAX_FIXED_COUNTERS), ++ VMSTATE_UINT64_ARRAY(env.msr_gp_counters, X86CPU, MAX_GP_COUNTERS), ++ VMSTATE_UINT64_ARRAY(env.msr_gp_evtsel, X86CPU, MAX_GP_COUNTERS), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -594,6 +635,9 @@ const VMStateDescription vmstate_x86_cpu = { + .vmsd = &vmstate_xsave, + .needed = vmstate_xsave_needed, + }, { ++ .vmsd = &vmstate_msr_architectural_pmu, ++ .needed = pmu_enable_needed, ++ }, { + /* empty */ + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-Fail-migration-on-bdrv_flush_all-error.patch b/SOURCES/kvm-migration-Fail-migration-on-bdrv_flush_all-error.patch new file mode 100644 index 0000000..4c5dbe9 --- /dev/null +++ b/SOURCES/kvm-migration-Fail-migration-on-bdrv_flush_all-error.patch @@ -0,0 +1,92 @@ +From 0262e36cb9326586a82985b1c26ee8cf9c6e0578 Mon Sep 17 00:00:00 2001 +Message-Id: <0262e36cb9326586a82985b1c26ee8cf9c6e0578.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:39 +0100 +Subject: [PATCH 03/46] migration: Fail migration on bdrv_flush_all() error + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-4-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55687 +O-Subject: [RHEL7.0 PATCH 03/42] migration: Fail migration on bdrv_flush_all() error +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 0e1146a7a011a69d8cbc958b4f7ebad186730fc3 +Author: Kevin Wolf +Date: Fri Jul 5 13:54:55 2013 +0200 + + migration: Fail migration on bdrv_flush_all() error + + If bdrv_flush_all() returns an error, there is an inconsistency in the + view of an image file between the source and the destination host. + Completing the migration would lead to corruption. Better abort + migration in this case. + + To reproduce this case, try the following (ensures that there is + something to flush, and then fails that flush): + + $ qemu-img create -f qcow2 test.qcow2 1G + $ cat blkdebug.cfg + [inject-error] + event = "flush_to_os" + errno = "5" + $ qemu-system-x86_64 -hda blkdebug:blkdebug.cfg:test.qcow2 -monitor stdio + (qemu) qemu-io ide0-hd0 "write 0 4k" + (qemu) migrate ... + + Signed-off-by: Kevin Wolf + Reviewed-by: Stefan Hajnoczi +--- + migration.c | 17 ++++++++++++++--- + 1 files changed, 14 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +diff --git a/migration.c b/migration.c +index d91e702..3520776 100644 +--- a/migration.c ++++ b/migration.c +@@ -542,15 +542,26 @@ static void *migration_thread(void *opaque) + if (pending_size && pending_size >= max_size) { + qemu_savevm_state_iterate(s->file); + } else { ++ int ret; ++ + DPRINTF("done iterating\n"); + qemu_mutex_lock_iothread(); + start_time = qemu_get_clock_ms(rt_clock); + qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); + old_vm_running = runstate_is_running(); +- vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); +- qemu_file_set_rate_limit(s->file, INT_MAX); +- qemu_savevm_state_complete(s->file); ++ ++ ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); ++ if (ret >= 0) { ++ qemu_file_set_rate_limit(s->file, INT_MAX); ++ qemu_savevm_state_complete(s->file); ++ } + qemu_mutex_unlock_iothread(); ++ ++ if (ret < 0) { ++ migrate_finish_set_state(s, MIG_STATE_ERROR); ++ break; ++ } ++ + if (!qemu_file_get_error(s->file)) { + migrate_finish_set_state(s, MIG_STATE_COMPLETED); + break; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-migration-Fix-debug-print-type.patch b/SOURCES/kvm-migration-Fix-debug-print-type.patch new file mode 100644 index 0000000..5c1bcad --- /dev/null +++ b/SOURCES/kvm-migration-Fix-debug-print-type.patch @@ -0,0 +1,58 @@ +From 69e9d2cbd41bf6884d2259675cd58b891c6df2de Mon Sep 17 00:00:00 2001 +Message-Id: <69e9d2cbd41bf6884d2259675cd58b891c6df2de.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:14 +0100 +Subject: [PATCH 38/46] migration: Fix debug print type + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-39-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55724 +O-Subject: [RHEL7.0 PATCH 38/42] migration: Fix debug print type +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 5016e2df569bc7d67637060103dd360ed2f0d557 +Author: Christoffer Dall +Date: Fri Aug 23 10:34:16 2013 -0700 + + migration: Fix debug print type + + The printf args are uint64_t and with -Werr QEMU doesn't compile with + migration debugging turned on unless this is fixed. Fix it. + + Signed-off-by: Christoffer Dall + Signed-off-by: Juan Quintela +--- + migration.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/migration.c b/migration.c +index 4f070a3..c0202b4 100644 +--- a/migration.c ++++ b/migration.c +@@ -574,7 +574,8 @@ static void *migration_thread(void *opaque) + if (!qemu_file_rate_limit(s->file)) { + DPRINTF("iterate\n"); + pending_size = qemu_savevm_state_pending(s->file, max_size); +- DPRINTF("pending size %lu max %lu\n", pending_size, max_size); ++ DPRINTF("pending size %" PRIu64 " max %" PRIu64 "\n", ++ pending_size, max_size); + if (pending_size && pending_size >= max_size) { + qemu_savevm_state_iterate(s->file); + } else { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-migration-Fix-rate-limit.patch b/SOURCES/kvm-migration-Fix-rate-limit.patch new file mode 100644 index 0000000..3c5d374 --- /dev/null +++ b/SOURCES/kvm-migration-Fix-rate-limit.patch @@ -0,0 +1,50 @@ +From 43f7374cfc7133025aa4c94f51d6733ee89b713d Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Tue, 14 Jan 2014 15:27:12 -0500 +Subject: [PATCH 03/14] migration: Fix rate limit + +Message-id: <1389713232-30999-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 56698 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] migration: Fix rate limit +Bugzilla: 1003467 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +From: Matthew Garrett + +The migration thread appears to want to allow writeout to occur at full +speed rather than being rate limited during completion of state saving, +but sets the limit to INT_MAX when xfer_limit is INT64_MAX. This causes +problems if there's more than 2GB of state left to save at this point. It +probably ought to just be INT64_MAX instead. + +Signed-off-by: Matthew Garrett +Reviewed-by: Paolo Bonzini +Signed-off-by: Juan Quintela +(cherry picked from commit 40596834c0d57a223124a956ccbe39dfeadc9f0e) +--- + migration.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/migration.c b/migration.c +index 13fc59b..ef9a61f 100644 +--- a/migration.c ++++ b/migration.c +@@ -589,7 +589,7 @@ static void *migration_thread(void *opaque) + + ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); + if (ret >= 0) { +- qemu_file_set_rate_limit(s->file, INT_MAX); ++ qemu_file_set_rate_limit(s->file, INT64_MAX); + qemu_savevm_state_complete(s->file); + } + qemu_mutex_unlock_iothread(); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-migration-add-autoconvergence-documentation.patch b/SOURCES/kvm-migration-add-autoconvergence-documentation.patch new file mode 100644 index 0000000..78e8eb7 --- /dev/null +++ b/SOURCES/kvm-migration-add-autoconvergence-documentation.patch @@ -0,0 +1,47 @@ +From 8fae371c482877d1f46bd19c5ae97d63dc707148 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:12 +0200 +Subject: [PATCH 17/25] migration: add autoconvergence documentation + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-8-git-send-email-owasserm@redhat.com> +Patchwork-id: 54803 +O-Subject: [RHEL7.0 qemu-kvm v2 07/10] migration: add autoconvergence documentation +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: Juan Quintela + +This hunk got lost during merge. It is documentation. + +Spotted-by: Peter Lieven +Signed-off-by: Juan Quintela +(cherry picked from commit 9781c3716a4b529a2af64502926a57c11e69e6ca) +--- + qapi-schema.json | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index a717fbf..ffe0ed1 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -611,6 +611,9 @@ + # to enable the capability on the source VM. The feature is disabled by + # default. (since 1.6) + # ++# @auto-converge: If enabled, QEMU will automatically throttle down the guest ++# to speed up convergence of RAM migration. (since 1.6) ++# + # Since: 1.2 + ## + { 'enum': 'MigrationCapability', +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-disable-live-block-migration-b-i-for-rhel-.patch b/SOURCES/kvm-migration-disable-live-block-migration-b-i-for-rhel-.patch new file mode 100644 index 0000000..70f15c1 --- /dev/null +++ b/SOURCES/kvm-migration-disable-live-block-migration-b-i-for-rhel-.patch @@ -0,0 +1,104 @@ +From 291074de7615878e297df1e821f9a71ce5dd784a Mon Sep 17 00:00:00 2001 +From: Jeff Cody +Date: Thu, 7 Nov 2013 07:33:12 +0100 +Subject: [PATCH 59/81] migration: disable live block migration (-b/-i) for rhel and rhev + +RH-Author: Jeff Cody +Message-id: <696b8063664491b1d1799450b4498927c2ae9908.1383712781.git.jcody@redhat.com> +Patchwork-id: 55480 +O-Subject: [RHEL7 qemu-kvm PATCH 3/3] migration: disable live block migration (-b/-i) for rhel and rhev +Bugzilla: 1022392 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Eric Blake +RH-Acked-by: Kevin Wolf + +This disables live block migration (both -b and -i options) for both +the RHEL and RHEV versions of qemu-kvm. Rather than delete the options +from the QAPI/QMP commands (which would be unfriendly to libvirt), the +options return a QMP error of unsupported ("this feature or command is +not currently supported"). + +A configure option to enable/disable this is set, which defaults to the +command options being disabled. Just to be safe, the rpm spec template +explicitly disables it as well. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + configure | 12 ++++++++++++ + migration.c | 7 +++++++ + redhat/qemu-kvm.spec.template | 1 + + 3 files changed, 20 insertions(+), 0 deletions(-) + +diff --git a/configure b/configure +index 9260d3c..d658434 100755 +--- a/configure ++++ b/configure +@@ -241,6 +241,7 @@ gtkabi="2.0" + tpm="no" + libssh2="" + live_block_ops="yes" ++live_block_migration="no" + + # parse CC options first + for opt do +@@ -932,6 +933,10 @@ for opt do + ;; + --enable-live-block-ops) live_block_ops="yes" + ;; ++ --disable-live-block-migration) live_block_migration="no" ++ ;; ++ --enable-live-block-migration) live_block_migration="yes" ++ ;; + *) echo "ERROR: unknown option $opt"; show_help="yes" + ;; + esac +@@ -1202,6 +1207,8 @@ echo " --disable-libssh2 disable ssh block device support" + echo " --enable-libssh2 enable ssh block device support" + echo " --disable-live-block-ops disable live block operations support" + echo " --enable-live-block-ops enable live block operations support" ++echo " --disable-live-block-migration disable live block migration" ++echo " --enable-live-block-migration enable live block migration" + echo "" + echo "NOTE: The object files are built at the place where configure is launched" + exit 1 +@@ -3564,6 +3571,7 @@ echo "libssh2 support $libssh2" + echo "TPM passthrough $tpm_passthrough" + echo "QOM debugging $qom_cast_debug" + echo "Live block operations $live_block_ops" ++echo "Live block migration $live_block_migration" + + if test "$sdl_too_old" = "yes"; then + echo "-> Your SDL version is too old - please upgrade to have SDL support" +@@ -3952,6 +3960,10 @@ if test "$live_block_ops" = "yes" ; then + echo "CONFIG_LIVE_BLOCK_OPS=y" >> $config_host_mak + fi + ++if test "$live_block_migration" = "yes" ; then ++ echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak ++fi ++ + # USB host support + if test "$libusb" = "yes"; then + echo "HOST_USB=libusb legacy" >> $config_host_mak +diff --git a/migration.c b/migration.c +index 6b87272..46c633a 100644 +--- a/migration.c ++++ b/migration.c +@@ -388,6 +388,13 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + params.blk = has_blk && blk; + params.shared = has_inc && inc; + ++#ifndef CONFIG_LIVE_BLOCK_MIGRATION ++ if (params.blk || params.shared) { ++ error_set(errp, QERR_UNSUPPORTED); ++ return; ++ } ++#endif ++ + if (s->state == MIG_STATE_ACTIVE) { + error_set(errp, QERR_MIGRATION_ACTIVE); + return; +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-don-t-use-uninitialized-variables.patch b/SOURCES/kvm-migration-don-t-use-uninitialized-variables.patch new file mode 100644 index 0000000..3794fd3 --- /dev/null +++ b/SOURCES/kvm-migration-don-t-use-uninitialized-variables.patch @@ -0,0 +1,51 @@ +From 2fb2657213334c34748f1353767654208f76ef94 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:14 +0200 +Subject: [PATCH 19/25] migration: don't use uninitialized variables + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-10-git-send-email-owasserm@redhat.com> +Patchwork-id: 54805 +O-Subject: [RHEL7.0 qemu-kvm v2 09/10] migration: don't use uninitialized variables +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: Pawit Pornkitprasan + +The qmp_migrate method uses the 'blk' and 'inc' parameter without +checking if they're valid or not (they may be uninitialized if +command is received via QMP) + +Signed-off-by: Pawit Pornkitprasan +Reviewed-by: Eric Blake +Signed-off-by: Luiz Capitulino +(cherry picked from commit 8c0426aed1d2279845e6a2c3355da8b5d9926cb6) +--- + migration.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/migration.c b/migration.c +index d69ac97..6b87272 100644 +--- a/migration.c ++++ b/migration.c +@@ -385,8 +385,8 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + MigrationParams params; + const char *p; + +- params.blk = blk; +- params.shared = inc; ++ params.blk = has_blk && blk; ++ params.shared = has_inc && inc; + + if (s->state == MIG_STATE_ACTIVE) { + error_set(errp, QERR_MIGRATION_ACTIVE); +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-dump-vmstate-info-as-a-json-file-for-stati.patch b/SOURCES/kvm-migration-dump-vmstate-info-as-a-json-file-for-stati.patch new file mode 100644 index 0000000..9f7cc4f --- /dev/null +++ b/SOURCES/kvm-migration-dump-vmstate-info-as-a-json-file-for-stati.patch @@ -0,0 +1,278 @@ +From 2f243f0313211d416fa24a1db39b923216ce267f Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:08:58 -0500 +Subject: [CHANGE 02/29] migration: dump vmstate info as a json file for static + analysis +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <024e1bc4c9618850da0624d2d2bbe0bc106cee45.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59782 +O-Subject: [RHEL7.1 qemu-kvm PATCH 01/18] migration: dump vmstate info as a json file for static analysis +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +This commit adds a new command, '-dump-vmstate', that takes a filename +as an argument. When executed, QEMU will dump the vmstate information +for the machine type it's invoked with to the file, and quit. + +The JSON-format output can then be used to compare the vmstate info for +different QEMU versions, specifically to test whether live migration +would break due to changes in the vmstate data. + +A Python script that compares the output of such JSON dumps is included +in the following commit. + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit abfd9ce341ec66eb2e63756b9da43f77c054788e) +Signed-off-by: Amit Shah +Signed-off-by: jen + +Conflicts: + include/migration/vmstate.h + vl.c + +Signed-off-by: jen +--- + include/migration/vmstate.h | 2 + + qemu-options.hx | 14 +++++ + savevm.c | 135 ++++++++++++++++++++++++++++++++++++++++++++ + vl.c | 14 +++++ + 4 files changed, 165 insertions(+) + +diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h +index f2652e6..cae26d0 100644 +--- a/include/migration/vmstate.h ++++ b/include/migration/vmstate.h +@@ -747,4 +747,6 @@ void vmstate_register_ram(struct MemoryRegion *memory, DeviceState *dev); + void vmstate_unregister_ram(struct MemoryRegion *memory, DeviceState *dev); + void vmstate_register_ram_global(struct MemoryRegion *memory); + ++void dump_vmstate_json_to_file(FILE *out_fp); ++ + #endif +diff --git a/qemu-options.hx b/qemu-options.hx +index 1f2bb57..5d0f2cd 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -3098,6 +3098,20 @@ STEXI + prepend a timestamp to each log message.(default:on) + ETEXI + ++DEF("dump-vmstate", HAS_ARG, QEMU_OPTION_dump_vmstate, ++ "-dump-vmstate \n" ++ " Output vmstate information in JSON format to file.\n" ++ " Use the scripts/vmstate-static-checker.py file to\n" ++ " check for possible regressions in migration code\n" ++ " by comparing two such vmstate dumps.", ++ QEMU_ARCH_ALL) ++STEXI ++@item -dump-vmstate @var{file} ++@findex -dump-vmstate ++Dump json-encoded vmstate information for current machine type to file ++in @var{file} ++ETEXI ++ + HXCOMM This is the last statement. Insert new options before this line! + STEXI + @end table +diff --git a/savevm.c b/savevm.c +index 94512dd..963dc7d 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -24,6 +24,7 @@ + + #include "config-host.h" + #include "qemu-common.h" ++#include "hw/boards.h" + #include "hw/hw.h" + #include "hw/qdev.h" + #include "net/net.h" +@@ -1484,6 +1485,140 @@ static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers = + QTAILQ_HEAD_INITIALIZER(savevm_handlers); + static int global_section_id; + ++static void dump_vmstate_vmsd(FILE *out_file, ++ const VMStateDescription *vmsd, int indent, ++ bool is_subsection); ++ ++static void dump_vmstate_vmsf(FILE *out_file, const VMStateField *field, ++ int indent) ++{ ++ fprintf(out_file, "%*s{\n", indent, ""); ++ indent += 2; ++ fprintf(out_file, "%*s\"field\": \"%s\",\n", indent, "", field->name); ++ fprintf(out_file, "%*s\"version_id\": %d,\n", indent, "", ++ field->version_id); ++ fprintf(out_file, "%*s\"field_exists\": %s,\n", indent, "", ++ field->field_exists ? "true" : "false"); ++ fprintf(out_file, "%*s\"size\": %zu", indent, "", field->size); ++ if (field->vmsd != NULL) { ++ fprintf(out_file, ",\n"); ++ dump_vmstate_vmsd(out_file, field->vmsd, indent, false); ++ } ++ fprintf(out_file, "\n%*s}", indent - 2, ""); ++} ++ ++static void dump_vmstate_vmss(FILE *out_file, ++ const VMStateSubsection *subsection, ++ int indent) ++{ ++ if (subsection->vmsd != NULL) { ++ dump_vmstate_vmsd(out_file, subsection->vmsd, indent, true); ++ } ++} ++ ++static void dump_vmstate_vmsd(FILE *out_file, ++ const VMStateDescription *vmsd, int indent, ++ bool is_subsection) ++{ ++ if (is_subsection) { ++ fprintf(out_file, "%*s{\n", indent, ""); ++ } else { ++ fprintf(out_file, "%*s\"%s\": {\n", indent, "", "Description"); ++ } ++ indent += 2; ++ fprintf(out_file, "%*s\"name\": \"%s\",\n", indent, "", vmsd->name); ++ fprintf(out_file, "%*s\"version_id\": %d,\n", indent, "", ++ vmsd->version_id); ++ fprintf(out_file, "%*s\"minimum_version_id\": %d", indent, "", ++ vmsd->minimum_version_id); ++ if (vmsd->fields != NULL) { ++ const VMStateField *field = vmsd->fields; ++ bool first; ++ ++ fprintf(out_file, ",\n%*s\"Fields\": [\n", indent, ""); ++ first = true; ++ while (field->name != NULL) { ++ if (field->flags & VMS_MUST_EXIST) { ++ /* Ignore VMSTATE_VALIDATE bits; these don't get migrated */ ++ field++; ++ continue; ++ } ++ if (!first) { ++ fprintf(out_file, ",\n"); ++ } ++ dump_vmstate_vmsf(out_file, field, indent + 2); ++ field++; ++ first = false; ++ } ++ fprintf(out_file, "\n%*s]", indent, ""); ++ } ++ if (vmsd->subsections != NULL) { ++ const VMStateSubsection *subsection = vmsd->subsections; ++ bool first; ++ ++ fprintf(out_file, ",\n%*s\"Subsections\": [\n", indent, ""); ++ first = true; ++ while (subsection->vmsd != NULL) { ++ if (!first) { ++ fprintf(out_file, ",\n"); ++ } ++ dump_vmstate_vmss(out_file, subsection, indent + 2); ++ subsection++; ++ first = false; ++ } ++ fprintf(out_file, "\n%*s]", indent, ""); ++ } ++ fprintf(out_file, "\n%*s}", indent - 2, ""); ++} ++ ++static void dump_machine_type(FILE *out_file) ++{ ++ fprintf(out_file, " \"vmschkmachine\": {\n"); ++ fprintf(out_file, " \"Name\": \"%s\"\n", current_machine->name); ++ fprintf(out_file, " },\n"); ++} ++ ++void dump_vmstate_json_to_file(FILE *out_file) ++{ ++ GSList *list, *elt; ++ bool first; ++ ++ fprintf(out_file, "{\n"); ++ dump_machine_type(out_file); ++ ++ first = true; ++ list = object_class_get_list(TYPE_DEVICE, true); ++ for (elt = list; elt; elt = elt->next) { ++ DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data, ++ TYPE_DEVICE); ++ const char *name; ++ int indent = 2; ++ ++ if (!dc->vmsd) { ++ continue; ++ } ++ ++ if (!first) { ++ fprintf(out_file, ",\n"); ++ } ++ name = object_class_get_name(OBJECT_CLASS(dc)); ++ fprintf(out_file, "%*s\"%s\": {\n", indent, "", name); ++ indent += 2; ++ fprintf(out_file, "%*s\"Name\": \"%s\",\n", indent, "", name); ++ fprintf(out_file, "%*s\"version_id\": %d,\n", indent, "", ++ dc->vmsd->version_id); ++ fprintf(out_file, "%*s\"minimum_version_id\": %d,\n", indent, "", ++ dc->vmsd->minimum_version_id); ++ ++ dump_vmstate_vmsd(out_file, dc->vmsd, indent, false); ++ ++ fprintf(out_file, "\n%*s}", indent - 2, ""); ++ first = false; ++ } ++ fprintf(out_file, "\n}\n"); ++ fclose(out_file); ++} ++ + static int calculate_new_instance_id(const char *idstr) + { + SaveStateEntry *se; +diff --git a/vl.c b/vl.c +index a0099f6..ca3d498 100644 +--- a/vl.c ++++ b/vl.c +@@ -2838,6 +2838,7 @@ int main(int argc, char **argv, char **envp) + }; + const char *trace_events = NULL; + const char *trace_file = NULL; ++ FILE *vmstate_dump_file = NULL; + + atexit(qemu_run_exit_notifiers); + error_set_progname(argv[0]); +@@ -3794,6 +3795,13 @@ int main(int argc, char **argv, char **envp) + } + configure_msg(opts); + break; ++ case QEMU_OPTION_dump_vmstate: ++ vmstate_dump_file = fopen(optarg, "w"); ++ if (vmstate_dump_file == NULL) { ++ fprintf(stderr, "open %s: %s\n", optarg, strerror(errno)); ++ exit(1); ++ } ++ break; + default: + os_parse_cmd_args(popt->index, optarg); + } +@@ -4346,6 +4354,12 @@ int main(int argc, char **argv, char **envp) + } + } + ++ if (vmstate_dump_file) { ++ /* dump and exit */ ++ dump_vmstate_json_to_file(vmstate_dump_file); ++ return 0; ++ } ++ + if (incoming) { + Error *local_err = NULL; + qemu_start_incoming_migration(incoming, &local_err); +-- +1.9.3 + diff --git a/SOURCES/kvm-migration-fix-free-XBZRLE-decoded_buf-wrong.patch b/SOURCES/kvm-migration-fix-free-XBZRLE-decoded_buf-wrong.patch new file mode 100644 index 0000000..f245acc --- /dev/null +++ b/SOURCES/kvm-migration-fix-free-XBZRLE-decoded_buf-wrong.patch @@ -0,0 +1,140 @@ +From 0726ca63bf611741889fb77f68afd9e7e18d4e47 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Tue, 11 Feb 2014 14:56:37 +0100 +Subject: [PATCH 18/28] migration:fix free XBZRLE decoded_buf wrong + +RH-Author: Orit Wasserman +Message-id: <1392130597-23600-3-git-send-email-owasserm@redhat.com> +Patchwork-id: 57213 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] migration:fix free XBZRLE decoded_buf wrong +Bugzilla: 1038540 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela + +From: "Gonglei (Arei)" + +When qemu do live migration with xbzrle, qemu malloc decoded_buf +at destination end but free it at source end. It will crash qemu +by double free error in some scenarios. Splitting the XBZRLE structure +for clear logic distinguishing src/dst side. + +Signed-off-by: ChenLiang +Reviewed-by: Peter Maydell +Reviewed-by: Orit Wasserman +Signed-off-by: GongLei +Signed-off-by: Juan Quintela +(cherry picked from commit 905f26f2221e139ac0e7317ddac158c50f5cf876) +--- + arch_init.c | 22 ++++++++++++---------- + include/migration/migration.h | 1 + + migration.c | 1 + + 3 files changed, 14 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 22 ++++++++++++---------- + include/migration/migration.h | 1 + + migration.c | 1 + + 3 files changed, 14 insertions(+), 10 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 65148d6..31bf690 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -164,17 +164,15 @@ static struct { + uint8_t *encoded_buf; + /* buffer for storing page content */ + uint8_t *current_buf; +- /* buffer used for XBZRLE decoding */ +- uint8_t *decoded_buf; + /* Cache for XBZRLE */ + PageCache *cache; + } XBZRLE = { + .encoded_buf = NULL, + .current_buf = NULL, +- .decoded_buf = NULL, + .cache = NULL, + }; +- ++/* buffer used for XBZRLE decoding */ ++static uint8_t *xbzrle_decoded_buf; + + int64_t xbzrle_cache_resize(int64_t new_size) + { +@@ -608,6 +606,12 @@ uint64_t ram_bytes_total(void) + return total; + } + ++void free_xbzrle_decoded_buf(void) ++{ ++ g_free(xbzrle_decoded_buf); ++ xbzrle_decoded_buf = NULL; ++} ++ + static void migration_end(void) + { + if (migration_bitmap) { +@@ -621,11 +625,9 @@ static void migration_end(void) + g_free(XBZRLE.cache); + g_free(XBZRLE.encoded_buf); + g_free(XBZRLE.current_buf); +- g_free(XBZRLE.decoded_buf); + XBZRLE.cache = NULL; + XBZRLE.encoded_buf = NULL; + XBZRLE.current_buf = NULL; +- XBZRLE.decoded_buf = NULL; + } + } + +@@ -830,8 +832,8 @@ static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host) + unsigned int xh_len; + int xh_flags; + +- if (!XBZRLE.decoded_buf) { +- XBZRLE.decoded_buf = g_malloc(TARGET_PAGE_SIZE); ++ if (!xbzrle_decoded_buf) { ++ xbzrle_decoded_buf = g_malloc(TARGET_PAGE_SIZE); + } + + /* extract RLE header */ +@@ -848,10 +850,10 @@ static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host) + return -1; + } + /* load data and decode */ +- qemu_get_buffer(f, XBZRLE.decoded_buf, xh_len); ++ qemu_get_buffer(f, xbzrle_decoded_buf, xh_len); + + /* decode RLE */ +- ret = xbzrle_decode_buffer(XBZRLE.decoded_buf, xh_len, host, ++ ret = xbzrle_decode_buffer(xbzrle_decoded_buf, xh_len, host, + TARGET_PAGE_SIZE); + if (ret == -1) { + fprintf(stderr, "Failed to load XBZRLE page - decode error!\n"); +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 140e6b4..9314511 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -98,6 +98,7 @@ MigrationState *migrate_get_current(void); + uint64_t ram_bytes_remaining(void); + uint64_t ram_bytes_transferred(void); + uint64_t ram_bytes_total(void); ++void free_xbzrle_decoded_buf(void); + + void acct_update_position(QEMUFile *f, size_t size, bool zero); + +diff --git a/migration.c b/migration.c +index b6de990..93de654 100644 +--- a/migration.c ++++ b/migration.c +@@ -104,6 +104,7 @@ static void process_incoming_migration_co(void *opaque) + + ret = qemu_loadvm_state(f); + qemu_fclose(f); ++ free_xbzrle_decoded_buf(); + if (ret < 0) { + fprintf(stderr, "load of migration failed\n"); + exit(EXIT_FAILURE); +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-fix-parameter-validation-on-ram-load-CVE-2.patch b/SOURCES/kvm-migration-fix-parameter-validation-on-ram-load-CVE-2.patch new file mode 100644 index 0000000..1ccdaf8 --- /dev/null +++ b/SOURCES/kvm-migration-fix-parameter-validation-on-ram-load-CVE-2.patch @@ -0,0 +1,76 @@ +From 6986f7c62b38d90992bd8f7c178325fc1e31d7fe Mon Sep 17 00:00:00 2001 +Message-Id: <6986f7c62b38d90992bd8f7c178325fc1e31d7fe.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Amos Kong +Date: Mon, 8 Dec 2014 14:53:34 -0600 +Subject: [CHANGE 31/31] migration: fix parameter validation on ram load + (CVE-2014-7840) +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amos Kong +Message-id: <1418050414-25145-1-git-send-email-akong@redhat.com> +Patchwork-id: 62762 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] migration: fix parameter validation on ram load (CVE-2014-7840) +Bugzilla: 1163078 +RH-Acked-by: Juan Quintela +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Michael S. Tsirkin + +From: Michael S. Tsirkin + +During migration, the values read from migration stream during ram load +are not validated. Especially offset in host_from_stream_offset() and +also the length of the writes in the callers of said function. + +To fix this, we need to make sure that the [offset, offset + length] +range fits into one of the allocated memory regions. + +Validating addr < len should be sufficient since data seems to always be +managed in TARGET_PAGE_SIZE chunks. + +Fixes: CVE-2014-7840 + +Note: follow-up patches add extra checks on each block->host access. + +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Paolo Bonzini +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Amit Shah +(backported from commit 0be839a2701369f669532ea5884c15bead1c6e08) +Conflict was caused by different error reporting. + +Signed-off-by: Amos Kong +Signed-off-by: Jeff E. Nelson +--- + arch_init.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 0c2bde9..4c3d3b5 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -979,7 +979,7 @@ static inline void *host_from_stream_offset(QEMUFile *f, + uint8_t len; + + if (flags & RAM_SAVE_FLAG_CONTINUE) { +- if (!block) { ++ if (!block || block->length <= offset) { + fprintf(stderr, "Ack, bad migration stream!\n"); + return NULL; + } +@@ -992,8 +992,9 @@ static inline void *host_from_stream_offset(QEMUFile *f, + id[len] = 0; + + QTAILQ_FOREACH(block, &ram_list.blocks, next) { +- if (!strncmp(id, block->idstr, sizeof(id))) ++ if (!strncmp(id, block->idstr, sizeof(id)) && block->length > offset) { + return memory_region_get_ram_ptr(block->mr) + offset; ++ } + } + + fprintf(stderr, "Can't find block %s!\n", id); +-- +2.1.0 + diff --git a/SOURCES/kvm-migration-fix-spice-migration.patch b/SOURCES/kvm-migration-fix-spice-migration.patch new file mode 100644 index 0000000..e971e74 --- /dev/null +++ b/SOURCES/kvm-migration-fix-spice-migration.patch @@ -0,0 +1,114 @@ +From 7861f4a9c8f7125b758e9be430b195527db83430 Mon Sep 17 00:00:00 2001 +Message-Id: <7861f4a9c8f7125b758e9be430b195527db83430.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:17 +0100 +Subject: [PATCH 41/46] migration: fix spice migration + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-42-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55722 +O-Subject: [RHEL7.0 PATCH 41/42] migration: fix spice migration +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 02edd2e7665bceb307bedd8afe625c0f7e8d7cfa +Author: Stefan Hajnoczi +Date: Mon Jul 29 15:01:58 2013 +0200 + + migration: fix spice migration + + Commit 29ae8a4133082e16970c9d4be09f4b6a15034617 ("rdma: introduce + MIG_STATE_NONE and change MIG_STATE_SETUP state transition") changed the + state transitions during migration setup. + + Spice used to be notified with MIG_STATE_ACTIVE and it detected this + using migration_is_active(). Spice is now notified with + MIG_STATE_SETUP and migration_is_active() no longer works. + + Replace migration_is_active() with migration_in_setup() to fix spice + migration. + + Cc: Michael R. Hines + Reviewed-by: Kevin Wolf + Signed-off-by: Stefan Hajnoczi +--- + hw/block/virtio-blk.c | 2 +- + include/migration/migration.h | 2 +- + migration.c | 4 ++-- + ui/spice-core.c | 2 +- + 4 files changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/block/virtio-blk.c | 2 +- + include/migration/migration.h | 2 +- + migration.c | 4 ++-- + ui/spice-core.c | 2 +- + 4 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index 9fe622d..49a23c3 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -658,7 +658,7 @@ static void virtio_blk_migration_state_changed(Notifier *notifier, void *data) + migration_state_notifier); + MigrationState *mig = data; + +- if (migration_is_active(mig)) { ++ if (migration_in_setup(mig)) { + if (!s->dataplane) { + return; + } +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 08c772d..140e6b4 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -90,7 +90,7 @@ int migrate_fd_close(MigrationState *s); + + void add_migration_state_change_notifier(Notifier *notify); + void remove_migration_state_change_notifier(Notifier *notify); +-bool migration_is_active(MigrationState *); ++bool migration_in_setup(MigrationState *); + bool migration_has_finished(MigrationState *); + bool migration_has_failed(MigrationState *); + MigrationState *migrate_get_current(void); +diff --git a/migration.c b/migration.c +index c0202b4..13fc59b 100644 +--- a/migration.c ++++ b/migration.c +@@ -339,9 +339,9 @@ void remove_migration_state_change_notifier(Notifier *notify) + notifier_remove(notify); + } + +-bool migration_is_active(MigrationState *s) ++bool migration_in_setup(MigrationState *s) + { +- return s->state == MIG_STATE_ACTIVE; ++ return s->state == MIG_STATE_SETUP; + } + + bool migration_has_finished(MigrationState *s) +diff --git a/ui/spice-core.c b/ui/spice-core.c +index c8337ab..d67449e 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -561,7 +561,7 @@ static void migration_state_notifier(Notifier *notifier, void *data) + { + MigrationState *s = data; + +- if (migration_is_active(s)) { ++ if (migration_in_setup(s)) { + spice_server_migrate_start(spice_server); + } else if (migration_has_finished(s)) { + spice_server_migrate_end(spice_server, true); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-migration-notify-migration-state-before-starting-thread.patch b/SOURCES/kvm-migration-notify-migration-state-before-starting-thread.patch new file mode 100644 index 0000000..99ffb10 --- /dev/null +++ b/SOURCES/kvm-migration-notify-migration-state-before-starting-thread.patch @@ -0,0 +1,48 @@ +From cfa096accd51fe9b1dfa9693ce6f4628a4e83fe6 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 13 Aug 2013 09:06:35 +0200 +Subject: migration: notify migration state before starting thread + +RH-Author: Stefan Hajnoczi +Message-id: <1376384797-4701-5-git-send-email-stefanha@redhat.com> +Patchwork-id: 53209 +O-Subject: [PATCH v2 4/6] migration: notify migration state before starting thread +Bugzilla: 995030 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Michael S. Tsirkin + +The migration thread runs outside the QEMU global mutex when possible. +Therefore we must notify migration state change *before* starting the +migration thread. + +This allows registered listeners to act before live migration iterations +begin. Therefore they can get into a state that allows for live +migration. When the migration thread starts everything will be ready. + +Without this patch there is a race condition during migration setup, +depending on whether the migration thread has already transitioned from +SETUP to ACTIVE state. + +Acked-by: Paolo Bonzini +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 9287ac271d83166f99e050a0e0a4ebd462f7eb2b) + +Signed-off-by: Stefan Hajnoczi + +diff --git a/migration.c b/migration.c +index 6e29f72..177fc22 100644 +--- a/migration.c ++++ b/migration.c +@@ -601,7 +601,9 @@ void migrate_fd_connect(MigrationState *s) + qemu_file_set_rate_limit(s->file, + s->bandwidth_limit / XFER_LIMIT_RATIO); + ++ /* Notify before starting migration thread */ ++ notifier_list_notify(&migration_state_notifiers, s); ++ + qemu_thread_create(&s->thread, migration_thread, s, + QEMU_THREAD_JOINABLE); +- notifier_list_notify(&migration_state_notifiers, s); + } diff --git a/SOURCES/kvm-migration-omit-drive-ref-as-we-have-bdrv_ref-now.patch b/SOURCES/kvm-migration-omit-drive-ref-as-we-have-bdrv_ref-now.patch new file mode 100644 index 0000000..89150bc --- /dev/null +++ b/SOURCES/kvm-migration-omit-drive-ref-as-we-have-bdrv_ref-now.patch @@ -0,0 +1,56 @@ +From 375004355689da9457ce5df62849d74cebd1c0c0 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:49 +0100 +Subject: [PATCH 06/34] migration: omit drive ref as we have bdrv_ref now + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-5-git-send-email-famz@redhat.com> +Patchwork-id: 56766 +O-Subject: [RHEL-7 qemu-kvm PATCH 04/18] migration: omit drive ref as we have bdrv_ref now +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +block-migration.c does not actually use DriveInfo anywhere. Hence it's +safe to drive ref code, we really only care about referencing BDS. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8442cfd0346de849264494c5adedbac12553867e) +Signed-off-by: Fam Zheng +--- + block-migration.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block-migration.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block-migration.c b/block-migration.c +index 1844066..fc4ef93 100644 +--- a/block-migration.c ++++ b/block-migration.c +@@ -336,8 +336,8 @@ static void init_blk_migration_it(void *opaque, BlockDriverState *bs) + bmds->completed_sectors = 0; + bmds->shared_base = block_mig_state.shared_base; + alloc_aio_bitmap(bmds); +- drive_get_ref(drive_get_by_blockdev(bs)); + bdrv_set_in_use(bs, 1); ++ bdrv_ref(bs); + + block_mig_state.total_sector_sum += sectors; + +@@ -575,7 +575,7 @@ static void blk_mig_cleanup(void) + while ((bmds = QSIMPLEQ_FIRST(&block_mig_state.bmds_list)) != NULL) { + QSIMPLEQ_REMOVE_HEAD(&block_mig_state.bmds_list, entry); + bdrv_set_in_use(bmds->bs, 0); +- drive_put_ref(drive_get_by_blockdev(bmds->bs)); ++ bdrv_unref(bmds->bs); + g_free(bmds->aio_bitmap); + g_free(bmds); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-qmp_migrate-keep-working-after-syntax-erro.patch b/SOURCES/kvm-migration-qmp_migrate-keep-working-after-syntax-erro.patch new file mode 100644 index 0000000..2f39e95 --- /dev/null +++ b/SOURCES/kvm-migration-qmp_migrate-keep-working-after-syntax-erro.patch @@ -0,0 +1,64 @@ +From e7ea7509ab95b71445d98b7c76cc74e1e1304779 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Apr 2014 09:28:47 +0200 +Subject: [PATCH 02/13] migration: qmp_migrate(): keep working after syntax error + +RH-Author: Amit Shah +Message-id: <717d7d24efbff7fe32d70c506edea41ea00d1edc.1397208304.git.amit.shah@redhat.com> +Patchwork-id: 58439 +O-Subject: [RHEL7.0.z qemu-kvm PATCH 1/1] migration: qmp_migrate(): keep working after syntax error +Bugzilla: 1086598 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Amos Kong +RH-Acked-by: Luiz Capitulino + +From: Luiz Capitulino + +If a user or QMP client enter a bad syntax for the migrate +command in QMP/HMP, then the migrate command will never succeed +from that point on. + +For example, if you enter: + +(qemu) migrate tcp;0:4444 +migrate: Parameter 'uri' expects a valid migration protocol + +Then the migrate command will always fail from now on: + +(qemu) migrate tcp:0:4444 +migrate: There's a migration process in progress + +The problem is that qmp_migrate() sets the migration status to +MIG_STATE_SETUP and doesn't reset it on syntax error. This bug +was introduced by commit 29ae8a4133082e16970c9d4be09f4b6a15034617. + +Bugzilla: 1086598 + +Reviewed-by: Michael R. Hines +Signed-off-by: Luiz Capitulino +(cherry picked from commit c950114286ea358a93ce632db0421945e1008395) +Signed-off-by: Amit Shah +--- + migration.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/migration.c b/migration.c +index 93de654..7efbd25 100644 +--- a/migration.c ++++ b/migration.c +@@ -457,6 +457,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + #endif + } else { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, "uri", "a valid migration protocol"); ++ s->state = MIG_STATE_ERROR; + return; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-ram_handle_compressed.patch b/SOURCES/kvm-migration-ram_handle_compressed.patch new file mode 100644 index 0000000..5811605 --- /dev/null +++ b/SOURCES/kvm-migration-ram_handle_compressed.patch @@ -0,0 +1,68 @@ +From 325f2d5f89e8275844a08c5fd0ea0e2ebe4874ca Mon Sep 17 00:00:00 2001 +Message-Id: <325f2d5f89e8275844a08c5fd0ea0e2ebe4874ca.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:16 +0100 +Subject: [PATCH 40/46] migration: ram_handle_compressed + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-41-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55727 +O-Subject: [RHEL7.0 PATCH 40/42] migration: ram_handle_compressed +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit d613a56f845788412a442c6b5aff88b38244f99a +Author: Isaku Yamahata +Date: Sat Sep 21 01:23:37 2013 +0900 + + migration: ram_handle_compressed + + ram_handle_compressed() should be aware of size > TARGET_PAGE_SIZE. + migration-rdma can call it with larger size. + + Signed-off-by: Isaku Yamahata + Signed-off-by: Juan Quintela +--- + arch_init.c | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 5ce9c61..d71fb33 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -848,13 +848,14 @@ static inline void *host_from_stream_offset(QEMUFile *f, + */ + void ram_handle_compressed(void *host, uint8_t ch, uint64_t size) + { +- if (ch != 0 || !is_zero_range(host, TARGET_PAGE_SIZE)) { ++ if (ch != 0 || !is_zero_range(host, size)) { + memset(host, ch, size); + #ifndef _WIN32 +- if (ch == 0 && +- (!kvm_enabled() || kvm_has_sync_mmu()) && +- getpagesize() <= TARGET_PAGE_SIZE) { +- qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED); ++ if (ch == 0 && (!kvm_enabled() || kvm_has_sync_mmu())) { ++ size = size & ~(getpagesize() - 1); ++ if (size > 0) { ++ qemu_madvise(host, size, QEMU_MADV_DONTNEED); ++ } + } + #endif + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-migration-send-total-time-in-QMP-at-completed-stage.patch b/SOURCES/kvm-migration-send-total-time-in-QMP-at-completed-stage.patch new file mode 100644 index 0000000..e7e60ef --- /dev/null +++ b/SOURCES/kvm-migration-send-total-time-in-QMP-at-completed-stage.patch @@ -0,0 +1,48 @@ +From b6ec816cb5032ff419a4c30f1a65ffb51250d52d Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:13 +0200 +Subject: [PATCH 18/25] migration: send total time in QMP at "completed" stage + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-9-git-send-email-owasserm@redhat.com> +Patchwork-id: 54804 +O-Subject: [RHEL7.0 qemu-kvm v2 08/10] migration: send total time in QMP at "completed" stage +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: Pawit Pornkitprasan + +The "completed" stage sets total_time but not has_total_time and +thus it is not sent via QMP reply (but sent via HMP nevertheless) + +Signed-off-by: Pawit Pornkitprasan +Reviewed-by: Eric Blake +Reviewed-by: Orit Wasserman +Signed-off-by: Luiz Capitulino +(cherry picked from commit 00c14997cb95bf3e6c18c2264ef5e10642d89b3a) +--- + migration.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + migration.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/migration.c b/migration.c +index cc0e649..d69ac97 100644 +--- a/migration.c ++++ b/migration.c +@@ -217,6 +217,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) + + info->has_status = true; + info->status = g_strdup("completed"); ++ info->has_total_time = true; + info->total_time = s->total_time; + info->has_downtime = true; + info->downtime = s->downtime; +-- +1.7.1 + diff --git a/SOURCES/kvm-migration-static-variables-will-not-be-reset-at-seco.patch b/SOURCES/kvm-migration-static-variables-will-not-be-reset-at-seco.patch new file mode 100644 index 0000000..92f9053 --- /dev/null +++ b/SOURCES/kvm-migration-static-variables-will-not-be-reset-at-seco.patch @@ -0,0 +1,76 @@ +From bf03ba87d891a3f0f2aad8d05b5770c1ac09e800 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 21 Nov 2014 08:27:51 +0100 +Subject: [PATCH 1/7] migration: static variables will not be reset at second + migration + +Message-id: <20e4d11148c43174056cdd0e3be03480fe51ccc7.1416557860.git.amit.shah@redhat.com> +Patchwork-id: 62517 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] migration: static variables will not be reset at second migration +Bugzilla: 1071776 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: ChenLiang + +The static variables in migration_bitmap_sync will not be reset in +the case of a second attempted migration. + +Signed-off-by: ChenLiang +Signed-off-by: Gonglei +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Amit Shah +(cherry picked from commit 6c1b663c4c3725bc4bc33f78ed266ddef80a2ca8) +Signed-off-by: Amit Shah +Signed-off-by: Miroslav Rezanina + +Conflicts: + arch_init.c +(Trivial context conflict) +--- + arch_init.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index b88d686..0c2bde9 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -476,15 +476,23 @@ static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length) + + + /* Needs iothread lock! */ ++/* Fix me: there are too many global variables used in migration process. */ ++static int64_t start_time; ++static int64_t bytes_xfer_prev; ++static int64_t num_dirty_pages_period; ++ ++static void migration_bitmap_sync_init(void) ++{ ++ start_time = 0; ++ bytes_xfer_prev = 0; ++ num_dirty_pages_period = 0; ++} + + static void migration_bitmap_sync(void) + { + RAMBlock *block; + uint64_t num_dirty_pages_init = migration_dirty_pages; + MigrationState *s = migrate_get_current(); +- static int64_t start_time; +- static int64_t bytes_xfer_prev; +- static int64_t num_dirty_pages_period; + int64_t end_time; + int64_t bytes_xfer_now; + +@@ -732,6 +740,7 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + + mig_throttle_on = false; + dirty_rate_high_cnt = 0; ++ migration_bitmap_sync_init(); + + if (migrate_use_xbzrle()) { + XBZRLE_cache_lock(); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-migration-synchronize-memory-bitmap-64bits-at-a-time.patch b/SOURCES/kvm-migration-synchronize-memory-bitmap-64bits-at-a-time.patch new file mode 100644 index 0000000..4b53258 --- /dev/null +++ b/SOURCES/kvm-migration-synchronize-memory-bitmap-64bits-at-a-time.patch @@ -0,0 +1,88 @@ +From 7471a0a26dde86aa466e2183c6e43df9c01250d6 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:51 +0100 +Subject: [PATCH 40/40] migration: synchronize memory bitmap 64bits at a time + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-41-git-send-email-quintela@redhat.com> +Patchwork-id: 56695 +O-Subject: [RHEL7 qemu-kvm PATCH 40/40] migration: synchronize memory bitmap 64bits at a time +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +We use the old code if the bitmaps are not aligned + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit aa8dc044772ba156cbcf2174b5673cfa11f566a7) +Signed-off-by: Juan Quintela +--- + arch_init.c | 38 +++++++++++++++++++++++++++++--------- + 1 file changed, 29 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 38 +++++++++++++++++++++++++++++--------- + 1 files changed, 29 insertions(+), 9 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 23650e7..31aac84 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -50,6 +50,7 @@ + #include "exec/cpu-all.h" + #include "exec/ram_addr.h" + #include "hw/acpi/acpi.h" ++#include "qemu/host-utils.h" + + #ifdef DEBUG_ARCH_INIT + #define DPRINTF(fmt, ...) \ +@@ -376,15 +377,34 @@ static inline bool migration_bitmap_set_dirty(ram_addr_t addr) + static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length) + { + ram_addr_t addr; +- +- for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) { +- if (cpu_physical_memory_get_dirty(start + addr, +- TARGET_PAGE_SIZE, +- DIRTY_MEMORY_MIGRATION)) { +- cpu_physical_memory_reset_dirty(start + addr, +- TARGET_PAGE_SIZE, +- DIRTY_MEMORY_MIGRATION); +- migration_bitmap_set_dirty(start + addr); ++ unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS); ++ ++ /* start address is aligned at the start of a word? */ ++ if (((page * BITS_PER_LONG) << TARGET_PAGE_BITS) == start) { ++ int k; ++ int nr = BITS_TO_LONGS(length >> TARGET_PAGE_BITS); ++ unsigned long *src = ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION]; ++ ++ for (k = page; k < page + nr; k++) { ++ if (src[k]) { ++ unsigned long new_dirty; ++ new_dirty = ~migration_bitmap[k]; ++ migration_bitmap[k] |= src[k]; ++ new_dirty &= src[k]; ++ migration_dirty_pages += ctpopl(new_dirty); ++ src[k] = 0; ++ } ++ } ++ } else { ++ for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) { ++ if (cpu_physical_memory_get_dirty(start + addr, ++ TARGET_PAGE_SIZE, ++ DIRTY_MEMORY_MIGRATION)) { ++ cpu_physical_memory_reset_dirty(start + addr, ++ TARGET_PAGE_SIZE, ++ DIRTY_MEMORY_MIGRATION); ++ migration_bitmap_set_dirty(start + addr); ++ } + } + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-migration_cancel-shutdown-migration-socket.patch b/SOURCES/kvm-migration_cancel-shutdown-migration-socket.patch new file mode 100644 index 0000000..5adc3e4 --- /dev/null +++ b/SOURCES/kvm-migration_cancel-shutdown-migration-socket.patch @@ -0,0 +1,64 @@ +From 8f6bbf90e819d271a62f2b59732d188b51a96128 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Fri, 16 Jan 2015 17:35:37 +0100 +Subject: [PATCH 05/16] migration_cancel: shutdown migration socket + +Message-id: <1421429737-23581-4-git-send-email-dgilbert@redhat.com> +Patchwork-id: 63334 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/3] migration_cancel: shutdown migration socket +Bugzilla: 1086168 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek + +From: "Dr. David Alan Gilbert" + +Force shutdown on migration socket on cancel to cause the cancel +to complete even if the socket is blocked on a dead network. + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Paolo Bonzini +Reviewed-by: Amit Shah +Signed-off-by: Amit Shah +(cherry picked from commit a26ba26e214911dc879a23e797d2c269cdb38577) +Signed-off-by: Miroslav Rezanina + +Conflicts: + migration.c +--- + migration.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/migration.c b/migration.c +index 44b993a..e8c5939 100644 +--- a/migration.c ++++ b/migration.c +@@ -331,6 +331,7 @@ void migrate_fd_error(MigrationState *s) + static void migrate_fd_cancel(MigrationState *s) + { + int old_state ; ++ QEMUFile *f = migrate_get_current()->file; + DPRINTF("cancelling migration\n"); + + do { +@@ -340,6 +341,17 @@ static void migrate_fd_cancel(MigrationState *s) + } + migrate_set_state(s, old_state, MIG_STATE_CANCELLING); + } while (s->state != MIG_STATE_CANCELLING); ++ ++ /* ++ * If we're unlucky the migration code might be stuck somewhere in a ++ * send/write while the network has failed and is waiting to timeout; ++ * if we've got shutdown(2) available then we can force it to quit. ++ * The outgoing qemu file gets closed in migrate_fd_cleanup that is ++ * called in a bh, so there is no race against this cancel. ++ */ ++ if (s->state == MIG_STATE_CANCELLING && f) { ++ qemu_file_shutdown(f); ++ } + } + + void add_migration_state_change_notifier(Notifier *notify) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-milkymist-minimac2-Fix-minimac2_read-_write-tracepoi.patch b/SOURCES/kvm-milkymist-minimac2-Fix-minimac2_read-_write-tracepoi.patch new file mode 100644 index 0000000..8ec6fd5 --- /dev/null +++ b/SOURCES/kvm-milkymist-minimac2-Fix-minimac2_read-_write-tracepoi.patch @@ -0,0 +1,51 @@ +From 52f4da1d90ef6a6c56d7e6016539c0054066c458 Mon Sep 17 00:00:00 2001 +Message-Id: <52f4da1d90ef6a6c56d7e6016539c0054066c458.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:52 +0100 +Subject: [PATCH 11/16] milkymist-minimac2: Fix minimac2_read/_write + tracepoints + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-4-git-send-email-armbru@redhat.com> +Patchwork-id: 56111 +O-Subject: [PATCH 7.0 qemu-kvm 3/7] milkymist-minimac2: Fix minimac2_read/_write tracepoints +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Broken in milkymist-minimac.c from the start (commit 0742454), +faithfully moved to milkymist-minimac2.c (commit 57aa265). + +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0ece9671fd22e3ea518aa30f941e8794116985e7) +--- + hw/net/milkymist-minimac2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/net/milkymist-minimac2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/net/milkymist-minimac2.c b/hw/net/milkymist-minimac2.c +index 4ef6318..7448777 100644 +--- a/hw/net/milkymist-minimac2.c ++++ b/hw/net/milkymist-minimac2.c +@@ -355,7 +355,7 @@ minimac2_write(void *opaque, hwaddr addr, uint64_t value, + { + MilkymistMinimac2State *s = opaque; + +- trace_milkymist_minimac2_memory_read(addr, value); ++ trace_milkymist_minimac2_memory_write(addr, value); + + addr >>= 2; + switch (addr) { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-mirror-Don-t-close-target.patch b/SOURCES/kvm-mirror-Don-t-close-target.patch new file mode 100644 index 0000000..c47ea45 --- /dev/null +++ b/SOURCES/kvm-mirror-Don-t-close-target.patch @@ -0,0 +1,45 @@ +From 6fe6f64923937e725013de1a8e5f7d7b10047787 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:57 +0100 +Subject: [PATCH 14/34] mirror: Don't close target + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-13-git-send-email-famz@redhat.com> +Patchwork-id: 56774 +O-Subject: [RHEL-7 qemu-kvm PATCH 12/18] mirror: Don't close target +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Let reference count manage target and don't call bdrv_close here. + +Signed-off-by: Fam Zheng +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f95c625ce4cb7863795fcc36502ac58a44fdb2f1) +Signed-off-by: Fam Zheng +--- + block/mirror.c | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 8837186..1e3337f 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -479,7 +479,6 @@ immediate_exit: + } + bdrv_swap(s->target, s->common.bs); + } +- bdrv_close(s->target); + bdrv_unref(s->target); + block_job_completed(&s->common, ret); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-mirror-Fix-qiov-size-for-short-requests.patch b/SOURCES/kvm-mirror-Fix-qiov-size-for-short-requests.patch new file mode 100644 index 0000000..850e23f --- /dev/null +++ b/SOURCES/kvm-mirror-Fix-qiov-size-for-short-requests.patch @@ -0,0 +1,93 @@ +From 332e8935dd300a4c6f77407e281fe339759bc505 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:14 +0200 +Subject: [PATCH 11/11] mirror: Fix qiov size for short requests + +Message-id: <1408552814-23031-8-git-send-email-eblake@redhat.com> +Patchwork-id: 60650 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 7/7] mirror: Fix qiov size for short requests +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +When mirroring an image of a size that is not a multiple of the +mirror job granularity, the last request would have the right nb_sectors +argument, but a qiov that is rounded up to the next multiple of the +granularity. Don't do this. + +This fixes a segfault that is caused by raw-posix being confused by this +and allocating a buffer with request length, but operating on it with +qiov length. + +[s/Driver/Drive/ in qemu-iotests 041 as suggested by Eric +--Stefan] + +Reported-by: Eric Blake +Signed-off-by: Kevin Wolf +Tested-by: Eric Blake +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5a0f6fd5c84573387056e0464a7fc0c6fb70b2dc) + +Conflicts: + tests/qemu-iotests/041.out - context with fewer tests run downstream + +Signed-off-by: Eric Blake +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 4 +++- + tests/qemu-iotests/041 | 5 +++++ + tests/qemu-iotests/041.out | 4 ++-- + 3 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index cdc0268..b7cf4ab 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -243,9 +243,11 @@ static void coroutine_fn mirror_iteration(MirrorBlockJob *s) + next_sector = sector_num; + while (nb_chunks-- > 0) { + MirrorBuffer *buf = QSIMPLEQ_FIRST(&s->buf_free); ++ size_t remaining = (nb_sectors * BDRV_SECTOR_SIZE) - op->qiov.size; ++ + QSIMPLEQ_REMOVE_HEAD(&s->buf_free, next); + s->buf_free_count--; +- qemu_iovec_add(&op->qiov, buf, s->granularity); ++ qemu_iovec_add(&op->qiov, buf, MIN(s->granularity, remaining)); + + /* Advance the HBitmapIter in parallel, so that we do not examine + * the same sector twice. +diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 +index 912e499..b654081 100755 +--- a/tests/qemu-iotests/041 ++++ b/tests/qemu-iotests/041 +@@ -270,6 +270,11 @@ class TestSingleDriveZeroLength(TestSingleDrive): + test_small_buffer2 = None + test_large_cluster = None + ++class TestSingleDriveUnalignedLength(TestSingleDrive): ++ image_len = 1025 * 1024 ++ test_small_buffer2 = None ++ test_large_cluster = None ++ + class TestMirrorNoBacking(ImageMirroringTestCase): + image_len = 2 * 1024 * 1024 # MB + +diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out +index cfa5c0d..802ffaa 100644 +--- a/tests/qemu-iotests/041.out ++++ b/tests/qemu-iotests/041.out +@@ -1,5 +1,5 @@ +-................................... ++........................................... + ---------------------------------------------------------------------- +-Ran 35 tests ++Ran 43 tests + + OK +-- +1.7.1 + diff --git a/SOURCES/kvm-mirror-Fix-resource-leak-when-bdrv_getlength-fails.patch b/SOURCES/kvm-mirror-Fix-resource-leak-when-bdrv_getlength-fails.patch new file mode 100644 index 0000000..8553309 --- /dev/null +++ b/SOURCES/kvm-mirror-Fix-resource-leak-when-bdrv_getlength-fails.patch @@ -0,0 +1,46 @@ +From 5e30d941f2fb33b995333fc4bb45368129f8d4bc Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:08 +0200 +Subject: [PATCH 05/11] mirror: Fix resource leak when bdrv_getlength fails + +Message-id: <1408552814-23031-2-git-send-email-eblake@redhat.com> +Patchwork-id: 60646 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 1/7] mirror: Fix resource leak when bdrv_getlength fails +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +The direct return will skip releasing of all the resouces at +immediate_exit, don't miss that. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 373df5b135b4a54e0abb394e9e703fef3ded093c) +Signed-off-by: Eric Blake + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 47e14cd..9b3e229 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -307,8 +307,8 @@ static void coroutine_fn mirror_run(void *opaque) + + s->common.len = bdrv_getlength(bs); + if (s->common.len <= 0) { +- block_job_completed(&s->common, s->common.len); +- return; ++ ret = s->common.len; ++ goto immediate_exit; + } + + length = (bdrv_getlength(bs) + s->granularity - 1) / s->granularity; +-- +1.7.1 + diff --git a/SOURCES/kvm-mirror-Go-through-ready-complete-process-for-0-len-i.patch b/SOURCES/kvm-mirror-Go-through-ready-complete-process-for-0-len-i.patch new file mode 100644 index 0000000..5099a31 --- /dev/null +++ b/SOURCES/kvm-mirror-Go-through-ready-complete-process-for-0-len-i.patch @@ -0,0 +1,69 @@ +From 0e7b328d0802c970f632f50d6daab0ea6d226b29 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:10 +0200 +Subject: [PATCH 07/11] mirror: Go through ready -> complete process for 0 len image + +Message-id: <1408552814-23031-4-git-send-email-eblake@redhat.com> +Patchwork-id: 60645 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 3/7] mirror: Go through ready -> complete process for 0 len image +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +When mirroring or active committing a zero length image, BLOCK_JOB_READY +is not reported now, instead the job completes because we short circuit +the mirror job loop. + +This is inconsistent with non-zero length images, and only confuses +management software. + +Let's do the same thing when seeing a 0-length image: report ready +immediately; wait for block-job-cancel or block-job-complete; clear the +cancel flag as existing non-zero image synced case (cancelled after +ready); then jump to the exit. + +Reported-by: Eric Blake +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 9e48b025400b2d284e17860862b0a4aa02c6032d) + +Conflicts: + block/mirror.c - no backport of qapi events + +Signed-off-by: Eric Blake +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 11 ++++++++++- + 1 files changed, 10 insertions(+), 1 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 9b3e229..cdc0268 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -306,9 +306,18 @@ static void coroutine_fn mirror_run(void *opaque) + } + + s->common.len = bdrv_getlength(bs); +- if (s->common.len <= 0) { ++ if (s->common.len < 0) { + ret = s->common.len; + goto immediate_exit; ++ } else if (s->common.len == 0) { ++ /* Report BLOCK_JOB_READY and wait for complete. */ ++ block_job_ready(&s->common); ++ s->synced = true; ++ while (!block_job_is_cancelled(&s->common) && !s->should_complete) { ++ block_job_yield(&s->common); ++ } ++ s->common.cancelled = false; ++ goto immediate_exit; + } + + length = (bdrv_getlength(bs) + s->granularity - 1) / s->granularity; +-- +1.7.1 + diff --git a/SOURCES/kvm-mirror-Move-base-to-MirrorBlockJob.patch b/SOURCES/kvm-mirror-Move-base-to-MirrorBlockJob.patch new file mode 100644 index 0000000..7fcc6b9 --- /dev/null +++ b/SOURCES/kvm-mirror-Move-base-to-MirrorBlockJob.patch @@ -0,0 +1,85 @@ +From 1098dfcaf705697337694269c4990d2fb58347a6 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:58 +0100 +Subject: [PATCH 15/34] mirror: Move base to MirrorBlockJob + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-14-git-send-email-famz@redhat.com> +Patchwork-id: 56775 +O-Subject: [RHEL-7 qemu-kvm PATCH 13/18] mirror: Move base to MirrorBlockJob +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +This allows setting the base before entering mirror_run, commit will +make use of it. + +Signed-off-by: Fam Zheng +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5bc361b8134eff68e2c40916d1cf58b3523d223b) +Signed-off-by: Fam Zheng +--- + block/mirror.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/mirror.c | 12 ++++++++++-- + 1 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/block/mirror.c b/block/mirror.c +index 1e3337f..8ccde2f 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -31,6 +31,7 @@ typedef struct MirrorBlockJob { + BlockJob common; + RateLimit limit; + BlockDriverState *target; ++ BlockDriverState *base; + MirrorSyncMode mode; + BlockdevOnError on_source_error, on_target_error; + bool synced; +@@ -334,8 +335,7 @@ static void coroutine_fn mirror_run(void *opaque) + + if (s->mode != MIRROR_SYNC_MODE_NONE) { + /* First part, loop on the sectors and initialize the dirty bitmap. */ +- BlockDriverState *base; +- base = s->mode == MIRROR_SYNC_MODE_FULL ? NULL : bs->backing_hd; ++ BlockDriverState *base = s->base; + for (sector_num = 0; sector_num < end; ) { + int64_t next = (sector_num | (sectors_per_chunk - 1)) + 1; + ret = bdrv_is_allocated_above(bs, base, +@@ -540,6 +540,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + void *opaque, Error **errp) + { + MirrorBlockJob *s; ++ BlockDriverState *base = NULL; + + if (granularity == 0) { + /* Choose the default granularity based on the target file's cluster +@@ -562,6 +563,12 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + return; + } + ++ if (mode == MIRROR_SYNC_MODE_TOP) { ++ base = bs->backing_hd; ++ } else { ++ base = NULL; ++ } ++ + s = block_job_create(&mirror_job_driver, bs, speed, cb, opaque, errp); + if (!s) { + return; +@@ -571,6 +578,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, + s->on_target_error = on_target_error; + s->target = target; + s->mode = mode; ++ s->base = base; + s->granularity = granularity; + s->buf_size = MAX(buf_size, granularity); + +-- +1.7.1 + diff --git a/SOURCES/kvm-misc-Add-auto-converge-migration-capability.patch b/SOURCES/kvm-misc-Add-auto-converge-migration-capability.patch new file mode 100644 index 0000000..2b08630 --- /dev/null +++ b/SOURCES/kvm-misc-Add-auto-converge-migration-capability.patch @@ -0,0 +1,86 @@ +From b436b4fc9924560ab70e2ab45361de7054ddb052 Mon Sep 17 00:00:00 2001 +From: Nigel Croxon +Date: Wed, 31 Jul 2013 15:12:18 +0200 +Subject: Add 'auto-converge' migration capability + +RH-Author: Nigel Croxon +Message-id: <1375283539-18714-3-git-send-email-ncroxon@redhat.com> +Patchwork-id: 52875 +O-Subject: [RHEL7 PATCH 2/3] Add 'auto-converge' migration capability +Bugzilla: 985958 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Bugzilla: 985958 - Throttle-down guest to help with live migration convergence (backport to RHEL7.0) +https://bugzilla.redhat.com/show_bug.cgi?id=985958 + +Backported from the following upstream commit with 1 merge conflict. +Hand merge qapi-schema.json. + +commit bde1e2ec2176c363c1783bf8887b6b1beb08dfee +Author: Chegu Vinod +Date: Mon Jun 24 03:49:42 2013 -0600 + + Add 'auto-converge' migration capability + + The auto-converge migration capability allows the user to specify if they + choose live migration seqeunce to automatically detect and force convergence. + + Signed-off-by: Chegu Vinod + Reviewed-by: Paolo Bonzini + Reviewed-by: Eric Blake + Signed-off-by: Juan Quintela + +diff --git a/include/migration/migration.h b/include/migration/migration.h +index e2acec6..1fc2666 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -119,6 +119,8 @@ void migrate_add_blocker(Error *reason); + */ + void migrate_del_blocker(Error *reason); + ++bool migrate_auto_converge(void); ++ + int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen, + uint8_t *dst, int dlen); + int xbzrle_decode_buffer(uint8_t *src, int slen, uint8_t *dst, int dlen); +diff --git a/migration.c b/migration.c +index bfbc345..6e29f72 100644 +--- a/migration.c ++++ b/migration.c +@@ -474,6 +474,15 @@ void qmp_migrate_set_downtime(double value, Error **errp) + max_downtime = (uint64_t)value; + } + ++bool migrate_auto_converge(void) ++{ ++ MigrationState *s; ++ ++ s = migrate_get_current(); ++ ++ return s->enabled_capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE]; ++} ++ + int migrate_use_xbzrle(void) + { + MigrationState *s; +diff --git a/qapi-schema.json b/qapi-schema.json +index 9302e7d..537f1d1 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -602,10 +602,13 @@ + # This feature allows us to minimize migration traffic for certain work + # loads, by sending compressed difference of the pages + # ++# @auto-converge: If enabled, QEMU will automatically throttle down the guest ++# to speed up convergence of RAM migration. (since 1.6) ++# + # Since: 1.2 + ## + { 'enum': 'MigrationCapability', +- 'data': ['xbzrle'] } ++ 'data': ['xbzrle', 'auto-converge'] } + + ## + # @MigrationCapabilityStatus diff --git a/SOURCES/kvm-misc-Disable-EFI-enabled-roms.patch b/SOURCES/kvm-misc-Disable-EFI-enabled-roms.patch new file mode 100644 index 0000000..0088d2c --- /dev/null +++ b/SOURCES/kvm-misc-Disable-EFI-enabled-roms.patch @@ -0,0 +1,115 @@ +From caebed054838182932ee76d0dda6a8478ccf3760 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 1 Aug 2013 10:02:33 +0200 +Subject: Disable EFI-enabled roms + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 52889 +O-Subject: [RHEL7 qemu-kvm PATCH v2] Disable EFI-enabled roms +Bugzilla: 962563 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny + +Bugzilla: 962563 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6115956 + +We do not ship OVMF and cannot support them therefor ipxe do not include UEFI +driver. Remove usage of EFI-enabled roms + +Note: Compatibility code is not reverted to allow cleaner backports in future. + +v2: + - rebased to 1.5.2-2 + - removing compat_props +Signed-off-by: Miroslav Rezanina + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 23002ce..e1bedec 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -812,18 +812,6 @@ static QEMUMachine pc_machine_rhel700 = { + /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */\ + .value = stringify(0xFFFFFFFF),\ + },{\ +- .driver = "e1000",\ +- .property = "romfile",\ +- .value = "pxe-e1000.rom",\ +- },{\ +- .driver = "rtl8139",\ +- .property = "romfile",\ +- .value = "pxe-rtl8139.rom",\ +- },{\ +- .driver = "virtio-net-pci",\ +- .property = "romfile",\ +- .value = "pxe-virtio.rom",\ +- },{\ + .driver = "486-" TYPE_X86_CPU,\ + .property = "model",\ + .value = stringify(0),\ +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index 661b461..76df2f3 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -1388,7 +1388,7 @@ static void e1000_class_init(ObjectClass *klass, void *data) + + k->init = pci_e1000_init; + k->exit = pci_e1000_uninit; +- k->romfile = "efi-e1000.rom"; ++ k->romfile = "pxe-e1000.rom"; + k->vendor_id = PCI_VENDOR_ID_INTEL; + k->device_id = E1000_DEVID; + k->revision = 0x03; +diff --git a/hw/net/ne2000.c b/hw/net/ne2000.c +index 33ee03e..94d6110 100644 +--- a/hw/net/ne2000.c ++++ b/hw/net/ne2000.c +@@ -766,7 +766,7 @@ static void ne2000_class_init(ObjectClass *klass, void *data) + + k->init = pci_ne2000_init; + k->exit = pci_ne2000_exit; +- k->romfile = "efi-ne2k_pci.rom", ++ k->romfile = "pxe-ne2k_pci.rom", + k->vendor_id = PCI_VENDOR_ID_REALTEK; + k->device_id = PCI_DEVICE_ID_REALTEK_8029; + k->class_id = PCI_CLASS_NETWORK_ETHERNET; +diff --git a/hw/net/pcnet-pci.c b/hw/net/pcnet-pci.c +index 9df2b87..e07f388 100644 +--- a/hw/net/pcnet-pci.c ++++ b/hw/net/pcnet-pci.c +@@ -351,7 +351,7 @@ static void pcnet_class_init(ObjectClass *klass, void *data) + + k->init = pci_pcnet_init; + k->exit = pci_pcnet_uninit; +- k->romfile = "efi-pcnet.rom", ++ k->romfile = "pxe-pcnet.rom", + k->vendor_id = PCI_VENDOR_ID_AMD; + k->device_id = PCI_DEVICE_ID_AMD_LANCE; + k->revision = 0x10; +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 7993f9f..1e5a679 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -3533,7 +3533,7 @@ static void rtl8139_class_init(ObjectClass *klass, void *data) + + k->init = pci_rtl8139_init; + k->exit = pci_rtl8139_uninit; +- k->romfile = "efi-rtl8139.rom"; ++ k->romfile = "pxe-rtl8139.rom"; + k->vendor_id = PCI_VENDOR_ID_REALTEK; + k->device_id = PCI_DEVICE_ID_REALTEK_8139; + k->revision = RTL8139_PCI_REVID; /* >=0x20 is for 8139C+ */ +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index 161ade3..d82f6ff 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -1418,7 +1418,7 @@ static void virtio_net_pci_class_init(ObjectClass *klass, void *data) + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass); + +- k->romfile = "efi-virtio.rom"; ++ k->romfile = "pxe-virtio.rom"; + k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + k->device_id = PCI_DEVICE_ID_VIRTIO_NET; + k->revision = VIRTIO_PCI_ABI_VERSION; diff --git a/SOURCES/kvm-misc-Force-auto-convegence-of-live-migration.patch b/SOURCES/kvm-misc-Force-auto-convegence-of-live-migration.patch new file mode 100644 index 0000000..82fcd3f --- /dev/null +++ b/SOURCES/kvm-misc-Force-auto-convegence-of-live-migration.patch @@ -0,0 +1,207 @@ +From b0acf414158ed72f3f2ac7550839af74b0530c8e Mon Sep 17 00:00:00 2001 +From: Nigel Croxon +Date: Wed, 31 Jul 2013 15:12:19 +0200 +Subject: Force auto-convegence of live migration + +RH-Author: Nigel Croxon +Message-id: <1375283539-18714-4-git-send-email-ncroxon@redhat.com> +Patchwork-id: 52873 +O-Subject: [RHEL7 PATCH 3/3] Force auto-convegence of live migration +Bugzilla: 985958 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Bugzilla: 985958 - Throttle-down guest to help with live migration convergence (backport to RHEL7.0) +https://bugzilla.redhat.com/show_bug.cgi?id=985958 + +Backported from the following upstream commit: + +commit 7ca1dfad952d8a8655b32e78623edcc38a51b14a +Author: Chegu Vinod +Date: Mon Jun 24 03:47:39 2013 -0600 + + Force auto-convegence of live migration + + If a user chooses to turn on the auto-converge migration capability + these changes detect the lack of convergence and throttle down the + guest. i.e. force the VCPUs out of the guest for some duration + and let the migration thread catchup and help converge. + + Verified the convergence using the following : + - Java Warehouse workload running on a 20VCPU/256G guest(~80% busy) + - OLTP like workload running on a 80VCPU/512G guest (~80% busy) + + Sample results with Java warehouse workload : (migrate speed set to 20Gb and + migrate downtime set to 4seconds). + + (qemu) info migrate + capabilities: xbzrle: off auto-converge: off <---- + Migration status: active + total time: 1487503 milliseconds + expected downtime: 519 milliseconds + transferred ram: 383749347 kbytes + remaining ram: 2753372 kbytes + total ram: 268444224 kbytes + duplicate: 65461532 pages + skipped: 64901568 pages + normal: 95750218 pages + normal bytes: 383000872 kbytes + dirty pages rate: 67551 pages + + --- + + (qemu) info migrate + capabilities: xbzrle: off auto-converge: on <---- + Migration status: completed + total time: 241161 milliseconds + downtime: 6373 milliseconds + transferred ram: 28235307 kbytes + remaining ram: 0 kbytes + total ram: 268444224 kbytes + duplicate: 64946416 pages + skipped: 64903523 pages + normal: 7044971 pages + normal bytes: 28179884 kbytes + + Signed-off-by: Chegu Vinod + Signed-off-by: Juan Quintela + +diff --git a/arch_init.c b/arch_init.c +index 522caeb..d7a5d7c 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -104,6 +104,9 @@ int graphic_depth = 15; + #endif + + const uint32_t arch_type = QEMU_ARCH; ++static bool mig_throttle_on; ++static int dirty_rate_high_cnt; ++static void check_guest_throttling(void); + + /***********************************************************/ + /* ram save/restore */ +@@ -378,8 +381,14 @@ static void migration_bitmap_sync(void) + uint64_t num_dirty_pages_init = migration_dirty_pages; + MigrationState *s = migrate_get_current(); + static int64_t start_time; ++ static int64_t bytes_xfer_prev; + static int64_t num_dirty_pages_period; + int64_t end_time; ++ int64_t bytes_xfer_now; ++ ++ if (!bytes_xfer_prev) { ++ bytes_xfer_prev = ram_bytes_transferred(); ++ } + + if (!start_time) { + start_time = qemu_get_clock_ms(rt_clock); +@@ -404,6 +413,25 @@ static void migration_bitmap_sync(void) + + /* more than 1 second = 1000 millisecons */ + if (end_time > start_time + 1000) { ++ if (migrate_auto_converge()) { ++ /* The following detection logic can be refined later. For now: ++ Check to see if the dirtied bytes is 50% more than the approx. ++ amount of bytes that just got transferred since the last time we ++ were in this routine. If that happens >N times (for now N==4) ++ we turn on the throttle down logic */ ++ bytes_xfer_now = ram_bytes_transferred(); ++ if (s->dirty_pages_rate && ++ (num_dirty_pages_period * TARGET_PAGE_SIZE > ++ (bytes_xfer_now - bytes_xfer_prev)/2) && ++ (dirty_rate_high_cnt++ > 4)) { ++ trace_migration_throttle(); ++ mig_throttle_on = true; ++ dirty_rate_high_cnt = 0; ++ } ++ bytes_xfer_prev = bytes_xfer_now; ++ } else { ++ mig_throttle_on = false; ++ } + s->dirty_pages_rate = num_dirty_pages_period * 1000 + / (end_time - start_time); + s->dirty_bytes_rate = s->dirty_pages_rate * TARGET_PAGE_SIZE; +@@ -566,6 +594,8 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + migration_bitmap = bitmap_new(ram_pages); + bitmap_set(migration_bitmap, 0, ram_pages); + migration_dirty_pages = ram_pages; ++ mig_throttle_on = false; ++ dirty_rate_high_cnt = 0; + + if (migrate_use_xbzrle()) { + XBZRLE.cache = cache_init(migrate_xbzrle_cache_size() / +@@ -628,6 +658,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) + } + total_sent += bytes_sent; + acct_info.iterations++; ++ check_guest_throttling(); + /* we want to check in the 1st loop, just in case it was the 1st time + and we had to sync the dirty bitmap. + qemu_get_clock_ns() is a bit expensive, so we only check each some +@@ -1097,3 +1128,53 @@ TargetInfo *qmp_query_target(Error **errp) + + return info; + } ++ ++/* Stub function that's gets run on the vcpu when its brought out of the ++ VM to run inside qemu via async_run_on_cpu()*/ ++static void mig_sleep_cpu(void *opq) ++{ ++ qemu_mutex_unlock_iothread(); ++ g_usleep(30*1000); ++ qemu_mutex_lock_iothread(); ++} ++ ++/* To reduce the dirty rate explicitly disallow the VCPUs from spending ++ much time in the VM. The migration thread will try to catchup. ++ Workload will experience a performance drop. ++*/ ++static void mig_throttle_cpu_down(CPUState *cpu, void *data) ++{ ++ async_run_on_cpu(cpu, mig_sleep_cpu, NULL); ++} ++ ++static void mig_throttle_guest_down(void) ++{ ++ qemu_mutex_lock_iothread(); ++ qemu_for_each_cpu(mig_throttle_cpu_down, NULL); ++ qemu_mutex_unlock_iothread(); ++} ++ ++static void check_guest_throttling(void) ++{ ++ static int64_t t0; ++ int64_t t1; ++ ++ if (!mig_throttle_on) { ++ return; ++ } ++ ++ if (!t0) { ++ t0 = qemu_get_clock_ns(rt_clock); ++ return; ++ } ++ ++ t1 = qemu_get_clock_ns(rt_clock); ++ ++ /* If it has been more than 40 ms since the last time the guest ++ * was throttled then do it again. ++ */ ++ if (40 < (t1-t0)/1000000) { ++ mig_throttle_guest_down(); ++ t0 = t1; ++ } ++} +diff --git a/trace-events b/trace-events +index 9c73931..7cd335d 100644 +--- a/trace-events ++++ b/trace-events +@@ -1031,6 +1031,7 @@ savevm_section_end(unsigned int section_id) "section_id %u" + # arch_init.c + migration_bitmap_sync_start(void) "" + migration_bitmap_sync_end(uint64_t dirty_pages) "dirty_pages %" PRIu64"" ++migration_throttle(void) "" + + # hw/qxl.c + disable qxl_interface_set_mm_time(int qid, uint32_t mm_time) "%d %d" diff --git a/SOURCES/kvm-misc-Introduce-async_run_on_cpu.patch b/SOURCES/kvm-misc-Introduce-async_run_on_cpu.patch new file mode 100644 index 0000000..6d08c2c --- /dev/null +++ b/SOURCES/kvm-misc-Introduce-async_run_on_cpu.patch @@ -0,0 +1,120 @@ +From 1666ea1986c2fdce3bc27aa96ae6bf3a632dbc99 Mon Sep 17 00:00:00 2001 +From: Nigel Croxon +Date: Wed, 31 Jul 2013 15:12:17 +0200 +Subject: Introduce async_run_on_cpu + +RH-Author: Nigel Croxon +Message-id: <1375283539-18714-2-git-send-email-ncroxon@redhat.com> +Patchwork-id: 52874 +O-Subject: [RHEL7 PATCH 1/3] Introduce async_run_on_cpu +Bugzilla: 985958 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Bugzilla: 985958 - Throttle-down guest to help with live migration convergence (backport to RHEL7.0) +https://bugzilla.redhat.com/show_bug.cgi?id=985958 + +Backported from the following upstream commit: + +commit 3c02270db980007424d797506301826310ce2db4 +Author: Chegu Vinod +Date: Mon Jun 24 03:49:41 2013 -0600 + + Introduce async_run_on_cpu() + + Introduce an asynchronous version of run_on_cpu() i.e. the caller + doesn't have to block till the call back routine finishes execution + on the target vcpu. + + Signed-off-by: Chegu Vinod + Reviewed-by: Paolo Bonzini + Signed-off-by: Juan Quintela + +diff --git a/cpus.c b/cpus.c +index c232265..8cd4eab 100644 +--- a/cpus.c ++++ b/cpus.c +@@ -653,6 +653,7 @@ void run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data) + + wi.func = func; + wi.data = data; ++ wi.free = false; + if (cpu->queued_work_first == NULL) { + cpu->queued_work_first = &wi; + } else { +@@ -671,6 +672,31 @@ void run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data) + } + } + ++void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data) ++{ ++ struct qemu_work_item *wi; ++ ++ if (qemu_cpu_is_self(cpu)) { ++ func(data); ++ return; ++ } ++ ++ wi = g_malloc0(sizeof(struct qemu_work_item)); ++ wi->func = func; ++ wi->data = data; ++ wi->free = true; ++ if (cpu->queued_work_first == NULL) { ++ cpu->queued_work_first = wi; ++ } else { ++ cpu->queued_work_last->next = wi; ++ } ++ cpu->queued_work_last = wi; ++ wi->next = NULL; ++ wi->done = false; ++ ++ qemu_cpu_kick(cpu); ++} ++ + static void flush_queued_work(CPUState *cpu) + { + struct qemu_work_item *wi; +@@ -683,6 +709,9 @@ static void flush_queued_work(CPUState *cpu) + cpu->queued_work_first = wi->next; + wi->func(wi->data); + wi->done = true; ++ if (wi->free) { ++ g_free(wi); ++ } + } + cpu->queued_work_last = NULL; + qemu_cond_broadcast(&qemu_work_cond); +diff --git a/include/qemu-common.h b/include/qemu-common.h +index 3b1ca8e..73c6419 100644 +--- a/include/qemu-common.h ++++ b/include/qemu-common.h +@@ -288,6 +288,7 @@ struct qemu_work_item { + void (*func)(void *data); + void *data; + int done; ++ bool free; + }; + + #ifdef CONFIG_USER_ONLY +diff --git a/include/qom/cpu.h b/include/qom/cpu.h +index 7cd9442..46465e9 100644 +--- a/include/qom/cpu.h ++++ b/include/qom/cpu.h +@@ -265,6 +265,16 @@ bool cpu_is_stopped(CPUState *cpu); + void run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data); + + /** ++ * async_run_on_cpu: ++ * @cpu: The vCPU to run on. ++ * @func: The function to be executed. ++ * @data: Data to pass to the function. ++ * ++ * Schedules the function @func for execution on the vCPU @cpu asynchronously. ++ */ ++void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data); ++ ++/** + * qemu_for_each_cpu: + * @func: The function to be executed. + * @data: Data to pass to the function. diff --git a/SOURCES/kvm-misc-add-qxl_screendump-monitor-command.patch b/SOURCES/kvm-misc-add-qxl_screendump-monitor-command.patch new file mode 100644 index 0000000..fe065f6 --- /dev/null +++ b/SOURCES/kvm-misc-add-qxl_screendump-monitor-command.patch @@ -0,0 +1,160 @@ +From b0abe7c2c3873172eee6020c49ca3a44567bb645 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 7 Aug 2013 09:12:44 +0200 +Subject: add qxl_screendump monitor command + +RH-Author: Gerd Hoffmann +Message-id: <1375866764-17766-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 53033 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] add qxl_screendump monitor command +Bugzilla: 903910 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny + +This patch ports the rhel-6 specific qxl_screendump command to rhel-7. +qxl_screendump takes the device id as additional argument and thus can +be used to take screenshots from non-primary displays. + +The plan to get that functionality upstream in time failed, so we go for +plan b and carry forward the rhel-6 specific qxl_screendump command. +Thanks to the major console subsystem cleanups which made it upstream +the implementation is (a) alot less hackier than the rhel-6 one and (b) +not qxl-specific any more. Given that qxl is the only graphic device +which can work as secondary vga card the later is only a theoretical +benefit though ;) + +RHEL-6 commit: 1c6074d107dff93c7c7b0edfb5da871504802946 + +bugzilla: #903910 - RHEL7 does not have equivalent functionality for + __com.redhat_qxl_screendump + +Signed-off-by: Gerd Hoffmann + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 4f5a3fd..5cd6368 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -242,6 +242,13 @@ ETEXI + .help = "save screen into PPM image 'filename'", + .mhandler.cmd = hmp_screen_dump, + }, ++ { ++ .name = "__com.redhat_qxl_screendump", ++ .args_type = "id:s,filename:F", ++ .params = "id filename", ++ .help = "save screen from qxl device 'id' into PPM image 'filename'", ++ .mhandler.cmd = hmp___com_redhat_qxl_screen_dump, ++ }, + + STEXI + @item screendump @var{filename} +diff --git a/hmp.c b/hmp.c +index 4fb76ec..3b3e7c7 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -1328,6 +1328,16 @@ void hmp_screen_dump(Monitor *mon, const QDict *qdict) + hmp_handle_error(mon, &err); + } + ++void hmp___com_redhat_qxl_screen_dump(Monitor *mon, const QDict *qdict) ++{ ++ const char *id = qdict_get_str(qdict, "id"); ++ const char *filename = qdict_get_str(qdict, "filename"); ++ Error *err = NULL; ++ ++ qmp___com_redhat_qxl_screendump(id, filename, &err); ++ hmp_handle_error(mon, &err); ++} ++ + void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) + { + const char *uri = qdict_get_str(qdict, "uri"); +diff --git a/hmp.h b/hmp.h +index 95fe76e..9b2c9ce 100644 +--- a/hmp.h ++++ b/hmp.h +@@ -80,6 +80,7 @@ void hmp_getfd(Monitor *mon, const QDict *qdict); + void hmp_closefd(Monitor *mon, const QDict *qdict); + void hmp_send_key(Monitor *mon, const QDict *qdict); + void hmp_screen_dump(Monitor *mon, const QDict *qdict); ++void hmp___com_redhat_qxl_screen_dump(Monitor *mon, const QDict *qdict); + void hmp_nbd_server_start(Monitor *mon, const QDict *qdict); + void hmp_nbd_server_add(Monitor *mon, const QDict *qdict); + void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); +diff --git a/qapi-schema.json b/qapi-schema.json +index 537f1d1..54a802d 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -3123,6 +3123,21 @@ + { 'command': 'screendump', 'data': {'filename': 'str'} } + + ## ++# @__com.redhat_qxl_screendump: ++# ++# Write a PPM of secondary qxl devices to a file. ++# ++# @id: qxl device id ++# @filename: the path of a new PPM file to store the image ++# ++# Returns: Nothing on success ++# ++# Since: never (rhel-only, not upstream) ++## ++{ 'command': '__com.redhat_qxl_screendump', 'data': { 'id' : 'str', ++ 'filename': 'str' } } ++ ++## + # @nbd-server-start: + # + # Start an NBD server listening on the given host and port. Block +diff --git a/qmp-commands.hx b/qmp-commands.hx +index ffd130e..de5f394 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -148,6 +148,11 @@ EQMP + .args_type = "filename:F", + .mhandler.cmd_new = qmp_marshal_input_screendump, + }, ++ { ++ .name = "__com.redhat_qxl_screendump", ++ .args_type = "id:s,filename:F", ++ .mhandler.cmd_new = qmp_marshal_input___com_redhat_qxl_screendump, ++ }, + + SQMP + screendump +diff --git a/ui/console.c b/ui/console.c +index 28bba6d..d422083 100644 +--- a/ui/console.c ++++ b/ui/console.c +@@ -328,6 +328,29 @@ void qmp_screendump(const char *filename, Error **errp) + ppm_save(filename, surface, errp); + } + ++void qmp___com_redhat_qxl_screendump(const char *id, const char *filename, Error **errp) ++{ ++ DeviceState *dev; ++ QemuConsole *con; ++ DisplaySurface *surface; ++ ++ dev = qdev_find_recursive(sysbus_get_default(), id); ++ if (NULL == dev) { ++ error_set(errp, QERR_DEVICE_NOT_FOUND, id); ++ return; ++ } ++ ++ con = qemu_console_lookup_by_device(dev); ++ if (con == NULL) { ++ error_setg(errp, "Device %s has no QemuConsole attached to it.", id); ++ return; ++ } ++ ++ graphic_hw_update(con); ++ surface = qemu_console_surface(con); ++ ppm_save(filename, surface, errp); ++} ++ + void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata) + { + if (!con) { diff --git a/SOURCES/kvm-misc-qga-fsfreeze-main-hook-adapt-to-RHEL-7-RH-only.patch b/SOURCES/kvm-misc-qga-fsfreeze-main-hook-adapt-to-RHEL-7-RH-only.patch new file mode 100644 index 0000000..3657454 --- /dev/null +++ b/SOURCES/kvm-misc-qga-fsfreeze-main-hook-adapt-to-RHEL-7-RH-only.patch @@ -0,0 +1,78 @@ +From e936dcde086c84c08102f821c99381005acd272a Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 22:15:05 +0200 +Subject: qga fsfreeze main hook: adapt to RHEL-7 (RH only) + +RH-Author: Laszlo Ersek +Message-id: <1375308906-23405-3-git-send-email-lersek@redhat.com> +Patchwork-id: 52885 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 2/3] qga fsfreeze main hook: adapt to RHEL-7 (RH only) +Bugzilla: 969942 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michal Novotny +RH-Acked-by: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=969942 + +LOGFILE should look like it does on RHEL-6. + +The main fsfreeze script should process hook files like systemd does +[Paolo]. + +Signed-off-by: Laszlo Ersek + +diff --git a/scripts/qemu-guest-agent/fsfreeze-hook b/scripts/qemu-guest-agent/fsfreeze-hook +index c27b29f..45514fa 100755 +--- a/scripts/qemu-guest-agent/fsfreeze-hook ++++ b/scripts/qemu-guest-agent/fsfreeze-hook +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + # This script is executed when a guest agent receives fsfreeze-freeze and + # fsfreeze-thaw command, if it is specified in --fsfreeze-hook (-F) +@@ -7,8 +7,7 @@ + # "freeze" argument before the filesystem is frozen. And for fsfreeze-thaw + # request, it is issued with "thaw" argument after filesystem is thawed. + +-LOGFILE=/var/log/qga-fsfreeze-hook.log +-FSFREEZE_D=$(dirname -- "$0")/fsfreeze-hook.d ++LOGFILE=/var/log/qemu-ga.fsfreeze-hook.log + + # Check whether file $1 is a backup or rpm-generated file and should be ignored + is_ignored_file() { +@@ -19,15 +18,26 @@ is_ignored_file() { + return 1 + } + +-# Iterate executables in directory "fsfreeze-hook.d" with the specified args +-[ ! -d "$FSFREEZE_D" ] && exit 0 +-for file in "$FSFREEZE_D"/* ; do +- is_ignored_file "$file" && continue +- [ -x "$file" ] || continue +- printf "$(date): execute $file $@\n" >>$LOGFILE +- "$file" "$@" >>$LOGFILE 2>&1 ++shopt -s nullglob ++RELPATH=qemu-ga/fsfreeze-hook.d ++ ++for DIR in lib etc run; do ++ for FILE in /"$DIR/$RELPATH"/*; do ++ if is_ignored_file "$FILE" || ! [ -x "$FILE" ]; then ++ continue ++ fi ++ BNAME=$(basename -- "$FILE") ++ if ( [ lib = "$DIR" ] && ( [ -e /etc/"$RELPATH/$BNAME" ] || ++ [ -e /run/"$RELPATH/$BNAME" ] ) ) || ++ ( [ etc = "$DIR" ] && ( [ -e /run/"$RELPATH/$BNAME" ] ) ); then ++ continue ++ fi ++ ++ printf "$(date): execute $FILE $@\n" >>$LOGFILE ++ "$FILE" "$@" >>$LOGFILE 2>&1 + STATUS=$? +- printf "$(date): $file finished with status=$STATUS\n" >>$LOGFILE ++ printf "$(date): $FILE finished with status=$STATUS\n" >>$LOGFILE ++ done + done + + exit 0 diff --git a/SOURCES/kvm-monitor-Cleanup-mon-outbuf-on-write-error.patch b/SOURCES/kvm-monitor-Cleanup-mon-outbuf-on-write-error.patch new file mode 100644 index 0000000..f1884c6 --- /dev/null +++ b/SOURCES/kvm-monitor-Cleanup-mon-outbuf-on-write-error.patch @@ -0,0 +1,57 @@ +From f917e135d99ab0749ab747b3abce45e78de8c479 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 14 Feb 2014 08:27:07 +0100 +Subject: [PATCH 3/3] monitor: Cleanup mon->outbuf on write error + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 57275 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 1/1] monitor: Cleanup mon->outbuf on write error +Bugzilla: 1065225 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Luiz Capitulino + +From: Stratos Psomadakis + +In case monitor_flush() fails to write the contents of mon->outbuf to +the output device, mon->outbuf is not cleaned up properly. Check the +return code of the qemu_chr_fe_write() function and cleanup the outbuf +if it fails. + +References: http://lists.nongnu.org/archive/html/qemu-devel/2014-01/msg02890.html + +Bugzilla: 1065225 + +Signed-off-by: Stratos Psomadakis +Signed-off-by: Dimitris Aragiorgis +Signed-off-by: Luiz Capitulino +(cherry picked from commit 056f49ff2cf645dc484956b00b65a3aa18a1a9a3) +Signed-off-by: Amit Shah +--- + monitor.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + monitor.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/monitor.c b/monitor.c +index 8f36f91..a6abfb5 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -287,8 +287,8 @@ void monitor_flush(Monitor *mon) + + if (len && !mon->mux_out) { + rc = qemu_chr_fe_write(mon->chr, (const uint8_t *) buf, len); +- if (rc == len) { +- /* all flushed */ ++ if ((rc < 0 && errno != EAGAIN) || (rc == len)) { ++ /* all flushed or error */ + QDECREF(mon->outbuf); + mon->outbuf = qstring_new(); + return; +-- +1.7.1 + diff --git a/SOURCES/kvm-monitor-Remove-host_net_add-remove-for-Red-Hat-Enter.patch b/SOURCES/kvm-monitor-Remove-host_net_add-remove-for-Red-Hat-Enter.patch new file mode 100644 index 0000000..b244126 --- /dev/null +++ b/SOURCES/kvm-monitor-Remove-host_net_add-remove-for-Red-Hat-Enter.patch @@ -0,0 +1,59 @@ +From 35ba7fa1285b9350fe4f9507b314ef11b74064eb Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 6 Nov 2013 12:36:04 +0100 +Subject: [PATCH 69/81] monitor: Remove host_net_add/remove for Red Hat Enterprise Linux + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 55519 +O-Subject: [RHEL7 qemu-kvm PATCH v2 4/4] monitor: Remove host_net_add/remove for Red Hat Enterprise Linux +Bugzilla: 1010858 +RH-Acked-by: Michal Novotny +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Eric Blake + +From: Miroslav Rezanina + +This is forwardport of RHEL-6 commit dd94505bd1b826db0c7e155ccee5c24f77987f16: + + monitor: Remove host_net_add/remove for Red Hat Enterprise Linux + + The host_net_add/remove commands are replaced by netdev_add/del. Remove + them. + + Signed-off-by: Amit Shah + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 74774bd..c881e01 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1148,6 +1148,7 @@ STEXI + Inject PCIe AER error + ETEXI + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "host_net_add", + .args_type = "device:s,opts:s?", +@@ -1175,6 +1176,7 @@ STEXI + @findex host_net_remove + Remove host VLAN client. + ETEXI ++#endif + + { + .name = "netdev_add", +-- +1.7.1 + diff --git a/SOURCES/kvm-monitor-Remove-pci_add-command-for-Red-Hat-Enterpris.patch b/SOURCES/kvm-monitor-Remove-pci_add-command-for-Red-Hat-Enterpris.patch new file mode 100644 index 0000000..d53b3b2 --- /dev/null +++ b/SOURCES/kvm-monitor-Remove-pci_add-command-for-Red-Hat-Enterpris.patch @@ -0,0 +1,52 @@ +From 21aa0c54586f48e3fe51c71138b853977a4d8a66 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 6 Nov 2013 12:36:01 +0100 +Subject: [PATCH 66/81] monitor: Remove pci_add command for Red Hat Enterprise Linux + +RH-Author: Miroslav Rezanina +Message-id: <2e280a8060b33499eae1704843285ceb7f602470.1383741033.git.mrezanin@redhat.com> +Patchwork-id: 55518 +O-Subject: [RHEL7 qemu-kvm PATCH v2 1/4] monitor: Remove pci_add command for Red Hat Enterprise Linux +Bugzilla: 1010858 +RH-Acked-by: Michal Novotny +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Eric Blake + +From: Miroslav Rezanina + +This is forwardport of RHEL-6 commit 22aef6c9882ac60bcf3df98e67c4b9b729a90707: + + monitor: Remove pci_add command for Red Hat Enterprise Linux + + pci_add is the old way of hot-plugging pci (nic or storage) devices. + The newer device_add is the recommended and suggested command. + + Signed-off-by: Amit Shah + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 2fc2c0b..d5ec349 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1089,7 +1089,7 @@ STEXI + Add drive to PCI storage controller. + ETEXI + +-#if defined(TARGET_I386) ++#if defined(TARGET_I386) && 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "pci_add", + .args_type = "pci_addr:s,type:s,opts:s?", +-- +1.7.1 + diff --git a/SOURCES/kvm-monitor-Remove-pci_del-command-for-Red-Hat-Enterpris.patch b/SOURCES/kvm-monitor-Remove-pci_del-command-for-Red-Hat-Enterpris.patch new file mode 100644 index 0000000..30f809b --- /dev/null +++ b/SOURCES/kvm-monitor-Remove-pci_del-command-for-Red-Hat-Enterpris.patch @@ -0,0 +1,52 @@ +From 8ab120f6ad6629e826ded6d8f910c91f441bafd4 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 6 Nov 2013 12:36:02 +0100 +Subject: [PATCH 67/81] monitor: Remove pci_del command for Red Hat Enterprise Linux + +RH-Author: Miroslav Rezanina +Message-id: <6e7cc8214fdc2fd6a95a7446c667bf36fc13f3ce.1383741033.git.mrezanin@redhat.com> +Patchwork-id: 55517 +O-Subject: [RHEL7 qemu-kvm PATCH v2 2/4] monitor: Remove pci_del command for Red Hat Enterprise Linux +Bugzilla: 1010858 +RH-Acked-by: Michal Novotny +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Eric Blake + +From: Miroslav Rezanina + +This is forwardport of RHEL-6 commit 609b9f16a7443e86e55a3cdc76a484253e50267b: + + monitor: Remove pci_del command for Red Hat Enterprise Linux + + pci_del is the old way of hot-unplugging pci (nic or storage) devices. + The newer device_del is the recommended and suggested command. + + Signed-off-by: Amit Shah + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index d5ec349..14ba536 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -1105,7 +1105,7 @@ STEXI + Hot-add PCI device. + ETEXI + +-#if defined(TARGET_I386) ++#if defined(TARGET_I386) && 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "pci_del", + .args_type = "pci_addr:s", +-- +1.7.1 + diff --git a/SOURCES/kvm-monitor-Remove-usb_add-del-commands-for-Red-Hat-Ente.patch b/SOURCES/kvm-monitor-Remove-usb_add-del-commands-for-Red-Hat-Ente.patch new file mode 100644 index 0000000..13c2e78 --- /dev/null +++ b/SOURCES/kvm-monitor-Remove-usb_add-del-commands-for-Red-Hat-Ente.patch @@ -0,0 +1,59 @@ +From a1ee2aaadfe464751e42b795d9800c6e04332029 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 6 Nov 2013 12:36:03 +0100 +Subject: [PATCH 68/81] monitor: Remove usb_add/del commands for Red Hat Enterprise Linux + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 55520 +O-Subject: [RHEL7 qemu-kvm PATCH v2 3/4] monitor: Remove usb_add/del commands for Red Hat Enterprise Linux +Bugzilla: 1010858 +RH-Acked-by: Michal Novotny +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Eric Blake + +From: Miroslav Rezanina + +This is forwardport of RHEL-6 commit 754e6292b4ab41c8848171555af830ab7284f4d3: + + monitor: Remove usb_add/del commands for Red Hat Enterprise Linux + + The usb_add/del commands have been obsoleted by the device_add/del + commands. + + Signed-off-by: Amit Shah + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hmp-commands.hx | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hmp-commands.hx b/hmp-commands.hx +index 14ba536..74774bd 100644 +--- a/hmp-commands.hx ++++ b/hmp-commands.hx +@@ -621,6 +621,7 @@ STEXI + Compute the checksum of a memory region. + ETEXI + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + { + .name = "usb_add", + .args_type = "devname:s", +@@ -653,6 +654,7 @@ Remove the USB device @var{devname} from the QEMU virtual USB + hub. @var{devname} has the syntax @code{bus.addr}. Use the monitor + command @code{info usb} to see the devices you can remove. + ETEXI ++#endif + + { + .name = "device_add", +-- +1.7.1 + diff --git a/SOURCES/kvm-monitor-maintain-at-most-one-G_IO_OUT-watch.patch b/SOURCES/kvm-monitor-maintain-at-most-one-G_IO_OUT-watch.patch new file mode 100644 index 0000000..fb2c407 --- /dev/null +++ b/SOURCES/kvm-monitor-maintain-at-most-one-G_IO_OUT-watch.patch @@ -0,0 +1,75 @@ +From 6d8b03e0e91a58a0b276e76363e0c836827c9a49 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Fri, 19 Jul 2013 13:05:23 +0200 +Subject: monitor: maintain at most one G_IO_OUT watch + +RH-Author: Laszlo Ersek +Message-id: <1374239123-4841-3-git-send-email-lersek@redhat.com> +Patchwork-id: 52616 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] monitor: maintain at most one G_IO_OUT watch +Bugzilla: 970047 +RH-Acked-by: Amit Shah +RH-Acked-by: Markus Armbruster +RH-Acked-by: Luiz Capitulino + +When monitor_flush() is invoked repeatedly outside the monitor_unblocked() +callback, for example from tlb_info() -> ... -> print_pte(), several +watches may be added for the same event. + +This is no problem per se because the extra monitor_unblocked() callbacks +are harmless if mon->outbuf is empty, the watches will be removed +gradually. However a big number of watches can grow "gpollfds" without +limit in glib_pollfds_fill(), triggering a -1/EINVAL condition in +g_poll(). + +Keep at most one such watch, by following the pattern observable in eg. +commits c874ea97 and c3d6b96e. The change has no effect when +monitor_unblocked() calls monitor_flush() (when the watch can either be +removed or renewed 1-for-1), but non-callback contexts won't create an +additional watch when the monitor already has one. + +Related RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=970047 + +Signed-off-by: Laszlo Ersek +Reviewed-by: Amit Shah +Reviewed-by: Anthony Liguori +Message-id: 1373998781-29561-3-git-send-email-lersek@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 293d2a0014a0e849477413f55aaa05f2743b2e04) + +diff --git a/monitor.c b/monitor.c +index dee980c..deb0dc8 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -190,6 +190,7 @@ struct Monitor { + int suspend_cnt; + bool skip_flush; + QString *outbuf; ++ guint watch; + ReadLineState *rs; + MonitorControl *mc; + CPUArchState *mon_cpu; +@@ -264,7 +265,10 @@ int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func, + static gboolean monitor_unblocked(GIOChannel *chan, GIOCondition cond, + void *opaque) + { +- monitor_flush(opaque); ++ Monitor *mon = opaque; ++ ++ mon->watch = 0; ++ monitor_flush(mon); + return FALSE; + } + +@@ -295,7 +299,10 @@ void monitor_flush(Monitor *mon) + QDECREF(mon->outbuf); + mon->outbuf = tmp; + } +- qemu_chr_fe_add_watch(mon->chr, G_IO_OUT, monitor_unblocked, mon); ++ if (mon->watch == 0) { ++ mon->watch = qemu_chr_fe_add_watch(mon->chr, G_IO_OUT, ++ monitor_unblocked, mon); ++ } + } + } + diff --git a/SOURCES/kvm-multiboot-Check-validity-of-mh_header_addr.patch b/SOURCES/kvm-multiboot-Check-validity-of-mh_header_addr.patch new file mode 100644 index 0000000..98f279e --- /dev/null +++ b/SOURCES/kvm-multiboot-Check-validity-of-mh_header_addr.patch @@ -0,0 +1,45 @@ +From 9ea892729b9c77eaf7b923da8a3e370dbb022e6e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Jul 2018 16:24:48 +0200 +Subject: [PATCH 6/8] multiboot: Check validity of mh_header_addr + +RH-Author: Kevin Wolf +Message-id: <20180726162448.22072-7-kwolf@redhat.com> +Patchwork-id: 81515 +O-Subject: [RHEL-7.6/7.5.z qemu-kvm PATCH 6/6] multiboot: Check validity of mh_header_addr +Bugzilla: 1549822 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +I couldn't find a case where this prevents something bad from happening +that isn't already caught by other checks, but let's err on the safe +side and check that mh_header_addr is as expected. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jack Schwartz +(cherry picked from commit dbf2dce7aabb7723542bd182175904846d70b0f9) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index 6f489a5..e1f6e56 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -208,6 +208,10 @@ int load_multiboot(FWCfgState *fw_cfg, + error_report("invalid load_addr address"); + exit(1); + } ++ if (mh_header_addr - mh_load_addr > i) { ++ error_report("invalid header_addr address"); ++ exit(1); ++ } + + uint32_t mb_kernel_text_offset = i - (mh_header_addr - mh_load_addr); + uint32_t mb_load_size = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-multiboot-Reject-kernels-exceeding-the-address-space.patch b/SOURCES/kvm-multiboot-Reject-kernels-exceeding-the-address-space.patch new file mode 100644 index 0000000..f284cd8 --- /dev/null +++ b/SOURCES/kvm-multiboot-Reject-kernels-exceeding-the-address-space.patch @@ -0,0 +1,52 @@ +From 7ca60898ccb2e1dc5e47dca5d53eb42922a0a0bc Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Jul 2018 16:24:47 +0200 +Subject: [PATCH 5/8] multiboot: Reject kernels exceeding the address space + +RH-Author: Kevin Wolf +Message-id: <20180726162448.22072-6-kwolf@redhat.com> +Patchwork-id: 81514 +O-Subject: [RHEL-7.6/7.5.z qemu-kvm PATCH 5/6] multiboot: Reject kernels exceeding the address space +Bugzilla: 1549822 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +The code path where mh_load_end_addr is non-zero in the Multiboot +header checks that mh_load_end_addr >= mh_load_addr and so +mb_load_size is checked. However, mb_load_size is not checked when +calculated from the file size, when mh_load_end_addr is 0. + +If the kernel binary size is larger than can fit in the address space +after load_addr, we ended up with a kernel_size that is smaller than +load_size, which means that we read the file into a too small buffer. + +Add a check to reject kernel files with such Multiboot headers. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jack Schwartz +(cherry picked from commit b17a9054a0652a1481be48a6729e972abf02412f) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index 56889e8..6f489a5 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -226,6 +226,10 @@ int load_multiboot(FWCfgState *fw_cfg, + } + mb_load_size = kernel_file_size - mb_kernel_text_offset; + } ++ if (mb_load_size > UINT32_MAX - mh_load_addr) { ++ error_report("kernel does not fit in address space"); ++ exit(1); ++ } + if (mh_bss_end_addr) { + if (mh_bss_end_addr < (mh_load_addr + mb_load_size)) { + error_report("invalid bss_end_addr address"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-multiboot-Remove-unused-variables-from-multiboot.c.patch b/SOURCES/kvm-multiboot-Remove-unused-variables-from-multiboot.c.patch new file mode 100644 index 0000000..71c6fde --- /dev/null +++ b/SOURCES/kvm-multiboot-Remove-unused-variables-from-multiboot.c.patch @@ -0,0 +1,49 @@ +From 863255a5677066edbfb2833372804284a64831d3 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Jul 2018 16:24:44 +0200 +Subject: [PATCH 2/8] multiboot: Remove unused variables from multiboot.c + +RH-Author: Kevin Wolf +Message-id: <20180726162448.22072-3-kwolf@redhat.com> +Patchwork-id: 81516 +O-Subject: [RHEL-7.6/7.5.z qemu-kvm PATCH 2/6] multiboot: Remove unused variables from multiboot.c +Bugzilla: 1549822 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +From: Jack Schwartz + +Remove unused variables: mh_mode_type, mh_width, mh_height, mh_depth + +Signed-off-by: Jack Schwartz +Reviewed-by: Daniel Kiper +Reviewed-by: Prasad J Pandit +Signed-off-by: Kevin Wolf +(cherry picked from commit 7a2e43cc96fd017883973caf9ee076ae23a3bebd) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index 9a9a2e1..ee2ebd1 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -234,12 +234,6 @@ int load_multiboot(FWCfgState *fw_cfg, + mb_kernel_size = mb_load_size; + } + +- /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE. +- uint32_t mh_mode_type = ldl_p(header+i+32); +- uint32_t mh_width = ldl_p(header+i+36); +- uint32_t mh_height = ldl_p(header+i+40); +- uint32_t mh_depth = ldl_p(header+i+44); */ +- + mb_debug("multiboot: mh_header_addr = %#x\n", mh_header_addr); + mb_debug("multiboot: mh_load_addr = %#x\n", mh_load_addr); + mb_debug("multiboot: mh_load_end_addr = %#x\n", mh_load_end_addr); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-multiboot-Use-header-names-when-displaying-fields.patch b/SOURCES/kvm-multiboot-Use-header-names-when-displaying-fields.patch new file mode 100644 index 0000000..2d4fda3 --- /dev/null +++ b/SOURCES/kvm-multiboot-Use-header-names-when-displaying-fields.patch @@ -0,0 +1,86 @@ +From 0bd67b62f13b15c36fa66304fffd70d01382e234 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Jul 2018 16:24:45 +0200 +Subject: [PATCH 3/8] multiboot: Use header names when displaying fields + +RH-Author: Kevin Wolf +Message-id: <20180726162448.22072-4-kwolf@redhat.com> +Patchwork-id: 81520 +O-Subject: [RHEL-7.6/7.5.z qemu-kvm PATCH 3/6] multiboot: Use header names when displaying fields +Bugzilla: 1549822 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +From: Jack Schwartz + +Refer to field names when displaying fields in printf and debug statements. + +Signed-off-by: Jack Schwartz +Reviewed-by: Daniel Kiper +Signed-off-by: Kevin Wolf +(cherry picked from commit ce5eb6dc4dc5652f7e360a1db817f1d5dafab90f) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index ee2ebd1..c4a361f 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -203,7 +203,7 @@ int load_multiboot(FWCfgState *fw_cfg, + + mh_load_addr = ldl_p(header+i+16); + if (mh_header_addr < mh_load_addr) { +- fprintf(stderr, "invalid mh_load_addr address\n"); ++ fprintf(stderr, "invalid load_addr address\n"); + exit(1); + } + +@@ -213,7 +213,7 @@ int load_multiboot(FWCfgState *fw_cfg, + + if (mh_load_end_addr) { + if (mh_load_end_addr < mh_load_addr) { +- fprintf(stderr, "invalid mh_load_end_addr address\n"); ++ fprintf(stderr, "invalid load_end_addr address\n"); + exit(1); + } + mb_load_size = mh_load_end_addr - mh_load_addr; +@@ -226,7 +226,7 @@ int load_multiboot(FWCfgState *fw_cfg, + } + if (mh_bss_end_addr) { + if (mh_bss_end_addr < (mh_load_addr + mb_load_size)) { +- fprintf(stderr, "invalid mh_bss_end_addr address\n"); ++ fprintf(stderr, "invalid bss_end_addr address\n"); + exit(1); + } + mb_kernel_size = mh_bss_end_addr - mh_load_addr; +@@ -234,10 +234,10 @@ int load_multiboot(FWCfgState *fw_cfg, + mb_kernel_size = mb_load_size; + } + +- mb_debug("multiboot: mh_header_addr = %#x\n", mh_header_addr); +- mb_debug("multiboot: mh_load_addr = %#x\n", mh_load_addr); +- mb_debug("multiboot: mh_load_end_addr = %#x\n", mh_load_end_addr); +- mb_debug("multiboot: mh_bss_end_addr = %#x\n", mh_bss_end_addr); ++ mb_debug("multiboot: header_addr = %#x\n", mh_header_addr); ++ mb_debug("multiboot: load_addr = %#x\n", mh_load_addr); ++ mb_debug("multiboot: load_end_addr = %#x\n", mh_load_end_addr); ++ mb_debug("multiboot: bss_end_addr = %#x\n", mh_bss_end_addr); + mb_debug("qemu: loading multiboot kernel (%#x bytes) at %#x\n", + mb_load_size, mh_load_addr); + +@@ -335,7 +335,7 @@ int load_multiboot(FWCfgState *fw_cfg, + stl_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the -boot switch? */ + stl_p(bootinfo + MBI_MMAP_ADDR, ADDR_E820_MAP); + +- mb_debug("multiboot: mh_entry_addr = %#x\n", mh_entry_addr); ++ mb_debug("multiboot: entry_addr = %#x\n", mh_entry_addr); + mb_debug(" mb_buf_phys = "TARGET_FMT_plx"\n", mbs.mb_buf_phys); + mb_debug(" mod_start = "TARGET_FMT_plx"\n", mbs.mb_buf_phys + mbs.offset_mods); + mb_debug(" mb_mods_count = %d\n", mbs.mb_mods_count); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-multiboot-bss_end_addr-can-be-zero.patch b/SOURCES/kvm-multiboot-bss_end_addr-can-be-zero.patch new file mode 100644 index 0000000..fe43002 --- /dev/null +++ b/SOURCES/kvm-multiboot-bss_end_addr-can-be-zero.patch @@ -0,0 +1,72 @@ +From 758b4f721ba664f383bd234458f78984f22823b6 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Jul 2018 16:24:43 +0200 +Subject: [PATCH 1/8] multiboot: bss_end_addr can be zero + +RH-Author: Kevin Wolf +Message-id: <20180726162448.22072-2-kwolf@redhat.com> +Patchwork-id: 81517 +O-Subject: [RHEL-7.6/7.5.z qemu-kvm PATCH 1/6] multiboot: bss_end_addr can be zero +Bugzilla: 1549822 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +From: Jack Schwartz + +The multiboot spec (https://www.gnu.org/software/grub/manual/multiboot/), +section 3.1.3, allows for bss_end_addr to be zero. + +A zero bss_end_addr signifies there is no .bss section. + +Suggested-by: Daniel Kiper +Signed-off-by: Jack Schwartz +Reviewed-by: Daniel Kiper +Reviewed-by: Prasad J Pandit +Signed-off-by: Kevin Wolf +(cherry picked from commit 2a8fcd119eb7c6bb3837fc3669eb1b2dfb31daf8) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index 7eec230..9a9a2e1 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -212,12 +212,6 @@ int load_multiboot(FWCfgState *fw_cfg, + mh_entry_addr = ldl_p(header+i+28); + + if (mh_load_end_addr) { +- if (mh_bss_end_addr < mh_load_addr) { +- fprintf(stderr, "invalid mh_bss_end_addr address\n"); +- exit(1); +- } +- mb_kernel_size = mh_bss_end_addr - mh_load_addr; +- + if (mh_load_end_addr < mh_load_addr) { + fprintf(stderr, "invalid mh_load_end_addr address\n"); + exit(1); +@@ -228,8 +222,16 @@ int load_multiboot(FWCfgState *fw_cfg, + fprintf(stderr, "invalid kernel_file_size\n"); + exit(1); + } +- mb_kernel_size = kernel_file_size - mb_kernel_text_offset; +- mb_load_size = mb_kernel_size; ++ mb_load_size = kernel_file_size - mb_kernel_text_offset; ++ } ++ if (mh_bss_end_addr) { ++ if (mh_bss_end_addr < (mh_load_addr + mb_load_size)) { ++ fprintf(stderr, "invalid mh_bss_end_addr address\n"); ++ exit(1); ++ } ++ mb_kernel_size = mh_bss_end_addr - mh_load_addr; ++ } else { ++ mb_kernel_size = mb_load_size; + } + + /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_VBE. +-- +1.8.3.1 + diff --git a/SOURCES/kvm-multiboot-fprintf-stderr.-error_report.patch b/SOURCES/kvm-multiboot-fprintf-stderr.-error_report.patch new file mode 100644 index 0000000..e8cc4ae --- /dev/null +++ b/SOURCES/kvm-multiboot-fprintf-stderr.-error_report.patch @@ -0,0 +1,202 @@ +From a6a1a4a3a9890749501a2a22f6883397a8579b60 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 26 Jul 2018 16:24:46 +0200 +Subject: [PATCH 4/8] multiboot: fprintf(stderr...) -> error_report() + +RH-Author: Kevin Wolf +Message-id: <20180726162448.22072-5-kwolf@redhat.com> +Patchwork-id: 81519 +O-Subject: [RHEL-7.6/7.5.z qemu-kvm PATCH 4/6] multiboot: fprintf(stderr...) -> error_report() +Bugzilla: 1549822 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +From: Jack Schwartz + +Change all fprintf(stderr...) calls in hw/i386/multiboot.c to call +error_report() instead, including the mb_debug macro. Remove the "\n" +from strings passed to all modified calls, since error_report() appends +one. + +Signed-off-by: Jack Schwartz +Reviewed-by: Daniel Kiper +Signed-off-by: Kevin Wolf +(cherry picked from commit 4b9006a41ea8818f2385ae5228e07f211bb4a33d) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 53 ++++++++++++++++++++++++++++------------------------- + 1 file changed, 28 insertions(+), 25 deletions(-) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index c4a361f..56889e8 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -28,12 +28,13 @@ + #include "hw/loader.h" + #include "elf.h" + #include "sysemu/sysemu.h" ++#include "qemu/error-report.h" + + /* Show multiboot debug output */ + //#define DEBUG_MULTIBOOT + + #ifdef DEBUG_MULTIBOOT +-#define mb_debug(a...) fprintf(stderr, ## a) ++#define mb_debug(a...) error_report(a) + #else + #define mb_debug(a...) + #endif +@@ -118,7 +119,7 @@ static void mb_add_mod(MultibootState *s, + stl_p(p + MB_MOD_END, end); + stl_p(p + MB_MOD_CMDLINE, cmdline_phys); + +- mb_debug("mod%02d: "TARGET_FMT_plx" - "TARGET_FMT_plx"\n", ++ mb_debug("mod%02d: "TARGET_FMT_plx" - "TARGET_FMT_plx, + s->mb_mods_count, start, end); + + s->mb_mods_count++; +@@ -159,12 +160,12 @@ int load_multiboot(FWCfgState *fw_cfg, + if (!is_multiboot) + return 0; /* no multiboot */ + +- mb_debug("qemu: I believe we found a multiboot image!\n"); ++ mb_debug("qemu: I believe we found a multiboot image!"); + memset(bootinfo, 0, sizeof(bootinfo)); + memset(&mbs, 0, sizeof(mbs)); + + if (flags & 0x00000004) { /* MULTIBOOT_HEADER_HAS_VBE */ +- fprintf(stderr, "qemu: multiboot knows VBE. we don't.\n"); ++ error_report("qemu: multiboot knows VBE. we don't."); + } + if (!(flags & 0x00010000)) { /* MULTIBOOT_HEADER_HAS_ADDR */ + uint64_t elf_entry; +@@ -173,14 +174,14 @@ int load_multiboot(FWCfgState *fw_cfg, + fclose(f); + + if (((struct elf64_hdr*)header)->e_machine == EM_X86_64) { +- fprintf(stderr, "Cannot load x86-64 image, give a 32bit one.\n"); ++ error_report("Cannot load x86-64 image, give a 32bit one."); + exit(1); + } + + kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry, + &elf_low, &elf_high, 0, ELF_MACHINE, 0); + if (kernel_size < 0) { +- fprintf(stderr, "Error while loading elf kernel\n"); ++ error_report("Error while loading elf kernel"); + exit(1); + } + mh_load_addr = elf_low; +@@ -189,12 +190,13 @@ int load_multiboot(FWCfgState *fw_cfg, + + mbs.mb_buf = g_malloc(mb_kernel_size); + if (rom_copy(mbs.mb_buf, mh_load_addr, mb_kernel_size) != mb_kernel_size) { +- fprintf(stderr, "Error while fetching elf kernel from rom\n"); ++ error_report("Error while fetching elf kernel from rom"); + exit(1); + } + +- mb_debug("qemu: loading multiboot-elf kernel (%#x bytes) with entry %#zx\n", +- mb_kernel_size, (size_t)mh_entry_addr); ++ mb_debug("qemu: loading multiboot-elf kernel " ++ "(%#x bytes) with entry %#zx", ++ mb_kernel_size, (size_t)mh_entry_addr); + } else { + /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */ + uint32_t mh_header_addr = ldl_p(header+i+12); +@@ -203,7 +205,7 @@ int load_multiboot(FWCfgState *fw_cfg, + + mh_load_addr = ldl_p(header+i+16); + if (mh_header_addr < mh_load_addr) { +- fprintf(stderr, "invalid load_addr address\n"); ++ error_report("invalid load_addr address"); + exit(1); + } + +@@ -213,20 +215,20 @@ int load_multiboot(FWCfgState *fw_cfg, + + if (mh_load_end_addr) { + if (mh_load_end_addr < mh_load_addr) { +- fprintf(stderr, "invalid load_end_addr address\n"); ++ error_report("invalid load_end_addr address"); + exit(1); + } + mb_load_size = mh_load_end_addr - mh_load_addr; + } else { + if (kernel_file_size < mb_kernel_text_offset) { +- fprintf(stderr, "invalid kernel_file_size\n"); ++ error_report("invalid kernel_file_size"); + exit(1); + } + mb_load_size = kernel_file_size - mb_kernel_text_offset; + } + if (mh_bss_end_addr) { + if (mh_bss_end_addr < (mh_load_addr + mb_load_size)) { +- fprintf(stderr, "invalid bss_end_addr address\n"); ++ error_report("invalid bss_end_addr address"); + exit(1); + } + mb_kernel_size = mh_bss_end_addr - mh_load_addr; +@@ -234,17 +236,17 @@ int load_multiboot(FWCfgState *fw_cfg, + mb_kernel_size = mb_load_size; + } + +- mb_debug("multiboot: header_addr = %#x\n", mh_header_addr); +- mb_debug("multiboot: load_addr = %#x\n", mh_load_addr); +- mb_debug("multiboot: load_end_addr = %#x\n", mh_load_end_addr); +- mb_debug("multiboot: bss_end_addr = %#x\n", mh_bss_end_addr); +- mb_debug("qemu: loading multiboot kernel (%#x bytes) at %#x\n", ++ mb_debug("multiboot: header_addr = %#x", mh_header_addr); ++ mb_debug("multiboot: load_addr = %#x", mh_load_addr); ++ mb_debug("multiboot: load_end_addr = %#x", mh_load_end_addr); ++ mb_debug("multiboot: bss_end_addr = %#x", mh_bss_end_addr); ++ mb_debug("qemu: loading multiboot kernel (%#x bytes) at %#x", + mb_load_size, mh_load_addr); + + mbs.mb_buf = g_malloc(mb_kernel_size); + fseek(f, mb_kernel_text_offset, SEEK_SET); + if (fread(mbs.mb_buf, 1, mb_load_size, f) != mb_load_size) { +- fprintf(stderr, "fread() failed\n"); ++ error_report("fread() failed"); + exit(1); + } + memset(mbs.mb_buf + mb_load_size, 0, mb_kernel_size - mb_load_size); +@@ -297,7 +299,7 @@ int load_multiboot(FWCfgState *fw_cfg, + mb_debug("multiboot loading module: %s\n", initrd_filename); + mb_mod_length = get_image_size(initrd_filename); + if (mb_mod_length < 0) { +- fprintf(stderr, "Failed to open file '%s'\n", initrd_filename); ++ error_report("Failed to open file '%s'\n", initrd_filename); + exit(1); + } + +@@ -308,7 +310,7 @@ int load_multiboot(FWCfgState *fw_cfg, + mb_add_mod(&mbs, mbs.mb_buf_phys + offs, + mbs.mb_buf_phys + offs + mb_mod_length, c); + +- mb_debug("mod_start: %p\nmod_end: %p\n cmdline: "TARGET_FMT_plx"\n", ++ mb_debug("mod_start: %p\nmod_end: %p\n cmdline: "TARGET_FMT_plx, + (char *)mbs.mb_buf + offs, + (char *)mbs.mb_buf + offs + mb_mod_length, c); + initrd_filename = next_initrd+1; +@@ -335,10 +337,11 @@ int load_multiboot(FWCfgState *fw_cfg, + stl_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the -boot switch? */ + stl_p(bootinfo + MBI_MMAP_ADDR, ADDR_E820_MAP); + +- mb_debug("multiboot: entry_addr = %#x\n", mh_entry_addr); +- mb_debug(" mb_buf_phys = "TARGET_FMT_plx"\n", mbs.mb_buf_phys); +- mb_debug(" mod_start = "TARGET_FMT_plx"\n", mbs.mb_buf_phys + mbs.offset_mods); +- mb_debug(" mb_mods_count = %d\n", mbs.mb_mods_count); ++ mb_debug("multiboot: entry_addr = %#x", mh_entry_addr); ++ mb_debug(" mb_buf_phys = "TARGET_FMT_plx, mbs.mb_buf_phys); ++ mb_debug(" mod_start = "TARGET_FMT_plx, ++ mbs.mb_buf_phys + mbs.offset_mods); ++ mb_debug(" mb_mods_count = %d", mbs.mb_mods_count); + + /* save bootinfo off the stack */ + mb_bootinfo_data = g_malloc(sizeof(bootinfo)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-multiboot-validate-multiboot-header-address-values.patch b/SOURCES/kvm-multiboot-validate-multiboot-header-address-values.patch new file mode 100644 index 0000000..bfb93f2 --- /dev/null +++ b/SOURCES/kvm-multiboot-validate-multiboot-header-address-values.patch @@ -0,0 +1,74 @@ +From abead8461f6c8c50cdc8dedc43e4821a7e1d5e33 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Thu, 26 Oct 2017 10:03:48 +0200 +Subject: [PATCH 1/2] multiboot: validate multiboot header address values + +RH-Author: Bandan Das +Message-id: +Patchwork-id: 77443 +O-Subject: [RHEL-7.5 qemu-kvm PATCH] multiboot: validate multiboot header address values +Bugzilla: 1501121 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laurent Vivier +RH-Acked-by: Peter Xu + +While loading kernel via multiboot-v1 image, (flags & 0x00010000) +indicates that multiboot header contains valid addresses to load +the kernel image. These addresses are used to compute kernel +size and kernel text offset in the OS image. Validate these +address values to avoid an OOB access issue. + +This is CVE-2017-14167. + +Reported-by: Thomas Garnier +Signed-off-by: Prasad J Pandit +Message-Id: <20170907063256.7418-1-ppandit@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit ed4f86e8b6eff8e600c69adee68c7cd34dd2cccb) +Signed-off-by: Miroslav Rezanina +--- + hw/i386/multiboot.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index 09211e0..7eec230 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -200,15 +200,34 @@ int load_multiboot(FWCfgState *fw_cfg, + uint32_t mh_header_addr = ldl_p(header+i+12); + uint32_t mh_load_end_addr = ldl_p(header+i+20); + uint32_t mh_bss_end_addr = ldl_p(header+i+24); ++ + mh_load_addr = ldl_p(header+i+16); ++ if (mh_header_addr < mh_load_addr) { ++ fprintf(stderr, "invalid mh_load_addr address\n"); ++ exit(1); ++ } ++ + uint32_t mb_kernel_text_offset = i - (mh_header_addr - mh_load_addr); + uint32_t mb_load_size = 0; + mh_entry_addr = ldl_p(header+i+28); + + if (mh_load_end_addr) { ++ if (mh_bss_end_addr < mh_load_addr) { ++ fprintf(stderr, "invalid mh_bss_end_addr address\n"); ++ exit(1); ++ } + mb_kernel_size = mh_bss_end_addr - mh_load_addr; ++ ++ if (mh_load_end_addr < mh_load_addr) { ++ fprintf(stderr, "invalid mh_load_end_addr address\n"); ++ exit(1); ++ } + mb_load_size = mh_load_end_addr - mh_load_addr; + } else { ++ if (kernel_file_size < mb_kernel_text_offset) { ++ fprintf(stderr, "invalid kernel_file_size\n"); ++ exit(1); ++ } + mb_kernel_size = kernel_file_size - mb_kernel_text_offset; + mb_load_size = mb_kernel_size; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-Always-call-close_fn-in-nbd_client_new.patch b/SOURCES/kvm-nbd-Always-call-close_fn-in-nbd_client_new.patch new file mode 100644 index 0000000..60dacb5 --- /dev/null +++ b/SOURCES/kvm-nbd-Always-call-close_fn-in-nbd_client_new.patch @@ -0,0 +1,112 @@ +From 2efca7904a7a71d44bdf715208899e3bb29711df Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 10 Mar 2016 04:00:51 +0100 +Subject: [PATCH 2/5] nbd: Always call "close_fn" in nbd_client_new + +RH-Author: Fam Zheng +Message-id: <1457582453-13835-2-git-send-email-famz@redhat.com> +Patchwork-id: 69757 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 1/3] nbd: Always call "close_fn" in nbd_client_new +Bugzilla: 1285453 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laurent Vivier + +Rename the parameter "close" to "close_fn" to disambiguous with +close(2). + +This unifies error handling paths of NBDClient allocation: +nbd_client_new will shutdown the socket and call the "close_fn" callback +if negotiation failed, so the caller don't need a different path than +the normal close. + +The returned pointer is never used, make it void in preparation for the +next patch. + +Signed-off-by: Fam Zheng +Message-Id: <1452760863-25350-2-git-send-email-famz@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit ee7d7aabdaea4484e069cb99c9fc54e8cb24b56f) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + include/block/nbd.h + nbd.c + qemu-nbd.c +* nbd_update_server_fd_handler not in downstream; +* Context around the changed line is different. +--- + include/block/nbd.h | 3 +-- + nbd.c | 11 +++++------ + qemu-nbd.c | 4 ++-- + 3 files changed, 8 insertions(+), 10 deletions(-) + +diff --git a/include/block/nbd.h b/include/block/nbd.h +index c90f5e4..92e360e 100644 +--- a/include/block/nbd.h ++++ b/include/block/nbd.h +@@ -92,8 +92,7 @@ NBDExport *nbd_export_find(const char *name); + void nbd_export_set_name(NBDExport *exp, const char *name); + void nbd_export_close_all(void); + +-NBDClient *nbd_client_new(NBDExport *exp, int csock, +- void (*close)(NBDClient *)); ++void nbd_client_new(NBDExport *exp, int csock, void (*close_fn)(NBDClient *)); + void nbd_client_close(NBDClient *client); + void nbd_client_get(NBDClient *client); + void nbd_client_put(NBDClient *client); +diff --git a/nbd.c b/nbd.c +index f258cdd..ba97270 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -1232,8 +1232,7 @@ static void nbd_restart_write(void *opaque) + qemu_coroutine_enter(client->send_coroutine, NULL); + } + +-NBDClient *nbd_client_new(NBDExport *exp, int csock, +- void (*close)(NBDClient *)) ++void nbd_client_new(NBDExport *exp, int csock, void (*close_fn)(NBDClient *)) + { + NBDClient *client; + client = g_malloc0(sizeof(NBDClient)); +@@ -1241,10 +1240,11 @@ NBDClient *nbd_client_new(NBDExport *exp, int csock, + client->exp = exp; + client->sock = csock; + if (nbd_send_negotiate(client) < 0) { +- g_free(client); +- return NULL; ++ shutdown(client->sock, 2); ++ close_fn(client); ++ return; + } +- client->close = close; ++ client->close = close_fn; + qemu_co_mutex_init(&client->send_lock); + qemu_set_fd_handler2(csock, nbd_can_read, nbd_read, NULL, client); + +@@ -1252,5 +1252,4 @@ NBDClient *nbd_client_new(NBDExport *exp, int csock, + QTAILQ_INSERT_TAIL(&exp->clients, client, next); + nbd_export_get(exp); + } +- return client; + } +diff --git a/qemu-nbd.c b/qemu-nbd.c +index ff792ef..047dd49 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -297,9 +297,9 @@ static void nbd_accept(void *opaque) + close(fd); + return; + } +- +- if (fd >= 0 && nbd_client_new(exp, fd, nbd_client_closed)) { ++ if (fd >= 0) { + nb_fds++; ++ nbd_client_new(exp, fd, nbd_client_closed); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-Fix-regression-on-resiliency-to-port-scan.patch b/SOURCES/kvm-nbd-Fix-regression-on-resiliency-to-port-scan.patch new file mode 100644 index 0000000..72a0e45 --- /dev/null +++ b/SOURCES/kvm-nbd-Fix-regression-on-resiliency-to-port-scan.patch @@ -0,0 +1,217 @@ +From 5bd3c61792fe793b1d42e675b53e47396f4219a3 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Fri, 9 Jun 2017 22:04:13 +0200 +Subject: [PATCH 6/6] nbd: Fix regression on resiliency to port scan + +RH-Author: Eric Blake +Message-id: <20170609220413.28793-3-eblake@redhat.com> +Patchwork-id: 75575 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/2] nbd: Fix regression on resiliency to port scan +Bugzilla: 1451614 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Thomas Huth + +Back in qemu 2.5, qemu-nbd was immune to port probes (a transient +server would not quit, regardless of how many probe connections +came and went, until a connection actually negotiated). But we +broke that in commit ee7d7aa when removing the return value to +nbd_client_new(), although that patch also introduced a bug causing +an assertion failure on a client that fails negotiation. We then +made it worse during refactoring in commit 1a6245a (a segfault +before we could even assert); the (masked) assertion was cleaned +up in d3780c2 (still in 2.6), and just recently we finally fixed +the segfault ("nbd: Fully intialize client in case of failed +negotiation"). But that still means that ever since we added +TLS support to qemu-nbd, we have been vulnerable to an ill-timed +port-scan being able to cause a denial of service by taking down +qemu-nbd before a real client has a chance to connect. + +Since negotiation is now handled asynchronously via coroutines, +we no longer have a synchronous point of return by re-adding a +return value to nbd_client_new(). So this patch instead wires +things up to pass the negotiation status through the close_fn +callback function. + +Simple test across two terminals: +$ qemu-nbd -f raw -p 30001 file +$ nmap 127.0.0.1 -p 30001 && \ + qemu-io -c 'r 0 512' -f raw nbd://localhost:30001 + +Note that this patch does not change what constitutes successful +negotiation (thus, a client must enter transmission phase before +that client can be considered as a reason to terminate the server +when the connection ends). Perhaps we may want to tweak things +in a later patch to also treat a client that uses NBD_OPT_ABORT +as being a 'successful' negotiation (the client correctly talked +the NBD protocol, and informed us it was not going to use our +export after all), but that's a discussion for another day. + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1451614 + +Signed-off-by: Eric Blake +Message-Id: <20170608222617.20376-1-eblake@redhat.com> +(cherry picked from commit ???) +https://bugzilla.redhat.com/show_bug.cgi?id=1451614 +Signed-off-by: Miroslav Rezanina + +Conflicts: + blockdev-nbd.c - context + include/block/nbd.h - context with nbd_client_new parameters, + nbd_client_close not static + nbd/server.c - in nbd.c instead, context, comment to nbd_client_new + matching different parameters + qemu-nbd.c - context +--- + blockdev-nbd.c | 7 ++++++- + include/block/nbd.h | 5 +++-- + nbd.c | 25 ++++++++++++++++--------- + qemu-nbd.c | 4 ++-- + 4 files changed, 27 insertions(+), 14 deletions(-) + +diff --git a/blockdev-nbd.c b/blockdev-nbd.c +index 922cf56..dc7cffa 100644 +--- a/blockdev-nbd.c ++++ b/blockdev-nbd.c +@@ -21,6 +21,11 @@ + + static int server_fd = -1; + ++static void nbd_blockdev_client_closed(NBDClient *client, bool ignored) ++{ ++ nbd_client_put(client); ++} ++ + static void nbd_accept(void *opaque) + { + struct sockaddr_in addr; +@@ -28,7 +33,7 @@ static void nbd_accept(void *opaque) + + int fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len); + if (fd >= 0) { +- nbd_client_new(NULL, fd, nbd_client_put); ++ nbd_client_new(NULL, fd, nbd_blockdev_client_closed); + } + } + +diff --git a/include/block/nbd.h b/include/block/nbd.h +index 92e360e..963c7ce 100644 +--- a/include/block/nbd.h ++++ b/include/block/nbd.h +@@ -92,8 +92,9 @@ NBDExport *nbd_export_find(const char *name); + void nbd_export_set_name(NBDExport *exp, const char *name); + void nbd_export_close_all(void); + +-void nbd_client_new(NBDExport *exp, int csock, void (*close_fn)(NBDClient *)); +-void nbd_client_close(NBDClient *client); ++void nbd_client_new(NBDExport *exp, int csock, ++ void (*close_fn)(NBDClient *, bool)); ++void nbd_client_close(NBDClient *client, bool negotiated); + void nbd_client_get(NBDClient *client); + void nbd_client_put(NBDClient *client); + +diff --git a/nbd.c b/nbd.c +index b5cdc1b..c3d554d 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -105,7 +105,7 @@ static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports); + + struct NBDClient { + int refcount; +- void (*close)(NBDClient *client); ++ void (*close_fn)(NBDClient *client, bool negotiated); + + NBDExport *exp; + int sock; +@@ -862,7 +862,7 @@ void nbd_client_put(NBDClient *client) + } + } + +-void nbd_client_close(NBDClient *client) ++void nbd_client_close(NBDClient *client, bool negotiated) + { + if (client->closing) { + return; +@@ -876,8 +876,8 @@ void nbd_client_close(NBDClient *client) + shutdown(client->sock, 2); + + /* Also tell the client, so that they release their reference. */ +- if (client->close) { +- client->close(client); ++ if (client->close_fn) { ++ client->close_fn(client, negotiated); + } + } + +@@ -964,7 +964,7 @@ void nbd_export_close(NBDExport *exp) + + nbd_export_get(exp); + QTAILQ_FOREACH_SAFE(client, &exp->clients, next, next) { +- nbd_client_close(client); ++ nbd_client_close(client, true); + } + nbd_export_set_name(exp, NULL); + nbd_export_put(exp); +@@ -1244,7 +1244,7 @@ done: + + out: + nbd_request_put(req); +- nbd_client_close(client); ++ nbd_client_close(client, true); + } + + static int nbd_can_read(void *opaque) +@@ -1285,7 +1285,7 @@ static coroutine_fn void nbd_co_client_start(void *opaque) + qemu_set_nonblock(client->sock); + qemu_co_mutex_init(&client->send_lock); + if (nbd_negotiate(data)) { +- nbd_client_close(client); ++ nbd_client_close(client, false); + goto out; + } + qemu_set_fd_handler2(client->sock, nbd_can_read, nbd_read, NULL, client); +@@ -1294,7 +1294,14 @@ out: + g_free(data); + } + +-void nbd_client_new(NBDExport *exp, int csock, void (*close_fn)(NBDClient *)) ++/* ++ * Create a new client listener on the given export @exp, using the ++ * given socket @csock. Begin servicing it in a coroutine. When the ++ * connection closes, call @close_fn with an indication of whether the ++ * client completed negotiation. ++ */ ++void nbd_client_new(NBDExport *exp, int csock, ++ void (*close_fn)(NBDClient *, bool)) + { + NBDClient *client; + NBDClientNewData *data = g_new(NBDClientNewData, 1); +@@ -1303,7 +1310,7 @@ void nbd_client_new(NBDExport *exp, int csock, void (*close_fn)(NBDClient *)) + client->refcount = 1; + client->exp = exp; + client->sock = csock; +- client->close = close_fn; ++ client->close_fn = close_fn; + + data->client = client; + data->co = qemu_coroutine_create(nbd_co_client_start); +diff --git a/qemu-nbd.c b/qemu-nbd.c +index cde7431..e0f4517 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -276,10 +276,10 @@ static void nbd_export_closed(NBDExport *exp) + state = TERMINATED; + } + +-static void nbd_client_closed(NBDClient *client) ++static void nbd_client_closed(NBDClient *client, bool negotiated) + { + nb_fds--; +- if (nb_fds == 0 && !persistent && state == RUNNING) { ++ if (negotiated && nb_fds == 0 && !persistent && state == RUNNING) { + state = TERMINATE; + } + qemu_notify_event(); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-Fully-initialize-client-in-case-of-failed-negoti.patch b/SOURCES/kvm-nbd-Fully-initialize-client-in-case-of-failed-negoti.patch new file mode 100644 index 0000000..17a739e --- /dev/null +++ b/SOURCES/kvm-nbd-Fully-initialize-client-in-case-of-failed-negoti.patch @@ -0,0 +1,97 @@ +From 0e97bcfd7ab3c7b3d489de3cf4c7c4977b73cd23 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Fri, 9 Jun 2017 22:04:12 +0200 +Subject: [PATCH 5/6] nbd: Fully initialize client in case of failed + negotiation + +RH-Author: Eric Blake +Message-id: <20170609220413.28793-2-eblake@redhat.com> +Patchwork-id: 75576 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/2] nbd: Fully initialize client in case of failed negotiation +Bugzilla: 1451614 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Thomas Huth + +If a non-NBD client connects to qemu-nbd, we would end up with +a SIGSEGV in nbd_client_put() because we were trying to +unregister the client's association to the export, even though +we skipped inserting the client into that list. Easy trigger +in two terminals: + +$ qemu-nbd -p 30001 --format=raw file +$ nmap 127.0.0.1 -p 30001 + +nmap claims that it thinks it connected to a pago-services1 +server (which probably means nmap could be updated to learn the +NBD protocol and give a more accurate diagnosis of the open +port - but that's not our problem), then terminates immediately, +so our call to nbd_negotiate() fails. The fix is to reorder +nbd_co_client_start() to ensure that all initialization occurs +before we ever try talking to a client in nbd_negotiate(), so +that the teardown sequence on negotiation failure doesn't fault +while dereferencing a half-initialized object. + +While debugging this, I also noticed that nbd_update_server_watch() +called by nbd_client_closed() was still adding a channel to accept +the next client, even when the state was no longer RUNNING. That +is fixed by making nbd_can_accept() pay attention to the current +state. + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1451614 + +Signed-off-by: Eric Blake +Message-Id: <20170527030421.28366-1-eblake@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit ???) +https://bugzilla.redhat.com/show_bug.cgi?id=1451614 +Signed-off-by: Miroslav Rezanina + +Conflicts: + nbd/server.c - code lives in nbd.c instead, with older handlers +--- + nbd.c | 6 ++---- + qemu-nbd.c | 2 +- + 2 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/nbd.c b/nbd.c +index 8a32e18..b5cdc1b 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -1280,18 +1280,16 @@ static coroutine_fn void nbd_co_client_start(void *opaque) + + if (exp) { + nbd_export_get(exp); ++ QTAILQ_INSERT_TAIL(&exp->clients, client, next); + } + qemu_set_nonblock(client->sock); ++ qemu_co_mutex_init(&client->send_lock); + if (nbd_negotiate(data)) { + nbd_client_close(client); + goto out; + } +- qemu_co_mutex_init(&client->send_lock); + qemu_set_fd_handler2(client->sock, nbd_can_read, nbd_read, NULL, client); + +- if (exp) { +- QTAILQ_INSERT_TAIL(&exp->clients, client, next); +- } + out: + g_free(data); + } +diff --git a/qemu-nbd.c b/qemu-nbd.c +index 047dd49..cde7431 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -267,7 +267,7 @@ out: + + static int nbd_can_accept(void *opaque) + { +- return nb_fds < shared; ++ return state == RUNNING && nb_fds < shared; + } + + static void nbd_export_closed(NBDExport *exp) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-client_close-on-error-in-nbd_co_client_start.patch b/SOURCES/kvm-nbd-client_close-on-error-in-nbd_co_client_start.patch new file mode 100644 index 0000000..9479ecd --- /dev/null +++ b/SOURCES/kvm-nbd-client_close-on-error-in-nbd_co_client_start.patch @@ -0,0 +1,50 @@ +From c62e0877b191e5fba9b678bbd518a57c8fdf7099 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 10 Mar 2016 04:00:53 +0100 +Subject: [PATCH 4/5] nbd: client_close on error in nbd_co_client_start + +RH-Author: Fam Zheng +Message-id: <1457582453-13835-4-git-send-email-famz@redhat.com> +Patchwork-id: 69759 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 3/3] nbd: client_close on error in nbd_co_client_start +Bugzilla: 1285453 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laurent Vivier + +From: Max Reitz + +Use client_close() if an error in nbd_co_client_start() occurs instead +of manually inlining parts of it. This fixes an assertion error on the +server side if nbd_negotiate() fails. + +Signed-off-by: Max Reitz +Acked-by: Paolo Bonzini +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit d3780c2dce2c452759ee9d94f9d824cf14cc3ab8) +Signed-off-by: Fam Zheng + +Downstream: client_close -> nbd_client_close. +Signed-off-by: Miroslav Rezanina +--- + nbd.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/nbd.c b/nbd.c +index 97aeecb..c20e57e 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -1282,8 +1282,7 @@ static coroutine_fn void nbd_co_client_start(void *opaque) + nbd_export_get(exp); + } + if (nbd_negotiate(data)) { +- shutdown(client->sock, 2); +- client->close(client); ++ nbd_client_close(client); + goto out; + } + qemu_co_mutex_init(&client->send_lock); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-server-Coroutine-based-negotiation.patch b/SOURCES/kvm-nbd-server-Coroutine-based-negotiation.patch new file mode 100644 index 0000000..9083ba7 --- /dev/null +++ b/SOURCES/kvm-nbd-server-Coroutine-based-negotiation.patch @@ -0,0 +1,262 @@ +From 2a68d801c63137c3d1fe9fa96f0193eb2d1576f5 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 10 Mar 2016 04:00:52 +0100 +Subject: [PATCH 3/5] nbd-server: Coroutine based negotiation + +RH-Author: Fam Zheng +Message-id: <1457582453-13835-3-git-send-email-famz@redhat.com> +Patchwork-id: 69758 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 2/3] nbd-server: Coroutine based negotiation +Bugzilla: 1285453 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laurent Vivier + +Create a coroutine in nbd_client_new, so that nbd_send_negotiate doesn't +need qemu_set_block(). + +Handlers need to be set temporarily for csock fd in case the coroutine +yields during I/O. + +With this, if the other end disappears in the middle of the negotiation, +we don't block the whole event loop. + +To make the code clearer, unify all function names that belong to +negotiate, so they are less likely to be misused. This is important +because we rely on negotiation staying in main loop, as commented in +nbd_negotiate_read/write(). + +Signed-off-by: Fam Zheng +Message-Id: <1452760863-25350-4-git-send-email-famz@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 1a6245a5b0b4e8d822c739b403fc67c8a7bc8d12) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + nbd.c +Downstream doesn't have new style protocol, and the code is not split. +The patch is redone. +--- + nbd.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 82 insertions(+), 24 deletions(-) + +diff --git a/nbd.c b/nbd.c +index ba97270..97aeecb 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -167,6 +167,41 @@ ssize_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read) + return offset; + } + ++static void nbd_negotiate_continue(void *opaque) ++{ ++ qemu_coroutine_enter(opaque, NULL); ++} ++ ++static ssize_t read_sync(int fd, void *buffer, size_t size); ++static ssize_t write_sync(int fd, void *buffer, size_t size); ++ ++static ssize_t nbd_negotiate_read(int fd, void *buffer, size_t size) ++{ ++ ssize_t ret; ++ ++ assert(qemu_in_coroutine()); ++ /* Negotiation are always in main loop. */ ++ qemu_set_fd_handler(fd, nbd_negotiate_continue, NULL, ++ qemu_coroutine_self()); ++ ret = read_sync(fd, buffer, size); ++ qemu_set_fd_handler(fd, NULL, NULL, NULL); ++ return ret; ++ ++} ++ ++static ssize_t nbd_negotiate_write(int fd, void *buffer, size_t size) ++{ ++ ssize_t ret; ++ ++ assert(qemu_in_coroutine()); ++ /* Negotiation are always in main loop. */ ++ qemu_set_fd_handler(fd, NULL, nbd_negotiate_continue, ++ qemu_coroutine_self()); ++ ret = write_sync(fd, buffer, size); ++ qemu_set_fd_handler(fd, NULL, NULL, NULL); ++ return ret; ++} ++ + static ssize_t read_sync(int fd, void *buffer, size_t size) + { + /* Sockets are kept in blocking mode in the negotiation phase. After +@@ -280,7 +315,7 @@ int unix_socket_outgoing(const char *path) + + */ + +-static int nbd_receive_options(NBDClient *client) ++static coroutine_fn int nbd_negotiate_receive_options(NBDClient *client) + { + int csock = client->sock; + char name[256]; +@@ -297,7 +332,7 @@ static int nbd_receive_options(NBDClient *client) + */ + + rc = -EINVAL; +- if (read_sync(csock, &tmp, sizeof(tmp)) != sizeof(tmp)) { ++ if (nbd_negotiate_read(csock, &tmp, sizeof(tmp)) != sizeof(tmp)) { + LOG("read failed"); + goto fail; + } +@@ -307,7 +342,7 @@ static int nbd_receive_options(NBDClient *client) + goto fail; + } + +- if (read_sync(csock, &magic, sizeof(magic)) != sizeof(magic)) { ++ if (nbd_negotiate_read(csock, &magic, sizeof(magic)) != sizeof(magic)) { + LOG("read failed"); + goto fail; + } +@@ -317,7 +352,7 @@ static int nbd_receive_options(NBDClient *client) + goto fail; + } + +- if (read_sync(csock, &tmp, sizeof(tmp)) != sizeof(tmp)) { ++ if (nbd_negotiate_read(csock, &tmp, sizeof(tmp)) != sizeof(tmp)) { + LOG("read failed"); + goto fail; + } +@@ -327,7 +362,7 @@ static int nbd_receive_options(NBDClient *client) + goto fail; + } + +- if (read_sync(csock, &length, sizeof(length)) != sizeof(length)) { ++ if (nbd_negotiate_read(csock, &length, sizeof(length)) != sizeof(length)) { + LOG("read failed"); + goto fail; + } +@@ -337,7 +372,7 @@ static int nbd_receive_options(NBDClient *client) + LOG("Bad length received"); + goto fail; + } +- if (read_sync(csock, name, length) != length) { ++ if (nbd_negotiate_read(csock, name, length) != length) { + LOG("read failed"); + goto fail; + } +@@ -358,8 +393,14 @@ fail: + return rc; + } + +-static int nbd_send_negotiate(NBDClient *client) ++typedef struct { ++ NBDClient *client; ++ Coroutine *co; ++} NBDClientNewData; ++ ++static coroutine_fn int nbd_negotiate(NBDClientNewData *data) + { ++ NBDClient *client = data->client; + int csock = client->sock; + char buf[8 + 8 + 8 + 128]; + int rc; +@@ -385,7 +426,6 @@ static int nbd_send_negotiate(NBDClient *client) + [28 .. 151] reserved (0) + */ + +- qemu_set_block(csock); + rc = -EINVAL; + + TRACE("Beginning negotiation."); +@@ -401,16 +441,16 @@ static int nbd_send_negotiate(NBDClient *client) + } + + if (client->exp) { +- if (write_sync(csock, buf, sizeof(buf)) != sizeof(buf)) { ++ if (nbd_negotiate_write(csock, buf, sizeof(buf)) != sizeof(buf)) { + LOG("write failed"); + goto fail; + } + } else { +- if (write_sync(csock, buf, 18) != 18) { ++ if (nbd_negotiate_write(csock, buf, 18) != 18) { + LOG("write failed"); + goto fail; + } +- rc = nbd_receive_options(client); ++ rc = nbd_negotiate_receive_options(client); + if (rc < 0) { + LOG("option negotiation failed"); + goto fail; +@@ -419,7 +459,8 @@ static int nbd_send_negotiate(NBDClient *client) + assert ((client->exp->nbdflags & ~65535) == 0); + cpu_to_be64w((uint64_t*)(buf + 18), client->exp->size); + cpu_to_be16w((uint16_t*)(buf + 26), client->exp->nbdflags | myflags); +- if (write_sync(csock, buf + 18, sizeof(buf) - 18) != sizeof(buf) - 18) { ++ if (nbd_negotiate_write(csock, buf + 18, ++ sizeof(buf) - 18) != sizeof(buf) - 18) { + LOG("write failed"); + goto fail; + } +@@ -428,7 +469,6 @@ static int nbd_send_negotiate(NBDClient *client) + TRACE("Negotiation succeeded."); + rc = 0; + fail: +- qemu_set_nonblock(csock); + return rc; + } + +@@ -1232,24 +1272,42 @@ static void nbd_restart_write(void *opaque) + qemu_coroutine_enter(client->send_coroutine, NULL); + } + ++static coroutine_fn void nbd_co_client_start(void *opaque) ++{ ++ NBDClientNewData *data = opaque; ++ NBDClient *client = data->client; ++ NBDExport *exp = client->exp; ++ ++ if (exp) { ++ nbd_export_get(exp); ++ } ++ if (nbd_negotiate(data)) { ++ shutdown(client->sock, 2); ++ client->close(client); ++ goto out; ++ } ++ qemu_co_mutex_init(&client->send_lock); ++ qemu_set_fd_handler2(client->sock, nbd_can_read, nbd_read, NULL, client); ++ ++ if (exp) { ++ QTAILQ_INSERT_TAIL(&exp->clients, client, next); ++ } ++out: ++ g_free(data); ++} ++ + void nbd_client_new(NBDExport *exp, int csock, void (*close_fn)(NBDClient *)) + { + NBDClient *client; ++ NBDClientNewData *data = g_new(NBDClientNewData, 1); ++ + client = g_malloc0(sizeof(NBDClient)); + client->refcount = 1; + client->exp = exp; + client->sock = csock; +- if (nbd_send_negotiate(client) < 0) { +- shutdown(client->sock, 2); +- close_fn(client); +- return; +- } + client->close = close_fn; +- qemu_co_mutex_init(&client->send_lock); +- qemu_set_fd_handler2(csock, nbd_can_read, nbd_read, NULL, client); + +- if (exp) { +- QTAILQ_INSERT_TAIL(&exp->clients, client, next); +- nbd_export_get(exp); +- } ++ data->client = client; ++ data->co = qemu_coroutine_create(nbd_co_client_start); ++ qemu_coroutine_enter(data->co, data); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-server-Set-O_NONBLOCK-on-client-fd.patch b/SOURCES/kvm-nbd-server-Set-O_NONBLOCK-on-client-fd.patch new file mode 100644 index 0000000..6b9b473 --- /dev/null +++ b/SOURCES/kvm-nbd-server-Set-O_NONBLOCK-on-client-fd.patch @@ -0,0 +1,44 @@ +From e36a5a8613df42339773ebf48e07d063ad7484e8 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 5 Sep 2016 01:18:15 +0200 +Subject: [PATCH] nbd-server: Set O_NONBLOCK on client fd + +RH-Author: Fam Zheng +Message-id: <1473038295-7193-1-git-send-email-famz@redhat.com> +Patchwork-id: 72141 +O-Subject: [RHEL-7.3 qemu-kvm PATCH] nbd-server: Set O_NONBLOCK on client fd +Bugzilla: 1285453 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Max Reitz + +Upstream: upstream uses IO channels that is not present in downstream. +Backporting that deserves a separate and deliberate justification BZ, +for 7.4. + +Even with 2a68d80 (nbd-server: Coroutine based negotiation), QEMU still +hangs when client hangs, because recvmsg the socket fd is blocking. Set +the O_NONBLOCK to fix this. + +Analyzed-by: Stefan Hajnoczi +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + nbd.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/nbd.c b/nbd.c +index c20e57e..8a32e18 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -1281,6 +1281,7 @@ static coroutine_fn void nbd_co_client_start(void *opaque) + if (exp) { + nbd_export_get(exp); + } ++ qemu_set_nonblock(client->sock); + if (nbd_negotiate(data)) { + nbd_client_close(client); + goto out; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-nbd-use-BlockDriverState-refcnt.patch b/SOURCES/kvm-nbd-use-BlockDriverState-refcnt.patch new file mode 100644 index 0000000..8a840f6 --- /dev/null +++ b/SOURCES/kvm-nbd-use-BlockDriverState-refcnt.patch @@ -0,0 +1,89 @@ +From 33eef488233850a3eeb806bf11d562c86eaacb72 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:51 +0100 +Subject: [PATCH 08/34] nbd: use BlockDriverState refcnt + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-7-git-send-email-famz@redhat.com> +Patchwork-id: 56768 +O-Subject: [RHEL-7 qemu-kvm PATCH 06/18] nbd: use BlockDriverState refcnt +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Previously, nbd calls drive_get_ref() on the drive of bs. A BDS doesn't +always have associated dinfo, which nbd doesn't care either. We already +have BDS ref count, so use it to make it safe for a BDS w/o blockdev. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 38b54b6dc18ae7e2a32e5ae38b312fb13f0584c8) +Signed-off-by: Fam Zheng +--- + blockdev-nbd.c | 10 +--------- + nbd.c | 5 +++++ + 2 files changed, 6 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev-nbd.c | 10 +--------- + nbd.c | 5 +++++ + 2 files changed, 6 insertions(+), 9 deletions(-) + +diff --git a/blockdev-nbd.c b/blockdev-nbd.c +index 95f10c8..922cf56 100644 +--- a/blockdev-nbd.c ++++ b/blockdev-nbd.c +@@ -69,12 +69,6 @@ static void nbd_close_notifier(Notifier *n, void *data) + g_free(cn); + } + +-static void nbd_server_put_ref(NBDExport *exp) +-{ +- BlockDriverState *bs = nbd_export_get_blockdev(exp); +- drive_put_ref(drive_get_by_blockdev(bs)); +-} +- + void qmp_nbd_server_add(const char *device, bool has_writable, bool writable, + Error **errp) + { +@@ -105,11 +99,9 @@ void qmp_nbd_server_add(const char *device, bool has_writable, bool writable, + writable = false; + } + +- exp = nbd_export_new(bs, 0, -1, writable ? 0 : NBD_FLAG_READ_ONLY, +- nbd_server_put_ref); ++ exp = nbd_export_new(bs, 0, -1, writable ? 0 : NBD_FLAG_READ_ONLY, NULL); + + nbd_export_set_name(exp, device); +- drive_get_ref(drive_get_by_blockdev(bs)); + + n = g_malloc0(sizeof(NBDCloseNotifier)); + n->n.notify = nbd_close_notifier; +diff --git a/nbd.c b/nbd.c +index 2606403..f258cdd 100644 +--- a/nbd.c ++++ b/nbd.c +@@ -881,6 +881,7 @@ NBDExport *nbd_export_new(BlockDriverState *bs, off_t dev_offset, + exp->nbdflags = nbdflags; + exp->size = size == -1 ? bdrv_getlength(bs) : size; + exp->close = close; ++ bdrv_ref(bs); + return exp; + } + +@@ -927,6 +928,10 @@ void nbd_export_close(NBDExport *exp) + } + nbd_export_set_name(exp, NULL); + nbd_export_put(exp); ++ if (exp->bs) { ++ bdrv_unref(exp->bs); ++ exp->bs = NULL; ++ } + } + + void nbd_export_get(NBDExport *exp) +-- +1.7.1 + diff --git a/SOURCES/kvm-net-Make-qmp_query_rx_filter-with-name-argument-more.patch b/SOURCES/kvm-net-Make-qmp_query_rx_filter-with-name-argument-more.patch new file mode 100644 index 0000000..28e945b --- /dev/null +++ b/SOURCES/kvm-net-Make-qmp_query_rx_filter-with-name-argument-more.patch @@ -0,0 +1,47 @@ +From 9c2a6798c053cec989e02935e810a0d239fb493c Mon Sep 17 00:00:00 2001 +From: Vlad Yasevich +Date: Wed, 16 Dec 2015 02:59:35 +0100 +Subject: [PATCH 1/2] net: Make qmp_query_rx_filter() with name argument more + obvious + +RH-Author: Vlad Yasevich +Message-id: <1450234776-7779-2-git-send-email-vyasevic@redhat.com> +Patchwork-id: 68620 +O-Subject: [RHEL7.3 qemu-kvm PATCH 1/2] net: Make qmp_query_rx_filter() with name argument more obvious +Bugzilla: 1269738 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +From: Markus Armbruster + +With a client name, the QMP command is specified to return a list of +one element. This isn't locally obvious in the code. Make it so. + +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 638fb14169ad96cf9bc0dd5f61460daaecee5bb1) +Signed-off-by: Vladislav Yasevich +Signed-off-by: Miroslav Rezanina +--- + net/net.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/net/net.c b/net/net.c +index a8c49fc..0be50a0 100644 +--- a/net/net.c ++++ b/net/net.c +@@ -1000,6 +1000,10 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name, + " rx-filter querying", name); + break; + } ++ ++ if (has_name) { ++ break; ++ } + } + + if (filter_list == NULL && !error_is_set(errp) && has_name) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-net-Transmit-zero-UDP-checksum-as-0xFFFF.patch b/SOURCES/kvm-net-Transmit-zero-UDP-checksum-as-0xFFFF.patch new file mode 100644 index 0000000..d638efd --- /dev/null +++ b/SOURCES/kvm-net-Transmit-zero-UDP-checksum-as-0xFFFF.patch @@ -0,0 +1,92 @@ +From 58d702589fd93689c142e8cb48d51877a8de3a93 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= +Date: Sat, 13 Jul 2019 12:38:02 +0200 +Subject: [PATCH 3/4] net: Transmit zero UDP checksum as 0xFFFF +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Philippe Mathieu-Daudé +Message-id: <20190713123802.23932-3-philmd@redhat.com> +Patchwork-id: 89509 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 2/2] net: Transmit zero UDP checksum as 0xFFFF +Bugzilla: 1270166 +RH-Acked-by: Xiao Wang +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Stefano Garzarella + +From: Ed Swierk + +The checksum algorithm used by IPv4, TCP and UDP allows a zero value +to be represented by either 0x0000 and 0xFFFF. But per RFC 768, a zero +UDP checksum must be transmitted as 0xFFFF because 0x0000 is a special +value meaning no checksum. + +Substitute 0xFFFF whenever a checksum is computed as zero when +modifying a UDP datagram header. Doing this on IPv4 and TCP checksums +is unnecessary but legal. Add a wrapper for net_checksum_finish() that +makes the substitution. + +(We can't just change net_checksum_finish(), as that function is also +used by receivers to verify checksums, and in that case the expected +value is always 0x0000.) + +Signed-off-by: Ed Swierk +Signed-off-by: Jason Wang +(cherry picked from commit 0dacea92d26c31d453c58de2e99c178fee554166) +[PMD: conflicts: hw/net/net_rx_pkt.c hw/net/vmxnet3.c] +Signed-off-by: Philippe Mathieu-Daudé + +Signed-off-by: Miroslav Rezanina +--- + hw/net/e1000.c | 2 +- + hw/net/vmxnet_tx_pkt.c | 2 +- + include/net/checksum.h | 6 ++++++ + 3 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index 711d369..d876949 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -442,7 +442,7 @@ putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse) + n = cse + 1; + if (sloc < n-1) { + sum = net_checksum_add(n-css, data+css); +- stw_be_p(data + sloc, net_checksum_finish(sum)); ++ stw_be_p(data + sloc, net_checksum_finish_nozero(sum)); + } + } + +diff --git a/hw/net/vmxnet_tx_pkt.c b/hw/net/vmxnet_tx_pkt.c +index fc01e4d..03f34cf 100644 +--- a/hw/net/vmxnet_tx_pkt.c ++++ b/hw/net/vmxnet_tx_pkt.c +@@ -437,7 +437,7 @@ static void vmxnet_tx_pkt_do_sw_csum(struct VmxnetTxPkt *pkt) + csum_cntr += eth_calc_pseudo_hdr_csum(iphdr, csl); + + /* Put the checksum obtained into the packet */ +- csum = cpu_to_be16(net_checksum_finish(csum_cntr)); ++ csum = cpu_to_be16(net_checksum_finish_nozero(csum_cntr)); + iov_from_buf(iov, iov_len, csum_offset, &csum, sizeof csum); + } + +diff --git a/include/net/checksum.h b/include/net/checksum.h +index 80203fb..78b7d9b 100644 +--- a/include/net/checksum.h ++++ b/include/net/checksum.h +@@ -33,6 +33,12 @@ net_checksum_add(int len, uint8_t *buf) + } + + static inline uint16_t ++net_checksum_finish_nozero(uint32_t sum) ++{ ++ return net_checksum_finish(sum) ?: 0xFFFF; ++} ++ ++static inline uint16_t + net_raw_checksum(uint8_t *data, int length) + { + return net_checksum_finish(net_checksum_add(length, data)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-net-Update-netdev-peer-on-link-change.patch b/SOURCES/kvm-net-Update-netdev-peer-on-link-change.patch new file mode 100644 index 0000000..af5ac8d --- /dev/null +++ b/SOURCES/kvm-net-Update-netdev-peer-on-link-change.patch @@ -0,0 +1,89 @@ +From 6fa94ac455819e37a16ed8439be4bbf0b869884c Mon Sep 17 00:00:00 2001 +Message-Id: <6fa94ac455819e37a16ed8439be4bbf0b869884c.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Vlad Yasevich +Date: Wed, 11 Dec 2013 21:40:06 +0100 +Subject: [PATCH 16/16] net: Update netdev peer on link change + +RH-Author: Vlad Yasevich +Message-id: <1386798006-31753-1-git-send-email-vyasevic@redhat.com> +Patchwork-id: 56241 +O-Subject: [RHEL 7.0 qemu PATCH] net: Update netdev peer on link change +Bugzilla: 1027571 +RH-Acked-by: Amos Kong +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Xiao Wang + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1027571 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6714640 + +When a link change occurs on a backend (like tap), we currently do +not propage such change to the nic. As a result, when someone turns +off a link on a tap device, for instance, then a guest doesn't see +that change and continues to try to send traffic or run DHCP even +though the lower-layer is disconnected. This is OK when the network +is set up as a HUB since the the guest may be connected to other HUB +ports too, but when it's set up as a netdev, it makes thinkgs worse. + +The patch addresses this by setting the peers link down only when the +peer is not a HUBPORT device. With this patch, in the following config + -netdev tap,id=net0 -device e1000,mac=XXXXX,netdev=net0 +when net0 link is turned off, the guest e1000 shows lower-layer link +down. This allows guests to boot much faster in such configurations. +With windows guest, it also allows the network to recover properly +since windows will not configure the link-local IPv4 address, and +when the link is turned on, the proper address address is configured. + +Signed-off-by: Vlad Yasevich +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 02d38fcb2caa4454cf4ed728d5908c3cc9ba47be) +--- + net/net.c | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) + +Signed-off-by: Michal Novotny +--- + net/net.c | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) + +diff --git a/net/net.c b/net/net.c +index c0d61bf..a8c49fc 100644 +--- a/net/net.c ++++ b/net/net.c +@@ -1059,15 +1059,23 @@ void qmp_set_link(const char *name, bool up, Error **errp) + nc->info->link_status_changed(nc); + } + +- /* Notify peer. Don't update peer link status: this makes it possible to +- * disconnect from host network without notifying the guest. +- * FIXME: is disconnected link status change operation useful? +- * +- * Current behaviour is compatible with qemu vlans where there could be +- * multiple clients that can still communicate with each other in +- * disconnected mode. For now maintain this compatibility. */ +- if (nc->peer && nc->peer->info->link_status_changed) { +- nc->peer->info->link_status_changed(nc->peer); ++ if (nc->peer) { ++ /* Change peer link only if the peer is NIC and then notify peer. ++ * If the peer is a HUBPORT or a backend, we do not change the ++ * link status. ++ * ++ * This behavior is compatible with qemu vlans where there could be ++ * multiple clients that can still communicate with each other in ++ * disconnected mode. For now maintain this compatibility. ++ */ ++ if (nc->peer->info->type == NET_CLIENT_OPTIONS_KIND_NIC) { ++ for (i = 0; i < queues; i++) { ++ ncs[i]->peer->link_down = !up; ++ } ++ } ++ if (nc->peer->info->link_status_changed) { ++ nc->peer->info->link_status_changed(nc->peer); ++ } + } + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-net-add-support-of-mac-programming-over-macvtap-in-Q.patch b/SOURCES/kvm-net-add-support-of-mac-programming-over-macvtap-in-Q.patch new file mode 100644 index 0000000..a855692 --- /dev/null +++ b/SOURCES/kvm-net-add-support-of-mac-programming-over-macvtap-in-Q.patch @@ -0,0 +1,646 @@ +From 8eab8301249fa8f5b3f68a91a87edac676ff7f0f Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Fri, 8 Nov 2013 06:13:59 +0100 +Subject: [PATCH 4/4] net: add support of mac-programming over macvtap in QEMU side + +RH-Author: Amos Kong +Message-id: <1383891239-29531-5-git-send-email-akong@redhat.com> +Patchwork-id: 55611 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 4/4] net: add support of mac-programming over macvtap in QEMU side +Bugzilla: 848203 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Currently macvtap based macvlan device is working in promiscuous +mode, we want to implement mac-programming over macvtap through +Libvirt for better performance. + +Design: + QEMU notifies Libvirt when rx-filter config is changed in guest, + then Libvirt query the rx-filter information by a monitor command, + and sync the change to macvtap device. Related rx-filter config + of the nic contains main mac, rx-mode items and vlan table. + +This patch adds a QMP event to notify management of rx-filter change, +and adds a monitor command for management to query rx-filter +information. + +Test: + If we repeatedly add/remove vlan, and change macaddr of vlan + interfaces in guest by a loop script. + +Result: + The events will flood the QMP client(management), management takes + too much resource to process the events. + + Event_throttle API (set rate to 1 ms) can avoid the events to flood + QMP client, but it could cause an unexpected delay (~1ms), guests + guests normally expect rx-filter updates immediately. + + So we use a flag for each nic to avoid events flooding, the event + is emitted once until the query command is executed. The flag + implementation could not introduce unexpected delay. + +There maybe exist an uncontrollable delay if we let Libvirt do the +real change, guests normally expect rx-filter updates immediately. +But it's another separate issue, we can investigate it when the +work in Libvirt side is done. + +Michael S. Tsirkin: tweaked to enable events on start +Michael S. Tsirkin: fixed not to crash when no id +Michael S. Tsirkin: fold in patch: + "additional fixes for mac-programming feature" +Amos Kong: always notify QMP client if mactable is changed +Amos Kong: return NULL list if no net client supports rx-filter query + +Reviewed-by: Eric Blake +Reviewed-by: Markus Armbruster +Signed-off-by: Amos Kong +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit b1be42803b31a913bab65bab563a8760ad2e7f7f) +--- + QMP/qmp-events.txt | 17 ++++++ + hw/net/virtio-net.c | 133 +++++++++++++++++++++++++++++++++++++++++++-- + include/monitor/monitor.h | 1 + + include/net/net.h | 3 + + monitor.c | 1 + + net/net.c | 48 ++++++++++++++++ + qapi-schema.json | 77 ++++++++++++++++++++++++++- + qmp-commands.hx | 64 ++++++++++++++++++++++ + 8 files changed, 337 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + QMP/qmp-events.txt | 17 ++++++ + hw/net/virtio-net.c | 133 +++++++++++++++++++++++++++++++++++++++++++-- + include/monitor/monitor.h | 1 + + include/net/net.h | 3 + + monitor.c | 1 + + net/net.c | 48 ++++++++++++++++ + qapi-schema.json | 77 ++++++++++++++++++++++++++- + qmp-commands.hx | 64 ++++++++++++++++++++++ + 8 files changed, 337 insertions(+), 7 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index e185030..79fb1c9 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -194,6 +194,23 @@ Data: + }, + "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } + ++NIC_RX_FILTER_CHANGED ++----------------- ++ ++The event is emitted once until the query command is executed, ++the first event will always be emitted. ++ ++Data: ++ ++- "name": net client name (json-string) ++- "path": device path (json-string) ++ ++{ "event": "NIC_RX_FILTER_CHANGED", ++ "data": { "name": "vnet0", ++ "path": "/machine/peripheral/vnet0/virtio-backend" }, ++ "timestamp": { "seconds": 1368697518, "microseconds": 326866 } } ++} ++ + RESET + ----- + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 3290013..19c5030 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -21,6 +21,8 @@ + #include "hw/virtio/virtio-net.h" + #include "net/vhost_net.h" + #include "hw/virtio/virtio-bus.h" ++#include "qapi/qmp/qjson.h" ++#include "monitor/monitor.h" + + #define VIRTIO_NET_VM_VERSION 11 + +@@ -192,6 +194,105 @@ static void virtio_net_set_link_status(NetClientState *nc) + virtio_net_set_status(vdev, vdev->status); + } + ++static void rxfilter_notify(NetClientState *nc) ++{ ++ QObject *event_data; ++ VirtIONet *n = qemu_get_nic_opaque(nc); ++ ++ if (nc->rxfilter_notify_enabled) { ++ if (n->netclient_name) { ++ event_data = qobject_from_jsonf("{ 'name': %s, 'path': %s }", ++ n->netclient_name, ++ object_get_canonical_path(OBJECT(n->qdev))); ++ } else { ++ event_data = qobject_from_jsonf("{ 'path': %s }", ++ object_get_canonical_path(OBJECT(n->qdev))); ++ } ++ monitor_protocol_event(QEVENT_NIC_RX_FILTER_CHANGED, event_data); ++ qobject_decref(event_data); ++ ++ /* disable event notification to avoid events flooding */ ++ nc->rxfilter_notify_enabled = 0; ++ } ++} ++ ++static char *mac_strdup_printf(const uint8_t *mac) ++{ ++ return g_strdup_printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", mac[0], ++ mac[1], mac[2], mac[3], mac[4], mac[5]); ++} ++ ++static RxFilterInfo *virtio_net_query_rxfilter(NetClientState *nc) ++{ ++ VirtIONet *n = qemu_get_nic_opaque(nc); ++ RxFilterInfo *info; ++ strList *str_list, *entry; ++ intList *int_list, *int_entry; ++ int i, j; ++ ++ info = g_malloc0(sizeof(*info)); ++ info->name = g_strdup(nc->name); ++ info->promiscuous = n->promisc; ++ ++ if (n->nouni) { ++ info->unicast = RX_STATE_NONE; ++ } else if (n->alluni) { ++ info->unicast = RX_STATE_ALL; ++ } else { ++ info->unicast = RX_STATE_NORMAL; ++ } ++ ++ if (n->nomulti) { ++ info->multicast = RX_STATE_NONE; ++ } else if (n->allmulti) { ++ info->multicast = RX_STATE_ALL; ++ } else { ++ info->multicast = RX_STATE_NORMAL; ++ } ++ ++ info->broadcast_allowed = n->nobcast; ++ info->multicast_overflow = n->mac_table.multi_overflow; ++ info->unicast_overflow = n->mac_table.uni_overflow; ++ ++ info->main_mac = mac_strdup_printf(n->mac); ++ ++ str_list = NULL; ++ for (i = 0; i < n->mac_table.first_multi; i++) { ++ entry = g_malloc0(sizeof(*entry)); ++ entry->value = mac_strdup_printf(n->mac_table.macs + i * ETH_ALEN); ++ entry->next = str_list; ++ str_list = entry; ++ } ++ info->unicast_table = str_list; ++ ++ str_list = NULL; ++ for (i = n->mac_table.first_multi; i < n->mac_table.in_use; i++) { ++ entry = g_malloc0(sizeof(*entry)); ++ entry->value = mac_strdup_printf(n->mac_table.macs + i * ETH_ALEN); ++ entry->next = str_list; ++ str_list = entry; ++ } ++ info->multicast_table = str_list; ++ ++ int_list = NULL; ++ for (i = 0; i < MAX_VLAN >> 5; i++) { ++ for (j = 0; n->vlans[i] && j < 0x1f; j++) { ++ if (n->vlans[i] & (1U << j)) { ++ int_entry = g_malloc0(sizeof(*int_entry)); ++ int_entry->value = (i << 5) + j; ++ int_entry->next = int_list; ++ int_list = int_entry; ++ } ++ } ++ } ++ info->vlan_table = int_list; ++ ++ /* enable event notification after query */ ++ nc->rxfilter_notify_enabled = 1; ++ ++ return info; ++} ++ + static void virtio_net_reset(VirtIODevice *vdev) + { + VirtIONet *n = VIRTIO_NET(vdev); +@@ -396,6 +497,7 @@ static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd, + { + uint8_t on; + size_t s; ++ NetClientState *nc = qemu_get_queue(n->nic); + + s = iov_to_buf(iov, iov_cnt, 0, &on, sizeof(on)); + if (s != sizeof(on)) { +@@ -418,6 +520,8 @@ static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd, + return VIRTIO_NET_ERR; + } + ++ rxfilter_notify(nc); ++ + return VIRTIO_NET_OK; + } + +@@ -426,6 +530,7 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + { + struct virtio_net_ctrl_mac mac_data; + size_t s; ++ NetClientState *nc = qemu_get_queue(n->nic); + + if (cmd == VIRTIO_NET_CTRL_MAC_ADDR_SET) { + if (iov_size(iov, iov_cnt) != sizeof(n->mac)) { +@@ -434,6 +539,8 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + s = iov_to_buf(iov, iov_cnt, 0, &n->mac, sizeof(n->mac)); + assert(s == sizeof(n->mac)); + qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac); ++ rxfilter_notify(nc); ++ + return VIRTIO_NET_OK; + } + +@@ -451,19 +558,19 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + sizeof(mac_data.entries)); + mac_data.entries = ldl_p(&mac_data.entries); + if (s != sizeof(mac_data.entries)) { +- return VIRTIO_NET_ERR; ++ goto error; + } + iov_discard_front(&iov, &iov_cnt, s); + + if (mac_data.entries * ETH_ALEN > iov_size(iov, iov_cnt)) { +- return VIRTIO_NET_ERR; ++ goto error; + } + + if (mac_data.entries <= MAC_TABLE_ENTRIES) { + s = iov_to_buf(iov, iov_cnt, 0, n->mac_table.macs, + mac_data.entries * ETH_ALEN); + if (s != mac_data.entries * ETH_ALEN) { +- return VIRTIO_NET_ERR; ++ goto error; + } + n->mac_table.in_use += mac_data.entries; + } else { +@@ -478,27 +585,33 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + sizeof(mac_data.entries)); + mac_data.entries = ldl_p(&mac_data.entries); + if (s != sizeof(mac_data.entries)) { +- return VIRTIO_NET_ERR; ++ goto error; + } + + iov_discard_front(&iov, &iov_cnt, s); + + if (mac_data.entries * ETH_ALEN != iov_size(iov, iov_cnt)) { +- return VIRTIO_NET_ERR; ++ goto error; + } + + if (n->mac_table.in_use + mac_data.entries <= MAC_TABLE_ENTRIES) { + s = iov_to_buf(iov, iov_cnt, 0, n->mac_table.macs, + mac_data.entries * ETH_ALEN); + if (s != mac_data.entries * ETH_ALEN) { +- return VIRTIO_NET_ERR; ++ goto error; + } + n->mac_table.in_use += mac_data.entries; + } else { + n->mac_table.multi_overflow = 1; + } + ++ rxfilter_notify(nc); ++ + return VIRTIO_NET_OK; ++ ++error: ++ rxfilter_notify(nc); ++ return VIRTIO_NET_ERR; + } + + static int virtio_net_handle_vlan_table(VirtIONet *n, uint8_t cmd, +@@ -506,6 +619,7 @@ static int virtio_net_handle_vlan_table(VirtIONet *n, uint8_t cmd, + { + uint16_t vid; + size_t s; ++ NetClientState *nc = qemu_get_queue(n->nic); + + s = iov_to_buf(iov, iov_cnt, 0, &vid, sizeof(vid)); + vid = lduw_p(&vid); +@@ -523,6 +637,8 @@ static int virtio_net_handle_vlan_table(VirtIONet *n, uint8_t cmd, + else + return VIRTIO_NET_ERR; + ++ rxfilter_notify(nc); ++ + return VIRTIO_NET_OK; + } + +@@ -1244,6 +1360,7 @@ static NetClientInfo net_virtio_info = { + .receive = virtio_net_receive, + .cleanup = virtio_net_cleanup, + .link_status_changed = virtio_net_set_link_status, ++ .query_rx_filter = virtio_net_query_rxfilter, + }; + + static bool virtio_net_guest_notifier_pending(VirtIODevice *vdev, int idx) +@@ -1305,6 +1422,7 @@ static int virtio_net_device_init(VirtIODevice *vdev) + + DeviceState *qdev = DEVICE(vdev); + VirtIONet *n = VIRTIO_NET(vdev); ++ NetClientState *nc; + + virtio_init(VIRTIO_DEVICE(n), "virtio-net", VIRTIO_ID_NET, + n->config_size); +@@ -1371,6 +1489,9 @@ static int virtio_net_device_init(VirtIODevice *vdev) + + n->vlans = g_malloc0(MAX_VLAN >> 3); + ++ nc = qemu_get_queue(n->nic); ++ nc->rxfilter_notify_enabled = 1; ++ + n->qdev = qdev; + register_savevm(qdev, "virtio-net", -1, VIRTIO_NET_VM_VERSION, + virtio_net_save, virtio_net_load, n); +diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h +index 07b41a6..10fa0e3 100644 +--- a/include/monitor/monitor.h ++++ b/include/monitor/monitor.h +@@ -41,6 +41,7 @@ typedef enum MonitorEvent { + QEVENT_BLOCK_JOB_READY, + QEVENT_DEVICE_DELETED, + QEVENT_DEVICE_TRAY_MOVED, ++ QEVENT_NIC_RX_FILTER_CHANGED, + QEVENT_SUSPEND, + QEVENT_SUSPEND_DISK, + QEVENT_WAKEUP, +diff --git a/include/net/net.h b/include/net/net.h +index 43d85a1..30e4b04 100644 +--- a/include/net/net.h ++++ b/include/net/net.h +@@ -49,6 +49,7 @@ typedef ssize_t (NetReceiveIOV)(NetClientState *, const struct iovec *, int); + typedef void (NetCleanup) (NetClientState *); + typedef void (LinkStatusChanged)(NetClientState *); + typedef void (NetClientDestructor)(NetClientState *); ++typedef RxFilterInfo *(QueryRxFilter)(NetClientState *); + + typedef struct NetClientInfo { + NetClientOptionsKind type; +@@ -59,6 +60,7 @@ typedef struct NetClientInfo { + NetCanReceive *can_receive; + NetCleanup *cleanup; + LinkStatusChanged *link_status_changed; ++ QueryRxFilter *query_rx_filter; + NetPoll *poll; + } NetClientInfo; + +@@ -74,6 +76,7 @@ struct NetClientState { + unsigned receive_disabled : 1; + NetClientDestructor *destructor; + unsigned int queue_index; ++ unsigned rxfilter_notify_enabled:1; + }; + + typedef struct NICState { +diff --git a/monitor.c b/monitor.c +index c226acf..8f36f91 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -498,6 +498,7 @@ static const char *monitor_event_names[] = { + [QEVENT_BLOCK_JOB_READY] = "BLOCK_JOB_READY", + [QEVENT_DEVICE_DELETED] = "DEVICE_DELETED", + [QEVENT_DEVICE_TRAY_MOVED] = "DEVICE_TRAY_MOVED", ++ [QEVENT_NIC_RX_FILTER_CHANGED] = "NIC_RX_FILTER_CHANGED", + [QEVENT_SUSPEND] = "SUSPEND", + [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK", + [QEVENT_WAKEUP] = "WAKEUP", +diff --git a/net/net.c b/net/net.c +index 43a74e4..c0d61bf 100644 +--- a/net/net.c ++++ b/net/net.c +@@ -961,6 +961,54 @@ void print_net_client(Monitor *mon, NetClientState *nc) + nc->info_str); + } + ++RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name, ++ Error **errp) ++{ ++ NetClientState *nc; ++ RxFilterInfoList *filter_list = NULL, *last_entry = NULL; ++ ++ QTAILQ_FOREACH(nc, &net_clients, next) { ++ RxFilterInfoList *entry; ++ RxFilterInfo *info; ++ ++ if (has_name && strcmp(nc->name, name) != 0) { ++ continue; ++ } ++ ++ /* only query rx-filter information of NIC */ ++ if (nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC) { ++ if (has_name) { ++ error_setg(errp, "net client(%s) isn't a NIC", name); ++ break; ++ } ++ continue; ++ } ++ ++ if (nc->info->query_rx_filter) { ++ info = nc->info->query_rx_filter(nc); ++ entry = g_malloc0(sizeof(*entry)); ++ entry->value = info; ++ ++ if (!filter_list) { ++ filter_list = entry; ++ } else { ++ last_entry->next = entry; ++ } ++ last_entry = entry; ++ } else if (has_name) { ++ error_setg(errp, "net client(%s) doesn't support" ++ " rx-filter querying", name); ++ break; ++ } ++ } ++ ++ if (filter_list == NULL && !error_is_set(errp) && has_name) { ++ error_setg(errp, "invalid net client name: %s", name); ++ } ++ ++ return filter_list; ++} ++ + void do_info_network(Monitor *mon, const QDict *qdict) + { + NetClientState *nc, *peer; +diff --git a/qapi-schema.json b/qapi-schema.json +index 64696a9..92fcd54 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -3737,7 +3737,6 @@ + 'cpuid-register': 'X86CPURegister32', + 'features': 'int' } } + +- + ## + # @BlockdevDiscardOptions + # +@@ -3972,3 +3971,79 @@ + # Since: 1.7 + ## + { 'command': 'blockdev-add', 'data': { 'options': 'BlockdevOptions' } } ++ ++## ++# @RxState: ++# ++# Packets receiving state ++# ++# @normal: filter assigned packets according to the mac-table ++# ++# @none: don't receive any assigned packet ++# ++# @all: receive all assigned packets ++# ++# Since: 1.6 ++## ++{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] } ++ ++## ++# @RxFilterInfo: ++# ++# Rx-filter information for a NIC. ++# ++# @name: net client name ++# ++# @promiscuous: whether promiscuous mode is enabled ++# ++# @multicast: multicast receive state ++# ++# @unicast: unicast receive state ++# ++# @broadcast-allowed: whether to receive broadcast ++# ++# @multicast-overflow: multicast table is overflowed or not ++# ++# @unicast-overflow: unicast table is overflowed or not ++# ++# @main-mac: the main macaddr string ++# ++# @vlan-table: a list of active vlan id ++# ++# @unicast-table: a list of unicast macaddr string ++# ++# @multicast-table: a list of multicast macaddr string ++# ++# Since 1.6 ++## ++ ++{ 'type': 'RxFilterInfo', ++ 'data': { ++ 'name': 'str', ++ 'promiscuous': 'bool', ++ 'multicast': 'RxState', ++ 'unicast': 'RxState', ++ 'broadcast-allowed': 'bool', ++ 'multicast-overflow': 'bool', ++ 'unicast-overflow': 'bool', ++ 'main-mac': 'str', ++ 'vlan-table': ['int'], ++ 'unicast-table': ['str'], ++ 'multicast-table': ['str'] }} ++ ++## ++# @query-rx-filter: ++# ++# Return rx-filter information for all NICs (or for the given NIC). ++# ++# @name: #optional net client name ++# ++# Returns: list of @RxFilterInfo for all NICs (or for the given NIC). ++# Returns an error if the given @name doesn't exist, or given ++# NIC doesn't support rx-filter querying, or given net client ++# isn't a NIC. ++# ++# Since: 1.6 ++## ++{ 'command': 'query-rx-filter', 'data': { '*name': 'str' }, ++ 'returns': ['RxFilterInfo'] } +diff --git a/qmp-commands.hx b/qmp-commands.hx +index f71c34e..4942590 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -3061,3 +3061,67 @@ Example (2): + <- { "return": {} } + + EQMP ++ ++ { ++ .name = "query-rx-filter", ++ .args_type = "name:s?", ++ .mhandler.cmd_new = qmp_marshal_input_query_rx_filter, ++ }, ++ ++SQMP ++query-rx-filter ++--------------- ++ ++Show rx-filter information. ++ ++Returns a json-array of rx-filter information for all NICs (or for the ++given NIC), returning an error if the given NIC doesn't exist, or ++given NIC doesn't support rx-filter querying, or given net client ++isn't a NIC. ++ ++The query will clear the event notification flag of each NIC, then qemu ++will start to emit event to QMP monitor. ++ ++Each array entry contains the following: ++ ++- "name": net client name (json-string) ++- "promiscuous": promiscuous mode is enabled (json-bool) ++- "multicast": multicast receive state (one of 'normal', 'none', 'all') ++- "unicast": unicast receive state (one of 'normal', 'none', 'all') ++- "broadcast-allowed": allow to receive broadcast (json-bool) ++- "multicast-overflow": multicast table is overflowed (json-bool) ++- "unicast-overflow": unicast table is overflowed (json-bool) ++- "main-mac": main macaddr string (json-string) ++- "vlan-table": a json-array of active vlan id ++- "unicast-table": a json-array of unicast macaddr string ++- "multicast-table": a json-array of multicast macaddr string ++ ++Example: ++ ++-> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } } ++<- { "return": [ ++ { ++ "promiscuous": true, ++ "name": "vnet0", ++ "main-mac": "52:54:00:12:34:56", ++ "unicast": "normal", ++ "vlan-table": [ ++ 4, ++ 0 ++ ], ++ "unicast-table": [ ++ ], ++ "multicast": "normal", ++ "multicast-overflow": false, ++ "unicast-overflow": false, ++ "multicast-table": [ ++ "01:00:5e:00:00:01", ++ "33:33:00:00:00:01", ++ "33:33:ff:12:34:56" ++ ], ++ "broadcast-allowed": false ++ } ++ ] ++ } ++ ++EQMP +-- +1.7.1 + diff --git a/SOURCES/kvm-net-check-packet-payload-length.patch b/SOURCES/kvm-net-check-packet-payload-length.patch new file mode 100644 index 0000000..34b0106 --- /dev/null +++ b/SOURCES/kvm-net-check-packet-payload-length.patch @@ -0,0 +1,64 @@ +From fa1aaeeab2f10d7f107dd45a2c06e40e71bde1c3 Mon Sep 17 00:00:00 2001 +From: "wexu@redhat.com" +Date: Wed, 21 Dec 2016 06:04:24 +0100 +Subject: [PATCH 3/4] net: check packet payload length + +RH-Author: wexu@redhat.com +Message-id: <1482300264-29708-2-git-send-email-wexu@redhat.com> +Patchwork-id: 73088 +O-Subject: [RHEL-7.4/7.3.z qemu-kvm Patch v2] net: check packet payload length +Bugzilla: 1398218 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +From: Prasad J Pandit + +While computing IP checksum, 'net_checksum_calculate' reads +payload length from the packet. It could exceed the given 'data' +buffer size. Add a check to avoid it. + +This patch is to fix CVE-2016-2857. +https://access.redhat.com/security/cve/CVE-2016-2857 + +Reported-by: Liu Ling +Signed-off-by: Prasad J Pandit +Signed-off-by: Jason Wang +(cherry picked from commit 362786f14a753d8a5256ef97d7c10ed576d6572b) +Signed-off-by: Wei Xu +Signed-off-by: Miroslav Rezanina +--- + net/checksum.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/net/checksum.c b/net/checksum.c +index 14c0855..0942437 100644 +--- a/net/checksum.c ++++ b/net/checksum.c +@@ -59,6 +59,11 @@ void net_checksum_calculate(uint8_t *data, int length) + int hlen, plen, proto, csum_offset; + uint16_t csum; + ++ /* Ensure data has complete L2 & L3 headers. */ ++ if (length < 14 + 20) { ++ return; ++ } ++ + if ((data[14] & 0xf0) != 0x40) + return; /* not IPv4 */ + hlen = (data[14] & 0x0f) * 4; +@@ -76,8 +81,9 @@ void net_checksum_calculate(uint8_t *data, int length) + return; + } + +- if (plen < csum_offset+2) +- return; ++ if (plen < csum_offset + 2 || 14 + hlen + plen > length) { ++ return; ++ } + + data[14+hlen+csum_offset] = 0; + data[14+hlen+csum_offset+1] = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-net-e1000-update-network-information-when-macaddr-is.patch b/SOURCES/kvm-net-e1000-update-network-information-when-macaddr-is.patch new file mode 100644 index 0000000..7210415 --- /dev/null +++ b/SOURCES/kvm-net-e1000-update-network-information-when-macaddr-is.patch @@ -0,0 +1,59 @@ +From 7825ef61b703c017c2b4ae56007046f0acd3fee6 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 5 Nov 2013 09:17:40 +0100 +Subject: [PATCH 08/25] net/e1000: update network information when macaddr is changed in guest + +RH-Author: Amos Kong +Message-id: <1383643062-1844-3-git-send-email-akong@redhat.com> +Patchwork-id: 55369 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/4] net/e1000: update network information when macaddr is changed in guest +Bugzilla: 922589 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Alex Williamson +RH-Acked-by: Xiao Wang +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 922589 + +If we change macaddr in guest by 'ifconfig eth0 hw ether 12:12:12:34:35:36', +the mac register of e1000 is already updated, but we don't update +network information in qemu. Therefor, the information in monitor +is wrong. + +This patch updates nic info when the second part of macaddr is written. + +Signed-off-by: Amos Kong +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 7c36507c2b8776266f50c5e2739bd18279953b93) +--- + hw/net/e1000.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/e1000.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index d273ef2..87a84a7 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -971,7 +971,15 @@ mac_read_clr8(E1000State *s, int index) + static void + mac_writereg(E1000State *s, int index, uint32_t val) + { ++ uint32_t macaddr[2]; ++ + s->mac_reg[index] = val; ++ ++ if (index == RA + 1) { ++ macaddr[0] = cpu_to_le32(s->mac_reg[RA]); ++ macaddr[1] = cpu_to_le32(s->mac_reg[RA + 1]); ++ qemu_format_nic_info_str(qemu_get_queue(s->nic), (uint8_t *)macaddr); ++ } + } + + static void +-- +1.7.1 + diff --git a/SOURCES/kvm-net-rtl8139-update-network-information-when-macaddr-.patch b/SOURCES/kvm-net-rtl8139-update-network-information-when-macaddr-.patch new file mode 100644 index 0000000..6ca3f82 --- /dev/null +++ b/SOURCES/kvm-net-rtl8139-update-network-information-when-macaddr-.patch @@ -0,0 +1,55 @@ +From 1e7727e27ed91dd30b477ef7b78b0f05aba5a364 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 5 Nov 2013 09:17:41 +0100 +Subject: [PATCH 09/25] net/rtl8139: update network information when macaddr is changed in guest + +RH-Author: Amos Kong +Message-id: <1383643062-1844-4-git-send-email-akong@redhat.com> +Patchwork-id: 55370 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/4] net/rtl8139: update network information when macaddr is changed in guest +Bugzilla: 922589 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Alex Williamson +RH-Acked-by: Xiao Wang +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 922589 + +rtl8139 has same problem as e1000, nic info isn't updated when macaddr +is changed in guest. + +This patch updates the nic info when the last bit of macaddr is written. + +Signed-off-by: Amos Kong +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 23c37c37f0280761072c23bf67d3a4f3c0ff25aa) +--- + hw/net/rtl8139.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 3ff5518..d08106b 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2722,8 +2722,12 @@ static void rtl8139_io_writeb(void *opaque, uint8_t addr, uint32_t val) + + switch (addr) + { +- case MAC0 ... MAC0+5: ++ case MAC0 ... MAC0+4: ++ s->phys[addr - MAC0] = val; ++ break; ++ case MAC0+5: + s->phys[addr - MAC0] = val; ++ qemu_format_nic_info_str(qemu_get_queue(s->nic), s->phys); + break; + case MAC0+6 ... MAC0+7: + /* reserved */ +-- +1.7.1 + diff --git a/SOURCES/kvm-net-update-nic-info-during-device-reset.patch b/SOURCES/kvm-net-update-nic-info-during-device-reset.patch new file mode 100644 index 0000000..bf97259 --- /dev/null +++ b/SOURCES/kvm-net-update-nic-info-during-device-reset.patch @@ -0,0 +1,62 @@ +From c3ceee56d6d43cd234fcc297b802d68a53b3a12a Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 5 Nov 2013 09:17:39 +0100 +Subject: [PATCH 07/25] net: update nic info during device reset + +RH-Author: Amos Kong +Message-id: <1383643062-1844-2-git-send-email-akong@redhat.com> +Patchwork-id: 55368 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/4] net: update nic info during device reset +Bugzilla: 922589 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Alex Williamson +RH-Acked-by: Xiao Wang +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 922589 + +macaddr is reset during device reset, but nic info +isn't updated, this problem exists in e1000 & rtl8139 + +Signed-off-by: Amos Kong +Acked-by: Michael S. Tsirkin +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 655d3b63b036b70714adbdae685055f1bda0f8f1) +--- + hw/net/e1000.c | 1 + + hw/net/rtl8139.c | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/e1000.c | 1 + + hw/net/rtl8139.c | 1 + + 2 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hw/net/e1000.c b/hw/net/e1000.c +index a813523..d273ef2 100644 +--- a/hw/net/e1000.c ++++ b/hw/net/e1000.c +@@ -315,6 +315,7 @@ static void e1000_reset(void *opaque) + d->mac_reg[RA] |= macaddr[i] << (8 * i); + d->mac_reg[RA + 1] |= (i < 2) ? macaddr[i + 4] << (8 * i) : 0; + } ++ qemu_format_nic_info_str(qemu_get_queue(d->nic), macaddr); + } + + static void +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 8f20ef4..3ff5518 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -1202,6 +1202,7 @@ static void rtl8139_reset(DeviceState *d) + + /* restore MAC address */ + memcpy(s->phys, s->conf.macaddr.a, 6); ++ qemu_format_nic_info_str(qemu_get_queue(s->nic), s->phys); + + /* reset interrupt mask */ + s->IntrStatus = 0; +-- +1.7.1 + diff --git a/SOURCES/kvm-option-Add-assigned-flag-to-QEMUOptionParameter.patch b/SOURCES/kvm-option-Add-assigned-flag-to-QEMUOptionParameter.patch new file mode 100644 index 0000000..9f960b9 --- /dev/null +++ b/SOURCES/kvm-option-Add-assigned-flag-to-QEMUOptionParameter.patch @@ -0,0 +1,92 @@ +From 5902165e0f08a265b0bb422f13e161bd4de37eb3 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:06 +0100 +Subject: [PATCH 01/14] option: Add assigned flag to QEMUOptionParameter + +RH-Author: Max Reitz +Message-id: <1389131839-12920-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 56537 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 01/14] option: Add assigned flag to QEMUOptionParameter +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Adds an "assigned" flag to QEMUOptionParameter which is cleared at the +beginning of parse_option_parameters and set on (successful) +set_option_parameter and set_option_parameter_int. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit d4ca092a423f1f853a99357bab01a168bb57d625) + +Signed-off-by: Max Reitz +--- + include/qemu/option.h | 1 + + util/qemu-option.c | 9 +++++++++ + 2 files changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/option.h | 1 + + util/qemu-option.c | 9 +++++++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/include/qemu/option.h b/include/qemu/option.h +index 96f70b6..5c0c6dd 100644 +--- a/include/qemu/option.h ++++ b/include/qemu/option.h +@@ -46,6 +46,7 @@ typedef struct QEMUOptionParameter { + char* s; + } value; + const char *help; ++ bool assigned; + } QEMUOptionParameter; + + +diff --git a/util/qemu-option.c b/util/qemu-option.c +index 1cefbfe..2445406 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -275,6 +275,8 @@ int set_option_parameter(QEMUOptionParameter *list, const char *name, + return -1; + } + ++ list->assigned = true; ++ + return 0; + } + +@@ -306,6 +308,8 @@ int set_option_parameter_int(QEMUOptionParameter *list, const char *name, + return -1; + } + ++ list->assigned = true; ++ + return 0; + } + +@@ -397,6 +401,7 @@ QEMUOptionParameter *parse_option_parameters(const char *param, + char value[256]; + char *param_delim, *value_delim; + char next_delim; ++ int i; + + if (list == NULL) { + return NULL; +@@ -406,6 +411,10 @@ QEMUOptionParameter *parse_option_parameters(const char *param, + dest = allocated = append_option_parameters(NULL, list); + } + ++ for (i = 0; dest[i].name; i++) { ++ dest[i].assigned = false; ++ } ++ + while (*param) { + + // Find parameter name and value in the string +-- +1.7.1 + diff --git a/SOURCES/kvm-osdep-add-qemu_get_local_state_pathname.patch b/SOURCES/kvm-osdep-add-qemu_get_local_state_pathname.patch new file mode 100644 index 0000000..d620140 --- /dev/null +++ b/SOURCES/kvm-osdep-add-qemu_get_local_state_pathname.patch @@ -0,0 +1,130 @@ +From eb8c85b01be23beabb2b61e8b32a7e20ca0fea17 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 14:03:22 +0200 +Subject: [PATCH 01/28] osdep: add qemu_get_local_state_pathname() + +RH-Author: Laszlo Ersek +Message-id: <1375279407-13573-2-git-send-email-lersek@redhat.com> +Patchwork-id: 52863 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/6] osdep: add qemu_get_local_state_pathname() +Bugzilla: 964304 +RH-Acked-by: Michal Novotny +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Paolo Bonzini + +This function returns ${prefix}/var/RELATIVE_PATHNAME on POSIX-y systems, +and /RELATIVE_PATHNAME on Win32. + +http://msdn.microsoft.com/en-us/library/bb762494.aspx + + [...] This folder is used for application data that is not user + specific. For example, an application can store a spell-check + dictionary, a database of clip art, or a log file in the + CSIDL_COMMON_APPDATA folder. [...] + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael Roth +(cherry picked from commit e2ea3515a9d2d747f91dadf361afcbeb57a71500) +--- + include/qemu/osdep.h | 11 +++++++++++ + util/oslib-posix.c | 9 +++++++++ + util/oslib-win32.c | 22 ++++++++++++++++++++++ + 3 files changed, 42 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/osdep.h | 11 +++++++++++ + util/oslib-posix.c | 9 +++++++++ + util/oslib-win32.c | 22 ++++++++++++++++++++++ + 3 files changed, 42 insertions(+), 0 deletions(-) + +diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h +index 57d7b1f..26136f1 100644 +--- a/include/qemu/osdep.h ++++ b/include/qemu/osdep.h +@@ -204,4 +204,15 @@ const char *qemu_get_version(void); + void fips_set_state(bool requested); + bool fips_get_state(void); + ++/* Return a dynamically allocated pathname denoting a file or directory that is ++ * appropriate for storing local state. ++ * ++ * @relative_pathname need not start with a directory separator; one will be ++ * added automatically. ++ * ++ * The caller is responsible for releasing the value returned with g_free() ++ * after use. ++ */ ++char *qemu_get_local_state_pathname(const char *relative_pathname); ++ + #endif +diff --git a/util/oslib-posix.c b/util/oslib-posix.c +index 631a1de..3dc8b1b 100644 +--- a/util/oslib-posix.c ++++ b/util/oslib-posix.c +@@ -47,6 +47,8 @@ extern int daemon(int, int); + # define QEMU_VMALLOC_ALIGN getpagesize() + #endif + ++#include ++ + #include "config-host.h" + #include "sysemu/sysemu.h" + #include "trace.h" +@@ -232,3 +234,10 @@ int qemu_utimens(const char *path, const struct timespec *times) + + return utimes(path, &tv[0]); + } ++ ++char * ++qemu_get_local_state_pathname(const char *relative_pathname) ++{ ++ return g_strdup_printf("%s/%s", CONFIG_QEMU_LOCALSTATEDIR, ++ relative_pathname); ++} +diff --git a/util/oslib-win32.c b/util/oslib-win32.c +index df2ecbd..961fbf5 100644 +--- a/util/oslib-win32.c ++++ b/util/oslib-win32.c +@@ -26,12 +26,17 @@ + * THE SOFTWARE. + */ + #include ++#include ++#include + #include "config-host.h" + #include "sysemu/sysemu.h" + #include "qemu/main-loop.h" + #include "trace.h" + #include "qemu/sockets.h" + ++/* this must come after including "trace.h" */ ++#include ++ + void *qemu_oom_check(void *ptr) + { + if (ptr == NULL) { +@@ -160,3 +165,20 @@ int qemu_get_thread_id(void) + { + return GetCurrentThreadId(); + } ++ ++char * ++qemu_get_local_state_pathname(const char *relative_pathname) ++{ ++ HRESULT result; ++ char base_path[MAX_PATH+1] = ""; ++ ++ result = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, ++ /* SHGFP_TYPE_CURRENT */ 0, base_path); ++ if (result != S_OK) { ++ /* misconfigured environment */ ++ g_critical("CSIDL_COMMON_APPDATA unavailable: %ld", (long)result); ++ abort(); ++ } ++ return g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", base_path, ++ relative_pathname); ++} +-- +1.7.1 + diff --git a/SOURCES/kvm-parallels-Fix-catalog-size-integer-overflow-CVE-2014.patch b/SOURCES/kvm-parallels-Fix-catalog-size-integer-overflow-CVE-2014.patch new file mode 100644 index 0000000..1559eb5 --- /dev/null +++ b/SOURCES/kvm-parallels-Fix-catalog-size-integer-overflow-CVE-2014.patch @@ -0,0 +1,206 @@ +From eabeace95bfc1dd3c2280105c4fa83195c7bd4bd Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:54 +0100 +Subject: [PATCH 47/49] parallels: Fix catalog size integer overflow (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-48-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 47/48] parallels: Fix catalog size integer overflow (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +The first test case would cause a huge memory allocation, leading to a +qemu abort; the second one to a too small malloc() for the catalog +(smaller than s->catalog_size), which causes a read-only out-of-bounds +array access and on big endian hosts an endianess conversion for an +undefined memory area. + +The sample image used here is not an original Parallels image. It was +created using an hexeditor on the basis of the struct that qemu uses. +Good enough for trying to crash the driver, but not for ensuring +compatibility. + +Signed-off-by: Kevin Wolf + +Conflicts: +tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + block/parallels.c | 7 ++- + tests/qemu-iotests/076 | 69 ++++++++++++++++++++ + tests/qemu-iotests/076.out | 14 ++++ + tests/qemu-iotests/common | 7 ++ + tests/qemu-iotests/group | 1 + + .../qemu-iotests/sample_images/fake.parallels.bz2 | Bin 0 -> 141 bytes + 6 files changed, 97 insertions(+), 1 deletions(-) + create mode 100755 tests/qemu-iotests/076 + create mode 100644 tests/qemu-iotests/076.out + create mode 100644 tests/qemu-iotests/sample_images/fake.parallels.bz2 + +diff --git a/block/parallels.c b/block/parallels.c +index 2121e43..5d1c0af 100644 +--- a/block/parallels.c ++++ b/block/parallels.c +@@ -49,7 +49,7 @@ typedef struct BDRVParallelsState { + CoMutex lock; + + uint32_t *catalog_bitmap; +- int catalog_size; ++ unsigned int catalog_size; + + int tracks; + } BDRVParallelsState; +@@ -94,6 +94,11 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, + s->tracks = le32_to_cpu(ph.tracks); + + s->catalog_size = le32_to_cpu(ph.catalog_entries); ++ if (s->catalog_size > INT_MAX / 4) { ++ error_setg(errp, "Catalog too large"); ++ ret = -EFBIG; ++ goto fail; ++ } + s->catalog_bitmap = g_malloc(s->catalog_size * 4); + + ret = bdrv_pread(bs->file, 64, s->catalog_bitmap, s->catalog_size * 4); +diff --git a/tests/qemu-iotests/076 b/tests/qemu-iotests/076 +new file mode 100755 +index 0000000..6028ac5 +--- /dev/null ++++ b/tests/qemu-iotests/076 +@@ -0,0 +1,69 @@ ++#!/bin/bash ++# ++# parallels format input validation tests ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt parallels ++_supported_proto generic ++_supported_os Linux ++ ++catalog_entries_offset=$((0x20)) ++nb_sectors_offset=$((0x24)) ++ ++echo ++echo "== Read from a valid (enough) image ==" ++_use_sample_img fake.parallels.bz2 ++{ $QEMU_IO -c "read -P 0x11 0 64k" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== Negative catalog size ==" ++_use_sample_img fake.parallels.bz2 ++poke_file "$TEST_IMG" "$catalog_entries_offset" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== Overflow in catalog allocation ==" ++_use_sample_img fake.parallels.bz2 ++poke_file "$TEST_IMG" "$nb_sectors_offset" "\xff\xff\xff\xff" ++poke_file "$TEST_IMG" "$catalog_entries_offset" "\x01\x00\x00\x40" ++{ $QEMU_IO -c "read 64M 64M" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/076.out b/tests/qemu-iotests/076.out +new file mode 100644 +index 0000000..12af42a +--- /dev/null ++++ b/tests/qemu-iotests/076.out +@@ -0,0 +1,14 @@ ++QA output created by 076 ++ ++== Read from a valid (enough) image == ++read 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== Negative catalog size == ++qemu-io: can't open device TEST_DIR/fake.parallels: Catalog too large ++no file open, try 'help open' ++ ++== Overflow in catalog allocation == ++qemu-io: can't open device TEST_DIR/fake.parallels: Catalog too large ++no file open, try 'help open' ++*** done +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index 35abbfc..f8c1b56 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -131,6 +131,7 @@ check options + -bochs test bochs + -cow test cow + -cloop test cloop ++ -parallels test parallels + -qcow test qcow + -qcow2 test qcow2 + -qed test qed +@@ -181,6 +182,12 @@ testlist options + xpand=false + ;; + ++ -parallels) ++ IMGFMT=parallels ++ IMGFMT_GENERIC=false ++ xpand=false ++ ;; ++ + -qcow) + IMGFMT=qcow + xpand=false +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index e8ad780..ad96fcf 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -72,6 +72,7 @@ + 068 rw auto + 070 rw auto + 075 rw auto ++076 auto + 077 rw auto + 078 rw auto + 079 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-parallels-Sanity-check-for-s-tracks-CVE-2014-0142.patch b/SOURCES/kvm-parallels-Sanity-check-for-s-tracks-CVE-2014-0142.patch new file mode 100644 index 0000000..b91bc2f --- /dev/null +++ b/SOURCES/kvm-parallels-Sanity-check-for-s-tracks-CVE-2014-0142.patch @@ -0,0 +1,96 @@ +From 8d0f3218313c74d2e9df015385b809a7cb03734e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:55 +0100 +Subject: [PATCH 48/49] parallels: Sanity check for s->tracks (CVE-2014-0142) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-49-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 48/48] parallels: Sanity check for s->tracks (CVE-2014-0142) +Bugzilla: 1079315 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079315 +Upstream status: Embargoed + +This avoids a possible division by zero. + +Convert s->tracks to unsigned as well because it feels better than +surviving just because the results of calculations with s->tracks are +converted to unsigned anyway. + +Signed-off-by: Kevin Wolf +--- + block/parallels.c | 7 ++++++- + tests/qemu-iotests/076 | 7 +++++++ + tests/qemu-iotests/076.out | 4 ++++ + 3 files changed, 17 insertions(+), 1 deletions(-) + +diff --git a/block/parallels.c b/block/parallels.c +index 5d1c0af..d83cde4 100644 +--- a/block/parallels.c ++++ b/block/parallels.c +@@ -51,7 +51,7 @@ typedef struct BDRVParallelsState { + uint32_t *catalog_bitmap; + unsigned int catalog_size; + +- int tracks; ++ unsigned int tracks; + } BDRVParallelsState; + + static int parallels_probe(const uint8_t *buf, int buf_size, const char *filename) +@@ -92,6 +92,11 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, + bs->total_sectors = le32_to_cpu(ph.nb_sectors); + + s->tracks = le32_to_cpu(ph.tracks); ++ if (s->tracks == 0) { ++ error_setg(errp, "Invalid image: Zero sectors per track"); ++ ret = -EINVAL; ++ goto fail; ++ } + + s->catalog_size = le32_to_cpu(ph.catalog_entries); + if (s->catalog_size > INT_MAX / 4) { +diff --git a/tests/qemu-iotests/076 b/tests/qemu-iotests/076 +index 6028ac5..b614a7d 100755 +--- a/tests/qemu-iotests/076 ++++ b/tests/qemu-iotests/076 +@@ -42,6 +42,7 @@ _supported_fmt parallels + _supported_proto generic + _supported_os Linux + ++tracks_offset=$((0x1c)) + catalog_entries_offset=$((0x20)) + nb_sectors_offset=$((0x24)) + +@@ -63,6 +64,12 @@ poke_file "$TEST_IMG" "$nb_sectors_offset" "\xff\xff\xff\xff" + poke_file "$TEST_IMG" "$catalog_entries_offset" "\x01\x00\x00\x40" + { $QEMU_IO -c "read 64M 64M" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Zero sectors per track ==" ++_use_sample_img fake.parallels.bz2 ++poke_file "$TEST_IMG" "$tracks_offset" "\x00\x00\x00\x00" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/076.out b/tests/qemu-iotests/076.out +index 12af42a..f7745d8 100644 +--- a/tests/qemu-iotests/076.out ++++ b/tests/qemu-iotests/076.out +@@ -11,4 +11,8 @@ no file open, try 'help open' + == Overflow in catalog allocation == + qemu-io: can't open device TEST_DIR/fake.parallels: Catalog too large + no file open, try 'help open' ++ ++== Zero sectors per track == ++qemu-io: can't open device TEST_DIR/fake.parallels: Invalid image: Zero sectors per track ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Add-Broadwell-CPUID-compatibility-bits.patch b/SOURCES/kvm-pc-Add-Broadwell-CPUID-compatibility-bits.patch new file mode 100644 index 0000000..3ee49c5 --- /dev/null +++ b/SOURCES/kvm-pc-Add-Broadwell-CPUID-compatibility-bits.patch @@ -0,0 +1,41 @@ +From 2986c1070e031d290c268fba039e3eac97b28467 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 21 Aug 2014 19:58:17 +0200 +Subject: [PATCH 2/3] pc: Add Broadwell CPUID compatibility bits + +Message-id: <1408651097-24190-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 60671 +O-Subject: [RHEL7.1 qemu-kvm PATCH 2/2] pc: Add Broadwell CPUID compatibility bits +Bugzilla: 1116117 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini + +On RHEL-6, the Broadwell CPU model won't have the RDTSCP and SMAP +features. Add compatibility code to ensure we stay compatible when +migrating from RHEL-6. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 550acd8..4ea3f67 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -935,6 +935,10 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | + CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, + 0); ++ x86_cpu_compat_set_features("Broadwell", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Broadwell", FEAT_7_0_EBX, ++ 0, CPUID_7_0_EBX_SMAP); + + /* RHEL-6 kernel never supported exposing RDTSCP */ + x86_cpu_compat_set_features(NULL, FEAT_8000_0001_EDX, 0, CPUID_EXT2_RDTSCP); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-pc-Add-RHEL6-e1000-gPXE-image.patch b/SOURCES/kvm-pc-Add-RHEL6-e1000-gPXE-image.patch new file mode 100644 index 0000000..8443110 --- /dev/null +++ b/SOURCES/kvm-pc-Add-RHEL6-e1000-gPXE-image.patch @@ -0,0 +1,55 @@ +From b7f8490681d9bfb5c47f250323e369bed1645aac Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 7 Mar 2014 18:37:48 +0100 +Subject: [PATCH 08/16] pc: Add RHEL6 e1000 gPXE image + +RH-Author: Eduardo Habkost +Message-id: <1394217468-2864-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 58050 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] pc: Add RHEL6 e1000 gPXE image +Bugzilla: 1073774 +RH-Acked-by: Juan Quintela +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong + +Bugzilla: 1073774 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7157997 + +The fix for bz#997702 didn't have the RHEL6 e1000 ROM. Add the e1000-0x100e.rom +file from gpxe-roms-qemu-0.9.7-6.9.el6.noarch.rpm. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 4 ++++ + redhat/Makefile.common | 2 +- + redhat/qemu-kvm.spec.template | 3 +++ + redhat/rhel6-e1000.rom | Bin 0 -> 69120 bytes + 4 files changed, 8 insertions(+), 1 deletion(-) + create mode 100644 redhat/rhel6-e1000.rom + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + redhat/Makefile.common | 2 +- + redhat/qemu-kvm.spec.template | 3 +++ + redhat/rhel6-e1000.rom | Bin 0 -> 69120 bytes + 4 files changed, 8 insertions(+), 1 deletions(-) + create mode 100644 redhat/rhel6-e1000.rom + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 98a5253..6773fff 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -897,6 +897,10 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "romfile",\ + .value = "rhel6-rtl8139.rom",\ + },{\ ++ .driver = "e1000",\ ++ .property = "romfile",\ ++ .value = "rhel6-e1000.rom",\ ++ },{\ + .driver = "virtio-net-pci",\ + .property = "romfile",\ + .value = "rhel6-virtio.rom",\ +-- +1.7.1 diff --git a/SOURCES/kvm-pc-Create-pc_compat_rhel-functions.patch b/SOURCES/kvm-pc-Create-pc_compat_rhel-functions.patch new file mode 100644 index 0000000..2df1b06 --- /dev/null +++ b/SOURCES/kvm-pc-Create-pc_compat_rhel-functions.patch @@ -0,0 +1,195 @@ +From 9b80afa6377ff6cb0f0f28ab3719ddb5b61e4193 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 20 Jan 2014 19:05:29 +0100 +Subject: [PATCH 32/34] pc: Create pc_compat_rhel*() functions + +RH-Author: Eduardo Habkost +Message-id: <1390244730-31038-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 56847 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] pc: Create pc_compat_rhel*() functions +Bugzilla: 1049706 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das + +Bugzilla: 1049706 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6900764 +Upstream status: not applicable + +This is the RHEL equivalent of upstream +commit 396f79f45ea75bd1c421522f29b4f91d490df7cc. + +With the previous code, the compat code for a newer release could undo +the compat changes made by the compat code for an older release. With +the pc_init_*()/pc_compat_*() pattern, we can have two compat functions +touching the same bits, as the older compat functions will run last, +allowing it to undo changes done by newer compat functions. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++--------- + hw/i386/pc_q35.c | 5 +++++ + 2 files changed, 55 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 59 ++++++++++++++++++++++++++++++++++++++++++++-------- + hw/i386/pc_q35.c | 5 ++++ + 2 files changed, 55 insertions(+), 9 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index e061877..769571c 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -743,8 +743,13 @@ machine_init(pc_machine_init); + + /* Red Hat Enterprise Linux machine types */ + ++static void pc_compat_rhel700(QEMUMachineInitArgs *args) ++{ ++} ++ + static void pc_init_rhel700(QEMUMachineInitArgs *args) + { ++ pc_compat_rhel700(args); + pc_init_pci(args); + } + +@@ -868,8 +873,9 @@ static QEMUMachine pc_machine_rhel700 = { + .value = "rhel6-virtio.rom",\ + } + +-static void pc_init_rhel650(QEMUMachineInitArgs *args) ++static void pc_compat_rhel650(QEMUMachineInitArgs *args) + { ++ pc_compat_rhel700(args); + x86_cpu_compat_set_features("pentium", FEAT_1_EDX, 0, CPUID_APIC); + x86_cpu_compat_set_features("pentium2", FEAT_1_EDX, 0, CPUID_APIC); + x86_cpu_compat_set_features("pentium3", FEAT_1_EDX, 0, CPUID_APIC); +@@ -911,7 +917,12 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + + rom_file_in_ram = false; + has_acpi_build = false; +- pc_init_rhel700(args); ++} ++ ++static void pc_init_rhel650(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel650(args); ++ pc_init_pci(args); + } + + static QEMUMachine pc_machine_rhel650 = { +@@ -950,10 +961,16 @@ static QEMUMachine pc_machine_rhel650 = { + .value = "off",\ + } + +-static void pc_init_rhel640(QEMUMachineInitArgs *args) ++static void pc_compat_rhel640(QEMUMachineInitArgs *args) + { ++ pc_compat_rhel650(args); + x86_cpu_compat_set_features(NULL, FEAT_1_EDX, 0, CPUID_SEP); +- pc_init_rhel650(args); ++} ++ ++static void pc_init_rhel640(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel640(args); ++ pc_init_pci(args); + } + + static QEMUMachine pc_machine_rhel640 = { +@@ -1016,13 +1033,19 @@ static QEMUMachine pc_machine_rhel640 = { + .value = "1",\ + } + +-static void pc_init_rhel630(QEMUMachineInitArgs *args) ++static void pc_compat_rhel630(QEMUMachineInitArgs *args) + { ++ pc_compat_rhel640(args); + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); + x86_cpu_compat_set_features("SandyBridge", FEAT_1_ECX, + 0, CPUID_EXT_TSC_DEADLINE_TIMER); +- pc_init_rhel640(args); ++} ++ ++static void pc_init_rhel630(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel630(args); ++ pc_init_pci(args); + } + + static QEMUMachine pc_machine_rhel630 = { +@@ -1045,9 +1068,15 @@ static QEMUMachine pc_machine_rhel630 = { + .value = "off",\ + } + ++static void pc_compat_rhel620(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel630(args); ++} ++ + static void pc_init_rhel620(QEMUMachineInitArgs *args) + { +- pc_init_rhel630(args); ++ pc_compat_rhel620(args); ++ pc_init_pci(args); + } + + static QEMUMachine pc_machine_rhel620 = { +@@ -1111,9 +1140,15 @@ static QEMUMachine pc_machine_rhel620 = { + .value = "1",\ + } + ++static void pc_compat_rhel610(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel620(args); ++} ++ + static void pc_init_rhel610(QEMUMachineInitArgs *args) + { +- pc_init_rhel620(args); ++ pc_compat_rhel610(args); ++ pc_init_pci(args); + } + + static QEMUMachine pc_machine_rhel610 = { +@@ -1144,9 +1179,15 @@ static QEMUMachine pc_machine_rhel610 = { + .value = stringify(0),\ + } + ++static void pc_compat_rhel600(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel610(args); ++} ++ + static void pc_init_rhel600(QEMUMachineInitArgs *args) + { +- pc_init_rhel610(args); ++ pc_compat_rhel600(args); ++ pc_init_pci(args); + } + + static QEMUMachine pc_machine_rhel600 = { +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 8d1a714..0280a95 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -268,8 +268,13 @@ machine_init(pc_q35_machine_init); + + /* Red Hat Enterprise Linux machine types */ + ++static void pc_q35_compat_rhel700(QEMUMachineInitArgs *args) ++{ ++} ++ + static void pc_q35_init_rhel700(QEMUMachineInitArgs *args) + { ++ pc_q35_compat_rhel700(args); + pc_q35_init(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Disable-RDTSCP-on-AMD-CPU-models.patch b/SOURCES/kvm-pc-Disable-RDTSCP-on-AMD-CPU-models.patch new file mode 100644 index 0000000..cfaba14 --- /dev/null +++ b/SOURCES/kvm-pc-Disable-RDTSCP-on-AMD-CPU-models.patch @@ -0,0 +1,103 @@ +From 32c34876557574575cec036f09f7c826ccb4368a Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 27 Jan 2014 16:07:43 +0100 +Subject: [PATCH 21/22] pc: Disable RDTSCP on AMD CPU models + +RH-Author: Eduardo Habkost +Message-id: <1390838863-11030-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 56961 +O-Subject: [RHEL7 qemu-kvm PATCH v2 2/2] pc: Disable RDTSCP on AMD CPU models +Bugzilla: 1056428 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 874400 +Upstream status: not applicable (see notes below) +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6953316 + +KVM can't expose RDTSCP to guests on AMD CPUs, so there's no point in +having RDTSCP enabled on AMD CPU models. + +About upstream status and rationale for making it RHEL-specific: + +This is another case where independently from the upstream decision, we +will want to add RHEL-specific code to fiddle with the CPU definitions. + +TCG does support RDTSCP, so it makes sense for upstream to keep RDTSCP +enabled on those CPU models. We, on the other hand, care about KVM and +know libvirt doesn't use enforce mode yet (but should eventually use +it), so it makes sense to disable RDTSCP on AMD models in RHEL. + +(This will eventually be a problem for libvirt upstream, when it starts +using or emulating "enforce" mode. I have added notes at: +http://wiki.qemu.org/Features/CPUModels#Disabling_features_that_were_always_disabled_on_KVM ) + +Changes v1 -> v2: + * Fix typo: "phenon" -> "phenom" + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 14 ++++++++++++++ + hw/i386/pc_q35.c | 14 ++++++++++++++ + 2 files changed, 28 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 14 ++++++++++++++ + hw/i386/pc_q35.c | 14 ++++++++++++++ + 2 files changed, 28 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index b918f69..aac920a 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -760,6 +760,20 @@ static void pc_compat_rhel700(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ ++ /* KVM can't expose RDTSCP on AMD CPUs, so there's no point in enabling it ++ * on AMD CPU models. ++ */ ++ x86_cpu_compat_set_features("phenom", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G2", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G4", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G5", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); + } + + static void pc_init_rhel700(QEMUMachineInitArgs *args) +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 1ac46be..1aa8bde 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -283,6 +283,20 @@ static void pc_q35_compat_rhel700(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ ++ /* KVM can't expose RDTSCP on AMD CPUs, so there's no point in enabling it ++ * on AMD CPU models. ++ */ ++ x86_cpu_compat_set_features("phenom", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G2", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G4", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G5", FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_RDTSCP); + } + + static void pc_q35_init_rhel700(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Disable-RDTSCP-unconditionally-on-rhel6.-machine-.patch b/SOURCES/kvm-pc-Disable-RDTSCP-unconditionally-on-rhel6.-machine-.patch new file mode 100644 index 0000000..21cf37c --- /dev/null +++ b/SOURCES/kvm-pc-Disable-RDTSCP-unconditionally-on-rhel6.-machine-.patch @@ -0,0 +1,71 @@ +From 26653f89373a3439d6dba73c660d00116c0dbbc0 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 27 Jan 2014 16:07:42 +0100 +Subject: [PATCH 20/22] pc: Disable RDTSCP unconditionally on rhel6.* machine-types + +RH-Author: Eduardo Habkost +Message-id: <1390838863-11030-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 56960 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] pc: Disable RDTSCP unconditionally on rhel6.* machine-types +Bugzilla: 918907 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6953316 + +The RHEL-6 kernel didn't support exposing RDTSCP at all, so we need to +disable RDTSCP on all CPU models. + +The previous rhel6.5.0 compat code wasn't complete, because Opteron_G4 +and Opteron_G5 were not being changed. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 16 +++------------- + 1 file changed, 3 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 16 +++------------- + 1 files changed, 3 insertions(+), 13 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 641f3d9..b918f69 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -906,10 +906,9 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | + CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, + 0); +- x86_cpu_compat_set_features("SandyBridge", FEAT_8000_0001_EDX, +- 0, CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Haswell", FEAT_8000_0001_EDX, +- 0, CPUID_EXT2_RDTSCP); ++ ++ /* RHEL-6 kernel never supported exposing RDTSCP */ ++ x86_cpu_compat_set_features(NULL, FEAT_8000_0001_EDX, 0, CPUID_EXT2_RDTSCP); + + x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +@@ -917,15 +916,6 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, 0, CPUID_EXT_X2APIC); + x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, 0, CPUID_EXT_X2APIC); + +- x86_cpu_compat_set_features("phenom", FEAT_8000_0001_EDX, +- 0, CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G1", FEAT_8000_0001_EDX, +- 0, CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G2", FEAT_8000_0001_EDX, +- 0, CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, +- 0, CPUID_EXT2_RDTSCP); +- + /* RHEL-6 had 3dnow & 3dnowext unconditionally disabled on all models */ + x86_cpu_compat_set_features(NULL, FEAT_8000_0001_EDX, 0, + CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT); +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Don-t-explode-QEMUMachineInitArgs-into-local-vari.patch b/SOURCES/kvm-pc-Don-t-explode-QEMUMachineInitArgs-into-local-vari.patch new file mode 100644 index 0000000..aaa00b5 --- /dev/null +++ b/SOURCES/kvm-pc-Don-t-explode-QEMUMachineInitArgs-into-local-vari.patch @@ -0,0 +1,100 @@ +From 5c9aa8edab3724f6a361c98247949d5588f18620 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:19 +0100 +Subject: [PATCH 19/29] pc: Don't explode QEMUMachineInitArgs into local variables needlessly + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-3-git-send-email-armbru@redhat.com> +Patchwork-id: 55238 +O-Subject: [PATCH 7.0 qemu-kvm 02/11] pc: Don't explode QEMUMachineInitArgs into local variables needlessly +Bugzilla: 994490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Don't explode when the variable is used just a few times, and never +changed. + +Signed-off-by: Markus Armbruster +Reviewed-by: Laszlo Ersek +Reviewed-by: Eduardo Habkost +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 3b6fb9cab2e64804cdab5a61d1298ffd8b8dff85) + +Conflicts: + hw/i386/pc_q35.c +--- + hw/i386/pc_q35.c | 22 +++++++++------------- + 1 file changed, 9 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_q35.c | 22 +++++++++------------- + 1 files changed, 9 insertions(+), 13 deletions(-) + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 1c4c8a4..99d3a10 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -51,12 +51,6 @@ static bool has_pvpanic = true; + /* PC hardware initialisation */ + static void pc_q35_init(QEMUMachineInitArgs *args) + { +- ram_addr_t ram_size = args->ram_size; +- const char *cpu_model = args->cpu_model; +- const char *kernel_filename = args->kernel_filename; +- const char *kernel_cmdline = args->kernel_cmdline; +- const char *initrd_filename = args->initrd_filename; +- const char *boot_device = args->boot_device; + ram_addr_t below_4g_mem_size, above_4g_mem_size; + Q35PCIHost *q35_host; + PCIBus *host_bus; +@@ -82,17 +76,17 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + object_property_add_child(qdev_get_machine(), "icc-bridge", + OBJECT(icc_bridge), NULL); + +- pc_cpus_init(cpu_model, icc_bridge); ++ pc_cpus_init(args->cpu_model, icc_bridge); + pc_acpi_init("q35-acpi-dsdt.aml"); + + kvmclock_create(); + +- if (ram_size >= 0xb0000000) { +- above_4g_mem_size = ram_size - 0xb0000000; ++ if (args->ram_size >= 0xb0000000) { ++ above_4g_mem_size = args->ram_size - 0xb0000000; + below_4g_mem_size = 0xb0000000; + } else { + above_4g_mem_size = 0; +- below_4g_mem_size = ram_size; ++ below_4g_mem_size = args->ram_size; + } + + /* pci enabled */ +@@ -107,8 +101,10 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { +- pc_memory_init(get_system_memory(), kernel_filename, kernel_cmdline, +- initrd_filename, below_4g_mem_size, above_4g_mem_size, ++ pc_memory_init(get_system_memory(), ++ args->kernel_filename, args->kernel_cmdline, ++ args->initrd_filename, ++ below_4g_mem_size, above_4g_mem_size, + rom_memory, &ram_memory); + } + +@@ -193,7 +189,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + 0xb100), + 8, NULL, 0); + +- pc_cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device, ++ pc_cmos_init(below_4g_mem_size, above_4g_mem_size, args->boot_device, + floppy, idebus[0], idebus[1], rtc_state); + + /* the rest devices to which pci devfn is automatically assigned */ +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Don-t-prematurely-explode-QEMUMachineInitArgs.patch b/SOURCES/kvm-pc-Don-t-prematurely-explode-QEMUMachineInitArgs.patch new file mode 100644 index 0000000..e24443e --- /dev/null +++ b/SOURCES/kvm-pc-Don-t-prematurely-explode-QEMUMachineInitArgs.patch @@ -0,0 +1,178 @@ +From c12c0b02880f4162cc237f11407532375882b941 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:18 +0100 +Subject: [PATCH 18/29] pc: Don't prematurely explode QEMUMachineInitArgs + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-2-git-send-email-armbru@redhat.com> +Patchwork-id: 55237 +O-Subject: [PATCH 7.0 qemu-kvm 01/11] pc: Don't prematurely explode QEMUMachineInitArgs +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Don't explode QEMUMachineInitArgs before passing it to pc_init1(). + +Signed-off-by: Markus Armbruster +Reviewed-by: Laszlo Ersek +Reviewed-by: Eduardo Habkost +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 5650f5f48bfe2a684138505aae008dc4440202f1) + +Conflicts: + hw/i386/pc_piix.c + +Maintainer's note: Fixed incorrect change in c_init_pci_no_kvmclock() + +--- + hw/i386/pc_piix.c | 66 ++++++++++++++----------------------------------------- + 1 file changed, 16 insertions(+), 50 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 65 +++++++++++++---------------------------------------- + 1 files changed, 16 insertions(+), 49 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 3a8418e..65f7f3a 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -59,14 +59,9 @@ static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + static bool has_pvpanic = true; + + /* PC hardware initialisation */ +-static void pc_init1(MemoryRegion *system_memory, ++static void pc_init1(QEMUMachineInitArgs *args, ++ MemoryRegion *system_memory, + MemoryRegion *system_io, +- ram_addr_t ram_size, +- const char *boot_device, +- const char *kernel_filename, +- const char *kernel_cmdline, +- const char *initrd_filename, +- const char *cpu_model, + int pci_enabled, + int kvmclock_enabled) + { +@@ -95,18 +90,18 @@ static void pc_init1(MemoryRegion *system_memory, + object_property_add_child(qdev_get_machine(), "icc-bridge", + OBJECT(icc_bridge), NULL); + +- pc_cpus_init(cpu_model, icc_bridge); ++ pc_cpus_init(args->cpu_model, icc_bridge); + + if (kvmclock_enabled) { + kvmclock_create(); + } + +- if (ram_size >= QEMU_BELOW_4G_RAM_END ) { +- above_4g_mem_size = ram_size - QEMU_BELOW_4G_RAM_END; ++ if (args->ram_size >= QEMU_BELOW_4G_RAM_END ) { ++ above_4g_mem_size = args->ram_size - QEMU_BELOW_4G_RAM_END; + below_4g_mem_size = QEMU_BELOW_4G_RAM_END; + } else { + above_4g_mem_size = 0; +- below_4g_mem_size = ram_size; ++ below_4g_mem_size = args->ram_size; + } + + if (pci_enabled) { +@@ -121,7 +116,8 @@ static void pc_init1(MemoryRegion *system_memory, + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { + fw_cfg = pc_memory_init(system_memory, +- kernel_filename, kernel_cmdline, initrd_filename, ++ args->kernel_filename, args->kernel_cmdline, ++ args->initrd_filename, + below_4g_mem_size, above_4g_mem_size, + rom_memory, &ram_memory); + } +@@ -137,7 +133,7 @@ static void pc_init1(MemoryRegion *system_memory, + + if (pci_enabled) { + pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, &isa_bus, gsi, +- system_memory, system_io, ram_size, ++ system_memory, system_io, args->ram_size, + below_4g_mem_size, + 0x100000000ULL - below_4g_mem_size, + 0x100000000ULL + above_4g_mem_size, +@@ -202,7 +198,7 @@ static void pc_init1(MemoryRegion *system_memory, + } + } + +- pc_cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device, ++ pc_cmos_init(below_4g_mem_size, above_4g_mem_size, args->boot_device, + floppy, idebus[0], idebus[1], rtc_state); + + if (pci_enabled && usb_enabled(false)) { +@@ -232,17 +228,7 @@ static void pc_init1(MemoryRegion *system_memory, + + static void pc_init_pci(QEMUMachineInitArgs *args) + { +- ram_addr_t ram_size = args->ram_size; +- const char *cpu_model = args->cpu_model; +- const char *kernel_filename = args->kernel_filename; +- const char *kernel_cmdline = args->kernel_cmdline; +- const char *initrd_filename = args->initrd_filename; +- const char *boot_device = args->boot_device; +- pc_init1(get_system_memory(), +- get_system_io(), +- ram_size, boot_device, +- kernel_filename, kernel_cmdline, +- initrd_filename, cpu_model, 1, 1); ++ pc_init1(args, get_system_memory(), get_system_io(), 1, 1); + } + + #if 0 /* Disabled for Red Hat Enterprise Linux */ +@@ -283,40 +269,21 @@ static void pc_init_pci_1_0(QEMUMachineInitArgs *args) + /* PC init function for pc-0.10 to pc-0.13, and reused by xenfv */ + static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args) + { +- ram_addr_t ram_size = args->ram_size; +- const char *cpu_model = args->cpu_model; +- const char *kernel_filename = args->kernel_filename; +- const char *kernel_cmdline = args->kernel_cmdline; +- const char *initrd_filename = args->initrd_filename; +- const char *boot_device = args->boot_device; + has_pvpanic = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); +- pc_init1(get_system_memory(), +- get_system_io(), +- ram_size, boot_device, +- kernel_filename, kernel_cmdline, +- initrd_filename, cpu_model, 1, 0); ++ pc_init1(args, get_system_memory(), get_system_io(), 1, 0); + } + + static void pc_init_isa(QEMUMachineInitArgs *args) + { +- ram_addr_t ram_size = args->ram_size; +- const char *cpu_model = args->cpu_model; +- const char *kernel_filename = args->kernel_filename; +- const char *kernel_cmdline = args->kernel_cmdline; +- const char *initrd_filename = args->initrd_filename; +- const char *boot_device = args->boot_device; + has_pvpanic = false; +- if (cpu_model == NULL) +- cpu_model = "486"; ++ if (!args->cpu_model) { ++ args->cpu_model = "486"; ++ } + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); +- pc_init1(get_system_memory(), +- get_system_io(), +- ram_size, boot_device, +- kernel_filename, kernel_cmdline, +- initrd_filename, cpu_model, 0, 1); ++ pc_init1(args, get_system_memory(), get_system_io(), 0, 1); + } + + #ifdef CONFIG_XEN +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Enable-x2apic-by-default-on-more-recent-CPU-model.patch b/SOURCES/kvm-pc-Enable-x2apic-by-default-on-more-recent-CPU-model.patch new file mode 100644 index 0000000..51ccd71 --- /dev/null +++ b/SOURCES/kvm-pc-Enable-x2apic-by-default-on-more-recent-CPU-model.patch @@ -0,0 +1,118 @@ +From 1144c6fa17e7d3fca1e2940c8bd0da966c74e4c5 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 20 Jan 2014 19:05:30 +0100 +Subject: [PATCH 33/34] pc: Enable x2apic by default on more recent CPU models (v2) + +RH-Author: Eduardo Habkost +Message-id: <1390244730-31038-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 56848 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] pc: Enable x2apic by default on more recent CPU models (v2) +Bugzilla: 1049706 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek + +Bugzilla: 1049706 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6900764 +Upstream status: not applicable (see notes below) + +On RHEL-6 we already enabled x2apic by default on Conroe, Penryn, +Nehalem, Westmere, SandyBridge, Haswell, Opteron_G{1,2,3}. + +To not introduce performance regressions, this patch changes the rhel7 +machine-types to enable x2apic by default on all those models and also +on Opteron_G{4,5}. + +Quoting the patch I sent upstream[1]: + +> Normally we try to keep the CPU model definitions as close as the real +> CPUs as possible, but x2apic can be emulated by KVM without host CPU +> support for x2apic, and it improves performance by reducing APIC access +> overhead. x2apic emulation is available on KVM since 2009 (Linux +> 2.6.32-rc1), there's no reason for not enabling x2apic by default when +> running KVM. + +Upstream status is "not applicable" because this patch touches only the +rhel7-specific PC code. I am doing this because my plan is to enable +x2apic by default even if upstream rejects my patch, and I want to get +this done as soon as possible to get more testing exposure. + +[1] A patch was submitted to change cpu.c to add x2apic to those CPU models + upstream, and can be seen at: + Message-Id: <1390228618-21663-1-git-send-email-ehabkost@redhat.com> + http://article.gmane.org/gmane.comp.emulators.qemu/251492 + + The upstream patch is a resend. A similar patch was sent in + September 2013, was ACKed by Gleb, but was ignored by all + maintainers. + +Changes v2: + * Use the new pc_compat_rhel*() functions + * Disable x2apic explicitly on Opteron_G{4,5} on pc_compat_rhel650() + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 12 ++++++++++++ + hw/i386/pc_q35.c | 10 ++++++++++ + 2 files changed, 22 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 12 ++++++++++++ + hw/i386/pc_q35.c | 10 ++++++++++ + 2 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 769571c..663c9d5 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -745,6 +745,16 @@ machine_init(pc_machine_init); + + static void pc_compat_rhel700(QEMUMachineInitArgs *args) + { ++ x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ /* SandyBridge and Haswell already have x2apic enabled */ ++ x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + } + + static void pc_init_rhel700(QEMUMachineInitArgs *args) +@@ -899,6 +909,8 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, 0, CPUID_EXT_X2APIC); ++ x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, 0, CPUID_EXT_X2APIC); + + x86_cpu_compat_set_features("phenom", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 0280a95..232c62d 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -270,6 +270,16 @@ machine_init(pc_q35_machine_init); + + static void pc_q35_compat_rhel700(QEMUMachineInitArgs *args) + { ++ x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ /* SandyBridge and Haswell already have x2apic enabled */ ++ x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + } + + static void pc_q35_init_rhel700(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Fix-rhel6.-3dnow-3dnowext-compat-bits.patch b/SOURCES/kvm-pc-Fix-rhel6.-3dnow-3dnowext-compat-bits.patch new file mode 100644 index 0000000..38b1b7f --- /dev/null +++ b/SOURCES/kvm-pc-Fix-rhel6.-3dnow-3dnowext-compat-bits.patch @@ -0,0 +1,61 @@ +From d56b59537e7039d62f4ae68610eb0763d88f9289 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 15 Jan 2014 19:37:36 -0500 +Subject: [PATCH 07/14] pc: Fix rhel6.* 3dnow & 3dnowext compat bits + +Message-id: <1389814656-20101-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 56728 +O-Subject: [RHEL-7 qemu-kvm PATCH] pc: Fix rhel6.* 3dnow & 3dnowext compat bits +Bugzilla: 918907 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +Bugzilla: 918907 +Upstream status: not applicable +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6879262 + +RHEL-6 qemu-kvm has a hack that unconditionally disables 3dnow and +3dnowext on the CPUID handling code. To keep compatibility we need to do +the same on the rhel6.* machine-types. + +The hack on RHEL-6 is at target-i386/cpuid.c:cpu_x86_cpuid(): + + switch(index) { + [...] + case 0x80000001: + [...] + if (kvm_enabled()) { + [...] + /* 3dnow */ + *edx &= ~0xc0000000; + } [...] + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 2961bc8..29c013a 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -902,6 +902,10 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); + ++ /* RHEL-6 had 3dnow & 3dnowext unconditionally disabled on all models */ ++ x86_cpu_compat_set_features(NULL, FEAT_8000_0001_EDX, 0, ++ CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT); ++ + disable_kvm_pv_unhalt(); + + rom_file_in_ram = false; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-pc-Haswell-doesn-t-have-rdtscp-on-rhel6.x.patch b/SOURCES/kvm-pc-Haswell-doesn-t-have-rdtscp-on-rhel6.x.patch new file mode 100644 index 0000000..0c5cd7f --- /dev/null +++ b/SOURCES/kvm-pc-Haswell-doesn-t-have-rdtscp-on-rhel6.x.patch @@ -0,0 +1,46 @@ +From da27199bd3f4ec0e616330bcf7b4fb818eae50ab Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:52 +0200 +Subject: [PATCH 24/28] pc: Haswell doesn't have rdtscp on rhel6.x + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-8-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53615 +O-Subject: [RHEL7 PATCH 7/7] pc: Haswell doesn't have rdtscp on rhel6.x +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + +This adds compat code to disable rdtscp on the rhel6.x machine-types, to +match the features found on RHEL-6. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index fb5256e..da7701c 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -877,6 +877,8 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + 0); + x86_cpu_compat_set_features("SandyBridge", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Haswell", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); + pc_init_rhel700(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Make-no-fd-bootchk-stick-across-boot-order-change.patch b/SOURCES/kvm-pc-Make-no-fd-bootchk-stick-across-boot-order-change.patch new file mode 100644 index 0000000..57d190c --- /dev/null +++ b/SOURCES/kvm-pc-Make-no-fd-bootchk-stick-across-boot-order-change.patch @@ -0,0 +1,87 @@ +From 6ddf29f50854ed657ee27241cbd0bb7c2b4ae4b7 Mon Sep 17 00:00:00 2001 +Message-Id: <6ddf29f50854ed657ee27241cbd0bb7c2b4ae4b7.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:15 +0200 +Subject: [PATCH 05/14] pc: Make -no-fd-bootchk stick across boot order + changes + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-6-git-send-email-armbru@redhat.com> +Patchwork-id: 54564 +O-Subject: [PATCH 7.0 qemu-kvm 05/10] pc: Make -no-fd-bootchk stick across boot order changes +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Option -no-fd-bootchk asks the BIOS to attempt booting from a floppy +even when the boot sector signature isn't there, by setting a bit in +RTC CMOS. It was added back in 2006 (commit 52ca8d6a). + +Two years later, commit 0ecdffbb added monitor command boot_set. +Implemented by new function pc_boot_set(). It unconditionally clears +the floppy signature bit in CMOS. + +Commit e0f084bf added -boot option once to automatically change the +boot order on first reset. Reuses pc_boot_set(), thus also clears the +floppy signature bit. Commit d9346e81 took care to preserve this +behavior. + +Thus, -no-fd-bootchk applies to any number of boots. Except it +applies just to the first boot with -boot once, and never after +boot_set. Weird. Make it stick instead: set the bit according to +-no-fd-bootchk in pc_boot_set(). + +Signed-off-by: Markus Armbruster +Reviewed-by: Anthony Liguori +Message-id: 1371208516-7857-6-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit e1123015a50abf44f9daa9495f40eeaaf4c9bb98) +--- + hw/i386/pc.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 71b7a26..3c77040 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -266,7 +266,7 @@ static int boot_device2nibble(char boot_device) + return 0; + } + +-static int set_boot_dev(ISADevice *s, const char *boot_device, int fd_bootchk) ++static int set_boot_dev(ISADevice *s, const char *boot_device) + { + #define PC_MAX_BOOT_DEVICES 3 + int nbds, bds[3] = { 0, }; +@@ -292,7 +292,7 @@ static int set_boot_dev(ISADevice *s, const char *boot_device, int fd_bootchk) + + static int pc_boot_set(void *opaque, const char *boot_device) + { +- return set_boot_dev(opaque, boot_device, 0); ++ return set_boot_dev(opaque, boot_device); + } + + typedef struct pc_cmos_init_late_arg { +@@ -407,8 +407,7 @@ void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, + cpu_hotplug_cb.cpu_added_notifier.notify = rtc_notify_cpu_added; + qemu_register_cpu_added_notifier(&cpu_hotplug_cb.cpu_added_notifier); + +- /* set boot devices, and disable floppy signature check if requested */ +- if (set_boot_dev(s, boot_device, fd_bootchk)) { ++ if (set_boot_dev(s, boot_device)) { + exit(1); + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-RHEL-6-don-t-have-RDTSCP.patch b/SOURCES/kvm-pc-RHEL-6-don-t-have-RDTSCP.patch new file mode 100644 index 0000000..272a1e2 --- /dev/null +++ b/SOURCES/kvm-pc-RHEL-6-don-t-have-RDTSCP.patch @@ -0,0 +1,57 @@ +From 4806c6609872f4b642da379b7d7e54e9b0f9c09f Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 16 Sep 2013 20:39:57 +0200 +Subject: [PATCH 08/25] pc: RHEL-6 don't have RDTSCP + +RH-Author: Eduardo Habkost +Message-id: <1379363997-11783-5-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54399 +O-Subject: [RHEL7 PATCH 4/4] pc: RHEL-6 don't have RDTSCP +Bugzilla: 918907 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + (RHEL-6-only quirk that is not going to be included upstream) +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6290888 + +The phenom and Opteron_G[123] CPU models don't have RDTSCP enabled on +RHEL-6, so we have to explicitly disable it on pc_init_rhel650() to keep +compatibility. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index eb3a07d..06e9eb8 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -895,6 +895,16 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ ++ x86_cpu_compat_set_features("phenom", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G1", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G2", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); ++ + pc_init_rhel700(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-RHEL-6-had-x2apic-set-on-Opteron_G-123.patch b/SOURCES/kvm-pc-RHEL-6-had-x2apic-set-on-Opteron_G-123.patch new file mode 100644 index 0000000..2eace70 --- /dev/null +++ b/SOURCES/kvm-pc-RHEL-6-had-x2apic-set-on-Opteron_G-123.patch @@ -0,0 +1,53 @@ +From 9913f2856aeeaa05b7b5e3188865901f79ea2166 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 16 Sep 2013 20:39:56 +0200 +Subject: [PATCH 07/25] pc: RHEL-6 had x2apic set on Opteron_G[123] + +RH-Author: Eduardo Habkost +Message-id: <1379363997-11783-4-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54401 +O-Subject: [RHEL7 PATCH 3/4] pc: RHEL-6 had x2apic set on Opteron_G[123] +Bugzilla: 918907 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +From: Eduardo Habkost + +Bugzilla: 918907 +Upstream status: not applicable + (RHEL-6-only quirk that is not going to be included upstream) +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6290888 + +The Opteron_G[123] CPU models had x2apic set since they were first added +to RHEL-6, but they don't have it set upstream. We need to explicitly +set it on pc_init_rhel650() to keep compatibility. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 6fe6ba0..eb3a07d 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -891,6 +891,10 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + 0, CPUID_EXT2_RDTSCP); + x86_cpu_compat_set_features("Haswell", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); ++ ++ x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + pc_init_rhel700(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Remove-PCLMULQDQ-from-Westmere-on-rhel6.x-machine.patch b/SOURCES/kvm-pc-Remove-PCLMULQDQ-from-Westmere-on-rhel6.x-machine.patch new file mode 100644 index 0000000..7e12d2e --- /dev/null +++ b/SOURCES/kvm-pc-Remove-PCLMULQDQ-from-Westmere-on-rhel6.x-machine.patch @@ -0,0 +1,50 @@ +From 6d3c6d947de6e5721d8a011789909f55ffef833f Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:50 +0200 +Subject: [PATCH 22/28] pc: Remove PCLMULQDQ from Westmere on rhel6.x machine-types + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-6-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53612 +O-Subject: [RHEL7 PATCH 5/7] pc: Remove PCLMULQDQ from Westmere on rhel6.x machine-types +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: commit 56383703c060777fd01aaf8d63d5f46d660e9fb9 + +commit 41cb383f42d0cb51d8e3e25e3ecebc954dd4196f made a guest-visible +change by adding the PCLMULQDQ bit to Westmere without adding +compatibility code to keep the ABI for older machine-types. + +Add the corresponding compat code to the rhel6.x machine-types (like it +was done on upstream commit 56383703c060777fd01aaf8d63d5f46d660e9fb9 for +pc-1.4). + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index d5dc04d..846e2ce 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -868,6 +868,7 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); + x86_cpu_compat_set_features("Westmere", FEAT_8000_0001_EDX, + CPUID_EXT2_FXSR | CPUID_EXT2_MMX | CPUID_EXT2_PAT | + CPUID_EXT2_CMOV | CPUID_EXT2_PGE | CPUID_EXT2_APIC | +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Remove-incorrect-rhel6.x-compat-model-value-for-C.patch b/SOURCES/kvm-pc-Remove-incorrect-rhel6.x-compat-model-value-for-C.patch new file mode 100644 index 0000000..2eb5ca6 --- /dev/null +++ b/SOURCES/kvm-pc-Remove-incorrect-rhel6.x-compat-model-value-for-C.patch @@ -0,0 +1,67 @@ +From c24fbe335c22ced933edb7d72f03adaf64000056 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:47 +0200 +Subject: [PATCH 19/28] pc: Remove incorrect rhel6.x compat "model" value for Conroe/Penryn/Nehalem + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53610 +O-Subject: [RHEL7 PATCH 2/7] pc: Remove incorrect rhel6.x compat "model" value for Conroe/Penryn/Nehalem +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + +The series that introduced the rhel6.x machine-types added compat +"model" values for Conroe, Penryn and Nehalem that were copied from +PC_COMPAT_1_5 but are not applicable to rhel6.x, as the CPU models had +the correct model value since RHEL-6.0 (see RHEL-6 commit +9a2e04fed8d1c4b44c4122b211e236a36a036cc7). + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 12 ------------ + 1 file changed, 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 12 ------------ + 1 files changed, 0 insertions(+), 12 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 0dc52c4..a11a4b0 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -910,26 +910,14 @@ static QEMUMachine pc_machine_rhel640 = { + PC_RHEL6_4_COMPAT,\ + {\ + .driver = "Conroe-" TYPE_X86_CPU,\ +- .property = "model",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Conroe-" TYPE_X86_CPU,\ + .property = "level",\ + .value = stringify(2),\ + },{\ + .driver = "Penryn-" TYPE_X86_CPU,\ +- .property = "model",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Penryn-" TYPE_X86_CPU,\ + .property = "level",\ + .value = stringify(2),\ + },{\ + .driver = "Nehalem-" TYPE_X86_CPU,\ +- .property = "model",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Nehalem-" TYPE_X86_CPU,\ + .property = "level",\ + .value = stringify(2),\ + },{\ +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-SandyBridge-rhel6.x-compat-fixes.patch b/SOURCES/kvm-pc-SandyBridge-rhel6.x-compat-fixes.patch new file mode 100644 index 0000000..5af541d --- /dev/null +++ b/SOURCES/kvm-pc-SandyBridge-rhel6.x-compat-fixes.patch @@ -0,0 +1,59 @@ +From f28b055b5d576b9e5e87aa18bf655b53eff1571c Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:51 +0200 +Subject: [PATCH 23/28] pc: SandyBridge rhel6.x compat fixes + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-7-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53614 +O-Subject: [RHEL7 PATCH 6/7] pc: SandyBridge rhel6.x compat fixes +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + +This patch implements the following changes, to match the SandyBridge +CPU features on RHEL-6: + + * rhel6.3.0 and older don't have tsc-deadline on SandyBridge + (commit 10ce057) + * rhel6.5.0 and older don't have rdtscp on SandyBridge + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 846e2ce..fb5256e 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -875,6 +875,8 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | + CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, + 0); ++ x86_cpu_compat_set_features("SandyBridge", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); + pc_init_rhel700(args); + } + +@@ -961,6 +963,8 @@ static void pc_init_rhel630(QEMUMachineInitArgs *args) + { + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); ++ x86_cpu_compat_set_features("SandyBridge", FEAT_1_ECX, ++ 0, CPUID_EXT_TSC_DEADLINE_TIMER); + pc_init_rhel640(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Save-size-of-RAM-below-4GB.patch b/SOURCES/kvm-pc-Save-size-of-RAM-below-4GB.patch new file mode 100644 index 0000000..cb9cf40 --- /dev/null +++ b/SOURCES/kvm-pc-Save-size-of-RAM-below-4GB.patch @@ -0,0 +1,65 @@ +From c097095019b643c2212037eb98c150650931284e Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 11 Feb 2014 14:03:47 +0100 +Subject: [PATCH 11/28] pc: Save size of RAM below 4GB + +RH-Author: Eduardo Habkost +Message-id: <1392127428-9286-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 57204 +O-Subject: [PATCH 1/2] pc: Save size of RAM below 4GB +Bugzilla: 1048080 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1048080 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7027865 + +The ram_below_4g value will be useful in other places, such as the ACPI +table code, and other code that currently requires passing +below_4g_mem_size around in function arguments. + +Signed-off-by: Eduardo Habkost +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit f30ee8a9682be4abfcb05c6389894f8cfc35c3f0) +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc.c | 1 + + include/hw/i386/pc.h | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc.c | 1 + + include/hw/i386/pc.h | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index a0f0b24..1468d50 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -1046,6 +1046,7 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, + PcGuestInfo *guest_info = &guest_info_state->info; + int i, j; + ++ guest_info->ram_size_below_4g = below_4g_mem_size; + guest_info->ram_size = below_4g_mem_size + above_4g_mem_size; + guest_info->apic_id_limit = pc_apic_id_limit(max_cpus); + guest_info->apic_xrupt_override = kvm_allows_irq0_override(); +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 413358f..f56e9ea 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -35,7 +35,7 @@ typedef struct PcPciInfo { + struct PcGuestInfo { + bool has_pci_info; + bool isapc_ram_fw; +- hwaddr ram_size; ++ hwaddr ram_size, ram_size_below_4g; + unsigned apic_id_limit; + bool apic_xrupt_override; + uint64_t numa_nodes; +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-Use-cpu64-rhel6-CPU-model-by-default-on-rhel6-mac.patch b/SOURCES/kvm-pc-Use-cpu64-rhel6-CPU-model-by-default-on-rhel6-mac.patch new file mode 100644 index 0000000..09be4ab --- /dev/null +++ b/SOURCES/kvm-pc-Use-cpu64-rhel6-CPU-model-by-default-on-rhel6-mac.patch @@ -0,0 +1,49 @@ +From 990b368672cccb1c1c9fe189517abedf5455cb5c Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 25 Mar 2014 16:03:46 +0100 +Subject: [PATCH 1/2] pc: Use cpu64-rhel6 CPU model by default on rhel6 machine-types + +RH-Author: Eduardo Habkost +Message-id: <1395763427-31684-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 58246 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] pc: Use cpu64-rhel6 CPU model by default on rhel6 machine-types +Bugzilla: 1080170 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Alex Williamson +RH-Acked-by: Bandan Das + +Bugzilla: 1080170 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7250917 +Upstream status: not applicable + +On RHEL-6, cpu64-rhel6 was the default CPU model, so use it as default +on rhel6.* machine-types so we keep the ABI and not break RHEL6->RHEL7 +live-migration. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index be68098..940816f 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -917,6 +917,9 @@ static QEMUMachine pc_machine_rhel700 = { + static void pc_compat_rhel650(QEMUMachineInitArgs *args) + { + pc_compat_rhel700(args); ++ if (!args->cpu_model) { ++ args->cpu_model = "cpu64-rhel6"; ++ } + x86_cpu_compat_set_features("pentium", FEAT_1_EDX, 0, CPUID_APIC); + x86_cpu_compat_set_features("pentium2", FEAT_1_EDX, 0, CPUID_APIC); + x86_cpu_compat_set_features("pentium3", FEAT_1_EDX, 0, CPUID_APIC); +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-add-I440FX-QOM-cast-macro.patch b/SOURCES/kvm-pc-add-I440FX-QOM-cast-macro.patch new file mode 100644 index 0000000..dc27d56 --- /dev/null +++ b/SOURCES/kvm-pc-add-I440FX-QOM-cast-macro.patch @@ -0,0 +1,73 @@ +From 7529646c9b02c1e122b6f3972fd034be651962cc Mon Sep 17 00:00:00 2001 +Message-Id: <7529646c9b02c1e122b6f3972fd034be651962cc.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:32 +0100 +Subject: [PATCH 17/56] pc: add I440FX QOM cast macro +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-18-git-send-email-mst@redhat.com> +Patchwork-id: 56323 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 17/57] pc: add I440FX QOM cast macro +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Igor Mammedov + +Signed-off-by: Igor Mammedov +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Andreas Färber +Message-id: 1375109277-25561-3-git-send-email-imammedo@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 1d0d4aa412eef7d98e53c313c79c359f2f65376e) +--- + hw/pci-host/piix.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/piix.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 8894c03..adc094a 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -38,6 +38,10 @@ + * http://download.intel.com/design/chipsets/datashts/29054901.pdf + */ + ++#define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost" ++#define I440FX_PCI_HOST_BRIDGE(obj) \ ++ OBJECT_CHECK(I440FXState, (obj), TYPE_I440FX_PCI_HOST_BRIDGE) ++ + typedef struct I440FXState { + PCIHostState parent_obj; + } I440FXState; +@@ -245,7 +249,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + PCII440FXState *f; + unsigned i; + +- dev = qdev_create(NULL, "i440FX-pcihost"); ++ dev = qdev_create(NULL, TYPE_I440FX_PCI_HOST_BRIDGE); + s = PCI_HOST_BRIDGE(dev); + b = pci_bus_new(dev, NULL, pci_address_space, + address_space_io, 0, TYPE_PCI_BUS); +@@ -627,7 +631,7 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data) + } + + static const TypeInfo i440fx_pcihost_info = { +- .name = "i440FX-pcihost", ++ .name = TYPE_I440FX_PCI_HOST_BRIDGE, + .parent = TYPE_PCI_HOST_BRIDGE, + .instance_size = sizeof(I440FXState), + .class_init = i440fx_pcihost_class_init, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-add-hot_add_cpu-callback-to-all-machine-types.patch b/SOURCES/kvm-pc-add-hot_add_cpu-callback-to-all-machine-types.patch new file mode 100644 index 0000000..4e99fd1 --- /dev/null +++ b/SOURCES/kvm-pc-add-hot_add_cpu-callback-to-all-machine-types.patch @@ -0,0 +1,94 @@ +From 6971c1cd4d0c6822c99b2043f58c0f6a225c83b2 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 5 May 2014 20:27:12 +0200 +Subject: [PATCH 1/2] pc: add hot_add_cpu callback to all machine types + +RH-Author: Paolo Bonzini +Message-id: <1399321632-26203-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 58691 +O-Subject: [RHEL 7.0.z qemu-kvm PATCH] pc: add hot_add_cpu callback to all machine types +Bugzilla: 1094285 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Igor Mammedov +RH-Acked-by: Laszlo Ersek + +Bugzilla: 1094285 + +Upstream status: N/A + +Brew build: 7416220 + +Due to the lack of the callback, RHEL6-compatible machine types +failed CPU hotplug with a "not supported" error message. + +However CPU hotplug is supported in RHEL6, albeit with a different +monitor command that we had inherited from qemu-kvm, and for all machine +types. So, add it to all machine types in RHEL7 too. + +Tested locally with a RHEL6.5 guest and -Mrhel6.5.0. + +Signed-off-by: Paolo Bonzini +--- + hw/i386/pc_piix.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 67d51da..aeec6f2 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -968,6 +968,7 @@ static QEMUMachine pc_machine_rhel650 = { + .name = "rhel6.5.0", + .desc = "RHEL 6.5.0 PC", + .init = pc_init_rhel650, ++ .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_5_COMPAT, +@@ -1016,6 +1017,7 @@ static QEMUMachine pc_machine_rhel640 = { + .name = "rhel6.4.0", + .desc = "RHEL 6.4.0 PC", + .init = pc_init_rhel640, ++ .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_4_COMPAT, +@@ -1091,6 +1093,7 @@ static QEMUMachine pc_machine_rhel630 = { + .name = "rhel6.3.0", + .desc = "RHEL 6.3.0 PC", + .init = pc_init_rhel630, ++ .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_3_COMPAT, +@@ -1122,6 +1125,7 @@ static QEMUMachine pc_machine_rhel620 = { + .name = "rhel6.2.0", + .desc = "RHEL 6.2.0 PC", + .init = pc_init_rhel620, ++ .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_2_COMPAT, +@@ -1194,6 +1198,7 @@ static QEMUMachine pc_machine_rhel610 = { + .name = "rhel6.1.0", + .desc = "RHEL 6.1.0 PC", + .init = pc_init_rhel610, ++ .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_1_COMPAT, +@@ -1233,6 +1238,7 @@ static QEMUMachine pc_machine_rhel600 = { + .name = "rhel6.0.0", + .desc = "RHEL 6.0.0 PC", + .init = pc_init_rhel600, ++ .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { + PC_RHEL6_0_COMPAT, +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-add-rhel6.6.0-machine-type.patch b/SOURCES/kvm-pc-add-rhel6.6.0-machine-type.patch new file mode 100644 index 0000000..26aa769 --- /dev/null +++ b/SOURCES/kvm-pc-add-rhel6.6.0-machine-type.patch @@ -0,0 +1,105 @@ +From aec30edd21fc46b3e6ad5a1b1e49da77afef5d42 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 19 Feb 2015 17:14:00 +0100 +Subject: [PATCH] pc: add rhel6.6.0 machine type + +Message-id: <1424366040-6013-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 63901 +O-Subject: [RHEL-7.1.z qemu-kvm PATCH] pc: add rhel6.6.0 machine type +Bugzilla: 1198958 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +This enables migration from RHOSP5 to RHOSP6. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 41 +++++++++++++++++++++++++++++++++++------ + 1 file changed, 35 insertions(+), 6 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 4ea3f67..f4cf2b5 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -794,7 +794,7 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + +-#define PC_RHEL6_5_COMPAT \ ++#define PC_RHEL6_6_COMPAT \ + {\ + .driver = "scsi-hd",\ + .property = "discard_granularity",\ +@@ -905,16 +905,12 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "romfile",\ + .value = "rhel6-virtio.rom",\ + },{\ +- .driver = TYPE_USB_DEVICE,\ +- .property = "msos-desc",\ +- .value = "no",\ +- },{\ + .driver = "virtio-net-pci",\ + .property = "any_layout",\ + .value = "off",\ + } + +-static void pc_compat_rhel650(QEMUMachineInitArgs *args) ++static void pc_compat_rhel660(QEMUMachineInitArgs *args) + { + pc_compat_rhel700(args); + if (!args->cpu_model) { +@@ -962,6 +958,38 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + ich9_uhci123_irqpin_override = true; + } + ++static void pc_init_rhel660(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel660(args); ++ pc_init_pci(args); ++} ++ ++static QEMUMachine pc_machine_rhel660 = { ++ .name = "rhel6.6.0", ++ .desc = "RHEL 6.6.0 PC", ++ .init = pc_init_rhel660, ++ .hot_add_cpu = pc_hot_add_cpu, ++ .max_cpus = RHEL_MAX_CPUS, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_6_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++#define PC_RHEL6_5_COMPAT \ ++ PC_RHEL6_6_COMPAT,\ ++ {\ ++ .driver = TYPE_USB_DEVICE,\ ++ .property = "msos-desc",\ ++ .value = "no",\ ++ } ++ ++static void pc_compat_rhel650(QEMUMachineInitArgs *args) ++{ ++ pc_compat_rhel660(args); ++} ++ + static void pc_init_rhel650(QEMUMachineInitArgs *args) + { + pc_compat_rhel650(args); +@@ -1254,6 +1282,7 @@ static QEMUMachine pc_machine_rhel600 = { + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel660); + qemu_register_machine(&pc_machine_rhel650); + qemu_register_machine(&pc_machine_rhel640); + qemu_register_machine(&pc_machine_rhel630); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-pc-avoid-duplicate-names-for-ROM-MRs.patch b/SOURCES/kvm-pc-avoid-duplicate-names-for-ROM-MRs.patch new file mode 100644 index 0000000..3d5b83d --- /dev/null +++ b/SOURCES/kvm-pc-avoid-duplicate-names-for-ROM-MRs.patch @@ -0,0 +1,132 @@ +From 5f8e45393355671d8793e4bb37c07c95c609fdcd Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Sun, 9 Mar 2014 18:48:58 +0100 +Subject: [PATCH 10/16] pc: avoid duplicate names for ROM MRs + +RH-Author: Michael S. Tsirkin +Message-id: <1394390868-24135-2-git-send-email-mst@redhat.com> +Patchwork-id: 58054 +O-Subject: [PATCH qemu-kvm RHEL7.0 v3 2/2] pc: avoid duplicate names for ROM MRs +Bugzilla: 1064018 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Gerd Hoffmann + +Since +commit 04920fc0faa4760f9c4fc0e73b992b768099be70 + loader: store FW CFG ROM files in RAM +RAM MRs including ROM files in FW CFGs are created +and named using the file basename. + +This becomes problematic if these names are +supplied by user, since the basename might not +be unique. + +There are two cases we care about: +- option-rom flag. +- option ROM for devices. This triggers e.g. when + using rombar=0. + +At the moment we get an assert. E.g +qemu -option-rom /usr/share/ipxe/8086100e.rom -option-rom +/usr/share/ipxe.efi/8086100e.rom +RAMBlock "/rom@genroms/8086100e.rom" already registered, abort! + +This is a regression from 1.7. + +For now let's keep it simple and just avoid creating the +MRs in case of option ROMs. + +Signed-off-by: Michael S. Tsirkin + +Upstream: posted +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7173355 +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1064018#c6 +Tested: by developer +--- + include/hw/loader.h | 6 ++++-- + hw/core/loader.c | 10 ++++++---- + 2 files changed, 10 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/core/loader.c | 10 ++++++---- + include/hw/loader.h | 6 ++++-- + 2 files changed, 10 insertions(+), 6 deletions(-) + +diff --git a/hw/core/loader.c b/hw/core/loader.c +index c363aef..9309b8c 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -54,6 +54,7 @@ + + #include + ++bool option_rom_has_mr = false; + bool rom_file_has_mr = true; + + static int roms_loaded; +@@ -590,7 +591,8 @@ static void *rom_set_mr(Rom *rom, const char *name) + } + + int rom_add_file(const char *file, const char *fw_dir, +- hwaddr addr, int32_t bootindex) ++ hwaddr addr, int32_t bootindex, ++ bool option_rom) + { + Rom *rom; + int rc, fd = -1; +@@ -642,7 +644,7 @@ int rom_add_file(const char *file, const char *fw_dir, + basename); + snprintf(devpath, sizeof(devpath), "/rom@%s", fw_file_name); + +- if (rom_file_has_mr) { ++ if ((!option_rom || option_rom_has_mr) && rom_file_has_mr) { + data = rom_set_mr(rom, devpath); + } else { + data = rom->data; +@@ -721,12 +723,12 @@ int rom_add_elf_program(const char *name, void *data, size_t datasize, + + int rom_add_vga(const char *file) + { +- return rom_add_file(file, "vgaroms", 0, -1); ++ return rom_add_file(file, "vgaroms", 0, -1, true); + } + + int rom_add_option(const char *file, int32_t bootindex) + { +- return rom_add_file(file, "genroms", 0, bootindex); ++ return rom_add_file(file, "genroms", 0, bootindex, true); + } + + static void rom_reset(void *unused) +diff --git a/include/hw/loader.h b/include/hw/loader.h +index 7ceccce..a5e02ce 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -23,10 +23,12 @@ void pstrcpy_targphys(const char *name, + hwaddr dest, int buf_size, + const char *source); + ++extern bool option_rom_has_mr; + extern bool rom_file_has_mr; + + int rom_add_file(const char *file, const char *fw_dir, +- hwaddr addr, int32_t bootindex); ++ hwaddr addr, int32_t bootindex, ++ bool option_rom); + void *rom_add_blob(const char *name, const void *blob, size_t len, + hwaddr addr, const char *fw_file_name, + FWCfgReadCallback fw_callback, void *callback_opaque); +@@ -40,7 +42,7 @@ void *rom_ptr(hwaddr addr); + void do_info_roms(Monitor *mon, const QDict *qdict); + + #define rom_add_file_fixed(_f, _a, _i) \ +- rom_add_file(_f, NULL, _a, _i) ++ rom_add_file(_f, NULL, _a, _i, false) + #define rom_add_blob_fixed(_f, _b, _l, _a) \ + (rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL) ? 0 : -1) + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-disable-pci-info.patch b/SOURCES/kvm-pc-disable-pci-info.patch new file mode 100644 index 0000000..d0b1005 --- /dev/null +++ b/SOURCES/kvm-pc-disable-pci-info.patch @@ -0,0 +1,77 @@ +From 83aeeafe6163924b991c2e0f89e3a79b3bc6b182 Mon Sep 17 00:00:00 2001 +Message-Id: <83aeeafe6163924b991c2e0f89e3a79b3bc6b182.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:16 +0100 +Subject: [PATCH 51/56] pc: disable pci-info + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-52-git-send-email-mst@redhat.com> +Patchwork-id: 56357 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 51/57] pc: disable pci-info +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Igor Mammedov + +The BIOS that we ship in 1.7 does not use pci info +from host and so far isn't going to use it. +Taking in account problems it caused see 9604f70fdf and +to avoid future incompatibility issues, it's safest to +disable that interface by default for all machine types +including 1.7 as it was never exposed/used by guest. +And properly remove/cleanup it during 1.8 development cycle. + +Signed-off-by: Igor Mammedov +Reviewed-by: Gerd Hoffmann +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Eduardo Habkost +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 7f1bb742be39184b469d53c0901240b12bb85589) + +Conflicts: + hw/i386/pc_piix.c + hw/i386/pc_q35.c +--- + hw/i386/pc_piix.c | 2 +- + hw/i386/pc_q35.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc_piix.c | 2 +- + hw/i386/pc_q35.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index ffa35d3..76d6e93 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -59,7 +59,7 @@ static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; + static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + + static bool smbios_type1_defaults = true; +-static bool has_pci_info = true; ++static bool has_pci_info; + static bool has_acpi_build = true; + + /* PC hardware initialisation */ +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 824295d..86c0c90 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -49,7 +49,7 @@ + #define MAX_SATA_PORTS 6 + + static bool smbios_type1_defaults = true; +-static bool has_pci_info = true; ++static bool has_pci_info; + static bool has_acpi_build = true; + + /* PC hardware initialisation */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-don-t-access-fw-cfg-if-NULL.patch b/SOURCES/kvm-pc-don-t-access-fw-cfg-if-NULL.patch new file mode 100644 index 0000000..81c6b93 --- /dev/null +++ b/SOURCES/kvm-pc-don-t-access-fw-cfg-if-NULL.patch @@ -0,0 +1,50 @@ +From 2cd283cab24c3765c11a19897d4ee3f1ce37000f Mon Sep 17 00:00:00 2001 +Message-Id: <2cd283cab24c3765c11a19897d4ee3f1ce37000f.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:29 +0100 +Subject: [PATCH 16/56] pc: don't access fw cfg if NULL + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-17-git-send-email-mst@redhat.com> +Patchwork-id: 56322 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 16/57] pc: don't access fw cfg if NULL +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +commit f8c457b88d72a48989f190bc3d7b79f4f3b7d11c + "pc: pass PCI hole ranges to Guests" +broke Xen as it has no fw_cfg. +Check for this configuration and boil out. + +Signed-off-by: Michael S. Tsirkin +Tested-by: Stefano Stabellini +(cherry picked from commit d26d9e14c15837eba2b7447e8d15230bab8e0940) +--- + hw/i386/pc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 238f6a0..9d9f5d2 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -996,7 +996,7 @@ typedef struct PcRomPciInfo { + static void pc_fw_cfg_guest_info(PcGuestInfo *guest_info) + { + PcRomPciInfo *info; +- if (!guest_info->has_pci_info) { ++ if (!guest_info->has_pci_info || !guest_info->fw_cfg) { + return; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-drop-external-DSDT-loading.patch b/SOURCES/kvm-pc-drop-external-DSDT-loading.patch new file mode 100644 index 0000000..36dc5ce --- /dev/null +++ b/SOURCES/kvm-pc-drop-external-DSDT-loading.patch @@ -0,0 +1,45 @@ +From 9071e5a73e65f8032c0fbf283b1dbdfa67b0c617 Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:15 +0200 +Subject: [PATCH 20/25] pc: drop external DSDT loading + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-11-git-send-email-owasserm@redhat.com> +Patchwork-id: 54806 +O-Subject: [RHEL7.0 qemu-kvm v2 10/10] pc: drop external DSDT loading +Bugzilla: 921465 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela +RH-Acked-by: Paolo Bonzini + +From: Anthony Liguori + +This breaks migration and is unneeded with modern SeaBIOS. + +Signed-off-by: Anthony Liguori +Message-id: 1376316104-11269-1-git-send-email-aliguori@us.ibm.com +(cherry picked from commit 9fb7aaaf4c58c9108327f0ae4766087e3e496b47) +--- + hw/i386/pc_piix.c | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 06e9eb8..af1f602 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -96,7 +96,6 @@ static void pc_init1(MemoryRegion *system_memory, + OBJECT(icc_bridge), NULL); + + pc_cpus_init(cpu_model, icc_bridge); +- pc_acpi_init("acpi-dsdt.aml"); + + if (kvmclock_enabled) { + kvmclock_create(); +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-drop-virtio-balloon-pci-event_idx-compat-property.patch b/SOURCES/kvm-pc-drop-virtio-balloon-pci-event_idx-compat-property.patch new file mode 100644 index 0000000..ee7aeca --- /dev/null +++ b/SOURCES/kvm-pc-drop-virtio-balloon-pci-event_idx-compat-property.patch @@ -0,0 +1,72 @@ +From cbe9fe3834d08758bc787ac0800afb9ece6ed782 Mon Sep 17 00:00:00 2001 +From: Luiz Capitulino +Date: Tue, 12 Nov 2013 17:10:04 +0100 +Subject: [PATCH 01/14] pc: drop virtio-balloon-pci event_idx compat property + +RH-Author: Luiz Capitulino +Message-id: <20131112121004.12eb9431@redhat.com> +Patchwork-id: 55664 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] pc: drop virtio-balloon-pci event_idx compat property +Bugzilla: 1029539 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +Bugzilla: 1029539 +Brew-build: https://brewweb.devel.redhat.com/taskinfo?taskID=6564546 + +Due to a bug, RHEL6 has never disabled the virtio-balloon-pci +driver's event_idx property for machine types rhel6.0.0 and +rhel6.1.0. The end result is that migration from RHEL6 to RHEL7 +fails for those machine types. + +The most obvious way to fix this problem is to fix RHEL6 to +really disable the property. But this won't solve the problem +for old RHEL6 binaries. Actually, it will make migration +incompatible between old RHEL6 binaries and newer ones. + +This commit makes the mistake official instead by dropping +the compat property for RHEL7. This fixes migration between +RHEL6 and RHEL7 without adding any new problems. + +Signed-off-by: Luiz Capitulino +--- + hw/i386/pc_piix.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +PS: Will post RHEL6.6 patch later. +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 8bae4c5..e6771a9 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -1030,6 +1030,11 @@ static QEMUMachine pc_machine_rhel620 = { + DEFAULT_MACHINE_OPTIONS, + }; + ++/* ++ * NOTE: We don't have the event_idx compat entry for the ++ * virtio-balloon-pci driver because RHEL6 doesn't disable ++ * it either due to a bug (see RHBZ 1029539 fo more info) ++ */ + #define PC_RHEL6_1_COMPAT \ + PC_RHEL6_2_COMPAT,\ + {\ +@@ -1061,10 +1066,6 @@ static QEMUMachine pc_machine_rhel620 = { + .property = "event_idx",\ + .value = "off",\ + },{\ +- .driver = "virtio-balloon-pci",\ +- .property = "event_idx",\ +- .value = "off",\ +- },{\ + .driver = "usb-kbd",\ + .property = "serial",\ + .value = "1",\ +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-fix-regression-for-64-bit-PCI-memory.patch b/SOURCES/kvm-pc-fix-regression-for-64-bit-PCI-memory.patch new file mode 100644 index 0000000..168a0b5 --- /dev/null +++ b/SOURCES/kvm-pc-fix-regression-for-64-bit-PCI-memory.patch @@ -0,0 +1,140 @@ +From 1cf1fcaf322e07354e830f2562db856ecbb1bf4c Mon Sep 17 00:00:00 2001 +Message-Id: <1cf1fcaf322e07354e830f2562db856ecbb1bf4c.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:45 +0100 +Subject: [PATCH 22/56] pc: fix regression for 64 bit PCI memory + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-23-git-send-email-mst@redhat.com> +Patchwork-id: 56328 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 22/57] pc: fix regression for 64 bit PCI memory +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +commit 398489018183d613306ab022653552247d93919f + pc: limit 64 bit hole to 2G by default +introduced a way for management to control +the window allocated to the 64 bit PCI hole. + +This is useful, but existing management tools do not know how to set +this property. As a result, e.g. specifying a large ivshmem device with +size > 4G is broken by default. For example this configuration no +longer works: + +-device ivshmem,size=4294967296,chardev=cfoo +-chardev socket,path=/tmp/sock,id=cfoo,server,nowait + +Fix this by detecting that hole size was not specified +and defaulting to the backwards-compatible value of 1 << 62. + +Cc: qemu-stable@nongnu.org +Cc: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 1466cef32dd5e7ef3c6477e96d85d92302ad02e3) + +Conflicts: + hw/pci-host/piix.c + hw/pci-host/q35.c +--- + include/hw/i386/pc.h | 11 ++++++++++- + hw/pci-host/piix.c | 9 ++++++--- + hw/pci-host/q35.c | 8 +++++--- + 3 files changed, 21 insertions(+), 7 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/piix.c | 9 ++++++--- + hw/pci-host/q35.c | 8 +++++--- + include/hw/i386/pc.h | 11 ++++++++++- + 3 files changed, 21 insertions(+), 7 deletions(-) + +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 0c26835..6502d1c 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -319,6 +319,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + PCII440FXState *f; + unsigned i; + I440FXState *i440fx; ++ uint64_t pci_hole64_size; + + dev = qdev_create(NULL, TYPE_I440FX_PCI_HOST_BRIDGE); + s = PCI_HOST_BRIDGE(dev); +@@ -350,13 +351,15 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + pci_hole_start, pci_hole_size); + memory_region_add_subregion(f->system_memory, pci_hole_start, &f->pci_hole); + ++ pci_hole64_size = pci_host_get_hole64_size(i440fx->pci_hole64_size); ++ + pc_init_pci64_hole(&i440fx->pci_info, 0x100000000ULL + above_4g_mem_size, +- i440fx->pci_hole64_size); ++ pci_hole64_size); + memory_region_init_alias(&f->pci_hole_64bit, "pci-hole64", + f->pci_address_space, + i440fx->pci_info.w64.begin, +- i440fx->pci_hole64_size); +- if (i440fx->pci_hole64_size) { ++ pci_hole64_size); ++ if (pci_hole64_size) { + memory_region_add_subregion(f->system_memory, + i440fx->pci_info.w64.begin, + &f->pci_hole_64bit); +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 943e55f..05779b8 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -325,6 +325,7 @@ static int mch_init(PCIDevice *d) + { + int i; + MCHPCIState *mch = MCH_PCI_DEVICE(d); ++ uint64_t pci_hole64_size; + + /* setup pci memory regions */ + memory_region_init_alias(&mch->pci_hole, "pci-hole", +@@ -334,13 +335,14 @@ static int mch_init(PCIDevice *d) + memory_region_add_subregion(mch->system_memory, mch->below_4g_mem_size, + &mch->pci_hole); + ++ pci_hole64_size = pci_host_get_hole64_size(mch->pci_hole64_size); + pc_init_pci64_hole(&mch->pci_info, 0x100000000ULL + mch->above_4g_mem_size, +- mch->pci_hole64_size); ++ pci_hole64_size); + memory_region_init_alias(&mch->pci_hole_64bit, "pci-hole64", + mch->pci_address_space, + mch->pci_info.w64.begin, +- mch->pci_hole64_size); +- if (mch->pci_hole64_size) { ++ pci_hole64_size); ++ if (pci_hole64_size) { + memory_region_add_subregion(mch->system_memory, + mch->pci_info.w64.begin, + &mch->pci_hole_64bit); +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index fe21bc3..abaaf93 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -105,7 +105,16 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, + #define PCI_HOST_PROP_PCI_HOLE64_START "pci-hole64-start" + #define PCI_HOST_PROP_PCI_HOLE64_END "pci-hole64-end" + #define PCI_HOST_PROP_PCI_HOLE64_SIZE "pci-hole64-size" +-#define DEFAULT_PCI_HOLE64_SIZE (1ULL << 31) ++#define DEFAULT_PCI_HOLE64_SIZE (~0x0ULL) ++ ++static inline uint64_t pci_host_get_hole64_size(uint64_t pci_hole64_size) ++{ ++ if (pci_hole64_size == DEFAULT_PCI_HOLE64_SIZE) { ++ return 1ULL << 62; ++ } else { ++ return pci_hole64_size; ++ } ++} + + void pc_init_pci64_hole(PcPciInfo *pci_info, uint64_t pci_hole64_start, + uint64_t pci_hole64_size); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-increase-maximal-VCPU-count-to-240.patch b/SOURCES/kvm-pc-increase-maximal-VCPU-count-to-240.patch new file mode 100644 index 0000000..c38b9fa --- /dev/null +++ b/SOURCES/kvm-pc-increase-maximal-VCPU-count-to-240.patch @@ -0,0 +1,42 @@ +From aa6910ca37db66c51b7a9a6431b68f7223b8fd7b Mon Sep 17 00:00:00 2001 +From: Radim Krcmar +Date: Wed, 27 Aug 2014 13:29:34 +0200 +Subject: [PATCH 2/6] pc: increase maximal VCPU count to 240 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1409146174-28442-1-git-send-email-rkrcmar@redhat.com> +Patchwork-id: 60740 +O-Subject: [RHEL7.1 qemu-kvm PATCH] pc: increase maximal VCPU count to 240 +Bugzilla: 1134408 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Andrew Jones + +To prevent TCG from going over RHEL KVM's limit in bc949bc00c, we added +another downstream constraint that needs to be bumped. + +Signed-off-by: Radim Krčmář +Signed-off-by: Miroslav Rezanina +--- + include/hw/i386/pc.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 57e2f93..3b8f7d8 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -15,7 +15,8 @@ + #include "sysemu/sysemu.h" + #include "hw/pci/pci.h" + +-#define RHEL_MAX_CPUS 160 ++/* KVM can't exceed KVM_SOFT_MAX_VCPUS (arch/x86/include/asm/kvm_host.h) */ ++#define RHEL_MAX_CPUS 240 + + /* PC-style peripherals (also used by other machines). */ + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-limit-64-bit-hole-to-2G-by-default.patch b/SOURCES/kvm-pc-limit-64-bit-hole-to-2G-by-default.patch new file mode 100644 index 0000000..fdf9587 --- /dev/null +++ b/SOURCES/kvm-pc-limit-64-bit-hole-to-2G-by-default.patch @@ -0,0 +1,555 @@ +From e27159f910abe099eba5d6959ace2f2de42e5f46 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:34 +0100 +Subject: [PATCH 18/56] pc: limit 64 bit hole to 2G by default +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-19-git-send-email-mst@redhat.com> +Patchwork-id: 56324 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 18/57] pc: limit 64 bit hole to 2G by default +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Igor Mammedov + +It turns out that some 32 bit windows guests crash +if 64 bit PCI hole size is >2G. +Limit it to 2G for piix and q35 by default. +User may override default 64-bit PCI hole size by +using "pci-hole64-size" property. + +Examples: +-global i440FX-pcihost.pci-hole64-size=4G + +-global q35-pcihost.pci-hole64-size=4G + +Reported-by: Igor Mammedov , +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Igor Mammedov +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Andreas Färber +Message-id: 1375109277-25561-8-git-send-email-imammedo@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 398489018183d613306ab022653552247d93919f) + +Conflicts: + hw/i386/pc.c + hw/pci-host/piix.c + hw/pci-host/q35.c +--- + include/hw/i386/pc.h | 14 +++++-- + include/hw/pci-host/q35.h | 2 + + hw/i386/pc.c | 56 ++++++++++++++++----------- + hw/i386/pc_piix.c | 14 +------ + hw/pci-host/piix.c | 99 ++++++++++++++++++++++++++++++++++++++++++++--- + hw/pci-host/q35.c | 88 ++++++++++++++++++++++++++++++++++------- + 6 files changed, 215 insertions(+), 58 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 56 ++++++++++++++++----------- + hw/i386/pc_piix.c | 14 +------ + hw/pci-host/piix.c | 99 ++++++++++++++++++++++++++++++++++++++++++++--- + hw/pci-host/q35.c | 88 ++++++++++++++++++++++++++++++++++------- + include/hw/i386/pc.h | 14 +++++-- + include/hw/pci-host/q35.h | 2 + + 6 files changed, 215 insertions(+), 58 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 9d9f5d2..e5ebd52 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -55,6 +55,7 @@ + #include "hw/acpi/acpi.h" + #include "hw/cpu/icc_bus.h" + #include "hw/boards.h" ++#include "hw/pci/pci_host.h" + + /* debug PC/ISA interrupts */ + //#define DEBUG_IRQ +@@ -996,15 +997,27 @@ typedef struct PcRomPciInfo { + static void pc_fw_cfg_guest_info(PcGuestInfo *guest_info) + { + PcRomPciInfo *info; ++ Object *pci_info; ++ bool ambiguous = false; ++ + if (!guest_info->has_pci_info || !guest_info->fw_cfg) { + return; + } ++ pci_info = object_resolve_path_type("", TYPE_PCI_HOST_BRIDGE, &ambiguous); ++ g_assert(!ambiguous); ++ if (!pci_info) { ++ return; ++ } + + info = g_malloc(sizeof *info); +- info->w32_min = cpu_to_le64(guest_info->pci_info.w32.begin); +- info->w32_max = cpu_to_le64(guest_info->pci_info.w32.end); +- info->w64_min = cpu_to_le64(guest_info->pci_info.w64.begin); +- info->w64_max = cpu_to_le64(guest_info->pci_info.w64.end); ++ info->w32_min = cpu_to_le64(object_property_get_int(pci_info, ++ PCI_HOST_PROP_PCI_HOLE_START, NULL)); ++ info->w32_max = cpu_to_le64(object_property_get_int(pci_info, ++ PCI_HOST_PROP_PCI_HOLE_END, NULL)); ++ info->w64_min = cpu_to_le64(object_property_get_int(pci_info, ++ PCI_HOST_PROP_PCI_HOLE64_START, NULL)); ++ info->w64_max = cpu_to_le64(object_property_get_int(pci_info, ++ PCI_HOST_PROP_PCI_HOLE64_END, NULL)); + /* Pass PCI hole info to guest via a side channel. + * Required so guest PCI enumeration does the right thing. */ + fw_cfg_add_file(guest_info->fw_cfg, "etc/pci-info", info, sizeof *info); +@@ -1030,29 +1043,28 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, + PcGuestInfoState *guest_info_state = g_malloc0(sizeof *guest_info_state); + PcGuestInfo *guest_info = &guest_info_state->info; + +- guest_info->pci_info.w32.end = IO_APIC_DEFAULT_ADDRESS; +- if (sizeof(hwaddr) == 4) { +- guest_info->pci_info.w64.begin = 0; +- guest_info->pci_info.w64.end = 0; +- } else { +- /* +- * BIOS does not set MTRR entries for the 64 bit window, so no need to +- * align address to power of two. Align address at 1G, this makes sure +- * it can be exactly covered with a PAT entry even when using huge +- * pages. +- */ +- guest_info->pci_info.w64.begin = +- ROUND_UP((0x1ULL << 32) + above_4g_mem_size, 0x1ULL << 30); +- guest_info->pci_info.w64.end = guest_info->pci_info.w64.begin + +- (0x1ULL << 62); +- assert(guest_info->pci_info.w64.begin <= guest_info->pci_info.w64.end); +- } +- + guest_info_state->machine_done.notify = pc_guest_info_machine_done; + qemu_add_machine_init_done_notifier(&guest_info_state->machine_done); + return guest_info; + } + ++void pc_init_pci64_hole(PcPciInfo *pci_info, uint64_t pci_hole64_start, ++ uint64_t pci_hole64_size) ++{ ++ if ((sizeof(hwaddr) == 4) || (!pci_hole64_size)) { ++ return; ++ } ++ /* ++ * BIOS does not set MTRR entries for the 64 bit window, so no need to ++ * align address to power of two. Align address at 1G, this makes sure ++ * it can be exactly covered with a PAT entry even when using huge ++ * pages. ++ */ ++ pci_info->w64.begin = ROUND_UP(pci_hole64_start, 0x1ULL << 30); ++ pci_info->w64.end = pci_info->w64.begin + pci_hole64_size; ++ assert(pci_info->w64.begin <= pci_info->w64.end); ++} ++ + void pc_acpi_init(const char *default_dsdt) + { + char *filename; +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 6d50a4e..211ff8e 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -125,15 +125,6 @@ static void pc_init1(QEMUMachineInitArgs *args, + guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); + guest_info->has_pci_info = has_pci_info; + +- /* Set PCI window size the way seabios has always done it. */ +- /* Power of 2 so bios can cover it with a single MTRR */ +- if (ram_size <= 0x80000000) +- guest_info->pci_info.w32.begin = 0x80000000; +- else if (ram_size <= 0xc0000000) +- guest_info->pci_info.w32.begin = 0xc0000000; +- else +- guest_info->pci_info.w32.begin = 0xe0000000; +- + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { + fw_cfg = pc_memory_init(system_memory, +@@ -157,10 +148,7 @@ static void pc_init1(QEMUMachineInitArgs *args, + system_memory, system_io, args->ram_size, + below_4g_mem_size, + 0x100000000ULL - below_4g_mem_size, +- 0x100000000ULL + above_4g_mem_size, +- (sizeof(hwaddr) == 4 +- ? 0 +- : ((uint64_t)1 << 62)), ++ above_4g_mem_size, + pci_memory, ram_memory); + } else { + pci_bus = NULL; +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index adc094a..167d1fd 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -32,6 +32,8 @@ + #include "hw/xen/xen.h" + #include "hw/pci-host/pam.h" + #include "sysemu/sysemu.h" ++#include "hw/i386/ioapic.h" ++#include "qapi/visitor.h" + + /* + * I440FX chipset data sheet. +@@ -44,6 +46,8 @@ + + typedef struct I440FXState { + PCIHostState parent_obj; ++ PcPciInfo pci_info; ++ uint64_t pci_hole64_size; + } I440FXState; + + #define PIIX_NUM_PIC_IRQS 16 /* i8259 * 2 */ +@@ -201,9 +205,49 @@ static const VMStateDescription vmstate_i440fx = { + } + }; + ++static void i440fx_pcihost_get_pci_hole_start(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj); ++ uint32_t value = s->pci_info.w32.begin; ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++static void i440fx_pcihost_get_pci_hole_end(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj); ++ uint32_t value = s->pci_info.w32.end; ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++static void i440fx_pcihost_get_pci_hole64_start(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj); ++ ++ visit_type_uint64(v, &s->pci_info.w64.begin, name, errp); ++} ++ ++static void i440fx_pcihost_get_pci_hole64_end(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj); ++ ++ visit_type_uint64(v, &s->pci_info.w64.end, name, errp); ++} ++ + static int i440fx_pcihost_initfn(SysBusDevice *dev) + { + PCIHostState *s = PCI_HOST_BRIDGE(dev); ++ I440FXState *d = I440FX_PCI_HOST_BRIDGE(s); ++ Object *obj = OBJECT(s); + + memory_region_init_io(&s->conf_mem, &pci_host_conf_le_ops, s, + "pci-conf-idx", 4); +@@ -212,6 +256,27 @@ static int i440fx_pcihost_initfn(SysBusDevice *dev) + + memory_region_init_io(&s->data_mem, &pci_host_data_le_ops, s, + "pci-conf-data", 4); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "int", ++ i440fx_pcihost_get_pci_hole_start, ++ NULL, NULL, NULL, NULL); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_END, "int", ++ i440fx_pcihost_get_pci_hole_end, ++ NULL, NULL, NULL, NULL); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_START, "int", ++ i440fx_pcihost_get_pci_hole64_start, ++ NULL, NULL, NULL, NULL); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "int", ++ i440fx_pcihost_get_pci_hole64_end, ++ NULL, NULL, NULL, NULL); ++ ++ d->pci_info.w32.end = IO_APIC_DEFAULT_ADDRESS; ++ ++ memory_region_init_io(&s->data_mem, &pci_host_data_le_ops, s, ++ "pci-conf-data", 4); + sysbus_add_io(dev, 0xcfc, &s->data_mem); + sysbus_init_ioports(&s->busdev, 0xcfc, 4); + +@@ -236,8 +301,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + ram_addr_t ram_size, + hwaddr pci_hole_start, + hwaddr pci_hole_size, +- hwaddr pci_hole64_start, +- hwaddr pci_hole64_size, ++ ram_addr_t above_4g_mem_size, + MemoryRegion *pci_address_space, + MemoryRegion *ram_memory) + { +@@ -248,6 +312,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + PIIX3State *piix3; + PCII440FXState *f; + unsigned i; ++ I440FXState *i440fx; + + dev = qdev_create(NULL, TYPE_I440FX_PCI_HOST_BRIDGE); + s = PCI_HOST_BRIDGE(dev); +@@ -263,14 +328,31 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + f->system_memory = address_space_mem; + f->pci_address_space = pci_address_space; + f->ram_memory = ram_memory; ++ ++ i440fx = I440FX_PCI_HOST_BRIDGE(dev); ++ /* Set PCI window size the way seabios has always done it. */ ++ /* Power of 2 so bios can cover it with a single MTRR */ ++ if (ram_size <= 0x80000000) { ++ i440fx->pci_info.w32.begin = 0x80000000; ++ } else if (ram_size <= 0xc0000000) { ++ i440fx->pci_info.w32.begin = 0xc0000000; ++ } else { ++ i440fx->pci_info.w32.begin = 0xe0000000; ++ } ++ + memory_region_init_alias(&f->pci_hole, "pci-hole", f->pci_address_space, + pci_hole_start, pci_hole_size); + memory_region_add_subregion(f->system_memory, pci_hole_start, &f->pci_hole); ++ ++ pc_init_pci64_hole(&i440fx->pci_info, 0x100000000ULL + above_4g_mem_size, ++ i440fx->pci_hole64_size); + memory_region_init_alias(&f->pci_hole_64bit, "pci-hole64", + f->pci_address_space, +- pci_hole64_start, pci_hole64_size); +- if (pci_hole64_size) { +- memory_region_add_subregion(f->system_memory, pci_hole64_start, ++ i440fx->pci_info.w64.begin, ++ i440fx->pci_hole64_size); ++ if (i440fx->pci_hole64_size) { ++ memory_region_add_subregion(f->system_memory, ++ i440fx->pci_info.w64.begin, + &f->pci_hole_64bit); + } + memory_region_init_alias(&f->smram_region, "smram-region", +@@ -621,6 +703,12 @@ static const TypeInfo i440fx_info = { + .class_init = i440fx_class_init, + }; + ++static Property i440fx_props[] = { ++ DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, I440FXState, ++ pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE), ++ DEFINE_PROP_END_OF_LIST(), ++}; ++ + static void i440fx_pcihost_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); +@@ -628,6 +716,7 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data) + + k->init = i440fx_pcihost_initfn; + dc->fw_name = "pci"; ++ dc->props = i440fx_props; + } + + static const TypeInfo i440fx_pcihost_info = { +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 0989fc5..be12eee 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -29,6 +29,7 @@ + */ + #include "hw/hw.h" + #include "hw/pci-host/q35.h" ++#include "qapi/visitor.h" + + /**************************************************************************** + * Q35 host +@@ -63,9 +64,49 @@ static int q35_host_init(SysBusDevice *dev) + return 0; + } + ++static void q35_host_get_pci_hole_start(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ Q35PCIHost *s = Q35_HOST_DEVICE(obj); ++ uint32_t value = s->mch.pci_info.w32.begin; ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++static void q35_host_get_pci_hole_end(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ Q35PCIHost *s = Q35_HOST_DEVICE(obj); ++ uint32_t value = s->mch.pci_info.w32.end; ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++static void q35_host_get_pci_hole64_start(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ Q35PCIHost *s = Q35_HOST_DEVICE(obj); ++ ++ visit_type_uint64(v, &s->mch.pci_info.w64.begin, name, errp); ++} ++ ++static void q35_host_get_pci_hole64_end(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ Q35PCIHost *s = Q35_HOST_DEVICE(obj); ++ ++ visit_type_uint64(v, &s->mch.pci_info.w64.end, name, errp); ++} ++ + static Property mch_props[] = { + DEFINE_PROP_UINT64("MCFG", Q35PCIHost, host.base_addr, + MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT), ++ DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, Q35PCIHost, ++ mch.pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE), + DEFINE_PROP_END_OF_LIST(), + }; + +@@ -88,6 +129,31 @@ static void q35_host_initfn(Object *obj) + object_property_add_child(OBJECT(s), "mch", OBJECT(&s->mch), NULL); + qdev_prop_set_uint32(DEVICE(&s->mch), "addr", PCI_DEVFN(0, 0)); + qdev_prop_set_bit(DEVICE(&s->mch), "multifunction", false); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_START, "int", ++ q35_host_get_pci_hole_start, ++ NULL, NULL, NULL, NULL); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE_END, "int", ++ q35_host_get_pci_hole_end, ++ NULL, NULL, NULL, NULL); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_START, "int", ++ q35_host_get_pci_hole64_start, ++ NULL, NULL, NULL, NULL); ++ ++ object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "int", ++ q35_host_get_pci_hole64_end, ++ NULL, NULL, NULL, NULL); ++ ++ /* Leave enough space for the biggest MCFG BAR */ ++ /* TODO: this matches current bios behaviour, but ++ * it's not a power of two, which means an MTRR ++ * can't cover it exactly. ++ */ ++ s->mch.pci_info.w32.begin = MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT + ++ MCH_HOST_BRIDGE_PCIEXBAR_MAX; ++ s->mch.pci_info.w32.end = IO_APIC_DEFAULT_ADDRESS; + } + + static const TypeInfo q35_host_info = { +@@ -242,17 +308,8 @@ static void mch_reset(DeviceState *qdev) + static int mch_init(PCIDevice *d) + { + int i; +- hwaddr pci_hole64_size; + MCHPCIState *mch = MCH_PCI_DEVICE(d); + +- /* Leave enough space for the biggest MCFG BAR */ +- /* TODO: this matches current bios behaviour, but +- * it's not a power of two, which means an MTRR +- * can't cover it exactly. +- */ +- mch->guest_info->pci_info.w32.begin = MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT + +- MCH_HOST_BRIDGE_PCIEXBAR_MAX; +- + /* setup pci memory regions */ + memory_region_init_alias(&mch->pci_hole, "pci-hole", + mch->pci_address_space, +@@ -260,15 +317,16 @@ static int mch_init(PCIDevice *d) + 0x100000000ULL - mch->below_4g_mem_size); + memory_region_add_subregion(mch->system_memory, mch->below_4g_mem_size, + &mch->pci_hole); +- pci_hole64_size = (sizeof(hwaddr) == 4 ? 0 : +- ((uint64_t)1 << 62)); ++ ++ pc_init_pci64_hole(&mch->pci_info, 0x100000000ULL + mch->above_4g_mem_size, ++ mch->pci_hole64_size); + memory_region_init_alias(&mch->pci_hole_64bit, "pci-hole64", + mch->pci_address_space, +- 0x100000000ULL + mch->above_4g_mem_size, +- pci_hole64_size); +- if (pci_hole64_size) { ++ mch->pci_info.w64.begin, ++ mch->pci_hole64_size); ++ if (mch->pci_hole64_size) { + memory_region_add_subregion(mch->system_memory, +- 0x100000000ULL + mch->above_4g_mem_size, ++ mch->pci_info.w64.begin, + &mch->pci_hole_64bit); + } + /* smram */ +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 2992464..fe21bc3 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -20,7 +20,6 @@ typedef struct PcPciInfo { + } PcPciInfo; + + struct PcGuestInfo { +- PcPciInfo pci_info; + bool has_pci_info; + FWCfgState *fw_cfg; + }; +@@ -101,6 +100,16 @@ void pc_acpi_init(const char *default_dsdt); + PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, + ram_addr_t above_4g_mem_size); + ++#define PCI_HOST_PROP_PCI_HOLE_START "pci-hole-start" ++#define PCI_HOST_PROP_PCI_HOLE_END "pci-hole-end" ++#define PCI_HOST_PROP_PCI_HOLE64_START "pci-hole64-start" ++#define PCI_HOST_PROP_PCI_HOLE64_END "pci-hole64-end" ++#define PCI_HOST_PROP_PCI_HOLE64_SIZE "pci-hole64-size" ++#define DEFAULT_PCI_HOLE64_SIZE (1ULL << 31) ++ ++void pc_init_pci64_hole(PcPciInfo *pci_info, uint64_t pci_hole64_start, ++ uint64_t pci_hole64_size); ++ + FWCfgState *pc_memory_init(MemoryRegion *system_memory, + const char *kernel_filename, + const char *kernel_cmdline, +@@ -150,8 +159,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn, + ram_addr_t ram_size, + hwaddr pci_hole_start, + hwaddr pci_hole_size, +- hwaddr pci_hole64_start, +- hwaddr pci_hole64_size, ++ ram_addr_t above_4g_mem_size, + MemoryRegion *pci_memory, + MemoryRegion *ram_memory); + +diff --git a/include/hw/pci-host/q35.h b/include/hw/pci-host/q35.h +index b083831..e660a40 100644 +--- a/include/hw/pci-host/q35.h ++++ b/include/hw/pci-host/q35.h +@@ -52,9 +52,11 @@ typedef struct MCHPCIState { + MemoryRegion smram_region; + MemoryRegion pci_hole; + MemoryRegion pci_hole_64bit; ++ PcPciInfo pci_info; + uint8_t smm_enabled; + ram_addr_t below_4g_mem_size; + ram_addr_t above_4g_mem_size; ++ uint64_t pci_hole64_size; + PcGuestInfo *guest_info; + } MCHPCIState; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-move-IO_APIC_DEFAULT_ADDRESS-to-include-hw-i386-i.patch b/SOURCES/kvm-pc-move-IO_APIC_DEFAULT_ADDRESS-to-include-hw-i386-i.patch new file mode 100644 index 0000000..b462ab1 --- /dev/null +++ b/SOURCES/kvm-pc-move-IO_APIC_DEFAULT_ADDRESS-to-include-hw-i386-i.patch @@ -0,0 +1,69 @@ +From 6b0e2eb81618b85ea078daba4688593d5cfaeba0 Mon Sep 17 00:00:00 2001 +Message-Id: <6b0e2eb81618b85ea078daba4688593d5cfaeba0.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:03 +0100 +Subject: [PATCH 06/56] pc: move IO_APIC_DEFAULT_ADDRESS to + include/hw/i386/ioapic.h +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-7-git-send-email-mst@redhat.com> +Patchwork-id: 56311 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 06/57] pc: move IO_APIC_DEFAULT_ADDRESS to include/hw/i386/ioapic.h +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Laszlo Ersek +Signed-off-by: Igor Mammedov +Reviewed-by: Andreas Färber +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Andreas Färber +Message-id: 1375109277-25561-2-git-send-email-imammedo@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit f5338ee30d91693f5805208e58df80f0551c3896) +--- + include/hw/i386/ioapic.h | 1 + + hw/i386/pc.c | 2 -- + 2 files changed, 1 insertion(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 2 -- + include/hw/i386/ioapic.h | 1 + + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 9e5a082..333e83f 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -75,8 +75,6 @@ + #define FW_CFG_E820_TABLE (FW_CFG_ARCH_LOCAL + 3) + #define FW_CFG_HPET (FW_CFG_ARCH_LOCAL + 4) + +-#define IO_APIC_DEFAULT_ADDRESS 0xfec00000 +- + #define E820_NR_ENTRIES 16 + + struct e820_entry { +diff --git a/include/hw/i386/ioapic.h b/include/hw/i386/ioapic.h +index 86e63da..6245388 100644 +--- a/include/hw/i386/ioapic.h ++++ b/include/hw/i386/ioapic.h +@@ -21,6 +21,7 @@ + #define HW_IOAPIC_H + + #define IOAPIC_NUM_PINS 24 ++#define IO_APIC_DEFAULT_ADDRESS 0xfec00000 + + void ioapic_eoi_broadcast(int vector); + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-pass-PCI-hole-ranges-to-Guests.patch b/SOURCES/kvm-pc-pass-PCI-hole-ranges-to-Guests.patch new file mode 100644 index 0000000..b1595e9 --- /dev/null +++ b/SOURCES/kvm-pc-pass-PCI-hole-ranges-to-Guests.patch @@ -0,0 +1,234 @@ +From b70ff3a2191f959098f12965c4c7e5adb60be59e Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:24 +0100 +Subject: [PATCH 14/56] pc: pass PCI hole ranges to Guests + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-15-git-send-email-mst@redhat.com> +Patchwork-id: 56320 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 14/57] pc: pass PCI hole ranges to Guests +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Guest currently has to jump through lots of hoops to guess the PCI hole +ranges. It's fragile, and makes us change BIOS each time we add a new +chipset. Let's report the window in a ROM file, to make BIOS do exactly +what QEMU intends. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit f8c457b88d72a48989f190bc3d7b79f4f3b7d11c) + +Conflicts: + hw/i386/pc_piix.c + hw/i386/pc_q35.c +--- + include/hw/i386/pc.h | 1 + + hw/i386/pc.c | 26 ++++++++++++++++++++++++++ + hw/i386/pc_piix.c | 16 +++++++++++++++- + hw/i386/pc_q35.c | 12 ++++++++++-- + 4 files changed, 52 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 26 ++++++++++++++++++++++++++ + hw/i386/pc_piix.c | 16 +++++++++++++++- + hw/i386/pc_q35.c | 12 ++++++++++-- + include/hw/i386/pc.h | 1 + + 4 files changed, 52 insertions(+), 3 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 68a8e1b..238f6a0 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -985,6 +985,31 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge) + } + } + ++/* pci-info ROM file. Little endian format */ ++typedef struct PcRomPciInfo { ++ uint64_t w32_min; ++ uint64_t w32_max; ++ uint64_t w64_min; ++ uint64_t w64_max; ++} PcRomPciInfo; ++ ++static void pc_fw_cfg_guest_info(PcGuestInfo *guest_info) ++{ ++ PcRomPciInfo *info; ++ if (!guest_info->has_pci_info) { ++ return; ++ } ++ ++ info = g_malloc(sizeof *info); ++ info->w32_min = cpu_to_le64(guest_info->pci_info.w32.begin); ++ info->w32_max = cpu_to_le64(guest_info->pci_info.w32.end); ++ info->w64_min = cpu_to_le64(guest_info->pci_info.w64.begin); ++ info->w64_max = cpu_to_le64(guest_info->pci_info.w64.end); ++ /* Pass PCI hole info to guest via a side channel. ++ * Required so guest PCI enumeration does the right thing. */ ++ fw_cfg_add_file(guest_info->fw_cfg, "etc/pci-info", info, sizeof *info); ++} ++ + typedef struct PcGuestInfoState { + PcGuestInfo info; + Notifier machine_done; +@@ -996,6 +1021,7 @@ void pc_guest_info_machine_done(Notifier *notifier, void *data) + PcGuestInfoState *guest_info_state = container_of(notifier, + PcGuestInfoState, + machine_done); ++ pc_fw_cfg_guest_info(&guest_info_state->info); + } + + PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 3a77998..6d50a4e 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -59,6 +59,7 @@ static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; + static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + + static bool smbios_type1_defaults = true; ++static bool has_pci_info = true; + + /* PC hardware initialisation */ + static void pc_init1(QEMUMachineInitArgs *args, +@@ -122,6 +123,7 @@ static void pc_init1(QEMUMachineInitArgs *args, + } + + guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); ++ guest_info->has_pci_info = has_pci_info; + + /* Set PCI window size the way seabios has always done it. */ + /* Power of 2 so bios can cover it with a single MTRR */ +@@ -248,8 +250,15 @@ static void pc_init_pci(QEMUMachineInitArgs *args) + + #if 0 /* Disabled for Red Hat Enterprise Linux */ + ++static void pc_init_pci_1_5(QEMUMachineInitArgs *args) ++{ ++ has_pci_info = false; ++ pc_init_pci(args); ++} ++ + static void pc_init_pci_1_4(QEMUMachineInitArgs *args) + { ++ has_pci_info = false; + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); + pc_init_pci(args); +@@ -257,6 +266,7 @@ static void pc_init_pci_1_4(QEMUMachineInitArgs *args) + + static void pc_init_pci_1_3(QEMUMachineInitArgs *args) + { ++ has_pci_info = false; + enable_compat_apic_id_mode(); + pc_init_pci(args); + } +@@ -264,6 +274,7 @@ static void pc_init_pci_1_3(QEMUMachineInitArgs *args) + /* PC machine init function for pc-1.1 to pc-1.2 */ + static void pc_init_pci_1_2(QEMUMachineInitArgs *args) + { ++ has_pci_info = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); + pc_init_pci(args); +@@ -272,6 +283,7 @@ static void pc_init_pci_1_2(QEMUMachineInitArgs *args) + /* PC machine init function for pc-0.14 to pc-1.0 */ + static void pc_init_pci_1_0(QEMUMachineInitArgs *args) + { ++ has_pci_info = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); + pc_init_pci(args); +@@ -280,6 +292,7 @@ static void pc_init_pci_1_0(QEMUMachineInitArgs *args) + /* PC init function for pc-0.10 to pc-0.13, and reused by xenfv */ + static void pc_init_pci_no_kvmclock(QEMUMachineInitArgs *args) + { ++ has_pci_info = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); + pc_init1(args, get_system_memory(), get_system_io(), 1, 0); +@@ -290,6 +303,7 @@ static void pc_init_isa(QEMUMachineInitArgs *args) + if (!args->cpu_model) { + args->cpu_model = "486"; + } ++ has_pci_info = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); + pc_init1(args, get_system_memory(), get_system_io(), 0, 1); +@@ -310,7 +324,7 @@ static QEMUMachine pc_i440fx_machine_v1_5 = { + .name = "pc-i440fx-1.5", + .alias = "pc", + .desc = "Standard PC (i440FX + PIIX, 1996)", +- .init = pc_init_pci, ++ .init = pc_init_pci_1_5, + .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .is_default = 1, +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 9fab93c..7a58b61 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -49,6 +49,7 @@ + #define MAX_SATA_PORTS 6 + + static bool smbios_type1_defaults = true; ++static bool has_pci_info = true; + + /* PC hardware initialisation */ + static void pc_q35_init(QEMUMachineInitArgs *args) +@@ -108,6 +109,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + } + + guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); ++ guest_info->has_pci_info = has_pci_info; + + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { +@@ -213,18 +215,24 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + + #if 0 /* Disabled for Red Hat Enterprise Linux */ + ++static void pc_q35_init_1_5(QEMUMachineInitArgs *args) ++{ ++ has_pci_info = false; ++ pc_q35_init(args); ++} ++ + static void pc_q35_init_1_4(QEMUMachineInitArgs *args) + { + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); +- pc_q35_init(args); ++ pc_q35_init_1_5(args); + } + + static QEMUMachine pc_q35_machine_v1_5 = { + .name = "pc-q35-1.5", + .alias = "q35", + .desc = "Standard PC (Q35 + ICH9, 2009)", +- .init = pc_q35_init, ++ .init = pc_q35_init_1_5, + .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .compat_props = (GlobalProperty[]) { +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 2518db6..2992464 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -21,6 +21,7 @@ typedef struct PcPciInfo { + + struct PcGuestInfo { + PcPciInfo pci_info; ++ bool has_pci_info; + FWCfgState *fw_cfg; + }; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-replace-i440fx_common_init-with-i440fx_init.patch b/SOURCES/kvm-pc-replace-i440fx_common_init-with-i440fx_init.patch new file mode 100644 index 0000000..10880b7 --- /dev/null +++ b/SOURCES/kvm-pc-replace-i440fx_common_init-with-i440fx_init.patch @@ -0,0 +1,118 @@ +From b1aa978a4310bc3c6811be75be978970022df6d2 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:27 +0100 +Subject: [PATCH 15/56] pc: replace i440fx_common_init() with i440fx_init() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-16-git-send-email-mst@redhat.com> +Patchwork-id: 56321 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 15/57] pc: replace i440fx_common_init() with i440fx_init() +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Igor Mammedov + +It isn't used anywhere else. + +Signed-off-by: Igor Mammedov +Reviewed-by: Andreas Färber +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Andreas Färber +Message-id: 1375109277-25561-4-git-send-email-imammedo@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 44fc8c5e743b84c1d29f603e4014125dcf152d26) +--- + hw/pci-host/piix.c | 50 +++++++++++++------------------------------------- + 1 file changed, 13 insertions(+), 37 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/piix.c | 50 +++++++++++++------------------------------------- + 1 file changed, 13 insertions(+), 37 deletions(-) + +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index c89b76b..8894c03 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -224,19 +224,18 @@ static int i440fx_initfn(PCIDevice *dev) + return 0; + } + +-static PCIBus *i440fx_common_init(const char *device_name, +- PCII440FXState **pi440fx_state, +- int *piix3_devfn, +- ISABus **isa_bus, qemu_irq *pic, +- MemoryRegion *address_space_mem, +- MemoryRegion *address_space_io, +- ram_addr_t ram_size, +- hwaddr pci_hole_start, +- hwaddr pci_hole_size, +- hwaddr pci_hole64_start, +- hwaddr pci_hole64_size, +- MemoryRegion *pci_address_space, +- MemoryRegion *ram_memory) ++PCIBus *i440fx_init(PCII440FXState **pi440fx_state, ++ int *piix3_devfn, ++ ISABus **isa_bus, qemu_irq *pic, ++ MemoryRegion *address_space_mem, ++ MemoryRegion *address_space_io, ++ ram_addr_t ram_size, ++ hwaddr pci_hole_start, ++ hwaddr pci_hole_size, ++ hwaddr pci_hole64_start, ++ hwaddr pci_hole64_size, ++ MemoryRegion *pci_address_space, ++ MemoryRegion *ram_memory) + { + DeviceState *dev; + PCIBus *b; +@@ -254,7 +253,7 @@ static PCIBus *i440fx_common_init(const char *device_name, + object_property_add_child(qdev_get_machine(), "i440fx", OBJECT(dev), NULL); + qdev_init_nofail(dev); + +- d = pci_create_simple(b, 0, device_name); ++ d = pci_create_simple(b, 0, TYPE_I440FX_PCI_DEVICE); + *pi440fx_state = I440FX_PCI_DEVICE(d); + f = *pi440fx_state; + f->system_memory = address_space_mem; +@@ -314,29 +313,6 @@ static PCIBus *i440fx_common_init(const char *device_name, + return b; + } + +-PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix3_devfn, +- ISABus **isa_bus, qemu_irq *pic, +- MemoryRegion *address_space_mem, +- MemoryRegion *address_space_io, +- ram_addr_t ram_size, +- hwaddr pci_hole_start, +- hwaddr pci_hole_size, +- hwaddr pci_hole64_start, +- hwaddr pci_hole64_size, +- MemoryRegion *pci_memory, MemoryRegion *ram_memory) +- +-{ +- PCIBus *b; +- +- b = i440fx_common_init(TYPE_I440FX_PCI_DEVICE, pi440fx_state, +- piix3_devfn, isa_bus, pic, +- address_space_mem, address_space_io, ram_size, +- pci_hole_start, pci_hole_size, +- pci_hole64_start, pci_hole64_size, +- pci_memory, ram_memory); +- return b; +-} +- + /* PIIX3 PCI to ISA bridge */ + static void piix3_set_irq_pic(PIIX3State *piix3, int pic_irq) + { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc-rhel6-doesn-t-have-APIC-on-pentium-CPU-models.patch b/SOURCES/kvm-pc-rhel6-doesn-t-have-APIC-on-pentium-CPU-models.patch new file mode 100644 index 0000000..6942e85 --- /dev/null +++ b/SOURCES/kvm-pc-rhel6-doesn-t-have-APIC-on-pentium-CPU-models.patch @@ -0,0 +1,55 @@ +From ddcaa23c15a4881a882686961d99fc26abb45357 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Mon, 16 Sep 2013 20:39:55 +0200 +Subject: [PATCH 06/25] pc: rhel6 doesn't have APIC on pentium* CPU models + +RH-Author: Eduardo Habkost +Message-id: <1379363997-11783-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54400 +O-Subject: [RHEL7 PATCH 2/4] pc: rhel6 doesn't have APIC on pentium* CPU models +Bugzilla: 918907 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +From: Eduardo Habkost + +Bugzilla: 918907 +Upstream status: not applicable + (pc-0.12 already have CPUID_APIC enabled for almost 4 years) +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6290888 + +QEMU v0.13 and newer has CPUID_APIC set on pentium, pentium2, and +pentium3 CPU models[1], but v0.12 (and RHEL-6) don't have it. We need to +disable the flag on pc_init_rhel650() to keep compatibility. + +[1] Upstream commit c84bd4f104098861e162be848a00d64c1fa76ed4 + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 39be127..6fe6ba0 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -872,6 +872,10 @@ static QEMUMachine pc_machine_rhel700 = { + + static void pc_init_rhel650(QEMUMachineInitArgs *args) + { ++ x86_cpu_compat_set_features("pentium", FEAT_1_EDX, 0, CPUID_APIC); ++ x86_cpu_compat_set_features("pentium2", FEAT_1_EDX, 0, CPUID_APIC); ++ x86_cpu_compat_set_features("pentium3", FEAT_1_EDX, 0, CPUID_APIC); ++ + x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-rhel6.x-has-x2apic-present-on-Conroe-Penryn-Nehal.patch b/SOURCES/kvm-pc-rhel6.x-has-x2apic-present-on-Conroe-Penryn-Nehal.patch new file mode 100644 index 0000000..7d719de --- /dev/null +++ b/SOURCES/kvm-pc-rhel6.x-has-x2apic-present-on-Conroe-Penryn-Nehal.patch @@ -0,0 +1,49 @@ +From 7d9e001ea97e762782e6875d220cc50269c1005f Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:48 +0200 +Subject: [PATCH 20/28] pc: rhel6.x has x2apic present on Conroe/Penryn/Nehalem CPU models + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-4-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53613 +O-Subject: [RHEL7 PATCH 3/7] pc: rhel6.x has x2apic present on Conroe/Penryn/Nehalem CPU models +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + +The Conroe/Penryn/Nehalem CPU models all have x2apic enabled on rhel6.x +(added by RHEL-6 commit 19ab65a663cfdfa8365f3ec324af6b0ab26be5a1). Add +compat bits to make sure they are set on the rhel6.x machine-types. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index a11a4b0..c5d82ab 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -864,6 +864,10 @@ static QEMUMachine pc_machine_rhel700 = { + + static void pc_init_rhel650(QEMUMachineInitArgs *args) + { ++ x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + pc_init_rhel700(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-set-compat-CPUID-0x80000001-.EDX-bits-on-Westmere.patch b/SOURCES/kvm-pc-set-compat-CPUID-0x80000001-.EDX-bits-on-Westmere.patch new file mode 100644 index 0000000..a6045c7 --- /dev/null +++ b/SOURCES/kvm-pc-set-compat-CPUID-0x80000001-.EDX-bits-on-Westmere.patch @@ -0,0 +1,53 @@ +From 78fbb36235f35484e0ae0a124269b35288dd472b Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:49 +0200 +Subject: [PATCH 21/28] pc: set compat CPUID[0x80000001].EDX bits on Westmere for rhel6.x + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-5-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53611 +O-Subject: [RHEL7 PATCH 4/7] pc: set compat CPUID[0x80000001].EDX bits on Westmere for rhel6.x +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + +On RHEL-6 the Westmere CPU model has many CPU feature alias bits +incorrectly set on CPUID[0x80000001].EDX. This is a RHEL-6 bug (that +doesn't cause problems because those bits are documented as reserved on +Intel CPUs), but we need to keep exactly the same bits for compatibility +on the rhel6.x machine-types. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index c5d82ab..d5dc04d 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -868,6 +868,12 @@ static void pc_init_rhel650(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere", FEAT_8000_0001_EDX, ++ CPUID_EXT2_FXSR | CPUID_EXT2_MMX | CPUID_EXT2_PAT | ++ CPUID_EXT2_CMOV | CPUID_EXT2_PGE | CPUID_EXT2_APIC | ++ CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | ++ CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, ++ 0); + pc_init_rhel700(args); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-set-compat-pmu-property-for-rhel6-x-machine-types.patch b/SOURCES/kvm-pc-set-compat-pmu-property-for-rhel6-x-machine-types.patch new file mode 100644 index 0000000..2c2095c --- /dev/null +++ b/SOURCES/kvm-pc-set-compat-pmu-property-for-rhel6-x-machine-types.patch @@ -0,0 +1,55 @@ +From 0bc3adc3b0a24625b1f8217abc1a50d7ce741191 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 2 Aug 2013 14:08:53 +0200 +Subject: pc: set compat "pmu" property for rhel6.x machine-types + +RH-Author: Eduardo Habkost +Message-id: <1375452533-12507-4-git-send-email-ehabkost@redhat.com> +Patchwork-id: 52934 +O-Subject: [RHEL-7 PATCH 3/3] pc: set compat "pmu" property for rhel6.x machine-types +Bugzilla: 853101 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Gleb Natapov + +Bugzilla: 853101 +Upstream status: not applicable + +This adds compatibility values to the rhel6.* machine-types for the +"pmu" property on X86CPU: + + * rhel6.2 and older doesn't have vPMU support + * rhel6.3 has the broken passthrough-mode vPMU enabled + * rhel6.4 and newer have vPMU disabled by default + +Signed-off-by: Eduardo Habkost + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index e1bedec..bc67633 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -942,6 +942,10 @@ static QEMUMachine pc_machine_rhel640 = { + .driver = "virtio-scsi-pci",\ + .property = "param_change",\ + .value = "off",\ ++ },{\ ++ .driver = TYPE_X86_CPU,\ ++ .property = "pmu",\ ++ .value = "on",\ + } + + static void pc_init_rhel630(QEMUMachineInitArgs *args) +@@ -964,7 +968,12 @@ static QEMUMachine pc_machine_rhel630 = { + }; + + #define PC_RHEL6_2_COMPAT \ +- PC_RHEL6_3_COMPAT ++ PC_RHEL6_3_COMPAT,\ ++ {\ ++ .driver = TYPE_X86_CPU,\ ++ .property = "pmu",\ ++ .value = "off",\ ++ } + + static void pc_init_rhel620(QEMUMachineInitArgs *args) + { diff --git a/SOURCES/kvm-pc-set-level-xlevel-correctly-on-486-qemu32-CPU-mode.patch b/SOURCES/kvm-pc-set-level-xlevel-correctly-on-486-qemu32-CPU-mode.patch new file mode 100644 index 0000000..ce63b4f --- /dev/null +++ b/SOURCES/kvm-pc-set-level-xlevel-correctly-on-486-qemu32-CPU-mode.patch @@ -0,0 +1,54 @@ +From 235601c37ce0dd3c42906d29b20c4f32b15a1b4f Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 20 Aug 2013 15:09:46 +0200 +Subject: [PATCH 18/28] pc: set level/xlevel correctly on 486/qemu32 CPU models for rhel6.x + +RH-Author: Eduardo Habkost +Message-id: <1377011392-9336-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 53609 +O-Subject: [RHEL7 PATCH 1/7] pc: set level/xlevel correctly on 486/qemu32 CPU models for rhel6.x +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 918907 +Upstream status: not applicable + (Upstream have the new xlevel on all machine-types since v0.13) + +Upstream commit 58012d66dc7323f48e9bad3be6d65a50ed3d76bc changed xlevel +on the "qemu32" CPU model and level on "486", but we need to keep a +compatible value on the rhel6.x machine-types. + +Signed-off-by: Eduardo Habkost +--- + hw/i386/pc_piix.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 0f63290..0dc52c4 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -852,6 +852,14 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "AC97",\ + .property = "use_broken_id",\ + .value = stringify(1),\ ++ },{\ ++ .driver = "qemu32-" TYPE_X86_CPU,\ ++ .property = "xlevel",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "486-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(0),\ + } + + static void pc_init_rhel650(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-pc-set-the-OEM-fields-in-the-RSDT-and-the-FADT-from-.patch b/SOURCES/kvm-pc-set-the-OEM-fields-in-the-RSDT-and-the-FADT-from-.patch new file mode 100644 index 0000000..f1d5ebf --- /dev/null +++ b/SOURCES/kvm-pc-set-the-OEM-fields-in-the-RSDT-and-the-FADT-from-.patch @@ -0,0 +1,133 @@ +From 607904cf94b1dee91c74522aedebda308ffba93d Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 11 May 2016 12:33:48 +0200 +Subject: [PATCH 09/10] pc: set the OEM fields in the RSDT and the FADT from + the SLIC + +RH-Author: Laszlo Ersek +Message-id: <1462970028-10959-8-git-send-email-lersek@redhat.com> +Patchwork-id: 70384 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 7/7] pc: set the OEM fields in the RSDT and the FADT from the SLIC +Bugzilla: 1330969 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +The Microsoft spec about the SLIC and MSDM ACPI tables at + requires the OEM ID and +OEM Table ID fields to be consistent between the SLIC and the RSDT/XSDT. +That further affects the FADT, because a similar match between the FADT +and the RSDT/XSDT is required by the ACPI spec in general. + +This patch wires up the previous three patches. + +Cc: "Michael S. Tsirkin" (supporter:ACPI/SMBIOS) +Cc: Igor Mammedov (supporter:ACPI/SMBIOS) +Cc: Paolo Bonzini (maintainer:X86) +Cc: Richard W.M. Jones +Cc: Aleksei Kovura +Cc: Michael Tokarev +Cc: Steven Newbury +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1248758 +LP: https://bugs.launchpad.net/qemu/+bug/1533848 +Signed-off-by: Laszlo Ersek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Steven Newbury +(cherry picked from commit ae12374951f07157f7a52c8d848b90f8eec722fb) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/i386/acpi-build.c + +RHEL-7 backport note: conflict due to downstream lacking 7c2c1fa5f428 +("pc: acpi: use local var for accessing ACPI tables blob in +acpi_build()"). + +Signed-off-by: Laszlo Ersek +--- + hw/i386/acpi-build.c | 13 +++++++++---- + qemu-options.hx | 4 ++++ + 2 files changed, 13 insertions(+), 4 deletions(-) +--- + hw/i386/acpi-build.c | 13 +++++++++---- + qemu-options.hx | 4 ++++ + 2 files changed, 13 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c +index d9433e6..85291f5 100644 +--- a/hw/i386/acpi-build.c ++++ b/hw/i386/acpi-build.c +@@ -511,7 +511,8 @@ static void fadt_setup(AcpiFadtDescriptorRev1 *fadt, AcpiPmInfo *pm) + /* FADT */ + static void + build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo *pm, +- unsigned facs, unsigned dsdt) ++ unsigned facs, unsigned dsdt, ++ const char *oem_id, const char *oem_table_id) + { + AcpiFadtDescriptorRev1 *fadt = acpi_data_push(table_data, sizeof(*fadt)); + +@@ -532,7 +533,7 @@ build_fadt(GArray *table_data, GArray *linker, AcpiPmInfo *pm, + fadt_setup(fadt, pm); + + build_header(linker, table_data, +- (void *)fadt, "FACP", sizeof(*fadt), 1, NULL, NULL); ++ (void *)fadt, "FACP", sizeof(*fadt), 1, oem_id, oem_table_id); + } + + static void +@@ -1065,6 +1066,7 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) + AcpiMcfgInfo mcfg; + PcPciInfo pci; + uint8_t *u; ++ AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; + + acpi_get_cpu_info(&cpu); + acpi_get_pm_info(&pm); +@@ -1072,6 +1074,7 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) + acpi_get_hotplug_info(&misc); + acpi_get_misc_info(&misc); + acpi_get_pci_info(&pci); ++ acpi_get_slic_oem(&slic_oem); + + table_offsets = g_array_new(false, true /* clear */, + sizeof(uint32_t)); +@@ -1095,7 +1098,8 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) + + /* ACPI tables pointed to by RSDT */ + acpi_add_table(table_offsets, tables->table_data); +- build_fadt(tables->table_data, tables->linker, &pm, facs, dsdt); ++ build_fadt(tables->table_data, tables->linker, &pm, facs, dsdt, ++ slic_oem.id, slic_oem.table_id); + + acpi_add_table(table_offsets, tables->table_data); + build_ssdt(tables->table_data, tables->linker, &cpu, &pm, &misc, &pci, +@@ -1127,7 +1131,8 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables) + + /* RSDT is pointed to by RSDP */ + rsdt = tables->table_data->len; +- build_rsdt(tables->table_data, tables->linker, table_offsets, NULL, NULL); ++ build_rsdt(tables->table_data, tables->linker, table_offsets, ++ slic_oem.id, slic_oem.table_id); + + /* RSDP is in FSEG memory, so allocate it separately */ + build_rsdp(tables->rsdp, tables->linker, rsdt); +diff --git a/qemu-options.hx b/qemu-options.hx +index 62c3e06..24ffab6 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -1295,6 +1295,10 @@ ACPI headers (possible overridden by other options). + For data=, only data + portion of the table is used, all header information is specified in the + command line. ++If a SLIC table is supplied to QEMU, then the SLIC's oem_id and oem_table_id ++fields will override the same in the RSDT and the FADT (a.k.a. FACP), in order ++to ensure the field matches required by the Microsoft SLIC spec and the ACPI ++spec. + ETEXI + + DEF("smbios", HAS_ARG, QEMU_OPTION_smbios, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-pc-use-new-api-to-add-builtin-tables.patch b/SOURCES/kvm-pc-use-new-api-to-add-builtin-tables.patch new file mode 100644 index 0000000..58ab198 --- /dev/null +++ b/SOURCES/kvm-pc-use-new-api-to-add-builtin-tables.patch @@ -0,0 +1,47 @@ +From bc610d00154bcd6548c84554d7b647a64834a807 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:05 +0100 +Subject: [PATCH 47/56] pc: use new api to add builtin tables + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-48-git-send-email-mst@redhat.com> +Patchwork-id: 56352 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 47/57] pc: use new api to add builtin tables +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +At this point the only builtin table we have is +the DSDT used for Q35. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 1a4b2666dfbd6fbd9b5623a8e0ed6035cd0854fe) +--- + hw/i386/pc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 4d54c0b..041e537 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -1109,7 +1109,7 @@ void pc_acpi_init(const char *default_dsdt) + opts = qemu_opts_parse(qemu_find_opts("acpi"), arg, 0); + g_assert(opts != NULL); + +- acpi_table_add(opts, &err); ++ acpi_table_add_builtin(opts, &err); + if (err) { + error_report("WARNING: failed to load %s: %s", filename, + error_get_pretty(err)); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pc_piix-disable-CPUID_SEP-for-6-4-0-machine-types-and-below.patch b/SOURCES/kvm-pc_piix-disable-CPUID_SEP-for-6-4-0-machine-types-and-below.patch new file mode 100644 index 0000000..73780dd --- /dev/null +++ b/SOURCES/kvm-pc_piix-disable-CPUID_SEP-for-6-4-0-machine-types-and-below.patch @@ -0,0 +1,41 @@ +From dd1eabf6ba0b2a42b034f0918bf0370307983709 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Wed, 7 Aug 2013 17:28:00 +0200 +Subject: pc_piix: disable CPUID_SEP for 6.4.0 machine types and below + +RH-Author: Bandan Das +Message-id: +Patchwork-id: 53052 +O-Subject: [PATCH RHEL-7 qemu-kvm v2] pc_piix: disable CPUID_SEP for 6.4.0 machine types and below +Bugzilla: 960216 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +Bugzilla : 960216 +Brew : https://brewweb.devel.redhat.com/taskinfo?taskID=6140166 + +With c88f862d9 the SEP flag was disabled for RHEL 6.4 and below +machine types due to a kernel bug. 3af51f9^..8f38a22 enabled it +back again for RHEL 6.5 machine type. This change implements +this rhel 6 compatibility behavior + +Implementation differences : Simply call x86_cpu_compat_set_features, +NULL signifies all applicable CPU models + +v2 : specify correct comment range for rhel 6 commits + +Signed-off-by: Bandan Das + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index bc67633..9e03e52 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -881,6 +881,7 @@ static QEMUMachine pc_machine_rhel650 = { + static void pc_init_rhel640(QEMUMachineInitArgs *args) + { + has_pvpanic = false; ++ x86_cpu_compat_set_features(NULL, FEAT_1_EDX, 0, CPUID_SEP); + pc_init_rhel650(args); + } + diff --git a/SOURCES/kvm-pc_piix-disable-mixer-for-6.4.0-machine-types-and-be.patch b/SOURCES/kvm-pc_piix-disable-mixer-for-6.4.0-machine-types-and-be.patch new file mode 100644 index 0000000..b16f171 --- /dev/null +++ b/SOURCES/kvm-pc_piix-disable-mixer-for-6.4.0-machine-types-and-be.patch @@ -0,0 +1,50 @@ +From adbdd4efafb5aae64def7fb8ae78a565d239039f Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Tue, 15 Oct 2013 17:11:01 +0200 +Subject: [PATCH 24/25] pc_piix: disable mixer for 6.4.0 machine types and below + +RH-Author: Bandan Das +Message-id: <1381857067-9399-5-git-send-email-bsd@redhat.com> +Patchwork-id: 54952 +O-Subject: [PATCH RHEL-7 qemu-kvm v3 4/5] pc_piix: disable mixer for 6.4.0 machine types and below +Bugzilla: 954195 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Markus Armbruster + +Signed-off-by: Bandan Das +--- + hw/i386/pc_piix.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 12 ++++++++++++ + 1 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index af1f602..3f5b913 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -925,6 +925,18 @@ static QEMUMachine pc_machine_rhel650 = { + .driver = "virtio-scsi-pci",\ + .property = "vectors",\ + .value = stringify(2),\ ++ },{\ ++ .driver = "hda-micro",\ ++ .property = "mixer",\ ++ .value = "off",\ ++ },{\ ++ .driver = "hda-duplex",\ ++ .property = "mixer",\ ++ .value = "off",\ ++ },{\ ++ .driver = "hda-output",\ ++ .property = "mixer",\ ++ .value = "off",\ + } + + static void pc_init_rhel640(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-pc_piix-document-gigabyte_align.patch b/SOURCES/kvm-pc_piix-document-gigabyte_align.patch new file mode 100644 index 0000000..00780e9 --- /dev/null +++ b/SOURCES/kvm-pc_piix-document-gigabyte_align.patch @@ -0,0 +1,64 @@ +From 7212bc6c8e9b4a3118e1cc90157c2f123198139e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 16 Jan 2014 10:25:57 +0100 +Subject: [PATCH 02/14] pc_piix: document gigabyte_align + +RH-Author: Gerd Hoffmann +Message-id: <1389867959-12463-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 56745 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/4] pc_piix: document gigabyte_align +Bugzilla: 1026548 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov +RH-Acked-by: Paolo Bonzini + +From: "Michael S. Tsirkin" + +Document the logic behind the below/above 4G split. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit ecdbfceb0f20a3ef784bf522ed7264660aa3d150) + +Conflicts: + hw/i386/pc_piix.c +--- + hw/i386/pc_piix.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 9f1d0b5..12351f9 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -61,6 +61,10 @@ static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + static bool smbios_type1_defaults = true; + static bool has_pci_info; + static bool has_acpi_build = true; ++/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to ++ * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte ++ * pages in the host. ++ */ + static bool gigabyte_align = true; + + /* PC hardware initialisation */ +@@ -102,6 +106,13 @@ static void pc_init1(QEMUMachineInitArgs *args, + kvmclock_create(); + } + ++ /* Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory). ++ * If it doesn't, we need to split it in chunks below and above 4G. ++ * In any case, try to make sure that guest addresses aligned at ++ * 1G boundaries get mapped to host addresses aligned at 1G boundaries. ++ * For old machine types, use whatever split we used historically to avoid ++ * breaking migration. ++ */ + if (args->ram_size >= 0xe0000000) { + ram_addr_t lowmem = gigabyte_align ? 0xc0000000 : 0xe0000000; + above_4g_mem_size = args->ram_size - lowmem; +-- +1.7.1 + diff --git a/SOURCES/kvm-pc_sysfw-Fix-ISA-BIOS-init-for-ridiculously-big-flas.patch b/SOURCES/kvm-pc_sysfw-Fix-ISA-BIOS-init-for-ridiculously-big-flas.patch new file mode 100644 index 0000000..d7badde --- /dev/null +++ b/SOURCES/kvm-pc_sysfw-Fix-ISA-BIOS-init-for-ridiculously-big-flas.patch @@ -0,0 +1,54 @@ +From 502442eae625ab550ec2f3b7cb4086f84b6fdb73 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 18 Sep 2013 09:31:09 +0200 +Subject: [PATCH 25/29] pc_sysfw: Fix ISA BIOS init for ridiculously big flash + +RH-Author: Markus Armbruster +Message-id: <1379496669-22778-9-git-send-email-armbru@redhat.com> +Patchwork-id: 54427 +O-Subject: [PATCH 7.0 qemu-kvm 8/8] pc_sysfw: Fix ISA BIOS init for ridiculously big flash +Bugzilla: 1009328 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +pc_isa_bios_init() suffers integer overflow for flash larger than +INT_MAX. + +Signed-off-by: Markus Armbruster +Acked-by: Laszlo Ersek +Acked-by: Stefano Stabellini +Acked-by: Christian Borntraeger +Message-id: 1375276272-15988-9-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 7f87af39dc786a979e7ebba338d0781e366060ed) +--- + hw/block/pc_sysfw.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pc_sysfw.c | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 2bbedc9..4e3e6b6 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -54,10 +54,7 @@ static void pc_isa_bios_init(MemoryRegion *rom_memory, + flash_size = memory_region_size(flash_mem); + + /* map the last 128KB of the BIOS in ISA space */ +- isa_bios_size = flash_size; +- if (isa_bios_size > (128 * 1024)) { +- isa_bios_size = 128 * 1024; +- } ++ isa_bios_size = MIN(flash_size, 128 * 1024); + isa_bios = g_malloc(sizeof(*isa_bios)); + memory_region_init_ram(isa_bios, "isa-bios", isa_bios_size); + vmstate_register_ram_global(isa_bios); +-- +1.7.1 + diff --git a/SOURCES/kvm-pc_sysfw-allow-flash-pflash-memory-to-be-used-with-K.patch b/SOURCES/kvm-pc_sysfw-allow-flash-pflash-memory-to-be-used-with-K.patch new file mode 100644 index 0000000..f38534f --- /dev/null +++ b/SOURCES/kvm-pc_sysfw-allow-flash-pflash-memory-to-be-used-with-K.patch @@ -0,0 +1,111 @@ +From 18238ae670fb38f5ca7002bc8da7b7aa9d612f68 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:58 +0100 +Subject: [PATCH 08/22] pc_sysfw: allow flash (-pflash) memory to be used with KVM + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-9-git-send-email-lersek@redhat.com> +Patchwork-id: 56621 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 08/18] pc_sysfw: allow flash (-pflash) memory to be used with KVM +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Jordan Justen + +When pc-sysfw.rom_only == 0, flash memory will be +usable with kvm. In order to enable flash memory mode, +a pflash device must be created. (For example, by +using the -pflash command line parameter.) + +Usage of a flash memory device with kvm requires +KVM_CAP_READONLY_MEM, and kvm will abort if +a flash device is used with an older kvm which does +not support this capability. + +If a flash device is not used, then qemu/kvm will +operate in the original rom-mode. + +Signed-off-by: Jordan Justen +Reviewed-by: Paolo Bonzini +Message-id: 1369816047-16384-5-git-send-email-jordan.l.justen@intel.com +Signed-off-by: Anthony Liguori +(cherry picked from commit dafb82e0fc89b631d25f8def649fbfd14fec3db2) +Signed-off-by: Laszlo Ersek +--- + hw/block/pc_sysfw.c | 50 +++++++++++++++++++++++++++++++------------------- + 1 file changed, 31 insertions(+), 19 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pc_sysfw.c | 50 +++++++++++++++++++++++++++++++------------------- + 1 files changed, 31 insertions(+), 19 deletions(-) + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 4d82c70..76932fc 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -217,28 +217,40 @@ void pc_system_firmware_init(MemoryRegion *rom_memory) + + qdev_init_nofail(DEVICE(sysfw_dev)); + +- if (sysfw_dev->rom_only) { +- old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); +- return; +- } +- + pflash_drv = drive_get(IF_PFLASH, 0, 0); + +- /* Currently KVM cannot execute from device memory. +- Use old rom based firmware initialization for KVM. */ +- /* +- * This is a Bad Idea, because it makes enabling/disabling KVM +- * guest-visible. Let's fix it for real in QEMU 1.6. +- */ +- if (kvm_enabled()) { +- if (pflash_drv != NULL) { +- fprintf(stderr, "qemu: pflash cannot be used with kvm enabled\n"); +- exit(1); +- } else { +- sysfw_dev->rom_only = 1; +- old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); +- return; ++ if (pc_sysfw_flash_vs_rom_bug_compatible) { ++ /* ++ * This is a Bad Idea, because it makes enabling/disabling KVM ++ * guest-visible. Do it only in bug-compatibility mode. ++ */ ++ if (kvm_enabled()) { ++ if (pflash_drv != NULL) { ++ fprintf(stderr, "qemu: pflash cannot be used with kvm enabled\n"); ++ exit(1); ++ } else { ++ /* In old pc_sysfw_flash_vs_rom_bug_compatible mode, we assume ++ * that KVM cannot execute from device memory. In this case, we ++ * use old rom based firmware initialization for KVM. But, since ++ * this is different from non-kvm mode, this behavior is ++ * undesirable */ ++ sysfw_dev->rom_only = 1; ++ } + } ++ } else if (pflash_drv == NULL) { ++ /* When a pflash drive is not found, use rom-mode */ ++ sysfw_dev->rom_only = 1; ++ } else if (kvm_enabled() && !kvm_readonly_mem_enabled()) { ++ /* Older KVM cannot execute from device memory. So, flash memory ++ * cannot be used unless the readonly memory kvm capability is present. */ ++ fprintf(stderr, "qemu: pflash with kvm requires KVM readonly memory support\n"); ++ exit(1); ++ } ++ ++ /* If rom-mode is active, use the old pc system rom initialization. */ ++ if (sysfw_dev->rom_only) { ++ old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); ++ return; + } + + /* If a pflash drive is not found, then create one using +-- +1.7.1 + diff --git a/SOURCES/kvm-pc_sysfw-do-not-make-it-a-device-anymore.patch b/SOURCES/kvm-pc_sysfw-do-not-make-it-a-device-anymore.patch new file mode 100644 index 0000000..fb73385 --- /dev/null +++ b/SOURCES/kvm-pc_sysfw-do-not-make-it-a-device-anymore.patch @@ -0,0 +1,613 @@ +From b9968ba04f7d8528d07c49bf523474ac4cb63acd Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 29 Jan 2014 07:06:24 +0100 +Subject: [PATCH 12/22] pc_sysfw: do not make it a device anymore + +Message-id: <1389463208-6278-13-git-send-email-lersek@redhat.com> +Patchwork-id: 56625 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 12/18] pc_sysfw: do not make it a device anymore +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Paolo Bonzini + +Move the code to hw/i386, the sole remaining property is available +as !pci_enabled. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Markus Armbruster +Message-id: 1376069702-22330-4-git-send-email-aliguori@us.ibm.com + +Rebased. + +Signed-off-by: Markus Armbruster +Signed-off-by: Anthony Liguori +(cherry picked from commit 6dd2a5c98a6b1c9189d342bcc3493c9b5dd1217e) + +Conflicts: + hw/block/Makefile.objs + hw/i386/pc_q35.c + include/hw/i386/pc.h + +Signed-off-by: Laszlo Ersek +--- + hw/block/Makefile.objs | 1 - + hw/i386/Makefile.objs | 1 + + include/hw/i386/pc.h | 4 ++- + hw/i386/pc.c | 2 +- + hw/i386/pc_piix.c | 6 +---- + hw/i386/pc_q35.c | 1 + + hw/{block => i386}/pc_sysfw.c | 52 +++----------------------------------- + default-configs/i386-softmmu.mak | 1 - + default-configs/x86_64-softmmu.mak | 1 - + 9 files changed, 10 insertions(+), 59 deletions(-) + rename hw/{block => i386}/pc_sysfw.c (81%) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/i386-softmmu.mak | 1 - + default-configs/x86_64-softmmu.mak | 1 - + hw/block/Makefile.objs | 1 - + hw/block/pc_sysfw.c | 231 ------------------------------------ + hw/i386/Makefile.objs | 1 + + hw/i386/pc.c | 2 +- + hw/i386/pc_piix.c | 6 +- + hw/i386/pc_q35.c | 1 + + hw/i386/pc_sysfw.c | 185 +++++++++++++++++++++++++++++ + include/hw/i386/pc.h | 4 +- + 10 files changed, 192 insertions(+), 241 deletions(-) + delete mode 100644 hw/block/pc_sysfw.c + create mode 100644 hw/i386/pc_sysfw.c + +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index 03deca2..fb84f80 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -34,7 +34,6 @@ CONFIG_PAM=y + CONFIG_PCI_PIIX=y + CONFIG_PCI_HOTPLUG=y + CONFIG_WDT_IB700=y +-CONFIG_PC_SYSFW=y + CONFIG_XEN_I386=$(CONFIG_XEN) + CONFIG_ISA_DEBUG=y + CONFIG_ISA_TESTDEV=y +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index 7b8b05c..a6fdf84 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -27,7 +27,6 @@ CONFIG_PAM=y + CONFIG_PCI_PIIX=y + CONFIG_PCI_HOTPLUG=y + CONFIG_WDT_IB700=y +-CONFIG_PC_SYSFW=y + CONFIG_XEN_I386=$(CONFIG_XEN) + CONFIG_ISA_DEBUG=y + CONFIG_ISA_TESTDEV=y +diff --git a/hw/block/Makefile.objs b/hw/block/Makefile.objs +index e4329a0..94491bf 100644 +--- a/hw/block/Makefile.objs ++++ b/hw/block/Makefile.objs +@@ -7,7 +7,6 @@ common-obj-$(CONFIG_PFLASH_CFI02) += pflash_cfi02.o + common-obj-$(CONFIG_XEN_BACKEND) += xen_disk.o + common-obj-$(CONFIG_ECC) += ecc.o + common-obj-$(CONFIG_ONENAND) += onenand.o +-common-obj-$(CONFIG_PC_SYSFW) += pc_sysfw.o + + obj-$(CONFIG_SH4) += tc58128.o + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +deleted file mode 100644 +index f9c0633..0000000 +--- a/hw/block/pc_sysfw.c ++++ /dev/null +@@ -1,231 +0,0 @@ +-/* +- * QEMU PC System Firmware +- * +- * Copyright (c) 2003-2004 Fabrice Bellard +- * Copyright (c) 2011-2012 Intel Corporation +- * +- * Permission is hereby granted, free of charge, to any person obtaining a copy +- * of this software and associated documentation files (the "Software"), to deal +- * in the Software without restriction, including without limitation the rights +- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +- * copies of the Software, and to permit persons to whom the Software is +- * furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +- * THE SOFTWARE. +- */ +- +-#include "sysemu/blockdev.h" +-#include "qemu/error-report.h" +-#include "hw/sysbus.h" +-#include "hw/hw.h" +-#include "hw/i386/pc.h" +-#include "hw/boards.h" +-#include "hw/loader.h" +-#include "sysemu/sysemu.h" +-#include "hw/block/flash.h" +-#include "sysemu/kvm.h" +- +-#define BIOS_FILENAME "bios.bin" +- +-typedef struct PcSysFwDevice { +- SysBusDevice busdev; +- uint8_t isapc_ram_fw; +-} PcSysFwDevice; +- +-static void pc_isa_bios_init(MemoryRegion *rom_memory, +- MemoryRegion *flash_mem, +- int ram_size) +-{ +- int isa_bios_size; +- MemoryRegion *isa_bios; +- uint64_t flash_size; +- void *flash_ptr, *isa_bios_ptr; +- +- flash_size = memory_region_size(flash_mem); +- +- /* map the last 128KB of the BIOS in ISA space */ +- isa_bios_size = MIN(flash_size, 128 * 1024); +- isa_bios = g_malloc(sizeof(*isa_bios)); +- memory_region_init_ram(isa_bios, "isa-bios", isa_bios_size); +- vmstate_register_ram_global(isa_bios); +- memory_region_add_subregion_overlap(rom_memory, +- 0x100000 - isa_bios_size, +- isa_bios, +- 1); +- +- /* copy ISA rom image from top of flash memory */ +- flash_ptr = memory_region_get_ram_ptr(flash_mem); +- isa_bios_ptr = memory_region_get_ram_ptr(isa_bios); +- memcpy(isa_bios_ptr, +- ((uint8_t*)flash_ptr) + (flash_size - isa_bios_size), +- isa_bios_size); +- +- memory_region_set_readonly(isa_bios, true); +-} +- +-static void pc_system_flash_init(MemoryRegion *rom_memory, +- DriveInfo *pflash_drv) +-{ +- BlockDriverState *bdrv; +- int64_t size; +- hwaddr phys_addr; +- int sector_bits, sector_size; +- pflash_t *system_flash; +- MemoryRegion *flash_mem; +- +- bdrv = pflash_drv->bdrv; +- size = bdrv_getlength(pflash_drv->bdrv); +- sector_bits = 12; +- sector_size = 1 << sector_bits; +- +- if ((size % sector_size) != 0) { +- fprintf(stderr, +- "qemu: PC system firmware (pflash) must be a multiple of 0x%x\n", +- sector_size); +- exit(1); +- } +- +- phys_addr = 0x100000000ULL - size; +- system_flash = pflash_cfi01_register(phys_addr, NULL, "system.flash", size, +- bdrv, sector_size, size >> sector_bits, +- 1, 0x0000, 0x0000, 0x0000, 0x0000, 0); +- flash_mem = pflash_cfi01_get_memory(system_flash); +- +- pc_isa_bios_init(rom_memory, flash_mem, size); +-} +- +-static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) +-{ +- char *filename; +- MemoryRegion *bios, *isa_bios; +- int bios_size, isa_bios_size; +- int ret; +- +- /* BIOS load */ +- if (bios_name == NULL) { +- bios_name = BIOS_FILENAME; +- } +- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); +- if (filename) { +- bios_size = get_image_size(filename); +- } else { +- bios_size = -1; +- } +- if (bios_size <= 0 || +- (bios_size % 65536) != 0) { +- goto bios_error; +- } +- bios = g_malloc(sizeof(*bios)); +- memory_region_init_ram(bios, "pc.bios", bios_size); +- vmstate_register_ram_global(bios); +- if (!isapc_ram_fw) { +- memory_region_set_readonly(bios, true); +- } +- ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1); +- if (ret != 0) { +- bios_error: +- fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name); +- exit(1); +- } +- if (filename) { +- g_free(filename); +- } +- +- /* map the last 128KB of the BIOS in ISA space */ +- isa_bios_size = bios_size; +- if (isa_bios_size > (128 * 1024)) { +- isa_bios_size = 128 * 1024; +- } +- isa_bios = g_malloc(sizeof(*isa_bios)); +- memory_region_init_alias(isa_bios, "isa-bios", bios, +- bios_size - isa_bios_size, isa_bios_size); +- memory_region_add_subregion_overlap(rom_memory, +- 0x100000 - isa_bios_size, +- isa_bios, +- 1); +- if (!isapc_ram_fw) { +- memory_region_set_readonly(isa_bios, true); +- } +- +- /* map all the bios at the top of memory */ +- memory_region_add_subregion(rom_memory, +- (uint32_t)(-bios_size), +- bios); +-} +- +-void pc_system_firmware_init(MemoryRegion *rom_memory) +-{ +- DriveInfo *pflash_drv; +- PcSysFwDevice *sysfw_dev; +- +- /* +- * TODO This device exists only so that users can switch between +- * use of flash and ROM for the BIOS. The ability to switch was +- * created because flash doesn't work with KVM. Once it does, we +- * should drop this device. +- */ +- sysfw_dev = (PcSysFwDevice*) qdev_create(NULL, "pc-sysfw"); +- +- qdev_init_nofail(DEVICE(sysfw_dev)); +- +- pflash_drv = drive_get(IF_PFLASH, 0, 0); +- +- if (sysfw_dev->isapc_ram_fw || pflash_drv == NULL) { +- /* When a pflash drive is not found, use rom-mode */ +- old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); +- return; +- } +- +- if (kvm_enabled() && !kvm_readonly_mem_enabled()) { +- /* Older KVM cannot execute from device memory. So, flash memory +- * cannot be used unless the readonly memory kvm capability is present. */ +- fprintf(stderr, "qemu: pflash with kvm requires KVM readonly memory support\n"); +- exit(1); +- } +- +- pc_system_flash_init(rom_memory, pflash_drv); +-} +- +-static Property pcsysfw_properties[] = { +- DEFINE_PROP_UINT8("isapc_ram_fw", PcSysFwDevice, isapc_ram_fw, 0), +- DEFINE_PROP_END_OF_LIST(), +-}; +- +-static int pcsysfw_init(DeviceState *dev) +-{ +- return 0; +-} +- +-static void pcsysfw_class_init (ObjectClass *klass, void *data) +-{ +- DeviceClass *dc = DEVICE_CLASS (klass); +- +- set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->desc = "PC System Firmware"; +- dc->init = pcsysfw_init; +- dc->props = pcsysfw_properties; +-} +- +-static const TypeInfo pcsysfw_info = { +- .name = "pc-sysfw", +- .parent = TYPE_SYS_BUS_DEVICE, +- .instance_size = sizeof (PcSysFwDevice), +- .class_init = pcsysfw_class_init, +-}; +- +-static void pcsysfw_register (void) +-{ +- type_register_static (&pcsysfw_info); +-} +- +-type_init (pcsysfw_register); +- +diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs +index 6a17cf8..09ac433 100644 +--- a/hw/i386/Makefile.objs ++++ b/hw/i386/Makefile.objs +@@ -1,6 +1,7 @@ + obj-$(CONFIG_KVM) += kvm/ + obj-y += multiboot.o smbios.o + obj-y += pc.o pc_piix.o pc_q35.o ++obj-y += pc_sysfw.o + obj-$(CONFIG_XEN) += xen_domainbuild.o xen_machine_pv.o + + obj-y += kvmvapic.o +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 320f668..a0f0b24 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -1162,7 +1162,7 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, + + + /* Initialize PC system firmware */ +- pc_system_firmware_init(rom_memory); ++ pc_system_firmware_init(rom_memory, guest_info->isapc_ram_fw); + + option_rom_mr = g_malloc(sizeof(*option_rom_mr)); + memory_region_init_ram(option_rom_mr, "pc.rom", PC_ROM_SIZE); +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 6f273db..641f3d9 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -141,6 +141,7 @@ static void pc_init1(QEMUMachineInitArgs *args, + guest_info->has_acpi_build = has_acpi_build; + + guest_info->has_pci_info = has_pci_info; ++ guest_info->isapc_ram_fw = !pci_enabled; + + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { +@@ -705,11 +706,6 @@ static QEMUMachine isapc_machine = { + .init = pc_init_isa, + .max_cpus = 1, + .compat_props = (GlobalProperty[]) { +- { +- .driver = "pc-sysfw", +- .property = "isapc_ram_fw", +- .value = stringify(1), +- }, + { /* end of list */ } + }, + DEFAULT_MACHINE_OPTIONS, +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 7e46799..1ac46be 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -114,6 +114,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); + guest_info->has_pci_info = has_pci_info; + guest_info->has_acpi_build = has_acpi_build; ++ guest_info->isapc_ram_fw = false; + + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { +diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c +new file mode 100644 +index 0000000..eb56dee +--- /dev/null ++++ b/hw/i386/pc_sysfw.c +@@ -0,0 +1,185 @@ ++/* ++ * QEMU PC System Firmware ++ * ++ * Copyright (c) 2003-2004 Fabrice Bellard ++ * Copyright (c) 2011-2012 Intel Corporation ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#include "sysemu/blockdev.h" ++#include "qemu/error-report.h" ++#include "hw/sysbus.h" ++#include "hw/hw.h" ++#include "hw/i386/pc.h" ++#include "hw/boards.h" ++#include "hw/loader.h" ++#include "sysemu/sysemu.h" ++#include "hw/block/flash.h" ++#include "sysemu/kvm.h" ++ ++#define BIOS_FILENAME "bios.bin" ++ ++typedef struct PcSysFwDevice { ++ SysBusDevice busdev; ++ uint8_t isapc_ram_fw; ++} PcSysFwDevice; ++ ++static void pc_isa_bios_init(MemoryRegion *rom_memory, ++ MemoryRegion *flash_mem, ++ int ram_size) ++{ ++ int isa_bios_size; ++ MemoryRegion *isa_bios; ++ uint64_t flash_size; ++ void *flash_ptr, *isa_bios_ptr; ++ ++ flash_size = memory_region_size(flash_mem); ++ ++ /* map the last 128KB of the BIOS in ISA space */ ++ isa_bios_size = MIN(flash_size, 128 * 1024); ++ isa_bios = g_malloc(sizeof(*isa_bios)); ++ memory_region_init_ram(isa_bios, "isa-bios", isa_bios_size); ++ vmstate_register_ram_global(isa_bios); ++ memory_region_add_subregion_overlap(rom_memory, ++ 0x100000 - isa_bios_size, ++ isa_bios, ++ 1); ++ ++ /* copy ISA rom image from top of flash memory */ ++ flash_ptr = memory_region_get_ram_ptr(flash_mem); ++ isa_bios_ptr = memory_region_get_ram_ptr(isa_bios); ++ memcpy(isa_bios_ptr, ++ ((uint8_t*)flash_ptr) + (flash_size - isa_bios_size), ++ isa_bios_size); ++ ++ memory_region_set_readonly(isa_bios, true); ++} ++ ++static void pc_system_flash_init(MemoryRegion *rom_memory, ++ DriveInfo *pflash_drv) ++{ ++ BlockDriverState *bdrv; ++ int64_t size; ++ hwaddr phys_addr; ++ int sector_bits, sector_size; ++ pflash_t *system_flash; ++ MemoryRegion *flash_mem; ++ ++ bdrv = pflash_drv->bdrv; ++ size = bdrv_getlength(pflash_drv->bdrv); ++ sector_bits = 12; ++ sector_size = 1 << sector_bits; ++ ++ if ((size % sector_size) != 0) { ++ fprintf(stderr, ++ "qemu: PC system firmware (pflash) must be a multiple of 0x%x\n", ++ sector_size); ++ exit(1); ++ } ++ ++ phys_addr = 0x100000000ULL - size; ++ system_flash = pflash_cfi01_register(phys_addr, NULL, "system.flash", size, ++ bdrv, sector_size, size >> sector_bits, ++ 1, 0x0000, 0x0000, 0x0000, 0x0000, 0); ++ flash_mem = pflash_cfi01_get_memory(system_flash); ++ ++ pc_isa_bios_init(rom_memory, flash_mem, size); ++} ++ ++static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) ++{ ++ char *filename; ++ MemoryRegion *bios, *isa_bios; ++ int bios_size, isa_bios_size; ++ int ret; ++ ++ /* BIOS load */ ++ if (bios_name == NULL) { ++ bios_name = BIOS_FILENAME; ++ } ++ filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); ++ if (filename) { ++ bios_size = get_image_size(filename); ++ } else { ++ bios_size = -1; ++ } ++ if (bios_size <= 0 || ++ (bios_size % 65536) != 0) { ++ goto bios_error; ++ } ++ bios = g_malloc(sizeof(*bios)); ++ memory_region_init_ram(bios, "pc.bios", bios_size); ++ vmstate_register_ram_global(bios); ++ if (!isapc_ram_fw) { ++ memory_region_set_readonly(bios, true); ++ } ++ ret = rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1); ++ if (ret != 0) { ++ bios_error: ++ fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name); ++ exit(1); ++ } ++ if (filename) { ++ g_free(filename); ++ } ++ ++ /* map the last 128KB of the BIOS in ISA space */ ++ isa_bios_size = bios_size; ++ if (isa_bios_size > (128 * 1024)) { ++ isa_bios_size = 128 * 1024; ++ } ++ isa_bios = g_malloc(sizeof(*isa_bios)); ++ memory_region_init_alias(isa_bios, "isa-bios", bios, ++ bios_size - isa_bios_size, isa_bios_size); ++ memory_region_add_subregion_overlap(rom_memory, ++ 0x100000 - isa_bios_size, ++ isa_bios, ++ 1); ++ if (!isapc_ram_fw) { ++ memory_region_set_readonly(isa_bios, true); ++ } ++ ++ /* map all the bios at the top of memory */ ++ memory_region_add_subregion(rom_memory, ++ (uint32_t)(-bios_size), ++ bios); ++} ++ ++void pc_system_firmware_init(MemoryRegion *rom_memory, bool isapc_ram_fw) ++{ ++ DriveInfo *pflash_drv; ++ ++ pflash_drv = drive_get(IF_PFLASH, 0, 0); ++ ++ if (isapc_ram_fw || pflash_drv == NULL) { ++ /* When a pflash drive is not found, use rom-mode */ ++ old_pc_system_rom_init(rom_memory, isapc_ram_fw); ++ return; ++ } ++ ++ if (kvm_enabled() && !kvm_readonly_mem_enabled()) { ++ /* Older KVM cannot execute from device memory. So, flash memory ++ * cannot be used unless the readonly memory kvm capability is present. */ ++ fprintf(stderr, "qemu: pflash with kvm requires KVM readonly memory support\n"); ++ exit(1); ++ } ++ ++ pc_system_flash_init(rom_memory, pflash_drv); ++} +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 5c69abe..413358f 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -34,6 +34,7 @@ typedef struct PcPciInfo { + + struct PcGuestInfo { + bool has_pci_info; ++ bool isapc_ram_fw; + hwaddr ram_size; + unsigned apic_id_limit; + bool apic_xrupt_override; +@@ -228,7 +229,8 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd) + } + + /* pc_sysfw.c */ +-void pc_system_firmware_init(MemoryRegion *rom_memory); ++void pc_system_firmware_init(MemoryRegion *rom_memory, ++ bool isapc_ram_fw); + + /* pvpanic.c */ + void pvpanic_init(ISABus *bus); +-- +1.7.1 + diff --git a/SOURCES/kvm-pc_sysfw-prevent-pflash-and-or-mis-sized-firmware-fo.patch b/SOURCES/kvm-pc_sysfw-prevent-pflash-and-or-mis-sized-firmware-fo.patch new file mode 100644 index 0000000..90e45f2 --- /dev/null +++ b/SOURCES/kvm-pc_sysfw-prevent-pflash-and-or-mis-sized-firmware-fo.patch @@ -0,0 +1,68 @@ +From c3f813d2f53fb8f9e2dc7e2b3c6b17d7fadb2de5 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 27 Jan 2015 17:48:11 +0100 +Subject: [PATCH 08/16] pc_sysfw: prevent pflash and/or mis-sized firmware for + rhel6.x.0 machtypes + +Message-id: <1422380891-11054-3-git-send-email-lersek@redhat.com> +Patchwork-id: 63585 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] pc_sysfw: prevent pflash and/or mis-sized firmware for rhel6.x.0 machtypes +Bugzilla: 1176283 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Markus Armbruster + +QE tried to boot OVMF on a rhel6.x.0 machine type. The shadow_bios() +migration hack that is in effect for those machine types is not compatible +with the OVMF image. An assert() in shadow_bios() catches it, but -- given +that OVMF has never been intended for rhel6.x.0 machine types -- QE has +rather requested us to deny such startups cleanly. + +The first hunk prevents "-M rhel6.x.0 -bios ..." style invocations where +the BIOS image is not 128 KB in size. This was suggested by Paolo and it +prevents the case when someone passes an OVMF binary via -bios. + +The second hunk prevents "-M rhel6.x.0 -pflash ...", since that +configuration (for boot firmware purposes or otherwise) was never +supported. + +Downstream only. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_sysfw.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c +index 6f5ecde..2f26ff5 100644 +--- a/hw/i386/pc_sysfw.c ++++ b/hw/i386/pc_sysfw.c +@@ -191,6 +191,11 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) + (bios_size % 65536) != 0) { + goto bios_error; + } ++ if (shadow_bios_after_incoming && bios_size != 128 * 1024) { ++ error_report("machine %s only supports a 128KB BIOS image", ++ current_machine->name); ++ exit(1); ++ } + bios = g_malloc(sizeof(*bios)); + memory_region_init_ram(bios, "pc.bios", bios_size); + vmstate_register_ram_global(bios); +@@ -241,6 +246,12 @@ void pc_system_firmware_init(MemoryRegion *rom_memory, bool isapc_ram_fw) + return; + } + ++ if (shadow_bios_after_incoming) { ++ error_report("flash-based firmware is not supported by machine %s", ++ current_machine->name); ++ exit(1); ++ } ++ + if (kvm_enabled() && !kvm_readonly_mem_enabled()) { + /* Older KVM cannot execute from device memory. So, flash memory + * cannot be used unless the readonly memory kvm capability is present. */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-pc_sysfw-remove-the-rom_only-property.patch b/SOURCES/kvm-pc_sysfw-remove-the-rom_only-property.patch new file mode 100644 index 0000000..601041f --- /dev/null +++ b/SOURCES/kvm-pc_sysfw-remove-the-rom_only-property.patch @@ -0,0 +1,167 @@ +From 5de16aa3c3b28a7a90426e38b06bda827b3c822f Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:01 +0100 +Subject: [PATCH 11/22] pc_sysfw: remove the rom_only property + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-12-git-send-email-lersek@redhat.com> +Patchwork-id: 56623 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 11/18] pc_sysfw: remove the rom_only property +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Paolo Bonzini + +With the new semantics of pc_sysfw (no -pflash implies "old-style" ROM setup, +-pflash implies "new-style" ROM setup), there is no need anymore for a compat +property. Old machines simply will never use -pflash, and thus will always +use old-style setup. + +Signed-off-by: Paolo Bonzini +Message-id: 1376069702-22330-3-git-send-email-aliguori@us.ibm.com +Signed-off-by: Anthony Liguori +(cherry picked from commit a904410af5f1ed6ff031e9e4119ca2f5d99647ce) +Signed-off-by: Laszlo Ersek +--- + hw/block/pc_sysfw.c | 64 ++++++----------------------------------------------- + hw/i386/pc_piix.c | 9 -------- + 2 files changed, 7 insertions(+), 66 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pc_sysfw.c | 64 +++++--------------------------------------------- + hw/i386/pc_piix.c | 9 ------- + 2 files changed, 7 insertions(+), 66 deletions(-) + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 38261b1..f9c0633 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -38,7 +38,6 @@ + + typedef struct PcSysFwDevice { + SysBusDevice busdev; +- uint8_t rom_only; + uint8_t isapc_ram_fw; + } PcSysFwDevice; + +@@ -73,39 +72,6 @@ static void pc_isa_bios_init(MemoryRegion *rom_memory, + memory_region_set_readonly(isa_bios, true); + } + +-static void pc_fw_add_pflash_drv(void) +-{ +- QemuOpts *opts; +- QEMUMachine *machine; +- char *filename; +- +- if (bios_name == NULL) { +- bios_name = BIOS_FILENAME; +- } +- filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); +- if (!filename) { +- error_report("Can't open BIOS image %s", bios_name); +- exit(1); +- } +- +- opts = drive_add(IF_PFLASH, -1, filename, "readonly=on"); +- +- g_free(filename); +- +- if (opts == NULL) { +- return; +- } +- +- machine = find_default_machine(); +- if (machine == NULL) { +- return; +- } +- +- if (!drive_init(opts, machine->block_default_type)) { +- qemu_opts_del(opts); +- } +-} +- + static void pc_system_flash_init(MemoryRegion *rom_memory, + DriveInfo *pflash_drv) + { +@@ -213,40 +179,24 @@ void pc_system_firmware_init(MemoryRegion *rom_memory) + + pflash_drv = drive_get(IF_PFLASH, 0, 0); + +- if (pflash_drv == NULL) { ++ if (sysfw_dev->isapc_ram_fw || pflash_drv == NULL) { + /* When a pflash drive is not found, use rom-mode */ +- sysfw_dev->rom_only = 1; +- } else if (kvm_enabled() && !kvm_readonly_mem_enabled()) { +- /* Older KVM cannot execute from device memory. So, flash memory +- * cannot be used unless the readonly memory kvm capability is present. */ +- fprintf(stderr, "qemu: pflash with kvm requires KVM readonly memory support\n"); +- exit(1); +- } +- +- /* If rom-mode is active, use the old pc system rom initialization. */ +- if (sysfw_dev->rom_only) { + old_pc_system_rom_init(rom_memory, sysfw_dev->isapc_ram_fw); + return; + } + +- /* If a pflash drive is not found, then create one using +- the bios filename. */ +- if (pflash_drv == NULL) { +- pc_fw_add_pflash_drv(); +- pflash_drv = drive_get(IF_PFLASH, 0, 0); +- } +- +- if (pflash_drv != NULL) { +- pc_system_flash_init(rom_memory, pflash_drv); +- } else { +- fprintf(stderr, "qemu: PC system firmware (pflash) not available\n"); ++ if (kvm_enabled() && !kvm_readonly_mem_enabled()) { ++ /* Older KVM cannot execute from device memory. So, flash memory ++ * cannot be used unless the readonly memory kvm capability is present. */ ++ fprintf(stderr, "qemu: pflash with kvm requires KVM readonly memory support\n"); + exit(1); + } ++ ++ pc_system_flash_init(rom_memory, pflash_drv); + } + + static Property pcsysfw_properties[] = { + DEFINE_PROP_UINT8("isapc_ram_fw", PcSysFwDevice, isapc_ram_fw, 0), +- DEFINE_PROP_UINT8("rom_only", PcSysFwDevice, rom_only, 0), + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 0a8a4e5..6f273db 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -471,10 +471,6 @@ static QEMUMachine pc_machine_v1_1 = { + #define PC_COMPAT_1_0 \ + PC_COMPAT_1_1,\ + {\ +- .driver = "pc-sysfw",\ +- .property = "rom_only",\ +- .value = stringify(1),\ +- }, {\ + .driver = TYPE_ISA_FDC,\ + .property = "check_media_rate",\ + .value = "off",\ +@@ -711,11 +707,6 @@ static QEMUMachine isapc_machine = { + .compat_props = (GlobalProperty[]) { + { + .driver = "pc-sysfw", +- .property = "rom_only", +- .value = stringify(1), +- }, +- { +- .driver = "pc-sysfw", + .property = "isapc_ram_fw", + .value = stringify(1), + }, +-- +1.7.1 + diff --git a/SOURCES/kvm-pci-add-VMSTATE_MSIX.patch b/SOURCES/kvm-pci-add-VMSTATE_MSIX.patch new file mode 100644 index 0000000..64d5f58 --- /dev/null +++ b/SOURCES/kvm-pci-add-VMSTATE_MSIX.patch @@ -0,0 +1,95 @@ +From 3420a9a7d1765a77f5a03e38c0ec6b4b69419e6a Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 7 Aug 2013 09:22:44 +0200 +Subject: [PATCH 13/28] pci: add VMSTATE_MSIX + +RH-Author: Gerd Hoffmann +Message-id: <1375867368-18979-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 53038 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/5] pci: add VMSTATE_MSIX +Bugzilla: 838170 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +Using a trick cut+pasted from vmstate_scsi_device +to wind up msix_save and msix_load. + +Signed-off-by: Gerd Hoffmann +Acked-by: Michael S. Tsirkin +(cherry picked from commit 340b50c759d6b4ef33e514c40afcc799c0d7df7a) +--- + hw/pci/msix.c | 33 +++++++++++++++++++++++++++++++++ + include/hw/pci/msix.h | 11 +++++++++++ + 2 files changed, 44 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/pci/msix.c | 33 +++++++++++++++++++++++++++++++++ + include/hw/pci/msix.h | 11 +++++++++++ + 2 files changed, 44 insertions(+), 0 deletions(-) + +diff --git a/hw/pci/msix.c b/hw/pci/msix.c +index e231a0d..6da75ec 100644 +--- a/hw/pci/msix.c ++++ b/hw/pci/msix.c +@@ -569,3 +569,36 @@ void msix_unset_vector_notifiers(PCIDevice *dev) + dev->msix_vector_release_notifier = NULL; + dev->msix_vector_poll_notifier = NULL; + } ++ ++static void put_msix_state(QEMUFile *f, void *pv, size_t size) ++{ ++ msix_save(pv, f); ++} ++ ++static int get_msix_state(QEMUFile *f, void *pv, size_t size) ++{ ++ msix_load(pv, f); ++ return 0; ++} ++ ++static VMStateInfo vmstate_info_msix = { ++ .name = "msix state", ++ .get = get_msix_state, ++ .put = put_msix_state, ++}; ++ ++const VMStateDescription vmstate_msix = { ++ .name = "msix", ++ .fields = (VMStateField[]) { ++ { ++ .name = "msix", ++ .version_id = 0, ++ .field_exists = NULL, ++ .size = 0, /* ouch */ ++ .info = &vmstate_info_msix, ++ .flags = VMS_SINGLE, ++ .offset = 0, ++ }, ++ VMSTATE_END_OF_LIST() ++ } ++}; +diff --git a/include/hw/pci/msix.h b/include/hw/pci/msix.h +index e648410..954d82b 100644 +--- a/include/hw/pci/msix.h ++++ b/include/hw/pci/msix.h +@@ -43,4 +43,15 @@ int msix_set_vector_notifiers(PCIDevice *dev, + MSIVectorReleaseNotifier release_notifier, + MSIVectorPollNotifier poll_notifier); + void msix_unset_vector_notifiers(PCIDevice *dev); ++ ++extern const VMStateDescription vmstate_msix; ++ ++#define VMSTATE_MSIX(_field, _state) { \ ++ .name = (stringify(_field)), \ ++ .size = sizeof(PCIDevice), \ ++ .vmsd = &vmstate_msix, \ ++ .flags = VMS_STRUCT, \ ++ .offset = vmstate_offset_value(_state, _field, PCIDevice), \ ++} ++ + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-pci-add-helper-to-retrieve-the-64-bit-range.patch b/SOURCES/kvm-pci-add-helper-to-retrieve-the-64-bit-range.patch new file mode 100644 index 0000000..429d4af --- /dev/null +++ b/SOURCES/kvm-pci-add-helper-to-retrieve-the-64-bit-range.patch @@ -0,0 +1,109 @@ +From 1e726d2e4db2132cb5f0ee985745c87174e6f599 Mon Sep 17 00:00:00 2001 +Message-Id: <1e726d2e4db2132cb5f0ee985745c87174e6f599.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:05 +0100 +Subject: [PATCH 07/56] pci: add helper to retrieve the 64-bit range + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-8-git-send-email-mst@redhat.com> +Patchwork-id: 56312 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 07/57] pci: add helper to retrieve the 64-bit range +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 438640695723f33be6d0081ac1e690aa40975c39) + +Conflicts: + include/hw/pci/pci.h +--- + include/hw/pci/pci.h | 1 + + hw/pci/pci.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 51 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/pci/pci.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + include/hw/pci/pci.h | 1 + + 2 files changed, 51 insertions(+) + +diff --git a/hw/pci/pci.c b/hw/pci/pci.c +index 26995d7..d550851 100644 +--- a/hw/pci/pci.c ++++ b/hw/pci/pci.c +@@ -2244,6 +2244,56 @@ void pci_setup_iommu(PCIBus *bus, PCIDMAContextFunc fn, void *opaque) + bus->dma_context_opaque = opaque; + } + ++static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) ++{ ++ Range *range = opaque; ++ PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); ++ uint16_t cmd = pci_get_word(dev->config + PCI_COMMAND); ++ int r; ++ ++ if (!(cmd & PCI_COMMAND_MEMORY)) { ++ return; ++ } ++ ++ if (pc->is_bridge) { ++ pcibus_t base = pci_bridge_get_base(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); ++ pcibus_t limit = pci_bridge_get_limit(dev, PCI_BASE_ADDRESS_MEM_PREFETCH); ++ ++ base = MAX(base, 0x1ULL << 32); ++ ++ if (limit >= base) { ++ Range pref_range; ++ pref_range.begin = base; ++ pref_range.end = limit + 1; ++ range_extend(range, &pref_range); ++ } ++ } ++ for (r = 0; r < PCI_NUM_REGIONS; ++r) { ++ PCIIORegion *region = &dev->io_regions[r]; ++ Range region_range; ++ ++ if (!region->size || ++ (region->type & PCI_BASE_ADDRESS_SPACE_IO) || ++ !(region->type & PCI_BASE_ADDRESS_MEM_TYPE_64)) { ++ continue; ++ } ++ region_range.begin = pci_get_quad(dev->config + pci_bar(dev, r)); ++ region_range.end = region_range.begin + region->size; ++ ++ region_range.begin = MAX(region_range.begin, 0x1ULL << 32); ++ ++ if (region_range.end - 1 >= region_range.begin) { ++ range_extend(range, ®ion_range); ++ } ++ } ++} ++ ++void pci_bus_get_w64_range(PCIBus *bus, Range *range) ++{ ++ range->begin = range->end = 0; ++ pci_for_each_device_under_bus(bus, pci_dev_get_w64, range); ++} ++ + static const TypeInfo pci_device_type_info = { + .name = TYPE_PCI_DEVICE, + .parent = TYPE_DEVICE, +diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h +index 8d075ab..e7760dd 100644 +--- a/include/hw/pci/pci.h ++++ b/include/hw/pci/pci.h +@@ -395,6 +395,7 @@ int pci_find_domain(const PCIBus *bus); + PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn); + int pci_qdev_find_device(const char *id, PCIDevice **pdev); + PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr); ++void pci_bus_get_w64_range(PCIBus *bus, Range *range); + + int pci_read_devaddr(Monitor *mon, const char *addr, int *domp, int *busp, + unsigned *slotp); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pci-assign-Add-MSI-affinity-support.patch b/SOURCES/kvm-pci-assign-Add-MSI-affinity-support.patch new file mode 100644 index 0000000..84dcca2 --- /dev/null +++ b/SOURCES/kvm-pci-assign-Add-MSI-affinity-support.patch @@ -0,0 +1,72 @@ +From 7596bd04d37a608d06cf7a2f589a67d332a21dfb Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 1 Nov 2013 19:50:26 +0100 +Subject: [PATCH 01/25] pci-assign: Add MSI affinity support + +RH-Author: Alex Williamson +Message-id: <20131101195026.25461.63530.stgit@bling.home> +Patchwork-id: 55233 +O-Subject: [RHEL7 qemu-kvm PATCH 1/3] pci-assign: Add MSI affinity support +Bugzilla: 1025877 +RH-Acked-by: Bandan Das +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Orit Wasserman + +Bugzilla: 1025877 +Upstream commit: 3459f01b2d9612070ec23221a4ccb60a41b775ae + +To support guest MSI affinity changes update the MSI message any time +the guest writes to the address or data fields. + +Signed-off-by: Alex Williamson +Acked-by: Michael S. Tsirkin +Message-id: 20130513201840.5430.86331.stgit@bling.home +Signed-off-by: Anthony Liguori +--- + hw/i386/kvm/pci-assign.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/pci-assign.c | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c +index 1684f8c..221a8f7 100644 +--- a/hw/i386/kvm/pci-assign.c ++++ b/hw/i386/kvm/pci-assign.c +@@ -1026,6 +1026,21 @@ static void assigned_dev_update_msi(PCIDevice *pci_dev) + } + } + ++static void assigned_dev_update_msi_msg(PCIDevice *pci_dev) ++{ ++ AssignedDevice *assigned_dev = DO_UPCAST(AssignedDevice, dev, pci_dev); ++ uint8_t ctrl_byte = pci_get_byte(pci_dev->config + pci_dev->msi_cap + ++ PCI_MSI_FLAGS); ++ ++ if (assigned_dev->assigned_irq_type != ASSIGNED_IRQ_MSI || ++ !(ctrl_byte & PCI_MSI_FLAGS_ENABLE)) { ++ return; ++ } ++ ++ kvm_irqchip_update_msi_route(kvm_state, assigned_dev->msi_virq[0], ++ msi_get_message(pci_dev, 0)); ++} ++ + static bool assigned_dev_msix_masked(MSIXTableEntry *entry) + { + return (entry->ctrl & cpu_to_le32(0x1)) != 0; +@@ -1201,6 +1216,9 @@ static void assigned_dev_pci_write_config(PCIDevice *pci_dev, uint32_t address, + if (range_covers_byte(address, len, + pci_dev->msi_cap + PCI_MSI_FLAGS)) { + assigned_dev_update_msi(pci_dev); ++ } else if (ranges_overlap(address, len, /* 32bit MSI only */ ++ pci_dev->msi_cap + PCI_MSI_ADDRESS_LO, 6)) { ++ assigned_dev_update_msi_msg(pci_dev); + } + } + if (assigned_dev->cap.available & ASSIGNED_DEVICE_CAP_MSIX) { +-- +1.7.1 + diff --git a/SOURCES/kvm-pci-assign-cap-number-of-devices-that-can-be-assigne.patch b/SOURCES/kvm-pci-assign-cap-number-of-devices-that-can-be-assigne.patch new file mode 100644 index 0000000..59b75c4 --- /dev/null +++ b/SOURCES/kvm-pci-assign-cap-number-of-devices-that-can-be-assigne.patch @@ -0,0 +1,95 @@ +From 53d1ae3ef3ed6959596813e75678fcb4f2aa30c0 Mon Sep 17 00:00:00 2001 +Message-Id: <53d1ae3ef3ed6959596813e75678fcb4f2aa30c0.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Bandan Das +Date: Tue, 3 Dec 2013 20:05:12 +0100 +Subject: [PATCH 43/46] pci-assign: cap number of devices that can be assigned + +RH-Author: Bandan Das +Message-id: <1386101113-31560-2-git-send-email-bsd@redhat.com> +Patchwork-id: 55983 +O-Subject: [PATCH RHEL7 qemu-kvm v2 1/2] pci-assign: cap number of devices that can be assigned +Bugzilla: 678368 +RH-Acked-by: Alex Williamson +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Michael S. Tsirkin + +Legacy device assignment is not supported for RHEL7, nevertheless, +it makes sense to enforce the limit here was well in case we need +to support it in the future. Note that 8 is the limit enforced on +RHEL 6, RHEL 5 too has a static limit of 8 assigned devices. + +Signed-off-by: Bandan Das +--- + hw/i386/kvm/pci-assign.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/kvm/pci-assign.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c +index 7060605..4a05c0f 100644 +--- a/hw/i386/kvm/pci-assign.c ++++ b/hw/i386/kvm/pci-assign.c +@@ -139,8 +139,12 @@ typedef struct AssignedDevice { + MemoryRegion mmio; + char *configfd_name; + int32_t bootindex; ++ QLIST_ENTRY(AssignedDevice) next; + } AssignedDevice; + ++#define MAX_DEV_ASSIGN_CMDLINE 8 ++static QLIST_HEAD(, AssignedDevice) devs = QLIST_HEAD_INITIALIZER(devs); ++ + static void assigned_dev_update_irq_routing(PCIDevice *dev); + + static void assigned_dev_load_option_rom(AssignedDevice *dev); +@@ -1733,14 +1737,25 @@ static void reset_assigned_device(DeviceState *dev) + static int assigned_initfn(struct PCIDevice *pci_dev) + { + AssignedDevice *dev = DO_UPCAST(AssignedDevice, dev, pci_dev); ++ AssignedDevice *adev; + uint8_t e_intx; +- int r; ++ int r, i = 0; + + if (!kvm_enabled()) { + error_report("pci-assign: error: requires KVM support"); + return -1; + } + ++ QLIST_FOREACH(adev, &devs, next) { ++ i++; ++ } ++ ++ if (i >= MAX_DEV_ASSIGN_CMDLINE) { ++ error_report("pci-assign: Maximum supported assigned devices (%d) " ++ "already attached\n", MAX_DEV_ASSIGN_CMDLINE); ++ return -1; ++ } ++ + if (!dev->host.domain && !dev->host.bus && !dev->host.slot && + !dev->host.function) { + error_report("pci-assign: error: no host device specified"); +@@ -1810,6 +1825,7 @@ static int assigned_initfn(struct PCIDevice *pci_dev) + goto assigned_out; + } + ++ QLIST_INSERT_HEAD(&devs, dev, next); + assigned_dev_load_option_rom(dev); + + add_boot_device_path(dev->bootindex, &pci_dev->qdev, NULL); +@@ -1827,6 +1843,7 @@ static void assigned_exitfn(struct PCIDevice *pci_dev) + { + AssignedDevice *dev = DO_UPCAST(AssignedDevice, dev, pci_dev); + ++ QLIST_REMOVE(dev, next); + deassign_device(dev); + free_assigned_device(dev); + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pci-assign-remove-the-duplicate-function-name-in-deb.patch b/SOURCES/kvm-pci-assign-remove-the-duplicate-function-name-in-deb.patch new file mode 100644 index 0000000..eee59d8 --- /dev/null +++ b/SOURCES/kvm-pci-assign-remove-the-duplicate-function-name-in-deb.patch @@ -0,0 +1,94 @@ +From ced48a3d562d22bdaaaf74d3238d69f4577f0fa8 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 1 Nov 2013 19:50:38 +0100 +Subject: [PATCH 03/25] pci-assign: remove the duplicate function name in debug message + +RH-Author: Alex Williamson +Message-id: <20131101195038.25461.59923.stgit@bling.home> +Patchwork-id: 55235 +O-Subject: [RHEL7 qemu-kvm PATCH 3/3] pci-assign: remove the duplicate function name in debug message +Bugzilla: 1025877 +RH-Acked-by: Bandan Das +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Orit Wasserman + +From: Wanlong Gao + +Bugzilla: 1025877 +Upstream commit: bd50cbaa0f34e47c5b82eba1cd1e88143018fa19 + +While DEBUG() already includes the function name. + +Signed-off-by: Wanlong Gao +Acked-by: Alex Williamson +Signed-off-by: Paolo Bonzini +--- + hw/i386/kvm/pci-assign.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/pci-assign.c | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c +index a5885b4..7060605 100644 +--- a/hw/i386/kvm/pci-assign.c ++++ b/hw/i386/kvm/pci-assign.c +@@ -226,7 +226,7 @@ static uint32_t slow_bar_readb(void *opaque, hwaddr addr) + uint32_t r; + + r = *in; +- DEBUG("slow_bar_readl addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, r); ++ DEBUG("addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, r); + + return r; + } +@@ -238,7 +238,7 @@ static uint32_t slow_bar_readw(void *opaque, hwaddr addr) + uint32_t r; + + r = *in; +- DEBUG("slow_bar_readl addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, r); ++ DEBUG("addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, r); + + return r; + } +@@ -250,7 +250,7 @@ static uint32_t slow_bar_readl(void *opaque, hwaddr addr) + uint32_t r; + + r = *in; +- DEBUG("slow_bar_readl addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, r); ++ DEBUG("addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, r); + + return r; + } +@@ -260,7 +260,7 @@ static void slow_bar_writeb(void *opaque, hwaddr addr, uint32_t val) + AssignedDevRegion *d = opaque; + uint8_t *out = d->u.r_virtbase + addr; + +- DEBUG("slow_bar_writeb addr=0x" TARGET_FMT_plx " val=0x%02x\n", addr, val); ++ DEBUG("addr=0x" TARGET_FMT_plx " val=0x%02x\n", addr, val); + *out = val; + } + +@@ -269,7 +269,7 @@ static void slow_bar_writew(void *opaque, hwaddr addr, uint32_t val) + AssignedDevRegion *d = opaque; + uint16_t *out = (uint16_t *)(d->u.r_virtbase + addr); + +- DEBUG("slow_bar_writew addr=0x" TARGET_FMT_plx " val=0x%04x\n", addr, val); ++ DEBUG("addr=0x" TARGET_FMT_plx " val=0x%04x\n", addr, val); + *out = val; + } + +@@ -278,7 +278,7 @@ static void slow_bar_writel(void *opaque, hwaddr addr, uint32_t val) + AssignedDevRegion *d = opaque; + uint32_t *out = (uint32_t *)(d->u.r_virtbase + addr); + +- DEBUG("slow_bar_writel addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, val); ++ DEBUG("addr=0x" TARGET_FMT_plx " val=0x%08x\n", addr, val); + *out = val; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-pci-fix-pci-bridge-fw-path.patch b/SOURCES/kvm-pci-fix-pci-bridge-fw-path.patch new file mode 100644 index 0000000..a57ab64 --- /dev/null +++ b/SOURCES/kvm-pci-fix-pci-bridge-fw-path.patch @@ -0,0 +1,52 @@ +From 9bcd11daf18c189b908a752e0a617a564b6b0ca7 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 16 Jan 2014 14:28:15 -0500 +Subject: [PATCH 11/14] pci: fix pci bridge fw path + +Message-id: <1389882495-30964-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56747 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] pci: fix pci bridge fw path +Bugzilla: 1034518 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +qemu uses "pci" as name for pci bridges in the firmware device path. +seabios expects "pci-bridge". Result is that bootorder is broken for +devices behind pci bridges. + +Some googling suggests that "pci-bridge" is the correct one. At least +PPC-based Apple machines are using this. See question "How do I boot +from a device attached to a PCI card" here: + http://www.netbsd.org/ports/macppc/faq.html + +So lets change qemu to use "pci-bridge" too. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 4c41425d2e79f267b2236da31abedb866777d92f) +--- + hw/pci/pci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/pci/pci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/pci/pci.c b/hw/pci/pci.c +index 598d288..d166ab0 100644 +--- a/hw/pci/pci.c ++++ b/hw/pci/pci.c +@@ -1308,7 +1308,7 @@ static const pci_class_desc pci_class_descriptions[] = + { 0x0601, "ISA bridge", "isa"}, + { 0x0602, "EISA bridge", "eisa"}, + { 0x0603, "MC bridge", "mca"}, +- { 0x0604, "PCI bridge", "pci"}, ++ { 0x0604, "PCI bridge", "pci-bridge"}, + { 0x0605, "PCMCIA bridge", "pcmcia"}, + { 0x0606, "NUBUS bridge", "nubus"}, + { 0x0607, "CARDBUS bridge", "cardbus"}, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-pci-fix-up-w64-size-calculation-helper.patch b/SOURCES/kvm-pci-fix-up-w64-size-calculation-helper.patch new file mode 100644 index 0000000..02b5861 --- /dev/null +++ b/SOURCES/kvm-pci-fix-up-w64-size-calculation-helper.patch @@ -0,0 +1,78 @@ +From 2059082c26d40f083807ae81476fedd0c22c613f Mon Sep 17 00:00:00 2001 +Message-Id: <2059082c26d40f083807ae81476fedd0c22c613f.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:08 +0100 +Subject: [PATCH 08/56] pci: fix up w64 size calculation helper + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-9-git-send-email-mst@redhat.com> +Patchwork-id: 56313 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 08/57] pci: fix up w64 size calculation helper +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +BAR base was calculated incorrectly. +Use existing pci_bar_address to get it right. + +Tested-by: Igor Mammedov +Reviewed-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 77d6f4ea7608fe7f47c9d7beddd19191b2e852b2) +--- + hw/pci/pci.c | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci/pci.c | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) + +diff --git a/hw/pci/pci.c b/hw/pci/pci.c +index d550851..598d288 100644 +--- a/hw/pci/pci.c ++++ b/hw/pci/pci.c +@@ -2249,7 +2249,7 @@ static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) + Range *range = opaque; + PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev); + uint16_t cmd = pci_get_word(dev->config + PCI_COMMAND); +- int r; ++ int i; + + if (!(cmd & PCI_COMMAND_MEMORY)) { + return; +@@ -2268,17 +2268,21 @@ static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) + range_extend(range, &pref_range); + } + } +- for (r = 0; r < PCI_NUM_REGIONS; ++r) { +- PCIIORegion *region = &dev->io_regions[r]; ++ for (i = 0; i < PCI_NUM_REGIONS; ++i) { ++ PCIIORegion *r = &dev->io_regions[i]; + Range region_range; + +- if (!region->size || +- (region->type & PCI_BASE_ADDRESS_SPACE_IO) || +- !(region->type & PCI_BASE_ADDRESS_MEM_TYPE_64)) { ++ if (!r->size || ++ (r->type & PCI_BASE_ADDRESS_SPACE_IO) || ++ !(r->type & PCI_BASE_ADDRESS_MEM_TYPE_64)) { ++ continue; ++ } ++ region_range.begin = pci_bar_address(dev, i, r->type, r->size); ++ region_range.end = region_range.begin + r->size; ++ ++ if (region_range.begin == PCI_BAR_UNMAPPED) { + continue; + } +- region_range.begin = pci_get_quad(dev->config + pci_bar(dev, r)); +- region_range.end = region_range.begin + region->size; + + region_range.begin = MAX(region_range.begin, 0x1ULL << 32); + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pci-host-Consistently-set-cannot_instantiate_with_de.patch b/SOURCES/kvm-pci-host-Consistently-set-cannot_instantiate_with_de.patch new file mode 100644 index 0000000..5c19908 --- /dev/null +++ b/SOURCES/kvm-pci-host-Consistently-set-cannot_instantiate_with_de.patch @@ -0,0 +1,385 @@ +From 8b91f65b26d0dd19fe47ba4ffea86081657fadf9 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:16 +0100 +Subject: [PATCH 40/81] pci-host: Consistently set cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-12-git-send-email-kwolf@redhat.com> +Patchwork-id: 55537 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 11/17] pci-host: Consistently set cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Many PCI host bridges consist of a sysbus device and a PCI device. +You need both for the thing to work. Arguably, these bridges should +be modelled as a single, composite devices instead of pairs of +seemingly independent devices you can only use together, but we're not +there, yet. + +Since the sysbus part can't be instantiated with device_add, yet, +permitting it with the PCI part is useless. We shouldn't offer +useless options to the user, so let's set +cannot_instantiate_with_device_add_yet for them. + +It's already set for Bonito, grackle, i440FX, and raven. Document +why. + +Set it for the others: dec-21154, e500-host-bridge, gt64120_pci, mch, +pbm-pci, ppc4xx-host-bridge, sh_pci_host, u3-agp, uni-north-agp, +uni-north-internal-pci, uni-north-pci, and versatile_pci_host. + +Signed-off-by: Markus Armbruster +Reviewed-by: Marcel Apfelbaum +(cherry picked from pending upstream submission) +Signed-off-by: Kevin Wolf +--- + hw/mips/gt64xxx_pci.c | 6 ++++++ + hw/pci-host/apb.c | 6 ++++++ + hw/pci-host/bonito.c | 6 +++++- + hw/pci-host/dec.c | 6 ++++++ + hw/pci-host/grackle.c | 6 +++++- + hw/pci-host/piix.c | 6 +++++- + hw/pci-host/ppce500.c | 5 +++++ + hw/pci-host/prep.c | 6 +++++- + hw/pci-host/q35.c | 5 +++++ + hw/pci-host/uninorth.c | 24 ++++++++++++++++++++++++ + hw/pci-host/versatile.c | 6 ++++++ + hw/ppc/ppc4xx_pci.c | 5 +++++ + hw/sh4/sh_pci.c | 6 ++++++ + 13 files changed, 89 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/mips/gt64xxx_pci.c | 6 ++++++ + hw/pci-host/apb.c | 6 ++++++ + hw/pci-host/bonito.c | 6 +++++- + hw/pci-host/dec.c | 6 ++++++ + hw/pci-host/grackle.c | 6 +++++- + hw/pci-host/piix.c | 6 +++++- + hw/pci-host/ppce500.c | 5 +++++ + hw/pci-host/prep.c | 6 +++++- + hw/pci-host/q35.c | 5 +++++ + hw/pci-host/uninorth.c | 24 ++++++++++++++++++++++++ + hw/pci-host/versatile.c | 6 ++++++ + hw/ppc/ppc4xx_pci.c | 5 +++++ + hw/sh4/sh_pci.c | 6 ++++++ + 13 files changed, 89 insertions(+), 4 deletions(-) + +diff --git a/hw/mips/gt64xxx_pci.c b/hw/mips/gt64xxx_pci.c +index 189e865..3813495 100644 +--- a/hw/mips/gt64xxx_pci.c ++++ b/hw/mips/gt64xxx_pci.c +@@ -1150,12 +1150,18 @@ static int gt64120_pci_init(PCIDevice *d) + static void gt64120_pci_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = gt64120_pci_init; + k->vendor_id = PCI_VENDOR_ID_MARVELL; + k->device_id = PCI_DEVICE_ID_MARVELL_GT6412X; + k->revision = 0x10; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo gt64120_pci_info = { +diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c +index 5ac7556..a296dcf 100644 +--- a/hw/pci-host/apb.c ++++ b/hw/pci-host/apb.c +@@ -557,11 +557,17 @@ static int pbm_pci_host_init(PCIDevice *d) + static void pbm_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = pbm_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_SUN; + k->device_id = PCI_DEVICE_ID_SUN_SABRE; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo pbm_pci_host_info = { +diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c +index c2a056a..021e652 100644 +--- a/hw/pci-host/bonito.c ++++ b/hw/pci-host/bonito.c +@@ -811,8 +811,12 @@ static void bonito_class_init(ObjectClass *klass, void *data) + k->revision = 0x01; + k->class_id = PCI_CLASS_BRIDGE_HOST; + dc->desc = "Host bridge"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_bonito; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo bonito_info = { +diff --git a/hw/pci-host/dec.c b/hw/pci-host/dec.c +index cff458b..aebb240 100644 +--- a/hw/pci-host/dec.c ++++ b/hw/pci-host/dec.c +@@ -116,6 +116,7 @@ static int dec_21154_pci_host_init(PCIDevice *d) + static void dec_21154_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = dec_21154_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_DEC; +@@ -123,6 +124,11 @@ static void dec_21154_pci_host_class_init(ObjectClass *klass, void *data) + k->revision = 0x02; + k->class_id = PCI_CLASS_BRIDGE_PCI; + k->is_bridge = 1; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo dec_21154_pci_host_info = { +diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c +index 4643beb..315965d 100644 +--- a/hw/pci-host/grackle.c ++++ b/hw/pci-host/grackle.c +@@ -130,7 +130,11 @@ static void grackle_pci_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_MOTOROLA_MPC106; + k->revision = 0x00; + k->class_id = PCI_CLASS_BRIDGE_HOST; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo grackle_pci_info = { +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 20cc682..56fc7be 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -618,8 +618,12 @@ static void i440fx_class_init(ObjectClass *klass, void *data) + k->revision = 0x02; + k->class_id = PCI_CLASS_BRIDGE_HOST; + dc->desc = "Host bridge"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_i440fx; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo i440fx_info = { +diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c +index 0d0a001..2dcd668 100644 +--- a/hw/pci-host/ppce500.c ++++ b/hw/pci-host/ppce500.c +@@ -387,6 +387,11 @@ static void e500_host_bridge_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_MPC8533E; + k->class_id = PCI_CLASS_PROCESSOR_POWERPC; + dc->desc = "Host bridge"; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo e500_host_bridge_info = { +diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c +index cdb401f..3e94d07 100644 +--- a/hw/pci-host/prep.c ++++ b/hw/pci-host/prep.c +@@ -196,7 +196,11 @@ static void raven_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_BRIDGE_HOST; + dc->desc = "PReP Host Bridge - Motorola Raven"; + dc->vmsd = &vmstate_raven; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo raven_info = { +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 5f8e7ff..ed934c3 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -295,6 +295,11 @@ static void mch_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_Q35_MCH; + k->revision = MCH_HOST_BRIDGE_REVISION_DEFUALT; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo mch_info = { +diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c +index fff235d..defdaa5 100644 +--- a/hw/pci-host/uninorth.c ++++ b/hw/pci-host/uninorth.c +@@ -351,12 +351,18 @@ static int unin_internal_pci_host_init(PCIDevice *d) + static void unin_main_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = unin_main_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_APPLE; + k->device_id = PCI_DEVICE_ID_APPLE_UNI_N_PCI; + k->revision = 0x00; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo unin_main_pci_host_info = { +@@ -369,12 +375,18 @@ static const TypeInfo unin_main_pci_host_info = { + static void u3_agp_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = u3_agp_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_APPLE; + k->device_id = PCI_DEVICE_ID_APPLE_U3_AGP; + k->revision = 0x00; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo u3_agp_pci_host_info = { +@@ -387,12 +399,18 @@ static const TypeInfo u3_agp_pci_host_info = { + static void unin_agp_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = unin_agp_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_APPLE; + k->device_id = PCI_DEVICE_ID_APPLE_UNI_N_AGP; + k->revision = 0x00; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo unin_agp_pci_host_info = { +@@ -405,12 +423,18 @@ static const TypeInfo unin_agp_pci_host_info = { + static void unin_internal_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = unin_internal_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_APPLE; + k->device_id = PCI_DEVICE_ID_APPLE_UNI_N_I_PCI; + k->revision = 0x00; + k->class_id = PCI_CLASS_BRIDGE_HOST; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo unin_internal_pci_host_info = { +diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c +index 2f996d9..76d6cce 100644 +--- a/hw/pci-host/versatile.c ++++ b/hw/pci-host/versatile.c +@@ -467,11 +467,17 @@ static int versatile_pci_host_init(PCIDevice *d) + static void versatile_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = versatile_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_XILINX; + k->device_id = PCI_DEVICE_ID_XILINX_XC2VP30; + k->class_id = PCI_CLASS_PROCESSOR_CO; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo versatile_pci_host_info = { +diff --git a/hw/ppc/ppc4xx_pci.c b/hw/ppc/ppc4xx_pci.c +index 599539b..ebe7efe 100644 +--- a/hw/ppc/ppc4xx_pci.c ++++ b/hw/ppc/ppc4xx_pci.c +@@ -380,6 +380,11 @@ static void ppc4xx_host_bridge_class_init(ObjectClass *klass, void *data) + k->vendor_id = PCI_VENDOR_ID_IBM; + k->device_id = PCI_DEVICE_ID_IBM_440GX; + k->class_id = PCI_CLASS_BRIDGE_OTHER; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo ppc4xx_host_bridge_info = { +diff --git a/hw/sh4/sh_pci.c b/hw/sh4/sh_pci.c +index d213a90..f9c49c1 100644 +--- a/hw/sh4/sh_pci.c ++++ b/hw/sh4/sh_pci.c +@@ -150,10 +150,16 @@ static int sh_pci_host_init(PCIDevice *d) + static void sh_pci_host_class_init(ObjectClass *klass, void *data) + { + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); ++ DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = sh_pci_host_init; + k->vendor_id = PCI_VENDOR_ID_HITACHI; + k->device_id = PCI_DEVICE_ID_HITACHI_SH7751R; ++ /* ++ * PCI-facing part of the host bridge, not usable without the ++ * host-facing part, which can't be device_add'ed, yet. ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo sh_pci_host_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-pci-store-PCI-hole-ranges-in-guestinfo-structure.patch b/SOURCES/kvm-pci-store-PCI-hole-ranges-in-guestinfo-structure.patch new file mode 100644 index 0000000..4aa716d --- /dev/null +++ b/SOURCES/kvm-pci-store-PCI-hole-ranges-in-guestinfo-structure.patch @@ -0,0 +1,292 @@ +From 43d319c65b1a27349fd329cb2f9c6f5c54f32379 Mon Sep 17 00:00:00 2001 +Message-Id: <43d319c65b1a27349fd329cb2f9c6f5c54f32379.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:22 +0100 +Subject: [PATCH 13/56] pci: store PCI hole ranges in guestinfo structure + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-14-git-send-email-mst@redhat.com> +Patchwork-id: 56318 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 13/57] pci: store PCI hole ranges in guestinfo structure +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Will be used to pass hole ranges to guests. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 3459a625215449b67b9c67d9151ff72892d0a42a) + +Conflicts: + hw/i386/pc_piix.c + hw/i386/pc_q35.c +--- + include/hw/i386/pc.h | 19 ++++++++++++++++++- + include/hw/pci-host/q35.h | 2 ++ + include/qemu/typedefs.h | 1 + + hw/i386/pc.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- + hw/i386/pc_piix.c | 14 +++++++++++++- + hw/i386/pc_q35.c | 6 +++++- + hw/pci-host/q35.c | 8 ++++++++ + 7 files changed, 92 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/pc.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- + hw/i386/pc_piix.c | 14 +++++++++++++- + hw/i386/pc_q35.c | 6 +++++- + hw/pci-host/q35.c | 8 ++++++++ + include/hw/i386/pc.h | 19 ++++++++++++++++++- + include/hw/pci-host/q35.h | 2 ++ + include/qemu/typedefs.h | 1 + + 7 files changed, 92 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 2948781..68a8e1b 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -985,6 +985,48 @@ void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge) + } + } + ++typedef struct PcGuestInfoState { ++ PcGuestInfo info; ++ Notifier machine_done; ++} PcGuestInfoState; ++ ++static ++void pc_guest_info_machine_done(Notifier *notifier, void *data) ++{ ++ PcGuestInfoState *guest_info_state = container_of(notifier, ++ PcGuestInfoState, ++ machine_done); ++} ++ ++PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, ++ ram_addr_t above_4g_mem_size) ++{ ++ PcGuestInfoState *guest_info_state = g_malloc0(sizeof *guest_info_state); ++ PcGuestInfo *guest_info = &guest_info_state->info; ++ ++ guest_info->pci_info.w32.end = IO_APIC_DEFAULT_ADDRESS; ++ if (sizeof(hwaddr) == 4) { ++ guest_info->pci_info.w64.begin = 0; ++ guest_info->pci_info.w64.end = 0; ++ } else { ++ /* ++ * BIOS does not set MTRR entries for the 64 bit window, so no need to ++ * align address to power of two. Align address at 1G, this makes sure ++ * it can be exactly covered with a PAT entry even when using huge ++ * pages. ++ */ ++ guest_info->pci_info.w64.begin = ++ ROUND_UP((0x1ULL << 32) + above_4g_mem_size, 0x1ULL << 30); ++ guest_info->pci_info.w64.end = guest_info->pci_info.w64.begin + ++ (0x1ULL << 62); ++ assert(guest_info->pci_info.w64.begin <= guest_info->pci_info.w64.end); ++ } ++ ++ guest_info_state->machine_done.notify = pc_guest_info_machine_done; ++ qemu_add_machine_init_done_notifier(&guest_info_state->machine_done); ++ return guest_info; ++} ++ + void pc_acpi_init(const char *default_dsdt) + { + char *filename; +@@ -1026,7 +1068,8 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, + ram_addr_t below_4g_mem_size, + ram_addr_t above_4g_mem_size, + MemoryRegion *rom_memory, +- MemoryRegion **ram_memory) ++ MemoryRegion **ram_memory, ++ PcGuestInfo *guest_info) + { + int linux_boot, i; + MemoryRegion *ram, *option_rom_mr; +@@ -1078,6 +1121,7 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, + for (i = 0; i < nb_option_roms; i++) { + rom_add_option(option_rom[i].name, option_rom[i].bootindex); + } ++ guest_info->fw_cfg = fw_cfg; + return fw_cfg; + } + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 07848c1..3a77998 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -87,6 +87,7 @@ static void pc_init1(QEMUMachineInitArgs *args, + MemoryRegion *rom_memory; + DeviceState *icc_bridge; + FWCfgState *fw_cfg = NULL; ++ PcGuestInfo *guest_info; + + icc_bridge = qdev_create(NULL, TYPE_ICC_BRIDGE); + object_property_add_child(qdev_get_machine(), "icc-bridge", +@@ -120,13 +121,24 @@ static void pc_init1(QEMUMachineInitArgs *args, + smbios_set_type1_defaults("Red Hat", "KVM", args->machine->desc); + } + ++ guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); ++ ++ /* Set PCI window size the way seabios has always done it. */ ++ /* Power of 2 so bios can cover it with a single MTRR */ ++ if (ram_size <= 0x80000000) ++ guest_info->pci_info.w32.begin = 0x80000000; ++ else if (ram_size <= 0xc0000000) ++ guest_info->pci_info.w32.begin = 0xc0000000; ++ else ++ guest_info->pci_info.w32.begin = 0xe0000000; ++ + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { + fw_cfg = pc_memory_init(system_memory, + args->kernel_filename, args->kernel_cmdline, + args->initrd_filename, + below_4g_mem_size, above_4g_mem_size, +- rom_memory, &ram_memory); ++ rom_memory, &ram_memory, guest_info); + } + + gsi_state = g_malloc0(sizeof(*gsi_state)); +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 8fa6793..9fab93c 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -73,6 +73,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + ICH9LPCState *ich9_lpc; + PCIDevice *ahci; + DeviceState *icc_bridge; ++ PcGuestInfo *guest_info; + + icc_bridge = qdev_create(NULL, TYPE_ICC_BRIDGE); + object_property_add_child(qdev_get_machine(), "icc-bridge", +@@ -106,13 +107,15 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + smbios_set_type1_defaults("Red Hat", "KVM", args->machine->desc); + } + ++ guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); ++ + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { + pc_memory_init(get_system_memory(), + args->kernel_filename, args->kernel_cmdline, + args->initrd_filename, + below_4g_mem_size, above_4g_mem_size, +- rom_memory, &ram_memory); ++ rom_memory, &ram_memory, guest_info); + } + + /* irq lines */ +@@ -134,6 +137,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + q35_host->mch.address_space_io = get_system_io(); + q35_host->mch.below_4g_mem_size = below_4g_mem_size; + q35_host->mch.above_4g_mem_size = above_4g_mem_size; ++ q35_host->mch.guest_info = guest_info; + /* pci */ + qdev_init_nofail(DEVICE(q35_host)); + host_bus = q35_host->host.pci.bus; +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index ed934c3..0989fc5 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -245,6 +245,14 @@ static int mch_init(PCIDevice *d) + hwaddr pci_hole64_size; + MCHPCIState *mch = MCH_PCI_DEVICE(d); + ++ /* Leave enough space for the biggest MCFG BAR */ ++ /* TODO: this matches current bios behaviour, but ++ * it's not a power of two, which means an MTRR ++ * can't cover it exactly. ++ */ ++ mch->guest_info->pci_info.w32.begin = MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT + ++ MCH_HOST_BRIDGE_PCIEXBAR_MAX; ++ + /* setup pci memory regions */ + memory_region_init_alias(&mch->pci_hole, "pci-hole", + mch->pci_address_space, +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 2cf7baa..2518db6 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -10,8 +10,20 @@ + #include "exec/memory.h" + #include "hw/i386/ioapic.h" + ++#include "qemu/range.h" ++ + /* PC-style peripherals (also used by other machines). */ + ++typedef struct PcPciInfo { ++ Range w32; ++ Range w64; ++} PcPciInfo; ++ ++struct PcGuestInfo { ++ PcPciInfo pci_info; ++ FWCfgState *fw_cfg; ++}; ++ + /* parallel.c */ + static inline bool parallel_init(ISABus *bus, int index, CharDriverState *chr) + { +@@ -84,6 +96,10 @@ void pc_acpi_smi_interrupt(void *opaque, int irq, int level); + void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge); + void pc_hot_add_cpu(const int64_t id, Error **errp); + void pc_acpi_init(const char *default_dsdt); ++ ++PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, ++ ram_addr_t above_4g_mem_size); ++ + FWCfgState *pc_memory_init(MemoryRegion *system_memory, + const char *kernel_filename, + const char *kernel_cmdline, +@@ -91,7 +107,8 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, + ram_addr_t below_4g_mem_size, + ram_addr_t above_4g_mem_size, + MemoryRegion *rom_memory, +- MemoryRegion **ram_memory); ++ MemoryRegion **ram_memory, ++ PcGuestInfo *guest_info); + qemu_irq *pc_allocate_cpu_irq(void); + DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus); + void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi, +diff --git a/include/hw/pci-host/q35.h b/include/hw/pci-host/q35.h +index e182c82..b083831 100644 +--- a/include/hw/pci-host/q35.h ++++ b/include/hw/pci-host/q35.h +@@ -55,6 +55,7 @@ typedef struct MCHPCIState { + uint8_t smm_enabled; + ram_addr_t below_4g_mem_size; + ram_addr_t above_4g_mem_size; ++ PcGuestInfo *guest_info; + } MCHPCIState; + + typedef struct Q35PCIHost { +@@ -81,6 +82,7 @@ typedef struct Q35PCIHost { + #define MCH_HOST_BRIDGE_PCIEXBAR 0x60 /* 64bit register */ + #define MCH_HOST_BRIDGE_PCIEXBAR_SIZE 8 /* 64bit register */ + #define MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT 0xb0000000 ++#define MCH_HOST_BRIDGE_PCIEXBAR_MAX (0x10000000) /* 256M */ + #define MCH_HOST_BRIDGE_PCIEXBAR_ADMSK Q35_MASK(64, 35, 28) + #define MCH_HOST_BRIDGE_PCIEXBAR_128ADMSK ((uint64_t)(1 << 26)) + #define MCH_HOST_BRIDGE_PCIEXBAR_64ADMSK ((uint64_t)(1 << 25)) +diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h +index a332d88..70d250f 100644 +--- a/include/qemu/typedefs.h ++++ b/include/qemu/typedefs.h +@@ -64,6 +64,7 @@ typedef struct VirtIODevice VirtIODevice; + typedef struct QEMUSGList QEMUSGList; + typedef struct SHPCDevice SHPCDevice; + typedef struct FWCfgState FWCfgState; ++typedef struct PcGuestInfo PcGuestInfo; + typedef struct Range Range; + + #endif /* QEMU_TYPEDEFS_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pcie_host-expose-UNMAPPED-macro.patch b/SOURCES/kvm-pcie_host-expose-UNMAPPED-macro.patch new file mode 100644 index 0000000..fbf2dcf --- /dev/null +++ b/SOURCES/kvm-pcie_host-expose-UNMAPPED-macro.patch @@ -0,0 +1,67 @@ +From e1b5da9a17a3c41e469122b76a760be28263a18e Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:02 +0100 +Subject: [PATCH 28/56] pcie_host: expose UNMAPPED macro + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-29-git-send-email-mst@redhat.com> +Patchwork-id: 56334 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 28/57] pcie_host: expose UNMAPPED macro +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Make it possible to test unmapped status through QMP. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 079e3e7012a0e3ff80b4786e67f5a5d4341dcd51) +--- + include/hw/pci/pcie_host.h | 3 +++ + hw/pci/pcie_host.c | 3 --- + 2 files changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci/pcie_host.c | 3 --- + include/hw/pci/pcie_host.h | 3 +++ + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/hw/pci/pcie_host.c b/hw/pci/pcie_host.c +index b2d942b..0a78a8f 100644 +--- a/hw/pci/pcie_host.c ++++ b/hw/pci/pcie_host.c +@@ -104,9 +104,6 @@ static const MemoryRegionOps pcie_mmcfg_ops = { + .endianness = DEVICE_NATIVE_ENDIAN, + }; + +-/* pcie_host::base_addr == PCIE_BASE_ADDR_UNMAPPED when it isn't mapped. */ +-#define PCIE_BASE_ADDR_UNMAPPED ((hwaddr)-1ULL) +- + int pcie_host_init(PCIExpressHost *e) + { + e->base_addr = PCIE_BASE_ADDR_UNMAPPED; +diff --git a/include/hw/pci/pcie_host.h b/include/hw/pci/pcie_host.h +index 1228e36..bac3c67 100644 +--- a/include/hw/pci/pcie_host.h ++++ b/include/hw/pci/pcie_host.h +@@ -28,6 +28,9 @@ + #define PCIE_HOST_BRIDGE(obj) \ + OBJECT_CHECK(PCIExpressHost, (obj), TYPE_PCIE_HOST_BRIDGE) + ++/* pcie_host::base_addr == PCIE_BASE_ADDR_UNMAPPED when it isn't mapped. */ ++#define PCIE_BASE_ADDR_UNMAPPED ((hwaddr)-1ULL) ++ + struct PCIExpressHost { + PCIHostState pci; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pcie_host-expose-address-format.patch b/SOURCES/kvm-pcie_host-expose-address-format.patch new file mode 100644 index 0000000..9300795 --- /dev/null +++ b/SOURCES/kvm-pcie_host-expose-address-format.patch @@ -0,0 +1,102 @@ +From 35510628e459d51b1ef6048bb307462a75ecf2d2 Mon Sep 17 00:00:00 2001 +Message-Id: <35510628e459d51b1ef6048bb307462a75ecf2d2.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:04 +0100 +Subject: [PATCH 29/56] pcie_host: expose address format + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-30-git-send-email-mst@redhat.com> +Patchwork-id: 56335 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 29/57] pcie_host: expose address format +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Callers pass in the address so it's helpful for +them to be able to decode it. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 6f6d282330a3c85ecbeb54dec5b57282bd177b44) +--- + include/hw/pci/pcie_host.h | 21 +++++++++++++++++++++ + hw/pci/pcie_host.c | 21 --------------------- + 2 files changed, 21 insertions(+), 21 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci/pcie_host.c | 21 --------------------- + include/hw/pci/pcie_host.h | 21 +++++++++++++++++++++ + 2 files changed, 21 insertions(+), 21 deletions(-) + +diff --git a/hw/pci/pcie_host.c b/hw/pci/pcie_host.c +index 0a78a8f..a6db258 100644 +--- a/hw/pci/pcie_host.c ++++ b/hw/pci/pcie_host.c +@@ -24,27 +24,6 @@ + #include "hw/pci/pcie_host.h" + #include "exec/address-spaces.h" + +-/* +- * PCI express mmcfig address +- * bit 20 - 28: bus number +- * bit 15 - 19: device number +- * bit 12 - 14: function number +- * bit 0 - 11: offset in configuration space of a given device +- */ +-#define PCIE_MMCFG_SIZE_MAX (1ULL << 28) +-#define PCIE_MMCFG_SIZE_MIN (1ULL << 20) +-#define PCIE_MMCFG_BUS_BIT 20 +-#define PCIE_MMCFG_BUS_MASK 0x1ff +-#define PCIE_MMCFG_DEVFN_BIT 12 +-#define PCIE_MMCFG_DEVFN_MASK 0xff +-#define PCIE_MMCFG_CONFOFFSET_MASK 0xfff +-#define PCIE_MMCFG_BUS(addr) (((addr) >> PCIE_MMCFG_BUS_BIT) & \ +- PCIE_MMCFG_BUS_MASK) +-#define PCIE_MMCFG_DEVFN(addr) (((addr) >> PCIE_MMCFG_DEVFN_BIT) & \ +- PCIE_MMCFG_DEVFN_MASK) +-#define PCIE_MMCFG_CONFOFFSET(addr) ((addr) & PCIE_MMCFG_CONFOFFSET_MASK) +- +- + /* a helper function to get a PCIDevice for a given mmconfig address */ + static inline PCIDevice *pcie_dev_find_by_mmcfg_addr(PCIBus *s, + uint32_t mmcfg_addr) +diff --git a/include/hw/pci/pcie_host.h b/include/hw/pci/pcie_host.h +index bac3c67..da0f275 100644 +--- a/include/hw/pci/pcie_host.h ++++ b/include/hw/pci/pcie_host.h +@@ -54,4 +54,25 @@ void pcie_host_mmcfg_update(PCIExpressHost *e, + hwaddr addr, + uint32_t size); + ++/* ++ * PCI express ECAM (Enhanced Configuration Address Mapping) format. ++ * AKA mmcfg address ++ * bit 20 - 28: bus number ++ * bit 15 - 19: device number ++ * bit 12 - 14: function number ++ * bit 0 - 11: offset in configuration space of a given device ++ */ ++#define PCIE_MMCFG_SIZE_MAX (1ULL << 28) ++#define PCIE_MMCFG_SIZE_MIN (1ULL << 20) ++#define PCIE_MMCFG_BUS_BIT 20 ++#define PCIE_MMCFG_BUS_MASK 0x1ff ++#define PCIE_MMCFG_DEVFN_BIT 12 ++#define PCIE_MMCFG_DEVFN_MASK 0xff ++#define PCIE_MMCFG_CONFOFFSET_MASK 0xfff ++#define PCIE_MMCFG_BUS(addr) (((addr) >> PCIE_MMCFG_BUS_BIT) & \ ++ PCIE_MMCFG_BUS_MASK) ++#define PCIE_MMCFG_DEVFN(addr) (((addr) >> PCIE_MMCFG_DEVFN_BIT) & \ ++ PCIE_MMCFG_DEVFN_MASK) ++#define PCIE_MMCFG_CONFOFFSET(addr) ((addr) & PCIE_MMCFG_CONFOFFSET_MASK) ++ + #endif /* PCIE_HOST_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pflash_cfi01-write-flash-contents-to-bdrv-on-incomin.patch b/SOURCES/kvm-pflash_cfi01-write-flash-contents-to-bdrv-on-incomin.patch new file mode 100644 index 0000000..74a9501 --- /dev/null +++ b/SOURCES/kvm-pflash_cfi01-write-flash-contents-to-bdrv-on-incomin.patch @@ -0,0 +1,105 @@ +From 2a3a2063076b590d9ef81a7d7cdc71520647734b Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 9 Sep 2014 16:04:57 +0200 +Subject: [PATCH 07/12] pflash_cfi01: write flash contents to bdrv on incoming migration + +Message-id: <1410278697-29800-2-git-send-email-lersek@redhat.com> +Patchwork-id: 60923 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] pflash_cfi01: write flash contents to bdrv on incoming migration +Bugzilla: 1139702 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi + +A drive that backs a pflash device is special: +- it is very small, +- its entire contents are kept in a RAMBlock at all times, covering the + guest-phys address range that provides the guest's view of the emulated + flash chip. + +The pflash device model keeps the drive (the host-side file) and the +guest-visible flash contents in sync. When migrating the guest, the +guest-visible flash contents (the RAMBlock) is migrated by default, but on +the target host, the drive (the host-side file) remains in full sync with +the RAMBlock only if: +- the source and target hosts share the storage underlying the pflash + drive, +- or the migration requests full or incremental block migration too, which + then covers all drives. + +Due to the special nature of pflash drives, the following scenario makes +sense as well: +- no full nor incremental block migration, covering all drives, alongside + the base migration (justified eg. by shared storage for "normal" (big) + drives), +- non-shared storage for pflash drives. + +In this case, currently only those portions of the flash drive are updated +on the target disk that the guest reprograms while running on the target +host. + +In order to restore accord, dump the entire flash contents to the bdrv in +a post_load() callback. + +- The read-only check follows the other call-sites of pflash_update(); +- both "pfl->ro" and pflash_update() reflect / consider the case when + "pfl->bs" is NULL; +- the total size of the flash device is calculated as in + pflash_cfi01_realize(). + +When using shared storage, or requesting full or incremental block +migration along with the normal migration, the patch should incur a +harmless rewrite from the target side. + +It is assumed that, on the target host, RAM is loaded ahead of the call to +pflash_post_load(). + +Suggested-by: Paolo Bonzini +Signed-off-by: Laszlo Ersek +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4c0cfc72b31a79f737a64ebbe0411e4b83e25771) +--- + hw/block/pflash_cfi01.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pflash_cfi01.c | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c +index 18eb0bc..e8b47fb 100644 +--- a/hw/block/pflash_cfi01.c ++++ b/hw/block/pflash_cfi01.c +@@ -85,10 +85,13 @@ struct pflash_t { + void *storage; + }; + ++static int pflash_post_load(void *opaque, int version_id); ++ + static const VMStateDescription vmstate_pflash = { + .name = "pflash_cfi01", + .version_id = 1, + .minimum_version_id = 1, ++ .post_load = pflash_post_load, + .fields = (VMStateField[]) { + VMSTATE_UINT8(wcycle, pflash_t), + VMSTATE_UINT8(cmd, pflash_t), +@@ -768,3 +771,14 @@ MemoryRegion *pflash_cfi01_get_memory(pflash_t *fl) + { + return &fl->mem; + } ++ ++static int pflash_post_load(void *opaque, int version_id) ++{ ++ pflash_t *pfl = opaque; ++ ++ if (!pfl->ro) { ++ DPRINTF("%s: updating bdrv for %s\n", __func__, pfl->name); ++ pflash_update(pfl, 0, pfl->sector_len * pfl->nb_blocs); ++ } ++ return 0; ++} +-- +1.7.1 + diff --git a/SOURCES/kvm-piix-APIs-for-pc-guest-info.patch b/SOURCES/kvm-piix-APIs-for-pc-guest-info.patch new file mode 100644 index 0000000..a84c101 --- /dev/null +++ b/SOURCES/kvm-piix-APIs-for-pc-guest-info.patch @@ -0,0 +1,185 @@ +From 364834e660cd4143e69126b2fb9a640c3ee9b9c1 Mon Sep 17 00:00:00 2001 +Message-Id: <364834e660cd4143e69126b2fb9a640c3ee9b9c1.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:49 +0100 +Subject: [PATCH 41/56] piix: APIs for pc guest info + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-42-git-send-email-mst@redhat.com> +Patchwork-id: 56347 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 41/57] piix: APIs for pc guest info +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +This adds APIs that will be used to fill in guest acpi tables. +Some required information is still lacking in QOM, so we +fall back on lookups by type and returning explicit types. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 277e9340e6a1b0a0e8e988d2f0ac82b18b695c0b) + +Conflicts: + hw/acpi/piix4.c +--- + include/hw/acpi/piix4.h | 8 ++++++++ + include/hw/i386/pc.h | 1 + + hw/acpi/piix4.c | 45 ++++++++++++++++++++++++++++++++++++++++----- + hw/pci-host/piix.c | 8 ++++++++ + 4 files changed, 57 insertions(+), 5 deletions(-) + create mode 100644 include/hw/acpi/piix4.h + +Signed-off-by: Michal Novotny +--- + hw/acpi/piix4.c | 45 ++++++++++++++++++++++++++++++++++++++++----- + hw/pci-host/piix.c | 8 ++++++++ + include/hw/acpi/piix4.h | 8 ++++++++ + include/hw/i386/pc.h | 1 + + 4 files changed, 57 insertions(+), 5 deletions(-) + create mode 100644 include/hw/acpi/piix4.h + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index 18b1300..6ebabe6 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -29,6 +29,7 @@ + #include "exec/ioport.h" + #include "hw/nvram/fw_cfg.h" + #include "exec/address-spaces.h" ++#include "hw/acpi/piix4.h" + + //#define DEBUG + +@@ -67,6 +68,8 @@ typedef struct PIIX4PMState { + PCIDevice dev; + + MemoryRegion io; ++ uint32_t io_base; ++ + MemoryRegion io_gpe; + MemoryRegion io_pci; + MemoryRegion io_cpu; +@@ -143,14 +146,12 @@ static void apm_ctrl_changed(uint32_t val, void *arg) + + static void pm_io_space_update(PIIX4PMState *s) + { +- uint32_t pm_io_base; +- +- pm_io_base = le32_to_cpu(*(uint32_t *)(s->dev.config + 0x40)); +- pm_io_base &= 0xffc0; ++ s->io_base = le32_to_cpu(*(uint32_t *)(s->dev.config + 0x40)); ++ s->io_base &= 0xffc0; + + memory_region_transaction_begin(); + memory_region_set_enabled(&s->io, s->dev.config[0x80] & 1); +- memory_region_set_address(&s->io, pm_io_base); ++ memory_region_set_address(&s->io, s->io_base); + memory_region_transaction_commit(); + } + +@@ -393,6 +394,28 @@ static void piix4_pm_machine_ready(Notifier *n, void *opaque) + + } + ++static void piix4_pm_add_propeties(PIIX4PMState *s) ++{ ++ static const uint8_t acpi_enable_cmd = ACPI_ENABLE; ++ static const uint8_t acpi_disable_cmd = ACPI_DISABLE; ++ static const uint32_t gpe0_blk = GPE_BASE; ++ static const uint32_t gpe0_blk_len = GPE_LEN; ++ static const uint16_t sci_int = 9; ++ ++ object_property_add_uint8_ptr(OBJECT(s), ACPI_PM_PROP_ACPI_ENABLE_CMD, ++ &acpi_enable_cmd, NULL); ++ object_property_add_uint8_ptr(OBJECT(s), ACPI_PM_PROP_ACPI_DISABLE_CMD, ++ &acpi_disable_cmd, NULL); ++ object_property_add_uint32_ptr(OBJECT(s), ACPI_PM_PROP_GPE0_BLK, ++ &gpe0_blk, NULL); ++ object_property_add_uint32_ptr(OBJECT(s), ACPI_PM_PROP_GPE0_BLK_LEN, ++ &gpe0_blk_len, NULL); ++ object_property_add_uint16_ptr(OBJECT(s), ACPI_PM_PROP_SCI_INT, ++ &sci_int, NULL); ++ object_property_add_uint32_ptr(OBJECT(s), ACPI_PM_PROP_PM_IO_BASE, ++ &s->io_base, NULL); ++} ++ + static int piix4_pm_initfn(PCIDevice *dev) + { + PIIX4PMState *s = DO_UPCAST(PIIX4PMState, dev, dev); +@@ -442,9 +465,21 @@ static int piix4_pm_initfn(PCIDevice *dev) + + piix4_acpi_system_hot_add_init(pci_address_space_io(dev), dev->bus, s); + ++ piix4_pm_add_propeties(s); + return 0; + } + ++Object *piix4_pm_find(void) ++{ ++ bool ambig; ++ Object *o = object_resolve_path_type("", "PIIX4_PM", &ambig); ++ ++ if (ambig || !o) { ++ return NULL; ++ } ++ return o; ++} ++ + i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, + qemu_irq sci_irq, qemu_irq smi_irq, + int kvm_enabled, FWCfgState *fw_cfg) +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 6502d1c..9284c8d 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -408,6 +408,14 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + return b; + } + ++PCIBus *find_i440fx(void) ++{ ++ PCIHostState *s = OBJECT_CHECK(PCIHostState, ++ object_resolve_path("/machine/i440fx", NULL), ++ TYPE_PCI_HOST_BRIDGE); ++ return s ? s->bus : NULL; ++} ++ + /* PIIX3 PCI to ISA bridge */ + static void piix3_set_irq_pic(PIIX3State *piix3, int pic_irq) + { +diff --git a/include/hw/acpi/piix4.h b/include/hw/acpi/piix4.h +new file mode 100644 +index 0000000..65e6fd7 +--- /dev/null ++++ b/include/hw/acpi/piix4.h +@@ -0,0 +1,8 @@ ++#ifndef HW_ACPI_PIIX4_H ++#define HW_ACPI_PIIX4_H ++ ++#include "qemu/typedefs.h" ++ ++Object *piix4_pm_find(void); ++ ++#endif +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 5011c87..d78e45b 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -191,6 +191,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn, + MemoryRegion *pci_memory, + MemoryRegion *ram_memory); + ++PCIBus *find_i440fx(void); + /* piix4.c */ + extern PCIDevice *piix4_dev; + int piix4_init(PCIBus *bus, ISABus **isa_bus, int devfn); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-piix-fix-32bit-pci-hole.patch b/SOURCES/kvm-piix-fix-32bit-pci-hole.patch new file mode 100644 index 0000000..be6b0c4 --- /dev/null +++ b/SOURCES/kvm-piix-fix-32bit-pci-hole.patch @@ -0,0 +1,70 @@ +From c538b7706e6f03a1eae8f11f9f89b9cbee73dbc9 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:08 +0100 +Subject: [PATCH 18/22] piix: fix 32bit pci hole + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-19-git-send-email-lersek@redhat.com> +Patchwork-id: 56630 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 18/18] piix: fix 32bit pci hole +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Gerd Hoffmann + +Make the 32bit pci hole start at end of ram, so all possible address +space is covered. + +We used to try and make addresses aligned so they are easier to cover +with MTRRs, but since they are cosmetic on KVM, this is probably not +worth worrying about. +Of course the firmware can use less than that. Leaving space unused is +no problem, mapping pci bars outside the hole causes problems though. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Laszlo Ersek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit ddaaefb4dd427d6d2e41c1cfbe0cd8d8e8d6aad9) + +Conflicts: + hw/i386/pc_piix.c + hw/pci-host/piix.c + include/hw/i386/pc.h + +Signed-off-by: Laszlo Ersek +--- + hw/pci-host/piix.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/pci-host/piix.c | 10 +--------- + 1 files changed, 1 insertions(+), 9 deletions(-) + +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 9284c8d..5757b1d 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -337,15 +337,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, + f->ram_memory = ram_memory; + + i440fx = I440FX_PCI_HOST_BRIDGE(dev); +- /* Set PCI window size the way seabios has always done it. */ +- /* Power of 2 so bios can cover it with a single MTRR */ +- if (ram_size <= 0x80000000) { +- i440fx->pci_info.w32.begin = 0x80000000; +- } else if (ram_size <= 0xc0000000) { +- i440fx->pci_info.w32.begin = 0xc0000000; +- } else { +- i440fx->pci_info.w32.begin = 0xe0000000; +- } ++ i440fx->pci_info.w32.begin = pci_hole_start; + + memory_region_init_alias(&f->pci_hole, "pci-hole", f->pci_address_space, + pci_hole_start, pci_hole_size); +-- +1.7.1 + diff --git a/SOURCES/kvm-piix-gigabyte-alignment-for-ram.patch b/SOURCES/kvm-piix-gigabyte-alignment-for-ram.patch new file mode 100644 index 0000000..7fb7f96 --- /dev/null +++ b/SOURCES/kvm-piix-gigabyte-alignment-for-ram.patch @@ -0,0 +1,74 @@ +From 8d2dfb2e031ded182868c14423b874464cd98949 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 27 Jan 2014 10:31:27 +0100 +Subject: [PATCH 01/14] piix: gigabyte alignment for ram + +Message-id: <1389867959-12463-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56744 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/4] piix: gigabyte alignment for ram +Bugzilla: 1026548 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov +RH-Acked-by: Paolo Bonzini + +Map 3G (i440fx) of memory below 4G, so the RAM pieces +are nicely aligned to gigabyte borders. + +Keep old memory layout for (a) old machine types and (b) in case all +memory fits below 4G and thus we don't have to split RAM into pieces +in the first place. The later makes sure this change doesn't take +away memory from 32bit guests. + +So, with i440fx and up to 3.5 GB of memory, all of it will be mapped +below 4G. With more than 3.5 GB of memory 3 GB will be mapped below +4G and the remaining amount will be mapped above 4G. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit bb43d3839c29b17a2f5c122114cd4ca978065a18) + +Conflicts: + hw/i386/pc_piix.c + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 663c9d5..9f1d0b5 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -61,6 +61,7 @@ static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + static bool smbios_type1_defaults = true; + static bool has_pci_info; + static bool has_acpi_build = true; ++static bool gigabyte_align = true; + + /* PC hardware initialisation */ + static void pc_init1(QEMUMachineInitArgs *args, +@@ -101,9 +102,10 @@ static void pc_init1(QEMUMachineInitArgs *args, + kvmclock_create(); + } + +- if (args->ram_size >= QEMU_BELOW_4G_RAM_END ) { +- above_4g_mem_size = args->ram_size - QEMU_BELOW_4G_RAM_END; +- below_4g_mem_size = QEMU_BELOW_4G_RAM_END; ++ if (args->ram_size >= 0xe0000000) { ++ ram_addr_t lowmem = gigabyte_align ? 0xc0000000 : 0xe0000000; ++ above_4g_mem_size = args->ram_size - lowmem; ++ below_4g_mem_size = lowmem; + } else { + above_4g_mem_size = 0; + below_4g_mem_size = args->ram_size; +@@ -929,6 +931,7 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + + rom_file_in_ram = false; + has_acpi_build = false; ++ gigabyte_align = false; + } + + static void pc_init_rhel650(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-piix-use-64-bit-window-programmed-by-guest.patch b/SOURCES/kvm-piix-use-64-bit-window-programmed-by-guest.patch new file mode 100644 index 0000000..772c769 --- /dev/null +++ b/SOURCES/kvm-piix-use-64-bit-window-programmed-by-guest.patch @@ -0,0 +1,67 @@ +From 5c582371601d239c3e8692fa51549ae915a48f41 Mon Sep 17 00:00:00 2001 +Message-Id: <5c582371601d239c3e8692fa51549ae915a48f41.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:42 +0100 +Subject: [PATCH 21/56] piix: use 64 bit window programmed by guest + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-22-git-send-email-mst@redhat.com> +Patchwork-id: 56327 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 21/57] piix: use 64 bit window programmed by guest +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Detect the 64 bit window programmed by firmware +and configure properties accordingly. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 2028fdf3791e14c5ad156252afa0e792192a3e92) +--- + hw/pci-host/piix.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/piix.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 167d1fd..0c26835 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -229,18 +229,24 @@ static void i440fx_pcihost_get_pci_hole64_start(Object *obj, Visitor *v, + void *opaque, const char *name, + Error **errp) + { +- I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj); ++ PCIHostState *h = PCI_HOST_BRIDGE(obj); ++ Range w64; ++ ++ pci_bus_get_w64_range(h->bus, &w64); + +- visit_type_uint64(v, &s->pci_info.w64.begin, name, errp); ++ visit_type_uint64(v, &w64.begin, name, errp); + } + + static void i440fx_pcihost_get_pci_hole64_end(Object *obj, Visitor *v, + void *opaque, const char *name, + Error **errp) + { +- I440FXState *s = I440FX_PCI_HOST_BRIDGE(obj); ++ PCIHostState *h = PCI_HOST_BRIDGE(obj); ++ Range w64; ++ ++ pci_bus_get_w64_range(h->bus, &w64); + +- visit_type_uint64(v, &s->pci_info.w64.end, name, errp); ++ visit_type_uint64(v, &w64.end, name, errp); + } + + static int i440fx_pcihost_initfn(SysBusDevice *dev) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-piix3-piix4-Clean-up-use-of-cannot_instantiate_with_.patch b/SOURCES/kvm-piix3-piix4-Clean-up-use-of-cannot_instantiate_with_.patch new file mode 100644 index 0000000..a15b048 --- /dev/null +++ b/SOURCES/kvm-piix3-piix4-Clean-up-use-of-cannot_instantiate_with_.patch @@ -0,0 +1,156 @@ +From 3a10d87d90ff5f2aeaf02addac57f5a3346f263c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:18 +0100 +Subject: [PATCH 42/81] piix3 piix4: Clean up use of cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-14-git-send-email-kwolf@redhat.com> +Patchwork-id: 55539 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 13/17] piix3 piix4: Clean up use of cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +A PIIX3/PIIX4 southbridge has multiple functions. We model each +function as a separate qdev. Two of them need some special wiring set +up in pc_init1() or mips_malta_init() to work: the ISA bridge at 01.0, +and the SMBus controller at 01.3. + +The IDE controller at 01.1 (piix3-ide, piix3-ide-xen, piix4-ide) has +always had cannot_instantiate_with_device_add_yet set, but there is no +obvious reason why device_add could not work for them. Drop it. +(cherry picked from pending upstream submission) + +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + hw/acpi/piix4.c | 6 +++++- + hw/ide/piix.c | 3 --- + hw/isa/piix4.c | 6 +++++- + hw/pci-host/piix.c | 12 ++++++++++-- + 4 files changed, 20 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/acpi/piix4.c | 6 +++++- + hw/ide/piix.c | 3 --- + hw/isa/piix4.c | 6 +++++- + hw/pci-host/piix.c | 12 ++++++++++-- + 4 files changed, 20 insertions(+), 7 deletions(-) + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index 46685b7..d79a7b0 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -494,9 +494,13 @@ static void piix4_pm_class_init(ObjectClass *klass, void *data) + k->revision = 0x03; + k->class_id = PCI_CLASS_BRIDGE_OTHER; + dc->desc = "PM"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_acpi; + dc->props = piix4_pm_properties; ++ /* ++ * Reason: part of PIIX4 southbridge, needs to be wired up, ++ * e.g. by mips_malta_init() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo piix4_pm_info = { +diff --git a/hw/ide/piix.c b/hw/ide/piix.c +index e6864b1..304cab0 100644 +--- a/hw/ide/piix.c ++++ b/hw/ide/piix.c +@@ -249,7 +249,6 @@ static void piix3_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo piix3_ide_info = { +@@ -269,7 +268,6 @@ static void piix3_ide_xen_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->unplug = pci_piix3_xen_ide_unplug; + } + +@@ -292,7 +290,6 @@ static void piix4_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371AB; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo piix4_ide_info = { +diff --git a/hw/isa/piix4.c b/hw/isa/piix4.c +index 10bf8ff..e7c75f1 100644 +--- a/hw/isa/piix4.c ++++ b/hw/isa/piix4.c +@@ -113,8 +113,12 @@ static void piix4_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371AB_0; + k->class_id = PCI_CLASS_BRIDGE_ISA; + dc->desc = "ISA bridge"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_piix4; ++ /* ++ * Reason: part of PIIX4 southbridge, needs to be wired up, ++ * e.g. by mips_malta_init() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo piix4_info = { +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index 56fc7be..c89b76b 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -564,7 +564,6 @@ static void piix3_class_init(ObjectClass *klass, void *data) + + dc->desc = "ISA bridge"; + dc->vmsd = &vmstate_piix3; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + k->no_hotplug = 1; + k->init = piix3_initfn; + k->config_write = piix3_write_config; +@@ -572,6 +571,11 @@ static void piix3_class_init(ObjectClass *klass, void *data) + /* 82371SB PIIX3 PCI-to-ISA bridge (Step A1) */ + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_0; + k->class_id = PCI_CLASS_BRIDGE_ISA; ++ /* ++ * Reason: part of PIIX3 southbridge, needs to be wired up by ++ * pc_piix.c's pc_init1() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo piix3_info = { +@@ -588,7 +592,6 @@ static void piix3_xen_class_init(ObjectClass *klass, void *data) + + dc->desc = "ISA bridge"; + dc->vmsd = &vmstate_piix3; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + k->no_hotplug = 1; + k->init = piix3_initfn; + k->config_write = piix3_write_config_xen; +@@ -596,6 +599,11 @@ static void piix3_xen_class_init(ObjectClass *klass, void *data) + /* 82371SB PIIX3 PCI-to-ISA bridge (Step A1) */ + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_0; + k->class_id = PCI_CLASS_BRIDGE_ISA; ++ /* ++ * Reason: part of PIIX3 southbridge, needs to be wired up by ++ * pc_piix.c's pc_init1() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + }; + + static const TypeInfo piix3_xen_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-pvpanic-add-API-to-access-io-port.patch b/SOURCES/kvm-pvpanic-add-API-to-access-io-port.patch new file mode 100644 index 0000000..9d6a1e3 --- /dev/null +++ b/SOURCES/kvm-pvpanic-add-API-to-access-io-port.patch @@ -0,0 +1,88 @@ +From 1f08d3fe2b08289b3cae10dc91a96b793272801b Mon Sep 17 00:00:00 2001 +Message-Id: <1f08d3fe2b08289b3cae10dc91a96b793272801b.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:54 +0100 +Subject: [PATCH 43/56] pvpanic: add API to access io port + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-44-git-send-email-mst@redhat.com> +Patchwork-id: 56349 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 43/57] pvpanic: add API to access io port +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Add API to find pvpanic device and get its io port. +Will be used to fill in guest info structure. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 309cd62d6b2628b4f0e2850b42011077f40956c7) + +Conflicts: + include/hw/i386/pc.h +--- + include/hw/i386/pc.h | 1 + + hw/misc/pvpanic.c | 14 +++++++++++++- + 2 files changed, 14 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/misc/pvpanic.c | 14 +++++++++++++- + include/hw/i386/pc.h | 1 + + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index 1838bc7..1377fde 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -19,6 +19,7 @@ + #include "qemu/log.h" + + #include "hw/nvram/fw_cfg.h" ++#include "hw/i386/pc.h" + + /* The bit of supported pv event */ + #define PVPANIC_F_PANICKED 0 +@@ -107,8 +108,19 @@ static int pvpanic_isa_initfn(ISADevice *dev) + return 0; + } + ++#define PVPANIC_IOPORT_PROP "ioport" ++ ++uint16_t pvpanic_port(void) ++{ ++ Object *o = object_resolve_path_type("", TYPE_ISA_PVPANIC_DEVICE, NULL); ++ if (!o) { ++ return 0; ++ } ++ return object_property_get_int(o, PVPANIC_IOPORT_PROP, NULL); ++} ++ + static Property pvpanic_isa_properties[] = { +- DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505), ++ DEFINE_PROP_UINT16(PVPANIC_IOPORT_PROP, PVPanicState, ioport, 0x505), + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index d78e45b..8793715 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -231,6 +231,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory); + + /* pvpanic.c */ + void pvpanic_init(ISABus *bus); ++uint16_t pvpanic_port(void); + + /* e820 types */ + #define E820_RAM 1 +-- +1.7.11.7 + diff --git a/SOURCES/kvm-pvpanic-fix-fwcfg-for-big-endian-hosts.patch b/SOURCES/kvm-pvpanic-fix-fwcfg-for-big-endian-hosts.patch new file mode 100644 index 0000000..a8be1e3 --- /dev/null +++ b/SOURCES/kvm-pvpanic-fix-fwcfg-for-big-endian-hosts.patch @@ -0,0 +1,53 @@ +From c5760d0c0f29b8ae540b3ca553f461874447c32f Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:32 +0100 +Subject: [PATCH 73/81] pvpanic: fix fwcfg for big endian hosts + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-5-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55549 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 4/9] pvpanic: fix fwcfg for big endian hosts +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: "Michael S. Tsirkin" + +Convert port number to little endian when +exposing it in fw cfg. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit fea7d5966a54a5e5400cd38897a95ea576b5af4d) +Signed-off-by: Marcel Apfelbaum +--- + hw/misc/pvpanic.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/pvpanic.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index 8263225..1aab787 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -99,10 +99,11 @@ static int pvpanic_isa_initfn(ISADevice *dev) + static void pvpanic_fw_cfg(ISADevice *dev, FWCfgState *fw_cfg) + { + PVPanicState *s = ISA_PVPANIC_DEVICE(dev); ++ uint16_t *pvpanic_port = g_malloc(sizeof(*pvpanic_port)); ++ *pvpanic_port = cpu_to_le16(s->ioport); + +- fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", +- g_memdup(&s->ioport, sizeof(s->ioport)), +- sizeof(s->ioport)); ++ fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", pvpanic_port, ++ sizeof(*pvpanic_port)); + } + + void pvpanic_init(ISABus *bus) +-- +1.7.1 + diff --git a/SOURCES/kvm-pvpanic-initialization-cleanup.patch b/SOURCES/kvm-pvpanic-initialization-cleanup.patch new file mode 100644 index 0000000..27b2394 --- /dev/null +++ b/SOURCES/kvm-pvpanic-initialization-cleanup.patch @@ -0,0 +1,115 @@ +From ed600bcecaa095b7cd0a6b5f52caaa3312fab840 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:31 +0100 +Subject: [PATCH 72/81] pvpanic: initialization cleanup + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-4-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55548 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 3/9] pvpanic: initialization cleanup +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: "Michael S. Tsirkin" + +Avoid use of static variables: PC systems +initialize pvpanic device through pvpanic_init, +so we can simply create the fw_cfg file at that point. +This also makes it possible to skip device +creation completely if fw_cfg is not there, e.g. for xen - +so the ports it reserves are not discoverable by guests. + +Also, make pvpanic_init void since callers ignore return +status anyway. + +Cc: Stefano Stabellini +Cc: Laszlo Ersek +Cc: Paul Durrant +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit bc3e6a0d6c8ab6cd7cd4b576ed567756f1dcabd2) +Signed-off-by: Marcel Apfelbaum + +Conflicts: + hw/misc/pvpanic.c + +Signed-off-by: Marcel Apfelbaum +--- + hw/misc/pvpanic.c | 32 +++++++++++++++++--------------- + include/hw/i386/pc.h | 2 +- + 2 files changed, 18 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/pvpanic.c | 32 +++++++++++++++++--------------- + include/hw/i386/pc.h | 2 +- + 2 files changed, 18 insertions(+), 16 deletions(-) + +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index ddd8bdd..8263225 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -89,29 +89,31 @@ static const MemoryRegionOps pvpanic_ops = { + static int pvpanic_isa_initfn(ISADevice *dev) + { + PVPanicState *s = ISA_PVPANIC_DEVICE(dev); +- static bool port_configured; +- FWCfgState *fw_cfg; + + memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1); + isa_register_ioport(dev, &s->io, s->ioport); + +- if (!port_configured) { +- fw_cfg = fw_cfg_find(); +- if (fw_cfg) { +- fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", +- g_memdup(&s->ioport, sizeof(s->ioport)), +- sizeof(s->ioport)); +- port_configured = true; +- } +- } +- + return 0; + } + +-int pvpanic_init(ISABus *bus) ++static void pvpanic_fw_cfg(ISADevice *dev, FWCfgState *fw_cfg) + { +- isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE); +- return 0; ++ PVPanicState *s = ISA_PVPANIC_DEVICE(dev); ++ ++ fw_cfg_add_file(fw_cfg, "etc/pvpanic-port", ++ g_memdup(&s->ioport, sizeof(s->ioport)), ++ sizeof(s->ioport)); ++} ++ ++void pvpanic_init(ISABus *bus) ++{ ++ ISADevice *dev; ++ FWCfgState *fw_cfg = fw_cfg_find(); ++ if (!fw_cfg) { ++ return; ++ } ++ dev = isa_create_simple (bus, TYPE_ISA_PVPANIC_DEVICE); ++ pvpanic_fw_cfg(dev, fw_cfg); + } + + static Property pvpanic_isa_properties[] = { +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 45487ba..72f6882 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -175,7 +175,7 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd) + void pc_system_firmware_init(MemoryRegion *rom_memory); + + /* pvpanic.c */ +-int pvpanic_init(ISABus *bus); ++void pvpanic_init(ISABus *bus); + + /* e820 types */ + #define E820_RAM 1 +-- +1.7.1 + diff --git a/SOURCES/kvm-pvpanic-use-FWCfgState-explicitly.patch b/SOURCES/kvm-pvpanic-use-FWCfgState-explicitly.patch new file mode 100644 index 0000000..4d122e8 --- /dev/null +++ b/SOURCES/kvm-pvpanic-use-FWCfgState-explicitly.patch @@ -0,0 +1,47 @@ +From 7b4859ac57e46ec333b331f114afc65232bea76c Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:30 +0100 +Subject: [PATCH 71/81] pvpanic: use FWCfgState explicitly + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-3-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55547 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 2/9] pvpanic: use FWCfgState explicitly +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: "Michael S. Tsirkin" + +Use the type-safe FWCfgState structure instead +of the unsafe void *. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit c3c4fe35be9f6c37388ba7615c6c33e8f4034438) +Signed-off-by: Marcel Apfelbaum +--- + hw/misc/pvpanic.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/pvpanic.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index d17c3c9..ddd8bdd 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -90,7 +90,7 @@ static int pvpanic_isa_initfn(ISADevice *dev) + { + PVPanicState *s = ISA_PVPANIC_DEVICE(dev); + static bool port_configured; +- void *fw_cfg; ++ FWCfgState *fw_cfg; + + memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1); + isa_register_ioport(dev, &s->io, s->ioport); +-- +1.7.1 + diff --git a/SOURCES/kvm-q35-expose-mmcfg-size-as-a-property.patch b/SOURCES/kvm-q35-expose-mmcfg-size-as-a-property.patch new file mode 100644 index 0000000..ac4d16f --- /dev/null +++ b/SOURCES/kvm-q35-expose-mmcfg-size-as-a-property.patch @@ -0,0 +1,83 @@ +From 3d461e82d134f7370f28ff2def581d39a3e19729 Mon Sep 17 00:00:00 2001 +Message-Id: <3d461e82d134f7370f28ff2def581d39a3e19729.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:09 +0100 +Subject: [PATCH 31/56] q35: expose mmcfg size as a property + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-32-git-send-email-mst@redhat.com> +Patchwork-id: 56337 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 31/57] q35: expose mmcfg size as a property +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Address is already exposed, expose size for symmetry. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit cbcaf79e3ce1b14084f3e3f4f64365e9bfd70e6a) +--- + include/hw/pci/pcie_host.h | 1 + + hw/pci-host/q35.c | 14 ++++++++++++++ + 2 files changed, 15 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/q35.c | 14 ++++++++++++++ + include/hw/pci/pcie_host.h | 1 + + 2 files changed, 15 insertions(+) + +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 72d97c8..87691d1 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -108,6 +108,16 @@ static void q35_host_get_pci_hole64_end(Object *obj, Visitor *v, + visit_type_uint64(v, &w64.end, name, errp); + } + ++static void q35_host_get_mmcfg_size(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ PCIExpressHost *e = PCIE_HOST_BRIDGE(obj); ++ uint32_t value = e->size; ++ ++ visit_type_uint32(v, &value, name, errp); ++} ++ + static Property mch_props[] = { + DEFINE_PROP_UINT64(PCIE_HOST_MCFG_BASE, Q35PCIHost, host.base_addr, + MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT), +@@ -152,6 +162,10 @@ static void q35_host_initfn(Object *obj) + q35_host_get_pci_hole64_end, + NULL, NULL, NULL, NULL); + ++ object_property_add(obj, PCIE_HOST_MCFG_SIZE, "int", ++ q35_host_get_mmcfg_size, ++ NULL, NULL, NULL, NULL); ++ + /* Leave enough space for the biggest MCFG BAR */ + /* TODO: this matches current bios behaviour, but + * it's not a power of two, which means an MTRR +diff --git a/include/hw/pci/pcie_host.h b/include/hw/pci/pcie_host.h +index 33d75bd..acca45e 100644 +--- a/include/hw/pci/pcie_host.h ++++ b/include/hw/pci/pcie_host.h +@@ -29,6 +29,7 @@ + OBJECT_CHECK(PCIExpressHost, (obj), TYPE_PCIE_HOST_BRIDGE) + + #define PCIE_HOST_MCFG_BASE "MCFG" ++#define PCIE_HOST_MCFG_SIZE "mcfg_size" + + /* pcie_host::base_addr == PCIE_BASE_ADDR_UNMAPPED when it isn't mapped. */ + #define PCIE_BASE_ADDR_UNMAPPED ((hwaddr)-1ULL) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-q35-gigabyle-alignment-for-ram.patch b/SOURCES/kvm-q35-gigabyle-alignment-for-ram.patch new file mode 100644 index 0000000..306bbf5 --- /dev/null +++ b/SOURCES/kvm-q35-gigabyle-alignment-for-ram.patch @@ -0,0 +1,61 @@ +From 6a2046866f4e057da661d496fc8014e5bca0d44e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 16 Jan 2014 10:25:59 +0100 +Subject: [PATCH 03/14] q35: gigabyle alignment for ram + +RH-Author: Gerd Hoffmann +Message-id: <1389867959-12463-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 56746 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/4] q35: gigabyle alignment for ram +Bugzilla: 1026548 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Igor Mammedov +RH-Acked-by: Paolo Bonzini + +Map 2G of memory below 4G, so the two RAM pieces are nicely +aligned to gigabyte borders. + +Keep old memory layout for in case all memory fits below 4G and +thus we don't have to split RAM into pieces in the first place. + +upstream: Not yet. Planned, but want sort mmconf bar issues first. + Put into rhel7 nevertheless to make life simpler for rhel8 + (i.e. no need to support gigabyte alignment the rhel6 way). + +Signed-off-by: Gerd Hoffmann +--- + hw/i386/pc_q35.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_q35.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 232c62d..7e46799 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -51,6 +51,7 @@ + static bool smbios_type1_defaults = true; + static bool has_pci_info; + static bool has_acpi_build = true; ++static bool gigabyte_align = true; + + /* PC hardware initialisation */ + static void pc_q35_init(QEMUMachineInitArgs *args) +@@ -87,8 +88,9 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + kvmclock_create(); + + if (args->ram_size >= 0xb0000000) { +- above_4g_mem_size = args->ram_size - 0xb0000000; +- below_4g_mem_size = 0xb0000000; ++ ram_addr_t lowmem = gigabyte_align ? 0x80000000 : 0xb0000000; ++ above_4g_mem_size = args->ram_size - lowmem; ++ below_4g_mem_size = lowmem; + } else { + above_4g_mem_size = 0; + below_4g_mem_size = args->ram_size; +-- +1.7.1 + diff --git a/SOURCES/kvm-q35-make-pci-window-address-size-match-guest-cfg.patch b/SOURCES/kvm-q35-make-pci-window-address-size-match-guest-cfg.patch new file mode 100644 index 0000000..fe20e1f --- /dev/null +++ b/SOURCES/kvm-q35-make-pci-window-address-size-match-guest-cfg.patch @@ -0,0 +1,58 @@ +From d07bebfe0f9a1e1cf3f25449d9c20d4c21c6e2a0 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:37 +0100 +Subject: [PATCH 19/56] q35: make pci window address/size match guest cfg + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-20-git-send-email-mst@redhat.com> +Patchwork-id: 56325 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 19/57] q35: make pci window address/size match guest cfg +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +For Q35, MMCFG address and size are guest configurable. +Update w32 property to make it behave accordingly. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 636228a887c4d5c0dc313bbf936de969b420a91a) + +Conflicts: + hw/pci-host/q35.c +--- + hw/pci-host/q35.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/q35.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index be12eee..70ad01f 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -207,6 +207,16 @@ static void mch_update_pciexbar(MCHPCIState *mch) + } + addr = pciexbar & addr_mask; + pcie_host_mmcfg_update(&s->host, enable, addr, length); ++ /* Leave enough space for the MCFG BAR */ ++ /* ++ * TODO: this matches current bios behaviour, but it's not a power of two, ++ * which means an MTRR can't cover it exactly. ++ */ ++ if (enable) { ++ mch->pci_info.w32.begin = addr + length; ++ } else { ++ mch->pci_info.w32.begin = MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT; ++ } + } + + /* PAM */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-q35-use-64-bit-window-programmed-by-guest.patch b/SOURCES/kvm-q35-use-64-bit-window-programmed-by-guest.patch new file mode 100644 index 0000000..39228f0 --- /dev/null +++ b/SOURCES/kvm-q35-use-64-bit-window-programmed-by-guest.patch @@ -0,0 +1,67 @@ +From 05a8be73352b862049cfe74b38b10634187c5830 Mon Sep 17 00:00:00 2001 +Message-Id: <05a8be73352b862049cfe74b38b10634187c5830.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:40 +0100 +Subject: [PATCH 20/56] q35: use 64 bit window programmed by guest + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-21-git-send-email-mst@redhat.com> +Patchwork-id: 56326 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 20/57] q35: use 64 bit window programmed by guest +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Detect the 64 bit window programmed by firmware +and configure properties accordingly. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 8b42d730e3401084720f4ba59d1e18a0d6c67dc6) +--- + hw/pci-host/q35.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/q35.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 70ad01f..943e55f 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -88,18 +88,24 @@ static void q35_host_get_pci_hole64_start(Object *obj, Visitor *v, + void *opaque, const char *name, + Error **errp) + { +- Q35PCIHost *s = Q35_HOST_DEVICE(obj); ++ PCIHostState *h = PCI_HOST_BRIDGE(obj); ++ Range w64; ++ ++ pci_bus_get_w64_range(h->bus, &w64); + +- visit_type_uint64(v, &s->mch.pci_info.w64.begin, name, errp); ++ visit_type_uint64(v, &w64.begin, name, errp); + } + + static void q35_host_get_pci_hole64_end(Object *obj, Visitor *v, + void *opaque, const char *name, + Error **errp) + { +- Q35PCIHost *s = Q35_HOST_DEVICE(obj); ++ PCIHostState *h = PCI_HOST_BRIDGE(obj); ++ Range w64; ++ ++ pci_bus_get_w64_range(h->bus, &w64); + +- visit_type_uint64(v, &s->mch.pci_info.w64.end, name, errp); ++ visit_type_uint64(v, &w64.end, name, errp); + } + + static Property mch_props[] = { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-q35-use-macro-for-MCFG-property-name.patch b/SOURCES/kvm-q35-use-macro-for-MCFG-property-name.patch new file mode 100644 index 0000000..7ffcb49 --- /dev/null +++ b/SOURCES/kvm-q35-use-macro-for-MCFG-property-name.patch @@ -0,0 +1,70 @@ +From c22f2592addb5fdd998feefc802395cf59095497 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:18:06 +0100 +Subject: [PATCH 30/56] q35: use macro for MCFG property name + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-31-git-send-email-mst@redhat.com> +Patchwork-id: 56336 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 30/57] q35: use macro for MCFG property name +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Useful to make it accessible through QOM. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 87f65245db4665edff22242c17546954d9d59c82) + +Conflicts: + hw/pci-host/q35.c +--- + include/hw/pci/pcie_host.h | 2 ++ + hw/pci-host/q35.c | 4 ++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/pci-host/q35.c | 4 ++-- + include/hw/pci/pcie_host.h | 2 ++ + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c +index 05779b8..72d97c8 100644 +--- a/hw/pci-host/q35.c ++++ b/hw/pci-host/q35.c +@@ -109,8 +109,8 @@ static void q35_host_get_pci_hole64_end(Object *obj, Visitor *v, + } + + static Property mch_props[] = { +- DEFINE_PROP_UINT64("MCFG", Q35PCIHost, host.base_addr, +- MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT), ++ DEFINE_PROP_UINT64(PCIE_HOST_MCFG_BASE, Q35PCIHost, host.base_addr, ++ MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT), + DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, Q35PCIHost, + mch.pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE), + DEFINE_PROP_END_OF_LIST(), +diff --git a/include/hw/pci/pcie_host.h b/include/hw/pci/pcie_host.h +index da0f275..33d75bd 100644 +--- a/include/hw/pci/pcie_host.h ++++ b/include/hw/pci/pcie_host.h +@@ -28,6 +28,8 @@ + #define PCIE_HOST_BRIDGE(obj) \ + OBJECT_CHECK(PCIExpressHost, (obj), TYPE_PCIE_HOST_BRIDGE) + ++#define PCIE_HOST_MCFG_BASE "MCFG" ++ + /* pcie_host::base_addr == PCIE_BASE_ADDR_UNMAPPED when it isn't mapped. */ + #define PCIE_BASE_ADDR_UNMAPPED ((hwaddr)-1ULL) + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-Add-ImageInfoSpecific-type.patch b/SOURCES/kvm-qapi-Add-ImageInfoSpecific-type.patch new file mode 100644 index 0000000..48ff22c --- /dev/null +++ b/SOURCES/kvm-qapi-Add-ImageInfoSpecific-type.patch @@ -0,0 +1,80 @@ +From d9c7fbe85bdeec60e97ba0c484dd9a88c0ba4994 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:34 +0100 +Subject: [PATCH 77/87] qapi: Add ImageInfoSpecific type + +RH-Author: Max Reitz +Message-id: <1383756824-6921-12-git-send-email-mreitz@redhat.com> +Patchwork-id: 55566 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 11/21] qapi: Add ImageInfoSpecific type +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +BZ: 980771 + +Add a new type ImageInfoSpecific as a union for image format specific +information in ImageInfo. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit f2bb8a8a47597634b74c161c44b9980c7f4e50ac) + +Signed-off-by: Max Reitz +--- + qapi-schema.json | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 18 +++++++++++++++++- + 1 files changed, 17 insertions(+), 1 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 4091b99..934ac7f 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -210,6 +210,18 @@ + 'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } } + + ## ++# @ImageInfoSpecific: ++# ++# A discriminated record of image format specific information structures. ++# ++# Since: 1.7 ++## ++ ++{ 'union': 'ImageInfoSpecific', ++ 'data': { ++ } } ++ ++## + # @ImageInfo: + # + # Information about a QEMU image file +@@ -238,6 +250,9 @@ + # + # @backing-image: #optional info of the backing image (since 1.6) + # ++# @format-specific: #optional structure supplying additional format-specific ++# information (since 1.7) ++# + # Since: 1.3 + # + ## +@@ -248,7 +263,8 @@ + '*cluster-size': 'int', '*encrypted': 'bool', + '*backing-filename': 'str', '*full-backing-filename': 'str', + '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'], +- '*backing-image': 'ImageInfo' } } ++ '*backing-image': 'ImageInfo', ++ '*format-specific': 'ImageInfoSpecific' } } + + ## + # @ImageCheck: +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Add-backing-to-BlockStats.patch b/SOURCES/kvm-qapi-Add-backing-to-BlockStats.patch new file mode 100644 index 0000000..95b59ca --- /dev/null +++ b/SOURCES/kvm-qapi-Add-backing-to-BlockStats.patch @@ -0,0 +1,84 @@ +From ec69926313e8edae11091849f536b1f16da53ab7 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 27 Jan 2014 07:46:43 +0100 +Subject: [PATCH 19/22] qapi: Add "backing" to BlockStats + +RH-Author: Fam Zheng +Message-id: <1390808803-6464-1-git-send-email-famz@redhat.com> +Patchwork-id: 56952 +O-Subject: [RHEL-7 qemu-kvm PATCH] qapi: Add "backing" to BlockStats +Bugzilla: 1041564 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1041564 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6949016 + +Currently there is no way to query BlockStats of the backing chain. This +adds "backing" field into BlockStats to make it possible. + +The comment of "parent" is reworded. + +Signed-off-by: Fam Zheng +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit c8059b97e1f9b4635b836ee98373a0f72f9fc0b4) +Signed-off-by: Fam Zheng +--- + block/qapi.c | 5 +++++ + qapi-schema.json | 10 ++++++---- + 2 files changed, 11 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qapi.c | 5 +++++ + qapi-schema.json | 10 ++++++---- + 2 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index 87423fb..77e1719 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -295,6 +295,11 @@ BlockStats *bdrv_query_stats(const BlockDriverState *bs) + s->parent = bdrv_query_stats(bs->file); + } + ++ if (bs->backing_hd) { ++ s->has_backing = true; ++ s->backing = bdrv_query_stats(bs->backing_hd); ++ } ++ + return s; + } + +diff --git a/qapi-schema.json b/qapi-schema.json +index 6158ea5..8b257e2 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1007,15 +1007,17 @@ + # + # @stats: A @BlockDeviceStats for the device. + # +-# @parent: #optional This may point to the backing block device if this is a +-# a virtual block device. If it's a backing block, this will point +-# to the backing file is one is present. ++# @parent: #optional This describes the file block device if it has one. ++# ++# @backing: #optional This describes the backing block device if it has one. ++# (Since 2.0) + # + # Since: 0.14.0 + ## + { 'type': 'BlockStats', + 'data': {'*device': 'str', 'stats': 'BlockDeviceStats', +- '*parent': 'BlockStats'} } ++ '*parent': 'BlockStats', ++ '*backing': 'BlockStats'} } + + ## + # @query-blockstats: +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Add-consume-argument-to-qmp_input_get_object.patch b/SOURCES/kvm-qapi-Add-consume-argument-to-qmp_input_get_object.patch new file mode 100644 index 0000000..3827358 --- /dev/null +++ b/SOURCES/kvm-qapi-Add-consume-argument-to-qmp_input_get_object.patch @@ -0,0 +1,120 @@ +From adef92fecbb5d4e37e5e513954c088f9f1704418 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:13 +0200 +Subject: [PATCH 22/38] qapi: Add consume argument to qmp_input_get_object() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-23-git-send-email-kwolf@redhat.com> +Patchwork-id: 54209 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 22/32] qapi: Add consume argument to qmp_input_get_object() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This allows to just look at the next element without actually consuming +it. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit e8316d7e8e8339a9ea593ba821a0aad26908c0d5) + +Signed-off-by: Kevin Wolf +--- + qapi/qmp-input-visitor.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi/qmp-input-visitor.c | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c +index 59c5cac..70864a1 100644 +--- a/qapi/qmp-input-visitor.c ++++ b/qapi/qmp-input-visitor.c +@@ -41,13 +41,14 @@ static QmpInputVisitor *to_qiv(Visitor *v) + } + + static QObject *qmp_input_get_object(QmpInputVisitor *qiv, +- const char *name) ++ const char *name, ++ bool consume) + { + QObject *qobj = qiv->stack[qiv->nb_stack - 1].obj; + + if (qobj) { + if (name && qobject_type(qobj) == QTYPE_QDICT) { +- if (qiv->stack[qiv->nb_stack - 1].h) { ++ if (qiv->stack[qiv->nb_stack - 1].h && consume) { + g_hash_table_remove(qiv->stack[qiv->nb_stack - 1].h, name); + } + return qdict_get(qobject_to_qdict(qobj), name); +@@ -117,7 +118,7 @@ static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind, + const char *name, size_t size, Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + Error *err = NULL; + + if (!qobj || qobject_type(qobj) != QTYPE_QDICT) { +@@ -159,7 +160,7 @@ static void qmp_input_end_implicit_struct(Visitor *v, Error **errp) + static void qmp_input_start_list(Visitor *v, const char *name, Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + + if (!qobj || qobject_type(qobj) != QTYPE_QLIST) { + error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", +@@ -211,7 +212,7 @@ static void qmp_input_type_int(Visitor *v, int64_t *obj, const char *name, + Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + + if (!qobj || qobject_type(qobj) != QTYPE_QINT) { + error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", +@@ -226,7 +227,7 @@ static void qmp_input_type_bool(Visitor *v, bool *obj, const char *name, + Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + + if (!qobj || qobject_type(qobj) != QTYPE_QBOOL) { + error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", +@@ -241,7 +242,7 @@ static void qmp_input_type_str(Visitor *v, char **obj, const char *name, + Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + + if (!qobj || qobject_type(qobj) != QTYPE_QSTRING) { + error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", +@@ -256,7 +257,7 @@ static void qmp_input_type_number(Visitor *v, double *obj, const char *name, + Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + + if (!qobj || (qobject_type(qobj) != QTYPE_QFLOAT && + qobject_type(qobj) != QTYPE_QINT)) { +@@ -276,7 +277,7 @@ static void qmp_input_start_optional(Visitor *v, bool *present, + const char *name, Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +- QObject *qobj = qmp_input_get_object(qiv, name); ++ QObject *qobj = qmp_input_get_object(qiv, name, true); + + if (!qobj) { + *present = false; +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Add-optional-field-compressed-to-ImageInfo.patch b/SOURCES/kvm-qapi-Add-optional-field-compressed-to-ImageInfo.patch new file mode 100644 index 0000000..c8fe4f5 --- /dev/null +++ b/SOURCES/kvm-qapi-Add-optional-field-compressed-to-ImageInfo.patch @@ -0,0 +1,58 @@ +From db5a450f4c4b6f409573366eea87512ab3043dbe Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:42 +0100 +Subject: [PATCH 85/87] qapi: Add optional field 'compressed' to ImageInfo + +RH-Author: Max Reitz +Message-id: <1383756824-6921-20-git-send-email-mreitz@redhat.com> +Patchwork-id: 55574 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 19/21] qapi: Add optional field 'compressed' to ImageInfo +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit cbe82d7fb32e5d8e76434671d50853df5f50d560) + +Signed-off-by: Max Reitz +--- + qapi-schema.json | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 3c00ddd..99b05b7 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -256,6 +256,8 @@ + # + # @encrypted: #optional true if the image is encrypted + # ++# @compressed: #optional true if the image is compressed (Since 1.7) ++# + # @backing-filename: #optional name of the backing file + # + # @full-backing-filename: #optional full path of the backing file +@@ -276,7 +278,7 @@ + { 'type': 'ImageInfo', + 'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool', + '*actual-size': 'int', 'virtual-size': 'int', +- '*cluster-size': 'int', '*encrypted': 'bool', ++ '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool', + '*backing-filename': 'str', '*full-backing-filename': 'str', + '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'], + '*backing-image': 'ImageInfo', +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Add-visitor-for-implicit-structs.patch b/SOURCES/kvm-qapi-Add-visitor-for-implicit-structs.patch new file mode 100644 index 0000000..5599aca --- /dev/null +++ b/SOURCES/kvm-qapi-Add-visitor-for-implicit-structs.patch @@ -0,0 +1,132 @@ +From a2a326f0a6b544335c49432248201fb811f1fc2b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:11 +0200 +Subject: [PATCH 20/38] qapi: Add visitor for implicit structs + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-21-git-send-email-kwolf@redhat.com> +Patchwork-id: 54207 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 20/32] qapi: Add visitor for implicit structs +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +These can be used when an embedded struct is parsed and members not +belonging to the struct may be present in the input (e.g. parsing a +flat namespace QMP union, where fields from both the base and one +of the alternative types are mixed in the JSON object) + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 761d524dbcc5bb41213dd0f238f43c273bc2b077) + +Signed-off-by: Kevin Wolf +--- + include/qapi/visitor-impl.h | 4 ++++ + include/qapi/visitor.h | 3 +++ + qapi/qapi-visit-core.c | 16 ++++++++++++++++ + qapi/qmp-input-visitor.c | 14 ++++++++++++++ + 4 files changed, 37 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qapi/visitor-impl.h | 4 ++++ + include/qapi/visitor.h | 3 +++ + qapi/qapi-visit-core.c | 16 ++++++++++++++++ + qapi/qmp-input-visitor.c | 14 ++++++++++++++ + 4 files changed, 37 insertions(+), 0 deletions(-) + +diff --git a/include/qapi/visitor-impl.h b/include/qapi/visitor-impl.h +index 5159964..5c1297f 100644 +--- a/include/qapi/visitor-impl.h ++++ b/include/qapi/visitor-impl.h +@@ -22,6 +22,10 @@ struct Visitor + const char *name, size_t size, Error **errp); + void (*end_struct)(Visitor *v, Error **errp); + ++ void (*start_implicit_struct)(Visitor *v, void **obj, size_t size, ++ Error **errp); ++ void (*end_implicit_struct)(Visitor *v, Error **errp); ++ + void (*start_list)(Visitor *v, const char *name, Error **errp); + GenericList *(*next_list)(Visitor *v, GenericList **list, Error **errp); + void (*end_list)(Visitor *v, Error **errp); +diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h +index 1fef18c..a1cdd81 100644 +--- a/include/qapi/visitor.h ++++ b/include/qapi/visitor.h +@@ -30,6 +30,9 @@ void visit_end_handle(Visitor *v, Error **errp); + void visit_start_struct(Visitor *v, void **obj, const char *kind, + const char *name, size_t size, Error **errp); + void visit_end_struct(Visitor *v, Error **errp); ++void visit_start_implicit_struct(Visitor *v, void **obj, size_t size, ++ Error **errp); ++void visit_end_implicit_struct(Visitor *v, Error **errp); + void visit_start_list(Visitor *v, const char *name, Error **errp); + GenericList *visit_next_list(Visitor *v, GenericList **list, Error **errp); + void visit_end_list(Visitor *v, Error **errp); +diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c +index 401ee6e..9b4d51b 100644 +--- a/qapi/qapi-visit-core.c ++++ b/qapi/qapi-visit-core.c +@@ -45,6 +45,22 @@ void visit_end_struct(Visitor *v, Error **errp) + v->end_struct(v, errp); + } + ++void visit_start_implicit_struct(Visitor *v, void **obj, size_t size, ++ Error **errp) ++{ ++ if (!error_is_set(errp) && v->start_implicit_struct) { ++ v->start_implicit_struct(v, obj, size, errp); ++ } ++} ++ ++void visit_end_implicit_struct(Visitor *v, Error **errp) ++{ ++ assert(!error_is_set(errp)); ++ if (v->end_implicit_struct) { ++ v->end_implicit_struct(v, errp); ++ } ++} ++ + void visit_start_list(Visitor *v, const char *name, Error **errp) + { + if (!error_is_set(errp)) { +diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c +index 67fb127..59c5cac 100644 +--- a/qapi/qmp-input-visitor.c ++++ b/qapi/qmp-input-visitor.c +@@ -144,6 +144,18 @@ static void qmp_input_end_struct(Visitor *v, Error **errp) + qmp_input_pop(qiv, errp); + } + ++static void qmp_input_start_implicit_struct(Visitor *v, void **obj, ++ size_t size, Error **errp) ++{ ++ if (obj) { ++ *obj = g_malloc0(size); ++ } ++} ++ ++static void qmp_input_end_implicit_struct(Visitor *v, Error **errp) ++{ ++} ++ + static void qmp_input_start_list(Visitor *v, const char *name, Error **errp) + { + QmpInputVisitor *qiv = to_qiv(v); +@@ -293,6 +305,8 @@ QmpInputVisitor *qmp_input_visitor_new(QObject *obj) + + v->visitor.start_struct = qmp_input_start_struct; + v->visitor.end_struct = qmp_input_end_struct; ++ v->visitor.start_implicit_struct = qmp_input_start_implicit_struct; ++ v->visitor.end_implicit_struct = qmp_input_end_implicit_struct; + v->visitor.start_list = qmp_input_start_list; + v->visitor.next_list = qmp_input_next_list; + v->visitor.end_list = qmp_input_end_list; +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Anonymous-unions.patch b/SOURCES/kvm-qapi-Anonymous-unions.patch new file mode 100644 index 0000000..fc7c27c --- /dev/null +++ b/SOURCES/kvm-qapi-Anonymous-unions.patch @@ -0,0 +1,379 @@ +From fafd52c6d2c32e24ae83b4d534c6e2f72f53795d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:16 +0200 +Subject: [PATCH 25/38] qapi: Anonymous unions + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-26-git-send-email-kwolf@redhat.com> +Patchwork-id: 54212 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 25/32] qapi: Anonymous unions +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +The discriminator for anonymous unions is the data type. This allows to +have a union type that allows both of these: + + { 'file': 'my_existing_block_device_id' } + { 'file': { 'filename': '/tmp/mydisk.qcow2', 'read-only': true } } + +Unions like this are specified in the schema with an empty dict as +discriminator. For this example you could take: + + { 'union': 'BlockRef', + 'discriminator': {}, + 'data': { 'definition': 'BlockOptions', + 'reference': 'str' } } + { 'type': 'ExampleObject', + 'data: { 'file': 'BlockRef' } } + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 69dd62dfd60631ba69201d8a197fde1ece4b4df3) + +Signed-off-by: Kevin Wolf +--- + docs/qapi-code-gen.txt | 25 ++++++++++++++++++++++++ + include/qapi/qmp/qobject.h | 1 + + include/qapi/visitor-impl.h | 2 ++ + include/qapi/visitor.h | 3 +++ + qapi/qapi-visit-core.c | 9 +++++++++ + qapi/qmp-input-visitor.c | 14 ++++++++++++++ + qobject/qjson.c | 2 ++ + scripts/qapi-types.py | 42 ++++++++++++++++++++++++++++++++++++++++ + scripts/qapi-visit.py | 47 +++++++++++++++++++++++++++++++++++++++++++++ + scripts/qapi.py | 15 +++++++++++++++ + 10 files changed, 160 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + docs/qapi-code-gen.txt | 25 ++++++++++++++++++++++ + include/qapi/qmp/qobject.h | 1 + + include/qapi/visitor-impl.h | 2 + + include/qapi/visitor.h | 3 ++ + qapi/qapi-visit-core.c | 9 ++++++++ + qapi/qmp-input-visitor.c | 14 ++++++++++++ + qobject/qjson.c | 2 + + scripts/qapi-types.py | 42 ++++++++++++++++++++++++++++++++++++++ + scripts/qapi-visit.py | 47 +++++++++++++++++++++++++++++++++++++++++++ + scripts/qapi.py | 15 +++++++++++++ + 10 files changed, 160 insertions(+), 0 deletions(-) + +diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt +index 11f19cf..0ce045c 100644 +--- a/docs/qapi-code-gen.txt ++++ b/docs/qapi-code-gen.txt +@@ -125,6 +125,31 @@ Resulting in this JSON object: + "lazy-refcounts": true } + + ++A special type of unions are anonymous unions. They don't form a dictionary in ++the wire format but allow the direct use of different types in their place. As ++they aren't structured, they don't have any explicit discriminator but use ++the (QObject) data type of their value as an implicit discriminator. This means ++that they are restricted to using only one discriminator value per QObject ++type. For example, you cannot have two different complex types in an anonymous ++union, or two different integer types. ++ ++Anonymous unions are declared using an empty dictionary as their discriminator. ++The discriminator values never appear on the wire, they are only used in the ++generated C code. Anonymous unions cannot have a base type. ++ ++ { 'union': 'BlockRef', ++ 'discriminator': {}, ++ 'data': { 'definition': 'BlockdevOptions', ++ 'reference': 'str' } } ++ ++This example allows using both of the following example objects: ++ ++ { "file": "my_existing_block_device_id" } ++ { "file": { "driver": "file", ++ "readonly": false, ++ 'filename': "/tmp/mydisk.qcow2" } } ++ ++ + === Commands === + + Commands are defined by using a list containing three members. The first +diff --git a/include/qapi/qmp/qobject.h b/include/qapi/qmp/qobject.h +index 9124649..d0bbc7c 100644 +--- a/include/qapi/qmp/qobject.h ++++ b/include/qapi/qmp/qobject.h +@@ -44,6 +44,7 @@ typedef enum { + QTYPE_QFLOAT, + QTYPE_QBOOL, + QTYPE_QERROR, ++ QTYPE_MAX, + } qtype_code; + + struct QObject; +diff --git a/include/qapi/visitor-impl.h b/include/qapi/visitor-impl.h +index 5c1297f..f3fa420 100644 +--- a/include/qapi/visitor-impl.h ++++ b/include/qapi/visitor-impl.h +@@ -32,6 +32,8 @@ struct Visitor + + void (*type_enum)(Visitor *v, int *obj, const char *strings[], + const char *kind, const char *name, Error **errp); ++ void (*get_next_type)(Visitor *v, int *kind, const int *qobjects, ++ const char *name, Error **errp); + + void (*type_int)(Visitor *v, int64_t *obj, const char *name, Error **errp); + void (*type_bool)(Visitor *v, bool *obj, const char *name, Error **errp); +diff --git a/include/qapi/visitor.h b/include/qapi/visitor.h +index a1cdd81..aa9e771 100644 +--- a/include/qapi/visitor.h ++++ b/include/qapi/visitor.h +@@ -13,6 +13,7 @@ + #ifndef QAPI_VISITOR_CORE_H + #define QAPI_VISITOR_CORE_H + ++#include "qapi/qmp/qobject.h" + #include "qapi/error.h" + #include + +@@ -39,6 +40,8 @@ void visit_end_list(Visitor *v, Error **errp); + void visit_start_optional(Visitor *v, bool *present, const char *name, + Error **errp); + void visit_end_optional(Visitor *v, Error **errp); ++void visit_get_next_type(Visitor *v, int *obj, const int *qtypes, ++ const char *name, Error **errp); + void visit_type_enum(Visitor *v, int *obj, const char *strings[], + const char *kind, const char *name, Error **errp); + void visit_type_int(Visitor *v, int64_t *obj, const char *name, Error **errp); +diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c +index 9b4d51b..d6a4012 100644 +--- a/qapi/qapi-visit-core.c ++++ b/qapi/qapi-visit-core.c +@@ -12,6 +12,7 @@ + */ + + #include "qemu-common.h" ++#include "qapi/qmp/qobject.h" + #include "qapi/qmp/qerror.h" + #include "qapi/visitor.h" + #include "qapi/visitor-impl.h" +@@ -98,6 +99,14 @@ void visit_end_optional(Visitor *v, Error **errp) + } + } + ++void visit_get_next_type(Visitor *v, int *obj, const int *qtypes, ++ const char *name, Error **errp) ++{ ++ if (!error_is_set(errp) && v->get_next_type) { ++ v->get_next_type(v, obj, qtypes, name, errp); ++ } ++} ++ + void visit_type_enum(Visitor *v, int *obj, const char *strings[], + const char *kind, const char *name, Error **errp) + { +diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c +index 70864a1..bf42c04 100644 +--- a/qapi/qmp-input-visitor.c ++++ b/qapi/qmp-input-visitor.c +@@ -208,6 +208,19 @@ static void qmp_input_end_list(Visitor *v, Error **errp) + qmp_input_pop(qiv, errp); + } + ++static void qmp_input_get_next_type(Visitor *v, int *kind, const int *qobjects, ++ const char *name, Error **errp) ++{ ++ QmpInputVisitor *qiv = to_qiv(v); ++ QObject *qobj = qmp_input_get_object(qiv, name, false); ++ ++ if (!qobj) { ++ error_set(errp, QERR_MISSING_PARAMETER, name ? name : "null"); ++ return; ++ } ++ *kind = qobjects[qobject_type(qobj)]; ++} ++ + static void qmp_input_type_int(Visitor *v, int64_t *obj, const char *name, + Error **errp) + { +@@ -317,6 +330,7 @@ QmpInputVisitor *qmp_input_visitor_new(QObject *obj) + v->visitor.type_str = qmp_input_type_str; + v->visitor.type_number = qmp_input_type_number; + v->visitor.start_optional = qmp_input_start_optional; ++ v->visitor.get_next_type = qmp_input_get_next_type; + + qmp_input_push(v, obj, NULL); + qobject_incref(obj); +diff --git a/qobject/qjson.c b/qobject/qjson.c +index 19085a1..6cf2511 100644 +--- a/qobject/qjson.c ++++ b/qobject/qjson.c +@@ -260,6 +260,8 @@ static void to_json(const QObject *obj, QString *str, int pretty, int indent) + /* XXX: should QError be emitted? */ + case QTYPE_NONE: + break; ++ case QTYPE_MAX: ++ abort(); + } + } + +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index 3d9af3c..20f4bdf 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -144,6 +144,40 @@ typedef enum %(name)s + + return lookup_decl + enum_decl + ++def generate_anon_union_qtypes(expr): ++ ++ name = expr['union'] ++ members = expr['data'] ++ ++ ret = mcgen(''' ++const int %(name)s_qtypes[QTYPE_MAX] = { ++''', ++ name=name) ++ ++ for key in members: ++ qapi_type = members[key] ++ if builtin_type_qtypes.has_key(qapi_type): ++ qtype = builtin_type_qtypes[qapi_type] ++ elif find_struct(qapi_type): ++ qtype = "QTYPE_QDICT" ++ elif find_union(qapi_type): ++ qtype = "QTYPE_QDICT" ++ else: ++ assert False, "Invalid anonymous union member" ++ ++ ret += mcgen(''' ++ [ %(qtype)s ] = %(abbrev)s_KIND_%(enum)s, ++''', ++ qtype = qtype, ++ abbrev = de_camel_case(name).upper(), ++ enum = c_fun(de_camel_case(key),False).upper()) ++ ++ ret += mcgen(''' ++}; ++''') ++ return ret ++ ++ + def generate_union(expr): + + name = expr['union'] +@@ -184,6 +218,12 @@ struct %(name)s + ret += mcgen(''' + }; + ''') ++ if discriminator == {}: ++ ret += mcgen(''' ++extern const int %(name)s_qtypes[]; ++''', ++ name=name) ++ + + return ret + +@@ -336,6 +376,8 @@ for expr in exprs: + ret += generate_fwd_struct(expr['union'], expr['data']) + "\n" + ret += generate_enum('%sKind' % expr['union'], expr['data'].keys()) + fdef.write(generate_enum_lookup('%sKind' % expr['union'], expr['data'].keys())) ++ if expr.get('discriminator') == {}: ++ fdef.write(generate_anon_union_qtypes(expr)) + else: + continue + fdecl.write(ret) +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index b1c1ad6..367cf7a 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -176,6 +176,49 @@ void visit_type_%(name)s(Visitor *m, %(name)s * obj, const char *name, Error **e + ''', + name=name) + ++def generate_visit_anon_union(name, members): ++ ret = mcgen(''' ++ ++void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error **errp) ++{ ++ Error *err = NULL; ++ ++ if (!error_is_set(errp)) { ++ visit_start_implicit_struct(m, (void**) obj, sizeof(%(name)s), &err); ++ visit_get_next_type(m, (int*) &(*obj)->kind, %(name)s_qtypes, name, &err); ++ switch ((*obj)->kind) { ++''', ++ name=name) ++ ++ for key in members: ++ assert (members[key] in builtin_types ++ or find_struct(members[key]) ++ or find_union(members[key])), "Invalid anonymous union member" ++ ++ ret += mcgen(''' ++ case %(abbrev)s_KIND_%(enum)s: ++ visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, name, &err); ++ break; ++''', ++ abbrev = de_camel_case(name).upper(), ++ enum = c_fun(de_camel_case(key),False).upper(), ++ c_type = type_name(members[key]), ++ c_name = c_fun(key)) ++ ++ ret += mcgen(''' ++ default: ++ abort(); ++ } ++ error_propagate(errp, err); ++ err = NULL; ++ visit_end_implicit_struct(m, &err); ++ } ++} ++''') ++ ++ return ret ++ ++ + def generate_visit_union(expr): + + name = expr['union'] +@@ -184,6 +227,10 @@ def generate_visit_union(expr): + base = expr.get('base') + discriminator = expr.get('discriminator') + ++ if discriminator == {}: ++ assert not base ++ return generate_visit_anon_union(name, members) ++ + ret = generate_visit_enum('%sKind' % name, members.keys()) + + if base: +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 3a54c7f..38c808e 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -17,6 +17,21 @@ builtin_types = [ + 'uint8', 'uint16', 'uint32', 'uint64' + ] + ++builtin_type_qtypes = { ++ 'str': 'QTYPE_QSTRING', ++ 'int': 'QTYPE_QINT', ++ 'number': 'QTYPE_QFLOAT', ++ 'bool': 'QTYPE_QBOOL', ++ 'int8': 'QTYPE_QINT', ++ 'int16': 'QTYPE_QINT', ++ 'int32': 'QTYPE_QINT', ++ 'int64': 'QTYPE_QINT', ++ 'uint8': 'QTYPE_QINT', ++ 'uint16': 'QTYPE_QINT', ++ 'uint32': 'QTYPE_QINT', ++ 'uint64': 'QTYPE_QINT', ++} ++ + def tokenize(data): + while len(data): + ch = data[0] +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Flat-unions-with-arbitrary-discriminator.patch b/SOURCES/kvm-qapi-Flat-unions-with-arbitrary-discriminator.patch new file mode 100644 index 0000000..6efb8f0 --- /dev/null +++ b/SOURCES/kvm-qapi-Flat-unions-with-arbitrary-discriminator.patch @@ -0,0 +1,284 @@ +From e25370368e98e6d8766e50b7f13e3543e1c3ef9b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:12 +0200 +Subject: [PATCH 21/38] qapi: Flat unions with arbitrary discriminator + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-22-git-send-email-kwolf@redhat.com> +Patchwork-id: 54208 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 21/32] qapi: Flat unions with arbitrary discriminator +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Instead of the rather verbose syntax that distinguishes base and +subclass fields... + + { "type": "file", + "read-only": true, + "data": { + "filename": "test" + } } + +...we can now have both in the same namespace, allowing a more direct +mapping of the command line, and moving fields between the common base +and subclasses without breaking the API: + + { "driver": "file", + "read-only": true, + "filename": "test" } + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 50f2bdc75c5ee00617ad874c9ceac2cea660aa1e) + +Signed-off-by: Kevin Wolf +--- + docs/qapi-code-gen.txt | 22 ++++++++++++ + scripts/qapi-types.py | 11 ++++-- + scripts/qapi-visit.py | 90 +++++++++++++++++++++++++++++++++++++------------- + 3 files changed, 98 insertions(+), 25 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + docs/qapi-code-gen.txt | 22 ++++++++++++ + scripts/qapi-types.py | 11 +++++- + scripts/qapi-visit.py | 90 +++++++++++++++++++++++++++++++++++------------ + 3 files changed, 98 insertions(+), 25 deletions(-) + +diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt +index f6f8d33..11f19cf 100644 +--- a/docs/qapi-code-gen.txt ++++ b/docs/qapi-code-gen.txt +@@ -103,6 +103,28 @@ And it looks like this on the wire: + "data" : { "backing-file": "/some/place/my-image", + "lazy-refcounts": true } } + ++ ++Flat union types avoid the nesting on the wire. They are used whenever a ++specific field of the base type is declared as the discriminator ('type' is ++then no longer generated). The discriminator must always be a string field. ++The above example can then be modified as follows: ++ ++ { 'type': 'BlockdevCommonOptions', ++ 'data': { 'driver': 'str', 'readonly': 'bool' } } ++ { 'union': 'BlockdevOptions', ++ 'base': 'BlockdevCommonOptions', ++ 'discriminator': 'driver', ++ 'data': { 'raw': 'RawOptions', ++ 'qcow2': 'Qcow2Options' } } ++ ++Resulting in this JSON object: ++ ++ { "driver": "qcow2", ++ "readonly": false, ++ "backing-file": "/some/place/my-image", ++ "lazy-refcounts": true } ++ ++ + === Commands === + + Commands are defined by using a list containing three members. The first +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index c0684a7..f139bfe 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -135,7 +135,9 @@ def generate_union(expr): + + name = expr['union'] + typeinfo = expr['data'] ++ + base = expr.get('base') ++ discriminator = expr.get('discriminator') + + ret = mcgen(''' + struct %(name)s +@@ -158,8 +160,13 @@ struct %(name)s + ''') + + if base: +- struct = find_struct(base) +- ret += generate_struct_fields(struct['data']) ++ base_fields = find_struct(base)['data'] ++ if discriminator: ++ base_fields = base_fields.copy() ++ del base_fields[discriminator] ++ ret += generate_struct_fields(base_fields) ++ else: ++ assert not discriminator + + ret += mcgen(''' + }; +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index be56ba4..b1c1ad6 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -17,8 +17,30 @@ import os + import getopt + import errno + +-def generate_visit_struct_fields(field_prefix, members): ++def generate_visit_struct_fields(name, field_prefix, fn_prefix, members): ++ substructs = [] + ret = '' ++ full_name = name if not fn_prefix else "%s_%s" % (name, fn_prefix) ++ ++ for argname, argentry, optional, structured in parse_args(members): ++ if structured: ++ if not fn_prefix: ++ nested_fn_prefix = argname ++ else: ++ nested_fn_prefix = "%s_%s" % (fn_prefix, argname) ++ ++ nested_field_prefix = "%s%s." % (field_prefix, argname) ++ ret += generate_visit_struct_fields(name, nested_field_prefix, ++ nested_fn_prefix, argentry) ++ ++ ret += mcgen(''' ++ ++static void visit_type_%(full_name)s_fields(Visitor *m, %(name)s ** obj, Error **errp) ++{ ++ Error *err = NULL; ++''', ++ name=name, full_name=full_name) ++ push_indent() + + for argname, argentry, optional, structured in parse_args(members): + if optional: +@@ -31,7 +53,7 @@ if (obj && (*obj)->%(prefix)shas_%(c_name)s) { + push_indent() + + if structured: +- ret += generate_visit_struct_body(field_prefix + argname, argname, argentry) ++ ret += generate_visit_struct_body(full_name, argname, argentry) + else: + ret += mcgen(''' + visit_type_%(type)s(m, obj ? &(*obj)->%(c_prefix)s%(c_name)s : NULL, "%(name)s", &err); +@@ -47,6 +69,12 @@ visit_type_%(type)s(m, obj ? &(*obj)->%(c_prefix)s%(c_name)s : NULL, "%(name)s", + visit_end_optional(m, &err); + ''') + ++ pop_indent() ++ ret += mcgen(''' ++ ++ error_propagate(errp, err); ++} ++''') + return ret + + +@@ -56,8 +84,9 @@ if (!error_is_set(errp)) { + ''') + push_indent() + ++ full_name = name if not field_prefix else "%s_%s" % (field_prefix, name) ++ + if len(field_prefix): +- field_prefix = field_prefix + "." + ret += mcgen(''' + Error **errp = &err; /* from outer scope */ + Error *err = NULL; +@@ -74,20 +103,14 @@ visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(name)s), &err); + ret += mcgen(''' + if (!err) { + if (!obj || *obj) { +-''') +- push_indent() +- push_indent() +- +- ret += generate_visit_struct_fields(field_prefix, members) +- pop_indent() +- ret += mcgen(''' +- error_propagate(errp, err); +- err = NULL; +-} +-''') ++ visit_type_%(name)s_fields(m, obj, &err); ++ error_propagate(errp, err); ++ err = NULL; ++ } ++''', ++ name=full_name) + + pop_indent() +- pop_indent() + ret += mcgen(''' + /* Always call end_struct if start_struct succeeded. */ + visit_end_struct(m, &err); +@@ -98,7 +121,9 @@ if (!err) { + return ret + + def generate_visit_struct(name, members): +- ret = mcgen(''' ++ ret = generate_visit_struct_fields(name, "", "", members) ++ ++ ret += mcgen(''' + + void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error **errp) + { +@@ -157,9 +182,17 @@ def generate_visit_union(expr): + members = expr['data'] + + base = expr.get('base') ++ discriminator = expr.get('discriminator') + + ret = generate_visit_enum('%sKind' % name, members.keys()) + ++ if base: ++ base_fields = find_struct(base)['data'] ++ if discriminator: ++ base_fields = base_fields.copy() ++ del base_fields[discriminator] ++ ret += generate_visit_struct_fields(name, "", "", base_fields) ++ + ret += mcgen(''' + + void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error **errp) +@@ -179,23 +212,34 @@ void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error ** + push_indent() + + if base: +- struct = find_struct(base) +- push_indent() +- ret += generate_visit_struct_fields("", struct['data']) +- pop_indent() ++ ret += mcgen(''' ++ visit_type_%(name)s_fields(m, obj, &err); ++''', ++ name=name) + + pop_indent() + ret += mcgen(''' +- visit_type_%(name)sKind(m, &(*obj)->kind, "type", &err); ++ visit_type_%(name)sKind(m, &(*obj)->kind, "%(type)s", &err); + if (!err) { + switch ((*obj)->kind) { + ''', +- name=name) ++ name=name, type="type" if not discriminator else discriminator) + + for key in members: ++ if not discriminator: ++ fmt = 'visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, "data", &err);' ++ else: ++ fmt = '''visit_start_implicit_struct(m, (void**) &(*obj)->%(c_name)s, sizeof(%(c_type)s), &err); ++ if (!err) { ++ visit_type_%(c_type)s_fields(m, &(*obj)->%(c_name)s, &err); ++ error_propagate(errp, err); ++ err = NULL; ++ visit_end_implicit_struct(m, &err); ++ }''' ++ + ret += mcgen(''' + case %(abbrev)s_KIND_%(enum)s: +- visit_type_%(c_type)s(m, &(*obj)->%(c_name)s, "data", &err); ++ ''' + fmt + ''' + break; + ''', + abbrev = de_camel_case(name).upper(), +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-Introduce-enum-BlockJobType.patch b/SOURCES/kvm-qapi-Introduce-enum-BlockJobType.patch new file mode 100644 index 0000000..5fa35e1 --- /dev/null +++ b/SOURCES/kvm-qapi-Introduce-enum-BlockJobType.patch @@ -0,0 +1,63 @@ +From bcfb39087baadf3aaf96b78f38093e4ed7951df4 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:55 +0100 +Subject: [PATCH 12/34] qapi: Introduce enum BlockJobType + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-11-git-send-email-famz@redhat.com> +Patchwork-id: 56772 +O-Subject: [RHEL-7 qemu-kvm PATCH 10/18] qapi: Introduce enum BlockJobType +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +This will replace the open coded block job type string for mirror, +commit and backup. + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 2cb5b22286a7546226d9e9363aaee543fcba6b61) +Signed-off-by: Fam Zheng +--- + qapi-schema.json | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 761512d..b0bd53c 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1407,6 +1407,24 @@ + 'data': ['top', 'full', 'none'] } + + ## ++# @BlockJobType: ++# ++# Type of a block job. ++# ++# @commit: block commit job type, see "block-commit" ++# ++# @stream: block stream job type, see "block-stream" ++# ++# @mirror: drive mirror job type, see "drive-mirror" ++# ++# @backup: drive backup job type, see "drive-backup" ++# ++# Since: 1.7 ++## ++{ 'enum': 'BlockJobType', ++ 'data': ['commit', 'stream', 'mirror', 'backup'] } ++ ++## + # @BlockJobInfo: + # + # Information about a long-running block device operation. +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-add-QMP-input-test-for-large-integers.patch b/SOURCES/kvm-qapi-add-QMP-input-test-for-large-integers.patch new file mode 100644 index 0000000..af3731e --- /dev/null +++ b/SOURCES/kvm-qapi-add-QMP-input-test-for-large-integers.patch @@ -0,0 +1,84 @@ +From 889862b6101fb71fd19fdae0ffa18815446be0a5 Mon Sep 17 00:00:00 2001 +Message-Id: <889862b6101fb71fd19fdae0ffa18815446be0a5.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:05 +0100 +Subject: [PATCH 05/21] qapi: add QMP input test for large integers + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56123 +O-Subject: [PATCH 7.0 qemu-kvm 02/18] qapi: add QMP input test for large integers +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Michael Roth + +Large integers previously got capped to LLONG_MAX/LLONG_MIN so we could +store them as int64_t. This could lead to silent errors occuring. + +Now, we use a double to handle these cases. + +Add a test to confirm that QMPInputVisitor handles this as expected if +we're expected an integer value: errors for out of range integer values +that got promoted to doubles in this fashion. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit e92cfa0d90c618ff1f131c60ef1b27aa6fe69a0a) +Signed-off-by: Markus Armbruster +--- + tests/test-qmp-input-visitor.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +Signed-off-by: Michal Novotny +--- + tests/test-qmp-input-visitor.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/tests/test-qmp-input-visitor.c b/tests/test-qmp-input-visitor.c +index 955a4c0..b308cf9 100644 +--- a/tests/test-qmp-input-visitor.c ++++ b/tests/test-qmp-input-visitor.c +@@ -75,6 +75,24 @@ static void test_visitor_in_int(TestInputVisitorData *data, + g_assert_cmpint(res, ==, value); + } + ++static void test_visitor_in_int_overflow(TestInputVisitorData *data, ++ const void *unused) ++{ ++ int64_t res = 0; ++ Error *errp = NULL; ++ Visitor *v; ++ ++ /* this will overflow a Qint/int64, so should be deserialized into ++ * a QFloat/double field instead, leading to an error if we pass it ++ * to visit_type_int. confirm this. ++ */ ++ v = visitor_input_test_init(data, "%f", DBL_MAX); ++ ++ visit_type_int(v, &res, NULL, &errp); ++ g_assert(error_is_set(&errp)); ++ error_free(errp); ++} ++ + static void test_visitor_in_bool(TestInputVisitorData *data, + const void *unused) + { +@@ -292,6 +310,8 @@ int main(int argc, char **argv) + + input_visitor_test_add("/visitor/input/int", + &in_visitor_data, test_visitor_in_int); ++ input_visitor_test_add("/visitor/input/int_overflow", ++ &in_visitor_data, test_visitor_in_int_overflow); + input_visitor_test_add("/visitor/input/bool", + &in_visitor_data, test_visitor_in_bool); + input_visitor_test_add("/visitor/input/number", +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-add-native-list-coverage-for-QMP-input-visitor-.patch b/SOURCES/kvm-qapi-add-native-list-coverage-for-QMP-input-visitor-.patch new file mode 100644 index 0000000..0780109 --- /dev/null +++ b/SOURCES/kvm-qapi-add-native-list-coverage-for-QMP-input-visitor-.patch @@ -0,0 +1,404 @@ +From e88b00eb5e1f4785827445fe5b06b590ebae7d7b Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:09 +0100 +Subject: [PATCH 09/21] qapi: add native list coverage for QMP input visitor + tests + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-7-git-send-email-armbru@redhat.com> +Patchwork-id: 56125 +O-Subject: [PATCH 7.0 qemu-kvm 06/18] qapi: add native list coverage for QMP input visitor tests +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Michael Roth + +This exercises schema-generated visitors for native list types and does +some sanity checking on validity of deserialized data. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 199e0f17f23a68c8d619e9e623d970324ed5efc1) +Signed-off-by: Markus Armbruster +--- + tests/test-qmp-input-visitor.c | 338 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 338 insertions(+) + +Signed-off-by: Michal Novotny +--- + tests/test-qmp-input-visitor.c | 338 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 338 insertions(+) + +diff --git a/tests/test-qmp-input-visitor.c b/tests/test-qmp-input-visitor.c +index b308cf9..2741eef 100644 +--- a/tests/test-qmp-input-visitor.c ++++ b/tests/test-qmp-input-visitor.c +@@ -61,6 +61,31 @@ Visitor *visitor_input_test_init(TestInputVisitorData *data, + return v; + } + ++/* similar to visitor_input_test_init(), but does not expect a string ++ * literal/format json_string argument and so can be used for ++ * programatically generated strings (and we can't pass in programatically ++ * generated strings via %s format parameters since qobject_from_jsonv() ++ * will wrap those in double-quotes and treat the entire object as a ++ * string) ++ */ ++static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data, ++ const char *json_string) ++{ ++ Visitor *v; ++ ++ data->obj = qobject_from_json(json_string); ++ ++ g_assert(data->obj != NULL); ++ ++ data->qiv = qmp_input_visitor_new(data->obj); ++ g_assert(data->qiv != NULL); ++ ++ v = qmp_input_get_visitor(data->qiv); ++ g_assert(v != NULL); ++ ++ return v; ++} ++ + static void test_visitor_in_int(TestInputVisitorData *data, + const void *unused) + { +@@ -277,6 +302,287 @@ static void test_visitor_in_union(TestInputVisitorData *data, + qapi_free_UserDefUnion(tmp); + } + ++static void test_native_list_integer_helper(TestInputVisitorData *data, ++ const void *unused, ++ UserDefNativeListUnionKind kind) ++{ ++ UserDefNativeListUnion *cvalue = NULL; ++ Error *err = NULL; ++ Visitor *v; ++ GString *gstr_list = g_string_new(""); ++ GString *gstr_union = g_string_new(""); ++ int i; ++ ++ for (i = 0; i < 32; i++) { ++ g_string_append_printf(gstr_list, "%d", i); ++ if (i != 31) { ++ g_string_append(gstr_list, ", "); ++ } ++ } ++ g_string_append_printf(gstr_union, "{ 'type': '%s', 'data': [ %s ] }", ++ UserDefNativeListUnionKind_lookup[kind], ++ gstr_list->str); ++ v = visitor_input_test_init_raw(data, gstr_union->str); ++ ++ visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &err); ++ g_assert(err == NULL); ++ g_assert(cvalue != NULL); ++ g_assert_cmpint(cvalue->kind, ==, kind); ++ ++ switch (kind) { ++ case USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER: { ++ intList *elem = NULL; ++ for (i = 0, elem = cvalue->integer; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S8: { ++ int8List *elem = NULL; ++ for (i = 0, elem = cvalue->s8; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S16: { ++ int16List *elem = NULL; ++ for (i = 0, elem = cvalue->s16; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S32: { ++ int32List *elem = NULL; ++ for (i = 0, elem = cvalue->s32; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S64: { ++ int64List *elem = NULL; ++ for (i = 0, elem = cvalue->s64; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U8: { ++ uint8List *elem = NULL; ++ for (i = 0, elem = cvalue->u8; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U16: { ++ uint16List *elem = NULL; ++ for (i = 0, elem = cvalue->u16; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U32: { ++ uint32List *elem = NULL; ++ for (i = 0, elem = cvalue->u32; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U64: { ++ uint64List *elem = NULL; ++ for (i = 0, elem = cvalue->u64; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, i); ++ } ++ break; ++ } ++ default: ++ g_assert(false); ++ } ++ ++ g_string_free(gstr_union, true); ++ g_string_free(gstr_list, true); ++ qapi_free_UserDefNativeListUnion(cvalue); ++} ++ ++static void test_visitor_in_native_list_int(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER); ++} ++ ++static void test_visitor_in_native_list_int8(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_S8); ++} ++ ++static void test_visitor_in_native_list_int16(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_S16); ++} ++ ++static void test_visitor_in_native_list_int32(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_S32); ++} ++ ++static void test_visitor_in_native_list_int64(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_S64); ++} ++ ++static void test_visitor_in_native_list_uint8(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_U8); ++} ++ ++static void test_visitor_in_native_list_uint16(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_U16); ++} ++ ++static void test_visitor_in_native_list_uint32(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_U32); ++} ++ ++static void test_visitor_in_native_list_uint64(TestInputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list_integer_helper(data, unused, ++ USER_DEF_NATIVE_LIST_UNION_KIND_U64); ++} ++ ++static void test_visitor_in_native_list_bool(TestInputVisitorData *data, ++ const void *unused) ++{ ++ UserDefNativeListUnion *cvalue = NULL; ++ boolList *elem = NULL; ++ Error *err = NULL; ++ Visitor *v; ++ GString *gstr_list = g_string_new(""); ++ GString *gstr_union = g_string_new(""); ++ int i; ++ ++ for (i = 0; i < 32; i++) { ++ g_string_append_printf(gstr_list, "%s", ++ (i % 3 == 0) ? "true" : "false"); ++ if (i != 31) { ++ g_string_append(gstr_list, ", "); ++ } ++ } ++ g_string_append_printf(gstr_union, "{ 'type': 'boolean', 'data': [ %s ] }", ++ gstr_list->str); ++ v = visitor_input_test_init_raw(data, gstr_union->str); ++ ++ visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &err); ++ g_assert(err == NULL); ++ g_assert(cvalue != NULL); ++ g_assert_cmpint(cvalue->kind, ==, USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN); ++ ++ for (i = 0, elem = cvalue->boolean; elem; elem = elem->next, i++) { ++ g_assert_cmpint(elem->value, ==, (i % 3 == 0) ? 1 : 0); ++ } ++ ++ g_string_free(gstr_union, true); ++ g_string_free(gstr_list, true); ++ qapi_free_UserDefNativeListUnion(cvalue); ++} ++ ++static void test_visitor_in_native_list_string(TestInputVisitorData *data, ++ const void *unused) ++{ ++ UserDefNativeListUnion *cvalue = NULL; ++ strList *elem = NULL; ++ Error *err = NULL; ++ Visitor *v; ++ GString *gstr_list = g_string_new(""); ++ GString *gstr_union = g_string_new(""); ++ int i; ++ ++ for (i = 0; i < 32; i++) { ++ g_string_append_printf(gstr_list, "'%d'", i); ++ if (i != 31) { ++ g_string_append(gstr_list, ", "); ++ } ++ } ++ g_string_append_printf(gstr_union, "{ 'type': 'string', 'data': [ %s ] }", ++ gstr_list->str); ++ v = visitor_input_test_init_raw(data, gstr_union->str); ++ ++ visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &err); ++ g_assert(err == NULL); ++ g_assert(cvalue != NULL); ++ g_assert_cmpint(cvalue->kind, ==, USER_DEF_NATIVE_LIST_UNION_KIND_STRING); ++ ++ for (i = 0, elem = cvalue->string; elem; elem = elem->next, i++) { ++ gchar str[8]; ++ sprintf(str, "%d", i); ++ g_assert_cmpstr(elem->value, ==, str); ++ } ++ ++ g_string_free(gstr_union, true); ++ g_string_free(gstr_list, true); ++ qapi_free_UserDefNativeListUnion(cvalue); ++} ++ ++#define DOUBLE_STR_MAX 16 ++ ++static void test_visitor_in_native_list_number(TestInputVisitorData *data, ++ const void *unused) ++{ ++ UserDefNativeListUnion *cvalue = NULL; ++ numberList *elem = NULL; ++ Error *err = NULL; ++ Visitor *v; ++ GString *gstr_list = g_string_new(""); ++ GString *gstr_union = g_string_new(""); ++ int i; ++ ++ for (i = 0; i < 32; i++) { ++ g_string_append_printf(gstr_list, "%f", (double)i / 3); ++ if (i != 31) { ++ g_string_append(gstr_list, ", "); ++ } ++ } ++ g_string_append_printf(gstr_union, "{ 'type': 'number', 'data': [ %s ] }", ++ gstr_list->str); ++ v = visitor_input_test_init_raw(data, gstr_union->str); ++ ++ visit_type_UserDefNativeListUnion(v, &cvalue, NULL, &err); ++ g_assert(err == NULL); ++ g_assert(cvalue != NULL); ++ g_assert_cmpint(cvalue->kind, ==, USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER); ++ ++ for (i = 0, elem = cvalue->number; elem; elem = elem->next, i++) { ++ GString *double_expected = g_string_new(""); ++ GString *double_actual = g_string_new(""); ++ ++ g_string_printf(double_expected, "%.6f", (double)i / 3); ++ g_string_printf(double_actual, "%.6f", elem->value); ++ g_assert_cmpstr(double_expected->str, ==, double_actual->str); ++ ++ g_string_free(double_expected, true); ++ g_string_free(double_actual, true); ++ } ++ ++ g_string_free(gstr_union, true); ++ g_string_free(gstr_list, true); ++ qapi_free_UserDefNativeListUnion(cvalue); ++} ++ + static void input_visitor_test_add(const char *testpath, + TestInputVisitorData *data, + void (*test_func)(TestInputVisitorData *data, const void *user_data)) +@@ -330,6 +636,38 @@ int main(int argc, char **argv) + &in_visitor_data, test_visitor_in_union); + input_visitor_test_add("/visitor/input/errors", + &in_visitor_data, test_visitor_in_errors); ++ input_visitor_test_add("/visitor/input/native_list/int", ++ &in_visitor_data, ++ test_visitor_in_native_list_int); ++ input_visitor_test_add("/visitor/input/native_list/int8", ++ &in_visitor_data, ++ test_visitor_in_native_list_int8); ++ input_visitor_test_add("/visitor/input/native_list/int16", ++ &in_visitor_data, ++ test_visitor_in_native_list_int16); ++ input_visitor_test_add("/visitor/input/native_list/int32", ++ &in_visitor_data, ++ test_visitor_in_native_list_int32); ++ input_visitor_test_add("/visitor/input/native_list/int64", ++ &in_visitor_data, ++ test_visitor_in_native_list_int64); ++ input_visitor_test_add("/visitor/input/native_list/uint8", ++ &in_visitor_data, ++ test_visitor_in_native_list_uint8); ++ input_visitor_test_add("/visitor/input/native_list/uint16", ++ &in_visitor_data, ++ test_visitor_in_native_list_uint16); ++ input_visitor_test_add("/visitor/input/native_list/uint32", ++ &in_visitor_data, ++ test_visitor_in_native_list_uint32); ++ input_visitor_test_add("/visitor/input/native_list/uint64", ++ &in_visitor_data, test_visitor_in_native_list_uint64); ++ input_visitor_test_add("/visitor/input/native_list/bool", ++ &in_visitor_data, test_visitor_in_native_list_bool); ++ input_visitor_test_add("/visitor/input/native_list/str", ++ &in_visitor_data, test_visitor_in_native_list_string); ++ input_visitor_test_add("/visitor/input/native_list/number", ++ &in_visitor_data, test_visitor_in_native_list_number); + + g_test_run(); + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-add-native-list-coverage-for-QMP-output-visitor.patch b/SOURCES/kvm-qapi-add-native-list-coverage-for-QMP-output-visitor.patch new file mode 100644 index 0000000..52d5d7e --- /dev/null +++ b/SOURCES/kvm-qapi-add-native-list-coverage-for-QMP-output-visitor.patch @@ -0,0 +1,419 @@ +From 45c69be7596bc6d158f56ec94c5f465a2030a8e5 Mon Sep 17 00:00:00 2001 +Message-Id: <45c69be7596bc6d158f56ec94c5f465a2030a8e5.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:08 +0100 +Subject: [PATCH 08/21] qapi: add native list coverage for QMP output visitor + tests + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-6-git-send-email-armbru@redhat.com> +Patchwork-id: 56135 +O-Subject: [PATCH 7.0 qemu-kvm 05/18] qapi: add native list coverage for QMP output visitor tests +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Michael Roth + +This exercises schema-generated visitors for native list types and does +some sanity checking on validity of serialized data. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 83c84667f57637fe5a7a6fc9905d6a9e9589d3e5) +Signed-off-by: Markus Armbruster +--- + qapi-schema-test.json | 15 ++ + tests/test-qmp-output-visitor.c | 332 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 347 insertions(+) + +Signed-off-by: Michal Novotny +--- + qapi-schema-test.json | 15 ++ + tests/test-qmp-output-visitor.c | 332 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 347 insertions(+) + +diff --git a/qapi-schema-test.json b/qapi-schema-test.json +index 9eae350..4434fa3 100644 +--- a/qapi-schema-test.json ++++ b/qapi-schema-test.json +@@ -32,6 +32,21 @@ + { 'union': 'UserDefUnion', + 'data': { 'a' : 'UserDefA', 'b' : 'UserDefB' } } + ++# for testing native lists ++{ 'union': 'UserDefNativeListUnion', ++ 'data': { 'integer': ['int'], ++ 's8': ['int8'], ++ 's16': ['int16'], ++ 's32': ['int32'], ++ 's64': ['int64'], ++ 'u8': ['uint8'], ++ 'u16': ['uint16'], ++ 'u32': ['uint32'], ++ 'u64': ['uint64'], ++ 'number': ['number'], ++ 'boolean': ['bool'], ++ 'string': ['str'] } } ++ + # testing commands + { 'command': 'user_def_cmd', 'data': {} } + { 'command': 'user_def_cmd1', 'data': {'ud1a': 'UserDefOne'} } +diff --git a/tests/test-qmp-output-visitor.c b/tests/test-qmp-output-visitor.c +index 71367e6..0942a41 100644 +--- a/tests/test-qmp-output-visitor.c ++++ b/tests/test-qmp-output-visitor.c +@@ -431,6 +431,314 @@ static void test_visitor_out_union(TestOutputVisitorData *data, + QDECREF(qdict); + } + ++static void init_native_list(UserDefNativeListUnion *cvalue) ++{ ++ int i; ++ switch (cvalue->kind) { ++ case USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER: { ++ intList **list = &cvalue->integer; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(intList, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S8: { ++ int8List **list = &cvalue->s8; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(int8List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S16: { ++ int16List **list = &cvalue->s16; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(int16List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S32: { ++ int32List **list = &cvalue->s32; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(int32List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S64: { ++ int64List **list = &cvalue->s64; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(int64List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U8: { ++ uint8List **list = &cvalue->u8; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(uint8List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U16: { ++ uint16List **list = &cvalue->u16; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(uint16List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U32: { ++ uint32List **list = &cvalue->u32; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(uint32List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U64: { ++ uint64List **list = &cvalue->u64; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(uint64List, 1); ++ (*list)->value = i; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN: { ++ boolList **list = &cvalue->boolean; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(boolList, 1); ++ (*list)->value = (i % 3 == 0); ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_STRING: { ++ strList **list = &cvalue->string; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(strList, 1); ++ (*list)->value = g_strdup_printf("%d", i); ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ case USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER: { ++ numberList **list = &cvalue->number; ++ for (i = 0; i < 32; i++) { ++ *list = g_new0(numberList, 1); ++ (*list)->value = (double)i / 3; ++ (*list)->next = NULL; ++ list = &(*list)->next; ++ } ++ break; ++ } ++ default: ++ g_assert(false); ++ } ++} ++ ++static void check_native_list(QObject *qobj, ++ UserDefNativeListUnionKind kind) ++{ ++ QDict *qdict; ++ QList *qlist; ++ int i; ++ ++ g_assert(qobj); ++ g_assert(qobject_type(qobj) == QTYPE_QDICT); ++ qdict = qobject_to_qdict(qobj); ++ g_assert(qdict); ++ g_assert(qdict_haskey(qdict, "data")); ++ qlist = qlist_copy(qobject_to_qlist(qdict_get(qdict, "data"))); ++ ++ switch (kind) { ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S8: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S16: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S32: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_S64: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U8: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U16: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U32: ++ case USER_DEF_NATIVE_LIST_UNION_KIND_U64: ++ /* all integer elements in JSON arrays get stored into QInts when ++ * we convert to QObjects, so we can check them all in the same ++ * fashion, so simply fall through here ++ */ ++ case USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER: ++ for (i = 0; i < 32; i++) { ++ QObject *tmp; ++ QInt *qvalue; ++ tmp = qlist_peek(qlist); ++ g_assert(tmp); ++ qvalue = qobject_to_qint(tmp); ++ g_assert_cmpint(qint_get_int(qvalue), ==, i); ++ qobject_decref(qlist_pop(qlist)); ++ } ++ break; ++ case USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN: ++ for (i = 0; i < 32; i++) { ++ QObject *tmp; ++ QBool *qvalue; ++ tmp = qlist_peek(qlist); ++ g_assert(tmp); ++ qvalue = qobject_to_qbool(tmp); ++ g_assert_cmpint(qbool_get_int(qvalue), ==, (i % 3 == 0) ? 1 : 0); ++ qobject_decref(qlist_pop(qlist)); ++ } ++ break; ++ case USER_DEF_NATIVE_LIST_UNION_KIND_STRING: ++ for (i = 0; i < 32; i++) { ++ QObject *tmp; ++ QString *qvalue; ++ gchar str[8]; ++ tmp = qlist_peek(qlist); ++ g_assert(tmp); ++ qvalue = qobject_to_qstring(tmp); ++ sprintf(str, "%d", i); ++ g_assert_cmpstr(qstring_get_str(qvalue), ==, str); ++ qobject_decref(qlist_pop(qlist)); ++ } ++ break; ++ case USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER: ++ for (i = 0; i < 32; i++) { ++ QObject *tmp; ++ QFloat *qvalue; ++ GString *double_expected = g_string_new(""); ++ GString *double_actual = g_string_new(""); ++ ++ tmp = qlist_peek(qlist); ++ g_assert(tmp); ++ qvalue = qobject_to_qfloat(tmp); ++ g_string_printf(double_expected, "%.6f", (double)i / 3); ++ g_string_printf(double_actual, "%.6f", qfloat_get_double(qvalue)); ++ g_assert_cmpstr(double_actual->str, ==, double_expected->str); ++ ++ qobject_decref(qlist_pop(qlist)); ++ g_string_free(double_expected, true); ++ g_string_free(double_actual, true); ++ } ++ break; ++ default: ++ g_assert(false); ++ } ++ QDECREF(qlist); ++} ++ ++static void test_native_list(TestOutputVisitorData *data, ++ const void *unused, ++ UserDefNativeListUnionKind kind) ++{ ++ UserDefNativeListUnion *cvalue = g_new0(UserDefNativeListUnion, 1); ++ Error *err = NULL; ++ QObject *obj; ++ ++ cvalue->kind = kind; ++ init_native_list(cvalue); ++ ++ visit_type_UserDefNativeListUnion(data->ov, &cvalue, NULL, &err); ++ g_assert(err == NULL); ++ ++ obj = qmp_output_get_qobject(data->qov); ++ check_native_list(obj, cvalue->kind); ++ qapi_free_UserDefNativeListUnion(cvalue); ++ qobject_decref(obj); ++} ++ ++static void test_visitor_out_native_list_int(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_INTEGER); ++} ++ ++static void test_visitor_out_native_list_int8(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S8); ++} ++ ++static void test_visitor_out_native_list_int16(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S16); ++} ++ ++static void test_visitor_out_native_list_int32(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S32); ++} ++ ++static void test_visitor_out_native_list_int64(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_S64); ++} ++ ++static void test_visitor_out_native_list_uint8(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U8); ++} ++ ++static void test_visitor_out_native_list_uint16(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U16); ++} ++ ++static void test_visitor_out_native_list_uint32(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U32); ++} ++ ++static void test_visitor_out_native_list_uint64(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_U64); ++} ++ ++static void test_visitor_out_native_list_bool(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_BOOLEAN); ++} ++ ++static void test_visitor_out_native_list_str(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_STRING); ++} ++ ++static void test_visitor_out_native_list_number(TestOutputVisitorData *data, ++ const void *unused) ++{ ++ test_native_list(data, unused, USER_DEF_NATIVE_LIST_UNION_KIND_NUMBER); ++} ++ + static void output_visitor_test_add(const char *testpath, + TestOutputVisitorData *data, + void (*test_func)(TestOutputVisitorData *data, const void *user_data)) +@@ -471,6 +779,30 @@ int main(int argc, char **argv) + &out_visitor_data, test_visitor_out_list_qapi_free); + output_visitor_test_add("/visitor/output/union", + &out_visitor_data, test_visitor_out_union); ++ output_visitor_test_add("/visitor/output/native_list/int", ++ &out_visitor_data, test_visitor_out_native_list_int); ++ output_visitor_test_add("/visitor/output/native_list/int8", ++ &out_visitor_data, test_visitor_out_native_list_int8); ++ output_visitor_test_add("/visitor/output/native_list/int16", ++ &out_visitor_data, test_visitor_out_native_list_int16); ++ output_visitor_test_add("/visitor/output/native_list/int32", ++ &out_visitor_data, test_visitor_out_native_list_int32); ++ output_visitor_test_add("/visitor/output/native_list/int64", ++ &out_visitor_data, test_visitor_out_native_list_int64); ++ output_visitor_test_add("/visitor/output/native_list/uint8", ++ &out_visitor_data, test_visitor_out_native_list_uint8); ++ output_visitor_test_add("/visitor/output/native_list/uint16", ++ &out_visitor_data, test_visitor_out_native_list_uint16); ++ output_visitor_test_add("/visitor/output/native_list/uint32", ++ &out_visitor_data, test_visitor_out_native_list_uint32); ++ output_visitor_test_add("/visitor/output/native_list/uint64", ++ &out_visitor_data, test_visitor_out_native_list_uint64); ++ output_visitor_test_add("/visitor/output/native_list/bool", ++ &out_visitor_data, test_visitor_out_native_list_bool); ++ output_visitor_test_add("/visitor/output/native_list/string", ++ &out_visitor_data, test_visitor_out_native_list_str); ++ output_visitor_test_add("/visitor/output/native_list/number", ++ &out_visitor_data, test_visitor_out_native_list_number); + + g_test_run(); + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-add-native-list-coverage-for-visitor-serializat.patch b/SOURCES/kvm-qapi-add-native-list-coverage-for-visitor-serializat.patch new file mode 100644 index 0000000..4e874cc --- /dev/null +++ b/SOURCES/kvm-qapi-add-native-list-coverage-for-visitor-serializat.patch @@ -0,0 +1,551 @@ +From ee8b63caea8d46e37f7229fc420f4a61ed72a9a6 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:07 +0100 +Subject: [PATCH 07/21] qapi: add native list coverage for visitor + serialization tests + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-5-git-send-email-armbru@redhat.com> +Patchwork-id: 56124 +O-Subject: [PATCH 7.0 qemu-kvm 04/18] qapi: add native list coverage for visitor serialization tests +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Michael Roth + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 8addacddfece619f1795fcf6cb9a3c49f800e7b9) +Signed-off-by: Markus Armbruster +--- + tests/test-visitor-serialization.c | 451 +++++++++++++++++++++++++++++++++++-- + 1 file changed, 433 insertions(+), 18 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/test-visitor-serialization.c | 451 +++++++++++++++++++++++++++++++++++-- + 1 file changed, 433 insertions(+), 18 deletions(-) + +diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c +index fed6810..ee7916b 100644 +--- a/tests/test-visitor-serialization.c ++++ b/tests/test-visitor-serialization.c +@@ -23,6 +23,25 @@ + #include "qapi/qmp-output-visitor.h" + #include "qapi/string-input-visitor.h" + #include "qapi/string-output-visitor.h" ++#include "qapi-types.h" ++#include "qapi-visit.h" ++#include "qapi/dealloc-visitor.h" ++ ++enum PrimitiveTypeKind { ++ PTYPE_STRING = 0, ++ PTYPE_BOOLEAN, ++ PTYPE_NUMBER, ++ PTYPE_INTEGER, ++ PTYPE_U8, ++ PTYPE_U16, ++ PTYPE_U32, ++ PTYPE_U64, ++ PTYPE_S8, ++ PTYPE_S16, ++ PTYPE_S32, ++ PTYPE_S64, ++ PTYPE_EOL, ++}; + + typedef struct PrimitiveType { + union { +@@ -40,26 +59,42 @@ typedef struct PrimitiveType { + int64_t s64; + intmax_t max; + } value; +- enum { +- PTYPE_STRING = 0, +- PTYPE_BOOLEAN, +- PTYPE_NUMBER, +- PTYPE_INTEGER, +- PTYPE_U8, +- PTYPE_U16, +- PTYPE_U32, +- PTYPE_U64, +- PTYPE_S8, +- PTYPE_S16, +- PTYPE_S32, +- PTYPE_S64, +- PTYPE_EOL, +- } type; ++ enum PrimitiveTypeKind type; + const char *description; + } PrimitiveType; + ++typedef struct PrimitiveList { ++ union { ++ strList *strings; ++ boolList *booleans; ++ numberList *numbers; ++ intList *integers; ++ int8List *s8_integers; ++ int16List *s16_integers; ++ int32List *s32_integers; ++ int64List *s64_integers; ++ uint8List *u8_integers; ++ uint16List *u16_integers; ++ uint32List *u32_integers; ++ uint64List *u64_integers; ++ } value; ++ enum PrimitiveTypeKind type; ++ const char *description; ++} PrimitiveList; ++ + /* test helpers */ + ++typedef void (*VisitorFunc)(Visitor *v, void **native, Error **errp); ++ ++static void dealloc_helper(void *native_in, VisitorFunc visit, Error **errp) ++{ ++ QapiDeallocVisitor *qdv = qapi_dealloc_visitor_new(); ++ ++ visit(qapi_dealloc_get_visitor(qdv), &native_in, errp); ++ ++ qapi_dealloc_visitor_cleanup(qdv); ++} ++ + static void visit_primitive_type(Visitor *v, void **native, Error **errp) + { + PrimitiveType *pt = *native; +@@ -105,6 +140,51 @@ static void visit_primitive_type(Visitor *v, void **native, Error **errp) + } + } + ++static void visit_primitive_list(Visitor *v, void **native, Error **errp) ++{ ++ PrimitiveList *pl = *native; ++ switch (pl->type) { ++ case PTYPE_STRING: ++ visit_type_strList(v, &pl->value.strings, NULL, errp); ++ break; ++ case PTYPE_BOOLEAN: ++ visit_type_boolList(v, &pl->value.booleans, NULL, errp); ++ break; ++ case PTYPE_NUMBER: ++ visit_type_numberList(v, &pl->value.numbers, NULL, errp); ++ break; ++ case PTYPE_INTEGER: ++ visit_type_intList(v, &pl->value.integers, NULL, errp); ++ break; ++ case PTYPE_S8: ++ visit_type_int8List(v, &pl->value.s8_integers, NULL, errp); ++ break; ++ case PTYPE_S16: ++ visit_type_int16List(v, &pl->value.s16_integers, NULL, errp); ++ break; ++ case PTYPE_S32: ++ visit_type_int32List(v, &pl->value.s32_integers, NULL, errp); ++ break; ++ case PTYPE_S64: ++ visit_type_int64List(v, &pl->value.s64_integers, NULL, errp); ++ break; ++ case PTYPE_U8: ++ visit_type_uint8List(v, &pl->value.u8_integers, NULL, errp); ++ break; ++ case PTYPE_U16: ++ visit_type_uint16List(v, &pl->value.u16_integers, NULL, errp); ++ break; ++ case PTYPE_U32: ++ visit_type_uint32List(v, &pl->value.u32_integers, NULL, errp); ++ break; ++ case PTYPE_U64: ++ visit_type_uint64List(v, &pl->value.u64_integers, NULL, errp); ++ break; ++ default: ++ g_assert(false); ++ } ++} ++ + typedef struct TestStruct + { + int64_t integer; +@@ -206,12 +286,11 @@ static void visit_nested_struct_list(Visitor *v, void **native, Error **errp) + + /* test cases */ + +-typedef void (*VisitorFunc)(Visitor *v, void **native, Error **errp); +- + typedef enum VisitorCapabilities { + VCAP_PRIMITIVES = 1, + VCAP_STRUCTURES = 2, + VCAP_LISTS = 4, ++ VCAP_PRIMITIVE_LISTS = 8, + } VisitorCapabilities; + + typedef struct SerializeOps { +@@ -270,6 +349,328 @@ static void test_primitives(gconstpointer opaque) + g_free(pt_copy); + } + ++static void test_primitive_lists(gconstpointer opaque) ++{ ++ TestArgs *args = (TestArgs *) opaque; ++ const SerializeOps *ops = args->ops; ++ PrimitiveType *pt = args->test_data; ++ PrimitiveList pl = { .value = { 0 } }; ++ PrimitiveList pl_copy = { .value = { 0 } }; ++ PrimitiveList *pl_copy_ptr = &pl_copy; ++ Error *err = NULL; ++ void *serialize_data; ++ void *cur_head = NULL; ++ int i; ++ ++ pl.type = pl_copy.type = pt->type; ++ ++ /* build up our list of primitive types */ ++ for (i = 0; i < 32; i++) { ++ switch (pl.type) { ++ case PTYPE_STRING: { ++ strList *tmp = g_new0(strList, 1); ++ tmp->value = g_strdup(pt->value.string); ++ if (pl.value.strings == NULL) { ++ pl.value.strings = tmp; ++ } else { ++ tmp->next = pl.value.strings; ++ pl.value.strings = tmp; ++ } ++ break; ++ } ++ case PTYPE_INTEGER: { ++ intList *tmp = g_new0(intList, 1); ++ tmp->value = pt->value.integer; ++ if (pl.value.integers == NULL) { ++ pl.value.integers = tmp; ++ } else { ++ tmp->next = pl.value.integers; ++ pl.value.integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_S8: { ++ int8List *tmp = g_new0(int8List, 1); ++ tmp->value = pt->value.s8; ++ if (pl.value.s8_integers == NULL) { ++ pl.value.s8_integers = tmp; ++ } else { ++ tmp->next = pl.value.s8_integers; ++ pl.value.s8_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_S16: { ++ int16List *tmp = g_new0(int16List, 1); ++ tmp->value = pt->value.s16; ++ if (pl.value.s16_integers == NULL) { ++ pl.value.s16_integers = tmp; ++ } else { ++ tmp->next = pl.value.s16_integers; ++ pl.value.s16_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_S32: { ++ int32List *tmp = g_new0(int32List, 1); ++ tmp->value = pt->value.s32; ++ if (pl.value.s32_integers == NULL) { ++ pl.value.s32_integers = tmp; ++ } else { ++ tmp->next = pl.value.s32_integers; ++ pl.value.s32_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_S64: { ++ int64List *tmp = g_new0(int64List, 1); ++ tmp->value = pt->value.s64; ++ if (pl.value.s64_integers == NULL) { ++ pl.value.s64_integers = tmp; ++ } else { ++ tmp->next = pl.value.s64_integers; ++ pl.value.s64_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_U8: { ++ uint8List *tmp = g_new0(uint8List, 1); ++ tmp->value = pt->value.u8; ++ if (pl.value.u8_integers == NULL) { ++ pl.value.u8_integers = tmp; ++ } else { ++ tmp->next = pl.value.u8_integers; ++ pl.value.u8_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_U16: { ++ uint16List *tmp = g_new0(uint16List, 1); ++ tmp->value = pt->value.u16; ++ if (pl.value.u16_integers == NULL) { ++ pl.value.u16_integers = tmp; ++ } else { ++ tmp->next = pl.value.u16_integers; ++ pl.value.u16_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_U32: { ++ uint32List *tmp = g_new0(uint32List, 1); ++ tmp->value = pt->value.u32; ++ if (pl.value.u32_integers == NULL) { ++ pl.value.u32_integers = tmp; ++ } else { ++ tmp->next = pl.value.u32_integers; ++ pl.value.u32_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_U64: { ++ uint64List *tmp = g_new0(uint64List, 1); ++ tmp->value = pt->value.u64; ++ if (pl.value.u64_integers == NULL) { ++ pl.value.u64_integers = tmp; ++ } else { ++ tmp->next = pl.value.u64_integers; ++ pl.value.u64_integers = tmp; ++ } ++ break; ++ } ++ case PTYPE_NUMBER: { ++ numberList *tmp = g_new0(numberList, 1); ++ tmp->value = pt->value.number; ++ if (pl.value.numbers == NULL) { ++ pl.value.numbers = tmp; ++ } else { ++ tmp->next = pl.value.numbers; ++ pl.value.numbers = tmp; ++ } ++ break; ++ } ++ case PTYPE_BOOLEAN: { ++ boolList *tmp = g_new0(boolList, 1); ++ tmp->value = pt->value.boolean; ++ if (pl.value.booleans == NULL) { ++ pl.value.booleans = tmp; ++ } else { ++ tmp->next = pl.value.booleans; ++ pl.value.booleans = tmp; ++ } ++ break; ++ } ++ default: ++ g_assert(0); ++ } ++ } ++ ++ ops->serialize((void **)&pl, &serialize_data, visit_primitive_list, &err); ++ ops->deserialize((void **)&pl_copy_ptr, serialize_data, visit_primitive_list, &err); ++ ++ g_assert(err == NULL); ++ i = 0; ++ ++ /* compare our deserialized list of primitives to the original */ ++ do { ++ switch (pl_copy.type) { ++ case PTYPE_STRING: { ++ strList *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.strings; ++ } ++ g_assert_cmpstr(pt->value.string, ==, ptr->value); ++ break; ++ } ++ case PTYPE_INTEGER: { ++ intList *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.integers; ++ } ++ g_assert_cmpint(pt->value.integer, ==, ptr->value); ++ break; ++ } ++ case PTYPE_S8: { ++ int8List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.s8_integers; ++ } ++ g_assert_cmpint(pt->value.s8, ==, ptr->value); ++ break; ++ } ++ case PTYPE_S16: { ++ int16List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.s16_integers; ++ } ++ g_assert_cmpint(pt->value.s16, ==, ptr->value); ++ break; ++ } ++ case PTYPE_S32: { ++ int32List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.s32_integers; ++ } ++ g_assert_cmpint(pt->value.s32, ==, ptr->value); ++ break; ++ } ++ case PTYPE_S64: { ++ int64List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.s64_integers; ++ } ++ g_assert_cmpint(pt->value.s64, ==, ptr->value); ++ break; ++ } ++ case PTYPE_U8: { ++ uint8List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.u8_integers; ++ } ++ g_assert_cmpint(pt->value.u8, ==, ptr->value); ++ break; ++ } ++ case PTYPE_U16: { ++ uint16List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.u16_integers; ++ } ++ g_assert_cmpint(pt->value.u16, ==, ptr->value); ++ break; ++ } ++ case PTYPE_U32: { ++ uint32List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.u32_integers; ++ } ++ g_assert_cmpint(pt->value.u32, ==, ptr->value); ++ break; ++ } ++ case PTYPE_U64: { ++ uint64List *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.u64_integers; ++ } ++ g_assert_cmpint(pt->value.u64, ==, ptr->value); ++ break; ++ } ++ case PTYPE_NUMBER: { ++ numberList *ptr; ++ GString *double_expected = g_string_new(""); ++ GString *double_actual = g_string_new(""); ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.numbers; ++ } ++ /* we serialize with %f for our reference visitors, so rather than ++ * fuzzy floating math to test "equality", just compare the ++ * formatted values ++ */ ++ g_string_printf(double_expected, "%.6f", pt->value.number); ++ g_string_printf(double_actual, "%.6f", ptr->value); ++ g_assert_cmpstr(double_actual->str, ==, double_expected->str); ++ g_string_free(double_expected, true); ++ g_string_free(double_actual, true); ++ break; ++ } ++ case PTYPE_BOOLEAN: { ++ boolList *ptr; ++ if (cur_head) { ++ ptr = cur_head; ++ cur_head = ptr->next; ++ } else { ++ cur_head = ptr = pl_copy.value.booleans; ++ } ++ g_assert_cmpint(!!pt->value.boolean, ==, !!ptr->value); ++ break; ++ } ++ default: ++ g_assert(0); ++ } ++ i++; ++ } while (cur_head); ++ ++ g_assert_cmpint(i, ==, 33); ++ ++ ops->cleanup(serialize_data); ++ dealloc_helper(&pl, visit_primitive_list, &err); ++ g_assert(!err); ++ dealloc_helper(&pl_copy, visit_primitive_list, &err); ++ g_assert(!err); ++ g_free(args); ++} ++ + static void test_struct(gconstpointer opaque) + { + TestArgs *args = (TestArgs *) opaque; +@@ -719,7 +1120,8 @@ static const SerializeOps visitors[] = { + .serialize = qmp_serialize, + .deserialize = qmp_deserialize, + .cleanup = qmp_cleanup, +- .caps = VCAP_PRIMITIVES | VCAP_STRUCTURES | VCAP_LISTS ++ .caps = VCAP_PRIMITIVES | VCAP_STRUCTURES | VCAP_LISTS | ++ VCAP_PRIMITIVE_LISTS + }, + { + .type = "String", +@@ -773,6 +1175,19 @@ static void add_visitor_type(const SerializeOps *ops) + args->test_data = NULL; + g_test_add_data_func(testname, args, test_nested_struct_list); + } ++ ++ if (ops->caps & VCAP_PRIMITIVE_LISTS) { ++ i = 0; ++ while (pt_values[i].type != PTYPE_EOL) { ++ sprintf(testname, "%s/primitive_list/%s", testname_prefix, ++ pt_values[i].description); ++ args = g_malloc0(sizeof(*args)); ++ args->ops = ops; ++ args->test_data = &pt_values[i]; ++ g_test_add_data_func(testname, args, test_primitive_lists); ++ i++; ++ } ++ } + } + + int main(int argc, char **argv) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-block-Add-fatal-to-BLOCK_IMAGE_CORRUPTED.patch b/SOURCES/kvm-qapi-block-Add-fatal-to-BLOCK_IMAGE_CORRUPTED.patch new file mode 100644 index 0000000..682b4f8 --- /dev/null +++ b/SOURCES/kvm-qapi-block-Add-fatal-to-BLOCK_IMAGE_CORRUPTED.patch @@ -0,0 +1,83 @@ +From c13c12dd0abcb0e9800fa3a4769460067c0a5401 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:01 +0200 +Subject: [PATCH 07/42] qapi/block: Add "fatal" to BLOCK_IMAGE_CORRUPTED + +Message-id: <1434212556-3927-8-git-send-email-mreitz@redhat.com> +Patchwork-id: 66026 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 07/42] qapi/block: Add "fatal" to BLOCK_IMAGE_CORRUPTED +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Not every BLOCK_IMAGE_CORRUPTED event must be fatal; for example, when +reading from an image, they should generally not be. Nonetheless, even +an image only read from may of course be corrupted and this can be +detected during normal operation. In this case, a non-fatal event should +be emitted, but the image should not be marked corrupt (in accordance to +"fatal" set to false). + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Message-id: 1409926039-29044-2-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 9bf040b962f90aa2e1cef6543dfee6c96f73ef7e) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2-refcount.c + qapi/block-core.json + QMP/qmp-events.txt + +Upstream, there is a more sophisticated QMP event support than just a +list of events in a text file. + +Signed-off-by: Max Reitz +--- + QMP/qmp-events.txt | 5 ++++- + block/qcow2-refcount.c | 4 ++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index 7d16a6d..39daed4 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -31,13 +31,16 @@ Data: + offset into the image (json-int) + - "size": If the corruption resulted from an image access, this is the access + size (json-int) ++- "fatal": If set, the image is marked corrupt and therefore unusable after ++ this event and must be repaired (Since 2.2; before, every ++ BLOCK_IMAGE_CORRUPTED event was fatal) + + Example: + + { "event": "BLOCK_IMAGE_CORRUPTED", + "data": { "device": "ide0-hd0", + "msg": "Prevented active L1 table overwrite", "offset": 196608, +- "size": 65536 }, ++ "size": 65536, "fatal": true }, + "timestamp": { "seconds": 1378126126, "microseconds": 966463 } } + + BLOCK_IO_ERROR +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 4f86923..6fa6daf 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1806,8 +1806,8 @@ int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset, + message = g_strdup_printf("Prevented %s overwrite", + metadata_ol_names[metadata_ol_bitnr]); + data = qobject_from_jsonf("{ 'device': %s, 'msg': %s, 'offset': %" +- PRId64 ", 'size': %" PRId64 " }", bs->device_name, message, +- offset, size); ++ PRId64 ", 'size': %" PRId64 ", 'fatal': true }", ++ bs->device_name, message, offset, size); + monitor_protocol_event(QEVENT_BLOCK_IMAGE_CORRUPTED, data); + g_free(message); + qobject_decref(data); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qapi-enable-generation-of-native-list-code.patch b/SOURCES/kvm-qapi-enable-generation-of-native-list-code.patch new file mode 100644 index 0000000..b0d2256 --- /dev/null +++ b/SOURCES/kvm-qapi-enable-generation-of-native-list-code.patch @@ -0,0 +1,74 @@ +From f346ff306b647fe1db3ffe8c9880178382c7b98d Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Fri, 8 Nov 2013 06:13:58 +0100 +Subject: [PATCH 3/4] qapi: enable generation of native list code + +RH-Author: Amos Kong +Message-id: <1383891239-29531-4-git-send-email-akong@redhat.com> +Patchwork-id: 55610 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 3/4] qapi: enable generation of native list code +Bugzilla: 848203 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: Michael Roth + +Also, fix a dependency issue with libqemuutil: qemu-sockets.c needs +qapi-types.c/qapi-visit.c + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 0b400e792718f59275d5d54c21de9a589b35a81f) +--- + Makefile | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + Makefile | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/Makefile b/Makefile +index 45048a3..66774de 100644 +--- a/Makefile ++++ b/Makefile +@@ -183,7 +183,7 @@ Makefile: $(version-obj-y) $(version-lobj-y) + # Build libraries + + libqemustub.a: $(stub-obj-y) +-libqemuutil.a: $(util-obj-y) ++libqemuutil.a: $(util-obj-y) qapi-types.o qapi-visit.o + + ###################################################################### + +@@ -239,20 +239,20 @@ $(SRC_PATH)/qapi-schema-rhel.json: $(SRC_PATH)/qapi-schema.json + ifeq ($(CONFIG_LIVE_BLOCK_OPS),y) + qapi-types.c qapi-types.h :\ + $(SRC_PATH)/qapi-schema-rhev.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) +- $(call quiet-command,python $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." < $<, " GEN $@") ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." -b < $<, " GEN $@") + qapi-visit.c qapi-visit.h :\ + $(SRC_PATH)/qapi-schema-rhev.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py) +- $(call quiet-command,python $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." < $<, " GEN $@") ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." -b < $<, " GEN $@") + qmp-commands.h qmp-marshal.c :\ + $(SRC_PATH)/qapi-schema-rhev.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) + $(call quiet-command,python $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, " GEN $@") + else + qapi-types.c qapi-types.h :\ + $(SRC_PATH)/qapi-schema-rhel.json $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) +- $(call quiet-command,python $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." < $<, " GEN $@") ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o "." -b < $<, " GEN $@") + qapi-visit.c qapi-visit.h :\ + $(SRC_PATH)/qapi-schema-rhel.json $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py) +- $(call quiet-command,python $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." < $<, " GEN $@") ++ $(call quiet-command,python $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o "." -b < $<, " GEN $@") + qmp-commands.h qmp-marshal.c :\ + $(SRC_PATH)/qapi-schema-rhel.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) + $(call quiet-command,python $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -m -o "." < $<, " GEN $@") +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-fix-visitor-serialization-tests-for-numbers-dou.patch b/SOURCES/kvm-qapi-fix-visitor-serialization-tests-for-numbers-dou.patch new file mode 100644 index 0000000..fee1da7 --- /dev/null +++ b/SOURCES/kvm-qapi-fix-visitor-serialization-tests-for-numbers-dou.patch @@ -0,0 +1,101 @@ +From e9f800ec6e87d1fee21c59dc83236456ee7f91f8 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:06 +0100 +Subject: [PATCH 06/21] qapi: fix visitor serialization tests for + numbers/doubles + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-4-git-send-email-armbru@redhat.com> +Patchwork-id: 56121 +O-Subject: [PATCH 7.0 qemu-kvm 03/18] qapi: fix visitor serialization tests for numbers/doubles +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Michael Roth + +We never actually stored the stringified double values into the strings +before we did the comparisons. This left number/double values completely +uncovered in test-visitor-serialization tests. + +Fixing this exposed a bug in our handling of large whole number values +in QEMU's JSON parser which is now fixed. + +Simplify the code while we're at it by dropping the +calc_float_string_storage() craziness in favor of GStrings. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 089f26bb735fb414b79f5fa3753910d5339d2a1d) +Signed-off-by: Markus Armbruster +--- + tests/test-visitor-serialization.c | 25 ++++++++----------------- + 1 file changed, 8 insertions(+), 17 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/test-visitor-serialization.c | 25 ++++++++----------------- + 1 file changed, 8 insertions(+), 17 deletions(-) + +diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c +index 8c8adac..fed6810 100644 +--- a/tests/test-visitor-serialization.c ++++ b/tests/test-visitor-serialization.c +@@ -229,17 +229,6 @@ typedef struct TestArgs { + void *test_data; + } TestArgs; + +-#define FLOAT_STRING_PRECISION 6 /* corresponding to n in %.nf formatting */ +-static gsize calc_float_string_storage(double value) +-{ +- int whole_value = value; +- gsize i = 0; +- do { +- i++; +- } while (whole_value /= 10); +- return i + 2 + FLOAT_STRING_PRECISION; +-} +- + static void test_primitives(gconstpointer opaque) + { + TestArgs *args = (TestArgs *) opaque; +@@ -248,7 +237,6 @@ static void test_primitives(gconstpointer opaque) + PrimitiveType *pt_copy = g_malloc0(sizeof(*pt_copy)); + Error *err = NULL; + void *serialize_data; +- char *double1, *double2; + + pt_copy->type = pt->type; + ops->serialize(pt, &serialize_data, visit_primitive_type, &err); +@@ -260,14 +248,17 @@ static void test_primitives(gconstpointer opaque) + g_assert_cmpstr(pt->value.string, ==, pt_copy->value.string); + g_free((char *)pt_copy->value.string); + } else if (pt->type == PTYPE_NUMBER) { ++ GString *double_expected = g_string_new(""); ++ GString *double_actual = g_string_new(""); + /* we serialize with %f for our reference visitors, so rather than fuzzy + * floating math to test "equality", just compare the formatted values + */ +- double1 = g_malloc0(calc_float_string_storage(pt->value.number)); +- double2 = g_malloc0(calc_float_string_storage(pt_copy->value.number)); +- g_assert_cmpstr(double1, ==, double2); +- g_free(double1); +- g_free(double2); ++ g_string_printf(double_expected, "%.6f", pt->value.number); ++ g_string_printf(double_actual, "%.6f", pt_copy->value.number); ++ g_assert_cmpstr(double_actual->str, ==, double_expected->str); ++ ++ g_string_free(double_expected, true); ++ g_string_free(double_actual, true); + } else if (pt->type == PTYPE_BOOLEAN) { + g_assert_cmpint(!!pt->value.max, ==, !!pt->value.max); + } else { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-introduce-PreallocMode-and-new-PreallocModes-fu.patch b/SOURCES/kvm-qapi-introduce-PreallocMode-and-new-PreallocModes-fu.patch new file mode 100644 index 0000000..2ac40bc --- /dev/null +++ b/SOURCES/kvm-qapi-introduce-PreallocMode-and-new-PreallocModes-fu.patch @@ -0,0 +1,163 @@ +From f984e0debc17b26f36c8f73027fac11d813826d7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 10 Nov 2014 09:14:05 +0100 +Subject: [PATCH 28/41] qapi: introduce PreallocMode and new PreallocModes full + and falloc. + +Message-id: <1415610847-15383-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 62238 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 2/4] qapi: introduce PreallocMode and new PreallocModes full and falloc. +Bugzilla: 1087724 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Hu Tao + +This patch prepares for the subsequent patches. + +Signed-off-by: Hu Tao +Reviewed-by: Max Reitz +Reviewed-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit ffeaac9b4e23a3033e8120cc34bacadc09487f1b) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2.c + qapi/block-core.json + +Downstream's qapi-schema.json has not (yet) been split into multiple +files such as qapi/block-core.json. + +The conflicts in block/qcow2.c result from the fact that +QEMUOptionParameter has not been replaced with QemuOpts downstream +(upstream 1bd0e2d1c40ef1dbe717728197071e931abe22a4). + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 28 +++++++++++++++++----------- + qapi-schema.json | 18 ++++++++++++++++++ + tests/qemu-iotests/049.out | 2 +- + 3 files changed, 36 insertions(+), 12 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index a679355..99c6b93 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -30,6 +30,7 @@ + #include "qemu/error-report.h" + #include "qapi/qmp/qerror.h" + #include "qapi/qmp/qbool.h" ++#include "qapi/util.h" + #include "trace.h" + + /* +@@ -1555,7 +1556,7 @@ static int preallocate(BlockDriverState *bs) + + static int qcow2_create2(const char *filename, int64_t total_size, + const char *backing_file, const char *backing_format, +- int flags, size_t cluster_size, int prealloc, ++ int flags, size_t cluster_size, PreallocMode prealloc, + QEMUOptionParameter *options, int version, + Error **errp) + { +@@ -1690,7 +1691,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + } + + /* And if we're supposed to preallocate metadata, do that now */ +- if (prealloc) { ++ if (prealloc == PREALLOC_MODE_METADATA) { + BDRVQcowState *s = bs->opaque; + qemu_co_mutex_lock(&s->lock); + ret = preallocate(bs); +@@ -1715,7 +1716,7 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + uint64_t sectors = 0; + int flags = 0; + size_t cluster_size = DEFAULT_CLUSTER_SIZE; +- int prealloc = 0; ++ PreallocMode prealloc = PREALLOC_MODE_OFF; + int version = 3; + Error *local_err = NULL; + int ret; +@@ -1735,13 +1736,11 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + cluster_size = options->value.n; + } + } else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) { +- if (!options->value.s || !strcmp(options->value.s, "off")) { +- prealloc = 0; +- } else if (!strcmp(options->value.s, "metadata")) { +- prealloc = 1; +- } else { +- error_setg(errp, "Invalid preallocation mode: '%s'", +- options->value.s); ++ prealloc = qapi_enum_parse(PreallocMode_lookup, options->value.s, ++ PREALLOC_MODE_MAX, PREALLOC_MODE_OFF, ++ &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); + return -EINVAL; + } + } else if (!strcmp(options->name, BLOCK_OPT_COMPAT_LEVEL)) { +@@ -1762,7 +1761,14 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + options++; + } + +- if (backing_file && prealloc) { ++ if (prealloc != PREALLOC_MODE_OFF && ++ prealloc != PREALLOC_MODE_METADATA) { ++ error_setg(errp, "Unsupported preallocate mode: %s", ++ PreallocMode_lookup[prealloc]); ++ return -EINVAL; ++ } ++ ++ if (backing_file && prealloc != PREALLOC_MODE_OFF) { + error_setg(errp, "Backing file and preallocation cannot be used at " + "the same time"); + return -EINVAL; +diff --git a/qapi-schema.json b/qapi-schema.json +index 31ac5c5..2af2643 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -4118,6 +4118,24 @@ + { 'command': 'blockdev-add', 'data': { 'options': 'BlockdevOptions' } } + + ## ++# @PreallocMode ++# ++# Preallocation mode of QEMU image file ++# ++# @off: no preallocation ++# @metadata: preallocate only for metadata ++# @falloc: like @full preallocation but allocate disk space by ++# posix_fallocate() rather than writing zeros. ++# @full: preallocate all data by writing zeros to device to ensure disk ++# space is really available. @full preallocation also sets up ++# metadata correctly. ++# ++# Since 2.2 ++## ++{ 'enum': 'PreallocMode', ++ 'data': [ 'off', 'metadata', 'falloc', 'full' ] } ++ ++## + # @RxState: + # + # Packets receiving state +diff --git a/tests/qemu-iotests/049.out b/tests/qemu-iotests/049.out +index 96e83a4..b2fcf0b 100644 +--- a/tests/qemu-iotests/049.out ++++ b/tests/qemu-iotests/049.out +@@ -179,7 +179,7 @@ qemu-img create -f qcow2 -o preallocation=metadata TEST_DIR/t.qcow2 64M + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off + + qemu-img create -f qcow2 -o preallocation=1234 TEST_DIR/t.qcow2 64M +-qemu-img: TEST_DIR/t.qcow2: Invalid preallocation mode: '1234' ++qemu-img: TEST_DIR/t.qcow2: invalid parameter value: 1234 + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 encryption=off cluster_size=65536 preallocation='1234' lazy_refcounts=off + + == Check encryption option == +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qapi-lack-of-two-commas-in-dict.patch b/SOURCES/kvm-qapi-lack-of-two-commas-in-dict.patch new file mode 100644 index 0000000..88af55e --- /dev/null +++ b/SOURCES/kvm-qapi-lack-of-two-commas-in-dict.patch @@ -0,0 +1,57 @@ +From a68d863151dead2ce6d54a8838607a771f78c4b0 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:10 +0100 +Subject: [PATCH 10/21] qapi: lack of two commas in dict + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-8-git-send-email-armbru@redhat.com> +Patchwork-id: 56136 +O-Subject: [PATCH 7.0 qemu-kvm 07/18] qapi: lack of two commas in dict +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Amos Kong + +Signed-off-by: Amos Kong +Signed-off-by: Michael Tokarev +(cherry picked from commit ad0f171e25fb60b385dc7d07632916d3b1043d81) +Signed-off-by: Markus Armbruster +--- + qapi-schema.json | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + qapi-schema.json | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 92fcd54..b27108f 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -447,7 +447,7 @@ + # + # Since: 1.4 + ## +-{ 'enum': 'DataFormat' ++{ 'enum': 'DataFormat', + 'data': [ 'utf8', 'base64' ] } + + ## +@@ -1693,7 +1693,7 @@ + # + # Since: 1.1 + ## +-{ 'enum': 'NewImageMode' ++{ 'enum': 'NewImageMode', + 'data': [ 'existing', 'absolute-paths' ] } + + ## +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-make-use-of-new-BlockJobType.patch b/SOURCES/kvm-qapi-make-use-of-new-BlockJobType.patch new file mode 100644 index 0000000..5084dd6 --- /dev/null +++ b/SOURCES/kvm-qapi-make-use-of-new-BlockJobType.patch @@ -0,0 +1,122 @@ +From ce9a0218020c6f9c97eb787eb3381344759becc9 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:56 +0100 +Subject: [PATCH 13/34] qapi: make use of new BlockJobType + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-12-git-send-email-famz@redhat.com> +Patchwork-id: 56773 +O-Subject: [RHEL-7 qemu-kvm PATCH 11/18] qapi: make use of new BlockJobType +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Switch the string to enum type BlockJobType in BlockJobDriver. + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 79e14bf7782d861d3d773a67680de07a8f354f4e) +Signed-off-by: Fam Zheng + +Conflicts: + block/backup.c + +Not present downstream. + +Signed-off-by: Fam Zheng +--- + block/commit.c | 2 +- + block/mirror.c | 2 +- + block/stream.c | 2 +- + blockjob.c | 4 ++-- + include/block/blockjob.h | 2 +- + 5 files changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/commit.c | 2 +- + block/mirror.c | 2 +- + block/stream.c | 2 +- + blockjob.c | 4 ++-- + include/block/blockjob.h | 2 +- + 5 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/block/commit.c b/block/commit.c +index 28f45e4..d237729 100644 +--- a/block/commit.c ++++ b/block/commit.c +@@ -175,7 +175,7 @@ static void commit_set_speed(BlockJob *job, int64_t speed, Error **errp) + + static const BlockJobDriver commit_job_driver = { + .instance_size = sizeof(CommitBlockJob), +- .job_type = "commit", ++ .job_type = BLOCK_JOB_TYPE_COMMIT, + .set_speed = commit_set_speed, + }; + +diff --git a/block/mirror.c b/block/mirror.c +index 139be06..8837186 100644 +--- a/block/mirror.c ++++ b/block/mirror.c +@@ -527,7 +527,7 @@ static void mirror_complete(BlockJob *job, Error **errp) + + static const BlockJobDriver mirror_job_driver = { + .instance_size = sizeof(MirrorBlockJob), +- .job_type = "mirror", ++ .job_type = BLOCK_JOB_TYPE_MIRROR, + .set_speed = mirror_set_speed, + .iostatus_reset= mirror_iostatus_reset, + .complete = mirror_complete, +diff --git a/block/stream.c b/block/stream.c +index ffa4e9a..1420d09 100644 +--- a/block/stream.c ++++ b/block/stream.c +@@ -206,7 +206,7 @@ static void stream_set_speed(BlockJob *job, int64_t speed, Error **errp) + + static const BlockJobDriver stream_job_driver = { + .instance_size = sizeof(StreamBlockJob), +- .job_type = "stream", ++ .job_type = BLOCK_JOB_TYPE_STREAM, + .set_speed = stream_set_speed, + }; + +diff --git a/blockjob.c b/blockjob.c +index dc0fa6d..a4430a0 100644 +--- a/blockjob.c ++++ b/blockjob.c +@@ -209,7 +209,7 @@ void block_job_sleep_ns(BlockJob *job, QEMUClock *clock, int64_t ns) + BlockJobInfo *block_job_query(BlockJob *job) + { + BlockJobInfo *info = g_new0(BlockJobInfo, 1); +- info->type = g_strdup(job->driver->job_type); ++ info->type = g_strdup(BlockJobType_lookup[job->driver->job_type]); + info->device = g_strdup(bdrv_get_device_name(job->bs)); + info->len = job->len; + info->busy = job->busy; +@@ -236,7 +236,7 @@ QObject *qobject_from_block_job(BlockJob *job) + "'len': %" PRId64 "," + "'offset': %" PRId64 "," + "'speed': %" PRId64 " }", +- job->driver->job_type, ++ BlockJobType_lookup[job->driver->job_type], + bdrv_get_device_name(job->bs), + job->len, + job->offset, +diff --git a/include/block/blockjob.h b/include/block/blockjob.h +index dadcd48..5a7d859 100644 +--- a/include/block/blockjob.h ++++ b/include/block/blockjob.h +@@ -37,7 +37,7 @@ typedef struct BlockJobDriver { + size_t instance_size; + + /** String describing the operation, part of query-block-jobs QMP API */ +- const char *job_type; ++ BlockJobType job_type; + + /** Optional callback for job types that support setting a speed limit */ + void (*set_speed)(BlockJob *job, int64_t speed, Error **errp); +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-make-visit_type_size-fallback-to-type_int.patch b/SOURCES/kvm-qapi-make-visit_type_size-fallback-to-type_int.patch new file mode 100644 index 0000000..cd8956e --- /dev/null +++ b/SOURCES/kvm-qapi-make-visit_type_size-fallback-to-type_int.patch @@ -0,0 +1,70 @@ +From 9bce100f4930cb500127110999c63474e9a6cfe2 Mon Sep 17 00:00:00 2001 +Message-Id: <9bce100f4930cb500127110999c63474e9a6cfe2.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:00 +0100 +Subject: [PATCH 05/56] qapi: make visit_type_size fallback to type_int +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-6-git-send-email-mst@redhat.com> +Patchwork-id: 56310 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 05/57] qapi: make visit_type_size fallback to type_int +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Vasilis Liaskovitis + +Currently visit_type_size checks if the visitor's type_size function pointer is +NULL. If not, it calls it, otherwise it calls v->type_uint64(). But neither of +these pointers are ever set. Fallback to calling v->type_int() in this third +(default) case. + +Signed-off-by: Vasilis Liaskovitis +Signed-off-by: Hu Tao +Signed-off-by: Igor Mammedov +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Andreas Färber +Message-id: 1375109277-25561-6-git-send-email-imammedo@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit b887796217b7f5b754657e85760693e4ced63356) +--- + qapi/qapi-visit-core.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + qapi/qapi-visit-core.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c +index d6a4012..6451a21 100644 +--- a/qapi/qapi-visit-core.c ++++ b/qapi/qapi-visit-core.c +@@ -263,8 +263,17 @@ void visit_type_int64(Visitor *v, int64_t *obj, const char *name, Error **errp) + + void visit_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp) + { ++ int64_t value; + if (!error_is_set(errp)) { +- (v->type_size ? v->type_size : v->type_uint64)(v, obj, name, errp); ++ if (v->type_size) { ++ v->type_size(v, obj, name, errp); ++ } else if (v->type_uint64) { ++ v->type_uint64(v, obj, name, errp); ++ } else { ++ value = *obj; ++ v->type_int(v, &value, name, errp); ++ *obj = value; ++ } + } + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi-qapi-types.py-native-list-support.patch b/SOURCES/kvm-qapi-qapi-types.py-native-list-support.patch new file mode 100644 index 0000000..c5fe402 --- /dev/null +++ b/SOURCES/kvm-qapi-qapi-types.py-native-list-support.patch @@ -0,0 +1,179 @@ +From f45283cb91d07fd280fcf503a486effc1a96fa5e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:15 +0200 +Subject: [PATCH 24/38] qapi: qapi-types.py, native list support + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-25-git-send-email-kwolf@redhat.com> +Patchwork-id: 54211 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 24/32] qapi: qapi-types.py, native list support +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +From: Michael Roth + +Bugzilla: 1005818 + +Teach type generators about native types so they can generate the +appropriate linked list types. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit c0afa9c5f717d0ebf10c70c305974ebbffe4c71f) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-types.py | 45 ++++++++++++++++++++++++++++++++++++++++++--- + scripts/qapi.py | 23 +++++++++++++++++++++++ + 2 files changed, 65 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-types.py | 45 ++++++++++++++++++++++++++++++++++++++++++--- + scripts/qapi.py | 23 +++++++++++++++++++++++ + 2 files changed, 65 insertions(+), 3 deletions(-) + +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index f139bfe..3d9af3c 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -16,8 +16,21 @@ import os + import getopt + import errno + +-def generate_fwd_struct(name, members): ++def generate_fwd_struct(name, members, builtin_type=False): ++ if builtin_type: ++ return mcgen(''' ++ ++typedef struct %(name)sList ++{ ++ %(type)s value; ++ struct %(name)sList *next; ++} %(name)sList; ++''', ++ type=c_type(name), ++ name=name) ++ + return mcgen(''' ++ + typedef struct %(name)s %(name)s; + + typedef struct %(name)sList +@@ -183,6 +196,7 @@ void qapi_free_%(type)s(%(c_type)s obj); + + def generate_type_cleanup(name): + ret = mcgen(''' ++ + void qapi_free_%(type)s(%(c_type)s obj) + { + QapiDeallocVisitor *md; +@@ -203,8 +217,9 @@ void qapi_free_%(type)s(%(c_type)s obj) + + + try: +- opts, args = getopt.gnu_getopt(sys.argv[1:], "chp:o:", +- ["source", "header", "prefix=", "output-dir="]) ++ opts, args = getopt.gnu_getopt(sys.argv[1:], "chbp:o:", ++ ["source", "header", "builtins", ++ "prefix=", "output-dir="]) + except getopt.GetoptError, err: + print str(err) + sys.exit(1) +@@ -216,6 +231,7 @@ h_file = 'qapi-types.h' + + do_c = False + do_h = False ++do_builtins = False + + for o, a in opts: + if o in ("-p", "--prefix"): +@@ -226,6 +242,8 @@ for o, a in opts: + do_c = True + elif o in ("-h", "--header"): + do_h = True ++ elif o in ("-b", "--builtins"): ++ do_builtins = True + + if not do_c and not do_h: + do_c = True +@@ -301,6 +319,11 @@ fdecl.write(mcgen(''' + exprs = parse_schema(sys.stdin) + exprs = filter(lambda expr: not expr.has_key('gen'), exprs) + ++fdecl.write(guardstart("QAPI_TYPES_BUILTIN_STRUCT_DECL")) ++for typename in builtin_types: ++ fdecl.write(generate_fwd_struct(typename, None, builtin_type=True)) ++fdecl.write(guardend("QAPI_TYPES_BUILTIN_STRUCT_DECL")) ++ + for expr in exprs: + ret = "\n" + if expr.has_key('type'): +@@ -317,6 +340,22 @@ for expr in exprs: + continue + fdecl.write(ret) + ++# to avoid header dependency hell, we always generate declarations ++# for built-in types in our header files and simply guard them ++fdecl.write(guardstart("QAPI_TYPES_BUILTIN_CLEANUP_DECL")) ++for typename in builtin_types: ++ fdecl.write(generate_type_cleanup_decl(typename + "List")) ++fdecl.write(guardend("QAPI_TYPES_BUILTIN_CLEANUP_DECL")) ++ ++# ...this doesn't work for cases where we link in multiple objects that ++# have the functions defined, so we use -b option to provide control ++# over these cases ++if do_builtins: ++ fdef.write(guardstart("QAPI_TYPES_BUILTIN_CLEANUP_DEF")) ++ for typename in builtin_types: ++ fdef.write(generate_type_cleanup(typename + "List")) ++ fdef.write(guardend("QAPI_TYPES_BUILTIN_CLEANUP_DEF")) ++ + for expr in exprs: + ret = "\n" + if expr.has_key('type'): +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 03c42a9..3a54c7f 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -11,6 +11,12 @@ + + from ordereddict import OrderedDict + ++builtin_types = [ ++ 'str', 'int', 'number', 'bool', ++ 'int8', 'int16', 'int32', 'int64', ++ 'uint8', 'uint16', 'uint32', 'uint64' ++] ++ + def tokenize(data): + while len(data): + ch = data[0] +@@ -274,3 +280,20 @@ def guardname(filename): + for substr in [".", " ", "-"]: + guard = guard.replace(substr, "_") + return guard.upper() + '_H' ++ ++def guardstart(name): ++ return mcgen(''' ++ ++#ifndef %(name)s ++#define %(name)s ++ ++''', ++ name=guardname(name)) ++ ++def guardend(name): ++ return mcgen(''' ++ ++#endif /* %(name)s */ ++ ++''', ++ name=guardname(name)) +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-qapi-visit.py-fix-list-handling-for-union-types.patch b/SOURCES/kvm-qapi-qapi-visit.py-fix-list-handling-for-union-types.patch new file mode 100644 index 0000000..eff4f9b --- /dev/null +++ b/SOURCES/kvm-qapi-qapi-visit.py-fix-list-handling-for-union-types.patch @@ -0,0 +1,53 @@ +From 3d016c34cdcc3cada9303eaa0a57ce847367e5d8 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Fri, 8 Nov 2013 06:13:56 +0100 +Subject: [PATCH 1/4] qapi: qapi-visit.py, fix list handling for union types + +RH-Author: Amos Kong +Message-id: <1383891239-29531-2-git-send-email-akong@redhat.com> +Patchwork-id: 55608 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 1/4] qapi: qapi-visit.py, fix list handling for union types +Bugzilla: 848203 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: Michael Roth + +Currently we assume non-list types when generating visitor routines for +union types. This is broken, since values like ['Type'] need to mapped +to 'TypeList'. + +We already have a type_name() function to handle this that we use for +generating struct visitors, so use that here as well. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit c664aef551714e91b7d83a28617b6e767db30d11) +--- + scripts/qapi-visit.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-visit.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index 71004ae..fc2b67a 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -309,7 +309,7 @@ void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error ** + ''', + abbrev = de_camel_case(name).upper(), + enum = c_fun(de_camel_case(key),False).upper(), +- c_type=members[key], ++ c_type=type_name(members[key]), + c_name=c_fun(key)) + + ret += mcgen(''' +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-qapi-visit.py-native-list-support.patch b/SOURCES/kvm-qapi-qapi-visit.py-native-list-support.patch new file mode 100644 index 0000000..0387452 --- /dev/null +++ b/SOURCES/kvm-qapi-qapi-visit.py-native-list-support.patch @@ -0,0 +1,117 @@ +From 19832bf960bb31814a0d950b01fff45e2618be27 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Fri, 8 Nov 2013 06:13:57 +0100 +Subject: [PATCH 2/4] qapi: qapi-visit.py, native list support + +RH-Author: Amos Kong +Message-id: <1383891239-29531-3-git-send-email-akong@redhat.com> +Patchwork-id: 55609 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 2/4] qapi: qapi-visit.py, native list support +Bugzilla: 848203 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: Michael Roth + +Teach visitor generators about native types so they can generate the +appropriate visitor routines. + +Signed-off-by: Michael Roth +Reviewed-by: Laszlo Ersek +Reviewed-by: Amos Kong +Signed-off-by: Luiz Capitulino +(cherry picked from commit 7c946bc418db6b2a11f89b3465424fef48f714eb) +--- + scripts/qapi-visit.py | 34 +++++++++++++++++++++++++++++----- + 1 files changed, 29 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-visit.py | 34 +++++++++++++++++++++++++++++----- + 1 files changed, 29 insertions(+), 5 deletions(-) + +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index fc2b67a..c39e628 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -337,12 +337,14 @@ void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error ** + + return ret + +-def generate_declaration(name, members, genlist=True): +- ret = mcgen(''' ++def generate_declaration(name, members, genlist=True, builtin_type=False): ++ ret = "" ++ if not builtin_type: ++ ret += mcgen(''' + + void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error **errp); + ''', +- name=name) ++ name=name) + + if genlist: + ret += mcgen(''' +@@ -370,8 +372,9 @@ void visit_type_%(name)s(Visitor *m, %(name)s * obj, const char *name, Error **e + name=name) + + try: +- opts, args = getopt.gnu_getopt(sys.argv[1:], "chp:o:", +- ["source", "header", "prefix=", "output-dir="]) ++ opts, args = getopt.gnu_getopt(sys.argv[1:], "chbp:o:", ++ ["source", "header", "builtins", "prefix=", ++ "output-dir="]) + except getopt.GetoptError, err: + print str(err) + sys.exit(1) +@@ -383,6 +386,7 @@ h_file = 'qapi-visit.h' + + do_c = False + do_h = False ++do_builtins = False + + for o, a in opts: + if o in ("-p", "--prefix"): +@@ -393,6 +397,8 @@ for o, a in opts: + do_c = True + elif o in ("-h", "--header"): + do_h = True ++ elif o in ("-b", "--builtins"): ++ do_builtins = True + + if not do_c and not do_h: + do_c = True +@@ -459,11 +465,29 @@ fdecl.write(mcgen(''' + + #include "qapi/visitor.h" + #include "%(prefix)sqapi-types.h" ++ + ''', + prefix=prefix, guard=guardname(h_file))) + + exprs = parse_schema(sys.stdin) + ++# to avoid header dependency hell, we always generate declarations ++# for built-in types in our header files and simply guard them ++fdecl.write(guardstart("QAPI_VISIT_BUILTIN_VISITOR_DECL")) ++for typename in builtin_types: ++ fdecl.write(generate_declaration(typename, None, genlist=True, ++ builtin_type=True)) ++fdecl.write(guardend("QAPI_VISIT_BUILTIN_VISITOR_DECL")) ++ ++# ...this doesn't work for cases where we link in multiple objects that ++# have the functions defined, so we use -b option to provide control ++# over these cases ++if do_builtins: ++ fdef.write(guardstart("QAPI_VISIT_BUILTIN_VISITOR_DEF")) ++ for typename in builtin_types: ++ fdef.write(generate_visit_list(typename, None)) ++ fdef.write(guardend("QAPI_VISIT_BUILTIN_VISITOR_DEF")) ++ + for expr in exprs: + if expr.has_key('type'): + ret = generate_visit_struct(expr) +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-schema-Update-description-for-NewImageMode.patch b/SOURCES/kvm-qapi-schema-Update-description-for-NewImageMode.patch new file mode 100644 index 0000000..f094802 --- /dev/null +++ b/SOURCES/kvm-qapi-schema-Update-description-for-NewImageMode.patch @@ -0,0 +1,54 @@ +From 80d8289fb554704ed21000baaf334d549641804d Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:07:59 +0100 +Subject: [PATCH 25/34] qapi-schema: Update description for NewImageMode + +RH-Author: Max Reitz +Message-id: <1390154881-17140-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 56818 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 5/7] qapi-schema: Update description for NewImageMode +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +BZ: 921890 + +If the NewImageMode is "absolute-paths" but no backing file is available +(e.g., when mirroring a device with an unbacked image), the target image +will not be backed either. This patch updates the documentation in +qapi-schema.json accordingly. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Benoit Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 1296c2f0bc8283164c925bf587e497511de7f569) + +Signed-off-by: Max Reitz +--- + qapi-schema.json | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index a783e8e..6158ea5 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1722,7 +1722,8 @@ + # @existing: QEMU should look for an existing image file. + # + # @absolute-paths: QEMU should create a new image with absolute paths +-# for the backing file. ++# for the backing file. If there is no backing file available, the new ++# image will not be backed either. + # + # Since: 1.1 + ## +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-schema-Use-BlockdevSnapshot-type-for-blockdev-s.patch b/SOURCES/kvm-qapi-schema-Use-BlockdevSnapshot-type-for-blockdev-s.patch new file mode 100644 index 0000000..859e508 --- /dev/null +++ b/SOURCES/kvm-qapi-schema-Use-BlockdevSnapshot-type-for-blockdev-s.patch @@ -0,0 +1,69 @@ +From 230096f8fe835dc7814028643bb6feaa08bda5c5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:06 +0200 +Subject: [PATCH 15/38] qapi-schema: Use BlockdevSnapshot type for blockdev-snapshot-sync + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-16-git-send-email-kwolf@redhat.com> +Patchwork-id: 54202 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 15/32] qapi-schema: Use BlockdevSnapshot type for blockdev-snapshot-sync +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +We don't have to duplicate the definition any more now that we may refer +to a type instead. + +Signed-off-by: Kevin Wolf +Reviewed-by: Michael Roth +Signed-off-by: Luiz Capitulino +(cherry picked from commit 852ad1a900a4ae23514e1a53c86632543592c31b) + +Signed-off-by: Kevin Wolf +--- + qapi-schema.json | 14 ++------------ + 1 file changed, 2 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 14 ++------------ + 1 files changed, 2 insertions(+), 12 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 8dca641..3936337 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -1650,16 +1650,7 @@ + # + # Generates a synchronous snapshot of a block device. + # +-# @device: the name of the device to generate the snapshot from. +-# +-# @snapshot-file: the target of the new image. If the file exists, or if it +-# is a device, the snapshot will be created in the existing +-# file/device. If does not exist, a new file will be created. +-# +-# @format: #optional the format of the snapshot image, default is 'qcow2'. +-# +-# @mode: #optional whether and how QEMU should create a new image, default is +-# 'absolute-paths'. ++# For the arguments, see the documentation of BlockdevSnapshot. + # + # Returns: nothing on success + # If @device is not a valid block device, DeviceNotFound +@@ -1667,8 +1658,7 @@ + # Since 0.14.0 + ## + { 'command': 'blockdev-snapshot-sync', +- 'data': { 'device': 'str', 'snapshot-file': 'str', '*format': 'str', +- '*mode': 'NewImageMode'} } ++ 'data': 'BlockdevSnapshot' } + + ## + # @human-monitor-command: +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-treat-all-negative-return-of-strtosz_suffix-as-.patch b/SOURCES/kvm-qapi-treat-all-negative-return-of-strtosz_suffix-as-.patch new file mode 100644 index 0000000..14eb89f --- /dev/null +++ b/SOURCES/kvm-qapi-treat-all-negative-return-of-strtosz_suffix-as-.patch @@ -0,0 +1,64 @@ +From ff6247a010ae1c37e400bbdd232df40ddcdf1bfc Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Mon, 4 Aug 2014 03:33:38 +0200 +Subject: [PATCH 4/4] qapi: treat all negative return of strtosz_suffix() as error + +Message-id: <1407123218-15659-1-git-send-email-akong@redhat.com> +Patchwork-id: 60413 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] qapi: treat all negative return of strtosz_suffix() as error +Bugzilla: 1074403 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek + +Bug: 1074403 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7780802 +Test: tested by myself + +strtosz_suffix() might return negative error, this patch fixes +the error handling. + +This patch also changes to handle error in the if statement +rather than handle success specially, this will make this use +of strtosz_suffix consistent with all other uses. + +Signed-off-by: Amos Kong +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Luiz Capitulino +(cherry picked from commit cb45de6798956975c4b13a6233f7a00d2239b61a) +--- + qapi/opts-visitor.c | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi/opts-visitor.c | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/qapi/opts-visitor.c b/qapi/opts-visitor.c +index 174bd8b..bbb99e9 100644 +--- a/qapi/opts-visitor.c ++++ b/qapi/opts-visitor.c +@@ -348,13 +348,14 @@ opts_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp) + + val = strtosz_suffix(opt->str ? opt->str : "", &endptr, + STRTOSZ_DEFSUFFIX_B); +- if (val != -1 && *endptr == '\0') { +- *obj = val; +- processed(ov, name); ++ if (val < 0 || *endptr) { ++ error_set(errp, QERR_INVALID_PARAMETER_VALUE, opt->name, ++ "a size value representible as a non-negative int64"); + return; + } +- error_set(errp, QERR_INVALID_PARAMETER_VALUE, opt->name, +- "a size value representible as a non-negative int64"); ++ ++ *obj = val; ++ processed(ov, name); + } + + +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-types-visit.py-Inheritance-for-structs.patch b/SOURCES/kvm-qapi-types-visit.py-Inheritance-for-structs.patch new file mode 100644 index 0000000..24eb27c --- /dev/null +++ b/SOURCES/kvm-qapi-types-visit.py-Inheritance-for-structs.patch @@ -0,0 +1,135 @@ +From e8b11ccb96a0a6ddbb039631511c91652e4d0efc Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:08:58 +0100 +Subject: [PATCH 45/87] qapi-types/visit.py: Inheritance for structs + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 55383 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 04/24] qapi-types/visit.py: Inheritance for structs +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +This introduces a new 'base' key for struct definitions that refers to +another struct type. On the JSON level, the fields of the base type are +included directly into the same namespace as the fields of the defined +type, like with unions. On the C level, a pointer to a struct of the +base type is included. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 622f557f5aaea1326c94ca4cddfa4eafeade3723) + +Signed-off-by: Kevin Wolf +--- + docs/qapi-code-gen.txt | 17 +++++++++++++++++ + scripts/qapi-types.py | 4 ++++ + scripts/qapi-visit.py | 18 ++++++++++++++++-- + 3 files changed, 37 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + docs/qapi-code-gen.txt | 17 +++++++++++++++++ + scripts/qapi-types.py | 4 ++++ + scripts/qapi-visit.py | 18 ++++++++++++++++-- + 3 files changed, 37 insertions(+), 2 deletions(-) + +diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt +index 0ce045c..91f44d0 100644 +--- a/docs/qapi-code-gen.txt ++++ b/docs/qapi-code-gen.txt +@@ -53,6 +53,23 @@ The use of '*' as a prefix to the name means the member is optional. Optional + members should always be added to the end of the dictionary to preserve + backwards compatibility. + ++ ++A complex type definition can specify another complex type as its base. ++In this case, the fields of the base type are included as top-level fields ++of the new complex type's dictionary in the QMP wire format. An example ++definition is: ++ ++ { 'type': 'BlockdevOptionsGenericFormat', 'data': { 'file': 'str' } } ++ { 'type': 'BlockdevOptionsGenericCOWFormat', ++ 'base': 'BlockdevOptionsGenericFormat', ++ 'data': { '*backing': 'str' } } ++ ++An example BlockdevOptionsGenericCOWFormat object on the wire could use ++both fields like this: ++ ++ { "file": "/some/place/my-image", ++ "backing": "/some/place/my-backing-file" } ++ + === Enumeration types === + + An enumeration type is a dictionary containing a single key whose value is a +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index ff60dfb..a0737a6 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -80,6 +80,7 @@ def generate_struct(expr): + structname = expr.get('type', "") + fieldname = expr.get('field', "") + members = expr['data'] ++ base = expr.get('base') + + ret = mcgen(''' + struct %(name)s +@@ -87,6 +88,9 @@ struct %(name)s + ''', + name=structname) + ++ if base: ++ ret += generate_struct_fields({'base': base}) ++ + ret += generate_struct_fields(members) + + if len(fieldname): +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index 43d902c..71004ae 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -17,7 +17,7 @@ import os + import getopt + import errno + +-def generate_visit_struct_fields(name, field_prefix, fn_prefix, members): ++def generate_visit_struct_fields(name, field_prefix, fn_prefix, members, base = None): + substructs = [] + ret = '' + full_name = name if not fn_prefix else "%s_%s" % (name, fn_prefix) +@@ -42,6 +42,19 @@ static void visit_type_%(full_name)s_fields(Visitor *m, %(name)s ** obj, Error * + name=name, full_name=full_name) + push_indent() + ++ if base: ++ ret += mcgen(''' ++visit_start_implicit_struct(m, obj ? (void**) &(*obj)->%(c_name)s : NULL, sizeof(%(type)s), &err); ++if (!err) { ++ visit_type_%(type)s_fields(m, obj ? &(*obj)->%(c_prefix)s%(c_name)s : NULL, &err); ++ error_propagate(errp, err); ++ err = NULL; ++ visit_end_implicit_struct(m, &err); ++} ++''', ++ c_prefix=c_var(field_prefix), ++ type=type_name(base), c_name=c_var('base')) ++ + for argname, argentry, optional, structured in parse_args(members): + if optional: + ret += mcgen(''' +@@ -124,8 +137,9 @@ def generate_visit_struct(expr): + + name = expr['type'] + members = expr['data'] ++ base = expr.get('base') + +- ret = generate_visit_struct_fields(name, "", "", members) ++ ret = generate_visit_struct_fields(name, "", "", members, base) + + ret += mcgen(''' + +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-types-visit.py-Pass-whole-expr-dict-for-structs.patch b/SOURCES/kvm-qapi-types-visit.py-Pass-whole-expr-dict-for-structs.patch new file mode 100644 index 0000000..465e80f --- /dev/null +++ b/SOURCES/kvm-qapi-types-visit.py-Pass-whole-expr-dict-for-structs.patch @@ -0,0 +1,95 @@ +From 9dbd79c3095d98b66d30893fd1ba8b98366e9d41 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:08:57 +0100 +Subject: [PATCH 44/87] qapi-types/visit.py: Pass whole expr dict for structs + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 55382 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 03/24] qapi-types/visit.py: Pass whole expr dict for structs +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 14d36307ffdf949df9c1dd7f435e138b36f63bb0) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-types.py | 11 ++++++++--- + scripts/qapi-visit.py | 8 ++++++-- + 2 files changed, 14 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-types.py | 11 ++++++++--- + scripts/qapi-visit.py | 8 ++++++-- + 2 files changed, 14 insertions(+), 5 deletions(-) + +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index 8680160..ff60dfb 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -65,7 +65,7 @@ def generate_struct_fields(members): + c_name=c_var(argname)) + if structured: + push_indent() +- ret += generate_struct("", argname, argentry) ++ ret += generate_struct({ "field": argname, "data": argentry}) + pop_indent() + else: + ret += mcgen(''' +@@ -75,7 +75,12 @@ def generate_struct_fields(members): + + return ret + +-def generate_struct(structname, fieldname, members): ++def generate_struct(expr): ++ ++ structname = expr.get('type', "") ++ fieldname = expr.get('field', "") ++ members = expr['data'] ++ + ret = mcgen(''' + struct %(name)s + { +@@ -411,7 +416,7 @@ if do_builtins: + for expr in exprs: + ret = "\n" + if expr.has_key('type'): +- ret += generate_struct(expr['type'], "", expr['data']) + "\n" ++ ret += generate_struct(expr) + "\n" + ret += generate_type_cleanup_decl(expr['type'] + "List") + fdef.write(generate_type_cleanup(expr['type'] + "List") + "\n") + ret += generate_type_cleanup_decl(expr['type']) +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index 367cf7a..43d902c 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -120,7 +120,11 @@ if (!err) { + ''') + return ret + +-def generate_visit_struct(name, members): ++def generate_visit_struct(expr): ++ ++ name = expr['type'] ++ members = expr['data'] ++ + ret = generate_visit_struct_fields(name, "", "", members) + + ret += mcgen(''' +@@ -448,7 +452,7 @@ exprs = parse_schema(sys.stdin) + + for expr in exprs: + if expr.has_key('type'): +- ret = generate_visit_struct(expr['type'], expr['data']) ++ ret = generate_visit_struct(expr) + ret += generate_visit_list(expr['type'], expr['data']) + fdef.write(ret) + +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-types.py-Fix-enum-struct-sizes-on-i686.patch b/SOURCES/kvm-qapi-types.py-Fix-enum-struct-sizes-on-i686.patch new file mode 100644 index 0000000..9198aa6 --- /dev/null +++ b/SOURCES/kvm-qapi-types.py-Fix-enum-struct-sizes-on-i686.patch @@ -0,0 +1,63 @@ +From 8c58dddfb0bdd43600840ff14b03b42bacfea18c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:08:56 +0100 +Subject: [PATCH 43/87] qapi-types.py: Fix enum struct sizes on i686 + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 55381 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 02/24] qapi-types.py: Fix enum struct sizes on i686 +Bugzilla: 978402 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz + +From: Cole Robinson + +Unlike other list types, enum wasn't adding any padding, which caused +a mismatch between the generated struct size and GenericList struct +size. More details in a678e26cbe89f7a27cbce794c2c2784571ee9d21 + +This crashed qemu if calling qmp query-tpm-types for example, which +upsets libvirt capabilities probing. Reproducer on i686: + +(sleep 5; printf '{"execute":"qmp_capabilities"}\n{"execute":"query-tpm-types"}\n') | ./i386-softmmu/qemu-system-i386 -S -nodefaults -nographic -M none -qmp stdio + +https://bugs.launchpad.net/qemu/+bug/1219207 + +Cc: qemu-stable@nongnu.org +Signed-off-by: Cole Robinson +Reviewed-by: Eric Blake +Tested-by: Richard W.M. Jones +Signed-off-by: Luiz Capitulino +(cherry picked from commit 02dc4bf5684d3fb46786fab2ecff98214b1df9fe) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-types.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-types.py | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index e9bd638..8680160 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -45,7 +45,10 @@ def generate_fwd_enum_struct(name, members): + return mcgen(''' + typedef struct %(name)sList + { +- %(name)s value; ++ union { ++ %(name)s value; ++ uint64_t padding; ++ }; + struct %(name)sList *next; + } %(name)sList; + ''', +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-types.py-Implement-base-for-unions.patch b/SOURCES/kvm-qapi-types.py-Implement-base-for-unions.patch new file mode 100644 index 0000000..7557ba7 --- /dev/null +++ b/SOURCES/kvm-qapi-types.py-Implement-base-for-unions.patch @@ -0,0 +1,102 @@ +From da3719ca3f47e716394f3a572f0f1403518a8442 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:07 +0200 +Subject: [PATCH 16/38] qapi-types.py: Implement 'base' for unions + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-17-git-send-email-kwolf@redhat.com> +Patchwork-id: 54203 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 16/32] qapi-types.py: Implement 'base' for unions +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +The new 'base' key in a union definition refers to a struct type, which +is inlined into the union definition and can represent fields common to +all kinds. + +For example the following schema definition... + + { 'type': 'BlockOptionsBase', 'data': { 'read-only': 'bool' } } + + { 'union': 'BlockOptions', + 'base': 'BlockOptionsBase', + 'data': { + 'raw': 'BlockOptionsRaw' + 'qcow2': 'BlockOptionsQcow2' + } } + +...would result in this generated C struct: + + struct BlockOptions + { + BlockOptionsKind kind; + union { + void *data; + BlockOptionsRaw * raw; + BlockOptionsQcow2 * qcow2; + }; + bool read_only; + }; + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit e2503f5e213e30e3e9a397d454a35c10b5bdc899) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-types.py | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-types.py | 16 ++++++++++++++-- + 1 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index 9e19920..c0684a7 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -131,7 +131,12 @@ typedef enum %(name)s + + return lookup_decl + enum_decl + +-def generate_union(name, typeinfo): ++def generate_union(expr): ++ ++ name = expr['union'] ++ typeinfo = expr['data'] ++ base = expr.get('base') ++ + ret = mcgen(''' + struct %(name)s + { +@@ -150,6 +155,13 @@ struct %(name)s + + ret += mcgen(''' + }; ++''') ++ ++ if base: ++ struct = find_struct(base) ++ ret += generate_struct_fields(struct['data']) ++ ++ ret += mcgen(''' + }; + ''') + +@@ -307,7 +319,7 @@ for expr in exprs: + ret += generate_type_cleanup_decl(expr['type']) + fdef.write(generate_type_cleanup(expr['type']) + "\n") + elif expr.has_key('union'): +- ret += generate_union(expr['union'], expr['data']) ++ ret += generate_union(expr) + ret += generate_type_cleanup_decl(expr['union'] + "List") + fdef.write(generate_type_cleanup(expr['union'] + "List") + "\n") + ret += generate_type_cleanup_decl(expr['union']) +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-types.py-Split-off-generate_struct_fields.patch b/SOURCES/kvm-qapi-types.py-Split-off-generate_struct_fields.patch new file mode 100644 index 0000000..3c18d9c --- /dev/null +++ b/SOURCES/kvm-qapi-types.py-Split-off-generate_struct_fields.patch @@ -0,0 +1,68 @@ +From 798796e641d7e1146b9d6679958f8264efd1494e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:08:55 +0100 +Subject: [PATCH 42/87] qapi-types.py: Split off generate_struct_fields() + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 55380 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 01/24] qapi-types.py: Split off generate_struct_fields() +Bugzilla: 978402 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 015370301fd90ea5d17522eba00ae2797569ce8b) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-types.py | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-types.py | 19 +++++++++++++------ + 1 files changed, 13 insertions(+), 6 deletions(-) + +diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py +index 20f4bdf..e9bd638 100644 +--- a/scripts/qapi-types.py ++++ b/scripts/qapi-types.py +@@ -51,12 +51,8 @@ typedef struct %(name)sList + ''', + name=name) + +-def generate_struct(structname, fieldname, members): +- ret = mcgen(''' +-struct %(name)s +-{ +-''', +- name=structname) ++def generate_struct_fields(members): ++ ret = '' + + for argname, argentry, optional, structured in parse_args(members): + if optional: +@@ -74,6 +70,17 @@ struct %(name)s + ''', + c_type=c_type(argentry), c_name=c_var(argname)) + ++ return ret ++ ++def generate_struct(structname, fieldname, members): ++ ret = mcgen(''' ++struct %(name)s ++{ ++''', ++ name=structname) ++ ++ ret += generate_struct_fields(members) ++ + if len(fieldname): + fieldname = " " + fieldname + ret += mcgen(''' +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-visit.py-Implement-base-for-unions.patch b/SOURCES/kvm-qapi-visit.py-Implement-base-for-unions.patch new file mode 100644 index 0000000..e230894 --- /dev/null +++ b/SOURCES/kvm-qapi-visit.py-Implement-base-for-unions.patch @@ -0,0 +1,112 @@ +From f1567daa732a9f61641e6089525db0ae7f75aa06 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:09 +0200 +Subject: [PATCH 18/38] qapi-visit.py: Implement 'base' for unions + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-19-git-send-email-kwolf@redhat.com> +Patchwork-id: 54205 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 18/32] qapi-visit.py: Implement 'base' for unions +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This implements the visitor part of base types for unions. Parsed into +QMP, this example schema definition... + + { 'type': 'BlockOptionsBase', 'data': { 'read-only': 'bool' } } + { 'type': 'BlockOptionsQcow2, 'data': { 'lazy-refcounts': 'bool' } } + + { 'union': 'BlockOptions', + 'base': 'BlockOptionsBase', + 'data': { + 'raw': 'BlockOptionsRaw' + 'qcow2': 'BlockOptionsQcow2' + } } + +...would describe the following JSON object: + + { "type": "qcow2", + "read-only": true, + "data": { "lazy-refcounts": false } } + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 0aef92b90d24858eea1ebd52a51bc31563f1fb52) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-visit.py | 30 +++++++++++++++++++++++++----- + 1 file changed, 25 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-visit.py | 30 +++++++++++++++++++++++++----- + 1 files changed, 25 insertions(+), 5 deletions(-) + +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index 5adc2af..be56ba4 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -151,7 +151,13 @@ void visit_type_%(name)s(Visitor *m, %(name)s * obj, const char *name, Error **e + ''', + name=name) + +-def generate_visit_union(name, members): ++def generate_visit_union(expr): ++ ++ name = expr['union'] ++ members = expr['data'] ++ ++ base = expr.get('base') ++ + ret = generate_visit_enum('%sKind' % name, members.keys()) + + ret += mcgen(''' +@@ -164,14 +170,28 @@ void visit_type_%(name)s(Visitor *m, %(name)s ** obj, const char *name, Error ** + visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(name)s), &err); + if (!err) { + if (obj && *obj) { +- visit_type_%(name)sKind(m, &(*obj)->kind, "type", &err); +- if (!err) { +- switch ((*obj)->kind) { + ''', + name=name) + ++ + push_indent() + push_indent() ++ push_indent() ++ ++ if base: ++ struct = find_struct(base) ++ push_indent() ++ ret += generate_visit_struct_fields("", struct['data']) ++ pop_indent() ++ ++ pop_indent() ++ ret += mcgen(''' ++ visit_type_%(name)sKind(m, &(*obj)->kind, "type", &err); ++ if (!err) { ++ switch ((*obj)->kind) { ++''', ++ name=name) ++ + for key in members: + ret += mcgen(''' + case %(abbrev)s_KIND_%(enum)s: +@@ -344,7 +364,7 @@ for expr in exprs: + ret = generate_declaration(expr['type'], expr['data']) + fdecl.write(ret) + elif expr.has_key('union'): +- ret = generate_visit_union(expr['union'], expr['data']) ++ ret = generate_visit_union(expr) + ret += generate_visit_list(expr['union'], expr['data']) + fdef.write(ret) + +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi-visit.py-Split-off-generate_visit_struct_fields.patch b/SOURCES/kvm-qapi-visit.py-Split-off-generate_visit_struct_fields.patch new file mode 100644 index 0000000..08938a4 --- /dev/null +++ b/SOURCES/kvm-qapi-visit.py-Split-off-generate_visit_struct_fields.patch @@ -0,0 +1,116 @@ +From 0c8fb6c71c02e202235933781430efac5c0d7314 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:08 +0200 +Subject: [PATCH 17/38] qapi-visit.py: Split off generate_visit_struct_fields() + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-18-git-send-email-kwolf@redhat.com> +Patchwork-id: 54204 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 17/32] qapi-visit.py: Split off generate_visit_struct_fields() +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit d131c897f3dea8b76d7a487af0f7f5f11d0500a3) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi-visit.py | 62 ++++++++++++++++++++++++++++----------------------- + 1 file changed, 34 insertions(+), 28 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi-visit.py | 62 ++++++++++++++++++++++++++---------------------- + 1 files changed, 34 insertions(+), 28 deletions(-) + +diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py +index a276540..5adc2af 100644 +--- a/scripts/qapi-visit.py ++++ b/scripts/qapi-visit.py +@@ -17,34 +17,9 @@ import os + import getopt + import errno + +-def generate_visit_struct_body(field_prefix, name, members): +- ret = mcgen(''' +-if (!error_is_set(errp)) { +-''') +- push_indent() +- +- if len(field_prefix): +- field_prefix = field_prefix + "." +- ret += mcgen(''' +-Error **errp = &err; /* from outer scope */ +-Error *err = NULL; +-visit_start_struct(m, NULL, "", "%(name)s", 0, &err); +-''', +- name=name) +- else: +- ret += mcgen(''' +-Error *err = NULL; +-visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(name)s), &err); +-''', +- name=name) ++def generate_visit_struct_fields(field_prefix, members): ++ ret = '' + +- ret += mcgen(''' +-if (!err) { +- if (!obj || *obj) { +-''') +- +- push_indent() +- push_indent() + for argname, argentry, optional, structured in parse_args(members): + if optional: + ret += mcgen(''' +@@ -72,9 +47,40 @@ visit_type_%(type)s(m, obj ? &(*obj)->%(c_prefix)s%(c_name)s : NULL, "%(name)s", + visit_end_optional(m, &err); + ''') + +- pop_indent() ++ return ret ++ ++ ++def generate_visit_struct_body(field_prefix, name, members): ++ ret = mcgen(''' ++if (!error_is_set(errp)) { ++''') ++ push_indent() ++ ++ if len(field_prefix): ++ field_prefix = field_prefix + "." ++ ret += mcgen(''' ++Error **errp = &err; /* from outer scope */ ++Error *err = NULL; ++visit_start_struct(m, NULL, "", "%(name)s", 0, &err); ++''', ++ name=name) ++ else: ++ ret += mcgen(''' ++Error *err = NULL; ++visit_start_struct(m, (void **)obj, "%(name)s", name, sizeof(%(name)s), &err); ++''', ++ name=name) ++ + ret += mcgen(''' ++if (!err) { ++ if (!obj || *obj) { ++''') ++ push_indent() ++ push_indent() + ++ ret += generate_visit_struct_fields(field_prefix, members) ++ pop_indent() ++ ret += mcgen(''' + error_propagate(errp, err); + err = NULL; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi.py-Allow-top-level-type-reference-for-command-d.patch b/SOURCES/kvm-qapi.py-Allow-top-level-type-reference-for-command-d.patch new file mode 100644 index 0000000..60629ec --- /dev/null +++ b/SOURCES/kvm-qapi.py-Allow-top-level-type-reference-for-command-d.patch @@ -0,0 +1,84 @@ +From 89a70ccf822a86d05efb34e50958de831a071d05 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:05 +0200 +Subject: [PATCH 14/38] qapi.py: Allow top-level type reference for command definitions + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-15-git-send-email-kwolf@redhat.com> +Patchwork-id: 54201 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 14/32] qapi.py: Allow top-level type reference for command definitions +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +If 'data' for a command definition isn't a dict, but a string, it is +taken as a (struct) type name and the fields of this struct are directly +used as parameters. + +This is useful for transactionable commands that can use the same type +definition for both the transaction action and the arguments of the +standalone command. + +Signed-off-by: Kevin Wolf +Reviewed-by: Michael Roth +Signed-off-by: Luiz Capitulino +(cherry picked from commit b35284ea207a0ae1c0b162344cdef2a83304befc) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi.py | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi.py | 19 +++++++++++++++++++ + 1 files changed, 19 insertions(+), 0 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index daedaea..0c3bd84 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -100,11 +100,18 @@ def parse_schema(fp): + add_enum(expr_eval['enum']) + elif expr_eval.has_key('union'): + add_enum('%sKind' % expr_eval['union']) ++ elif expr_eval.has_key('type'): ++ add_struct(expr_eval) + exprs.append(expr_eval) + + return exprs + + def parse_args(typeinfo): ++ if isinstance(typeinfo, basestring): ++ struct = find_struct(typeinfo) ++ assert struct != None ++ typeinfo = struct['data'] ++ + for member in typeinfo: + argname = member + argentry = typeinfo[member] +@@ -174,6 +181,18 @@ def type_name(name): + return name + + enum_types = [] ++struct_types = [] ++ ++def add_struct(definition): ++ global struct_types ++ struct_types.append(definition) ++ ++def find_struct(name): ++ global struct_types ++ for struct in struct_types: ++ if struct['type'] == name: ++ return struct ++ return None + + def add_enum(name): + global enum_types +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi.py-Avoid-code-duplication.patch b/SOURCES/kvm-qapi.py-Avoid-code-duplication.patch new file mode 100644 index 0000000..4fefb9a --- /dev/null +++ b/SOURCES/kvm-qapi.py-Avoid-code-duplication.patch @@ -0,0 +1,81 @@ +From 4bd5352922b192e3442671b2015633720253a3e4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:04 +0200 +Subject: [PATCH 13/38] qapi.py: Avoid code duplication + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-14-git-send-email-kwolf@redhat.com> +Patchwork-id: 54200 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 13/32] qapi.py: Avoid code duplication +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +The code that interprets the read JSON expression and appends types to +the respective global variables was duplicated. We can avoid that by +splitting off the part that reads from the file. + +Signed-off-by: Kevin Wolf +Reviewed-by: Michael Roth +Signed-off-by: Luiz Capitulino +(cherry picked from commit bd9927fee4e63b451b4ef67a4c49729070d8b05d) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi.py | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi.py | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index afc5f32..daedaea 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -72,10 +72,8 @@ def parse(tokens): + def evaluate(string): + return parse(map(lambda x: x, tokenize(string)))[0] + +-def parse_schema(fp): +- exprs = [] ++def get_expr(fp): + expr = '' +- expr_eval = None + + for line in fp: + if line.startswith('#') or line == '\n': +@@ -84,18 +82,20 @@ def parse_schema(fp): + if line.startswith(' '): + expr += line + elif expr: +- expr_eval = evaluate(expr) +- if expr_eval.has_key('enum'): +- add_enum(expr_eval['enum']) +- elif expr_eval.has_key('union'): +- add_enum('%sKind' % expr_eval['union']) +- exprs.append(expr_eval) ++ yield expr + expr = line + else: + expr += line + + if expr: ++ yield expr ++ ++def parse_schema(fp): ++ exprs = [] ++ ++ for expr in get_expr(fp): + expr_eval = evaluate(expr) ++ + if expr_eval.has_key('enum'): + add_enum(expr_eval['enum']) + elif expr_eval.has_key('union'): +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi.py-Decent-syntax-error-reporting.patch b/SOURCES/kvm-qapi.py-Decent-syntax-error-reporting.patch new file mode 100644 index 0000000..e9098f7 --- /dev/null +++ b/SOURCES/kvm-qapi.py-Decent-syntax-error-reporting.patch @@ -0,0 +1,128 @@ +From b63bf0c1731359b15ec94c233bc5b3e11db089b4 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:14 +0100 +Subject: [PATCH 14/21] qapi.py: Decent syntax error reporting + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-12-git-send-email-armbru@redhat.com> +Patchwork-id: 56126 +O-Subject: [PATCH 7.0 qemu-kvm 11/18] qapi.py: Decent syntax error reporting +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-5-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 2caba36cc61ee3993334bc423f0852f8006fdfcf) +--- + scripts/qapi.py | 29 +++++++++++++++++++++++++++-- + tests/qapi-schema/test-qapi.py | 2 ++ + tests/qapi-schema/unclosed-string.err | 2 +- + 3 files changed, 30 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + scripts/qapi.py | 29 +++++++++++++++++++++++++++-- + tests/qapi-schema/test-qapi.py | 2 ++ + tests/qapi-schema/unclosed-string.err | 2 +- + 3 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 58e315b..342d16c 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -12,6 +12,7 @@ + # See the COPYING.LIB file in the top-level directory. + + from ordereddict import OrderedDict ++import sys + + builtin_types = [ + 'str', 'int', 'number', 'bool', +@@ -34,6 +35,23 @@ builtin_type_qtypes = { + 'uint64': 'QTYPE_QINT', + } + ++class QAPISchemaError(Exception): ++ def __init__(self, schema, msg): ++ self.fp = schema.fp ++ self.msg = msg ++ self.line = self.col = 1 ++ for ch in schema.src[0:schema.pos]: ++ if ch == '\n': ++ self.line += 1 ++ self.col = 1 ++ elif ch == '\t': ++ self.col = (self.col + 7) % 8 + 1 ++ else: ++ self.col += 1 ++ ++ def __str__(self): ++ return "%s:%s:%s: %s" % (self.fp.name, self.line, self.col, self.msg) ++ + class QAPISchema: + + def __init__(self, fp): +@@ -52,6 +70,7 @@ class QAPISchema: + while True: + bol = self.cursor == 0 or self.src[self.cursor-1] == '\n' + self.tok = self.src[self.cursor] ++ self.pos = self.cursor + self.cursor += 1 + self.val = None + +@@ -66,7 +85,8 @@ class QAPISchema: + ch = self.src[self.cursor] + self.cursor += 1 + if ch == '\n': +- raise Exception("Mismatched quotes") ++ raise QAPISchemaError(self, ++ 'Missing terminating "\'"') + if esc: + string += ch + esc = False +@@ -116,7 +136,12 @@ class QAPISchema: + return expr + + def parse_schema(fp): +- schema = QAPISchema(fp) ++ try: ++ schema = QAPISchema(fp) ++ except QAPISchemaError as e: ++ print >>sys.stderr, e ++ exit(1) ++ + exprs = [] + + for expr_eval in schema.exprs: +diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py +index 3280eff..b3d1e1d 100644 +--- a/tests/qapi-schema/test-qapi.py ++++ b/tests/qapi-schema/test-qapi.py +@@ -16,6 +16,8 @@ import sys + + try: + exprs = parse_schema(sys.stdin) ++except SystemExit: ++ raise + except: + print >>sys.stderr, "Crashed:", sys.exc_info()[0] + exit(1) +diff --git a/tests/qapi-schema/unclosed-string.err b/tests/qapi-schema/unclosed-string.err +index 5af46c2..948d883 100644 +--- a/tests/qapi-schema/unclosed-string.err ++++ b/tests/qapi-schema/unclosed-string.err +@@ -1 +1 @@ +-Crashed: ++:1:11: Missing terminating "'" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi.py-Fix-diagnosing-non-objects-at-a-schema-s-top.patch b/SOURCES/kvm-qapi.py-Fix-diagnosing-non-objects-at-a-schema-s-top.patch new file mode 100644 index 0000000..d6b5fa3 --- /dev/null +++ b/SOURCES/kvm-qapi.py-Fix-diagnosing-non-objects-at-a-schema-s-top.patch @@ -0,0 +1,99 @@ +From 73cd8a69f21978e950706a633d9a25e10fe6ad2d Mon Sep 17 00:00:00 2001 +Message-Id: <73cd8a69f21978e950706a633d9a25e10fe6ad2d.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:17 +0100 +Subject: [PATCH 17/21] qapi.py: Fix diagnosing non-objects at a schema's + top-level + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-15-git-send-email-armbru@redhat.com> +Patchwork-id: 56129 +O-Subject: [PATCH 7.0 qemu-kvm 14/18] qapi.py: Fix diagnosing non-objects at a schema's top-level +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Report syntax error instead of crashing. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-8-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 5f3cd2b717c949f3afb502fb4c81193eb18ce6aa) +--- + scripts/qapi.py | 10 ++++++---- + tests/qapi-schema/non-objects.err | 2 +- + tests/qapi-schema/quoted-structural-chars.err | 2 +- + 3 files changed, 8 insertions(+), 6 deletions(-) + +Signed-off-by: Michal Novotny +--- + scripts/qapi.py | 10 ++++++---- + tests/qapi-schema/non-objects.err | 2 +- + tests/qapi-schema/quoted-structural-chars.err | 2 +- + 3 files changed, 8 insertions(+), 6 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 12fb29a..75fc282 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -64,7 +64,7 @@ class QAPISchema: + self.accept() + + while self.tok != None: +- self.exprs.append(self.get_expr()) ++ self.exprs.append(self.get_expr(False)) + + def accept(self): + while True: +@@ -117,7 +117,7 @@ class QAPISchema: + if self.tok != ':': + raise QAPISchemaError(self, 'Expected ":"') + self.accept() +- expr[key] = self.get_expr() ++ expr[key] = self.get_expr(True) + if self.tok == '}': + self.accept() + return expr +@@ -135,7 +135,7 @@ class QAPISchema: + if not self.tok in [ '{', '[', "'" ]: + raise QAPISchemaError(self, 'Expected "{", "[", "]" or string') + while True: +- expr.append(self.get_expr()) ++ expr.append(self.get_expr(True)) + if self.tok == ']': + self.accept() + return expr +@@ -143,7 +143,9 @@ class QAPISchema: + raise QAPISchemaError(self, 'Expected "," or "]"') + self.accept() + +- def get_expr(self): ++ def get_expr(self, nested): ++ if self.tok != '{' and not nested: ++ raise QAPISchemaError(self, 'Expected "{"') + if self.tok == '{': + self.accept() + expr = self.get_members() +diff --git a/tests/qapi-schema/non-objects.err b/tests/qapi-schema/non-objects.err +index 48c849d..a6c2dc2 100644 +--- a/tests/qapi-schema/non-objects.err ++++ b/tests/qapi-schema/non-objects.err +@@ -1 +1 @@ +-Crashed: ++:1:1: Expected "{" +diff --git a/tests/qapi-schema/quoted-structural-chars.err b/tests/qapi-schema/quoted-structural-chars.err +index 48c849d..a6c2dc2 100644 +--- a/tests/qapi-schema/quoted-structural-chars.err ++++ b/tests/qapi-schema/quoted-structural-chars.err +@@ -1 +1 @@ +-Crashed: ++:1:1: Expected "{" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi.py-Fix-schema-parser-to-check-syntax-systematic.patch b/SOURCES/kvm-qapi.py-Fix-schema-parser-to-check-syntax-systematic.patch new file mode 100644 index 0000000..9485d55 --- /dev/null +++ b/SOURCES/kvm-qapi.py-Fix-schema-parser-to-check-syntax-systematic.patch @@ -0,0 +1,267 @@ +From d7e41b169b7c97953ceda7b7e617ae3f3dc5ae49 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:16 +0100 +Subject: [PATCH 16/21] qapi.py: Fix schema parser to check syntax + systematically + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-14-git-send-email-armbru@redhat.com> +Patchwork-id: 56134 +O-Subject: [PATCH 7.0 qemu-kvm 13/18] qapi.py: Fix schema parser to check syntax systematically +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Fixes at least the following parser bugs: + +* accepts any token in place of a colon + +* treats comma as optional + +* crashes when closing braces or brackets are missing + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-7-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 6974ccd542d11ae5fb1e56dd3d753f2de5cc097e) +--- + scripts/qapi.py | 40 +++++++++++++++++++++------- + tests/qapi-schema/missing-colon.err | 1 + + tests/qapi-schema/missing-colon.exit | 2 +- + tests/qapi-schema/missing-colon.out | 3 --- + tests/qapi-schema/missing-comma-list.err | 1 + + tests/qapi-schema/missing-comma-list.exit | 2 +- + tests/qapi-schema/missing-comma-list.out | 3 --- + tests/qapi-schema/missing-comma-object.err | 1 + + tests/qapi-schema/missing-comma-object.exit | 2 +- + tests/qapi-schema/missing-comma-object.out | 3 --- + tests/qapi-schema/trailing-comma-list.err | 1 + + tests/qapi-schema/trailing-comma-list.exit | 2 +- + tests/qapi-schema/trailing-comma-list.out | 3 --- + tests/qapi-schema/trailing-comma-object.err | 1 + + tests/qapi-schema/trailing-comma-object.exit | 2 +- + tests/qapi-schema/trailing-comma-object.out | 3 --- + tests/qapi-schema/unclosed-list.err | 2 +- + tests/qapi-schema/unclosed-object.err | 2 +- + 18 files changed, 42 insertions(+), 32 deletions(-) + +Signed-off-by: Michal Novotny +--- + scripts/qapi.py | 40 +++++++++++++++++++++------- + tests/qapi-schema/missing-colon.err | 1 + + tests/qapi-schema/missing-colon.exit | 2 +- + tests/qapi-schema/missing-colon.out | 3 --- + tests/qapi-schema/missing-comma-list.err | 1 + + tests/qapi-schema/missing-comma-list.exit | 2 +- + tests/qapi-schema/missing-comma-list.out | 3 --- + tests/qapi-schema/missing-comma-object.err | 1 + + tests/qapi-schema/missing-comma-object.exit | 2 +- + tests/qapi-schema/missing-comma-object.out | 3 --- + tests/qapi-schema/trailing-comma-list.err | 1 + + tests/qapi-schema/trailing-comma-list.exit | 2 +- + tests/qapi-schema/trailing-comma-list.out | 3 --- + tests/qapi-schema/trailing-comma-object.err | 1 + + tests/qapi-schema/trailing-comma-object.exit | 2 +- + tests/qapi-schema/trailing-comma-object.out | 3 --- + tests/qapi-schema/unclosed-list.err | 2 +- + tests/qapi-schema/unclosed-object.err | 2 +- + 18 files changed, 42 insertions(+), 32 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 0b48a1e..12fb29a 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -106,24 +106,42 @@ class QAPISchema: + + def get_members(self): + expr = OrderedDict() +- while self.tok != '}': ++ if self.tok == '}': ++ self.accept() ++ return expr ++ if self.tok != "'": ++ raise QAPISchemaError(self, 'Expected string or "}"') ++ while True: + key = self.val + self.accept() +- self.accept() # : ++ if self.tok != ':': ++ raise QAPISchemaError(self, 'Expected ":"') ++ self.accept() + expr[key] = self.get_expr() +- if self.tok == ',': ++ if self.tok == '}': + self.accept() +- self.accept() +- return expr ++ return expr ++ if self.tok != ',': ++ raise QAPISchemaError(self, 'Expected "," or "}"') ++ self.accept() ++ if self.tok != "'": ++ raise QAPISchemaError(self, 'Expected string') + + def get_values(self): + expr = [] +- while self.tok != ']': ++ if self.tok == ']': ++ self.accept() ++ return expr ++ if not self.tok in [ '{', '[', "'" ]: ++ raise QAPISchemaError(self, 'Expected "{", "[", "]" or string') ++ while True: + expr.append(self.get_expr()) +- if self.tok == ',': ++ if self.tok == ']': + self.accept() +- self.accept() +- return expr ++ return expr ++ if self.tok != ',': ++ raise QAPISchemaError(self, 'Expected "," or "]"') ++ self.accept() + + def get_expr(self): + if self.tok == '{': +@@ -132,9 +150,11 @@ class QAPISchema: + elif self.tok == '[': + self.accept() + expr = self.get_values() +- else: ++ elif self.tok == "'": + expr = self.val + self.accept() ++ else: ++ raise QAPISchemaError(self, 'Expected "{", "[" or string') + return expr + + def parse_schema(fp): +diff --git a/tests/qapi-schema/missing-colon.err b/tests/qapi-schema/missing-colon.err +index e69de29..9f2a355 100644 +--- a/tests/qapi-schema/missing-colon.err ++++ b/tests/qapi-schema/missing-colon.err +@@ -0,0 +1 @@ ++:1:10: Expected ":" +diff --git a/tests/qapi-schema/missing-colon.exit b/tests/qapi-schema/missing-colon.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/missing-colon.exit ++++ b/tests/qapi-schema/missing-colon.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/missing-colon.out b/tests/qapi-schema/missing-colon.out +index e67068c..e69de29 100644 +--- a/tests/qapi-schema/missing-colon.out ++++ b/tests/qapi-schema/missing-colon.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', None), ('data', ['good', 'bad', 'ugly'])])] +-[None] +-[] +diff --git a/tests/qapi-schema/missing-comma-list.err b/tests/qapi-schema/missing-comma-list.err +index e69de29..4fe0700 100644 +--- a/tests/qapi-schema/missing-comma-list.err ++++ b/tests/qapi-schema/missing-comma-list.err +@@ -0,0 +1 @@ ++:2:20: Expected "," or "]" +diff --git a/tests/qapi-schema/missing-comma-list.exit b/tests/qapi-schema/missing-comma-list.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/missing-comma-list.exit ++++ b/tests/qapi-schema/missing-comma-list.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/missing-comma-list.out b/tests/qapi-schema/missing-comma-list.out +index e3bd904..e69de29 100644 +--- a/tests/qapi-schema/missing-comma-list.out ++++ b/tests/qapi-schema/missing-comma-list.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] +-['Status'] +-[] +diff --git a/tests/qapi-schema/missing-comma-object.err b/tests/qapi-schema/missing-comma-object.err +index e69de29..b0121b5 100644 +--- a/tests/qapi-schema/missing-comma-object.err ++++ b/tests/qapi-schema/missing-comma-object.err +@@ -0,0 +1 @@ ++:2:3: Expected "," or "}" +diff --git a/tests/qapi-schema/missing-comma-object.exit b/tests/qapi-schema/missing-comma-object.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/missing-comma-object.exit ++++ b/tests/qapi-schema/missing-comma-object.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/missing-comma-object.out b/tests/qapi-schema/missing-comma-object.out +index e3bd904..e69de29 100644 +--- a/tests/qapi-schema/missing-comma-object.out ++++ b/tests/qapi-schema/missing-comma-object.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] +-['Status'] +-[] +diff --git a/tests/qapi-schema/trailing-comma-list.err b/tests/qapi-schema/trailing-comma-list.err +index e69de29..ff839a3 100644 +--- a/tests/qapi-schema/trailing-comma-list.err ++++ b/tests/qapi-schema/trailing-comma-list.err +@@ -0,0 +1 @@ ++:2:36: Expected "{", "[" or string +diff --git a/tests/qapi-schema/trailing-comma-list.exit b/tests/qapi-schema/trailing-comma-list.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/trailing-comma-list.exit ++++ b/tests/qapi-schema/trailing-comma-list.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/trailing-comma-list.out b/tests/qapi-schema/trailing-comma-list.out +index e3bd904..e69de29 100644 +--- a/tests/qapi-schema/trailing-comma-list.out ++++ b/tests/qapi-schema/trailing-comma-list.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] +-['Status'] +-[] +diff --git a/tests/qapi-schema/trailing-comma-object.err b/tests/qapi-schema/trailing-comma-object.err +index e69de29..f540962 100644 +--- a/tests/qapi-schema/trailing-comma-object.err ++++ b/tests/qapi-schema/trailing-comma-object.err +@@ -0,0 +1 @@ ++:2:38: Expected string +diff --git a/tests/qapi-schema/trailing-comma-object.exit b/tests/qapi-schema/trailing-comma-object.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/trailing-comma-object.exit ++++ b/tests/qapi-schema/trailing-comma-object.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/trailing-comma-object.out b/tests/qapi-schema/trailing-comma-object.out +index e3bd904..e69de29 100644 +--- a/tests/qapi-schema/trailing-comma-object.out ++++ b/tests/qapi-schema/trailing-comma-object.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] +-['Status'] +-[] +diff --git a/tests/qapi-schema/unclosed-list.err b/tests/qapi-schema/unclosed-list.err +index f9a9c2a..0e837a7 100644 +--- a/tests/qapi-schema/unclosed-list.err ++++ b/tests/qapi-schema/unclosed-list.err +@@ -1 +1 @@ +-Crashed: ++:1:20: Expected "," or "]" +diff --git a/tests/qapi-schema/unclosed-object.err b/tests/qapi-schema/unclosed-object.err +index f9a9c2a..e6dc950 100644 +--- a/tests/qapi-schema/unclosed-object.err ++++ b/tests/qapi-schema/unclosed-object.err +@@ -1 +1 @@ +-Crashed: ++:1:21: Expected "," or "}" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi.py-Maintain-a-list-of-union-types.patch b/SOURCES/kvm-qapi.py-Maintain-a-list-of-union-types.patch new file mode 100644 index 0000000..060320c --- /dev/null +++ b/SOURCES/kvm-qapi.py-Maintain-a-list-of-union-types.patch @@ -0,0 +1,71 @@ +From 7fa89ebb4c2f761a8df462cf9ffcb6174b4a4a26 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:14 +0200 +Subject: [PATCH 23/38] qapi.py: Maintain a list of union types + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-24-git-send-email-kwolf@redhat.com> +Patchwork-id: 54210 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 23/32] qapi.py: Maintain a list of union types +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit ea66c6d8819c8fc5f73a28554992be64e5399fed) + +Signed-off-by: Kevin Wolf +--- + scripts/qapi.py | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + scripts/qapi.py | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 0c3bd84..03c42a9 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -99,6 +99,7 @@ def parse_schema(fp): + if expr_eval.has_key('enum'): + add_enum(expr_eval['enum']) + elif expr_eval.has_key('union'): ++ add_union(expr_eval) + add_enum('%sKind' % expr_eval['union']) + elif expr_eval.has_key('type'): + add_struct(expr_eval) +@@ -182,6 +183,7 @@ def type_name(name): + + enum_types = [] + struct_types = [] ++union_types = [] + + def add_struct(definition): + global struct_types +@@ -194,6 +196,17 @@ def find_struct(name): + return struct + return None + ++def add_union(definition): ++ global union_types ++ union_types.append(definition) ++ ++def find_union(name): ++ global union_types ++ for union in union_types: ++ if union['union'] == name: ++ return union ++ return None ++ + def add_enum(name): + global enum_types + enum_types.append(name) +-- +1.7.1 + diff --git a/SOURCES/kvm-qapi.py-Permit-comments-starting-anywhere-on-the-lin.patch b/SOURCES/kvm-qapi.py-Permit-comments-starting-anywhere-on-the-lin.patch new file mode 100644 index 0000000..e5a0cbf --- /dev/null +++ b/SOURCES/kvm-qapi.py-Permit-comments-starting-anywhere-on-the-lin.patch @@ -0,0 +1,100 @@ +From eee270ab05e29d24d26d8834a00ec0dfcfc99d66 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:19 +0100 +Subject: [PATCH 19/21] qapi.py: Permit comments starting anywhere on the line + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-17-git-send-email-armbru@redhat.com> +Patchwork-id: 56128 +O-Subject: [PATCH 7.0 qemu-kvm 16/18] qapi.py: Permit comments starting anywhere on the line +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-10-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit f1a145e154b0a227a1e192009ca30b351de0a8ef) + +Backporting hack: now that indented comments work properly, revert the +damage to qapi-schema.json. +--- + qapi-schema.json | 2 +- + scripts/qapi.py | 3 +-- + tests/qapi-schema/comments.err | 1 - + tests/qapi-schema/comments.exit | 2 +- + tests/qapi-schema/comments.out | 3 +++ + 5 files changed, 6 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + qapi-schema.json | 2 +- + scripts/qapi.py | 3 +-- + tests/qapi-schema/comments.err | 1 - + tests/qapi-schema/comments.exit | 2 +- + tests/qapi-schema/comments.out | 3 +++ + 5 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index 81fe591..b27108f 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -3437,7 +3437,7 @@ + 'spiceport' : 'ChardevSpicePort', + 'vc' : 'ChardevVC', + 'ringbuf': 'ChardevRingbuf', +-# next one is just for compatibility ++ # next one is just for compatibility + 'memory' : 'ChardevRingbuf' } } + + ## +diff --git a/scripts/qapi.py b/scripts/qapi.py +index f64b7b2..0ebea94 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -68,13 +68,12 @@ class QAPISchema: + + def accept(self): + while True: +- bol = self.cursor == 0 or self.src[self.cursor-1] == '\n' + self.tok = self.src[self.cursor] + self.pos = self.cursor + self.cursor += 1 + self.val = None + +- if self.tok == '#' and bol: ++ if self.tok == '#': + self.cursor = self.src.find('\n', self.cursor) + elif self.tok in ['{', '}', ':', ',', '[', ']']: + return +diff --git a/tests/qapi-schema/comments.err b/tests/qapi-schema/comments.err +index 4a82b26..e69de29 100644 +--- a/tests/qapi-schema/comments.err ++++ b/tests/qapi-schema/comments.err +@@ -1 +0,0 @@ +-:2:33: Stray "#" +diff --git a/tests/qapi-schema/comments.exit b/tests/qapi-schema/comments.exit +index d00491f..573541a 100644 +--- a/tests/qapi-schema/comments.exit ++++ b/tests/qapi-schema/comments.exit +@@ -1 +1 @@ +-1 ++0 +diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out +index e69de29..e3bd904 100644 +--- a/tests/qapi-schema/comments.out ++++ b/tests/qapi-schema/comments.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi.py-Reject-invalid-characters-in-schema-file.patch b/SOURCES/kvm-qapi.py-Reject-invalid-characters-in-schema-file.patch new file mode 100644 index 0000000..0fa2da4 --- /dev/null +++ b/SOURCES/kvm-qapi.py-Reject-invalid-characters-in-schema-file.patch @@ -0,0 +1,128 @@ +From b6e8e4d8b191e48d0a850eb6715ff2d70dd1ed8b Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:15 +0100 +Subject: [PATCH 15/21] qapi.py: Reject invalid characters in schema file + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-13-git-send-email-armbru@redhat.com> +Patchwork-id: 56131 +O-Subject: [PATCH 7.0 qemu-kvm 12/18] qapi.py: Reject invalid characters in schema file +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-6-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 9213aa5391f7c8d3766420d96888f1353af4c890) + +Backporting hack: need to unindent a comment in qapi-schem.json we got +from commit 8707cd1 via v1.5.3. The upstream trunk has the commit +after the QAPI parser rewrite. Indented comments just work there. +The stable branch doesn't have the QAPI parser rewrite. It works only +because it silently ignores invalid characters. Misfeature, cleaned +up in this commit. + +The comment will be reindented in the backport of the commit that +makes indented comments work properly. +--- + qapi-schema.json | 2 +- + scripts/qapi.py | 2 ++ + tests/qapi-schema/comments.err | 1 + + tests/qapi-schema/comments.exit | 2 +- + tests/qapi-schema/comments.out | 3 --- + tests/qapi-schema/funny-char.err | 1 + + tests/qapi-schema/funny-char.exit | 2 +- + tests/qapi-schema/funny-char.out | 3 --- + 8 files changed, 7 insertions(+), 9 deletions(-) + +Signed-off-by: Michal Novotny +--- + qapi-schema.json | 2 +- + scripts/qapi.py | 2 ++ + tests/qapi-schema/comments.err | 1 + + tests/qapi-schema/comments.exit | 2 +- + tests/qapi-schema/comments.out | 3 --- + tests/qapi-schema/funny-char.err | 1 + + tests/qapi-schema/funny-char.exit | 2 +- + tests/qapi-schema/funny-char.out | 3 --- + 8 files changed, 7 insertions(+), 9 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index b27108f..81fe591 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -3437,7 +3437,7 @@ + 'spiceport' : 'ChardevSpicePort', + 'vc' : 'ChardevVC', + 'ringbuf': 'ChardevRingbuf', +- # next one is just for compatibility ++# next one is just for compatibility + 'memory' : 'ChardevRingbuf' } } + + ## +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 342d16c..0b48a1e 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -101,6 +101,8 @@ class QAPISchema: + if self.cursor == len(self.src): + self.tok = None + return ++ elif not self.tok.isspace(): ++ raise QAPISchemaError(self, 'Stray "%s"' % self.tok) + + def get_members(self): + expr = OrderedDict() +diff --git a/tests/qapi-schema/comments.err b/tests/qapi-schema/comments.err +index e69de29..4a82b26 100644 +--- a/tests/qapi-schema/comments.err ++++ b/tests/qapi-schema/comments.err +@@ -0,0 +1 @@ ++:2:33: Stray "#" +diff --git a/tests/qapi-schema/comments.exit b/tests/qapi-schema/comments.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/comments.exit ++++ b/tests/qapi-schema/comments.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out +index e3bd904..e69de29 100644 +--- a/tests/qapi-schema/comments.out ++++ b/tests/qapi-schema/comments.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] +-['Status'] +-[] +diff --git a/tests/qapi-schema/funny-char.err b/tests/qapi-schema/funny-char.err +index e69de29..d3dd293 100644 +--- a/tests/qapi-schema/funny-char.err ++++ b/tests/qapi-schema/funny-char.err +@@ -0,0 +1 @@ ++:2:36: Stray ";" +diff --git a/tests/qapi-schema/funny-char.exit b/tests/qapi-schema/funny-char.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/funny-char.exit ++++ b/tests/qapi-schema/funny-char.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/funny-char.out b/tests/qapi-schema/funny-char.out +index e3bd904..e69de29 100644 +--- a/tests/qapi-schema/funny-char.out ++++ b/tests/qapi-schema/funny-char.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] +-['Status'] +-[] +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi.py-Rename-expr_eval-to-expr-in-parse_schema.patch b/SOURCES/kvm-qapi.py-Rename-expr_eval-to-expr-in-parse_schema.patch new file mode 100644 index 0000000..3da085b --- /dev/null +++ b/SOURCES/kvm-qapi.py-Rename-expr_eval-to-expr-in-parse_schema.patch @@ -0,0 +1,65 @@ +From 51b573c7eea7a3bcaa7cd45c0b0ee39c6c912414 Mon Sep 17 00:00:00 2001 +Message-Id: <51b573c7eea7a3bcaa7cd45c0b0ee39c6c912414.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:18 +0100 +Subject: [PATCH 18/21] qapi.py: Rename expr_eval to expr in parse_schema() + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-16-git-send-email-armbru@redhat.com> +Patchwork-id: 56132 +O-Subject: [PATCH 7.0 qemu-kvm 15/18] qapi.py: Rename expr_eval to expr in parse_schema() +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-9-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 28b8bd4c759389bdc8430acfa588a23e4a9a7fb8) +--- + scripts/qapi.py | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +Signed-off-by: Michal Novotny +--- + scripts/qapi.py | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 75fc282..f64b7b2 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -168,15 +168,15 @@ def parse_schema(fp): + + exprs = [] + +- for expr_eval in schema.exprs: +- if expr_eval.has_key('enum'): +- add_enum(expr_eval['enum']) +- elif expr_eval.has_key('union'): +- add_union(expr_eval) +- add_enum('%sKind' % expr_eval['union']) +- elif expr_eval.has_key('type'): +- add_struct(expr_eval) +- exprs.append(expr_eval) ++ for expr in schema.exprs: ++ if expr.has_key('enum'): ++ add_enum(expr['enum']) ++ elif expr.has_key('union'): ++ add_union(expr) ++ add_enum('%sKind' % expr['union']) ++ elif expr.has_key('type'): ++ add_struct(expr) ++ exprs.append(expr) + + return exprs + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qapi.py-Restructure-lexer-and-parser.patch b/SOURCES/kvm-qapi.py-Restructure-lexer-and-parser.patch new file mode 100644 index 0000000..3a82e26 --- /dev/null +++ b/SOURCES/kvm-qapi.py-Restructure-lexer-and-parser.patch @@ -0,0 +1,333 @@ +From db918ab21be13a3c1f3c65d3821c06cf12528099 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:13 +0100 +Subject: [PATCH 13/21] qapi.py: Restructure lexer and parser + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-11-git-send-email-armbru@redhat.com> +Patchwork-id: 56127 +O-Subject: [PATCH 7.0 qemu-kvm 10/18] qapi.py: Restructure lexer and parser +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +The parser has a rather unorthodox structure: + + Until EOF: + + Read a section: + + Generator function get_expr() yields one section after the + other, as a string. An unindented, non-empty line that + isn't a comment starts a new section. + + Lexing: + + Split section into a list of tokens (strings), with help + of generator function tokenize(). + + Parsing: + + Parse the first expression from the list of tokens, with + parse(), throw away any remaining tokens. + + In parse_schema(): record value of an enum, union or + struct key (if any) in the appropriate global table, + append expression to the list of expressions. + + Return list of expressions. + +Known issues: + +(1) Indentation is significant, unlike in real JSON. + +(2) Neither lexer nor parser have any idea of source positions. Error + reporting is hard, let's go shopping. + +(3) The one error we bother to detect, we "report" via raise. + +(4) The lexer silently ignores invalid characters. + +(5) If everything in a section gets ignored, the parser crashes. + +(6) The lexer treats a string containing a structural character exactly + like the structural character. + +(7) Tokens trailing the first expression in a section are silently + ignored. + +(8) The parser accepts any token in place of a colon. + +(9) The parser treats comma as optional. + +(10) parse() crashes on unexpected EOF. + +(11) parse_schema() crashes when a section's expression isn't a JSON + object. + +Replace this piece of original art by a thoroughly unoriginal design. +Takes care of (1), (2), (5), (6) and (7), and lays the groundwork for +addressing the others. Generated source files remain unchanged. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-4-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit c7a3f25200c8692e969f21c7f2555630ec0d0d30) +--- + scripts/qapi.py | 163 +++++++++++++------------ + tests/qapi-schema/indented-expr.out | 2 +- + tests/qapi-schema/missing-colon.out | 4 +- + tests/qapi-schema/quoted-structural-chars.err | 1 + + tests/qapi-schema/quoted-structural-chars.exit | 2 +- + tests/qapi-schema/quoted-structural-chars.out | 3 - + 6 files changed, 88 insertions(+), 87 deletions(-) + +Signed-off-by: Michal Novotny +--- + scripts/qapi.py | 163 +++++++++++++------------ + tests/qapi-schema/indented-expr.out | 2 +- + tests/qapi-schema/missing-colon.out | 4 +- + tests/qapi-schema/quoted-structural-chars.err | 1 + + tests/qapi-schema/quoted-structural-chars.exit | 2 +- + tests/qapi-schema/quoted-structural-chars.out | 3 - + 6 files changed, 88 insertions(+), 87 deletions(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 38c808e..58e315b 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -2,9 +2,11 @@ + # QAPI helper library + # + # Copyright IBM, Corp. 2011 ++# Copyright (c) 2013 Red Hat Inc. + # + # Authors: + # Anthony Liguori ++# Markus Armbruster + # + # This work is licensed under the terms of the GNU GPLv2. + # See the COPYING.LIB file in the top-level directory. +@@ -32,91 +34,92 @@ builtin_type_qtypes = { + 'uint64': 'QTYPE_QINT', + } + +-def tokenize(data): +- while len(data): +- ch = data[0] +- data = data[1:] +- if ch in ['{', '}', ':', ',', '[', ']']: +- yield ch +- elif ch in ' \n': +- None +- elif ch == "'": +- string = '' +- esc = False +- while True: +- if (data == ''): +- raise Exception("Mismatched quotes") +- ch = data[0] +- data = data[1:] +- if esc: +- string += ch +- esc = False +- elif ch == "\\": +- esc = True +- elif ch == "'": +- break +- else: +- string += ch +- yield string +- +-def parse(tokens): +- if tokens[0] == '{': +- ret = OrderedDict() +- tokens = tokens[1:] +- while tokens[0] != '}': +- key = tokens[0] +- tokens = tokens[1:] +- +- tokens = tokens[1:] # : +- +- value, tokens = parse(tokens) +- +- if tokens[0] == ',': +- tokens = tokens[1:] +- +- ret[key] = value +- tokens = tokens[1:] +- return ret, tokens +- elif tokens[0] == '[': +- ret = [] +- tokens = tokens[1:] +- while tokens[0] != ']': +- value, tokens = parse(tokens) +- if tokens[0] == ',': +- tokens = tokens[1:] +- ret.append(value) +- tokens = tokens[1:] +- return ret, tokens +- else: +- return tokens[0], tokens[1:] +- +-def evaluate(string): +- return parse(map(lambda x: x, tokenize(string)))[0] +- +-def get_expr(fp): +- expr = '' +- +- for line in fp: +- if line.startswith('#') or line == '\n': +- continue +- +- if line.startswith(' '): +- expr += line +- elif expr: +- yield expr +- expr = line ++class QAPISchema: ++ ++ def __init__(self, fp): ++ self.fp = fp ++ self.src = fp.read() ++ if self.src == '' or self.src[-1] != '\n': ++ self.src += '\n' ++ self.cursor = 0 ++ self.exprs = [] ++ self.accept() ++ ++ while self.tok != None: ++ self.exprs.append(self.get_expr()) ++ ++ def accept(self): ++ while True: ++ bol = self.cursor == 0 or self.src[self.cursor-1] == '\n' ++ self.tok = self.src[self.cursor] ++ self.cursor += 1 ++ self.val = None ++ ++ if self.tok == '#' and bol: ++ self.cursor = self.src.find('\n', self.cursor) ++ elif self.tok in ['{', '}', ':', ',', '[', ']']: ++ return ++ elif self.tok == "'": ++ string = '' ++ esc = False ++ while True: ++ ch = self.src[self.cursor] ++ self.cursor += 1 ++ if ch == '\n': ++ raise Exception("Mismatched quotes") ++ if esc: ++ string += ch ++ esc = False ++ elif ch == "\\": ++ esc = True ++ elif ch == "'": ++ self.val = string ++ return ++ else: ++ string += ch ++ elif self.tok == '\n': ++ if self.cursor == len(self.src): ++ self.tok = None ++ return ++ ++ def get_members(self): ++ expr = OrderedDict() ++ while self.tok != '}': ++ key = self.val ++ self.accept() ++ self.accept() # : ++ expr[key] = self.get_expr() ++ if self.tok == ',': ++ self.accept() ++ self.accept() ++ return expr ++ ++ def get_values(self): ++ expr = [] ++ while self.tok != ']': ++ expr.append(self.get_expr()) ++ if self.tok == ',': ++ self.accept() ++ self.accept() ++ return expr ++ ++ def get_expr(self): ++ if self.tok == '{': ++ self.accept() ++ expr = self.get_members() ++ elif self.tok == '[': ++ self.accept() ++ expr = self.get_values() + else: +- expr += line +- +- if expr: +- yield expr ++ expr = self.val ++ self.accept() ++ return expr + + def parse_schema(fp): ++ schema = QAPISchema(fp) + exprs = [] + +- for expr in get_expr(fp): +- expr_eval = evaluate(expr) +- ++ for expr_eval in schema.exprs: + if expr_eval.has_key('enum'): + add_enum(expr_eval['enum']) + elif expr_eval.has_key('union'): +diff --git a/tests/qapi-schema/indented-expr.out b/tests/qapi-schema/indented-expr.out +index 98ae692..98af89a 100644 +--- a/tests/qapi-schema/indented-expr.out ++++ b/tests/qapi-schema/indented-expr.out +@@ -1,3 +1,3 @@ +-[OrderedDict([('id', 'eins')])] ++[OrderedDict([('id', 'eins')]), OrderedDict([('id', 'zwei')])] + [] + [] +diff --git a/tests/qapi-schema/missing-colon.out b/tests/qapi-schema/missing-colon.out +index 50f827e..e67068c 100644 +--- a/tests/qapi-schema/missing-colon.out ++++ b/tests/qapi-schema/missing-colon.out +@@ -1,3 +1,3 @@ +-[OrderedDict([('enum', ','), ('data', ['good', 'bad', 'ugly'])])] +-[','] ++[OrderedDict([('enum', None), ('data', ['good', 'bad', 'ugly'])])] ++[None] + [] +diff --git a/tests/qapi-schema/quoted-structural-chars.err b/tests/qapi-schema/quoted-structural-chars.err +index e69de29..48c849d 100644 +--- a/tests/qapi-schema/quoted-structural-chars.err ++++ b/tests/qapi-schema/quoted-structural-chars.err +@@ -0,0 +1 @@ ++Crashed: +diff --git a/tests/qapi-schema/quoted-structural-chars.exit b/tests/qapi-schema/quoted-structural-chars.exit +index 573541a..d00491f 100644 +--- a/tests/qapi-schema/quoted-structural-chars.exit ++++ b/tests/qapi-schema/quoted-structural-chars.exit +@@ -1 +1 @@ +-0 ++1 +diff --git a/tests/qapi-schema/quoted-structural-chars.out b/tests/qapi-schema/quoted-structural-chars.out +index 85405be..e69de29 100644 +--- a/tests/qapi-schema/quoted-structural-chars.out ++++ b/tests/qapi-schema/quoted-structural-chars.out +@@ -1,3 +0,0 @@ +-[OrderedDict([('key1', 'value1'), ('key2', [])])] +-[] +-[] +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qcow-correctly-propagate-errors.patch b/SOURCES/kvm-qcow-correctly-propagate-errors.patch new file mode 100644 index 0000000..fca5246 --- /dev/null +++ b/SOURCES/kvm-qcow-correctly-propagate-errors.patch @@ -0,0 +1,80 @@ +From 7f2252627e64e975707b01eb1f4da7c2015ca457 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Jun 2014 13:54:43 +0200 +Subject: [PATCH 26/31] qcow: correctly propagate errors + +RH-Author: Kevin Wolf +Message-id: <1401717288-3918-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 59096 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 1/6] qcow: correctly propagate errors +Bugzilla: 1097229 1097230 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +From: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1097230 + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit b6d5066d32f9e6c3d7508c1af9ae78327a927120) +Signed-off-by: Kevin Wolf +--- + block/qcow.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow.c | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/block/qcow.c b/block/qcow.c +index c470e05..b57b900 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -119,17 +119,19 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + if (header.version != QCOW_VERSION) { + char version[64]; + snprintf(version, sizeof(version), "QCOW version %d", header.version); +- qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, +- bs->device_name, "qcow", version); ++ error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, ++ bs->device_name, "qcow", version); + ret = -ENOTSUP; + goto fail; + } + + if (header.size <= 1 || header.cluster_bits < 9) { ++ error_setg(errp, "invalid value in qcow header"); + ret = -EINVAL; + goto fail; + } + if (header.crypt_method > QCOW_CRYPT_AES) { ++ error_setg(errp, "invalid encryption method in qcow header"); + ret = -EINVAL; + goto fail; + } +@@ -686,15 +688,13 @@ static int qcow_create(const char *filename, QEMUOptionParameter *options, + + ret = bdrv_create_file(filename, options, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + return ret; + } + + ret = bdrv_file_open(&qcow_bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow1-Check-maximum-cluster-size.patch b/SOURCES/kvm-qcow1-Check-maximum-cluster-size.patch new file mode 100644 index 0000000..6ba8daf --- /dev/null +++ b/SOURCES/kvm-qcow1-Check-maximum-cluster-size.patch @@ -0,0 +1,177 @@ +From d40996f249a4e28a0979cd7919192d9f440800b5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Jun 2014 13:54:45 +0200 +Subject: [PATCH 28/31] qcow1: Check maximum cluster size + +RH-Author: Kevin Wolf +Message-id: <1401717288-3918-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 59098 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 3/6] qcow1: Check maximum cluster size +Bugzilla: 1097229 1097230 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1097230 + +Huge values for header.cluster_bits cause unbounded allocations (e.g. +for s->cluster_cache) and crash qemu this way. Less huge values may +survive those allocations, but can cause integer overflows later on. + +The only cluster sizes that qemu can create are 4k (for standalone +images) and 512 (for images with backing files), so we can limit it +to 64k. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +(cherry picked from commit 7159a45b2bf2dcb9f49f1e27d1d3d135a0247a2f) +--- + block/qcow.c | 10 ++++++-- + tests/qemu-iotests/092 | 63 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/092.out | 13 ++++++++++ + tests/qemu-iotests/group | 1 + + 4 files changed, 85 insertions(+), 2 deletions(-) + create mode 100755 tests/qemu-iotests/092 + create mode 100644 tests/qemu-iotests/092.out + +Signed-off-by: Miroslav Rezanina +--- + block/qcow.c | 10 +++++- + tests/qemu-iotests/092 | 63 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/092.out | 13 +++++++++ + tests/qemu-iotests/group | 1 + + 4 files changed, 85 insertions(+), 2 deletions(-) + create mode 100755 tests/qemu-iotests/092 + create mode 100644 tests/qemu-iotests/092.out + +diff --git a/block/qcow.c b/block/qcow.c +index 220ac04..2efe2fc 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -126,11 +126,17 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- if (header.size <= 1 || header.cluster_bits < 9) { +- error_setg(errp, "invalid value in qcow header"); ++ if (header.size <= 1) { ++ error_setg(errp, "Image size is too small (must be at least 2 bytes)"); + ret = -EINVAL; + goto fail; + } ++ if (header.cluster_bits < 9 || header.cluster_bits > 16) { ++ error_setg(errp, "Cluster size must be between 512 and 64k"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + if (header.crypt_method > QCOW_CRYPT_AES) { + error_setg(errp, "invalid encryption method in qcow header"); + ret = -EINVAL; +diff --git a/tests/qemu-iotests/092 b/tests/qemu-iotests/092 +new file mode 100755 +index 0000000..d060e6f +--- /dev/null ++++ b/tests/qemu-iotests/092 +@@ -0,0 +1,63 @@ ++#!/bin/bash ++# ++# qcow1 format input validation tests ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ rm -f $TEST_IMG.snap ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow ++_supported_proto generic ++_supported_os Linux ++ ++offset_cluster_bits=32 ++ ++echo ++echo "== Invalid cluster size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_cluster_bits" "\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_cluster_bits" "\x1f" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_cluster_bits" "\x08" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_cluster_bits" "\x11" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/092.out b/tests/qemu-iotests/092.out +new file mode 100644 +index 0000000..8bf8158 +--- /dev/null ++++ b/tests/qemu-iotests/092.out +@@ -0,0 +1,13 @@ ++QA output created by 092 ++ ++== Invalid cluster size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow: Cluster size must be between 512 and 64k ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: Cluster size must be between 512 and 64k ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: Cluster size must be between 512 and 64k ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: Cluster size must be between 512 and 64k ++no file open, try 'help open' ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 1c91036..e588404 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -82,3 +82,4 @@ + 084 img auto + 086 rw auto quick + 088 rw auto ++092 rw auto quick +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow1-Make-padding-in-the-header-explicit.patch b/SOURCES/kvm-qcow1-Make-padding-in-the-header-explicit.patch new file mode 100644 index 0000000..a48144c --- /dev/null +++ b/SOURCES/kvm-qcow1-Make-padding-in-the-header-explicit.patch @@ -0,0 +1,54 @@ +From 6cce28d5332ad52ae9ec531ae382667bb03cbeb6 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Jun 2014 13:54:44 +0200 +Subject: [PATCH 27/31] qcow1: Make padding in the header explicit + +RH-Author: Kevin Wolf +Message-id: <1401717288-3918-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 59097 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 2/6] qcow1: Make padding in the header explicit +Bugzilla: 1097229 1097230 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1097230 + +We were relying on all compilers inserting the same padding in the +header struct that is used for the on-disk format. Let's not do that. +Mark the struct as packed and insert an explicit padding field for +compatibility. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit ea54feff58efedc809641474b25a3130309678e7) +--- + block/qcow.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/block/qcow.c b/block/qcow.c +index b57b900..220ac04 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -48,9 +48,10 @@ typedef struct QCowHeader { + uint64_t size; /* in bytes */ + uint8_t cluster_bits; + uint8_t l2_bits; ++ uint16_t padding; + uint32_t crypt_method; + uint64_t l1_table_offset; +-} QCowHeader; ++} QEMU_PACKED QCowHeader; + + #define L2_CACHE_SIZE 16 + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow1-Stricter-backing-file-length-check.patch b/SOURCES/kvm-qcow1-Stricter-backing-file-length-check.patch new file mode 100644 index 0000000..18cdd08 --- /dev/null +++ b/SOURCES/kvm-qcow1-Stricter-backing-file-length-check.patch @@ -0,0 +1,116 @@ +From 4abd8ed02c277e6cd3202f61c2044a5cdff417de Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Jun 2014 13:54:48 +0200 +Subject: [PATCH 31/31] qcow1: Stricter backing file length check +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Kevin Wolf +Message-id: <1401717288-3918-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 59100 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 6/6] qcow1: Stricter backing file length check +Bugzilla: 1097236 1097237 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1097237 + +Like qcow2 since commit 6d33e8e7, error out on invalid lengths instead +of silently truncating them to 1023. + +Also don't rely on bdrv_pread() catching integer overflows that make len +negative, but use unsigned variables in the first place. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +│(cherry picked from commit d66e5cee002c471b78139228a4e7012736b375f9) +--- + block/qcow.c | 7 +++++-- + tests/qemu-iotests/092 | 11 +++++++++++ + tests/qemu-iotests/092.out | 7 +++++++ + 3 files changed, 23 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow.c | 7 +++++-- + tests/qemu-iotests/092 | 11 +++++++++++ + tests/qemu-iotests/092.out | 7 +++++++ + 3 files changed, 23 insertions(+), 2 deletions(-) + +diff --git a/block/qcow.c b/block/qcow.c +index 4fdc751..ad44f78 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -97,7 +97,8 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVQcowState *s = bs->opaque; +- int len, i, shift, ret; ++ unsigned int len, i, shift; ++ int ret; + QCowHeader header; + + ret = bdrv_pread(bs->file, 0, &header, sizeof(header)); +@@ -200,7 +201,9 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + if (header.backing_file_offset != 0) { + len = header.backing_file_size; + if (len > 1023) { +- len = 1023; ++ error_setg(errp, "Backing file name too long"); ++ ret = -EINVAL; ++ goto fail; + } + ret = bdrv_pread(bs->file, header.backing_file_offset, + bs->backing_file, len); +diff --git a/tests/qemu-iotests/092 b/tests/qemu-iotests/092 +index ae6ca76..a8c0c9c 100755 +--- a/tests/qemu-iotests/092 ++++ b/tests/qemu-iotests/092 +@@ -43,6 +43,8 @@ _supported_fmt qcow + _supported_proto generic + _supported_os Linux + ++offset_backing_file_offset=8 ++offset_backing_file_size=16 + offset_size=24 + offset_cluster_bits=32 + offset_l2_bits=33 +@@ -81,6 +83,15 @@ poke_file "$TEST_IMG" "$offset_size" "\xee\xee\xee\xee\xee\xee\xee\xee" + poke_file "$TEST_IMG" "$offset_size" "\x7f\xff\xff\xff\xff\xff\xff\xff" + { $QEMU_IO -c "write 0 64M" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid backing file length ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\xff" ++poke_file "$TEST_IMG" "$offset_backing_file_size" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_backing_file_size" "\x7f\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/092.out b/tests/qemu-iotests/092.out +index ac03302..496d8f0 100644 +--- a/tests/qemu-iotests/092.out ++++ b/tests/qemu-iotests/092.out +@@ -28,4 +28,11 @@ qemu-io: can't open device TEST_DIR/t.qcow: Image too large + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow: Image too large + no file open, try 'help open' ++ ++== Invalid backing file length == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow: Backing file name too long ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: Backing file name too long ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow1-Validate-L2-table-size-CVE-2014-0222.patch b/SOURCES/kvm-qcow1-Validate-L2-table-size-CVE-2014-0222.patch new file mode 100644 index 0000000..95f641f --- /dev/null +++ b/SOURCES/kvm-qcow1-Validate-L2-table-size-CVE-2014-0222.patch @@ -0,0 +1,121 @@ +From 6a7dafce7c4fb8e13e331efb301baedffce08e3f Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Jun 2014 13:54:46 +0200 +Subject: [PATCH 29/31] qcow1: Validate L2 table size (CVE-2014-0222) + +RH-Author: Kevin Wolf +Message-id: <1401717288-3918-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 59099 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 4/6] qcow1: Validate L2 table size (CVE-2014-0222) +Bugzilla: 1097229 1097230 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1097230 + +Too large L2 table sizes cause unbounded allocations. Images actually +created by qemu-img only have 512 byte or 4k L2 tables. + +To keep things consistent with cluster sizes, allow ranges between 512 +bytes and 64k (in fact, down to 1 entry = 8 bytes is technically +working, but L2 table sizes smaller than a cluster don't make a lot of +sense). + +This also means that the number of bytes on the virtual disk that are +described by the same L2 table is limited to at most 8k * 64k or 2^29, +preventively avoiding any integer overflows. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit 42eb58179b3b215bb507da3262b682b8a2ec10b5) +--- + block/qcow.c | 8 ++++++++ + tests/qemu-iotests/092 | 15 +++++++++++++++ + tests/qemu-iotests/092.out | 11 +++++++++++ + 3 files changed, 34 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow.c | 8 ++++++++ + tests/qemu-iotests/092 | 15 +++++++++++++++ + tests/qemu-iotests/092.out | 11 +++++++++++ + 3 files changed, 34 insertions(+), 0 deletions(-) + +diff --git a/block/qcow.c b/block/qcow.c +index 2efe2fc..f266701 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -137,6 +137,14 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ /* l2_bits specifies number of entries; storing a uint64_t in each entry, ++ * so bytes = num_entries << 3. */ ++ if (header.l2_bits < 9 - 3 || header.l2_bits > 16 - 3) { ++ error_setg(errp, "L2 table size must be between 512 and 64k"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + if (header.crypt_method > QCOW_CRYPT_AES) { + error_setg(errp, "invalid encryption method in qcow header"); + ret = -EINVAL; +diff --git a/tests/qemu-iotests/092 b/tests/qemu-iotests/092 +index d060e6f..fb8bacc 100755 +--- a/tests/qemu-iotests/092 ++++ b/tests/qemu-iotests/092 +@@ -44,6 +44,7 @@ _supported_proto generic + _supported_os Linux + + offset_cluster_bits=32 ++offset_l2_bits=33 + + echo + echo "== Invalid cluster size ==" +@@ -57,6 +58,20 @@ poke_file "$TEST_IMG" "$offset_cluster_bits" "\x08" + poke_file "$TEST_IMG" "$offset_cluster_bits" "\x11" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid L2 table size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_l2_bits" "\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_l2_bits" "\x05" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_l2_bits" "\x0e" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# 1 << 0x1b = 2^31 / L2_CACHE_SIZE ++poke_file "$TEST_IMG" "$offset_l2_bits" "\x1b" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/092.out b/tests/qemu-iotests/092.out +index 8bf8158..73918b3 100644 +--- a/tests/qemu-iotests/092.out ++++ b/tests/qemu-iotests/092.out +@@ -10,4 +10,15 @@ qemu-io: can't open device TEST_DIR/t.qcow: Cluster size must be between 512 and + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow: Cluster size must be between 512 and 64k + no file open, try 'help open' ++ ++== Invalid L2 table size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow: L2 table size must be between 512 and 64k ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: L2 table size must be between 512 and 64k ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: L2 table size must be between 512 and 64k ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: L2 table size must be between 512 and 64k ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow1-Validate-image-size-CVE-2014-0223.patch b/SOURCES/kvm-qcow1-Validate-image-size-CVE-2014-0223.patch new file mode 100644 index 0000000..cd689a8 --- /dev/null +++ b/SOURCES/kvm-qcow1-Validate-image-size-CVE-2014-0223.patch @@ -0,0 +1,120 @@ +From fca7c0bc430ddd279549cc4a10a529f0b99680fc Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 2 Jun 2014 13:54:47 +0200 +Subject: [PATCH 30/31] qcow1: Validate image size (CVE-2014-0223) + +RH-Author: Kevin Wolf +Message-id: <1401717288-3918-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 59101 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 5/6] qcow1: Validate image size (CVE-2014-0223) +Bugzilla: 1097236 1097237 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1097237 + +A huge image size could cause s->l1_size to overflow. Make sure that +images never require a L1 table larger than what fits in s->l1_size. + +This cannot only cause unbounded allocations, but also the allocation of +a too small L1 table, resulting in out-of-bounds array accesses (both +reads and writes). + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +(cherry picked from commit 46485de0cb357b57373e1ca895adedf1f3ed46ec) +--- + block/qcow.c | 16 ++++++++++++++-- + tests/qemu-iotests/092 | 9 +++++++++ + tests/qemu-iotests/092.out | 7 +++++++ + 3 files changed, 30 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow.c | 16 ++++++++++++++-- + tests/qemu-iotests/092 | 9 +++++++++ + tests/qemu-iotests/092.out | 7 +++++++ + 3 files changed, 30 insertions(+), 2 deletions(-) + +diff --git a/block/qcow.c b/block/qcow.c +index f266701..4fdc751 100644 +--- a/block/qcow.c ++++ b/block/qcow.c +@@ -61,7 +61,7 @@ typedef struct BDRVQcowState { + int cluster_sectors; + int l2_bits; + int l2_size; +- int l1_size; ++ unsigned int l1_size; + uint64_t cluster_offset_mask; + uint64_t l1_table_offset; + uint64_t *l1_table; +@@ -164,7 +164,19 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, + + /* read the level 1 table */ + shift = s->cluster_bits + s->l2_bits; +- s->l1_size = (header.size + (1LL << shift) - 1) >> shift; ++ if (header.size > UINT64_MAX - (1LL << shift)) { ++ error_setg(errp, "Image too large"); ++ ret = -EINVAL; ++ goto fail; ++ } else { ++ uint64_t l1_size = (header.size + (1LL << shift) - 1) >> shift; ++ if (l1_size > INT_MAX / sizeof(uint64_t)) { ++ error_setg(errp, "Image too large"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ s->l1_size = l1_size; ++ } + + s->l1_table_offset = header.l1_table_offset; + s->l1_table = g_malloc(s->l1_size * sizeof(uint64_t)); +diff --git a/tests/qemu-iotests/092 b/tests/qemu-iotests/092 +index fb8bacc..ae6ca76 100755 +--- a/tests/qemu-iotests/092 ++++ b/tests/qemu-iotests/092 +@@ -43,6 +43,7 @@ _supported_fmt qcow + _supported_proto generic + _supported_os Linux + ++offset_size=24 + offset_cluster_bits=32 + offset_l2_bits=33 + +@@ -72,6 +73,14 @@ poke_file "$TEST_IMG" "$offset_l2_bits" "\x0e" + poke_file "$TEST_IMG" "$offset_l2_bits" "\x1b" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_size" "\xee\xee\xee\xee\xee\xee\xee\xee" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_size" "\x7f\xff\xff\xff\xff\xff\xff\xff" ++{ $QEMU_IO -c "write 0 64M" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/092.out b/tests/qemu-iotests/092.out +index 73918b3..ac03302 100644 +--- a/tests/qemu-iotests/092.out ++++ b/tests/qemu-iotests/092.out +@@ -21,4 +21,11 @@ qemu-io: can't open device TEST_DIR/t.qcow: L2 table size must be between 512 an + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow: L2 table size must be between 512 and 64k + no file open, try 'help open' ++ ++== Invalid size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow: Image too large ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow: Image too large ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-corrupt-bit.patch b/SOURCES/kvm-qcow2-Add-corrupt-bit.patch new file mode 100644 index 0000000..79c7bc9 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-corrupt-bit.patch @@ -0,0 +1,234 @@ +From 0e79ef6691f77a7c0da31dff9276b6dad42441a0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:31:59 +0100 +Subject: [PATCH 06/87] qcow2: Add corrupt bit + +RH-Author: Max Reitz +Message-id: <1383604354-12743-9-git-send-email-mreitz@redhat.com> +Patchwork-id: 55308 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 08/43] qcow2: Add corrupt bit +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +This adds an incompatible bit indicating corruption to qcow2. Any image +with this bit set may not be written to unless for repairing (and +subsequently clearing the bit if the repair has been successful). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 69c98726537627e708abb8fcb33e3a2b10e40bf1) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 7 ++++++- + docs/specs/qcow2.txt | 7 ++++++- + tests/qemu-iotests/031.out | 12 ++++++------ + tests/qemu-iotests/036.out | 2 +- + 5 files changed, 66 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 7 +++++- + docs/specs/qcow2.txt | 7 +++++- + tests/qemu-iotests/031.out | 12 +++++----- + tests/qemu-iotests/036.out | 2 +- + 5 files changed, 66 insertions(+), 9 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index c2728c9..aa9dd23 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -272,6 +272,37 @@ static int qcow2_mark_clean(BlockDriverState *bs) + return 0; + } + ++/* ++ * Marks the image as corrupt. ++ */ ++int qcow2_mark_corrupt(BlockDriverState *bs) ++{ ++ BDRVQcowState *s = bs->opaque; ++ ++ s->incompatible_features |= QCOW2_INCOMPAT_CORRUPT; ++ return qcow2_update_header(bs); ++} ++ ++/* ++ * Marks the image as consistent, i.e., unsets the corrupt bit, and flushes ++ * before if necessary. ++ */ ++int qcow2_mark_consistent(BlockDriverState *bs) ++{ ++ BDRVQcowState *s = bs->opaque; ++ ++ if (s->incompatible_features & QCOW2_INCOMPAT_CORRUPT) { ++ int ret = bdrv_flush(bs); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ s->incompatible_features &= ~QCOW2_INCOMPAT_CORRUPT; ++ return qcow2_update_header(bs); ++ } ++ return 0; ++} ++ + static int qcow2_check(BlockDriverState *bs, BdrvCheckResult *result, + BdrvCheckMode fix) + { +@@ -402,6 +433,17 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags) + goto fail; + } + ++ if (s->incompatible_features & QCOW2_INCOMPAT_CORRUPT) { ++ /* Corrupt images may not be written to unless they are being repaired ++ */ ++ if ((flags & BDRV_O_RDWR) && !(flags & BDRV_O_CHECK)) { ++ error_report("qcow2: Image is corrupt; cannot be opened " ++ "read/write."); ++ ret = -EACCES; ++ goto fail; ++ } ++ } ++ + /* Check support for various header values */ + if (header.refcount_order != 4) { + report_unsupported(bs, "%d bit reference counts", +@@ -1140,6 +1182,11 @@ int qcow2_update_header(BlockDriverState *bs) + .name = "dirty bit", + }, + { ++ .type = QCOW2_FEAT_TYPE_INCOMPATIBLE, ++ .bit = QCOW2_INCOMPAT_CORRUPT_BITNR, ++ .name = "corrupt bit", ++ }, ++ { + .type = QCOW2_FEAT_TYPE_COMPATIBLE, + .bit = QCOW2_COMPAT_LAZY_REFCOUNTS_BITNR, + .name = "lazy refcounts", +diff --git a/block/qcow2.h b/block/qcow2.h +index dba9771..4297487 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -119,9 +119,12 @@ enum { + /* Incompatible feature bits */ + enum { + QCOW2_INCOMPAT_DIRTY_BITNR = 0, ++ QCOW2_INCOMPAT_CORRUPT_BITNR = 1, + QCOW2_INCOMPAT_DIRTY = 1 << QCOW2_INCOMPAT_DIRTY_BITNR, ++ QCOW2_INCOMPAT_CORRUPT = 1 << QCOW2_INCOMPAT_CORRUPT_BITNR, + +- QCOW2_INCOMPAT_MASK = QCOW2_INCOMPAT_DIRTY, ++ QCOW2_INCOMPAT_MASK = QCOW2_INCOMPAT_DIRTY ++ | QCOW2_INCOMPAT_CORRUPT, + }; + + /* Compatible feature bits */ +@@ -361,6 +364,8 @@ int qcow2_backing_read1(BlockDriverState *bs, QEMUIOVector *qiov, + int64_t sector_num, int nb_sectors); + + int qcow2_mark_dirty(BlockDriverState *bs); ++int qcow2_mark_corrupt(BlockDriverState *bs); ++int qcow2_mark_consistent(BlockDriverState *bs); + int qcow2_update_header(BlockDriverState *bs); + + /* qcow2-refcount.c functions */ +diff --git a/docs/specs/qcow2.txt b/docs/specs/qcow2.txt +index 36a559d..33eca36 100644 +--- a/docs/specs/qcow2.txt ++++ b/docs/specs/qcow2.txt +@@ -80,7 +80,12 @@ in the description of a field. + tables to repair refcounts before accessing the + image. + +- Bits 1-63: Reserved (set to 0) ++ Bit 1: Corrupt bit. If this bit is set then any data ++ structure may be corrupt and the image must not ++ be written to (unless for regaining ++ consistency). ++ ++ Bits 2-63: Reserved (set to 0) + + 80 - 87: compatible_features + Bitmask of compatible features. An implementation can +diff --git a/tests/qemu-iotests/031.out b/tests/qemu-iotests/031.out +index 796c993..a943344 100644 +--- a/tests/qemu-iotests/031.out ++++ b/tests/qemu-iotests/031.out +@@ -54,7 +54,7 @@ header_length 72 + + Header extension: + magic 0x6803f857 +-length 96 ++length 144 + data + + Header extension: +@@ -68,7 +68,7 @@ No errors were found on the image. + + magic 0x514649fb + version 2 +-backing_file_offset 0xf8 ++backing_file_offset 0x128 + backing_file_size 0x17 + cluster_bits 16 + size 67108864 +@@ -92,7 +92,7 @@ data 'host_device' + + Header extension: + magic 0x6803f857 +-length 96 ++length 144 + data + + Header extension: +@@ -155,7 +155,7 @@ header_length 104 + + Header extension: + magic 0x6803f857 +-length 96 ++length 144 + data + + Header extension: +@@ -169,7 +169,7 @@ No errors were found on the image. + + magic 0x514649fb + version 3 +-backing_file_offset 0x118 ++backing_file_offset 0x148 + backing_file_size 0x17 + cluster_bits 16 + size 67108864 +@@ -193,7 +193,7 @@ data 'host_device' + + Header extension: + magic 0x6803f857 +-length 96 ++length 144 + data + + Header extension: +diff --git a/tests/qemu-iotests/036.out b/tests/qemu-iotests/036.out +index 063ca22..55a3e6e 100644 +--- a/tests/qemu-iotests/036.out ++++ b/tests/qemu-iotests/036.out +@@ -46,7 +46,7 @@ header_length 104 + + Header extension: + magic 0x6803f857 +-length 96 ++length 144 + data + + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-falloc-and-full-preallocation-option.patch b/SOURCES/kvm-qcow2-Add-falloc-and-full-preallocation-option.patch new file mode 100644 index 0000000..25619b6 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-falloc-and-full-preallocation-option.patch @@ -0,0 +1,465 @@ +From ddb1e6862dffe40bb2929d3a0e3eba198c54ee43 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 10 Nov 2014 09:14:07 +0100 +Subject: [PATCH 30/41] qcow2: Add falloc and full preallocation option + +Message-id: <1415610847-15383-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 62240 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 4/4] qcow2: Add falloc and full preallocation option +Bugzilla: 1087724 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Hu Tao + +preallocation=falloc allocates disk space by posix_fallocate(), +preallocation=full allocates disk space by writing zeros to disk. +Both modes imply preallocation=metadata. + +Signed-off-by: Hu Tao +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 0e4271b711a8ea766d29824c844e268b91ac3ae5) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2.c + +QEMUOptionParameter has not been replaced with QemuOpts downstream, +total_size is in sectors instead of bytes in downstream's +qcow2_create2(). + +The use of QEMUOptionParameter makes it rather difficult to set an +option in qcow2 for the underlying file to be created. Because qcow2 +already used to pass a functionally empty options array, I added an +assertion for this to be true and created a new QEMUOptionParameter +array in case there are actually options to be passed to the protocol +driver (that is, for preallocation). + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 81 +++++++++++++++++++++++++++++++++++++++------- + qemu-doc.texi | 8 +++-- + qemu-img.texi | 8 +++-- + tests/qemu-iotests/082.out | 54 +++++++++++++++---------------- + 4 files changed, 106 insertions(+), 45 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 99c6b93..43e54d6 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1557,8 +1557,7 @@ static int preallocate(BlockDriverState *bs) + static int qcow2_create2(const char *filename, int64_t total_size, + const char *backing_file, const char *backing_format, + int flags, size_t cluster_size, PreallocMode prealloc, +- QEMUOptionParameter *options, int version, +- Error **errp) ++ int version, Error **errp) + { + /* Calculate cluster_bits */ + int cluster_bits; +@@ -1588,8 +1587,71 @@ static int qcow2_create2(const char *filename, int64_t total_size, + uint64_t* refcount_table; + Error *local_err = NULL; + int ret; ++ QEMUOptionParameter *options = NULL; ++ BlockDriver *file_drv; ++ ++ if (prealloc == PREALLOC_MODE_FULL || prealloc == PREALLOC_MODE_FALLOC) { ++ int64_t meta_size = 0; ++ uint64_t nreftablee, nrefblocke, nl1e, nl2e; ++ int64_t aligned_total_size = align_offset(total_size * BDRV_SECTOR_SIZE, ++ cluster_size); ++ ++ /* header: 1 cluster */ ++ meta_size += cluster_size; ++ ++ /* total size of L2 tables */ ++ nl2e = aligned_total_size / cluster_size; ++ nl2e = align_offset(nl2e, cluster_size / sizeof(uint64_t)); ++ meta_size += nl2e * sizeof(uint64_t); ++ ++ /* total size of L1 tables */ ++ nl1e = nl2e * sizeof(uint64_t) / cluster_size; ++ nl1e = align_offset(nl1e, cluster_size / sizeof(uint64_t)); ++ meta_size += nl1e * sizeof(uint64_t); ++ ++ /* total size of refcount blocks ++ * ++ * note: every host cluster is reference-counted, including metadata ++ * (even refcount blocks are recursively included). ++ * Let: ++ * a = total_size * BDRV_SECTOR_SIZE (this is the guest disk size) ++ * m = meta size not including refcount blocks and refcount tables ++ * c = cluster size ++ * y1 = number of refcount blocks entries ++ * y2 = meta size including everything ++ * then, ++ * y1 = (y2 + a)/c ++ * y2 = y1 * sizeof(u16) + y1 * sizeof(u16) * sizeof(u64) / c + m ++ * we can get y1: ++ * y1 = (a + m) / (c - sizeof(u16) - sizeof(u16) * sizeof(u64) / c) ++ */ ++ nrefblocke = (aligned_total_size + meta_size + cluster_size) / ++ (cluster_size - sizeof(uint16_t) - ++ 1.0 * sizeof(uint16_t) * sizeof(uint64_t) / cluster_size); ++ nrefblocke = align_offset(nrefblocke, cluster_size / sizeof(uint16_t)); ++ meta_size += nrefblocke * sizeof(uint16_t); ++ ++ /* total size of refcount tables */ ++ nreftablee = nrefblocke * sizeof(uint16_t) / cluster_size; ++ nreftablee = align_offset(nreftablee, cluster_size / sizeof(uint64_t)); ++ meta_size += nreftablee * sizeof(uint64_t); ++ ++ file_drv = bdrv_find_protocol(filename, true); ++ if (file_drv == NULL) { ++ error_setg(errp, "Could not find protocol for file '%s'", filename); ++ return -ENOENT; ++ } ++ ++ options = append_option_parameters(options, file_drv->create_options); ++ ++ set_option_parameter_int(options, BLOCK_OPT_SIZE, ++ aligned_total_size + meta_size); ++ set_option_parameter(options, BLOCK_OPT_PREALLOC, ++ PreallocMode_lookup[prealloc]); ++ } + + ret = bdrv_create_file(filename, options, &local_err); ++ free_option_parameters(options); + if (ret < 0) { + error_propagate(errp, local_err); + return ret; +@@ -1691,7 +1753,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + } + + /* And if we're supposed to preallocate metadata, do that now */ +- if (prealloc == PREALLOC_MODE_METADATA) { ++ if (prealloc != PREALLOC_MODE_OFF) { + BDRVQcowState *s = bs->opaque; + qemu_co_mutex_lock(&s->lock); + ret = preallocate(bs); +@@ -1761,13 +1823,6 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + options++; + } + +- if (prealloc != PREALLOC_MODE_OFF && +- prealloc != PREALLOC_MODE_METADATA) { +- error_setg(errp, "Unsupported preallocate mode: %s", +- PreallocMode_lookup[prealloc]); +- return -EINVAL; +- } +- + if (backing_file && prealloc != PREALLOC_MODE_OFF) { + error_setg(errp, "Backing file and preallocation cannot be used at " + "the same time"); +@@ -1780,8 +1835,9 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + return -EINVAL; + } + ++ assert(!options || !options->name); + ret = qcow2_create2(filename, sectors, backing_file, backing_fmt, flags, +- cluster_size, prealloc, options, version, &local_err); ++ cluster_size, prealloc, version, &local_err); + if (error_is_set(&local_err)) { + error_propagate(errp, local_err); + } +@@ -2315,7 +2371,8 @@ static QEMUOptionParameter qcow2_create_options[] = { + { + .name = BLOCK_OPT_PREALLOC, + .type = OPT_STRING, +- .help = "Preallocation mode (allowed values: off, metadata)" ++ .help = "Preallocation mode (allowed values: off, metadata, " ++ "falloc, full)" + }, + { + .name = BLOCK_OPT_LAZY_REFCOUNTS, +diff --git a/qemu-doc.texi b/qemu-doc.texi +index dc5b49e..0f7e5f8 100644 +--- a/qemu-doc.texi ++++ b/qemu-doc.texi +@@ -567,9 +567,11 @@ sizes can improve the image file size whereas larger cluster sizes generally + provide better performance. + + @item preallocation +-Preallocation mode (allowed values: off, metadata). An image with preallocated +-metadata is initially larger but can improve performance when the image needs +-to grow. ++Preallocation mode (allowed values: @code{off}, @code{metadata}, @code{falloc}, ++@code{full}). An image with preallocated metadata is initially larger but can ++improve performance when the image needs to grow. @code{falloc} and @code{full} ++preallocations are like the same options of @code{raw} format, but sets up ++metadata also. + + @item lazy_refcounts + If this option is set to @code{on}, reference count updates are postponed with +diff --git a/qemu-img.texi b/qemu-img.texi +index 80d3261..e943856 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -432,9 +432,11 @@ sizes can improve the image file size whereas larger cluster sizes generally + provide better performance. + + @item preallocation +-Preallocation mode (allowed values: off, metadata). An image with preallocated +-metadata is initially larger but can improve performance when the image needs +-to grow. ++Preallocation mode (allowed values: @code{off}, @code{metadata}, @code{falloc}, ++@code{full}). An image with preallocated metadata is initially larger but can ++improve performance when the image needs to grow. @code{falloc} and @code{full} ++preallocations are like the same options of @code{raw} format, but sets up ++metadata also. + + @item lazy_refcounts + If this option is set to @code{on}, reference count updates are postponed with +diff --git a/tests/qemu-iotests/082.out b/tests/qemu-iotests/082.out +index d71610b..8abfde7 100644 +--- a/tests/qemu-iotests/082.out ++++ b/tests/qemu-iotests/082.out +@@ -64,7 +64,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o ? TEST_DIR/t.qcow2 128M +@@ -75,7 +75,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o cluster_size=4k,help TEST_DIR/t.qcow2 128M +@@ -86,7 +86,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o cluster_size=4k,? TEST_DIR/t.qcow2 128M +@@ -97,7 +97,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o help,cluster_size=4k TEST_DIR/t.qcow2 128M +@@ -108,7 +108,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o ?,cluster_size=4k TEST_DIR/t.qcow2 128M +@@ -119,7 +119,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o cluster_size=4k -o help TEST_DIR/t.qcow2 128M +@@ -130,7 +130,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o cluster_size=4k -o ? TEST_DIR/t.qcow2 128M +@@ -141,7 +141,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -f qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 128M +@@ -167,7 +167,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: create -o help +@@ -245,7 +245,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o ? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -256,7 +256,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o cluster_size=4k,help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -267,7 +267,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o cluster_size=4k,? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -278,7 +278,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o help,cluster_size=4k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -289,7 +289,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o ?,cluster_size=4k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -300,7 +300,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o cluster_size=4k -o help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -311,7 +311,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o cluster_size=4k -o ? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -322,7 +322,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base +@@ -348,7 +348,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -o help +@@ -415,7 +415,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o ? TEST_DIR/t.qcow2 +@@ -426,7 +426,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o cluster_size=4k,help TEST_DIR/t.qcow2 +@@ -437,7 +437,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o cluster_size=4k,? TEST_DIR/t.qcow2 +@@ -448,7 +448,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o help,cluster_size=4k TEST_DIR/t.qcow2 +@@ -459,7 +459,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o ?,cluster_size=4k TEST_DIR/t.qcow2 +@@ -470,7 +470,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o cluster_size=4k -o help TEST_DIR/t.qcow2 +@@ -481,7 +481,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o cluster_size=4k -o ? TEST_DIR/t.qcow2 +@@ -492,7 +492,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: amend -f qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 +@@ -520,7 +520,7 @@ backing_file File name of a base image + backing_fmt Image format of the base image + encryption Encrypt the image + cluster_size qcow2 cluster size +-preallocation Preallocation mode (allowed values: off, metadata) ++preallocation Preallocation mode (allowed values: off, metadata, falloc, full) + lazy_refcounts Postpone refcount updates + + Testing: convert -o help +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Add-missing-space-in-error-message.patch b/SOURCES/kvm-qcow2-Add-missing-space-in-error-message.patch new file mode 100644 index 0000000..bb1ed41 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-missing-space-in-error-message.patch @@ -0,0 +1,49 @@ +From 6f9e5c8e3d7e3251af3e047e01ae38cc26b41a4e Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:16 +0100 +Subject: [PATCH 11/14] qcow2: Add missing space in error message + +RH-Author: Max Reitz +Message-id: <1389131839-12920-12-git-send-email-mreitz@redhat.com> +Patchwork-id: 56547 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 11/14] qcow2: Add missing space in error message +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +The error message in qcow2_downgrade about an unsupported refcount +order is missing a space. This patch adds it. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 9e3f08923a14ba0655c6797edd9ffef44bb8cbf2) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 5b28259..3f7fd51 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -2013,7 +2013,7 @@ static int qcow2_downgrade(BlockDriverState *bs, int target_version) + * support anything different than 4 anyway, there is no point in doing + * so right now; however, we should error out (if qemu supports this in + * the future and this code has not been adapted) */ +- error_report("qcow2_downgrade: Image refcount orders other than 4 are" ++ error_report("qcow2_downgrade: Image refcount orders other than 4 are " + "currently not supported."); + return -ENOTSUP; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-more-overlap-check-bitmask-macros.patch b/SOURCES/kvm-qcow2-Add-more-overlap-check-bitmask-macros.patch new file mode 100644 index 0000000..a7316da --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-more-overlap-check-bitmask-macros.patch @@ -0,0 +1,66 @@ +From cd63525d205eda67c64d0838592b819d7f73529f Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:33 +0100 +Subject: [PATCH 40/87] qcow2: Add more overlap check bitmask macros + +RH-Author: Max Reitz +Message-id: <1383604354-12743-43-git-send-email-mreitz@redhat.com> +Patchwork-id: 55342 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 42/43] qcow2: Add more overlap check bitmask macros +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Introduces the macros QCOW2_OL_CONSTANT and QCOW2_OL_ALL in addition to +the already existing QCOW2_OL_CACHED, signifying all metadata overlap +checks that can be performed in constant time (regardless of image size +etc.) and truly all available overlap checks, respectively. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 4a273c398b0c96985d56fed8156e19876b2e3c9e) + +Signed-off-by: Max Reitz +--- + block/qcow2.h | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.h | 14 +++++++++++--- + 1 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2.h b/block/qcow2.h +index 1bba3ed..e4c140c 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -325,11 +325,19 @@ typedef enum QCow2MetadataOverlap { + QCOW2_OL_INACTIVE_L2 = (1 << QCOW2_OL_INACTIVE_L2_BITNR), + } QCow2MetadataOverlap; + ++/* Perform all overlap checks which can be done in constant time */ ++#define QCOW2_OL_CONSTANT \ ++ (QCOW2_OL_MAIN_HEADER | QCOW2_OL_ACTIVE_L1 | QCOW2_OL_REFCOUNT_TABLE | \ ++ QCOW2_OL_SNAPSHOT_TABLE) ++ + /* Perform all overlap checks which don't require disk access */ + #define QCOW2_OL_CACHED \ +- (QCOW2_OL_MAIN_HEADER | QCOW2_OL_ACTIVE_L1 | QCOW2_OL_ACTIVE_L2 | \ +- QCOW2_OL_REFCOUNT_TABLE | QCOW2_OL_REFCOUNT_BLOCK | \ +- QCOW2_OL_SNAPSHOT_TABLE | QCOW2_OL_INACTIVE_L1) ++ (QCOW2_OL_CONSTANT | QCOW2_OL_ACTIVE_L2 | QCOW2_OL_REFCOUNT_BLOCK | \ ++ QCOW2_OL_INACTIVE_L1) ++ ++/* Perform all overlap checks */ ++#define QCOW2_OL_ALL \ ++ (QCOW2_OL_CACHED | QCOW2_OL_INACTIVE_L2) + + #define L1E_OFFSET_MASK 0x00ffffffffffff00ULL + #define L2E_OFFSET_MASK 0x00ffffffffffff00ULL +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-overlap-check-options.patch b/SOURCES/kvm-qcow2-Add-overlap-check-options.patch new file mode 100644 index 0000000..5afb426 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-overlap-check-options.patch @@ -0,0 +1,116 @@ +From 08a3a60a9a3cdd4d67e858981e4446d8f1d31fe4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:31 +0100 +Subject: [PATCH 38/87] qcow2: Add overlap-check options + +RH-Author: Max Reitz +Message-id: <1383604354-12743-41-git-send-email-mreitz@redhat.com> +Patchwork-id: 55340 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 40/43] qcow2: Add overlap-check options +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Add runtime options to tune the overlap checks to be performed before +write accesses. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 05de7e86cab3ed3830de38b38b39bbc711bc1158) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 9 +++++++++ + 2 files changed, 55 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 9 +++++++++ + 2 files changed, 55 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 157361f..c47286f 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -354,6 +354,52 @@ static QemuOptsList qcow2_runtime_opts = { + .type = QEMU_OPT_BOOL, + .help = "Generate discard requests when other clusters are freed", + }, ++ { ++ .name = QCOW2_OPT_OVERLAP, ++ .type = QEMU_OPT_STRING, ++ .help = "Selects which overlap checks to perform from a range of " ++ "templates (none, constant, cached, all)", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_MAIN_HEADER, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into the main qcow2 header", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_ACTIVE_L1, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into the active L1 table", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_ACTIVE_L2, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into an active L2 table", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_REFCOUNT_TABLE, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into the refcount table", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_REFCOUNT_BLOCK, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into a refcount block", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into the snapshot table", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_INACTIVE_L1, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into an inactive L1 table", ++ }, ++ { ++ .name = QCOW2_OPT_OVERLAP_INACTIVE_L2, ++ .type = QEMU_OPT_BOOL, ++ .help = "Check for unintended writes into an inactive L2 table", ++ }, + { /* end of list */ } + }, + }; +diff --git a/block/qcow2.h b/block/qcow2.h +index d1fd91b..1bba3ed 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -63,6 +63,15 @@ + #define QCOW2_OPT_DISCARD_REQUEST "pass-discard-request" + #define QCOW2_OPT_DISCARD_SNAPSHOT "pass-discard-snapshot" + #define QCOW2_OPT_DISCARD_OTHER "pass-discard-other" ++#define QCOW2_OPT_OVERLAP "overlap-check" ++#define QCOW2_OPT_OVERLAP_MAIN_HEADER "overlap-check.main-header" ++#define QCOW2_OPT_OVERLAP_ACTIVE_L1 "overlap-check.active-l1" ++#define QCOW2_OPT_OVERLAP_ACTIVE_L2 "overlap-check.active-l2" ++#define QCOW2_OPT_OVERLAP_REFCOUNT_TABLE "overlap-check.refcount-table" ++#define QCOW2_OPT_OVERLAP_REFCOUNT_BLOCK "overlap-check.refcount-block" ++#define QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE "overlap-check.snapshot-table" ++#define QCOW2_OPT_OVERLAP_INACTIVE_L1 "overlap-check.inactive-l1" ++#define QCOW2_OPT_OVERLAP_INACTIVE_L2 "overlap-check.inactive-l2" + + typedef struct QCowHeader { + uint32_t magic; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-qcow2_signal_corruption.patch b/SOURCES/kvm-qcow2-Add-qcow2_signal_corruption.patch new file mode 100644 index 0000000..6a56881 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-qcow2_signal_corruption.patch @@ -0,0 +1,147 @@ +From f262d114ddfe11bad7b2f109cb965873f132f74e Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:02 +0200 +Subject: [PATCH 08/42] qcow2: Add qcow2_signal_corruption() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1434212556-3927-9-git-send-email-mreitz@redhat.com> +Patchwork-id: 66027 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 08/42] qcow2: Add qcow2_signal_corruption() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Add a helper function for easily marking an image corrupt (on fatal +corruptions) while outputting an informative message to stderr and via +QAPI. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Benoît Canet +Message-id: 1409926039-29044-3-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 85186ebdac7e183242deaa55d5049988de832be1) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2.c + +No qapi_event_send_*() downstream. + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 5 +++++ + 2 files changed, 67 insertions(+) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 6026f8a..be7e8e8 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -31,6 +31,8 @@ + #include "qapi/qmp/qerror.h" + #include "qapi/qmp/qbool.h" + #include "qapi/util.h" ++#include "qapi/qmp/types.h" ++#include "monitor/monitor.h" + #include "trace.h" + + /* +@@ -2329,6 +2331,66 @@ static int qcow2_amend_options(BlockDriverState *bs, + return 0; + } + ++/* ++ * If offset or size are negative, respectively, they will not be included in ++ * the BLOCK_IMAGE_CORRUPTED event emitted. ++ * fatal will be ignored for read-only BDS; corruptions found there will always ++ * be considered non-fatal. ++ */ ++void qcow2_signal_corruption(BlockDriverState *bs, bool fatal, int64_t offset, ++ int64_t size, const char *message_format, ...) ++{ ++ BDRVQcowState *s = bs->opaque; ++ char *message; ++ QObject *data; ++ va_list ap; ++ ++ fatal = fatal && !bs->read_only; ++ ++ if (s->signaled_corruption && ++ (!fatal || (s->incompatible_features & QCOW2_INCOMPAT_CORRUPT))) ++ { ++ return; ++ } ++ ++ va_start(ap, message_format); ++ message = g_strdup_vprintf(message_format, ap); ++ va_end(ap); ++ ++ if (fatal) { ++ fprintf(stderr, "qcow2: Marking image as corrupt: %s; further " ++ "corruption events will be suppressed\n", message); ++ } else { ++ fprintf(stderr, "qcow2: Image is corrupt: %s; further non-fatal " ++ "corruption events will be suppressed\n", message); ++ } ++ ++ assert((offset >= 0) == (size >= 0)); ++ ++ if (offset >= 0) { ++ data = qobject_from_jsonf("{ 'device': %s, 'msg': %s, 'offset': %" ++ PRId64 ", 'size': %" PRId64 ", 'fatal': %s }", ++ bdrv_get_device_name(bs), message, ++ offset, size, fatal ? "true" : "false"); ++ } else { ++ data = qobject_from_jsonf("{ 'device': %s, 'msg': %s, 'fatal': %s }", ++ bdrv_get_device_name(bs), message, ++ fatal ? "true" : "false"); ++ } ++ ++ monitor_protocol_event(QEVENT_BLOCK_IMAGE_CORRUPTED, data); ++ qobject_decref(data); ++ ++ g_free(message); ++ ++ if (fatal) { ++ qcow2_mark_corrupt(bs); ++ bs->drv = NULL; /* make BDS unusable */ ++ } ++ ++ s->signaled_corruption = true; ++} ++ + static QEMUOptionParameter qcow2_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +diff --git a/block/qcow2.h b/block/qcow2.h +index e958ab4..2138462 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -252,6 +252,7 @@ typedef struct BDRVQcowState { + bool discard_passthrough[QCOW2_DISCARD_MAX]; + + int overlap_check; /* bitmask of Qcow2MetadataOverlap values */ ++ bool signaled_corruption; + + uint64_t incompatible_features; + uint64_t compatible_features; +@@ -468,6 +469,10 @@ int qcow2_mark_corrupt(BlockDriverState *bs); + int qcow2_mark_consistent(BlockDriverState *bs); + int qcow2_update_header(BlockDriverState *bs); + ++void qcow2_signal_corruption(BlockDriverState *bs, bool fatal, int64_t offset, ++ int64_t size, const char *message_format, ...) ++ GCC_FMT_ATTR(5, 6); ++ + /* qcow2-refcount.c functions */ + int qcow2_refcount_init(BlockDriverState *bs); + void qcow2_refcount_close(BlockDriverState *bs); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Add-refcount-update-reason-to-all-callers.patch b/SOURCES/kvm-qcow2-Add-refcount-update-reason-to-all-callers.patch new file mode 100644 index 0000000..1aa98f4 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-refcount-update-reason-to-all-callers.patch @@ -0,0 +1,375 @@ +From 2e86e4a584cd9054a99d6bb8d3d4d7e8878bff4a Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:00 +0200 +Subject: [PATCH 09/38] qcow2: Add refcount update reason to all callers + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-10-git-send-email-kwolf@redhat.com> +Patchwork-id: 54198 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 09/32] qcow2: Add refcount update reason to all callers +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This adds a refcount update reason to all callers of update_refcounts(), +so that a follow-up patch can use this information to decide whether +clusters that reach a refcount of 0 should be discarded in the image +file. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 6cfcb9b8b91d303ab51b78623f2299b5288d2d51) + +Signed-off-by: Kevin Wolf +--- + block/qcow2-cluster.c | 19 +++++++++++------ + block/qcow2-refcount.c | 55 +++++++++++++++++++++++++++++++------------------- + block/qcow2-snapshot.c | 6 ++++-- + block/qcow2.c | 3 ++- + block/qcow2.h | 16 ++++++++++++--- + 5 files changed, 66 insertions(+), 33 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 19 +++++++++++----- + block/qcow2-refcount.c | 55 +++++++++++++++++++++++++++++------------------ + block/qcow2-snapshot.c | 6 +++- + block/qcow2.c | 3 +- + block/qcow2.h | 16 +++++++++++-- + 5 files changed, 66 insertions(+), 33 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 76f30e5..3191d6b 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -98,14 +98,16 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + goto fail; + } + g_free(s->l1_table); +- qcow2_free_clusters(bs, s->l1_table_offset, s->l1_size * sizeof(uint64_t)); ++ qcow2_free_clusters(bs, s->l1_table_offset, s->l1_size * sizeof(uint64_t), ++ QCOW2_DISCARD_OTHER); + s->l1_table_offset = new_l1_table_offset; + s->l1_table = new_l1_table; + s->l1_size = new_l1_size; + return 0; + fail: + g_free(new_l1_table); +- qcow2_free_clusters(bs, new_l1_table_offset, new_l1_size2); ++ qcow2_free_clusters(bs, new_l1_table_offset, new_l1_size2, ++ QCOW2_DISCARD_OTHER); + return ret; + } + +@@ -548,7 +550,8 @@ static int get_cluster_table(BlockDriverState *bs, uint64_t offset, + + /* Then decrease the refcount of the old table */ + if (l2_offset) { +- qcow2_free_clusters(bs, l2_offset, s->l2_size * sizeof(uint64_t)); ++ qcow2_free_clusters(bs, l2_offset, s->l2_size * sizeof(uint64_t), ++ QCOW2_DISCARD_OTHER); + } + } + +@@ -715,10 +718,14 @@ int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m) + /* + * If this was a COW, we need to decrease the refcount of the old cluster. + * Also flush bs->file to get the right order for L2 and refcount update. ++ * ++ * Don't discard clusters that reach a refcount of 0 (e.g. compressed ++ * clusters), the next write will reuse them anyway. + */ + if (j != 0) { + for (i = 0; i < j; i++) { +- qcow2_free_any_clusters(bs, be64_to_cpu(old_cluster[i]), 1); ++ qcow2_free_any_clusters(bs, be64_to_cpu(old_cluster[i]), 1, ++ QCOW2_DISCARD_NEVER); + } + } + +@@ -1339,7 +1346,7 @@ static int discard_single_l2(BlockDriverState *bs, uint64_t offset, + l2_table[l2_index + i] = cpu_to_be64(0); + + /* Then decrease the refcount */ +- qcow2_free_any_clusters(bs, old_offset, 1); ++ qcow2_free_any_clusters(bs, old_offset, 1, QCOW2_DISCARD_REQUEST); + } + + ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table); +@@ -1415,7 +1422,7 @@ static int zero_single_l2(BlockDriverState *bs, uint64_t offset, + qcow2_cache_entry_mark_dirty(s->l2_table_cache, l2_table); + if (old_offset & QCOW_OFLAG_COMPRESSED) { + l2_table[l2_index + i] = cpu_to_be64(QCOW_OFLAG_ZERO); +- qcow2_free_any_clusters(bs, old_offset, 1); ++ qcow2_free_any_clusters(bs, old_offset, 1, QCOW2_DISCARD_REQUEST); + } else { + l2_table[l2_index + i] |= cpu_to_be64(QCOW_OFLAG_ZERO); + } +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index b32738f..6d35e49 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -29,7 +29,7 @@ + static int64_t alloc_clusters_noref(BlockDriverState *bs, int64_t size); + static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + int64_t offset, int64_t length, +- int addend); ++ int addend, enum qcow2_discard_type type); + + + /*********************************************************/ +@@ -235,7 +235,8 @@ static int alloc_refcount_block(BlockDriverState *bs, + } else { + /* Described somewhere else. This can recurse at most twice before we + * arrive at a block that describes itself. */ +- ret = update_refcount(bs, new_block, s->cluster_size, 1); ++ ret = update_refcount(bs, new_block, s->cluster_size, 1, ++ QCOW2_DISCARD_NEVER); + if (ret < 0) { + goto fail_block; + } +@@ -399,7 +400,8 @@ static int alloc_refcount_block(BlockDriverState *bs, + + /* Free old table. Remember, we must not change free_cluster_index */ + uint64_t old_free_cluster_index = s->free_cluster_index; +- qcow2_free_clusters(bs, old_table_offset, old_table_size * sizeof(uint64_t)); ++ qcow2_free_clusters(bs, old_table_offset, old_table_size * sizeof(uint64_t), ++ QCOW2_DISCARD_OTHER); + s->free_cluster_index = old_free_cluster_index; + + ret = load_refcount_block(bs, new_block, (void**) refcount_block); +@@ -420,7 +422,7 @@ fail_block: + + /* XXX: cache several refcount block clusters ? */ + static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, +- int64_t offset, int64_t length, int addend) ++ int64_t offset, int64_t length, int addend, enum qcow2_discard_type type) + { + BDRVQcowState *s = bs->opaque; + int64_t start, last, cluster_offset; +@@ -506,7 +508,8 @@ fail: + */ + if (ret < 0) { + int dummy; +- dummy = update_refcount(bs, offset, cluster_offset - offset, -addend); ++ dummy = update_refcount(bs, offset, cluster_offset - offset, -addend, ++ QCOW2_DISCARD_NEVER); + (void)dummy; + } + +@@ -522,12 +525,14 @@ fail: + */ + static int update_cluster_refcount(BlockDriverState *bs, + int64_t cluster_index, +- int addend) ++ int addend, ++ enum qcow2_discard_type type) + { + BDRVQcowState *s = bs->opaque; + int ret; + +- ret = update_refcount(bs, cluster_index << s->cluster_bits, 1, addend); ++ ret = update_refcount(bs, cluster_index << s->cluster_bits, 1, addend, ++ type); + if (ret < 0) { + return ret; + } +@@ -579,7 +584,7 @@ int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size) + return offset; + } + +- ret = update_refcount(bs, offset, size, 1); ++ ret = update_refcount(bs, offset, size, 1, QCOW2_DISCARD_NEVER); + if (ret < 0) { + return ret; + } +@@ -611,7 +616,8 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + old_free_cluster_index = s->free_cluster_index; + s->free_cluster_index = cluster_index + i; + +- ret = update_refcount(bs, offset, i << s->cluster_bits, 1); ++ ret = update_refcount(bs, offset, i << s->cluster_bits, 1, ++ QCOW2_DISCARD_NEVER); + if (ret < 0) { + return ret; + } +@@ -649,7 +655,8 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) + if (free_in_cluster == 0) + s->free_byte_offset = 0; + if ((offset & (s->cluster_size - 1)) != 0) +- update_cluster_refcount(bs, offset >> s->cluster_bits, 1); ++ update_cluster_refcount(bs, offset >> s->cluster_bits, 1, ++ QCOW2_DISCARD_NEVER); + } else { + offset = qcow2_alloc_clusters(bs, s->cluster_size); + if (offset < 0) { +@@ -659,7 +666,8 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) + if ((cluster_offset + s->cluster_size) == offset) { + /* we are lucky: contiguous data */ + offset = s->free_byte_offset; +- update_cluster_refcount(bs, offset >> s->cluster_bits, 1); ++ update_cluster_refcount(bs, offset >> s->cluster_bits, 1, ++ QCOW2_DISCARD_NEVER); + s->free_byte_offset += size; + } else { + s->free_byte_offset = offset; +@@ -676,12 +684,13 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) + } + + void qcow2_free_clusters(BlockDriverState *bs, +- int64_t offset, int64_t size) ++ int64_t offset, int64_t size, ++ enum qcow2_discard_type type) + { + int ret; + + BLKDBG_EVENT(bs->file, BLKDBG_CLUSTER_FREE); +- ret = update_refcount(bs, offset, size, -1); ++ ret = update_refcount(bs, offset, size, -1, type); + if (ret < 0) { + fprintf(stderr, "qcow2_free_clusters failed: %s\n", strerror(-ret)); + /* TODO Remember the clusters to free them later and avoid leaking */ +@@ -692,8 +701,8 @@ void qcow2_free_clusters(BlockDriverState *bs, + * Free a cluster using its L2 entry (handles clusters of all types, e.g. + * normal cluster, compressed cluster, etc.) + */ +-void qcow2_free_any_clusters(BlockDriverState *bs, +- uint64_t l2_entry, int nb_clusters) ++void qcow2_free_any_clusters(BlockDriverState *bs, uint64_t l2_entry, ++ int nb_clusters, enum qcow2_discard_type type) + { + BDRVQcowState *s = bs->opaque; + +@@ -705,12 +714,12 @@ void qcow2_free_any_clusters(BlockDriverState *bs, + s->csize_mask) + 1; + qcow2_free_clusters(bs, + (l2_entry & s->cluster_offset_mask) & ~511, +- nb_csectors * 512); ++ nb_csectors * 512, type); + } + break; + case QCOW2_CLUSTER_NORMAL: + qcow2_free_clusters(bs, l2_entry & L2E_OFFSET_MASK, +- nb_clusters << s->cluster_bits); ++ nb_clusters << s->cluster_bits, type); + break; + case QCOW2_CLUSTER_UNALLOCATED: + case QCOW2_CLUSTER_ZERO: +@@ -785,7 +794,8 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + int ret; + ret = update_refcount(bs, + (offset & s->cluster_offset_mask) & ~511, +- nb_csectors * 512, addend); ++ nb_csectors * 512, addend, ++ QCOW2_DISCARD_SNAPSHOT); + if (ret < 0) { + goto fail; + } +@@ -795,7 +805,8 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + } else { + uint64_t cluster_index = (offset & L2E_OFFSET_MASK) >> s->cluster_bits; + if (addend != 0) { +- refcount = update_cluster_refcount(bs, cluster_index, addend); ++ refcount = update_cluster_refcount(bs, cluster_index, addend, ++ QCOW2_DISCARD_SNAPSHOT); + } else { + refcount = get_refcount(bs, cluster_index); + } +@@ -827,7 +838,8 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + + + if (addend != 0) { +- refcount = update_cluster_refcount(bs, l2_offset >> s->cluster_bits, addend); ++ refcount = update_cluster_refcount(bs, l2_offset >> s->cluster_bits, addend, ++ QCOW2_DISCARD_SNAPSHOT); + } else { + refcount = get_refcount(bs, l2_offset >> s->cluster_bits); + } +@@ -1253,7 +1265,8 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + + if (num_fixed) { + ret = update_refcount(bs, i << s->cluster_bits, 1, +- refcount2 - refcount1); ++ refcount2 - refcount1, ++ QCOW2_DISCARD_ALWAYS); + if (ret >= 0) { + (*num_fixed)++; + continue; +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index 992a5c8..0caac90 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -262,7 +262,8 @@ static int qcow2_write_snapshots(BlockDriverState *bs) + } + + /* free the old snapshot table */ +- qcow2_free_clusters(bs, s->snapshots_offset, s->snapshots_size); ++ qcow2_free_clusters(bs, s->snapshots_offset, s->snapshots_size, ++ QCOW2_DISCARD_SNAPSHOT); + s->snapshots_offset = snapshots_offset; + s->snapshots_size = snapshots_size; + return 0; +@@ -569,7 +570,8 @@ int qcow2_snapshot_delete(BlockDriverState *bs, const char *snapshot_id) + if (ret < 0) { + return ret; + } +- qcow2_free_clusters(bs, sn.l1_table_offset, sn.l1_size * sizeof(uint64_t)); ++ qcow2_free_clusters(bs, sn.l1_table_offset, sn.l1_size * sizeof(uint64_t), ++ QCOW2_DISCARD_SNAPSHOT); + + /* must update the copied flag on the current cluster offsets */ + ret = qcow2_update_snapshot_refcount(bs, s->l1_table_offset, s->l1_size, 0); +diff --git a/block/qcow2.c b/block/qcow2.c +index 0fa5cb2..e28ea47 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1196,7 +1196,8 @@ static int preallocate(BlockDriverState *bs) + + ret = qcow2_alloc_cluster_link_l2(bs, meta); + if (ret < 0) { +- qcow2_free_any_clusters(bs, meta->alloc_offset, meta->nb_clusters); ++ qcow2_free_any_clusters(bs, meta->alloc_offset, meta->nb_clusters, ++ QCOW2_DISCARD_NEVER); + return ret; + } + +diff --git a/block/qcow2.h b/block/qcow2.h +index 6959c6a..64a6479 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -129,6 +129,15 @@ enum { + QCOW2_COMPAT_FEAT_MASK = QCOW2_COMPAT_LAZY_REFCOUNTS, + }; + ++enum qcow2_discard_type { ++ QCOW2_DISCARD_NEVER = 0, ++ QCOW2_DISCARD_ALWAYS, ++ QCOW2_DISCARD_REQUEST, ++ QCOW2_DISCARD_SNAPSHOT, ++ QCOW2_DISCARD_OTHER, ++ QCOW2_DISCARD_MAX ++}; ++ + typedef struct Qcow2Feature { + uint8_t type; + uint8_t bit; +@@ -349,9 +358,10 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + int nb_clusters); + int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size); + void qcow2_free_clusters(BlockDriverState *bs, +- int64_t offset, int64_t size); +-void qcow2_free_any_clusters(BlockDriverState *bs, +- uint64_t cluster_offset, int nb_clusters); ++ int64_t offset, int64_t size, ++ enum qcow2_discard_type type); ++void qcow2_free_any_clusters(BlockDriverState *bs, uint64_t l2_entry, ++ int nb_clusters, enum qcow2_discard_type type); + + int qcow2_update_snapshot_refcount(BlockDriverState *bs, + int64_t l1_table_offset, int l1_size, int addend); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-support-for-ImageInfoSpecific.patch b/SOURCES/kvm-qcow2-Add-support-for-ImageInfoSpecific.patch new file mode 100644 index 0000000..b6d202f --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-support-for-ImageInfoSpecific.patch @@ -0,0 +1,122 @@ +From 42d65e8b2ebd637035fd3ccb5306cbdd37808cd3 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:37 +0100 +Subject: [PATCH 80/87] qcow2: Add support for ImageInfoSpecific + +RH-Author: Max Reitz +Message-id: <1383756824-6921-15-git-send-email-mreitz@redhat.com> +Patchwork-id: 55569 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 14/21] qcow2: Add support for ImageInfoSpecific +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +BZ: 980771 + +Add a new ImageInfoSpecificQCow2 type as a subtype of ImageInfoSpecific. +This contains the compatibility level as a string and an optional +lazy_refcounts boolean (optional means mandatory for compat >= 1.1 and +not available for compat == 0.10). + +Also, add qcow2_get_specific_info, which returns this information. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 37764dfb71c4d0d058b71ba33340c6beab7d5a66) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 28 ++++++++++++++++++++++++++++ + qapi-schema.json | 16 ++++++++++++++++ + 2 files changed, 44 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 28 ++++++++++++++++++++++++++++ + qapi-schema.json | 16 ++++++++++++++++ + 2 files changed, 44 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 01b535d..f852d64 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1889,6 +1889,33 @@ static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + return 0; + } + ++static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs) ++{ ++ BDRVQcowState *s = bs->opaque; ++ ImageInfoSpecific *spec_info = g_new(ImageInfoSpecific, 1); ++ ++ *spec_info = (ImageInfoSpecific){ ++ .kind = IMAGE_INFO_SPECIFIC_KIND_QCOW2, ++ { ++ .qcow2 = g_new(ImageInfoSpecificQCow2, 1), ++ }, ++ }; ++ if (s->qcow_version == 2) { ++ *spec_info->qcow2 = (ImageInfoSpecificQCow2){ ++ .compat = g_strdup("0.10"), ++ }; ++ } else if (s->qcow_version == 3) { ++ *spec_info->qcow2 = (ImageInfoSpecificQCow2){ ++ .compat = g_strdup("1.1"), ++ .lazy_refcounts = s->compatible_features & ++ QCOW2_COMPAT_LAZY_REFCOUNTS, ++ .has_lazy_refcounts = true, ++ }; ++ } ++ ++ return spec_info; ++} ++ + #if 0 + static void dump_refcounts(BlockDriverState *bs) + { +@@ -2024,6 +2051,7 @@ static BlockDriver bdrv_qcow2 = { + .bdrv_snapshot_list = qcow2_snapshot_list, + .bdrv_snapshot_load_tmp = qcow2_snapshot_load_tmp, + .bdrv_get_info = qcow2_get_info, ++ .bdrv_get_specific_info = qcow2_get_specific_info, + + .bdrv_save_vmstate = qcow2_save_vmstate, + .bdrv_load_vmstate = qcow2_load_vmstate, +diff --git a/qapi-schema.json b/qapi-schema.json +index 934ac7f..3c00ddd 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -210,6 +210,21 @@ + 'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } } + + ## ++# @ImageInfoSpecificQCow2: ++# ++# @compat: compatibility level ++# ++# @lazy-refcounts: #optional on or off; only valid for compat >= 1.1 ++# ++# Since: 1.7 ++## ++{ 'type': 'ImageInfoSpecificQCow2', ++ 'data': { ++ 'compat': 'str', ++ '*lazy-refcounts': 'bool' ++ } } ++ ++## + # @ImageInfoSpecific: + # + # A discriminated record of image format specific information structures. +@@ -219,6 +234,7 @@ + + { 'union': 'ImageInfoSpecific', + 'data': { ++ 'qcow2': 'ImageInfoSpecificQCow2' + } } + + ## +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Add-two-more-unalignment-checks.patch b/SOURCES/kvm-qcow2-Add-two-more-unalignment-checks.patch new file mode 100644 index 0000000..0734a10 --- /dev/null +++ b/SOURCES/kvm-qcow2-Add-two-more-unalignment-checks.patch @@ -0,0 +1,72 @@ +From b8514c8dfe9af1d7c6e5ed3eff1a4383b5da087e Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:31 +0200 +Subject: [PATCH 37/42] qcow2: Add two more unalignment checks + +Message-id: <1434212556-3927-38-git-send-email-mreitz@redhat.com> +Patchwork-id: 66056 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 37/42] qcow2: Add two more unalignment checks +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +This adds checks for unaligned L2 table offsets and unaligned data +cluster offsets (actually the preallocated offsets for zero clusters) to +the zero cluster expansion function. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 8dd93d9339505376f6ce6737ead871ff6d7e676f) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 053e9fe..f7938f6 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1579,6 +1579,14 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + continue; + } + ++ if (offset_into_cluster(s, l2_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "L2 table offset %#" ++ PRIx64 " unaligned (L1 index: %#x)", ++ l2_offset, i); ++ ret = -EIO; ++ goto fail; ++ } ++ + if (is_active_l1) { + /* get active L2 tables from cache */ + ret = qcow2_cache_get(bs, s->l2_table_cache, l2_offset, +@@ -1638,6 +1646,19 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + } + } + ++ if (offset_into_cluster(s, offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "Data cluster offset " ++ "%#" PRIx64 " unaligned (L2 offset: %#" ++ PRIx64 ", L2 index: %#x)", offset, ++ l2_offset, j); ++ if (!preallocated) { ++ qcow2_free_clusters(bs, offset, s->cluster_size, ++ QCOW2_DISCARD_ALWAYS); ++ } ++ ret = -EIO; ++ goto fail; ++ } ++ + ret = qcow2_pre_write_overlap_check(bs, 0, offset, s->cluster_size); + if (ret < 0) { + if (!preallocated) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Array-assigning-options-to-OL-check-bits.patch b/SOURCES/kvm-qcow2-Array-assigning-options-to-OL-check-bits.patch new file mode 100644 index 0000000..68cea27 --- /dev/null +++ b/SOURCES/kvm-qcow2-Array-assigning-options-to-OL-check-bits.patch @@ -0,0 +1,59 @@ +From 154566a3a7e0ef3a32650952a79031c8e5c5489c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:32 +0100 +Subject: [PATCH 39/87] qcow2: Array assigning options to OL check bits + +RH-Author: Max Reitz +Message-id: <1383604354-12743-42-git-send-email-mreitz@redhat.com> +Patchwork-id: 55341 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 41/43] qcow2: Array assigning options to OL check bits +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Add an array which assigns the option string to its corresponding +overlap check bit. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 4092e99d935fe26fd53631cc9e170f9a19e3ee4a) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index c47286f..b6f300d 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -404,6 +404,17 @@ static QemuOptsList qcow2_runtime_opts = { + }, + }; + ++static const char *overlap_bool_option_names[QCOW2_OL_MAX_BITNR] = { ++ [QCOW2_OL_MAIN_HEADER_BITNR] = QCOW2_OPT_OVERLAP_MAIN_HEADER, ++ [QCOW2_OL_ACTIVE_L1_BITNR] = QCOW2_OPT_OVERLAP_ACTIVE_L1, ++ [QCOW2_OL_ACTIVE_L2_BITNR] = QCOW2_OPT_OVERLAP_ACTIVE_L2, ++ [QCOW2_OL_REFCOUNT_TABLE_BITNR] = QCOW2_OPT_OVERLAP_REFCOUNT_TABLE, ++ [QCOW2_OL_REFCOUNT_BLOCK_BITNR] = QCOW2_OPT_OVERLAP_REFCOUNT_BLOCK, ++ [QCOW2_OL_SNAPSHOT_TABLE_BITNR] = QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE, ++ [QCOW2_OL_INACTIVE_L1_BITNR] = QCOW2_OPT_OVERLAP_INACTIVE_L1, ++ [QCOW2_OL_INACTIVE_L2_BITNR] = QCOW2_OPT_OVERLAP_INACTIVE_L2, ++}; ++ + static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Avoid-integer-overflow-in-get_refcount-CVE-201.patch b/SOURCES/kvm-qcow2-Avoid-integer-overflow-in-get_refcount-CVE-201.patch new file mode 100644 index 0000000..a202fe4 --- /dev/null +++ b/SOURCES/kvm-qcow2-Avoid-integer-overflow-in-get_refcount-CVE-201.patch @@ -0,0 +1,41 @@ +From e6dafe932ca93e980ae277ad34926385dd78b75f Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:35 +0100 +Subject: [PATCH 28/49] qcow2: Avoid integer overflow in get_refcount (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-29-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 28/48] qcow2: Avoid integer overflow in get_refcount (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +This ensures that the checks catch all invalid cluster indexes +instead of returning the refcount of a wrong cluster. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 54bcbd1..c08fb08 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -89,7 +89,7 @@ static int load_refcount_block(BlockDriverState *bs, + static int get_refcount(BlockDriverState *bs, int64_t cluster_index) + { + BDRVQcowState *s = bs->opaque; +- int refcount_table_index, block_index; ++ uint64_t refcount_table_index, block_index; + int64_t refcount_block_offset; + int ret; + uint16_t *refcount_block; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Avoid-making-the-L1-table-too-big.patch b/SOURCES/kvm-qcow2-Avoid-making-the-L1-table-too-big.patch new file mode 100644 index 0000000..4f41ea9 --- /dev/null +++ b/SOURCES/kvm-qcow2-Avoid-making-the-L1-table-too-big.patch @@ -0,0 +1,48 @@ +From 0dcf104966d3fc385510a6a2d8b8dd81d731da61 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 27 Nov 2017 18:09:28 +0100 +Subject: [PATCH 9/9] qcow2: Avoid making the L1 table too big + +RH-Author: Max Reitz +Message-id: <20171127180928.10364-3-mreitz@redhat.com> +Patchwork-id: 77918 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/2] qcow2: Avoid making the L1 table too big +Bugzilla: 1459725 +RH-Acked-by: John Snow +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +We refuse to open images whose L1 table we deem "too big". Consequently, +we should not produce such images ourselves. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Max Reitz +Message-id: 20160615153630.2116-3-mreitz@redhat.com +Reviewed-by: Eric Blake +[mreitz: Added QEMU_BUILD_BUG_ON()] +Signed-off-by: Max Reitz +(cherry picked from commit 84c26520d3c1c9ff4a10455748139463278816d5) +Signed-off-by: Max Reitz + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index f7938f6..589b040 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -55,7 +55,8 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + } + } + +- if (new_l1_size > INT_MAX / sizeof(uint64_t)) { ++ QEMU_BUILD_BUG_ON(QCOW_MAX_L1_SIZE > INT_MAX); ++ if (new_l1_size > QCOW_MAX_L1_SIZE / sizeof(uint64_t)) { + return -EFBIG; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Batch-discards.patch b/SOURCES/kvm-qcow2-Batch-discards.patch new file mode 100644 index 0000000..0a365fc --- /dev/null +++ b/SOURCES/kvm-qcow2-Batch-discards.patch @@ -0,0 +1,272 @@ +From 766239ec3a7be7b8bf250a677e478773ac1b96dd Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:02 +0200 +Subject: [PATCH 11/38] qcow2: Batch discards + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-12-git-send-email-kwolf@redhat.com> +Patchwork-id: 54199 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 11/32] qcow2: Batch discards +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This optimises the discard operation for freed clusters by batching +discard requests (both snapshot deletion and bdrv_discard end up +updating the refcounts cluster by cluster). + +Note that we don't discard asynchronously, but keep s->lock held. This +is to avoid that a freed cluster is reallocated and written to while the +discard is still in flight. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0b919fae31f4f80f78ebeab8388dc3a03cc5e4ed) + +Signed-off-by: Kevin Wolf +--- + block/qcow2-cluster.c | 22 +++++++++++--- + block/qcow2-refcount.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++-- + block/qcow2.c | 1 + + block/qcow2.h | 11 +++++++ + 4 files changed, 109 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 22 ++++++++++-- + block/qcow2-refcount.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++-- + block/qcow2.c | 1 + + block/qcow2.h | 11 ++++++ + 4 files changed, 109 insertions(+), 7 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 3191d6b..cca76d4 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1377,18 +1377,25 @@ int qcow2_discard_clusters(BlockDriverState *bs, uint64_t offset, + + nb_clusters = size_to_clusters(s, end_offset - offset); + ++ s->cache_discards = true; ++ + /* Each L2 table is handled by its own loop iteration */ + while (nb_clusters > 0) { + ret = discard_single_l2(bs, offset, nb_clusters); + if (ret < 0) { +- return ret; ++ goto fail; + } + + nb_clusters -= ret; + offset += (ret * s->cluster_size); + } + +- return 0; ++ ret = 0; ++fail: ++ s->cache_discards = false; ++ qcow2_process_discards(bs, ret); ++ ++ return ret; + } + + /* +@@ -1450,15 +1457,22 @@ int qcow2_zero_clusters(BlockDriverState *bs, uint64_t offset, int nb_sectors) + /* Each L2 table is handled by its own loop iteration */ + nb_clusters = size_to_clusters(s, nb_sectors << BDRV_SECTOR_BITS); + ++ s->cache_discards = true; ++ + while (nb_clusters > 0) { + ret = zero_single_l2(bs, offset, nb_clusters); + if (ret < 0) { +- return ret; ++ goto fail; + } + + nb_clusters -= ret; + offset += (ret * s->cluster_size); + } + +- return 0; ++ ret = 0; ++fail: ++ s->cache_discards = false; ++ qcow2_process_discards(bs, ret); ++ ++ return ret; + } +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 7488988..1244693 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -420,6 +420,74 @@ fail_block: + return ret; + } + ++void qcow2_process_discards(BlockDriverState *bs, int ret) ++{ ++ BDRVQcowState *s = bs->opaque; ++ Qcow2DiscardRegion *d, *next; ++ ++ QTAILQ_FOREACH_SAFE(d, &s->discards, next, next) { ++ QTAILQ_REMOVE(&s->discards, d, next); ++ ++ /* Discard is optional, ignore the return value */ ++ if (ret >= 0) { ++ bdrv_discard(bs->file, ++ d->offset >> BDRV_SECTOR_BITS, ++ d->bytes >> BDRV_SECTOR_BITS); ++ } ++ ++ g_free(d); ++ } ++} ++ ++static void update_refcount_discard(BlockDriverState *bs, ++ uint64_t offset, uint64_t length) ++{ ++ BDRVQcowState *s = bs->opaque; ++ Qcow2DiscardRegion *d, *p, *next; ++ ++ QTAILQ_FOREACH(d, &s->discards, next) { ++ uint64_t new_start = MIN(offset, d->offset); ++ uint64_t new_end = MAX(offset + length, d->offset + d->bytes); ++ ++ if (new_end - new_start <= length + d->bytes) { ++ /* There can't be any overlap, areas ending up here have no ++ * references any more and therefore shouldn't get freed another ++ * time. */ ++ assert(d->bytes + length == new_end - new_start); ++ d->offset = new_start; ++ d->bytes = new_end - new_start; ++ goto found; ++ } ++ } ++ ++ d = g_malloc(sizeof(*d)); ++ *d = (Qcow2DiscardRegion) { ++ .bs = bs, ++ .offset = offset, ++ .bytes = length, ++ }; ++ QTAILQ_INSERT_TAIL(&s->discards, d, next); ++ ++found: ++ /* Merge discard requests if they are adjacent now */ ++ QTAILQ_FOREACH_SAFE(p, &s->discards, next, next) { ++ if (p == d ++ || p->offset > d->offset + d->bytes ++ || d->offset > p->offset + p->bytes) ++ { ++ continue; ++ } ++ ++ /* Still no overlap possible */ ++ assert(p->offset == d->offset + d->bytes ++ || d->offset == p->offset + p->bytes); ++ ++ QTAILQ_REMOVE(&s->discards, p, next); ++ d->offset = MIN(d->offset, p->offset); ++ d->bytes += p->bytes; ++ } ++} ++ + /* XXX: cache several refcount block clusters ? */ + static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + int64_t offset, int64_t length, int addend, enum qcow2_discard_type type) +@@ -488,15 +556,18 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + s->free_cluster_index = cluster_index; + } + refcount_block[block_index] = cpu_to_be16(refcount); ++ + if (refcount == 0 && s->discard_passthrough[type]) { +- /* Try discarding, ignore errors */ +- /* FIXME Doing this cluster by cluster will be painfully slow */ +- bdrv_discard(bs->file, cluster_offset, 1); ++ update_refcount_discard(bs, cluster_offset, s->cluster_size); + } + } + + ret = 0; + fail: ++ if (!s->cache_discards) { ++ qcow2_process_discards(bs, ret); ++ } ++ + /* Write last changed block to disk */ + if (refcount_block) { + int wret; +@@ -755,6 +826,8 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + l1_table = NULL; + l1_size2 = l1_size * sizeof(uint64_t); + ++ s->cache_discards = true; ++ + /* WARNING: qcow2_snapshot_goto relies on this function not using the + * l1_table_offset when it is the current s->l1_table_offset! Be careful + * when changing this! */ +@@ -867,6 +940,9 @@ fail: + qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table); + } + ++ s->cache_discards = false; ++ qcow2_process_discards(bs, ret); ++ + /* Update L1 only if it isn't deleted anyway (addend = -1) */ + if (ret == 0 && addend >= 0 && l1_modified) { + for (i = 0; i < l1_size; i++) { +diff --git a/block/qcow2.c b/block/qcow2.c +index ef8a2ca..9383990 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -486,6 +486,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags) + } + + QLIST_INIT(&s->cluster_allocs); ++ QTAILQ_INIT(&s->discards); + + /* read qcow2 extensions */ + if (qcow2_read_extensions(bs, header.header_length, ext_end, NULL)) { +diff --git a/block/qcow2.h b/block/qcow2.h +index 6f91b9a..3b2d5cd 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -147,6 +147,13 @@ typedef struct Qcow2Feature { + char name[46]; + } QEMU_PACKED Qcow2Feature; + ++typedef struct Qcow2DiscardRegion { ++ BlockDriverState *bs; ++ uint64_t offset; ++ uint64_t bytes; ++ QTAILQ_ENTRY(Qcow2DiscardRegion) next; ++} Qcow2DiscardRegion; ++ + typedef struct BDRVQcowState { + int cluster_bits; + int cluster_size; +@@ -199,6 +206,8 @@ typedef struct BDRVQcowState { + size_t unknown_header_fields_size; + void* unknown_header_fields; + QLIST_HEAD(, Qcow2UnknownHeaderExtension) unknown_header_ext; ++ QTAILQ_HEAD (, Qcow2DiscardRegion) discards; ++ bool cache_discards; + } BDRVQcowState; + + /* XXX: use std qcow open function ? */ +@@ -374,6 +383,8 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + BdrvCheckMode fix); + ++void qcow2_process_discards(BlockDriverState *bs, int ret); ++ + /* qcow2-cluster.c functions */ + int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + bool exact_size); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-CHECK_OFLAG_COPIED-is-obsolete.patch b/SOURCES/kvm-qcow2-CHECK_OFLAG_COPIED-is-obsolete.patch new file mode 100644 index 0000000..119af88 --- /dev/null +++ b/SOURCES/kvm-qcow2-CHECK_OFLAG_COPIED-is-obsolete.patch @@ -0,0 +1,62 @@ +From 7cc09be75f219d045f060ffd60e6c29125a82a8f Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:24 +0100 +Subject: [PATCH 31/87] qcow2: CHECK_OFLAG_COPIED is obsolete + +RH-Author: Max Reitz +Message-id: <1383604354-12743-34-git-send-email-mreitz@redhat.com> +Patchwork-id: 55333 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 33/43] qcow2: CHECK_OFLAG_COPIED is obsolete +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +CHECK_OFLAG_COPIED as a parameter to check_refcounts_l1 and +check_refcounts_l2 is obselete now, since the OFLAG_COPIED consistency +check is actually no longer performed by these functions (but by +check_oflag_copied). + +Signed-off-by: Max Reitz +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit db0749012b3d1cf655bddb3cc79052a0fd4dc97b) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 927bdeb..2a589b8 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1016,7 +1016,6 @@ static void inc_refcounts(BlockDriverState *bs, + + /* Flags for check_refcounts_l1() and check_refcounts_l2() */ + enum { +- CHECK_OFLAG_COPIED = 0x1, /* check QCOW_OFLAG_COPIED matches refcount */ + CHECK_FRAG_INFO = 0x2, /* update BlockFragInfo counters */ + }; + +@@ -1463,8 +1462,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + + /* current L1 table */ + ret = check_refcounts_l1(bs, res, refcount_table, nb_clusters, +- s->l1_table_offset, s->l1_size, +- CHECK_OFLAG_COPIED | CHECK_FRAG_INFO); ++ s->l1_table_offset, s->l1_size, CHECK_FRAG_INFO); + if (ret < 0) { + goto fail; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Calculate-refcount-block-entry-count.patch b/SOURCES/kvm-qcow2-Calculate-refcount-block-entry-count.patch new file mode 100644 index 0000000..4c07539 --- /dev/null +++ b/SOURCES/kvm-qcow2-Calculate-refcount-block-entry-count.patch @@ -0,0 +1,61 @@ +From 48ec01bf0d7ad38571741cf9aca816a0bfdddbe0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:10 +0200 +Subject: [PATCH 16/42] qcow2: Calculate refcount block entry count + +Message-id: <1434212556-3927-17-git-send-email-mreitz@redhat.com> +Patchwork-id: 66035 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 16/42] qcow2: Calculate refcount block entry count +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +The size of a refblock entry is (in theory) variable; calculate +therefore the number of entries per refblock and the according bit shift +(1 << x == entry count) when opening an image. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 1d13d654666a7fd6d6a85a0ce9285dbf0d0444c2) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 3 +++ + block/qcow2.h | 2 ++ + 2 files changed, 5 insertions(+) + +diff --git a/block/qcow2.c b/block/qcow2.c +index be7e8e8..fae8b26 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -604,6 +604,9 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + s->l2_bits = s->cluster_bits - 3; /* L2 is always one cluster */ + s->l2_size = 1 << s->l2_bits; ++ /* 2^(s->refcount_order - 3) is the refcount width in bytes */ ++ s->refcount_block_bits = s->cluster_bits - (s->refcount_order - 3); ++ s->refcount_block_size = 1 << s->refcount_block_bits; + bs->total_sectors = header.size / 512; + s->csize_shift = (62 - (s->cluster_bits - 8)); + s->csize_mask = (1 << (s->cluster_bits - 8)) - 1; +diff --git a/block/qcow2.h b/block/qcow2.h +index 2138462..b65f629 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -213,6 +213,8 @@ typedef struct BDRVQcowState { + int l2_size; + int l1_size; + int l1_vm_state_index; ++ int refcount_block_bits; ++ int refcount_block_size; + int csize_shift; + int csize_mask; + uint64_t cluster_offset_mask; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Catch-bdrv_getlength-error.patch b/SOURCES/kvm-qcow2-Catch-bdrv_getlength-error.patch new file mode 100644 index 0000000..bab6a0c --- /dev/null +++ b/SOURCES/kvm-qcow2-Catch-bdrv_getlength-error.patch @@ -0,0 +1,47 @@ +From 981daae137fd383944e72dbea8f147499eb9add4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:21:56 +0200 +Subject: [PATCH 02/42] qcow2: Catch bdrv_getlength() error + +Message-id: <1434212556-3927-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 66021 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 02/42] qcow2: Catch bdrv_getlength() error +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +The call to bdrv_getlength() from qcow2_check_refcounts() may result in +an error. Check this and abort if necessary. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit a49139af77850d64d74f9ffe43cabe7aa4f19de0) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 429b01c..4f86923 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1478,6 +1478,11 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + int ret; + + size = bdrv_getlength(bs->file); ++ if (size < 0) { ++ res->check_errors++; ++ return size; ++ } ++ + nb_clusters = size_to_clusters(s, size); + if (nb_clusters > INT_MAX) { + res->check_errors++; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Catch-host_offset-for-data-allocation.patch b/SOURCES/kvm-qcow2-Catch-host_offset-for-data-allocation.patch new file mode 100644 index 0000000..64205c3 --- /dev/null +++ b/SOURCES/kvm-qcow2-Catch-host_offset-for-data-allocation.patch @@ -0,0 +1,67 @@ +From cd10207e755b1b0470503c72c78a8d927f87a37a Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:21:58 +0200 +Subject: [PATCH 04/42] qcow2: Catch !*host_offset for data allocation + +Message-id: <1434212556-3927-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 66023 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 04/42] qcow2: Catch !*host_offset for data allocation +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +qcow2_alloc_cluster_offset() uses host_offset == 0 as "no preferred +offset" for the (data) cluster range to be allocated. However, this +offset is actually valid and may be allocated on images with a corrupted +refcount table or first refcount block. + +In this case, the corruption prevention should normally catch that +write anyway (because it would overwrite the image header). But since 0 +is a special value here, the function assumes that nothing has been +allocated at all which it asserts against. + +Because this condition is not qemu's fault but rather that of a broken +image, it shouldn't throw an assertion but rather mark the image corrupt +and show an appropriate message, which this patch does by calling the +corruption check earlier than it would be called normally (before the +assertion). + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit ff52aab2df5c5e10f231481961b88d25a3021724) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 1b9609f..f2f1170 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1089,6 +1089,17 @@ static int handle_alloc(BlockDriverState *bs, uint64_t guest_offset, + return 0; + } + ++ /* !*host_offset would overwrite the image header and is reserved for "no ++ * host offset preferred". If 0 was a valid host offset, it'd trigger the ++ * following overlap check; do that now to avoid having an invalid value in ++ * *host_offset. */ ++ if (!alloc_cluster_offset) { ++ ret = qcow2_pre_write_overlap_check(bs, 0, alloc_cluster_offset, ++ nb_clusters * s->cluster_size); ++ assert(ret < 0); ++ goto fail; ++ } ++ + /* + * Save info needed for meta data update. + * +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Change-default-for-new-images-to-compat-1.1.patch b/SOURCES/kvm-qcow2-Change-default-for-new-images-to-compat-1.1.patch new file mode 100644 index 0000000..5776ece --- /dev/null +++ b/SOURCES/kvm-qcow2-Change-default-for-new-images-to-compat-1.1.patch @@ -0,0 +1,56 @@ +From 4c29b332e7b5f03619481a6eab9690f96ae665f2 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 22 Nov 2013 14:23:29 +0100 +Subject: [PATCH 11/14] qcow2: Change default for new images to compat=1.1 + +RH-Author: Kevin Wolf +Message-id: <1385130210-31063-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 55856 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] qcow2: Change default for new images to compat=1.1 +Bugzilla: 1026739 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Paolo Bonzini + +By the time that qemu 1.7 will be released, enough time will have passed +since qemu 1.1, which is the first version to understand version 3 +images, that changing the default shouldn't hurt many people any more +and the benefits of using the new format outweigh the pain. + +qemu-iotests already runs with compat=1.1 by default. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8ad1898cf1f5314731123afce057e5cf74fd2f01) + +Conflicts: + block/qcow2.c + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index f852d64..897e48a 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1598,7 +1598,7 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + int flags = 0; + size_t cluster_size = DEFAULT_CLUSTER_SIZE; + int prealloc = 0; +- int version = 2; ++ int version = 3; + Error *local_err = NULL; + int ret; + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Check-L1-L2-reftable-entries-for-alignment.patch b/SOURCES/kvm-qcow2-Check-L1-L2-reftable-entries-for-alignment.patch new file mode 100644 index 0000000..0a1a940 --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-L1-L2-reftable-entries-for-alignment.patch @@ -0,0 +1,215 @@ +From f48ffc234c0aa2017dc90c971bbb50d47362192b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:04 +0200 +Subject: [PATCH 10/42] qcow2: Check L1/L2/reftable entries for alignment + +Message-id: <1434212556-3927-11-git-send-email-mreitz@redhat.com> +Patchwork-id: 66029 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 10/42] qcow2: Check L1/L2/reftable entries for alignment +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Offsets taken from the L1, L2 and refcount tables are generally assumed +to be correctly aligned. However, this cannot be guaranteed if the image +has been written to by something different than qemu, thus check all +offsets taken from these tables for correct cluster alignment. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Message-id: 1409926039-29044-5-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a97c67ee6c1546b985c1048c7a1f9e4fc13d9ee1) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 43 ++++++++++++++++++++++++++++++++++++++++--- + block/qcow2-refcount.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 82 insertions(+), 5 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index f2f1170..0e3b8d7 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -459,6 +459,13 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, + goto out; + } + ++ if (offset_into_cluster(s, l2_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "L2 table offset %#" PRIx64 ++ " unaligned (L1 index: %#" PRIx64 ")", ++ l2_offset, l1_index); ++ return -EIO; ++ } ++ + /* load the l2 table in memory */ + + ret = l2_load(bs, l2_offset, &l2_table); +@@ -481,8 +488,11 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, + break; + case QCOW2_CLUSTER_ZERO: + if (s->qcow_version < 3) { +- qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table); +- return -EIO; ++ qcow2_signal_corruption(bs, true, -1, -1, "Zero cluster entry found" ++ " in pre-v3 image (L2 offset: %#" PRIx64 ++ ", L2 index: %#x)", l2_offset, l2_index); ++ ret = -EIO; ++ goto fail; + } + c = count_contiguous_clusters(nb_clusters, s->cluster_size, + &l2_table[l2_index], 0, +@@ -500,6 +510,14 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, + &l2_table[l2_index], 0, + QCOW_OFLAG_COMPRESSED | QCOW_OFLAG_ZERO); + *cluster_offset &= L2E_OFFSET_MASK; ++ if (offset_into_cluster(s, *cluster_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "Data cluster offset %#" ++ PRIx64 " unaligned (L2 offset: %#" PRIx64 ++ ", L2 index: %#x)", *cluster_offset, ++ l2_offset, l2_index); ++ ret = -EIO; ++ goto fail; ++ } + break; + default: + abort(); +@@ -516,6 +534,10 @@ out: + *num = nb_available - index_in_cluster; + + return ret; ++ ++fail: ++ qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table); ++ return ret; + } + + /* +@@ -551,6 +573,12 @@ static int get_cluster_table(BlockDriverState *bs, uint64_t offset, + + assert(l1_index < s->l1_size); + l2_offset = s->l1_table[l1_index] & L1E_OFFSET_MASK; ++ if (offset_into_cluster(s, l2_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "L2 table offset %#" PRIx64 ++ " unaligned (L1 index: %#" PRIx64 ")", ++ l2_offset, l1_index); ++ return -EIO; ++ } + + /* seek the l2 table of the given l2 offset */ + +@@ -918,6 +946,15 @@ static int handle_copied(BlockDriverState *bs, uint64_t guest_offset, + bool offset_matches = + (cluster_offset & L2E_OFFSET_MASK) == *host_offset; + ++ if (offset_into_cluster(s, cluster_offset & L2E_OFFSET_MASK)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "Data cluster offset " ++ "%#llx unaligned (guest offset: %#" PRIx64 ++ ")", cluster_offset & L2E_OFFSET_MASK, ++ guest_offset); ++ ret = -EIO; ++ goto out; ++ } ++ + if (*host_offset != 0 && !offset_matches) { + *bytes = 0; + ret = 0; +@@ -949,7 +986,7 @@ out: + + /* Only return a host offset if we actually made progress. Otherwise we + * would make requirements for handle_alloc() that it can't fulfill */ +- if (ret) { ++ if (ret > 0) { + *host_offset = (cluster_offset & L2E_OFFSET_MASK) + + offset_into_cluster(s, guest_offset); + } +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index dbcc4c6..e66d593 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -101,6 +101,13 @@ static int get_refcount(BlockDriverState *bs, int64_t cluster_index) + if (!refcount_block_offset) + return 0; + ++ if (offset_into_cluster(s, refcount_block_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "Refblock offset %#" PRIx64 ++ " unaligned (reftable index: %#" PRIx64 ")", ++ refcount_block_offset, refcount_table_index); ++ return -EIO; ++ } ++ + ret = qcow2_cache_get(bs, s->refcount_block_cache, refcount_block_offset, + (void**) &refcount_block); + if (ret < 0) { +@@ -174,6 +181,14 @@ static int alloc_refcount_block(BlockDriverState *bs, + + /* If it's already there, we're done */ + if (refcount_block_offset) { ++ if (offset_into_cluster(s, refcount_block_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "Refblock offset %#" ++ PRIx64 " unaligned (reftable index: " ++ "%#x)", refcount_block_offset, ++ refcount_table_index); ++ return -EIO; ++ } ++ + return load_refcount_block(bs, refcount_block_offset, + (void**) refcount_block); + } +@@ -812,8 +827,14 @@ void qcow2_free_any_clusters(BlockDriverState *bs, uint64_t l2_entry, + case QCOW2_CLUSTER_NORMAL: + case QCOW2_CLUSTER_ZERO: + if (l2_entry & L2E_OFFSET_MASK) { +- qcow2_free_clusters(bs, l2_entry & L2E_OFFSET_MASK, +- nb_clusters << s->cluster_bits, type); ++ if (offset_into_cluster(s, l2_entry & L2E_OFFSET_MASK)) { ++ qcow2_signal_corruption(bs, false, -1, -1, ++ "Cannot free unaligned cluster %#llx", ++ l2_entry & L2E_OFFSET_MASK); ++ } else { ++ qcow2_free_clusters(bs, l2_entry & L2E_OFFSET_MASK, ++ nb_clusters << s->cluster_bits, type); ++ } + } + break; + case QCOW2_CLUSTER_UNALLOCATED: +@@ -872,6 +893,14 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + old_l2_offset = l2_offset; + l2_offset &= L1E_OFFSET_MASK; + ++ if (offset_into_cluster(s, l2_offset)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "L2 table offset %#" ++ PRIx64 " unaligned (L1 index: %#x)", ++ l2_offset, i); ++ ret = -EIO; ++ goto fail; ++ } ++ + ret = qcow2_cache_get(bs, s->l2_table_cache, l2_offset, + (void**) &l2_table); + if (ret < 0) { +@@ -905,6 +934,17 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + + case QCOW2_CLUSTER_NORMAL: + case QCOW2_CLUSTER_ZERO: ++ if (offset_into_cluster(s, offset & L2E_OFFSET_MASK)) { ++ qcow2_signal_corruption(bs, true, -1, -1, "Data " ++ "cluster offset %#llx " ++ "unaligned (L2 offset: %#" ++ PRIx64 ", L2 index: %#x)", ++ offset & L2E_OFFSET_MASK, ++ l2_offset, j); ++ ret = -EIO; ++ goto fail; ++ } ++ + cluster_index = (offset & L2E_OFFSET_MASK) >> s->cluster_bits; + if (!cluster_index) { + /* unallocated */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Check-backing_file_offset-CVE-2014-0144.patch b/SOURCES/kvm-qcow2-Check-backing_file_offset-CVE-2014-0144.patch new file mode 100644 index 0000000..9d5a8da --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-backing_file_offset-CVE-2014-0144.patch @@ -0,0 +1,95 @@ +From ffbffdc438191db5bfa6ae6da52f0578db0fe7ac Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:28 +0100 +Subject: [PATCH 21/49] qcow2: Check backing_file_offset (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-22-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 21/48] qcow2: Check backing_file_offset (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +Header, header extension and the backing file name must all be stored in +the first cluster. Setting the backing file to a much higher value +allowed header extensions to become much bigger than we want them to be +(unbounded allocation). + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 6 ++++++ + tests/qemu-iotests/080 | 12 ++++++++++++ + tests/qemu-iotests/080.out | 7 +++++++ + 3 files changed, 25 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index ea51f8e..5568cf9 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -511,6 +511,12 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + } + } + ++ if (header.backing_file_offset > s->cluster_size) { ++ error_setg(errp, "Invalid backing file offset"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + if (header.backing_file_offset) { + ext_end = header.backing_file_offset; + } else { +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 6512701..6d588dd 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -43,6 +43,8 @@ _supported_proto generic + _supported_os Linux + + header_size=104 ++ ++offset_backing_file_offset=8 + offset_header_size=100 + offset_ext_magic=$header_size + offset_ext_size=$((header_size + 4)) +@@ -55,6 +57,16 @@ poke_file "$TEST_IMG" "$offset_header_size" "\xff\xff\xff\xff" + poke_file "$TEST_IMG" "$offset_header_size" "\x7f\xff\xff\xff" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Huge unknown header extension ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_backing_file_offset" "\xff\xff\xff\xff\xff\xff\xff\xff" ++poke_file "$TEST_IMG" "$offset_ext_magic" "\x12\x34\x56\x78" ++poke_file "$TEST_IMG" "$offset_ext_size" "\x7f\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x00\x00" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 41a166a..48c40aa 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -6,4 +6,11 @@ qemu-io: can't open device TEST_DIR/t.qcow2: qcow2 header exceeds cluster size + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow2: qcow2 header exceeds cluster size + no file open, try 'help open' ++ ++== Huge unknown header extension == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid backing file offset ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Header extension too large ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Check-bs-drv-in-copy_sectors.patch b/SOURCES/kvm-qcow2-Check-bs-drv-in-copy_sectors.patch new file mode 100644 index 0000000..612eba3 --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-bs-drv-in-copy_sectors.patch @@ -0,0 +1,53 @@ +From d8f974ead4b4c1f549441e7aac96262cf2b754ee Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 17 Mar 2014 22:45:29 +0100 +Subject: [PATCH 4/6] qcow2: Check bs->drv in copy_sectors() + +RH-Author: Max Reitz +Message-id: <1395096331-12610-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 58119 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/3] qcow2: Check bs->drv in copy_sectors() +Bugzilla: 1048575 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng + +BZ: 1048575 + +Before dereferencing bs->drv for a call to its member bdrv_co_readv(), +copy_sectors() should check whether that pointer is indeed valid, since +it may have been set to NULL by e.g. a concurrent write triggering the +corruption prevention mechanism. + +Signed-off-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit dba2855572c746836ad90ce9154403b5929d996b) + +Signed-off-by: Max Reitz +--- + block/qcow2-cluster.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 862df0f..87c13ce 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -370,6 +370,10 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs, + + BLKDBG_EVENT(bs->file, BLKDBG_COW_READ); + ++ if (!bs->drv) { ++ return -ENOMEDIUM; ++ } ++ + /* Call .bdrv_co_readv() directly instead of using the public block-layer + * interface. This avoids double I/O throttling and request tracking, + * which can lead to deadlock when block layer copy-on-read is enabled. +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Check-header_length-CVE-2014-0144.patch b/SOURCES/kvm-qcow2-Check-header_length-CVE-2014-0144.patch new file mode 100644 index 0000000..fa78632 --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-header_length-CVE-2014-0144.patch @@ -0,0 +1,197 @@ +From 34d9d86de2d566b4c9ecd1ed0294edc0bb95bec6 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:27 +0100 +Subject: [PATCH 20/49] qcow2: Check header_length (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-21-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 20/48] qcow2: Check header_length (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +This fixes an unbounded allocation for s->unknown_header_fields. + +Signed-off-by: Kevin Wolf + +Conflicts: +tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 34 ++++++++++++++++++------ + tests/qemu-iotests/080 | 61 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/080.out | 9 ++++++ + tests/qemu-iotests/group | 1 + + 4 files changed, 96 insertions(+), 9 deletions(-) + create mode 100755 tests/qemu-iotests/080 + create mode 100644 tests/qemu-iotests/080.out + +diff --git a/block/qcow2.c b/block/qcow2.c +index 18e136e..ea51f8e 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -460,6 +460,18 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + s->qcow_version = header.version; + ++ /* Initialise cluster size */ ++ if (header.cluster_bits < MIN_CLUSTER_BITS || ++ header.cluster_bits > MAX_CLUSTER_BITS) { ++ error_setg(errp, "Unsupported cluster size: 2^%i", header.cluster_bits); ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ s->cluster_bits = header.cluster_bits; ++ s->cluster_size = 1 << s->cluster_bits; ++ s->cluster_sectors = 1 << (s->cluster_bits - 9); ++ + /* Initialise version 3 header fields */ + if (header.version == 2) { + header.incompatible_features = 0; +@@ -473,6 +485,18 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + be64_to_cpus(&header.autoclear_features); + be32_to_cpus(&header.refcount_order); + be32_to_cpus(&header.header_length); ++ ++ if (header.header_length < 104) { ++ error_setg(errp, "qcow2 header too short"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ } ++ ++ if (header.header_length > s->cluster_size) { ++ error_setg(errp, "qcow2 header exceeds cluster size"); ++ ret = -EINVAL; ++ goto fail; + } + + if (header.header_length > sizeof(header)) { +@@ -529,12 +553,6 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + } + s->refcount_order = header.refcount_order; + +- if (header.cluster_bits < MIN_CLUSTER_BITS || +- header.cluster_bits > MAX_CLUSTER_BITS) { +- error_setg(errp, "Unsupported cluster size: 2^%i", header.cluster_bits); +- ret = -EINVAL; +- goto fail; +- } + if (header.crypt_method > QCOW_CRYPT_AES) { + error_setg(errp, "Unsupported encryption method: %i", + header.crypt_method); +@@ -545,9 +563,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + if (s->crypt_method_header) { + bs->encrypted = 1; + } +- s->cluster_bits = header.cluster_bits; +- s->cluster_size = 1 << s->cluster_bits; +- s->cluster_sectors = 1 << (s->cluster_bits - 9); ++ + s->l2_bits = s->cluster_bits - 3; /* L2 is always one cluster */ + s->l2_size = 1 << s->l2_bits; + bs->total_sectors = header.size / 512; +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +new file mode 100755 +index 0000000..6512701 +--- /dev/null ++++ b/tests/qemu-iotests/080 +@@ -0,0 +1,61 @@ ++#!/bin/bash ++# ++# qcow2 format input validation tests ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++header_size=104 ++offset_header_size=100 ++offset_ext_magic=$header_size ++offset_ext_size=$((header_size + 4)) ++ ++echo ++echo "== Huge header size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_header_size" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_header_size" "\x7f\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +new file mode 100644 +index 0000000..41a166a +--- /dev/null ++++ b/tests/qemu-iotests/080.out +@@ -0,0 +1,9 @@ ++QA output created by 080 ++ ++== Huge header size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: qcow2 header exceeds cluster size ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: qcow2 header exceeds cluster size ++no file open, try 'help open' ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 7d0d07e..fc34194 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -75,6 +75,7 @@ + 077 rw auto + 078 rw auto + 079 rw auto ++080 rw auto + 082 rw auto quick + 086 rw auto quick + 088 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Check-maximum-L1-size-in-qcow2_snapshot_load_t.patch b/SOURCES/kvm-qcow2-Check-maximum-L1-size-in-qcow2_snapshot_load_t.patch new file mode 100644 index 0000000..13472e1 --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-maximum-L1-size-in-qcow2_snapshot_load_t.patch @@ -0,0 +1,137 @@ +From b2472117867fc233fcb634b7370051bcb7fc892c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:52 +0100 +Subject: [PATCH 45/49] qcow2: Check maximum L1 size in qcow2_snapshot_load_tmp() (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-46-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 45/48] qcow2: Check maximum L1 size in qcow2_snapshot_load_tmp() (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +This avoids an unbounded allocation. + +Signed-off-by: Kevin Wolf + +RHEL 7.0 doesn't have commit 7b4c4781, so use error_report() instead of +error_setg(). + +Signed-off-by: Kevin Wolf +--- + block/qcow2-snapshot.c | 4 ++++ + block/qcow2.c | 4 +--- + block/qcow2.h | 4 ++++ + tests/qemu-iotests/080 | 15 ++++++++++++++- + tests/qemu-iotests/080.out | 7 +++++++ + 5 files changed, 30 insertions(+), 4 deletions(-) + +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index b29f7bd..626a8d4 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -635,6 +635,10 @@ int qcow2_snapshot_load_tmp(BlockDriverState *bs, const char *snapshot_name) + sn = &s->snapshots[snapshot_index]; + + /* Allocate and read in the snapshot's L1 table */ ++ if (sn->l1_size > QCOW_MAX_L1_SIZE) { ++ error_report("Snapshot L1 table too large"); ++ return -EFBIG; ++ } + new_l1_bytes = sn->l1_size * sizeof(uint64_t); + new_l1_table = g_malloc0(align_offset(new_l1_bytes, 512)); + +diff --git a/block/qcow2.c b/block/qcow2.c +index 33b46b8..3f8febc 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -637,9 +637,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + } + + /* read the level 1 table */ +- if (header.l1_size > 0x2000000) { +- /* 32 MB L1 table is enough for 2 PB images at 64k cluster size +- * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ ++ if (header.l1_size > QCOW_MAX_L1_SIZE) { + error_setg(errp, "Active L1 table too large"); + ret = -EFBIG; + goto fail; +diff --git a/block/qcow2.h b/block/qcow2.h +index 9f9f5ae..87e256a 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -44,6 +44,10 @@ + * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ + #define QCOW_MAX_REFTABLE_SIZE 0x800000 + ++/* 32 MB L1 table is enough for 2 PB images at 64k cluster size ++ * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ ++#define QCOW_MAX_L1_SIZE 0x2000000 ++ + /* indicate that the refcount of the referenced cluster is exactly one. */ + #define QCOW_OFLAG_COPIED (1LL << 63) + /* indicate that the cluster is compressed (they never have the copied flag) */ +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 59e7a44..6b3a3e7 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -30,7 +30,8 @@ status=1 # failure is the default! + + _cleanup() + { +- _cleanup_test_img ++ rm -f $TEST_IMG.snap ++ _cleanup_test_img + } + trap "_cleanup; exit \$status" 0 1 2 3 15 + +@@ -58,6 +59,10 @@ offset_ext_size=$((header_size + 4)) + + offset_l2_table_0=$((0x40000)) + ++offset_snap1=$((0x70000)) ++offset_snap1_l1_offset=$((offset_snap1 + 0)) ++offset_snap1_l1_size=$((offset_snap1 + 8)) ++ + echo + echo "== Huge header size ==" + _make_test_img 64M +@@ -161,6 +166,14 @@ poke_file "$TEST_IMG" "$offset_l2_table_0" "\xbf\xff\xff\xff\xff\xff\x00\x00" + poke_file "$TEST_IMG" "$offset_l2_table_0" "\x80\x00\x00\xff\xff\xff\x00\x00" + { $QEMU_IMG snapshot -c test $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid snapshot L1 table ==" ++_make_test_img 64M ++{ $QEMU_IO -c "write 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IMG snapshot -c test $TEST_IMG; } 2>&1 | _filter_testdir ++poke_file "$TEST_IMG" "$offset_snap1_l1_size" "\x10\x00\x00\x00" ++{ $QEMU_IMG convert -s test $TEST_IMG $TEST_IMG.snap; } 2>&1 | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 4d84fbf..1fa0672 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -74,4 +74,11 @@ wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + qemu-img: Could not create snapshot 'test': -27 (File too large) + qemu-img: Could not create snapshot 'test': -11 (Resource temporarily unavailable) ++ ++== Invalid snapshot L1 table == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qemu-img: Snapshot L1 table too large ++qemu-img: Failed to load snapshot + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Check-new-refcount-table-size-on-growth.patch b/SOURCES/kvm-qcow2-Check-new-refcount-table-size-on-growth.patch new file mode 100644 index 0000000..0f40181 --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-new-refcount-table-size-on-growth.patch @@ -0,0 +1,92 @@ +From b2cd8e043a6b66ba225b98b6235fc050f956bf5b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:36 +0100 +Subject: [PATCH 29/49] qcow2: Check new refcount table size on growth + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-30-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 29/48] qcow2: Check new refcount table size on growth +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +If the size becomes larger than what qcow2_open() would accept, fail the +growing operation. + +Signed-off-by: Kevin Wolf + +Conflicts: +block/qcow2.h + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 4 ++++ + block/qcow2.c | 4 +--- + block/qcow2.h | 9 +++++++++ + 3 files changed, 14 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index c08fb08..7b00dda 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -310,6 +310,10 @@ static int alloc_refcount_block(BlockDriverState *bs, + uint64_t refcount_block_clusters = 1 << (s->cluster_bits - REFCOUNT_SHIFT); + uint64_t blocks_used = DIV_ROUND_UP(cluster_index, refcount_block_clusters); + ++ if (blocks_used > QCOW_MAX_REFTABLE_SIZE / sizeof(uint64_t)) { ++ return -EFBIG; ++ } ++ + /* And now we need at least one block more for the new metadata */ + uint64_t table_size = next_refcount_table_size(s, blocks_used + 1); + uint64_t last_table_size; +diff --git a/block/qcow2.c b/block/qcow2.c +index 87f2958..db9f667 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -608,9 +608,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->refcount_table_size = + header.refcount_table_clusters << (s->cluster_bits - 3); + +- if (header.refcount_table_clusters > (0x800000 >> s->cluster_bits)) { +- /* 8 MB refcount table is enough for 2 PB images at 64k cluster size +- * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ ++ if (header.refcount_table_clusters > qcow2_max_refcount_clusters(s)) { + error_setg(errp, "Reference count table too large"); + ret = -EINVAL; + goto fail; +diff --git a/block/qcow2.h b/block/qcow2.h +index 5efc96e..0173d95 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -40,6 +40,10 @@ + #define QCOW_MAX_CRYPT_CLUSTERS 32 + #define QCOW_MAX_SNAPSHOTS 65536 + ++/* 8 MB refcount table is enough for 2 PB images at 64k cluster size ++ * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ ++#define QCOW_MAX_REFTABLE_SIZE 0x800000 ++ + /* indicate that the refcount of the referenced cluster is exactly one. */ + #define QCOW_OFLAG_COPIED (1LL << 63) + /* indicate that the cluster is compressed (they never have the copied flag) */ +@@ -405,6 +409,11 @@ static inline int64_t align_offset(int64_t offset, int n) + return offset; + } + ++static inline uint64_t qcow2_max_refcount_clusters(BDRVQcowState *s) ++{ ++ return QCOW_MAX_REFTABLE_SIZE >> s->cluster_bits; ++} ++ + static inline int qcow2_get_cluster_type(uint64_t l2_entry) + { + if (l2_entry & QCOW_OFLAG_COMPRESSED) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Check-refcount-table-size-CVE-2014-0144.patch b/SOURCES/kvm-qcow2-Check-refcount-table-size-CVE-2014-0144.patch new file mode 100644 index 0000000..85180c8 --- /dev/null +++ b/SOURCES/kvm-qcow2-Check-refcount-table-size-CVE-2014-0144.patch @@ -0,0 +1,116 @@ +From 0f9e33b29b76a647c903753a0758b9c85e75d73a Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:29 +0100 +Subject: [PATCH 22/49] qcow2: Check refcount table size (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-23-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 22/48] qcow2: Check refcount table size (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +Limit the in-memory reference count table size to 8 MB, it's enough in +practice. This fixes an unbounded allocation as well as a buffer +overflow in qcow2_refcount_init(). + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 4 +++- + block/qcow2.c | 9 +++++++++ + tests/qemu-iotests/080 | 10 ++++++++++ + tests/qemu-iotests/080.out | 7 +++++++ + 4 files changed, 29 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 09c638f..13ea5f7 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -40,8 +40,10 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + int qcow2_refcount_init(BlockDriverState *bs) + { + BDRVQcowState *s = bs->opaque; +- int ret, refcount_table_size2, i; ++ unsigned int refcount_table_size2, i; ++ int ret; + ++ assert(s->refcount_table_size <= INT_MAX / sizeof(uint64_t)); + refcount_table_size2 = s->refcount_table_size * sizeof(uint64_t); + s->refcount_table = g_malloc(refcount_table_size2); + if (s->refcount_table_size > 0) { +diff --git a/block/qcow2.c b/block/qcow2.c +index 5568cf9..a7780ac 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -576,10 +576,19 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->csize_shift = (62 - (s->cluster_bits - 8)); + s->csize_mask = (1 << (s->cluster_bits - 8)) - 1; + s->cluster_offset_mask = (1LL << s->csize_shift) - 1; ++ + s->refcount_table_offset = header.refcount_table_offset; + s->refcount_table_size = + header.refcount_table_clusters << (s->cluster_bits - 3); + ++ if (header.refcount_table_clusters > (0x800000 >> s->cluster_bits)) { ++ /* 8 MB refcount table is enough for 2 PB images at 64k cluster size ++ * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ ++ error_setg(errp, "Reference count table too large"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ + s->snapshots_offset = header.snapshots_offset; + s->nb_snapshots = header.nb_snapshots; + +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 6d588dd..6179e05 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -45,6 +45,7 @@ _supported_os Linux + header_size=104 + + offset_backing_file_offset=8 ++offset_refcount_table_clusters=56 + offset_header_size=100 + offset_ext_magic=$header_size + offset_ext_size=$((header_size + 4)) +@@ -67,6 +68,15 @@ poke_file "$TEST_IMG" "$offset_ext_size" "\x7f\xff\xff\xff" + poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x00\x00" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Huge refcount table size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_refcount_table_clusters" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_refcount_table_clusters" "\x00\x02\x00\x01" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 48c40aa..6fef6d9 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -13,4 +13,11 @@ qemu-io: can't open device TEST_DIR/t.qcow2: Invalid backing file offset + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow2: Header extension too large + no file open, try 'help open' ++ ++== Huge refcount table size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Reference count table too large ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Reference count table too large ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Clean-up-after-refcount-rebuild.patch b/SOURCES/kvm-qcow2-Clean-up-after-refcount-rebuild.patch new file mode 100644 index 0000000..d335512 --- /dev/null +++ b/SOURCES/kvm-qcow2-Clean-up-after-refcount-rebuild.patch @@ -0,0 +1,94 @@ +From aa1df6fcd4c2dbfd39cac3e1d68208cca61643ce Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:23 +0200 +Subject: [PATCH 29/42] qcow2: Clean up after refcount rebuild + +Message-id: <1434212556-3927-30-git-send-email-mreitz@redhat.com> +Patchwork-id: 66048 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 29/42] qcow2: Clean up after refcount rebuild +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Because the old refcount structure will be leaked after having rebuilt +it, we need to recalculate the refcounts and run a leak-fixing operation +afterwards (if leaks should be fixed at all). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 791230d8bbd5c09d80845755a54074cd2d8b5a22) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 651ddb6..fe36bbd 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1983,12 +1983,57 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + nb_clusters); + + if (rebuild && (fix & BDRV_FIX_ERRORS)) { ++ BdrvCheckResult old_res = *res; ++ int fresh_leaks = 0; ++ + fprintf(stderr, "Rebuilding refcount structure\n"); + ret = rebuild_refcount_structure(bs, res, &refcount_table, + &nb_clusters); + if (ret < 0) { + goto fail; + } ++ ++ res->corruptions = 0; ++ res->leaks = 0; ++ ++ /* Because the old reftable has been exchanged for a new one the ++ * references have to be recalculated */ ++ rebuild = false; ++ memset(refcount_table, 0, nb_clusters * sizeof(uint16_t)); ++ ret = calculate_refcounts(bs, res, 0, &rebuild, &refcount_table, ++ &nb_clusters); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ if (fix & BDRV_FIX_LEAKS) { ++ /* The old refcount structures are now leaked, fix it; the result ++ * can be ignored, aside from leaks which were introduced by ++ * rebuild_refcount_structure() that could not be fixed */ ++ BdrvCheckResult saved_res = *res; ++ *res = (BdrvCheckResult){ 0 }; ++ ++ compare_refcounts(bs, res, BDRV_FIX_LEAKS, &rebuild, ++ &highest_cluster, refcount_table, nb_clusters); ++ if (rebuild) { ++ fprintf(stderr, "ERROR rebuilt refcount structure is still " ++ "broken\n"); ++ } ++ ++ /* Any leaks accounted for here were introduced by ++ * rebuild_refcount_structure() because that function has created a ++ * new refcount structure from scratch */ ++ fresh_leaks = res->leaks; ++ *res = saved_res; ++ } ++ ++ if (res->corruptions < old_res.corruptions) { ++ res->corruptions_fixed += old_res.corruptions - res->corruptions; ++ } ++ if (res->leaks < old_res.leaks) { ++ res->leaks_fixed += old_res.leaks - res->leaks; ++ } ++ res->leaks += fresh_leaks; + } else if (fix) { + if (rebuild) { + fprintf(stderr, "ERROR need to rebuild refcount structures\n"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Correct-bitmap-size-in-zero-expansion.patch b/SOURCES/kvm-qcow2-Correct-bitmap-size-in-zero-expansion.patch new file mode 100644 index 0000000..7c73e3a --- /dev/null +++ b/SOURCES/kvm-qcow2-Correct-bitmap-size-in-zero-expansion.patch @@ -0,0 +1,127 @@ +From 6529ac40614e6b28a9c52de40defb6e2f455698b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:14 +0100 +Subject: [PATCH 09/14] qcow2: Correct bitmap size in zero expansion + +RH-Author: Max Reitz +Message-id: <1389131839-12920-10-git-send-email-mreitz@redhat.com> +Patchwork-id: 56545 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 09/14] qcow2: Correct bitmap size in zero expansion +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Since the expanded_clusters bitmap is addressed using host offsets in +the underlying image file, the correct size to use for allocating the +bitmap is not determined by the guest disk image but by the underlying +host image file. + +Furthermore, this size may change during the expansion due to cluster +allocations on growable image files. In this case, the bitmap needs to +be resized as well to reflect the growth. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit e390cf5a9722d3f3cc54efb505f6ff37fa554b11) + +Signed-off-by: Max Reitz +--- + block/qcow2-cluster.c | 38 +++++++++++++++++++++++++++----------- + 1 file changed, 27 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 38 +++++++++++++++++++++++++++----------- + 1 files changed, 27 insertions(+), 11 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 796d7c5..bfdc83a 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1511,8 +1511,8 @@ fail: + * i.e., the number of bits in expanded_clusters. + */ + static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, +- int l1_size, uint8_t *expanded_clusters, +- uint64_t nb_clusters) ++ int l1_size, uint8_t **expanded_clusters, ++ uint64_t *nb_clusters) + { + BDRVQcowState *s = bs->opaque; + bool is_active_l1 = (l1_table == s->l1_table); +@@ -1555,8 +1555,8 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + + if (cluster_type == QCOW2_CLUSTER_NORMAL) { + cluster_index = offset >> s->cluster_bits; +- assert((cluster_index >= 0) && (cluster_index < nb_clusters)); +- if (expanded_clusters[cluster_index / 8] & ++ assert((cluster_index >= 0) && (cluster_index < *nb_clusters)); ++ if ((*expanded_clusters)[cluster_index / 8] & + (1 << (cluster_index % 8))) { + /* Probably a shared L2 table; this cluster was a zero + * cluster which has been expanded, its refcount +@@ -1613,8 +1613,25 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + l2_dirty = true; + + cluster_index = offset >> s->cluster_bits; +- assert((cluster_index >= 0) && (cluster_index < nb_clusters)); +- expanded_clusters[cluster_index / 8] |= 1 << (cluster_index % 8); ++ ++ if (cluster_index >= *nb_clusters) { ++ uint64_t old_bitmap_size = (*nb_clusters + 7) / 8; ++ uint64_t new_bitmap_size; ++ /* The offset may lie beyond the old end of the underlying image ++ * file for growable files only */ ++ assert(bs->file->growable); ++ *nb_clusters = size_to_clusters(s, bs->file->total_sectors * ++ BDRV_SECTOR_SIZE); ++ new_bitmap_size = (*nb_clusters + 7) / 8; ++ *expanded_clusters = g_realloc(*expanded_clusters, ++ new_bitmap_size); ++ /* clear the newly allocated space */ ++ memset(&(*expanded_clusters)[old_bitmap_size], 0, ++ new_bitmap_size - old_bitmap_size); ++ } ++ ++ assert((cluster_index >= 0) && (cluster_index < *nb_clusters)); ++ (*expanded_clusters)[cluster_index / 8] |= 1 << (cluster_index % 8); + } + + if (is_active_l1) { +@@ -1673,18 +1690,17 @@ int qcow2_expand_zero_clusters(BlockDriverState *bs) + { + BDRVQcowState *s = bs->opaque; + uint64_t *l1_table = NULL; +- int cluster_to_sector_bits = s->cluster_bits - BDRV_SECTOR_BITS; + uint64_t nb_clusters; + uint8_t *expanded_clusters; + int ret; + int i, j; + +- nb_clusters = (bs->total_sectors + (1 << cluster_to_sector_bits) - 1) +- >> cluster_to_sector_bits; ++ nb_clusters = size_to_clusters(s, bs->file->total_sectors * ++ BDRV_SECTOR_SIZE); + expanded_clusters = g_malloc0((nb_clusters + 7) / 8); + + ret = expand_zero_clusters_in_l1(bs, s->l1_table, s->l1_size, +- expanded_clusters, nb_clusters); ++ &expanded_clusters, &nb_clusters); + if (ret < 0) { + goto fail; + } +@@ -1718,7 +1734,7 @@ int qcow2_expand_zero_clusters(BlockDriverState *bs) + } + + ret = expand_zero_clusters_in_l1(bs, l1_table, s->snapshots[i].l1_size, +- expanded_clusters, nb_clusters); ++ &expanded_clusters, &nb_clusters); + if (ret < 0) { + goto fail; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Correct-endianness-in-overlap-check.patch b/SOURCES/kvm-qcow2-Correct-endianness-in-overlap-check.patch new file mode 100644 index 0000000..63de5b0 --- /dev/null +++ b/SOURCES/kvm-qcow2-Correct-endianness-in-overlap-check.patch @@ -0,0 +1,53 @@ +From 2ded69dfa67b8243d579e26839db43a288c251b8 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:25 +0100 +Subject: [PATCH 32/87] qcow2: Correct endianness in overlap check + +RH-Author: Max Reitz +Message-id: <1383604354-12743-35-git-send-email-mreitz@redhat.com> +Patchwork-id: 55334 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 34/43] qcow2: Correct endianness in overlap check +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +If an inactive L1 table is loaded from disk, its entries are in big +endian and have to be converted to host byte order before using them. + +Signed-off-by: Max Reitz +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 1e242b5544a48bc43eca9c637dc91ec06bcf3a31) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 2a589b8..34fcf2f 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1713,8 +1713,8 @@ int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, + } + + for (j = 0; j < l1_sz; j++) { +- if ((l1[j] & L1E_OFFSET_MASK) && +- overlaps_with(l1[j] & L1E_OFFSET_MASK, s->cluster_size)) { ++ uint64_t l2_ofs = be64_to_cpu(l1[j]) & L1E_OFFSET_MASK; ++ if (l2_ofs && overlaps_with(l2_ofs, s->cluster_size)) { + g_free(l1); + return QCOW2_OL_INACTIVE_L2; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Correct-snapshots-size-for-overlap-check.patch b/SOURCES/kvm-qcow2-Correct-snapshots-size-for-overlap-check.patch new file mode 100644 index 0000000..d49414a --- /dev/null +++ b/SOURCES/kvm-qcow2-Correct-snapshots-size-for-overlap-check.patch @@ -0,0 +1,58 @@ +From f9b42568a13151521cb8edf38f567e8c5cf25396 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:23 +0100 +Subject: [PATCH 30/87] qcow2: Correct snapshots size for overlap check + +RH-Author: Max Reitz +Message-id: <1383604354-12743-33-git-send-email-mreitz@redhat.com> +Patchwork-id: 55332 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 32/43] qcow2: Correct snapshots size for overlap check +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Using s->snapshots_size instead of snapshots_size for the metadata +overlap check in qcow2_write_snapshots leads to the detection of an +overlap with the main qcow2 image header when deleting the last +snapshot, since s->snapshots_size has not yet been updated and is +therefore non-zero. However, the offset returned by qcow2_alloc_clusters +will be zero since snapshots_size is zero. Therefore, an overlap is +detected albeit no such will occur. + +This patch fixes this by replacing s->snapshots_size by snapshots_size +when calling qcow2_pre_write_overlap_check. + +Signed-off-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0f39ac9a07cc10278e37d87076b143008f28aa3b) + +Signed-off-by: Max Reitz +--- + block/qcow2-snapshot.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-snapshot.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index e7e6013..450e4f5 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -192,7 +192,7 @@ static int qcow2_write_snapshots(BlockDriverState *bs) + /* The snapshot list position has not yet been updated, so these clusters + * must indeed be completely free */ + ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, offset, +- s->snapshots_size); ++ snapshots_size); + if (ret < 0) { + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Discard-VM-state-in-active-L1-after-creating-s.patch b/SOURCES/kvm-qcow2-Discard-VM-state-in-active-L1-after-creating-s.patch new file mode 100644 index 0000000..7777aac --- /dev/null +++ b/SOURCES/kvm-qcow2-Discard-VM-state-in-active-L1-after-creating-s.patch @@ -0,0 +1,95 @@ +From 1ebfe2d9807a9ba4bfbec3104c6c8df50c89414d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 29 May 2015 17:05:12 +0200 +Subject: [PATCH 2/8] qcow2: Discard VM state in active L1 after creating + snapshot + +Message-id: <1432919112-18076-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 65149 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] qcow2: Discard VM state in active L1 after creating snapshot +Bugzilla: 1208808 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +During savevm, the VM state is written to the active L1 of the image and +then a snapshot is taken. After that, the VM state isn't needed any more +in the active L1 and should be discarded. This is implemented by this +patch. + +The impact of not discarding the VM state is that a snapshot can never +become smaller than any previous snapshot (because it would be padded +with old VM state), and more importantly that future savevm operations +cause unnecessary COWs (with associated flushes), which makes subsequent +snapshots much slower. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 1ebf561c11302f4fbe4afdd82758fe053cf1d5fc) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2.h + +Context-only conflict in qcow2.h. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-snapshot.c | 7 +++++++ + block/qcow2.c | 5 ----- + block/qcow2.h | 5 +++++ + 3 files changed, 12 insertions(+), 5 deletions(-) + +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index 84481be..6081482 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -407,6 +407,13 @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) + + g_free(old_snapshot_list); + ++ /* The VM state isn't needed any more in the active L1 table; in fact, it ++ * hurts by causing expensive COW for the next snapshot. */ ++ qcow2_discard_clusters(bs, qcow2_vm_state_offset(s), ++ align_offset(sn->vm_state_size, s->cluster_size) ++ >> BDRV_SECTOR_BITS, ++ QCOW2_DISCARD_NEVER); ++ + #ifdef DEBUG_ALLOC + { + BdrvCheckResult result = {0}; +diff --git a/block/qcow2.c b/block/qcow2.c +index babcb4b..6026f8a 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -2036,11 +2036,6 @@ static coroutine_fn int qcow2_co_flush_to_os(BlockDriverState *bs) + return 0; + } + +-static int64_t qcow2_vm_state_offset(BDRVQcowState *s) +-{ +- return (int64_t)s->l1_vm_state_index << (s->cluster_bits + s->l2_bits); +-} +- + static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + { + BDRVQcowState *s = bs->opaque; +diff --git a/block/qcow2.h b/block/qcow2.h +index 9ad8aad..e958ab4 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -417,6 +417,11 @@ static inline int64_t align_offset(int64_t offset, int n) + return offset; + } + ++static inline int64_t qcow2_vm_state_offset(BDRVQcowState *s) ++{ ++ return (int64_t)s->l1_vm_state_index << (s->cluster_bits + s->l2_bits); ++} ++ + static inline uint64_t qcow2_max_refcount_clusters(BDRVQcowState *s) + { + return QCOW_MAX_REFTABLE_SIZE >> s->cluster_bits; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Do-not-overflow-when-writing-an-L1-sector.patch b/SOURCES/kvm-qcow2-Do-not-overflow-when-writing-an-L1-sector.patch new file mode 100644 index 0000000..182adb1 --- /dev/null +++ b/SOURCES/kvm-qcow2-Do-not-overflow-when-writing-an-L1-sector.patch @@ -0,0 +1,58 @@ +From 5cefc50d497d347c2352d785657b04db99e06ec8 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:07 +0200 +Subject: [PATCH 13/42] qcow2: Do not overflow when writing an L1 sector + +Message-id: <1434212556-3927-14-git-send-email-mreitz@redhat.com> +Patchwork-id: 66032 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 13/42] qcow2: Do not overflow when writing an L1 sector +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +While writing an L1 table sector, qcow2_write_l1_entry() copies the +respective range from s->l1_table to the local "buf" array. The size of +s->l1_table does not have to be a multiple of L1_ENTRIES_PER_SECTOR; +thus, limit the index which is used for copying all entries to the L1 +size. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Max Reitz +Reviewed-by: Peter Lieven +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit a1391444fe1cfef14976458f3293a2c6945e725c) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 0e3b8d7..053e9fe 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -151,12 +151,14 @@ static int l2_load(BlockDriverState *bs, uint64_t l2_offset, + int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index) + { + BDRVQcowState *s = bs->opaque; +- uint64_t buf[L1_ENTRIES_PER_SECTOR]; ++ uint64_t buf[L1_ENTRIES_PER_SECTOR] = { 0 }; + int l1_start_index; + int i, ret; + + l1_start_index = l1_index & ~(L1_ENTRIES_PER_SECTOR - 1); +- for (i = 0; i < L1_ENTRIES_PER_SECTOR; i++) { ++ for (i = 0; i < L1_ENTRIES_PER_SECTOR && l1_start_index + i < s->l1_size; ++ i++) ++ { + buf[i] = cpu_to_be64(s->l1_table[l1_start_index + i]); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Do-not-perform-potentially-damaging-repairs.patch b/SOURCES/kvm-qcow2-Do-not-perform-potentially-damaging-repairs.patch new file mode 100644 index 0000000..a5e68d6 --- /dev/null +++ b/SOURCES/kvm-qcow2-Do-not-perform-potentially-damaging-repairs.patch @@ -0,0 +1,319 @@ +From 6745478978aed56c72daed821e912a9f9644932a Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:21 +0200 +Subject: [PATCH 27/42] qcow2: Do not perform potentially damaging repairs + +Message-id: <1434212556-3927-28-git-send-email-mreitz@redhat.com> +Patchwork-id: 66046 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 27/42] qcow2: Do not perform potentially damaging repairs +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +If a referenced cluster has a refcount of 0, increasing its refcount may +result in clusters being allocated for the refcount structures. This may +overwrite the referenced cluster, therefore we cannot simply increase +the refcount then. + +In such cases, we can either try to replicate all the refcount +operations solely for the check operation, basing the allocations on the +in-memory refcount table; or we can simply rebuild the whole refcount +structure based on the in-memory refcount table. Since the latter will +be much easier, do that. + +To prepare for this, introduce a "rebuild" boolean which should be set +to true whenever a fix is rather dangerous or too complicated using the +current refcount structures. Another example for this is refcount blocks +being referenced more than once. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit f307b2558f61e068ce514f2dde2cad74c62036d6) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2-refcount.c + +Some conflicts in the code that is being removed. + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 186 +++++++------------------------------------------ + 1 file changed, 27 insertions(+), 159 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 8ce0447..3d66e7c 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1424,125 +1424,12 @@ fail: + } + + /* +- * Writes one sector of the refcount table to the disk +- */ +-#define RT_ENTRIES_PER_SECTOR (512 / sizeof(uint64_t)) +-static int write_reftable_entry(BlockDriverState *bs, int rt_index) +-{ +- BDRVQcowState *s = bs->opaque; +- uint64_t buf[RT_ENTRIES_PER_SECTOR]; +- int rt_start_index; +- int i, ret; +- +- rt_start_index = rt_index & ~(RT_ENTRIES_PER_SECTOR - 1); +- for (i = 0; i < RT_ENTRIES_PER_SECTOR; i++) { +- buf[i] = cpu_to_be64(s->refcount_table[rt_start_index + i]); +- } +- +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_REFCOUNT_TABLE, +- s->refcount_table_offset + rt_start_index * sizeof(uint64_t), +- sizeof(buf)); +- if (ret < 0) { +- return ret; +- } +- +- BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_UPDATE); +- ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset + +- rt_start_index * sizeof(uint64_t), buf, sizeof(buf)); +- if (ret < 0) { +- return ret; +- } +- +- return 0; +-} +- +-/* +- * Allocates a new cluster for the given refcount block (represented by its +- * offset in the image file) and copies the current content there. This function +- * does _not_ decrement the reference count for the currently occupied cluster. +- * +- * This function prints an informative message to stderr on error (and returns +- * -errno); on success, 0 is returned. +- */ +-static int64_t realloc_refcount_block(BlockDriverState *bs, int reftable_index, +- uint64_t offset) +-{ +- BDRVQcowState *s = bs->opaque; +- int64_t new_offset = 0; +- void *refcount_block = NULL; +- int ret; +- +- /* allocate new refcount block */ +- new_offset = qcow2_alloc_clusters(bs, s->cluster_size); +- if (new_offset < 0) { +- fprintf(stderr, "Could not allocate new cluster: %s\n", +- strerror(-new_offset)); +- ret = new_offset; +- goto fail; +- } +- +- /* fetch current refcount block content */ +- ret = qcow2_cache_get(bs, s->refcount_block_cache, offset, &refcount_block); +- if (ret < 0) { +- fprintf(stderr, "Could not fetch refcount block: %s\n", strerror(-ret)); +- goto fail; +- } +- +- /* new block has not yet been entered into refcount table, therefore it is +- * no refcount block yet (regarding this check) */ +- ret = qcow2_pre_write_overlap_check(bs, 0, new_offset, s->cluster_size); +- if (ret < 0) { +- fprintf(stderr, "Could not write refcount block; metadata overlap " +- "check failed: %s\n", strerror(-ret)); +- /* the image will be marked corrupt, so don't even attempt on freeing +- * the cluster */ +- new_offset = 0; +- goto fail; +- } +- +- /* write to new block */ +- ret = bdrv_write(bs->file, new_offset / BDRV_SECTOR_SIZE, refcount_block, +- s->cluster_sectors); +- if (ret < 0) { +- fprintf(stderr, "Could not write refcount block: %s\n", strerror(-ret)); +- goto fail; +- } +- +- /* update refcount table */ +- assert(!(new_offset & (s->cluster_size - 1))); +- s->refcount_table[reftable_index] = new_offset; +- ret = write_reftable_entry(bs, reftable_index); +- if (ret < 0) { +- fprintf(stderr, "Could not update refcount table: %s\n", +- strerror(-ret)); +- goto fail; +- } +- +-fail: +- if (new_offset && (ret < 0)) { +- qcow2_free_clusters(bs, new_offset, s->cluster_size, +- QCOW2_DISCARD_ALWAYS); +- } +- if (refcount_block) { +- if (ret < 0) { +- qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block); +- } else { +- ret = qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block); +- } +- } +- if (ret < 0) { +- return ret; +- } +- return new_offset; +-} +- +-/* + * Checks consistency of refblocks and accounts for each refblock in + * *refcount_table. + */ + static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, +- BdrvCheckMode fix, uint16_t **refcount_table, +- int64_t *nb_clusters) ++ BdrvCheckMode fix, bool *rebuild, ++ uint16_t **refcount_table, int64_t *nb_clusters) + { + BDRVQcowState *s = bs->opaque; + int64_t i, size; +@@ -1558,6 +1445,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + fprintf(stderr, "ERROR refcount block %" PRId64 " is not " + "cluster aligned; refcount table entry corrupted\n", i); + res->corruptions++; ++ *rebuild = true; + continue; + } + +@@ -1619,6 +1507,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + + resize_fail: + res->corruptions++; ++ *rebuild = true; + fprintf(stderr, "ERROR could not resize image: %s\n", + strerror(-ret)); + } else { +@@ -1634,43 +1523,10 @@ resize_fail: + return ret; + } + if ((*refcount_table)[cluster] != 1) { +- fprintf(stderr, "%s refcount block %" PRId64 +- " refcount=%d\n", +- fix & BDRV_FIX_ERRORS ? "Repairing" : +- "ERROR", +- i, (*refcount_table)[cluster]); +- +- if (fix & BDRV_FIX_ERRORS) { +- int64_t new_offset; +- +- new_offset = realloc_refcount_block(bs, i, offset); +- if (new_offset < 0) { +- res->corruptions++; +- continue; +- } +- +- /* update refcounts */ +- if ((new_offset >> s->cluster_bits) >= *nb_clusters) { +- /* increase refcount_table size if necessary */ +- int old_nb_clusters = *nb_clusters; +- *nb_clusters = (new_offset >> s->cluster_bits) + 1; +- *refcount_table = g_renew(uint16_t, *refcount_table, +- *nb_clusters); +- memset(&(*refcount_table)[old_nb_clusters], 0, +- (*nb_clusters - old_nb_clusters) * +- sizeof(**refcount_table)); +- } +- (*refcount_table)[cluster]--; +- ret = inc_refcounts(bs, res, refcount_table, nb_clusters, +- new_offset, s->cluster_size); +- if (ret < 0) { +- return ret; +- } +- +- res->corruptions_fixed++; +- } else { +- res->corruptions++; +- } ++ fprintf(stderr, "ERROR refcount block %" PRId64 ++ " refcount=%d\n", i, (*refcount_table)[cluster]); ++ res->corruptions++; ++ *rebuild = true; + } + } + } +@@ -1682,8 +1538,8 @@ resize_fail: + * Calculates an in-memory refcount table. + */ + static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, +- BdrvCheckMode fix, uint16_t **refcount_table, +- int64_t *nb_clusters) ++ BdrvCheckMode fix, bool *rebuild, ++ uint16_t **refcount_table, int64_t *nb_clusters) + { + BDRVQcowState *s = bs->opaque; + int64_t i; +@@ -1735,7 +1591,7 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + return ret; + } + +- return check_refblocks(bs, res, fix, refcount_table, nb_clusters); ++ return check_refblocks(bs, res, fix, rebuild, refcount_table, nb_clusters); + } + + /* +@@ -1743,7 +1599,8 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + * refcount as reported by the refcount structures on-disk. + */ + static void compare_refcounts(BlockDriverState *bs, BdrvCheckResult *res, +- BdrvCheckMode fix, int64_t *highest_cluster, ++ BdrvCheckMode fix, bool *rebuild, ++ int64_t *highest_cluster, + uint16_t *refcount_table, int64_t nb_clusters) + { + BDRVQcowState *s = bs->opaque; +@@ -1768,7 +1625,9 @@ static void compare_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + if (refcount1 != refcount2) { + /* Check if we're allowed to fix the mismatch */ + int *num_fixed = NULL; +- if (refcount1 > refcount2 && (fix & BDRV_FIX_LEAKS)) { ++ if (refcount1 == 0) { ++ *rebuild = true; ++ } else if (refcount1 > refcount2 && (fix & BDRV_FIX_LEAKS)) { + num_fixed = &res->leaks_fixed; + } else if (refcount1 < refcount2 && (fix & BDRV_FIX_ERRORS)) { + num_fixed = &res->corruptions_fixed; +@@ -1812,6 +1671,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + BDRVQcowState *s = bs->opaque; + int64_t size, highest_cluster, nb_clusters; + uint16_t *refcount_table = NULL; ++ bool rebuild = false; + int ret; + + size = bdrv_getlength(bs->file); +@@ -1829,14 +1689,22 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + res->bfi.total_clusters = + size_to_clusters(s, bs->total_sectors * BDRV_SECTOR_SIZE); + +- ret = calculate_refcounts(bs, res, fix, &refcount_table, &nb_clusters); ++ ret = calculate_refcounts(bs, res, fix, &rebuild, &refcount_table, ++ &nb_clusters); + if (ret < 0) { + goto fail; + } + +- compare_refcounts(bs, res, fix, &highest_cluster, refcount_table, ++ compare_refcounts(bs, res, fix, &rebuild, &highest_cluster, refcount_table, + nb_clusters); + ++ if (rebuild) { ++ fprintf(stderr, "ERROR need to rebuild refcount structures\n"); ++ res->check_errors++; ++ /* Just carry on, the rest does not rely on the on-disk refcount ++ * structures */ ++ } ++ + /* check OFLAG_COPIED */ + ret = check_oflag_copied(bs, res, fix); + if (ret < 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_ref2.patch b/SOURCES/kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_ref2.patch new file mode 100644 index 0000000..7108c00 --- /dev/null +++ b/SOURCES/kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_ref2.patch @@ -0,0 +1,86 @@ +From 32dcdb3b1623e351d66bfe7cccbdcef3087f9b7b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:45:09 +0100 +Subject: [PATCH 11/24] qcow2: Don't rely on free_cluster_index in + alloc_refcount_block() (CVE-2014-0147) + +RH-Author: Max Reitz +Message-id: <20170313174516.28044-3-mreitz@redhat.com> +Patchwork-id: 74274 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/9] qcow2: Don't rely on free_cluster_index in alloc_refcount_block() (CVE-2014-0147) +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +From: Kevin Wolf + +free_cluster_index is only correct if update_refcount() was called from +an allocation function, and even there it's brittle because it's used to +protect unfinished allocations which still have a refcount of 0 - if it +moves in the wrong place, the unfinished allocation can be corrupted. + +So not using it any more seems to be a good idea. Instead, use the +first requested cluster to do the calculations. Return -EAGAIN if +unfinished allocations could become invalid and let the caller restart +its search for some free clusters. + +The context of creating a snapsnot is one situation where +update_refcount() is called outside of a cluster allocation. For this +case, the change fixes a buffer overflow if a cluster is referenced in +an L2 table that cannot be represented by an existing refcount block. +(new_table[refcount_table_index] was out of bounds) + +[Bump the qemu-iotests 026 refblock_alloc.write leak count from 10 to +11. +--Stefan] + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b106ad9185f35fc4ad669555ad0e79e276083bd7) + +This patch was committed downstream before upstream (commit ID +a2b10eec76a72aa7fe63e797181b93f69de9600e), therefore the change to 026's +reference output is missing, which is amended by this backport. + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/026.out | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tests/qemu-iotests/026.out b/tests/qemu-iotests/026.out +index 0764389..5cedefc 100644 +--- a/tests/qemu-iotests/026.out ++++ b/tests/qemu-iotests/026.out +@@ -491,7 +491,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + Event: refblock_alloc.write_blocks; errno: 28; imm: off; once: off; write + write failed: No space left on device + +-10 leaked clusters were found on the image. ++11 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + +@@ -515,7 +515,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + Event: refblock_alloc.write_table; errno: 28; imm: off; once: off; write + write failed: No space left on device + +-10 leaked clusters were found on the image. ++11 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + +@@ -539,7 +539,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + Event: refblock_alloc.switch_table; errno: 28; imm: off; once: off; write + write failed: No space left on device + +-10 leaked clusters were found on the image. ++11 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_refc.patch b/SOURCES/kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_refc.patch new file mode 100644 index 0000000..c06d832 --- /dev/null +++ b/SOURCES/kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_refc.patch @@ -0,0 +1,284 @@ +From a2b10eec76a72aa7fe63e797181b93f69de9600e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:34 +0100 +Subject: [PATCH 27/49] qcow2: Don't rely on free_cluster_index in alloc_refcount_block() (CVE-2014-0147) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-28-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 27/48] qcow2: Don't rely on free_cluster_index in alloc_refcount_block() (CVE-2014-0147) +Bugzilla: 1079339 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079339 +Upstream status: Embargoed + +free_cluster_index is only correct if update_refcount() was called from +an allocation function, and even there it's brittle because it's used to +protect unfinished allocations which still have a refcount of 0 - if it +moves in the wrong place, the unfinished allocation can be corrupted. + +So not using it any more seems to be a good idea. Instead, use the +first requested cluster to do the calculations. Return -EAGAIN if +unfinished allocations could become invalid and let the caller restart +its search for some free clusters. + +The context of creating a snapsnot is one situation where +update_refcount() is called outside of a cluster allocation. For this +case, the change fixes a buffer overflow if a cluster is referenced in +an L2 table that cannot be represented by an existing refcount block. +(new_table[refcount_table_index] was out of bounds) + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 74 ++++++++++++++++++++++--------------------- + block/qcow2.c | 7 ++-- + tests/qemu-iotests/044.out | 2 +- + tests/qemu-iotests/080 | 11 ++++++ + tests/qemu-iotests/080.out | 7 ++++ + 5 files changed, 61 insertions(+), 40 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 13ea5f7..54bcbd1 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -193,10 +193,11 @@ static int alloc_refcount_block(BlockDriverState *bs, + * they can describe them themselves. + * + * - We need to consider that at this point we are inside update_refcounts +- * and doing the initial refcount increase. This means that some clusters +- * have already been allocated by the caller, but their refcount isn't +- * accurate yet. free_cluster_index tells us where this allocation ends +- * as long as we don't overwrite it by freeing clusters. ++ * and potentially doing an initial refcount increase. This means that ++ * some clusters have already been allocated by the caller, but their ++ * refcount isn't accurate yet. If we allocate clusters for metadata, we ++ * need to return -EAGAIN to signal the caller that it needs to restart ++ * the search for free clusters. + * + * - alloc_clusters_noref and qcow2_free_clusters may load a different + * refcount block into the cache +@@ -281,7 +282,10 @@ static int alloc_refcount_block(BlockDriverState *bs, + } + + s->refcount_table[refcount_table_index] = new_block; +- return 0; ++ ++ /* The new refcount block may be where the caller intended to put its ++ * data, so let it restart the search. */ ++ return -EAGAIN; + } + + ret = qcow2_cache_put(bs, s->refcount_block_cache, (void**) refcount_block); +@@ -304,8 +308,7 @@ static int alloc_refcount_block(BlockDriverState *bs, + + /* Calculate the number of refcount blocks needed so far */ + uint64_t refcount_block_clusters = 1 << (s->cluster_bits - REFCOUNT_SHIFT); +- uint64_t blocks_used = (s->free_cluster_index + +- refcount_block_clusters - 1) / refcount_block_clusters; ++ uint64_t blocks_used = DIV_ROUND_UP(cluster_index, refcount_block_clusters); + + /* And now we need at least one block more for the new metadata */ + uint64_t table_size = next_refcount_table_size(s, blocks_used + 1); +@@ -338,8 +341,6 @@ static int alloc_refcount_block(BlockDriverState *bs, + uint16_t *new_blocks = g_malloc0(blocks_clusters * s->cluster_size); + uint64_t *new_table = g_malloc0(table_size * sizeof(uint64_t)); + +- assert(meta_offset >= (s->free_cluster_index * s->cluster_size)); +- + /* Fill the new refcount table */ + memcpy(new_table, s->refcount_table, + s->refcount_table_size * sizeof(uint64_t)); +@@ -402,18 +403,19 @@ static int alloc_refcount_block(BlockDriverState *bs, + s->refcount_table_size = table_size; + s->refcount_table_offset = table_offset; + +- /* Free old table. Remember, we must not change free_cluster_index */ +- uint64_t old_free_cluster_index = s->free_cluster_index; ++ /* Free old table. */ + qcow2_free_clusters(bs, old_table_offset, old_table_size * sizeof(uint64_t), + QCOW2_DISCARD_OTHER); +- s->free_cluster_index = old_free_cluster_index; + + ret = load_refcount_block(bs, new_block, (void**) refcount_block); + if (ret < 0) { + return ret; + } + +- return 0; ++ /* If we were trying to do the initial refcount update for some cluster ++ * allocation, we might have used the same clusters to store newly ++ * allocated metadata. Make the caller search some new space. */ ++ return -EAGAIN; + + fail_table: + g_free(new_table); +@@ -659,12 +661,15 @@ int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size) + int ret; + + BLKDBG_EVENT(bs->file, BLKDBG_CLUSTER_ALLOC); +- offset = alloc_clusters_noref(bs, size); +- if (offset < 0) { +- return offset; +- } ++ do { ++ offset = alloc_clusters_noref(bs, size); ++ if (offset < 0) { ++ return offset; ++ } ++ ++ ret = update_refcount(bs, offset, size, 1, QCOW2_DISCARD_NEVER); ++ } while (ret == -EAGAIN); + +- ret = update_refcount(bs, offset, size, 1, QCOW2_DISCARD_NEVER); + if (ret < 0) { + return ret; + } +@@ -677,7 +682,6 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + { + BDRVQcowState *s = bs->opaque; + uint64_t cluster_index; +- uint64_t old_free_cluster_index; + uint64_t i; + int refcount, ret; + +@@ -686,30 +690,28 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + return 0; + } + +- /* Check how many clusters there are free */ +- cluster_index = offset >> s->cluster_bits; +- for(i = 0; i < nb_clusters; i++) { +- refcount = get_refcount(bs, cluster_index++); ++ do { ++ /* Check how many clusters there are free */ ++ cluster_index = offset >> s->cluster_bits; ++ for(i = 0; i < nb_clusters; i++) { ++ refcount = get_refcount(bs, cluster_index++); + +- if (refcount < 0) { +- return refcount; +- } else if (refcount != 0) { +- break; ++ if (refcount < 0) { ++ return refcount; ++ } else if (refcount != 0) { ++ break; ++ } + } +- } + +- /* And then allocate them */ +- old_free_cluster_index = s->free_cluster_index; +- s->free_cluster_index = cluster_index + i; ++ /* And then allocate them */ ++ ret = update_refcount(bs, offset, i << s->cluster_bits, 1, ++ QCOW2_DISCARD_NEVER); ++ } while (ret == -EAGAIN); + +- ret = update_refcount(bs, offset, i << s->cluster_bits, 1, +- QCOW2_DISCARD_NEVER); + if (ret < 0) { + return ret; + } + +- s->free_cluster_index = old_free_cluster_index; +- + return i; + } + +diff --git a/block/qcow2.c b/block/qcow2.c +index a8ad9e1..87f2958 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1580,7 +1580,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + */ + BlockDriverState* bs; + QCowHeader *header; +- uint8_t* refcount_table; ++ uint64_t* refcount_table; + Error *local_err = NULL; + int ret; + +@@ -1630,8 +1630,9 @@ static int qcow2_create2(const char *filename, int64_t total_size, + goto out; + } + +- /* Write an empty refcount table */ ++ /* Write a refcount table with one refcount block */ + refcount_table = g_malloc0(cluster_size); ++ refcount_table[0] = cpu_to_be64(2 * cluster_size); + ret = bdrv_pwrite(bs, cluster_size, refcount_table, cluster_size); + g_free(refcount_table); + +@@ -1656,7 +1657,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + goto out; + } + +- ret = qcow2_alloc_clusters(bs, 2 * cluster_size); ++ ret = qcow2_alloc_clusters(bs, 3 * cluster_size); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not allocate clusters for qcow2 " + "header and refcount table"); +diff --git a/tests/qemu-iotests/044.out b/tests/qemu-iotests/044.out +index 5c5aa92..4789a53 100644 +--- a/tests/qemu-iotests/044.out ++++ b/tests/qemu-iotests/044.out +@@ -1,6 +1,6 @@ + No errors were found on the image. + 7292415/33554432 = 21.73% allocated, 0.00% fragmented, 0.00% compressed clusters +-Image end offset: 4296448000 ++Image end offset: 4296152064 + . + ---------------------------------------------------------------------- + Ran 1 tests +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index f3091a9..56f8903 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -56,6 +56,8 @@ offset_header_size=100 + offset_ext_magic=$header_size + offset_ext_size=$((header_size + 4)) + ++offset_l2_table_0=$((0x40000)) ++ + echo + echo "== Huge header size ==" + _make_test_img 64M +@@ -143,6 +145,15 @@ poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x1 + poke_file "$TEST_IMG" "$offset_backing_file_size" "\xff\xff\xff\xff" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid L2 entry (huge physical offset) ==" ++_make_test_img 64M ++{ $QEMU_IO -c "write 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_l2_table_0" "\xbf\xff\xff\xff\xff\xff\x00\x00" ++{ $QEMU_IMG snapshot -c test $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_l2_table_0" "\x80\x00\x00\xff\xff\xff\x00\x00" ++{ $QEMU_IMG snapshot -c test $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 8103211..303d6c3 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -63,4 +63,11 @@ no file open, try 'help open' + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + qemu-io: can't open device TEST_DIR/t.qcow2: Backing file name too long + no file open, try 'help open' ++ ++== Invalid L2 entry (huge physical offset) == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++qemu-img: Could not create snapshot 'test': -27 (File too large) ++qemu-img: Could not create snapshot 'test': -11 (Resource temporarily unavailable) + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Drop-REFCOUNT_SHIFT.patch b/SOURCES/kvm-qcow2-Drop-REFCOUNT_SHIFT.patch new file mode 100644 index 0000000..c4bbe6c --- /dev/null +++ b/SOURCES/kvm-qcow2-Drop-REFCOUNT_SHIFT.patch @@ -0,0 +1,170 @@ +From 0b47923f65c2e457bb642b949f0e3dda722eba35 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:26 +0200 +Subject: [PATCH 32/42] qcow2: Drop REFCOUNT_SHIFT + +Message-id: <1434212556-3927-33-git-send-email-mreitz@redhat.com> +Patchwork-id: 66051 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 32/42] qcow2: Drop REFCOUNT_SHIFT +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +With BDRVQcowState.refcount_block_bits, we don't need REFCOUNT_SHIFT +anymore. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 17bd5f472754acd2458b53dc02a30d5651e6dd79) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 32 ++++++++++++++------------------ + block/qcow2.c | 2 +- + block/qcow2.h | 2 -- + 3 files changed, 15 insertions(+), 21 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index fe36bbd..87b932c 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -94,7 +94,7 @@ static int get_refcount(BlockDriverState *bs, int64_t cluster_index) + uint16_t *refcount_block; + uint16_t refcount; + +- refcount_table_index = cluster_index >> (s->cluster_bits - REFCOUNT_SHIFT); ++ refcount_table_index = cluster_index >> s->refcount_block_bits; + if (refcount_table_index >= s->refcount_table_size) + return 0; + refcount_block_offset = s->refcount_table[refcount_table_index]; +@@ -114,8 +114,7 @@ static int get_refcount(BlockDriverState *bs, int64_t cluster_index) + return ret; + } + +- block_index = cluster_index & +- ((1 << (s->cluster_bits - REFCOUNT_SHIFT)) - 1); ++ block_index = cluster_index & (s->refcount_block_size - 1); + refcount = be16_to_cpu(refcount_block[block_index]); + + ret = qcow2_cache_put(bs, s->refcount_block_cache, +@@ -150,8 +149,8 @@ static unsigned int next_refcount_table_size(BDRVQcowState *s, + static int in_same_refcount_block(BDRVQcowState *s, uint64_t offset_a, + uint64_t offset_b) + { +- uint64_t block_a = offset_a >> (2 * s->cluster_bits - REFCOUNT_SHIFT); +- uint64_t block_b = offset_b >> (2 * s->cluster_bits - REFCOUNT_SHIFT); ++ uint64_t block_a = offset_a >> (s->cluster_bits + s->refcount_block_bits); ++ uint64_t block_b = offset_b >> (s->cluster_bits + s->refcount_block_bits); + + return (block_a == block_b); + } +@@ -172,7 +171,7 @@ static int alloc_refcount_block(BlockDriverState *bs, + BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC); + + /* Find the refcount block for the given cluster */ +- refcount_table_index = cluster_index >> (s->cluster_bits - REFCOUNT_SHIFT); ++ refcount_table_index = cluster_index >> s->refcount_block_bits; + + if (refcount_table_index < s->refcount_table_size) { + +@@ -249,7 +248,7 @@ static int alloc_refcount_block(BlockDriverState *bs, + + /* The block describes itself, need to update the cache */ + int block_index = (new_block >> s->cluster_bits) & +- ((1 << (s->cluster_bits - REFCOUNT_SHIFT)) - 1); ++ (s->refcount_block_size - 1); + (*refcount_block)[block_index] = cpu_to_be16(1); + } else { + /* Described somewhere else. This can recurse at most twice before we +@@ -321,8 +320,7 @@ static int alloc_refcount_block(BlockDriverState *bs, + BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_GROW); + + /* Calculate the number of refcount blocks needed so far */ +- uint64_t refcount_block_clusters = 1 << (s->cluster_bits - REFCOUNT_SHIFT); +- uint64_t blocks_used = DIV_ROUND_UP(cluster_index, refcount_block_clusters); ++ uint64_t blocks_used = DIV_ROUND_UP(cluster_index, s->refcount_block_size); + + if (blocks_used > QCOW_MAX_REFTABLE_SIZE / sizeof(uint64_t)) { + return -EFBIG; +@@ -336,14 +334,14 @@ static int alloc_refcount_block(BlockDriverState *bs, + uint64_t table_clusters = + size_to_clusters(s, table_size * sizeof(uint64_t)); + blocks_clusters = 1 + +- ((table_clusters + refcount_block_clusters - 1) +- / refcount_block_clusters); ++ ((table_clusters + s->refcount_block_size - 1) ++ / s->refcount_block_size); + uint64_t meta_clusters = table_clusters + blocks_clusters; + + last_table_size = table_size; + table_size = next_refcount_table_size(s, blocks_used + +- ((meta_clusters + refcount_block_clusters - 1) +- / refcount_block_clusters)); ++ ((meta_clusters + s->refcount_block_size - 1) ++ / s->refcount_block_size)); + + } while (last_table_size != table_size); + +@@ -353,7 +351,7 @@ static int alloc_refcount_block(BlockDriverState *bs, + #endif + + /* Create the new refcount table and blocks */ +- uint64_t meta_offset = (blocks_used * refcount_block_clusters) * ++ uint64_t meta_offset = (blocks_used * s->refcount_block_size) * + s->cluster_size; + uint64_t table_offset = meta_offset + blocks_clusters * s->cluster_size; + uint16_t *new_blocks = g_malloc0(blocks_clusters * s->cluster_size); +@@ -545,8 +543,7 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + { + int block_index, refcount; + int64_t cluster_index = cluster_offset >> s->cluster_bits; +- int64_t table_index = +- cluster_index >> (s->cluster_bits - REFCOUNT_SHIFT); ++ int64_t table_index = cluster_index >> s->refcount_block_bits; + + /* Load the refcount block and allocate it if needed */ + if (table_index != old_table_index) { +@@ -568,8 +565,7 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + qcow2_cache_entry_mark_dirty(s->refcount_block_cache, refcount_block); + + /* we can update the count and save it */ +- block_index = cluster_index & +- ((1 << (s->cluster_bits - REFCOUNT_SHIFT)) - 1); ++ block_index = cluster_index & (s->refcount_block_size - 1); + + refcount = be16_to_cpu(refcount_block[block_index]); + refcount += addend; +diff --git a/block/qcow2.c b/block/qcow2.c +index 6c3c6bc..4e60077 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1678,7 +1678,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + .l1_size = cpu_to_be32(0), + .refcount_table_offset = cpu_to_be64(cluster_size), + .refcount_table_clusters = cpu_to_be32(1), +- .refcount_order = cpu_to_be32(3 + REFCOUNT_SHIFT), ++ .refcount_order = cpu_to_be32(4), + .header_length = cpu_to_be32(sizeof(*header)), + }; + +diff --git a/block/qcow2.h b/block/qcow2.h +index b65f629..b210a7f 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -59,8 +59,6 @@ + /* The cluster reads as all zeros */ + #define QCOW_OFLAG_ZERO (1LL << 0) + +-#define REFCOUNT_SHIFT 1 /* refcount size is 2 bytes */ +- + #define MIN_CLUSTER_BITS 9 + #define MAX_CLUSTER_BITS 21 + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Employ-metadata-overlap-checks.patch b/SOURCES/kvm-qcow2-Employ-metadata-overlap-checks.patch new file mode 100644 index 0000000..850276d --- /dev/null +++ b/SOURCES/kvm-qcow2-Employ-metadata-overlap-checks.patch @@ -0,0 +1,229 @@ +From b4dbb84eeca1c793c08b39fe26f3772f200eff36 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:01 +0100 +Subject: [PATCH 08/87] qcow2: Employ metadata overlap checks + +RH-Author: Max Reitz +Message-id: <1383604354-12743-11-git-send-email-mreitz@redhat.com> +Patchwork-id: 55310 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 10/43] qcow2: Employ metadata overlap checks +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +The pre-write overlap check function is now called before most of the +qcow2 writes (aborting it on collision or other error). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit cf93980e775b709ec8f33f55846e6dcf1c7a612c) + +Signed-off-by: Max Reitz +--- + block/qcow2-cache.c | 17 +++++++++++++++++ + block/qcow2-cluster.c | 21 +++++++++++++++++++++ + block/qcow2-snapshot.c | 22 ++++++++++++++++++++++ + block/qcow2.c | 26 ++++++++++++++++++++++++++ + 4 files changed, 86 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cache.c | 17 +++++++++++++++++ + block/qcow2-cluster.c | 21 +++++++++++++++++++++ + block/qcow2-snapshot.c | 22 ++++++++++++++++++++++ + block/qcow2.c | 26 ++++++++++++++++++++++++++ + 4 files changed, 86 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c +index 2f3114e..7bcae09 100644 +--- a/block/qcow2-cache.c ++++ b/block/qcow2-cache.c +@@ -115,6 +115,23 @@ static int qcow2_cache_entry_flush(BlockDriverState *bs, Qcow2Cache *c, int i) + } + + if (c == s->refcount_block_cache) { ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_DEFAULT & ~QCOW2_OL_REFCOUNT_BLOCK, ++ c->entries[i].offset, s->cluster_size); ++ } else if (c == s->l2_table_cache) { ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L2, ++ c->entries[i].offset, s->cluster_size); ++ } else { ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ c->entries[i].offset, s->cluster_size); ++ } ++ ++ if (ret < 0) { ++ return ret; ++ } ++ ++ if (c == s->refcount_block_cache) { + BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_UPDATE_PART); + } else if (c == s->l2_table_cache) { + BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE); +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index cca76d4..7c248aa 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -80,6 +80,14 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + goto fail; + } + ++ /* the L1 position has not yet been updated, so these clusters must ++ * indeed be completely free */ ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ new_l1_table_offset, new_l1_size2); ++ if (ret < 0) { ++ goto fail; ++ } ++ + BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_WRITE_TABLE); + for(i = 0; i < s->l1_size; i++) + new_l1_table[i] = cpu_to_be64(new_l1_table[i]); +@@ -149,6 +157,13 @@ static int write_l1_entry(BlockDriverState *bs, int l1_index) + buf[i] = cpu_to_be64(s->l1_table[l1_start_index + i]); + } + ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L1, ++ s->l1_table_offset + 8 * l1_start_index, sizeof(buf)); ++ if (ret < 0) { ++ return ret; ++ } ++ + BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE); + ret = bdrv_pwrite_sync(bs->file, s->l1_table_offset + 8 * l1_start_index, + buf, sizeof(buf)); +@@ -368,6 +383,12 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs, + &s->aes_encrypt_key); + } + ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ cluster_offset + n_start * BDRV_SECTOR_SIZE, n * BDRV_SECTOR_SIZE); ++ if (ret < 0) { ++ goto out; ++ } ++ + BLKDBG_EVENT(bs->file, BLKDBG_COW_WRITE); + ret = bdrv_co_writev(bs->file, (cluster_offset >> 9) + n_start, n, &qiov); + if (ret < 0) { +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index 0caac90..e7e6013 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -189,6 +189,15 @@ static int qcow2_write_snapshots(BlockDriverState *bs) + return ret; + } + ++ /* The snapshot list position has not yet been updated, so these clusters ++ * must indeed be completely free */ ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, offset, ++ s->snapshots_size); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ + /* Write all snapshots to the new list */ + for(i = 0; i < s->nb_snapshots; i++) { + sn = s->snapshots + i; +@@ -363,6 +372,12 @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) + l1_table[i] = cpu_to_be64(s->l1_table[i]); + } + ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ sn->l1_table_offset, s->l1_size * sizeof(uint64_t)); ++ if (ret < 0) { ++ goto fail; ++ } ++ + ret = bdrv_pwrite(bs->file, sn->l1_table_offset, l1_table, + s->l1_size * sizeof(uint64_t)); + if (ret < 0) { +@@ -475,6 +490,13 @@ int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id) + goto fail; + } + ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L1, ++ s->l1_table_offset, cur_l1_bytes); ++ if (ret < 0) { ++ goto fail; ++ } ++ + ret = bdrv_pwrite_sync(bs->file, s->l1_table_offset, sn_l1_table, + cur_l1_bytes); + if (ret < 0) { +diff --git a/block/qcow2.c b/block/qcow2.c +index aa9dd23..90950cb 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -624,6 +624,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags) + qcow2_free_snapshots(bs); + qcow2_refcount_close(bs); + g_free(s->l1_table); ++ /* else pre-write overlap checks in cache_destroy may crash */ ++ s->l1_table = NULL; + if (s->l2_table_cache) { + qcow2_cache_destroy(bs, s->l2_table_cache); + } +@@ -933,6 +935,13 @@ static coroutine_fn int qcow2_co_writev(BlockDriverState *bs, + cur_nr_sectors * 512); + } + ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ cluster_offset + index_in_cluster * BDRV_SECTOR_SIZE, ++ cur_nr_sectors * BDRV_SECTOR_SIZE); ++ if (ret < 0) { ++ goto fail; ++ } ++ + qemu_co_mutex_unlock(&s->lock); + BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO); + trace_qcow2_writev_data(qemu_coroutine_self(), +@@ -999,6 +1008,8 @@ static void qcow2_close(BlockDriverState *bs) + { + BDRVQcowState *s = bs->opaque; + g_free(s->l1_table); ++ /* else pre-write overlap checks in cache_destroy may crash */ ++ s->l1_table = NULL; + + qcow2_cache_flush(bs, s->l2_table_cache); + qcow2_cache_flush(bs, s->refcount_block_cache); +@@ -1676,6 +1687,14 @@ static int qcow2_write_compressed(BlockDriverState *bs, int64_t sector_num, + + if (ret != Z_STREAM_END || out_len >= s->cluster_size) { + /* could not compress: write normal cluster */ ++ ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ sector_num * BDRV_SECTOR_SIZE, ++ s->cluster_sectors * BDRV_SECTOR_SIZE); ++ if (ret < 0) { ++ goto fail; ++ } ++ + ret = bdrv_write(bs, sector_num, buf, s->cluster_sectors); + if (ret < 0) { + goto fail; +@@ -1688,6 +1707,13 @@ static int qcow2_write_compressed(BlockDriverState *bs, int64_t sector_num, + goto fail; + } + cluster_offset &= s->cluster_offset_mask; ++ ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ cluster_offset, out_len); ++ if (ret < 0) { ++ goto fail; ++ } ++ + BLKDBG_EVENT(bs->file, BLKDBG_WRITE_COMPRESSED); + ret = bdrv_pwrite(bs->file, cluster_offset, out_buf, out_len); + if (ret < 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Evaluate-overlap-check-options.patch b/SOURCES/kvm-qcow2-Evaluate-overlap-check-options.patch new file mode 100644 index 0000000..ebe3fac --- /dev/null +++ b/SOURCES/kvm-qcow2-Evaluate-overlap-check-options.patch @@ -0,0 +1,84 @@ +From c5321890678045bf4de3b1845110aeed348203b9 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:34 +0100 +Subject: [PATCH 41/87] qcow2: Evaluate overlap check options + +RH-Author: Max Reitz +Message-id: <1383604354-12743-44-git-send-email-mreitz@redhat.com> +Patchwork-id: 55343 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 43/43] qcow2: Evaluate overlap check options +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Evaluate the runtime overlap check options and set +BDRVQcowState.overlap_check appropriately. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 1fa5cc839aa6068c9182ad8d611f844c58f95f42) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 29 ++++++++++++++++++++++++++++- + 1 files changed, 28 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index b6f300d..01b535d 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -425,6 +425,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + Error *local_err = NULL; + uint64_t ext_end; + uint64_t l1_vm_state_index; ++ const char *opt_overlap_check; ++ int overlap_check_template = 0; + + ret = bdrv_pread(bs->file, 0, &header, sizeof(header)); + if (ret < 0) { +@@ -687,7 +689,32 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->discard_passthrough[QCOW2_DISCARD_OTHER] = + qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_OTHER, false); + +- s->overlap_check = QCOW2_OL_CACHED; ++ opt_overlap_check = qemu_opt_get(opts, "overlap-check") ?: "cached"; ++ if (!strcmp(opt_overlap_check, "none")) { ++ overlap_check_template = 0; ++ } else if (!strcmp(opt_overlap_check, "constant")) { ++ overlap_check_template = QCOW2_OL_CONSTANT; ++ } else if (!strcmp(opt_overlap_check, "cached")) { ++ overlap_check_template = QCOW2_OL_CACHED; ++ } else if (!strcmp(opt_overlap_check, "all")) { ++ overlap_check_template = QCOW2_OL_ALL; ++ } else { ++ error_setg(errp, "Unsupported value '%s' for qcow2 option " ++ "'overlap-check'. Allowed are either of the following: " ++ "none, constant, cached, all", opt_overlap_check); ++ qemu_opts_del(opts); ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ s->overlap_check = 0; ++ for (i = 0; i < QCOW2_OL_MAX_BITNR; i++) { ++ /* overlap-check defines a template bitmask, but every flag may be ++ * overwritten through the associated boolean option */ ++ s->overlap_check |= ++ qemu_opt_get_bool(opts, overlap_bool_option_names[i], ++ overlap_check_template & (1 << i)) << i; ++ } + + qemu_opts_del(opts); + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Fix-L1-allocation-size-in-qcow2_snapshot_load_.patch b/SOURCES/kvm-qcow2-Fix-L1-allocation-size-in-qcow2_snapshot_load_.patch new file mode 100644 index 0000000..1c056d2 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-L1-allocation-size-in-qcow2_snapshot_load_.patch @@ -0,0 +1,101 @@ +From 1235b1580890e2a034bb24f89a89311d296d2622 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:51 +0100 +Subject: [PATCH 44/49] qcow2: Fix L1 allocation size in qcow2_snapshot_load_tmp() (CVE-2014-0145) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-45-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 44/48] qcow2: Fix L1 allocation size in qcow2_snapshot_load_tmp() (CVE-2014-0145) +Bugzilla: 1079325 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079325 +Upstream status: Embargoed + +For the L1 table to loaded for an internal snapshot, the code allocated +only enough memory to hold the currently active L1 table. If the +snapshot's L1 table is actually larger than the current one, this leads +to a buffer overflow. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-snapshot.c | 2 +- + tests/qemu-iotests/029 | 18 +++++++++++++++++- + tests/qemu-iotests/029.out | 4 ++++ + 3 files changed, 22 insertions(+), 2 deletions(-) + +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index 5d73506..b29f7bd 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -635,7 +635,7 @@ int qcow2_snapshot_load_tmp(BlockDriverState *bs, const char *snapshot_name) + sn = &s->snapshots[snapshot_index]; + + /* Allocate and read in the snapshot's L1 table */ +- new_l1_bytes = s->l1_size * sizeof(uint64_t); ++ new_l1_bytes = sn->l1_size * sizeof(uint64_t); + new_l1_table = g_malloc0(align_offset(new_l1_bytes, 512)); + + ret = bdrv_pread(bs->file, sn->l1_table_offset, new_l1_table, new_l1_bytes); +diff --git a/tests/qemu-iotests/029 b/tests/qemu-iotests/029 +index 567e071..fa46ace 100755 +--- a/tests/qemu-iotests/029 ++++ b/tests/qemu-iotests/029 +@@ -30,7 +30,8 @@ status=1 # failure is the default! + + _cleanup() + { +- _cleanup_test_img ++ rm -f $TEST_IMG.snap ++ _cleanup_test_img + } + trap "_cleanup; exit \$status" 0 1 2 3 15 + +@@ -44,6 +45,9 @@ _supported_fmt qcow2 + _supported_proto generic + _supported_os Linux + ++offset_size=24 ++offset_l1_size=36 ++ + echo + echo Test loading internal snapshots where the L1 table of the snapshot + echo is smaller than the current L1 table. +@@ -77,6 +81,18 @@ _make_test_img 64M + _check_test_img + + ++echo ++echo "qcow2_snapshot_load_tmp() should take the L1 size from the snapshot" ++echo ++ ++CLUSTER_SIZE=512 ++_make_test_img 64M ++{ $QEMU_IMG snapshot -c foo $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_size" "\x00\x00\x00\x00\x00\x00\x02\x00" ++poke_file "$TEST_IMG" "$offset_l1_size" "\x00\x00\x00\x01" ++{ $QEMU_IMG convert -s foo $TEST_IMG $TEST_IMG.snap; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/029.out b/tests/qemu-iotests/029.out +index 9029698..ce0e64d 100644 +--- a/tests/qemu-iotests/029.out ++++ b/tests/qemu-iotests/029.out +@@ -20,4 +20,8 @@ wrote 4096/4096 bytes at offset 1099511627776 + read 4096/4096 bytes at offset 1099511627776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + No errors were found on the image. ++ ++qcow2_snapshot_load_tmp() should take the L1 size from the snapshot ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Fix-NULL-dereference-in-qcow2_open-error-path-.patch b/SOURCES/kvm-qcow2-Fix-NULL-dereference-in-qcow2_open-error-path-.patch new file mode 100644 index 0000000..1c46d0e --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-NULL-dereference-in-qcow2_open-error-path-.patch @@ -0,0 +1,91 @@ +From 4ce3cdbea5f0006ec857767f2dc74a02fffd0cb5 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:50 +0100 +Subject: [PATCH 43/49] qcow2: Fix NULL dereference in qcow2_open() error path (CVE-2014-0146) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-44-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 43/48] qcow2: Fix NULL dereference in qcow2_open() error path (CVE-2014-0146) +Bugzilla: 1079333 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079333 +Upstream status: Embargoed + +The qcow2 code assumes that s->snapshots is non-NULL if s->nb_snapshots +!= 0. By having the initialisation of both fields separated in +qcow2_open(), any error occuring in between would cause the error path +to dereference NULL in qcow2_free_snapshots() if the image had any +snapshots. + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 7 ++++--- + tests/qemu-iotests/080 | 7 +++++++ + tests/qemu-iotests/080.out | 4 ++++ + 3 files changed, 15 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index db9f667..33b46b8 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -636,9 +636,6 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- s->snapshots_offset = header.snapshots_offset; +- s->nb_snapshots = header.nb_snapshots; +- + /* read the level 1 table */ + if (header.l1_size > 0x2000000) { + /* 32 MB L1 table is enough for 2 PB images at 64k cluster size +@@ -733,6 +730,10 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + bs->backing_file[len] = '\0'; + } + ++ /* Internal snapshots */ ++ s->snapshots_offset = header.snapshots_offset; ++ s->nb_snapshots = header.nb_snapshots; ++ + ret = qcow2_read_snapshots(bs); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not read snapshots"); +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 56f8903..59e7a44 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -139,6 +139,13 @@ poke_file "$TEST_IMG" "$offset_l1_size" "\x00\x00\x00\x01" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + + echo ++echo "== Invalid L1 table (with internal snapshot in the image) ==" ++_make_test_img 64M ++{ $QEMU_IMG snapshot -c foo $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_l1_size" "\x00\x00\x00\x00" ++_img_info ++ ++echo + echo "== Invalid backing file size ==" + _make_test_img 64M + poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x10\x00" +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 303d6c3..4d84fbf 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -59,6 +59,10 @@ no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow2: Invalid L1 table offset + no file open, try 'help open' + ++== Invalid L1 table (with internal snapshot in the image) == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': L1 table is too small ++ + == Invalid backing file size == + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + qemu-io: can't open device TEST_DIR/t.qcow2: Backing file name too long +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Fix-backing-file-name-length-check.patch b/SOURCES/kvm-qcow2-Fix-backing-file-name-length-check.patch new file mode 100644 index 0000000..9c919a8 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-backing-file-name-length-check.patch @@ -0,0 +1,101 @@ +From 38b7ffbe3a1fa62f4d5177a3a572aa1c9abb1963 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:33 +0100 +Subject: [PATCH 26/49] qcow2: Fix backing file name length check + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-27-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 26/48] qcow2: Fix backing file name length check +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +len could become negative and would pass the check then. Nothing bad +happened because bdrv_pread() happens to return an error for negative +length values, but make variables for sizes unsigned anyway. + +This patch also changes the behaviour to error out on invalid lengths +instead of silently truncating it to 1023. + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 9 ++++++--- + tests/qemu-iotests/080 | 8 ++++++++ + tests/qemu-iotests/080.out | 5 +++++ + 3 files changed, 19 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 8be82f0..a8ad9e1 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -445,7 +445,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + BDRVQcowState *s = bs->opaque; +- int len, i, ret = 0; ++ unsigned int len, i; ++ int ret = 0; + QCowHeader header; + QemuOpts *opts; + Error *local_err = NULL; +@@ -720,8 +721,10 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + /* read the backing file name */ + if (header.backing_file_offset != 0) { + len = header.backing_file_size; +- if (len > 1023) { +- len = 1023; ++ if (len > MIN(1023, s->cluster_size - header.backing_file_offset)) { ++ error_setg(errp, "Backing file name too long"); ++ ret = -EINVAL; ++ goto fail; + } + ret = bdrv_pread(bs->file, header.backing_file_offset, + bs->backing_file, len); +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 7255b6c..f3091a9 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -45,6 +45,7 @@ _supported_os Linux + header_size=104 + + offset_backing_file_offset=8 ++offset_backing_file_size=16 + offset_l1_size=36 + offset_l1_table_offset=40 + offset_refcount_table_offset=48 +@@ -135,6 +136,13 @@ poke_file "$TEST_IMG" "$offset_l1_table_offset" "\x12\x34\x56\x78\x90\xab\xcd\xe + poke_file "$TEST_IMG" "$offset_l1_size" "\x00\x00\x00\x01" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid backing file size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x10\x00" ++poke_file "$TEST_IMG" "$offset_backing_file_size" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 4ec2545..8103211 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -58,4 +58,9 @@ qemu-io: can't open device TEST_DIR/t.qcow2: Invalid L1 table offset + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow2: Invalid L1 table offset + no file open, try 'help open' ++ ++== Invalid backing file size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Backing file name too long ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Fix-copy_sectors-with-VM-state.patch b/SOURCES/kvm-qcow2-Fix-copy_sectors-with-VM-state.patch new file mode 100644 index 0000000..121c5b3 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-copy_sectors-with-VM-state.patch @@ -0,0 +1,130 @@ +From c861019bd5799f76c3e2e42835b10baec1888293 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:49 +0100 +Subject: [PATCH 42/49] qcow2: Fix copy_sectors() with VM state + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-43-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 42/48] qcow2: Fix copy_sectors() with VM state +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +bs->total_sectors is not the highest possible sector number that could +be involved in a copy on write operation: VM state is after the end of +the virtual disk. This resulted in wrong values for the number of +sectors to be copied (n). + +The code that checks for the end of the image isn't required any more +because the code hasn't been calling the block layer's bdrv_read() for a +long time; instead, it directly calls qcow2_readv(), which doesn't error +out on VM state sector numbers. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-cluster.c | 9 --------- + tests/qemu-iotests/029 | 22 ++++++++++++++++++++-- + tests/qemu-iotests/029.out | 13 +++++++++++++ + 3 files changed, 33 insertions(+), 11 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 943e3c6..67f1393 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -349,15 +349,6 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs, + struct iovec iov; + int n, ret; + +- /* +- * If this is the last cluster and it is only partially used, we must only +- * copy until the end of the image, or bdrv_check_request will fail for the +- * bdrv_read/write calls below. +- */ +- if (start_sect + n_end > bs->total_sectors) { +- n_end = bs->total_sectors - start_sect; +- } +- + n = n_end - n_start; + if (n <= 0) { + return 0; +diff --git a/tests/qemu-iotests/029 b/tests/qemu-iotests/029 +index b424726..567e071 100755 +--- a/tests/qemu-iotests/029 ++++ b/tests/qemu-iotests/029 +@@ -1,7 +1,6 @@ + #!/bin/bash + # +-# Test loading internal snapshots where the L1 table of the snapshot +-# is smaller than the current L1 table. ++# qcow2 internal snapshots/VM state tests + # + # Copyright (C) 2011 Red Hat, Inc. + # +@@ -45,6 +44,11 @@ _supported_fmt qcow2 + _supported_proto generic + _supported_os Linux + ++echo ++echo Test loading internal snapshots where the L1 table of the snapshot ++echo is smaller than the current L1 table. ++echo ++ + CLUSTER_SIZE=65536 + _make_test_img 64M + $QEMU_IMG snapshot -c foo "$TEST_IMG" +@@ -59,6 +63,20 @@ $QEMU_IO -c 'write -b 0 4M' "$TEST_IMG" | _filter_qemu_io + $QEMU_IMG snapshot -a foo "$TEST_IMG" + _check_test_img + ++ ++echo ++echo Try using a huge VM state ++echo ++ ++CLUSTER_SIZE=65536 ++_make_test_img 64M ++{ $QEMU_IO -c "write -b -P 0x11 1T 4k" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IMG snapshot -c foo $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IMG snapshot -a foo $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "read -b -P 0x11 1T 4k" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++_check_test_img ++ ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/029.out b/tests/qemu-iotests/029.out +index 0eedb3a..9029698 100644 +--- a/tests/qemu-iotests/029.out ++++ b/tests/qemu-iotests/029.out +@@ -1,4 +1,8 @@ + QA output created by 029 ++ ++Test loading internal snapshots where the L1 table of the snapshot ++is smaller than the current L1 table. ++ + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +@@ -7,4 +11,13 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=16777216 + wrote 4194304/4194304 bytes at offset 0 + 4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + No errors were found on the image. ++ ++Try using a huge VM state ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 4096/4096 bytes at offset 1099511627776 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 4096/4096 bytes at offset 1099511627776 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Fix-header-extension-size-check.patch b/SOURCES/kvm-qcow2-Fix-header-extension-size-check.patch new file mode 100644 index 0000000..3065313 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-header-extension-size-check.patch @@ -0,0 +1,83 @@ +From 197c8b66cc0b7cc239075b4c86b0f118194e198a Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:28 +0200 +Subject: [PATCH 34/42] qcow2: Fix header extension size check + +Message-id: <1434212556-3927-35-git-send-email-mreitz@redhat.com> +Patchwork-id: 66053 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 34/42] qcow2: Fix header extension size check +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +After reading the extension header, offset is incremented, but not +checked against end_offset any more. This way an integer overflow could +happen when checking whether the extension end is within the allowed +range, effectively disabling the check. + +This patch adds the missing check and a test case for it. + +Cc: qemu-stable@nongnu.org +Reported-by: Max Reitz +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Message-id: 1416935562-7760-2-git-send-email-kwolf@redhat.com +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 2ebafc854d109ff09b66fb4dd62c2c53fc29754a) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 2 +- + tests/qemu-iotests/080 | 2 ++ + tests/qemu-iotests/080.out | 2 ++ + 3 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 4e60077..991c41f 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -116,7 +116,7 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + #ifdef DEBUG_EXT + printf("ext.magic = 0x%x\n", ext.magic); + #endif +- if (ext.len > end_offset - offset) { ++ if (offset > end_offset || ext.len > end_offset - offset) { + error_setg(errp, "Header extension too large"); + return -EINVAL; + } +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 6b3a3e7..b9f9630 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -78,6 +78,8 @@ poke_file "$TEST_IMG" "$offset_backing_file_offset" "\xff\xff\xff\xff\xff\xff\xf + poke_file "$TEST_IMG" "$offset_ext_magic" "\x12\x34\x56\x78" + poke_file "$TEST_IMG" "$offset_ext_size" "\x7f\xff\xff\xff" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x00\x$(printf %x $offset_ext_size)" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + poke_file "$TEST_IMG" "$offset_backing_file_offset" "\x00\x00\x00\x00\x00\x00\x00\x00" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 1fa0672..b7db555 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -13,6 +13,8 @@ qemu-io: can't open device TEST_DIR/t.qcow2: Invalid backing file offset + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow2: Header extension too large + no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Header extension too large ++no file open, try 'help open' + + == Huge refcount table size == + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Fix-header-update-with-overridden-backing-file.patch b/SOURCES/kvm-qcow2-Fix-header-update-with-overridden-backing-file.patch new file mode 100644 index 0000000..9c28213 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-header-update-with-overridden-backing-file.patch @@ -0,0 +1,288 @@ +From 8538f7d5ace7b8ddb751d61a17c4a822b2333b39 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:35 +0200 +Subject: [PATCH 41/42] qcow2: Fix header update with overridden backing file + +Message-id: <1434212556-3927-42-git-send-email-mreitz@redhat.com> +Patchwork-id: 66060 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 41/42] qcow2: Fix header update with overridden backing file +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +In recent qemu versions, it is possible to override the backing file +name and format that is stored in the image file with values given at +runtime. In such cases, the temporary override could end up in the +image header if the qcow2 header was updated, while obviously correct +behaviour would be to leave the on-disk backing file path/format +unchanged. + +Fix this and add a test case for it. + +Reported-by: Michael Tokarev +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Message-id: 1428411796-2852-1-git-send-email-kwolf@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e4603fe139e2161464d7e75faa3a650e31f057fc) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + tests/qemu-iotests/130 + tests/qemu-iotests/130.out + +common.qemu does not exist downstream, so the HMP commit case cannot be +tested. _filter_img_info does not exist either, so just omit it and add +the additional cluster_size line to the test output (this test is +qcow2-specific anyway). + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 29 ++++++++++++++----- + block/qcow2.h | 6 ++++ + tests/qemu-iotests/130 | 71 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/130.out | 28 ++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 5 files changed, 128 insertions(+), 7 deletions(-) + create mode 100755 tests/qemu-iotests/130 + create mode 100644 tests/qemu-iotests/130.out + +diff --git a/block/qcow2.c b/block/qcow2.c +index 991c41f..61f7e57 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -139,6 +139,7 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + return 3; + } + bs->backing_format[ext.len] = '\0'; ++ s->image_backing_format = g_strdup(bs->backing_format); + #ifdef DEBUG_EXT + printf("Qcow2: Got format extension %s\n", bs->backing_format); + #endif +@@ -734,6 +735,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + bs->backing_file[len] = '\0'; ++ s->image_backing_file = g_strdup(bs->backing_file); + } + + /* Internal snapshots */ +@@ -1249,6 +1251,9 @@ static void qcow2_close(BlockDriverState *bs) + g_free(s->unknown_header_fields); + cleanup_unknown_header_ext(bs); + ++ g_free(s->image_backing_file); ++ g_free(s->image_backing_format); ++ + g_free(s->cluster_cache); + qemu_vfree(s->cluster_data); + qcow2_refcount_close(bs); +@@ -1399,9 +1404,10 @@ int qcow2_update_header(BlockDriverState *bs) + } + + /* Backing file format header extension */ +- if (*bs->backing_format) { ++ if (s->image_backing_format) { + ret = header_ext_add(buf, QCOW2_EXT_MAGIC_BACKING_FORMAT, +- bs->backing_format, strlen(bs->backing_format), ++ s->image_backing_format, ++ strlen(s->image_backing_format), + buflen); + if (ret < 0) { + goto fail; +@@ -1459,8 +1465,8 @@ int qcow2_update_header(BlockDriverState *bs) + buflen -= ret; + + /* Backing file name */ +- if (*bs->backing_file) { +- size_t backing_file_len = strlen(bs->backing_file); ++ if (s->image_backing_file) { ++ size_t backing_file_len = strlen(s->image_backing_file); + + if (buflen < backing_file_len) { + ret = -ENOSPC; +@@ -1468,7 +1474,7 @@ int qcow2_update_header(BlockDriverState *bs) + } + + /* Using strncpy is ok here, since buf is not NUL-terminated. */ +- strncpy(buf, bs->backing_file, buflen); ++ strncpy(buf, s->image_backing_file, buflen); + + header->backing_file_offset = cpu_to_be64(buf - ((char*) header)); + header->backing_file_size = cpu_to_be32(backing_file_len); +@@ -1489,9 +1495,17 @@ fail: + static int qcow2_change_backing_file(BlockDriverState *bs, + const char *backing_file, const char *backing_fmt) + { ++ BDRVQcowState *s = bs->opaque; ++ + pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: ""); + pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: ""); + ++ g_free(s->image_backing_file); ++ g_free(s->image_backing_format); ++ ++ s->image_backing_file = backing_file ? g_strdup(bs->backing_file) : NULL; ++ s->image_backing_format = backing_fmt ? g_strdup(bs->backing_format) : NULL; ++ + return qcow2_update_header(bs); + } + +@@ -2286,8 +2300,9 @@ static int qcow2_amend_options(BlockDriverState *bs, + } + + if (backing_file || backing_format) { +- ret = qcow2_change_backing_file(bs, backing_file ?: bs->backing_file, +- backing_format ?: bs->backing_format); ++ ret = qcow2_change_backing_file(bs, ++ backing_file ?: s->image_backing_file, ++ backing_format ?: s->image_backing_format); + if (ret < 0) { + return ret; + } +diff --git a/block/qcow2.h b/block/qcow2.h +index b210a7f..dd3e768 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -263,6 +263,12 @@ typedef struct BDRVQcowState { + QLIST_HEAD(, Qcow2UnknownHeaderExtension) unknown_header_ext; + QTAILQ_HEAD (, Qcow2DiscardRegion) discards; + bool cache_discards; ++ ++ /* Backing file path and format as stored in the image (this is not the ++ * effective path/format, which may be the result of a runtime option ++ * override) */ ++ char *image_backing_file; ++ char *image_backing_format; + } BDRVQcowState; + + /* XXX: use std qcow open function ? */ +diff --git a/tests/qemu-iotests/130 b/tests/qemu-iotests/130 +new file mode 100755 +index 0000000..68dbb48 +--- /dev/null ++++ b/tests/qemu-iotests/130 +@@ -0,0 +1,71 @@ ++#!/bin/bash ++# ++# Test that temporary backing file overrides (on the command line or in ++# blockdev-add) don't replace the original path stored in the image during ++# header updates. ++# ++# Copyright (C) 2015 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++ ++TEST_IMG="$TEST_IMG.orig" _make_test_img 64M ++TEST_IMG="$TEST_IMG.base" _make_test_img 64M ++_make_test_img 64M ++_img_info ++ ++echo ++echo "=== Marking image dirty (lazy refcounts) ===" ++echo ++ ++# Test that a backing file isn't written ++_make_test_img 64M ++$QEMU_IO -c "open -o backing.file.filename=$TEST_IMG.base,lazy-refcounts=on $TEST_IMG" -c "write 0 4k" | _filter_qemu_io ++_img_info ++ ++# Make sure that if there was a backing file that was just overridden on the ++# command line, that backing file is retained, with the right format ++_make_test_img -F raw -b "$TEST_IMG.orig" 64M ++$QEMU_IO -c "open -o backing.file.filename=$TEST_IMG.base,backing.driver=$IMGFMT,lazy-refcounts=on $TEST_IMG" -c "write 0 4k" | _filter_qemu_io ++_img_info ++ ++# success, all done ++echo '*** done' ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/130.out b/tests/qemu-iotests/130.out +new file mode 100644 +index 0000000..bd489dd +--- /dev/null ++++ b/tests/qemu-iotests/130.out +@@ -0,0 +1,28 @@ ++QA output created by 130 ++Formatting 'TEST_DIR/t.IMGFMT.orig', fmt=IMGFMT size=67108864 ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 65536 ++ ++=== Marking image dirty (lazy refcounts) === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 4096/4096 bytes at offset 0 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 65536 ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file='TEST_DIR/t.IMGFMT.orig' backing_fmt='raw' ++wrote 4096/4096 bytes at offset 0 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT ++virtual size: 64M (67108864 bytes) ++cluster_size: 65536 ++backing file: TEST_DIR/t.IMGFMT.orig ++backing file format: raw ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index dbb2a36..739c266 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -90,3 +90,4 @@ + 108 rw auto quick + 114 rw auto quick + 121 rw auto ++130 rw auto quick +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Fix-leaks-in-dirty-images.patch b/SOURCES/kvm-qcow2-Fix-leaks-in-dirty-images.patch new file mode 100644 index 0000000..855408d --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-leaks-in-dirty-images.patch @@ -0,0 +1,50 @@ +From b8bdf32509624cb5a040ccc788028761db8d80eb Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:11 +0200 +Subject: [PATCH 17/42] qcow2: Fix leaks in dirty images +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1434212556-3927-18-git-send-email-mreitz@redhat.com> +Patchwork-id: 66036 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 17/42] qcow2: Fix leaks in dirty images +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +When opening dirty images, qcow2's repair function should not only +repair errors but leaks as well. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Benoît Canet +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit 5b84106bd91bc67519738042c8890a09e2967513) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index fae8b26..6c3c6bc 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -764,7 +764,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + (s->incompatible_features & QCOW2_INCOMPAT_DIRTY)) { + BdrvCheckResult result = {0}; + +- ret = qcow2_check(bs, &result, BDRV_FIX_ERRORS); ++ ret = qcow2_check(bs, &result, BDRV_FIX_ERRORS | BDRV_FIX_LEAKS); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not repair dirty image"); + goto fail; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Fix-new-L1-table-size-check-CVE-2014-0143.patch b/SOURCES/kvm-qcow2-Fix-new-L1-table-size-check-CVE-2014-0143.patch new file mode 100644 index 0000000..c9551c5 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-new-L1-table-size-check-CVE-2014-0143.patch @@ -0,0 +1,41 @@ +From b71e1cbac708fc3e6659b2356f365dd223e3ac01 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:39 +0100 +Subject: [PATCH 32/49] qcow2: Fix new L1 table size check (CVE-2014-0143) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-33-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 32/48] qcow2: Fix new L1 table size check (CVE-2014-0143) +Bugzilla: 1079320 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079320 +Upstream status: Embargoed + +The size in bytes is assigned to an int later, so check that instead of +the number of entries. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-cluster.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 87c13ce..943e3c6 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -55,7 +55,7 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + } + } + +- if (new_l1_size > INT_MAX) { ++ if (new_l1_size > INT_MAX / sizeof(uint64_t)) { + return -EFBIG; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Fix-refcount-blocks-beyond-image-end.patch b/SOURCES/kvm-qcow2-Fix-refcount-blocks-beyond-image-end.patch new file mode 100644 index 0000000..8e03aec --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-refcount-blocks-beyond-image-end.patch @@ -0,0 +1,117 @@ +From 707d22d6fe9d2f43d0372472b62d40ddb652385d Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:20 +0200 +Subject: [PATCH 26/42] qcow2: Fix refcount blocks beyond image end + +Message-id: <1434212556-3927-27-git-send-email-mreitz@redhat.com> +Patchwork-id: 66045 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 26/42] qcow2: Fix refcount blocks beyond image end +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +If the qcow2 check function detects a refcount block located beyond the +image end, grow the image appropriately. This cannot break anything and +is the logical fix for such a case. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 001c158defb65e88e6c50c85d6f20501f7149ddd) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 63 insertions(+), 4 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 8f1215c..8ce0447 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1545,7 +1545,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + int64_t *nb_clusters) + { + BDRVQcowState *s = bs->opaque; +- int64_t i; ++ int64_t i, size; + int ret; + + for(i = 0; i < s->refcount_table_size; i++) { +@@ -1562,9 +1562,68 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + } + + if (cluster >= *nb_clusters) { +- fprintf(stderr, "ERROR refcount block %" PRId64 +- " is outside image\n", i); +- res->corruptions++; ++ fprintf(stderr, "%s refcount block %" PRId64 " is outside image\n", ++ fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i); ++ ++ if (fix & BDRV_FIX_ERRORS) { ++ int64_t old_nb_clusters = *nb_clusters; ++ uint16_t *new_refcount_table; ++ ++ if (offset > INT64_MAX - s->cluster_size) { ++ ret = -EINVAL; ++ goto resize_fail; ++ } ++ ++ ret = bdrv_truncate(bs->file, offset + s->cluster_size); ++ if (ret < 0) { ++ goto resize_fail; ++ } ++ size = bdrv_getlength(bs->file); ++ if (size < 0) { ++ ret = size; ++ goto resize_fail; ++ } ++ ++ *nb_clusters = size_to_clusters(s, size); ++ assert(*nb_clusters >= old_nb_clusters); ++ ++ new_refcount_table = g_try_realloc(*refcount_table, ++ *nb_clusters * ++ sizeof(**refcount_table)); ++ if (!new_refcount_table) { ++ *nb_clusters = old_nb_clusters; ++ res->check_errors++; ++ return -ENOMEM; ++ } ++ *refcount_table = new_refcount_table; ++ ++ memset(*refcount_table + old_nb_clusters, 0, ++ (*nb_clusters - old_nb_clusters) * ++ sizeof(**refcount_table)); ++ ++ if (cluster >= *nb_clusters) { ++ ret = -EINVAL; ++ goto resize_fail; ++ } ++ ++ res->corruptions_fixed++; ++ ret = inc_refcounts(bs, res, refcount_table, nb_clusters, ++ offset, s->cluster_size); ++ if (ret < 0) { ++ return ret; ++ } ++ /* No need to check whether the refcount is now greater than 1: ++ * This area was just allocated and zeroed, so it can only be ++ * exactly 1 after inc_refcounts() */ ++ continue; ++ ++resize_fail: ++ res->corruptions++; ++ fprintf(stderr, "ERROR could not resize image: %s\n", ++ strerror(-ret)); ++ } else { ++ res->corruptions++; ++ } + continue; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Fix-types-in-qcow2_alloc_clusters-and-alloc_cl.patch b/SOURCES/kvm-qcow2-Fix-types-in-qcow2_alloc_clusters-and-alloc_cl.patch new file mode 100644 index 0000000..5d9d8b8 --- /dev/null +++ b/SOURCES/kvm-qcow2-Fix-types-in-qcow2_alloc_clusters-and-alloc_cl.patch @@ -0,0 +1,94 @@ +From e1547d9eea752dde38bee613afb5cfb7bb26f0f8 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:37 +0100 +Subject: [PATCH 30/49] qcow2: Fix types in qcow2_alloc_clusters and alloc_clusters_noref + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-31-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 30/48] qcow2: Fix types in qcow2_alloc_clusters and alloc_clusters_noref +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +In order to avoid integer overflows. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 11 ++++++----- + block/qcow2.h | 6 +++--- + 2 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 7b00dda..fb57c10 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -28,7 +28,7 @@ + #include "qemu/range.h" + #include "qapi/qmp/types.h" + +-static int64_t alloc_clusters_noref(BlockDriverState *bs, int64_t size); ++static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size); + static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + int64_t offset, int64_t length, + int addend, enum qcow2_discard_type type); +@@ -634,15 +634,16 @@ int qcow2_update_cluster_refcount(BlockDriverState *bs, + + + /* return < 0 if error */ +-static int64_t alloc_clusters_noref(BlockDriverState *bs, int64_t size) ++static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size) + { + BDRVQcowState *s = bs->opaque; +- int i, nb_clusters, refcount; ++ uint64_t i, nb_clusters; ++ int refcount; + + nb_clusters = size_to_clusters(s, size); + retry: + for(i = 0; i < nb_clusters; i++) { +- int64_t next_cluster_index = s->free_cluster_index++; ++ uint64_t next_cluster_index = s->free_cluster_index++; + refcount = get_refcount(bs, next_cluster_index); + + if (refcount < 0) { +@@ -659,7 +660,7 @@ retry: + return (s->free_cluster_index - nb_clusters) << s->cluster_bits; + } + +-int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size) ++int64_t qcow2_alloc_clusters(BlockDriverState *bs, uint64_t size) + { + int64_t offset; + int ret; +diff --git a/block/qcow2.h b/block/qcow2.h +index 0173d95..9f9f5ae 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -222,8 +222,8 @@ typedef struct BDRVQcowState { + uint64_t *refcount_table; + uint64_t refcount_table_offset; + uint32_t refcount_table_size; +- int64_t free_cluster_index; +- int64_t free_byte_offset; ++ uint64_t free_cluster_index; ++ uint64_t free_byte_offset; + + CoMutex lock; + +@@ -462,7 +462,7 @@ void qcow2_refcount_close(BlockDriverState *bs); + int qcow2_update_cluster_refcount(BlockDriverState *bs, int64_t cluster_index, + int addend, enum qcow2_discard_type type); + +-int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size); ++int64_t qcow2_alloc_clusters(BlockDriverState *bs, uint64_t size); + int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + int nb_clusters); + int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Flush-pending-discards-before-allocating-clust.patch b/SOURCES/kvm-qcow2-Flush-pending-discards-before-allocating-clust.patch new file mode 100644 index 0000000..135e93e --- /dev/null +++ b/SOURCES/kvm-qcow2-Flush-pending-discards-before-allocating-clust.patch @@ -0,0 +1,61 @@ +From 1ae5408c46e940c7a993ba59c7e31163d78dd81a Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:36 +0200 +Subject: [PATCH 42/42] qcow2: Flush pending discards before allocating cluster + +Message-id: <1434212556-3927-43-git-send-email-mreitz@redhat.com> +Patchwork-id: 66061 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 42/42] qcow2: Flush pending discards before allocating cluster +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +Before a freed cluster can be reused, pending discards for this cluster +must be processed. + +The original assumption was that this was not a problem because discards +are only cached during discard/write zeroes operations, which are +synchronous so that no concurrent write requests can cause cluster +allocations. + +However, the discard/write zeroes operation itself can allocate a new L2 +table (and it has to in order to put zero flags there), so make sure we +can cope with the situation. + +This fixes https://bugs.launchpad.net/bugs/1349972. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit ecbda7a22576591a84f44de1be0150faf6001f1c) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index cee5b1f..848fd31 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -663,6 +663,11 @@ static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size) + uint64_t i, nb_clusters; + int refcount; + ++ /* We can't allocate clusters if they may still be queued for discard. */ ++ if (s->cache_discards) { ++ qcow2_process_discards(bs, 0); ++ } ++ + nb_clusters = size_to_clusters(s, size); + retry: + for(i = 0; i < nb_clusters; i++) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Free-only-newly-allocated-clusters-on-error.patch b/SOURCES/kvm-qcow2-Free-only-newly-allocated-clusters-on-error.patch new file mode 100644 index 0000000..0a80d1f --- /dev/null +++ b/SOURCES/kvm-qcow2-Free-only-newly-allocated-clusters-on-error.patch @@ -0,0 +1,84 @@ +From f39d8d56b3cf31f293465bd912ae623ada8152c0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:15 +0100 +Subject: [PATCH 10/14] qcow2: Free only newly allocated clusters on error + +RH-Author: Max Reitz +Message-id: <1389131839-12920-11-git-send-email-mreitz@redhat.com> +Patchwork-id: 56546 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 10/14] qcow2: Free only newly allocated clusters on error +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +In expand_zero_clusters_in_l1, a new cluster is only allocated if it was +not already preallocated. On error, such preallocated clusters should +not be freed, but only the newly allocated ones. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 320c70666687db4dd4df8165f9fe6960de782ca9) + +Signed-off-by: Max Reitz +--- + block/qcow2-cluster.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 16 ++++++++++------ + 1 files changed, 10 insertions(+), 6 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index bfdc83a..79c3ae0 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1552,6 +1552,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + uint64_t l2_entry = be64_to_cpu(l2_table[j]); + int64_t offset = l2_entry & L2E_OFFSET_MASK, cluster_index; + int cluster_type = qcow2_get_cluster_type(l2_entry); ++ bool preallocated = offset != 0; + + if (cluster_type == QCOW2_CLUSTER_NORMAL) { + cluster_index = offset >> s->cluster_bits; +@@ -1577,8 +1578,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + continue; + } + +- if (!offset) { +- /* not preallocated */ ++ if (!preallocated) { + if (!bs->backing_hd) { + /* not backed; therefore we can simply deallocate the + * cluster */ +@@ -1596,16 +1596,20 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, + + ret = qcow2_pre_write_overlap_check(bs, 0, offset, s->cluster_size); + if (ret < 0) { +- qcow2_free_clusters(bs, offset, s->cluster_size, +- QCOW2_DISCARD_ALWAYS); ++ if (!preallocated) { ++ qcow2_free_clusters(bs, offset, s->cluster_size, ++ QCOW2_DISCARD_ALWAYS); ++ } + goto fail; + } + + ret = bdrv_write_zeroes(bs->file, offset / BDRV_SECTOR_SIZE, + s->cluster_sectors, 0); + if (ret < 0) { +- qcow2_free_clusters(bs, offset, s->cluster_size, +- QCOW2_DISCARD_ALWAYS); ++ if (!preallocated) { ++ qcow2_free_clusters(bs, offset, s->cluster_size, ++ QCOW2_DISCARD_ALWAYS); ++ } + goto fail; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Free-preallocated-zero-clusters.patch b/SOURCES/kvm-qcow2-Free-preallocated-zero-clusters.patch new file mode 100644 index 0000000..d370b69 --- /dev/null +++ b/SOURCES/kvm-qcow2-Free-preallocated-zero-clusters.patch @@ -0,0 +1,57 @@ +From 2d939b5a9f5717aba21727f635c6da898123ad5b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 2 May 2014 16:06:20 +0200 +Subject: [PATCH 02/31] qcow2: Free preallocated zero clusters + +RH-Author: Max Reitz +Message-id: <1399046781-16359-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 58644 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] qcow2: Free preallocated zero clusters +Bugzilla: 1052093 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Jeffrey Cody + +BZ: 1052093 + +In qcow2_free_any_clusters, preallocated zero clusters should be freed +just as normal clusters are. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 8f730dd24edd2576ecbd596de7ea4361296b129c) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 73ae4e3..429b01c 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -811,11 +811,13 @@ void qcow2_free_any_clusters(BlockDriverState *bs, uint64_t l2_entry, + } + break; + case QCOW2_CLUSTER_NORMAL: +- qcow2_free_clusters(bs, l2_entry & L2E_OFFSET_MASK, +- nb_clusters << s->cluster_bits, type); ++ case QCOW2_CLUSTER_ZERO: ++ if (l2_entry & L2E_OFFSET_MASK) { ++ qcow2_free_clusters(bs, l2_entry & L2E_OFFSET_MASK, ++ nb_clusters << s->cluster_bits, type); ++ } + break; + case QCOW2_CLUSTER_UNALLOCATED: +- case QCOW2_CLUSTER_ZERO: + break; + default: + abort(); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Implement-bdrv_amend_options.patch b/SOURCES/kvm-qcow2-Implement-bdrv_amend_options.patch new file mode 100644 index 0000000..9ae0003 --- /dev/null +++ b/SOURCES/kvm-qcow2-Implement-bdrv_amend_options.patch @@ -0,0 +1,252 @@ +From 53db4963174d9f65bd8ba04636ba0adba7615996 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:13 +0100 +Subject: [PATCH 08/14] qcow2: Implement bdrv_amend_options + +RH-Author: Max Reitz +Message-id: <1389131839-12920-9-git-send-email-mreitz@redhat.com> +Patchwork-id: 56544 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 08/14] qcow2: Implement bdrv_amend_options +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Implement bdrv_amend_options for compat, size, backing_file, backing_fmt +and lazy_refcounts. + +Downgrading images from compat=1.1 to compat=0.10 is achieved through +handling all incompatible flags accordingly, clearing all compatible and +autoclear flags and expanding all zero clusters. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 9296b3ed7050cc6e0645fbc3b0aea74406d7eeb2) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 194 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 194 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 0a53a3c..5b28259 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1989,6 +1989,199 @@ static int qcow2_load_vmstate(BlockDriverState *bs, uint8_t *buf, + return ret; + } + ++/* ++ * Downgrades an image's version. To achieve this, any incompatible features ++ * have to be removed. ++ */ ++static int qcow2_downgrade(BlockDriverState *bs, int target_version) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int current_version = s->qcow_version; ++ int ret; ++ ++ if (target_version == current_version) { ++ return 0; ++ } else if (target_version > current_version) { ++ return -EINVAL; ++ } else if (target_version != 2) { ++ return -EINVAL; ++ } ++ ++ if (s->refcount_order != 4) { ++ /* we would have to convert the image to a refcount_order == 4 image ++ * here; however, since qemu (at the time of writing this) does not ++ * support anything different than 4 anyway, there is no point in doing ++ * so right now; however, we should error out (if qemu supports this in ++ * the future and this code has not been adapted) */ ++ error_report("qcow2_downgrade: Image refcount orders other than 4 are" ++ "currently not supported."); ++ return -ENOTSUP; ++ } ++ ++ /* clear incompatible features */ ++ if (s->incompatible_features & QCOW2_INCOMPAT_DIRTY) { ++ ret = qcow2_mark_clean(bs); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ ++ /* with QCOW2_INCOMPAT_CORRUPT, it is pretty much impossible to get here in ++ * the first place; if that happens nonetheless, returning -ENOTSUP is the ++ * best thing to do anyway */ ++ ++ if (s->incompatible_features) { ++ return -ENOTSUP; ++ } ++ ++ /* since we can ignore compatible features, we can set them to 0 as well */ ++ s->compatible_features = 0; ++ /* if lazy refcounts have been used, they have already been fixed through ++ * clearing the dirty flag */ ++ ++ /* clearing autoclear features is trivial */ ++ s->autoclear_features = 0; ++ ++ ret = qcow2_expand_zero_clusters(bs); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ s->qcow_version = target_version; ++ ret = qcow2_update_header(bs); ++ if (ret < 0) { ++ s->qcow_version = current_version; ++ return ret; ++ } ++ return 0; ++} ++ ++static int qcow2_amend_options(BlockDriverState *bs, ++ QEMUOptionParameter *options) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int old_version = s->qcow_version, new_version = old_version; ++ uint64_t new_size = 0; ++ const char *backing_file = NULL, *backing_format = NULL; ++ bool lazy_refcounts = s->use_lazy_refcounts; ++ int ret; ++ int i; ++ ++ for (i = 0; options[i].name; i++) ++ { ++ if (!options[i].assigned) { ++ /* only change explicitly defined options */ ++ continue; ++ } ++ ++ if (!strcmp(options[i].name, "compat")) { ++ if (!options[i].value.s) { ++ /* preserve default */ ++ } else if (!strcmp(options[i].value.s, "0.10")) { ++ new_version = 2; ++ } else if (!strcmp(options[i].value.s, "1.1")) { ++ new_version = 3; ++ } else { ++ fprintf(stderr, "Unknown compatibility level %s.\n", ++ options[i].value.s); ++ return -EINVAL; ++ } ++ } else if (!strcmp(options[i].name, "preallocation")) { ++ fprintf(stderr, "Cannot change preallocation mode.\n"); ++ return -ENOTSUP; ++ } else if (!strcmp(options[i].name, "size")) { ++ new_size = options[i].value.n; ++ } else if (!strcmp(options[i].name, "backing_file")) { ++ backing_file = options[i].value.s; ++ } else if (!strcmp(options[i].name, "backing_fmt")) { ++ backing_format = options[i].value.s; ++ } else if (!strcmp(options[i].name, "encryption")) { ++ if ((options[i].value.n != !!s->crypt_method)) { ++ fprintf(stderr, "Changing the encryption flag is not " ++ "supported.\n"); ++ return -ENOTSUP; ++ } ++ } else if (!strcmp(options[i].name, "cluster_size")) { ++ if (options[i].value.n != s->cluster_size) { ++ fprintf(stderr, "Changing the cluster size is not " ++ "supported.\n"); ++ return -ENOTSUP; ++ } ++ } else if (!strcmp(options[i].name, "lazy_refcounts")) { ++ lazy_refcounts = options[i].value.n; ++ } else { ++ /* if this assertion fails, this probably means a new option was ++ * added without having it covered here */ ++ assert(false); ++ } ++ } ++ ++ if (new_version != old_version) { ++ if (new_version > old_version) { ++ /* Upgrade */ ++ s->qcow_version = new_version; ++ ret = qcow2_update_header(bs); ++ if (ret < 0) { ++ s->qcow_version = old_version; ++ return ret; ++ } ++ } else { ++ ret = qcow2_downgrade(bs, new_version); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ } ++ ++ if (backing_file || backing_format) { ++ ret = qcow2_change_backing_file(bs, backing_file ?: bs->backing_file, ++ backing_format ?: bs->backing_format); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ ++ if (s->use_lazy_refcounts != lazy_refcounts) { ++ if (lazy_refcounts) { ++ if (s->qcow_version < 3) { ++ fprintf(stderr, "Lazy refcounts only supported with compatibility " ++ "level 1.1 and above (use compat=1.1 or greater)\n"); ++ return -EINVAL; ++ } ++ s->compatible_features |= QCOW2_COMPAT_LAZY_REFCOUNTS; ++ ret = qcow2_update_header(bs); ++ if (ret < 0) { ++ s->compatible_features &= ~QCOW2_COMPAT_LAZY_REFCOUNTS; ++ return ret; ++ } ++ s->use_lazy_refcounts = true; ++ } else { ++ /* make image clean first */ ++ ret = qcow2_mark_clean(bs); ++ if (ret < 0) { ++ return ret; ++ } ++ /* now disallow lazy refcounts */ ++ s->compatible_features &= ~QCOW2_COMPAT_LAZY_REFCOUNTS; ++ ret = qcow2_update_header(bs); ++ if (ret < 0) { ++ s->compatible_features |= QCOW2_COMPAT_LAZY_REFCOUNTS; ++ return ret; ++ } ++ s->use_lazy_refcounts = false; ++ } ++ } ++ ++ if (new_size) { ++ ret = bdrv_truncate(bs, new_size); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ ++ return 0; ++} ++ + static QEMUOptionParameter qcow2_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -2073,6 +2266,7 @@ static BlockDriver bdrv_qcow2 = { + + .create_options = qcow2_create_options, + .bdrv_check = qcow2_check, ++ .bdrv_amend_options = qcow2_amend_options, + }; + + static void bdrv_qcow2_init(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Keep-option-in-qcow2_invalidate_cache.patch b/SOURCES/kvm-qcow2-Keep-option-in-qcow2_invalidate_cache.patch new file mode 100644 index 0000000..45979b5 --- /dev/null +++ b/SOURCES/kvm-qcow2-Keep-option-in-qcow2_invalidate_cache.patch @@ -0,0 +1,56 @@ +From ac25e461b9f69a91349aa00531e42dea604b92a7 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 17 Mar 2014 13:29:27 +0100 +Subject: [PATCH 3/6] qcow2: Keep option in qcow2_invalidate_cache() + +RH-Author: Kevin Wolf +Message-id: <1395062967-16867-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 58112 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] qcow2: Keep option in qcow2_invalidate_cache() +Bugzilla: 1048575 +RH-Acked-by: Max Reitz +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +Instead of manually building a list of all options from BDRVQcowState +values just reuse the options that were used to open the image. +qcow2_open() won't fully use all of the options in the QDict, but that's +okay. + +This fixes all of the driver-specific options in qcow2, except for +lazy-refcounts, which was special cased before. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d475e5acd2f4679d6ce458369ee658dbd60227e9) +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index e9bd9c9..18e136e 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1178,11 +1178,8 @@ static void qcow2_invalidate_cache(BlockDriverState *bs) + + bdrv_invalidate_cache(bs->file); + +- options = qdict_new(); +- qdict_put(options, QCOW2_OPT_LAZY_REFCOUNTS, +- qbool_from_int(s->use_lazy_refcounts)); +- + memset(s, 0, sizeof(BDRVQcowState)); ++ options = qdict_clone_shallow(bs->options); + qcow2_open(bs, options, flags, NULL); + + QDECREF(options); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Let-inc_refcounts-resize-the-reftable.patch b/SOURCES/kvm-qcow2-Let-inc_refcounts-resize-the-reftable.patch new file mode 100644 index 0000000..63852f9 --- /dev/null +++ b/SOURCES/kvm-qcow2-Let-inc_refcounts-resize-the-reftable.patch @@ -0,0 +1,168 @@ +From f9a81072210afed390c21465ba973fc557105b79 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:18 +0200 +Subject: [PATCH 24/42] qcow2: Let inc_refcounts() resize the reftable + +Message-id: <1434212556-3927-25-git-send-email-mreitz@redhat.com> +Patchwork-id: 66043 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 24/42] qcow2: Let inc_refcounts() resize the reftable +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Now that the refcount table can be passed around by reference, do that +for inc_refcounts() (and subsequently check_refcounts_l1() and +check_refcounts_l2()) and use it for resizing it when a cluster after +the image end is encountered. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 641bb63cd6b003ab0ca2e312a014449037d71647) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 57 +++++++++++++++++++++++++++++++------------------- + 1 file changed, 35 insertions(+), 22 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 4655fa2..7d03e65 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1055,8 +1055,8 @@ fail: + */ + static int inc_refcounts(BlockDriverState *bs, + BdrvCheckResult *res, +- uint16_t *refcount_table, +- int64_t refcount_table_size, ++ uint16_t **refcount_table, ++ int64_t *refcount_table_size, + int64_t offset, int64_t size) + { + BDRVQcowState *s = bs->opaque; +@@ -1071,17 +1071,30 @@ static int inc_refcounts(BlockDriverState *bs, + for(cluster_offset = start; cluster_offset <= last; + cluster_offset += s->cluster_size) { + k = cluster_offset >> s->cluster_bits; +- if (k >= refcount_table_size) { +- fprintf(stderr, "Warning: cluster offset=0x%" PRIx64 " is after " +- "the end of the image file, can't properly check refcounts.\n", +- cluster_offset); +- res->check_errors++; +- } else { +- if (++refcount_table[k] == 0) { +- fprintf(stderr, "ERROR: overflow cluster offset=0x%" PRIx64 +- "\n", cluster_offset); +- res->corruptions++; ++ if (k >= *refcount_table_size) { ++ int64_t old_refcount_table_size = *refcount_table_size; ++ uint16_t *new_refcount_table; ++ ++ *refcount_table_size = k + 1; ++ new_refcount_table = g_try_realloc(*refcount_table, ++ *refcount_table_size * ++ sizeof(**refcount_table)); ++ if (!new_refcount_table) { ++ *refcount_table_size = old_refcount_table_size; ++ res->check_errors++; ++ return -ENOMEM; + } ++ *refcount_table = new_refcount_table; ++ ++ memset(*refcount_table + old_refcount_table_size, 0, ++ (*refcount_table_size - old_refcount_table_size) * ++ sizeof(**refcount_table)); ++ } ++ ++ if (++(*refcount_table)[k] == 0) { ++ fprintf(stderr, "ERROR: overflow cluster offset=0x%" PRIx64 ++ "\n", cluster_offset); ++ res->corruptions++; + } + } + +@@ -1102,7 +1115,7 @@ enum { + * error occurred. + */ + static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, +- uint16_t *refcount_table, int64_t refcount_table_size, int64_t l2_offset, ++ uint16_t **refcount_table, int64_t *refcount_table_size, int64_t l2_offset, + int flags) + { + BDRVQcowState *s = bs->opaque; +@@ -1220,8 +1233,8 @@ fail: + */ + static int check_refcounts_l1(BlockDriverState *bs, + BdrvCheckResult *res, +- uint16_t *refcount_table, +- int64_t refcount_table_size, ++ uint16_t **refcount_table, ++ int64_t *refcount_table_size, + int64_t l1_table_offset, int l1_size, + int flags) + { +@@ -1556,7 +1569,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + } + + if (offset != 0) { +- ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ ret = inc_refcounts(bs, res, refcount_table, nb_clusters, + offset, s->cluster_size); + if (ret < 0) { + return ret; +@@ -1589,7 +1602,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + sizeof(**refcount_table)); + } + (*refcount_table)[cluster]--; +- ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ ret = inc_refcounts(bs, res, refcount_table, nb_clusters, + new_offset, s->cluster_size); + if (ret < 0) { + return ret; +@@ -1625,14 +1638,14 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* header */ +- ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ ret = inc_refcounts(bs, res, refcount_table, nb_clusters, + 0, s->cluster_size); + if (ret < 0) { + return ret; + } + + /* current L1 table */ +- ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, ++ ret = check_refcounts_l1(bs, res, refcount_table, nb_clusters, + s->l1_table_offset, s->l1_size, CHECK_FRAG_INFO); + if (ret < 0) { + return ret; +@@ -1641,20 +1654,20 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + /* snapshots */ + for (i = 0; i < s->nb_snapshots; i++) { + sn = s->snapshots + i; +- ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, ++ ret = check_refcounts_l1(bs, res, refcount_table, nb_clusters, + sn->l1_table_offset, sn->l1_size, 0); + if (ret < 0) { + return ret; + } + } +- ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ ret = inc_refcounts(bs, res, refcount_table, nb_clusters, + s->snapshots_offset, s->snapshots_size); + if (ret < 0) { + return ret; + } + + /* refcount data */ +- ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ ret = inc_refcounts(bs, res, refcount_table, nb_clusters, + s->refcount_table_offset, + s->refcount_table_size * sizeof(uint64_t)); + if (ret < 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Let-inc_refcounts-return-errno.patch b/SOURCES/kvm-qcow2-Let-inc_refcounts-return-errno.patch new file mode 100644 index 0000000..fe0a158 --- /dev/null +++ b/SOURCES/kvm-qcow2-Let-inc_refcounts-return-errno.patch @@ -0,0 +1,222 @@ +From 65ad32342584a286190e2ce56b8a3688f38f6535 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:17 +0200 +Subject: [PATCH 23/42] qcow2: Let inc_refcounts() return -errno + +Message-id: <1434212556-3927-24-git-send-email-mreitz@redhat.com> +Patchwork-id: 66042 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 23/42] qcow2: Let inc_refcounts() return -errno +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +As of a future patch, inc_refcounts() will have to throw errors which +are generally signaled by returning -errno. Therefore, let it return an +integer which is either 0 for success or -errno and handle the -errno +case in all callers. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit fef4d3d5644f984e9fa427dea4f7cfa15de9059c) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 91 +++++++++++++++++++++++++++++++++----------------- + 1 file changed, 60 insertions(+), 31 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 0dac4c9..4655fa2 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1053,17 +1053,18 @@ fail: + * + * Modifies the number of errors in res. + */ +-static void inc_refcounts(BlockDriverState *bs, +- BdrvCheckResult *res, +- uint16_t *refcount_table, +- int64_t refcount_table_size, +- int64_t offset, int64_t size) ++static int inc_refcounts(BlockDriverState *bs, ++ BdrvCheckResult *res, ++ uint16_t *refcount_table, ++ int64_t refcount_table_size, ++ int64_t offset, int64_t size) + { + BDRVQcowState *s = bs->opaque; + uint64_t start, last, cluster_offset, k; + +- if (size <= 0) +- return; ++ if (size <= 0) { ++ return 0; ++ } + + start = offset & ~(s->cluster_size - 1); + last = (offset + size - 1) & ~(s->cluster_size - 1); +@@ -1083,6 +1084,8 @@ static void inc_refcounts(BlockDriverState *bs, + } + } + } ++ ++ return 0; + } + + /* Flags for check_refcounts_l1() and check_refcounts_l2() */ +@@ -1137,8 +1140,11 @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, + nb_csectors = ((l2_entry >> s->csize_shift) & + s->csize_mask) + 1; + l2_entry &= s->cluster_offset_mask; +- inc_refcounts(bs, res, refcount_table, refcount_table_size, +- l2_entry & ~511, nb_csectors * 512); ++ ret = inc_refcounts(bs, res, refcount_table, refcount_table_size, ++ l2_entry & ~511, nb_csectors * 512); ++ if (ret < 0) { ++ goto fail; ++ } + + if (flags & CHECK_FRAG_INFO) { + res->bfi.allocated_clusters++; +@@ -1173,8 +1179,11 @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* Mark cluster as used */ +- inc_refcounts(bs, res, refcount_table,refcount_table_size, +- offset, s->cluster_size); ++ ret = inc_refcounts(bs, res, refcount_table, refcount_table_size, ++ offset, s->cluster_size); ++ if (ret < 0) { ++ goto fail; ++ } + + /* Correct offsets are cluster aligned */ + if (offset & (s->cluster_size - 1)) { +@@ -1217,19 +1226,20 @@ static int check_refcounts_l1(BlockDriverState *bs, + int flags) + { + BDRVQcowState *s = bs->opaque; +- uint64_t *l1_table, l2_offset, l1_size2; ++ uint64_t *l1_table = NULL, l2_offset, l1_size2; + int i, ret; + + l1_size2 = l1_size * sizeof(uint64_t); + + /* Mark L1 table as used */ +- inc_refcounts(bs, res, refcount_table, refcount_table_size, +- l1_table_offset, l1_size2); ++ ret = inc_refcounts(bs, res, refcount_table, refcount_table_size, ++ l1_table_offset, l1_size2); ++ if (ret < 0) { ++ goto fail; ++ } + + /* Read L1 table entries from disk */ +- if (l1_size2 == 0) { +- l1_table = NULL; +- } else { ++ if (l1_size2 > 0) { + l1_table = g_try_malloc(l1_size2); + if (l1_table == NULL) { + ret = -ENOMEM; +@@ -1252,8 +1262,11 @@ static int check_refcounts_l1(BlockDriverState *bs, + if (l2_offset) { + /* Mark L2 table as used */ + l2_offset &= L1E_OFFSET_MASK; +- inc_refcounts(bs, res, refcount_table, refcount_table_size, +- l2_offset, s->cluster_size); ++ ret = inc_refcounts(bs, res, refcount_table, refcount_table_size, ++ l2_offset, s->cluster_size); ++ if (ret < 0) { ++ goto fail; ++ } + + /* L2 tables are cluster aligned */ + if (l2_offset & (s->cluster_size - 1)) { +@@ -1520,6 +1533,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + { + BDRVQcowState *s = bs->opaque; + int64_t i; ++ int ret; + + for(i = 0; i < s->refcount_table_size; i++) { + uint64_t offset, cluster; +@@ -1542,8 +1556,11 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + } + + if (offset != 0) { +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- offset, s->cluster_size); ++ ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ offset, s->cluster_size); ++ if (ret < 0) { ++ return ret; ++ } + if ((*refcount_table)[cluster] != 1) { + fprintf(stderr, "%s refcount block %" PRId64 + " refcount=%d\n", +@@ -1572,8 +1589,11 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + sizeof(**refcount_table)); + } + (*refcount_table)[cluster]--; +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- new_offset, s->cluster_size); ++ ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ new_offset, s->cluster_size); ++ if (ret < 0) { ++ return ret; ++ } + + res->corruptions_fixed++; + } else { +@@ -1605,8 +1625,11 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* header */ +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- 0, s->cluster_size); ++ ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ 0, s->cluster_size); ++ if (ret < 0) { ++ return ret; ++ } + + /* current L1 table */ + ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, +@@ -1619,18 +1642,24 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + for (i = 0; i < s->nb_snapshots; i++) { + sn = s->snapshots + i; + ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, +- sn->l1_table_offset, sn->l1_size, 0); ++ sn->l1_table_offset, sn->l1_size, 0); + if (ret < 0) { + return ret; + } + } +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- s->snapshots_offset, s->snapshots_size); ++ ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ s->snapshots_offset, s->snapshots_size); ++ if (ret < 0) { ++ return ret; ++ } + + /* refcount data */ +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- s->refcount_table_offset, +- s->refcount_table_size * sizeof(uint64_t)); ++ ret = inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ s->refcount_table_offset, ++ s->refcount_table_size * sizeof(uint64_t)); ++ if (ret < 0) { ++ return ret; ++ } + + return check_refblocks(bs, res, fix, refcount_table, nb_clusters); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Limit-snapshot-table-size.patch b/SOURCES/kvm-qcow2-Limit-snapshot-table-size.patch new file mode 100644 index 0000000..060ae59 --- /dev/null +++ b/SOURCES/kvm-qcow2-Limit-snapshot-table-size.patch @@ -0,0 +1,85 @@ +From 427c0839e73f5bb1b3b0fa33afd4a9e5ea3eb34b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:53 +0100 +Subject: [PATCH 46/49] qcow2: Limit snapshot table size + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-47-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 46/48] qcow2: Limit snapshot table size +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Even with a limit of 64k snapshots, each snapshot could have a filename +and an ID with up to 64k, which would still lead to pretty large +allocations, which could potentially lead to qemu aborting. Limit the +total size of the snapshot table to an average of 1k per entry when +the limit of 64k snapshots is fully used. This should be plenty for any +reasonable user. + +This also fixes potential integer overflows of s->snapshot_size. + +Suggested-by: Max Reitz +Signed-off-by: Kevin Wolf +--- + block/qcow2-snapshot.c | 13 +++++++++++++ + block/qcow2.h | 4 ++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index 626a8d4..84481be 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -116,8 +116,14 @@ int qcow2_read_snapshots(BlockDriverState *bs) + } + offset += name_size; + sn->name[name_size] = '\0'; ++ ++ if (offset - s->snapshots_offset > QCOW_MAX_SNAPSHOTS_SIZE) { ++ ret = -EFBIG; ++ goto fail; ++ } + } + ++ assert(offset - s->snapshots_offset <= INT_MAX); + s->snapshots_size = offset - s->snapshots_offset; + return 0; + +@@ -150,7 +156,14 @@ static int qcow2_write_snapshots(BlockDriverState *bs) + offset += sizeof(extra); + offset += strlen(sn->id_str); + offset += strlen(sn->name); ++ ++ if (offset > QCOW_MAX_SNAPSHOTS_SIZE) { ++ ret = -EFBIG; ++ goto fail; ++ } + } ++ ++ assert(offset <= INT_MAX); + snapshots_size = offset; + + /* Allocate space for the new snapshot list */ +diff --git a/block/qcow2.h b/block/qcow2.h +index 87e256a..1cc1ef0 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -48,6 +48,10 @@ + * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ + #define QCOW_MAX_L1_SIZE 0x2000000 + ++/* Allow for an average of 1k per snapshot table entry, should be plenty of ++ * space for snapshot names and IDs */ ++#define QCOW_MAX_SNAPSHOTS_SIZE (1024 * QCOW_MAX_SNAPSHOTS) ++ + /* indicate that the refcount of the referenced cluster is exactly one. */ + #define QCOW_OFLAG_COPIED (1LL << 63) + /* indicate that the cluster is compressed (they never have the copied flag) */ +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Make-overlap-check-mask-variable.patch b/SOURCES/kvm-qcow2-Make-overlap-check-mask-variable.patch new file mode 100644 index 0000000..a17503f --- /dev/null +++ b/SOURCES/kvm-qcow2-Make-overlap-check-mask-variable.patch @@ -0,0 +1,90 @@ +From 0d32273cd7f5daa7431b5e2068537154dea101fb Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:30 +0100 +Subject: [PATCH 37/87] qcow2: Make overlap check mask variable + +RH-Author: Max Reitz +Message-id: <1383604354-12743-40-git-send-email-mreitz@redhat.com> +Patchwork-id: 55339 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 39/43] qcow2: Make overlap check mask variable +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Replace the QCOW2_OL_DEFAULT macro by a variable overlap_check in +BDRVQcowState. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 3e3553905cfc814d59de6d1a634c3a991b2a9257) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 2 +- + block/qcow2.c | 2 ++ + block/qcow2.h | 5 ++--- + 3 files changed, 5 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 2 +- + block/qcow2.c | 2 ++ + block/qcow2.h | 5 ++--- + 3 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 91c446b..3787314 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1629,7 +1629,7 @@ int qcow2_check_metadata_overlap(BlockDriverState *bs, int ign, int64_t offset, + int64_t size) + { + BDRVQcowState *s = bs->opaque; +- int chk = QCOW2_OL_DEFAULT & ~ign; ++ int chk = s->overlap_check & ~ign; + int i, j; + + if (!size) { +diff --git a/block/qcow2.c b/block/qcow2.c +index ac5ed47..157361f 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -630,6 +630,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->discard_passthrough[QCOW2_DISCARD_OTHER] = + qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_OTHER, false); + ++ s->overlap_check = QCOW2_OL_CACHED; ++ + qemu_opts_del(opts); + + if (s->use_lazy_refcounts && s->qcow_version < 3) { +diff --git a/block/qcow2.h b/block/qcow2.h +index 64ad43c..d1fd91b 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -202,6 +202,8 @@ typedef struct BDRVQcowState { + + bool discard_passthrough[QCOW2_DISCARD_MAX]; + ++ int overlap_check; /* bitmask of Qcow2MetadataOverlap values */ ++ + uint64_t incompatible_features; + uint64_t compatible_features; + uint64_t autoclear_features; +@@ -320,9 +322,6 @@ typedef enum QCow2MetadataOverlap { + QCOW2_OL_REFCOUNT_TABLE | QCOW2_OL_REFCOUNT_BLOCK | \ + QCOW2_OL_SNAPSHOT_TABLE | QCOW2_OL_INACTIVE_L1) + +-/* The default checks to perform */ +-#define QCOW2_OL_DEFAULT QCOW2_OL_CACHED +- + #define L1E_OFFSET_MASK 0x00ffffffffffff00ULL + #define L2E_OFFSET_MASK 0x00ffffffffffff00ULL + #define L2E_COMPRESSED_OFFSET_SIZE_MASK 0x3fffffffffffffffULL +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Metadata-overlap-checks.patch b/SOURCES/kvm-qcow2-Metadata-overlap-checks.patch new file mode 100644 index 0000000..578491e --- /dev/null +++ b/SOURCES/kvm-qcow2-Metadata-overlap-checks.patch @@ -0,0 +1,321 @@ +From 4413b8524dfa9dc3a6a494a2cf031265d6ef16f3 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:00 +0100 +Subject: [PATCH 07/87] qcow2: Metadata overlap checks + +RH-Author: Max Reitz +Message-id: <1383604354-12743-10-git-send-email-mreitz@redhat.com> +Patchwork-id: 55309 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 09/43] qcow2: Metadata overlap checks +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Two new functions are added; the first one checks a given range in the +image file for overlaps with metadata (main header, L1 tables, L2 +tables, refcount table and blocks). + +The second one should be used immediately before writing to the image +file as it calls the first function and, upon collision, marks the +image as corrupt and makes the BDS unusable, thereby preventing +further access. + +Both functions take a bitmask argument specifying the structures which +should be checked for overlaps, making it possible to also check +metadata writes against colliding with other structures. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit a40f1c2add4d5f58d594f810fe36cabcf32bc4b0) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 172 ++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 39 +++++++++++ + include/monitor/monitor.h | 1 + + monitor.c | 1 + + 4 files changed, 213 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 172 +++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2.h | 39 ++++++++++ + include/monitor/monitor.h | 1 + + monitor.c | 1 + + 4 files changed, 213 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 1244693..310efcc 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -25,6 +25,8 @@ + #include "qemu-common.h" + #include "block/block_int.h" + #include "block/qcow2.h" ++#include "qemu/range.h" ++#include "qapi/qmp/types.h" + + static int64_t alloc_clusters_noref(BlockDriverState *bs, int64_t size); + static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, +@@ -1372,3 +1374,173 @@ fail: + return ret; + } + ++#define overlaps_with(ofs, sz) \ ++ ranges_overlap(offset, size, ofs, sz) ++ ++/* ++ * Checks if the given offset into the image file is actually free to use by ++ * looking for overlaps with important metadata sections (L1/L2 tables etc.), ++ * i.e. a sanity check without relying on the refcount tables. ++ * ++ * The chk parameter specifies exactly what checks to perform (being a bitmask ++ * of QCow2MetadataOverlap values). ++ * ++ * Returns: ++ * - 0 if writing to this offset will not affect the mentioned metadata ++ * - a positive QCow2MetadataOverlap value indicating one overlapping section ++ * - a negative value (-errno) indicating an error while performing a check, ++ * e.g. when bdrv_read failed on QCOW2_OL_INACTIVE_L2 ++ */ ++int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, ++ int64_t size) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int i, j; ++ ++ if (!size) { ++ return 0; ++ } ++ ++ if (chk & QCOW2_OL_MAIN_HEADER) { ++ if (offset < s->cluster_size) { ++ return QCOW2_OL_MAIN_HEADER; ++ } ++ } ++ ++ /* align range to test to cluster boundaries */ ++ size = align_offset(offset_into_cluster(s, offset) + size, s->cluster_size); ++ offset = start_of_cluster(s, offset); ++ ++ if ((chk & QCOW2_OL_ACTIVE_L1) && s->l1_size) { ++ if (overlaps_with(s->l1_table_offset, s->l1_size * sizeof(uint64_t))) { ++ return QCOW2_OL_ACTIVE_L1; ++ } ++ } ++ ++ if ((chk & QCOW2_OL_REFCOUNT_TABLE) && s->refcount_table_size) { ++ if (overlaps_with(s->refcount_table_offset, ++ s->refcount_table_size * sizeof(uint64_t))) { ++ return QCOW2_OL_REFCOUNT_TABLE; ++ } ++ } ++ ++ if ((chk & QCOW2_OL_SNAPSHOT_TABLE) && s->snapshots_size) { ++ if (overlaps_with(s->snapshots_offset, s->snapshots_size)) { ++ return QCOW2_OL_SNAPSHOT_TABLE; ++ } ++ } ++ ++ if ((chk & QCOW2_OL_INACTIVE_L1) && s->snapshots) { ++ for (i = 0; i < s->nb_snapshots; i++) { ++ if (s->snapshots[i].l1_size && ++ overlaps_with(s->snapshots[i].l1_table_offset, ++ s->snapshots[i].l1_size * sizeof(uint64_t))) { ++ return QCOW2_OL_INACTIVE_L1; ++ } ++ } ++ } ++ ++ if ((chk & QCOW2_OL_ACTIVE_L2) && s->l1_table) { ++ for (i = 0; i < s->l1_size; i++) { ++ if ((s->l1_table[i] & L1E_OFFSET_MASK) && ++ overlaps_with(s->l1_table[i] & L1E_OFFSET_MASK, ++ s->cluster_size)) { ++ return QCOW2_OL_ACTIVE_L2; ++ } ++ } ++ } ++ ++ if ((chk & QCOW2_OL_REFCOUNT_BLOCK) && s->refcount_table) { ++ for (i = 0; i < s->refcount_table_size; i++) { ++ if ((s->refcount_table[i] & REFT_OFFSET_MASK) && ++ overlaps_with(s->refcount_table[i] & REFT_OFFSET_MASK, ++ s->cluster_size)) { ++ return QCOW2_OL_REFCOUNT_BLOCK; ++ } ++ } ++ } ++ ++ if ((chk & QCOW2_OL_INACTIVE_L2) && s->snapshots) { ++ for (i = 0; i < s->nb_snapshots; i++) { ++ uint64_t l1_ofs = s->snapshots[i].l1_table_offset; ++ uint32_t l1_sz = s->snapshots[i].l1_size; ++ uint64_t *l1 = g_malloc(l1_sz * sizeof(uint64_t)); ++ int ret; ++ ++ ret = bdrv_read(bs->file, l1_ofs / BDRV_SECTOR_SIZE, (uint8_t *)l1, ++ l1_sz * sizeof(uint64_t) / BDRV_SECTOR_SIZE); ++ ++ if (ret < 0) { ++ g_free(l1); ++ return ret; ++ } ++ ++ for (j = 0; j < l1_sz; j++) { ++ if ((l1[j] & L1E_OFFSET_MASK) && ++ overlaps_with(l1[j] & L1E_OFFSET_MASK, s->cluster_size)) { ++ g_free(l1); ++ return QCOW2_OL_INACTIVE_L2; ++ } ++ } ++ ++ g_free(l1); ++ } ++ } ++ ++ return 0; ++} ++ ++static const char *metadata_ol_names[] = { ++ [QCOW2_OL_MAIN_HEADER_BITNR] = "qcow2_header", ++ [QCOW2_OL_ACTIVE_L1_BITNR] = "active L1 table", ++ [QCOW2_OL_ACTIVE_L2_BITNR] = "active L2 table", ++ [QCOW2_OL_REFCOUNT_TABLE_BITNR] = "refcount table", ++ [QCOW2_OL_REFCOUNT_BLOCK_BITNR] = "refcount block", ++ [QCOW2_OL_SNAPSHOT_TABLE_BITNR] = "snapshot table", ++ [QCOW2_OL_INACTIVE_L1_BITNR] = "inactive L1 table", ++ [QCOW2_OL_INACTIVE_L2_BITNR] = "inactive L2 table", ++}; ++ ++/* ++ * First performs a check for metadata overlaps (through ++ * qcow2_check_metadata_overlap); if that fails with a negative value (error ++ * while performing a check), that value is returned. If an impending overlap ++ * is detected, the BDS will be made unusable, the qcow2 file marked corrupt ++ * and -EIO returned. ++ * ++ * Returns 0 if there were neither overlaps nor errors while checking for ++ * overlaps; or a negative value (-errno) on error. ++ */ ++int qcow2_pre_write_overlap_check(BlockDriverState *bs, int chk, int64_t offset, ++ int64_t size) ++{ ++ int ret = qcow2_check_metadata_overlap(bs, chk, offset, size); ++ ++ if (ret < 0) { ++ return ret; ++ } else if (ret > 0) { ++ int metadata_ol_bitnr = ffs(ret) - 1; ++ char *message; ++ QObject *data; ++ ++ assert(metadata_ol_bitnr < QCOW2_OL_MAX_BITNR); ++ ++ fprintf(stderr, "qcow2: Preventing invalid write on metadata (overlaps " ++ "with %s); image marked as corrupt.\n", ++ metadata_ol_names[metadata_ol_bitnr]); ++ message = g_strdup_printf("Prevented %s overwrite", ++ metadata_ol_names[metadata_ol_bitnr]); ++ data = qobject_from_jsonf("{ 'device': %s, 'msg': %s, 'offset': %" ++ PRId64 ", 'size': %" PRId64 " }", bs->device_name, message, ++ offset, size); ++ monitor_protocol_event(QEVENT_BLOCK_IMAGE_CORRUPTED, data); ++ g_free(message); ++ qobject_decref(data); ++ ++ qcow2_mark_corrupt(bs); ++ bs->drv = NULL; /* make BDS unusable */ ++ return -EIO; ++ } ++ ++ return 0; ++} +diff --git a/block/qcow2.h b/block/qcow2.h +index 4297487..86ddb30 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -289,6 +289,40 @@ enum { + QCOW2_CLUSTER_ZERO + }; + ++typedef enum QCow2MetadataOverlap { ++ QCOW2_OL_MAIN_HEADER_BITNR = 0, ++ QCOW2_OL_ACTIVE_L1_BITNR = 1, ++ QCOW2_OL_ACTIVE_L2_BITNR = 2, ++ QCOW2_OL_REFCOUNT_TABLE_BITNR = 3, ++ QCOW2_OL_REFCOUNT_BLOCK_BITNR = 4, ++ QCOW2_OL_SNAPSHOT_TABLE_BITNR = 5, ++ QCOW2_OL_INACTIVE_L1_BITNR = 6, ++ QCOW2_OL_INACTIVE_L2_BITNR = 7, ++ ++ QCOW2_OL_MAX_BITNR = 8, ++ ++ QCOW2_OL_NONE = 0, ++ QCOW2_OL_MAIN_HEADER = (1 << QCOW2_OL_MAIN_HEADER_BITNR), ++ QCOW2_OL_ACTIVE_L1 = (1 << QCOW2_OL_ACTIVE_L1_BITNR), ++ QCOW2_OL_ACTIVE_L2 = (1 << QCOW2_OL_ACTIVE_L2_BITNR), ++ QCOW2_OL_REFCOUNT_TABLE = (1 << QCOW2_OL_REFCOUNT_TABLE_BITNR), ++ QCOW2_OL_REFCOUNT_BLOCK = (1 << QCOW2_OL_REFCOUNT_BLOCK_BITNR), ++ QCOW2_OL_SNAPSHOT_TABLE = (1 << QCOW2_OL_SNAPSHOT_TABLE_BITNR), ++ QCOW2_OL_INACTIVE_L1 = (1 << QCOW2_OL_INACTIVE_L1_BITNR), ++ /* NOTE: Checking overlaps with inactive L2 tables will result in bdrv ++ * reads. */ ++ QCOW2_OL_INACTIVE_L2 = (1 << QCOW2_OL_INACTIVE_L2_BITNR), ++} QCow2MetadataOverlap; ++ ++/* Perform all overlap checks which don't require disk access */ ++#define QCOW2_OL_CACHED \ ++ (QCOW2_OL_MAIN_HEADER | QCOW2_OL_ACTIVE_L1 | QCOW2_OL_ACTIVE_L2 | \ ++ QCOW2_OL_REFCOUNT_TABLE | QCOW2_OL_REFCOUNT_BLOCK | \ ++ QCOW2_OL_SNAPSHOT_TABLE | QCOW2_OL_INACTIVE_L1) ++ ++/* The default checks to perform */ ++#define QCOW2_OL_DEFAULT QCOW2_OL_CACHED ++ + #define L1E_OFFSET_MASK 0x00ffffffffffff00ULL + #define L2E_OFFSET_MASK 0x00ffffffffffff00ULL + #define L2E_COMPRESSED_OFFSET_SIZE_MASK 0x3fffffffffffffffULL +@@ -390,6 +424,11 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + + void qcow2_process_discards(BlockDriverState *bs, int ret); + ++int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, ++ int64_t size); ++int qcow2_pre_write_overlap_check(BlockDriverState *bs, int chk, int64_t offset, ++ int64_t size); ++ + /* qcow2-cluster.c functions */ + int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + bool exact_size); +diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h +index 1a6cfcf..07b41a6 100644 +--- a/include/monitor/monitor.h ++++ b/include/monitor/monitor.h +@@ -47,6 +47,7 @@ typedef enum MonitorEvent { + QEVENT_BALLOON_CHANGE, + QEVENT_SPICE_MIGRATE_COMPLETED, + QEVENT_GUEST_PANICKED, ++ QEVENT_BLOCK_IMAGE_CORRUPTED, + + /* Add to 'monitor_event_names' array in monitor.c when + * defining new events here */ +diff --git a/monitor.c b/monitor.c +index deb0dc8..c226acf 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -504,6 +504,7 @@ static const char *monitor_event_names[] = { + [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE", + [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED", + [QEVENT_GUEST_PANICKED] = "GUEST_PANICKED", ++ [QEVENT_BLOCK_IMAGE_CORRUPTED] = "BLOCK_IMAGE_CORRUPTED", + }; + QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX) + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Options-to-enable-discard-for-freed-clusters.patch b/SOURCES/kvm-qcow2-Options-to-enable-discard-for-freed-clusters.patch new file mode 100644 index 0000000..f796ff0 --- /dev/null +++ b/SOURCES/kvm-qcow2-Options-to-enable-discard-for-freed-clusters.patch @@ -0,0 +1,124 @@ +From 789d0334d894eaea6a5ca35538926bbb63a9cea3 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 9 Sep 2013 14:28:01 +0200 +Subject: [PATCH 10/38] qcow2: Options to enable discard for freed clusters + +RH-Author: Kevin Wolf +Message-id: <1378736903-18489-11-git-send-email-kwolf@redhat.com> +Patchwork-id: 54195 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 10/32] qcow2: Options to enable discard for freed clusters +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +Deleted snapshots are discarded in the image file by default, discard +requests take their default from the -drive discard=... option and other +places that free clusters must always be enabled explicitly. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 67af674e478054086f972811dd0a11289afa39a9) + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 5 +++++ + block/qcow2.c | 26 ++++++++++++++++++++++++++ + block/qcow2.h | 5 +++++ + 3 files changed, 36 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 5 +++++ + block/qcow2.c | 26 ++++++++++++++++++++++++++ + block/qcow2.h | 5 +++++ + 3 files changed, 36 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 6d35e49..7488988 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -488,6 +488,11 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, + s->free_cluster_index = cluster_index; + } + refcount_block[block_index] = cpu_to_be16(refcount); ++ if (refcount == 0 && s->discard_passthrough[type]) { ++ /* Try discarding, ignore errors */ ++ /* FIXME Doing this cluster by cluster will be painfully slow */ ++ bdrv_discard(bs->file, cluster_offset, 1); ++ } + } + + ret = 0; +diff --git a/block/qcow2.c b/block/qcow2.c +index e28ea47..ef8a2ca 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -295,6 +295,22 @@ static QemuOptsList qcow2_runtime_opts = { + .type = QEMU_OPT_BOOL, + .help = "Postpone refcount updates", + }, ++ { ++ .name = QCOW2_OPT_DISCARD_REQUEST, ++ .type = QEMU_OPT_BOOL, ++ .help = "Pass guest discard requests to the layer below", ++ }, ++ { ++ .name = QCOW2_OPT_DISCARD_SNAPSHOT, ++ .type = QEMU_OPT_BOOL, ++ .help = "Generate discard requests when snapshot related space " ++ "is freed", ++ }, ++ { ++ .name = QCOW2_OPT_DISCARD_OTHER, ++ .type = QEMU_OPT_BOOL, ++ .help = "Generate discard requests when other clusters are freed", ++ }, + { /* end of list */ } + }, + }; +@@ -532,6 +548,16 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags) + s->use_lazy_refcounts = qemu_opt_get_bool(opts, QCOW2_OPT_LAZY_REFCOUNTS, + (s->compatible_features & QCOW2_COMPAT_LAZY_REFCOUNTS)); + ++ s->discard_passthrough[QCOW2_DISCARD_NEVER] = false; ++ s->discard_passthrough[QCOW2_DISCARD_ALWAYS] = true; ++ s->discard_passthrough[QCOW2_DISCARD_REQUEST] = ++ qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_REQUEST, ++ flags & BDRV_O_UNMAP); ++ s->discard_passthrough[QCOW2_DISCARD_SNAPSHOT] = ++ qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_SNAPSHOT, true); ++ s->discard_passthrough[QCOW2_DISCARD_OTHER] = ++ qemu_opt_get_bool(opts, QCOW2_OPT_DISCARD_OTHER, false); ++ + qemu_opts_del(opts); + + if (s->use_lazy_refcounts && s->qcow_version < 3) { +diff --git a/block/qcow2.h b/block/qcow2.h +index 64a6479..6f91b9a 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -60,6 +60,9 @@ + + + #define QCOW2_OPT_LAZY_REFCOUNTS "lazy_refcounts" ++#define QCOW2_OPT_DISCARD_REQUEST "pass_discard_request" ++#define QCOW2_OPT_DISCARD_SNAPSHOT "pass_discard_snapshot" ++#define QCOW2_OPT_DISCARD_OTHER "pass_discard_other" + + typedef struct QCowHeader { + uint32_t magic; +@@ -187,6 +190,8 @@ typedef struct BDRVQcowState { + int qcow_version; + bool use_lazy_refcounts; + ++ bool discard_passthrough[QCOW2_DISCARD_MAX]; ++ + uint64_t incompatible_features; + uint64_t compatible_features; + uint64_t autoclear_features; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Pass-discard-type-to-qcow2_discard_clusters.patch b/SOURCES/kvm-qcow2-Pass-discard-type-to-qcow2_discard_clusters.patch new file mode 100644 index 0000000..d855814 --- /dev/null +++ b/SOURCES/kvm-qcow2-Pass-discard-type-to-qcow2_discard_clusters.patch @@ -0,0 +1,96 @@ +From 4aec281092b790f6a91b657c6d6293171243a187 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 29 May 2015 17:05:11 +0200 +Subject: [PATCH 1/8] qcow2: Pass discard type to qcow2_discard_clusters() + +Message-id: <1432919112-18076-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 65148 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] qcow2: Pass discard type to qcow2_discard_clusters() +Bugzilla: 1208808 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +The function will be used internally instead of only being called for +guest discard requests. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 670df5e3b4b5ef830a7c3c970170dbfa11cbb8d2) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 8 ++++---- + block/qcow2.c | 2 +- + block/qcow2.h | 2 +- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 67f1393..81d90d9 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1333,7 +1333,7 @@ int qcow2_decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset) + * clusters. + */ + static int discard_single_l2(BlockDriverState *bs, uint64_t offset, +- unsigned int nb_clusters) ++ unsigned int nb_clusters, enum qcow2_discard_type type) + { + BDRVQcowState *s = bs->opaque; + uint64_t *l2_table; +@@ -1362,7 +1362,7 @@ static int discard_single_l2(BlockDriverState *bs, uint64_t offset, + l2_table[l2_index + i] = cpu_to_be64(0); + + /* Then decrease the refcount */ +- qcow2_free_any_clusters(bs, old_offset, 1, QCOW2_DISCARD_REQUEST); ++ qcow2_free_any_clusters(bs, old_offset, 1, type); + } + + ret = qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table); +@@ -1374,7 +1374,7 @@ static int discard_single_l2(BlockDriverState *bs, uint64_t offset, + } + + int qcow2_discard_clusters(BlockDriverState *bs, uint64_t offset, +- int nb_sectors) ++ int nb_sectors, enum qcow2_discard_type type) + { + BDRVQcowState *s = bs->opaque; + uint64_t end_offset; +@@ -1397,7 +1397,7 @@ int qcow2_discard_clusters(BlockDriverState *bs, uint64_t offset, + + /* Each L2 table is handled by its own loop iteration */ + while (nb_clusters > 0) { +- ret = discard_single_l2(bs, offset, nb_clusters); ++ ret = discard_single_l2(bs, offset, nb_clusters, type); + if (ret < 0) { + goto fail; + } +diff --git a/block/qcow2.c b/block/qcow2.c +index 005d513..babcb4b 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1870,7 +1870,7 @@ static coroutine_fn int qcow2_co_discard(BlockDriverState *bs, + + qemu_co_mutex_lock(&s->lock); + ret = qcow2_discard_clusters(bs, sector_num << BDRV_SECTOR_BITS, +- nb_sectors); ++ nb_sectors, QCOW2_DISCARD_REQUEST); + qemu_co_mutex_unlock(&s->lock); + return ret; + } +diff --git a/block/qcow2.h b/block/qcow2.h +index 1cc1ef0..9ad8aad 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -514,7 +514,7 @@ uint64_t qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs, + + int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m); + int qcow2_discard_clusters(BlockDriverState *bs, uint64_t offset, +- int nb_sectors); ++ int nb_sectors, enum qcow2_discard_type type); + int qcow2_zero_clusters(BlockDriverState *bs, uint64_t offset, int nb_sectors); + + int qcow2_expand_zero_clusters(BlockDriverState *bs); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Prevent-backing-file-names-longer-than-1023.patch b/SOURCES/kvm-qcow2-Prevent-backing-file-names-longer-than-1023.patch new file mode 100644 index 0000000..b9c6e0d --- /dev/null +++ b/SOURCES/kvm-qcow2-Prevent-backing-file-names-longer-than-1023.patch @@ -0,0 +1,46 @@ +From 0a5d705e471c975ca6ca4547cd3a0eb5fa5d3291 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 27 Nov 2017 17:28:39 +0100 +Subject: [PATCH 7/9] qcow2: Prevent backing file names longer than 1023 + +RH-Author: Max Reitz +Message-id: <20171127172839.22264-2-mreitz@redhat.com> +Patchwork-id: 77916 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/1] qcow2: Prevent backing file names longer than 1023 +Bugzilla: 1459714 +RH-Acked-by: John Snow +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +We reject backing file names with a length of more than 1023 characters +when opening a qcow2 file, so we should not produce such files +ourselves. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 4e876bcf2bdb3a7353df92d19bfec0afd1650bc4) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 61f7e57..dc831ba 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1497,6 +1497,10 @@ static int qcow2_change_backing_file(BlockDriverState *bs, + { + BDRVQcowState *s = bs->opaque; + ++ if (backing_file && strlen(backing_file) > 1023) { ++ return -EINVAL; ++ } ++ + pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: ""); + pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: ""); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Protect-against-some-integer-overflows-in-bdrv.patch b/SOURCES/kvm-qcow2-Protect-against-some-integer-overflows-in-bdrv.patch new file mode 100644 index 0000000..2410eea --- /dev/null +++ b/SOURCES/kvm-qcow2-Protect-against-some-integer-overflows-in-bdrv.patch @@ -0,0 +1,74 @@ +From 339f13dfd338d88192a11231f4a60bec57b3b66b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:38 +0100 +Subject: [PATCH 31/49] qcow2: Protect against some integer overflows in bdrv_check + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-32-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 31/48] qcow2: Protect against some integer overflows in bdrv_check +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Signed-off-by: Kevin Wolf +--- + block/qcow2-refcount.c | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index fb57c10..73ae4e3 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1018,8 +1018,7 @@ static void inc_refcounts(BlockDriverState *bs, + int64_t offset, int64_t size) + { + BDRVQcowState *s = bs->opaque; +- int64_t start, last, cluster_offset; +- int k; ++ uint64_t start, last, cluster_offset, k; + + if (size <= 0) + return; +@@ -1029,11 +1028,7 @@ static void inc_refcounts(BlockDriverState *bs, + for(cluster_offset = start; cluster_offset <= last; + cluster_offset += s->cluster_size) { + k = cluster_offset >> s->cluster_bits; +- if (k < 0) { +- fprintf(stderr, "ERROR: invalid cluster offset=0x%" PRIx64 "\n", +- cluster_offset); +- res->corruptions++; +- } else if (k >= refcount_table_size) { ++ if (k >= refcount_table_size) { + fprintf(stderr, "Warning: cluster offset=0x%" PRIx64 " is after " + "the end of the image file, can't properly check refcounts.\n", + cluster_offset); +@@ -1474,14 +1469,19 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + BdrvCheckMode fix) + { + BDRVQcowState *s = bs->opaque; +- int64_t size, i, highest_cluster; +- int nb_clusters, refcount1, refcount2; ++ int64_t size, i, highest_cluster, nb_clusters; ++ int refcount1, refcount2; + QCowSnapshot *sn; + uint16_t *refcount_table; + int ret; + + size = bdrv_getlength(bs->file); + nb_clusters = size_to_clusters(s, size); ++ if (nb_clusters > INT_MAX) { ++ res->check_errors++; ++ return -EFBIG; ++ } ++ + refcount_table = g_malloc0(nb_clusters * sizeof(uint16_t)); + + res->bfi.total_clusters = +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Pull-check_refblocks-up.patch b/SOURCES/kvm-qcow2-Pull-check_refblocks-up.patch new file mode 100644 index 0000000..658203f --- /dev/null +++ b/SOURCES/kvm-qcow2-Pull-check_refblocks-up.patch @@ -0,0 +1,156 @@ +From 0a8f6084033d307f4e60104be1da0da99e8775b6 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:14 +0200 +Subject: [PATCH 20/42] qcow2: Pull check_refblocks() up +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1434212556-3927-21-git-send-email-mreitz@redhat.com> +Patchwork-id: 66039 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 20/42] qcow2: Pull check_refblocks() up +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Pull check_refblocks() before calculate_refcounts() so we can drop its +static declaration. + +Signed-off-by: Max Reitz +Reviewed-by: Benoît Canet +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit 057a3fe57e740e5e1cc3d62c9b8e0085e9fffa74) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 102 ++++++++++++++++++++++++------------------------- + 1 file changed, 49 insertions(+), 53 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index cb78f05..0d10865 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1501,59 +1501,6 @@ fail: + return new_offset; + } + +-static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, +- BdrvCheckMode fix, uint16_t **refcount_table, +- int64_t *nb_clusters); +- +-/* +- * Calculates an in-memory refcount table. +- */ +-static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, +- BdrvCheckMode fix, uint16_t **refcount_table, +- int64_t *nb_clusters) +-{ +- BDRVQcowState *s = bs->opaque; +- int64_t i; +- QCowSnapshot *sn; +- int ret; +- +- *refcount_table = g_try_new0(uint16_t, *nb_clusters); +- if (*nb_clusters && *refcount_table == NULL) { +- res->check_errors++; +- return -ENOMEM; +- } +- +- /* header */ +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- 0, s->cluster_size); +- +- /* current L1 table */ +- ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, +- s->l1_table_offset, s->l1_size, CHECK_FRAG_INFO); +- if (ret < 0) { +- return ret; +- } +- +- /* snapshots */ +- for (i = 0; i < s->nb_snapshots; i++) { +- sn = s->snapshots + i; +- ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, +- sn->l1_table_offset, sn->l1_size, 0); +- if (ret < 0) { +- return ret; +- } +- } +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- s->snapshots_offset, s->snapshots_size); +- +- /* refcount data */ +- inc_refcounts(bs, res, *refcount_table, *nb_clusters, +- s->refcount_table_offset, +- s->refcount_table_size * sizeof(uint64_t)); +- +- return check_refblocks(bs, res, fix, refcount_table, nb_clusters); +-} +- + /* + * Checks consistency of refblocks and accounts for each refblock in + * *refcount_table. +@@ -1631,6 +1578,55 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* ++ * Calculates an in-memory refcount table. ++ */ ++static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix, uint16_t **refcount_table, ++ int64_t *nb_clusters) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t i; ++ QCowSnapshot *sn; ++ int ret; ++ ++ *refcount_table = g_try_new0(uint16_t, *nb_clusters); ++ if (*nb_clusters && *refcount_table == NULL) { ++ res->check_errors++; ++ return -ENOMEM; ++ } ++ ++ /* header */ ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ 0, s->cluster_size); ++ ++ /* current L1 table */ ++ ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, ++ s->l1_table_offset, s->l1_size, CHECK_FRAG_INFO); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ /* snapshots */ ++ for (i = 0; i < s->nb_snapshots; i++) { ++ sn = s->snapshots + i; ++ ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, ++ sn->l1_table_offset, sn->l1_size, 0); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ s->snapshots_offset, s->snapshots_size); ++ ++ /* refcount data */ ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, ++ s->refcount_table_offset, ++ s->refcount_table_size * sizeof(uint64_t)); ++ ++ return check_refblocks(bs, res, fix, refcount_table, nb_clusters); ++} ++ ++/* + * Compares the actual reference count for each cluster in the image against the + * refcount as reported by the refcount structures on-disk. + */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Put-cache-reference-in-error-case.patch b/SOURCES/kvm-qcow2-Put-cache-reference-in-error-case.patch new file mode 100644 index 0000000..3362fe9 --- /dev/null +++ b/SOURCES/kvm-qcow2-Put-cache-reference-in-error-case.patch @@ -0,0 +1,46 @@ +From 9c887fdb82a6500aec6897f5c7f48f6bd31a33fc Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:21:55 +0200 +Subject: [PATCH 01/42] qcow2: Put cache reference in error case + +Message-id: <1434212556-3927-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 66020 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 01/42] qcow2: Put cache reference in error case +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +When qcow2_get_cluster_offset() sees a zero cluster in a version 2 +image, it (rightfully) returns an error. But in doing so it shouldn't +leak an L2 table cache reference. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 8885eadedd0ea8b57c1baa367ee2c2d616700bd9) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 81d90d9..1b9609f 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -481,6 +481,7 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, + break; + case QCOW2_CLUSTER_ZERO: + if (s->qcow_version < 3) { ++ qcow2_cache_put(bs, s->l2_table_cache, (void**) &l2_table); + return -EIO; + } + c = count_contiguous_clusters(nb_clusters, s->cluster_size, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Rebuild-refcount-structure-during-check.patch b/SOURCES/kvm-qcow2-Rebuild-refcount-structure-during-check.patch new file mode 100644 index 0000000..4fd3f2d --- /dev/null +++ b/SOURCES/kvm-qcow2-Rebuild-refcount-structure-during-check.patch @@ -0,0 +1,374 @@ +From 3be020259d1627f335fe27aac1dc55e1249b7390 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:22 +0200 +Subject: [PATCH 28/42] qcow2: Rebuild refcount structure during check + +Message-id: <1434212556-3927-29-git-send-email-mreitz@redhat.com> +Patchwork-id: 66047 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 28/42] qcow2: Rebuild refcount structure during check +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +The previous commit introduced the "rebuild" variable to qcow2's +implementation of the image consistency check. Now make use of this by +adding a function which creates a completely new refcount structure +based solely on the in-memory information gathered before. + +The old refcount structure will be leaked, however. This leak will be +dealt with in a follow-up commit. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit c7c0681bc8a781e0319b7cf969b904dfe50d083e) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 311 ++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 305 insertions(+), 6 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 3d66e7c..651ddb6 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1660,6 +1660,285 @@ static void compare_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* ++ * Allocates clusters using an in-memory refcount table (IMRT) in contrast to ++ * the on-disk refcount structures. ++ * ++ * On input, *first_free_cluster tells where to start looking, and need not ++ * actually be a free cluster; the returned offset will not be before that ++ * cluster. On output, *first_free_cluster points to the first gap found, even ++ * if that gap was too small to be used as the returned offset. ++ * ++ * Note that *first_free_cluster is a cluster index whereas the return value is ++ * an offset. ++ */ ++static int64_t alloc_clusters_imrt(BlockDriverState *bs, ++ int cluster_count, ++ uint16_t **refcount_table, ++ int64_t *imrt_nb_clusters, ++ int64_t *first_free_cluster) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t cluster = *first_free_cluster, i; ++ bool first_gap = true; ++ int contiguous_free_clusters; ++ ++ /* Starting at *first_free_cluster, find a range of at least cluster_count ++ * continuously free clusters */ ++ for (contiguous_free_clusters = 0; ++ cluster < *imrt_nb_clusters && ++ contiguous_free_clusters < cluster_count; ++ cluster++) ++ { ++ if (!(*refcount_table)[cluster]) { ++ contiguous_free_clusters++; ++ if (first_gap) { ++ /* If this is the first free cluster found, update ++ * *first_free_cluster accordingly */ ++ *first_free_cluster = cluster; ++ first_gap = false; ++ } ++ } else if (contiguous_free_clusters) { ++ contiguous_free_clusters = 0; ++ } ++ } ++ ++ /* If contiguous_free_clusters is greater than zero, it contains the number ++ * of continuously free clusters until the current cluster; the first free ++ * cluster in the current "gap" is therefore ++ * cluster - contiguous_free_clusters */ ++ ++ /* If no such range could be found, grow the in-memory refcount table ++ * accordingly to append free clusters at the end of the image */ ++ if (contiguous_free_clusters < cluster_count) { ++ int64_t old_imrt_nb_clusters = *imrt_nb_clusters; ++ uint16_t *new_refcount_table; ++ ++ /* contiguous_free_clusters clusters are already empty at the image end; ++ * we need cluster_count clusters; therefore, we have to allocate ++ * cluster_count - contiguous_free_clusters new clusters at the end of ++ * the image (which is the current value of cluster; note that cluster ++ * may exceed old_imrt_nb_clusters if *first_free_cluster pointed beyond ++ * the image end) */ ++ *imrt_nb_clusters = cluster + cluster_count - contiguous_free_clusters; ++ new_refcount_table = g_try_realloc(*refcount_table, ++ *imrt_nb_clusters * ++ sizeof(**refcount_table)); ++ if (!new_refcount_table) { ++ *imrt_nb_clusters = old_imrt_nb_clusters; ++ return -ENOMEM; ++ } ++ *refcount_table = new_refcount_table; ++ ++ memset(*refcount_table + old_imrt_nb_clusters, 0, ++ (*imrt_nb_clusters - old_imrt_nb_clusters) * ++ sizeof(**refcount_table)); ++ } ++ ++ /* Go back to the first free cluster */ ++ cluster -= contiguous_free_clusters; ++ for (i = 0; i < cluster_count; i++) { ++ (*refcount_table)[cluster + i] = 1; ++ } ++ ++ return cluster << s->cluster_bits; ++} ++ ++/* ++ * Creates a new refcount structure based solely on the in-memory information ++ * given through *refcount_table. All necessary allocations will be reflected ++ * in that array. ++ * ++ * On success, the old refcount structure is leaked (it will be covered by the ++ * new refcount structure). ++ */ ++static int rebuild_refcount_structure(BlockDriverState *bs, ++ BdrvCheckResult *res, ++ uint16_t **refcount_table, ++ int64_t *nb_clusters) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t first_free_cluster = 0, reftable_offset = -1, cluster = 0; ++ int64_t refblock_offset, refblock_start, refblock_index; ++ uint32_t reftable_size = 0; ++ uint64_t *on_disk_reftable = NULL; ++ uint16_t *on_disk_refblock; ++ int i, ret = 0; ++ struct { ++ uint64_t reftable_offset; ++ uint32_t reftable_clusters; ++ } QEMU_PACKED reftable_offset_and_clusters; ++ ++ qcow2_cache_empty(bs, s->refcount_block_cache); ++ ++write_refblocks: ++ for (; cluster < *nb_clusters; cluster++) { ++ if (!(*refcount_table)[cluster]) { ++ continue; ++ } ++ ++ refblock_index = cluster >> s->refcount_block_bits; ++ refblock_start = refblock_index << s->refcount_block_bits; ++ ++ /* Don't allocate a cluster in a refblock already written to disk */ ++ if (first_free_cluster < refblock_start) { ++ first_free_cluster = refblock_start; ++ } ++ refblock_offset = alloc_clusters_imrt(bs, 1, refcount_table, ++ nb_clusters, &first_free_cluster); ++ if (refblock_offset < 0) { ++ fprintf(stderr, "ERROR allocating refblock: %s\n", ++ strerror(-refblock_offset)); ++ res->check_errors++; ++ ret = refblock_offset; ++ goto fail; ++ } ++ ++ if (reftable_size <= refblock_index) { ++ uint32_t old_reftable_size = reftable_size; ++ uint64_t *new_on_disk_reftable; ++ ++ reftable_size = ROUND_UP((refblock_index + 1) * sizeof(uint64_t), ++ s->cluster_size) / sizeof(uint64_t); ++ new_on_disk_reftable = g_try_realloc(on_disk_reftable, ++ reftable_size * ++ sizeof(uint64_t)); ++ if (!new_on_disk_reftable) { ++ res->check_errors++; ++ ret = -ENOMEM; ++ goto fail; ++ } ++ on_disk_reftable = new_on_disk_reftable; ++ ++ memset(on_disk_reftable + old_reftable_size, 0, ++ (reftable_size - old_reftable_size) * sizeof(uint64_t)); ++ ++ /* The offset we have for the reftable is now no longer valid; ++ * this will leak that range, but we can easily fix that by running ++ * a leak-fixing check after this rebuild operation */ ++ reftable_offset = -1; ++ } ++ on_disk_reftable[refblock_index] = refblock_offset; ++ ++ /* If this is apparently the last refblock (for now), try to squeeze the ++ * reftable in */ ++ if (refblock_index == (*nb_clusters - 1) >> s->refcount_block_bits && ++ reftable_offset < 0) ++ { ++ uint64_t reftable_clusters = size_to_clusters(s, reftable_size * ++ sizeof(uint64_t)); ++ reftable_offset = alloc_clusters_imrt(bs, reftable_clusters, ++ refcount_table, nb_clusters, ++ &first_free_cluster); ++ if (reftable_offset < 0) { ++ fprintf(stderr, "ERROR allocating reftable: %s\n", ++ strerror(-reftable_offset)); ++ res->check_errors++; ++ ret = reftable_offset; ++ goto fail; ++ } ++ } ++ ++ ret = qcow2_pre_write_overlap_check(bs, 0, refblock_offset, ++ s->cluster_size); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR writing refblock: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ on_disk_refblock = qemu_blockalign0(bs->file, s->cluster_size); ++ for (i = 0; i < s->refcount_block_size && ++ refblock_start + i < *nb_clusters; i++) ++ { ++ on_disk_refblock[i] = ++ cpu_to_be16((*refcount_table)[refblock_start + i]); ++ } ++ ++ ret = bdrv_write(bs->file, refblock_offset / BDRV_SECTOR_SIZE, ++ (void *)on_disk_refblock, s->cluster_sectors); ++ qemu_vfree(on_disk_refblock); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR writing refblock: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ /* Go to the end of this refblock */ ++ cluster = refblock_start + s->refcount_block_size - 1; ++ } ++ ++ if (reftable_offset < 0) { ++ uint64_t post_refblock_start, reftable_clusters; ++ ++ post_refblock_start = ROUND_UP(*nb_clusters, s->refcount_block_size); ++ reftable_clusters = size_to_clusters(s, ++ reftable_size * sizeof(uint64_t)); ++ /* Not pretty but simple */ ++ if (first_free_cluster < post_refblock_start) { ++ first_free_cluster = post_refblock_start; ++ } ++ reftable_offset = alloc_clusters_imrt(bs, reftable_clusters, ++ refcount_table, nb_clusters, ++ &first_free_cluster); ++ if (reftable_offset < 0) { ++ fprintf(stderr, "ERROR allocating reftable: %s\n", ++ strerror(-reftable_offset)); ++ res->check_errors++; ++ ret = reftable_offset; ++ goto fail; ++ } ++ ++ goto write_refblocks; ++ } ++ ++ assert(on_disk_reftable); ++ ++ for (refblock_index = 0; refblock_index < reftable_size; refblock_index++) { ++ cpu_to_be64s(&on_disk_reftable[refblock_index]); ++ } ++ ++ ret = qcow2_pre_write_overlap_check(bs, 0, reftable_offset, ++ reftable_size * sizeof(uint64_t)); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR writing reftable: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ assert(reftable_size < INT_MAX / sizeof(uint64_t)); ++ ret = bdrv_pwrite(bs->file, reftable_offset, on_disk_reftable, ++ reftable_size * sizeof(uint64_t)); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR writing reftable: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ /* Enter new reftable into the image header */ ++ cpu_to_be64w(&reftable_offset_and_clusters.reftable_offset, ++ reftable_offset); ++ cpu_to_be32w(&reftable_offset_and_clusters.reftable_clusters, ++ size_to_clusters(s, reftable_size * sizeof(uint64_t))); ++ ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, ++ refcount_table_offset), ++ &reftable_offset_and_clusters, ++ sizeof(reftable_offset_and_clusters)); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR setting reftable: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ for (refblock_index = 0; refblock_index < reftable_size; refblock_index++) { ++ be64_to_cpus(&on_disk_reftable[refblock_index]); ++ } ++ s->refcount_table = on_disk_reftable; ++ s->refcount_table_offset = reftable_offset; ++ s->refcount_table_size = reftable_size; ++ ++ return 0; ++ ++fail: ++ g_free(on_disk_reftable); ++ return ret; ++} ++ ++/* + * Checks an image for refcount consistency. + * + * Returns 0 if no errors are found, the number of errors in case the image is +@@ -1669,6 +1948,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + BdrvCheckMode fix) + { + BDRVQcowState *s = bs->opaque; ++ BdrvCheckResult pre_compare_res; + int64_t size, highest_cluster, nb_clusters; + uint16_t *refcount_table = NULL; + bool rebuild = false; +@@ -1695,14 +1975,33 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + goto fail; + } + +- compare_refcounts(bs, res, fix, &rebuild, &highest_cluster, refcount_table, ++ /* In case we don't need to rebuild the refcount structure (but want to fix ++ * something), this function is immediately called again, in which case the ++ * result should be ignored */ ++ pre_compare_res = *res; ++ compare_refcounts(bs, res, 0, &rebuild, &highest_cluster, refcount_table, + nb_clusters); + +- if (rebuild) { +- fprintf(stderr, "ERROR need to rebuild refcount structures\n"); +- res->check_errors++; +- /* Just carry on, the rest does not rely on the on-disk refcount +- * structures */ ++ if (rebuild && (fix & BDRV_FIX_ERRORS)) { ++ fprintf(stderr, "Rebuilding refcount structure\n"); ++ ret = rebuild_refcount_structure(bs, res, &refcount_table, ++ &nb_clusters); ++ if (ret < 0) { ++ goto fail; ++ } ++ } else if (fix) { ++ if (rebuild) { ++ fprintf(stderr, "ERROR need to rebuild refcount structures\n"); ++ res->check_errors++; ++ ret = -EIO; ++ goto fail; ++ } ++ ++ if (res->leaks || res->corruptions) { ++ *res = pre_compare_res; ++ compare_refcounts(bs, res, fix, &rebuild, &highest_cluster, ++ refcount_table, nb_clusters); ++ } + } + + /* check OFLAG_COPIED */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Remove-wrong-metadata-overlap-check.patch b/SOURCES/kvm-qcow2-Remove-wrong-metadata-overlap-check.patch new file mode 100644 index 0000000..efb0a92 --- /dev/null +++ b/SOURCES/kvm-qcow2-Remove-wrong-metadata-overlap-check.patch @@ -0,0 +1,58 @@ +From 4e3d25779bb06d9c7a39e9e36b1be8737b459e32 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:28 +0100 +Subject: [PATCH 35/87] qcow2: Remove wrong metadata overlap check + +RH-Author: Max Reitz +Message-id: <1383604354-12743-38-git-send-email-mreitz@redhat.com> +Patchwork-id: 55337 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 37/43] qcow2: Remove wrong metadata overlap check +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +In qcow2_write_compressed, if the compression fails, a normal cluster is +written to disk. This is done through bdrv_write on the qcow2 BDS +itself (using the guest offset), thus it is wrong to do a metadata +overlap check before. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit f9bff971436b5924ca3c3203c6a3dcd6437bd430) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 8 -------- + 1 file changed, 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 8 -------- + 1 files changed, 0 insertions(+), 8 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 880d2cf..8b73518 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1735,14 +1735,6 @@ static int qcow2_write_compressed(BlockDriverState *bs, int64_t sector_num, + + if (ret != Z_STREAM_END || out_len >= s->cluster_size) { + /* could not compress: write normal cluster */ +- +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, +- sector_num * BDRV_SECTOR_SIZE, +- s->cluster_sectors * BDRV_SECTOR_SIZE); +- if (ret < 0) { +- goto fail; +- } +- + ret = bdrv_write(bs, sector_num, buf, s->cluster_sectors); + if (ret < 0) { + goto fail; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Repair-OFLAG_COPIED-when-fixing-leaks.patch b/SOURCES/kvm-qcow2-Repair-OFLAG_COPIED-when-fixing-leaks.patch new file mode 100644 index 0000000..16101b0 --- /dev/null +++ b/SOURCES/kvm-qcow2-Repair-OFLAG_COPIED-when-fixing-leaks.patch @@ -0,0 +1,99 @@ +From ec8057f43c44075e02b59078b38b40340220f955 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 18 Jun 2018 17:24:53 +0200 +Subject: [PATCH 05/17] qcow2: Repair OFLAG_COPIED when fixing leaks + +RH-Author: Max Reitz +Message-id: <20180618172454.27434-2-mreitz@redhat.com> +Patchwork-id: 80785 +O-Subject: [RHEL-7.6 qemu-kvm PATCH 1/2] qcow2: Repair OFLAG_COPIED when fixing leaks +Bugzilla: 1527122 +RH-Acked-by: John Snow +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Repairing OFLAG_COPIED is usually safe because it is done after the +refcounts have been repaired. Therefore, it we did not find anyone else +referencing a data or L2 cluster, it makes no sense to not set +OFLAG_COPIED -- and the other direction (clearing OFLAG_COPIED) is +always safe, anyway, it may just induce leaks. + +Furthermore, if OFLAG_COPIED is actually consistent with a wrong (leaky) +refcount, we will decrement the refcount with -r leaks, but OFLAG_COPIED +will then be wrong. qemu-img check should not produce images that are +more corrupted afterwards then they were before. + +Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1527085 +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Message-id: 20180509200059.31125-2-mreitz@redhat.com +Signed-off-by: Max Reitz +(cherry picked from commit 3cce51c919c7b4028cf6676dfcb80a45741b5117) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2-refcount.c + +Conflicts due to refcounts being fixed to 16 bit downstream, which means +that every instance of the "refcount" variable is an int instead of +uint64_t. This results in contextual conflicts in the corruption +printf()s. + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 25 +++++++++++++++++-------- + 1 file changed, 17 insertions(+), 8 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 848fd31..7a69bcd 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1333,6 +1333,19 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res, + int ret; + int refcount; + int i, j; ++ bool repair; ++ ++ if (fix & BDRV_FIX_ERRORS) { ++ /* Always repair */ ++ repair = true; ++ } else if (fix & BDRV_FIX_LEAKS) { ++ /* Repair only if that seems safe: This function is always ++ * called after the refcounts have been fixed, so the refcount ++ * is accurate if that repair was successful */ ++ repair = !res->check_errors && !res->corruptions && !res->leaks; ++ } else { ++ repair = false; ++ } + + for (i = 0; i < s->l1_size; i++) { + uint64_t l1_entry = s->l1_table[i]; +@@ -1351,10 +1364,8 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res, + if ((refcount == 1) != ((l1_entry & QCOW_OFLAG_COPIED) != 0)) { + fprintf(stderr, "%s OFLAG_COPIED L2 cluster: l1_index=%d " + "l1_entry=%" PRIx64 " refcount=%d\n", +- fix & BDRV_FIX_ERRORS ? "Repairing" : +- "ERROR", +- i, l1_entry, refcount); +- if (fix & BDRV_FIX_ERRORS) { ++ repair ? "Repairing" : "ERROR", i, l1_entry, refcount); ++ if (repair) { + s->l1_table[i] = refcount == 1 + ? l1_entry | QCOW_OFLAG_COPIED + : l1_entry & ~QCOW_OFLAG_COPIED; +@@ -1393,10 +1404,8 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res, + if ((refcount == 1) != ((l2_entry & QCOW_OFLAG_COPIED) != 0)) { + fprintf(stderr, "%s OFLAG_COPIED data cluster: " + "l2_entry=%" PRIx64 " refcount=%d\n", +- fix & BDRV_FIX_ERRORS ? "Repairing" : +- "ERROR", +- l2_entry, refcount); +- if (fix & BDRV_FIX_ERRORS) { ++ repair ? "Repairing" : "ERROR", l2_entry, refcount); ++ if (repair) { + l2_table[j] = cpu_to_be64(refcount == 1 + ? l2_entry | QCOW_OFLAG_COPIED + : l2_entry & ~QCOW_OFLAG_COPIED); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Respect-new_block-in-alloc_refcount_block.patch b/SOURCES/kvm-qcow2-Respect-new_block-in-alloc_refcount_block.patch new file mode 100644 index 0000000..d29e781 --- /dev/null +++ b/SOURCES/kvm-qcow2-Respect-new_block-in-alloc_refcount_block.patch @@ -0,0 +1,72 @@ +From 9bffc974294d823d42b4b4d51e44abd26f7147a6 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:33 +0200 +Subject: [PATCH 39/42] qcow2: Respect new_block in alloc_refcount_block() + +Message-id: <1434212556-3927-40-git-send-email-mreitz@redhat.com> +Patchwork-id: 66058 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 39/42] qcow2: Respect new_block in alloc_refcount_block() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +When choosing a new place for the refcount table, alloc_refcount_block() +tries to infer the number of clusters used so far from its argument +cluster_index (which comes from the idea that if any cluster with an +index greater than cluster_index was in use, the refcount table would +have to be big enough already to describe cluster_index). + +However, there is a cluster that may be at or after cluster_index, and +which is not covered by the refcount structures, and that is the new +refcount block new_block. Therefore, it should be taken into account for +the blocks_used calculation. + +Also, because new_block already describes (or is intended to describe) +cluster_index, we may not put the new refcount structures there. + +Signed-off-by: Max Reitz +Message-id: 1423598552-24301-2-git-send-email-mreitz@redhat.com +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Max Reitz +(cherry picked from commit 14a58a4e0c2e98a7d9232e1c229a531ca231133b) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 87b932c..cee5b1f 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -319,8 +319,20 @@ static int alloc_refcount_block(BlockDriverState *bs, + */ + BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_GROW); + +- /* Calculate the number of refcount blocks needed so far */ +- uint64_t blocks_used = DIV_ROUND_UP(cluster_index, s->refcount_block_size); ++ /* Calculate the number of refcount blocks needed so far; this will be the ++ * basis for calculating the index of the first cluster used for the ++ * self-describing refcount structures which we are about to create. ++ * ++ * Because we reached this point, there cannot be any refcount entries for ++ * cluster_index or higher indices yet. However, because new_block has been ++ * allocated to describe that cluster (and it will assume this role later ++ * on), we cannot use that index; also, new_block may actually have a higher ++ * cluster index than cluster_index, so it needs to be taken into account ++ * here (and 1 needs to be added to its value because that cluster is used). ++ */ ++ uint64_t blocks_used = DIV_ROUND_UP(MAX(cluster_index + 1, ++ (new_block >> s->cluster_bits) + 1), ++ s->refcount_block_size); + + if (blocks_used > QCOW_MAX_REFTABLE_SIZE / sizeof(uint64_t)) { + return -EFBIG; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Restore-total_sectors-value-in-save_vmstate.patch b/SOURCES/kvm-qcow2-Restore-total_sectors-value-in-save_vmstate.patch new file mode 100644 index 0000000..9c4e39d --- /dev/null +++ b/SOURCES/kvm-qcow2-Restore-total_sectors-value-in-save_vmstate.patch @@ -0,0 +1,69 @@ +From f03758aa88454cd2efe72b7623b855331c5ee22c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 1 Nov 2013 14:23:15 +0100 +Subject: [PATCH 27/81] qcow2: Restore total_sectors value in save_vmstate + +RH-Author: Max Reitz +Message-id: <1383315797-30938-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 55216 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/3] qcow2: Restore total_sectors value in save_vmstate +Bugzilla: 1025740 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Alex Williamson + +BZ: 1025740 + +Since df2a6f29a5, bdrv_co_do_writev increases the total_sectors value of +a growable block devices on writes after the current end. This leads to +the virtual disk apparently growing in qcow2_save_vmstate, which in turn +affects the disk size captured by the internal snapshot taken directly +afterwards through e.g. the HMP savevm command. Such a "grown" snapshot +cannot be loaded after reopening the qcow2 image, since its disk size +differs from the actual virtual disk size (writing a VM state does not +actually increase the virtual disk size). + +Fix this by restoring total_sectors at the end of qcow2_save_vmstate. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit eedff66f21e542650d895801549ce05ac108278b) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 8e894b9..f4adf35 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1716,6 +1716,7 @@ static int qcow2_save_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, + int64_t pos) + { + BDRVQcowState *s = bs->opaque; ++ int64_t total_sectors = bs->total_sectors; + int growable = bs->growable; + int ret; + +@@ -1724,6 +1725,11 @@ static int qcow2_save_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, + ret = bdrv_pwritev(bs, qcow2_vm_state_offset(s) + pos, qiov); + bs->growable = growable; + ++ /* bdrv_co_do_writev will have increased the total_sectors value to include ++ * the VM state - the VM state is however not an actual part of the block ++ * device, therefore, we need to restore the old value. */ ++ bs->total_sectors = total_sectors; ++ + return ret; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Reuse-refcount-table-in-calculate_refcounts.patch b/SOURCES/kvm-qcow2-Reuse-refcount-table-in-calculate_refcounts.patch new file mode 100644 index 0000000..184576a --- /dev/null +++ b/SOURCES/kvm-qcow2-Reuse-refcount-table-in-calculate_refcounts.patch @@ -0,0 +1,66 @@ +From 2f67e26a87ace81cb7a9c122c39f4d8d667d69d1 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:19 +0200 +Subject: [PATCH 25/42] qcow2: Reuse refcount table in calculate_refcounts() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1434212556-3927-26-git-send-email-mreitz@redhat.com> +Patchwork-id: 66044 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 25/42] qcow2: Reuse refcount table in calculate_refcounts() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +We will later call calculate_refcounts multiple times, so reuse the +refcount table if possible. + +Signed-off-by: Max Reitz +Reviewed-by: Benoît Canet +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit 9696df219a71c6608f058ade8873d6d0b4e352fe) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 7d03e65..8f1215c 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1631,10 +1631,12 @@ static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + QCowSnapshot *sn; + int ret; + +- *refcount_table = g_try_new0(uint16_t, *nb_clusters); +- if (*nb_clusters && *refcount_table == NULL) { +- res->check_errors++; +- return -ENOMEM; ++ if (!*refcount_table) { ++ *refcount_table = g_try_new0(uint16_t, *nb_clusters); ++ if (*nb_clusters && *refcount_table == NULL) { ++ res->check_errors++; ++ return -ENOMEM; ++ } + } + + /* header */ +@@ -1750,7 +1752,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + { + BDRVQcowState *s = bs->opaque; + int64_t size, highest_cluster, nb_clusters; +- uint16_t *refcount_table; ++ uint16_t *refcount_table = NULL; + int ret; + + size = bdrv_getlength(bs->file); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Save-refcount-order-in-BDRVQcowState.patch b/SOURCES/kvm-qcow2-Save-refcount-order-in-BDRVQcowState.patch new file mode 100644 index 0000000..dcd9460 --- /dev/null +++ b/SOURCES/kvm-qcow2-Save-refcount-order-in-BDRVQcowState.patch @@ -0,0 +1,73 @@ +From a6f84b8fefe3225f3fb6969c5f763bb7151f740e Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:12 +0100 +Subject: [PATCH 07/14] qcow2: Save refcount order in BDRVQcowState + +RH-Author: Max Reitz +Message-id: <1389131839-12920-8-git-send-email-mreitz@redhat.com> +Patchwork-id: 56543 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 07/14] qcow2: Save refcount order in BDRVQcowState +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Save the image refcount order in BDRVQcowState. This will be relevant +for future code supporting different refcount orders than four and also +for code that needs to verify a certain refcount order for an opened +image. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit b6481f376bc65894910dd98db3f299d698817106) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 3 ++- + block/qcow2.h | 1 + + 2 files changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 3 ++- + block/qcow2.h | 1 + + 2 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index f5f68f8..0a53a3c 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -527,6 +527,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + ret = -ENOTSUP; + goto fail; + } ++ s->refcount_order = header.refcount_order; + + if (header.cluster_bits < MIN_CLUSTER_BITS || + header.cluster_bits > MAX_CLUSTER_BITS) { +@@ -1255,7 +1256,7 @@ int qcow2_update_header(BlockDriverState *bs) + .incompatible_features = cpu_to_be64(s->incompatible_features), + .compatible_features = cpu_to_be64(s->compatible_features), + .autoclear_features = cpu_to_be64(s->autoclear_features), +- .refcount_order = cpu_to_be32(3 + REFCOUNT_SHIFT), ++ .refcount_order = cpu_to_be32(s->refcount_order), + .header_length = cpu_to_be32(header_length), + }; + +diff --git a/block/qcow2.h b/block/qcow2.h +index 2660483..9749f03 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -208,6 +208,7 @@ typedef struct BDRVQcowState { + int flags; + int qcow_version; + bool use_lazy_refcounts; ++ int refcount_order; + + bool discard_passthrough[QCOW2_DISCARD_MAX]; + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Split-fail-code-in-L1-and-L2-checks.patch b/SOURCES/kvm-qcow2-Split-fail-code-in-L1-and-L2-checks.patch new file mode 100644 index 0000000..8767cdf --- /dev/null +++ b/SOURCES/kvm-qcow2-Split-fail-code-in-L1-and-L2-checks.patch @@ -0,0 +1,111 @@ +From f3113f5709ae7c1f1ca25b6075662c49fc415ca7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:16 +0200 +Subject: [PATCH 22/42] qcow2: Split fail code in L1 and L2 checks + +Message-id: <1434212556-3927-23-git-send-email-mreitz@redhat.com> +Patchwork-id: 66041 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 22/42] qcow2: Split fail code in L1 and L2 checks +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Instead of printing out an error message, incrementing check_errors and +returning a fixed -errno, just do cleanups and return -ret, with ret set +by the code which threw the exception (jumped to the fail label). + +Also, increment check_errors on error in check_refcounts_l2(). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit ad27390c85c50df402c7ec0d3864fc43e6559fb3) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2-refcount.c + +One conflict because of g_malloc() downstream instead of g_try_malloc() +(contextual); I fixed up the context because there was no real reason +not to. + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 29 +++++++++++++++++++---------- + 1 file changed, 19 insertions(+), 10 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 7e2bb7d..0dac4c9 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1105,14 +1105,18 @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, + BDRVQcowState *s = bs->opaque; + uint64_t *l2_table, l2_entry; + uint64_t next_contiguous_offset = 0; +- int i, l2_size, nb_csectors; ++ int i, l2_size, nb_csectors, ret; + + /* Read L2 table from disk */ + l2_size = s->l2_size * sizeof(uint64_t); + l2_table = g_malloc(l2_size); + +- if (bdrv_pread(bs->file, l2_offset, l2_table, l2_size) != l2_size) ++ ret = bdrv_pread(bs->file, l2_offset, l2_table, l2_size); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR: I/O error in check_refcounts_l2\n"); ++ res->check_errors++; + goto fail; ++ } + + /* Do the actual checks */ + for(i = 0; i < s->l2_size; i++) { +@@ -1193,9 +1197,8 @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, + return 0; + + fail: +- fprintf(stderr, "ERROR: I/O error in check_refcounts_l2\n"); + g_free(l2_table); +- return -EIO; ++ return ret; + } + + /* +@@ -1227,10 +1230,18 @@ static int check_refcounts_l1(BlockDriverState *bs, + if (l1_size2 == 0) { + l1_table = NULL; + } else { +- l1_table = g_malloc(l1_size2); +- if (bdrv_pread(bs->file, l1_table_offset, +- l1_table, l1_size2) != l1_size2) ++ l1_table = g_try_malloc(l1_size2); ++ if (l1_table == NULL) { ++ ret = -ENOMEM; ++ res->check_errors++; ++ goto fail; ++ } ++ ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size2); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR: I/O error in check_refcounts_l1\n"); ++ res->check_errors++; + goto fail; ++ } + for(i = 0;i < l1_size; i++) + be64_to_cpus(&l1_table[i]); + } +@@ -1263,10 +1274,8 @@ static int check_refcounts_l1(BlockDriverState *bs, + return 0; + + fail: +- fprintf(stderr, "ERROR: I/O error in check_refcounts_l1\n"); +- res->check_errors++; + g_free(l1_table); +- return -EIO; ++ return ret; + } + + /* +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Split-qcow2_check_refcounts.patch b/SOURCES/kvm-qcow2-Split-qcow2_check_refcounts.patch new file mode 100644 index 0000000..c7b4bef --- /dev/null +++ b/SOURCES/kvm-qcow2-Split-qcow2_check_refcounts.patch @@ -0,0 +1,289 @@ +From 735513ff089e56379c2cfd290c5b3e1f1a13cbcc Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:12 +0200 +Subject: [PATCH 18/42] qcow2: Split qcow2_check_refcounts() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1434212556-3927-19-git-send-email-mreitz@redhat.com> +Patchwork-id: 66037 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 18/42] qcow2: Split qcow2_check_refcounts() +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Put the code for calculating the reference counts and comparing them +during qemu-img check into own functions. + +Signed-off-by: Max Reitz +Reviewed-by: Benoît Canet +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit 6ca56bf5e90aa167395727667d17c699950c545c) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2-refcount.c + +5839e53bbc0fec56021d758aab7610df421ed8c8 is missing downstream, which +replaces g*_malloc*() by g*_new*() and g*_realloc() by g*_renew() all +over the code base. Not backporting that commit results in only two +conflicts which are trivial to resolve; backporting it would mean +touching the whole code base, which I think is worse. + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 151 +++++++++++++++++++++++++++++++++---------------- + 1 file changed, 103 insertions(+), 48 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 0c5a6ad..08b2b62 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1501,67 +1501,70 @@ fail: + return new_offset; + } + ++static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix, uint16_t **refcount_table, ++ int64_t *nb_clusters); ++ + /* +- * Checks an image for refcount consistency. +- * +- * Returns 0 if no errors are found, the number of errors in case the image is +- * detected as corrupted, and -errno when an internal error occurred. ++ * Calculates an in-memory refcount table. + */ +-int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, +- BdrvCheckMode fix) ++static int calculate_refcounts(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix, uint16_t **refcount_table, ++ int64_t *nb_clusters) + { + BDRVQcowState *s = bs->opaque; +- int64_t size, i, highest_cluster, nb_clusters; +- int refcount1, refcount2; ++ int64_t i; + QCowSnapshot *sn; +- uint16_t *refcount_table; + int ret; + +- size = bdrv_getlength(bs->file); +- if (size < 0) { ++ *refcount_table = g_try_new0(uint16_t, *nb_clusters); ++ if (*nb_clusters && *refcount_table == NULL) { + res->check_errors++; +- return size; ++ return -ENOMEM; + } + +- nb_clusters = size_to_clusters(s, size); +- if (nb_clusters > INT_MAX) { +- res->check_errors++; +- return -EFBIG; +- } +- +- refcount_table = g_malloc0(nb_clusters * sizeof(uint16_t)); +- +- res->bfi.total_clusters = +- size_to_clusters(s, bs->total_sectors * BDRV_SECTOR_SIZE); +- + /* header */ +- inc_refcounts(bs, res, refcount_table, nb_clusters, ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, + 0, s->cluster_size); + + /* current L1 table */ +- ret = check_refcounts_l1(bs, res, refcount_table, nb_clusters, ++ ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, + s->l1_table_offset, s->l1_size, CHECK_FRAG_INFO); + if (ret < 0) { +- goto fail; ++ return ret; + } + + /* snapshots */ +- for(i = 0; i < s->nb_snapshots; i++) { ++ for (i = 0; i < s->nb_snapshots; i++) { + sn = s->snapshots + i; +- ret = check_refcounts_l1(bs, res, refcount_table, nb_clusters, ++ ret = check_refcounts_l1(bs, res, *refcount_table, *nb_clusters, + sn->l1_table_offset, sn->l1_size, 0); + if (ret < 0) { +- goto fail; ++ return ret; + } + } +- inc_refcounts(bs, res, refcount_table, nb_clusters, ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, + s->snapshots_offset, s->snapshots_size); + + /* refcount data */ +- inc_refcounts(bs, res, refcount_table, nb_clusters, ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, + s->refcount_table_offset, + s->refcount_table_size * sizeof(uint64_t)); + ++ return check_refblocks(bs, res, fix, refcount_table, nb_clusters); ++} ++ ++/* ++ * Checks consistency of refblocks and accounts for each refblock in ++ * *refcount_table. ++ */ ++static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix, uint16_t **refcount_table, ++ int64_t *nb_clusters) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t i; ++ + for(i = 0; i < s->refcount_table_size; i++) { + uint64_t offset, cluster; + offset = s->refcount_table[i]; +@@ -1575,7 +1578,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + continue; + } + +- if (cluster >= nb_clusters) { ++ if (cluster >= *nb_clusters) { + fprintf(stderr, "ERROR refcount block %" PRId64 + " is outside image\n", i); + res->corruptions++; +@@ -1583,14 +1586,14 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + + if (offset != 0) { +- inc_refcounts(bs, res, refcount_table, nb_clusters, ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, + offset, s->cluster_size); +- if (refcount_table[cluster] != 1) { ++ if ((*refcount_table)[cluster] != 1) { + fprintf(stderr, "%s refcount block %" PRId64 + " refcount=%d\n", + fix & BDRV_FIX_ERRORS ? "Repairing" : + "ERROR", +- i, refcount_table[cluster]); ++ i, (*refcount_table)[cluster]); + + if (fix & BDRV_FIX_ERRORS) { + int64_t new_offset; +@@ -1602,17 +1605,18 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* update refcounts */ +- if ((new_offset >> s->cluster_bits) >= nb_clusters) { ++ if ((new_offset >> s->cluster_bits) >= *nb_clusters) { + /* increase refcount_table size if necessary */ +- int old_nb_clusters = nb_clusters; +- nb_clusters = (new_offset >> s->cluster_bits) + 1; +- refcount_table = g_realloc(refcount_table, +- nb_clusters * sizeof(uint16_t)); +- memset(&refcount_table[old_nb_clusters], 0, (nb_clusters +- - old_nb_clusters) * sizeof(uint16_t)); ++ int old_nb_clusters = *nb_clusters; ++ *nb_clusters = (new_offset >> s->cluster_bits) + 1; ++ *refcount_table = g_renew(uint16_t, *refcount_table, ++ *nb_clusters); ++ memset(&(*refcount_table)[old_nb_clusters], 0, ++ (*nb_clusters - old_nb_clusters) * ++ sizeof(uint16_t)); + } +- refcount_table[cluster]--; +- inc_refcounts(bs, res, refcount_table, nb_clusters, ++ (*refcount_table)[cluster]--; ++ inc_refcounts(bs, res, *refcount_table, *nb_clusters, + new_offset, s->cluster_size); + + res->corruptions_fixed++; +@@ -1623,8 +1627,22 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + } + +- /* compare ref counts */ +- for (i = 0, highest_cluster = 0; i < nb_clusters; i++) { ++ return 0; ++} ++ ++/* ++ * Compares the actual reference count for each cluster in the image against the ++ * refcount as reported by the refcount structures on-disk. ++ */ ++static void compare_refcounts(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix, int64_t *highest_cluster, ++ uint16_t *refcount_table, int64_t nb_clusters) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t i; ++ int refcount1, refcount2, ret; ++ ++ for (i = 0, *highest_cluster = 0; i < nb_clusters; i++) { + refcount1 = get_refcount(bs, i); + if (refcount1 < 0) { + fprintf(stderr, "Can't get refcount for cluster %" PRId64 ": %s\n", +@@ -1636,11 +1654,10 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + refcount2 = refcount_table[i]; + + if (refcount1 > 0 || refcount2 > 0) { +- highest_cluster = i; ++ *highest_cluster = i; + } + + if (refcount1 != refcount2) { +- + /* Check if we're allowed to fix the mismatch */ + int *num_fixed = NULL; + if (refcount1 > refcount2 && (fix & BDRV_FIX_LEAKS)) { +@@ -1673,6 +1690,44 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + } + } ++} ++ ++/* ++ * Checks an image for refcount consistency. ++ * ++ * Returns 0 if no errors are found, the number of errors in case the image is ++ * detected as corrupted, and -errno when an internal error occurred. ++ */ ++int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t size, highest_cluster, nb_clusters; ++ uint16_t *refcount_table; ++ int ret; ++ ++ size = bdrv_getlength(bs->file); ++ if (size < 0) { ++ res->check_errors++; ++ return size; ++ } ++ ++ nb_clusters = size_to_clusters(s, size); ++ if (nb_clusters > INT_MAX) { ++ res->check_errors++; ++ return -EFBIG; ++ } ++ ++ res->bfi.total_clusters = ++ size_to_clusters(s, bs->total_sectors * BDRV_SECTOR_SIZE); ++ ++ ret = calculate_refcounts(bs, res, fix, &refcount_table, &nb_clusters); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ compare_refcounts(bs, res, fix, &highest_cluster, refcount_table, ++ nb_clusters); + + /* check OFLAG_COPIED */ + ret = check_oflag_copied(bs, res, fix); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Switch-L1-table-in-a-single-sequence.patch b/SOURCES/kvm-qcow2-Switch-L1-table-in-a-single-sequence.patch new file mode 100644 index 0000000..31c87db --- /dev/null +++ b/SOURCES/kvm-qcow2-Switch-L1-table-in-a-single-sequence.patch @@ -0,0 +1,72 @@ +From 45958d24d6c9bcdc333844f69f47cacec29cfa0e Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:26 +0100 +Subject: [PATCH 33/87] qcow2: Switch L1 table in a single sequence + +RH-Author: Max Reitz +Message-id: <1383604354-12743-36-git-send-email-mreitz@redhat.com> +Patchwork-id: 55335 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 35/43] qcow2: Switch L1 table in a single sequence +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Switching the L1 table in memory should be an atomic operation, as far +as possible. Calling qcow2_free_clusters on the old L1 table on disk is +not a good idea when the old L1 table is no longer valid and the address +to the new one hasn't yet been written into the corresponding +BDRVQcowState field. To be more specific, this can lead to segfaults due +to qcow2_check_metadata_overlap trying to access the L1 table during the +free operation. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit fda74f826baec78d685e5a87fd8a95bfb7bb2243) + +Signed-off-by: Max Reitz +--- + block/qcow2-cluster.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 2d5aa92..c05f182 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -35,6 +35,7 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + BDRVQcowState *s = bs->opaque; + int new_l1_size2, ret, i; + uint64_t *new_l1_table; ++ int64_t old_l1_table_offset, old_l1_size; + int64_t new_l1_table_offset, new_l1_size; + uint8_t data[12]; + +@@ -106,11 +107,13 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + goto fail; + } + g_free(s->l1_table); +- qcow2_free_clusters(bs, s->l1_table_offset, s->l1_size * sizeof(uint64_t), +- QCOW2_DISCARD_OTHER); ++ old_l1_table_offset = s->l1_table_offset; + s->l1_table_offset = new_l1_table_offset; + s->l1_table = new_l1_table; ++ old_l1_size = s->l1_size; + s->l1_size = new_l1_size; ++ qcow2_free_clusters(bs, old_l1_table_offset, old_l1_size * sizeof(uint64_t), ++ QCOW2_DISCARD_OTHER); + return 0; + fail: + g_free(new_l1_table); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Unset-zero_beyond_eof-in-save_vmstate.patch b/SOURCES/kvm-qcow2-Unset-zero_beyond_eof-in-save_vmstate.patch new file mode 100644 index 0000000..544963b --- /dev/null +++ b/SOURCES/kvm-qcow2-Unset-zero_beyond_eof-in-save_vmstate.patch @@ -0,0 +1,61 @@ +From 3ab144fe22a867a0ffcce396302b62b0f2ac4c29 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 1 Nov 2013 14:23:16 +0100 +Subject: [PATCH 28/81] qcow2: Unset zero_beyond_eof in save_vmstate + +RH-Author: Max Reitz +Message-id: <1383315797-30938-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 55217 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/3] qcow2: Unset zero_beyond_eof in save_vmstate +Bugzilla: 1025740 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Alex Williamson + +BZ: 1025740 + +Saving the VM state is done using bdrv_pwrite. This function may perform +a read-modify-write, which in this case results in data being read from +beyond the end of the virtual disk. Since we are actually trying to +access an area which is not a part of the virtual disk, zero_beyond_eof +has to be set to false before performing the partial write, otherwise +the VM state may become corrupted. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 6e13610aa454beba52944e8df6d93158d68ab911) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index f4adf35..c2728c9 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1718,12 +1718,15 @@ static int qcow2_save_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, + BDRVQcowState *s = bs->opaque; + int64_t total_sectors = bs->total_sectors; + int growable = bs->growable; ++ bool zero_beyond_eof = bs->zero_beyond_eof; + int ret; + + BLKDBG_EVENT(bs->file, BLKDBG_VMSTATE_SAVE); + bs->growable = 1; ++ bs->zero_beyond_eof = false; + ret = bdrv_pwritev(bs, qcow2_vm_state_offset(s) + pos, qiov); + bs->growable = growable; ++ bs->zero_beyond_eof = zero_beyond_eof; + + /* bdrv_co_do_writev will have increased the total_sectors value to include + * the VM state - the VM state is however not an actual part of the block +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Use-Error-parameter.patch b/SOURCES/kvm-qcow2-Use-Error-parameter.patch new file mode 100644 index 0000000..5436312 --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-Error-parameter.patch @@ -0,0 +1,498 @@ +From 9f0ec0582867ea7c45ac5b23bfcbd20e699a4bd4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:14 +0100 +Subject: [PATCH 21/87] qcow2: Use Error parameter + +RH-Author: Max Reitz +Message-id: <1383604354-12743-24-git-send-email-mreitz@redhat.com> +Patchwork-id: 55323 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 23/43] qcow2: Use Error parameter +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +Employ usage of the new Error ** parameter in qcow2_open, qcow2_create +and associated functions. + +Signed-off-by: Max Reitz +(cherry picked from commit 3ef6c40ad0b350e18c78135ffbdbe209cb479c1f) + +Signed-off-by: Max Reitz + +Conflicts: + block/qcow2.c + +Conflicts because 8ad1898c has not been backported ("qcow2: Change +default for new images to compat=1.1"). +--- + block/qcow2.c | 134 ++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 88 insertions(+), 46 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 134 +++++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 88 insertions(+), 46 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 027d210..880d2cf 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -79,7 +79,8 @@ static int qcow2_probe(const uint8_t *buf, int buf_size, const char *filename) + * return 0 upon success, non-0 otherwise + */ + static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, +- uint64_t end_offset, void **p_feature_table) ++ uint64_t end_offset, void **p_feature_table, ++ Error **errp) + { + BDRVQcowState *s = bs->opaque; + QCowExtension ext; +@@ -100,10 +101,10 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + printf("attempting to read extended header in offset %lu\n", offset); + #endif + +- if (bdrv_pread(bs->file, offset, &ext, sizeof(ext)) != sizeof(ext)) { +- fprintf(stderr, "qcow2_read_extension: ERROR: " +- "pread fail from offset %" PRIu64 "\n", +- offset); ++ ret = bdrv_pread(bs->file, offset, &ext, sizeof(ext)); ++ if (ret < 0) { ++ error_setg_errno(errp, -ret, "qcow2_read_extension: ERROR: " ++ "pread fail from offset %" PRIu64, offset); + return 1; + } + be32_to_cpus(&ext.magic); +@@ -113,7 +114,7 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + printf("ext.magic = 0x%x\n", ext.magic); + #endif + if (ext.len > end_offset - offset) { +- error_report("Header extension too large"); ++ error_setg(errp, "Header extension too large"); + return -EINVAL; + } + +@@ -123,14 +124,16 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + + case QCOW2_EXT_MAGIC_BACKING_FORMAT: + if (ext.len >= sizeof(bs->backing_format)) { +- fprintf(stderr, "ERROR: ext_backing_format: len=%u too large" +- " (>=%zu)\n", +- ext.len, sizeof(bs->backing_format)); ++ error_setg(errp, "ERROR: ext_backing_format: len=%u too large" ++ " (>=%zu)", ext.len, sizeof(bs->backing_format)); + return 2; + } +- if (bdrv_pread(bs->file, offset , bs->backing_format, +- ext.len) != ext.len) ++ ret = bdrv_pread(bs->file, offset, bs->backing_format, ext.len); ++ if (ret < 0) { ++ error_setg_errno(errp, -ret, "ERROR: ext_backing_format: " ++ "Could not read format name"); + return 3; ++ } + bs->backing_format[ext.len] = '\0'; + #ifdef DEBUG_EXT + printf("Qcow2: Got format extension %s\n", bs->backing_format); +@@ -142,6 +145,8 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + void* feature_table = g_malloc0(ext.len + 2 * sizeof(Qcow2Feature)); + ret = bdrv_pread(bs->file, offset , feature_table, ext.len); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "ERROR: ext_feature_table: " ++ "Could not read table"); + return ret; + } + +@@ -161,6 +166,8 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, + + ret = bdrv_pread(bs->file, offset , uext->data, uext->len); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "ERROR: unknown extension: " ++ "Could not read data"); + return ret; + } + } +@@ -184,8 +191,8 @@ static void cleanup_unknown_header_ext(BlockDriverState *bs) + } + } + +-static void GCC_FMT_ATTR(2, 3) report_unsupported(BlockDriverState *bs, +- const char *fmt, ...) ++static void GCC_FMT_ATTR(3, 4) report_unsupported(BlockDriverState *bs, ++ Error **errp, const char *fmt, ...) + { + char msg[64]; + va_list ap; +@@ -194,17 +201,17 @@ static void GCC_FMT_ATTR(2, 3) report_unsupported(BlockDriverState *bs, + vsnprintf(msg, sizeof(msg), fmt, ap); + va_end(ap); + +- qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, +- bs->device_name, "qcow2", msg); ++ error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, bs->device_name, "qcow2", ++ msg); + } + + static void report_unsupported_feature(BlockDriverState *bs, +- Qcow2Feature *table, uint64_t mask) ++ Error **errp, Qcow2Feature *table, uint64_t mask) + { + while (table && table->name[0] != '\0') { + if (table->type == QCOW2_FEAT_TYPE_INCOMPATIBLE) { + if (mask & (1 << table->bit)) { +- report_unsupported(bs, "%.46s",table->name); ++ report_unsupported(bs, errp, "%.46s", table->name); + mask &= ~(1 << table->bit); + } + } +@@ -212,7 +219,8 @@ static void report_unsupported_feature(BlockDriverState *bs, + } + + if (mask) { +- report_unsupported(bs, "Unknown incompatible feature: %" PRIx64, mask); ++ report_unsupported(bs, errp, "Unknown incompatible feature: %" PRIx64, ++ mask); + } + } + +@@ -363,6 +371,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + ret = bdrv_pread(bs->file, 0, &header, sizeof(header)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read qcow2 header"); + goto fail; + } + be32_to_cpus(&header.magic); +@@ -380,11 +389,12 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + be32_to_cpus(&header.nb_snapshots); + + if (header.magic != QCOW_MAGIC) { ++ error_setg(errp, "Image is not in qcow2 format"); + ret = -EMEDIUMTYPE; + goto fail; + } + if (header.version < 2 || header.version > 3) { +- report_unsupported(bs, "QCOW version %d", header.version); ++ report_unsupported(bs, errp, "QCOW version %d", header.version); + ret = -ENOTSUP; + goto fail; + } +@@ -412,6 +422,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + ret = bdrv_pread(bs->file, sizeof(header), s->unknown_header_fields, + s->unknown_header_fields_size); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read unknown qcow2 header " ++ "fields"); + goto fail; + } + } +@@ -430,8 +442,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + if (s->incompatible_features & ~QCOW2_INCOMPAT_MASK) { + void *feature_table = NULL; + qcow2_read_extensions(bs, header.header_length, ext_end, +- &feature_table); +- report_unsupported_feature(bs, feature_table, ++ &feature_table, NULL); ++ report_unsupported_feature(bs, errp, feature_table, + s->incompatible_features & + ~QCOW2_INCOMPAT_MASK); + ret = -ENOTSUP; +@@ -442,8 +454,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + /* Corrupt images may not be written to unless they are being repaired + */ + if ((flags & BDRV_O_RDWR) && !(flags & BDRV_O_CHECK)) { +- error_report("qcow2: Image is corrupt; cannot be opened " +- "read/write."); ++ error_setg(errp, "qcow2: Image is corrupt; cannot be opened " ++ "read/write"); + ret = -EACCES; + goto fail; + } +@@ -451,7 +463,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + /* Check support for various header values */ + if (header.refcount_order != 4) { +- report_unsupported(bs, "%d bit reference counts", ++ report_unsupported(bs, errp, "%d bit reference counts", + 1 << header.refcount_order); + ret = -ENOTSUP; + goto fail; +@@ -459,10 +471,13 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + if (header.cluster_bits < MIN_CLUSTER_BITS || + header.cluster_bits > MAX_CLUSTER_BITS) { ++ error_setg(errp, "Unsupported cluster size: 2^%i", header.cluster_bits); + ret = -EINVAL; + goto fail; + } + if (header.crypt_method > QCOW_CRYPT_AES) { ++ error_setg(errp, "Unsupported encryption method: %i", ++ header.crypt_method); + ret = -EINVAL; + goto fail; + } +@@ -491,6 +506,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + l1_vm_state_index = size_to_l1(s, header.size); + if (l1_vm_state_index > INT_MAX) { ++ error_setg(errp, "Image is too big"); + ret = -EFBIG; + goto fail; + } +@@ -499,6 +515,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + /* the L1 table must contain at least enough entries to put + header.size bytes */ + if (s->l1_size < s->l1_vm_state_index) { ++ error_setg(errp, "L1 table is too small"); + ret = -EINVAL; + goto fail; + } +@@ -509,6 +526,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table, + s->l1_size * sizeof(uint64_t)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read L1 table"); + goto fail; + } + for(i = 0;i < s->l1_size; i++) { +@@ -529,6 +547,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + ret = qcow2_refcount_init(bs); + if (ret != 0) { ++ error_setg_errno(errp, -ret, "Could not initialize refcount handling"); + goto fail; + } + +@@ -536,7 +555,9 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + QTAILQ_INIT(&s->discards); + + /* read qcow2 extensions */ +- if (qcow2_read_extensions(bs, header.header_length, ext_end, NULL)) { ++ if (qcow2_read_extensions(bs, header.header_length, ext_end, NULL, ++ &local_err)) { ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } +@@ -550,6 +571,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + ret = bdrv_pread(bs->file, header.backing_file_offset, + bs->backing_file, len); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read backing file name"); + goto fail; + } + bs->backing_file[len] = '\0'; +@@ -557,6 +579,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + ret = qcow2_read_snapshots(bs); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read snapshots"); + goto fail; + } + +@@ -565,6 +588,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->autoclear_features = 0; + ret = qcow2_update_header(bs); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not update qcow2 header"); + goto fail; + } + } +@@ -579,6 +603,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + + ret = qcow2_check(bs, &result, BDRV_FIX_ERRORS); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not repair dirty image"); + goto fail; + } + } +@@ -587,8 +612,7 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + opts = qemu_opts_create_nofail(&qcow2_runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); + if (error_is_set(&local_err)) { +- qerror_report_err(local_err); +- error_free(local_err); ++ error_propagate(errp, local_err); + ret = -EINVAL; + goto fail; + } +@@ -609,8 +633,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + qemu_opts_del(opts); + + if (s->use_lazy_refcounts && s->qcow_version < 3) { +- qerror_report(ERROR_CLASS_GENERIC_ERROR, "Lazy refcounts require " +- "a qcow2 image with at least qemu 1.1 compatibility level"); ++ error_setg(errp, "Lazy refcounts require a qcow2 image with at least " ++ "qemu 1.1 compatibility level"); + ret = -EINVAL; + goto fail; + } +@@ -1333,7 +1357,8 @@ static int preallocate(BlockDriverState *bs) + static int qcow2_create2(const char *filename, int64_t total_size, + const char *backing_file, const char *backing_format, + int flags, size_t cluster_size, int prealloc, +- QEMUOptionParameter *options, int version) ++ QEMUOptionParameter *options, int version, ++ Error **errp) + { + /* Calculate cluster_bits */ + int cluster_bits; +@@ -1341,9 +1366,8 @@ static int qcow2_create2(const char *filename, int64_t total_size, + if (cluster_bits < MIN_CLUSTER_BITS || cluster_bits > MAX_CLUSTER_BITS || + (1 << cluster_bits) != cluster_size) + { +- error_report( +- "Cluster size must be a power of two between %d and %dk", +- 1 << MIN_CLUSTER_BITS, 1 << (MAX_CLUSTER_BITS - 10)); ++ error_setg(errp, "Cluster size must be a power of two between %d and " ++ "%dk", 1 << MIN_CLUSTER_BITS, 1 << (MAX_CLUSTER_BITS - 10)); + return -EINVAL; + } + +@@ -1362,15 +1386,18 @@ static int qcow2_create2(const char *filename, int64_t total_size, + BlockDriverState* bs; + QCowHeader header; + uint8_t* refcount_table; ++ Error *local_err = NULL; + int ret; + +- ret = bdrv_create_file(filename, options, NULL); ++ ret = bdrv_create_file(filename, options, &local_err); + if (ret < 0) { ++ error_propagate(errp, local_err); + return ret; + } + +- ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, NULL); ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { ++ error_propagate(errp, local_err); + return ret; + } + +@@ -1400,6 +1427,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + + ret = bdrv_pwrite(bs, 0, &header, sizeof(header)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not write qcow2 header"); + goto out; + } + +@@ -1409,6 +1437,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + g_free(refcount_table); + + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not write refcount table"); + goto out; + } + +@@ -1422,13 +1451,16 @@ static int qcow2_create2(const char *filename, int64_t total_size, + BlockDriver* drv = bdrv_find_format("qcow2"); + assert(drv != NULL); + ret = bdrv_open(bs, filename, NULL, +- BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, drv, NULL); ++ BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, drv, &local_err); + if (ret < 0) { ++ error_propagate(errp, local_err); + goto out; + } + + ret = qcow2_alloc_clusters(bs, 2 * cluster_size); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not allocate clusters for qcow2 " ++ "header and refcount table"); + goto out; + + } else if (ret != 0) { +@@ -1439,6 +1471,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + /* Okay, now that we have a valid image, let's give it the right size */ + ret = bdrv_truncate(bs, total_size * BDRV_SECTOR_SIZE); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not resize image"); + goto out; + } + +@@ -1446,6 +1479,8 @@ static int qcow2_create2(const char *filename, int64_t total_size, + if (backing_file) { + ret = bdrv_change_backing_file(bs, backing_file, backing_format); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not assign backing file '%s' " ++ "with format '%s'", backing_file, backing_format); + goto out; + } + } +@@ -1457,6 +1492,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + ret = preallocate(bs); + qemu_co_mutex_unlock(&s->lock); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not preallocate metadata"); + goto out; + } + } +@@ -1477,6 +1513,8 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + size_t cluster_size = DEFAULT_CLUSTER_SIZE; + int prealloc = 0; + int version = 2; ++ Error *local_err = NULL; ++ int ret; + + /* Read out options */ + while (options && options->name) { +@@ -1498,8 +1536,8 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + } else if (!strcmp(options->value.s, "metadata")) { + prealloc = 1; + } else { +- fprintf(stderr, "Invalid preallocation mode: '%s'\n", +- options->value.s); ++ error_setg(errp, "Invalid preallocation mode: '%s'", ++ options->value.s); + return -EINVAL; + } + } else if (!strcmp(options->name, BLOCK_OPT_COMPAT_LEVEL)) { +@@ -1508,8 +1546,8 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + } else if (!strcmp(options->value.s, "1.1")) { + version = 3; + } else { +- fprintf(stderr, "Invalid compatibility level: '%s'\n", +- options->value.s); ++ error_setg(errp, "Invalid compatibility level: '%s'", ++ options->value.s); + return -EINVAL; + } + } else if (!strcmp(options->name, BLOCK_OPT_LAZY_REFCOUNTS)) { +@@ -1519,19 +1557,23 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + } + + if (backing_file && prealloc) { +- fprintf(stderr, "Backing file and preallocation cannot be used at " +- "the same time\n"); ++ error_setg(errp, "Backing file and preallocation cannot be used at " ++ "the same time"); + return -EINVAL; + } + + if (version < 3 && (flags & BLOCK_FLAG_LAZY_REFCOUNTS)) { +- fprintf(stderr, "Lazy refcounts only supported with compatibility " +- "level 1.1 and above (use compat=1.1 or greater)\n"); ++ error_setg(errp, "Lazy refcounts only supported with compatibility " ++ "level 1.1 and above (use compat=1.1 or greater)"); + return -EINVAL; + } + +- return qcow2_create2(filename, sectors, backing_file, backing_fmt, flags, +- cluster_size, prealloc, options, version); ++ ret = qcow2_create2(filename, sectors, backing_file, backing_fmt, flags, ++ cluster_size, prealloc, options, version, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ } ++ return ret; + } + + static int qcow2_make_empty(BlockDriverState *bs) +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Use-dashes-instead-of-underscores-in-options.patch b/SOURCES/kvm-qcow2-Use-dashes-instead-of-underscores-in-options.patch new file mode 100644 index 0000000..d169a7d --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-dashes-instead-of-underscores-in-options.patch @@ -0,0 +1,152 @@ +From c8fa26b697c9ca4fc90909e9c93471ea8b616c76 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 17 Jul 2013 14:45:34 +0200 +Subject: [PATCH 32/38] qcow2: Use dashes instead of underscores in options + +Message-id: <1378736903-18489-33-git-send-email-kwolf@redhat.com> +Patchwork-id: 54219 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 32/32] qcow2: Use dashes instead of underscores in options +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This is what QMP wants to use. The options haven't been enabled in any +release yet, so we're still free to change them. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 64aa99d3e0333dea73d7505190659a02ca909292) + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 2 +- + block/qcow2.h | 8 ++++---- + tests/qemu-iotests/051 | 14 +++++++------- + tests/qemu-iotests/051.out | 30 +++++++++++++++--------------- + 4 files changed, 27 insertions(+), 27 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 9383990..abdc202 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -291,7 +291,7 @@ static QemuOptsList qcow2_runtime_opts = { + .head = QTAILQ_HEAD_INITIALIZER(qcow2_runtime_opts.head), + .desc = { + { +- .name = "lazy_refcounts", ++ .name = QCOW2_OPT_LAZY_REFCOUNTS, + .type = QEMU_OPT_BOOL, + .help = "Postpone refcount updates", + }, +diff --git a/block/qcow2.h b/block/qcow2.h +index 3b2d5cd..dba9771 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -59,10 +59,10 @@ + #define DEFAULT_CLUSTER_SIZE 65536 + + +-#define QCOW2_OPT_LAZY_REFCOUNTS "lazy_refcounts" +-#define QCOW2_OPT_DISCARD_REQUEST "pass_discard_request" +-#define QCOW2_OPT_DISCARD_SNAPSHOT "pass_discard_snapshot" +-#define QCOW2_OPT_DISCARD_OTHER "pass_discard_other" ++#define QCOW2_OPT_LAZY_REFCOUNTS "lazy-refcounts" ++#define QCOW2_OPT_DISCARD_REQUEST "pass-discard-request" ++#define QCOW2_OPT_DISCARD_SNAPSHOT "pass-discard-snapshot" ++#define QCOW2_OPT_DISCARD_OTHER "pass-discard-other" + + typedef struct QCowHeader { + uint32_t magic; +diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051 +index 1cf8bf7..1f39c6a 100755 +--- a/tests/qemu-iotests/051 ++++ b/tests/qemu-iotests/051 +@@ -72,11 +72,11 @@ echo + echo === Enable and disable lazy refcounting on the command line, plus some invalid values === + echo + +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts=on +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts=off +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts= +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts=42 +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts=foo ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=on ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=off ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts= ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=42 ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=foo + + + echo +@@ -85,8 +85,8 @@ echo + + _make_test_img -ocompat=0.10 $size + +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts=on +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy_refcounts=off ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=on ++run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=off + + echo + echo === No medium === +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 8630382..9588d0c 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -22,35 +22,35 @@ QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: could not + + === Enable and disable lazy refcounting on the command line, plus some invalid values === + +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on + QEMU 1.5.50 monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=off ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off + QEMU 1.5.50 monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts= +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=: Parameter 'lazy_refcounts' expects 'on' or 'off' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts= ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: Parameter 'lazy-refcounts' expects 'on' or 'off' ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: could not open disk image TEST_DIR/t.qcow2: Invalid argument + +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=42 +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=42: Parameter 'lazy_refcounts' expects 'on' or 'off' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=42: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42 ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: Parameter 'lazy-refcounts' expects 'on' or 'off' ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: could not open disk image TEST_DIR/t.qcow2: Invalid argument + +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=foo +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=foo: Parameter 'lazy_refcounts' expects 'on' or 'off' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=foo: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: Parameter 'lazy-refcounts' expects 'on' or 'off' ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: could not open disk image TEST_DIR/t.qcow2: Invalid argument + + + === With version 2 images enabling lazy refcounts must fail === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: could not open disk image TEST_DIR/t.qcow2: Invalid argument + +-Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=off ++Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off + QEMU 1.5.50 monitor - type 'help' for more information + (qemu) qququiquit + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Use-int64_t-for-in-memory-reftable-size.patch b/SOURCES/kvm-qcow2-Use-int64_t-for-in-memory-reftable-size.patch new file mode 100644 index 0000000..8a70b61 --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-int64_t-for-in-memory-reftable-size.patch @@ -0,0 +1,62 @@ +From 47b574df6debd01336650992a1faed4bfeec4814 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:15 +0200 +Subject: [PATCH 21/42] qcow2: Use int64_t for in-memory reftable size + +Message-id: <1434212556-3927-22-git-send-email-mreitz@redhat.com> +Patchwork-id: 66040 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 21/42] qcow2: Use int64_t for in-memory reftable size +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Use int64_t for the entry count of the in-memory refcount table +throughout the check functions. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 713d9675e0e31c627d08b6a33d3a92e4b8505b40) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 0d10865..7e2bb7d 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1056,7 +1056,7 @@ fail: + static void inc_refcounts(BlockDriverState *bs, + BdrvCheckResult *res, + uint16_t *refcount_table, +- int refcount_table_size, ++ int64_t refcount_table_size, + int64_t offset, int64_t size) + { + BDRVQcowState *s = bs->opaque; +@@ -1099,7 +1099,7 @@ enum { + * error occurred. + */ + static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, +- uint16_t *refcount_table, int refcount_table_size, int64_t l2_offset, ++ uint16_t *refcount_table, int64_t refcount_table_size, int64_t l2_offset, + int flags) + { + BDRVQcowState *s = bs->opaque; +@@ -1209,7 +1209,7 @@ fail: + static int check_refcounts_l1(BlockDriverState *bs, + BdrvCheckResult *res, + uint16_t *refcount_table, +- int refcount_table_size, ++ int64_t refcount_table_size, + int64_t l1_table_offset, int l1_size, + int flags) + { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Use-negated-overflow-check-mask.patch b/SOURCES/kvm-qcow2-Use-negated-overflow-check-mask.patch new file mode 100644 index 0000000..1e239b0 --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-negated-overflow-check-mask.patch @@ -0,0 +1,262 @@ +From ca635f6c3ae10562a2165590bb84667aa61ad12f Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:29 +0100 +Subject: [PATCH 36/87] qcow2: Use negated overflow check mask + +RH-Author: Max Reitz +Message-id: <1383604354-12743-39-git-send-email-mreitz@redhat.com> +Patchwork-id: 55338 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 38/43] qcow2: Use negated overflow check mask +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +In qcow2_check_metadata_overlap and qcow2_pre_write_overlap_check, +change the parameter signifying the checks to perform from its current +positive form to a negative one, i.e., it will no longer explicitly +specify every check to perform but rather a mask of checks not to +perform. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 231bb267644ee3a9ebfd9c7f42d5d41610194b45) + +Signed-off-by: Max Reitz + +Conflicts: + block/qcow2-cluster.c + +Conflicts because downstream does not contain +expand_zero_clusters_in_l1(). +--- + block/qcow2-cache.c | 8 +++----- + block/qcow2-cluster.c | 9 ++++----- + block/qcow2-refcount.c | 22 ++++++++++------------ + block/qcow2-snapshot.c | 12 +++++------- + block/qcow2.c | 5 ++--- + block/qcow2.h | 4 ++-- + 6 files changed, 26 insertions(+), 34 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cache.c | 8 +++----- + block/qcow2-cluster.c | 9 ++++----- + block/qcow2-refcount.c | 22 ++++++++++------------ + block/qcow2-snapshot.c | 12 +++++------- + block/qcow2.c | 5 ++--- + block/qcow2.h | 4 ++-- + 6 files changed, 26 insertions(+), 34 deletions(-) + +diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c +index 7bcae09..eb1d69b 100644 +--- a/block/qcow2-cache.c ++++ b/block/qcow2-cache.c +@@ -115,15 +115,13 @@ static int qcow2_cache_entry_flush(BlockDriverState *bs, Qcow2Cache *c, int i) + } + + if (c == s->refcount_block_cache) { +- ret = qcow2_pre_write_overlap_check(bs, +- QCOW2_OL_DEFAULT & ~QCOW2_OL_REFCOUNT_BLOCK, ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_REFCOUNT_BLOCK, + c->entries[i].offset, s->cluster_size); + } else if (c == s->l2_table_cache) { +- ret = qcow2_pre_write_overlap_check(bs, +- QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L2, ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_ACTIVE_L2, + c->entries[i].offset, s->cluster_size); + } else { +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ ret = qcow2_pre_write_overlap_check(bs, 0, + c->entries[i].offset, s->cluster_size); + } + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index c05f182..5d13515 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -83,8 +83,8 @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + + /* the L1 position has not yet been updated, so these clusters must + * indeed be completely free */ +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, +- new_l1_table_offset, new_l1_size2); ++ ret = qcow2_pre_write_overlap_check(bs, 0, new_l1_table_offset, ++ new_l1_size2); + if (ret < 0) { + goto fail; + } +@@ -160,8 +160,7 @@ int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index) + buf[i] = cpu_to_be64(s->l1_table[l1_start_index + i]); + } + +- ret = qcow2_pre_write_overlap_check(bs, +- QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L1, ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_ACTIVE_L1, + s->l1_table_offset + 8 * l1_start_index, sizeof(buf)); + if (ret < 0) { + return ret; +@@ -386,7 +385,7 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs, + &s->aes_encrypt_key); + } + +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ ret = qcow2_pre_write_overlap_check(bs, 0, + cluster_offset + n_start * BDRV_SECTOR_SIZE, n * BDRV_SECTOR_SIZE); + if (ret < 0) { + goto out; +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 5c5683d..91c446b 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1291,9 +1291,8 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res, + } + + if (l2_dirty) { +- ret = qcow2_pre_write_overlap_check(bs, +- QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L2, l2_offset, +- s->cluster_size); ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_ACTIVE_L2, ++ l2_offset, s->cluster_size); + if (ret < 0) { + fprintf(stderr, "ERROR: Could not write L2 table; metadata " + "overlap check failed: %s\n", strerror(-ret)); +@@ -1334,8 +1333,7 @@ static int write_reftable_entry(BlockDriverState *bs, int rt_index) + buf[i] = cpu_to_be64(s->refcount_table[rt_start_index + i]); + } + +- ret = qcow2_pre_write_overlap_check(bs, +- QCOW2_OL_DEFAULT & ~QCOW2_OL_REFCOUNT_TABLE, ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_REFCOUNT_TABLE, + s->refcount_table_offset + rt_start_index * sizeof(uint64_t), + sizeof(buf)); + if (ret < 0) { +@@ -1386,8 +1384,7 @@ static int64_t realloc_refcount_block(BlockDriverState *bs, int reftable_index, + + /* new block has not yet been entered into refcount table, therefore it is + * no refcount block yet (regarding this check) */ +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, new_offset, +- s->cluster_size); ++ ret = qcow2_pre_write_overlap_check(bs, 0, new_offset, s->cluster_size); + if (ret < 0) { + fprintf(stderr, "Could not write refcount block; metadata overlap " + "check failed: %s\n", strerror(-ret)); +@@ -1619,8 +1616,8 @@ fail: + * looking for overlaps with important metadata sections (L1/L2 tables etc.), + * i.e. a sanity check without relying on the refcount tables. + * +- * The chk parameter specifies exactly what checks to perform (being a bitmask +- * of QCow2MetadataOverlap values). ++ * The ign parameter specifies what checks not to perform (being a bitmask of ++ * QCow2MetadataOverlap values), i.e., what sections to ignore. + * + * Returns: + * - 0 if writing to this offset will not affect the mentioned metadata +@@ -1628,10 +1625,11 @@ fail: + * - a negative value (-errno) indicating an error while performing a check, + * e.g. when bdrv_read failed on QCOW2_OL_INACTIVE_L2 + */ +-int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, ++int qcow2_check_metadata_overlap(BlockDriverState *bs, int ign, int64_t offset, + int64_t size) + { + BDRVQcowState *s = bs->opaque; ++ int chk = QCOW2_OL_DEFAULT & ~ign; + int i, j; + + if (!size) { +@@ -1747,10 +1745,10 @@ static const char *metadata_ol_names[] = { + * Returns 0 if there were neither overlaps nor errors while checking for + * overlaps; or a negative value (-errno) on error. + */ +-int qcow2_pre_write_overlap_check(BlockDriverState *bs, int chk, int64_t offset, ++int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset, + int64_t size) + { +- int ret = qcow2_check_metadata_overlap(bs, chk, offset, size); ++ int ret = qcow2_check_metadata_overlap(bs, ign, offset, size); + + if (ret < 0) { + return ret; +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index 450e4f5..aa88c51 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -191,8 +191,7 @@ static int qcow2_write_snapshots(BlockDriverState *bs) + + /* The snapshot list position has not yet been updated, so these clusters + * must indeed be completely free */ +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, offset, +- snapshots_size); ++ ret = qcow2_pre_write_overlap_check(bs, 0, offset, snapshots_size); + if (ret < 0) { + return ret; + } +@@ -372,8 +371,8 @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) + l1_table[i] = cpu_to_be64(s->l1_table[i]); + } + +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, +- sn->l1_table_offset, s->l1_size * sizeof(uint64_t)); ++ ret = qcow2_pre_write_overlap_check(bs, 0, sn->l1_table_offset, ++ s->l1_size * sizeof(uint64_t)); + if (ret < 0) { + goto fail; + } +@@ -490,9 +489,8 @@ int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id) + goto fail; + } + +- ret = qcow2_pre_write_overlap_check(bs, +- QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L1, +- s->l1_table_offset, cur_l1_bytes); ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_ACTIVE_L1, ++ s->l1_table_offset, cur_l1_bytes); + if (ret < 0) { + goto fail; + } +diff --git a/block/qcow2.c b/block/qcow2.c +index 8b73518..ac5ed47 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -964,7 +964,7 @@ static coroutine_fn int qcow2_co_writev(BlockDriverState *bs, + cur_nr_sectors * 512); + } + +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, ++ ret = qcow2_pre_write_overlap_check(bs, 0, + cluster_offset + index_in_cluster * BDRV_SECTOR_SIZE, + cur_nr_sectors * BDRV_SECTOR_SIZE); + if (ret < 0) { +@@ -1748,8 +1748,7 @@ static int qcow2_write_compressed(BlockDriverState *bs, int64_t sector_num, + } + cluster_offset &= s->cluster_offset_mask; + +- ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, +- cluster_offset, out_len); ++ ret = qcow2_pre_write_overlap_check(bs, 0, cluster_offset, out_len); + if (ret < 0) { + goto fail; + } +diff --git a/block/qcow2.h b/block/qcow2.h +index 10b7bf4..64ad43c 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -424,9 +424,9 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + + void qcow2_process_discards(BlockDriverState *bs, int ret); + +-int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, ++int qcow2_check_metadata_overlap(BlockDriverState *bs, int ign, int64_t offset, + int64_t size); +-int qcow2_pre_write_overlap_check(BlockDriverState *bs, int chk, int64_t offset, ++int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset, + int64_t size); + + /* qcow2-cluster.c functions */ +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Use-pread-for-inactive-L1-in-overlap-check.patch b/SOURCES/kvm-qcow2-Use-pread-for-inactive-L1-in-overlap-check.patch new file mode 100644 index 0000000..f4061bd --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-pread-for-inactive-L1-in-overlap-check.patch @@ -0,0 +1,61 @@ +From 712a6ef0d0d3bbc91953305ad8e7e96f82f19cf0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:27 +0100 +Subject: [PATCH 34/87] qcow2: Use pread for inactive L1 in overlap check + +RH-Author: Max Reitz +Message-id: <1383604354-12743-37-git-send-email-mreitz@redhat.com> +Patchwork-id: 55336 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 36/43] qcow2: Use pread for inactive L1 in overlap check +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Currently, qcow2_check_metadata_overlap uses bdrv_read to read inactive +L1 tables from disk. The number of sectors to read is calculated through +a truncating integer division, therefore, if the L1 table size is not a +multiple of the sector size, the final entries will not be read and +their entries in memory remain undefined (from the g_malloc). +Using bdrv_pread fixes this. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 998b959c1e59044f5d5f64c482f4ce8facc8e0bc) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 34fcf2f..5c5683d 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1701,12 +1701,11 @@ int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, + for (i = 0; i < s->nb_snapshots; i++) { + uint64_t l1_ofs = s->snapshots[i].l1_table_offset; + uint32_t l1_sz = s->snapshots[i].l1_size; +- uint64_t *l1 = g_malloc(l1_sz * sizeof(uint64_t)); ++ uint64_t l1_sz2 = l1_sz * sizeof(uint64_t); ++ uint64_t *l1 = g_malloc(l1_sz2); + int ret; + +- ret = bdrv_read(bs->file, l1_ofs / BDRV_SECTOR_SIZE, (uint8_t *)l1, +- l1_sz * sizeof(uint64_t) / BDRV_SECTOR_SIZE); +- ++ ret = bdrv_pread(bs->file, l1_ofs, l1, l1_sz2); + if (ret < 0) { + g_free(l1); + return ret; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Use-qcow2_signal_corruption-for-overlaps.patch b/SOURCES/kvm-qcow2-Use-qcow2_signal_corruption-for-overlaps.patch new file mode 100644 index 0000000..eb56630 --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-qcow2_signal_corruption-for-overlaps.patch @@ -0,0 +1,135 @@ +From e7eca18cb5fec2c7c99b8e0335d630cc368f712b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:03 +0200 +Subject: [PATCH 09/42] qcow2: Use qcow2_signal_corruption() for overlaps +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1434212556-3927-10-git-send-email-mreitz@redhat.com> +Patchwork-id: 66028 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 09/42] qcow2: Use qcow2_signal_corruption() for overlaps +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +Use the new function in case of a failed overlap check. + +This changes output in case of corruption, so adapt iotest 060's +reference output accordingly. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Benoît Canet +Message-id: 1409926039-29044-4-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit adb435522b86b3fca2324cb8c94e17b55ae071f1) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/qcow2-refcount.c + +qcow2_pre_write_overlap_check() did not use qapi_event_send_*() +downstream, but that code is being removed anyway. + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 21 +++------------------ + tests/qemu-iotests/060.out | 10 +++++----- + 2 files changed, 8 insertions(+), 23 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 6fa6daf..dbcc4c6 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -26,7 +26,6 @@ + #include "block/block_int.h" + #include "block/qcow2.h" + #include "qemu/range.h" +-#include "qapi/qmp/types.h" + + static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size); + static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, +@@ -1795,25 +1794,11 @@ int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset, + return ret; + } else if (ret > 0) { + int metadata_ol_bitnr = ffs(ret) - 1; +- char *message; +- QObject *data; +- + assert(metadata_ol_bitnr < QCOW2_OL_MAX_BITNR); + +- fprintf(stderr, "qcow2: Preventing invalid write on metadata (overlaps " +- "with %s); image marked as corrupt.\n", +- metadata_ol_names[metadata_ol_bitnr]); +- message = g_strdup_printf("Prevented %s overwrite", +- metadata_ol_names[metadata_ol_bitnr]); +- data = qobject_from_jsonf("{ 'device': %s, 'msg': %s, 'offset': %" +- PRId64 ", 'size': %" PRId64 ", 'fatal': true }", +- bs->device_name, message, offset, size); +- monitor_protocol_event(QEVENT_BLOCK_IMAGE_CORRUPTED, data); +- g_free(message); +- qobject_decref(data); +- +- qcow2_mark_corrupt(bs); +- bs->drv = NULL; /* make BDS unusable */ ++ qcow2_signal_corruption(bs, true, offset, size, "Preventing invalid " ++ "write on metadata (overlaps with %s)", ++ metadata_ol_names[metadata_ol_bitnr]); + return -EIO; + } + +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index c27c952..30806da 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -8,7 +8,7 @@ ERROR cluster 3 refcount=1 reference=3 + 1 errors were found on the image. + Data may be corrupted, or further writes to the image may corrupt it. + incompatible_features 0x0 +-qcow2: Preventing invalid write on metadata (overlaps with active L1 table); image marked as corrupt. ++qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with active L1 table); further corruption events will be suppressed + write failed: Input/output error + incompatible_features 0x2 + qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write +@@ -24,7 +24,7 @@ ERROR cluster 2 refcount=1 reference=2 + 2 errors were found on the image. + Data may be corrupted, or further writes to the image may corrupt it. + incompatible_features 0x0 +-qcow2: Preventing invalid write on metadata (overlaps with refcount block); image marked as corrupt. ++qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with refcount block); further corruption events will be suppressed + write failed: Input/output error + incompatible_features 0x2 + Repairing refcount block 0 refcount=2 +@@ -56,7 +56,7 @@ Data may be corrupted, or further writes to the image may corrupt it. + 1 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + incompatible_features 0x0 +-qcow2: Preventing invalid write on metadata (overlaps with inactive L2 table); image marked as corrupt. ++qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with inactive L2 table); further corruption events will be suppressed + write failed: Input/output error + incompatible_features 0x2 + Repairing cluster 4 refcount=1 reference=2 +@@ -88,7 +88,7 @@ wrote 65536/65536 bytes at offset 536870912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + discard 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qcow2: Preventing invalid write on metadata (overlaps with active L2 table); image marked as corrupt. ++qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with active L2 table); further corruption events will be suppressed + blkdebug: Suspended request '0' + write failed: Input/output error + blkdebug: Resuming request '0' +@@ -99,6 +99,6 @@ aio_write failed: No medium found + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qcow2: Preventing invalid write on metadata (overlaps with qcow2_header); image marked as corrupt. ++qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with qcow2_header); further corruption events will be suppressed + write failed: Input/output error + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Use-sizeof-refcount_table.patch b/SOURCES/kvm-qcow2-Use-sizeof-refcount_table.patch new file mode 100644 index 0000000..e976f43 --- /dev/null +++ b/SOURCES/kvm-qcow2-Use-sizeof-refcount_table.patch @@ -0,0 +1,47 @@ +From be34caa9498a41766cdedf43613edf2e9600d896 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:13 +0200 +Subject: [PATCH 19/42] qcow2: Use sizeof(**refcount_table) + +Message-id: <1434212556-3927-20-git-send-email-mreitz@redhat.com> +Patchwork-id: 66038 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 19/42] qcow2: Use sizeof(**refcount_table) +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1129893 + +When implementing variable refcounts, we want to be able to easily find +all the places in qemu which are tied to a certain refcount order. +Replace sizeof(uint16_t) in the check code by sizeof(**refcount_table) +so we can later find it more easily. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 78fb328e854542d79bebe54f3a426cba6d46dbf1) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 08b2b62..cb78f05 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1613,7 +1613,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res, + *nb_clusters); + memset(&(*refcount_table)[old_nb_clusters], 0, + (*nb_clusters - old_nb_clusters) * +- sizeof(uint16_t)); ++ sizeof(**refcount_table)); + } + (*refcount_table)[cluster]--; + inc_refcounts(bs, res, *refcount_table, *nb_clusters, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-Validate-active-L1-table-offset-and-size-CVE-2.patch b/SOURCES/kvm-qcow2-Validate-active-L1-table-offset-and-size-CVE-2.patch new file mode 100644 index 0000000..bbb4cea --- /dev/null +++ b/SOURCES/kvm-qcow2-Validate-active-L1-table-offset-and-size-CVE-2.patch @@ -0,0 +1,120 @@ +From fdbe21cc29a983e05b6df725a75b1a1b15d7795e Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:32 +0100 +Subject: [PATCH 25/49] qcow2: Validate active L1 table offset and size (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-26-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 25/48] qcow2: Validate active L1 table offset and size (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +This avoids an unbounded allocation. + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 16 ++++++++++++++++ + tests/qemu-iotests/080 | 18 ++++++++++++++++++ + tests/qemu-iotests/080.out | 11 +++++++++++ + 3 files changed, 45 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 8c74dea..8be82f0 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -641,6 +641,13 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + s->nb_snapshots = header.nb_snapshots; + + /* read the level 1 table */ ++ if (header.l1_size > 0x2000000) { ++ /* 32 MB L1 table is enough for 2 PB images at 64k cluster size ++ * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */ ++ error_setg(errp, "Active L1 table too large"); ++ ret = -EFBIG; ++ goto fail; ++ } + s->l1_size = header.l1_size; + + l1_vm_state_index = size_to_l1(s, header.size); +@@ -658,7 +665,16 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + ret = -EINVAL; + goto fail; + } ++ ++ ret = validate_table_offset(bs, header.l1_table_offset, ++ header.l1_size, sizeof(uint64_t)); ++ if (ret < 0) { ++ error_setg(errp, "Invalid L1 table offset"); ++ goto fail; ++ } + s->l1_table_offset = header.l1_table_offset; ++ ++ + if (s->l1_size > 0) { + s->l1_table = g_malloc0( + align_offset(s->l1_size * sizeof(uint64_t), 512)); +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 8a8b460..7255b6c 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -45,6 +45,8 @@ _supported_os Linux + header_size=104 + + offset_backing_file_offset=8 ++offset_l1_size=36 ++offset_l1_table_offset=40 + offset_refcount_table_offset=48 + offset_refcount_table_clusters=56 + offset_nb_snapshots=60 +@@ -117,6 +119,22 @@ poke_file "$TEST_IMG" "$offset_nb_snapshots" "\x00\x01\x00\x00" + { $QEMU_IMG snapshot -c test $TEST_IMG; } 2>&1 | _filter_testdir + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid L1 table ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_l1_size" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_l1_size" "\x7f\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++poke_file "$TEST_IMG" "$offset_l1_table_offset" "\x7f\xff\xff\xff\xff\xff\x00\x00" ++poke_file "$TEST_IMG" "$offset_l1_size" "\x00\x00\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++poke_file "$TEST_IMG" "$offset_l1_table_offset" "\x12\x34\x56\x78\x90\xab\xcd\xef" ++poke_file "$TEST_IMG" "$offset_l1_size" "\x00\x00\x00\x01" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index b06f47f..4ec2545 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -47,4 +47,15 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + qemu-img: Could not create snapshot 'test': -27 (File too large) + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== Invalid L1 table == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Active L1 table too large ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Active L1 table too large ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid L1 table offset ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid L1 table offset ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Validate-refcount-table-offset.patch b/SOURCES/kvm-qcow2-Validate-refcount-table-offset.patch new file mode 100644 index 0000000..fc03d1a --- /dev/null +++ b/SOURCES/kvm-qcow2-Validate-refcount-table-offset.patch @@ -0,0 +1,135 @@ +From 6707cb9501355de8244d224b3a8140c0fe62a983 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:30 +0100 +Subject: [PATCH 23/49] qcow2: Validate refcount table offset + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-24-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 23/48] qcow2: Validate refcount table offset +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +The end of the refcount table must not exceed INT64_MAX so that integer +overflows are avoided. + +Also check for misaligned refcount table. Such images are invalid and +probably the result of data corruption. Error out to avoid further +corruption. + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 33 +++++++++++++++++++++++++++++++++ + tests/qemu-iotests/080 | 13 +++++++++++++ + tests/qemu-iotests/080.out | 10 ++++++++++ + 3 files changed, 56 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index a7780ac..5513fac 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -329,6 +329,32 @@ static int qcow2_check(BlockDriverState *bs, BdrvCheckResult *result, + return ret; + } + ++static int validate_table_offset(BlockDriverState *bs, uint64_t offset, ++ uint64_t entries, size_t entry_len) ++{ ++ BDRVQcowState *s = bs->opaque; ++ uint64_t size; ++ ++ /* Use signed INT64_MAX as the maximum even for uint64_t header fields, ++ * because values will be passed to qemu functions taking int64_t. */ ++ if (entries > INT64_MAX / entry_len) { ++ return -EINVAL; ++ } ++ ++ size = entries * entry_len; ++ ++ if (INT64_MAX - size < offset) { ++ return -EINVAL; ++ } ++ ++ /* Tables must be cluster aligned */ ++ if (offset & (s->cluster_size - 1)) { ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ + static QemuOptsList qcow2_runtime_opts = { + .name = "qcow2", + .head = QTAILQ_HEAD_INITIALIZER(qcow2_runtime_opts.head), +@@ -589,6 +615,13 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ ret = validate_table_offset(bs, s->refcount_table_offset, ++ s->refcount_table_size, sizeof(uint64_t)); ++ if (ret < 0) { ++ error_setg(errp, "Invalid reference count table offset"); ++ goto fail; ++ } ++ + s->snapshots_offset = header.snapshots_offset; + s->nb_snapshots = header.nb_snapshots; + +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index 6179e05..f58ac73 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -45,6 +45,7 @@ _supported_os Linux + header_size=104 + + offset_backing_file_offset=8 ++offset_refcount_table_offset=48 + offset_refcount_table_clusters=56 + offset_header_size=100 + offset_ext_magic=$header_size +@@ -76,6 +77,18 @@ poke_file "$TEST_IMG" "$offset_refcount_table_clusters" "\xff\xff\xff\xff" + poke_file "$TEST_IMG" "$offset_refcount_table_clusters" "\x00\x02\x00\x01" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Misaligned refcount table ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_refcount_table_offset" "\x12\x34\x56\x78\x90\xab\xcd\xef" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== Huge refcount offset ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_refcount_table_offset" "\xff\xff\xff\xff\xff\xff\x00\x00" ++poke_file "$TEST_IMG" "$offset_refcount_table_clusters" "\x00\x00\x00\x7f" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index 6fef6d9..f919b58 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -20,4 +20,14 @@ qemu-io: can't open device TEST_DIR/t.qcow2: Reference count table too large + no file open, try 'help open' + qemu-io: can't open device TEST_DIR/t.qcow2: Reference count table too large + no file open, try 'help open' ++ ++== Misaligned refcount table == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid reference count table offset ++no file open, try 'help open' ++ ++== Huge refcount offset == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid reference count table offset ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Validate-snapshot-table-offset-size-CVE-2014-0.patch b/SOURCES/kvm-qcow2-Validate-snapshot-table-offset-size-CVE-2014-0.patch new file mode 100644 index 0000000..d7ff2be --- /dev/null +++ b/SOURCES/kvm-qcow2-Validate-snapshot-table-offset-size-CVE-2014-0.patch @@ -0,0 +1,230 @@ +From 2318681bf850996a3e9c682ca3290aa9f05fd15c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:31 +0100 +Subject: [PATCH 24/49] qcow2: Validate snapshot table offset/size (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-25-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 24/48] qcow2: Validate snapshot table offset/size (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +This avoid unbounded memory allocation and fixes a potential buffer +overflow on 32 bit hosts. + +Signed-off-by: Kevin Wolf +--- + block/qcow2-snapshot.c | 29 ++++------------------------- + block/qcow2.c | 15 +++++++++++++++ + block/qcow2.h | 29 ++++++++++++++++++++++++++++- + tests/qemu-iotests/080 | 27 +++++++++++++++++++++++++++ + tests/qemu-iotests/080.out | 17 +++++++++++++++++ + 5 files changed, 91 insertions(+), 26 deletions(-) + +diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c +index aa88c51..5d73506 100644 +--- a/block/qcow2-snapshot.c ++++ b/block/qcow2-snapshot.c +@@ -26,31 +26,6 @@ + #include "block/block_int.h" + #include "block/qcow2.h" + +-typedef struct QEMU_PACKED QCowSnapshotHeader { +- /* header is 8 byte aligned */ +- uint64_t l1_table_offset; +- +- uint32_t l1_size; +- uint16_t id_str_size; +- uint16_t name_size; +- +- uint32_t date_sec; +- uint32_t date_nsec; +- +- uint64_t vm_clock_nsec; +- +- uint32_t vm_state_size; +- uint32_t extra_data_size; /* for extension */ +- /* extra data follows */ +- /* id_str follows */ +- /* name follows */ +-} QCowSnapshotHeader; +- +-typedef struct QEMU_PACKED QCowSnapshotExtraData { +- uint64_t vm_state_size_large; +- uint64_t disk_size; +-} QCowSnapshotExtraData; +- + void qcow2_free_snapshots(BlockDriverState *bs) + { + BDRVQcowState *s = bs->opaque; +@@ -334,6 +309,10 @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) + uint64_t *l1_table = NULL; + int64_t l1_table_offset; + ++ if (s->nb_snapshots >= QCOW_MAX_SNAPSHOTS) { ++ return -EFBIG; ++ } ++ + memset(sn, 0, sizeof(*sn)); + + /* Generate an ID if it wasn't passed */ +diff --git a/block/qcow2.c b/block/qcow2.c +index 5513fac..8c74dea 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -622,6 +622,21 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + ++ /* Snapshot table offset/length */ ++ if (header.nb_snapshots > QCOW_MAX_SNAPSHOTS) { ++ error_setg(errp, "Too many snapshots"); ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ ret = validate_table_offset(bs, header.snapshots_offset, ++ header.nb_snapshots, ++ sizeof(QCowSnapshotHeader)); ++ if (ret < 0) { ++ error_setg(errp, "Invalid snapshot table offset"); ++ goto fail; ++ } ++ + s->snapshots_offset = header.snapshots_offset; + s->nb_snapshots = header.nb_snapshots; + +diff --git a/block/qcow2.h b/block/qcow2.h +index 4a653c5..5efc96e 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -38,6 +38,7 @@ + #define QCOW_CRYPT_AES 1 + + #define QCOW_MAX_CRYPT_CLUSTERS 32 ++#define QCOW_MAX_SNAPSHOTS 65536 + + /* indicate that the refcount of the referenced cluster is exactly one. */ + #define QCOW_OFLAG_COPIED (1LL << 63) +@@ -97,6 +98,32 @@ typedef struct QCowHeader { + uint32_t header_length; + } QCowHeader; + ++typedef struct QEMU_PACKED QCowSnapshotHeader { ++ /* header is 8 byte aligned */ ++ uint64_t l1_table_offset; ++ ++ uint32_t l1_size; ++ uint16_t id_str_size; ++ uint16_t name_size; ++ ++ uint32_t date_sec; ++ uint32_t date_nsec; ++ ++ uint64_t vm_clock_nsec; ++ ++ uint32_t vm_state_size; ++ uint32_t extra_data_size; /* for extension */ ++ /* extra data follows */ ++ /* id_str follows */ ++ /* name follows */ ++} QCowSnapshotHeader; ++ ++typedef struct QEMU_PACKED QCowSnapshotExtraData { ++ uint64_t vm_state_size_large; ++ uint64_t disk_size; ++} QCowSnapshotExtraData; ++ ++ + typedef struct QCowSnapshot { + uint64_t l1_table_offset; + uint32_t l1_size; +@@ -202,7 +229,7 @@ typedef struct BDRVQcowState { + AES_KEY aes_decrypt_key; + uint64_t snapshots_offset; + int snapshots_size; +- int nb_snapshots; ++ unsigned int nb_snapshots; + QCowSnapshot *snapshots; + + int flags; +diff --git a/tests/qemu-iotests/080 b/tests/qemu-iotests/080 +index f58ac73..8a8b460 100755 +--- a/tests/qemu-iotests/080 ++++ b/tests/qemu-iotests/080 +@@ -47,6 +47,8 @@ header_size=104 + offset_backing_file_offset=8 + offset_refcount_table_offset=48 + offset_refcount_table_clusters=56 ++offset_nb_snapshots=60 ++offset_snapshots_offset=64 + offset_header_size=100 + offset_ext_magic=$header_size + offset_ext_size=$((header_size + 4)) +@@ -90,6 +92,31 @@ poke_file "$TEST_IMG" "$offset_refcount_table_offset" "\xff\xff\xff\xff\xff\xff\ + poke_file "$TEST_IMG" "$offset_refcount_table_clusters" "\x00\x00\x00\x7f" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo ++echo "== Invalid snapshot table ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_nb_snapshots" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_nb_snapshots" "\x7f\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++poke_file "$TEST_IMG" "$offset_snapshots_offset" "\xff\xff\xff\xff\xff\xff\x00\x00" ++poke_file "$TEST_IMG" "$offset_nb_snapshots" "\x00\x00\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++poke_file "$TEST_IMG" "$offset_snapshots_offset" "\x12\x34\x56\x78\x90\xab\xcd\xef" ++poke_file "$TEST_IMG" "$offset_nb_snapshots" "\x00\x00\x00\x00" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo ++echo "== Hitting snapshot table size limit ==" ++_make_test_img 64M ++# Put the refcount table in a more or less safe place (16 MB) ++poke_file "$TEST_IMG" "$offset_snapshots_offset" "\x00\x00\x00\x00\x01\x00\x00\x00" ++poke_file "$TEST_IMG" "$offset_nb_snapshots" "\x00\x01\x00\x00" ++{ $QEMU_IMG snapshot -c test $TEST_IMG; } 2>&1 | _filter_testdir ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/080.out b/tests/qemu-iotests/080.out +index f919b58..b06f47f 100644 +--- a/tests/qemu-iotests/080.out ++++ b/tests/qemu-iotests/080.out +@@ -30,4 +30,21 @@ no file open, try 'help open' + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + qemu-io: can't open device TEST_DIR/t.qcow2: Invalid reference count table offset + no file open, try 'help open' ++ ++== Invalid snapshot table == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.qcow2: Too many snapshots ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Too many snapshots ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid snapshot table offset ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.qcow2: Invalid snapshot table offset ++no file open, try 'help open' ++ ++== Hitting snapshot table size limit == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-img: Could not create snapshot 'test': -27 (File too large) ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-Zero-initialise-first-cluster-for-new-images.patch b/SOURCES/kvm-qcow2-Zero-initialise-first-cluster-for-new-images.patch new file mode 100644 index 0000000..f8f7dca --- /dev/null +++ b/SOURCES/kvm-qcow2-Zero-initialise-first-cluster-for-new-images.patch @@ -0,0 +1,107 @@ +From a27b645ebf68deff6658389f34ee938ba042a2dd Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 7 Jan 2014 12:44:44 +0100 +Subject: [PATCH 8/8] qcow2: Zero-initialise first cluster for new images + +RH-Author: Kevin Wolf +Message-id: <1389098684-1559-1-git-send-email-kwolf@redhat.com> +Patchwork-id: 56522 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] qcow2: Zero-initialise first cluster for new images +Bugzilla: 1032904 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: 1032904 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6817817 + +Strictly speaking, this is only required for has_zero_init() == false, +but it's easy enough to just do a cluster-aligned write that is padded +with zeros after the header. + +This fixes that after 'qemu-img create' header extensions are attempted +to be parsed that are really just random leftover data. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Kevin Wolf +Reviewed-by: Fam Zheng +Reviewed-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f8413b3c23b08a547ce18609acc6fae5fd04ed5c) + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 36 ++++++++++++++++++++---------------- + 1 files changed, 20 insertions(+), 16 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index bf1f66f..f5f68f8 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1471,7 +1471,7 @@ static int qcow2_create2(const char *filename, int64_t total_size, + * size for any qcow2 image. + */ + BlockDriverState* bs; +- QCowHeader header; ++ QCowHeader *header; + uint8_t* refcount_table; + Error *local_err = NULL; + int ret; +@@ -1489,30 +1489,34 @@ static int qcow2_create2(const char *filename, int64_t total_size, + } + + /* Write the header */ +- memset(&header, 0, sizeof(header)); +- header.magic = cpu_to_be32(QCOW_MAGIC); +- header.version = cpu_to_be32(version); +- header.cluster_bits = cpu_to_be32(cluster_bits); +- header.size = cpu_to_be64(0); +- header.l1_table_offset = cpu_to_be64(0); +- header.l1_size = cpu_to_be32(0); +- header.refcount_table_offset = cpu_to_be64(cluster_size); +- header.refcount_table_clusters = cpu_to_be32(1); +- header.refcount_order = cpu_to_be32(3 + REFCOUNT_SHIFT); +- header.header_length = cpu_to_be32(sizeof(header)); ++ QEMU_BUILD_BUG_ON((1 << MIN_CLUSTER_BITS) < sizeof(*header)); ++ header = g_malloc0(cluster_size); ++ *header = (QCowHeader) { ++ .magic = cpu_to_be32(QCOW_MAGIC), ++ .version = cpu_to_be32(version), ++ .cluster_bits = cpu_to_be32(cluster_bits), ++ .size = cpu_to_be64(0), ++ .l1_table_offset = cpu_to_be64(0), ++ .l1_size = cpu_to_be32(0), ++ .refcount_table_offset = cpu_to_be64(cluster_size), ++ .refcount_table_clusters = cpu_to_be32(1), ++ .refcount_order = cpu_to_be32(3 + REFCOUNT_SHIFT), ++ .header_length = cpu_to_be32(sizeof(*header)), ++ }; + + if (flags & BLOCK_FLAG_ENCRYPT) { +- header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES); ++ header->crypt_method = cpu_to_be32(QCOW_CRYPT_AES); + } else { +- header.crypt_method = cpu_to_be32(QCOW_CRYPT_NONE); ++ header->crypt_method = cpu_to_be32(QCOW_CRYPT_NONE); + } + + if (flags & BLOCK_FLAG_LAZY_REFCOUNTS) { +- header.compatible_features |= ++ header->compatible_features |= + cpu_to_be64(QCOW2_COMPAT_LAZY_REFCOUNTS); + } + +- ret = bdrv_pwrite(bs, 0, &header, sizeof(header)); ++ ret = bdrv_pwrite(bs, 0, header, cluster_size); ++ g_free(header); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not write qcow2 header"); + goto out; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-cache-Empty-cache.patch b/SOURCES/kvm-qcow2-cache-Empty-cache.patch new file mode 100644 index 0000000..2b48ce3 --- /dev/null +++ b/SOURCES/kvm-qcow2-cache-Empty-cache.patch @@ -0,0 +1,80 @@ +From 3a454be93c4750bad515dc3dacc83a3feff5e02c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:10 +0100 +Subject: [PATCH 05/14] qcow2-cache: Empty cache + +RH-Author: Max Reitz +Message-id: <1389131839-12920-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 56541 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 05/14] qcow2-cache: Empty cache +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Add a function for emptying a cache, i.e., flushing it and marking all +elements invalid. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit e7108feaace8e02b3a4bf010448fc2744f753381) + +Signed-off-by: Max Reitz +--- + block/qcow2-cache.c | 18 ++++++++++++++++++ + block/qcow2.h | 2 ++ + 2 files changed, 20 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cache.c | 18 ++++++++++++++++++ + block/qcow2.h | 2 ++ + 2 files changed, 20 insertions(+), 0 deletions(-) + +diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c +index eb1d69b..8ecbb5b 100644 +--- a/block/qcow2-cache.c ++++ b/block/qcow2-cache.c +@@ -200,6 +200,24 @@ void qcow2_cache_depends_on_flush(Qcow2Cache *c) + c->depends_on_flush = true; + } + ++int qcow2_cache_empty(BlockDriverState *bs, Qcow2Cache *c) ++{ ++ int ret, i; ++ ++ ret = qcow2_cache_flush(bs, c); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ for (i = 0; i < c->size; i++) { ++ assert(c->entries[i].ref == 0); ++ c->entries[i].offset = 0; ++ c->entries[i].cache_hits = 0; ++ } ++ ++ return 0; ++} ++ + static int qcow2_cache_find_entry_to_replace(Qcow2Cache *c) + { + int i; +diff --git a/block/qcow2.h b/block/qcow2.h +index e4c140c..5ca6b78 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -489,6 +489,8 @@ int qcow2_cache_set_dependency(BlockDriverState *bs, Qcow2Cache *c, + Qcow2Cache *dependency); + void qcow2_cache_depends_on_flush(Qcow2Cache *c); + ++int qcow2_cache_empty(BlockDriverState *bs, Qcow2Cache *c); ++ + int qcow2_cache_get(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset, + void **table); + int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset, +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-change-default-for-new-images-to-compat-1.1-pa.patch b/SOURCES/kvm-qcow2-change-default-for-new-images-to-compat-1.1-pa.patch new file mode 100644 index 0000000..664d209 --- /dev/null +++ b/SOURCES/kvm-qcow2-change-default-for-new-images-to-compat-1.1-pa.patch @@ -0,0 +1,53 @@ +From 05ce2d88bccb8c43141ff2f03795c505eff247b8 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 22 Nov 2013 14:23:30 +0100 +Subject: [PATCH 12/14] qcow2: change default for new images to compat=1.1, part2 + +RH-Author: Kevin Wolf +Message-id: <1385130210-31063-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 55857 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] qcow2: Change default for new images to compat=1.1 +Bugzilla: 1026739 +RH-Acked-by: Max Reitz +RH-Acked-by: Fam Zheng +RH-Acked-by: Paolo Bonzini + +By the time that qemu 1.7 will be released, enough time will have passed +since qemu 1.1, which is the first version to understand version 3 +images, that changing the default shouldn't hurt many people any more +and the benefits of using the new format outweigh the pain. + +qemu-iotests already runs with compat=1.1 by default. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 9117b47717ad208b12786ce88eacb013f9b3dd1c) + +Signed-off-by: Kevin Wolf +--- + block/qcow2.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 897e48a..850d1c2 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1627,7 +1627,9 @@ static int qcow2_create(const char *filename, QEMUOptionParameter *options, + return -EINVAL; + } + } else if (!strcmp(options->name, BLOCK_OPT_COMPAT_LEVEL)) { +- if (!options->value.s || !strcmp(options->value.s, "0.10")) { ++ if (!options->value.s) { ++ /* keep the default */ ++ } else if (!strcmp(options->value.s, "0.10")) { + version = 2; + } else if (!strcmp(options->value.s, "1.1")) { + version = 3; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-check-for-NULL-l2meta.patch b/SOURCES/kvm-qcow2-check-for-NULL-l2meta.patch new file mode 100644 index 0000000..549df70 --- /dev/null +++ b/SOURCES/kvm-qcow2-check-for-NULL-l2meta.patch @@ -0,0 +1,111 @@ +From 11e8c9b1857d272cfe6f38e83ae70478c15214eb Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 15 Feb 2014 16:03:49 +0100 +Subject: [PATCH 4/5] qcow2: check for NULL l2meta + +RH-Author: Max Reitz +Message-id: <1392480230-24011-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 57294 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/4] qcow2: check for NULL l2meta +Bugzilla: 1055848 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Hu Tao + +BZ: 1049176 +BZ: 1055848 + +In the case of a metadata preallocation with a large cluster size, +qcow2_alloc_cluster_offset() can allocate nothing and returns a +NULL l2meta. This patch checks for it and link2 l2 with only valid +l2meta. + +Replace 9 and 512 with BDRV_SECTOR_BITS, BDRV_SECTOR_SIZE +respectively while at the function. + +Signed-off-by: Hu Tao +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 7c2bbf4aa66ca5a9fc2ca147e0e6cb6f407a3aa2) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 31 ++++++++++++++++--------------- + 1 file changed, 16 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 31 ++++++++++++++++--------------- + 1 files changed, 16 insertions(+), 15 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index fe950b4..daad932 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1404,34 +1404,34 @@ static int preallocate(BlockDriverState *bs) + int ret; + QCowL2Meta *meta; + +- nb_sectors = bdrv_getlength(bs) >> 9; ++ nb_sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS; + offset = 0; + + while (nb_sectors) { +- num = MIN(nb_sectors, INT_MAX >> 9); ++ num = MIN(nb_sectors, INT_MAX >> BDRV_SECTOR_BITS); + ret = qcow2_alloc_cluster_offset(bs, offset, &num, + &host_offset, &meta); + if (ret < 0) { + return ret; + } + +- ret = qcow2_alloc_cluster_link_l2(bs, meta); +- if (ret < 0) { +- qcow2_free_any_clusters(bs, meta->alloc_offset, meta->nb_clusters, +- QCOW2_DISCARD_NEVER); +- return ret; +- } +- +- /* There are no dependent requests, but we need to remove our request +- * from the list of in-flight requests */ + if (meta != NULL) { ++ ret = qcow2_alloc_cluster_link_l2(bs, meta); ++ if (ret < 0) { ++ qcow2_free_any_clusters(bs, meta->alloc_offset, ++ meta->nb_clusters, QCOW2_DISCARD_NEVER); ++ return ret; ++ } ++ ++ /* There are no dependent requests, but we need to remove our ++ * request from the list of in-flight requests */ + QLIST_REMOVE(meta, next_in_flight); + } + + /* TODO Preallocate data if requested */ + + nb_sectors -= num; +- offset += num << 9; ++ offset += num << BDRV_SECTOR_BITS; + } + + /* +@@ -1440,9 +1440,10 @@ static int preallocate(BlockDriverState *bs) + * EOF). Extend the image to the last allocated sector. + */ + if (host_offset != 0) { +- uint8_t buf[512]; +- memset(buf, 0, 512); +- ret = bdrv_write(bs->file, (host_offset >> 9) + num - 1, buf, 1); ++ uint8_t buf[BDRV_SECTOR_SIZE]; ++ memset(buf, 0, BDRV_SECTOR_SIZE); ++ ret = bdrv_write(bs->file, (host_offset >> BDRV_SECTOR_BITS) + num - 1, ++ buf, 1); + if (ret < 0) { + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-cluster-Expand-zero-clusters.patch b/SOURCES/kvm-qcow2-cluster-Expand-zero-clusters.patch new file mode 100644 index 0000000..8fba46b --- /dev/null +++ b/SOURCES/kvm-qcow2-cluster-Expand-zero-clusters.patch @@ -0,0 +1,391 @@ +From 1d6333da24b0175691d25b06c92a3eb7717a8a78 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:11 +0100 +Subject: [PATCH 06/14] qcow2-cluster: Expand zero clusters + +RH-Author: Max Reitz +Message-id: <1389131839-12920-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 56542 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 06/14] qcow2-cluster: Expand zero clusters +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Add functionality for expanding zero clusters. This is necessary for +downgrading the image version to one without zero cluster support. + +For non-backed images, this function may also just discard zero clusters +instead of truly expanding them. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 32b6444d23d0ff618d73e5b766600cd258066169) + +Signed-off-by: Max Reitz + +Conflicts: + block/qcow2-cluster.c + +Conflicts since the changes omitted from downstream commit +ca635f6c3ae10562a2165590bb84667aa61ad12f (because this particular commit +had not been backported then) have to be included here. + +The same applies to the change in qcow2-cluster.c omitted from +downstream commit 0f795e4e9e128f9ff88a128ed8590d2357228b80. +--- + block/qcow2-cluster.c | 232 +++++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2-refcount.c | 29 ++++--- + block/qcow2.h | 5 ++ + 3 files changed, 252 insertions(+), 14 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 232 ++++++++++++++++++++++++++++++++++++++++++++++++ + block/qcow2-refcount.c | 29 +++--- + block/qcow2.h | 5 + + 3 files changed, 252 insertions(+), 14 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 5d13515..796d7c5 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1499,3 +1499,235 @@ fail: + + return ret; + } ++ ++/* ++ * Expands all zero clusters in a specific L1 table (or deallocates them, for ++ * non-backed non-pre-allocated zero clusters). ++ * ++ * expanded_clusters is a bitmap where every bit corresponds to one cluster in ++ * the image file; a bit gets set if the corresponding cluster has been used for ++ * zero expansion (i.e., has been filled with zeroes and is referenced from an ++ * L2 table). nb_clusters contains the total cluster count of the image file, ++ * i.e., the number of bits in expanded_clusters. ++ */ ++static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table, ++ int l1_size, uint8_t *expanded_clusters, ++ uint64_t nb_clusters) ++{ ++ BDRVQcowState *s = bs->opaque; ++ bool is_active_l1 = (l1_table == s->l1_table); ++ uint64_t *l2_table = NULL; ++ int ret; ++ int i, j; ++ ++ if (!is_active_l1) { ++ /* inactive L2 tables require a buffer to be stored in when loading ++ * them from disk */ ++ l2_table = qemu_blockalign(bs, s->cluster_size); ++ } ++ ++ for (i = 0; i < l1_size; i++) { ++ uint64_t l2_offset = l1_table[i] & L1E_OFFSET_MASK; ++ bool l2_dirty = false; ++ ++ if (!l2_offset) { ++ /* unallocated */ ++ continue; ++ } ++ ++ if (is_active_l1) { ++ /* get active L2 tables from cache */ ++ ret = qcow2_cache_get(bs, s->l2_table_cache, l2_offset, ++ (void **)&l2_table); ++ } else { ++ /* load inactive L2 tables from disk */ ++ ret = bdrv_read(bs->file, l2_offset / BDRV_SECTOR_SIZE, ++ (void *)l2_table, s->cluster_sectors); ++ } ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ for (j = 0; j < s->l2_size; j++) { ++ uint64_t l2_entry = be64_to_cpu(l2_table[j]); ++ int64_t offset = l2_entry & L2E_OFFSET_MASK, cluster_index; ++ int cluster_type = qcow2_get_cluster_type(l2_entry); ++ ++ if (cluster_type == QCOW2_CLUSTER_NORMAL) { ++ cluster_index = offset >> s->cluster_bits; ++ assert((cluster_index >= 0) && (cluster_index < nb_clusters)); ++ if (expanded_clusters[cluster_index / 8] & ++ (1 << (cluster_index % 8))) { ++ /* Probably a shared L2 table; this cluster was a zero ++ * cluster which has been expanded, its refcount ++ * therefore most likely requires an update. */ ++ ret = qcow2_update_cluster_refcount(bs, cluster_index, 1, ++ QCOW2_DISCARD_NEVER); ++ if (ret < 0) { ++ goto fail; ++ } ++ /* Since we just increased the refcount, the COPIED flag may ++ * no longer be set. */ ++ l2_table[j] = cpu_to_be64(l2_entry & ~QCOW_OFLAG_COPIED); ++ l2_dirty = true; ++ } ++ continue; ++ } ++ else if (qcow2_get_cluster_type(l2_entry) != QCOW2_CLUSTER_ZERO) { ++ continue; ++ } ++ ++ if (!offset) { ++ /* not preallocated */ ++ if (!bs->backing_hd) { ++ /* not backed; therefore we can simply deallocate the ++ * cluster */ ++ l2_table[j] = 0; ++ l2_dirty = true; ++ continue; ++ } ++ ++ offset = qcow2_alloc_clusters(bs, s->cluster_size); ++ if (offset < 0) { ++ ret = offset; ++ goto fail; ++ } ++ } ++ ++ ret = qcow2_pre_write_overlap_check(bs, 0, offset, s->cluster_size); ++ if (ret < 0) { ++ qcow2_free_clusters(bs, offset, s->cluster_size, ++ QCOW2_DISCARD_ALWAYS); ++ goto fail; ++ } ++ ++ ret = bdrv_write_zeroes(bs->file, offset / BDRV_SECTOR_SIZE, ++ s->cluster_sectors, 0); ++ if (ret < 0) { ++ qcow2_free_clusters(bs, offset, s->cluster_size, ++ QCOW2_DISCARD_ALWAYS); ++ goto fail; ++ } ++ ++ l2_table[j] = cpu_to_be64(offset | QCOW_OFLAG_COPIED); ++ l2_dirty = true; ++ ++ cluster_index = offset >> s->cluster_bits; ++ assert((cluster_index >= 0) && (cluster_index < nb_clusters)); ++ expanded_clusters[cluster_index / 8] |= 1 << (cluster_index % 8); ++ } ++ ++ if (is_active_l1) { ++ if (l2_dirty) { ++ qcow2_cache_entry_mark_dirty(s->l2_table_cache, l2_table); ++ qcow2_cache_depends_on_flush(s->l2_table_cache); ++ } ++ ret = qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table); ++ if (ret < 0) { ++ l2_table = NULL; ++ goto fail; ++ } ++ } else { ++ if (l2_dirty) { ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_INACTIVE_L2 | QCOW2_OL_ACTIVE_L2, l2_offset, ++ s->cluster_size); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ ret = bdrv_write(bs->file, l2_offset / BDRV_SECTOR_SIZE, ++ (void *)l2_table, s->cluster_sectors); ++ if (ret < 0) { ++ goto fail; ++ } ++ } ++ } ++ } ++ ++ ret = 0; ++ ++fail: ++ if (l2_table) { ++ if (!is_active_l1) { ++ qemu_vfree(l2_table); ++ } else { ++ if (ret < 0) { ++ qcow2_cache_put(bs, s->l2_table_cache, (void **)&l2_table); ++ } else { ++ ret = qcow2_cache_put(bs, s->l2_table_cache, ++ (void **)&l2_table); ++ } ++ } ++ } ++ return ret; ++} ++ ++/* ++ * For backed images, expands all zero clusters on the image. For non-backed ++ * images, deallocates all non-pre-allocated zero clusters (and claims the ++ * allocation for pre-allocated ones). This is important for downgrading to a ++ * qcow2 version which doesn't yet support metadata zero clusters. ++ */ ++int qcow2_expand_zero_clusters(BlockDriverState *bs) ++{ ++ BDRVQcowState *s = bs->opaque; ++ uint64_t *l1_table = NULL; ++ int cluster_to_sector_bits = s->cluster_bits - BDRV_SECTOR_BITS; ++ uint64_t nb_clusters; ++ uint8_t *expanded_clusters; ++ int ret; ++ int i, j; ++ ++ nb_clusters = (bs->total_sectors + (1 << cluster_to_sector_bits) - 1) ++ >> cluster_to_sector_bits; ++ expanded_clusters = g_malloc0((nb_clusters + 7) / 8); ++ ++ ret = expand_zero_clusters_in_l1(bs, s->l1_table, s->l1_size, ++ expanded_clusters, nb_clusters); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ /* Inactive L1 tables may point to active L2 tables - therefore it is ++ * necessary to flush the L2 table cache before trying to access the L2 ++ * tables pointed to by inactive L1 entries (else we might try to expand ++ * zero clusters that have already been expanded); furthermore, it is also ++ * necessary to empty the L2 table cache, since it may contain tables which ++ * are now going to be modified directly on disk, bypassing the cache. ++ * qcow2_cache_empty() does both for us. */ ++ ret = qcow2_cache_empty(bs, s->l2_table_cache); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ for (i = 0; i < s->nb_snapshots; i++) { ++ int l1_sectors = (s->snapshots[i].l1_size * sizeof(uint64_t) + ++ BDRV_SECTOR_SIZE - 1) / BDRV_SECTOR_SIZE; ++ ++ l1_table = g_realloc(l1_table, l1_sectors * BDRV_SECTOR_SIZE); ++ ++ ret = bdrv_read(bs->file, s->snapshots[i].l1_table_offset / ++ BDRV_SECTOR_SIZE, (void *)l1_table, l1_sectors); ++ if (ret < 0) { ++ goto fail; ++ } ++ ++ for (j = 0; j < s->snapshots[i].l1_size; j++) { ++ be64_to_cpus(&l1_table[j]); ++ } ++ ++ ret = expand_zero_clusters_in_l1(bs, l1_table, s->snapshots[i].l1_size, ++ expanded_clusters, nb_clusters); ++ if (ret < 0) { ++ goto fail; ++ } ++ } ++ ++ ret = 0; ++ ++fail: ++ g_free(expanded_clusters); ++ g_free(l1_table); ++ return ret; ++} +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 2b72d5e..389a837 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -601,10 +601,10 @@ fail: + * If the return value is non-negative, it is the new refcount of the cluster. + * If it is negative, it is -errno and indicates an error. + */ +-static int update_cluster_refcount(BlockDriverState *bs, +- int64_t cluster_index, +- int addend, +- enum qcow2_discard_type type) ++int qcow2_update_cluster_refcount(BlockDriverState *bs, ++ int64_t cluster_index, ++ int addend, ++ enum qcow2_discard_type type) + { + BDRVQcowState *s = bs->opaque; + int ret; +@@ -733,8 +733,8 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) + if (free_in_cluster == 0) + s->free_byte_offset = 0; + if ((offset & (s->cluster_size - 1)) != 0) +- update_cluster_refcount(bs, offset >> s->cluster_bits, 1, +- QCOW2_DISCARD_NEVER); ++ qcow2_update_cluster_refcount(bs, offset >> s->cluster_bits, 1, ++ QCOW2_DISCARD_NEVER); + } else { + offset = qcow2_alloc_clusters(bs, s->cluster_size); + if (offset < 0) { +@@ -744,8 +744,8 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) + if ((cluster_offset + s->cluster_size) == offset) { + /* we are lucky: contiguous data */ + offset = s->free_byte_offset; +- update_cluster_refcount(bs, offset >> s->cluster_bits, 1, +- QCOW2_DISCARD_NEVER); ++ qcow2_update_cluster_refcount(bs, offset >> s->cluster_bits, 1, ++ QCOW2_DISCARD_NEVER); + s->free_byte_offset += size; + } else { + s->free_byte_offset = offset; +@@ -754,8 +754,8 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) + } + + /* The cluster refcount was incremented, either by qcow2_alloc_clusters() +- * or explicitly by update_cluster_refcount(). Refcount blocks must be +- * flushed before the caller's L2 table updates. ++ * or explicitly by qcow2_update_cluster_refcount(). Refcount blocks must ++ * be flushed before the caller's L2 table updates. + */ + qcow2_cache_set_dependency(bs, s->l2_table_cache, s->refcount_block_cache); + return offset; +@@ -896,8 +896,9 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + break; + } + if (addend != 0) { +- refcount = update_cluster_refcount(bs, cluster_index, addend, +- QCOW2_DISCARD_SNAPSHOT); ++ refcount = qcow2_update_cluster_refcount(bs, ++ cluster_index, addend, ++ QCOW2_DISCARD_SNAPSHOT); + } else { + refcount = get_refcount(bs, cluster_index); + } +@@ -936,8 +937,8 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + + + if (addend != 0) { +- refcount = update_cluster_refcount(bs, l2_offset >> s->cluster_bits, addend, +- QCOW2_DISCARD_SNAPSHOT); ++ refcount = qcow2_update_cluster_refcount(bs, l2_offset >> ++ s->cluster_bits, addend, QCOW2_DISCARD_SNAPSHOT); + } else { + refcount = get_refcount(bs, l2_offset >> s->cluster_bits); + } +diff --git a/block/qcow2.h b/block/qcow2.h +index 5ca6b78..2660483 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -422,6 +422,9 @@ int qcow2_update_header(BlockDriverState *bs); + int qcow2_refcount_init(BlockDriverState *bs); + void qcow2_refcount_close(BlockDriverState *bs); + ++int qcow2_update_cluster_refcount(BlockDriverState *bs, int64_t cluster_index, ++ int addend, enum qcow2_discard_type type); ++ + int64_t qcow2_alloc_clusters(BlockDriverState *bs, int64_t size); + int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + int nb_clusters); +@@ -469,6 +472,8 @@ int qcow2_discard_clusters(BlockDriverState *bs, uint64_t offset, + int nb_sectors); + int qcow2_zero_clusters(BlockDriverState *bs, uint64_t offset, int nb_sectors); + ++int qcow2_expand_zero_clusters(BlockDriverState *bs); ++ + /* qcow2-snapshot.c functions */ + int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info); + int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id); +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-fix-dangling-refcount-table-entry.patch b/SOURCES/kvm-qcow2-fix-dangling-refcount-table-entry.patch new file mode 100644 index 0000000..22434bd --- /dev/null +++ b/SOURCES/kvm-qcow2-fix-dangling-refcount-table-entry.patch @@ -0,0 +1,64 @@ +From d13533fb4dada401eb437454ce348caa1ab94fe6 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 28 Mar 2014 18:46:57 +0100 +Subject: [PATCH 1/2] qcow2: fix dangling refcount table entry + +RH-Author: Stefan Hajnoczi +Message-id: <1396032417-10176-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 58281 +O-Subject: [RHEL7 qemu-kvm PATCH] qcow2: fix dangling refcount table entry +Bugzilla: 1081793 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Juan Quintela + +BZ: 1081793 +Upstream: Downstream only but same fix in https://lists.gnu.org/archive/html/qemu-devel/2014-03/msg05605.html +BREW: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7272001 + +In qcow2_create2() we first manually populate a minimal image file with +the qcow2 header, refcount table, and one refcount block. Then can open +the minimal image as a valid file and fill in the remaining information. + +In commit a2b10eec76a72aa7fe63e797181b93f69de9600e ("qcow2: Don't rely +on free_cluster_index in alloc_refcount_block() (CVE-2014-0147)") a +dangling refcount table entry was introduced. This works for image +files but fails for host block devices that already contain data because +we follow the dangling refcount table entry and read bogus data. + +This patch zeroes the refcount block so the refcount table entry is +pointing to initialized data. + +This patch is downstream-only because the broken commit was not merged +yet upstream. Therefore upstream has a v2 patch but we need a separate +bugfix for downstream. + +Signed-off-by: Stefan Hajnoczi +--- + block/qcow2.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 3f8febc..66ed906 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1628,9 +1628,9 @@ static int qcow2_create2(const char *filename, int64_t total_size, + } + + /* Write a refcount table with one refcount block */ +- refcount_table = g_malloc0(cluster_size); ++ refcount_table = g_malloc0(2 * cluster_size); + refcount_table[0] = cpu_to_be64(2 * cluster_size); +- ret = bdrv_pwrite(bs, cluster_size, refcount_table, cluster_size); ++ ret = bdrv_pwrite(bs, cluster_size, refcount_table, 2 * cluster_size); + g_free(refcount_table); + + if (ret < 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-fix-leak-of-Qcow2DiscardRegion-in-update_refco.patch b/SOURCES/kvm-qcow2-fix-leak-of-Qcow2DiscardRegion-in-update_refco.patch new file mode 100644 index 0000000..d19fa33 --- /dev/null +++ b/SOURCES/kvm-qcow2-fix-leak-of-Qcow2DiscardRegion-in-update_refco.patch @@ -0,0 +1,47 @@ +From b0f23a00b51a43aefe975fd2748c9b079a499d95 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:06 +0200 +Subject: [PATCH 12/42] qcow2: fix leak of Qcow2DiscardRegion in + update_refcount_discard + +Message-id: <1434212556-3927-13-git-send-email-mreitz@redhat.com> +Patchwork-id: 66031 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 12/42] qcow2: fix leak of Qcow2DiscardRegion in update_refcount_discard +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Zhang Haoyu + +BZ: 1129893 + +When the Qcow2DiscardRegion is adjacent to another one referenced by "d", +free this Qcow2DiscardRegion metadata referenced by "p" after +it was removed from s->discards queue. + +Signed-off-by: Zhang Haoyu +Signed-off-by: Kevin Wolf +(cherry picked from commit d8bb71b6227366c188595b91c24a58c9b06e46dd) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index e66d593..0c5a6ad 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -509,6 +509,7 @@ found: + QTAILQ_REMOVE(&s->discards, p, next); + d->offset = MIN(d->offset, p->offset); + d->bytes += p->bytes; ++ g_free(p); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2-fix-offset-overflow-in-qcow2_alloc_clusters_at.patch b/SOURCES/kvm-qcow2-fix-offset-overflow-in-qcow2_alloc_clusters_at.patch new file mode 100644 index 0000000..dcbfaea --- /dev/null +++ b/SOURCES/kvm-qcow2-fix-offset-overflow-in-qcow2_alloc_clusters_at.patch @@ -0,0 +1,71 @@ +From ac19619fcd0eb051d57e5519a9fe8983b9e02fc0 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 15 Feb 2014 16:03:48 +0100 +Subject: [PATCH 3/5] qcow2: fix offset overflow in qcow2_alloc_clusters_at() + +RH-Author: Max Reitz +Message-id: <1392480230-24011-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 57293 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/4] qcow2: fix offset overflow in qcow2_alloc_clusters_at() +Bugzilla: 1049176 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Hu Tao + +BZ: 1049176 +BZ: 1055848 + +When cluster size is big enough it can lead to an offset overflow +in qcow2_alloc_clusters_at(). This patch fixes it. + +The allocation is stopped each time at L2 table boundary +(see handle_alloc()), so the possible maximum bytes could be + + 2^(cluster_bits - 3 + cluster_bits) + +cluster_bits - 3 is used to compute the number of entry by L2 +and the additional cluster_bits is to take into account each +clusters referenced by the L2 entries. + +so int is safe for cluster_bits<=17, unsafe otherwise. + +Signed-off-by: Hu Tao +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 33304ec9fa484e765c6249673e09e1b7d49c5b85) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 389a837..09c638f 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -676,7 +676,13 @@ int qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset, + BDRVQcowState *s = bs->opaque; + uint64_t cluster_index; + uint64_t old_free_cluster_index; +- int i, refcount, ret; ++ uint64_t i; ++ int refcount, ret; ++ ++ assert(nb_clusters >= 0); ++ if (nb_clusters == 0) { ++ return 0; ++ } + + /* Check how many clusters there are free */ + cluster_index = offset >> s->cluster_bits; +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-link-all-L2-meta-updates-in-preallocate.patch b/SOURCES/kvm-qcow2-link-all-L2-meta-updates-in-preallocate.patch new file mode 100644 index 0000000..3dd0c1f --- /dev/null +++ b/SOURCES/kvm-qcow2-link-all-L2-meta-updates-in-preallocate.patch @@ -0,0 +1,69 @@ +From 8be02a0613ef6aee7a95ab7dae3d0aa489b65249 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 1 Apr 2014 09:45:35 +0200 +Subject: [PATCH 2/2] qcow2: link all L2 meta updates in preallocate() + +RH-Author: Stefan Hajnoczi +Message-id: <1396345535-19829-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 58320 +O-Subject: [RHEL7 qemu-kvm PATCH] qcow2: link all L2 meta updates in preallocate() +Bugzilla: 1081393 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Jeffrey Cody + +BZ: 1081393 +Upstream: not merged yet, http://article.gmane.org/gmane.comp.emulators.qemu/264904 +BREW: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7282765 + +preallocate() only links the first QCowL2Meta's data clusters into the +L2 table and ignores any chained QCowL2Metas in the linked list. + +Chains of QCowL2Meta structs are built up when contiguous clusters span +L2 tables. Each QCowL2Meta describes one L2 table update. This is a +rare case in preallocate() but can happen. + +This patch fixes preallocate() by iterating over the whole list of +QCowL2Metas. Compare with the qcow2_co_writev() function's +implementation, which is similar but also also handles request +dependencies. preallocate() only performs one allocation at a time so +there can be no dependencies. + +Signed-off-by: Stefan Hajnoczi +--- + block/qcow2.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 66ed906..7398b16 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1509,7 +1509,9 @@ static int preallocate(BlockDriverState *bs) + return ret; + } + +- if (meta != NULL) { ++ while (meta) { ++ QCowL2Meta *next = meta->next; ++ + ret = qcow2_alloc_cluster_link_l2(bs, meta); + if (ret < 0) { + qcow2_free_any_clusters(bs, meta->alloc_offset, +@@ -1520,6 +1522,9 @@ static int preallocate(BlockDriverState *bs) + /* There are no dependent requests, but we need to remove our + * request from the list of in-flight requests */ + QLIST_REMOVE(meta, next_in_flight); ++ ++ g_free(meta); ++ meta = next; + } + + /* TODO Preallocate data if requested */ +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-refcount-Move-OFLAG_COPIED-checks.patch b/SOURCES/kvm-qcow2-refcount-Move-OFLAG_COPIED-checks.patch new file mode 100644 index 0000000..a03fcd1 --- /dev/null +++ b/SOURCES/kvm-qcow2-refcount-Move-OFLAG_COPIED-checks.patch @@ -0,0 +1,201 @@ +From 27a96310e27b1b3880935430d58330a90ccc0176 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:02 +0100 +Subject: [PATCH 09/87] qcow2-refcount: Move OFLAG_COPIED checks + +RH-Author: Max Reitz +Message-id: <1383604354-12743-12-git-send-email-mreitz@redhat.com> +Patchwork-id: 55311 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 11/43] qcow2-refcount: Move OFLAG_COPIED checks +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Move the OFLAG_COPIED checks out of check_refcounts_l1 and +check_refcounts_l2 and after the actual refcount checks/fixes (since the +refcounts might actually change there). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 4f6ed88c03c4026e31ce152ea760a0da839f0dda) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 115 +++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 82 insertions(+), 33 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 115 ++++++++++++++++++++++++++++++++++-------------- + 1 files changed, 82 insertions(+), 33 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 310efcc..ddc3029 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1035,7 +1035,7 @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, + BDRVQcowState *s = bs->opaque; + uint64_t *l2_table, l2_entry; + uint64_t next_contiguous_offset = 0; +- int i, l2_size, nb_csectors, refcount; ++ int i, l2_size, nb_csectors; + + /* Read L2 table from disk */ + l2_size = s->l2_size * sizeof(uint64_t); +@@ -1087,23 +1087,8 @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res, + + case QCOW2_CLUSTER_NORMAL: + { +- /* QCOW_OFLAG_COPIED must be set iff refcount == 1 */ + uint64_t offset = l2_entry & L2E_OFFSET_MASK; + +- if (flags & CHECK_OFLAG_COPIED) { +- refcount = get_refcount(bs, offset >> s->cluster_bits); +- if (refcount < 0) { +- fprintf(stderr, "Can't get refcount for offset %" +- PRIx64 ": %s\n", l2_entry, strerror(-refcount)); +- goto fail; +- } +- if ((refcount == 1) != ((l2_entry & QCOW_OFLAG_COPIED) != 0)) { +- fprintf(stderr, "ERROR OFLAG_COPIED: offset=%" +- PRIx64 " refcount=%d\n", l2_entry, refcount); +- res->corruptions++; +- } +- } +- + if (flags & CHECK_FRAG_INFO) { + res->bfi.allocated_clusters++; + if (next_contiguous_offset && +@@ -1160,7 +1145,7 @@ static int check_refcounts_l1(BlockDriverState *bs, + { + BDRVQcowState *s = bs->opaque; + uint64_t *l1_table, l2_offset, l1_size2; +- int i, refcount, ret; ++ int i, ret; + + l1_size2 = l1_size * sizeof(uint64_t); + +@@ -1184,22 +1169,6 @@ static int check_refcounts_l1(BlockDriverState *bs, + for(i = 0; i < l1_size; i++) { + l2_offset = l1_table[i]; + if (l2_offset) { +- /* QCOW_OFLAG_COPIED must be set iff refcount == 1 */ +- if (flags & CHECK_OFLAG_COPIED) { +- refcount = get_refcount(bs, (l2_offset & ~QCOW_OFLAG_COPIED) +- >> s->cluster_bits); +- if (refcount < 0) { +- fprintf(stderr, "Can't get refcount for l2_offset %" +- PRIx64 ": %s\n", l2_offset, strerror(-refcount)); +- goto fail; +- } +- if ((refcount == 1) != ((l2_offset & QCOW_OFLAG_COPIED) != 0)) { +- fprintf(stderr, "ERROR OFLAG_COPIED: l2_offset=%" PRIx64 +- " refcount=%d\n", l2_offset, refcount); +- res->corruptions++; +- } +- } +- + /* Mark L2 table as used */ + l2_offset &= L1E_OFFSET_MASK; + inc_refcounts(bs, res, refcount_table, refcount_table_size, +@@ -1231,6 +1200,80 @@ fail: + } + + /* ++ * Checks the OFLAG_COPIED flag for all L1 and L2 entries. ++ * ++ * This function does not print an error message nor does it increment ++ * check_errors if get_refcount fails (this is because such an error will have ++ * been already detected and sufficiently signaled by the calling function ++ * (qcow2_check_refcounts) by the time this function is called). ++ */ ++static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res) ++{ ++ BDRVQcowState *s = bs->opaque; ++ uint64_t *l2_table = qemu_blockalign(bs, s->cluster_size); ++ int ret; ++ int refcount; ++ int i, j; ++ ++ for (i = 0; i < s->l1_size; i++) { ++ uint64_t l1_entry = s->l1_table[i]; ++ uint64_t l2_offset = l1_entry & L1E_OFFSET_MASK; ++ ++ if (!l2_offset) { ++ continue; ++ } ++ ++ refcount = get_refcount(bs, l2_offset >> s->cluster_bits); ++ if (refcount < 0) { ++ /* don't print message nor increment check_errors */ ++ continue; ++ } ++ if ((refcount == 1) != ((l1_entry & QCOW_OFLAG_COPIED) != 0)) { ++ fprintf(stderr, "ERROR OFLAG_COPIED L2 cluster: l1_index=%d " ++ "l1_entry=%" PRIx64 " refcount=%d\n", ++ i, l1_entry, refcount); ++ res->corruptions++; ++ } ++ ++ ret = bdrv_pread(bs->file, l2_offset, l2_table, ++ s->l2_size * sizeof(uint64_t)); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR: Could not read L2 table: %s\n", ++ strerror(-ret)); ++ res->check_errors++; ++ goto fail; ++ } ++ ++ for (j = 0; j < s->l2_size; j++) { ++ uint64_t l2_entry = be64_to_cpu(l2_table[j]); ++ uint64_t data_offset = l2_entry & L2E_OFFSET_MASK; ++ int cluster_type = qcow2_get_cluster_type(l2_entry); ++ ++ if ((cluster_type == QCOW2_CLUSTER_NORMAL) || ++ ((cluster_type == QCOW2_CLUSTER_ZERO) && (data_offset != 0))) { ++ refcount = get_refcount(bs, data_offset >> s->cluster_bits); ++ if (refcount < 0) { ++ /* don't print message nor increment check_errors */ ++ continue; ++ } ++ if ((refcount == 1) != ((l2_entry & QCOW_OFLAG_COPIED) != 0)) { ++ fprintf(stderr, "ERROR OFLAG_COPIED data cluster: " ++ "l2_entry=%" PRIx64 " refcount=%d\n", ++ l2_entry, refcount); ++ res->corruptions++; ++ } ++ } ++ } ++ } ++ ++ ret = 0; ++ ++fail: ++ qemu_vfree(l2_table); ++ return ret; ++} ++ ++/* + * Checks an image for refcount consistency. + * + * Returns 0 if no errors are found, the number of errors in case the image is +@@ -1365,6 +1408,12 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + } + ++ /* check OFLAG_COPIED */ ++ ret = check_oflag_copied(bs, res); ++ if (ret < 0) { ++ goto fail; ++ } ++ + res->image_end_offset = (highest_cluster + 1) * s->cluster_size; + ret = 0; + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-refcount-Repair-OFLAG_COPIED-errors.patch b/SOURCES/kvm-qcow2-refcount-Repair-OFLAG_COPIED-errors.patch new file mode 100644 index 0000000..2b90310 --- /dev/null +++ b/SOURCES/kvm-qcow2-refcount-Repair-OFLAG_COPIED-errors.patch @@ -0,0 +1,182 @@ +From 7f0500dff4d7da11bda309de3866851f382f6fe8 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:03 +0100 +Subject: [PATCH 10/87] qcow2-refcount: Repair OFLAG_COPIED errors + +RH-Author: Max Reitz +Message-id: <1383604354-12743-13-git-send-email-mreitz@redhat.com> +Patchwork-id: 55312 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 12/43] qcow2-refcount: Repair OFLAG_COPIED errors +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Since the OFLAG_COPIED checks are now executed after the refcounts have +been repaired (if repairing), it is safe to assume that they are correct +but the OFLAG_COPIED flag may be not. Therefore, if its value differs +from what it should be (considering the according refcount), that +discrepancy can be repaired by correctly setting (or clearing that flag. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit e23e400ec62a03dea58ddb38479b4f1ef86f556d) + +Signed-off-by: Max Reitz +--- + block/qcow2-cluster.c | 4 ++-- + block/qcow2-refcount.c | 58 ++++++++++++++++++++++++++++++++++++++++++++------ + block/qcow2.h | 1 + + 3 files changed, 55 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 4 +- + block/qcow2-refcount.c | 58 +++++++++++++++++++++++++++++++++++++++++++----- + block/qcow2.h | 1 + + 3 files changed, 55 insertions(+), 8 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 7c248aa..2d5aa92 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -145,7 +145,7 @@ static int l2_load(BlockDriverState *bs, uint64_t l2_offset, + * and we really don't want bdrv_pread to perform a read-modify-write) + */ + #define L1_ENTRIES_PER_SECTOR (512 / 8) +-static int write_l1_entry(BlockDriverState *bs, int l1_index) ++int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index) + { + BDRVQcowState *s = bs->opaque; + uint64_t buf[L1_ENTRIES_PER_SECTOR]; +@@ -254,7 +254,7 @@ static int l2_allocate(BlockDriverState *bs, int l1_index, uint64_t **table) + /* update the L1 entry */ + trace_qcow2_l2_allocate_write_l1(bs, l1_index); + s->l1_table[l1_index] = l2_offset | QCOW_OFLAG_COPIED; +- ret = write_l1_entry(bs, l1_index); ++ ret = qcow2_write_l1_entry(bs, l1_index); + if (ret < 0) { + goto fail; + } +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index ddc3029..92ecc64 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1207,7 +1207,8 @@ fail: + * been already detected and sufficiently signaled by the calling function + * (qcow2_check_refcounts) by the time this function is called). + */ +-static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res) ++static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res, ++ BdrvCheckMode fix) + { + BDRVQcowState *s = bs->opaque; + uint64_t *l2_table = qemu_blockalign(bs, s->cluster_size); +@@ -1218,6 +1219,7 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res) + for (i = 0; i < s->l1_size; i++) { + uint64_t l1_entry = s->l1_table[i]; + uint64_t l2_offset = l1_entry & L1E_OFFSET_MASK; ++ bool l2_dirty = false; + + if (!l2_offset) { + continue; +@@ -1229,10 +1231,24 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res) + continue; + } + if ((refcount == 1) != ((l1_entry & QCOW_OFLAG_COPIED) != 0)) { +- fprintf(stderr, "ERROR OFLAG_COPIED L2 cluster: l1_index=%d " ++ fprintf(stderr, "%s OFLAG_COPIED L2 cluster: l1_index=%d " + "l1_entry=%" PRIx64 " refcount=%d\n", ++ fix & BDRV_FIX_ERRORS ? "Repairing" : ++ "ERROR", + i, l1_entry, refcount); +- res->corruptions++; ++ if (fix & BDRV_FIX_ERRORS) { ++ s->l1_table[i] = refcount == 1 ++ ? l1_entry | QCOW_OFLAG_COPIED ++ : l1_entry & ~QCOW_OFLAG_COPIED; ++ ret = qcow2_write_l1_entry(bs, i); ++ if (ret < 0) { ++ res->check_errors++; ++ goto fail; ++ } ++ res->corruptions_fixed++; ++ } else { ++ res->corruptions++; ++ } + } + + ret = bdrv_pread(bs->file, l2_offset, l2_table, +@@ -1257,13 +1273,43 @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res) + continue; + } + if ((refcount == 1) != ((l2_entry & QCOW_OFLAG_COPIED) != 0)) { +- fprintf(stderr, "ERROR OFLAG_COPIED data cluster: " ++ fprintf(stderr, "%s OFLAG_COPIED data cluster: " + "l2_entry=%" PRIx64 " refcount=%d\n", ++ fix & BDRV_FIX_ERRORS ? "Repairing" : ++ "ERROR", + l2_entry, refcount); +- res->corruptions++; ++ if (fix & BDRV_FIX_ERRORS) { ++ l2_table[j] = cpu_to_be64(refcount == 1 ++ ? l2_entry | QCOW_OFLAG_COPIED ++ : l2_entry & ~QCOW_OFLAG_COPIED); ++ l2_dirty = true; ++ res->corruptions_fixed++; ++ } else { ++ res->corruptions++; ++ } + } + } + } ++ ++ if (l2_dirty) { ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_DEFAULT & ~QCOW2_OL_ACTIVE_L2, l2_offset, ++ s->cluster_size); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR: Could not write L2 table; metadata " ++ "overlap check failed: %s\n", strerror(-ret)); ++ res->check_errors++; ++ goto fail; ++ } ++ ++ ret = bdrv_pwrite(bs->file, l2_offset, l2_table, s->cluster_size); ++ if (ret < 0) { ++ fprintf(stderr, "ERROR: Could not write L2 table: %s\n", ++ strerror(-ret)); ++ res->check_errors++; ++ goto fail; ++ } ++ } + } + + ret = 0; +@@ -1409,7 +1455,7 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + } + + /* check OFLAG_COPIED */ +- ret = check_oflag_copied(bs, res); ++ ret = check_oflag_copied(bs, res, fix); + if (ret < 0) { + goto fail; + } +diff --git a/block/qcow2.h b/block/qcow2.h +index 86ddb30..10b7bf4 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -432,6 +432,7 @@ int qcow2_pre_write_overlap_check(BlockDriverState *bs, int chk, int64_t offset, + /* qcow2-cluster.c functions */ + int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, + bool exact_size); ++int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index); + void qcow2_l2_cache_reset(BlockDriverState *bs); + int qcow2_decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset); + void qcow2_encrypt_sectors(BDRVQcowState *s, int64_t sector_num, +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-refcount-Repair-shared-refcount-blocks.patch b/SOURCES/kvm-qcow2-refcount-Repair-shared-refcount-blocks.patch new file mode 100644 index 0000000..7ce63b7 --- /dev/null +++ b/SOURCES/kvm-qcow2-refcount-Repair-shared-refcount-blocks.patch @@ -0,0 +1,233 @@ +From d4803ddf6139cf2ad7e2d53035b5f828da97b51c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:04 +0100 +Subject: [PATCH 11/87] qcow2-refcount: Repair shared refcount blocks + +RH-Author: Max Reitz +Message-id: <1383604354-12743-14-git-send-email-mreitz@redhat.com> +Patchwork-id: 55313 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 13/43] qcow2-refcount: Repair shared refcount blocks +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +If the refcount of a refcount block is greater than one, we can at least +try to repair that problem by duplicating the affected block. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit afa50193cde574528a130a25544fd6f3aa8da069) + +Signed-off-by: Max Reitz +--- + block/blkdebug.c | 1 + + block/qcow2-refcount.c | 148 ++++++++++++++++++++++++++++++++++++++++++++++++- + include/block/block.h | 1 + + 3 files changed, 148 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/blkdebug.c | 1 + + block/qcow2-refcount.c | 148 +++++++++++++++++++++++++++++++++++++++++++++++- + include/block/block.h | 1 + + 3 files changed, 148 insertions(+), 2 deletions(-) + +diff --git a/block/blkdebug.c b/block/blkdebug.c +index 71f99e4..d659d38 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -168,6 +168,7 @@ static const char *event_names[BLKDBG_EVENT_MAX] = { + + [BLKDBG_REFTABLE_LOAD] = "reftable_load", + [BLKDBG_REFTABLE_GROW] = "reftable_grow", ++ [BLKDBG_REFTABLE_UPDATE] = "reftable_update", + + [BLKDBG_REFBLOCK_LOAD] = "refblock_load", + [BLKDBG_REFBLOCK_UPDATE] = "refblock_update", +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 92ecc64..927bdeb 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -1320,6 +1320,121 @@ fail: + } + + /* ++ * Writes one sector of the refcount table to the disk ++ */ ++#define RT_ENTRIES_PER_SECTOR (512 / sizeof(uint64_t)) ++static int write_reftable_entry(BlockDriverState *bs, int rt_index) ++{ ++ BDRVQcowState *s = bs->opaque; ++ uint64_t buf[RT_ENTRIES_PER_SECTOR]; ++ int rt_start_index; ++ int i, ret; ++ ++ rt_start_index = rt_index & ~(RT_ENTRIES_PER_SECTOR - 1); ++ for (i = 0; i < RT_ENTRIES_PER_SECTOR; i++) { ++ buf[i] = cpu_to_be64(s->refcount_table[rt_start_index + i]); ++ } ++ ++ ret = qcow2_pre_write_overlap_check(bs, ++ QCOW2_OL_DEFAULT & ~QCOW2_OL_REFCOUNT_TABLE, ++ s->refcount_table_offset + rt_start_index * sizeof(uint64_t), ++ sizeof(buf)); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_UPDATE); ++ ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset + ++ rt_start_index * sizeof(uint64_t), buf, sizeof(buf)); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Allocates a new cluster for the given refcount block (represented by its ++ * offset in the image file) and copies the current content there. This function ++ * does _not_ decrement the reference count for the currently occupied cluster. ++ * ++ * This function prints an informative message to stderr on error (and returns ++ * -errno); on success, 0 is returned. ++ */ ++static int64_t realloc_refcount_block(BlockDriverState *bs, int reftable_index, ++ uint64_t offset) ++{ ++ BDRVQcowState *s = bs->opaque; ++ int64_t new_offset = 0; ++ void *refcount_block = NULL; ++ int ret; ++ ++ /* allocate new refcount block */ ++ new_offset = qcow2_alloc_clusters(bs, s->cluster_size); ++ if (new_offset < 0) { ++ fprintf(stderr, "Could not allocate new cluster: %s\n", ++ strerror(-new_offset)); ++ ret = new_offset; ++ goto fail; ++ } ++ ++ /* fetch current refcount block content */ ++ ret = qcow2_cache_get(bs, s->refcount_block_cache, offset, &refcount_block); ++ if (ret < 0) { ++ fprintf(stderr, "Could not fetch refcount block: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ /* new block has not yet been entered into refcount table, therefore it is ++ * no refcount block yet (regarding this check) */ ++ ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT, new_offset, ++ s->cluster_size); ++ if (ret < 0) { ++ fprintf(stderr, "Could not write refcount block; metadata overlap " ++ "check failed: %s\n", strerror(-ret)); ++ /* the image will be marked corrupt, so don't even attempt on freeing ++ * the cluster */ ++ new_offset = 0; ++ goto fail; ++ } ++ ++ /* write to new block */ ++ ret = bdrv_write(bs->file, new_offset / BDRV_SECTOR_SIZE, refcount_block, ++ s->cluster_sectors); ++ if (ret < 0) { ++ fprintf(stderr, "Could not write refcount block: %s\n", strerror(-ret)); ++ goto fail; ++ } ++ ++ /* update refcount table */ ++ assert(!(new_offset & (s->cluster_size - 1))); ++ s->refcount_table[reftable_index] = new_offset; ++ ret = write_reftable_entry(bs, reftable_index); ++ if (ret < 0) { ++ fprintf(stderr, "Could not update refcount table: %s\n", ++ strerror(-ret)); ++ goto fail; ++ } ++ ++fail: ++ if (new_offset && (ret < 0)) { ++ qcow2_free_clusters(bs, new_offset, s->cluster_size, ++ QCOW2_DISCARD_ALWAYS); ++ } ++ if (refcount_block) { ++ if (ret < 0) { ++ qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block); ++ } else { ++ ret = qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block); ++ } ++ } ++ if (ret < 0) { ++ return ret; ++ } ++ return new_offset; ++} ++ ++/* + * Checks an image for refcount consistency. + * + * Returns 0 if no errors are found, the number of errors in case the image is +@@ -1395,10 +1510,39 @@ int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, + inc_refcounts(bs, res, refcount_table, nb_clusters, + offset, s->cluster_size); + if (refcount_table[cluster] != 1) { +- fprintf(stderr, "ERROR refcount block %" PRId64 ++ fprintf(stderr, "%s refcount block %" PRId64 + " refcount=%d\n", ++ fix & BDRV_FIX_ERRORS ? "Repairing" : ++ "ERROR", + i, refcount_table[cluster]); +- res->corruptions++; ++ ++ if (fix & BDRV_FIX_ERRORS) { ++ int64_t new_offset; ++ ++ new_offset = realloc_refcount_block(bs, i, offset); ++ if (new_offset < 0) { ++ res->corruptions++; ++ continue; ++ } ++ ++ /* update refcounts */ ++ if ((new_offset >> s->cluster_bits) >= nb_clusters) { ++ /* increase refcount_table size if necessary */ ++ int old_nb_clusters = nb_clusters; ++ nb_clusters = (new_offset >> s->cluster_bits) + 1; ++ refcount_table = g_realloc(refcount_table, ++ nb_clusters * sizeof(uint16_t)); ++ memset(&refcount_table[old_nb_clusters], 0, (nb_clusters ++ - old_nb_clusters) * sizeof(uint16_t)); ++ } ++ refcount_table[cluster]--; ++ inc_refcounts(bs, res, refcount_table, nb_clusters, ++ new_offset, s->cluster_size); ++ ++ res->corruptions_fixed++; ++ } else { ++ res->corruptions++; ++ } + } + } + } +diff --git a/include/block/block.h b/include/block/block.h +index 03ebc47..39770a3 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -447,6 +447,7 @@ typedef enum { + + BLKDBG_REFTABLE_LOAD, + BLKDBG_REFTABLE_GROW, ++ BLKDBG_REFTABLE_UPDATE, + + BLKDBG_REFBLOCK_LOAD, + BLKDBG_REFBLOCK_UPDATE, +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-refcount-Snapshot-update-for-zero-clusters.patch b/SOURCES/kvm-qcow2-refcount-Snapshot-update-for-zero-clusters.patch new file mode 100644 index 0000000..29a4cf8 --- /dev/null +++ b/SOURCES/kvm-qcow2-refcount-Snapshot-update-for-zero-clusters.patch @@ -0,0 +1,120 @@ +From 4d45b1791fb8bc24c17045a91b39c1d62e9e47c3 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:07 +0100 +Subject: [PATCH 02/14] qcow2-refcount: Snapshot update for zero clusters + +RH-Author: Max Reitz +Message-id: <1389131839-12920-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 56538 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 02/14] qcow2-refcount: Snapshot update for zero clusters +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Account for all cluster types in qcow2_update_snapshot_refcounts; +this prevents this function from updating the refcount of unallocated +zero clusters which effectively led to wrong adjustments of the refcount +of cluster 0 (the main qcow2 header). This in turn resulted in images +with (unallocated) zero clusters having a cluster 0 refcount greater +than one after creating a snapshot. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 8b81a7b6ba8686f35f9cb0acdd54004d63206f03) + +Signed-off-by: Max Reitz +--- + block/qcow2-refcount.c | 52 +++++++++++++++++++++++++++++++++----------------- + 1 file changed, 35 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-refcount.c | 52 ++++++++++++++++++++++++++++++++--------------- + 1 files changed, 35 insertions(+), 17 deletions(-) + +diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c +index 3787314..2b72d5e 100644 +--- a/block/qcow2-refcount.c ++++ b/block/qcow2-refcount.c +@@ -863,11 +863,14 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + } + + for(j = 0; j < s->l2_size; j++) { ++ uint64_t cluster_index; ++ + offset = be64_to_cpu(l2_table[j]); +- if (offset != 0) { +- old_offset = offset; +- offset &= ~QCOW_OFLAG_COPIED; +- if (offset & QCOW_OFLAG_COMPRESSED) { ++ old_offset = offset; ++ offset &= ~QCOW_OFLAG_COPIED; ++ ++ switch (qcow2_get_cluster_type(offset)) { ++ case QCOW2_CLUSTER_COMPRESSED: + nb_csectors = ((offset >> s->csize_shift) & + s->csize_mask) + 1; + if (addend != 0) { +@@ -882,8 +885,16 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + } + /* compressed clusters are never modified */ + refcount = 2; +- } else { +- uint64_t cluster_index = (offset & L2E_OFFSET_MASK) >> s->cluster_bits; ++ break; ++ ++ case QCOW2_CLUSTER_NORMAL: ++ case QCOW2_CLUSTER_ZERO: ++ cluster_index = (offset & L2E_OFFSET_MASK) >> s->cluster_bits; ++ if (!cluster_index) { ++ /* unallocated */ ++ refcount = 0; ++ break; ++ } + if (addend != 0) { + refcount = update_cluster_refcount(bs, cluster_index, addend, + QCOW2_DISCARD_SNAPSHOT); +@@ -895,19 +906,26 @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs, + ret = refcount; + goto fail; + } +- } ++ break; + +- if (refcount == 1) { +- offset |= QCOW_OFLAG_COPIED; +- } +- if (offset != old_offset) { +- if (addend > 0) { +- qcow2_cache_set_dependency(bs, s->l2_table_cache, +- s->refcount_block_cache); +- } +- l2_table[j] = cpu_to_be64(offset); +- qcow2_cache_entry_mark_dirty(s->l2_table_cache, l2_table); ++ case QCOW2_CLUSTER_UNALLOCATED: ++ refcount = 0; ++ break; ++ ++ default: ++ abort(); ++ } ++ ++ if (refcount == 1) { ++ offset |= QCOW_OFLAG_COPIED; ++ } ++ if (offset != old_offset) { ++ if (addend > 0) { ++ qcow2_cache_set_dependency(bs, s->l2_table_cache, ++ s->refcount_block_cache); + } ++ l2_table[j] = cpu_to_be64(offset); ++ qcow2_cache_entry_mark_dirty(s->l2_table_cache, l2_table); + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2-remove-n_start-and-n_end-of-qcow2_alloc_cluste.patch b/SOURCES/kvm-qcow2-remove-n_start-and-n_end-of-qcow2_alloc_cluste.patch new file mode 100644 index 0000000..c2b74ba --- /dev/null +++ b/SOURCES/kvm-qcow2-remove-n_start-and-n_end-of-qcow2_alloc_cluste.patch @@ -0,0 +1,166 @@ +From 68066d2b824a88a45b3263dd1ceb18307c92581f Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 15 Feb 2014 16:03:47 +0100 +Subject: [PATCH 2/5] qcow2: remove n_start and n_end of qcow2_alloc_cluster_offset() + +RH-Author: Max Reitz +Message-id: <1392480230-24011-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 57292 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/4] qcow2: remove n_start and n_end of qcow2_alloc_cluster_offset() +Bugzilla: 1049176 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Hu Tao + +BZ: 1049176 +BZ: 1055848 + +n_start can be actually calculated from offset. The number of +sectors to be allocated(n_end - n_start) can be passed in in +num. By removing n_start and n_end, we can save two parameters. + +The side effect is there is a bug in qcow2.c:preallocate() that +passes incorrect n_start to qcow2_alloc_cluster_offset() is +fixed. The bug can be triggerred by a larger cluster size than +the default value(65536), for example: + +./qemu-img create -f qcow2 \ + -o 'cluster_size=131072,preallocation=metadata' file.img 4G + +Signed-off-by: Hu Tao +Reviewed-by: Max Reitz +Reviewed-by: Benoit Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 16f0587e0a5da5b1ad76cb7c3739491bc042201c) + +Signed-off-by: Max Reitz +--- + block/qcow2-cluster.c | 14 ++++++-------- + block/qcow2.c | 13 +++++++------ + block/qcow2.h | 2 +- + trace-events | 2 +- + 4 files changed, 15 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2-cluster.c | 14 ++++++-------- + block/qcow2.c | 13 +++++++------ + block/qcow2.h | 2 +- + trace-events | 2 +- + 4 files changed, 15 insertions(+), 16 deletions(-) + +diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c +index 79c3ae0..862df0f 100644 +--- a/block/qcow2-cluster.c ++++ b/block/qcow2-cluster.c +@@ -1173,7 +1173,7 @@ fail: + * Return 0 on success and -errno in error cases + */ + int qcow2_alloc_cluster_offset(BlockDriverState *bs, uint64_t offset, +- int n_start, int n_end, int *num, uint64_t *host_offset, QCowL2Meta **m) ++ int *num, uint64_t *host_offset, QCowL2Meta **m) + { + BDRVQcowState *s = bs->opaque; + uint64_t start, remaining; +@@ -1181,15 +1181,13 @@ int qcow2_alloc_cluster_offset(BlockDriverState *bs, uint64_t offset, + uint64_t cur_bytes; + int ret; + +- trace_qcow2_alloc_clusters_offset(qemu_coroutine_self(), offset, +- n_start, n_end); ++ trace_qcow2_alloc_clusters_offset(qemu_coroutine_self(), offset, *num); + +- assert(n_start * BDRV_SECTOR_SIZE == offset_into_cluster(s, offset)); +- offset = start_of_cluster(s, offset); ++ assert((offset & ~BDRV_SECTOR_MASK) == 0); + + again: +- start = offset + (n_start << BDRV_SECTOR_BITS); +- remaining = (n_end - n_start) << BDRV_SECTOR_BITS; ++ start = offset; ++ remaining = *num << BDRV_SECTOR_BITS; + cluster_offset = 0; + *host_offset = 0; + cur_bytes = 0; +@@ -1275,7 +1273,7 @@ again: + } + } + +- *num = (n_end - n_start) - (remaining >> BDRV_SECTOR_BITS); ++ *num -= remaining >> BDRV_SECTOR_BITS; + assert(*num > 0); + assert(*host_offset != 0); + +diff --git a/block/qcow2.c b/block/qcow2.c +index 25a5b5e..fe950b4 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -1000,7 +1000,6 @@ static coroutine_fn int qcow2_co_writev(BlockDriverState *bs, + { + BDRVQcowState *s = bs->opaque; + int index_in_cluster; +- int n_end; + int ret; + int cur_nr_sectors; /* number of sectors in current iteration */ + uint64_t cluster_offset; +@@ -1024,14 +1023,16 @@ static coroutine_fn int qcow2_co_writev(BlockDriverState *bs, + + trace_qcow2_writev_start_part(qemu_coroutine_self()); + index_in_cluster = sector_num & (s->cluster_sectors - 1); +- n_end = index_in_cluster + remaining_sectors; ++ cur_nr_sectors = remaining_sectors; + if (s->crypt_method && +- n_end > QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors) { +- n_end = QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors; ++ cur_nr_sectors > ++ QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors - index_in_cluster) { ++ cur_nr_sectors = ++ QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors - index_in_cluster; + } + + ret = qcow2_alloc_cluster_offset(bs, sector_num << 9, +- index_in_cluster, n_end, &cur_nr_sectors, &cluster_offset, &l2meta); ++ &cur_nr_sectors, &cluster_offset, &l2meta); + if (ret < 0) { + goto fail; + } +@@ -1408,7 +1409,7 @@ static int preallocate(BlockDriverState *bs) + + while (nb_sectors) { + num = MIN(nb_sectors, INT_MAX >> 9); +- ret = qcow2_alloc_cluster_offset(bs, offset, 0, num, &num, ++ ret = qcow2_alloc_cluster_offset(bs, offset, &num, + &host_offset, &meta); + if (ret < 0) { + return ret; +diff --git a/block/qcow2.h b/block/qcow2.h +index 9749f03..4a653c5 100644 +--- a/block/qcow2.h ++++ b/block/qcow2.h +@@ -463,7 +463,7 @@ void qcow2_encrypt_sectors(BDRVQcowState *s, int64_t sector_num, + int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, + int *num, uint64_t *cluster_offset); + int qcow2_alloc_cluster_offset(BlockDriverState *bs, uint64_t offset, +- int n_start, int n_end, int *num, uint64_t *host_offset, QCowL2Meta **m); ++ int *num, uint64_t *host_offset, QCowL2Meta **m); + uint64_t qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs, + uint64_t offset, + int compressed_size); +diff --git a/trace-events b/trace-events +index 5d86cf3..b9144b2 100644 +--- a/trace-events ++++ b/trace-events +@@ -485,7 +485,7 @@ qcow2_writev_done_part(void *co, int cur_nr_sectors) "co %p cur_nr_sectors %d" + qcow2_writev_data(void *co, uint64_t offset) "co %p offset %" PRIx64 + + # block/qcow2-cluster.c +-qcow2_alloc_clusters_offset(void *co, uint64_t offset, int n_start, int n_end) "co %p offet %" PRIx64 " n_start %d n_end %d" ++qcow2_alloc_clusters_offset(void *co, uint64_t offset, int num) "co %p offet %" PRIx64 " num %d" + qcow2_handle_copied(void *co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes) "co %p guest_offet %" PRIx64 " host_offset %" PRIx64 " bytes %" PRIx64 + qcow2_handle_alloc(void *co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes) "co %p guest_offet %" PRIx64 " host_offset %" PRIx64 " bytes %" PRIx64 + qcow2_do_alloc_clusters_offset(void *co, uint64_t guest_offset, uint64_t host_offset, int nb_clusters) "co %p guest_offet %" PRIx64 " host_offset %" PRIx64 " nb_clusters %d" +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2.py-Add-required-padding-for-header-extensions.patch b/SOURCES/kvm-qcow2.py-Add-required-padding-for-header-extensions.patch new file mode 100644 index 0000000..cf5bb81 --- /dev/null +++ b/SOURCES/kvm-qcow2.py-Add-required-padding-for-header-extensions.patch @@ -0,0 +1,51 @@ +From 340c0aaeb771bc3c4b2347e4bcace7afe846907f Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 13 Jun 2015 16:22:29 +0200 +Subject: [PATCH 35/42] qcow2.py: Add required padding for header extensions + +Message-id: <1434212556-3927-36-git-send-email-mreitz@redhat.com> +Patchwork-id: 66054 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 35/42] qcow2.py: Add required padding for header extensions +Bugzilla: 1129893 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +BZ: 1129893 + +The qcow2 specification requires that the header extension data be +padded to round up the extension size to the next multiple of 8 bytes. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Message-id: 1416935562-7760-3-git-send-email-kwolf@redhat.com +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 8884dd1bbc5ce42cd657ffcbef3a477443468974) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/qcow2.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py +index 44a2b45..0e343ef 100755 +--- a/tests/qemu-iotests/qcow2.py ++++ b/tests/qemu-iotests/qcow2.py +@@ -7,6 +7,10 @@ import string + class QcowHeaderExtension: + + def __init__(self, magic, length, data): ++ if length % 8 != 0: ++ padding = 8 - (length % 8) ++ data += "\0" * padding ++ + self.magic = magic + self.length = length + self.data = data +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qcow2.py-Subcommand-for-changing-header-fields.patch b/SOURCES/kvm-qcow2.py-Subcommand-for-changing-header-fields.patch new file mode 100644 index 0000000..67f7fad --- /dev/null +++ b/SOURCES/kvm-qcow2.py-Subcommand-for-changing-header-fields.patch @@ -0,0 +1,69 @@ +From c8da29122142f498215881e8bb933de278a3809a Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 29 Dec 2013 22:06:54 +0100 +Subject: [PATCH 3/8] qcow2.py: Subcommand for changing header fields + +RH-Author: Max Reitz +Message-id: <1388354817-3013-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 56444 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/5] qcow2.py: Subcommand for changing header fields +Bugzilla: 1004347 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +From: Kevin Wolf + +BZ: 1004347 + +Signed-off-by: Kevin Wolf +(cherry picked from commit c93331c9146719958a4b102435fcd0566da45ea2) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/qcow2.py | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/qcow2.py | 17 +++++++++++++++++ + 1 files changed, 17 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py +index fecf5b9..44a2b45 100755 +--- a/tests/qemu-iotests/qcow2.py ++++ b/tests/qemu-iotests/qcow2.py +@@ -149,6 +149,22 @@ def cmd_dump_header(fd): + h.dump() + h.dump_extensions() + ++def cmd_set_header(fd, name, value): ++ try: ++ value = int(value, 0) ++ except: ++ print "'%s' is not a valid number" % value ++ sys.exit(1) ++ ++ fields = (field[2] for field in QcowHeader.fields) ++ if not name in fields: ++ print "'%s' is not a known header field" % name ++ sys.exit(1) ++ ++ h = QcowHeader(fd) ++ h.__dict__[name] = value ++ h.update(fd) ++ + def cmd_add_header_ext(fd, magic, data): + try: + magic = int(magic, 0) +@@ -205,6 +221,7 @@ def cmd_set_feature_bit(fd, group, bit): + + cmds = [ + [ 'dump-header', cmd_dump_header, 0, 'Dump image header and header extensions' ], ++ [ 'set-header', cmd_set_header, 2, 'Set a field in the header'], + [ 'add-header-ext', cmd_add_header_ext, 2, 'Add a header extension' ], + [ 'del-header-ext', cmd_del_header_ext, 1, 'Delete a header extension' ], + [ 'set-feature-bit', cmd_set_feature_bit, 2, 'Set a feature bit'], +-- +1.7.1 + diff --git a/SOURCES/kvm-qcow2_check-Mark-image-consistent.patch b/SOURCES/kvm-qcow2_check-Mark-image-consistent.patch new file mode 100644 index 0000000..e4d0b51 --- /dev/null +++ b/SOURCES/kvm-qcow2_check-Mark-image-consistent.patch @@ -0,0 +1,54 @@ +From 08183017ea26569bd0ab226576e9772c768a65e7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:05 +0100 +Subject: [PATCH 12/87] qcow2_check: Mark image consistent + +RH-Author: Max Reitz +Message-id: <1383604354-12743-15-git-send-email-mreitz@redhat.com> +Patchwork-id: 55314 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 14/43] qcow2_check: Mark image consistent +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +If no corruptions remain after an image repair (and no errors have been +encountered), clear the corrupt flag in qcow2_check. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 24530f3e060c71b6c57c7a70336f08a13a8b0a3d) + +Signed-off-by: Max Reitz +--- + block/qcow2.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qcow2.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/block/qcow2.c b/block/qcow2.c +index 90950cb..8a30863 100644 +--- a/block/qcow2.c ++++ b/block/qcow2.c +@@ -312,7 +312,11 @@ static int qcow2_check(BlockDriverState *bs, BdrvCheckResult *result, + } + + if (fix && result->check_errors == 0 && result->corruptions == 0) { +- return qcow2_mark_clean(bs); ++ ret = qcow2_mark_clean(bs); ++ if (ret < 0) { ++ return ret; ++ } ++ return qcow2_mark_consistent(bs); + } + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-Add-SIZE-type-to-qdev-properties.patch b/SOURCES/kvm-qdev-Add-SIZE-type-to-qdev-properties.patch new file mode 100644 index 0000000..34e1807 --- /dev/null +++ b/SOURCES/kvm-qdev-Add-SIZE-type-to-qdev-properties.patch @@ -0,0 +1,163 @@ +From 6f520cfdd487bc2c8032b61ff48706a65345bad5 Mon Sep 17 00:00:00 2001 +Message-Id: <6f520cfdd487bc2c8032b61ff48706a65345bad5.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:16:58 +0100 +Subject: [PATCH 04/56] qdev: Add SIZE type to qdev properties +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-5-git-send-email-mst@redhat.com> +Patchwork-id: 56309 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 04/57] qdev: Add SIZE type to qdev properties +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Vasilis Liaskovitis + +This patch adds a 'SIZE' type property to qdev. + +Signed-off-by: Ian Molton +Signed-off-by: Vasilis Liaskovitis +Signed-off-by: Hu Tao +Signed-off-by: Igor Mammedov +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Andreas Färber +Message-id: 1375109277-25561-7-git-send-email-imammedo@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit e8cd45c78f53501e75bd455140da63d1b7ed3685) +--- + include/hw/qdev-properties.h | 3 +++ + include/qemu/option.h | 2 ++ + hw/core/qdev-properties.c | 55 ++++++++++++++++++++++++++++++++++++++++++++ + util/qemu-option.c | 4 ++-- + 4 files changed, 62 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/core/qdev-properties.c | 55 ++++++++++++++++++++++++++++++++++++++++++++ + include/hw/qdev-properties.h | 3 +++ + include/qemu/option.h | 2 ++ + util/qemu-option.c | 4 ++-- + 4 files changed, 62 insertions(+), 2 deletions(-) + +diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c +index 6e1ed1e..8d43a8d 100644 +--- a/hw/core/qdev-properties.c ++++ b/hw/core/qdev-properties.c +@@ -1135,3 +1135,58 @@ void qdev_prop_set_globals(DeviceState *dev, Error **errp) + class = object_class_get_parent(class); + } while (class); + } ++ ++/* --- 64bit unsigned int 'size' type --- */ ++ ++static void get_size(Object *obj, Visitor *v, void *opaque, ++ const char *name, Error **errp) ++{ ++ DeviceState *dev = DEVICE(obj); ++ Property *prop = opaque; ++ uint64_t *ptr = qdev_get_prop_ptr(dev, prop); ++ ++ visit_type_size(v, ptr, name, errp); ++} ++ ++static void set_size(Object *obj, Visitor *v, void *opaque, ++ const char *name, Error **errp) ++{ ++ DeviceState *dev = DEVICE(obj); ++ Property *prop = opaque; ++ uint64_t *ptr = qdev_get_prop_ptr(dev, prop); ++ ++ visit_type_size(v, ptr, name, errp); ++} ++ ++static int parse_size(DeviceState *dev, Property *prop, const char *str) ++{ ++ uint64_t *ptr = qdev_get_prop_ptr(dev, prop); ++ Error *errp = NULL; ++ ++ if (str != NULL) { ++ parse_option_size(prop->name, str, ptr, &errp); ++ } ++ assert_no_error(errp); ++ return 0; ++} ++ ++static int print_size(DeviceState *dev, Property *prop, char *dest, size_t len) ++{ ++ uint64_t *ptr = qdev_get_prop_ptr(dev, prop); ++ char suffixes[] = {'T', 'G', 'M', 'K', 'B'}; ++ int i = 0; ++ uint64_t div; ++ ++ for (div = (long int)1 << 40; !(*ptr / div) ; div >>= 10) { ++ i++; ++ } ++ return snprintf(dest, len, "%0.03f%c", (double)*ptr/div, suffixes[i]); ++} ++ ++PropertyInfo qdev_prop_size = { ++ .name = "size", ++ .parse = parse_size, ++ .print = print_size, ++ .get = get_size, ++ .set = set_size, ++}; +diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h +index 39448b7..692f82e 100644 +--- a/include/hw/qdev-properties.h ++++ b/include/hw/qdev-properties.h +@@ -15,6 +15,7 @@ extern PropertyInfo qdev_prop_uint64; + extern PropertyInfo qdev_prop_hex8; + extern PropertyInfo qdev_prop_hex32; + extern PropertyInfo qdev_prop_hex64; ++extern PropertyInfo qdev_prop_size; + extern PropertyInfo qdev_prop_string; + extern PropertyInfo qdev_prop_chr; + extern PropertyInfo qdev_prop_ptr; +@@ -116,6 +117,8 @@ extern PropertyInfo qdev_prop_arraylen; + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t) + #define DEFINE_PROP_HEX64(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t) ++#define DEFINE_PROP_SIZE(_n, _s, _f, _d) \ ++ DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_size, uint64_t) + #define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) + +diff --git a/include/qemu/option.h b/include/qemu/option.h +index f5ebb05..96f70b6 100644 +--- a/include/qemu/option.h ++++ b/include/qemu/option.h +@@ -73,6 +73,8 @@ QEMUOptionParameter *append_option_parameters(QEMUOptionParameter *dest, + QEMUOptionParameter *list); + QEMUOptionParameter *parse_option_parameters(const char *param, + QEMUOptionParameter *list, QEMUOptionParameter *dest); ++void parse_option_size(const char *name, const char *value, ++ uint64_t *ret, Error **errp); + void free_option_parameters(QEMUOptionParameter *list); + void print_option_parameters(QEMUOptionParameter *list); + void print_option_help(QEMUOptionParameter *list); +diff --git a/util/qemu-option.c b/util/qemu-option.c +index fcbd1b8..1cefbfe 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -173,8 +173,8 @@ static void parse_option_number(const char *name, const char *value, + } + } + +-static void parse_option_size(const char *name, const char *value, +- uint64_t *ret, Error **errp) ++void parse_option_size(const char *name, const char *value, ++ uint64_t *ret, Error **errp) + { + char *postfix; + double sizef; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it-c.patch b/SOURCES/kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it-c.patch new file mode 100644 index 0000000..63af405 --- /dev/null +++ b/SOURCES/kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it-c.patch @@ -0,0 +1,65 @@ +From de651299014ae67b110a2abbff4a9e544b215b2b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:21 +0100 +Subject: [PATCH 45/81] qdev: Do not let the user try to device_add when it cannot work + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-17-git-send-email-kwolf@redhat.com> +Patchwork-id: 55542 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 16/17] qdev: Do not let the user try to device_add when it cannot work +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Such devices have always been unavailable and omitted from the list of +available devices shown by device_add help. Until commit 18b6dad +silently broke the former, setting up nasty traps for unwary users, +like this one: + + $ qemu-system-x86_64 -nodefaults -monitor stdio -display none + QEMU 1.6.50 monitor - type 'help' for more information + (qemu) device_add apic + Segmentation fault (core dumped) + +I call that a regression. Fix it. +(cherry picked from pending upstream submission) + +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + qdev-monitor.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index f54cb21..39d030b 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -477,13 +477,13 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + } + +- if (!obj) { ++ k = DEVICE_CLASS(obj); ++ ++ if (!k || k->cannot_instantiate_with_device_add_yet) { + qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", "device type"); + return NULL; + } + +- k = DEVICE_CLASS(obj); +- + /* find bus */ + path = qemu_opt_get(opts, "bus"); + if (path != NULL) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it.2.patch.patch b/SOURCES/kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it.2.patch.patch new file mode 100644 index 0000000..ff1b1c9 --- /dev/null +++ b/SOURCES/kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it.2.patch.patch @@ -0,0 +1,61 @@ +From 48aa83a2a3e42665e3e3e390909ebc147e234f73 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:57 +0100 +Subject: [PATCH 07/11] qdev: Do not let the user try to device_add when it cannot work +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-8-git-send-email-armbru@redhat.com> +Patchwork-id: 56788 +O-Subject: [PATCH 7.0 qemu-kvm 7/9] qdev: Do not let the user try to device_add when it cannot work +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +Such devices have always been unavailable and omitted from the list of +available devices shown by device_add help. Until commit 18b6dad +silently broke the former, setting up nasty traps for unwary users, +like this one: + + $ qemu-system-x86_64 -nodefaults -monitor stdio -display none + QEMU 1.6.50 monitor - type 'help' for more information + (qemu) device_add apic + Segmentation fault (core dumped) + +I call that a regression. Fix it. + +Signed-off-by: Markus Armbruster +Reviewed-by: Marcel Apfelbaum +Signed-off-by: Andreas Färber +(cherry picked from commit 7ea5e78f3d8d64e99c4017ea211b7518f2629756) +--- + qdev-monitor.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index eb05b4c..da7fe0d 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -490,6 +490,11 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + + dc = DEVICE_CLASS(oc); ++ if (dc->cannot_instantiate_with_device_add_yet) { ++ qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", ++ "pluggable device type"); ++ return NULL; ++ } + + /* find bus */ + path = qemu_opt_get(opts, "bus"); +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-Document-that-pointer-properties-kill-device_ad.patch b/SOURCES/kvm-qdev-Document-that-pointer-properties-kill-device_ad.patch new file mode 100644 index 0000000..57a7b88 --- /dev/null +++ b/SOURCES/kvm-qdev-Document-that-pointer-properties-kill-device_ad.patch @@ -0,0 +1,65 @@ +From 695e02fdf90a0487f70b26b276e71e0924a817dc Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 16 Jan 2014 15:25:19 -0500 +Subject: [PATCH 13/14] qdev: Document that pointer properties kill device_add +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1389885919-16158-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56749 +O-Subject: [PATCH 7.0 qemu-kvm 2/2] qdev: Document that pointer properties kill device_add +Bugzilla: 1031098 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +Ask users of DEFINE_PROP_PTR() to set +cannot_instantiate_with_device_add_yet, or explain why it's not +needed. + +Signed-off-by: Markus Armbruster +Signed-off-by: Andreas Färber +(cherry picked from commit c272758f93b9c88c884461a2baa37b8f4008bf02) +--- + include/hw/qdev-properties.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/hw/qdev-properties.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h +index 692f82e..77c6f7c 100644 +--- a/include/hw/qdev-properties.h ++++ b/include/hw/qdev-properties.h +@@ -122,8 +122,25 @@ extern PropertyInfo qdev_prop_arraylen; + #define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) + ++/* ++ * Please avoid pointer properties. If you must use them, you must ++ * cover them in their device's class init function as follows: ++ * ++ * - If the property must be set, the device cannot be used with ++ * device_add, so add code like this: ++ * |* Reason: pointer property "NAME-OF-YOUR-PROP" *| ++ * DeviceClass *dc = DEVICE_CLASS(class); ++ * dc->cannot_instantiate_with_device_add_yet = true; ++ * ++ * - If the property may safely remain null, document it like this: ++ * |* ++ * * Note: pointer property "interrupt_vector" may remain null, thus ++ * * no need for dc->cannot_instantiate_with_device_add_yet = true; ++ * *| ++ */ + #define DEFINE_PROP_PTR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*) ++ + #define DEFINE_PROP_CHR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*) + #define DEFINE_PROP_STRING(_n, _s, _f) \ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qdev-Drop-misleading-qdev_free-function.patch b/SOURCES/kvm-qdev-Drop-misleading-qdev_free-function.patch new file mode 100644 index 0000000..382bd9c --- /dev/null +++ b/SOURCES/kvm-qdev-Drop-misleading-qdev_free-function.patch @@ -0,0 +1,339 @@ +From c2d17bffc7268369f912357d7061db65e398432f Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:22 +0100 +Subject: [PATCH 2/8] qdev: Drop misleading qdev_free() function +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-3-git-send-email-stefanha@redhat.com> +Patchwork-id: 56256 +O-Subject: [RHEL7 qemu-kvm PATCH 2/8] qdev: Drop misleading qdev_free() function +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +The qdev_free() function name is misleading since all the function does +is unlink the device from its parent. The device is not necessarily +freed. + +The device will be freed when its QObject refcount reaches zero. It is +usual for the parent (bus) to hold the final reference but there are +cases where something else holds a reference so "free" is a misleading +name. + +Call object_unparent(obj) directly instead of having a qdev wrapper +function. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Andreas Färber +(cherry picked from commit 02a5c4c97422b40034f31265e0f139f7846172a8) + +Signed-off-by: Stefan Hajnoczi + +Conflicts: + hw/scsi/scsi-bus.c + hw/xen/xen_platform.c + +The conflicts are straightforward. +--- + hw/acpi/piix4.c | 2 +- + hw/core/qdev.c | 12 +++--------- + hw/pci/pci-hotplug.c | 2 +- + hw/pci/pci_bridge.c | 2 +- + hw/pci/pcie.c | 2 +- + hw/pci/shpc.c | 2 +- + hw/s390x/virtio-ccw.c | 2 +- + hw/scsi/scsi-bus.c | 4 ++-- + hw/usb/bus.c | 7 ++++--- + hw/usb/dev-storage.c | 2 +- + hw/usb/host-legacy.c | 2 +- + hw/virtio/virtio-bus.c | 4 +--- + hw/xen/xen_platform.c | 2 +- + include/hw/qdev-core.h | 1 - + qdev-monitor.c | 2 +- + 15 files changed, 20 insertions(+), 28 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/acpi/piix4.c | 2 +- + hw/core/qdev.c | 12 +++--------- + hw/pci/pci-hotplug.c | 2 +- + hw/pci/pci_bridge.c | 2 +- + hw/pci/pcie.c | 2 +- + hw/pci/shpc.c | 2 +- + hw/s390x/virtio-ccw.c | 2 +- + hw/scsi/scsi-bus.c | 4 ++-- + hw/usb/bus.c | 7 ++++--- + hw/usb/dev-storage.c | 2 +- + hw/usb/host-legacy.c | 2 +- + hw/virtio/virtio-bus.c | 4 +--- + hw/xen/xen_platform.c | 2 +- + include/hw/qdev-core.h | 1 - + qdev-monitor.c | 2 +- + 15 files changed, 20 insertions(+), 28 deletions(-) + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index d79a7b0..8af97cf 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -315,7 +315,7 @@ static void acpi_piix_eject_slot(PIIX4PMState *s, unsigned slots) + if (pc->no_hotplug) { + slot_free = false; + } else { +- qdev_free(qdev); ++ object_unparent(OBJECT(qdev)); + } + } + } +diff --git a/hw/core/qdev.c b/hw/core/qdev.c +index 9190a7e..70a0dee 100644 +--- a/hw/core/qdev.c ++++ b/hw/core/qdev.c +@@ -164,7 +164,7 @@ int qdev_init(DeviceState *dev) + if (local_err != NULL) { + qerror_report_err(local_err); + error_free(local_err); +- qdev_free(dev); ++ object_unparent(OBJECT(dev)); + return -1; + } + return 0; +@@ -258,7 +258,7 @@ void qbus_reset_all_fn(void *opaque) + int qdev_simple_unplug_cb(DeviceState *dev) + { + /* just zap it */ +- qdev_free(dev); ++ object_unparent(OBJECT(dev)); + return 0; + } + +@@ -280,12 +280,6 @@ void qdev_init_nofail(DeviceState *dev) + } + } + +-/* Unlink device from bus and free the structure. */ +-void qdev_free(DeviceState *dev) +-{ +- object_unparent(OBJECT(dev)); +-} +- + void qdev_machine_creation_done(void) + { + /* +@@ -458,7 +452,7 @@ static void bus_unparent(Object *obj) + + while ((kid = QTAILQ_FIRST(&bus->children)) != NULL) { + DeviceState *dev = kid->child; +- qdev_free(dev); ++ object_unparent(OBJECT(dev)); + } + if (bus->parent) { + QLIST_REMOVE(bus, sibling); +diff --git a/hw/pci/pci-hotplug.c b/hw/pci/pci-hotplug.c +index c708752..667e40c 100644 +--- a/hw/pci/pci-hotplug.c ++++ b/hw/pci/pci-hotplug.c +@@ -224,7 +224,7 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon, + } + dev = pci_create(bus, devfn, "virtio-blk-pci"); + if (qdev_prop_set_drive(&dev->qdev, "drive", dinfo->bdrv) < 0) { +- qdev_free(&dev->qdev); ++ object_unparent(OBJECT(dev)); + dev = NULL; + break; + } +diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c +index 3897bd8..a786f26 100644 +--- a/hw/pci/pci_bridge.c ++++ b/hw/pci/pci_bridge.c +@@ -386,7 +386,7 @@ void pci_bridge_exitfn(PCIDevice *pci_dev) + pci_bridge_region_cleanup(s, s->windows); + memory_region_destroy(&s->address_space_mem); + memory_region_destroy(&s->address_space_io); +- /* qbus_free() is called automatically by qdev_free() */ ++ /* qbus_free() is called automatically during device deletion */ + } + + /* +diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c +index 62bd0b8..4b84443 100644 +--- a/hw/pci/pcie.c ++++ b/hw/pci/pcie.c +@@ -251,7 +251,7 @@ static int pcie_cap_slot_hotplug(DeviceState *qdev, + PCI_EXP_SLTSTA_PDS); + pcie_cap_slot_event(d, PCI_EXP_HP_EV_PDC); + } else { +- qdev_free(&pci_dev->qdev); ++ object_unparent(OBJECT(pci_dev)); + pci_word_test_and_clear_mask(exp_cap + PCI_EXP_SLTSTA, + PCI_EXP_SLTSTA_PDS); + pcie_cap_slot_event(d, PCI_EXP_HP_EV_PDC); +diff --git a/hw/pci/shpc.c b/hw/pci/shpc.c +index d35c2ee..1e57952 100644 +--- a/hw/pci/shpc.c ++++ b/hw/pci/shpc.c +@@ -254,7 +254,7 @@ static void shpc_free_devices_in_slot(SHPCDevice *shpc, int slot) + ++devfn) { + PCIDevice *affected_dev = shpc->sec_bus->devices[devfn]; + if (affected_dev) { +- qdev_free(&affected_dev->qdev); ++ object_unparent(OBJECT(affected_dev)); + } + } + } +diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c +index d981101..7ba1376 100644 +--- a/hw/s390x/virtio-ccw.c ++++ b/hw/s390x/virtio-ccw.c +@@ -1036,7 +1036,7 @@ static int virtio_ccw_busdev_unplug(DeviceState *dev) + + css_generate_sch_crws(sch->cssid, sch->ssid, sch->schid, 1, 0); + +- qdev_free(dev); ++ object_unparent(OBJECT(dev)); + return 0; + } + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 9082ea7..6733c1a 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -178,7 +178,7 @@ static int scsi_qdev_init(DeviceState *qdev) + d = scsi_device_find(bus, dev->channel, dev->id, dev->lun); + assert(d); + if (d->lun == dev->lun && dev != d) { +- qdev_free(&d->qdev); ++ object_unparent(OBJECT(d)); + } + } + +@@ -229,7 +229,7 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv, + qdev_prop_set_string(dev, "serial", serial); + } + if (qdev_prop_set_drive(dev, "drive", bdrv) < 0) { +- qdev_free(dev); ++ object_unparent(OBJECT(dev)); + return NULL; + } + if (qdev_init(dev) < 0) +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index f83d1de..ade9abc 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -351,8 +351,9 @@ void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr) + + void usb_unregister_port(USBBus *bus, USBPort *port) + { +- if (port->dev) +- qdev_free(&port->dev->qdev); ++ if (port->dev) { ++ object_unparent(OBJECT(port->dev)); ++ } + QTAILQ_REMOVE(&bus->free, port, next); + bus->nfree--; + } +@@ -500,7 +501,7 @@ int usb_device_delete_addr(int busnr, int addr) + return -1; + dev = port->dev; + +- qdev_free(&dev->qdev); ++ object_unparent(OBJECT(dev)); + return 0; + } + +diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c +index 44a0e34..f60b048 100644 +--- a/hw/usb/dev-storage.c ++++ b/hw/usb/dev-storage.c +@@ -699,7 +699,7 @@ static USBDevice *usb_msd_init(USBBus *bus, const char *filename) + return NULL; + } + if (qdev_prop_set_drive(&dev->qdev, "drive", dinfo->bdrv) < 0) { +- qdev_free(&dev->qdev); ++ object_unparent(OBJECT(dev)); + return NULL; + } + if (qdev_init(&dev->qdev) < 0) +diff --git a/hw/usb/host-legacy.c b/hw/usb/host-legacy.c +index 3a5f705..3cc9c42 100644 +--- a/hw/usb/host-legacy.c ++++ b/hw/usb/host-legacy.c +@@ -132,7 +132,7 @@ USBDevice *usb_host_device_open(USBBus *bus, const char *devname) + return dev; + + fail: +- qdev_free(&dev->qdev); ++ object_unparent(OBJECT(dev)); + return NULL; + } + +diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c +index 6849a01..e6b103c 100644 +--- a/hw/virtio/virtio-bus.c ++++ b/hw/virtio/virtio-bus.c +@@ -67,7 +67,6 @@ void virtio_bus_reset(VirtioBusState *bus) + /* Destroy the VirtIODevice */ + void virtio_bus_destroy_device(VirtioBusState *bus) + { +- DeviceState *qdev; + BusState *qbus = BUS(bus); + VirtioBusClass *klass = VIRTIO_BUS_GET_CLASS(bus); + DPRINTF("%s: remove device.\n", qbus->name); +@@ -76,8 +75,7 @@ void virtio_bus_destroy_device(VirtioBusState *bus) + if (klass->device_unplug != NULL) { + klass->device_unplug(qbus->parent); + } +- qdev = DEVICE(bus->vdev); +- qdev_free(qdev); ++ object_unparent(OBJECT(bus->vdev)); + bus->vdev = NULL; + } + } +diff --git a/hw/xen/xen_platform.c b/hw/xen/xen_platform.c +index bb9d0cd..98fe405 100644 +--- a/hw/xen/xen_platform.c ++++ b/hw/xen/xen_platform.c +@@ -88,7 +88,7 @@ static void unplug_nic(PCIBus *b, PCIDevice *d, void *o) + if (pci_get_word(d->config + PCI_CLASS_DEVICE) == + PCI_CLASS_NETWORK_ETHERNET + && strcmp(d->name, "xen-pci-passthrough") != 0) { +- qdev_free(&d->qdev); ++ object_unparent(OBJECT(d)); + } + } + +diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h +index 44feb54..ad39ea9 100644 +--- a/include/hw/qdev-core.h ++++ b/include/hw/qdev-core.h +@@ -232,7 +232,6 @@ void qdev_init_nofail(DeviceState *dev); + void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, + int required_for_version); + void qdev_unplug(DeviceState *dev, Error **errp); +-void qdev_free(DeviceState *dev); + int qdev_simple_unplug_cb(DeviceState *dev); + void qdev_machine_creation_done(void); + bool qdev_machine_modified(void); +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 9d4f61d..f78ff64 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -521,7 +521,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + qdev->id = id; + } + if (qemu_opt_foreach(opts, set_property, qdev, 1) != 0) { +- qdev_free(qdev); ++ object_unparent(OBJECT(qdev)); + object_unref(OBJECT(qdev)); + return NULL; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qdev-Fix-32-bit-compilation-in-print_size.patch b/SOURCES/kvm-qdev-Fix-32-bit-compilation-in-print_size.patch new file mode 100644 index 0000000..e78c232 --- /dev/null +++ b/SOURCES/kvm-qdev-Fix-32-bit-compilation-in-print_size.patch @@ -0,0 +1,47 @@ +From 4796cbee4433654a54303102b9cc88f9c352b1b5 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 22 Jan 2014 12:13:54 +0100 +Subject: [PATCH 3/4] qdev: Fix 32-bit compilation in print_size + +RH-Author: Markus Armbruster +Message-id: <1390392835-21809-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56889 +O-Subject: [PATCH 7.0 qemu-kvm 1/2] qdev: Fix 32-bit compilation in print_size +Bugzilla: 1034876 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Michael S. Tsirkin + +From: Richard Henderson + +Signed-off-by: Richard Henderson +Message-id: 1375208443-17288-2-git-send-email-rth@twiddle.net +Signed-off-by: Anthony Liguori +(cherry picked from commit e76c756fd3d3b652c6a65ebe16f2bfb25b8d025e) +Signed-off-by: Markus Armbruster +--- + hw/core/qdev-properties.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/core/qdev-properties.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c +index 8d43a8d..d6d10c9 100644 +--- a/hw/core/qdev-properties.c ++++ b/hw/core/qdev-properties.c +@@ -1177,7 +1177,7 @@ static int print_size(DeviceState *dev, Property *prop, char *dest, size_t len) + int i = 0; + uint64_t div; + +- for (div = (long int)1 << 40; !(*ptr / div) ; div >>= 10) { ++ for (div = 1ULL << 40; !(*ptr / div) ; div >>= 10) { + i++; + } + return snprintf(dest, len, "%0.03f%c", (double)*ptr/div, suffixes[i]); +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-Fix-assert-in-PCI-address-property-when-used-by.patch b/SOURCES/kvm-qdev-Fix-assert-in-PCI-address-property-when-used-by.patch new file mode 100644 index 0000000..b4e426e --- /dev/null +++ b/SOURCES/kvm-qdev-Fix-assert-in-PCI-address-property-when-used-by.patch @@ -0,0 +1,65 @@ +From f8553be3140a1f77ab3c4e218ecc79437534d1ea Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 26 Jan 2018 02:21:25 +0100 +Subject: [PATCH 1/4] qdev: Fix assert in PCI address property when used by + vfio-pci + +RH-Author: Alex Williamson +Message-id: <20180126021938.25889.98354.stgit@gimli.home> +Patchwork-id: 78707 +O-Subject: [RHEL-7.5 qemu-kvm PATCH] qdev: Fix assert in PCI address property when used by vfio-pci +Bugzilla: 1538866 +RH-Acked-by: Auger Eric +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Daniel Oram + +Allow the PCIHostDeviceAddress structure to work as the host property +in vfio-pci when it has it's default value of all fields set to ~0. In +this form the property indicates a non-existant device but given the +field bit sizes gets asserted as excess (and invalid) precision +overflows the string buffer. The BDF of an invalid device +"FFFF:FF:FF.F" is returned instead. + +Signed-off-by: Daniel Oram +Reviewed-by: Alex Williamson +Message-Id: <71f06765c4ba16dcd71cbf78e877619948f04ed9.1478777270.git.daniel.oram@gmail.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit 00b8702581f312aa46f797a8b3153d9b2892d967) +Signed-off-by: Miroslav Rezanina +--- + hw/core/qdev-properties.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c +index dc8ae69..a61250e 100644 +--- a/hw/core/qdev-properties.c ++++ b/hw/core/qdev-properties.c +@@ -728,13 +728,19 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, void *opaque, + DeviceState *dev = DEVICE(obj); + Property *prop = opaque; + PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop); +- char buffer[] = "xxxx:xx:xx.x"; ++ char buffer[] = "ffff:ff:ff.f"; + char *p = buffer; + int rc = 0; + +- rc = snprintf(buffer, sizeof(buffer), "%04x:%02x:%02x.%d", +- addr->domain, addr->bus, addr->slot, addr->function); +- assert(rc == sizeof(buffer) - 1); ++ /* ++ * Catch "invalid" device reference from vfio-pci and allow the ++ * default buffer representing the non-existant device to be used. ++ */ ++ if (~addr->domain || ~addr->bus || ~addr->slot || ~addr->function) { ++ rc = snprintf(buffer, sizeof(buffer), "%04x:%02x:%02x.%0d", ++ addr->domain, addr->bus, addr->slot, addr->function); ++ assert(rc == sizeof(buffer) - 1); ++ } + + visit_type_str(v, &p, name, errp); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qdev-New-DEFINE_PROP_ON_OFF_AUTO.patch b/SOURCES/kvm-qdev-New-DEFINE_PROP_ON_OFF_AUTO.patch new file mode 100644 index 0000000..eb18103 --- /dev/null +++ b/SOURCES/kvm-qdev-New-DEFINE_PROP_ON_OFF_AUTO.patch @@ -0,0 +1,102 @@ +From 74c36c49f488579f224013cddfc753c21ce4829e Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:22 +0200 +Subject: [PATCH 14/17] qdev: New DEFINE_PROP_ON_OFF_AUTO +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-9-git-send-email-tgupta@redhat.com> +Patchwork-id: 80916 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 08/11] qdev: New DEFINE_PROP_ON_OFF_AUTO +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Markus Armbruster +Reviewed-by: Marc-André Lureau + +(cherry picked from 55e8a154359be12ca4c9730c562d1e3d4b1bd2a1) + +Conflict: qemu-kvm does not have the json based framework to define +properties, so using the exting enum based framework here. + +Signed-off-by: Miroslav Rezanina +--- + hw/core/qdev-properties.c | 17 +++++++++++++++++ + include/hw/qdev-properties.h | 3 +++ + include/qemu-common.h | 7 +++++++ + 3 files changed, 27 insertions(+) + +diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c +index a61250e..71ba10e 100644 +--- a/hw/core/qdev-properties.c ++++ b/hw/core/qdev-properties.c +@@ -568,6 +568,23 @@ PropertyInfo qdev_prop_macaddr = { + .set = set_mac, + }; + ++/* --- on/off/auto --- */ ++static const char *on_off_auto_table[ON_OFF_AUTO_MAX+1] = { ++ [ON_OFF_AUTO_AUTO] = "auto", ++ [ON_OFF_AUTO_ON] = "on", ++ [ON_OFF_AUTO_OFF] = "off", ++ [ON_OFF_AUTO_MAX] = NULL, ++}; ++ ++PropertyInfo qdev_prop_on_off_auto = { ++ .name = "OnOffAuto", ++ .enum_table = on_off_auto_table, ++ .get = get_enum, ++ .set = set_enum, ++}; ++ ++QEMU_BUILD_BUG_ON(sizeof(OnOffAuto) != sizeof(int)); ++ + /* --- lost tick policy --- */ + + static const char *lost_tick_policy_table[LOST_TICK_MAX+1] = { +diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h +index 77c6f7c..90eaf8f 100644 +--- a/include/hw/qdev-properties.h ++++ b/include/hw/qdev-properties.h +@@ -20,6 +20,7 @@ extern PropertyInfo qdev_prop_string; + extern PropertyInfo qdev_prop_chr; + extern PropertyInfo qdev_prop_ptr; + extern PropertyInfo qdev_prop_macaddr; ++extern PropertyInfo qdev_prop_on_off_auto; + extern PropertyInfo qdev_prop_losttickpolicy; + extern PropertyInfo qdev_prop_bios_chs_trans; + extern PropertyInfo qdev_prop_drive; +@@ -153,6 +154,8 @@ extern PropertyInfo qdev_prop_arraylen; + DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *) + #define DEFINE_PROP_MACADDR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr) ++#define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \ ++ DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto) + #define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \ + LostTickPolicy) +diff --git a/include/qemu-common.h b/include/qemu-common.h +index 4569d52..d0c74e3 100644 +--- a/include/qemu-common.h ++++ b/include/qemu-common.h +@@ -258,6 +258,13 @@ typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size) + + typedef uint64_t pcibus_t; + ++typedef enum OnOffAuto { ++ ON_OFF_AUTO_AUTO, ++ ON_OFF_AUTO_ON, ++ ON_OFF_AUTO_OFF, ++ ON_OFF_AUTO_MAX, ++} OnOffAuto; ++ + typedef enum LostTickPolicy { + LOST_TICK_DISCARD, + LOST_TICK_DELAY, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qdev-Replace-no_user-by-cannot_instantiate_with_devi.patch b/SOURCES/kvm-qdev-Replace-no_user-by-cannot_instantiate_with_devi.patch new file mode 100644 index 0000000..4782eeb --- /dev/null +++ b/SOURCES/kvm-qdev-Replace-no_user-by-cannot_instantiate_with_devi.patch @@ -0,0 +1,928 @@ +From 3e04367b75615f4b1b53350b875c5c14b68dc785 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:12 +0100 +Subject: [PATCH 36/81] qdev: Replace no_user by cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-8-git-send-email-kwolf@redhat.com> +Patchwork-id: 55533 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 07/17] qdev: Replace no_user by cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +In an ideal world, machines can be built by wiring devices together +with configuration, not code. Unfortunately, that's not the world we +live in right now. We still have quite a few devices that need to be +wired up by code. If you try to device_add such a device, it'll fail +in sometimes mysterious ways. If you're lucky, you get an +unmysterious immediate crash. + +To protect users from such badness, DeviceClass member no_user used to +make device models unavailable with -device / device_add, but that +regressed in commit 18b6dad. The device model is still omitted from +help, but is available anyway. + +Attempts to fix the regression have been rejected with the argument +that the purpose of no_user isn't clear, and it's prone to misuse. + +This commit clarifies no_user's purpose. Anthony suggested to rename +it cannot_instantiate_with_device_add_yet_due_to_internal_bugs, which +I shorten somewhat to keep checkpatch happy. While there, make it +bool. + +Every use of cannot_instantiate_with_device_add_yet gets a FIXME +comment asking for rationale. The next few commits will clean them +all up, either by providing a rationale, or by getting rid of the use. + +With that done, the regression fix is hopefully acceptable. + +Signed-off-by: Markus Armbruster +Reviewed-by: Marcel Apfelbaum +(cherry picked from pending upstream submission) + +Conflicts: + hw/dma/pl080.c + hw/i386/kvm/clock.c + hw/i386/pc.c + hw/input/pckbd.c + hw/input/vmmouse.c + hw/misc/vmport.c + hw/nvram/fw_cfg.c + hw/pci-host/piix.c + hw/timer/hpet.c + hw/timer/m48t59.c + hw/timer/mc146818rtc.c + +A few more semantic conflicts elsewhere. Conflict resolution is +always the same: replace just no_user, keep context intact. +Signed-off-by: Kevin Wolf +--- + hw/acpi/piix4.c | 2 +- + hw/alpha/typhoon.c | 2 +- + hw/arm/versatilepb.c | 2 +- + hw/audio/pcspk.c | 2 +- + hw/audio/pl041.c | 2 +- + hw/block/fdc.c | 2 +- + hw/display/pl110.c | 6 +++--- + hw/dma/pl080.c | 4 ++-- + hw/i2c/smbus_ich9.c | 2 +- + hw/i386/kvm/clock.c | 2 +- + hw/i386/kvmvapic.c | 2 +- + hw/i386/pc.c | 2 +- + hw/ide/piix.c | 6 +++--- + hw/ide/via.c | 2 +- + hw/input/pckbd.c | 2 +- + hw/input/vmmouse.c | 2 +- + hw/intc/apic_common.c | 2 +- + hw/intc/arm_gic.c | 2 +- + hw/intc/arm_gic_common.c | 2 +- + hw/intc/arm_gic_kvm.c | 2 +- + hw/intc/i8259_common.c | 2 +- + hw/intc/ioapic_common.c | 2 +- + hw/intc/pl190.c | 2 +- + hw/isa/isa-bus.c | 2 +- + hw/isa/lpc_ich9.c | 2 +- + hw/isa/piix4.c | 2 +- + hw/isa/vt82c686.c | 2 +- + hw/misc/arm_l2x0.c | 2 +- + hw/misc/pvpanic.c | 2 +- + hw/misc/vmport.c | 2 +- + hw/nvram/fw_cfg.c | 2 +- + hw/pci-host/bonito.c | 4 ++-- + hw/pci-host/grackle.c | 4 ++-- + hw/pci-host/piix.c | 8 ++++---- + hw/pci-host/prep.c | 4 ++-- + hw/ppc/spapr_vio.c | 2 +- + hw/s390x/ipl.c | 2 +- + hw/s390x/s390-virtio-bus.c | 2 +- + hw/s390x/virtio-ccw.c | 2 +- + hw/sd/pl181.c | 2 +- + hw/timer/arm_mptimer.c | 2 +- + hw/timer/hpet.c | 2 +- + hw/timer/i8254_common.c | 2 +- + hw/timer/m48t59.c | 2 +- + hw/timer/mc146818rtc.c | 2 +- + hw/timer/pl031.c | 2 +- + include/hw/qdev-core.h | 13 ++++++++++++- + qdev-monitor.c | 5 +++-- + qom/cpu.c | 2 +- + 49 files changed, 73 insertions(+), 61 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/acpi/piix4.c | 2 +- + hw/alpha/typhoon.c | 2 +- + hw/arm/versatilepb.c | 2 +- + hw/audio/pcspk.c | 2 +- + hw/audio/pl041.c | 2 +- + hw/block/fdc.c | 2 +- + hw/display/pl110.c | 6 +++--- + hw/dma/pl080.c | 4 ++-- + hw/i2c/smbus_ich9.c | 2 +- + hw/i386/kvm/clock.c | 2 +- + hw/i386/kvmvapic.c | 2 +- + hw/i386/pc.c | 2 +- + hw/ide/piix.c | 6 +++--- + hw/ide/via.c | 2 +- + hw/input/pckbd.c | 2 +- + hw/input/vmmouse.c | 2 +- + hw/intc/apic_common.c | 2 +- + hw/intc/arm_gic.c | 2 +- + hw/intc/arm_gic_common.c | 2 +- + hw/intc/arm_gic_kvm.c | 2 +- + hw/intc/i8259_common.c | 2 +- + hw/intc/ioapic_common.c | 2 +- + hw/intc/pl190.c | 2 +- + hw/isa/isa-bus.c | 2 +- + hw/isa/lpc_ich9.c | 2 +- + hw/isa/piix4.c | 2 +- + hw/isa/vt82c686.c | 2 +- + hw/misc/arm_l2x0.c | 2 +- + hw/misc/pvpanic.c | 2 +- + hw/misc/vmport.c | 2 +- + hw/nvram/fw_cfg.c | 2 +- + hw/pci-host/bonito.c | 4 ++-- + hw/pci-host/grackle.c | 4 ++-- + hw/pci-host/piix.c | 8 ++++---- + hw/pci-host/prep.c | 4 ++-- + hw/ppc/spapr_vio.c | 2 +- + hw/s390x/ipl.c | 2 +- + hw/s390x/s390-virtio-bus.c | 2 +- + hw/s390x/virtio-ccw.c | 2 +- + hw/sd/pl181.c | 2 +- + hw/timer/arm_mptimer.c | 2 +- + hw/timer/hpet.c | 2 +- + hw/timer/i8254_common.c | 2 +- + hw/timer/m48t59.c | 2 +- + hw/timer/mc146818rtc.c | 2 +- + hw/timer/pl031.c | 2 +- + include/hw/qdev-core.h | 13 ++++++++++++- + qdev-monitor.c | 5 +++-- + qom/cpu.c | 2 +- + 49 files changed, 73 insertions(+), 61 deletions(-) + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index f14867a..46685b7 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -494,7 +494,7 @@ static void piix4_pm_class_init(ObjectClass *klass, void *data) + k->revision = 0x03; + k->class_id = PCI_CLASS_BRIDGE_OTHER; + dc->desc = "PM"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_acpi; + dc->props = piix4_pm_properties; + } +diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c +index 1ead187..55a0e76 100644 +--- a/hw/alpha/typhoon.c ++++ b/hw/alpha/typhoon.c +@@ -823,7 +823,7 @@ static void typhoon_pcihost_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = typhoon_pcihost_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo typhoon_pcihost_info = { +diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c +index 753757e..84cd1ed 100644 +--- a/hw/arm/versatilepb.c ++++ b/hw/arm/versatilepb.c +@@ -387,7 +387,7 @@ static void vpb_sic_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = vpb_sic_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_vpb_sic; + } + +diff --git a/hw/audio/pcspk.c b/hw/audio/pcspk.c +index 4e03bc9..9186304 100644 +--- a/hw/audio/pcspk.c ++++ b/hw/audio/pcspk.c +@@ -188,7 +188,7 @@ static void pcspk_class_initfn(ObjectClass *klass, void *data) + + ic->init = pcspk_initfn; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = pcspk_properties; + } + +diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c +index 9b11cc9..36a7ecb 100644 +--- a/hw/audio/pl041.c ++++ b/hw/audio/pl041.c +@@ -627,7 +627,7 @@ static void pl041_device_class_init(ObjectClass *klass, void *data) + + k->init = pl041_init; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = pl041_device_reset; + dc->vmsd = &vmstate_pl041; + dc->props = pl041_device_properties; +diff --git a/hw/block/fdc.c b/hw/block/fdc.c +index e292f4c..1524e09 100644 +--- a/hw/block/fdc.c ++++ b/hw/block/fdc.c +@@ -2206,7 +2206,7 @@ static void isabus_fdc_class_init(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = isabus_fdc_init1; + dc->fw_name = "fdc"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = fdctrl_external_reset_isa; + dc->vmsd = &vmstate_isa_fdc; + dc->props = isa_fdc_properties; +diff --git a/hw/display/pl110.c b/hw/display/pl110.c +index b45a7be..173ddf8 100644 +--- a/hw/display/pl110.c ++++ b/hw/display/pl110.c +@@ -482,7 +482,7 @@ static void pl110_class_init(ObjectClass *klass, void *data) + + k->init = pl110_init; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl110; + } + +@@ -500,7 +500,7 @@ static void pl110_versatile_class_init(ObjectClass *klass, void *data) + + k->init = pl110_versatile_init; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl110; + } + +@@ -518,7 +518,7 @@ static void pl111_class_init(ObjectClass *klass, void *data) + + k->init = pl111_init; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl110; + } + +diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c +index 00b66b4..2920780 100644 +--- a/hw/dma/pl080.c ++++ b/hw/dma/pl080.c +@@ -382,7 +382,7 @@ static void pl080_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl080_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl080; + } + +@@ -399,7 +399,7 @@ static void pl081_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl081_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl080; + } + +diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c +index ca22978..c1ffa34 100644 +--- a/hw/i2c/smbus_ich9.c ++++ b/hw/i2c/smbus_ich9.c +@@ -97,7 +97,7 @@ static void ich9_smb_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_ICH9_6; + k->revision = ICH9_A2_SMB_REVISION; + k->class_id = PCI_CLASS_SERIAL_SMBUS; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_ich9_smbus; + dc->desc = "ICH9 SMBUS Bridge"; + k->init = ich9_smbus_initfn; +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 98e5ca5..6204939 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -110,7 +110,7 @@ static void kvmclock_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = kvmclock_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &kvmclock_vmsd; + } + +diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c +index 655483b..e6405da 100644 +--- a/hw/i386/kvmvapic.c ++++ b/hw/i386/kvmvapic.c +@@ -809,7 +809,7 @@ static void vapic_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *sc = SYS_BUS_DEVICE_CLASS(klass); + DeviceClass *dc = DEVICE_CLASS(klass); + +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = vapic_reset; + dc->vmsd = &vmstate_vapic; + sc->init = vapic_init; +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index d3acbbb..0a8840a 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -538,7 +538,7 @@ static void port92_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = port92_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = port92_reset; + dc->vmsd = &vmstate_port92_isa; + } +diff --git a/hw/ide/piix.c b/hw/ide/piix.c +index 8d4bf2f..e6864b1 100644 +--- a/hw/ide/piix.c ++++ b/hw/ide/piix.c +@@ -249,7 +249,7 @@ static void piix3_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo piix3_ide_info = { +@@ -269,7 +269,7 @@ static void piix3_ide_xen_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->unplug = pci_piix3_xen_ide_unplug; + } + +@@ -292,7 +292,7 @@ static void piix4_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371AB; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo piix4_ide_info = { +diff --git a/hw/ide/via.c b/hw/ide/via.c +index 30dedd8..6ba99c8 100644 +--- a/hw/ide/via.c ++++ b/hw/ide/via.c +@@ -224,7 +224,7 @@ static void via_ide_class_init(ObjectClass *klass, void *data) + k->revision = 0x06; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo via_ide_info = { +diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c +index 17a5614..98b8b15 100644 +--- a/hw/input/pckbd.c ++++ b/hw/input/pckbd.c +@@ -514,7 +514,7 @@ static void i8042_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = i8042_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_kbd_isa; + } + +diff --git a/hw/input/vmmouse.c b/hw/input/vmmouse.c +index a610738..c9d5131 100644 +--- a/hw/input/vmmouse.c ++++ b/hw/input/vmmouse.c +@@ -284,7 +284,7 @@ static void vmmouse_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = vmmouse_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = vmmouse_reset; + dc->vmsd = &vmstate_vmmouse; + dc->props = vmmouse_properties; +diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c +index b03e904..208e7b1 100644 +--- a/hw/intc/apic_common.c ++++ b/hw/intc/apic_common.c +@@ -386,7 +386,7 @@ static void apic_common_class_init(ObjectClass *klass, void *data) + + dc->vmsd = &vmstate_apic_common; + dc->reset = apic_reset_common; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = apic_properties_common; + idc->init = apic_init_common; + } +diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c +index bae6572..243cbf1 100644 +--- a/hw/intc/arm_gic.c ++++ b/hw/intc/arm_gic.c +@@ -702,7 +702,7 @@ static void arm_gic_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ARMGICClass *agc = ARM_GIC_CLASS(klass); + +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + agc->parent_realize = dc->realize; + dc->realize = arm_gic_realize; + } +diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c +index 08560f2..26b7756 100644 +--- a/hw/intc/arm_gic_common.c ++++ b/hw/intc/arm_gic_common.c +@@ -156,7 +156,7 @@ static void arm_gic_common_class_init(ObjectClass *klass, void *data) + dc->realize = arm_gic_common_realize; + dc->props = arm_gic_common_properties; + dc->vmsd = &vmstate_gic; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo arm_gic_common_type = { +diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c +index b756456..cb4ce23 100644 +--- a/hw/intc/arm_gic_kvm.c ++++ b/hw/intc/arm_gic_kvm.c +@@ -148,7 +148,7 @@ static void kvm_arm_gic_class_init(ObjectClass *klass, void *data) + kgc->parent_reset = dc->reset; + dc->realize = kvm_arm_gic_realize; + dc->reset = kvm_arm_gic_reset; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo kvm_arm_gic_info = { +diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c +index c2ba6a5..70868a5 100644 +--- a/hw/intc/i8259_common.c ++++ b/hw/intc/i8259_common.c +@@ -139,7 +139,7 @@ static void pic_common_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + + dc->vmsd = &vmstate_pic_common; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = pic_properties_common; + ic->init = pic_init_common; + } +diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c +index 5c5bb3c..ce610b7 100644 +--- a/hw/intc/ioapic_common.c ++++ b/hw/intc/ioapic_common.c +@@ -100,7 +100,7 @@ static void ioapic_common_class_init(ObjectClass *klass, void *data) + + sc->init = ioapic_init_common; + dc->vmsd = &vmstate_ioapic_common; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo ioapic_common_type = { +diff --git a/hw/intc/pl190.c b/hw/intc/pl190.c +index 9610673..ff0e5b0 100644 +--- a/hw/intc/pl190.c ++++ b/hw/intc/pl190.c +@@ -269,7 +269,7 @@ static void pl190_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl190_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = pl190_reset; + dc->vmsd = &vmstate_pl190; + } +diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c +index 7860b17..a87a841 100644 +--- a/hw/isa/isa-bus.c ++++ b/hw/isa/isa-bus.c +@@ -217,7 +217,7 @@ static void isabus_bridge_class_init(ObjectClass *klass, void *data) + + k->init = isabus_bridge_init; + dc->fw_name = "isa"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo isabus_bridge_info = { +diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c +index 2760dce..580e9ac 100644 +--- a/hw/isa/lpc_ich9.c ++++ b/hw/isa/lpc_ich9.c +@@ -603,7 +603,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data) + dc->reset = ich9_lpc_reset; + k->init = ich9_lpc_initfn; + dc->vmsd = &vmstate_ich9_lpc; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + k->config_write = ich9_lpc_config_write; + dc->desc = "ICH9 LPC bridge"; + k->vendor_id = PCI_VENDOR_ID_INTEL; +diff --git a/hw/isa/piix4.c b/hw/isa/piix4.c +index d750413..10bf8ff 100644 +--- a/hw/isa/piix4.c ++++ b/hw/isa/piix4.c +@@ -113,7 +113,7 @@ static void piix4_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371AB_0; + k->class_id = PCI_CLASS_BRIDGE_ISA; + dc->desc = "ISA bridge"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_piix4; + } + +diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c +index 79057a6..563e154 100644 +--- a/hw/isa/vt82c686.c ++++ b/hw/isa/vt82c686.c +@@ -468,7 +468,7 @@ static void via_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_BRIDGE_ISA; + k->revision = 0x40; + dc->desc = "ISA bridge"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_via; + } + +diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c +index eb4427d..2b19e34 100644 +--- a/hw/misc/arm_l2x0.c ++++ b/hw/misc/arm_l2x0.c +@@ -174,7 +174,7 @@ static void l2x0_class_init(ObjectClass *klass, void *data) + + k->init = l2x0_priv_init; + dc->vmsd = &vmstate_l2x0; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = l2x0_properties; + dc->reset = l2x0_priv_reset; + } +diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c +index 31e1b1d..af4a8b2 100644 +--- a/hw/misc/pvpanic.c ++++ b/hw/misc/pvpanic.c +@@ -125,7 +125,7 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + + ic->init = pvpanic_isa_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = pvpanic_isa_properties; + } + +diff --git a/hw/misc/vmport.c b/hw/misc/vmport.c +index c146129..ab7adf1 100644 +--- a/hw/misc/vmport.c ++++ b/hw/misc/vmport.c +@@ -156,7 +156,7 @@ static void vmport_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = vmport_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo vmport_info = { +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 1a7e49c..155edd4 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -559,7 +559,7 @@ static void fw_cfg_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = fw_cfg_init1; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = fw_cfg_reset; + dc->vmsd = &vmstate_fw_cfg; + dc->props = fw_cfg_properties; +diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c +index 974150b..b73359e 100644 +--- a/hw/pci-host/bonito.c ++++ b/hw/pci-host/bonito.c +@@ -811,7 +811,7 @@ static void bonito_class_init(ObjectClass *klass, void *data) + k->revision = 0x01; + k->class_id = PCI_CLASS_BRIDGE_HOST; + dc->desc = "Host bridge"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_bonito; + } + +@@ -828,7 +828,7 @@ static void bonito_pcihost_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = bonito_pcihost_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo bonito_pcihost_info = { +diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c +index 69344d9..5eb2840 100644 +--- a/hw/pci-host/grackle.c ++++ b/hw/pci-host/grackle.c +@@ -130,7 +130,7 @@ static void grackle_pci_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_MOTOROLA_MPC106; + k->revision = 0x00; + k->class_id = PCI_CLASS_BRIDGE_HOST; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo grackle_pci_info = { +@@ -146,7 +146,7 @@ static void pci_grackle_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = pci_grackle_init_device; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo grackle_pci_host_info = { +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index f9e68c3..b9c2dcf 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -564,7 +564,7 @@ static void piix3_class_init(ObjectClass *klass, void *data) + + dc->desc = "ISA bridge"; + dc->vmsd = &vmstate_piix3; +- dc->no_user = 1, ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + k->no_hotplug = 1; + k->init = piix3_initfn; + k->config_write = piix3_write_config; +@@ -588,7 +588,7 @@ static void piix3_xen_class_init(ObjectClass *klass, void *data) + + dc->desc = "ISA bridge"; + dc->vmsd = &vmstate_piix3; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + k->no_hotplug = 1; + k->init = piix3_initfn; + k->config_write = piix3_write_config_xen; +@@ -618,7 +618,7 @@ static void i440fx_class_init(ObjectClass *klass, void *data) + k->revision = 0x02; + k->class_id = PCI_CLASS_BRIDGE_HOST; + dc->desc = "Host bridge"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_i440fx; + } + +@@ -636,7 +636,7 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data) + + k->init = i440fx_pcihost_initfn; + dc->fw_name = "pci"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo i440fx_pcihost_info = { +diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c +index 8c4e6eb..eec538e 100644 +--- a/hw/pci-host/prep.c ++++ b/hw/pci-host/prep.c +@@ -196,7 +196,7 @@ static void raven_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_BRIDGE_HOST; + dc->desc = "PReP Host Bridge - Motorola Raven"; + dc->vmsd = &vmstate_raven; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo raven_info = { +@@ -213,7 +213,7 @@ static void raven_pcihost_class_init(ObjectClass *klass, void *data) + set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->realize = raven_pcihost_realizefn; + dc->fw_name = "pci"; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo raven_pcihost_info = { +diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c +index 1405c32..42b6367 100644 +--- a/hw/ppc/spapr_vio.c ++++ b/hw/ppc/spapr_vio.c +@@ -533,7 +533,7 @@ static void spapr_vio_bridge_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = spapr_vio_bridge_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo spapr_vio_bridge_info = { +diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c +index d69adb2..f86a4af 100644 +--- a/hw/s390x/ipl.c ++++ b/hw/s390x/ipl.c +@@ -181,7 +181,7 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data) + k->init = s390_ipl_init; + dc->props = s390_ipl_properties; + dc->reset = s390_ipl_reset; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo s390_ipl_info = { +diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c +index 207eb82..9078bfb 100644 +--- a/hw/s390x/s390-virtio-bus.c ++++ b/hw/s390x/s390-virtio-bus.c +@@ -679,7 +679,7 @@ static void s390_virtio_bridge_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = s390_virtio_bridge_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo s390_virtio_bridge_info = { +diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c +index de51589..74eb559 100644 +--- a/hw/s390x/virtio-ccw.c ++++ b/hw/s390x/virtio-ccw.c +@@ -1075,7 +1075,7 @@ static void virtual_css_bridge_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = virtual_css_bridge_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo virtual_css_bridge_info = { +diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c +index 2527296..95e4587 100644 +--- a/hw/sd/pl181.c ++++ b/hw/sd/pl181.c +@@ -497,7 +497,7 @@ static void pl181_class_init(ObjectClass *klass, void *data) + sdc->init = pl181_init; + k->vmsd = &vmstate_pl181; + k->reset = pl181_reset; +- k->no_user = 1; ++ k->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo pl181_info = { +diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c +index 317f5e4..6b088fa 100644 +--- a/hw/timer/arm_mptimer.c ++++ b/hw/timer/arm_mptimer.c +@@ -290,7 +290,7 @@ static void arm_mptimer_class_init(ObjectClass *klass, void *data) + sbc->init = arm_mptimer_init; + dc->vmsd = &vmstate_arm_mptimer; + dc->reset = arm_mptimer_reset; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = arm_mptimer_properties; + } + +diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c +index 95dd01d..3f7f457 100644 +--- a/hw/timer/hpet.c ++++ b/hw/timer/hpet.c +@@ -739,7 +739,7 @@ static void hpet_device_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = hpet_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = hpet_reset; + dc->vmsd = &vmstate_hpet; + dc->props = hpet_device_properties; +diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c +index f6f9d26..8f01313 100644 +--- a/hw/timer/i8254_common.c ++++ b/hw/timer/i8254_common.c +@@ -291,7 +291,7 @@ static void pit_common_class_init(ObjectClass *klass, void *data) + + ic->init = pit_init_common; + dc->vmsd = &vmstate_pit_common; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo pit_common_type = { +diff --git a/hw/timer/m48t59.c b/hw/timer/m48t59.c +index 45753d8..e536bb9 100644 +--- a/hw/timer/m48t59.c ++++ b/hw/timer/m48t59.c +@@ -740,7 +740,7 @@ static void m48t59_isa_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = m48t59_init_isa1; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = m48t59_reset_isa; + dc->props = m48t59_isa_properties; + } +diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c +index 481604d..7a70556 100644 +--- a/hw/timer/mc146818rtc.c ++++ b/hw/timer/mc146818rtc.c +@@ -904,7 +904,7 @@ static void rtc_class_initfn(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = rtc_initfn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_rtc; + dc->props = mc146818rtc_properties; + } +diff --git a/hw/timer/pl031.c b/hw/timer/pl031.c +index 764940b..aa9c5a6 100644 +--- a/hw/timer/pl031.c ++++ b/hw/timer/pl031.c +@@ -246,7 +246,7 @@ static void pl031_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl031_init; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl031; + } + +diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h +index a8618db..44feb54 100644 +--- a/include/hw/qdev-core.h ++++ b/include/hw/qdev-core.h +@@ -97,7 +97,18 @@ typedef struct DeviceClass { + const char *fw_name; + const char *desc; + Property *props; +- int no_user; ++ ++ /* ++ * Shall we hide this device model from -device / device_add? ++ * All devices should support instantiation with device_add, and ++ * this flag should not exist. But we're not there, yet. Some ++ * devices fail to instantiate with cryptic error messages. ++ * Others instantiate, but don't work. Exposing users to such ++ * behavior would be cruel; this flag serves to protect them. It ++ * should never be set without a comment explaining why it is set. ++ * TODO remove once we're there ++ */ ++ bool cannot_instantiate_with_device_add_yet; + + /* callbacks */ + void (*reset)(DeviceState *dev); +diff --git a/qdev-monitor.c b/qdev-monitor.c +index aa6a261..f54cb21 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -87,7 +87,7 @@ static void qdev_print_devinfo(DeviceClass *dc) + if (dc->desc) { + error_printf(", desc \"%s\"", dc->desc); + } +- if (dc->no_user) { ++ if (dc->cannot_instantiate_with_device_add_yet) { + error_printf(", no-user"); + } + error_printf("\n"); +@@ -127,7 +127,8 @@ static void qdev_print_devinfos(bool show_no_user) + if ((i < DEVICE_CATEGORY_MAX + ? !test_bit(i, dc->categories) + : !bitmap_empty(dc->categories, DEVICE_CATEGORY_MAX)) +- || (!show_no_user && dc->no_user)) { ++ || (!show_no_user ++ && dc->cannot_instantiate_with_device_add_yet)) { + continue; + } + if (!cat_printed) { +diff --git a/qom/cpu.c b/qom/cpu.c +index b25fbc9..f97e1b8 100644 +--- a/qom/cpu.c ++++ b/qom/cpu.c +@@ -210,7 +210,7 @@ static void cpu_class_init(ObjectClass *klass, void *data) + k->write_elf64_qemunote = cpu_common_write_elf64_qemunote; + k->write_elf64_note = cpu_common_write_elf64_note; + dc->realize = cpu_common_realizefn; +- dc->no_user = 1; ++ dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo cpu_type_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-Use-clz-in-print_size.patch b/SOURCES/kvm-qdev-Use-clz-in-print_size.patch new file mode 100644 index 0000000..8b8371a --- /dev/null +++ b/SOURCES/kvm-qdev-Use-clz-in-print_size.patch @@ -0,0 +1,69 @@ +From 5a3112e24aa41c50703739ccf419bad6136eb797 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 22 Jan 2014 12:13:55 +0100 +Subject: [PATCH 4/4] qdev: Use clz in print_size + +RH-Author: Markus Armbruster +Message-id: <1390392835-21809-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56888 +O-Subject: [PATCH 7.0 qemu-kvm 2/2] qdev: Use clz in print_size +Bugzilla: 1034876 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Michael S. Tsirkin + +From: Richard Henderson + +We can compute a floor log2 value with clz rather than a division loop. + +Signed-off-by: Richard Henderson +Message-id: 1375208443-17288-3-git-send-email-rth@twiddle.net +Signed-off-by: Anthony Liguori +(cherry picked from commit 1197cbb9eda1dc82e2fa1815ca62bc3de158353e) +Signed-off-by: Markus Armbruster +--- + hw/core/qdev-properties.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/core/qdev-properties.c | 20 +++++++++++++------- + 1 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c +index d6d10c9..dc8ae69 100644 +--- a/hw/core/qdev-properties.c ++++ b/hw/core/qdev-properties.c +@@ -1172,15 +1172,21 @@ static int parse_size(DeviceState *dev, Property *prop, const char *str) + + static int print_size(DeviceState *dev, Property *prop, char *dest, size_t len) + { +- uint64_t *ptr = qdev_get_prop_ptr(dev, prop); +- char suffixes[] = {'T', 'G', 'M', 'K', 'B'}; +- int i = 0; +- uint64_t div; ++ static const char suffixes[] = { 'B', 'K', 'M', 'G', 'T' }; ++ uint64_t div, val = *(uint64_t *)qdev_get_prop_ptr(dev, prop); ++ int i; + +- for (div = 1ULL << 40; !(*ptr / div) ; div >>= 10) { +- i++; ++ /* Compute floor(log2(val)). */ ++ i = 64 - clz64(val); ++ ++ /* Find the power of 1024 that we'll display as the units. */ ++ i /= 10; ++ if (i >= ARRAY_SIZE(suffixes)) { ++ i = ARRAY_SIZE(suffixes) - 1; + } +- return snprintf(dest, len, "%0.03f%c", (double)*ptr/div, suffixes[i]); ++ div = 1ULL << (i * 10); ++ ++ return snprintf(dest, len, "%0.03f%c", (double)val/div, suffixes[i]); + } + + PropertyInfo qdev_prop_size = { +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Avoid-device_add-crashing-on-non-device.patch b/SOURCES/kvm-qdev-monitor-Avoid-device_add-crashing-on-non-device.patch new file mode 100644 index 0000000..36eae10 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Avoid-device_add-crashing-on-non-device.patch @@ -0,0 +1,57 @@ +From d2b004602412ce65613b30f28d07ef8607e0d505 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:58 +0100 +Subject: [PATCH 08/11] qdev-monitor: Avoid device_add crashing on non-device driver name +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-9-git-send-email-armbru@redhat.com> +Patchwork-id: 56795 +O-Subject: [PATCH 7.0 qemu-kvm 8/9] qdev-monitor: Avoid device_add crashing on non-device driver name +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +Watch this: + + $ upstream-qemu -nodefaults -S -display none -monitor stdio + QEMU 1.7.50 monitor - type 'help' for more information + (qemu) device_add rng-egd + /work/armbru/qemu/qdev-monitor.c:491:qdev_device_add: Object 0x2089b00 is not an instance of type device + Aborted (core dumped) + +Crashes because "rng-egd" exists, but isn't a subtype of TYPE_DEVICE. +Broken in commit 18b6dad. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Markus Armbruster +Signed-off-by: Andreas Färber +(cherry picked from commit 061e84f7a469ad1f94f3b5f6a5361b346ab990e8) +--- + qdev-monitor.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index da7fe0d..55a476b 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -478,7 +478,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + } + +- if (!oc) { ++ if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) { + qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", "device type"); + return NULL; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Avoid-qdev-as-variable-name.patch b/SOURCES/kvm-qdev-monitor-Avoid-qdev-as-variable-name.patch new file mode 100644 index 0000000..7081507 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Avoid-qdev-as-variable-name.patch @@ -0,0 +1,107 @@ +From 7f65c774ae1c40ca38de8db14ad5637390c6c2e7 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:55 +0100 +Subject: [PATCH 05/11] qdev-monitor: Avoid qdev as variable name +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-6-git-send-email-armbru@redhat.com> +Patchwork-id: 56791 +O-Subject: [PATCH 7.0 qemu-kvm 5/9] qdev-monitor: Avoid qdev as variable name +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +From: Andreas Färber + +Prepares for bringing error cleanup code into canonical QOM form. + +Includes a whitespace removal after curly brace by Stefan. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 2bcb0c62f620a7033e9e25c5b645d50bf9e6a8f2) +Signed-off-by: Markus Armbruster +--- + qdev-monitor.c | 32 ++++++++++++++++---------------- + 1 file changed, 16 insertions(+), 16 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 32 ++++++++++++++++---------------- + 1 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index f313a94..464e7bd 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -457,7 +457,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + ObjectClass *oc; + DeviceClass *dc; + const char *driver, *path, *id; +- DeviceState *qdev; ++ DeviceState *dev; + BusState *bus = NULL; + + driver = qemu_opt_get(opts, "driver"); +@@ -516,38 +516,38 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + + /* create device, set properties */ +- qdev = DEVICE(object_new(driver)); ++ dev = DEVICE(object_new(driver)); + + if (bus) { +- qdev_set_parent_bus(qdev, bus); ++ qdev_set_parent_bus(dev, bus); + } + + id = qemu_opts_id(opts); + if (id) { +- qdev->id = id; ++ dev->id = id; + } +- if (qemu_opt_foreach(opts, set_property, qdev, 1) != 0) { +- object_unparent(OBJECT(qdev)); +- object_unref(OBJECT(qdev)); ++ if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) { ++ object_unparent(OBJECT(dev)); ++ object_unref(OBJECT(dev)); + return NULL; + } +- if (qdev->id) { +- object_property_add_child(qdev_get_peripheral(), qdev->id, +- OBJECT(qdev), NULL); ++ if (dev->id) { ++ object_property_add_child(qdev_get_peripheral(), dev->id, ++ OBJECT(dev), NULL); + } else { + static int anon_count; + gchar *name = g_strdup_printf("device[%d]", anon_count++); + object_property_add_child(qdev_get_peripheral_anon(), name, +- OBJECT(qdev), NULL); ++ OBJECT(dev), NULL); + g_free(name); +- } +- if (qdev_init(qdev) < 0) { +- object_unref(OBJECT(qdev)); ++ } ++ if (qdev_init(dev) < 0) { ++ object_unref(OBJECT(dev)); + qerror_report(QERR_DEVICE_INIT_FAILED, driver); + return NULL; + } +- qdev->opts = opts; +- return qdev; ++ dev->opts = opts; ++ return dev; + } + + +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Clean-up-qdev_device_add-variable-namin.patch b/SOURCES/kvm-qdev-monitor-Clean-up-qdev_device_add-variable-namin.patch new file mode 100644 index 0000000..1e80125 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Clean-up-qdev_device_add-variable-namin.patch @@ -0,0 +1,101 @@ +From 4767cbd32744d8dff462233b6509f31ebe826588 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:53 +0100 +Subject: [PATCH 03/11] qdev-monitor: Clean up qdev_device_add() variable naming +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-4-git-send-email-armbru@redhat.com> +Patchwork-id: 56786 +O-Subject: [PATCH 7.0 qemu-kvm 3/9] qdev-monitor: Clean up qdev_device_add() variable naming +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +From: Andreas Färber + +Avoid confusion between object (obj) and object class (oc). +Tidy DeviceClass variable while at it (k -> dc). + +Signed-off-by: Andreas Färber +(cherry picked from commit f4d85795605c7dc594c013221a4b6d62967bd8ab) +Signed-off-by: Markus Armbruster +--- + qdev-monitor.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index d187db5..5b45d02 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -454,8 +454,8 @@ static BusState *qbus_find(const char *path) + + DeviceState *qdev_device_add(QemuOpts *opts) + { +- ObjectClass *obj; +- DeviceClass *k; ++ ObjectClass *oc; ++ DeviceClass *dc; + const char *driver, *path, *id; + DeviceState *qdev; + BusState *bus = NULL; +@@ -467,22 +467,22 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + + /* find driver */ +- obj = object_class_by_name(driver); +- if (!obj) { ++ oc = object_class_by_name(driver); ++ if (!oc) { + const char *typename = find_typename_by_alias(driver); + + if (typename) { + driver = typename; +- obj = object_class_by_name(driver); ++ oc = object_class_by_name(driver); + } + } + +- if (!obj) { ++ if (!oc) { + qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", "device type"); + return NULL; + } + +- k = DEVICE_CLASS(obj); ++ dc = DEVICE_CLASS(oc); + + /* find bus */ + path = qemu_opt_get(opts, "bus"); +@@ -491,16 +491,16 @@ DeviceState *qdev_device_add(QemuOpts *opts) + if (!bus) { + return NULL; + } +- if (!object_dynamic_cast(OBJECT(bus), k->bus_type)) { ++ if (!object_dynamic_cast(OBJECT(bus), dc->bus_type)) { + qerror_report(QERR_BAD_BUS_FOR_DEVICE, + driver, object_get_typename(OBJECT(bus))); + return NULL; + } +- } else if (k->bus_type != NULL) { +- bus = qbus_find_recursive(sysbus_get_default(), NULL, k->bus_type); ++ } else if (dc->bus_type != NULL) { ++ bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type); + if (!bus) { + qerror_report(QERR_NO_BUS_FOR_DEVICE, +- k->bus_type, driver); ++ dc->bus_type, driver); + return NULL; + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Fix-crash-when-device_add-is-called-wit.patch b/SOURCES/kvm-qdev-monitor-Fix-crash-when-device_add-is-called-wit.patch new file mode 100644 index 0000000..6126084 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Fix-crash-when-device_add-is-called-wit.patch @@ -0,0 +1,71 @@ +From 3e97a22728afed3c77140486ec3863eba941535b Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Mon, 13 Jan 2014 13:45:57 +0100 +Subject: [PATCH 11/16] qdev-monitor: Fix crash when device_add is called with abstract driver +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1389620557-30050-1-git-send-email-mst@redhat.com> +Patchwork-id: 56642 +O-Subject: [PATCH qemu-kvm RHEL7.0] qdev-monitor: Fix crash when device_add is called with abstract driver +Bugzilla: 1026712 +RH-Acked-by: Amos Kong +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Markus Armbruster +RH-Acked-by: Igor Mammedov + +From: Igor Mammedov + +User is able to crash running QEMU when following monitor +command is called: + + device_add intel-hda-generic + +Crash is caused by assertion in object_initialize_with_type() +when type is abstract. + +Checking if type is abstract before instance is created in +qdev_device_add() allows to prevent crash on incorrect user input. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 2fa4e56d88aa0039062bbc7f9a88e9f90c77ed94) + +Conflicts: + qdev-monitor.c + +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6859928 +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1046007 + +--- + qdev-monitor.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index f78ff64..979502e 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -477,6 +477,12 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + } + ++ if (object_class_is_abstract(obj)) { ++ qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", ++ "non-abstract device type"); ++ return NULL; ++ } ++ + k = DEVICE_CLASS(obj); + + if (!k || k->cannot_instantiate_with_device_add_yet) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Fix-crash-when-device_add-is-called.2.patch.patch b/SOURCES/kvm-qdev-monitor-Fix-crash-when-device_add-is-called.2.patch.patch new file mode 100644 index 0000000..7aadf36 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Fix-crash-when-device_add-is-called.2.patch.patch @@ -0,0 +1,64 @@ +From 26c346739c8772521b68e4763321d7bdfc49efd4 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:54 +0100 +Subject: [PATCH 04/11] qdev-monitor: Fix crash when device_add is called with abstract driver +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-5-git-send-email-armbru@redhat.com> +Patchwork-id: 56787 +O-Subject: [PATCH 7.0 qemu-kvm 4/9] qdev-monitor: Fix crash when device_add is called with abstract driver +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +From: Igor Mammedov + +User is able to crash running QEMU when following monitor +command is called: + + device_add intel-hda-generic + +Crash is caused by assertion in object_initialize_with_type() +when type is abstract. + +Checking if type is abstract before instance is created in +qdev_device_add() allows to prevent crash on incorrect user input. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 2fa4e56d88aa0039062bbc7f9a88e9f90c77ed94) +Signed-off-by: Markus Armbruster +--- + qdev-monitor.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 5b45d02..f313a94 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -482,6 +482,12 @@ DeviceState *qdev_device_add(QemuOpts *opts) + return NULL; + } + ++ if (object_class_is_abstract(oc)) { ++ qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", ++ "non-abstract device type"); ++ return NULL; ++ } ++ + dc = DEVICE_CLASS(oc); + + /* find bus */ +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Group-device_add-help-and-info-qdm-by-c.patch b/SOURCES/kvm-qdev-monitor-Group-device_add-help-and-info-qdm-by-c.patch new file mode 100644 index 0000000..c48605d --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Group-device_add-help-and-info-qdm-by-c.patch @@ -0,0 +1,142 @@ +From 4729118339de86313e09cb20414ba699510a80cc Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:11 +0100 +Subject: [PATCH 35/81] qdev-monitor: Group "device_add help" and "info qdm" by category + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 55532 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 06/17] qdev-monitor: Group "device_add help" and "info qdm" by category +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Output is a long, unsorted list. Not very helpful. Print one list +per device category instead, with a header line identifying the +category, plus a list of uncategorized devices. Print each list in +case-insenitive alphabetical order. + +Devices with multiple categories are listed multiple times. + +Signed-off-by: Markus Armbruster +Reviewed-by: Marcel Apfelbaum +Message-id: 1381410021-1538-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit a3400aeede46c6c30b6fefb20fc90a43f1f6e7b2) +Signed-off-by: Kevin Wolf +--- + qdev-monitor.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++------------ + 1 file changed, 53 insertions(+), 14 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 67 ++++++++++++++++++++++++++++++++++++++++++++----------- + 1 files changed, 53 insertions(+), 14 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index e54dbc2..aa6a261 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -75,18 +75,9 @@ static bool qdev_class_has_alias(DeviceClass *dc) + return (qdev_class_get_alias(dc) != NULL); + } + +-static void qdev_print_devinfo(ObjectClass *klass, void *opaque) ++static void qdev_print_devinfo(DeviceClass *dc) + { +- DeviceClass *dc; +- bool *show_no_user = opaque; +- +- dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE); +- +- if (!dc || (show_no_user && !*show_no_user && dc->no_user)) { +- return; +- } +- +- error_printf("name \"%s\"", object_class_get_name(klass)); ++ error_printf("name \"%s\"", object_class_get_name(OBJECT_CLASS(dc))); + if (dc->bus_type) { + error_printf(", bus %s", dc->bus_type); + } +@@ -102,6 +93,55 @@ static void qdev_print_devinfo(ObjectClass *klass, void *opaque) + error_printf("\n"); + } + ++static gint devinfo_cmp(gconstpointer a, gconstpointer b) ++{ ++ return strcasecmp(object_class_get_name((ObjectClass *)a), ++ object_class_get_name((ObjectClass *)b)); ++} ++ ++static void qdev_print_devinfos(bool show_no_user) ++{ ++ static const char *cat_name[DEVICE_CATEGORY_MAX + 1] = { ++ [DEVICE_CATEGORY_BRIDGE] = "Controller/Bridge/Hub", ++ [DEVICE_CATEGORY_USB] = "USB", ++ [DEVICE_CATEGORY_STORAGE] = "Storage", ++ [DEVICE_CATEGORY_NETWORK] = "Network", ++ [DEVICE_CATEGORY_INPUT] = "Input", ++ [DEVICE_CATEGORY_DISPLAY] = "Display", ++ [DEVICE_CATEGORY_SOUND] = "Sound", ++ [DEVICE_CATEGORY_MISC] = "Misc", ++ [DEVICE_CATEGORY_MAX] = "Uncategorized", ++ }; ++ GSList *list, *elt; ++ int i; ++ bool cat_printed; ++ ++ list = g_slist_sort(object_class_get_list(TYPE_DEVICE, false), ++ devinfo_cmp); ++ ++ for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) { ++ cat_printed = false; ++ for (elt = list; elt; elt = elt->next) { ++ DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data, ++ TYPE_DEVICE); ++ if ((i < DEVICE_CATEGORY_MAX ++ ? !test_bit(i, dc->categories) ++ : !bitmap_empty(dc->categories, DEVICE_CATEGORY_MAX)) ++ || (!show_no_user && dc->no_user)) { ++ continue; ++ } ++ if (!cat_printed) { ++ error_printf("%s%s devices:\n", i ? "\n" : "", ++ cat_name[i]); ++ cat_printed = true; ++ } ++ qdev_print_devinfo(dc); ++ } ++ } ++ ++ g_slist_free(list); ++} ++ + static int set_property(const char *name, const char *value, void *opaque) + { + DeviceState *dev = opaque; +@@ -147,8 +187,7 @@ int qdev_device_help(QemuOpts *opts) + + driver = qemu_opt_get(opts, "driver"); + if (driver && is_help_option(driver)) { +- bool show_no_user = false; +- object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, &show_no_user); ++ qdev_print_devinfos(false); + return 1; + } + +@@ -587,7 +626,7 @@ void do_info_qtree(Monitor *mon, const QDict *qdict) + + void do_info_qdm(Monitor *mon, const QDict *qdict) + { +- object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, NULL); ++ qdev_print_devinfos(true); + } + + int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data) +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Improve-error-message-for-device-nonexi.patch b/SOURCES/kvm-qdev-monitor-Improve-error-message-for-device-nonexi.patch new file mode 100644 index 0000000..b735041 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Improve-error-message-for-device-nonexi.patch @@ -0,0 +1,70 @@ +From 41eb96b80b2e805573cc79e3b6e7eff49892dd47 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:59 +0100 +Subject: [PATCH 09/11] qdev-monitor: Improve error message for -device nonexistant +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-10-git-send-email-armbru@redhat.com> +Patchwork-id: 56794 +O-Subject: [PATCH 7.0 qemu-kvm 9/9] qdev-monitor: Improve error message for -device nonexistant +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +Once upon a time, the error message was: + + qemu: -device nonexistant: Device "nonexistant" not found. Try -device '?' for a list. + +But progress marches on, and conversion to QError (commit 0204276) +changed it into: + + Invalid parameter 'driver' + Try with argument '?' for a list. + +Progress didn't stop there, of course. After a couple of iterations, +we arrived at the current message (commit 6acbe4c): + + qemu: -device nonexistant: Parameter 'driver' expects device type + +Mission accomplished: this is complete mush. + +We've since abandoned our quest for "rich" error objects, fortunately +before it turned all error messages into mush. Time to undo the +damage to this one. Make it: + + qemu: -device nonexistant: nonexistant is not a valid device model name + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Andreas Färber +(cherry picked from commit 11c308b17a34932033cceca4f88b5e67009e3ebd) +--- + qdev-monitor.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 55a476b..ac65a10 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -479,7 +479,8 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + + if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) { +- qerror_report(QERR_INVALID_PARAMETER_VALUE, "driver", "device type"); ++ qerror_report(ERROR_CLASS_GENERIC_ERROR, ++ "'%s' is not a valid device model name", driver); + return NULL; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Inline-qdev_init-for-device_add.patch b/SOURCES/kvm-qdev-monitor-Inline-qdev_init-for-device_add.patch new file mode 100644 index 0000000..57c5f22 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Inline-qdev_init-for-device_add.patch @@ -0,0 +1,63 @@ +From 69d7d4071c52078ff3040d693e07063de2730925 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 17 Jan 2014 17:07:56 +0100 +Subject: [PATCH 06/11] qdev-monitor: Inline qdev_init() for device_add +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1389978479-30595-7-git-send-email-armbru@redhat.com> +Patchwork-id: 56793 +O-Subject: [PATCH 7.0 qemu-kvm 6/9] qdev-monitor: Inline qdev_init() for device_add +Bugzilla: 669524 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +From: Andreas Färber + +For historic reasons, qdev_init() unparents the device on failure. +Inline this to make the error paths clearer and consistent. + +Reviewed-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 852e2c5008563692a8868260480e76b95bb9018c) +Signed-off-by: Markus Armbruster +--- + qdev-monitor.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 464e7bd..eb05b4c 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -459,6 +459,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + const char *driver, *path, *id; + DeviceState *dev; + BusState *bus = NULL; ++ Error *err = NULL; + + driver = qemu_opt_get(opts, "driver"); + if (!driver) { +@@ -541,7 +542,11 @@ DeviceState *qdev_device_add(QemuOpts *opts) + OBJECT(dev), NULL); + g_free(name); + } +- if (qdev_init(dev) < 0) { ++ object_property_set_bool(OBJECT(dev), true, "realized", &err); ++ if (err != NULL) { ++ qerror_report_err(err); ++ error_free(err); ++ object_unparent(OBJECT(dev)); + object_unref(OBJECT(dev)); + qerror_report(QERR_DEVICE_INIT_FAILED, driver); + return NULL; +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Set-properties-after-parent-is-assigned.patch b/SOURCES/kvm-qdev-monitor-Set-properties-after-parent-is-assigned.patch new file mode 100644 index 0000000..52c8660 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Set-properties-after-parent-is-assigned.patch @@ -0,0 +1,91 @@ +From b4d1a1c8b3448337e9b5e33706913b82356d22a7 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 11 Mar 2014 23:59:22 +0100 +Subject: [PATCH 1/6] qdev-monitor: Set properties after parent is assigned in device_add +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Amos Kong +Message-id: <1394582362-8252-1-git-send-email-akong@redhat.com> +Patchwork-id: 58081 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] qdev-monitor: Set properties after parent is assigned in device_add +Bugzilla: 1046248 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Xiao Wang +RH-Acked-by: Igor Mammedov + +Bugzilla: 1046248 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7190260 +Upstream: backported from qemu-cpu subtree (qom-next branch) + commit bd140cf43d0373cca4c17efaf2ce730cdcbc0c4e + +Test steps: + (qemu) device_add e1000,addr=adsf + Property 'e1000.addr' doesn't take value 'adsf' + (qemu) info qtree + Then qemu crashed. + +Currently we set a link to the new device from its parent bus, but the +device hasn't been added to QOM tree yet. When it fails to set properties, +object_unparent() can't clean up the device. + +Delay setting of device properties until the device has been added to +the QOM composition tree. This way, when setting a property fails, +object_unparent() can clean up the device properly. + +Signed-off-by: Amos Kong +Reviewed-by: Igor Mammedov +Signed-off-by: Andreas Färber +--- + qdev-monitor.c | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 15 +++++++++------ + 1 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index d7b9f04..ee891ea 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -522,7 +522,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + return NULL; + } + +- /* create device, set properties */ ++ /* create device */ + dev = DEVICE(object_new(driver)); + + if (bus) { +@@ -533,11 +533,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + if (id) { + dev->id = id; + } +- if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) { +- object_unparent(OBJECT(dev)); +- object_unref(OBJECT(dev)); +- return NULL; +- } ++ + if (dev->id) { + object_property_add_child(qdev_get_peripheral(), dev->id, + OBJECT(dev), NULL); +@@ -549,6 +545,13 @@ DeviceState *qdev_device_add(QemuOpts *opts) + g_free(name); + } + ++ /* set properties */ ++ if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) { ++ object_unparent(OBJECT(dev)); ++ object_unref(OBJECT(dev)); ++ return NULL; ++ } ++ + dev->opts = opts; + object_property_set_bool(OBJECT(dev), true, "realized", &err); + if (err != NULL) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-Unref-device-when-device_add-fails.patch b/SOURCES/kvm-qdev-monitor-Unref-device-when-device_add-fails.patch new file mode 100644 index 0000000..39ebd0a --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-Unref-device-when-device_add-fails.patch @@ -0,0 +1,61 @@ +From 527da6c2ce2c09d0183aa8595fc95f136f61b6df Mon Sep 17 00:00:00 2001 +Message-Id: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:21 +0100 +Subject: [PATCH 1/8] qdev-monitor: Unref device when device_add fails +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 56255 +O-Subject: [RHEL7 qemu-kvm PATCH 1/8] qdev-monitor: Unref device when device_add fails +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +qdev_device_add() leaks the created device upon failure. I suspect this +problem crept in because qdev_free() unparents the device but does not +drop a reference - confusing name. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Signed-off-by: Andreas Färber +(cherry picked from commit ee6abeb6ec08473713848ce9028110f1684853b7) + +Signed-off-by: Stefan Hajnoczi +--- + qdev-monitor.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Michal Novotny +--- + qdev-monitor.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index 39d030b..9d4f61d 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -522,6 +522,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + } + if (qemu_opt_foreach(opts, set_property, qdev, 1) != 0) { + qdev_free(qdev); ++ object_unref(OBJECT(qdev)); + return NULL; + } + if (qdev->id) { +@@ -535,6 +536,7 @@ DeviceState *qdev_device_add(QemuOpts *opts) + g_free(name); + } + if (qdev_init(qdev) < 0) { ++ object_unref(OBJECT(qdev)); + qerror_report(QERR_DEVICE_INIT_FAILED, driver); + return NULL; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qdev-monitor-set-DeviceState-opts-before-calling-rea.patch b/SOURCES/kvm-qdev-monitor-set-DeviceState-opts-before-calling-rea.patch new file mode 100644 index 0000000..19c3c80 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-set-DeviceState-opts-before-calling-rea.patch @@ -0,0 +1,62 @@ +From 0bc5bd314b821409555ed0c0b281733a8c66d39d Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Thu, 27 Feb 2014 18:31:16 +0100 +Subject: [PATCH 4/6] qdev-monitor: set DeviceState opts before calling realize +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Bandan Das +Message-id: <1393525877-32262-2-git-send-email-bsd@redhat.com> +Patchwork-id: 57932 +O-Subject: [PATCH RHEL-7.0 qemu-kvm v2 1/2] qdev-monitor: set DeviceState opts before calling realize +Bugzilla: 1037956 +RH-Acked-by: Alex Williamson +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +Setting opts before the realize property is set allows the +following patch to make decisions based on whether the user +specified "rombar". This also avoids having to create a new +tristate property especially for this purpose + +Reviewed-by: Andreas Färber +Signed-off-by: Bandan Das +Signed-off-by: Alex Williamson +(cherry picked from commit 52aa17cbd800b9e71b67cf7f80c3498183d34ec8) +--- + qdev-monitor.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qdev-monitor.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/qdev-monitor.c b/qdev-monitor.c +index ac65a10..d7b9f04 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -548,16 +548,18 @@ DeviceState *qdev_device_add(QemuOpts *opts) + OBJECT(dev), NULL); + g_free(name); + } ++ ++ dev->opts = opts; + object_property_set_bool(OBJECT(dev), true, "realized", &err); + if (err != NULL) { + qerror_report_err(err); + error_free(err); ++ dev->opts = NULL; + object_unparent(OBJECT(dev)); + object_unref(OBJECT(dev)); + qerror_report(QERR_DEVICE_INIT_FAILED, driver); + return NULL; + } +- dev->opts = opts; + return dev; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qdev-monitor-test-add-device_add-leak-test-cases.patch b/SOURCES/kvm-qdev-monitor-test-add-device_add-leak-test-cases.patch new file mode 100644 index 0000000..fd09d36 --- /dev/null +++ b/SOURCES/kvm-qdev-monitor-test-add-device_add-leak-test-cases.patch @@ -0,0 +1,154 @@ +From e1cfab2e4723088d7fb011c1deda763c03682f81 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:27 +0100 +Subject: [PATCH 7/8] qdev-monitor-test: add device_add leak test cases + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-8-git-send-email-stefanha@redhat.com> +Patchwork-id: 56261 +O-Subject: [RHEL7 qemu-kvm PATCH 7/8] qdev-monitor-test: add device_add leak test cases +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +Ensure that the device_add error code path deletes device objects. +Failure to do so not only leaks the objects but can also keep other +objects (like drive or netdev) alive due to qdev properties holding +references. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +(cherry picked from commit 43cd209803d6cffb1e1a028c9ff2fd0ff4fce954) +Signed-off-by: Stefan Hajnoczi + +Conflicts: + tests/Makefile + +Makefile diff context conflict. +--- + tests/Makefile | 2 ++ + tests/qdev-monitor-test.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 83 insertions(+) + create mode 100644 tests/qdev-monitor-test.c + +Signed-off-by: Michal Novotny +--- + tests/Makefile | 2 ++ + tests/qdev-monitor-test.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 83 insertions(+) + create mode 100644 tests/qdev-monitor-test.c + +diff --git a/tests/Makefile b/tests/Makefile +index 91231e8..2e9093e 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -59,6 +59,7 @@ check-qtest-i386-y += tests/rtc-test$(EXESUF) + check-qtest-i386-y += tests/i440fx-test$(EXESUF) + check-qtest-i386-y += tests/fw_cfg-test$(EXESUF) + check-qtest-i386-y += tests/blockdev-test$(EXESUF) ++check-qtest-i386-y += tests/qdev-monitor-test$(EXESUF) + check-qtest-x86_64-y = $(check-qtest-i386-y) + gcov-files-i386-y += i386-softmmu/hw/mc146818rtc.c + gcov-files-x86_64-y = $(subst i386-softmmu/,x86_64-softmmu/,$(gcov-files-i386-y)) +@@ -137,6 +138,7 @@ tests/tmp105-test$(EXESUF): tests/tmp105-test.o $(libqos-omap-obj-y) + tests/i440fx-test$(EXESUF): tests/i440fx-test.o $(libqos-pc-obj-y) + tests/fw_cfg-test$(EXESUF): tests/fw_cfg-test.o $(libqos-pc-obj-y) + tests/blockdev-test$(EXESUF): tests/blockdev-test.o $(libqos-pc-obj-y) ++tests/qdev-monitor-test$(EXESUF): tests/qdev-monitor-test.o $(libqos-pc-obj-y) + + # QTest rules + +diff --git a/tests/qdev-monitor-test.c b/tests/qdev-monitor-test.c +new file mode 100644 +index 0000000..33a8ea4 +--- /dev/null ++++ b/tests/qdev-monitor-test.c +@@ -0,0 +1,81 @@ ++/* ++ * qdev-monitor.c test cases ++ * ++ * Copyright (C) 2013 Red Hat Inc. ++ * ++ * Authors: ++ * Stefan Hajnoczi ++ * ++ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. ++ * See the COPYING.LIB file in the top-level directory. ++ */ ++ ++#include ++#include ++#include "libqtest.h" ++#include "qapi/qmp/qjson.h" ++ ++static void test_device_add(void) ++{ ++ QDict *response; ++ QDict *error; ++ ++ qtest_start("-drive if=none,id=drive0"); ++ ++ /* Make device_add fail. If this leaks the virtio-blk-pci device then a ++ * reference to drive0 will also be held (via qdev properties). ++ */ ++ response = qmp("{\"execute\": \"device_add\"," ++ " \"arguments\": {" ++ " \"driver\": \"virtio-blk-pci\"," ++ " \"drive\": \"drive0\"" ++ "}}"); ++ g_assert(response); ++ error = qdict_get_qdict(response, "error"); ++ g_assert(!strcmp(qdict_get_try_str(error, "class") ?: "", ++ "GenericError")); ++ g_assert(!strcmp(qdict_get_try_str(error, "desc") ?: "", ++ "Device initialization failed.")); ++ QDECREF(response); ++ ++ /* Delete the drive */ ++ response = qmp("{\"execute\": \"human-monitor-command\"," ++ " \"arguments\": {" ++ " \"command-line\": \"drive_del drive0\"" ++ "}}"); ++ g_assert(response); ++ g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "(null)", "")); ++ QDECREF(response); ++ ++ /* Try to re-add the drive. This fails with duplicate IDs if a leaked ++ * virtio-blk-pci exists that holds a reference to the old drive0. ++ */ ++ response = qmp("{\"execute\": \"human-monitor-command\"," ++ " \"arguments\": {" ++ " \"command-line\": \"drive_add pci-addr=auto if=none,id=drive0\"" ++ "}}"); ++ g_assert(response); ++ g_assert(!strcmp(qdict_get_try_str(response, "return") ?: "", ++ "OK\r\n")); ++ QDECREF(response); ++ ++ qtest_end(); ++} ++ ++int main(int argc, char **argv) ++{ ++ const char *arch = qtest_get_arch(); ++ ++ /* Check architecture */ ++ if (strcmp(arch, "i386") && strcmp(arch, "x86_64")) { ++ g_test_message("Skipping test for non-x86\n"); ++ return 0; ++ } ++ ++ /* Run the tests */ ++ g_test_init(&argc, &argv, NULL); ++ ++ qtest_add_func("/qmp/device_add", test_device_add); ++ ++ return g_test_run(); ++} +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qdev-properties-system.c-Allow-vlan-or-netdev-for-de.patch b/SOURCES/kvm-qdev-properties-system.c-Allow-vlan-or-netdev-for-de.patch new file mode 100644 index 0000000..4950109 --- /dev/null +++ b/SOURCES/kvm-qdev-properties-system.c-Allow-vlan-or-netdev-for-de.patch @@ -0,0 +1,66 @@ +From f54c8f7db9bca89e9989cbfe1af652f5b4552c92 Mon Sep 17 00:00:00 2001 +From: Vlad Yasevich +Date: Thu, 4 Sep 2014 20:31:00 +0200 +Subject: [PATCH 5/6] qdev-properties-system.c: Allow vlan or netdev for -device, not both + +Message-id: <1409862660-30181-1-git-send-email-vyasevic@redhat.com> +Patchwork-id: 60839 +O-Subject: [RHEL7.1 qemu-kvm PATCH] qdev-properties-system.c: Allow vlan or netdev for -device, not both +Bugzilla: 996011 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Xiao Wang + +From: Vlad Yasevich + +It is currently possible to specify things like: + -device e1000,netdev=foo,vlan=1 +With this usage, whichever argument was specified last (vlan or netdev) +overwrites what was previousely set and results in a non-working +configuration. Even worse, when used with multiqueue devices, +it causes a segmentation fault on exit in qemu_free_net_client. + +That patch treates the above command line options as invalid and +generates an error at start-up. + +Signed-off-by: Vlad Yasevich +Acked-by: Jason Wang +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 30c367ed446b6ea53245589a5cf373578ac075d7) + +Signed-off-by: Vladislav Yasevich +Signed-off-by: Miroslav Rezanina +--- + hw/core/qdev-properties-system.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c +index 0eada32..729efa8 100644 +--- a/hw/core/qdev-properties-system.c ++++ b/hw/core/qdev-properties-system.c +@@ -205,6 +205,11 @@ static int parse_netdev(DeviceState *dev, const char *str, void **ptr) + goto err; + } + ++ if (ncs[i]) { ++ ret = -EINVAL; ++ goto err; ++ } ++ + ncs[i] = peers[i]; + ncs[i]->queue_index = i; + } +@@ -301,6 +306,10 @@ static void set_vlan(Object *obj, Visitor *v, void *opaque, + *ptr = NULL; + return; + } ++ if (*ptr) { ++ error_set_from_qdev_prop_error(errp, -EINVAL, dev, prop, name); ++ return; ++ } + + hubport = net_hub_port_find(id); + if (!hubport) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qdict-Add-qdict_join.patch b/SOURCES/kvm-qdict-Add-qdict_join.patch new file mode 100644 index 0000000..a81df96 --- /dev/null +++ b/SOURCES/kvm-qdict-Add-qdict_join.patch @@ -0,0 +1,89 @@ +From 08ab287975f409e420863a8d39e3b3add8ca6088 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Tue, 2 Jun 2015 09:46:36 +0200 +Subject: [PATCH 2/4] qdict: Add qdict_join() + +Message-id: <1433238397-2500-2-git-send-email-rjones@redhat.com> +Patchwork-id: 65278 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] qdict: Add qdict_join() +Bugzilla: 1226697 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Max Reitz + +This function joins two QDicts by absorbing one into the other. + +Signed-off-by: Max Reitz +Reviewed-by: Benoit Canet +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + include/qapi/qmp/qdict.h | 3 +++ + qobject/qdict.c | 32 ++++++++++++++++++++++++++++++++ + 2 files changed, 35 insertions(+) + +diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h +index d6855d1..fc6e2f2 100644 +--- a/include/qapi/qmp/qdict.h ++++ b/include/qapi/qmp/qdict.h +@@ -16,6 +16,7 @@ + #include "qapi/qmp/qobject.h" + #include "qapi/qmp/qlist.h" + #include "qemu/queue.h" ++#include + #include + + #define QDICT_BUCKET_MAX 512 +@@ -67,4 +68,6 @@ const char *qdict_get_try_str(const QDict *qdict, const char *key); + QDict *qdict_clone_shallow(const QDict *src); + void qdict_flatten(QDict *qdict); + ++void qdict_join(QDict *dest, QDict *src, bool overwrite); ++ + #endif /* QDICT_H */ +diff --git a/qobject/qdict.c b/qobject/qdict.c +index 472f106..c7e35ae 100644 +--- a/qobject/qdict.c ++++ b/qobject/qdict.c +@@ -527,3 +527,35 @@ void qdict_flatten(QDict *qdict) + { + qdict_do_flatten(qdict, qdict, NULL); + } ++ ++/** ++ * qdict_join(): Absorb the src QDict into the dest QDict, that is, move all ++ * elements from src to dest. ++ * ++ * If an element from src has a key already present in dest, it will not be ++ * moved unless overwrite is true. ++ * ++ * If overwrite is true, the conflicting values in dest will be discarded and ++ * replaced by the corresponding values from src. ++ * ++ * Therefore, with overwrite being true, the src QDict will always be empty when ++ * this function returns. If overwrite is false, the src QDict will be empty ++ * iff there were no conflicts. ++ */ ++void qdict_join(QDict *dest, QDict *src, bool overwrite) ++{ ++ const QDictEntry *entry, *next; ++ ++ entry = qdict_first(src); ++ while (entry) { ++ next = qdict_next(src, entry); ++ ++ if (overwrite || !qdict_haskey(dest, entry->key)) { ++ qobject_incref(entry->value); ++ qdict_put_obj(dest, entry->key, entry->value); ++ qdict_del(src, entry->key); ++ } ++ ++ entry = next; ++ } ++} +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-Adjust-qemu-wakeup.patch b/SOURCES/kvm-qemu-Adjust-qemu-wakeup.patch new file mode 100644 index 0000000..841717c --- /dev/null +++ b/SOURCES/kvm-qemu-Adjust-qemu-wakeup.patch @@ -0,0 +1,141 @@ +From 2462c7df4513e298596559627c61108e13809470 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 5 Sep 2014 12:30:38 +0200 +Subject: [PATCH 04/12] qemu: Adjust qemu wakeup + +Message-id: <1409920238-9070-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 60872 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 4/4] qemu: Adjust qemu wakeup +Bugzilla: 1064156 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +From: "Liu, Jinsong" + +Currently Xen hvm s3 has a bug coming from the difference between +qemu-traditioanl and qemu-xen. For qemu-traditional, the way to +resume from hvm s3 is via 'xl trigger' command. However, for +qemu-xen, the way to resume from hvm s3 inherited from standard +qemu, i.e. via QMP, and it doesn't work under Xen. + +The root cause is, for qemu-xen, 'xl trigger' command didn't reset +devices, while QMP didn't unpause hvm domain though they did qemu +system reset. + +We have two qemu patches and one xl patch to fix Xen hvm s3 bug. +This patch is the qemu patch 1. It adjusts qemu wakeup so that +Xen s3 resume logic (which will be implemented at qemu patch 2) +will be notified after qemu system reset. + +Signed-off-by: Liu Jinsong +Signed-off-by: Stefano Stabellini +Reviewed-by: Paolo Bonzini +Reviewed-by: Anthony PERARD +(cherry picked from commit 4bc78a877252d772b983810a7d2c0be00e9be70e) +--- + hw/acpi/core.c | 3 ++- + include/sysemu/sysemu.h | 4 +++- + vl.c | 15 +++++++-------- + 3 files changed, 12 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/acpi/core.c | 3 ++- + include/sysemu/sysemu.h | 4 +++- + vl.c | 15 +++++++-------- + 3 files changed, 12 insertions(+), 10 deletions(-) + +diff --git a/hw/acpi/core.c b/hw/acpi/core.c +index 3352d17..88efba7 100644 +--- a/hw/acpi/core.c ++++ b/hw/acpi/core.c +@@ -364,12 +364,13 @@ static void acpi_notify_wakeup(Notifier *notifier, void *data) + (ACPI_BITMASK_WAKE_STATUS | ACPI_BITMASK_TIMER_STATUS); + break; + case QEMU_WAKEUP_REASON_OTHER: +- default: + /* ACPI_BITMASK_WAKE_STATUS should be set on resume. + Pretend that resume was caused by power button */ + ar->pm1.evt.sts |= + (ACPI_BITMASK_WAKE_STATUS | ACPI_BITMASK_POWER_BUTTON_STATUS); + break; ++ default: ++ break; + } + } + +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index 07181ac..3e457b8 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -42,9 +42,11 @@ int vm_stop(RunState state); + int vm_stop_force_state(RunState state); + + typedef enum WakeupReason { +- QEMU_WAKEUP_REASON_OTHER = 0, ++ /* Always keep QEMU_WAKEUP_REASON_NONE = 0 */ ++ QEMU_WAKEUP_REASON_NONE = 0, + QEMU_WAKEUP_REASON_RTC, + QEMU_WAKEUP_REASON_PMTIMER, ++ QEMU_WAKEUP_REASON_OTHER, + } WakeupReason; + + void qemu_system_reset_request(void); +diff --git a/vl.c b/vl.c +index fcc8fd1..7c1b9d2 100644 +--- a/vl.c ++++ b/vl.c +@@ -1690,14 +1690,14 @@ static pid_t shutdown_pid; + static int powerdown_requested; + static int debug_requested; + static int suspend_requested; +-static int wakeup_requested; ++static WakeupReason wakeup_reason; + static NotifierList powerdown_notifiers = + NOTIFIER_LIST_INITIALIZER(powerdown_notifiers); + static NotifierList suspend_notifiers = + NOTIFIER_LIST_INITIALIZER(suspend_notifiers); + static NotifierList wakeup_notifiers = + NOTIFIER_LIST_INITIALIZER(wakeup_notifiers); +-static uint32_t wakeup_reason_mask = ~0; ++static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE); + static RunState vmstop_requested = RUN_STATE_MAX; + + int qemu_shutdown_requested_get(void) +@@ -1747,11 +1747,9 @@ static int qemu_suspend_requested(void) + return r; + } + +-static int qemu_wakeup_requested(void) ++static WakeupReason qemu_wakeup_requested(void) + { +- int r = wakeup_requested; +- wakeup_requested = 0; +- return r; ++ return wakeup_reason; + } + + static int qemu_powerdown_requested(void) +@@ -1868,8 +1866,7 @@ void qemu_system_wakeup_request(WakeupReason reason) + return; + } + runstate_set(RUN_STATE_RUNNING); +- notifier_list_notify(&wakeup_notifiers, &reason); +- wakeup_requested = 1; ++ wakeup_reason = reason; + qemu_notify_event(); + } + +@@ -1961,6 +1958,8 @@ static bool main_loop_should_exit(void) + pause_all_vcpus(); + cpu_synchronize_all_states(); + qemu_system_reset(VMRESET_SILENT); ++ notifier_list_notify(&wakeup_notifiers, &wakeup_reason); ++ wakeup_reason = QEMU_WAKEUP_REASON_NONE; + resume_all_vcpus(); + monitor_protocol_event(QEVENT_WAKEUP, NULL); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-add-Czech-characters-to-VNC-keysyms.patch b/SOURCES/kvm-qemu-char-add-Czech-characters-to-VNC-keysyms.patch new file mode 100644 index 0000000..f98fe96 --- /dev/null +++ b/SOURCES/kvm-qemu-char-add-Czech-characters-to-VNC-keysyms.patch @@ -0,0 +1,48 @@ +From 985c196ddbb4c0182df81a5f989c197544f9ff9e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 26 Sep 2017 10:57:32 +0200 +Subject: [PATCH 1/4] qemu-char: add Czech characters to VNC keysyms + +RH-Author: Gerd Hoffmann +Message-id: <20170926105734.746-2-kraxel@redhat.com> +Patchwork-id: 76566 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/3] qemu-char: add Czech characters to VNC keysyms +Bugzilla: 1476641 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Markus Armbruster +RH-Acked-by: John Snow + +From: Jan Krupa + +This patch adds missing Czech characters to the VNC keysym table. + +Signed-off-by: Jan Krupa +Signed-off-by: Michael Tokarev +(cherry picked from commit 018715f96cc1315df355743a1f807e1b95d2a10f) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc_keysym.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/ui/vnc_keysym.h b/ui/vnc_keysym.h +index 6250bec..72c01d1 100644 +--- a/ui/vnc_keysym.h ++++ b/ui/vnc_keysym.h +@@ -224,6 +224,14 @@ static const name2keysym_t name2keysym[]={ + { "odoubleacute", 0x1f5}, + { "udoubleacute", 0x1fb}, + ++/* Czech national characters */ ++{ "ecaron", 0x1ec}, ++{ "scaron", 0x1b9}, ++{ "ccaron", 0x1e8}, ++{ "rcaron", 0x1f8}, ++{ "zcaron", 0x1be}, ++{ "uring", 0x1f9}, ++ + /* modifiers */ + {"ISO_Level3_Shift", 0xfe03}, /* XK_ISO_Level3_Shift */ + {"Control_L", 0xffe3}, /* XK_Control_L */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-char-add-chardev-mux-support.patch b/SOURCES/kvm-qemu-char-add-chardev-mux-support.patch new file mode 100644 index 0000000..94c299c --- /dev/null +++ b/SOURCES/kvm-qemu-char-add-chardev-mux-support.patch @@ -0,0 +1,79 @@ +From e7980021a52658198f04024cb762f09aac607e97 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:20 +0200 +Subject: [PATCH 13/18] qemu-char: add -chardev mux support + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-13-git-send-email-kraxel@redhat.com> +Patchwork-id: 54857 +O-Subject: [RHEL-7 qemu-kvm PATCH 12/15] qemu-char: add -chardev mux support +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Allow to explicitly create mux chardevs on the command line, +like you can using QMP. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit bb6fb7c0857aeda7982ac14460328edf3c29cfc8) + +Conflicts: + qemu-char.c +--- + qemu-char.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 18 ++++++++++++++++++ + 1 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 145fd30..fc1b21a 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3142,6 +3142,19 @@ static void qemu_chr_parse_ringbuf(QemuOpts *opts, ChardevBackend *backend, + } + } + ++static void qemu_chr_parse_mux(QemuOpts *opts, ChardevBackend *backend, ++ Error **errp) ++{ ++ const char *chardev = qemu_opt_get(opts, "chardev"); ++ ++ if (chardev == NULL) { ++ error_setg(errp, "chardev: mux: no chardev given"); ++ return; ++ } ++ backend->mux = g_new0(ChardevMux, 1); ++ backend->mux->chardev = g_strdup(chardev); ++} ++ + typedef struct CharDriver { + const char *name; + /* old, pre qapi */ +@@ -3509,6 +3522,9 @@ QemuOptsList qemu_chardev_opts = { + },{ + .name = "size", + .type = QEMU_OPT_SIZE, ++ },{ ++ .name = "chardev", ++ .type = QEMU_OPT_STRING, + }, + { /* end of list */ } + }, +@@ -3800,6 +3816,8 @@ static void register_types(void) + register_char_driver_qapi("console", CHARDEV_BACKEND_KIND_CONSOLE, NULL); + register_char_driver_qapi("pipe", CHARDEV_BACKEND_KIND_PIPE, + qemu_chr_parse_pipe); ++ register_char_driver_qapi("mux", CHARDEV_BACKEND_KIND_MUX, ++ qemu_chr_parse_mux); + /* Bug-compatibility: */ + register_char_driver_qapi("memory", CHARDEV_BACKEND_KIND_MEMORY, + qemu_chr_parse_ringbuf); +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-add-cyrillic-characters-numerosign-to-VNC-.patch b/SOURCES/kvm-qemu-char-add-cyrillic-characters-numerosign-to-VNC-.patch new file mode 100644 index 0000000..2ce3ee2 --- /dev/null +++ b/SOURCES/kvm-qemu-char-add-cyrillic-characters-numerosign-to-VNC-.patch @@ -0,0 +1,46 @@ +From b9b3ebeba33cd6ba59145368550cf6ff771ac6d4 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 26 Sep 2017 10:57:34 +0200 +Subject: [PATCH 3/4] qemu-char: add cyrillic characters 'numerosign' to VNC + keysyms + +RH-Author: Gerd Hoffmann +Message-id: <20170926105734.746-4-kraxel@redhat.com> +Patchwork-id: 76564 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 3/3] qemu-char: add cyrillic characters 'numerosign' to VNC keysyms +Bugzilla: 1476641 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Markus Armbruster +RH-Acked-by: John Snow + +From: Wang Xin + +This patch adds missing cyrillic character 'numerosign' to the VNC +keysym table, it's needed by Russian keyboard. And I get the keysym from +'', the current keysym table in Qemu was generated from +it. + +Signed-off-by: Wang xin +Signed-off-by: Gonglei +Signed-off-by: Michael Tokarev +(cherry picked from commit 09f4fbe47314c2f13f16bf081997611f7f4251ea) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc_keysym.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/ui/vnc_keysym.h b/ui/vnc_keysym.h +index 1dc039f..7fa2bc1 100644 +--- a/ui/vnc_keysym.h ++++ b/ui/vnc_keysym.h +@@ -404,6 +404,7 @@ static const name2keysym_t name2keysym[]={ + {"breve", 0x01a2}, /* U+02D8 BREVE */ + {"caron", 0x01b7}, /* U+02C7 CARON */ + {"Ccaron", 0x01c8}, /* U+010C LATIN CAPITAL LETTER C WITH CARON */ ++{"numerosign", 0x06b0}, /* U+2116 NUMERO SIGN */ + {"Cyrillic_a", 0x06c1}, /* U+0430 CYRILLIC SMALL LETTER A */ + {"Cyrillic_A", 0x06e1}, /* U+0410 CYRILLIC CAPITAL LETTER A */ + {"Cyrillic_be", 0x06c2}, /* U+0431 CYRILLIC SMALL LETTER BE */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-char-add-missing-characters-used-in-keymaps.patch b/SOURCES/kvm-qemu-char-add-missing-characters-used-in-keymaps.patch new file mode 100644 index 0000000..076404b --- /dev/null +++ b/SOURCES/kvm-qemu-char-add-missing-characters-used-in-keymaps.patch @@ -0,0 +1,421 @@ +From a3ef9d3065990a2d485787367d79c656f21a9649 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 26 Sep 2017 10:57:33 +0200 +Subject: [PATCH 2/4] qemu-char: add missing characters used in keymaps + +RH-Author: Gerd Hoffmann +Message-id: <20170926105734.746-3-kraxel@redhat.com> +Patchwork-id: 76565 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/3] qemu-char: add missing characters used in keymaps +Bugzilla: 1476641 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Markus Armbruster +RH-Acked-by: John Snow + +From: Jan Krupa + +This patch adds all missing characters used in regional keymap +files which already exist in QEMU. I checked for the missing +characters by going through all of the keymaps and matching that +with records in vnc_keysym.h. If the key wasn't found I looked +it up in libxkbcommon library [1]. If I understood it correctly +this is also the same place where most of the keymaps were +exported from according to the comment on the first line in those +files. I was able to find all symbols except "quotebl" used +in Netherland keymap. + +I tested this update with Czech keyboard by myself. I also asked +Matej Serc to test Slovenian keyboard layout - he reported problems +with it few days ago on this mailing list. Both layouts seems +to work fine. I wasn't able to test the remaining layouts but +since this change doesn't modify any existing symbols, just adds +new ones, I don't expect any sideeffects. + +[1] http://cgit.freedesktop.org/xorg/lib/libxkbcommon + +Signed-off-by: Jan Krupa +Signed-off-by: Michael Tokarev +(cherry picked from commit 4c6968c7a03d5e4805dad09aba0491e12b16a596) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc_keysym.h | 365 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 365 insertions(+) + +diff --git a/ui/vnc_keysym.h b/ui/vnc_keysym.h +index 72c01d1..1dc039f 100644 +--- a/ui/vnc_keysym.h ++++ b/ui/vnc_keysym.h +@@ -350,5 +350,370 @@ static const name2keysym_t name2keysym[]={ + {"Katakana_Real", 0xff25}, + {"Eisu_toggle", 0xff30}, + ++{"abovedot", 0x01ff}, /* U+02D9 DOT ABOVE */ ++{"amacron", 0x03e0}, /* U+0101 LATIN SMALL LETTER A WITH MACRON */ ++{"Amacron", 0x03c0}, /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */ ++{"Arabic_ain", 0x05d9}, /* U+0639 ARABIC LETTER AIN */ ++{"Arabic_alef", 0x05c7}, /* U+0627 ARABIC LETTER ALEF */ ++{"Arabic_alefmaksura", 0x05e9}, /* U+0649 ARABIC LETTER ALEF MAKSURA */ ++{"Arabic_beh", 0x05c8}, /* U+0628 ARABIC LETTER BEH */ ++{"Arabic_comma", 0x05ac}, /* U+060C ARABIC COMMA */ ++{"Arabic_dad", 0x05d6}, /* U+0636 ARABIC LETTER DAD */ ++{"Arabic_dal", 0x05cf}, /* U+062F ARABIC LETTER DAL */ ++{"Arabic_damma", 0x05ef}, /* U+064F ARABIC DAMMA */ ++{"Arabic_dammatan", 0x05ec}, /* U+064C ARABIC DAMMATAN */ ++{"Arabic_fatha", 0x05ee}, /* U+064E ARABIC FATHA */ ++{"Arabic_fathatan", 0x05eb}, /* U+064B ARABIC FATHATAN */ ++{"Arabic_feh", 0x05e1}, /* U+0641 ARABIC LETTER FEH */ ++{"Arabic_ghain", 0x05da}, /* U+063A ARABIC LETTER GHAIN */ ++{"Arabic_ha", 0x05e7}, /* U+0647 ARABIC LETTER HEH */ ++{"Arabic_hah", 0x05cd}, /* U+062D ARABIC LETTER HAH */ ++{"Arabic_hamza", 0x05c1}, /* U+0621 ARABIC LETTER HAMZA */ ++{"Arabic_hamzaonalef", 0x05c3}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++{"Arabic_hamzaonwaw", 0x05c4}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */ ++{"Arabic_hamzaonyeh", 0x05c6}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */ ++{"Arabic_hamzaunderalef", 0x05c5}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */ ++{"Arabic_jeem", 0x05cc}, /* U+062C ARABIC LETTER JEEM */ ++{"Arabic_kaf", 0x05e3}, /* U+0643 ARABIC LETTER KAF */ ++{"Arabic_kasra", 0x05f0}, /* U+0650 ARABIC KASRA */ ++{"Arabic_kasratan", 0x05ed}, /* U+064D ARABIC KASRATAN */ ++{"Arabic_khah", 0x05ce}, /* U+062E ARABIC LETTER KHAH */ ++{"Arabic_lam", 0x05e4}, /* U+0644 ARABIC LETTER LAM */ ++{"Arabic_maddaonalef", 0x05c2}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */ ++{"Arabic_meem", 0x05e5}, /* U+0645 ARABIC LETTER MEEM */ ++{"Arabic_noon", 0x05e6}, /* U+0646 ARABIC LETTER NOON */ ++{"Arabic_qaf", 0x05e2}, /* U+0642 ARABIC LETTER QAF */ ++{"Arabic_question_mark", 0x05bf}, /* U+061F ARABIC QUESTION MARK */ ++{"Arabic_ra", 0x05d1}, /* U+0631 ARABIC LETTER REH */ ++{"Arabic_sad", 0x05d5}, /* U+0635 ARABIC LETTER SAD */ ++{"Arabic_seen", 0x05d3}, /* U+0633 ARABIC LETTER SEEN */ ++{"Arabic_semicolon", 0x05bb}, /* U+061B ARABIC SEMICOLON */ ++{"Arabic_shadda", 0x05f1}, /* U+0651 ARABIC SHADDA */ ++{"Arabic_sheen", 0x05d4}, /* U+0634 ARABIC LETTER SHEEN */ ++{"Arabic_sukun", 0x05f2}, /* U+0652 ARABIC SUKUN */ ++{"Arabic_tah", 0x05d7}, /* U+0637 ARABIC LETTER TAH */ ++{"Arabic_tatweel", 0x05e0}, /* U+0640 ARABIC TATWEEL */ ++{"Arabic_teh", 0x05ca}, /* U+062A ARABIC LETTER TEH */ ++{"Arabic_tehmarbuta", 0x05c9}, /* U+0629 ARABIC LETTER TEH MARBUTA */ ++{"Arabic_thal", 0x05d0}, /* U+0630 ARABIC LETTER THAL */ ++{"Arabic_theh", 0x05cb}, /* U+062B ARABIC LETTER THEH */ ++{"Arabic_waw", 0x05e8}, /* U+0648 ARABIC LETTER WAW */ ++{"Arabic_yeh", 0x05ea}, /* U+064A ARABIC LETTER YEH */ ++{"Arabic_zah", 0x05d8}, /* U+0638 ARABIC LETTER ZAH */ ++{"Arabic_zain", 0x05d2}, /* U+0632 ARABIC LETTER ZAIN */ ++{"breve", 0x01a2}, /* U+02D8 BREVE */ ++{"caron", 0x01b7}, /* U+02C7 CARON */ ++{"Ccaron", 0x01c8}, /* U+010C LATIN CAPITAL LETTER C WITH CARON */ ++{"Cyrillic_a", 0x06c1}, /* U+0430 CYRILLIC SMALL LETTER A */ ++{"Cyrillic_A", 0x06e1}, /* U+0410 CYRILLIC CAPITAL LETTER A */ ++{"Cyrillic_be", 0x06c2}, /* U+0431 CYRILLIC SMALL LETTER BE */ ++{"Cyrillic_BE", 0x06e2}, /* U+0411 CYRILLIC CAPITAL LETTER BE */ ++{"Cyrillic_che", 0x06de}, /* U+0447 CYRILLIC SMALL LETTER CHE */ ++{"Cyrillic_CHE", 0x06fe}, /* U+0427 CYRILLIC CAPITAL LETTER CHE */ ++{"Cyrillic_de", 0x06c4}, /* U+0434 CYRILLIC SMALL LETTER DE */ ++{"Cyrillic_DE", 0x06e4}, /* U+0414 CYRILLIC CAPITAL LETTER DE */ ++{"Cyrillic_dzhe", 0x06af}, /* U+045F CYRILLIC SMALL LETTER DZHE */ ++{"Cyrillic_DZHE", 0x06bf}, /* U+040F CYRILLIC CAPITAL LETTER DZHE */ ++{"Cyrillic_e", 0x06dc}, /* U+044D CYRILLIC SMALL LETTER E */ ++{"Cyrillic_E", 0x06fc}, /* U+042D CYRILLIC CAPITAL LETTER E */ ++{"Cyrillic_ef", 0x06c6}, /* U+0444 CYRILLIC SMALL LETTER EF */ ++{"Cyrillic_EF", 0x06e6}, /* U+0424 CYRILLIC CAPITAL LETTER EF */ ++{"Cyrillic_el", 0x06cc}, /* U+043B CYRILLIC SMALL LETTER EL */ ++{"Cyrillic_EL", 0x06ec}, /* U+041B CYRILLIC CAPITAL LETTER EL */ ++{"Cyrillic_em", 0x06cd}, /* U+043C CYRILLIC SMALL LETTER EM */ ++{"Cyrillic_EM", 0x06ed}, /* U+041C CYRILLIC CAPITAL LETTER EM */ ++{"Cyrillic_en", 0x06ce}, /* U+043D CYRILLIC SMALL LETTER EN */ ++{"Cyrillic_EN", 0x06ee}, /* U+041D CYRILLIC CAPITAL LETTER EN */ ++{"Cyrillic_er", 0x06d2}, /* U+0440 CYRILLIC SMALL LETTER ER */ ++{"Cyrillic_ER", 0x06f2}, /* U+0420 CYRILLIC CAPITAL LETTER ER */ ++{"Cyrillic_es", 0x06d3}, /* U+0441 CYRILLIC SMALL LETTER ES */ ++{"Cyrillic_ES", 0x06f3}, /* U+0421 CYRILLIC CAPITAL LETTER ES */ ++{"Cyrillic_ghe", 0x06c7}, /* U+0433 CYRILLIC SMALL LETTER GHE */ ++{"Cyrillic_GHE", 0x06e7}, /* U+0413 CYRILLIC CAPITAL LETTER GHE */ ++{"Cyrillic_ha", 0x06c8}, /* U+0445 CYRILLIC SMALL LETTER HA */ ++{"Cyrillic_HA", 0x06e8}, /* U+0425 CYRILLIC CAPITAL LETTER HA */ ++{"Cyrillic_hardsign", 0x06df}, /* U+044A CYRILLIC SMALL LETTER HARD SIGN */ ++{"Cyrillic_HARDSIGN", 0x06ff}, /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */ ++{"Cyrillic_i", 0x06c9}, /* U+0438 CYRILLIC SMALL LETTER I */ ++{"Cyrillic_I", 0x06e9}, /* U+0418 CYRILLIC CAPITAL LETTER I */ ++{"Cyrillic_ie", 0x06c5}, /* U+0435 CYRILLIC SMALL LETTER IE */ ++{"Cyrillic_IE", 0x06e5}, /* U+0415 CYRILLIC CAPITAL LETTER IE */ ++{"Cyrillic_io", 0x06a3}, /* U+0451 CYRILLIC SMALL LETTER IO */ ++{"Cyrillic_IO", 0x06b3}, /* U+0401 CYRILLIC CAPITAL LETTER IO */ ++{"Cyrillic_je", 0x06a8}, /* U+0458 CYRILLIC SMALL LETTER JE */ ++{"Cyrillic_JE", 0x06b8}, /* U+0408 CYRILLIC CAPITAL LETTER JE */ ++{"Cyrillic_ka", 0x06cb}, /* U+043A CYRILLIC SMALL LETTER KA */ ++{"Cyrillic_KA", 0x06eb}, /* U+041A CYRILLIC CAPITAL LETTER KA */ ++{"Cyrillic_lje", 0x06a9}, /* U+0459 CYRILLIC SMALL LETTER LJE */ ++{"Cyrillic_LJE", 0x06b9}, /* U+0409 CYRILLIC CAPITAL LETTER LJE */ ++{"Cyrillic_nje", 0x06aa}, /* U+045A CYRILLIC SMALL LETTER NJE */ ++{"Cyrillic_NJE", 0x06ba}, /* U+040A CYRILLIC CAPITAL LETTER NJE */ ++{"Cyrillic_o", 0x06cf}, /* U+043E CYRILLIC SMALL LETTER O */ ++{"Cyrillic_O", 0x06ef}, /* U+041E CYRILLIC CAPITAL LETTER O */ ++{"Cyrillic_pe", 0x06d0}, /* U+043F CYRILLIC SMALL LETTER PE */ ++{"Cyrillic_PE", 0x06f0}, /* U+041F CYRILLIC CAPITAL LETTER PE */ ++{"Cyrillic_sha", 0x06db}, /* U+0448 CYRILLIC SMALL LETTER SHA */ ++{"Cyrillic_SHA", 0x06fb}, /* U+0428 CYRILLIC CAPITAL LETTER SHA */ ++{"Cyrillic_shcha", 0x06dd}, /* U+0449 CYRILLIC SMALL LETTER SHCHA */ ++{"Cyrillic_SHCHA", 0x06fd}, /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ ++{"Cyrillic_shorti", 0x06ca}, /* U+0439 CYRILLIC SMALL LETTER SHORT I */ ++{"Cyrillic_SHORTI", 0x06ea}, /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */ ++{"Cyrillic_softsign", 0x06d8}, /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */ ++{"Cyrillic_SOFTSIGN", 0x06f8}, /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */ ++{"Cyrillic_te", 0x06d4}, /* U+0442 CYRILLIC SMALL LETTER TE */ ++{"Cyrillic_TE", 0x06f4}, /* U+0422 CYRILLIC CAPITAL LETTER TE */ ++{"Cyrillic_tse", 0x06c3}, /* U+0446 CYRILLIC SMALL LETTER TSE */ ++{"Cyrillic_TSE", 0x06e3}, /* U+0426 CYRILLIC CAPITAL LETTER TSE */ ++{"Cyrillic_u", 0x06d5}, /* U+0443 CYRILLIC SMALL LETTER U */ ++{"Cyrillic_U", 0x06f5}, /* U+0423 CYRILLIC CAPITAL LETTER U */ ++{"Cyrillic_ve", 0x06d7}, /* U+0432 CYRILLIC SMALL LETTER VE */ ++{"Cyrillic_VE", 0x06f7}, /* U+0412 CYRILLIC CAPITAL LETTER VE */ ++{"Cyrillic_ya", 0x06d1}, /* U+044F CYRILLIC SMALL LETTER YA */ ++{"Cyrillic_YA", 0x06f1}, /* U+042F CYRILLIC CAPITAL LETTER YA */ ++{"Cyrillic_yeru", 0x06d9}, /* U+044B CYRILLIC SMALL LETTER YERU */ ++{"Cyrillic_YERU", 0x06f9}, /* U+042B CYRILLIC CAPITAL LETTER YERU */ ++{"Cyrillic_yu", 0x06c0}, /* U+044E CYRILLIC SMALL LETTER YU */ ++{"Cyrillic_YU", 0x06e0}, /* U+042E CYRILLIC CAPITAL LETTER YU */ ++{"Cyrillic_ze", 0x06da}, /* U+0437 CYRILLIC SMALL LETTER ZE */ ++{"Cyrillic_ZE", 0x06fa}, /* U+0417 CYRILLIC CAPITAL LETTER ZE */ ++{"Cyrillic_zhe", 0x06d6}, /* U+0436 CYRILLIC SMALL LETTER ZHE */ ++{"Cyrillic_ZHE", 0x06f6}, /* U+0416 CYRILLIC CAPITAL LETTER ZHE */ ++{"doubleacute", 0x01bd}, /* U+02DD DOUBLE ACUTE ACCENT */ ++{"doublelowquotemark", 0x0afe}, /* U+201E DOUBLE LOW-9 QUOTATION MARK */ ++{"downarrow", 0x08fe}, /* U+2193 DOWNWARDS ARROW */ ++{"dstroke", 0x01f0}, /* U+0111 LATIN SMALL LETTER D WITH STROKE */ ++{"Dstroke", 0x01d0}, /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */ ++{"eabovedot", 0x03ec}, /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */ ++{"Eabovedot", 0x03cc}, /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++{"emacron", 0x03ba}, /* U+0113 LATIN SMALL LETTER E WITH MACRON */ ++{"Emacron", 0x03aa}, /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */ ++{"endash", 0x0aaa}, /* U+2013 EN DASH */ ++{"eng", 0x03bf}, /* U+014B LATIN SMALL LETTER ENG */ ++{"ENG", 0x03bd}, /* U+014A LATIN CAPITAL LETTER ENG */ ++{"Execute", 0xff62}, /* Execute, run, do */ ++{"F16", 0xffcd}, ++{"F17", 0xffce}, ++{"F18", 0xffcf}, ++{"F19", 0xffd0}, ++{"F20", 0xffd1}, ++{"F21", 0xffd2}, ++{"F22", 0xffd3}, ++{"F23", 0xffd4}, ++{"F24", 0xffd5}, ++{"F25", 0xffd6}, ++{"F26", 0xffd7}, ++{"F27", 0xffd8}, ++{"F28", 0xffd9}, ++{"F29", 0xffda}, ++{"F30", 0xffdb}, ++{"F31", 0xffdc}, ++{"F32", 0xffdd}, ++{"F33", 0xffde}, ++{"F34", 0xffdf}, ++{"F35", 0xffe0}, ++{"fiveeighths", 0x0ac5}, /* U+215D VULGAR FRACTION FIVE EIGHTHS */ ++{"gbreve", 0x02bb}, /* U+011F LATIN SMALL LETTER G WITH BREVE */ ++{"Gbreve", 0x02ab}, /* U+011E LATIN CAPITAL LETTER G WITH BREVE */ ++{"gcedilla", 0x03bb}, /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */ ++{"Gcedilla", 0x03ab}, /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */ ++{"Greek_OMEGA", 0x07d9}, /* U+03A9 GREEK CAPITAL LETTER OMEGA */ ++{"Henkan_Mode", 0xff23}, /* Start/Stop Conversion */ ++{"horizconnector", 0x08a3}, /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/ ++{"hstroke", 0x02b1}, /* U+0127 LATIN SMALL LETTER H WITH STROKE */ ++{"Hstroke", 0x02a1}, /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */ ++{"Iabovedot", 0x02a9}, /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++{"idotless", 0x02b9}, /* U+0131 LATIN SMALL LETTER DOTLESS I */ ++{"imacron", 0x03ef}, /* U+012B LATIN SMALL LETTER I WITH MACRON */ ++{"Imacron", 0x03cf}, /* U+012A LATIN CAPITAL LETTER I WITH MACRON */ ++{"iogonek", 0x03e7}, /* U+012F LATIN SMALL LETTER I WITH OGONEK */ ++{"Iogonek", 0x03c7}, /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */ ++{"ISO_First_Group", 0xfe0c}, ++{"ISO_Last_Group", 0xfe0e}, ++{"ISO_Next_Group", 0xfe08}, ++{"kana_a", 0x04a7}, /* U+30A1 KATAKANA LETTER SMALL A */ ++{"kana_A", 0x04b1}, /* U+30A2 KATAKANA LETTER A */ ++{"kana_CHI", 0x04c1}, /* U+30C1 KATAKANA LETTER TI */ ++{"kana_closingbracket", 0x04a3}, /* U+300D RIGHT CORNER BRACKET */ ++{"kana_comma", 0x04a4}, /* U+3001 IDEOGRAPHIC COMMA */ ++{"kana_conjunctive", 0x04a5}, /* U+30FB KATAKANA MIDDLE DOT */ ++{"kana_e", 0x04aa}, /* U+30A7 KATAKANA LETTER SMALL E */ ++{"kana_E", 0x04b4}, /* U+30A8 KATAKANA LETTER E */ ++{"kana_FU", 0x04cc}, /* U+30D5 KATAKANA LETTER HU */ ++{"kana_fullstop", 0x04a1}, /* U+3002 IDEOGRAPHIC FULL STOP */ ++{"kana_HA", 0x04ca}, /* U+30CF KATAKANA LETTER HA */ ++{"kana_HE", 0x04cd}, /* U+30D8 KATAKANA LETTER HE */ ++{"kana_HI", 0x04cb}, /* U+30D2 KATAKANA LETTER HI */ ++{"kana_HO", 0x04ce}, /* U+30DB KATAKANA LETTER HO */ ++{"kana_i", 0x04a8}, /* U+30A3 KATAKANA LETTER SMALL I */ ++{"kana_I", 0x04b2}, /* U+30A4 KATAKANA LETTER I */ ++{"kana_KA", 0x04b6}, /* U+30AB KATAKANA LETTER KA */ ++{"kana_KE", 0x04b9}, /* U+30B1 KATAKANA LETTER KE */ ++{"kana_KI", 0x04b7}, /* U+30AD KATAKANA LETTER KI */ ++{"kana_KO", 0x04ba}, /* U+30B3 KATAKANA LETTER KO */ ++{"kana_KU", 0x04b8}, /* U+30AF KATAKANA LETTER KU */ ++{"kana_MA", 0x04cf}, /* U+30DE KATAKANA LETTER MA */ ++{"kana_ME", 0x04d2}, /* U+30E1 KATAKANA LETTER ME */ ++{"kana_MI", 0x04d0}, /* U+30DF KATAKANA LETTER MI */ ++{"kana_MO", 0x04d3}, /* U+30E2 KATAKANA LETTER MO */ ++{"kana_MU", 0x04d1}, /* U+30E0 KATAKANA LETTER MU */ ++{"kana_N", 0x04dd}, /* U+30F3 KATAKANA LETTER N */ ++{"kana_NA", 0x04c5}, /* U+30CA KATAKANA LETTER NA */ ++{"kana_NE", 0x04c8}, /* U+30CD KATAKANA LETTER NE */ ++{"kana_NI", 0x04c6}, /* U+30CB KATAKANA LETTER NI */ ++{"kana_NO", 0x04c9}, /* U+30CE KATAKANA LETTER NO */ ++{"kana_NU", 0x04c7}, /* U+30CC KATAKANA LETTER NU */ ++{"kana_o", 0x04ab}, /* U+30A9 KATAKANA LETTER SMALL O */ ++{"kana_O", 0x04b5}, /* U+30AA KATAKANA LETTER O */ ++{"kana_openingbracket", 0x04a2}, /* U+300C LEFT CORNER BRACKET */ ++{"kana_RA", 0x04d7}, /* U+30E9 KATAKANA LETTER RA */ ++{"kana_RE", 0x04da}, /* U+30EC KATAKANA LETTER RE */ ++{"kana_RI", 0x04d8}, /* U+30EA KATAKANA LETTER RI */ ++{"kana_RU", 0x04d9}, /* U+30EB KATAKANA LETTER RU */ ++{"kana_SA", 0x04bb}, /* U+30B5 KATAKANA LETTER SA */ ++{"kana_SE", 0x04be}, /* U+30BB KATAKANA LETTER SE */ ++{"kana_SHI", 0x04bc}, /* U+30B7 KATAKANA LETTER SI */ ++{"kana_SO", 0x04bf}, /* U+30BD KATAKANA LETTER SO */ ++{"kana_SU", 0x04bd}, /* U+30B9 KATAKANA LETTER SU */ ++{"kana_TA", 0x04c0}, /* U+30BF KATAKANA LETTER TA */ ++{"kana_TE", 0x04c3}, /* U+30C6 KATAKANA LETTER TE */ ++{"kana_TO", 0x04c4}, /* U+30C8 KATAKANA LETTER TO */ ++{"kana_tsu", 0x04af}, /* U+30C3 KATAKANA LETTER SMALL TU */ ++{"kana_TSU", 0x04c2}, /* U+30C4 KATAKANA LETTER TU */ ++{"kana_u", 0x04a9}, /* U+30A5 KATAKANA LETTER SMALL U */ ++{"kana_U", 0x04b3}, /* U+30A6 KATAKANA LETTER U */ ++{"kana_WA", 0x04dc}, /* U+30EF KATAKANA LETTER WA */ ++{"kana_WO", 0x04a6}, /* U+30F2 KATAKANA LETTER WO */ ++{"kana_ya", 0x04ac}, /* U+30E3 KATAKANA LETTER SMALL YA */ ++{"kana_YA", 0x04d4}, /* U+30E4 KATAKANA LETTER YA */ ++{"kana_yo", 0x04ae}, /* U+30E7 KATAKANA LETTER SMALL YO */ ++{"kana_YO", 0x04d6}, /* U+30E8 KATAKANA LETTER YO */ ++{"kana_yu", 0x04ad}, /* U+30E5 KATAKANA LETTER SMALL YU */ ++{"kana_YU", 0x04d5}, /* U+30E6 KATAKANA LETTER YU */ ++{"Kanji", 0xff21}, /* Kanji, Kanji convert */ ++{"kcedilla", 0x03f3}, /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */ ++{"Kcedilla", 0x03d3}, /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */ ++{"kra", 0x03a2}, /* U+0138 LATIN SMALL LETTER KRA */ ++{"lcedilla", 0x03b6}, /* U+013C LATIN SMALL LETTER L WITH CEDILLA */ ++{"Lcedilla", 0x03a6}, /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */ ++{"leftarrow", 0x08fb}, /* U+2190 LEFTWARDS ARROW */ ++{"leftdoublequotemark", 0x0ad2}, /* U+201C LEFT DOUBLE QUOTATION MARK */ ++{"Macedonia_dse", 0x06a5}, /* U+0455 CYRILLIC SMALL LETTER DZE */ ++{"Macedonia_DSE", 0x06b5}, /* U+0405 CYRILLIC CAPITAL LETTER DZE */ ++{"Macedonia_gje", 0x06a2}, /* U+0453 CYRILLIC SMALL LETTER GJE */ ++{"Macedonia_GJE", 0x06b2}, /* U+0403 CYRILLIC CAPITAL LETTER GJE */ ++{"Macedonia_kje", 0x06ac}, /* U+045C CYRILLIC SMALL LETTER KJE */ ++{"Macedonia_KJE", 0x06bc}, /* U+040C CYRILLIC CAPITAL LETTER KJE */ ++{"ncedilla", 0x03f1}, /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */ ++{"Ncedilla", 0x03d1}, /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */ ++{"oe", 0x13bd}, /* U+0153 LATIN SMALL LIGATURE OE */ ++{"OE", 0x13bc}, /* U+0152 LATIN CAPITAL LIGATURE OE */ ++{"ogonek", 0x01b2}, /* U+02DB OGONEK */ ++{"omacron", 0x03f2}, /* U+014D LATIN SMALL LETTER O WITH MACRON */ ++{"Omacron", 0x03d2}, /* U+014C LATIN CAPITAL LETTER O WITH MACRON */ ++{"oneeighth", 0x0ac3}, /* U+215B VULGAR FRACTION ONE EIGHTH */ ++{"rcedilla", 0x03b3}, /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */ ++{"Rcedilla", 0x03a3}, /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */ ++{"rightarrow", 0x08fd}, /* U+2192 RIGHTWARDS ARROW */ ++{"rightdoublequotemark", 0x0ad3}, /* U+201D RIGHT DOUBLE QUOTATION MARK */ ++{"Scaron", 0x01a9}, /* U+0160 LATIN CAPITAL LETTER S WITH CARON */ ++{"scedilla", 0x01ba}, /* U+015F LATIN SMALL LETTER S WITH CEDILLA */ ++{"Scedilla", 0x01aa}, /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */ ++{"semivoicedsound", 0x04df}, /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++{"seveneighths", 0x0ac6}, /* U+215E VULGAR FRACTION SEVEN EIGHTHS */ ++{"Thai_baht", 0x0ddf}, /* U+0E3F THAI CURRENCY SYMBOL BAHT */ ++{"Thai_bobaimai", 0x0dba}, /* U+0E1A THAI CHARACTER BO BAIMAI */ ++{"Thai_chochan", 0x0da8}, /* U+0E08 THAI CHARACTER CHO CHAN */ ++{"Thai_chochang", 0x0daa}, /* U+0E0A THAI CHARACTER CHO CHANG */ ++{"Thai_choching", 0x0da9}, /* U+0E09 THAI CHARACTER CHO CHING */ ++{"Thai_chochoe", 0x0dac}, /* U+0E0C THAI CHARACTER CHO CHOE */ ++{"Thai_dochada", 0x0dae}, /* U+0E0E THAI CHARACTER DO CHADA */ ++{"Thai_dodek", 0x0db4}, /* U+0E14 THAI CHARACTER DO DEK */ ++{"Thai_fofa", 0x0dbd}, /* U+0E1D THAI CHARACTER FO FA */ ++{"Thai_fofan", 0x0dbf}, /* U+0E1F THAI CHARACTER FO FAN */ ++{"Thai_hohip", 0x0dcb}, /* U+0E2B THAI CHARACTER HO HIP */ ++{"Thai_honokhuk", 0x0dce}, /* U+0E2E THAI CHARACTER HO NOKHUK */ ++{"Thai_khokhai", 0x0da2}, /* U+0E02 THAI CHARACTER KHO KHAI */ ++{"Thai_khokhon", 0x0da5}, /* U+0E05 THAI CHARACTER KHO KHON */ ++{"Thai_khokhuat", 0x0da3}, /* U+0E03 THAI CHARACTER KHO KHUAT */ ++{"Thai_khokhwai", 0x0da4}, /* U+0E04 THAI CHARACTER KHO KHWAI */ ++{"Thai_khorakhang", 0x0da6}, /* U+0E06 THAI CHARACTER KHO RAKHANG */ ++{"Thai_kokai", 0x0da1}, /* U+0E01 THAI CHARACTER KO KAI */ ++{"Thai_lakkhangyao", 0x0de5}, /* U+0E45 THAI CHARACTER LAKKHANGYAO */ ++{"Thai_lekchet", 0x0df7}, /* U+0E57 THAI DIGIT SEVEN */ ++{"Thai_lekha", 0x0df5}, /* U+0E55 THAI DIGIT FIVE */ ++{"Thai_lekhok", 0x0df6}, /* U+0E56 THAI DIGIT SIX */ ++{"Thai_lekkao", 0x0df9}, /* U+0E59 THAI DIGIT NINE */ ++{"Thai_leknung", 0x0df1}, /* U+0E51 THAI DIGIT ONE */ ++{"Thai_lekpaet", 0x0df8}, /* U+0E58 THAI DIGIT EIGHT */ ++{"Thai_leksam", 0x0df3}, /* U+0E53 THAI DIGIT THREE */ ++{"Thai_leksi", 0x0df4}, /* U+0E54 THAI DIGIT FOUR */ ++{"Thai_leksong", 0x0df2}, /* U+0E52 THAI DIGIT TWO */ ++{"Thai_leksun", 0x0df0}, /* U+0E50 THAI DIGIT ZERO */ ++{"Thai_lochula", 0x0dcc}, /* U+0E2C THAI CHARACTER LO CHULA */ ++{"Thai_loling", 0x0dc5}, /* U+0E25 THAI CHARACTER LO LING */ ++{"Thai_lu", 0x0dc6}, /* U+0E26 THAI CHARACTER LU */ ++{"Thai_maichattawa", 0x0deb}, /* U+0E4B THAI CHARACTER MAI CHATTAWA */ ++{"Thai_maiek", 0x0de8}, /* U+0E48 THAI CHARACTER MAI EK */ ++{"Thai_maihanakat", 0x0dd1}, /* U+0E31 THAI CHARACTER MAI HAN-AKAT */ ++{"Thai_maitaikhu", 0x0de7}, /* U+0E47 THAI CHARACTER MAITAIKHU */ ++{"Thai_maitho", 0x0de9}, /* U+0E49 THAI CHARACTER MAI THO */ ++{"Thai_maitri", 0x0dea}, /* U+0E4A THAI CHARACTER MAI TRI */ ++{"Thai_maiyamok", 0x0de6}, /* U+0E46 THAI CHARACTER MAIYAMOK */ ++{"Thai_moma", 0x0dc1}, /* U+0E21 THAI CHARACTER MO MA */ ++{"Thai_ngongu", 0x0da7}, /* U+0E07 THAI CHARACTER NGO NGU */ ++{"Thai_nikhahit", 0x0ded}, /* U+0E4D THAI CHARACTER NIKHAHIT */ ++{"Thai_nonen", 0x0db3}, /* U+0E13 THAI CHARACTER NO NEN */ ++{"Thai_nonu", 0x0db9}, /* U+0E19 THAI CHARACTER NO NU */ ++{"Thai_oang", 0x0dcd}, /* U+0E2D THAI CHARACTER O ANG */ ++{"Thai_paiyannoi", 0x0dcf}, /* U+0E2F THAI CHARACTER PAIYANNOI */ ++{"Thai_phinthu", 0x0dda}, /* U+0E3A THAI CHARACTER PHINTHU */ ++{"Thai_phophan", 0x0dbe}, /* U+0E1E THAI CHARACTER PHO PHAN */ ++{"Thai_phophung", 0x0dbc}, /* U+0E1C THAI CHARACTER PHO PHUNG */ ++{"Thai_phosamphao", 0x0dc0}, /* U+0E20 THAI CHARACTER PHO SAMPHAO */ ++{"Thai_popla", 0x0dbb}, /* U+0E1B THAI CHARACTER PO PLA */ ++{"Thai_rorua", 0x0dc3}, /* U+0E23 THAI CHARACTER RO RUA */ ++{"Thai_ru", 0x0dc4}, /* U+0E24 THAI CHARACTER RU */ ++{"Thai_saraa", 0x0dd0}, /* U+0E30 THAI CHARACTER SARA A */ ++{"Thai_saraaa", 0x0dd2}, /* U+0E32 THAI CHARACTER SARA AA */ ++{"Thai_saraae", 0x0de1}, /* U+0E41 THAI CHARACTER SARA AE */ ++{"Thai_saraaimaimalai", 0x0de4}, /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */ ++{"Thai_saraaimaimuan", 0x0de3}, /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */ ++{"Thai_saraam", 0x0dd3}, /* U+0E33 THAI CHARACTER SARA AM */ ++{"Thai_sarae", 0x0de0}, /* U+0E40 THAI CHARACTER SARA E */ ++{"Thai_sarai", 0x0dd4}, /* U+0E34 THAI CHARACTER SARA I */ ++{"Thai_saraii", 0x0dd5}, /* U+0E35 THAI CHARACTER SARA II */ ++{"Thai_sarao", 0x0de2}, /* U+0E42 THAI CHARACTER SARA O */ ++{"Thai_sarau", 0x0dd8}, /* U+0E38 THAI CHARACTER SARA U */ ++{"Thai_saraue", 0x0dd6}, /* U+0E36 THAI CHARACTER SARA UE */ ++{"Thai_sarauee", 0x0dd7}, /* U+0E37 THAI CHARACTER SARA UEE */ ++{"Thai_sarauu", 0x0dd9}, /* U+0E39 THAI CHARACTER SARA UU */ ++{"Thai_sorusi", 0x0dc9}, /* U+0E29 THAI CHARACTER SO RUSI */ ++{"Thai_sosala", 0x0dc8}, /* U+0E28 THAI CHARACTER SO SALA */ ++{"Thai_soso", 0x0dab}, /* U+0E0B THAI CHARACTER SO SO */ ++{"Thai_sosua", 0x0dca}, /* U+0E2A THAI CHARACTER SO SUA */ ++{"Thai_thanthakhat", 0x0dec}, /* U+0E4C THAI CHARACTER THANTHAKHAT */ ++{"Thai_thonangmontho", 0x0db1}, /* U+0E11 THAI CHARACTER THO NANGMONTHO */ ++{"Thai_thophuthao", 0x0db2}, /* U+0E12 THAI CHARACTER THO PHUTHAO */ ++{"Thai_thothahan", 0x0db7}, /* U+0E17 THAI CHARACTER THO THAHAN */ ++{"Thai_thothan", 0x0db0}, /* U+0E10 THAI CHARACTER THO THAN */ ++{"Thai_thothong", 0x0db8}, /* U+0E18 THAI CHARACTER THO THONG */ ++{"Thai_thothung", 0x0db6}, /* U+0E16 THAI CHARACTER THO THUNG */ ++{"Thai_topatak", 0x0daf}, /* U+0E0F THAI CHARACTER TO PATAK */ ++{"Thai_totao", 0x0db5}, /* U+0E15 THAI CHARACTER TO TAO */ ++{"Thai_wowaen", 0x0dc7}, /* U+0E27 THAI CHARACTER WO WAEN */ ++{"Thai_yoyak", 0x0dc2}, /* U+0E22 THAI CHARACTER YO YAK */ ++{"Thai_yoying", 0x0dad}, /* U+0E0D THAI CHARACTER YO YING */ ++{"threeeighths", 0x0ac4}, /* U+215C VULGAR FRACTION THREE EIGHTHS */ ++{"trademark", 0x0ac9}, /* U+2122 TRADE MARK SIGN */ ++{"tslash", 0x03bc}, /* U+0167 LATIN SMALL LETTER T WITH STROKE */ ++{"Tslash", 0x03ac}, /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */ ++{"umacron", 0x03fe}, /* U+016B LATIN SMALL LETTER U WITH MACRON */ ++{"Umacron", 0x03de}, /* U+016A LATIN CAPITAL LETTER U WITH MACRON */ ++{"uogonek", 0x03f9}, /* U+0173 LATIN SMALL LETTER U WITH OGONEK */ ++{"Uogonek", 0x03d9}, /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */ ++{"uparrow", 0x08fc}, /* U+2191 UPWARDS ARROW */ ++{"voicedsound", 0x04de}, /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */ ++{"Zcaron", 0x01ae}, /* U+017D LATIN CAPITAL LETTER Z WITH CARON */ ++ + {NULL,0}, + }; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-char-check-optional-fields-using-has_.patch b/SOURCES/kvm-qemu-char-check-optional-fields-using-has_.patch new file mode 100644 index 0000000..19f6714 --- /dev/null +++ b/SOURCES/kvm-qemu-char-check-optional-fields-using-has_.patch @@ -0,0 +1,52 @@ +From 99421ce09cafb7fccd0d3db0144210ba16f40718 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:12 +0200 +Subject: [PATCH 05/18] qemu-char: check optional fields using has_* + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 54850 +O-Subject: [RHEL-7 qemu-kvm PATCH 04/15] qemu-char: check optional fields using has_* +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit e859eda58501cd20a2e6988fb4acc1756bc4d278) +--- + qemu-char.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 660d758..ddc3dca 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3521,7 +3521,7 @@ static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp) + { + HANDLE out; + +- if (file->in) { ++ if (file->has_in) { + error_setg(errp, "input file not supported"); + return NULL; + } +@@ -3572,7 +3572,7 @@ static CharDriverState *qmp_chardev_open_file(ChardevFile *file, Error **errp) + return NULL; + } + +- if (file->in) { ++ if (file->has_in) { + flags = O_RDONLY; + in = qmp_chardev_open_file_source(file->in, flags, errp); + if (error_is_set(errp)) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-don-t-leak-opts-on-error.patch b/SOURCES/kvm-qemu-char-don-t-leak-opts-on-error.patch new file mode 100644 index 0000000..8d99ad7 --- /dev/null +++ b/SOURCES/kvm-qemu-char-don-t-leak-opts-on-error.patch @@ -0,0 +1,43 @@ +From 9a03ecd49c63fdad85a073834b29748a7b12824e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:17 +0200 +Subject: [PATCH 10/18] qemu-char: don't leak opts on error + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-10-git-send-email-kraxel@redhat.com> +Patchwork-id: 54852 +O-Subject: [RHEL-7 qemu-kvm PATCH 09/15] qemu-char: don't leak opts on error +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit e668287d4413395be1a0f9ef292bb6d0c1006e29) +--- + qemu-char.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index 62fafb0..43bd5e2 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3205,7 +3205,7 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, + if (i == NULL) { + error_setg(errp, "chardev: backend \"%s\" not found", + qemu_opt_get(opts, "backend")); +- return NULL; ++ goto err; + } + + if (!cd->open) { +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-fix-documentation-for-telnet-wait-socket-f.patch b/SOURCES/kvm-qemu-char-fix-documentation-for-telnet-wait-socket-f.patch new file mode 100644 index 0000000..24a1a26 --- /dev/null +++ b/SOURCES/kvm-qemu-char-fix-documentation-for-telnet-wait-socket-f.patch @@ -0,0 +1,49 @@ +From e93fe39c1553da8bc81a08e4ab31698a24395a51 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:16 +0200 +Subject: [PATCH 09/18] qemu-char: fix documentation for telnet+wait socket flags + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-9-git-send-email-kraxel@redhat.com> +Patchwork-id: 54854 +O-Subject: [RHEL-7 qemu-kvm PATCH 08/15] qemu-char: fix documentation for telnet+wait socket flags +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit ef993ba7bc631b57f9ea70a7f6fc8c0fcbdfa19d) +--- + qapi-schema.json | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qapi-schema.json | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/qapi-schema.json b/qapi-schema.json +index ffe0ed1..780c6fe 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -3213,10 +3213,11 @@ + # @addr: socket address to listen on (server=true) + # or connect to (server=false) + # @server: #optional create server socket (default: true) +-# @wait: #optional wait for connect (not used for server +-# sockets, default: false) ++# @wait: #optional wait for incoming connection on server ++# sockets (default: false). + # @nodelay: #optional set TCP_NODELAY socket option (default: false) +-# @telnet: #optional enable telnet protocol (default: false) ++# @telnet: #optional enable telnet protocol on server ++# sockets (default: false) + # + # Since: 1.4 + ## +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-ignore-flow-control-if-a-PTY-s-slave-is-no.patch b/SOURCES/kvm-qemu-char-ignore-flow-control-if-a-PTY-s-slave-is-no.patch new file mode 100644 index 0000000..5c7e901 --- /dev/null +++ b/SOURCES/kvm-qemu-char-ignore-flow-control-if-a-PTY-s-slave-is-no.patch @@ -0,0 +1,61 @@ +From 6a40d58e03beaef265f6c1293301f5f8860ecbea Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:22 +0200 +Subject: [PATCH 09/18] qemu-char: ignore flow control if a PTY's slave is not + connected + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-10-famz@redhat.com> +Patchwork-id: 75301 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 09/18] qemu-char: ignore flow control if a PTY's slave is not connected +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +After commit f702e62 (serial: change retry logic to avoid concurrency, +2014-07-11), guest boot hangs if the backend is an unconnected PTY. + +The reason is that PTYs do not support G_IO_HUP, and serial_xmit is +never called. To fix this, simply invoke serial_xmit immediately +(via g_idle_source_new) when this happens. + +Tested-by: Pavel Hrdina +Signed-off-by: Paolo Bonzini +(cherry picked from commit 62c339c5272ce8fbe8ca52695cee8ff40da7872e) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/qemu-char.c b/qemu-char.c +index 47ac55a..08cb959 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -1068,6 +1068,9 @@ static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len) + static GSource *pty_chr_add_watch(CharDriverState *chr, GIOCondition cond) + { + PtyCharDriver *s = chr->opaque; ++ if (!s->connected) { ++ return NULL; ++ } + return g_io_create_watch(s->fd, cond); + } + +@@ -3381,6 +3384,10 @@ int qemu_chr_fe_add_watch(CharDriverState *s, GIOCondition cond, + } + + src = s->chr_add_watch(s, cond); ++ if (!src) { ++ return -EINVAL; ++ } ++ + g_source_set_callback(src, (GSourceFunc)func, user_data, NULL); + tag = g_source_attach(src, NULL); + g_source_unref(src); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-char-minor-mux-chardev-fixes.patch b/SOURCES/kvm-qemu-char-minor-mux-chardev-fixes.patch new file mode 100644 index 0000000..af204c8 --- /dev/null +++ b/SOURCES/kvm-qemu-char-minor-mux-chardev-fixes.patch @@ -0,0 +1,68 @@ +From c4a5b67ffac094aa1653de8e9369585b0bc4ee46 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:19 +0200 +Subject: [PATCH 12/18] qemu-char: minor mux chardev fixes + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-12-git-send-email-kraxel@redhat.com> +Patchwork-id: 54861 +O-Subject: [RHEL-7 qemu-kvm PATCH 11/15] qemu-char: minor mux chardev fixes +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +mux failure path has a memory leak. creating a mux chardev can't +fail though, so just assert() that instead of fixing an error path +which never ever runs anyway ... + +Also fix bid being leaked while being at it. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit dc2c4eca89ec5ee7b7a4c2563c991a14a7c5ee84) +--- + qemu-char.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index b41bda4..145fd30 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3213,7 +3213,7 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, + ChardevBackend *backend = g_new0(ChardevBackend, 1); + ChardevReturn *ret = NULL; + const char *id = qemu_opts_id(opts); +- const char *bid = NULL; ++ char *bid = NULL; + + if (qemu_opt_get_bool(opts, "mux", 0)) { + bid = g_strdup_printf("%s-base", id); +@@ -3240,9 +3240,7 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, + backend->kind = CHARDEV_BACKEND_KIND_MUX; + backend->mux->chardev = g_strdup(bid); + ret = qmp_chardev_add(id, backend, errp); +- if (error_is_set(errp)) { +- goto qapi_out; +- } ++ assert(!error_is_set(errp)); + } + + chr = qemu_chr_find(id); +@@ -3251,6 +3249,7 @@ CharDriverState *qemu_chr_new_from_opts(QemuOpts *opts, + qapi_out: + qapi_free_ChardevBackend(backend); + qapi_free_ChardevReturn(ret); ++ g_free(bid); + return chr; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-print-notification-to-stderr.patch b/SOURCES/kvm-qemu-char-print-notification-to-stderr.patch new file mode 100644 index 0000000..63d5b02 --- /dev/null +++ b/SOURCES/kvm-qemu-char-print-notification-to-stderr.patch @@ -0,0 +1,45 @@ +From 5617925ceaeae6855991e5397e015e3230548605 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:15 +0200 +Subject: [PATCH 08/18] qemu-char: print notification to stderr + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-8-git-send-email-kraxel@redhat.com> +Patchwork-id: 54851 +O-Subject: [RHEL-7 qemu-kvm PATCH 07/15] qemu-char: print notification to stderr +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit fdca2124adc293f84f2b7aaf0df43faa6b6bf420) +--- + qemu-char.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index f783a87..62fafb0 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -2686,8 +2686,8 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay, + } + + if (is_listen && is_waitconnect) { +- printf("QEMU waiting for connection on: %s\n", +- chr->filename); ++ fprintf(stderr, "QEMU waiting for connection on: %s\n", ++ chr->filename); + tcp_chr_accept(s->listen_chan, G_IO_IN, chr); + qemu_set_nonblock(s->listen_fd); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-report-udp-backend-errors.patch b/SOURCES/kvm-qemu-char-report-udp-backend-errors.patch new file mode 100644 index 0000000..5c907c9 --- /dev/null +++ b/SOURCES/kvm-qemu-char-report-udp-backend-errors.patch @@ -0,0 +1,43 @@ +From ecf98a5629d252b6fb2c9aa5baa9282828f3243b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:21 +0200 +Subject: [PATCH 14/18] qemu-char: report udp backend errors + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-14-git-send-email-kraxel@redhat.com> +Patchwork-id: 54855 +O-Subject: [RHEL-7 qemu-kvm PATCH 13/15] qemu-char: report udp backend errors +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit 58a3714c529b1b97ee078ea25b58f731aabcbfff) +--- + qemu-char.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index fc1b21a..bacc7b7 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -2280,6 +2280,8 @@ static CharDriverState *qemu_chr_open_udp(QemuOpts *opts) + + fd = inet_dgram_opts(opts, &local_err); + if (fd < 0) { ++ qerror_report_err(local_err); ++ error_free(local_err); + return NULL; + } + return qemu_chr_open_udp_fd(fd); +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-use-ChardevBackendKind-in-CharDriver.patch b/SOURCES/kvm-qemu-char-use-ChardevBackendKind-in-CharDriver.patch new file mode 100644 index 0000000..97c449b --- /dev/null +++ b/SOURCES/kvm-qemu-char-use-ChardevBackendKind-in-CharDriver.patch @@ -0,0 +1,67 @@ +From 81a8d16533d8fa17be434d87b5ba097387b12b59 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:18 +0200 +Subject: [PATCH 11/18] qemu-char: use ChardevBackendKind in CharDriver + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-11-git-send-email-kraxel@redhat.com> +Patchwork-id: 54864 +O-Subject: [RHEL-7 qemu-kvm PATCH 10/15] qemu-char: use ChardevBackendKind in CharDriver +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit 99aec0123ce5ba307dc357c5bf1e0f22d2be0931) +--- + include/sysemu/char.h | 2 +- + qemu-char.c | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/char.h | 2 +- + qemu-char.c | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/include/sysemu/char.h b/include/sysemu/char.h +index f0ed280..ad101d9 100644 +--- a/include/sysemu/char.h ++++ b/include/sysemu/char.h +@@ -283,7 +283,7 @@ CharDriverState *qemu_chr_find(const char *name); + QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename); + + void register_char_driver(const char *name, CharDriverState *(*open)(QemuOpts *)); +-void register_char_driver_qapi(const char *name, int kind, ++void register_char_driver_qapi(const char *name, ChardevBackendKind kind, + void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp)); + + /* add an eventfd to the qemu devices that are polled */ +diff --git a/qemu-char.c b/qemu-char.c +index 43bd5e2..b41bda4 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -3147,7 +3147,7 @@ typedef struct CharDriver { + /* old, pre qapi */ + CharDriverState *(*open)(QemuOpts *opts); + /* new, qapi-based */ +- int kind; ++ ChardevBackendKind kind; + void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp); + } CharDriver; + +@@ -3164,7 +3164,7 @@ void register_char_driver(const char *name, CharDriverState *(*open)(QemuOpts *) + backends = g_slist_append(backends, s); + } + +-void register_char_driver_qapi(const char *name, int kind, ++void register_char_driver_qapi(const char *name, ChardevBackendKind kind, + void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp)) + { + CharDriver *s; +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-char-use-more-specific-error_setg_-variants.patch b/SOURCES/kvm-qemu-char-use-more-specific-error_setg_-variants.patch new file mode 100644 index 0000000..0eb3dbd --- /dev/null +++ b/SOURCES/kvm-qemu-char-use-more-specific-error_setg_-variants.patch @@ -0,0 +1,52 @@ +From 54cee6b36249a4486cdef86fe107fd2fbf8885fd Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:14 +0200 +Subject: [PATCH 07/18] qemu-char: use more specific error_setg_* variants + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-7-git-send-email-kraxel@redhat.com> +Patchwork-id: 54859 +O-Subject: [RHEL-7 qemu-kvm PATCH 06/15] qemu-char: use more specific error_setg_* variants +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit 20c397607cb54905f452921259b4baa9c8a1d008) +--- + qemu-char.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-char.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/qemu-char.c b/qemu-char.c +index ddc3dca..f783a87 100644 +--- a/qemu-char.c ++++ b/qemu-char.c +@@ -2624,7 +2624,7 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay, + + memset(&ss, 0, ss_len); + if (getsockname(fd, (struct sockaddr *) &ss, &ss_len) != 0) { +- error_setg(errp, "getsockname: %s", strerror(errno)); ++ error_setg_errno(errp, errno, "getsockname"); + return NULL; + } + +@@ -3557,7 +3557,7 @@ static int qmp_chardev_open_file_source(char *src, int flags, + + TFR(fd = qemu_open(src, flags, 0666)); + if (fd == -1) { +- error_setg(errp, "open %s: %s", src, strerror(errno)); ++ error_setg_file_open(errp, errno, src); + } + return fd; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-ga-execute-fsfreeze-freeze-in-reverse-order-of-.patch b/SOURCES/kvm-qemu-ga-execute-fsfreeze-freeze-in-reverse-order-of-.patch new file mode 100644 index 0000000..bcee4b4 --- /dev/null +++ b/SOURCES/kvm-qemu-ga-execute-fsfreeze-freeze-in-reverse-order-of-.patch @@ -0,0 +1,71 @@ +From 80fc609da0904d6b8f21ef017808622567ed91b5 Mon Sep 17 00:00:00 2001 +Message-Id: <80fc609da0904d6b8f21ef017808622567ed91b5.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Tomoki Sekiyama +Date: Tue, 15 Oct 2013 21:40:57 +0200 +Subject: [PATCH 11/14] qemu-ga: execute fsfreeze-freeze in reverse order of + mounts + +RH-Author: Tomoki Sekiyama +Message-id: <1381873257-2800-1-git-send-email-tsekiyam@redhat.com> +Patchwork-id: 54955 +O-Subject: [RHEL 7.0 qemu-kvm PATCH] qemu-ga: execute fsfreeze-freeze in reverse order of mounts +Bugzilla: 1019352 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz +RH-Acked-by: Luiz Capitulino + +From: Tomoki Sekiyama + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1019352 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6420515 + +Currently, fsfreeze-freeze may cause deadlock if a guest has loopback mounts +of image files in its disk; e.g.: + + # mount | grep ^/ + /dev/vda1 / type ext4 (rw,noatime,seclabel,data=ordered) + /tmp/disk.img on /mnt type ext4 (rw,relatime,seclabel) + +To avoid the deadlock, this freezes filesystems in reverse order of mounts. + +Signed-off-by: Tomoki Sekiyama +Reviewed-by: Eric Blake +*fix up commit msg +Signed-off-by: Michael Roth +(cherry picked from commit e5d9adbdab972a2172815c1174aed3fabcc448f1) +--- + qga/commands-posix.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + qga/commands-posix.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/qga/commands-posix.c b/qga/commands-posix.c +index e199738..f453132 100644 +--- a/qga/commands-posix.c ++++ b/qga/commands-posix.c +@@ -566,7 +566,7 @@ typedef struct FsMount { + QTAILQ_ENTRY(FsMount) next; + } FsMount; + +-typedef QTAILQ_HEAD(, FsMount) FsMountList; ++typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList; + + static void free_fs_mount_list(FsMountList *mounts) + { +@@ -728,7 +728,7 @@ int64_t qmp_guest_fsfreeze_freeze(Error **err) + /* cannot risk guest agent blocking itself on a write in this state */ + ga_set_frozen(ga_state); + +- QTAILQ_FOREACH(mount, &mounts, next) { ++ QTAILQ_FOREACH_REVERSE(mount, &mounts, FsMountList, next) { + fd = qemu_open(mount->dirname, O_RDONLY); + if (fd == -1) { + error_setg_errno(err, errno, "failed to open %s", mount->dirname); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-help-Sort-devices-by-logical-functionality.patch b/SOURCES/kvm-qemu-help-Sort-devices-by-logical-functionality.patch new file mode 100644 index 0000000..cf27f8c --- /dev/null +++ b/SOURCES/kvm-qemu-help-Sort-devices-by-logical-functionality.patch @@ -0,0 +1,181 @@ +From 28b2998fb1285514c2c342d174a36330734cd79c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:08 +0100 +Subject: [PATCH 32/81] qemu-help: Sort devices by logical functionality + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 55529 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 03/17] qemu-help: Sort devices by logical functionality +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Marcel Apfelbaum + +Categorize devices that appear as output to "-device ?" command +by logical functionality. Sort the devices by logical categories +before showing them to user. + +The sort is done by functionality rather than alphabetical. + +Signed-off-by: Marcel Apfelbaum +Message-id: 1375107465-25767-3-git-send-email-marcel.a@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 3d1237fb2ab4edb926c717767bb5e31d6053a7c5) +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + include/hw/qdev-core.h | 29 +++++++++++++++++++++++++++++ + qdev-monitor.c | 48 +++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 68 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/hw/qdev-core.h | 29 +++++++++++++++++++++++++++++ + qdev-monitor.c | 48 +++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 68 insertions(+), 9 deletions(-) + +diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h +index 9d995bf..18596e9 100644 +--- a/include/hw/qdev-core.h ++++ b/include/hw/qdev-core.h +@@ -18,6 +18,34 @@ enum { + #define DEVICE_CLASS(klass) OBJECT_CLASS_CHECK(DeviceClass, (klass), TYPE_DEVICE) + #define DEVICE_GET_CLASS(obj) OBJECT_GET_CLASS(DeviceClass, (obj), TYPE_DEVICE) + ++typedef enum DeviceCategory { ++ DEVICE_CATEGORY_BRIDGE, ++ DEVICE_CATEGORY_USB, ++ DEVICE_CATEGORY_STORAGE, ++ DEVICE_CATEGORY_NETWORK, ++ DEVICE_CATEGORY_INPUT, ++ DEVICE_CATEGORY_DISPLAY, ++ DEVICE_CATEGORY_SOUND, ++ DEVICE_CATEGORY_MISC, ++ DEVICE_CATEGORY_MAX ++} DeviceCategory; ++ ++static inline const char *qdev_category_get_name(DeviceCategory category) ++{ ++ static const char *category_names[DEVICE_CATEGORY_MAX] = { ++ [DEVICE_CATEGORY_BRIDGE] = "Controller/Bridge/Hub", ++ [DEVICE_CATEGORY_USB] = "USB", ++ [DEVICE_CATEGORY_STORAGE] = "Storage", ++ [DEVICE_CATEGORY_NETWORK] = "Network", ++ [DEVICE_CATEGORY_INPUT] = "Input", ++ [DEVICE_CATEGORY_DISPLAY] = "Display", ++ [DEVICE_CATEGORY_SOUND] = "Sound", ++ [DEVICE_CATEGORY_MISC] = "Misc", ++ }; ++ ++ return category_names[category]; ++}; ++ + typedef int (*qdev_initfn)(DeviceState *dev); + typedef int (*qdev_event)(DeviceState *dev); + typedef void (*qdev_resetfn)(DeviceState *dev); +@@ -81,6 +109,7 @@ typedef struct DeviceClass { + ObjectClass parent_class; + /*< public >*/ + ++ DECLARE_BITMAP(categories, DEVICE_CATEGORY_MAX); + const char *fw_name; + const char *desc; + Property *props; +diff --git a/qdev-monitor.c b/qdev-monitor.c +index e54dbc2..230a8df 100644 +--- a/qdev-monitor.c ++++ b/qdev-monitor.c +@@ -75,24 +75,27 @@ static bool qdev_class_has_alias(DeviceClass *dc) + return (qdev_class_get_alias(dc) != NULL); + } + +-static void qdev_print_devinfo(ObjectClass *klass, void *opaque) ++static void qdev_print_class_devinfo(DeviceClass *dc) + { +- DeviceClass *dc; +- bool *show_no_user = opaque; +- +- dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE); ++ DeviceCategory category; + +- if (!dc || (show_no_user && !*show_no_user && dc->no_user)) { ++ if (!dc) { + return; + } + +- error_printf("name \"%s\"", object_class_get_name(klass)); ++ error_printf("name \"%s\"", object_class_get_name(OBJECT_CLASS(dc))); + if (dc->bus_type) { + error_printf(", bus %s", dc->bus_type); + } + if (qdev_class_has_alias(dc)) { + error_printf(", alias \"%s\"", qdev_class_get_alias(dc)); + } ++ error_printf(", categories"); ++ for (category = 0; category < DEVICE_CATEGORY_MAX; ++category) { ++ if (test_bit(category, dc->categories)) { ++ error_printf(" \"%s\"", qdev_category_get_name(category)); ++ } ++ } + if (dc->desc) { + error_printf(", desc \"%s\"", dc->desc); + } +@@ -102,6 +105,15 @@ static void qdev_print_devinfo(ObjectClass *klass, void *opaque) + error_printf("\n"); + } + ++static void qdev_print_devinfo(ObjectClass *klass, void *opaque) ++{ ++ DeviceClass *dc; ++ ++ dc = (DeviceClass *)object_class_dynamic_cast(klass, TYPE_DEVICE); ++ ++ qdev_print_class_devinfo(dc); ++} ++ + static int set_property(const char *name, const char *value, void *opaque) + { + DeviceState *dev = opaque; +@@ -139,6 +151,21 @@ static const char *find_typename_by_alias(const char *alias) + return NULL; + } + ++static void qdev_print_category_devices(DeviceCategory category) ++{ ++ DeviceClass *dc; ++ GSList *list, *curr; ++ ++ list = object_class_get_list(TYPE_DEVICE, false); ++ for (curr = list; curr; curr = g_slist_next(curr)) { ++ dc = (DeviceClass *)object_class_dynamic_cast(curr->data, TYPE_DEVICE); ++ if (!dc->no_user && test_bit(category, dc->categories)) { ++ qdev_print_class_devinfo(dc); ++ } ++ } ++ g_slist_free(list); ++} ++ + int qdev_device_help(QemuOpts *opts) + { + const char *driver; +@@ -147,8 +174,11 @@ int qdev_device_help(QemuOpts *opts) + + driver = qemu_opt_get(opts, "driver"); + if (driver && is_help_option(driver)) { +- bool show_no_user = false; +- object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, &show_no_user); ++ DeviceCategory category; ++ for (category = 0; category < DEVICE_CATEGORY_MAX; ++category) { ++ qdev_print_category_devices(category); ++ } ++ + return 1; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-Allow-cache-mode-specification-for-amend.patch b/SOURCES/kvm-qemu-img-Allow-cache-mode-specification-for-amend.patch new file mode 100644 index 0000000..9882d16 --- /dev/null +++ b/SOURCES/kvm-qemu-img-Allow-cache-mode-specification-for-amend.patch @@ -0,0 +1,115 @@ +From bb18c8167f4b3a912e57ca4185e9e58d4d3a149b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 24 Oct 2014 08:17:58 +0200 +Subject: [PATCH 10/19] qemu-img: Allow cache mode specification for amend + +Message-id: <1414138680-19600-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 61863 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 2/4] qemu-img: Allow cache mode specification for amend +Bugzilla: 1138691 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf + +qemu-img amend may extensively modify the target image, depending on the +options to be amended (e.g. conversion to qcow2 compat level 0.10 from +1.1 for an image with many unallocated zero clusters). Therefore it +makes sense to allow the user to specify the cache mode to be used. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit bd39e6ed0b88a1473c652c97e731a156cccf16e2) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-img.c + +QemuOpts are not used throughout the downstream block layer. + +Signed-off-by: Max Reitz +--- + qemu-img-cmds.hx | 4 ++-- + qemu-img.c | 19 +++++++++++++++---- + qemu-img.texi | 2 +- + 3 files changed, 18 insertions(+), 7 deletions(-) + +diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx +index e590d46..5efdfe9 100644 +--- a/qemu-img-cmds.hx ++++ b/qemu-img-cmds.hx +@@ -70,8 +70,8 @@ STEXI + ETEXI + + DEF("amend", img_amend, +- "amend [-q] [-f fmt] -o options filename") ++ "amend [-q] [-f fmt] [-t cache] -o options filename") + STEXI +-@item amend [-q] [-f @var{fmt}] -o @var{options} @var{filename} ++@item amend [-q] [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename} + @end table + ETEXI +diff --git a/qemu-img.c b/qemu-img.c +index 25fdc37..1f28729 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -2659,12 +2659,14 @@ static int img_amend(int argc, char **argv) + int c, ret = 0; + char *options = NULL; + QEMUOptionParameter *create_options = NULL, *options_param = NULL; +- const char *fmt = NULL, *filename; ++ const char *fmt = NULL, *filename, *cache; ++ int flags; + bool quiet = false; + BlockDriverState *bs = NULL; + ++ cache = BDRV_DEFAULT_CACHE; + for (;;) { +- c = getopt(argc, argv, "hqf:o:"); ++ c = getopt(argc, argv, "ho:f:t:q"); + if (c == -1) { + break; + } +@@ -2691,6 +2693,9 @@ static int img_amend(int argc, char **argv) + case 'f': + fmt = optarg; + break; ++ case 't': ++ cache = optarg; ++ break; + case 'q': + quiet = true; + break; +@@ -2713,8 +2718,14 @@ static int img_amend(int argc, char **argv) + help(); + } + +- bs = bdrv_new_open("image", filename, fmt, +- BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet); ++ flags = BDRV_O_FLAGS | BDRV_O_RDWR; ++ ret = bdrv_parse_cache_flags(cache, &flags); ++ if (ret < 0) { ++ error_report("Invalid cache option: %s", cache); ++ goto out; ++ } ++ ++ bs = bdrv_new_open("image", filename, fmt, flags, true, quiet); + if (!bs) { + error_report("Could not open image '%s'", filename); + ret = -1; +diff --git a/qemu-img.texi b/qemu-img.texi +index 3d06e91..078fe81 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -370,7 +370,7 @@ After using this command to grow a disk image, you must use file system and + partitioning tools inside the VM to actually begin using the new space on the + device. + +-@item amend [-f @var{fmt}] -o @var{options} @var{filename} ++@item amend [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename} + + Amends the image format specific @var{options} for the image file + @var{filename}. Not all file formats support this operation. +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-Allow-o-help-with-incomplete-argument-list.patch b/SOURCES/kvm-qemu-img-Allow-o-help-with-incomplete-argument-list.patch new file mode 100644 index 0000000..57e3b76 --- /dev/null +++ b/SOURCES/kvm-qemu-img-Allow-o-help-with-incomplete-argument-list.patch @@ -0,0 +1,160 @@ +From e8f877d31ff4ffbd7c09744f7244b21c728281be Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Feb 2014 15:00:04 +0100 +Subject: [PATCH 6/7] qemu-img: Allow -o help with incomplete argument list + +RH-Author: Kevin Wolf +Message-id: <1393340405-9936-6-git-send-email-kwolf@redhat.com> +Patchwork-id: 57796 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 5/6] qemu-img: Allow -o help with incomplete argument list +Bugzilla: 1065873 +RH-Acked-by: Juan Quintela +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +This patch allows using 'qemu-img $subcmd -o help' for the create, +convert and amend subcommands, without specifying the previously +required filename arguments. + +Note that it's still allowed and meaningful to specify a filename: An +invocation like 'qemu-img create -o help sheepdog:foo' will also display +options that are provided by the Sheepdog driver. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +(cherry picked from commit a283cb6e58fca846c658360971d23fdd1129db65) + +Signed-off-by: Kevin Wolf +--- + qemu-img.c | 58 +++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 35 insertions(+), 23 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 58 +++++++++++++++++++++++++++++++++++----------------------- + 1 files changed, 35 insertions(+), 23 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 5002a56..3dc325e 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -244,16 +244,19 @@ static int print_block_option_help(const char *filename, const char *fmt) + return 1; + } + +- proto_drv = bdrv_find_protocol(filename, true); +- if (!proto_drv) { +- error_report("Unknown protocol '%s'", filename); +- return 1; +- } +- + create_options = append_option_parameters(create_options, + drv->create_options); +- create_options = append_option_parameters(create_options, +- proto_drv->create_options); ++ ++ if (filename) { ++ proto_drv = bdrv_find_protocol(filename, true); ++ if (!proto_drv) { ++ error_report("Unknown protocol '%s'", filename); ++ return 1; ++ } ++ create_options = append_option_parameters(create_options, ++ proto_drv->create_options); ++ } ++ + print_option_help(create_options); + free_option_parameters(create_options); + return 0; +@@ -390,10 +393,16 @@ static int img_create(int argc, char **argv) + } + + /* Get the filename */ ++ filename = (optind < argc) ? argv[optind] : NULL; ++ if (options && has_help_option(options)) { ++ g_free(options); ++ return print_block_option_help(filename, fmt); ++ } ++ + if (optind >= argc) { + help(); + } +- filename = argv[optind++]; ++ optind++; + + /* Get image size, if specified */ + if (optind < argc) { +@@ -416,11 +425,6 @@ static int img_create(int argc, char **argv) + help(); + } + +- if (options && has_help_option(options)) { +- g_free(options); +- return print_block_option_help(filename, fmt); +- } +- + bdrv_img_create(filename, fmt, base_filename, base_fmt, + options, img_size, BDRV_O_FLAGS, &local_err, quiet); + if (error_is_set(&local_err)) { +@@ -1251,17 +1255,18 @@ static int img_convert(int argc, char **argv) + } + + bs_n = argc - optind - 1; +- if (bs_n < 1) { +- help(); +- } +- +- out_filename = argv[argc - 1]; ++ out_filename = bs_n >= 1 ? argv[argc - 1] : NULL; + + if (options && has_help_option(options)) { + ret = print_block_option_help(out_filename, out_fmt); + goto out; + } + ++ if (bs_n < 1) { ++ help(); ++ } ++ ++ + if (bs_n > 1 && out_baseimg) { + error_report("-B makes no sense when concatenating multiple input " + "images"); +@@ -2639,15 +2644,21 @@ static int img_amend(int argc, char **argv) + } + } + +- if (optind != argc - 1) { ++ if (!options) { + help(); + } + +- if (!options) { +- help(); ++ filename = (optind == argc - 1) ? argv[argc - 1] : NULL; ++ if (fmt && has_help_option(options)) { ++ /* If a format is explicitly specified (and possibly no filename is ++ * given), print option help here */ ++ ret = print_block_option_help(filename, fmt); ++ goto out; + } + +- filename = argv[argc - 1]; ++ if (optind != argc - 1) { ++ help(); ++ } + + bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet); + if (!bs) { +@@ -2659,6 +2670,7 @@ static int img_amend(int argc, char **argv) + fmt = bs->drv->format_name; + + if (has_help_option(options)) { ++ /* If the format was auto-detected, print option help here */ + ret = print_block_option_help(filename, fmt); + goto out; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-Allow-source-cache-mode-specification.patch b/SOURCES/kvm-qemu-img-Allow-source-cache-mode-specification.patch new file mode 100644 index 0000000..bd3bc0a --- /dev/null +++ b/SOURCES/kvm-qemu-img-Allow-source-cache-mode-specification.patch @@ -0,0 +1,410 @@ +From a4e7f2adeadd8c03acd509028c07c7114379af10 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 24 Oct 2014 08:17:57 +0200 +Subject: [PATCH 09/19] qemu-img: Allow source cache mode specification + +Message-id: <1414138680-19600-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 61862 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 1/4] qemu-img: Allow source cache mode specification +Bugzilla: 1138691 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf + +Many qemu-img subcommands only read the source file(s) once. For these +use cases, a full write-back cache is unnecessary and mainly clutters +host cache memory. Though this is generally no concern as cache memory +is freely available and can be scaled by the host OS, it may become a +concern with thin provisioning. + +For these cases, it makes sense to allow users to freely specify the +source cache mode (e.g. use no cache at all). + +This commit adds a new switch (-T) for the qemu-img subcommands check, +compare, convert and rebase to specify the cache to be used for source +images (the backing file in case of rebase). + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 40055951a7afbfc037c6c7351d72a5c5d83ed99b) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-img-cmds.hx + qemu-img.c + qemu-img.texi + +Conflicts due to bdrv_open() working differently downstream +(pre-O_PROTOCOL and no reference parameter), and there are more options +to qemu-img convert upstream. + +Signed-off-by: Max Reitz +--- + qemu-img-cmds.hx | 16 ++++++------ + qemu-img.c | 76 +++++++++++++++++++++++++++++++++++++++++++++----------- + qemu-img.texi | 14 ++++++++--- + 3 files changed, 79 insertions(+), 27 deletions(-) + +diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx +index da1d965..e590d46 100644 +--- a/qemu-img-cmds.hx ++++ b/qemu-img-cmds.hx +@@ -10,9 +10,9 @@ STEXI + ETEXI + + DEF("check", img_check, +- "check [-q] [-f fmt] [--output=ofmt] [-r [leaks | all]] filename") ++ "check [-q] [-f fmt] [--output=ofmt] [-r [leaks | all]] [-T src_cache] filename") + STEXI +-@item check [-q] [-f @var{fmt}] [--output=@var{ofmt}] [-r [leaks | all]] @var{filename} ++@item check [-q] [-f @var{fmt}] [--output=@var{ofmt}] [-r [leaks | all]] [-T @var{src_cache}] @var{filename} + ETEXI + + DEF("create", img_create, +@@ -28,15 +28,15 @@ STEXI + ETEXI + + DEF("compare", img_compare, +- "compare [-f fmt] [-F fmt] [-p] [-q] [-s] filename1 filename2") ++ "compare [-f fmt] [-F fmt] [-T src_cache] [-p] [-q] [-s] filename1 filename2") + STEXI +-@item compare [-f @var{fmt}] [-F @var{fmt}] [-p] [-q] [-s] @var{filename1} @var{filename2} ++@item compare [-f @var{fmt}] [-F @var{fmt}] [-T @var{src_cache}] [-p] [-q] [-s] @var{filename1} @var{filename2} + ETEXI + + DEF("convert", img_convert, +- "convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename") ++ "convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename") + STEXI +-@item convert [-c] [-p] [-q] [-n] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} ++@item convert [-c] [-p] [-q] [-n] [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} + ETEXI + + DEF("info", img_info, +@@ -58,9 +58,9 @@ STEXI + ETEXI + + DEF("rebase", img_rebase, +- "rebase [-q] [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename") ++ "rebase [-q] [-f fmt] [-t cache] [-T src_cache] [-p] [-u] -b backing_file [-F backing_fmt] filename") + STEXI +-@item rebase [-q] [-f @var{fmt}] [-t @var{cache}] [-p] [-u] -b @var{backing_file} [-F @var{backing_fmt}] @var{filename} ++@item rebase [-q] [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-p] [-u] -b @var{backing_file} [-F @var{backing_fmt}] @var{filename} + ETEXI + + DEF("resize", img_resize, +diff --git a/qemu-img.c b/qemu-img.c +index fe0ac65..25fdc37 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -84,6 +84,7 @@ static void help(void) + " 'cache' is the cache mode used to write the output disk image, the valid\n" + " options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n" + " 'directsync' and 'unsafe' (default for convert)\n" ++ " 'src_cache' in contrast is the cache mode used to read input disk images\n" + " 'size' is the disk image size in bytes. Optional suffixes\n" + " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M)\n" + " and T (terabyte, 1024G) are supported. 'b' is ignored.\n" +@@ -553,7 +554,7 @@ static int img_check(int argc, char **argv) + { + int c, ret; + OutputFormat output_format = OFORMAT_HUMAN; +- const char *filename, *fmt, *output; ++ const char *filename, *fmt, *output, *cache; + BlockDriverState *bs; + int fix = 0; + int flags = BDRV_O_FLAGS | BDRV_O_CHECK; +@@ -562,6 +563,7 @@ static int img_check(int argc, char **argv) + + fmt = NULL; + output = NULL; ++ cache = BDRV_DEFAULT_CACHE; + for(;;) { + int option_index = 0; + static const struct option long_options[] = { +@@ -571,7 +573,7 @@ static int img_check(int argc, char **argv) + {"output", required_argument, 0, OPTION_OUTPUT}, + {0, 0, 0, 0} + }; +- c = getopt_long(argc, argv, "f:hr:q", ++ c = getopt_long(argc, argv, "hf:r:T:q", + long_options, &option_index); + if (c == -1) { + break; +@@ -598,6 +600,9 @@ static int img_check(int argc, char **argv) + case OPTION_OUTPUT: + output = optarg; + break; ++ case 'T': ++ cache = optarg; ++ break; + case 'q': + quiet = true; + break; +@@ -617,6 +622,12 @@ static int img_check(int argc, char **argv) + return 1; + } + ++ ret = bdrv_parse_cache_flags(cache, &flags); ++ if (ret < 0) { ++ error_report("Invalid source cache option: %s", cache); ++ return 1; ++ } ++ + bs = bdrv_new_open("image", filename, fmt, flags, true, quiet); + if (!bs) { + return 1; +@@ -911,7 +922,7 @@ static int check_empty_sectors(BlockDriverState *bs, int64_t sect_num, + */ + static int img_compare(int argc, char **argv) + { +- const char *fmt1 = NULL, *fmt2 = NULL, *filename1, *filename2; ++ const char *fmt1 = NULL, *fmt2 = NULL, *cache, *filename1, *filename2; + BlockDriverState *bs1, *bs2; + int64_t total_sectors1, total_sectors2; + uint8_t *buf1 = NULL, *buf2 = NULL; +@@ -919,6 +930,7 @@ static int img_compare(int argc, char **argv) + int allocated1, allocated2; + int ret = 0; /* return value - 0 Ident, 1 Different, >1 Error */ + bool progress = false, quiet = false, strict = false; ++ int flags; + int64_t total_sectors; + int64_t sector_num = 0; + int64_t nb_sectors; +@@ -926,8 +938,9 @@ static int img_compare(int argc, char **argv) + uint64_t bs_sectors; + uint64_t progress_base; + ++ cache = BDRV_DEFAULT_CACHE; + for (;;) { +- c = getopt(argc, argv, "hpf:F:sq"); ++ c = getopt(argc, argv, "hf:F:T:pqs"); + if (c == -1) { + break; + } +@@ -942,6 +955,9 @@ static int img_compare(int argc, char **argv) + case 'F': + fmt2 = optarg; + break; ++ case 'T': ++ cache = optarg; ++ break; + case 'p': + progress = true; + break; +@@ -966,17 +982,25 @@ static int img_compare(int argc, char **argv) + filename1 = argv[optind++]; + filename2 = argv[optind++]; + ++ flags = BDRV_O_FLAGS; ++ ret = bdrv_parse_cache_flags(cache, &flags); ++ if (ret < 0) { ++ error_report("Invalid source cache option: %s", cache); ++ ret = 2; ++ goto out3; ++ } ++ + /* Initialize before goto out */ + qemu_progress_init(progress, 2.0); + +- bs1 = bdrv_new_open("image 1", filename1, fmt1, BDRV_O_FLAGS, true, quiet); ++ bs1 = bdrv_new_open("image 1", filename1, fmt1, flags, true, quiet); + if (!bs1) { + error_report("Can't open file %s", filename1); + ret = 2; + goto out3; + } + +- bs2 = bdrv_new_open("image 2", filename2, fmt2, BDRV_O_FLAGS, true, quiet); ++ bs2 = bdrv_new_open("image 2", filename2, fmt2, flags, true, quiet); + if (!bs2) { + error_report("Can't open file %s", filename2); + ret = 2; +@@ -1145,8 +1169,8 @@ static int img_convert(int argc, char **argv) + { + int c, n, n1, bs_n, bs_i, compress, cluster_sectors, skip_create; + int64_t ret = 0; +- int progress = 0, flags; +- const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename; ++ int progress = 0, flags, src_flags; ++ const char *fmt, *out_fmt, *cache, *src_cache, *out_baseimg, *out_filename; + BlockDriver *drv, *proto_drv; + BlockDriverState **bs = NULL, *out_bs = NULL; + int64_t total_sectors, nb_sectors, sector_num, bs_offset, +@@ -1167,11 +1191,12 @@ static int img_convert(int argc, char **argv) + fmt = NULL; + out_fmt = "raw"; + cache = "unsafe"; ++ src_cache = BDRV_DEFAULT_CACHE; + out_baseimg = NULL; + compress = 0; + skip_create = 0; + for(;;) { +- c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:qn"); ++ c = getopt(argc, argv, "hf:O:B:ce6o:s:S:pt:T:qn"); + if (c == -1) { + break; + } +@@ -1239,6 +1264,9 @@ static int img_convert(int argc, char **argv) + case 't': + cache = optarg; + break; ++ case 'T': ++ src_cache = optarg; ++ break; + case 'q': + quiet = true; + break; +@@ -1275,6 +1303,13 @@ static int img_convert(int argc, char **argv) + goto out; + } + ++ src_flags = BDRV_O_FLAGS; ++ ret = bdrv_parse_cache_flags(src_cache, &src_flags); ++ if (ret < 0) { ++ error_report("Invalid source cache option: %s", src_cache); ++ goto out; ++ } ++ + qemu_progress_print(0, 100); + + bs = g_malloc0(bs_n * sizeof(BlockDriverState *)); +@@ -1283,7 +1318,7 @@ static int img_convert(int argc, char **argv) + for (bs_i = 0; bs_i < bs_n; bs_i++) { + char *id = bs_n > 1 ? g_strdup_printf("source %d", bs_i) + : g_strdup("source"); +- bs[bs_i] = bdrv_new_open(id, argv[optind + bs_i], fmt, BDRV_O_FLAGS, ++ bs[bs_i] = bdrv_new_open(id, argv[optind + bs_i], fmt, src_flags, + true, quiet); + g_free(id); + if (!bs[bs_i]) { +@@ -2197,8 +2232,8 @@ static int img_rebase(int argc, char **argv) + BlockDriverState *bs, *bs_old_backing = NULL, *bs_new_backing = NULL; + BlockDriver *old_backing_drv, *new_backing_drv; + char *filename; +- const char *fmt, *cache, *out_basefmt, *out_baseimg; +- int c, flags, ret; ++ const char *fmt, *cache, *src_cache, *out_basefmt, *out_baseimg; ++ int c, flags, src_flags, ret; + int unsafe = 0; + int progress = 0; + bool quiet = false; +@@ -2207,10 +2242,11 @@ static int img_rebase(int argc, char **argv) + /* Parse commandline parameters */ + fmt = NULL; + cache = BDRV_DEFAULT_CACHE; ++ src_cache = BDRV_DEFAULT_CACHE; + out_baseimg = NULL; + out_basefmt = NULL; + for(;;) { +- c = getopt(argc, argv, "uhf:F:b:pt:q"); ++ c = getopt(argc, argv, "hf:F:b:upt:T:q"); + if (c == -1) { + break; + } +@@ -2237,6 +2273,9 @@ static int img_rebase(int argc, char **argv) + case 't': + cache = optarg; + break; ++ case 'T': ++ src_cache = optarg; ++ break; + case 'q': + quiet = true; + break; +@@ -2262,6 +2301,13 @@ static int img_rebase(int argc, char **argv) + return -1; + } + ++ src_flags = BDRV_O_FLAGS; ++ ret = bdrv_parse_cache_flags(src_cache, &src_flags); ++ if (ret < 0) { ++ error_report("Invalid source cache option: %s", src_cache); ++ return -1; ++ } ++ + /* + * Open the images. + * +@@ -2305,7 +2351,7 @@ static int img_rebase(int argc, char **argv) + + bs_old_backing = bdrv_new("old_backing", &error_abort); + bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); +- ret = bdrv_open(bs_old_backing, backing_name, NULL, BDRV_O_FLAGS, ++ ret = bdrv_open(bs_old_backing, backing_name, NULL, src_flags, + old_backing_drv, &local_err); + if (ret) { + error_report("Could not open old backing file '%s': %s", +@@ -2315,7 +2361,7 @@ static int img_rebase(int argc, char **argv) + } + if (out_baseimg[0]) { + bs_new_backing = bdrv_new("new_backing", &error_abort); +- ret = bdrv_open(bs_new_backing, out_baseimg, NULL, BDRV_O_FLAGS, ++ ret = bdrv_open(bs_new_backing, out_baseimg, NULL, src_flags, + new_backing_drv, &local_err); + if (ret) { + error_report("Could not open new backing file '%s': %s", +diff --git a/qemu-img.texi b/qemu-img.texi +index 7c28759..3d06e91 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -68,6 +68,9 @@ down to the nearest 512 bytes. You may use the common size suffixes like + specifies the cache mode that should be used with the (destination) file. See + the documentation of the emulator's @code{-drive cache=...} option for allowed + values. ++@item -T @var{src_cache} ++in contrast specifies the cache mode that should be used with the source ++file(s). + @end table + + Parameters to snapshot subcommand: +@@ -109,7 +112,7 @@ Skip the creation of the target volume + Command description: + + @table @option +-@item check [-f @var{fmt}] [--output=@var{ofmt}] [-r [leaks | all]] @var{filename} ++@item check [-f @var{fmt}] [--output=@var{ofmt}] [-r [leaks | all]] [-T @var{src_cache}] @var{filename} + + Perform a consistency check on the disk image @var{filename}. The command can + output in the format @var{ofmt} which is either @code{human} or @code{json}. +@@ -145,7 +148,7 @@ the backing file, the backing file will not be truncated. If you want the + backing file to match the size of the smaller snapshot, you can safely truncate + it yourself once the commit operation successfully completes. + +-@item compare [-f @var{fmt}] [-F @var{fmt}] [-p] [-s] [-q] @var{filename1} @var{filename2} ++@item compare [-f @var{fmt}] [-F @var{fmt}] [-T @var{src_cache}] [-p] [-s] [-q] @var{filename1} @var{filename2} + + Check if two images have the same content. You can compare images with + different format or settings. +@@ -186,7 +189,7 @@ Error on reading data + + @end table + +-@item convert [-c] [-p] [-n] [-f @var{fmt}] [-t @var{cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} ++@item convert [-c] [-p] [-n] [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S @var{sparse_size}] @var{filename} [@var{filename2} [...]] @var{output_filename} + + Convert the disk image @var{filename} or a snapshot @var{snapshot_name} to disk image @var{output_filename} + using format @var{output_fmt}. It can be optionally compressed (@code{-c} +@@ -298,7 +301,7 @@ source code. + + List, apply, create or delete snapshots in image @var{filename}. + +-@item rebase [-f @var{fmt}] [-t @var{cache}] [-p] [-u] -b @var{backing_file} [-F @var{backing_fmt}] @var{filename} ++@item rebase [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-p] [-u] -b @var{backing_file} [-F @var{backing_fmt}] @var{filename} + + Changes the backing file of an image. Only the formats @code{qcow2} and + @code{qed} support changing the backing file. +@@ -309,6 +312,9 @@ The backing file is changed to @var{backing_file} and (if the image format of + string), then the image is rebased onto no backing file (i.e. it will exist + independently of any backing file). + ++@var{cache} specifies the cache mode to be used for @var{filename}, whereas ++@var{src_cache} specifies the cache mode for reading the new backing file. ++ + There are two different modes in which @code{rebase} can operate: + @table @option + @item Safe mode +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-Avoid-duplicate-block-device-IDs.patch b/SOURCES/kvm-qemu-img-Avoid-duplicate-block-device-IDs.patch new file mode 100644 index 0000000..c65fa3b --- /dev/null +++ b/SOURCES/kvm-qemu-img-Avoid-duplicate-block-device-IDs.patch @@ -0,0 +1,172 @@ +From aa82f406b4d4ff21041ef39547d1b166e9c6ee38 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:10 +0200 +Subject: [PATCH 07/19] qemu-img: Avoid duplicate block device IDs + +Message-id: <1414059011-15516-8-git-send-email-kwolf@redhat.com> +Patchwork-id: 61842 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 7/8] qemu-img: Avoid duplicate block device IDs +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +qemu-img used to use "image" as ID for all block devices. This means +that e.g. img_convert() ended up with potentially multiple source images +and one target image, all with the same ID. The next patch will catch +this and fail to open the block device. + +This patch makes sure that qemu-img uses meaningful unique IDs for the +block devices it uses. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 9ffe333276de8ef463896303fb951f03fd4ffcb4) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 38 ++++++++++++++++++++++---------------- + 1 file changed, 22 insertions(+), 16 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 5c2f36a..fe0ac65 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -262,7 +262,8 @@ static int print_block_option_help(const char *filename, const char *fmt) + return 0; + } + +-static BlockDriverState *bdrv_new_open(const char *filename, ++static BlockDriverState *bdrv_new_open(const char *id, ++ const char *filename, + const char *fmt, + int flags, + bool require_io, +@@ -274,7 +275,7 @@ static BlockDriverState *bdrv_new_open(const char *filename, + Error *local_err = NULL; + int ret; + +- bs = bdrv_new("image", &error_abort); ++ bs = bdrv_new(id, &error_abort); + + if (fmt) { + drv = bdrv_find_format(fmt); +@@ -616,7 +617,7 @@ static int img_check(int argc, char **argv) + return 1; + } + +- bs = bdrv_new_open(filename, fmt, flags, true, quiet); ++ bs = bdrv_new_open("image", filename, fmt, flags, true, quiet); + if (!bs) { + return 1; + } +@@ -725,7 +726,7 @@ static int img_commit(int argc, char **argv) + return -1; + } + +- bs = bdrv_new_open(filename, fmt, flags, true, quiet); ++ bs = bdrv_new_open("image", filename, fmt, flags, true, quiet); + if (!bs) { + return 1; + } +@@ -968,14 +969,14 @@ static int img_compare(int argc, char **argv) + /* Initialize before goto out */ + qemu_progress_init(progress, 2.0); + +- bs1 = bdrv_new_open(filename1, fmt1, BDRV_O_FLAGS, true, quiet); ++ bs1 = bdrv_new_open("image 1", filename1, fmt1, BDRV_O_FLAGS, true, quiet); + if (!bs1) { + error_report("Can't open file %s", filename1); + ret = 2; + goto out3; + } + +- bs2 = bdrv_new_open(filename2, fmt2, BDRV_O_FLAGS, true, quiet); ++ bs2 = bdrv_new_open("image 2", filename2, fmt2, BDRV_O_FLAGS, true, quiet); + if (!bs2) { + error_report("Can't open file %s", filename2); + ret = 2; +@@ -1280,8 +1281,11 @@ static int img_convert(int argc, char **argv) + + total_sectors = 0; + for (bs_i = 0; bs_i < bs_n; bs_i++) { +- bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, BDRV_O_FLAGS, true, +- quiet); ++ char *id = bs_n > 1 ? g_strdup_printf("source %d", bs_i) ++ : g_strdup("source"); ++ bs[bs_i] = bdrv_new_open(id, argv[optind + bs_i], fmt, BDRV_O_FLAGS, ++ true, quiet); ++ g_free(id); + if (!bs[bs_i]) { + error_report("Could not open '%s'", argv[optind + bs_i]); + ret = -1; +@@ -1395,7 +1399,7 @@ static int img_convert(int argc, char **argv) + return -1; + } + +- out_bs = bdrv_new_open(out_filename, out_fmt, flags, true, quiet); ++ out_bs = bdrv_new_open("target", out_filename, out_fmt, flags, true, quiet); + if (!out_bs) { + ret = -1; + goto out; +@@ -1758,8 +1762,8 @@ static ImageInfoList *collect_image_info_list(const char *filename, + } + g_hash_table_insert(filenames, (gpointer)filename, NULL); + +- bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_NO_BACKING, +- false, false); ++ bs = bdrv_new_open("image", filename, fmt, ++ BDRV_O_FLAGS | BDRV_O_NO_BACKING, false, false); + if (!bs) { + goto err; + } +@@ -2018,7 +2022,7 @@ static int img_map(int argc, char **argv) + return 1; + } + +- bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS, true, false); ++ bs = bdrv_new_open("image", filename, fmt, BDRV_O_FLAGS, true, false); + if (!bs) { + return 1; + } +@@ -2137,7 +2141,7 @@ static int img_snapshot(int argc, char **argv) + filename = argv[optind++]; + + /* Open the image */ +- bs = bdrv_new_open(filename, NULL, bdrv_oflags, true, quiet); ++ bs = bdrv_new_open("image", filename, NULL, bdrv_oflags, true, quiet); + if (!bs) { + return 1; + } +@@ -2264,7 +2268,7 @@ static int img_rebase(int argc, char **argv) + * Ignore the old backing file for unsafe rebase in case we want to correct + * the reference to a renamed or moved backing file. + */ +- bs = bdrv_new_open(filename, fmt, flags, true, quiet); ++ bs = bdrv_new_open("image", filename, fmt, flags, true, quiet); + if (!bs) { + return 1; + } +@@ -2561,7 +2565,8 @@ static int img_resize(int argc, char **argv) + n = qemu_opt_get_size(param, BLOCK_OPT_SIZE, 0); + qemu_opts_del(param); + +- bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet); ++ bs = bdrv_new_open("image", filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, ++ true, quiet); + if (!bs) { + ret = -1; + goto out; +@@ -2662,7 +2667,8 @@ static int img_amend(int argc, char **argv) + help(); + } + +- bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet); ++ bs = bdrv_new_open("image", filename, fmt, ++ BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet); + if (!bs) { + error_report("Could not open image '%s'", filename); + ret = -1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-Convert-by-cluster-size-if-target-is-compre.patch b/SOURCES/kvm-qemu-img-Convert-by-cluster-size-if-target-is-compre.patch new file mode 100644 index 0000000..22c2b13 --- /dev/null +++ b/SOURCES/kvm-qemu-img-Convert-by-cluster-size-if-target-is-compre.patch @@ -0,0 +1,66 @@ +From 871111d1bf38bc391728793f898527823717ed6d Mon Sep 17 00:00:00 2001 +Message-Id: <871111d1bf38bc391728793f898527823717ed6d.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:12 -0600 +Subject: [CHANGE 18/31] qemu-img: Convert by cluster size if target is + compressed +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-19-git-send-email-famz@redhat.com> +Patchwork-id: 62691 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 18/30] qemu-img: Convert by cluster size if target is compressed +Bugzilla: 1134283 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +If target block driver forces compression, qemu-img convert needs to +write by cluster size as well as "-c" option. + +Particularly, this applies for converting to VMDK streamOptimized +format. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 85f49cad879adfb5c3cbdc47ca3c3b50eb8f40bc) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + include/block/block.h | 4 ++++ + qemu-img.c | 1 + + 2 files changed, 5 insertions(+) + +diff --git a/include/block/block.h b/include/block/block.h +index 3651bd9..b06a9dc 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -34,6 +34,10 @@ typedef struct BlockDriverInfo { + * opened with BDRV_O_UNMAP flag for this to work. + */ + bool can_write_zeroes_with_unmap; ++ /* ++ * True if this block driver only supports compressed writes ++ */ ++ bool needs_compressed_writes; + } BlockDriverInfo; + + typedef struct BlockFragInfo { +diff --git a/qemu-img.c b/qemu-img.c +index f14890f..9c021e7 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1477,6 +1477,7 @@ static int img_convert(int argc, char **argv) + goto out; + } + } else { ++ compress = compress || bdi.needs_compressed_writes; + cluster_sectors = bdi.cluster_size / BDRV_SECTOR_SIZE; + } + +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-img-Error-out-for-excess-arguments.patch b/SOURCES/kvm-qemu-img-Error-out-for-excess-arguments.patch new file mode 100644 index 0000000..00f305b --- /dev/null +++ b/SOURCES/kvm-qemu-img-Error-out-for-excess-arguments.patch @@ -0,0 +1,108 @@ +From 00e5b1ffe79264929ea0dab871e5e797ab85497f Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 19 Aug 2013 11:09:45 +0200 +Subject: qemu-img: Error out for excess arguments + +RH-Author: Max Reitz +Message-id: <1376910585-8875-1-git-send-email-mreitz@redhat.com> +Patchwork-id: 53597 +O-Subject: [RHEL-7 qemu-kvm PATCH] qemu-img: Error out for excess arguments +Bugzilla: 992935 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +From: Kevin Wolf + +Don't silently ignore excess arguments at the end of the command line, +but error out instead. This can catch typos like 'resize test.img + 1G', +which doesn't increase the image size by 1G as intended, but truncates +the image to 1G. Even for less dangerous commands, the old behaviour is +confusing. + +Signed-off-by: Kevin Wolf +Reviewed-by: Laszlo Ersek +Reviewed-by: Stefan Hajnoczi +(cherry picked from commit fc11eb26cee7e3621645dd40cd9de944201f590b) +Signed-off-by: Max Reitz + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=992935 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6181030 + +diff --git a/qemu-img.c b/qemu-img.c +index cd096a1..c20ff66 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -393,6 +393,9 @@ static int img_create(int argc, char **argv) + } + img_size = (uint64_t)sval; + } ++ if (optind != argc) { ++ help(); ++ } + + if (options && is_help_option(options)) { + return print_block_option_help(filename, fmt); +@@ -570,7 +573,7 @@ static int img_check(int argc, char **argv) + break; + } + } +- if (optind >= argc) { ++ if (optind != argc - 1) { + help(); + } + filename = argv[optind++]; +@@ -681,7 +684,7 @@ static int img_commit(int argc, char **argv) + break; + } + } +- if (optind >= argc) { ++ if (optind != argc - 1) { + help(); + } + filename = argv[optind++]; +@@ -927,7 +930,7 @@ static int img_compare(int argc, char **argv) + } + + +- if (optind > argc - 2) { ++ if (optind != argc - 2) { + help(); + } + filename1 = argv[optind++]; +@@ -1882,7 +1885,7 @@ static int img_info(int argc, char **argv) + break; + } + } +- if (optind >= argc) { ++ if (optind != argc - 1) { + help(); + } + filename = argv[optind++]; +@@ -1983,7 +1986,7 @@ static int img_snapshot(int argc, char **argv) + } + } + +- if (optind >= argc) { ++ if (optind != argc - 1) { + help(); + } + filename = argv[optind++]; +@@ -2094,7 +2097,7 @@ static int img_rebase(int argc, char **argv) + progress = 0; + } + +- if ((optind >= argc) || (!unsafe && !out_baseimg)) { ++ if ((optind != argc - 1) || (!unsafe && !out_baseimg)) { + help(); + } + filename = argv[optind++]; +@@ -2373,7 +2376,7 @@ static int img_resize(int argc, char **argv) + break; + } + } +- if (optind >= argc) { ++ if (optind != argc - 1) { + help(); + } + filename = argv[optind++]; diff --git a/SOURCES/kvm-qemu-img-Use-strerror-for-generic-resize-error.patch b/SOURCES/kvm-qemu-img-Use-strerror-for-generic-resize-error.patch new file mode 100644 index 0000000..ae46d46 --- /dev/null +++ b/SOURCES/kvm-qemu-img-Use-strerror-for-generic-resize-error.patch @@ -0,0 +1,44 @@ +From 42138bf0821350fa4ebad59775fb1c73f514478b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 27 Nov 2017 18:09:27 +0100 +Subject: [PATCH 8/9] qemu-img: Use strerror() for generic resize error + +RH-Author: Max Reitz +Message-id: <20171127180928.10364-2-mreitz@redhat.com> +Patchwork-id: 77917 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/2] qemu-img: Use strerror() for generic resize error +Bugzilla: 1459725 +RH-Acked-by: John Snow +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Emitting the plain error number is not very helpful. Use strerror() +instead. + +Signed-off-by: Max Reitz +Message-id: 20160615153630.2116-2-mreitz@redhat.com +Reviewed-by: Eric Blake +Signed-off-by: Max Reitz +(cherry picked from commit bcf23482ae00e040dbef46c44ff914bf788a0937) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/qemu-img.c b/qemu-img.c +index eb2d4cb..efbe16d 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -2645,7 +2645,7 @@ static int img_resize(int argc, char **argv) + error_report("Image is read-only"); + break; + default: +- error_report("Error resizing image (%d)", -ret); ++ error_report("Error resizing image: %s", strerror(-ret)); + break; + } + out: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-add-a-map-subcommand.patch b/SOURCES/kvm-qemu-img-add-a-map-subcommand.patch new file mode 100644 index 0000000..5eb997e --- /dev/null +++ b/SOURCES/kvm-qemu-img-add-a-map-subcommand.patch @@ -0,0 +1,253 @@ +From 43c680e82e94061bf1b522466054730d8f3d8c22 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:42 +0200 +Subject: [PATCH 17/81] qemu-img: add a "map" subcommand + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-18-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55000 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 17/26] qemu-img: add a "map" subcommand +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +This command dumps the metadata of an entire chain, in either tabular or JSON +format. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4c93a13b5daf9bd5fca1a547661b0fb9a2f0ca52) +--- + qemu-img-cmds.hx | 6 ++ + qemu-img.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 198 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img-cmds.hx | 6 ++ + qemu-img.c | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 198 insertions(+), 0 deletions(-) + +diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx +index 4ca7e95..c97a1f4 100644 +--- a/qemu-img-cmds.hx ++++ b/qemu-img-cmds.hx +@@ -45,6 +45,12 @@ STEXI + @item info [-f @var{fmt}] [--output=@var{ofmt}] [--backing-chain] @var{filename} + ETEXI + ++DEF("map", img_map, ++ "map [-f fmt] [--output=ofmt] filename") ++STEXI ++@item map [-f @var{fmt}] [--output=@var{ofmt}] @var{filename} ++ETEXI ++ + DEF("snapshot", img_snapshot, + "snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename") + STEXI +diff --git a/qemu-img.c b/qemu-img.c +index a9aabd5..e58c052 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1919,6 +1919,198 @@ static int img_info(int argc, char **argv) + return 0; + } + ++ ++typedef struct MapEntry { ++ int flags; ++ int depth; ++ int64_t start; ++ int64_t length; ++ int64_t offset; ++ BlockDriverState *bs; ++} MapEntry; ++ ++static void dump_map_entry(OutputFormat output_format, MapEntry *e, ++ MapEntry *next) ++{ ++ switch (output_format) { ++ case OFORMAT_HUMAN: ++ if ((e->flags & BDRV_BLOCK_DATA) && ++ !(e->flags & BDRV_BLOCK_OFFSET_VALID)) { ++ error_report("File contains external, encrypted or compressed clusters."); ++ exit(1); ++ } ++ if ((e->flags & (BDRV_BLOCK_DATA|BDRV_BLOCK_ZERO)) == BDRV_BLOCK_DATA) { ++ printf("%#-16"PRIx64"%#-16"PRIx64"%#-16"PRIx64"%s\n", ++ e->start, e->length, e->offset, e->bs->filename); ++ } ++ /* This format ignores the distinction between 0, ZERO and ZERO|DATA. ++ * Modify the flags here to allow more coalescing. ++ */ ++ if (next && ++ (next->flags & (BDRV_BLOCK_DATA|BDRV_BLOCK_ZERO)) != BDRV_BLOCK_DATA) { ++ next->flags &= ~BDRV_BLOCK_DATA; ++ next->flags |= BDRV_BLOCK_ZERO; ++ } ++ break; ++ case OFORMAT_JSON: ++ printf("%s{ \"start\": %"PRId64", \"length\": %"PRId64", \"depth\": %d," ++ " \"zero\": %s, \"data\": %s", ++ (e->start == 0 ? "[" : ",\n"), ++ e->start, e->length, e->depth, ++ (e->flags & BDRV_BLOCK_ZERO) ? "true" : "false", ++ (e->flags & BDRV_BLOCK_DATA) ? "true" : "false"); ++ if (e->flags & BDRV_BLOCK_OFFSET_VALID) { ++ printf(", 'offset': %"PRId64"", e->offset); ++ } ++ putchar('}'); ++ ++ if (!next) { ++ printf("]\n"); ++ } ++ break; ++ } ++} ++ ++static int get_block_status(BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, MapEntry *e) ++{ ++ int64_t ret; ++ int depth; ++ ++ /* As an optimization, we could cache the current range of unallocated ++ * clusters in each file of the chain, and avoid querying the same ++ * range repeatedly. ++ */ ++ ++ depth = 0; ++ for (;;) { ++ ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &nb_sectors); ++ if (ret < 0) { ++ return ret; ++ } ++ assert(nb_sectors); ++ if (ret & (BDRV_BLOCK_ZERO|BDRV_BLOCK_DATA)) { ++ break; ++ } ++ bs = bs->backing_hd; ++ if (bs == NULL) { ++ ret = 0; ++ break; ++ } ++ ++ depth++; ++ } ++ ++ e->start = sector_num * BDRV_SECTOR_SIZE; ++ e->length = nb_sectors * BDRV_SECTOR_SIZE; ++ e->flags = ret & ~BDRV_BLOCK_OFFSET_MASK; ++ e->offset = ret & BDRV_BLOCK_OFFSET_MASK; ++ e->depth = depth; ++ e->bs = bs; ++ return 0; ++} ++ ++static int img_map(int argc, char **argv) ++{ ++ int c; ++ OutputFormat output_format = OFORMAT_HUMAN; ++ BlockDriverState *bs; ++ const char *filename, *fmt, *output; ++ int64_t length; ++ MapEntry curr = { .length = 0 }, next; ++ int ret = 0; ++ ++ fmt = NULL; ++ output = NULL; ++ for (;;) { ++ int option_index = 0; ++ static const struct option long_options[] = { ++ {"help", no_argument, 0, 'h'}, ++ {"format", required_argument, 0, 'f'}, ++ {"output", required_argument, 0, OPTION_OUTPUT}, ++ {0, 0, 0, 0} ++ }; ++ c = getopt_long(argc, argv, "f:h", ++ long_options, &option_index); ++ if (c == -1) { ++ break; ++ } ++ switch (c) { ++ case '?': ++ case 'h': ++ help(); ++ break; ++ case 'f': ++ fmt = optarg; ++ break; ++ case OPTION_OUTPUT: ++ output = optarg; ++ break; ++ } ++ } ++ if (optind >= argc) { ++ help(); ++ } ++ filename = argv[optind++]; ++ ++ if (output && !strcmp(output, "json")) { ++ output_format = OFORMAT_JSON; ++ } else if (output && !strcmp(output, "human")) { ++ output_format = OFORMAT_HUMAN; ++ } else if (output) { ++ error_report("--output must be used with human or json as argument."); ++ return 1; ++ } ++ ++ bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS, true, false); ++ if (!bs) { ++ return 1; ++ } ++ ++ if (output_format == OFORMAT_HUMAN) { ++ printf("%-16s%-16s%-16s%s\n", "Offset", "Length", "Mapped to", "File"); ++ } ++ ++ length = bdrv_getlength(bs); ++ while (curr.start + curr.length < length) { ++ int64_t nsectors_left; ++ int64_t sector_num; ++ int n; ++ ++ sector_num = (curr.start + curr.length) >> BDRV_SECTOR_BITS; ++ ++ /* Probe up to 1 GiB at a time. */ ++ nsectors_left = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE) - sector_num; ++ n = MIN(1 << (30 - BDRV_SECTOR_BITS), nsectors_left); ++ ret = get_block_status(bs, sector_num, n, &next); ++ ++ if (ret < 0) { ++ error_report("Could not read file metadata: %s", strerror(-ret)); ++ goto out; ++ } ++ ++ if (curr.length != 0 && curr.flags == next.flags && ++ curr.depth == next.depth && ++ ((curr.flags & BDRV_BLOCK_OFFSET_VALID) == 0 || ++ curr.offset + curr.length == next.offset)) { ++ curr.length += next.length; ++ continue; ++ } ++ ++ if (curr.length > 0) { ++ dump_map_entry(output_format, &curr, &next); ++ } ++ curr = next; ++ } ++ ++ dump_map_entry(output_format, &curr, NULL); ++ ++out: ++ bdrv_close(bs); ++ bdrv_delete(bs); ++ return ret < 0; ++} ++ + #define SNAPSHOT_LIST 1 + #define SNAPSHOT_CREATE 2 + #define SNAPSHOT_APPLY 3 +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-add-support-for-fully-allocated-images.patch.patch.patch b/SOURCES/kvm-qemu-img-add-support-for-fully-allocated-images.patch.patch.patch new file mode 100644 index 0000000..845c632 --- /dev/null +++ b/SOURCES/kvm-qemu-img-add-support-for-fully-allocated-images.patch.patch.patch @@ -0,0 +1,81 @@ +From cf918fe08d1cf84f3825cea464c93278c647df52 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:09 +0100 +Subject: [PATCH 21/50] qemu-img: add support for fully allocated images + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-24-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56060 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 23/52] qemu-img: add support for fully allocated images +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 11b6699af59b8684128debacfc7c44cbaa6ac53b) +--- + qemu-img.c | 10 +++++++--- + qemu-img.texi | 6 ++++++ + 2 files changed, 13 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 10 +++++++--- + qemu-img.texi | 6 ++++++ + 2 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index fa0fd0e..dfd8a92 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -99,8 +99,12 @@ static void help(void) + " '-h' with or without a command shows this help and lists the supported formats\n" + " '-p' show progress of command (only certain commands)\n" + " '-q' use Quiet mode - do not print any output (except errors)\n" +- " '-S' indicates the consecutive number of bytes that must contain only zeros\n" +- " for qemu-img to create a sparse image during conversion\n" ++ " '-S' indicates the consecutive number of bytes (defaults to 4k) that must\n" ++ " contain only zeros for qemu-img to create a sparse image during\n" ++ " conversion. If the number of bytes is 0, the source will not be scanned for\n" ++ " unallocated or zero sectors, and the destination image will always be\n" ++ " fully allocated\n" ++ " images will always be fully allocated\n" + " '--output' takes the format in which the output must be done (human or json)\n" + " '-n' skips the target volume creation (useful if the volume is created\n" + " prior to running qemu-img)\n" +@@ -1463,7 +1467,7 @@ static int img_convert(int argc, char **argv) + /* signal EOF to align */ + bdrv_write_compressed(out_bs, 0, NULL, 0); + } else { +- int has_zero_init = bdrv_has_zero_init(out_bs); ++ int has_zero_init = min_sparse ? bdrv_has_zero_init(out_bs) : 0; + + sector_num = 0; // total number of sectors converted so far + nb_sectors = total_sectors - sector_num; +diff --git a/qemu-img.texi b/qemu-img.texi +index 43ee4eb..dc578bb 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -193,6 +193,12 @@ Image conversion is also useful to get smaller image when using a + growable format such as @code{qcow} or @code{cow}: the empty sectors + are detected and suppressed from the destination image. + ++@var{sparse_size} indicates the consecutive number of bytes (defaults to 4k) ++that must contain only zeros for qemu-img to create a sparse image during ++conversion. If @var{sparse_size} is 0, the source will not be scanned for ++unallocated or zero sectors, and the destination image will always be ++fully allocated. ++ + You can use the @var{backing_file} option to force the output image to be + created as a copy on write image of the specified base image; the + @var{backing_file} should have the same content as the input's base image, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-img-add-support-for-skipping-zeroes-in-input-du.patch.patch b/SOURCES/kvm-qemu-img-add-support-for-skipping-zeroes-in-input-du.patch.patch new file mode 100644 index 0000000..31e387a --- /dev/null +++ b/SOURCES/kvm-qemu-img-add-support-for-skipping-zeroes-in-input-du.patch.patch @@ -0,0 +1,201 @@ +From bd15ec3302904c9293bba0c1bac7225943b0e3fb Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:31 +0100 +Subject: [PATCH 43/50] qemu-img: add support for skipping zeroes in input + during convert + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-46-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56082 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 45/52] qemu-img: add support for skipping zeroes in input during convert +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +we currently do not check if a sector is allocated during convert. +This means if a sector is unallocated that we allocate a bounce +buffer of zeroes, find out its zero later and do not write it +in the best case. In the worst case this can lead to reading +blocks from a raw device (like iSCSI) altough we could easily +know via get_block_status that they are zero and simply skip them. + +This patch also fixes the progress output not being at 100% after +a successful conversion. + +Signed-off-by: Peter Lieven +Reviewed-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 13c28af87a5541a9b09a59502b876a1725fb502d) +--- + qemu-img.c | 80 +++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 42 insertions(+), 38 deletions(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 80 +++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 42 insertions(+), 38 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 3dacbec..a8e2d8c 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1123,13 +1123,15 @@ out3: + + static int img_convert(int argc, char **argv) + { +- int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size, ++ int c, n, n1, bs_n, bs_i, compress, cluster_size, + cluster_sectors, skip_create; ++ int64_t ret = 0; + int progress = 0, flags; + const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename; + BlockDriver *drv, *proto_drv; + BlockDriverState **bs = NULL, *out_bs = NULL; +- int64_t total_sectors, nb_sectors, sector_num, bs_offset; ++ int64_t total_sectors, nb_sectors, sector_num, bs_offset, ++ sector_num_next_status = 0; + uint64_t bs_sectors; + uint8_t * buf = NULL; + const uint8_t *buf1; +@@ -1138,7 +1140,6 @@ static int img_convert(int argc, char **argv) + QEMUOptionParameter *out_baseimg_param; + char *options = NULL; + const char *snapshot_name = NULL; +- float local_progress = 0; + int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */ + bool quiet = false; + Error *local_err = NULL; +@@ -1401,10 +1402,6 @@ static int img_convert(int argc, char **argv) + sector_num = 0; + + nb_sectors = total_sectors; +- if (nb_sectors != 0) { +- local_progress = (float)100 / +- (nb_sectors / MIN(nb_sectors, cluster_sectors)); +- } + + for(;;) { + int64_t bs_num; +@@ -1462,7 +1459,7 @@ static int img_convert(int argc, char **argv) + } + } + sector_num += n; +- qemu_progress_print(local_progress, 100); ++ qemu_progress_print(100.0 * sector_num / total_sectors, 0); + } + /* signal EOF to align */ + bdrv_write_compressed(out_bs, 0, NULL, 0); +@@ -1479,21 +1476,13 @@ static int img_convert(int argc, char **argv) + + sector_num = 0; // total number of sectors converted so far + nb_sectors = total_sectors - sector_num; +- if (nb_sectors != 0) { +- local_progress = (float)100 / +- (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512)); +- } + + for(;;) { + nb_sectors = total_sectors - sector_num; + if (nb_sectors <= 0) { ++ ret = 0; + break; + } +- if (nb_sectors >= (IO_BUF_SIZE / 512)) { +- n = (IO_BUF_SIZE / 512); +- } else { +- n = nb_sectors; +- } + + while (sector_num - bs_offset >= bs_sectors) { + bs_i ++; +@@ -1505,34 +1494,46 @@ static int img_convert(int argc, char **argv) + sector_num, bs_i, bs_offset, bs_sectors); */ + } + +- if (n > bs_offset + bs_sectors - sector_num) { +- n = bs_offset + bs_sectors - sector_num; +- } +- +- /* If the output image is being created as a copy on write image, +- assume that sectors which are unallocated in the input image +- are present in both the output's and input's base images (no +- need to copy them). */ +- if (out_baseimg) { +- ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, +- n, &n1); ++ if ((out_baseimg || has_zero_init) && ++ sector_num >= sector_num_next_status) { ++ n = nb_sectors > INT_MAX ? INT_MAX : nb_sectors; ++ ret = bdrv_get_block_status(bs[bs_i], sector_num - bs_offset, ++ n, &n1); + if (ret < 0) { +- error_report("error while reading metadata for sector " +- "%" PRId64 ": %s", +- sector_num - bs_offset, strerror(-ret)); ++ error_report("error while reading block status of sector %" ++ PRId64 ": %s", sector_num - bs_offset, ++ strerror(-ret)); + goto out; + } +- if (!ret) { ++ /* If the output image is zero initialized, we are not working ++ * on a shared base and the input is zero we can skip the next ++ * n1 sectors */ ++ if (has_zero_init && !out_baseimg && (ret & BDRV_BLOCK_ZERO)) { + sector_num += n1; + continue; + } +- /* The next 'n1' sectors are allocated in the input image. Copy +- only those as they may be followed by unallocated sectors. */ +- n = n1; +- } else { +- n1 = n; ++ /* If the output image is being created as a copy on write ++ * image, assume that sectors which are unallocated in the ++ * input image are present in both the output's and input's ++ * base images (no need to copy them). */ ++ if (out_baseimg) { ++ if (!(ret & BDRV_BLOCK_DATA)) { ++ sector_num += n1; ++ continue; ++ } ++ /* The next 'n1' sectors are allocated in the input image. ++ * Copy only those as they may be followed by unallocated ++ * sectors. */ ++ nb_sectors = n1; ++ } ++ /* avoid redundant callouts to get_block_status */ ++ sector_num_next_status = sector_num + n1; + } + ++ n = MIN(nb_sectors, IO_BUF_SIZE / 512); ++ n = MIN(n, bs_sectors - (sector_num - bs_offset)); ++ n1 = n; ++ + ret = bdrv_read(bs[bs_i], sector_num - bs_offset, buf, n); + if (ret < 0) { + error_report("error while reading sector %" PRId64 ": %s", +@@ -1557,10 +1558,13 @@ static int img_convert(int argc, char **argv) + n -= n1; + buf1 += n1 * 512; + } +- qemu_progress_print(local_progress, 100); ++ qemu_progress_print(100.0 * sector_num / total_sectors, 0); + } + } + out: ++ if (!ret) { ++ qemu_progress_print(100, 0); ++ } + qemu_progress_end(); + free_option_parameters(create_options); + free_option_parameters(param); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-img-always-probe-the-input-image-for-allocated-.patch b/SOURCES/kvm-qemu-img-always-probe-the-input-image-for-allocated-.patch new file mode 100644 index 0000000..fda42c8 --- /dev/null +++ b/SOURCES/kvm-qemu-img-always-probe-the-input-image-for-allocated-.patch @@ -0,0 +1,94 @@ +From 76196ca1133605fa60365b6d00eff5b97fa758ea Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:35 +0200 +Subject: [PATCH 10/81] qemu-img: always probe the input image for allocated sectors + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-11-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54993 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 10/26] qemu-img: always probe the input image for allocated sectors +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +qemu-img convert can assume "that sectors which are unallocated in the +input image are present in both the output's and input's base images". + +However it is only doing this if the output image returns true for +bdrv_has_zero_init(). Testing bdrv_has_zero_init() does not make much +sense if the output image is copy-on-write, because a copy-on-write +image is never initialized to zero (it is initialized to the content +of the backing file). + +There is nothing here that makes has_zero_init images special. The +input and output must be equal for the operation to make sense, and +that's it. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit e4a86f88cc6b214c37b4abe9160e41f0338ce4cd) +--- + qemu-img.c | 40 +++++++++++++++++++--------------------- + 1 file changed, 19 insertions(+), 21 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 40 +++++++++++++++++++--------------------- + 1 files changed, 19 insertions(+), 21 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 28efb4f..71cbc59 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1476,28 +1476,26 @@ static int img_convert(int argc, char **argv) + n = bs_offset + bs_sectors - sector_num; + } + +- if (has_zero_init) { +- /* If the output image is being created as a copy on write image, +- assume that sectors which are unallocated in the input image +- are present in both the output's and input's base images (no +- need to copy them). */ +- if (out_baseimg) { +- ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, +- n, &n1); +- if (ret < 0) { +- error_report("error while reading metadata for sector " +- "%" PRId64 ": %s", +- sector_num - bs_offset, strerror(-ret)); +- goto out; +- } +- if (!ret) { +- sector_num += n1; +- continue; +- } +- /* The next 'n1' sectors are allocated in the input image. Copy +- only those as they may be followed by unallocated sectors. */ +- n = n1; ++ /* If the output image is being created as a copy on write image, ++ assume that sectors which are unallocated in the input image ++ are present in both the output's and input's base images (no ++ need to copy them). */ ++ if (out_baseimg) { ++ ret = bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, ++ n, &n1); ++ if (ret < 0) { ++ error_report("error while reading metadata for sector " ++ "%" PRId64 ": %s", ++ sector_num - bs_offset, strerror(-ret)); ++ goto out; ++ } ++ if (!ret) { ++ sector_num += n1; ++ continue; + } ++ /* The next 'n1' sectors are allocated in the input image. Copy ++ only those as they may be followed by unallocated sectors. */ ++ n = n1; + } else { + n1 = n; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-amend-Support-multiple-o-options.patch b/SOURCES/kvm-qemu-img-amend-Support-multiple-o-options.patch new file mode 100644 index 0000000..0527e46 --- /dev/null +++ b/SOURCES/kvm-qemu-img-amend-Support-multiple-o-options.patch @@ -0,0 +1,78 @@ +From 867469aa337ac206ee6f4ea1b5c4c0f1ec36696d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Feb 2014 15:00:03 +0100 +Subject: [PATCH 5/7] qemu-img amend: Support multiple -o options + +RH-Author: Kevin Wolf +Message-id: <1393340405-9936-5-git-send-email-kwolf@redhat.com> +Patchwork-id: 57794 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 4/6] qemu-img amend: Support multiple -o options +Bugzilla: 1065873 +RH-Acked-by: Juan Quintela +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +Instead of ignoring all option values but the last one, multiple -o +options now have the same meaning as having a single option with all +settings in the order of their respective -o options. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +(cherry picked from commit 626f84f39d4ae365a44dbbc0d0dd3c7739c3971a) + +Signed-off-by: Kevin Wolf +--- + qemu-img.c | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 17 +++++++++++++++-- + 1 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index e7b12c2..5002a56 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -2617,7 +2617,18 @@ static int img_amend(int argc, char **argv) + help(); + break; + case 'o': +- options = optarg; ++ if (!is_valid_option_list(optarg)) { ++ error_report("Invalid option list: %s", optarg); ++ ret = -1; ++ goto out; ++ } ++ if (!options) { ++ options = g_strdup(optarg); ++ } else { ++ char *old_options = options; ++ options = g_strdup_printf("%s,%s", options, optarg); ++ g_free(old_options); ++ } + break; + case 'f': + fmt = optarg; +@@ -2647,7 +2658,7 @@ static int img_amend(int argc, char **argv) + + fmt = bs->drv->format_name; + +- if (is_help_option(options)) { ++ if (has_help_option(options)) { + ret = print_block_option_help(filename, fmt); + goto out; + } +@@ -2674,6 +2685,8 @@ out: + } + free_option_parameters(create_options); + free_option_parameters(options_param); ++ g_free(options); ++ + if (ret) { + return 1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-clarify-src_cache-option-documentation.patch b/SOURCES/kvm-qemu-img-clarify-src_cache-option-documentation.patch new file mode 100644 index 0000000..3f61d8d --- /dev/null +++ b/SOURCES/kvm-qemu-img-clarify-src_cache-option-documentation.patch @@ -0,0 +1,67 @@ +From 94301da385eea27bfd9191cfc3f68b8df2e21987 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 24 Oct 2014 08:17:59 +0200 +Subject: [PATCH 11/19] qemu-img: clarify src_cache option documentation + +Message-id: <1414138680-19600-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 61864 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 3/4] qemu-img: clarify src_cache option documentation +Bugzilla: 1138691 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf + +From: Stefan Hajnoczi + +The source cache option takes the same values as the cache option. The +documentation reads a little strange because it starts with "In contrast +the src_cache option ...". The fact that this is comparing with the +previous documented option (the 'cache' option) is implicit. Readers +may be confused, especially if they jump to src_cache without reading +cache documentation first. + +Suggested-by: Jeff Nelson +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Max Reitz +(cherry picked from commit bb87fdf871d321895b8f5c481977df7a3f74a765) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 3 ++- + qemu-img.texi | 5 +++-- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 1f28729..39d7e05 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -84,7 +84,8 @@ static void help(void) + " 'cache' is the cache mode used to write the output disk image, the valid\n" + " options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n" + " 'directsync' and 'unsafe' (default for convert)\n" +- " 'src_cache' in contrast is the cache mode used to read input disk images\n" ++ " 'src_cache' is the cache mode used to read input disk images, the valid\n" ++ " options are the same as for the 'cache' option\n" + " 'size' is the disk image size in bytes. Optional suffixes\n" + " 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M)\n" + " and T (terabyte, 1024G) are supported. 'b' is ignored.\n" +diff --git a/qemu-img.texi b/qemu-img.texi +index 078fe81..4b7a331 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -69,8 +69,9 @@ specifies the cache mode that should be used with the (destination) file. See + the documentation of the emulator's @code{-drive cache=...} option for allowed + values. + @item -T @var{src_cache} +-in contrast specifies the cache mode that should be used with the source +-file(s). ++specifies the cache mode that should be used with the source file(s). See ++the documentation of the emulator's @code{-drive cache=...} option for allowed ++values. + @end table + + Parameters to snapshot subcommand: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-conditionally-zero-out-target-on-convert.patch.patch.patch b/SOURCES/kvm-qemu-img-conditionally-zero-out-target-on-convert.patch.patch.patch new file mode 100644 index 0000000..75d7c6d --- /dev/null +++ b/SOURCES/kvm-qemu-img-conditionally-zero-out-target-on-convert.patch.patch.patch @@ -0,0 +1,69 @@ +From 33d075d8a2d5c6f22aaefb5fcfbee61e0c46586b Mon Sep 17 00:00:00 2001 +Message-Id: <33d075d8a2d5c6f22aaefb5fcfbee61e0c46586b.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:10 +0100 +Subject: [PATCH 22/50] qemu-img: conditionally zero out target on convert + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-25-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56061 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 24/52] qemu-img: conditionally zero out target on convert +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +If the target has_zero_init = 0, but supports efficiently +writing zeroes by unmapping we call bdrv_make_zero to +avoid fully allocating the target. This currently works +only for iscsi. It can be extended to raw with +BLKDISCARDZEROES for example. + +Reviewed-by: Eric Blake +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5a37b60a61c4c334e3b194758871f41494317d42) +--- + qemu-img.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/qemu-img.c b/qemu-img.c +index dfd8a92..3dacbec 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1353,7 +1353,7 @@ static int img_convert(int argc, char **argv) + } + } + +- flags = BDRV_O_RDWR; ++ flags = min_sparse ? (BDRV_O_RDWR | BDRV_O_UNMAP) : BDRV_O_RDWR; + ret = bdrv_parse_cache_flags(cache, &flags); + if (ret < 0) { + error_report("Invalid cache option: %s", cache); +@@ -1469,6 +1469,14 @@ static int img_convert(int argc, char **argv) + } else { + int has_zero_init = min_sparse ? bdrv_has_zero_init(out_bs) : 0; + ++ if (!has_zero_init && bdrv_can_write_zeroes_with_unmap(out_bs)) { ++ ret = bdrv_make_zero(out_bs, BDRV_REQ_MAY_UNMAP); ++ if (ret < 0) { ++ goto out; ++ } ++ has_zero_init = 1; ++ } ++ + sector_num = 0; // total number of sectors converted so far + nb_sectors = total_sectors - sector_num; + if (nb_sectors != 0) { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-img-convert-Fix-progress-output.patch b/SOURCES/kvm-qemu-img-convert-Fix-progress-output.patch new file mode 100644 index 0000000..cd01a8a --- /dev/null +++ b/SOURCES/kvm-qemu-img-convert-Fix-progress-output.patch @@ -0,0 +1,116 @@ +From b099e03cdfbf175bf8b2368b83348ca2359004c7 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 10 Mar 2014 10:33:22 +0100 +Subject: [PATCH 11/16] qemu-img convert: Fix progress output + +RH-Author: Kevin Wolf +Message-id: <1394447603-30527-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 58060 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] qemu-img convert: Fix progress output +Bugzilla: 1073728 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Stefan Hajnoczi + +Initialise progress output only when the -p and -q options have already +been parsed, otherwise it's always disabled. + +Reported-by: Peter Lieven +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +(cherry picked from commit 64bb01aa35a24bea7ad0a1a8713991bab5020d12) + +Conflicts: + qemu-img.c + +Conflicts because RHEL 7 doesn't support -l in qemu-img convert. + +Signed-off-by: Kevin Wolf +--- + qemu-img.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 18 ++++++++++-------- + 1 files changed, 10 insertions(+), 8 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 3dc325e..dcce380 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1163,9 +1163,6 @@ static int img_convert(int argc, char **argv) + bool quiet = false; + Error *local_err = NULL; + +- /* Initialize before goto out */ +- qemu_progress_init(progress, 1.0); +- + fmt = NULL; + out_fmt = "raw"; + cache = "unsafe"; +@@ -1198,17 +1195,17 @@ static int img_convert(int argc, char **argv) + error_report("option -e is deprecated, please use \'-o " + "encryption\' instead!"); + ret = -1; +- goto out; ++ goto fail_getopt; + case '6': + error_report("option -6 is deprecated, please use \'-o " + "compat6\' instead!"); + ret = -1; +- goto out; ++ goto fail_getopt; + case 'o': + if (!is_valid_option_list(optarg)) { + error_report("Invalid option list: %s", optarg); + ret = -1; +- goto out; ++ goto fail_getopt; + } + if (!options) { + options = g_strdup(optarg); +@@ -1229,7 +1226,7 @@ static int img_convert(int argc, char **argv) + if (sval < 0 || *end) { + error_report("Invalid minimum zero buffer size for sparse output specified"); + ret = -1; +- goto out; ++ goto fail_getopt; + } + + min_sparse = sval / BDRV_SECTOR_SIZE; +@@ -1250,9 +1247,12 @@ static int img_convert(int argc, char **argv) + } + } + ++ /* Initialize before goto out */ + if (quiet) { + progress = 0; + } ++ qemu_progress_init(progress, 1.0); ++ + + bs_n = argc - optind - 1; + out_filename = bs_n >= 1 ? argv[argc - 1] : NULL; +@@ -1629,7 +1629,6 @@ out: + free_option_parameters(create_options); + free_option_parameters(param); + qemu_vfree(buf); +- g_free(options); + if (out_bs) { + bdrv_unref(out_bs); + } +@@ -1641,6 +1640,9 @@ out: + } + g_free(bs); + } ++fail_getopt: ++ g_free(options); ++ + if (ret) { + return 1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-convert-Support-multiple-o-options.patch b/SOURCES/kvm-qemu-img-convert-Support-multiple-o-options.patch new file mode 100644 index 0000000..6e70abc --- /dev/null +++ b/SOURCES/kvm-qemu-img-convert-Support-multiple-o-options.patch @@ -0,0 +1,115 @@ +From a20760c046f133055cedaba6952f49758e0d9cbf Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Feb 2014 15:00:02 +0100 +Subject: [PATCH 4/7] qemu-img convert: Support multiple -o options + +RH-Author: Kevin Wolf +Message-id: <1393340405-9936-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 57799 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/6] qemu-img convert: Support multiple -o options +Bugzilla: 1065873 +RH-Acked-by: Juan Quintela +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +Instead of ignoring all option values but the last one, multiple -o +options now have the same meaning as having a single option with all +settings in the order of their respective -o options. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +(cherry picked from commit 2dc8328b4c6aba60f4ad543186f4e8aec2e9287e) + +Conflicts: + qemu-img.c + +Conflicts because qemu-img convert doesn't have an -l option in RHEL 7. + +Signed-off-by: Kevin Wolf +--- + qemu-img.c | 31 +++++++++++++++++++++++-------- + 1 file changed, 23 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 31 +++++++++++++++++++++++-------- + 1 files changed, 23 insertions(+), 8 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 12bf996..e7b12c2 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1159,6 +1159,9 @@ static int img_convert(int argc, char **argv) + bool quiet = false; + Error *local_err = NULL; + ++ /* Initialize before goto out */ ++ qemu_progress_init(progress, 1.0); ++ + fmt = NULL; + out_fmt = "raw"; + cache = "unsafe"; +@@ -1190,13 +1193,26 @@ static int img_convert(int argc, char **argv) + case 'e': + error_report("option -e is deprecated, please use \'-o " + "encryption\' instead!"); +- return 1; ++ ret = -1; ++ goto out; + case '6': + error_report("option -6 is deprecated, please use \'-o " + "compat6\' instead!"); +- return 1; ++ ret = -1; ++ goto out; + case 'o': +- options = optarg; ++ if (!is_valid_option_list(optarg)) { ++ error_report("Invalid option list: %s", optarg); ++ ret = -1; ++ goto out; ++ } ++ if (!options) { ++ options = g_strdup(optarg); ++ } else { ++ char *old_options = options; ++ options = g_strdup_printf("%s,%s", options, optarg); ++ g_free(old_options); ++ } + break; + case 's': + snapshot_name = optarg; +@@ -1208,7 +1224,8 @@ static int img_convert(int argc, char **argv) + sval = strtosz_suffix(optarg, &end, STRTOSZ_DEFSUFFIX_B); + if (sval < 0 || *end) { + error_report("Invalid minimum zero buffer size for sparse output specified"); +- return 1; ++ ret = -1; ++ goto out; + } + + min_sparse = sval / BDRV_SECTOR_SIZE; +@@ -1240,10 +1257,7 @@ static int img_convert(int argc, char **argv) + + out_filename = argv[argc - 1]; + +- /* Initialize before goto out */ +- qemu_progress_init(progress, 1.0); +- +- if (options && is_help_option(options)) { ++ if (options && has_help_option(options)) { + ret = print_block_option_help(out_filename, out_fmt); + goto out; + } +@@ -1610,6 +1624,7 @@ out: + free_option_parameters(create_options); + free_option_parameters(param); + qemu_vfree(buf); ++ g_free(options); + if (out_bs) { + bdrv_unref(out_bs); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-create-Emit-filename-on-error.patch b/SOURCES/kvm-qemu-img-create-Emit-filename-on-error.patch new file mode 100644 index 0000000..eeb343e --- /dev/null +++ b/SOURCES/kvm-qemu-img-create-Emit-filename-on-error.patch @@ -0,0 +1,50 @@ +From bb21b453413a2f98069fef482761982d1e90234a Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:13 +0100 +Subject: [PATCH 20/87] qemu-img create: Emit filename on error + +RH-Author: Max Reitz +Message-id: <1383604354-12743-23-git-send-email-mreitz@redhat.com> +Patchwork-id: 55322 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 22/43] qemu-img create: Emit filename on error +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +bdrv_img_create generally does not emit the target filename, although +this is pretty important information. Therefore, prepend its error +message with the output filename (if an error occurs). + +Signed-off-by: Max Reitz +(cherry picked from commit b70d8c237a0e5e829474c3a12c8783893c4e470e) + +Signed-off-by: Max Reitz +--- + qemu-img.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 9fda8cf..0f869f3 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -409,7 +409,7 @@ static int img_create(int argc, char **argv) + bdrv_img_create(filename, fmt, base_filename, base_fmt, + options, img_size, BDRV_O_FLAGS, &local_err, quiet); + if (error_is_set(&local_err)) { +- error_report("%s", error_get_pretty(local_err)); ++ error_report("%s: %s", filename, error_get_pretty(local_err)); + error_free(local_err); + return 1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-create-Support-multiple-o-options.patch b/SOURCES/kvm-qemu-img-create-Support-multiple-o-options.patch new file mode 100644 index 0000000..867b820 --- /dev/null +++ b/SOURCES/kvm-qemu-img-create-Support-multiple-o-options.patch @@ -0,0 +1,105 @@ +From 6814f2b17eecd9ab6fde0fc38450632cae930a94 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Feb 2014 15:00:01 +0100 +Subject: [PATCH 3/7] qemu-img create: Support multiple -o options + +RH-Author: Kevin Wolf +Message-id: <1393340405-9936-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 57797 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/6] qemu-img create: Support multiple -o options +Bugzilla: 1065873 +RH-Acked-by: Juan Quintela +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +If you specified multiple -o options for qemu-img create, it would +silently ignore all but the last one. This patch fixes the problem. + +Now multiple -o options has the same meaning as having a single option +with all settings in the order of their respective -o options. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +(cherry picked from commit 77386bf6ebe67164a2d102b207fb3bc11af8c1e8) + +Signed-off-by: Kevin Wolf +--- + qemu-img.c | 28 ++++++++++++++++++++++------ + 1 file changed, 22 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 28 ++++++++++++++++++++++------ + 1 files changed, 22 insertions(+), 6 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index bc48dc1..12bf996 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -365,13 +365,23 @@ static int img_create(int argc, char **argv) + case 'e': + error_report("option -e is deprecated, please use \'-o " + "encryption\' instead!"); +- return 1; ++ goto fail; + case '6': + error_report("option -6 is deprecated, please use \'-o " + "compat6\' instead!"); +- return 1; ++ goto fail; + case 'o': +- options = optarg; ++ if (!is_valid_option_list(optarg)) { ++ error_report("Invalid option list: %s", optarg); ++ goto fail; ++ } ++ if (!options) { ++ options = g_strdup(optarg); ++ } else { ++ char *old_options = options; ++ options = g_strdup_printf("%s,%s", options, optarg); ++ g_free(old_options); ++ } + break; + case 'q': + quiet = true; +@@ -398,7 +408,7 @@ static int img_create(int argc, char **argv) + "G or T suffixes for "); + error_report("kilobytes, megabytes, gigabytes and terabytes."); + } +- return 1; ++ goto fail; + } + img_size = (uint64_t)sval; + } +@@ -406,7 +416,8 @@ static int img_create(int argc, char **argv) + help(); + } + +- if (options && is_help_option(options)) { ++ if (options && has_help_option(options)) { ++ g_free(options); + return print_block_option_help(filename, fmt); + } + +@@ -415,10 +426,15 @@ static int img_create(int argc, char **argv) + if (error_is_set(&local_err)) { + error_report("%s: %s", filename, error_get_pretty(local_err)); + error_free(local_err); +- return 1; ++ goto fail; + } + ++ g_free(options); + return 0; ++ ++fail: ++ g_free(options); ++ return 1; + } + + static void dump_json_image_check(ImageCheck *check, bool quiet) +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-decrease-progress-update-interval-on-conver.patch.patch b/SOURCES/kvm-qemu-img-decrease-progress-update-interval-on-conver.patch.patch new file mode 100644 index 0000000..47adbad --- /dev/null +++ b/SOURCES/kvm-qemu-img-decrease-progress-update-interval-on-conver.patch.patch @@ -0,0 +1,50 @@ +From e81aa6e8c41c14f1ff46dfe7085174bc8331fbe1 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:38 +0100 +Subject: [PATCH 50/50] qemu-img: decrease progress update interval on convert + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-53-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56089 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 52/52] qemu-img: decrease progress update interval on convert +Bugzilla: 1039557 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +when doing very large jobs updating the progress only every 2% +is too rare. + +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 405889820bcd5c2abf4eb70598e96f525f862c0f) +--- + qemu-img.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 55bb82c..1fe175b 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1225,7 +1225,7 @@ static int img_convert(int argc, char **argv) + out_filename = argv[argc - 1]; + + /* Initialize before goto out */ +- qemu_progress_init(progress, 2.0); ++ qemu_progress_init(progress, 1.0); + + if (options && is_help_option(options)) { + ret = print_block_option_help(out_filename, out_fmt); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-img-dynamically-adjust-iobuffer-size-during-con.patch.patch b/SOURCES/kvm-qemu-img-dynamically-adjust-iobuffer-size-during-con.patch.patch new file mode 100644 index 0000000..4db8e9a --- /dev/null +++ b/SOURCES/kvm-qemu-img-dynamically-adjust-iobuffer-size-during-con.patch.patch @@ -0,0 +1,92 @@ +From ba5bef1bb19b97c88b2e99071ffab067b7f3b9d3 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:36 +0100 +Subject: [PATCH 48/50] qemu-img: dynamically adjust iobuffer size during + convert + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-51-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56087 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 50/52] qemu-img: dynamically adjust iobuffer size during convert +Bugzilla: 1039557 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +since the convert process is basically a sync operation it might +be benificial in some case to change the hardcoded I/O buffer +size to a greater value. + +This patch increases the I/O buffer size if the output +driver advertises an optimal transfer length or discard alignment +that is greater than the default buffer size of 2M. + +Reviewed-by: Paolo Bonzini +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f2521c9023067a007d18b844fe7639c1c5b6f2ac) +--- + qemu-img.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index c81d70a..6890bb1 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1133,6 +1133,7 @@ static int img_convert(int argc, char **argv) + sector_num_next_status = 0; + uint64_t bs_sectors; + uint8_t * buf = NULL; ++ size_t bufsectors = IO_BUF_SIZE / BDRV_SECTOR_SIZE; + const uint8_t *buf1; + BlockDriverInfo bdi; + QEMUOptionParameter *param = NULL, *create_options = NULL; +@@ -1369,7 +1370,16 @@ static int img_convert(int argc, char **argv) + bs_i = 0; + bs_offset = 0; + bdrv_get_geometry(bs[0], &bs_sectors); +- buf = qemu_blockalign(out_bs, IO_BUF_SIZE); ++ ++ /* increase bufsectors from the default 4096 (2M) if opt_transfer_length ++ * or discard_alignment of the out_bs is greater. Limit to 32768 (16MB) ++ * as maximum. */ ++ bufsectors = MIN(32768, ++ MAX(bufsectors, MAX(out_bs->bl.opt_transfer_length, ++ out_bs->bl.discard_alignment)) ++ ); ++ ++ buf = qemu_blockalign(out_bs, bufsectors * BDRV_SECTOR_SIZE); + + if (skip_create) { + int64_t output_length = bdrv_getlength(out_bs); +@@ -1392,7 +1402,7 @@ static int img_convert(int argc, char **argv) + goto out; + } + cluster_size = bdi.cluster_size; +- if (cluster_size <= 0 || cluster_size > IO_BUF_SIZE) { ++ if (cluster_size <= 0 || cluster_size > bufsectors * BDRV_SECTOR_SIZE) { + error_report("invalid cluster size"); + ret = -1; + goto out; +@@ -1529,7 +1539,7 @@ static int img_convert(int argc, char **argv) + sector_num_next_status = sector_num + n1; + } + +- n = MIN(nb_sectors, IO_BUF_SIZE / 512); ++ n = MIN(nb_sectors, bufsectors); + n = MIN(n, bs_sectors - (sector_num - bs_offset)); + n1 = n; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-img-fix-img_compare-flags-error-path.patch b/SOURCES/kvm-qemu-img-fix-img_compare-flags-error-path.patch new file mode 100644 index 0000000..6c8ad6f --- /dev/null +++ b/SOURCES/kvm-qemu-img-fix-img_compare-flags-error-path.patch @@ -0,0 +1,57 @@ +From 43c5d1b9be611a87ca71b75f5a7e1d4ec3056117 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 11 Nov 2014 16:27:43 +0100 +Subject: [PATCH 13/19] qemu-img: fix img_compare() flags error path + +Message-id: <1415723263-31710-1-git-send-email-mreitz@redhat.com> +Patchwork-id: 62277 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 5/4] qemu-img: fix img_compare() flags error path +Bugzilla: 1138691 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster +RH-Acked-by: Laszlo Ersek + +From: Stefan Hajnoczi + +If img_compare() fails to parse the cache flags the goto out3 code path +will call qemu_progress_end(). Make sure we actually call +qemu_progress_init() first. + +Reported-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Max Reitz +(cherry picked from commit cbda016d94017fad3be1c657f0ad98f88395c12a) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 39d7e05..f14890f 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -983,6 +983,9 @@ static int img_compare(int argc, char **argv) + filename1 = argv[optind++]; + filename2 = argv[optind++]; + ++ /* Initialize before goto out */ ++ qemu_progress_init(progress, 2.0); ++ + flags = BDRV_O_FLAGS; + ret = bdrv_parse_cache_flags(cache, &flags); + if (ret < 0) { +@@ -991,9 +994,6 @@ static int img_compare(int argc, char **argv) + goto out3; + } + +- /* Initialize before goto out */ +- qemu_progress_init(progress, 2.0); +- + bs1 = bdrv_new_open("image 1", filename1, fmt1, flags, true, quiet); + if (!bs1) { + error_report("Can't open file %s", filename1); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-fix-invalid-JSON.patch b/SOURCES/kvm-qemu-img-fix-invalid-JSON.patch new file mode 100644 index 0000000..824caa8 --- /dev/null +++ b/SOURCES/kvm-qemu-img-fix-invalid-JSON.patch @@ -0,0 +1,45 @@ +From 7805c18f11162994f870271080ab0848759a6d07 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:48 +0200 +Subject: [PATCH 23/81] qemu-img: fix invalid JSON + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-24-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55006 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 23/26] qemu-img: fix invalid JSON +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Single quotes for JSON are a QMP-ism, use real JSON in +qemu-img output. + +Reported-by: Kevin Wolf +Signed-off-by: Paolo Bonzini +(cherry picked from commit c745bfb4300206280ce6156b4bafe765f610057c) +--- + qemu-img.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-img.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index e58c052..3a59bf0 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1960,7 +1960,7 @@ static void dump_map_entry(OutputFormat output_format, MapEntry *e, + (e->flags & BDRV_BLOCK_ZERO) ? "true" : "false", + (e->flags & BDRV_BLOCK_DATA) ? "true" : "false"); + if (e->flags & BDRV_BLOCK_OFFSET_VALID) { +- printf(", 'offset': %"PRId64"", e->offset); ++ printf(", \"offset\": %"PRId64"", e->offset); + } + putchar('}'); + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-img-fix-rebase-src_cache-option-documentation.patch b/SOURCES/kvm-qemu-img-fix-rebase-src_cache-option-documentation.patch new file mode 100644 index 0000000..24dea5d --- /dev/null +++ b/SOURCES/kvm-qemu-img-fix-rebase-src_cache-option-documentation.patch @@ -0,0 +1,63 @@ +From 1a7d0d17b3b2aeae3c48895ee60da17e3ee27f32 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 24 Oct 2014 08:18:00 +0200 +Subject: [PATCH 12/19] qemu-img: fix rebase src_cache option documentation + +Message-id: <1414138680-19600-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 61865 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 4/4] qemu-img: fix rebase src_cache option documentation +Bugzilla: 1138691 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf + +From: Stefan Hajnoczi + +The src_cache option (-T) specifies the cache mode for backing files. +It applies both the image's old backing file as well as the new backing +file: + + ret = bdrv_open(&bs_old_backing, backing_name, NULL, NULL, src_flags, + old_backing_drv, &local_err); + if (ret) { + ... + } + if (out_baseimg[0]) { + bs_new_backing = bdrv_new("new_backing", &error_abort); + ret = bdrv_open(&bs_new_backing, out_baseimg, NULL, NULL, src_flags, + new_backing_drv, &local_err); + if (ret) { + ... + } + } + +The documentation only mentions the new backing file but it really +applies to both. + +Suggested-by: Jeff Nelson +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Max Reitz +(cherry picked from commit 3ba6796d080a90440573ef29d657e4902be7e238) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + qemu-img.texi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/qemu-img.texi b/qemu-img.texi +index 4b7a331..5f99ebb 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -314,7 +314,7 @@ string), then the image is rebased onto no backing file (i.e. it will exist + independently of any backing file). + + @var{cache} specifies the cache mode to be used for @var{filename}, whereas +-@var{src_cache} specifies the cache mode for reading the new backing file. ++@var{src_cache} specifies the cache mode for reading backing files. + + There are two different modes in which @code{rebase} can operate: + @table @option +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-img-fix-usage-instruction-for-qemu-img-convert.patch.patch b/SOURCES/kvm-qemu-img-fix-usage-instruction-for-qemu-img-convert.patch.patch new file mode 100644 index 0000000..80ade64 --- /dev/null +++ b/SOURCES/kvm-qemu-img-fix-usage-instruction-for-qemu-img-convert.patch.patch @@ -0,0 +1,48 @@ +From d539424eccda7109d56332b2091863ff694a095d Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:32 +0100 +Subject: [PATCH 44/50] qemu-img: fix usage instruction for qemu-img convert + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-47-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56084 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 46/52] qemu-img: fix usage instruction for qemu-img convert +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +Reviewed-by: Eric Blake +Reviewed-by: Paolo Bonzini +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 049b09825fe479f4caa013ccde0ff87fc9d82856) +--- + qemu-img.c | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/qemu-img.c b/qemu-img.c +index a8e2d8c..c81d70a 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -104,7 +104,6 @@ static void help(void) + " conversion. If the number of bytes is 0, the source will not be scanned for\n" + " unallocated or zero sectors, and the destination image will always be\n" + " fully allocated\n" +- " images will always be fully allocated\n" + " '--output' takes the format in which the output must be done (human or json)\n" + " '-n' skips the target volume creation (useful if the volume is created\n" + " prior to running qemu-img)\n" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-img-round-down-request-length-to-an-aligned-sec.patch.patch b/SOURCES/kvm-qemu-img-round-down-request-length-to-an-aligned-sec.patch.patch new file mode 100644 index 0000000..a5da861 --- /dev/null +++ b/SOURCES/kvm-qemu-img-round-down-request-length-to-an-aligned-sec.patch.patch @@ -0,0 +1,107 @@ +From 070f95bad47e0d0f1884b93184369b3c9322cd4c Mon Sep 17 00:00:00 2001 +Message-Id: <070f95bad47e0d0f1884b93184369b3c9322cd4c.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:37 +0100 +Subject: [PATCH 49/50] qemu-img: round down request length to an aligned + sector + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-52-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56088 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 51/52] qemu-img: round down request length to an aligned sector +Bugzilla: 1039557 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +this patch shortens requests to end at an aligned sector so that +the next request starts aligned. + +[Squashed Peter's fix for bdrv_get_info() failure discussed on the +mailing list. +--Stefan] + +Reviewed-by: Paolo Bonzini +Signed-off-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 24f833cd43dbfb5f8ae99e8a6d3691671622d3ea) +--- + qemu-img.c | 32 ++++++++++++++++++++++++-------- + 1 file changed, 24 insertions(+), 8 deletions(-) + +Signed-off-by: Michal Novotny +--- + qemu-img.c | 32 ++++++++++++++++++++++++-------- + 1 file changed, 24 insertions(+), 8 deletions(-) + +diff --git a/qemu-img.c b/qemu-img.c +index 6890bb1..55bb82c 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -1122,8 +1122,7 @@ out3: + + static int img_convert(int argc, char **argv) + { +- int c, n, n1, bs_n, bs_i, compress, cluster_size, +- cluster_sectors, skip_create; ++ int c, n, n1, bs_n, bs_i, compress, cluster_sectors, skip_create; + int64_t ret = 0; + int progress = 0, flags; + const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename; +@@ -1395,19 +1394,23 @@ static int img_convert(int argc, char **argv) + } + } + +- if (compress) { +- ret = bdrv_get_info(out_bs, &bdi); +- if (ret < 0) { ++ cluster_sectors = 0; ++ ret = bdrv_get_info(out_bs, &bdi); ++ if (ret < 0) { ++ if (compress) { + error_report("could not get block driver info"); + goto out; + } +- cluster_size = bdi.cluster_size; +- if (cluster_size <= 0 || cluster_size > bufsectors * BDRV_SECTOR_SIZE) { ++ } else { ++ cluster_sectors = bdi.cluster_size / BDRV_SECTOR_SIZE; ++ } ++ ++ if (compress) { ++ if (cluster_sectors <= 0 || cluster_sectors > bufsectors) { + error_report("invalid cluster size"); + ret = -1; + goto out; + } +- cluster_sectors = cluster_size >> 9; + sector_num = 0; + + nb_sectors = total_sectors; +@@ -1540,6 +1543,19 @@ static int img_convert(int argc, char **argv) + } + + n = MIN(nb_sectors, bufsectors); ++ ++ /* round down request length to an aligned sector, but ++ * do not bother doing this on short requests. They happen ++ * when we found an all-zero area, and the next sector to ++ * write will not be sector_num + n. */ ++ if (cluster_sectors > 0 && n >= cluster_sectors) { ++ int64_t next_aligned_sector = (sector_num + n); ++ next_aligned_sector -= next_aligned_sector % cluster_sectors; ++ if (sector_num + n > next_aligned_sector) { ++ n = next_aligned_sector - sector_num; ++ } ++ } ++ + n = MIN(n, bs_sectors - (sector_num - bs_offset)); + n1 = n; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-io-Add-sigraise-command.patch b/SOURCES/kvm-qemu-io-Add-sigraise-command.patch new file mode 100644 index 0000000..b85ab5f --- /dev/null +++ b/SOURCES/kvm-qemu-io-Add-sigraise-command.patch @@ -0,0 +1,98 @@ +From 9bf536ecc296516cb5d82d5e9630663aaac56629 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:46:24 +0100 +Subject: [PATCH 13/24] qemu-io: Add sigraise command + +RH-Author: Max Reitz +Message-id: <20170313174629.28735-2-mreitz@redhat.com> +Patchwork-id: 74275 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 4/9] qemu-io: Add sigraise command +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +abort() has the sometimes undesirable side-effect of generating a core +dump. If that is not needed, SIGKILL has the same effect of abruptly +crash qemu; without a core dump. + +Thus, -c abort is not always useful to simulate a qemu-io crash; +therefore, this patch adds a new sigraise command which allows raising +a signal. + +Signed-off-by: Max Reitz +Reviewed-by: Fam Zheng +Message-id: 1418032092-16813-2-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0e82dc7bbd96f9b0fb76e5fe263ba04b15e68127) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + qemu-io-cmds.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index b41d6ee..010f05f 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -2050,6 +2050,51 @@ static const cmdinfo_t abort_cmd = { + .oneline = "simulate a program crash using abort(3)", + }; + ++static void sigraise_help(void) ++{ ++ printf( ++"\n" ++" raises the given signal\n" ++"\n" ++" Example:\n" ++" 'sigraise %i' - raises SIGTERM\n" ++"\n" ++" Invokes raise(signal), where \"signal\" is the mandatory integer argument\n" ++" given to sigraise.\n" ++"\n", SIGTERM); ++} ++ ++static int sigraise_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t sigraise_cmd = { ++ .name = "sigraise", ++ .cfunc = sigraise_f, ++ .argmin = 1, ++ .argmax = 1, ++ .flags = CMD_NOFILE_OK, ++ .args = "signal", ++ .oneline = "raises a signal", ++ .help = sigraise_help, ++}; ++ ++static int sigraise_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int sig = cvtnum(argv[1]); ++ if (sig < 0) { ++ printf("non-numeric signal number argument -- %s\n", argv[1]); ++ return 0; ++ } ++ ++ /* Using raise() to kill this process does not necessarily flush all open ++ * streams. At least stdout and stderr (although the latter should be ++ * non-buffered anyway) should be flushed, though. */ ++ fflush(stdout); ++ fflush(stderr); ++ ++ raise(sig); ++ return 0; ++} ++ + static void sleep_cb(void *opaque) + { + bool *expired = opaque; +@@ -2203,4 +2248,5 @@ static void __attribute((constructor)) init_qemuio_commands(void) + qemuio_add_command(&wait_break_cmd); + qemuio_add_command(&abort_cmd); + qemuio_add_command(&sleep_cmd); ++ qemuio_add_command(&sigraise_cmd); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Check-for-trailing-chars.patch b/SOURCES/kvm-qemu-io-Check-for-trailing-chars.patch new file mode 100644 index 0000000..d4d0f7f --- /dev/null +++ b/SOURCES/kvm-qemu-io-Check-for-trailing-chars.patch @@ -0,0 +1,59 @@ +From 362faad8e8f4c2c2c875df12f6bbae7964c0146d Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:38 +0100 +Subject: [PATCH 19/27] qemu-io: Check for trailing chars + +RH-Author: John Snow +Message-id: <1448300320-7772-20-git-send-email-jsnow@redhat.com> +Patchwork-id: 68449 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 19/21] qemu-io: Check for trailing chars +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +Make sure there's not trailing garbage, e.g. +"64k-whatever-i-want-here" + +Reported-by: Max Reitz +Signed-off-by: John Snow +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit ef5a788527b2038d742b057a415ab4d0e735e98f) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io-cmds.c: + - Downstream still uses strtosz_suffix, not + qemu_strtosz_suffix. + +Signed-off-by: John Snow +--- + qemu-io-cmds.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index 95345fe..6ea027d 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -124,7 +124,14 @@ static char **breakline(char *input, int *count) + static int64_t cvtnum(const char *s) + { + char *end; +- return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); ++ int64_t ret; ++ ++ ret = strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); ++ if (*end != '\0') { ++ /* Detritus at the end of the string */ ++ return -EINVAL; ++ } ++ return ret; + } + + #define EXABYTES(x) ((long long)(x) << 60) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Correct-error-messages.patch b/SOURCES/kvm-qemu-io-Correct-error-messages.patch new file mode 100644 index 0000000..07f3345 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Correct-error-messages.patch @@ -0,0 +1,218 @@ +From 8adbd2914ccd44e0b1766690b514bda213b88740 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:39 +0100 +Subject: [PATCH 20/27] qemu-io: Correct error messages + +RH-Author: John Snow +Message-id: <1448300320-7772-21-git-send-email-jsnow@redhat.com> +Patchwork-id: 68446 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 20/21] qemu-io: Correct error messages +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +Reported-by: Max Reitz +Signed-off-by: John Snow +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Kevin Wolf +(cherry picked from commit a9ecfa004f2dd83df612daac4a87dfc3a0feba28) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io-cmds.c: + - Fixes to sigraise are not backported. + +Signed-off-by: John Snow +--- + qemu-io-cmds.c | 51 +++++++++++++++++++++++++++++++++------------------ + 1 file changed, 33 insertions(+), 18 deletions(-) + +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index 6ea027d..b41d6ee 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -134,6 +134,21 @@ static int64_t cvtnum(const char *s) + return ret; + } + ++static void print_cvtnum_err(int64_t rc, const char *arg) ++{ ++ switch (rc) { ++ case -EINVAL: ++ printf("Parsing error: non-numeric argument," ++ " or extraneous/unrecognized suffix -- %s\n", arg); ++ break; ++ case -ERANGE: ++ printf("Parsing error: argument too large -- %s\n", arg); ++ break; ++ default: ++ printf("Parsing error: %s\n", arg); ++ } ++} ++ + #define EXABYTES(x) ((long long)(x) << 60) + #define PETABYTES(x) ((long long)(x) << 50) + #define TERABYTES(x) ((long long)(x) << 40) +@@ -355,13 +370,13 @@ create_iovec(BlockDriverState *bs, QEMUIOVector *qiov, char **argv, int nr_iov, + + len = cvtnum(arg); + if (len < 0) { +- printf("non-numeric length argument -- %s\n", arg); ++ print_cvtnum_err(len, arg); + goto fail; + } + + /* should be SIZE_T_MAX, but that doesn't exist */ + if (len > INT_MAX) { +- printf("too large length argument -- %s\n", arg); ++ printf("Argument '%s' exceeds maximum size %d\n", arg, INT_MAX); + goto fail; + } + +@@ -688,7 +703,7 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + lflag = 1; + pattern_count = cvtnum(optarg); + if (pattern_count < 0) { +- printf("non-numeric length argument -- %s\n", optarg); ++ print_cvtnum_err(pattern_count, optarg); + return 0; + } + break; +@@ -709,7 +724,7 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + sflag = 1; + pattern_offset = cvtnum(optarg); + if (pattern_offset < 0) { +- printf("non-numeric length argument -- %s\n", optarg); ++ print_cvtnum_err(pattern_offset, optarg); + return 0; + } + break; +@@ -732,14 +747,14 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[optind]); + if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(offset, argv[optind]); + return 0; + } + + optind++; + count = cvtnum(argv[optind]); + if (count < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(count, argv[optind]); + return 0; + } else if (count > SIZE_MAX) { + printf("length cannot exceed %" PRIu64 ", given %s\n", +@@ -894,7 +909,7 @@ static int readv_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[optind]); + if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(offset, argv[optind]); + return 0; + } + optind++; +@@ -1043,14 +1058,14 @@ static int write_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[optind]); + if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(offset, argv[optind]); + return 0; + } + + optind++; + count = cvtnum(argv[optind]); + if (count < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(count, argv[optind]); + return 0; + } else if (count > SIZE_MAX) { + printf("length cannot exceed %" PRIu64 ", given %s\n", +@@ -1179,7 +1194,7 @@ static int writev_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[optind]); + if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(offset, argv[optind]); + return 0; + } + optind++; +@@ -1306,7 +1321,7 @@ static int multiwrite_f(BlockDriverState *bs, int argc, char **argv) + /* Read the offset of the request */ + offset = cvtnum(argv[optind]); + if (offset < 0) { +- printf("non-numeric offset argument -- %s\n", argv[optind]); ++ print_cvtnum_err(offset, argv[optind]); + goto out; + } + optind++; +@@ -1526,7 +1541,7 @@ static int aio_read_f(BlockDriverState *bs, int argc, char **argv) + + ctx->offset = cvtnum(argv[optind]); + if (ctx->offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(ctx->offset, argv[optind]); + g_free(ctx); + return 0; + } +@@ -1618,7 +1633,7 @@ static int aio_write_f(BlockDriverState *bs, int argc, char **argv) + + ctx->offset = cvtnum(argv[optind]); + if (ctx->offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(ctx->offset, argv[optind]); + g_free(ctx); + return 0; + } +@@ -1676,7 +1691,7 @@ static int truncate_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[1]); + if (offset < 0) { +- printf("non-numeric truncate argument -- %s\n", argv[1]); ++ print_cvtnum_err(offset, argv[1]); + return 0; + } + +@@ -1822,14 +1837,14 @@ static int discard_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[optind]); + if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(offset, argv[optind]); + return 0; + } + + optind++; + count = cvtnum(argv[optind]); + if (count < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); ++ print_cvtnum_err(count, argv[optind]); + return 0; + } else if (count >> BDRV_SECTOR_BITS > INT_MAX) { + printf("length cannot exceed %"PRIu64", given %s\n", +@@ -1867,7 +1882,7 @@ static int alloc_f(BlockDriverState *bs, int argc, char **argv) + + offset = cvtnum(argv[1]); + if (offset < 0) { +- printf("non-numeric offset argument -- %s\n", argv[1]); ++ print_cvtnum_err(offset, argv[1]); + return 0; + } else if (offset & 0x1ff) { + printf("offset %" PRId64 " is not sector aligned\n", +@@ -1878,7 +1893,7 @@ static int alloc_f(BlockDriverState *bs, int argc, char **argv) + if (argc == 3) { + nb_sectors = cvtnum(argv[2]); + if (nb_sectors < 0) { +- printf("non-numeric length argument -- %s\n", argv[2]); ++ print_cvtnum_err(nb_sectors, argv[2]); + return 0; + } else if (nb_sectors > INT_MAX) { + printf("length argument cannot exceed %d, given %s\n", +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Don-t-use-global-bs-in-command-implementatio.patch b/SOURCES/kvm-qemu-io-Don-t-use-global-bs-in-command-implementatio.patch new file mode 100644 index 0000000..7a8bd97 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Don-t-use-global-bs-in-command-implementatio.patch @@ -0,0 +1,737 @@ +From 2653e21a25d8fb99479337c785e81b07f755acda Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:24 +0100 +Subject: [PATCH 05/27] qemu-io: Don't use global bs in command implementations + +RH-Author: John Snow +Message-id: <1448300320-7772-6-git-send-email-jsnow@redhat.com> +Patchwork-id: 68433 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 05/21] qemu-io: Don't use global bs in command implementations +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Pass in the BlockDriverState to the command handlers instead of using +the global variable. This is an important step to make the commands +usable outside of qemu-io. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 734c3b85cb72d264ad2b38a87f30304e05de2cb1) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io.c + Number of arguments to bdrv_co_write_zeroes + bdrv_unref used downstream instead of bdrv_delete + downstream, local_err used for bdrv_open + downstream, error_abort used for bdrv_new + map_is_allocated was never backported from a00e81e98f71 + sleep_f was backported, adjust its signature + +Signed-off-by: John Snow +--- + cmd.c | 6 ++- + cmd.h | 8 ++- + qemu-io.c | 164 ++++++++++++++++++++++++++++++++++---------------------------- + 3 files changed, 99 insertions(+), 79 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 214c6f7..d501aab 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -57,7 +57,7 @@ check_command( + const cmdinfo_t *ci) + { + if (check_func) +- return check_func(ci); ++ return check_func(qemuio_bs, ci); + return 1; + } + +@@ -103,7 +103,7 @@ command( + return 0; + } + optind = 0; +- return ct->cfunc(argc, argv); ++ return ct->cfunc(qemuio_bs, argc, argv); + } + + const cmdinfo_t * +@@ -452,6 +452,7 @@ static cmdinfo_t quit_cmd; + /* ARGSUSED */ + static int + quit_f( ++ BlockDriverState *bs, + int argc, + char **argv) + { +@@ -490,6 +491,7 @@ help_all(void) + + static int + help_f( ++ BlockDriverState *bs, + int argc, + char **argv) + { +diff --git a/cmd.h b/cmd.h +index 4dcfe88..ccf6336 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -17,9 +17,13 @@ + #ifndef __COMMAND_H__ + #define __COMMAND_H__ + ++#include "qemu-common.h" ++ + #define CMD_FLAG_GLOBAL ((int)0x80000000) /* don't iterate "args" */ + +-typedef int (*cfunc_t)(int argc, char **argv); ++extern BlockDriverState *qemuio_bs; ++ ++typedef int (*cfunc_t)(BlockDriverState *bs, int argc, char **argv); + typedef void (*helpfunc_t)(void); + + typedef struct cmdinfo { +@@ -41,7 +45,7 @@ extern int ncmds; + void help_init(void); + void quit_init(void); + +-typedef int (*checkfunc_t)(const cmdinfo_t *ci); ++typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); + + void add_command(const cmdinfo_t *ci); + void add_user_command(char *optarg); +diff --git a/qemu-io.c b/qemu-io.c +index e4fa2fc..c3cc4f3 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -29,8 +29,8 @@ + #define CMD_NOFILE_OK 0x01 + + char *progname; +-static BlockDriverState *bs; + ++BlockDriverState *qemuio_bs; + static int misalign; + + static int64_t cvtnum(const char *s) +@@ -67,7 +67,7 @@ static int parse_pattern(const char *arg) + */ + + #define MISALIGN_OFFSET 16 +-static void *qemu_io_alloc(size_t len, int pattern) ++static void *qemu_io_alloc(BlockDriverState *bs, size_t len, int pattern) + { + void *buf; + +@@ -140,7 +140,8 @@ static void print_report(const char *op, struct timeval *t, int64_t offset, + * vector matching it. + */ + static void * +-create_iovec(QEMUIOVector *qiov, char **argv, int nr_iov, int pattern) ++create_iovec(BlockDriverState *bs, QEMUIOVector *qiov, char **argv, int nr_iov, ++ int pattern) + { + size_t *sizes = g_new0(size_t, nr_iov); + size_t count = 0; +@@ -176,7 +177,7 @@ create_iovec(QEMUIOVector *qiov, char **argv, int nr_iov, int pattern) + + qemu_iovec_init(qiov, nr_iov); + +- buf = p = qemu_io_alloc(count, pattern); ++ buf = p = qemu_io_alloc(bs, count, pattern); + + for (i = 0; i < nr_iov; i++) { + qemu_iovec_add(qiov, p, sizes[i]); +@@ -188,7 +189,8 @@ fail: + return buf; + } + +-static int do_read(char *buf, int64_t offset, int count, int *total) ++static int do_read(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) + { + int ret; + +@@ -200,7 +202,8 @@ static int do_read(char *buf, int64_t offset, int count, int *total) + return 1; + } + +-static int do_write(char *buf, int64_t offset, int count, int *total) ++static int do_write(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) + { + int ret; + +@@ -212,7 +215,8 @@ static int do_write(char *buf, int64_t offset, int count, int *total) + return 1; + } + +-static int do_pread(char *buf, int64_t offset, int count, int *total) ++static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) + { + *total = bdrv_pread(bs, offset, (uint8_t *)buf, count); + if (*total < 0) { +@@ -221,7 +225,8 @@ static int do_pread(char *buf, int64_t offset, int count, int *total) + return 1; + } + +-static int do_pwrite(char *buf, int64_t offset, int count, int *total) ++static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) + { + *total = bdrv_pwrite(bs, offset, (uint8_t *)buf, count); + if (*total < 0) { +@@ -231,6 +236,7 @@ static int do_pwrite(char *buf, int64_t offset, int count, int *total) + } + + typedef struct { ++ BlockDriverState *bs; + int64_t offset; + int count; + int *total; +@@ -242,7 +248,7 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque) + { + CoWriteZeroes *data = opaque; + +- data->ret = bdrv_co_write_zeroes(bs, data->offset / BDRV_SECTOR_SIZE, ++ data->ret = bdrv_co_write_zeroes(data->bs, data->offset / BDRV_SECTOR_SIZE, + data->count / BDRV_SECTOR_SIZE, 0); + data->done = true; + if (data->ret < 0) { +@@ -253,10 +259,12 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque) + *data->total = data->count; + } + +-static int do_co_write_zeroes(int64_t offset, int count, int *total) ++static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count, ++ int *total) + { + Coroutine *co; + CoWriteZeroes data = { ++ .bs = bs, + .offset = offset, + .count = count, + .total = total, +@@ -275,7 +283,8 @@ static int do_co_write_zeroes(int64_t offset, int count, int *total) + } + } + +-static int do_write_compressed(char *buf, int64_t offset, int count, int *total) ++static int do_write_compressed(BlockDriverState *bs, char *buf, int64_t offset, ++ int count, int *total) + { + int ret; + +@@ -287,7 +296,8 @@ static int do_write_compressed(char *buf, int64_t offset, int count, int *total) + return 1; + } + +-static int do_load_vmstate(char *buf, int64_t offset, int count, int *total) ++static int do_load_vmstate(BlockDriverState *bs, char *buf, int64_t offset, ++ int count, int *total) + { + *total = bdrv_load_vmstate(bs, (uint8_t *)buf, offset, count); + if (*total < 0) { +@@ -296,7 +306,8 @@ static int do_load_vmstate(char *buf, int64_t offset, int count, int *total) + return 1; + } + +-static int do_save_vmstate(char *buf, int64_t offset, int count, int *total) ++static int do_save_vmstate(BlockDriverState *bs, char *buf, int64_t offset, ++ int count, int *total) + { + *total = bdrv_save_vmstate(bs, (uint8_t *)buf, offset, count); + if (*total < 0) { +@@ -311,7 +322,8 @@ static void aio_rw_done(void *opaque, int ret) + *(int *)opaque = ret; + } + +-static int do_aio_readv(QEMUIOVector *qiov, int64_t offset, int *total) ++static int do_aio_readv(BlockDriverState *bs, QEMUIOVector *qiov, ++ int64_t offset, int *total) + { + int async_ret = NOT_DONE; + +@@ -325,7 +337,8 @@ static int do_aio_readv(QEMUIOVector *qiov, int64_t offset, int *total) + return async_ret < 0 ? async_ret : 1; + } + +-static int do_aio_writev(QEMUIOVector *qiov, int64_t offset, int *total) ++static int do_aio_writev(BlockDriverState *bs, QEMUIOVector *qiov, ++ int64_t offset, int *total) + { + int async_ret = NOT_DONE; + +@@ -354,7 +367,8 @@ static void multiwrite_cb(void *opaque, int ret) + } + } + +-static int do_aio_multiwrite(BlockRequest* reqs, int num_reqs, int *total) ++static int do_aio_multiwrite(BlockDriverState *bs, BlockRequest* reqs, ++ int num_reqs, int *total) + { + int i, ret; + struct multiwrite_async_ret async_ret = { +@@ -403,7 +417,7 @@ static void read_help(void) + "\n"); + } + +-static int read_f(int argc, char **argv); ++static int read_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t read_cmd = { + .name = "read", +@@ -416,7 +430,7 @@ static const cmdinfo_t read_cmd = { + .help = read_help, + }; + +-static int read_f(int argc, char **argv) ++static int read_f(BlockDriverState *bs, int argc, char **argv) + { + struct timeval t1, t2; + int Cflag = 0, pflag = 0, qflag = 0, vflag = 0; +@@ -522,15 +536,15 @@ static int read_f(int argc, char **argv) + } + } + +- buf = qemu_io_alloc(count, 0xab); ++ buf = qemu_io_alloc(bs, count, 0xab); + + gettimeofday(&t1, NULL); + if (pflag) { +- cnt = do_pread(buf, offset, count, &total); ++ cnt = do_pread(bs, buf, offset, count, &total); + } else if (bflag) { +- cnt = do_load_vmstate(buf, offset, count, &total); ++ cnt = do_load_vmstate(bs, buf, offset, count, &total); + } else { +- cnt = do_read(buf, offset, count, &total); ++ cnt = do_read(bs, buf, offset, count, &total); + } + gettimeofday(&t2, NULL); + +@@ -587,7 +601,7 @@ static void readv_help(void) + "\n"); + } + +-static int readv_f(int argc, char **argv); ++static int readv_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t readv_cmd = { + .name = "readv", +@@ -599,7 +613,7 @@ static const cmdinfo_t readv_cmd = { + .help = readv_help, + }; + +-static int readv_f(int argc, char **argv) ++static int readv_f(BlockDriverState *bs, int argc, char **argv) + { + struct timeval t1, t2; + int Cflag = 0, qflag = 0, vflag = 0; +@@ -655,13 +669,13 @@ static int readv_f(int argc, char **argv) + } + + nr_iov = argc - optind; +- buf = create_iovec(&qiov, &argv[optind], nr_iov, 0xab); ++ buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, 0xab); + if (buf == NULL) { + return 0; + } + + gettimeofday(&t1, NULL); +- cnt = do_aio_readv(&qiov, offset, &total); ++ cnt = do_aio_readv(bs, &qiov, offset, &total); + gettimeofday(&t2, NULL); + + if (cnt < 0) { +@@ -718,7 +732,7 @@ static void write_help(void) + "\n"); + } + +-static int write_f(int argc, char **argv); ++static int write_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t write_cmd = { + .name = "write", +@@ -731,7 +745,7 @@ static const cmdinfo_t write_cmd = { + .help = write_help, + }; + +-static int write_f(int argc, char **argv) ++static int write_f(BlockDriverState *bs, int argc, char **argv) + { + struct timeval t1, t2; + int Cflag = 0, pflag = 0, qflag = 0, bflag = 0, Pflag = 0, zflag = 0; +@@ -818,20 +832,20 @@ static int write_f(int argc, char **argv) + } + + if (!zflag) { +- buf = qemu_io_alloc(count, pattern); ++ buf = qemu_io_alloc(bs, count, pattern); + } + + gettimeofday(&t1, NULL); + if (pflag) { +- cnt = do_pwrite(buf, offset, count, &total); ++ cnt = do_pwrite(bs, buf, offset, count, &total); + } else if (bflag) { +- cnt = do_save_vmstate(buf, offset, count, &total); ++ cnt = do_save_vmstate(bs, buf, offset, count, &total); + } else if (zflag) { +- cnt = do_co_write_zeroes(offset, count, &total); ++ cnt = do_co_write_zeroes(bs, offset, count, &total); + } else if (cflag) { +- cnt = do_write_compressed(buf, offset, count, &total); ++ cnt = do_write_compressed(bs, buf, offset, count, &total); + } else { +- cnt = do_write(buf, offset, count, &total); ++ cnt = do_write(bs, buf, offset, count, &total); + } + gettimeofday(&t2, NULL); + +@@ -874,7 +888,7 @@ writev_help(void) + "\n"); + } + +-static int writev_f(int argc, char **argv); ++static int writev_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t writev_cmd = { + .name = "writev", +@@ -886,7 +900,7 @@ static const cmdinfo_t writev_cmd = { + .help = writev_help, + }; + +-static int writev_f(int argc, char **argv) ++static int writev_f(BlockDriverState *bs, int argc, char **argv) + { + struct timeval t1, t2; + int Cflag = 0, qflag = 0; +@@ -936,13 +950,13 @@ static int writev_f(int argc, char **argv) + } + + nr_iov = argc - optind; +- buf = create_iovec(&qiov, &argv[optind], nr_iov, pattern); ++ buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, pattern); + if (buf == NULL) { + return 0; + } + + gettimeofday(&t1, NULL); +- cnt = do_aio_writev(&qiov, offset, &total); ++ cnt = do_aio_writev(bs, &qiov, offset, &total); + gettimeofday(&t2, NULL); + + if (cnt < 0) { +@@ -983,7 +997,7 @@ static void multiwrite_help(void) + "\n"); + } + +-static int multiwrite_f(int argc, char **argv); ++static int multiwrite_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t multiwrite_cmd = { + .name = "multiwrite", +@@ -995,7 +1009,7 @@ static const cmdinfo_t multiwrite_cmd = { + .help = multiwrite_help, + }; + +-static int multiwrite_f(int argc, char **argv) ++static int multiwrite_f(BlockDriverState *bs, int argc, char **argv) + { + struct timeval t1, t2; + int Cflag = 0, qflag = 0; +@@ -1076,7 +1090,7 @@ static int multiwrite_f(int argc, char **argv) + nr_iov = j - optind; + + /* Build request */ +- buf[i] = create_iovec(&qiovs[i], &argv[optind], nr_iov, pattern); ++ buf[i] = create_iovec(bs, &qiovs[i], &argv[optind], nr_iov, pattern); + if (buf[i] == NULL) { + goto out; + } +@@ -1094,7 +1108,7 @@ static int multiwrite_f(int argc, char **argv) + nr_reqs = i; + + gettimeofday(&t1, NULL); +- cnt = do_aio_multiwrite(reqs, nr_reqs, &total); ++ cnt = do_aio_multiwrite(bs, reqs, nr_reqs, &total); + gettimeofday(&t2, NULL); + + if (cnt < 0) { +@@ -1222,7 +1236,7 @@ static void aio_read_help(void) + "\n"); + } + +-static int aio_read_f(int argc, char **argv); ++static int aio_read_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t aio_read_cmd = { + .name = "aio_read", +@@ -1234,7 +1248,7 @@ static const cmdinfo_t aio_read_cmd = { + .help = aio_read_help, + }; + +-static int aio_read_f(int argc, char **argv) ++static int aio_read_f(BlockDriverState *bs, int argc, char **argv) + { + int nr_iov, c; + struct aio_ctx *ctx = g_new0(struct aio_ctx, 1); +@@ -1285,7 +1299,7 @@ static int aio_read_f(int argc, char **argv) + } + + nr_iov = argc - optind; +- ctx->buf = create_iovec(&ctx->qiov, &argv[optind], nr_iov, 0xab); ++ ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, 0xab); + if (ctx->buf == NULL) { + g_free(ctx); + return 0; +@@ -1317,7 +1331,7 @@ static void aio_write_help(void) + "\n"); + } + +-static int aio_write_f(int argc, char **argv); ++static int aio_write_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t aio_write_cmd = { + .name = "aio_write", +@@ -1329,7 +1343,7 @@ static const cmdinfo_t aio_write_cmd = { + .help = aio_write_help, + }; + +-static int aio_write_f(int argc, char **argv) ++static int aio_write_f(BlockDriverState *bs, int argc, char **argv) + { + int nr_iov, c; + int pattern = 0xcd; +@@ -1377,7 +1391,7 @@ static int aio_write_f(int argc, char **argv) + } + + nr_iov = argc - optind; +- ctx->buf = create_iovec(&ctx->qiov, &argv[optind], nr_iov, pattern); ++ ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, pattern); + if (ctx->buf == NULL) { + g_free(ctx); + return 0; +@@ -1389,7 +1403,7 @@ static int aio_write_f(int argc, char **argv) + return 0; + } + +-static int aio_flush_f(int argc, char **argv) ++static int aio_flush_f(BlockDriverState *bs, int argc, char **argv) + { + bdrv_drain_all(); + return 0; +@@ -1401,7 +1415,7 @@ static const cmdinfo_t aio_flush_cmd = { + .oneline = "completes all outstanding aio requests" + }; + +-static int flush_f(int argc, char **argv) ++static int flush_f(BlockDriverState *bs, int argc, char **argv) + { + bdrv_flush(bs); + return 0; +@@ -1414,7 +1428,7 @@ static const cmdinfo_t flush_cmd = { + .oneline = "flush all in-core file state to disk", + }; + +-static int truncate_f(int argc, char **argv) ++static int truncate_f(BlockDriverState *bs, int argc, char **argv) + { + int64_t offset; + int ret; +@@ -1444,7 +1458,7 @@ static const cmdinfo_t truncate_cmd = { + .oneline = "truncates the current file at the given offset", + }; + +-static int length_f(int argc, char **argv) ++static int length_f(BlockDriverState *bs, int argc, char **argv) + { + int64_t size; + char s1[64]; +@@ -1469,7 +1483,7 @@ static const cmdinfo_t length_cmd = { + }; + + +-static int info_f(int argc, char **argv) ++static int info_f(BlockDriverState *bs, int argc, char **argv) + { + BlockDriverInfo bdi; + ImageInfoSpecific *spec_info; +@@ -1528,7 +1542,7 @@ static void discard_help(void) + "\n"); + } + +-static int discard_f(int argc, char **argv); ++static int discard_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t discard_cmd = { + .name = "discard", +@@ -1541,7 +1555,7 @@ static const cmdinfo_t discard_cmd = { + .help = discard_help, + }; + +-static int discard_f(int argc, char **argv) ++static int discard_f(BlockDriverState *bs, int argc, char **argv) + { + struct timeval t1, t2; + int Cflag = 0, qflag = 0; +@@ -1599,7 +1613,7 @@ out: + return 0; + } + +-static int alloc_f(int argc, char **argv) ++static int alloc_f(BlockDriverState *bs, int argc, char **argv) + { + int64_t offset, sector_num; + int nb_sectors, remaining; +@@ -1664,7 +1678,7 @@ static const cmdinfo_t alloc_cmd = { + .oneline = "checks if a sector is present in the file", + }; + +-static int map_f(int argc, char **argv) ++static int map_f(BlockDriverState *bs, int argc, char **argv) + { + int64_t offset; + int64_t nb_sectors; +@@ -1700,7 +1714,7 @@ static const cmdinfo_t map_cmd = { + .oneline = "prints the allocated areas of a file", + }; + +-static int break_f(int argc, char **argv) ++static int break_f(BlockDriverState *bs, int argc, char **argv) + { + int ret; + +@@ -1722,7 +1736,7 @@ static const cmdinfo_t break_cmd = { + "request as tag", + }; + +-static int resume_f(int argc, char **argv) ++static int resume_f(BlockDriverState *bs, int argc, char **argv) + { + int ret; + +@@ -1743,7 +1757,7 @@ static const cmdinfo_t resume_cmd = { + .oneline = "resumes the request tagged as tag", + }; + +-static int wait_break_f(int argc, char **argv) ++static int wait_break_f(BlockDriverState *bs, int argc, char **argv) + { + while (!bdrv_debug_is_suspended(bs, argv[1])) { + qemu_aio_wait(); +@@ -1761,7 +1775,7 @@ static const cmdinfo_t wait_break_cmd = { + .oneline = "waits for the suspension of a request", + }; + +-static int abort_f(int argc, char **argv) ++static int abort_f(BlockDriverState *bs, int argc, char **argv) + { + abort(); + } +@@ -1773,10 +1787,10 @@ static const cmdinfo_t abort_cmd = { + .oneline = "simulate a program crash using abort(3)", + }; + +-static int close_f(int argc, char **argv) ++static int close_f(BlockDriverState *bs, int argc, char **argv) + { + bdrv_unref(bs); +- bs = NULL; ++ qemuio_bs = NULL; + return 0; + } + +@@ -1793,7 +1807,7 @@ static void sleep_cb(void *opaque) + *expired = true; + } + +-static int sleep_f(int argc, char **argv) ++static int sleep_f(BlockDriverState *bs, int argc, char **argv) + { + char *endptr; + long ms; +@@ -1831,27 +1845,27 @@ static int openfile(char *name, int flags, int growable, QDict *opts) + { + Error *local_err = NULL; + +- if (bs) { ++ if (qemuio_bs) { + fprintf(stderr, "file open already, try 'help close'\n"); + return 1; + } + + if (growable) { +- if (bdrv_file_open(&bs, name, opts, flags, &local_err)) { ++ if (bdrv_file_open(&qemuio_bs, name, opts, flags, &local_err)) { + fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, + error_get_pretty(local_err)); + error_free(local_err); + return 1; + } + } else { +- bs = bdrv_new("hda", &error_abort); ++ qemuio_bs = bdrv_new("hda", &error_abort); + +- if (bdrv_open(bs, name, opts, flags, NULL, &local_err) < 0) { ++ if (bdrv_open(qemuio_bs, name, opts, flags, NULL, &local_err) < 0) { + fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, + error_get_pretty(local_err)); + error_free(local_err); +- bdrv_unref(bs); +- bs = NULL; ++ bdrv_unref(qemuio_bs); ++ qemuio_bs = NULL; + return 1; + } + } +@@ -1877,7 +1891,7 @@ static void open_help(void) + "\n"); + } + +-static int open_f(int argc, char **argv); ++static int open_f(BlockDriverState *bs, int argc, char **argv); + + static const cmdinfo_t open_cmd = { + .name = "open", +@@ -1900,7 +1914,7 @@ static QemuOptsList empty_opts = { + }, + }; + +-static int open_f(int argc, char **argv) ++static int open_f(BlockDriverState *bs, int argc, char **argv) + { + int flags = 0; + int readonly = 0; +@@ -1948,7 +1962,7 @@ static int open_f(int argc, char **argv) + return openfile(argv[optind], flags, growable, opts); + } + +-static int init_check_command(const cmdinfo_t *ct) ++static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) + { + if (ct->flags & CMD_FLAG_GLOBAL) { + return 1; +@@ -2117,8 +2131,8 @@ int main(int argc, char **argv) + */ + bdrv_drain_all(); + +- if (bs) { +- bdrv_unref(bs); ++ if (qemuio_bs) { ++ bdrv_unref(qemuio_bs); + } + return 0; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Factor-out-qemuio_command.patch b/SOURCES/kvm-qemu-io-Factor-out-qemuio_command.patch new file mode 100644 index 0000000..8e3dfa0 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Factor-out-qemuio_command.patch @@ -0,0 +1,163 @@ +From c73b87743086200c3f9ad485dcd4e71bdee27881 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:26 +0100 +Subject: [PATCH 07/27] qemu-io: Factor out qemuio_command + +RH-Author: John Snow +Message-id: <1448300320-7772-8-git-send-email-jsnow@redhat.com> +Patchwork-id: 68438 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 07/21] qemu-io: Factor out qemuio_command +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +It's duplicated code. Move it to qemu-io-cmds.c because it's not +dependent on any static data of the qemu-io tool. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit dd5832967ac3fe96bd5bf9f199639176998ead69) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + cmd.c | 43 +++++-------------------------------------- + cmd.h | 3 ++- + qemu-io-cmds.c | 24 ++++++++++++++++++++++++ + 3 files changed, 31 insertions(+), 39 deletions(-) + +diff --git a/cmd.c b/cmd.c +index d501aab..7ae978f 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -138,28 +138,11 @@ static char *get_prompt(void); + + void command_loop(void) + { +- int c, i, done = 0, fetchable = 0, prompted = 0; ++ int i, done = 0, fetchable = 0, prompted = 0; + char *input; +- char **v; +- const cmdinfo_t *ct; + + for (i = 0; !done && i < ncmdline; i++) { +- input = strdup(cmdline[i]); +- if (!input) { +- fprintf(stderr, _("cannot strdup command '%s': %s\n"), +- cmdline[i], strerror(errno)); +- exit(1); +- } +- v = breakline(input, &c); +- if (c) { +- ct = find_command(v[0]); +- if (ct) { +- done = command(ct, c, v); +- } else { +- fprintf(stderr, _("command \"%s\" not found\n"), v[0]); +- } +- } +- doneline(input, v); ++ done = qemuio_command(cmdline[i]); + } + if (cmdline) { + g_free(cmdline); +@@ -179,20 +162,13 @@ void command_loop(void) + if (!fetchable) { + continue; + } ++ + input = fetchline(); + if (input == NULL) { + break; + } +- v = breakline(input, &c); +- if (c) { +- ct = find_command(v[0]); +- if (ct) { +- done = command(ct, c, v); +- } else { +- fprintf(stderr, _("command \"%s\" not found\n"), v[0]); +- } +- } +- doneline(input, v); ++ done = qemuio_command(input); ++ free(input); + + prompted = 0; + fetchable = 0; +@@ -328,15 +304,6 @@ char **breakline(char *input, int *count) + return rval; + } + +-void +-doneline( +- char *input, +- char **vec) +-{ +- free(input); +- free(vec); +-} +- + #define EXABYTES(x) ((long long)(x) << 60) + #define PETABYTES(x) ((long long)(x) << 50) + #define TERABYTES(x) ((long long)(x) << 40) +diff --git a/cmd.h b/cmd.h +index ccf6336..d676408 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -59,7 +59,6 @@ int command(const cmdinfo_t *ci, int argc, char **argv); + + /* from input.h */ + char **breakline(char *input, int *count); +-void doneline(char *input, char **vec); + char *fetchline(void); + + void cvtstr(double value, char *str, size_t sz); +@@ -77,4 +76,6 @@ void timestr(struct timeval *tv, char *str, size_t sz, int flags); + + extern char *progname; + ++bool qemuio_command(const char *cmd); ++ + #endif /* __COMMAND_H__ */ +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index efa6070..09e4099 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -1824,6 +1824,30 @@ static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) + return 1; + } + ++bool qemuio_command(const char *cmd) ++{ ++ char *input; ++ const cmdinfo_t *ct; ++ char **v; ++ int c; ++ bool done = false; ++ ++ input = g_strdup(cmd); ++ v = breakline(input, &c); ++ if (c) { ++ ct = find_command(v[0]); ++ if (ct) { ++ done = command(ct, c, v); ++ } else { ++ fprintf(stderr, "command \"%s\" not found\n", v[0]); ++ } ++ } ++ g_free(input); ++ g_free(v); ++ ++ return done; ++} ++ + static void __attribute((constructor)) init_qemuio_commands(void) + { + /* initialize commands */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Handle-cvtnum-errors-in-alloc.patch b/SOURCES/kvm-qemu-io-Handle-cvtnum-errors-in-alloc.patch new file mode 100644 index 0000000..f3e78e1 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Handle-cvtnum-errors-in-alloc.patch @@ -0,0 +1,56 @@ +From 862f45e0ad5a70d10bffa435d5331c444874e4d2 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:23 +0100 +Subject: [PATCH 04/27] qemu-io: Handle cvtnum() errors in 'alloc' + +RH-Author: John Snow +Message-id: <1448300320-7772-5-git-send-email-jsnow@redhat.com> +Patchwork-id: 68431 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 04/21] qemu-io: Handle cvtnum() errors in 'alloc' +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit cf49a6a00c19cabf4006d4f82bef26345043e7b5) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + qemu-io.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/qemu-io.c b/qemu-io.c +index 3b5890e..e4fa2fc 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -1608,7 +1608,10 @@ static int alloc_f(int argc, char **argv) + int ret; + + offset = cvtnum(argv[1]); +- if (offset & 0x1ff) { ++ if (offset < 0) { ++ printf("non-numeric offset argument -- %s\n", argv[1]); ++ return 0; ++ } else if (offset & 0x1ff) { + printf("offset %" PRId64 " is not sector aligned\n", + offset); + return 0; +@@ -1616,6 +1619,10 @@ static int alloc_f(int argc, char **argv) + + if (argc == 3) { + nb_sectors = cvtnum(argv[2]); ++ if (nb_sectors < 0) { ++ printf("non-numeric length argument -- %s\n", argv[2]); ++ return 0; ++ } + } else { + nb_sectors = 1; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Interface-cleanup.patch b/SOURCES/kvm-qemu-io-Interface-cleanup.patch new file mode 100644 index 0000000..68430eb --- /dev/null +++ b/SOURCES/kvm-qemu-io-Interface-cleanup.patch @@ -0,0 +1,240 @@ +From 0dfb1b6f831f5b2a1fdf5e77330db3c95db2e464 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:33 +0100 +Subject: [PATCH 14/27] qemu-io: Interface cleanup + +RH-Author: John Snow +Message-id: <1448300320-7772-15-git-send-email-jsnow@redhat.com> +Patchwork-id: 68444 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 14/21] qemu-io: Interface cleanup +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3d21994f9c511cb63220fef5abea164b83fbb997) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io-cmds.c: include block/qapi.h context + qemu-io.c include block/qapi.h context + +Signed-off-by: John Snow +--- + cmd.h | 48 ------------------------------------------------ + include/qemu-io.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + qemu-io-cmds.c | 14 +++++++------- + qemu-io.c | 7 +++---- + 4 files changed, 56 insertions(+), 59 deletions(-) + delete mode 100644 cmd.h + create mode 100644 include/qemu-io.h + +diff --git a/cmd.h b/cmd.h +deleted file mode 100644 +index 9907795..0000000 +--- a/cmd.h ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* +- * Copyright (c) 2000-2005 Silicon Graphics, Inc. +- * All Rights Reserved. +- * +- * This program is free software; you can redistribute it and/or +- * modify it under the terms of the GNU General Public License as +- * published by the Free Software Foundation. +- * +- * This program is distributed in the hope that it would be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see . +- */ +-#ifndef __COMMAND_H__ +-#define __COMMAND_H__ +- +-#include "qemu-common.h" +- +-#define CMD_FLAG_GLOBAL ((int)0x80000000) /* don't iterate "args" */ +- +-extern BlockDriverState *qemuio_bs; +- +-typedef int (*cfunc_t)(BlockDriverState *bs, int argc, char **argv); +-typedef void (*helpfunc_t)(void); +- +-typedef struct cmdinfo { +- const char *name; +- const char *altname; +- cfunc_t cfunc; +- int argmin; +- int argmax; +- int canpush; +- int flags; +- const char *args; +- const char *oneline; +- helpfunc_t help; +-} cmdinfo_t; +- +-void qemuio_add_command(const cmdinfo_t *ci); +- +-int qemuio_command_usage(const cmdinfo_t *ci); +- +-bool qemuio_command(const char *cmd); +- +-#endif /* __COMMAND_H__ */ +diff --git a/include/qemu-io.h b/include/qemu-io.h +new file mode 100644 +index 0000000..a418b46 +--- /dev/null ++++ b/include/qemu-io.h +@@ -0,0 +1,46 @@ ++/* ++ * Copyright (c) 2000-2005 Silicon Graphics, Inc. ++ * All Rights Reserved. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it would be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, see . ++ */ ++ ++#ifndef QEMU_IO_H ++#define QEMU_IO_H ++ ++#include "qemu-common.h" ++ ++#define CMD_FLAG_GLOBAL ((int)0x80000000) /* don't iterate "args" */ ++ ++typedef int (*cfunc_t)(BlockDriverState *bs, int argc, char **argv); ++typedef void (*helpfunc_t)(void); ++ ++typedef struct cmdinfo { ++ const char* name; ++ const char* altname; ++ cfunc_t cfunc; ++ int argmin; ++ int argmax; ++ int canpush; ++ int flags; ++ const char *args; ++ const char *oneline; ++ helpfunc_t help; ++} cmdinfo_t; ++ ++bool qemuio_command(BlockDriverState *bs, const char *cmd); ++ ++void qemuio_add_command(const cmdinfo_t *ci); ++int qemuio_command_usage(const cmdinfo_t *ci); ++ ++#endif /* QEMU_IO_H */ +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index 1db7fb9..1f21ce9 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -8,10 +8,9 @@ + * See the COPYING file in the top-level directory. + */ + +-#include "qemu-common.h" ++#include "qemu-io.h" + #include "block/block_int.h" + #include "block/qapi.h" +-#include "cmd.h" + + #define CMD_NOFILE_OK 0x01 + +@@ -51,11 +50,12 @@ static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) + return 1; + } + +-static int command(const cmdinfo_t *ct, int argc, char **argv) ++static int command(BlockDriverState *bs, const cmdinfo_t *ct, int argc, ++ char **argv) + { + char *cmd = argv[0]; + +- if (!init_check_command(qemuio_bs, ct)) { ++ if (!init_check_command(bs, ct)) { + return 0; + } + +@@ -76,7 +76,7 @@ static int command(const cmdinfo_t *ct, int argc, char **argv) + return 0; + } + optind = 0; +- return ct->cfunc(qemuio_bs, argc, argv); ++ return ct->cfunc(bs, argc, argv); + } + + static const cmdinfo_t *find_command(const char *cmd) +@@ -2084,7 +2084,7 @@ static const cmdinfo_t help_cmd = { + .oneline = "help for one or all commands", + }; + +-bool qemuio_command(const char *cmd) ++bool qemuio_command(BlockDriverState *bs, const char *cmd) + { + char *input; + const cmdinfo_t *ct; +@@ -2097,7 +2097,7 @@ bool qemuio_command(const char *cmd) + if (c) { + ct = find_command(v[0]); + if (ct) { +- done = command(ct, c, v); ++ done = command(bs, ct, c, v); + } else { + fprintf(stderr, "command \"%s\" not found\n", v[0]); + } +diff --git a/qemu-io.c b/qemu-io.c +index da9944e..e685808 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -14,13 +14,12 @@ + #include + #include + +-#include "qemu-common.h" ++#include "qemu-io.h" + #include "qemu/main-loop.h" + #include "qemu/option.h" + #include "qemu/config-file.h" + #include "block/block_int.h" + #include "block/qapi.h" +-#include "cmd.h" + #include "trace/control.h" + #include "qemu/timer.h" + +@@ -306,7 +305,7 @@ static void command_loop(void) + char *input; + + for (i = 0; !done && i < ncmdline; i++) { +- done = qemuio_command(cmdline[i]); ++ done = qemuio_command(qemuio_bs, cmdline[i]); + } + if (cmdline) { + g_free(cmdline); +@@ -331,7 +330,7 @@ static void command_loop(void) + if (input == NULL) { + break; + } +- done = qemuio_command(input); ++ done = qemuio_command(qemuio_bs, input); + g_free(input); + + prompted = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Let-open-pass-options-to-block-driver.patch b/SOURCES/kvm-qemu-io-Let-open-pass-options-to-block-driver.patch new file mode 100644 index 0000000..cc680e4 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Let-open-pass-options-to-block-driver.patch @@ -0,0 +1,159 @@ +From 0ba83ccbe597ebcaca69a3363d8bc2a5dd74e0c7 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 29 Dec 2013 22:06:53 +0100 +Subject: [PATCH 2/8] qemu-io: Let "open" pass options to block driver + +RH-Author: Max Reitz +Message-id: <1388354817-3013-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 56443 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/5] qemu-io: Let "open" pass options to block driver +Bugzilla: 1004347 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1004347 + +Add an option to the open command to specify runtime options for the +block driver used. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit b543c5cdcb818ffed90cfc97aa8e297214650d84) + +Signed-off-by: Max Reitz + +Conflicts: + qemu-io.c + +Conflicts because 797ac58cb2093ab9192d8998a1fef85d87cc8661 has not been +backported, which splits qemu-io-cmds.c from qemu-io.c. +--- + qemu-io.c | 39 +++++++++++++++++++++++++++++++-------- + 1 file changed, 31 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-io.c | 39 +++++++++++++++++++++++++++++++-------- + 1 files changed, 31 insertions(+), 8 deletions(-) + +diff --git a/qemu-io.c b/qemu-io.c +index 393c2c8..64b060c 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -16,6 +16,8 @@ + + #include "qemu-common.h" + #include "qemu/main-loop.h" ++#include "qemu/option.h" ++#include "qemu/config-file.h" + #include "block/block_int.h" + #include "block/qapi.h" + #include "cmd.h" +@@ -1771,7 +1773,7 @@ static const cmdinfo_t close_cmd = { + .oneline = "close the current open file", + }; + +-static int openfile(char *name, int flags, int growable) ++static int openfile(char *name, int flags, int growable, QDict *opts) + { + Error *local_err = NULL; + +@@ -1781,7 +1783,7 @@ static int openfile(char *name, int flags, int growable) + } + + if (growable) { +- if (bdrv_file_open(&bs, name, NULL, flags, &local_err)) { ++ if (bdrv_file_open(&bs, name, opts, flags, &local_err)) { + fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, + error_get_pretty(local_err)); + error_free(local_err); +@@ -1790,7 +1792,7 @@ static int openfile(char *name, int flags, int growable) + } else { + bs = bdrv_new("hda"); + +- if (bdrv_open(bs, name, NULL, flags, NULL, &local_err) < 0) { ++ if (bdrv_open(bs, name, opts, flags, NULL, &local_err) < 0) { + fprintf(stderr, "%s: can't open device %s: %s\n", progname, name, + error_get_pretty(local_err)); + error_free(local_err); +@@ -1816,7 +1818,8 @@ static void open_help(void) + " -r, -- open file read-only\n" + " -s, -- use snapshot file\n" + " -n, -- disable host cache\n" +-" -g, -- allow file to grow (only applies to protocols)" ++" -g, -- allow file to grow (only applies to protocols)\n" ++" -o, -- options to be given to the block driver" + "\n"); + } + +@@ -1829,19 +1832,30 @@ static const cmdinfo_t open_cmd = { + .argmin = 1, + .argmax = -1, + .flags = CMD_NOFILE_OK, +- .args = "[-Crsn] [path]", ++ .args = "[-Crsn] [-o options] [path]", + .oneline = "open the file specified by path", + .help = open_help, + }; + ++static QemuOptsList empty_opts = { ++ .name = "drive", ++ .head = QTAILQ_HEAD_INITIALIZER(empty_opts.head), ++ .desc = { ++ /* no elements => accept any params */ ++ { /* end of list */ } ++ }, ++}; ++ + static int open_f(int argc, char **argv) + { + int flags = 0; + int readonly = 0; + int growable = 0; + int c; ++ QemuOpts *qopts; ++ QDict *opts = NULL; + +- while ((c = getopt(argc, argv, "snrg")) != EOF) { ++ while ((c = getopt(argc, argv, "snrgo:")) != EOF) { + switch (c) { + case 's': + flags |= BDRV_O_SNAPSHOT; +@@ -1855,6 +1869,15 @@ static int open_f(int argc, char **argv) + case 'g': + growable = 1; + break; ++ case 'o': ++ qopts = qemu_opts_parse(&empty_opts, optarg, 0); ++ if (qopts == NULL) { ++ printf("could not parse option list -- %s\n", optarg); ++ return 0; ++ } ++ opts = qemu_opts_to_qdict(qopts, opts); ++ qemu_opts_del(qopts); ++ break; + default: + return command_usage(&open_cmd); + } +@@ -1868,7 +1891,7 @@ static int open_f(int argc, char **argv) + return command_usage(&open_cmd); + } + +- return openfile(argv[optind], flags, growable); ++ return openfile(argv[optind], flags, growable, opts); + } + + static int init_args_command(int index) +@@ -2039,7 +2062,7 @@ int main(int argc, char **argv) + } + + if ((argc - optind) == 1) { +- openfile(argv[optind], flags, growable); ++ openfile(argv[optind], flags, growable, NULL); + } + command_loop(); + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-io-Make-cvtnum-a-wrapper-around-strtosz_suffix.patch b/SOURCES/kvm-qemu-io-Make-cvtnum-a-wrapper-around-strtosz_suffix.patch new file mode 100644 index 0000000..2b4fbc7 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Make-cvtnum-a-wrapper-around-strtosz_suffix.patch @@ -0,0 +1,112 @@ +From 94787daf53d6eb2936704f7d9089b26cc5803699 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:22 +0100 +Subject: [PATCH 03/27] qemu-io: Make cvtnum() a wrapper around + strtosz_suffix() + +RH-Author: John Snow +Message-id: <1448300320-7772-4-git-send-email-jsnow@redhat.com> +Patchwork-id: 68432 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 03/21] qemu-io: Make cvtnum() a wrapper around strtosz_suffix() +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +No reason to implement the same thing multiple times. A nice side effect +is that fractional numbers like 0.5M can be used in qemu-io now. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b6e356aa25c81d928e1c463292048d29cf25f04e) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + cmd.c | 37 ------------------------------------- + cmd.h | 1 - + qemu-io.c | 6 ++++++ + 3 files changed, 6 insertions(+), 38 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 4e7579b..214c6f7 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -344,43 +344,6 @@ doneline( + #define MEGABYTES(x) ((long long)(x) << 20) + #define KILOBYTES(x) ((long long)(x) << 10) + +-long long +-cvtnum( +- char *s) +-{ +- long long i; +- char *sp; +- int c; +- +- i = strtoll(s, &sp, 0); +- if (i == 0 && sp == s) +- return -1LL; +- if (*sp == '\0') +- return i; +- +- if (sp[1] != '\0') +- return -1LL; +- +- c = qemu_tolower(*sp); +- switch (c) { +- default: +- return i; +- case 'k': +- return KILOBYTES(i); +- case 'm': +- return MEGABYTES(i); +- case 'g': +- return GIGABYTES(i); +- case 't': +- return TERABYTES(i); +- case 'p': +- return PETABYTES(i); +- case 'e': +- return EXABYTES(i); +- } +- return -1LL; +-} +- + #define TO_EXABYTES(x) ((x) / EXABYTES(1)) + #define TO_PETABYTES(x) ((x) / PETABYTES(1)) + #define TO_TERABYTES(x) ((x) / TERABYTES(1)) +diff --git a/cmd.h b/cmd.h +index 8e6f753..4dcfe88 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -58,7 +58,6 @@ char **breakline(char *input, int *count); + void doneline(char *input, char **vec); + char *fetchline(void); + +-long long cvtnum(char *s); + void cvtstr(double value, char *str, size_t sz); + + struct timeval tsub(struct timeval t1, struct timeval t2); +diff --git a/qemu-io.c b/qemu-io.c +index 9f66a78..3b5890e 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -33,6 +33,12 @@ static BlockDriverState *bs; + + static int misalign; + ++static int64_t cvtnum(const char *s) ++{ ++ char *end; ++ return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); ++} ++ + /* + * Parse the pattern argument to various sub-commands. + * +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Move-command_loop-and-friends.patch b/SOURCES/kvm-qemu-io-Move-command_loop-and-friends.patch new file mode 100644 index 0000000..2ba730c --- /dev/null +++ b/SOURCES/kvm-qemu-io-Move-command_loop-and-friends.patch @@ -0,0 +1,369 @@ +From 828d09abacc6ae7f0643957301cc3ddee269d7a0 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:31 +0100 +Subject: [PATCH 12/27] qemu-io: Move command_loop() and friends + +RH-Author: John Snow +Message-id: <1448300320-7772-13-git-send-email-jsnow@redhat.com> +Patchwork-id: 68441 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 12/21] qemu-io: Move command_loop() and friends +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d1174f13e78e2f43f7ae33d59b62b0b94468c8db) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + cmd.c | 139 -------------------------------------------------------------- + cmd.h | 9 ---- + qemu-io.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 139 insertions(+), 148 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 6616d61..26d38a8 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -31,145 +31,6 @@ + + /* from libxcmd/command.c */ + +-static int ncmdline; +-static char **cmdline; +- +- +-void add_user_command(char *optarg) +-{ +- cmdline = g_realloc(cmdline, ++ncmdline * sizeof(char *)); +- cmdline[ncmdline-1] = optarg; +-} +- +-static void prep_fetchline(void *opaque) +-{ +- int *fetchable = opaque; +- +- qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); +- *fetchable= 1; +-} +- +-static char *get_prompt(void); +- +-void command_loop(void) +-{ +- int i, done = 0, fetchable = 0, prompted = 0; +- char *input; +- +- for (i = 0; !done && i < ncmdline; i++) { +- done = qemuio_command(cmdline[i]); +- } +- if (cmdline) { +- g_free(cmdline); +- return; +- } +- +- while (!done) { +- if (!prompted) { +- printf("%s", get_prompt()); +- fflush(stdout); +- qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable); +- prompted = 1; +- } +- +- main_loop_wait(false); +- +- if (!fetchable) { +- continue; +- } +- +- input = fetchline(); +- if (input == NULL) { +- break; +- } +- done = qemuio_command(input); +- free(input); +- +- prompted = 0; +- fetchable = 0; +- } +- qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); +-} +- +-/* from libxcmd/input.c */ +- +-#if defined(ENABLE_READLINE) +-# include +-# include +-#elif defined(ENABLE_EDITLINE) +-# include +-#endif +- +-static char * +-get_prompt(void) +-{ +- static char prompt[FILENAME_MAX + 2 /*"> "*/ + 1 /*"\0"*/ ]; +- +- if (!prompt[0]) +- snprintf(prompt, sizeof(prompt), "%s> ", progname); +- return prompt; +-} +- +-#if defined(ENABLE_READLINE) +-char * +-fetchline(void) +-{ +- char *line; +- +- line = readline(get_prompt()); +- if (line && *line) +- add_history(line); +- return line; +-} +-#elif defined(ENABLE_EDITLINE) +-static char *el_get_prompt(EditLine *e) { return get_prompt(); } +-char * +-fetchline(void) +-{ +- static EditLine *el; +- static History *hist; +- HistEvent hevent; +- char *line; +- int count; +- +- if (!el) { +- hist = history_init(); +- history(hist, &hevent, H_SETSIZE, 100); +- el = el_init(progname, stdin, stdout, stderr); +- el_source(el, NULL); +- el_set(el, EL_SIGNAL, 1); +- el_set(el, EL_PROMPT, el_get_prompt); +- el_set(el, EL_HIST, history, (const char *)hist); +- } +- line = strdup(el_gets(el, &count)); +- if (line) { +- if (count > 0) +- line[count-1] = '\0'; +- if (*line) +- history(hist, &hevent, H_ENTER, line); +- } +- return line; +-} +-#else +-# define MAXREADLINESZ 1024 +-char * +-fetchline(void) +-{ +- char *p, *line = malloc(MAXREADLINESZ); +- +- if (!line) +- return NULL; +- if (!fgets(line, MAXREADLINESZ, stdin)) { +- free(line); +- return NULL; +- } +- p = line + strlen(line); +- if (p != line && p[-1] == '\n') +- p[-1] = '\0'; +- return line; +-} +-#endif +- + #define EXABYTES(x) ((long long)(x) << 60) + #define PETABYTES(x) ((long long)(x) << 50) + #define TERABYTES(x) ((long long)(x) << 40) +diff --git a/cmd.h b/cmd.h +index 0d01a33..da0c7cf 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -39,18 +39,11 @@ typedef struct cmdinfo { + helpfunc_t help; + } cmdinfo_t; + +-typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); +- + void qemuio_add_command(const cmdinfo_t *ci); +-void add_user_command(char *optarg); +-void add_check_command(checkfunc_t cf); + +-void command_loop(void); + int qemuio_command_usage(const cmdinfo_t *ci); + + /* from input.h */ +-char *fetchline(void); +- + void cvtstr(double value, char *str, size_t sz); + + struct timeval tsub(struct timeval t1, struct timeval t2); +@@ -64,8 +57,6 @@ enum { + + void timestr(struct timeval *tv, char *str, size_t sz, int flags); + +-extern char *progname; +- + bool qemuio_command(const char *cmd); + + #endif /* __COMMAND_H__ */ +diff --git a/qemu-io.c b/qemu-io.c +index 97af39e..da9944e 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -34,6 +34,10 @@ BlockDriverState *qemuio_bs; + + extern int qemuio_misalign; + ++/* qemu-io commands passed using -c */ ++static int ncmdline; ++static char **cmdline; ++ + static int close_f(BlockDriverState *bs, int argc, char **argv) + { + bdrv_unref(bs); +@@ -207,6 +211,141 @@ static void usage(const char *name) + } + + ++#if defined(ENABLE_READLINE) ++# include ++# include ++#elif defined(ENABLE_EDITLINE) ++# include ++#endif ++ ++static char *get_prompt(void) ++{ ++ static char prompt[FILENAME_MAX + 2 /*"> "*/ + 1 /*"\0"*/ ]; ++ ++ if (!prompt[0]) { ++ snprintf(prompt, sizeof(prompt), "%s> ", progname); ++ } ++ ++ return prompt; ++} ++ ++#if defined(ENABLE_READLINE) ++static char *fetchline(void) ++{ ++ char *line = readline(get_prompt()); ++ if (line && *line) { ++ add_history(line); ++ } ++ return line; ++} ++#elif defined(ENABLE_EDITLINE) ++static char *el_get_prompt(EditLine *e) ++{ ++ return get_prompt(); ++} ++ ++static char *fetchline(void) ++{ ++ static EditLine *el; ++ static History *hist; ++ HistEvent hevent; ++ char *line; ++ int count; ++ ++ if (!el) { ++ hist = history_init(); ++ history(hist, &hevent, H_SETSIZE, 100); ++ el = el_init(progname, stdin, stdout, stderr); ++ el_source(el, NULL); ++ el_set(el, EL_SIGNAL, 1); ++ el_set(el, EL_PROMPT, el_get_prompt); ++ el_set(el, EL_HIST, history, (const char *)hist); ++ } ++ line = strdup(el_gets(el, &count)); ++ if (line) { ++ if (count > 0) { ++ line[count-1] = '\0'; ++ } ++ if (*line) { ++ history(hist, &hevent, H_ENTER, line); ++ } ++ } ++ return line; ++} ++#else ++# define MAXREADLINESZ 1024 ++static char *fetchline(void) ++{ ++ char *p, *line = g_malloc(MAXREADLINESZ); ++ ++ if (!fgets(line, MAXREADLINESZ, stdin)) { ++ g_free(line); ++ return NULL; ++ } ++ ++ p = line + strlen(line); ++ if (p != line && p[-1] == '\n') { ++ p[-1] = '\0'; ++ } ++ ++ return line; ++} ++#endif ++ ++static void prep_fetchline(void *opaque) ++{ ++ int *fetchable = opaque; ++ ++ qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); ++ *fetchable= 1; ++} ++ ++static void command_loop(void) ++{ ++ int i, done = 0, fetchable = 0, prompted = 0; ++ char *input; ++ ++ for (i = 0; !done && i < ncmdline; i++) { ++ done = qemuio_command(cmdline[i]); ++ } ++ if (cmdline) { ++ g_free(cmdline); ++ return; ++ } ++ ++ while (!done) { ++ if (!prompted) { ++ printf("%s", get_prompt()); ++ fflush(stdout); ++ qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable); ++ prompted = 1; ++ } ++ ++ main_loop_wait(false); ++ ++ if (!fetchable) { ++ continue; ++ } ++ ++ input = fetchline(); ++ if (input == NULL) { ++ break; ++ } ++ done = qemuio_command(input); ++ g_free(input); ++ ++ prompted = 0; ++ fetchable = 0; ++ } ++ qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); ++} ++ ++static void add_user_command(char *optarg) ++{ ++ cmdline = g_realloc(cmdline, ++ncmdline * sizeof(char *)); ++ cmdline[ncmdline-1] = optarg; ++} ++ + int main(int argc, char **argv) + { + int readonly = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Move-functions-for-registering-and-running-c.patch b/SOURCES/kvm-qemu-io-Move-functions-for-registering-and-running-c.patch new file mode 100644 index 0000000..0284767 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Move-functions-for-registering-and-running-c.patch @@ -0,0 +1,551 @@ +From df682d833654f2f42595d6156341439644a8848d Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:30 +0100 +Subject: [PATCH 11/27] qemu-io: Move functions for registering and running + commands + +RH-Author: John Snow +Message-id: <1448300320-7772-12-git-send-email-jsnow@redhat.com> +Patchwork-id: 68439 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 11/21] qemu-io: Move functions for registering and running commands +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c2cdf5c5892165cbe7d3567bff5930521bc52669) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io-cmds.c: Conflicts over sleep_f, again. + +Signed-off-by: John Snow +--- + cmd.c | 113 --------------------------------- + cmd.h | 11 +--- + qemu-io-cmds.c | 194 +++++++++++++++++++++++++++++++++++++++++---------------- + qemu-io.c | 10 +-- + 4 files changed, 149 insertions(+), 179 deletions(-) + +diff --git a/cmd.c b/cmd.c +index f6bf2c5..6616d61 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -31,94 +31,9 @@ + + /* from libxcmd/command.c */ + +-cmdinfo_t *cmdtab; +-int ncmds; +- +-static checkfunc_t check_func; + static int ncmdline; + static char **cmdline; + +-static int +-compare(const void *a, const void *b) +-{ +- return strcmp(((const cmdinfo_t *)a)->name, +- ((const cmdinfo_t *)b)->name); +-} +- +-void add_command(const cmdinfo_t *ci) +-{ +- cmdtab = g_realloc((void *)cmdtab, ++ncmds * sizeof(*cmdtab)); +- cmdtab[ncmds - 1] = *ci; +- qsort(cmdtab, ncmds, sizeof(*cmdtab), compare); +-} +- +-static int +-check_command( +- const cmdinfo_t *ci) +-{ +- if (check_func) +- return check_func(qemuio_bs, ci); +- return 1; +-} +- +-void +-add_check_command( +- checkfunc_t cf) +-{ +- check_func = cf; +-} +- +-int +-command_usage( +- const cmdinfo_t *ci) +-{ +- printf("%s %s -- %s\n", ci->name, ci->args, ci->oneline); +- return 0; +-} +- +-int +-command( +- const cmdinfo_t *ct, +- int argc, +- char **argv) +-{ +- char *cmd = argv[0]; +- +- if (!check_command(ct)) +- return 0; +- +- if (argc-1 < ct->argmin || (ct->argmax != -1 && argc-1 > ct->argmax)) { +- if (ct->argmax == -1) +- fprintf(stderr, +- _("bad argument count %d to %s, expected at least %d arguments\n"), +- argc-1, cmd, ct->argmin); +- else if (ct->argmin == ct->argmax) +- fprintf(stderr, +- _("bad argument count %d to %s, expected %d arguments\n"), +- argc-1, cmd, ct->argmin); +- else +- fprintf(stderr, +- _("bad argument count %d to %s, expected between %d and %d arguments\n"), +- argc-1, cmd, ct->argmin, ct->argmax); +- return 0; +- } +- optind = 0; +- return ct->cfunc(qemuio_bs, argc, argv); +-} +- +-const cmdinfo_t * +-find_command( +- const char *cmd) +-{ +- cmdinfo_t *ct; +- +- for (ct = cmdtab; ct < &cmdtab[ncmds]; ct++) { +- if (strcmp(ct->name, cmd) == 0 || +- (ct->altname && strcmp(ct->altname, cmd) == 0)) +- return (const cmdinfo_t *)ct; +- } +- return NULL; +-} + + void add_user_command(char *optarg) + { +@@ -255,34 +170,6 @@ fetchline(void) + } + #endif + +-char **breakline(char *input, int *count) +-{ +- int c = 0; +- char *p; +- char **rval = calloc(sizeof(char *), 1); +- char **tmp; +- +- while (rval && (p = qemu_strsep(&input, " ")) != NULL) { +- if (!*p) { +- continue; +- } +- c++; +- tmp = realloc(rval, sizeof(*rval) * (c + 1)); +- if (!tmp) { +- free(rval); +- rval = NULL; +- c = 0; +- break; +- } else { +- rval = tmp; +- } +- rval[c - 1] = p; +- rval[c] = NULL; +- } +- *count = c; +- return rval; +-} +- + #define EXABYTES(x) ((long long)(x) << 60) + #define PETABYTES(x) ((long long)(x) << 50) + #define TERABYTES(x) ((long long)(x) << 40) +diff --git a/cmd.h b/cmd.h +index 5b6f61b..0d01a33 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -39,23 +39,16 @@ typedef struct cmdinfo { + helpfunc_t help; + } cmdinfo_t; + +-extern cmdinfo_t *cmdtab; +-extern int ncmds; +- + typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); + +-void add_command(const cmdinfo_t *ci); ++void qemuio_add_command(const cmdinfo_t *ci); + void add_user_command(char *optarg); + void add_check_command(checkfunc_t cf); + +-const cmdinfo_t *find_command(const char *cmd); +- + void command_loop(void); +-int command_usage(const cmdinfo_t *ci); +-int command(const cmdinfo_t *ci, int argc, char **argv); ++int qemuio_command_usage(const cmdinfo_t *ci); + + /* from input.h */ +-char **breakline(char *input, int *count); + char *fetchline(void); + + void cvtstr(double value, char *str, size_t sz); +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index a8e891a..27a903f 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -17,6 +17,110 @@ + + int qemuio_misalign; + ++static cmdinfo_t *cmdtab; ++static int ncmds; ++ ++static int compare_cmdname(const void *a, const void *b) ++{ ++ return strcmp(((const cmdinfo_t *)a)->name, ++ ((const cmdinfo_t *)b)->name); ++} ++ ++void qemuio_add_command(const cmdinfo_t *ci) ++{ ++ cmdtab = g_realloc(cmdtab, ++ncmds * sizeof(*cmdtab)); ++ cmdtab[ncmds - 1] = *ci; ++ qsort(cmdtab, ncmds, sizeof(*cmdtab), compare_cmdname); ++} ++ ++int qemuio_command_usage(const cmdinfo_t *ci) ++{ ++ printf("%s %s -- %s\n", ci->name, ci->args, ci->oneline); ++ return 0; ++} ++ ++static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) ++{ ++ if (ct->flags & CMD_FLAG_GLOBAL) { ++ return 1; ++ } ++ if (!(ct->flags & CMD_NOFILE_OK) && !bs) { ++ fprintf(stderr, "no file open, try 'help open'\n"); ++ return 0; ++ } ++ return 1; ++} ++ ++static int command(const cmdinfo_t *ct, int argc, char **argv) ++{ ++ char *cmd = argv[0]; ++ ++ if (!init_check_command(qemuio_bs, ct)) { ++ return 0; ++ } ++ ++ if (argc - 1 < ct->argmin || (ct->argmax != -1 && argc - 1 > ct->argmax)) { ++ if (ct->argmax == -1) { ++ fprintf(stderr, ++ "bad argument count %d to %s, expected at least %d arguments\n", ++ argc-1, cmd, ct->argmin); ++ } else if (ct->argmin == ct->argmax) { ++ fprintf(stderr, ++ "bad argument count %d to %s, expected %d arguments\n", ++ argc-1, cmd, ct->argmin); ++ } else { ++ fprintf(stderr, ++ "bad argument count %d to %s, expected between %d and %d arguments\n", ++ argc-1, cmd, ct->argmin, ct->argmax); ++ } ++ return 0; ++ } ++ optind = 0; ++ return ct->cfunc(qemuio_bs, argc, argv); ++} ++ ++static const cmdinfo_t *find_command(const char *cmd) ++{ ++ cmdinfo_t *ct; ++ ++ for (ct = cmdtab; ct < &cmdtab[ncmds]; ct++) { ++ if (strcmp(ct->name, cmd) == 0 || ++ (ct->altname && strcmp(ct->altname, cmd) == 0)) ++ { ++ return (const cmdinfo_t *)ct; ++ } ++ } ++ return NULL; ++} ++ ++static char **breakline(char *input, int *count) ++{ ++ int c = 0; ++ char *p; ++ char **rval = g_malloc0(sizeof(char *)); ++ char **tmp; ++ ++ while (rval && (p = qemu_strsep(&input, " ")) != NULL) { ++ if (!*p) { ++ continue; ++ } ++ c++; ++ tmp = g_realloc(rval, sizeof(*rval) * (c + 1)); ++ if (!tmp) { ++ g_free(rval); ++ rval = NULL; ++ c = 0; ++ break; ++ } else { ++ rval = tmp; ++ } ++ rval[c - 1] = p; ++ rval[c] = NULL; ++ } ++ *count = c; ++ return rval; ++} ++ + static int64_t cvtnum(const char *s) + { + char *end; +@@ -468,12 +572,12 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + vflag = 1; + break; + default: +- return command_usage(&read_cmd); ++ return qemuio_command_usage(&read_cmd); + } + } + + if (optind != argc - 2) { +- return command_usage(&read_cmd); ++ return qemuio_command_usage(&read_cmd); + } + + if (bflag && pflag) { +@@ -495,7 +599,7 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + } + + if (!Pflag && (lflag || sflag)) { +- return command_usage(&read_cmd); ++ return qemuio_command_usage(&read_cmd); + } + + if (!lflag) { +@@ -630,12 +734,12 @@ static int readv_f(BlockDriverState *bs, int argc, char **argv) + vflag = 1; + break; + default: +- return command_usage(&readv_cmd); ++ return qemuio_command_usage(&readv_cmd); + } + } + + if (optind > argc - 2) { +- return command_usage(&readv_cmd); ++ return qemuio_command_usage(&readv_cmd); + } + + +@@ -770,12 +874,12 @@ static int write_f(BlockDriverState *bs, int argc, char **argv) + zflag = 1; + break; + default: +- return command_usage(&write_cmd); ++ return qemuio_command_usage(&write_cmd); + } + } + + if (optind != argc - 2) { +- return command_usage(&write_cmd); ++ return qemuio_command_usage(&write_cmd); + } + + if (bflag + pflag + zflag > 1) { +@@ -912,12 +1016,12 @@ static int writev_f(BlockDriverState *bs, int argc, char **argv) + } + break; + default: +- return command_usage(&writev_cmd); ++ return qemuio_command_usage(&writev_cmd); + } + } + + if (optind > argc - 2) { +- return command_usage(&writev_cmd); ++ return qemuio_command_usage(&writev_cmd); + } + + offset = cvtnum(argv[optind]); +@@ -1024,12 +1128,12 @@ static int multiwrite_f(BlockDriverState *bs, int argc, char **argv) + } + break; + default: +- return command_usage(&writev_cmd); ++ return qemuio_command_usage(&writev_cmd); + } + } + + if (optind > argc - 2) { +- return command_usage(&writev_cmd); ++ return qemuio_command_usage(&writev_cmd); + } + + nr_reqs = 1; +@@ -1258,13 +1362,13 @@ static int aio_read_f(BlockDriverState *bs, int argc, char **argv) + break; + default: + g_free(ctx); +- return command_usage(&aio_read_cmd); ++ return qemuio_command_usage(&aio_read_cmd); + } + } + + if (optind > argc - 2) { + g_free(ctx); +- return command_usage(&aio_read_cmd); ++ return qemuio_command_usage(&aio_read_cmd); + } + + ctx->offset = cvtnum(argv[optind]); +@@ -1350,13 +1454,13 @@ static int aio_write_f(BlockDriverState *bs, int argc, char **argv) + break; + default: + g_free(ctx); +- return command_usage(&aio_write_cmd); ++ return qemuio_command_usage(&aio_write_cmd); + } + } + + if (optind > argc - 2) { + g_free(ctx); +- return command_usage(&aio_write_cmd); ++ return qemuio_command_usage(&aio_write_cmd); + } + + ctx->offset = cvtnum(argv[optind]); +@@ -1556,12 +1660,12 @@ static int discard_f(BlockDriverState *bs, int argc, char **argv) + qflag = 1; + break; + default: +- return command_usage(&discard_cmd); ++ return qemuio_command_usage(&discard_cmd); + } + } + + if (optind != argc - 2) { +- return command_usage(&discard_cmd); ++ return qemuio_command_usage(&discard_cmd); + } + + offset = cvtnum(argv[optind]); +@@ -1876,18 +1980,6 @@ static const cmdinfo_t help_cmd = { + .oneline = "help for one or all commands", + }; + +-static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) +-{ +- if (ct->flags & CMD_FLAG_GLOBAL) { +- return 1; +- } +- if (!(ct->flags & CMD_NOFILE_OK) && !bs) { +- fprintf(stderr, "no file open, try 'help open'\n"); +- return 0; +- } +- return 1; +-} +- + bool qemuio_command(const char *cmd) + { + char *input; +@@ -1915,27 +2007,25 @@ bool qemuio_command(const char *cmd) + static void __attribute((constructor)) init_qemuio_commands(void) + { + /* initialize commands */ +- add_command(&help_cmd); +- add_command(&read_cmd); +- add_command(&readv_cmd); +- add_command(&write_cmd); +- add_command(&writev_cmd); +- add_command(&multiwrite_cmd); +- add_command(&aio_read_cmd); +- add_command(&aio_write_cmd); +- add_command(&aio_flush_cmd); +- add_command(&flush_cmd); +- add_command(&truncate_cmd); +- add_command(&length_cmd); +- add_command(&info_cmd); +- add_command(&discard_cmd); +- add_command(&alloc_cmd); +- add_command(&map_cmd); +- add_command(&break_cmd); +- add_command(&resume_cmd); +- add_command(&wait_break_cmd); +- add_command(&abort_cmd); +- add_command(&sleep_cmd); +- +- add_check_command(init_check_command); ++ qemuio_add_command(&help_cmd); ++ qemuio_add_command(&read_cmd); ++ qemuio_add_command(&readv_cmd); ++ qemuio_add_command(&write_cmd); ++ qemuio_add_command(&writev_cmd); ++ qemuio_add_command(&multiwrite_cmd); ++ qemuio_add_command(&aio_read_cmd); ++ qemuio_add_command(&aio_write_cmd); ++ qemuio_add_command(&aio_flush_cmd); ++ qemuio_add_command(&flush_cmd); ++ qemuio_add_command(&truncate_cmd); ++ qemuio_add_command(&length_cmd); ++ qemuio_add_command(&info_cmd); ++ qemuio_add_command(&discard_cmd); ++ qemuio_add_command(&alloc_cmd); ++ qemuio_add_command(&map_cmd); ++ qemuio_add_command(&break_cmd); ++ qemuio_add_command(&resume_cmd); ++ qemuio_add_command(&wait_break_cmd); ++ qemuio_add_command(&abort_cmd); ++ qemuio_add_command(&sleep_cmd); + } +diff --git a/qemu-io.c b/qemu-io.c +index b86bfbf..97af39e 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -155,7 +155,7 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) + qemu_opts_del(qopts); + break; + default: +- return command_usage(&open_cmd); ++ return qemuio_command_usage(&open_cmd); + } + } + +@@ -164,7 +164,7 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) + } + + if (optind != argc - 1) { +- return command_usage(&open_cmd); ++ return qemuio_command_usage(&open_cmd); + } + + return openfile(argv[optind], flags, growable, opts); +@@ -300,9 +300,9 @@ int main(int argc, char **argv) + bdrv_init(); + + /* initialize commands */ +- add_command(&quit_cmd); +- add_command(&open_cmd); +- add_command(&close_cmd); ++ qemuio_add_command(&quit_cmd); ++ qemuio_add_command(&open_cmd); ++ qemuio_add_command(&close_cmd); + + /* open the device */ + if (!readonly) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Move-help-function.patch b/SOURCES/kvm-qemu-io-Move-help-function.patch new file mode 100644 index 0000000..42daa19 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Move-help-function.patch @@ -0,0 +1,223 @@ +From 8d6f59c923b536461df1aea18045535b090984fb Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:27 +0100 +Subject: [PATCH 08/27] qemu-io: Move 'help' function + +RH-Author: John Snow +Message-id: <1448300320-7772-9-git-send-email-jsnow@redhat.com> +Patchwork-id: 68435 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 08/21] qemu-io: Move 'help' function +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +No reason to treat it different from other commands. Move it to +qemu-io-cmds.c, adapt the coding style and register it like any other +command. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f18a834a92f0b490cefeb71410f3f25b969d336f) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io-cmds: patch context (from sleep_f) + +Signed-off-by: John Snow +--- + cmd.c | 79 ---------------------------------------------------------- + cmd.h | 1 - + qemu-io-cmds.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++- + 3 files changed, 65 insertions(+), 81 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 7ae978f..2941ad3 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -439,82 +439,3 @@ quit_init(void) + + add_command(&quit_cmd); + } +- +-/* from libxcmd/help.c */ +- +-static cmdinfo_t help_cmd; +-static void help_onecmd(const char *cmd, const cmdinfo_t *ct); +-static void help_oneline(const char *cmd, const cmdinfo_t *ct); +- +-static void +-help_all(void) +-{ +- const cmdinfo_t *ct; +- +- for (ct = cmdtab; ct < &cmdtab[ncmds]; ct++) +- help_oneline(ct->name, ct); +- printf(_("\nUse 'help commandname' for extended help.\n")); +-} +- +-static int +-help_f( +- BlockDriverState *bs, +- int argc, +- char **argv) +-{ +- const cmdinfo_t *ct; +- +- if (argc == 1) { +- help_all(); +- return 0; +- } +- ct = find_command(argv[1]); +- if (ct == NULL) { +- printf(_("command %s not found\n"), argv[1]); +- return 0; +- } +- help_onecmd(argv[1], ct); +- return 0; +-} +- +-static void +-help_onecmd( +- const char *cmd, +- const cmdinfo_t *ct) +-{ +- help_oneline(cmd, ct); +- if (ct->help) +- ct->help(); +-} +- +-static void +-help_oneline( +- const char *cmd, +- const cmdinfo_t *ct) +-{ +- if (cmd) +- printf("%s ", cmd); +- else { +- printf("%s ", ct->name); +- if (ct->altname) +- printf("(or %s) ", ct->altname); +- } +- if (ct->args) +- printf("%s ", ct->args); +- printf("-- %s\n", ct->oneline); +-} +- +-void +-help_init(void) +-{ +- help_cmd.name = _("help"); +- help_cmd.altname = _("?"); +- help_cmd.cfunc = help_f; +- help_cmd.argmin = 0; +- help_cmd.argmax = 1; +- help_cmd.flags = CMD_FLAG_GLOBAL; +- help_cmd.args = _("[command]"); +- help_cmd.oneline = _("help for one or all commands"); +- +- add_command(&help_cmd); +-} +diff --git a/cmd.h b/cmd.h +index d676408..89e7c6e 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -42,7 +42,6 @@ typedef struct cmdinfo { + extern cmdinfo_t *cmdtab; + extern int ncmds; + +-void help_init(void); + void quit_init(void); + + typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index 09e4099..a8e891a 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -1811,6 +1811,70 @@ static const cmdinfo_t sleep_cmd = { + .oneline = "waits for the given value in milliseconds", + }; + ++static void help_oneline(const char *cmd, const cmdinfo_t *ct) ++{ ++ if (cmd) { ++ printf("%s ", cmd); ++ } else { ++ printf("%s ", ct->name); ++ if (ct->altname) { ++ printf("(or %s) ", ct->altname); ++ } ++ } ++ ++ if (ct->args) { ++ printf("%s ", ct->args); ++ } ++ printf("-- %s\n", ct->oneline); ++} ++ ++static void help_onecmd(const char *cmd, const cmdinfo_t *ct) ++{ ++ help_oneline(cmd, ct); ++ if (ct->help) { ++ ct->help(); ++ } ++} ++ ++static void help_all(void) ++{ ++ const cmdinfo_t *ct; ++ ++ for (ct = cmdtab; ct < &cmdtab[ncmds]; ct++) { ++ help_oneline(ct->name, ct); ++ } ++ printf("\nUse 'help commandname' for extended help.\n"); ++} ++ ++static int help_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ const cmdinfo_t *ct; ++ ++ if (argc == 1) { ++ help_all(); ++ return 0; ++ } ++ ++ ct = find_command(argv[1]); ++ if (ct == NULL) { ++ printf("command %s not found\n", argv[1]); ++ return 0; ++ } ++ ++ help_onecmd(argv[1], ct); ++ return 0; ++} ++ ++static const cmdinfo_t help_cmd = { ++ .name = "help", ++ .altname = "?", ++ .cfunc = help_f, ++ .argmin = 0, ++ .argmax = 1, ++ .flags = CMD_FLAG_GLOBAL, ++ .args = "[command]", ++ .oneline = "help for one or all commands", ++}; + + static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) + { +@@ -1851,7 +1915,7 @@ bool qemuio_command(const char *cmd) + static void __attribute((constructor)) init_qemuio_commands(void) + { + /* initialize commands */ +- help_init(); ++ add_command(&help_cmd); + add_command(&read_cmd); + add_command(&readv_cmd); + add_command(&write_cmd); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Move-qemu_strsep-to-cutils.c.patch b/SOURCES/kvm-qemu-io-Move-qemu_strsep-to-cutils.c.patch new file mode 100644 index 0000000..743967c --- /dev/null +++ b/SOURCES/kvm-qemu-io-Move-qemu_strsep-to-cutils.c.patch @@ -0,0 +1,107 @@ +From 4ab2a72fcfc65bd78cf60e6e5a29e2189fddf877 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:29 +0100 +Subject: [PATCH 10/27] qemu-io: Move qemu_strsep() to cutils.c + +RH-Author: John Snow +Message-id: <1448300320-7772-11-git-send-email-jsnow@redhat.com> +Patchwork-id: 68440 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 10/21] qemu-io: Move qemu_strsep() to cutils.c +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a38ed811474e953371f848233208c2026c2d1195) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + cmd.c | 21 --------------------- + include/qemu-common.h | 1 + + util/cutils.c | 21 +++++++++++++++++++++ + 3 files changed, 22 insertions(+), 21 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 8496e74..f6bf2c5 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -255,27 +255,6 @@ fetchline(void) + } + #endif + +-static char *qemu_strsep(char **input, const char *delim) +-{ +- char *result = *input; +- if (result != NULL) { +- char *p; +- +- for (p = result; *p != '\0'; p++) { +- if (strchr(delim, *p)) { +- break; +- } +- } +- if (*p == '\0') { +- *input = NULL; +- } else { +- *p = '\0'; +- *input = p + 1; +- } +- } +- return result; +-} +- + char **breakline(char *input, int *count) + { + int c = 0; +diff --git a/include/qemu-common.h b/include/qemu-common.h +index 67f57c9..8c1132c 100644 +--- a/include/qemu-common.h ++++ b/include/qemu-common.h +@@ -161,6 +161,7 @@ char *pstrcat(char *buf, int buf_size, const char *s); + int strstart(const char *str, const char *val, const char **ptr); + int stristart(const char *str, const char *val, const char **ptr); + int qemu_strnlen(const char *s, int max_len); ++char *qemu_strsep(char **input, const char *delim); + time_t mktimegm(struct tm *tm); + int qemu_fls(int i); + int qemu_fdatasync(int fd); +diff --git a/util/cutils.c b/util/cutils.c +index 8f28896..0116fcd 100644 +--- a/util/cutils.c ++++ b/util/cutils.c +@@ -107,6 +107,27 @@ int qemu_strnlen(const char *s, int max_len) + return i; + } + ++char *qemu_strsep(char **input, const char *delim) ++{ ++ char *result = *input; ++ if (result != NULL) { ++ char *p; ++ ++ for (p = result; *p != '\0'; p++) { ++ if (strchr(delim, *p)) { ++ break; ++ } ++ } ++ if (*p == '\0') { ++ *input = NULL; ++ } else { ++ *p = '\0'; ++ *input = p + 1; ++ } ++ } ++ return result; ++} ++ + time_t mktimegm(struct tm *tm) + { + time_t t; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Move-quit-function.patch b/SOURCES/kvm-qemu-io-Move-quit-function.patch new file mode 100644 index 0000000..e6442be --- /dev/null +++ b/SOURCES/kvm-qemu-io-Move-quit-function.patch @@ -0,0 +1,119 @@ +From 6ea43a1599b4abdfe480d6e963dbbafa9339601a Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:28 +0100 +Subject: [PATCH 09/27] qemu-io: Move 'quit' function + +RH-Author: John Snow +Message-id: <1448300320-7772-10-git-send-email-jsnow@redhat.com> +Patchwork-id: 68436 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 09/21] qemu-io: Move 'quit' function +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +This one only makes sense in the context of the qemu-io tool, so move it +to qemu-io.c. Adapt coding style and register it like other commands. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e681be7eca0143fe7259ce8233fe5dd8898d072f) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + cmd.c | 29 ----------------------------- + cmd.h | 2 -- + qemu-io.c | 17 ++++++++++++++++- + 3 files changed, 16 insertions(+), 32 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 2941ad3..8496e74 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -410,32 +410,3 @@ timestr( + snprintf(ts, size, "0.%04u sec", (unsigned int) (usec * 10000)); + } + } +- +- +-/* from libxcmd/quit.c */ +- +-static cmdinfo_t quit_cmd; +- +-/* ARGSUSED */ +-static int +-quit_f( +- BlockDriverState *bs, +- int argc, +- char **argv) +-{ +- return 1; +-} +- +-void +-quit_init(void) +-{ +- quit_cmd.name = _("quit"); +- quit_cmd.altname = _("q"); +- quit_cmd.cfunc = quit_f; +- quit_cmd.argmin = -1; +- quit_cmd.argmax = -1; +- quit_cmd.flags = CMD_FLAG_GLOBAL; +- quit_cmd.oneline = _("exit the program"); +- +- add_command(&quit_cmd); +-} +diff --git a/cmd.h b/cmd.h +index 89e7c6e..5b6f61b 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -42,8 +42,6 @@ typedef struct cmdinfo { + extern cmdinfo_t *cmdtab; + extern int ncmds; + +-void quit_init(void); +- + typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); + + void add_command(const cmdinfo_t *ci); +diff --git a/qemu-io.c b/qemu-io.c +index 4f1c808..b86bfbf 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -170,6 +170,21 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) + return openfile(argv[optind], flags, growable, opts); + } + ++static int quit_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ return 1; ++} ++ ++static const cmdinfo_t quit_cmd = { ++ .name = "quit", ++ .altname = "q", ++ .cfunc = quit_f, ++ .argmin = -1, ++ .argmax = -1, ++ .flags = CMD_FLAG_GLOBAL, ++ .oneline = "exit the program", ++}; ++ + static void usage(const char *name) + { + printf( +@@ -285,7 +300,7 @@ int main(int argc, char **argv) + bdrv_init(); + + /* initialize commands */ +- quit_init(); ++ add_command(&quit_cmd); + add_command(&open_cmd); + add_command(&close_cmd); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Move-remaining-helpers-from-cmd.c.patch b/SOURCES/kvm-qemu-io-Move-remaining-helpers-from-cmd.c.patch new file mode 100644 index 0000000..89354b4 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Move-remaining-helpers-from-cmd.c.patch @@ -0,0 +1,330 @@ +From f0e4ec43a0a3af6f1e385fae17527ed76cdb00e4 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:32 +0100 +Subject: [PATCH 13/27] qemu-io: Move remaining helpers from cmd.c + +RH-Author: John Snow +Message-id: <1448300320-7772-14-git-send-email-jsnow@redhat.com> +Patchwork-id: 68437 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 13/21] qemu-io: Move remaining helpers from cmd.c +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0b613881ae8fc59359b3d91e666fea6c9b1e731b) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + Makefile | 2 +- + cmd.c | 139 --------------------------------------------------------- + cmd.h | 14 ------ + qemu-io-cmds.c | 104 ++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 105 insertions(+), 154 deletions(-) + delete mode 100644 cmd.c + +diff --git a/Makefile b/Makefile +index f28ce29..f403057 100644 +--- a/Makefile ++++ b/Makefile +@@ -205,7 +205,7 @@ qemu-img.o: qemu-img-cmds.h + + qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a + qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a +-qemu-io$(EXESUF): qemu-io.o qemu-io-cmds.o cmd.o $(block-obj-y) libqemuutil.a libqemustub.a ++qemu-io$(EXESUF): qemu-io.o qemu-io-cmds.o $(block-obj-y) libqemuutil.a libqemustub.a + + qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o + +diff --git a/cmd.c b/cmd.c +deleted file mode 100644 +index 26d38a8..0000000 +--- a/cmd.c ++++ /dev/null +@@ -1,139 +0,0 @@ +-/* +- * Copyright (c) 2003-2005 Silicon Graphics, Inc. +- * All Rights Reserved. +- * +- * This program is free software; you can redistribute it and/or +- * modify it under the terms of the GNU General Public License as +- * published by the Free Software Foundation. +- * +- * This program is distributed in the hope that it would be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see . +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "cmd.h" +-#include "block/aio.h" +-#include "qemu/main-loop.h" +- +-#define _(x) x /* not gettext support yet */ +- +-/* from libxcmd/command.c */ +- +-#define EXABYTES(x) ((long long)(x) << 60) +-#define PETABYTES(x) ((long long)(x) << 50) +-#define TERABYTES(x) ((long long)(x) << 40) +-#define GIGABYTES(x) ((long long)(x) << 30) +-#define MEGABYTES(x) ((long long)(x) << 20) +-#define KILOBYTES(x) ((long long)(x) << 10) +- +-#define TO_EXABYTES(x) ((x) / EXABYTES(1)) +-#define TO_PETABYTES(x) ((x) / PETABYTES(1)) +-#define TO_TERABYTES(x) ((x) / TERABYTES(1)) +-#define TO_GIGABYTES(x) ((x) / GIGABYTES(1)) +-#define TO_MEGABYTES(x) ((x) / MEGABYTES(1)) +-#define TO_KILOBYTES(x) ((x) / KILOBYTES(1)) +- +-void +-cvtstr( +- double value, +- char *str, +- size_t size) +-{ +- char *trim; +- const char *suffix; +- +- if (value >= EXABYTES(1)) { +- suffix = " EiB"; +- snprintf(str, size - 4, "%.3f", TO_EXABYTES(value)); +- } else if (value >= PETABYTES(1)) { +- suffix = " PiB"; +- snprintf(str, size - 4, "%.3f", TO_PETABYTES(value)); +- } else if (value >= TERABYTES(1)) { +- suffix = " TiB"; +- snprintf(str, size - 4, "%.3f", TO_TERABYTES(value)); +- } else if (value >= GIGABYTES(1)) { +- suffix = " GiB"; +- snprintf(str, size - 4, "%.3f", TO_GIGABYTES(value)); +- } else if (value >= MEGABYTES(1)) { +- suffix = " MiB"; +- snprintf(str, size - 4, "%.3f", TO_MEGABYTES(value)); +- } else if (value >= KILOBYTES(1)) { +- suffix = " KiB"; +- snprintf(str, size - 4, "%.3f", TO_KILOBYTES(value)); +- } else { +- suffix = " bytes"; +- snprintf(str, size - 6, "%f", value); +- } +- +- trim = strstr(str, ".000"); +- if (trim) { +- strcpy(trim, suffix); +- } else { +- strcat(str, suffix); +- } +-} +- +-struct timeval +-tsub(struct timeval t1, struct timeval t2) +-{ +- t1.tv_usec -= t2.tv_usec; +- if (t1.tv_usec < 0) { +- t1.tv_usec += 1000000; +- t1.tv_sec--; +- } +- t1.tv_sec -= t2.tv_sec; +- return t1; +-} +- +-double +-tdiv(double value, struct timeval tv) +-{ +- return value / ((double)tv.tv_sec + ((double)tv.tv_usec / 1000000.0)); +-} +- +-#define HOURS(sec) ((sec) / (60 * 60)) +-#define MINUTES(sec) (((sec) % (60 * 60)) / 60) +-#define SECONDS(sec) ((sec) % 60) +- +-void +-timestr( +- struct timeval *tv, +- char *ts, +- size_t size, +- int format) +-{ +- double usec = (double)tv->tv_usec / 1000000.0; +- +- if (format & TERSE_FIXED_TIME) { +- if (!HOURS(tv->tv_sec)) { +- snprintf(ts, size, "%u:%02u.%02u", +- (unsigned int) MINUTES(tv->tv_sec), +- (unsigned int) SECONDS(tv->tv_sec), +- (unsigned int) (usec * 100)); +- return; +- } +- format |= VERBOSE_FIXED_TIME; /* fallback if hours needed */ +- } +- +- if ((format & VERBOSE_FIXED_TIME) || tv->tv_sec) { +- snprintf(ts, size, "%u:%02u:%02u.%02u", +- (unsigned int) HOURS(tv->tv_sec), +- (unsigned int) MINUTES(tv->tv_sec), +- (unsigned int) SECONDS(tv->tv_sec), +- (unsigned int) (usec * 100)); +- } else { +- snprintf(ts, size, "0.%04u sec", (unsigned int) (usec * 10000)); +- } +-} +diff --git a/cmd.h b/cmd.h +index da0c7cf..9907795 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -43,20 +43,6 @@ void qemuio_add_command(const cmdinfo_t *ci); + + int qemuio_command_usage(const cmdinfo_t *ci); + +-/* from input.h */ +-void cvtstr(double value, char *str, size_t sz); +- +-struct timeval tsub(struct timeval t1, struct timeval t2); +-double tdiv(double value, struct timeval tv); +- +-enum { +- DEFAULT_TIME = 0x0, +- TERSE_FIXED_TIME = 0x1, +- VERBOSE_FIXED_TIME = 0x2 +-}; +- +-void timestr(struct timeval *tv, char *str, size_t sz, int flags); +- + bool qemuio_command(const char *cmd); + + #endif /* __COMMAND_H__ */ +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index 27a903f..1db7fb9 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -127,6 +127,110 @@ static int64_t cvtnum(const char *s) + return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); + } + ++#define EXABYTES(x) ((long long)(x) << 60) ++#define PETABYTES(x) ((long long)(x) << 50) ++#define TERABYTES(x) ((long long)(x) << 40) ++#define GIGABYTES(x) ((long long)(x) << 30) ++#define MEGABYTES(x) ((long long)(x) << 20) ++#define KILOBYTES(x) ((long long)(x) << 10) ++ ++#define TO_EXABYTES(x) ((x) / EXABYTES(1)) ++#define TO_PETABYTES(x) ((x) / PETABYTES(1)) ++#define TO_TERABYTES(x) ((x) / TERABYTES(1)) ++#define TO_GIGABYTES(x) ((x) / GIGABYTES(1)) ++#define TO_MEGABYTES(x) ((x) / MEGABYTES(1)) ++#define TO_KILOBYTES(x) ((x) / KILOBYTES(1)) ++ ++static void cvtstr(double value, char *str, size_t size) ++{ ++ char *trim; ++ const char *suffix; ++ ++ if (value >= EXABYTES(1)) { ++ suffix = " EiB"; ++ snprintf(str, size - 4, "%.3f", TO_EXABYTES(value)); ++ } else if (value >= PETABYTES(1)) { ++ suffix = " PiB"; ++ snprintf(str, size - 4, "%.3f", TO_PETABYTES(value)); ++ } else if (value >= TERABYTES(1)) { ++ suffix = " TiB"; ++ snprintf(str, size - 4, "%.3f", TO_TERABYTES(value)); ++ } else if (value >= GIGABYTES(1)) { ++ suffix = " GiB"; ++ snprintf(str, size - 4, "%.3f", TO_GIGABYTES(value)); ++ } else if (value >= MEGABYTES(1)) { ++ suffix = " MiB"; ++ snprintf(str, size - 4, "%.3f", TO_MEGABYTES(value)); ++ } else if (value >= KILOBYTES(1)) { ++ suffix = " KiB"; ++ snprintf(str, size - 4, "%.3f", TO_KILOBYTES(value)); ++ } else { ++ suffix = " bytes"; ++ snprintf(str, size - 6, "%f", value); ++ } ++ ++ trim = strstr(str, ".000"); ++ if (trim) { ++ strcpy(trim, suffix); ++ } else { ++ strcat(str, suffix); ++ } ++} ++ ++ ++ ++static struct timeval tsub(struct timeval t1, struct timeval t2) ++{ ++ t1.tv_usec -= t2.tv_usec; ++ if (t1.tv_usec < 0) { ++ t1.tv_usec += 1000000; ++ t1.tv_sec--; ++ } ++ t1.tv_sec -= t2.tv_sec; ++ return t1; ++} ++ ++static double tdiv(double value, struct timeval tv) ++{ ++ return value / ((double)tv.tv_sec + ((double)tv.tv_usec / 1000000.0)); ++} ++ ++#define HOURS(sec) ((sec) / (60 * 60)) ++#define MINUTES(sec) (((sec) % (60 * 60)) / 60) ++#define SECONDS(sec) ((sec) % 60) ++ ++enum { ++ DEFAULT_TIME = 0x0, ++ TERSE_FIXED_TIME = 0x1, ++ VERBOSE_FIXED_TIME = 0x2, ++}; ++ ++static void timestr(struct timeval *tv, char *ts, size_t size, int format) ++{ ++ double usec = (double)tv->tv_usec / 1000000.0; ++ ++ if (format & TERSE_FIXED_TIME) { ++ if (!HOURS(tv->tv_sec)) { ++ snprintf(ts, size, "%u:%02u.%02u", ++ (unsigned int) MINUTES(tv->tv_sec), ++ (unsigned int) SECONDS(tv->tv_sec), ++ (unsigned int) (usec * 100)); ++ return; ++ } ++ format |= VERBOSE_FIXED_TIME; /* fallback if hours needed */ ++ } ++ ++ if ((format & VERBOSE_FIXED_TIME) || tv->tv_sec) { ++ snprintf(ts, size, "%u:%02u:%02u.%02u", ++ (unsigned int) HOURS(tv->tv_sec), ++ (unsigned int) MINUTES(tv->tv_sec), ++ (unsigned int) SECONDS(tv->tv_sec), ++ (unsigned int) (usec * 100)); ++ } else { ++ snprintf(ts, size, "0.%04u sec", (unsigned int) (usec * 10000)); ++ } ++} ++ + /* + * Parse the pattern argument to various sub-commands. + * +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-New-command-sleep.patch b/SOURCES/kvm-qemu-io-New-command-sleep.patch new file mode 100644 index 0000000..89625d4 --- /dev/null +++ b/SOURCES/kvm-qemu-io-New-command-sleep.patch @@ -0,0 +1,104 @@ +From 714dfa20586988e535dc7290be0d5d8d6b0853f3 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 15 Jan 2014 15:39:10 +0100 +Subject: [PATCH 33/37] qemu-io: New command 'sleep' + +Message-id: <1392117622-28812-34-git-send-email-kwolf@redhat.com> +Patchwork-id: 57198 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 33/37] qemu-io: New command 'sleep' +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +There is no easy way to check that a request correctly waits for a +different request. With a sleep command we can at least approximate it. + +Signed-off-by: Kevin Wolf +(cherry picked from commit cd33d02a1012e58ee0d3c8259159e8c60cfa0a4d) + +Conflicts: + qemu-io-cmds.c + +Conflicts because RHEL 7 doesn't have... +- ...the qemu-io refactoring for supporting qemu-io from the monitor +- ...the new timer API + +Signed-off-by: Kevin Wolf +--- + qemu-io.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) +--- + qemu-io.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 42 insertions(+), 0 deletions(-) + +diff --git a/qemu-io.c b/qemu-io.c +index 7e258a5..0959178 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -22,6 +22,7 @@ + #include "block/qapi.h" + #include "cmd.h" + #include "trace/control.h" ++#include "qemu/timer.h" + + #define VERSION "0.0.1" + +@@ -1773,6 +1774,46 @@ static const cmdinfo_t close_cmd = { + .oneline = "close the current open file", + }; + ++static void sleep_cb(void *opaque) ++{ ++ bool *expired = opaque; ++ *expired = true; ++} ++ ++static int sleep_f(int argc, char **argv) ++{ ++ char *endptr; ++ long ms; ++ struct QEMUTimer *timer; ++ bool expired = false; ++ ++ ms = strtol(argv[1], &endptr, 0); ++ if (ms < 0 || *endptr != '\0') { ++ printf("%s is not a valid number\n", argv[1]); ++ return 0; ++ } ++ ++ timer = qemu_new_timer_ns(host_clock, sleep_cb, &expired); ++ qemu_mod_timer(timer, qemu_get_clock_ns(host_clock) + SCALE_MS * ms); ++ ++ while (!expired) { ++ main_loop_wait(false); ++ } ++ ++ qemu_free_timer(timer); ++ ++ return 0; ++} ++ ++static const cmdinfo_t sleep_cmd = { ++ .name = "sleep", ++ .argmin = 1, ++ .argmax = 1, ++ .cfunc = sleep_f, ++ .flags = CMD_NOFILE_OK, ++ .oneline = "waits for the given value in milliseconds", ++}; ++ + static int openfile(char *name, int flags, int growable, QDict *opts) + { + Error *local_err = NULL; +@@ -2052,6 +2093,7 @@ int main(int argc, char **argv) + add_command(&resume_cmd); + add_command(&wait_break_cmd); + add_command(&abort_cmd); ++ add_command(&sleep_cmd); + + add_args_command(init_args_command); + add_check_command(init_check_command); +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-io-Remove-unused-args_command.patch b/SOURCES/kvm-qemu-io-Remove-unused-args_command.patch new file mode 100644 index 0000000..a005944 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Remove-unused-args_command.patch @@ -0,0 +1,141 @@ +From d16c34d6dc39a159326efda97101aed3c1481812 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:20 +0100 +Subject: [PATCH 01/27] qemu-io: Remove unused args_command + +RH-Author: John Snow +Message-id: <1448300320-7772-2-git-send-email-jsnow@redhat.com> +Patchwork-id: 68429 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 01/21] qemu-io: Remove unused args_command +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +The original intention seems to be something with handling multiple +images at once, but this has never been implemented and the only +function ever registered is implemented to make everything behave like a +"global" command. Just do that unconditionally now. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a23818f4ff3d7981f49453b739f589e4205930b5) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + cmd.c | 28 ++-------------------------- + cmd.h | 2 -- + qemu-io.c | 10 ---------- + 3 files changed, 2 insertions(+), 38 deletions(-) + +diff --git a/cmd.c b/cmd.c +index 10a8688..4e7579b 100644 +--- a/cmd.c ++++ b/cmd.c +@@ -34,7 +34,6 @@ + cmdinfo_t *cmdtab; + int ncmds; + +-static argsfunc_t args_func; + static checkfunc_t check_func; + static int ncmdline; + static char **cmdline; +@@ -127,22 +126,6 @@ void add_user_command(char *optarg) + cmdline[ncmdline-1] = optarg; + } + +-static int +-args_command( +- int index) +-{ +- if (args_func) +- return args_func(index); +- return 0; +-} +- +-void +-add_args_command( +- argsfunc_t af) +-{ +- args_func = af; +-} +- + static void prep_fetchline(void *opaque) + { + int *fetchable = opaque; +@@ -155,7 +138,7 @@ static char *get_prompt(void); + + void command_loop(void) + { +- int c, i, j = 0, done = 0, fetchable = 0, prompted = 0; ++ int c, i, done = 0, fetchable = 0, prompted = 0; + char *input; + char **v; + const cmdinfo_t *ct; +@@ -171,14 +154,7 @@ void command_loop(void) + if (c) { + ct = find_command(v[0]); + if (ct) { +- if (ct->flags & CMD_FLAG_GLOBAL) { +- done = command(ct, c, v); +- } else { +- j = 0; +- while (!done && (j = args_command(j))) { +- done = command(ct, c, v); +- } +- } ++ done = command(ct, c, v); + } else { + fprintf(stderr, _("command \"%s\" not found\n"), v[0]); + } +diff --git a/cmd.h b/cmd.h +index b763b19..8e6f753 100644 +--- a/cmd.h ++++ b/cmd.h +@@ -41,12 +41,10 @@ extern int ncmds; + void help_init(void); + void quit_init(void); + +-typedef int (*argsfunc_t)(int index); + typedef int (*checkfunc_t)(const cmdinfo_t *ci); + + void add_command(const cmdinfo_t *ci); + void add_user_command(char *optarg); +-void add_args_command(argsfunc_t af); + void add_check_command(checkfunc_t cf); + + const cmdinfo_t *find_command(const char *cmd); +diff --git a/qemu-io.c b/qemu-io.c +index cc89947..9f66a78 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -1935,15 +1935,6 @@ static int open_f(int argc, char **argv) + return openfile(argv[optind], flags, growable, opts); + } + +-static int init_args_command(int index) +-{ +- /* only one device allowed so far */ +- if (index >= 1) { +- return 0; +- } +- return ++index; +-} +- + static int init_check_command(const cmdinfo_t *ct) + { + if (ct->flags & CMD_FLAG_GLOBAL) { +@@ -2096,7 +2087,6 @@ int main(int argc, char **argv) + add_command(&abort_cmd); + add_command(&sleep_cmd); + +- add_args_command(init_args_command); + add_check_command(init_check_command); + + /* open the device */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Split-off-commands-to-qemu-io-cmds.c.patch b/SOURCES/kvm-qemu-io-Split-off-commands-to-qemu-io-cmds.c.patch new file mode 100644 index 0000000..957b8c7 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Split-off-commands-to-qemu-io-cmds.c.patch @@ -0,0 +1,3789 @@ +From 9bd448e0f256ac9327363a0f370b9616d967e986 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:25 +0100 +Subject: [PATCH 06/27] qemu-io: Split off commands to qemu-io-cmds.c + +RH-Author: John Snow +Message-id: <1448300320-7772-7-git-send-email-jsnow@redhat.com> +Patchwork-id: 68434 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 06/21] qemu-io: Split off commands to qemu-io-cmds.c +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +This is the implementation of all qemu-io commands that make sense to be +called from the qemu monitor, i.e. everything except open, close and +quit. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 797ac58cb2093ab9192d8998a1fef85d87cc8661) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io.c: Minor differences, but as this is code motion, + The code motion had to be re-done to preserve + any backported changes. + qemu-io-cmds.c: re-created from downstream qemu-io.c. + +Signed-off-by: John Snow +--- + Makefile | 2 +- + qemu-io-cmds.c | 1853 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + qemu-io.c | 1831 +------------------------------------------------------ + 3 files changed, 1856 insertions(+), 1830 deletions(-) + create mode 100644 qemu-io-cmds.c + +diff --git a/Makefile b/Makefile +index 8407945..f28ce29 100644 +--- a/Makefile ++++ b/Makefile +@@ -205,7 +205,7 @@ qemu-img.o: qemu-img-cmds.h + + qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a + qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a +-qemu-io$(EXESUF): qemu-io.o cmd.o $(block-obj-y) libqemuutil.a libqemustub.a ++qemu-io$(EXESUF): qemu-io.o qemu-io-cmds.o cmd.o $(block-obj-y) libqemuutil.a libqemustub.a + + qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o + +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +new file mode 100644 +index 0000000..efa6070 +--- /dev/null ++++ b/qemu-io-cmds.c +@@ -0,0 +1,1853 @@ ++/* ++ * Command line utility to exercise the QEMU I/O path. ++ * ++ * Copyright (C) 2009 Red Hat, Inc. ++ * Copyright (c) 2003-2005 Silicon Graphics, Inc. ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or later. ++ * See the COPYING file in the top-level directory. ++ */ ++ ++#include "qemu-common.h" ++#include "block/block_int.h" ++#include "block/qapi.h" ++#include "cmd.h" ++ ++#define CMD_NOFILE_OK 0x01 ++ ++int qemuio_misalign; ++ ++static int64_t cvtnum(const char *s) ++{ ++ char *end; ++ return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); ++} ++ ++/* ++ * Parse the pattern argument to various sub-commands. ++ * ++ * Because the pattern is used as an argument to memset it must evaluate ++ * to an unsigned integer that fits into a single byte. ++ */ ++static int parse_pattern(const char *arg) ++{ ++ char *endptr = NULL; ++ long pattern; ++ ++ pattern = strtol(arg, &endptr, 0); ++ if (pattern < 0 || pattern > UCHAR_MAX || *endptr != '\0') { ++ printf("%s is not a valid pattern byte\n", arg); ++ return -1; ++ } ++ ++ return pattern; ++} ++ ++/* ++ * Memory allocation helpers. ++ * ++ * Make sure memory is aligned by default, or purposefully misaligned if ++ * that is specified on the command line. ++ */ ++ ++#define MISALIGN_OFFSET 16 ++static void *qemu_io_alloc(BlockDriverState *bs, size_t len, int pattern) ++{ ++ void *buf; ++ ++ if (qemuio_misalign) { ++ len += MISALIGN_OFFSET; ++ } ++ buf = qemu_blockalign(bs, len); ++ memset(buf, pattern, len); ++ if (qemuio_misalign) { ++ buf += MISALIGN_OFFSET; ++ } ++ return buf; ++} ++ ++static void qemu_io_free(void *p) ++{ ++ if (qemuio_misalign) { ++ p -= MISALIGN_OFFSET; ++ } ++ qemu_vfree(p); ++} ++ ++static void dump_buffer(const void *buffer, int64_t offset, int len) ++{ ++ int i, j; ++ const uint8_t *p; ++ ++ for (i = 0, p = buffer; i < len; i += 16) { ++ const uint8_t *s = p; ++ ++ printf("%08" PRIx64 ": ", offset + i); ++ for (j = 0; j < 16 && i + j < len; j++, p++) { ++ printf("%02x ", *p); ++ } ++ printf(" "); ++ for (j = 0; j < 16 && i + j < len; j++, s++) { ++ if (isalnum(*s)) { ++ printf("%c", *s); ++ } else { ++ printf("."); ++ } ++ } ++ printf("\n"); ++ } ++} ++ ++static void print_report(const char *op, struct timeval *t, int64_t offset, ++ int count, int total, int cnt, int Cflag) ++{ ++ char s1[64], s2[64], ts[64]; ++ ++ timestr(t, ts, sizeof(ts), Cflag ? VERBOSE_FIXED_TIME : 0); ++ if (!Cflag) { ++ cvtstr((double)total, s1, sizeof(s1)); ++ cvtstr(tdiv((double)total, *t), s2, sizeof(s2)); ++ printf("%s %d/%d bytes at offset %" PRId64 "\n", ++ op, total, count, offset); ++ printf("%s, %d ops; %s (%s/sec and %.4f ops/sec)\n", ++ s1, cnt, ts, s2, tdiv((double)cnt, *t)); ++ } else {/* bytes,ops,time,bytes/sec,ops/sec */ ++ printf("%d,%d,%s,%.3f,%.3f\n", ++ total, cnt, ts, ++ tdiv((double)total, *t), ++ tdiv((double)cnt, *t)); ++ } ++} ++ ++/* ++ * Parse multiple length statements for vectored I/O, and construct an I/O ++ * vector matching it. ++ */ ++static void * ++create_iovec(BlockDriverState *bs, QEMUIOVector *qiov, char **argv, int nr_iov, ++ int pattern) ++{ ++ size_t *sizes = g_new0(size_t, nr_iov); ++ size_t count = 0; ++ void *buf = NULL; ++ void *p; ++ int i; ++ ++ for (i = 0; i < nr_iov; i++) { ++ char *arg = argv[i]; ++ int64_t len; ++ ++ len = cvtnum(arg); ++ if (len < 0) { ++ printf("non-numeric length argument -- %s\n", arg); ++ goto fail; ++ } ++ ++ /* should be SIZE_T_MAX, but that doesn't exist */ ++ if (len > INT_MAX) { ++ printf("too large length argument -- %s\n", arg); ++ goto fail; ++ } ++ ++ if (len & 0x1ff) { ++ printf("length argument %" PRId64 ++ " is not sector aligned\n", len); ++ goto fail; ++ } ++ ++ sizes[i] = len; ++ count += len; ++ } ++ ++ qemu_iovec_init(qiov, nr_iov); ++ ++ buf = p = qemu_io_alloc(bs, count, pattern); ++ ++ for (i = 0; i < nr_iov; i++) { ++ qemu_iovec_add(qiov, p, sizes[i]); ++ p += sizes[i]; ++ } ++ ++fail: ++ g_free(sizes); ++ return buf; ++} ++ ++static int do_read(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) ++{ ++ int ret; ++ ++ ret = bdrv_read(bs, offset >> 9, (uint8_t *)buf, count >> 9); ++ if (ret < 0) { ++ return ret; ++ } ++ *total = count; ++ return 1; ++} ++ ++static int do_write(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) ++{ ++ int ret; ++ ++ ret = bdrv_write(bs, offset >> 9, (uint8_t *)buf, count >> 9); ++ if (ret < 0) { ++ return ret; ++ } ++ *total = count; ++ return 1; ++} ++ ++static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) ++{ ++ *total = bdrv_pread(bs, offset, (uint8_t *)buf, count); ++ if (*total < 0) { ++ return *total; ++ } ++ return 1; ++} ++ ++static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, int count, ++ int *total) ++{ ++ *total = bdrv_pwrite(bs, offset, (uint8_t *)buf, count); ++ if (*total < 0) { ++ return *total; ++ } ++ return 1; ++} ++ ++typedef struct { ++ BlockDriverState *bs; ++ int64_t offset; ++ int count; ++ int *total; ++ int ret; ++ bool done; ++} CoWriteZeroes; ++ ++static void coroutine_fn co_write_zeroes_entry(void *opaque) ++{ ++ CoWriteZeroes *data = opaque; ++ ++ data->ret = bdrv_co_write_zeroes(data->bs, data->offset / BDRV_SECTOR_SIZE, ++ data->count / BDRV_SECTOR_SIZE, 0); ++ data->done = true; ++ if (data->ret < 0) { ++ *data->total = data->ret; ++ return; ++ } ++ ++ *data->total = data->count; ++} ++ ++static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count, ++ int *total) ++{ ++ Coroutine *co; ++ CoWriteZeroes data = { ++ .bs = bs, ++ .offset = offset, ++ .count = count, ++ .total = total, ++ .done = false, ++ }; ++ ++ co = qemu_coroutine_create(co_write_zeroes_entry); ++ qemu_coroutine_enter(co, &data); ++ while (!data.done) { ++ qemu_aio_wait(); ++ } ++ if (data.ret < 0) { ++ return data.ret; ++ } else { ++ return 1; ++ } ++} ++ ++static int do_write_compressed(BlockDriverState *bs, char *buf, int64_t offset, ++ int count, int *total) ++{ ++ int ret; ++ ++ ret = bdrv_write_compressed(bs, offset >> 9, (uint8_t *)buf, count >> 9); ++ if (ret < 0) { ++ return ret; ++ } ++ *total = count; ++ return 1; ++} ++ ++static int do_load_vmstate(BlockDriverState *bs, char *buf, int64_t offset, ++ int count, int *total) ++{ ++ *total = bdrv_load_vmstate(bs, (uint8_t *)buf, offset, count); ++ if (*total < 0) { ++ return *total; ++ } ++ return 1; ++} ++ ++static int do_save_vmstate(BlockDriverState *bs, char *buf, int64_t offset, ++ int count, int *total) ++{ ++ *total = bdrv_save_vmstate(bs, (uint8_t *)buf, offset, count); ++ if (*total < 0) { ++ return *total; ++ } ++ return 1; ++} ++ ++#define NOT_DONE 0x7fffffff ++static void aio_rw_done(void *opaque, int ret) ++{ ++ *(int *)opaque = ret; ++} ++ ++static int do_aio_readv(BlockDriverState *bs, QEMUIOVector *qiov, ++ int64_t offset, int *total) ++{ ++ int async_ret = NOT_DONE; ++ ++ bdrv_aio_readv(bs, offset >> 9, qiov, qiov->size >> 9, ++ aio_rw_done, &async_ret); ++ while (async_ret == NOT_DONE) { ++ main_loop_wait(false); ++ } ++ ++ *total = qiov->size; ++ return async_ret < 0 ? async_ret : 1; ++} ++ ++static int do_aio_writev(BlockDriverState *bs, QEMUIOVector *qiov, ++ int64_t offset, int *total) ++{ ++ int async_ret = NOT_DONE; ++ ++ bdrv_aio_writev(bs, offset >> 9, qiov, qiov->size >> 9, ++ aio_rw_done, &async_ret); ++ while (async_ret == NOT_DONE) { ++ main_loop_wait(false); ++ } ++ ++ *total = qiov->size; ++ return async_ret < 0 ? async_ret : 1; ++} ++ ++struct multiwrite_async_ret { ++ int num_done; ++ int error; ++}; ++ ++static void multiwrite_cb(void *opaque, int ret) ++{ ++ struct multiwrite_async_ret *async_ret = opaque; ++ ++ async_ret->num_done++; ++ if (ret < 0) { ++ async_ret->error = ret; ++ } ++} ++ ++static int do_aio_multiwrite(BlockDriverState *bs, BlockRequest* reqs, ++ int num_reqs, int *total) ++{ ++ int i, ret; ++ struct multiwrite_async_ret async_ret = { ++ .num_done = 0, ++ .error = 0, ++ }; ++ ++ *total = 0; ++ for (i = 0; i < num_reqs; i++) { ++ reqs[i].cb = multiwrite_cb; ++ reqs[i].opaque = &async_ret; ++ *total += reqs[i].qiov->size; ++ } ++ ++ ret = bdrv_aio_multiwrite(bs, reqs, num_reqs); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ while (async_ret.num_done < num_reqs) { ++ main_loop_wait(false); ++ } ++ ++ return async_ret.error < 0 ? async_ret.error : 1; ++} ++ ++static void read_help(void) ++{ ++ printf( ++"\n" ++" reads a range of bytes from the given offset\n" ++"\n" ++" Example:\n" ++" 'read -v 512 1k' - dumps 1 kilobyte read from 512 bytes into the file\n" ++"\n" ++" Reads a segment of the currently open file, optionally dumping it to the\n" ++" standard output stream (with -v option) for subsequent inspection.\n" ++" -b, -- read from the VM state rather than the virtual disk\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -l, -- length for pattern verification (only with -P)\n" ++" -p, -- use bdrv_pread to read the file\n" ++" -P, -- use a pattern to verify read data\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++" -s, -- start offset for pattern verification (only with -P)\n" ++" -v, -- dump buffer to standard output\n" ++"\n"); ++} ++ ++static int read_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t read_cmd = { ++ .name = "read", ++ .altname = "r", ++ .cfunc = read_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-abCpqv] [-P pattern [-s off] [-l len]] off len", ++ .oneline = "reads a number of bytes at a specified offset", ++ .help = read_help, ++}; ++ ++static int read_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ struct timeval t1, t2; ++ int Cflag = 0, pflag = 0, qflag = 0, vflag = 0; ++ int Pflag = 0, sflag = 0, lflag = 0, bflag = 0; ++ int c, cnt; ++ char *buf; ++ int64_t offset; ++ int count; ++ /* Some compilers get confused and warn if this is not initialized. */ ++ int total = 0; ++ int pattern = 0, pattern_offset = 0, pattern_count = 0; ++ ++ while ((c = getopt(argc, argv, "bCl:pP:qs:v")) != EOF) { ++ switch (c) { ++ case 'b': ++ bflag = 1; ++ break; ++ case 'C': ++ Cflag = 1; ++ break; ++ case 'l': ++ lflag = 1; ++ pattern_count = cvtnum(optarg); ++ if (pattern_count < 0) { ++ printf("non-numeric length argument -- %s\n", optarg); ++ return 0; ++ } ++ break; ++ case 'p': ++ pflag = 1; ++ break; ++ case 'P': ++ Pflag = 1; ++ pattern = parse_pattern(optarg); ++ if (pattern < 0) { ++ return 0; ++ } ++ break; ++ case 'q': ++ qflag = 1; ++ break; ++ case 's': ++ sflag = 1; ++ pattern_offset = cvtnum(optarg); ++ if (pattern_offset < 0) { ++ printf("non-numeric length argument -- %s\n", optarg); ++ return 0; ++ } ++ break; ++ case 'v': ++ vflag = 1; ++ break; ++ default: ++ return command_usage(&read_cmd); ++ } ++ } ++ ++ if (optind != argc - 2) { ++ return command_usage(&read_cmd); ++ } ++ ++ if (bflag && pflag) { ++ printf("-b and -p cannot be specified at the same time\n"); ++ return 0; ++ } ++ ++ offset = cvtnum(argv[optind]); ++ if (offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ ++ optind++; ++ count = cvtnum(argv[optind]); ++ if (count < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ ++ if (!Pflag && (lflag || sflag)) { ++ return command_usage(&read_cmd); ++ } ++ ++ if (!lflag) { ++ pattern_count = count - pattern_offset; ++ } ++ ++ if ((pattern_count < 0) || (pattern_count + pattern_offset > count)) { ++ printf("pattern verification range exceeds end of read data\n"); ++ return 0; ++ } ++ ++ if (!pflag) { ++ if (offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ offset); ++ return 0; ++ } ++ if (count & 0x1ff) { ++ printf("count %d is not sector aligned\n", ++ count); ++ return 0; ++ } ++ } ++ ++ buf = qemu_io_alloc(bs, count, 0xab); ++ ++ gettimeofday(&t1, NULL); ++ if (pflag) { ++ cnt = do_pread(bs, buf, offset, count, &total); ++ } else if (bflag) { ++ cnt = do_load_vmstate(bs, buf, offset, count, &total); ++ } else { ++ cnt = do_read(bs, buf, offset, count, &total); ++ } ++ gettimeofday(&t2, NULL); ++ ++ if (cnt < 0) { ++ printf("read failed: %s\n", strerror(-cnt)); ++ goto out; ++ } ++ ++ if (Pflag) { ++ void *cmp_buf = g_malloc(pattern_count); ++ memset(cmp_buf, pattern, pattern_count); ++ if (memcmp(buf + pattern_offset, cmp_buf, pattern_count)) { ++ printf("Pattern verification failed at offset %" ++ PRId64 ", %d bytes\n", ++ offset + pattern_offset, pattern_count); ++ } ++ g_free(cmp_buf); ++ } ++ ++ if (qflag) { ++ goto out; ++ } ++ ++ if (vflag) { ++ dump_buffer(buf, offset, count); ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, t1); ++ print_report("read", &t2, offset, count, total, cnt, Cflag); ++ ++out: ++ qemu_io_free(buf); ++ ++ return 0; ++} ++ ++static void readv_help(void) ++{ ++ printf( ++"\n" ++" reads a range of bytes from the given offset into multiple buffers\n" ++"\n" ++" Example:\n" ++" 'readv -v 512 1k 1k ' - dumps 2 kilobytes read from 512 bytes into the file\n" ++"\n" ++" Reads a segment of the currently open file, optionally dumping it to the\n" ++" standard output stream (with -v option) for subsequent inspection.\n" ++" Uses multiple iovec buffers if more than one byte range is specified.\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -P, -- use a pattern to verify read data\n" ++" -v, -- dump buffer to standard output\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++"\n"); ++} ++ ++static int readv_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t readv_cmd = { ++ .name = "readv", ++ .cfunc = readv_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-Cqv] [-P pattern ] off len [len..]", ++ .oneline = "reads a number of bytes at a specified offset", ++ .help = readv_help, ++}; ++ ++static int readv_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ struct timeval t1, t2; ++ int Cflag = 0, qflag = 0, vflag = 0; ++ int c, cnt; ++ char *buf; ++ int64_t offset; ++ /* Some compilers get confused and warn if this is not initialized. */ ++ int total = 0; ++ int nr_iov; ++ QEMUIOVector qiov; ++ int pattern = 0; ++ int Pflag = 0; ++ ++ while ((c = getopt(argc, argv, "CP:qv")) != EOF) { ++ switch (c) { ++ case 'C': ++ Cflag = 1; ++ break; ++ case 'P': ++ Pflag = 1; ++ pattern = parse_pattern(optarg); ++ if (pattern < 0) { ++ return 0; ++ } ++ break; ++ case 'q': ++ qflag = 1; ++ break; ++ case 'v': ++ vflag = 1; ++ break; ++ default: ++ return command_usage(&readv_cmd); ++ } ++ } ++ ++ if (optind > argc - 2) { ++ return command_usage(&readv_cmd); ++ } ++ ++ ++ offset = cvtnum(argv[optind]); ++ if (offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ optind++; ++ ++ if (offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ offset); ++ return 0; ++ } ++ ++ nr_iov = argc - optind; ++ buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, 0xab); ++ if (buf == NULL) { ++ return 0; ++ } ++ ++ gettimeofday(&t1, NULL); ++ cnt = do_aio_readv(bs, &qiov, offset, &total); ++ gettimeofday(&t2, NULL); ++ ++ if (cnt < 0) { ++ printf("readv failed: %s\n", strerror(-cnt)); ++ goto out; ++ } ++ ++ if (Pflag) { ++ void *cmp_buf = g_malloc(qiov.size); ++ memset(cmp_buf, pattern, qiov.size); ++ if (memcmp(buf, cmp_buf, qiov.size)) { ++ printf("Pattern verification failed at offset %" ++ PRId64 ", %zd bytes\n", offset, qiov.size); ++ } ++ g_free(cmp_buf); ++ } ++ ++ if (qflag) { ++ goto out; ++ } ++ ++ if (vflag) { ++ dump_buffer(buf, offset, qiov.size); ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, t1); ++ print_report("read", &t2, offset, qiov.size, total, cnt, Cflag); ++ ++out: ++ qemu_iovec_destroy(&qiov); ++ qemu_io_free(buf); ++ return 0; ++} ++ ++static void write_help(void) ++{ ++ printf( ++"\n" ++" writes a range of bytes from the given offset\n" ++"\n" ++" Example:\n" ++" 'write 512 1k' - writes 1 kilobyte at 512 bytes into the open file\n" ++"\n" ++" Writes into a segment of the currently open file, using a buffer\n" ++" filled with a set pattern (0xcdcdcdcd).\n" ++" -b, -- write to the VM state rather than the virtual disk\n" ++" -c, -- write compressed data with bdrv_write_compressed\n" ++" -p, -- use bdrv_pwrite to write the file\n" ++" -P, -- use different pattern to fill file\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++" -z, -- write zeroes using bdrv_co_write_zeroes\n" ++"\n"); ++} ++ ++static int write_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t write_cmd = { ++ .name = "write", ++ .altname = "w", ++ .cfunc = write_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-bcCpqz] [-P pattern ] off len", ++ .oneline = "writes a number of bytes at a specified offset", ++ .help = write_help, ++}; ++ ++static int write_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ struct timeval t1, t2; ++ int Cflag = 0, pflag = 0, qflag = 0, bflag = 0, Pflag = 0, zflag = 0; ++ int cflag = 0; ++ int c, cnt; ++ char *buf = NULL; ++ int64_t offset; ++ int count; ++ /* Some compilers get confused and warn if this is not initialized. */ ++ int total = 0; ++ int pattern = 0xcd; ++ ++ while ((c = getopt(argc, argv, "bcCpP:qz")) != EOF) { ++ switch (c) { ++ case 'b': ++ bflag = 1; ++ break; ++ case 'c': ++ cflag = 1; ++ break; ++ case 'C': ++ Cflag = 1; ++ break; ++ case 'p': ++ pflag = 1; ++ break; ++ case 'P': ++ Pflag = 1; ++ pattern = parse_pattern(optarg); ++ if (pattern < 0) { ++ return 0; ++ } ++ break; ++ case 'q': ++ qflag = 1; ++ break; ++ case 'z': ++ zflag = 1; ++ break; ++ default: ++ return command_usage(&write_cmd); ++ } ++ } ++ ++ if (optind != argc - 2) { ++ return command_usage(&write_cmd); ++ } ++ ++ if (bflag + pflag + zflag > 1) { ++ printf("-b, -p, or -z cannot be specified at the same time\n"); ++ return 0; ++ } ++ ++ if (zflag && Pflag) { ++ printf("-z and -P cannot be specified at the same time\n"); ++ return 0; ++ } ++ ++ offset = cvtnum(argv[optind]); ++ if (offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ ++ optind++; ++ count = cvtnum(argv[optind]); ++ if (count < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ ++ if (!pflag) { ++ if (offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ offset); ++ return 0; ++ } ++ ++ if (count & 0x1ff) { ++ printf("count %d is not sector aligned\n", ++ count); ++ return 0; ++ } ++ } ++ ++ if (!zflag) { ++ buf = qemu_io_alloc(bs, count, pattern); ++ } ++ ++ gettimeofday(&t1, NULL); ++ if (pflag) { ++ cnt = do_pwrite(bs, buf, offset, count, &total); ++ } else if (bflag) { ++ cnt = do_save_vmstate(bs, buf, offset, count, &total); ++ } else if (zflag) { ++ cnt = do_co_write_zeroes(bs, offset, count, &total); ++ } else if (cflag) { ++ cnt = do_write_compressed(bs, buf, offset, count, &total); ++ } else { ++ cnt = do_write(bs, buf, offset, count, &total); ++ } ++ gettimeofday(&t2, NULL); ++ ++ if (cnt < 0) { ++ printf("write failed: %s\n", strerror(-cnt)); ++ goto out; ++ } ++ ++ if (qflag) { ++ goto out; ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, t1); ++ print_report("wrote", &t2, offset, count, total, cnt, Cflag); ++ ++out: ++ if (!zflag) { ++ qemu_io_free(buf); ++ } ++ ++ return 0; ++} ++ ++static void ++writev_help(void) ++{ ++ printf( ++"\n" ++" writes a range of bytes from the given offset source from multiple buffers\n" ++"\n" ++" Example:\n" ++" 'write 512 1k 1k' - writes 2 kilobytes at 512 bytes into the open file\n" ++"\n" ++" Writes into a segment of the currently open file, using a buffer\n" ++" filled with a set pattern (0xcdcdcdcd).\n" ++" -P, -- use different pattern to fill file\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++"\n"); ++} ++ ++static int writev_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t writev_cmd = { ++ .name = "writev", ++ .cfunc = writev_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-Cq] [-P pattern ] off len [len..]", ++ .oneline = "writes a number of bytes at a specified offset", ++ .help = writev_help, ++}; ++ ++static int writev_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ struct timeval t1, t2; ++ int Cflag = 0, qflag = 0; ++ int c, cnt; ++ char *buf; ++ int64_t offset; ++ /* Some compilers get confused and warn if this is not initialized. */ ++ int total = 0; ++ int nr_iov; ++ int pattern = 0xcd; ++ QEMUIOVector qiov; ++ ++ while ((c = getopt(argc, argv, "CqP:")) != EOF) { ++ switch (c) { ++ case 'C': ++ Cflag = 1; ++ break; ++ case 'q': ++ qflag = 1; ++ break; ++ case 'P': ++ pattern = parse_pattern(optarg); ++ if (pattern < 0) { ++ return 0; ++ } ++ break; ++ default: ++ return command_usage(&writev_cmd); ++ } ++ } ++ ++ if (optind > argc - 2) { ++ return command_usage(&writev_cmd); ++ } ++ ++ offset = cvtnum(argv[optind]); ++ if (offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ optind++; ++ ++ if (offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ offset); ++ return 0; ++ } ++ ++ nr_iov = argc - optind; ++ buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, pattern); ++ if (buf == NULL) { ++ return 0; ++ } ++ ++ gettimeofday(&t1, NULL); ++ cnt = do_aio_writev(bs, &qiov, offset, &total); ++ gettimeofday(&t2, NULL); ++ ++ if (cnt < 0) { ++ printf("writev failed: %s\n", strerror(-cnt)); ++ goto out; ++ } ++ ++ if (qflag) { ++ goto out; ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, t1); ++ print_report("wrote", &t2, offset, qiov.size, total, cnt, Cflag); ++out: ++ qemu_iovec_destroy(&qiov); ++ qemu_io_free(buf); ++ return 0; ++} ++ ++static void multiwrite_help(void) ++{ ++ printf( ++"\n" ++" writes a range of bytes from the given offset source from multiple buffers,\n" ++" in a batch of requests that may be merged by qemu\n" ++"\n" ++" Example:\n" ++" 'multiwrite 512 1k 1k ; 4k 1k'\n" ++" writes 2 kB at 512 bytes and 1 kB at 4 kB into the open file\n" ++"\n" ++" Writes into a segment of the currently open file, using a buffer\n" ++" filled with a set pattern (0xcdcdcdcd). The pattern byte is increased\n" ++" by one for each request contained in the multiwrite command.\n" ++" -P, -- use different pattern to fill file\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++"\n"); ++} ++ ++static int multiwrite_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t multiwrite_cmd = { ++ .name = "multiwrite", ++ .cfunc = multiwrite_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-Cq] [-P pattern ] off len [len..] [; off len [len..]..]", ++ .oneline = "issues multiple write requests at once", ++ .help = multiwrite_help, ++}; ++ ++static int multiwrite_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ struct timeval t1, t2; ++ int Cflag = 0, qflag = 0; ++ int c, cnt; ++ char **buf; ++ int64_t offset, first_offset = 0; ++ /* Some compilers get confused and warn if this is not initialized. */ ++ int total = 0; ++ int nr_iov; ++ int nr_reqs; ++ int pattern = 0xcd; ++ QEMUIOVector *qiovs; ++ int i; ++ BlockRequest *reqs; ++ ++ while ((c = getopt(argc, argv, "CqP:")) != EOF) { ++ switch (c) { ++ case 'C': ++ Cflag = 1; ++ break; ++ case 'q': ++ qflag = 1; ++ break; ++ case 'P': ++ pattern = parse_pattern(optarg); ++ if (pattern < 0) { ++ return 0; ++ } ++ break; ++ default: ++ return command_usage(&writev_cmd); ++ } ++ } ++ ++ if (optind > argc - 2) { ++ return command_usage(&writev_cmd); ++ } ++ ++ nr_reqs = 1; ++ for (i = optind; i < argc; i++) { ++ if (!strcmp(argv[i], ";")) { ++ nr_reqs++; ++ } ++ } ++ ++ reqs = g_malloc0(nr_reqs * sizeof(*reqs)); ++ buf = g_malloc0(nr_reqs * sizeof(*buf)); ++ qiovs = g_malloc(nr_reqs * sizeof(*qiovs)); ++ ++ for (i = 0; i < nr_reqs && optind < argc; i++) { ++ int j; ++ ++ /* Read the offset of the request */ ++ offset = cvtnum(argv[optind]); ++ if (offset < 0) { ++ printf("non-numeric offset argument -- %s\n", argv[optind]); ++ goto out; ++ } ++ optind++; ++ ++ if (offset & 0x1ff) { ++ printf("offset %lld is not sector aligned\n", ++ (long long)offset); ++ goto out; ++ } ++ ++ if (i == 0) { ++ first_offset = offset; ++ } ++ ++ /* Read lengths for qiov entries */ ++ for (j = optind; j < argc; j++) { ++ if (!strcmp(argv[j], ";")) { ++ break; ++ } ++ } ++ ++ nr_iov = j - optind; ++ ++ /* Build request */ ++ buf[i] = create_iovec(bs, &qiovs[i], &argv[optind], nr_iov, pattern); ++ if (buf[i] == NULL) { ++ goto out; ++ } ++ ++ reqs[i].qiov = &qiovs[i]; ++ reqs[i].sector = offset >> 9; ++ reqs[i].nb_sectors = reqs[i].qiov->size >> 9; ++ ++ optind = j + 1; ++ ++ pattern++; ++ } ++ ++ /* If there were empty requests at the end, ignore them */ ++ nr_reqs = i; ++ ++ gettimeofday(&t1, NULL); ++ cnt = do_aio_multiwrite(bs, reqs, nr_reqs, &total); ++ gettimeofday(&t2, NULL); ++ ++ if (cnt < 0) { ++ printf("aio_multiwrite failed: %s\n", strerror(-cnt)); ++ goto out; ++ } ++ ++ if (qflag) { ++ goto out; ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, t1); ++ print_report("wrote", &t2, first_offset, total, total, cnt, Cflag); ++out: ++ for (i = 0; i < nr_reqs; i++) { ++ qemu_io_free(buf[i]); ++ if (reqs[i].qiov != NULL) { ++ qemu_iovec_destroy(&qiovs[i]); ++ } ++ } ++ g_free(buf); ++ g_free(reqs); ++ g_free(qiovs); ++ return 0; ++} ++ ++struct aio_ctx { ++ QEMUIOVector qiov; ++ int64_t offset; ++ char *buf; ++ int qflag; ++ int vflag; ++ int Cflag; ++ int Pflag; ++ int pattern; ++ struct timeval t1; ++}; ++ ++static void aio_write_done(void *opaque, int ret) ++{ ++ struct aio_ctx *ctx = opaque; ++ struct timeval t2; ++ ++ gettimeofday(&t2, NULL); ++ ++ ++ if (ret < 0) { ++ printf("aio_write failed: %s\n", strerror(-ret)); ++ goto out; ++ } ++ ++ if (ctx->qflag) { ++ goto out; ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, ctx->t1); ++ print_report("wrote", &t2, ctx->offset, ctx->qiov.size, ++ ctx->qiov.size, 1, ctx->Cflag); ++out: ++ qemu_io_free(ctx->buf); ++ qemu_iovec_destroy(&ctx->qiov); ++ g_free(ctx); ++} ++ ++static void aio_read_done(void *opaque, int ret) ++{ ++ struct aio_ctx *ctx = opaque; ++ struct timeval t2; ++ ++ gettimeofday(&t2, NULL); ++ ++ if (ret < 0) { ++ printf("readv failed: %s\n", strerror(-ret)); ++ goto out; ++ } ++ ++ if (ctx->Pflag) { ++ void *cmp_buf = g_malloc(ctx->qiov.size); ++ ++ memset(cmp_buf, ctx->pattern, ctx->qiov.size); ++ if (memcmp(ctx->buf, cmp_buf, ctx->qiov.size)) { ++ printf("Pattern verification failed at offset %" ++ PRId64 ", %zd bytes\n", ctx->offset, ctx->qiov.size); ++ } ++ g_free(cmp_buf); ++ } ++ ++ if (ctx->qflag) { ++ goto out; ++ } ++ ++ if (ctx->vflag) { ++ dump_buffer(ctx->buf, ctx->offset, ctx->qiov.size); ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ t2 = tsub(t2, ctx->t1); ++ print_report("read", &t2, ctx->offset, ctx->qiov.size, ++ ctx->qiov.size, 1, ctx->Cflag); ++out: ++ qemu_io_free(ctx->buf); ++ qemu_iovec_destroy(&ctx->qiov); ++ g_free(ctx); ++} ++ ++static void aio_read_help(void) ++{ ++ printf( ++"\n" ++" asynchronously reads a range of bytes from the given offset\n" ++"\n" ++" Example:\n" ++" 'aio_read -v 512 1k 1k ' - dumps 2 kilobytes read from 512 bytes into the file\n" ++"\n" ++" Reads a segment of the currently open file, optionally dumping it to the\n" ++" standard output stream (with -v option) for subsequent inspection.\n" ++" The read is performed asynchronously and the aio_flush command must be\n" ++" used to ensure all outstanding aio requests have been completed.\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -P, -- use a pattern to verify read data\n" ++" -v, -- dump buffer to standard output\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++"\n"); ++} ++ ++static int aio_read_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t aio_read_cmd = { ++ .name = "aio_read", ++ .cfunc = aio_read_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-Cqv] [-P pattern ] off len [len..]", ++ .oneline = "asynchronously reads a number of bytes", ++ .help = aio_read_help, ++}; ++ ++static int aio_read_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int nr_iov, c; ++ struct aio_ctx *ctx = g_new0(struct aio_ctx, 1); ++ ++ while ((c = getopt(argc, argv, "CP:qv")) != EOF) { ++ switch (c) { ++ case 'C': ++ ctx->Cflag = 1; ++ break; ++ case 'P': ++ ctx->Pflag = 1; ++ ctx->pattern = parse_pattern(optarg); ++ if (ctx->pattern < 0) { ++ g_free(ctx); ++ return 0; ++ } ++ break; ++ case 'q': ++ ctx->qflag = 1; ++ break; ++ case 'v': ++ ctx->vflag = 1; ++ break; ++ default: ++ g_free(ctx); ++ return command_usage(&aio_read_cmd); ++ } ++ } ++ ++ if (optind > argc - 2) { ++ g_free(ctx); ++ return command_usage(&aio_read_cmd); ++ } ++ ++ ctx->offset = cvtnum(argv[optind]); ++ if (ctx->offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ g_free(ctx); ++ return 0; ++ } ++ optind++; ++ ++ if (ctx->offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ ctx->offset); ++ g_free(ctx); ++ return 0; ++ } ++ ++ nr_iov = argc - optind; ++ ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, 0xab); ++ if (ctx->buf == NULL) { ++ g_free(ctx); ++ return 0; ++ } ++ ++ gettimeofday(&ctx->t1, NULL); ++ bdrv_aio_readv(bs, ctx->offset >> 9, &ctx->qiov, ++ ctx->qiov.size >> 9, aio_read_done, ctx); ++ return 0; ++} ++ ++static void aio_write_help(void) ++{ ++ printf( ++"\n" ++" asynchronously writes a range of bytes from the given offset source\n" ++" from multiple buffers\n" ++"\n" ++" Example:\n" ++" 'aio_write 512 1k 1k' - writes 2 kilobytes at 512 bytes into the open file\n" ++"\n" ++" Writes into a segment of the currently open file, using a buffer\n" ++" filled with a set pattern (0xcdcdcdcd).\n" ++" The write is performed asynchronously and the aio_flush command must be\n" ++" used to ensure all outstanding aio requests have been completed.\n" ++" -P, -- use different pattern to fill file\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++"\n"); ++} ++ ++static int aio_write_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t aio_write_cmd = { ++ .name = "aio_write", ++ .cfunc = aio_write_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-Cq] [-P pattern ] off len [len..]", ++ .oneline = "asynchronously writes a number of bytes", ++ .help = aio_write_help, ++}; ++ ++static int aio_write_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int nr_iov, c; ++ int pattern = 0xcd; ++ struct aio_ctx *ctx = g_new0(struct aio_ctx, 1); ++ ++ while ((c = getopt(argc, argv, "CqP:")) != EOF) { ++ switch (c) { ++ case 'C': ++ ctx->Cflag = 1; ++ break; ++ case 'q': ++ ctx->qflag = 1; ++ break; ++ case 'P': ++ pattern = parse_pattern(optarg); ++ if (pattern < 0) { ++ g_free(ctx); ++ return 0; ++ } ++ break; ++ default: ++ g_free(ctx); ++ return command_usage(&aio_write_cmd); ++ } ++ } ++ ++ if (optind > argc - 2) { ++ g_free(ctx); ++ return command_usage(&aio_write_cmd); ++ } ++ ++ ctx->offset = cvtnum(argv[optind]); ++ if (ctx->offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ g_free(ctx); ++ return 0; ++ } ++ optind++; ++ ++ if (ctx->offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ ctx->offset); ++ g_free(ctx); ++ return 0; ++ } ++ ++ nr_iov = argc - optind; ++ ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, pattern); ++ if (ctx->buf == NULL) { ++ g_free(ctx); ++ return 0; ++ } ++ ++ gettimeofday(&ctx->t1, NULL); ++ bdrv_aio_writev(bs, ctx->offset >> 9, &ctx->qiov, ++ ctx->qiov.size >> 9, aio_write_done, ctx); ++ return 0; ++} ++ ++static int aio_flush_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ bdrv_drain_all(); ++ return 0; ++} ++ ++static const cmdinfo_t aio_flush_cmd = { ++ .name = "aio_flush", ++ .cfunc = aio_flush_f, ++ .oneline = "completes all outstanding aio requests" ++}; ++ ++static int flush_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ bdrv_flush(bs); ++ return 0; ++} ++ ++static const cmdinfo_t flush_cmd = { ++ .name = "flush", ++ .altname = "f", ++ .cfunc = flush_f, ++ .oneline = "flush all in-core file state to disk", ++}; ++ ++static int truncate_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int64_t offset; ++ int ret; ++ ++ offset = cvtnum(argv[1]); ++ if (offset < 0) { ++ printf("non-numeric truncate argument -- %s\n", argv[1]); ++ return 0; ++ } ++ ++ ret = bdrv_truncate(bs, offset); ++ if (ret < 0) { ++ printf("truncate: %s\n", strerror(-ret)); ++ return 0; ++ } ++ ++ return 0; ++} ++ ++static const cmdinfo_t truncate_cmd = { ++ .name = "truncate", ++ .altname = "t", ++ .cfunc = truncate_f, ++ .argmin = 1, ++ .argmax = 1, ++ .args = "off", ++ .oneline = "truncates the current file at the given offset", ++}; ++ ++static int length_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int64_t size; ++ char s1[64]; ++ ++ size = bdrv_getlength(bs); ++ if (size < 0) { ++ printf("getlength: %s\n", strerror(-size)); ++ return 0; ++ } ++ ++ cvtstr(size, s1, sizeof(s1)); ++ printf("%s\n", s1); ++ return 0; ++} ++ ++ ++static const cmdinfo_t length_cmd = { ++ .name = "length", ++ .altname = "l", ++ .cfunc = length_f, ++ .oneline = "gets the length of the current file", ++}; ++ ++ ++static int info_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ BlockDriverInfo bdi; ++ ImageInfoSpecific *spec_info; ++ char s1[64], s2[64]; ++ int ret; ++ ++ if (bs->drv && bs->drv->format_name) { ++ printf("format name: %s\n", bs->drv->format_name); ++ } ++ if (bs->drv && bs->drv->protocol_name) { ++ printf("format name: %s\n", bs->drv->protocol_name); ++ } ++ ++ ret = bdrv_get_info(bs, &bdi); ++ if (ret) { ++ return 0; ++ } ++ ++ cvtstr(bdi.cluster_size, s1, sizeof(s1)); ++ cvtstr(bdi.vm_state_offset, s2, sizeof(s2)); ++ ++ printf("cluster size: %s\n", s1); ++ printf("vm state offset: %s\n", s2); ++ ++ spec_info = bdrv_get_specific_info(bs); ++ if (spec_info) { ++ printf("Format specific information:\n"); ++ bdrv_image_info_specific_dump(fprintf, stdout, spec_info); ++ qapi_free_ImageInfoSpecific(spec_info); ++ } ++ ++ return 0; ++} ++ ++ ++ ++static const cmdinfo_t info_cmd = { ++ .name = "info", ++ .altname = "i", ++ .cfunc = info_f, ++ .oneline = "prints information about the current file", ++}; ++ ++static void discard_help(void) ++{ ++ printf( ++"\n" ++" discards a range of bytes from the given offset\n" ++"\n" ++" Example:\n" ++" 'discard 512 1k' - discards 1 kilobyte from 512 bytes into the file\n" ++"\n" ++" Discards a segment of the currently open file.\n" ++" -C, -- report statistics in a machine parsable format\n" ++" -q, -- quiet mode, do not show I/O statistics\n" ++"\n"); ++} ++ ++static int discard_f(BlockDriverState *bs, int argc, char **argv); ++ ++static const cmdinfo_t discard_cmd = { ++ .name = "discard", ++ .altname = "d", ++ .cfunc = discard_f, ++ .argmin = 2, ++ .argmax = -1, ++ .args = "[-Cq] off len", ++ .oneline = "discards a number of bytes at a specified offset", ++ .help = discard_help, ++}; ++ ++static int discard_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ struct timeval t1, t2; ++ int Cflag = 0, qflag = 0; ++ int c, ret; ++ int64_t offset; ++ int count; ++ ++ while ((c = getopt(argc, argv, "Cq")) != EOF) { ++ switch (c) { ++ case 'C': ++ Cflag = 1; ++ break; ++ case 'q': ++ qflag = 1; ++ break; ++ default: ++ return command_usage(&discard_cmd); ++ } ++ } ++ ++ if (optind != argc - 2) { ++ return command_usage(&discard_cmd); ++ } ++ ++ offset = cvtnum(argv[optind]); ++ if (offset < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ ++ optind++; ++ count = cvtnum(argv[optind]); ++ if (count < 0) { ++ printf("non-numeric length argument -- %s\n", argv[optind]); ++ return 0; ++ } ++ ++ gettimeofday(&t1, NULL); ++ ret = bdrv_discard(bs, offset >> BDRV_SECTOR_BITS, ++ count >> BDRV_SECTOR_BITS); ++ gettimeofday(&t2, NULL); ++ ++ if (ret < 0) { ++ printf("discard failed: %s\n", strerror(-ret)); ++ goto out; ++ } ++ ++ /* Finally, report back -- -C gives a parsable format */ ++ if (!qflag) { ++ t2 = tsub(t2, t1); ++ print_report("discard", &t2, offset, count, count, 1, Cflag); ++ } ++ ++out: ++ return 0; ++} ++ ++static int alloc_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int64_t offset, sector_num; ++ int nb_sectors, remaining; ++ char s1[64]; ++ int num, sum_alloc; ++ int ret; ++ ++ offset = cvtnum(argv[1]); ++ if (offset < 0) { ++ printf("non-numeric offset argument -- %s\n", argv[1]); ++ return 0; ++ } else if (offset & 0x1ff) { ++ printf("offset %" PRId64 " is not sector aligned\n", ++ offset); ++ return 0; ++ } ++ ++ if (argc == 3) { ++ nb_sectors = cvtnum(argv[2]); ++ if (nb_sectors < 0) { ++ printf("non-numeric length argument -- %s\n", argv[2]); ++ return 0; ++ } ++ } else { ++ nb_sectors = 1; ++ } ++ ++ remaining = nb_sectors; ++ sum_alloc = 0; ++ sector_num = offset >> 9; ++ while (remaining) { ++ ret = bdrv_is_allocated(bs, sector_num, remaining, &num); ++ if (ret < 0) { ++ printf("is_allocated failed: %s\n", strerror(-ret)); ++ return 0; ++ } ++ sector_num += num; ++ remaining -= num; ++ if (ret) { ++ sum_alloc += num; ++ } ++ if (num == 0) { ++ nb_sectors -= remaining; ++ remaining = 0; ++ } ++ } ++ ++ cvtstr(offset, s1, sizeof(s1)); ++ ++ printf("%d/%d sectors allocated at offset %s\n", ++ sum_alloc, nb_sectors, s1); ++ return 0; ++} ++ ++static const cmdinfo_t alloc_cmd = { ++ .name = "alloc", ++ .altname = "a", ++ .argmin = 1, ++ .argmax = 2, ++ .cfunc = alloc_f, ++ .args = "off [sectors]", ++ .oneline = "checks if a sector is present in the file", ++}; ++ ++static int map_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int64_t offset; ++ int64_t nb_sectors; ++ char s1[64]; ++ int num, num_checked; ++ int ret; ++ const char *retstr; ++ ++ offset = 0; ++ nb_sectors = bs->total_sectors; ++ ++ do { ++ num_checked = MIN(nb_sectors, INT_MAX); ++ ret = bdrv_is_allocated(bs, offset, num_checked, &num); ++ retstr = ret ? " allocated" : "not allocated"; ++ cvtstr(offset << 9ULL, s1, sizeof(s1)); ++ printf("[% 24" PRId64 "] % 8d/% 8d sectors %s at offset %s (%d)\n", ++ offset << 9ULL, num, num_checked, retstr, s1, ret); ++ ++ offset += num; ++ nb_sectors -= num; ++ } while (offset < bs->total_sectors); ++ ++ return 0; ++} ++ ++static const cmdinfo_t map_cmd = { ++ .name = "map", ++ .argmin = 0, ++ .argmax = 0, ++ .cfunc = map_f, ++ .args = "", ++ .oneline = "prints the allocated areas of a file", ++}; ++ ++static int break_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int ret; ++ ++ ret = bdrv_debug_breakpoint(bs, argv[1], argv[2]); ++ if (ret < 0) { ++ printf("Could not set breakpoint: %s\n", strerror(-ret)); ++ } ++ ++ return 0; ++} ++ ++static const cmdinfo_t break_cmd = { ++ .name = "break", ++ .argmin = 2, ++ .argmax = 2, ++ .cfunc = break_f, ++ .args = "event tag", ++ .oneline = "sets a breakpoint on event and tags the stopped " ++ "request as tag", ++}; ++ ++static int resume_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ int ret; ++ ++ ret = bdrv_debug_resume(bs, argv[1]); ++ if (ret < 0) { ++ printf("Could not resume request: %s\n", strerror(-ret)); ++ } ++ ++ return 0; ++} ++ ++static const cmdinfo_t resume_cmd = { ++ .name = "resume", ++ .argmin = 1, ++ .argmax = 1, ++ .cfunc = resume_f, ++ .args = "tag", ++ .oneline = "resumes the request tagged as tag", ++}; ++ ++static int wait_break_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ while (!bdrv_debug_is_suspended(bs, argv[1])) { ++ qemu_aio_wait(); ++ } ++ ++ return 0; ++} ++ ++static const cmdinfo_t wait_break_cmd = { ++ .name = "wait_break", ++ .argmin = 1, ++ .argmax = 1, ++ .cfunc = wait_break_f, ++ .args = "tag", ++ .oneline = "waits for the suspension of a request", ++}; ++ ++static int abort_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ abort(); ++} ++ ++static const cmdinfo_t abort_cmd = { ++ .name = "abort", ++ .cfunc = abort_f, ++ .flags = CMD_NOFILE_OK, ++ .oneline = "simulate a program crash using abort(3)", ++}; ++ ++static void sleep_cb(void *opaque) ++{ ++ bool *expired = opaque; ++ *expired = true; ++} ++ ++static int sleep_f(BlockDriverState *bs, int argc, char **argv) ++{ ++ char *endptr; ++ long ms; ++ struct QEMUTimer *timer; ++ bool expired = false; ++ ++ ms = strtol(argv[1], &endptr, 0); ++ if (ms < 0 || *endptr != '\0') { ++ printf("%s is not a valid number\n", argv[1]); ++ return 0; ++ } ++ ++ timer = qemu_new_timer_ns(host_clock, sleep_cb, &expired); ++ qemu_mod_timer(timer, qemu_get_clock_ns(host_clock) + SCALE_MS * ms); ++ ++ while (!expired) { ++ main_loop_wait(false); ++ } ++ ++ qemu_free_timer(timer); ++ ++ return 0; ++} ++ ++static const cmdinfo_t sleep_cmd = { ++ .name = "sleep", ++ .argmin = 1, ++ .argmax = 1, ++ .cfunc = sleep_f, ++ .flags = CMD_NOFILE_OK, ++ .oneline = "waits for the given value in milliseconds", ++}; ++ ++ ++static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) ++{ ++ if (ct->flags & CMD_FLAG_GLOBAL) { ++ return 1; ++ } ++ if (!(ct->flags & CMD_NOFILE_OK) && !bs) { ++ fprintf(stderr, "no file open, try 'help open'\n"); ++ return 0; ++ } ++ return 1; ++} ++ ++static void __attribute((constructor)) init_qemuio_commands(void) ++{ ++ /* initialize commands */ ++ help_init(); ++ add_command(&read_cmd); ++ add_command(&readv_cmd); ++ add_command(&write_cmd); ++ add_command(&writev_cmd); ++ add_command(&multiwrite_cmd); ++ add_command(&aio_read_cmd); ++ add_command(&aio_write_cmd); ++ add_command(&aio_flush_cmd); ++ add_command(&flush_cmd); ++ add_command(&truncate_cmd); ++ add_command(&length_cmd); ++ add_command(&info_cmd); ++ add_command(&discard_cmd); ++ add_command(&alloc_cmd); ++ add_command(&map_cmd); ++ add_command(&break_cmd); ++ add_command(&resume_cmd); ++ add_command(&wait_break_cmd); ++ add_command(&abort_cmd); ++ add_command(&sleep_cmd); ++ ++ add_check_command(init_check_command); ++} +diff --git a/qemu-io.c b/qemu-io.c +index c3cc4f3..4f1c808 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -31,1761 +31,8 @@ + char *progname; + + BlockDriverState *qemuio_bs; +-static int misalign; + +-static int64_t cvtnum(const char *s) +-{ +- char *end; +- return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); +-} +- +-/* +- * Parse the pattern argument to various sub-commands. +- * +- * Because the pattern is used as an argument to memset it must evaluate +- * to an unsigned integer that fits into a single byte. +- */ +-static int parse_pattern(const char *arg) +-{ +- char *endptr = NULL; +- long pattern; +- +- pattern = strtol(arg, &endptr, 0); +- if (pattern < 0 || pattern > UCHAR_MAX || *endptr != '\0') { +- printf("%s is not a valid pattern byte\n", arg); +- return -1; +- } +- +- return pattern; +-} +- +-/* +- * Memory allocation helpers. +- * +- * Make sure memory is aligned by default, or purposefully misaligned if +- * that is specified on the command line. +- */ +- +-#define MISALIGN_OFFSET 16 +-static void *qemu_io_alloc(BlockDriverState *bs, size_t len, int pattern) +-{ +- void *buf; +- +- if (misalign) { +- len += MISALIGN_OFFSET; +- } +- buf = qemu_blockalign(bs, len); +- memset(buf, pattern, len); +- if (misalign) { +- buf += MISALIGN_OFFSET; +- } +- return buf; +-} +- +-static void qemu_io_free(void *p) +-{ +- if (misalign) { +- p -= MISALIGN_OFFSET; +- } +- qemu_vfree(p); +-} +- +-static void dump_buffer(const void *buffer, int64_t offset, int len) +-{ +- int i, j; +- const uint8_t *p; +- +- for (i = 0, p = buffer; i < len; i += 16) { +- const uint8_t *s = p; +- +- printf("%08" PRIx64 ": ", offset + i); +- for (j = 0; j < 16 && i + j < len; j++, p++) { +- printf("%02x ", *p); +- } +- printf(" "); +- for (j = 0; j < 16 && i + j < len; j++, s++) { +- if (isalnum(*s)) { +- printf("%c", *s); +- } else { +- printf("."); +- } +- } +- printf("\n"); +- } +-} +- +-static void print_report(const char *op, struct timeval *t, int64_t offset, +- int count, int total, int cnt, int Cflag) +-{ +- char s1[64], s2[64], ts[64]; +- +- timestr(t, ts, sizeof(ts), Cflag ? VERBOSE_FIXED_TIME : 0); +- if (!Cflag) { +- cvtstr((double)total, s1, sizeof(s1)); +- cvtstr(tdiv((double)total, *t), s2, sizeof(s2)); +- printf("%s %d/%d bytes at offset %" PRId64 "\n", +- op, total, count, offset); +- printf("%s, %d ops; %s (%s/sec and %.4f ops/sec)\n", +- s1, cnt, ts, s2, tdiv((double)cnt, *t)); +- } else {/* bytes,ops,time,bytes/sec,ops/sec */ +- printf("%d,%d,%s,%.3f,%.3f\n", +- total, cnt, ts, +- tdiv((double)total, *t), +- tdiv((double)cnt, *t)); +- } +-} +- +-/* +- * Parse multiple length statements for vectored I/O, and construct an I/O +- * vector matching it. +- */ +-static void * +-create_iovec(BlockDriverState *bs, QEMUIOVector *qiov, char **argv, int nr_iov, +- int pattern) +-{ +- size_t *sizes = g_new0(size_t, nr_iov); +- size_t count = 0; +- void *buf = NULL; +- void *p; +- int i; +- +- for (i = 0; i < nr_iov; i++) { +- char *arg = argv[i]; +- int64_t len; +- +- len = cvtnum(arg); +- if (len < 0) { +- printf("non-numeric length argument -- %s\n", arg); +- goto fail; +- } +- +- /* should be SIZE_T_MAX, but that doesn't exist */ +- if (len > INT_MAX) { +- printf("too large length argument -- %s\n", arg); +- goto fail; +- } +- +- if (len & 0x1ff) { +- printf("length argument %" PRId64 +- " is not sector aligned\n", len); +- goto fail; +- } +- +- sizes[i] = len; +- count += len; +- } +- +- qemu_iovec_init(qiov, nr_iov); +- +- buf = p = qemu_io_alloc(bs, count, pattern); +- +- for (i = 0; i < nr_iov; i++) { +- qemu_iovec_add(qiov, p, sizes[i]); +- p += sizes[i]; +- } +- +-fail: +- g_free(sizes); +- return buf; +-} +- +-static int do_read(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) +-{ +- int ret; +- +- ret = bdrv_read(bs, offset >> 9, (uint8_t *)buf, count >> 9); +- if (ret < 0) { +- return ret; +- } +- *total = count; +- return 1; +-} +- +-static int do_write(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) +-{ +- int ret; +- +- ret = bdrv_write(bs, offset >> 9, (uint8_t *)buf, count >> 9); +- if (ret < 0) { +- return ret; +- } +- *total = count; +- return 1; +-} +- +-static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) +-{ +- *total = bdrv_pread(bs, offset, (uint8_t *)buf, count); +- if (*total < 0) { +- return *total; +- } +- return 1; +-} +- +-static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) +-{ +- *total = bdrv_pwrite(bs, offset, (uint8_t *)buf, count); +- if (*total < 0) { +- return *total; +- } +- return 1; +-} +- +-typedef struct { +- BlockDriverState *bs; +- int64_t offset; +- int count; +- int *total; +- int ret; +- bool done; +-} CoWriteZeroes; +- +-static void coroutine_fn co_write_zeroes_entry(void *opaque) +-{ +- CoWriteZeroes *data = opaque; +- +- data->ret = bdrv_co_write_zeroes(data->bs, data->offset / BDRV_SECTOR_SIZE, +- data->count / BDRV_SECTOR_SIZE, 0); +- data->done = true; +- if (data->ret < 0) { +- *data->total = data->ret; +- return; +- } +- +- *data->total = data->count; +-} +- +-static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count, +- int *total) +-{ +- Coroutine *co; +- CoWriteZeroes data = { +- .bs = bs, +- .offset = offset, +- .count = count, +- .total = total, +- .done = false, +- }; +- +- co = qemu_coroutine_create(co_write_zeroes_entry); +- qemu_coroutine_enter(co, &data); +- while (!data.done) { +- qemu_aio_wait(); +- } +- if (data.ret < 0) { +- return data.ret; +- } else { +- return 1; +- } +-} +- +-static int do_write_compressed(BlockDriverState *bs, char *buf, int64_t offset, +- int count, int *total) +-{ +- int ret; +- +- ret = bdrv_write_compressed(bs, offset >> 9, (uint8_t *)buf, count >> 9); +- if (ret < 0) { +- return ret; +- } +- *total = count; +- return 1; +-} +- +-static int do_load_vmstate(BlockDriverState *bs, char *buf, int64_t offset, +- int count, int *total) +-{ +- *total = bdrv_load_vmstate(bs, (uint8_t *)buf, offset, count); +- if (*total < 0) { +- return *total; +- } +- return 1; +-} +- +-static int do_save_vmstate(BlockDriverState *bs, char *buf, int64_t offset, +- int count, int *total) +-{ +- *total = bdrv_save_vmstate(bs, (uint8_t *)buf, offset, count); +- if (*total < 0) { +- return *total; +- } +- return 1; +-} +- +-#define NOT_DONE 0x7fffffff +-static void aio_rw_done(void *opaque, int ret) +-{ +- *(int *)opaque = ret; +-} +- +-static int do_aio_readv(BlockDriverState *bs, QEMUIOVector *qiov, +- int64_t offset, int *total) +-{ +- int async_ret = NOT_DONE; +- +- bdrv_aio_readv(bs, offset >> 9, qiov, qiov->size >> 9, +- aio_rw_done, &async_ret); +- while (async_ret == NOT_DONE) { +- main_loop_wait(false); +- } +- +- *total = qiov->size; +- return async_ret < 0 ? async_ret : 1; +-} +- +-static int do_aio_writev(BlockDriverState *bs, QEMUIOVector *qiov, +- int64_t offset, int *total) +-{ +- int async_ret = NOT_DONE; +- +- bdrv_aio_writev(bs, offset >> 9, qiov, qiov->size >> 9, +- aio_rw_done, &async_ret); +- while (async_ret == NOT_DONE) { +- main_loop_wait(false); +- } +- +- *total = qiov->size; +- return async_ret < 0 ? async_ret : 1; +-} +- +-struct multiwrite_async_ret { +- int num_done; +- int error; +-}; +- +-static void multiwrite_cb(void *opaque, int ret) +-{ +- struct multiwrite_async_ret *async_ret = opaque; +- +- async_ret->num_done++; +- if (ret < 0) { +- async_ret->error = ret; +- } +-} +- +-static int do_aio_multiwrite(BlockDriverState *bs, BlockRequest* reqs, +- int num_reqs, int *total) +-{ +- int i, ret; +- struct multiwrite_async_ret async_ret = { +- .num_done = 0, +- .error = 0, +- }; +- +- *total = 0; +- for (i = 0; i < num_reqs; i++) { +- reqs[i].cb = multiwrite_cb; +- reqs[i].opaque = &async_ret; +- *total += reqs[i].qiov->size; +- } +- +- ret = bdrv_aio_multiwrite(bs, reqs, num_reqs); +- if (ret < 0) { +- return ret; +- } +- +- while (async_ret.num_done < num_reqs) { +- main_loop_wait(false); +- } +- +- return async_ret.error < 0 ? async_ret.error : 1; +-} +- +-static void read_help(void) +-{ +- printf( +-"\n" +-" reads a range of bytes from the given offset\n" +-"\n" +-" Example:\n" +-" 'read -v 512 1k' - dumps 1 kilobyte read from 512 bytes into the file\n" +-"\n" +-" Reads a segment of the currently open file, optionally dumping it to the\n" +-" standard output stream (with -v option) for subsequent inspection.\n" +-" -b, -- read from the VM state rather than the virtual disk\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -l, -- length for pattern verification (only with -P)\n" +-" -p, -- use bdrv_pread to read the file\n" +-" -P, -- use a pattern to verify read data\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-" -s, -- start offset for pattern verification (only with -P)\n" +-" -v, -- dump buffer to standard output\n" +-"\n"); +-} +- +-static int read_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t read_cmd = { +- .name = "read", +- .altname = "r", +- .cfunc = read_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-abCpqv] [-P pattern [-s off] [-l len]] off len", +- .oneline = "reads a number of bytes at a specified offset", +- .help = read_help, +-}; +- +-static int read_f(BlockDriverState *bs, int argc, char **argv) +-{ +- struct timeval t1, t2; +- int Cflag = 0, pflag = 0, qflag = 0, vflag = 0; +- int Pflag = 0, sflag = 0, lflag = 0, bflag = 0; +- int c, cnt; +- char *buf; +- int64_t offset; +- int count; +- /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; +- int pattern = 0, pattern_offset = 0, pattern_count = 0; +- +- while ((c = getopt(argc, argv, "bCl:pP:qs:v")) != EOF) { +- switch (c) { +- case 'b': +- bflag = 1; +- break; +- case 'C': +- Cflag = 1; +- break; +- case 'l': +- lflag = 1; +- pattern_count = cvtnum(optarg); +- if (pattern_count < 0) { +- printf("non-numeric length argument -- %s\n", optarg); +- return 0; +- } +- break; +- case 'p': +- pflag = 1; +- break; +- case 'P': +- Pflag = 1; +- pattern = parse_pattern(optarg); +- if (pattern < 0) { +- return 0; +- } +- break; +- case 'q': +- qflag = 1; +- break; +- case 's': +- sflag = 1; +- pattern_offset = cvtnum(optarg); +- if (pattern_offset < 0) { +- printf("non-numeric length argument -- %s\n", optarg); +- return 0; +- } +- break; +- case 'v': +- vflag = 1; +- break; +- default: +- return command_usage(&read_cmd); +- } +- } +- +- if (optind != argc - 2) { +- return command_usage(&read_cmd); +- } +- +- if (bflag && pflag) { +- printf("-b and -p cannot be specified at the same time\n"); +- return 0; +- } +- +- offset = cvtnum(argv[optind]); +- if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- +- optind++; +- count = cvtnum(argv[optind]); +- if (count < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- +- if (!Pflag && (lflag || sflag)) { +- return command_usage(&read_cmd); +- } +- +- if (!lflag) { +- pattern_count = count - pattern_offset; +- } +- +- if ((pattern_count < 0) || (pattern_count + pattern_offset > count)) { +- printf("pattern verification range exceeds end of read data\n"); +- return 0; +- } +- +- if (!pflag) { +- if (offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- offset); +- return 0; +- } +- if (count & 0x1ff) { +- printf("count %d is not sector aligned\n", +- count); +- return 0; +- } +- } +- +- buf = qemu_io_alloc(bs, count, 0xab); +- +- gettimeofday(&t1, NULL); +- if (pflag) { +- cnt = do_pread(bs, buf, offset, count, &total); +- } else if (bflag) { +- cnt = do_load_vmstate(bs, buf, offset, count, &total); +- } else { +- cnt = do_read(bs, buf, offset, count, &total); +- } +- gettimeofday(&t2, NULL); +- +- if (cnt < 0) { +- printf("read failed: %s\n", strerror(-cnt)); +- goto out; +- } +- +- if (Pflag) { +- void *cmp_buf = g_malloc(pattern_count); +- memset(cmp_buf, pattern, pattern_count); +- if (memcmp(buf + pattern_offset, cmp_buf, pattern_count)) { +- printf("Pattern verification failed at offset %" +- PRId64 ", %d bytes\n", +- offset + pattern_offset, pattern_count); +- } +- g_free(cmp_buf); +- } +- +- if (qflag) { +- goto out; +- } +- +- if (vflag) { +- dump_buffer(buf, offset, count); +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, t1); +- print_report("read", &t2, offset, count, total, cnt, Cflag); +- +-out: +- qemu_io_free(buf); +- +- return 0; +-} +- +-static void readv_help(void) +-{ +- printf( +-"\n" +-" reads a range of bytes from the given offset into multiple buffers\n" +-"\n" +-" Example:\n" +-" 'readv -v 512 1k 1k ' - dumps 2 kilobytes read from 512 bytes into the file\n" +-"\n" +-" Reads a segment of the currently open file, optionally dumping it to the\n" +-" standard output stream (with -v option) for subsequent inspection.\n" +-" Uses multiple iovec buffers if more than one byte range is specified.\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -P, -- use a pattern to verify read data\n" +-" -v, -- dump buffer to standard output\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-"\n"); +-} +- +-static int readv_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t readv_cmd = { +- .name = "readv", +- .cfunc = readv_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-Cqv] [-P pattern ] off len [len..]", +- .oneline = "reads a number of bytes at a specified offset", +- .help = readv_help, +-}; +- +-static int readv_f(BlockDriverState *bs, int argc, char **argv) +-{ +- struct timeval t1, t2; +- int Cflag = 0, qflag = 0, vflag = 0; +- int c, cnt; +- char *buf; +- int64_t offset; +- /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; +- int nr_iov; +- QEMUIOVector qiov; +- int pattern = 0; +- int Pflag = 0; +- +- while ((c = getopt(argc, argv, "CP:qv")) != EOF) { +- switch (c) { +- case 'C': +- Cflag = 1; +- break; +- case 'P': +- Pflag = 1; +- pattern = parse_pattern(optarg); +- if (pattern < 0) { +- return 0; +- } +- break; +- case 'q': +- qflag = 1; +- break; +- case 'v': +- vflag = 1; +- break; +- default: +- return command_usage(&readv_cmd); +- } +- } +- +- if (optind > argc - 2) { +- return command_usage(&readv_cmd); +- } +- +- +- offset = cvtnum(argv[optind]); +- if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- optind++; +- +- if (offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- offset); +- return 0; +- } +- +- nr_iov = argc - optind; +- buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, 0xab); +- if (buf == NULL) { +- return 0; +- } +- +- gettimeofday(&t1, NULL); +- cnt = do_aio_readv(bs, &qiov, offset, &total); +- gettimeofday(&t2, NULL); +- +- if (cnt < 0) { +- printf("readv failed: %s\n", strerror(-cnt)); +- goto out; +- } +- +- if (Pflag) { +- void *cmp_buf = g_malloc(qiov.size); +- memset(cmp_buf, pattern, qiov.size); +- if (memcmp(buf, cmp_buf, qiov.size)) { +- printf("Pattern verification failed at offset %" +- PRId64 ", %zd bytes\n", offset, qiov.size); +- } +- g_free(cmp_buf); +- } +- +- if (qflag) { +- goto out; +- } +- +- if (vflag) { +- dump_buffer(buf, offset, qiov.size); +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, t1); +- print_report("read", &t2, offset, qiov.size, total, cnt, Cflag); +- +-out: +- qemu_iovec_destroy(&qiov); +- qemu_io_free(buf); +- return 0; +-} +- +-static void write_help(void) +-{ +- printf( +-"\n" +-" writes a range of bytes from the given offset\n" +-"\n" +-" Example:\n" +-" 'write 512 1k' - writes 1 kilobyte at 512 bytes into the open file\n" +-"\n" +-" Writes into a segment of the currently open file, using a buffer\n" +-" filled with a set pattern (0xcdcdcdcd).\n" +-" -b, -- write to the VM state rather than the virtual disk\n" +-" -c, -- write compressed data with bdrv_write_compressed\n" +-" -p, -- use bdrv_pwrite to write the file\n" +-" -P, -- use different pattern to fill file\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-" -z, -- write zeroes using bdrv_co_write_zeroes\n" +-"\n"); +-} +- +-static int write_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t write_cmd = { +- .name = "write", +- .altname = "w", +- .cfunc = write_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-bcCpqz] [-P pattern ] off len", +- .oneline = "writes a number of bytes at a specified offset", +- .help = write_help, +-}; +- +-static int write_f(BlockDriverState *bs, int argc, char **argv) +-{ +- struct timeval t1, t2; +- int Cflag = 0, pflag = 0, qflag = 0, bflag = 0, Pflag = 0, zflag = 0; +- int cflag = 0; +- int c, cnt; +- char *buf = NULL; +- int64_t offset; +- int count; +- /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; +- int pattern = 0xcd; +- +- while ((c = getopt(argc, argv, "bcCpP:qz")) != EOF) { +- switch (c) { +- case 'b': +- bflag = 1; +- break; +- case 'c': +- cflag = 1; +- break; +- case 'C': +- Cflag = 1; +- break; +- case 'p': +- pflag = 1; +- break; +- case 'P': +- Pflag = 1; +- pattern = parse_pattern(optarg); +- if (pattern < 0) { +- return 0; +- } +- break; +- case 'q': +- qflag = 1; +- break; +- case 'z': +- zflag = 1; +- break; +- default: +- return command_usage(&write_cmd); +- } +- } +- +- if (optind != argc - 2) { +- return command_usage(&write_cmd); +- } +- +- if (bflag + pflag + zflag > 1) { +- printf("-b, -p, or -z cannot be specified at the same time\n"); +- return 0; +- } +- +- if (zflag && Pflag) { +- printf("-z and -P cannot be specified at the same time\n"); +- return 0; +- } +- +- offset = cvtnum(argv[optind]); +- if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- +- optind++; +- count = cvtnum(argv[optind]); +- if (count < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- +- if (!pflag) { +- if (offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- offset); +- return 0; +- } +- +- if (count & 0x1ff) { +- printf("count %d is not sector aligned\n", +- count); +- return 0; +- } +- } +- +- if (!zflag) { +- buf = qemu_io_alloc(bs, count, pattern); +- } +- +- gettimeofday(&t1, NULL); +- if (pflag) { +- cnt = do_pwrite(bs, buf, offset, count, &total); +- } else if (bflag) { +- cnt = do_save_vmstate(bs, buf, offset, count, &total); +- } else if (zflag) { +- cnt = do_co_write_zeroes(bs, offset, count, &total); +- } else if (cflag) { +- cnt = do_write_compressed(bs, buf, offset, count, &total); +- } else { +- cnt = do_write(bs, buf, offset, count, &total); +- } +- gettimeofday(&t2, NULL); +- +- if (cnt < 0) { +- printf("write failed: %s\n", strerror(-cnt)); +- goto out; +- } +- +- if (qflag) { +- goto out; +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, t1); +- print_report("wrote", &t2, offset, count, total, cnt, Cflag); +- +-out: +- if (!zflag) { +- qemu_io_free(buf); +- } +- +- return 0; +-} +- +-static void +-writev_help(void) +-{ +- printf( +-"\n" +-" writes a range of bytes from the given offset source from multiple buffers\n" +-"\n" +-" Example:\n" +-" 'write 512 1k 1k' - writes 2 kilobytes at 512 bytes into the open file\n" +-"\n" +-" Writes into a segment of the currently open file, using a buffer\n" +-" filled with a set pattern (0xcdcdcdcd).\n" +-" -P, -- use different pattern to fill file\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-"\n"); +-} +- +-static int writev_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t writev_cmd = { +- .name = "writev", +- .cfunc = writev_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-Cq] [-P pattern ] off len [len..]", +- .oneline = "writes a number of bytes at a specified offset", +- .help = writev_help, +-}; +- +-static int writev_f(BlockDriverState *bs, int argc, char **argv) +-{ +- struct timeval t1, t2; +- int Cflag = 0, qflag = 0; +- int c, cnt; +- char *buf; +- int64_t offset; +- /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; +- int nr_iov; +- int pattern = 0xcd; +- QEMUIOVector qiov; +- +- while ((c = getopt(argc, argv, "CqP:")) != EOF) { +- switch (c) { +- case 'C': +- Cflag = 1; +- break; +- case 'q': +- qflag = 1; +- break; +- case 'P': +- pattern = parse_pattern(optarg); +- if (pattern < 0) { +- return 0; +- } +- break; +- default: +- return command_usage(&writev_cmd); +- } +- } +- +- if (optind > argc - 2) { +- return command_usage(&writev_cmd); +- } +- +- offset = cvtnum(argv[optind]); +- if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- optind++; +- +- if (offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- offset); +- return 0; +- } +- +- nr_iov = argc - optind; +- buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, pattern); +- if (buf == NULL) { +- return 0; +- } +- +- gettimeofday(&t1, NULL); +- cnt = do_aio_writev(bs, &qiov, offset, &total); +- gettimeofday(&t2, NULL); +- +- if (cnt < 0) { +- printf("writev failed: %s\n", strerror(-cnt)); +- goto out; +- } +- +- if (qflag) { +- goto out; +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, t1); +- print_report("wrote", &t2, offset, qiov.size, total, cnt, Cflag); +-out: +- qemu_iovec_destroy(&qiov); +- qemu_io_free(buf); +- return 0; +-} +- +-static void multiwrite_help(void) +-{ +- printf( +-"\n" +-" writes a range of bytes from the given offset source from multiple buffers,\n" +-" in a batch of requests that may be merged by qemu\n" +-"\n" +-" Example:\n" +-" 'multiwrite 512 1k 1k ; 4k 1k'\n" +-" writes 2 kB at 512 bytes and 1 kB at 4 kB into the open file\n" +-"\n" +-" Writes into a segment of the currently open file, using a buffer\n" +-" filled with a set pattern (0xcdcdcdcd). The pattern byte is increased\n" +-" by one for each request contained in the multiwrite command.\n" +-" -P, -- use different pattern to fill file\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-"\n"); +-} +- +-static int multiwrite_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t multiwrite_cmd = { +- .name = "multiwrite", +- .cfunc = multiwrite_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-Cq] [-P pattern ] off len [len..] [; off len [len..]..]", +- .oneline = "issues multiple write requests at once", +- .help = multiwrite_help, +-}; +- +-static int multiwrite_f(BlockDriverState *bs, int argc, char **argv) +-{ +- struct timeval t1, t2; +- int Cflag = 0, qflag = 0; +- int c, cnt; +- char **buf; +- int64_t offset, first_offset = 0; +- /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; +- int nr_iov; +- int nr_reqs; +- int pattern = 0xcd; +- QEMUIOVector *qiovs; +- int i; +- BlockRequest *reqs; +- +- while ((c = getopt(argc, argv, "CqP:")) != EOF) { +- switch (c) { +- case 'C': +- Cflag = 1; +- break; +- case 'q': +- qflag = 1; +- break; +- case 'P': +- pattern = parse_pattern(optarg); +- if (pattern < 0) { +- return 0; +- } +- break; +- default: +- return command_usage(&writev_cmd); +- } +- } +- +- if (optind > argc - 2) { +- return command_usage(&writev_cmd); +- } +- +- nr_reqs = 1; +- for (i = optind; i < argc; i++) { +- if (!strcmp(argv[i], ";")) { +- nr_reqs++; +- } +- } +- +- reqs = g_malloc0(nr_reqs * sizeof(*reqs)); +- buf = g_malloc0(nr_reqs * sizeof(*buf)); +- qiovs = g_malloc(nr_reqs * sizeof(*qiovs)); +- +- for (i = 0; i < nr_reqs && optind < argc; i++) { +- int j; +- +- /* Read the offset of the request */ +- offset = cvtnum(argv[optind]); +- if (offset < 0) { +- printf("non-numeric offset argument -- %s\n", argv[optind]); +- goto out; +- } +- optind++; +- +- if (offset & 0x1ff) { +- printf("offset %lld is not sector aligned\n", +- (long long)offset); +- goto out; +- } +- +- if (i == 0) { +- first_offset = offset; +- } +- +- /* Read lengths for qiov entries */ +- for (j = optind; j < argc; j++) { +- if (!strcmp(argv[j], ";")) { +- break; +- } +- } +- +- nr_iov = j - optind; +- +- /* Build request */ +- buf[i] = create_iovec(bs, &qiovs[i], &argv[optind], nr_iov, pattern); +- if (buf[i] == NULL) { +- goto out; +- } +- +- reqs[i].qiov = &qiovs[i]; +- reqs[i].sector = offset >> 9; +- reqs[i].nb_sectors = reqs[i].qiov->size >> 9; +- +- optind = j + 1; +- +- pattern++; +- } +- +- /* If there were empty requests at the end, ignore them */ +- nr_reqs = i; +- +- gettimeofday(&t1, NULL); +- cnt = do_aio_multiwrite(bs, reqs, nr_reqs, &total); +- gettimeofday(&t2, NULL); +- +- if (cnt < 0) { +- printf("aio_multiwrite failed: %s\n", strerror(-cnt)); +- goto out; +- } +- +- if (qflag) { +- goto out; +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, t1); +- print_report("wrote", &t2, first_offset, total, total, cnt, Cflag); +-out: +- for (i = 0; i < nr_reqs; i++) { +- qemu_io_free(buf[i]); +- if (reqs[i].qiov != NULL) { +- qemu_iovec_destroy(&qiovs[i]); +- } +- } +- g_free(buf); +- g_free(reqs); +- g_free(qiovs); +- return 0; +-} +- +-struct aio_ctx { +- QEMUIOVector qiov; +- int64_t offset; +- char *buf; +- int qflag; +- int vflag; +- int Cflag; +- int Pflag; +- int pattern; +- struct timeval t1; +-}; +- +-static void aio_write_done(void *opaque, int ret) +-{ +- struct aio_ctx *ctx = opaque; +- struct timeval t2; +- +- gettimeofday(&t2, NULL); +- +- +- if (ret < 0) { +- printf("aio_write failed: %s\n", strerror(-ret)); +- goto out; +- } +- +- if (ctx->qflag) { +- goto out; +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, ctx->t1); +- print_report("wrote", &t2, ctx->offset, ctx->qiov.size, +- ctx->qiov.size, 1, ctx->Cflag); +-out: +- qemu_io_free(ctx->buf); +- qemu_iovec_destroy(&ctx->qiov); +- g_free(ctx); +-} +- +-static void aio_read_done(void *opaque, int ret) +-{ +- struct aio_ctx *ctx = opaque; +- struct timeval t2; +- +- gettimeofday(&t2, NULL); +- +- if (ret < 0) { +- printf("readv failed: %s\n", strerror(-ret)); +- goto out; +- } +- +- if (ctx->Pflag) { +- void *cmp_buf = g_malloc(ctx->qiov.size); +- +- memset(cmp_buf, ctx->pattern, ctx->qiov.size); +- if (memcmp(ctx->buf, cmp_buf, ctx->qiov.size)) { +- printf("Pattern verification failed at offset %" +- PRId64 ", %zd bytes\n", ctx->offset, ctx->qiov.size); +- } +- g_free(cmp_buf); +- } +- +- if (ctx->qflag) { +- goto out; +- } +- +- if (ctx->vflag) { +- dump_buffer(ctx->buf, ctx->offset, ctx->qiov.size); +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- t2 = tsub(t2, ctx->t1); +- print_report("read", &t2, ctx->offset, ctx->qiov.size, +- ctx->qiov.size, 1, ctx->Cflag); +-out: +- qemu_io_free(ctx->buf); +- qemu_iovec_destroy(&ctx->qiov); +- g_free(ctx); +-} +- +-static void aio_read_help(void) +-{ +- printf( +-"\n" +-" asynchronously reads a range of bytes from the given offset\n" +-"\n" +-" Example:\n" +-" 'aio_read -v 512 1k 1k ' - dumps 2 kilobytes read from 512 bytes into the file\n" +-"\n" +-" Reads a segment of the currently open file, optionally dumping it to the\n" +-" standard output stream (with -v option) for subsequent inspection.\n" +-" The read is performed asynchronously and the aio_flush command must be\n" +-" used to ensure all outstanding aio requests have been completed.\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -P, -- use a pattern to verify read data\n" +-" -v, -- dump buffer to standard output\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-"\n"); +-} +- +-static int aio_read_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t aio_read_cmd = { +- .name = "aio_read", +- .cfunc = aio_read_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-Cqv] [-P pattern ] off len [len..]", +- .oneline = "asynchronously reads a number of bytes", +- .help = aio_read_help, +-}; +- +-static int aio_read_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int nr_iov, c; +- struct aio_ctx *ctx = g_new0(struct aio_ctx, 1); +- +- while ((c = getopt(argc, argv, "CP:qv")) != EOF) { +- switch (c) { +- case 'C': +- ctx->Cflag = 1; +- break; +- case 'P': +- ctx->Pflag = 1; +- ctx->pattern = parse_pattern(optarg); +- if (ctx->pattern < 0) { +- g_free(ctx); +- return 0; +- } +- break; +- case 'q': +- ctx->qflag = 1; +- break; +- case 'v': +- ctx->vflag = 1; +- break; +- default: +- g_free(ctx); +- return command_usage(&aio_read_cmd); +- } +- } +- +- if (optind > argc - 2) { +- g_free(ctx); +- return command_usage(&aio_read_cmd); +- } +- +- ctx->offset = cvtnum(argv[optind]); +- if (ctx->offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- g_free(ctx); +- return 0; +- } +- optind++; +- +- if (ctx->offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- ctx->offset); +- g_free(ctx); +- return 0; +- } +- +- nr_iov = argc - optind; +- ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, 0xab); +- if (ctx->buf == NULL) { +- g_free(ctx); +- return 0; +- } +- +- gettimeofday(&ctx->t1, NULL); +- bdrv_aio_readv(bs, ctx->offset >> 9, &ctx->qiov, +- ctx->qiov.size >> 9, aio_read_done, ctx); +- return 0; +-} +- +-static void aio_write_help(void) +-{ +- printf( +-"\n" +-" asynchronously writes a range of bytes from the given offset source\n" +-" from multiple buffers\n" +-"\n" +-" Example:\n" +-" 'aio_write 512 1k 1k' - writes 2 kilobytes at 512 bytes into the open file\n" +-"\n" +-" Writes into a segment of the currently open file, using a buffer\n" +-" filled with a set pattern (0xcdcdcdcd).\n" +-" The write is performed asynchronously and the aio_flush command must be\n" +-" used to ensure all outstanding aio requests have been completed.\n" +-" -P, -- use different pattern to fill file\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-"\n"); +-} +- +-static int aio_write_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t aio_write_cmd = { +- .name = "aio_write", +- .cfunc = aio_write_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-Cq] [-P pattern ] off len [len..]", +- .oneline = "asynchronously writes a number of bytes", +- .help = aio_write_help, +-}; +- +-static int aio_write_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int nr_iov, c; +- int pattern = 0xcd; +- struct aio_ctx *ctx = g_new0(struct aio_ctx, 1); +- +- while ((c = getopt(argc, argv, "CqP:")) != EOF) { +- switch (c) { +- case 'C': +- ctx->Cflag = 1; +- break; +- case 'q': +- ctx->qflag = 1; +- break; +- case 'P': +- pattern = parse_pattern(optarg); +- if (pattern < 0) { +- g_free(ctx); +- return 0; +- } +- break; +- default: +- g_free(ctx); +- return command_usage(&aio_write_cmd); +- } +- } +- +- if (optind > argc - 2) { +- g_free(ctx); +- return command_usage(&aio_write_cmd); +- } +- +- ctx->offset = cvtnum(argv[optind]); +- if (ctx->offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- g_free(ctx); +- return 0; +- } +- optind++; +- +- if (ctx->offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- ctx->offset); +- g_free(ctx); +- return 0; +- } +- +- nr_iov = argc - optind; +- ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, pattern); +- if (ctx->buf == NULL) { +- g_free(ctx); +- return 0; +- } +- +- gettimeofday(&ctx->t1, NULL); +- bdrv_aio_writev(bs, ctx->offset >> 9, &ctx->qiov, +- ctx->qiov.size >> 9, aio_write_done, ctx); +- return 0; +-} +- +-static int aio_flush_f(BlockDriverState *bs, int argc, char **argv) +-{ +- bdrv_drain_all(); +- return 0; +-} +- +-static const cmdinfo_t aio_flush_cmd = { +- .name = "aio_flush", +- .cfunc = aio_flush_f, +- .oneline = "completes all outstanding aio requests" +-}; +- +-static int flush_f(BlockDriverState *bs, int argc, char **argv) +-{ +- bdrv_flush(bs); +- return 0; +-} +- +-static const cmdinfo_t flush_cmd = { +- .name = "flush", +- .altname = "f", +- .cfunc = flush_f, +- .oneline = "flush all in-core file state to disk", +-}; +- +-static int truncate_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int64_t offset; +- int ret; +- +- offset = cvtnum(argv[1]); +- if (offset < 0) { +- printf("non-numeric truncate argument -- %s\n", argv[1]); +- return 0; +- } +- +- ret = bdrv_truncate(bs, offset); +- if (ret < 0) { +- printf("truncate: %s\n", strerror(-ret)); +- return 0; +- } +- +- return 0; +-} +- +-static const cmdinfo_t truncate_cmd = { +- .name = "truncate", +- .altname = "t", +- .cfunc = truncate_f, +- .argmin = 1, +- .argmax = 1, +- .args = "off", +- .oneline = "truncates the current file at the given offset", +-}; +- +-static int length_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int64_t size; +- char s1[64]; +- +- size = bdrv_getlength(bs); +- if (size < 0) { +- printf("getlength: %s\n", strerror(-size)); +- return 0; +- } +- +- cvtstr(size, s1, sizeof(s1)); +- printf("%s\n", s1); +- return 0; +-} +- +- +-static const cmdinfo_t length_cmd = { +- .name = "length", +- .altname = "l", +- .cfunc = length_f, +- .oneline = "gets the length of the current file", +-}; +- +- +-static int info_f(BlockDriverState *bs, int argc, char **argv) +-{ +- BlockDriverInfo bdi; +- ImageInfoSpecific *spec_info; +- char s1[64], s2[64]; +- int ret; +- +- if (bs->drv && bs->drv->format_name) { +- printf("format name: %s\n", bs->drv->format_name); +- } +- if (bs->drv && bs->drv->protocol_name) { +- printf("format name: %s\n", bs->drv->protocol_name); +- } +- +- ret = bdrv_get_info(bs, &bdi); +- if (ret) { +- return 0; +- } +- +- cvtstr(bdi.cluster_size, s1, sizeof(s1)); +- cvtstr(bdi.vm_state_offset, s2, sizeof(s2)); +- +- printf("cluster size: %s\n", s1); +- printf("vm state offset: %s\n", s2); +- +- spec_info = bdrv_get_specific_info(bs); +- if (spec_info) { +- printf("Format specific information:\n"); +- bdrv_image_info_specific_dump(fprintf, stdout, spec_info); +- qapi_free_ImageInfoSpecific(spec_info); +- } +- +- return 0; +-} +- +- +- +-static const cmdinfo_t info_cmd = { +- .name = "info", +- .altname = "i", +- .cfunc = info_f, +- .oneline = "prints information about the current file", +-}; +- +-static void discard_help(void) +-{ +- printf( +-"\n" +-" discards a range of bytes from the given offset\n" +-"\n" +-" Example:\n" +-" 'discard 512 1k' - discards 1 kilobyte from 512 bytes into the file\n" +-"\n" +-" Discards a segment of the currently open file.\n" +-" -C, -- report statistics in a machine parsable format\n" +-" -q, -- quiet mode, do not show I/O statistics\n" +-"\n"); +-} +- +-static int discard_f(BlockDriverState *bs, int argc, char **argv); +- +-static const cmdinfo_t discard_cmd = { +- .name = "discard", +- .altname = "d", +- .cfunc = discard_f, +- .argmin = 2, +- .argmax = -1, +- .args = "[-Cq] off len", +- .oneline = "discards a number of bytes at a specified offset", +- .help = discard_help, +-}; +- +-static int discard_f(BlockDriverState *bs, int argc, char **argv) +-{ +- struct timeval t1, t2; +- int Cflag = 0, qflag = 0; +- int c, ret; +- int64_t offset; +- int count; +- +- while ((c = getopt(argc, argv, "Cq")) != EOF) { +- switch (c) { +- case 'C': +- Cflag = 1; +- break; +- case 'q': +- qflag = 1; +- break; +- default: +- return command_usage(&discard_cmd); +- } +- } +- +- if (optind != argc - 2) { +- return command_usage(&discard_cmd); +- } +- +- offset = cvtnum(argv[optind]); +- if (offset < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- +- optind++; +- count = cvtnum(argv[optind]); +- if (count < 0) { +- printf("non-numeric length argument -- %s\n", argv[optind]); +- return 0; +- } +- +- gettimeofday(&t1, NULL); +- ret = bdrv_discard(bs, offset >> BDRV_SECTOR_BITS, +- count >> BDRV_SECTOR_BITS); +- gettimeofday(&t2, NULL); +- +- if (ret < 0) { +- printf("discard failed: %s\n", strerror(-ret)); +- goto out; +- } +- +- /* Finally, report back -- -C gives a parsable format */ +- if (!qflag) { +- t2 = tsub(t2, t1); +- print_report("discard", &t2, offset, count, count, 1, Cflag); +- } +- +-out: +- return 0; +-} +- +-static int alloc_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int64_t offset, sector_num; +- int nb_sectors, remaining; +- char s1[64]; +- int num, sum_alloc; +- int ret; +- +- offset = cvtnum(argv[1]); +- if (offset < 0) { +- printf("non-numeric offset argument -- %s\n", argv[1]); +- return 0; +- } else if (offset & 0x1ff) { +- printf("offset %" PRId64 " is not sector aligned\n", +- offset); +- return 0; +- } +- +- if (argc == 3) { +- nb_sectors = cvtnum(argv[2]); +- if (nb_sectors < 0) { +- printf("non-numeric length argument -- %s\n", argv[2]); +- return 0; +- } +- } else { +- nb_sectors = 1; +- } +- +- remaining = nb_sectors; +- sum_alloc = 0; +- sector_num = offset >> 9; +- while (remaining) { +- ret = bdrv_is_allocated(bs, sector_num, remaining, &num); +- if (ret < 0) { +- printf("is_allocated failed: %s\n", strerror(-ret)); +- return 0; +- } +- sector_num += num; +- remaining -= num; +- if (ret) { +- sum_alloc += num; +- } +- if (num == 0) { +- nb_sectors -= remaining; +- remaining = 0; +- } +- } +- +- cvtstr(offset, s1, sizeof(s1)); +- +- printf("%d/%d sectors allocated at offset %s\n", +- sum_alloc, nb_sectors, s1); +- return 0; +-} +- +-static const cmdinfo_t alloc_cmd = { +- .name = "alloc", +- .altname = "a", +- .argmin = 1, +- .argmax = 2, +- .cfunc = alloc_f, +- .args = "off [sectors]", +- .oneline = "checks if a sector is present in the file", +-}; +- +-static int map_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int64_t offset; +- int64_t nb_sectors; +- char s1[64]; +- int num, num_checked; +- int ret; +- const char *retstr; +- +- offset = 0; +- nb_sectors = bs->total_sectors; +- +- do { +- num_checked = MIN(nb_sectors, INT_MAX); +- ret = bdrv_is_allocated(bs, offset, num_checked, &num); +- retstr = ret ? " allocated" : "not allocated"; +- cvtstr(offset << 9ULL, s1, sizeof(s1)); +- printf("[% 24" PRId64 "] % 8d/% 8d sectors %s at offset %s (%d)\n", +- offset << 9ULL, num, num_checked, retstr, s1, ret); +- +- offset += num; +- nb_sectors -= num; +- } while (offset < bs->total_sectors); +- +- return 0; +-} +- +-static const cmdinfo_t map_cmd = { +- .name = "map", +- .argmin = 0, +- .argmax = 0, +- .cfunc = map_f, +- .args = "", +- .oneline = "prints the allocated areas of a file", +-}; +- +-static int break_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int ret; +- +- ret = bdrv_debug_breakpoint(bs, argv[1], argv[2]); +- if (ret < 0) { +- printf("Could not set breakpoint: %s\n", strerror(-ret)); +- } +- +- return 0; +-} +- +-static const cmdinfo_t break_cmd = { +- .name = "break", +- .argmin = 2, +- .argmax = 2, +- .cfunc = break_f, +- .args = "event tag", +- .oneline = "sets a breakpoint on event and tags the stopped " +- "request as tag", +-}; +- +-static int resume_f(BlockDriverState *bs, int argc, char **argv) +-{ +- int ret; +- +- ret = bdrv_debug_resume(bs, argv[1]); +- if (ret < 0) { +- printf("Could not resume request: %s\n", strerror(-ret)); +- } +- +- return 0; +-} +- +-static const cmdinfo_t resume_cmd = { +- .name = "resume", +- .argmin = 1, +- .argmax = 1, +- .cfunc = resume_f, +- .args = "tag", +- .oneline = "resumes the request tagged as tag", +-}; +- +-static int wait_break_f(BlockDriverState *bs, int argc, char **argv) +-{ +- while (!bdrv_debug_is_suspended(bs, argv[1])) { +- qemu_aio_wait(); +- } +- +- return 0; +-} +- +-static const cmdinfo_t wait_break_cmd = { +- .name = "wait_break", +- .argmin = 1, +- .argmax = 1, +- .cfunc = wait_break_f, +- .args = "tag", +- .oneline = "waits for the suspension of a request", +-}; +- +-static int abort_f(BlockDriverState *bs, int argc, char **argv) +-{ +- abort(); +-} +- +-static const cmdinfo_t abort_cmd = { +- .name = "abort", +- .cfunc = abort_f, +- .flags = CMD_NOFILE_OK, +- .oneline = "simulate a program crash using abort(3)", +-}; ++extern int qemuio_misalign; + + static int close_f(BlockDriverState *bs, int argc, char **argv) + { +@@ -1801,45 +48,6 @@ static const cmdinfo_t close_cmd = { + .oneline = "close the current open file", + }; + +-static void sleep_cb(void *opaque) +-{ +- bool *expired = opaque; +- *expired = true; +-} +- +-static int sleep_f(BlockDriverState *bs, int argc, char **argv) +-{ +- char *endptr; +- long ms; +- struct QEMUTimer *timer; +- bool expired = false; +- +- ms = strtol(argv[1], &endptr, 0); +- if (ms < 0 || *endptr != '\0') { +- printf("%s is not a valid number\n", argv[1]); +- return 0; +- } +- +- timer = qemu_new_timer_ns(host_clock, sleep_cb, &expired); +- qemu_mod_timer(timer, qemu_get_clock_ns(host_clock) + SCALE_MS * ms); +- +- while (!expired) { +- main_loop_wait(false); +- } +- +- qemu_free_timer(timer); +- +- return 0; +-} +- +-static const cmdinfo_t sleep_cmd = { +- .name = "sleep", +- .argmin = 1, +- .argmax = 1, +- .cfunc = sleep_f, +- .flags = CMD_NOFILE_OK, +- .oneline = "waits for the given value in milliseconds", +-}; + + static int openfile(char *name, int flags, int growable, QDict *opts) + { +@@ -1962,18 +170,6 @@ static int open_f(BlockDriverState *bs, int argc, char **argv) + return openfile(argv[optind], flags, growable, opts); + } + +-static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct) +-{ +- if (ct->flags & CMD_FLAG_GLOBAL) { +- return 1; +- } +- if (!(ct->flags & CMD_NOFILE_OK) && !bs) { +- fprintf(stderr, "no file open, try 'help open'\n"); +- return 0; +- } +- return 1; +-} +- + static void usage(const char *name) + { + printf( +@@ -2049,7 +245,7 @@ int main(int argc, char **argv) + readonly = 1; + break; + case 'm': +- misalign = 1; ++ qemuio_misalign = 1; + break; + case 'g': + growable = 1; +@@ -2090,31 +286,8 @@ int main(int argc, char **argv) + + /* initialize commands */ + quit_init(); +- help_init(); + add_command(&open_cmd); + add_command(&close_cmd); +- add_command(&read_cmd); +- add_command(&readv_cmd); +- add_command(&write_cmd); +- add_command(&writev_cmd); +- add_command(&multiwrite_cmd); +- add_command(&aio_read_cmd); +- add_command(&aio_write_cmd); +- add_command(&aio_flush_cmd); +- add_command(&flush_cmd); +- add_command(&truncate_cmd); +- add_command(&length_cmd); +- add_command(&info_cmd); +- add_command(&discard_cmd); +- add_command(&alloc_cmd); +- add_command(&map_cmd); +- add_command(&break_cmd); +- add_command(&resume_cmd); +- add_command(&wait_break_cmd); +- add_command(&abort_cmd); +- add_command(&sleep_cmd); +- +- add_check_command(init_check_command); + + /* open the device */ + if (!readonly) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-Use-the-qemu-version-for-V.patch b/SOURCES/kvm-qemu-io-Use-the-qemu-version-for-V.patch new file mode 100644 index 0000000..a2622d6 --- /dev/null +++ b/SOURCES/kvm-qemu-io-Use-the-qemu-version-for-V.patch @@ -0,0 +1,54 @@ +From 883449501b5d87002bb01c2a060cf650acf45d9a Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:34 +0100 +Subject: [PATCH 15/27] qemu-io: Use the qemu version for -V + +RH-Author: John Snow +Message-id: <1448300320-7772-16-git-send-email-jsnow@redhat.com> +Patchwork-id: 68442 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 15/21] qemu-io: Use the qemu version for -V +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Always printing 0.0.1 and never updating the version number wasn't very +useful. qemu-io is released with qemu, so using the same version number +makes most sense. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 02da386a2d7a020e80b0aed64769efa9dd42072a) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + qemu-io.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/qemu-io.c b/qemu-io.c +index e685808..16b2d8a 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -23,8 +23,6 @@ + #include "trace/control.h" + #include "qemu/timer.h" + +-#define VERSION "0.0.1" +- + #define CMD_NOFILE_OK 0x01 + + char *progname; +@@ -418,7 +416,7 @@ int main(int argc, char **argv) + } + break; + case 'V': +- printf("%s version %s\n", progname, VERSION); ++ printf("%s version %s\n", progname, QEMU_VERSION); + exit(0); + case 'h': + usage(progname); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-io-fix-cvtnum-lval-types.patch b/SOURCES/kvm-qemu-io-fix-cvtnum-lval-types.patch new file mode 100644 index 0000000..9372946 --- /dev/null +++ b/SOURCES/kvm-qemu-io-fix-cvtnum-lval-types.patch @@ -0,0 +1,360 @@ +From a5226789eaaedf06f50f2faf14b506c17deb5435 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 23 Nov 2015 17:38:37 +0100 +Subject: [PATCH 18/27] qemu-io: fix cvtnum lval types + +RH-Author: John Snow +Message-id: <1448300320-7772-19-git-send-email-jsnow@redhat.com> +Patchwork-id: 68445 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 18/21] qemu-io: fix cvtnum lval types +Bugzilla: 1272523 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz + +cvtnum() returns int64_t: we should not be storing this +result inside of an int. + +In a few cases, we need an extra sprinkling of error handling +where we expect to pass this number on towards a function that +expects something smaller than int64_t. + +Reported-by: Max Reitz +Signed-off-by: John Snow +Signed-off-by: Kevin Wolf +(cherry picked from commit 9b0beaf3de1396a23d5c287283e6f36c4b5d4385) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-io-cmds.c: + - Upstream uses blk_xxx commands, while downstream uses bdrv_xxx + - Fixes to sigraise are not backported. + +Signed-off-by: John Snow +--- + qemu-io-cmds.c | 119 ++++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 84 insertions(+), 35 deletions(-) + +diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c +index 1f21ce9..95345fe 100644 +--- a/qemu-io-cmds.c ++++ b/qemu-io-cmds.c +@@ -282,9 +282,10 @@ static void qemu_io_free(void *p) + qemu_vfree(p); + } + +-static void dump_buffer(const void *buffer, int64_t offset, int len) ++static void dump_buffer(const void *buffer, int64_t offset, int64_t len) + { +- int i, j; ++ uint64_t i; ++ int j; + const uint8_t *p; + + for (i = 0, p = buffer; i < len; i += 16) { +@@ -307,7 +308,7 @@ static void dump_buffer(const void *buffer, int64_t offset, int len) + } + + static void print_report(const char *op, struct timeval *t, int64_t offset, +- int count, int total, int cnt, int Cflag) ++ int64_t count, int64_t total, int cnt, int Cflag) + { + char s1[64], s2[64], ts[64]; + +@@ -315,12 +316,12 @@ static void print_report(const char *op, struct timeval *t, int64_t offset, + if (!Cflag) { + cvtstr((double)total, s1, sizeof(s1)); + cvtstr(tdiv((double)total, *t), s2, sizeof(s2)); +- printf("%s %d/%d bytes at offset %" PRId64 "\n", ++ printf("%s %"PRId64"/%"PRId64" bytes at offset %" PRId64 "\n", + op, total, count, offset); + printf("%s, %d ops; %s (%s/sec and %.4f ops/sec)\n", + s1, cnt, ts, s2, tdiv((double)cnt, *t)); + } else {/* bytes,ops,time,bytes/sec,ops/sec */ +- printf("%d,%d,%s,%.3f,%.3f\n", ++ printf("%"PRId64",%d,%s,%.3f,%.3f\n", + total, cnt, ts, + tdiv((double)total, *t), + tdiv((double)cnt, *t)); +@@ -381,11 +382,15 @@ fail: + return buf; + } + +-static int do_read(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) ++static int do_read(BlockDriverState *bs, char *buf, int64_t offset, ++ int64_t count, int64_t *total) + { + int ret; + ++ if (count >> 9 > INT_MAX) { ++ return -ERANGE; ++ } ++ + ret = bdrv_read(bs, offset >> 9, (uint8_t *)buf, count >> 9); + if (ret < 0) { + return ret; +@@ -394,11 +399,15 @@ static int do_read(BlockDriverState *bs, char *buf, int64_t offset, int count, + return 1; + } + +-static int do_write(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) ++static int do_write(BlockDriverState *bs, char *buf, int64_t offset, ++ int64_t count, int64_t *total) + { + int ret; + ++ if (count >> 9 > INT_MAX) { ++ return -ERANGE; ++ } ++ + ret = bdrv_write(bs, offset >> 9, (uint8_t *)buf, count >> 9); + if (ret < 0) { + return ret; +@@ -407,9 +416,13 @@ static int do_write(BlockDriverState *bs, char *buf, int64_t offset, int count, + return 1; + } + +-static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) ++static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, ++ int64_t count, int64_t *total) + { ++ if (count > INT_MAX) { ++ return -ERANGE; ++ } ++ + *total = bdrv_pread(bs, offset, (uint8_t *)buf, count); + if (*total < 0) { + return *total; +@@ -417,9 +430,13 @@ static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, int count, + return 1; + } + +-static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, int count, +- int *total) ++static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, ++ int64_t count, int64_t *total) + { ++ if (count > INT_MAX) { ++ return -ERANGE; ++ } ++ + *total = bdrv_pwrite(bs, offset, (uint8_t *)buf, count); + if (*total < 0) { + return *total; +@@ -430,8 +447,8 @@ static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, int count, + typedef struct { + BlockDriverState *bs; + int64_t offset; +- int count; +- int *total; ++ int64_t count; ++ int64_t *total; + int ret; + bool done; + } CoWriteZeroes; +@@ -451,8 +468,8 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque) + *data->total = data->count; + } + +-static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count, +- int *total) ++static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, ++ int64_t count, int64_t *total) + { + Coroutine *co; + CoWriteZeroes data = { +@@ -463,6 +480,10 @@ static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count, + .done = false, + }; + ++ if (count >> BDRV_SECTOR_BITS > INT_MAX) { ++ return -ERANGE; ++ } ++ + co = qemu_coroutine_create(co_write_zeroes_entry); + qemu_coroutine_enter(co, &data); + while (!data.done) { +@@ -476,10 +497,14 @@ static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count, + } + + static int do_write_compressed(BlockDriverState *bs, char *buf, int64_t offset, +- int count, int *total) ++ int64_t count, int64_t *total) + { + int ret; + ++ if (count >> 9 > INT_MAX) { ++ return -ERANGE; ++ } ++ + ret = bdrv_write_compressed(bs, offset >> 9, (uint8_t *)buf, count >> 9); + if (ret < 0) { + return ret; +@@ -489,8 +514,12 @@ static int do_write_compressed(BlockDriverState *bs, char *buf, int64_t offset, + } + + static int do_load_vmstate(BlockDriverState *bs, char *buf, int64_t offset, +- int count, int *total) ++ int64_t count, int64_t *total) + { ++ if (count > INT_MAX) { ++ return -ERANGE; ++ } ++ + *total = bdrv_load_vmstate(bs, (uint8_t *)buf, offset, count); + if (*total < 0) { + return *total; +@@ -499,8 +528,12 @@ static int do_load_vmstate(BlockDriverState *bs, char *buf, int64_t offset, + } + + static int do_save_vmstate(BlockDriverState *bs, char *buf, int64_t offset, +- int count, int *total) ++ int64_t count, int64_t *total) + { ++ if (count > INT_MAX) { ++ return -ERANGE; ++ } ++ + *total = bdrv_save_vmstate(bs, (uint8_t *)buf, offset, count); + if (*total < 0) { + return *total; +@@ -630,10 +663,11 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + int c, cnt; + char *buf; + int64_t offset; +- int count; ++ int64_t count; + /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; +- int pattern = 0, pattern_offset = 0, pattern_count = 0; ++ int64_t total = 0; ++ int pattern = 0; ++ int64_t pattern_offset = 0, pattern_count = 0; + + while ((c = getopt(argc, argv, "bCl:pP:qs:v")) != EOF) { + switch (c) { +@@ -700,6 +734,10 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + if (count < 0) { + printf("non-numeric length argument -- %s\n", argv[optind]); + return 0; ++ } else if (count > SIZE_MAX) { ++ printf("length cannot exceed %" PRIu64 ", given %s\n", ++ (uint64_t) SIZE_MAX, argv[optind]); ++ return 0; + } + + if (!Pflag && (lflag || sflag)) { +@@ -722,7 +760,7 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + return 0; + } + if (count & 0x1ff) { +- printf("count %d is not sector aligned\n", ++ printf("count %"PRId64" is not sector aligned\n", + count); + return 0; + } +@@ -750,7 +788,7 @@ static int read_f(BlockDriverState *bs, int argc, char **argv) + memset(cmp_buf, pattern, pattern_count); + if (memcmp(buf + pattern_offset, cmp_buf, pattern_count)) { + printf("Pattern verification failed at offset %" +- PRId64 ", %d bytes\n", ++ PRId64 ", %"PRId64" bytes\n", + offset + pattern_offset, pattern_count); + } + g_free(cmp_buf); +@@ -945,9 +983,9 @@ static int write_f(BlockDriverState *bs, int argc, char **argv) + int c, cnt; + char *buf = NULL; + int64_t offset; +- int count; ++ int64_t count; + /* Some compilers get confused and warn if this is not initialized. */ +- int total = 0; ++ int64_t total = 0; + int pattern = 0xcd; + + while ((c = getopt(argc, argv, "bcCpP:qz")) != EOF) { +@@ -1007,6 +1045,10 @@ static int write_f(BlockDriverState *bs, int argc, char **argv) + if (count < 0) { + printf("non-numeric length argument -- %s\n", argv[optind]); + return 0; ++ } else if (count > SIZE_MAX) { ++ printf("length cannot exceed %" PRIu64 ", given %s\n", ++ (uint64_t) SIZE_MAX, argv[optind]); ++ return 0; + } + + if (!pflag) { +@@ -1017,7 +1059,7 @@ static int write_f(BlockDriverState *bs, int argc, char **argv) + } + + if (count & 0x1ff) { +- printf("count %d is not sector aligned\n", ++ printf("count %"PRId64" is not sector aligned\n", + count); + return 0; + } +@@ -1752,8 +1794,7 @@ static int discard_f(BlockDriverState *bs, int argc, char **argv) + struct timeval t1, t2; + int Cflag = 0, qflag = 0; + int c, ret; +- int64_t offset; +- int count; ++ int64_t offset, count; + + while ((c = getopt(argc, argv, "Cq")) != EOF) { + switch (c) { +@@ -1783,6 +1824,11 @@ static int discard_f(BlockDriverState *bs, int argc, char **argv) + if (count < 0) { + printf("non-numeric length argument -- %s\n", argv[optind]); + return 0; ++ } else if (count >> BDRV_SECTOR_BITS > INT_MAX) { ++ printf("length cannot exceed %"PRIu64", given %s\n", ++ (uint64_t)INT_MAX << BDRV_SECTOR_BITS, ++ argv[optind]); ++ return 0; + } + + gettimeofday(&t1, NULL); +@@ -1807,11 +1853,10 @@ out: + + static int alloc_f(BlockDriverState *bs, int argc, char **argv) + { +- int64_t offset, sector_num; +- int nb_sectors, remaining; ++ int64_t offset, sector_num, nb_sectors, remaining; + char s1[64]; +- int num, sum_alloc; +- int ret; ++ int num, ret; ++ int64_t sum_alloc; + + offset = cvtnum(argv[1]); + if (offset < 0) { +@@ -1828,6 +1873,10 @@ static int alloc_f(BlockDriverState *bs, int argc, char **argv) + if (nb_sectors < 0) { + printf("non-numeric length argument -- %s\n", argv[2]); + return 0; ++ } else if (nb_sectors > INT_MAX) { ++ printf("length argument cannot exceed %d, given %s\n", ++ INT_MAX, argv[2]); ++ return 0; + } + } else { + nb_sectors = 1; +@@ -1855,7 +1904,7 @@ static int alloc_f(BlockDriverState *bs, int argc, char **argv) + + cvtstr(offset, s1, sizeof(s1)); + +- printf("%d/%d sectors allocated at offset %s\n", ++ printf("%"PRId64"/%"PRId64" sectors allocated at offset %s\n", + sum_alloc, nb_sectors, s1); + return 0; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-iotest-Make-077-raw-only.patch b/SOURCES/kvm-qemu-iotest-Make-077-raw-only.patch new file mode 100644 index 0000000..a50542b --- /dev/null +++ b/SOURCES/kvm-qemu-iotest-Make-077-raw-only.patch @@ -0,0 +1,54 @@ +From ffe8dca5ecc0546ea719652eaa5f52a25e45e7d8 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:03 -0600 +Subject: [CHANGE 09/31] qemu-iotest: Make 077 raw-only +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-10-git-send-email-famz@redhat.com> +Patchwork-id: 62682 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 09/30] qemu-iotest: Make 077 raw-only +Bugzilla: 1134237 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +The qemu-io command sequences make the assumption that an unaligned +request on the format layer will be unaligned on the blkdebug layer as +well. This doesn't necessarily hold true for drivers other than raw. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Benoît Canet +(cherry picked from commit f51062061e6adf64a879177f35ff5c6babb63e7e) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/077 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/qemu-iotests/077 b/tests/qemu-iotests/077 +index bbf7b51..4dd1bdd 100755 +--- a/tests/qemu-iotests/077 ++++ b/tests/qemu-iotests/077 +@@ -38,7 +38,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + . ./common.rc + . ./common.filter + +-_supported_fmt generic ++_supported_fmt raw + _supported_proto generic + _supported_os Linux + +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-iotest-qcow2-image-option-amendment.patch b/SOURCES/kvm-qemu-iotest-qcow2-image-option-amendment.patch new file mode 100644 index 0000000..4eebf32 --- /dev/null +++ b/SOURCES/kvm-qemu-iotest-qcow2-image-option-amendment.patch @@ -0,0 +1,593 @@ +From 63a9a6b55ad06913d6ed8c83708d8828149ad24b Mon Sep 17 00:00:00 2001 +From: Signed-off-by: Max Reitz +Date: Thu, 9 Jan 2014 09:19:58 +0100 +Subject: [PATCH 12/14] qemu-iotest: qcow2 image option amendment + +Message-id: <1389131839-12920-13-git-send-email-mreitz@redhat.com> +Patchwork-id: 56548 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 12/14] qemu-iotest: qcow2 image option amendment +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Add tests for qemu-img amend on qcow2 image files. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit a8110c3d327cabff8dc258c5c8705903b56c1513) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/061 | 178 +++++++++++++++++++++++ + tests/qemu-iotests/061.out | 349 +++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 528 insertions(+) + create mode 100755 tests/qemu-iotests/061 + create mode 100644 tests/qemu-iotests/061.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/061 | 178 ++++++++++++++++++++++ + tests/qemu-iotests/061.out | 349 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 528 insertions(+), 0 deletions(-) + create mode 100644 tests/qemu-iotests/061 + create mode 100644 tests/qemu-iotests/061.out + +diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061 +new file mode 100644 +index 0000000..86404e6 +--- /dev/null ++++ b/tests/qemu-iotests/061 +@@ -0,0 +1,178 @@ ++#!/bin/bash ++# ++# Test case for image option amendment in qcow2. ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests qocw2-specific low-level functionality ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++echo ++echo "=== Testing version downgrade with zero expansion ===" ++echo ++IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M ++$QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++_check_test_img ++ ++echo ++echo "=== Testing dirty version downgrade ===" ++echo ++IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io ++_check_test_img ++ ++echo ++echo "=== Testing version downgrade with unknown compat/autoclear flags ===" ++echo ++IMGOPTS="compat=1.1" _make_test_img 64M ++./qcow2.py "$TEST_IMG" set-feature-bit compatible 42 ++./qcow2.py "$TEST_IMG" set-feature-bit autoclear 42 ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++./qcow2.py "$TEST_IMG" dump-header ++_check_test_img ++ ++echo ++echo "=== Testing version upgrade and resize ===" ++echo ++IMGOPTS="compat=0.10" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IMG amend -o "compat=1.1,lazy_refcounts=on,size=128M" "$TEST_IMG" ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IO -c "read -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io ++_check_test_img ++ ++echo ++echo "=== Testing dirty lazy_refcounts=off ===" ++echo ++IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IMG amend -o "lazy_refcounts=off" "$TEST_IMG" ++./qcow2.py "$TEST_IMG" dump-header ++$QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io ++_check_test_img ++ ++echo ++echo "=== Testing backing file ===" ++echo ++IMGOPTS="compat=1.1" _make_test_img 64M ++IMGOPTS="compat=1.1" TEST_IMG="$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 128k" "$TEST_IMG.base" | _filter_qemu_io ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG amend -o "backing_file=$TEST_IMG.base,backing_fmt=qcow2" "$TEST_IMG" ++$QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io ++_check_test_img ++ ++echo ++echo "=== Testing invalid configurations ===" ++echo ++IMGOPTS="compat=0.10" _make_test_img 64M ++$QEMU_IMG amend -o "lazy_refcounts=on" "$TEST_IMG" ++$QEMU_IMG amend -o "compat=1.1" "$TEST_IMG" # actually valid ++$QEMU_IMG amend -o "compat=0.10,lazy_refcounts=on" "$TEST_IMG" ++$QEMU_IMG amend -o "compat=0.42" "$TEST_IMG" ++$QEMU_IMG amend -o "foo=bar" "$TEST_IMG" ++$QEMU_IMG amend -o "cluster_size=1k" "$TEST_IMG" ++$QEMU_IMG amend -o "encryption=on" "$TEST_IMG" ++$QEMU_IMG amend -o "preallocation=on" "$TEST_IMG" ++ ++echo ++echo "=== Testing correct handling of unset value ===" ++echo ++IMGOPTS="compat=1.1,cluster_size=1k" _make_test_img 64M ++echo "Should work:" ++$QEMU_IMG amend -o "lazy_refcounts=on" "$TEST_IMG" ++echo "Should not work:" # Just to know which of these tests actually fails ++$QEMU_IMG amend -o "cluster_size=64k" "$TEST_IMG" ++ ++echo ++echo "=== Testing zero expansion on inactive clusters ===" ++echo ++IMGOPTS="compat=1.1" _make_test_img 64M ++$QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IO -c "write -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing zero expansion on backed image ===" ++echo ++IMGOPTS="compat=1.1" TEST_IMG="$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 128k" "$TEST_IMG.base" | _filter_qemu_io ++IMGOPTS="compat=1.1,backing_file=$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "read -P 0x2a 0 128k" -c "write -z 0 64k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 64k" -c "read -P 0x2a 64k 64k" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "=== Testing zero expansion on backed inactive clusters ===" ++echo ++IMGOPTS="compat=1.1" TEST_IMG="$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 128k" "$TEST_IMG.base" | _filter_qemu_io ++IMGOPTS="compat=1.1,backing_file=$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "write -z 0 64k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IO -c "write -P 0x42 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0x42 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 64k" -c "read -P 0x2a 64k 64k" "$TEST_IMG" | _filter_qemu_io ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out +new file mode 100644 +index 0000000..05bd1d5 +--- /dev/null ++++ b/tests/qemu-iotests/061.out +@@ -0,0 +1,349 @@ ++QA output created by 061 ++ ++=== Testing version downgrade with zero expansion === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++magic 0x514649fb ++version 3 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x1 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 104 ++ ++magic 0x514649fb ++version 2 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x0 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 72 ++ ++Header extension: ++magic 0x6803f857 ++length 144 ++data ++ ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++=== Testing dirty version downgrade === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++magic 0x514649fb ++version 3 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x1 ++compatible_features 0x1 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 104 ++ ++Repairing cluster 5 refcount=0 reference=1 ++Repairing cluster 6 refcount=0 reference=1 ++magic 0x514649fb ++version 2 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x0 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 72 ++ ++Header extension: ++magic 0x6803f857 ++length 144 ++data ++ ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++=== Testing version downgrade with unknown compat/autoclear flags === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++magic 0x514649fb ++version 3 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x40000000000 ++autoclear_features 0x40000000000 ++refcount_order 4 ++header_length 104 ++ ++magic 0x514649fb ++version 2 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x0 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 72 ++ ++Header extension: ++magic 0x6803f857 ++length 144 ++data ++ ++No errors were found on the image. ++ ++=== Testing version upgrade and resize === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 65536/65536 bytes at offset 44040192 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++magic 0x514649fb ++version 2 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x0 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 72 ++ ++magic 0x514649fb ++version 3 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 134217728 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x1 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 104 ++ ++Header extension: ++magic 0x6803f857 ++length 144 ++data ++ ++read 65536/65536 bytes at offset 44040192 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++=== Testing dirty lazy_refcounts=off === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++magic 0x514649fb ++version 3 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x1 ++compatible_features 0x1 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 104 ++ ++Repairing cluster 5 refcount=0 reference=1 ++Repairing cluster 6 refcount=0 reference=1 ++magic 0x514649fb ++version 3 ++backing_file_offset 0x0 ++backing_file_size 0x0 ++cluster_bits 16 ++size 67108864 ++crypt_method 0 ++l1_size 1 ++l1_table_offset 0x30000 ++refcount_table_offset 0x10000 ++refcount_table_clusters 1 ++nb_snapshots 0 ++snapshot_offset 0x0 ++incompatible_features 0x0 ++compatible_features 0x0 ++autoclear_features 0x0 ++refcount_order 4 ++header_length 104 ++ ++Header extension: ++magic 0x6803f857 ++length 144 ++data ++ ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++=== Testing backing file === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++ ++=== Testing invalid configurations === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Lazy refcounts only supported with compatibility level 1.1 and above (use compat=1.1 or greater) ++qemu-img: Error while amending options: Invalid argument ++Lazy refcounts only supported with compatibility level 1.1 and above (use compat=1.1 or greater) ++qemu-img: Error while amending options: Invalid argument ++Unknown compatibility level 0.42. ++qemu-img: Error while amending options: Invalid argument ++Unknown option 'foo' ++qemu-img: Invalid options for file format 'qcow2' ++Changing the cluster size is not supported. ++qemu-img: Error while amending options: Operation not supported ++Changing the encryption flag is not supported. ++qemu-img: Error while amending options: Operation not supported ++Cannot change preallocation mode. ++qemu-img: Error while amending options: Operation not supported ++ ++=== Testing correct handling of unset value === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++Should work: ++Should not work: ++Changing the cluster size is not supported. ++qemu-img: Error while amending options: Operation not supported ++ ++=== Testing zero expansion on inactive clusters === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing zero expansion on backed image === ++ ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file='TEST_DIR/t.IMGFMT.base' ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 65536/65536 bytes at offset 65536 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing zero expansion on backed inactive clusters === ++ ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file='TEST_DIR/t.IMGFMT.base' ++wrote 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 65536/65536 bytes at offset 0 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 65536/65536 bytes at offset 65536 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 2d0aba0..50a726e 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -63,6 +63,7 @@ + 054 rw auto + 059 rw auto + 060 rw auto ++061 rw auto + 062 rw auto + 063 rw auto + 064 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-033-is-fast.patch.patch b/SOURCES/kvm-qemu-iotests-033-is-fast.patch.patch new file mode 100644 index 0000000..dc1beeb --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-033-is-fast.patch.patch @@ -0,0 +1,45 @@ +From b9e9b6957a0b66f26de128069d6f191c480cf928 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:30 +0100 +Subject: [PATCH 42/50] qemu-iotests: 033 is fast + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-45-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56081 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 44/52] qemu-iotests: 033 is fast +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e18d90c15bab0d47d8f30696058abfb78396081f) +--- + tests/qemu-iotests/group | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + tests/qemu-iotests/group | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 68c056b..4a211bf 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -39,7 +39,7 @@ + 030 rw auto backing + 031 rw auto quick + 032 rw auto +-033 rw auto ++033 rw auto quick + 034 rw auto backing + 035 rw auto quick + 036 rw auto quick +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-iotests-Add-_unsupported_imgopts-for-vmdk-subfo.patch b/SOURCES/kvm-qemu-iotests-Add-_unsupported_imgopts-for-vmdk-subfo.patch new file mode 100644 index 0000000..d019d11 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Add-_unsupported_imgopts-for-vmdk-subfo.patch @@ -0,0 +1,167 @@ +From 0b8d9819cfe455e9ff4c2c77de1dd8069d00ce9c Mon Sep 17 00:00:00 2001 +Message-Id: <0b8d9819cfe455e9ff4c2c77de1dd8069d00ce9c.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:04:59 -0600 +Subject: [CHANGE 05/31] qemu-iotests: Add _unsupported_imgopts for vmdk + subformats +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-6-git-send-email-famz@redhat.com> +Patchwork-id: 62678 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 05/30] qemu-iotests: Add _unsupported_imgopts for vmdk subformats +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Some cases are not applicable for vmdk subformats those don't support +certain features, e.g. backing file, and some others can't run on +mult-file image, e.g. monolithicFlat. This adds declaration in test +cases to skip them automatically, so that iotests on vmdk can go +more smoothly (without manually picking of cases for each subformat). + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit d2329f27c9c8408d4134c7243313dbaa37270384) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/017 | 1 + + tests/qemu-iotests/018 | 1 + + tests/qemu-iotests/019 | 3 +++ + tests/qemu-iotests/020 | 3 +++ + tests/qemu-iotests/034 | 3 +++ + tests/qemu-iotests/037 | 3 +++ + tests/qemu-iotests/059 | 3 +++ + tests/qemu-iotests/063 | 3 +++ + tests/qemu-iotests/069 | 1 + + 9 files changed, 21 insertions(+) + +diff --git a/tests/qemu-iotests/017 b/tests/qemu-iotests/017 +index aba3faf..3af3cdf 100755 +--- a/tests/qemu-iotests/017 ++++ b/tests/qemu-iotests/017 +@@ -43,6 +43,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" + + TEST_OFFSETS="0 4294967296" + +diff --git a/tests/qemu-iotests/018 b/tests/qemu-iotests/018 +index 15fcfe5..6f7f054 100755 +--- a/tests/qemu-iotests/018 ++++ b/tests/qemu-iotests/018 +@@ -43,6 +43,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" + + TEST_OFFSETS="0 4294967296" + +diff --git a/tests/qemu-iotests/019 b/tests/qemu-iotests/019 +index 5bb18d0..b43e70f 100755 +--- a/tests/qemu-iotests/019 ++++ b/tests/qemu-iotests/019 +@@ -47,6 +47,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" \ ++ "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + TEST_OFFSETS="0 4294967296" + CLUSTER_SIZE=65536 +diff --git a/tests/qemu-iotests/020 b/tests/qemu-iotests/020 +index b3c86d8..73a0429 100755 +--- a/tests/qemu-iotests/020 ++++ b/tests/qemu-iotests/020 +@@ -45,6 +45,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" \ ++ "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + TEST_OFFSETS="0 4294967296" + +diff --git a/tests/qemu-iotests/034 b/tests/qemu-iotests/034 +index 67f1959..7349789 100755 +--- a/tests/qemu-iotests/034 ++++ b/tests/qemu-iotests/034 +@@ -41,6 +41,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" \ ++ "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + CLUSTER_SIZE=4k + size=128M +diff --git a/tests/qemu-iotests/037 b/tests/qemu-iotests/037 +index 743bae3..e444349 100755 +--- a/tests/qemu-iotests/037 ++++ b/tests/qemu-iotests/037 +@@ -41,6 +41,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" \ ++ "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + CLUSTER_SIZE=4k + size=128M +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index c8d92a0..9ef848b 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -42,6 +42,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt vmdk + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" \ ++ "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + capacity_offset=16 + granularity_offset=20 +diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063 +index 2ab8f20..77503a2 100644 +--- a/tests/qemu-iotests/063 ++++ b/tests/qemu-iotests/063 +@@ -44,6 +44,9 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt qcow qcow2 vmdk qed raw + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" \ ++ "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + _make_test_img 4M + +diff --git a/tests/qemu-iotests/069 b/tests/qemu-iotests/069 +index 3042803..50347d9 100755 +--- a/tests/qemu-iotests/069 ++++ b/tests/qemu-iotests/069 +@@ -41,6 +41,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt cow qed qcow qcow2 vmdk + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" + + IMG_SIZE=128K + +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-iotests-Add-basic-ability-to-use-binary-sample-.patch b/SOURCES/kvm-qemu-iotests-Add-basic-ability-to-use-binary-sample-.patch new file mode 100644 index 0000000..086565d --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Add-basic-ability-to-use-binary-sample-.patch @@ -0,0 +1,130 @@ +From 05d14f4ff759eed41146cc17688db92656388552 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:31 +0100 +Subject: [PATCH 74/87] qemu-iotests: Add basic ability to use binary sample images + +RH-Author: Max Reitz +Message-id: <1383756824-6921-9-git-send-email-mreitz@redhat.com> +Patchwork-id: 55563 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 08/21] qemu-iotests: Add basic ability to use binary sample images +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Jeff Cody + +BZ: 980771 + +For image formats that are not "QEMU native", but supported for +compatibility, it is useful to verify that an image created with +the 'gold standard' native tool can be read / written to successfully +by QEMU. + +In addition to testing non-native images, this could also be useful to +test against image files created by older versions of QEMU. + +This provides a directory to store small sample images, for use by +scripts in tests/qemu-iotests. + +Image files should be compressed with bzip2. + +To use a sample image from a bash script, the _use_sample_img function +will copy and decompress the image into $TEST_DIR, and set $TEST_IMG to +be the decompressed sample image copy. To cleanup, call +_cleanup_test_img as normal. + +Signed-off-by: Jeff Cody +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 85edbd375b9ab451c6769011cb6b3e0287dc71e4) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/common.config | 11 +++++++++++ + tests/qemu-iotests/common.rc | 16 ++++++++++++++++ + tests/qemu-iotests/sample_images/README | 8 ++++++++ + 3 files changed, 35 insertions(+) + create mode 100644 tests/qemu-iotests/sample_images/README + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/common.config | 11 +++++++++++ + tests/qemu-iotests/common.rc | 16 ++++++++++++++++ + tests/qemu-iotests/sample_images/README | 8 ++++++++ + 3 files changed, 35 insertions(+), 0 deletions(-) + create mode 100644 tests/qemu-iotests/sample_images/README + +diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config +index d794e62..d90a8bc 100644 +--- a/tests/qemu-iotests/common.config ++++ b/tests/qemu-iotests/common.config +@@ -125,6 +125,17 @@ fi + + export TEST_DIR + ++if [ -z "$SAMPLE_IMG_DIR" ]; then ++ SAMPLE_IMG_DIR=`pwd`/sample_images ++fi ++ ++if [ ! -d "$SAMPLE_IMG_DIR" ]; then ++ echo "common.config: Error: \$SAMPLE_IMG_DIR ($SAMPLE_IMG_DIR) is not a directory" ++ exit 1 ++fi ++ ++export SAMPLE_IMG_DIR ++ + _readlink() + { + if [ $# -ne 1 ]; then +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 28b39e4..6730955 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -91,6 +91,18 @@ _set_default_imgopts() + fi + } + ++_use_sample_img() ++{ ++ SAMPLE_IMG_FILE="${1%\.bz2}" ++ TEST_IMG="$TEST_DIR/$SAMPLE_IMG_FILE" ++ bzcat "$SAMPLE_IMG_DIR/$1" > "$TEST_IMG" ++ if [ $? -ne 0 ] ++ then ++ echo "_use_sample_img error, cannot extract '$SAMPLE_IMG_DIR/$1'" ++ exit 1 ++ fi ++} ++ + _make_test_img() + { + # extra qemu-img options can be added by tests +@@ -158,6 +170,10 @@ _cleanup_test_img() + rm -f $TEST_DIR/t.$IMGFMT + rm -f $TEST_DIR/t.$IMGFMT.orig + rm -f $TEST_DIR/t.$IMGFMT.base ++ if [ -n "$SAMPLE_IMG_FILE" ] ++ then ++ rm -f "$TEST_DIR/$SAMPLE_IMG_FILE" ++ fi + ;; + + rbd) +diff --git a/tests/qemu-iotests/sample_images/README b/tests/qemu-iotests/sample_images/README +new file mode 100644 +index 0000000..507af5f +--- /dev/null ++++ b/tests/qemu-iotests/sample_images/README +@@ -0,0 +1,8 @@ ++This is for small sample images to be used with qemu-iotests, intended for ++non-native formats that QEMU supports for compatibility. The idea is to use ++the native tool to create the sample image. ++ ++For instance, a VHDX image in this directory would be an image created not by ++QEMU itself, but rather created by Hyper-V. ++ ++Sample images added here must be compressed with bzip2. +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Add-sample-image-and-test-for-VMDK-vers.patch b/SOURCES/kvm-qemu-iotests-Add-sample-image-and-test-for-VMDK-vers.patch new file mode 100644 index 0000000..36c8c93 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Add-sample-image-and-test-for-VMDK-vers.patch @@ -0,0 +1,88 @@ +From 8d0b44f2b7bbca158aeb3a732f5689965857edfd Mon Sep 17 00:00:00 2001 +Message-Id: <8d0b44f2b7bbca158aeb3a732f5689965857edfd.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:04:56 -0600 +Subject: [CHANGE 02/31] qemu-iotests: Add sample image and test for VMDK + version 3 +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-3-git-send-email-famz@redhat.com> +Patchwork-id: 62675 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 02/30] qemu-iotests: Add sample image and test for VMDK version 3 +Bugzilla: 1134237 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 981cbf59b5360647e908186e7306ee9013a58c88) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/059 | 5 +++++ + tests/qemu-iotests/059.out | 5 +++++ + tests/qemu-iotests/sample_images/iotest-version3.vmdk.bz2 | Bin 0 -> 414 bytes + 3 files changed, 10 insertions(+) + create mode 100644 tests/qemu-iotests/sample_images/iotest-version3.vmdk.bz2 + +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 1ec34d5..23534c2 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -80,6 +80,11 @@ echo "=== Testing big twoGbMaxExtentFlat ===" + IMGOPTS="subformat=twoGbMaxExtentFlat" _make_test_img 1000G + $QEMU_IMG info $TEST_IMG | _filter_testdir | sed -e 's/cid: [0-9]*/cid: XXXXXXXX/' + ++echo ++echo "=== Testing version 3 ===" ++_use_sample_img iotest-version3.vmdk.bz2 ++_img_info ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 262e3b2..87a2004 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -2037,4 +2037,9 @@ Format specific information: + virtual size: 2147483648 + filename: TEST_DIR/t-f500.vmdk + format: FLAT ++ ++=== Testing version 3 === ++image: TEST_DIR/iotest-version3.IMGFMT ++file format: IMGFMT ++virtual size: 1.0G (1073741824 bytes) + *** done +# JEN 2014-12-16 +# Temporarily disable creating of this bz2 file, because brew does +# not support binary patches. When we have a solution for how to +# incorporate this, this section will be adjusted accordingly. +# JEN 2014-12-16 +#diff --git a/tests/qemu-iotests/sample_images/iotest-version3.vmdk.bz2 b/tests/qemu-iotests/sample_images/iotest-version3.vmdk.bz2 +#new file mode 100644 +#index 0000000000000000000000000000000000000000..30abf217e72d38e97b1e34a5db6add15ca3812d9 +#GIT binary patch +#literal 414 +#zcmV;P0b%|^T4*^jL0KkKS-4ab^Z){!-`M?Q}oWup($ZYNuP+onz +#zC89&oo+5m#SRo3f$tj3j4cj-uY<9AFkA%eEJTaa)*;e;U06X$QBY(3aGcne4@Z5Q` +#zOld1c2c2n5eaHx1cF@GqGfd88M9D~UB914v;WOL96@WSu-<9};viD>nCB_lZ=L5MA +#zWAhh{E!lb{@J3L6J+%};gkaKNrNrxivB)qiB85a>b>(iaNAFyd9Z|7XRWs!&h*2TY +#z2uM_*TOC2Lp=5yL%rudbN4;JP^)svmH_P%A-P+35?p=v$3M>tU*);6x0S=pmRj{{| +#z7O +Date: Sun, 29 Dec 2013 22:06:56 +0100 +Subject: [PATCH 5/8] qemu-iotests: Add test for inactive L2 overlap + +RH-Author: Max Reitz +Message-id: <1388354817-3013-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 56446 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 4/5] qemu-iotests: Add test for inactive L2 overlap +Bugzilla: 1004347 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1004347 + +Extend 060 by a test which creates a corrupted image with an active L2 +entry pointing to an inactive L2 table and writes to the corresponding +guest offset. + +Also, use overlap-check=all for all tests in 060. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 34eeb82de65ce9f83081a3357b0afe80a6a1d86a) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/060 | 47 +++++++++++++++++++++++++++++++++++++++------- + tests/qemu-iotests/060.out | 40 ++++++++++++++++++++++++++++++++++++++- + 2 files changed, 79 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/060 | 47 +++++++++++++++++++++++++++++++++++++------ + tests/qemu-iotests/060.out | 40 ++++++++++++++++++++++++++++++++++++- + 2 files changed, 79 insertions(+), 8 deletions(-) + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +index 9bbc43b..bbb1909 100644 +--- a/tests/qemu-iotests/060 ++++ b/tests/qemu-iotests/060 +@@ -21,10 +21,10 @@ + # creator + owner=mreitz@redhat.com + +-seq=`basename $0` ++seq="$(basename $0)" + echo "QA output created by $seq" + +-here=`pwd` ++here="$PWD" + tmp=/tmp/$$ + status=1 # failure is the default! + +@@ -47,9 +47,15 @@ rt_offset=65536 # 0x10000 (XXX: just an assumption) + rb_offset=131072 # 0x20000 (XXX: just an assumption) + l1_offset=196608 # 0x30000 (XXX: just an assumption) + l2_offset=262144 # 0x40000 (XXX: just an assumption) ++l2_offset_after_snapshot=524288 # 0x80000 (XXX: just an assumption) + + IMGOPTS="compat=1.1" + ++OPEN_RW="open -o overlap-check=all $TEST_IMG" ++# Overlap checks are done before write operations only, therefore opening an ++# image read-only makes the overlap-check option irrelevant ++OPEN_RO="open -r $TEST_IMG" ++ + echo + echo "=== Testing L2 reference into L1 ===" + echo +@@ -65,16 +71,18 @@ _check_test_img + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + # Try to write something, thereby forcing the corrupt bit to be set +-$QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io + + # The corrupt bit must now be set + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + # Try to open the image R/W (which should fail) +-$QEMU_IO -c "read 0 512" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir | _filter_imgfmt ++$QEMU_IO -c "$OPEN_RW" -c "read 0 512" 2>&1 | _filter_qemu_io \ ++ | _filter_testdir \ ++ | _filter_imgfmt + + # Try to open it RO (which should succeed) +-$QEMU_IO -c "read 0 512" -r "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "$OPEN_RO" -c "read 0 512" | _filter_qemu_io + + # We could now try to fix the image, but this would probably fail (how should an + # L2 table linked onto the L1 table be fixed?) +@@ -92,7 +100,7 @@ poke_file "$TEST_IMG" "$(($rb_offset+8))" "\x00\x01" + poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x02\x00\x00" + _check_test_img + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +-$QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + # Try to fix it +@@ -102,8 +110,33 @@ _check_test_img -r all + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + # Look if it's really really fixed +-$QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++echo ++echo "=== Testing cluster data reference into inactive L2 table ===" ++echo ++_make_test_img 64M ++$QEMU_IO -c "$OPEN_RW" -c "write -P 1 0 512" | _filter_qemu_io ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IO -c "$OPEN_RW" -c "write -P 2 0 512" | _filter_qemu_io ++# The inactive L2 table remains at its old offset ++poke_file "$TEST_IMG" "$l2_offset_after_snapshot" \ ++ "\x80\x00\x00\x00\x00\x04\x00\x00" ++_check_test_img + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++$QEMU_IO -c "$OPEN_RW" -c "write -P 3 0 512" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++_check_test_img -r all ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++$QEMU_IO -c "$OPEN_RW" -c "write -P 4 0 512" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++# Check data ++$QEMU_IO -c "$OPEN_RO" -c "read -P 4 0 512" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "$OPEN_RO" -c "read -P 1 0 512" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index 648f743..6c7bdbb 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -12,7 +12,6 @@ qcow2: Preventing invalid write on metadata (overlaps with active L1 table); ima + write failed: Input/output error + incompatible_features 0x2 + qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write +-no file open, try 'help open' + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +@@ -40,4 +39,43 @@ incompatible_features 0x0 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + incompatible_features 0x0 ++ ++=== Testing cluster data reference into inactive L2 table === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ERROR cluster 4 refcount=1 reference=2 ++Leaked cluster 9 refcount=1 reference=0 ++ ++1 errors were found on the image. ++Data may be corrupted, or further writes to the image may corrupt it. ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++incompatible_features 0x0 ++qcow2: Preventing invalid write on metadata (overlaps with inactive L2 table); image marked as corrupt. ++write failed: Input/output error ++incompatible_features 0x2 ++Repairing cluster 4 refcount=1 reference=2 ++Repairing cluster 9 refcount=1 reference=0 ++Repairing OFLAG_COPIED data cluster: l2_entry=8000000000040000 refcount=2 ++The following inconsistencies were found and repaired: ++ ++ 1 leaked clusters ++ 2 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++incompatible_features 0x0 ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++incompatible_features 0x0 ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Additional-info-from-qemu-img-info.patch b/SOURCES/kvm-qemu-iotests-Additional-info-from-qemu-img-info.patch new file mode 100644 index 0000000..7c6648e --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Additional-info-from-qemu-img-info.patch @@ -0,0 +1,217 @@ +From 9769e7ac9ff2005316a655365c72c12a40579195 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:39 +0100 +Subject: [PATCH 82/87] qemu-iotests: Additional info from qemu-img info + +RH-Author: Max Reitz +Message-id: <1383756824-6921-17-git-send-email-mreitz@redhat.com> +Patchwork-id: 55571 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 16/21] qemu-iotests: Additional info from qemu-img info +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +BZ: 980771 + +Add a test for the additional information now provided by qemu-img info +when used on qcow2 images. It also tests the qemu QMP output from the +query-block command when running qemu with different runtime options +than specified in the image (ImageInfoSpecific should always refer to +the image). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 3677e6f6252542cbab85674d97d051d95e91693b) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/065 | 125 ++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/065.out | 5 ++ + tests/qemu-iotests/group | 1 + + tests/qemu-iotests/iotests.py | 4 ++ + 4 files changed, 135 insertions(+) + create mode 100755 tests/qemu-iotests/065 + create mode 100644 tests/qemu-iotests/065.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/065 | 125 +++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/065.out | 5 ++ + tests/qemu-iotests/group | 1 + + tests/qemu-iotests/iotests.py | 4 + + 4 files changed, 135 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/065 + create mode 100644 tests/qemu-iotests/065.out + +diff --git a/tests/qemu-iotests/065 b/tests/qemu-iotests/065 +new file mode 100755 +index 0000000..ab5445f +--- /dev/null ++++ b/tests/qemu-iotests/065 +@@ -0,0 +1,125 @@ ++#!/usr/bin/env python2 ++# ++# Test for additional information emitted by qemu-img info on qcow2 ++# images ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++import os ++import re ++import json ++import iotests ++from iotests import qemu_img, qemu_img_pipe ++import unittest ++ ++test_img = os.path.join(iotests.test_dir, 'test.img') ++ ++class TestImageInfoSpecific(iotests.QMPTestCase): ++ '''Abstract base class for ImageInfoSpecific tests''' ++ ++ def setUp(self): ++ if self.img_options is None: ++ self.skipTest('Skipping abstract test class') ++ qemu_img('create', '-f', iotests.imgfmt, '-o', self.img_options, ++ test_img, '128K') ++ ++ def tearDown(self): ++ os.remove(test_img) ++ ++class TestQemuImgInfo(TestImageInfoSpecific): ++ '''Abstract base class for qemu-img info tests''' ++ ++ img_options = None ++ json_compare = None ++ human_compare = None ++ ++ def test_json(self): ++ data = json.loads(qemu_img_pipe('info', '--output=json', test_img)) ++ data = data['format-specific'] ++ self.assertEqual(data['type'], iotests.imgfmt) ++ self.assertEqual(data['data'], self.json_compare) ++ ++ def test_human(self): ++ data = qemu_img_pipe('info', '--output=human', test_img).split('\n') ++ data = data[(data.index('Format specific information:') + 1) ++ :data.index('')] ++ for field in data: ++ self.assertTrue(re.match('^ {4}[^ ]', field) is not None) ++ data = map(lambda line: line.strip(), data) ++ self.assertEqual(data, self.human_compare) ++ ++class TestQMP(TestImageInfoSpecific): ++ '''Abstract base class for qemu QMP tests''' ++ ++ img_options = None ++ qemu_options = '' ++ TestImageInfoSpecific = TestImageInfoSpecific ++ ++ def setUp(self): ++ self.TestImageInfoSpecific.setUp(self) ++ self.vm = iotests.VM().add_drive(test_img, self.qemu_options) ++ self.vm.launch() ++ ++ def tearDown(self): ++ self.vm.shutdown() ++ self.TestImageInfoSpecific.tearDown(self) ++ ++ def test_qmp(self): ++ result = self.vm.qmp('query-block')['return'] ++ drive = filter(lambda drive: drive['device'] == 'drive0', result)[0] ++ data = drive['inserted']['image']['format-specific'] ++ self.assertEqual(data['type'], iotests.imgfmt) ++ self.assertEqual(data['data'], self.compare) ++ ++class TestQCow2(TestQemuImgInfo): ++ '''Testing a qcow2 version 2 image''' ++ img_options = 'compat=0.10' ++ json_compare = { 'compat': '0.10' } ++ human_compare = [ 'compat: 0.10' ] ++ ++class TestQCow3NotLazy(TestQemuImgInfo): ++ '''Testing a qcow2 version 3 image with lazy refcounts disabled''' ++ img_options = 'compat=1.1,lazy_refcounts=off' ++ json_compare = { 'compat': '1.1', 'lazy-refcounts': False } ++ human_compare = [ 'compat: 1.1', 'lazy refcounts: false' ] ++ ++class TestQCow3Lazy(TestQemuImgInfo): ++ '''Testing a qcow2 version 3 image with lazy refcounts enabled''' ++ img_options = 'compat=1.1,lazy_refcounts=on' ++ json_compare = { 'compat': '1.1', 'lazy-refcounts': True } ++ human_compare = [ 'compat: 1.1', 'lazy refcounts: true' ] ++ ++class TestQCow3NotLazyQMP(TestQMP): ++ '''Testing a qcow2 version 3 image with lazy refcounts disabled, opening ++ with lazy refcounts enabled''' ++ img_options = 'compat=1.1,lazy_refcounts=off' ++ qemu_options = 'lazy-refcounts=on' ++ compare = { 'compat': '1.1', 'lazy-refcounts': False } ++ ++class TestQCow3LazyQMP(TestQMP): ++ '''Testing a qcow2 version 3 image with lazy refcounts enabled, opening ++ with lazy refcounts disabled''' ++ img_options = 'compat=1.1,lazy_refcounts=on' ++ qemu_options = 'lazy-refcounts=off' ++ compare = { 'compat': '1.1', 'lazy-refcounts': True } ++ ++TestImageInfoSpecific = None ++TestQemuImgInfo = None ++TestQMP = None ++ ++if __name__ == '__main__': ++ iotests.main(supported_fmts=['qcow2']) +diff --git a/tests/qemu-iotests/065.out b/tests/qemu-iotests/065.out +new file mode 100644 +index 0000000..594c16f +--- /dev/null ++++ b/tests/qemu-iotests/065.out +@@ -0,0 +1,5 @@ ++........ ++---------------------------------------------------------------------- ++Ran 8 tests ++ ++OK +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index d02ee96..68c056b 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -64,5 +64,6 @@ + 059 rw auto + 060 rw auto + 063 rw auto ++065 rw auto + 067 rw auto + 068 rw auto +diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py +index 569ca3d..5cbac82 100644 +--- a/tests/qemu-iotests/iotests.py ++++ b/tests/qemu-iotests/iotests.py +@@ -46,6 +46,10 @@ def qemu_img_verbose(*args): + '''Run qemu-img without suppressing its output and return the exit code''' + return subprocess.call(qemu_img_args + list(args)) + ++def qemu_img_pipe(*args): ++ '''Run qemu-img and return its output''' ++ return subprocess.Popen(qemu_img_args + list(args), stdout=subprocess.PIPE).communicate()[0] ++ + def qemu_io(*args): + '''Run qemu-io and return the stdout data''' + args = qemu_io_args + list(args) +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Adjust-test-result-039.patch b/SOURCES/kvm-qemu-iotests-Adjust-test-result-039.patch new file mode 100644 index 0000000..3b2536a --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Adjust-test-result-039.patch @@ -0,0 +1,68 @@ +From 762c6ae0424c3389e432ea40d2559abac2eb3566 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 29 Dec 2013 22:06:57 +0100 +Subject: [PATCH 6/8] qemu-iotests: Adjust test result 039 + +RH-Author: Max Reitz +Message-id: <1388354817-3013-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 56447 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 5/5] qemu-iotests: Adjust test result 039 +Bugzilla: 1004347 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1004347 + +The moved OFLAG_COPIED check in qcow2_check_refcounts results in a +different output from test 039 (mismatches are now found after the +general refcount check (as far as any remain)). This patch adjusts the +expected test result accordingly. + +Signed-off-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b3f3a30f387f34308b3e4d910a2824e69c34182f) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/039.out | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/039.out | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +diff --git a/tests/qemu-iotests/039.out b/tests/qemu-iotests/039.out +index cb510d6..077fa64 100644 +--- a/tests/qemu-iotests/039.out ++++ b/tests/qemu-iotests/039.out +@@ -12,8 +12,8 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + incompatible_features 0x1 +-ERROR OFLAG_COPIED: offset=8000000000050000 refcount=0 + ERROR cluster 5 refcount=0 reference=1 ++ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0 + + 2 errors were found on the image. + Data may be corrupted, or further writes to the image may corrupt it. +@@ -24,7 +24,6 @@ read 512/512 bytes at offset 0 + incompatible_features 0x1 + + == Repairing the image file must succeed == +-ERROR OFLAG_COPIED: offset=8000000000050000 refcount=0 + Repairing cluster 5 refcount=0 reference=1 + The following inconsistencies were found and repaired: + +@@ -44,7 +43,6 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + incompatible_features 0x1 +-ERROR OFLAG_COPIED: offset=8000000000050000 refcount=0 + Repairing cluster 5 refcount=0 reference=1 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Adjustments-due-to-error-propagation.patch b/SOURCES/kvm-qemu-iotests-Adjustments-due-to-error-propagation.patch new file mode 100644 index 0000000..b6fcd95 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Adjustments-due-to-error-propagation.patch @@ -0,0 +1,217 @@ +From aaf2d00ea8cd6479c5dd15773660e0699472af1c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 7 Nov 2013 12:37:40 +0100 +Subject: [PATCH 22/87] qemu-iotests: Adjustments due to error propagation + +RH-Author: Max Reitz +Message-id: <1383604354-12743-25-git-send-email-mreitz@redhat.com> +Patchwork-id: 55324 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 24/43] qemu-iotests: Adjustments due to error propagation +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1026524 + +When opening/creating images, propagating errors instead of immediately +emitting them on occurrence results in errors generally being printed on +a single line rather than being split up into multiple ones. This in +turn requires adjustments to some test results. + +Also, test 060 used a sed to filter out the test image directory and +format by removing everything from the affected line after a certain +keyword; this now also removes the error message itself, which can be +fixed by using _filter_testdir and _filter_imgfmt. + +Finally, _make_test_img in common.rc did not filter out the test image +directory etc. from stderr. This has been fixed through a redirection of +stderr to stdout (which is already done in _check_test_img and +_img_info). + +Signed-off-by: Max Reitz +(cherry picked from commit 2c78857bf6a9b5d06e17533b8f40fee14e087987) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/054.out + tests/qemu-iotests/060 + tests/qemu-iotests/060.out + +Conflicts because these tests do not exist downstream. +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/049.out | 18 +++++++----------- + tests/qemu-iotests/051.out | 35 ++++++++++++----------------------- + tests/qemu-iotests/common.rc | 2 +- + 3 files changed, 20 insertions(+), 35 deletions(-) + +diff --git a/tests/qemu-iotests/049.out b/tests/qemu-iotests/049.out +index 72db13f..96e83a4 100644 +--- a/tests/qemu-iotests/049.out ++++ b/tests/qemu-iotests/049.out +@@ -96,7 +96,7 @@ qemu-img: Image size must be less than 8 EiB! + + qemu-img create -f qcow2 -o size=-1024 TEST_DIR/t.qcow2 + qemu-img: qcow2 doesn't support shrinking images yet +-qemu-img: Formatting or formatting option not supported for file format 'qcow2' ++qemu-img: TEST_DIR/t.qcow2: Could not resize image: Operation not supported + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=-1024 encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- -1k +@@ -104,7 +104,7 @@ qemu-img: Image size must be less than 8 EiB! + + qemu-img create -f qcow2 -o size=-1k TEST_DIR/t.qcow2 + qemu-img: qcow2 doesn't support shrinking images yet +-qemu-img: Formatting or formatting option not supported for file format 'qcow2' ++qemu-img: TEST_DIR/t.qcow2: Could not resize image: Operation not supported + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=-1024 encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 TEST_DIR/t.qcow2 -- 1kilobyte +@@ -120,7 +120,7 @@ qemu-img: kilobytes, megabytes, gigabytes and terabytes. + + qemu-img create -f qcow2 -o size=foobar TEST_DIR/t.qcow2 + qemu-img: Parameter 'size' expects a size +-qemu-img: Invalid options for file format 'qcow2'. ++qemu-img: TEST_DIR/t.qcow2: Invalid options for file format 'qcow2'. + + == Check correct interpretation of suffixes for cluster size == + +@@ -163,13 +163,11 @@ qemu-img create -f qcow2 -o compat=1.1 TEST_DIR/t.qcow2 64M + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 compat='1.1' encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 -o compat=0.42 TEST_DIR/t.qcow2 64M +-Invalid compatibility level: '0.42' +-qemu-img: TEST_DIR/t.qcow2: error while creating qcow2: Invalid argument ++qemu-img: TEST_DIR/t.qcow2: Invalid compatibility level: '0.42' + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 compat='0.42' encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 -o compat=foobar TEST_DIR/t.qcow2 64M +-Invalid compatibility level: 'foobar' +-qemu-img: TEST_DIR/t.qcow2: error while creating qcow2: Invalid argument ++qemu-img: TEST_DIR/t.qcow2: Invalid compatibility level: 'foobar' + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 compat='foobar' encryption=off cluster_size=65536 lazy_refcounts=off + + == Check preallocation option == +@@ -181,8 +179,7 @@ qemu-img create -f qcow2 -o preallocation=metadata TEST_DIR/t.qcow2 64M + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off + + qemu-img create -f qcow2 -o preallocation=1234 TEST_DIR/t.qcow2 64M +-Invalid preallocation mode: '1234' +-qemu-img: TEST_DIR/t.qcow2: error while creating qcow2: Invalid argument ++qemu-img: TEST_DIR/t.qcow2: Invalid preallocation mode: '1234' + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 encryption=off cluster_size=65536 preallocation='1234' lazy_refcounts=off + + == Check encryption option == +@@ -205,8 +202,7 @@ qemu-img create -f qcow2 -o compat=0.10,lazy_refcounts=off TEST_DIR/t.qcow2 64M + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 compat='0.10' encryption=off cluster_size=65536 lazy_refcounts=off + + qemu-img create -f qcow2 -o compat=0.10,lazy_refcounts=on TEST_DIR/t.qcow2 64M +-Lazy refcounts only supported with compatibility level 1.1 and above (use compat=1.1 or greater) +-qemu-img: TEST_DIR/t.qcow2: error while creating qcow2: Invalid argument ++qemu-img: TEST_DIR/t.qcow2: Lazy refcounts only supported with compatibility level 1.1 and above (use compat=1.1 or greater) + Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=67108864 compat='0.10' encryption=off cluster_size=65536 lazy_refcounts=on + + *** done +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index e3cf244..fe0b347 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -4,20 +4,16 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + === Unknown option === + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt= +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=: could not open disk image TEST_DIR/t.qcow2: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on: could not open disk image TEST_DIR/t.qcow2: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234 +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234: could not open disk image TEST_DIR/t.qcow2: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: could not open disk image TEST_DIR/t.qcow2: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt' + + + === Enable and disable lazy refcounting on the command line, plus some invalid values === +@@ -31,24 +27,20 @@ QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts= +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: Parameter 'lazy-refcounts' expects 'on' or 'off' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: could not open disk image TEST_DIR/t.qcow2: Parameter 'lazy-refcounts' expects 'on' or 'off' + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42 +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: Parameter 'lazy-refcounts' expects 'on' or 'off' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: could not open disk image TEST_DIR/t.qcow2: Parameter 'lazy-refcounts' expects 'on' or 'off' + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: Parameter 'lazy-refcounts' expects 'on' or 'off' +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: could not open disk image TEST_DIR/t.qcow2: Parameter 'lazy-refcounts' expects 'on' or 'off' + + + === With version 2 images enabling lazy refcounts must fail === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: could not open disk image TEST_DIR/t.qcow2: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off + QEMU X.Y.Z monitor - type 'help' for more information +@@ -162,21 +154,18 @@ QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2 +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: Can't use 'qcow2' as a block driver for the protocol level +-QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: could not open disk image TEST_DIR/t.qcow2: Invalid argument ++QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: could not open disk image TEST_DIR/t.qcow2: Can't use 'qcow2' as a block driver for the protocol level + + + === Parsing protocol from file name === + + Testing: -hda foo:bar +-QEMU_PROG: -hda foo:bar: Unknown protocol +-QEMU_PROG: -hda foo:bar: could not open disk image foo:bar: No such file or directory ++QEMU_PROG: -hda foo:bar: could not open disk image foo:bar: Unknown protocol + + Testing: -drive file=foo:bar +-QEMU_PROG: -drive file=foo:bar: Unknown protocol +-QEMU_PROG: -drive file=foo:bar: could not open disk image foo:bar: No such file or directory ++QEMU_PROG: -drive file=foo:bar: could not open disk image foo:bar: Unknown protocol + + Testing: -drive file.filename=foo:bar +-QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: No such file or directory ++QEMU_PROG: -drive file.filename=foo:bar: could not open disk image ide0-hd0: Could not open 'foo:bar': No such file or directory + + *** done +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 1187b86..764a3eb 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -123,7 +123,7 @@ _make_test_img() + fi + + # XXX(hch): have global image options? +- $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size | \ ++ $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size 2>&1 | \ + sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \ + -e "s#$TEST_DIR#TEST_DIR#g" \ + -e "s#$IMGFMT#IMGFMT#g" \ +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Check-autodel-behaviour-for-device_del.patch b/SOURCES/kvm-qemu-iotests-Check-autodel-behaviour-for-device_del.patch new file mode 100644 index 0000000..56f3b04 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Check-autodel-behaviour-for-device_del.patch @@ -0,0 +1,292 @@ +From 489749c38620620dced8e638c7f8d724cbb81943 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 7 Nov 2013 12:49:49 +0100 +Subject: [PATCH 58/87] qemu-iotests: Check autodel behaviour for device_del + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-18-git-send-email-kwolf@redhat.com> +Patchwork-id: 55397 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 17/24] qemu-iotests: Check autodel behaviour for device_del +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +Block devices creates with -drive and drive_add should automatically +disappear if the guest device is unplugged. blockdev-add ones shouldn't. + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +(cherry picked from commit a9b43397a9782d028f45b63fb4affee164f85948) + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/067 | 133 ++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/067.out | 80 +++++++++++++++++++++++ + tests/qemu-iotests/common.filter | 8 ++ + tests/qemu-iotests/group | 1 + + 4 files changed, 222 insertions(+), 0 deletions(-) + create mode 100644 tests/qemu-iotests/067 + create mode 100644 tests/qemu-iotests/067.out + +diff --git a/tests/qemu-iotests/067 b/tests/qemu-iotests/067 +new file mode 100644 +index 0000000..79dc38b +--- /dev/null ++++ b/tests/qemu-iotests/067 +@@ -0,0 +1,133 @@ ++#!/bin/bash ++# ++# Test automatic deletion of BDSes created by -drive/drive_add ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++function do_run_qemu() ++{ ++ echo Testing: "$@" ++ $QEMU -nographic -qmp stdio -serial none "$@" ++ echo ++} ++ ++function run_qemu() ++{ ++ do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp ++} ++ ++size=128M ++ ++_make_test_img $size ++ ++echo ++echo === -drive/-device and device_del === ++echo ++ ++run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk -device virtio-blk-pci,drive=disk,id=virtio0 < +Date: Tue, 25 Feb 2014 15:00:05 +0100 +Subject: [PATCH 7/7] qemu-iotests: Check qemu-img command line parsing + +RH-Author: Kevin Wolf +Message-id: <1393340405-9936-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 57798 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 6/6] qemu-iotests: Check qemu-img command line parsing +Bugzilla: 1065873 +RH-Acked-by: Juan Quintela +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +(cherry picked from commit a33cc31d08eb46ec2a4f214087c99e4bd4c907e9) + +Changed reference test output for RHEL 7, which has different error +messages than upstream. + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/082 | 208 ++++++++++++++++++ + tests/qemu-iotests/082.out | 529 +++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 738 insertions(+) + create mode 100755 tests/qemu-iotests/082 + create mode 100644 tests/qemu-iotests/082.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/082 | 208 +++++++++++++++++ + tests/qemu-iotests/082.out | 529 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 738 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/082 + create mode 100644 tests/qemu-iotests/082.out + +diff --git a/tests/qemu-iotests/082 b/tests/qemu-iotests/082 +new file mode 100755 +index 0000000..f6eb75f +--- /dev/null ++++ b/tests/qemu-iotests/082 +@@ -0,0 +1,208 @@ ++#!/bin/bash ++# ++# Test qemu-img command line parsing ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++function run_qemu_img() ++{ ++ echo ++ echo Testing: "$@" | _filter_testdir ++ "$QEMU_IMG" "$@" 2>&1 | _filter_testdir ++} ++ ++size=128M ++ ++echo ++echo === create: Options specified more than once === ++ ++# Last -f should win ++run_qemu_img create -f foo -f $IMGFMT "$TEST_IMG" $size ++run_qemu_img info "$TEST_IMG" ++ ++# Multiple -o should be merged ++run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" $size ++run_qemu_img info "$TEST_IMG" ++ ++# If the same -o key is specified more than once, the last one wins ++run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" $size ++run_qemu_img info "$TEST_IMG" ++run_qemu_img create -f $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" $size ++run_qemu_img info "$TEST_IMG" ++ ++echo ++echo === create: help for -o === ++ ++# Adding the help option to a command without other -o options ++run_qemu_img create -f $IMGFMT -o help "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o \? "$TEST_IMG" $size ++ ++# Adding the help option to the same -o option ++run_qemu_img create -f $IMGFMT -o cluster_size=4k,help "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o help,cluster_size=4k "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" $size ++ ++# Adding the help option to a separate -o option ++run_qemu_img create -f $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" $size ++ ++# Looks like a help option, but is part of the backing file name ++run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG",,help "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG",,\? "$TEST_IMG" $size ++ ++# Try to trick qemu-img into creating escaped commas ++run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" $size ++run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" $size ++ ++# Leave out everything that isn't needed ++run_qemu_img create -f $IMGFMT -o help ++run_qemu_img create -o help ++ ++echo ++echo === convert: Options specified more than once === ++ ++# We need a valid source image ++run_qemu_img create -f $IMGFMT "$TEST_IMG" $size ++ ++# Last -f should win ++run_qemu_img convert -f foo -f $IMGFMT "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img info "$TEST_IMG".base ++ ++# Last -O should win ++run_qemu_img convert -O foo -O $IMGFMT "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img info "$TEST_IMG".base ++ ++# Multiple -o should be merged ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img info "$TEST_IMG".base ++ ++# If the same -o key is specified more than once, the last one wins ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img info "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img info "$TEST_IMG".base ++ ++echo ++echo === convert: help for -o === ++ ++# Adding the help option to a command without other -o options ++run_qemu_img convert -O $IMGFMT -o help "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o \? "$TEST_IMG" "$TEST_IMG".base ++ ++# Adding the help option to the same -o option ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k,help "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o help,cluster_size=4k "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" "$TEST_IMG".base ++ ++# Adding the help option to a separate -o option ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" "$TEST_IMG".base ++ ++# Looks like a help option, but is part of the backing file name ++run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG",,help "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG",,\? "$TEST_IMG" "$TEST_IMG".base ++ ++# Try to trick qemu-img into creating escaped commas ++run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" "$TEST_IMG".base ++run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" "$TEST_IMG".base ++ ++# Leave out everything that isn't needed ++run_qemu_img convert -O $IMGFMT -o help ++run_qemu_img convert -o help ++ ++echo ++echo === amend: Options specified more than once === ++ ++# Last -f should win ++run_qemu_img amend -f foo -f $IMGFMT -o lazy_refcounts=on "$TEST_IMG" ++run_qemu_img info "$TEST_IMG" ++ ++# Multiple -o should be merged ++run_qemu_img amend -f $IMGFMT -o size=130M -o lazy_refcounts=off "$TEST_IMG" ++run_qemu_img info "$TEST_IMG" ++ ++# If the same -o key is specified more than once, the last one wins ++run_qemu_img amend -f $IMGFMT -o size=8M -o lazy_refcounts=on -o size=132M "$TEST_IMG" ++run_qemu_img info "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o size=4M,size=148M "$TEST_IMG" ++run_qemu_img info "$TEST_IMG" ++ ++echo ++echo === amend: help for -o === ++ ++# Adding the help option to a command without other -o options ++run_qemu_img amend -f $IMGFMT -o help "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o \? "$TEST_IMG" ++ ++# Adding the help option to the same -o option ++run_qemu_img amend -f $IMGFMT -o cluster_size=4k,help "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o help,cluster_size=4k "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" ++ ++# Adding the help option to a separate -o option ++run_qemu_img amend -f $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" ++ ++# Looks like a help option, but is part of the backing file name ++run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG",,help "$TEST_IMG" ++run_qemu_img rebase -u -b "" -f $IMGFMT "$TEST_IMG" ++ ++run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG",,\? "$TEST_IMG" ++run_qemu_img rebase -u -b "" -f $IMGFMT "$TEST_IMG" ++ ++# Try to trick qemu-img into creating escaped commas ++run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" ++run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" ++ ++# Leave out everything that isn't needed ++run_qemu_img amend -f $IMGFMT -o help ++run_qemu_img convert -o help ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/082.out b/tests/qemu-iotests/082.out +new file mode 100644 +index 0000000..d71610b +--- /dev/null ++++ b/tests/qemu-iotests/082.out +@@ -0,0 +1,529 @@ ++QA output created by 082 ++ ++=== create: Options specified more than once === ++ ++Testing: create -f foo -f qcow2 TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=65536 lazy_refcounts=off ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 196K ++cluster_size: 65536 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: false ++ ++Testing: create -f qcow2 -o cluster_size=4k -o lazy_refcounts=on TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=4096 lazy_refcounts=on ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 16K ++cluster_size: 4096 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++Testing: create -f qcow2 -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=8192 lazy_refcounts=on ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 28K ++cluster_size: 8192 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++Testing: create -f qcow2 -o cluster_size=4k,cluster_size=8k TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=8192 lazy_refcounts=off ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 28K ++cluster_size: 8192 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: false ++ ++=== create: help for -o === ++ ++Testing: create -f qcow2 -o help TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o ? TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o cluster_size=4k,help TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o cluster_size=4k,? TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o help,cluster_size=4k TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o ?,cluster_size=4k TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o cluster_size=4k -o help TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o cluster_size=4k -o ? TEST_DIR/t.qcow2 128M ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -f qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 backing_file='TEST_DIR/t.qcow2,help' encryption=off cluster_size=65536 lazy_refcounts=off ++ ++Testing: create -f qcow2 -o backing_file=TEST_DIR/t.qcow2,,? TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 backing_file='TEST_DIR/t.qcow2,?' encryption=off cluster_size=65536 lazy_refcounts=off ++ ++Testing: create -f qcow2 -o backing_file=TEST_DIR/t.qcow2, -o help TEST_DIR/t.qcow2 128M ++qemu-img: Invalid option list: backing_file=TEST_DIR/t.qcow2, ++ ++Testing: create -f qcow2 -o backing_file=TEST_DIR/t.qcow2 -o ,help TEST_DIR/t.qcow2 128M ++qemu-img: Invalid option list: ,help ++ ++Testing: create -f qcow2 -o backing_file=TEST_DIR/t.qcow2 -o ,, -o help TEST_DIR/t.qcow2 128M ++qemu-img: Invalid option list: ,, ++ ++Testing: create -f qcow2 -o help ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: create -o help ++Supported options: ++size Virtual disk size ++ ++=== convert: Options specified more than once === ++ ++Testing: create -f qcow2 TEST_DIR/t.qcow2 128M ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=134217728 encryption=off cluster_size=65536 lazy_refcounts=off ++ ++Testing: convert -f foo -f qcow2 TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++ ++Testing: info TEST_DIR/t.qcow2.base ++image: TEST_DIR/t.qcow2.base ++file format: raw ++virtual size: 128M (134217728 bytes) ++disk size: 0 ++ ++Testing: convert -O foo -O qcow2 TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++ ++Testing: info TEST_DIR/t.qcow2.base ++image: TEST_DIR/t.qcow2.base ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 196K ++cluster_size: 65536 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: false ++ ++Testing: convert -O qcow2 -o cluster_size=4k -o lazy_refcounts=on TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++ ++Testing: info TEST_DIR/t.qcow2.base ++image: TEST_DIR/t.qcow2.base ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 16K ++cluster_size: 4096 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++Testing: convert -O qcow2 -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++ ++Testing: info TEST_DIR/t.qcow2.base ++image: TEST_DIR/t.qcow2.base ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 28K ++cluster_size: 8192 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++Testing: convert -O qcow2 -o cluster_size=4k,cluster_size=8k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++ ++Testing: info TEST_DIR/t.qcow2.base ++image: TEST_DIR/t.qcow2.base ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 28K ++cluster_size: 8192 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: false ++ ++=== convert: help for -o === ++ ++Testing: convert -O qcow2 -o help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o ? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o cluster_size=4k,help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o cluster_size=4k,? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o help,cluster_size=4k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o ?,cluster_size=4k TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o cluster_size=4k -o help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o cluster_size=4k -o ? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++qemu-img: Could not open 'TEST_DIR/t.qcow2.base': Could not open file: No such file or directory ++ ++Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2,,? TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++qemu-img: Could not open 'TEST_DIR/t.qcow2.base': Could not open file: No such file or directory ++ ++Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2, -o help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++qemu-img: Invalid option list: backing_file=TEST_DIR/t.qcow2, ++ ++Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2 -o ,help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++qemu-img: Invalid option list: ,help ++ ++Testing: convert -O qcow2 -o backing_file=TEST_DIR/t.qcow2 -o ,, -o help TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.base ++qemu-img: Invalid option list: ,, ++ ++Testing: convert -O qcow2 -o help ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -o help ++Supported options: ++size Virtual disk size ++ ++=== amend: Options specified more than once === ++ ++Testing: amend -f foo -f qcow2 -o lazy_refcounts=on TEST_DIR/t.qcow2 ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 128M (134217728 bytes) ++disk size: 196K ++cluster_size: 65536 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++Testing: amend -f qcow2 -o size=130M -o lazy_refcounts=off TEST_DIR/t.qcow2 ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 130M (136314880 bytes) ++disk size: 196K ++cluster_size: 65536 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: false ++ ++Testing: amend -f qcow2 -o size=8M -o lazy_refcounts=on -o size=132M TEST_DIR/t.qcow2 ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 132M (138412032 bytes) ++disk size: 196K ++cluster_size: 65536 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++Testing: amend -f qcow2 -o size=4M,size=148M TEST_DIR/t.qcow2 ++ ++Testing: info TEST_DIR/t.qcow2 ++image: TEST_DIR/t.qcow2 ++file format: qcow2 ++virtual size: 148M (155189248 bytes) ++disk size: 196K ++cluster_size: 65536 ++Format specific information: ++ compat: 1.1 ++ lazy refcounts: true ++ ++=== amend: help for -o === ++ ++Testing: amend -f qcow2 -o help TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o ? TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o cluster_size=4k,help TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o cluster_size=4k,? TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o help,cluster_size=4k TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o ?,cluster_size=4k TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o cluster_size=4k -o help TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o cluster_size=4k -o ? TEST_DIR/t.qcow2 ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: amend -f qcow2 -o backing_file=TEST_DIR/t.qcow2,,help TEST_DIR/t.qcow2 ++ ++Testing: rebase -u -b -f qcow2 TEST_DIR/t.qcow2 ++ ++Testing: amend -f qcow2 -o backing_file=TEST_DIR/t.qcow2,,? TEST_DIR/t.qcow2 ++ ++Testing: rebase -u -b -f qcow2 TEST_DIR/t.qcow2 ++ ++Testing: amend -f qcow2 -o backing_file=TEST_DIR/t.qcow2, -o help TEST_DIR/t.qcow2 ++qemu-img: Invalid option list: backing_file=TEST_DIR/t.qcow2, ++ ++Testing: amend -f qcow2 -o backing_file=TEST_DIR/t.qcow2 -o ,help TEST_DIR/t.qcow2 ++qemu-img: Invalid option list: ,help ++ ++Testing: amend -f qcow2 -o backing_file=TEST_DIR/t.qcow2 -o ,, -o help TEST_DIR/t.qcow2 ++qemu-img: Invalid option list: ,, ++ ++Testing: amend -f qcow2 -o help ++Supported options: ++size Virtual disk size ++compat Compatibility level (0.10 or 1.1) ++backing_file File name of a base image ++backing_fmt Image format of the base image ++encryption Encrypt the image ++cluster_size qcow2 cluster size ++preallocation Preallocation mode (allowed values: off, metadata) ++lazy_refcounts Postpone refcount updates ++ ++Testing: convert -o help ++Supported options: ++size Virtual disk size ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index fce6ca8..ee95d6e 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -73,3 +73,4 @@ + 070 rw auto + 077 rw auto + 079 rw auto ++082 rw auto quick +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Disable-030-040-041.patch b/SOURCES/kvm-qemu-iotests-Disable-030-040-041.patch new file mode 100644 index 0000000..5f26239 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Disable-030-040-041.patch @@ -0,0 +1,53 @@ +From 17c2dbd411ce0b2221b5559c3c0eff01920dea40 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:47:19 +0100 +Subject: [PATCH 18/24] qemu-iotests: Disable 030, 040, 041 + +RH-Author: Max Reitz +Message-id: <20170313174719.29543-1-mreitz@redhat.com> +Patchwork-id: 74280 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 9/9] qemu-iotests: Disable 030, 040, 041 +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +Upstream: N/A + +All of these tests require (and test) live block operations, 030 and 041 +also need blkdebug support. Both of these features are disabled +downstream, so the tests need to be disabled, too. + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/group | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 58b3d05..c1fc89d 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -36,7 +36,7 @@ + 027 rw auto quick + 028 rw backing auto + 029 rw auto quick +-030 rw auto backing ++# 030 rw auto backing -- requires blkdebug and block jobs + 031 rw auto quick + 032 rw auto + 033 rw auto quick +@@ -46,8 +46,8 @@ + 037 rw auto backing + 038 rw auto backing + 039 rw auto +-040 rw auto +-041 rw auto backing ++# 040 rw auto -- requires block jobs ++# 041 rw auto backing -- requires blkdebug and block jobs + 042 rw auto quick + 043 rw auto backing + 044 rw auto +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-iotests-Discard-preallocated-zero-clusters.patch b/SOURCES/kvm-qemu-iotests-Discard-preallocated-zero-clusters.patch new file mode 100644 index 0000000..bce4660 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Discard-preallocated-zero-clusters.patch @@ -0,0 +1,147 @@ +From 5fe07e00b182e79e2e8095916d18cc0f37348efe Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 2 May 2014 16:06:21 +0200 +Subject: [PATCH 03/31] qemu-iotests: Discard preallocated zero clusters + +RH-Author: Max Reitz +Message-id: <1399046781-16359-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 58645 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] qemu-iotests: Discard preallocated zero clusters +Bugzilla: 1052093 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Jeffrey Cody + +BZ: 1052093 + +Add a new test case for discarding preallocated zero clusters; doing +this should not result in any leaks. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 975a93c082452db9aa1397a797ca8f13ba367393) + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/066 | 63 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/066.out | 13 ++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 77 insertions(+) + create mode 100755 tests/qemu-iotests/066 + create mode 100644 tests/qemu-iotests/066.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/066 | 63 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/066.out | 13 +++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 77 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/066 + create mode 100644 tests/qemu-iotests/066.out + +diff --git a/tests/qemu-iotests/066 b/tests/qemu-iotests/066 +new file mode 100755 +index 0000000..1c2452b +--- /dev/null ++++ b/tests/qemu-iotests/066 +@@ -0,0 +1,63 @@ ++#!/bin/bash ++# ++# Test case for discarding preallocated zero clusters in qcow2 ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests qocw2-specific low-level functionality ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++IMGOPTS="compat=1.1" ++IMG_SIZE=64M ++ ++echo ++echo "=== Testing snapshotting an image with zero clusters ===" ++echo ++_make_test_img $IMG_SIZE ++# Write some normal clusters, zero them (creating preallocated zero clusters) ++# and discard those ++$QEMU_IO -c "write 0 256k" -c "write -z 0 256k" -c "discard 0 256k" "$TEST_IMG" \ ++ | _filter_qemu_io ++# Check the image (there shouldn't be any leaks) ++_check_test_img ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/066.out b/tests/qemu-iotests/066.out +new file mode 100644 +index 0000000..9139780 +--- /dev/null ++++ b/tests/qemu-iotests/066.out +@@ -0,0 +1,13 @@ ++QA output created by 066 ++ ++=== Testing snapshotting an image with zero clusters === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 262144/262144 bytes at offset 0 ++256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 262144/262144 bytes at offset 0 ++256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++discard 262144/262144 bytes at offset 0 ++256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index ad96fcf..1c91036 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -68,6 +68,7 @@ + 063 rw auto + 064 rw auto + 065 rw auto ++066 rw auto + 067 rw auto + 068 rw auto + 070 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Discard-specific-info-in-_img_info.patch b/SOURCES/kvm-qemu-iotests-Discard-specific-info-in-_img_info.patch new file mode 100644 index 0000000..e5cf37f --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Discard-specific-info-in-_img_info.patch @@ -0,0 +1,90 @@ +From 9fe83d3e480a74024150774c38373122084dfe10 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:38 +0100 +Subject: [PATCH 81/87] qemu-iotests: Discard specific info in _img_info + +RH-Author: Max Reitz +Message-id: <1383756824-6921-16-git-send-email-mreitz@redhat.com> +Patchwork-id: 55570 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 15/21] qemu-iotests: Discard specific info in _img_info +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +BZ: 980771 + +In _img_info, filter out additional information specific to the image +format provided by qemu-img info, since tests designed for multiple +image formats would produce different outputs for every image format +otherwise. + +In a human-readable dump, that new information will always be last for +each "image information block" (multiple blocks are emitted when +inspecting the backing file chain). Every block is separated by an empty +line. Therefore, in this case, everything starting with the line "Format +specific information:" up to that empty line (or EOF, if it is the last +block) has to be stripped. + +The JSON dump will always emit pretty JSON data. Therefore, the opening +and closing braces of every object will be on lines which are indented +by exactly the same amount, and all lines in between will have more +indentation. Thus, in this case, everything starting with a line +matching the regular expression /^ *"format-specific": {/ until /^ *},?/ +has to be stripped, where the number of spaces at the beginning of the +respective lines is equal. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 4c2e946500c45685fdec61b3d929311dc26a2ad5) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/common.rc | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/common.rc | 20 +++++++++++++++++++- + 1 files changed, 19 insertions(+), 1 deletions(-) + +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 1b22db0..227c003 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -197,12 +197,30 @@ _check_test_img() + + _img_info() + { ++ discard=0 ++ regex_json_spec_start='^ *"format-specific": \{' + $QEMU_IMG info "$@" "$TEST_IMG" 2>&1 | \ + sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \ + -e "s#$TEST_DIR#TEST_DIR#g" \ + -e "s#$IMGFMT#IMGFMT#g" \ + -e "/^disk size:/ D" \ +- -e "/actual-size/ D" ++ -e "/actual-size/ D" | \ ++ while IFS='' read line; do ++ if [[ $line == "Format specific information:" ]]; then ++ discard=1 ++ elif [[ $line =~ $regex_json_spec_start ]]; then ++ discard=2 ++ regex_json_spec_end="^${line%%[^ ]*}\\},? *$" ++ fi ++ if [[ $discard == 0 ]]; then ++ echo "$line" ++ elif [[ $discard == 1 && ! $line ]]; then ++ echo ++ discard=0 ++ elif [[ $discard == 2 && $line =~ $regex_json_spec_end ]]; then ++ discard=0 ++ fi ++ done + } + + _get_pids_by_name() +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Don-t-run-005-on-vmdk-split-formats.patch b/SOURCES/kvm-qemu-iotests-Don-t-run-005-on-vmdk-split-formats.patch new file mode 100644 index 0000000..93fcfc4 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Don-t-run-005-on-vmdk-split-formats.patch @@ -0,0 +1,68 @@ +From 25a620f2e952cdbc10b148f403013e07e0b7285f Mon Sep 17 00:00:00 2001 +Message-Id: <25a620f2e952cdbc10b148f403013e07e0b7285f.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:04 -0600 +Subject: [CHANGE 10/31] qemu-iotests: Don't run 005 on vmdk split formats +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-11-git-send-email-famz@redhat.com> +Patchwork-id: 62683 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 10/30] qemu-iotests: Don't run 005 on vmdk split formats +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +There would be too many extents that VMDK driver can't open all of them: + + > 005 0s ... - output mismatch (see 005.out.bad) + > --- 005.out 2013-12-24 09:27:27.608181030 +0800 + > +++ 005.out.bad 2014-02-13 10:00:15.282184557 +0800 + > @@ -4,10 +4,10 @@ + > Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=5368709120000 + > + > small read + > -read 4096/4096 bytes at offset 1024 + > -4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + > +qemu-io: can't open device /tmp/qemu-iotests/t.vmdk: Could not open '/tmp/qemu-iotests/t-s1016.vmdk': Too many open files + > +no file open, try 'help open' + > + > small write + > -wrote 4096/4096 bytes at offset 8192 + > -4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + > +qemu-io: can't open device /tmp/qemu-iotests/t.vmdk: Could not open '/tmp/qemu-iotests/t-s1016.vmdk': Too many open files + > +no file open, try 'help open' + > *** done + +So disable the two subformats. + +Signed-off-by: Fam Zheng +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 2aa4a86f59c7093e03d2ec18c5d5f08c957d1a78) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/005 | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tests/qemu-iotests/005 b/tests/qemu-iotests/005 +index 9abcb84..ba1236d 100755 +--- a/tests/qemu-iotests/005 ++++ b/tests/qemu-iotests/005 +@@ -44,6 +44,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 + _supported_fmt generic + _supported_proto generic + _supported_os Linux ++_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" + + # vpc is limited to 127GB, so we can't test it here + if [ "$IMGFMT" = "vpc" ]; then +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-iotests-Extend-041-for-unbacked-mirroring.patch b/SOURCES/kvm-qemu-iotests-Extend-041-for-unbacked-mirroring.patch new file mode 100644 index 0000000..805ba8b --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Extend-041-for-unbacked-mirroring.patch @@ -0,0 +1,88 @@ +From 728f93f0bf205f8b4ebbf2c4f0e57ecd63e1ea98 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:07:58 +0100 +Subject: [PATCH 24/34] qemu-iotests: Extend 041 for unbacked mirroring + +RH-Author: Max Reitz +Message-id: <1390154881-17140-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 56817 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 4/7] qemu-iotests: Extend 041 for unbacked mirroring +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +BZ: 921890 + +Add a new test case in file 041 for mirroring unbacked images in +"absolute-paths" mode. This should work, if possible, but most +importantly, qemu should never crash. + +Signed-off-by: Max Reitz +Reviewed-by: Wenchao Xia +Reviewed-by: Paolo Bonzini +Signed-off-by: Kevin Wolf +(cherry picked from commit c15badee200f9e743e3639cc5e3e7dd62c69332f) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/041 | 25 +++++++++++++++++++++++++ + tests/qemu-iotests/041.out | 4 ++-- + 2 files changed, 27 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/041 | 25 +++++++++++++++++++++++++ + tests/qemu-iotests/041.out | 4 ++-- + 2 files changed, 27 insertions(+), 2 deletions(-) + +diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 +index ff89427..eccfe38 100755 +--- a/tests/qemu-iotests/041 ++++ b/tests/qemu-iotests/041 +@@ -736,5 +736,30 @@ class TestSetSpeed(ImageMirroringTestCase): + + self.cancel_and_wait() + ++class TestUnbackedSource(ImageMirroringTestCase): ++ image_len = 2 * 1024 * 1024 # MB ++ ++ def setUp(self): ++ qemu_img('create', '-f', iotests.imgfmt, test_img, ++ str(TestUnbackedSource.image_len)) ++ self.vm = iotests.VM().add_drive(test_img) ++ self.vm.launch() ++ ++ def tearDown(self): ++ self.vm.shutdown() ++ os.remove(test_img) ++ os.remove(target_img) ++ ++ def test_absolute_paths(self): ++ self.assert_no_active_block_jobs() ++ ++ for sync_mode in ['full', 'top', 'none']: ++ result = self.vm.qmp('drive-mirror', device='drive0', ++ sync=sync_mode, target=target_img, ++ mode='absolute-paths') ++ self.assert_qmp(result, 'return', {}) ++ self.complete_and_wait() ++ self.assert_no_active_block_jobs() ++ + if __name__ == '__main__': + iotests.main(supported_fmts=['qcow2', 'qed']) +diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out +index 42314e9..4fd1c2d 100644 +--- a/tests/qemu-iotests/041.out ++++ b/tests/qemu-iotests/041.out +@@ -1,5 +1,5 @@ +-........................ ++......................... + ---------------------------------------------------------------------- +-Ran 24 tests ++Ran 25 tests + + OK +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Filter-out-actual-image-size-in-067.patch b/SOURCES/kvm-qemu-iotests-Filter-out-actual-image-size-in-067.patch new file mode 100644 index 0000000..55fb981 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Filter-out-actual-image-size-in-067.patch @@ -0,0 +1,93 @@ +From 858514a037db08493b7cdd6adaf87466ee2f7831 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:45:08 +0100 +Subject: [PATCH 10/24] qemu-iotests: Filter out actual image size in 067 + +RH-Author: Max Reitz +Message-id: <20170313174516.28044-2-mreitz@redhat.com> +Patchwork-id: 74273 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/9] qemu-iotests: Filter out actual image size in 067 +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +The actual size of the image file may differ depending on the Linux +kernel currently running on the host. Filtering out this value makes +this test pass in such cases. + +Signed-off-by: Max Reitz +Reviewed-by: Benoit Canet +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 64815e2a966f0a3f18818b9d542f1ef02dc992a2) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/067 | 2 +- + tests/qemu-iotests/067.out | 10 +++++----- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/tests/qemu-iotests/067 b/tests/qemu-iotests/067 +index 79dc38b..d025192 100644 +--- a/tests/qemu-iotests/067 ++++ b/tests/qemu-iotests/067 +@@ -45,7 +45,7 @@ function do_run_qemu() + + function run_qemu() + { +- do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp ++ do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp | sed -e 's/\("actual-size":\s*\)[0-9]\+/\1SIZE/g' + } + + size=128M +diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out +index 4bb9ff9..8d271cc 100644 +--- a/tests/qemu-iotests/067.out ++++ b/tests/qemu-iotests/067.out +@@ -6,7 +6,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virtio-blk-pci,drive=disk,id=virtio0 + QMP_VERSION + {"return": {}} +-{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": 139264, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} ++{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} + {"return": {}} + {"return": {}} + {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}} +@@ -24,7 +24,7 @@ QMP_VERSION + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk + QMP_VERSION + {"return": {}} +-{"return": [{"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": 139264, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} ++{"return": [{"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} + {"return": {}} + {"return": {}} + {"return": {}} +@@ -44,7 +44,7 @@ Testing: + QMP_VERSION + {"return": {}} + {"return": "OK\r\n"} +-{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": 139264, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} ++{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} + {"return": {}} + {"return": {}} + {"return": {}} +@@ -64,14 +64,14 @@ Testing: + QMP_VERSION + {"return": {}} + {"return": {}} +-{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": 139264, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} ++{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} + {"return": {}} + {"return": {}} + {"return": {}} + {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}} + {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}} + {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESET"} +-{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": 139264, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} ++{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} + {"return": {}} + {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} + {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-iotests-Filter-out-qemu-io-prompt.patch b/SOURCES/kvm-qemu-iotests-Filter-out-qemu-io-prompt.patch new file mode 100644 index 0000000..2431f21 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Filter-out-qemu-io-prompt.patch @@ -0,0 +1,225458 @@ +From 20316e8a2cb7499d5430382b6cf85e34308304a4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 18 Nov 2013 15:13:01 +0800 +Subject: [PATCH 34/37] qemu-iotests: Filter out 'qemu-io> ' prompt + +Message-id: n/a, patch too big +Patchwork-id: n/a, patch too big +O-Subject: n/a, patch too big +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +This removes "qemu-io> " prompt from qemu-io output in _filter_qemu_io, +and updates all the output files with the following command: + + cd tests/qemu-iotests && sed -i "s/qemu-io> //g" *.out + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit c34b8012e877f494c7be5abdfb67b51242a6935e) + +Conflicts: + tests/qemu-iotests/048.out + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/013.out |44080 +++++++++++++------------- + tests/qemu-iotests/014.out |64204 +++++++++++++++++++------------------- + tests/qemu-iotests/017.out | 1080 +- + tests/qemu-iotests/018.out | 1080 +- + tests/qemu-iotests/019.out | 1636 +- + tests/qemu-iotests/020.out | 1080 +- + tests/qemu-iotests/022.out | 8816 +++--- + tests/qemu-iotests/023.out |26800 ++++++++-------- + tests/qemu-iotests/024.out | 164 +- + tests/qemu-iotests/025.out | 18 +- + tests/qemu-iotests/028.out | 458 +- + tests/qemu-iotests/032.out | 68 +- + tests/qemu-iotests/035.out | 2 +- + tests/qemu-iotests/037.out | 616 +- + tests/qemu-iotests/038.out | 714 +- + tests/qemu-iotests/046.out | 232 +- + tests/qemu-iotests/047.out | 20 +- + tests/qemu-iotests/048.out | 18 +- + tests/qemu-iotests/common.filter | 3 +- + 19 files changed, 75545 insertions(+), 75544 deletions(-) + +diff --git a/tests/qemu-iotests/013.out b/tests/qemu-iotests/013.out +index 0d57187..43a414c 100644 +--- a/tests/qemu-iotests/013.out ++++ b/tests/qemu-iotests/013.out +@@ -4,43980 +4,43980 @@ Testing empty image + + At offset 0: + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + At offset 4294967296: + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Compressing image + + Testing compressed image + + With offset 0: + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967296: + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Testing compressed image with odd offsets + + With offset 512: + === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 512 ++wrote 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4608 ++wrote 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8704 ++wrote 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12800 ++wrote 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16896 ++wrote 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20992 ++wrote 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 25088 ++wrote 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 29184 ++wrote 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 33280 ++wrote 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 37376 ++wrote 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 41472 ++wrote 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45568 ++wrote 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49664 ++wrote 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53760 ++wrote 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57856 ++wrote 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61952 ++wrote 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 66048 ++wrote 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 70144 ++wrote 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 74240 ++wrote 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 78336 ++wrote 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 82432 ++wrote 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86528 ++wrote 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90624 ++wrote 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94720 ++wrote 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98816 ++wrote 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102912 ++wrote 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 107008 ++wrote 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 111104 ++wrote 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 115200 ++wrote 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 119296 ++wrote 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 123392 ++wrote 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 127488 ++wrote 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131584 ++wrote 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135680 ++wrote 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139776 ++wrote 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143872 ++wrote 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147968 ++wrote 4096/4096 bytes at offset 147968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 152064 ++wrote 4096/4096 bytes at offset 152064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 156160 ++wrote 4096/4096 bytes at offset 156160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 160256 ++wrote 4096/4096 bytes at offset 160256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 164352 ++wrote 4096/4096 bytes at offset 164352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 168448 ++wrote 4096/4096 bytes at offset 168448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172544 ++wrote 4096/4096 bytes at offset 172544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176640 ++wrote 4096/4096 bytes at offset 176640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180736 ++wrote 4096/4096 bytes at offset 180736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184832 ++wrote 4096/4096 bytes at offset 184832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188928 ++wrote 4096/4096 bytes at offset 188928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 193024 ++wrote 4096/4096 bytes at offset 193024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 197120 ++wrote 4096/4096 bytes at offset 197120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 201216 ++wrote 4096/4096 bytes at offset 201216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 205312 ++wrote 4096/4096 bytes at offset 205312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 209408 ++wrote 4096/4096 bytes at offset 209408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 213504 ++wrote 4096/4096 bytes at offset 213504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217600 ++wrote 4096/4096 bytes at offset 217600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221696 ++wrote 4096/4096 bytes at offset 221696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225792 ++wrote 4096/4096 bytes at offset 225792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229888 ++wrote 4096/4096 bytes at offset 229888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233984 ++wrote 4096/4096 bytes at offset 233984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 238080 ++wrote 4096/4096 bytes at offset 238080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 242176 ++wrote 4096/4096 bytes at offset 242176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 246272 ++wrote 4096/4096 bytes at offset 246272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 250368 ++wrote 4096/4096 bytes at offset 250368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 254464 ++wrote 4096/4096 bytes at offset 254464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258560 ++wrote 4096/4096 bytes at offset 258560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262656 ++wrote 4096/4096 bytes at offset 262656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266752 ++wrote 4096/4096 bytes at offset 266752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270848 ++wrote 4096/4096 bytes at offset 270848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274944 ++wrote 4096/4096 bytes at offset 274944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 279040 ++wrote 4096/4096 bytes at offset 279040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 283136 ++wrote 4096/4096 bytes at offset 283136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 287232 ++wrote 4096/4096 bytes at offset 287232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 291328 ++wrote 4096/4096 bytes at offset 291328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 295424 ++wrote 4096/4096 bytes at offset 295424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299520 ++wrote 4096/4096 bytes at offset 299520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303616 ++wrote 4096/4096 bytes at offset 303616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307712 ++wrote 4096/4096 bytes at offset 307712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311808 ++wrote 4096/4096 bytes at offset 311808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315904 ++wrote 4096/4096 bytes at offset 315904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 320000 ++wrote 4096/4096 bytes at offset 320000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 324096 ++wrote 4096/4096 bytes at offset 324096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 328192 ++wrote 4096/4096 bytes at offset 328192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 332288 ++wrote 4096/4096 bytes at offset 332288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 336384 ++wrote 4096/4096 bytes at offset 336384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 340480 ++wrote 4096/4096 bytes at offset 340480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344576 ++wrote 4096/4096 bytes at offset 344576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348672 ++wrote 4096/4096 bytes at offset 348672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352768 ++wrote 4096/4096 bytes at offset 352768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356864 ++wrote 4096/4096 bytes at offset 356864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360960 ++wrote 4096/4096 bytes at offset 360960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 365056 ++wrote 4096/4096 bytes at offset 365056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 369152 ++wrote 4096/4096 bytes at offset 369152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 373248 ++wrote 4096/4096 bytes at offset 373248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 377344 ++wrote 4096/4096 bytes at offset 377344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 381440 ++wrote 4096/4096 bytes at offset 381440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385536 ++wrote 4096/4096 bytes at offset 385536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389632 ++wrote 4096/4096 bytes at offset 389632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393728 ++wrote 4096/4096 bytes at offset 393728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397824 ++wrote 4096/4096 bytes at offset 397824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401920 ++wrote 4096/4096 bytes at offset 401920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 406016 ++wrote 4096/4096 bytes at offset 406016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 410112 ++wrote 4096/4096 bytes at offset 410112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 414208 ++wrote 4096/4096 bytes at offset 414208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 418304 ++wrote 4096/4096 bytes at offset 418304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 422400 ++wrote 4096/4096 bytes at offset 422400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 426496 ++wrote 4096/4096 bytes at offset 426496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430592 ++wrote 4096/4096 bytes at offset 430592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434688 ++wrote 4096/4096 bytes at offset 434688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438784 ++wrote 4096/4096 bytes at offset 438784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442880 ++wrote 4096/4096 bytes at offset 442880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446976 ++wrote 4096/4096 bytes at offset 446976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 451072 ++wrote 4096/4096 bytes at offset 451072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 455168 ++wrote 4096/4096 bytes at offset 455168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 459264 ++wrote 4096/4096 bytes at offset 459264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 463360 ++wrote 4096/4096 bytes at offset 463360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 467456 ++wrote 4096/4096 bytes at offset 467456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471552 ++wrote 4096/4096 bytes at offset 471552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475648 ++wrote 4096/4096 bytes at offset 475648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479744 ++wrote 4096/4096 bytes at offset 479744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483840 ++wrote 4096/4096 bytes at offset 483840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487936 ++wrote 4096/4096 bytes at offset 487936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 492032 ++wrote 4096/4096 bytes at offset 492032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 496128 ++wrote 4096/4096 bytes at offset 496128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 500224 ++wrote 4096/4096 bytes at offset 500224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 504320 ++wrote 4096/4096 bytes at offset 504320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 508416 ++wrote 4096/4096 bytes at offset 508416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512512 ++wrote 4096/4096 bytes at offset 512512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516608 ++wrote 4096/4096 bytes at offset 516608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520704 ++wrote 4096/4096 bytes at offset 520704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524800 ++wrote 4096/4096 bytes at offset 524800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528896 ++wrote 4096/4096 bytes at offset 528896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532992 ++wrote 4096/4096 bytes at offset 532992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 537088 ++wrote 4096/4096 bytes at offset 537088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 541184 ++wrote 4096/4096 bytes at offset 541184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 545280 ++wrote 4096/4096 bytes at offset 545280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 549376 ++wrote 4096/4096 bytes at offset 549376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 553472 ++wrote 4096/4096 bytes at offset 553472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557568 ++wrote 4096/4096 bytes at offset 557568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561664 ++wrote 4096/4096 bytes at offset 561664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565760 ++wrote 4096/4096 bytes at offset 565760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569856 ++wrote 4096/4096 bytes at offset 569856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573952 ++wrote 4096/4096 bytes at offset 573952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 578048 ++wrote 4096/4096 bytes at offset 578048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 582144 ++wrote 4096/4096 bytes at offset 582144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 586240 ++wrote 4096/4096 bytes at offset 586240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 590336 ++wrote 4096/4096 bytes at offset 590336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 594432 ++wrote 4096/4096 bytes at offset 594432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598528 ++wrote 4096/4096 bytes at offset 598528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602624 ++wrote 4096/4096 bytes at offset 602624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606720 ++wrote 4096/4096 bytes at offset 606720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610816 ++wrote 4096/4096 bytes at offset 610816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614912 ++wrote 4096/4096 bytes at offset 614912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 619008 ++wrote 4096/4096 bytes at offset 619008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 623104 ++wrote 4096/4096 bytes at offset 623104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 627200 ++wrote 4096/4096 bytes at offset 627200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 631296 ++wrote 4096/4096 bytes at offset 631296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 635392 ++wrote 4096/4096 bytes at offset 635392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 639488 ++wrote 4096/4096 bytes at offset 639488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643584 ++wrote 4096/4096 bytes at offset 643584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647680 ++wrote 4096/4096 bytes at offset 647680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651776 ++wrote 4096/4096 bytes at offset 651776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655872 ++wrote 4096/4096 bytes at offset 655872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659968 ++wrote 4096/4096 bytes at offset 659968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 664064 ++wrote 4096/4096 bytes at offset 664064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 668160 ++wrote 4096/4096 bytes at offset 668160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 672256 ++wrote 4096/4096 bytes at offset 672256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 676352 ++wrote 4096/4096 bytes at offset 676352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 680448 ++wrote 4096/4096 bytes at offset 680448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684544 ++wrote 4096/4096 bytes at offset 684544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688640 ++wrote 4096/4096 bytes at offset 688640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692736 ++wrote 4096/4096 bytes at offset 692736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696832 ++wrote 4096/4096 bytes at offset 696832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700928 ++wrote 4096/4096 bytes at offset 700928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 705024 ++wrote 4096/4096 bytes at offset 705024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 709120 ++wrote 4096/4096 bytes at offset 709120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 713216 ++wrote 4096/4096 bytes at offset 713216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 717312 ++wrote 4096/4096 bytes at offset 717312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 721408 ++wrote 4096/4096 bytes at offset 721408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 725504 ++wrote 4096/4096 bytes at offset 725504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729600 ++wrote 4096/4096 bytes at offset 729600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733696 ++wrote 4096/4096 bytes at offset 733696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737792 ++wrote 4096/4096 bytes at offset 737792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741888 ++wrote 4096/4096 bytes at offset 741888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745984 ++wrote 4096/4096 bytes at offset 745984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 750080 ++wrote 4096/4096 bytes at offset 750080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 754176 ++wrote 4096/4096 bytes at offset 754176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 758272 ++wrote 4096/4096 bytes at offset 758272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 762368 ++wrote 4096/4096 bytes at offset 762368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 766464 ++wrote 4096/4096 bytes at offset 766464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770560 ++wrote 4096/4096 bytes at offset 770560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774656 ++wrote 4096/4096 bytes at offset 774656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778752 ++wrote 4096/4096 bytes at offset 778752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782848 ++wrote 4096/4096 bytes at offset 782848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786944 ++wrote 4096/4096 bytes at offset 786944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 791040 ++wrote 4096/4096 bytes at offset 791040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 795136 ++wrote 4096/4096 bytes at offset 795136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 799232 ++wrote 4096/4096 bytes at offset 799232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 803328 ++wrote 4096/4096 bytes at offset 803328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 807424 ++wrote 4096/4096 bytes at offset 807424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811520 ++wrote 4096/4096 bytes at offset 811520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815616 ++wrote 4096/4096 bytes at offset 815616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819712 ++wrote 4096/4096 bytes at offset 819712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823808 ++wrote 4096/4096 bytes at offset 823808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827904 ++wrote 4096/4096 bytes at offset 827904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 832000 ++wrote 4096/4096 bytes at offset 832000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 836096 ++wrote 4096/4096 bytes at offset 836096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 840192 ++wrote 4096/4096 bytes at offset 840192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 844288 ++wrote 4096/4096 bytes at offset 844288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 848384 ++wrote 4096/4096 bytes at offset 848384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 852480 ++wrote 4096/4096 bytes at offset 852480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856576 ++wrote 4096/4096 bytes at offset 856576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860672 ++wrote 4096/4096 bytes at offset 860672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864768 ++wrote 4096/4096 bytes at offset 864768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868864 ++wrote 4096/4096 bytes at offset 868864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872960 ++wrote 4096/4096 bytes at offset 872960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 877056 ++wrote 4096/4096 bytes at offset 877056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 881152 ++wrote 4096/4096 bytes at offset 881152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 885248 ++wrote 4096/4096 bytes at offset 885248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 889344 ++wrote 4096/4096 bytes at offset 889344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 893440 ++wrote 4096/4096 bytes at offset 893440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897536 ++wrote 4096/4096 bytes at offset 897536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901632 ++wrote 4096/4096 bytes at offset 901632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905728 ++wrote 4096/4096 bytes at offset 905728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909824 ++wrote 4096/4096 bytes at offset 909824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913920 ++wrote 4096/4096 bytes at offset 913920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 918016 ++wrote 4096/4096 bytes at offset 918016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 922112 ++wrote 4096/4096 bytes at offset 922112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 926208 ++wrote 4096/4096 bytes at offset 926208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 930304 ++wrote 4096/4096 bytes at offset 930304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 934400 ++wrote 4096/4096 bytes at offset 934400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 938496 ++wrote 4096/4096 bytes at offset 938496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942592 ++wrote 4096/4096 bytes at offset 942592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946688 ++wrote 4096/4096 bytes at offset 946688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950784 ++wrote 4096/4096 bytes at offset 950784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954880 ++wrote 4096/4096 bytes at offset 954880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958976 ++wrote 4096/4096 bytes at offset 958976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 963072 ++wrote 4096/4096 bytes at offset 963072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 967168 ++wrote 4096/4096 bytes at offset 967168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 971264 ++wrote 4096/4096 bytes at offset 971264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 975360 ++wrote 4096/4096 bytes at offset 975360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 979456 ++wrote 4096/4096 bytes at offset 979456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983552 ++wrote 4096/4096 bytes at offset 983552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987648 ++wrote 4096/4096 bytes at offset 987648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991744 ++wrote 4096/4096 bytes at offset 991744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995840 ++wrote 4096/4096 bytes at offset 995840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999936 ++wrote 4096/4096 bytes at offset 999936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1004032 ++wrote 4096/4096 bytes at offset 1004032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1008128 ++wrote 4096/4096 bytes at offset 1008128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1012224 ++wrote 4096/4096 bytes at offset 1012224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1016320 ++wrote 4096/4096 bytes at offset 1016320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1020416 ++wrote 4096/4096 bytes at offset 1020416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024512 ++wrote 4096/4096 bytes at offset 1024512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028608 ++wrote 4096/4096 bytes at offset 1028608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032704 ++wrote 4096/4096 bytes at offset 1032704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036800 ++wrote 4096/4096 bytes at offset 1036800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040896 ++wrote 4096/4096 bytes at offset 1040896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044992 ++wrote 4096/4096 bytes at offset 1044992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 2048/2048 bytes at offset 1051136 ++=== IO: pattern 5 ++wrote 2048/2048 bytes at offset 1051136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1055232 ++wrote 2048/2048 bytes at offset 1055232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1059328 ++wrote 2048/2048 bytes at offset 1059328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1063424 ++wrote 2048/2048 bytes at offset 1063424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067520 ++wrote 2048/2048 bytes at offset 1067520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071616 ++wrote 2048/2048 bytes at offset 1071616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075712 ++wrote 2048/2048 bytes at offset 1075712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079808 ++wrote 2048/2048 bytes at offset 1079808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083904 ++wrote 2048/2048 bytes at offset 1083904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1088000 ++wrote 2048/2048 bytes at offset 1088000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1092096 ++wrote 2048/2048 bytes at offset 1092096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1096192 ++wrote 2048/2048 bytes at offset 1096192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1100288 ++wrote 2048/2048 bytes at offset 1100288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1104384 ++wrote 2048/2048 bytes at offset 1104384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1108480 ++wrote 2048/2048 bytes at offset 1108480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112576 ++wrote 2048/2048 bytes at offset 1112576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116672 ++wrote 2048/2048 bytes at offset 1116672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120768 ++wrote 2048/2048 bytes at offset 1120768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124864 ++wrote 2048/2048 bytes at offset 1124864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128960 ++wrote 2048/2048 bytes at offset 1128960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1133056 ++wrote 2048/2048 bytes at offset 1133056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1137152 ++wrote 2048/2048 bytes at offset 1137152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1141248 ++wrote 2048/2048 bytes at offset 1141248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1145344 ++wrote 2048/2048 bytes at offset 1145344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1149440 ++wrote 2048/2048 bytes at offset 1149440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153536 ++wrote 2048/2048 bytes at offset 1153536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157632 ++wrote 2048/2048 bytes at offset 1157632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161728 ++wrote 2048/2048 bytes at offset 1161728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165824 ++wrote 2048/2048 bytes at offset 1165824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169920 ++wrote 2048/2048 bytes at offset 1169920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1174016 ++wrote 2048/2048 bytes at offset 1174016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1178112 ++wrote 2048/2048 bytes at offset 1178112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1182208 ++wrote 2048/2048 bytes at offset 1182208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1186304 ++wrote 2048/2048 bytes at offset 1186304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1190400 ++wrote 2048/2048 bytes at offset 1190400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1194496 ++wrote 2048/2048 bytes at offset 1194496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198592 ++wrote 2048/2048 bytes at offset 1198592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202688 ++wrote 2048/2048 bytes at offset 1202688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206784 ++wrote 2048/2048 bytes at offset 1206784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210880 ++wrote 2048/2048 bytes at offset 1210880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214976 ++wrote 2048/2048 bytes at offset 1214976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1219072 ++wrote 2048/2048 bytes at offset 1219072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1223168 ++wrote 2048/2048 bytes at offset 1223168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1227264 ++wrote 2048/2048 bytes at offset 1227264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1231360 ++wrote 2048/2048 bytes at offset 1231360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1235456 ++wrote 2048/2048 bytes at offset 1235456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239552 ++wrote 2048/2048 bytes at offset 1239552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243648 ++wrote 2048/2048 bytes at offset 1243648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247744 ++wrote 2048/2048 bytes at offset 1247744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251840 ++wrote 2048/2048 bytes at offset 1251840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255936 ++wrote 2048/2048 bytes at offset 1255936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1260032 ++wrote 2048/2048 bytes at offset 1260032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1264128 ++wrote 2048/2048 bytes at offset 1264128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1268224 ++wrote 2048/2048 bytes at offset 1268224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1272320 ++wrote 2048/2048 bytes at offset 1272320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1276416 ++wrote 2048/2048 bytes at offset 1276416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280512 ++wrote 2048/2048 bytes at offset 1280512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284608 ++wrote 2048/2048 bytes at offset 1284608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288704 ++wrote 2048/2048 bytes at offset 1288704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292800 ++wrote 2048/2048 bytes at offset 1292800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296896 ++wrote 2048/2048 bytes at offset 1296896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300992 ++wrote 2048/2048 bytes at offset 1300992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1305088 ++wrote 2048/2048 bytes at offset 1305088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1309184 ++wrote 2048/2048 bytes at offset 1309184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1313280 ++wrote 2048/2048 bytes at offset 1313280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1317376 ++wrote 2048/2048 bytes at offset 1317376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1321472 ++wrote 2048/2048 bytes at offset 1321472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325568 ++wrote 2048/2048 bytes at offset 1325568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329664 ++wrote 2048/2048 bytes at offset 1329664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333760 ++wrote 2048/2048 bytes at offset 1333760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337856 ++wrote 2048/2048 bytes at offset 1337856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341952 ++wrote 2048/2048 bytes at offset 1341952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1346048 ++wrote 2048/2048 bytes at offset 1346048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1350144 ++wrote 2048/2048 bytes at offset 1350144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1354240 ++wrote 2048/2048 bytes at offset 1354240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1358336 ++wrote 2048/2048 bytes at offset 1358336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1362432 ++wrote 2048/2048 bytes at offset 1362432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366528 ++wrote 2048/2048 bytes at offset 1366528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370624 ++wrote 2048/2048 bytes at offset 1370624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374720 ++wrote 2048/2048 bytes at offset 1374720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378816 ++wrote 2048/2048 bytes at offset 1378816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382912 ++wrote 2048/2048 bytes at offset 1382912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1387008 ++wrote 2048/2048 bytes at offset 1387008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1391104 ++wrote 2048/2048 bytes at offset 1391104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1395200 ++wrote 2048/2048 bytes at offset 1395200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1399296 ++wrote 2048/2048 bytes at offset 1399296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1403392 ++wrote 2048/2048 bytes at offset 1403392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1407488 ++wrote 2048/2048 bytes at offset 1407488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411584 ++wrote 2048/2048 bytes at offset 1411584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415680 ++wrote 2048/2048 bytes at offset 1415680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419776 ++wrote 2048/2048 bytes at offset 1419776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423872 ++wrote 2048/2048 bytes at offset 1423872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427968 ++wrote 2048/2048 bytes at offset 1427968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1432064 ++wrote 2048/2048 bytes at offset 1432064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1436160 ++wrote 2048/2048 bytes at offset 1436160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1440256 ++wrote 2048/2048 bytes at offset 1440256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1444352 ++wrote 2048/2048 bytes at offset 1444352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1448448 ++wrote 2048/2048 bytes at offset 1448448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452544 ++wrote 2048/2048 bytes at offset 1452544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456640 ++wrote 2048/2048 bytes at offset 1456640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460736 ++wrote 2048/2048 bytes at offset 1460736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464832 ++wrote 2048/2048 bytes at offset 1464832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468928 ++wrote 2048/2048 bytes at offset 1468928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1473024 ++wrote 2048/2048 bytes at offset 1473024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1477120 ++wrote 2048/2048 bytes at offset 1477120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1481216 ++wrote 2048/2048 bytes at offset 1481216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1485312 ++wrote 2048/2048 bytes at offset 1485312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1489408 ++wrote 2048/2048 bytes at offset 1489408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1493504 ++wrote 2048/2048 bytes at offset 1493504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497600 ++wrote 2048/2048 bytes at offset 1497600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501696 ++wrote 2048/2048 bytes at offset 1501696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505792 ++wrote 2048/2048 bytes at offset 1505792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509888 ++wrote 2048/2048 bytes at offset 1509888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513984 ++wrote 2048/2048 bytes at offset 1513984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1518080 ++wrote 2048/2048 bytes at offset 1518080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1522176 ++wrote 2048/2048 bytes at offset 1522176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1526272 ++wrote 2048/2048 bytes at offset 1526272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1530368 ++wrote 2048/2048 bytes at offset 1530368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1534464 ++wrote 2048/2048 bytes at offset 1534464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538560 ++wrote 2048/2048 bytes at offset 1538560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542656 ++wrote 2048/2048 bytes at offset 1542656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546752 ++wrote 2048/2048 bytes at offset 1546752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550848 ++wrote 2048/2048 bytes at offset 1550848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554944 ++wrote 2048/2048 bytes at offset 1554944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1559040 ++wrote 2048/2048 bytes at offset 1559040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1563136 ++wrote 2048/2048 bytes at offset 1563136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1567232 ++wrote 2048/2048 bytes at offset 1567232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1571328 ++wrote 2048/2048 bytes at offset 1571328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1575424 ++wrote 2048/2048 bytes at offset 1575424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579520 ++wrote 2048/2048 bytes at offset 1579520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583616 ++wrote 2048/2048 bytes at offset 1583616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587712 ++wrote 2048/2048 bytes at offset 1587712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591808 ++wrote 2048/2048 bytes at offset 1591808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595904 ++wrote 2048/2048 bytes at offset 1595904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1600000 ++wrote 2048/2048 bytes at offset 1600000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1604096 ++wrote 2048/2048 bytes at offset 1604096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1608192 ++wrote 2048/2048 bytes at offset 1608192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1612288 ++wrote 2048/2048 bytes at offset 1612288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1616384 ++wrote 2048/2048 bytes at offset 1616384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1620480 ++wrote 2048/2048 bytes at offset 1620480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624576 ++wrote 2048/2048 bytes at offset 1624576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628672 ++wrote 2048/2048 bytes at offset 1628672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632768 ++wrote 2048/2048 bytes at offset 1632768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636864 ++wrote 2048/2048 bytes at offset 1636864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640960 ++wrote 2048/2048 bytes at offset 1640960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1645056 ++wrote 2048/2048 bytes at offset 1645056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1649152 ++wrote 2048/2048 bytes at offset 1649152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1653248 ++wrote 2048/2048 bytes at offset 1653248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1657344 ++wrote 2048/2048 bytes at offset 1657344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1661440 ++wrote 2048/2048 bytes at offset 1661440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665536 ++wrote 2048/2048 bytes at offset 1665536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669632 ++wrote 2048/2048 bytes at offset 1669632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673728 ++wrote 2048/2048 bytes at offset 1673728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677824 ++wrote 2048/2048 bytes at offset 1677824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681920 ++wrote 2048/2048 bytes at offset 1681920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1686016 ++wrote 2048/2048 bytes at offset 1686016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1690112 ++wrote 2048/2048 bytes at offset 1690112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1694208 ++wrote 2048/2048 bytes at offset 1694208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1698304 ++wrote 2048/2048 bytes at offset 1698304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1702400 ++wrote 2048/2048 bytes at offset 1702400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1706496 ++wrote 2048/2048 bytes at offset 1706496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710592 ++wrote 2048/2048 bytes at offset 1710592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714688 ++wrote 2048/2048 bytes at offset 1714688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718784 ++wrote 2048/2048 bytes at offset 1718784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722880 ++wrote 2048/2048 bytes at offset 1722880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726976 ++wrote 2048/2048 bytes at offset 1726976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1731072 ++wrote 2048/2048 bytes at offset 1731072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1735168 ++wrote 2048/2048 bytes at offset 1735168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1739264 ++wrote 2048/2048 bytes at offset 1739264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1743360 ++wrote 2048/2048 bytes at offset 1743360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1747456 ++wrote 2048/2048 bytes at offset 1747456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751552 ++wrote 2048/2048 bytes at offset 1751552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755648 ++wrote 2048/2048 bytes at offset 1755648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759744 ++wrote 2048/2048 bytes at offset 1759744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763840 ++wrote 2048/2048 bytes at offset 1763840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767936 ++wrote 2048/2048 bytes at offset 1767936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1772032 ++wrote 2048/2048 bytes at offset 1772032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1776128 ++wrote 2048/2048 bytes at offset 1776128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1780224 ++wrote 2048/2048 bytes at offset 1780224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1784320 ++wrote 2048/2048 bytes at offset 1784320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1788416 ++wrote 2048/2048 bytes at offset 1788416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792512 ++wrote 2048/2048 bytes at offset 1792512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796608 ++wrote 2048/2048 bytes at offset 1796608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800704 ++wrote 2048/2048 bytes at offset 1800704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804800 ++wrote 2048/2048 bytes at offset 1804800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808896 ++wrote 2048/2048 bytes at offset 1808896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812992 ++wrote 2048/2048 bytes at offset 1812992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1817088 ++wrote 2048/2048 bytes at offset 1817088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1821184 ++wrote 2048/2048 bytes at offset 1821184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1825280 ++wrote 2048/2048 bytes at offset 1825280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1829376 ++wrote 2048/2048 bytes at offset 1829376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1833472 ++wrote 2048/2048 bytes at offset 1833472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837568 ++wrote 2048/2048 bytes at offset 1837568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841664 ++wrote 2048/2048 bytes at offset 1841664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845760 ++wrote 2048/2048 bytes at offset 1845760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849856 ++wrote 2048/2048 bytes at offset 1849856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853952 ++wrote 2048/2048 bytes at offset 1853952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1858048 ++wrote 2048/2048 bytes at offset 1858048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1862144 ++wrote 2048/2048 bytes at offset 1862144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1866240 ++wrote 2048/2048 bytes at offset 1866240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1870336 ++wrote 2048/2048 bytes at offset 1870336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1874432 ++wrote 2048/2048 bytes at offset 1874432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878528 ++wrote 2048/2048 bytes at offset 1878528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882624 ++wrote 2048/2048 bytes at offset 1882624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886720 ++wrote 2048/2048 bytes at offset 1886720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890816 ++wrote 2048/2048 bytes at offset 1890816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894912 ++wrote 2048/2048 bytes at offset 1894912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1899008 ++wrote 2048/2048 bytes at offset 1899008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1903104 ++wrote 2048/2048 bytes at offset 1903104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1907200 ++wrote 2048/2048 bytes at offset 1907200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1911296 ++wrote 2048/2048 bytes at offset 1911296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1915392 ++wrote 2048/2048 bytes at offset 1915392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1919488 ++wrote 2048/2048 bytes at offset 1919488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923584 ++wrote 2048/2048 bytes at offset 1923584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927680 ++wrote 2048/2048 bytes at offset 1927680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931776 ++wrote 2048/2048 bytes at offset 1931776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935872 ++wrote 2048/2048 bytes at offset 1935872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939968 ++wrote 2048/2048 bytes at offset 1939968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1944064 ++wrote 2048/2048 bytes at offset 1944064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1948160 ++wrote 2048/2048 bytes at offset 1948160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1952256 ++wrote 2048/2048 bytes at offset 1952256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1956352 ++wrote 2048/2048 bytes at offset 1956352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1960448 ++wrote 2048/2048 bytes at offset 1960448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964544 ++wrote 2048/2048 bytes at offset 1964544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968640 ++wrote 2048/2048 bytes at offset 1968640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972736 ++wrote 2048/2048 bytes at offset 1972736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976832 ++wrote 2048/2048 bytes at offset 1976832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980928 ++wrote 2048/2048 bytes at offset 1980928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1985024 ++wrote 2048/2048 bytes at offset 1985024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1989120 ++wrote 2048/2048 bytes at offset 1989120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1993216 ++wrote 2048/2048 bytes at offset 1993216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1997312 ++wrote 2048/2048 bytes at offset 1997312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2001408 ++wrote 2048/2048 bytes at offset 2001408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2005504 ++wrote 2048/2048 bytes at offset 2005504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009600 ++wrote 2048/2048 bytes at offset 2009600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013696 ++wrote 2048/2048 bytes at offset 2013696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017792 ++wrote 2048/2048 bytes at offset 2017792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021888 ++wrote 2048/2048 bytes at offset 2021888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025984 ++wrote 2048/2048 bytes at offset 2025984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2030080 ++wrote 2048/2048 bytes at offset 2030080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2034176 ++wrote 2048/2048 bytes at offset 2034176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2038272 ++wrote 2048/2048 bytes at offset 2038272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2042368 ++wrote 2048/2048 bytes at offset 2042368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2046464 ++wrote 2048/2048 bytes at offset 2046464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050560 ++wrote 2048/2048 bytes at offset 2050560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054656 ++wrote 2048/2048 bytes at offset 2054656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058752 ++wrote 2048/2048 bytes at offset 2058752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062848 ++wrote 2048/2048 bytes at offset 2062848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066944 ++wrote 2048/2048 bytes at offset 2066944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2071040 ++wrote 2048/2048 bytes at offset 2071040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2075136 ++wrote 2048/2048 bytes at offset 2075136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2079232 ++wrote 2048/2048 bytes at offset 2079232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2083328 ++wrote 2048/2048 bytes at offset 2083328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2087424 ++wrote 2048/2048 bytes at offset 2087424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091520 ++wrote 2048/2048 bytes at offset 2091520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095616 ++wrote 2048/2048 bytes at offset 2095616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 2048/2048 bytes at offset 2097664 ++=== IO: pattern 1 ++wrote 2048/2048 bytes at offset 2097664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101760 ++wrote 2048/2048 bytes at offset 2101760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105856 ++wrote 2048/2048 bytes at offset 2105856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109952 ++wrote 2048/2048 bytes at offset 2109952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2114048 ++wrote 2048/2048 bytes at offset 2114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2118144 ++wrote 2048/2048 bytes at offset 2118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2122240 ++wrote 2048/2048 bytes at offset 2122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2126336 ++wrote 2048/2048 bytes at offset 2126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2130432 ++wrote 2048/2048 bytes at offset 2130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134528 ++wrote 2048/2048 bytes at offset 2134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138624 ++wrote 2048/2048 bytes at offset 2138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142720 ++wrote 2048/2048 bytes at offset 2142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146816 ++wrote 2048/2048 bytes at offset 2146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150912 ++wrote 2048/2048 bytes at offset 2150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2155008 ++wrote 2048/2048 bytes at offset 2155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2159104 ++wrote 2048/2048 bytes at offset 2159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2163200 ++wrote 2048/2048 bytes at offset 2163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2167296 ++wrote 2048/2048 bytes at offset 2167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2171392 ++wrote 2048/2048 bytes at offset 2171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2175488 ++wrote 2048/2048 bytes at offset 2175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179584 ++wrote 2048/2048 bytes at offset 2179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183680 ++wrote 2048/2048 bytes at offset 2183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187776 ++wrote 2048/2048 bytes at offset 2187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191872 ++wrote 2048/2048 bytes at offset 2191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195968 ++wrote 2048/2048 bytes at offset 2195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2200064 ++wrote 2048/2048 bytes at offset 2200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2204160 ++wrote 2048/2048 bytes at offset 2204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2208256 ++wrote 2048/2048 bytes at offset 2208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2212352 ++wrote 2048/2048 bytes at offset 2212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2216448 ++wrote 2048/2048 bytes at offset 2216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220544 ++wrote 2048/2048 bytes at offset 2220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224640 ++wrote 2048/2048 bytes at offset 2224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228736 ++wrote 2048/2048 bytes at offset 2228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232832 ++wrote 2048/2048 bytes at offset 2232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236928 ++wrote 2048/2048 bytes at offset 2236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2241024 ++wrote 2048/2048 bytes at offset 2241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2245120 ++wrote 2048/2048 bytes at offset 2245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2249216 ++wrote 2048/2048 bytes at offset 2249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2253312 ++wrote 2048/2048 bytes at offset 2253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2257408 ++wrote 2048/2048 bytes at offset 2257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2261504 ++wrote 2048/2048 bytes at offset 2261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265600 ++wrote 2048/2048 bytes at offset 2265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269696 ++wrote 2048/2048 bytes at offset 2269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273792 ++wrote 2048/2048 bytes at offset 2273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277888 ++wrote 2048/2048 bytes at offset 2277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281984 ++wrote 2048/2048 bytes at offset 2281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2286080 ++wrote 2048/2048 bytes at offset 2286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2290176 ++wrote 2048/2048 bytes at offset 2290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2294272 ++wrote 2048/2048 bytes at offset 2294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2298368 ++wrote 2048/2048 bytes at offset 2298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2302464 ++wrote 2048/2048 bytes at offset 2302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306560 ++wrote 2048/2048 bytes at offset 2306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310656 ++wrote 2048/2048 bytes at offset 2310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314752 ++wrote 2048/2048 bytes at offset 2314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318848 ++wrote 2048/2048 bytes at offset 2318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322944 ++wrote 2048/2048 bytes at offset 2322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2327040 ++wrote 2048/2048 bytes at offset 2327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2331136 ++wrote 2048/2048 bytes at offset 2331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2335232 ++wrote 2048/2048 bytes at offset 2335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2339328 ++wrote 2048/2048 bytes at offset 2339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2343424 ++wrote 2048/2048 bytes at offset 2343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347520 ++wrote 2048/2048 bytes at offset 2347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351616 ++wrote 2048/2048 bytes at offset 2351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355712 ++wrote 2048/2048 bytes at offset 2355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359808 ++wrote 2048/2048 bytes at offset 2359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363904 ++wrote 2048/2048 bytes at offset 2363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2368000 ++wrote 2048/2048 bytes at offset 2368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2372096 ++wrote 2048/2048 bytes at offset 2372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2376192 ++wrote 2048/2048 bytes at offset 2376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2380288 ++wrote 2048/2048 bytes at offset 2380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2384384 ++wrote 2048/2048 bytes at offset 2384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2388480 ++wrote 2048/2048 bytes at offset 2388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392576 ++wrote 2048/2048 bytes at offset 2392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396672 ++wrote 2048/2048 bytes at offset 2396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400768 ++wrote 2048/2048 bytes at offset 2400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404864 ++wrote 2048/2048 bytes at offset 2404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408960 ++wrote 2048/2048 bytes at offset 2408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2413056 ++wrote 2048/2048 bytes at offset 2413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2417152 ++wrote 2048/2048 bytes at offset 2417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2421248 ++wrote 2048/2048 bytes at offset 2421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2425344 ++wrote 2048/2048 bytes at offset 2425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2429440 ++wrote 2048/2048 bytes at offset 2429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433536 ++wrote 2048/2048 bytes at offset 2433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437632 ++wrote 2048/2048 bytes at offset 2437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441728 ++wrote 2048/2048 bytes at offset 2441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445824 ++wrote 2048/2048 bytes at offset 2445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449920 ++wrote 2048/2048 bytes at offset 2449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2454016 ++wrote 2048/2048 bytes at offset 2454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2458112 ++wrote 2048/2048 bytes at offset 2458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2462208 ++wrote 2048/2048 bytes at offset 2462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2466304 ++wrote 2048/2048 bytes at offset 2466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2470400 ++wrote 2048/2048 bytes at offset 2470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2474496 ++wrote 2048/2048 bytes at offset 2474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478592 ++wrote 2048/2048 bytes at offset 2478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482688 ++wrote 2048/2048 bytes at offset 2482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486784 ++wrote 2048/2048 bytes at offset 2486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490880 ++wrote 2048/2048 bytes at offset 2490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494976 ++wrote 2048/2048 bytes at offset 2494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2499072 ++wrote 2048/2048 bytes at offset 2499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2503168 ++wrote 2048/2048 bytes at offset 2503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2507264 ++wrote 2048/2048 bytes at offset 2507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2511360 ++wrote 2048/2048 bytes at offset 2511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2515456 ++wrote 2048/2048 bytes at offset 2515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519552 ++wrote 2048/2048 bytes at offset 2519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523648 ++wrote 2048/2048 bytes at offset 2523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527744 ++wrote 2048/2048 bytes at offset 2527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531840 ++wrote 2048/2048 bytes at offset 2531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535936 ++wrote 2048/2048 bytes at offset 2535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2540032 ++wrote 2048/2048 bytes at offset 2540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2544128 ++wrote 2048/2048 bytes at offset 2544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2548224 ++wrote 2048/2048 bytes at offset 2548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2552320 ++wrote 2048/2048 bytes at offset 2552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2556416 ++wrote 2048/2048 bytes at offset 2556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560512 ++wrote 2048/2048 bytes at offset 2560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564608 ++wrote 2048/2048 bytes at offset 2564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568704 ++wrote 2048/2048 bytes at offset 2568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572800 ++wrote 2048/2048 bytes at offset 2572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576896 ++wrote 2048/2048 bytes at offset 2576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580992 ++wrote 2048/2048 bytes at offset 2580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2585088 ++wrote 2048/2048 bytes at offset 2585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2589184 ++wrote 2048/2048 bytes at offset 2589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2593280 ++wrote 2048/2048 bytes at offset 2593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2597376 ++wrote 2048/2048 bytes at offset 2597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2601472 ++wrote 2048/2048 bytes at offset 2601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605568 ++wrote 2048/2048 bytes at offset 2605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609664 ++wrote 2048/2048 bytes at offset 2609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613760 ++wrote 2048/2048 bytes at offset 2613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617856 ++wrote 2048/2048 bytes at offset 2617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621952 ++wrote 2048/2048 bytes at offset 2621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2626048 ++wrote 2048/2048 bytes at offset 2626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2630144 ++wrote 2048/2048 bytes at offset 2630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2634240 ++wrote 2048/2048 bytes at offset 2634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2638336 ++wrote 2048/2048 bytes at offset 2638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2642432 ++wrote 2048/2048 bytes at offset 2642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646528 ++wrote 2048/2048 bytes at offset 2646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650624 ++wrote 2048/2048 bytes at offset 2650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654720 ++wrote 2048/2048 bytes at offset 2654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658816 ++wrote 2048/2048 bytes at offset 2658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662912 ++wrote 2048/2048 bytes at offset 2662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2667008 ++wrote 2048/2048 bytes at offset 2667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2671104 ++wrote 2048/2048 bytes at offset 2671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2675200 ++wrote 2048/2048 bytes at offset 2675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2679296 ++wrote 2048/2048 bytes at offset 2679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2683392 ++wrote 2048/2048 bytes at offset 2683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2687488 ++wrote 2048/2048 bytes at offset 2687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691584 ++wrote 2048/2048 bytes at offset 2691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695680 ++wrote 2048/2048 bytes at offset 2695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699776 ++wrote 2048/2048 bytes at offset 2699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703872 ++wrote 2048/2048 bytes at offset 2703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707968 ++wrote 2048/2048 bytes at offset 2707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2712064 ++wrote 2048/2048 bytes at offset 2712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2716160 ++wrote 2048/2048 bytes at offset 2716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2720256 ++wrote 2048/2048 bytes at offset 2720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2724352 ++wrote 2048/2048 bytes at offset 2724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2728448 ++wrote 2048/2048 bytes at offset 2728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732544 ++wrote 2048/2048 bytes at offset 2732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736640 ++wrote 2048/2048 bytes at offset 2736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740736 ++wrote 2048/2048 bytes at offset 2740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744832 ++wrote 2048/2048 bytes at offset 2744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748928 ++wrote 2048/2048 bytes at offset 2748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2753024 ++wrote 2048/2048 bytes at offset 2753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2757120 ++wrote 2048/2048 bytes at offset 2757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2761216 ++wrote 2048/2048 bytes at offset 2761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2765312 ++wrote 2048/2048 bytes at offset 2765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2769408 ++wrote 2048/2048 bytes at offset 2769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2773504 ++wrote 2048/2048 bytes at offset 2773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777600 ++wrote 2048/2048 bytes at offset 2777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781696 ++wrote 2048/2048 bytes at offset 2781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785792 ++wrote 2048/2048 bytes at offset 2785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789888 ++wrote 2048/2048 bytes at offset 2789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793984 ++wrote 2048/2048 bytes at offset 2793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2798080 ++wrote 2048/2048 bytes at offset 2798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2802176 ++wrote 2048/2048 bytes at offset 2802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2806272 ++wrote 2048/2048 bytes at offset 2806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2810368 ++wrote 2048/2048 bytes at offset 2810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2814464 ++wrote 2048/2048 bytes at offset 2814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818560 ++wrote 2048/2048 bytes at offset 2818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822656 ++wrote 2048/2048 bytes at offset 2822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826752 ++wrote 2048/2048 bytes at offset 2826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830848 ++wrote 2048/2048 bytes at offset 2830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834944 ++wrote 2048/2048 bytes at offset 2834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2839040 ++wrote 2048/2048 bytes at offset 2839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2843136 ++wrote 2048/2048 bytes at offset 2843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2847232 ++wrote 2048/2048 bytes at offset 2847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2851328 ++wrote 2048/2048 bytes at offset 2851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2855424 ++wrote 2048/2048 bytes at offset 2855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859520 ++wrote 2048/2048 bytes at offset 2859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863616 ++wrote 2048/2048 bytes at offset 2863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867712 ++wrote 2048/2048 bytes at offset 2867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871808 ++wrote 2048/2048 bytes at offset 2871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875904 ++wrote 2048/2048 bytes at offset 2875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2880000 ++wrote 2048/2048 bytes at offset 2880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2884096 ++wrote 2048/2048 bytes at offset 2884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2888192 ++wrote 2048/2048 bytes at offset 2888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2892288 ++wrote 2048/2048 bytes at offset 2892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2896384 ++wrote 2048/2048 bytes at offset 2896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2900480 ++wrote 2048/2048 bytes at offset 2900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904576 ++wrote 2048/2048 bytes at offset 2904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908672 ++wrote 2048/2048 bytes at offset 2908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912768 ++wrote 2048/2048 bytes at offset 2912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916864 ++wrote 2048/2048 bytes at offset 2916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920960 ++wrote 2048/2048 bytes at offset 2920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2925056 ++wrote 2048/2048 bytes at offset 2925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2929152 ++wrote 2048/2048 bytes at offset 2929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2933248 ++wrote 2048/2048 bytes at offset 2933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2937344 ++wrote 2048/2048 bytes at offset 2937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2941440 ++wrote 2048/2048 bytes at offset 2941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945536 ++wrote 2048/2048 bytes at offset 2945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949632 ++wrote 2048/2048 bytes at offset 2949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953728 ++wrote 2048/2048 bytes at offset 2953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957824 ++wrote 2048/2048 bytes at offset 2957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961920 ++wrote 2048/2048 bytes at offset 2961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2966016 ++wrote 2048/2048 bytes at offset 2966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2970112 ++wrote 2048/2048 bytes at offset 2970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2974208 ++wrote 2048/2048 bytes at offset 2974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2978304 ++wrote 2048/2048 bytes at offset 2978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2982400 ++wrote 2048/2048 bytes at offset 2982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2986496 ++wrote 2048/2048 bytes at offset 2986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990592 ++wrote 2048/2048 bytes at offset 2990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994688 ++wrote 2048/2048 bytes at offset 2994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998784 ++wrote 2048/2048 bytes at offset 2998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002880 ++wrote 2048/2048 bytes at offset 3002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006976 ++wrote 2048/2048 bytes at offset 3006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3011072 ++wrote 2048/2048 bytes at offset 3011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3015168 ++wrote 2048/2048 bytes at offset 3015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3019264 ++wrote 2048/2048 bytes at offset 3019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3023360 ++wrote 2048/2048 bytes at offset 3023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3027456 ++wrote 2048/2048 bytes at offset 3027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031552 ++wrote 2048/2048 bytes at offset 3031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035648 ++wrote 2048/2048 bytes at offset 3035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039744 ++wrote 2048/2048 bytes at offset 3039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043840 ++wrote 2048/2048 bytes at offset 3043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047936 ++wrote 2048/2048 bytes at offset 3047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3052032 ++wrote 2048/2048 bytes at offset 3052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3056128 ++wrote 2048/2048 bytes at offset 3056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3060224 ++wrote 2048/2048 bytes at offset 3060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3064320 ++wrote 2048/2048 bytes at offset 3064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3068416 ++wrote 2048/2048 bytes at offset 3068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072512 ++wrote 2048/2048 bytes at offset 3072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076608 ++wrote 2048/2048 bytes at offset 3076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080704 ++wrote 2048/2048 bytes at offset 3080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084800 ++wrote 2048/2048 bytes at offset 3084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088896 ++wrote 2048/2048 bytes at offset 3088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092992 ++wrote 2048/2048 bytes at offset 3092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3097088 ++wrote 2048/2048 bytes at offset 3097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3101184 ++wrote 2048/2048 bytes at offset 3101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3105280 ++wrote 2048/2048 bytes at offset 3105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3109376 ++wrote 2048/2048 bytes at offset 3109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3113472 ++wrote 2048/2048 bytes at offset 3113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117568 ++wrote 2048/2048 bytes at offset 3117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121664 ++wrote 2048/2048 bytes at offset 3121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125760 ++wrote 2048/2048 bytes at offset 3125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129856 ++wrote 2048/2048 bytes at offset 3129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133952 ++wrote 2048/2048 bytes at offset 3133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3138048 ++wrote 2048/2048 bytes at offset 3138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3142144 ++wrote 2048/2048 bytes at offset 3142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> wrote 2048/2048 bytes at offset 3147264 ++=== IO: pattern 3 ++wrote 2048/2048 bytes at offset 3147264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3151360 ++wrote 2048/2048 bytes at offset 3151360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3155456 ++wrote 2048/2048 bytes at offset 3155456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159552 ++wrote 2048/2048 bytes at offset 3159552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163648 ++wrote 2048/2048 bytes at offset 3163648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167744 ++wrote 2048/2048 bytes at offset 3167744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171840 ++wrote 2048/2048 bytes at offset 3171840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175936 ++wrote 2048/2048 bytes at offset 3175936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3180032 ++wrote 2048/2048 bytes at offset 3180032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3184128 ++wrote 2048/2048 bytes at offset 3184128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3188224 ++wrote 2048/2048 bytes at offset 3188224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3192320 ++wrote 2048/2048 bytes at offset 3192320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3196416 ++wrote 2048/2048 bytes at offset 3196416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200512 ++wrote 2048/2048 bytes at offset 3200512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204608 ++wrote 2048/2048 bytes at offset 3204608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208704 ++wrote 2048/2048 bytes at offset 3208704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212800 ++wrote 2048/2048 bytes at offset 3212800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216896 ++wrote 2048/2048 bytes at offset 3216896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220992 ++wrote 2048/2048 bytes at offset 3220992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3225088 ++wrote 2048/2048 bytes at offset 3225088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3229184 ++wrote 2048/2048 bytes at offset 3229184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3233280 ++wrote 2048/2048 bytes at offset 3233280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3237376 ++wrote 2048/2048 bytes at offset 3237376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3241472 ++wrote 2048/2048 bytes at offset 3241472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245568 ++wrote 2048/2048 bytes at offset 3245568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249664 ++wrote 2048/2048 bytes at offset 3249664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253760 ++wrote 2048/2048 bytes at offset 3253760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257856 ++wrote 2048/2048 bytes at offset 3257856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261952 ++wrote 2048/2048 bytes at offset 3261952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3266048 ++wrote 2048/2048 bytes at offset 3266048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3270144 ++wrote 2048/2048 bytes at offset 3270144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3274240 ++wrote 2048/2048 bytes at offset 3274240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3278336 ++wrote 2048/2048 bytes at offset 3278336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3282432 ++wrote 2048/2048 bytes at offset 3282432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286528 ++wrote 2048/2048 bytes at offset 3286528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290624 ++wrote 2048/2048 bytes at offset 3290624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294720 ++wrote 2048/2048 bytes at offset 3294720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298816 ++wrote 2048/2048 bytes at offset 3298816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302912 ++wrote 2048/2048 bytes at offset 3302912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3307008 ++wrote 2048/2048 bytes at offset 3307008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3311104 ++wrote 2048/2048 bytes at offset 3311104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3315200 ++wrote 2048/2048 bytes at offset 3315200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3319296 ++wrote 2048/2048 bytes at offset 3319296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3323392 ++wrote 2048/2048 bytes at offset 3323392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3327488 ++wrote 2048/2048 bytes at offset 3327488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331584 ++wrote 2048/2048 bytes at offset 3331584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335680 ++wrote 2048/2048 bytes at offset 3335680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339776 ++wrote 2048/2048 bytes at offset 3339776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343872 ++wrote 2048/2048 bytes at offset 3343872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347968 ++wrote 2048/2048 bytes at offset 3347968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3352064 ++wrote 2048/2048 bytes at offset 3352064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3356160 ++wrote 2048/2048 bytes at offset 3356160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3360256 ++wrote 2048/2048 bytes at offset 3360256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3364352 ++wrote 2048/2048 bytes at offset 3364352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3368448 ++wrote 2048/2048 bytes at offset 3368448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372544 ++wrote 2048/2048 bytes at offset 3372544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376640 ++wrote 2048/2048 bytes at offset 3376640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380736 ++wrote 2048/2048 bytes at offset 3380736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384832 ++wrote 2048/2048 bytes at offset 3384832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388928 ++wrote 2048/2048 bytes at offset 3388928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3393024 ++wrote 2048/2048 bytes at offset 3393024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3397120 ++wrote 2048/2048 bytes at offset 3397120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3401216 ++wrote 2048/2048 bytes at offset 3401216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3405312 ++wrote 2048/2048 bytes at offset 3405312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3409408 ++wrote 2048/2048 bytes at offset 3409408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3413504 ++wrote 2048/2048 bytes at offset 3413504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417600 ++wrote 2048/2048 bytes at offset 3417600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421696 ++wrote 2048/2048 bytes at offset 3421696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425792 ++wrote 2048/2048 bytes at offset 3425792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429888 ++wrote 2048/2048 bytes at offset 3429888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433984 ++wrote 2048/2048 bytes at offset 3433984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3438080 ++wrote 2048/2048 bytes at offset 3438080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3442176 ++wrote 2048/2048 bytes at offset 3442176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3446272 ++wrote 2048/2048 bytes at offset 3446272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3450368 ++wrote 2048/2048 bytes at offset 3450368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3454464 ++wrote 2048/2048 bytes at offset 3454464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458560 ++wrote 2048/2048 bytes at offset 3458560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462656 ++wrote 2048/2048 bytes at offset 3462656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466752 ++wrote 2048/2048 bytes at offset 3466752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470848 ++wrote 2048/2048 bytes at offset 3470848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474944 ++wrote 2048/2048 bytes at offset 3474944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3479040 ++wrote 2048/2048 bytes at offset 3479040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3483136 ++wrote 2048/2048 bytes at offset 3483136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3487232 ++wrote 2048/2048 bytes at offset 3487232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3491328 ++wrote 2048/2048 bytes at offset 3491328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3495424 ++wrote 2048/2048 bytes at offset 3495424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499520 ++wrote 2048/2048 bytes at offset 3499520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503616 ++wrote 2048/2048 bytes at offset 3503616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507712 ++wrote 2048/2048 bytes at offset 3507712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511808 ++wrote 2048/2048 bytes at offset 3511808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515904 ++wrote 2048/2048 bytes at offset 3515904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3520000 ++wrote 2048/2048 bytes at offset 3520000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3524096 ++wrote 2048/2048 bytes at offset 3524096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3528192 ++wrote 2048/2048 bytes at offset 3528192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3532288 ++wrote 2048/2048 bytes at offset 3532288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3536384 ++wrote 2048/2048 bytes at offset 3536384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3540480 ++wrote 2048/2048 bytes at offset 3540480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544576 ++wrote 2048/2048 bytes at offset 3544576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548672 ++wrote 2048/2048 bytes at offset 3548672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552768 ++wrote 2048/2048 bytes at offset 3552768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556864 ++wrote 2048/2048 bytes at offset 3556864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560960 ++wrote 2048/2048 bytes at offset 3560960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3565056 ++wrote 2048/2048 bytes at offset 3565056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3569152 ++wrote 2048/2048 bytes at offset 3569152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3573248 ++wrote 2048/2048 bytes at offset 3573248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3577344 ++wrote 2048/2048 bytes at offset 3577344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3581440 ++wrote 2048/2048 bytes at offset 3581440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585536 ++wrote 2048/2048 bytes at offset 3585536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589632 ++wrote 2048/2048 bytes at offset 3589632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593728 ++wrote 2048/2048 bytes at offset 3593728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597824 ++wrote 2048/2048 bytes at offset 3597824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601920 ++wrote 2048/2048 bytes at offset 3601920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3606016 ++wrote 2048/2048 bytes at offset 3606016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3610112 ++wrote 2048/2048 bytes at offset 3610112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3614208 ++wrote 2048/2048 bytes at offset 3614208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3618304 ++wrote 2048/2048 bytes at offset 3618304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3622400 ++wrote 2048/2048 bytes at offset 3622400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3626496 ++wrote 2048/2048 bytes at offset 3626496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630592 ++wrote 2048/2048 bytes at offset 3630592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634688 ++wrote 2048/2048 bytes at offset 3634688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638784 ++wrote 2048/2048 bytes at offset 3638784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642880 ++wrote 2048/2048 bytes at offset 3642880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646976 ++wrote 2048/2048 bytes at offset 3646976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3651072 ++wrote 2048/2048 bytes at offset 3651072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3655168 ++wrote 2048/2048 bytes at offset 3655168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3659264 ++wrote 2048/2048 bytes at offset 3659264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3663360 ++wrote 2048/2048 bytes at offset 3663360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3667456 ++wrote 2048/2048 bytes at offset 3667456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671552 ++wrote 2048/2048 bytes at offset 3671552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675648 ++wrote 2048/2048 bytes at offset 3675648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679744 ++wrote 2048/2048 bytes at offset 3679744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683840 ++wrote 2048/2048 bytes at offset 3683840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687936 ++wrote 2048/2048 bytes at offset 3687936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3692032 ++wrote 2048/2048 bytes at offset 3692032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3696128 ++wrote 2048/2048 bytes at offset 3696128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3700224 ++wrote 2048/2048 bytes at offset 3700224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3704320 ++wrote 2048/2048 bytes at offset 3704320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3708416 ++wrote 2048/2048 bytes at offset 3708416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712512 ++wrote 2048/2048 bytes at offset 3712512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716608 ++wrote 2048/2048 bytes at offset 3716608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720704 ++wrote 2048/2048 bytes at offset 3720704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724800 ++wrote 2048/2048 bytes at offset 3724800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728896 ++wrote 2048/2048 bytes at offset 3728896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732992 ++wrote 2048/2048 bytes at offset 3732992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3737088 ++wrote 2048/2048 bytes at offset 3737088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3741184 ++wrote 2048/2048 bytes at offset 3741184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3745280 ++wrote 2048/2048 bytes at offset 3745280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3749376 ++wrote 2048/2048 bytes at offset 3749376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3753472 ++wrote 2048/2048 bytes at offset 3753472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757568 ++wrote 2048/2048 bytes at offset 3757568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761664 ++wrote 2048/2048 bytes at offset 3761664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765760 ++wrote 2048/2048 bytes at offset 3765760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769856 ++wrote 2048/2048 bytes at offset 3769856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773952 ++wrote 2048/2048 bytes at offset 3773952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3778048 ++wrote 2048/2048 bytes at offset 3778048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3782144 ++wrote 2048/2048 bytes at offset 3782144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3786240 ++wrote 2048/2048 bytes at offset 3786240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3790336 ++wrote 2048/2048 bytes at offset 3790336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3794432 ++wrote 2048/2048 bytes at offset 3794432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798528 ++wrote 2048/2048 bytes at offset 3798528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802624 ++wrote 2048/2048 bytes at offset 3802624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806720 ++wrote 2048/2048 bytes at offset 3806720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810816 ++wrote 2048/2048 bytes at offset 3810816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814912 ++wrote 2048/2048 bytes at offset 3814912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3819008 ++wrote 2048/2048 bytes at offset 3819008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3823104 ++wrote 2048/2048 bytes at offset 3823104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3827200 ++wrote 2048/2048 bytes at offset 3827200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3831296 ++wrote 2048/2048 bytes at offset 3831296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3835392 ++wrote 2048/2048 bytes at offset 3835392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3839488 ++wrote 2048/2048 bytes at offset 3839488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843584 ++wrote 2048/2048 bytes at offset 3843584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847680 ++wrote 2048/2048 bytes at offset 3847680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851776 ++wrote 2048/2048 bytes at offset 3851776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855872 ++wrote 2048/2048 bytes at offset 3855872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859968 ++wrote 2048/2048 bytes at offset 3859968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3864064 ++wrote 2048/2048 bytes at offset 3864064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3868160 ++wrote 2048/2048 bytes at offset 3868160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3872256 ++wrote 2048/2048 bytes at offset 3872256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3876352 ++wrote 2048/2048 bytes at offset 3876352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3880448 ++wrote 2048/2048 bytes at offset 3880448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884544 ++wrote 2048/2048 bytes at offset 3884544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888640 ++wrote 2048/2048 bytes at offset 3888640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892736 ++wrote 2048/2048 bytes at offset 3892736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896832 ++wrote 2048/2048 bytes at offset 3896832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900928 ++wrote 2048/2048 bytes at offset 3900928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3905024 ++wrote 2048/2048 bytes at offset 3905024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3909120 ++wrote 2048/2048 bytes at offset 3909120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3913216 ++wrote 2048/2048 bytes at offset 3913216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3917312 ++wrote 2048/2048 bytes at offset 3917312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3921408 ++wrote 2048/2048 bytes at offset 3921408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3925504 ++wrote 2048/2048 bytes at offset 3925504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929600 ++wrote 2048/2048 bytes at offset 3929600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933696 ++wrote 2048/2048 bytes at offset 3933696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937792 ++wrote 2048/2048 bytes at offset 3937792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941888 ++wrote 2048/2048 bytes at offset 3941888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945984 ++wrote 2048/2048 bytes at offset 3945984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3950080 ++wrote 2048/2048 bytes at offset 3950080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3954176 ++wrote 2048/2048 bytes at offset 3954176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3958272 ++wrote 2048/2048 bytes at offset 3958272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3962368 ++wrote 2048/2048 bytes at offset 3962368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3966464 ++wrote 2048/2048 bytes at offset 3966464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970560 ++wrote 2048/2048 bytes at offset 3970560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974656 ++wrote 2048/2048 bytes at offset 3974656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978752 ++wrote 2048/2048 bytes at offset 3978752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982848 ++wrote 2048/2048 bytes at offset 3982848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986944 ++wrote 2048/2048 bytes at offset 3986944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3991040 ++wrote 2048/2048 bytes at offset 3991040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3995136 ++wrote 2048/2048 bytes at offset 3995136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3999232 ++wrote 2048/2048 bytes at offset 3999232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4003328 ++wrote 2048/2048 bytes at offset 4003328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4007424 ++wrote 2048/2048 bytes at offset 4007424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011520 ++wrote 2048/2048 bytes at offset 4011520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015616 ++wrote 2048/2048 bytes at offset 4015616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019712 ++wrote 2048/2048 bytes at offset 4019712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023808 ++wrote 2048/2048 bytes at offset 4023808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027904 ++wrote 2048/2048 bytes at offset 4027904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4032000 ++wrote 2048/2048 bytes at offset 4032000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4036096 ++wrote 2048/2048 bytes at offset 4036096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4040192 ++wrote 2048/2048 bytes at offset 4040192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4044288 ++wrote 2048/2048 bytes at offset 4044288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4048384 ++wrote 2048/2048 bytes at offset 4048384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4052480 ++wrote 2048/2048 bytes at offset 4052480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056576 ++wrote 2048/2048 bytes at offset 4056576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060672 ++wrote 2048/2048 bytes at offset 4060672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064768 ++wrote 2048/2048 bytes at offset 4064768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068864 ++wrote 2048/2048 bytes at offset 4068864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072960 ++wrote 2048/2048 bytes at offset 4072960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4077056 ++wrote 2048/2048 bytes at offset 4077056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4081152 ++wrote 2048/2048 bytes at offset 4081152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4085248 ++wrote 2048/2048 bytes at offset 4085248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4089344 ++wrote 2048/2048 bytes at offset 4089344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4093440 ++wrote 2048/2048 bytes at offset 4093440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097536 ++wrote 2048/2048 bytes at offset 4097536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101632 ++wrote 2048/2048 bytes at offset 4101632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105728 ++wrote 2048/2048 bytes at offset 4105728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109824 ++wrote 2048/2048 bytes at offset 4109824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113920 ++wrote 2048/2048 bytes at offset 4113920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4118016 ++wrote 2048/2048 bytes at offset 4118016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4122112 ++wrote 2048/2048 bytes at offset 4122112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4126208 ++wrote 2048/2048 bytes at offset 4126208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4130304 ++wrote 2048/2048 bytes at offset 4130304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4134400 ++wrote 2048/2048 bytes at offset 4134400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4138496 ++wrote 2048/2048 bytes at offset 4138496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142592 ++wrote 2048/2048 bytes at offset 4142592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146688 ++wrote 2048/2048 bytes at offset 4146688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150784 ++wrote 2048/2048 bytes at offset 4150784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154880 ++wrote 2048/2048 bytes at offset 4154880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158976 ++wrote 2048/2048 bytes at offset 4158976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4163072 ++wrote 2048/2048 bytes at offset 4163072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4167168 ++wrote 2048/2048 bytes at offset 4167168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4171264 ++wrote 2048/2048 bytes at offset 4171264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4175360 ++wrote 2048/2048 bytes at offset 4175360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4179456 ++wrote 2048/2048 bytes at offset 4179456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183552 ++wrote 2048/2048 bytes at offset 4183552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187648 ++wrote 2048/2048 bytes at offset 4187648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191744 ++wrote 2048/2048 bytes at offset 4191744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 8192/8192 bytes at offset 4196864 ++=== IO: pattern 5 ++wrote 8192/8192 bytes at offset 4196864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4209152 ++wrote 8192/8192 bytes at offset 4209152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4221440 ++wrote 8192/8192 bytes at offset 4221440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233728 ++wrote 8192/8192 bytes at offset 4233728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4246016 ++wrote 8192/8192 bytes at offset 4246016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4258304 ++wrote 8192/8192 bytes at offset 4258304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270592 ++wrote 8192/8192 bytes at offset 4270592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282880 ++wrote 8192/8192 bytes at offset 4282880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295168 ++wrote 8192/8192 bytes at offset 4295168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4307456 ++wrote 8192/8192 bytes at offset 4307456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319744 ++wrote 8192/8192 bytes at offset 4319744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4332032 ++wrote 8192/8192 bytes at offset 4332032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4344320 ++wrote 8192/8192 bytes at offset 4344320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356608 ++wrote 8192/8192 bytes at offset 4356608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368896 ++wrote 8192/8192 bytes at offset 4368896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4381184 ++wrote 8192/8192 bytes at offset 4381184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4393472 ++wrote 8192/8192 bytes at offset 4393472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405760 ++wrote 8192/8192 bytes at offset 4405760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4418048 ++wrote 8192/8192 bytes at offset 4418048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4430336 ++wrote 8192/8192 bytes at offset 4430336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442624 ++wrote 8192/8192 bytes at offset 4442624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454912 ++wrote 8192/8192 bytes at offset 4454912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4467200 ++wrote 8192/8192 bytes at offset 4467200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4479488 ++wrote 8192/8192 bytes at offset 4479488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491776 ++wrote 8192/8192 bytes at offset 4491776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4504064 ++wrote 8192/8192 bytes at offset 4504064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4516352 ++wrote 8192/8192 bytes at offset 4516352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528640 ++wrote 8192/8192 bytes at offset 4528640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540928 ++wrote 8192/8192 bytes at offset 4540928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4553216 ++wrote 8192/8192 bytes at offset 4553216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4565504 ++wrote 8192/8192 bytes at offset 4565504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577792 ++wrote 8192/8192 bytes at offset 4577792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4590080 ++wrote 8192/8192 bytes at offset 4590080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4602368 ++wrote 8192/8192 bytes at offset 4602368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614656 ++wrote 8192/8192 bytes at offset 4614656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626944 ++wrote 8192/8192 bytes at offset 4626944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4639232 ++wrote 8192/8192 bytes at offset 4639232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651520 ++wrote 8192/8192 bytes at offset 4651520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663808 ++wrote 8192/8192 bytes at offset 4663808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4676096 ++wrote 8192/8192 bytes at offset 4676096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4688384 ++wrote 8192/8192 bytes at offset 4688384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700672 ++wrote 8192/8192 bytes at offset 4700672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712960 ++wrote 8192/8192 bytes at offset 4712960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4725248 ++wrote 8192/8192 bytes at offset 4725248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737536 ++wrote 8192/8192 bytes at offset 4737536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749824 ++wrote 8192/8192 bytes at offset 4749824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4762112 ++wrote 8192/8192 bytes at offset 4762112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4774400 ++wrote 8192/8192 bytes at offset 4774400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786688 ++wrote 8192/8192 bytes at offset 4786688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798976 ++wrote 8192/8192 bytes at offset 4798976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4811264 ++wrote 8192/8192 bytes at offset 4811264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823552 ++wrote 8192/8192 bytes at offset 4823552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835840 ++wrote 8192/8192 bytes at offset 4835840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4848128 ++wrote 8192/8192 bytes at offset 4848128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4860416 ++wrote 8192/8192 bytes at offset 4860416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872704 ++wrote 8192/8192 bytes at offset 4872704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884992 ++wrote 8192/8192 bytes at offset 4884992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4897280 ++wrote 8192/8192 bytes at offset 4897280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909568 ++wrote 8192/8192 bytes at offset 4909568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921856 ++wrote 8192/8192 bytes at offset 4921856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4934144 ++wrote 8192/8192 bytes at offset 4934144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4946432 ++wrote 8192/8192 bytes at offset 4946432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958720 ++wrote 8192/8192 bytes at offset 4958720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4971008 ++wrote 8192/8192 bytes at offset 4971008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 512 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4608 ++read 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8704 ++read 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12800 ++read 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16896 ++read 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20992 ++read 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 25088 ++read 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 29184 ++read 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 33280 ++read 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 37376 ++read 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 41472 ++read 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45568 ++read 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49664 ++read 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53760 ++read 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57856 ++read 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61952 ++read 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 66048 ++read 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 70144 ++read 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 74240 ++read 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 78336 ++read 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 82432 ++read 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86528 ++read 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90624 ++read 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94720 ++read 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98816 ++read 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102912 ++read 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 107008 ++read 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 111104 ++read 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 115200 ++read 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 119296 ++read 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 123392 ++read 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 127488 ++read 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131584 ++read 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135680 ++read 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139776 ++read 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143872 ++read 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147968 ++read 4096/4096 bytes at offset 147968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 152064 ++read 4096/4096 bytes at offset 152064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 156160 ++read 4096/4096 bytes at offset 156160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 160256 ++read 4096/4096 bytes at offset 160256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 164352 ++read 4096/4096 bytes at offset 164352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 168448 ++read 4096/4096 bytes at offset 168448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172544 ++read 4096/4096 bytes at offset 172544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176640 ++read 4096/4096 bytes at offset 176640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180736 ++read 4096/4096 bytes at offset 180736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184832 ++read 4096/4096 bytes at offset 184832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188928 ++read 4096/4096 bytes at offset 188928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 193024 ++read 4096/4096 bytes at offset 193024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 197120 ++read 4096/4096 bytes at offset 197120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 201216 ++read 4096/4096 bytes at offset 201216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 205312 ++read 4096/4096 bytes at offset 205312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 209408 ++read 4096/4096 bytes at offset 209408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 213504 ++read 4096/4096 bytes at offset 213504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217600 ++read 4096/4096 bytes at offset 217600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221696 ++read 4096/4096 bytes at offset 221696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225792 ++read 4096/4096 bytes at offset 225792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229888 ++read 4096/4096 bytes at offset 229888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233984 ++read 4096/4096 bytes at offset 233984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 238080 ++read 4096/4096 bytes at offset 238080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 242176 ++read 4096/4096 bytes at offset 242176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 246272 ++read 4096/4096 bytes at offset 246272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 250368 ++read 4096/4096 bytes at offset 250368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 254464 ++read 4096/4096 bytes at offset 254464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258560 ++read 4096/4096 bytes at offset 258560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262656 ++read 4096/4096 bytes at offset 262656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266752 ++read 4096/4096 bytes at offset 266752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270848 ++read 4096/4096 bytes at offset 270848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274944 ++read 4096/4096 bytes at offset 274944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 279040 ++read 4096/4096 bytes at offset 279040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 283136 ++read 4096/4096 bytes at offset 283136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 287232 ++read 4096/4096 bytes at offset 287232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 291328 ++read 4096/4096 bytes at offset 291328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 295424 ++read 4096/4096 bytes at offset 295424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299520 ++read 4096/4096 bytes at offset 299520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303616 ++read 4096/4096 bytes at offset 303616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307712 ++read 4096/4096 bytes at offset 307712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311808 ++read 4096/4096 bytes at offset 311808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315904 ++read 4096/4096 bytes at offset 315904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 320000 ++read 4096/4096 bytes at offset 320000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 324096 ++read 4096/4096 bytes at offset 324096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 328192 ++read 4096/4096 bytes at offset 328192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 332288 ++read 4096/4096 bytes at offset 332288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 336384 ++read 4096/4096 bytes at offset 336384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 340480 ++read 4096/4096 bytes at offset 340480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344576 ++read 4096/4096 bytes at offset 344576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348672 ++read 4096/4096 bytes at offset 348672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352768 ++read 4096/4096 bytes at offset 352768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356864 ++read 4096/4096 bytes at offset 356864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360960 ++read 4096/4096 bytes at offset 360960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 365056 ++read 4096/4096 bytes at offset 365056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 369152 ++read 4096/4096 bytes at offset 369152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 373248 ++read 4096/4096 bytes at offset 373248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 377344 ++read 4096/4096 bytes at offset 377344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 381440 ++read 4096/4096 bytes at offset 381440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385536 ++read 4096/4096 bytes at offset 385536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389632 ++read 4096/4096 bytes at offset 389632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393728 ++read 4096/4096 bytes at offset 393728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397824 ++read 4096/4096 bytes at offset 397824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401920 ++read 4096/4096 bytes at offset 401920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 406016 ++read 4096/4096 bytes at offset 406016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 410112 ++read 4096/4096 bytes at offset 410112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 414208 ++read 4096/4096 bytes at offset 414208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 418304 ++read 4096/4096 bytes at offset 418304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 422400 ++read 4096/4096 bytes at offset 422400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 426496 ++read 4096/4096 bytes at offset 426496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430592 ++read 4096/4096 bytes at offset 430592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434688 ++read 4096/4096 bytes at offset 434688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438784 ++read 4096/4096 bytes at offset 438784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442880 ++read 4096/4096 bytes at offset 442880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446976 ++read 4096/4096 bytes at offset 446976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 451072 ++read 4096/4096 bytes at offset 451072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 455168 ++read 4096/4096 bytes at offset 455168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 459264 ++read 4096/4096 bytes at offset 459264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 463360 ++read 4096/4096 bytes at offset 463360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 467456 ++read 4096/4096 bytes at offset 467456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471552 ++read 4096/4096 bytes at offset 471552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475648 ++read 4096/4096 bytes at offset 475648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479744 ++read 4096/4096 bytes at offset 479744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483840 ++read 4096/4096 bytes at offset 483840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487936 ++read 4096/4096 bytes at offset 487936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 492032 ++read 4096/4096 bytes at offset 492032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 496128 ++read 4096/4096 bytes at offset 496128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 500224 ++read 4096/4096 bytes at offset 500224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 504320 ++read 4096/4096 bytes at offset 504320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 508416 ++read 4096/4096 bytes at offset 508416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512512 ++read 4096/4096 bytes at offset 512512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516608 ++read 4096/4096 bytes at offset 516608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520704 ++read 4096/4096 bytes at offset 520704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524800 ++read 4096/4096 bytes at offset 524800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528896 ++read 4096/4096 bytes at offset 528896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532992 ++read 4096/4096 bytes at offset 532992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 537088 ++read 4096/4096 bytes at offset 537088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 541184 ++read 4096/4096 bytes at offset 541184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 545280 ++read 4096/4096 bytes at offset 545280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 549376 ++read 4096/4096 bytes at offset 549376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 553472 ++read 4096/4096 bytes at offset 553472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557568 ++read 4096/4096 bytes at offset 557568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561664 ++read 4096/4096 bytes at offset 561664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565760 ++read 4096/4096 bytes at offset 565760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569856 ++read 4096/4096 bytes at offset 569856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573952 ++read 4096/4096 bytes at offset 573952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 578048 ++read 4096/4096 bytes at offset 578048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 582144 ++read 4096/4096 bytes at offset 582144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 586240 ++read 4096/4096 bytes at offset 586240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 590336 ++read 4096/4096 bytes at offset 590336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 594432 ++read 4096/4096 bytes at offset 594432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598528 ++read 4096/4096 bytes at offset 598528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602624 ++read 4096/4096 bytes at offset 602624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606720 ++read 4096/4096 bytes at offset 606720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610816 ++read 4096/4096 bytes at offset 610816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614912 ++read 4096/4096 bytes at offset 614912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 619008 ++read 4096/4096 bytes at offset 619008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 623104 ++read 4096/4096 bytes at offset 623104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 627200 ++read 4096/4096 bytes at offset 627200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 631296 ++read 4096/4096 bytes at offset 631296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 635392 ++read 4096/4096 bytes at offset 635392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 639488 ++read 4096/4096 bytes at offset 639488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643584 ++read 4096/4096 bytes at offset 643584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647680 ++read 4096/4096 bytes at offset 647680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651776 ++read 4096/4096 bytes at offset 651776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655872 ++read 4096/4096 bytes at offset 655872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659968 ++read 4096/4096 bytes at offset 659968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 664064 ++read 4096/4096 bytes at offset 664064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 668160 ++read 4096/4096 bytes at offset 668160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 672256 ++read 4096/4096 bytes at offset 672256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 676352 ++read 4096/4096 bytes at offset 676352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 680448 ++read 4096/4096 bytes at offset 680448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684544 ++read 4096/4096 bytes at offset 684544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688640 ++read 4096/4096 bytes at offset 688640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692736 ++read 4096/4096 bytes at offset 692736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696832 ++read 4096/4096 bytes at offset 696832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700928 ++read 4096/4096 bytes at offset 700928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 705024 ++read 4096/4096 bytes at offset 705024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 709120 ++read 4096/4096 bytes at offset 709120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 713216 ++read 4096/4096 bytes at offset 713216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 717312 ++read 4096/4096 bytes at offset 717312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 721408 ++read 4096/4096 bytes at offset 721408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 725504 ++read 4096/4096 bytes at offset 725504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729600 ++read 4096/4096 bytes at offset 729600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733696 ++read 4096/4096 bytes at offset 733696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737792 ++read 4096/4096 bytes at offset 737792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741888 ++read 4096/4096 bytes at offset 741888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745984 ++read 4096/4096 bytes at offset 745984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 750080 ++read 4096/4096 bytes at offset 750080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 754176 ++read 4096/4096 bytes at offset 754176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 758272 ++read 4096/4096 bytes at offset 758272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 762368 ++read 4096/4096 bytes at offset 762368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 766464 ++read 4096/4096 bytes at offset 766464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770560 ++read 4096/4096 bytes at offset 770560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774656 ++read 4096/4096 bytes at offset 774656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778752 ++read 4096/4096 bytes at offset 778752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782848 ++read 4096/4096 bytes at offset 782848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786944 ++read 4096/4096 bytes at offset 786944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 791040 ++read 4096/4096 bytes at offset 791040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 795136 ++read 4096/4096 bytes at offset 795136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 799232 ++read 4096/4096 bytes at offset 799232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 803328 ++read 4096/4096 bytes at offset 803328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 807424 ++read 4096/4096 bytes at offset 807424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811520 ++read 4096/4096 bytes at offset 811520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815616 ++read 4096/4096 bytes at offset 815616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819712 ++read 4096/4096 bytes at offset 819712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823808 ++read 4096/4096 bytes at offset 823808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827904 ++read 4096/4096 bytes at offset 827904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 832000 ++read 4096/4096 bytes at offset 832000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 836096 ++read 4096/4096 bytes at offset 836096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 840192 ++read 4096/4096 bytes at offset 840192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 844288 ++read 4096/4096 bytes at offset 844288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 848384 ++read 4096/4096 bytes at offset 848384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 852480 ++read 4096/4096 bytes at offset 852480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856576 ++read 4096/4096 bytes at offset 856576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860672 ++read 4096/4096 bytes at offset 860672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864768 ++read 4096/4096 bytes at offset 864768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868864 ++read 4096/4096 bytes at offset 868864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872960 ++read 4096/4096 bytes at offset 872960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 877056 ++read 4096/4096 bytes at offset 877056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 881152 ++read 4096/4096 bytes at offset 881152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 885248 ++read 4096/4096 bytes at offset 885248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 889344 ++read 4096/4096 bytes at offset 889344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 893440 ++read 4096/4096 bytes at offset 893440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897536 ++read 4096/4096 bytes at offset 897536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901632 ++read 4096/4096 bytes at offset 901632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905728 ++read 4096/4096 bytes at offset 905728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909824 ++read 4096/4096 bytes at offset 909824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913920 ++read 4096/4096 bytes at offset 913920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 918016 ++read 4096/4096 bytes at offset 918016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 922112 ++read 4096/4096 bytes at offset 922112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 926208 ++read 4096/4096 bytes at offset 926208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 930304 ++read 4096/4096 bytes at offset 930304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 934400 ++read 4096/4096 bytes at offset 934400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 938496 ++read 4096/4096 bytes at offset 938496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942592 ++read 4096/4096 bytes at offset 942592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946688 ++read 4096/4096 bytes at offset 946688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950784 ++read 4096/4096 bytes at offset 950784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954880 ++read 4096/4096 bytes at offset 954880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958976 ++read 4096/4096 bytes at offset 958976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 963072 ++read 4096/4096 bytes at offset 963072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 967168 ++read 4096/4096 bytes at offset 967168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 971264 ++read 4096/4096 bytes at offset 971264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 975360 ++read 4096/4096 bytes at offset 975360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 979456 ++read 4096/4096 bytes at offset 979456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983552 ++read 4096/4096 bytes at offset 983552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987648 ++read 4096/4096 bytes at offset 987648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991744 ++read 4096/4096 bytes at offset 991744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995840 ++read 4096/4096 bytes at offset 995840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999936 ++read 4096/4096 bytes at offset 999936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1004032 ++read 4096/4096 bytes at offset 1004032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1008128 ++read 4096/4096 bytes at offset 1008128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1012224 ++read 4096/4096 bytes at offset 1012224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1016320 ++read 4096/4096 bytes at offset 1016320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1020416 ++read 4096/4096 bytes at offset 1020416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024512 ++read 4096/4096 bytes at offset 1024512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028608 ++read 4096/4096 bytes at offset 1028608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032704 ++read 4096/4096 bytes at offset 1032704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036800 ++read 4096/4096 bytes at offset 1036800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040896 ++read 4096/4096 bytes at offset 1040896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044992 ++read 4096/4096 bytes at offset 1044992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 2048/2048 bytes at offset 1051136 ++=== IO: pattern 5 ++read 2048/2048 bytes at offset 1051136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1055232 ++read 2048/2048 bytes at offset 1055232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1059328 ++read 2048/2048 bytes at offset 1059328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1063424 ++read 2048/2048 bytes at offset 1063424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067520 ++read 2048/2048 bytes at offset 1067520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071616 ++read 2048/2048 bytes at offset 1071616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075712 ++read 2048/2048 bytes at offset 1075712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079808 ++read 2048/2048 bytes at offset 1079808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083904 ++read 2048/2048 bytes at offset 1083904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1088000 ++read 2048/2048 bytes at offset 1088000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1092096 ++read 2048/2048 bytes at offset 1092096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1096192 ++read 2048/2048 bytes at offset 1096192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1100288 ++read 2048/2048 bytes at offset 1100288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1104384 ++read 2048/2048 bytes at offset 1104384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1108480 ++read 2048/2048 bytes at offset 1108480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112576 ++read 2048/2048 bytes at offset 1112576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116672 ++read 2048/2048 bytes at offset 1116672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120768 ++read 2048/2048 bytes at offset 1120768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124864 ++read 2048/2048 bytes at offset 1124864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128960 ++read 2048/2048 bytes at offset 1128960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1133056 ++read 2048/2048 bytes at offset 1133056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1137152 ++read 2048/2048 bytes at offset 1137152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1141248 ++read 2048/2048 bytes at offset 1141248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1145344 ++read 2048/2048 bytes at offset 1145344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1149440 ++read 2048/2048 bytes at offset 1149440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153536 ++read 2048/2048 bytes at offset 1153536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157632 ++read 2048/2048 bytes at offset 1157632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161728 ++read 2048/2048 bytes at offset 1161728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165824 ++read 2048/2048 bytes at offset 1165824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169920 ++read 2048/2048 bytes at offset 1169920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1174016 ++read 2048/2048 bytes at offset 1174016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1178112 ++read 2048/2048 bytes at offset 1178112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1182208 ++read 2048/2048 bytes at offset 1182208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1186304 ++read 2048/2048 bytes at offset 1186304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1190400 ++read 2048/2048 bytes at offset 1190400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1194496 ++read 2048/2048 bytes at offset 1194496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198592 ++read 2048/2048 bytes at offset 1198592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202688 ++read 2048/2048 bytes at offset 1202688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206784 ++read 2048/2048 bytes at offset 1206784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210880 ++read 2048/2048 bytes at offset 1210880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214976 ++read 2048/2048 bytes at offset 1214976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1219072 ++read 2048/2048 bytes at offset 1219072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1223168 ++read 2048/2048 bytes at offset 1223168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1227264 ++read 2048/2048 bytes at offset 1227264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1231360 ++read 2048/2048 bytes at offset 1231360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1235456 ++read 2048/2048 bytes at offset 1235456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239552 ++read 2048/2048 bytes at offset 1239552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243648 ++read 2048/2048 bytes at offset 1243648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247744 ++read 2048/2048 bytes at offset 1247744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251840 ++read 2048/2048 bytes at offset 1251840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255936 ++read 2048/2048 bytes at offset 1255936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1260032 ++read 2048/2048 bytes at offset 1260032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1264128 ++read 2048/2048 bytes at offset 1264128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1268224 ++read 2048/2048 bytes at offset 1268224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1272320 ++read 2048/2048 bytes at offset 1272320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1276416 ++read 2048/2048 bytes at offset 1276416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280512 ++read 2048/2048 bytes at offset 1280512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284608 ++read 2048/2048 bytes at offset 1284608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288704 ++read 2048/2048 bytes at offset 1288704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292800 ++read 2048/2048 bytes at offset 1292800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296896 ++read 2048/2048 bytes at offset 1296896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300992 ++read 2048/2048 bytes at offset 1300992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1305088 ++read 2048/2048 bytes at offset 1305088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1309184 ++read 2048/2048 bytes at offset 1309184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1313280 ++read 2048/2048 bytes at offset 1313280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1317376 ++read 2048/2048 bytes at offset 1317376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1321472 ++read 2048/2048 bytes at offset 1321472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325568 ++read 2048/2048 bytes at offset 1325568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329664 ++read 2048/2048 bytes at offset 1329664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333760 ++read 2048/2048 bytes at offset 1333760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337856 ++read 2048/2048 bytes at offset 1337856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341952 ++read 2048/2048 bytes at offset 1341952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1346048 ++read 2048/2048 bytes at offset 1346048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1350144 ++read 2048/2048 bytes at offset 1350144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1354240 ++read 2048/2048 bytes at offset 1354240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1358336 ++read 2048/2048 bytes at offset 1358336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1362432 ++read 2048/2048 bytes at offset 1362432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366528 ++read 2048/2048 bytes at offset 1366528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370624 ++read 2048/2048 bytes at offset 1370624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374720 ++read 2048/2048 bytes at offset 1374720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378816 ++read 2048/2048 bytes at offset 1378816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382912 ++read 2048/2048 bytes at offset 1382912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1387008 ++read 2048/2048 bytes at offset 1387008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1391104 ++read 2048/2048 bytes at offset 1391104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1395200 ++read 2048/2048 bytes at offset 1395200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1399296 ++read 2048/2048 bytes at offset 1399296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1403392 ++read 2048/2048 bytes at offset 1403392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1407488 ++read 2048/2048 bytes at offset 1407488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411584 ++read 2048/2048 bytes at offset 1411584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415680 ++read 2048/2048 bytes at offset 1415680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419776 ++read 2048/2048 bytes at offset 1419776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423872 ++read 2048/2048 bytes at offset 1423872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427968 ++read 2048/2048 bytes at offset 1427968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1432064 ++read 2048/2048 bytes at offset 1432064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1436160 ++read 2048/2048 bytes at offset 1436160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1440256 ++read 2048/2048 bytes at offset 1440256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1444352 ++read 2048/2048 bytes at offset 1444352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1448448 ++read 2048/2048 bytes at offset 1448448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452544 ++read 2048/2048 bytes at offset 1452544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456640 ++read 2048/2048 bytes at offset 1456640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460736 ++read 2048/2048 bytes at offset 1460736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464832 ++read 2048/2048 bytes at offset 1464832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468928 ++read 2048/2048 bytes at offset 1468928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1473024 ++read 2048/2048 bytes at offset 1473024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1477120 ++read 2048/2048 bytes at offset 1477120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1481216 ++read 2048/2048 bytes at offset 1481216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1485312 ++read 2048/2048 bytes at offset 1485312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1489408 ++read 2048/2048 bytes at offset 1489408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1493504 ++read 2048/2048 bytes at offset 1493504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497600 ++read 2048/2048 bytes at offset 1497600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501696 ++read 2048/2048 bytes at offset 1501696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505792 ++read 2048/2048 bytes at offset 1505792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509888 ++read 2048/2048 bytes at offset 1509888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513984 ++read 2048/2048 bytes at offset 1513984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1518080 ++read 2048/2048 bytes at offset 1518080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1522176 ++read 2048/2048 bytes at offset 1522176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1526272 ++read 2048/2048 bytes at offset 1526272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1530368 ++read 2048/2048 bytes at offset 1530368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1534464 ++read 2048/2048 bytes at offset 1534464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538560 ++read 2048/2048 bytes at offset 1538560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542656 ++read 2048/2048 bytes at offset 1542656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546752 ++read 2048/2048 bytes at offset 1546752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550848 ++read 2048/2048 bytes at offset 1550848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554944 ++read 2048/2048 bytes at offset 1554944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1559040 ++read 2048/2048 bytes at offset 1559040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1563136 ++read 2048/2048 bytes at offset 1563136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1567232 ++read 2048/2048 bytes at offset 1567232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1571328 ++read 2048/2048 bytes at offset 1571328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1575424 ++read 2048/2048 bytes at offset 1575424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579520 ++read 2048/2048 bytes at offset 1579520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583616 ++read 2048/2048 bytes at offset 1583616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587712 ++read 2048/2048 bytes at offset 1587712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591808 ++read 2048/2048 bytes at offset 1591808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595904 ++read 2048/2048 bytes at offset 1595904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1600000 ++read 2048/2048 bytes at offset 1600000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1604096 ++read 2048/2048 bytes at offset 1604096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1608192 ++read 2048/2048 bytes at offset 1608192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1612288 ++read 2048/2048 bytes at offset 1612288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1616384 ++read 2048/2048 bytes at offset 1616384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1620480 ++read 2048/2048 bytes at offset 1620480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624576 ++read 2048/2048 bytes at offset 1624576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628672 ++read 2048/2048 bytes at offset 1628672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632768 ++read 2048/2048 bytes at offset 1632768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636864 ++read 2048/2048 bytes at offset 1636864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640960 ++read 2048/2048 bytes at offset 1640960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1645056 ++read 2048/2048 bytes at offset 1645056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1649152 ++read 2048/2048 bytes at offset 1649152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1653248 ++read 2048/2048 bytes at offset 1653248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1657344 ++read 2048/2048 bytes at offset 1657344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1661440 ++read 2048/2048 bytes at offset 1661440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665536 ++read 2048/2048 bytes at offset 1665536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669632 ++read 2048/2048 bytes at offset 1669632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673728 ++read 2048/2048 bytes at offset 1673728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677824 ++read 2048/2048 bytes at offset 1677824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681920 ++read 2048/2048 bytes at offset 1681920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1686016 ++read 2048/2048 bytes at offset 1686016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1690112 ++read 2048/2048 bytes at offset 1690112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1694208 ++read 2048/2048 bytes at offset 1694208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1698304 ++read 2048/2048 bytes at offset 1698304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1702400 ++read 2048/2048 bytes at offset 1702400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1706496 ++read 2048/2048 bytes at offset 1706496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710592 ++read 2048/2048 bytes at offset 1710592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714688 ++read 2048/2048 bytes at offset 1714688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718784 ++read 2048/2048 bytes at offset 1718784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722880 ++read 2048/2048 bytes at offset 1722880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726976 ++read 2048/2048 bytes at offset 1726976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1731072 ++read 2048/2048 bytes at offset 1731072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1735168 ++read 2048/2048 bytes at offset 1735168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1739264 ++read 2048/2048 bytes at offset 1739264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1743360 ++read 2048/2048 bytes at offset 1743360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1747456 ++read 2048/2048 bytes at offset 1747456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751552 ++read 2048/2048 bytes at offset 1751552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755648 ++read 2048/2048 bytes at offset 1755648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759744 ++read 2048/2048 bytes at offset 1759744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763840 ++read 2048/2048 bytes at offset 1763840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767936 ++read 2048/2048 bytes at offset 1767936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1772032 ++read 2048/2048 bytes at offset 1772032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1776128 ++read 2048/2048 bytes at offset 1776128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1780224 ++read 2048/2048 bytes at offset 1780224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1784320 ++read 2048/2048 bytes at offset 1784320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1788416 ++read 2048/2048 bytes at offset 1788416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792512 ++read 2048/2048 bytes at offset 1792512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796608 ++read 2048/2048 bytes at offset 1796608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800704 ++read 2048/2048 bytes at offset 1800704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804800 ++read 2048/2048 bytes at offset 1804800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808896 ++read 2048/2048 bytes at offset 1808896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812992 ++read 2048/2048 bytes at offset 1812992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1817088 ++read 2048/2048 bytes at offset 1817088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1821184 ++read 2048/2048 bytes at offset 1821184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1825280 ++read 2048/2048 bytes at offset 1825280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1829376 ++read 2048/2048 bytes at offset 1829376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1833472 ++read 2048/2048 bytes at offset 1833472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837568 ++read 2048/2048 bytes at offset 1837568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841664 ++read 2048/2048 bytes at offset 1841664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845760 ++read 2048/2048 bytes at offset 1845760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849856 ++read 2048/2048 bytes at offset 1849856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853952 ++read 2048/2048 bytes at offset 1853952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1858048 ++read 2048/2048 bytes at offset 1858048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1862144 ++read 2048/2048 bytes at offset 1862144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1866240 ++read 2048/2048 bytes at offset 1866240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1870336 ++read 2048/2048 bytes at offset 1870336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1874432 ++read 2048/2048 bytes at offset 1874432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878528 ++read 2048/2048 bytes at offset 1878528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882624 ++read 2048/2048 bytes at offset 1882624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886720 ++read 2048/2048 bytes at offset 1886720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890816 ++read 2048/2048 bytes at offset 1890816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894912 ++read 2048/2048 bytes at offset 1894912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1899008 ++read 2048/2048 bytes at offset 1899008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1903104 ++read 2048/2048 bytes at offset 1903104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1907200 ++read 2048/2048 bytes at offset 1907200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1911296 ++read 2048/2048 bytes at offset 1911296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1915392 ++read 2048/2048 bytes at offset 1915392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1919488 ++read 2048/2048 bytes at offset 1919488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923584 ++read 2048/2048 bytes at offset 1923584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927680 ++read 2048/2048 bytes at offset 1927680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931776 ++read 2048/2048 bytes at offset 1931776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935872 ++read 2048/2048 bytes at offset 1935872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939968 ++read 2048/2048 bytes at offset 1939968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1944064 ++read 2048/2048 bytes at offset 1944064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1948160 ++read 2048/2048 bytes at offset 1948160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1952256 ++read 2048/2048 bytes at offset 1952256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1956352 ++read 2048/2048 bytes at offset 1956352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1960448 ++read 2048/2048 bytes at offset 1960448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964544 ++read 2048/2048 bytes at offset 1964544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968640 ++read 2048/2048 bytes at offset 1968640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972736 ++read 2048/2048 bytes at offset 1972736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976832 ++read 2048/2048 bytes at offset 1976832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980928 ++read 2048/2048 bytes at offset 1980928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1985024 ++read 2048/2048 bytes at offset 1985024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1989120 ++read 2048/2048 bytes at offset 1989120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1993216 ++read 2048/2048 bytes at offset 1993216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1997312 ++read 2048/2048 bytes at offset 1997312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2001408 ++read 2048/2048 bytes at offset 2001408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2005504 ++read 2048/2048 bytes at offset 2005504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009600 ++read 2048/2048 bytes at offset 2009600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013696 ++read 2048/2048 bytes at offset 2013696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017792 ++read 2048/2048 bytes at offset 2017792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021888 ++read 2048/2048 bytes at offset 2021888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025984 ++read 2048/2048 bytes at offset 2025984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2030080 ++read 2048/2048 bytes at offset 2030080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2034176 ++read 2048/2048 bytes at offset 2034176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2038272 ++read 2048/2048 bytes at offset 2038272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2042368 ++read 2048/2048 bytes at offset 2042368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2046464 ++read 2048/2048 bytes at offset 2046464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050560 ++read 2048/2048 bytes at offset 2050560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054656 ++read 2048/2048 bytes at offset 2054656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058752 ++read 2048/2048 bytes at offset 2058752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062848 ++read 2048/2048 bytes at offset 2062848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066944 ++read 2048/2048 bytes at offset 2066944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2071040 ++read 2048/2048 bytes at offset 2071040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2075136 ++read 2048/2048 bytes at offset 2075136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2079232 ++read 2048/2048 bytes at offset 2079232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2083328 ++read 2048/2048 bytes at offset 2083328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2087424 ++read 2048/2048 bytes at offset 2087424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091520 ++read 2048/2048 bytes at offset 2091520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095616 ++read 2048/2048 bytes at offset 2095616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 2048/2048 bytes at offset 2097664 ++=== IO: pattern 1 ++read 2048/2048 bytes at offset 2097664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101760 ++read 2048/2048 bytes at offset 2101760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105856 ++read 2048/2048 bytes at offset 2105856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109952 ++read 2048/2048 bytes at offset 2109952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2114048 ++read 2048/2048 bytes at offset 2114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2118144 ++read 2048/2048 bytes at offset 2118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2122240 ++read 2048/2048 bytes at offset 2122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2126336 ++read 2048/2048 bytes at offset 2126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2130432 ++read 2048/2048 bytes at offset 2130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134528 ++read 2048/2048 bytes at offset 2134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138624 ++read 2048/2048 bytes at offset 2138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142720 ++read 2048/2048 bytes at offset 2142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146816 ++read 2048/2048 bytes at offset 2146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150912 ++read 2048/2048 bytes at offset 2150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2155008 ++read 2048/2048 bytes at offset 2155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2159104 ++read 2048/2048 bytes at offset 2159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2163200 ++read 2048/2048 bytes at offset 2163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2167296 ++read 2048/2048 bytes at offset 2167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2171392 ++read 2048/2048 bytes at offset 2171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2175488 ++read 2048/2048 bytes at offset 2175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179584 ++read 2048/2048 bytes at offset 2179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183680 ++read 2048/2048 bytes at offset 2183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187776 ++read 2048/2048 bytes at offset 2187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191872 ++read 2048/2048 bytes at offset 2191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195968 ++read 2048/2048 bytes at offset 2195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2200064 ++read 2048/2048 bytes at offset 2200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2204160 ++read 2048/2048 bytes at offset 2204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2208256 ++read 2048/2048 bytes at offset 2208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2212352 ++read 2048/2048 bytes at offset 2212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2216448 ++read 2048/2048 bytes at offset 2216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220544 ++read 2048/2048 bytes at offset 2220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224640 ++read 2048/2048 bytes at offset 2224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228736 ++read 2048/2048 bytes at offset 2228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232832 ++read 2048/2048 bytes at offset 2232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236928 ++read 2048/2048 bytes at offset 2236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2241024 ++read 2048/2048 bytes at offset 2241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2245120 ++read 2048/2048 bytes at offset 2245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2249216 ++read 2048/2048 bytes at offset 2249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2253312 ++read 2048/2048 bytes at offset 2253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2257408 ++read 2048/2048 bytes at offset 2257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2261504 ++read 2048/2048 bytes at offset 2261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265600 ++read 2048/2048 bytes at offset 2265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269696 ++read 2048/2048 bytes at offset 2269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273792 ++read 2048/2048 bytes at offset 2273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277888 ++read 2048/2048 bytes at offset 2277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281984 ++read 2048/2048 bytes at offset 2281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2286080 ++read 2048/2048 bytes at offset 2286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2290176 ++read 2048/2048 bytes at offset 2290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2294272 ++read 2048/2048 bytes at offset 2294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2298368 ++read 2048/2048 bytes at offset 2298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2302464 ++read 2048/2048 bytes at offset 2302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306560 ++read 2048/2048 bytes at offset 2306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310656 ++read 2048/2048 bytes at offset 2310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314752 ++read 2048/2048 bytes at offset 2314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318848 ++read 2048/2048 bytes at offset 2318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322944 ++read 2048/2048 bytes at offset 2322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2327040 ++read 2048/2048 bytes at offset 2327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2331136 ++read 2048/2048 bytes at offset 2331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2335232 ++read 2048/2048 bytes at offset 2335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2339328 ++read 2048/2048 bytes at offset 2339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2343424 ++read 2048/2048 bytes at offset 2343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347520 ++read 2048/2048 bytes at offset 2347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351616 ++read 2048/2048 bytes at offset 2351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355712 ++read 2048/2048 bytes at offset 2355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359808 ++read 2048/2048 bytes at offset 2359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363904 ++read 2048/2048 bytes at offset 2363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2368000 ++read 2048/2048 bytes at offset 2368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2372096 ++read 2048/2048 bytes at offset 2372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2376192 ++read 2048/2048 bytes at offset 2376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2380288 ++read 2048/2048 bytes at offset 2380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2384384 ++read 2048/2048 bytes at offset 2384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2388480 ++read 2048/2048 bytes at offset 2388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392576 ++read 2048/2048 bytes at offset 2392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396672 ++read 2048/2048 bytes at offset 2396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400768 ++read 2048/2048 bytes at offset 2400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404864 ++read 2048/2048 bytes at offset 2404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408960 ++read 2048/2048 bytes at offset 2408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2413056 ++read 2048/2048 bytes at offset 2413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2417152 ++read 2048/2048 bytes at offset 2417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2421248 ++read 2048/2048 bytes at offset 2421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2425344 ++read 2048/2048 bytes at offset 2425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2429440 ++read 2048/2048 bytes at offset 2429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433536 ++read 2048/2048 bytes at offset 2433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437632 ++read 2048/2048 bytes at offset 2437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441728 ++read 2048/2048 bytes at offset 2441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445824 ++read 2048/2048 bytes at offset 2445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449920 ++read 2048/2048 bytes at offset 2449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2454016 ++read 2048/2048 bytes at offset 2454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2458112 ++read 2048/2048 bytes at offset 2458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2462208 ++read 2048/2048 bytes at offset 2462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2466304 ++read 2048/2048 bytes at offset 2466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2470400 ++read 2048/2048 bytes at offset 2470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2474496 ++read 2048/2048 bytes at offset 2474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478592 ++read 2048/2048 bytes at offset 2478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482688 ++read 2048/2048 bytes at offset 2482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486784 ++read 2048/2048 bytes at offset 2486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490880 ++read 2048/2048 bytes at offset 2490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494976 ++read 2048/2048 bytes at offset 2494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2499072 ++read 2048/2048 bytes at offset 2499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2503168 ++read 2048/2048 bytes at offset 2503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2507264 ++read 2048/2048 bytes at offset 2507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2511360 ++read 2048/2048 bytes at offset 2511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2515456 ++read 2048/2048 bytes at offset 2515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519552 ++read 2048/2048 bytes at offset 2519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523648 ++read 2048/2048 bytes at offset 2523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527744 ++read 2048/2048 bytes at offset 2527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531840 ++read 2048/2048 bytes at offset 2531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535936 ++read 2048/2048 bytes at offset 2535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2540032 ++read 2048/2048 bytes at offset 2540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2544128 ++read 2048/2048 bytes at offset 2544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2548224 ++read 2048/2048 bytes at offset 2548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2552320 ++read 2048/2048 bytes at offset 2552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2556416 ++read 2048/2048 bytes at offset 2556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560512 ++read 2048/2048 bytes at offset 2560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564608 ++read 2048/2048 bytes at offset 2564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568704 ++read 2048/2048 bytes at offset 2568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572800 ++read 2048/2048 bytes at offset 2572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576896 ++read 2048/2048 bytes at offset 2576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580992 ++read 2048/2048 bytes at offset 2580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2585088 ++read 2048/2048 bytes at offset 2585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2589184 ++read 2048/2048 bytes at offset 2589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2593280 ++read 2048/2048 bytes at offset 2593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2597376 ++read 2048/2048 bytes at offset 2597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2601472 ++read 2048/2048 bytes at offset 2601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605568 ++read 2048/2048 bytes at offset 2605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609664 ++read 2048/2048 bytes at offset 2609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613760 ++read 2048/2048 bytes at offset 2613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617856 ++read 2048/2048 bytes at offset 2617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621952 ++read 2048/2048 bytes at offset 2621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2626048 ++read 2048/2048 bytes at offset 2626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2630144 ++read 2048/2048 bytes at offset 2630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2634240 ++read 2048/2048 bytes at offset 2634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2638336 ++read 2048/2048 bytes at offset 2638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2642432 ++read 2048/2048 bytes at offset 2642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646528 ++read 2048/2048 bytes at offset 2646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650624 ++read 2048/2048 bytes at offset 2650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654720 ++read 2048/2048 bytes at offset 2654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658816 ++read 2048/2048 bytes at offset 2658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662912 ++read 2048/2048 bytes at offset 2662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2667008 ++read 2048/2048 bytes at offset 2667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2671104 ++read 2048/2048 bytes at offset 2671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2675200 ++read 2048/2048 bytes at offset 2675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2679296 ++read 2048/2048 bytes at offset 2679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2683392 ++read 2048/2048 bytes at offset 2683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2687488 ++read 2048/2048 bytes at offset 2687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691584 ++read 2048/2048 bytes at offset 2691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695680 ++read 2048/2048 bytes at offset 2695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699776 ++read 2048/2048 bytes at offset 2699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703872 ++read 2048/2048 bytes at offset 2703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707968 ++read 2048/2048 bytes at offset 2707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2712064 ++read 2048/2048 bytes at offset 2712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2716160 ++read 2048/2048 bytes at offset 2716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2720256 ++read 2048/2048 bytes at offset 2720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2724352 ++read 2048/2048 bytes at offset 2724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2728448 ++read 2048/2048 bytes at offset 2728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732544 ++read 2048/2048 bytes at offset 2732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736640 ++read 2048/2048 bytes at offset 2736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740736 ++read 2048/2048 bytes at offset 2740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744832 ++read 2048/2048 bytes at offset 2744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748928 ++read 2048/2048 bytes at offset 2748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2753024 ++read 2048/2048 bytes at offset 2753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2757120 ++read 2048/2048 bytes at offset 2757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2761216 ++read 2048/2048 bytes at offset 2761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2765312 ++read 2048/2048 bytes at offset 2765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2769408 ++read 2048/2048 bytes at offset 2769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2773504 ++read 2048/2048 bytes at offset 2773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777600 ++read 2048/2048 bytes at offset 2777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781696 ++read 2048/2048 bytes at offset 2781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785792 ++read 2048/2048 bytes at offset 2785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789888 ++read 2048/2048 bytes at offset 2789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793984 ++read 2048/2048 bytes at offset 2793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2798080 ++read 2048/2048 bytes at offset 2798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2802176 ++read 2048/2048 bytes at offset 2802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2806272 ++read 2048/2048 bytes at offset 2806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2810368 ++read 2048/2048 bytes at offset 2810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2814464 ++read 2048/2048 bytes at offset 2814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818560 ++read 2048/2048 bytes at offset 2818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822656 ++read 2048/2048 bytes at offset 2822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826752 ++read 2048/2048 bytes at offset 2826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830848 ++read 2048/2048 bytes at offset 2830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834944 ++read 2048/2048 bytes at offset 2834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2839040 ++read 2048/2048 bytes at offset 2839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2843136 ++read 2048/2048 bytes at offset 2843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2847232 ++read 2048/2048 bytes at offset 2847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2851328 ++read 2048/2048 bytes at offset 2851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2855424 ++read 2048/2048 bytes at offset 2855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859520 ++read 2048/2048 bytes at offset 2859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863616 ++read 2048/2048 bytes at offset 2863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867712 ++read 2048/2048 bytes at offset 2867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871808 ++read 2048/2048 bytes at offset 2871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875904 ++read 2048/2048 bytes at offset 2875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2880000 ++read 2048/2048 bytes at offset 2880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2884096 ++read 2048/2048 bytes at offset 2884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2888192 ++read 2048/2048 bytes at offset 2888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2892288 ++read 2048/2048 bytes at offset 2892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2896384 ++read 2048/2048 bytes at offset 2896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2900480 ++read 2048/2048 bytes at offset 2900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904576 ++read 2048/2048 bytes at offset 2904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908672 ++read 2048/2048 bytes at offset 2908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912768 ++read 2048/2048 bytes at offset 2912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916864 ++read 2048/2048 bytes at offset 2916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920960 ++read 2048/2048 bytes at offset 2920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2925056 ++read 2048/2048 bytes at offset 2925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2929152 ++read 2048/2048 bytes at offset 2929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2933248 ++read 2048/2048 bytes at offset 2933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2937344 ++read 2048/2048 bytes at offset 2937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2941440 ++read 2048/2048 bytes at offset 2941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945536 ++read 2048/2048 bytes at offset 2945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949632 ++read 2048/2048 bytes at offset 2949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953728 ++read 2048/2048 bytes at offset 2953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957824 ++read 2048/2048 bytes at offset 2957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961920 ++read 2048/2048 bytes at offset 2961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2966016 ++read 2048/2048 bytes at offset 2966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2970112 ++read 2048/2048 bytes at offset 2970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2974208 ++read 2048/2048 bytes at offset 2974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2978304 ++read 2048/2048 bytes at offset 2978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2982400 ++read 2048/2048 bytes at offset 2982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2986496 ++read 2048/2048 bytes at offset 2986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990592 ++read 2048/2048 bytes at offset 2990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994688 ++read 2048/2048 bytes at offset 2994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998784 ++read 2048/2048 bytes at offset 2998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002880 ++read 2048/2048 bytes at offset 3002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006976 ++read 2048/2048 bytes at offset 3006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3011072 ++read 2048/2048 bytes at offset 3011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3015168 ++read 2048/2048 bytes at offset 3015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3019264 ++read 2048/2048 bytes at offset 3019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3023360 ++read 2048/2048 bytes at offset 3023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3027456 ++read 2048/2048 bytes at offset 3027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031552 ++read 2048/2048 bytes at offset 3031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035648 ++read 2048/2048 bytes at offset 3035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039744 ++read 2048/2048 bytes at offset 3039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043840 ++read 2048/2048 bytes at offset 3043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047936 ++read 2048/2048 bytes at offset 3047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3052032 ++read 2048/2048 bytes at offset 3052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3056128 ++read 2048/2048 bytes at offset 3056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3060224 ++read 2048/2048 bytes at offset 3060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3064320 ++read 2048/2048 bytes at offset 3064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3068416 ++read 2048/2048 bytes at offset 3068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072512 ++read 2048/2048 bytes at offset 3072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076608 ++read 2048/2048 bytes at offset 3076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080704 ++read 2048/2048 bytes at offset 3080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084800 ++read 2048/2048 bytes at offset 3084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088896 ++read 2048/2048 bytes at offset 3088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092992 ++read 2048/2048 bytes at offset 3092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3097088 ++read 2048/2048 bytes at offset 3097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3101184 ++read 2048/2048 bytes at offset 3101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3105280 ++read 2048/2048 bytes at offset 3105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3109376 ++read 2048/2048 bytes at offset 3109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3113472 ++read 2048/2048 bytes at offset 3113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117568 ++read 2048/2048 bytes at offset 3117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121664 ++read 2048/2048 bytes at offset 3121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125760 ++read 2048/2048 bytes at offset 3125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129856 ++read 2048/2048 bytes at offset 3129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133952 ++read 2048/2048 bytes at offset 3133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3138048 ++read 2048/2048 bytes at offset 3138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3142144 ++read 2048/2048 bytes at offset 3142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> read 2048/2048 bytes at offset 3147264 ++=== IO: pattern 3 ++read 2048/2048 bytes at offset 3147264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3151360 ++read 2048/2048 bytes at offset 3151360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3155456 ++read 2048/2048 bytes at offset 3155456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159552 ++read 2048/2048 bytes at offset 3159552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163648 ++read 2048/2048 bytes at offset 3163648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167744 ++read 2048/2048 bytes at offset 3167744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171840 ++read 2048/2048 bytes at offset 3171840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175936 ++read 2048/2048 bytes at offset 3175936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3180032 ++read 2048/2048 bytes at offset 3180032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3184128 ++read 2048/2048 bytes at offset 3184128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3188224 ++read 2048/2048 bytes at offset 3188224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3192320 ++read 2048/2048 bytes at offset 3192320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3196416 ++read 2048/2048 bytes at offset 3196416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200512 ++read 2048/2048 bytes at offset 3200512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204608 ++read 2048/2048 bytes at offset 3204608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208704 ++read 2048/2048 bytes at offset 3208704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212800 ++read 2048/2048 bytes at offset 3212800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216896 ++read 2048/2048 bytes at offset 3216896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220992 ++read 2048/2048 bytes at offset 3220992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3225088 ++read 2048/2048 bytes at offset 3225088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3229184 ++read 2048/2048 bytes at offset 3229184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3233280 ++read 2048/2048 bytes at offset 3233280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3237376 ++read 2048/2048 bytes at offset 3237376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3241472 ++read 2048/2048 bytes at offset 3241472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245568 ++read 2048/2048 bytes at offset 3245568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249664 ++read 2048/2048 bytes at offset 3249664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253760 ++read 2048/2048 bytes at offset 3253760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257856 ++read 2048/2048 bytes at offset 3257856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261952 ++read 2048/2048 bytes at offset 3261952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3266048 ++read 2048/2048 bytes at offset 3266048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3270144 ++read 2048/2048 bytes at offset 3270144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3274240 ++read 2048/2048 bytes at offset 3274240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3278336 ++read 2048/2048 bytes at offset 3278336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3282432 ++read 2048/2048 bytes at offset 3282432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286528 ++read 2048/2048 bytes at offset 3286528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290624 ++read 2048/2048 bytes at offset 3290624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294720 ++read 2048/2048 bytes at offset 3294720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298816 ++read 2048/2048 bytes at offset 3298816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302912 ++read 2048/2048 bytes at offset 3302912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3307008 ++read 2048/2048 bytes at offset 3307008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3311104 ++read 2048/2048 bytes at offset 3311104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3315200 ++read 2048/2048 bytes at offset 3315200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3319296 ++read 2048/2048 bytes at offset 3319296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3323392 ++read 2048/2048 bytes at offset 3323392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3327488 ++read 2048/2048 bytes at offset 3327488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331584 ++read 2048/2048 bytes at offset 3331584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335680 ++read 2048/2048 bytes at offset 3335680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339776 ++read 2048/2048 bytes at offset 3339776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343872 ++read 2048/2048 bytes at offset 3343872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347968 ++read 2048/2048 bytes at offset 3347968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3352064 ++read 2048/2048 bytes at offset 3352064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3356160 ++read 2048/2048 bytes at offset 3356160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3360256 ++read 2048/2048 bytes at offset 3360256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3364352 ++read 2048/2048 bytes at offset 3364352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3368448 ++read 2048/2048 bytes at offset 3368448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372544 ++read 2048/2048 bytes at offset 3372544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376640 ++read 2048/2048 bytes at offset 3376640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380736 ++read 2048/2048 bytes at offset 3380736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384832 ++read 2048/2048 bytes at offset 3384832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388928 ++read 2048/2048 bytes at offset 3388928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3393024 ++read 2048/2048 bytes at offset 3393024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3397120 ++read 2048/2048 bytes at offset 3397120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3401216 ++read 2048/2048 bytes at offset 3401216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3405312 ++read 2048/2048 bytes at offset 3405312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3409408 ++read 2048/2048 bytes at offset 3409408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3413504 ++read 2048/2048 bytes at offset 3413504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417600 ++read 2048/2048 bytes at offset 3417600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421696 ++read 2048/2048 bytes at offset 3421696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425792 ++read 2048/2048 bytes at offset 3425792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429888 ++read 2048/2048 bytes at offset 3429888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433984 ++read 2048/2048 bytes at offset 3433984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3438080 ++read 2048/2048 bytes at offset 3438080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3442176 ++read 2048/2048 bytes at offset 3442176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3446272 ++read 2048/2048 bytes at offset 3446272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3450368 ++read 2048/2048 bytes at offset 3450368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3454464 ++read 2048/2048 bytes at offset 3454464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458560 ++read 2048/2048 bytes at offset 3458560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462656 ++read 2048/2048 bytes at offset 3462656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466752 ++read 2048/2048 bytes at offset 3466752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470848 ++read 2048/2048 bytes at offset 3470848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474944 ++read 2048/2048 bytes at offset 3474944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3479040 ++read 2048/2048 bytes at offset 3479040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3483136 ++read 2048/2048 bytes at offset 3483136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3487232 ++read 2048/2048 bytes at offset 3487232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3491328 ++read 2048/2048 bytes at offset 3491328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3495424 ++read 2048/2048 bytes at offset 3495424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499520 ++read 2048/2048 bytes at offset 3499520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503616 ++read 2048/2048 bytes at offset 3503616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507712 ++read 2048/2048 bytes at offset 3507712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511808 ++read 2048/2048 bytes at offset 3511808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515904 ++read 2048/2048 bytes at offset 3515904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3520000 ++read 2048/2048 bytes at offset 3520000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3524096 ++read 2048/2048 bytes at offset 3524096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3528192 ++read 2048/2048 bytes at offset 3528192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3532288 ++read 2048/2048 bytes at offset 3532288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3536384 ++read 2048/2048 bytes at offset 3536384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3540480 ++read 2048/2048 bytes at offset 3540480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544576 ++read 2048/2048 bytes at offset 3544576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548672 ++read 2048/2048 bytes at offset 3548672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552768 ++read 2048/2048 bytes at offset 3552768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556864 ++read 2048/2048 bytes at offset 3556864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560960 ++read 2048/2048 bytes at offset 3560960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3565056 ++read 2048/2048 bytes at offset 3565056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3569152 ++read 2048/2048 bytes at offset 3569152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3573248 ++read 2048/2048 bytes at offset 3573248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3577344 ++read 2048/2048 bytes at offset 3577344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3581440 ++read 2048/2048 bytes at offset 3581440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585536 ++read 2048/2048 bytes at offset 3585536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589632 ++read 2048/2048 bytes at offset 3589632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593728 ++read 2048/2048 bytes at offset 3593728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597824 ++read 2048/2048 bytes at offset 3597824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601920 ++read 2048/2048 bytes at offset 3601920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3606016 ++read 2048/2048 bytes at offset 3606016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3610112 ++read 2048/2048 bytes at offset 3610112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3614208 ++read 2048/2048 bytes at offset 3614208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3618304 ++read 2048/2048 bytes at offset 3618304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3622400 ++read 2048/2048 bytes at offset 3622400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3626496 ++read 2048/2048 bytes at offset 3626496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630592 ++read 2048/2048 bytes at offset 3630592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634688 ++read 2048/2048 bytes at offset 3634688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638784 ++read 2048/2048 bytes at offset 3638784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642880 ++read 2048/2048 bytes at offset 3642880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646976 ++read 2048/2048 bytes at offset 3646976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3651072 ++read 2048/2048 bytes at offset 3651072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3655168 ++read 2048/2048 bytes at offset 3655168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3659264 ++read 2048/2048 bytes at offset 3659264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3663360 ++read 2048/2048 bytes at offset 3663360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3667456 ++read 2048/2048 bytes at offset 3667456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671552 ++read 2048/2048 bytes at offset 3671552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675648 ++read 2048/2048 bytes at offset 3675648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679744 ++read 2048/2048 bytes at offset 3679744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683840 ++read 2048/2048 bytes at offset 3683840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687936 ++read 2048/2048 bytes at offset 3687936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3692032 ++read 2048/2048 bytes at offset 3692032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3696128 ++read 2048/2048 bytes at offset 3696128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3700224 ++read 2048/2048 bytes at offset 3700224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3704320 ++read 2048/2048 bytes at offset 3704320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3708416 ++read 2048/2048 bytes at offset 3708416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712512 ++read 2048/2048 bytes at offset 3712512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716608 ++read 2048/2048 bytes at offset 3716608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720704 ++read 2048/2048 bytes at offset 3720704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724800 ++read 2048/2048 bytes at offset 3724800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728896 ++read 2048/2048 bytes at offset 3728896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732992 ++read 2048/2048 bytes at offset 3732992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3737088 ++read 2048/2048 bytes at offset 3737088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3741184 ++read 2048/2048 bytes at offset 3741184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3745280 ++read 2048/2048 bytes at offset 3745280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3749376 ++read 2048/2048 bytes at offset 3749376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3753472 ++read 2048/2048 bytes at offset 3753472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757568 ++read 2048/2048 bytes at offset 3757568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761664 ++read 2048/2048 bytes at offset 3761664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765760 ++read 2048/2048 bytes at offset 3765760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769856 ++read 2048/2048 bytes at offset 3769856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773952 ++read 2048/2048 bytes at offset 3773952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3778048 ++read 2048/2048 bytes at offset 3778048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3782144 ++read 2048/2048 bytes at offset 3782144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3786240 ++read 2048/2048 bytes at offset 3786240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3790336 ++read 2048/2048 bytes at offset 3790336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3794432 ++read 2048/2048 bytes at offset 3794432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798528 ++read 2048/2048 bytes at offset 3798528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802624 ++read 2048/2048 bytes at offset 3802624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806720 ++read 2048/2048 bytes at offset 3806720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810816 ++read 2048/2048 bytes at offset 3810816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814912 ++read 2048/2048 bytes at offset 3814912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3819008 ++read 2048/2048 bytes at offset 3819008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3823104 ++read 2048/2048 bytes at offset 3823104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3827200 ++read 2048/2048 bytes at offset 3827200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3831296 ++read 2048/2048 bytes at offset 3831296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3835392 ++read 2048/2048 bytes at offset 3835392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3839488 ++read 2048/2048 bytes at offset 3839488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843584 ++read 2048/2048 bytes at offset 3843584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847680 ++read 2048/2048 bytes at offset 3847680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851776 ++read 2048/2048 bytes at offset 3851776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855872 ++read 2048/2048 bytes at offset 3855872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859968 ++read 2048/2048 bytes at offset 3859968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3864064 ++read 2048/2048 bytes at offset 3864064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3868160 ++read 2048/2048 bytes at offset 3868160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3872256 ++read 2048/2048 bytes at offset 3872256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3876352 ++read 2048/2048 bytes at offset 3876352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3880448 ++read 2048/2048 bytes at offset 3880448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884544 ++read 2048/2048 bytes at offset 3884544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888640 ++read 2048/2048 bytes at offset 3888640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892736 ++read 2048/2048 bytes at offset 3892736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896832 ++read 2048/2048 bytes at offset 3896832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900928 ++read 2048/2048 bytes at offset 3900928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3905024 ++read 2048/2048 bytes at offset 3905024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3909120 ++read 2048/2048 bytes at offset 3909120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3913216 ++read 2048/2048 bytes at offset 3913216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3917312 ++read 2048/2048 bytes at offset 3917312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3921408 ++read 2048/2048 bytes at offset 3921408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3925504 ++read 2048/2048 bytes at offset 3925504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929600 ++read 2048/2048 bytes at offset 3929600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933696 ++read 2048/2048 bytes at offset 3933696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937792 ++read 2048/2048 bytes at offset 3937792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941888 ++read 2048/2048 bytes at offset 3941888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945984 ++read 2048/2048 bytes at offset 3945984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3950080 ++read 2048/2048 bytes at offset 3950080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3954176 ++read 2048/2048 bytes at offset 3954176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3958272 ++read 2048/2048 bytes at offset 3958272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3962368 ++read 2048/2048 bytes at offset 3962368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3966464 ++read 2048/2048 bytes at offset 3966464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970560 ++read 2048/2048 bytes at offset 3970560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974656 ++read 2048/2048 bytes at offset 3974656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978752 ++read 2048/2048 bytes at offset 3978752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982848 ++read 2048/2048 bytes at offset 3982848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986944 ++read 2048/2048 bytes at offset 3986944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3991040 ++read 2048/2048 bytes at offset 3991040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3995136 ++read 2048/2048 bytes at offset 3995136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3999232 ++read 2048/2048 bytes at offset 3999232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4003328 ++read 2048/2048 bytes at offset 4003328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4007424 ++read 2048/2048 bytes at offset 4007424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011520 ++read 2048/2048 bytes at offset 4011520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015616 ++read 2048/2048 bytes at offset 4015616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019712 ++read 2048/2048 bytes at offset 4019712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023808 ++read 2048/2048 bytes at offset 4023808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027904 ++read 2048/2048 bytes at offset 4027904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4032000 ++read 2048/2048 bytes at offset 4032000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4036096 ++read 2048/2048 bytes at offset 4036096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4040192 ++read 2048/2048 bytes at offset 4040192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4044288 ++read 2048/2048 bytes at offset 4044288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4048384 ++read 2048/2048 bytes at offset 4048384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4052480 ++read 2048/2048 bytes at offset 4052480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056576 ++read 2048/2048 bytes at offset 4056576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060672 ++read 2048/2048 bytes at offset 4060672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064768 ++read 2048/2048 bytes at offset 4064768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068864 ++read 2048/2048 bytes at offset 4068864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072960 ++read 2048/2048 bytes at offset 4072960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4077056 ++read 2048/2048 bytes at offset 4077056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4081152 ++read 2048/2048 bytes at offset 4081152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4085248 ++read 2048/2048 bytes at offset 4085248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4089344 ++read 2048/2048 bytes at offset 4089344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4093440 ++read 2048/2048 bytes at offset 4093440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097536 ++read 2048/2048 bytes at offset 4097536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101632 ++read 2048/2048 bytes at offset 4101632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105728 ++read 2048/2048 bytes at offset 4105728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109824 ++read 2048/2048 bytes at offset 4109824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113920 ++read 2048/2048 bytes at offset 4113920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4118016 ++read 2048/2048 bytes at offset 4118016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4122112 ++read 2048/2048 bytes at offset 4122112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4126208 ++read 2048/2048 bytes at offset 4126208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4130304 ++read 2048/2048 bytes at offset 4130304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4134400 ++read 2048/2048 bytes at offset 4134400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4138496 ++read 2048/2048 bytes at offset 4138496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142592 ++read 2048/2048 bytes at offset 4142592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146688 ++read 2048/2048 bytes at offset 4146688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150784 ++read 2048/2048 bytes at offset 4150784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154880 ++read 2048/2048 bytes at offset 4154880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158976 ++read 2048/2048 bytes at offset 4158976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4163072 ++read 2048/2048 bytes at offset 4163072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4167168 ++read 2048/2048 bytes at offset 4167168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4171264 ++read 2048/2048 bytes at offset 4171264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4175360 ++read 2048/2048 bytes at offset 4175360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4179456 ++read 2048/2048 bytes at offset 4179456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183552 ++read 2048/2048 bytes at offset 4183552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187648 ++read 2048/2048 bytes at offset 4187648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191744 ++read 2048/2048 bytes at offset 4191744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 8192/8192 bytes at offset 4196864 ++=== IO: pattern 5 ++read 8192/8192 bytes at offset 4196864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4209152 ++read 8192/8192 bytes at offset 4209152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4221440 ++read 8192/8192 bytes at offset 4221440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233728 ++read 8192/8192 bytes at offset 4233728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4246016 ++read 8192/8192 bytes at offset 4246016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4258304 ++read 8192/8192 bytes at offset 4258304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270592 ++read 8192/8192 bytes at offset 4270592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282880 ++read 8192/8192 bytes at offset 4282880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295168 ++read 8192/8192 bytes at offset 4295168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4307456 ++read 8192/8192 bytes at offset 4307456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319744 ++read 8192/8192 bytes at offset 4319744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4332032 ++read 8192/8192 bytes at offset 4332032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4344320 ++read 8192/8192 bytes at offset 4344320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356608 ++read 8192/8192 bytes at offset 4356608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368896 ++read 8192/8192 bytes at offset 4368896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4381184 ++read 8192/8192 bytes at offset 4381184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4393472 ++read 8192/8192 bytes at offset 4393472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405760 ++read 8192/8192 bytes at offset 4405760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4418048 ++read 8192/8192 bytes at offset 4418048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4430336 ++read 8192/8192 bytes at offset 4430336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442624 ++read 8192/8192 bytes at offset 4442624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454912 ++read 8192/8192 bytes at offset 4454912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4467200 ++read 8192/8192 bytes at offset 4467200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4479488 ++read 8192/8192 bytes at offset 4479488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491776 ++read 8192/8192 bytes at offset 4491776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4504064 ++read 8192/8192 bytes at offset 4504064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4516352 ++read 8192/8192 bytes at offset 4516352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528640 ++read 8192/8192 bytes at offset 4528640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540928 ++read 8192/8192 bytes at offset 4540928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4553216 ++read 8192/8192 bytes at offset 4553216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4565504 ++read 8192/8192 bytes at offset 4565504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577792 ++read 8192/8192 bytes at offset 4577792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4590080 ++read 8192/8192 bytes at offset 4590080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4602368 ++read 8192/8192 bytes at offset 4602368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614656 ++read 8192/8192 bytes at offset 4614656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626944 ++read 8192/8192 bytes at offset 4626944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4639232 ++read 8192/8192 bytes at offset 4639232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651520 ++read 8192/8192 bytes at offset 4651520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663808 ++read 8192/8192 bytes at offset 4663808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4676096 ++read 8192/8192 bytes at offset 4676096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4688384 ++read 8192/8192 bytes at offset 4688384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700672 ++read 8192/8192 bytes at offset 4700672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712960 ++read 8192/8192 bytes at offset 4712960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4725248 ++read 8192/8192 bytes at offset 4725248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737536 ++read 8192/8192 bytes at offset 4737536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749824 ++read 8192/8192 bytes at offset 4749824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4762112 ++read 8192/8192 bytes at offset 4762112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4774400 ++read 8192/8192 bytes at offset 4774400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786688 ++read 8192/8192 bytes at offset 4786688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798976 ++read 8192/8192 bytes at offset 4798976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4811264 ++read 8192/8192 bytes at offset 4811264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823552 ++read 8192/8192 bytes at offset 4823552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835840 ++read 8192/8192 bytes at offset 4835840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4848128 ++read 8192/8192 bytes at offset 4848128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4860416 ++read 8192/8192 bytes at offset 4860416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872704 ++read 8192/8192 bytes at offset 4872704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884992 ++read 8192/8192 bytes at offset 4884992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4897280 ++read 8192/8192 bytes at offset 4897280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909568 ++read 8192/8192 bytes at offset 4909568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921856 ++read 8192/8192 bytes at offset 4921856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4934144 ++read 8192/8192 bytes at offset 4934144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4946432 ++read 8192/8192 bytes at offset 4946432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958720 ++read 8192/8192 bytes at offset 4958720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4971008 ++read 8192/8192 bytes at offset 4971008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 512 ++=== IO: pattern 1 ++wrote 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4608 ++wrote 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8704 ++wrote 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12800 ++wrote 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16896 ++wrote 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20992 ++wrote 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 25088 ++wrote 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 29184 ++wrote 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 33280 ++wrote 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 37376 ++wrote 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 41472 ++wrote 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45568 ++wrote 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49664 ++wrote 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53760 ++wrote 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57856 ++wrote 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61952 ++wrote 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 66048 ++wrote 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 70144 ++wrote 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 74240 ++wrote 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 78336 ++wrote 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 82432 ++wrote 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86528 ++wrote 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90624 ++wrote 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94720 ++wrote 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98816 ++wrote 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102912 ++wrote 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 107008 ++wrote 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 111104 ++wrote 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 115200 ++wrote 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 119296 ++wrote 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 123392 ++wrote 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 127488 ++wrote 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131584 ++wrote 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135680 ++wrote 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139776 ++wrote 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143872 ++wrote 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147968 ++wrote 4096/4096 bytes at offset 147968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 152064 ++wrote 4096/4096 bytes at offset 152064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 156160 ++wrote 4096/4096 bytes at offset 156160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 160256 ++wrote 4096/4096 bytes at offset 160256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 164352 ++wrote 4096/4096 bytes at offset 164352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 168448 ++wrote 4096/4096 bytes at offset 168448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172544 ++wrote 4096/4096 bytes at offset 172544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176640 ++wrote 4096/4096 bytes at offset 176640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180736 ++wrote 4096/4096 bytes at offset 180736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184832 ++wrote 4096/4096 bytes at offset 184832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188928 ++wrote 4096/4096 bytes at offset 188928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 193024 ++wrote 4096/4096 bytes at offset 193024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 197120 ++wrote 4096/4096 bytes at offset 197120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 201216 ++wrote 4096/4096 bytes at offset 201216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 205312 ++wrote 4096/4096 bytes at offset 205312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 209408 ++wrote 4096/4096 bytes at offset 209408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 213504 ++wrote 4096/4096 bytes at offset 213504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217600 ++wrote 4096/4096 bytes at offset 217600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221696 ++wrote 4096/4096 bytes at offset 221696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225792 ++wrote 4096/4096 bytes at offset 225792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229888 ++wrote 4096/4096 bytes at offset 229888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233984 ++wrote 4096/4096 bytes at offset 233984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 238080 ++wrote 4096/4096 bytes at offset 238080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 242176 ++wrote 4096/4096 bytes at offset 242176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 246272 ++wrote 4096/4096 bytes at offset 246272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 250368 ++wrote 4096/4096 bytes at offset 250368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 254464 ++wrote 4096/4096 bytes at offset 254464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258560 ++wrote 4096/4096 bytes at offset 258560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262656 ++wrote 4096/4096 bytes at offset 262656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266752 ++wrote 4096/4096 bytes at offset 266752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270848 ++wrote 4096/4096 bytes at offset 270848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274944 ++wrote 4096/4096 bytes at offset 274944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 279040 ++wrote 4096/4096 bytes at offset 279040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 283136 ++wrote 4096/4096 bytes at offset 283136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 287232 ++wrote 4096/4096 bytes at offset 287232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 291328 ++wrote 4096/4096 bytes at offset 291328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 295424 ++wrote 4096/4096 bytes at offset 295424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299520 ++wrote 4096/4096 bytes at offset 299520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303616 ++wrote 4096/4096 bytes at offset 303616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307712 ++wrote 4096/4096 bytes at offset 307712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311808 ++wrote 4096/4096 bytes at offset 311808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315904 ++wrote 4096/4096 bytes at offset 315904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 320000 ++wrote 4096/4096 bytes at offset 320000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 324096 ++wrote 4096/4096 bytes at offset 324096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 328192 ++wrote 4096/4096 bytes at offset 328192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 332288 ++wrote 4096/4096 bytes at offset 332288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 336384 ++wrote 4096/4096 bytes at offset 336384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 340480 ++wrote 4096/4096 bytes at offset 340480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344576 ++wrote 4096/4096 bytes at offset 344576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348672 ++wrote 4096/4096 bytes at offset 348672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352768 ++wrote 4096/4096 bytes at offset 352768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356864 ++wrote 4096/4096 bytes at offset 356864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360960 ++wrote 4096/4096 bytes at offset 360960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 365056 ++wrote 4096/4096 bytes at offset 365056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 369152 ++wrote 4096/4096 bytes at offset 369152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 373248 ++wrote 4096/4096 bytes at offset 373248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 377344 ++wrote 4096/4096 bytes at offset 377344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 381440 ++wrote 4096/4096 bytes at offset 381440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385536 ++wrote 4096/4096 bytes at offset 385536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389632 ++wrote 4096/4096 bytes at offset 389632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393728 ++wrote 4096/4096 bytes at offset 393728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397824 ++wrote 4096/4096 bytes at offset 397824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401920 ++wrote 4096/4096 bytes at offset 401920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 406016 ++wrote 4096/4096 bytes at offset 406016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 410112 ++wrote 4096/4096 bytes at offset 410112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 414208 ++wrote 4096/4096 bytes at offset 414208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 418304 ++wrote 4096/4096 bytes at offset 418304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 422400 ++wrote 4096/4096 bytes at offset 422400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 426496 ++wrote 4096/4096 bytes at offset 426496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430592 ++wrote 4096/4096 bytes at offset 430592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434688 ++wrote 4096/4096 bytes at offset 434688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438784 ++wrote 4096/4096 bytes at offset 438784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442880 ++wrote 4096/4096 bytes at offset 442880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446976 ++wrote 4096/4096 bytes at offset 446976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 451072 ++wrote 4096/4096 bytes at offset 451072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 455168 ++wrote 4096/4096 bytes at offset 455168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 459264 ++wrote 4096/4096 bytes at offset 459264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 463360 ++wrote 4096/4096 bytes at offset 463360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 467456 ++wrote 4096/4096 bytes at offset 467456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471552 ++wrote 4096/4096 bytes at offset 471552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475648 ++wrote 4096/4096 bytes at offset 475648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479744 ++wrote 4096/4096 bytes at offset 479744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483840 ++wrote 4096/4096 bytes at offset 483840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487936 ++wrote 4096/4096 bytes at offset 487936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 492032 ++wrote 4096/4096 bytes at offset 492032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 496128 ++wrote 4096/4096 bytes at offset 496128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 500224 ++wrote 4096/4096 bytes at offset 500224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 504320 ++wrote 4096/4096 bytes at offset 504320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 508416 ++wrote 4096/4096 bytes at offset 508416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512512 ++wrote 4096/4096 bytes at offset 512512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516608 ++wrote 4096/4096 bytes at offset 516608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520704 ++wrote 4096/4096 bytes at offset 520704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524800 ++wrote 4096/4096 bytes at offset 524800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528896 ++wrote 4096/4096 bytes at offset 528896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532992 ++wrote 4096/4096 bytes at offset 532992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 537088 ++wrote 4096/4096 bytes at offset 537088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 541184 ++wrote 4096/4096 bytes at offset 541184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 545280 ++wrote 4096/4096 bytes at offset 545280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 549376 ++wrote 4096/4096 bytes at offset 549376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 553472 ++wrote 4096/4096 bytes at offset 553472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557568 ++wrote 4096/4096 bytes at offset 557568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561664 ++wrote 4096/4096 bytes at offset 561664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565760 ++wrote 4096/4096 bytes at offset 565760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569856 ++wrote 4096/4096 bytes at offset 569856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573952 ++wrote 4096/4096 bytes at offset 573952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 578048 ++wrote 4096/4096 bytes at offset 578048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 582144 ++wrote 4096/4096 bytes at offset 582144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 586240 ++wrote 4096/4096 bytes at offset 586240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 590336 ++wrote 4096/4096 bytes at offset 590336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 594432 ++wrote 4096/4096 bytes at offset 594432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598528 ++wrote 4096/4096 bytes at offset 598528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602624 ++wrote 4096/4096 bytes at offset 602624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606720 ++wrote 4096/4096 bytes at offset 606720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610816 ++wrote 4096/4096 bytes at offset 610816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614912 ++wrote 4096/4096 bytes at offset 614912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 619008 ++wrote 4096/4096 bytes at offset 619008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 623104 ++wrote 4096/4096 bytes at offset 623104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 627200 ++wrote 4096/4096 bytes at offset 627200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 631296 ++wrote 4096/4096 bytes at offset 631296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 635392 ++wrote 4096/4096 bytes at offset 635392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 639488 ++wrote 4096/4096 bytes at offset 639488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643584 ++wrote 4096/4096 bytes at offset 643584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647680 ++wrote 4096/4096 bytes at offset 647680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651776 ++wrote 4096/4096 bytes at offset 651776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655872 ++wrote 4096/4096 bytes at offset 655872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659968 ++wrote 4096/4096 bytes at offset 659968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 664064 ++wrote 4096/4096 bytes at offset 664064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 668160 ++wrote 4096/4096 bytes at offset 668160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 672256 ++wrote 4096/4096 bytes at offset 672256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 676352 ++wrote 4096/4096 bytes at offset 676352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 680448 ++wrote 4096/4096 bytes at offset 680448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684544 ++wrote 4096/4096 bytes at offset 684544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688640 ++wrote 4096/4096 bytes at offset 688640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692736 ++wrote 4096/4096 bytes at offset 692736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696832 ++wrote 4096/4096 bytes at offset 696832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700928 ++wrote 4096/4096 bytes at offset 700928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 705024 ++wrote 4096/4096 bytes at offset 705024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 709120 ++wrote 4096/4096 bytes at offset 709120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 713216 ++wrote 4096/4096 bytes at offset 713216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 717312 ++wrote 4096/4096 bytes at offset 717312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 721408 ++wrote 4096/4096 bytes at offset 721408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 725504 ++wrote 4096/4096 bytes at offset 725504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729600 ++wrote 4096/4096 bytes at offset 729600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733696 ++wrote 4096/4096 bytes at offset 733696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737792 ++wrote 4096/4096 bytes at offset 737792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741888 ++wrote 4096/4096 bytes at offset 741888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745984 ++wrote 4096/4096 bytes at offset 745984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 750080 ++wrote 4096/4096 bytes at offset 750080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 754176 ++wrote 4096/4096 bytes at offset 754176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 758272 ++wrote 4096/4096 bytes at offset 758272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 762368 ++wrote 4096/4096 bytes at offset 762368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 766464 ++wrote 4096/4096 bytes at offset 766464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770560 ++wrote 4096/4096 bytes at offset 770560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774656 ++wrote 4096/4096 bytes at offset 774656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778752 ++wrote 4096/4096 bytes at offset 778752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782848 ++wrote 4096/4096 bytes at offset 782848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786944 ++wrote 4096/4096 bytes at offset 786944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 791040 ++wrote 4096/4096 bytes at offset 791040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 795136 ++wrote 4096/4096 bytes at offset 795136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 799232 ++wrote 4096/4096 bytes at offset 799232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 803328 ++wrote 4096/4096 bytes at offset 803328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 807424 ++wrote 4096/4096 bytes at offset 807424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811520 ++wrote 4096/4096 bytes at offset 811520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815616 ++wrote 4096/4096 bytes at offset 815616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819712 ++wrote 4096/4096 bytes at offset 819712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823808 ++wrote 4096/4096 bytes at offset 823808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827904 ++wrote 4096/4096 bytes at offset 827904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 832000 ++wrote 4096/4096 bytes at offset 832000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 836096 ++wrote 4096/4096 bytes at offset 836096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 840192 ++wrote 4096/4096 bytes at offset 840192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 844288 ++wrote 4096/4096 bytes at offset 844288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 848384 ++wrote 4096/4096 bytes at offset 848384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 852480 ++wrote 4096/4096 bytes at offset 852480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856576 ++wrote 4096/4096 bytes at offset 856576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860672 ++wrote 4096/4096 bytes at offset 860672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864768 ++wrote 4096/4096 bytes at offset 864768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868864 ++wrote 4096/4096 bytes at offset 868864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872960 ++wrote 4096/4096 bytes at offset 872960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 877056 ++wrote 4096/4096 bytes at offset 877056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 881152 ++wrote 4096/4096 bytes at offset 881152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 885248 ++wrote 4096/4096 bytes at offset 885248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 889344 ++wrote 4096/4096 bytes at offset 889344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 893440 ++wrote 4096/4096 bytes at offset 893440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897536 ++wrote 4096/4096 bytes at offset 897536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901632 ++wrote 4096/4096 bytes at offset 901632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905728 ++wrote 4096/4096 bytes at offset 905728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909824 ++wrote 4096/4096 bytes at offset 909824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913920 ++wrote 4096/4096 bytes at offset 913920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 918016 ++wrote 4096/4096 bytes at offset 918016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 922112 ++wrote 4096/4096 bytes at offset 922112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 926208 ++wrote 4096/4096 bytes at offset 926208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 930304 ++wrote 4096/4096 bytes at offset 930304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 934400 ++wrote 4096/4096 bytes at offset 934400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 938496 ++wrote 4096/4096 bytes at offset 938496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942592 ++wrote 4096/4096 bytes at offset 942592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946688 ++wrote 4096/4096 bytes at offset 946688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950784 ++wrote 4096/4096 bytes at offset 950784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954880 ++wrote 4096/4096 bytes at offset 954880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958976 ++wrote 4096/4096 bytes at offset 958976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 963072 ++wrote 4096/4096 bytes at offset 963072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 967168 ++wrote 4096/4096 bytes at offset 967168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 971264 ++wrote 4096/4096 bytes at offset 971264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 975360 ++wrote 4096/4096 bytes at offset 975360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 979456 ++wrote 4096/4096 bytes at offset 979456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983552 ++wrote 4096/4096 bytes at offset 983552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987648 ++wrote 4096/4096 bytes at offset 987648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991744 ++wrote 4096/4096 bytes at offset 991744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995840 ++wrote 4096/4096 bytes at offset 995840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999936 ++wrote 4096/4096 bytes at offset 999936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1004032 ++wrote 4096/4096 bytes at offset 1004032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1008128 ++wrote 4096/4096 bytes at offset 1008128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1012224 ++wrote 4096/4096 bytes at offset 1012224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1016320 ++wrote 4096/4096 bytes at offset 1016320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1020416 ++wrote 4096/4096 bytes at offset 1020416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024512 ++wrote 4096/4096 bytes at offset 1024512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028608 ++wrote 4096/4096 bytes at offset 1028608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032704 ++wrote 4096/4096 bytes at offset 1032704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036800 ++wrote 4096/4096 bytes at offset 1036800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040896 ++wrote 4096/4096 bytes at offset 1040896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044992 ++wrote 4096/4096 bytes at offset 1044992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 2048/2048 bytes at offset 1051136 ++=== IO: pattern 5 ++wrote 2048/2048 bytes at offset 1051136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1055232 ++wrote 2048/2048 bytes at offset 1055232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1059328 ++wrote 2048/2048 bytes at offset 1059328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1063424 ++wrote 2048/2048 bytes at offset 1063424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067520 ++wrote 2048/2048 bytes at offset 1067520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071616 ++wrote 2048/2048 bytes at offset 1071616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075712 ++wrote 2048/2048 bytes at offset 1075712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079808 ++wrote 2048/2048 bytes at offset 1079808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083904 ++wrote 2048/2048 bytes at offset 1083904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1088000 ++wrote 2048/2048 bytes at offset 1088000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1092096 ++wrote 2048/2048 bytes at offset 1092096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1096192 ++wrote 2048/2048 bytes at offset 1096192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1100288 ++wrote 2048/2048 bytes at offset 1100288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1104384 ++wrote 2048/2048 bytes at offset 1104384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1108480 ++wrote 2048/2048 bytes at offset 1108480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112576 ++wrote 2048/2048 bytes at offset 1112576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116672 ++wrote 2048/2048 bytes at offset 1116672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120768 ++wrote 2048/2048 bytes at offset 1120768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124864 ++wrote 2048/2048 bytes at offset 1124864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128960 ++wrote 2048/2048 bytes at offset 1128960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1133056 ++wrote 2048/2048 bytes at offset 1133056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1137152 ++wrote 2048/2048 bytes at offset 1137152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1141248 ++wrote 2048/2048 bytes at offset 1141248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1145344 ++wrote 2048/2048 bytes at offset 1145344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1149440 ++wrote 2048/2048 bytes at offset 1149440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153536 ++wrote 2048/2048 bytes at offset 1153536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157632 ++wrote 2048/2048 bytes at offset 1157632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161728 ++wrote 2048/2048 bytes at offset 1161728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165824 ++wrote 2048/2048 bytes at offset 1165824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169920 ++wrote 2048/2048 bytes at offset 1169920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1174016 ++wrote 2048/2048 bytes at offset 1174016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1178112 ++wrote 2048/2048 bytes at offset 1178112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1182208 ++wrote 2048/2048 bytes at offset 1182208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1186304 ++wrote 2048/2048 bytes at offset 1186304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1190400 ++wrote 2048/2048 bytes at offset 1190400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1194496 ++wrote 2048/2048 bytes at offset 1194496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198592 ++wrote 2048/2048 bytes at offset 1198592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202688 ++wrote 2048/2048 bytes at offset 1202688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206784 ++wrote 2048/2048 bytes at offset 1206784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210880 ++wrote 2048/2048 bytes at offset 1210880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214976 ++wrote 2048/2048 bytes at offset 1214976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1219072 ++wrote 2048/2048 bytes at offset 1219072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1223168 ++wrote 2048/2048 bytes at offset 1223168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1227264 ++wrote 2048/2048 bytes at offset 1227264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1231360 ++wrote 2048/2048 bytes at offset 1231360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1235456 ++wrote 2048/2048 bytes at offset 1235456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239552 ++wrote 2048/2048 bytes at offset 1239552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243648 ++wrote 2048/2048 bytes at offset 1243648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247744 ++wrote 2048/2048 bytes at offset 1247744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251840 ++wrote 2048/2048 bytes at offset 1251840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255936 ++wrote 2048/2048 bytes at offset 1255936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1260032 ++wrote 2048/2048 bytes at offset 1260032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1264128 ++wrote 2048/2048 bytes at offset 1264128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1268224 ++wrote 2048/2048 bytes at offset 1268224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1272320 ++wrote 2048/2048 bytes at offset 1272320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1276416 ++wrote 2048/2048 bytes at offset 1276416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280512 ++wrote 2048/2048 bytes at offset 1280512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284608 ++wrote 2048/2048 bytes at offset 1284608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288704 ++wrote 2048/2048 bytes at offset 1288704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292800 ++wrote 2048/2048 bytes at offset 1292800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296896 ++wrote 2048/2048 bytes at offset 1296896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300992 ++wrote 2048/2048 bytes at offset 1300992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1305088 ++wrote 2048/2048 bytes at offset 1305088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1309184 ++wrote 2048/2048 bytes at offset 1309184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1313280 ++wrote 2048/2048 bytes at offset 1313280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1317376 ++wrote 2048/2048 bytes at offset 1317376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1321472 ++wrote 2048/2048 bytes at offset 1321472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325568 ++wrote 2048/2048 bytes at offset 1325568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329664 ++wrote 2048/2048 bytes at offset 1329664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333760 ++wrote 2048/2048 bytes at offset 1333760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337856 ++wrote 2048/2048 bytes at offset 1337856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341952 ++wrote 2048/2048 bytes at offset 1341952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1346048 ++wrote 2048/2048 bytes at offset 1346048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1350144 ++wrote 2048/2048 bytes at offset 1350144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1354240 ++wrote 2048/2048 bytes at offset 1354240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1358336 ++wrote 2048/2048 bytes at offset 1358336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1362432 ++wrote 2048/2048 bytes at offset 1362432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366528 ++wrote 2048/2048 bytes at offset 1366528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370624 ++wrote 2048/2048 bytes at offset 1370624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374720 ++wrote 2048/2048 bytes at offset 1374720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378816 ++wrote 2048/2048 bytes at offset 1378816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382912 ++wrote 2048/2048 bytes at offset 1382912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1387008 ++wrote 2048/2048 bytes at offset 1387008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1391104 ++wrote 2048/2048 bytes at offset 1391104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1395200 ++wrote 2048/2048 bytes at offset 1395200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1399296 ++wrote 2048/2048 bytes at offset 1399296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1403392 ++wrote 2048/2048 bytes at offset 1403392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1407488 ++wrote 2048/2048 bytes at offset 1407488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411584 ++wrote 2048/2048 bytes at offset 1411584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415680 ++wrote 2048/2048 bytes at offset 1415680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419776 ++wrote 2048/2048 bytes at offset 1419776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423872 ++wrote 2048/2048 bytes at offset 1423872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427968 ++wrote 2048/2048 bytes at offset 1427968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1432064 ++wrote 2048/2048 bytes at offset 1432064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1436160 ++wrote 2048/2048 bytes at offset 1436160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1440256 ++wrote 2048/2048 bytes at offset 1440256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1444352 ++wrote 2048/2048 bytes at offset 1444352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1448448 ++wrote 2048/2048 bytes at offset 1448448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452544 ++wrote 2048/2048 bytes at offset 1452544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456640 ++wrote 2048/2048 bytes at offset 1456640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460736 ++wrote 2048/2048 bytes at offset 1460736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464832 ++wrote 2048/2048 bytes at offset 1464832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468928 ++wrote 2048/2048 bytes at offset 1468928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1473024 ++wrote 2048/2048 bytes at offset 1473024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1477120 ++wrote 2048/2048 bytes at offset 1477120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1481216 ++wrote 2048/2048 bytes at offset 1481216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1485312 ++wrote 2048/2048 bytes at offset 1485312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1489408 ++wrote 2048/2048 bytes at offset 1489408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1493504 ++wrote 2048/2048 bytes at offset 1493504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497600 ++wrote 2048/2048 bytes at offset 1497600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501696 ++wrote 2048/2048 bytes at offset 1501696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505792 ++wrote 2048/2048 bytes at offset 1505792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509888 ++wrote 2048/2048 bytes at offset 1509888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513984 ++wrote 2048/2048 bytes at offset 1513984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1518080 ++wrote 2048/2048 bytes at offset 1518080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1522176 ++wrote 2048/2048 bytes at offset 1522176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1526272 ++wrote 2048/2048 bytes at offset 1526272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1530368 ++wrote 2048/2048 bytes at offset 1530368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1534464 ++wrote 2048/2048 bytes at offset 1534464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538560 ++wrote 2048/2048 bytes at offset 1538560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542656 ++wrote 2048/2048 bytes at offset 1542656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546752 ++wrote 2048/2048 bytes at offset 1546752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550848 ++wrote 2048/2048 bytes at offset 1550848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554944 ++wrote 2048/2048 bytes at offset 1554944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1559040 ++wrote 2048/2048 bytes at offset 1559040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1563136 ++wrote 2048/2048 bytes at offset 1563136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1567232 ++wrote 2048/2048 bytes at offset 1567232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1571328 ++wrote 2048/2048 bytes at offset 1571328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1575424 ++wrote 2048/2048 bytes at offset 1575424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579520 ++wrote 2048/2048 bytes at offset 1579520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583616 ++wrote 2048/2048 bytes at offset 1583616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587712 ++wrote 2048/2048 bytes at offset 1587712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591808 ++wrote 2048/2048 bytes at offset 1591808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595904 ++wrote 2048/2048 bytes at offset 1595904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1600000 ++wrote 2048/2048 bytes at offset 1600000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1604096 ++wrote 2048/2048 bytes at offset 1604096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1608192 ++wrote 2048/2048 bytes at offset 1608192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1612288 ++wrote 2048/2048 bytes at offset 1612288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1616384 ++wrote 2048/2048 bytes at offset 1616384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1620480 ++wrote 2048/2048 bytes at offset 1620480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624576 ++wrote 2048/2048 bytes at offset 1624576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628672 ++wrote 2048/2048 bytes at offset 1628672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632768 ++wrote 2048/2048 bytes at offset 1632768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636864 ++wrote 2048/2048 bytes at offset 1636864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640960 ++wrote 2048/2048 bytes at offset 1640960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1645056 ++wrote 2048/2048 bytes at offset 1645056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1649152 ++wrote 2048/2048 bytes at offset 1649152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1653248 ++wrote 2048/2048 bytes at offset 1653248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1657344 ++wrote 2048/2048 bytes at offset 1657344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1661440 ++wrote 2048/2048 bytes at offset 1661440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665536 ++wrote 2048/2048 bytes at offset 1665536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669632 ++wrote 2048/2048 bytes at offset 1669632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673728 ++wrote 2048/2048 bytes at offset 1673728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677824 ++wrote 2048/2048 bytes at offset 1677824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681920 ++wrote 2048/2048 bytes at offset 1681920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1686016 ++wrote 2048/2048 bytes at offset 1686016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1690112 ++wrote 2048/2048 bytes at offset 1690112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1694208 ++wrote 2048/2048 bytes at offset 1694208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1698304 ++wrote 2048/2048 bytes at offset 1698304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1702400 ++wrote 2048/2048 bytes at offset 1702400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1706496 ++wrote 2048/2048 bytes at offset 1706496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710592 ++wrote 2048/2048 bytes at offset 1710592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714688 ++wrote 2048/2048 bytes at offset 1714688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718784 ++wrote 2048/2048 bytes at offset 1718784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722880 ++wrote 2048/2048 bytes at offset 1722880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726976 ++wrote 2048/2048 bytes at offset 1726976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1731072 ++wrote 2048/2048 bytes at offset 1731072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1735168 ++wrote 2048/2048 bytes at offset 1735168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1739264 ++wrote 2048/2048 bytes at offset 1739264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1743360 ++wrote 2048/2048 bytes at offset 1743360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1747456 ++wrote 2048/2048 bytes at offset 1747456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751552 ++wrote 2048/2048 bytes at offset 1751552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755648 ++wrote 2048/2048 bytes at offset 1755648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759744 ++wrote 2048/2048 bytes at offset 1759744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763840 ++wrote 2048/2048 bytes at offset 1763840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767936 ++wrote 2048/2048 bytes at offset 1767936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1772032 ++wrote 2048/2048 bytes at offset 1772032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1776128 ++wrote 2048/2048 bytes at offset 1776128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1780224 ++wrote 2048/2048 bytes at offset 1780224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1784320 ++wrote 2048/2048 bytes at offset 1784320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1788416 ++wrote 2048/2048 bytes at offset 1788416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792512 ++wrote 2048/2048 bytes at offset 1792512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796608 ++wrote 2048/2048 bytes at offset 1796608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800704 ++wrote 2048/2048 bytes at offset 1800704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804800 ++wrote 2048/2048 bytes at offset 1804800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808896 ++wrote 2048/2048 bytes at offset 1808896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812992 ++wrote 2048/2048 bytes at offset 1812992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1817088 ++wrote 2048/2048 bytes at offset 1817088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1821184 ++wrote 2048/2048 bytes at offset 1821184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1825280 ++wrote 2048/2048 bytes at offset 1825280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1829376 ++wrote 2048/2048 bytes at offset 1829376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1833472 ++wrote 2048/2048 bytes at offset 1833472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837568 ++wrote 2048/2048 bytes at offset 1837568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841664 ++wrote 2048/2048 bytes at offset 1841664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845760 ++wrote 2048/2048 bytes at offset 1845760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849856 ++wrote 2048/2048 bytes at offset 1849856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853952 ++wrote 2048/2048 bytes at offset 1853952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1858048 ++wrote 2048/2048 bytes at offset 1858048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1862144 ++wrote 2048/2048 bytes at offset 1862144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1866240 ++wrote 2048/2048 bytes at offset 1866240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1870336 ++wrote 2048/2048 bytes at offset 1870336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1874432 ++wrote 2048/2048 bytes at offset 1874432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878528 ++wrote 2048/2048 bytes at offset 1878528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882624 ++wrote 2048/2048 bytes at offset 1882624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886720 ++wrote 2048/2048 bytes at offset 1886720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890816 ++wrote 2048/2048 bytes at offset 1890816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894912 ++wrote 2048/2048 bytes at offset 1894912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1899008 ++wrote 2048/2048 bytes at offset 1899008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1903104 ++wrote 2048/2048 bytes at offset 1903104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1907200 ++wrote 2048/2048 bytes at offset 1907200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1911296 ++wrote 2048/2048 bytes at offset 1911296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1915392 ++wrote 2048/2048 bytes at offset 1915392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1919488 ++wrote 2048/2048 bytes at offset 1919488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923584 ++wrote 2048/2048 bytes at offset 1923584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927680 ++wrote 2048/2048 bytes at offset 1927680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931776 ++wrote 2048/2048 bytes at offset 1931776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935872 ++wrote 2048/2048 bytes at offset 1935872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939968 ++wrote 2048/2048 bytes at offset 1939968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1944064 ++wrote 2048/2048 bytes at offset 1944064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1948160 ++wrote 2048/2048 bytes at offset 1948160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1952256 ++wrote 2048/2048 bytes at offset 1952256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1956352 ++wrote 2048/2048 bytes at offset 1956352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1960448 ++wrote 2048/2048 bytes at offset 1960448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964544 ++wrote 2048/2048 bytes at offset 1964544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968640 ++wrote 2048/2048 bytes at offset 1968640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972736 ++wrote 2048/2048 bytes at offset 1972736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976832 ++wrote 2048/2048 bytes at offset 1976832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980928 ++wrote 2048/2048 bytes at offset 1980928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1985024 ++wrote 2048/2048 bytes at offset 1985024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1989120 ++wrote 2048/2048 bytes at offset 1989120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1993216 ++wrote 2048/2048 bytes at offset 1993216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1997312 ++wrote 2048/2048 bytes at offset 1997312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2001408 ++wrote 2048/2048 bytes at offset 2001408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2005504 ++wrote 2048/2048 bytes at offset 2005504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009600 ++wrote 2048/2048 bytes at offset 2009600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013696 ++wrote 2048/2048 bytes at offset 2013696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017792 ++wrote 2048/2048 bytes at offset 2017792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021888 ++wrote 2048/2048 bytes at offset 2021888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025984 ++wrote 2048/2048 bytes at offset 2025984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2030080 ++wrote 2048/2048 bytes at offset 2030080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2034176 ++wrote 2048/2048 bytes at offset 2034176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2038272 ++wrote 2048/2048 bytes at offset 2038272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2042368 ++wrote 2048/2048 bytes at offset 2042368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2046464 ++wrote 2048/2048 bytes at offset 2046464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050560 ++wrote 2048/2048 bytes at offset 2050560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054656 ++wrote 2048/2048 bytes at offset 2054656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058752 ++wrote 2048/2048 bytes at offset 2058752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062848 ++wrote 2048/2048 bytes at offset 2062848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066944 ++wrote 2048/2048 bytes at offset 2066944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2071040 ++wrote 2048/2048 bytes at offset 2071040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2075136 ++wrote 2048/2048 bytes at offset 2075136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2079232 ++wrote 2048/2048 bytes at offset 2079232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2083328 ++wrote 2048/2048 bytes at offset 2083328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2087424 ++wrote 2048/2048 bytes at offset 2087424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091520 ++wrote 2048/2048 bytes at offset 2091520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095616 ++wrote 2048/2048 bytes at offset 2095616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 2048/2048 bytes at offset 2097664 ++=== IO: pattern 1 ++wrote 2048/2048 bytes at offset 2097664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101760 ++wrote 2048/2048 bytes at offset 2101760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105856 ++wrote 2048/2048 bytes at offset 2105856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109952 ++wrote 2048/2048 bytes at offset 2109952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2114048 ++wrote 2048/2048 bytes at offset 2114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2118144 ++wrote 2048/2048 bytes at offset 2118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2122240 ++wrote 2048/2048 bytes at offset 2122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2126336 ++wrote 2048/2048 bytes at offset 2126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2130432 ++wrote 2048/2048 bytes at offset 2130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134528 ++wrote 2048/2048 bytes at offset 2134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138624 ++wrote 2048/2048 bytes at offset 2138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142720 ++wrote 2048/2048 bytes at offset 2142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146816 ++wrote 2048/2048 bytes at offset 2146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150912 ++wrote 2048/2048 bytes at offset 2150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2155008 ++wrote 2048/2048 bytes at offset 2155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2159104 ++wrote 2048/2048 bytes at offset 2159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2163200 ++wrote 2048/2048 bytes at offset 2163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2167296 ++wrote 2048/2048 bytes at offset 2167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2171392 ++wrote 2048/2048 bytes at offset 2171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2175488 ++wrote 2048/2048 bytes at offset 2175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179584 ++wrote 2048/2048 bytes at offset 2179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183680 ++wrote 2048/2048 bytes at offset 2183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187776 ++wrote 2048/2048 bytes at offset 2187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191872 ++wrote 2048/2048 bytes at offset 2191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195968 ++wrote 2048/2048 bytes at offset 2195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2200064 ++wrote 2048/2048 bytes at offset 2200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2204160 ++wrote 2048/2048 bytes at offset 2204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2208256 ++wrote 2048/2048 bytes at offset 2208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2212352 ++wrote 2048/2048 bytes at offset 2212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2216448 ++wrote 2048/2048 bytes at offset 2216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220544 ++wrote 2048/2048 bytes at offset 2220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224640 ++wrote 2048/2048 bytes at offset 2224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228736 ++wrote 2048/2048 bytes at offset 2228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232832 ++wrote 2048/2048 bytes at offset 2232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236928 ++wrote 2048/2048 bytes at offset 2236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2241024 ++wrote 2048/2048 bytes at offset 2241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2245120 ++wrote 2048/2048 bytes at offset 2245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2249216 ++wrote 2048/2048 bytes at offset 2249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2253312 ++wrote 2048/2048 bytes at offset 2253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2257408 ++wrote 2048/2048 bytes at offset 2257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2261504 ++wrote 2048/2048 bytes at offset 2261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265600 ++wrote 2048/2048 bytes at offset 2265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269696 ++wrote 2048/2048 bytes at offset 2269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273792 ++wrote 2048/2048 bytes at offset 2273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277888 ++wrote 2048/2048 bytes at offset 2277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281984 ++wrote 2048/2048 bytes at offset 2281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2286080 ++wrote 2048/2048 bytes at offset 2286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2290176 ++wrote 2048/2048 bytes at offset 2290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2294272 ++wrote 2048/2048 bytes at offset 2294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2298368 ++wrote 2048/2048 bytes at offset 2298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2302464 ++wrote 2048/2048 bytes at offset 2302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306560 ++wrote 2048/2048 bytes at offset 2306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310656 ++wrote 2048/2048 bytes at offset 2310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314752 ++wrote 2048/2048 bytes at offset 2314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318848 ++wrote 2048/2048 bytes at offset 2318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322944 ++wrote 2048/2048 bytes at offset 2322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2327040 ++wrote 2048/2048 bytes at offset 2327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2331136 ++wrote 2048/2048 bytes at offset 2331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2335232 ++wrote 2048/2048 bytes at offset 2335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2339328 ++wrote 2048/2048 bytes at offset 2339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2343424 ++wrote 2048/2048 bytes at offset 2343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347520 ++wrote 2048/2048 bytes at offset 2347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351616 ++wrote 2048/2048 bytes at offset 2351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355712 ++wrote 2048/2048 bytes at offset 2355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359808 ++wrote 2048/2048 bytes at offset 2359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363904 ++wrote 2048/2048 bytes at offset 2363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2368000 ++wrote 2048/2048 bytes at offset 2368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2372096 ++wrote 2048/2048 bytes at offset 2372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2376192 ++wrote 2048/2048 bytes at offset 2376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2380288 ++wrote 2048/2048 bytes at offset 2380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2384384 ++wrote 2048/2048 bytes at offset 2384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2388480 ++wrote 2048/2048 bytes at offset 2388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392576 ++wrote 2048/2048 bytes at offset 2392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396672 ++wrote 2048/2048 bytes at offset 2396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400768 ++wrote 2048/2048 bytes at offset 2400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404864 ++wrote 2048/2048 bytes at offset 2404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408960 ++wrote 2048/2048 bytes at offset 2408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2413056 ++wrote 2048/2048 bytes at offset 2413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2417152 ++wrote 2048/2048 bytes at offset 2417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2421248 ++wrote 2048/2048 bytes at offset 2421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2425344 ++wrote 2048/2048 bytes at offset 2425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2429440 ++wrote 2048/2048 bytes at offset 2429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433536 ++wrote 2048/2048 bytes at offset 2433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437632 ++wrote 2048/2048 bytes at offset 2437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441728 ++wrote 2048/2048 bytes at offset 2441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445824 ++wrote 2048/2048 bytes at offset 2445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449920 ++wrote 2048/2048 bytes at offset 2449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2454016 ++wrote 2048/2048 bytes at offset 2454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2458112 ++wrote 2048/2048 bytes at offset 2458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2462208 ++wrote 2048/2048 bytes at offset 2462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2466304 ++wrote 2048/2048 bytes at offset 2466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2470400 ++wrote 2048/2048 bytes at offset 2470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2474496 ++wrote 2048/2048 bytes at offset 2474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478592 ++wrote 2048/2048 bytes at offset 2478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482688 ++wrote 2048/2048 bytes at offset 2482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486784 ++wrote 2048/2048 bytes at offset 2486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490880 ++wrote 2048/2048 bytes at offset 2490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494976 ++wrote 2048/2048 bytes at offset 2494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2499072 ++wrote 2048/2048 bytes at offset 2499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2503168 ++wrote 2048/2048 bytes at offset 2503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2507264 ++wrote 2048/2048 bytes at offset 2507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2511360 ++wrote 2048/2048 bytes at offset 2511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2515456 ++wrote 2048/2048 bytes at offset 2515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519552 ++wrote 2048/2048 bytes at offset 2519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523648 ++wrote 2048/2048 bytes at offset 2523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527744 ++wrote 2048/2048 bytes at offset 2527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531840 ++wrote 2048/2048 bytes at offset 2531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535936 ++wrote 2048/2048 bytes at offset 2535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2540032 ++wrote 2048/2048 bytes at offset 2540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2544128 ++wrote 2048/2048 bytes at offset 2544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2548224 ++wrote 2048/2048 bytes at offset 2548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2552320 ++wrote 2048/2048 bytes at offset 2552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2556416 ++wrote 2048/2048 bytes at offset 2556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560512 ++wrote 2048/2048 bytes at offset 2560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564608 ++wrote 2048/2048 bytes at offset 2564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568704 ++wrote 2048/2048 bytes at offset 2568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572800 ++wrote 2048/2048 bytes at offset 2572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576896 ++wrote 2048/2048 bytes at offset 2576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580992 ++wrote 2048/2048 bytes at offset 2580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2585088 ++wrote 2048/2048 bytes at offset 2585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2589184 ++wrote 2048/2048 bytes at offset 2589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2593280 ++wrote 2048/2048 bytes at offset 2593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2597376 ++wrote 2048/2048 bytes at offset 2597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2601472 ++wrote 2048/2048 bytes at offset 2601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605568 ++wrote 2048/2048 bytes at offset 2605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609664 ++wrote 2048/2048 bytes at offset 2609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613760 ++wrote 2048/2048 bytes at offset 2613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617856 ++wrote 2048/2048 bytes at offset 2617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621952 ++wrote 2048/2048 bytes at offset 2621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2626048 ++wrote 2048/2048 bytes at offset 2626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2630144 ++wrote 2048/2048 bytes at offset 2630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2634240 ++wrote 2048/2048 bytes at offset 2634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2638336 ++wrote 2048/2048 bytes at offset 2638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2642432 ++wrote 2048/2048 bytes at offset 2642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646528 ++wrote 2048/2048 bytes at offset 2646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650624 ++wrote 2048/2048 bytes at offset 2650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654720 ++wrote 2048/2048 bytes at offset 2654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658816 ++wrote 2048/2048 bytes at offset 2658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662912 ++wrote 2048/2048 bytes at offset 2662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2667008 ++wrote 2048/2048 bytes at offset 2667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2671104 ++wrote 2048/2048 bytes at offset 2671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2675200 ++wrote 2048/2048 bytes at offset 2675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2679296 ++wrote 2048/2048 bytes at offset 2679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2683392 ++wrote 2048/2048 bytes at offset 2683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2687488 ++wrote 2048/2048 bytes at offset 2687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691584 ++wrote 2048/2048 bytes at offset 2691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695680 ++wrote 2048/2048 bytes at offset 2695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699776 ++wrote 2048/2048 bytes at offset 2699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703872 ++wrote 2048/2048 bytes at offset 2703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707968 ++wrote 2048/2048 bytes at offset 2707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2712064 ++wrote 2048/2048 bytes at offset 2712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2716160 ++wrote 2048/2048 bytes at offset 2716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2720256 ++wrote 2048/2048 bytes at offset 2720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2724352 ++wrote 2048/2048 bytes at offset 2724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2728448 ++wrote 2048/2048 bytes at offset 2728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732544 ++wrote 2048/2048 bytes at offset 2732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736640 ++wrote 2048/2048 bytes at offset 2736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740736 ++wrote 2048/2048 bytes at offset 2740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744832 ++wrote 2048/2048 bytes at offset 2744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748928 ++wrote 2048/2048 bytes at offset 2748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2753024 ++wrote 2048/2048 bytes at offset 2753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2757120 ++wrote 2048/2048 bytes at offset 2757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2761216 ++wrote 2048/2048 bytes at offset 2761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2765312 ++wrote 2048/2048 bytes at offset 2765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2769408 ++wrote 2048/2048 bytes at offset 2769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2773504 ++wrote 2048/2048 bytes at offset 2773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777600 ++wrote 2048/2048 bytes at offset 2777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781696 ++wrote 2048/2048 bytes at offset 2781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785792 ++wrote 2048/2048 bytes at offset 2785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789888 ++wrote 2048/2048 bytes at offset 2789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793984 ++wrote 2048/2048 bytes at offset 2793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2798080 ++wrote 2048/2048 bytes at offset 2798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2802176 ++wrote 2048/2048 bytes at offset 2802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2806272 ++wrote 2048/2048 bytes at offset 2806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2810368 ++wrote 2048/2048 bytes at offset 2810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2814464 ++wrote 2048/2048 bytes at offset 2814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818560 ++wrote 2048/2048 bytes at offset 2818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822656 ++wrote 2048/2048 bytes at offset 2822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826752 ++wrote 2048/2048 bytes at offset 2826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830848 ++wrote 2048/2048 bytes at offset 2830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834944 ++wrote 2048/2048 bytes at offset 2834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2839040 ++wrote 2048/2048 bytes at offset 2839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2843136 ++wrote 2048/2048 bytes at offset 2843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2847232 ++wrote 2048/2048 bytes at offset 2847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2851328 ++wrote 2048/2048 bytes at offset 2851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2855424 ++wrote 2048/2048 bytes at offset 2855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859520 ++wrote 2048/2048 bytes at offset 2859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863616 ++wrote 2048/2048 bytes at offset 2863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867712 ++wrote 2048/2048 bytes at offset 2867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871808 ++wrote 2048/2048 bytes at offset 2871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875904 ++wrote 2048/2048 bytes at offset 2875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2880000 ++wrote 2048/2048 bytes at offset 2880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2884096 ++wrote 2048/2048 bytes at offset 2884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2888192 ++wrote 2048/2048 bytes at offset 2888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2892288 ++wrote 2048/2048 bytes at offset 2892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2896384 ++wrote 2048/2048 bytes at offset 2896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2900480 ++wrote 2048/2048 bytes at offset 2900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904576 ++wrote 2048/2048 bytes at offset 2904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908672 ++wrote 2048/2048 bytes at offset 2908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912768 ++wrote 2048/2048 bytes at offset 2912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916864 ++wrote 2048/2048 bytes at offset 2916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920960 ++wrote 2048/2048 bytes at offset 2920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2925056 ++wrote 2048/2048 bytes at offset 2925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2929152 ++wrote 2048/2048 bytes at offset 2929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2933248 ++wrote 2048/2048 bytes at offset 2933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2937344 ++wrote 2048/2048 bytes at offset 2937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2941440 ++wrote 2048/2048 bytes at offset 2941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945536 ++wrote 2048/2048 bytes at offset 2945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949632 ++wrote 2048/2048 bytes at offset 2949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953728 ++wrote 2048/2048 bytes at offset 2953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957824 ++wrote 2048/2048 bytes at offset 2957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961920 ++wrote 2048/2048 bytes at offset 2961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2966016 ++wrote 2048/2048 bytes at offset 2966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2970112 ++wrote 2048/2048 bytes at offset 2970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2974208 ++wrote 2048/2048 bytes at offset 2974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2978304 ++wrote 2048/2048 bytes at offset 2978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2982400 ++wrote 2048/2048 bytes at offset 2982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2986496 ++wrote 2048/2048 bytes at offset 2986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990592 ++wrote 2048/2048 bytes at offset 2990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994688 ++wrote 2048/2048 bytes at offset 2994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998784 ++wrote 2048/2048 bytes at offset 2998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002880 ++wrote 2048/2048 bytes at offset 3002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006976 ++wrote 2048/2048 bytes at offset 3006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3011072 ++wrote 2048/2048 bytes at offset 3011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3015168 ++wrote 2048/2048 bytes at offset 3015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3019264 ++wrote 2048/2048 bytes at offset 3019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3023360 ++wrote 2048/2048 bytes at offset 3023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3027456 ++wrote 2048/2048 bytes at offset 3027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031552 ++wrote 2048/2048 bytes at offset 3031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035648 ++wrote 2048/2048 bytes at offset 3035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039744 ++wrote 2048/2048 bytes at offset 3039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043840 ++wrote 2048/2048 bytes at offset 3043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047936 ++wrote 2048/2048 bytes at offset 3047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3052032 ++wrote 2048/2048 bytes at offset 3052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3056128 ++wrote 2048/2048 bytes at offset 3056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3060224 ++wrote 2048/2048 bytes at offset 3060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3064320 ++wrote 2048/2048 bytes at offset 3064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3068416 ++wrote 2048/2048 bytes at offset 3068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072512 ++wrote 2048/2048 bytes at offset 3072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076608 ++wrote 2048/2048 bytes at offset 3076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080704 ++wrote 2048/2048 bytes at offset 3080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084800 ++wrote 2048/2048 bytes at offset 3084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088896 ++wrote 2048/2048 bytes at offset 3088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092992 ++wrote 2048/2048 bytes at offset 3092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3097088 ++wrote 2048/2048 bytes at offset 3097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3101184 ++wrote 2048/2048 bytes at offset 3101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3105280 ++wrote 2048/2048 bytes at offset 3105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3109376 ++wrote 2048/2048 bytes at offset 3109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3113472 ++wrote 2048/2048 bytes at offset 3113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117568 ++wrote 2048/2048 bytes at offset 3117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121664 ++wrote 2048/2048 bytes at offset 3121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125760 ++wrote 2048/2048 bytes at offset 3125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129856 ++wrote 2048/2048 bytes at offset 3129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133952 ++wrote 2048/2048 bytes at offset 3133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3138048 ++wrote 2048/2048 bytes at offset 3138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3142144 ++wrote 2048/2048 bytes at offset 3142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> wrote 2048/2048 bytes at offset 3147264 ++=== IO: pattern 3 ++wrote 2048/2048 bytes at offset 3147264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3151360 ++wrote 2048/2048 bytes at offset 3151360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3155456 ++wrote 2048/2048 bytes at offset 3155456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159552 ++wrote 2048/2048 bytes at offset 3159552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163648 ++wrote 2048/2048 bytes at offset 3163648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167744 ++wrote 2048/2048 bytes at offset 3167744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171840 ++wrote 2048/2048 bytes at offset 3171840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175936 ++wrote 2048/2048 bytes at offset 3175936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3180032 ++wrote 2048/2048 bytes at offset 3180032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3184128 ++wrote 2048/2048 bytes at offset 3184128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3188224 ++wrote 2048/2048 bytes at offset 3188224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3192320 ++wrote 2048/2048 bytes at offset 3192320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3196416 ++wrote 2048/2048 bytes at offset 3196416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200512 ++wrote 2048/2048 bytes at offset 3200512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204608 ++wrote 2048/2048 bytes at offset 3204608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208704 ++wrote 2048/2048 bytes at offset 3208704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212800 ++wrote 2048/2048 bytes at offset 3212800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216896 ++wrote 2048/2048 bytes at offset 3216896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220992 ++wrote 2048/2048 bytes at offset 3220992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3225088 ++wrote 2048/2048 bytes at offset 3225088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3229184 ++wrote 2048/2048 bytes at offset 3229184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3233280 ++wrote 2048/2048 bytes at offset 3233280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3237376 ++wrote 2048/2048 bytes at offset 3237376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3241472 ++wrote 2048/2048 bytes at offset 3241472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245568 ++wrote 2048/2048 bytes at offset 3245568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249664 ++wrote 2048/2048 bytes at offset 3249664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253760 ++wrote 2048/2048 bytes at offset 3253760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257856 ++wrote 2048/2048 bytes at offset 3257856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261952 ++wrote 2048/2048 bytes at offset 3261952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3266048 ++wrote 2048/2048 bytes at offset 3266048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3270144 ++wrote 2048/2048 bytes at offset 3270144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3274240 ++wrote 2048/2048 bytes at offset 3274240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3278336 ++wrote 2048/2048 bytes at offset 3278336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3282432 ++wrote 2048/2048 bytes at offset 3282432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286528 ++wrote 2048/2048 bytes at offset 3286528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290624 ++wrote 2048/2048 bytes at offset 3290624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294720 ++wrote 2048/2048 bytes at offset 3294720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298816 ++wrote 2048/2048 bytes at offset 3298816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302912 ++wrote 2048/2048 bytes at offset 3302912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3307008 ++wrote 2048/2048 bytes at offset 3307008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3311104 ++wrote 2048/2048 bytes at offset 3311104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3315200 ++wrote 2048/2048 bytes at offset 3315200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3319296 ++wrote 2048/2048 bytes at offset 3319296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3323392 ++wrote 2048/2048 bytes at offset 3323392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3327488 ++wrote 2048/2048 bytes at offset 3327488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331584 ++wrote 2048/2048 bytes at offset 3331584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335680 ++wrote 2048/2048 bytes at offset 3335680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339776 ++wrote 2048/2048 bytes at offset 3339776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343872 ++wrote 2048/2048 bytes at offset 3343872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347968 ++wrote 2048/2048 bytes at offset 3347968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3352064 ++wrote 2048/2048 bytes at offset 3352064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3356160 ++wrote 2048/2048 bytes at offset 3356160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3360256 ++wrote 2048/2048 bytes at offset 3360256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3364352 ++wrote 2048/2048 bytes at offset 3364352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3368448 ++wrote 2048/2048 bytes at offset 3368448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372544 ++wrote 2048/2048 bytes at offset 3372544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376640 ++wrote 2048/2048 bytes at offset 3376640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380736 ++wrote 2048/2048 bytes at offset 3380736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384832 ++wrote 2048/2048 bytes at offset 3384832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388928 ++wrote 2048/2048 bytes at offset 3388928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3393024 ++wrote 2048/2048 bytes at offset 3393024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3397120 ++wrote 2048/2048 bytes at offset 3397120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3401216 ++wrote 2048/2048 bytes at offset 3401216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3405312 ++wrote 2048/2048 bytes at offset 3405312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3409408 ++wrote 2048/2048 bytes at offset 3409408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3413504 ++wrote 2048/2048 bytes at offset 3413504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417600 ++wrote 2048/2048 bytes at offset 3417600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421696 ++wrote 2048/2048 bytes at offset 3421696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425792 ++wrote 2048/2048 bytes at offset 3425792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429888 ++wrote 2048/2048 bytes at offset 3429888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433984 ++wrote 2048/2048 bytes at offset 3433984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3438080 ++wrote 2048/2048 bytes at offset 3438080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3442176 ++wrote 2048/2048 bytes at offset 3442176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3446272 ++wrote 2048/2048 bytes at offset 3446272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3450368 ++wrote 2048/2048 bytes at offset 3450368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3454464 ++wrote 2048/2048 bytes at offset 3454464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458560 ++wrote 2048/2048 bytes at offset 3458560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462656 ++wrote 2048/2048 bytes at offset 3462656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466752 ++wrote 2048/2048 bytes at offset 3466752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470848 ++wrote 2048/2048 bytes at offset 3470848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474944 ++wrote 2048/2048 bytes at offset 3474944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3479040 ++wrote 2048/2048 bytes at offset 3479040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3483136 ++wrote 2048/2048 bytes at offset 3483136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3487232 ++wrote 2048/2048 bytes at offset 3487232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3491328 ++wrote 2048/2048 bytes at offset 3491328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3495424 ++wrote 2048/2048 bytes at offset 3495424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499520 ++wrote 2048/2048 bytes at offset 3499520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503616 ++wrote 2048/2048 bytes at offset 3503616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507712 ++wrote 2048/2048 bytes at offset 3507712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511808 ++wrote 2048/2048 bytes at offset 3511808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515904 ++wrote 2048/2048 bytes at offset 3515904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3520000 ++wrote 2048/2048 bytes at offset 3520000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3524096 ++wrote 2048/2048 bytes at offset 3524096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3528192 ++wrote 2048/2048 bytes at offset 3528192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3532288 ++wrote 2048/2048 bytes at offset 3532288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3536384 ++wrote 2048/2048 bytes at offset 3536384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3540480 ++wrote 2048/2048 bytes at offset 3540480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544576 ++wrote 2048/2048 bytes at offset 3544576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548672 ++wrote 2048/2048 bytes at offset 3548672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552768 ++wrote 2048/2048 bytes at offset 3552768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556864 ++wrote 2048/2048 bytes at offset 3556864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560960 ++wrote 2048/2048 bytes at offset 3560960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3565056 ++wrote 2048/2048 bytes at offset 3565056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3569152 ++wrote 2048/2048 bytes at offset 3569152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3573248 ++wrote 2048/2048 bytes at offset 3573248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3577344 ++wrote 2048/2048 bytes at offset 3577344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3581440 ++wrote 2048/2048 bytes at offset 3581440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585536 ++wrote 2048/2048 bytes at offset 3585536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589632 ++wrote 2048/2048 bytes at offset 3589632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593728 ++wrote 2048/2048 bytes at offset 3593728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597824 ++wrote 2048/2048 bytes at offset 3597824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601920 ++wrote 2048/2048 bytes at offset 3601920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3606016 ++wrote 2048/2048 bytes at offset 3606016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3610112 ++wrote 2048/2048 bytes at offset 3610112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3614208 ++wrote 2048/2048 bytes at offset 3614208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3618304 ++wrote 2048/2048 bytes at offset 3618304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3622400 ++wrote 2048/2048 bytes at offset 3622400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3626496 ++wrote 2048/2048 bytes at offset 3626496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630592 ++wrote 2048/2048 bytes at offset 3630592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634688 ++wrote 2048/2048 bytes at offset 3634688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638784 ++wrote 2048/2048 bytes at offset 3638784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642880 ++wrote 2048/2048 bytes at offset 3642880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646976 ++wrote 2048/2048 bytes at offset 3646976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3651072 ++wrote 2048/2048 bytes at offset 3651072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3655168 ++wrote 2048/2048 bytes at offset 3655168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3659264 ++wrote 2048/2048 bytes at offset 3659264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3663360 ++wrote 2048/2048 bytes at offset 3663360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3667456 ++wrote 2048/2048 bytes at offset 3667456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671552 ++wrote 2048/2048 bytes at offset 3671552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675648 ++wrote 2048/2048 bytes at offset 3675648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679744 ++wrote 2048/2048 bytes at offset 3679744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683840 ++wrote 2048/2048 bytes at offset 3683840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687936 ++wrote 2048/2048 bytes at offset 3687936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3692032 ++wrote 2048/2048 bytes at offset 3692032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3696128 ++wrote 2048/2048 bytes at offset 3696128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3700224 ++wrote 2048/2048 bytes at offset 3700224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3704320 ++wrote 2048/2048 bytes at offset 3704320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3708416 ++wrote 2048/2048 bytes at offset 3708416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712512 ++wrote 2048/2048 bytes at offset 3712512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716608 ++wrote 2048/2048 bytes at offset 3716608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720704 ++wrote 2048/2048 bytes at offset 3720704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724800 ++wrote 2048/2048 bytes at offset 3724800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728896 ++wrote 2048/2048 bytes at offset 3728896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732992 ++wrote 2048/2048 bytes at offset 3732992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3737088 ++wrote 2048/2048 bytes at offset 3737088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3741184 ++wrote 2048/2048 bytes at offset 3741184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3745280 ++wrote 2048/2048 bytes at offset 3745280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3749376 ++wrote 2048/2048 bytes at offset 3749376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3753472 ++wrote 2048/2048 bytes at offset 3753472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757568 ++wrote 2048/2048 bytes at offset 3757568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761664 ++wrote 2048/2048 bytes at offset 3761664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765760 ++wrote 2048/2048 bytes at offset 3765760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769856 ++wrote 2048/2048 bytes at offset 3769856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773952 ++wrote 2048/2048 bytes at offset 3773952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3778048 ++wrote 2048/2048 bytes at offset 3778048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3782144 ++wrote 2048/2048 bytes at offset 3782144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3786240 ++wrote 2048/2048 bytes at offset 3786240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3790336 ++wrote 2048/2048 bytes at offset 3790336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3794432 ++wrote 2048/2048 bytes at offset 3794432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798528 ++wrote 2048/2048 bytes at offset 3798528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802624 ++wrote 2048/2048 bytes at offset 3802624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806720 ++wrote 2048/2048 bytes at offset 3806720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810816 ++wrote 2048/2048 bytes at offset 3810816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814912 ++wrote 2048/2048 bytes at offset 3814912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3819008 ++wrote 2048/2048 bytes at offset 3819008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3823104 ++wrote 2048/2048 bytes at offset 3823104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3827200 ++wrote 2048/2048 bytes at offset 3827200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3831296 ++wrote 2048/2048 bytes at offset 3831296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3835392 ++wrote 2048/2048 bytes at offset 3835392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3839488 ++wrote 2048/2048 bytes at offset 3839488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843584 ++wrote 2048/2048 bytes at offset 3843584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847680 ++wrote 2048/2048 bytes at offset 3847680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851776 ++wrote 2048/2048 bytes at offset 3851776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855872 ++wrote 2048/2048 bytes at offset 3855872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859968 ++wrote 2048/2048 bytes at offset 3859968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3864064 ++wrote 2048/2048 bytes at offset 3864064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3868160 ++wrote 2048/2048 bytes at offset 3868160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3872256 ++wrote 2048/2048 bytes at offset 3872256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3876352 ++wrote 2048/2048 bytes at offset 3876352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3880448 ++wrote 2048/2048 bytes at offset 3880448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884544 ++wrote 2048/2048 bytes at offset 3884544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888640 ++wrote 2048/2048 bytes at offset 3888640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892736 ++wrote 2048/2048 bytes at offset 3892736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896832 ++wrote 2048/2048 bytes at offset 3896832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900928 ++wrote 2048/2048 bytes at offset 3900928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3905024 ++wrote 2048/2048 bytes at offset 3905024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3909120 ++wrote 2048/2048 bytes at offset 3909120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3913216 ++wrote 2048/2048 bytes at offset 3913216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3917312 ++wrote 2048/2048 bytes at offset 3917312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3921408 ++wrote 2048/2048 bytes at offset 3921408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3925504 ++wrote 2048/2048 bytes at offset 3925504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929600 ++wrote 2048/2048 bytes at offset 3929600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933696 ++wrote 2048/2048 bytes at offset 3933696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937792 ++wrote 2048/2048 bytes at offset 3937792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941888 ++wrote 2048/2048 bytes at offset 3941888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945984 ++wrote 2048/2048 bytes at offset 3945984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3950080 ++wrote 2048/2048 bytes at offset 3950080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3954176 ++wrote 2048/2048 bytes at offset 3954176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3958272 ++wrote 2048/2048 bytes at offset 3958272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3962368 ++wrote 2048/2048 bytes at offset 3962368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3966464 ++wrote 2048/2048 bytes at offset 3966464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970560 ++wrote 2048/2048 bytes at offset 3970560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974656 ++wrote 2048/2048 bytes at offset 3974656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978752 ++wrote 2048/2048 bytes at offset 3978752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982848 ++wrote 2048/2048 bytes at offset 3982848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986944 ++wrote 2048/2048 bytes at offset 3986944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3991040 ++wrote 2048/2048 bytes at offset 3991040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3995136 ++wrote 2048/2048 bytes at offset 3995136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3999232 ++wrote 2048/2048 bytes at offset 3999232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4003328 ++wrote 2048/2048 bytes at offset 4003328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4007424 ++wrote 2048/2048 bytes at offset 4007424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011520 ++wrote 2048/2048 bytes at offset 4011520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015616 ++wrote 2048/2048 bytes at offset 4015616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019712 ++wrote 2048/2048 bytes at offset 4019712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023808 ++wrote 2048/2048 bytes at offset 4023808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027904 ++wrote 2048/2048 bytes at offset 4027904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4032000 ++wrote 2048/2048 bytes at offset 4032000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4036096 ++wrote 2048/2048 bytes at offset 4036096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4040192 ++wrote 2048/2048 bytes at offset 4040192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4044288 ++wrote 2048/2048 bytes at offset 4044288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4048384 ++wrote 2048/2048 bytes at offset 4048384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4052480 ++wrote 2048/2048 bytes at offset 4052480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056576 ++wrote 2048/2048 bytes at offset 4056576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060672 ++wrote 2048/2048 bytes at offset 4060672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064768 ++wrote 2048/2048 bytes at offset 4064768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068864 ++wrote 2048/2048 bytes at offset 4068864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072960 ++wrote 2048/2048 bytes at offset 4072960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4077056 ++wrote 2048/2048 bytes at offset 4077056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4081152 ++wrote 2048/2048 bytes at offset 4081152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4085248 ++wrote 2048/2048 bytes at offset 4085248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4089344 ++wrote 2048/2048 bytes at offset 4089344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4093440 ++wrote 2048/2048 bytes at offset 4093440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097536 ++wrote 2048/2048 bytes at offset 4097536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101632 ++wrote 2048/2048 bytes at offset 4101632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105728 ++wrote 2048/2048 bytes at offset 4105728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109824 ++wrote 2048/2048 bytes at offset 4109824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113920 ++wrote 2048/2048 bytes at offset 4113920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4118016 ++wrote 2048/2048 bytes at offset 4118016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4122112 ++wrote 2048/2048 bytes at offset 4122112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4126208 ++wrote 2048/2048 bytes at offset 4126208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4130304 ++wrote 2048/2048 bytes at offset 4130304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4134400 ++wrote 2048/2048 bytes at offset 4134400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4138496 ++wrote 2048/2048 bytes at offset 4138496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142592 ++wrote 2048/2048 bytes at offset 4142592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146688 ++wrote 2048/2048 bytes at offset 4146688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150784 ++wrote 2048/2048 bytes at offset 4150784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154880 ++wrote 2048/2048 bytes at offset 4154880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158976 ++wrote 2048/2048 bytes at offset 4158976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4163072 ++wrote 2048/2048 bytes at offset 4163072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4167168 ++wrote 2048/2048 bytes at offset 4167168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4171264 ++wrote 2048/2048 bytes at offset 4171264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4175360 ++wrote 2048/2048 bytes at offset 4175360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4179456 ++wrote 2048/2048 bytes at offset 4179456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183552 ++wrote 2048/2048 bytes at offset 4183552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187648 ++wrote 2048/2048 bytes at offset 4187648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191744 ++wrote 2048/2048 bytes at offset 4191744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 8192/8192 bytes at offset 4196864 ++=== IO: pattern 5 ++wrote 8192/8192 bytes at offset 4196864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4209152 ++wrote 8192/8192 bytes at offset 4209152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4221440 ++wrote 8192/8192 bytes at offset 4221440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233728 ++wrote 8192/8192 bytes at offset 4233728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4246016 ++wrote 8192/8192 bytes at offset 4246016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4258304 ++wrote 8192/8192 bytes at offset 4258304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270592 ++wrote 8192/8192 bytes at offset 4270592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282880 ++wrote 8192/8192 bytes at offset 4282880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295168 ++wrote 8192/8192 bytes at offset 4295168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4307456 ++wrote 8192/8192 bytes at offset 4307456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319744 ++wrote 8192/8192 bytes at offset 4319744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4332032 ++wrote 8192/8192 bytes at offset 4332032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4344320 ++wrote 8192/8192 bytes at offset 4344320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356608 ++wrote 8192/8192 bytes at offset 4356608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368896 ++wrote 8192/8192 bytes at offset 4368896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4381184 ++wrote 8192/8192 bytes at offset 4381184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4393472 ++wrote 8192/8192 bytes at offset 4393472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405760 ++wrote 8192/8192 bytes at offset 4405760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4418048 ++wrote 8192/8192 bytes at offset 4418048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4430336 ++wrote 8192/8192 bytes at offset 4430336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442624 ++wrote 8192/8192 bytes at offset 4442624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454912 ++wrote 8192/8192 bytes at offset 4454912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4467200 ++wrote 8192/8192 bytes at offset 4467200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4479488 ++wrote 8192/8192 bytes at offset 4479488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491776 ++wrote 8192/8192 bytes at offset 4491776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4504064 ++wrote 8192/8192 bytes at offset 4504064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4516352 ++wrote 8192/8192 bytes at offset 4516352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528640 ++wrote 8192/8192 bytes at offset 4528640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540928 ++wrote 8192/8192 bytes at offset 4540928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4553216 ++wrote 8192/8192 bytes at offset 4553216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4565504 ++wrote 8192/8192 bytes at offset 4565504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577792 ++wrote 8192/8192 bytes at offset 4577792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4590080 ++wrote 8192/8192 bytes at offset 4590080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4602368 ++wrote 8192/8192 bytes at offset 4602368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614656 ++wrote 8192/8192 bytes at offset 4614656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626944 ++wrote 8192/8192 bytes at offset 4626944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4639232 ++wrote 8192/8192 bytes at offset 4639232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651520 ++wrote 8192/8192 bytes at offset 4651520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663808 ++wrote 8192/8192 bytes at offset 4663808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4676096 ++wrote 8192/8192 bytes at offset 4676096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4688384 ++wrote 8192/8192 bytes at offset 4688384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700672 ++wrote 8192/8192 bytes at offset 4700672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712960 ++wrote 8192/8192 bytes at offset 4712960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4725248 ++wrote 8192/8192 bytes at offset 4725248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737536 ++wrote 8192/8192 bytes at offset 4737536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749824 ++wrote 8192/8192 bytes at offset 4749824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4762112 ++wrote 8192/8192 bytes at offset 4762112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4774400 ++wrote 8192/8192 bytes at offset 4774400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786688 ++wrote 8192/8192 bytes at offset 4786688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798976 ++wrote 8192/8192 bytes at offset 4798976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4811264 ++wrote 8192/8192 bytes at offset 4811264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823552 ++wrote 8192/8192 bytes at offset 4823552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835840 ++wrote 8192/8192 bytes at offset 4835840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4848128 ++wrote 8192/8192 bytes at offset 4848128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4860416 ++wrote 8192/8192 bytes at offset 4860416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872704 ++wrote 8192/8192 bytes at offset 4872704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884992 ++wrote 8192/8192 bytes at offset 4884992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4897280 ++wrote 8192/8192 bytes at offset 4897280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909568 ++wrote 8192/8192 bytes at offset 4909568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921856 ++wrote 8192/8192 bytes at offset 4921856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4934144 ++wrote 8192/8192 bytes at offset 4934144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4946432 ++wrote 8192/8192 bytes at offset 4946432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958720 ++wrote 8192/8192 bytes at offset 4958720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4971008 ++wrote 8192/8192 bytes at offset 4971008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 512 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4608 ++read 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8704 ++read 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12800 ++read 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16896 ++read 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20992 ++read 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 25088 ++read 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 29184 ++read 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 33280 ++read 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 37376 ++read 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 41472 ++read 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45568 ++read 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49664 ++read 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53760 ++read 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57856 ++read 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61952 ++read 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 66048 ++read 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 70144 ++read 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 74240 ++read 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 78336 ++read 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 82432 ++read 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86528 ++read 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90624 ++read 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94720 ++read 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98816 ++read 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102912 ++read 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 107008 ++read 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 111104 ++read 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 115200 ++read 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 119296 ++read 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 123392 ++read 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 127488 ++read 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131584 ++read 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135680 ++read 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139776 ++read 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143872 ++read 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147968 ++read 4096/4096 bytes at offset 147968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 152064 ++read 4096/4096 bytes at offset 152064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 156160 ++read 4096/4096 bytes at offset 156160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 160256 ++read 4096/4096 bytes at offset 160256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 164352 ++read 4096/4096 bytes at offset 164352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 168448 ++read 4096/4096 bytes at offset 168448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172544 ++read 4096/4096 bytes at offset 172544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176640 ++read 4096/4096 bytes at offset 176640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180736 ++read 4096/4096 bytes at offset 180736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184832 ++read 4096/4096 bytes at offset 184832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188928 ++read 4096/4096 bytes at offset 188928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 193024 ++read 4096/4096 bytes at offset 193024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 197120 ++read 4096/4096 bytes at offset 197120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 201216 ++read 4096/4096 bytes at offset 201216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 205312 ++read 4096/4096 bytes at offset 205312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 209408 ++read 4096/4096 bytes at offset 209408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 213504 ++read 4096/4096 bytes at offset 213504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217600 ++read 4096/4096 bytes at offset 217600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221696 ++read 4096/4096 bytes at offset 221696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225792 ++read 4096/4096 bytes at offset 225792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229888 ++read 4096/4096 bytes at offset 229888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233984 ++read 4096/4096 bytes at offset 233984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 238080 ++read 4096/4096 bytes at offset 238080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 242176 ++read 4096/4096 bytes at offset 242176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 246272 ++read 4096/4096 bytes at offset 246272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 250368 ++read 4096/4096 bytes at offset 250368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 254464 ++read 4096/4096 bytes at offset 254464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258560 ++read 4096/4096 bytes at offset 258560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262656 ++read 4096/4096 bytes at offset 262656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266752 ++read 4096/4096 bytes at offset 266752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270848 ++read 4096/4096 bytes at offset 270848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274944 ++read 4096/4096 bytes at offset 274944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 279040 ++read 4096/4096 bytes at offset 279040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 283136 ++read 4096/4096 bytes at offset 283136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 287232 ++read 4096/4096 bytes at offset 287232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 291328 ++read 4096/4096 bytes at offset 291328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 295424 ++read 4096/4096 bytes at offset 295424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299520 ++read 4096/4096 bytes at offset 299520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303616 ++read 4096/4096 bytes at offset 303616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307712 ++read 4096/4096 bytes at offset 307712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311808 ++read 4096/4096 bytes at offset 311808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315904 ++read 4096/4096 bytes at offset 315904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 320000 ++read 4096/4096 bytes at offset 320000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 324096 ++read 4096/4096 bytes at offset 324096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 328192 ++read 4096/4096 bytes at offset 328192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 332288 ++read 4096/4096 bytes at offset 332288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 336384 ++read 4096/4096 bytes at offset 336384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 340480 ++read 4096/4096 bytes at offset 340480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344576 ++read 4096/4096 bytes at offset 344576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348672 ++read 4096/4096 bytes at offset 348672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352768 ++read 4096/4096 bytes at offset 352768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356864 ++read 4096/4096 bytes at offset 356864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360960 ++read 4096/4096 bytes at offset 360960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 365056 ++read 4096/4096 bytes at offset 365056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 369152 ++read 4096/4096 bytes at offset 369152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 373248 ++read 4096/4096 bytes at offset 373248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 377344 ++read 4096/4096 bytes at offset 377344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 381440 ++read 4096/4096 bytes at offset 381440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385536 ++read 4096/4096 bytes at offset 385536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389632 ++read 4096/4096 bytes at offset 389632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393728 ++read 4096/4096 bytes at offset 393728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397824 ++read 4096/4096 bytes at offset 397824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401920 ++read 4096/4096 bytes at offset 401920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 406016 ++read 4096/4096 bytes at offset 406016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 410112 ++read 4096/4096 bytes at offset 410112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 414208 ++read 4096/4096 bytes at offset 414208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 418304 ++read 4096/4096 bytes at offset 418304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 422400 ++read 4096/4096 bytes at offset 422400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 426496 ++read 4096/4096 bytes at offset 426496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430592 ++read 4096/4096 bytes at offset 430592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434688 ++read 4096/4096 bytes at offset 434688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438784 ++read 4096/4096 bytes at offset 438784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442880 ++read 4096/4096 bytes at offset 442880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446976 ++read 4096/4096 bytes at offset 446976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 451072 ++read 4096/4096 bytes at offset 451072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 455168 ++read 4096/4096 bytes at offset 455168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 459264 ++read 4096/4096 bytes at offset 459264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 463360 ++read 4096/4096 bytes at offset 463360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 467456 ++read 4096/4096 bytes at offset 467456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471552 ++read 4096/4096 bytes at offset 471552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475648 ++read 4096/4096 bytes at offset 475648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479744 ++read 4096/4096 bytes at offset 479744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483840 ++read 4096/4096 bytes at offset 483840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487936 ++read 4096/4096 bytes at offset 487936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 492032 ++read 4096/4096 bytes at offset 492032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 496128 ++read 4096/4096 bytes at offset 496128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 500224 ++read 4096/4096 bytes at offset 500224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 504320 ++read 4096/4096 bytes at offset 504320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 508416 ++read 4096/4096 bytes at offset 508416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512512 ++read 4096/4096 bytes at offset 512512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516608 ++read 4096/4096 bytes at offset 516608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520704 ++read 4096/4096 bytes at offset 520704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524800 ++read 4096/4096 bytes at offset 524800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528896 ++read 4096/4096 bytes at offset 528896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532992 ++read 4096/4096 bytes at offset 532992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 537088 ++read 4096/4096 bytes at offset 537088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 541184 ++read 4096/4096 bytes at offset 541184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 545280 ++read 4096/4096 bytes at offset 545280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 549376 ++read 4096/4096 bytes at offset 549376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 553472 ++read 4096/4096 bytes at offset 553472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557568 ++read 4096/4096 bytes at offset 557568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561664 ++read 4096/4096 bytes at offset 561664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565760 ++read 4096/4096 bytes at offset 565760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569856 ++read 4096/4096 bytes at offset 569856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573952 ++read 4096/4096 bytes at offset 573952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 578048 ++read 4096/4096 bytes at offset 578048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 582144 ++read 4096/4096 bytes at offset 582144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 586240 ++read 4096/4096 bytes at offset 586240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 590336 ++read 4096/4096 bytes at offset 590336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 594432 ++read 4096/4096 bytes at offset 594432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598528 ++read 4096/4096 bytes at offset 598528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602624 ++read 4096/4096 bytes at offset 602624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606720 ++read 4096/4096 bytes at offset 606720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610816 ++read 4096/4096 bytes at offset 610816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614912 ++read 4096/4096 bytes at offset 614912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 619008 ++read 4096/4096 bytes at offset 619008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 623104 ++read 4096/4096 bytes at offset 623104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 627200 ++read 4096/4096 bytes at offset 627200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 631296 ++read 4096/4096 bytes at offset 631296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 635392 ++read 4096/4096 bytes at offset 635392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 639488 ++read 4096/4096 bytes at offset 639488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643584 ++read 4096/4096 bytes at offset 643584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647680 ++read 4096/4096 bytes at offset 647680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651776 ++read 4096/4096 bytes at offset 651776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655872 ++read 4096/4096 bytes at offset 655872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659968 ++read 4096/4096 bytes at offset 659968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 664064 ++read 4096/4096 bytes at offset 664064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 668160 ++read 4096/4096 bytes at offset 668160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 672256 ++read 4096/4096 bytes at offset 672256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 676352 ++read 4096/4096 bytes at offset 676352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 680448 ++read 4096/4096 bytes at offset 680448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684544 ++read 4096/4096 bytes at offset 684544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688640 ++read 4096/4096 bytes at offset 688640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692736 ++read 4096/4096 bytes at offset 692736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696832 ++read 4096/4096 bytes at offset 696832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700928 ++read 4096/4096 bytes at offset 700928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 705024 ++read 4096/4096 bytes at offset 705024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 709120 ++read 4096/4096 bytes at offset 709120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 713216 ++read 4096/4096 bytes at offset 713216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 717312 ++read 4096/4096 bytes at offset 717312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 721408 ++read 4096/4096 bytes at offset 721408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 725504 ++read 4096/4096 bytes at offset 725504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729600 ++read 4096/4096 bytes at offset 729600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733696 ++read 4096/4096 bytes at offset 733696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737792 ++read 4096/4096 bytes at offset 737792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741888 ++read 4096/4096 bytes at offset 741888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745984 ++read 4096/4096 bytes at offset 745984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 750080 ++read 4096/4096 bytes at offset 750080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 754176 ++read 4096/4096 bytes at offset 754176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 758272 ++read 4096/4096 bytes at offset 758272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 762368 ++read 4096/4096 bytes at offset 762368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 766464 ++read 4096/4096 bytes at offset 766464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770560 ++read 4096/4096 bytes at offset 770560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774656 ++read 4096/4096 bytes at offset 774656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778752 ++read 4096/4096 bytes at offset 778752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782848 ++read 4096/4096 bytes at offset 782848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786944 ++read 4096/4096 bytes at offset 786944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 791040 ++read 4096/4096 bytes at offset 791040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 795136 ++read 4096/4096 bytes at offset 795136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 799232 ++read 4096/4096 bytes at offset 799232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 803328 ++read 4096/4096 bytes at offset 803328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 807424 ++read 4096/4096 bytes at offset 807424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811520 ++read 4096/4096 bytes at offset 811520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815616 ++read 4096/4096 bytes at offset 815616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819712 ++read 4096/4096 bytes at offset 819712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823808 ++read 4096/4096 bytes at offset 823808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827904 ++read 4096/4096 bytes at offset 827904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 832000 ++read 4096/4096 bytes at offset 832000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 836096 ++read 4096/4096 bytes at offset 836096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 840192 ++read 4096/4096 bytes at offset 840192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 844288 ++read 4096/4096 bytes at offset 844288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 848384 ++read 4096/4096 bytes at offset 848384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 852480 ++read 4096/4096 bytes at offset 852480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856576 ++read 4096/4096 bytes at offset 856576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860672 ++read 4096/4096 bytes at offset 860672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864768 ++read 4096/4096 bytes at offset 864768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868864 ++read 4096/4096 bytes at offset 868864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872960 ++read 4096/4096 bytes at offset 872960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 877056 ++read 4096/4096 bytes at offset 877056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 881152 ++read 4096/4096 bytes at offset 881152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 885248 ++read 4096/4096 bytes at offset 885248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 889344 ++read 4096/4096 bytes at offset 889344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 893440 ++read 4096/4096 bytes at offset 893440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897536 ++read 4096/4096 bytes at offset 897536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901632 ++read 4096/4096 bytes at offset 901632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905728 ++read 4096/4096 bytes at offset 905728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909824 ++read 4096/4096 bytes at offset 909824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913920 ++read 4096/4096 bytes at offset 913920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 918016 ++read 4096/4096 bytes at offset 918016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 922112 ++read 4096/4096 bytes at offset 922112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 926208 ++read 4096/4096 bytes at offset 926208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 930304 ++read 4096/4096 bytes at offset 930304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 934400 ++read 4096/4096 bytes at offset 934400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 938496 ++read 4096/4096 bytes at offset 938496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942592 ++read 4096/4096 bytes at offset 942592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946688 ++read 4096/4096 bytes at offset 946688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950784 ++read 4096/4096 bytes at offset 950784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954880 ++read 4096/4096 bytes at offset 954880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958976 ++read 4096/4096 bytes at offset 958976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 963072 ++read 4096/4096 bytes at offset 963072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 967168 ++read 4096/4096 bytes at offset 967168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 971264 ++read 4096/4096 bytes at offset 971264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 975360 ++read 4096/4096 bytes at offset 975360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 979456 ++read 4096/4096 bytes at offset 979456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983552 ++read 4096/4096 bytes at offset 983552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987648 ++read 4096/4096 bytes at offset 987648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991744 ++read 4096/4096 bytes at offset 991744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995840 ++read 4096/4096 bytes at offset 995840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999936 ++read 4096/4096 bytes at offset 999936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1004032 ++read 4096/4096 bytes at offset 1004032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1008128 ++read 4096/4096 bytes at offset 1008128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1012224 ++read 4096/4096 bytes at offset 1012224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1016320 ++read 4096/4096 bytes at offset 1016320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1020416 ++read 4096/4096 bytes at offset 1020416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024512 ++read 4096/4096 bytes at offset 1024512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028608 ++read 4096/4096 bytes at offset 1028608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032704 ++read 4096/4096 bytes at offset 1032704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036800 ++read 4096/4096 bytes at offset 1036800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040896 ++read 4096/4096 bytes at offset 1040896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044992 ++read 4096/4096 bytes at offset 1044992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 2048/2048 bytes at offset 1051136 ++=== IO: pattern 5 ++read 2048/2048 bytes at offset 1051136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1055232 ++read 2048/2048 bytes at offset 1055232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1059328 ++read 2048/2048 bytes at offset 1059328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1063424 ++read 2048/2048 bytes at offset 1063424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067520 ++read 2048/2048 bytes at offset 1067520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071616 ++read 2048/2048 bytes at offset 1071616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075712 ++read 2048/2048 bytes at offset 1075712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079808 ++read 2048/2048 bytes at offset 1079808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083904 ++read 2048/2048 bytes at offset 1083904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1088000 ++read 2048/2048 bytes at offset 1088000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1092096 ++read 2048/2048 bytes at offset 1092096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1096192 ++read 2048/2048 bytes at offset 1096192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1100288 ++read 2048/2048 bytes at offset 1100288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1104384 ++read 2048/2048 bytes at offset 1104384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1108480 ++read 2048/2048 bytes at offset 1108480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112576 ++read 2048/2048 bytes at offset 1112576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116672 ++read 2048/2048 bytes at offset 1116672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120768 ++read 2048/2048 bytes at offset 1120768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124864 ++read 2048/2048 bytes at offset 1124864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128960 ++read 2048/2048 bytes at offset 1128960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1133056 ++read 2048/2048 bytes at offset 1133056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1137152 ++read 2048/2048 bytes at offset 1137152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1141248 ++read 2048/2048 bytes at offset 1141248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1145344 ++read 2048/2048 bytes at offset 1145344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1149440 ++read 2048/2048 bytes at offset 1149440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153536 ++read 2048/2048 bytes at offset 1153536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157632 ++read 2048/2048 bytes at offset 1157632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161728 ++read 2048/2048 bytes at offset 1161728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165824 ++read 2048/2048 bytes at offset 1165824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169920 ++read 2048/2048 bytes at offset 1169920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1174016 ++read 2048/2048 bytes at offset 1174016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1178112 ++read 2048/2048 bytes at offset 1178112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1182208 ++read 2048/2048 bytes at offset 1182208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1186304 ++read 2048/2048 bytes at offset 1186304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1190400 ++read 2048/2048 bytes at offset 1190400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1194496 ++read 2048/2048 bytes at offset 1194496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198592 ++read 2048/2048 bytes at offset 1198592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202688 ++read 2048/2048 bytes at offset 1202688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206784 ++read 2048/2048 bytes at offset 1206784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210880 ++read 2048/2048 bytes at offset 1210880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214976 ++read 2048/2048 bytes at offset 1214976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1219072 ++read 2048/2048 bytes at offset 1219072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1223168 ++read 2048/2048 bytes at offset 1223168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1227264 ++read 2048/2048 bytes at offset 1227264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1231360 ++read 2048/2048 bytes at offset 1231360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1235456 ++read 2048/2048 bytes at offset 1235456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239552 ++read 2048/2048 bytes at offset 1239552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243648 ++read 2048/2048 bytes at offset 1243648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247744 ++read 2048/2048 bytes at offset 1247744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251840 ++read 2048/2048 bytes at offset 1251840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255936 ++read 2048/2048 bytes at offset 1255936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1260032 ++read 2048/2048 bytes at offset 1260032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1264128 ++read 2048/2048 bytes at offset 1264128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1268224 ++read 2048/2048 bytes at offset 1268224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1272320 ++read 2048/2048 bytes at offset 1272320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1276416 ++read 2048/2048 bytes at offset 1276416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280512 ++read 2048/2048 bytes at offset 1280512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284608 ++read 2048/2048 bytes at offset 1284608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288704 ++read 2048/2048 bytes at offset 1288704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292800 ++read 2048/2048 bytes at offset 1292800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296896 ++read 2048/2048 bytes at offset 1296896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300992 ++read 2048/2048 bytes at offset 1300992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1305088 ++read 2048/2048 bytes at offset 1305088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1309184 ++read 2048/2048 bytes at offset 1309184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1313280 ++read 2048/2048 bytes at offset 1313280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1317376 ++read 2048/2048 bytes at offset 1317376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1321472 ++read 2048/2048 bytes at offset 1321472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325568 ++read 2048/2048 bytes at offset 1325568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329664 ++read 2048/2048 bytes at offset 1329664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333760 ++read 2048/2048 bytes at offset 1333760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337856 ++read 2048/2048 bytes at offset 1337856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341952 ++read 2048/2048 bytes at offset 1341952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1346048 ++read 2048/2048 bytes at offset 1346048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1350144 ++read 2048/2048 bytes at offset 1350144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1354240 ++read 2048/2048 bytes at offset 1354240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1358336 ++read 2048/2048 bytes at offset 1358336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1362432 ++read 2048/2048 bytes at offset 1362432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366528 ++read 2048/2048 bytes at offset 1366528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370624 ++read 2048/2048 bytes at offset 1370624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374720 ++read 2048/2048 bytes at offset 1374720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378816 ++read 2048/2048 bytes at offset 1378816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382912 ++read 2048/2048 bytes at offset 1382912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1387008 ++read 2048/2048 bytes at offset 1387008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1391104 ++read 2048/2048 bytes at offset 1391104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1395200 ++read 2048/2048 bytes at offset 1395200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1399296 ++read 2048/2048 bytes at offset 1399296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1403392 ++read 2048/2048 bytes at offset 1403392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1407488 ++read 2048/2048 bytes at offset 1407488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411584 ++read 2048/2048 bytes at offset 1411584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415680 ++read 2048/2048 bytes at offset 1415680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419776 ++read 2048/2048 bytes at offset 1419776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423872 ++read 2048/2048 bytes at offset 1423872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427968 ++read 2048/2048 bytes at offset 1427968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1432064 ++read 2048/2048 bytes at offset 1432064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1436160 ++read 2048/2048 bytes at offset 1436160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1440256 ++read 2048/2048 bytes at offset 1440256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1444352 ++read 2048/2048 bytes at offset 1444352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1448448 ++read 2048/2048 bytes at offset 1448448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452544 ++read 2048/2048 bytes at offset 1452544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456640 ++read 2048/2048 bytes at offset 1456640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460736 ++read 2048/2048 bytes at offset 1460736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464832 ++read 2048/2048 bytes at offset 1464832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468928 ++read 2048/2048 bytes at offset 1468928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1473024 ++read 2048/2048 bytes at offset 1473024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1477120 ++read 2048/2048 bytes at offset 1477120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1481216 ++read 2048/2048 bytes at offset 1481216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1485312 ++read 2048/2048 bytes at offset 1485312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1489408 ++read 2048/2048 bytes at offset 1489408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1493504 ++read 2048/2048 bytes at offset 1493504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497600 ++read 2048/2048 bytes at offset 1497600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501696 ++read 2048/2048 bytes at offset 1501696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505792 ++read 2048/2048 bytes at offset 1505792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509888 ++read 2048/2048 bytes at offset 1509888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513984 ++read 2048/2048 bytes at offset 1513984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1518080 ++read 2048/2048 bytes at offset 1518080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1522176 ++read 2048/2048 bytes at offset 1522176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1526272 ++read 2048/2048 bytes at offset 1526272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1530368 ++read 2048/2048 bytes at offset 1530368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1534464 ++read 2048/2048 bytes at offset 1534464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538560 ++read 2048/2048 bytes at offset 1538560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542656 ++read 2048/2048 bytes at offset 1542656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546752 ++read 2048/2048 bytes at offset 1546752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550848 ++read 2048/2048 bytes at offset 1550848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554944 ++read 2048/2048 bytes at offset 1554944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1559040 ++read 2048/2048 bytes at offset 1559040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1563136 ++read 2048/2048 bytes at offset 1563136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1567232 ++read 2048/2048 bytes at offset 1567232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1571328 ++read 2048/2048 bytes at offset 1571328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1575424 ++read 2048/2048 bytes at offset 1575424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579520 ++read 2048/2048 bytes at offset 1579520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583616 ++read 2048/2048 bytes at offset 1583616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587712 ++read 2048/2048 bytes at offset 1587712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591808 ++read 2048/2048 bytes at offset 1591808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595904 ++read 2048/2048 bytes at offset 1595904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1600000 ++read 2048/2048 bytes at offset 1600000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1604096 ++read 2048/2048 bytes at offset 1604096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1608192 ++read 2048/2048 bytes at offset 1608192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1612288 ++read 2048/2048 bytes at offset 1612288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1616384 ++read 2048/2048 bytes at offset 1616384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1620480 ++read 2048/2048 bytes at offset 1620480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624576 ++read 2048/2048 bytes at offset 1624576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628672 ++read 2048/2048 bytes at offset 1628672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632768 ++read 2048/2048 bytes at offset 1632768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636864 ++read 2048/2048 bytes at offset 1636864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640960 ++read 2048/2048 bytes at offset 1640960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1645056 ++read 2048/2048 bytes at offset 1645056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1649152 ++read 2048/2048 bytes at offset 1649152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1653248 ++read 2048/2048 bytes at offset 1653248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1657344 ++read 2048/2048 bytes at offset 1657344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1661440 ++read 2048/2048 bytes at offset 1661440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665536 ++read 2048/2048 bytes at offset 1665536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669632 ++read 2048/2048 bytes at offset 1669632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673728 ++read 2048/2048 bytes at offset 1673728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677824 ++read 2048/2048 bytes at offset 1677824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681920 ++read 2048/2048 bytes at offset 1681920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1686016 ++read 2048/2048 bytes at offset 1686016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1690112 ++read 2048/2048 bytes at offset 1690112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1694208 ++read 2048/2048 bytes at offset 1694208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1698304 ++read 2048/2048 bytes at offset 1698304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1702400 ++read 2048/2048 bytes at offset 1702400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1706496 ++read 2048/2048 bytes at offset 1706496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710592 ++read 2048/2048 bytes at offset 1710592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714688 ++read 2048/2048 bytes at offset 1714688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718784 ++read 2048/2048 bytes at offset 1718784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722880 ++read 2048/2048 bytes at offset 1722880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726976 ++read 2048/2048 bytes at offset 1726976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1731072 ++read 2048/2048 bytes at offset 1731072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1735168 ++read 2048/2048 bytes at offset 1735168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1739264 ++read 2048/2048 bytes at offset 1739264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1743360 ++read 2048/2048 bytes at offset 1743360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1747456 ++read 2048/2048 bytes at offset 1747456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751552 ++read 2048/2048 bytes at offset 1751552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755648 ++read 2048/2048 bytes at offset 1755648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759744 ++read 2048/2048 bytes at offset 1759744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763840 ++read 2048/2048 bytes at offset 1763840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767936 ++read 2048/2048 bytes at offset 1767936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1772032 ++read 2048/2048 bytes at offset 1772032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1776128 ++read 2048/2048 bytes at offset 1776128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1780224 ++read 2048/2048 bytes at offset 1780224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1784320 ++read 2048/2048 bytes at offset 1784320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1788416 ++read 2048/2048 bytes at offset 1788416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792512 ++read 2048/2048 bytes at offset 1792512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796608 ++read 2048/2048 bytes at offset 1796608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800704 ++read 2048/2048 bytes at offset 1800704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804800 ++read 2048/2048 bytes at offset 1804800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808896 ++read 2048/2048 bytes at offset 1808896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812992 ++read 2048/2048 bytes at offset 1812992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1817088 ++read 2048/2048 bytes at offset 1817088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1821184 ++read 2048/2048 bytes at offset 1821184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1825280 ++read 2048/2048 bytes at offset 1825280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1829376 ++read 2048/2048 bytes at offset 1829376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1833472 ++read 2048/2048 bytes at offset 1833472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837568 ++read 2048/2048 bytes at offset 1837568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841664 ++read 2048/2048 bytes at offset 1841664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845760 ++read 2048/2048 bytes at offset 1845760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849856 ++read 2048/2048 bytes at offset 1849856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853952 ++read 2048/2048 bytes at offset 1853952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1858048 ++read 2048/2048 bytes at offset 1858048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1862144 ++read 2048/2048 bytes at offset 1862144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1866240 ++read 2048/2048 bytes at offset 1866240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1870336 ++read 2048/2048 bytes at offset 1870336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1874432 ++read 2048/2048 bytes at offset 1874432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878528 ++read 2048/2048 bytes at offset 1878528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882624 ++read 2048/2048 bytes at offset 1882624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886720 ++read 2048/2048 bytes at offset 1886720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890816 ++read 2048/2048 bytes at offset 1890816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894912 ++read 2048/2048 bytes at offset 1894912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1899008 ++read 2048/2048 bytes at offset 1899008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1903104 ++read 2048/2048 bytes at offset 1903104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1907200 ++read 2048/2048 bytes at offset 1907200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1911296 ++read 2048/2048 bytes at offset 1911296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1915392 ++read 2048/2048 bytes at offset 1915392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1919488 ++read 2048/2048 bytes at offset 1919488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923584 ++read 2048/2048 bytes at offset 1923584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927680 ++read 2048/2048 bytes at offset 1927680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931776 ++read 2048/2048 bytes at offset 1931776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935872 ++read 2048/2048 bytes at offset 1935872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939968 ++read 2048/2048 bytes at offset 1939968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1944064 ++read 2048/2048 bytes at offset 1944064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1948160 ++read 2048/2048 bytes at offset 1948160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1952256 ++read 2048/2048 bytes at offset 1952256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1956352 ++read 2048/2048 bytes at offset 1956352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1960448 ++read 2048/2048 bytes at offset 1960448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964544 ++read 2048/2048 bytes at offset 1964544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968640 ++read 2048/2048 bytes at offset 1968640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972736 ++read 2048/2048 bytes at offset 1972736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976832 ++read 2048/2048 bytes at offset 1976832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980928 ++read 2048/2048 bytes at offset 1980928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1985024 ++read 2048/2048 bytes at offset 1985024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1989120 ++read 2048/2048 bytes at offset 1989120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1993216 ++read 2048/2048 bytes at offset 1993216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1997312 ++read 2048/2048 bytes at offset 1997312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2001408 ++read 2048/2048 bytes at offset 2001408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2005504 ++read 2048/2048 bytes at offset 2005504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009600 ++read 2048/2048 bytes at offset 2009600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013696 ++read 2048/2048 bytes at offset 2013696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017792 ++read 2048/2048 bytes at offset 2017792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021888 ++read 2048/2048 bytes at offset 2021888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025984 ++read 2048/2048 bytes at offset 2025984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2030080 ++read 2048/2048 bytes at offset 2030080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2034176 ++read 2048/2048 bytes at offset 2034176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2038272 ++read 2048/2048 bytes at offset 2038272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2042368 ++read 2048/2048 bytes at offset 2042368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2046464 ++read 2048/2048 bytes at offset 2046464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050560 ++read 2048/2048 bytes at offset 2050560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054656 ++read 2048/2048 bytes at offset 2054656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058752 ++read 2048/2048 bytes at offset 2058752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062848 ++read 2048/2048 bytes at offset 2062848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066944 ++read 2048/2048 bytes at offset 2066944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2071040 ++read 2048/2048 bytes at offset 2071040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2075136 ++read 2048/2048 bytes at offset 2075136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2079232 ++read 2048/2048 bytes at offset 2079232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2083328 ++read 2048/2048 bytes at offset 2083328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2087424 ++read 2048/2048 bytes at offset 2087424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091520 ++read 2048/2048 bytes at offset 2091520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095616 ++read 2048/2048 bytes at offset 2095616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 2048/2048 bytes at offset 2097664 ++=== IO: pattern 1 ++read 2048/2048 bytes at offset 2097664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101760 ++read 2048/2048 bytes at offset 2101760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105856 ++read 2048/2048 bytes at offset 2105856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109952 ++read 2048/2048 bytes at offset 2109952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2114048 ++read 2048/2048 bytes at offset 2114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2118144 ++read 2048/2048 bytes at offset 2118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2122240 ++read 2048/2048 bytes at offset 2122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2126336 ++read 2048/2048 bytes at offset 2126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2130432 ++read 2048/2048 bytes at offset 2130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134528 ++read 2048/2048 bytes at offset 2134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138624 ++read 2048/2048 bytes at offset 2138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142720 ++read 2048/2048 bytes at offset 2142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146816 ++read 2048/2048 bytes at offset 2146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150912 ++read 2048/2048 bytes at offset 2150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2155008 ++read 2048/2048 bytes at offset 2155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2159104 ++read 2048/2048 bytes at offset 2159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2163200 ++read 2048/2048 bytes at offset 2163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2167296 ++read 2048/2048 bytes at offset 2167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2171392 ++read 2048/2048 bytes at offset 2171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2175488 ++read 2048/2048 bytes at offset 2175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179584 ++read 2048/2048 bytes at offset 2179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183680 ++read 2048/2048 bytes at offset 2183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187776 ++read 2048/2048 bytes at offset 2187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191872 ++read 2048/2048 bytes at offset 2191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195968 ++read 2048/2048 bytes at offset 2195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2200064 ++read 2048/2048 bytes at offset 2200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2204160 ++read 2048/2048 bytes at offset 2204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2208256 ++read 2048/2048 bytes at offset 2208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2212352 ++read 2048/2048 bytes at offset 2212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2216448 ++read 2048/2048 bytes at offset 2216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220544 ++read 2048/2048 bytes at offset 2220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224640 ++read 2048/2048 bytes at offset 2224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228736 ++read 2048/2048 bytes at offset 2228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232832 ++read 2048/2048 bytes at offset 2232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236928 ++read 2048/2048 bytes at offset 2236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2241024 ++read 2048/2048 bytes at offset 2241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2245120 ++read 2048/2048 bytes at offset 2245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2249216 ++read 2048/2048 bytes at offset 2249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2253312 ++read 2048/2048 bytes at offset 2253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2257408 ++read 2048/2048 bytes at offset 2257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2261504 ++read 2048/2048 bytes at offset 2261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265600 ++read 2048/2048 bytes at offset 2265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269696 ++read 2048/2048 bytes at offset 2269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273792 ++read 2048/2048 bytes at offset 2273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277888 ++read 2048/2048 bytes at offset 2277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281984 ++read 2048/2048 bytes at offset 2281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2286080 ++read 2048/2048 bytes at offset 2286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2290176 ++read 2048/2048 bytes at offset 2290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2294272 ++read 2048/2048 bytes at offset 2294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2298368 ++read 2048/2048 bytes at offset 2298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2302464 ++read 2048/2048 bytes at offset 2302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306560 ++read 2048/2048 bytes at offset 2306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310656 ++read 2048/2048 bytes at offset 2310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314752 ++read 2048/2048 bytes at offset 2314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318848 ++read 2048/2048 bytes at offset 2318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322944 ++read 2048/2048 bytes at offset 2322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2327040 ++read 2048/2048 bytes at offset 2327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2331136 ++read 2048/2048 bytes at offset 2331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2335232 ++read 2048/2048 bytes at offset 2335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2339328 ++read 2048/2048 bytes at offset 2339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2343424 ++read 2048/2048 bytes at offset 2343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347520 ++read 2048/2048 bytes at offset 2347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351616 ++read 2048/2048 bytes at offset 2351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355712 ++read 2048/2048 bytes at offset 2355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359808 ++read 2048/2048 bytes at offset 2359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363904 ++read 2048/2048 bytes at offset 2363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2368000 ++read 2048/2048 bytes at offset 2368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2372096 ++read 2048/2048 bytes at offset 2372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2376192 ++read 2048/2048 bytes at offset 2376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2380288 ++read 2048/2048 bytes at offset 2380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2384384 ++read 2048/2048 bytes at offset 2384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2388480 ++read 2048/2048 bytes at offset 2388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392576 ++read 2048/2048 bytes at offset 2392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396672 ++read 2048/2048 bytes at offset 2396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400768 ++read 2048/2048 bytes at offset 2400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404864 ++read 2048/2048 bytes at offset 2404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408960 ++read 2048/2048 bytes at offset 2408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2413056 ++read 2048/2048 bytes at offset 2413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2417152 ++read 2048/2048 bytes at offset 2417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2421248 ++read 2048/2048 bytes at offset 2421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2425344 ++read 2048/2048 bytes at offset 2425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2429440 ++read 2048/2048 bytes at offset 2429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433536 ++read 2048/2048 bytes at offset 2433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437632 ++read 2048/2048 bytes at offset 2437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441728 ++read 2048/2048 bytes at offset 2441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445824 ++read 2048/2048 bytes at offset 2445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449920 ++read 2048/2048 bytes at offset 2449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2454016 ++read 2048/2048 bytes at offset 2454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2458112 ++read 2048/2048 bytes at offset 2458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2462208 ++read 2048/2048 bytes at offset 2462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2466304 ++read 2048/2048 bytes at offset 2466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2470400 ++read 2048/2048 bytes at offset 2470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2474496 ++read 2048/2048 bytes at offset 2474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478592 ++read 2048/2048 bytes at offset 2478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482688 ++read 2048/2048 bytes at offset 2482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486784 ++read 2048/2048 bytes at offset 2486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490880 ++read 2048/2048 bytes at offset 2490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494976 ++read 2048/2048 bytes at offset 2494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2499072 ++read 2048/2048 bytes at offset 2499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2503168 ++read 2048/2048 bytes at offset 2503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2507264 ++read 2048/2048 bytes at offset 2507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2511360 ++read 2048/2048 bytes at offset 2511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2515456 ++read 2048/2048 bytes at offset 2515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519552 ++read 2048/2048 bytes at offset 2519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523648 ++read 2048/2048 bytes at offset 2523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527744 ++read 2048/2048 bytes at offset 2527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531840 ++read 2048/2048 bytes at offset 2531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535936 ++read 2048/2048 bytes at offset 2535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2540032 ++read 2048/2048 bytes at offset 2540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2544128 ++read 2048/2048 bytes at offset 2544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2548224 ++read 2048/2048 bytes at offset 2548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2552320 ++read 2048/2048 bytes at offset 2552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2556416 ++read 2048/2048 bytes at offset 2556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560512 ++read 2048/2048 bytes at offset 2560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564608 ++read 2048/2048 bytes at offset 2564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568704 ++read 2048/2048 bytes at offset 2568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572800 ++read 2048/2048 bytes at offset 2572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576896 ++read 2048/2048 bytes at offset 2576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580992 ++read 2048/2048 bytes at offset 2580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2585088 ++read 2048/2048 bytes at offset 2585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2589184 ++read 2048/2048 bytes at offset 2589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2593280 ++read 2048/2048 bytes at offset 2593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2597376 ++read 2048/2048 bytes at offset 2597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2601472 ++read 2048/2048 bytes at offset 2601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605568 ++read 2048/2048 bytes at offset 2605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609664 ++read 2048/2048 bytes at offset 2609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613760 ++read 2048/2048 bytes at offset 2613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617856 ++read 2048/2048 bytes at offset 2617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621952 ++read 2048/2048 bytes at offset 2621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2626048 ++read 2048/2048 bytes at offset 2626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2630144 ++read 2048/2048 bytes at offset 2630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2634240 ++read 2048/2048 bytes at offset 2634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2638336 ++read 2048/2048 bytes at offset 2638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2642432 ++read 2048/2048 bytes at offset 2642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646528 ++read 2048/2048 bytes at offset 2646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650624 ++read 2048/2048 bytes at offset 2650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654720 ++read 2048/2048 bytes at offset 2654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658816 ++read 2048/2048 bytes at offset 2658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662912 ++read 2048/2048 bytes at offset 2662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2667008 ++read 2048/2048 bytes at offset 2667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2671104 ++read 2048/2048 bytes at offset 2671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2675200 ++read 2048/2048 bytes at offset 2675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2679296 ++read 2048/2048 bytes at offset 2679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2683392 ++read 2048/2048 bytes at offset 2683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2687488 ++read 2048/2048 bytes at offset 2687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691584 ++read 2048/2048 bytes at offset 2691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695680 ++read 2048/2048 bytes at offset 2695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699776 ++read 2048/2048 bytes at offset 2699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703872 ++read 2048/2048 bytes at offset 2703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707968 ++read 2048/2048 bytes at offset 2707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2712064 ++read 2048/2048 bytes at offset 2712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2716160 ++read 2048/2048 bytes at offset 2716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2720256 ++read 2048/2048 bytes at offset 2720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2724352 ++read 2048/2048 bytes at offset 2724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2728448 ++read 2048/2048 bytes at offset 2728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732544 ++read 2048/2048 bytes at offset 2732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736640 ++read 2048/2048 bytes at offset 2736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740736 ++read 2048/2048 bytes at offset 2740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744832 ++read 2048/2048 bytes at offset 2744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748928 ++read 2048/2048 bytes at offset 2748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2753024 ++read 2048/2048 bytes at offset 2753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2757120 ++read 2048/2048 bytes at offset 2757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2761216 ++read 2048/2048 bytes at offset 2761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2765312 ++read 2048/2048 bytes at offset 2765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2769408 ++read 2048/2048 bytes at offset 2769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2773504 ++read 2048/2048 bytes at offset 2773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777600 ++read 2048/2048 bytes at offset 2777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781696 ++read 2048/2048 bytes at offset 2781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785792 ++read 2048/2048 bytes at offset 2785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789888 ++read 2048/2048 bytes at offset 2789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793984 ++read 2048/2048 bytes at offset 2793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2798080 ++read 2048/2048 bytes at offset 2798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2802176 ++read 2048/2048 bytes at offset 2802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2806272 ++read 2048/2048 bytes at offset 2806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2810368 ++read 2048/2048 bytes at offset 2810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2814464 ++read 2048/2048 bytes at offset 2814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818560 ++read 2048/2048 bytes at offset 2818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822656 ++read 2048/2048 bytes at offset 2822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826752 ++read 2048/2048 bytes at offset 2826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830848 ++read 2048/2048 bytes at offset 2830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834944 ++read 2048/2048 bytes at offset 2834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2839040 ++read 2048/2048 bytes at offset 2839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2843136 ++read 2048/2048 bytes at offset 2843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2847232 ++read 2048/2048 bytes at offset 2847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2851328 ++read 2048/2048 bytes at offset 2851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2855424 ++read 2048/2048 bytes at offset 2855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859520 ++read 2048/2048 bytes at offset 2859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863616 ++read 2048/2048 bytes at offset 2863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867712 ++read 2048/2048 bytes at offset 2867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871808 ++read 2048/2048 bytes at offset 2871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875904 ++read 2048/2048 bytes at offset 2875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2880000 ++read 2048/2048 bytes at offset 2880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2884096 ++read 2048/2048 bytes at offset 2884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2888192 ++read 2048/2048 bytes at offset 2888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2892288 ++read 2048/2048 bytes at offset 2892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2896384 ++read 2048/2048 bytes at offset 2896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2900480 ++read 2048/2048 bytes at offset 2900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904576 ++read 2048/2048 bytes at offset 2904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908672 ++read 2048/2048 bytes at offset 2908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912768 ++read 2048/2048 bytes at offset 2912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916864 ++read 2048/2048 bytes at offset 2916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920960 ++read 2048/2048 bytes at offset 2920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2925056 ++read 2048/2048 bytes at offset 2925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2929152 ++read 2048/2048 bytes at offset 2929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2933248 ++read 2048/2048 bytes at offset 2933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2937344 ++read 2048/2048 bytes at offset 2937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2941440 ++read 2048/2048 bytes at offset 2941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945536 ++read 2048/2048 bytes at offset 2945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949632 ++read 2048/2048 bytes at offset 2949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953728 ++read 2048/2048 bytes at offset 2953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957824 ++read 2048/2048 bytes at offset 2957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961920 ++read 2048/2048 bytes at offset 2961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2966016 ++read 2048/2048 bytes at offset 2966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2970112 ++read 2048/2048 bytes at offset 2970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2974208 ++read 2048/2048 bytes at offset 2974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2978304 ++read 2048/2048 bytes at offset 2978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2982400 ++read 2048/2048 bytes at offset 2982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2986496 ++read 2048/2048 bytes at offset 2986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990592 ++read 2048/2048 bytes at offset 2990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994688 ++read 2048/2048 bytes at offset 2994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998784 ++read 2048/2048 bytes at offset 2998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002880 ++read 2048/2048 bytes at offset 3002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006976 ++read 2048/2048 bytes at offset 3006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3011072 ++read 2048/2048 bytes at offset 3011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3015168 ++read 2048/2048 bytes at offset 3015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3019264 ++read 2048/2048 bytes at offset 3019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3023360 ++read 2048/2048 bytes at offset 3023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3027456 ++read 2048/2048 bytes at offset 3027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031552 ++read 2048/2048 bytes at offset 3031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035648 ++read 2048/2048 bytes at offset 3035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039744 ++read 2048/2048 bytes at offset 3039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043840 ++read 2048/2048 bytes at offset 3043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047936 ++read 2048/2048 bytes at offset 3047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3052032 ++read 2048/2048 bytes at offset 3052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3056128 ++read 2048/2048 bytes at offset 3056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3060224 ++read 2048/2048 bytes at offset 3060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3064320 ++read 2048/2048 bytes at offset 3064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3068416 ++read 2048/2048 bytes at offset 3068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072512 ++read 2048/2048 bytes at offset 3072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076608 ++read 2048/2048 bytes at offset 3076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080704 ++read 2048/2048 bytes at offset 3080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084800 ++read 2048/2048 bytes at offset 3084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088896 ++read 2048/2048 bytes at offset 3088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092992 ++read 2048/2048 bytes at offset 3092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3097088 ++read 2048/2048 bytes at offset 3097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3101184 ++read 2048/2048 bytes at offset 3101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3105280 ++read 2048/2048 bytes at offset 3105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3109376 ++read 2048/2048 bytes at offset 3109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3113472 ++read 2048/2048 bytes at offset 3113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117568 ++read 2048/2048 bytes at offset 3117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121664 ++read 2048/2048 bytes at offset 3121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125760 ++read 2048/2048 bytes at offset 3125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129856 ++read 2048/2048 bytes at offset 3129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133952 ++read 2048/2048 bytes at offset 3133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3138048 ++read 2048/2048 bytes at offset 3138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3142144 ++read 2048/2048 bytes at offset 3142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> read 2048/2048 bytes at offset 3147264 ++=== IO: pattern 3 ++read 2048/2048 bytes at offset 3147264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3151360 ++read 2048/2048 bytes at offset 3151360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3155456 ++read 2048/2048 bytes at offset 3155456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159552 ++read 2048/2048 bytes at offset 3159552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163648 ++read 2048/2048 bytes at offset 3163648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167744 ++read 2048/2048 bytes at offset 3167744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171840 ++read 2048/2048 bytes at offset 3171840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175936 ++read 2048/2048 bytes at offset 3175936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3180032 ++read 2048/2048 bytes at offset 3180032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3184128 ++read 2048/2048 bytes at offset 3184128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3188224 ++read 2048/2048 bytes at offset 3188224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3192320 ++read 2048/2048 bytes at offset 3192320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3196416 ++read 2048/2048 bytes at offset 3196416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200512 ++read 2048/2048 bytes at offset 3200512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204608 ++read 2048/2048 bytes at offset 3204608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208704 ++read 2048/2048 bytes at offset 3208704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212800 ++read 2048/2048 bytes at offset 3212800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216896 ++read 2048/2048 bytes at offset 3216896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220992 ++read 2048/2048 bytes at offset 3220992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3225088 ++read 2048/2048 bytes at offset 3225088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3229184 ++read 2048/2048 bytes at offset 3229184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3233280 ++read 2048/2048 bytes at offset 3233280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3237376 ++read 2048/2048 bytes at offset 3237376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3241472 ++read 2048/2048 bytes at offset 3241472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245568 ++read 2048/2048 bytes at offset 3245568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249664 ++read 2048/2048 bytes at offset 3249664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253760 ++read 2048/2048 bytes at offset 3253760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257856 ++read 2048/2048 bytes at offset 3257856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261952 ++read 2048/2048 bytes at offset 3261952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3266048 ++read 2048/2048 bytes at offset 3266048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3270144 ++read 2048/2048 bytes at offset 3270144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3274240 ++read 2048/2048 bytes at offset 3274240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3278336 ++read 2048/2048 bytes at offset 3278336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3282432 ++read 2048/2048 bytes at offset 3282432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286528 ++read 2048/2048 bytes at offset 3286528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290624 ++read 2048/2048 bytes at offset 3290624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294720 ++read 2048/2048 bytes at offset 3294720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298816 ++read 2048/2048 bytes at offset 3298816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302912 ++read 2048/2048 bytes at offset 3302912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3307008 ++read 2048/2048 bytes at offset 3307008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3311104 ++read 2048/2048 bytes at offset 3311104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3315200 ++read 2048/2048 bytes at offset 3315200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3319296 ++read 2048/2048 bytes at offset 3319296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3323392 ++read 2048/2048 bytes at offset 3323392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3327488 ++read 2048/2048 bytes at offset 3327488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331584 ++read 2048/2048 bytes at offset 3331584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335680 ++read 2048/2048 bytes at offset 3335680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339776 ++read 2048/2048 bytes at offset 3339776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343872 ++read 2048/2048 bytes at offset 3343872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347968 ++read 2048/2048 bytes at offset 3347968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3352064 ++read 2048/2048 bytes at offset 3352064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3356160 ++read 2048/2048 bytes at offset 3356160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3360256 ++read 2048/2048 bytes at offset 3360256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3364352 ++read 2048/2048 bytes at offset 3364352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3368448 ++read 2048/2048 bytes at offset 3368448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372544 ++read 2048/2048 bytes at offset 3372544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376640 ++read 2048/2048 bytes at offset 3376640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380736 ++read 2048/2048 bytes at offset 3380736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384832 ++read 2048/2048 bytes at offset 3384832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388928 ++read 2048/2048 bytes at offset 3388928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3393024 ++read 2048/2048 bytes at offset 3393024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3397120 ++read 2048/2048 bytes at offset 3397120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3401216 ++read 2048/2048 bytes at offset 3401216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3405312 ++read 2048/2048 bytes at offset 3405312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3409408 ++read 2048/2048 bytes at offset 3409408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3413504 ++read 2048/2048 bytes at offset 3413504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417600 ++read 2048/2048 bytes at offset 3417600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421696 ++read 2048/2048 bytes at offset 3421696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425792 ++read 2048/2048 bytes at offset 3425792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429888 ++read 2048/2048 bytes at offset 3429888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433984 ++read 2048/2048 bytes at offset 3433984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3438080 ++read 2048/2048 bytes at offset 3438080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3442176 ++read 2048/2048 bytes at offset 3442176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3446272 ++read 2048/2048 bytes at offset 3446272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3450368 ++read 2048/2048 bytes at offset 3450368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3454464 ++read 2048/2048 bytes at offset 3454464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458560 ++read 2048/2048 bytes at offset 3458560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462656 ++read 2048/2048 bytes at offset 3462656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466752 ++read 2048/2048 bytes at offset 3466752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470848 ++read 2048/2048 bytes at offset 3470848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474944 ++read 2048/2048 bytes at offset 3474944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3479040 ++read 2048/2048 bytes at offset 3479040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3483136 ++read 2048/2048 bytes at offset 3483136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3487232 ++read 2048/2048 bytes at offset 3487232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3491328 ++read 2048/2048 bytes at offset 3491328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3495424 ++read 2048/2048 bytes at offset 3495424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499520 ++read 2048/2048 bytes at offset 3499520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503616 ++read 2048/2048 bytes at offset 3503616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507712 ++read 2048/2048 bytes at offset 3507712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511808 ++read 2048/2048 bytes at offset 3511808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515904 ++read 2048/2048 bytes at offset 3515904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3520000 ++read 2048/2048 bytes at offset 3520000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3524096 ++read 2048/2048 bytes at offset 3524096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3528192 ++read 2048/2048 bytes at offset 3528192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3532288 ++read 2048/2048 bytes at offset 3532288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3536384 ++read 2048/2048 bytes at offset 3536384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3540480 ++read 2048/2048 bytes at offset 3540480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544576 ++read 2048/2048 bytes at offset 3544576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548672 ++read 2048/2048 bytes at offset 3548672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552768 ++read 2048/2048 bytes at offset 3552768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556864 ++read 2048/2048 bytes at offset 3556864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560960 ++read 2048/2048 bytes at offset 3560960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3565056 ++read 2048/2048 bytes at offset 3565056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3569152 ++read 2048/2048 bytes at offset 3569152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3573248 ++read 2048/2048 bytes at offset 3573248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3577344 ++read 2048/2048 bytes at offset 3577344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3581440 ++read 2048/2048 bytes at offset 3581440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585536 ++read 2048/2048 bytes at offset 3585536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589632 ++read 2048/2048 bytes at offset 3589632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593728 ++read 2048/2048 bytes at offset 3593728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597824 ++read 2048/2048 bytes at offset 3597824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601920 ++read 2048/2048 bytes at offset 3601920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3606016 ++read 2048/2048 bytes at offset 3606016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3610112 ++read 2048/2048 bytes at offset 3610112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3614208 ++read 2048/2048 bytes at offset 3614208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3618304 ++read 2048/2048 bytes at offset 3618304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3622400 ++read 2048/2048 bytes at offset 3622400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3626496 ++read 2048/2048 bytes at offset 3626496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630592 ++read 2048/2048 bytes at offset 3630592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634688 ++read 2048/2048 bytes at offset 3634688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638784 ++read 2048/2048 bytes at offset 3638784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642880 ++read 2048/2048 bytes at offset 3642880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646976 ++read 2048/2048 bytes at offset 3646976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3651072 ++read 2048/2048 bytes at offset 3651072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3655168 ++read 2048/2048 bytes at offset 3655168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3659264 ++read 2048/2048 bytes at offset 3659264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3663360 ++read 2048/2048 bytes at offset 3663360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3667456 ++read 2048/2048 bytes at offset 3667456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671552 ++read 2048/2048 bytes at offset 3671552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675648 ++read 2048/2048 bytes at offset 3675648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679744 ++read 2048/2048 bytes at offset 3679744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683840 ++read 2048/2048 bytes at offset 3683840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687936 ++read 2048/2048 bytes at offset 3687936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3692032 ++read 2048/2048 bytes at offset 3692032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3696128 ++read 2048/2048 bytes at offset 3696128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3700224 ++read 2048/2048 bytes at offset 3700224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3704320 ++read 2048/2048 bytes at offset 3704320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3708416 ++read 2048/2048 bytes at offset 3708416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712512 ++read 2048/2048 bytes at offset 3712512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716608 ++read 2048/2048 bytes at offset 3716608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720704 ++read 2048/2048 bytes at offset 3720704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724800 ++read 2048/2048 bytes at offset 3724800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728896 ++read 2048/2048 bytes at offset 3728896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732992 ++read 2048/2048 bytes at offset 3732992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3737088 ++read 2048/2048 bytes at offset 3737088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3741184 ++read 2048/2048 bytes at offset 3741184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3745280 ++read 2048/2048 bytes at offset 3745280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3749376 ++read 2048/2048 bytes at offset 3749376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3753472 ++read 2048/2048 bytes at offset 3753472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757568 ++read 2048/2048 bytes at offset 3757568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761664 ++read 2048/2048 bytes at offset 3761664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765760 ++read 2048/2048 bytes at offset 3765760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769856 ++read 2048/2048 bytes at offset 3769856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773952 ++read 2048/2048 bytes at offset 3773952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3778048 ++read 2048/2048 bytes at offset 3778048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3782144 ++read 2048/2048 bytes at offset 3782144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3786240 ++read 2048/2048 bytes at offset 3786240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3790336 ++read 2048/2048 bytes at offset 3790336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3794432 ++read 2048/2048 bytes at offset 3794432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798528 ++read 2048/2048 bytes at offset 3798528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802624 ++read 2048/2048 bytes at offset 3802624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806720 ++read 2048/2048 bytes at offset 3806720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810816 ++read 2048/2048 bytes at offset 3810816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814912 ++read 2048/2048 bytes at offset 3814912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3819008 ++read 2048/2048 bytes at offset 3819008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3823104 ++read 2048/2048 bytes at offset 3823104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3827200 ++read 2048/2048 bytes at offset 3827200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3831296 ++read 2048/2048 bytes at offset 3831296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3835392 ++read 2048/2048 bytes at offset 3835392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3839488 ++read 2048/2048 bytes at offset 3839488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843584 ++read 2048/2048 bytes at offset 3843584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847680 ++read 2048/2048 bytes at offset 3847680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851776 ++read 2048/2048 bytes at offset 3851776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855872 ++read 2048/2048 bytes at offset 3855872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859968 ++read 2048/2048 bytes at offset 3859968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3864064 ++read 2048/2048 bytes at offset 3864064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3868160 ++read 2048/2048 bytes at offset 3868160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3872256 ++read 2048/2048 bytes at offset 3872256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3876352 ++read 2048/2048 bytes at offset 3876352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3880448 ++read 2048/2048 bytes at offset 3880448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884544 ++read 2048/2048 bytes at offset 3884544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888640 ++read 2048/2048 bytes at offset 3888640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892736 ++read 2048/2048 bytes at offset 3892736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896832 ++read 2048/2048 bytes at offset 3896832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900928 ++read 2048/2048 bytes at offset 3900928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3905024 ++read 2048/2048 bytes at offset 3905024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3909120 ++read 2048/2048 bytes at offset 3909120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3913216 ++read 2048/2048 bytes at offset 3913216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3917312 ++read 2048/2048 bytes at offset 3917312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3921408 ++read 2048/2048 bytes at offset 3921408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3925504 ++read 2048/2048 bytes at offset 3925504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929600 ++read 2048/2048 bytes at offset 3929600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933696 ++read 2048/2048 bytes at offset 3933696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937792 ++read 2048/2048 bytes at offset 3937792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941888 ++read 2048/2048 bytes at offset 3941888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945984 ++read 2048/2048 bytes at offset 3945984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3950080 ++read 2048/2048 bytes at offset 3950080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3954176 ++read 2048/2048 bytes at offset 3954176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3958272 ++read 2048/2048 bytes at offset 3958272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3962368 ++read 2048/2048 bytes at offset 3962368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3966464 ++read 2048/2048 bytes at offset 3966464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970560 ++read 2048/2048 bytes at offset 3970560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974656 ++read 2048/2048 bytes at offset 3974656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978752 ++read 2048/2048 bytes at offset 3978752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982848 ++read 2048/2048 bytes at offset 3982848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986944 ++read 2048/2048 bytes at offset 3986944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3991040 ++read 2048/2048 bytes at offset 3991040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3995136 ++read 2048/2048 bytes at offset 3995136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3999232 ++read 2048/2048 bytes at offset 3999232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4003328 ++read 2048/2048 bytes at offset 4003328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4007424 ++read 2048/2048 bytes at offset 4007424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011520 ++read 2048/2048 bytes at offset 4011520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015616 ++read 2048/2048 bytes at offset 4015616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019712 ++read 2048/2048 bytes at offset 4019712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023808 ++read 2048/2048 bytes at offset 4023808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027904 ++read 2048/2048 bytes at offset 4027904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4032000 ++read 2048/2048 bytes at offset 4032000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4036096 ++read 2048/2048 bytes at offset 4036096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4040192 ++read 2048/2048 bytes at offset 4040192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4044288 ++read 2048/2048 bytes at offset 4044288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4048384 ++read 2048/2048 bytes at offset 4048384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4052480 ++read 2048/2048 bytes at offset 4052480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056576 ++read 2048/2048 bytes at offset 4056576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060672 ++read 2048/2048 bytes at offset 4060672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064768 ++read 2048/2048 bytes at offset 4064768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068864 ++read 2048/2048 bytes at offset 4068864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072960 ++read 2048/2048 bytes at offset 4072960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4077056 ++read 2048/2048 bytes at offset 4077056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4081152 ++read 2048/2048 bytes at offset 4081152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4085248 ++read 2048/2048 bytes at offset 4085248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4089344 ++read 2048/2048 bytes at offset 4089344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4093440 ++read 2048/2048 bytes at offset 4093440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097536 ++read 2048/2048 bytes at offset 4097536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101632 ++read 2048/2048 bytes at offset 4101632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105728 ++read 2048/2048 bytes at offset 4105728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109824 ++read 2048/2048 bytes at offset 4109824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113920 ++read 2048/2048 bytes at offset 4113920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4118016 ++read 2048/2048 bytes at offset 4118016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4122112 ++read 2048/2048 bytes at offset 4122112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4126208 ++read 2048/2048 bytes at offset 4126208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4130304 ++read 2048/2048 bytes at offset 4130304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4134400 ++read 2048/2048 bytes at offset 4134400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4138496 ++read 2048/2048 bytes at offset 4138496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142592 ++read 2048/2048 bytes at offset 4142592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146688 ++read 2048/2048 bytes at offset 4146688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150784 ++read 2048/2048 bytes at offset 4150784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154880 ++read 2048/2048 bytes at offset 4154880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158976 ++read 2048/2048 bytes at offset 4158976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4163072 ++read 2048/2048 bytes at offset 4163072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4167168 ++read 2048/2048 bytes at offset 4167168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4171264 ++read 2048/2048 bytes at offset 4171264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4175360 ++read 2048/2048 bytes at offset 4175360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4179456 ++read 2048/2048 bytes at offset 4179456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183552 ++read 2048/2048 bytes at offset 4183552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187648 ++read 2048/2048 bytes at offset 4187648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191744 ++read 2048/2048 bytes at offset 4191744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 8192/8192 bytes at offset 4196864 ++=== IO: pattern 5 ++read 8192/8192 bytes at offset 4196864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4209152 ++read 8192/8192 bytes at offset 4209152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4221440 ++read 8192/8192 bytes at offset 4221440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233728 ++read 8192/8192 bytes at offset 4233728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4246016 ++read 8192/8192 bytes at offset 4246016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4258304 ++read 8192/8192 bytes at offset 4258304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270592 ++read 8192/8192 bytes at offset 4270592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282880 ++read 8192/8192 bytes at offset 4282880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295168 ++read 8192/8192 bytes at offset 4295168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4307456 ++read 8192/8192 bytes at offset 4307456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319744 ++read 8192/8192 bytes at offset 4319744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4332032 ++read 8192/8192 bytes at offset 4332032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4344320 ++read 8192/8192 bytes at offset 4344320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356608 ++read 8192/8192 bytes at offset 4356608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368896 ++read 8192/8192 bytes at offset 4368896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4381184 ++read 8192/8192 bytes at offset 4381184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4393472 ++read 8192/8192 bytes at offset 4393472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405760 ++read 8192/8192 bytes at offset 4405760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4418048 ++read 8192/8192 bytes at offset 4418048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4430336 ++read 8192/8192 bytes at offset 4430336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442624 ++read 8192/8192 bytes at offset 4442624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454912 ++read 8192/8192 bytes at offset 4454912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4467200 ++read 8192/8192 bytes at offset 4467200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4479488 ++read 8192/8192 bytes at offset 4479488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491776 ++read 8192/8192 bytes at offset 4491776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4504064 ++read 8192/8192 bytes at offset 4504064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4516352 ++read 8192/8192 bytes at offset 4516352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528640 ++read 8192/8192 bytes at offset 4528640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540928 ++read 8192/8192 bytes at offset 4540928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4553216 ++read 8192/8192 bytes at offset 4553216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4565504 ++read 8192/8192 bytes at offset 4565504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577792 ++read 8192/8192 bytes at offset 4577792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4590080 ++read 8192/8192 bytes at offset 4590080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4602368 ++read 8192/8192 bytes at offset 4602368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614656 ++read 8192/8192 bytes at offset 4614656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626944 ++read 8192/8192 bytes at offset 4626944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4639232 ++read 8192/8192 bytes at offset 4639232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651520 ++read 8192/8192 bytes at offset 4651520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663808 ++read 8192/8192 bytes at offset 4663808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4676096 ++read 8192/8192 bytes at offset 4676096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4688384 ++read 8192/8192 bytes at offset 4688384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700672 ++read 8192/8192 bytes at offset 4700672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712960 ++read 8192/8192 bytes at offset 4712960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4725248 ++read 8192/8192 bytes at offset 4725248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737536 ++read 8192/8192 bytes at offset 4737536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749824 ++read 8192/8192 bytes at offset 4749824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4762112 ++read 8192/8192 bytes at offset 4762112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4774400 ++read 8192/8192 bytes at offset 4774400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786688 ++read 8192/8192 bytes at offset 4786688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798976 ++read 8192/8192 bytes at offset 4798976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4811264 ++read 8192/8192 bytes at offset 4811264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823552 ++read 8192/8192 bytes at offset 4823552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835840 ++read 8192/8192 bytes at offset 4835840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4848128 ++read 8192/8192 bytes at offset 4848128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4860416 ++read 8192/8192 bytes at offset 4860416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872704 ++read 8192/8192 bytes at offset 4872704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884992 ++read 8192/8192 bytes at offset 4884992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4897280 ++read 8192/8192 bytes at offset 4897280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909568 ++read 8192/8192 bytes at offset 4909568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921856 ++read 8192/8192 bytes at offset 4921856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4934144 ++read 8192/8192 bytes at offset 4934144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4946432 ++read 8192/8192 bytes at offset 4946432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958720 ++read 8192/8192 bytes at offset 4958720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4971008 ++read 8192/8192 bytes at offset 4971008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967808: + === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 4294967808 ++wrote 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971904 ++wrote 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294976000 ++wrote 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294980096 ++wrote 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294984192 ++wrote 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294988288 ++wrote 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294992384 ++wrote 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294996480 ++wrote 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000576 ++wrote 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004672 ++wrote 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008768 ++wrote 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012864 ++wrote 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016960 ++wrote 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295021056 ++wrote 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295025152 ++wrote 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295029248 ++wrote 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295033344 ++wrote 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295037440 ++wrote 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041536 ++wrote 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045632 ++wrote 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049728 ++wrote 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053824 ++wrote 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057920 ++wrote 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295062016 ++wrote 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295066112 ++wrote 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295070208 ++wrote 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295074304 ++wrote 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295078400 ++wrote 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295082496 ++wrote 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086592 ++wrote 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090688 ++wrote 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094784 ++wrote 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098880 ++wrote 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102976 ++wrote 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295107072 ++wrote 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295111168 ++wrote 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295115264 ++wrote 4096/4096 bytes at offset 4295115264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295119360 ++wrote 4096/4096 bytes at offset 4295119360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295123456 ++wrote 4096/4096 bytes at offset 4295123456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127552 ++wrote 4096/4096 bytes at offset 4295127552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131648 ++wrote 4096/4096 bytes at offset 4295131648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135744 ++wrote 4096/4096 bytes at offset 4295135744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139840 ++wrote 4096/4096 bytes at offset 4295139840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143936 ++wrote 4096/4096 bytes at offset 4295143936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295148032 ++wrote 4096/4096 bytes at offset 4295148032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295152128 ++wrote 4096/4096 bytes at offset 4295152128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295156224 ++wrote 4096/4096 bytes at offset 4295156224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295160320 ++wrote 4096/4096 bytes at offset 4295160320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295164416 ++wrote 4096/4096 bytes at offset 4295164416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168512 ++wrote 4096/4096 bytes at offset 4295168512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172608 ++wrote 4096/4096 bytes at offset 4295172608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176704 ++wrote 4096/4096 bytes at offset 4295176704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180800 ++wrote 4096/4096 bytes at offset 4295180800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184896 ++wrote 4096/4096 bytes at offset 4295184896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188992 ++wrote 4096/4096 bytes at offset 4295188992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295193088 ++wrote 4096/4096 bytes at offset 4295193088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295197184 ++wrote 4096/4096 bytes at offset 4295197184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295201280 ++wrote 4096/4096 bytes at offset 4295201280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295205376 ++wrote 4096/4096 bytes at offset 4295205376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295209472 ++wrote 4096/4096 bytes at offset 4295209472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213568 ++wrote 4096/4096 bytes at offset 4295213568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217664 ++wrote 4096/4096 bytes at offset 4295217664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221760 ++wrote 4096/4096 bytes at offset 4295221760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225856 ++wrote 4096/4096 bytes at offset 4295225856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229952 ++wrote 4096/4096 bytes at offset 4295229952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295234048 ++wrote 4096/4096 bytes at offset 4295234048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295238144 ++wrote 4096/4096 bytes at offset 4295238144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295242240 ++wrote 4096/4096 bytes at offset 4295242240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295246336 ++wrote 4096/4096 bytes at offset 4295246336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295250432 ++wrote 4096/4096 bytes at offset 4295250432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254528 ++wrote 4096/4096 bytes at offset 4295254528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258624 ++wrote 4096/4096 bytes at offset 4295258624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262720 ++wrote 4096/4096 bytes at offset 4295262720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266816 ++wrote 4096/4096 bytes at offset 4295266816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270912 ++wrote 4096/4096 bytes at offset 4295270912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295275008 ++wrote 4096/4096 bytes at offset 4295275008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295279104 ++wrote 4096/4096 bytes at offset 4295279104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295283200 ++wrote 4096/4096 bytes at offset 4295283200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295287296 ++wrote 4096/4096 bytes at offset 4295287296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295291392 ++wrote 4096/4096 bytes at offset 4295291392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295295488 ++wrote 4096/4096 bytes at offset 4295295488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299584 ++wrote 4096/4096 bytes at offset 4295299584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303680 ++wrote 4096/4096 bytes at offset 4295303680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307776 ++wrote 4096/4096 bytes at offset 4295307776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311872 ++wrote 4096/4096 bytes at offset 4295311872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315968 ++wrote 4096/4096 bytes at offset 4295315968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295320064 ++wrote 4096/4096 bytes at offset 4295320064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295324160 ++wrote 4096/4096 bytes at offset 4295324160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295328256 ++wrote 4096/4096 bytes at offset 4295328256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295332352 ++wrote 4096/4096 bytes at offset 4295332352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295336448 ++wrote 4096/4096 bytes at offset 4295336448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340544 ++wrote 4096/4096 bytes at offset 4295340544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344640 ++wrote 4096/4096 bytes at offset 4295344640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348736 ++wrote 4096/4096 bytes at offset 4295348736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352832 ++wrote 4096/4096 bytes at offset 4295352832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356928 ++wrote 4096/4096 bytes at offset 4295356928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295361024 ++wrote 4096/4096 bytes at offset 4295361024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295365120 ++wrote 4096/4096 bytes at offset 4295365120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295369216 ++wrote 4096/4096 bytes at offset 4295369216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295373312 ++wrote 4096/4096 bytes at offset 4295373312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295377408 ++wrote 4096/4096 bytes at offset 4295377408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295381504 ++wrote 4096/4096 bytes at offset 4295381504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385600 ++wrote 4096/4096 bytes at offset 4295385600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389696 ++wrote 4096/4096 bytes at offset 4295389696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393792 ++wrote 4096/4096 bytes at offset 4295393792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397888 ++wrote 4096/4096 bytes at offset 4295397888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401984 ++wrote 4096/4096 bytes at offset 4295401984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295406080 ++wrote 4096/4096 bytes at offset 4295406080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295410176 ++wrote 4096/4096 bytes at offset 4295410176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295414272 ++wrote 4096/4096 bytes at offset 4295414272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295418368 ++wrote 4096/4096 bytes at offset 4295418368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295422464 ++wrote 4096/4096 bytes at offset 4295422464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426560 ++wrote 4096/4096 bytes at offset 4295426560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430656 ++wrote 4096/4096 bytes at offset 4295430656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434752 ++wrote 4096/4096 bytes at offset 4295434752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438848 ++wrote 4096/4096 bytes at offset 4295438848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442944 ++wrote 4096/4096 bytes at offset 4295442944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295447040 ++wrote 4096/4096 bytes at offset 4295447040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295451136 ++wrote 4096/4096 bytes at offset 4295451136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295455232 ++wrote 4096/4096 bytes at offset 4295455232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295459328 ++wrote 4096/4096 bytes at offset 4295459328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295463424 ++wrote 4096/4096 bytes at offset 4295463424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467520 ++wrote 4096/4096 bytes at offset 4295467520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471616 ++wrote 4096/4096 bytes at offset 4295471616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475712 ++wrote 4096/4096 bytes at offset 4295475712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479808 ++wrote 4096/4096 bytes at offset 4295479808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483904 ++wrote 4096/4096 bytes at offset 4295483904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295488000 ++wrote 4096/4096 bytes at offset 4295488000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295492096 ++wrote 4096/4096 bytes at offset 4295492096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295496192 ++wrote 4096/4096 bytes at offset 4295496192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295500288 ++wrote 4096/4096 bytes at offset 4295500288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295504384 ++wrote 4096/4096 bytes at offset 4295504384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295508480 ++wrote 4096/4096 bytes at offset 4295508480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512576 ++wrote 4096/4096 bytes at offset 4295512576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516672 ++wrote 4096/4096 bytes at offset 4295516672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520768 ++wrote 4096/4096 bytes at offset 4295520768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524864 ++wrote 4096/4096 bytes at offset 4295524864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528960 ++wrote 4096/4096 bytes at offset 4295528960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295533056 ++wrote 4096/4096 bytes at offset 4295533056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295537152 ++wrote 4096/4096 bytes at offset 4295537152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295541248 ++wrote 4096/4096 bytes at offset 4295541248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295545344 ++wrote 4096/4096 bytes at offset 4295545344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295549440 ++wrote 4096/4096 bytes at offset 4295549440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553536 ++wrote 4096/4096 bytes at offset 4295553536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557632 ++wrote 4096/4096 bytes at offset 4295557632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561728 ++wrote 4096/4096 bytes at offset 4295561728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565824 ++wrote 4096/4096 bytes at offset 4295565824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569920 ++wrote 4096/4096 bytes at offset 4295569920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295574016 ++wrote 4096/4096 bytes at offset 4295574016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295578112 ++wrote 4096/4096 bytes at offset 4295578112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295582208 ++wrote 4096/4096 bytes at offset 4295582208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295586304 ++wrote 4096/4096 bytes at offset 4295586304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295590400 ++wrote 4096/4096 bytes at offset 4295590400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295594496 ++wrote 4096/4096 bytes at offset 4295594496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598592 ++wrote 4096/4096 bytes at offset 4295598592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602688 ++wrote 4096/4096 bytes at offset 4295602688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606784 ++wrote 4096/4096 bytes at offset 4295606784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610880 ++wrote 4096/4096 bytes at offset 4295610880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614976 ++wrote 4096/4096 bytes at offset 4295614976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295619072 ++wrote 4096/4096 bytes at offset 4295619072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295623168 ++wrote 4096/4096 bytes at offset 4295623168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295627264 ++wrote 4096/4096 bytes at offset 4295627264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295631360 ++wrote 4096/4096 bytes at offset 4295631360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295635456 ++wrote 4096/4096 bytes at offset 4295635456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639552 ++wrote 4096/4096 bytes at offset 4295639552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643648 ++wrote 4096/4096 bytes at offset 4295643648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647744 ++wrote 4096/4096 bytes at offset 4295647744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651840 ++wrote 4096/4096 bytes at offset 4295651840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655936 ++wrote 4096/4096 bytes at offset 4295655936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295660032 ++wrote 4096/4096 bytes at offset 4295660032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295664128 ++wrote 4096/4096 bytes at offset 4295664128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295668224 ++wrote 4096/4096 bytes at offset 4295668224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295672320 ++wrote 4096/4096 bytes at offset 4295672320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295676416 ++wrote 4096/4096 bytes at offset 4295676416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680512 ++wrote 4096/4096 bytes at offset 4295680512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684608 ++wrote 4096/4096 bytes at offset 4295684608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688704 ++wrote 4096/4096 bytes at offset 4295688704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692800 ++wrote 4096/4096 bytes at offset 4295692800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696896 ++wrote 4096/4096 bytes at offset 4295696896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700992 ++wrote 4096/4096 bytes at offset 4295700992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295705088 ++wrote 4096/4096 bytes at offset 4295705088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295709184 ++wrote 4096/4096 bytes at offset 4295709184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295713280 ++wrote 4096/4096 bytes at offset 4295713280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295717376 ++wrote 4096/4096 bytes at offset 4295717376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295721472 ++wrote 4096/4096 bytes at offset 4295721472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725568 ++wrote 4096/4096 bytes at offset 4295725568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729664 ++wrote 4096/4096 bytes at offset 4295729664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733760 ++wrote 4096/4096 bytes at offset 4295733760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737856 ++wrote 4096/4096 bytes at offset 4295737856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741952 ++wrote 4096/4096 bytes at offset 4295741952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295746048 ++wrote 4096/4096 bytes at offset 4295746048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295750144 ++wrote 4096/4096 bytes at offset 4295750144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295754240 ++wrote 4096/4096 bytes at offset 4295754240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295758336 ++wrote 4096/4096 bytes at offset 4295758336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295762432 ++wrote 4096/4096 bytes at offset 4295762432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766528 ++wrote 4096/4096 bytes at offset 4295766528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770624 ++wrote 4096/4096 bytes at offset 4295770624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774720 ++wrote 4096/4096 bytes at offset 4295774720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778816 ++wrote 4096/4096 bytes at offset 4295778816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782912 ++wrote 4096/4096 bytes at offset 4295782912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295787008 ++wrote 4096/4096 bytes at offset 4295787008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295791104 ++wrote 4096/4096 bytes at offset 4295791104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295795200 ++wrote 4096/4096 bytes at offset 4295795200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295799296 ++wrote 4096/4096 bytes at offset 4295799296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295803392 ++wrote 4096/4096 bytes at offset 4295803392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295807488 ++wrote 4096/4096 bytes at offset 4295807488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811584 ++wrote 4096/4096 bytes at offset 4295811584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815680 ++wrote 4096/4096 bytes at offset 4295815680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819776 ++wrote 4096/4096 bytes at offset 4295819776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823872 ++wrote 4096/4096 bytes at offset 4295823872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827968 ++wrote 4096/4096 bytes at offset 4295827968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295832064 ++wrote 4096/4096 bytes at offset 4295832064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295836160 ++wrote 4096/4096 bytes at offset 4295836160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295840256 ++wrote 4096/4096 bytes at offset 4295840256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295844352 ++wrote 4096/4096 bytes at offset 4295844352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295848448 ++wrote 4096/4096 bytes at offset 4295848448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852544 ++wrote 4096/4096 bytes at offset 4295852544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856640 ++wrote 4096/4096 bytes at offset 4295856640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860736 ++wrote 4096/4096 bytes at offset 4295860736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864832 ++wrote 4096/4096 bytes at offset 4295864832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868928 ++wrote 4096/4096 bytes at offset 4295868928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295873024 ++wrote 4096/4096 bytes at offset 4295873024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295877120 ++wrote 4096/4096 bytes at offset 4295877120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295881216 ++wrote 4096/4096 bytes at offset 4295881216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295885312 ++wrote 4096/4096 bytes at offset 4295885312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295889408 ++wrote 4096/4096 bytes at offset 4295889408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295893504 ++wrote 4096/4096 bytes at offset 4295893504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897600 ++wrote 4096/4096 bytes at offset 4295897600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901696 ++wrote 4096/4096 bytes at offset 4295901696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905792 ++wrote 4096/4096 bytes at offset 4295905792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909888 ++wrote 4096/4096 bytes at offset 4295909888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913984 ++wrote 4096/4096 bytes at offset 4295913984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295918080 ++wrote 4096/4096 bytes at offset 4295918080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295922176 ++wrote 4096/4096 bytes at offset 4295922176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295926272 ++wrote 4096/4096 bytes at offset 4295926272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295930368 ++wrote 4096/4096 bytes at offset 4295930368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295934464 ++wrote 4096/4096 bytes at offset 4295934464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938560 ++wrote 4096/4096 bytes at offset 4295938560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942656 ++wrote 4096/4096 bytes at offset 4295942656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946752 ++wrote 4096/4096 bytes at offset 4295946752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950848 ++wrote 4096/4096 bytes at offset 4295950848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954944 ++wrote 4096/4096 bytes at offset 4295954944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295959040 ++wrote 4096/4096 bytes at offset 4295959040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295963136 ++wrote 4096/4096 bytes at offset 4295963136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295967232 ++wrote 4096/4096 bytes at offset 4295967232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295971328 ++wrote 4096/4096 bytes at offset 4295971328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295975424 ++wrote 4096/4096 bytes at offset 4295975424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979520 ++wrote 4096/4096 bytes at offset 4295979520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983616 ++wrote 4096/4096 bytes at offset 4295983616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987712 ++wrote 4096/4096 bytes at offset 4295987712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991808 ++wrote 4096/4096 bytes at offset 4295991808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995904 ++wrote 4096/4096 bytes at offset 4295995904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296000000 ++wrote 4096/4096 bytes at offset 4296000000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296004096 ++wrote 4096/4096 bytes at offset 4296004096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296008192 ++wrote 4096/4096 bytes at offset 4296008192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296012288 ++wrote 4096/4096 bytes at offset 4296012288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 2048/2048 bytes at offset 4296018432 ++=== IO: pattern 5 ++wrote 2048/2048 bytes at offset 4296018432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022528 ++wrote 2048/2048 bytes at offset 4296022528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026624 ++wrote 2048/2048 bytes at offset 4296026624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030720 ++wrote 2048/2048 bytes at offset 4296030720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034816 ++wrote 2048/2048 bytes at offset 4296034816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038912 ++wrote 2048/2048 bytes at offset 4296038912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296043008 ++wrote 2048/2048 bytes at offset 4296043008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296047104 ++wrote 2048/2048 bytes at offset 4296047104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296051200 ++wrote 2048/2048 bytes at offset 4296051200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296055296 ++wrote 2048/2048 bytes at offset 4296055296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296059392 ++wrote 2048/2048 bytes at offset 4296059392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296063488 ++wrote 2048/2048 bytes at offset 4296063488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067584 ++wrote 2048/2048 bytes at offset 4296067584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071680 ++wrote 2048/2048 bytes at offset 4296071680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075776 ++wrote 2048/2048 bytes at offset 4296075776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079872 ++wrote 2048/2048 bytes at offset 4296079872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083968 ++wrote 2048/2048 bytes at offset 4296083968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296088064 ++wrote 2048/2048 bytes at offset 4296088064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296092160 ++wrote 2048/2048 bytes at offset 4296092160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296096256 ++wrote 2048/2048 bytes at offset 4296096256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296100352 ++wrote 2048/2048 bytes at offset 4296100352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296104448 ++wrote 2048/2048 bytes at offset 4296104448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108544 ++wrote 2048/2048 bytes at offset 4296108544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112640 ++wrote 2048/2048 bytes at offset 4296112640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116736 ++wrote 2048/2048 bytes at offset 4296116736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120832 ++wrote 2048/2048 bytes at offset 4296120832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124928 ++wrote 2048/2048 bytes at offset 4296124928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296129024 ++wrote 2048/2048 bytes at offset 4296129024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296133120 ++wrote 2048/2048 bytes at offset 4296133120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296137216 ++wrote 2048/2048 bytes at offset 4296137216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296141312 ++wrote 2048/2048 bytes at offset 4296141312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296145408 ++wrote 2048/2048 bytes at offset 4296145408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296149504 ++wrote 2048/2048 bytes at offset 4296149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153600 ++wrote 2048/2048 bytes at offset 4296153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157696 ++wrote 2048/2048 bytes at offset 4296157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161792 ++wrote 2048/2048 bytes at offset 4296161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165888 ++wrote 2048/2048 bytes at offset 4296165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169984 ++wrote 2048/2048 bytes at offset 4296169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296174080 ++wrote 2048/2048 bytes at offset 4296174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296178176 ++wrote 2048/2048 bytes at offset 4296178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296182272 ++wrote 2048/2048 bytes at offset 4296182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296186368 ++wrote 2048/2048 bytes at offset 4296186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296190464 ++wrote 2048/2048 bytes at offset 4296190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194560 ++wrote 2048/2048 bytes at offset 4296194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198656 ++wrote 2048/2048 bytes at offset 4296198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202752 ++wrote 2048/2048 bytes at offset 4296202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206848 ++wrote 2048/2048 bytes at offset 4296206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210944 ++wrote 2048/2048 bytes at offset 4296210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296215040 ++wrote 2048/2048 bytes at offset 4296215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296219136 ++wrote 2048/2048 bytes at offset 4296219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296223232 ++wrote 2048/2048 bytes at offset 4296223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296227328 ++wrote 2048/2048 bytes at offset 4296227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296231424 ++wrote 2048/2048 bytes at offset 4296231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235520 ++wrote 2048/2048 bytes at offset 4296235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239616 ++wrote 2048/2048 bytes at offset 4296239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243712 ++wrote 2048/2048 bytes at offset 4296243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247808 ++wrote 2048/2048 bytes at offset 4296247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251904 ++wrote 2048/2048 bytes at offset 4296251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296256000 ++wrote 2048/2048 bytes at offset 4296256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296260096 ++wrote 2048/2048 bytes at offset 4296260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296264192 ++wrote 2048/2048 bytes at offset 4296264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296268288 ++wrote 2048/2048 bytes at offset 4296268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296272384 ++wrote 2048/2048 bytes at offset 4296272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296276480 ++wrote 2048/2048 bytes at offset 4296276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280576 ++wrote 2048/2048 bytes at offset 4296280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284672 ++wrote 2048/2048 bytes at offset 4296284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288768 ++wrote 2048/2048 bytes at offset 4296288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292864 ++wrote 2048/2048 bytes at offset 4296292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296960 ++wrote 2048/2048 bytes at offset 4296296960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296301056 ++wrote 2048/2048 bytes at offset 4296301056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296305152 ++wrote 2048/2048 bytes at offset 4296305152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296309248 ++wrote 2048/2048 bytes at offset 4296309248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296313344 ++wrote 2048/2048 bytes at offset 4296313344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296317440 ++wrote 2048/2048 bytes at offset 4296317440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321536 ++wrote 2048/2048 bytes at offset 4296321536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325632 ++wrote 2048/2048 bytes at offset 4296325632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329728 ++wrote 2048/2048 bytes at offset 4296329728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333824 ++wrote 2048/2048 bytes at offset 4296333824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337920 ++wrote 2048/2048 bytes at offset 4296337920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296342016 ++wrote 2048/2048 bytes at offset 4296342016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296346112 ++wrote 2048/2048 bytes at offset 4296346112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296350208 ++wrote 2048/2048 bytes at offset 4296350208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296354304 ++wrote 2048/2048 bytes at offset 4296354304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296358400 ++wrote 2048/2048 bytes at offset 4296358400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296362496 ++wrote 2048/2048 bytes at offset 4296362496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366592 ++wrote 2048/2048 bytes at offset 4296366592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370688 ++wrote 2048/2048 bytes at offset 4296370688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374784 ++wrote 2048/2048 bytes at offset 4296374784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378880 ++wrote 2048/2048 bytes at offset 4296378880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382976 ++wrote 2048/2048 bytes at offset 4296382976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296387072 ++wrote 2048/2048 bytes at offset 4296387072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296391168 ++wrote 2048/2048 bytes at offset 4296391168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296395264 ++wrote 2048/2048 bytes at offset 4296395264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296399360 ++wrote 2048/2048 bytes at offset 4296399360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296403456 ++wrote 2048/2048 bytes at offset 4296403456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407552 ++wrote 2048/2048 bytes at offset 4296407552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411648 ++wrote 2048/2048 bytes at offset 4296411648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415744 ++wrote 2048/2048 bytes at offset 4296415744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419840 ++wrote 2048/2048 bytes at offset 4296419840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423936 ++wrote 2048/2048 bytes at offset 4296423936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296428032 ++wrote 2048/2048 bytes at offset 4296428032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296432128 ++wrote 2048/2048 bytes at offset 4296432128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296436224 ++wrote 2048/2048 bytes at offset 4296436224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296440320 ++wrote 2048/2048 bytes at offset 4296440320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296444416 ++wrote 2048/2048 bytes at offset 4296444416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448512 ++wrote 2048/2048 bytes at offset 4296448512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452608 ++wrote 2048/2048 bytes at offset 4296452608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456704 ++wrote 2048/2048 bytes at offset 4296456704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460800 ++wrote 2048/2048 bytes at offset 4296460800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464896 ++wrote 2048/2048 bytes at offset 4296464896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468992 ++wrote 2048/2048 bytes at offset 4296468992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296473088 ++wrote 2048/2048 bytes at offset 4296473088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296477184 ++wrote 2048/2048 bytes at offset 4296477184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296481280 ++wrote 2048/2048 bytes at offset 4296481280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296485376 ++wrote 2048/2048 bytes at offset 4296485376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296489472 ++wrote 2048/2048 bytes at offset 4296489472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493568 ++wrote 2048/2048 bytes at offset 4296493568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497664 ++wrote 2048/2048 bytes at offset 4296497664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501760 ++wrote 2048/2048 bytes at offset 4296501760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505856 ++wrote 2048/2048 bytes at offset 4296505856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509952 ++wrote 2048/2048 bytes at offset 4296509952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296514048 ++wrote 2048/2048 bytes at offset 4296514048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296518144 ++wrote 2048/2048 bytes at offset 4296518144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296522240 ++wrote 2048/2048 bytes at offset 4296522240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296526336 ++wrote 2048/2048 bytes at offset 4296526336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296530432 ++wrote 2048/2048 bytes at offset 4296530432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534528 ++wrote 2048/2048 bytes at offset 4296534528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538624 ++wrote 2048/2048 bytes at offset 4296538624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542720 ++wrote 2048/2048 bytes at offset 4296542720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546816 ++wrote 2048/2048 bytes at offset 4296546816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550912 ++wrote 2048/2048 bytes at offset 4296550912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296555008 ++wrote 2048/2048 bytes at offset 4296555008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296559104 ++wrote 2048/2048 bytes at offset 4296559104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296563200 ++wrote 2048/2048 bytes at offset 4296563200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296567296 ++wrote 2048/2048 bytes at offset 4296567296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296571392 ++wrote 2048/2048 bytes at offset 4296571392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296575488 ++wrote 2048/2048 bytes at offset 4296575488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579584 ++wrote 2048/2048 bytes at offset 4296579584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583680 ++wrote 2048/2048 bytes at offset 4296583680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587776 ++wrote 2048/2048 bytes at offset 4296587776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591872 ++wrote 2048/2048 bytes at offset 4296591872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595968 ++wrote 2048/2048 bytes at offset 4296595968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296600064 ++wrote 2048/2048 bytes at offset 4296600064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296604160 ++wrote 2048/2048 bytes at offset 4296604160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296608256 ++wrote 2048/2048 bytes at offset 4296608256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296612352 ++wrote 2048/2048 bytes at offset 4296612352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296616448 ++wrote 2048/2048 bytes at offset 4296616448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620544 ++wrote 2048/2048 bytes at offset 4296620544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624640 ++wrote 2048/2048 bytes at offset 4296624640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628736 ++wrote 2048/2048 bytes at offset 4296628736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632832 ++wrote 2048/2048 bytes at offset 4296632832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636928 ++wrote 2048/2048 bytes at offset 4296636928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296641024 ++wrote 2048/2048 bytes at offset 4296641024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296645120 ++wrote 2048/2048 bytes at offset 4296645120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296649216 ++wrote 2048/2048 bytes at offset 4296649216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296653312 ++wrote 2048/2048 bytes at offset 4296653312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296657408 ++wrote 2048/2048 bytes at offset 4296657408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296661504 ++wrote 2048/2048 bytes at offset 4296661504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665600 ++wrote 2048/2048 bytes at offset 4296665600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669696 ++wrote 2048/2048 bytes at offset 4296669696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673792 ++wrote 2048/2048 bytes at offset 4296673792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677888 ++wrote 2048/2048 bytes at offset 4296677888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681984 ++wrote 2048/2048 bytes at offset 4296681984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296686080 ++wrote 2048/2048 bytes at offset 4296686080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296690176 ++wrote 2048/2048 bytes at offset 4296690176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296694272 ++wrote 2048/2048 bytes at offset 4296694272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296698368 ++wrote 2048/2048 bytes at offset 4296698368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296702464 ++wrote 2048/2048 bytes at offset 4296702464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706560 ++wrote 2048/2048 bytes at offset 4296706560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710656 ++wrote 2048/2048 bytes at offset 4296710656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714752 ++wrote 2048/2048 bytes at offset 4296714752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718848 ++wrote 2048/2048 bytes at offset 4296718848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722944 ++wrote 2048/2048 bytes at offset 4296722944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296727040 ++wrote 2048/2048 bytes at offset 4296727040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296731136 ++wrote 2048/2048 bytes at offset 4296731136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296735232 ++wrote 2048/2048 bytes at offset 4296735232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296739328 ++wrote 2048/2048 bytes at offset 4296739328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296743424 ++wrote 2048/2048 bytes at offset 4296743424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747520 ++wrote 2048/2048 bytes at offset 4296747520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751616 ++wrote 2048/2048 bytes at offset 4296751616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755712 ++wrote 2048/2048 bytes at offset 4296755712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759808 ++wrote 2048/2048 bytes at offset 4296759808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763904 ++wrote 2048/2048 bytes at offset 4296763904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296768000 ++wrote 2048/2048 bytes at offset 4296768000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296772096 ++wrote 2048/2048 bytes at offset 4296772096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296776192 ++wrote 2048/2048 bytes at offset 4296776192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296780288 ++wrote 2048/2048 bytes at offset 4296780288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296784384 ++wrote 2048/2048 bytes at offset 4296784384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296788480 ++wrote 2048/2048 bytes at offset 4296788480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792576 ++wrote 2048/2048 bytes at offset 4296792576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796672 ++wrote 2048/2048 bytes at offset 4296796672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800768 ++wrote 2048/2048 bytes at offset 4296800768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804864 ++wrote 2048/2048 bytes at offset 4296804864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808960 ++wrote 2048/2048 bytes at offset 4296808960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296813056 ++wrote 2048/2048 bytes at offset 4296813056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296817152 ++wrote 2048/2048 bytes at offset 4296817152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296821248 ++wrote 2048/2048 bytes at offset 4296821248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296825344 ++wrote 2048/2048 bytes at offset 4296825344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296829440 ++wrote 2048/2048 bytes at offset 4296829440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833536 ++wrote 2048/2048 bytes at offset 4296833536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837632 ++wrote 2048/2048 bytes at offset 4296837632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841728 ++wrote 2048/2048 bytes at offset 4296841728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845824 ++wrote 2048/2048 bytes at offset 4296845824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849920 ++wrote 2048/2048 bytes at offset 4296849920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296854016 ++wrote 2048/2048 bytes at offset 4296854016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296858112 ++wrote 2048/2048 bytes at offset 4296858112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296862208 ++wrote 2048/2048 bytes at offset 4296862208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296866304 ++wrote 2048/2048 bytes at offset 4296866304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296870400 ++wrote 2048/2048 bytes at offset 4296870400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296874496 ++wrote 2048/2048 bytes at offset 4296874496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878592 ++wrote 2048/2048 bytes at offset 4296878592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882688 ++wrote 2048/2048 bytes at offset 4296882688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886784 ++wrote 2048/2048 bytes at offset 4296886784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890880 ++wrote 2048/2048 bytes at offset 4296890880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894976 ++wrote 2048/2048 bytes at offset 4296894976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296899072 ++wrote 2048/2048 bytes at offset 4296899072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296903168 ++wrote 2048/2048 bytes at offset 4296903168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296907264 ++wrote 2048/2048 bytes at offset 4296907264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296911360 ++wrote 2048/2048 bytes at offset 4296911360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296915456 ++wrote 2048/2048 bytes at offset 4296915456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919552 ++wrote 2048/2048 bytes at offset 4296919552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923648 ++wrote 2048/2048 bytes at offset 4296923648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927744 ++wrote 2048/2048 bytes at offset 4296927744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931840 ++wrote 2048/2048 bytes at offset 4296931840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935936 ++wrote 2048/2048 bytes at offset 4296935936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296940032 ++wrote 2048/2048 bytes at offset 4296940032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296944128 ++wrote 2048/2048 bytes at offset 4296944128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296948224 ++wrote 2048/2048 bytes at offset 4296948224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296952320 ++wrote 2048/2048 bytes at offset 4296952320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296956416 ++wrote 2048/2048 bytes at offset 4296956416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960512 ++wrote 2048/2048 bytes at offset 4296960512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964608 ++wrote 2048/2048 bytes at offset 4296964608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968704 ++wrote 2048/2048 bytes at offset 4296968704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972800 ++wrote 2048/2048 bytes at offset 4296972800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976896 ++wrote 2048/2048 bytes at offset 4296976896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980992 ++wrote 2048/2048 bytes at offset 4296980992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296985088 ++wrote 2048/2048 bytes at offset 4296985088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296989184 ++wrote 2048/2048 bytes at offset 4296989184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296993280 ++wrote 2048/2048 bytes at offset 4296993280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296997376 ++wrote 2048/2048 bytes at offset 4296997376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297001472 ++wrote 2048/2048 bytes at offset 4297001472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005568 ++wrote 2048/2048 bytes at offset 4297005568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009664 ++wrote 2048/2048 bytes at offset 4297009664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013760 ++wrote 2048/2048 bytes at offset 4297013760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017856 ++wrote 2048/2048 bytes at offset 4297017856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021952 ++wrote 2048/2048 bytes at offset 4297021952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297026048 ++wrote 2048/2048 bytes at offset 4297026048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297030144 ++wrote 2048/2048 bytes at offset 4297030144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297034240 ++wrote 2048/2048 bytes at offset 4297034240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297038336 ++wrote 2048/2048 bytes at offset 4297038336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297042432 ++wrote 2048/2048 bytes at offset 4297042432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046528 ++wrote 2048/2048 bytes at offset 4297046528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050624 ++wrote 2048/2048 bytes at offset 4297050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054720 ++wrote 2048/2048 bytes at offset 4297054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058816 ++wrote 2048/2048 bytes at offset 4297058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062912 ++wrote 2048/2048 bytes at offset 4297062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 2048/2048 bytes at offset 4297064960 ++=== IO: pattern 1 ++wrote 2048/2048 bytes at offset 4297064960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297069056 ++wrote 2048/2048 bytes at offset 4297069056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297073152 ++wrote 2048/2048 bytes at offset 4297073152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297077248 ++wrote 2048/2048 bytes at offset 4297077248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297081344 ++wrote 2048/2048 bytes at offset 4297081344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297085440 ++wrote 2048/2048 bytes at offset 4297085440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089536 ++wrote 2048/2048 bytes at offset 4297089536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093632 ++wrote 2048/2048 bytes at offset 4297093632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097728 ++wrote 2048/2048 bytes at offset 4297097728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101824 ++wrote 2048/2048 bytes at offset 4297101824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105920 ++wrote 2048/2048 bytes at offset 4297105920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297110016 ++wrote 2048/2048 bytes at offset 4297110016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297114112 ++wrote 2048/2048 bytes at offset 4297114112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297118208 ++wrote 2048/2048 bytes at offset 4297118208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297122304 ++wrote 2048/2048 bytes at offset 4297122304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297126400 ++wrote 2048/2048 bytes at offset 4297126400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297130496 ++wrote 2048/2048 bytes at offset 4297130496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134592 ++wrote 2048/2048 bytes at offset 4297134592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138688 ++wrote 2048/2048 bytes at offset 4297138688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142784 ++wrote 2048/2048 bytes at offset 4297142784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146880 ++wrote 2048/2048 bytes at offset 4297146880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150976 ++wrote 2048/2048 bytes at offset 4297150976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297155072 ++wrote 2048/2048 bytes at offset 4297155072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297159168 ++wrote 2048/2048 bytes at offset 4297159168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297163264 ++wrote 2048/2048 bytes at offset 4297163264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297167360 ++wrote 2048/2048 bytes at offset 4297167360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297171456 ++wrote 2048/2048 bytes at offset 4297171456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175552 ++wrote 2048/2048 bytes at offset 4297175552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179648 ++wrote 2048/2048 bytes at offset 4297179648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183744 ++wrote 2048/2048 bytes at offset 4297183744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187840 ++wrote 2048/2048 bytes at offset 4297187840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191936 ++wrote 2048/2048 bytes at offset 4297191936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297196032 ++wrote 2048/2048 bytes at offset 4297196032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297200128 ++wrote 2048/2048 bytes at offset 4297200128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297204224 ++wrote 2048/2048 bytes at offset 4297204224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297208320 ++wrote 2048/2048 bytes at offset 4297208320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297212416 ++wrote 2048/2048 bytes at offset 4297212416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216512 ++wrote 2048/2048 bytes at offset 4297216512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220608 ++wrote 2048/2048 bytes at offset 4297220608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224704 ++wrote 2048/2048 bytes at offset 4297224704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228800 ++wrote 2048/2048 bytes at offset 4297228800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232896 ++wrote 2048/2048 bytes at offset 4297232896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236992 ++wrote 2048/2048 bytes at offset 4297236992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297241088 ++wrote 2048/2048 bytes at offset 4297241088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297245184 ++wrote 2048/2048 bytes at offset 4297245184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297249280 ++wrote 2048/2048 bytes at offset 4297249280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297253376 ++wrote 2048/2048 bytes at offset 4297253376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297257472 ++wrote 2048/2048 bytes at offset 4297257472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261568 ++wrote 2048/2048 bytes at offset 4297261568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265664 ++wrote 2048/2048 bytes at offset 4297265664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269760 ++wrote 2048/2048 bytes at offset 4297269760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273856 ++wrote 2048/2048 bytes at offset 4297273856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277952 ++wrote 2048/2048 bytes at offset 4297277952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297282048 ++wrote 2048/2048 bytes at offset 4297282048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297286144 ++wrote 2048/2048 bytes at offset 4297286144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297290240 ++wrote 2048/2048 bytes at offset 4297290240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297294336 ++wrote 2048/2048 bytes at offset 4297294336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297298432 ++wrote 2048/2048 bytes at offset 4297298432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302528 ++wrote 2048/2048 bytes at offset 4297302528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306624 ++wrote 2048/2048 bytes at offset 4297306624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310720 ++wrote 2048/2048 bytes at offset 4297310720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314816 ++wrote 2048/2048 bytes at offset 4297314816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318912 ++wrote 2048/2048 bytes at offset 4297318912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297323008 ++wrote 2048/2048 bytes at offset 4297323008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297327104 ++wrote 2048/2048 bytes at offset 4297327104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297331200 ++wrote 2048/2048 bytes at offset 4297331200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297335296 ++wrote 2048/2048 bytes at offset 4297335296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297339392 ++wrote 2048/2048 bytes at offset 4297339392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297343488 ++wrote 2048/2048 bytes at offset 4297343488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347584 ++wrote 2048/2048 bytes at offset 4297347584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351680 ++wrote 2048/2048 bytes at offset 4297351680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355776 ++wrote 2048/2048 bytes at offset 4297355776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359872 ++wrote 2048/2048 bytes at offset 4297359872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363968 ++wrote 2048/2048 bytes at offset 4297363968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297368064 ++wrote 2048/2048 bytes at offset 4297368064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297372160 ++wrote 2048/2048 bytes at offset 4297372160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297376256 ++wrote 2048/2048 bytes at offset 4297376256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297380352 ++wrote 2048/2048 bytes at offset 4297380352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297384448 ++wrote 2048/2048 bytes at offset 4297384448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388544 ++wrote 2048/2048 bytes at offset 4297388544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392640 ++wrote 2048/2048 bytes at offset 4297392640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396736 ++wrote 2048/2048 bytes at offset 4297396736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400832 ++wrote 2048/2048 bytes at offset 4297400832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404928 ++wrote 2048/2048 bytes at offset 4297404928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297409024 ++wrote 2048/2048 bytes at offset 4297409024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297413120 ++wrote 2048/2048 bytes at offset 4297413120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297417216 ++wrote 2048/2048 bytes at offset 4297417216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297421312 ++wrote 2048/2048 bytes at offset 4297421312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297425408 ++wrote 2048/2048 bytes at offset 4297425408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297429504 ++wrote 2048/2048 bytes at offset 4297429504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433600 ++wrote 2048/2048 bytes at offset 4297433600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437696 ++wrote 2048/2048 bytes at offset 4297437696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441792 ++wrote 2048/2048 bytes at offset 4297441792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445888 ++wrote 2048/2048 bytes at offset 4297445888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449984 ++wrote 2048/2048 bytes at offset 4297449984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297454080 ++wrote 2048/2048 bytes at offset 4297454080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297458176 ++wrote 2048/2048 bytes at offset 4297458176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297462272 ++wrote 2048/2048 bytes at offset 4297462272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297466368 ++wrote 2048/2048 bytes at offset 4297466368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297470464 ++wrote 2048/2048 bytes at offset 4297470464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474560 ++wrote 2048/2048 bytes at offset 4297474560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478656 ++wrote 2048/2048 bytes at offset 4297478656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482752 ++wrote 2048/2048 bytes at offset 4297482752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486848 ++wrote 2048/2048 bytes at offset 4297486848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490944 ++wrote 2048/2048 bytes at offset 4297490944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297495040 ++wrote 2048/2048 bytes at offset 4297495040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297499136 ++wrote 2048/2048 bytes at offset 4297499136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297503232 ++wrote 2048/2048 bytes at offset 4297503232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297507328 ++wrote 2048/2048 bytes at offset 4297507328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297511424 ++wrote 2048/2048 bytes at offset 4297511424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515520 ++wrote 2048/2048 bytes at offset 4297515520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519616 ++wrote 2048/2048 bytes at offset 4297519616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523712 ++wrote 2048/2048 bytes at offset 4297523712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527808 ++wrote 2048/2048 bytes at offset 4297527808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531904 ++wrote 2048/2048 bytes at offset 4297531904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297536000 ++wrote 2048/2048 bytes at offset 4297536000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297540096 ++wrote 2048/2048 bytes at offset 4297540096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297544192 ++wrote 2048/2048 bytes at offset 4297544192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297548288 ++wrote 2048/2048 bytes at offset 4297548288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297552384 ++wrote 2048/2048 bytes at offset 4297552384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297556480 ++wrote 2048/2048 bytes at offset 4297556480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560576 ++wrote 2048/2048 bytes at offset 4297560576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564672 ++wrote 2048/2048 bytes at offset 4297564672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568768 ++wrote 2048/2048 bytes at offset 4297568768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572864 ++wrote 2048/2048 bytes at offset 4297572864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576960 ++wrote 2048/2048 bytes at offset 4297576960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297581056 ++wrote 2048/2048 bytes at offset 4297581056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297585152 ++wrote 2048/2048 bytes at offset 4297585152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297589248 ++wrote 2048/2048 bytes at offset 4297589248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297593344 ++wrote 2048/2048 bytes at offset 4297593344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297597440 ++wrote 2048/2048 bytes at offset 4297597440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601536 ++wrote 2048/2048 bytes at offset 4297601536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605632 ++wrote 2048/2048 bytes at offset 4297605632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609728 ++wrote 2048/2048 bytes at offset 4297609728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613824 ++wrote 2048/2048 bytes at offset 4297613824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617920 ++wrote 2048/2048 bytes at offset 4297617920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297622016 ++wrote 2048/2048 bytes at offset 4297622016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297626112 ++wrote 2048/2048 bytes at offset 4297626112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297630208 ++wrote 2048/2048 bytes at offset 4297630208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297634304 ++wrote 2048/2048 bytes at offset 4297634304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297638400 ++wrote 2048/2048 bytes at offset 4297638400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297642496 ++wrote 2048/2048 bytes at offset 4297642496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646592 ++wrote 2048/2048 bytes at offset 4297646592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650688 ++wrote 2048/2048 bytes at offset 4297650688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654784 ++wrote 2048/2048 bytes at offset 4297654784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658880 ++wrote 2048/2048 bytes at offset 4297658880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662976 ++wrote 2048/2048 bytes at offset 4297662976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297667072 ++wrote 2048/2048 bytes at offset 4297667072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297671168 ++wrote 2048/2048 bytes at offset 4297671168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297675264 ++wrote 2048/2048 bytes at offset 4297675264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297679360 ++wrote 2048/2048 bytes at offset 4297679360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297683456 ++wrote 2048/2048 bytes at offset 4297683456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687552 ++wrote 2048/2048 bytes at offset 4297687552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691648 ++wrote 2048/2048 bytes at offset 4297691648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695744 ++wrote 2048/2048 bytes at offset 4297695744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699840 ++wrote 2048/2048 bytes at offset 4297699840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703936 ++wrote 2048/2048 bytes at offset 4297703936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297708032 ++wrote 2048/2048 bytes at offset 4297708032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297712128 ++wrote 2048/2048 bytes at offset 4297712128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297716224 ++wrote 2048/2048 bytes at offset 4297716224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297720320 ++wrote 2048/2048 bytes at offset 4297720320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297724416 ++wrote 2048/2048 bytes at offset 4297724416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728512 ++wrote 2048/2048 bytes at offset 4297728512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732608 ++wrote 2048/2048 bytes at offset 4297732608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736704 ++wrote 2048/2048 bytes at offset 4297736704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740800 ++wrote 2048/2048 bytes at offset 4297740800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744896 ++wrote 2048/2048 bytes at offset 4297744896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748992 ++wrote 2048/2048 bytes at offset 4297748992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297753088 ++wrote 2048/2048 bytes at offset 4297753088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297757184 ++wrote 2048/2048 bytes at offset 4297757184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297761280 ++wrote 2048/2048 bytes at offset 4297761280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297765376 ++wrote 2048/2048 bytes at offset 4297765376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297769472 ++wrote 2048/2048 bytes at offset 4297769472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773568 ++wrote 2048/2048 bytes at offset 4297773568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777664 ++wrote 2048/2048 bytes at offset 4297777664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781760 ++wrote 2048/2048 bytes at offset 4297781760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785856 ++wrote 2048/2048 bytes at offset 4297785856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789952 ++wrote 2048/2048 bytes at offset 4297789952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297794048 ++wrote 2048/2048 bytes at offset 4297794048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297798144 ++wrote 2048/2048 bytes at offset 4297798144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297802240 ++wrote 2048/2048 bytes at offset 4297802240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297806336 ++wrote 2048/2048 bytes at offset 4297806336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297810432 ++wrote 2048/2048 bytes at offset 4297810432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814528 ++wrote 2048/2048 bytes at offset 4297814528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818624 ++wrote 2048/2048 bytes at offset 4297818624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822720 ++wrote 2048/2048 bytes at offset 4297822720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826816 ++wrote 2048/2048 bytes at offset 4297826816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830912 ++wrote 2048/2048 bytes at offset 4297830912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297835008 ++wrote 2048/2048 bytes at offset 4297835008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297839104 ++wrote 2048/2048 bytes at offset 4297839104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297843200 ++wrote 2048/2048 bytes at offset 4297843200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297847296 ++wrote 2048/2048 bytes at offset 4297847296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297851392 ++wrote 2048/2048 bytes at offset 4297851392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297855488 ++wrote 2048/2048 bytes at offset 4297855488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859584 ++wrote 2048/2048 bytes at offset 4297859584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863680 ++wrote 2048/2048 bytes at offset 4297863680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867776 ++wrote 2048/2048 bytes at offset 4297867776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871872 ++wrote 2048/2048 bytes at offset 4297871872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875968 ++wrote 2048/2048 bytes at offset 4297875968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297880064 ++wrote 2048/2048 bytes at offset 4297880064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297884160 ++wrote 2048/2048 bytes at offset 4297884160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297888256 ++wrote 2048/2048 bytes at offset 4297888256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297892352 ++wrote 2048/2048 bytes at offset 4297892352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297896448 ++wrote 2048/2048 bytes at offset 4297896448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900544 ++wrote 2048/2048 bytes at offset 4297900544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904640 ++wrote 2048/2048 bytes at offset 4297904640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908736 ++wrote 2048/2048 bytes at offset 4297908736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912832 ++wrote 2048/2048 bytes at offset 4297912832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916928 ++wrote 2048/2048 bytes at offset 4297916928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297921024 ++wrote 2048/2048 bytes at offset 4297921024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297925120 ++wrote 2048/2048 bytes at offset 4297925120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297929216 ++wrote 2048/2048 bytes at offset 4297929216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297933312 ++wrote 2048/2048 bytes at offset 4297933312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297937408 ++wrote 2048/2048 bytes at offset 4297937408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297941504 ++wrote 2048/2048 bytes at offset 4297941504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945600 ++wrote 2048/2048 bytes at offset 4297945600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949696 ++wrote 2048/2048 bytes at offset 4297949696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953792 ++wrote 2048/2048 bytes at offset 4297953792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957888 ++wrote 2048/2048 bytes at offset 4297957888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961984 ++wrote 2048/2048 bytes at offset 4297961984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297966080 ++wrote 2048/2048 bytes at offset 4297966080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297970176 ++wrote 2048/2048 bytes at offset 4297970176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297974272 ++wrote 2048/2048 bytes at offset 4297974272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297978368 ++wrote 2048/2048 bytes at offset 4297978368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297982464 ++wrote 2048/2048 bytes at offset 4297982464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986560 ++wrote 2048/2048 bytes at offset 4297986560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990656 ++wrote 2048/2048 bytes at offset 4297990656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994752 ++wrote 2048/2048 bytes at offset 4297994752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998848 ++wrote 2048/2048 bytes at offset 4297998848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002944 ++wrote 2048/2048 bytes at offset 4298002944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298007040 ++wrote 2048/2048 bytes at offset 4298007040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298011136 ++wrote 2048/2048 bytes at offset 4298011136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298015232 ++wrote 2048/2048 bytes at offset 4298015232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298019328 ++wrote 2048/2048 bytes at offset 4298019328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298023424 ++wrote 2048/2048 bytes at offset 4298023424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027520 ++wrote 2048/2048 bytes at offset 4298027520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031616 ++wrote 2048/2048 bytes at offset 4298031616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035712 ++wrote 2048/2048 bytes at offset 4298035712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039808 ++wrote 2048/2048 bytes at offset 4298039808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043904 ++wrote 2048/2048 bytes at offset 4298043904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298048000 ++wrote 2048/2048 bytes at offset 4298048000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298052096 ++wrote 2048/2048 bytes at offset 4298052096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298056192 ++wrote 2048/2048 bytes at offset 4298056192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298060288 ++wrote 2048/2048 bytes at offset 4298060288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298064384 ++wrote 2048/2048 bytes at offset 4298064384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298068480 ++wrote 2048/2048 bytes at offset 4298068480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072576 ++wrote 2048/2048 bytes at offset 4298072576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076672 ++wrote 2048/2048 bytes at offset 4298076672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080768 ++wrote 2048/2048 bytes at offset 4298080768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084864 ++wrote 2048/2048 bytes at offset 4298084864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088960 ++wrote 2048/2048 bytes at offset 4298088960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298093056 ++wrote 2048/2048 bytes at offset 4298093056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298097152 ++wrote 2048/2048 bytes at offset 4298097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298101248 ++wrote 2048/2048 bytes at offset 4298101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298105344 ++wrote 2048/2048 bytes at offset 4298105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298109440 ++wrote 2048/2048 bytes at offset 4298109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> wrote 2048/2048 bytes at offset 4298114560 ++=== IO: pattern 3 ++wrote 2048/2048 bytes at offset 4298114560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118656 ++wrote 2048/2048 bytes at offset 4298118656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122752 ++wrote 2048/2048 bytes at offset 4298122752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126848 ++wrote 2048/2048 bytes at offset 4298126848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130944 ++wrote 2048/2048 bytes at offset 4298130944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298135040 ++wrote 2048/2048 bytes at offset 4298135040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298139136 ++wrote 2048/2048 bytes at offset 4298139136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298143232 ++wrote 2048/2048 bytes at offset 4298143232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298147328 ++wrote 2048/2048 bytes at offset 4298147328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298151424 ++wrote 2048/2048 bytes at offset 4298151424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155520 ++wrote 2048/2048 bytes at offset 4298155520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159616 ++wrote 2048/2048 bytes at offset 4298159616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163712 ++wrote 2048/2048 bytes at offset 4298163712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167808 ++wrote 2048/2048 bytes at offset 4298167808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171904 ++wrote 2048/2048 bytes at offset 4298171904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298176000 ++wrote 2048/2048 bytes at offset 4298176000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298180096 ++wrote 2048/2048 bytes at offset 4298180096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298184192 ++wrote 2048/2048 bytes at offset 4298184192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298188288 ++wrote 2048/2048 bytes at offset 4298188288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298192384 ++wrote 2048/2048 bytes at offset 4298192384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298196480 ++wrote 2048/2048 bytes at offset 4298196480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200576 ++wrote 2048/2048 bytes at offset 4298200576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204672 ++wrote 2048/2048 bytes at offset 4298204672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208768 ++wrote 2048/2048 bytes at offset 4298208768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212864 ++wrote 2048/2048 bytes at offset 4298212864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216960 ++wrote 2048/2048 bytes at offset 4298216960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298221056 ++wrote 2048/2048 bytes at offset 4298221056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298225152 ++wrote 2048/2048 bytes at offset 4298225152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298229248 ++wrote 2048/2048 bytes at offset 4298229248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298233344 ++wrote 2048/2048 bytes at offset 4298233344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298237440 ++wrote 2048/2048 bytes at offset 4298237440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241536 ++wrote 2048/2048 bytes at offset 4298241536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245632 ++wrote 2048/2048 bytes at offset 4298245632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249728 ++wrote 2048/2048 bytes at offset 4298249728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253824 ++wrote 2048/2048 bytes at offset 4298253824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257920 ++wrote 2048/2048 bytes at offset 4298257920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298262016 ++wrote 2048/2048 bytes at offset 4298262016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298266112 ++wrote 2048/2048 bytes at offset 4298266112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298270208 ++wrote 2048/2048 bytes at offset 4298270208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298274304 ++wrote 2048/2048 bytes at offset 4298274304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298278400 ++wrote 2048/2048 bytes at offset 4298278400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298282496 ++wrote 2048/2048 bytes at offset 4298282496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286592 ++wrote 2048/2048 bytes at offset 4298286592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290688 ++wrote 2048/2048 bytes at offset 4298290688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294784 ++wrote 2048/2048 bytes at offset 4298294784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298880 ++wrote 2048/2048 bytes at offset 4298298880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302976 ++wrote 2048/2048 bytes at offset 4298302976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298307072 ++wrote 2048/2048 bytes at offset 4298307072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298311168 ++wrote 2048/2048 bytes at offset 4298311168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298315264 ++wrote 2048/2048 bytes at offset 4298315264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298319360 ++wrote 2048/2048 bytes at offset 4298319360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298323456 ++wrote 2048/2048 bytes at offset 4298323456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327552 ++wrote 2048/2048 bytes at offset 4298327552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331648 ++wrote 2048/2048 bytes at offset 4298331648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335744 ++wrote 2048/2048 bytes at offset 4298335744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339840 ++wrote 2048/2048 bytes at offset 4298339840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343936 ++wrote 2048/2048 bytes at offset 4298343936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298348032 ++wrote 2048/2048 bytes at offset 4298348032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298352128 ++wrote 2048/2048 bytes at offset 4298352128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298356224 ++wrote 2048/2048 bytes at offset 4298356224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298360320 ++wrote 2048/2048 bytes at offset 4298360320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298364416 ++wrote 2048/2048 bytes at offset 4298364416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368512 ++wrote 2048/2048 bytes at offset 4298368512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372608 ++wrote 2048/2048 bytes at offset 4298372608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376704 ++wrote 2048/2048 bytes at offset 4298376704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380800 ++wrote 2048/2048 bytes at offset 4298380800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384896 ++wrote 2048/2048 bytes at offset 4298384896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388992 ++wrote 2048/2048 bytes at offset 4298388992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298393088 ++wrote 2048/2048 bytes at offset 4298393088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298397184 ++wrote 2048/2048 bytes at offset 4298397184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298401280 ++wrote 2048/2048 bytes at offset 4298401280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298405376 ++wrote 2048/2048 bytes at offset 4298405376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298409472 ++wrote 2048/2048 bytes at offset 4298409472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413568 ++wrote 2048/2048 bytes at offset 4298413568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417664 ++wrote 2048/2048 bytes at offset 4298417664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421760 ++wrote 2048/2048 bytes at offset 4298421760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425856 ++wrote 2048/2048 bytes at offset 4298425856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429952 ++wrote 2048/2048 bytes at offset 4298429952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298434048 ++wrote 2048/2048 bytes at offset 4298434048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298438144 ++wrote 2048/2048 bytes at offset 4298438144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298442240 ++wrote 2048/2048 bytes at offset 4298442240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298446336 ++wrote 2048/2048 bytes at offset 4298446336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298450432 ++wrote 2048/2048 bytes at offset 4298450432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454528 ++wrote 2048/2048 bytes at offset 4298454528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458624 ++wrote 2048/2048 bytes at offset 4298458624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462720 ++wrote 2048/2048 bytes at offset 4298462720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466816 ++wrote 2048/2048 bytes at offset 4298466816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470912 ++wrote 2048/2048 bytes at offset 4298470912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298475008 ++wrote 2048/2048 bytes at offset 4298475008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298479104 ++wrote 2048/2048 bytes at offset 4298479104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298483200 ++wrote 2048/2048 bytes at offset 4298483200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298487296 ++wrote 2048/2048 bytes at offset 4298487296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298491392 ++wrote 2048/2048 bytes at offset 4298491392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298495488 ++wrote 2048/2048 bytes at offset 4298495488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499584 ++wrote 2048/2048 bytes at offset 4298499584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503680 ++wrote 2048/2048 bytes at offset 4298503680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507776 ++wrote 2048/2048 bytes at offset 4298507776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511872 ++wrote 2048/2048 bytes at offset 4298511872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515968 ++wrote 2048/2048 bytes at offset 4298515968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298520064 ++wrote 2048/2048 bytes at offset 4298520064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298524160 ++wrote 2048/2048 bytes at offset 4298524160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298528256 ++wrote 2048/2048 bytes at offset 4298528256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298532352 ++wrote 2048/2048 bytes at offset 4298532352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298536448 ++wrote 2048/2048 bytes at offset 4298536448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540544 ++wrote 2048/2048 bytes at offset 4298540544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544640 ++wrote 2048/2048 bytes at offset 4298544640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548736 ++wrote 2048/2048 bytes at offset 4298548736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552832 ++wrote 2048/2048 bytes at offset 4298552832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556928 ++wrote 2048/2048 bytes at offset 4298556928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298561024 ++wrote 2048/2048 bytes at offset 4298561024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298565120 ++wrote 2048/2048 bytes at offset 4298565120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298569216 ++wrote 2048/2048 bytes at offset 4298569216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298573312 ++wrote 2048/2048 bytes at offset 4298573312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298577408 ++wrote 2048/2048 bytes at offset 4298577408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298581504 ++wrote 2048/2048 bytes at offset 4298581504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585600 ++wrote 2048/2048 bytes at offset 4298585600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589696 ++wrote 2048/2048 bytes at offset 4298589696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593792 ++wrote 2048/2048 bytes at offset 4298593792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597888 ++wrote 2048/2048 bytes at offset 4298597888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601984 ++wrote 2048/2048 bytes at offset 4298601984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298606080 ++wrote 2048/2048 bytes at offset 4298606080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298610176 ++wrote 2048/2048 bytes at offset 4298610176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298614272 ++wrote 2048/2048 bytes at offset 4298614272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298618368 ++wrote 2048/2048 bytes at offset 4298618368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298622464 ++wrote 2048/2048 bytes at offset 4298622464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626560 ++wrote 2048/2048 bytes at offset 4298626560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630656 ++wrote 2048/2048 bytes at offset 4298630656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634752 ++wrote 2048/2048 bytes at offset 4298634752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638848 ++wrote 2048/2048 bytes at offset 4298638848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642944 ++wrote 2048/2048 bytes at offset 4298642944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298647040 ++wrote 2048/2048 bytes at offset 4298647040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298651136 ++wrote 2048/2048 bytes at offset 4298651136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298655232 ++wrote 2048/2048 bytes at offset 4298655232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298659328 ++wrote 2048/2048 bytes at offset 4298659328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298663424 ++wrote 2048/2048 bytes at offset 4298663424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667520 ++wrote 2048/2048 bytes at offset 4298667520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671616 ++wrote 2048/2048 bytes at offset 4298671616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675712 ++wrote 2048/2048 bytes at offset 4298675712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679808 ++wrote 2048/2048 bytes at offset 4298679808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683904 ++wrote 2048/2048 bytes at offset 4298683904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298688000 ++wrote 2048/2048 bytes at offset 4298688000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298692096 ++wrote 2048/2048 bytes at offset 4298692096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298696192 ++wrote 2048/2048 bytes at offset 4298696192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298700288 ++wrote 2048/2048 bytes at offset 4298700288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298704384 ++wrote 2048/2048 bytes at offset 4298704384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298708480 ++wrote 2048/2048 bytes at offset 4298708480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712576 ++wrote 2048/2048 bytes at offset 4298712576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716672 ++wrote 2048/2048 bytes at offset 4298716672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720768 ++wrote 2048/2048 bytes at offset 4298720768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724864 ++wrote 2048/2048 bytes at offset 4298724864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728960 ++wrote 2048/2048 bytes at offset 4298728960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298733056 ++wrote 2048/2048 bytes at offset 4298733056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298737152 ++wrote 2048/2048 bytes at offset 4298737152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298741248 ++wrote 2048/2048 bytes at offset 4298741248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298745344 ++wrote 2048/2048 bytes at offset 4298745344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298749440 ++wrote 2048/2048 bytes at offset 4298749440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753536 ++wrote 2048/2048 bytes at offset 4298753536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757632 ++wrote 2048/2048 bytes at offset 4298757632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761728 ++wrote 2048/2048 bytes at offset 4298761728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765824 ++wrote 2048/2048 bytes at offset 4298765824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769920 ++wrote 2048/2048 bytes at offset 4298769920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298774016 ++wrote 2048/2048 bytes at offset 4298774016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298778112 ++wrote 2048/2048 bytes at offset 4298778112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298782208 ++wrote 2048/2048 bytes at offset 4298782208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298786304 ++wrote 2048/2048 bytes at offset 4298786304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298790400 ++wrote 2048/2048 bytes at offset 4298790400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298794496 ++wrote 2048/2048 bytes at offset 4298794496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798592 ++wrote 2048/2048 bytes at offset 4298798592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802688 ++wrote 2048/2048 bytes at offset 4298802688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806784 ++wrote 2048/2048 bytes at offset 4298806784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810880 ++wrote 2048/2048 bytes at offset 4298810880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814976 ++wrote 2048/2048 bytes at offset 4298814976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298819072 ++wrote 2048/2048 bytes at offset 4298819072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298823168 ++wrote 2048/2048 bytes at offset 4298823168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298827264 ++wrote 2048/2048 bytes at offset 4298827264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298831360 ++wrote 2048/2048 bytes at offset 4298831360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298835456 ++wrote 2048/2048 bytes at offset 4298835456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839552 ++wrote 2048/2048 bytes at offset 4298839552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843648 ++wrote 2048/2048 bytes at offset 4298843648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847744 ++wrote 2048/2048 bytes at offset 4298847744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851840 ++wrote 2048/2048 bytes at offset 4298851840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855936 ++wrote 2048/2048 bytes at offset 4298855936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298860032 ++wrote 2048/2048 bytes at offset 4298860032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298864128 ++wrote 2048/2048 bytes at offset 4298864128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298868224 ++wrote 2048/2048 bytes at offset 4298868224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298872320 ++wrote 2048/2048 bytes at offset 4298872320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298876416 ++wrote 2048/2048 bytes at offset 4298876416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880512 ++wrote 2048/2048 bytes at offset 4298880512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884608 ++wrote 2048/2048 bytes at offset 4298884608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888704 ++wrote 2048/2048 bytes at offset 4298888704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892800 ++wrote 2048/2048 bytes at offset 4298892800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896896 ++wrote 2048/2048 bytes at offset 4298896896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900992 ++wrote 2048/2048 bytes at offset 4298900992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298905088 ++wrote 2048/2048 bytes at offset 4298905088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298909184 ++wrote 2048/2048 bytes at offset 4298909184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298913280 ++wrote 2048/2048 bytes at offset 4298913280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298917376 ++wrote 2048/2048 bytes at offset 4298917376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298921472 ++wrote 2048/2048 bytes at offset 4298921472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925568 ++wrote 2048/2048 bytes at offset 4298925568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929664 ++wrote 2048/2048 bytes at offset 4298929664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933760 ++wrote 2048/2048 bytes at offset 4298933760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937856 ++wrote 2048/2048 bytes at offset 4298937856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941952 ++wrote 2048/2048 bytes at offset 4298941952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298946048 ++wrote 2048/2048 bytes at offset 4298946048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298950144 ++wrote 2048/2048 bytes at offset 4298950144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298954240 ++wrote 2048/2048 bytes at offset 4298954240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298958336 ++wrote 2048/2048 bytes at offset 4298958336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298962432 ++wrote 2048/2048 bytes at offset 4298962432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966528 ++wrote 2048/2048 bytes at offset 4298966528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970624 ++wrote 2048/2048 bytes at offset 4298970624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974720 ++wrote 2048/2048 bytes at offset 4298974720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978816 ++wrote 2048/2048 bytes at offset 4298978816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982912 ++wrote 2048/2048 bytes at offset 4298982912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298987008 ++wrote 2048/2048 bytes at offset 4298987008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298991104 ++wrote 2048/2048 bytes at offset 4298991104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298995200 ++wrote 2048/2048 bytes at offset 4298995200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298999296 ++wrote 2048/2048 bytes at offset 4298999296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299003392 ++wrote 2048/2048 bytes at offset 4299003392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299007488 ++wrote 2048/2048 bytes at offset 4299007488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011584 ++wrote 2048/2048 bytes at offset 4299011584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015680 ++wrote 2048/2048 bytes at offset 4299015680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019776 ++wrote 2048/2048 bytes at offset 4299019776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023872 ++wrote 2048/2048 bytes at offset 4299023872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027968 ++wrote 2048/2048 bytes at offset 4299027968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299032064 ++wrote 2048/2048 bytes at offset 4299032064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299036160 ++wrote 2048/2048 bytes at offset 4299036160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299040256 ++wrote 2048/2048 bytes at offset 4299040256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299044352 ++wrote 2048/2048 bytes at offset 4299044352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299048448 ++wrote 2048/2048 bytes at offset 4299048448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052544 ++wrote 2048/2048 bytes at offset 4299052544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056640 ++wrote 2048/2048 bytes at offset 4299056640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060736 ++wrote 2048/2048 bytes at offset 4299060736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064832 ++wrote 2048/2048 bytes at offset 4299064832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068928 ++wrote 2048/2048 bytes at offset 4299068928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299073024 ++wrote 2048/2048 bytes at offset 4299073024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299077120 ++wrote 2048/2048 bytes at offset 4299077120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299081216 ++wrote 2048/2048 bytes at offset 4299081216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299085312 ++wrote 2048/2048 bytes at offset 4299085312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299089408 ++wrote 2048/2048 bytes at offset 4299089408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299093504 ++wrote 2048/2048 bytes at offset 4299093504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097600 ++wrote 2048/2048 bytes at offset 4299097600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101696 ++wrote 2048/2048 bytes at offset 4299101696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105792 ++wrote 2048/2048 bytes at offset 4299105792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109888 ++wrote 2048/2048 bytes at offset 4299109888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113984 ++wrote 2048/2048 bytes at offset 4299113984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299118080 ++wrote 2048/2048 bytes at offset 4299118080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299122176 ++wrote 2048/2048 bytes at offset 4299122176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299126272 ++wrote 2048/2048 bytes at offset 4299126272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299130368 ++wrote 2048/2048 bytes at offset 4299130368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299134464 ++wrote 2048/2048 bytes at offset 4299134464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138560 ++wrote 2048/2048 bytes at offset 4299138560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142656 ++wrote 2048/2048 bytes at offset 4299142656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146752 ++wrote 2048/2048 bytes at offset 4299146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150848 ++wrote 2048/2048 bytes at offset 4299150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154944 ++wrote 2048/2048 bytes at offset 4299154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299159040 ++wrote 2048/2048 bytes at offset 4299159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 8192/8192 bytes at offset 4299164160 ++=== IO: pattern 5 ++wrote 8192/8192 bytes at offset 4299164160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299176448 ++wrote 8192/8192 bytes at offset 4299176448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188736 ++wrote 8192/8192 bytes at offset 4299188736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299201024 ++wrote 8192/8192 bytes at offset 4299201024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299213312 ++wrote 8192/8192 bytes at offset 4299213312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225600 ++wrote 8192/8192 bytes at offset 4299225600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237888 ++wrote 8192/8192 bytes at offset 4299237888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299250176 ++wrote 8192/8192 bytes at offset 4299250176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299262464 ++wrote 8192/8192 bytes at offset 4299262464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274752 ++wrote 8192/8192 bytes at offset 4299274752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299287040 ++wrote 8192/8192 bytes at offset 4299287040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299299328 ++wrote 8192/8192 bytes at offset 4299299328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311616 ++wrote 8192/8192 bytes at offset 4299311616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323904 ++wrote 8192/8192 bytes at offset 4299323904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299336192 ++wrote 8192/8192 bytes at offset 4299336192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299348480 ++wrote 8192/8192 bytes at offset 4299348480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360768 ++wrote 8192/8192 bytes at offset 4299360768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299373056 ++wrote 8192/8192 bytes at offset 4299373056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299385344 ++wrote 8192/8192 bytes at offset 4299385344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397632 ++wrote 8192/8192 bytes at offset 4299397632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409920 ++wrote 8192/8192 bytes at offset 4299409920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299422208 ++wrote 8192/8192 bytes at offset 4299422208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299434496 ++wrote 8192/8192 bytes at offset 4299434496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446784 ++wrote 8192/8192 bytes at offset 4299446784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299459072 ++wrote 8192/8192 bytes at offset 4299459072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299471360 ++wrote 8192/8192 bytes at offset 4299471360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483648 ++wrote 8192/8192 bytes at offset 4299483648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495936 ++wrote 8192/8192 bytes at offset 4299495936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299508224 ++wrote 8192/8192 bytes at offset 4299508224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520512 ++wrote 8192/8192 bytes at offset 4299520512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532800 ++wrote 8192/8192 bytes at offset 4299532800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299545088 ++wrote 8192/8192 bytes at offset 4299545088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299557376 ++wrote 8192/8192 bytes at offset 4299557376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569664 ++wrote 8192/8192 bytes at offset 4299569664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581952 ++wrote 8192/8192 bytes at offset 4299581952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299594240 ++wrote 8192/8192 bytes at offset 4299594240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606528 ++wrote 8192/8192 bytes at offset 4299606528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618816 ++wrote 8192/8192 bytes at offset 4299618816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299631104 ++wrote 8192/8192 bytes at offset 4299631104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299643392 ++wrote 8192/8192 bytes at offset 4299643392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655680 ++wrote 8192/8192 bytes at offset 4299655680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667968 ++wrote 8192/8192 bytes at offset 4299667968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299680256 ++wrote 8192/8192 bytes at offset 4299680256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692544 ++wrote 8192/8192 bytes at offset 4299692544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704832 ++wrote 8192/8192 bytes at offset 4299704832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299717120 ++wrote 8192/8192 bytes at offset 4299717120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299729408 ++wrote 8192/8192 bytes at offset 4299729408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741696 ++wrote 8192/8192 bytes at offset 4299741696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753984 ++wrote 8192/8192 bytes at offset 4299753984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299766272 ++wrote 8192/8192 bytes at offset 4299766272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778560 ++wrote 8192/8192 bytes at offset 4299778560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790848 ++wrote 8192/8192 bytes at offset 4299790848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299803136 ++wrote 8192/8192 bytes at offset 4299803136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299815424 ++wrote 8192/8192 bytes at offset 4299815424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827712 ++wrote 8192/8192 bytes at offset 4299827712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299840000 ++wrote 8192/8192 bytes at offset 4299840000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299852288 ++wrote 8192/8192 bytes at offset 4299852288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864576 ++wrote 8192/8192 bytes at offset 4299864576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876864 ++wrote 8192/8192 bytes at offset 4299876864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299889152 ++wrote 8192/8192 bytes at offset 4299889152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299901440 ++wrote 8192/8192 bytes at offset 4299901440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913728 ++wrote 8192/8192 bytes at offset 4299913728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299926016 ++wrote 8192/8192 bytes at offset 4299926016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299938304 ++wrote 8192/8192 bytes at offset 4299938304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971904 ++read 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294976000 ++read 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294980096 ++read 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294984192 ++read 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294988288 ++read 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294992384 ++read 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294996480 ++read 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000576 ++read 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004672 ++read 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008768 ++read 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012864 ++read 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016960 ++read 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295021056 ++read 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295025152 ++read 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295029248 ++read 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295033344 ++read 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295037440 ++read 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041536 ++read 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045632 ++read 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049728 ++read 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053824 ++read 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057920 ++read 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295062016 ++read 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295066112 ++read 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295070208 ++read 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295074304 ++read 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295078400 ++read 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295082496 ++read 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086592 ++read 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090688 ++read 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094784 ++read 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098880 ++read 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102976 ++read 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295107072 ++read 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295111168 ++read 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295115264 ++read 4096/4096 bytes at offset 4295115264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295119360 ++read 4096/4096 bytes at offset 4295119360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295123456 ++read 4096/4096 bytes at offset 4295123456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127552 ++read 4096/4096 bytes at offset 4295127552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131648 ++read 4096/4096 bytes at offset 4295131648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135744 ++read 4096/4096 bytes at offset 4295135744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139840 ++read 4096/4096 bytes at offset 4295139840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143936 ++read 4096/4096 bytes at offset 4295143936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295148032 ++read 4096/4096 bytes at offset 4295148032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295152128 ++read 4096/4096 bytes at offset 4295152128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295156224 ++read 4096/4096 bytes at offset 4295156224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295160320 ++read 4096/4096 bytes at offset 4295160320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295164416 ++read 4096/4096 bytes at offset 4295164416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168512 ++read 4096/4096 bytes at offset 4295168512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172608 ++read 4096/4096 bytes at offset 4295172608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176704 ++read 4096/4096 bytes at offset 4295176704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180800 ++read 4096/4096 bytes at offset 4295180800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184896 ++read 4096/4096 bytes at offset 4295184896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188992 ++read 4096/4096 bytes at offset 4295188992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295193088 ++read 4096/4096 bytes at offset 4295193088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295197184 ++read 4096/4096 bytes at offset 4295197184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295201280 ++read 4096/4096 bytes at offset 4295201280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295205376 ++read 4096/4096 bytes at offset 4295205376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295209472 ++read 4096/4096 bytes at offset 4295209472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213568 ++read 4096/4096 bytes at offset 4295213568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217664 ++read 4096/4096 bytes at offset 4295217664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221760 ++read 4096/4096 bytes at offset 4295221760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225856 ++read 4096/4096 bytes at offset 4295225856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229952 ++read 4096/4096 bytes at offset 4295229952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295234048 ++read 4096/4096 bytes at offset 4295234048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295238144 ++read 4096/4096 bytes at offset 4295238144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295242240 ++read 4096/4096 bytes at offset 4295242240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295246336 ++read 4096/4096 bytes at offset 4295246336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295250432 ++read 4096/4096 bytes at offset 4295250432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254528 ++read 4096/4096 bytes at offset 4295254528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258624 ++read 4096/4096 bytes at offset 4295258624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262720 ++read 4096/4096 bytes at offset 4295262720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266816 ++read 4096/4096 bytes at offset 4295266816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270912 ++read 4096/4096 bytes at offset 4295270912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295275008 ++read 4096/4096 bytes at offset 4295275008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295279104 ++read 4096/4096 bytes at offset 4295279104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295283200 ++read 4096/4096 bytes at offset 4295283200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295287296 ++read 4096/4096 bytes at offset 4295287296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295291392 ++read 4096/4096 bytes at offset 4295291392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295295488 ++read 4096/4096 bytes at offset 4295295488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299584 ++read 4096/4096 bytes at offset 4295299584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303680 ++read 4096/4096 bytes at offset 4295303680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307776 ++read 4096/4096 bytes at offset 4295307776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311872 ++read 4096/4096 bytes at offset 4295311872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315968 ++read 4096/4096 bytes at offset 4295315968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295320064 ++read 4096/4096 bytes at offset 4295320064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295324160 ++read 4096/4096 bytes at offset 4295324160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295328256 ++read 4096/4096 bytes at offset 4295328256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295332352 ++read 4096/4096 bytes at offset 4295332352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295336448 ++read 4096/4096 bytes at offset 4295336448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340544 ++read 4096/4096 bytes at offset 4295340544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344640 ++read 4096/4096 bytes at offset 4295344640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348736 ++read 4096/4096 bytes at offset 4295348736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352832 ++read 4096/4096 bytes at offset 4295352832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356928 ++read 4096/4096 bytes at offset 4295356928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295361024 ++read 4096/4096 bytes at offset 4295361024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295365120 ++read 4096/4096 bytes at offset 4295365120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295369216 ++read 4096/4096 bytes at offset 4295369216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295373312 ++read 4096/4096 bytes at offset 4295373312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295377408 ++read 4096/4096 bytes at offset 4295377408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295381504 ++read 4096/4096 bytes at offset 4295381504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385600 ++read 4096/4096 bytes at offset 4295385600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389696 ++read 4096/4096 bytes at offset 4295389696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393792 ++read 4096/4096 bytes at offset 4295393792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397888 ++read 4096/4096 bytes at offset 4295397888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401984 ++read 4096/4096 bytes at offset 4295401984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295406080 ++read 4096/4096 bytes at offset 4295406080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295410176 ++read 4096/4096 bytes at offset 4295410176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295414272 ++read 4096/4096 bytes at offset 4295414272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295418368 ++read 4096/4096 bytes at offset 4295418368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295422464 ++read 4096/4096 bytes at offset 4295422464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426560 ++read 4096/4096 bytes at offset 4295426560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430656 ++read 4096/4096 bytes at offset 4295430656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434752 ++read 4096/4096 bytes at offset 4295434752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438848 ++read 4096/4096 bytes at offset 4295438848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442944 ++read 4096/4096 bytes at offset 4295442944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295447040 ++read 4096/4096 bytes at offset 4295447040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295451136 ++read 4096/4096 bytes at offset 4295451136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295455232 ++read 4096/4096 bytes at offset 4295455232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295459328 ++read 4096/4096 bytes at offset 4295459328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295463424 ++read 4096/4096 bytes at offset 4295463424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467520 ++read 4096/4096 bytes at offset 4295467520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471616 ++read 4096/4096 bytes at offset 4295471616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475712 ++read 4096/4096 bytes at offset 4295475712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479808 ++read 4096/4096 bytes at offset 4295479808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483904 ++read 4096/4096 bytes at offset 4295483904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295488000 ++read 4096/4096 bytes at offset 4295488000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295492096 ++read 4096/4096 bytes at offset 4295492096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295496192 ++read 4096/4096 bytes at offset 4295496192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295500288 ++read 4096/4096 bytes at offset 4295500288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295504384 ++read 4096/4096 bytes at offset 4295504384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295508480 ++read 4096/4096 bytes at offset 4295508480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512576 ++read 4096/4096 bytes at offset 4295512576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516672 ++read 4096/4096 bytes at offset 4295516672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520768 ++read 4096/4096 bytes at offset 4295520768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524864 ++read 4096/4096 bytes at offset 4295524864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528960 ++read 4096/4096 bytes at offset 4295528960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295533056 ++read 4096/4096 bytes at offset 4295533056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295537152 ++read 4096/4096 bytes at offset 4295537152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295541248 ++read 4096/4096 bytes at offset 4295541248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295545344 ++read 4096/4096 bytes at offset 4295545344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295549440 ++read 4096/4096 bytes at offset 4295549440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553536 ++read 4096/4096 bytes at offset 4295553536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557632 ++read 4096/4096 bytes at offset 4295557632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561728 ++read 4096/4096 bytes at offset 4295561728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565824 ++read 4096/4096 bytes at offset 4295565824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569920 ++read 4096/4096 bytes at offset 4295569920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295574016 ++read 4096/4096 bytes at offset 4295574016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295578112 ++read 4096/4096 bytes at offset 4295578112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295582208 ++read 4096/4096 bytes at offset 4295582208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295586304 ++read 4096/4096 bytes at offset 4295586304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295590400 ++read 4096/4096 bytes at offset 4295590400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295594496 ++read 4096/4096 bytes at offset 4295594496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598592 ++read 4096/4096 bytes at offset 4295598592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602688 ++read 4096/4096 bytes at offset 4295602688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606784 ++read 4096/4096 bytes at offset 4295606784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610880 ++read 4096/4096 bytes at offset 4295610880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614976 ++read 4096/4096 bytes at offset 4295614976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295619072 ++read 4096/4096 bytes at offset 4295619072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295623168 ++read 4096/4096 bytes at offset 4295623168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295627264 ++read 4096/4096 bytes at offset 4295627264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295631360 ++read 4096/4096 bytes at offset 4295631360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295635456 ++read 4096/4096 bytes at offset 4295635456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639552 ++read 4096/4096 bytes at offset 4295639552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643648 ++read 4096/4096 bytes at offset 4295643648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647744 ++read 4096/4096 bytes at offset 4295647744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651840 ++read 4096/4096 bytes at offset 4295651840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655936 ++read 4096/4096 bytes at offset 4295655936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295660032 ++read 4096/4096 bytes at offset 4295660032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295664128 ++read 4096/4096 bytes at offset 4295664128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295668224 ++read 4096/4096 bytes at offset 4295668224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295672320 ++read 4096/4096 bytes at offset 4295672320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295676416 ++read 4096/4096 bytes at offset 4295676416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680512 ++read 4096/4096 bytes at offset 4295680512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684608 ++read 4096/4096 bytes at offset 4295684608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688704 ++read 4096/4096 bytes at offset 4295688704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692800 ++read 4096/4096 bytes at offset 4295692800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696896 ++read 4096/4096 bytes at offset 4295696896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700992 ++read 4096/4096 bytes at offset 4295700992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295705088 ++read 4096/4096 bytes at offset 4295705088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295709184 ++read 4096/4096 bytes at offset 4295709184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295713280 ++read 4096/4096 bytes at offset 4295713280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295717376 ++read 4096/4096 bytes at offset 4295717376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295721472 ++read 4096/4096 bytes at offset 4295721472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725568 ++read 4096/4096 bytes at offset 4295725568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729664 ++read 4096/4096 bytes at offset 4295729664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733760 ++read 4096/4096 bytes at offset 4295733760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737856 ++read 4096/4096 bytes at offset 4295737856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741952 ++read 4096/4096 bytes at offset 4295741952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295746048 ++read 4096/4096 bytes at offset 4295746048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295750144 ++read 4096/4096 bytes at offset 4295750144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295754240 ++read 4096/4096 bytes at offset 4295754240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295758336 ++read 4096/4096 bytes at offset 4295758336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295762432 ++read 4096/4096 bytes at offset 4295762432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766528 ++read 4096/4096 bytes at offset 4295766528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770624 ++read 4096/4096 bytes at offset 4295770624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774720 ++read 4096/4096 bytes at offset 4295774720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778816 ++read 4096/4096 bytes at offset 4295778816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782912 ++read 4096/4096 bytes at offset 4295782912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295787008 ++read 4096/4096 bytes at offset 4295787008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295791104 ++read 4096/4096 bytes at offset 4295791104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295795200 ++read 4096/4096 bytes at offset 4295795200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295799296 ++read 4096/4096 bytes at offset 4295799296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295803392 ++read 4096/4096 bytes at offset 4295803392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295807488 ++read 4096/4096 bytes at offset 4295807488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811584 ++read 4096/4096 bytes at offset 4295811584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815680 ++read 4096/4096 bytes at offset 4295815680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819776 ++read 4096/4096 bytes at offset 4295819776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823872 ++read 4096/4096 bytes at offset 4295823872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827968 ++read 4096/4096 bytes at offset 4295827968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295832064 ++read 4096/4096 bytes at offset 4295832064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295836160 ++read 4096/4096 bytes at offset 4295836160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295840256 ++read 4096/4096 bytes at offset 4295840256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295844352 ++read 4096/4096 bytes at offset 4295844352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295848448 ++read 4096/4096 bytes at offset 4295848448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852544 ++read 4096/4096 bytes at offset 4295852544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856640 ++read 4096/4096 bytes at offset 4295856640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860736 ++read 4096/4096 bytes at offset 4295860736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864832 ++read 4096/4096 bytes at offset 4295864832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868928 ++read 4096/4096 bytes at offset 4295868928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295873024 ++read 4096/4096 bytes at offset 4295873024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295877120 ++read 4096/4096 bytes at offset 4295877120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295881216 ++read 4096/4096 bytes at offset 4295881216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295885312 ++read 4096/4096 bytes at offset 4295885312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295889408 ++read 4096/4096 bytes at offset 4295889408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295893504 ++read 4096/4096 bytes at offset 4295893504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897600 ++read 4096/4096 bytes at offset 4295897600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901696 ++read 4096/4096 bytes at offset 4295901696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905792 ++read 4096/4096 bytes at offset 4295905792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909888 ++read 4096/4096 bytes at offset 4295909888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913984 ++read 4096/4096 bytes at offset 4295913984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295918080 ++read 4096/4096 bytes at offset 4295918080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295922176 ++read 4096/4096 bytes at offset 4295922176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295926272 ++read 4096/4096 bytes at offset 4295926272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295930368 ++read 4096/4096 bytes at offset 4295930368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295934464 ++read 4096/4096 bytes at offset 4295934464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938560 ++read 4096/4096 bytes at offset 4295938560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942656 ++read 4096/4096 bytes at offset 4295942656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946752 ++read 4096/4096 bytes at offset 4295946752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950848 ++read 4096/4096 bytes at offset 4295950848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954944 ++read 4096/4096 bytes at offset 4295954944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295959040 ++read 4096/4096 bytes at offset 4295959040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295963136 ++read 4096/4096 bytes at offset 4295963136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295967232 ++read 4096/4096 bytes at offset 4295967232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295971328 ++read 4096/4096 bytes at offset 4295971328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295975424 ++read 4096/4096 bytes at offset 4295975424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979520 ++read 4096/4096 bytes at offset 4295979520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983616 ++read 4096/4096 bytes at offset 4295983616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987712 ++read 4096/4096 bytes at offset 4295987712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991808 ++read 4096/4096 bytes at offset 4295991808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995904 ++read 4096/4096 bytes at offset 4295995904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296000000 ++read 4096/4096 bytes at offset 4296000000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296004096 ++read 4096/4096 bytes at offset 4296004096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296008192 ++read 4096/4096 bytes at offset 4296008192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296012288 ++read 4096/4096 bytes at offset 4296012288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 2048/2048 bytes at offset 4296018432 ++=== IO: pattern 5 ++read 2048/2048 bytes at offset 4296018432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022528 ++read 2048/2048 bytes at offset 4296022528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026624 ++read 2048/2048 bytes at offset 4296026624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030720 ++read 2048/2048 bytes at offset 4296030720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034816 ++read 2048/2048 bytes at offset 4296034816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038912 ++read 2048/2048 bytes at offset 4296038912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296043008 ++read 2048/2048 bytes at offset 4296043008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296047104 ++read 2048/2048 bytes at offset 4296047104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296051200 ++read 2048/2048 bytes at offset 4296051200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296055296 ++read 2048/2048 bytes at offset 4296055296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296059392 ++read 2048/2048 bytes at offset 4296059392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296063488 ++read 2048/2048 bytes at offset 4296063488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067584 ++read 2048/2048 bytes at offset 4296067584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071680 ++read 2048/2048 bytes at offset 4296071680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075776 ++read 2048/2048 bytes at offset 4296075776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079872 ++read 2048/2048 bytes at offset 4296079872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083968 ++read 2048/2048 bytes at offset 4296083968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296088064 ++read 2048/2048 bytes at offset 4296088064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296092160 ++read 2048/2048 bytes at offset 4296092160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296096256 ++read 2048/2048 bytes at offset 4296096256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296100352 ++read 2048/2048 bytes at offset 4296100352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296104448 ++read 2048/2048 bytes at offset 4296104448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108544 ++read 2048/2048 bytes at offset 4296108544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112640 ++read 2048/2048 bytes at offset 4296112640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116736 ++read 2048/2048 bytes at offset 4296116736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120832 ++read 2048/2048 bytes at offset 4296120832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124928 ++read 2048/2048 bytes at offset 4296124928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296129024 ++read 2048/2048 bytes at offset 4296129024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296133120 ++read 2048/2048 bytes at offset 4296133120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296137216 ++read 2048/2048 bytes at offset 4296137216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296141312 ++read 2048/2048 bytes at offset 4296141312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296145408 ++read 2048/2048 bytes at offset 4296145408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296149504 ++read 2048/2048 bytes at offset 4296149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153600 ++read 2048/2048 bytes at offset 4296153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157696 ++read 2048/2048 bytes at offset 4296157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161792 ++read 2048/2048 bytes at offset 4296161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165888 ++read 2048/2048 bytes at offset 4296165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169984 ++read 2048/2048 bytes at offset 4296169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296174080 ++read 2048/2048 bytes at offset 4296174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296178176 ++read 2048/2048 bytes at offset 4296178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296182272 ++read 2048/2048 bytes at offset 4296182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296186368 ++read 2048/2048 bytes at offset 4296186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296190464 ++read 2048/2048 bytes at offset 4296190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194560 ++read 2048/2048 bytes at offset 4296194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198656 ++read 2048/2048 bytes at offset 4296198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202752 ++read 2048/2048 bytes at offset 4296202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206848 ++read 2048/2048 bytes at offset 4296206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210944 ++read 2048/2048 bytes at offset 4296210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296215040 ++read 2048/2048 bytes at offset 4296215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296219136 ++read 2048/2048 bytes at offset 4296219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296223232 ++read 2048/2048 bytes at offset 4296223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296227328 ++read 2048/2048 bytes at offset 4296227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296231424 ++read 2048/2048 bytes at offset 4296231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235520 ++read 2048/2048 bytes at offset 4296235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239616 ++read 2048/2048 bytes at offset 4296239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243712 ++read 2048/2048 bytes at offset 4296243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247808 ++read 2048/2048 bytes at offset 4296247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251904 ++read 2048/2048 bytes at offset 4296251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296256000 ++read 2048/2048 bytes at offset 4296256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296260096 ++read 2048/2048 bytes at offset 4296260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296264192 ++read 2048/2048 bytes at offset 4296264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296268288 ++read 2048/2048 bytes at offset 4296268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296272384 ++read 2048/2048 bytes at offset 4296272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296276480 ++read 2048/2048 bytes at offset 4296276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280576 ++read 2048/2048 bytes at offset 4296280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284672 ++read 2048/2048 bytes at offset 4296284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288768 ++read 2048/2048 bytes at offset 4296288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292864 ++read 2048/2048 bytes at offset 4296292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296960 ++read 2048/2048 bytes at offset 4296296960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296301056 ++read 2048/2048 bytes at offset 4296301056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296305152 ++read 2048/2048 bytes at offset 4296305152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296309248 ++read 2048/2048 bytes at offset 4296309248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296313344 ++read 2048/2048 bytes at offset 4296313344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296317440 ++read 2048/2048 bytes at offset 4296317440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321536 ++read 2048/2048 bytes at offset 4296321536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325632 ++read 2048/2048 bytes at offset 4296325632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329728 ++read 2048/2048 bytes at offset 4296329728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333824 ++read 2048/2048 bytes at offset 4296333824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337920 ++read 2048/2048 bytes at offset 4296337920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296342016 ++read 2048/2048 bytes at offset 4296342016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296346112 ++read 2048/2048 bytes at offset 4296346112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296350208 ++read 2048/2048 bytes at offset 4296350208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296354304 ++read 2048/2048 bytes at offset 4296354304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296358400 ++read 2048/2048 bytes at offset 4296358400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296362496 ++read 2048/2048 bytes at offset 4296362496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366592 ++read 2048/2048 bytes at offset 4296366592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370688 ++read 2048/2048 bytes at offset 4296370688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374784 ++read 2048/2048 bytes at offset 4296374784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378880 ++read 2048/2048 bytes at offset 4296378880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382976 ++read 2048/2048 bytes at offset 4296382976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296387072 ++read 2048/2048 bytes at offset 4296387072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296391168 ++read 2048/2048 bytes at offset 4296391168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296395264 ++read 2048/2048 bytes at offset 4296395264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296399360 ++read 2048/2048 bytes at offset 4296399360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296403456 ++read 2048/2048 bytes at offset 4296403456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407552 ++read 2048/2048 bytes at offset 4296407552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411648 ++read 2048/2048 bytes at offset 4296411648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415744 ++read 2048/2048 bytes at offset 4296415744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419840 ++read 2048/2048 bytes at offset 4296419840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423936 ++read 2048/2048 bytes at offset 4296423936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296428032 ++read 2048/2048 bytes at offset 4296428032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296432128 ++read 2048/2048 bytes at offset 4296432128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296436224 ++read 2048/2048 bytes at offset 4296436224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296440320 ++read 2048/2048 bytes at offset 4296440320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296444416 ++read 2048/2048 bytes at offset 4296444416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448512 ++read 2048/2048 bytes at offset 4296448512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452608 ++read 2048/2048 bytes at offset 4296452608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456704 ++read 2048/2048 bytes at offset 4296456704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460800 ++read 2048/2048 bytes at offset 4296460800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464896 ++read 2048/2048 bytes at offset 4296464896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468992 ++read 2048/2048 bytes at offset 4296468992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296473088 ++read 2048/2048 bytes at offset 4296473088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296477184 ++read 2048/2048 bytes at offset 4296477184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296481280 ++read 2048/2048 bytes at offset 4296481280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296485376 ++read 2048/2048 bytes at offset 4296485376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296489472 ++read 2048/2048 bytes at offset 4296489472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493568 ++read 2048/2048 bytes at offset 4296493568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497664 ++read 2048/2048 bytes at offset 4296497664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501760 ++read 2048/2048 bytes at offset 4296501760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505856 ++read 2048/2048 bytes at offset 4296505856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509952 ++read 2048/2048 bytes at offset 4296509952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296514048 ++read 2048/2048 bytes at offset 4296514048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296518144 ++read 2048/2048 bytes at offset 4296518144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296522240 ++read 2048/2048 bytes at offset 4296522240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296526336 ++read 2048/2048 bytes at offset 4296526336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296530432 ++read 2048/2048 bytes at offset 4296530432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534528 ++read 2048/2048 bytes at offset 4296534528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538624 ++read 2048/2048 bytes at offset 4296538624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542720 ++read 2048/2048 bytes at offset 4296542720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546816 ++read 2048/2048 bytes at offset 4296546816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550912 ++read 2048/2048 bytes at offset 4296550912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296555008 ++read 2048/2048 bytes at offset 4296555008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296559104 ++read 2048/2048 bytes at offset 4296559104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296563200 ++read 2048/2048 bytes at offset 4296563200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296567296 ++read 2048/2048 bytes at offset 4296567296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296571392 ++read 2048/2048 bytes at offset 4296571392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296575488 ++read 2048/2048 bytes at offset 4296575488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579584 ++read 2048/2048 bytes at offset 4296579584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583680 ++read 2048/2048 bytes at offset 4296583680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587776 ++read 2048/2048 bytes at offset 4296587776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591872 ++read 2048/2048 bytes at offset 4296591872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595968 ++read 2048/2048 bytes at offset 4296595968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296600064 ++read 2048/2048 bytes at offset 4296600064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296604160 ++read 2048/2048 bytes at offset 4296604160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296608256 ++read 2048/2048 bytes at offset 4296608256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296612352 ++read 2048/2048 bytes at offset 4296612352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296616448 ++read 2048/2048 bytes at offset 4296616448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620544 ++read 2048/2048 bytes at offset 4296620544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624640 ++read 2048/2048 bytes at offset 4296624640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628736 ++read 2048/2048 bytes at offset 4296628736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632832 ++read 2048/2048 bytes at offset 4296632832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636928 ++read 2048/2048 bytes at offset 4296636928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296641024 ++read 2048/2048 bytes at offset 4296641024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296645120 ++read 2048/2048 bytes at offset 4296645120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296649216 ++read 2048/2048 bytes at offset 4296649216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296653312 ++read 2048/2048 bytes at offset 4296653312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296657408 ++read 2048/2048 bytes at offset 4296657408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296661504 ++read 2048/2048 bytes at offset 4296661504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665600 ++read 2048/2048 bytes at offset 4296665600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669696 ++read 2048/2048 bytes at offset 4296669696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673792 ++read 2048/2048 bytes at offset 4296673792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677888 ++read 2048/2048 bytes at offset 4296677888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681984 ++read 2048/2048 bytes at offset 4296681984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296686080 ++read 2048/2048 bytes at offset 4296686080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296690176 ++read 2048/2048 bytes at offset 4296690176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296694272 ++read 2048/2048 bytes at offset 4296694272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296698368 ++read 2048/2048 bytes at offset 4296698368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296702464 ++read 2048/2048 bytes at offset 4296702464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706560 ++read 2048/2048 bytes at offset 4296706560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710656 ++read 2048/2048 bytes at offset 4296710656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714752 ++read 2048/2048 bytes at offset 4296714752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718848 ++read 2048/2048 bytes at offset 4296718848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722944 ++read 2048/2048 bytes at offset 4296722944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296727040 ++read 2048/2048 bytes at offset 4296727040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296731136 ++read 2048/2048 bytes at offset 4296731136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296735232 ++read 2048/2048 bytes at offset 4296735232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296739328 ++read 2048/2048 bytes at offset 4296739328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296743424 ++read 2048/2048 bytes at offset 4296743424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747520 ++read 2048/2048 bytes at offset 4296747520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751616 ++read 2048/2048 bytes at offset 4296751616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755712 ++read 2048/2048 bytes at offset 4296755712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759808 ++read 2048/2048 bytes at offset 4296759808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763904 ++read 2048/2048 bytes at offset 4296763904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296768000 ++read 2048/2048 bytes at offset 4296768000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296772096 ++read 2048/2048 bytes at offset 4296772096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296776192 ++read 2048/2048 bytes at offset 4296776192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296780288 ++read 2048/2048 bytes at offset 4296780288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296784384 ++read 2048/2048 bytes at offset 4296784384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296788480 ++read 2048/2048 bytes at offset 4296788480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792576 ++read 2048/2048 bytes at offset 4296792576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796672 ++read 2048/2048 bytes at offset 4296796672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800768 ++read 2048/2048 bytes at offset 4296800768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804864 ++read 2048/2048 bytes at offset 4296804864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808960 ++read 2048/2048 bytes at offset 4296808960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296813056 ++read 2048/2048 bytes at offset 4296813056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296817152 ++read 2048/2048 bytes at offset 4296817152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296821248 ++read 2048/2048 bytes at offset 4296821248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296825344 ++read 2048/2048 bytes at offset 4296825344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296829440 ++read 2048/2048 bytes at offset 4296829440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833536 ++read 2048/2048 bytes at offset 4296833536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837632 ++read 2048/2048 bytes at offset 4296837632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841728 ++read 2048/2048 bytes at offset 4296841728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845824 ++read 2048/2048 bytes at offset 4296845824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849920 ++read 2048/2048 bytes at offset 4296849920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296854016 ++read 2048/2048 bytes at offset 4296854016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296858112 ++read 2048/2048 bytes at offset 4296858112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296862208 ++read 2048/2048 bytes at offset 4296862208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296866304 ++read 2048/2048 bytes at offset 4296866304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296870400 ++read 2048/2048 bytes at offset 4296870400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296874496 ++read 2048/2048 bytes at offset 4296874496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878592 ++read 2048/2048 bytes at offset 4296878592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882688 ++read 2048/2048 bytes at offset 4296882688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886784 ++read 2048/2048 bytes at offset 4296886784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890880 ++read 2048/2048 bytes at offset 4296890880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894976 ++read 2048/2048 bytes at offset 4296894976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296899072 ++read 2048/2048 bytes at offset 4296899072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296903168 ++read 2048/2048 bytes at offset 4296903168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296907264 ++read 2048/2048 bytes at offset 4296907264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296911360 ++read 2048/2048 bytes at offset 4296911360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296915456 ++read 2048/2048 bytes at offset 4296915456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919552 ++read 2048/2048 bytes at offset 4296919552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923648 ++read 2048/2048 bytes at offset 4296923648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927744 ++read 2048/2048 bytes at offset 4296927744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931840 ++read 2048/2048 bytes at offset 4296931840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935936 ++read 2048/2048 bytes at offset 4296935936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296940032 ++read 2048/2048 bytes at offset 4296940032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296944128 ++read 2048/2048 bytes at offset 4296944128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296948224 ++read 2048/2048 bytes at offset 4296948224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296952320 ++read 2048/2048 bytes at offset 4296952320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296956416 ++read 2048/2048 bytes at offset 4296956416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960512 ++read 2048/2048 bytes at offset 4296960512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964608 ++read 2048/2048 bytes at offset 4296964608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968704 ++read 2048/2048 bytes at offset 4296968704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972800 ++read 2048/2048 bytes at offset 4296972800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976896 ++read 2048/2048 bytes at offset 4296976896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980992 ++read 2048/2048 bytes at offset 4296980992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296985088 ++read 2048/2048 bytes at offset 4296985088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296989184 ++read 2048/2048 bytes at offset 4296989184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296993280 ++read 2048/2048 bytes at offset 4296993280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296997376 ++read 2048/2048 bytes at offset 4296997376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297001472 ++read 2048/2048 bytes at offset 4297001472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005568 ++read 2048/2048 bytes at offset 4297005568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009664 ++read 2048/2048 bytes at offset 4297009664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013760 ++read 2048/2048 bytes at offset 4297013760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017856 ++read 2048/2048 bytes at offset 4297017856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021952 ++read 2048/2048 bytes at offset 4297021952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297026048 ++read 2048/2048 bytes at offset 4297026048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297030144 ++read 2048/2048 bytes at offset 4297030144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297034240 ++read 2048/2048 bytes at offset 4297034240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297038336 ++read 2048/2048 bytes at offset 4297038336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297042432 ++read 2048/2048 bytes at offset 4297042432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046528 ++read 2048/2048 bytes at offset 4297046528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050624 ++read 2048/2048 bytes at offset 4297050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054720 ++read 2048/2048 bytes at offset 4297054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058816 ++read 2048/2048 bytes at offset 4297058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062912 ++read 2048/2048 bytes at offset 4297062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 2048/2048 bytes at offset 4297064960 ++=== IO: pattern 1 ++read 2048/2048 bytes at offset 4297064960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297069056 ++read 2048/2048 bytes at offset 4297069056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297073152 ++read 2048/2048 bytes at offset 4297073152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297077248 ++read 2048/2048 bytes at offset 4297077248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297081344 ++read 2048/2048 bytes at offset 4297081344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297085440 ++read 2048/2048 bytes at offset 4297085440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089536 ++read 2048/2048 bytes at offset 4297089536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093632 ++read 2048/2048 bytes at offset 4297093632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097728 ++read 2048/2048 bytes at offset 4297097728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101824 ++read 2048/2048 bytes at offset 4297101824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105920 ++read 2048/2048 bytes at offset 4297105920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297110016 ++read 2048/2048 bytes at offset 4297110016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297114112 ++read 2048/2048 bytes at offset 4297114112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297118208 ++read 2048/2048 bytes at offset 4297118208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297122304 ++read 2048/2048 bytes at offset 4297122304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297126400 ++read 2048/2048 bytes at offset 4297126400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297130496 ++read 2048/2048 bytes at offset 4297130496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134592 ++read 2048/2048 bytes at offset 4297134592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138688 ++read 2048/2048 bytes at offset 4297138688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142784 ++read 2048/2048 bytes at offset 4297142784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146880 ++read 2048/2048 bytes at offset 4297146880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150976 ++read 2048/2048 bytes at offset 4297150976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297155072 ++read 2048/2048 bytes at offset 4297155072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297159168 ++read 2048/2048 bytes at offset 4297159168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297163264 ++read 2048/2048 bytes at offset 4297163264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297167360 ++read 2048/2048 bytes at offset 4297167360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297171456 ++read 2048/2048 bytes at offset 4297171456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175552 ++read 2048/2048 bytes at offset 4297175552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179648 ++read 2048/2048 bytes at offset 4297179648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183744 ++read 2048/2048 bytes at offset 4297183744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187840 ++read 2048/2048 bytes at offset 4297187840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191936 ++read 2048/2048 bytes at offset 4297191936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297196032 ++read 2048/2048 bytes at offset 4297196032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297200128 ++read 2048/2048 bytes at offset 4297200128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297204224 ++read 2048/2048 bytes at offset 4297204224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297208320 ++read 2048/2048 bytes at offset 4297208320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297212416 ++read 2048/2048 bytes at offset 4297212416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216512 ++read 2048/2048 bytes at offset 4297216512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220608 ++read 2048/2048 bytes at offset 4297220608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224704 ++read 2048/2048 bytes at offset 4297224704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228800 ++read 2048/2048 bytes at offset 4297228800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232896 ++read 2048/2048 bytes at offset 4297232896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236992 ++read 2048/2048 bytes at offset 4297236992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297241088 ++read 2048/2048 bytes at offset 4297241088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297245184 ++read 2048/2048 bytes at offset 4297245184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297249280 ++read 2048/2048 bytes at offset 4297249280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297253376 ++read 2048/2048 bytes at offset 4297253376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297257472 ++read 2048/2048 bytes at offset 4297257472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261568 ++read 2048/2048 bytes at offset 4297261568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265664 ++read 2048/2048 bytes at offset 4297265664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269760 ++read 2048/2048 bytes at offset 4297269760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273856 ++read 2048/2048 bytes at offset 4297273856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277952 ++read 2048/2048 bytes at offset 4297277952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297282048 ++read 2048/2048 bytes at offset 4297282048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297286144 ++read 2048/2048 bytes at offset 4297286144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297290240 ++read 2048/2048 bytes at offset 4297290240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297294336 ++read 2048/2048 bytes at offset 4297294336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297298432 ++read 2048/2048 bytes at offset 4297298432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302528 ++read 2048/2048 bytes at offset 4297302528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306624 ++read 2048/2048 bytes at offset 4297306624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310720 ++read 2048/2048 bytes at offset 4297310720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314816 ++read 2048/2048 bytes at offset 4297314816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318912 ++read 2048/2048 bytes at offset 4297318912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297323008 ++read 2048/2048 bytes at offset 4297323008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297327104 ++read 2048/2048 bytes at offset 4297327104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297331200 ++read 2048/2048 bytes at offset 4297331200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297335296 ++read 2048/2048 bytes at offset 4297335296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297339392 ++read 2048/2048 bytes at offset 4297339392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297343488 ++read 2048/2048 bytes at offset 4297343488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347584 ++read 2048/2048 bytes at offset 4297347584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351680 ++read 2048/2048 bytes at offset 4297351680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355776 ++read 2048/2048 bytes at offset 4297355776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359872 ++read 2048/2048 bytes at offset 4297359872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363968 ++read 2048/2048 bytes at offset 4297363968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297368064 ++read 2048/2048 bytes at offset 4297368064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297372160 ++read 2048/2048 bytes at offset 4297372160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297376256 ++read 2048/2048 bytes at offset 4297376256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297380352 ++read 2048/2048 bytes at offset 4297380352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297384448 ++read 2048/2048 bytes at offset 4297384448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388544 ++read 2048/2048 bytes at offset 4297388544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392640 ++read 2048/2048 bytes at offset 4297392640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396736 ++read 2048/2048 bytes at offset 4297396736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400832 ++read 2048/2048 bytes at offset 4297400832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404928 ++read 2048/2048 bytes at offset 4297404928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297409024 ++read 2048/2048 bytes at offset 4297409024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297413120 ++read 2048/2048 bytes at offset 4297413120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297417216 ++read 2048/2048 bytes at offset 4297417216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297421312 ++read 2048/2048 bytes at offset 4297421312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297425408 ++read 2048/2048 bytes at offset 4297425408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297429504 ++read 2048/2048 bytes at offset 4297429504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433600 ++read 2048/2048 bytes at offset 4297433600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437696 ++read 2048/2048 bytes at offset 4297437696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441792 ++read 2048/2048 bytes at offset 4297441792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445888 ++read 2048/2048 bytes at offset 4297445888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449984 ++read 2048/2048 bytes at offset 4297449984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297454080 ++read 2048/2048 bytes at offset 4297454080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297458176 ++read 2048/2048 bytes at offset 4297458176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297462272 ++read 2048/2048 bytes at offset 4297462272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297466368 ++read 2048/2048 bytes at offset 4297466368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297470464 ++read 2048/2048 bytes at offset 4297470464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474560 ++read 2048/2048 bytes at offset 4297474560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478656 ++read 2048/2048 bytes at offset 4297478656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482752 ++read 2048/2048 bytes at offset 4297482752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486848 ++read 2048/2048 bytes at offset 4297486848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490944 ++read 2048/2048 bytes at offset 4297490944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297495040 ++read 2048/2048 bytes at offset 4297495040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297499136 ++read 2048/2048 bytes at offset 4297499136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297503232 ++read 2048/2048 bytes at offset 4297503232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297507328 ++read 2048/2048 bytes at offset 4297507328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297511424 ++read 2048/2048 bytes at offset 4297511424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515520 ++read 2048/2048 bytes at offset 4297515520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519616 ++read 2048/2048 bytes at offset 4297519616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523712 ++read 2048/2048 bytes at offset 4297523712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527808 ++read 2048/2048 bytes at offset 4297527808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531904 ++read 2048/2048 bytes at offset 4297531904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297536000 ++read 2048/2048 bytes at offset 4297536000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297540096 ++read 2048/2048 bytes at offset 4297540096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297544192 ++read 2048/2048 bytes at offset 4297544192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297548288 ++read 2048/2048 bytes at offset 4297548288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297552384 ++read 2048/2048 bytes at offset 4297552384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297556480 ++read 2048/2048 bytes at offset 4297556480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560576 ++read 2048/2048 bytes at offset 4297560576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564672 ++read 2048/2048 bytes at offset 4297564672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568768 ++read 2048/2048 bytes at offset 4297568768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572864 ++read 2048/2048 bytes at offset 4297572864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576960 ++read 2048/2048 bytes at offset 4297576960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297581056 ++read 2048/2048 bytes at offset 4297581056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297585152 ++read 2048/2048 bytes at offset 4297585152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297589248 ++read 2048/2048 bytes at offset 4297589248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297593344 ++read 2048/2048 bytes at offset 4297593344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297597440 ++read 2048/2048 bytes at offset 4297597440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601536 ++read 2048/2048 bytes at offset 4297601536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605632 ++read 2048/2048 bytes at offset 4297605632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609728 ++read 2048/2048 bytes at offset 4297609728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613824 ++read 2048/2048 bytes at offset 4297613824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617920 ++read 2048/2048 bytes at offset 4297617920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297622016 ++read 2048/2048 bytes at offset 4297622016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297626112 ++read 2048/2048 bytes at offset 4297626112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297630208 ++read 2048/2048 bytes at offset 4297630208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297634304 ++read 2048/2048 bytes at offset 4297634304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297638400 ++read 2048/2048 bytes at offset 4297638400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297642496 ++read 2048/2048 bytes at offset 4297642496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646592 ++read 2048/2048 bytes at offset 4297646592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650688 ++read 2048/2048 bytes at offset 4297650688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654784 ++read 2048/2048 bytes at offset 4297654784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658880 ++read 2048/2048 bytes at offset 4297658880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662976 ++read 2048/2048 bytes at offset 4297662976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297667072 ++read 2048/2048 bytes at offset 4297667072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297671168 ++read 2048/2048 bytes at offset 4297671168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297675264 ++read 2048/2048 bytes at offset 4297675264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297679360 ++read 2048/2048 bytes at offset 4297679360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297683456 ++read 2048/2048 bytes at offset 4297683456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687552 ++read 2048/2048 bytes at offset 4297687552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691648 ++read 2048/2048 bytes at offset 4297691648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695744 ++read 2048/2048 bytes at offset 4297695744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699840 ++read 2048/2048 bytes at offset 4297699840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703936 ++read 2048/2048 bytes at offset 4297703936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297708032 ++read 2048/2048 bytes at offset 4297708032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297712128 ++read 2048/2048 bytes at offset 4297712128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297716224 ++read 2048/2048 bytes at offset 4297716224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297720320 ++read 2048/2048 bytes at offset 4297720320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297724416 ++read 2048/2048 bytes at offset 4297724416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728512 ++read 2048/2048 bytes at offset 4297728512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732608 ++read 2048/2048 bytes at offset 4297732608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736704 ++read 2048/2048 bytes at offset 4297736704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740800 ++read 2048/2048 bytes at offset 4297740800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744896 ++read 2048/2048 bytes at offset 4297744896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748992 ++read 2048/2048 bytes at offset 4297748992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297753088 ++read 2048/2048 bytes at offset 4297753088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297757184 ++read 2048/2048 bytes at offset 4297757184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297761280 ++read 2048/2048 bytes at offset 4297761280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297765376 ++read 2048/2048 bytes at offset 4297765376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297769472 ++read 2048/2048 bytes at offset 4297769472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773568 ++read 2048/2048 bytes at offset 4297773568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777664 ++read 2048/2048 bytes at offset 4297777664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781760 ++read 2048/2048 bytes at offset 4297781760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785856 ++read 2048/2048 bytes at offset 4297785856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789952 ++read 2048/2048 bytes at offset 4297789952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297794048 ++read 2048/2048 bytes at offset 4297794048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297798144 ++read 2048/2048 bytes at offset 4297798144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297802240 ++read 2048/2048 bytes at offset 4297802240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297806336 ++read 2048/2048 bytes at offset 4297806336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297810432 ++read 2048/2048 bytes at offset 4297810432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814528 ++read 2048/2048 bytes at offset 4297814528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818624 ++read 2048/2048 bytes at offset 4297818624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822720 ++read 2048/2048 bytes at offset 4297822720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826816 ++read 2048/2048 bytes at offset 4297826816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830912 ++read 2048/2048 bytes at offset 4297830912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297835008 ++read 2048/2048 bytes at offset 4297835008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297839104 ++read 2048/2048 bytes at offset 4297839104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297843200 ++read 2048/2048 bytes at offset 4297843200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297847296 ++read 2048/2048 bytes at offset 4297847296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297851392 ++read 2048/2048 bytes at offset 4297851392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297855488 ++read 2048/2048 bytes at offset 4297855488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859584 ++read 2048/2048 bytes at offset 4297859584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863680 ++read 2048/2048 bytes at offset 4297863680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867776 ++read 2048/2048 bytes at offset 4297867776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871872 ++read 2048/2048 bytes at offset 4297871872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875968 ++read 2048/2048 bytes at offset 4297875968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297880064 ++read 2048/2048 bytes at offset 4297880064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297884160 ++read 2048/2048 bytes at offset 4297884160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297888256 ++read 2048/2048 bytes at offset 4297888256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297892352 ++read 2048/2048 bytes at offset 4297892352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297896448 ++read 2048/2048 bytes at offset 4297896448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900544 ++read 2048/2048 bytes at offset 4297900544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904640 ++read 2048/2048 bytes at offset 4297904640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908736 ++read 2048/2048 bytes at offset 4297908736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912832 ++read 2048/2048 bytes at offset 4297912832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916928 ++read 2048/2048 bytes at offset 4297916928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297921024 ++read 2048/2048 bytes at offset 4297921024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297925120 ++read 2048/2048 bytes at offset 4297925120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297929216 ++read 2048/2048 bytes at offset 4297929216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297933312 ++read 2048/2048 bytes at offset 4297933312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297937408 ++read 2048/2048 bytes at offset 4297937408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297941504 ++read 2048/2048 bytes at offset 4297941504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945600 ++read 2048/2048 bytes at offset 4297945600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949696 ++read 2048/2048 bytes at offset 4297949696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953792 ++read 2048/2048 bytes at offset 4297953792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957888 ++read 2048/2048 bytes at offset 4297957888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961984 ++read 2048/2048 bytes at offset 4297961984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297966080 ++read 2048/2048 bytes at offset 4297966080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297970176 ++read 2048/2048 bytes at offset 4297970176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297974272 ++read 2048/2048 bytes at offset 4297974272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297978368 ++read 2048/2048 bytes at offset 4297978368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297982464 ++read 2048/2048 bytes at offset 4297982464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986560 ++read 2048/2048 bytes at offset 4297986560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990656 ++read 2048/2048 bytes at offset 4297990656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994752 ++read 2048/2048 bytes at offset 4297994752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998848 ++read 2048/2048 bytes at offset 4297998848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002944 ++read 2048/2048 bytes at offset 4298002944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298007040 ++read 2048/2048 bytes at offset 4298007040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298011136 ++read 2048/2048 bytes at offset 4298011136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298015232 ++read 2048/2048 bytes at offset 4298015232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298019328 ++read 2048/2048 bytes at offset 4298019328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298023424 ++read 2048/2048 bytes at offset 4298023424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027520 ++read 2048/2048 bytes at offset 4298027520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031616 ++read 2048/2048 bytes at offset 4298031616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035712 ++read 2048/2048 bytes at offset 4298035712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039808 ++read 2048/2048 bytes at offset 4298039808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043904 ++read 2048/2048 bytes at offset 4298043904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298048000 ++read 2048/2048 bytes at offset 4298048000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298052096 ++read 2048/2048 bytes at offset 4298052096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298056192 ++read 2048/2048 bytes at offset 4298056192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298060288 ++read 2048/2048 bytes at offset 4298060288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298064384 ++read 2048/2048 bytes at offset 4298064384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298068480 ++read 2048/2048 bytes at offset 4298068480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072576 ++read 2048/2048 bytes at offset 4298072576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076672 ++read 2048/2048 bytes at offset 4298076672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080768 ++read 2048/2048 bytes at offset 4298080768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084864 ++read 2048/2048 bytes at offset 4298084864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088960 ++read 2048/2048 bytes at offset 4298088960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298093056 ++read 2048/2048 bytes at offset 4298093056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298097152 ++read 2048/2048 bytes at offset 4298097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298101248 ++read 2048/2048 bytes at offset 4298101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298105344 ++read 2048/2048 bytes at offset 4298105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298109440 ++read 2048/2048 bytes at offset 4298109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> read 2048/2048 bytes at offset 4298114560 ++=== IO: pattern 3 ++read 2048/2048 bytes at offset 4298114560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118656 ++read 2048/2048 bytes at offset 4298118656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122752 ++read 2048/2048 bytes at offset 4298122752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126848 ++read 2048/2048 bytes at offset 4298126848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130944 ++read 2048/2048 bytes at offset 4298130944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298135040 ++read 2048/2048 bytes at offset 4298135040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298139136 ++read 2048/2048 bytes at offset 4298139136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298143232 ++read 2048/2048 bytes at offset 4298143232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298147328 ++read 2048/2048 bytes at offset 4298147328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298151424 ++read 2048/2048 bytes at offset 4298151424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155520 ++read 2048/2048 bytes at offset 4298155520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159616 ++read 2048/2048 bytes at offset 4298159616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163712 ++read 2048/2048 bytes at offset 4298163712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167808 ++read 2048/2048 bytes at offset 4298167808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171904 ++read 2048/2048 bytes at offset 4298171904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298176000 ++read 2048/2048 bytes at offset 4298176000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298180096 ++read 2048/2048 bytes at offset 4298180096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298184192 ++read 2048/2048 bytes at offset 4298184192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298188288 ++read 2048/2048 bytes at offset 4298188288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298192384 ++read 2048/2048 bytes at offset 4298192384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298196480 ++read 2048/2048 bytes at offset 4298196480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200576 ++read 2048/2048 bytes at offset 4298200576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204672 ++read 2048/2048 bytes at offset 4298204672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208768 ++read 2048/2048 bytes at offset 4298208768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212864 ++read 2048/2048 bytes at offset 4298212864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216960 ++read 2048/2048 bytes at offset 4298216960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298221056 ++read 2048/2048 bytes at offset 4298221056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298225152 ++read 2048/2048 bytes at offset 4298225152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298229248 ++read 2048/2048 bytes at offset 4298229248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298233344 ++read 2048/2048 bytes at offset 4298233344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298237440 ++read 2048/2048 bytes at offset 4298237440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241536 ++read 2048/2048 bytes at offset 4298241536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245632 ++read 2048/2048 bytes at offset 4298245632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249728 ++read 2048/2048 bytes at offset 4298249728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253824 ++read 2048/2048 bytes at offset 4298253824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257920 ++read 2048/2048 bytes at offset 4298257920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298262016 ++read 2048/2048 bytes at offset 4298262016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298266112 ++read 2048/2048 bytes at offset 4298266112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298270208 ++read 2048/2048 bytes at offset 4298270208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298274304 ++read 2048/2048 bytes at offset 4298274304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298278400 ++read 2048/2048 bytes at offset 4298278400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298282496 ++read 2048/2048 bytes at offset 4298282496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286592 ++read 2048/2048 bytes at offset 4298286592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290688 ++read 2048/2048 bytes at offset 4298290688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294784 ++read 2048/2048 bytes at offset 4298294784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298880 ++read 2048/2048 bytes at offset 4298298880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302976 ++read 2048/2048 bytes at offset 4298302976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298307072 ++read 2048/2048 bytes at offset 4298307072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298311168 ++read 2048/2048 bytes at offset 4298311168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298315264 ++read 2048/2048 bytes at offset 4298315264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298319360 ++read 2048/2048 bytes at offset 4298319360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298323456 ++read 2048/2048 bytes at offset 4298323456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327552 ++read 2048/2048 bytes at offset 4298327552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331648 ++read 2048/2048 bytes at offset 4298331648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335744 ++read 2048/2048 bytes at offset 4298335744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339840 ++read 2048/2048 bytes at offset 4298339840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343936 ++read 2048/2048 bytes at offset 4298343936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298348032 ++read 2048/2048 bytes at offset 4298348032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298352128 ++read 2048/2048 bytes at offset 4298352128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298356224 ++read 2048/2048 bytes at offset 4298356224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298360320 ++read 2048/2048 bytes at offset 4298360320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298364416 ++read 2048/2048 bytes at offset 4298364416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368512 ++read 2048/2048 bytes at offset 4298368512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372608 ++read 2048/2048 bytes at offset 4298372608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376704 ++read 2048/2048 bytes at offset 4298376704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380800 ++read 2048/2048 bytes at offset 4298380800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384896 ++read 2048/2048 bytes at offset 4298384896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388992 ++read 2048/2048 bytes at offset 4298388992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298393088 ++read 2048/2048 bytes at offset 4298393088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298397184 ++read 2048/2048 bytes at offset 4298397184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298401280 ++read 2048/2048 bytes at offset 4298401280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298405376 ++read 2048/2048 bytes at offset 4298405376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298409472 ++read 2048/2048 bytes at offset 4298409472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413568 ++read 2048/2048 bytes at offset 4298413568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417664 ++read 2048/2048 bytes at offset 4298417664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421760 ++read 2048/2048 bytes at offset 4298421760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425856 ++read 2048/2048 bytes at offset 4298425856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429952 ++read 2048/2048 bytes at offset 4298429952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298434048 ++read 2048/2048 bytes at offset 4298434048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298438144 ++read 2048/2048 bytes at offset 4298438144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298442240 ++read 2048/2048 bytes at offset 4298442240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298446336 ++read 2048/2048 bytes at offset 4298446336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298450432 ++read 2048/2048 bytes at offset 4298450432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454528 ++read 2048/2048 bytes at offset 4298454528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458624 ++read 2048/2048 bytes at offset 4298458624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462720 ++read 2048/2048 bytes at offset 4298462720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466816 ++read 2048/2048 bytes at offset 4298466816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470912 ++read 2048/2048 bytes at offset 4298470912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298475008 ++read 2048/2048 bytes at offset 4298475008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298479104 ++read 2048/2048 bytes at offset 4298479104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298483200 ++read 2048/2048 bytes at offset 4298483200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298487296 ++read 2048/2048 bytes at offset 4298487296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298491392 ++read 2048/2048 bytes at offset 4298491392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298495488 ++read 2048/2048 bytes at offset 4298495488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499584 ++read 2048/2048 bytes at offset 4298499584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503680 ++read 2048/2048 bytes at offset 4298503680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507776 ++read 2048/2048 bytes at offset 4298507776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511872 ++read 2048/2048 bytes at offset 4298511872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515968 ++read 2048/2048 bytes at offset 4298515968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298520064 ++read 2048/2048 bytes at offset 4298520064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298524160 ++read 2048/2048 bytes at offset 4298524160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298528256 ++read 2048/2048 bytes at offset 4298528256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298532352 ++read 2048/2048 bytes at offset 4298532352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298536448 ++read 2048/2048 bytes at offset 4298536448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540544 ++read 2048/2048 bytes at offset 4298540544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544640 ++read 2048/2048 bytes at offset 4298544640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548736 ++read 2048/2048 bytes at offset 4298548736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552832 ++read 2048/2048 bytes at offset 4298552832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556928 ++read 2048/2048 bytes at offset 4298556928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298561024 ++read 2048/2048 bytes at offset 4298561024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298565120 ++read 2048/2048 bytes at offset 4298565120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298569216 ++read 2048/2048 bytes at offset 4298569216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298573312 ++read 2048/2048 bytes at offset 4298573312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298577408 ++read 2048/2048 bytes at offset 4298577408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298581504 ++read 2048/2048 bytes at offset 4298581504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585600 ++read 2048/2048 bytes at offset 4298585600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589696 ++read 2048/2048 bytes at offset 4298589696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593792 ++read 2048/2048 bytes at offset 4298593792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597888 ++read 2048/2048 bytes at offset 4298597888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601984 ++read 2048/2048 bytes at offset 4298601984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298606080 ++read 2048/2048 bytes at offset 4298606080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298610176 ++read 2048/2048 bytes at offset 4298610176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298614272 ++read 2048/2048 bytes at offset 4298614272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298618368 ++read 2048/2048 bytes at offset 4298618368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298622464 ++read 2048/2048 bytes at offset 4298622464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626560 ++read 2048/2048 bytes at offset 4298626560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630656 ++read 2048/2048 bytes at offset 4298630656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634752 ++read 2048/2048 bytes at offset 4298634752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638848 ++read 2048/2048 bytes at offset 4298638848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642944 ++read 2048/2048 bytes at offset 4298642944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298647040 ++read 2048/2048 bytes at offset 4298647040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298651136 ++read 2048/2048 bytes at offset 4298651136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298655232 ++read 2048/2048 bytes at offset 4298655232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298659328 ++read 2048/2048 bytes at offset 4298659328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298663424 ++read 2048/2048 bytes at offset 4298663424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667520 ++read 2048/2048 bytes at offset 4298667520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671616 ++read 2048/2048 bytes at offset 4298671616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675712 ++read 2048/2048 bytes at offset 4298675712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679808 ++read 2048/2048 bytes at offset 4298679808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683904 ++read 2048/2048 bytes at offset 4298683904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298688000 ++read 2048/2048 bytes at offset 4298688000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298692096 ++read 2048/2048 bytes at offset 4298692096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298696192 ++read 2048/2048 bytes at offset 4298696192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298700288 ++read 2048/2048 bytes at offset 4298700288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298704384 ++read 2048/2048 bytes at offset 4298704384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298708480 ++read 2048/2048 bytes at offset 4298708480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712576 ++read 2048/2048 bytes at offset 4298712576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716672 ++read 2048/2048 bytes at offset 4298716672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720768 ++read 2048/2048 bytes at offset 4298720768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724864 ++read 2048/2048 bytes at offset 4298724864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728960 ++read 2048/2048 bytes at offset 4298728960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298733056 ++read 2048/2048 bytes at offset 4298733056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298737152 ++read 2048/2048 bytes at offset 4298737152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298741248 ++read 2048/2048 bytes at offset 4298741248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298745344 ++read 2048/2048 bytes at offset 4298745344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298749440 ++read 2048/2048 bytes at offset 4298749440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753536 ++read 2048/2048 bytes at offset 4298753536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757632 ++read 2048/2048 bytes at offset 4298757632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761728 ++read 2048/2048 bytes at offset 4298761728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765824 ++read 2048/2048 bytes at offset 4298765824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769920 ++read 2048/2048 bytes at offset 4298769920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298774016 ++read 2048/2048 bytes at offset 4298774016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298778112 ++read 2048/2048 bytes at offset 4298778112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298782208 ++read 2048/2048 bytes at offset 4298782208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298786304 ++read 2048/2048 bytes at offset 4298786304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298790400 ++read 2048/2048 bytes at offset 4298790400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298794496 ++read 2048/2048 bytes at offset 4298794496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798592 ++read 2048/2048 bytes at offset 4298798592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802688 ++read 2048/2048 bytes at offset 4298802688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806784 ++read 2048/2048 bytes at offset 4298806784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810880 ++read 2048/2048 bytes at offset 4298810880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814976 ++read 2048/2048 bytes at offset 4298814976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298819072 ++read 2048/2048 bytes at offset 4298819072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298823168 ++read 2048/2048 bytes at offset 4298823168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298827264 ++read 2048/2048 bytes at offset 4298827264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298831360 ++read 2048/2048 bytes at offset 4298831360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298835456 ++read 2048/2048 bytes at offset 4298835456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839552 ++read 2048/2048 bytes at offset 4298839552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843648 ++read 2048/2048 bytes at offset 4298843648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847744 ++read 2048/2048 bytes at offset 4298847744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851840 ++read 2048/2048 bytes at offset 4298851840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855936 ++read 2048/2048 bytes at offset 4298855936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298860032 ++read 2048/2048 bytes at offset 4298860032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298864128 ++read 2048/2048 bytes at offset 4298864128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298868224 ++read 2048/2048 bytes at offset 4298868224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298872320 ++read 2048/2048 bytes at offset 4298872320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298876416 ++read 2048/2048 bytes at offset 4298876416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880512 ++read 2048/2048 bytes at offset 4298880512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884608 ++read 2048/2048 bytes at offset 4298884608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888704 ++read 2048/2048 bytes at offset 4298888704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892800 ++read 2048/2048 bytes at offset 4298892800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896896 ++read 2048/2048 bytes at offset 4298896896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900992 ++read 2048/2048 bytes at offset 4298900992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298905088 ++read 2048/2048 bytes at offset 4298905088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298909184 ++read 2048/2048 bytes at offset 4298909184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298913280 ++read 2048/2048 bytes at offset 4298913280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298917376 ++read 2048/2048 bytes at offset 4298917376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298921472 ++read 2048/2048 bytes at offset 4298921472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925568 ++read 2048/2048 bytes at offset 4298925568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929664 ++read 2048/2048 bytes at offset 4298929664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933760 ++read 2048/2048 bytes at offset 4298933760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937856 ++read 2048/2048 bytes at offset 4298937856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941952 ++read 2048/2048 bytes at offset 4298941952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298946048 ++read 2048/2048 bytes at offset 4298946048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298950144 ++read 2048/2048 bytes at offset 4298950144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298954240 ++read 2048/2048 bytes at offset 4298954240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298958336 ++read 2048/2048 bytes at offset 4298958336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298962432 ++read 2048/2048 bytes at offset 4298962432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966528 ++read 2048/2048 bytes at offset 4298966528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970624 ++read 2048/2048 bytes at offset 4298970624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974720 ++read 2048/2048 bytes at offset 4298974720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978816 ++read 2048/2048 bytes at offset 4298978816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982912 ++read 2048/2048 bytes at offset 4298982912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298987008 ++read 2048/2048 bytes at offset 4298987008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298991104 ++read 2048/2048 bytes at offset 4298991104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298995200 ++read 2048/2048 bytes at offset 4298995200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298999296 ++read 2048/2048 bytes at offset 4298999296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299003392 ++read 2048/2048 bytes at offset 4299003392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299007488 ++read 2048/2048 bytes at offset 4299007488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011584 ++read 2048/2048 bytes at offset 4299011584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015680 ++read 2048/2048 bytes at offset 4299015680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019776 ++read 2048/2048 bytes at offset 4299019776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023872 ++read 2048/2048 bytes at offset 4299023872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027968 ++read 2048/2048 bytes at offset 4299027968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299032064 ++read 2048/2048 bytes at offset 4299032064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299036160 ++read 2048/2048 bytes at offset 4299036160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299040256 ++read 2048/2048 bytes at offset 4299040256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299044352 ++read 2048/2048 bytes at offset 4299044352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299048448 ++read 2048/2048 bytes at offset 4299048448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052544 ++read 2048/2048 bytes at offset 4299052544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056640 ++read 2048/2048 bytes at offset 4299056640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060736 ++read 2048/2048 bytes at offset 4299060736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064832 ++read 2048/2048 bytes at offset 4299064832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068928 ++read 2048/2048 bytes at offset 4299068928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299073024 ++read 2048/2048 bytes at offset 4299073024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299077120 ++read 2048/2048 bytes at offset 4299077120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299081216 ++read 2048/2048 bytes at offset 4299081216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299085312 ++read 2048/2048 bytes at offset 4299085312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299089408 ++read 2048/2048 bytes at offset 4299089408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299093504 ++read 2048/2048 bytes at offset 4299093504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097600 ++read 2048/2048 bytes at offset 4299097600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101696 ++read 2048/2048 bytes at offset 4299101696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105792 ++read 2048/2048 bytes at offset 4299105792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109888 ++read 2048/2048 bytes at offset 4299109888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113984 ++read 2048/2048 bytes at offset 4299113984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299118080 ++read 2048/2048 bytes at offset 4299118080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299122176 ++read 2048/2048 bytes at offset 4299122176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299126272 ++read 2048/2048 bytes at offset 4299126272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299130368 ++read 2048/2048 bytes at offset 4299130368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299134464 ++read 2048/2048 bytes at offset 4299134464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138560 ++read 2048/2048 bytes at offset 4299138560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142656 ++read 2048/2048 bytes at offset 4299142656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146752 ++read 2048/2048 bytes at offset 4299146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150848 ++read 2048/2048 bytes at offset 4299150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154944 ++read 2048/2048 bytes at offset 4299154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299159040 ++read 2048/2048 bytes at offset 4299159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 8192/8192 bytes at offset 4299164160 ++=== IO: pattern 5 ++read 8192/8192 bytes at offset 4299164160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299176448 ++read 8192/8192 bytes at offset 4299176448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188736 ++read 8192/8192 bytes at offset 4299188736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299201024 ++read 8192/8192 bytes at offset 4299201024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299213312 ++read 8192/8192 bytes at offset 4299213312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225600 ++read 8192/8192 bytes at offset 4299225600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237888 ++read 8192/8192 bytes at offset 4299237888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299250176 ++read 8192/8192 bytes at offset 4299250176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299262464 ++read 8192/8192 bytes at offset 4299262464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274752 ++read 8192/8192 bytes at offset 4299274752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299287040 ++read 8192/8192 bytes at offset 4299287040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299299328 ++read 8192/8192 bytes at offset 4299299328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311616 ++read 8192/8192 bytes at offset 4299311616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323904 ++read 8192/8192 bytes at offset 4299323904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299336192 ++read 8192/8192 bytes at offset 4299336192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299348480 ++read 8192/8192 bytes at offset 4299348480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360768 ++read 8192/8192 bytes at offset 4299360768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299373056 ++read 8192/8192 bytes at offset 4299373056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299385344 ++read 8192/8192 bytes at offset 4299385344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397632 ++read 8192/8192 bytes at offset 4299397632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409920 ++read 8192/8192 bytes at offset 4299409920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299422208 ++read 8192/8192 bytes at offset 4299422208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299434496 ++read 8192/8192 bytes at offset 4299434496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446784 ++read 8192/8192 bytes at offset 4299446784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299459072 ++read 8192/8192 bytes at offset 4299459072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299471360 ++read 8192/8192 bytes at offset 4299471360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483648 ++read 8192/8192 bytes at offset 4299483648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495936 ++read 8192/8192 bytes at offset 4299495936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299508224 ++read 8192/8192 bytes at offset 4299508224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520512 ++read 8192/8192 bytes at offset 4299520512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532800 ++read 8192/8192 bytes at offset 4299532800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299545088 ++read 8192/8192 bytes at offset 4299545088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299557376 ++read 8192/8192 bytes at offset 4299557376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569664 ++read 8192/8192 bytes at offset 4299569664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581952 ++read 8192/8192 bytes at offset 4299581952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299594240 ++read 8192/8192 bytes at offset 4299594240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606528 ++read 8192/8192 bytes at offset 4299606528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618816 ++read 8192/8192 bytes at offset 4299618816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299631104 ++read 8192/8192 bytes at offset 4299631104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299643392 ++read 8192/8192 bytes at offset 4299643392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655680 ++read 8192/8192 bytes at offset 4299655680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667968 ++read 8192/8192 bytes at offset 4299667968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299680256 ++read 8192/8192 bytes at offset 4299680256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692544 ++read 8192/8192 bytes at offset 4299692544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704832 ++read 8192/8192 bytes at offset 4299704832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299717120 ++read 8192/8192 bytes at offset 4299717120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299729408 ++read 8192/8192 bytes at offset 4299729408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741696 ++read 8192/8192 bytes at offset 4299741696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753984 ++read 8192/8192 bytes at offset 4299753984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299766272 ++read 8192/8192 bytes at offset 4299766272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778560 ++read 8192/8192 bytes at offset 4299778560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790848 ++read 8192/8192 bytes at offset 4299790848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299803136 ++read 8192/8192 bytes at offset 4299803136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299815424 ++read 8192/8192 bytes at offset 4299815424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827712 ++read 8192/8192 bytes at offset 4299827712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299840000 ++read 8192/8192 bytes at offset 4299840000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299852288 ++read 8192/8192 bytes at offset 4299852288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864576 ++read 8192/8192 bytes at offset 4299864576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876864 ++read 8192/8192 bytes at offset 4299876864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299889152 ++read 8192/8192 bytes at offset 4299889152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299901440 ++read 8192/8192 bytes at offset 4299901440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913728 ++read 8192/8192 bytes at offset 4299913728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299926016 ++read 8192/8192 bytes at offset 4299926016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299938304 ++read 8192/8192 bytes at offset 4299938304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971904 ++wrote 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294976000 ++wrote 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294980096 ++wrote 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294984192 ++wrote 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294988288 ++wrote 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294992384 ++wrote 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294996480 ++wrote 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000576 ++wrote 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004672 ++wrote 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008768 ++wrote 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012864 ++wrote 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016960 ++wrote 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295021056 ++wrote 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295025152 ++wrote 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295029248 ++wrote 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295033344 ++wrote 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295037440 ++wrote 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041536 ++wrote 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045632 ++wrote 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049728 ++wrote 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053824 ++wrote 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057920 ++wrote 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295062016 ++wrote 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295066112 ++wrote 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295070208 ++wrote 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295074304 ++wrote 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295078400 ++wrote 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295082496 ++wrote 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086592 ++wrote 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090688 ++wrote 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094784 ++wrote 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098880 ++wrote 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102976 ++wrote 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295107072 ++wrote 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295111168 ++wrote 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295115264 ++wrote 4096/4096 bytes at offset 4295115264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295119360 ++wrote 4096/4096 bytes at offset 4295119360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295123456 ++wrote 4096/4096 bytes at offset 4295123456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127552 ++wrote 4096/4096 bytes at offset 4295127552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131648 ++wrote 4096/4096 bytes at offset 4295131648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135744 ++wrote 4096/4096 bytes at offset 4295135744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139840 ++wrote 4096/4096 bytes at offset 4295139840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143936 ++wrote 4096/4096 bytes at offset 4295143936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295148032 ++wrote 4096/4096 bytes at offset 4295148032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295152128 ++wrote 4096/4096 bytes at offset 4295152128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295156224 ++wrote 4096/4096 bytes at offset 4295156224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295160320 ++wrote 4096/4096 bytes at offset 4295160320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295164416 ++wrote 4096/4096 bytes at offset 4295164416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168512 ++wrote 4096/4096 bytes at offset 4295168512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172608 ++wrote 4096/4096 bytes at offset 4295172608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176704 ++wrote 4096/4096 bytes at offset 4295176704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180800 ++wrote 4096/4096 bytes at offset 4295180800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184896 ++wrote 4096/4096 bytes at offset 4295184896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188992 ++wrote 4096/4096 bytes at offset 4295188992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295193088 ++wrote 4096/4096 bytes at offset 4295193088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295197184 ++wrote 4096/4096 bytes at offset 4295197184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295201280 ++wrote 4096/4096 bytes at offset 4295201280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295205376 ++wrote 4096/4096 bytes at offset 4295205376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295209472 ++wrote 4096/4096 bytes at offset 4295209472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213568 ++wrote 4096/4096 bytes at offset 4295213568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217664 ++wrote 4096/4096 bytes at offset 4295217664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221760 ++wrote 4096/4096 bytes at offset 4295221760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225856 ++wrote 4096/4096 bytes at offset 4295225856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229952 ++wrote 4096/4096 bytes at offset 4295229952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295234048 ++wrote 4096/4096 bytes at offset 4295234048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295238144 ++wrote 4096/4096 bytes at offset 4295238144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295242240 ++wrote 4096/4096 bytes at offset 4295242240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295246336 ++wrote 4096/4096 bytes at offset 4295246336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295250432 ++wrote 4096/4096 bytes at offset 4295250432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254528 ++wrote 4096/4096 bytes at offset 4295254528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258624 ++wrote 4096/4096 bytes at offset 4295258624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262720 ++wrote 4096/4096 bytes at offset 4295262720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266816 ++wrote 4096/4096 bytes at offset 4295266816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270912 ++wrote 4096/4096 bytes at offset 4295270912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295275008 ++wrote 4096/4096 bytes at offset 4295275008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295279104 ++wrote 4096/4096 bytes at offset 4295279104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295283200 ++wrote 4096/4096 bytes at offset 4295283200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295287296 ++wrote 4096/4096 bytes at offset 4295287296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295291392 ++wrote 4096/4096 bytes at offset 4295291392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295295488 ++wrote 4096/4096 bytes at offset 4295295488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299584 ++wrote 4096/4096 bytes at offset 4295299584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303680 ++wrote 4096/4096 bytes at offset 4295303680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307776 ++wrote 4096/4096 bytes at offset 4295307776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311872 ++wrote 4096/4096 bytes at offset 4295311872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315968 ++wrote 4096/4096 bytes at offset 4295315968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295320064 ++wrote 4096/4096 bytes at offset 4295320064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295324160 ++wrote 4096/4096 bytes at offset 4295324160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295328256 ++wrote 4096/4096 bytes at offset 4295328256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295332352 ++wrote 4096/4096 bytes at offset 4295332352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295336448 ++wrote 4096/4096 bytes at offset 4295336448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340544 ++wrote 4096/4096 bytes at offset 4295340544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344640 ++wrote 4096/4096 bytes at offset 4295344640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348736 ++wrote 4096/4096 bytes at offset 4295348736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352832 ++wrote 4096/4096 bytes at offset 4295352832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356928 ++wrote 4096/4096 bytes at offset 4295356928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295361024 ++wrote 4096/4096 bytes at offset 4295361024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295365120 ++wrote 4096/4096 bytes at offset 4295365120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295369216 ++wrote 4096/4096 bytes at offset 4295369216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295373312 ++wrote 4096/4096 bytes at offset 4295373312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295377408 ++wrote 4096/4096 bytes at offset 4295377408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295381504 ++wrote 4096/4096 bytes at offset 4295381504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385600 ++wrote 4096/4096 bytes at offset 4295385600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389696 ++wrote 4096/4096 bytes at offset 4295389696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393792 ++wrote 4096/4096 bytes at offset 4295393792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397888 ++wrote 4096/4096 bytes at offset 4295397888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401984 ++wrote 4096/4096 bytes at offset 4295401984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295406080 ++wrote 4096/4096 bytes at offset 4295406080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295410176 ++wrote 4096/4096 bytes at offset 4295410176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295414272 ++wrote 4096/4096 bytes at offset 4295414272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295418368 ++wrote 4096/4096 bytes at offset 4295418368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295422464 ++wrote 4096/4096 bytes at offset 4295422464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426560 ++wrote 4096/4096 bytes at offset 4295426560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430656 ++wrote 4096/4096 bytes at offset 4295430656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434752 ++wrote 4096/4096 bytes at offset 4295434752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438848 ++wrote 4096/4096 bytes at offset 4295438848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442944 ++wrote 4096/4096 bytes at offset 4295442944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295447040 ++wrote 4096/4096 bytes at offset 4295447040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295451136 ++wrote 4096/4096 bytes at offset 4295451136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295455232 ++wrote 4096/4096 bytes at offset 4295455232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295459328 ++wrote 4096/4096 bytes at offset 4295459328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295463424 ++wrote 4096/4096 bytes at offset 4295463424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467520 ++wrote 4096/4096 bytes at offset 4295467520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471616 ++wrote 4096/4096 bytes at offset 4295471616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475712 ++wrote 4096/4096 bytes at offset 4295475712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479808 ++wrote 4096/4096 bytes at offset 4295479808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483904 ++wrote 4096/4096 bytes at offset 4295483904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295488000 ++wrote 4096/4096 bytes at offset 4295488000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295492096 ++wrote 4096/4096 bytes at offset 4295492096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295496192 ++wrote 4096/4096 bytes at offset 4295496192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295500288 ++wrote 4096/4096 bytes at offset 4295500288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295504384 ++wrote 4096/4096 bytes at offset 4295504384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295508480 ++wrote 4096/4096 bytes at offset 4295508480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512576 ++wrote 4096/4096 bytes at offset 4295512576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516672 ++wrote 4096/4096 bytes at offset 4295516672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520768 ++wrote 4096/4096 bytes at offset 4295520768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524864 ++wrote 4096/4096 bytes at offset 4295524864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528960 ++wrote 4096/4096 bytes at offset 4295528960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295533056 ++wrote 4096/4096 bytes at offset 4295533056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295537152 ++wrote 4096/4096 bytes at offset 4295537152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295541248 ++wrote 4096/4096 bytes at offset 4295541248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295545344 ++wrote 4096/4096 bytes at offset 4295545344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295549440 ++wrote 4096/4096 bytes at offset 4295549440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553536 ++wrote 4096/4096 bytes at offset 4295553536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557632 ++wrote 4096/4096 bytes at offset 4295557632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561728 ++wrote 4096/4096 bytes at offset 4295561728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565824 ++wrote 4096/4096 bytes at offset 4295565824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569920 ++wrote 4096/4096 bytes at offset 4295569920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295574016 ++wrote 4096/4096 bytes at offset 4295574016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295578112 ++wrote 4096/4096 bytes at offset 4295578112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295582208 ++wrote 4096/4096 bytes at offset 4295582208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295586304 ++wrote 4096/4096 bytes at offset 4295586304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295590400 ++wrote 4096/4096 bytes at offset 4295590400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295594496 ++wrote 4096/4096 bytes at offset 4295594496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598592 ++wrote 4096/4096 bytes at offset 4295598592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602688 ++wrote 4096/4096 bytes at offset 4295602688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606784 ++wrote 4096/4096 bytes at offset 4295606784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610880 ++wrote 4096/4096 bytes at offset 4295610880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614976 ++wrote 4096/4096 bytes at offset 4295614976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295619072 ++wrote 4096/4096 bytes at offset 4295619072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295623168 ++wrote 4096/4096 bytes at offset 4295623168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295627264 ++wrote 4096/4096 bytes at offset 4295627264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295631360 ++wrote 4096/4096 bytes at offset 4295631360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295635456 ++wrote 4096/4096 bytes at offset 4295635456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639552 ++wrote 4096/4096 bytes at offset 4295639552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643648 ++wrote 4096/4096 bytes at offset 4295643648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647744 ++wrote 4096/4096 bytes at offset 4295647744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651840 ++wrote 4096/4096 bytes at offset 4295651840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655936 ++wrote 4096/4096 bytes at offset 4295655936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295660032 ++wrote 4096/4096 bytes at offset 4295660032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295664128 ++wrote 4096/4096 bytes at offset 4295664128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295668224 ++wrote 4096/4096 bytes at offset 4295668224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295672320 ++wrote 4096/4096 bytes at offset 4295672320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295676416 ++wrote 4096/4096 bytes at offset 4295676416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680512 ++wrote 4096/4096 bytes at offset 4295680512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684608 ++wrote 4096/4096 bytes at offset 4295684608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688704 ++wrote 4096/4096 bytes at offset 4295688704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692800 ++wrote 4096/4096 bytes at offset 4295692800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696896 ++wrote 4096/4096 bytes at offset 4295696896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700992 ++wrote 4096/4096 bytes at offset 4295700992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295705088 ++wrote 4096/4096 bytes at offset 4295705088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295709184 ++wrote 4096/4096 bytes at offset 4295709184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295713280 ++wrote 4096/4096 bytes at offset 4295713280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295717376 ++wrote 4096/4096 bytes at offset 4295717376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295721472 ++wrote 4096/4096 bytes at offset 4295721472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725568 ++wrote 4096/4096 bytes at offset 4295725568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729664 ++wrote 4096/4096 bytes at offset 4295729664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733760 ++wrote 4096/4096 bytes at offset 4295733760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737856 ++wrote 4096/4096 bytes at offset 4295737856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741952 ++wrote 4096/4096 bytes at offset 4295741952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295746048 ++wrote 4096/4096 bytes at offset 4295746048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295750144 ++wrote 4096/4096 bytes at offset 4295750144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295754240 ++wrote 4096/4096 bytes at offset 4295754240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295758336 ++wrote 4096/4096 bytes at offset 4295758336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295762432 ++wrote 4096/4096 bytes at offset 4295762432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766528 ++wrote 4096/4096 bytes at offset 4295766528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770624 ++wrote 4096/4096 bytes at offset 4295770624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774720 ++wrote 4096/4096 bytes at offset 4295774720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778816 ++wrote 4096/4096 bytes at offset 4295778816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782912 ++wrote 4096/4096 bytes at offset 4295782912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295787008 ++wrote 4096/4096 bytes at offset 4295787008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295791104 ++wrote 4096/4096 bytes at offset 4295791104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295795200 ++wrote 4096/4096 bytes at offset 4295795200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295799296 ++wrote 4096/4096 bytes at offset 4295799296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295803392 ++wrote 4096/4096 bytes at offset 4295803392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295807488 ++wrote 4096/4096 bytes at offset 4295807488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811584 ++wrote 4096/4096 bytes at offset 4295811584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815680 ++wrote 4096/4096 bytes at offset 4295815680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819776 ++wrote 4096/4096 bytes at offset 4295819776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823872 ++wrote 4096/4096 bytes at offset 4295823872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827968 ++wrote 4096/4096 bytes at offset 4295827968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295832064 ++wrote 4096/4096 bytes at offset 4295832064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295836160 ++wrote 4096/4096 bytes at offset 4295836160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295840256 ++wrote 4096/4096 bytes at offset 4295840256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295844352 ++wrote 4096/4096 bytes at offset 4295844352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295848448 ++wrote 4096/4096 bytes at offset 4295848448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852544 ++wrote 4096/4096 bytes at offset 4295852544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856640 ++wrote 4096/4096 bytes at offset 4295856640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860736 ++wrote 4096/4096 bytes at offset 4295860736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864832 ++wrote 4096/4096 bytes at offset 4295864832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868928 ++wrote 4096/4096 bytes at offset 4295868928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295873024 ++wrote 4096/4096 bytes at offset 4295873024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295877120 ++wrote 4096/4096 bytes at offset 4295877120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295881216 ++wrote 4096/4096 bytes at offset 4295881216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295885312 ++wrote 4096/4096 bytes at offset 4295885312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295889408 ++wrote 4096/4096 bytes at offset 4295889408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295893504 ++wrote 4096/4096 bytes at offset 4295893504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897600 ++wrote 4096/4096 bytes at offset 4295897600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901696 ++wrote 4096/4096 bytes at offset 4295901696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905792 ++wrote 4096/4096 bytes at offset 4295905792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909888 ++wrote 4096/4096 bytes at offset 4295909888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913984 ++wrote 4096/4096 bytes at offset 4295913984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295918080 ++wrote 4096/4096 bytes at offset 4295918080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295922176 ++wrote 4096/4096 bytes at offset 4295922176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295926272 ++wrote 4096/4096 bytes at offset 4295926272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295930368 ++wrote 4096/4096 bytes at offset 4295930368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295934464 ++wrote 4096/4096 bytes at offset 4295934464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938560 ++wrote 4096/4096 bytes at offset 4295938560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942656 ++wrote 4096/4096 bytes at offset 4295942656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946752 ++wrote 4096/4096 bytes at offset 4295946752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950848 ++wrote 4096/4096 bytes at offset 4295950848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954944 ++wrote 4096/4096 bytes at offset 4295954944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295959040 ++wrote 4096/4096 bytes at offset 4295959040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295963136 ++wrote 4096/4096 bytes at offset 4295963136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295967232 ++wrote 4096/4096 bytes at offset 4295967232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295971328 ++wrote 4096/4096 bytes at offset 4295971328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295975424 ++wrote 4096/4096 bytes at offset 4295975424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979520 ++wrote 4096/4096 bytes at offset 4295979520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983616 ++wrote 4096/4096 bytes at offset 4295983616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987712 ++wrote 4096/4096 bytes at offset 4295987712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991808 ++wrote 4096/4096 bytes at offset 4295991808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995904 ++wrote 4096/4096 bytes at offset 4295995904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296000000 ++wrote 4096/4096 bytes at offset 4296000000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296004096 ++wrote 4096/4096 bytes at offset 4296004096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296008192 ++wrote 4096/4096 bytes at offset 4296008192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296012288 ++wrote 4096/4096 bytes at offset 4296012288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 2048/2048 bytes at offset 4296018432 ++=== IO: pattern 5 ++wrote 2048/2048 bytes at offset 4296018432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022528 ++wrote 2048/2048 bytes at offset 4296022528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026624 ++wrote 2048/2048 bytes at offset 4296026624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030720 ++wrote 2048/2048 bytes at offset 4296030720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034816 ++wrote 2048/2048 bytes at offset 4296034816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038912 ++wrote 2048/2048 bytes at offset 4296038912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296043008 ++wrote 2048/2048 bytes at offset 4296043008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296047104 ++wrote 2048/2048 bytes at offset 4296047104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296051200 ++wrote 2048/2048 bytes at offset 4296051200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296055296 ++wrote 2048/2048 bytes at offset 4296055296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296059392 ++wrote 2048/2048 bytes at offset 4296059392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296063488 ++wrote 2048/2048 bytes at offset 4296063488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067584 ++wrote 2048/2048 bytes at offset 4296067584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071680 ++wrote 2048/2048 bytes at offset 4296071680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075776 ++wrote 2048/2048 bytes at offset 4296075776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079872 ++wrote 2048/2048 bytes at offset 4296079872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083968 ++wrote 2048/2048 bytes at offset 4296083968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296088064 ++wrote 2048/2048 bytes at offset 4296088064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296092160 ++wrote 2048/2048 bytes at offset 4296092160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296096256 ++wrote 2048/2048 bytes at offset 4296096256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296100352 ++wrote 2048/2048 bytes at offset 4296100352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296104448 ++wrote 2048/2048 bytes at offset 4296104448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108544 ++wrote 2048/2048 bytes at offset 4296108544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112640 ++wrote 2048/2048 bytes at offset 4296112640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116736 ++wrote 2048/2048 bytes at offset 4296116736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120832 ++wrote 2048/2048 bytes at offset 4296120832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124928 ++wrote 2048/2048 bytes at offset 4296124928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296129024 ++wrote 2048/2048 bytes at offset 4296129024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296133120 ++wrote 2048/2048 bytes at offset 4296133120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296137216 ++wrote 2048/2048 bytes at offset 4296137216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296141312 ++wrote 2048/2048 bytes at offset 4296141312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296145408 ++wrote 2048/2048 bytes at offset 4296145408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296149504 ++wrote 2048/2048 bytes at offset 4296149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153600 ++wrote 2048/2048 bytes at offset 4296153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157696 ++wrote 2048/2048 bytes at offset 4296157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161792 ++wrote 2048/2048 bytes at offset 4296161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165888 ++wrote 2048/2048 bytes at offset 4296165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169984 ++wrote 2048/2048 bytes at offset 4296169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296174080 ++wrote 2048/2048 bytes at offset 4296174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296178176 ++wrote 2048/2048 bytes at offset 4296178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296182272 ++wrote 2048/2048 bytes at offset 4296182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296186368 ++wrote 2048/2048 bytes at offset 4296186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296190464 ++wrote 2048/2048 bytes at offset 4296190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194560 ++wrote 2048/2048 bytes at offset 4296194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198656 ++wrote 2048/2048 bytes at offset 4296198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202752 ++wrote 2048/2048 bytes at offset 4296202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206848 ++wrote 2048/2048 bytes at offset 4296206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210944 ++wrote 2048/2048 bytes at offset 4296210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296215040 ++wrote 2048/2048 bytes at offset 4296215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296219136 ++wrote 2048/2048 bytes at offset 4296219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296223232 ++wrote 2048/2048 bytes at offset 4296223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296227328 ++wrote 2048/2048 bytes at offset 4296227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296231424 ++wrote 2048/2048 bytes at offset 4296231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235520 ++wrote 2048/2048 bytes at offset 4296235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239616 ++wrote 2048/2048 bytes at offset 4296239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243712 ++wrote 2048/2048 bytes at offset 4296243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247808 ++wrote 2048/2048 bytes at offset 4296247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251904 ++wrote 2048/2048 bytes at offset 4296251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296256000 ++wrote 2048/2048 bytes at offset 4296256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296260096 ++wrote 2048/2048 bytes at offset 4296260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296264192 ++wrote 2048/2048 bytes at offset 4296264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296268288 ++wrote 2048/2048 bytes at offset 4296268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296272384 ++wrote 2048/2048 bytes at offset 4296272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296276480 ++wrote 2048/2048 bytes at offset 4296276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280576 ++wrote 2048/2048 bytes at offset 4296280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284672 ++wrote 2048/2048 bytes at offset 4296284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288768 ++wrote 2048/2048 bytes at offset 4296288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292864 ++wrote 2048/2048 bytes at offset 4296292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296960 ++wrote 2048/2048 bytes at offset 4296296960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296301056 ++wrote 2048/2048 bytes at offset 4296301056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296305152 ++wrote 2048/2048 bytes at offset 4296305152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296309248 ++wrote 2048/2048 bytes at offset 4296309248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296313344 ++wrote 2048/2048 bytes at offset 4296313344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296317440 ++wrote 2048/2048 bytes at offset 4296317440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321536 ++wrote 2048/2048 bytes at offset 4296321536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325632 ++wrote 2048/2048 bytes at offset 4296325632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329728 ++wrote 2048/2048 bytes at offset 4296329728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333824 ++wrote 2048/2048 bytes at offset 4296333824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337920 ++wrote 2048/2048 bytes at offset 4296337920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296342016 ++wrote 2048/2048 bytes at offset 4296342016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296346112 ++wrote 2048/2048 bytes at offset 4296346112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296350208 ++wrote 2048/2048 bytes at offset 4296350208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296354304 ++wrote 2048/2048 bytes at offset 4296354304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296358400 ++wrote 2048/2048 bytes at offset 4296358400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296362496 ++wrote 2048/2048 bytes at offset 4296362496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366592 ++wrote 2048/2048 bytes at offset 4296366592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370688 ++wrote 2048/2048 bytes at offset 4296370688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374784 ++wrote 2048/2048 bytes at offset 4296374784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378880 ++wrote 2048/2048 bytes at offset 4296378880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382976 ++wrote 2048/2048 bytes at offset 4296382976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296387072 ++wrote 2048/2048 bytes at offset 4296387072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296391168 ++wrote 2048/2048 bytes at offset 4296391168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296395264 ++wrote 2048/2048 bytes at offset 4296395264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296399360 ++wrote 2048/2048 bytes at offset 4296399360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296403456 ++wrote 2048/2048 bytes at offset 4296403456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407552 ++wrote 2048/2048 bytes at offset 4296407552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411648 ++wrote 2048/2048 bytes at offset 4296411648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415744 ++wrote 2048/2048 bytes at offset 4296415744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419840 ++wrote 2048/2048 bytes at offset 4296419840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423936 ++wrote 2048/2048 bytes at offset 4296423936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296428032 ++wrote 2048/2048 bytes at offset 4296428032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296432128 ++wrote 2048/2048 bytes at offset 4296432128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296436224 ++wrote 2048/2048 bytes at offset 4296436224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296440320 ++wrote 2048/2048 bytes at offset 4296440320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296444416 ++wrote 2048/2048 bytes at offset 4296444416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448512 ++wrote 2048/2048 bytes at offset 4296448512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452608 ++wrote 2048/2048 bytes at offset 4296452608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456704 ++wrote 2048/2048 bytes at offset 4296456704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460800 ++wrote 2048/2048 bytes at offset 4296460800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464896 ++wrote 2048/2048 bytes at offset 4296464896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468992 ++wrote 2048/2048 bytes at offset 4296468992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296473088 ++wrote 2048/2048 bytes at offset 4296473088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296477184 ++wrote 2048/2048 bytes at offset 4296477184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296481280 ++wrote 2048/2048 bytes at offset 4296481280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296485376 ++wrote 2048/2048 bytes at offset 4296485376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296489472 ++wrote 2048/2048 bytes at offset 4296489472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493568 ++wrote 2048/2048 bytes at offset 4296493568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497664 ++wrote 2048/2048 bytes at offset 4296497664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501760 ++wrote 2048/2048 bytes at offset 4296501760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505856 ++wrote 2048/2048 bytes at offset 4296505856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509952 ++wrote 2048/2048 bytes at offset 4296509952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296514048 ++wrote 2048/2048 bytes at offset 4296514048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296518144 ++wrote 2048/2048 bytes at offset 4296518144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296522240 ++wrote 2048/2048 bytes at offset 4296522240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296526336 ++wrote 2048/2048 bytes at offset 4296526336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296530432 ++wrote 2048/2048 bytes at offset 4296530432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534528 ++wrote 2048/2048 bytes at offset 4296534528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538624 ++wrote 2048/2048 bytes at offset 4296538624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542720 ++wrote 2048/2048 bytes at offset 4296542720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546816 ++wrote 2048/2048 bytes at offset 4296546816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550912 ++wrote 2048/2048 bytes at offset 4296550912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296555008 ++wrote 2048/2048 bytes at offset 4296555008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296559104 ++wrote 2048/2048 bytes at offset 4296559104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296563200 ++wrote 2048/2048 bytes at offset 4296563200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296567296 ++wrote 2048/2048 bytes at offset 4296567296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296571392 ++wrote 2048/2048 bytes at offset 4296571392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296575488 ++wrote 2048/2048 bytes at offset 4296575488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579584 ++wrote 2048/2048 bytes at offset 4296579584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583680 ++wrote 2048/2048 bytes at offset 4296583680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587776 ++wrote 2048/2048 bytes at offset 4296587776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591872 ++wrote 2048/2048 bytes at offset 4296591872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595968 ++wrote 2048/2048 bytes at offset 4296595968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296600064 ++wrote 2048/2048 bytes at offset 4296600064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296604160 ++wrote 2048/2048 bytes at offset 4296604160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296608256 ++wrote 2048/2048 bytes at offset 4296608256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296612352 ++wrote 2048/2048 bytes at offset 4296612352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296616448 ++wrote 2048/2048 bytes at offset 4296616448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620544 ++wrote 2048/2048 bytes at offset 4296620544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624640 ++wrote 2048/2048 bytes at offset 4296624640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628736 ++wrote 2048/2048 bytes at offset 4296628736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632832 ++wrote 2048/2048 bytes at offset 4296632832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636928 ++wrote 2048/2048 bytes at offset 4296636928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296641024 ++wrote 2048/2048 bytes at offset 4296641024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296645120 ++wrote 2048/2048 bytes at offset 4296645120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296649216 ++wrote 2048/2048 bytes at offset 4296649216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296653312 ++wrote 2048/2048 bytes at offset 4296653312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296657408 ++wrote 2048/2048 bytes at offset 4296657408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296661504 ++wrote 2048/2048 bytes at offset 4296661504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665600 ++wrote 2048/2048 bytes at offset 4296665600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669696 ++wrote 2048/2048 bytes at offset 4296669696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673792 ++wrote 2048/2048 bytes at offset 4296673792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677888 ++wrote 2048/2048 bytes at offset 4296677888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681984 ++wrote 2048/2048 bytes at offset 4296681984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296686080 ++wrote 2048/2048 bytes at offset 4296686080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296690176 ++wrote 2048/2048 bytes at offset 4296690176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296694272 ++wrote 2048/2048 bytes at offset 4296694272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296698368 ++wrote 2048/2048 bytes at offset 4296698368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296702464 ++wrote 2048/2048 bytes at offset 4296702464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706560 ++wrote 2048/2048 bytes at offset 4296706560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710656 ++wrote 2048/2048 bytes at offset 4296710656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714752 ++wrote 2048/2048 bytes at offset 4296714752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718848 ++wrote 2048/2048 bytes at offset 4296718848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722944 ++wrote 2048/2048 bytes at offset 4296722944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296727040 ++wrote 2048/2048 bytes at offset 4296727040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296731136 ++wrote 2048/2048 bytes at offset 4296731136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296735232 ++wrote 2048/2048 bytes at offset 4296735232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296739328 ++wrote 2048/2048 bytes at offset 4296739328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296743424 ++wrote 2048/2048 bytes at offset 4296743424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747520 ++wrote 2048/2048 bytes at offset 4296747520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751616 ++wrote 2048/2048 bytes at offset 4296751616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755712 ++wrote 2048/2048 bytes at offset 4296755712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759808 ++wrote 2048/2048 bytes at offset 4296759808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763904 ++wrote 2048/2048 bytes at offset 4296763904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296768000 ++wrote 2048/2048 bytes at offset 4296768000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296772096 ++wrote 2048/2048 bytes at offset 4296772096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296776192 ++wrote 2048/2048 bytes at offset 4296776192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296780288 ++wrote 2048/2048 bytes at offset 4296780288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296784384 ++wrote 2048/2048 bytes at offset 4296784384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296788480 ++wrote 2048/2048 bytes at offset 4296788480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792576 ++wrote 2048/2048 bytes at offset 4296792576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796672 ++wrote 2048/2048 bytes at offset 4296796672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800768 ++wrote 2048/2048 bytes at offset 4296800768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804864 ++wrote 2048/2048 bytes at offset 4296804864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808960 ++wrote 2048/2048 bytes at offset 4296808960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296813056 ++wrote 2048/2048 bytes at offset 4296813056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296817152 ++wrote 2048/2048 bytes at offset 4296817152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296821248 ++wrote 2048/2048 bytes at offset 4296821248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296825344 ++wrote 2048/2048 bytes at offset 4296825344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296829440 ++wrote 2048/2048 bytes at offset 4296829440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833536 ++wrote 2048/2048 bytes at offset 4296833536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837632 ++wrote 2048/2048 bytes at offset 4296837632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841728 ++wrote 2048/2048 bytes at offset 4296841728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845824 ++wrote 2048/2048 bytes at offset 4296845824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849920 ++wrote 2048/2048 bytes at offset 4296849920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296854016 ++wrote 2048/2048 bytes at offset 4296854016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296858112 ++wrote 2048/2048 bytes at offset 4296858112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296862208 ++wrote 2048/2048 bytes at offset 4296862208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296866304 ++wrote 2048/2048 bytes at offset 4296866304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296870400 ++wrote 2048/2048 bytes at offset 4296870400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296874496 ++wrote 2048/2048 bytes at offset 4296874496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878592 ++wrote 2048/2048 bytes at offset 4296878592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882688 ++wrote 2048/2048 bytes at offset 4296882688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886784 ++wrote 2048/2048 bytes at offset 4296886784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890880 ++wrote 2048/2048 bytes at offset 4296890880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894976 ++wrote 2048/2048 bytes at offset 4296894976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296899072 ++wrote 2048/2048 bytes at offset 4296899072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296903168 ++wrote 2048/2048 bytes at offset 4296903168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296907264 ++wrote 2048/2048 bytes at offset 4296907264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296911360 ++wrote 2048/2048 bytes at offset 4296911360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296915456 ++wrote 2048/2048 bytes at offset 4296915456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919552 ++wrote 2048/2048 bytes at offset 4296919552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923648 ++wrote 2048/2048 bytes at offset 4296923648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927744 ++wrote 2048/2048 bytes at offset 4296927744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931840 ++wrote 2048/2048 bytes at offset 4296931840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935936 ++wrote 2048/2048 bytes at offset 4296935936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296940032 ++wrote 2048/2048 bytes at offset 4296940032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296944128 ++wrote 2048/2048 bytes at offset 4296944128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296948224 ++wrote 2048/2048 bytes at offset 4296948224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296952320 ++wrote 2048/2048 bytes at offset 4296952320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296956416 ++wrote 2048/2048 bytes at offset 4296956416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960512 ++wrote 2048/2048 bytes at offset 4296960512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964608 ++wrote 2048/2048 bytes at offset 4296964608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968704 ++wrote 2048/2048 bytes at offset 4296968704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972800 ++wrote 2048/2048 bytes at offset 4296972800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976896 ++wrote 2048/2048 bytes at offset 4296976896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980992 ++wrote 2048/2048 bytes at offset 4296980992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296985088 ++wrote 2048/2048 bytes at offset 4296985088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296989184 ++wrote 2048/2048 bytes at offset 4296989184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296993280 ++wrote 2048/2048 bytes at offset 4296993280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296997376 ++wrote 2048/2048 bytes at offset 4296997376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297001472 ++wrote 2048/2048 bytes at offset 4297001472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005568 ++wrote 2048/2048 bytes at offset 4297005568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009664 ++wrote 2048/2048 bytes at offset 4297009664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013760 ++wrote 2048/2048 bytes at offset 4297013760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017856 ++wrote 2048/2048 bytes at offset 4297017856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021952 ++wrote 2048/2048 bytes at offset 4297021952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297026048 ++wrote 2048/2048 bytes at offset 4297026048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297030144 ++wrote 2048/2048 bytes at offset 4297030144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297034240 ++wrote 2048/2048 bytes at offset 4297034240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297038336 ++wrote 2048/2048 bytes at offset 4297038336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297042432 ++wrote 2048/2048 bytes at offset 4297042432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046528 ++wrote 2048/2048 bytes at offset 4297046528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050624 ++wrote 2048/2048 bytes at offset 4297050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054720 ++wrote 2048/2048 bytes at offset 4297054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058816 ++wrote 2048/2048 bytes at offset 4297058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062912 ++wrote 2048/2048 bytes at offset 4297062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 2048/2048 bytes at offset 4297064960 ++=== IO: pattern 1 ++wrote 2048/2048 bytes at offset 4297064960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297069056 ++wrote 2048/2048 bytes at offset 4297069056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297073152 ++wrote 2048/2048 bytes at offset 4297073152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297077248 ++wrote 2048/2048 bytes at offset 4297077248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297081344 ++wrote 2048/2048 bytes at offset 4297081344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297085440 ++wrote 2048/2048 bytes at offset 4297085440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089536 ++wrote 2048/2048 bytes at offset 4297089536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093632 ++wrote 2048/2048 bytes at offset 4297093632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097728 ++wrote 2048/2048 bytes at offset 4297097728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101824 ++wrote 2048/2048 bytes at offset 4297101824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105920 ++wrote 2048/2048 bytes at offset 4297105920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297110016 ++wrote 2048/2048 bytes at offset 4297110016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297114112 ++wrote 2048/2048 bytes at offset 4297114112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297118208 ++wrote 2048/2048 bytes at offset 4297118208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297122304 ++wrote 2048/2048 bytes at offset 4297122304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297126400 ++wrote 2048/2048 bytes at offset 4297126400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297130496 ++wrote 2048/2048 bytes at offset 4297130496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134592 ++wrote 2048/2048 bytes at offset 4297134592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138688 ++wrote 2048/2048 bytes at offset 4297138688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142784 ++wrote 2048/2048 bytes at offset 4297142784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146880 ++wrote 2048/2048 bytes at offset 4297146880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150976 ++wrote 2048/2048 bytes at offset 4297150976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297155072 ++wrote 2048/2048 bytes at offset 4297155072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297159168 ++wrote 2048/2048 bytes at offset 4297159168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297163264 ++wrote 2048/2048 bytes at offset 4297163264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297167360 ++wrote 2048/2048 bytes at offset 4297167360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297171456 ++wrote 2048/2048 bytes at offset 4297171456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175552 ++wrote 2048/2048 bytes at offset 4297175552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179648 ++wrote 2048/2048 bytes at offset 4297179648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183744 ++wrote 2048/2048 bytes at offset 4297183744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187840 ++wrote 2048/2048 bytes at offset 4297187840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191936 ++wrote 2048/2048 bytes at offset 4297191936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297196032 ++wrote 2048/2048 bytes at offset 4297196032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297200128 ++wrote 2048/2048 bytes at offset 4297200128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297204224 ++wrote 2048/2048 bytes at offset 4297204224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297208320 ++wrote 2048/2048 bytes at offset 4297208320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297212416 ++wrote 2048/2048 bytes at offset 4297212416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216512 ++wrote 2048/2048 bytes at offset 4297216512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220608 ++wrote 2048/2048 bytes at offset 4297220608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224704 ++wrote 2048/2048 bytes at offset 4297224704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228800 ++wrote 2048/2048 bytes at offset 4297228800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232896 ++wrote 2048/2048 bytes at offset 4297232896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236992 ++wrote 2048/2048 bytes at offset 4297236992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297241088 ++wrote 2048/2048 bytes at offset 4297241088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297245184 ++wrote 2048/2048 bytes at offset 4297245184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297249280 ++wrote 2048/2048 bytes at offset 4297249280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297253376 ++wrote 2048/2048 bytes at offset 4297253376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297257472 ++wrote 2048/2048 bytes at offset 4297257472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261568 ++wrote 2048/2048 bytes at offset 4297261568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265664 ++wrote 2048/2048 bytes at offset 4297265664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269760 ++wrote 2048/2048 bytes at offset 4297269760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273856 ++wrote 2048/2048 bytes at offset 4297273856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277952 ++wrote 2048/2048 bytes at offset 4297277952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297282048 ++wrote 2048/2048 bytes at offset 4297282048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297286144 ++wrote 2048/2048 bytes at offset 4297286144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297290240 ++wrote 2048/2048 bytes at offset 4297290240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297294336 ++wrote 2048/2048 bytes at offset 4297294336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297298432 ++wrote 2048/2048 bytes at offset 4297298432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302528 ++wrote 2048/2048 bytes at offset 4297302528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306624 ++wrote 2048/2048 bytes at offset 4297306624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310720 ++wrote 2048/2048 bytes at offset 4297310720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314816 ++wrote 2048/2048 bytes at offset 4297314816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318912 ++wrote 2048/2048 bytes at offset 4297318912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297323008 ++wrote 2048/2048 bytes at offset 4297323008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297327104 ++wrote 2048/2048 bytes at offset 4297327104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297331200 ++wrote 2048/2048 bytes at offset 4297331200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297335296 ++wrote 2048/2048 bytes at offset 4297335296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297339392 ++wrote 2048/2048 bytes at offset 4297339392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297343488 ++wrote 2048/2048 bytes at offset 4297343488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347584 ++wrote 2048/2048 bytes at offset 4297347584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351680 ++wrote 2048/2048 bytes at offset 4297351680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355776 ++wrote 2048/2048 bytes at offset 4297355776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359872 ++wrote 2048/2048 bytes at offset 4297359872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363968 ++wrote 2048/2048 bytes at offset 4297363968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297368064 ++wrote 2048/2048 bytes at offset 4297368064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297372160 ++wrote 2048/2048 bytes at offset 4297372160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297376256 ++wrote 2048/2048 bytes at offset 4297376256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297380352 ++wrote 2048/2048 bytes at offset 4297380352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297384448 ++wrote 2048/2048 bytes at offset 4297384448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388544 ++wrote 2048/2048 bytes at offset 4297388544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392640 ++wrote 2048/2048 bytes at offset 4297392640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396736 ++wrote 2048/2048 bytes at offset 4297396736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400832 ++wrote 2048/2048 bytes at offset 4297400832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404928 ++wrote 2048/2048 bytes at offset 4297404928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297409024 ++wrote 2048/2048 bytes at offset 4297409024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297413120 ++wrote 2048/2048 bytes at offset 4297413120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297417216 ++wrote 2048/2048 bytes at offset 4297417216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297421312 ++wrote 2048/2048 bytes at offset 4297421312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297425408 ++wrote 2048/2048 bytes at offset 4297425408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297429504 ++wrote 2048/2048 bytes at offset 4297429504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433600 ++wrote 2048/2048 bytes at offset 4297433600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437696 ++wrote 2048/2048 bytes at offset 4297437696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441792 ++wrote 2048/2048 bytes at offset 4297441792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445888 ++wrote 2048/2048 bytes at offset 4297445888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449984 ++wrote 2048/2048 bytes at offset 4297449984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297454080 ++wrote 2048/2048 bytes at offset 4297454080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297458176 ++wrote 2048/2048 bytes at offset 4297458176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297462272 ++wrote 2048/2048 bytes at offset 4297462272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297466368 ++wrote 2048/2048 bytes at offset 4297466368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297470464 ++wrote 2048/2048 bytes at offset 4297470464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474560 ++wrote 2048/2048 bytes at offset 4297474560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478656 ++wrote 2048/2048 bytes at offset 4297478656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482752 ++wrote 2048/2048 bytes at offset 4297482752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486848 ++wrote 2048/2048 bytes at offset 4297486848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490944 ++wrote 2048/2048 bytes at offset 4297490944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297495040 ++wrote 2048/2048 bytes at offset 4297495040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297499136 ++wrote 2048/2048 bytes at offset 4297499136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297503232 ++wrote 2048/2048 bytes at offset 4297503232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297507328 ++wrote 2048/2048 bytes at offset 4297507328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297511424 ++wrote 2048/2048 bytes at offset 4297511424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515520 ++wrote 2048/2048 bytes at offset 4297515520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519616 ++wrote 2048/2048 bytes at offset 4297519616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523712 ++wrote 2048/2048 bytes at offset 4297523712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527808 ++wrote 2048/2048 bytes at offset 4297527808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531904 ++wrote 2048/2048 bytes at offset 4297531904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297536000 ++wrote 2048/2048 bytes at offset 4297536000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297540096 ++wrote 2048/2048 bytes at offset 4297540096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297544192 ++wrote 2048/2048 bytes at offset 4297544192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297548288 ++wrote 2048/2048 bytes at offset 4297548288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297552384 ++wrote 2048/2048 bytes at offset 4297552384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297556480 ++wrote 2048/2048 bytes at offset 4297556480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560576 ++wrote 2048/2048 bytes at offset 4297560576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564672 ++wrote 2048/2048 bytes at offset 4297564672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568768 ++wrote 2048/2048 bytes at offset 4297568768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572864 ++wrote 2048/2048 bytes at offset 4297572864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576960 ++wrote 2048/2048 bytes at offset 4297576960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297581056 ++wrote 2048/2048 bytes at offset 4297581056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297585152 ++wrote 2048/2048 bytes at offset 4297585152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297589248 ++wrote 2048/2048 bytes at offset 4297589248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297593344 ++wrote 2048/2048 bytes at offset 4297593344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297597440 ++wrote 2048/2048 bytes at offset 4297597440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601536 ++wrote 2048/2048 bytes at offset 4297601536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605632 ++wrote 2048/2048 bytes at offset 4297605632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609728 ++wrote 2048/2048 bytes at offset 4297609728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613824 ++wrote 2048/2048 bytes at offset 4297613824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617920 ++wrote 2048/2048 bytes at offset 4297617920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297622016 ++wrote 2048/2048 bytes at offset 4297622016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297626112 ++wrote 2048/2048 bytes at offset 4297626112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297630208 ++wrote 2048/2048 bytes at offset 4297630208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297634304 ++wrote 2048/2048 bytes at offset 4297634304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297638400 ++wrote 2048/2048 bytes at offset 4297638400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297642496 ++wrote 2048/2048 bytes at offset 4297642496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646592 ++wrote 2048/2048 bytes at offset 4297646592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650688 ++wrote 2048/2048 bytes at offset 4297650688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654784 ++wrote 2048/2048 bytes at offset 4297654784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658880 ++wrote 2048/2048 bytes at offset 4297658880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662976 ++wrote 2048/2048 bytes at offset 4297662976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297667072 ++wrote 2048/2048 bytes at offset 4297667072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297671168 ++wrote 2048/2048 bytes at offset 4297671168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297675264 ++wrote 2048/2048 bytes at offset 4297675264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297679360 ++wrote 2048/2048 bytes at offset 4297679360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297683456 ++wrote 2048/2048 bytes at offset 4297683456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687552 ++wrote 2048/2048 bytes at offset 4297687552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691648 ++wrote 2048/2048 bytes at offset 4297691648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695744 ++wrote 2048/2048 bytes at offset 4297695744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699840 ++wrote 2048/2048 bytes at offset 4297699840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703936 ++wrote 2048/2048 bytes at offset 4297703936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297708032 ++wrote 2048/2048 bytes at offset 4297708032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297712128 ++wrote 2048/2048 bytes at offset 4297712128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297716224 ++wrote 2048/2048 bytes at offset 4297716224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297720320 ++wrote 2048/2048 bytes at offset 4297720320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297724416 ++wrote 2048/2048 bytes at offset 4297724416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728512 ++wrote 2048/2048 bytes at offset 4297728512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732608 ++wrote 2048/2048 bytes at offset 4297732608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736704 ++wrote 2048/2048 bytes at offset 4297736704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740800 ++wrote 2048/2048 bytes at offset 4297740800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744896 ++wrote 2048/2048 bytes at offset 4297744896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748992 ++wrote 2048/2048 bytes at offset 4297748992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297753088 ++wrote 2048/2048 bytes at offset 4297753088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297757184 ++wrote 2048/2048 bytes at offset 4297757184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297761280 ++wrote 2048/2048 bytes at offset 4297761280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297765376 ++wrote 2048/2048 bytes at offset 4297765376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297769472 ++wrote 2048/2048 bytes at offset 4297769472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773568 ++wrote 2048/2048 bytes at offset 4297773568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777664 ++wrote 2048/2048 bytes at offset 4297777664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781760 ++wrote 2048/2048 bytes at offset 4297781760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785856 ++wrote 2048/2048 bytes at offset 4297785856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789952 ++wrote 2048/2048 bytes at offset 4297789952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297794048 ++wrote 2048/2048 bytes at offset 4297794048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297798144 ++wrote 2048/2048 bytes at offset 4297798144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297802240 ++wrote 2048/2048 bytes at offset 4297802240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297806336 ++wrote 2048/2048 bytes at offset 4297806336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297810432 ++wrote 2048/2048 bytes at offset 4297810432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814528 ++wrote 2048/2048 bytes at offset 4297814528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818624 ++wrote 2048/2048 bytes at offset 4297818624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822720 ++wrote 2048/2048 bytes at offset 4297822720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826816 ++wrote 2048/2048 bytes at offset 4297826816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830912 ++wrote 2048/2048 bytes at offset 4297830912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297835008 ++wrote 2048/2048 bytes at offset 4297835008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297839104 ++wrote 2048/2048 bytes at offset 4297839104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297843200 ++wrote 2048/2048 bytes at offset 4297843200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297847296 ++wrote 2048/2048 bytes at offset 4297847296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297851392 ++wrote 2048/2048 bytes at offset 4297851392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297855488 ++wrote 2048/2048 bytes at offset 4297855488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859584 ++wrote 2048/2048 bytes at offset 4297859584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863680 ++wrote 2048/2048 bytes at offset 4297863680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867776 ++wrote 2048/2048 bytes at offset 4297867776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871872 ++wrote 2048/2048 bytes at offset 4297871872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875968 ++wrote 2048/2048 bytes at offset 4297875968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297880064 ++wrote 2048/2048 bytes at offset 4297880064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297884160 ++wrote 2048/2048 bytes at offset 4297884160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297888256 ++wrote 2048/2048 bytes at offset 4297888256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297892352 ++wrote 2048/2048 bytes at offset 4297892352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297896448 ++wrote 2048/2048 bytes at offset 4297896448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900544 ++wrote 2048/2048 bytes at offset 4297900544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904640 ++wrote 2048/2048 bytes at offset 4297904640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908736 ++wrote 2048/2048 bytes at offset 4297908736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912832 ++wrote 2048/2048 bytes at offset 4297912832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916928 ++wrote 2048/2048 bytes at offset 4297916928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297921024 ++wrote 2048/2048 bytes at offset 4297921024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297925120 ++wrote 2048/2048 bytes at offset 4297925120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297929216 ++wrote 2048/2048 bytes at offset 4297929216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297933312 ++wrote 2048/2048 bytes at offset 4297933312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297937408 ++wrote 2048/2048 bytes at offset 4297937408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297941504 ++wrote 2048/2048 bytes at offset 4297941504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945600 ++wrote 2048/2048 bytes at offset 4297945600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949696 ++wrote 2048/2048 bytes at offset 4297949696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953792 ++wrote 2048/2048 bytes at offset 4297953792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957888 ++wrote 2048/2048 bytes at offset 4297957888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961984 ++wrote 2048/2048 bytes at offset 4297961984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297966080 ++wrote 2048/2048 bytes at offset 4297966080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297970176 ++wrote 2048/2048 bytes at offset 4297970176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297974272 ++wrote 2048/2048 bytes at offset 4297974272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297978368 ++wrote 2048/2048 bytes at offset 4297978368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297982464 ++wrote 2048/2048 bytes at offset 4297982464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986560 ++wrote 2048/2048 bytes at offset 4297986560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990656 ++wrote 2048/2048 bytes at offset 4297990656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994752 ++wrote 2048/2048 bytes at offset 4297994752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998848 ++wrote 2048/2048 bytes at offset 4297998848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002944 ++wrote 2048/2048 bytes at offset 4298002944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298007040 ++wrote 2048/2048 bytes at offset 4298007040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298011136 ++wrote 2048/2048 bytes at offset 4298011136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298015232 ++wrote 2048/2048 bytes at offset 4298015232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298019328 ++wrote 2048/2048 bytes at offset 4298019328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298023424 ++wrote 2048/2048 bytes at offset 4298023424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027520 ++wrote 2048/2048 bytes at offset 4298027520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031616 ++wrote 2048/2048 bytes at offset 4298031616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035712 ++wrote 2048/2048 bytes at offset 4298035712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039808 ++wrote 2048/2048 bytes at offset 4298039808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043904 ++wrote 2048/2048 bytes at offset 4298043904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298048000 ++wrote 2048/2048 bytes at offset 4298048000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298052096 ++wrote 2048/2048 bytes at offset 4298052096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298056192 ++wrote 2048/2048 bytes at offset 4298056192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298060288 ++wrote 2048/2048 bytes at offset 4298060288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298064384 ++wrote 2048/2048 bytes at offset 4298064384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298068480 ++wrote 2048/2048 bytes at offset 4298068480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072576 ++wrote 2048/2048 bytes at offset 4298072576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076672 ++wrote 2048/2048 bytes at offset 4298076672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080768 ++wrote 2048/2048 bytes at offset 4298080768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084864 ++wrote 2048/2048 bytes at offset 4298084864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088960 ++wrote 2048/2048 bytes at offset 4298088960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298093056 ++wrote 2048/2048 bytes at offset 4298093056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298097152 ++wrote 2048/2048 bytes at offset 4298097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298101248 ++wrote 2048/2048 bytes at offset 4298101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298105344 ++wrote 2048/2048 bytes at offset 4298105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298109440 ++wrote 2048/2048 bytes at offset 4298109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> wrote 2048/2048 bytes at offset 4298114560 ++=== IO: pattern 3 ++wrote 2048/2048 bytes at offset 4298114560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118656 ++wrote 2048/2048 bytes at offset 4298118656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122752 ++wrote 2048/2048 bytes at offset 4298122752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126848 ++wrote 2048/2048 bytes at offset 4298126848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130944 ++wrote 2048/2048 bytes at offset 4298130944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298135040 ++wrote 2048/2048 bytes at offset 4298135040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298139136 ++wrote 2048/2048 bytes at offset 4298139136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298143232 ++wrote 2048/2048 bytes at offset 4298143232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298147328 ++wrote 2048/2048 bytes at offset 4298147328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298151424 ++wrote 2048/2048 bytes at offset 4298151424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155520 ++wrote 2048/2048 bytes at offset 4298155520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159616 ++wrote 2048/2048 bytes at offset 4298159616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163712 ++wrote 2048/2048 bytes at offset 4298163712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167808 ++wrote 2048/2048 bytes at offset 4298167808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171904 ++wrote 2048/2048 bytes at offset 4298171904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298176000 ++wrote 2048/2048 bytes at offset 4298176000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298180096 ++wrote 2048/2048 bytes at offset 4298180096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298184192 ++wrote 2048/2048 bytes at offset 4298184192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298188288 ++wrote 2048/2048 bytes at offset 4298188288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298192384 ++wrote 2048/2048 bytes at offset 4298192384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298196480 ++wrote 2048/2048 bytes at offset 4298196480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200576 ++wrote 2048/2048 bytes at offset 4298200576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204672 ++wrote 2048/2048 bytes at offset 4298204672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208768 ++wrote 2048/2048 bytes at offset 4298208768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212864 ++wrote 2048/2048 bytes at offset 4298212864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216960 ++wrote 2048/2048 bytes at offset 4298216960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298221056 ++wrote 2048/2048 bytes at offset 4298221056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298225152 ++wrote 2048/2048 bytes at offset 4298225152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298229248 ++wrote 2048/2048 bytes at offset 4298229248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298233344 ++wrote 2048/2048 bytes at offset 4298233344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298237440 ++wrote 2048/2048 bytes at offset 4298237440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241536 ++wrote 2048/2048 bytes at offset 4298241536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245632 ++wrote 2048/2048 bytes at offset 4298245632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249728 ++wrote 2048/2048 bytes at offset 4298249728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253824 ++wrote 2048/2048 bytes at offset 4298253824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257920 ++wrote 2048/2048 bytes at offset 4298257920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298262016 ++wrote 2048/2048 bytes at offset 4298262016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298266112 ++wrote 2048/2048 bytes at offset 4298266112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298270208 ++wrote 2048/2048 bytes at offset 4298270208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298274304 ++wrote 2048/2048 bytes at offset 4298274304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298278400 ++wrote 2048/2048 bytes at offset 4298278400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298282496 ++wrote 2048/2048 bytes at offset 4298282496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286592 ++wrote 2048/2048 bytes at offset 4298286592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290688 ++wrote 2048/2048 bytes at offset 4298290688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294784 ++wrote 2048/2048 bytes at offset 4298294784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298880 ++wrote 2048/2048 bytes at offset 4298298880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302976 ++wrote 2048/2048 bytes at offset 4298302976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298307072 ++wrote 2048/2048 bytes at offset 4298307072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298311168 ++wrote 2048/2048 bytes at offset 4298311168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298315264 ++wrote 2048/2048 bytes at offset 4298315264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298319360 ++wrote 2048/2048 bytes at offset 4298319360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298323456 ++wrote 2048/2048 bytes at offset 4298323456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327552 ++wrote 2048/2048 bytes at offset 4298327552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331648 ++wrote 2048/2048 bytes at offset 4298331648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335744 ++wrote 2048/2048 bytes at offset 4298335744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339840 ++wrote 2048/2048 bytes at offset 4298339840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343936 ++wrote 2048/2048 bytes at offset 4298343936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298348032 ++wrote 2048/2048 bytes at offset 4298348032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298352128 ++wrote 2048/2048 bytes at offset 4298352128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298356224 ++wrote 2048/2048 bytes at offset 4298356224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298360320 ++wrote 2048/2048 bytes at offset 4298360320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298364416 ++wrote 2048/2048 bytes at offset 4298364416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368512 ++wrote 2048/2048 bytes at offset 4298368512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372608 ++wrote 2048/2048 bytes at offset 4298372608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376704 ++wrote 2048/2048 bytes at offset 4298376704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380800 ++wrote 2048/2048 bytes at offset 4298380800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384896 ++wrote 2048/2048 bytes at offset 4298384896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388992 ++wrote 2048/2048 bytes at offset 4298388992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298393088 ++wrote 2048/2048 bytes at offset 4298393088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298397184 ++wrote 2048/2048 bytes at offset 4298397184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298401280 ++wrote 2048/2048 bytes at offset 4298401280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298405376 ++wrote 2048/2048 bytes at offset 4298405376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298409472 ++wrote 2048/2048 bytes at offset 4298409472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413568 ++wrote 2048/2048 bytes at offset 4298413568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417664 ++wrote 2048/2048 bytes at offset 4298417664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421760 ++wrote 2048/2048 bytes at offset 4298421760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425856 ++wrote 2048/2048 bytes at offset 4298425856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429952 ++wrote 2048/2048 bytes at offset 4298429952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298434048 ++wrote 2048/2048 bytes at offset 4298434048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298438144 ++wrote 2048/2048 bytes at offset 4298438144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298442240 ++wrote 2048/2048 bytes at offset 4298442240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298446336 ++wrote 2048/2048 bytes at offset 4298446336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298450432 ++wrote 2048/2048 bytes at offset 4298450432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454528 ++wrote 2048/2048 bytes at offset 4298454528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458624 ++wrote 2048/2048 bytes at offset 4298458624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462720 ++wrote 2048/2048 bytes at offset 4298462720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466816 ++wrote 2048/2048 bytes at offset 4298466816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470912 ++wrote 2048/2048 bytes at offset 4298470912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298475008 ++wrote 2048/2048 bytes at offset 4298475008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298479104 ++wrote 2048/2048 bytes at offset 4298479104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298483200 ++wrote 2048/2048 bytes at offset 4298483200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298487296 ++wrote 2048/2048 bytes at offset 4298487296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298491392 ++wrote 2048/2048 bytes at offset 4298491392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298495488 ++wrote 2048/2048 bytes at offset 4298495488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499584 ++wrote 2048/2048 bytes at offset 4298499584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503680 ++wrote 2048/2048 bytes at offset 4298503680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507776 ++wrote 2048/2048 bytes at offset 4298507776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511872 ++wrote 2048/2048 bytes at offset 4298511872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515968 ++wrote 2048/2048 bytes at offset 4298515968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298520064 ++wrote 2048/2048 bytes at offset 4298520064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298524160 ++wrote 2048/2048 bytes at offset 4298524160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298528256 ++wrote 2048/2048 bytes at offset 4298528256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298532352 ++wrote 2048/2048 bytes at offset 4298532352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298536448 ++wrote 2048/2048 bytes at offset 4298536448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540544 ++wrote 2048/2048 bytes at offset 4298540544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544640 ++wrote 2048/2048 bytes at offset 4298544640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548736 ++wrote 2048/2048 bytes at offset 4298548736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552832 ++wrote 2048/2048 bytes at offset 4298552832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556928 ++wrote 2048/2048 bytes at offset 4298556928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298561024 ++wrote 2048/2048 bytes at offset 4298561024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298565120 ++wrote 2048/2048 bytes at offset 4298565120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298569216 ++wrote 2048/2048 bytes at offset 4298569216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298573312 ++wrote 2048/2048 bytes at offset 4298573312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298577408 ++wrote 2048/2048 bytes at offset 4298577408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298581504 ++wrote 2048/2048 bytes at offset 4298581504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585600 ++wrote 2048/2048 bytes at offset 4298585600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589696 ++wrote 2048/2048 bytes at offset 4298589696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593792 ++wrote 2048/2048 bytes at offset 4298593792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597888 ++wrote 2048/2048 bytes at offset 4298597888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601984 ++wrote 2048/2048 bytes at offset 4298601984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298606080 ++wrote 2048/2048 bytes at offset 4298606080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298610176 ++wrote 2048/2048 bytes at offset 4298610176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298614272 ++wrote 2048/2048 bytes at offset 4298614272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298618368 ++wrote 2048/2048 bytes at offset 4298618368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298622464 ++wrote 2048/2048 bytes at offset 4298622464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626560 ++wrote 2048/2048 bytes at offset 4298626560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630656 ++wrote 2048/2048 bytes at offset 4298630656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634752 ++wrote 2048/2048 bytes at offset 4298634752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638848 ++wrote 2048/2048 bytes at offset 4298638848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642944 ++wrote 2048/2048 bytes at offset 4298642944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298647040 ++wrote 2048/2048 bytes at offset 4298647040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298651136 ++wrote 2048/2048 bytes at offset 4298651136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298655232 ++wrote 2048/2048 bytes at offset 4298655232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298659328 ++wrote 2048/2048 bytes at offset 4298659328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298663424 ++wrote 2048/2048 bytes at offset 4298663424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667520 ++wrote 2048/2048 bytes at offset 4298667520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671616 ++wrote 2048/2048 bytes at offset 4298671616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675712 ++wrote 2048/2048 bytes at offset 4298675712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679808 ++wrote 2048/2048 bytes at offset 4298679808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683904 ++wrote 2048/2048 bytes at offset 4298683904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298688000 ++wrote 2048/2048 bytes at offset 4298688000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298692096 ++wrote 2048/2048 bytes at offset 4298692096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298696192 ++wrote 2048/2048 bytes at offset 4298696192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298700288 ++wrote 2048/2048 bytes at offset 4298700288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298704384 ++wrote 2048/2048 bytes at offset 4298704384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298708480 ++wrote 2048/2048 bytes at offset 4298708480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712576 ++wrote 2048/2048 bytes at offset 4298712576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716672 ++wrote 2048/2048 bytes at offset 4298716672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720768 ++wrote 2048/2048 bytes at offset 4298720768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724864 ++wrote 2048/2048 bytes at offset 4298724864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728960 ++wrote 2048/2048 bytes at offset 4298728960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298733056 ++wrote 2048/2048 bytes at offset 4298733056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298737152 ++wrote 2048/2048 bytes at offset 4298737152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298741248 ++wrote 2048/2048 bytes at offset 4298741248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298745344 ++wrote 2048/2048 bytes at offset 4298745344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298749440 ++wrote 2048/2048 bytes at offset 4298749440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753536 ++wrote 2048/2048 bytes at offset 4298753536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757632 ++wrote 2048/2048 bytes at offset 4298757632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761728 ++wrote 2048/2048 bytes at offset 4298761728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765824 ++wrote 2048/2048 bytes at offset 4298765824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769920 ++wrote 2048/2048 bytes at offset 4298769920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298774016 ++wrote 2048/2048 bytes at offset 4298774016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298778112 ++wrote 2048/2048 bytes at offset 4298778112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298782208 ++wrote 2048/2048 bytes at offset 4298782208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298786304 ++wrote 2048/2048 bytes at offset 4298786304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298790400 ++wrote 2048/2048 bytes at offset 4298790400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298794496 ++wrote 2048/2048 bytes at offset 4298794496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798592 ++wrote 2048/2048 bytes at offset 4298798592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802688 ++wrote 2048/2048 bytes at offset 4298802688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806784 ++wrote 2048/2048 bytes at offset 4298806784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810880 ++wrote 2048/2048 bytes at offset 4298810880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814976 ++wrote 2048/2048 bytes at offset 4298814976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298819072 ++wrote 2048/2048 bytes at offset 4298819072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298823168 ++wrote 2048/2048 bytes at offset 4298823168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298827264 ++wrote 2048/2048 bytes at offset 4298827264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298831360 ++wrote 2048/2048 bytes at offset 4298831360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298835456 ++wrote 2048/2048 bytes at offset 4298835456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839552 ++wrote 2048/2048 bytes at offset 4298839552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843648 ++wrote 2048/2048 bytes at offset 4298843648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847744 ++wrote 2048/2048 bytes at offset 4298847744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851840 ++wrote 2048/2048 bytes at offset 4298851840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855936 ++wrote 2048/2048 bytes at offset 4298855936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298860032 ++wrote 2048/2048 bytes at offset 4298860032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298864128 ++wrote 2048/2048 bytes at offset 4298864128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298868224 ++wrote 2048/2048 bytes at offset 4298868224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298872320 ++wrote 2048/2048 bytes at offset 4298872320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298876416 ++wrote 2048/2048 bytes at offset 4298876416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880512 ++wrote 2048/2048 bytes at offset 4298880512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884608 ++wrote 2048/2048 bytes at offset 4298884608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888704 ++wrote 2048/2048 bytes at offset 4298888704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892800 ++wrote 2048/2048 bytes at offset 4298892800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896896 ++wrote 2048/2048 bytes at offset 4298896896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900992 ++wrote 2048/2048 bytes at offset 4298900992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298905088 ++wrote 2048/2048 bytes at offset 4298905088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298909184 ++wrote 2048/2048 bytes at offset 4298909184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298913280 ++wrote 2048/2048 bytes at offset 4298913280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298917376 ++wrote 2048/2048 bytes at offset 4298917376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298921472 ++wrote 2048/2048 bytes at offset 4298921472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925568 ++wrote 2048/2048 bytes at offset 4298925568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929664 ++wrote 2048/2048 bytes at offset 4298929664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933760 ++wrote 2048/2048 bytes at offset 4298933760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937856 ++wrote 2048/2048 bytes at offset 4298937856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941952 ++wrote 2048/2048 bytes at offset 4298941952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298946048 ++wrote 2048/2048 bytes at offset 4298946048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298950144 ++wrote 2048/2048 bytes at offset 4298950144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298954240 ++wrote 2048/2048 bytes at offset 4298954240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298958336 ++wrote 2048/2048 bytes at offset 4298958336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298962432 ++wrote 2048/2048 bytes at offset 4298962432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966528 ++wrote 2048/2048 bytes at offset 4298966528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970624 ++wrote 2048/2048 bytes at offset 4298970624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974720 ++wrote 2048/2048 bytes at offset 4298974720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978816 ++wrote 2048/2048 bytes at offset 4298978816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982912 ++wrote 2048/2048 bytes at offset 4298982912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298987008 ++wrote 2048/2048 bytes at offset 4298987008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298991104 ++wrote 2048/2048 bytes at offset 4298991104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298995200 ++wrote 2048/2048 bytes at offset 4298995200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298999296 ++wrote 2048/2048 bytes at offset 4298999296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299003392 ++wrote 2048/2048 bytes at offset 4299003392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299007488 ++wrote 2048/2048 bytes at offset 4299007488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011584 ++wrote 2048/2048 bytes at offset 4299011584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015680 ++wrote 2048/2048 bytes at offset 4299015680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019776 ++wrote 2048/2048 bytes at offset 4299019776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023872 ++wrote 2048/2048 bytes at offset 4299023872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027968 ++wrote 2048/2048 bytes at offset 4299027968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299032064 ++wrote 2048/2048 bytes at offset 4299032064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299036160 ++wrote 2048/2048 bytes at offset 4299036160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299040256 ++wrote 2048/2048 bytes at offset 4299040256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299044352 ++wrote 2048/2048 bytes at offset 4299044352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299048448 ++wrote 2048/2048 bytes at offset 4299048448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052544 ++wrote 2048/2048 bytes at offset 4299052544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056640 ++wrote 2048/2048 bytes at offset 4299056640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060736 ++wrote 2048/2048 bytes at offset 4299060736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064832 ++wrote 2048/2048 bytes at offset 4299064832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068928 ++wrote 2048/2048 bytes at offset 4299068928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299073024 ++wrote 2048/2048 bytes at offset 4299073024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299077120 ++wrote 2048/2048 bytes at offset 4299077120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299081216 ++wrote 2048/2048 bytes at offset 4299081216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299085312 ++wrote 2048/2048 bytes at offset 4299085312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299089408 ++wrote 2048/2048 bytes at offset 4299089408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299093504 ++wrote 2048/2048 bytes at offset 4299093504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097600 ++wrote 2048/2048 bytes at offset 4299097600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101696 ++wrote 2048/2048 bytes at offset 4299101696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105792 ++wrote 2048/2048 bytes at offset 4299105792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109888 ++wrote 2048/2048 bytes at offset 4299109888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113984 ++wrote 2048/2048 bytes at offset 4299113984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299118080 ++wrote 2048/2048 bytes at offset 4299118080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299122176 ++wrote 2048/2048 bytes at offset 4299122176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299126272 ++wrote 2048/2048 bytes at offset 4299126272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299130368 ++wrote 2048/2048 bytes at offset 4299130368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299134464 ++wrote 2048/2048 bytes at offset 4299134464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138560 ++wrote 2048/2048 bytes at offset 4299138560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142656 ++wrote 2048/2048 bytes at offset 4299142656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146752 ++wrote 2048/2048 bytes at offset 4299146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150848 ++wrote 2048/2048 bytes at offset 4299150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154944 ++wrote 2048/2048 bytes at offset 4299154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299159040 ++wrote 2048/2048 bytes at offset 4299159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> wrote 8192/8192 bytes at offset 4299164160 ++=== IO: pattern 5 ++wrote 8192/8192 bytes at offset 4299164160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299176448 ++wrote 8192/8192 bytes at offset 4299176448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188736 ++wrote 8192/8192 bytes at offset 4299188736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299201024 ++wrote 8192/8192 bytes at offset 4299201024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299213312 ++wrote 8192/8192 bytes at offset 4299213312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225600 ++wrote 8192/8192 bytes at offset 4299225600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237888 ++wrote 8192/8192 bytes at offset 4299237888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299250176 ++wrote 8192/8192 bytes at offset 4299250176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299262464 ++wrote 8192/8192 bytes at offset 4299262464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274752 ++wrote 8192/8192 bytes at offset 4299274752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299287040 ++wrote 8192/8192 bytes at offset 4299287040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299299328 ++wrote 8192/8192 bytes at offset 4299299328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311616 ++wrote 8192/8192 bytes at offset 4299311616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323904 ++wrote 8192/8192 bytes at offset 4299323904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299336192 ++wrote 8192/8192 bytes at offset 4299336192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299348480 ++wrote 8192/8192 bytes at offset 4299348480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360768 ++wrote 8192/8192 bytes at offset 4299360768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299373056 ++wrote 8192/8192 bytes at offset 4299373056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299385344 ++wrote 8192/8192 bytes at offset 4299385344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397632 ++wrote 8192/8192 bytes at offset 4299397632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409920 ++wrote 8192/8192 bytes at offset 4299409920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299422208 ++wrote 8192/8192 bytes at offset 4299422208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299434496 ++wrote 8192/8192 bytes at offset 4299434496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446784 ++wrote 8192/8192 bytes at offset 4299446784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299459072 ++wrote 8192/8192 bytes at offset 4299459072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299471360 ++wrote 8192/8192 bytes at offset 4299471360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483648 ++wrote 8192/8192 bytes at offset 4299483648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495936 ++wrote 8192/8192 bytes at offset 4299495936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299508224 ++wrote 8192/8192 bytes at offset 4299508224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520512 ++wrote 8192/8192 bytes at offset 4299520512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532800 ++wrote 8192/8192 bytes at offset 4299532800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299545088 ++wrote 8192/8192 bytes at offset 4299545088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299557376 ++wrote 8192/8192 bytes at offset 4299557376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569664 ++wrote 8192/8192 bytes at offset 4299569664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581952 ++wrote 8192/8192 bytes at offset 4299581952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299594240 ++wrote 8192/8192 bytes at offset 4299594240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606528 ++wrote 8192/8192 bytes at offset 4299606528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618816 ++wrote 8192/8192 bytes at offset 4299618816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299631104 ++wrote 8192/8192 bytes at offset 4299631104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299643392 ++wrote 8192/8192 bytes at offset 4299643392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655680 ++wrote 8192/8192 bytes at offset 4299655680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667968 ++wrote 8192/8192 bytes at offset 4299667968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299680256 ++wrote 8192/8192 bytes at offset 4299680256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692544 ++wrote 8192/8192 bytes at offset 4299692544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704832 ++wrote 8192/8192 bytes at offset 4299704832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299717120 ++wrote 8192/8192 bytes at offset 4299717120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299729408 ++wrote 8192/8192 bytes at offset 4299729408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741696 ++wrote 8192/8192 bytes at offset 4299741696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753984 ++wrote 8192/8192 bytes at offset 4299753984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299766272 ++wrote 8192/8192 bytes at offset 4299766272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778560 ++wrote 8192/8192 bytes at offset 4299778560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790848 ++wrote 8192/8192 bytes at offset 4299790848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299803136 ++wrote 8192/8192 bytes at offset 4299803136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299815424 ++wrote 8192/8192 bytes at offset 4299815424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827712 ++wrote 8192/8192 bytes at offset 4299827712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299840000 ++wrote 8192/8192 bytes at offset 4299840000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299852288 ++wrote 8192/8192 bytes at offset 4299852288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864576 ++wrote 8192/8192 bytes at offset 4299864576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876864 ++wrote 8192/8192 bytes at offset 4299876864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299889152 ++wrote 8192/8192 bytes at offset 4299889152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299901440 ++wrote 8192/8192 bytes at offset 4299901440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913728 ++wrote 8192/8192 bytes at offset 4299913728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299926016 ++wrote 8192/8192 bytes at offset 4299926016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299938304 ++wrote 8192/8192 bytes at offset 4299938304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971904 ++read 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294976000 ++read 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294980096 ++read 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294984192 ++read 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294988288 ++read 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294992384 ++read 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294996480 ++read 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000576 ++read 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004672 ++read 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008768 ++read 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012864 ++read 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016960 ++read 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295021056 ++read 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295025152 ++read 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295029248 ++read 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295033344 ++read 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295037440 ++read 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041536 ++read 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045632 ++read 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049728 ++read 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053824 ++read 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057920 ++read 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295062016 ++read 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295066112 ++read 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295070208 ++read 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295074304 ++read 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295078400 ++read 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295082496 ++read 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086592 ++read 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090688 ++read 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094784 ++read 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098880 ++read 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102976 ++read 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295107072 ++read 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295111168 ++read 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295115264 ++read 4096/4096 bytes at offset 4295115264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295119360 ++read 4096/4096 bytes at offset 4295119360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295123456 ++read 4096/4096 bytes at offset 4295123456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127552 ++read 4096/4096 bytes at offset 4295127552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131648 ++read 4096/4096 bytes at offset 4295131648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135744 ++read 4096/4096 bytes at offset 4295135744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139840 ++read 4096/4096 bytes at offset 4295139840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143936 ++read 4096/4096 bytes at offset 4295143936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295148032 ++read 4096/4096 bytes at offset 4295148032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295152128 ++read 4096/4096 bytes at offset 4295152128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295156224 ++read 4096/4096 bytes at offset 4295156224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295160320 ++read 4096/4096 bytes at offset 4295160320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295164416 ++read 4096/4096 bytes at offset 4295164416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168512 ++read 4096/4096 bytes at offset 4295168512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172608 ++read 4096/4096 bytes at offset 4295172608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176704 ++read 4096/4096 bytes at offset 4295176704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180800 ++read 4096/4096 bytes at offset 4295180800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184896 ++read 4096/4096 bytes at offset 4295184896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188992 ++read 4096/4096 bytes at offset 4295188992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295193088 ++read 4096/4096 bytes at offset 4295193088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295197184 ++read 4096/4096 bytes at offset 4295197184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295201280 ++read 4096/4096 bytes at offset 4295201280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295205376 ++read 4096/4096 bytes at offset 4295205376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295209472 ++read 4096/4096 bytes at offset 4295209472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213568 ++read 4096/4096 bytes at offset 4295213568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217664 ++read 4096/4096 bytes at offset 4295217664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221760 ++read 4096/4096 bytes at offset 4295221760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225856 ++read 4096/4096 bytes at offset 4295225856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229952 ++read 4096/4096 bytes at offset 4295229952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295234048 ++read 4096/4096 bytes at offset 4295234048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295238144 ++read 4096/4096 bytes at offset 4295238144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295242240 ++read 4096/4096 bytes at offset 4295242240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295246336 ++read 4096/4096 bytes at offset 4295246336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295250432 ++read 4096/4096 bytes at offset 4295250432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254528 ++read 4096/4096 bytes at offset 4295254528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258624 ++read 4096/4096 bytes at offset 4295258624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262720 ++read 4096/4096 bytes at offset 4295262720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266816 ++read 4096/4096 bytes at offset 4295266816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270912 ++read 4096/4096 bytes at offset 4295270912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295275008 ++read 4096/4096 bytes at offset 4295275008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295279104 ++read 4096/4096 bytes at offset 4295279104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295283200 ++read 4096/4096 bytes at offset 4295283200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295287296 ++read 4096/4096 bytes at offset 4295287296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295291392 ++read 4096/4096 bytes at offset 4295291392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295295488 ++read 4096/4096 bytes at offset 4295295488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299584 ++read 4096/4096 bytes at offset 4295299584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303680 ++read 4096/4096 bytes at offset 4295303680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307776 ++read 4096/4096 bytes at offset 4295307776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311872 ++read 4096/4096 bytes at offset 4295311872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315968 ++read 4096/4096 bytes at offset 4295315968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295320064 ++read 4096/4096 bytes at offset 4295320064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295324160 ++read 4096/4096 bytes at offset 4295324160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295328256 ++read 4096/4096 bytes at offset 4295328256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295332352 ++read 4096/4096 bytes at offset 4295332352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295336448 ++read 4096/4096 bytes at offset 4295336448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340544 ++read 4096/4096 bytes at offset 4295340544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344640 ++read 4096/4096 bytes at offset 4295344640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348736 ++read 4096/4096 bytes at offset 4295348736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352832 ++read 4096/4096 bytes at offset 4295352832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356928 ++read 4096/4096 bytes at offset 4295356928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295361024 ++read 4096/4096 bytes at offset 4295361024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295365120 ++read 4096/4096 bytes at offset 4295365120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295369216 ++read 4096/4096 bytes at offset 4295369216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295373312 ++read 4096/4096 bytes at offset 4295373312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295377408 ++read 4096/4096 bytes at offset 4295377408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295381504 ++read 4096/4096 bytes at offset 4295381504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385600 ++read 4096/4096 bytes at offset 4295385600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389696 ++read 4096/4096 bytes at offset 4295389696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393792 ++read 4096/4096 bytes at offset 4295393792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397888 ++read 4096/4096 bytes at offset 4295397888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401984 ++read 4096/4096 bytes at offset 4295401984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295406080 ++read 4096/4096 bytes at offset 4295406080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295410176 ++read 4096/4096 bytes at offset 4295410176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295414272 ++read 4096/4096 bytes at offset 4295414272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295418368 ++read 4096/4096 bytes at offset 4295418368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295422464 ++read 4096/4096 bytes at offset 4295422464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426560 ++read 4096/4096 bytes at offset 4295426560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430656 ++read 4096/4096 bytes at offset 4295430656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434752 ++read 4096/4096 bytes at offset 4295434752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438848 ++read 4096/4096 bytes at offset 4295438848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442944 ++read 4096/4096 bytes at offset 4295442944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295447040 ++read 4096/4096 bytes at offset 4295447040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295451136 ++read 4096/4096 bytes at offset 4295451136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295455232 ++read 4096/4096 bytes at offset 4295455232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295459328 ++read 4096/4096 bytes at offset 4295459328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295463424 ++read 4096/4096 bytes at offset 4295463424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467520 ++read 4096/4096 bytes at offset 4295467520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471616 ++read 4096/4096 bytes at offset 4295471616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475712 ++read 4096/4096 bytes at offset 4295475712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479808 ++read 4096/4096 bytes at offset 4295479808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483904 ++read 4096/4096 bytes at offset 4295483904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295488000 ++read 4096/4096 bytes at offset 4295488000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295492096 ++read 4096/4096 bytes at offset 4295492096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295496192 ++read 4096/4096 bytes at offset 4295496192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295500288 ++read 4096/4096 bytes at offset 4295500288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295504384 ++read 4096/4096 bytes at offset 4295504384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295508480 ++read 4096/4096 bytes at offset 4295508480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512576 ++read 4096/4096 bytes at offset 4295512576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516672 ++read 4096/4096 bytes at offset 4295516672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520768 ++read 4096/4096 bytes at offset 4295520768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524864 ++read 4096/4096 bytes at offset 4295524864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528960 ++read 4096/4096 bytes at offset 4295528960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295533056 ++read 4096/4096 bytes at offset 4295533056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295537152 ++read 4096/4096 bytes at offset 4295537152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295541248 ++read 4096/4096 bytes at offset 4295541248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295545344 ++read 4096/4096 bytes at offset 4295545344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295549440 ++read 4096/4096 bytes at offset 4295549440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553536 ++read 4096/4096 bytes at offset 4295553536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557632 ++read 4096/4096 bytes at offset 4295557632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561728 ++read 4096/4096 bytes at offset 4295561728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565824 ++read 4096/4096 bytes at offset 4295565824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569920 ++read 4096/4096 bytes at offset 4295569920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295574016 ++read 4096/4096 bytes at offset 4295574016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295578112 ++read 4096/4096 bytes at offset 4295578112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295582208 ++read 4096/4096 bytes at offset 4295582208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295586304 ++read 4096/4096 bytes at offset 4295586304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295590400 ++read 4096/4096 bytes at offset 4295590400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295594496 ++read 4096/4096 bytes at offset 4295594496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598592 ++read 4096/4096 bytes at offset 4295598592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602688 ++read 4096/4096 bytes at offset 4295602688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606784 ++read 4096/4096 bytes at offset 4295606784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610880 ++read 4096/4096 bytes at offset 4295610880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614976 ++read 4096/4096 bytes at offset 4295614976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295619072 ++read 4096/4096 bytes at offset 4295619072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295623168 ++read 4096/4096 bytes at offset 4295623168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295627264 ++read 4096/4096 bytes at offset 4295627264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295631360 ++read 4096/4096 bytes at offset 4295631360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295635456 ++read 4096/4096 bytes at offset 4295635456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639552 ++read 4096/4096 bytes at offset 4295639552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643648 ++read 4096/4096 bytes at offset 4295643648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647744 ++read 4096/4096 bytes at offset 4295647744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651840 ++read 4096/4096 bytes at offset 4295651840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655936 ++read 4096/4096 bytes at offset 4295655936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295660032 ++read 4096/4096 bytes at offset 4295660032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295664128 ++read 4096/4096 bytes at offset 4295664128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295668224 ++read 4096/4096 bytes at offset 4295668224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295672320 ++read 4096/4096 bytes at offset 4295672320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295676416 ++read 4096/4096 bytes at offset 4295676416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680512 ++read 4096/4096 bytes at offset 4295680512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684608 ++read 4096/4096 bytes at offset 4295684608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688704 ++read 4096/4096 bytes at offset 4295688704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692800 ++read 4096/4096 bytes at offset 4295692800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696896 ++read 4096/4096 bytes at offset 4295696896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700992 ++read 4096/4096 bytes at offset 4295700992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295705088 ++read 4096/4096 bytes at offset 4295705088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295709184 ++read 4096/4096 bytes at offset 4295709184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295713280 ++read 4096/4096 bytes at offset 4295713280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295717376 ++read 4096/4096 bytes at offset 4295717376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295721472 ++read 4096/4096 bytes at offset 4295721472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725568 ++read 4096/4096 bytes at offset 4295725568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729664 ++read 4096/4096 bytes at offset 4295729664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733760 ++read 4096/4096 bytes at offset 4295733760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737856 ++read 4096/4096 bytes at offset 4295737856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741952 ++read 4096/4096 bytes at offset 4295741952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295746048 ++read 4096/4096 bytes at offset 4295746048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295750144 ++read 4096/4096 bytes at offset 4295750144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295754240 ++read 4096/4096 bytes at offset 4295754240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295758336 ++read 4096/4096 bytes at offset 4295758336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295762432 ++read 4096/4096 bytes at offset 4295762432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766528 ++read 4096/4096 bytes at offset 4295766528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770624 ++read 4096/4096 bytes at offset 4295770624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774720 ++read 4096/4096 bytes at offset 4295774720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778816 ++read 4096/4096 bytes at offset 4295778816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782912 ++read 4096/4096 bytes at offset 4295782912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295787008 ++read 4096/4096 bytes at offset 4295787008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295791104 ++read 4096/4096 bytes at offset 4295791104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295795200 ++read 4096/4096 bytes at offset 4295795200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295799296 ++read 4096/4096 bytes at offset 4295799296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295803392 ++read 4096/4096 bytes at offset 4295803392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295807488 ++read 4096/4096 bytes at offset 4295807488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811584 ++read 4096/4096 bytes at offset 4295811584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815680 ++read 4096/4096 bytes at offset 4295815680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819776 ++read 4096/4096 bytes at offset 4295819776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823872 ++read 4096/4096 bytes at offset 4295823872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827968 ++read 4096/4096 bytes at offset 4295827968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295832064 ++read 4096/4096 bytes at offset 4295832064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295836160 ++read 4096/4096 bytes at offset 4295836160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295840256 ++read 4096/4096 bytes at offset 4295840256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295844352 ++read 4096/4096 bytes at offset 4295844352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295848448 ++read 4096/4096 bytes at offset 4295848448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852544 ++read 4096/4096 bytes at offset 4295852544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856640 ++read 4096/4096 bytes at offset 4295856640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860736 ++read 4096/4096 bytes at offset 4295860736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864832 ++read 4096/4096 bytes at offset 4295864832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868928 ++read 4096/4096 bytes at offset 4295868928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295873024 ++read 4096/4096 bytes at offset 4295873024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295877120 ++read 4096/4096 bytes at offset 4295877120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295881216 ++read 4096/4096 bytes at offset 4295881216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295885312 ++read 4096/4096 bytes at offset 4295885312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295889408 ++read 4096/4096 bytes at offset 4295889408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295893504 ++read 4096/4096 bytes at offset 4295893504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897600 ++read 4096/4096 bytes at offset 4295897600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901696 ++read 4096/4096 bytes at offset 4295901696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905792 ++read 4096/4096 bytes at offset 4295905792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909888 ++read 4096/4096 bytes at offset 4295909888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913984 ++read 4096/4096 bytes at offset 4295913984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295918080 ++read 4096/4096 bytes at offset 4295918080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295922176 ++read 4096/4096 bytes at offset 4295922176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295926272 ++read 4096/4096 bytes at offset 4295926272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295930368 ++read 4096/4096 bytes at offset 4295930368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295934464 ++read 4096/4096 bytes at offset 4295934464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938560 ++read 4096/4096 bytes at offset 4295938560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942656 ++read 4096/4096 bytes at offset 4295942656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946752 ++read 4096/4096 bytes at offset 4295946752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950848 ++read 4096/4096 bytes at offset 4295950848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954944 ++read 4096/4096 bytes at offset 4295954944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295959040 ++read 4096/4096 bytes at offset 4295959040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295963136 ++read 4096/4096 bytes at offset 4295963136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295967232 ++read 4096/4096 bytes at offset 4295967232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295971328 ++read 4096/4096 bytes at offset 4295971328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295975424 ++read 4096/4096 bytes at offset 4295975424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979520 ++read 4096/4096 bytes at offset 4295979520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983616 ++read 4096/4096 bytes at offset 4295983616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987712 ++read 4096/4096 bytes at offset 4295987712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991808 ++read 4096/4096 bytes at offset 4295991808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995904 ++read 4096/4096 bytes at offset 4295995904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296000000 ++read 4096/4096 bytes at offset 4296000000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296004096 ++read 4096/4096 bytes at offset 4296004096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296008192 ++read 4096/4096 bytes at offset 4296008192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296012288 ++read 4096/4096 bytes at offset 4296012288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 2048/2048 bytes at offset 4296018432 ++=== IO: pattern 5 ++read 2048/2048 bytes at offset 4296018432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022528 ++read 2048/2048 bytes at offset 4296022528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026624 ++read 2048/2048 bytes at offset 4296026624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030720 ++read 2048/2048 bytes at offset 4296030720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034816 ++read 2048/2048 bytes at offset 4296034816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038912 ++read 2048/2048 bytes at offset 4296038912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296043008 ++read 2048/2048 bytes at offset 4296043008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296047104 ++read 2048/2048 bytes at offset 4296047104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296051200 ++read 2048/2048 bytes at offset 4296051200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296055296 ++read 2048/2048 bytes at offset 4296055296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296059392 ++read 2048/2048 bytes at offset 4296059392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296063488 ++read 2048/2048 bytes at offset 4296063488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067584 ++read 2048/2048 bytes at offset 4296067584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071680 ++read 2048/2048 bytes at offset 4296071680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075776 ++read 2048/2048 bytes at offset 4296075776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079872 ++read 2048/2048 bytes at offset 4296079872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083968 ++read 2048/2048 bytes at offset 4296083968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296088064 ++read 2048/2048 bytes at offset 4296088064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296092160 ++read 2048/2048 bytes at offset 4296092160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296096256 ++read 2048/2048 bytes at offset 4296096256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296100352 ++read 2048/2048 bytes at offset 4296100352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296104448 ++read 2048/2048 bytes at offset 4296104448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108544 ++read 2048/2048 bytes at offset 4296108544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112640 ++read 2048/2048 bytes at offset 4296112640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116736 ++read 2048/2048 bytes at offset 4296116736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120832 ++read 2048/2048 bytes at offset 4296120832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124928 ++read 2048/2048 bytes at offset 4296124928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296129024 ++read 2048/2048 bytes at offset 4296129024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296133120 ++read 2048/2048 bytes at offset 4296133120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296137216 ++read 2048/2048 bytes at offset 4296137216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296141312 ++read 2048/2048 bytes at offset 4296141312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296145408 ++read 2048/2048 bytes at offset 4296145408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296149504 ++read 2048/2048 bytes at offset 4296149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153600 ++read 2048/2048 bytes at offset 4296153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157696 ++read 2048/2048 bytes at offset 4296157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161792 ++read 2048/2048 bytes at offset 4296161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165888 ++read 2048/2048 bytes at offset 4296165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169984 ++read 2048/2048 bytes at offset 4296169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296174080 ++read 2048/2048 bytes at offset 4296174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296178176 ++read 2048/2048 bytes at offset 4296178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296182272 ++read 2048/2048 bytes at offset 4296182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296186368 ++read 2048/2048 bytes at offset 4296186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296190464 ++read 2048/2048 bytes at offset 4296190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194560 ++read 2048/2048 bytes at offset 4296194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198656 ++read 2048/2048 bytes at offset 4296198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202752 ++read 2048/2048 bytes at offset 4296202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206848 ++read 2048/2048 bytes at offset 4296206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210944 ++read 2048/2048 bytes at offset 4296210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296215040 ++read 2048/2048 bytes at offset 4296215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296219136 ++read 2048/2048 bytes at offset 4296219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296223232 ++read 2048/2048 bytes at offset 4296223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296227328 ++read 2048/2048 bytes at offset 4296227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296231424 ++read 2048/2048 bytes at offset 4296231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235520 ++read 2048/2048 bytes at offset 4296235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239616 ++read 2048/2048 bytes at offset 4296239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243712 ++read 2048/2048 bytes at offset 4296243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247808 ++read 2048/2048 bytes at offset 4296247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251904 ++read 2048/2048 bytes at offset 4296251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296256000 ++read 2048/2048 bytes at offset 4296256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296260096 ++read 2048/2048 bytes at offset 4296260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296264192 ++read 2048/2048 bytes at offset 4296264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296268288 ++read 2048/2048 bytes at offset 4296268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296272384 ++read 2048/2048 bytes at offset 4296272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296276480 ++read 2048/2048 bytes at offset 4296276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280576 ++read 2048/2048 bytes at offset 4296280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284672 ++read 2048/2048 bytes at offset 4296284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288768 ++read 2048/2048 bytes at offset 4296288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292864 ++read 2048/2048 bytes at offset 4296292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296960 ++read 2048/2048 bytes at offset 4296296960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296301056 ++read 2048/2048 bytes at offset 4296301056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296305152 ++read 2048/2048 bytes at offset 4296305152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296309248 ++read 2048/2048 bytes at offset 4296309248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296313344 ++read 2048/2048 bytes at offset 4296313344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296317440 ++read 2048/2048 bytes at offset 4296317440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321536 ++read 2048/2048 bytes at offset 4296321536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325632 ++read 2048/2048 bytes at offset 4296325632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329728 ++read 2048/2048 bytes at offset 4296329728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333824 ++read 2048/2048 bytes at offset 4296333824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337920 ++read 2048/2048 bytes at offset 4296337920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296342016 ++read 2048/2048 bytes at offset 4296342016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296346112 ++read 2048/2048 bytes at offset 4296346112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296350208 ++read 2048/2048 bytes at offset 4296350208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296354304 ++read 2048/2048 bytes at offset 4296354304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296358400 ++read 2048/2048 bytes at offset 4296358400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296362496 ++read 2048/2048 bytes at offset 4296362496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366592 ++read 2048/2048 bytes at offset 4296366592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370688 ++read 2048/2048 bytes at offset 4296370688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374784 ++read 2048/2048 bytes at offset 4296374784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378880 ++read 2048/2048 bytes at offset 4296378880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382976 ++read 2048/2048 bytes at offset 4296382976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296387072 ++read 2048/2048 bytes at offset 4296387072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296391168 ++read 2048/2048 bytes at offset 4296391168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296395264 ++read 2048/2048 bytes at offset 4296395264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296399360 ++read 2048/2048 bytes at offset 4296399360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296403456 ++read 2048/2048 bytes at offset 4296403456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407552 ++read 2048/2048 bytes at offset 4296407552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411648 ++read 2048/2048 bytes at offset 4296411648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415744 ++read 2048/2048 bytes at offset 4296415744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419840 ++read 2048/2048 bytes at offset 4296419840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423936 ++read 2048/2048 bytes at offset 4296423936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296428032 ++read 2048/2048 bytes at offset 4296428032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296432128 ++read 2048/2048 bytes at offset 4296432128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296436224 ++read 2048/2048 bytes at offset 4296436224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296440320 ++read 2048/2048 bytes at offset 4296440320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296444416 ++read 2048/2048 bytes at offset 4296444416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448512 ++read 2048/2048 bytes at offset 4296448512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452608 ++read 2048/2048 bytes at offset 4296452608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456704 ++read 2048/2048 bytes at offset 4296456704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460800 ++read 2048/2048 bytes at offset 4296460800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464896 ++read 2048/2048 bytes at offset 4296464896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468992 ++read 2048/2048 bytes at offset 4296468992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296473088 ++read 2048/2048 bytes at offset 4296473088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296477184 ++read 2048/2048 bytes at offset 4296477184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296481280 ++read 2048/2048 bytes at offset 4296481280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296485376 ++read 2048/2048 bytes at offset 4296485376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296489472 ++read 2048/2048 bytes at offset 4296489472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493568 ++read 2048/2048 bytes at offset 4296493568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497664 ++read 2048/2048 bytes at offset 4296497664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501760 ++read 2048/2048 bytes at offset 4296501760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505856 ++read 2048/2048 bytes at offset 4296505856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509952 ++read 2048/2048 bytes at offset 4296509952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296514048 ++read 2048/2048 bytes at offset 4296514048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296518144 ++read 2048/2048 bytes at offset 4296518144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296522240 ++read 2048/2048 bytes at offset 4296522240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296526336 ++read 2048/2048 bytes at offset 4296526336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296530432 ++read 2048/2048 bytes at offset 4296530432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534528 ++read 2048/2048 bytes at offset 4296534528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538624 ++read 2048/2048 bytes at offset 4296538624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542720 ++read 2048/2048 bytes at offset 4296542720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546816 ++read 2048/2048 bytes at offset 4296546816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550912 ++read 2048/2048 bytes at offset 4296550912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296555008 ++read 2048/2048 bytes at offset 4296555008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296559104 ++read 2048/2048 bytes at offset 4296559104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296563200 ++read 2048/2048 bytes at offset 4296563200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296567296 ++read 2048/2048 bytes at offset 4296567296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296571392 ++read 2048/2048 bytes at offset 4296571392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296575488 ++read 2048/2048 bytes at offset 4296575488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579584 ++read 2048/2048 bytes at offset 4296579584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583680 ++read 2048/2048 bytes at offset 4296583680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587776 ++read 2048/2048 bytes at offset 4296587776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591872 ++read 2048/2048 bytes at offset 4296591872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595968 ++read 2048/2048 bytes at offset 4296595968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296600064 ++read 2048/2048 bytes at offset 4296600064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296604160 ++read 2048/2048 bytes at offset 4296604160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296608256 ++read 2048/2048 bytes at offset 4296608256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296612352 ++read 2048/2048 bytes at offset 4296612352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296616448 ++read 2048/2048 bytes at offset 4296616448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620544 ++read 2048/2048 bytes at offset 4296620544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624640 ++read 2048/2048 bytes at offset 4296624640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628736 ++read 2048/2048 bytes at offset 4296628736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632832 ++read 2048/2048 bytes at offset 4296632832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636928 ++read 2048/2048 bytes at offset 4296636928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296641024 ++read 2048/2048 bytes at offset 4296641024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296645120 ++read 2048/2048 bytes at offset 4296645120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296649216 ++read 2048/2048 bytes at offset 4296649216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296653312 ++read 2048/2048 bytes at offset 4296653312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296657408 ++read 2048/2048 bytes at offset 4296657408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296661504 ++read 2048/2048 bytes at offset 4296661504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665600 ++read 2048/2048 bytes at offset 4296665600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669696 ++read 2048/2048 bytes at offset 4296669696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673792 ++read 2048/2048 bytes at offset 4296673792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677888 ++read 2048/2048 bytes at offset 4296677888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681984 ++read 2048/2048 bytes at offset 4296681984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296686080 ++read 2048/2048 bytes at offset 4296686080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296690176 ++read 2048/2048 bytes at offset 4296690176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296694272 ++read 2048/2048 bytes at offset 4296694272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296698368 ++read 2048/2048 bytes at offset 4296698368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296702464 ++read 2048/2048 bytes at offset 4296702464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706560 ++read 2048/2048 bytes at offset 4296706560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710656 ++read 2048/2048 bytes at offset 4296710656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714752 ++read 2048/2048 bytes at offset 4296714752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718848 ++read 2048/2048 bytes at offset 4296718848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722944 ++read 2048/2048 bytes at offset 4296722944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296727040 ++read 2048/2048 bytes at offset 4296727040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296731136 ++read 2048/2048 bytes at offset 4296731136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296735232 ++read 2048/2048 bytes at offset 4296735232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296739328 ++read 2048/2048 bytes at offset 4296739328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296743424 ++read 2048/2048 bytes at offset 4296743424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747520 ++read 2048/2048 bytes at offset 4296747520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751616 ++read 2048/2048 bytes at offset 4296751616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755712 ++read 2048/2048 bytes at offset 4296755712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759808 ++read 2048/2048 bytes at offset 4296759808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763904 ++read 2048/2048 bytes at offset 4296763904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296768000 ++read 2048/2048 bytes at offset 4296768000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296772096 ++read 2048/2048 bytes at offset 4296772096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296776192 ++read 2048/2048 bytes at offset 4296776192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296780288 ++read 2048/2048 bytes at offset 4296780288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296784384 ++read 2048/2048 bytes at offset 4296784384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296788480 ++read 2048/2048 bytes at offset 4296788480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792576 ++read 2048/2048 bytes at offset 4296792576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796672 ++read 2048/2048 bytes at offset 4296796672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800768 ++read 2048/2048 bytes at offset 4296800768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804864 ++read 2048/2048 bytes at offset 4296804864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808960 ++read 2048/2048 bytes at offset 4296808960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296813056 ++read 2048/2048 bytes at offset 4296813056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296817152 ++read 2048/2048 bytes at offset 4296817152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296821248 ++read 2048/2048 bytes at offset 4296821248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296825344 ++read 2048/2048 bytes at offset 4296825344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296829440 ++read 2048/2048 bytes at offset 4296829440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833536 ++read 2048/2048 bytes at offset 4296833536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837632 ++read 2048/2048 bytes at offset 4296837632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841728 ++read 2048/2048 bytes at offset 4296841728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845824 ++read 2048/2048 bytes at offset 4296845824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849920 ++read 2048/2048 bytes at offset 4296849920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296854016 ++read 2048/2048 bytes at offset 4296854016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296858112 ++read 2048/2048 bytes at offset 4296858112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296862208 ++read 2048/2048 bytes at offset 4296862208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296866304 ++read 2048/2048 bytes at offset 4296866304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296870400 ++read 2048/2048 bytes at offset 4296870400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296874496 ++read 2048/2048 bytes at offset 4296874496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878592 ++read 2048/2048 bytes at offset 4296878592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882688 ++read 2048/2048 bytes at offset 4296882688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886784 ++read 2048/2048 bytes at offset 4296886784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890880 ++read 2048/2048 bytes at offset 4296890880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894976 ++read 2048/2048 bytes at offset 4296894976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296899072 ++read 2048/2048 bytes at offset 4296899072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296903168 ++read 2048/2048 bytes at offset 4296903168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296907264 ++read 2048/2048 bytes at offset 4296907264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296911360 ++read 2048/2048 bytes at offset 4296911360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296915456 ++read 2048/2048 bytes at offset 4296915456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919552 ++read 2048/2048 bytes at offset 4296919552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923648 ++read 2048/2048 bytes at offset 4296923648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927744 ++read 2048/2048 bytes at offset 4296927744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931840 ++read 2048/2048 bytes at offset 4296931840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935936 ++read 2048/2048 bytes at offset 4296935936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296940032 ++read 2048/2048 bytes at offset 4296940032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296944128 ++read 2048/2048 bytes at offset 4296944128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296948224 ++read 2048/2048 bytes at offset 4296948224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296952320 ++read 2048/2048 bytes at offset 4296952320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296956416 ++read 2048/2048 bytes at offset 4296956416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960512 ++read 2048/2048 bytes at offset 4296960512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964608 ++read 2048/2048 bytes at offset 4296964608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968704 ++read 2048/2048 bytes at offset 4296968704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972800 ++read 2048/2048 bytes at offset 4296972800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976896 ++read 2048/2048 bytes at offset 4296976896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980992 ++read 2048/2048 bytes at offset 4296980992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296985088 ++read 2048/2048 bytes at offset 4296985088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296989184 ++read 2048/2048 bytes at offset 4296989184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296993280 ++read 2048/2048 bytes at offset 4296993280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296997376 ++read 2048/2048 bytes at offset 4296997376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297001472 ++read 2048/2048 bytes at offset 4297001472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005568 ++read 2048/2048 bytes at offset 4297005568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009664 ++read 2048/2048 bytes at offset 4297009664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013760 ++read 2048/2048 bytes at offset 4297013760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017856 ++read 2048/2048 bytes at offset 4297017856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021952 ++read 2048/2048 bytes at offset 4297021952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297026048 ++read 2048/2048 bytes at offset 4297026048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297030144 ++read 2048/2048 bytes at offset 4297030144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297034240 ++read 2048/2048 bytes at offset 4297034240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297038336 ++read 2048/2048 bytes at offset 4297038336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297042432 ++read 2048/2048 bytes at offset 4297042432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046528 ++read 2048/2048 bytes at offset 4297046528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050624 ++read 2048/2048 bytes at offset 4297050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054720 ++read 2048/2048 bytes at offset 4297054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058816 ++read 2048/2048 bytes at offset 4297058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062912 ++read 2048/2048 bytes at offset 4297062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 2048/2048 bytes at offset 4297064960 ++=== IO: pattern 1 ++read 2048/2048 bytes at offset 4297064960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297069056 ++read 2048/2048 bytes at offset 4297069056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297073152 ++read 2048/2048 bytes at offset 4297073152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297077248 ++read 2048/2048 bytes at offset 4297077248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297081344 ++read 2048/2048 bytes at offset 4297081344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297085440 ++read 2048/2048 bytes at offset 4297085440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089536 ++read 2048/2048 bytes at offset 4297089536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093632 ++read 2048/2048 bytes at offset 4297093632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097728 ++read 2048/2048 bytes at offset 4297097728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101824 ++read 2048/2048 bytes at offset 4297101824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105920 ++read 2048/2048 bytes at offset 4297105920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297110016 ++read 2048/2048 bytes at offset 4297110016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297114112 ++read 2048/2048 bytes at offset 4297114112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297118208 ++read 2048/2048 bytes at offset 4297118208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297122304 ++read 2048/2048 bytes at offset 4297122304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297126400 ++read 2048/2048 bytes at offset 4297126400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297130496 ++read 2048/2048 bytes at offset 4297130496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134592 ++read 2048/2048 bytes at offset 4297134592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138688 ++read 2048/2048 bytes at offset 4297138688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142784 ++read 2048/2048 bytes at offset 4297142784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146880 ++read 2048/2048 bytes at offset 4297146880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150976 ++read 2048/2048 bytes at offset 4297150976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297155072 ++read 2048/2048 bytes at offset 4297155072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297159168 ++read 2048/2048 bytes at offset 4297159168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297163264 ++read 2048/2048 bytes at offset 4297163264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297167360 ++read 2048/2048 bytes at offset 4297167360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297171456 ++read 2048/2048 bytes at offset 4297171456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175552 ++read 2048/2048 bytes at offset 4297175552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179648 ++read 2048/2048 bytes at offset 4297179648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183744 ++read 2048/2048 bytes at offset 4297183744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187840 ++read 2048/2048 bytes at offset 4297187840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191936 ++read 2048/2048 bytes at offset 4297191936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297196032 ++read 2048/2048 bytes at offset 4297196032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297200128 ++read 2048/2048 bytes at offset 4297200128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297204224 ++read 2048/2048 bytes at offset 4297204224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297208320 ++read 2048/2048 bytes at offset 4297208320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297212416 ++read 2048/2048 bytes at offset 4297212416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216512 ++read 2048/2048 bytes at offset 4297216512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220608 ++read 2048/2048 bytes at offset 4297220608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224704 ++read 2048/2048 bytes at offset 4297224704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228800 ++read 2048/2048 bytes at offset 4297228800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232896 ++read 2048/2048 bytes at offset 4297232896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236992 ++read 2048/2048 bytes at offset 4297236992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297241088 ++read 2048/2048 bytes at offset 4297241088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297245184 ++read 2048/2048 bytes at offset 4297245184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297249280 ++read 2048/2048 bytes at offset 4297249280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297253376 ++read 2048/2048 bytes at offset 4297253376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297257472 ++read 2048/2048 bytes at offset 4297257472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261568 ++read 2048/2048 bytes at offset 4297261568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265664 ++read 2048/2048 bytes at offset 4297265664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269760 ++read 2048/2048 bytes at offset 4297269760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273856 ++read 2048/2048 bytes at offset 4297273856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277952 ++read 2048/2048 bytes at offset 4297277952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297282048 ++read 2048/2048 bytes at offset 4297282048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297286144 ++read 2048/2048 bytes at offset 4297286144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297290240 ++read 2048/2048 bytes at offset 4297290240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297294336 ++read 2048/2048 bytes at offset 4297294336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297298432 ++read 2048/2048 bytes at offset 4297298432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302528 ++read 2048/2048 bytes at offset 4297302528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306624 ++read 2048/2048 bytes at offset 4297306624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310720 ++read 2048/2048 bytes at offset 4297310720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314816 ++read 2048/2048 bytes at offset 4297314816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318912 ++read 2048/2048 bytes at offset 4297318912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297323008 ++read 2048/2048 bytes at offset 4297323008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297327104 ++read 2048/2048 bytes at offset 4297327104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297331200 ++read 2048/2048 bytes at offset 4297331200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297335296 ++read 2048/2048 bytes at offset 4297335296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297339392 ++read 2048/2048 bytes at offset 4297339392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297343488 ++read 2048/2048 bytes at offset 4297343488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347584 ++read 2048/2048 bytes at offset 4297347584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351680 ++read 2048/2048 bytes at offset 4297351680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355776 ++read 2048/2048 bytes at offset 4297355776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359872 ++read 2048/2048 bytes at offset 4297359872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363968 ++read 2048/2048 bytes at offset 4297363968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297368064 ++read 2048/2048 bytes at offset 4297368064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297372160 ++read 2048/2048 bytes at offset 4297372160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297376256 ++read 2048/2048 bytes at offset 4297376256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297380352 ++read 2048/2048 bytes at offset 4297380352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297384448 ++read 2048/2048 bytes at offset 4297384448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388544 ++read 2048/2048 bytes at offset 4297388544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392640 ++read 2048/2048 bytes at offset 4297392640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396736 ++read 2048/2048 bytes at offset 4297396736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400832 ++read 2048/2048 bytes at offset 4297400832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404928 ++read 2048/2048 bytes at offset 4297404928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297409024 ++read 2048/2048 bytes at offset 4297409024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297413120 ++read 2048/2048 bytes at offset 4297413120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297417216 ++read 2048/2048 bytes at offset 4297417216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297421312 ++read 2048/2048 bytes at offset 4297421312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297425408 ++read 2048/2048 bytes at offset 4297425408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297429504 ++read 2048/2048 bytes at offset 4297429504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433600 ++read 2048/2048 bytes at offset 4297433600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437696 ++read 2048/2048 bytes at offset 4297437696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441792 ++read 2048/2048 bytes at offset 4297441792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445888 ++read 2048/2048 bytes at offset 4297445888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449984 ++read 2048/2048 bytes at offset 4297449984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297454080 ++read 2048/2048 bytes at offset 4297454080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297458176 ++read 2048/2048 bytes at offset 4297458176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297462272 ++read 2048/2048 bytes at offset 4297462272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297466368 ++read 2048/2048 bytes at offset 4297466368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297470464 ++read 2048/2048 bytes at offset 4297470464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474560 ++read 2048/2048 bytes at offset 4297474560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478656 ++read 2048/2048 bytes at offset 4297478656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482752 ++read 2048/2048 bytes at offset 4297482752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486848 ++read 2048/2048 bytes at offset 4297486848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490944 ++read 2048/2048 bytes at offset 4297490944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297495040 ++read 2048/2048 bytes at offset 4297495040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297499136 ++read 2048/2048 bytes at offset 4297499136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297503232 ++read 2048/2048 bytes at offset 4297503232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297507328 ++read 2048/2048 bytes at offset 4297507328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297511424 ++read 2048/2048 bytes at offset 4297511424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515520 ++read 2048/2048 bytes at offset 4297515520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519616 ++read 2048/2048 bytes at offset 4297519616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523712 ++read 2048/2048 bytes at offset 4297523712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527808 ++read 2048/2048 bytes at offset 4297527808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531904 ++read 2048/2048 bytes at offset 4297531904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297536000 ++read 2048/2048 bytes at offset 4297536000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297540096 ++read 2048/2048 bytes at offset 4297540096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297544192 ++read 2048/2048 bytes at offset 4297544192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297548288 ++read 2048/2048 bytes at offset 4297548288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297552384 ++read 2048/2048 bytes at offset 4297552384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297556480 ++read 2048/2048 bytes at offset 4297556480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560576 ++read 2048/2048 bytes at offset 4297560576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564672 ++read 2048/2048 bytes at offset 4297564672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568768 ++read 2048/2048 bytes at offset 4297568768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572864 ++read 2048/2048 bytes at offset 4297572864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576960 ++read 2048/2048 bytes at offset 4297576960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297581056 ++read 2048/2048 bytes at offset 4297581056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297585152 ++read 2048/2048 bytes at offset 4297585152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297589248 ++read 2048/2048 bytes at offset 4297589248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297593344 ++read 2048/2048 bytes at offset 4297593344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297597440 ++read 2048/2048 bytes at offset 4297597440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601536 ++read 2048/2048 bytes at offset 4297601536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605632 ++read 2048/2048 bytes at offset 4297605632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609728 ++read 2048/2048 bytes at offset 4297609728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613824 ++read 2048/2048 bytes at offset 4297613824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617920 ++read 2048/2048 bytes at offset 4297617920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297622016 ++read 2048/2048 bytes at offset 4297622016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297626112 ++read 2048/2048 bytes at offset 4297626112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297630208 ++read 2048/2048 bytes at offset 4297630208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297634304 ++read 2048/2048 bytes at offset 4297634304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297638400 ++read 2048/2048 bytes at offset 4297638400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297642496 ++read 2048/2048 bytes at offset 4297642496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646592 ++read 2048/2048 bytes at offset 4297646592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650688 ++read 2048/2048 bytes at offset 4297650688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654784 ++read 2048/2048 bytes at offset 4297654784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658880 ++read 2048/2048 bytes at offset 4297658880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662976 ++read 2048/2048 bytes at offset 4297662976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297667072 ++read 2048/2048 bytes at offset 4297667072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297671168 ++read 2048/2048 bytes at offset 4297671168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297675264 ++read 2048/2048 bytes at offset 4297675264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297679360 ++read 2048/2048 bytes at offset 4297679360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297683456 ++read 2048/2048 bytes at offset 4297683456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687552 ++read 2048/2048 bytes at offset 4297687552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691648 ++read 2048/2048 bytes at offset 4297691648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695744 ++read 2048/2048 bytes at offset 4297695744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699840 ++read 2048/2048 bytes at offset 4297699840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703936 ++read 2048/2048 bytes at offset 4297703936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297708032 ++read 2048/2048 bytes at offset 4297708032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297712128 ++read 2048/2048 bytes at offset 4297712128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297716224 ++read 2048/2048 bytes at offset 4297716224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297720320 ++read 2048/2048 bytes at offset 4297720320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297724416 ++read 2048/2048 bytes at offset 4297724416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728512 ++read 2048/2048 bytes at offset 4297728512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732608 ++read 2048/2048 bytes at offset 4297732608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736704 ++read 2048/2048 bytes at offset 4297736704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740800 ++read 2048/2048 bytes at offset 4297740800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744896 ++read 2048/2048 bytes at offset 4297744896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748992 ++read 2048/2048 bytes at offset 4297748992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297753088 ++read 2048/2048 bytes at offset 4297753088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297757184 ++read 2048/2048 bytes at offset 4297757184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297761280 ++read 2048/2048 bytes at offset 4297761280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297765376 ++read 2048/2048 bytes at offset 4297765376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297769472 ++read 2048/2048 bytes at offset 4297769472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773568 ++read 2048/2048 bytes at offset 4297773568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777664 ++read 2048/2048 bytes at offset 4297777664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781760 ++read 2048/2048 bytes at offset 4297781760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785856 ++read 2048/2048 bytes at offset 4297785856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789952 ++read 2048/2048 bytes at offset 4297789952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297794048 ++read 2048/2048 bytes at offset 4297794048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297798144 ++read 2048/2048 bytes at offset 4297798144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297802240 ++read 2048/2048 bytes at offset 4297802240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297806336 ++read 2048/2048 bytes at offset 4297806336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297810432 ++read 2048/2048 bytes at offset 4297810432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814528 ++read 2048/2048 bytes at offset 4297814528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818624 ++read 2048/2048 bytes at offset 4297818624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822720 ++read 2048/2048 bytes at offset 4297822720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826816 ++read 2048/2048 bytes at offset 4297826816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830912 ++read 2048/2048 bytes at offset 4297830912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297835008 ++read 2048/2048 bytes at offset 4297835008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297839104 ++read 2048/2048 bytes at offset 4297839104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297843200 ++read 2048/2048 bytes at offset 4297843200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297847296 ++read 2048/2048 bytes at offset 4297847296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297851392 ++read 2048/2048 bytes at offset 4297851392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297855488 ++read 2048/2048 bytes at offset 4297855488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859584 ++read 2048/2048 bytes at offset 4297859584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863680 ++read 2048/2048 bytes at offset 4297863680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867776 ++read 2048/2048 bytes at offset 4297867776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871872 ++read 2048/2048 bytes at offset 4297871872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875968 ++read 2048/2048 bytes at offset 4297875968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297880064 ++read 2048/2048 bytes at offset 4297880064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297884160 ++read 2048/2048 bytes at offset 4297884160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297888256 ++read 2048/2048 bytes at offset 4297888256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297892352 ++read 2048/2048 bytes at offset 4297892352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297896448 ++read 2048/2048 bytes at offset 4297896448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900544 ++read 2048/2048 bytes at offset 4297900544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904640 ++read 2048/2048 bytes at offset 4297904640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908736 ++read 2048/2048 bytes at offset 4297908736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912832 ++read 2048/2048 bytes at offset 4297912832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916928 ++read 2048/2048 bytes at offset 4297916928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297921024 ++read 2048/2048 bytes at offset 4297921024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297925120 ++read 2048/2048 bytes at offset 4297925120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297929216 ++read 2048/2048 bytes at offset 4297929216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297933312 ++read 2048/2048 bytes at offset 4297933312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297937408 ++read 2048/2048 bytes at offset 4297937408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297941504 ++read 2048/2048 bytes at offset 4297941504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945600 ++read 2048/2048 bytes at offset 4297945600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949696 ++read 2048/2048 bytes at offset 4297949696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953792 ++read 2048/2048 bytes at offset 4297953792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957888 ++read 2048/2048 bytes at offset 4297957888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961984 ++read 2048/2048 bytes at offset 4297961984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297966080 ++read 2048/2048 bytes at offset 4297966080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297970176 ++read 2048/2048 bytes at offset 4297970176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297974272 ++read 2048/2048 bytes at offset 4297974272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297978368 ++read 2048/2048 bytes at offset 4297978368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297982464 ++read 2048/2048 bytes at offset 4297982464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986560 ++read 2048/2048 bytes at offset 4297986560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990656 ++read 2048/2048 bytes at offset 4297990656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994752 ++read 2048/2048 bytes at offset 4297994752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998848 ++read 2048/2048 bytes at offset 4297998848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002944 ++read 2048/2048 bytes at offset 4298002944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298007040 ++read 2048/2048 bytes at offset 4298007040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298011136 ++read 2048/2048 bytes at offset 4298011136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298015232 ++read 2048/2048 bytes at offset 4298015232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298019328 ++read 2048/2048 bytes at offset 4298019328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298023424 ++read 2048/2048 bytes at offset 4298023424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027520 ++read 2048/2048 bytes at offset 4298027520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031616 ++read 2048/2048 bytes at offset 4298031616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035712 ++read 2048/2048 bytes at offset 4298035712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039808 ++read 2048/2048 bytes at offset 4298039808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043904 ++read 2048/2048 bytes at offset 4298043904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298048000 ++read 2048/2048 bytes at offset 4298048000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298052096 ++read 2048/2048 bytes at offset 4298052096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298056192 ++read 2048/2048 bytes at offset 4298056192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298060288 ++read 2048/2048 bytes at offset 4298060288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298064384 ++read 2048/2048 bytes at offset 4298064384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298068480 ++read 2048/2048 bytes at offset 4298068480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072576 ++read 2048/2048 bytes at offset 4298072576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076672 ++read 2048/2048 bytes at offset 4298076672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080768 ++read 2048/2048 bytes at offset 4298080768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084864 ++read 2048/2048 bytes at offset 4298084864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088960 ++read 2048/2048 bytes at offset 4298088960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298093056 ++read 2048/2048 bytes at offset 4298093056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298097152 ++read 2048/2048 bytes at offset 4298097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298101248 ++read 2048/2048 bytes at offset 4298101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298105344 ++read 2048/2048 bytes at offset 4298105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298109440 ++read 2048/2048 bytes at offset 4298109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 3 +-qemu-io> read 2048/2048 bytes at offset 4298114560 ++=== IO: pattern 3 ++read 2048/2048 bytes at offset 4298114560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118656 ++read 2048/2048 bytes at offset 4298118656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122752 ++read 2048/2048 bytes at offset 4298122752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126848 ++read 2048/2048 bytes at offset 4298126848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130944 ++read 2048/2048 bytes at offset 4298130944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298135040 ++read 2048/2048 bytes at offset 4298135040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298139136 ++read 2048/2048 bytes at offset 4298139136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298143232 ++read 2048/2048 bytes at offset 4298143232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298147328 ++read 2048/2048 bytes at offset 4298147328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298151424 ++read 2048/2048 bytes at offset 4298151424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155520 ++read 2048/2048 bytes at offset 4298155520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159616 ++read 2048/2048 bytes at offset 4298159616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163712 ++read 2048/2048 bytes at offset 4298163712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167808 ++read 2048/2048 bytes at offset 4298167808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171904 ++read 2048/2048 bytes at offset 4298171904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298176000 ++read 2048/2048 bytes at offset 4298176000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298180096 ++read 2048/2048 bytes at offset 4298180096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298184192 ++read 2048/2048 bytes at offset 4298184192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298188288 ++read 2048/2048 bytes at offset 4298188288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298192384 ++read 2048/2048 bytes at offset 4298192384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298196480 ++read 2048/2048 bytes at offset 4298196480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200576 ++read 2048/2048 bytes at offset 4298200576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204672 ++read 2048/2048 bytes at offset 4298204672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208768 ++read 2048/2048 bytes at offset 4298208768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212864 ++read 2048/2048 bytes at offset 4298212864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216960 ++read 2048/2048 bytes at offset 4298216960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298221056 ++read 2048/2048 bytes at offset 4298221056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298225152 ++read 2048/2048 bytes at offset 4298225152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298229248 ++read 2048/2048 bytes at offset 4298229248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298233344 ++read 2048/2048 bytes at offset 4298233344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298237440 ++read 2048/2048 bytes at offset 4298237440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241536 ++read 2048/2048 bytes at offset 4298241536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245632 ++read 2048/2048 bytes at offset 4298245632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249728 ++read 2048/2048 bytes at offset 4298249728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253824 ++read 2048/2048 bytes at offset 4298253824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257920 ++read 2048/2048 bytes at offset 4298257920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298262016 ++read 2048/2048 bytes at offset 4298262016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298266112 ++read 2048/2048 bytes at offset 4298266112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298270208 ++read 2048/2048 bytes at offset 4298270208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298274304 ++read 2048/2048 bytes at offset 4298274304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298278400 ++read 2048/2048 bytes at offset 4298278400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298282496 ++read 2048/2048 bytes at offset 4298282496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286592 ++read 2048/2048 bytes at offset 4298286592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290688 ++read 2048/2048 bytes at offset 4298290688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294784 ++read 2048/2048 bytes at offset 4298294784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298880 ++read 2048/2048 bytes at offset 4298298880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302976 ++read 2048/2048 bytes at offset 4298302976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298307072 ++read 2048/2048 bytes at offset 4298307072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298311168 ++read 2048/2048 bytes at offset 4298311168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298315264 ++read 2048/2048 bytes at offset 4298315264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298319360 ++read 2048/2048 bytes at offset 4298319360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298323456 ++read 2048/2048 bytes at offset 4298323456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327552 ++read 2048/2048 bytes at offset 4298327552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331648 ++read 2048/2048 bytes at offset 4298331648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335744 ++read 2048/2048 bytes at offset 4298335744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339840 ++read 2048/2048 bytes at offset 4298339840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343936 ++read 2048/2048 bytes at offset 4298343936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298348032 ++read 2048/2048 bytes at offset 4298348032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298352128 ++read 2048/2048 bytes at offset 4298352128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298356224 ++read 2048/2048 bytes at offset 4298356224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298360320 ++read 2048/2048 bytes at offset 4298360320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298364416 ++read 2048/2048 bytes at offset 4298364416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368512 ++read 2048/2048 bytes at offset 4298368512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372608 ++read 2048/2048 bytes at offset 4298372608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376704 ++read 2048/2048 bytes at offset 4298376704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380800 ++read 2048/2048 bytes at offset 4298380800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384896 ++read 2048/2048 bytes at offset 4298384896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388992 ++read 2048/2048 bytes at offset 4298388992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298393088 ++read 2048/2048 bytes at offset 4298393088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298397184 ++read 2048/2048 bytes at offset 4298397184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298401280 ++read 2048/2048 bytes at offset 4298401280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298405376 ++read 2048/2048 bytes at offset 4298405376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298409472 ++read 2048/2048 bytes at offset 4298409472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413568 ++read 2048/2048 bytes at offset 4298413568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417664 ++read 2048/2048 bytes at offset 4298417664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421760 ++read 2048/2048 bytes at offset 4298421760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425856 ++read 2048/2048 bytes at offset 4298425856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429952 ++read 2048/2048 bytes at offset 4298429952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298434048 ++read 2048/2048 bytes at offset 4298434048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298438144 ++read 2048/2048 bytes at offset 4298438144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298442240 ++read 2048/2048 bytes at offset 4298442240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298446336 ++read 2048/2048 bytes at offset 4298446336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298450432 ++read 2048/2048 bytes at offset 4298450432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454528 ++read 2048/2048 bytes at offset 4298454528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458624 ++read 2048/2048 bytes at offset 4298458624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462720 ++read 2048/2048 bytes at offset 4298462720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466816 ++read 2048/2048 bytes at offset 4298466816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470912 ++read 2048/2048 bytes at offset 4298470912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298475008 ++read 2048/2048 bytes at offset 4298475008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298479104 ++read 2048/2048 bytes at offset 4298479104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298483200 ++read 2048/2048 bytes at offset 4298483200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298487296 ++read 2048/2048 bytes at offset 4298487296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298491392 ++read 2048/2048 bytes at offset 4298491392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298495488 ++read 2048/2048 bytes at offset 4298495488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499584 ++read 2048/2048 bytes at offset 4298499584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503680 ++read 2048/2048 bytes at offset 4298503680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507776 ++read 2048/2048 bytes at offset 4298507776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511872 ++read 2048/2048 bytes at offset 4298511872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515968 ++read 2048/2048 bytes at offset 4298515968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298520064 ++read 2048/2048 bytes at offset 4298520064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298524160 ++read 2048/2048 bytes at offset 4298524160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298528256 ++read 2048/2048 bytes at offset 4298528256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298532352 ++read 2048/2048 bytes at offset 4298532352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298536448 ++read 2048/2048 bytes at offset 4298536448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540544 ++read 2048/2048 bytes at offset 4298540544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544640 ++read 2048/2048 bytes at offset 4298544640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548736 ++read 2048/2048 bytes at offset 4298548736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552832 ++read 2048/2048 bytes at offset 4298552832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556928 ++read 2048/2048 bytes at offset 4298556928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298561024 ++read 2048/2048 bytes at offset 4298561024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298565120 ++read 2048/2048 bytes at offset 4298565120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298569216 ++read 2048/2048 bytes at offset 4298569216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298573312 ++read 2048/2048 bytes at offset 4298573312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298577408 ++read 2048/2048 bytes at offset 4298577408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298581504 ++read 2048/2048 bytes at offset 4298581504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585600 ++read 2048/2048 bytes at offset 4298585600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589696 ++read 2048/2048 bytes at offset 4298589696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593792 ++read 2048/2048 bytes at offset 4298593792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597888 ++read 2048/2048 bytes at offset 4298597888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601984 ++read 2048/2048 bytes at offset 4298601984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298606080 ++read 2048/2048 bytes at offset 4298606080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298610176 ++read 2048/2048 bytes at offset 4298610176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298614272 ++read 2048/2048 bytes at offset 4298614272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298618368 ++read 2048/2048 bytes at offset 4298618368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298622464 ++read 2048/2048 bytes at offset 4298622464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626560 ++read 2048/2048 bytes at offset 4298626560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630656 ++read 2048/2048 bytes at offset 4298630656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634752 ++read 2048/2048 bytes at offset 4298634752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638848 ++read 2048/2048 bytes at offset 4298638848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642944 ++read 2048/2048 bytes at offset 4298642944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298647040 ++read 2048/2048 bytes at offset 4298647040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298651136 ++read 2048/2048 bytes at offset 4298651136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298655232 ++read 2048/2048 bytes at offset 4298655232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298659328 ++read 2048/2048 bytes at offset 4298659328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298663424 ++read 2048/2048 bytes at offset 4298663424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667520 ++read 2048/2048 bytes at offset 4298667520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671616 ++read 2048/2048 bytes at offset 4298671616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675712 ++read 2048/2048 bytes at offset 4298675712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679808 ++read 2048/2048 bytes at offset 4298679808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683904 ++read 2048/2048 bytes at offset 4298683904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298688000 ++read 2048/2048 bytes at offset 4298688000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298692096 ++read 2048/2048 bytes at offset 4298692096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298696192 ++read 2048/2048 bytes at offset 4298696192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298700288 ++read 2048/2048 bytes at offset 4298700288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298704384 ++read 2048/2048 bytes at offset 4298704384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298708480 ++read 2048/2048 bytes at offset 4298708480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712576 ++read 2048/2048 bytes at offset 4298712576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716672 ++read 2048/2048 bytes at offset 4298716672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720768 ++read 2048/2048 bytes at offset 4298720768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724864 ++read 2048/2048 bytes at offset 4298724864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728960 ++read 2048/2048 bytes at offset 4298728960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298733056 ++read 2048/2048 bytes at offset 4298733056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298737152 ++read 2048/2048 bytes at offset 4298737152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298741248 ++read 2048/2048 bytes at offset 4298741248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298745344 ++read 2048/2048 bytes at offset 4298745344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298749440 ++read 2048/2048 bytes at offset 4298749440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753536 ++read 2048/2048 bytes at offset 4298753536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757632 ++read 2048/2048 bytes at offset 4298757632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761728 ++read 2048/2048 bytes at offset 4298761728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765824 ++read 2048/2048 bytes at offset 4298765824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769920 ++read 2048/2048 bytes at offset 4298769920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298774016 ++read 2048/2048 bytes at offset 4298774016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298778112 ++read 2048/2048 bytes at offset 4298778112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298782208 ++read 2048/2048 bytes at offset 4298782208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298786304 ++read 2048/2048 bytes at offset 4298786304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298790400 ++read 2048/2048 bytes at offset 4298790400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298794496 ++read 2048/2048 bytes at offset 4298794496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798592 ++read 2048/2048 bytes at offset 4298798592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802688 ++read 2048/2048 bytes at offset 4298802688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806784 ++read 2048/2048 bytes at offset 4298806784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810880 ++read 2048/2048 bytes at offset 4298810880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814976 ++read 2048/2048 bytes at offset 4298814976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298819072 ++read 2048/2048 bytes at offset 4298819072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298823168 ++read 2048/2048 bytes at offset 4298823168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298827264 ++read 2048/2048 bytes at offset 4298827264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298831360 ++read 2048/2048 bytes at offset 4298831360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298835456 ++read 2048/2048 bytes at offset 4298835456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839552 ++read 2048/2048 bytes at offset 4298839552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843648 ++read 2048/2048 bytes at offset 4298843648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847744 ++read 2048/2048 bytes at offset 4298847744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851840 ++read 2048/2048 bytes at offset 4298851840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855936 ++read 2048/2048 bytes at offset 4298855936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298860032 ++read 2048/2048 bytes at offset 4298860032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298864128 ++read 2048/2048 bytes at offset 4298864128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298868224 ++read 2048/2048 bytes at offset 4298868224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298872320 ++read 2048/2048 bytes at offset 4298872320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298876416 ++read 2048/2048 bytes at offset 4298876416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880512 ++read 2048/2048 bytes at offset 4298880512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884608 ++read 2048/2048 bytes at offset 4298884608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888704 ++read 2048/2048 bytes at offset 4298888704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892800 ++read 2048/2048 bytes at offset 4298892800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896896 ++read 2048/2048 bytes at offset 4298896896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900992 ++read 2048/2048 bytes at offset 4298900992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298905088 ++read 2048/2048 bytes at offset 4298905088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298909184 ++read 2048/2048 bytes at offset 4298909184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298913280 ++read 2048/2048 bytes at offset 4298913280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298917376 ++read 2048/2048 bytes at offset 4298917376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298921472 ++read 2048/2048 bytes at offset 4298921472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925568 ++read 2048/2048 bytes at offset 4298925568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929664 ++read 2048/2048 bytes at offset 4298929664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933760 ++read 2048/2048 bytes at offset 4298933760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937856 ++read 2048/2048 bytes at offset 4298937856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941952 ++read 2048/2048 bytes at offset 4298941952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298946048 ++read 2048/2048 bytes at offset 4298946048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298950144 ++read 2048/2048 bytes at offset 4298950144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298954240 ++read 2048/2048 bytes at offset 4298954240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298958336 ++read 2048/2048 bytes at offset 4298958336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298962432 ++read 2048/2048 bytes at offset 4298962432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966528 ++read 2048/2048 bytes at offset 4298966528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970624 ++read 2048/2048 bytes at offset 4298970624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974720 ++read 2048/2048 bytes at offset 4298974720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978816 ++read 2048/2048 bytes at offset 4298978816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982912 ++read 2048/2048 bytes at offset 4298982912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298987008 ++read 2048/2048 bytes at offset 4298987008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298991104 ++read 2048/2048 bytes at offset 4298991104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298995200 ++read 2048/2048 bytes at offset 4298995200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298999296 ++read 2048/2048 bytes at offset 4298999296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299003392 ++read 2048/2048 bytes at offset 4299003392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299007488 ++read 2048/2048 bytes at offset 4299007488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011584 ++read 2048/2048 bytes at offset 4299011584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015680 ++read 2048/2048 bytes at offset 4299015680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019776 ++read 2048/2048 bytes at offset 4299019776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023872 ++read 2048/2048 bytes at offset 4299023872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027968 ++read 2048/2048 bytes at offset 4299027968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299032064 ++read 2048/2048 bytes at offset 4299032064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299036160 ++read 2048/2048 bytes at offset 4299036160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299040256 ++read 2048/2048 bytes at offset 4299040256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299044352 ++read 2048/2048 bytes at offset 4299044352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299048448 ++read 2048/2048 bytes at offset 4299048448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052544 ++read 2048/2048 bytes at offset 4299052544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056640 ++read 2048/2048 bytes at offset 4299056640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060736 ++read 2048/2048 bytes at offset 4299060736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064832 ++read 2048/2048 bytes at offset 4299064832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068928 ++read 2048/2048 bytes at offset 4299068928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299073024 ++read 2048/2048 bytes at offset 4299073024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299077120 ++read 2048/2048 bytes at offset 4299077120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299081216 ++read 2048/2048 bytes at offset 4299081216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299085312 ++read 2048/2048 bytes at offset 4299085312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299089408 ++read 2048/2048 bytes at offset 4299089408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299093504 ++read 2048/2048 bytes at offset 4299093504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097600 ++read 2048/2048 bytes at offset 4299097600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101696 ++read 2048/2048 bytes at offset 4299101696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105792 ++read 2048/2048 bytes at offset 4299105792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109888 ++read 2048/2048 bytes at offset 4299109888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113984 ++read 2048/2048 bytes at offset 4299113984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299118080 ++read 2048/2048 bytes at offset 4299118080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299122176 ++read 2048/2048 bytes at offset 4299122176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299126272 ++read 2048/2048 bytes at offset 4299126272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299130368 ++read 2048/2048 bytes at offset 4299130368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299134464 ++read 2048/2048 bytes at offset 4299134464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138560 ++read 2048/2048 bytes at offset 4299138560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142656 ++read 2048/2048 bytes at offset 4299142656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146752 ++read 2048/2048 bytes at offset 4299146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150848 ++read 2048/2048 bytes at offset 4299150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154944 ++read 2048/2048 bytes at offset 4299154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299159040 ++read 2048/2048 bytes at offset 4299159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 5 +-qemu-io> read 8192/8192 bytes at offset 4299164160 ++=== IO: pattern 5 ++read 8192/8192 bytes at offset 4299164160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299176448 ++read 8192/8192 bytes at offset 4299176448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188736 ++read 8192/8192 bytes at offset 4299188736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299201024 ++read 8192/8192 bytes at offset 4299201024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299213312 ++read 8192/8192 bytes at offset 4299213312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225600 ++read 8192/8192 bytes at offset 4299225600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237888 ++read 8192/8192 bytes at offset 4299237888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299250176 ++read 8192/8192 bytes at offset 4299250176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299262464 ++read 8192/8192 bytes at offset 4299262464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274752 ++read 8192/8192 bytes at offset 4299274752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299287040 ++read 8192/8192 bytes at offset 4299287040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299299328 ++read 8192/8192 bytes at offset 4299299328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311616 ++read 8192/8192 bytes at offset 4299311616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323904 ++read 8192/8192 bytes at offset 4299323904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299336192 ++read 8192/8192 bytes at offset 4299336192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299348480 ++read 8192/8192 bytes at offset 4299348480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360768 ++read 8192/8192 bytes at offset 4299360768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299373056 ++read 8192/8192 bytes at offset 4299373056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299385344 ++read 8192/8192 bytes at offset 4299385344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397632 ++read 8192/8192 bytes at offset 4299397632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409920 ++read 8192/8192 bytes at offset 4299409920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299422208 ++read 8192/8192 bytes at offset 4299422208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299434496 ++read 8192/8192 bytes at offset 4299434496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446784 ++read 8192/8192 bytes at offset 4299446784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299459072 ++read 8192/8192 bytes at offset 4299459072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299471360 ++read 8192/8192 bytes at offset 4299471360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483648 ++read 8192/8192 bytes at offset 4299483648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495936 ++read 8192/8192 bytes at offset 4299495936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299508224 ++read 8192/8192 bytes at offset 4299508224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520512 ++read 8192/8192 bytes at offset 4299520512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532800 ++read 8192/8192 bytes at offset 4299532800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299545088 ++read 8192/8192 bytes at offset 4299545088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299557376 ++read 8192/8192 bytes at offset 4299557376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569664 ++read 8192/8192 bytes at offset 4299569664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581952 ++read 8192/8192 bytes at offset 4299581952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299594240 ++read 8192/8192 bytes at offset 4299594240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606528 ++read 8192/8192 bytes at offset 4299606528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618816 ++read 8192/8192 bytes at offset 4299618816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299631104 ++read 8192/8192 bytes at offset 4299631104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299643392 ++read 8192/8192 bytes at offset 4299643392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655680 ++read 8192/8192 bytes at offset 4299655680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667968 ++read 8192/8192 bytes at offset 4299667968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299680256 ++read 8192/8192 bytes at offset 4299680256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692544 ++read 8192/8192 bytes at offset 4299692544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704832 ++read 8192/8192 bytes at offset 4299704832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299717120 ++read 8192/8192 bytes at offset 4299717120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299729408 ++read 8192/8192 bytes at offset 4299729408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741696 ++read 8192/8192 bytes at offset 4299741696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753984 ++read 8192/8192 bytes at offset 4299753984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299766272 ++read 8192/8192 bytes at offset 4299766272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778560 ++read 8192/8192 bytes at offset 4299778560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790848 ++read 8192/8192 bytes at offset 4299790848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299803136 ++read 8192/8192 bytes at offset 4299803136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299815424 ++read 8192/8192 bytes at offset 4299815424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827712 ++read 8192/8192 bytes at offset 4299827712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299840000 ++read 8192/8192 bytes at offset 4299840000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299852288 ++read 8192/8192 bytes at offset 4299852288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864576 ++read 8192/8192 bytes at offset 4299864576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876864 ++read 8192/8192 bytes at offset 4299876864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299889152 ++read 8192/8192 bytes at offset 4299889152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299901440 ++read 8192/8192 bytes at offset 4299901440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913728 ++read 8192/8192 bytes at offset 4299913728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299926016 ++read 8192/8192 bytes at offset 4299926016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299938304 ++read 8192/8192 bytes at offset 4299938304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/014.out b/tests/qemu-iotests/014.out +index 0258d75..4744b4b 100644 +--- a/tests/qemu-iotests/014.out ++++ b/tests/qemu-iotests/014.out +@@ -4,64071 +4,64071 @@ Testing empty image: + test2: With offset 0 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1048576 ++wrote 4096/4096 bytes at offset 1048576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1085440 ++wrote 4096/4096 bytes at offset 1085440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1122304 ++wrote 4096/4096 bytes at offset 1122304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1159168 ++wrote 4096/4096 bytes at offset 1159168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1196032 ++wrote 4096/4096 bytes at offset 1196032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1232896 ++wrote 4096/4096 bytes at offset 1232896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1269760 ++wrote 4096/4096 bytes at offset 1269760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1306624 ++wrote 4096/4096 bytes at offset 1306624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1343488 ++wrote 4096/4096 bytes at offset 1343488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1380352 ++wrote 4096/4096 bytes at offset 1380352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1417216 ++wrote 4096/4096 bytes at offset 1417216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1454080 ++wrote 4096/4096 bytes at offset 1454080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1490944 ++wrote 4096/4096 bytes at offset 1490944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1527808 ++wrote 4096/4096 bytes at offset 1527808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1564672 ++wrote 4096/4096 bytes at offset 1564672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1601536 ++wrote 4096/4096 bytes at offset 1601536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1638400 ++wrote 4096/4096 bytes at offset 1638400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1675264 ++wrote 4096/4096 bytes at offset 1675264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1712128 ++wrote 4096/4096 bytes at offset 1712128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1748992 ++wrote 4096/4096 bytes at offset 1748992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1785856 ++wrote 4096/4096 bytes at offset 1785856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1822720 ++wrote 4096/4096 bytes at offset 1822720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1859584 ++wrote 4096/4096 bytes at offset 1859584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1896448 ++wrote 4096/4096 bytes at offset 1896448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1933312 ++wrote 4096/4096 bytes at offset 1933312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1970176 ++wrote 4096/4096 bytes at offset 1970176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2007040 ++wrote 4096/4096 bytes at offset 2007040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2043904 ++wrote 4096/4096 bytes at offset 2043904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2080768 ++wrote 4096/4096 bytes at offset 2080768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2117632 ++wrote 4096/4096 bytes at offset 2117632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2154496 ++wrote 4096/4096 bytes at offset 2154496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2191360 ++wrote 4096/4096 bytes at offset 2191360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2228224 ++wrote 4096/4096 bytes at offset 2228224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2265088 ++wrote 4096/4096 bytes at offset 2265088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2301952 ++wrote 4096/4096 bytes at offset 2301952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2338816 ++wrote 4096/4096 bytes at offset 2338816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2375680 ++wrote 4096/4096 bytes at offset 2375680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2412544 ++wrote 4096/4096 bytes at offset 2412544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2449408 ++wrote 4096/4096 bytes at offset 2449408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2486272 ++wrote 4096/4096 bytes at offset 2486272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2523136 ++wrote 4096/4096 bytes at offset 2523136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2560000 ++wrote 4096/4096 bytes at offset 2560000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2596864 ++wrote 4096/4096 bytes at offset 2596864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2633728 ++wrote 4096/4096 bytes at offset 2633728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2670592 ++wrote 4096/4096 bytes at offset 2670592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2707456 ++wrote 4096/4096 bytes at offset 2707456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2744320 ++wrote 4096/4096 bytes at offset 2744320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2781184 ++wrote 4096/4096 bytes at offset 2781184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2818048 ++wrote 4096/4096 bytes at offset 2818048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2854912 ++wrote 4096/4096 bytes at offset 2854912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2891776 ++wrote 4096/4096 bytes at offset 2891776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2928640 ++wrote 4096/4096 bytes at offset 2928640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2965504 ++wrote 4096/4096 bytes at offset 2965504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3002368 ++wrote 4096/4096 bytes at offset 3002368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3039232 ++wrote 4096/4096 bytes at offset 3039232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3076096 ++wrote 4096/4096 bytes at offset 3076096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3112960 ++wrote 4096/4096 bytes at offset 3112960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3149824 ++wrote 4096/4096 bytes at offset 3149824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3186688 ++wrote 4096/4096 bytes at offset 3186688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3223552 ++wrote 4096/4096 bytes at offset 3223552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3260416 ++wrote 4096/4096 bytes at offset 3260416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3297280 ++wrote 4096/4096 bytes at offset 3297280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3334144 ++wrote 4096/4096 bytes at offset 3334144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3371008 ++wrote 4096/4096 bytes at offset 3371008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3407872 ++wrote 4096/4096 bytes at offset 3407872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3444736 ++wrote 4096/4096 bytes at offset 3444736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3481600 ++wrote 4096/4096 bytes at offset 3481600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3518464 ++wrote 4096/4096 bytes at offset 3518464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3555328 ++wrote 4096/4096 bytes at offset 3555328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3592192 ++wrote 4096/4096 bytes at offset 3592192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3629056 ++wrote 4096/4096 bytes at offset 3629056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3665920 ++wrote 4096/4096 bytes at offset 3665920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3702784 ++wrote 4096/4096 bytes at offset 3702784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3739648 ++wrote 4096/4096 bytes at offset 3739648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3776512 ++wrote 4096/4096 bytes at offset 3776512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3813376 ++wrote 4096/4096 bytes at offset 3813376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3850240 ++wrote 4096/4096 bytes at offset 3850240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3887104 ++wrote 4096/4096 bytes at offset 3887104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3923968 ++wrote 4096/4096 bytes at offset 3923968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3960832 ++wrote 4096/4096 bytes at offset 3960832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3997696 ++wrote 4096/4096 bytes at offset 3997696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4034560 ++wrote 4096/4096 bytes at offset 4034560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4071424 ++wrote 4096/4096 bytes at offset 4071424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4108288 ++wrote 4096/4096 bytes at offset 4108288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4145152 ++wrote 4096/4096 bytes at offset 4145152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4182016 ++wrote 4096/4096 bytes at offset 4182016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4218880 ++wrote 4096/4096 bytes at offset 4218880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4255744 ++wrote 4096/4096 bytes at offset 4255744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4292608 ++wrote 4096/4096 bytes at offset 4292608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4329472 ++wrote 4096/4096 bytes at offset 4329472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4366336 ++wrote 4096/4096 bytes at offset 4366336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4403200 ++wrote 4096/4096 bytes at offset 4403200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4440064 ++wrote 4096/4096 bytes at offset 4440064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4476928 ++wrote 4096/4096 bytes at offset 4476928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4513792 ++wrote 4096/4096 bytes at offset 4513792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4550656 ++wrote 4096/4096 bytes at offset 4550656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4587520 ++wrote 4096/4096 bytes at offset 4587520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4624384 ++wrote 4096/4096 bytes at offset 4624384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4661248 ++wrote 4096/4096 bytes at offset 4661248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4698112 ++wrote 4096/4096 bytes at offset 4698112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4734976 ++wrote 4096/4096 bytes at offset 4734976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4771840 ++wrote 4096/4096 bytes at offset 4771840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4808704 ++wrote 4096/4096 bytes at offset 4808704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4845568 ++wrote 4096/4096 bytes at offset 4845568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4882432 ++wrote 4096/4096 bytes at offset 4882432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4919296 ++wrote 4096/4096 bytes at offset 4919296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4956160 ++wrote 4096/4096 bytes at offset 4956160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4993024 ++wrote 4096/4096 bytes at offset 4993024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5029888 ++wrote 4096/4096 bytes at offset 5029888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5066752 ++wrote 4096/4096 bytes at offset 5066752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5103616 ++wrote 4096/4096 bytes at offset 5103616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5140480 ++wrote 4096/4096 bytes at offset 5140480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5177344 ++wrote 4096/4096 bytes at offset 5177344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5214208 ++wrote 4096/4096 bytes at offset 5214208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5251072 ++wrote 4096/4096 bytes at offset 5251072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5287936 ++wrote 4096/4096 bytes at offset 5287936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5324800 ++wrote 4096/4096 bytes at offset 5324800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5361664 ++wrote 4096/4096 bytes at offset 5361664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5398528 ++wrote 4096/4096 bytes at offset 5398528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5435392 ++wrote 4096/4096 bytes at offset 5435392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5472256 ++wrote 4096/4096 bytes at offset 5472256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5509120 ++wrote 4096/4096 bytes at offset 5509120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5545984 ++wrote 4096/4096 bytes at offset 5545984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5582848 ++wrote 4096/4096 bytes at offset 5582848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5619712 ++wrote 4096/4096 bytes at offset 5619712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5656576 ++wrote 4096/4096 bytes at offset 5656576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5693440 ++wrote 4096/4096 bytes at offset 5693440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5730304 ++wrote 4096/4096 bytes at offset 5730304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5767168 ++wrote 4096/4096 bytes at offset 5767168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5804032 ++wrote 4096/4096 bytes at offset 5804032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5840896 ++wrote 4096/4096 bytes at offset 5840896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5877760 ++wrote 4096/4096 bytes at offset 5877760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5914624 ++wrote 4096/4096 bytes at offset 5914624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5951488 ++wrote 4096/4096 bytes at offset 5951488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5988352 ++wrote 4096/4096 bytes at offset 5988352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6025216 ++wrote 4096/4096 bytes at offset 6025216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6062080 ++wrote 4096/4096 bytes at offset 6062080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6098944 ++wrote 4096/4096 bytes at offset 6098944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6135808 ++wrote 4096/4096 bytes at offset 6135808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6172672 ++wrote 4096/4096 bytes at offset 6172672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6209536 ++wrote 4096/4096 bytes at offset 6209536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6246400 ++wrote 4096/4096 bytes at offset 6246400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6283264 ++wrote 4096/4096 bytes at offset 6283264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6320128 ++wrote 4096/4096 bytes at offset 6320128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6356992 ++wrote 4096/4096 bytes at offset 6356992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6393856 ++wrote 4096/4096 bytes at offset 6393856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6430720 ++wrote 4096/4096 bytes at offset 6430720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6467584 ++wrote 4096/4096 bytes at offset 6467584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6504448 ++wrote 4096/4096 bytes at offset 6504448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6541312 ++wrote 4096/4096 bytes at offset 6541312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6578176 ++wrote 4096/4096 bytes at offset 6578176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6615040 ++wrote 4096/4096 bytes at offset 6615040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6651904 ++wrote 4096/4096 bytes at offset 6651904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6688768 ++wrote 4096/4096 bytes at offset 6688768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6725632 ++wrote 4096/4096 bytes at offset 6725632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6762496 ++wrote 4096/4096 bytes at offset 6762496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6799360 ++wrote 4096/4096 bytes at offset 6799360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6836224 ++wrote 4096/4096 bytes at offset 6836224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6873088 ++wrote 4096/4096 bytes at offset 6873088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6909952 ++wrote 4096/4096 bytes at offset 6909952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6946816 ++wrote 4096/4096 bytes at offset 6946816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6983680 ++wrote 4096/4096 bytes at offset 6983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7020544 ++wrote 4096/4096 bytes at offset 7020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7057408 ++wrote 4096/4096 bytes at offset 7057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7094272 ++wrote 4096/4096 bytes at offset 7094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7131136 ++wrote 4096/4096 bytes at offset 7131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7168000 ++wrote 4096/4096 bytes at offset 7168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7204864 ++wrote 4096/4096 bytes at offset 7204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7241728 ++wrote 4096/4096 bytes at offset 7241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7278592 ++wrote 4096/4096 bytes at offset 7278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7315456 ++wrote 4096/4096 bytes at offset 7315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7352320 ++wrote 4096/4096 bytes at offset 7352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7389184 ++wrote 4096/4096 bytes at offset 7389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7426048 ++wrote 4096/4096 bytes at offset 7426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7462912 ++wrote 4096/4096 bytes at offset 7462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7499776 ++wrote 4096/4096 bytes at offset 7499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7536640 ++wrote 4096/4096 bytes at offset 7536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7573504 ++wrote 4096/4096 bytes at offset 7573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7610368 ++wrote 4096/4096 bytes at offset 7610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7647232 ++wrote 4096/4096 bytes at offset 7647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7684096 ++wrote 4096/4096 bytes at offset 7684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7720960 ++wrote 4096/4096 bytes at offset 7720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7757824 ++wrote 4096/4096 bytes at offset 7757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7794688 ++wrote 4096/4096 bytes at offset 7794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7831552 ++wrote 4096/4096 bytes at offset 7831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7868416 ++wrote 4096/4096 bytes at offset 7868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7905280 ++wrote 4096/4096 bytes at offset 7905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7942144 ++wrote 4096/4096 bytes at offset 7942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7979008 ++wrote 4096/4096 bytes at offset 7979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8015872 ++wrote 4096/4096 bytes at offset 8015872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8052736 ++wrote 4096/4096 bytes at offset 8052736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8089600 ++wrote 4096/4096 bytes at offset 8089600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8126464 ++wrote 4096/4096 bytes at offset 8126464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8163328 ++wrote 4096/4096 bytes at offset 8163328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8200192 ++wrote 4096/4096 bytes at offset 8200192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8237056 ++wrote 4096/4096 bytes at offset 8237056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8273920 ++wrote 4096/4096 bytes at offset 8273920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8310784 ++wrote 4096/4096 bytes at offset 8310784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8347648 ++wrote 4096/4096 bytes at offset 8347648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8384512 ++wrote 4096/4096 bytes at offset 8384512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8421376 ++wrote 4096/4096 bytes at offset 8421376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8458240 ++wrote 4096/4096 bytes at offset 8458240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8495104 ++wrote 4096/4096 bytes at offset 8495104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8531968 ++wrote 4096/4096 bytes at offset 8531968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8568832 ++wrote 4096/4096 bytes at offset 8568832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8605696 ++wrote 4096/4096 bytes at offset 8605696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8642560 ++wrote 4096/4096 bytes at offset 8642560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8679424 ++wrote 4096/4096 bytes at offset 8679424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8716288 ++wrote 4096/4096 bytes at offset 8716288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8753152 ++wrote 4096/4096 bytes at offset 8753152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8790016 ++wrote 4096/4096 bytes at offset 8790016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8826880 ++wrote 4096/4096 bytes at offset 8826880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8863744 ++wrote 4096/4096 bytes at offset 8863744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8900608 ++wrote 4096/4096 bytes at offset 8900608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8937472 ++wrote 4096/4096 bytes at offset 8937472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8974336 ++wrote 4096/4096 bytes at offset 8974336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9011200 ++wrote 4096/4096 bytes at offset 9011200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9048064 ++wrote 4096/4096 bytes at offset 9048064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9084928 ++wrote 4096/4096 bytes at offset 9084928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9121792 ++wrote 4096/4096 bytes at offset 9121792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9158656 ++wrote 4096/4096 bytes at offset 9158656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9195520 ++wrote 4096/4096 bytes at offset 9195520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9232384 ++wrote 4096/4096 bytes at offset 9232384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9269248 ++wrote 4096/4096 bytes at offset 9269248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9306112 ++wrote 4096/4096 bytes at offset 9306112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9342976 ++wrote 4096/4096 bytes at offset 9342976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9379840 ++wrote 4096/4096 bytes at offset 9379840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9416704 ++wrote 4096/4096 bytes at offset 9416704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1052672 ++wrote 4096/4096 bytes at offset 1052672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1089536 ++wrote 4096/4096 bytes at offset 1089536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1126400 ++wrote 4096/4096 bytes at offset 1126400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1163264 ++wrote 4096/4096 bytes at offset 1163264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1200128 ++wrote 4096/4096 bytes at offset 1200128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1236992 ++wrote 4096/4096 bytes at offset 1236992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1273856 ++wrote 4096/4096 bytes at offset 1273856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1310720 ++wrote 4096/4096 bytes at offset 1310720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1347584 ++wrote 4096/4096 bytes at offset 1347584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1384448 ++wrote 4096/4096 bytes at offset 1384448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1421312 ++wrote 4096/4096 bytes at offset 1421312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1458176 ++wrote 4096/4096 bytes at offset 1458176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1495040 ++wrote 4096/4096 bytes at offset 1495040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1531904 ++wrote 4096/4096 bytes at offset 1531904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1568768 ++wrote 4096/4096 bytes at offset 1568768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1605632 ++wrote 4096/4096 bytes at offset 1605632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1642496 ++wrote 4096/4096 bytes at offset 1642496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1679360 ++wrote 4096/4096 bytes at offset 1679360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1716224 ++wrote 4096/4096 bytes at offset 1716224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1753088 ++wrote 4096/4096 bytes at offset 1753088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1789952 ++wrote 4096/4096 bytes at offset 1789952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1826816 ++wrote 4096/4096 bytes at offset 1826816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1863680 ++wrote 4096/4096 bytes at offset 1863680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1900544 ++wrote 4096/4096 bytes at offset 1900544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1937408 ++wrote 4096/4096 bytes at offset 1937408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1974272 ++wrote 4096/4096 bytes at offset 1974272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2011136 ++wrote 4096/4096 bytes at offset 2011136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2048000 ++wrote 4096/4096 bytes at offset 2048000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2084864 ++wrote 4096/4096 bytes at offset 2084864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2121728 ++wrote 4096/4096 bytes at offset 2121728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2158592 ++wrote 4096/4096 bytes at offset 2158592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2195456 ++wrote 4096/4096 bytes at offset 2195456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2232320 ++wrote 4096/4096 bytes at offset 2232320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2269184 ++wrote 4096/4096 bytes at offset 2269184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2306048 ++wrote 4096/4096 bytes at offset 2306048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2342912 ++wrote 4096/4096 bytes at offset 2342912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2379776 ++wrote 4096/4096 bytes at offset 2379776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2416640 ++wrote 4096/4096 bytes at offset 2416640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2453504 ++wrote 4096/4096 bytes at offset 2453504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2490368 ++wrote 4096/4096 bytes at offset 2490368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2527232 ++wrote 4096/4096 bytes at offset 2527232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2564096 ++wrote 4096/4096 bytes at offset 2564096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2600960 ++wrote 4096/4096 bytes at offset 2600960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2637824 ++wrote 4096/4096 bytes at offset 2637824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2674688 ++wrote 4096/4096 bytes at offset 2674688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2711552 ++wrote 4096/4096 bytes at offset 2711552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2748416 ++wrote 4096/4096 bytes at offset 2748416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2785280 ++wrote 4096/4096 bytes at offset 2785280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2822144 ++wrote 4096/4096 bytes at offset 2822144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2859008 ++wrote 4096/4096 bytes at offset 2859008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2895872 ++wrote 4096/4096 bytes at offset 2895872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2932736 ++wrote 4096/4096 bytes at offset 2932736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2969600 ++wrote 4096/4096 bytes at offset 2969600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3006464 ++wrote 4096/4096 bytes at offset 3006464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3043328 ++wrote 4096/4096 bytes at offset 3043328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3080192 ++wrote 4096/4096 bytes at offset 3080192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3117056 ++wrote 4096/4096 bytes at offset 3117056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3153920 ++wrote 4096/4096 bytes at offset 3153920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3190784 ++wrote 4096/4096 bytes at offset 3190784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3227648 ++wrote 4096/4096 bytes at offset 3227648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3264512 ++wrote 4096/4096 bytes at offset 3264512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3301376 ++wrote 4096/4096 bytes at offset 3301376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3338240 ++wrote 4096/4096 bytes at offset 3338240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3375104 ++wrote 4096/4096 bytes at offset 3375104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3411968 ++wrote 4096/4096 bytes at offset 3411968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3448832 ++wrote 4096/4096 bytes at offset 3448832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3485696 ++wrote 4096/4096 bytes at offset 3485696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3522560 ++wrote 4096/4096 bytes at offset 3522560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3559424 ++wrote 4096/4096 bytes at offset 3559424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3596288 ++wrote 4096/4096 bytes at offset 3596288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3633152 ++wrote 4096/4096 bytes at offset 3633152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3670016 ++wrote 4096/4096 bytes at offset 3670016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3706880 ++wrote 4096/4096 bytes at offset 3706880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3743744 ++wrote 4096/4096 bytes at offset 3743744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3780608 ++wrote 4096/4096 bytes at offset 3780608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3817472 ++wrote 4096/4096 bytes at offset 3817472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3854336 ++wrote 4096/4096 bytes at offset 3854336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3891200 ++wrote 4096/4096 bytes at offset 3891200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3928064 ++wrote 4096/4096 bytes at offset 3928064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3964928 ++wrote 4096/4096 bytes at offset 3964928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4001792 ++wrote 4096/4096 bytes at offset 4001792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4038656 ++wrote 4096/4096 bytes at offset 4038656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4075520 ++wrote 4096/4096 bytes at offset 4075520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4112384 ++wrote 4096/4096 bytes at offset 4112384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4149248 ++wrote 4096/4096 bytes at offset 4149248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4186112 ++wrote 4096/4096 bytes at offset 4186112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4222976 ++wrote 4096/4096 bytes at offset 4222976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4259840 ++wrote 4096/4096 bytes at offset 4259840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296704 ++wrote 4096/4096 bytes at offset 4296704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4333568 ++wrote 4096/4096 bytes at offset 4333568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4370432 ++wrote 4096/4096 bytes at offset 4370432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4407296 ++wrote 4096/4096 bytes at offset 4407296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4444160 ++wrote 4096/4096 bytes at offset 4444160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4481024 ++wrote 4096/4096 bytes at offset 4481024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4517888 ++wrote 4096/4096 bytes at offset 4517888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4554752 ++wrote 4096/4096 bytes at offset 4554752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4591616 ++wrote 4096/4096 bytes at offset 4591616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4628480 ++wrote 4096/4096 bytes at offset 4628480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4665344 ++wrote 4096/4096 bytes at offset 4665344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4702208 ++wrote 4096/4096 bytes at offset 4702208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4739072 ++wrote 4096/4096 bytes at offset 4739072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4775936 ++wrote 4096/4096 bytes at offset 4775936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4812800 ++wrote 4096/4096 bytes at offset 4812800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4849664 ++wrote 4096/4096 bytes at offset 4849664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4886528 ++wrote 4096/4096 bytes at offset 4886528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4923392 ++wrote 4096/4096 bytes at offset 4923392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4960256 ++wrote 4096/4096 bytes at offset 4960256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4997120 ++wrote 4096/4096 bytes at offset 4997120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5033984 ++wrote 4096/4096 bytes at offset 5033984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5070848 ++wrote 4096/4096 bytes at offset 5070848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5107712 ++wrote 4096/4096 bytes at offset 5107712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5144576 ++wrote 4096/4096 bytes at offset 5144576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5181440 ++wrote 4096/4096 bytes at offset 5181440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5218304 ++wrote 4096/4096 bytes at offset 5218304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5255168 ++wrote 4096/4096 bytes at offset 5255168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5292032 ++wrote 4096/4096 bytes at offset 5292032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5328896 ++wrote 4096/4096 bytes at offset 5328896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5365760 ++wrote 4096/4096 bytes at offset 5365760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5402624 ++wrote 4096/4096 bytes at offset 5402624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5439488 ++wrote 4096/4096 bytes at offset 5439488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5476352 ++wrote 4096/4096 bytes at offset 5476352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5513216 ++wrote 4096/4096 bytes at offset 5513216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5550080 ++wrote 4096/4096 bytes at offset 5550080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5586944 ++wrote 4096/4096 bytes at offset 5586944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5623808 ++wrote 4096/4096 bytes at offset 5623808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5660672 ++wrote 4096/4096 bytes at offset 5660672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5697536 ++wrote 4096/4096 bytes at offset 5697536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5734400 ++wrote 4096/4096 bytes at offset 5734400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5771264 ++wrote 4096/4096 bytes at offset 5771264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5808128 ++wrote 4096/4096 bytes at offset 5808128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5844992 ++wrote 4096/4096 bytes at offset 5844992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5881856 ++wrote 4096/4096 bytes at offset 5881856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5918720 ++wrote 4096/4096 bytes at offset 5918720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5955584 ++wrote 4096/4096 bytes at offset 5955584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5992448 ++wrote 4096/4096 bytes at offset 5992448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6029312 ++wrote 4096/4096 bytes at offset 6029312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6066176 ++wrote 4096/4096 bytes at offset 6066176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6103040 ++wrote 4096/4096 bytes at offset 6103040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6139904 ++wrote 4096/4096 bytes at offset 6139904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6176768 ++wrote 4096/4096 bytes at offset 6176768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6213632 ++wrote 4096/4096 bytes at offset 6213632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6250496 ++wrote 4096/4096 bytes at offset 6250496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6287360 ++wrote 4096/4096 bytes at offset 6287360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6324224 ++wrote 4096/4096 bytes at offset 6324224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6361088 ++wrote 4096/4096 bytes at offset 6361088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6397952 ++wrote 4096/4096 bytes at offset 6397952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6434816 ++wrote 4096/4096 bytes at offset 6434816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6471680 ++wrote 4096/4096 bytes at offset 6471680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6508544 ++wrote 4096/4096 bytes at offset 6508544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6545408 ++wrote 4096/4096 bytes at offset 6545408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6582272 ++wrote 4096/4096 bytes at offset 6582272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6619136 ++wrote 4096/4096 bytes at offset 6619136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6656000 ++wrote 4096/4096 bytes at offset 6656000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6692864 ++wrote 4096/4096 bytes at offset 6692864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6729728 ++wrote 4096/4096 bytes at offset 6729728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6766592 ++wrote 4096/4096 bytes at offset 6766592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6803456 ++wrote 4096/4096 bytes at offset 6803456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6840320 ++wrote 4096/4096 bytes at offset 6840320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6877184 ++wrote 4096/4096 bytes at offset 6877184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6914048 ++wrote 4096/4096 bytes at offset 6914048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6950912 ++wrote 4096/4096 bytes at offset 6950912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6987776 ++wrote 4096/4096 bytes at offset 6987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7024640 ++wrote 4096/4096 bytes at offset 7024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7061504 ++wrote 4096/4096 bytes at offset 7061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7098368 ++wrote 4096/4096 bytes at offset 7098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7135232 ++wrote 4096/4096 bytes at offset 7135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7172096 ++wrote 4096/4096 bytes at offset 7172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7208960 ++wrote 4096/4096 bytes at offset 7208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7245824 ++wrote 4096/4096 bytes at offset 7245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7282688 ++wrote 4096/4096 bytes at offset 7282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7319552 ++wrote 4096/4096 bytes at offset 7319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7356416 ++wrote 4096/4096 bytes at offset 7356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7393280 ++wrote 4096/4096 bytes at offset 7393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7430144 ++wrote 4096/4096 bytes at offset 7430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7467008 ++wrote 4096/4096 bytes at offset 7467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7503872 ++wrote 4096/4096 bytes at offset 7503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7540736 ++wrote 4096/4096 bytes at offset 7540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7577600 ++wrote 4096/4096 bytes at offset 7577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7614464 ++wrote 4096/4096 bytes at offset 7614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7651328 ++wrote 4096/4096 bytes at offset 7651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7688192 ++wrote 4096/4096 bytes at offset 7688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7725056 ++wrote 4096/4096 bytes at offset 7725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7761920 ++wrote 4096/4096 bytes at offset 7761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7798784 ++wrote 4096/4096 bytes at offset 7798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7835648 ++wrote 4096/4096 bytes at offset 7835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7872512 ++wrote 4096/4096 bytes at offset 7872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7909376 ++wrote 4096/4096 bytes at offset 7909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7946240 ++wrote 4096/4096 bytes at offset 7946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7983104 ++wrote 4096/4096 bytes at offset 7983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8019968 ++wrote 4096/4096 bytes at offset 8019968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8056832 ++wrote 4096/4096 bytes at offset 8056832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8093696 ++wrote 4096/4096 bytes at offset 8093696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8130560 ++wrote 4096/4096 bytes at offset 8130560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8167424 ++wrote 4096/4096 bytes at offset 8167424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8204288 ++wrote 4096/4096 bytes at offset 8204288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8241152 ++wrote 4096/4096 bytes at offset 8241152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8278016 ++wrote 4096/4096 bytes at offset 8278016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8314880 ++wrote 4096/4096 bytes at offset 8314880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8351744 ++wrote 4096/4096 bytes at offset 8351744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8388608 ++wrote 4096/4096 bytes at offset 8388608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8425472 ++wrote 4096/4096 bytes at offset 8425472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8462336 ++wrote 4096/4096 bytes at offset 8462336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8499200 ++wrote 4096/4096 bytes at offset 8499200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8536064 ++wrote 4096/4096 bytes at offset 8536064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8572928 ++wrote 4096/4096 bytes at offset 8572928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8609792 ++wrote 4096/4096 bytes at offset 8609792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8646656 ++wrote 4096/4096 bytes at offset 8646656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8683520 ++wrote 4096/4096 bytes at offset 8683520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8720384 ++wrote 4096/4096 bytes at offset 8720384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8757248 ++wrote 4096/4096 bytes at offset 8757248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8794112 ++wrote 4096/4096 bytes at offset 8794112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8830976 ++wrote 4096/4096 bytes at offset 8830976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8867840 ++wrote 4096/4096 bytes at offset 8867840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8904704 ++wrote 4096/4096 bytes at offset 8904704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8941568 ++wrote 4096/4096 bytes at offset 8941568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8978432 ++wrote 4096/4096 bytes at offset 8978432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9015296 ++wrote 4096/4096 bytes at offset 9015296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9052160 ++wrote 4096/4096 bytes at offset 9052160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9089024 ++wrote 4096/4096 bytes at offset 9089024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9125888 ++wrote 4096/4096 bytes at offset 9125888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9162752 ++wrote 4096/4096 bytes at offset 9162752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9199616 ++wrote 4096/4096 bytes at offset 9199616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9236480 ++wrote 4096/4096 bytes at offset 9236480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9273344 ++wrote 4096/4096 bytes at offset 9273344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9310208 ++wrote 4096/4096 bytes at offset 9310208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9347072 ++wrote 4096/4096 bytes at offset 9347072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9383936 ++wrote 4096/4096 bytes at offset 9383936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9420800 ++wrote 4096/4096 bytes at offset 9420800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1064960 ++wrote 4096/4096 bytes at offset 1064960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1101824 ++wrote 4096/4096 bytes at offset 1101824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1138688 ++wrote 4096/4096 bytes at offset 1138688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1175552 ++wrote 4096/4096 bytes at offset 1175552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1212416 ++wrote 4096/4096 bytes at offset 1212416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1249280 ++wrote 4096/4096 bytes at offset 1249280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1286144 ++wrote 4096/4096 bytes at offset 1286144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1323008 ++wrote 4096/4096 bytes at offset 1323008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1359872 ++wrote 4096/4096 bytes at offset 1359872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1396736 ++wrote 4096/4096 bytes at offset 1396736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1433600 ++wrote 4096/4096 bytes at offset 1433600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1470464 ++wrote 4096/4096 bytes at offset 1470464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1507328 ++wrote 4096/4096 bytes at offset 1507328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1544192 ++wrote 4096/4096 bytes at offset 1544192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1581056 ++wrote 4096/4096 bytes at offset 1581056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1617920 ++wrote 4096/4096 bytes at offset 1617920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1654784 ++wrote 4096/4096 bytes at offset 1654784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1691648 ++wrote 4096/4096 bytes at offset 1691648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1728512 ++wrote 4096/4096 bytes at offset 1728512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1765376 ++wrote 4096/4096 bytes at offset 1765376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1802240 ++wrote 4096/4096 bytes at offset 1802240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1839104 ++wrote 4096/4096 bytes at offset 1839104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1875968 ++wrote 4096/4096 bytes at offset 1875968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1912832 ++wrote 4096/4096 bytes at offset 1912832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1949696 ++wrote 4096/4096 bytes at offset 1949696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1986560 ++wrote 4096/4096 bytes at offset 1986560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2023424 ++wrote 4096/4096 bytes at offset 2023424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2060288 ++wrote 4096/4096 bytes at offset 2060288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2097152 ++wrote 4096/4096 bytes at offset 2097152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2134016 ++wrote 4096/4096 bytes at offset 2134016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2170880 ++wrote 4096/4096 bytes at offset 2170880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2207744 ++wrote 4096/4096 bytes at offset 2207744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2244608 ++wrote 4096/4096 bytes at offset 2244608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2281472 ++wrote 4096/4096 bytes at offset 2281472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2318336 ++wrote 4096/4096 bytes at offset 2318336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2355200 ++wrote 4096/4096 bytes at offset 2355200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2392064 ++wrote 4096/4096 bytes at offset 2392064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2428928 ++wrote 4096/4096 bytes at offset 2428928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2465792 ++wrote 4096/4096 bytes at offset 2465792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2502656 ++wrote 4096/4096 bytes at offset 2502656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2539520 ++wrote 4096/4096 bytes at offset 2539520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2576384 ++wrote 4096/4096 bytes at offset 2576384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2613248 ++wrote 4096/4096 bytes at offset 2613248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2650112 ++wrote 4096/4096 bytes at offset 2650112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2686976 ++wrote 4096/4096 bytes at offset 2686976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2723840 ++wrote 4096/4096 bytes at offset 2723840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2760704 ++wrote 4096/4096 bytes at offset 2760704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2797568 ++wrote 4096/4096 bytes at offset 2797568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2834432 ++wrote 4096/4096 bytes at offset 2834432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2871296 ++wrote 4096/4096 bytes at offset 2871296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2908160 ++wrote 4096/4096 bytes at offset 2908160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2945024 ++wrote 4096/4096 bytes at offset 2945024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2981888 ++wrote 4096/4096 bytes at offset 2981888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3018752 ++wrote 4096/4096 bytes at offset 3018752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3055616 ++wrote 4096/4096 bytes at offset 3055616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3092480 ++wrote 4096/4096 bytes at offset 3092480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3129344 ++wrote 4096/4096 bytes at offset 3129344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3166208 ++wrote 4096/4096 bytes at offset 3166208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3203072 ++wrote 4096/4096 bytes at offset 3203072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3239936 ++wrote 4096/4096 bytes at offset 3239936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3276800 ++wrote 4096/4096 bytes at offset 3276800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3313664 ++wrote 4096/4096 bytes at offset 3313664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3350528 ++wrote 4096/4096 bytes at offset 3350528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3387392 ++wrote 4096/4096 bytes at offset 3387392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3424256 ++wrote 4096/4096 bytes at offset 3424256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3461120 ++wrote 4096/4096 bytes at offset 3461120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3497984 ++wrote 4096/4096 bytes at offset 3497984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3534848 ++wrote 4096/4096 bytes at offset 3534848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3571712 ++wrote 4096/4096 bytes at offset 3571712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3608576 ++wrote 4096/4096 bytes at offset 3608576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3645440 ++wrote 4096/4096 bytes at offset 3645440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3682304 ++wrote 4096/4096 bytes at offset 3682304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3719168 ++wrote 4096/4096 bytes at offset 3719168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3756032 ++wrote 4096/4096 bytes at offset 3756032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3792896 ++wrote 4096/4096 bytes at offset 3792896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3829760 ++wrote 4096/4096 bytes at offset 3829760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3866624 ++wrote 4096/4096 bytes at offset 3866624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3903488 ++wrote 4096/4096 bytes at offset 3903488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3940352 ++wrote 4096/4096 bytes at offset 3940352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3977216 ++wrote 4096/4096 bytes at offset 3977216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4014080 ++wrote 4096/4096 bytes at offset 4014080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4050944 ++wrote 4096/4096 bytes at offset 4050944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4087808 ++wrote 4096/4096 bytes at offset 4087808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4124672 ++wrote 4096/4096 bytes at offset 4124672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4161536 ++wrote 4096/4096 bytes at offset 4161536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4198400 ++wrote 4096/4096 bytes at offset 4198400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4235264 ++wrote 4096/4096 bytes at offset 4235264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4272128 ++wrote 4096/4096 bytes at offset 4272128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4308992 ++wrote 4096/4096 bytes at offset 4308992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4345856 ++wrote 4096/4096 bytes at offset 4345856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4382720 ++wrote 4096/4096 bytes at offset 4382720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4419584 ++wrote 4096/4096 bytes at offset 4419584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4456448 ++wrote 4096/4096 bytes at offset 4456448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4493312 ++wrote 4096/4096 bytes at offset 4493312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4530176 ++wrote 4096/4096 bytes at offset 4530176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4567040 ++wrote 4096/4096 bytes at offset 4567040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4603904 ++wrote 4096/4096 bytes at offset 4603904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4640768 ++wrote 4096/4096 bytes at offset 4640768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4677632 ++wrote 4096/4096 bytes at offset 4677632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4714496 ++wrote 4096/4096 bytes at offset 4714496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4751360 ++wrote 4096/4096 bytes at offset 4751360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4788224 ++wrote 4096/4096 bytes at offset 4788224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4825088 ++wrote 4096/4096 bytes at offset 4825088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4861952 ++wrote 4096/4096 bytes at offset 4861952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4898816 ++wrote 4096/4096 bytes at offset 4898816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4935680 ++wrote 4096/4096 bytes at offset 4935680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4972544 ++wrote 4096/4096 bytes at offset 4972544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5009408 ++wrote 4096/4096 bytes at offset 5009408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5046272 ++wrote 4096/4096 bytes at offset 5046272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5083136 ++wrote 4096/4096 bytes at offset 5083136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5120000 ++wrote 4096/4096 bytes at offset 5120000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5156864 ++wrote 4096/4096 bytes at offset 5156864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5193728 ++wrote 4096/4096 bytes at offset 5193728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5230592 ++wrote 4096/4096 bytes at offset 5230592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5267456 ++wrote 4096/4096 bytes at offset 5267456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5304320 ++wrote 4096/4096 bytes at offset 5304320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5341184 ++wrote 4096/4096 bytes at offset 5341184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5378048 ++wrote 4096/4096 bytes at offset 5378048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5414912 ++wrote 4096/4096 bytes at offset 5414912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5451776 ++wrote 4096/4096 bytes at offset 5451776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5488640 ++wrote 4096/4096 bytes at offset 5488640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5525504 ++wrote 4096/4096 bytes at offset 5525504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5562368 ++wrote 4096/4096 bytes at offset 5562368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5599232 ++wrote 4096/4096 bytes at offset 5599232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5636096 ++wrote 4096/4096 bytes at offset 5636096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5672960 ++wrote 4096/4096 bytes at offset 5672960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5709824 ++wrote 4096/4096 bytes at offset 5709824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5746688 ++wrote 4096/4096 bytes at offset 5746688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5783552 ++wrote 4096/4096 bytes at offset 5783552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5820416 ++wrote 4096/4096 bytes at offset 5820416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5857280 ++wrote 4096/4096 bytes at offset 5857280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5894144 ++wrote 4096/4096 bytes at offset 5894144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5931008 ++wrote 4096/4096 bytes at offset 5931008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5967872 ++wrote 4096/4096 bytes at offset 5967872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6004736 ++wrote 4096/4096 bytes at offset 6004736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6041600 ++wrote 4096/4096 bytes at offset 6041600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6078464 ++wrote 4096/4096 bytes at offset 6078464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6115328 ++wrote 4096/4096 bytes at offset 6115328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6152192 ++wrote 4096/4096 bytes at offset 6152192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6189056 ++wrote 4096/4096 bytes at offset 6189056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6225920 ++wrote 4096/4096 bytes at offset 6225920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6262784 ++wrote 4096/4096 bytes at offset 6262784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6299648 ++wrote 4096/4096 bytes at offset 6299648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6336512 ++wrote 4096/4096 bytes at offset 6336512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6373376 ++wrote 4096/4096 bytes at offset 6373376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6410240 ++wrote 4096/4096 bytes at offset 6410240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6447104 ++wrote 4096/4096 bytes at offset 6447104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6483968 ++wrote 4096/4096 bytes at offset 6483968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6520832 ++wrote 4096/4096 bytes at offset 6520832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6557696 ++wrote 4096/4096 bytes at offset 6557696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6594560 ++wrote 4096/4096 bytes at offset 6594560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6631424 ++wrote 4096/4096 bytes at offset 6631424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6668288 ++wrote 4096/4096 bytes at offset 6668288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6705152 ++wrote 4096/4096 bytes at offset 6705152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6742016 ++wrote 4096/4096 bytes at offset 6742016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6778880 ++wrote 4096/4096 bytes at offset 6778880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6815744 ++wrote 4096/4096 bytes at offset 6815744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6852608 ++wrote 4096/4096 bytes at offset 6852608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6889472 ++wrote 4096/4096 bytes at offset 6889472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6926336 ++wrote 4096/4096 bytes at offset 6926336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6963200 ++wrote 4096/4096 bytes at offset 6963200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7000064 ++wrote 4096/4096 bytes at offset 7000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7036928 ++wrote 4096/4096 bytes at offset 7036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7073792 ++wrote 4096/4096 bytes at offset 7073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7110656 ++wrote 4096/4096 bytes at offset 7110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7147520 ++wrote 4096/4096 bytes at offset 7147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7184384 ++wrote 4096/4096 bytes at offset 7184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7221248 ++wrote 4096/4096 bytes at offset 7221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7258112 ++wrote 4096/4096 bytes at offset 7258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7294976 ++wrote 4096/4096 bytes at offset 7294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7331840 ++wrote 4096/4096 bytes at offset 7331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7368704 ++wrote 4096/4096 bytes at offset 7368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7405568 ++wrote 4096/4096 bytes at offset 7405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7442432 ++wrote 4096/4096 bytes at offset 7442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7479296 ++wrote 4096/4096 bytes at offset 7479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7516160 ++wrote 4096/4096 bytes at offset 7516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7553024 ++wrote 4096/4096 bytes at offset 7553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7589888 ++wrote 4096/4096 bytes at offset 7589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7626752 ++wrote 4096/4096 bytes at offset 7626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7663616 ++wrote 4096/4096 bytes at offset 7663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7700480 ++wrote 4096/4096 bytes at offset 7700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7737344 ++wrote 4096/4096 bytes at offset 7737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7774208 ++wrote 4096/4096 bytes at offset 7774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7811072 ++wrote 4096/4096 bytes at offset 7811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7847936 ++wrote 4096/4096 bytes at offset 7847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7884800 ++wrote 4096/4096 bytes at offset 7884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7921664 ++wrote 4096/4096 bytes at offset 7921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7958528 ++wrote 4096/4096 bytes at offset 7958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7995392 ++wrote 4096/4096 bytes at offset 7995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8032256 ++wrote 4096/4096 bytes at offset 8032256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8069120 ++wrote 4096/4096 bytes at offset 8069120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8105984 ++wrote 4096/4096 bytes at offset 8105984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8142848 ++wrote 4096/4096 bytes at offset 8142848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8179712 ++wrote 4096/4096 bytes at offset 8179712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8216576 ++wrote 4096/4096 bytes at offset 8216576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8253440 ++wrote 4096/4096 bytes at offset 8253440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8290304 ++wrote 4096/4096 bytes at offset 8290304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8327168 ++wrote 4096/4096 bytes at offset 8327168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8364032 ++wrote 4096/4096 bytes at offset 8364032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8400896 ++wrote 4096/4096 bytes at offset 8400896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8437760 ++wrote 4096/4096 bytes at offset 8437760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8474624 ++wrote 4096/4096 bytes at offset 8474624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8511488 ++wrote 4096/4096 bytes at offset 8511488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8548352 ++wrote 4096/4096 bytes at offset 8548352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8585216 ++wrote 4096/4096 bytes at offset 8585216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8622080 ++wrote 4096/4096 bytes at offset 8622080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8658944 ++wrote 4096/4096 bytes at offset 8658944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8695808 ++wrote 4096/4096 bytes at offset 8695808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8732672 ++wrote 4096/4096 bytes at offset 8732672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8769536 ++wrote 4096/4096 bytes at offset 8769536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8806400 ++wrote 4096/4096 bytes at offset 8806400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8843264 ++wrote 4096/4096 bytes at offset 8843264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8880128 ++wrote 4096/4096 bytes at offset 8880128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8916992 ++wrote 4096/4096 bytes at offset 8916992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8953856 ++wrote 4096/4096 bytes at offset 8953856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8990720 ++wrote 4096/4096 bytes at offset 8990720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9027584 ++wrote 4096/4096 bytes at offset 9027584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9064448 ++wrote 4096/4096 bytes at offset 9064448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9101312 ++wrote 4096/4096 bytes at offset 9101312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9138176 ++wrote 4096/4096 bytes at offset 9138176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9175040 ++wrote 4096/4096 bytes at offset 9175040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9211904 ++wrote 4096/4096 bytes at offset 9211904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9248768 ++wrote 4096/4096 bytes at offset 9248768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9285632 ++wrote 4096/4096 bytes at offset 9285632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9322496 ++wrote 4096/4096 bytes at offset 9322496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9359360 ++wrote 4096/4096 bytes at offset 9359360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9396224 ++wrote 4096/4096 bytes at offset 9396224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9433088 ++wrote 4096/4096 bytes at offset 9433088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1069056 ++wrote 4096/4096 bytes at offset 1069056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1105920 ++wrote 4096/4096 bytes at offset 1105920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1142784 ++wrote 4096/4096 bytes at offset 1142784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1179648 ++wrote 4096/4096 bytes at offset 1179648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1216512 ++wrote 4096/4096 bytes at offset 1216512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1253376 ++wrote 4096/4096 bytes at offset 1253376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1290240 ++wrote 4096/4096 bytes at offset 1290240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1327104 ++wrote 4096/4096 bytes at offset 1327104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1363968 ++wrote 4096/4096 bytes at offset 1363968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1400832 ++wrote 4096/4096 bytes at offset 1400832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1437696 ++wrote 4096/4096 bytes at offset 1437696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1474560 ++wrote 4096/4096 bytes at offset 1474560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1511424 ++wrote 4096/4096 bytes at offset 1511424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1548288 ++wrote 4096/4096 bytes at offset 1548288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1585152 ++wrote 4096/4096 bytes at offset 1585152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1622016 ++wrote 4096/4096 bytes at offset 1622016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1658880 ++wrote 4096/4096 bytes at offset 1658880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1695744 ++wrote 4096/4096 bytes at offset 1695744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1732608 ++wrote 4096/4096 bytes at offset 1732608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1769472 ++wrote 4096/4096 bytes at offset 1769472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1806336 ++wrote 4096/4096 bytes at offset 1806336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1843200 ++wrote 4096/4096 bytes at offset 1843200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1880064 ++wrote 4096/4096 bytes at offset 1880064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1916928 ++wrote 4096/4096 bytes at offset 1916928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1953792 ++wrote 4096/4096 bytes at offset 1953792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1990656 ++wrote 4096/4096 bytes at offset 1990656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2027520 ++wrote 4096/4096 bytes at offset 2027520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2064384 ++wrote 4096/4096 bytes at offset 2064384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2101248 ++wrote 4096/4096 bytes at offset 2101248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2138112 ++wrote 4096/4096 bytes at offset 2138112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2174976 ++wrote 4096/4096 bytes at offset 2174976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2211840 ++wrote 4096/4096 bytes at offset 2211840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2248704 ++wrote 4096/4096 bytes at offset 2248704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2285568 ++wrote 4096/4096 bytes at offset 2285568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2322432 ++wrote 4096/4096 bytes at offset 2322432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2359296 ++wrote 4096/4096 bytes at offset 2359296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2396160 ++wrote 4096/4096 bytes at offset 2396160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2433024 ++wrote 4096/4096 bytes at offset 2433024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2469888 ++wrote 4096/4096 bytes at offset 2469888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2506752 ++wrote 4096/4096 bytes at offset 2506752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2543616 ++wrote 4096/4096 bytes at offset 2543616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2580480 ++wrote 4096/4096 bytes at offset 2580480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2617344 ++wrote 4096/4096 bytes at offset 2617344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2654208 ++wrote 4096/4096 bytes at offset 2654208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2691072 ++wrote 4096/4096 bytes at offset 2691072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2727936 ++wrote 4096/4096 bytes at offset 2727936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2764800 ++wrote 4096/4096 bytes at offset 2764800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2801664 ++wrote 4096/4096 bytes at offset 2801664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2838528 ++wrote 4096/4096 bytes at offset 2838528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2875392 ++wrote 4096/4096 bytes at offset 2875392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2912256 ++wrote 4096/4096 bytes at offset 2912256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2949120 ++wrote 4096/4096 bytes at offset 2949120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2985984 ++wrote 4096/4096 bytes at offset 2985984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3022848 ++wrote 4096/4096 bytes at offset 3022848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3059712 ++wrote 4096/4096 bytes at offset 3059712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3096576 ++wrote 4096/4096 bytes at offset 3096576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3133440 ++wrote 4096/4096 bytes at offset 3133440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3170304 ++wrote 4096/4096 bytes at offset 3170304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3207168 ++wrote 4096/4096 bytes at offset 3207168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3244032 ++wrote 4096/4096 bytes at offset 3244032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3280896 ++wrote 4096/4096 bytes at offset 3280896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3317760 ++wrote 4096/4096 bytes at offset 3317760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3354624 ++wrote 4096/4096 bytes at offset 3354624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3391488 ++wrote 4096/4096 bytes at offset 3391488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3428352 ++wrote 4096/4096 bytes at offset 3428352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3465216 ++wrote 4096/4096 bytes at offset 3465216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3502080 ++wrote 4096/4096 bytes at offset 3502080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3538944 ++wrote 4096/4096 bytes at offset 3538944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3575808 ++wrote 4096/4096 bytes at offset 3575808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3612672 ++wrote 4096/4096 bytes at offset 3612672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3649536 ++wrote 4096/4096 bytes at offset 3649536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3686400 ++wrote 4096/4096 bytes at offset 3686400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3723264 ++wrote 4096/4096 bytes at offset 3723264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3760128 ++wrote 4096/4096 bytes at offset 3760128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3796992 ++wrote 4096/4096 bytes at offset 3796992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3833856 ++wrote 4096/4096 bytes at offset 3833856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3870720 ++wrote 4096/4096 bytes at offset 3870720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3907584 ++wrote 4096/4096 bytes at offset 3907584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3944448 ++wrote 4096/4096 bytes at offset 3944448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3981312 ++wrote 4096/4096 bytes at offset 3981312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4018176 ++wrote 4096/4096 bytes at offset 4018176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4055040 ++wrote 4096/4096 bytes at offset 4055040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4091904 ++wrote 4096/4096 bytes at offset 4091904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4128768 ++wrote 4096/4096 bytes at offset 4128768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4165632 ++wrote 4096/4096 bytes at offset 4165632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4202496 ++wrote 4096/4096 bytes at offset 4202496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4239360 ++wrote 4096/4096 bytes at offset 4239360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4276224 ++wrote 4096/4096 bytes at offset 4276224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4313088 ++wrote 4096/4096 bytes at offset 4313088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4349952 ++wrote 4096/4096 bytes at offset 4349952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4386816 ++wrote 4096/4096 bytes at offset 4386816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4423680 ++wrote 4096/4096 bytes at offset 4423680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4460544 ++wrote 4096/4096 bytes at offset 4460544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4497408 ++wrote 4096/4096 bytes at offset 4497408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4534272 ++wrote 4096/4096 bytes at offset 4534272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4571136 ++wrote 4096/4096 bytes at offset 4571136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4608000 ++wrote 4096/4096 bytes at offset 4608000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4644864 ++wrote 4096/4096 bytes at offset 4644864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4681728 ++wrote 4096/4096 bytes at offset 4681728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4718592 ++wrote 4096/4096 bytes at offset 4718592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4755456 ++wrote 4096/4096 bytes at offset 4755456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4792320 ++wrote 4096/4096 bytes at offset 4792320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4829184 ++wrote 4096/4096 bytes at offset 4829184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4866048 ++wrote 4096/4096 bytes at offset 4866048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4902912 ++wrote 4096/4096 bytes at offset 4902912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4939776 ++wrote 4096/4096 bytes at offset 4939776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4976640 ++wrote 4096/4096 bytes at offset 4976640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5013504 ++wrote 4096/4096 bytes at offset 5013504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5050368 ++wrote 4096/4096 bytes at offset 5050368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5087232 ++wrote 4096/4096 bytes at offset 5087232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5124096 ++wrote 4096/4096 bytes at offset 5124096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5160960 ++wrote 4096/4096 bytes at offset 5160960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5197824 ++wrote 4096/4096 bytes at offset 5197824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5234688 ++wrote 4096/4096 bytes at offset 5234688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5271552 ++wrote 4096/4096 bytes at offset 5271552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5308416 ++wrote 4096/4096 bytes at offset 5308416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5345280 ++wrote 4096/4096 bytes at offset 5345280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5382144 ++wrote 4096/4096 bytes at offset 5382144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5419008 ++wrote 4096/4096 bytes at offset 5419008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5455872 ++wrote 4096/4096 bytes at offset 5455872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5492736 ++wrote 4096/4096 bytes at offset 5492736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5529600 ++wrote 4096/4096 bytes at offset 5529600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5566464 ++wrote 4096/4096 bytes at offset 5566464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5603328 ++wrote 4096/4096 bytes at offset 5603328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5640192 ++wrote 4096/4096 bytes at offset 5640192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5677056 ++wrote 4096/4096 bytes at offset 5677056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5713920 ++wrote 4096/4096 bytes at offset 5713920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5750784 ++wrote 4096/4096 bytes at offset 5750784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5787648 ++wrote 4096/4096 bytes at offset 5787648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5824512 ++wrote 4096/4096 bytes at offset 5824512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5861376 ++wrote 4096/4096 bytes at offset 5861376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5898240 ++wrote 4096/4096 bytes at offset 5898240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5935104 ++wrote 4096/4096 bytes at offset 5935104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5971968 ++wrote 4096/4096 bytes at offset 5971968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6008832 ++wrote 4096/4096 bytes at offset 6008832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6045696 ++wrote 4096/4096 bytes at offset 6045696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6082560 ++wrote 4096/4096 bytes at offset 6082560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6119424 ++wrote 4096/4096 bytes at offset 6119424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6156288 ++wrote 4096/4096 bytes at offset 6156288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6193152 ++wrote 4096/4096 bytes at offset 6193152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6230016 ++wrote 4096/4096 bytes at offset 6230016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6266880 ++wrote 4096/4096 bytes at offset 6266880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6303744 ++wrote 4096/4096 bytes at offset 6303744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6340608 ++wrote 4096/4096 bytes at offset 6340608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6377472 ++wrote 4096/4096 bytes at offset 6377472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6414336 ++wrote 4096/4096 bytes at offset 6414336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6451200 ++wrote 4096/4096 bytes at offset 6451200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6488064 ++wrote 4096/4096 bytes at offset 6488064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6524928 ++wrote 4096/4096 bytes at offset 6524928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6561792 ++wrote 4096/4096 bytes at offset 6561792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6598656 ++wrote 4096/4096 bytes at offset 6598656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6635520 ++wrote 4096/4096 bytes at offset 6635520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6672384 ++wrote 4096/4096 bytes at offset 6672384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6709248 ++wrote 4096/4096 bytes at offset 6709248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6746112 ++wrote 4096/4096 bytes at offset 6746112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6782976 ++wrote 4096/4096 bytes at offset 6782976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6819840 ++wrote 4096/4096 bytes at offset 6819840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6856704 ++wrote 4096/4096 bytes at offset 6856704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6893568 ++wrote 4096/4096 bytes at offset 6893568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6930432 ++wrote 4096/4096 bytes at offset 6930432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6967296 ++wrote 4096/4096 bytes at offset 6967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7004160 ++wrote 4096/4096 bytes at offset 7004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7041024 ++wrote 4096/4096 bytes at offset 7041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7077888 ++wrote 4096/4096 bytes at offset 7077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7114752 ++wrote 4096/4096 bytes at offset 7114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7151616 ++wrote 4096/4096 bytes at offset 7151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7188480 ++wrote 4096/4096 bytes at offset 7188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7225344 ++wrote 4096/4096 bytes at offset 7225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7262208 ++wrote 4096/4096 bytes at offset 7262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7299072 ++wrote 4096/4096 bytes at offset 7299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7335936 ++wrote 4096/4096 bytes at offset 7335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7372800 ++wrote 4096/4096 bytes at offset 7372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7409664 ++wrote 4096/4096 bytes at offset 7409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7446528 ++wrote 4096/4096 bytes at offset 7446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7483392 ++wrote 4096/4096 bytes at offset 7483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7520256 ++wrote 4096/4096 bytes at offset 7520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7557120 ++wrote 4096/4096 bytes at offset 7557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7593984 ++wrote 4096/4096 bytes at offset 7593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7630848 ++wrote 4096/4096 bytes at offset 7630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7667712 ++wrote 4096/4096 bytes at offset 7667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7704576 ++wrote 4096/4096 bytes at offset 7704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7741440 ++wrote 4096/4096 bytes at offset 7741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7778304 ++wrote 4096/4096 bytes at offset 7778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7815168 ++wrote 4096/4096 bytes at offset 7815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7852032 ++wrote 4096/4096 bytes at offset 7852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7888896 ++wrote 4096/4096 bytes at offset 7888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7925760 ++wrote 4096/4096 bytes at offset 7925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7962624 ++wrote 4096/4096 bytes at offset 7962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7999488 ++wrote 4096/4096 bytes at offset 7999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8036352 ++wrote 4096/4096 bytes at offset 8036352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8073216 ++wrote 4096/4096 bytes at offset 8073216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8110080 ++wrote 4096/4096 bytes at offset 8110080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8146944 ++wrote 4096/4096 bytes at offset 8146944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8183808 ++wrote 4096/4096 bytes at offset 8183808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8220672 ++wrote 4096/4096 bytes at offset 8220672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8257536 ++wrote 4096/4096 bytes at offset 8257536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8294400 ++wrote 4096/4096 bytes at offset 8294400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8331264 ++wrote 4096/4096 bytes at offset 8331264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8368128 ++wrote 4096/4096 bytes at offset 8368128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8404992 ++wrote 4096/4096 bytes at offset 8404992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8441856 ++wrote 4096/4096 bytes at offset 8441856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8478720 ++wrote 4096/4096 bytes at offset 8478720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8515584 ++wrote 4096/4096 bytes at offset 8515584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8552448 ++wrote 4096/4096 bytes at offset 8552448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8589312 ++wrote 4096/4096 bytes at offset 8589312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8626176 ++wrote 4096/4096 bytes at offset 8626176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8663040 ++wrote 4096/4096 bytes at offset 8663040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8699904 ++wrote 4096/4096 bytes at offset 8699904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8736768 ++wrote 4096/4096 bytes at offset 8736768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8773632 ++wrote 4096/4096 bytes at offset 8773632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8810496 ++wrote 4096/4096 bytes at offset 8810496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8847360 ++wrote 4096/4096 bytes at offset 8847360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8884224 ++wrote 4096/4096 bytes at offset 8884224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8921088 ++wrote 4096/4096 bytes at offset 8921088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8957952 ++wrote 4096/4096 bytes at offset 8957952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8994816 ++wrote 4096/4096 bytes at offset 8994816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9031680 ++wrote 4096/4096 bytes at offset 9031680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9068544 ++wrote 4096/4096 bytes at offset 9068544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9105408 ++wrote 4096/4096 bytes at offset 9105408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9142272 ++wrote 4096/4096 bytes at offset 9142272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9179136 ++wrote 4096/4096 bytes at offset 9179136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9216000 ++wrote 4096/4096 bytes at offset 9216000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9252864 ++wrote 4096/4096 bytes at offset 9252864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9289728 ++wrote 4096/4096 bytes at offset 9289728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9326592 ++wrote 4096/4096 bytes at offset 9326592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9363456 ++wrote 4096/4096 bytes at offset 9363456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9400320 ++wrote 4096/4096 bytes at offset 9400320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1073152 ++wrote 4096/4096 bytes at offset 1073152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1110016 ++wrote 4096/4096 bytes at offset 1110016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1146880 ++wrote 4096/4096 bytes at offset 1146880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1183744 ++wrote 4096/4096 bytes at offset 1183744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1220608 ++wrote 4096/4096 bytes at offset 1220608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1257472 ++wrote 4096/4096 bytes at offset 1257472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1294336 ++wrote 4096/4096 bytes at offset 1294336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1331200 ++wrote 4096/4096 bytes at offset 1331200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1368064 ++wrote 4096/4096 bytes at offset 1368064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1404928 ++wrote 4096/4096 bytes at offset 1404928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1441792 ++wrote 4096/4096 bytes at offset 1441792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1478656 ++wrote 4096/4096 bytes at offset 1478656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1515520 ++wrote 4096/4096 bytes at offset 1515520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1552384 ++wrote 4096/4096 bytes at offset 1552384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1589248 ++wrote 4096/4096 bytes at offset 1589248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1626112 ++wrote 4096/4096 bytes at offset 1626112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1662976 ++wrote 4096/4096 bytes at offset 1662976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1699840 ++wrote 4096/4096 bytes at offset 1699840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1736704 ++wrote 4096/4096 bytes at offset 1736704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1773568 ++wrote 4096/4096 bytes at offset 1773568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1810432 ++wrote 4096/4096 bytes at offset 1810432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1847296 ++wrote 4096/4096 bytes at offset 1847296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1884160 ++wrote 4096/4096 bytes at offset 1884160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1921024 ++wrote 4096/4096 bytes at offset 1921024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1957888 ++wrote 4096/4096 bytes at offset 1957888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1994752 ++wrote 4096/4096 bytes at offset 1994752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2031616 ++wrote 4096/4096 bytes at offset 2031616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2068480 ++wrote 4096/4096 bytes at offset 2068480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2105344 ++wrote 4096/4096 bytes at offset 2105344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2142208 ++wrote 4096/4096 bytes at offset 2142208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2179072 ++wrote 4096/4096 bytes at offset 2179072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2215936 ++wrote 4096/4096 bytes at offset 2215936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2252800 ++wrote 4096/4096 bytes at offset 2252800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2289664 ++wrote 4096/4096 bytes at offset 2289664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2326528 ++wrote 4096/4096 bytes at offset 2326528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2363392 ++wrote 4096/4096 bytes at offset 2363392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2400256 ++wrote 4096/4096 bytes at offset 2400256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2437120 ++wrote 4096/4096 bytes at offset 2437120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2473984 ++wrote 4096/4096 bytes at offset 2473984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2510848 ++wrote 4096/4096 bytes at offset 2510848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2547712 ++wrote 4096/4096 bytes at offset 2547712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2584576 ++wrote 4096/4096 bytes at offset 2584576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2621440 ++wrote 4096/4096 bytes at offset 2621440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2658304 ++wrote 4096/4096 bytes at offset 2658304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2695168 ++wrote 4096/4096 bytes at offset 2695168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2732032 ++wrote 4096/4096 bytes at offset 2732032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2768896 ++wrote 4096/4096 bytes at offset 2768896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2805760 ++wrote 4096/4096 bytes at offset 2805760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2842624 ++wrote 4096/4096 bytes at offset 2842624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2879488 ++wrote 4096/4096 bytes at offset 2879488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2916352 ++wrote 4096/4096 bytes at offset 2916352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2953216 ++wrote 4096/4096 bytes at offset 2953216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2990080 ++wrote 4096/4096 bytes at offset 2990080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3026944 ++wrote 4096/4096 bytes at offset 3026944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3063808 ++wrote 4096/4096 bytes at offset 3063808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3100672 ++wrote 4096/4096 bytes at offset 3100672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3137536 ++wrote 4096/4096 bytes at offset 3137536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3174400 ++wrote 4096/4096 bytes at offset 3174400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3211264 ++wrote 4096/4096 bytes at offset 3211264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3248128 ++wrote 4096/4096 bytes at offset 3248128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3284992 ++wrote 4096/4096 bytes at offset 3284992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3321856 ++wrote 4096/4096 bytes at offset 3321856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3358720 ++wrote 4096/4096 bytes at offset 3358720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3395584 ++wrote 4096/4096 bytes at offset 3395584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3432448 ++wrote 4096/4096 bytes at offset 3432448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3469312 ++wrote 4096/4096 bytes at offset 3469312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3506176 ++wrote 4096/4096 bytes at offset 3506176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3543040 ++wrote 4096/4096 bytes at offset 3543040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3579904 ++wrote 4096/4096 bytes at offset 3579904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3616768 ++wrote 4096/4096 bytes at offset 3616768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3653632 ++wrote 4096/4096 bytes at offset 3653632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3690496 ++wrote 4096/4096 bytes at offset 3690496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3727360 ++wrote 4096/4096 bytes at offset 3727360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3764224 ++wrote 4096/4096 bytes at offset 3764224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3801088 ++wrote 4096/4096 bytes at offset 3801088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3837952 ++wrote 4096/4096 bytes at offset 3837952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3874816 ++wrote 4096/4096 bytes at offset 3874816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3911680 ++wrote 4096/4096 bytes at offset 3911680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3948544 ++wrote 4096/4096 bytes at offset 3948544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3985408 ++wrote 4096/4096 bytes at offset 3985408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4022272 ++wrote 4096/4096 bytes at offset 4022272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4059136 ++wrote 4096/4096 bytes at offset 4059136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096000 ++wrote 4096/4096 bytes at offset 4096000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4132864 ++wrote 4096/4096 bytes at offset 4132864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4169728 ++wrote 4096/4096 bytes at offset 4169728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4206592 ++wrote 4096/4096 bytes at offset 4206592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4243456 ++wrote 4096/4096 bytes at offset 4243456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4280320 ++wrote 4096/4096 bytes at offset 4280320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4317184 ++wrote 4096/4096 bytes at offset 4317184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4354048 ++wrote 4096/4096 bytes at offset 4354048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4390912 ++wrote 4096/4096 bytes at offset 4390912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4427776 ++wrote 4096/4096 bytes at offset 4427776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4464640 ++wrote 4096/4096 bytes at offset 4464640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4501504 ++wrote 4096/4096 bytes at offset 4501504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4538368 ++wrote 4096/4096 bytes at offset 4538368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4575232 ++wrote 4096/4096 bytes at offset 4575232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4612096 ++wrote 4096/4096 bytes at offset 4612096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4648960 ++wrote 4096/4096 bytes at offset 4648960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4685824 ++wrote 4096/4096 bytes at offset 4685824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4722688 ++wrote 4096/4096 bytes at offset 4722688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4759552 ++wrote 4096/4096 bytes at offset 4759552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4796416 ++wrote 4096/4096 bytes at offset 4796416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4833280 ++wrote 4096/4096 bytes at offset 4833280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4870144 ++wrote 4096/4096 bytes at offset 4870144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4907008 ++wrote 4096/4096 bytes at offset 4907008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4943872 ++wrote 4096/4096 bytes at offset 4943872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4980736 ++wrote 4096/4096 bytes at offset 4980736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5017600 ++wrote 4096/4096 bytes at offset 5017600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5054464 ++wrote 4096/4096 bytes at offset 5054464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5091328 ++wrote 4096/4096 bytes at offset 5091328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5128192 ++wrote 4096/4096 bytes at offset 5128192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5165056 ++wrote 4096/4096 bytes at offset 5165056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5201920 ++wrote 4096/4096 bytes at offset 5201920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5238784 ++wrote 4096/4096 bytes at offset 5238784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5275648 ++wrote 4096/4096 bytes at offset 5275648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5312512 ++wrote 4096/4096 bytes at offset 5312512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5349376 ++wrote 4096/4096 bytes at offset 5349376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5386240 ++wrote 4096/4096 bytes at offset 5386240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5423104 ++wrote 4096/4096 bytes at offset 5423104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5459968 ++wrote 4096/4096 bytes at offset 5459968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5496832 ++wrote 4096/4096 bytes at offset 5496832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5533696 ++wrote 4096/4096 bytes at offset 5533696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5570560 ++wrote 4096/4096 bytes at offset 5570560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5607424 ++wrote 4096/4096 bytes at offset 5607424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5644288 ++wrote 4096/4096 bytes at offset 5644288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5681152 ++wrote 4096/4096 bytes at offset 5681152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5718016 ++wrote 4096/4096 bytes at offset 5718016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5754880 ++wrote 4096/4096 bytes at offset 5754880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5791744 ++wrote 4096/4096 bytes at offset 5791744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5828608 ++wrote 4096/4096 bytes at offset 5828608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5865472 ++wrote 4096/4096 bytes at offset 5865472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5902336 ++wrote 4096/4096 bytes at offset 5902336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5939200 ++wrote 4096/4096 bytes at offset 5939200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5976064 ++wrote 4096/4096 bytes at offset 5976064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6012928 ++wrote 4096/4096 bytes at offset 6012928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6049792 ++wrote 4096/4096 bytes at offset 6049792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6086656 ++wrote 4096/4096 bytes at offset 6086656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6123520 ++wrote 4096/4096 bytes at offset 6123520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6160384 ++wrote 4096/4096 bytes at offset 6160384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6197248 ++wrote 4096/4096 bytes at offset 6197248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6234112 ++wrote 4096/4096 bytes at offset 6234112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6270976 ++wrote 4096/4096 bytes at offset 6270976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6307840 ++wrote 4096/4096 bytes at offset 6307840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6344704 ++wrote 4096/4096 bytes at offset 6344704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6381568 ++wrote 4096/4096 bytes at offset 6381568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6418432 ++wrote 4096/4096 bytes at offset 6418432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6455296 ++wrote 4096/4096 bytes at offset 6455296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6492160 ++wrote 4096/4096 bytes at offset 6492160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6529024 ++wrote 4096/4096 bytes at offset 6529024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6565888 ++wrote 4096/4096 bytes at offset 6565888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6602752 ++wrote 4096/4096 bytes at offset 6602752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6639616 ++wrote 4096/4096 bytes at offset 6639616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6676480 ++wrote 4096/4096 bytes at offset 6676480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6713344 ++wrote 4096/4096 bytes at offset 6713344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6750208 ++wrote 4096/4096 bytes at offset 6750208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6787072 ++wrote 4096/4096 bytes at offset 6787072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6823936 ++wrote 4096/4096 bytes at offset 6823936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6860800 ++wrote 4096/4096 bytes at offset 6860800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6897664 ++wrote 4096/4096 bytes at offset 6897664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6934528 ++wrote 4096/4096 bytes at offset 6934528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6971392 ++wrote 4096/4096 bytes at offset 6971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7008256 ++wrote 4096/4096 bytes at offset 7008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7045120 ++wrote 4096/4096 bytes at offset 7045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7081984 ++wrote 4096/4096 bytes at offset 7081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7118848 ++wrote 4096/4096 bytes at offset 7118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7155712 ++wrote 4096/4096 bytes at offset 7155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7192576 ++wrote 4096/4096 bytes at offset 7192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7229440 ++wrote 4096/4096 bytes at offset 7229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7266304 ++wrote 4096/4096 bytes at offset 7266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7303168 ++wrote 4096/4096 bytes at offset 7303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7340032 ++wrote 4096/4096 bytes at offset 7340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7376896 ++wrote 4096/4096 bytes at offset 7376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7413760 ++wrote 4096/4096 bytes at offset 7413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7450624 ++wrote 4096/4096 bytes at offset 7450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7487488 ++wrote 4096/4096 bytes at offset 7487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7524352 ++wrote 4096/4096 bytes at offset 7524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7561216 ++wrote 4096/4096 bytes at offset 7561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7598080 ++wrote 4096/4096 bytes at offset 7598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7634944 ++wrote 4096/4096 bytes at offset 7634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7671808 ++wrote 4096/4096 bytes at offset 7671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7708672 ++wrote 4096/4096 bytes at offset 7708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7745536 ++wrote 4096/4096 bytes at offset 7745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7782400 ++wrote 4096/4096 bytes at offset 7782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7819264 ++wrote 4096/4096 bytes at offset 7819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7856128 ++wrote 4096/4096 bytes at offset 7856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7892992 ++wrote 4096/4096 bytes at offset 7892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7929856 ++wrote 4096/4096 bytes at offset 7929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7966720 ++wrote 4096/4096 bytes at offset 7966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8003584 ++wrote 4096/4096 bytes at offset 8003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8040448 ++wrote 4096/4096 bytes at offset 8040448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8077312 ++wrote 4096/4096 bytes at offset 8077312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8114176 ++wrote 4096/4096 bytes at offset 8114176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8151040 ++wrote 4096/4096 bytes at offset 8151040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8187904 ++wrote 4096/4096 bytes at offset 8187904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8224768 ++wrote 4096/4096 bytes at offset 8224768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8261632 ++wrote 4096/4096 bytes at offset 8261632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8298496 ++wrote 4096/4096 bytes at offset 8298496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8335360 ++wrote 4096/4096 bytes at offset 8335360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8372224 ++wrote 4096/4096 bytes at offset 8372224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8409088 ++wrote 4096/4096 bytes at offset 8409088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8445952 ++wrote 4096/4096 bytes at offset 8445952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8482816 ++wrote 4096/4096 bytes at offset 8482816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8519680 ++wrote 4096/4096 bytes at offset 8519680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8556544 ++wrote 4096/4096 bytes at offset 8556544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8593408 ++wrote 4096/4096 bytes at offset 8593408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8630272 ++wrote 4096/4096 bytes at offset 8630272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8667136 ++wrote 4096/4096 bytes at offset 8667136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8704000 ++wrote 4096/4096 bytes at offset 8704000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8740864 ++wrote 4096/4096 bytes at offset 8740864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8777728 ++wrote 4096/4096 bytes at offset 8777728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8814592 ++wrote 4096/4096 bytes at offset 8814592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8851456 ++wrote 4096/4096 bytes at offset 8851456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8888320 ++wrote 4096/4096 bytes at offset 8888320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8925184 ++wrote 4096/4096 bytes at offset 8925184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8962048 ++wrote 4096/4096 bytes at offset 8962048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8998912 ++wrote 4096/4096 bytes at offset 8998912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9035776 ++wrote 4096/4096 bytes at offset 9035776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9072640 ++wrote 4096/4096 bytes at offset 9072640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9109504 ++wrote 4096/4096 bytes at offset 9109504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9146368 ++wrote 4096/4096 bytes at offset 9146368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9183232 ++wrote 4096/4096 bytes at offset 9183232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9220096 ++wrote 4096/4096 bytes at offset 9220096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9256960 ++wrote 4096/4096 bytes at offset 9256960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9293824 ++wrote 4096/4096 bytes at offset 9293824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9330688 ++wrote 4096/4096 bytes at offset 9330688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9367552 ++wrote 4096/4096 bytes at offset 9367552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9404416 ++wrote 4096/4096 bytes at offset 9404416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1081344 ++wrote 4096/4096 bytes at offset 1081344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1118208 ++wrote 4096/4096 bytes at offset 1118208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1155072 ++wrote 4096/4096 bytes at offset 1155072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1191936 ++wrote 4096/4096 bytes at offset 1191936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1228800 ++wrote 4096/4096 bytes at offset 1228800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1265664 ++wrote 4096/4096 bytes at offset 1265664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1302528 ++wrote 4096/4096 bytes at offset 1302528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1339392 ++wrote 4096/4096 bytes at offset 1339392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1376256 ++wrote 4096/4096 bytes at offset 1376256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1413120 ++wrote 4096/4096 bytes at offset 1413120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1449984 ++wrote 4096/4096 bytes at offset 1449984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1486848 ++wrote 4096/4096 bytes at offset 1486848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1523712 ++wrote 4096/4096 bytes at offset 1523712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1560576 ++wrote 4096/4096 bytes at offset 1560576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1597440 ++wrote 4096/4096 bytes at offset 1597440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1634304 ++wrote 4096/4096 bytes at offset 1634304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1671168 ++wrote 4096/4096 bytes at offset 1671168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1708032 ++wrote 4096/4096 bytes at offset 1708032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1744896 ++wrote 4096/4096 bytes at offset 1744896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1781760 ++wrote 4096/4096 bytes at offset 1781760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1818624 ++wrote 4096/4096 bytes at offset 1818624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1855488 ++wrote 4096/4096 bytes at offset 1855488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1892352 ++wrote 4096/4096 bytes at offset 1892352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1929216 ++wrote 4096/4096 bytes at offset 1929216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1966080 ++wrote 4096/4096 bytes at offset 1966080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2002944 ++wrote 4096/4096 bytes at offset 2002944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2039808 ++wrote 4096/4096 bytes at offset 2039808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2076672 ++wrote 4096/4096 bytes at offset 2076672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2113536 ++wrote 4096/4096 bytes at offset 2113536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2150400 ++wrote 4096/4096 bytes at offset 2150400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2187264 ++wrote 4096/4096 bytes at offset 2187264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2224128 ++wrote 4096/4096 bytes at offset 2224128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2260992 ++wrote 4096/4096 bytes at offset 2260992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2297856 ++wrote 4096/4096 bytes at offset 2297856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2334720 ++wrote 4096/4096 bytes at offset 2334720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2371584 ++wrote 4096/4096 bytes at offset 2371584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2408448 ++wrote 4096/4096 bytes at offset 2408448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2445312 ++wrote 4096/4096 bytes at offset 2445312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2482176 ++wrote 4096/4096 bytes at offset 2482176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2519040 ++wrote 4096/4096 bytes at offset 2519040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2555904 ++wrote 4096/4096 bytes at offset 2555904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2592768 ++wrote 4096/4096 bytes at offset 2592768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2629632 ++wrote 4096/4096 bytes at offset 2629632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2666496 ++wrote 4096/4096 bytes at offset 2666496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2703360 ++wrote 4096/4096 bytes at offset 2703360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2740224 ++wrote 4096/4096 bytes at offset 2740224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2777088 ++wrote 4096/4096 bytes at offset 2777088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2813952 ++wrote 4096/4096 bytes at offset 2813952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2850816 ++wrote 4096/4096 bytes at offset 2850816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2887680 ++wrote 4096/4096 bytes at offset 2887680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2924544 ++wrote 4096/4096 bytes at offset 2924544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2961408 ++wrote 4096/4096 bytes at offset 2961408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 2998272 ++wrote 4096/4096 bytes at offset 2998272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3035136 ++wrote 4096/4096 bytes at offset 3035136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3072000 ++wrote 4096/4096 bytes at offset 3072000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3108864 ++wrote 4096/4096 bytes at offset 3108864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3145728 ++wrote 4096/4096 bytes at offset 3145728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3182592 ++wrote 4096/4096 bytes at offset 3182592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3219456 ++wrote 4096/4096 bytes at offset 3219456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3256320 ++wrote 4096/4096 bytes at offset 3256320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3293184 ++wrote 4096/4096 bytes at offset 3293184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3330048 ++wrote 4096/4096 bytes at offset 3330048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3366912 ++wrote 4096/4096 bytes at offset 3366912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3403776 ++wrote 4096/4096 bytes at offset 3403776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3440640 ++wrote 4096/4096 bytes at offset 3440640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3477504 ++wrote 4096/4096 bytes at offset 3477504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3514368 ++wrote 4096/4096 bytes at offset 3514368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3551232 ++wrote 4096/4096 bytes at offset 3551232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3588096 ++wrote 4096/4096 bytes at offset 3588096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3624960 ++wrote 4096/4096 bytes at offset 3624960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3661824 ++wrote 4096/4096 bytes at offset 3661824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3698688 ++wrote 4096/4096 bytes at offset 3698688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3735552 ++wrote 4096/4096 bytes at offset 3735552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3772416 ++wrote 4096/4096 bytes at offset 3772416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3809280 ++wrote 4096/4096 bytes at offset 3809280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3846144 ++wrote 4096/4096 bytes at offset 3846144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3883008 ++wrote 4096/4096 bytes at offset 3883008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3919872 ++wrote 4096/4096 bytes at offset 3919872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3956736 ++wrote 4096/4096 bytes at offset 3956736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 3993600 ++wrote 4096/4096 bytes at offset 3993600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4030464 ++wrote 4096/4096 bytes at offset 4030464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4067328 ++wrote 4096/4096 bytes at offset 4067328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4104192 ++wrote 4096/4096 bytes at offset 4104192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4141056 ++wrote 4096/4096 bytes at offset 4141056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4177920 ++wrote 4096/4096 bytes at offset 4177920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4214784 ++wrote 4096/4096 bytes at offset 4214784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4251648 ++wrote 4096/4096 bytes at offset 4251648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4288512 ++wrote 4096/4096 bytes at offset 4288512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4325376 ++wrote 4096/4096 bytes at offset 4325376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4362240 ++wrote 4096/4096 bytes at offset 4362240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4399104 ++wrote 4096/4096 bytes at offset 4399104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4435968 ++wrote 4096/4096 bytes at offset 4435968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4472832 ++wrote 4096/4096 bytes at offset 4472832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4509696 ++wrote 4096/4096 bytes at offset 4509696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4546560 ++wrote 4096/4096 bytes at offset 4546560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4583424 ++wrote 4096/4096 bytes at offset 4583424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4620288 ++wrote 4096/4096 bytes at offset 4620288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4657152 ++wrote 4096/4096 bytes at offset 4657152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4694016 ++wrote 4096/4096 bytes at offset 4694016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4730880 ++wrote 4096/4096 bytes at offset 4730880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4767744 ++wrote 4096/4096 bytes at offset 4767744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4804608 ++wrote 4096/4096 bytes at offset 4804608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4841472 ++wrote 4096/4096 bytes at offset 4841472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4878336 ++wrote 4096/4096 bytes at offset 4878336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4915200 ++wrote 4096/4096 bytes at offset 4915200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4952064 ++wrote 4096/4096 bytes at offset 4952064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4988928 ++wrote 4096/4096 bytes at offset 4988928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5025792 ++wrote 4096/4096 bytes at offset 5025792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5062656 ++wrote 4096/4096 bytes at offset 5062656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5099520 ++wrote 4096/4096 bytes at offset 5099520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5136384 ++wrote 4096/4096 bytes at offset 5136384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5173248 ++wrote 4096/4096 bytes at offset 5173248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5210112 ++wrote 4096/4096 bytes at offset 5210112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5246976 ++wrote 4096/4096 bytes at offset 5246976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5283840 ++wrote 4096/4096 bytes at offset 5283840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5320704 ++wrote 4096/4096 bytes at offset 5320704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5357568 ++wrote 4096/4096 bytes at offset 5357568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5394432 ++wrote 4096/4096 bytes at offset 5394432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5431296 ++wrote 4096/4096 bytes at offset 5431296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5468160 ++wrote 4096/4096 bytes at offset 5468160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5505024 ++wrote 4096/4096 bytes at offset 5505024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5541888 ++wrote 4096/4096 bytes at offset 5541888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5578752 ++wrote 4096/4096 bytes at offset 5578752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5615616 ++wrote 4096/4096 bytes at offset 5615616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5652480 ++wrote 4096/4096 bytes at offset 5652480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5689344 ++wrote 4096/4096 bytes at offset 5689344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5726208 ++wrote 4096/4096 bytes at offset 5726208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5763072 ++wrote 4096/4096 bytes at offset 5763072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5799936 ++wrote 4096/4096 bytes at offset 5799936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5836800 ++wrote 4096/4096 bytes at offset 5836800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5873664 ++wrote 4096/4096 bytes at offset 5873664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5910528 ++wrote 4096/4096 bytes at offset 5910528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5947392 ++wrote 4096/4096 bytes at offset 5947392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 5984256 ++wrote 4096/4096 bytes at offset 5984256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6021120 ++wrote 4096/4096 bytes at offset 6021120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6057984 ++wrote 4096/4096 bytes at offset 6057984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6094848 ++wrote 4096/4096 bytes at offset 6094848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6131712 ++wrote 4096/4096 bytes at offset 6131712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6168576 ++wrote 4096/4096 bytes at offset 6168576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6205440 ++wrote 4096/4096 bytes at offset 6205440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6242304 ++wrote 4096/4096 bytes at offset 6242304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6279168 ++wrote 4096/4096 bytes at offset 6279168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6316032 ++wrote 4096/4096 bytes at offset 6316032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6352896 ++wrote 4096/4096 bytes at offset 6352896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6389760 ++wrote 4096/4096 bytes at offset 6389760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6426624 ++wrote 4096/4096 bytes at offset 6426624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6463488 ++wrote 4096/4096 bytes at offset 6463488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6500352 ++wrote 4096/4096 bytes at offset 6500352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6537216 ++wrote 4096/4096 bytes at offset 6537216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6574080 ++wrote 4096/4096 bytes at offset 6574080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6610944 ++wrote 4096/4096 bytes at offset 6610944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6647808 ++wrote 4096/4096 bytes at offset 6647808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6684672 ++wrote 4096/4096 bytes at offset 6684672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6721536 ++wrote 4096/4096 bytes at offset 6721536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6758400 ++wrote 4096/4096 bytes at offset 6758400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6795264 ++wrote 4096/4096 bytes at offset 6795264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6832128 ++wrote 4096/4096 bytes at offset 6832128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6868992 ++wrote 4096/4096 bytes at offset 6868992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6905856 ++wrote 4096/4096 bytes at offset 6905856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6942720 ++wrote 4096/4096 bytes at offset 6942720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 6979584 ++wrote 4096/4096 bytes at offset 6979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7016448 ++wrote 4096/4096 bytes at offset 7016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7053312 ++wrote 4096/4096 bytes at offset 7053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7090176 ++wrote 4096/4096 bytes at offset 7090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7127040 ++wrote 4096/4096 bytes at offset 7127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7163904 ++wrote 4096/4096 bytes at offset 7163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7200768 ++wrote 4096/4096 bytes at offset 7200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7237632 ++wrote 4096/4096 bytes at offset 7237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7274496 ++wrote 4096/4096 bytes at offset 7274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7311360 ++wrote 4096/4096 bytes at offset 7311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7348224 ++wrote 4096/4096 bytes at offset 7348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7385088 ++wrote 4096/4096 bytes at offset 7385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7421952 ++wrote 4096/4096 bytes at offset 7421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7458816 ++wrote 4096/4096 bytes at offset 7458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7495680 ++wrote 4096/4096 bytes at offset 7495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7532544 ++wrote 4096/4096 bytes at offset 7532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7569408 ++wrote 4096/4096 bytes at offset 7569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7606272 ++wrote 4096/4096 bytes at offset 7606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7643136 ++wrote 4096/4096 bytes at offset 7643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7680000 ++wrote 4096/4096 bytes at offset 7680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7716864 ++wrote 4096/4096 bytes at offset 7716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7753728 ++wrote 4096/4096 bytes at offset 7753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7790592 ++wrote 4096/4096 bytes at offset 7790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7827456 ++wrote 4096/4096 bytes at offset 7827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7864320 ++wrote 4096/4096 bytes at offset 7864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7901184 ++wrote 4096/4096 bytes at offset 7901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7938048 ++wrote 4096/4096 bytes at offset 7938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 7974912 ++wrote 4096/4096 bytes at offset 7974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8011776 ++wrote 4096/4096 bytes at offset 8011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8048640 ++wrote 4096/4096 bytes at offset 8048640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8085504 ++wrote 4096/4096 bytes at offset 8085504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8122368 ++wrote 4096/4096 bytes at offset 8122368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8159232 ++wrote 4096/4096 bytes at offset 8159232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8196096 ++wrote 4096/4096 bytes at offset 8196096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8232960 ++wrote 4096/4096 bytes at offset 8232960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8269824 ++wrote 4096/4096 bytes at offset 8269824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8306688 ++wrote 4096/4096 bytes at offset 8306688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8343552 ++wrote 4096/4096 bytes at offset 8343552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8380416 ++wrote 4096/4096 bytes at offset 8380416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8417280 ++wrote 4096/4096 bytes at offset 8417280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8454144 ++wrote 4096/4096 bytes at offset 8454144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8491008 ++wrote 4096/4096 bytes at offset 8491008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8527872 ++wrote 4096/4096 bytes at offset 8527872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8564736 ++wrote 4096/4096 bytes at offset 8564736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8601600 ++wrote 4096/4096 bytes at offset 8601600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8638464 ++wrote 4096/4096 bytes at offset 8638464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8675328 ++wrote 4096/4096 bytes at offset 8675328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8712192 ++wrote 4096/4096 bytes at offset 8712192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8749056 ++wrote 4096/4096 bytes at offset 8749056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8785920 ++wrote 4096/4096 bytes at offset 8785920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8822784 ++wrote 4096/4096 bytes at offset 8822784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8859648 ++wrote 4096/4096 bytes at offset 8859648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8896512 ++wrote 4096/4096 bytes at offset 8896512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8933376 ++wrote 4096/4096 bytes at offset 8933376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8970240 ++wrote 4096/4096 bytes at offset 8970240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9007104 ++wrote 4096/4096 bytes at offset 9007104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9043968 ++wrote 4096/4096 bytes at offset 9043968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9080832 ++wrote 4096/4096 bytes at offset 9080832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9117696 ++wrote 4096/4096 bytes at offset 9117696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9154560 ++wrote 4096/4096 bytes at offset 9154560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9191424 ++wrote 4096/4096 bytes at offset 9191424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9228288 ++wrote 4096/4096 bytes at offset 9228288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9265152 ++wrote 4096/4096 bytes at offset 9265152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9302016 ++wrote 4096/4096 bytes at offset 9302016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9338880 ++wrote 4096/4096 bytes at offset 9338880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9375744 ++wrote 4096/4096 bytes at offset 9375744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 9412608 ++wrote 4096/4096 bytes at offset 9412608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 8192/8192 bytes at offset 0 ++read 8192/8192 bytes at offset 0 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 36864 ++read 8192/8192 bytes at offset 36864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 73728 ++read 8192/8192 bytes at offset 73728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 110592 ++read 8192/8192 bytes at offset 110592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 147456 ++read 8192/8192 bytes at offset 147456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 184320 ++read 8192/8192 bytes at offset 184320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 221184 ++read 8192/8192 bytes at offset 221184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 258048 ++read 8192/8192 bytes at offset 258048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 294912 ++read 8192/8192 bytes at offset 294912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 331776 ++read 8192/8192 bytes at offset 331776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 368640 ++read 8192/8192 bytes at offset 368640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 405504 ++read 8192/8192 bytes at offset 405504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 442368 ++read 8192/8192 bytes at offset 442368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 479232 ++read 8192/8192 bytes at offset 479232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 516096 ++read 8192/8192 bytes at offset 516096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 552960 ++read 8192/8192 bytes at offset 552960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 589824 ++read 8192/8192 bytes at offset 589824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 626688 ++read 8192/8192 bytes at offset 626688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 663552 ++read 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 700416 ++read 8192/8192 bytes at offset 700416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 737280 ++read 8192/8192 bytes at offset 737280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 774144 ++read 8192/8192 bytes at offset 774144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811008 ++read 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 847872 ++read 8192/8192 bytes at offset 847872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 884736 ++read 8192/8192 bytes at offset 884736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 921600 ++read 8192/8192 bytes at offset 921600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958464 ++read 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 995328 ++read 8192/8192 bytes at offset 995328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1032192 ++read 8192/8192 bytes at offset 1032192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1069056 ++read 8192/8192 bytes at offset 1069056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1105920 ++read 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1142784 ++read 8192/8192 bytes at offset 1142784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1179648 ++read 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1216512 ++read 8192/8192 bytes at offset 1216512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1253376 ++read 8192/8192 bytes at offset 1253376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1290240 ++read 8192/8192 bytes at offset 1290240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327104 ++read 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1363968 ++read 8192/8192 bytes at offset 1363968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1400832 ++read 8192/8192 bytes at offset 1400832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1437696 ++read 8192/8192 bytes at offset 1437696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1474560 ++read 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1511424 ++read 8192/8192 bytes at offset 1511424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1548288 ++read 8192/8192 bytes at offset 1548288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1585152 ++read 8192/8192 bytes at offset 1585152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622016 ++read 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1658880 ++read 8192/8192 bytes at offset 1658880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1695744 ++read 8192/8192 bytes at offset 1695744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1732608 ++read 8192/8192 bytes at offset 1732608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1769472 ++read 8192/8192 bytes at offset 1769472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806336 ++read 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1843200 ++read 8192/8192 bytes at offset 1843200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1880064 ++read 8192/8192 bytes at offset 1880064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1916928 ++read 8192/8192 bytes at offset 1916928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1953792 ++read 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1990656 ++read 8192/8192 bytes at offset 1990656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2027520 ++read 8192/8192 bytes at offset 2027520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2064384 ++read 8192/8192 bytes at offset 2064384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101248 ++read 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2138112 ++read 8192/8192 bytes at offset 2138112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2174976 ++read 8192/8192 bytes at offset 2174976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2211840 ++read 8192/8192 bytes at offset 2211840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2248704 ++read 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2285568 ++read 8192/8192 bytes at offset 2285568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2322432 ++read 8192/8192 bytes at offset 2322432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2359296 ++read 8192/8192 bytes at offset 2359296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2396160 ++read 8192/8192 bytes at offset 2396160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2433024 ++read 8192/8192 bytes at offset 2433024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2469888 ++read 8192/8192 bytes at offset 2469888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2506752 ++read 8192/8192 bytes at offset 2506752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2543616 ++read 8192/8192 bytes at offset 2543616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2580480 ++read 8192/8192 bytes at offset 2580480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2617344 ++read 8192/8192 bytes at offset 2617344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2654208 ++read 8192/8192 bytes at offset 2654208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2691072 ++read 8192/8192 bytes at offset 2691072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2727936 ++read 8192/8192 bytes at offset 2727936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2764800 ++read 8192/8192 bytes at offset 2764800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2801664 ++read 8192/8192 bytes at offset 2801664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2838528 ++read 8192/8192 bytes at offset 2838528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2875392 ++read 8192/8192 bytes at offset 2875392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2912256 ++read 8192/8192 bytes at offset 2912256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2949120 ++read 8192/8192 bytes at offset 2949120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2985984 ++read 8192/8192 bytes at offset 2985984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3022848 ++read 8192/8192 bytes at offset 3022848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3059712 ++read 8192/8192 bytes at offset 3059712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3096576 ++read 8192/8192 bytes at offset 3096576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3133440 ++read 8192/8192 bytes at offset 3133440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3170304 ++read 8192/8192 bytes at offset 3170304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3207168 ++read 8192/8192 bytes at offset 3207168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3244032 ++read 8192/8192 bytes at offset 3244032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3280896 ++read 8192/8192 bytes at offset 3280896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3317760 ++read 8192/8192 bytes at offset 3317760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3354624 ++read 8192/8192 bytes at offset 3354624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3391488 ++read 8192/8192 bytes at offset 3391488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3428352 ++read 8192/8192 bytes at offset 3428352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3465216 ++read 8192/8192 bytes at offset 3465216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3502080 ++read 8192/8192 bytes at offset 3502080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3538944 ++read 8192/8192 bytes at offset 3538944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3575808 ++read 8192/8192 bytes at offset 3575808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3612672 ++read 8192/8192 bytes at offset 3612672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3649536 ++read 8192/8192 bytes at offset 3649536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3686400 ++read 8192/8192 bytes at offset 3686400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3723264 ++read 8192/8192 bytes at offset 3723264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3760128 ++read 8192/8192 bytes at offset 3760128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3796992 ++read 8192/8192 bytes at offset 3796992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3833856 ++read 8192/8192 bytes at offset 3833856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3870720 ++read 8192/8192 bytes at offset 3870720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3907584 ++read 8192/8192 bytes at offset 3907584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3944448 ++read 8192/8192 bytes at offset 3944448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3981312 ++read 8192/8192 bytes at offset 3981312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4018176 ++read 8192/8192 bytes at offset 4018176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4055040 ++read 8192/8192 bytes at offset 4055040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4091904 ++read 8192/8192 bytes at offset 4091904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4128768 ++read 8192/8192 bytes at offset 4128768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4165632 ++read 8192/8192 bytes at offset 4165632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4202496 ++read 8192/8192 bytes at offset 4202496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4239360 ++read 8192/8192 bytes at offset 4239360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4276224 ++read 8192/8192 bytes at offset 4276224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4313088 ++read 8192/8192 bytes at offset 4313088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4349952 ++read 8192/8192 bytes at offset 4349952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4386816 ++read 8192/8192 bytes at offset 4386816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4423680 ++read 8192/8192 bytes at offset 4423680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4460544 ++read 8192/8192 bytes at offset 4460544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4497408 ++read 8192/8192 bytes at offset 4497408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4534272 ++read 8192/8192 bytes at offset 4534272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4571136 ++read 8192/8192 bytes at offset 4571136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4608000 ++read 8192/8192 bytes at offset 4608000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4644864 ++read 8192/8192 bytes at offset 4644864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4681728 ++read 8192/8192 bytes at offset 4681728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4718592 ++read 8192/8192 bytes at offset 4718592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4755456 ++read 8192/8192 bytes at offset 4755456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4792320 ++read 8192/8192 bytes at offset 4792320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4829184 ++read 8192/8192 bytes at offset 4829184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4866048 ++read 8192/8192 bytes at offset 4866048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4902912 ++read 8192/8192 bytes at offset 4902912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4939776 ++read 8192/8192 bytes at offset 4939776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4976640 ++read 8192/8192 bytes at offset 4976640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5013504 ++read 8192/8192 bytes at offset 5013504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5050368 ++read 8192/8192 bytes at offset 5050368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5087232 ++read 8192/8192 bytes at offset 5087232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5124096 ++read 8192/8192 bytes at offset 5124096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5160960 ++read 8192/8192 bytes at offset 5160960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5197824 ++read 8192/8192 bytes at offset 5197824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5234688 ++read 8192/8192 bytes at offset 5234688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5271552 ++read 8192/8192 bytes at offset 5271552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5308416 ++read 8192/8192 bytes at offset 5308416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5345280 ++read 8192/8192 bytes at offset 5345280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5382144 ++read 8192/8192 bytes at offset 5382144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5419008 ++read 8192/8192 bytes at offset 5419008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5455872 ++read 8192/8192 bytes at offset 5455872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5492736 ++read 8192/8192 bytes at offset 5492736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5529600 ++read 8192/8192 bytes at offset 5529600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5566464 ++read 8192/8192 bytes at offset 5566464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5603328 ++read 8192/8192 bytes at offset 5603328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5640192 ++read 8192/8192 bytes at offset 5640192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5677056 ++read 8192/8192 bytes at offset 5677056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5713920 ++read 8192/8192 bytes at offset 5713920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5750784 ++read 8192/8192 bytes at offset 5750784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5787648 ++read 8192/8192 bytes at offset 5787648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5824512 ++read 8192/8192 bytes at offset 5824512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5861376 ++read 8192/8192 bytes at offset 5861376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5898240 ++read 8192/8192 bytes at offset 5898240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5935104 ++read 8192/8192 bytes at offset 5935104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5971968 ++read 8192/8192 bytes at offset 5971968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6008832 ++read 8192/8192 bytes at offset 6008832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6045696 ++read 8192/8192 bytes at offset 6045696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6082560 ++read 8192/8192 bytes at offset 6082560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6119424 ++read 8192/8192 bytes at offset 6119424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6156288 ++read 8192/8192 bytes at offset 6156288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6193152 ++read 8192/8192 bytes at offset 6193152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6230016 ++read 8192/8192 bytes at offset 6230016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6266880 ++read 8192/8192 bytes at offset 6266880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6303744 ++read 8192/8192 bytes at offset 6303744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6340608 ++read 8192/8192 bytes at offset 6340608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6377472 ++read 8192/8192 bytes at offset 6377472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6414336 ++read 8192/8192 bytes at offset 6414336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6451200 ++read 8192/8192 bytes at offset 6451200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6488064 ++read 8192/8192 bytes at offset 6488064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6524928 ++read 8192/8192 bytes at offset 6524928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6561792 ++read 8192/8192 bytes at offset 6561792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6598656 ++read 8192/8192 bytes at offset 6598656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6635520 ++read 8192/8192 bytes at offset 6635520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6672384 ++read 8192/8192 bytes at offset 6672384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6709248 ++read 8192/8192 bytes at offset 6709248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6746112 ++read 8192/8192 bytes at offset 6746112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6782976 ++read 8192/8192 bytes at offset 6782976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6819840 ++read 8192/8192 bytes at offset 6819840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6856704 ++read 8192/8192 bytes at offset 6856704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6893568 ++read 8192/8192 bytes at offset 6893568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6930432 ++read 8192/8192 bytes at offset 6930432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6967296 ++read 8192/8192 bytes at offset 6967296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7004160 ++read 8192/8192 bytes at offset 7004160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7041024 ++read 8192/8192 bytes at offset 7041024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7077888 ++read 8192/8192 bytes at offset 7077888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7114752 ++read 8192/8192 bytes at offset 7114752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7151616 ++read 8192/8192 bytes at offset 7151616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7188480 ++read 8192/8192 bytes at offset 7188480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7225344 ++read 8192/8192 bytes at offset 7225344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7262208 ++read 8192/8192 bytes at offset 7262208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7299072 ++read 8192/8192 bytes at offset 7299072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7335936 ++read 8192/8192 bytes at offset 7335936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7372800 ++read 8192/8192 bytes at offset 7372800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7409664 ++read 8192/8192 bytes at offset 7409664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7446528 ++read 8192/8192 bytes at offset 7446528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7483392 ++read 8192/8192 bytes at offset 7483392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7520256 ++read 8192/8192 bytes at offset 7520256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7557120 ++read 8192/8192 bytes at offset 7557120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7593984 ++read 8192/8192 bytes at offset 7593984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7630848 ++read 8192/8192 bytes at offset 7630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7667712 ++read 8192/8192 bytes at offset 7667712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7704576 ++read 8192/8192 bytes at offset 7704576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7741440 ++read 8192/8192 bytes at offset 7741440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7778304 ++read 8192/8192 bytes at offset 7778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7815168 ++read 8192/8192 bytes at offset 7815168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7852032 ++read 8192/8192 bytes at offset 7852032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7888896 ++read 8192/8192 bytes at offset 7888896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7925760 ++read 8192/8192 bytes at offset 7925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7962624 ++read 8192/8192 bytes at offset 7962624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7999488 ++read 8192/8192 bytes at offset 7999488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8036352 ++read 8192/8192 bytes at offset 8036352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8073216 ++read 8192/8192 bytes at offset 8073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8110080 ++read 8192/8192 bytes at offset 8110080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8146944 ++read 8192/8192 bytes at offset 8146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8183808 ++read 8192/8192 bytes at offset 8183808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8220672 ++read 8192/8192 bytes at offset 8220672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8257536 ++read 8192/8192 bytes at offset 8257536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8294400 ++read 8192/8192 bytes at offset 8294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8331264 ++read 8192/8192 bytes at offset 8331264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8368128 ++read 8192/8192 bytes at offset 8368128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8404992 ++read 8192/8192 bytes at offset 8404992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8441856 ++read 8192/8192 bytes at offset 8441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8478720 ++read 8192/8192 bytes at offset 8478720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8515584 ++read 8192/8192 bytes at offset 8515584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8552448 ++read 8192/8192 bytes at offset 8552448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8589312 ++read 8192/8192 bytes at offset 8589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8626176 ++read 8192/8192 bytes at offset 8626176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8663040 ++read 8192/8192 bytes at offset 8663040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8699904 ++read 8192/8192 bytes at offset 8699904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8736768 ++read 8192/8192 bytes at offset 8736768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8773632 ++read 8192/8192 bytes at offset 8773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8810496 ++read 8192/8192 bytes at offset 8810496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8847360 ++read 8192/8192 bytes at offset 8847360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8884224 ++read 8192/8192 bytes at offset 8884224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8921088 ++read 8192/8192 bytes at offset 8921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8957952 ++read 8192/8192 bytes at offset 8957952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8994816 ++read 8192/8192 bytes at offset 8994816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9031680 ++read 8192/8192 bytes at offset 9031680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9068544 ++read 8192/8192 bytes at offset 9068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9105408 ++read 8192/8192 bytes at offset 9105408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9142272 ++read 8192/8192 bytes at offset 9142272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9179136 ++read 8192/8192 bytes at offset 9179136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9216000 ++read 8192/8192 bytes at offset 9216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9252864 ++read 8192/8192 bytes at offset 9252864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9289728 ++read 8192/8192 bytes at offset 9289728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9326592 ++read 8192/8192 bytes at offset 9326592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9363456 ++read 8192/8192 bytes at offset 9363456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9400320 ++read 8192/8192 bytes at offset 9400320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 12288/12288 bytes at offset 12288 ++=== IO: pattern 165 ++read 12288/12288 bytes at offset 12288 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 49152 ++read 12288/12288 bytes at offset 49152 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 86016 ++read 12288/12288 bytes at offset 86016 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 122880 ++read 12288/12288 bytes at offset 122880 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 159744 ++read 12288/12288 bytes at offset 159744 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 196608 ++read 12288/12288 bytes at offset 196608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 233472 ++read 12288/12288 bytes at offset 233472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 270336 ++read 12288/12288 bytes at offset 270336 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 307200 ++read 12288/12288 bytes at offset 307200 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 344064 ++read 12288/12288 bytes at offset 344064 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 380928 ++read 12288/12288 bytes at offset 380928 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 417792 ++read 12288/12288 bytes at offset 417792 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 454656 ++read 12288/12288 bytes at offset 454656 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 491520 ++read 12288/12288 bytes at offset 491520 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 528384 ++read 12288/12288 bytes at offset 528384 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 565248 ++read 12288/12288 bytes at offset 565248 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 602112 ++read 12288/12288 bytes at offset 602112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 638976 ++read 12288/12288 bytes at offset 638976 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 675840 ++read 12288/12288 bytes at offset 675840 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 712704 ++read 12288/12288 bytes at offset 712704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 749568 ++read 12288/12288 bytes at offset 749568 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 786432 ++read 12288/12288 bytes at offset 786432 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 823296 ++read 12288/12288 bytes at offset 823296 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 860160 ++read 12288/12288 bytes at offset 860160 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 897024 ++read 12288/12288 bytes at offset 897024 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 933888 ++read 12288/12288 bytes at offset 933888 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 970752 ++read 12288/12288 bytes at offset 970752 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1007616 ++read 12288/12288 bytes at offset 1007616 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1044480 ++read 12288/12288 bytes at offset 1044480 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1081344 ++read 12288/12288 bytes at offset 1081344 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1118208 ++read 12288/12288 bytes at offset 1118208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1155072 ++read 12288/12288 bytes at offset 1155072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1191936 ++read 12288/12288 bytes at offset 1191936 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1228800 ++read 12288/12288 bytes at offset 1228800 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1265664 ++read 12288/12288 bytes at offset 1265664 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1302528 ++read 12288/12288 bytes at offset 1302528 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1339392 ++read 12288/12288 bytes at offset 1339392 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1376256 ++read 12288/12288 bytes at offset 1376256 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1413120 ++read 12288/12288 bytes at offset 1413120 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1449984 ++read 12288/12288 bytes at offset 1449984 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1486848 ++read 12288/12288 bytes at offset 1486848 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1523712 ++read 12288/12288 bytes at offset 1523712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1560576 ++read 12288/12288 bytes at offset 1560576 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1597440 ++read 12288/12288 bytes at offset 1597440 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1634304 ++read 12288/12288 bytes at offset 1634304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1671168 ++read 12288/12288 bytes at offset 1671168 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1708032 ++read 12288/12288 bytes at offset 1708032 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1744896 ++read 12288/12288 bytes at offset 1744896 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1781760 ++read 12288/12288 bytes at offset 1781760 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1818624 ++read 12288/12288 bytes at offset 1818624 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1855488 ++read 12288/12288 bytes at offset 1855488 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1892352 ++read 12288/12288 bytes at offset 1892352 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1929216 ++read 12288/12288 bytes at offset 1929216 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 1966080 ++read 12288/12288 bytes at offset 1966080 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2002944 ++read 12288/12288 bytes at offset 2002944 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2039808 ++read 12288/12288 bytes at offset 2039808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2076672 ++read 12288/12288 bytes at offset 2076672 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2113536 ++read 12288/12288 bytes at offset 2113536 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2150400 ++read 12288/12288 bytes at offset 2150400 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2187264 ++read 12288/12288 bytes at offset 2187264 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2224128 ++read 12288/12288 bytes at offset 2224128 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2260992 ++read 12288/12288 bytes at offset 2260992 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2297856 ++read 12288/12288 bytes at offset 2297856 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2334720 ++read 12288/12288 bytes at offset 2334720 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2371584 ++read 12288/12288 bytes at offset 2371584 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2408448 ++read 12288/12288 bytes at offset 2408448 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2445312 ++read 12288/12288 bytes at offset 2445312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2482176 ++read 12288/12288 bytes at offset 2482176 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2519040 ++read 12288/12288 bytes at offset 2519040 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2555904 ++read 12288/12288 bytes at offset 2555904 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2592768 ++read 12288/12288 bytes at offset 2592768 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2629632 ++read 12288/12288 bytes at offset 2629632 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2666496 ++read 12288/12288 bytes at offset 2666496 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2703360 ++read 12288/12288 bytes at offset 2703360 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2740224 ++read 12288/12288 bytes at offset 2740224 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2777088 ++read 12288/12288 bytes at offset 2777088 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2813952 ++read 12288/12288 bytes at offset 2813952 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2850816 ++read 12288/12288 bytes at offset 2850816 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2887680 ++read 12288/12288 bytes at offset 2887680 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2924544 ++read 12288/12288 bytes at offset 2924544 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2961408 ++read 12288/12288 bytes at offset 2961408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2998272 ++read 12288/12288 bytes at offset 2998272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3035136 ++read 12288/12288 bytes at offset 3035136 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3072000 ++read 12288/12288 bytes at offset 3072000 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3108864 ++read 12288/12288 bytes at offset 3108864 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3145728 ++read 12288/12288 bytes at offset 3145728 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3182592 ++read 12288/12288 bytes at offset 3182592 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3219456 ++read 12288/12288 bytes at offset 3219456 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3256320 ++read 12288/12288 bytes at offset 3256320 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3293184 ++read 12288/12288 bytes at offset 3293184 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3330048 ++read 12288/12288 bytes at offset 3330048 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3366912 ++read 12288/12288 bytes at offset 3366912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3403776 ++read 12288/12288 bytes at offset 3403776 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3440640 ++read 12288/12288 bytes at offset 3440640 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3477504 ++read 12288/12288 bytes at offset 3477504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3514368 ++read 12288/12288 bytes at offset 3514368 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3551232 ++read 12288/12288 bytes at offset 3551232 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3588096 ++read 12288/12288 bytes at offset 3588096 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3624960 ++read 12288/12288 bytes at offset 3624960 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3661824 ++read 12288/12288 bytes at offset 3661824 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3698688 ++read 12288/12288 bytes at offset 3698688 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3735552 ++read 12288/12288 bytes at offset 3735552 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3772416 ++read 12288/12288 bytes at offset 3772416 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3809280 ++read 12288/12288 bytes at offset 3809280 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3846144 ++read 12288/12288 bytes at offset 3846144 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3883008 ++read 12288/12288 bytes at offset 3883008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3919872 ++read 12288/12288 bytes at offset 3919872 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3956736 ++read 12288/12288 bytes at offset 3956736 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 3993600 ++read 12288/12288 bytes at offset 3993600 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4030464 ++read 12288/12288 bytes at offset 4030464 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4067328 ++read 12288/12288 bytes at offset 4067328 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4104192 ++read 12288/12288 bytes at offset 4104192 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4141056 ++read 12288/12288 bytes at offset 4141056 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4177920 ++read 12288/12288 bytes at offset 4177920 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4214784 ++read 12288/12288 bytes at offset 4214784 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4251648 ++read 12288/12288 bytes at offset 4251648 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4288512 ++read 12288/12288 bytes at offset 4288512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4325376 ++read 12288/12288 bytes at offset 4325376 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4362240 ++read 12288/12288 bytes at offset 4362240 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4399104 ++read 12288/12288 bytes at offset 4399104 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4435968 ++read 12288/12288 bytes at offset 4435968 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4472832 ++read 12288/12288 bytes at offset 4472832 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4509696 ++read 12288/12288 bytes at offset 4509696 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4546560 ++read 12288/12288 bytes at offset 4546560 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4583424 ++read 12288/12288 bytes at offset 4583424 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4620288 ++read 12288/12288 bytes at offset 4620288 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4657152 ++read 12288/12288 bytes at offset 4657152 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4694016 ++read 12288/12288 bytes at offset 4694016 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4730880 ++read 12288/12288 bytes at offset 4730880 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4767744 ++read 12288/12288 bytes at offset 4767744 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4804608 ++read 12288/12288 bytes at offset 4804608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4841472 ++read 12288/12288 bytes at offset 4841472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4878336 ++read 12288/12288 bytes at offset 4878336 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4915200 ++read 12288/12288 bytes at offset 4915200 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4952064 ++read 12288/12288 bytes at offset 4952064 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4988928 ++read 12288/12288 bytes at offset 4988928 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5025792 ++read 12288/12288 bytes at offset 5025792 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5062656 ++read 12288/12288 bytes at offset 5062656 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5099520 ++read 12288/12288 bytes at offset 5099520 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5136384 ++read 12288/12288 bytes at offset 5136384 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5173248 ++read 12288/12288 bytes at offset 5173248 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5210112 ++read 12288/12288 bytes at offset 5210112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5246976 ++read 12288/12288 bytes at offset 5246976 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5283840 ++read 12288/12288 bytes at offset 5283840 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5320704 ++read 12288/12288 bytes at offset 5320704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5357568 ++read 12288/12288 bytes at offset 5357568 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5394432 ++read 12288/12288 bytes at offset 5394432 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5431296 ++read 12288/12288 bytes at offset 5431296 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5468160 ++read 12288/12288 bytes at offset 5468160 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5505024 ++read 12288/12288 bytes at offset 5505024 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5541888 ++read 12288/12288 bytes at offset 5541888 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5578752 ++read 12288/12288 bytes at offset 5578752 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5615616 ++read 12288/12288 bytes at offset 5615616 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5652480 ++read 12288/12288 bytes at offset 5652480 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5689344 ++read 12288/12288 bytes at offset 5689344 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5726208 ++read 12288/12288 bytes at offset 5726208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5763072 ++read 12288/12288 bytes at offset 5763072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5799936 ++read 12288/12288 bytes at offset 5799936 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5836800 ++read 12288/12288 bytes at offset 5836800 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5873664 ++read 12288/12288 bytes at offset 5873664 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5910528 ++read 12288/12288 bytes at offset 5910528 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5947392 ++read 12288/12288 bytes at offset 5947392 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 5984256 ++read 12288/12288 bytes at offset 5984256 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6021120 ++read 12288/12288 bytes at offset 6021120 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6057984 ++read 12288/12288 bytes at offset 6057984 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6094848 ++read 12288/12288 bytes at offset 6094848 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6131712 ++read 12288/12288 bytes at offset 6131712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6168576 ++read 12288/12288 bytes at offset 6168576 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6205440 ++read 12288/12288 bytes at offset 6205440 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6242304 ++read 12288/12288 bytes at offset 6242304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6279168 ++read 12288/12288 bytes at offset 6279168 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6316032 ++read 12288/12288 bytes at offset 6316032 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6352896 ++read 12288/12288 bytes at offset 6352896 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6389760 ++read 12288/12288 bytes at offset 6389760 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6426624 ++read 12288/12288 bytes at offset 6426624 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6463488 ++read 12288/12288 bytes at offset 6463488 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6500352 ++read 12288/12288 bytes at offset 6500352 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6537216 ++read 12288/12288 bytes at offset 6537216 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6574080 ++read 12288/12288 bytes at offset 6574080 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6610944 ++read 12288/12288 bytes at offset 6610944 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6647808 ++read 12288/12288 bytes at offset 6647808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6684672 ++read 12288/12288 bytes at offset 6684672 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6721536 ++read 12288/12288 bytes at offset 6721536 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6758400 ++read 12288/12288 bytes at offset 6758400 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6795264 ++read 12288/12288 bytes at offset 6795264 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6832128 ++read 12288/12288 bytes at offset 6832128 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6868992 ++read 12288/12288 bytes at offset 6868992 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6905856 ++read 12288/12288 bytes at offset 6905856 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6942720 ++read 12288/12288 bytes at offset 6942720 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6979584 ++read 12288/12288 bytes at offset 6979584 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7016448 ++read 12288/12288 bytes at offset 7016448 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7053312 ++read 12288/12288 bytes at offset 7053312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7090176 ++read 12288/12288 bytes at offset 7090176 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7127040 ++read 12288/12288 bytes at offset 7127040 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7163904 ++read 12288/12288 bytes at offset 7163904 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7200768 ++read 12288/12288 bytes at offset 7200768 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7237632 ++read 12288/12288 bytes at offset 7237632 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7274496 ++read 12288/12288 bytes at offset 7274496 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7311360 ++read 12288/12288 bytes at offset 7311360 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7348224 ++read 12288/12288 bytes at offset 7348224 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7385088 ++read 12288/12288 bytes at offset 7385088 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7421952 ++read 12288/12288 bytes at offset 7421952 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7458816 ++read 12288/12288 bytes at offset 7458816 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7495680 ++read 12288/12288 bytes at offset 7495680 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7532544 ++read 12288/12288 bytes at offset 7532544 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7569408 ++read 12288/12288 bytes at offset 7569408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7606272 ++read 12288/12288 bytes at offset 7606272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7643136 ++read 12288/12288 bytes at offset 7643136 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7680000 ++read 12288/12288 bytes at offset 7680000 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7716864 ++read 12288/12288 bytes at offset 7716864 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7753728 ++read 12288/12288 bytes at offset 7753728 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7790592 ++read 12288/12288 bytes at offset 7790592 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7827456 ++read 12288/12288 bytes at offset 7827456 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7864320 ++read 12288/12288 bytes at offset 7864320 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7901184 ++read 12288/12288 bytes at offset 7901184 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7938048 ++read 12288/12288 bytes at offset 7938048 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 7974912 ++read 12288/12288 bytes at offset 7974912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8011776 ++read 12288/12288 bytes at offset 8011776 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8048640 ++read 12288/12288 bytes at offset 8048640 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8085504 ++read 12288/12288 bytes at offset 8085504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8122368 ++read 12288/12288 bytes at offset 8122368 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8159232 ++read 12288/12288 bytes at offset 8159232 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8196096 ++read 12288/12288 bytes at offset 8196096 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8232960 ++read 12288/12288 bytes at offset 8232960 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8269824 ++read 12288/12288 bytes at offset 8269824 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8306688 ++read 12288/12288 bytes at offset 8306688 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8343552 ++read 12288/12288 bytes at offset 8343552 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8380416 ++read 12288/12288 bytes at offset 8380416 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8417280 ++read 12288/12288 bytes at offset 8417280 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8454144 ++read 12288/12288 bytes at offset 8454144 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8491008 ++read 12288/12288 bytes at offset 8491008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8527872 ++read 12288/12288 bytes at offset 8527872 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8564736 ++read 12288/12288 bytes at offset 8564736 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8601600 ++read 12288/12288 bytes at offset 8601600 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8638464 ++read 12288/12288 bytes at offset 8638464 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8675328 ++read 12288/12288 bytes at offset 8675328 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8712192 ++read 12288/12288 bytes at offset 8712192 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8749056 ++read 12288/12288 bytes at offset 8749056 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8785920 ++read 12288/12288 bytes at offset 8785920 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8822784 ++read 12288/12288 bytes at offset 8822784 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8859648 ++read 12288/12288 bytes at offset 8859648 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8896512 ++read 12288/12288 bytes at offset 8896512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8933376 ++read 12288/12288 bytes at offset 8933376 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8970240 ++read 12288/12288 bytes at offset 8970240 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9007104 ++read 12288/12288 bytes at offset 9007104 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9043968 ++read 12288/12288 bytes at offset 9043968 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9080832 ++read 12288/12288 bytes at offset 9080832 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9117696 ++read 12288/12288 bytes at offset 9117696 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9154560 ++read 12288/12288 bytes at offset 9154560 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9191424 ++read 12288/12288 bytes at offset 9191424 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9228288 ++read 12288/12288 bytes at offset 9228288 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9265152 ++read 12288/12288 bytes at offset 9265152 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9302016 ++read 12288/12288 bytes at offset 9302016 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9338880 ++read 12288/12288 bytes at offset 9338880 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9375744 ++read 12288/12288 bytes at offset 9375744 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 9412608 ++read 12288/12288 bytes at offset 9412608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 4096/4096 bytes at offset 32768 ++=== IO: pattern 165 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1064960 ++read 4096/4096 bytes at offset 1064960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1101824 ++read 4096/4096 bytes at offset 1101824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1138688 ++read 4096/4096 bytes at offset 1138688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1175552 ++read 4096/4096 bytes at offset 1175552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1212416 ++read 4096/4096 bytes at offset 1212416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1249280 ++read 4096/4096 bytes at offset 1249280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1286144 ++read 4096/4096 bytes at offset 1286144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1323008 ++read 4096/4096 bytes at offset 1323008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1359872 ++read 4096/4096 bytes at offset 1359872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1396736 ++read 4096/4096 bytes at offset 1396736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1433600 ++read 4096/4096 bytes at offset 1433600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1470464 ++read 4096/4096 bytes at offset 1470464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1507328 ++read 4096/4096 bytes at offset 1507328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1544192 ++read 4096/4096 bytes at offset 1544192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1581056 ++read 4096/4096 bytes at offset 1581056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1617920 ++read 4096/4096 bytes at offset 1617920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1654784 ++read 4096/4096 bytes at offset 1654784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1691648 ++read 4096/4096 bytes at offset 1691648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1728512 ++read 4096/4096 bytes at offset 1728512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1765376 ++read 4096/4096 bytes at offset 1765376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1802240 ++read 4096/4096 bytes at offset 1802240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1839104 ++read 4096/4096 bytes at offset 1839104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1875968 ++read 4096/4096 bytes at offset 1875968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1912832 ++read 4096/4096 bytes at offset 1912832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1949696 ++read 4096/4096 bytes at offset 1949696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1986560 ++read 4096/4096 bytes at offset 1986560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2023424 ++read 4096/4096 bytes at offset 2023424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2060288 ++read 4096/4096 bytes at offset 2060288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2097152 ++read 4096/4096 bytes at offset 2097152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2134016 ++read 4096/4096 bytes at offset 2134016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2170880 ++read 4096/4096 bytes at offset 2170880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2207744 ++read 4096/4096 bytes at offset 2207744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2244608 ++read 4096/4096 bytes at offset 2244608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2281472 ++read 4096/4096 bytes at offset 2281472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2318336 ++read 4096/4096 bytes at offset 2318336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2355200 ++read 4096/4096 bytes at offset 2355200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2392064 ++read 4096/4096 bytes at offset 2392064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2428928 ++read 4096/4096 bytes at offset 2428928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2465792 ++read 4096/4096 bytes at offset 2465792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2502656 ++read 4096/4096 bytes at offset 2502656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2539520 ++read 4096/4096 bytes at offset 2539520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2576384 ++read 4096/4096 bytes at offset 2576384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2613248 ++read 4096/4096 bytes at offset 2613248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2650112 ++read 4096/4096 bytes at offset 2650112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2686976 ++read 4096/4096 bytes at offset 2686976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2723840 ++read 4096/4096 bytes at offset 2723840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2760704 ++read 4096/4096 bytes at offset 2760704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2797568 ++read 4096/4096 bytes at offset 2797568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2834432 ++read 4096/4096 bytes at offset 2834432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2871296 ++read 4096/4096 bytes at offset 2871296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2908160 ++read 4096/4096 bytes at offset 2908160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2945024 ++read 4096/4096 bytes at offset 2945024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2981888 ++read 4096/4096 bytes at offset 2981888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3018752 ++read 4096/4096 bytes at offset 3018752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3055616 ++read 4096/4096 bytes at offset 3055616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3092480 ++read 4096/4096 bytes at offset 3092480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3129344 ++read 4096/4096 bytes at offset 3129344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3166208 ++read 4096/4096 bytes at offset 3166208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3203072 ++read 4096/4096 bytes at offset 3203072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3239936 ++read 4096/4096 bytes at offset 3239936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3276800 ++read 4096/4096 bytes at offset 3276800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3313664 ++read 4096/4096 bytes at offset 3313664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3350528 ++read 4096/4096 bytes at offset 3350528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3387392 ++read 4096/4096 bytes at offset 3387392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3424256 ++read 4096/4096 bytes at offset 3424256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3461120 ++read 4096/4096 bytes at offset 3461120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3497984 ++read 4096/4096 bytes at offset 3497984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3534848 ++read 4096/4096 bytes at offset 3534848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3571712 ++read 4096/4096 bytes at offset 3571712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3608576 ++read 4096/4096 bytes at offset 3608576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3645440 ++read 4096/4096 bytes at offset 3645440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3682304 ++read 4096/4096 bytes at offset 3682304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3719168 ++read 4096/4096 bytes at offset 3719168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3756032 ++read 4096/4096 bytes at offset 3756032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3792896 ++read 4096/4096 bytes at offset 3792896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3829760 ++read 4096/4096 bytes at offset 3829760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3866624 ++read 4096/4096 bytes at offset 3866624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3903488 ++read 4096/4096 bytes at offset 3903488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3940352 ++read 4096/4096 bytes at offset 3940352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3977216 ++read 4096/4096 bytes at offset 3977216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4014080 ++read 4096/4096 bytes at offset 4014080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4050944 ++read 4096/4096 bytes at offset 4050944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4087808 ++read 4096/4096 bytes at offset 4087808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4124672 ++read 4096/4096 bytes at offset 4124672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4161536 ++read 4096/4096 bytes at offset 4161536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4198400 ++read 4096/4096 bytes at offset 4198400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4235264 ++read 4096/4096 bytes at offset 4235264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4272128 ++read 4096/4096 bytes at offset 4272128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4308992 ++read 4096/4096 bytes at offset 4308992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4345856 ++read 4096/4096 bytes at offset 4345856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4382720 ++read 4096/4096 bytes at offset 4382720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4419584 ++read 4096/4096 bytes at offset 4419584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4456448 ++read 4096/4096 bytes at offset 4456448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4493312 ++read 4096/4096 bytes at offset 4493312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4530176 ++read 4096/4096 bytes at offset 4530176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4567040 ++read 4096/4096 bytes at offset 4567040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4603904 ++read 4096/4096 bytes at offset 4603904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4640768 ++read 4096/4096 bytes at offset 4640768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4677632 ++read 4096/4096 bytes at offset 4677632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4714496 ++read 4096/4096 bytes at offset 4714496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4751360 ++read 4096/4096 bytes at offset 4751360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4788224 ++read 4096/4096 bytes at offset 4788224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4825088 ++read 4096/4096 bytes at offset 4825088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4861952 ++read 4096/4096 bytes at offset 4861952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4898816 ++read 4096/4096 bytes at offset 4898816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4935680 ++read 4096/4096 bytes at offset 4935680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4972544 ++read 4096/4096 bytes at offset 4972544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5009408 ++read 4096/4096 bytes at offset 5009408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5046272 ++read 4096/4096 bytes at offset 5046272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5083136 ++read 4096/4096 bytes at offset 5083136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5120000 ++read 4096/4096 bytes at offset 5120000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5156864 ++read 4096/4096 bytes at offset 5156864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5193728 ++read 4096/4096 bytes at offset 5193728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5230592 ++read 4096/4096 bytes at offset 5230592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5267456 ++read 4096/4096 bytes at offset 5267456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5304320 ++read 4096/4096 bytes at offset 5304320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5341184 ++read 4096/4096 bytes at offset 5341184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5378048 ++read 4096/4096 bytes at offset 5378048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5414912 ++read 4096/4096 bytes at offset 5414912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5451776 ++read 4096/4096 bytes at offset 5451776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5488640 ++read 4096/4096 bytes at offset 5488640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5525504 ++read 4096/4096 bytes at offset 5525504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5562368 ++read 4096/4096 bytes at offset 5562368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5599232 ++read 4096/4096 bytes at offset 5599232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5636096 ++read 4096/4096 bytes at offset 5636096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5672960 ++read 4096/4096 bytes at offset 5672960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5709824 ++read 4096/4096 bytes at offset 5709824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5746688 ++read 4096/4096 bytes at offset 5746688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5783552 ++read 4096/4096 bytes at offset 5783552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5820416 ++read 4096/4096 bytes at offset 5820416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5857280 ++read 4096/4096 bytes at offset 5857280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5894144 ++read 4096/4096 bytes at offset 5894144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5931008 ++read 4096/4096 bytes at offset 5931008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5967872 ++read 4096/4096 bytes at offset 5967872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6004736 ++read 4096/4096 bytes at offset 6004736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6041600 ++read 4096/4096 bytes at offset 6041600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6078464 ++read 4096/4096 bytes at offset 6078464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6115328 ++read 4096/4096 bytes at offset 6115328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6152192 ++read 4096/4096 bytes at offset 6152192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6189056 ++read 4096/4096 bytes at offset 6189056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6225920 ++read 4096/4096 bytes at offset 6225920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6262784 ++read 4096/4096 bytes at offset 6262784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6299648 ++read 4096/4096 bytes at offset 6299648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6336512 ++read 4096/4096 bytes at offset 6336512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6373376 ++read 4096/4096 bytes at offset 6373376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6410240 ++read 4096/4096 bytes at offset 6410240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6447104 ++read 4096/4096 bytes at offset 6447104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6483968 ++read 4096/4096 bytes at offset 6483968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6520832 ++read 4096/4096 bytes at offset 6520832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6557696 ++read 4096/4096 bytes at offset 6557696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6594560 ++read 4096/4096 bytes at offset 6594560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6631424 ++read 4096/4096 bytes at offset 6631424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6668288 ++read 4096/4096 bytes at offset 6668288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6705152 ++read 4096/4096 bytes at offset 6705152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6742016 ++read 4096/4096 bytes at offset 6742016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6778880 ++read 4096/4096 bytes at offset 6778880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6815744 ++read 4096/4096 bytes at offset 6815744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6852608 ++read 4096/4096 bytes at offset 6852608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6889472 ++read 4096/4096 bytes at offset 6889472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6926336 ++read 4096/4096 bytes at offset 6926336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6963200 ++read 4096/4096 bytes at offset 6963200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7000064 ++read 4096/4096 bytes at offset 7000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7036928 ++read 4096/4096 bytes at offset 7036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7073792 ++read 4096/4096 bytes at offset 7073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7110656 ++read 4096/4096 bytes at offset 7110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7147520 ++read 4096/4096 bytes at offset 7147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7184384 ++read 4096/4096 bytes at offset 7184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7221248 ++read 4096/4096 bytes at offset 7221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7258112 ++read 4096/4096 bytes at offset 7258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7294976 ++read 4096/4096 bytes at offset 7294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7331840 ++read 4096/4096 bytes at offset 7331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7368704 ++read 4096/4096 bytes at offset 7368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7405568 ++read 4096/4096 bytes at offset 7405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7442432 ++read 4096/4096 bytes at offset 7442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7479296 ++read 4096/4096 bytes at offset 7479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7516160 ++read 4096/4096 bytes at offset 7516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7553024 ++read 4096/4096 bytes at offset 7553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7589888 ++read 4096/4096 bytes at offset 7589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7626752 ++read 4096/4096 bytes at offset 7626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7663616 ++read 4096/4096 bytes at offset 7663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7700480 ++read 4096/4096 bytes at offset 7700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7737344 ++read 4096/4096 bytes at offset 7737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7774208 ++read 4096/4096 bytes at offset 7774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7811072 ++read 4096/4096 bytes at offset 7811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7847936 ++read 4096/4096 bytes at offset 7847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7884800 ++read 4096/4096 bytes at offset 7884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7921664 ++read 4096/4096 bytes at offset 7921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7958528 ++read 4096/4096 bytes at offset 7958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7995392 ++read 4096/4096 bytes at offset 7995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8032256 ++read 4096/4096 bytes at offset 8032256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8069120 ++read 4096/4096 bytes at offset 8069120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8105984 ++read 4096/4096 bytes at offset 8105984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8142848 ++read 4096/4096 bytes at offset 8142848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8179712 ++read 4096/4096 bytes at offset 8179712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8216576 ++read 4096/4096 bytes at offset 8216576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8253440 ++read 4096/4096 bytes at offset 8253440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8290304 ++read 4096/4096 bytes at offset 8290304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8327168 ++read 4096/4096 bytes at offset 8327168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8364032 ++read 4096/4096 bytes at offset 8364032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8400896 ++read 4096/4096 bytes at offset 8400896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8437760 ++read 4096/4096 bytes at offset 8437760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8474624 ++read 4096/4096 bytes at offset 8474624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8511488 ++read 4096/4096 bytes at offset 8511488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8548352 ++read 4096/4096 bytes at offset 8548352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8585216 ++read 4096/4096 bytes at offset 8585216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8622080 ++read 4096/4096 bytes at offset 8622080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8658944 ++read 4096/4096 bytes at offset 8658944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8695808 ++read 4096/4096 bytes at offset 8695808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8732672 ++read 4096/4096 bytes at offset 8732672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8769536 ++read 4096/4096 bytes at offset 8769536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8806400 ++read 4096/4096 bytes at offset 8806400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8843264 ++read 4096/4096 bytes at offset 8843264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8880128 ++read 4096/4096 bytes at offset 8880128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8916992 ++read 4096/4096 bytes at offset 8916992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8953856 ++read 4096/4096 bytes at offset 8953856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8990720 ++read 4096/4096 bytes at offset 8990720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9027584 ++read 4096/4096 bytes at offset 9027584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9064448 ++read 4096/4096 bytes at offset 9064448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9101312 ++read 4096/4096 bytes at offset 9101312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9138176 ++read 4096/4096 bytes at offset 9138176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9175040 ++read 4096/4096 bytes at offset 9175040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9211904 ++read 4096/4096 bytes at offset 9211904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9248768 ++read 4096/4096 bytes at offset 9248768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9285632 ++read 4096/4096 bytes at offset 9285632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9322496 ++read 4096/4096 bytes at offset 9322496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9359360 ++read 4096/4096 bytes at offset 9359360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9396224 ++read 4096/4096 bytes at offset 9396224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9433088 ++read 4096/4096 bytes at offset 9433088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1077248 ++read 4096/4096 bytes at offset 1077248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1114112 ++read 4096/4096 bytes at offset 1114112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1150976 ++read 4096/4096 bytes at offset 1150976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1187840 ++read 4096/4096 bytes at offset 1187840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1224704 ++read 4096/4096 bytes at offset 1224704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1261568 ++read 4096/4096 bytes at offset 1261568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1298432 ++read 4096/4096 bytes at offset 1298432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1335296 ++read 4096/4096 bytes at offset 1335296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1372160 ++read 4096/4096 bytes at offset 1372160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1409024 ++read 4096/4096 bytes at offset 1409024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1445888 ++read 4096/4096 bytes at offset 1445888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1482752 ++read 4096/4096 bytes at offset 1482752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1519616 ++read 4096/4096 bytes at offset 1519616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1556480 ++read 4096/4096 bytes at offset 1556480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1593344 ++read 4096/4096 bytes at offset 1593344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1630208 ++read 4096/4096 bytes at offset 1630208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1667072 ++read 4096/4096 bytes at offset 1667072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1703936 ++read 4096/4096 bytes at offset 1703936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1740800 ++read 4096/4096 bytes at offset 1740800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1777664 ++read 4096/4096 bytes at offset 1777664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1814528 ++read 4096/4096 bytes at offset 1814528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1851392 ++read 4096/4096 bytes at offset 1851392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1888256 ++read 4096/4096 bytes at offset 1888256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1925120 ++read 4096/4096 bytes at offset 1925120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1961984 ++read 4096/4096 bytes at offset 1961984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1998848 ++read 4096/4096 bytes at offset 1998848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2035712 ++read 4096/4096 bytes at offset 2035712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2072576 ++read 4096/4096 bytes at offset 2072576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2109440 ++read 4096/4096 bytes at offset 2109440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2146304 ++read 4096/4096 bytes at offset 2146304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2183168 ++read 4096/4096 bytes at offset 2183168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2220032 ++read 4096/4096 bytes at offset 2220032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2256896 ++read 4096/4096 bytes at offset 2256896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2293760 ++read 4096/4096 bytes at offset 2293760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2330624 ++read 4096/4096 bytes at offset 2330624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2367488 ++read 4096/4096 bytes at offset 2367488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2404352 ++read 4096/4096 bytes at offset 2404352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2441216 ++read 4096/4096 bytes at offset 2441216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2478080 ++read 4096/4096 bytes at offset 2478080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2514944 ++read 4096/4096 bytes at offset 2514944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2551808 ++read 4096/4096 bytes at offset 2551808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2588672 ++read 4096/4096 bytes at offset 2588672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2625536 ++read 4096/4096 bytes at offset 2625536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2662400 ++read 4096/4096 bytes at offset 2662400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2699264 ++read 4096/4096 bytes at offset 2699264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2736128 ++read 4096/4096 bytes at offset 2736128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2772992 ++read 4096/4096 bytes at offset 2772992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2809856 ++read 4096/4096 bytes at offset 2809856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2846720 ++read 4096/4096 bytes at offset 2846720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2883584 ++read 4096/4096 bytes at offset 2883584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2920448 ++read 4096/4096 bytes at offset 2920448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2957312 ++read 4096/4096 bytes at offset 2957312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 2994176 ++read 4096/4096 bytes at offset 2994176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3031040 ++read 4096/4096 bytes at offset 3031040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3067904 ++read 4096/4096 bytes at offset 3067904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3104768 ++read 4096/4096 bytes at offset 3104768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3141632 ++read 4096/4096 bytes at offset 3141632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3178496 ++read 4096/4096 bytes at offset 3178496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3215360 ++read 4096/4096 bytes at offset 3215360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3252224 ++read 4096/4096 bytes at offset 3252224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3289088 ++read 4096/4096 bytes at offset 3289088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3325952 ++read 4096/4096 bytes at offset 3325952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3362816 ++read 4096/4096 bytes at offset 3362816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3399680 ++read 4096/4096 bytes at offset 3399680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3436544 ++read 4096/4096 bytes at offset 3436544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3473408 ++read 4096/4096 bytes at offset 3473408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3510272 ++read 4096/4096 bytes at offset 3510272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3547136 ++read 4096/4096 bytes at offset 3547136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3584000 ++read 4096/4096 bytes at offset 3584000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3620864 ++read 4096/4096 bytes at offset 3620864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3657728 ++read 4096/4096 bytes at offset 3657728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3694592 ++read 4096/4096 bytes at offset 3694592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3731456 ++read 4096/4096 bytes at offset 3731456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3768320 ++read 4096/4096 bytes at offset 3768320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3805184 ++read 4096/4096 bytes at offset 3805184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3842048 ++read 4096/4096 bytes at offset 3842048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3878912 ++read 4096/4096 bytes at offset 3878912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3915776 ++read 4096/4096 bytes at offset 3915776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3952640 ++read 4096/4096 bytes at offset 3952640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 3989504 ++read 4096/4096 bytes at offset 3989504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4026368 ++read 4096/4096 bytes at offset 4026368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4063232 ++read 4096/4096 bytes at offset 4063232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4100096 ++read 4096/4096 bytes at offset 4100096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4136960 ++read 4096/4096 bytes at offset 4136960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4173824 ++read 4096/4096 bytes at offset 4173824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4210688 ++read 4096/4096 bytes at offset 4210688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4247552 ++read 4096/4096 bytes at offset 4247552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4284416 ++read 4096/4096 bytes at offset 4284416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4321280 ++read 4096/4096 bytes at offset 4321280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4358144 ++read 4096/4096 bytes at offset 4358144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4395008 ++read 4096/4096 bytes at offset 4395008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4431872 ++read 4096/4096 bytes at offset 4431872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4468736 ++read 4096/4096 bytes at offset 4468736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4505600 ++read 4096/4096 bytes at offset 4505600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4542464 ++read 4096/4096 bytes at offset 4542464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4579328 ++read 4096/4096 bytes at offset 4579328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4616192 ++read 4096/4096 bytes at offset 4616192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4653056 ++read 4096/4096 bytes at offset 4653056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4689920 ++read 4096/4096 bytes at offset 4689920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4726784 ++read 4096/4096 bytes at offset 4726784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4763648 ++read 4096/4096 bytes at offset 4763648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4800512 ++read 4096/4096 bytes at offset 4800512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4837376 ++read 4096/4096 bytes at offset 4837376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4874240 ++read 4096/4096 bytes at offset 4874240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4911104 ++read 4096/4096 bytes at offset 4911104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4947968 ++read 4096/4096 bytes at offset 4947968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4984832 ++read 4096/4096 bytes at offset 4984832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5021696 ++read 4096/4096 bytes at offset 5021696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5058560 ++read 4096/4096 bytes at offset 5058560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5095424 ++read 4096/4096 bytes at offset 5095424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5132288 ++read 4096/4096 bytes at offset 5132288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5169152 ++read 4096/4096 bytes at offset 5169152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5206016 ++read 4096/4096 bytes at offset 5206016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5242880 ++read 4096/4096 bytes at offset 5242880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5279744 ++read 4096/4096 bytes at offset 5279744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5316608 ++read 4096/4096 bytes at offset 5316608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5353472 ++read 4096/4096 bytes at offset 5353472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5390336 ++read 4096/4096 bytes at offset 5390336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5427200 ++read 4096/4096 bytes at offset 5427200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5464064 ++read 4096/4096 bytes at offset 5464064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5500928 ++read 4096/4096 bytes at offset 5500928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5537792 ++read 4096/4096 bytes at offset 5537792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5574656 ++read 4096/4096 bytes at offset 5574656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5611520 ++read 4096/4096 bytes at offset 5611520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5648384 ++read 4096/4096 bytes at offset 5648384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5685248 ++read 4096/4096 bytes at offset 5685248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5722112 ++read 4096/4096 bytes at offset 5722112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5758976 ++read 4096/4096 bytes at offset 5758976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5795840 ++read 4096/4096 bytes at offset 5795840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5832704 ++read 4096/4096 bytes at offset 5832704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5869568 ++read 4096/4096 bytes at offset 5869568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5906432 ++read 4096/4096 bytes at offset 5906432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5943296 ++read 4096/4096 bytes at offset 5943296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 5980160 ++read 4096/4096 bytes at offset 5980160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6017024 ++read 4096/4096 bytes at offset 6017024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6053888 ++read 4096/4096 bytes at offset 6053888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6090752 ++read 4096/4096 bytes at offset 6090752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6127616 ++read 4096/4096 bytes at offset 6127616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6164480 ++read 4096/4096 bytes at offset 6164480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6201344 ++read 4096/4096 bytes at offset 6201344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6238208 ++read 4096/4096 bytes at offset 6238208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6275072 ++read 4096/4096 bytes at offset 6275072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6311936 ++read 4096/4096 bytes at offset 6311936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6348800 ++read 4096/4096 bytes at offset 6348800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6385664 ++read 4096/4096 bytes at offset 6385664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6422528 ++read 4096/4096 bytes at offset 6422528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6459392 ++read 4096/4096 bytes at offset 6459392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6496256 ++read 4096/4096 bytes at offset 6496256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6533120 ++read 4096/4096 bytes at offset 6533120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6569984 ++read 4096/4096 bytes at offset 6569984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6606848 ++read 4096/4096 bytes at offset 6606848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6643712 ++read 4096/4096 bytes at offset 6643712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6680576 ++read 4096/4096 bytes at offset 6680576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6717440 ++read 4096/4096 bytes at offset 6717440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6754304 ++read 4096/4096 bytes at offset 6754304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6791168 ++read 4096/4096 bytes at offset 6791168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6828032 ++read 4096/4096 bytes at offset 6828032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6864896 ++read 4096/4096 bytes at offset 6864896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6901760 ++read 4096/4096 bytes at offset 6901760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6938624 ++read 4096/4096 bytes at offset 6938624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 6975488 ++read 4096/4096 bytes at offset 6975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7012352 ++read 4096/4096 bytes at offset 7012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7049216 ++read 4096/4096 bytes at offset 7049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7086080 ++read 4096/4096 bytes at offset 7086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7122944 ++read 4096/4096 bytes at offset 7122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7159808 ++read 4096/4096 bytes at offset 7159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7196672 ++read 4096/4096 bytes at offset 7196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7233536 ++read 4096/4096 bytes at offset 7233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7270400 ++read 4096/4096 bytes at offset 7270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7307264 ++read 4096/4096 bytes at offset 7307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7344128 ++read 4096/4096 bytes at offset 7344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7380992 ++read 4096/4096 bytes at offset 7380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7417856 ++read 4096/4096 bytes at offset 7417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7454720 ++read 4096/4096 bytes at offset 7454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7491584 ++read 4096/4096 bytes at offset 7491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7528448 ++read 4096/4096 bytes at offset 7528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7565312 ++read 4096/4096 bytes at offset 7565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7602176 ++read 4096/4096 bytes at offset 7602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7639040 ++read 4096/4096 bytes at offset 7639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7675904 ++read 4096/4096 bytes at offset 7675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7712768 ++read 4096/4096 bytes at offset 7712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7749632 ++read 4096/4096 bytes at offset 7749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7786496 ++read 4096/4096 bytes at offset 7786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7823360 ++read 4096/4096 bytes at offset 7823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7860224 ++read 4096/4096 bytes at offset 7860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7897088 ++read 4096/4096 bytes at offset 7897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7933952 ++read 4096/4096 bytes at offset 7933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 7970816 ++read 4096/4096 bytes at offset 7970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8007680 ++read 4096/4096 bytes at offset 8007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8044544 ++read 4096/4096 bytes at offset 8044544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8081408 ++read 4096/4096 bytes at offset 8081408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8118272 ++read 4096/4096 bytes at offset 8118272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8155136 ++read 4096/4096 bytes at offset 8155136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192000 ++read 4096/4096 bytes at offset 8192000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8228864 ++read 4096/4096 bytes at offset 8228864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8265728 ++read 4096/4096 bytes at offset 8265728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8302592 ++read 4096/4096 bytes at offset 8302592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8339456 ++read 4096/4096 bytes at offset 8339456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8376320 ++read 4096/4096 bytes at offset 8376320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8413184 ++read 4096/4096 bytes at offset 8413184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8450048 ++read 4096/4096 bytes at offset 8450048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8486912 ++read 4096/4096 bytes at offset 8486912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8523776 ++read 4096/4096 bytes at offset 8523776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8560640 ++read 4096/4096 bytes at offset 8560640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8597504 ++read 4096/4096 bytes at offset 8597504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8634368 ++read 4096/4096 bytes at offset 8634368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8671232 ++read 4096/4096 bytes at offset 8671232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8708096 ++read 4096/4096 bytes at offset 8708096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8744960 ++read 4096/4096 bytes at offset 8744960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8781824 ++read 4096/4096 bytes at offset 8781824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8818688 ++read 4096/4096 bytes at offset 8818688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8855552 ++read 4096/4096 bytes at offset 8855552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8892416 ++read 4096/4096 bytes at offset 8892416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8929280 ++read 4096/4096 bytes at offset 8929280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8966144 ++read 4096/4096 bytes at offset 8966144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9003008 ++read 4096/4096 bytes at offset 9003008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9039872 ++read 4096/4096 bytes at offset 9039872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9076736 ++read 4096/4096 bytes at offset 9076736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9113600 ++read 4096/4096 bytes at offset 9113600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9150464 ++read 4096/4096 bytes at offset 9150464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9187328 ++read 4096/4096 bytes at offset 9187328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9224192 ++read 4096/4096 bytes at offset 9224192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9261056 ++read 4096/4096 bytes at offset 9261056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9297920 ++read 4096/4096 bytes at offset 9297920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9334784 ++read 4096/4096 bytes at offset 9334784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9371648 ++read 4096/4096 bytes at offset 9371648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 9408512 ++read 4096/4096 bytes at offset 9408512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 24576 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 24576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 61440 ++read 8192/8192 bytes at offset 61440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 98304 ++read 8192/8192 bytes at offset 98304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 135168 ++read 8192/8192 bytes at offset 135168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 172032 ++read 8192/8192 bytes at offset 172032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 208896 ++read 8192/8192 bytes at offset 208896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 245760 ++read 8192/8192 bytes at offset 245760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 282624 ++read 8192/8192 bytes at offset 282624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 319488 ++read 8192/8192 bytes at offset 319488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 356352 ++read 8192/8192 bytes at offset 356352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 393216 ++read 8192/8192 bytes at offset 393216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 430080 ++read 8192/8192 bytes at offset 430080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 466944 ++read 8192/8192 bytes at offset 466944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 503808 ++read 8192/8192 bytes at offset 503808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 540672 ++read 8192/8192 bytes at offset 540672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 577536 ++read 8192/8192 bytes at offset 577536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614400 ++read 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 651264 ++read 8192/8192 bytes at offset 651264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 688128 ++read 8192/8192 bytes at offset 688128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 724992 ++read 8192/8192 bytes at offset 724992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 761856 ++read 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 798720 ++read 8192/8192 bytes at offset 798720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 835584 ++read 8192/8192 bytes at offset 835584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 872448 ++read 8192/8192 bytes at offset 872448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909312 ++read 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 946176 ++read 8192/8192 bytes at offset 946176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 983040 ++read 8192/8192 bytes at offset 983040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1019904 ++read 8192/8192 bytes at offset 1019904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1056768 ++read 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1093632 ++read 8192/8192 bytes at offset 1093632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1130496 ++read 8192/8192 bytes at offset 1130496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1167360 ++read 8192/8192 bytes at offset 1167360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1204224 ++read 8192/8192 bytes at offset 1204224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1241088 ++read 8192/8192 bytes at offset 1241088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1277952 ++read 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1314816 ++read 8192/8192 bytes at offset 1314816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1351680 ++read 8192/8192 bytes at offset 1351680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1388544 ++read 8192/8192 bytes at offset 1388544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425408 ++read 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1462272 ++read 8192/8192 bytes at offset 1462272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1499136 ++read 8192/8192 bytes at offset 1499136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1536000 ++read 8192/8192 bytes at offset 1536000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1572864 ++read 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1609728 ++read 8192/8192 bytes at offset 1609728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1646592 ++read 8192/8192 bytes at offset 1646592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1683456 ++read 8192/8192 bytes at offset 1683456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720320 ++read 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1757184 ++read 8192/8192 bytes at offset 1757184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1794048 ++read 8192/8192 bytes at offset 1794048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1830912 ++read 8192/8192 bytes at offset 1830912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1867776 ++read 8192/8192 bytes at offset 1867776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1904640 ++read 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1941504 ++read 8192/8192 bytes at offset 1941504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1978368 ++read 8192/8192 bytes at offset 1978368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2015232 ++read 8192/8192 bytes at offset 2015232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052096 ++read 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2088960 ++read 8192/8192 bytes at offset 2088960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2125824 ++read 8192/8192 bytes at offset 2125824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2162688 ++read 8192/8192 bytes at offset 2162688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2199552 ++read 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2236416 ++read 8192/8192 bytes at offset 2236416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2273280 ++read 8192/8192 bytes at offset 2273280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2310144 ++read 8192/8192 bytes at offset 2310144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347008 ++read 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2383872 ++read 8192/8192 bytes at offset 2383872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2420736 ++read 8192/8192 bytes at offset 2420736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2457600 ++read 8192/8192 bytes at offset 2457600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2494464 ++read 8192/8192 bytes at offset 2494464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2531328 ++read 8192/8192 bytes at offset 2531328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2568192 ++read 8192/8192 bytes at offset 2568192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2605056 ++read 8192/8192 bytes at offset 2605056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2641920 ++read 8192/8192 bytes at offset 2641920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2678784 ++read 8192/8192 bytes at offset 2678784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2715648 ++read 8192/8192 bytes at offset 2715648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2752512 ++read 8192/8192 bytes at offset 2752512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2789376 ++read 8192/8192 bytes at offset 2789376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2826240 ++read 8192/8192 bytes at offset 2826240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2863104 ++read 8192/8192 bytes at offset 2863104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2899968 ++read 8192/8192 bytes at offset 2899968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2936832 ++read 8192/8192 bytes at offset 2936832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2973696 ++read 8192/8192 bytes at offset 2973696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3010560 ++read 8192/8192 bytes at offset 3010560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3047424 ++read 8192/8192 bytes at offset 3047424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3084288 ++read 8192/8192 bytes at offset 3084288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3121152 ++read 8192/8192 bytes at offset 3121152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3158016 ++read 8192/8192 bytes at offset 3158016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3194880 ++read 8192/8192 bytes at offset 3194880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3231744 ++read 8192/8192 bytes at offset 3231744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3268608 ++read 8192/8192 bytes at offset 3268608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3305472 ++read 8192/8192 bytes at offset 3305472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3342336 ++read 8192/8192 bytes at offset 3342336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3379200 ++read 8192/8192 bytes at offset 3379200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3416064 ++read 8192/8192 bytes at offset 3416064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3452928 ++read 8192/8192 bytes at offset 3452928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3489792 ++read 8192/8192 bytes at offset 3489792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3526656 ++read 8192/8192 bytes at offset 3526656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3563520 ++read 8192/8192 bytes at offset 3563520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3600384 ++read 8192/8192 bytes at offset 3600384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3637248 ++read 8192/8192 bytes at offset 3637248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3674112 ++read 8192/8192 bytes at offset 3674112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3710976 ++read 8192/8192 bytes at offset 3710976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3747840 ++read 8192/8192 bytes at offset 3747840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3784704 ++read 8192/8192 bytes at offset 3784704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3821568 ++read 8192/8192 bytes at offset 3821568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3858432 ++read 8192/8192 bytes at offset 3858432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3895296 ++read 8192/8192 bytes at offset 3895296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3932160 ++read 8192/8192 bytes at offset 3932160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 3969024 ++read 8192/8192 bytes at offset 3969024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4005888 ++read 8192/8192 bytes at offset 4005888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4042752 ++read 8192/8192 bytes at offset 4042752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4079616 ++read 8192/8192 bytes at offset 4079616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4116480 ++read 8192/8192 bytes at offset 4116480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4153344 ++read 8192/8192 bytes at offset 4153344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4190208 ++read 8192/8192 bytes at offset 4190208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4227072 ++read 8192/8192 bytes at offset 4227072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4263936 ++read 8192/8192 bytes at offset 4263936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300800 ++read 8192/8192 bytes at offset 4300800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4337664 ++read 8192/8192 bytes at offset 4337664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4374528 ++read 8192/8192 bytes at offset 4374528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4411392 ++read 8192/8192 bytes at offset 4411392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4448256 ++read 8192/8192 bytes at offset 4448256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4485120 ++read 8192/8192 bytes at offset 4485120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4521984 ++read 8192/8192 bytes at offset 4521984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4558848 ++read 8192/8192 bytes at offset 4558848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4595712 ++read 8192/8192 bytes at offset 4595712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4632576 ++read 8192/8192 bytes at offset 4632576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4669440 ++read 8192/8192 bytes at offset 4669440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4706304 ++read 8192/8192 bytes at offset 4706304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4743168 ++read 8192/8192 bytes at offset 4743168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4780032 ++read 8192/8192 bytes at offset 4780032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4816896 ++read 8192/8192 bytes at offset 4816896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4853760 ++read 8192/8192 bytes at offset 4853760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4890624 ++read 8192/8192 bytes at offset 4890624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4927488 ++read 8192/8192 bytes at offset 4927488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4964352 ++read 8192/8192 bytes at offset 4964352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5001216 ++read 8192/8192 bytes at offset 5001216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5038080 ++read 8192/8192 bytes at offset 5038080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5074944 ++read 8192/8192 bytes at offset 5074944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5111808 ++read 8192/8192 bytes at offset 5111808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5148672 ++read 8192/8192 bytes at offset 5148672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5185536 ++read 8192/8192 bytes at offset 5185536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5222400 ++read 8192/8192 bytes at offset 5222400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5259264 ++read 8192/8192 bytes at offset 5259264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5296128 ++read 8192/8192 bytes at offset 5296128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5332992 ++read 8192/8192 bytes at offset 5332992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5369856 ++read 8192/8192 bytes at offset 5369856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5406720 ++read 8192/8192 bytes at offset 5406720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5443584 ++read 8192/8192 bytes at offset 5443584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5480448 ++read 8192/8192 bytes at offset 5480448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5517312 ++read 8192/8192 bytes at offset 5517312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5554176 ++read 8192/8192 bytes at offset 5554176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5591040 ++read 8192/8192 bytes at offset 5591040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5627904 ++read 8192/8192 bytes at offset 5627904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5664768 ++read 8192/8192 bytes at offset 5664768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5701632 ++read 8192/8192 bytes at offset 5701632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5738496 ++read 8192/8192 bytes at offset 5738496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5775360 ++read 8192/8192 bytes at offset 5775360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5812224 ++read 8192/8192 bytes at offset 5812224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5849088 ++read 8192/8192 bytes at offset 5849088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5885952 ++read 8192/8192 bytes at offset 5885952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5922816 ++read 8192/8192 bytes at offset 5922816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5959680 ++read 8192/8192 bytes at offset 5959680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 5996544 ++read 8192/8192 bytes at offset 5996544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6033408 ++read 8192/8192 bytes at offset 6033408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6070272 ++read 8192/8192 bytes at offset 6070272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6107136 ++read 8192/8192 bytes at offset 6107136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6144000 ++read 8192/8192 bytes at offset 6144000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6180864 ++read 8192/8192 bytes at offset 6180864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6217728 ++read 8192/8192 bytes at offset 6217728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6254592 ++read 8192/8192 bytes at offset 6254592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6291456 ++read 8192/8192 bytes at offset 6291456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6328320 ++read 8192/8192 bytes at offset 6328320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6365184 ++read 8192/8192 bytes at offset 6365184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6402048 ++read 8192/8192 bytes at offset 6402048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6438912 ++read 8192/8192 bytes at offset 6438912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6475776 ++read 8192/8192 bytes at offset 6475776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6512640 ++read 8192/8192 bytes at offset 6512640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6549504 ++read 8192/8192 bytes at offset 6549504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6586368 ++read 8192/8192 bytes at offset 6586368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6623232 ++read 8192/8192 bytes at offset 6623232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6660096 ++read 8192/8192 bytes at offset 6660096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6696960 ++read 8192/8192 bytes at offset 6696960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6733824 ++read 8192/8192 bytes at offset 6733824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6770688 ++read 8192/8192 bytes at offset 6770688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6807552 ++read 8192/8192 bytes at offset 6807552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6844416 ++read 8192/8192 bytes at offset 6844416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6881280 ++read 8192/8192 bytes at offset 6881280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6918144 ++read 8192/8192 bytes at offset 6918144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6955008 ++read 8192/8192 bytes at offset 6955008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 6991872 ++read 8192/8192 bytes at offset 6991872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7028736 ++read 8192/8192 bytes at offset 7028736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7065600 ++read 8192/8192 bytes at offset 7065600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7102464 ++read 8192/8192 bytes at offset 7102464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7139328 ++read 8192/8192 bytes at offset 7139328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7176192 ++read 8192/8192 bytes at offset 7176192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7213056 ++read 8192/8192 bytes at offset 7213056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7249920 ++read 8192/8192 bytes at offset 7249920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7286784 ++read 8192/8192 bytes at offset 7286784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7323648 ++read 8192/8192 bytes at offset 7323648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7360512 ++read 8192/8192 bytes at offset 7360512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7397376 ++read 8192/8192 bytes at offset 7397376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7434240 ++read 8192/8192 bytes at offset 7434240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7471104 ++read 8192/8192 bytes at offset 7471104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7507968 ++read 8192/8192 bytes at offset 7507968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7544832 ++read 8192/8192 bytes at offset 7544832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7581696 ++read 8192/8192 bytes at offset 7581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7618560 ++read 8192/8192 bytes at offset 7618560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7655424 ++read 8192/8192 bytes at offset 7655424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7692288 ++read 8192/8192 bytes at offset 7692288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7729152 ++read 8192/8192 bytes at offset 7729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7766016 ++read 8192/8192 bytes at offset 7766016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7802880 ++read 8192/8192 bytes at offset 7802880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7839744 ++read 8192/8192 bytes at offset 7839744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7876608 ++read 8192/8192 bytes at offset 7876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7913472 ++read 8192/8192 bytes at offset 7913472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7950336 ++read 8192/8192 bytes at offset 7950336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 7987200 ++read 8192/8192 bytes at offset 7987200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8024064 ++read 8192/8192 bytes at offset 8024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8060928 ++read 8192/8192 bytes at offset 8060928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8097792 ++read 8192/8192 bytes at offset 8097792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8134656 ++read 8192/8192 bytes at offset 8134656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8171520 ++read 8192/8192 bytes at offset 8171520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8208384 ++read 8192/8192 bytes at offset 8208384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8245248 ++read 8192/8192 bytes at offset 8245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8282112 ++read 8192/8192 bytes at offset 8282112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8318976 ++read 8192/8192 bytes at offset 8318976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8355840 ++read 8192/8192 bytes at offset 8355840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8392704 ++read 8192/8192 bytes at offset 8392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8429568 ++read 8192/8192 bytes at offset 8429568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8466432 ++read 8192/8192 bytes at offset 8466432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8503296 ++read 8192/8192 bytes at offset 8503296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8540160 ++read 8192/8192 bytes at offset 8540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8577024 ++read 8192/8192 bytes at offset 8577024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8613888 ++read 8192/8192 bytes at offset 8613888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8650752 ++read 8192/8192 bytes at offset 8650752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8687616 ++read 8192/8192 bytes at offset 8687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8724480 ++read 8192/8192 bytes at offset 8724480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8761344 ++read 8192/8192 bytes at offset 8761344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8798208 ++read 8192/8192 bytes at offset 8798208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8835072 ++read 8192/8192 bytes at offset 8835072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8871936 ++read 8192/8192 bytes at offset 8871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8908800 ++read 8192/8192 bytes at offset 8908800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8945664 ++read 8192/8192 bytes at offset 8945664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 8982528 ++read 8192/8192 bytes at offset 8982528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9019392 ++read 8192/8192 bytes at offset 9019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9056256 ++read 8192/8192 bytes at offset 9056256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9093120 ++read 8192/8192 bytes at offset 9093120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9129984 ++read 8192/8192 bytes at offset 9129984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9166848 ++read 8192/8192 bytes at offset 9166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9203712 ++read 8192/8192 bytes at offset 9203712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9240576 ++read 8192/8192 bytes at offset 9240576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9277440 ++read 8192/8192 bytes at offset 9277440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9314304 ++read 8192/8192 bytes at offset 9314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9351168 ++read 8192/8192 bytes at offset 9351168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9388032 ++read 8192/8192 bytes at offset 9388032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 9424896 ++read 8192/8192 bytes at offset 9424896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + test2: With offset 4294967296 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296015872 ++wrote 4096/4096 bytes at offset 4296015872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296052736 ++wrote 4096/4096 bytes at offset 4296052736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296089600 ++wrote 4096/4096 bytes at offset 4296089600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296126464 ++wrote 4096/4096 bytes at offset 4296126464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296163328 ++wrote 4096/4096 bytes at offset 4296163328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296200192 ++wrote 4096/4096 bytes at offset 4296200192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296237056 ++wrote 4096/4096 bytes at offset 4296237056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296273920 ++wrote 4096/4096 bytes at offset 4296273920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296310784 ++wrote 4096/4096 bytes at offset 4296310784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296347648 ++wrote 4096/4096 bytes at offset 4296347648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296384512 ++wrote 4096/4096 bytes at offset 4296384512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296421376 ++wrote 4096/4096 bytes at offset 4296421376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296458240 ++wrote 4096/4096 bytes at offset 4296458240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296495104 ++wrote 4096/4096 bytes at offset 4296495104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296531968 ++wrote 4096/4096 bytes at offset 4296531968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296568832 ++wrote 4096/4096 bytes at offset 4296568832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296605696 ++wrote 4096/4096 bytes at offset 4296605696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296642560 ++wrote 4096/4096 bytes at offset 4296642560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296679424 ++wrote 4096/4096 bytes at offset 4296679424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296716288 ++wrote 4096/4096 bytes at offset 4296716288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296753152 ++wrote 4096/4096 bytes at offset 4296753152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296790016 ++wrote 4096/4096 bytes at offset 4296790016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296826880 ++wrote 4096/4096 bytes at offset 4296826880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296863744 ++wrote 4096/4096 bytes at offset 4296863744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296900608 ++wrote 4096/4096 bytes at offset 4296900608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296937472 ++wrote 4096/4096 bytes at offset 4296937472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296974336 ++wrote 4096/4096 bytes at offset 4296974336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297011200 ++wrote 4096/4096 bytes at offset 4297011200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297048064 ++wrote 4096/4096 bytes at offset 4297048064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297084928 ++wrote 4096/4096 bytes at offset 4297084928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297121792 ++wrote 4096/4096 bytes at offset 4297121792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297158656 ++wrote 4096/4096 bytes at offset 4297158656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297195520 ++wrote 4096/4096 bytes at offset 4297195520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297232384 ++wrote 4096/4096 bytes at offset 4297232384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297269248 ++wrote 4096/4096 bytes at offset 4297269248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297306112 ++wrote 4096/4096 bytes at offset 4297306112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297342976 ++wrote 4096/4096 bytes at offset 4297342976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297379840 ++wrote 4096/4096 bytes at offset 4297379840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297416704 ++wrote 4096/4096 bytes at offset 4297416704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297453568 ++wrote 4096/4096 bytes at offset 4297453568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297490432 ++wrote 4096/4096 bytes at offset 4297490432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297527296 ++wrote 4096/4096 bytes at offset 4297527296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297564160 ++wrote 4096/4096 bytes at offset 4297564160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297601024 ++wrote 4096/4096 bytes at offset 4297601024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297637888 ++wrote 4096/4096 bytes at offset 4297637888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297674752 ++wrote 4096/4096 bytes at offset 4297674752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297711616 ++wrote 4096/4096 bytes at offset 4297711616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297748480 ++wrote 4096/4096 bytes at offset 4297748480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297785344 ++wrote 4096/4096 bytes at offset 4297785344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297822208 ++wrote 4096/4096 bytes at offset 4297822208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297859072 ++wrote 4096/4096 bytes at offset 4297859072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297895936 ++wrote 4096/4096 bytes at offset 4297895936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297932800 ++wrote 4096/4096 bytes at offset 4297932800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297969664 ++wrote 4096/4096 bytes at offset 4297969664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298006528 ++wrote 4096/4096 bytes at offset 4298006528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298043392 ++wrote 4096/4096 bytes at offset 4298043392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298080256 ++wrote 4096/4096 bytes at offset 4298080256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298117120 ++wrote 4096/4096 bytes at offset 4298117120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298153984 ++wrote 4096/4096 bytes at offset 4298153984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298190848 ++wrote 4096/4096 bytes at offset 4298190848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298227712 ++wrote 4096/4096 bytes at offset 4298227712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298264576 ++wrote 4096/4096 bytes at offset 4298264576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298301440 ++wrote 4096/4096 bytes at offset 4298301440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298338304 ++wrote 4096/4096 bytes at offset 4298338304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298375168 ++wrote 4096/4096 bytes at offset 4298375168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298412032 ++wrote 4096/4096 bytes at offset 4298412032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298448896 ++wrote 4096/4096 bytes at offset 4298448896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298485760 ++wrote 4096/4096 bytes at offset 4298485760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298522624 ++wrote 4096/4096 bytes at offset 4298522624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298559488 ++wrote 4096/4096 bytes at offset 4298559488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298596352 ++wrote 4096/4096 bytes at offset 4298596352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298633216 ++wrote 4096/4096 bytes at offset 4298633216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298670080 ++wrote 4096/4096 bytes at offset 4298670080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298706944 ++wrote 4096/4096 bytes at offset 4298706944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298743808 ++wrote 4096/4096 bytes at offset 4298743808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298780672 ++wrote 4096/4096 bytes at offset 4298780672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298817536 ++wrote 4096/4096 bytes at offset 4298817536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298854400 ++wrote 4096/4096 bytes at offset 4298854400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298891264 ++wrote 4096/4096 bytes at offset 4298891264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298928128 ++wrote 4096/4096 bytes at offset 4298928128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298964992 ++wrote 4096/4096 bytes at offset 4298964992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299001856 ++wrote 4096/4096 bytes at offset 4299001856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299038720 ++wrote 4096/4096 bytes at offset 4299038720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299075584 ++wrote 4096/4096 bytes at offset 4299075584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299112448 ++wrote 4096/4096 bytes at offset 4299112448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299149312 ++wrote 4096/4096 bytes at offset 4299149312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299186176 ++wrote 4096/4096 bytes at offset 4299186176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299223040 ++wrote 4096/4096 bytes at offset 4299223040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299259904 ++wrote 4096/4096 bytes at offset 4299259904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299296768 ++wrote 4096/4096 bytes at offset 4299296768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299333632 ++wrote 4096/4096 bytes at offset 4299333632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299370496 ++wrote 4096/4096 bytes at offset 4299370496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299407360 ++wrote 4096/4096 bytes at offset 4299407360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299444224 ++wrote 4096/4096 bytes at offset 4299444224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299481088 ++wrote 4096/4096 bytes at offset 4299481088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299517952 ++wrote 4096/4096 bytes at offset 4299517952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299554816 ++wrote 4096/4096 bytes at offset 4299554816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299591680 ++wrote 4096/4096 bytes at offset 4299591680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299628544 ++wrote 4096/4096 bytes at offset 4299628544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299665408 ++wrote 4096/4096 bytes at offset 4299665408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299702272 ++wrote 4096/4096 bytes at offset 4299702272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299739136 ++wrote 4096/4096 bytes at offset 4299739136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299776000 ++wrote 4096/4096 bytes at offset 4299776000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299812864 ++wrote 4096/4096 bytes at offset 4299812864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299849728 ++wrote 4096/4096 bytes at offset 4299849728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299886592 ++wrote 4096/4096 bytes at offset 4299886592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299923456 ++wrote 4096/4096 bytes at offset 4299923456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299960320 ++wrote 4096/4096 bytes at offset 4299960320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299997184 ++wrote 4096/4096 bytes at offset 4299997184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300034048 ++wrote 4096/4096 bytes at offset 4300034048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300070912 ++wrote 4096/4096 bytes at offset 4300070912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300107776 ++wrote 4096/4096 bytes at offset 4300107776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300144640 ++wrote 4096/4096 bytes at offset 4300144640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300181504 ++wrote 4096/4096 bytes at offset 4300181504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300218368 ++wrote 4096/4096 bytes at offset 4300218368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300255232 ++wrote 4096/4096 bytes at offset 4300255232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300292096 ++wrote 4096/4096 bytes at offset 4300292096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300328960 ++wrote 4096/4096 bytes at offset 4300328960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300365824 ++wrote 4096/4096 bytes at offset 4300365824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300402688 ++wrote 4096/4096 bytes at offset 4300402688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300439552 ++wrote 4096/4096 bytes at offset 4300439552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300476416 ++wrote 4096/4096 bytes at offset 4300476416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300513280 ++wrote 4096/4096 bytes at offset 4300513280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300550144 ++wrote 4096/4096 bytes at offset 4300550144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300587008 ++wrote 4096/4096 bytes at offset 4300587008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300623872 ++wrote 4096/4096 bytes at offset 4300623872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300660736 ++wrote 4096/4096 bytes at offset 4300660736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300697600 ++wrote 4096/4096 bytes at offset 4300697600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300734464 ++wrote 4096/4096 bytes at offset 4300734464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300771328 ++wrote 4096/4096 bytes at offset 4300771328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300808192 ++wrote 4096/4096 bytes at offset 4300808192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300845056 ++wrote 4096/4096 bytes at offset 4300845056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300881920 ++wrote 4096/4096 bytes at offset 4300881920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300918784 ++wrote 4096/4096 bytes at offset 4300918784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300955648 ++wrote 4096/4096 bytes at offset 4300955648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300992512 ++wrote 4096/4096 bytes at offset 4300992512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301029376 ++wrote 4096/4096 bytes at offset 4301029376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301066240 ++wrote 4096/4096 bytes at offset 4301066240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301103104 ++wrote 4096/4096 bytes at offset 4301103104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301139968 ++wrote 4096/4096 bytes at offset 4301139968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301176832 ++wrote 4096/4096 bytes at offset 4301176832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301213696 ++wrote 4096/4096 bytes at offset 4301213696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301250560 ++wrote 4096/4096 bytes at offset 4301250560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301287424 ++wrote 4096/4096 bytes at offset 4301287424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301324288 ++wrote 4096/4096 bytes at offset 4301324288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301361152 ++wrote 4096/4096 bytes at offset 4301361152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301398016 ++wrote 4096/4096 bytes at offset 4301398016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301434880 ++wrote 4096/4096 bytes at offset 4301434880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301471744 ++wrote 4096/4096 bytes at offset 4301471744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301508608 ++wrote 4096/4096 bytes at offset 4301508608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301545472 ++wrote 4096/4096 bytes at offset 4301545472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301582336 ++wrote 4096/4096 bytes at offset 4301582336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301619200 ++wrote 4096/4096 bytes at offset 4301619200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301656064 ++wrote 4096/4096 bytes at offset 4301656064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301692928 ++wrote 4096/4096 bytes at offset 4301692928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301729792 ++wrote 4096/4096 bytes at offset 4301729792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301766656 ++wrote 4096/4096 bytes at offset 4301766656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301803520 ++wrote 4096/4096 bytes at offset 4301803520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301840384 ++wrote 4096/4096 bytes at offset 4301840384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301877248 ++wrote 4096/4096 bytes at offset 4301877248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301914112 ++wrote 4096/4096 bytes at offset 4301914112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301950976 ++wrote 4096/4096 bytes at offset 4301950976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301987840 ++wrote 4096/4096 bytes at offset 4301987840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302024704 ++wrote 4096/4096 bytes at offset 4302024704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302061568 ++wrote 4096/4096 bytes at offset 4302061568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302098432 ++wrote 4096/4096 bytes at offset 4302098432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302135296 ++wrote 4096/4096 bytes at offset 4302135296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302172160 ++wrote 4096/4096 bytes at offset 4302172160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302209024 ++wrote 4096/4096 bytes at offset 4302209024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302245888 ++wrote 4096/4096 bytes at offset 4302245888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302282752 ++wrote 4096/4096 bytes at offset 4302282752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302319616 ++wrote 4096/4096 bytes at offset 4302319616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302356480 ++wrote 4096/4096 bytes at offset 4302356480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302393344 ++wrote 4096/4096 bytes at offset 4302393344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302430208 ++wrote 4096/4096 bytes at offset 4302430208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302467072 ++wrote 4096/4096 bytes at offset 4302467072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302503936 ++wrote 4096/4096 bytes at offset 4302503936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302540800 ++wrote 4096/4096 bytes at offset 4302540800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302577664 ++wrote 4096/4096 bytes at offset 4302577664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302614528 ++wrote 4096/4096 bytes at offset 4302614528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302651392 ++wrote 4096/4096 bytes at offset 4302651392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302688256 ++wrote 4096/4096 bytes at offset 4302688256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302725120 ++wrote 4096/4096 bytes at offset 4302725120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302761984 ++wrote 4096/4096 bytes at offset 4302761984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302798848 ++wrote 4096/4096 bytes at offset 4302798848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302835712 ++wrote 4096/4096 bytes at offset 4302835712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302872576 ++wrote 4096/4096 bytes at offset 4302872576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302909440 ++wrote 4096/4096 bytes at offset 4302909440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302946304 ++wrote 4096/4096 bytes at offset 4302946304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302983168 ++wrote 4096/4096 bytes at offset 4302983168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303020032 ++wrote 4096/4096 bytes at offset 4303020032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303056896 ++wrote 4096/4096 bytes at offset 4303056896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303093760 ++wrote 4096/4096 bytes at offset 4303093760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303130624 ++wrote 4096/4096 bytes at offset 4303130624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303167488 ++wrote 4096/4096 bytes at offset 4303167488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303204352 ++wrote 4096/4096 bytes at offset 4303204352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303241216 ++wrote 4096/4096 bytes at offset 4303241216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303278080 ++wrote 4096/4096 bytes at offset 4303278080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303314944 ++wrote 4096/4096 bytes at offset 4303314944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303351808 ++wrote 4096/4096 bytes at offset 4303351808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303388672 ++wrote 4096/4096 bytes at offset 4303388672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303425536 ++wrote 4096/4096 bytes at offset 4303425536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303462400 ++wrote 4096/4096 bytes at offset 4303462400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303499264 ++wrote 4096/4096 bytes at offset 4303499264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303536128 ++wrote 4096/4096 bytes at offset 4303536128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303572992 ++wrote 4096/4096 bytes at offset 4303572992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303609856 ++wrote 4096/4096 bytes at offset 4303609856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303646720 ++wrote 4096/4096 bytes at offset 4303646720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303683584 ++wrote 4096/4096 bytes at offset 4303683584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303720448 ++wrote 4096/4096 bytes at offset 4303720448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303757312 ++wrote 4096/4096 bytes at offset 4303757312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303794176 ++wrote 4096/4096 bytes at offset 4303794176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303831040 ++wrote 4096/4096 bytes at offset 4303831040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303867904 ++wrote 4096/4096 bytes at offset 4303867904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303904768 ++wrote 4096/4096 bytes at offset 4303904768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303941632 ++wrote 4096/4096 bytes at offset 4303941632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303978496 ++wrote 4096/4096 bytes at offset 4303978496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304015360 ++wrote 4096/4096 bytes at offset 4304015360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304052224 ++wrote 4096/4096 bytes at offset 4304052224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304089088 ++wrote 4096/4096 bytes at offset 4304089088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304125952 ++wrote 4096/4096 bytes at offset 4304125952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304162816 ++wrote 4096/4096 bytes at offset 4304162816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304199680 ++wrote 4096/4096 bytes at offset 4304199680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304236544 ++wrote 4096/4096 bytes at offset 4304236544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304273408 ++wrote 4096/4096 bytes at offset 4304273408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304310272 ++wrote 4096/4096 bytes at offset 4304310272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304347136 ++wrote 4096/4096 bytes at offset 4304347136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304384000 ++wrote 4096/4096 bytes at offset 4304384000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296019968 ++wrote 4096/4096 bytes at offset 4296019968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296056832 ++wrote 4096/4096 bytes at offset 4296056832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296093696 ++wrote 4096/4096 bytes at offset 4296093696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296130560 ++wrote 4096/4096 bytes at offset 4296130560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296167424 ++wrote 4096/4096 bytes at offset 4296167424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296204288 ++wrote 4096/4096 bytes at offset 4296204288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296241152 ++wrote 4096/4096 bytes at offset 4296241152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296278016 ++wrote 4096/4096 bytes at offset 4296278016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296314880 ++wrote 4096/4096 bytes at offset 4296314880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296351744 ++wrote 4096/4096 bytes at offset 4296351744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296388608 ++wrote 4096/4096 bytes at offset 4296388608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296425472 ++wrote 4096/4096 bytes at offset 4296425472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296462336 ++wrote 4096/4096 bytes at offset 4296462336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296499200 ++wrote 4096/4096 bytes at offset 4296499200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296536064 ++wrote 4096/4096 bytes at offset 4296536064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296572928 ++wrote 4096/4096 bytes at offset 4296572928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296609792 ++wrote 4096/4096 bytes at offset 4296609792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296646656 ++wrote 4096/4096 bytes at offset 4296646656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296683520 ++wrote 4096/4096 bytes at offset 4296683520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296720384 ++wrote 4096/4096 bytes at offset 4296720384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296757248 ++wrote 4096/4096 bytes at offset 4296757248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296794112 ++wrote 4096/4096 bytes at offset 4296794112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296830976 ++wrote 4096/4096 bytes at offset 4296830976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296867840 ++wrote 4096/4096 bytes at offset 4296867840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296904704 ++wrote 4096/4096 bytes at offset 4296904704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296941568 ++wrote 4096/4096 bytes at offset 4296941568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296978432 ++wrote 4096/4096 bytes at offset 4296978432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297015296 ++wrote 4096/4096 bytes at offset 4297015296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297052160 ++wrote 4096/4096 bytes at offset 4297052160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297089024 ++wrote 4096/4096 bytes at offset 4297089024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297125888 ++wrote 4096/4096 bytes at offset 4297125888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297162752 ++wrote 4096/4096 bytes at offset 4297162752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297199616 ++wrote 4096/4096 bytes at offset 4297199616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297236480 ++wrote 4096/4096 bytes at offset 4297236480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297273344 ++wrote 4096/4096 bytes at offset 4297273344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297310208 ++wrote 4096/4096 bytes at offset 4297310208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297347072 ++wrote 4096/4096 bytes at offset 4297347072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297383936 ++wrote 4096/4096 bytes at offset 4297383936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297420800 ++wrote 4096/4096 bytes at offset 4297420800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297457664 ++wrote 4096/4096 bytes at offset 4297457664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297494528 ++wrote 4096/4096 bytes at offset 4297494528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297531392 ++wrote 4096/4096 bytes at offset 4297531392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297568256 ++wrote 4096/4096 bytes at offset 4297568256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297605120 ++wrote 4096/4096 bytes at offset 4297605120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297641984 ++wrote 4096/4096 bytes at offset 4297641984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297678848 ++wrote 4096/4096 bytes at offset 4297678848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297715712 ++wrote 4096/4096 bytes at offset 4297715712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297752576 ++wrote 4096/4096 bytes at offset 4297752576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297789440 ++wrote 4096/4096 bytes at offset 4297789440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297826304 ++wrote 4096/4096 bytes at offset 4297826304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297863168 ++wrote 4096/4096 bytes at offset 4297863168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297900032 ++wrote 4096/4096 bytes at offset 4297900032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297936896 ++wrote 4096/4096 bytes at offset 4297936896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297973760 ++wrote 4096/4096 bytes at offset 4297973760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298010624 ++wrote 4096/4096 bytes at offset 4298010624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298047488 ++wrote 4096/4096 bytes at offset 4298047488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298084352 ++wrote 4096/4096 bytes at offset 4298084352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298121216 ++wrote 4096/4096 bytes at offset 4298121216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298158080 ++wrote 4096/4096 bytes at offset 4298158080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298194944 ++wrote 4096/4096 bytes at offset 4298194944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298231808 ++wrote 4096/4096 bytes at offset 4298231808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298268672 ++wrote 4096/4096 bytes at offset 4298268672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298305536 ++wrote 4096/4096 bytes at offset 4298305536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298342400 ++wrote 4096/4096 bytes at offset 4298342400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298379264 ++wrote 4096/4096 bytes at offset 4298379264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298416128 ++wrote 4096/4096 bytes at offset 4298416128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298452992 ++wrote 4096/4096 bytes at offset 4298452992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298489856 ++wrote 4096/4096 bytes at offset 4298489856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298526720 ++wrote 4096/4096 bytes at offset 4298526720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298563584 ++wrote 4096/4096 bytes at offset 4298563584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298600448 ++wrote 4096/4096 bytes at offset 4298600448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298637312 ++wrote 4096/4096 bytes at offset 4298637312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298674176 ++wrote 4096/4096 bytes at offset 4298674176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298711040 ++wrote 4096/4096 bytes at offset 4298711040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298747904 ++wrote 4096/4096 bytes at offset 4298747904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298784768 ++wrote 4096/4096 bytes at offset 4298784768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298821632 ++wrote 4096/4096 bytes at offset 4298821632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298858496 ++wrote 4096/4096 bytes at offset 4298858496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298895360 ++wrote 4096/4096 bytes at offset 4298895360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298932224 ++wrote 4096/4096 bytes at offset 4298932224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298969088 ++wrote 4096/4096 bytes at offset 4298969088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299005952 ++wrote 4096/4096 bytes at offset 4299005952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299042816 ++wrote 4096/4096 bytes at offset 4299042816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299079680 ++wrote 4096/4096 bytes at offset 4299079680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299116544 ++wrote 4096/4096 bytes at offset 4299116544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299153408 ++wrote 4096/4096 bytes at offset 4299153408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299190272 ++wrote 4096/4096 bytes at offset 4299190272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299227136 ++wrote 4096/4096 bytes at offset 4299227136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299264000 ++wrote 4096/4096 bytes at offset 4299264000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299300864 ++wrote 4096/4096 bytes at offset 4299300864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299337728 ++wrote 4096/4096 bytes at offset 4299337728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299374592 ++wrote 4096/4096 bytes at offset 4299374592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299411456 ++wrote 4096/4096 bytes at offset 4299411456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299448320 ++wrote 4096/4096 bytes at offset 4299448320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299485184 ++wrote 4096/4096 bytes at offset 4299485184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299522048 ++wrote 4096/4096 bytes at offset 4299522048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299558912 ++wrote 4096/4096 bytes at offset 4299558912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299595776 ++wrote 4096/4096 bytes at offset 4299595776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299632640 ++wrote 4096/4096 bytes at offset 4299632640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299669504 ++wrote 4096/4096 bytes at offset 4299669504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299706368 ++wrote 4096/4096 bytes at offset 4299706368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299743232 ++wrote 4096/4096 bytes at offset 4299743232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299780096 ++wrote 4096/4096 bytes at offset 4299780096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299816960 ++wrote 4096/4096 bytes at offset 4299816960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299853824 ++wrote 4096/4096 bytes at offset 4299853824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299890688 ++wrote 4096/4096 bytes at offset 4299890688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299927552 ++wrote 4096/4096 bytes at offset 4299927552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299964416 ++wrote 4096/4096 bytes at offset 4299964416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300001280 ++wrote 4096/4096 bytes at offset 4300001280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300038144 ++wrote 4096/4096 bytes at offset 4300038144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300075008 ++wrote 4096/4096 bytes at offset 4300075008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300111872 ++wrote 4096/4096 bytes at offset 4300111872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300148736 ++wrote 4096/4096 bytes at offset 4300148736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300185600 ++wrote 4096/4096 bytes at offset 4300185600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300222464 ++wrote 4096/4096 bytes at offset 4300222464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300259328 ++wrote 4096/4096 bytes at offset 4300259328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300296192 ++wrote 4096/4096 bytes at offset 4300296192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300333056 ++wrote 4096/4096 bytes at offset 4300333056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300369920 ++wrote 4096/4096 bytes at offset 4300369920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300406784 ++wrote 4096/4096 bytes at offset 4300406784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300443648 ++wrote 4096/4096 bytes at offset 4300443648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300480512 ++wrote 4096/4096 bytes at offset 4300480512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300517376 ++wrote 4096/4096 bytes at offset 4300517376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300554240 ++wrote 4096/4096 bytes at offset 4300554240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300591104 ++wrote 4096/4096 bytes at offset 4300591104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300627968 ++wrote 4096/4096 bytes at offset 4300627968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300664832 ++wrote 4096/4096 bytes at offset 4300664832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300701696 ++wrote 4096/4096 bytes at offset 4300701696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300738560 ++wrote 4096/4096 bytes at offset 4300738560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300775424 ++wrote 4096/4096 bytes at offset 4300775424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300812288 ++wrote 4096/4096 bytes at offset 4300812288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300849152 ++wrote 4096/4096 bytes at offset 4300849152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300886016 ++wrote 4096/4096 bytes at offset 4300886016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300922880 ++wrote 4096/4096 bytes at offset 4300922880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300959744 ++wrote 4096/4096 bytes at offset 4300959744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300996608 ++wrote 4096/4096 bytes at offset 4300996608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301033472 ++wrote 4096/4096 bytes at offset 4301033472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301070336 ++wrote 4096/4096 bytes at offset 4301070336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301107200 ++wrote 4096/4096 bytes at offset 4301107200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301144064 ++wrote 4096/4096 bytes at offset 4301144064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301180928 ++wrote 4096/4096 bytes at offset 4301180928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301217792 ++wrote 4096/4096 bytes at offset 4301217792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301254656 ++wrote 4096/4096 bytes at offset 4301254656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301291520 ++wrote 4096/4096 bytes at offset 4301291520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301328384 ++wrote 4096/4096 bytes at offset 4301328384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301365248 ++wrote 4096/4096 bytes at offset 4301365248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301402112 ++wrote 4096/4096 bytes at offset 4301402112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301438976 ++wrote 4096/4096 bytes at offset 4301438976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301475840 ++wrote 4096/4096 bytes at offset 4301475840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301512704 ++wrote 4096/4096 bytes at offset 4301512704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301549568 ++wrote 4096/4096 bytes at offset 4301549568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301586432 ++wrote 4096/4096 bytes at offset 4301586432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301623296 ++wrote 4096/4096 bytes at offset 4301623296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301660160 ++wrote 4096/4096 bytes at offset 4301660160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301697024 ++wrote 4096/4096 bytes at offset 4301697024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301733888 ++wrote 4096/4096 bytes at offset 4301733888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301770752 ++wrote 4096/4096 bytes at offset 4301770752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301807616 ++wrote 4096/4096 bytes at offset 4301807616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301844480 ++wrote 4096/4096 bytes at offset 4301844480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301881344 ++wrote 4096/4096 bytes at offset 4301881344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301918208 ++wrote 4096/4096 bytes at offset 4301918208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301955072 ++wrote 4096/4096 bytes at offset 4301955072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301991936 ++wrote 4096/4096 bytes at offset 4301991936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302028800 ++wrote 4096/4096 bytes at offset 4302028800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302065664 ++wrote 4096/4096 bytes at offset 4302065664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302102528 ++wrote 4096/4096 bytes at offset 4302102528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302139392 ++wrote 4096/4096 bytes at offset 4302139392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302176256 ++wrote 4096/4096 bytes at offset 4302176256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302213120 ++wrote 4096/4096 bytes at offset 4302213120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302249984 ++wrote 4096/4096 bytes at offset 4302249984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302286848 ++wrote 4096/4096 bytes at offset 4302286848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302323712 ++wrote 4096/4096 bytes at offset 4302323712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302360576 ++wrote 4096/4096 bytes at offset 4302360576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302397440 ++wrote 4096/4096 bytes at offset 4302397440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302434304 ++wrote 4096/4096 bytes at offset 4302434304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302471168 ++wrote 4096/4096 bytes at offset 4302471168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302508032 ++wrote 4096/4096 bytes at offset 4302508032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302544896 ++wrote 4096/4096 bytes at offset 4302544896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302581760 ++wrote 4096/4096 bytes at offset 4302581760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302618624 ++wrote 4096/4096 bytes at offset 4302618624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302655488 ++wrote 4096/4096 bytes at offset 4302655488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302692352 ++wrote 4096/4096 bytes at offset 4302692352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302729216 ++wrote 4096/4096 bytes at offset 4302729216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302766080 ++wrote 4096/4096 bytes at offset 4302766080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302802944 ++wrote 4096/4096 bytes at offset 4302802944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302839808 ++wrote 4096/4096 bytes at offset 4302839808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302876672 ++wrote 4096/4096 bytes at offset 4302876672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302913536 ++wrote 4096/4096 bytes at offset 4302913536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302950400 ++wrote 4096/4096 bytes at offset 4302950400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302987264 ++wrote 4096/4096 bytes at offset 4302987264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303024128 ++wrote 4096/4096 bytes at offset 4303024128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303060992 ++wrote 4096/4096 bytes at offset 4303060992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303097856 ++wrote 4096/4096 bytes at offset 4303097856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303134720 ++wrote 4096/4096 bytes at offset 4303134720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303171584 ++wrote 4096/4096 bytes at offset 4303171584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303208448 ++wrote 4096/4096 bytes at offset 4303208448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303245312 ++wrote 4096/4096 bytes at offset 4303245312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303282176 ++wrote 4096/4096 bytes at offset 4303282176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303319040 ++wrote 4096/4096 bytes at offset 4303319040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303355904 ++wrote 4096/4096 bytes at offset 4303355904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303392768 ++wrote 4096/4096 bytes at offset 4303392768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303429632 ++wrote 4096/4096 bytes at offset 4303429632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303466496 ++wrote 4096/4096 bytes at offset 4303466496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303503360 ++wrote 4096/4096 bytes at offset 4303503360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303540224 ++wrote 4096/4096 bytes at offset 4303540224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303577088 ++wrote 4096/4096 bytes at offset 4303577088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303613952 ++wrote 4096/4096 bytes at offset 4303613952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303650816 ++wrote 4096/4096 bytes at offset 4303650816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303687680 ++wrote 4096/4096 bytes at offset 4303687680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303724544 ++wrote 4096/4096 bytes at offset 4303724544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303761408 ++wrote 4096/4096 bytes at offset 4303761408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303798272 ++wrote 4096/4096 bytes at offset 4303798272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303835136 ++wrote 4096/4096 bytes at offset 4303835136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303872000 ++wrote 4096/4096 bytes at offset 4303872000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303908864 ++wrote 4096/4096 bytes at offset 4303908864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303945728 ++wrote 4096/4096 bytes at offset 4303945728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303982592 ++wrote 4096/4096 bytes at offset 4303982592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304019456 ++wrote 4096/4096 bytes at offset 4304019456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304056320 ++wrote 4096/4096 bytes at offset 4304056320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304093184 ++wrote 4096/4096 bytes at offset 4304093184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304130048 ++wrote 4096/4096 bytes at offset 4304130048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304166912 ++wrote 4096/4096 bytes at offset 4304166912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304203776 ++wrote 4096/4096 bytes at offset 4304203776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304240640 ++wrote 4096/4096 bytes at offset 4304240640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304277504 ++wrote 4096/4096 bytes at offset 4304277504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304314368 ++wrote 4096/4096 bytes at offset 4304314368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304351232 ++wrote 4096/4096 bytes at offset 4304351232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304388096 ++wrote 4096/4096 bytes at offset 4304388096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296032256 ++wrote 4096/4096 bytes at offset 4296032256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296069120 ++wrote 4096/4096 bytes at offset 4296069120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296105984 ++wrote 4096/4096 bytes at offset 4296105984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296142848 ++wrote 4096/4096 bytes at offset 4296142848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296179712 ++wrote 4096/4096 bytes at offset 4296179712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296216576 ++wrote 4096/4096 bytes at offset 4296216576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296253440 ++wrote 4096/4096 bytes at offset 4296253440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296290304 ++wrote 4096/4096 bytes at offset 4296290304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296327168 ++wrote 4096/4096 bytes at offset 4296327168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296364032 ++wrote 4096/4096 bytes at offset 4296364032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296400896 ++wrote 4096/4096 bytes at offset 4296400896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296437760 ++wrote 4096/4096 bytes at offset 4296437760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296474624 ++wrote 4096/4096 bytes at offset 4296474624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296511488 ++wrote 4096/4096 bytes at offset 4296511488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296548352 ++wrote 4096/4096 bytes at offset 4296548352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296585216 ++wrote 4096/4096 bytes at offset 4296585216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296622080 ++wrote 4096/4096 bytes at offset 4296622080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296658944 ++wrote 4096/4096 bytes at offset 4296658944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296695808 ++wrote 4096/4096 bytes at offset 4296695808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296732672 ++wrote 4096/4096 bytes at offset 4296732672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296769536 ++wrote 4096/4096 bytes at offset 4296769536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296806400 ++wrote 4096/4096 bytes at offset 4296806400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296843264 ++wrote 4096/4096 bytes at offset 4296843264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296880128 ++wrote 4096/4096 bytes at offset 4296880128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296916992 ++wrote 4096/4096 bytes at offset 4296916992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296953856 ++wrote 4096/4096 bytes at offset 4296953856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296990720 ++wrote 4096/4096 bytes at offset 4296990720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297027584 ++wrote 4096/4096 bytes at offset 4297027584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297064448 ++wrote 4096/4096 bytes at offset 4297064448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297101312 ++wrote 4096/4096 bytes at offset 4297101312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297138176 ++wrote 4096/4096 bytes at offset 4297138176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297175040 ++wrote 4096/4096 bytes at offset 4297175040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297211904 ++wrote 4096/4096 bytes at offset 4297211904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297248768 ++wrote 4096/4096 bytes at offset 4297248768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297285632 ++wrote 4096/4096 bytes at offset 4297285632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297322496 ++wrote 4096/4096 bytes at offset 4297322496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297359360 ++wrote 4096/4096 bytes at offset 4297359360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297396224 ++wrote 4096/4096 bytes at offset 4297396224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297433088 ++wrote 4096/4096 bytes at offset 4297433088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297469952 ++wrote 4096/4096 bytes at offset 4297469952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297506816 ++wrote 4096/4096 bytes at offset 4297506816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297543680 ++wrote 4096/4096 bytes at offset 4297543680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297580544 ++wrote 4096/4096 bytes at offset 4297580544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297617408 ++wrote 4096/4096 bytes at offset 4297617408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297654272 ++wrote 4096/4096 bytes at offset 4297654272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297691136 ++wrote 4096/4096 bytes at offset 4297691136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297728000 ++wrote 4096/4096 bytes at offset 4297728000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297764864 ++wrote 4096/4096 bytes at offset 4297764864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297801728 ++wrote 4096/4096 bytes at offset 4297801728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297838592 ++wrote 4096/4096 bytes at offset 4297838592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297875456 ++wrote 4096/4096 bytes at offset 4297875456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297912320 ++wrote 4096/4096 bytes at offset 4297912320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297949184 ++wrote 4096/4096 bytes at offset 4297949184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297986048 ++wrote 4096/4096 bytes at offset 4297986048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298022912 ++wrote 4096/4096 bytes at offset 4298022912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298059776 ++wrote 4096/4096 bytes at offset 4298059776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298096640 ++wrote 4096/4096 bytes at offset 4298096640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298133504 ++wrote 4096/4096 bytes at offset 4298133504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298170368 ++wrote 4096/4096 bytes at offset 4298170368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298207232 ++wrote 4096/4096 bytes at offset 4298207232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298244096 ++wrote 4096/4096 bytes at offset 4298244096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298280960 ++wrote 4096/4096 bytes at offset 4298280960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298317824 ++wrote 4096/4096 bytes at offset 4298317824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298354688 ++wrote 4096/4096 bytes at offset 4298354688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298391552 ++wrote 4096/4096 bytes at offset 4298391552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298428416 ++wrote 4096/4096 bytes at offset 4298428416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298465280 ++wrote 4096/4096 bytes at offset 4298465280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298502144 ++wrote 4096/4096 bytes at offset 4298502144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298539008 ++wrote 4096/4096 bytes at offset 4298539008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298575872 ++wrote 4096/4096 bytes at offset 4298575872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298612736 ++wrote 4096/4096 bytes at offset 4298612736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298649600 ++wrote 4096/4096 bytes at offset 4298649600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298686464 ++wrote 4096/4096 bytes at offset 4298686464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298723328 ++wrote 4096/4096 bytes at offset 4298723328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298760192 ++wrote 4096/4096 bytes at offset 4298760192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298797056 ++wrote 4096/4096 bytes at offset 4298797056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298833920 ++wrote 4096/4096 bytes at offset 4298833920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298870784 ++wrote 4096/4096 bytes at offset 4298870784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298907648 ++wrote 4096/4096 bytes at offset 4298907648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298944512 ++wrote 4096/4096 bytes at offset 4298944512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298981376 ++wrote 4096/4096 bytes at offset 4298981376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299018240 ++wrote 4096/4096 bytes at offset 4299018240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299055104 ++wrote 4096/4096 bytes at offset 4299055104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299091968 ++wrote 4096/4096 bytes at offset 4299091968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299128832 ++wrote 4096/4096 bytes at offset 4299128832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299165696 ++wrote 4096/4096 bytes at offset 4299165696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299202560 ++wrote 4096/4096 bytes at offset 4299202560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299239424 ++wrote 4096/4096 bytes at offset 4299239424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299276288 ++wrote 4096/4096 bytes at offset 4299276288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299313152 ++wrote 4096/4096 bytes at offset 4299313152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299350016 ++wrote 4096/4096 bytes at offset 4299350016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299386880 ++wrote 4096/4096 bytes at offset 4299386880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299423744 ++wrote 4096/4096 bytes at offset 4299423744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299460608 ++wrote 4096/4096 bytes at offset 4299460608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299497472 ++wrote 4096/4096 bytes at offset 4299497472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299534336 ++wrote 4096/4096 bytes at offset 4299534336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299571200 ++wrote 4096/4096 bytes at offset 4299571200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299608064 ++wrote 4096/4096 bytes at offset 4299608064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299644928 ++wrote 4096/4096 bytes at offset 4299644928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299681792 ++wrote 4096/4096 bytes at offset 4299681792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299718656 ++wrote 4096/4096 bytes at offset 4299718656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299755520 ++wrote 4096/4096 bytes at offset 4299755520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299792384 ++wrote 4096/4096 bytes at offset 4299792384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299829248 ++wrote 4096/4096 bytes at offset 4299829248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299866112 ++wrote 4096/4096 bytes at offset 4299866112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299902976 ++wrote 4096/4096 bytes at offset 4299902976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299939840 ++wrote 4096/4096 bytes at offset 4299939840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299976704 ++wrote 4096/4096 bytes at offset 4299976704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300013568 ++wrote 4096/4096 bytes at offset 4300013568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300050432 ++wrote 4096/4096 bytes at offset 4300050432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300087296 ++wrote 4096/4096 bytes at offset 4300087296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300124160 ++wrote 4096/4096 bytes at offset 4300124160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300161024 ++wrote 4096/4096 bytes at offset 4300161024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300197888 ++wrote 4096/4096 bytes at offset 4300197888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300234752 ++wrote 4096/4096 bytes at offset 4300234752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300271616 ++wrote 4096/4096 bytes at offset 4300271616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300308480 ++wrote 4096/4096 bytes at offset 4300308480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300345344 ++wrote 4096/4096 bytes at offset 4300345344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300382208 ++wrote 4096/4096 bytes at offset 4300382208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300419072 ++wrote 4096/4096 bytes at offset 4300419072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300455936 ++wrote 4096/4096 bytes at offset 4300455936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300492800 ++wrote 4096/4096 bytes at offset 4300492800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300529664 ++wrote 4096/4096 bytes at offset 4300529664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300566528 ++wrote 4096/4096 bytes at offset 4300566528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300603392 ++wrote 4096/4096 bytes at offset 4300603392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300640256 ++wrote 4096/4096 bytes at offset 4300640256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300677120 ++wrote 4096/4096 bytes at offset 4300677120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300713984 ++wrote 4096/4096 bytes at offset 4300713984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300750848 ++wrote 4096/4096 bytes at offset 4300750848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300787712 ++wrote 4096/4096 bytes at offset 4300787712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300824576 ++wrote 4096/4096 bytes at offset 4300824576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300861440 ++wrote 4096/4096 bytes at offset 4300861440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300898304 ++wrote 4096/4096 bytes at offset 4300898304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300935168 ++wrote 4096/4096 bytes at offset 4300935168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300972032 ++wrote 4096/4096 bytes at offset 4300972032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301008896 ++wrote 4096/4096 bytes at offset 4301008896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301045760 ++wrote 4096/4096 bytes at offset 4301045760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301082624 ++wrote 4096/4096 bytes at offset 4301082624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301119488 ++wrote 4096/4096 bytes at offset 4301119488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301156352 ++wrote 4096/4096 bytes at offset 4301156352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301193216 ++wrote 4096/4096 bytes at offset 4301193216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301230080 ++wrote 4096/4096 bytes at offset 4301230080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301266944 ++wrote 4096/4096 bytes at offset 4301266944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301303808 ++wrote 4096/4096 bytes at offset 4301303808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301340672 ++wrote 4096/4096 bytes at offset 4301340672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301377536 ++wrote 4096/4096 bytes at offset 4301377536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301414400 ++wrote 4096/4096 bytes at offset 4301414400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301451264 ++wrote 4096/4096 bytes at offset 4301451264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301488128 ++wrote 4096/4096 bytes at offset 4301488128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301524992 ++wrote 4096/4096 bytes at offset 4301524992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301561856 ++wrote 4096/4096 bytes at offset 4301561856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301598720 ++wrote 4096/4096 bytes at offset 4301598720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301635584 ++wrote 4096/4096 bytes at offset 4301635584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301672448 ++wrote 4096/4096 bytes at offset 4301672448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301709312 ++wrote 4096/4096 bytes at offset 4301709312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301746176 ++wrote 4096/4096 bytes at offset 4301746176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301783040 ++wrote 4096/4096 bytes at offset 4301783040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301819904 ++wrote 4096/4096 bytes at offset 4301819904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301856768 ++wrote 4096/4096 bytes at offset 4301856768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301893632 ++wrote 4096/4096 bytes at offset 4301893632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301930496 ++wrote 4096/4096 bytes at offset 4301930496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301967360 ++wrote 4096/4096 bytes at offset 4301967360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302004224 ++wrote 4096/4096 bytes at offset 4302004224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302041088 ++wrote 4096/4096 bytes at offset 4302041088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302077952 ++wrote 4096/4096 bytes at offset 4302077952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302114816 ++wrote 4096/4096 bytes at offset 4302114816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302151680 ++wrote 4096/4096 bytes at offset 4302151680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302188544 ++wrote 4096/4096 bytes at offset 4302188544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302225408 ++wrote 4096/4096 bytes at offset 4302225408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302262272 ++wrote 4096/4096 bytes at offset 4302262272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302299136 ++wrote 4096/4096 bytes at offset 4302299136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302336000 ++wrote 4096/4096 bytes at offset 4302336000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302372864 ++wrote 4096/4096 bytes at offset 4302372864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302409728 ++wrote 4096/4096 bytes at offset 4302409728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302446592 ++wrote 4096/4096 bytes at offset 4302446592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302483456 ++wrote 4096/4096 bytes at offset 4302483456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302520320 ++wrote 4096/4096 bytes at offset 4302520320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302557184 ++wrote 4096/4096 bytes at offset 4302557184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302594048 ++wrote 4096/4096 bytes at offset 4302594048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302630912 ++wrote 4096/4096 bytes at offset 4302630912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302667776 ++wrote 4096/4096 bytes at offset 4302667776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302704640 ++wrote 4096/4096 bytes at offset 4302704640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302741504 ++wrote 4096/4096 bytes at offset 4302741504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302778368 ++wrote 4096/4096 bytes at offset 4302778368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302815232 ++wrote 4096/4096 bytes at offset 4302815232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302852096 ++wrote 4096/4096 bytes at offset 4302852096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302888960 ++wrote 4096/4096 bytes at offset 4302888960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302925824 ++wrote 4096/4096 bytes at offset 4302925824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302962688 ++wrote 4096/4096 bytes at offset 4302962688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302999552 ++wrote 4096/4096 bytes at offset 4302999552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303036416 ++wrote 4096/4096 bytes at offset 4303036416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303073280 ++wrote 4096/4096 bytes at offset 4303073280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303110144 ++wrote 4096/4096 bytes at offset 4303110144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303147008 ++wrote 4096/4096 bytes at offset 4303147008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303183872 ++wrote 4096/4096 bytes at offset 4303183872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303220736 ++wrote 4096/4096 bytes at offset 4303220736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303257600 ++wrote 4096/4096 bytes at offset 4303257600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303294464 ++wrote 4096/4096 bytes at offset 4303294464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303331328 ++wrote 4096/4096 bytes at offset 4303331328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303368192 ++wrote 4096/4096 bytes at offset 4303368192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303405056 ++wrote 4096/4096 bytes at offset 4303405056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303441920 ++wrote 4096/4096 bytes at offset 4303441920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303478784 ++wrote 4096/4096 bytes at offset 4303478784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303515648 ++wrote 4096/4096 bytes at offset 4303515648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303552512 ++wrote 4096/4096 bytes at offset 4303552512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303589376 ++wrote 4096/4096 bytes at offset 4303589376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303626240 ++wrote 4096/4096 bytes at offset 4303626240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303663104 ++wrote 4096/4096 bytes at offset 4303663104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303699968 ++wrote 4096/4096 bytes at offset 4303699968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303736832 ++wrote 4096/4096 bytes at offset 4303736832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303773696 ++wrote 4096/4096 bytes at offset 4303773696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303810560 ++wrote 4096/4096 bytes at offset 4303810560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303847424 ++wrote 4096/4096 bytes at offset 4303847424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303884288 ++wrote 4096/4096 bytes at offset 4303884288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303921152 ++wrote 4096/4096 bytes at offset 4303921152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303958016 ++wrote 4096/4096 bytes at offset 4303958016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303994880 ++wrote 4096/4096 bytes at offset 4303994880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304031744 ++wrote 4096/4096 bytes at offset 4304031744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304068608 ++wrote 4096/4096 bytes at offset 4304068608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304105472 ++wrote 4096/4096 bytes at offset 4304105472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304142336 ++wrote 4096/4096 bytes at offset 4304142336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304179200 ++wrote 4096/4096 bytes at offset 4304179200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304216064 ++wrote 4096/4096 bytes at offset 4304216064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304252928 ++wrote 4096/4096 bytes at offset 4304252928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304289792 ++wrote 4096/4096 bytes at offset 4304289792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304326656 ++wrote 4096/4096 bytes at offset 4304326656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304363520 ++wrote 4096/4096 bytes at offset 4304363520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304400384 ++wrote 4096/4096 bytes at offset 4304400384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296036352 ++wrote 4096/4096 bytes at offset 4296036352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296073216 ++wrote 4096/4096 bytes at offset 4296073216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296110080 ++wrote 4096/4096 bytes at offset 4296110080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296146944 ++wrote 4096/4096 bytes at offset 4296146944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296183808 ++wrote 4096/4096 bytes at offset 4296183808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296220672 ++wrote 4096/4096 bytes at offset 4296220672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296257536 ++wrote 4096/4096 bytes at offset 4296257536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296294400 ++wrote 4096/4096 bytes at offset 4296294400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296331264 ++wrote 4096/4096 bytes at offset 4296331264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296368128 ++wrote 4096/4096 bytes at offset 4296368128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296404992 ++wrote 4096/4096 bytes at offset 4296404992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296441856 ++wrote 4096/4096 bytes at offset 4296441856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296478720 ++wrote 4096/4096 bytes at offset 4296478720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296515584 ++wrote 4096/4096 bytes at offset 4296515584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296552448 ++wrote 4096/4096 bytes at offset 4296552448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296589312 ++wrote 4096/4096 bytes at offset 4296589312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296626176 ++wrote 4096/4096 bytes at offset 4296626176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296663040 ++wrote 4096/4096 bytes at offset 4296663040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296699904 ++wrote 4096/4096 bytes at offset 4296699904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296736768 ++wrote 4096/4096 bytes at offset 4296736768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296773632 ++wrote 4096/4096 bytes at offset 4296773632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296810496 ++wrote 4096/4096 bytes at offset 4296810496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296847360 ++wrote 4096/4096 bytes at offset 4296847360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296884224 ++wrote 4096/4096 bytes at offset 4296884224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296921088 ++wrote 4096/4096 bytes at offset 4296921088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296957952 ++wrote 4096/4096 bytes at offset 4296957952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296994816 ++wrote 4096/4096 bytes at offset 4296994816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297031680 ++wrote 4096/4096 bytes at offset 4297031680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297068544 ++wrote 4096/4096 bytes at offset 4297068544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297105408 ++wrote 4096/4096 bytes at offset 4297105408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297142272 ++wrote 4096/4096 bytes at offset 4297142272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297179136 ++wrote 4096/4096 bytes at offset 4297179136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297216000 ++wrote 4096/4096 bytes at offset 4297216000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297252864 ++wrote 4096/4096 bytes at offset 4297252864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297289728 ++wrote 4096/4096 bytes at offset 4297289728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297326592 ++wrote 4096/4096 bytes at offset 4297326592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297363456 ++wrote 4096/4096 bytes at offset 4297363456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297400320 ++wrote 4096/4096 bytes at offset 4297400320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297437184 ++wrote 4096/4096 bytes at offset 4297437184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297474048 ++wrote 4096/4096 bytes at offset 4297474048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297510912 ++wrote 4096/4096 bytes at offset 4297510912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297547776 ++wrote 4096/4096 bytes at offset 4297547776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297584640 ++wrote 4096/4096 bytes at offset 4297584640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297621504 ++wrote 4096/4096 bytes at offset 4297621504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297658368 ++wrote 4096/4096 bytes at offset 4297658368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297695232 ++wrote 4096/4096 bytes at offset 4297695232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297732096 ++wrote 4096/4096 bytes at offset 4297732096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297768960 ++wrote 4096/4096 bytes at offset 4297768960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297805824 ++wrote 4096/4096 bytes at offset 4297805824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297842688 ++wrote 4096/4096 bytes at offset 4297842688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297879552 ++wrote 4096/4096 bytes at offset 4297879552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297916416 ++wrote 4096/4096 bytes at offset 4297916416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297953280 ++wrote 4096/4096 bytes at offset 4297953280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297990144 ++wrote 4096/4096 bytes at offset 4297990144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298027008 ++wrote 4096/4096 bytes at offset 4298027008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298063872 ++wrote 4096/4096 bytes at offset 4298063872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298100736 ++wrote 4096/4096 bytes at offset 4298100736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298137600 ++wrote 4096/4096 bytes at offset 4298137600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298174464 ++wrote 4096/4096 bytes at offset 4298174464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298211328 ++wrote 4096/4096 bytes at offset 4298211328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298248192 ++wrote 4096/4096 bytes at offset 4298248192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298285056 ++wrote 4096/4096 bytes at offset 4298285056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298321920 ++wrote 4096/4096 bytes at offset 4298321920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298358784 ++wrote 4096/4096 bytes at offset 4298358784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298395648 ++wrote 4096/4096 bytes at offset 4298395648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298432512 ++wrote 4096/4096 bytes at offset 4298432512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298469376 ++wrote 4096/4096 bytes at offset 4298469376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298506240 ++wrote 4096/4096 bytes at offset 4298506240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298543104 ++wrote 4096/4096 bytes at offset 4298543104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298579968 ++wrote 4096/4096 bytes at offset 4298579968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298616832 ++wrote 4096/4096 bytes at offset 4298616832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298653696 ++wrote 4096/4096 bytes at offset 4298653696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298690560 ++wrote 4096/4096 bytes at offset 4298690560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298727424 ++wrote 4096/4096 bytes at offset 4298727424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298764288 ++wrote 4096/4096 bytes at offset 4298764288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298801152 ++wrote 4096/4096 bytes at offset 4298801152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298838016 ++wrote 4096/4096 bytes at offset 4298838016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298874880 ++wrote 4096/4096 bytes at offset 4298874880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298911744 ++wrote 4096/4096 bytes at offset 4298911744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298948608 ++wrote 4096/4096 bytes at offset 4298948608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298985472 ++wrote 4096/4096 bytes at offset 4298985472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299022336 ++wrote 4096/4096 bytes at offset 4299022336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299059200 ++wrote 4096/4096 bytes at offset 4299059200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299096064 ++wrote 4096/4096 bytes at offset 4299096064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299132928 ++wrote 4096/4096 bytes at offset 4299132928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299169792 ++wrote 4096/4096 bytes at offset 4299169792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299206656 ++wrote 4096/4096 bytes at offset 4299206656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299243520 ++wrote 4096/4096 bytes at offset 4299243520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299280384 ++wrote 4096/4096 bytes at offset 4299280384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299317248 ++wrote 4096/4096 bytes at offset 4299317248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299354112 ++wrote 4096/4096 bytes at offset 4299354112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299390976 ++wrote 4096/4096 bytes at offset 4299390976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299427840 ++wrote 4096/4096 bytes at offset 4299427840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299464704 ++wrote 4096/4096 bytes at offset 4299464704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299501568 ++wrote 4096/4096 bytes at offset 4299501568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299538432 ++wrote 4096/4096 bytes at offset 4299538432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299575296 ++wrote 4096/4096 bytes at offset 4299575296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299612160 ++wrote 4096/4096 bytes at offset 4299612160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299649024 ++wrote 4096/4096 bytes at offset 4299649024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299685888 ++wrote 4096/4096 bytes at offset 4299685888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299722752 ++wrote 4096/4096 bytes at offset 4299722752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299759616 ++wrote 4096/4096 bytes at offset 4299759616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299796480 ++wrote 4096/4096 bytes at offset 4299796480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299833344 ++wrote 4096/4096 bytes at offset 4299833344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299870208 ++wrote 4096/4096 bytes at offset 4299870208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299907072 ++wrote 4096/4096 bytes at offset 4299907072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299943936 ++wrote 4096/4096 bytes at offset 4299943936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299980800 ++wrote 4096/4096 bytes at offset 4299980800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300017664 ++wrote 4096/4096 bytes at offset 4300017664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300054528 ++wrote 4096/4096 bytes at offset 4300054528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300091392 ++wrote 4096/4096 bytes at offset 4300091392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300128256 ++wrote 4096/4096 bytes at offset 4300128256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300165120 ++wrote 4096/4096 bytes at offset 4300165120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300201984 ++wrote 4096/4096 bytes at offset 4300201984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300238848 ++wrote 4096/4096 bytes at offset 4300238848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300275712 ++wrote 4096/4096 bytes at offset 4300275712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300312576 ++wrote 4096/4096 bytes at offset 4300312576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300349440 ++wrote 4096/4096 bytes at offset 4300349440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300386304 ++wrote 4096/4096 bytes at offset 4300386304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300423168 ++wrote 4096/4096 bytes at offset 4300423168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300460032 ++wrote 4096/4096 bytes at offset 4300460032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300496896 ++wrote 4096/4096 bytes at offset 4300496896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300533760 ++wrote 4096/4096 bytes at offset 4300533760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300570624 ++wrote 4096/4096 bytes at offset 4300570624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300607488 ++wrote 4096/4096 bytes at offset 4300607488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300644352 ++wrote 4096/4096 bytes at offset 4300644352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300681216 ++wrote 4096/4096 bytes at offset 4300681216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300718080 ++wrote 4096/4096 bytes at offset 4300718080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300754944 ++wrote 4096/4096 bytes at offset 4300754944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300791808 ++wrote 4096/4096 bytes at offset 4300791808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300828672 ++wrote 4096/4096 bytes at offset 4300828672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300865536 ++wrote 4096/4096 bytes at offset 4300865536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300902400 ++wrote 4096/4096 bytes at offset 4300902400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300939264 ++wrote 4096/4096 bytes at offset 4300939264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300976128 ++wrote 4096/4096 bytes at offset 4300976128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301012992 ++wrote 4096/4096 bytes at offset 4301012992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301049856 ++wrote 4096/4096 bytes at offset 4301049856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301086720 ++wrote 4096/4096 bytes at offset 4301086720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301123584 ++wrote 4096/4096 bytes at offset 4301123584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301160448 ++wrote 4096/4096 bytes at offset 4301160448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301197312 ++wrote 4096/4096 bytes at offset 4301197312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301234176 ++wrote 4096/4096 bytes at offset 4301234176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301271040 ++wrote 4096/4096 bytes at offset 4301271040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301307904 ++wrote 4096/4096 bytes at offset 4301307904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301344768 ++wrote 4096/4096 bytes at offset 4301344768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301381632 ++wrote 4096/4096 bytes at offset 4301381632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301418496 ++wrote 4096/4096 bytes at offset 4301418496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301455360 ++wrote 4096/4096 bytes at offset 4301455360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301492224 ++wrote 4096/4096 bytes at offset 4301492224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301529088 ++wrote 4096/4096 bytes at offset 4301529088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301565952 ++wrote 4096/4096 bytes at offset 4301565952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301602816 ++wrote 4096/4096 bytes at offset 4301602816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301639680 ++wrote 4096/4096 bytes at offset 4301639680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301676544 ++wrote 4096/4096 bytes at offset 4301676544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301713408 ++wrote 4096/4096 bytes at offset 4301713408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301750272 ++wrote 4096/4096 bytes at offset 4301750272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301787136 ++wrote 4096/4096 bytes at offset 4301787136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301824000 ++wrote 4096/4096 bytes at offset 4301824000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301860864 ++wrote 4096/4096 bytes at offset 4301860864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301897728 ++wrote 4096/4096 bytes at offset 4301897728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301934592 ++wrote 4096/4096 bytes at offset 4301934592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301971456 ++wrote 4096/4096 bytes at offset 4301971456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302008320 ++wrote 4096/4096 bytes at offset 4302008320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302045184 ++wrote 4096/4096 bytes at offset 4302045184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302082048 ++wrote 4096/4096 bytes at offset 4302082048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302118912 ++wrote 4096/4096 bytes at offset 4302118912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302155776 ++wrote 4096/4096 bytes at offset 4302155776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302192640 ++wrote 4096/4096 bytes at offset 4302192640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302229504 ++wrote 4096/4096 bytes at offset 4302229504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302266368 ++wrote 4096/4096 bytes at offset 4302266368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302303232 ++wrote 4096/4096 bytes at offset 4302303232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302340096 ++wrote 4096/4096 bytes at offset 4302340096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302376960 ++wrote 4096/4096 bytes at offset 4302376960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302413824 ++wrote 4096/4096 bytes at offset 4302413824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302450688 ++wrote 4096/4096 bytes at offset 4302450688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302487552 ++wrote 4096/4096 bytes at offset 4302487552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302524416 ++wrote 4096/4096 bytes at offset 4302524416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302561280 ++wrote 4096/4096 bytes at offset 4302561280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302598144 ++wrote 4096/4096 bytes at offset 4302598144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302635008 ++wrote 4096/4096 bytes at offset 4302635008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302671872 ++wrote 4096/4096 bytes at offset 4302671872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302708736 ++wrote 4096/4096 bytes at offset 4302708736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302745600 ++wrote 4096/4096 bytes at offset 4302745600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302782464 ++wrote 4096/4096 bytes at offset 4302782464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302819328 ++wrote 4096/4096 bytes at offset 4302819328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302856192 ++wrote 4096/4096 bytes at offset 4302856192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302893056 ++wrote 4096/4096 bytes at offset 4302893056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302929920 ++wrote 4096/4096 bytes at offset 4302929920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302966784 ++wrote 4096/4096 bytes at offset 4302966784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303003648 ++wrote 4096/4096 bytes at offset 4303003648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303040512 ++wrote 4096/4096 bytes at offset 4303040512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303077376 ++wrote 4096/4096 bytes at offset 4303077376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303114240 ++wrote 4096/4096 bytes at offset 4303114240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303151104 ++wrote 4096/4096 bytes at offset 4303151104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303187968 ++wrote 4096/4096 bytes at offset 4303187968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303224832 ++wrote 4096/4096 bytes at offset 4303224832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303261696 ++wrote 4096/4096 bytes at offset 4303261696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303298560 ++wrote 4096/4096 bytes at offset 4303298560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303335424 ++wrote 4096/4096 bytes at offset 4303335424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303372288 ++wrote 4096/4096 bytes at offset 4303372288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303409152 ++wrote 4096/4096 bytes at offset 4303409152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303446016 ++wrote 4096/4096 bytes at offset 4303446016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303482880 ++wrote 4096/4096 bytes at offset 4303482880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303519744 ++wrote 4096/4096 bytes at offset 4303519744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303556608 ++wrote 4096/4096 bytes at offset 4303556608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303593472 ++wrote 4096/4096 bytes at offset 4303593472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303630336 ++wrote 4096/4096 bytes at offset 4303630336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303667200 ++wrote 4096/4096 bytes at offset 4303667200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303704064 ++wrote 4096/4096 bytes at offset 4303704064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303740928 ++wrote 4096/4096 bytes at offset 4303740928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303777792 ++wrote 4096/4096 bytes at offset 4303777792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303814656 ++wrote 4096/4096 bytes at offset 4303814656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303851520 ++wrote 4096/4096 bytes at offset 4303851520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303888384 ++wrote 4096/4096 bytes at offset 4303888384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303925248 ++wrote 4096/4096 bytes at offset 4303925248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303962112 ++wrote 4096/4096 bytes at offset 4303962112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303998976 ++wrote 4096/4096 bytes at offset 4303998976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304035840 ++wrote 4096/4096 bytes at offset 4304035840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304072704 ++wrote 4096/4096 bytes at offset 4304072704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304109568 ++wrote 4096/4096 bytes at offset 4304109568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304146432 ++wrote 4096/4096 bytes at offset 4304146432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304183296 ++wrote 4096/4096 bytes at offset 4304183296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304220160 ++wrote 4096/4096 bytes at offset 4304220160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304257024 ++wrote 4096/4096 bytes at offset 4304257024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304293888 ++wrote 4096/4096 bytes at offset 4304293888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304330752 ++wrote 4096/4096 bytes at offset 4304330752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304367616 ++wrote 4096/4096 bytes at offset 4304367616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296040448 ++wrote 4096/4096 bytes at offset 4296040448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296077312 ++wrote 4096/4096 bytes at offset 4296077312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296114176 ++wrote 4096/4096 bytes at offset 4296114176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296151040 ++wrote 4096/4096 bytes at offset 4296151040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296187904 ++wrote 4096/4096 bytes at offset 4296187904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296224768 ++wrote 4096/4096 bytes at offset 4296224768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296261632 ++wrote 4096/4096 bytes at offset 4296261632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296298496 ++wrote 4096/4096 bytes at offset 4296298496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296335360 ++wrote 4096/4096 bytes at offset 4296335360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296372224 ++wrote 4096/4096 bytes at offset 4296372224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296409088 ++wrote 4096/4096 bytes at offset 4296409088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296445952 ++wrote 4096/4096 bytes at offset 4296445952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296482816 ++wrote 4096/4096 bytes at offset 4296482816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296519680 ++wrote 4096/4096 bytes at offset 4296519680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296556544 ++wrote 4096/4096 bytes at offset 4296556544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296593408 ++wrote 4096/4096 bytes at offset 4296593408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296630272 ++wrote 4096/4096 bytes at offset 4296630272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296667136 ++wrote 4096/4096 bytes at offset 4296667136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296704000 ++wrote 4096/4096 bytes at offset 4296704000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296740864 ++wrote 4096/4096 bytes at offset 4296740864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296777728 ++wrote 4096/4096 bytes at offset 4296777728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296814592 ++wrote 4096/4096 bytes at offset 4296814592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296851456 ++wrote 4096/4096 bytes at offset 4296851456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296888320 ++wrote 4096/4096 bytes at offset 4296888320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296925184 ++wrote 4096/4096 bytes at offset 4296925184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296962048 ++wrote 4096/4096 bytes at offset 4296962048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296998912 ++wrote 4096/4096 bytes at offset 4296998912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297035776 ++wrote 4096/4096 bytes at offset 4297035776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297072640 ++wrote 4096/4096 bytes at offset 4297072640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297109504 ++wrote 4096/4096 bytes at offset 4297109504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297146368 ++wrote 4096/4096 bytes at offset 4297146368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297183232 ++wrote 4096/4096 bytes at offset 4297183232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297220096 ++wrote 4096/4096 bytes at offset 4297220096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297256960 ++wrote 4096/4096 bytes at offset 4297256960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297293824 ++wrote 4096/4096 bytes at offset 4297293824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297330688 ++wrote 4096/4096 bytes at offset 4297330688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297367552 ++wrote 4096/4096 bytes at offset 4297367552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297404416 ++wrote 4096/4096 bytes at offset 4297404416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297441280 ++wrote 4096/4096 bytes at offset 4297441280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297478144 ++wrote 4096/4096 bytes at offset 4297478144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297515008 ++wrote 4096/4096 bytes at offset 4297515008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297551872 ++wrote 4096/4096 bytes at offset 4297551872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297588736 ++wrote 4096/4096 bytes at offset 4297588736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297625600 ++wrote 4096/4096 bytes at offset 4297625600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297662464 ++wrote 4096/4096 bytes at offset 4297662464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297699328 ++wrote 4096/4096 bytes at offset 4297699328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297736192 ++wrote 4096/4096 bytes at offset 4297736192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297773056 ++wrote 4096/4096 bytes at offset 4297773056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297809920 ++wrote 4096/4096 bytes at offset 4297809920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297846784 ++wrote 4096/4096 bytes at offset 4297846784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297883648 ++wrote 4096/4096 bytes at offset 4297883648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297920512 ++wrote 4096/4096 bytes at offset 4297920512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297957376 ++wrote 4096/4096 bytes at offset 4297957376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297994240 ++wrote 4096/4096 bytes at offset 4297994240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298031104 ++wrote 4096/4096 bytes at offset 4298031104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298067968 ++wrote 4096/4096 bytes at offset 4298067968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298104832 ++wrote 4096/4096 bytes at offset 4298104832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298141696 ++wrote 4096/4096 bytes at offset 4298141696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298178560 ++wrote 4096/4096 bytes at offset 4298178560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298215424 ++wrote 4096/4096 bytes at offset 4298215424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298252288 ++wrote 4096/4096 bytes at offset 4298252288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298289152 ++wrote 4096/4096 bytes at offset 4298289152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298326016 ++wrote 4096/4096 bytes at offset 4298326016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298362880 ++wrote 4096/4096 bytes at offset 4298362880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298399744 ++wrote 4096/4096 bytes at offset 4298399744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298436608 ++wrote 4096/4096 bytes at offset 4298436608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298473472 ++wrote 4096/4096 bytes at offset 4298473472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298510336 ++wrote 4096/4096 bytes at offset 4298510336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298547200 ++wrote 4096/4096 bytes at offset 4298547200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298584064 ++wrote 4096/4096 bytes at offset 4298584064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298620928 ++wrote 4096/4096 bytes at offset 4298620928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298657792 ++wrote 4096/4096 bytes at offset 4298657792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298694656 ++wrote 4096/4096 bytes at offset 4298694656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298731520 ++wrote 4096/4096 bytes at offset 4298731520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298768384 ++wrote 4096/4096 bytes at offset 4298768384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298805248 ++wrote 4096/4096 bytes at offset 4298805248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298842112 ++wrote 4096/4096 bytes at offset 4298842112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298878976 ++wrote 4096/4096 bytes at offset 4298878976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298915840 ++wrote 4096/4096 bytes at offset 4298915840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298952704 ++wrote 4096/4096 bytes at offset 4298952704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298989568 ++wrote 4096/4096 bytes at offset 4298989568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299026432 ++wrote 4096/4096 bytes at offset 4299026432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299063296 ++wrote 4096/4096 bytes at offset 4299063296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299100160 ++wrote 4096/4096 bytes at offset 4299100160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299137024 ++wrote 4096/4096 bytes at offset 4299137024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299173888 ++wrote 4096/4096 bytes at offset 4299173888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299210752 ++wrote 4096/4096 bytes at offset 4299210752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299247616 ++wrote 4096/4096 bytes at offset 4299247616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299284480 ++wrote 4096/4096 bytes at offset 4299284480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299321344 ++wrote 4096/4096 bytes at offset 4299321344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299358208 ++wrote 4096/4096 bytes at offset 4299358208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299395072 ++wrote 4096/4096 bytes at offset 4299395072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299431936 ++wrote 4096/4096 bytes at offset 4299431936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299468800 ++wrote 4096/4096 bytes at offset 4299468800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299505664 ++wrote 4096/4096 bytes at offset 4299505664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299542528 ++wrote 4096/4096 bytes at offset 4299542528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299579392 ++wrote 4096/4096 bytes at offset 4299579392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299616256 ++wrote 4096/4096 bytes at offset 4299616256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299653120 ++wrote 4096/4096 bytes at offset 4299653120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299689984 ++wrote 4096/4096 bytes at offset 4299689984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299726848 ++wrote 4096/4096 bytes at offset 4299726848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299763712 ++wrote 4096/4096 bytes at offset 4299763712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299800576 ++wrote 4096/4096 bytes at offset 4299800576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299837440 ++wrote 4096/4096 bytes at offset 4299837440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299874304 ++wrote 4096/4096 bytes at offset 4299874304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299911168 ++wrote 4096/4096 bytes at offset 4299911168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299948032 ++wrote 4096/4096 bytes at offset 4299948032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299984896 ++wrote 4096/4096 bytes at offset 4299984896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300021760 ++wrote 4096/4096 bytes at offset 4300021760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300058624 ++wrote 4096/4096 bytes at offset 4300058624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300095488 ++wrote 4096/4096 bytes at offset 4300095488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300132352 ++wrote 4096/4096 bytes at offset 4300132352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300169216 ++wrote 4096/4096 bytes at offset 4300169216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300206080 ++wrote 4096/4096 bytes at offset 4300206080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300242944 ++wrote 4096/4096 bytes at offset 4300242944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300279808 ++wrote 4096/4096 bytes at offset 4300279808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300316672 ++wrote 4096/4096 bytes at offset 4300316672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300353536 ++wrote 4096/4096 bytes at offset 4300353536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300390400 ++wrote 4096/4096 bytes at offset 4300390400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300427264 ++wrote 4096/4096 bytes at offset 4300427264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300464128 ++wrote 4096/4096 bytes at offset 4300464128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300500992 ++wrote 4096/4096 bytes at offset 4300500992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300537856 ++wrote 4096/4096 bytes at offset 4300537856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300574720 ++wrote 4096/4096 bytes at offset 4300574720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300611584 ++wrote 4096/4096 bytes at offset 4300611584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300648448 ++wrote 4096/4096 bytes at offset 4300648448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300685312 ++wrote 4096/4096 bytes at offset 4300685312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300722176 ++wrote 4096/4096 bytes at offset 4300722176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300759040 ++wrote 4096/4096 bytes at offset 4300759040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300795904 ++wrote 4096/4096 bytes at offset 4300795904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300832768 ++wrote 4096/4096 bytes at offset 4300832768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300869632 ++wrote 4096/4096 bytes at offset 4300869632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300906496 ++wrote 4096/4096 bytes at offset 4300906496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300943360 ++wrote 4096/4096 bytes at offset 4300943360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300980224 ++wrote 4096/4096 bytes at offset 4300980224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301017088 ++wrote 4096/4096 bytes at offset 4301017088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301053952 ++wrote 4096/4096 bytes at offset 4301053952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301090816 ++wrote 4096/4096 bytes at offset 4301090816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301127680 ++wrote 4096/4096 bytes at offset 4301127680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301164544 ++wrote 4096/4096 bytes at offset 4301164544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301201408 ++wrote 4096/4096 bytes at offset 4301201408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301238272 ++wrote 4096/4096 bytes at offset 4301238272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301275136 ++wrote 4096/4096 bytes at offset 4301275136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301312000 ++wrote 4096/4096 bytes at offset 4301312000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301348864 ++wrote 4096/4096 bytes at offset 4301348864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301385728 ++wrote 4096/4096 bytes at offset 4301385728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301422592 ++wrote 4096/4096 bytes at offset 4301422592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301459456 ++wrote 4096/4096 bytes at offset 4301459456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301496320 ++wrote 4096/4096 bytes at offset 4301496320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301533184 ++wrote 4096/4096 bytes at offset 4301533184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301570048 ++wrote 4096/4096 bytes at offset 4301570048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301606912 ++wrote 4096/4096 bytes at offset 4301606912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301643776 ++wrote 4096/4096 bytes at offset 4301643776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301680640 ++wrote 4096/4096 bytes at offset 4301680640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301717504 ++wrote 4096/4096 bytes at offset 4301717504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301754368 ++wrote 4096/4096 bytes at offset 4301754368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301791232 ++wrote 4096/4096 bytes at offset 4301791232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301828096 ++wrote 4096/4096 bytes at offset 4301828096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301864960 ++wrote 4096/4096 bytes at offset 4301864960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301901824 ++wrote 4096/4096 bytes at offset 4301901824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301938688 ++wrote 4096/4096 bytes at offset 4301938688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301975552 ++wrote 4096/4096 bytes at offset 4301975552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302012416 ++wrote 4096/4096 bytes at offset 4302012416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302049280 ++wrote 4096/4096 bytes at offset 4302049280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302086144 ++wrote 4096/4096 bytes at offset 4302086144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302123008 ++wrote 4096/4096 bytes at offset 4302123008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302159872 ++wrote 4096/4096 bytes at offset 4302159872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302196736 ++wrote 4096/4096 bytes at offset 4302196736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302233600 ++wrote 4096/4096 bytes at offset 4302233600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302270464 ++wrote 4096/4096 bytes at offset 4302270464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302307328 ++wrote 4096/4096 bytes at offset 4302307328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302344192 ++wrote 4096/4096 bytes at offset 4302344192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302381056 ++wrote 4096/4096 bytes at offset 4302381056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302417920 ++wrote 4096/4096 bytes at offset 4302417920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302454784 ++wrote 4096/4096 bytes at offset 4302454784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302491648 ++wrote 4096/4096 bytes at offset 4302491648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302528512 ++wrote 4096/4096 bytes at offset 4302528512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302565376 ++wrote 4096/4096 bytes at offset 4302565376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302602240 ++wrote 4096/4096 bytes at offset 4302602240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302639104 ++wrote 4096/4096 bytes at offset 4302639104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302675968 ++wrote 4096/4096 bytes at offset 4302675968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302712832 ++wrote 4096/4096 bytes at offset 4302712832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302749696 ++wrote 4096/4096 bytes at offset 4302749696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302786560 ++wrote 4096/4096 bytes at offset 4302786560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302823424 ++wrote 4096/4096 bytes at offset 4302823424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302860288 ++wrote 4096/4096 bytes at offset 4302860288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302897152 ++wrote 4096/4096 bytes at offset 4302897152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302934016 ++wrote 4096/4096 bytes at offset 4302934016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302970880 ++wrote 4096/4096 bytes at offset 4302970880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303007744 ++wrote 4096/4096 bytes at offset 4303007744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303044608 ++wrote 4096/4096 bytes at offset 4303044608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303081472 ++wrote 4096/4096 bytes at offset 4303081472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303118336 ++wrote 4096/4096 bytes at offset 4303118336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303155200 ++wrote 4096/4096 bytes at offset 4303155200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303192064 ++wrote 4096/4096 bytes at offset 4303192064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303228928 ++wrote 4096/4096 bytes at offset 4303228928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303265792 ++wrote 4096/4096 bytes at offset 4303265792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303302656 ++wrote 4096/4096 bytes at offset 4303302656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303339520 ++wrote 4096/4096 bytes at offset 4303339520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303376384 ++wrote 4096/4096 bytes at offset 4303376384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303413248 ++wrote 4096/4096 bytes at offset 4303413248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303450112 ++wrote 4096/4096 bytes at offset 4303450112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303486976 ++wrote 4096/4096 bytes at offset 4303486976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303523840 ++wrote 4096/4096 bytes at offset 4303523840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303560704 ++wrote 4096/4096 bytes at offset 4303560704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303597568 ++wrote 4096/4096 bytes at offset 4303597568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303634432 ++wrote 4096/4096 bytes at offset 4303634432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303671296 ++wrote 4096/4096 bytes at offset 4303671296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303708160 ++wrote 4096/4096 bytes at offset 4303708160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303745024 ++wrote 4096/4096 bytes at offset 4303745024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303781888 ++wrote 4096/4096 bytes at offset 4303781888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303818752 ++wrote 4096/4096 bytes at offset 4303818752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303855616 ++wrote 4096/4096 bytes at offset 4303855616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303892480 ++wrote 4096/4096 bytes at offset 4303892480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303929344 ++wrote 4096/4096 bytes at offset 4303929344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303966208 ++wrote 4096/4096 bytes at offset 4303966208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304003072 ++wrote 4096/4096 bytes at offset 4304003072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304039936 ++wrote 4096/4096 bytes at offset 4304039936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304076800 ++wrote 4096/4096 bytes at offset 4304076800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304113664 ++wrote 4096/4096 bytes at offset 4304113664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304150528 ++wrote 4096/4096 bytes at offset 4304150528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304187392 ++wrote 4096/4096 bytes at offset 4304187392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304224256 ++wrote 4096/4096 bytes at offset 4304224256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304261120 ++wrote 4096/4096 bytes at offset 4304261120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304297984 ++wrote 4096/4096 bytes at offset 4304297984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304334848 ++wrote 4096/4096 bytes at offset 4304334848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304371712 ++wrote 4096/4096 bytes at offset 4304371712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296048640 ++wrote 4096/4096 bytes at offset 4296048640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296085504 ++wrote 4096/4096 bytes at offset 4296085504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296122368 ++wrote 4096/4096 bytes at offset 4296122368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296159232 ++wrote 4096/4096 bytes at offset 4296159232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296196096 ++wrote 4096/4096 bytes at offset 4296196096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296232960 ++wrote 4096/4096 bytes at offset 4296232960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296269824 ++wrote 4096/4096 bytes at offset 4296269824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296306688 ++wrote 4096/4096 bytes at offset 4296306688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296343552 ++wrote 4096/4096 bytes at offset 4296343552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296380416 ++wrote 4096/4096 bytes at offset 4296380416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296417280 ++wrote 4096/4096 bytes at offset 4296417280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296454144 ++wrote 4096/4096 bytes at offset 4296454144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296491008 ++wrote 4096/4096 bytes at offset 4296491008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296527872 ++wrote 4096/4096 bytes at offset 4296527872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296564736 ++wrote 4096/4096 bytes at offset 4296564736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296601600 ++wrote 4096/4096 bytes at offset 4296601600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296638464 ++wrote 4096/4096 bytes at offset 4296638464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296675328 ++wrote 4096/4096 bytes at offset 4296675328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296712192 ++wrote 4096/4096 bytes at offset 4296712192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296749056 ++wrote 4096/4096 bytes at offset 4296749056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296785920 ++wrote 4096/4096 bytes at offset 4296785920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296822784 ++wrote 4096/4096 bytes at offset 4296822784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296859648 ++wrote 4096/4096 bytes at offset 4296859648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296896512 ++wrote 4096/4096 bytes at offset 4296896512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296933376 ++wrote 4096/4096 bytes at offset 4296933376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296970240 ++wrote 4096/4096 bytes at offset 4296970240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297007104 ++wrote 4096/4096 bytes at offset 4297007104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297043968 ++wrote 4096/4096 bytes at offset 4297043968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297080832 ++wrote 4096/4096 bytes at offset 4297080832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297117696 ++wrote 4096/4096 bytes at offset 4297117696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297154560 ++wrote 4096/4096 bytes at offset 4297154560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297191424 ++wrote 4096/4096 bytes at offset 4297191424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297228288 ++wrote 4096/4096 bytes at offset 4297228288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297265152 ++wrote 4096/4096 bytes at offset 4297265152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297302016 ++wrote 4096/4096 bytes at offset 4297302016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297338880 ++wrote 4096/4096 bytes at offset 4297338880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297375744 ++wrote 4096/4096 bytes at offset 4297375744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297412608 ++wrote 4096/4096 bytes at offset 4297412608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297449472 ++wrote 4096/4096 bytes at offset 4297449472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297486336 ++wrote 4096/4096 bytes at offset 4297486336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297523200 ++wrote 4096/4096 bytes at offset 4297523200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297560064 ++wrote 4096/4096 bytes at offset 4297560064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297596928 ++wrote 4096/4096 bytes at offset 4297596928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297633792 ++wrote 4096/4096 bytes at offset 4297633792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297670656 ++wrote 4096/4096 bytes at offset 4297670656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297707520 ++wrote 4096/4096 bytes at offset 4297707520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297744384 ++wrote 4096/4096 bytes at offset 4297744384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297781248 ++wrote 4096/4096 bytes at offset 4297781248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297818112 ++wrote 4096/4096 bytes at offset 4297818112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297854976 ++wrote 4096/4096 bytes at offset 4297854976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297891840 ++wrote 4096/4096 bytes at offset 4297891840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297928704 ++wrote 4096/4096 bytes at offset 4297928704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4297965568 ++wrote 4096/4096 bytes at offset 4297965568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298002432 ++wrote 4096/4096 bytes at offset 4298002432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298039296 ++wrote 4096/4096 bytes at offset 4298039296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298076160 ++wrote 4096/4096 bytes at offset 4298076160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298113024 ++wrote 4096/4096 bytes at offset 4298113024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298149888 ++wrote 4096/4096 bytes at offset 4298149888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298186752 ++wrote 4096/4096 bytes at offset 4298186752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298223616 ++wrote 4096/4096 bytes at offset 4298223616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298260480 ++wrote 4096/4096 bytes at offset 4298260480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298297344 ++wrote 4096/4096 bytes at offset 4298297344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298334208 ++wrote 4096/4096 bytes at offset 4298334208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298371072 ++wrote 4096/4096 bytes at offset 4298371072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298407936 ++wrote 4096/4096 bytes at offset 4298407936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298444800 ++wrote 4096/4096 bytes at offset 4298444800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298481664 ++wrote 4096/4096 bytes at offset 4298481664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298518528 ++wrote 4096/4096 bytes at offset 4298518528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298555392 ++wrote 4096/4096 bytes at offset 4298555392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298592256 ++wrote 4096/4096 bytes at offset 4298592256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298629120 ++wrote 4096/4096 bytes at offset 4298629120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298665984 ++wrote 4096/4096 bytes at offset 4298665984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298702848 ++wrote 4096/4096 bytes at offset 4298702848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298739712 ++wrote 4096/4096 bytes at offset 4298739712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298776576 ++wrote 4096/4096 bytes at offset 4298776576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298813440 ++wrote 4096/4096 bytes at offset 4298813440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298850304 ++wrote 4096/4096 bytes at offset 4298850304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298887168 ++wrote 4096/4096 bytes at offset 4298887168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298924032 ++wrote 4096/4096 bytes at offset 4298924032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298960896 ++wrote 4096/4096 bytes at offset 4298960896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4298997760 ++wrote 4096/4096 bytes at offset 4298997760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299034624 ++wrote 4096/4096 bytes at offset 4299034624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299071488 ++wrote 4096/4096 bytes at offset 4299071488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299108352 ++wrote 4096/4096 bytes at offset 4299108352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299145216 ++wrote 4096/4096 bytes at offset 4299145216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299182080 ++wrote 4096/4096 bytes at offset 4299182080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299218944 ++wrote 4096/4096 bytes at offset 4299218944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299255808 ++wrote 4096/4096 bytes at offset 4299255808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299292672 ++wrote 4096/4096 bytes at offset 4299292672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299329536 ++wrote 4096/4096 bytes at offset 4299329536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299366400 ++wrote 4096/4096 bytes at offset 4299366400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299403264 ++wrote 4096/4096 bytes at offset 4299403264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299440128 ++wrote 4096/4096 bytes at offset 4299440128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299476992 ++wrote 4096/4096 bytes at offset 4299476992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299513856 ++wrote 4096/4096 bytes at offset 4299513856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299550720 ++wrote 4096/4096 bytes at offset 4299550720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299587584 ++wrote 4096/4096 bytes at offset 4299587584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299624448 ++wrote 4096/4096 bytes at offset 4299624448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299661312 ++wrote 4096/4096 bytes at offset 4299661312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299698176 ++wrote 4096/4096 bytes at offset 4299698176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299735040 ++wrote 4096/4096 bytes at offset 4299735040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299771904 ++wrote 4096/4096 bytes at offset 4299771904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299808768 ++wrote 4096/4096 bytes at offset 4299808768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299845632 ++wrote 4096/4096 bytes at offset 4299845632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299882496 ++wrote 4096/4096 bytes at offset 4299882496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299919360 ++wrote 4096/4096 bytes at offset 4299919360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299956224 ++wrote 4096/4096 bytes at offset 4299956224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4299993088 ++wrote 4096/4096 bytes at offset 4299993088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300029952 ++wrote 4096/4096 bytes at offset 4300029952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300066816 ++wrote 4096/4096 bytes at offset 4300066816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300103680 ++wrote 4096/4096 bytes at offset 4300103680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300140544 ++wrote 4096/4096 bytes at offset 4300140544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300177408 ++wrote 4096/4096 bytes at offset 4300177408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300214272 ++wrote 4096/4096 bytes at offset 4300214272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300251136 ++wrote 4096/4096 bytes at offset 4300251136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300288000 ++wrote 4096/4096 bytes at offset 4300288000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300324864 ++wrote 4096/4096 bytes at offset 4300324864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300361728 ++wrote 4096/4096 bytes at offset 4300361728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300398592 ++wrote 4096/4096 bytes at offset 4300398592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300435456 ++wrote 4096/4096 bytes at offset 4300435456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300472320 ++wrote 4096/4096 bytes at offset 4300472320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300509184 ++wrote 4096/4096 bytes at offset 4300509184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300546048 ++wrote 4096/4096 bytes at offset 4300546048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300582912 ++wrote 4096/4096 bytes at offset 4300582912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300619776 ++wrote 4096/4096 bytes at offset 4300619776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300656640 ++wrote 4096/4096 bytes at offset 4300656640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300693504 ++wrote 4096/4096 bytes at offset 4300693504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300730368 ++wrote 4096/4096 bytes at offset 4300730368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300767232 ++wrote 4096/4096 bytes at offset 4300767232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300804096 ++wrote 4096/4096 bytes at offset 4300804096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300840960 ++wrote 4096/4096 bytes at offset 4300840960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300877824 ++wrote 4096/4096 bytes at offset 4300877824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300914688 ++wrote 4096/4096 bytes at offset 4300914688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300951552 ++wrote 4096/4096 bytes at offset 4300951552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4300988416 ++wrote 4096/4096 bytes at offset 4300988416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301025280 ++wrote 4096/4096 bytes at offset 4301025280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301062144 ++wrote 4096/4096 bytes at offset 4301062144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301099008 ++wrote 4096/4096 bytes at offset 4301099008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301135872 ++wrote 4096/4096 bytes at offset 4301135872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301172736 ++wrote 4096/4096 bytes at offset 4301172736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301209600 ++wrote 4096/4096 bytes at offset 4301209600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301246464 ++wrote 4096/4096 bytes at offset 4301246464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301283328 ++wrote 4096/4096 bytes at offset 4301283328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301320192 ++wrote 4096/4096 bytes at offset 4301320192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301357056 ++wrote 4096/4096 bytes at offset 4301357056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301393920 ++wrote 4096/4096 bytes at offset 4301393920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301430784 ++wrote 4096/4096 bytes at offset 4301430784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301467648 ++wrote 4096/4096 bytes at offset 4301467648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301504512 ++wrote 4096/4096 bytes at offset 4301504512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301541376 ++wrote 4096/4096 bytes at offset 4301541376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301578240 ++wrote 4096/4096 bytes at offset 4301578240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301615104 ++wrote 4096/4096 bytes at offset 4301615104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301651968 ++wrote 4096/4096 bytes at offset 4301651968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301688832 ++wrote 4096/4096 bytes at offset 4301688832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301725696 ++wrote 4096/4096 bytes at offset 4301725696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301762560 ++wrote 4096/4096 bytes at offset 4301762560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301799424 ++wrote 4096/4096 bytes at offset 4301799424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301836288 ++wrote 4096/4096 bytes at offset 4301836288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301873152 ++wrote 4096/4096 bytes at offset 4301873152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301910016 ++wrote 4096/4096 bytes at offset 4301910016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301946880 ++wrote 4096/4096 bytes at offset 4301946880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4301983744 ++wrote 4096/4096 bytes at offset 4301983744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302020608 ++wrote 4096/4096 bytes at offset 4302020608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302057472 ++wrote 4096/4096 bytes at offset 4302057472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302094336 ++wrote 4096/4096 bytes at offset 4302094336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302131200 ++wrote 4096/4096 bytes at offset 4302131200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302168064 ++wrote 4096/4096 bytes at offset 4302168064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302204928 ++wrote 4096/4096 bytes at offset 4302204928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302241792 ++wrote 4096/4096 bytes at offset 4302241792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302278656 ++wrote 4096/4096 bytes at offset 4302278656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302315520 ++wrote 4096/4096 bytes at offset 4302315520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302352384 ++wrote 4096/4096 bytes at offset 4302352384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302389248 ++wrote 4096/4096 bytes at offset 4302389248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302426112 ++wrote 4096/4096 bytes at offset 4302426112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302462976 ++wrote 4096/4096 bytes at offset 4302462976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302499840 ++wrote 4096/4096 bytes at offset 4302499840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302536704 ++wrote 4096/4096 bytes at offset 4302536704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302573568 ++wrote 4096/4096 bytes at offset 4302573568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302610432 ++wrote 4096/4096 bytes at offset 4302610432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302647296 ++wrote 4096/4096 bytes at offset 4302647296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302684160 ++wrote 4096/4096 bytes at offset 4302684160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302721024 ++wrote 4096/4096 bytes at offset 4302721024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302757888 ++wrote 4096/4096 bytes at offset 4302757888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302794752 ++wrote 4096/4096 bytes at offset 4302794752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302831616 ++wrote 4096/4096 bytes at offset 4302831616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302868480 ++wrote 4096/4096 bytes at offset 4302868480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302905344 ++wrote 4096/4096 bytes at offset 4302905344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302942208 ++wrote 4096/4096 bytes at offset 4302942208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4302979072 ++wrote 4096/4096 bytes at offset 4302979072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303015936 ++wrote 4096/4096 bytes at offset 4303015936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303052800 ++wrote 4096/4096 bytes at offset 4303052800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303089664 ++wrote 4096/4096 bytes at offset 4303089664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303126528 ++wrote 4096/4096 bytes at offset 4303126528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303163392 ++wrote 4096/4096 bytes at offset 4303163392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303200256 ++wrote 4096/4096 bytes at offset 4303200256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303237120 ++wrote 4096/4096 bytes at offset 4303237120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303273984 ++wrote 4096/4096 bytes at offset 4303273984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303310848 ++wrote 4096/4096 bytes at offset 4303310848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303347712 ++wrote 4096/4096 bytes at offset 4303347712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303384576 ++wrote 4096/4096 bytes at offset 4303384576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303421440 ++wrote 4096/4096 bytes at offset 4303421440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303458304 ++wrote 4096/4096 bytes at offset 4303458304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303495168 ++wrote 4096/4096 bytes at offset 4303495168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303532032 ++wrote 4096/4096 bytes at offset 4303532032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303568896 ++wrote 4096/4096 bytes at offset 4303568896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303605760 ++wrote 4096/4096 bytes at offset 4303605760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303642624 ++wrote 4096/4096 bytes at offset 4303642624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303679488 ++wrote 4096/4096 bytes at offset 4303679488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303716352 ++wrote 4096/4096 bytes at offset 4303716352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303753216 ++wrote 4096/4096 bytes at offset 4303753216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303790080 ++wrote 4096/4096 bytes at offset 4303790080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303826944 ++wrote 4096/4096 bytes at offset 4303826944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303863808 ++wrote 4096/4096 bytes at offset 4303863808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303900672 ++wrote 4096/4096 bytes at offset 4303900672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303937536 ++wrote 4096/4096 bytes at offset 4303937536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4303974400 ++wrote 4096/4096 bytes at offset 4303974400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304011264 ++wrote 4096/4096 bytes at offset 4304011264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304048128 ++wrote 4096/4096 bytes at offset 4304048128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304084992 ++wrote 4096/4096 bytes at offset 4304084992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304121856 ++wrote 4096/4096 bytes at offset 4304121856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304158720 ++wrote 4096/4096 bytes at offset 4304158720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304195584 ++wrote 4096/4096 bytes at offset 4304195584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304232448 ++wrote 4096/4096 bytes at offset 4304232448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304269312 ++wrote 4096/4096 bytes at offset 4304269312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304306176 ++wrote 4096/4096 bytes at offset 4304306176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304343040 ++wrote 4096/4096 bytes at offset 4304343040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4304379904 ++wrote 4096/4096 bytes at offset 4304379904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 8192/8192 bytes at offset 4294967296 ++read 8192/8192 bytes at offset 4294967296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295004160 ++read 8192/8192 bytes at offset 4295004160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295041024 ++read 8192/8192 bytes at offset 4295041024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295077888 ++read 8192/8192 bytes at offset 4295077888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295114752 ++read 8192/8192 bytes at offset 4295114752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295151616 ++read 8192/8192 bytes at offset 4295151616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295188480 ++read 8192/8192 bytes at offset 4295188480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295225344 ++read 8192/8192 bytes at offset 4295225344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295262208 ++read 8192/8192 bytes at offset 4295262208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295299072 ++read 8192/8192 bytes at offset 4295299072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295335936 ++read 8192/8192 bytes at offset 4295335936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295372800 ++read 8192/8192 bytes at offset 4295372800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295409664 ++read 8192/8192 bytes at offset 4295409664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295446528 ++read 8192/8192 bytes at offset 4295446528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295483392 ++read 8192/8192 bytes at offset 4295483392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295520256 ++read 8192/8192 bytes at offset 4295520256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295557120 ++read 8192/8192 bytes at offset 4295557120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295593984 ++read 8192/8192 bytes at offset 4295593984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295630848 ++read 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295667712 ++read 8192/8192 bytes at offset 4295667712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295704576 ++read 8192/8192 bytes at offset 4295704576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295741440 ++read 8192/8192 bytes at offset 4295741440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778304 ++read 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295815168 ++read 8192/8192 bytes at offset 4295815168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295852032 ++read 8192/8192 bytes at offset 4295852032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295888896 ++read 8192/8192 bytes at offset 4295888896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295925760 ++read 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295962624 ++read 8192/8192 bytes at offset 4295962624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295999488 ++read 8192/8192 bytes at offset 4295999488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296036352 ++read 8192/8192 bytes at offset 4296036352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073216 ++read 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296110080 ++read 8192/8192 bytes at offset 4296110080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296146944 ++read 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296183808 ++read 8192/8192 bytes at offset 4296183808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296220672 ++read 8192/8192 bytes at offset 4296220672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296257536 ++read 8192/8192 bytes at offset 4296257536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294400 ++read 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296331264 ++read 8192/8192 bytes at offset 4296331264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296368128 ++read 8192/8192 bytes at offset 4296368128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296404992 ++read 8192/8192 bytes at offset 4296404992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296441856 ++read 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296478720 ++read 8192/8192 bytes at offset 4296478720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296515584 ++read 8192/8192 bytes at offset 4296515584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296552448 ++read 8192/8192 bytes at offset 4296552448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589312 ++read 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296626176 ++read 8192/8192 bytes at offset 4296626176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296663040 ++read 8192/8192 bytes at offset 4296663040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296699904 ++read 8192/8192 bytes at offset 4296699904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296736768 ++read 8192/8192 bytes at offset 4296736768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296773632 ++read 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296810496 ++read 8192/8192 bytes at offset 4296810496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296847360 ++read 8192/8192 bytes at offset 4296847360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296884224 ++read 8192/8192 bytes at offset 4296884224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921088 ++read 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296957952 ++read 8192/8192 bytes at offset 4296957952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296994816 ++read 8192/8192 bytes at offset 4296994816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297031680 ++read 8192/8192 bytes at offset 4297031680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297068544 ++read 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297105408 ++read 8192/8192 bytes at offset 4297105408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297142272 ++read 8192/8192 bytes at offset 4297142272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297179136 ++read 8192/8192 bytes at offset 4297179136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216000 ++read 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297252864 ++read 8192/8192 bytes at offset 4297252864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297289728 ++read 8192/8192 bytes at offset 4297289728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297326592 ++read 8192/8192 bytes at offset 4297326592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297363456 ++read 8192/8192 bytes at offset 4297363456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297400320 ++read 8192/8192 bytes at offset 4297400320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297437184 ++read 8192/8192 bytes at offset 4297437184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297474048 ++read 8192/8192 bytes at offset 4297474048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297510912 ++read 8192/8192 bytes at offset 4297510912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297547776 ++read 8192/8192 bytes at offset 4297547776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297584640 ++read 8192/8192 bytes at offset 4297584640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297621504 ++read 8192/8192 bytes at offset 4297621504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297658368 ++read 8192/8192 bytes at offset 4297658368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297695232 ++read 8192/8192 bytes at offset 4297695232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297732096 ++read 8192/8192 bytes at offset 4297732096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297768960 ++read 8192/8192 bytes at offset 4297768960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297805824 ++read 8192/8192 bytes at offset 4297805824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297842688 ++read 8192/8192 bytes at offset 4297842688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297879552 ++read 8192/8192 bytes at offset 4297879552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297916416 ++read 8192/8192 bytes at offset 4297916416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297953280 ++read 8192/8192 bytes at offset 4297953280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297990144 ++read 8192/8192 bytes at offset 4297990144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298027008 ++read 8192/8192 bytes at offset 4298027008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298063872 ++read 8192/8192 bytes at offset 4298063872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298100736 ++read 8192/8192 bytes at offset 4298100736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298137600 ++read 8192/8192 bytes at offset 4298137600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298174464 ++read 8192/8192 bytes at offset 4298174464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298211328 ++read 8192/8192 bytes at offset 4298211328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298248192 ++read 8192/8192 bytes at offset 4298248192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298285056 ++read 8192/8192 bytes at offset 4298285056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298321920 ++read 8192/8192 bytes at offset 4298321920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298358784 ++read 8192/8192 bytes at offset 4298358784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298395648 ++read 8192/8192 bytes at offset 4298395648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298432512 ++read 8192/8192 bytes at offset 4298432512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298469376 ++read 8192/8192 bytes at offset 4298469376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298506240 ++read 8192/8192 bytes at offset 4298506240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298543104 ++read 8192/8192 bytes at offset 4298543104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298579968 ++read 8192/8192 bytes at offset 4298579968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298616832 ++read 8192/8192 bytes at offset 4298616832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298653696 ++read 8192/8192 bytes at offset 4298653696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298690560 ++read 8192/8192 bytes at offset 4298690560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298727424 ++read 8192/8192 bytes at offset 4298727424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298764288 ++read 8192/8192 bytes at offset 4298764288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298801152 ++read 8192/8192 bytes at offset 4298801152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298838016 ++read 8192/8192 bytes at offset 4298838016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298874880 ++read 8192/8192 bytes at offset 4298874880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298911744 ++read 8192/8192 bytes at offset 4298911744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298948608 ++read 8192/8192 bytes at offset 4298948608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298985472 ++read 8192/8192 bytes at offset 4298985472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299022336 ++read 8192/8192 bytes at offset 4299022336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299059200 ++read 8192/8192 bytes at offset 4299059200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299096064 ++read 8192/8192 bytes at offset 4299096064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299132928 ++read 8192/8192 bytes at offset 4299132928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299169792 ++read 8192/8192 bytes at offset 4299169792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299206656 ++read 8192/8192 bytes at offset 4299206656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299243520 ++read 8192/8192 bytes at offset 4299243520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299280384 ++read 8192/8192 bytes at offset 4299280384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299317248 ++read 8192/8192 bytes at offset 4299317248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299354112 ++read 8192/8192 bytes at offset 4299354112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299390976 ++read 8192/8192 bytes at offset 4299390976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299427840 ++read 8192/8192 bytes at offset 4299427840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299464704 ++read 8192/8192 bytes at offset 4299464704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299501568 ++read 8192/8192 bytes at offset 4299501568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299538432 ++read 8192/8192 bytes at offset 4299538432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299575296 ++read 8192/8192 bytes at offset 4299575296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299612160 ++read 8192/8192 bytes at offset 4299612160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299649024 ++read 8192/8192 bytes at offset 4299649024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299685888 ++read 8192/8192 bytes at offset 4299685888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299722752 ++read 8192/8192 bytes at offset 4299722752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299759616 ++read 8192/8192 bytes at offset 4299759616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299796480 ++read 8192/8192 bytes at offset 4299796480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299833344 ++read 8192/8192 bytes at offset 4299833344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299870208 ++read 8192/8192 bytes at offset 4299870208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299907072 ++read 8192/8192 bytes at offset 4299907072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299943936 ++read 8192/8192 bytes at offset 4299943936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299980800 ++read 8192/8192 bytes at offset 4299980800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300017664 ++read 8192/8192 bytes at offset 4300017664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300054528 ++read 8192/8192 bytes at offset 4300054528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300091392 ++read 8192/8192 bytes at offset 4300091392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300128256 ++read 8192/8192 bytes at offset 4300128256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300165120 ++read 8192/8192 bytes at offset 4300165120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300201984 ++read 8192/8192 bytes at offset 4300201984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300238848 ++read 8192/8192 bytes at offset 4300238848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300275712 ++read 8192/8192 bytes at offset 4300275712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300312576 ++read 8192/8192 bytes at offset 4300312576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300349440 ++read 8192/8192 bytes at offset 4300349440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300386304 ++read 8192/8192 bytes at offset 4300386304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300423168 ++read 8192/8192 bytes at offset 4300423168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300460032 ++read 8192/8192 bytes at offset 4300460032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300496896 ++read 8192/8192 bytes at offset 4300496896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300533760 ++read 8192/8192 bytes at offset 4300533760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300570624 ++read 8192/8192 bytes at offset 4300570624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300607488 ++read 8192/8192 bytes at offset 4300607488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300644352 ++read 8192/8192 bytes at offset 4300644352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300681216 ++read 8192/8192 bytes at offset 4300681216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300718080 ++read 8192/8192 bytes at offset 4300718080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300754944 ++read 8192/8192 bytes at offset 4300754944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300791808 ++read 8192/8192 bytes at offset 4300791808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300828672 ++read 8192/8192 bytes at offset 4300828672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300865536 ++read 8192/8192 bytes at offset 4300865536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300902400 ++read 8192/8192 bytes at offset 4300902400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300939264 ++read 8192/8192 bytes at offset 4300939264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300976128 ++read 8192/8192 bytes at offset 4300976128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301012992 ++read 8192/8192 bytes at offset 4301012992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301049856 ++read 8192/8192 bytes at offset 4301049856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301086720 ++read 8192/8192 bytes at offset 4301086720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301123584 ++read 8192/8192 bytes at offset 4301123584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301160448 ++read 8192/8192 bytes at offset 4301160448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301197312 ++read 8192/8192 bytes at offset 4301197312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301234176 ++read 8192/8192 bytes at offset 4301234176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301271040 ++read 8192/8192 bytes at offset 4301271040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301307904 ++read 8192/8192 bytes at offset 4301307904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301344768 ++read 8192/8192 bytes at offset 4301344768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301381632 ++read 8192/8192 bytes at offset 4301381632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301418496 ++read 8192/8192 bytes at offset 4301418496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301455360 ++read 8192/8192 bytes at offset 4301455360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301492224 ++read 8192/8192 bytes at offset 4301492224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301529088 ++read 8192/8192 bytes at offset 4301529088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301565952 ++read 8192/8192 bytes at offset 4301565952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301602816 ++read 8192/8192 bytes at offset 4301602816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301639680 ++read 8192/8192 bytes at offset 4301639680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301676544 ++read 8192/8192 bytes at offset 4301676544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301713408 ++read 8192/8192 bytes at offset 4301713408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301750272 ++read 8192/8192 bytes at offset 4301750272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301787136 ++read 8192/8192 bytes at offset 4301787136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301824000 ++read 8192/8192 bytes at offset 4301824000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301860864 ++read 8192/8192 bytes at offset 4301860864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301897728 ++read 8192/8192 bytes at offset 4301897728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301934592 ++read 8192/8192 bytes at offset 4301934592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301971456 ++read 8192/8192 bytes at offset 4301971456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302008320 ++read 8192/8192 bytes at offset 4302008320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302045184 ++read 8192/8192 bytes at offset 4302045184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302082048 ++read 8192/8192 bytes at offset 4302082048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302118912 ++read 8192/8192 bytes at offset 4302118912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302155776 ++read 8192/8192 bytes at offset 4302155776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302192640 ++read 8192/8192 bytes at offset 4302192640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302229504 ++read 8192/8192 bytes at offset 4302229504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302266368 ++read 8192/8192 bytes at offset 4302266368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302303232 ++read 8192/8192 bytes at offset 4302303232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302340096 ++read 8192/8192 bytes at offset 4302340096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302376960 ++read 8192/8192 bytes at offset 4302376960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302413824 ++read 8192/8192 bytes at offset 4302413824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302450688 ++read 8192/8192 bytes at offset 4302450688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302487552 ++read 8192/8192 bytes at offset 4302487552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302524416 ++read 8192/8192 bytes at offset 4302524416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302561280 ++read 8192/8192 bytes at offset 4302561280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302598144 ++read 8192/8192 bytes at offset 4302598144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302635008 ++read 8192/8192 bytes at offset 4302635008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302671872 ++read 8192/8192 bytes at offset 4302671872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302708736 ++read 8192/8192 bytes at offset 4302708736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302745600 ++read 8192/8192 bytes at offset 4302745600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302782464 ++read 8192/8192 bytes at offset 4302782464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302819328 ++read 8192/8192 bytes at offset 4302819328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302856192 ++read 8192/8192 bytes at offset 4302856192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302893056 ++read 8192/8192 bytes at offset 4302893056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302929920 ++read 8192/8192 bytes at offset 4302929920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302966784 ++read 8192/8192 bytes at offset 4302966784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303003648 ++read 8192/8192 bytes at offset 4303003648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303040512 ++read 8192/8192 bytes at offset 4303040512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303077376 ++read 8192/8192 bytes at offset 4303077376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303114240 ++read 8192/8192 bytes at offset 4303114240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303151104 ++read 8192/8192 bytes at offset 4303151104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303187968 ++read 8192/8192 bytes at offset 4303187968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303224832 ++read 8192/8192 bytes at offset 4303224832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303261696 ++read 8192/8192 bytes at offset 4303261696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303298560 ++read 8192/8192 bytes at offset 4303298560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303335424 ++read 8192/8192 bytes at offset 4303335424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303372288 ++read 8192/8192 bytes at offset 4303372288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303409152 ++read 8192/8192 bytes at offset 4303409152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303446016 ++read 8192/8192 bytes at offset 4303446016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303482880 ++read 8192/8192 bytes at offset 4303482880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303519744 ++read 8192/8192 bytes at offset 4303519744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303556608 ++read 8192/8192 bytes at offset 4303556608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303593472 ++read 8192/8192 bytes at offset 4303593472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303630336 ++read 8192/8192 bytes at offset 4303630336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303667200 ++read 8192/8192 bytes at offset 4303667200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303704064 ++read 8192/8192 bytes at offset 4303704064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303740928 ++read 8192/8192 bytes at offset 4303740928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303777792 ++read 8192/8192 bytes at offset 4303777792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303814656 ++read 8192/8192 bytes at offset 4303814656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303851520 ++read 8192/8192 bytes at offset 4303851520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303888384 ++read 8192/8192 bytes at offset 4303888384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303925248 ++read 8192/8192 bytes at offset 4303925248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303962112 ++read 8192/8192 bytes at offset 4303962112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303998976 ++read 8192/8192 bytes at offset 4303998976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304035840 ++read 8192/8192 bytes at offset 4304035840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304072704 ++read 8192/8192 bytes at offset 4304072704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304109568 ++read 8192/8192 bytes at offset 4304109568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304146432 ++read 8192/8192 bytes at offset 4304146432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304183296 ++read 8192/8192 bytes at offset 4304183296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304220160 ++read 8192/8192 bytes at offset 4304220160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304257024 ++read 8192/8192 bytes at offset 4304257024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304293888 ++read 8192/8192 bytes at offset 4304293888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304330752 ++read 8192/8192 bytes at offset 4304330752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304367616 ++read 8192/8192 bytes at offset 4304367616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 12288/12288 bytes at offset 4294979584 ++=== IO: pattern 165 ++read 12288/12288 bytes at offset 4294979584 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295016448 ++read 12288/12288 bytes at offset 4295016448 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295053312 ++read 12288/12288 bytes at offset 4295053312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295090176 ++read 12288/12288 bytes at offset 4295090176 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295127040 ++read 12288/12288 bytes at offset 4295127040 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295163904 ++read 12288/12288 bytes at offset 4295163904 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295200768 ++read 12288/12288 bytes at offset 4295200768 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295237632 ++read 12288/12288 bytes at offset 4295237632 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295274496 ++read 12288/12288 bytes at offset 4295274496 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295311360 ++read 12288/12288 bytes at offset 4295311360 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295348224 ++read 12288/12288 bytes at offset 4295348224 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295385088 ++read 12288/12288 bytes at offset 4295385088 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295421952 ++read 12288/12288 bytes at offset 4295421952 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295458816 ++read 12288/12288 bytes at offset 4295458816 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295495680 ++read 12288/12288 bytes at offset 4295495680 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295532544 ++read 12288/12288 bytes at offset 4295532544 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295569408 ++read 12288/12288 bytes at offset 4295569408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295606272 ++read 12288/12288 bytes at offset 4295606272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295643136 ++read 12288/12288 bytes at offset 4295643136 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295680000 ++read 12288/12288 bytes at offset 4295680000 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295716864 ++read 12288/12288 bytes at offset 4295716864 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295753728 ++read 12288/12288 bytes at offset 4295753728 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295790592 ++read 12288/12288 bytes at offset 4295790592 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295827456 ++read 12288/12288 bytes at offset 4295827456 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295864320 ++read 12288/12288 bytes at offset 4295864320 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295901184 ++read 12288/12288 bytes at offset 4295901184 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295938048 ++read 12288/12288 bytes at offset 4295938048 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295974912 ++read 12288/12288 bytes at offset 4295974912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296011776 ++read 12288/12288 bytes at offset 4296011776 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296048640 ++read 12288/12288 bytes at offset 4296048640 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296085504 ++read 12288/12288 bytes at offset 4296085504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296122368 ++read 12288/12288 bytes at offset 4296122368 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296159232 ++read 12288/12288 bytes at offset 4296159232 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296196096 ++read 12288/12288 bytes at offset 4296196096 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296232960 ++read 12288/12288 bytes at offset 4296232960 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296269824 ++read 12288/12288 bytes at offset 4296269824 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296306688 ++read 12288/12288 bytes at offset 4296306688 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296343552 ++read 12288/12288 bytes at offset 4296343552 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296380416 ++read 12288/12288 bytes at offset 4296380416 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296417280 ++read 12288/12288 bytes at offset 4296417280 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296454144 ++read 12288/12288 bytes at offset 4296454144 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296491008 ++read 12288/12288 bytes at offset 4296491008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296527872 ++read 12288/12288 bytes at offset 4296527872 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296564736 ++read 12288/12288 bytes at offset 4296564736 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296601600 ++read 12288/12288 bytes at offset 4296601600 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296638464 ++read 12288/12288 bytes at offset 4296638464 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296675328 ++read 12288/12288 bytes at offset 4296675328 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296712192 ++read 12288/12288 bytes at offset 4296712192 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296749056 ++read 12288/12288 bytes at offset 4296749056 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296785920 ++read 12288/12288 bytes at offset 4296785920 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296822784 ++read 12288/12288 bytes at offset 4296822784 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296859648 ++read 12288/12288 bytes at offset 4296859648 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296896512 ++read 12288/12288 bytes at offset 4296896512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296933376 ++read 12288/12288 bytes at offset 4296933376 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4296970240 ++read 12288/12288 bytes at offset 4296970240 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297007104 ++read 12288/12288 bytes at offset 4297007104 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297043968 ++read 12288/12288 bytes at offset 4297043968 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297080832 ++read 12288/12288 bytes at offset 4297080832 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297117696 ++read 12288/12288 bytes at offset 4297117696 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297154560 ++read 12288/12288 bytes at offset 4297154560 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297191424 ++read 12288/12288 bytes at offset 4297191424 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297228288 ++read 12288/12288 bytes at offset 4297228288 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297265152 ++read 12288/12288 bytes at offset 4297265152 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297302016 ++read 12288/12288 bytes at offset 4297302016 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297338880 ++read 12288/12288 bytes at offset 4297338880 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297375744 ++read 12288/12288 bytes at offset 4297375744 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297412608 ++read 12288/12288 bytes at offset 4297412608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297449472 ++read 12288/12288 bytes at offset 4297449472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297486336 ++read 12288/12288 bytes at offset 4297486336 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297523200 ++read 12288/12288 bytes at offset 4297523200 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297560064 ++read 12288/12288 bytes at offset 4297560064 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297596928 ++read 12288/12288 bytes at offset 4297596928 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297633792 ++read 12288/12288 bytes at offset 4297633792 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297670656 ++read 12288/12288 bytes at offset 4297670656 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297707520 ++read 12288/12288 bytes at offset 4297707520 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297744384 ++read 12288/12288 bytes at offset 4297744384 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297781248 ++read 12288/12288 bytes at offset 4297781248 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297818112 ++read 12288/12288 bytes at offset 4297818112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297854976 ++read 12288/12288 bytes at offset 4297854976 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297891840 ++read 12288/12288 bytes at offset 4297891840 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297928704 ++read 12288/12288 bytes at offset 4297928704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4297965568 ++read 12288/12288 bytes at offset 4297965568 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298002432 ++read 12288/12288 bytes at offset 4298002432 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298039296 ++read 12288/12288 bytes at offset 4298039296 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298076160 ++read 12288/12288 bytes at offset 4298076160 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298113024 ++read 12288/12288 bytes at offset 4298113024 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298149888 ++read 12288/12288 bytes at offset 4298149888 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298186752 ++read 12288/12288 bytes at offset 4298186752 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298223616 ++read 12288/12288 bytes at offset 4298223616 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298260480 ++read 12288/12288 bytes at offset 4298260480 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298297344 ++read 12288/12288 bytes at offset 4298297344 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298334208 ++read 12288/12288 bytes at offset 4298334208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298371072 ++read 12288/12288 bytes at offset 4298371072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298407936 ++read 12288/12288 bytes at offset 4298407936 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298444800 ++read 12288/12288 bytes at offset 4298444800 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298481664 ++read 12288/12288 bytes at offset 4298481664 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298518528 ++read 12288/12288 bytes at offset 4298518528 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298555392 ++read 12288/12288 bytes at offset 4298555392 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298592256 ++read 12288/12288 bytes at offset 4298592256 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298629120 ++read 12288/12288 bytes at offset 4298629120 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298665984 ++read 12288/12288 bytes at offset 4298665984 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298702848 ++read 12288/12288 bytes at offset 4298702848 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298739712 ++read 12288/12288 bytes at offset 4298739712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298776576 ++read 12288/12288 bytes at offset 4298776576 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298813440 ++read 12288/12288 bytes at offset 4298813440 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298850304 ++read 12288/12288 bytes at offset 4298850304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298887168 ++read 12288/12288 bytes at offset 4298887168 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298924032 ++read 12288/12288 bytes at offset 4298924032 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298960896 ++read 12288/12288 bytes at offset 4298960896 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4298997760 ++read 12288/12288 bytes at offset 4298997760 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299034624 ++read 12288/12288 bytes at offset 4299034624 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299071488 ++read 12288/12288 bytes at offset 4299071488 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299108352 ++read 12288/12288 bytes at offset 4299108352 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299145216 ++read 12288/12288 bytes at offset 4299145216 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299182080 ++read 12288/12288 bytes at offset 4299182080 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299218944 ++read 12288/12288 bytes at offset 4299218944 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299255808 ++read 12288/12288 bytes at offset 4299255808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299292672 ++read 12288/12288 bytes at offset 4299292672 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299329536 ++read 12288/12288 bytes at offset 4299329536 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299366400 ++read 12288/12288 bytes at offset 4299366400 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299403264 ++read 12288/12288 bytes at offset 4299403264 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299440128 ++read 12288/12288 bytes at offset 4299440128 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299476992 ++read 12288/12288 bytes at offset 4299476992 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299513856 ++read 12288/12288 bytes at offset 4299513856 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299550720 ++read 12288/12288 bytes at offset 4299550720 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299587584 ++read 12288/12288 bytes at offset 4299587584 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299624448 ++read 12288/12288 bytes at offset 4299624448 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299661312 ++read 12288/12288 bytes at offset 4299661312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299698176 ++read 12288/12288 bytes at offset 4299698176 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299735040 ++read 12288/12288 bytes at offset 4299735040 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299771904 ++read 12288/12288 bytes at offset 4299771904 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299808768 ++read 12288/12288 bytes at offset 4299808768 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299845632 ++read 12288/12288 bytes at offset 4299845632 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299882496 ++read 12288/12288 bytes at offset 4299882496 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299919360 ++read 12288/12288 bytes at offset 4299919360 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299956224 ++read 12288/12288 bytes at offset 4299956224 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299993088 ++read 12288/12288 bytes at offset 4299993088 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300029952 ++read 12288/12288 bytes at offset 4300029952 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300066816 ++read 12288/12288 bytes at offset 4300066816 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300103680 ++read 12288/12288 bytes at offset 4300103680 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300140544 ++read 12288/12288 bytes at offset 4300140544 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300177408 ++read 12288/12288 bytes at offset 4300177408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300214272 ++read 12288/12288 bytes at offset 4300214272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300251136 ++read 12288/12288 bytes at offset 4300251136 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300288000 ++read 12288/12288 bytes at offset 4300288000 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300324864 ++read 12288/12288 bytes at offset 4300324864 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300361728 ++read 12288/12288 bytes at offset 4300361728 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300398592 ++read 12288/12288 bytes at offset 4300398592 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300435456 ++read 12288/12288 bytes at offset 4300435456 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300472320 ++read 12288/12288 bytes at offset 4300472320 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300509184 ++read 12288/12288 bytes at offset 4300509184 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300546048 ++read 12288/12288 bytes at offset 4300546048 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300582912 ++read 12288/12288 bytes at offset 4300582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300619776 ++read 12288/12288 bytes at offset 4300619776 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300656640 ++read 12288/12288 bytes at offset 4300656640 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300693504 ++read 12288/12288 bytes at offset 4300693504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300730368 ++read 12288/12288 bytes at offset 4300730368 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300767232 ++read 12288/12288 bytes at offset 4300767232 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300804096 ++read 12288/12288 bytes at offset 4300804096 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300840960 ++read 12288/12288 bytes at offset 4300840960 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300877824 ++read 12288/12288 bytes at offset 4300877824 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300914688 ++read 12288/12288 bytes at offset 4300914688 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300951552 ++read 12288/12288 bytes at offset 4300951552 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4300988416 ++read 12288/12288 bytes at offset 4300988416 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301025280 ++read 12288/12288 bytes at offset 4301025280 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301062144 ++read 12288/12288 bytes at offset 4301062144 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301099008 ++read 12288/12288 bytes at offset 4301099008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301135872 ++read 12288/12288 bytes at offset 4301135872 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301172736 ++read 12288/12288 bytes at offset 4301172736 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301209600 ++read 12288/12288 bytes at offset 4301209600 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301246464 ++read 12288/12288 bytes at offset 4301246464 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301283328 ++read 12288/12288 bytes at offset 4301283328 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301320192 ++read 12288/12288 bytes at offset 4301320192 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301357056 ++read 12288/12288 bytes at offset 4301357056 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301393920 ++read 12288/12288 bytes at offset 4301393920 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301430784 ++read 12288/12288 bytes at offset 4301430784 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301467648 ++read 12288/12288 bytes at offset 4301467648 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301504512 ++read 12288/12288 bytes at offset 4301504512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301541376 ++read 12288/12288 bytes at offset 4301541376 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301578240 ++read 12288/12288 bytes at offset 4301578240 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301615104 ++read 12288/12288 bytes at offset 4301615104 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301651968 ++read 12288/12288 bytes at offset 4301651968 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301688832 ++read 12288/12288 bytes at offset 4301688832 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301725696 ++read 12288/12288 bytes at offset 4301725696 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301762560 ++read 12288/12288 bytes at offset 4301762560 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301799424 ++read 12288/12288 bytes at offset 4301799424 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301836288 ++read 12288/12288 bytes at offset 4301836288 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301873152 ++read 12288/12288 bytes at offset 4301873152 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301910016 ++read 12288/12288 bytes at offset 4301910016 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301946880 ++read 12288/12288 bytes at offset 4301946880 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301983744 ++read 12288/12288 bytes at offset 4301983744 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302020608 ++read 12288/12288 bytes at offset 4302020608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302057472 ++read 12288/12288 bytes at offset 4302057472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302094336 ++read 12288/12288 bytes at offset 4302094336 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302131200 ++read 12288/12288 bytes at offset 4302131200 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302168064 ++read 12288/12288 bytes at offset 4302168064 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302204928 ++read 12288/12288 bytes at offset 4302204928 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302241792 ++read 12288/12288 bytes at offset 4302241792 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302278656 ++read 12288/12288 bytes at offset 4302278656 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302315520 ++read 12288/12288 bytes at offset 4302315520 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302352384 ++read 12288/12288 bytes at offset 4302352384 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302389248 ++read 12288/12288 bytes at offset 4302389248 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302426112 ++read 12288/12288 bytes at offset 4302426112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302462976 ++read 12288/12288 bytes at offset 4302462976 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302499840 ++read 12288/12288 bytes at offset 4302499840 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302536704 ++read 12288/12288 bytes at offset 4302536704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302573568 ++read 12288/12288 bytes at offset 4302573568 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302610432 ++read 12288/12288 bytes at offset 4302610432 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302647296 ++read 12288/12288 bytes at offset 4302647296 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302684160 ++read 12288/12288 bytes at offset 4302684160 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302721024 ++read 12288/12288 bytes at offset 4302721024 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302757888 ++read 12288/12288 bytes at offset 4302757888 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302794752 ++read 12288/12288 bytes at offset 4302794752 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302831616 ++read 12288/12288 bytes at offset 4302831616 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302868480 ++read 12288/12288 bytes at offset 4302868480 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302905344 ++read 12288/12288 bytes at offset 4302905344 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302942208 ++read 12288/12288 bytes at offset 4302942208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4302979072 ++read 12288/12288 bytes at offset 4302979072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303015936 ++read 12288/12288 bytes at offset 4303015936 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303052800 ++read 12288/12288 bytes at offset 4303052800 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303089664 ++read 12288/12288 bytes at offset 4303089664 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303126528 ++read 12288/12288 bytes at offset 4303126528 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303163392 ++read 12288/12288 bytes at offset 4303163392 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303200256 ++read 12288/12288 bytes at offset 4303200256 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303237120 ++read 12288/12288 bytes at offset 4303237120 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303273984 ++read 12288/12288 bytes at offset 4303273984 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303310848 ++read 12288/12288 bytes at offset 4303310848 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303347712 ++read 12288/12288 bytes at offset 4303347712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303384576 ++read 12288/12288 bytes at offset 4303384576 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303421440 ++read 12288/12288 bytes at offset 4303421440 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303458304 ++read 12288/12288 bytes at offset 4303458304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303495168 ++read 12288/12288 bytes at offset 4303495168 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303532032 ++read 12288/12288 bytes at offset 4303532032 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303568896 ++read 12288/12288 bytes at offset 4303568896 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303605760 ++read 12288/12288 bytes at offset 4303605760 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303642624 ++read 12288/12288 bytes at offset 4303642624 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303679488 ++read 12288/12288 bytes at offset 4303679488 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303716352 ++read 12288/12288 bytes at offset 4303716352 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303753216 ++read 12288/12288 bytes at offset 4303753216 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303790080 ++read 12288/12288 bytes at offset 4303790080 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303826944 ++read 12288/12288 bytes at offset 4303826944 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303863808 ++read 12288/12288 bytes at offset 4303863808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303900672 ++read 12288/12288 bytes at offset 4303900672 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303937536 ++read 12288/12288 bytes at offset 4303937536 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303974400 ++read 12288/12288 bytes at offset 4303974400 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304011264 ++read 12288/12288 bytes at offset 4304011264 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304048128 ++read 12288/12288 bytes at offset 4304048128 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304084992 ++read 12288/12288 bytes at offset 4304084992 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304121856 ++read 12288/12288 bytes at offset 4304121856 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304158720 ++read 12288/12288 bytes at offset 4304158720 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304195584 ++read 12288/12288 bytes at offset 4304195584 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304232448 ++read 12288/12288 bytes at offset 4304232448 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304269312 ++read 12288/12288 bytes at offset 4304269312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304306176 ++read 12288/12288 bytes at offset 4304306176 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304343040 ++read 12288/12288 bytes at offset 4304343040 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4304379904 ++read 12288/12288 bytes at offset 4304379904 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++=== IO: pattern 165 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296032256 ++read 4096/4096 bytes at offset 4296032256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296069120 ++read 4096/4096 bytes at offset 4296069120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296105984 ++read 4096/4096 bytes at offset 4296105984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296142848 ++read 4096/4096 bytes at offset 4296142848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296179712 ++read 4096/4096 bytes at offset 4296179712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296216576 ++read 4096/4096 bytes at offset 4296216576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296253440 ++read 4096/4096 bytes at offset 4296253440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296290304 ++read 4096/4096 bytes at offset 4296290304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296327168 ++read 4096/4096 bytes at offset 4296327168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296364032 ++read 4096/4096 bytes at offset 4296364032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296400896 ++read 4096/4096 bytes at offset 4296400896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296437760 ++read 4096/4096 bytes at offset 4296437760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296474624 ++read 4096/4096 bytes at offset 4296474624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296511488 ++read 4096/4096 bytes at offset 4296511488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296548352 ++read 4096/4096 bytes at offset 4296548352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296585216 ++read 4096/4096 bytes at offset 4296585216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296622080 ++read 4096/4096 bytes at offset 4296622080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296658944 ++read 4096/4096 bytes at offset 4296658944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296695808 ++read 4096/4096 bytes at offset 4296695808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296732672 ++read 4096/4096 bytes at offset 4296732672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296769536 ++read 4096/4096 bytes at offset 4296769536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296806400 ++read 4096/4096 bytes at offset 4296806400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296843264 ++read 4096/4096 bytes at offset 4296843264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296880128 ++read 4096/4096 bytes at offset 4296880128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296916992 ++read 4096/4096 bytes at offset 4296916992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296953856 ++read 4096/4096 bytes at offset 4296953856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296990720 ++read 4096/4096 bytes at offset 4296990720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297027584 ++read 4096/4096 bytes at offset 4297027584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297064448 ++read 4096/4096 bytes at offset 4297064448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297101312 ++read 4096/4096 bytes at offset 4297101312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297138176 ++read 4096/4096 bytes at offset 4297138176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297175040 ++read 4096/4096 bytes at offset 4297175040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297211904 ++read 4096/4096 bytes at offset 4297211904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297248768 ++read 4096/4096 bytes at offset 4297248768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297285632 ++read 4096/4096 bytes at offset 4297285632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297322496 ++read 4096/4096 bytes at offset 4297322496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297359360 ++read 4096/4096 bytes at offset 4297359360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297396224 ++read 4096/4096 bytes at offset 4297396224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297433088 ++read 4096/4096 bytes at offset 4297433088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297469952 ++read 4096/4096 bytes at offset 4297469952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297506816 ++read 4096/4096 bytes at offset 4297506816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297543680 ++read 4096/4096 bytes at offset 4297543680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297580544 ++read 4096/4096 bytes at offset 4297580544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297617408 ++read 4096/4096 bytes at offset 4297617408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297654272 ++read 4096/4096 bytes at offset 4297654272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297691136 ++read 4096/4096 bytes at offset 4297691136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297728000 ++read 4096/4096 bytes at offset 4297728000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297764864 ++read 4096/4096 bytes at offset 4297764864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297801728 ++read 4096/4096 bytes at offset 4297801728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297838592 ++read 4096/4096 bytes at offset 4297838592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297875456 ++read 4096/4096 bytes at offset 4297875456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297912320 ++read 4096/4096 bytes at offset 4297912320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297949184 ++read 4096/4096 bytes at offset 4297949184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297986048 ++read 4096/4096 bytes at offset 4297986048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298022912 ++read 4096/4096 bytes at offset 4298022912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298059776 ++read 4096/4096 bytes at offset 4298059776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298096640 ++read 4096/4096 bytes at offset 4298096640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298133504 ++read 4096/4096 bytes at offset 4298133504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298170368 ++read 4096/4096 bytes at offset 4298170368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298207232 ++read 4096/4096 bytes at offset 4298207232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298244096 ++read 4096/4096 bytes at offset 4298244096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298280960 ++read 4096/4096 bytes at offset 4298280960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298317824 ++read 4096/4096 bytes at offset 4298317824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298354688 ++read 4096/4096 bytes at offset 4298354688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298391552 ++read 4096/4096 bytes at offset 4298391552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298428416 ++read 4096/4096 bytes at offset 4298428416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298465280 ++read 4096/4096 bytes at offset 4298465280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298502144 ++read 4096/4096 bytes at offset 4298502144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298539008 ++read 4096/4096 bytes at offset 4298539008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298575872 ++read 4096/4096 bytes at offset 4298575872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298612736 ++read 4096/4096 bytes at offset 4298612736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298649600 ++read 4096/4096 bytes at offset 4298649600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298686464 ++read 4096/4096 bytes at offset 4298686464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298723328 ++read 4096/4096 bytes at offset 4298723328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298760192 ++read 4096/4096 bytes at offset 4298760192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298797056 ++read 4096/4096 bytes at offset 4298797056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298833920 ++read 4096/4096 bytes at offset 4298833920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298870784 ++read 4096/4096 bytes at offset 4298870784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298907648 ++read 4096/4096 bytes at offset 4298907648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298944512 ++read 4096/4096 bytes at offset 4298944512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298981376 ++read 4096/4096 bytes at offset 4298981376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299018240 ++read 4096/4096 bytes at offset 4299018240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299055104 ++read 4096/4096 bytes at offset 4299055104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299091968 ++read 4096/4096 bytes at offset 4299091968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299128832 ++read 4096/4096 bytes at offset 4299128832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299165696 ++read 4096/4096 bytes at offset 4299165696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299202560 ++read 4096/4096 bytes at offset 4299202560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299239424 ++read 4096/4096 bytes at offset 4299239424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299276288 ++read 4096/4096 bytes at offset 4299276288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299313152 ++read 4096/4096 bytes at offset 4299313152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299350016 ++read 4096/4096 bytes at offset 4299350016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299386880 ++read 4096/4096 bytes at offset 4299386880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299423744 ++read 4096/4096 bytes at offset 4299423744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299460608 ++read 4096/4096 bytes at offset 4299460608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299497472 ++read 4096/4096 bytes at offset 4299497472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299534336 ++read 4096/4096 bytes at offset 4299534336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299571200 ++read 4096/4096 bytes at offset 4299571200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299608064 ++read 4096/4096 bytes at offset 4299608064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299644928 ++read 4096/4096 bytes at offset 4299644928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299681792 ++read 4096/4096 bytes at offset 4299681792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299718656 ++read 4096/4096 bytes at offset 4299718656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299755520 ++read 4096/4096 bytes at offset 4299755520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299792384 ++read 4096/4096 bytes at offset 4299792384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299829248 ++read 4096/4096 bytes at offset 4299829248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299866112 ++read 4096/4096 bytes at offset 4299866112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299902976 ++read 4096/4096 bytes at offset 4299902976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299939840 ++read 4096/4096 bytes at offset 4299939840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299976704 ++read 4096/4096 bytes at offset 4299976704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300013568 ++read 4096/4096 bytes at offset 4300013568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300050432 ++read 4096/4096 bytes at offset 4300050432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300087296 ++read 4096/4096 bytes at offset 4300087296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300124160 ++read 4096/4096 bytes at offset 4300124160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300161024 ++read 4096/4096 bytes at offset 4300161024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300197888 ++read 4096/4096 bytes at offset 4300197888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300234752 ++read 4096/4096 bytes at offset 4300234752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300271616 ++read 4096/4096 bytes at offset 4300271616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300308480 ++read 4096/4096 bytes at offset 4300308480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300345344 ++read 4096/4096 bytes at offset 4300345344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300382208 ++read 4096/4096 bytes at offset 4300382208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300419072 ++read 4096/4096 bytes at offset 4300419072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300455936 ++read 4096/4096 bytes at offset 4300455936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300492800 ++read 4096/4096 bytes at offset 4300492800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300529664 ++read 4096/4096 bytes at offset 4300529664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300566528 ++read 4096/4096 bytes at offset 4300566528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300603392 ++read 4096/4096 bytes at offset 4300603392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300640256 ++read 4096/4096 bytes at offset 4300640256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300677120 ++read 4096/4096 bytes at offset 4300677120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300713984 ++read 4096/4096 bytes at offset 4300713984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300750848 ++read 4096/4096 bytes at offset 4300750848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300787712 ++read 4096/4096 bytes at offset 4300787712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300824576 ++read 4096/4096 bytes at offset 4300824576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300861440 ++read 4096/4096 bytes at offset 4300861440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300898304 ++read 4096/4096 bytes at offset 4300898304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300935168 ++read 4096/4096 bytes at offset 4300935168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300972032 ++read 4096/4096 bytes at offset 4300972032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301008896 ++read 4096/4096 bytes at offset 4301008896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301045760 ++read 4096/4096 bytes at offset 4301045760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301082624 ++read 4096/4096 bytes at offset 4301082624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301119488 ++read 4096/4096 bytes at offset 4301119488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301156352 ++read 4096/4096 bytes at offset 4301156352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301193216 ++read 4096/4096 bytes at offset 4301193216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301230080 ++read 4096/4096 bytes at offset 4301230080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301266944 ++read 4096/4096 bytes at offset 4301266944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301303808 ++read 4096/4096 bytes at offset 4301303808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301340672 ++read 4096/4096 bytes at offset 4301340672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301377536 ++read 4096/4096 bytes at offset 4301377536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301414400 ++read 4096/4096 bytes at offset 4301414400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301451264 ++read 4096/4096 bytes at offset 4301451264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301488128 ++read 4096/4096 bytes at offset 4301488128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301524992 ++read 4096/4096 bytes at offset 4301524992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301561856 ++read 4096/4096 bytes at offset 4301561856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301598720 ++read 4096/4096 bytes at offset 4301598720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301635584 ++read 4096/4096 bytes at offset 4301635584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301672448 ++read 4096/4096 bytes at offset 4301672448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301709312 ++read 4096/4096 bytes at offset 4301709312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301746176 ++read 4096/4096 bytes at offset 4301746176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301783040 ++read 4096/4096 bytes at offset 4301783040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301819904 ++read 4096/4096 bytes at offset 4301819904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301856768 ++read 4096/4096 bytes at offset 4301856768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301893632 ++read 4096/4096 bytes at offset 4301893632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301930496 ++read 4096/4096 bytes at offset 4301930496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301967360 ++read 4096/4096 bytes at offset 4301967360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302004224 ++read 4096/4096 bytes at offset 4302004224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302041088 ++read 4096/4096 bytes at offset 4302041088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302077952 ++read 4096/4096 bytes at offset 4302077952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302114816 ++read 4096/4096 bytes at offset 4302114816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302151680 ++read 4096/4096 bytes at offset 4302151680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302188544 ++read 4096/4096 bytes at offset 4302188544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302225408 ++read 4096/4096 bytes at offset 4302225408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302262272 ++read 4096/4096 bytes at offset 4302262272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302299136 ++read 4096/4096 bytes at offset 4302299136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302336000 ++read 4096/4096 bytes at offset 4302336000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302372864 ++read 4096/4096 bytes at offset 4302372864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302409728 ++read 4096/4096 bytes at offset 4302409728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302446592 ++read 4096/4096 bytes at offset 4302446592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302483456 ++read 4096/4096 bytes at offset 4302483456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302520320 ++read 4096/4096 bytes at offset 4302520320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302557184 ++read 4096/4096 bytes at offset 4302557184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302594048 ++read 4096/4096 bytes at offset 4302594048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302630912 ++read 4096/4096 bytes at offset 4302630912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302667776 ++read 4096/4096 bytes at offset 4302667776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302704640 ++read 4096/4096 bytes at offset 4302704640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302741504 ++read 4096/4096 bytes at offset 4302741504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302778368 ++read 4096/4096 bytes at offset 4302778368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302815232 ++read 4096/4096 bytes at offset 4302815232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302852096 ++read 4096/4096 bytes at offset 4302852096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302888960 ++read 4096/4096 bytes at offset 4302888960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302925824 ++read 4096/4096 bytes at offset 4302925824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302962688 ++read 4096/4096 bytes at offset 4302962688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302999552 ++read 4096/4096 bytes at offset 4302999552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303036416 ++read 4096/4096 bytes at offset 4303036416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303073280 ++read 4096/4096 bytes at offset 4303073280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303110144 ++read 4096/4096 bytes at offset 4303110144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303147008 ++read 4096/4096 bytes at offset 4303147008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303183872 ++read 4096/4096 bytes at offset 4303183872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303220736 ++read 4096/4096 bytes at offset 4303220736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303257600 ++read 4096/4096 bytes at offset 4303257600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303294464 ++read 4096/4096 bytes at offset 4303294464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303331328 ++read 4096/4096 bytes at offset 4303331328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303368192 ++read 4096/4096 bytes at offset 4303368192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303405056 ++read 4096/4096 bytes at offset 4303405056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303441920 ++read 4096/4096 bytes at offset 4303441920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303478784 ++read 4096/4096 bytes at offset 4303478784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303515648 ++read 4096/4096 bytes at offset 4303515648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303552512 ++read 4096/4096 bytes at offset 4303552512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303589376 ++read 4096/4096 bytes at offset 4303589376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303626240 ++read 4096/4096 bytes at offset 4303626240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303663104 ++read 4096/4096 bytes at offset 4303663104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303699968 ++read 4096/4096 bytes at offset 4303699968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303736832 ++read 4096/4096 bytes at offset 4303736832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303773696 ++read 4096/4096 bytes at offset 4303773696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303810560 ++read 4096/4096 bytes at offset 4303810560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303847424 ++read 4096/4096 bytes at offset 4303847424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303884288 ++read 4096/4096 bytes at offset 4303884288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303921152 ++read 4096/4096 bytes at offset 4303921152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303958016 ++read 4096/4096 bytes at offset 4303958016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303994880 ++read 4096/4096 bytes at offset 4303994880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304031744 ++read 4096/4096 bytes at offset 4304031744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304068608 ++read 4096/4096 bytes at offset 4304068608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304105472 ++read 4096/4096 bytes at offset 4304105472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304142336 ++read 4096/4096 bytes at offset 4304142336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304179200 ++read 4096/4096 bytes at offset 4304179200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304216064 ++read 4096/4096 bytes at offset 4304216064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304252928 ++read 4096/4096 bytes at offset 4304252928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304289792 ++read 4096/4096 bytes at offset 4304289792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304326656 ++read 4096/4096 bytes at offset 4304326656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304363520 ++read 4096/4096 bytes at offset 4304363520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304400384 ++read 4096/4096 bytes at offset 4304400384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296044544 ++read 4096/4096 bytes at offset 4296044544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296081408 ++read 4096/4096 bytes at offset 4296081408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296118272 ++read 4096/4096 bytes at offset 4296118272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296155136 ++read 4096/4096 bytes at offset 4296155136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296192000 ++read 4096/4096 bytes at offset 4296192000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296228864 ++read 4096/4096 bytes at offset 4296228864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296265728 ++read 4096/4096 bytes at offset 4296265728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296302592 ++read 4096/4096 bytes at offset 4296302592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296339456 ++read 4096/4096 bytes at offset 4296339456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296376320 ++read 4096/4096 bytes at offset 4296376320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296413184 ++read 4096/4096 bytes at offset 4296413184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296450048 ++read 4096/4096 bytes at offset 4296450048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296486912 ++read 4096/4096 bytes at offset 4296486912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296523776 ++read 4096/4096 bytes at offset 4296523776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296560640 ++read 4096/4096 bytes at offset 4296560640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296597504 ++read 4096/4096 bytes at offset 4296597504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296634368 ++read 4096/4096 bytes at offset 4296634368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296671232 ++read 4096/4096 bytes at offset 4296671232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296708096 ++read 4096/4096 bytes at offset 4296708096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296744960 ++read 4096/4096 bytes at offset 4296744960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296781824 ++read 4096/4096 bytes at offset 4296781824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296818688 ++read 4096/4096 bytes at offset 4296818688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296855552 ++read 4096/4096 bytes at offset 4296855552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296892416 ++read 4096/4096 bytes at offset 4296892416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296929280 ++read 4096/4096 bytes at offset 4296929280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296966144 ++read 4096/4096 bytes at offset 4296966144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297003008 ++read 4096/4096 bytes at offset 4297003008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297039872 ++read 4096/4096 bytes at offset 4297039872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297076736 ++read 4096/4096 bytes at offset 4297076736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297113600 ++read 4096/4096 bytes at offset 4297113600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297150464 ++read 4096/4096 bytes at offset 4297150464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297187328 ++read 4096/4096 bytes at offset 4297187328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297224192 ++read 4096/4096 bytes at offset 4297224192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297261056 ++read 4096/4096 bytes at offset 4297261056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297297920 ++read 4096/4096 bytes at offset 4297297920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297334784 ++read 4096/4096 bytes at offset 4297334784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297371648 ++read 4096/4096 bytes at offset 4297371648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297408512 ++read 4096/4096 bytes at offset 4297408512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297445376 ++read 4096/4096 bytes at offset 4297445376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297482240 ++read 4096/4096 bytes at offset 4297482240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297519104 ++read 4096/4096 bytes at offset 4297519104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297555968 ++read 4096/4096 bytes at offset 4297555968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297592832 ++read 4096/4096 bytes at offset 4297592832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297629696 ++read 4096/4096 bytes at offset 4297629696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297666560 ++read 4096/4096 bytes at offset 4297666560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297703424 ++read 4096/4096 bytes at offset 4297703424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297740288 ++read 4096/4096 bytes at offset 4297740288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297777152 ++read 4096/4096 bytes at offset 4297777152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297814016 ++read 4096/4096 bytes at offset 4297814016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297850880 ++read 4096/4096 bytes at offset 4297850880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297887744 ++read 4096/4096 bytes at offset 4297887744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297924608 ++read 4096/4096 bytes at offset 4297924608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297961472 ++read 4096/4096 bytes at offset 4297961472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4297998336 ++read 4096/4096 bytes at offset 4297998336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298035200 ++read 4096/4096 bytes at offset 4298035200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298072064 ++read 4096/4096 bytes at offset 4298072064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298108928 ++read 4096/4096 bytes at offset 4298108928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298145792 ++read 4096/4096 bytes at offset 4298145792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298182656 ++read 4096/4096 bytes at offset 4298182656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298219520 ++read 4096/4096 bytes at offset 4298219520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298256384 ++read 4096/4096 bytes at offset 4298256384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298293248 ++read 4096/4096 bytes at offset 4298293248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298330112 ++read 4096/4096 bytes at offset 4298330112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298366976 ++read 4096/4096 bytes at offset 4298366976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298403840 ++read 4096/4096 bytes at offset 4298403840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298440704 ++read 4096/4096 bytes at offset 4298440704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298477568 ++read 4096/4096 bytes at offset 4298477568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298514432 ++read 4096/4096 bytes at offset 4298514432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298551296 ++read 4096/4096 bytes at offset 4298551296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298588160 ++read 4096/4096 bytes at offset 4298588160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298625024 ++read 4096/4096 bytes at offset 4298625024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298661888 ++read 4096/4096 bytes at offset 4298661888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298698752 ++read 4096/4096 bytes at offset 4298698752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298735616 ++read 4096/4096 bytes at offset 4298735616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298772480 ++read 4096/4096 bytes at offset 4298772480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298809344 ++read 4096/4096 bytes at offset 4298809344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298846208 ++read 4096/4096 bytes at offset 4298846208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298883072 ++read 4096/4096 bytes at offset 4298883072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298919936 ++read 4096/4096 bytes at offset 4298919936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298956800 ++read 4096/4096 bytes at offset 4298956800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4298993664 ++read 4096/4096 bytes at offset 4298993664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299030528 ++read 4096/4096 bytes at offset 4299030528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299067392 ++read 4096/4096 bytes at offset 4299067392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299104256 ++read 4096/4096 bytes at offset 4299104256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299141120 ++read 4096/4096 bytes at offset 4299141120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299177984 ++read 4096/4096 bytes at offset 4299177984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299214848 ++read 4096/4096 bytes at offset 4299214848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299251712 ++read 4096/4096 bytes at offset 4299251712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299288576 ++read 4096/4096 bytes at offset 4299288576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299325440 ++read 4096/4096 bytes at offset 4299325440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299362304 ++read 4096/4096 bytes at offset 4299362304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299399168 ++read 4096/4096 bytes at offset 4299399168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299436032 ++read 4096/4096 bytes at offset 4299436032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299472896 ++read 4096/4096 bytes at offset 4299472896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299509760 ++read 4096/4096 bytes at offset 4299509760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299546624 ++read 4096/4096 bytes at offset 4299546624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299583488 ++read 4096/4096 bytes at offset 4299583488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299620352 ++read 4096/4096 bytes at offset 4299620352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299657216 ++read 4096/4096 bytes at offset 4299657216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299694080 ++read 4096/4096 bytes at offset 4299694080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299730944 ++read 4096/4096 bytes at offset 4299730944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299767808 ++read 4096/4096 bytes at offset 4299767808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299804672 ++read 4096/4096 bytes at offset 4299804672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299841536 ++read 4096/4096 bytes at offset 4299841536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299878400 ++read 4096/4096 bytes at offset 4299878400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299915264 ++read 4096/4096 bytes at offset 4299915264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299952128 ++read 4096/4096 bytes at offset 4299952128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4299988992 ++read 4096/4096 bytes at offset 4299988992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300025856 ++read 4096/4096 bytes at offset 4300025856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300062720 ++read 4096/4096 bytes at offset 4300062720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300099584 ++read 4096/4096 bytes at offset 4300099584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300136448 ++read 4096/4096 bytes at offset 4300136448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300173312 ++read 4096/4096 bytes at offset 4300173312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300210176 ++read 4096/4096 bytes at offset 4300210176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300247040 ++read 4096/4096 bytes at offset 4300247040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300283904 ++read 4096/4096 bytes at offset 4300283904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300320768 ++read 4096/4096 bytes at offset 4300320768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300357632 ++read 4096/4096 bytes at offset 4300357632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300394496 ++read 4096/4096 bytes at offset 4300394496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300431360 ++read 4096/4096 bytes at offset 4300431360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300468224 ++read 4096/4096 bytes at offset 4300468224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300505088 ++read 4096/4096 bytes at offset 4300505088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300541952 ++read 4096/4096 bytes at offset 4300541952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300578816 ++read 4096/4096 bytes at offset 4300578816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300615680 ++read 4096/4096 bytes at offset 4300615680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300652544 ++read 4096/4096 bytes at offset 4300652544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300689408 ++read 4096/4096 bytes at offset 4300689408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300726272 ++read 4096/4096 bytes at offset 4300726272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300763136 ++read 4096/4096 bytes at offset 4300763136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300800000 ++read 4096/4096 bytes at offset 4300800000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300836864 ++read 4096/4096 bytes at offset 4300836864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300873728 ++read 4096/4096 bytes at offset 4300873728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300910592 ++read 4096/4096 bytes at offset 4300910592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300947456 ++read 4096/4096 bytes at offset 4300947456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4300984320 ++read 4096/4096 bytes at offset 4300984320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301021184 ++read 4096/4096 bytes at offset 4301021184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301058048 ++read 4096/4096 bytes at offset 4301058048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301094912 ++read 4096/4096 bytes at offset 4301094912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301131776 ++read 4096/4096 bytes at offset 4301131776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301168640 ++read 4096/4096 bytes at offset 4301168640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301205504 ++read 4096/4096 bytes at offset 4301205504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301242368 ++read 4096/4096 bytes at offset 4301242368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301279232 ++read 4096/4096 bytes at offset 4301279232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301316096 ++read 4096/4096 bytes at offset 4301316096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301352960 ++read 4096/4096 bytes at offset 4301352960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301389824 ++read 4096/4096 bytes at offset 4301389824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301426688 ++read 4096/4096 bytes at offset 4301426688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301463552 ++read 4096/4096 bytes at offset 4301463552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301500416 ++read 4096/4096 bytes at offset 4301500416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301537280 ++read 4096/4096 bytes at offset 4301537280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301574144 ++read 4096/4096 bytes at offset 4301574144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301611008 ++read 4096/4096 bytes at offset 4301611008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301647872 ++read 4096/4096 bytes at offset 4301647872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301684736 ++read 4096/4096 bytes at offset 4301684736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301721600 ++read 4096/4096 bytes at offset 4301721600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301758464 ++read 4096/4096 bytes at offset 4301758464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301795328 ++read 4096/4096 bytes at offset 4301795328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301832192 ++read 4096/4096 bytes at offset 4301832192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301869056 ++read 4096/4096 bytes at offset 4301869056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301905920 ++read 4096/4096 bytes at offset 4301905920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301942784 ++read 4096/4096 bytes at offset 4301942784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4301979648 ++read 4096/4096 bytes at offset 4301979648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302016512 ++read 4096/4096 bytes at offset 4302016512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302053376 ++read 4096/4096 bytes at offset 4302053376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302090240 ++read 4096/4096 bytes at offset 4302090240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302127104 ++read 4096/4096 bytes at offset 4302127104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302163968 ++read 4096/4096 bytes at offset 4302163968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302200832 ++read 4096/4096 bytes at offset 4302200832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302237696 ++read 4096/4096 bytes at offset 4302237696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302274560 ++read 4096/4096 bytes at offset 4302274560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302311424 ++read 4096/4096 bytes at offset 4302311424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302348288 ++read 4096/4096 bytes at offset 4302348288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302385152 ++read 4096/4096 bytes at offset 4302385152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302422016 ++read 4096/4096 bytes at offset 4302422016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302458880 ++read 4096/4096 bytes at offset 4302458880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302495744 ++read 4096/4096 bytes at offset 4302495744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302532608 ++read 4096/4096 bytes at offset 4302532608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302569472 ++read 4096/4096 bytes at offset 4302569472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302606336 ++read 4096/4096 bytes at offset 4302606336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302643200 ++read 4096/4096 bytes at offset 4302643200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302680064 ++read 4096/4096 bytes at offset 4302680064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302716928 ++read 4096/4096 bytes at offset 4302716928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302753792 ++read 4096/4096 bytes at offset 4302753792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302790656 ++read 4096/4096 bytes at offset 4302790656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302827520 ++read 4096/4096 bytes at offset 4302827520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302864384 ++read 4096/4096 bytes at offset 4302864384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302901248 ++read 4096/4096 bytes at offset 4302901248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302938112 ++read 4096/4096 bytes at offset 4302938112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4302974976 ++read 4096/4096 bytes at offset 4302974976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303011840 ++read 4096/4096 bytes at offset 4303011840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303048704 ++read 4096/4096 bytes at offset 4303048704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303085568 ++read 4096/4096 bytes at offset 4303085568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303122432 ++read 4096/4096 bytes at offset 4303122432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303159296 ++read 4096/4096 bytes at offset 4303159296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303196160 ++read 4096/4096 bytes at offset 4303196160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303233024 ++read 4096/4096 bytes at offset 4303233024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303269888 ++read 4096/4096 bytes at offset 4303269888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303306752 ++read 4096/4096 bytes at offset 4303306752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303343616 ++read 4096/4096 bytes at offset 4303343616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303380480 ++read 4096/4096 bytes at offset 4303380480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303417344 ++read 4096/4096 bytes at offset 4303417344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303454208 ++read 4096/4096 bytes at offset 4303454208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303491072 ++read 4096/4096 bytes at offset 4303491072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303527936 ++read 4096/4096 bytes at offset 4303527936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303564800 ++read 4096/4096 bytes at offset 4303564800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303601664 ++read 4096/4096 bytes at offset 4303601664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303638528 ++read 4096/4096 bytes at offset 4303638528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303675392 ++read 4096/4096 bytes at offset 4303675392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303712256 ++read 4096/4096 bytes at offset 4303712256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303749120 ++read 4096/4096 bytes at offset 4303749120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303785984 ++read 4096/4096 bytes at offset 4303785984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303822848 ++read 4096/4096 bytes at offset 4303822848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303859712 ++read 4096/4096 bytes at offset 4303859712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303896576 ++read 4096/4096 bytes at offset 4303896576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303933440 ++read 4096/4096 bytes at offset 4303933440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4303970304 ++read 4096/4096 bytes at offset 4303970304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304007168 ++read 4096/4096 bytes at offset 4304007168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304044032 ++read 4096/4096 bytes at offset 4304044032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304080896 ++read 4096/4096 bytes at offset 4304080896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304117760 ++read 4096/4096 bytes at offset 4304117760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304154624 ++read 4096/4096 bytes at offset 4304154624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304191488 ++read 4096/4096 bytes at offset 4304191488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304228352 ++read 4096/4096 bytes at offset 4304228352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304265216 ++read 4096/4096 bytes at offset 4304265216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304302080 ++read 4096/4096 bytes at offset 4304302080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304338944 ++read 4096/4096 bytes at offset 4304338944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4304375808 ++read 4096/4096 bytes at offset 4304375808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 4294991872 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 4294991872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295028736 ++read 8192/8192 bytes at offset 4295028736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295065600 ++read 8192/8192 bytes at offset 4295065600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295102464 ++read 8192/8192 bytes at offset 4295102464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295139328 ++read 8192/8192 bytes at offset 4295139328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295176192 ++read 8192/8192 bytes at offset 4295176192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295213056 ++read 8192/8192 bytes at offset 4295213056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295249920 ++read 8192/8192 bytes at offset 4295249920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295286784 ++read 8192/8192 bytes at offset 4295286784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295323648 ++read 8192/8192 bytes at offset 4295323648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295360512 ++read 8192/8192 bytes at offset 4295360512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295397376 ++read 8192/8192 bytes at offset 4295397376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295434240 ++read 8192/8192 bytes at offset 4295434240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295471104 ++read 8192/8192 bytes at offset 4295471104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295507968 ++read 8192/8192 bytes at offset 4295507968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295544832 ++read 8192/8192 bytes at offset 4295544832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295581696 ++read 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295618560 ++read 8192/8192 bytes at offset 4295618560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295655424 ++read 8192/8192 bytes at offset 4295655424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295692288 ++read 8192/8192 bytes at offset 4295692288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729152 ++read 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295766016 ++read 8192/8192 bytes at offset 4295766016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295802880 ++read 8192/8192 bytes at offset 4295802880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295839744 ++read 8192/8192 bytes at offset 4295839744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295876608 ++read 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295913472 ++read 8192/8192 bytes at offset 4295913472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295950336 ++read 8192/8192 bytes at offset 4295950336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295987200 ++read 8192/8192 bytes at offset 4295987200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024064 ++read 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296060928 ++read 8192/8192 bytes at offset 4296060928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296097792 ++read 8192/8192 bytes at offset 4296097792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296134656 ++read 8192/8192 bytes at offset 4296134656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296171520 ++read 8192/8192 bytes at offset 4296171520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296208384 ++read 8192/8192 bytes at offset 4296208384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245248 ++read 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296282112 ++read 8192/8192 bytes at offset 4296282112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296318976 ++read 8192/8192 bytes at offset 4296318976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296355840 ++read 8192/8192 bytes at offset 4296355840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296392704 ++read 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296429568 ++read 8192/8192 bytes at offset 4296429568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296466432 ++read 8192/8192 bytes at offset 4296466432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296503296 ++read 8192/8192 bytes at offset 4296503296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540160 ++read 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296577024 ++read 8192/8192 bytes at offset 4296577024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296613888 ++read 8192/8192 bytes at offset 4296613888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296650752 ++read 8192/8192 bytes at offset 4296650752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296687616 ++read 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296724480 ++read 8192/8192 bytes at offset 4296724480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296761344 ++read 8192/8192 bytes at offset 4296761344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296798208 ++read 8192/8192 bytes at offset 4296798208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296835072 ++read 8192/8192 bytes at offset 4296835072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296871936 ++read 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296908800 ++read 8192/8192 bytes at offset 4296908800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296945664 ++read 8192/8192 bytes at offset 4296945664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296982528 ++read 8192/8192 bytes at offset 4296982528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019392 ++read 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297056256 ++read 8192/8192 bytes at offset 4297056256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297093120 ++read 8192/8192 bytes at offset 4297093120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297129984 ++read 8192/8192 bytes at offset 4297129984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297166848 ++read 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297203712 ++read 8192/8192 bytes at offset 4297203712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297240576 ++read 8192/8192 bytes at offset 4297240576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297277440 ++read 8192/8192 bytes at offset 4297277440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314304 ++read 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297351168 ++read 8192/8192 bytes at offset 4297351168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297388032 ++read 8192/8192 bytes at offset 4297388032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297424896 ++read 8192/8192 bytes at offset 4297424896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297461760 ++read 8192/8192 bytes at offset 4297461760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297498624 ++read 8192/8192 bytes at offset 4297498624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297535488 ++read 8192/8192 bytes at offset 4297535488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297572352 ++read 8192/8192 bytes at offset 4297572352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297609216 ++read 8192/8192 bytes at offset 4297609216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297646080 ++read 8192/8192 bytes at offset 4297646080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297682944 ++read 8192/8192 bytes at offset 4297682944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297719808 ++read 8192/8192 bytes at offset 4297719808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297756672 ++read 8192/8192 bytes at offset 4297756672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297793536 ++read 8192/8192 bytes at offset 4297793536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297830400 ++read 8192/8192 bytes at offset 4297830400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297867264 ++read 8192/8192 bytes at offset 4297867264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297904128 ++read 8192/8192 bytes at offset 4297904128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297940992 ++read 8192/8192 bytes at offset 4297940992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297977856 ++read 8192/8192 bytes at offset 4297977856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298014720 ++read 8192/8192 bytes at offset 4298014720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298051584 ++read 8192/8192 bytes at offset 4298051584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298088448 ++read 8192/8192 bytes at offset 4298088448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298125312 ++read 8192/8192 bytes at offset 4298125312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298162176 ++read 8192/8192 bytes at offset 4298162176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298199040 ++read 8192/8192 bytes at offset 4298199040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298235904 ++read 8192/8192 bytes at offset 4298235904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298272768 ++read 8192/8192 bytes at offset 4298272768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298309632 ++read 8192/8192 bytes at offset 4298309632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298346496 ++read 8192/8192 bytes at offset 4298346496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298383360 ++read 8192/8192 bytes at offset 4298383360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298420224 ++read 8192/8192 bytes at offset 4298420224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298457088 ++read 8192/8192 bytes at offset 4298457088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298493952 ++read 8192/8192 bytes at offset 4298493952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298530816 ++read 8192/8192 bytes at offset 4298530816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298567680 ++read 8192/8192 bytes at offset 4298567680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298604544 ++read 8192/8192 bytes at offset 4298604544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298641408 ++read 8192/8192 bytes at offset 4298641408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298678272 ++read 8192/8192 bytes at offset 4298678272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298715136 ++read 8192/8192 bytes at offset 4298715136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298752000 ++read 8192/8192 bytes at offset 4298752000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298788864 ++read 8192/8192 bytes at offset 4298788864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298825728 ++read 8192/8192 bytes at offset 4298825728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298862592 ++read 8192/8192 bytes at offset 4298862592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298899456 ++read 8192/8192 bytes at offset 4298899456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298936320 ++read 8192/8192 bytes at offset 4298936320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4298973184 ++read 8192/8192 bytes at offset 4298973184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299010048 ++read 8192/8192 bytes at offset 4299010048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299046912 ++read 8192/8192 bytes at offset 4299046912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299083776 ++read 8192/8192 bytes at offset 4299083776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299120640 ++read 8192/8192 bytes at offset 4299120640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299157504 ++read 8192/8192 bytes at offset 4299157504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299194368 ++read 8192/8192 bytes at offset 4299194368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299231232 ++read 8192/8192 bytes at offset 4299231232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299268096 ++read 8192/8192 bytes at offset 4299268096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299304960 ++read 8192/8192 bytes at offset 4299304960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299341824 ++read 8192/8192 bytes at offset 4299341824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299378688 ++read 8192/8192 bytes at offset 4299378688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299415552 ++read 8192/8192 bytes at offset 4299415552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299452416 ++read 8192/8192 bytes at offset 4299452416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299489280 ++read 8192/8192 bytes at offset 4299489280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299526144 ++read 8192/8192 bytes at offset 4299526144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299563008 ++read 8192/8192 bytes at offset 4299563008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299599872 ++read 8192/8192 bytes at offset 4299599872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299636736 ++read 8192/8192 bytes at offset 4299636736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299673600 ++read 8192/8192 bytes at offset 4299673600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299710464 ++read 8192/8192 bytes at offset 4299710464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299747328 ++read 8192/8192 bytes at offset 4299747328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299784192 ++read 8192/8192 bytes at offset 4299784192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299821056 ++read 8192/8192 bytes at offset 4299821056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299857920 ++read 8192/8192 bytes at offset 4299857920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299894784 ++read 8192/8192 bytes at offset 4299894784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299931648 ++read 8192/8192 bytes at offset 4299931648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299968512 ++read 8192/8192 bytes at offset 4299968512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300005376 ++read 8192/8192 bytes at offset 4300005376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300042240 ++read 8192/8192 bytes at offset 4300042240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300079104 ++read 8192/8192 bytes at offset 4300079104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300115968 ++read 8192/8192 bytes at offset 4300115968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300152832 ++read 8192/8192 bytes at offset 4300152832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300189696 ++read 8192/8192 bytes at offset 4300189696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300226560 ++read 8192/8192 bytes at offset 4300226560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300263424 ++read 8192/8192 bytes at offset 4300263424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300300288 ++read 8192/8192 bytes at offset 4300300288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300337152 ++read 8192/8192 bytes at offset 4300337152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300374016 ++read 8192/8192 bytes at offset 4300374016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300410880 ++read 8192/8192 bytes at offset 4300410880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300447744 ++read 8192/8192 bytes at offset 4300447744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300484608 ++read 8192/8192 bytes at offset 4300484608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300521472 ++read 8192/8192 bytes at offset 4300521472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300558336 ++read 8192/8192 bytes at offset 4300558336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300595200 ++read 8192/8192 bytes at offset 4300595200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300632064 ++read 8192/8192 bytes at offset 4300632064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300668928 ++read 8192/8192 bytes at offset 4300668928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300705792 ++read 8192/8192 bytes at offset 4300705792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300742656 ++read 8192/8192 bytes at offset 4300742656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300779520 ++read 8192/8192 bytes at offset 4300779520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300816384 ++read 8192/8192 bytes at offset 4300816384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300853248 ++read 8192/8192 bytes at offset 4300853248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300890112 ++read 8192/8192 bytes at offset 4300890112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300926976 ++read 8192/8192 bytes at offset 4300926976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4300963840 ++read 8192/8192 bytes at offset 4300963840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301000704 ++read 8192/8192 bytes at offset 4301000704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301037568 ++read 8192/8192 bytes at offset 4301037568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301074432 ++read 8192/8192 bytes at offset 4301074432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301111296 ++read 8192/8192 bytes at offset 4301111296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301148160 ++read 8192/8192 bytes at offset 4301148160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301185024 ++read 8192/8192 bytes at offset 4301185024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301221888 ++read 8192/8192 bytes at offset 4301221888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301258752 ++read 8192/8192 bytes at offset 4301258752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301295616 ++read 8192/8192 bytes at offset 4301295616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301332480 ++read 8192/8192 bytes at offset 4301332480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301369344 ++read 8192/8192 bytes at offset 4301369344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301406208 ++read 8192/8192 bytes at offset 4301406208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301443072 ++read 8192/8192 bytes at offset 4301443072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301479936 ++read 8192/8192 bytes at offset 4301479936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301516800 ++read 8192/8192 bytes at offset 4301516800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301553664 ++read 8192/8192 bytes at offset 4301553664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301590528 ++read 8192/8192 bytes at offset 4301590528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301627392 ++read 8192/8192 bytes at offset 4301627392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301664256 ++read 8192/8192 bytes at offset 4301664256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301701120 ++read 8192/8192 bytes at offset 4301701120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301737984 ++read 8192/8192 bytes at offset 4301737984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301774848 ++read 8192/8192 bytes at offset 4301774848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301811712 ++read 8192/8192 bytes at offset 4301811712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301848576 ++read 8192/8192 bytes at offset 4301848576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301885440 ++read 8192/8192 bytes at offset 4301885440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301922304 ++read 8192/8192 bytes at offset 4301922304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301959168 ++read 8192/8192 bytes at offset 4301959168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4301996032 ++read 8192/8192 bytes at offset 4301996032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302032896 ++read 8192/8192 bytes at offset 4302032896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302069760 ++read 8192/8192 bytes at offset 4302069760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302106624 ++read 8192/8192 bytes at offset 4302106624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302143488 ++read 8192/8192 bytes at offset 4302143488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302180352 ++read 8192/8192 bytes at offset 4302180352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302217216 ++read 8192/8192 bytes at offset 4302217216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302254080 ++read 8192/8192 bytes at offset 4302254080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302290944 ++read 8192/8192 bytes at offset 4302290944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302327808 ++read 8192/8192 bytes at offset 4302327808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302364672 ++read 8192/8192 bytes at offset 4302364672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302401536 ++read 8192/8192 bytes at offset 4302401536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302438400 ++read 8192/8192 bytes at offset 4302438400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302475264 ++read 8192/8192 bytes at offset 4302475264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302512128 ++read 8192/8192 bytes at offset 4302512128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302548992 ++read 8192/8192 bytes at offset 4302548992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302585856 ++read 8192/8192 bytes at offset 4302585856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302622720 ++read 8192/8192 bytes at offset 4302622720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302659584 ++read 8192/8192 bytes at offset 4302659584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302696448 ++read 8192/8192 bytes at offset 4302696448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302733312 ++read 8192/8192 bytes at offset 4302733312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302770176 ++read 8192/8192 bytes at offset 4302770176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302807040 ++read 8192/8192 bytes at offset 4302807040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302843904 ++read 8192/8192 bytes at offset 4302843904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302880768 ++read 8192/8192 bytes at offset 4302880768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302917632 ++read 8192/8192 bytes at offset 4302917632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302954496 ++read 8192/8192 bytes at offset 4302954496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4302991360 ++read 8192/8192 bytes at offset 4302991360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303028224 ++read 8192/8192 bytes at offset 4303028224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303065088 ++read 8192/8192 bytes at offset 4303065088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303101952 ++read 8192/8192 bytes at offset 4303101952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303138816 ++read 8192/8192 bytes at offset 4303138816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303175680 ++read 8192/8192 bytes at offset 4303175680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303212544 ++read 8192/8192 bytes at offset 4303212544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303249408 ++read 8192/8192 bytes at offset 4303249408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303286272 ++read 8192/8192 bytes at offset 4303286272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303323136 ++read 8192/8192 bytes at offset 4303323136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303360000 ++read 8192/8192 bytes at offset 4303360000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303396864 ++read 8192/8192 bytes at offset 4303396864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303433728 ++read 8192/8192 bytes at offset 4303433728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303470592 ++read 8192/8192 bytes at offset 4303470592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303507456 ++read 8192/8192 bytes at offset 4303507456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303544320 ++read 8192/8192 bytes at offset 4303544320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303581184 ++read 8192/8192 bytes at offset 4303581184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303618048 ++read 8192/8192 bytes at offset 4303618048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303654912 ++read 8192/8192 bytes at offset 4303654912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303691776 ++read 8192/8192 bytes at offset 4303691776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303728640 ++read 8192/8192 bytes at offset 4303728640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303765504 ++read 8192/8192 bytes at offset 4303765504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303802368 ++read 8192/8192 bytes at offset 4303802368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303839232 ++read 8192/8192 bytes at offset 4303839232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303876096 ++read 8192/8192 bytes at offset 4303876096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303912960 ++read 8192/8192 bytes at offset 4303912960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303949824 ++read 8192/8192 bytes at offset 4303949824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4303986688 ++read 8192/8192 bytes at offset 4303986688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304023552 ++read 8192/8192 bytes at offset 4304023552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304060416 ++read 8192/8192 bytes at offset 4304060416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304097280 ++read 8192/8192 bytes at offset 4304097280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304134144 ++read 8192/8192 bytes at offset 4304134144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304171008 ++read 8192/8192 bytes at offset 4304171008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304207872 ++read 8192/8192 bytes at offset 4304207872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304244736 ++read 8192/8192 bytes at offset 4304244736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304281600 ++read 8192/8192 bytes at offset 4304281600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304318464 ++read 8192/8192 bytes at offset 4304318464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304355328 ++read 8192/8192 bytes at offset 4304355328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4304392192 ++read 8192/8192 bytes at offset 4304392192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With snapshot test1, offset 0 + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With snapshot test1, offset 4294967296 + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With snapshot test2, offset 0 + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With snapshot test2, offset 4294967296 + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With snapshot test3, offset 0 + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 147456 ++wrote 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 151552 ++wrote 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 155648 ++wrote 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 159744 ++wrote 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 163840 ++wrote 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 167936 ++wrote 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 172032 ++wrote 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 176128 ++wrote 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 180224 ++wrote 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 184320 ++wrote 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 188416 ++wrote 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 192512 ++wrote 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 196608 ++wrote 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 200704 ++wrote 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 204800 ++wrote 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 208896 ++wrote 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 212992 ++wrote 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 217088 ++wrote 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 221184 ++wrote 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 225280 ++wrote 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 229376 ++wrote 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 233472 ++wrote 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 237568 ++wrote 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 241664 ++wrote 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 245760 ++wrote 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 249856 ++wrote 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 253952 ++wrote 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 258048 ++wrote 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 262144 ++wrote 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 266240 ++wrote 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 270336 ++wrote 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 274432 ++wrote 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 278528 ++wrote 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 282624 ++wrote 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 286720 ++wrote 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 290816 ++wrote 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 294912 ++wrote 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 299008 ++wrote 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 303104 ++wrote 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 307200 ++wrote 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 311296 ++wrote 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 315392 ++wrote 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 319488 ++wrote 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 323584 ++wrote 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 327680 ++wrote 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 331776 ++wrote 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 335872 ++wrote 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 339968 ++wrote 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 344064 ++wrote 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 348160 ++wrote 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 352256 ++wrote 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 356352 ++wrote 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 360448 ++wrote 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 364544 ++wrote 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 368640 ++wrote 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 372736 ++wrote 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 376832 ++wrote 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 380928 ++wrote 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 385024 ++wrote 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 389120 ++wrote 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 393216 ++wrote 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 397312 ++wrote 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 401408 ++wrote 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 405504 ++wrote 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 409600 ++wrote 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 413696 ++wrote 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 417792 ++wrote 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 421888 ++wrote 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 425984 ++wrote 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 430080 ++wrote 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 434176 ++wrote 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 438272 ++wrote 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 442368 ++wrote 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 446464 ++wrote 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 450560 ++wrote 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 454656 ++wrote 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 458752 ++wrote 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 462848 ++wrote 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 466944 ++wrote 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 471040 ++wrote 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 475136 ++wrote 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 479232 ++wrote 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 483328 ++wrote 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 487424 ++wrote 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 491520 ++wrote 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 495616 ++wrote 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 499712 ++wrote 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 503808 ++wrote 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 507904 ++wrote 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 512000 ++wrote 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 516096 ++wrote 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 520192 ++wrote 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 540672 ++wrote 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 544768 ++wrote 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 548864 ++wrote 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 552960 ++wrote 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 557056 ++wrote 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 561152 ++wrote 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 565248 ++wrote 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 569344 ++wrote 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 573440 ++wrote 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 577536 ++wrote 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 581632 ++wrote 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 585728 ++wrote 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 589824 ++wrote 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 593920 ++wrote 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 598016 ++wrote 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 602112 ++wrote 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 606208 ++wrote 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 610304 ++wrote 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 614400 ++wrote 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 618496 ++wrote 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 622592 ++wrote 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 626688 ++wrote 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 630784 ++wrote 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 634880 ++wrote 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 638976 ++wrote 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 643072 ++wrote 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 647168 ++wrote 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 651264 ++wrote 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 655360 ++wrote 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 659456 ++wrote 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 663552 ++wrote 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 667648 ++wrote 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 671744 ++wrote 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 675840 ++wrote 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 679936 ++wrote 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 684032 ++wrote 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 688128 ++wrote 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 692224 ++wrote 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 696320 ++wrote 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 700416 ++wrote 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 704512 ++wrote 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 708608 ++wrote 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 712704 ++wrote 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 716800 ++wrote 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 720896 ++wrote 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 724992 ++wrote 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 729088 ++wrote 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 733184 ++wrote 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 737280 ++wrote 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 741376 ++wrote 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 745472 ++wrote 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 749568 ++wrote 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 753664 ++wrote 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 757760 ++wrote 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 761856 ++wrote 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 765952 ++wrote 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 770048 ++wrote 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 774144 ++wrote 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 778240 ++wrote 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 782336 ++wrote 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 786432 ++wrote 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 790528 ++wrote 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 794624 ++wrote 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 798720 ++wrote 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 802816 ++wrote 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 806912 ++wrote 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 811008 ++wrote 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 815104 ++wrote 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 819200 ++wrote 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 823296 ++wrote 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 827392 ++wrote 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 831488 ++wrote 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 835584 ++wrote 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 839680 ++wrote 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 843776 ++wrote 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 847872 ++wrote 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 851968 ++wrote 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 856064 ++wrote 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 860160 ++wrote 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 864256 ++wrote 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 868352 ++wrote 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 872448 ++wrote 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 876544 ++wrote 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 880640 ++wrote 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 884736 ++wrote 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 888832 ++wrote 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 892928 ++wrote 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 897024 ++wrote 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 901120 ++wrote 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 905216 ++wrote 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 909312 ++wrote 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 913408 ++wrote 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 917504 ++wrote 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 921600 ++wrote 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 925696 ++wrote 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 929792 ++wrote 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 933888 ++wrote 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 937984 ++wrote 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 942080 ++wrote 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 946176 ++wrote 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 950272 ++wrote 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 954368 ++wrote 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 958464 ++wrote 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 962560 ++wrote 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 966656 ++wrote 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 970752 ++wrote 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 974848 ++wrote 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 978944 ++wrote 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 983040 ++wrote 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 987136 ++wrote 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 991232 ++wrote 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 995328 ++wrote 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 999424 ++wrote 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1003520 ++wrote 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1007616 ++wrote 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1011712 ++wrote 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1015808 ++wrote 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1019904 ++wrote 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1024000 ++wrote 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1028096 ++wrote 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1032192 ++wrote 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1036288 ++wrote 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1040384 ++wrote 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 1044480 ++wrote 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1054720 ++wrote 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1058816 ++wrote 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1062912 ++wrote 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1067008 ++wrote 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1071104 ++wrote 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1075200 ++wrote 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1079296 ++wrote 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1083392 ++wrote 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1087488 ++wrote 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1091584 ++wrote 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1095680 ++wrote 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1099776 ++wrote 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1103872 ++wrote 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1107968 ++wrote 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1112064 ++wrote 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1116160 ++wrote 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1120256 ++wrote 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1124352 ++wrote 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1128448 ++wrote 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1132544 ++wrote 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1136640 ++wrote 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1140736 ++wrote 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1144832 ++wrote 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1148928 ++wrote 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1153024 ++wrote 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1157120 ++wrote 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1161216 ++wrote 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1165312 ++wrote 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1169408 ++wrote 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1173504 ++wrote 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1177600 ++wrote 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1181696 ++wrote 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1185792 ++wrote 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1189888 ++wrote 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1193984 ++wrote 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1198080 ++wrote 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1202176 ++wrote 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1206272 ++wrote 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1210368 ++wrote 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1214464 ++wrote 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1218560 ++wrote 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1222656 ++wrote 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1226752 ++wrote 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1230848 ++wrote 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1234944 ++wrote 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1239040 ++wrote 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1243136 ++wrote 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1247232 ++wrote 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1251328 ++wrote 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1255424 ++wrote 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1259520 ++wrote 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1263616 ++wrote 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1267712 ++wrote 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1271808 ++wrote 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1275904 ++wrote 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1280000 ++wrote 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1284096 ++wrote 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1288192 ++wrote 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1292288 ++wrote 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1296384 ++wrote 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1300480 ++wrote 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1304576 ++wrote 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1308672 ++wrote 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1312768 ++wrote 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1316864 ++wrote 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1320960 ++wrote 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1325056 ++wrote 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1329152 ++wrote 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1333248 ++wrote 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1337344 ++wrote 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1341440 ++wrote 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1345536 ++wrote 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1349632 ++wrote 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1353728 ++wrote 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1357824 ++wrote 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1361920 ++wrote 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1366016 ++wrote 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1370112 ++wrote 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1374208 ++wrote 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1378304 ++wrote 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1382400 ++wrote 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1386496 ++wrote 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1390592 ++wrote 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1394688 ++wrote 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1398784 ++wrote 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1402880 ++wrote 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1406976 ++wrote 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1411072 ++wrote 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1415168 ++wrote 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1419264 ++wrote 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1423360 ++wrote 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1427456 ++wrote 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1431552 ++wrote 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1435648 ++wrote 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1439744 ++wrote 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1443840 ++wrote 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1447936 ++wrote 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1452032 ++wrote 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1456128 ++wrote 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1460224 ++wrote 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1464320 ++wrote 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1468416 ++wrote 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1472512 ++wrote 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1476608 ++wrote 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1480704 ++wrote 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1484800 ++wrote 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1488896 ++wrote 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1492992 ++wrote 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1497088 ++wrote 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1501184 ++wrote 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1505280 ++wrote 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1509376 ++wrote 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1513472 ++wrote 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1517568 ++wrote 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1521664 ++wrote 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1525760 ++wrote 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1529856 ++wrote 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1533952 ++wrote 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1538048 ++wrote 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1542144 ++wrote 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1546240 ++wrote 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1550336 ++wrote 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1554432 ++wrote 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1558528 ++wrote 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1562624 ++wrote 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1566720 ++wrote 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1570816 ++wrote 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1574912 ++wrote 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1579008 ++wrote 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1583104 ++wrote 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1587200 ++wrote 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1591296 ++wrote 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1595392 ++wrote 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1599488 ++wrote 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1603584 ++wrote 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1607680 ++wrote 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1611776 ++wrote 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1615872 ++wrote 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1619968 ++wrote 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1624064 ++wrote 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1628160 ++wrote 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1632256 ++wrote 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1636352 ++wrote 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1640448 ++wrote 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1644544 ++wrote 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1648640 ++wrote 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1652736 ++wrote 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1656832 ++wrote 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1660928 ++wrote 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1665024 ++wrote 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1669120 ++wrote 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1673216 ++wrote 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1677312 ++wrote 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1681408 ++wrote 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1685504 ++wrote 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1689600 ++wrote 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1693696 ++wrote 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1697792 ++wrote 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1701888 ++wrote 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1705984 ++wrote 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1710080 ++wrote 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1714176 ++wrote 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1718272 ++wrote 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1722368 ++wrote 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1726464 ++wrote 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1730560 ++wrote 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1734656 ++wrote 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1738752 ++wrote 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1742848 ++wrote 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1746944 ++wrote 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1751040 ++wrote 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1755136 ++wrote 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1759232 ++wrote 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1763328 ++wrote 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1767424 ++wrote 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1771520 ++wrote 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1775616 ++wrote 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1779712 ++wrote 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1783808 ++wrote 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1787904 ++wrote 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1792000 ++wrote 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1796096 ++wrote 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1800192 ++wrote 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1804288 ++wrote 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1808384 ++wrote 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1812480 ++wrote 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1816576 ++wrote 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1820672 ++wrote 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1824768 ++wrote 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1828864 ++wrote 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1832960 ++wrote 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1837056 ++wrote 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1841152 ++wrote 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1845248 ++wrote 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1849344 ++wrote 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1853440 ++wrote 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1857536 ++wrote 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1861632 ++wrote 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1865728 ++wrote 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1869824 ++wrote 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1873920 ++wrote 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1878016 ++wrote 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1882112 ++wrote 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1886208 ++wrote 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1890304 ++wrote 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1894400 ++wrote 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1898496 ++wrote 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1902592 ++wrote 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1906688 ++wrote 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1910784 ++wrote 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1914880 ++wrote 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1918976 ++wrote 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1923072 ++wrote 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1927168 ++wrote 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1931264 ++wrote 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1935360 ++wrote 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1939456 ++wrote 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1943552 ++wrote 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1947648 ++wrote 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1951744 ++wrote 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1955840 ++wrote 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1959936 ++wrote 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1964032 ++wrote 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1968128 ++wrote 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1972224 ++wrote 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1976320 ++wrote 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1980416 ++wrote 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1984512 ++wrote 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1988608 ++wrote 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1992704 ++wrote 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 1996800 ++wrote 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2000896 ++wrote 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2004992 ++wrote 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2009088 ++wrote 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2013184 ++wrote 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2017280 ++wrote 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2021376 ++wrote 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2025472 ++wrote 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2029568 ++wrote 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2033664 ++wrote 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2037760 ++wrote 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2041856 ++wrote 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2045952 ++wrote 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2050048 ++wrote 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2054144 ++wrote 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2058240 ++wrote 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2062336 ++wrote 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2066432 ++wrote 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2070528 ++wrote 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2074624 ++wrote 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2078720 ++wrote 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2082816 ++wrote 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2086912 ++wrote 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2091008 ++wrote 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2095104 ++wrote 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2101248 ++wrote 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2105344 ++wrote 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2109440 ++wrote 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2113536 ++wrote 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2117632 ++wrote 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2121728 ++wrote 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2125824 ++wrote 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2129920 ++wrote 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2134016 ++wrote 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2138112 ++wrote 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2142208 ++wrote 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2146304 ++wrote 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2150400 ++wrote 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2154496 ++wrote 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2158592 ++wrote 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2162688 ++wrote 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2166784 ++wrote 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2170880 ++wrote 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2174976 ++wrote 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2179072 ++wrote 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2183168 ++wrote 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2187264 ++wrote 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2191360 ++wrote 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2195456 ++wrote 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2199552 ++wrote 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2203648 ++wrote 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2207744 ++wrote 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2211840 ++wrote 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2215936 ++wrote 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2220032 ++wrote 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2224128 ++wrote 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2228224 ++wrote 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2232320 ++wrote 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2236416 ++wrote 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2240512 ++wrote 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2244608 ++wrote 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2248704 ++wrote 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2252800 ++wrote 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2256896 ++wrote 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2260992 ++wrote 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2265088 ++wrote 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2269184 ++wrote 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2273280 ++wrote 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2277376 ++wrote 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2281472 ++wrote 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2285568 ++wrote 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2289664 ++wrote 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2293760 ++wrote 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2297856 ++wrote 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2301952 ++wrote 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2306048 ++wrote 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2310144 ++wrote 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2314240 ++wrote 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2318336 ++wrote 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2322432 ++wrote 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2326528 ++wrote 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2330624 ++wrote 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2334720 ++wrote 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2338816 ++wrote 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2342912 ++wrote 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2347008 ++wrote 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2351104 ++wrote 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2355200 ++wrote 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2359296 ++wrote 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2363392 ++wrote 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2367488 ++wrote 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2371584 ++wrote 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2375680 ++wrote 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2379776 ++wrote 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2383872 ++wrote 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2387968 ++wrote 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2392064 ++wrote 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2396160 ++wrote 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2400256 ++wrote 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2404352 ++wrote 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2408448 ++wrote 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2412544 ++wrote 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2416640 ++wrote 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2420736 ++wrote 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2424832 ++wrote 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2428928 ++wrote 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2433024 ++wrote 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2437120 ++wrote 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2441216 ++wrote 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2445312 ++wrote 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2449408 ++wrote 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2453504 ++wrote 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2457600 ++wrote 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2461696 ++wrote 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2465792 ++wrote 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2469888 ++wrote 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2473984 ++wrote 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2478080 ++wrote 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2482176 ++wrote 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2486272 ++wrote 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2490368 ++wrote 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2494464 ++wrote 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2498560 ++wrote 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2502656 ++wrote 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2506752 ++wrote 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2510848 ++wrote 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2514944 ++wrote 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2519040 ++wrote 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2523136 ++wrote 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2527232 ++wrote 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2531328 ++wrote 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2535424 ++wrote 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2539520 ++wrote 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2543616 ++wrote 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2547712 ++wrote 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2551808 ++wrote 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2555904 ++wrote 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2560000 ++wrote 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2564096 ++wrote 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2568192 ++wrote 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2572288 ++wrote 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2576384 ++wrote 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2580480 ++wrote 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2584576 ++wrote 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2588672 ++wrote 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2592768 ++wrote 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2596864 ++wrote 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2600960 ++wrote 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2605056 ++wrote 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2609152 ++wrote 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2613248 ++wrote 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2617344 ++wrote 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2621440 ++wrote 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2625536 ++wrote 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2629632 ++wrote 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2633728 ++wrote 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2637824 ++wrote 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2641920 ++wrote 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2646016 ++wrote 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2650112 ++wrote 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2654208 ++wrote 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2658304 ++wrote 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2662400 ++wrote 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2666496 ++wrote 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2670592 ++wrote 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2674688 ++wrote 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2678784 ++wrote 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2682880 ++wrote 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2686976 ++wrote 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2691072 ++wrote 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2695168 ++wrote 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2699264 ++wrote 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2703360 ++wrote 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2707456 ++wrote 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2711552 ++wrote 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2715648 ++wrote 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2719744 ++wrote 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2723840 ++wrote 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2727936 ++wrote 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2732032 ++wrote 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2736128 ++wrote 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2740224 ++wrote 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2744320 ++wrote 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2748416 ++wrote 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2752512 ++wrote 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2756608 ++wrote 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2760704 ++wrote 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2764800 ++wrote 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2768896 ++wrote 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2772992 ++wrote 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2777088 ++wrote 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2781184 ++wrote 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2785280 ++wrote 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2789376 ++wrote 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2793472 ++wrote 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2797568 ++wrote 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2801664 ++wrote 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2805760 ++wrote 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2809856 ++wrote 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2813952 ++wrote 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2818048 ++wrote 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2822144 ++wrote 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2826240 ++wrote 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2830336 ++wrote 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2834432 ++wrote 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2838528 ++wrote 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2842624 ++wrote 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2846720 ++wrote 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2850816 ++wrote 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2854912 ++wrote 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2859008 ++wrote 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2863104 ++wrote 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2867200 ++wrote 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2871296 ++wrote 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2875392 ++wrote 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2879488 ++wrote 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2883584 ++wrote 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2887680 ++wrote 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2891776 ++wrote 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2895872 ++wrote 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2899968 ++wrote 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2904064 ++wrote 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2908160 ++wrote 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2912256 ++wrote 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2916352 ++wrote 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2920448 ++wrote 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2924544 ++wrote 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2928640 ++wrote 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2932736 ++wrote 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2936832 ++wrote 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2940928 ++wrote 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2945024 ++wrote 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2949120 ++wrote 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2953216 ++wrote 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2957312 ++wrote 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2961408 ++wrote 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2965504 ++wrote 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2969600 ++wrote 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2973696 ++wrote 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2977792 ++wrote 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2981888 ++wrote 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2985984 ++wrote 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2990080 ++wrote 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2994176 ++wrote 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 2998272 ++wrote 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3002368 ++wrote 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3006464 ++wrote 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3010560 ++wrote 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3014656 ++wrote 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3018752 ++wrote 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3022848 ++wrote 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3026944 ++wrote 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3031040 ++wrote 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3035136 ++wrote 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3039232 ++wrote 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3043328 ++wrote 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3047424 ++wrote 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3051520 ++wrote 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3055616 ++wrote 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3059712 ++wrote 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3063808 ++wrote 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3067904 ++wrote 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3072000 ++wrote 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3076096 ++wrote 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3080192 ++wrote 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3084288 ++wrote 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3088384 ++wrote 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3092480 ++wrote 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3096576 ++wrote 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3100672 ++wrote 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3104768 ++wrote 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3108864 ++wrote 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3112960 ++wrote 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3117056 ++wrote 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3121152 ++wrote 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3125248 ++wrote 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3129344 ++wrote 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3133440 ++wrote 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3137536 ++wrote 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3141632 ++wrote 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3150848 ++wrote 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3154944 ++wrote 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3159040 ++wrote 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3163136 ++wrote 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3167232 ++wrote 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3171328 ++wrote 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3175424 ++wrote 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3179520 ++wrote 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3183616 ++wrote 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3187712 ++wrote 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3191808 ++wrote 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3195904 ++wrote 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3200000 ++wrote 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3204096 ++wrote 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3208192 ++wrote 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3212288 ++wrote 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3216384 ++wrote 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3220480 ++wrote 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3224576 ++wrote 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3228672 ++wrote 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3232768 ++wrote 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3236864 ++wrote 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3240960 ++wrote 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3245056 ++wrote 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3249152 ++wrote 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3253248 ++wrote 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3257344 ++wrote 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3261440 ++wrote 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3265536 ++wrote 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3269632 ++wrote 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3273728 ++wrote 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3277824 ++wrote 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3281920 ++wrote 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3286016 ++wrote 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3290112 ++wrote 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3294208 ++wrote 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3298304 ++wrote 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3302400 ++wrote 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3306496 ++wrote 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3310592 ++wrote 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3314688 ++wrote 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3318784 ++wrote 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3322880 ++wrote 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3326976 ++wrote 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3331072 ++wrote 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3335168 ++wrote 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3339264 ++wrote 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3343360 ++wrote 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3347456 ++wrote 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3351552 ++wrote 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3355648 ++wrote 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3359744 ++wrote 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3363840 ++wrote 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3367936 ++wrote 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3372032 ++wrote 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3376128 ++wrote 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3380224 ++wrote 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3384320 ++wrote 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3388416 ++wrote 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3392512 ++wrote 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3396608 ++wrote 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3400704 ++wrote 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3404800 ++wrote 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3408896 ++wrote 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3412992 ++wrote 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3417088 ++wrote 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3421184 ++wrote 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3425280 ++wrote 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3429376 ++wrote 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3433472 ++wrote 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3437568 ++wrote 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3441664 ++wrote 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3445760 ++wrote 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3449856 ++wrote 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3453952 ++wrote 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3458048 ++wrote 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3462144 ++wrote 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3466240 ++wrote 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3470336 ++wrote 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3474432 ++wrote 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3478528 ++wrote 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3482624 ++wrote 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3486720 ++wrote 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3490816 ++wrote 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3494912 ++wrote 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3499008 ++wrote 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3503104 ++wrote 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3507200 ++wrote 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3511296 ++wrote 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3515392 ++wrote 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3519488 ++wrote 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3523584 ++wrote 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3527680 ++wrote 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3531776 ++wrote 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3535872 ++wrote 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3539968 ++wrote 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3544064 ++wrote 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3548160 ++wrote 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3552256 ++wrote 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3556352 ++wrote 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3560448 ++wrote 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3564544 ++wrote 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3568640 ++wrote 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3572736 ++wrote 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3576832 ++wrote 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3580928 ++wrote 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3585024 ++wrote 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3589120 ++wrote 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3593216 ++wrote 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3597312 ++wrote 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3601408 ++wrote 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3605504 ++wrote 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3609600 ++wrote 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3613696 ++wrote 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3617792 ++wrote 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3621888 ++wrote 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3625984 ++wrote 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3630080 ++wrote 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3634176 ++wrote 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3638272 ++wrote 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3642368 ++wrote 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3646464 ++wrote 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3650560 ++wrote 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3654656 ++wrote 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3658752 ++wrote 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3662848 ++wrote 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3666944 ++wrote 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3671040 ++wrote 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3675136 ++wrote 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3679232 ++wrote 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3683328 ++wrote 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3687424 ++wrote 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3691520 ++wrote 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3695616 ++wrote 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3699712 ++wrote 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3703808 ++wrote 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3707904 ++wrote 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3712000 ++wrote 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3716096 ++wrote 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3720192 ++wrote 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3724288 ++wrote 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3728384 ++wrote 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3732480 ++wrote 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3736576 ++wrote 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3740672 ++wrote 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3744768 ++wrote 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3748864 ++wrote 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3752960 ++wrote 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3757056 ++wrote 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3761152 ++wrote 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3765248 ++wrote 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3769344 ++wrote 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3773440 ++wrote 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3777536 ++wrote 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3781632 ++wrote 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3785728 ++wrote 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3789824 ++wrote 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3793920 ++wrote 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3798016 ++wrote 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3802112 ++wrote 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3806208 ++wrote 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3810304 ++wrote 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3814400 ++wrote 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3818496 ++wrote 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3822592 ++wrote 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3826688 ++wrote 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3830784 ++wrote 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3834880 ++wrote 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3838976 ++wrote 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3843072 ++wrote 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3847168 ++wrote 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3851264 ++wrote 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3855360 ++wrote 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3859456 ++wrote 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3863552 ++wrote 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3867648 ++wrote 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3871744 ++wrote 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3875840 ++wrote 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3879936 ++wrote 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3884032 ++wrote 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3888128 ++wrote 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3892224 ++wrote 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3896320 ++wrote 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3900416 ++wrote 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3904512 ++wrote 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3908608 ++wrote 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3912704 ++wrote 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3916800 ++wrote 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3920896 ++wrote 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3924992 ++wrote 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3929088 ++wrote 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3933184 ++wrote 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3937280 ++wrote 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3941376 ++wrote 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3945472 ++wrote 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3949568 ++wrote 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3953664 ++wrote 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3957760 ++wrote 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3961856 ++wrote 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3965952 ++wrote 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3970048 ++wrote 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3974144 ++wrote 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3978240 ++wrote 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3982336 ++wrote 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3986432 ++wrote 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3990528 ++wrote 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3994624 ++wrote 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 3998720 ++wrote 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4002816 ++wrote 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4006912 ++wrote 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4011008 ++wrote 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4015104 ++wrote 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4019200 ++wrote 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4023296 ++wrote 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4027392 ++wrote 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4031488 ++wrote 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4035584 ++wrote 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4039680 ++wrote 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4043776 ++wrote 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4047872 ++wrote 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4051968 ++wrote 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4056064 ++wrote 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4060160 ++wrote 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4064256 ++wrote 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4068352 ++wrote 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4072448 ++wrote 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4076544 ++wrote 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4080640 ++wrote 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4084736 ++wrote 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4088832 ++wrote 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4092928 ++wrote 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4097024 ++wrote 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4101120 ++wrote 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4105216 ++wrote 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4109312 ++wrote 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4113408 ++wrote 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4117504 ++wrote 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4121600 ++wrote 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4125696 ++wrote 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4129792 ++wrote 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4133888 ++wrote 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4137984 ++wrote 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4142080 ++wrote 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4146176 ++wrote 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4150272 ++wrote 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4154368 ++wrote 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4158464 ++wrote 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4162560 ++wrote 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4166656 ++wrote 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4170752 ++wrote 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4174848 ++wrote 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4178944 ++wrote 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4183040 ++wrote 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4187136 ++wrote 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4191232 ++wrote 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4208640 ++wrote 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4220928 ++wrote 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4233216 ++wrote 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4245504 ++wrote 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4257792 ++wrote 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4270080 ++wrote 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4282368 ++wrote 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4294656 ++wrote 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4306944 ++wrote 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4319232 ++wrote 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4331520 ++wrote 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4343808 ++wrote 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4356096 ++wrote 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4368384 ++wrote 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4380672 ++wrote 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4392960 ++wrote 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4405248 ++wrote 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4417536 ++wrote 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4429824 ++wrote 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4442112 ++wrote 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4454400 ++wrote 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4466688 ++wrote 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4478976 ++wrote 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4491264 ++wrote 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4503552 ++wrote 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4515840 ++wrote 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4528128 ++wrote 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4540416 ++wrote 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4552704 ++wrote 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4564992 ++wrote 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4577280 ++wrote 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4589568 ++wrote 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4601856 ++wrote 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4614144 ++wrote 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4626432 ++wrote 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4638720 ++wrote 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4651008 ++wrote 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4663296 ++wrote 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4675584 ++wrote 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4687872 ++wrote 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4700160 ++wrote 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4712448 ++wrote 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4724736 ++wrote 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4737024 ++wrote 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4749312 ++wrote 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4761600 ++wrote 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4773888 ++wrote 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4786176 ++wrote 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4798464 ++wrote 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4810752 ++wrote 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4823040 ++wrote 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4835328 ++wrote 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4847616 ++wrote 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4859904 ++wrote 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4872192 ++wrote 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4884480 ++wrote 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4896768 ++wrote 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4909056 ++wrote 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4921344 ++wrote 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4933632 ++wrote 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4945920 ++wrote 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4958208 ++wrote 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4970496 ++wrote 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 8384512 ++wrote 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 10483712 ++wrote 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 12582912 ++wrote 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 14682112 ++wrote 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 16781312 ++wrote 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18880512 ++wrote 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20979712 ++wrote 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 147456 ++read 4096/4096 bytes at offset 147456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 151552 ++read 4096/4096 bytes at offset 151552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 155648 ++read 4096/4096 bytes at offset 155648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 159744 ++read 4096/4096 bytes at offset 159744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 163840 ++read 4096/4096 bytes at offset 163840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 167936 ++read 4096/4096 bytes at offset 167936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 172032 ++read 4096/4096 bytes at offset 172032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 176128 ++read 4096/4096 bytes at offset 176128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 180224 ++read 4096/4096 bytes at offset 180224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 184320 ++read 4096/4096 bytes at offset 184320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 188416 ++read 4096/4096 bytes at offset 188416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 192512 ++read 4096/4096 bytes at offset 192512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 196608 ++read 4096/4096 bytes at offset 196608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 200704 ++read 4096/4096 bytes at offset 200704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 204800 ++read 4096/4096 bytes at offset 204800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 208896 ++read 4096/4096 bytes at offset 208896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 212992 ++read 4096/4096 bytes at offset 212992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 217088 ++read 4096/4096 bytes at offset 217088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 221184 ++read 4096/4096 bytes at offset 221184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 225280 ++read 4096/4096 bytes at offset 225280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 229376 ++read 4096/4096 bytes at offset 229376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 233472 ++read 4096/4096 bytes at offset 233472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 237568 ++read 4096/4096 bytes at offset 237568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 241664 ++read 4096/4096 bytes at offset 241664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 245760 ++read 4096/4096 bytes at offset 245760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 249856 ++read 4096/4096 bytes at offset 249856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 253952 ++read 4096/4096 bytes at offset 253952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 258048 ++read 4096/4096 bytes at offset 258048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 262144 ++read 4096/4096 bytes at offset 262144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 266240 ++read 4096/4096 bytes at offset 266240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 270336 ++read 4096/4096 bytes at offset 270336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 274432 ++read 4096/4096 bytes at offset 274432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 278528 ++read 4096/4096 bytes at offset 278528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 282624 ++read 4096/4096 bytes at offset 282624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 286720 ++read 4096/4096 bytes at offset 286720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 290816 ++read 4096/4096 bytes at offset 290816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 294912 ++read 4096/4096 bytes at offset 294912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 299008 ++read 4096/4096 bytes at offset 299008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 303104 ++read 4096/4096 bytes at offset 303104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 307200 ++read 4096/4096 bytes at offset 307200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 311296 ++read 4096/4096 bytes at offset 311296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 315392 ++read 4096/4096 bytes at offset 315392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 319488 ++read 4096/4096 bytes at offset 319488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 323584 ++read 4096/4096 bytes at offset 323584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 327680 ++read 4096/4096 bytes at offset 327680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 331776 ++read 4096/4096 bytes at offset 331776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 335872 ++read 4096/4096 bytes at offset 335872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 339968 ++read 4096/4096 bytes at offset 339968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 344064 ++read 4096/4096 bytes at offset 344064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 348160 ++read 4096/4096 bytes at offset 348160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 352256 ++read 4096/4096 bytes at offset 352256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 356352 ++read 4096/4096 bytes at offset 356352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 360448 ++read 4096/4096 bytes at offset 360448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 364544 ++read 4096/4096 bytes at offset 364544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 368640 ++read 4096/4096 bytes at offset 368640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 372736 ++read 4096/4096 bytes at offset 372736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 376832 ++read 4096/4096 bytes at offset 376832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 380928 ++read 4096/4096 bytes at offset 380928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 385024 ++read 4096/4096 bytes at offset 385024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 389120 ++read 4096/4096 bytes at offset 389120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 393216 ++read 4096/4096 bytes at offset 393216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 397312 ++read 4096/4096 bytes at offset 397312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 401408 ++read 4096/4096 bytes at offset 401408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 405504 ++read 4096/4096 bytes at offset 405504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 409600 ++read 4096/4096 bytes at offset 409600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 413696 ++read 4096/4096 bytes at offset 413696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 417792 ++read 4096/4096 bytes at offset 417792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 421888 ++read 4096/4096 bytes at offset 421888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 425984 ++read 4096/4096 bytes at offset 425984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 430080 ++read 4096/4096 bytes at offset 430080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 434176 ++read 4096/4096 bytes at offset 434176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 438272 ++read 4096/4096 bytes at offset 438272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 442368 ++read 4096/4096 bytes at offset 442368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 446464 ++read 4096/4096 bytes at offset 446464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 450560 ++read 4096/4096 bytes at offset 450560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 454656 ++read 4096/4096 bytes at offset 454656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 458752 ++read 4096/4096 bytes at offset 458752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 462848 ++read 4096/4096 bytes at offset 462848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 466944 ++read 4096/4096 bytes at offset 466944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 471040 ++read 4096/4096 bytes at offset 471040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 475136 ++read 4096/4096 bytes at offset 475136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 479232 ++read 4096/4096 bytes at offset 479232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 483328 ++read 4096/4096 bytes at offset 483328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 487424 ++read 4096/4096 bytes at offset 487424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 491520 ++read 4096/4096 bytes at offset 491520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 495616 ++read 4096/4096 bytes at offset 495616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 499712 ++read 4096/4096 bytes at offset 499712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 503808 ++read 4096/4096 bytes at offset 503808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 507904 ++read 4096/4096 bytes at offset 507904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 512000 ++read 4096/4096 bytes at offset 512000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 516096 ++read 4096/4096 bytes at offset 516096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 520192 ++read 4096/4096 bytes at offset 520192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 524288 ++read 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 528384 ++read 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 532480 ++read 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 536576 ++read 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 540672 ++read 4096/4096 bytes at offset 540672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 544768 ++read 4096/4096 bytes at offset 544768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 548864 ++read 4096/4096 bytes at offset 548864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 552960 ++read 4096/4096 bytes at offset 552960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 557056 ++read 4096/4096 bytes at offset 557056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 561152 ++read 4096/4096 bytes at offset 561152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 565248 ++read 4096/4096 bytes at offset 565248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 569344 ++read 4096/4096 bytes at offset 569344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 573440 ++read 4096/4096 bytes at offset 573440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 577536 ++read 4096/4096 bytes at offset 577536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 581632 ++read 4096/4096 bytes at offset 581632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 585728 ++read 4096/4096 bytes at offset 585728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 589824 ++read 4096/4096 bytes at offset 589824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 593920 ++read 4096/4096 bytes at offset 593920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 598016 ++read 4096/4096 bytes at offset 598016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 602112 ++read 4096/4096 bytes at offset 602112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 606208 ++read 4096/4096 bytes at offset 606208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 610304 ++read 4096/4096 bytes at offset 610304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 614400 ++read 4096/4096 bytes at offset 614400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 618496 ++read 4096/4096 bytes at offset 618496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 622592 ++read 4096/4096 bytes at offset 622592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 626688 ++read 4096/4096 bytes at offset 626688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 630784 ++read 4096/4096 bytes at offset 630784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 634880 ++read 4096/4096 bytes at offset 634880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 638976 ++read 4096/4096 bytes at offset 638976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 643072 ++read 4096/4096 bytes at offset 643072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 647168 ++read 4096/4096 bytes at offset 647168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 651264 ++read 4096/4096 bytes at offset 651264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 655360 ++read 4096/4096 bytes at offset 655360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 659456 ++read 4096/4096 bytes at offset 659456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 663552 ++read 4096/4096 bytes at offset 663552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 667648 ++read 4096/4096 bytes at offset 667648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 671744 ++read 4096/4096 bytes at offset 671744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 675840 ++read 4096/4096 bytes at offset 675840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 679936 ++read 4096/4096 bytes at offset 679936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 684032 ++read 4096/4096 bytes at offset 684032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 688128 ++read 4096/4096 bytes at offset 688128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 692224 ++read 4096/4096 bytes at offset 692224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 696320 ++read 4096/4096 bytes at offset 696320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 700416 ++read 4096/4096 bytes at offset 700416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 704512 ++read 4096/4096 bytes at offset 704512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 708608 ++read 4096/4096 bytes at offset 708608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 712704 ++read 4096/4096 bytes at offset 712704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 716800 ++read 4096/4096 bytes at offset 716800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 720896 ++read 4096/4096 bytes at offset 720896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 724992 ++read 4096/4096 bytes at offset 724992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 729088 ++read 4096/4096 bytes at offset 729088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 733184 ++read 4096/4096 bytes at offset 733184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 737280 ++read 4096/4096 bytes at offset 737280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 741376 ++read 4096/4096 bytes at offset 741376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 745472 ++read 4096/4096 bytes at offset 745472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 749568 ++read 4096/4096 bytes at offset 749568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 753664 ++read 4096/4096 bytes at offset 753664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 757760 ++read 4096/4096 bytes at offset 757760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 761856 ++read 4096/4096 bytes at offset 761856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 765952 ++read 4096/4096 bytes at offset 765952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 770048 ++read 4096/4096 bytes at offset 770048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 774144 ++read 4096/4096 bytes at offset 774144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 778240 ++read 4096/4096 bytes at offset 778240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 782336 ++read 4096/4096 bytes at offset 782336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 786432 ++read 4096/4096 bytes at offset 786432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 790528 ++read 4096/4096 bytes at offset 790528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 794624 ++read 4096/4096 bytes at offset 794624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 798720 ++read 4096/4096 bytes at offset 798720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 802816 ++read 4096/4096 bytes at offset 802816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 806912 ++read 4096/4096 bytes at offset 806912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 811008 ++read 4096/4096 bytes at offset 811008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 815104 ++read 4096/4096 bytes at offset 815104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 819200 ++read 4096/4096 bytes at offset 819200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 823296 ++read 4096/4096 bytes at offset 823296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 827392 ++read 4096/4096 bytes at offset 827392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 831488 ++read 4096/4096 bytes at offset 831488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 835584 ++read 4096/4096 bytes at offset 835584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 839680 ++read 4096/4096 bytes at offset 839680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 843776 ++read 4096/4096 bytes at offset 843776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 847872 ++read 4096/4096 bytes at offset 847872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 851968 ++read 4096/4096 bytes at offset 851968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 856064 ++read 4096/4096 bytes at offset 856064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 860160 ++read 4096/4096 bytes at offset 860160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 864256 ++read 4096/4096 bytes at offset 864256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 868352 ++read 4096/4096 bytes at offset 868352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 872448 ++read 4096/4096 bytes at offset 872448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 876544 ++read 4096/4096 bytes at offset 876544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 880640 ++read 4096/4096 bytes at offset 880640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 884736 ++read 4096/4096 bytes at offset 884736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 888832 ++read 4096/4096 bytes at offset 888832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 892928 ++read 4096/4096 bytes at offset 892928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 897024 ++read 4096/4096 bytes at offset 897024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 901120 ++read 4096/4096 bytes at offset 901120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 905216 ++read 4096/4096 bytes at offset 905216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 909312 ++read 4096/4096 bytes at offset 909312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 913408 ++read 4096/4096 bytes at offset 913408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 917504 ++read 4096/4096 bytes at offset 917504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 921600 ++read 4096/4096 bytes at offset 921600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 925696 ++read 4096/4096 bytes at offset 925696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 929792 ++read 4096/4096 bytes at offset 929792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 933888 ++read 4096/4096 bytes at offset 933888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 937984 ++read 4096/4096 bytes at offset 937984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 942080 ++read 4096/4096 bytes at offset 942080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 946176 ++read 4096/4096 bytes at offset 946176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 950272 ++read 4096/4096 bytes at offset 950272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 954368 ++read 4096/4096 bytes at offset 954368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 958464 ++read 4096/4096 bytes at offset 958464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 962560 ++read 4096/4096 bytes at offset 962560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 966656 ++read 4096/4096 bytes at offset 966656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 970752 ++read 4096/4096 bytes at offset 970752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 974848 ++read 4096/4096 bytes at offset 974848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 978944 ++read 4096/4096 bytes at offset 978944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 983040 ++read 4096/4096 bytes at offset 983040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 987136 ++read 4096/4096 bytes at offset 987136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 991232 ++read 4096/4096 bytes at offset 991232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 995328 ++read 4096/4096 bytes at offset 995328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 999424 ++read 4096/4096 bytes at offset 999424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1003520 ++read 4096/4096 bytes at offset 1003520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1007616 ++read 4096/4096 bytes at offset 1007616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1011712 ++read 4096/4096 bytes at offset 1011712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1015808 ++read 4096/4096 bytes at offset 1015808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1019904 ++read 4096/4096 bytes at offset 1019904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1024000 ++read 4096/4096 bytes at offset 1024000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1028096 ++read 4096/4096 bytes at offset 1028096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1032192 ++read 4096/4096 bytes at offset 1032192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1036288 ++read 4096/4096 bytes at offset 1036288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1040384 ++read 4096/4096 bytes at offset 1040384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 1044480 ++read 4096/4096 bytes at offset 1044480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 1050624 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 1050624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1054720 ++read 2048/2048 bytes at offset 1054720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1058816 ++read 2048/2048 bytes at offset 1058816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1062912 ++read 2048/2048 bytes at offset 1062912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1067008 ++read 2048/2048 bytes at offset 1067008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1071104 ++read 2048/2048 bytes at offset 1071104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1075200 ++read 2048/2048 bytes at offset 1075200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1079296 ++read 2048/2048 bytes at offset 1079296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1083392 ++read 2048/2048 bytes at offset 1083392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1087488 ++read 2048/2048 bytes at offset 1087488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1091584 ++read 2048/2048 bytes at offset 1091584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1095680 ++read 2048/2048 bytes at offset 1095680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1099776 ++read 2048/2048 bytes at offset 1099776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1103872 ++read 2048/2048 bytes at offset 1103872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1107968 ++read 2048/2048 bytes at offset 1107968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1112064 ++read 2048/2048 bytes at offset 1112064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1116160 ++read 2048/2048 bytes at offset 1116160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1120256 ++read 2048/2048 bytes at offset 1120256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1124352 ++read 2048/2048 bytes at offset 1124352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1128448 ++read 2048/2048 bytes at offset 1128448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1132544 ++read 2048/2048 bytes at offset 1132544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1136640 ++read 2048/2048 bytes at offset 1136640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1140736 ++read 2048/2048 bytes at offset 1140736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1144832 ++read 2048/2048 bytes at offset 1144832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1148928 ++read 2048/2048 bytes at offset 1148928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1153024 ++read 2048/2048 bytes at offset 1153024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1157120 ++read 2048/2048 bytes at offset 1157120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1161216 ++read 2048/2048 bytes at offset 1161216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1165312 ++read 2048/2048 bytes at offset 1165312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1169408 ++read 2048/2048 bytes at offset 1169408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1173504 ++read 2048/2048 bytes at offset 1173504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1177600 ++read 2048/2048 bytes at offset 1177600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1181696 ++read 2048/2048 bytes at offset 1181696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1185792 ++read 2048/2048 bytes at offset 1185792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1189888 ++read 2048/2048 bytes at offset 1189888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1193984 ++read 2048/2048 bytes at offset 1193984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1198080 ++read 2048/2048 bytes at offset 1198080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1202176 ++read 2048/2048 bytes at offset 1202176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1206272 ++read 2048/2048 bytes at offset 1206272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1210368 ++read 2048/2048 bytes at offset 1210368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1214464 ++read 2048/2048 bytes at offset 1214464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1218560 ++read 2048/2048 bytes at offset 1218560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1222656 ++read 2048/2048 bytes at offset 1222656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1226752 ++read 2048/2048 bytes at offset 1226752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1230848 ++read 2048/2048 bytes at offset 1230848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1234944 ++read 2048/2048 bytes at offset 1234944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1239040 ++read 2048/2048 bytes at offset 1239040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1243136 ++read 2048/2048 bytes at offset 1243136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1247232 ++read 2048/2048 bytes at offset 1247232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1251328 ++read 2048/2048 bytes at offset 1251328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1255424 ++read 2048/2048 bytes at offset 1255424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1259520 ++read 2048/2048 bytes at offset 1259520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1263616 ++read 2048/2048 bytes at offset 1263616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1267712 ++read 2048/2048 bytes at offset 1267712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1271808 ++read 2048/2048 bytes at offset 1271808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1275904 ++read 2048/2048 bytes at offset 1275904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1280000 ++read 2048/2048 bytes at offset 1280000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1284096 ++read 2048/2048 bytes at offset 1284096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1288192 ++read 2048/2048 bytes at offset 1288192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1292288 ++read 2048/2048 bytes at offset 1292288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1296384 ++read 2048/2048 bytes at offset 1296384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1300480 ++read 2048/2048 bytes at offset 1300480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1304576 ++read 2048/2048 bytes at offset 1304576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1308672 ++read 2048/2048 bytes at offset 1308672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1312768 ++read 2048/2048 bytes at offset 1312768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1316864 ++read 2048/2048 bytes at offset 1316864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1320960 ++read 2048/2048 bytes at offset 1320960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1325056 ++read 2048/2048 bytes at offset 1325056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1329152 ++read 2048/2048 bytes at offset 1329152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1333248 ++read 2048/2048 bytes at offset 1333248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1337344 ++read 2048/2048 bytes at offset 1337344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1341440 ++read 2048/2048 bytes at offset 1341440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1345536 ++read 2048/2048 bytes at offset 1345536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1349632 ++read 2048/2048 bytes at offset 1349632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1353728 ++read 2048/2048 bytes at offset 1353728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1357824 ++read 2048/2048 bytes at offset 1357824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1361920 ++read 2048/2048 bytes at offset 1361920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1366016 ++read 2048/2048 bytes at offset 1366016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1370112 ++read 2048/2048 bytes at offset 1370112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1374208 ++read 2048/2048 bytes at offset 1374208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1378304 ++read 2048/2048 bytes at offset 1378304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1382400 ++read 2048/2048 bytes at offset 1382400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1386496 ++read 2048/2048 bytes at offset 1386496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1390592 ++read 2048/2048 bytes at offset 1390592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1394688 ++read 2048/2048 bytes at offset 1394688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1398784 ++read 2048/2048 bytes at offset 1398784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1402880 ++read 2048/2048 bytes at offset 1402880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1406976 ++read 2048/2048 bytes at offset 1406976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1411072 ++read 2048/2048 bytes at offset 1411072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1415168 ++read 2048/2048 bytes at offset 1415168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1419264 ++read 2048/2048 bytes at offset 1419264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1423360 ++read 2048/2048 bytes at offset 1423360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1427456 ++read 2048/2048 bytes at offset 1427456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1431552 ++read 2048/2048 bytes at offset 1431552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1435648 ++read 2048/2048 bytes at offset 1435648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1439744 ++read 2048/2048 bytes at offset 1439744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1443840 ++read 2048/2048 bytes at offset 1443840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1447936 ++read 2048/2048 bytes at offset 1447936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1452032 ++read 2048/2048 bytes at offset 1452032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1456128 ++read 2048/2048 bytes at offset 1456128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1460224 ++read 2048/2048 bytes at offset 1460224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1464320 ++read 2048/2048 bytes at offset 1464320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1468416 ++read 2048/2048 bytes at offset 1468416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1472512 ++read 2048/2048 bytes at offset 1472512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1476608 ++read 2048/2048 bytes at offset 1476608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1480704 ++read 2048/2048 bytes at offset 1480704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1484800 ++read 2048/2048 bytes at offset 1484800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1488896 ++read 2048/2048 bytes at offset 1488896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1492992 ++read 2048/2048 bytes at offset 1492992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1497088 ++read 2048/2048 bytes at offset 1497088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1501184 ++read 2048/2048 bytes at offset 1501184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1505280 ++read 2048/2048 bytes at offset 1505280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1509376 ++read 2048/2048 bytes at offset 1509376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1513472 ++read 2048/2048 bytes at offset 1513472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1517568 ++read 2048/2048 bytes at offset 1517568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1521664 ++read 2048/2048 bytes at offset 1521664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1525760 ++read 2048/2048 bytes at offset 1525760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1529856 ++read 2048/2048 bytes at offset 1529856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1533952 ++read 2048/2048 bytes at offset 1533952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1538048 ++read 2048/2048 bytes at offset 1538048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1542144 ++read 2048/2048 bytes at offset 1542144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1546240 ++read 2048/2048 bytes at offset 1546240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1550336 ++read 2048/2048 bytes at offset 1550336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1554432 ++read 2048/2048 bytes at offset 1554432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1558528 ++read 2048/2048 bytes at offset 1558528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1562624 ++read 2048/2048 bytes at offset 1562624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1566720 ++read 2048/2048 bytes at offset 1566720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1570816 ++read 2048/2048 bytes at offset 1570816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1574912 ++read 2048/2048 bytes at offset 1574912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1579008 ++read 2048/2048 bytes at offset 1579008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1583104 ++read 2048/2048 bytes at offset 1583104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1587200 ++read 2048/2048 bytes at offset 1587200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1591296 ++read 2048/2048 bytes at offset 1591296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1595392 ++read 2048/2048 bytes at offset 1595392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1599488 ++read 2048/2048 bytes at offset 1599488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1603584 ++read 2048/2048 bytes at offset 1603584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1607680 ++read 2048/2048 bytes at offset 1607680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1611776 ++read 2048/2048 bytes at offset 1611776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1615872 ++read 2048/2048 bytes at offset 1615872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1619968 ++read 2048/2048 bytes at offset 1619968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1624064 ++read 2048/2048 bytes at offset 1624064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1628160 ++read 2048/2048 bytes at offset 1628160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1632256 ++read 2048/2048 bytes at offset 1632256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1636352 ++read 2048/2048 bytes at offset 1636352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1640448 ++read 2048/2048 bytes at offset 1640448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1644544 ++read 2048/2048 bytes at offset 1644544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1648640 ++read 2048/2048 bytes at offset 1648640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1652736 ++read 2048/2048 bytes at offset 1652736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1656832 ++read 2048/2048 bytes at offset 1656832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1660928 ++read 2048/2048 bytes at offset 1660928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1665024 ++read 2048/2048 bytes at offset 1665024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1669120 ++read 2048/2048 bytes at offset 1669120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1673216 ++read 2048/2048 bytes at offset 1673216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1677312 ++read 2048/2048 bytes at offset 1677312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1681408 ++read 2048/2048 bytes at offset 1681408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1685504 ++read 2048/2048 bytes at offset 1685504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1689600 ++read 2048/2048 bytes at offset 1689600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1693696 ++read 2048/2048 bytes at offset 1693696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1697792 ++read 2048/2048 bytes at offset 1697792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1701888 ++read 2048/2048 bytes at offset 1701888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1705984 ++read 2048/2048 bytes at offset 1705984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1710080 ++read 2048/2048 bytes at offset 1710080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1714176 ++read 2048/2048 bytes at offset 1714176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1718272 ++read 2048/2048 bytes at offset 1718272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1722368 ++read 2048/2048 bytes at offset 1722368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1726464 ++read 2048/2048 bytes at offset 1726464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1730560 ++read 2048/2048 bytes at offset 1730560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1734656 ++read 2048/2048 bytes at offset 1734656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1738752 ++read 2048/2048 bytes at offset 1738752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1742848 ++read 2048/2048 bytes at offset 1742848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1746944 ++read 2048/2048 bytes at offset 1746944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1751040 ++read 2048/2048 bytes at offset 1751040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1755136 ++read 2048/2048 bytes at offset 1755136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1759232 ++read 2048/2048 bytes at offset 1759232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1763328 ++read 2048/2048 bytes at offset 1763328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1767424 ++read 2048/2048 bytes at offset 1767424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1771520 ++read 2048/2048 bytes at offset 1771520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1775616 ++read 2048/2048 bytes at offset 1775616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1779712 ++read 2048/2048 bytes at offset 1779712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1783808 ++read 2048/2048 bytes at offset 1783808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1787904 ++read 2048/2048 bytes at offset 1787904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1792000 ++read 2048/2048 bytes at offset 1792000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1796096 ++read 2048/2048 bytes at offset 1796096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1800192 ++read 2048/2048 bytes at offset 1800192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1804288 ++read 2048/2048 bytes at offset 1804288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1808384 ++read 2048/2048 bytes at offset 1808384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1812480 ++read 2048/2048 bytes at offset 1812480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1816576 ++read 2048/2048 bytes at offset 1816576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1820672 ++read 2048/2048 bytes at offset 1820672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1824768 ++read 2048/2048 bytes at offset 1824768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1828864 ++read 2048/2048 bytes at offset 1828864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1832960 ++read 2048/2048 bytes at offset 1832960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1837056 ++read 2048/2048 bytes at offset 1837056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1841152 ++read 2048/2048 bytes at offset 1841152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1845248 ++read 2048/2048 bytes at offset 1845248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1849344 ++read 2048/2048 bytes at offset 1849344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1853440 ++read 2048/2048 bytes at offset 1853440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1857536 ++read 2048/2048 bytes at offset 1857536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1861632 ++read 2048/2048 bytes at offset 1861632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1865728 ++read 2048/2048 bytes at offset 1865728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1869824 ++read 2048/2048 bytes at offset 1869824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1873920 ++read 2048/2048 bytes at offset 1873920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1878016 ++read 2048/2048 bytes at offset 1878016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1882112 ++read 2048/2048 bytes at offset 1882112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1886208 ++read 2048/2048 bytes at offset 1886208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1890304 ++read 2048/2048 bytes at offset 1890304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1894400 ++read 2048/2048 bytes at offset 1894400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1898496 ++read 2048/2048 bytes at offset 1898496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1902592 ++read 2048/2048 bytes at offset 1902592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1906688 ++read 2048/2048 bytes at offset 1906688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1910784 ++read 2048/2048 bytes at offset 1910784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1914880 ++read 2048/2048 bytes at offset 1914880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1918976 ++read 2048/2048 bytes at offset 1918976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1923072 ++read 2048/2048 bytes at offset 1923072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1927168 ++read 2048/2048 bytes at offset 1927168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1931264 ++read 2048/2048 bytes at offset 1931264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1935360 ++read 2048/2048 bytes at offset 1935360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1939456 ++read 2048/2048 bytes at offset 1939456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1943552 ++read 2048/2048 bytes at offset 1943552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1947648 ++read 2048/2048 bytes at offset 1947648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1951744 ++read 2048/2048 bytes at offset 1951744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1955840 ++read 2048/2048 bytes at offset 1955840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1959936 ++read 2048/2048 bytes at offset 1959936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1964032 ++read 2048/2048 bytes at offset 1964032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1968128 ++read 2048/2048 bytes at offset 1968128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1972224 ++read 2048/2048 bytes at offset 1972224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1976320 ++read 2048/2048 bytes at offset 1976320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1980416 ++read 2048/2048 bytes at offset 1980416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1984512 ++read 2048/2048 bytes at offset 1984512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1988608 ++read 2048/2048 bytes at offset 1988608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1992704 ++read 2048/2048 bytes at offset 1992704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 1996800 ++read 2048/2048 bytes at offset 1996800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2000896 ++read 2048/2048 bytes at offset 2000896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2004992 ++read 2048/2048 bytes at offset 2004992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2009088 ++read 2048/2048 bytes at offset 2009088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2013184 ++read 2048/2048 bytes at offset 2013184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2017280 ++read 2048/2048 bytes at offset 2017280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2021376 ++read 2048/2048 bytes at offset 2021376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2025472 ++read 2048/2048 bytes at offset 2025472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2029568 ++read 2048/2048 bytes at offset 2029568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2033664 ++read 2048/2048 bytes at offset 2033664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2037760 ++read 2048/2048 bytes at offset 2037760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2041856 ++read 2048/2048 bytes at offset 2041856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2045952 ++read 2048/2048 bytes at offset 2045952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2050048 ++read 2048/2048 bytes at offset 2050048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2054144 ++read 2048/2048 bytes at offset 2054144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2058240 ++read 2048/2048 bytes at offset 2058240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2062336 ++read 2048/2048 bytes at offset 2062336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2066432 ++read 2048/2048 bytes at offset 2066432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2070528 ++read 2048/2048 bytes at offset 2070528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2074624 ++read 2048/2048 bytes at offset 2074624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2078720 ++read 2048/2048 bytes at offset 2078720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2082816 ++read 2048/2048 bytes at offset 2082816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2086912 ++read 2048/2048 bytes at offset 2086912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2091008 ++read 2048/2048 bytes at offset 2091008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2095104 ++read 2048/2048 bytes at offset 2095104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 2097152 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 2097152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2101248 ++read 2048/2048 bytes at offset 2101248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2105344 ++read 2048/2048 bytes at offset 2105344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2109440 ++read 2048/2048 bytes at offset 2109440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2113536 ++read 2048/2048 bytes at offset 2113536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2117632 ++read 2048/2048 bytes at offset 2117632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2121728 ++read 2048/2048 bytes at offset 2121728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2125824 ++read 2048/2048 bytes at offset 2125824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2129920 ++read 2048/2048 bytes at offset 2129920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2134016 ++read 2048/2048 bytes at offset 2134016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2138112 ++read 2048/2048 bytes at offset 2138112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2142208 ++read 2048/2048 bytes at offset 2142208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2146304 ++read 2048/2048 bytes at offset 2146304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2150400 ++read 2048/2048 bytes at offset 2150400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2154496 ++read 2048/2048 bytes at offset 2154496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2158592 ++read 2048/2048 bytes at offset 2158592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2162688 ++read 2048/2048 bytes at offset 2162688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2166784 ++read 2048/2048 bytes at offset 2166784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2170880 ++read 2048/2048 bytes at offset 2170880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2174976 ++read 2048/2048 bytes at offset 2174976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2179072 ++read 2048/2048 bytes at offset 2179072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2183168 ++read 2048/2048 bytes at offset 2183168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2187264 ++read 2048/2048 bytes at offset 2187264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2191360 ++read 2048/2048 bytes at offset 2191360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2195456 ++read 2048/2048 bytes at offset 2195456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2199552 ++read 2048/2048 bytes at offset 2199552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2203648 ++read 2048/2048 bytes at offset 2203648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2207744 ++read 2048/2048 bytes at offset 2207744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2211840 ++read 2048/2048 bytes at offset 2211840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2215936 ++read 2048/2048 bytes at offset 2215936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2220032 ++read 2048/2048 bytes at offset 2220032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2224128 ++read 2048/2048 bytes at offset 2224128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2228224 ++read 2048/2048 bytes at offset 2228224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2232320 ++read 2048/2048 bytes at offset 2232320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2236416 ++read 2048/2048 bytes at offset 2236416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2240512 ++read 2048/2048 bytes at offset 2240512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2244608 ++read 2048/2048 bytes at offset 2244608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2248704 ++read 2048/2048 bytes at offset 2248704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2252800 ++read 2048/2048 bytes at offset 2252800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2256896 ++read 2048/2048 bytes at offset 2256896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2260992 ++read 2048/2048 bytes at offset 2260992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2265088 ++read 2048/2048 bytes at offset 2265088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2269184 ++read 2048/2048 bytes at offset 2269184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2273280 ++read 2048/2048 bytes at offset 2273280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2277376 ++read 2048/2048 bytes at offset 2277376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2281472 ++read 2048/2048 bytes at offset 2281472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2285568 ++read 2048/2048 bytes at offset 2285568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2289664 ++read 2048/2048 bytes at offset 2289664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2293760 ++read 2048/2048 bytes at offset 2293760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2297856 ++read 2048/2048 bytes at offset 2297856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2301952 ++read 2048/2048 bytes at offset 2301952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2306048 ++read 2048/2048 bytes at offset 2306048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2310144 ++read 2048/2048 bytes at offset 2310144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2314240 ++read 2048/2048 bytes at offset 2314240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2318336 ++read 2048/2048 bytes at offset 2318336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2322432 ++read 2048/2048 bytes at offset 2322432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2326528 ++read 2048/2048 bytes at offset 2326528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2330624 ++read 2048/2048 bytes at offset 2330624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2334720 ++read 2048/2048 bytes at offset 2334720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2338816 ++read 2048/2048 bytes at offset 2338816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2342912 ++read 2048/2048 bytes at offset 2342912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2347008 ++read 2048/2048 bytes at offset 2347008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2351104 ++read 2048/2048 bytes at offset 2351104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2355200 ++read 2048/2048 bytes at offset 2355200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2359296 ++read 2048/2048 bytes at offset 2359296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2363392 ++read 2048/2048 bytes at offset 2363392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2367488 ++read 2048/2048 bytes at offset 2367488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2371584 ++read 2048/2048 bytes at offset 2371584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2375680 ++read 2048/2048 bytes at offset 2375680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2379776 ++read 2048/2048 bytes at offset 2379776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2383872 ++read 2048/2048 bytes at offset 2383872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2387968 ++read 2048/2048 bytes at offset 2387968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2392064 ++read 2048/2048 bytes at offset 2392064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2396160 ++read 2048/2048 bytes at offset 2396160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2400256 ++read 2048/2048 bytes at offset 2400256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2404352 ++read 2048/2048 bytes at offset 2404352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2408448 ++read 2048/2048 bytes at offset 2408448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2412544 ++read 2048/2048 bytes at offset 2412544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2416640 ++read 2048/2048 bytes at offset 2416640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2420736 ++read 2048/2048 bytes at offset 2420736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2424832 ++read 2048/2048 bytes at offset 2424832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2428928 ++read 2048/2048 bytes at offset 2428928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2433024 ++read 2048/2048 bytes at offset 2433024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2437120 ++read 2048/2048 bytes at offset 2437120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2441216 ++read 2048/2048 bytes at offset 2441216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2445312 ++read 2048/2048 bytes at offset 2445312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2449408 ++read 2048/2048 bytes at offset 2449408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2453504 ++read 2048/2048 bytes at offset 2453504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2457600 ++read 2048/2048 bytes at offset 2457600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2461696 ++read 2048/2048 bytes at offset 2461696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2465792 ++read 2048/2048 bytes at offset 2465792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2469888 ++read 2048/2048 bytes at offset 2469888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2473984 ++read 2048/2048 bytes at offset 2473984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2478080 ++read 2048/2048 bytes at offset 2478080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2482176 ++read 2048/2048 bytes at offset 2482176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2486272 ++read 2048/2048 bytes at offset 2486272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2490368 ++read 2048/2048 bytes at offset 2490368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2494464 ++read 2048/2048 bytes at offset 2494464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2498560 ++read 2048/2048 bytes at offset 2498560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2502656 ++read 2048/2048 bytes at offset 2502656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2506752 ++read 2048/2048 bytes at offset 2506752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2510848 ++read 2048/2048 bytes at offset 2510848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2514944 ++read 2048/2048 bytes at offset 2514944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2519040 ++read 2048/2048 bytes at offset 2519040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2523136 ++read 2048/2048 bytes at offset 2523136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2527232 ++read 2048/2048 bytes at offset 2527232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2531328 ++read 2048/2048 bytes at offset 2531328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2535424 ++read 2048/2048 bytes at offset 2535424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2539520 ++read 2048/2048 bytes at offset 2539520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2543616 ++read 2048/2048 bytes at offset 2543616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2547712 ++read 2048/2048 bytes at offset 2547712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2551808 ++read 2048/2048 bytes at offset 2551808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2555904 ++read 2048/2048 bytes at offset 2555904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2560000 ++read 2048/2048 bytes at offset 2560000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2564096 ++read 2048/2048 bytes at offset 2564096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2568192 ++read 2048/2048 bytes at offset 2568192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2572288 ++read 2048/2048 bytes at offset 2572288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2576384 ++read 2048/2048 bytes at offset 2576384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2580480 ++read 2048/2048 bytes at offset 2580480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2584576 ++read 2048/2048 bytes at offset 2584576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2588672 ++read 2048/2048 bytes at offset 2588672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2592768 ++read 2048/2048 bytes at offset 2592768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2596864 ++read 2048/2048 bytes at offset 2596864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2600960 ++read 2048/2048 bytes at offset 2600960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2605056 ++read 2048/2048 bytes at offset 2605056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2609152 ++read 2048/2048 bytes at offset 2609152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2613248 ++read 2048/2048 bytes at offset 2613248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2617344 ++read 2048/2048 bytes at offset 2617344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2621440 ++read 2048/2048 bytes at offset 2621440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2625536 ++read 2048/2048 bytes at offset 2625536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2629632 ++read 2048/2048 bytes at offset 2629632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2633728 ++read 2048/2048 bytes at offset 2633728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2637824 ++read 2048/2048 bytes at offset 2637824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2641920 ++read 2048/2048 bytes at offset 2641920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2646016 ++read 2048/2048 bytes at offset 2646016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2650112 ++read 2048/2048 bytes at offset 2650112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2654208 ++read 2048/2048 bytes at offset 2654208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2658304 ++read 2048/2048 bytes at offset 2658304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2662400 ++read 2048/2048 bytes at offset 2662400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2666496 ++read 2048/2048 bytes at offset 2666496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2670592 ++read 2048/2048 bytes at offset 2670592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2674688 ++read 2048/2048 bytes at offset 2674688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2678784 ++read 2048/2048 bytes at offset 2678784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2682880 ++read 2048/2048 bytes at offset 2682880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2686976 ++read 2048/2048 bytes at offset 2686976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2691072 ++read 2048/2048 bytes at offset 2691072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2695168 ++read 2048/2048 bytes at offset 2695168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2699264 ++read 2048/2048 bytes at offset 2699264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2703360 ++read 2048/2048 bytes at offset 2703360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2707456 ++read 2048/2048 bytes at offset 2707456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2711552 ++read 2048/2048 bytes at offset 2711552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2715648 ++read 2048/2048 bytes at offset 2715648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2719744 ++read 2048/2048 bytes at offset 2719744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2723840 ++read 2048/2048 bytes at offset 2723840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2727936 ++read 2048/2048 bytes at offset 2727936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2732032 ++read 2048/2048 bytes at offset 2732032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2736128 ++read 2048/2048 bytes at offset 2736128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2740224 ++read 2048/2048 bytes at offset 2740224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2744320 ++read 2048/2048 bytes at offset 2744320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2748416 ++read 2048/2048 bytes at offset 2748416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2752512 ++read 2048/2048 bytes at offset 2752512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2756608 ++read 2048/2048 bytes at offset 2756608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2760704 ++read 2048/2048 bytes at offset 2760704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2764800 ++read 2048/2048 bytes at offset 2764800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2768896 ++read 2048/2048 bytes at offset 2768896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2772992 ++read 2048/2048 bytes at offset 2772992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2777088 ++read 2048/2048 bytes at offset 2777088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2781184 ++read 2048/2048 bytes at offset 2781184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2785280 ++read 2048/2048 bytes at offset 2785280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2789376 ++read 2048/2048 bytes at offset 2789376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2793472 ++read 2048/2048 bytes at offset 2793472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2797568 ++read 2048/2048 bytes at offset 2797568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2801664 ++read 2048/2048 bytes at offset 2801664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2805760 ++read 2048/2048 bytes at offset 2805760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2809856 ++read 2048/2048 bytes at offset 2809856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2813952 ++read 2048/2048 bytes at offset 2813952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2818048 ++read 2048/2048 bytes at offset 2818048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2822144 ++read 2048/2048 bytes at offset 2822144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2826240 ++read 2048/2048 bytes at offset 2826240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2830336 ++read 2048/2048 bytes at offset 2830336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2834432 ++read 2048/2048 bytes at offset 2834432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2838528 ++read 2048/2048 bytes at offset 2838528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2842624 ++read 2048/2048 bytes at offset 2842624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2846720 ++read 2048/2048 bytes at offset 2846720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2850816 ++read 2048/2048 bytes at offset 2850816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2854912 ++read 2048/2048 bytes at offset 2854912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2859008 ++read 2048/2048 bytes at offset 2859008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2863104 ++read 2048/2048 bytes at offset 2863104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2867200 ++read 2048/2048 bytes at offset 2867200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2871296 ++read 2048/2048 bytes at offset 2871296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2875392 ++read 2048/2048 bytes at offset 2875392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2879488 ++read 2048/2048 bytes at offset 2879488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2883584 ++read 2048/2048 bytes at offset 2883584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2887680 ++read 2048/2048 bytes at offset 2887680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2891776 ++read 2048/2048 bytes at offset 2891776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2895872 ++read 2048/2048 bytes at offset 2895872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2899968 ++read 2048/2048 bytes at offset 2899968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2904064 ++read 2048/2048 bytes at offset 2904064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2908160 ++read 2048/2048 bytes at offset 2908160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2912256 ++read 2048/2048 bytes at offset 2912256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2916352 ++read 2048/2048 bytes at offset 2916352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2920448 ++read 2048/2048 bytes at offset 2920448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2924544 ++read 2048/2048 bytes at offset 2924544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2928640 ++read 2048/2048 bytes at offset 2928640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2932736 ++read 2048/2048 bytes at offset 2932736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2936832 ++read 2048/2048 bytes at offset 2936832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2940928 ++read 2048/2048 bytes at offset 2940928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2945024 ++read 2048/2048 bytes at offset 2945024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2949120 ++read 2048/2048 bytes at offset 2949120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2953216 ++read 2048/2048 bytes at offset 2953216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2957312 ++read 2048/2048 bytes at offset 2957312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2961408 ++read 2048/2048 bytes at offset 2961408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2965504 ++read 2048/2048 bytes at offset 2965504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2969600 ++read 2048/2048 bytes at offset 2969600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2973696 ++read 2048/2048 bytes at offset 2973696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2977792 ++read 2048/2048 bytes at offset 2977792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2981888 ++read 2048/2048 bytes at offset 2981888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2985984 ++read 2048/2048 bytes at offset 2985984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2990080 ++read 2048/2048 bytes at offset 2990080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2994176 ++read 2048/2048 bytes at offset 2994176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 2998272 ++read 2048/2048 bytes at offset 2998272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3002368 ++read 2048/2048 bytes at offset 3002368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3006464 ++read 2048/2048 bytes at offset 3006464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3010560 ++read 2048/2048 bytes at offset 3010560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3014656 ++read 2048/2048 bytes at offset 3014656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3018752 ++read 2048/2048 bytes at offset 3018752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3022848 ++read 2048/2048 bytes at offset 3022848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3026944 ++read 2048/2048 bytes at offset 3026944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3031040 ++read 2048/2048 bytes at offset 3031040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3035136 ++read 2048/2048 bytes at offset 3035136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3039232 ++read 2048/2048 bytes at offset 3039232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3043328 ++read 2048/2048 bytes at offset 3043328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3047424 ++read 2048/2048 bytes at offset 3047424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3051520 ++read 2048/2048 bytes at offset 3051520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3055616 ++read 2048/2048 bytes at offset 3055616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3059712 ++read 2048/2048 bytes at offset 3059712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3063808 ++read 2048/2048 bytes at offset 3063808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3067904 ++read 2048/2048 bytes at offset 3067904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3072000 ++read 2048/2048 bytes at offset 3072000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3076096 ++read 2048/2048 bytes at offset 3076096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3080192 ++read 2048/2048 bytes at offset 3080192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3084288 ++read 2048/2048 bytes at offset 3084288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3088384 ++read 2048/2048 bytes at offset 3088384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3092480 ++read 2048/2048 bytes at offset 3092480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3096576 ++read 2048/2048 bytes at offset 3096576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3100672 ++read 2048/2048 bytes at offset 3100672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3104768 ++read 2048/2048 bytes at offset 3104768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3108864 ++read 2048/2048 bytes at offset 3108864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3112960 ++read 2048/2048 bytes at offset 3112960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3117056 ++read 2048/2048 bytes at offset 3117056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3121152 ++read 2048/2048 bytes at offset 3121152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3125248 ++read 2048/2048 bytes at offset 3125248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3129344 ++read 2048/2048 bytes at offset 3129344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3133440 ++read 2048/2048 bytes at offset 3133440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3137536 ++read 2048/2048 bytes at offset 3137536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3141632 ++read 2048/2048 bytes at offset 3141632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 3146752 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 3146752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3150848 ++read 2048/2048 bytes at offset 3150848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3154944 ++read 2048/2048 bytes at offset 3154944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3159040 ++read 2048/2048 bytes at offset 3159040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3163136 ++read 2048/2048 bytes at offset 3163136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3167232 ++read 2048/2048 bytes at offset 3167232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3171328 ++read 2048/2048 bytes at offset 3171328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3175424 ++read 2048/2048 bytes at offset 3175424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3179520 ++read 2048/2048 bytes at offset 3179520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3183616 ++read 2048/2048 bytes at offset 3183616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3187712 ++read 2048/2048 bytes at offset 3187712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3191808 ++read 2048/2048 bytes at offset 3191808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3195904 ++read 2048/2048 bytes at offset 3195904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3200000 ++read 2048/2048 bytes at offset 3200000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3204096 ++read 2048/2048 bytes at offset 3204096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3208192 ++read 2048/2048 bytes at offset 3208192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3212288 ++read 2048/2048 bytes at offset 3212288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3216384 ++read 2048/2048 bytes at offset 3216384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3220480 ++read 2048/2048 bytes at offset 3220480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3224576 ++read 2048/2048 bytes at offset 3224576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3228672 ++read 2048/2048 bytes at offset 3228672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3232768 ++read 2048/2048 bytes at offset 3232768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3236864 ++read 2048/2048 bytes at offset 3236864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3240960 ++read 2048/2048 bytes at offset 3240960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3245056 ++read 2048/2048 bytes at offset 3245056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3249152 ++read 2048/2048 bytes at offset 3249152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3253248 ++read 2048/2048 bytes at offset 3253248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3257344 ++read 2048/2048 bytes at offset 3257344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3261440 ++read 2048/2048 bytes at offset 3261440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3265536 ++read 2048/2048 bytes at offset 3265536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3269632 ++read 2048/2048 bytes at offset 3269632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3273728 ++read 2048/2048 bytes at offset 3273728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3277824 ++read 2048/2048 bytes at offset 3277824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3281920 ++read 2048/2048 bytes at offset 3281920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3286016 ++read 2048/2048 bytes at offset 3286016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3290112 ++read 2048/2048 bytes at offset 3290112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3294208 ++read 2048/2048 bytes at offset 3294208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3298304 ++read 2048/2048 bytes at offset 3298304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3302400 ++read 2048/2048 bytes at offset 3302400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3306496 ++read 2048/2048 bytes at offset 3306496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3310592 ++read 2048/2048 bytes at offset 3310592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3314688 ++read 2048/2048 bytes at offset 3314688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3318784 ++read 2048/2048 bytes at offset 3318784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3322880 ++read 2048/2048 bytes at offset 3322880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3326976 ++read 2048/2048 bytes at offset 3326976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3331072 ++read 2048/2048 bytes at offset 3331072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3335168 ++read 2048/2048 bytes at offset 3335168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3339264 ++read 2048/2048 bytes at offset 3339264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3343360 ++read 2048/2048 bytes at offset 3343360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3347456 ++read 2048/2048 bytes at offset 3347456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3351552 ++read 2048/2048 bytes at offset 3351552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3355648 ++read 2048/2048 bytes at offset 3355648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3359744 ++read 2048/2048 bytes at offset 3359744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3363840 ++read 2048/2048 bytes at offset 3363840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3367936 ++read 2048/2048 bytes at offset 3367936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3372032 ++read 2048/2048 bytes at offset 3372032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3376128 ++read 2048/2048 bytes at offset 3376128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3380224 ++read 2048/2048 bytes at offset 3380224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3384320 ++read 2048/2048 bytes at offset 3384320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3388416 ++read 2048/2048 bytes at offset 3388416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3392512 ++read 2048/2048 bytes at offset 3392512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3396608 ++read 2048/2048 bytes at offset 3396608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3400704 ++read 2048/2048 bytes at offset 3400704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3404800 ++read 2048/2048 bytes at offset 3404800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3408896 ++read 2048/2048 bytes at offset 3408896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3412992 ++read 2048/2048 bytes at offset 3412992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3417088 ++read 2048/2048 bytes at offset 3417088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3421184 ++read 2048/2048 bytes at offset 3421184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3425280 ++read 2048/2048 bytes at offset 3425280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3429376 ++read 2048/2048 bytes at offset 3429376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3433472 ++read 2048/2048 bytes at offset 3433472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3437568 ++read 2048/2048 bytes at offset 3437568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3441664 ++read 2048/2048 bytes at offset 3441664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3445760 ++read 2048/2048 bytes at offset 3445760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3449856 ++read 2048/2048 bytes at offset 3449856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3453952 ++read 2048/2048 bytes at offset 3453952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3458048 ++read 2048/2048 bytes at offset 3458048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3462144 ++read 2048/2048 bytes at offset 3462144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3466240 ++read 2048/2048 bytes at offset 3466240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3470336 ++read 2048/2048 bytes at offset 3470336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3474432 ++read 2048/2048 bytes at offset 3474432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3478528 ++read 2048/2048 bytes at offset 3478528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3482624 ++read 2048/2048 bytes at offset 3482624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3486720 ++read 2048/2048 bytes at offset 3486720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3490816 ++read 2048/2048 bytes at offset 3490816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3494912 ++read 2048/2048 bytes at offset 3494912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3499008 ++read 2048/2048 bytes at offset 3499008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3503104 ++read 2048/2048 bytes at offset 3503104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3507200 ++read 2048/2048 bytes at offset 3507200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3511296 ++read 2048/2048 bytes at offset 3511296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3515392 ++read 2048/2048 bytes at offset 3515392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3519488 ++read 2048/2048 bytes at offset 3519488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3523584 ++read 2048/2048 bytes at offset 3523584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3527680 ++read 2048/2048 bytes at offset 3527680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3531776 ++read 2048/2048 bytes at offset 3531776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3535872 ++read 2048/2048 bytes at offset 3535872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3539968 ++read 2048/2048 bytes at offset 3539968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3544064 ++read 2048/2048 bytes at offset 3544064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3548160 ++read 2048/2048 bytes at offset 3548160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3552256 ++read 2048/2048 bytes at offset 3552256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3556352 ++read 2048/2048 bytes at offset 3556352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3560448 ++read 2048/2048 bytes at offset 3560448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3564544 ++read 2048/2048 bytes at offset 3564544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3568640 ++read 2048/2048 bytes at offset 3568640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3572736 ++read 2048/2048 bytes at offset 3572736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3576832 ++read 2048/2048 bytes at offset 3576832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3580928 ++read 2048/2048 bytes at offset 3580928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3585024 ++read 2048/2048 bytes at offset 3585024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3589120 ++read 2048/2048 bytes at offset 3589120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3593216 ++read 2048/2048 bytes at offset 3593216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3597312 ++read 2048/2048 bytes at offset 3597312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3601408 ++read 2048/2048 bytes at offset 3601408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3605504 ++read 2048/2048 bytes at offset 3605504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3609600 ++read 2048/2048 bytes at offset 3609600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3613696 ++read 2048/2048 bytes at offset 3613696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3617792 ++read 2048/2048 bytes at offset 3617792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3621888 ++read 2048/2048 bytes at offset 3621888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3625984 ++read 2048/2048 bytes at offset 3625984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3630080 ++read 2048/2048 bytes at offset 3630080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3634176 ++read 2048/2048 bytes at offset 3634176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3638272 ++read 2048/2048 bytes at offset 3638272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3642368 ++read 2048/2048 bytes at offset 3642368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3646464 ++read 2048/2048 bytes at offset 3646464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3650560 ++read 2048/2048 bytes at offset 3650560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3654656 ++read 2048/2048 bytes at offset 3654656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3658752 ++read 2048/2048 bytes at offset 3658752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3662848 ++read 2048/2048 bytes at offset 3662848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3666944 ++read 2048/2048 bytes at offset 3666944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3671040 ++read 2048/2048 bytes at offset 3671040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3675136 ++read 2048/2048 bytes at offset 3675136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3679232 ++read 2048/2048 bytes at offset 3679232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3683328 ++read 2048/2048 bytes at offset 3683328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3687424 ++read 2048/2048 bytes at offset 3687424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3691520 ++read 2048/2048 bytes at offset 3691520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3695616 ++read 2048/2048 bytes at offset 3695616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3699712 ++read 2048/2048 bytes at offset 3699712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3703808 ++read 2048/2048 bytes at offset 3703808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3707904 ++read 2048/2048 bytes at offset 3707904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3712000 ++read 2048/2048 bytes at offset 3712000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3716096 ++read 2048/2048 bytes at offset 3716096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3720192 ++read 2048/2048 bytes at offset 3720192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3724288 ++read 2048/2048 bytes at offset 3724288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3728384 ++read 2048/2048 bytes at offset 3728384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3732480 ++read 2048/2048 bytes at offset 3732480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3736576 ++read 2048/2048 bytes at offset 3736576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3740672 ++read 2048/2048 bytes at offset 3740672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3744768 ++read 2048/2048 bytes at offset 3744768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3748864 ++read 2048/2048 bytes at offset 3748864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3752960 ++read 2048/2048 bytes at offset 3752960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3757056 ++read 2048/2048 bytes at offset 3757056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3761152 ++read 2048/2048 bytes at offset 3761152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3765248 ++read 2048/2048 bytes at offset 3765248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3769344 ++read 2048/2048 bytes at offset 3769344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3773440 ++read 2048/2048 bytes at offset 3773440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3777536 ++read 2048/2048 bytes at offset 3777536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3781632 ++read 2048/2048 bytes at offset 3781632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3785728 ++read 2048/2048 bytes at offset 3785728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3789824 ++read 2048/2048 bytes at offset 3789824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3793920 ++read 2048/2048 bytes at offset 3793920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3798016 ++read 2048/2048 bytes at offset 3798016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3802112 ++read 2048/2048 bytes at offset 3802112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3806208 ++read 2048/2048 bytes at offset 3806208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3810304 ++read 2048/2048 bytes at offset 3810304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3814400 ++read 2048/2048 bytes at offset 3814400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3818496 ++read 2048/2048 bytes at offset 3818496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3822592 ++read 2048/2048 bytes at offset 3822592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3826688 ++read 2048/2048 bytes at offset 3826688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3830784 ++read 2048/2048 bytes at offset 3830784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3834880 ++read 2048/2048 bytes at offset 3834880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3838976 ++read 2048/2048 bytes at offset 3838976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3843072 ++read 2048/2048 bytes at offset 3843072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3847168 ++read 2048/2048 bytes at offset 3847168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3851264 ++read 2048/2048 bytes at offset 3851264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3855360 ++read 2048/2048 bytes at offset 3855360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3859456 ++read 2048/2048 bytes at offset 3859456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3863552 ++read 2048/2048 bytes at offset 3863552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3867648 ++read 2048/2048 bytes at offset 3867648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3871744 ++read 2048/2048 bytes at offset 3871744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3875840 ++read 2048/2048 bytes at offset 3875840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3879936 ++read 2048/2048 bytes at offset 3879936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3884032 ++read 2048/2048 bytes at offset 3884032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3888128 ++read 2048/2048 bytes at offset 3888128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3892224 ++read 2048/2048 bytes at offset 3892224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3896320 ++read 2048/2048 bytes at offset 3896320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3900416 ++read 2048/2048 bytes at offset 3900416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3904512 ++read 2048/2048 bytes at offset 3904512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3908608 ++read 2048/2048 bytes at offset 3908608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3912704 ++read 2048/2048 bytes at offset 3912704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3916800 ++read 2048/2048 bytes at offset 3916800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3920896 ++read 2048/2048 bytes at offset 3920896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3924992 ++read 2048/2048 bytes at offset 3924992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3929088 ++read 2048/2048 bytes at offset 3929088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3933184 ++read 2048/2048 bytes at offset 3933184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3937280 ++read 2048/2048 bytes at offset 3937280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3941376 ++read 2048/2048 bytes at offset 3941376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3945472 ++read 2048/2048 bytes at offset 3945472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3949568 ++read 2048/2048 bytes at offset 3949568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3953664 ++read 2048/2048 bytes at offset 3953664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3957760 ++read 2048/2048 bytes at offset 3957760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3961856 ++read 2048/2048 bytes at offset 3961856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3965952 ++read 2048/2048 bytes at offset 3965952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3970048 ++read 2048/2048 bytes at offset 3970048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3974144 ++read 2048/2048 bytes at offset 3974144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3978240 ++read 2048/2048 bytes at offset 3978240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3982336 ++read 2048/2048 bytes at offset 3982336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3986432 ++read 2048/2048 bytes at offset 3986432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3990528 ++read 2048/2048 bytes at offset 3990528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3994624 ++read 2048/2048 bytes at offset 3994624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 3998720 ++read 2048/2048 bytes at offset 3998720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4002816 ++read 2048/2048 bytes at offset 4002816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4006912 ++read 2048/2048 bytes at offset 4006912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4011008 ++read 2048/2048 bytes at offset 4011008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4015104 ++read 2048/2048 bytes at offset 4015104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4019200 ++read 2048/2048 bytes at offset 4019200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4023296 ++read 2048/2048 bytes at offset 4023296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4027392 ++read 2048/2048 bytes at offset 4027392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4031488 ++read 2048/2048 bytes at offset 4031488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4035584 ++read 2048/2048 bytes at offset 4035584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4039680 ++read 2048/2048 bytes at offset 4039680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4043776 ++read 2048/2048 bytes at offset 4043776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4047872 ++read 2048/2048 bytes at offset 4047872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4051968 ++read 2048/2048 bytes at offset 4051968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4056064 ++read 2048/2048 bytes at offset 4056064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4060160 ++read 2048/2048 bytes at offset 4060160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4064256 ++read 2048/2048 bytes at offset 4064256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4068352 ++read 2048/2048 bytes at offset 4068352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4072448 ++read 2048/2048 bytes at offset 4072448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4076544 ++read 2048/2048 bytes at offset 4076544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4080640 ++read 2048/2048 bytes at offset 4080640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4084736 ++read 2048/2048 bytes at offset 4084736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4088832 ++read 2048/2048 bytes at offset 4088832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4092928 ++read 2048/2048 bytes at offset 4092928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4097024 ++read 2048/2048 bytes at offset 4097024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4101120 ++read 2048/2048 bytes at offset 4101120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4105216 ++read 2048/2048 bytes at offset 4105216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4109312 ++read 2048/2048 bytes at offset 4109312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4113408 ++read 2048/2048 bytes at offset 4113408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4117504 ++read 2048/2048 bytes at offset 4117504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4121600 ++read 2048/2048 bytes at offset 4121600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4125696 ++read 2048/2048 bytes at offset 4125696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4129792 ++read 2048/2048 bytes at offset 4129792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4133888 ++read 2048/2048 bytes at offset 4133888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4137984 ++read 2048/2048 bytes at offset 4137984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4142080 ++read 2048/2048 bytes at offset 4142080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4146176 ++read 2048/2048 bytes at offset 4146176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4150272 ++read 2048/2048 bytes at offset 4150272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4154368 ++read 2048/2048 bytes at offset 4154368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4158464 ++read 2048/2048 bytes at offset 4158464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4162560 ++read 2048/2048 bytes at offset 4162560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4166656 ++read 2048/2048 bytes at offset 4166656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4170752 ++read 2048/2048 bytes at offset 4170752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4174848 ++read 2048/2048 bytes at offset 4174848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4178944 ++read 2048/2048 bytes at offset 4178944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4183040 ++read 2048/2048 bytes at offset 4183040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4187136 ++read 2048/2048 bytes at offset 4187136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4191232 ++read 2048/2048 bytes at offset 4191232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4196352 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4196352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4208640 ++read 8192/8192 bytes at offset 4208640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4220928 ++read 8192/8192 bytes at offset 4220928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4233216 ++read 8192/8192 bytes at offset 4233216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4245504 ++read 8192/8192 bytes at offset 4245504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4257792 ++read 8192/8192 bytes at offset 4257792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4270080 ++read 8192/8192 bytes at offset 4270080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4282368 ++read 8192/8192 bytes at offset 4282368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4294656 ++read 8192/8192 bytes at offset 4294656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4306944 ++read 8192/8192 bytes at offset 4306944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4319232 ++read 8192/8192 bytes at offset 4319232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4331520 ++read 8192/8192 bytes at offset 4331520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4343808 ++read 8192/8192 bytes at offset 4343808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4356096 ++read 8192/8192 bytes at offset 4356096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4368384 ++read 8192/8192 bytes at offset 4368384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4380672 ++read 8192/8192 bytes at offset 4380672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4392960 ++read 8192/8192 bytes at offset 4392960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4405248 ++read 8192/8192 bytes at offset 4405248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4417536 ++read 8192/8192 bytes at offset 4417536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4429824 ++read 8192/8192 bytes at offset 4429824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4442112 ++read 8192/8192 bytes at offset 4442112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4454400 ++read 8192/8192 bytes at offset 4454400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4466688 ++read 8192/8192 bytes at offset 4466688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4478976 ++read 8192/8192 bytes at offset 4478976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4491264 ++read 8192/8192 bytes at offset 4491264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4503552 ++read 8192/8192 bytes at offset 4503552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4515840 ++read 8192/8192 bytes at offset 4515840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4528128 ++read 8192/8192 bytes at offset 4528128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4540416 ++read 8192/8192 bytes at offset 4540416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4552704 ++read 8192/8192 bytes at offset 4552704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4564992 ++read 8192/8192 bytes at offset 4564992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4577280 ++read 8192/8192 bytes at offset 4577280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4589568 ++read 8192/8192 bytes at offset 4589568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4601856 ++read 8192/8192 bytes at offset 4601856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4614144 ++read 8192/8192 bytes at offset 4614144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4626432 ++read 8192/8192 bytes at offset 4626432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4638720 ++read 8192/8192 bytes at offset 4638720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4651008 ++read 8192/8192 bytes at offset 4651008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4663296 ++read 8192/8192 bytes at offset 4663296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4675584 ++read 8192/8192 bytes at offset 4675584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4687872 ++read 8192/8192 bytes at offset 4687872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4700160 ++read 8192/8192 bytes at offset 4700160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4712448 ++read 8192/8192 bytes at offset 4712448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4724736 ++read 8192/8192 bytes at offset 4724736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4737024 ++read 8192/8192 bytes at offset 4737024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4749312 ++read 8192/8192 bytes at offset 4749312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4761600 ++read 8192/8192 bytes at offset 4761600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4773888 ++read 8192/8192 bytes at offset 4773888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4786176 ++read 8192/8192 bytes at offset 4786176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4798464 ++read 8192/8192 bytes at offset 4798464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4810752 ++read 8192/8192 bytes at offset 4810752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4823040 ++read 8192/8192 bytes at offset 4823040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4835328 ++read 8192/8192 bytes at offset 4835328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4847616 ++read 8192/8192 bytes at offset 4847616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4859904 ++read 8192/8192 bytes at offset 4859904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4872192 ++read 8192/8192 bytes at offset 4872192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4884480 ++read 8192/8192 bytes at offset 4884480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4896768 ++read 8192/8192 bytes at offset 4896768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4909056 ++read 8192/8192 bytes at offset 4909056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4921344 ++read 8192/8192 bytes at offset 4921344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4933632 ++read 8192/8192 bytes at offset 4933632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4945920 ++read 8192/8192 bytes at offset 4945920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4958208 ++read 8192/8192 bytes at offset 4958208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4970496 ++read 8192/8192 bytes at offset 4970496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 6285312 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 6285312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 8384512 ++read 12288/12288 bytes at offset 8384512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 10483712 ++read 12288/12288 bytes at offset 10483712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 12582912 ++read 12288/12288 bytes at offset 12582912 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 14682112 ++read 12288/12288 bytes at offset 14682112 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 16781312 ++read 12288/12288 bytes at offset 16781312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18880512 ++read 12288/12288 bytes at offset 18880512 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20979712 ++read 12288/12288 bytes at offset 20979712 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With snapshot test3, offset 4294967296 + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/017.out b/tests/qemu-iotests/017.out +index df34ee7..75ea614 100644 +--- a/tests/qemu-iotests/017.out ++++ b/tests/qemu-iotests/017.out +@@ -3,1075 +3,1075 @@ Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=6442450944 + Filling base image + + === IO: pattern 0 +-qemu-io> wrote 512/512 bytes at offset 0 ++wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1024 ++wrote 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2048 ++wrote 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3072 ++wrote 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4096 ++wrote 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5120 ++wrote 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6144 ++wrote 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7168 ++wrote 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8192 ++wrote 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9216 ++wrote 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10240 ++wrote 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11264 ++wrote 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12288 ++wrote 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13312 ++wrote 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14336 ++wrote 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15360 ++wrote 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16384 ++wrote 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17408 ++wrote 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18432 ++wrote 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19456 ++wrote 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20480 ++wrote 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 21504 ++wrote 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22528 ++wrote 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23552 ++wrote 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24576 ++wrote 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25600 ++wrote 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26624 ++wrote 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27648 ++wrote 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28672 ++wrote 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29696 ++wrote 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30720 ++wrote 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31744 ++wrote 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32768 ++wrote 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33792 ++wrote 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34816 ++wrote 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35840 ++wrote 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36864 ++wrote 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37888 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++=== IO: pattern 128 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 512/512 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968320 ++wrote 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969344 ++wrote 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970368 ++wrote 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971392 ++wrote 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972416 ++wrote 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973440 ++wrote 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974464 ++wrote 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294975488 ++wrote 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976512 ++wrote 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977536 ++wrote 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978560 ++wrote 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979584 ++wrote 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980608 ++wrote 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981632 ++wrote 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982656 ++wrote 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983680 ++wrote 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984704 ++wrote 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985728 ++wrote 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986752 ++wrote 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987776 ++wrote 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988800 ++wrote 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989824 ++wrote 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990848 ++wrote 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991872 ++wrote 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992896 ++wrote 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993920 ++wrote 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994944 ++wrote 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995968 ++wrote 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996992 ++wrote 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998016 ++wrote 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999040 ++wrote 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000064 ++wrote 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001088 ++wrote 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002112 ++wrote 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003136 ++wrote 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004160 ++wrote 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005184 ++wrote 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006208 ++wrote 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007232 ++wrote 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008256 ++wrote 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009280 ++wrote 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010304 ++wrote 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011328 ++wrote 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012352 ++wrote 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013376 ++wrote 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014400 ++wrote 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015424 ++wrote 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016448 ++wrote 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017472 ++wrote 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295018496 ++wrote 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019520 ++wrote 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020544 ++wrote 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021568 ++wrote 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022592 ++wrote 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023616 ++wrote 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024640 ++wrote 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025664 ++wrote 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026688 ++wrote 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027712 ++wrote 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028736 ++wrote 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029760 ++wrote 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030784 ++wrote 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031808 ++wrote 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> wrote 65536/65536 bytes at offset 4295032832 ++=== IO: pattern 128 ++wrote 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating test image with backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + Filling test image + + === IO: pattern 1 +-qemu-io> wrote 512/512 bytes at offset 512 ++wrote 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1536 ++wrote 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2560 ++wrote 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3584 ++wrote 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4608 ++wrote 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5632 ++wrote 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6656 ++wrote 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7680 ++wrote 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8704 ++wrote 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9728 ++wrote 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10752 ++wrote 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11776 ++wrote 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12800 ++wrote 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13824 ++wrote 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14848 ++wrote 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15872 ++wrote 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16896 ++wrote 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17920 ++wrote 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18944 ++wrote 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19968 ++wrote 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20992 ++wrote 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22016 ++wrote 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23040 ++wrote 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24064 ++wrote 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25088 ++wrote 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26112 ++wrote 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27136 ++wrote 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28160 ++wrote 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29184 ++wrote 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30208 ++wrote 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31232 ++wrote 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32256 ++wrote 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33280 ++wrote 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34304 ++wrote 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35328 ++wrote 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36352 ++wrote 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37376 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 512/512 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968832 ++wrote 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969856 ++wrote 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970880 ++wrote 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971904 ++wrote 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972928 ++wrote 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973952 ++wrote 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974976 ++wrote 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976000 ++wrote 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977024 ++wrote 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978048 ++wrote 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979072 ++wrote 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980096 ++wrote 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981120 ++wrote 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982144 ++wrote 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983168 ++wrote 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984192 ++wrote 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985216 ++wrote 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986240 ++wrote 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987264 ++wrote 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988288 ++wrote 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989312 ++wrote 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990336 ++wrote 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991360 ++wrote 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992384 ++wrote 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993408 ++wrote 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994432 ++wrote 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995456 ++wrote 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996480 ++wrote 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294997504 ++wrote 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998528 ++wrote 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999552 ++wrote 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000576 ++wrote 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001600 ++wrote 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002624 ++wrote 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003648 ++wrote 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004672 ++wrote 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005696 ++wrote 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006720 ++wrote 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007744 ++wrote 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008768 ++wrote 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009792 ++wrote 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010816 ++wrote 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011840 ++wrote 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012864 ++wrote 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013888 ++wrote 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014912 ++wrote 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015936 ++wrote 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016960 ++wrote 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017984 ++wrote 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019008 ++wrote 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020032 ++wrote 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021056 ++wrote 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022080 ++wrote 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023104 ++wrote 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024128 ++wrote 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025152 ++wrote 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026176 ++wrote 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027200 ++wrote 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028224 ++wrote 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029248 ++wrote 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030272 ++wrote 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031296 ++wrote 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032320 ++wrote 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 4295098368 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Reading + + === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 0 ++read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1024 ++read 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2048 ++read 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3072 ++read 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4096 ++read 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5120 ++read 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6144 ++read 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7168 ++read 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8192 ++read 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9216 ++read 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10240 ++read 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11264 ++read 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12288 ++read 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13312 ++read 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14336 ++read 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15360 ++read 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16384 ++read 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17408 ++read 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18432 ++read 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19456 ++read 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20480 ++read 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 21504 ++read 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22528 ++read 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23552 ++read 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24576 ++read 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25600 ++read 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26624 ++read 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27648 ++read 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28672 ++read 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29696 ++read 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30720 ++read 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31744 ++read 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32768 ++read 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33792 ++read 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34816 ++read 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35840 ++read 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36864 ++read 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37888 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 512/512 bytes at offset 512 ++=== IO: pattern 1 ++read 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1536 ++read 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2560 ++read 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3584 ++read 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4608 ++read 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5632 ++read 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6656 ++read 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7680 ++read 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8704 ++read 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9728 ++read 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10752 ++read 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11776 ++read 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12800 ++read 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13824 ++read 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14848 ++read 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15872 ++read 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16896 ++read 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17920 ++read 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18944 ++read 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19968 ++read 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20992 ++read 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22016 ++read 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23040 ++read 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24064 ++read 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25088 ++read 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26112 ++read 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27136 ++read 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28160 ++read 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29184 ++read 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30208 ++read 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31232 ++read 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32256 ++read 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33280 ++read 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34304 ++read 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35328 ++read 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36352 ++read 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37376 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> read 65536/65536 bytes at offset 65536 ++=== IO: pattern 128 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 131072 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 327680 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968320 ++read 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969344 ++read 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970368 ++read 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971392 ++read 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972416 ++read 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973440 ++read 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974464 ++read 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294975488 ++read 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976512 ++read 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977536 ++read 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978560 ++read 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979584 ++read 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980608 ++read 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981632 ++read 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982656 ++read 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983680 ++read 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984704 ++read 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985728 ++read 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986752 ++read 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987776 ++read 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988800 ++read 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989824 ++read 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990848 ++read 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991872 ++read 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992896 ++read 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993920 ++read 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994944 ++read 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995968 ++read 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996992 ++read 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998016 ++read 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999040 ++read 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000064 ++read 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001088 ++read 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002112 ++read 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003136 ++read 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004160 ++read 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005184 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 512/512 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968832 ++read 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969856 ++read 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970880 ++read 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971904 ++read 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972928 ++read 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973952 ++read 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974976 ++read 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976000 ++read 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977024 ++read 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978048 ++read 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979072 ++read 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980096 ++read 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981120 ++read 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982144 ++read 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983168 ++read 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984192 ++read 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985216 ++read 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986240 ++read 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987264 ++read 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988288 ++read 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989312 ++read 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990336 ++read 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991360 ++read 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992384 ++read 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993408 ++read 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994432 ++read 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995456 ++read 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996480 ++read 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294997504 ++read 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998528 ++read 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999552 ++read 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000576 ++read 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001600 ++read 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002624 ++read 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003648 ++read 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004672 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++=== IO: pattern 128 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/018.out b/tests/qemu-iotests/018.out +index 3ddb8d8..25e7b95 100644 +--- a/tests/qemu-iotests/018.out ++++ b/tests/qemu-iotests/018.out +@@ -3,1075 +3,1075 @@ Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=6442450944 + Filling base image + + === IO: pattern 0 +-qemu-io> wrote 512/512 bytes at offset 0 ++wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1024 ++wrote 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2048 ++wrote 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3072 ++wrote 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4096 ++wrote 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5120 ++wrote 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6144 ++wrote 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7168 ++wrote 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8192 ++wrote 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9216 ++wrote 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10240 ++wrote 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11264 ++wrote 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12288 ++wrote 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13312 ++wrote 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14336 ++wrote 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15360 ++wrote 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16384 ++wrote 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17408 ++wrote 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18432 ++wrote 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19456 ++wrote 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20480 ++wrote 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 21504 ++wrote 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22528 ++wrote 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23552 ++wrote 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24576 ++wrote 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25600 ++wrote 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26624 ++wrote 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27648 ++wrote 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28672 ++wrote 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29696 ++wrote 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30720 ++wrote 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31744 ++wrote 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32768 ++wrote 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33792 ++wrote 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34816 ++wrote 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35840 ++wrote 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36864 ++wrote 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37888 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++=== IO: pattern 128 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 512/512 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968320 ++wrote 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969344 ++wrote 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970368 ++wrote 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971392 ++wrote 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972416 ++wrote 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973440 ++wrote 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974464 ++wrote 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294975488 ++wrote 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976512 ++wrote 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977536 ++wrote 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978560 ++wrote 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979584 ++wrote 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980608 ++wrote 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981632 ++wrote 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982656 ++wrote 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983680 ++wrote 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984704 ++wrote 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985728 ++wrote 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986752 ++wrote 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987776 ++wrote 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988800 ++wrote 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989824 ++wrote 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990848 ++wrote 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991872 ++wrote 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992896 ++wrote 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993920 ++wrote 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994944 ++wrote 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995968 ++wrote 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996992 ++wrote 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998016 ++wrote 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999040 ++wrote 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000064 ++wrote 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001088 ++wrote 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002112 ++wrote 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003136 ++wrote 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004160 ++wrote 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005184 ++wrote 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006208 ++wrote 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007232 ++wrote 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008256 ++wrote 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009280 ++wrote 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010304 ++wrote 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011328 ++wrote 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012352 ++wrote 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013376 ++wrote 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014400 ++wrote 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015424 ++wrote 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016448 ++wrote 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017472 ++wrote 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295018496 ++wrote 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019520 ++wrote 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020544 ++wrote 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021568 ++wrote 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022592 ++wrote 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023616 ++wrote 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024640 ++wrote 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025664 ++wrote 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026688 ++wrote 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027712 ++wrote 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028736 ++wrote 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029760 ++wrote 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030784 ++wrote 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031808 ++wrote 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> wrote 65536/65536 bytes at offset 4295032832 ++=== IO: pattern 128 ++wrote 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating test image with backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + Filling test image + + === IO: pattern 1 +-qemu-io> wrote 512/512 bytes at offset 512 ++wrote 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1536 ++wrote 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2560 ++wrote 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3584 ++wrote 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4608 ++wrote 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5632 ++wrote 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6656 ++wrote 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7680 ++wrote 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8704 ++wrote 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9728 ++wrote 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10752 ++wrote 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11776 ++wrote 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12800 ++wrote 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13824 ++wrote 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14848 ++wrote 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15872 ++wrote 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16896 ++wrote 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17920 ++wrote 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18944 ++wrote 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19968 ++wrote 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20992 ++wrote 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22016 ++wrote 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23040 ++wrote 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24064 ++wrote 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25088 ++wrote 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26112 ++wrote 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27136 ++wrote 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28160 ++wrote 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29184 ++wrote 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30208 ++wrote 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31232 ++wrote 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32256 ++wrote 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33280 ++wrote 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34304 ++wrote 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35328 ++wrote 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36352 ++wrote 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37376 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 512/512 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968832 ++wrote 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969856 ++wrote 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970880 ++wrote 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971904 ++wrote 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972928 ++wrote 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973952 ++wrote 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974976 ++wrote 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976000 ++wrote 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977024 ++wrote 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978048 ++wrote 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979072 ++wrote 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980096 ++wrote 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981120 ++wrote 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982144 ++wrote 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983168 ++wrote 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984192 ++wrote 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985216 ++wrote 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986240 ++wrote 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987264 ++wrote 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988288 ++wrote 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989312 ++wrote 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990336 ++wrote 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991360 ++wrote 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992384 ++wrote 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993408 ++wrote 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994432 ++wrote 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995456 ++wrote 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996480 ++wrote 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294997504 ++wrote 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998528 ++wrote 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999552 ++wrote 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000576 ++wrote 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001600 ++wrote 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002624 ++wrote 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003648 ++wrote 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004672 ++wrote 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005696 ++wrote 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006720 ++wrote 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007744 ++wrote 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008768 ++wrote 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009792 ++wrote 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010816 ++wrote 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011840 ++wrote 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012864 ++wrote 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013888 ++wrote 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014912 ++wrote 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015936 ++wrote 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016960 ++wrote 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017984 ++wrote 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019008 ++wrote 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020032 ++wrote 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021056 ++wrote 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022080 ++wrote 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023104 ++wrote 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024128 ++wrote 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025152 ++wrote 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026176 ++wrote 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027200 ++wrote 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028224 ++wrote 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029248 ++wrote 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030272 ++wrote 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031296 ++wrote 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032320 ++wrote 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 4295098368 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Reading + + === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 0 ++read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1024 ++read 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2048 ++read 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3072 ++read 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4096 ++read 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5120 ++read 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6144 ++read 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7168 ++read 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8192 ++read 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9216 ++read 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10240 ++read 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11264 ++read 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12288 ++read 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13312 ++read 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14336 ++read 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15360 ++read 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16384 ++read 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17408 ++read 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18432 ++read 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19456 ++read 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20480 ++read 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 21504 ++read 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22528 ++read 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23552 ++read 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24576 ++read 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25600 ++read 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26624 ++read 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27648 ++read 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28672 ++read 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29696 ++read 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30720 ++read 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31744 ++read 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32768 ++read 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33792 ++read 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34816 ++read 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35840 ++read 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36864 ++read 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37888 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 512/512 bytes at offset 512 ++=== IO: pattern 1 ++read 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1536 ++read 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2560 ++read 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3584 ++read 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4608 ++read 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5632 ++read 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6656 ++read 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7680 ++read 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8704 ++read 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9728 ++read 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10752 ++read 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11776 ++read 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12800 ++read 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13824 ++read 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14848 ++read 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15872 ++read 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16896 ++read 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17920 ++read 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18944 ++read 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19968 ++read 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20992 ++read 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22016 ++read 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23040 ++read 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24064 ++read 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25088 ++read 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26112 ++read 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27136 ++read 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28160 ++read 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29184 ++read 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30208 ++read 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31232 ++read 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32256 ++read 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33280 ++read 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34304 ++read 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35328 ++read 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36352 ++read 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37376 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> read 65536/65536 bytes at offset 65536 ++=== IO: pattern 128 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 131072 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 327680 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968320 ++read 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969344 ++read 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970368 ++read 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971392 ++read 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972416 ++read 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973440 ++read 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974464 ++read 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294975488 ++read 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976512 ++read 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977536 ++read 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978560 ++read 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979584 ++read 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980608 ++read 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981632 ++read 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982656 ++read 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983680 ++read 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984704 ++read 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985728 ++read 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986752 ++read 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987776 ++read 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988800 ++read 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989824 ++read 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990848 ++read 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991872 ++read 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992896 ++read 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993920 ++read 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994944 ++read 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995968 ++read 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996992 ++read 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998016 ++read 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999040 ++read 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000064 ++read 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001088 ++read 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002112 ++read 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003136 ++read 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004160 ++read 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005184 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 512/512 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968832 ++read 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969856 ++read 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970880 ++read 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971904 ++read 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972928 ++read 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973952 ++read 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974976 ++read 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976000 ++read 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977024 ++read 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978048 ++read 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979072 ++read 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980096 ++read 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981120 ++read 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982144 ++read 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983168 ++read 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984192 ++read 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985216 ++read 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986240 ++read 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987264 ++read 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988288 ++read 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989312 ++read 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990336 ++read 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991360 ++read 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992384 ++read 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993408 ++read 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994432 ++read 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995456 ++read 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996480 ++read 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294997504 ++read 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998528 ++read 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999552 ++read 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000576 ++read 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001600 ++read 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002624 ++read 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003648 ++read 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004672 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++=== IO: pattern 128 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/019.out b/tests/qemu-iotests/019.out +index 5f9a5f2..f0c6e63 100644 +--- a/tests/qemu-iotests/019.out ++++ b/tests/qemu-iotests/019.out +@@ -3,1626 +3,1626 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 + Filling base image + + === IO: pattern 42 +-qemu-io> wrote 512/512 bytes at offset 0 ++wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1024 ++wrote 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2048 ++wrote 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3072 ++wrote 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4096 ++wrote 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5120 ++wrote 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6144 ++wrote 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7168 ++wrote 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8192 ++wrote 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9216 ++wrote 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10240 ++wrote 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11264 ++wrote 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12288 ++wrote 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13312 ++wrote 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14336 ++wrote 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15360 ++wrote 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16384 ++wrote 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17408 ++wrote 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18432 ++wrote 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19456 ++wrote 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20480 ++wrote 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 21504 ++wrote 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22528 ++wrote 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23552 ++wrote 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24576 ++wrote 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25600 ++wrote 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26624 ++wrote 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27648 ++wrote 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28672 ++wrote 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29696 ++wrote 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30720 ++wrote 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31744 ++wrote 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32768 ++wrote 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33792 ++wrote 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34816 ++wrote 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35840 ++wrote 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36864 ++wrote 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37888 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> wrote 65536/65536 bytes at offset 1048576 ++=== IO: pattern 42 ++wrote 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> wrote 512/512 bytes at offset 4294967296 ++=== IO: pattern 42 ++wrote 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968320 ++wrote 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969344 ++wrote 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970368 ++wrote 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971392 ++wrote 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972416 ++wrote 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973440 ++wrote 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974464 ++wrote 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294975488 ++wrote 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976512 ++wrote 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977536 ++wrote 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978560 ++wrote 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979584 ++wrote 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980608 ++wrote 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981632 ++wrote 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982656 ++wrote 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983680 ++wrote 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984704 ++wrote 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985728 ++wrote 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986752 ++wrote 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987776 ++wrote 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988800 ++wrote 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989824 ++wrote 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990848 ++wrote 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991872 ++wrote 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992896 ++wrote 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993920 ++wrote 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994944 ++wrote 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995968 ++wrote 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996992 ++wrote 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998016 ++wrote 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999040 ++wrote 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000064 ++wrote 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001088 ++wrote 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002112 ++wrote 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003136 ++wrote 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004160 ++wrote 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005184 ++wrote 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006208 ++wrote 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007232 ++wrote 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008256 ++wrote 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009280 ++wrote 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010304 ++wrote 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011328 ++wrote 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012352 ++wrote 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013376 ++wrote 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014400 ++wrote 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015424 ++wrote 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016448 ++wrote 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017472 ++wrote 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295018496 ++wrote 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019520 ++wrote 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020544 ++wrote 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021568 ++wrote 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022592 ++wrote 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023616 ++wrote 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024640 ++wrote 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025664 ++wrote 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026688 ++wrote 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027712 ++wrote 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028736 ++wrote 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029760 ++wrote 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030784 ++wrote 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031808 ++wrote 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> wrote 65536/65536 bytes at offset 4296015872 ++=== IO: pattern 42 ++wrote 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating test image with backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + Filling test image + + === IO: pattern 43 +-qemu-io> wrote 512/512 bytes at offset 512 ++wrote 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1536 ++wrote 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2560 ++wrote 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3584 ++wrote 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4608 ++wrote 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5632 ++wrote 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6656 ++wrote 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7680 ++wrote 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8704 ++wrote 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9728 ++wrote 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10752 ++wrote 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11776 ++wrote 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12800 ++wrote 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13824 ++wrote 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14848 ++wrote 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15872 ++wrote 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16896 ++wrote 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17920 ++wrote 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18944 ++wrote 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19968 ++wrote 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20992 ++wrote 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22016 ++wrote 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23040 ++wrote 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24064 ++wrote 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25088 ++wrote 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26112 ++wrote 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27136 ++wrote 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28160 ++wrote 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29184 ++wrote 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30208 ++wrote 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31232 ++wrote 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32256 ++wrote 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33280 ++wrote 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34304 ++wrote 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35328 ++wrote 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36352 ++wrote 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37376 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> wrote 65536/65536 bytes at offset 1114112 ++=== IO: pattern 43 ++wrote 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> wrote 512/512 bytes at offset 4294967808 ++=== IO: pattern 43 ++wrote 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968832 ++wrote 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969856 ++wrote 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970880 ++wrote 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971904 ++wrote 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972928 ++wrote 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973952 ++wrote 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974976 ++wrote 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976000 ++wrote 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977024 ++wrote 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978048 ++wrote 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979072 ++wrote 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980096 ++wrote 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981120 ++wrote 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982144 ++wrote 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983168 ++wrote 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984192 ++wrote 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985216 ++wrote 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986240 ++wrote 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987264 ++wrote 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988288 ++wrote 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989312 ++wrote 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990336 ++wrote 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991360 ++wrote 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992384 ++wrote 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993408 ++wrote 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994432 ++wrote 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995456 ++wrote 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996480 ++wrote 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294997504 ++wrote 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998528 ++wrote 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999552 ++wrote 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000576 ++wrote 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001600 ++wrote 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002624 ++wrote 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003648 ++wrote 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004672 ++wrote 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005696 ++wrote 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006720 ++wrote 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007744 ++wrote 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008768 ++wrote 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009792 ++wrote 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010816 ++wrote 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011840 ++wrote 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012864 ++wrote 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013888 ++wrote 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014912 ++wrote 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015936 ++wrote 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016960 ++wrote 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017984 ++wrote 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019008 ++wrote 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020032 ++wrote 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021056 ++wrote 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022080 ++wrote 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023104 ++wrote 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024128 ++wrote 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025152 ++wrote 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026176 ++wrote 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027200 ++wrote 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028224 ++wrote 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029248 ++wrote 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030272 ++wrote 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031296 ++wrote 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032320 ++wrote 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> wrote 65536/65536 bytes at offset 4296081408 ++=== IO: pattern 43 ++wrote 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + + Testing conversion with -B TEST_DIR/t.IMGFMT.base + + Checking if backing clusters are allocated when they shouldn't + +-qemu-io> 0/128 sectors allocated at offset 1 MiB +-qemu-io> qemu-io> 0/128 sectors allocated at offset 4.001 GiB +-qemu-io> Reading ++0/128 sectors allocated at offset 1 MiB ++0/128 sectors allocated at offset 4.001 GiB ++Reading + + === IO: pattern 42 +-qemu-io> read 512/512 bytes at offset 0 ++read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1024 ++read 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2048 ++read 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3072 ++read 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4096 ++read 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5120 ++read 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6144 ++read 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7168 ++read 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8192 ++read 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9216 ++read 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10240 ++read 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11264 ++read 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12288 ++read 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13312 ++read 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14336 ++read 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15360 ++read 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16384 ++read 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17408 ++read 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18432 ++read 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19456 ++read 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20480 ++read 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 21504 ++read 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22528 ++read 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23552 ++read 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24576 ++read 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25600 ++read 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26624 ++read 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27648 ++read 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28672 ++read 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29696 ++read 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30720 ++read 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31744 ++read 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32768 ++read 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33792 ++read 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34816 ++read 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35840 ++read 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36864 ++read 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37888 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 512/512 bytes at offset 512 ++=== IO: pattern 43 ++read 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1536 ++read 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2560 ++read 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3584 ++read 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4608 ++read 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5632 ++read 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6656 ++read 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7680 ++read 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8704 ++read 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9728 ++read 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10752 ++read 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11776 ++read 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12800 ++read 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13824 ++read 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14848 ++read 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15872 ++read 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16896 ++read 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17920 ++read 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18944 ++read 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19968 ++read 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20992 ++read 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22016 ++read 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23040 ++read 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24064 ++read 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25088 ++read 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26112 ++read 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27136 ++read 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28160 ++read 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29184 ++read 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30208 ++read 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31232 ++read 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32256 ++read 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33280 ++read 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34304 ++read 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35328 ++read 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36352 ++read 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37376 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> read 65536/65536 bytes at offset 1048576 ++=== IO: pattern 42 ++read 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 65536/65536 bytes at offset 1114112 ++=== IO: pattern 43 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 1310720 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> read 512/512 bytes at offset 4294967296 ++=== IO: pattern 42 ++read 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968320 ++read 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969344 ++read 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970368 ++read 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971392 ++read 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972416 ++read 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973440 ++read 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974464 ++read 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294975488 ++read 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976512 ++read 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977536 ++read 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978560 ++read 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979584 ++read 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980608 ++read 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981632 ++read 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982656 ++read 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983680 ++read 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984704 ++read 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985728 ++read 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986752 ++read 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987776 ++read 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988800 ++read 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989824 ++read 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990848 ++read 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991872 ++read 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992896 ++read 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993920 ++read 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994944 ++read 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995968 ++read 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996992 ++read 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998016 ++read 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999040 ++read 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000064 ++read 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001088 ++read 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002112 ++read 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003136 ++read 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004160 ++read 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005184 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 512/512 bytes at offset 4294967808 ++=== IO: pattern 43 ++read 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968832 ++read 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969856 ++read 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970880 ++read 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971904 ++read 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972928 ++read 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973952 ++read 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974976 ++read 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976000 ++read 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977024 ++read 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978048 ++read 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979072 ++read 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980096 ++read 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981120 ++read 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982144 ++read 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983168 ++read 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984192 ++read 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985216 ++read 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986240 ++read 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987264 ++read 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988288 ++read 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989312 ++read 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990336 ++read 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991360 ++read 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992384 ++read 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993408 ++read 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994432 ++read 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995456 ++read 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996480 ++read 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294997504 ++read 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998528 ++read 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999552 ++read 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000576 ++read 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001600 ++read 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002624 ++read 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003648 ++read 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004672 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> read 65536/65536 bytes at offset 4296015872 ++=== IO: pattern 42 ++read 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++=== IO: pattern 43 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + + Testing conversion with -o backing_file=TEST_DIR/t.IMGFMT.base + + Checking if backing clusters are allocated when they shouldn't + +-qemu-io> 0/128 sectors allocated at offset 1 MiB +-qemu-io> qemu-io> 0/128 sectors allocated at offset 4.001 GiB +-qemu-io> Reading ++0/128 sectors allocated at offset 1 MiB ++0/128 sectors allocated at offset 4.001 GiB ++Reading + + === IO: pattern 42 +-qemu-io> read 512/512 bytes at offset 0 ++read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1024 ++read 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2048 ++read 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3072 ++read 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4096 ++read 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5120 ++read 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6144 ++read 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7168 ++read 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8192 ++read 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9216 ++read 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10240 ++read 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11264 ++read 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12288 ++read 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13312 ++read 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14336 ++read 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15360 ++read 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16384 ++read 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17408 ++read 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18432 ++read 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19456 ++read 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20480 ++read 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 21504 ++read 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22528 ++read 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23552 ++read 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24576 ++read 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25600 ++read 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26624 ++read 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27648 ++read 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28672 ++read 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29696 ++read 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30720 ++read 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31744 ++read 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32768 ++read 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33792 ++read 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34816 ++read 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35840 ++read 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36864 ++read 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37888 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 512/512 bytes at offset 512 ++=== IO: pattern 43 ++read 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1536 ++read 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2560 ++read 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3584 ++read 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4608 ++read 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5632 ++read 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6656 ++read 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7680 ++read 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8704 ++read 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9728 ++read 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10752 ++read 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11776 ++read 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12800 ++read 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13824 ++read 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14848 ++read 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15872 ++read 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16896 ++read 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17920 ++read 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18944 ++read 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19968 ++read 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20992 ++read 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22016 ++read 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23040 ++read 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24064 ++read 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25088 ++read 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26112 ++read 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27136 ++read 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28160 ++read 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29184 ++read 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30208 ++read 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31232 ++read 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32256 ++read 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33280 ++read 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34304 ++read 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35328 ++read 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36352 ++read 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37376 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> read 65536/65536 bytes at offset 1048576 ++=== IO: pattern 42 ++read 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 65536/65536 bytes at offset 1114112 ++=== IO: pattern 43 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 1310720 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> read 512/512 bytes at offset 4294967296 ++=== IO: pattern 42 ++read 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968320 ++read 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969344 ++read 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970368 ++read 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971392 ++read 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972416 ++read 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973440 ++read 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974464 ++read 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294975488 ++read 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976512 ++read 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977536 ++read 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978560 ++read 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979584 ++read 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980608 ++read 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981632 ++read 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982656 ++read 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983680 ++read 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984704 ++read 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985728 ++read 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986752 ++read 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987776 ++read 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988800 ++read 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989824 ++read 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990848 ++read 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991872 ++read 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992896 ++read 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993920 ++read 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994944 ++read 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995968 ++read 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996992 ++read 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998016 ++read 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999040 ++read 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000064 ++read 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001088 ++read 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002112 ++read 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003136 ++read 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004160 ++read 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005184 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 512/512 bytes at offset 4294967808 ++=== IO: pattern 43 ++read 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968832 ++read 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969856 ++read 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970880 ++read 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971904 ++read 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972928 ++read 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973952 ++read 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974976 ++read 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976000 ++read 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977024 ++read 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978048 ++read 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979072 ++read 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980096 ++read 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981120 ++read 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982144 ++read 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983168 ++read 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984192 ++read 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985216 ++read 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986240 ++read 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987264 ++read 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988288 ++read 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989312 ++read 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990336 ++read 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991360 ++read 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992384 ++read 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993408 ++read 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994432 ++read 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995456 ++read 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996480 ++read 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294997504 ++read 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998528 ++read 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999552 ++read 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000576 ++read 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001600 ++read 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002624 ++read 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003648 ++read 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004672 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 42 +-qemu-io> read 65536/65536 bytes at offset 4296015872 ++=== IO: pattern 42 ++read 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 43 +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++=== IO: pattern 43 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/020.out b/tests/qemu-iotests/020.out +index 4ba56bd..fc9a63c 100644 +--- a/tests/qemu-iotests/020.out ++++ b/tests/qemu-iotests/020.out +@@ -3,1076 +3,1076 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 + Filling base image + + === IO: pattern 0 +-qemu-io> wrote 512/512 bytes at offset 0 ++wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1024 ++wrote 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2048 ++wrote 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3072 ++wrote 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4096 ++wrote 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5120 ++wrote 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6144 ++wrote 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7168 ++wrote 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8192 ++wrote 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9216 ++wrote 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10240 ++wrote 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11264 ++wrote 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12288 ++wrote 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13312 ++wrote 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14336 ++wrote 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15360 ++wrote 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16384 ++wrote 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17408 ++wrote 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18432 ++wrote 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19456 ++wrote 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20480 ++wrote 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 21504 ++wrote 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22528 ++wrote 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23552 ++wrote 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24576 ++wrote 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25600 ++wrote 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26624 ++wrote 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27648 ++wrote 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28672 ++wrote 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29696 ++wrote 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30720 ++wrote 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31744 ++wrote 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32768 ++wrote 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33792 ++wrote 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34816 ++wrote 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35840 ++wrote 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36864 ++wrote 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37888 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++=== IO: pattern 128 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 512/512 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968320 ++wrote 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969344 ++wrote 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970368 ++wrote 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971392 ++wrote 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972416 ++wrote 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973440 ++wrote 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974464 ++wrote 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294975488 ++wrote 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976512 ++wrote 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977536 ++wrote 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978560 ++wrote 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979584 ++wrote 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980608 ++wrote 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981632 ++wrote 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982656 ++wrote 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983680 ++wrote 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984704 ++wrote 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985728 ++wrote 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986752 ++wrote 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987776 ++wrote 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988800 ++wrote 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989824 ++wrote 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990848 ++wrote 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991872 ++wrote 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992896 ++wrote 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993920 ++wrote 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994944 ++wrote 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995968 ++wrote 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996992 ++wrote 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998016 ++wrote 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999040 ++wrote 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000064 ++wrote 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001088 ++wrote 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002112 ++wrote 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003136 ++wrote 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004160 ++wrote 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005184 ++wrote 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006208 ++wrote 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007232 ++wrote 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008256 ++wrote 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009280 ++wrote 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010304 ++wrote 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011328 ++wrote 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012352 ++wrote 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013376 ++wrote 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014400 ++wrote 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015424 ++wrote 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016448 ++wrote 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017472 ++wrote 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295018496 ++wrote 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019520 ++wrote 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020544 ++wrote 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021568 ++wrote 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022592 ++wrote 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023616 ++wrote 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024640 ++wrote 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025664 ++wrote 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026688 ++wrote 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027712 ++wrote 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028736 ++wrote 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029760 ++wrote 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030784 ++wrote 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031808 ++wrote 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> wrote 65536/65536 bytes at offset 4295032832 ++=== IO: pattern 128 ++wrote 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating test image with backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + Filling test image + + === IO: pattern 1 +-qemu-io> wrote 512/512 bytes at offset 512 ++wrote 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1536 ++wrote 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2560 ++wrote 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3584 ++wrote 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4608 ++wrote 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5632 ++wrote 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6656 ++wrote 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7680 ++wrote 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8704 ++wrote 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9728 ++wrote 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10752 ++wrote 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11776 ++wrote 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12800 ++wrote 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13824 ++wrote 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14848 ++wrote 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15872 ++wrote 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16896 ++wrote 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17920 ++wrote 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18944 ++wrote 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19968 ++wrote 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20992 ++wrote 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22016 ++wrote 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23040 ++wrote 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24064 ++wrote 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25088 ++wrote 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26112 ++wrote 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27136 ++wrote 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28160 ++wrote 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29184 ++wrote 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30208 ++wrote 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31232 ++wrote 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32256 ++wrote 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33280 ++wrote 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34304 ++wrote 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35328 ++wrote 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36352 ++wrote 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37376 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 512/512 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294968832 ++wrote 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294969856 ++wrote 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294970880 ++wrote 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294971904 ++wrote 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294972928 ++wrote 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294973952 ++wrote 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294974976 ++wrote 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294976000 ++wrote 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294977024 ++wrote 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294978048 ++wrote 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294979072 ++wrote 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294980096 ++wrote 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294981120 ++wrote 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294982144 ++wrote 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294983168 ++wrote 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294984192 ++wrote 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294985216 ++wrote 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294986240 ++wrote 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294987264 ++wrote 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294988288 ++wrote 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294989312 ++wrote 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294990336 ++wrote 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294991360 ++wrote 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294992384 ++wrote 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294993408 ++wrote 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294994432 ++wrote 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294995456 ++wrote 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294996480 ++wrote 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294997504 ++wrote 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294998528 ++wrote 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4294999552 ++wrote 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295000576 ++wrote 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295001600 ++wrote 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295002624 ++wrote 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295003648 ++wrote 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295004672 ++wrote 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005696 ++wrote 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006720 ++wrote 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007744 ++wrote 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008768 ++wrote 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009792 ++wrote 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010816 ++wrote 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011840 ++wrote 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012864 ++wrote 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013888 ++wrote 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014912 ++wrote 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015936 ++wrote 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016960 ++wrote 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017984 ++wrote 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019008 ++wrote 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020032 ++wrote 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021056 ++wrote 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022080 ++wrote 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023104 ++wrote 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024128 ++wrote 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025152 ++wrote 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026176 ++wrote 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027200 ++wrote 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028224 ++wrote 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029248 ++wrote 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030272 ++wrote 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031296 ++wrote 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032320 ++wrote 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 4295098368 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Image committed. + Reading from the backing file + + === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 0 ++read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1024 ++read 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2048 ++read 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3072 ++read 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4096 ++read 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5120 ++read 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6144 ++read 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7168 ++read 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8192 ++read 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9216 ++read 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10240 ++read 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11264 ++read 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12288 ++read 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13312 ++read 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14336 ++read 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15360 ++read 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16384 ++read 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17408 ++read 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18432 ++read 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19456 ++read 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20480 ++read 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 21504 ++read 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22528 ++read 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23552 ++read 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24576 ++read 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25600 ++read 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26624 ++read 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27648 ++read 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28672 ++read 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29696 ++read 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30720 ++read 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31744 ++read 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32768 ++read 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33792 ++read 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34816 ++read 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35840 ++read 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36864 ++read 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37888 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 512/512 bytes at offset 512 ++=== IO: pattern 1 ++read 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 1536 ++read 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2560 ++read 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3584 ++read 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4608 ++read 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5632 ++read 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 6656 ++read 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 7680 ++read 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8704 ++read 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 9728 ++read 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 10752 ++read 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11776 ++read 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 12800 ++read 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 13824 ++read 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 14848 ++read 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 15872 ++read 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 16896 ++read 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 17920 ++read 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 18944 ++read 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 19968 ++read 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 20992 ++read 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22016 ++read 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23040 ++read 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24064 ++read 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25088 ++read 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26112 ++read 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 27136 ++read 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 28160 ++read 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 29184 ++read 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 30208 ++read 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 31232 ++read 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32256 ++read 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33280 ++read 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 34304 ++read 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 35328 ++read 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 36352 ++read 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 37376 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> read 65536/65536 bytes at offset 65536 ++=== IO: pattern 128 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 131072 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 327680 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 512/512 bytes at offset 4294967296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968320 ++read 512/512 bytes at offset 4294968320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969344 ++read 512/512 bytes at offset 4294969344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970368 ++read 512/512 bytes at offset 4294970368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971392 ++read 512/512 bytes at offset 4294971392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972416 ++read 512/512 bytes at offset 4294972416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973440 ++read 512/512 bytes at offset 4294973440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974464 ++read 512/512 bytes at offset 4294974464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294975488 ++read 512/512 bytes at offset 4294975488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976512 ++read 512/512 bytes at offset 4294976512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977536 ++read 512/512 bytes at offset 4294977536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978560 ++read 512/512 bytes at offset 4294978560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979584 ++read 512/512 bytes at offset 4294979584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980608 ++read 512/512 bytes at offset 4294980608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981632 ++read 512/512 bytes at offset 4294981632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982656 ++read 512/512 bytes at offset 4294982656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983680 ++read 512/512 bytes at offset 4294983680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984704 ++read 512/512 bytes at offset 4294984704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985728 ++read 512/512 bytes at offset 4294985728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986752 ++read 512/512 bytes at offset 4294986752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987776 ++read 512/512 bytes at offset 4294987776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988800 ++read 512/512 bytes at offset 4294988800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989824 ++read 512/512 bytes at offset 4294989824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990848 ++read 512/512 bytes at offset 4294990848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991872 ++read 512/512 bytes at offset 4294991872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992896 ++read 512/512 bytes at offset 4294992896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993920 ++read 512/512 bytes at offset 4294993920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994944 ++read 512/512 bytes at offset 4294994944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995968 ++read 512/512 bytes at offset 4294995968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996992 ++read 512/512 bytes at offset 4294996992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998016 ++read 512/512 bytes at offset 4294998016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999040 ++read 512/512 bytes at offset 4294999040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000064 ++read 512/512 bytes at offset 4295000064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001088 ++read 512/512 bytes at offset 4295001088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002112 ++read 512/512 bytes at offset 4295002112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003136 ++read 512/512 bytes at offset 4295003136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004160 ++read 512/512 bytes at offset 4295004160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005184 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 512/512 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 512/512 bytes at offset 4294967808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294968832 ++read 512/512 bytes at offset 4294968832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294969856 ++read 512/512 bytes at offset 4294969856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294970880 ++read 512/512 bytes at offset 4294970880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294971904 ++read 512/512 bytes at offset 4294971904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294972928 ++read 512/512 bytes at offset 4294972928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294973952 ++read 512/512 bytes at offset 4294973952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294974976 ++read 512/512 bytes at offset 4294974976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294976000 ++read 512/512 bytes at offset 4294976000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294977024 ++read 512/512 bytes at offset 4294977024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294978048 ++read 512/512 bytes at offset 4294978048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294979072 ++read 512/512 bytes at offset 4294979072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294980096 ++read 512/512 bytes at offset 4294980096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294981120 ++read 512/512 bytes at offset 4294981120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294982144 ++read 512/512 bytes at offset 4294982144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294983168 ++read 512/512 bytes at offset 4294983168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294984192 ++read 512/512 bytes at offset 4294984192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294985216 ++read 512/512 bytes at offset 4294985216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294986240 ++read 512/512 bytes at offset 4294986240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294987264 ++read 512/512 bytes at offset 4294987264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294988288 ++read 512/512 bytes at offset 4294988288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294989312 ++read 512/512 bytes at offset 4294989312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294990336 ++read 512/512 bytes at offset 4294990336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294991360 ++read 512/512 bytes at offset 4294991360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294992384 ++read 512/512 bytes at offset 4294992384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294993408 ++read 512/512 bytes at offset 4294993408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294994432 ++read 512/512 bytes at offset 4294994432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294995456 ++read 512/512 bytes at offset 4294995456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294996480 ++read 512/512 bytes at offset 4294996480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294997504 ++read 512/512 bytes at offset 4294997504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294998528 ++read 512/512 bytes at offset 4294998528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4294999552 ++read 512/512 bytes at offset 4294999552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295000576 ++read 512/512 bytes at offset 4295000576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295001600 ++read 512/512 bytes at offset 4295001600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295002624 ++read 512/512 bytes at offset 4295002624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295003648 ++read 512/512 bytes at offset 4295003648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295004672 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 128 +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++=== IO: pattern 128 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/022.out b/tests/qemu-iotests/022.out +index aed86d5..5a729e0 100644 +--- a/tests/qemu-iotests/022.out ++++ b/tests/qemu-iotests/022.out +@@ -4,8798 +4,8798 @@ Testing empty image + + At offset 10485760: + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 10485760 ++wrote 4096/4096 bytes at offset 10485760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10489856 ++wrote 4096/4096 bytes at offset 10489856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10493952 ++wrote 4096/4096 bytes at offset 10493952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10498048 ++wrote 4096/4096 bytes at offset 10498048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10502144 ++wrote 4096/4096 bytes at offset 10502144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10506240 ++wrote 4096/4096 bytes at offset 10506240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10510336 ++wrote 4096/4096 bytes at offset 10510336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10514432 ++wrote 4096/4096 bytes at offset 10514432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10518528 ++wrote 4096/4096 bytes at offset 10518528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10522624 ++wrote 4096/4096 bytes at offset 10522624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10526720 ++wrote 4096/4096 bytes at offset 10526720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10530816 ++wrote 4096/4096 bytes at offset 10530816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10534912 ++wrote 4096/4096 bytes at offset 10534912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10539008 ++wrote 4096/4096 bytes at offset 10539008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10543104 ++wrote 4096/4096 bytes at offset 10543104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10547200 ++wrote 4096/4096 bytes at offset 10547200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10551296 ++wrote 4096/4096 bytes at offset 10551296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10555392 ++wrote 4096/4096 bytes at offset 10555392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10559488 ++wrote 4096/4096 bytes at offset 10559488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10563584 ++wrote 4096/4096 bytes at offset 10563584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10567680 ++wrote 4096/4096 bytes at offset 10567680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10571776 ++wrote 4096/4096 bytes at offset 10571776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10575872 ++wrote 4096/4096 bytes at offset 10575872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10579968 ++wrote 4096/4096 bytes at offset 10579968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10584064 ++wrote 4096/4096 bytes at offset 10584064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10588160 ++wrote 4096/4096 bytes at offset 10588160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10592256 ++wrote 4096/4096 bytes at offset 10592256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10596352 ++wrote 4096/4096 bytes at offset 10596352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10600448 ++wrote 4096/4096 bytes at offset 10600448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10604544 ++wrote 4096/4096 bytes at offset 10604544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10608640 ++wrote 4096/4096 bytes at offset 10608640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10612736 ++wrote 4096/4096 bytes at offset 10612736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10616832 ++wrote 4096/4096 bytes at offset 10616832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10620928 ++wrote 4096/4096 bytes at offset 10620928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10625024 ++wrote 4096/4096 bytes at offset 10625024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10629120 ++wrote 4096/4096 bytes at offset 10629120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10633216 ++wrote 4096/4096 bytes at offset 10633216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10637312 ++wrote 4096/4096 bytes at offset 10637312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10641408 ++wrote 4096/4096 bytes at offset 10641408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10645504 ++wrote 4096/4096 bytes at offset 10645504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10649600 ++wrote 4096/4096 bytes at offset 10649600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10653696 ++wrote 4096/4096 bytes at offset 10653696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10657792 ++wrote 4096/4096 bytes at offset 10657792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10661888 ++wrote 4096/4096 bytes at offset 10661888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10665984 ++wrote 4096/4096 bytes at offset 10665984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10670080 ++wrote 4096/4096 bytes at offset 10670080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10674176 ++wrote 4096/4096 bytes at offset 10674176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10678272 ++wrote 4096/4096 bytes at offset 10678272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10682368 ++wrote 4096/4096 bytes at offset 10682368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10686464 ++wrote 4096/4096 bytes at offset 10686464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10690560 ++wrote 4096/4096 bytes at offset 10690560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10694656 ++wrote 4096/4096 bytes at offset 10694656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10698752 ++wrote 4096/4096 bytes at offset 10698752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10702848 ++wrote 4096/4096 bytes at offset 10702848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10706944 ++wrote 4096/4096 bytes at offset 10706944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10711040 ++wrote 4096/4096 bytes at offset 10711040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10715136 ++wrote 4096/4096 bytes at offset 10715136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10719232 ++wrote 4096/4096 bytes at offset 10719232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10723328 ++wrote 4096/4096 bytes at offset 10723328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10727424 ++wrote 4096/4096 bytes at offset 10727424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10731520 ++wrote 4096/4096 bytes at offset 10731520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10735616 ++wrote 4096/4096 bytes at offset 10735616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10739712 ++wrote 4096/4096 bytes at offset 10739712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10743808 ++wrote 4096/4096 bytes at offset 10743808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10747904 ++wrote 4096/4096 bytes at offset 10747904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10752000 ++wrote 4096/4096 bytes at offset 10752000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10756096 ++wrote 4096/4096 bytes at offset 10756096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10760192 ++wrote 4096/4096 bytes at offset 10760192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10764288 ++wrote 4096/4096 bytes at offset 10764288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10768384 ++wrote 4096/4096 bytes at offset 10768384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10772480 ++wrote 4096/4096 bytes at offset 10772480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10776576 ++wrote 4096/4096 bytes at offset 10776576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10780672 ++wrote 4096/4096 bytes at offset 10780672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10784768 ++wrote 4096/4096 bytes at offset 10784768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10788864 ++wrote 4096/4096 bytes at offset 10788864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10792960 ++wrote 4096/4096 bytes at offset 10792960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10797056 ++wrote 4096/4096 bytes at offset 10797056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10801152 ++wrote 4096/4096 bytes at offset 10801152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10805248 ++wrote 4096/4096 bytes at offset 10805248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10809344 ++wrote 4096/4096 bytes at offset 10809344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10813440 ++wrote 4096/4096 bytes at offset 10813440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10817536 ++wrote 4096/4096 bytes at offset 10817536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10821632 ++wrote 4096/4096 bytes at offset 10821632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10825728 ++wrote 4096/4096 bytes at offset 10825728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10829824 ++wrote 4096/4096 bytes at offset 10829824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10833920 ++wrote 4096/4096 bytes at offset 10833920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10838016 ++wrote 4096/4096 bytes at offset 10838016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10842112 ++wrote 4096/4096 bytes at offset 10842112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10846208 ++wrote 4096/4096 bytes at offset 10846208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10850304 ++wrote 4096/4096 bytes at offset 10850304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10854400 ++wrote 4096/4096 bytes at offset 10854400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10858496 ++wrote 4096/4096 bytes at offset 10858496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10862592 ++wrote 4096/4096 bytes at offset 10862592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10866688 ++wrote 4096/4096 bytes at offset 10866688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10870784 ++wrote 4096/4096 bytes at offset 10870784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10874880 ++wrote 4096/4096 bytes at offset 10874880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10878976 ++wrote 4096/4096 bytes at offset 10878976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10883072 ++wrote 4096/4096 bytes at offset 10883072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10887168 ++wrote 4096/4096 bytes at offset 10887168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10891264 ++wrote 4096/4096 bytes at offset 10891264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10895360 ++wrote 4096/4096 bytes at offset 10895360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10899456 ++wrote 4096/4096 bytes at offset 10899456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10903552 ++wrote 4096/4096 bytes at offset 10903552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10907648 ++wrote 4096/4096 bytes at offset 10907648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10911744 ++wrote 4096/4096 bytes at offset 10911744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10915840 ++wrote 4096/4096 bytes at offset 10915840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10919936 ++wrote 4096/4096 bytes at offset 10919936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10924032 ++wrote 4096/4096 bytes at offset 10924032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10928128 ++wrote 4096/4096 bytes at offset 10928128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10932224 ++wrote 4096/4096 bytes at offset 10932224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10936320 ++wrote 4096/4096 bytes at offset 10936320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10940416 ++wrote 4096/4096 bytes at offset 10940416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10944512 ++wrote 4096/4096 bytes at offset 10944512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10948608 ++wrote 4096/4096 bytes at offset 10948608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10952704 ++wrote 4096/4096 bytes at offset 10952704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10956800 ++wrote 4096/4096 bytes at offset 10956800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10960896 ++wrote 4096/4096 bytes at offset 10960896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10964992 ++wrote 4096/4096 bytes at offset 10964992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10969088 ++wrote 4096/4096 bytes at offset 10969088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10973184 ++wrote 4096/4096 bytes at offset 10973184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10977280 ++wrote 4096/4096 bytes at offset 10977280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10981376 ++wrote 4096/4096 bytes at offset 10981376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10985472 ++wrote 4096/4096 bytes at offset 10985472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10989568 ++wrote 4096/4096 bytes at offset 10989568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10993664 ++wrote 4096/4096 bytes at offset 10993664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 10997760 ++wrote 4096/4096 bytes at offset 10997760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11001856 ++wrote 4096/4096 bytes at offset 11001856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11005952 ++wrote 4096/4096 bytes at offset 11005952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11010048 ++wrote 4096/4096 bytes at offset 11010048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11014144 ++wrote 4096/4096 bytes at offset 11014144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11018240 ++wrote 4096/4096 bytes at offset 11018240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11022336 ++wrote 4096/4096 bytes at offset 11022336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11026432 ++wrote 4096/4096 bytes at offset 11026432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11030528 ++wrote 4096/4096 bytes at offset 11030528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11034624 ++wrote 4096/4096 bytes at offset 11034624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11038720 ++wrote 4096/4096 bytes at offset 11038720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11042816 ++wrote 4096/4096 bytes at offset 11042816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11046912 ++wrote 4096/4096 bytes at offset 11046912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11051008 ++wrote 4096/4096 bytes at offset 11051008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11055104 ++wrote 4096/4096 bytes at offset 11055104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11059200 ++wrote 4096/4096 bytes at offset 11059200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11063296 ++wrote 4096/4096 bytes at offset 11063296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11067392 ++wrote 4096/4096 bytes at offset 11067392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11071488 ++wrote 4096/4096 bytes at offset 11071488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11075584 ++wrote 4096/4096 bytes at offset 11075584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11079680 ++wrote 4096/4096 bytes at offset 11079680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11083776 ++wrote 4096/4096 bytes at offset 11083776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11087872 ++wrote 4096/4096 bytes at offset 11087872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11091968 ++wrote 4096/4096 bytes at offset 11091968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11096064 ++wrote 4096/4096 bytes at offset 11096064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11100160 ++wrote 4096/4096 bytes at offset 11100160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11104256 ++wrote 4096/4096 bytes at offset 11104256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11108352 ++wrote 4096/4096 bytes at offset 11108352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11112448 ++wrote 4096/4096 bytes at offset 11112448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11116544 ++wrote 4096/4096 bytes at offset 11116544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11120640 ++wrote 4096/4096 bytes at offset 11120640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11124736 ++wrote 4096/4096 bytes at offset 11124736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11128832 ++wrote 4096/4096 bytes at offset 11128832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11132928 ++wrote 4096/4096 bytes at offset 11132928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11137024 ++wrote 4096/4096 bytes at offset 11137024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11141120 ++wrote 4096/4096 bytes at offset 11141120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11145216 ++wrote 4096/4096 bytes at offset 11145216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11149312 ++wrote 4096/4096 bytes at offset 11149312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11153408 ++wrote 4096/4096 bytes at offset 11153408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11157504 ++wrote 4096/4096 bytes at offset 11157504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11161600 ++wrote 4096/4096 bytes at offset 11161600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11165696 ++wrote 4096/4096 bytes at offset 11165696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11169792 ++wrote 4096/4096 bytes at offset 11169792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11173888 ++wrote 4096/4096 bytes at offset 11173888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11177984 ++wrote 4096/4096 bytes at offset 11177984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11182080 ++wrote 4096/4096 bytes at offset 11182080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11186176 ++wrote 4096/4096 bytes at offset 11186176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11190272 ++wrote 4096/4096 bytes at offset 11190272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11194368 ++wrote 4096/4096 bytes at offset 11194368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11198464 ++wrote 4096/4096 bytes at offset 11198464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11202560 ++wrote 4096/4096 bytes at offset 11202560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11206656 ++wrote 4096/4096 bytes at offset 11206656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11210752 ++wrote 4096/4096 bytes at offset 11210752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11214848 ++wrote 4096/4096 bytes at offset 11214848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11218944 ++wrote 4096/4096 bytes at offset 11218944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11223040 ++wrote 4096/4096 bytes at offset 11223040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11227136 ++wrote 4096/4096 bytes at offset 11227136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11231232 ++wrote 4096/4096 bytes at offset 11231232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11235328 ++wrote 4096/4096 bytes at offset 11235328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11239424 ++wrote 4096/4096 bytes at offset 11239424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11243520 ++wrote 4096/4096 bytes at offset 11243520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11247616 ++wrote 4096/4096 bytes at offset 11247616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11251712 ++wrote 4096/4096 bytes at offset 11251712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11255808 ++wrote 4096/4096 bytes at offset 11255808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11259904 ++wrote 4096/4096 bytes at offset 11259904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11264000 ++wrote 4096/4096 bytes at offset 11264000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11268096 ++wrote 4096/4096 bytes at offset 11268096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11272192 ++wrote 4096/4096 bytes at offset 11272192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11276288 ++wrote 4096/4096 bytes at offset 11276288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11280384 ++wrote 4096/4096 bytes at offset 11280384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11284480 ++wrote 4096/4096 bytes at offset 11284480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11288576 ++wrote 4096/4096 bytes at offset 11288576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11292672 ++wrote 4096/4096 bytes at offset 11292672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11296768 ++wrote 4096/4096 bytes at offset 11296768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11300864 ++wrote 4096/4096 bytes at offset 11300864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11304960 ++wrote 4096/4096 bytes at offset 11304960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11309056 ++wrote 4096/4096 bytes at offset 11309056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11313152 ++wrote 4096/4096 bytes at offset 11313152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11317248 ++wrote 4096/4096 bytes at offset 11317248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11321344 ++wrote 4096/4096 bytes at offset 11321344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11325440 ++wrote 4096/4096 bytes at offset 11325440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11329536 ++wrote 4096/4096 bytes at offset 11329536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11333632 ++wrote 4096/4096 bytes at offset 11333632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11337728 ++wrote 4096/4096 bytes at offset 11337728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11341824 ++wrote 4096/4096 bytes at offset 11341824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11345920 ++wrote 4096/4096 bytes at offset 11345920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11350016 ++wrote 4096/4096 bytes at offset 11350016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11354112 ++wrote 4096/4096 bytes at offset 11354112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11358208 ++wrote 4096/4096 bytes at offset 11358208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11362304 ++wrote 4096/4096 bytes at offset 11362304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11366400 ++wrote 4096/4096 bytes at offset 11366400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11370496 ++wrote 4096/4096 bytes at offset 11370496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11374592 ++wrote 4096/4096 bytes at offset 11374592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11378688 ++wrote 4096/4096 bytes at offset 11378688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11382784 ++wrote 4096/4096 bytes at offset 11382784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11386880 ++wrote 4096/4096 bytes at offset 11386880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11390976 ++wrote 4096/4096 bytes at offset 11390976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11395072 ++wrote 4096/4096 bytes at offset 11395072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11399168 ++wrote 4096/4096 bytes at offset 11399168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11403264 ++wrote 4096/4096 bytes at offset 11403264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11407360 ++wrote 4096/4096 bytes at offset 11407360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11411456 ++wrote 4096/4096 bytes at offset 11411456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11415552 ++wrote 4096/4096 bytes at offset 11415552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11419648 ++wrote 4096/4096 bytes at offset 11419648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11423744 ++wrote 4096/4096 bytes at offset 11423744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11427840 ++wrote 4096/4096 bytes at offset 11427840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11431936 ++wrote 4096/4096 bytes at offset 11431936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11436032 ++wrote 4096/4096 bytes at offset 11436032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11440128 ++wrote 4096/4096 bytes at offset 11440128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11444224 ++wrote 4096/4096 bytes at offset 11444224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11448320 ++wrote 4096/4096 bytes at offset 11448320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11452416 ++wrote 4096/4096 bytes at offset 11452416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11456512 ++wrote 4096/4096 bytes at offset 11456512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11460608 ++wrote 4096/4096 bytes at offset 11460608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11464704 ++wrote 4096/4096 bytes at offset 11464704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11468800 ++wrote 4096/4096 bytes at offset 11468800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11472896 ++wrote 4096/4096 bytes at offset 11472896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11476992 ++wrote 4096/4096 bytes at offset 11476992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11481088 ++wrote 4096/4096 bytes at offset 11481088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11485184 ++wrote 4096/4096 bytes at offset 11485184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11489280 ++wrote 4096/4096 bytes at offset 11489280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11493376 ++wrote 4096/4096 bytes at offset 11493376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11497472 ++wrote 4096/4096 bytes at offset 11497472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11501568 ++wrote 4096/4096 bytes at offset 11501568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11505664 ++wrote 4096/4096 bytes at offset 11505664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11509760 ++wrote 4096/4096 bytes at offset 11509760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11513856 ++wrote 4096/4096 bytes at offset 11513856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11517952 ++wrote 4096/4096 bytes at offset 11517952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11522048 ++wrote 4096/4096 bytes at offset 11522048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11526144 ++wrote 4096/4096 bytes at offset 11526144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 11530240 ++wrote 4096/4096 bytes at offset 11530240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 11536384 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 11536384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11540480 ++wrote 2048/2048 bytes at offset 11540480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11544576 ++wrote 2048/2048 bytes at offset 11544576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11548672 ++wrote 2048/2048 bytes at offset 11548672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11552768 ++wrote 2048/2048 bytes at offset 11552768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11556864 ++wrote 2048/2048 bytes at offset 11556864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11560960 ++wrote 2048/2048 bytes at offset 11560960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11565056 ++wrote 2048/2048 bytes at offset 11565056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11569152 ++wrote 2048/2048 bytes at offset 11569152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11573248 ++wrote 2048/2048 bytes at offset 11573248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11577344 ++wrote 2048/2048 bytes at offset 11577344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11581440 ++wrote 2048/2048 bytes at offset 11581440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11585536 ++wrote 2048/2048 bytes at offset 11585536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11589632 ++wrote 2048/2048 bytes at offset 11589632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11593728 ++wrote 2048/2048 bytes at offset 11593728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11597824 ++wrote 2048/2048 bytes at offset 11597824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11601920 ++wrote 2048/2048 bytes at offset 11601920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11606016 ++wrote 2048/2048 bytes at offset 11606016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11610112 ++wrote 2048/2048 bytes at offset 11610112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11614208 ++wrote 2048/2048 bytes at offset 11614208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11618304 ++wrote 2048/2048 bytes at offset 11618304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11622400 ++wrote 2048/2048 bytes at offset 11622400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11626496 ++wrote 2048/2048 bytes at offset 11626496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11630592 ++wrote 2048/2048 bytes at offset 11630592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11634688 ++wrote 2048/2048 bytes at offset 11634688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11638784 ++wrote 2048/2048 bytes at offset 11638784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11642880 ++wrote 2048/2048 bytes at offset 11642880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11646976 ++wrote 2048/2048 bytes at offset 11646976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11651072 ++wrote 2048/2048 bytes at offset 11651072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11655168 ++wrote 2048/2048 bytes at offset 11655168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11659264 ++wrote 2048/2048 bytes at offset 11659264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11663360 ++wrote 2048/2048 bytes at offset 11663360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11667456 ++wrote 2048/2048 bytes at offset 11667456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11671552 ++wrote 2048/2048 bytes at offset 11671552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11675648 ++wrote 2048/2048 bytes at offset 11675648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11679744 ++wrote 2048/2048 bytes at offset 11679744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11683840 ++wrote 2048/2048 bytes at offset 11683840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11687936 ++wrote 2048/2048 bytes at offset 11687936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11692032 ++wrote 2048/2048 bytes at offset 11692032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11696128 ++wrote 2048/2048 bytes at offset 11696128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11700224 ++wrote 2048/2048 bytes at offset 11700224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11704320 ++wrote 2048/2048 bytes at offset 11704320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11708416 ++wrote 2048/2048 bytes at offset 11708416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11712512 ++wrote 2048/2048 bytes at offset 11712512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11716608 ++wrote 2048/2048 bytes at offset 11716608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11720704 ++wrote 2048/2048 bytes at offset 11720704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11724800 ++wrote 2048/2048 bytes at offset 11724800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11728896 ++wrote 2048/2048 bytes at offset 11728896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11732992 ++wrote 2048/2048 bytes at offset 11732992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11737088 ++wrote 2048/2048 bytes at offset 11737088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11741184 ++wrote 2048/2048 bytes at offset 11741184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11745280 ++wrote 2048/2048 bytes at offset 11745280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11749376 ++wrote 2048/2048 bytes at offset 11749376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11753472 ++wrote 2048/2048 bytes at offset 11753472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11757568 ++wrote 2048/2048 bytes at offset 11757568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11761664 ++wrote 2048/2048 bytes at offset 11761664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11765760 ++wrote 2048/2048 bytes at offset 11765760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11769856 ++wrote 2048/2048 bytes at offset 11769856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11773952 ++wrote 2048/2048 bytes at offset 11773952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11778048 ++wrote 2048/2048 bytes at offset 11778048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11782144 ++wrote 2048/2048 bytes at offset 11782144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11786240 ++wrote 2048/2048 bytes at offset 11786240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11790336 ++wrote 2048/2048 bytes at offset 11790336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11794432 ++wrote 2048/2048 bytes at offset 11794432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11798528 ++wrote 2048/2048 bytes at offset 11798528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11802624 ++wrote 2048/2048 bytes at offset 11802624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11806720 ++wrote 2048/2048 bytes at offset 11806720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11810816 ++wrote 2048/2048 bytes at offset 11810816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11814912 ++wrote 2048/2048 bytes at offset 11814912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11819008 ++wrote 2048/2048 bytes at offset 11819008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11823104 ++wrote 2048/2048 bytes at offset 11823104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11827200 ++wrote 2048/2048 bytes at offset 11827200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11831296 ++wrote 2048/2048 bytes at offset 11831296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11835392 ++wrote 2048/2048 bytes at offset 11835392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11839488 ++wrote 2048/2048 bytes at offset 11839488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11843584 ++wrote 2048/2048 bytes at offset 11843584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11847680 ++wrote 2048/2048 bytes at offset 11847680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11851776 ++wrote 2048/2048 bytes at offset 11851776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11855872 ++wrote 2048/2048 bytes at offset 11855872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11859968 ++wrote 2048/2048 bytes at offset 11859968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11864064 ++wrote 2048/2048 bytes at offset 11864064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11868160 ++wrote 2048/2048 bytes at offset 11868160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11872256 ++wrote 2048/2048 bytes at offset 11872256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11876352 ++wrote 2048/2048 bytes at offset 11876352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11880448 ++wrote 2048/2048 bytes at offset 11880448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11884544 ++wrote 2048/2048 bytes at offset 11884544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11888640 ++wrote 2048/2048 bytes at offset 11888640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11892736 ++wrote 2048/2048 bytes at offset 11892736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11896832 ++wrote 2048/2048 bytes at offset 11896832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11900928 ++wrote 2048/2048 bytes at offset 11900928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11905024 ++wrote 2048/2048 bytes at offset 11905024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11909120 ++wrote 2048/2048 bytes at offset 11909120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11913216 ++wrote 2048/2048 bytes at offset 11913216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11917312 ++wrote 2048/2048 bytes at offset 11917312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11921408 ++wrote 2048/2048 bytes at offset 11921408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11925504 ++wrote 2048/2048 bytes at offset 11925504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11929600 ++wrote 2048/2048 bytes at offset 11929600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11933696 ++wrote 2048/2048 bytes at offset 11933696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11937792 ++wrote 2048/2048 bytes at offset 11937792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11941888 ++wrote 2048/2048 bytes at offset 11941888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11945984 ++wrote 2048/2048 bytes at offset 11945984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11950080 ++wrote 2048/2048 bytes at offset 11950080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11954176 ++wrote 2048/2048 bytes at offset 11954176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11958272 ++wrote 2048/2048 bytes at offset 11958272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11962368 ++wrote 2048/2048 bytes at offset 11962368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11966464 ++wrote 2048/2048 bytes at offset 11966464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11970560 ++wrote 2048/2048 bytes at offset 11970560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11974656 ++wrote 2048/2048 bytes at offset 11974656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11978752 ++wrote 2048/2048 bytes at offset 11978752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11982848 ++wrote 2048/2048 bytes at offset 11982848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11986944 ++wrote 2048/2048 bytes at offset 11986944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11991040 ++wrote 2048/2048 bytes at offset 11991040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11995136 ++wrote 2048/2048 bytes at offset 11995136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 11999232 ++wrote 2048/2048 bytes at offset 11999232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12003328 ++wrote 2048/2048 bytes at offset 12003328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12007424 ++wrote 2048/2048 bytes at offset 12007424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12011520 ++wrote 2048/2048 bytes at offset 12011520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12015616 ++wrote 2048/2048 bytes at offset 12015616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12019712 ++wrote 2048/2048 bytes at offset 12019712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12023808 ++wrote 2048/2048 bytes at offset 12023808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12027904 ++wrote 2048/2048 bytes at offset 12027904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12032000 ++wrote 2048/2048 bytes at offset 12032000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12036096 ++wrote 2048/2048 bytes at offset 12036096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12040192 ++wrote 2048/2048 bytes at offset 12040192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12044288 ++wrote 2048/2048 bytes at offset 12044288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12048384 ++wrote 2048/2048 bytes at offset 12048384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12052480 ++wrote 2048/2048 bytes at offset 12052480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12056576 ++wrote 2048/2048 bytes at offset 12056576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12060672 ++wrote 2048/2048 bytes at offset 12060672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12064768 ++wrote 2048/2048 bytes at offset 12064768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12068864 ++wrote 2048/2048 bytes at offset 12068864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12072960 ++wrote 2048/2048 bytes at offset 12072960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12077056 ++wrote 2048/2048 bytes at offset 12077056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12081152 ++wrote 2048/2048 bytes at offset 12081152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12085248 ++wrote 2048/2048 bytes at offset 12085248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12089344 ++wrote 2048/2048 bytes at offset 12089344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12093440 ++wrote 2048/2048 bytes at offset 12093440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12097536 ++wrote 2048/2048 bytes at offset 12097536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12101632 ++wrote 2048/2048 bytes at offset 12101632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12105728 ++wrote 2048/2048 bytes at offset 12105728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12109824 ++wrote 2048/2048 bytes at offset 12109824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12113920 ++wrote 2048/2048 bytes at offset 12113920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12118016 ++wrote 2048/2048 bytes at offset 12118016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12122112 ++wrote 2048/2048 bytes at offset 12122112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12126208 ++wrote 2048/2048 bytes at offset 12126208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12130304 ++wrote 2048/2048 bytes at offset 12130304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12134400 ++wrote 2048/2048 bytes at offset 12134400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12138496 ++wrote 2048/2048 bytes at offset 12138496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12142592 ++wrote 2048/2048 bytes at offset 12142592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12146688 ++wrote 2048/2048 bytes at offset 12146688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12150784 ++wrote 2048/2048 bytes at offset 12150784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12154880 ++wrote 2048/2048 bytes at offset 12154880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12158976 ++wrote 2048/2048 bytes at offset 12158976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12163072 ++wrote 2048/2048 bytes at offset 12163072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12167168 ++wrote 2048/2048 bytes at offset 12167168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12171264 ++wrote 2048/2048 bytes at offset 12171264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12175360 ++wrote 2048/2048 bytes at offset 12175360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12179456 ++wrote 2048/2048 bytes at offset 12179456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12183552 ++wrote 2048/2048 bytes at offset 12183552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12187648 ++wrote 2048/2048 bytes at offset 12187648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12191744 ++wrote 2048/2048 bytes at offset 12191744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12195840 ++wrote 2048/2048 bytes at offset 12195840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12199936 ++wrote 2048/2048 bytes at offset 12199936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12204032 ++wrote 2048/2048 bytes at offset 12204032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12208128 ++wrote 2048/2048 bytes at offset 12208128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12212224 ++wrote 2048/2048 bytes at offset 12212224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12216320 ++wrote 2048/2048 bytes at offset 12216320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12220416 ++wrote 2048/2048 bytes at offset 12220416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12224512 ++wrote 2048/2048 bytes at offset 12224512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12228608 ++wrote 2048/2048 bytes at offset 12228608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12232704 ++wrote 2048/2048 bytes at offset 12232704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12236800 ++wrote 2048/2048 bytes at offset 12236800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12240896 ++wrote 2048/2048 bytes at offset 12240896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12244992 ++wrote 2048/2048 bytes at offset 12244992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12249088 ++wrote 2048/2048 bytes at offset 12249088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12253184 ++wrote 2048/2048 bytes at offset 12253184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12257280 ++wrote 2048/2048 bytes at offset 12257280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12261376 ++wrote 2048/2048 bytes at offset 12261376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12265472 ++wrote 2048/2048 bytes at offset 12265472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12269568 ++wrote 2048/2048 bytes at offset 12269568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12273664 ++wrote 2048/2048 bytes at offset 12273664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12277760 ++wrote 2048/2048 bytes at offset 12277760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12281856 ++wrote 2048/2048 bytes at offset 12281856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12285952 ++wrote 2048/2048 bytes at offset 12285952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12290048 ++wrote 2048/2048 bytes at offset 12290048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12294144 ++wrote 2048/2048 bytes at offset 12294144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12298240 ++wrote 2048/2048 bytes at offset 12298240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12302336 ++wrote 2048/2048 bytes at offset 12302336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12306432 ++wrote 2048/2048 bytes at offset 12306432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12310528 ++wrote 2048/2048 bytes at offset 12310528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12314624 ++wrote 2048/2048 bytes at offset 12314624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12318720 ++wrote 2048/2048 bytes at offset 12318720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12322816 ++wrote 2048/2048 bytes at offset 12322816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12326912 ++wrote 2048/2048 bytes at offset 12326912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12331008 ++wrote 2048/2048 bytes at offset 12331008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12335104 ++wrote 2048/2048 bytes at offset 12335104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12339200 ++wrote 2048/2048 bytes at offset 12339200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12343296 ++wrote 2048/2048 bytes at offset 12343296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12347392 ++wrote 2048/2048 bytes at offset 12347392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12351488 ++wrote 2048/2048 bytes at offset 12351488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12355584 ++wrote 2048/2048 bytes at offset 12355584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12359680 ++wrote 2048/2048 bytes at offset 12359680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12363776 ++wrote 2048/2048 bytes at offset 12363776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12367872 ++wrote 2048/2048 bytes at offset 12367872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12371968 ++wrote 2048/2048 bytes at offset 12371968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12376064 ++wrote 2048/2048 bytes at offset 12376064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12380160 ++wrote 2048/2048 bytes at offset 12380160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12384256 ++wrote 2048/2048 bytes at offset 12384256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12388352 ++wrote 2048/2048 bytes at offset 12388352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12392448 ++wrote 2048/2048 bytes at offset 12392448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12396544 ++wrote 2048/2048 bytes at offset 12396544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12400640 ++wrote 2048/2048 bytes at offset 12400640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12404736 ++wrote 2048/2048 bytes at offset 12404736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12408832 ++wrote 2048/2048 bytes at offset 12408832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12412928 ++wrote 2048/2048 bytes at offset 12412928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12417024 ++wrote 2048/2048 bytes at offset 12417024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12421120 ++wrote 2048/2048 bytes at offset 12421120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12425216 ++wrote 2048/2048 bytes at offset 12425216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12429312 ++wrote 2048/2048 bytes at offset 12429312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12433408 ++wrote 2048/2048 bytes at offset 12433408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12437504 ++wrote 2048/2048 bytes at offset 12437504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12441600 ++wrote 2048/2048 bytes at offset 12441600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12445696 ++wrote 2048/2048 bytes at offset 12445696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12449792 ++wrote 2048/2048 bytes at offset 12449792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12453888 ++wrote 2048/2048 bytes at offset 12453888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12457984 ++wrote 2048/2048 bytes at offset 12457984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12462080 ++wrote 2048/2048 bytes at offset 12462080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12466176 ++wrote 2048/2048 bytes at offset 12466176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12470272 ++wrote 2048/2048 bytes at offset 12470272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12474368 ++wrote 2048/2048 bytes at offset 12474368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12478464 ++wrote 2048/2048 bytes at offset 12478464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12482560 ++wrote 2048/2048 bytes at offset 12482560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12486656 ++wrote 2048/2048 bytes at offset 12486656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12490752 ++wrote 2048/2048 bytes at offset 12490752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12494848 ++wrote 2048/2048 bytes at offset 12494848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12498944 ++wrote 2048/2048 bytes at offset 12498944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12503040 ++wrote 2048/2048 bytes at offset 12503040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12507136 ++wrote 2048/2048 bytes at offset 12507136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12511232 ++wrote 2048/2048 bytes at offset 12511232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12515328 ++wrote 2048/2048 bytes at offset 12515328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12519424 ++wrote 2048/2048 bytes at offset 12519424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12523520 ++wrote 2048/2048 bytes at offset 12523520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12527616 ++wrote 2048/2048 bytes at offset 12527616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12531712 ++wrote 2048/2048 bytes at offset 12531712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12535808 ++wrote 2048/2048 bytes at offset 12535808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12539904 ++wrote 2048/2048 bytes at offset 12539904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12544000 ++wrote 2048/2048 bytes at offset 12544000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12548096 ++wrote 2048/2048 bytes at offset 12548096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12552192 ++wrote 2048/2048 bytes at offset 12552192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12556288 ++wrote 2048/2048 bytes at offset 12556288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12560384 ++wrote 2048/2048 bytes at offset 12560384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12564480 ++wrote 2048/2048 bytes at offset 12564480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12568576 ++wrote 2048/2048 bytes at offset 12568576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12572672 ++wrote 2048/2048 bytes at offset 12572672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12576768 ++wrote 2048/2048 bytes at offset 12576768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12580864 ++wrote 2048/2048 bytes at offset 12580864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 12582912 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 12582912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12587008 ++wrote 2048/2048 bytes at offset 12587008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12591104 ++wrote 2048/2048 bytes at offset 12591104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12595200 ++wrote 2048/2048 bytes at offset 12595200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12599296 ++wrote 2048/2048 bytes at offset 12599296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12603392 ++wrote 2048/2048 bytes at offset 12603392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12607488 ++wrote 2048/2048 bytes at offset 12607488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12611584 ++wrote 2048/2048 bytes at offset 12611584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12615680 ++wrote 2048/2048 bytes at offset 12615680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12619776 ++wrote 2048/2048 bytes at offset 12619776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12623872 ++wrote 2048/2048 bytes at offset 12623872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12627968 ++wrote 2048/2048 bytes at offset 12627968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12632064 ++wrote 2048/2048 bytes at offset 12632064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12636160 ++wrote 2048/2048 bytes at offset 12636160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12640256 ++wrote 2048/2048 bytes at offset 12640256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12644352 ++wrote 2048/2048 bytes at offset 12644352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12648448 ++wrote 2048/2048 bytes at offset 12648448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12652544 ++wrote 2048/2048 bytes at offset 12652544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12656640 ++wrote 2048/2048 bytes at offset 12656640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12660736 ++wrote 2048/2048 bytes at offset 12660736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12664832 ++wrote 2048/2048 bytes at offset 12664832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12668928 ++wrote 2048/2048 bytes at offset 12668928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12673024 ++wrote 2048/2048 bytes at offset 12673024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12677120 ++wrote 2048/2048 bytes at offset 12677120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12681216 ++wrote 2048/2048 bytes at offset 12681216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12685312 ++wrote 2048/2048 bytes at offset 12685312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12689408 ++wrote 2048/2048 bytes at offset 12689408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12693504 ++wrote 2048/2048 bytes at offset 12693504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12697600 ++wrote 2048/2048 bytes at offset 12697600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12701696 ++wrote 2048/2048 bytes at offset 12701696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12705792 ++wrote 2048/2048 bytes at offset 12705792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12709888 ++wrote 2048/2048 bytes at offset 12709888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12713984 ++wrote 2048/2048 bytes at offset 12713984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12718080 ++wrote 2048/2048 bytes at offset 12718080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12722176 ++wrote 2048/2048 bytes at offset 12722176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12726272 ++wrote 2048/2048 bytes at offset 12726272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12730368 ++wrote 2048/2048 bytes at offset 12730368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12734464 ++wrote 2048/2048 bytes at offset 12734464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12738560 ++wrote 2048/2048 bytes at offset 12738560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12742656 ++wrote 2048/2048 bytes at offset 12742656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12746752 ++wrote 2048/2048 bytes at offset 12746752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12750848 ++wrote 2048/2048 bytes at offset 12750848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12754944 ++wrote 2048/2048 bytes at offset 12754944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12759040 ++wrote 2048/2048 bytes at offset 12759040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12763136 ++wrote 2048/2048 bytes at offset 12763136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12767232 ++wrote 2048/2048 bytes at offset 12767232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12771328 ++wrote 2048/2048 bytes at offset 12771328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12775424 ++wrote 2048/2048 bytes at offset 12775424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12779520 ++wrote 2048/2048 bytes at offset 12779520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12783616 ++wrote 2048/2048 bytes at offset 12783616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12787712 ++wrote 2048/2048 bytes at offset 12787712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12791808 ++wrote 2048/2048 bytes at offset 12791808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12795904 ++wrote 2048/2048 bytes at offset 12795904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12800000 ++wrote 2048/2048 bytes at offset 12800000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12804096 ++wrote 2048/2048 bytes at offset 12804096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12808192 ++wrote 2048/2048 bytes at offset 12808192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12812288 ++wrote 2048/2048 bytes at offset 12812288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12816384 ++wrote 2048/2048 bytes at offset 12816384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12820480 ++wrote 2048/2048 bytes at offset 12820480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12824576 ++wrote 2048/2048 bytes at offset 12824576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12828672 ++wrote 2048/2048 bytes at offset 12828672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12832768 ++wrote 2048/2048 bytes at offset 12832768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12836864 ++wrote 2048/2048 bytes at offset 12836864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12840960 ++wrote 2048/2048 bytes at offset 12840960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12845056 ++wrote 2048/2048 bytes at offset 12845056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12849152 ++wrote 2048/2048 bytes at offset 12849152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12853248 ++wrote 2048/2048 bytes at offset 12853248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12857344 ++wrote 2048/2048 bytes at offset 12857344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12861440 ++wrote 2048/2048 bytes at offset 12861440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12865536 ++wrote 2048/2048 bytes at offset 12865536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12869632 ++wrote 2048/2048 bytes at offset 12869632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12873728 ++wrote 2048/2048 bytes at offset 12873728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12877824 ++wrote 2048/2048 bytes at offset 12877824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12881920 ++wrote 2048/2048 bytes at offset 12881920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12886016 ++wrote 2048/2048 bytes at offset 12886016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12890112 ++wrote 2048/2048 bytes at offset 12890112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12894208 ++wrote 2048/2048 bytes at offset 12894208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12898304 ++wrote 2048/2048 bytes at offset 12898304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12902400 ++wrote 2048/2048 bytes at offset 12902400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12906496 ++wrote 2048/2048 bytes at offset 12906496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12910592 ++wrote 2048/2048 bytes at offset 12910592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12914688 ++wrote 2048/2048 bytes at offset 12914688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12918784 ++wrote 2048/2048 bytes at offset 12918784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12922880 ++wrote 2048/2048 bytes at offset 12922880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12926976 ++wrote 2048/2048 bytes at offset 12926976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12931072 ++wrote 2048/2048 bytes at offset 12931072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12935168 ++wrote 2048/2048 bytes at offset 12935168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12939264 ++wrote 2048/2048 bytes at offset 12939264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12943360 ++wrote 2048/2048 bytes at offset 12943360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12947456 ++wrote 2048/2048 bytes at offset 12947456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12951552 ++wrote 2048/2048 bytes at offset 12951552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12955648 ++wrote 2048/2048 bytes at offset 12955648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12959744 ++wrote 2048/2048 bytes at offset 12959744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12963840 ++wrote 2048/2048 bytes at offset 12963840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12967936 ++wrote 2048/2048 bytes at offset 12967936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12972032 ++wrote 2048/2048 bytes at offset 12972032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12976128 ++wrote 2048/2048 bytes at offset 12976128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12980224 ++wrote 2048/2048 bytes at offset 12980224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12984320 ++wrote 2048/2048 bytes at offset 12984320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12988416 ++wrote 2048/2048 bytes at offset 12988416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12992512 ++wrote 2048/2048 bytes at offset 12992512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 12996608 ++wrote 2048/2048 bytes at offset 12996608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13000704 ++wrote 2048/2048 bytes at offset 13000704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13004800 ++wrote 2048/2048 bytes at offset 13004800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13008896 ++wrote 2048/2048 bytes at offset 13008896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13012992 ++wrote 2048/2048 bytes at offset 13012992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13017088 ++wrote 2048/2048 bytes at offset 13017088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13021184 ++wrote 2048/2048 bytes at offset 13021184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13025280 ++wrote 2048/2048 bytes at offset 13025280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13029376 ++wrote 2048/2048 bytes at offset 13029376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13033472 ++wrote 2048/2048 bytes at offset 13033472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13037568 ++wrote 2048/2048 bytes at offset 13037568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13041664 ++wrote 2048/2048 bytes at offset 13041664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13045760 ++wrote 2048/2048 bytes at offset 13045760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13049856 ++wrote 2048/2048 bytes at offset 13049856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13053952 ++wrote 2048/2048 bytes at offset 13053952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13058048 ++wrote 2048/2048 bytes at offset 13058048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13062144 ++wrote 2048/2048 bytes at offset 13062144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13066240 ++wrote 2048/2048 bytes at offset 13066240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13070336 ++wrote 2048/2048 bytes at offset 13070336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13074432 ++wrote 2048/2048 bytes at offset 13074432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13078528 ++wrote 2048/2048 bytes at offset 13078528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13082624 ++wrote 2048/2048 bytes at offset 13082624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13086720 ++wrote 2048/2048 bytes at offset 13086720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13090816 ++wrote 2048/2048 bytes at offset 13090816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13094912 ++wrote 2048/2048 bytes at offset 13094912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13099008 ++wrote 2048/2048 bytes at offset 13099008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13103104 ++wrote 2048/2048 bytes at offset 13103104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13107200 ++wrote 2048/2048 bytes at offset 13107200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13111296 ++wrote 2048/2048 bytes at offset 13111296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13115392 ++wrote 2048/2048 bytes at offset 13115392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13119488 ++wrote 2048/2048 bytes at offset 13119488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13123584 ++wrote 2048/2048 bytes at offset 13123584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13127680 ++wrote 2048/2048 bytes at offset 13127680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13131776 ++wrote 2048/2048 bytes at offset 13131776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13135872 ++wrote 2048/2048 bytes at offset 13135872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13139968 ++wrote 2048/2048 bytes at offset 13139968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13144064 ++wrote 2048/2048 bytes at offset 13144064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13148160 ++wrote 2048/2048 bytes at offset 13148160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13152256 ++wrote 2048/2048 bytes at offset 13152256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13156352 ++wrote 2048/2048 bytes at offset 13156352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13160448 ++wrote 2048/2048 bytes at offset 13160448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13164544 ++wrote 2048/2048 bytes at offset 13164544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13168640 ++wrote 2048/2048 bytes at offset 13168640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13172736 ++wrote 2048/2048 bytes at offset 13172736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13176832 ++wrote 2048/2048 bytes at offset 13176832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13180928 ++wrote 2048/2048 bytes at offset 13180928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13185024 ++wrote 2048/2048 bytes at offset 13185024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13189120 ++wrote 2048/2048 bytes at offset 13189120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13193216 ++wrote 2048/2048 bytes at offset 13193216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13197312 ++wrote 2048/2048 bytes at offset 13197312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13201408 ++wrote 2048/2048 bytes at offset 13201408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13205504 ++wrote 2048/2048 bytes at offset 13205504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13209600 ++wrote 2048/2048 bytes at offset 13209600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13213696 ++wrote 2048/2048 bytes at offset 13213696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13217792 ++wrote 2048/2048 bytes at offset 13217792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13221888 ++wrote 2048/2048 bytes at offset 13221888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13225984 ++wrote 2048/2048 bytes at offset 13225984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13230080 ++wrote 2048/2048 bytes at offset 13230080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13234176 ++wrote 2048/2048 bytes at offset 13234176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13238272 ++wrote 2048/2048 bytes at offset 13238272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13242368 ++wrote 2048/2048 bytes at offset 13242368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13246464 ++wrote 2048/2048 bytes at offset 13246464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13250560 ++wrote 2048/2048 bytes at offset 13250560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13254656 ++wrote 2048/2048 bytes at offset 13254656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13258752 ++wrote 2048/2048 bytes at offset 13258752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13262848 ++wrote 2048/2048 bytes at offset 13262848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13266944 ++wrote 2048/2048 bytes at offset 13266944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13271040 ++wrote 2048/2048 bytes at offset 13271040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13275136 ++wrote 2048/2048 bytes at offset 13275136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13279232 ++wrote 2048/2048 bytes at offset 13279232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13283328 ++wrote 2048/2048 bytes at offset 13283328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13287424 ++wrote 2048/2048 bytes at offset 13287424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13291520 ++wrote 2048/2048 bytes at offset 13291520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13295616 ++wrote 2048/2048 bytes at offset 13295616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13299712 ++wrote 2048/2048 bytes at offset 13299712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13303808 ++wrote 2048/2048 bytes at offset 13303808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13307904 ++wrote 2048/2048 bytes at offset 13307904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13312000 ++wrote 2048/2048 bytes at offset 13312000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13316096 ++wrote 2048/2048 bytes at offset 13316096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13320192 ++wrote 2048/2048 bytes at offset 13320192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13324288 ++wrote 2048/2048 bytes at offset 13324288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13328384 ++wrote 2048/2048 bytes at offset 13328384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13332480 ++wrote 2048/2048 bytes at offset 13332480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13336576 ++wrote 2048/2048 bytes at offset 13336576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13340672 ++wrote 2048/2048 bytes at offset 13340672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13344768 ++wrote 2048/2048 bytes at offset 13344768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13348864 ++wrote 2048/2048 bytes at offset 13348864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13352960 ++wrote 2048/2048 bytes at offset 13352960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13357056 ++wrote 2048/2048 bytes at offset 13357056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13361152 ++wrote 2048/2048 bytes at offset 13361152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13365248 ++wrote 2048/2048 bytes at offset 13365248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13369344 ++wrote 2048/2048 bytes at offset 13369344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13373440 ++wrote 2048/2048 bytes at offset 13373440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13377536 ++wrote 2048/2048 bytes at offset 13377536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13381632 ++wrote 2048/2048 bytes at offset 13381632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13385728 ++wrote 2048/2048 bytes at offset 13385728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13389824 ++wrote 2048/2048 bytes at offset 13389824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13393920 ++wrote 2048/2048 bytes at offset 13393920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13398016 ++wrote 2048/2048 bytes at offset 13398016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13402112 ++wrote 2048/2048 bytes at offset 13402112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13406208 ++wrote 2048/2048 bytes at offset 13406208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13410304 ++wrote 2048/2048 bytes at offset 13410304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13414400 ++wrote 2048/2048 bytes at offset 13414400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13418496 ++wrote 2048/2048 bytes at offset 13418496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13422592 ++wrote 2048/2048 bytes at offset 13422592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13426688 ++wrote 2048/2048 bytes at offset 13426688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13430784 ++wrote 2048/2048 bytes at offset 13430784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13434880 ++wrote 2048/2048 bytes at offset 13434880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13438976 ++wrote 2048/2048 bytes at offset 13438976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13443072 ++wrote 2048/2048 bytes at offset 13443072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13447168 ++wrote 2048/2048 bytes at offset 13447168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13451264 ++wrote 2048/2048 bytes at offset 13451264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13455360 ++wrote 2048/2048 bytes at offset 13455360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13459456 ++wrote 2048/2048 bytes at offset 13459456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13463552 ++wrote 2048/2048 bytes at offset 13463552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13467648 ++wrote 2048/2048 bytes at offset 13467648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13471744 ++wrote 2048/2048 bytes at offset 13471744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13475840 ++wrote 2048/2048 bytes at offset 13475840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13479936 ++wrote 2048/2048 bytes at offset 13479936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13484032 ++wrote 2048/2048 bytes at offset 13484032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13488128 ++wrote 2048/2048 bytes at offset 13488128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13492224 ++wrote 2048/2048 bytes at offset 13492224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13496320 ++wrote 2048/2048 bytes at offset 13496320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13500416 ++wrote 2048/2048 bytes at offset 13500416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13504512 ++wrote 2048/2048 bytes at offset 13504512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13508608 ++wrote 2048/2048 bytes at offset 13508608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13512704 ++wrote 2048/2048 bytes at offset 13512704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13516800 ++wrote 2048/2048 bytes at offset 13516800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13520896 ++wrote 2048/2048 bytes at offset 13520896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13524992 ++wrote 2048/2048 bytes at offset 13524992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13529088 ++wrote 2048/2048 bytes at offset 13529088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13533184 ++wrote 2048/2048 bytes at offset 13533184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13537280 ++wrote 2048/2048 bytes at offset 13537280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13541376 ++wrote 2048/2048 bytes at offset 13541376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13545472 ++wrote 2048/2048 bytes at offset 13545472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13549568 ++wrote 2048/2048 bytes at offset 13549568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13553664 ++wrote 2048/2048 bytes at offset 13553664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13557760 ++wrote 2048/2048 bytes at offset 13557760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13561856 ++wrote 2048/2048 bytes at offset 13561856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13565952 ++wrote 2048/2048 bytes at offset 13565952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13570048 ++wrote 2048/2048 bytes at offset 13570048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13574144 ++wrote 2048/2048 bytes at offset 13574144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13578240 ++wrote 2048/2048 bytes at offset 13578240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13582336 ++wrote 2048/2048 bytes at offset 13582336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13586432 ++wrote 2048/2048 bytes at offset 13586432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13590528 ++wrote 2048/2048 bytes at offset 13590528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13594624 ++wrote 2048/2048 bytes at offset 13594624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13598720 ++wrote 2048/2048 bytes at offset 13598720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13602816 ++wrote 2048/2048 bytes at offset 13602816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13606912 ++wrote 2048/2048 bytes at offset 13606912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13611008 ++wrote 2048/2048 bytes at offset 13611008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13615104 ++wrote 2048/2048 bytes at offset 13615104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13619200 ++wrote 2048/2048 bytes at offset 13619200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13623296 ++wrote 2048/2048 bytes at offset 13623296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13627392 ++wrote 2048/2048 bytes at offset 13627392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 13632512 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 13632512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13636608 ++wrote 2048/2048 bytes at offset 13636608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13640704 ++wrote 2048/2048 bytes at offset 13640704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13644800 ++wrote 2048/2048 bytes at offset 13644800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13648896 ++wrote 2048/2048 bytes at offset 13648896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13652992 ++wrote 2048/2048 bytes at offset 13652992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13657088 ++wrote 2048/2048 bytes at offset 13657088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13661184 ++wrote 2048/2048 bytes at offset 13661184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13665280 ++wrote 2048/2048 bytes at offset 13665280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13669376 ++wrote 2048/2048 bytes at offset 13669376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13673472 ++wrote 2048/2048 bytes at offset 13673472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13677568 ++wrote 2048/2048 bytes at offset 13677568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13681664 ++wrote 2048/2048 bytes at offset 13681664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13685760 ++wrote 2048/2048 bytes at offset 13685760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13689856 ++wrote 2048/2048 bytes at offset 13689856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13693952 ++wrote 2048/2048 bytes at offset 13693952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13698048 ++wrote 2048/2048 bytes at offset 13698048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13702144 ++wrote 2048/2048 bytes at offset 13702144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13706240 ++wrote 2048/2048 bytes at offset 13706240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13710336 ++wrote 2048/2048 bytes at offset 13710336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13714432 ++wrote 2048/2048 bytes at offset 13714432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13718528 ++wrote 2048/2048 bytes at offset 13718528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13722624 ++wrote 2048/2048 bytes at offset 13722624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13726720 ++wrote 2048/2048 bytes at offset 13726720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13730816 ++wrote 2048/2048 bytes at offset 13730816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13734912 ++wrote 2048/2048 bytes at offset 13734912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13739008 ++wrote 2048/2048 bytes at offset 13739008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13743104 ++wrote 2048/2048 bytes at offset 13743104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13747200 ++wrote 2048/2048 bytes at offset 13747200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13751296 ++wrote 2048/2048 bytes at offset 13751296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13755392 ++wrote 2048/2048 bytes at offset 13755392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13759488 ++wrote 2048/2048 bytes at offset 13759488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13763584 ++wrote 2048/2048 bytes at offset 13763584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13767680 ++wrote 2048/2048 bytes at offset 13767680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13771776 ++wrote 2048/2048 bytes at offset 13771776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13775872 ++wrote 2048/2048 bytes at offset 13775872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13779968 ++wrote 2048/2048 bytes at offset 13779968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13784064 ++wrote 2048/2048 bytes at offset 13784064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13788160 ++wrote 2048/2048 bytes at offset 13788160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13792256 ++wrote 2048/2048 bytes at offset 13792256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13796352 ++wrote 2048/2048 bytes at offset 13796352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13800448 ++wrote 2048/2048 bytes at offset 13800448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13804544 ++wrote 2048/2048 bytes at offset 13804544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13808640 ++wrote 2048/2048 bytes at offset 13808640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13812736 ++wrote 2048/2048 bytes at offset 13812736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13816832 ++wrote 2048/2048 bytes at offset 13816832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13820928 ++wrote 2048/2048 bytes at offset 13820928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13825024 ++wrote 2048/2048 bytes at offset 13825024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13829120 ++wrote 2048/2048 bytes at offset 13829120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13833216 ++wrote 2048/2048 bytes at offset 13833216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13837312 ++wrote 2048/2048 bytes at offset 13837312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13841408 ++wrote 2048/2048 bytes at offset 13841408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13845504 ++wrote 2048/2048 bytes at offset 13845504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13849600 ++wrote 2048/2048 bytes at offset 13849600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13853696 ++wrote 2048/2048 bytes at offset 13853696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13857792 ++wrote 2048/2048 bytes at offset 13857792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13861888 ++wrote 2048/2048 bytes at offset 13861888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13865984 ++wrote 2048/2048 bytes at offset 13865984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13870080 ++wrote 2048/2048 bytes at offset 13870080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13874176 ++wrote 2048/2048 bytes at offset 13874176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13878272 ++wrote 2048/2048 bytes at offset 13878272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13882368 ++wrote 2048/2048 bytes at offset 13882368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13886464 ++wrote 2048/2048 bytes at offset 13886464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13890560 ++wrote 2048/2048 bytes at offset 13890560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13894656 ++wrote 2048/2048 bytes at offset 13894656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13898752 ++wrote 2048/2048 bytes at offset 13898752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13902848 ++wrote 2048/2048 bytes at offset 13902848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13906944 ++wrote 2048/2048 bytes at offset 13906944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13911040 ++wrote 2048/2048 bytes at offset 13911040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13915136 ++wrote 2048/2048 bytes at offset 13915136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13919232 ++wrote 2048/2048 bytes at offset 13919232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13923328 ++wrote 2048/2048 bytes at offset 13923328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13927424 ++wrote 2048/2048 bytes at offset 13927424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13931520 ++wrote 2048/2048 bytes at offset 13931520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13935616 ++wrote 2048/2048 bytes at offset 13935616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13939712 ++wrote 2048/2048 bytes at offset 13939712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13943808 ++wrote 2048/2048 bytes at offset 13943808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13947904 ++wrote 2048/2048 bytes at offset 13947904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13952000 ++wrote 2048/2048 bytes at offset 13952000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13956096 ++wrote 2048/2048 bytes at offset 13956096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13960192 ++wrote 2048/2048 bytes at offset 13960192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13964288 ++wrote 2048/2048 bytes at offset 13964288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13968384 ++wrote 2048/2048 bytes at offset 13968384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13972480 ++wrote 2048/2048 bytes at offset 13972480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13976576 ++wrote 2048/2048 bytes at offset 13976576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13980672 ++wrote 2048/2048 bytes at offset 13980672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13984768 ++wrote 2048/2048 bytes at offset 13984768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13988864 ++wrote 2048/2048 bytes at offset 13988864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13992960 ++wrote 2048/2048 bytes at offset 13992960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 13997056 ++wrote 2048/2048 bytes at offset 13997056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14001152 ++wrote 2048/2048 bytes at offset 14001152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14005248 ++wrote 2048/2048 bytes at offset 14005248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14009344 ++wrote 2048/2048 bytes at offset 14009344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14013440 ++wrote 2048/2048 bytes at offset 14013440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14017536 ++wrote 2048/2048 bytes at offset 14017536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14021632 ++wrote 2048/2048 bytes at offset 14021632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14025728 ++wrote 2048/2048 bytes at offset 14025728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14029824 ++wrote 2048/2048 bytes at offset 14029824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14033920 ++wrote 2048/2048 bytes at offset 14033920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14038016 ++wrote 2048/2048 bytes at offset 14038016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14042112 ++wrote 2048/2048 bytes at offset 14042112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14046208 ++wrote 2048/2048 bytes at offset 14046208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14050304 ++wrote 2048/2048 bytes at offset 14050304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14054400 ++wrote 2048/2048 bytes at offset 14054400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14058496 ++wrote 2048/2048 bytes at offset 14058496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14062592 ++wrote 2048/2048 bytes at offset 14062592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14066688 ++wrote 2048/2048 bytes at offset 14066688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14070784 ++wrote 2048/2048 bytes at offset 14070784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14074880 ++wrote 2048/2048 bytes at offset 14074880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14078976 ++wrote 2048/2048 bytes at offset 14078976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14083072 ++wrote 2048/2048 bytes at offset 14083072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14087168 ++wrote 2048/2048 bytes at offset 14087168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14091264 ++wrote 2048/2048 bytes at offset 14091264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14095360 ++wrote 2048/2048 bytes at offset 14095360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14099456 ++wrote 2048/2048 bytes at offset 14099456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14103552 ++wrote 2048/2048 bytes at offset 14103552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14107648 ++wrote 2048/2048 bytes at offset 14107648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14111744 ++wrote 2048/2048 bytes at offset 14111744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14115840 ++wrote 2048/2048 bytes at offset 14115840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14119936 ++wrote 2048/2048 bytes at offset 14119936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14124032 ++wrote 2048/2048 bytes at offset 14124032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14128128 ++wrote 2048/2048 bytes at offset 14128128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14132224 ++wrote 2048/2048 bytes at offset 14132224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14136320 ++wrote 2048/2048 bytes at offset 14136320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14140416 ++wrote 2048/2048 bytes at offset 14140416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14144512 ++wrote 2048/2048 bytes at offset 14144512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14148608 ++wrote 2048/2048 bytes at offset 14148608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14152704 ++wrote 2048/2048 bytes at offset 14152704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14156800 ++wrote 2048/2048 bytes at offset 14156800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14160896 ++wrote 2048/2048 bytes at offset 14160896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14164992 ++wrote 2048/2048 bytes at offset 14164992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14169088 ++wrote 2048/2048 bytes at offset 14169088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14173184 ++wrote 2048/2048 bytes at offset 14173184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14177280 ++wrote 2048/2048 bytes at offset 14177280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14181376 ++wrote 2048/2048 bytes at offset 14181376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14185472 ++wrote 2048/2048 bytes at offset 14185472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14189568 ++wrote 2048/2048 bytes at offset 14189568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14193664 ++wrote 2048/2048 bytes at offset 14193664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14197760 ++wrote 2048/2048 bytes at offset 14197760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14201856 ++wrote 2048/2048 bytes at offset 14201856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14205952 ++wrote 2048/2048 bytes at offset 14205952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14210048 ++wrote 2048/2048 bytes at offset 14210048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14214144 ++wrote 2048/2048 bytes at offset 14214144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14218240 ++wrote 2048/2048 bytes at offset 14218240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14222336 ++wrote 2048/2048 bytes at offset 14222336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14226432 ++wrote 2048/2048 bytes at offset 14226432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14230528 ++wrote 2048/2048 bytes at offset 14230528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14234624 ++wrote 2048/2048 bytes at offset 14234624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14238720 ++wrote 2048/2048 bytes at offset 14238720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14242816 ++wrote 2048/2048 bytes at offset 14242816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14246912 ++wrote 2048/2048 bytes at offset 14246912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14251008 ++wrote 2048/2048 bytes at offset 14251008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14255104 ++wrote 2048/2048 bytes at offset 14255104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14259200 ++wrote 2048/2048 bytes at offset 14259200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14263296 ++wrote 2048/2048 bytes at offset 14263296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14267392 ++wrote 2048/2048 bytes at offset 14267392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14271488 ++wrote 2048/2048 bytes at offset 14271488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14275584 ++wrote 2048/2048 bytes at offset 14275584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14279680 ++wrote 2048/2048 bytes at offset 14279680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14283776 ++wrote 2048/2048 bytes at offset 14283776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14287872 ++wrote 2048/2048 bytes at offset 14287872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14291968 ++wrote 2048/2048 bytes at offset 14291968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14296064 ++wrote 2048/2048 bytes at offset 14296064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14300160 ++wrote 2048/2048 bytes at offset 14300160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14304256 ++wrote 2048/2048 bytes at offset 14304256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14308352 ++wrote 2048/2048 bytes at offset 14308352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14312448 ++wrote 2048/2048 bytes at offset 14312448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14316544 ++wrote 2048/2048 bytes at offset 14316544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14320640 ++wrote 2048/2048 bytes at offset 14320640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14324736 ++wrote 2048/2048 bytes at offset 14324736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14328832 ++wrote 2048/2048 bytes at offset 14328832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14332928 ++wrote 2048/2048 bytes at offset 14332928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14337024 ++wrote 2048/2048 bytes at offset 14337024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14341120 ++wrote 2048/2048 bytes at offset 14341120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14345216 ++wrote 2048/2048 bytes at offset 14345216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14349312 ++wrote 2048/2048 bytes at offset 14349312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14353408 ++wrote 2048/2048 bytes at offset 14353408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14357504 ++wrote 2048/2048 bytes at offset 14357504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14361600 ++wrote 2048/2048 bytes at offset 14361600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14365696 ++wrote 2048/2048 bytes at offset 14365696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14369792 ++wrote 2048/2048 bytes at offset 14369792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14373888 ++wrote 2048/2048 bytes at offset 14373888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14377984 ++wrote 2048/2048 bytes at offset 14377984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14382080 ++wrote 2048/2048 bytes at offset 14382080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14386176 ++wrote 2048/2048 bytes at offset 14386176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14390272 ++wrote 2048/2048 bytes at offset 14390272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14394368 ++wrote 2048/2048 bytes at offset 14394368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14398464 ++wrote 2048/2048 bytes at offset 14398464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14402560 ++wrote 2048/2048 bytes at offset 14402560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14406656 ++wrote 2048/2048 bytes at offset 14406656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14410752 ++wrote 2048/2048 bytes at offset 14410752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14414848 ++wrote 2048/2048 bytes at offset 14414848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14418944 ++wrote 2048/2048 bytes at offset 14418944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14423040 ++wrote 2048/2048 bytes at offset 14423040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14427136 ++wrote 2048/2048 bytes at offset 14427136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14431232 ++wrote 2048/2048 bytes at offset 14431232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14435328 ++wrote 2048/2048 bytes at offset 14435328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14439424 ++wrote 2048/2048 bytes at offset 14439424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14443520 ++wrote 2048/2048 bytes at offset 14443520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14447616 ++wrote 2048/2048 bytes at offset 14447616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14451712 ++wrote 2048/2048 bytes at offset 14451712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14455808 ++wrote 2048/2048 bytes at offset 14455808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14459904 ++wrote 2048/2048 bytes at offset 14459904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14464000 ++wrote 2048/2048 bytes at offset 14464000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14468096 ++wrote 2048/2048 bytes at offset 14468096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14472192 ++wrote 2048/2048 bytes at offset 14472192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14476288 ++wrote 2048/2048 bytes at offset 14476288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14480384 ++wrote 2048/2048 bytes at offset 14480384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14484480 ++wrote 2048/2048 bytes at offset 14484480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14488576 ++wrote 2048/2048 bytes at offset 14488576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14492672 ++wrote 2048/2048 bytes at offset 14492672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14496768 ++wrote 2048/2048 bytes at offset 14496768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14500864 ++wrote 2048/2048 bytes at offset 14500864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14504960 ++wrote 2048/2048 bytes at offset 14504960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14509056 ++wrote 2048/2048 bytes at offset 14509056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14513152 ++wrote 2048/2048 bytes at offset 14513152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14517248 ++wrote 2048/2048 bytes at offset 14517248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14521344 ++wrote 2048/2048 bytes at offset 14521344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14525440 ++wrote 2048/2048 bytes at offset 14525440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14529536 ++wrote 2048/2048 bytes at offset 14529536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14533632 ++wrote 2048/2048 bytes at offset 14533632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14537728 ++wrote 2048/2048 bytes at offset 14537728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14541824 ++wrote 2048/2048 bytes at offset 14541824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14545920 ++wrote 2048/2048 bytes at offset 14545920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14550016 ++wrote 2048/2048 bytes at offset 14550016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14554112 ++wrote 2048/2048 bytes at offset 14554112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14558208 ++wrote 2048/2048 bytes at offset 14558208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14562304 ++wrote 2048/2048 bytes at offset 14562304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14566400 ++wrote 2048/2048 bytes at offset 14566400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14570496 ++wrote 2048/2048 bytes at offset 14570496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14574592 ++wrote 2048/2048 bytes at offset 14574592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14578688 ++wrote 2048/2048 bytes at offset 14578688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14582784 ++wrote 2048/2048 bytes at offset 14582784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14586880 ++wrote 2048/2048 bytes at offset 14586880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14590976 ++wrote 2048/2048 bytes at offset 14590976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14595072 ++wrote 2048/2048 bytes at offset 14595072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14599168 ++wrote 2048/2048 bytes at offset 14599168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14603264 ++wrote 2048/2048 bytes at offset 14603264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14607360 ++wrote 2048/2048 bytes at offset 14607360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14611456 ++wrote 2048/2048 bytes at offset 14611456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14615552 ++wrote 2048/2048 bytes at offset 14615552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14619648 ++wrote 2048/2048 bytes at offset 14619648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14623744 ++wrote 2048/2048 bytes at offset 14623744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14627840 ++wrote 2048/2048 bytes at offset 14627840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14631936 ++wrote 2048/2048 bytes at offset 14631936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14636032 ++wrote 2048/2048 bytes at offset 14636032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14640128 ++wrote 2048/2048 bytes at offset 14640128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14644224 ++wrote 2048/2048 bytes at offset 14644224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14648320 ++wrote 2048/2048 bytes at offset 14648320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14652416 ++wrote 2048/2048 bytes at offset 14652416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14656512 ++wrote 2048/2048 bytes at offset 14656512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14660608 ++wrote 2048/2048 bytes at offset 14660608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14664704 ++wrote 2048/2048 bytes at offset 14664704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14668800 ++wrote 2048/2048 bytes at offset 14668800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14672896 ++wrote 2048/2048 bytes at offset 14672896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 14676992 ++wrote 2048/2048 bytes at offset 14676992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 14682112 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 14682112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14694400 ++wrote 8192/8192 bytes at offset 14694400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14706688 ++wrote 8192/8192 bytes at offset 14706688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14718976 ++wrote 8192/8192 bytes at offset 14718976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14731264 ++wrote 8192/8192 bytes at offset 14731264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14743552 ++wrote 8192/8192 bytes at offset 14743552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14755840 ++wrote 8192/8192 bytes at offset 14755840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14768128 ++wrote 8192/8192 bytes at offset 14768128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14780416 ++wrote 8192/8192 bytes at offset 14780416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14792704 ++wrote 8192/8192 bytes at offset 14792704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14804992 ++wrote 8192/8192 bytes at offset 14804992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14817280 ++wrote 8192/8192 bytes at offset 14817280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14829568 ++wrote 8192/8192 bytes at offset 14829568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14841856 ++wrote 8192/8192 bytes at offset 14841856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14854144 ++wrote 8192/8192 bytes at offset 14854144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14866432 ++wrote 8192/8192 bytes at offset 14866432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14878720 ++wrote 8192/8192 bytes at offset 14878720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14891008 ++wrote 8192/8192 bytes at offset 14891008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14903296 ++wrote 8192/8192 bytes at offset 14903296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14915584 ++wrote 8192/8192 bytes at offset 14915584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14927872 ++wrote 8192/8192 bytes at offset 14927872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14940160 ++wrote 8192/8192 bytes at offset 14940160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14952448 ++wrote 8192/8192 bytes at offset 14952448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14964736 ++wrote 8192/8192 bytes at offset 14964736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14977024 ++wrote 8192/8192 bytes at offset 14977024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 14989312 ++wrote 8192/8192 bytes at offset 14989312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15001600 ++wrote 8192/8192 bytes at offset 15001600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15013888 ++wrote 8192/8192 bytes at offset 15013888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15026176 ++wrote 8192/8192 bytes at offset 15026176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15038464 ++wrote 8192/8192 bytes at offset 15038464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15050752 ++wrote 8192/8192 bytes at offset 15050752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15063040 ++wrote 8192/8192 bytes at offset 15063040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15075328 ++wrote 8192/8192 bytes at offset 15075328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15087616 ++wrote 8192/8192 bytes at offset 15087616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15099904 ++wrote 8192/8192 bytes at offset 15099904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15112192 ++wrote 8192/8192 bytes at offset 15112192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15124480 ++wrote 8192/8192 bytes at offset 15124480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15136768 ++wrote 8192/8192 bytes at offset 15136768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15149056 ++wrote 8192/8192 bytes at offset 15149056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15161344 ++wrote 8192/8192 bytes at offset 15161344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15173632 ++wrote 8192/8192 bytes at offset 15173632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15185920 ++wrote 8192/8192 bytes at offset 15185920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15198208 ++wrote 8192/8192 bytes at offset 15198208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15210496 ++wrote 8192/8192 bytes at offset 15210496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15222784 ++wrote 8192/8192 bytes at offset 15222784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15235072 ++wrote 8192/8192 bytes at offset 15235072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15247360 ++wrote 8192/8192 bytes at offset 15247360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15259648 ++wrote 8192/8192 bytes at offset 15259648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15271936 ++wrote 8192/8192 bytes at offset 15271936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15284224 ++wrote 8192/8192 bytes at offset 15284224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15296512 ++wrote 8192/8192 bytes at offset 15296512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15308800 ++wrote 8192/8192 bytes at offset 15308800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15321088 ++wrote 8192/8192 bytes at offset 15321088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15333376 ++wrote 8192/8192 bytes at offset 15333376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15345664 ++wrote 8192/8192 bytes at offset 15345664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15357952 ++wrote 8192/8192 bytes at offset 15357952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15370240 ++wrote 8192/8192 bytes at offset 15370240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15382528 ++wrote 8192/8192 bytes at offset 15382528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15394816 ++wrote 8192/8192 bytes at offset 15394816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15407104 ++wrote 8192/8192 bytes at offset 15407104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15419392 ++wrote 8192/8192 bytes at offset 15419392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15431680 ++wrote 8192/8192 bytes at offset 15431680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15443968 ++wrote 8192/8192 bytes at offset 15443968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 15456256 ++wrote 8192/8192 bytes at offset 15456256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 16771072 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 16771072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 18870272 ++wrote 12288/12288 bytes at offset 18870272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 20969472 ++wrote 12288/12288 bytes at offset 20969472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 23068672 ++wrote 12288/12288 bytes at offset 23068672 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 25167872 ++wrote 12288/12288 bytes at offset 25167872 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 27267072 ++wrote 12288/12288 bytes at offset 27267072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 29366272 ++wrote 12288/12288 bytes at offset 29366272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 31465472 ++wrote 12288/12288 bytes at offset 31465472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 10485760 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 10485760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10489856 ++read 4096/4096 bytes at offset 10489856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10493952 ++read 4096/4096 bytes at offset 10493952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10498048 ++read 4096/4096 bytes at offset 10498048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10502144 ++read 4096/4096 bytes at offset 10502144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10506240 ++read 4096/4096 bytes at offset 10506240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10510336 ++read 4096/4096 bytes at offset 10510336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10514432 ++read 4096/4096 bytes at offset 10514432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10518528 ++read 4096/4096 bytes at offset 10518528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10522624 ++read 4096/4096 bytes at offset 10522624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10526720 ++read 4096/4096 bytes at offset 10526720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10530816 ++read 4096/4096 bytes at offset 10530816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10534912 ++read 4096/4096 bytes at offset 10534912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10539008 ++read 4096/4096 bytes at offset 10539008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10543104 ++read 4096/4096 bytes at offset 10543104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10547200 ++read 4096/4096 bytes at offset 10547200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10551296 ++read 4096/4096 bytes at offset 10551296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10555392 ++read 4096/4096 bytes at offset 10555392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10559488 ++read 4096/4096 bytes at offset 10559488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10563584 ++read 4096/4096 bytes at offset 10563584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10567680 ++read 4096/4096 bytes at offset 10567680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10571776 ++read 4096/4096 bytes at offset 10571776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10575872 ++read 4096/4096 bytes at offset 10575872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10579968 ++read 4096/4096 bytes at offset 10579968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10584064 ++read 4096/4096 bytes at offset 10584064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10588160 ++read 4096/4096 bytes at offset 10588160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10592256 ++read 4096/4096 bytes at offset 10592256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10596352 ++read 4096/4096 bytes at offset 10596352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10600448 ++read 4096/4096 bytes at offset 10600448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10604544 ++read 4096/4096 bytes at offset 10604544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10608640 ++read 4096/4096 bytes at offset 10608640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10612736 ++read 4096/4096 bytes at offset 10612736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10616832 ++read 4096/4096 bytes at offset 10616832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10620928 ++read 4096/4096 bytes at offset 10620928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10625024 ++read 4096/4096 bytes at offset 10625024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10629120 ++read 4096/4096 bytes at offset 10629120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10633216 ++read 4096/4096 bytes at offset 10633216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10637312 ++read 4096/4096 bytes at offset 10637312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10641408 ++read 4096/4096 bytes at offset 10641408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10645504 ++read 4096/4096 bytes at offset 10645504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10649600 ++read 4096/4096 bytes at offset 10649600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10653696 ++read 4096/4096 bytes at offset 10653696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10657792 ++read 4096/4096 bytes at offset 10657792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10661888 ++read 4096/4096 bytes at offset 10661888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10665984 ++read 4096/4096 bytes at offset 10665984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10670080 ++read 4096/4096 bytes at offset 10670080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10674176 ++read 4096/4096 bytes at offset 10674176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10678272 ++read 4096/4096 bytes at offset 10678272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10682368 ++read 4096/4096 bytes at offset 10682368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10686464 ++read 4096/4096 bytes at offset 10686464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10690560 ++read 4096/4096 bytes at offset 10690560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10694656 ++read 4096/4096 bytes at offset 10694656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10698752 ++read 4096/4096 bytes at offset 10698752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10702848 ++read 4096/4096 bytes at offset 10702848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10706944 ++read 4096/4096 bytes at offset 10706944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10711040 ++read 4096/4096 bytes at offset 10711040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10715136 ++read 4096/4096 bytes at offset 10715136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10719232 ++read 4096/4096 bytes at offset 10719232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10723328 ++read 4096/4096 bytes at offset 10723328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10727424 ++read 4096/4096 bytes at offset 10727424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10731520 ++read 4096/4096 bytes at offset 10731520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10735616 ++read 4096/4096 bytes at offset 10735616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10739712 ++read 4096/4096 bytes at offset 10739712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10743808 ++read 4096/4096 bytes at offset 10743808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10747904 ++read 4096/4096 bytes at offset 10747904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10752000 ++read 4096/4096 bytes at offset 10752000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10756096 ++read 4096/4096 bytes at offset 10756096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10760192 ++read 4096/4096 bytes at offset 10760192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10764288 ++read 4096/4096 bytes at offset 10764288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10768384 ++read 4096/4096 bytes at offset 10768384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10772480 ++read 4096/4096 bytes at offset 10772480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10776576 ++read 4096/4096 bytes at offset 10776576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10780672 ++read 4096/4096 bytes at offset 10780672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10784768 ++read 4096/4096 bytes at offset 10784768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10788864 ++read 4096/4096 bytes at offset 10788864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10792960 ++read 4096/4096 bytes at offset 10792960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10797056 ++read 4096/4096 bytes at offset 10797056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10801152 ++read 4096/4096 bytes at offset 10801152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10805248 ++read 4096/4096 bytes at offset 10805248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10809344 ++read 4096/4096 bytes at offset 10809344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10813440 ++read 4096/4096 bytes at offset 10813440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10817536 ++read 4096/4096 bytes at offset 10817536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10821632 ++read 4096/4096 bytes at offset 10821632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10825728 ++read 4096/4096 bytes at offset 10825728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10829824 ++read 4096/4096 bytes at offset 10829824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10833920 ++read 4096/4096 bytes at offset 10833920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10838016 ++read 4096/4096 bytes at offset 10838016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10842112 ++read 4096/4096 bytes at offset 10842112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10846208 ++read 4096/4096 bytes at offset 10846208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10850304 ++read 4096/4096 bytes at offset 10850304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10854400 ++read 4096/4096 bytes at offset 10854400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10858496 ++read 4096/4096 bytes at offset 10858496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10862592 ++read 4096/4096 bytes at offset 10862592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10866688 ++read 4096/4096 bytes at offset 10866688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10870784 ++read 4096/4096 bytes at offset 10870784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10874880 ++read 4096/4096 bytes at offset 10874880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10878976 ++read 4096/4096 bytes at offset 10878976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10883072 ++read 4096/4096 bytes at offset 10883072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10887168 ++read 4096/4096 bytes at offset 10887168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10891264 ++read 4096/4096 bytes at offset 10891264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10895360 ++read 4096/4096 bytes at offset 10895360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10899456 ++read 4096/4096 bytes at offset 10899456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10903552 ++read 4096/4096 bytes at offset 10903552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10907648 ++read 4096/4096 bytes at offset 10907648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10911744 ++read 4096/4096 bytes at offset 10911744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10915840 ++read 4096/4096 bytes at offset 10915840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10919936 ++read 4096/4096 bytes at offset 10919936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10924032 ++read 4096/4096 bytes at offset 10924032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10928128 ++read 4096/4096 bytes at offset 10928128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10932224 ++read 4096/4096 bytes at offset 10932224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10936320 ++read 4096/4096 bytes at offset 10936320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10940416 ++read 4096/4096 bytes at offset 10940416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10944512 ++read 4096/4096 bytes at offset 10944512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10948608 ++read 4096/4096 bytes at offset 10948608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10952704 ++read 4096/4096 bytes at offset 10952704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10956800 ++read 4096/4096 bytes at offset 10956800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10960896 ++read 4096/4096 bytes at offset 10960896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10964992 ++read 4096/4096 bytes at offset 10964992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10969088 ++read 4096/4096 bytes at offset 10969088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10973184 ++read 4096/4096 bytes at offset 10973184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10977280 ++read 4096/4096 bytes at offset 10977280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10981376 ++read 4096/4096 bytes at offset 10981376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10985472 ++read 4096/4096 bytes at offset 10985472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10989568 ++read 4096/4096 bytes at offset 10989568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10993664 ++read 4096/4096 bytes at offset 10993664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 10997760 ++read 4096/4096 bytes at offset 10997760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11001856 ++read 4096/4096 bytes at offset 11001856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11005952 ++read 4096/4096 bytes at offset 11005952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11010048 ++read 4096/4096 bytes at offset 11010048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11014144 ++read 4096/4096 bytes at offset 11014144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11018240 ++read 4096/4096 bytes at offset 11018240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11022336 ++read 4096/4096 bytes at offset 11022336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11026432 ++read 4096/4096 bytes at offset 11026432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11030528 ++read 4096/4096 bytes at offset 11030528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11034624 ++read 4096/4096 bytes at offset 11034624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11038720 ++read 4096/4096 bytes at offset 11038720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11042816 ++read 4096/4096 bytes at offset 11042816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11046912 ++read 4096/4096 bytes at offset 11046912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11051008 ++read 4096/4096 bytes at offset 11051008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11055104 ++read 4096/4096 bytes at offset 11055104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11059200 ++read 4096/4096 bytes at offset 11059200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11063296 ++read 4096/4096 bytes at offset 11063296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11067392 ++read 4096/4096 bytes at offset 11067392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11071488 ++read 4096/4096 bytes at offset 11071488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11075584 ++read 4096/4096 bytes at offset 11075584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11079680 ++read 4096/4096 bytes at offset 11079680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11083776 ++read 4096/4096 bytes at offset 11083776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11087872 ++read 4096/4096 bytes at offset 11087872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11091968 ++read 4096/4096 bytes at offset 11091968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11096064 ++read 4096/4096 bytes at offset 11096064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11100160 ++read 4096/4096 bytes at offset 11100160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11104256 ++read 4096/4096 bytes at offset 11104256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11108352 ++read 4096/4096 bytes at offset 11108352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11112448 ++read 4096/4096 bytes at offset 11112448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11116544 ++read 4096/4096 bytes at offset 11116544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11120640 ++read 4096/4096 bytes at offset 11120640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11124736 ++read 4096/4096 bytes at offset 11124736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11128832 ++read 4096/4096 bytes at offset 11128832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11132928 ++read 4096/4096 bytes at offset 11132928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11137024 ++read 4096/4096 bytes at offset 11137024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11141120 ++read 4096/4096 bytes at offset 11141120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11145216 ++read 4096/4096 bytes at offset 11145216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11149312 ++read 4096/4096 bytes at offset 11149312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11153408 ++read 4096/4096 bytes at offset 11153408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11157504 ++read 4096/4096 bytes at offset 11157504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11161600 ++read 4096/4096 bytes at offset 11161600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11165696 ++read 4096/4096 bytes at offset 11165696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11169792 ++read 4096/4096 bytes at offset 11169792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11173888 ++read 4096/4096 bytes at offset 11173888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11177984 ++read 4096/4096 bytes at offset 11177984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11182080 ++read 4096/4096 bytes at offset 11182080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11186176 ++read 4096/4096 bytes at offset 11186176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11190272 ++read 4096/4096 bytes at offset 11190272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11194368 ++read 4096/4096 bytes at offset 11194368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11198464 ++read 4096/4096 bytes at offset 11198464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11202560 ++read 4096/4096 bytes at offset 11202560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11206656 ++read 4096/4096 bytes at offset 11206656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11210752 ++read 4096/4096 bytes at offset 11210752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11214848 ++read 4096/4096 bytes at offset 11214848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11218944 ++read 4096/4096 bytes at offset 11218944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11223040 ++read 4096/4096 bytes at offset 11223040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11227136 ++read 4096/4096 bytes at offset 11227136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11231232 ++read 4096/4096 bytes at offset 11231232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11235328 ++read 4096/4096 bytes at offset 11235328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11239424 ++read 4096/4096 bytes at offset 11239424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11243520 ++read 4096/4096 bytes at offset 11243520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11247616 ++read 4096/4096 bytes at offset 11247616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11251712 ++read 4096/4096 bytes at offset 11251712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11255808 ++read 4096/4096 bytes at offset 11255808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11259904 ++read 4096/4096 bytes at offset 11259904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11264000 ++read 4096/4096 bytes at offset 11264000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11268096 ++read 4096/4096 bytes at offset 11268096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11272192 ++read 4096/4096 bytes at offset 11272192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11276288 ++read 4096/4096 bytes at offset 11276288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11280384 ++read 4096/4096 bytes at offset 11280384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11284480 ++read 4096/4096 bytes at offset 11284480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11288576 ++read 4096/4096 bytes at offset 11288576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11292672 ++read 4096/4096 bytes at offset 11292672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11296768 ++read 4096/4096 bytes at offset 11296768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11300864 ++read 4096/4096 bytes at offset 11300864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11304960 ++read 4096/4096 bytes at offset 11304960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11309056 ++read 4096/4096 bytes at offset 11309056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11313152 ++read 4096/4096 bytes at offset 11313152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11317248 ++read 4096/4096 bytes at offset 11317248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11321344 ++read 4096/4096 bytes at offset 11321344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11325440 ++read 4096/4096 bytes at offset 11325440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11329536 ++read 4096/4096 bytes at offset 11329536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11333632 ++read 4096/4096 bytes at offset 11333632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11337728 ++read 4096/4096 bytes at offset 11337728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11341824 ++read 4096/4096 bytes at offset 11341824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11345920 ++read 4096/4096 bytes at offset 11345920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11350016 ++read 4096/4096 bytes at offset 11350016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11354112 ++read 4096/4096 bytes at offset 11354112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11358208 ++read 4096/4096 bytes at offset 11358208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11362304 ++read 4096/4096 bytes at offset 11362304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11366400 ++read 4096/4096 bytes at offset 11366400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11370496 ++read 4096/4096 bytes at offset 11370496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11374592 ++read 4096/4096 bytes at offset 11374592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11378688 ++read 4096/4096 bytes at offset 11378688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11382784 ++read 4096/4096 bytes at offset 11382784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11386880 ++read 4096/4096 bytes at offset 11386880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11390976 ++read 4096/4096 bytes at offset 11390976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11395072 ++read 4096/4096 bytes at offset 11395072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11399168 ++read 4096/4096 bytes at offset 11399168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11403264 ++read 4096/4096 bytes at offset 11403264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11407360 ++read 4096/4096 bytes at offset 11407360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11411456 ++read 4096/4096 bytes at offset 11411456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11415552 ++read 4096/4096 bytes at offset 11415552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11419648 ++read 4096/4096 bytes at offset 11419648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11423744 ++read 4096/4096 bytes at offset 11423744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11427840 ++read 4096/4096 bytes at offset 11427840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11431936 ++read 4096/4096 bytes at offset 11431936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11436032 ++read 4096/4096 bytes at offset 11436032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11440128 ++read 4096/4096 bytes at offset 11440128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11444224 ++read 4096/4096 bytes at offset 11444224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11448320 ++read 4096/4096 bytes at offset 11448320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11452416 ++read 4096/4096 bytes at offset 11452416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11456512 ++read 4096/4096 bytes at offset 11456512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11460608 ++read 4096/4096 bytes at offset 11460608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11464704 ++read 4096/4096 bytes at offset 11464704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11468800 ++read 4096/4096 bytes at offset 11468800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11472896 ++read 4096/4096 bytes at offset 11472896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11476992 ++read 4096/4096 bytes at offset 11476992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11481088 ++read 4096/4096 bytes at offset 11481088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11485184 ++read 4096/4096 bytes at offset 11485184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11489280 ++read 4096/4096 bytes at offset 11489280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11493376 ++read 4096/4096 bytes at offset 11493376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11497472 ++read 4096/4096 bytes at offset 11497472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11501568 ++read 4096/4096 bytes at offset 11501568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11505664 ++read 4096/4096 bytes at offset 11505664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11509760 ++read 4096/4096 bytes at offset 11509760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11513856 ++read 4096/4096 bytes at offset 11513856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11517952 ++read 4096/4096 bytes at offset 11517952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11522048 ++read 4096/4096 bytes at offset 11522048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11526144 ++read 4096/4096 bytes at offset 11526144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 11530240 ++read 4096/4096 bytes at offset 11530240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 11536384 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 11536384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11540480 ++read 2048/2048 bytes at offset 11540480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11544576 ++read 2048/2048 bytes at offset 11544576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11548672 ++read 2048/2048 bytes at offset 11548672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11552768 ++read 2048/2048 bytes at offset 11552768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11556864 ++read 2048/2048 bytes at offset 11556864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11560960 ++read 2048/2048 bytes at offset 11560960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11565056 ++read 2048/2048 bytes at offset 11565056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11569152 ++read 2048/2048 bytes at offset 11569152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11573248 ++read 2048/2048 bytes at offset 11573248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11577344 ++read 2048/2048 bytes at offset 11577344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11581440 ++read 2048/2048 bytes at offset 11581440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11585536 ++read 2048/2048 bytes at offset 11585536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11589632 ++read 2048/2048 bytes at offset 11589632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11593728 ++read 2048/2048 bytes at offset 11593728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11597824 ++read 2048/2048 bytes at offset 11597824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11601920 ++read 2048/2048 bytes at offset 11601920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11606016 ++read 2048/2048 bytes at offset 11606016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11610112 ++read 2048/2048 bytes at offset 11610112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11614208 ++read 2048/2048 bytes at offset 11614208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11618304 ++read 2048/2048 bytes at offset 11618304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11622400 ++read 2048/2048 bytes at offset 11622400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11626496 ++read 2048/2048 bytes at offset 11626496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11630592 ++read 2048/2048 bytes at offset 11630592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11634688 ++read 2048/2048 bytes at offset 11634688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11638784 ++read 2048/2048 bytes at offset 11638784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11642880 ++read 2048/2048 bytes at offset 11642880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11646976 ++read 2048/2048 bytes at offset 11646976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11651072 ++read 2048/2048 bytes at offset 11651072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11655168 ++read 2048/2048 bytes at offset 11655168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11659264 ++read 2048/2048 bytes at offset 11659264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11663360 ++read 2048/2048 bytes at offset 11663360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11667456 ++read 2048/2048 bytes at offset 11667456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11671552 ++read 2048/2048 bytes at offset 11671552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11675648 ++read 2048/2048 bytes at offset 11675648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11679744 ++read 2048/2048 bytes at offset 11679744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11683840 ++read 2048/2048 bytes at offset 11683840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11687936 ++read 2048/2048 bytes at offset 11687936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11692032 ++read 2048/2048 bytes at offset 11692032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11696128 ++read 2048/2048 bytes at offset 11696128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11700224 ++read 2048/2048 bytes at offset 11700224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11704320 ++read 2048/2048 bytes at offset 11704320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11708416 ++read 2048/2048 bytes at offset 11708416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11712512 ++read 2048/2048 bytes at offset 11712512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11716608 ++read 2048/2048 bytes at offset 11716608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11720704 ++read 2048/2048 bytes at offset 11720704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11724800 ++read 2048/2048 bytes at offset 11724800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11728896 ++read 2048/2048 bytes at offset 11728896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11732992 ++read 2048/2048 bytes at offset 11732992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11737088 ++read 2048/2048 bytes at offset 11737088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11741184 ++read 2048/2048 bytes at offset 11741184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11745280 ++read 2048/2048 bytes at offset 11745280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11749376 ++read 2048/2048 bytes at offset 11749376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11753472 ++read 2048/2048 bytes at offset 11753472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11757568 ++read 2048/2048 bytes at offset 11757568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11761664 ++read 2048/2048 bytes at offset 11761664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11765760 ++read 2048/2048 bytes at offset 11765760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11769856 ++read 2048/2048 bytes at offset 11769856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11773952 ++read 2048/2048 bytes at offset 11773952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11778048 ++read 2048/2048 bytes at offset 11778048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11782144 ++read 2048/2048 bytes at offset 11782144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11786240 ++read 2048/2048 bytes at offset 11786240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11790336 ++read 2048/2048 bytes at offset 11790336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11794432 ++read 2048/2048 bytes at offset 11794432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11798528 ++read 2048/2048 bytes at offset 11798528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11802624 ++read 2048/2048 bytes at offset 11802624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11806720 ++read 2048/2048 bytes at offset 11806720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11810816 ++read 2048/2048 bytes at offset 11810816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11814912 ++read 2048/2048 bytes at offset 11814912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11819008 ++read 2048/2048 bytes at offset 11819008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11823104 ++read 2048/2048 bytes at offset 11823104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11827200 ++read 2048/2048 bytes at offset 11827200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11831296 ++read 2048/2048 bytes at offset 11831296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11835392 ++read 2048/2048 bytes at offset 11835392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11839488 ++read 2048/2048 bytes at offset 11839488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11843584 ++read 2048/2048 bytes at offset 11843584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11847680 ++read 2048/2048 bytes at offset 11847680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11851776 ++read 2048/2048 bytes at offset 11851776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11855872 ++read 2048/2048 bytes at offset 11855872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11859968 ++read 2048/2048 bytes at offset 11859968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11864064 ++read 2048/2048 bytes at offset 11864064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11868160 ++read 2048/2048 bytes at offset 11868160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11872256 ++read 2048/2048 bytes at offset 11872256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11876352 ++read 2048/2048 bytes at offset 11876352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11880448 ++read 2048/2048 bytes at offset 11880448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11884544 ++read 2048/2048 bytes at offset 11884544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11888640 ++read 2048/2048 bytes at offset 11888640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11892736 ++read 2048/2048 bytes at offset 11892736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11896832 ++read 2048/2048 bytes at offset 11896832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11900928 ++read 2048/2048 bytes at offset 11900928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11905024 ++read 2048/2048 bytes at offset 11905024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11909120 ++read 2048/2048 bytes at offset 11909120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11913216 ++read 2048/2048 bytes at offset 11913216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11917312 ++read 2048/2048 bytes at offset 11917312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11921408 ++read 2048/2048 bytes at offset 11921408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11925504 ++read 2048/2048 bytes at offset 11925504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11929600 ++read 2048/2048 bytes at offset 11929600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11933696 ++read 2048/2048 bytes at offset 11933696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11937792 ++read 2048/2048 bytes at offset 11937792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11941888 ++read 2048/2048 bytes at offset 11941888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11945984 ++read 2048/2048 bytes at offset 11945984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11950080 ++read 2048/2048 bytes at offset 11950080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11954176 ++read 2048/2048 bytes at offset 11954176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11958272 ++read 2048/2048 bytes at offset 11958272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11962368 ++read 2048/2048 bytes at offset 11962368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11966464 ++read 2048/2048 bytes at offset 11966464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11970560 ++read 2048/2048 bytes at offset 11970560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11974656 ++read 2048/2048 bytes at offset 11974656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11978752 ++read 2048/2048 bytes at offset 11978752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11982848 ++read 2048/2048 bytes at offset 11982848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11986944 ++read 2048/2048 bytes at offset 11986944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11991040 ++read 2048/2048 bytes at offset 11991040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11995136 ++read 2048/2048 bytes at offset 11995136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 11999232 ++read 2048/2048 bytes at offset 11999232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12003328 ++read 2048/2048 bytes at offset 12003328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12007424 ++read 2048/2048 bytes at offset 12007424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12011520 ++read 2048/2048 bytes at offset 12011520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12015616 ++read 2048/2048 bytes at offset 12015616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12019712 ++read 2048/2048 bytes at offset 12019712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12023808 ++read 2048/2048 bytes at offset 12023808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12027904 ++read 2048/2048 bytes at offset 12027904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12032000 ++read 2048/2048 bytes at offset 12032000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12036096 ++read 2048/2048 bytes at offset 12036096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12040192 ++read 2048/2048 bytes at offset 12040192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12044288 ++read 2048/2048 bytes at offset 12044288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12048384 ++read 2048/2048 bytes at offset 12048384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12052480 ++read 2048/2048 bytes at offset 12052480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12056576 ++read 2048/2048 bytes at offset 12056576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12060672 ++read 2048/2048 bytes at offset 12060672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12064768 ++read 2048/2048 bytes at offset 12064768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12068864 ++read 2048/2048 bytes at offset 12068864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12072960 ++read 2048/2048 bytes at offset 12072960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12077056 ++read 2048/2048 bytes at offset 12077056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12081152 ++read 2048/2048 bytes at offset 12081152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12085248 ++read 2048/2048 bytes at offset 12085248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12089344 ++read 2048/2048 bytes at offset 12089344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12093440 ++read 2048/2048 bytes at offset 12093440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12097536 ++read 2048/2048 bytes at offset 12097536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12101632 ++read 2048/2048 bytes at offset 12101632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12105728 ++read 2048/2048 bytes at offset 12105728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12109824 ++read 2048/2048 bytes at offset 12109824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12113920 ++read 2048/2048 bytes at offset 12113920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12118016 ++read 2048/2048 bytes at offset 12118016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12122112 ++read 2048/2048 bytes at offset 12122112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12126208 ++read 2048/2048 bytes at offset 12126208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12130304 ++read 2048/2048 bytes at offset 12130304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12134400 ++read 2048/2048 bytes at offset 12134400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12138496 ++read 2048/2048 bytes at offset 12138496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12142592 ++read 2048/2048 bytes at offset 12142592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12146688 ++read 2048/2048 bytes at offset 12146688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12150784 ++read 2048/2048 bytes at offset 12150784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12154880 ++read 2048/2048 bytes at offset 12154880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12158976 ++read 2048/2048 bytes at offset 12158976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12163072 ++read 2048/2048 bytes at offset 12163072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12167168 ++read 2048/2048 bytes at offset 12167168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12171264 ++read 2048/2048 bytes at offset 12171264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12175360 ++read 2048/2048 bytes at offset 12175360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12179456 ++read 2048/2048 bytes at offset 12179456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12183552 ++read 2048/2048 bytes at offset 12183552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12187648 ++read 2048/2048 bytes at offset 12187648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12191744 ++read 2048/2048 bytes at offset 12191744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12195840 ++read 2048/2048 bytes at offset 12195840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12199936 ++read 2048/2048 bytes at offset 12199936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12204032 ++read 2048/2048 bytes at offset 12204032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12208128 ++read 2048/2048 bytes at offset 12208128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12212224 ++read 2048/2048 bytes at offset 12212224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12216320 ++read 2048/2048 bytes at offset 12216320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12220416 ++read 2048/2048 bytes at offset 12220416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12224512 ++read 2048/2048 bytes at offset 12224512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12228608 ++read 2048/2048 bytes at offset 12228608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12232704 ++read 2048/2048 bytes at offset 12232704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12236800 ++read 2048/2048 bytes at offset 12236800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12240896 ++read 2048/2048 bytes at offset 12240896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12244992 ++read 2048/2048 bytes at offset 12244992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12249088 ++read 2048/2048 bytes at offset 12249088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12253184 ++read 2048/2048 bytes at offset 12253184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12257280 ++read 2048/2048 bytes at offset 12257280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12261376 ++read 2048/2048 bytes at offset 12261376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12265472 ++read 2048/2048 bytes at offset 12265472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12269568 ++read 2048/2048 bytes at offset 12269568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12273664 ++read 2048/2048 bytes at offset 12273664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12277760 ++read 2048/2048 bytes at offset 12277760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12281856 ++read 2048/2048 bytes at offset 12281856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12285952 ++read 2048/2048 bytes at offset 12285952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12290048 ++read 2048/2048 bytes at offset 12290048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12294144 ++read 2048/2048 bytes at offset 12294144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12298240 ++read 2048/2048 bytes at offset 12298240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12302336 ++read 2048/2048 bytes at offset 12302336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12306432 ++read 2048/2048 bytes at offset 12306432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12310528 ++read 2048/2048 bytes at offset 12310528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12314624 ++read 2048/2048 bytes at offset 12314624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12318720 ++read 2048/2048 bytes at offset 12318720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12322816 ++read 2048/2048 bytes at offset 12322816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12326912 ++read 2048/2048 bytes at offset 12326912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12331008 ++read 2048/2048 bytes at offset 12331008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12335104 ++read 2048/2048 bytes at offset 12335104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12339200 ++read 2048/2048 bytes at offset 12339200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12343296 ++read 2048/2048 bytes at offset 12343296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12347392 ++read 2048/2048 bytes at offset 12347392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12351488 ++read 2048/2048 bytes at offset 12351488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12355584 ++read 2048/2048 bytes at offset 12355584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12359680 ++read 2048/2048 bytes at offset 12359680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12363776 ++read 2048/2048 bytes at offset 12363776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12367872 ++read 2048/2048 bytes at offset 12367872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12371968 ++read 2048/2048 bytes at offset 12371968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12376064 ++read 2048/2048 bytes at offset 12376064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12380160 ++read 2048/2048 bytes at offset 12380160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12384256 ++read 2048/2048 bytes at offset 12384256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12388352 ++read 2048/2048 bytes at offset 12388352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12392448 ++read 2048/2048 bytes at offset 12392448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12396544 ++read 2048/2048 bytes at offset 12396544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12400640 ++read 2048/2048 bytes at offset 12400640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12404736 ++read 2048/2048 bytes at offset 12404736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12408832 ++read 2048/2048 bytes at offset 12408832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12412928 ++read 2048/2048 bytes at offset 12412928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12417024 ++read 2048/2048 bytes at offset 12417024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12421120 ++read 2048/2048 bytes at offset 12421120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12425216 ++read 2048/2048 bytes at offset 12425216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12429312 ++read 2048/2048 bytes at offset 12429312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12433408 ++read 2048/2048 bytes at offset 12433408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12437504 ++read 2048/2048 bytes at offset 12437504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12441600 ++read 2048/2048 bytes at offset 12441600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12445696 ++read 2048/2048 bytes at offset 12445696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12449792 ++read 2048/2048 bytes at offset 12449792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12453888 ++read 2048/2048 bytes at offset 12453888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12457984 ++read 2048/2048 bytes at offset 12457984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12462080 ++read 2048/2048 bytes at offset 12462080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12466176 ++read 2048/2048 bytes at offset 12466176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12470272 ++read 2048/2048 bytes at offset 12470272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12474368 ++read 2048/2048 bytes at offset 12474368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12478464 ++read 2048/2048 bytes at offset 12478464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12482560 ++read 2048/2048 bytes at offset 12482560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12486656 ++read 2048/2048 bytes at offset 12486656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12490752 ++read 2048/2048 bytes at offset 12490752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12494848 ++read 2048/2048 bytes at offset 12494848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12498944 ++read 2048/2048 bytes at offset 12498944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12503040 ++read 2048/2048 bytes at offset 12503040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12507136 ++read 2048/2048 bytes at offset 12507136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12511232 ++read 2048/2048 bytes at offset 12511232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12515328 ++read 2048/2048 bytes at offset 12515328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12519424 ++read 2048/2048 bytes at offset 12519424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12523520 ++read 2048/2048 bytes at offset 12523520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12527616 ++read 2048/2048 bytes at offset 12527616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12531712 ++read 2048/2048 bytes at offset 12531712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12535808 ++read 2048/2048 bytes at offset 12535808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12539904 ++read 2048/2048 bytes at offset 12539904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12544000 ++read 2048/2048 bytes at offset 12544000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12548096 ++read 2048/2048 bytes at offset 12548096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12552192 ++read 2048/2048 bytes at offset 12552192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12556288 ++read 2048/2048 bytes at offset 12556288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12560384 ++read 2048/2048 bytes at offset 12560384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12564480 ++read 2048/2048 bytes at offset 12564480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12568576 ++read 2048/2048 bytes at offset 12568576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12572672 ++read 2048/2048 bytes at offset 12572672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12576768 ++read 2048/2048 bytes at offset 12576768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12580864 ++read 2048/2048 bytes at offset 12580864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 12582912 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 12582912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12587008 ++read 2048/2048 bytes at offset 12587008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12591104 ++read 2048/2048 bytes at offset 12591104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12595200 ++read 2048/2048 bytes at offset 12595200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12599296 ++read 2048/2048 bytes at offset 12599296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12603392 ++read 2048/2048 bytes at offset 12603392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12607488 ++read 2048/2048 bytes at offset 12607488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12611584 ++read 2048/2048 bytes at offset 12611584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12615680 ++read 2048/2048 bytes at offset 12615680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12619776 ++read 2048/2048 bytes at offset 12619776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12623872 ++read 2048/2048 bytes at offset 12623872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12627968 ++read 2048/2048 bytes at offset 12627968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12632064 ++read 2048/2048 bytes at offset 12632064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12636160 ++read 2048/2048 bytes at offset 12636160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12640256 ++read 2048/2048 bytes at offset 12640256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12644352 ++read 2048/2048 bytes at offset 12644352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12648448 ++read 2048/2048 bytes at offset 12648448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12652544 ++read 2048/2048 bytes at offset 12652544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12656640 ++read 2048/2048 bytes at offset 12656640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12660736 ++read 2048/2048 bytes at offset 12660736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12664832 ++read 2048/2048 bytes at offset 12664832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12668928 ++read 2048/2048 bytes at offset 12668928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12673024 ++read 2048/2048 bytes at offset 12673024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12677120 ++read 2048/2048 bytes at offset 12677120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12681216 ++read 2048/2048 bytes at offset 12681216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12685312 ++read 2048/2048 bytes at offset 12685312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12689408 ++read 2048/2048 bytes at offset 12689408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12693504 ++read 2048/2048 bytes at offset 12693504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12697600 ++read 2048/2048 bytes at offset 12697600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12701696 ++read 2048/2048 bytes at offset 12701696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12705792 ++read 2048/2048 bytes at offset 12705792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12709888 ++read 2048/2048 bytes at offset 12709888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12713984 ++read 2048/2048 bytes at offset 12713984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12718080 ++read 2048/2048 bytes at offset 12718080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12722176 ++read 2048/2048 bytes at offset 12722176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12726272 ++read 2048/2048 bytes at offset 12726272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12730368 ++read 2048/2048 bytes at offset 12730368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12734464 ++read 2048/2048 bytes at offset 12734464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12738560 ++read 2048/2048 bytes at offset 12738560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12742656 ++read 2048/2048 bytes at offset 12742656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12746752 ++read 2048/2048 bytes at offset 12746752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12750848 ++read 2048/2048 bytes at offset 12750848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12754944 ++read 2048/2048 bytes at offset 12754944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12759040 ++read 2048/2048 bytes at offset 12759040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12763136 ++read 2048/2048 bytes at offset 12763136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12767232 ++read 2048/2048 bytes at offset 12767232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12771328 ++read 2048/2048 bytes at offset 12771328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12775424 ++read 2048/2048 bytes at offset 12775424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12779520 ++read 2048/2048 bytes at offset 12779520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12783616 ++read 2048/2048 bytes at offset 12783616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12787712 ++read 2048/2048 bytes at offset 12787712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12791808 ++read 2048/2048 bytes at offset 12791808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12795904 ++read 2048/2048 bytes at offset 12795904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12800000 ++read 2048/2048 bytes at offset 12800000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12804096 ++read 2048/2048 bytes at offset 12804096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12808192 ++read 2048/2048 bytes at offset 12808192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12812288 ++read 2048/2048 bytes at offset 12812288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12816384 ++read 2048/2048 bytes at offset 12816384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12820480 ++read 2048/2048 bytes at offset 12820480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12824576 ++read 2048/2048 bytes at offset 12824576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12828672 ++read 2048/2048 bytes at offset 12828672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12832768 ++read 2048/2048 bytes at offset 12832768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12836864 ++read 2048/2048 bytes at offset 12836864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12840960 ++read 2048/2048 bytes at offset 12840960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12845056 ++read 2048/2048 bytes at offset 12845056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12849152 ++read 2048/2048 bytes at offset 12849152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12853248 ++read 2048/2048 bytes at offset 12853248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12857344 ++read 2048/2048 bytes at offset 12857344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12861440 ++read 2048/2048 bytes at offset 12861440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12865536 ++read 2048/2048 bytes at offset 12865536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12869632 ++read 2048/2048 bytes at offset 12869632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12873728 ++read 2048/2048 bytes at offset 12873728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12877824 ++read 2048/2048 bytes at offset 12877824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12881920 ++read 2048/2048 bytes at offset 12881920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12886016 ++read 2048/2048 bytes at offset 12886016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12890112 ++read 2048/2048 bytes at offset 12890112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12894208 ++read 2048/2048 bytes at offset 12894208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12898304 ++read 2048/2048 bytes at offset 12898304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12902400 ++read 2048/2048 bytes at offset 12902400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12906496 ++read 2048/2048 bytes at offset 12906496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12910592 ++read 2048/2048 bytes at offset 12910592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12914688 ++read 2048/2048 bytes at offset 12914688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12918784 ++read 2048/2048 bytes at offset 12918784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12922880 ++read 2048/2048 bytes at offset 12922880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12926976 ++read 2048/2048 bytes at offset 12926976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12931072 ++read 2048/2048 bytes at offset 12931072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12935168 ++read 2048/2048 bytes at offset 12935168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12939264 ++read 2048/2048 bytes at offset 12939264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12943360 ++read 2048/2048 bytes at offset 12943360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12947456 ++read 2048/2048 bytes at offset 12947456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12951552 ++read 2048/2048 bytes at offset 12951552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12955648 ++read 2048/2048 bytes at offset 12955648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12959744 ++read 2048/2048 bytes at offset 12959744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12963840 ++read 2048/2048 bytes at offset 12963840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12967936 ++read 2048/2048 bytes at offset 12967936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12972032 ++read 2048/2048 bytes at offset 12972032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12976128 ++read 2048/2048 bytes at offset 12976128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12980224 ++read 2048/2048 bytes at offset 12980224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12984320 ++read 2048/2048 bytes at offset 12984320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12988416 ++read 2048/2048 bytes at offset 12988416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12992512 ++read 2048/2048 bytes at offset 12992512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 12996608 ++read 2048/2048 bytes at offset 12996608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13000704 ++read 2048/2048 bytes at offset 13000704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13004800 ++read 2048/2048 bytes at offset 13004800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13008896 ++read 2048/2048 bytes at offset 13008896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13012992 ++read 2048/2048 bytes at offset 13012992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13017088 ++read 2048/2048 bytes at offset 13017088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13021184 ++read 2048/2048 bytes at offset 13021184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13025280 ++read 2048/2048 bytes at offset 13025280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13029376 ++read 2048/2048 bytes at offset 13029376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13033472 ++read 2048/2048 bytes at offset 13033472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13037568 ++read 2048/2048 bytes at offset 13037568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13041664 ++read 2048/2048 bytes at offset 13041664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13045760 ++read 2048/2048 bytes at offset 13045760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13049856 ++read 2048/2048 bytes at offset 13049856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13053952 ++read 2048/2048 bytes at offset 13053952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13058048 ++read 2048/2048 bytes at offset 13058048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13062144 ++read 2048/2048 bytes at offset 13062144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13066240 ++read 2048/2048 bytes at offset 13066240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13070336 ++read 2048/2048 bytes at offset 13070336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13074432 ++read 2048/2048 bytes at offset 13074432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13078528 ++read 2048/2048 bytes at offset 13078528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13082624 ++read 2048/2048 bytes at offset 13082624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13086720 ++read 2048/2048 bytes at offset 13086720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13090816 ++read 2048/2048 bytes at offset 13090816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13094912 ++read 2048/2048 bytes at offset 13094912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13099008 ++read 2048/2048 bytes at offset 13099008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13103104 ++read 2048/2048 bytes at offset 13103104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13107200 ++read 2048/2048 bytes at offset 13107200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13111296 ++read 2048/2048 bytes at offset 13111296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13115392 ++read 2048/2048 bytes at offset 13115392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13119488 ++read 2048/2048 bytes at offset 13119488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13123584 ++read 2048/2048 bytes at offset 13123584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13127680 ++read 2048/2048 bytes at offset 13127680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13131776 ++read 2048/2048 bytes at offset 13131776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13135872 ++read 2048/2048 bytes at offset 13135872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13139968 ++read 2048/2048 bytes at offset 13139968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13144064 ++read 2048/2048 bytes at offset 13144064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13148160 ++read 2048/2048 bytes at offset 13148160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13152256 ++read 2048/2048 bytes at offset 13152256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13156352 ++read 2048/2048 bytes at offset 13156352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13160448 ++read 2048/2048 bytes at offset 13160448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13164544 ++read 2048/2048 bytes at offset 13164544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13168640 ++read 2048/2048 bytes at offset 13168640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13172736 ++read 2048/2048 bytes at offset 13172736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13176832 ++read 2048/2048 bytes at offset 13176832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13180928 ++read 2048/2048 bytes at offset 13180928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13185024 ++read 2048/2048 bytes at offset 13185024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13189120 ++read 2048/2048 bytes at offset 13189120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13193216 ++read 2048/2048 bytes at offset 13193216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13197312 ++read 2048/2048 bytes at offset 13197312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13201408 ++read 2048/2048 bytes at offset 13201408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13205504 ++read 2048/2048 bytes at offset 13205504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13209600 ++read 2048/2048 bytes at offset 13209600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13213696 ++read 2048/2048 bytes at offset 13213696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13217792 ++read 2048/2048 bytes at offset 13217792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13221888 ++read 2048/2048 bytes at offset 13221888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13225984 ++read 2048/2048 bytes at offset 13225984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13230080 ++read 2048/2048 bytes at offset 13230080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13234176 ++read 2048/2048 bytes at offset 13234176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13238272 ++read 2048/2048 bytes at offset 13238272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13242368 ++read 2048/2048 bytes at offset 13242368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13246464 ++read 2048/2048 bytes at offset 13246464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13250560 ++read 2048/2048 bytes at offset 13250560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13254656 ++read 2048/2048 bytes at offset 13254656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13258752 ++read 2048/2048 bytes at offset 13258752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13262848 ++read 2048/2048 bytes at offset 13262848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13266944 ++read 2048/2048 bytes at offset 13266944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13271040 ++read 2048/2048 bytes at offset 13271040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13275136 ++read 2048/2048 bytes at offset 13275136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13279232 ++read 2048/2048 bytes at offset 13279232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13283328 ++read 2048/2048 bytes at offset 13283328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13287424 ++read 2048/2048 bytes at offset 13287424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13291520 ++read 2048/2048 bytes at offset 13291520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13295616 ++read 2048/2048 bytes at offset 13295616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13299712 ++read 2048/2048 bytes at offset 13299712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13303808 ++read 2048/2048 bytes at offset 13303808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13307904 ++read 2048/2048 bytes at offset 13307904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13312000 ++read 2048/2048 bytes at offset 13312000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13316096 ++read 2048/2048 bytes at offset 13316096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13320192 ++read 2048/2048 bytes at offset 13320192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13324288 ++read 2048/2048 bytes at offset 13324288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13328384 ++read 2048/2048 bytes at offset 13328384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13332480 ++read 2048/2048 bytes at offset 13332480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13336576 ++read 2048/2048 bytes at offset 13336576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13340672 ++read 2048/2048 bytes at offset 13340672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13344768 ++read 2048/2048 bytes at offset 13344768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13348864 ++read 2048/2048 bytes at offset 13348864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13352960 ++read 2048/2048 bytes at offset 13352960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13357056 ++read 2048/2048 bytes at offset 13357056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13361152 ++read 2048/2048 bytes at offset 13361152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13365248 ++read 2048/2048 bytes at offset 13365248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13369344 ++read 2048/2048 bytes at offset 13369344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13373440 ++read 2048/2048 bytes at offset 13373440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13377536 ++read 2048/2048 bytes at offset 13377536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13381632 ++read 2048/2048 bytes at offset 13381632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13385728 ++read 2048/2048 bytes at offset 13385728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13389824 ++read 2048/2048 bytes at offset 13389824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13393920 ++read 2048/2048 bytes at offset 13393920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13398016 ++read 2048/2048 bytes at offset 13398016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13402112 ++read 2048/2048 bytes at offset 13402112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13406208 ++read 2048/2048 bytes at offset 13406208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13410304 ++read 2048/2048 bytes at offset 13410304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13414400 ++read 2048/2048 bytes at offset 13414400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13418496 ++read 2048/2048 bytes at offset 13418496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13422592 ++read 2048/2048 bytes at offset 13422592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13426688 ++read 2048/2048 bytes at offset 13426688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13430784 ++read 2048/2048 bytes at offset 13430784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13434880 ++read 2048/2048 bytes at offset 13434880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13438976 ++read 2048/2048 bytes at offset 13438976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13443072 ++read 2048/2048 bytes at offset 13443072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13447168 ++read 2048/2048 bytes at offset 13447168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13451264 ++read 2048/2048 bytes at offset 13451264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13455360 ++read 2048/2048 bytes at offset 13455360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13459456 ++read 2048/2048 bytes at offset 13459456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13463552 ++read 2048/2048 bytes at offset 13463552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13467648 ++read 2048/2048 bytes at offset 13467648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13471744 ++read 2048/2048 bytes at offset 13471744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13475840 ++read 2048/2048 bytes at offset 13475840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13479936 ++read 2048/2048 bytes at offset 13479936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13484032 ++read 2048/2048 bytes at offset 13484032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13488128 ++read 2048/2048 bytes at offset 13488128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13492224 ++read 2048/2048 bytes at offset 13492224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13496320 ++read 2048/2048 bytes at offset 13496320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13500416 ++read 2048/2048 bytes at offset 13500416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13504512 ++read 2048/2048 bytes at offset 13504512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13508608 ++read 2048/2048 bytes at offset 13508608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13512704 ++read 2048/2048 bytes at offset 13512704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13516800 ++read 2048/2048 bytes at offset 13516800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13520896 ++read 2048/2048 bytes at offset 13520896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13524992 ++read 2048/2048 bytes at offset 13524992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13529088 ++read 2048/2048 bytes at offset 13529088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13533184 ++read 2048/2048 bytes at offset 13533184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13537280 ++read 2048/2048 bytes at offset 13537280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13541376 ++read 2048/2048 bytes at offset 13541376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13545472 ++read 2048/2048 bytes at offset 13545472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13549568 ++read 2048/2048 bytes at offset 13549568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13553664 ++read 2048/2048 bytes at offset 13553664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13557760 ++read 2048/2048 bytes at offset 13557760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13561856 ++read 2048/2048 bytes at offset 13561856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13565952 ++read 2048/2048 bytes at offset 13565952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13570048 ++read 2048/2048 bytes at offset 13570048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13574144 ++read 2048/2048 bytes at offset 13574144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13578240 ++read 2048/2048 bytes at offset 13578240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13582336 ++read 2048/2048 bytes at offset 13582336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13586432 ++read 2048/2048 bytes at offset 13586432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13590528 ++read 2048/2048 bytes at offset 13590528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13594624 ++read 2048/2048 bytes at offset 13594624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13598720 ++read 2048/2048 bytes at offset 13598720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13602816 ++read 2048/2048 bytes at offset 13602816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13606912 ++read 2048/2048 bytes at offset 13606912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13611008 ++read 2048/2048 bytes at offset 13611008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13615104 ++read 2048/2048 bytes at offset 13615104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13619200 ++read 2048/2048 bytes at offset 13619200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13623296 ++read 2048/2048 bytes at offset 13623296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13627392 ++read 2048/2048 bytes at offset 13627392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 13632512 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 13632512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13636608 ++read 2048/2048 bytes at offset 13636608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13640704 ++read 2048/2048 bytes at offset 13640704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13644800 ++read 2048/2048 bytes at offset 13644800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13648896 ++read 2048/2048 bytes at offset 13648896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13652992 ++read 2048/2048 bytes at offset 13652992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13657088 ++read 2048/2048 bytes at offset 13657088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13661184 ++read 2048/2048 bytes at offset 13661184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13665280 ++read 2048/2048 bytes at offset 13665280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13669376 ++read 2048/2048 bytes at offset 13669376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13673472 ++read 2048/2048 bytes at offset 13673472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13677568 ++read 2048/2048 bytes at offset 13677568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13681664 ++read 2048/2048 bytes at offset 13681664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13685760 ++read 2048/2048 bytes at offset 13685760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13689856 ++read 2048/2048 bytes at offset 13689856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13693952 ++read 2048/2048 bytes at offset 13693952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13698048 ++read 2048/2048 bytes at offset 13698048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13702144 ++read 2048/2048 bytes at offset 13702144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13706240 ++read 2048/2048 bytes at offset 13706240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13710336 ++read 2048/2048 bytes at offset 13710336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13714432 ++read 2048/2048 bytes at offset 13714432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13718528 ++read 2048/2048 bytes at offset 13718528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13722624 ++read 2048/2048 bytes at offset 13722624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13726720 ++read 2048/2048 bytes at offset 13726720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13730816 ++read 2048/2048 bytes at offset 13730816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13734912 ++read 2048/2048 bytes at offset 13734912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13739008 ++read 2048/2048 bytes at offset 13739008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13743104 ++read 2048/2048 bytes at offset 13743104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13747200 ++read 2048/2048 bytes at offset 13747200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13751296 ++read 2048/2048 bytes at offset 13751296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13755392 ++read 2048/2048 bytes at offset 13755392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13759488 ++read 2048/2048 bytes at offset 13759488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13763584 ++read 2048/2048 bytes at offset 13763584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13767680 ++read 2048/2048 bytes at offset 13767680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13771776 ++read 2048/2048 bytes at offset 13771776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13775872 ++read 2048/2048 bytes at offset 13775872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13779968 ++read 2048/2048 bytes at offset 13779968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13784064 ++read 2048/2048 bytes at offset 13784064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13788160 ++read 2048/2048 bytes at offset 13788160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13792256 ++read 2048/2048 bytes at offset 13792256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13796352 ++read 2048/2048 bytes at offset 13796352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13800448 ++read 2048/2048 bytes at offset 13800448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13804544 ++read 2048/2048 bytes at offset 13804544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13808640 ++read 2048/2048 bytes at offset 13808640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13812736 ++read 2048/2048 bytes at offset 13812736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13816832 ++read 2048/2048 bytes at offset 13816832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13820928 ++read 2048/2048 bytes at offset 13820928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13825024 ++read 2048/2048 bytes at offset 13825024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13829120 ++read 2048/2048 bytes at offset 13829120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13833216 ++read 2048/2048 bytes at offset 13833216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13837312 ++read 2048/2048 bytes at offset 13837312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13841408 ++read 2048/2048 bytes at offset 13841408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13845504 ++read 2048/2048 bytes at offset 13845504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13849600 ++read 2048/2048 bytes at offset 13849600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13853696 ++read 2048/2048 bytes at offset 13853696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13857792 ++read 2048/2048 bytes at offset 13857792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13861888 ++read 2048/2048 bytes at offset 13861888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13865984 ++read 2048/2048 bytes at offset 13865984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13870080 ++read 2048/2048 bytes at offset 13870080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13874176 ++read 2048/2048 bytes at offset 13874176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13878272 ++read 2048/2048 bytes at offset 13878272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13882368 ++read 2048/2048 bytes at offset 13882368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13886464 ++read 2048/2048 bytes at offset 13886464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13890560 ++read 2048/2048 bytes at offset 13890560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13894656 ++read 2048/2048 bytes at offset 13894656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13898752 ++read 2048/2048 bytes at offset 13898752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13902848 ++read 2048/2048 bytes at offset 13902848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13906944 ++read 2048/2048 bytes at offset 13906944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13911040 ++read 2048/2048 bytes at offset 13911040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13915136 ++read 2048/2048 bytes at offset 13915136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13919232 ++read 2048/2048 bytes at offset 13919232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13923328 ++read 2048/2048 bytes at offset 13923328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13927424 ++read 2048/2048 bytes at offset 13927424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13931520 ++read 2048/2048 bytes at offset 13931520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13935616 ++read 2048/2048 bytes at offset 13935616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13939712 ++read 2048/2048 bytes at offset 13939712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13943808 ++read 2048/2048 bytes at offset 13943808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13947904 ++read 2048/2048 bytes at offset 13947904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13952000 ++read 2048/2048 bytes at offset 13952000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13956096 ++read 2048/2048 bytes at offset 13956096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13960192 ++read 2048/2048 bytes at offset 13960192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13964288 ++read 2048/2048 bytes at offset 13964288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13968384 ++read 2048/2048 bytes at offset 13968384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13972480 ++read 2048/2048 bytes at offset 13972480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13976576 ++read 2048/2048 bytes at offset 13976576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13980672 ++read 2048/2048 bytes at offset 13980672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13984768 ++read 2048/2048 bytes at offset 13984768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13988864 ++read 2048/2048 bytes at offset 13988864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13992960 ++read 2048/2048 bytes at offset 13992960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 13997056 ++read 2048/2048 bytes at offset 13997056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14001152 ++read 2048/2048 bytes at offset 14001152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14005248 ++read 2048/2048 bytes at offset 14005248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14009344 ++read 2048/2048 bytes at offset 14009344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14013440 ++read 2048/2048 bytes at offset 14013440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14017536 ++read 2048/2048 bytes at offset 14017536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14021632 ++read 2048/2048 bytes at offset 14021632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14025728 ++read 2048/2048 bytes at offset 14025728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14029824 ++read 2048/2048 bytes at offset 14029824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14033920 ++read 2048/2048 bytes at offset 14033920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14038016 ++read 2048/2048 bytes at offset 14038016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14042112 ++read 2048/2048 bytes at offset 14042112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14046208 ++read 2048/2048 bytes at offset 14046208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14050304 ++read 2048/2048 bytes at offset 14050304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14054400 ++read 2048/2048 bytes at offset 14054400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14058496 ++read 2048/2048 bytes at offset 14058496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14062592 ++read 2048/2048 bytes at offset 14062592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14066688 ++read 2048/2048 bytes at offset 14066688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14070784 ++read 2048/2048 bytes at offset 14070784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14074880 ++read 2048/2048 bytes at offset 14074880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14078976 ++read 2048/2048 bytes at offset 14078976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14083072 ++read 2048/2048 bytes at offset 14083072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14087168 ++read 2048/2048 bytes at offset 14087168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14091264 ++read 2048/2048 bytes at offset 14091264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14095360 ++read 2048/2048 bytes at offset 14095360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14099456 ++read 2048/2048 bytes at offset 14099456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14103552 ++read 2048/2048 bytes at offset 14103552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14107648 ++read 2048/2048 bytes at offset 14107648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14111744 ++read 2048/2048 bytes at offset 14111744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14115840 ++read 2048/2048 bytes at offset 14115840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14119936 ++read 2048/2048 bytes at offset 14119936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14124032 ++read 2048/2048 bytes at offset 14124032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14128128 ++read 2048/2048 bytes at offset 14128128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14132224 ++read 2048/2048 bytes at offset 14132224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14136320 ++read 2048/2048 bytes at offset 14136320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14140416 ++read 2048/2048 bytes at offset 14140416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14144512 ++read 2048/2048 bytes at offset 14144512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14148608 ++read 2048/2048 bytes at offset 14148608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14152704 ++read 2048/2048 bytes at offset 14152704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14156800 ++read 2048/2048 bytes at offset 14156800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14160896 ++read 2048/2048 bytes at offset 14160896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14164992 ++read 2048/2048 bytes at offset 14164992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14169088 ++read 2048/2048 bytes at offset 14169088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14173184 ++read 2048/2048 bytes at offset 14173184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14177280 ++read 2048/2048 bytes at offset 14177280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14181376 ++read 2048/2048 bytes at offset 14181376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14185472 ++read 2048/2048 bytes at offset 14185472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14189568 ++read 2048/2048 bytes at offset 14189568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14193664 ++read 2048/2048 bytes at offset 14193664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14197760 ++read 2048/2048 bytes at offset 14197760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14201856 ++read 2048/2048 bytes at offset 14201856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14205952 ++read 2048/2048 bytes at offset 14205952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14210048 ++read 2048/2048 bytes at offset 14210048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14214144 ++read 2048/2048 bytes at offset 14214144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14218240 ++read 2048/2048 bytes at offset 14218240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14222336 ++read 2048/2048 bytes at offset 14222336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14226432 ++read 2048/2048 bytes at offset 14226432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14230528 ++read 2048/2048 bytes at offset 14230528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14234624 ++read 2048/2048 bytes at offset 14234624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14238720 ++read 2048/2048 bytes at offset 14238720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14242816 ++read 2048/2048 bytes at offset 14242816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14246912 ++read 2048/2048 bytes at offset 14246912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14251008 ++read 2048/2048 bytes at offset 14251008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14255104 ++read 2048/2048 bytes at offset 14255104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14259200 ++read 2048/2048 bytes at offset 14259200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14263296 ++read 2048/2048 bytes at offset 14263296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14267392 ++read 2048/2048 bytes at offset 14267392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14271488 ++read 2048/2048 bytes at offset 14271488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14275584 ++read 2048/2048 bytes at offset 14275584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14279680 ++read 2048/2048 bytes at offset 14279680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14283776 ++read 2048/2048 bytes at offset 14283776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14287872 ++read 2048/2048 bytes at offset 14287872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14291968 ++read 2048/2048 bytes at offset 14291968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14296064 ++read 2048/2048 bytes at offset 14296064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14300160 ++read 2048/2048 bytes at offset 14300160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14304256 ++read 2048/2048 bytes at offset 14304256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14308352 ++read 2048/2048 bytes at offset 14308352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14312448 ++read 2048/2048 bytes at offset 14312448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14316544 ++read 2048/2048 bytes at offset 14316544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14320640 ++read 2048/2048 bytes at offset 14320640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14324736 ++read 2048/2048 bytes at offset 14324736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14328832 ++read 2048/2048 bytes at offset 14328832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14332928 ++read 2048/2048 bytes at offset 14332928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14337024 ++read 2048/2048 bytes at offset 14337024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14341120 ++read 2048/2048 bytes at offset 14341120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14345216 ++read 2048/2048 bytes at offset 14345216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14349312 ++read 2048/2048 bytes at offset 14349312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14353408 ++read 2048/2048 bytes at offset 14353408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14357504 ++read 2048/2048 bytes at offset 14357504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14361600 ++read 2048/2048 bytes at offset 14361600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14365696 ++read 2048/2048 bytes at offset 14365696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14369792 ++read 2048/2048 bytes at offset 14369792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14373888 ++read 2048/2048 bytes at offset 14373888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14377984 ++read 2048/2048 bytes at offset 14377984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14382080 ++read 2048/2048 bytes at offset 14382080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14386176 ++read 2048/2048 bytes at offset 14386176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14390272 ++read 2048/2048 bytes at offset 14390272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14394368 ++read 2048/2048 bytes at offset 14394368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14398464 ++read 2048/2048 bytes at offset 14398464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14402560 ++read 2048/2048 bytes at offset 14402560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14406656 ++read 2048/2048 bytes at offset 14406656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14410752 ++read 2048/2048 bytes at offset 14410752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14414848 ++read 2048/2048 bytes at offset 14414848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14418944 ++read 2048/2048 bytes at offset 14418944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14423040 ++read 2048/2048 bytes at offset 14423040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14427136 ++read 2048/2048 bytes at offset 14427136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14431232 ++read 2048/2048 bytes at offset 14431232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14435328 ++read 2048/2048 bytes at offset 14435328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14439424 ++read 2048/2048 bytes at offset 14439424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14443520 ++read 2048/2048 bytes at offset 14443520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14447616 ++read 2048/2048 bytes at offset 14447616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14451712 ++read 2048/2048 bytes at offset 14451712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14455808 ++read 2048/2048 bytes at offset 14455808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14459904 ++read 2048/2048 bytes at offset 14459904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14464000 ++read 2048/2048 bytes at offset 14464000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14468096 ++read 2048/2048 bytes at offset 14468096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14472192 ++read 2048/2048 bytes at offset 14472192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14476288 ++read 2048/2048 bytes at offset 14476288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14480384 ++read 2048/2048 bytes at offset 14480384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14484480 ++read 2048/2048 bytes at offset 14484480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14488576 ++read 2048/2048 bytes at offset 14488576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14492672 ++read 2048/2048 bytes at offset 14492672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14496768 ++read 2048/2048 bytes at offset 14496768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14500864 ++read 2048/2048 bytes at offset 14500864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14504960 ++read 2048/2048 bytes at offset 14504960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14509056 ++read 2048/2048 bytes at offset 14509056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14513152 ++read 2048/2048 bytes at offset 14513152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14517248 ++read 2048/2048 bytes at offset 14517248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14521344 ++read 2048/2048 bytes at offset 14521344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14525440 ++read 2048/2048 bytes at offset 14525440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14529536 ++read 2048/2048 bytes at offset 14529536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14533632 ++read 2048/2048 bytes at offset 14533632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14537728 ++read 2048/2048 bytes at offset 14537728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14541824 ++read 2048/2048 bytes at offset 14541824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14545920 ++read 2048/2048 bytes at offset 14545920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14550016 ++read 2048/2048 bytes at offset 14550016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14554112 ++read 2048/2048 bytes at offset 14554112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14558208 ++read 2048/2048 bytes at offset 14558208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14562304 ++read 2048/2048 bytes at offset 14562304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14566400 ++read 2048/2048 bytes at offset 14566400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14570496 ++read 2048/2048 bytes at offset 14570496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14574592 ++read 2048/2048 bytes at offset 14574592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14578688 ++read 2048/2048 bytes at offset 14578688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14582784 ++read 2048/2048 bytes at offset 14582784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14586880 ++read 2048/2048 bytes at offset 14586880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14590976 ++read 2048/2048 bytes at offset 14590976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14595072 ++read 2048/2048 bytes at offset 14595072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14599168 ++read 2048/2048 bytes at offset 14599168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14603264 ++read 2048/2048 bytes at offset 14603264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14607360 ++read 2048/2048 bytes at offset 14607360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14611456 ++read 2048/2048 bytes at offset 14611456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14615552 ++read 2048/2048 bytes at offset 14615552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14619648 ++read 2048/2048 bytes at offset 14619648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14623744 ++read 2048/2048 bytes at offset 14623744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14627840 ++read 2048/2048 bytes at offset 14627840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14631936 ++read 2048/2048 bytes at offset 14631936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14636032 ++read 2048/2048 bytes at offset 14636032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14640128 ++read 2048/2048 bytes at offset 14640128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14644224 ++read 2048/2048 bytes at offset 14644224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14648320 ++read 2048/2048 bytes at offset 14648320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14652416 ++read 2048/2048 bytes at offset 14652416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14656512 ++read 2048/2048 bytes at offset 14656512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14660608 ++read 2048/2048 bytes at offset 14660608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14664704 ++read 2048/2048 bytes at offset 14664704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14668800 ++read 2048/2048 bytes at offset 14668800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14672896 ++read 2048/2048 bytes at offset 14672896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 14676992 ++read 2048/2048 bytes at offset 14676992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 14682112 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 14682112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14694400 ++read 8192/8192 bytes at offset 14694400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14706688 ++read 8192/8192 bytes at offset 14706688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14718976 ++read 8192/8192 bytes at offset 14718976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14731264 ++read 8192/8192 bytes at offset 14731264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14743552 ++read 8192/8192 bytes at offset 14743552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14755840 ++read 8192/8192 bytes at offset 14755840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14768128 ++read 8192/8192 bytes at offset 14768128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14780416 ++read 8192/8192 bytes at offset 14780416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14792704 ++read 8192/8192 bytes at offset 14792704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14804992 ++read 8192/8192 bytes at offset 14804992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14817280 ++read 8192/8192 bytes at offset 14817280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14829568 ++read 8192/8192 bytes at offset 14829568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14841856 ++read 8192/8192 bytes at offset 14841856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14854144 ++read 8192/8192 bytes at offset 14854144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14866432 ++read 8192/8192 bytes at offset 14866432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14878720 ++read 8192/8192 bytes at offset 14878720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14891008 ++read 8192/8192 bytes at offset 14891008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14903296 ++read 8192/8192 bytes at offset 14903296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14915584 ++read 8192/8192 bytes at offset 14915584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14927872 ++read 8192/8192 bytes at offset 14927872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14940160 ++read 8192/8192 bytes at offset 14940160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14952448 ++read 8192/8192 bytes at offset 14952448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14964736 ++read 8192/8192 bytes at offset 14964736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14977024 ++read 8192/8192 bytes at offset 14977024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 14989312 ++read 8192/8192 bytes at offset 14989312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15001600 ++read 8192/8192 bytes at offset 15001600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15013888 ++read 8192/8192 bytes at offset 15013888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15026176 ++read 8192/8192 bytes at offset 15026176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15038464 ++read 8192/8192 bytes at offset 15038464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15050752 ++read 8192/8192 bytes at offset 15050752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15063040 ++read 8192/8192 bytes at offset 15063040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15075328 ++read 8192/8192 bytes at offset 15075328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15087616 ++read 8192/8192 bytes at offset 15087616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15099904 ++read 8192/8192 bytes at offset 15099904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15112192 ++read 8192/8192 bytes at offset 15112192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15124480 ++read 8192/8192 bytes at offset 15124480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15136768 ++read 8192/8192 bytes at offset 15136768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15149056 ++read 8192/8192 bytes at offset 15149056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15161344 ++read 8192/8192 bytes at offset 15161344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15173632 ++read 8192/8192 bytes at offset 15173632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15185920 ++read 8192/8192 bytes at offset 15185920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15198208 ++read 8192/8192 bytes at offset 15198208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15210496 ++read 8192/8192 bytes at offset 15210496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15222784 ++read 8192/8192 bytes at offset 15222784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15235072 ++read 8192/8192 bytes at offset 15235072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15247360 ++read 8192/8192 bytes at offset 15247360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15259648 ++read 8192/8192 bytes at offset 15259648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15271936 ++read 8192/8192 bytes at offset 15271936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15284224 ++read 8192/8192 bytes at offset 15284224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15296512 ++read 8192/8192 bytes at offset 15296512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15308800 ++read 8192/8192 bytes at offset 15308800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15321088 ++read 8192/8192 bytes at offset 15321088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15333376 ++read 8192/8192 bytes at offset 15333376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15345664 ++read 8192/8192 bytes at offset 15345664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15357952 ++read 8192/8192 bytes at offset 15357952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15370240 ++read 8192/8192 bytes at offset 15370240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15382528 ++read 8192/8192 bytes at offset 15382528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15394816 ++read 8192/8192 bytes at offset 15394816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15407104 ++read 8192/8192 bytes at offset 15407104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15419392 ++read 8192/8192 bytes at offset 15419392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15431680 ++read 8192/8192 bytes at offset 15431680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15443968 ++read 8192/8192 bytes at offset 15443968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 15456256 ++read 8192/8192 bytes at offset 15456256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 16771072 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 16771072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 18870272 ++read 12288/12288 bytes at offset 18870272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 20969472 ++read 12288/12288 bytes at offset 20969472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 23068672 ++read 12288/12288 bytes at offset 23068672 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 25167872 ++read 12288/12288 bytes at offset 25167872 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 27267072 ++read 12288/12288 bytes at offset 27267072 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 29366272 ++read 12288/12288 bytes at offset 29366272 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 31465472 ++read 12288/12288 bytes at offset 31465472 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + At offset 4294967296: + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295114752 ++wrote 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295118848 ++wrote 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295122944 ++wrote 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295127040 ++wrote 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295131136 ++wrote 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295135232 ++wrote 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295139328 ++wrote 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295143424 ++wrote 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295147520 ++wrote 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295151616 ++wrote 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295155712 ++wrote 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295159808 ++wrote 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295163904 ++wrote 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295168000 ++wrote 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295172096 ++wrote 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295176192 ++wrote 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295180288 ++wrote 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295184384 ++wrote 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295188480 ++wrote 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295192576 ++wrote 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295196672 ++wrote 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295200768 ++wrote 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295204864 ++wrote 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295208960 ++wrote 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295213056 ++wrote 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295217152 ++wrote 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295221248 ++wrote 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295225344 ++wrote 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295229440 ++wrote 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295233536 ++wrote 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295237632 ++wrote 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295241728 ++wrote 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295245824 ++wrote 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295249920 ++wrote 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295254016 ++wrote 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295258112 ++wrote 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295262208 ++wrote 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295266304 ++wrote 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295270400 ++wrote 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295274496 ++wrote 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295278592 ++wrote 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295282688 ++wrote 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295286784 ++wrote 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295290880 ++wrote 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295294976 ++wrote 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295299072 ++wrote 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295303168 ++wrote 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295307264 ++wrote 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295311360 ++wrote 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295315456 ++wrote 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295319552 ++wrote 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295323648 ++wrote 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295327744 ++wrote 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295331840 ++wrote 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295335936 ++wrote 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295340032 ++wrote 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295344128 ++wrote 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295348224 ++wrote 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295352320 ++wrote 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295356416 ++wrote 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295360512 ++wrote 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295364608 ++wrote 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295368704 ++wrote 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295372800 ++wrote 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295376896 ++wrote 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295380992 ++wrote 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295385088 ++wrote 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295389184 ++wrote 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295393280 ++wrote 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295397376 ++wrote 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295401472 ++wrote 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295405568 ++wrote 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295409664 ++wrote 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295413760 ++wrote 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295417856 ++wrote 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295421952 ++wrote 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295426048 ++wrote 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295430144 ++wrote 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295434240 ++wrote 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295438336 ++wrote 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295442432 ++wrote 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295446528 ++wrote 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295450624 ++wrote 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295454720 ++wrote 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295458816 ++wrote 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295462912 ++wrote 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295467008 ++wrote 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295471104 ++wrote 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295475200 ++wrote 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295479296 ++wrote 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295483392 ++wrote 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295487488 ++wrote 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295491584 ++wrote 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295495680 ++wrote 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295499776 ++wrote 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295503872 ++wrote 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295507968 ++wrote 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295512064 ++wrote 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295516160 ++wrote 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295520256 ++wrote 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295524352 ++wrote 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295528448 ++wrote 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295532544 ++wrote 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295536640 ++wrote 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295540736 ++wrote 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295544832 ++wrote 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295548928 ++wrote 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295553024 ++wrote 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295557120 ++wrote 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295561216 ++wrote 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295565312 ++wrote 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295569408 ++wrote 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295573504 ++wrote 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295577600 ++wrote 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295581696 ++wrote 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295585792 ++wrote 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295589888 ++wrote 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295593984 ++wrote 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295598080 ++wrote 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295602176 ++wrote 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295606272 ++wrote 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295610368 ++wrote 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295614464 ++wrote 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295618560 ++wrote 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295622656 ++wrote 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295626752 ++wrote 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295630848 ++wrote 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295634944 ++wrote 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295639040 ++wrote 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295643136 ++wrote 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295647232 ++wrote 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295651328 ++wrote 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295655424 ++wrote 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295659520 ++wrote 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295663616 ++wrote 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295667712 ++wrote 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295671808 ++wrote 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295675904 ++wrote 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295680000 ++wrote 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295684096 ++wrote 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295688192 ++wrote 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295692288 ++wrote 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295696384 ++wrote 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295700480 ++wrote 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295704576 ++wrote 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295708672 ++wrote 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295712768 ++wrote 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295716864 ++wrote 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295720960 ++wrote 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295725056 ++wrote 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295729152 ++wrote 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295733248 ++wrote 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295737344 ++wrote 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295741440 ++wrote 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295745536 ++wrote 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295749632 ++wrote 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295753728 ++wrote 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295757824 ++wrote 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295761920 ++wrote 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295766016 ++wrote 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295770112 ++wrote 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295774208 ++wrote 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295778304 ++wrote 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295782400 ++wrote 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295786496 ++wrote 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295790592 ++wrote 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295794688 ++wrote 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295798784 ++wrote 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295802880 ++wrote 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295806976 ++wrote 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295811072 ++wrote 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295815168 ++wrote 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295819264 ++wrote 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295823360 ++wrote 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295827456 ++wrote 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295831552 ++wrote 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295835648 ++wrote 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295839744 ++wrote 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295843840 ++wrote 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295847936 ++wrote 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295852032 ++wrote 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295856128 ++wrote 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295860224 ++wrote 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295864320 ++wrote 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295868416 ++wrote 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295872512 ++wrote 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295876608 ++wrote 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295880704 ++wrote 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295884800 ++wrote 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295888896 ++wrote 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295892992 ++wrote 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295897088 ++wrote 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295901184 ++wrote 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295905280 ++wrote 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295909376 ++wrote 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295913472 ++wrote 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295917568 ++wrote 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295921664 ++wrote 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295925760 ++wrote 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295929856 ++wrote 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295933952 ++wrote 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295938048 ++wrote 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295942144 ++wrote 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295946240 ++wrote 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295950336 ++wrote 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295954432 ++wrote 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295958528 ++wrote 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295962624 ++wrote 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295966720 ++wrote 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295970816 ++wrote 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295974912 ++wrote 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295979008 ++wrote 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295983104 ++wrote 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295987200 ++wrote 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295991296 ++wrote 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295995392 ++wrote 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295999488 ++wrote 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296003584 ++wrote 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296007680 ++wrote 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4296011776 ++wrote 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++wrote 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296022016 ++wrote 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296026112 ++wrote 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296030208 ++wrote 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296034304 ++wrote 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296038400 ++wrote 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296042496 ++wrote 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296046592 ++wrote 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296050688 ++wrote 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296054784 ++wrote 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296058880 ++wrote 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296062976 ++wrote 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296067072 ++wrote 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296071168 ++wrote 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296075264 ++wrote 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296079360 ++wrote 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296083456 ++wrote 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296087552 ++wrote 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296091648 ++wrote 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296095744 ++wrote 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296099840 ++wrote 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296103936 ++wrote 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296108032 ++wrote 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296112128 ++wrote 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296116224 ++wrote 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296120320 ++wrote 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296124416 ++wrote 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296128512 ++wrote 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296132608 ++wrote 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296136704 ++wrote 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296140800 ++wrote 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296144896 ++wrote 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296148992 ++wrote 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296153088 ++wrote 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296157184 ++wrote 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296161280 ++wrote 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296165376 ++wrote 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296169472 ++wrote 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296173568 ++wrote 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296177664 ++wrote 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296181760 ++wrote 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296185856 ++wrote 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296189952 ++wrote 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296194048 ++wrote 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296198144 ++wrote 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296202240 ++wrote 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296206336 ++wrote 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296210432 ++wrote 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296214528 ++wrote 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296218624 ++wrote 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296222720 ++wrote 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296226816 ++wrote 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296230912 ++wrote 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296235008 ++wrote 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296239104 ++wrote 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296243200 ++wrote 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296247296 ++wrote 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296251392 ++wrote 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296255488 ++wrote 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296259584 ++wrote 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296263680 ++wrote 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296267776 ++wrote 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296271872 ++wrote 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296275968 ++wrote 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296280064 ++wrote 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296284160 ++wrote 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296288256 ++wrote 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296292352 ++wrote 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296296448 ++wrote 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296300544 ++wrote 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296304640 ++wrote 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296308736 ++wrote 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296312832 ++wrote 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296316928 ++wrote 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296321024 ++wrote 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296325120 ++wrote 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296329216 ++wrote 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296333312 ++wrote 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296337408 ++wrote 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296341504 ++wrote 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296345600 ++wrote 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296349696 ++wrote 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296353792 ++wrote 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296357888 ++wrote 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296361984 ++wrote 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296366080 ++wrote 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296370176 ++wrote 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296374272 ++wrote 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296378368 ++wrote 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296382464 ++wrote 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296386560 ++wrote 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296390656 ++wrote 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296394752 ++wrote 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296398848 ++wrote 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296402944 ++wrote 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296407040 ++wrote 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296411136 ++wrote 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296415232 ++wrote 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296419328 ++wrote 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296423424 ++wrote 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296427520 ++wrote 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296431616 ++wrote 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296435712 ++wrote 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296439808 ++wrote 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296443904 ++wrote 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296448000 ++wrote 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296452096 ++wrote 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296456192 ++wrote 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296460288 ++wrote 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296464384 ++wrote 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296468480 ++wrote 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296472576 ++wrote 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296476672 ++wrote 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296480768 ++wrote 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296484864 ++wrote 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296488960 ++wrote 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296493056 ++wrote 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296497152 ++wrote 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296501248 ++wrote 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296505344 ++wrote 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296509440 ++wrote 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296513536 ++wrote 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296517632 ++wrote 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296521728 ++wrote 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296525824 ++wrote 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296529920 ++wrote 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296534016 ++wrote 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296538112 ++wrote 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296542208 ++wrote 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296546304 ++wrote 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296550400 ++wrote 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296554496 ++wrote 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296558592 ++wrote 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296562688 ++wrote 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296566784 ++wrote 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296570880 ++wrote 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296574976 ++wrote 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296579072 ++wrote 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296583168 ++wrote 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296587264 ++wrote 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296591360 ++wrote 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296595456 ++wrote 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296599552 ++wrote 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296603648 ++wrote 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296607744 ++wrote 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296611840 ++wrote 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296615936 ++wrote 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296620032 ++wrote 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296624128 ++wrote 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296628224 ++wrote 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296632320 ++wrote 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296636416 ++wrote 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296640512 ++wrote 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296644608 ++wrote 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296648704 ++wrote 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296652800 ++wrote 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296656896 ++wrote 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296660992 ++wrote 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296665088 ++wrote 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296669184 ++wrote 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296673280 ++wrote 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296677376 ++wrote 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296681472 ++wrote 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296685568 ++wrote 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296689664 ++wrote 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296693760 ++wrote 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296697856 ++wrote 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296701952 ++wrote 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296706048 ++wrote 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296710144 ++wrote 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296714240 ++wrote 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296718336 ++wrote 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296722432 ++wrote 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296726528 ++wrote 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296730624 ++wrote 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296734720 ++wrote 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296738816 ++wrote 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296742912 ++wrote 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296747008 ++wrote 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296751104 ++wrote 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296755200 ++wrote 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296759296 ++wrote 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296763392 ++wrote 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296767488 ++wrote 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296771584 ++wrote 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296775680 ++wrote 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296779776 ++wrote 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296783872 ++wrote 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296787968 ++wrote 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296792064 ++wrote 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296796160 ++wrote 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296800256 ++wrote 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296804352 ++wrote 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296808448 ++wrote 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296812544 ++wrote 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296816640 ++wrote 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296820736 ++wrote 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296824832 ++wrote 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296828928 ++wrote 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296833024 ++wrote 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296837120 ++wrote 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296841216 ++wrote 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296845312 ++wrote 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296849408 ++wrote 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296853504 ++wrote 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296857600 ++wrote 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296861696 ++wrote 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296865792 ++wrote 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296869888 ++wrote 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296873984 ++wrote 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296878080 ++wrote 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296882176 ++wrote 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296886272 ++wrote 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296890368 ++wrote 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296894464 ++wrote 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296898560 ++wrote 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296902656 ++wrote 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296906752 ++wrote 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296910848 ++wrote 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296914944 ++wrote 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296919040 ++wrote 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296923136 ++wrote 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296927232 ++wrote 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296931328 ++wrote 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296935424 ++wrote 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296939520 ++wrote 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296943616 ++wrote 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296947712 ++wrote 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296951808 ++wrote 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296955904 ++wrote 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296960000 ++wrote 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296964096 ++wrote 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296968192 ++wrote 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296972288 ++wrote 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296976384 ++wrote 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296980480 ++wrote 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296984576 ++wrote 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296988672 ++wrote 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296992768 ++wrote 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4296996864 ++wrote 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297000960 ++wrote 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297005056 ++wrote 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297009152 ++wrote 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297013248 ++wrote 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297017344 ++wrote 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297021440 ++wrote 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297025536 ++wrote 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297029632 ++wrote 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297033728 ++wrote 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297037824 ++wrote 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297041920 ++wrote 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297046016 ++wrote 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297050112 ++wrote 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297054208 ++wrote 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297058304 ++wrote 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297062400 ++wrote 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++wrote 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297068544 ++wrote 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297072640 ++wrote 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297076736 ++wrote 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297080832 ++wrote 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297084928 ++wrote 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297089024 ++wrote 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297093120 ++wrote 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297097216 ++wrote 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297101312 ++wrote 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297105408 ++wrote 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297109504 ++wrote 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297113600 ++wrote 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297117696 ++wrote 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297121792 ++wrote 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297125888 ++wrote 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297129984 ++wrote 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297134080 ++wrote 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297138176 ++wrote 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297142272 ++wrote 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297146368 ++wrote 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297150464 ++wrote 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297154560 ++wrote 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297158656 ++wrote 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297162752 ++wrote 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297166848 ++wrote 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297170944 ++wrote 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297175040 ++wrote 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297179136 ++wrote 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297183232 ++wrote 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297187328 ++wrote 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297191424 ++wrote 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297195520 ++wrote 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297199616 ++wrote 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297203712 ++wrote 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297207808 ++wrote 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297211904 ++wrote 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297216000 ++wrote 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297220096 ++wrote 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297224192 ++wrote 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297228288 ++wrote 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297232384 ++wrote 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297236480 ++wrote 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297240576 ++wrote 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297244672 ++wrote 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297248768 ++wrote 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297252864 ++wrote 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297256960 ++wrote 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297261056 ++wrote 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297265152 ++wrote 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297269248 ++wrote 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297273344 ++wrote 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297277440 ++wrote 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297281536 ++wrote 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297285632 ++wrote 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297289728 ++wrote 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297293824 ++wrote 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297297920 ++wrote 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297302016 ++wrote 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297306112 ++wrote 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297310208 ++wrote 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297314304 ++wrote 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297318400 ++wrote 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297322496 ++wrote 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297326592 ++wrote 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297330688 ++wrote 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297334784 ++wrote 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297338880 ++wrote 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297342976 ++wrote 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297347072 ++wrote 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297351168 ++wrote 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297355264 ++wrote 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297359360 ++wrote 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297363456 ++wrote 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297367552 ++wrote 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297371648 ++wrote 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297375744 ++wrote 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297379840 ++wrote 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297383936 ++wrote 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297388032 ++wrote 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297392128 ++wrote 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297396224 ++wrote 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297400320 ++wrote 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297404416 ++wrote 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297408512 ++wrote 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297412608 ++wrote 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297416704 ++wrote 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297420800 ++wrote 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297424896 ++wrote 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297428992 ++wrote 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297433088 ++wrote 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297437184 ++wrote 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297441280 ++wrote 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297445376 ++wrote 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297449472 ++wrote 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297453568 ++wrote 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297457664 ++wrote 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297461760 ++wrote 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297465856 ++wrote 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297469952 ++wrote 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297474048 ++wrote 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297478144 ++wrote 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297482240 ++wrote 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297486336 ++wrote 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297490432 ++wrote 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297494528 ++wrote 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297498624 ++wrote 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297502720 ++wrote 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297506816 ++wrote 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297510912 ++wrote 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297515008 ++wrote 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297519104 ++wrote 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297523200 ++wrote 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297527296 ++wrote 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297531392 ++wrote 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297535488 ++wrote 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297539584 ++wrote 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297543680 ++wrote 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297547776 ++wrote 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297551872 ++wrote 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297555968 ++wrote 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297560064 ++wrote 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297564160 ++wrote 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297568256 ++wrote 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297572352 ++wrote 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297576448 ++wrote 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297580544 ++wrote 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297584640 ++wrote 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297588736 ++wrote 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297592832 ++wrote 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297596928 ++wrote 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297601024 ++wrote 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297605120 ++wrote 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297609216 ++wrote 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297613312 ++wrote 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297617408 ++wrote 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297621504 ++wrote 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297625600 ++wrote 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297629696 ++wrote 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297633792 ++wrote 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297637888 ++wrote 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297641984 ++wrote 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297646080 ++wrote 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297650176 ++wrote 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297654272 ++wrote 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297658368 ++wrote 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297662464 ++wrote 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297666560 ++wrote 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297670656 ++wrote 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297674752 ++wrote 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297678848 ++wrote 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297682944 ++wrote 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297687040 ++wrote 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297691136 ++wrote 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297695232 ++wrote 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297699328 ++wrote 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297703424 ++wrote 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297707520 ++wrote 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297711616 ++wrote 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297715712 ++wrote 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297719808 ++wrote 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297723904 ++wrote 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297728000 ++wrote 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297732096 ++wrote 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297736192 ++wrote 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297740288 ++wrote 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297744384 ++wrote 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297748480 ++wrote 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297752576 ++wrote 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297756672 ++wrote 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297760768 ++wrote 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297764864 ++wrote 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297768960 ++wrote 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297773056 ++wrote 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297777152 ++wrote 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297781248 ++wrote 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297785344 ++wrote 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297789440 ++wrote 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297793536 ++wrote 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297797632 ++wrote 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297801728 ++wrote 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297805824 ++wrote 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297809920 ++wrote 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297814016 ++wrote 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297818112 ++wrote 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297822208 ++wrote 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297826304 ++wrote 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297830400 ++wrote 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297834496 ++wrote 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297838592 ++wrote 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297842688 ++wrote 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297846784 ++wrote 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297850880 ++wrote 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297854976 ++wrote 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297859072 ++wrote 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297863168 ++wrote 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297867264 ++wrote 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297871360 ++wrote 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297875456 ++wrote 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297879552 ++wrote 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297883648 ++wrote 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297887744 ++wrote 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297891840 ++wrote 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297895936 ++wrote 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297900032 ++wrote 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297904128 ++wrote 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297908224 ++wrote 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297912320 ++wrote 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297916416 ++wrote 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297920512 ++wrote 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297924608 ++wrote 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297928704 ++wrote 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297932800 ++wrote 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297936896 ++wrote 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297940992 ++wrote 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297945088 ++wrote 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297949184 ++wrote 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297953280 ++wrote 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297957376 ++wrote 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297961472 ++wrote 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297965568 ++wrote 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297969664 ++wrote 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297973760 ++wrote 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297977856 ++wrote 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297981952 ++wrote 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297986048 ++wrote 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297990144 ++wrote 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297994240 ++wrote 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4297998336 ++wrote 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298002432 ++wrote 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298006528 ++wrote 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298010624 ++wrote 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298014720 ++wrote 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298018816 ++wrote 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298022912 ++wrote 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298027008 ++wrote 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298031104 ++wrote 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298035200 ++wrote 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298039296 ++wrote 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298043392 ++wrote 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298047488 ++wrote 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298051584 ++wrote 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298055680 ++wrote 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298059776 ++wrote 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298063872 ++wrote 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298067968 ++wrote 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298072064 ++wrote 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298076160 ++wrote 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298080256 ++wrote 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298084352 ++wrote 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298088448 ++wrote 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298092544 ++wrote 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298096640 ++wrote 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298100736 ++wrote 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298104832 ++wrote 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298108928 ++wrote 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> wrote 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++wrote 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298118144 ++wrote 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298122240 ++wrote 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298126336 ++wrote 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298130432 ++wrote 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298134528 ++wrote 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298138624 ++wrote 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298142720 ++wrote 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298146816 ++wrote 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298150912 ++wrote 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298155008 ++wrote 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298159104 ++wrote 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298163200 ++wrote 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298167296 ++wrote 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298171392 ++wrote 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298175488 ++wrote 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298179584 ++wrote 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298183680 ++wrote 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298187776 ++wrote 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298191872 ++wrote 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298195968 ++wrote 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298200064 ++wrote 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298204160 ++wrote 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298208256 ++wrote 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298212352 ++wrote 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298216448 ++wrote 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298220544 ++wrote 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298224640 ++wrote 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298228736 ++wrote 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298232832 ++wrote 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298236928 ++wrote 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298241024 ++wrote 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298245120 ++wrote 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298249216 ++wrote 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298253312 ++wrote 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298257408 ++wrote 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298261504 ++wrote 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298265600 ++wrote 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298269696 ++wrote 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298273792 ++wrote 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298277888 ++wrote 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298281984 ++wrote 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298286080 ++wrote 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298290176 ++wrote 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298294272 ++wrote 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298298368 ++wrote 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298302464 ++wrote 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298306560 ++wrote 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298310656 ++wrote 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298314752 ++wrote 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298318848 ++wrote 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298322944 ++wrote 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298327040 ++wrote 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298331136 ++wrote 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298335232 ++wrote 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298339328 ++wrote 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298343424 ++wrote 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298347520 ++wrote 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298351616 ++wrote 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298355712 ++wrote 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298359808 ++wrote 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298363904 ++wrote 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298368000 ++wrote 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298372096 ++wrote 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298376192 ++wrote 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298380288 ++wrote 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298384384 ++wrote 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298388480 ++wrote 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298392576 ++wrote 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298396672 ++wrote 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298400768 ++wrote 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298404864 ++wrote 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298408960 ++wrote 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298413056 ++wrote 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298417152 ++wrote 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298421248 ++wrote 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298425344 ++wrote 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298429440 ++wrote 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298433536 ++wrote 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298437632 ++wrote 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298441728 ++wrote 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298445824 ++wrote 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298449920 ++wrote 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298454016 ++wrote 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298458112 ++wrote 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298462208 ++wrote 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298466304 ++wrote 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298470400 ++wrote 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298474496 ++wrote 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298478592 ++wrote 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298482688 ++wrote 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298486784 ++wrote 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298490880 ++wrote 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298494976 ++wrote 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298499072 ++wrote 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298503168 ++wrote 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298507264 ++wrote 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298511360 ++wrote 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298515456 ++wrote 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298519552 ++wrote 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298523648 ++wrote 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298527744 ++wrote 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298531840 ++wrote 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298535936 ++wrote 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298540032 ++wrote 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298544128 ++wrote 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298548224 ++wrote 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298552320 ++wrote 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298556416 ++wrote 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298560512 ++wrote 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298564608 ++wrote 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298568704 ++wrote 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298572800 ++wrote 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298576896 ++wrote 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298580992 ++wrote 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298585088 ++wrote 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298589184 ++wrote 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298593280 ++wrote 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298597376 ++wrote 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298601472 ++wrote 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298605568 ++wrote 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298609664 ++wrote 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298613760 ++wrote 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298617856 ++wrote 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298621952 ++wrote 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298626048 ++wrote 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298630144 ++wrote 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298634240 ++wrote 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298638336 ++wrote 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298642432 ++wrote 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298646528 ++wrote 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298650624 ++wrote 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298654720 ++wrote 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298658816 ++wrote 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298662912 ++wrote 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298667008 ++wrote 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298671104 ++wrote 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298675200 ++wrote 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298679296 ++wrote 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298683392 ++wrote 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298687488 ++wrote 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298691584 ++wrote 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298695680 ++wrote 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298699776 ++wrote 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298703872 ++wrote 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298707968 ++wrote 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298712064 ++wrote 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298716160 ++wrote 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298720256 ++wrote 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298724352 ++wrote 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298728448 ++wrote 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298732544 ++wrote 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298736640 ++wrote 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298740736 ++wrote 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298744832 ++wrote 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298748928 ++wrote 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298753024 ++wrote 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298757120 ++wrote 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298761216 ++wrote 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298765312 ++wrote 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298769408 ++wrote 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298773504 ++wrote 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298777600 ++wrote 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298781696 ++wrote 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298785792 ++wrote 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298789888 ++wrote 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298793984 ++wrote 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298798080 ++wrote 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298802176 ++wrote 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298806272 ++wrote 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298810368 ++wrote 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298814464 ++wrote 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298818560 ++wrote 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298822656 ++wrote 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298826752 ++wrote 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298830848 ++wrote 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298834944 ++wrote 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298839040 ++wrote 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298843136 ++wrote 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298847232 ++wrote 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298851328 ++wrote 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298855424 ++wrote 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298859520 ++wrote 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298863616 ++wrote 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298867712 ++wrote 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298871808 ++wrote 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298875904 ++wrote 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298880000 ++wrote 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298884096 ++wrote 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298888192 ++wrote 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298892288 ++wrote 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298896384 ++wrote 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298900480 ++wrote 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298904576 ++wrote 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298908672 ++wrote 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298912768 ++wrote 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298916864 ++wrote 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298920960 ++wrote 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298925056 ++wrote 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298929152 ++wrote 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298933248 ++wrote 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298937344 ++wrote 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298941440 ++wrote 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298945536 ++wrote 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298949632 ++wrote 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298953728 ++wrote 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298957824 ++wrote 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298961920 ++wrote 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298966016 ++wrote 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298970112 ++wrote 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298974208 ++wrote 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298978304 ++wrote 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298982400 ++wrote 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298986496 ++wrote 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298990592 ++wrote 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298994688 ++wrote 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4298998784 ++wrote 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299002880 ++wrote 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299006976 ++wrote 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299011072 ++wrote 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299015168 ++wrote 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299019264 ++wrote 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299023360 ++wrote 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299027456 ++wrote 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299031552 ++wrote 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299035648 ++wrote 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299039744 ++wrote 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299043840 ++wrote 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299047936 ++wrote 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299052032 ++wrote 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299056128 ++wrote 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299060224 ++wrote 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299064320 ++wrote 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299068416 ++wrote 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299072512 ++wrote 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299076608 ++wrote 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299080704 ++wrote 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299084800 ++wrote 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299088896 ++wrote 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299092992 ++wrote 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299097088 ++wrote 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299101184 ++wrote 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299105280 ++wrote 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299109376 ++wrote 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299113472 ++wrote 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299117568 ++wrote 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299121664 ++wrote 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299125760 ++wrote 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299129856 ++wrote 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299133952 ++wrote 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299138048 ++wrote 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299142144 ++wrote 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299146240 ++wrote 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299150336 ++wrote 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299154432 ++wrote 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4299158528 ++wrote 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> wrote 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++wrote 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299175936 ++wrote 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299188224 ++wrote 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299200512 ++wrote 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299212800 ++wrote 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299225088 ++wrote 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299237376 ++wrote 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299249664 ++wrote 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299261952 ++wrote 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299274240 ++wrote 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299286528 ++wrote 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299298816 ++wrote 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299311104 ++wrote 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299323392 ++wrote 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299335680 ++wrote 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299347968 ++wrote 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299360256 ++wrote 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299372544 ++wrote 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299384832 ++wrote 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299397120 ++wrote 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299409408 ++wrote 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299421696 ++wrote 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299433984 ++wrote 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299446272 ++wrote 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299458560 ++wrote 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299470848 ++wrote 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299483136 ++wrote 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299495424 ++wrote 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299507712 ++wrote 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299520000 ++wrote 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299532288 ++wrote 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299544576 ++wrote 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299556864 ++wrote 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299569152 ++wrote 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299581440 ++wrote 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299593728 ++wrote 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299606016 ++wrote 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299618304 ++wrote 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299630592 ++wrote 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299642880 ++wrote 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299655168 ++wrote 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299667456 ++wrote 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299679744 ++wrote 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299692032 ++wrote 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299704320 ++wrote 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299716608 ++wrote 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299728896 ++wrote 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299741184 ++wrote 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299753472 ++wrote 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299765760 ++wrote 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299778048 ++wrote 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299790336 ++wrote 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299802624 ++wrote 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299814912 ++wrote 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299827200 ++wrote 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299839488 ++wrote 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299851776 ++wrote 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299864064 ++wrote 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299876352 ++wrote 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299888640 ++wrote 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299900928 ++wrote 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299913216 ++wrote 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299925504 ++wrote 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4299937792 ++wrote 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4303351808 ++wrote 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4305451008 ++wrote 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4307550208 ++wrote 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4309649408 ++wrote 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4311748608 ++wrote 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4313847808 ++wrote 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4315947008 ++wrote 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295114752 ++read 4096/4096 bytes at offset 4295114752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295118848 ++read 4096/4096 bytes at offset 4295118848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295122944 ++read 4096/4096 bytes at offset 4295122944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295127040 ++read 4096/4096 bytes at offset 4295127040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295131136 ++read 4096/4096 bytes at offset 4295131136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295135232 ++read 4096/4096 bytes at offset 4295135232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295139328 ++read 4096/4096 bytes at offset 4295139328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295143424 ++read 4096/4096 bytes at offset 4295143424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295147520 ++read 4096/4096 bytes at offset 4295147520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295151616 ++read 4096/4096 bytes at offset 4295151616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295155712 ++read 4096/4096 bytes at offset 4295155712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295159808 ++read 4096/4096 bytes at offset 4295159808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295163904 ++read 4096/4096 bytes at offset 4295163904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295168000 ++read 4096/4096 bytes at offset 4295168000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295172096 ++read 4096/4096 bytes at offset 4295172096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295176192 ++read 4096/4096 bytes at offset 4295176192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295180288 ++read 4096/4096 bytes at offset 4295180288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295184384 ++read 4096/4096 bytes at offset 4295184384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295188480 ++read 4096/4096 bytes at offset 4295188480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295192576 ++read 4096/4096 bytes at offset 4295192576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295196672 ++read 4096/4096 bytes at offset 4295196672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295200768 ++read 4096/4096 bytes at offset 4295200768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295204864 ++read 4096/4096 bytes at offset 4295204864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295208960 ++read 4096/4096 bytes at offset 4295208960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295213056 ++read 4096/4096 bytes at offset 4295213056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295217152 ++read 4096/4096 bytes at offset 4295217152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295221248 ++read 4096/4096 bytes at offset 4295221248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295225344 ++read 4096/4096 bytes at offset 4295225344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295229440 ++read 4096/4096 bytes at offset 4295229440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295233536 ++read 4096/4096 bytes at offset 4295233536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295237632 ++read 4096/4096 bytes at offset 4295237632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295241728 ++read 4096/4096 bytes at offset 4295241728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295245824 ++read 4096/4096 bytes at offset 4295245824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295249920 ++read 4096/4096 bytes at offset 4295249920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295254016 ++read 4096/4096 bytes at offset 4295254016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295258112 ++read 4096/4096 bytes at offset 4295258112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295262208 ++read 4096/4096 bytes at offset 4295262208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295266304 ++read 4096/4096 bytes at offset 4295266304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295270400 ++read 4096/4096 bytes at offset 4295270400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295274496 ++read 4096/4096 bytes at offset 4295274496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295278592 ++read 4096/4096 bytes at offset 4295278592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295282688 ++read 4096/4096 bytes at offset 4295282688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295286784 ++read 4096/4096 bytes at offset 4295286784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295290880 ++read 4096/4096 bytes at offset 4295290880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295294976 ++read 4096/4096 bytes at offset 4295294976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295299072 ++read 4096/4096 bytes at offset 4295299072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295303168 ++read 4096/4096 bytes at offset 4295303168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295307264 ++read 4096/4096 bytes at offset 4295307264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295311360 ++read 4096/4096 bytes at offset 4295311360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295315456 ++read 4096/4096 bytes at offset 4295315456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295319552 ++read 4096/4096 bytes at offset 4295319552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295323648 ++read 4096/4096 bytes at offset 4295323648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295327744 ++read 4096/4096 bytes at offset 4295327744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295331840 ++read 4096/4096 bytes at offset 4295331840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295335936 ++read 4096/4096 bytes at offset 4295335936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295340032 ++read 4096/4096 bytes at offset 4295340032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295344128 ++read 4096/4096 bytes at offset 4295344128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295348224 ++read 4096/4096 bytes at offset 4295348224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295352320 ++read 4096/4096 bytes at offset 4295352320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295356416 ++read 4096/4096 bytes at offset 4295356416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295360512 ++read 4096/4096 bytes at offset 4295360512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295364608 ++read 4096/4096 bytes at offset 4295364608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295368704 ++read 4096/4096 bytes at offset 4295368704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295372800 ++read 4096/4096 bytes at offset 4295372800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295376896 ++read 4096/4096 bytes at offset 4295376896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295380992 ++read 4096/4096 bytes at offset 4295380992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295385088 ++read 4096/4096 bytes at offset 4295385088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295389184 ++read 4096/4096 bytes at offset 4295389184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295393280 ++read 4096/4096 bytes at offset 4295393280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295397376 ++read 4096/4096 bytes at offset 4295397376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295401472 ++read 4096/4096 bytes at offset 4295401472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295405568 ++read 4096/4096 bytes at offset 4295405568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295409664 ++read 4096/4096 bytes at offset 4295409664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295413760 ++read 4096/4096 bytes at offset 4295413760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295417856 ++read 4096/4096 bytes at offset 4295417856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295421952 ++read 4096/4096 bytes at offset 4295421952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295426048 ++read 4096/4096 bytes at offset 4295426048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295430144 ++read 4096/4096 bytes at offset 4295430144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295434240 ++read 4096/4096 bytes at offset 4295434240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295438336 ++read 4096/4096 bytes at offset 4295438336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295442432 ++read 4096/4096 bytes at offset 4295442432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295446528 ++read 4096/4096 bytes at offset 4295446528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295450624 ++read 4096/4096 bytes at offset 4295450624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295454720 ++read 4096/4096 bytes at offset 4295454720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295458816 ++read 4096/4096 bytes at offset 4295458816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295462912 ++read 4096/4096 bytes at offset 4295462912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295467008 ++read 4096/4096 bytes at offset 4295467008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295471104 ++read 4096/4096 bytes at offset 4295471104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295475200 ++read 4096/4096 bytes at offset 4295475200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295479296 ++read 4096/4096 bytes at offset 4295479296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295483392 ++read 4096/4096 bytes at offset 4295483392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295487488 ++read 4096/4096 bytes at offset 4295487488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295491584 ++read 4096/4096 bytes at offset 4295491584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295495680 ++read 4096/4096 bytes at offset 4295495680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295499776 ++read 4096/4096 bytes at offset 4295499776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295503872 ++read 4096/4096 bytes at offset 4295503872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295507968 ++read 4096/4096 bytes at offset 4295507968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295512064 ++read 4096/4096 bytes at offset 4295512064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295516160 ++read 4096/4096 bytes at offset 4295516160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295520256 ++read 4096/4096 bytes at offset 4295520256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295524352 ++read 4096/4096 bytes at offset 4295524352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295528448 ++read 4096/4096 bytes at offset 4295528448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295532544 ++read 4096/4096 bytes at offset 4295532544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295536640 ++read 4096/4096 bytes at offset 4295536640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295540736 ++read 4096/4096 bytes at offset 4295540736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295544832 ++read 4096/4096 bytes at offset 4295544832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295548928 ++read 4096/4096 bytes at offset 4295548928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295553024 ++read 4096/4096 bytes at offset 4295553024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295557120 ++read 4096/4096 bytes at offset 4295557120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295561216 ++read 4096/4096 bytes at offset 4295561216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295565312 ++read 4096/4096 bytes at offset 4295565312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295569408 ++read 4096/4096 bytes at offset 4295569408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295573504 ++read 4096/4096 bytes at offset 4295573504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295577600 ++read 4096/4096 bytes at offset 4295577600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295581696 ++read 4096/4096 bytes at offset 4295581696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295585792 ++read 4096/4096 bytes at offset 4295585792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295589888 ++read 4096/4096 bytes at offset 4295589888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295593984 ++read 4096/4096 bytes at offset 4295593984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295598080 ++read 4096/4096 bytes at offset 4295598080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295602176 ++read 4096/4096 bytes at offset 4295602176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295606272 ++read 4096/4096 bytes at offset 4295606272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295610368 ++read 4096/4096 bytes at offset 4295610368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295614464 ++read 4096/4096 bytes at offset 4295614464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295618560 ++read 4096/4096 bytes at offset 4295618560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295622656 ++read 4096/4096 bytes at offset 4295622656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295626752 ++read 4096/4096 bytes at offset 4295626752 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295630848 ++read 4096/4096 bytes at offset 4295630848 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295634944 ++read 4096/4096 bytes at offset 4295634944 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295639040 ++read 4096/4096 bytes at offset 4295639040 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295643136 ++read 4096/4096 bytes at offset 4295643136 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295647232 ++read 4096/4096 bytes at offset 4295647232 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295651328 ++read 4096/4096 bytes at offset 4295651328 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295655424 ++read 4096/4096 bytes at offset 4295655424 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295659520 ++read 4096/4096 bytes at offset 4295659520 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295663616 ++read 4096/4096 bytes at offset 4295663616 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295667712 ++read 4096/4096 bytes at offset 4295667712 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295671808 ++read 4096/4096 bytes at offset 4295671808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295675904 ++read 4096/4096 bytes at offset 4295675904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295680000 ++read 4096/4096 bytes at offset 4295680000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295684096 ++read 4096/4096 bytes at offset 4295684096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295688192 ++read 4096/4096 bytes at offset 4295688192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295692288 ++read 4096/4096 bytes at offset 4295692288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295696384 ++read 4096/4096 bytes at offset 4295696384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295700480 ++read 4096/4096 bytes at offset 4295700480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295704576 ++read 4096/4096 bytes at offset 4295704576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295708672 ++read 4096/4096 bytes at offset 4295708672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295712768 ++read 4096/4096 bytes at offset 4295712768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295716864 ++read 4096/4096 bytes at offset 4295716864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295720960 ++read 4096/4096 bytes at offset 4295720960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295725056 ++read 4096/4096 bytes at offset 4295725056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295729152 ++read 4096/4096 bytes at offset 4295729152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295733248 ++read 4096/4096 bytes at offset 4295733248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295737344 ++read 4096/4096 bytes at offset 4295737344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295741440 ++read 4096/4096 bytes at offset 4295741440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295745536 ++read 4096/4096 bytes at offset 4295745536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295749632 ++read 4096/4096 bytes at offset 4295749632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295753728 ++read 4096/4096 bytes at offset 4295753728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295757824 ++read 4096/4096 bytes at offset 4295757824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295761920 ++read 4096/4096 bytes at offset 4295761920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295766016 ++read 4096/4096 bytes at offset 4295766016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295770112 ++read 4096/4096 bytes at offset 4295770112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295774208 ++read 4096/4096 bytes at offset 4295774208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295778304 ++read 4096/4096 bytes at offset 4295778304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295782400 ++read 4096/4096 bytes at offset 4295782400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295786496 ++read 4096/4096 bytes at offset 4295786496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295790592 ++read 4096/4096 bytes at offset 4295790592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295794688 ++read 4096/4096 bytes at offset 4295794688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295798784 ++read 4096/4096 bytes at offset 4295798784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295802880 ++read 4096/4096 bytes at offset 4295802880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295806976 ++read 4096/4096 bytes at offset 4295806976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295811072 ++read 4096/4096 bytes at offset 4295811072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295815168 ++read 4096/4096 bytes at offset 4295815168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295819264 ++read 4096/4096 bytes at offset 4295819264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295823360 ++read 4096/4096 bytes at offset 4295823360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295827456 ++read 4096/4096 bytes at offset 4295827456 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295831552 ++read 4096/4096 bytes at offset 4295831552 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295835648 ++read 4096/4096 bytes at offset 4295835648 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295839744 ++read 4096/4096 bytes at offset 4295839744 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295843840 ++read 4096/4096 bytes at offset 4295843840 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295847936 ++read 4096/4096 bytes at offset 4295847936 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295852032 ++read 4096/4096 bytes at offset 4295852032 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295856128 ++read 4096/4096 bytes at offset 4295856128 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295860224 ++read 4096/4096 bytes at offset 4295860224 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295864320 ++read 4096/4096 bytes at offset 4295864320 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295868416 ++read 4096/4096 bytes at offset 4295868416 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295872512 ++read 4096/4096 bytes at offset 4295872512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295876608 ++read 4096/4096 bytes at offset 4295876608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295880704 ++read 4096/4096 bytes at offset 4295880704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295884800 ++read 4096/4096 bytes at offset 4295884800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295888896 ++read 4096/4096 bytes at offset 4295888896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295892992 ++read 4096/4096 bytes at offset 4295892992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295897088 ++read 4096/4096 bytes at offset 4295897088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295901184 ++read 4096/4096 bytes at offset 4295901184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295905280 ++read 4096/4096 bytes at offset 4295905280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295909376 ++read 4096/4096 bytes at offset 4295909376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295913472 ++read 4096/4096 bytes at offset 4295913472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295917568 ++read 4096/4096 bytes at offset 4295917568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295921664 ++read 4096/4096 bytes at offset 4295921664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295925760 ++read 4096/4096 bytes at offset 4295925760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295929856 ++read 4096/4096 bytes at offset 4295929856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295933952 ++read 4096/4096 bytes at offset 4295933952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295938048 ++read 4096/4096 bytes at offset 4295938048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295942144 ++read 4096/4096 bytes at offset 4295942144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295946240 ++read 4096/4096 bytes at offset 4295946240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295950336 ++read 4096/4096 bytes at offset 4295950336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295954432 ++read 4096/4096 bytes at offset 4295954432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295958528 ++read 4096/4096 bytes at offset 4295958528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295962624 ++read 4096/4096 bytes at offset 4295962624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295966720 ++read 4096/4096 bytes at offset 4295966720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295970816 ++read 4096/4096 bytes at offset 4295970816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295974912 ++read 4096/4096 bytes at offset 4295974912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295979008 ++read 4096/4096 bytes at offset 4295979008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295983104 ++read 4096/4096 bytes at offset 4295983104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295987200 ++read 4096/4096 bytes at offset 4295987200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295991296 ++read 4096/4096 bytes at offset 4295991296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295995392 ++read 4096/4096 bytes at offset 4295995392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295999488 ++read 4096/4096 bytes at offset 4295999488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296003584 ++read 4096/4096 bytes at offset 4296003584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296007680 ++read 4096/4096 bytes at offset 4296007680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4296011776 ++read 4096/4096 bytes at offset 4296011776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 2048/2048 bytes at offset 4296017920 ++=== IO: pattern 4 ++read 2048/2048 bytes at offset 4296017920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296022016 ++read 2048/2048 bytes at offset 4296022016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296026112 ++read 2048/2048 bytes at offset 4296026112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296030208 ++read 2048/2048 bytes at offset 4296030208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296034304 ++read 2048/2048 bytes at offset 4296034304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296038400 ++read 2048/2048 bytes at offset 4296038400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296042496 ++read 2048/2048 bytes at offset 4296042496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296046592 ++read 2048/2048 bytes at offset 4296046592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296050688 ++read 2048/2048 bytes at offset 4296050688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296054784 ++read 2048/2048 bytes at offset 4296054784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296058880 ++read 2048/2048 bytes at offset 4296058880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296062976 ++read 2048/2048 bytes at offset 4296062976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296067072 ++read 2048/2048 bytes at offset 4296067072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296071168 ++read 2048/2048 bytes at offset 4296071168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296075264 ++read 2048/2048 bytes at offset 4296075264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296079360 ++read 2048/2048 bytes at offset 4296079360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296083456 ++read 2048/2048 bytes at offset 4296083456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296087552 ++read 2048/2048 bytes at offset 4296087552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296091648 ++read 2048/2048 bytes at offset 4296091648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296095744 ++read 2048/2048 bytes at offset 4296095744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296099840 ++read 2048/2048 bytes at offset 4296099840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296103936 ++read 2048/2048 bytes at offset 4296103936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296108032 ++read 2048/2048 bytes at offset 4296108032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296112128 ++read 2048/2048 bytes at offset 4296112128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296116224 ++read 2048/2048 bytes at offset 4296116224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296120320 ++read 2048/2048 bytes at offset 4296120320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296124416 ++read 2048/2048 bytes at offset 4296124416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296128512 ++read 2048/2048 bytes at offset 4296128512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296132608 ++read 2048/2048 bytes at offset 4296132608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296136704 ++read 2048/2048 bytes at offset 4296136704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296140800 ++read 2048/2048 bytes at offset 4296140800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296144896 ++read 2048/2048 bytes at offset 4296144896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296148992 ++read 2048/2048 bytes at offset 4296148992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296153088 ++read 2048/2048 bytes at offset 4296153088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296157184 ++read 2048/2048 bytes at offset 4296157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296161280 ++read 2048/2048 bytes at offset 4296161280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296165376 ++read 2048/2048 bytes at offset 4296165376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296169472 ++read 2048/2048 bytes at offset 4296169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296173568 ++read 2048/2048 bytes at offset 4296173568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296177664 ++read 2048/2048 bytes at offset 4296177664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296181760 ++read 2048/2048 bytes at offset 4296181760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296185856 ++read 2048/2048 bytes at offset 4296185856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296189952 ++read 2048/2048 bytes at offset 4296189952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296194048 ++read 2048/2048 bytes at offset 4296194048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296198144 ++read 2048/2048 bytes at offset 4296198144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296202240 ++read 2048/2048 bytes at offset 4296202240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296206336 ++read 2048/2048 bytes at offset 4296206336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296210432 ++read 2048/2048 bytes at offset 4296210432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296214528 ++read 2048/2048 bytes at offset 4296214528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296218624 ++read 2048/2048 bytes at offset 4296218624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296222720 ++read 2048/2048 bytes at offset 4296222720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296226816 ++read 2048/2048 bytes at offset 4296226816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296230912 ++read 2048/2048 bytes at offset 4296230912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296235008 ++read 2048/2048 bytes at offset 4296235008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296239104 ++read 2048/2048 bytes at offset 4296239104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296243200 ++read 2048/2048 bytes at offset 4296243200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296247296 ++read 2048/2048 bytes at offset 4296247296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296251392 ++read 2048/2048 bytes at offset 4296251392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296255488 ++read 2048/2048 bytes at offset 4296255488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296259584 ++read 2048/2048 bytes at offset 4296259584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296263680 ++read 2048/2048 bytes at offset 4296263680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296267776 ++read 2048/2048 bytes at offset 4296267776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296271872 ++read 2048/2048 bytes at offset 4296271872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296275968 ++read 2048/2048 bytes at offset 4296275968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296280064 ++read 2048/2048 bytes at offset 4296280064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296284160 ++read 2048/2048 bytes at offset 4296284160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296288256 ++read 2048/2048 bytes at offset 4296288256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296292352 ++read 2048/2048 bytes at offset 4296292352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296296448 ++read 2048/2048 bytes at offset 4296296448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296300544 ++read 2048/2048 bytes at offset 4296300544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296304640 ++read 2048/2048 bytes at offset 4296304640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296308736 ++read 2048/2048 bytes at offset 4296308736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296312832 ++read 2048/2048 bytes at offset 4296312832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296316928 ++read 2048/2048 bytes at offset 4296316928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296321024 ++read 2048/2048 bytes at offset 4296321024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296325120 ++read 2048/2048 bytes at offset 4296325120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296329216 ++read 2048/2048 bytes at offset 4296329216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296333312 ++read 2048/2048 bytes at offset 4296333312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296337408 ++read 2048/2048 bytes at offset 4296337408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296341504 ++read 2048/2048 bytes at offset 4296341504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296345600 ++read 2048/2048 bytes at offset 4296345600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296349696 ++read 2048/2048 bytes at offset 4296349696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296353792 ++read 2048/2048 bytes at offset 4296353792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296357888 ++read 2048/2048 bytes at offset 4296357888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296361984 ++read 2048/2048 bytes at offset 4296361984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296366080 ++read 2048/2048 bytes at offset 4296366080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296370176 ++read 2048/2048 bytes at offset 4296370176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296374272 ++read 2048/2048 bytes at offset 4296374272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296378368 ++read 2048/2048 bytes at offset 4296378368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296382464 ++read 2048/2048 bytes at offset 4296382464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296386560 ++read 2048/2048 bytes at offset 4296386560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296390656 ++read 2048/2048 bytes at offset 4296390656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296394752 ++read 2048/2048 bytes at offset 4296394752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296398848 ++read 2048/2048 bytes at offset 4296398848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296402944 ++read 2048/2048 bytes at offset 4296402944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296407040 ++read 2048/2048 bytes at offset 4296407040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296411136 ++read 2048/2048 bytes at offset 4296411136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296415232 ++read 2048/2048 bytes at offset 4296415232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296419328 ++read 2048/2048 bytes at offset 4296419328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296423424 ++read 2048/2048 bytes at offset 4296423424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296427520 ++read 2048/2048 bytes at offset 4296427520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296431616 ++read 2048/2048 bytes at offset 4296431616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296435712 ++read 2048/2048 bytes at offset 4296435712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296439808 ++read 2048/2048 bytes at offset 4296439808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296443904 ++read 2048/2048 bytes at offset 4296443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296448000 ++read 2048/2048 bytes at offset 4296448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296452096 ++read 2048/2048 bytes at offset 4296452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296456192 ++read 2048/2048 bytes at offset 4296456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296460288 ++read 2048/2048 bytes at offset 4296460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296464384 ++read 2048/2048 bytes at offset 4296464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296468480 ++read 2048/2048 bytes at offset 4296468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296472576 ++read 2048/2048 bytes at offset 4296472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296476672 ++read 2048/2048 bytes at offset 4296476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296480768 ++read 2048/2048 bytes at offset 4296480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296484864 ++read 2048/2048 bytes at offset 4296484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296488960 ++read 2048/2048 bytes at offset 4296488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296493056 ++read 2048/2048 bytes at offset 4296493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296497152 ++read 2048/2048 bytes at offset 4296497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296501248 ++read 2048/2048 bytes at offset 4296501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296505344 ++read 2048/2048 bytes at offset 4296505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296509440 ++read 2048/2048 bytes at offset 4296509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296513536 ++read 2048/2048 bytes at offset 4296513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296517632 ++read 2048/2048 bytes at offset 4296517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296521728 ++read 2048/2048 bytes at offset 4296521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296525824 ++read 2048/2048 bytes at offset 4296525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296529920 ++read 2048/2048 bytes at offset 4296529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296534016 ++read 2048/2048 bytes at offset 4296534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296538112 ++read 2048/2048 bytes at offset 4296538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296542208 ++read 2048/2048 bytes at offset 4296542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296546304 ++read 2048/2048 bytes at offset 4296546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296550400 ++read 2048/2048 bytes at offset 4296550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296554496 ++read 2048/2048 bytes at offset 4296554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296558592 ++read 2048/2048 bytes at offset 4296558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296562688 ++read 2048/2048 bytes at offset 4296562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296566784 ++read 2048/2048 bytes at offset 4296566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296570880 ++read 2048/2048 bytes at offset 4296570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296574976 ++read 2048/2048 bytes at offset 4296574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296579072 ++read 2048/2048 bytes at offset 4296579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296583168 ++read 2048/2048 bytes at offset 4296583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296587264 ++read 2048/2048 bytes at offset 4296587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296591360 ++read 2048/2048 bytes at offset 4296591360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296595456 ++read 2048/2048 bytes at offset 4296595456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296599552 ++read 2048/2048 bytes at offset 4296599552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296603648 ++read 2048/2048 bytes at offset 4296603648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296607744 ++read 2048/2048 bytes at offset 4296607744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296611840 ++read 2048/2048 bytes at offset 4296611840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296615936 ++read 2048/2048 bytes at offset 4296615936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296620032 ++read 2048/2048 bytes at offset 4296620032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296624128 ++read 2048/2048 bytes at offset 4296624128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296628224 ++read 2048/2048 bytes at offset 4296628224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296632320 ++read 2048/2048 bytes at offset 4296632320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296636416 ++read 2048/2048 bytes at offset 4296636416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296640512 ++read 2048/2048 bytes at offset 4296640512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296644608 ++read 2048/2048 bytes at offset 4296644608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296648704 ++read 2048/2048 bytes at offset 4296648704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296652800 ++read 2048/2048 bytes at offset 4296652800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296656896 ++read 2048/2048 bytes at offset 4296656896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296660992 ++read 2048/2048 bytes at offset 4296660992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296665088 ++read 2048/2048 bytes at offset 4296665088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296669184 ++read 2048/2048 bytes at offset 4296669184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296673280 ++read 2048/2048 bytes at offset 4296673280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296677376 ++read 2048/2048 bytes at offset 4296677376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296681472 ++read 2048/2048 bytes at offset 4296681472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296685568 ++read 2048/2048 bytes at offset 4296685568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296689664 ++read 2048/2048 bytes at offset 4296689664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296693760 ++read 2048/2048 bytes at offset 4296693760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296697856 ++read 2048/2048 bytes at offset 4296697856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296701952 ++read 2048/2048 bytes at offset 4296701952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296706048 ++read 2048/2048 bytes at offset 4296706048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296710144 ++read 2048/2048 bytes at offset 4296710144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296714240 ++read 2048/2048 bytes at offset 4296714240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296718336 ++read 2048/2048 bytes at offset 4296718336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296722432 ++read 2048/2048 bytes at offset 4296722432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296726528 ++read 2048/2048 bytes at offset 4296726528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296730624 ++read 2048/2048 bytes at offset 4296730624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296734720 ++read 2048/2048 bytes at offset 4296734720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296738816 ++read 2048/2048 bytes at offset 4296738816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296742912 ++read 2048/2048 bytes at offset 4296742912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296747008 ++read 2048/2048 bytes at offset 4296747008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296751104 ++read 2048/2048 bytes at offset 4296751104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296755200 ++read 2048/2048 bytes at offset 4296755200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296759296 ++read 2048/2048 bytes at offset 4296759296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296763392 ++read 2048/2048 bytes at offset 4296763392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296767488 ++read 2048/2048 bytes at offset 4296767488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296771584 ++read 2048/2048 bytes at offset 4296771584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296775680 ++read 2048/2048 bytes at offset 4296775680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296779776 ++read 2048/2048 bytes at offset 4296779776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296783872 ++read 2048/2048 bytes at offset 4296783872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296787968 ++read 2048/2048 bytes at offset 4296787968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296792064 ++read 2048/2048 bytes at offset 4296792064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296796160 ++read 2048/2048 bytes at offset 4296796160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296800256 ++read 2048/2048 bytes at offset 4296800256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296804352 ++read 2048/2048 bytes at offset 4296804352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296808448 ++read 2048/2048 bytes at offset 4296808448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296812544 ++read 2048/2048 bytes at offset 4296812544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296816640 ++read 2048/2048 bytes at offset 4296816640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296820736 ++read 2048/2048 bytes at offset 4296820736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296824832 ++read 2048/2048 bytes at offset 4296824832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296828928 ++read 2048/2048 bytes at offset 4296828928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296833024 ++read 2048/2048 bytes at offset 4296833024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296837120 ++read 2048/2048 bytes at offset 4296837120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296841216 ++read 2048/2048 bytes at offset 4296841216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296845312 ++read 2048/2048 bytes at offset 4296845312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296849408 ++read 2048/2048 bytes at offset 4296849408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296853504 ++read 2048/2048 bytes at offset 4296853504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296857600 ++read 2048/2048 bytes at offset 4296857600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296861696 ++read 2048/2048 bytes at offset 4296861696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296865792 ++read 2048/2048 bytes at offset 4296865792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296869888 ++read 2048/2048 bytes at offset 4296869888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296873984 ++read 2048/2048 bytes at offset 4296873984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296878080 ++read 2048/2048 bytes at offset 4296878080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296882176 ++read 2048/2048 bytes at offset 4296882176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296886272 ++read 2048/2048 bytes at offset 4296886272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296890368 ++read 2048/2048 bytes at offset 4296890368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296894464 ++read 2048/2048 bytes at offset 4296894464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296898560 ++read 2048/2048 bytes at offset 4296898560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296902656 ++read 2048/2048 bytes at offset 4296902656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296906752 ++read 2048/2048 bytes at offset 4296906752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296910848 ++read 2048/2048 bytes at offset 4296910848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296914944 ++read 2048/2048 bytes at offset 4296914944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296919040 ++read 2048/2048 bytes at offset 4296919040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296923136 ++read 2048/2048 bytes at offset 4296923136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296927232 ++read 2048/2048 bytes at offset 4296927232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296931328 ++read 2048/2048 bytes at offset 4296931328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296935424 ++read 2048/2048 bytes at offset 4296935424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296939520 ++read 2048/2048 bytes at offset 4296939520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296943616 ++read 2048/2048 bytes at offset 4296943616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296947712 ++read 2048/2048 bytes at offset 4296947712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296951808 ++read 2048/2048 bytes at offset 4296951808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296955904 ++read 2048/2048 bytes at offset 4296955904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296960000 ++read 2048/2048 bytes at offset 4296960000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296964096 ++read 2048/2048 bytes at offset 4296964096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296968192 ++read 2048/2048 bytes at offset 4296968192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296972288 ++read 2048/2048 bytes at offset 4296972288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296976384 ++read 2048/2048 bytes at offset 4296976384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296980480 ++read 2048/2048 bytes at offset 4296980480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296984576 ++read 2048/2048 bytes at offset 4296984576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296988672 ++read 2048/2048 bytes at offset 4296988672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296992768 ++read 2048/2048 bytes at offset 4296992768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4296996864 ++read 2048/2048 bytes at offset 4296996864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297000960 ++read 2048/2048 bytes at offset 4297000960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297005056 ++read 2048/2048 bytes at offset 4297005056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297009152 ++read 2048/2048 bytes at offset 4297009152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297013248 ++read 2048/2048 bytes at offset 4297013248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297017344 ++read 2048/2048 bytes at offset 4297017344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297021440 ++read 2048/2048 bytes at offset 4297021440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297025536 ++read 2048/2048 bytes at offset 4297025536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297029632 ++read 2048/2048 bytes at offset 4297029632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297033728 ++read 2048/2048 bytes at offset 4297033728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297037824 ++read 2048/2048 bytes at offset 4297037824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297041920 ++read 2048/2048 bytes at offset 4297041920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297046016 ++read 2048/2048 bytes at offset 4297046016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297050112 ++read 2048/2048 bytes at offset 4297050112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297054208 ++read 2048/2048 bytes at offset 4297054208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297058304 ++read 2048/2048 bytes at offset 4297058304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297062400 ++read 2048/2048 bytes at offset 4297062400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4297064448 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4297064448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297068544 ++read 2048/2048 bytes at offset 4297068544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297072640 ++read 2048/2048 bytes at offset 4297072640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297076736 ++read 2048/2048 bytes at offset 4297076736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297080832 ++read 2048/2048 bytes at offset 4297080832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297084928 ++read 2048/2048 bytes at offset 4297084928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297089024 ++read 2048/2048 bytes at offset 4297089024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297093120 ++read 2048/2048 bytes at offset 4297093120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297097216 ++read 2048/2048 bytes at offset 4297097216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297101312 ++read 2048/2048 bytes at offset 4297101312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297105408 ++read 2048/2048 bytes at offset 4297105408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297109504 ++read 2048/2048 bytes at offset 4297109504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297113600 ++read 2048/2048 bytes at offset 4297113600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297117696 ++read 2048/2048 bytes at offset 4297117696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297121792 ++read 2048/2048 bytes at offset 4297121792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297125888 ++read 2048/2048 bytes at offset 4297125888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297129984 ++read 2048/2048 bytes at offset 4297129984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297134080 ++read 2048/2048 bytes at offset 4297134080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297138176 ++read 2048/2048 bytes at offset 4297138176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297142272 ++read 2048/2048 bytes at offset 4297142272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297146368 ++read 2048/2048 bytes at offset 4297146368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297150464 ++read 2048/2048 bytes at offset 4297150464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297154560 ++read 2048/2048 bytes at offset 4297154560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297158656 ++read 2048/2048 bytes at offset 4297158656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297162752 ++read 2048/2048 bytes at offset 4297162752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297166848 ++read 2048/2048 bytes at offset 4297166848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297170944 ++read 2048/2048 bytes at offset 4297170944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297175040 ++read 2048/2048 bytes at offset 4297175040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297179136 ++read 2048/2048 bytes at offset 4297179136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297183232 ++read 2048/2048 bytes at offset 4297183232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297187328 ++read 2048/2048 bytes at offset 4297187328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297191424 ++read 2048/2048 bytes at offset 4297191424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297195520 ++read 2048/2048 bytes at offset 4297195520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297199616 ++read 2048/2048 bytes at offset 4297199616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297203712 ++read 2048/2048 bytes at offset 4297203712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297207808 ++read 2048/2048 bytes at offset 4297207808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297211904 ++read 2048/2048 bytes at offset 4297211904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297216000 ++read 2048/2048 bytes at offset 4297216000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297220096 ++read 2048/2048 bytes at offset 4297220096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297224192 ++read 2048/2048 bytes at offset 4297224192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297228288 ++read 2048/2048 bytes at offset 4297228288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297232384 ++read 2048/2048 bytes at offset 4297232384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297236480 ++read 2048/2048 bytes at offset 4297236480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297240576 ++read 2048/2048 bytes at offset 4297240576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297244672 ++read 2048/2048 bytes at offset 4297244672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297248768 ++read 2048/2048 bytes at offset 4297248768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297252864 ++read 2048/2048 bytes at offset 4297252864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297256960 ++read 2048/2048 bytes at offset 4297256960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297261056 ++read 2048/2048 bytes at offset 4297261056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297265152 ++read 2048/2048 bytes at offset 4297265152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297269248 ++read 2048/2048 bytes at offset 4297269248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297273344 ++read 2048/2048 bytes at offset 4297273344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297277440 ++read 2048/2048 bytes at offset 4297277440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297281536 ++read 2048/2048 bytes at offset 4297281536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297285632 ++read 2048/2048 bytes at offset 4297285632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297289728 ++read 2048/2048 bytes at offset 4297289728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297293824 ++read 2048/2048 bytes at offset 4297293824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297297920 ++read 2048/2048 bytes at offset 4297297920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297302016 ++read 2048/2048 bytes at offset 4297302016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297306112 ++read 2048/2048 bytes at offset 4297306112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297310208 ++read 2048/2048 bytes at offset 4297310208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297314304 ++read 2048/2048 bytes at offset 4297314304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297318400 ++read 2048/2048 bytes at offset 4297318400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297322496 ++read 2048/2048 bytes at offset 4297322496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297326592 ++read 2048/2048 bytes at offset 4297326592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297330688 ++read 2048/2048 bytes at offset 4297330688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297334784 ++read 2048/2048 bytes at offset 4297334784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297338880 ++read 2048/2048 bytes at offset 4297338880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297342976 ++read 2048/2048 bytes at offset 4297342976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297347072 ++read 2048/2048 bytes at offset 4297347072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297351168 ++read 2048/2048 bytes at offset 4297351168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297355264 ++read 2048/2048 bytes at offset 4297355264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297359360 ++read 2048/2048 bytes at offset 4297359360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297363456 ++read 2048/2048 bytes at offset 4297363456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297367552 ++read 2048/2048 bytes at offset 4297367552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297371648 ++read 2048/2048 bytes at offset 4297371648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297375744 ++read 2048/2048 bytes at offset 4297375744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297379840 ++read 2048/2048 bytes at offset 4297379840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297383936 ++read 2048/2048 bytes at offset 4297383936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297388032 ++read 2048/2048 bytes at offset 4297388032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297392128 ++read 2048/2048 bytes at offset 4297392128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297396224 ++read 2048/2048 bytes at offset 4297396224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297400320 ++read 2048/2048 bytes at offset 4297400320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297404416 ++read 2048/2048 bytes at offset 4297404416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297408512 ++read 2048/2048 bytes at offset 4297408512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297412608 ++read 2048/2048 bytes at offset 4297412608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297416704 ++read 2048/2048 bytes at offset 4297416704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297420800 ++read 2048/2048 bytes at offset 4297420800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297424896 ++read 2048/2048 bytes at offset 4297424896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297428992 ++read 2048/2048 bytes at offset 4297428992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297433088 ++read 2048/2048 bytes at offset 4297433088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297437184 ++read 2048/2048 bytes at offset 4297437184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297441280 ++read 2048/2048 bytes at offset 4297441280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297445376 ++read 2048/2048 bytes at offset 4297445376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297449472 ++read 2048/2048 bytes at offset 4297449472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297453568 ++read 2048/2048 bytes at offset 4297453568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297457664 ++read 2048/2048 bytes at offset 4297457664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297461760 ++read 2048/2048 bytes at offset 4297461760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297465856 ++read 2048/2048 bytes at offset 4297465856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297469952 ++read 2048/2048 bytes at offset 4297469952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297474048 ++read 2048/2048 bytes at offset 4297474048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297478144 ++read 2048/2048 bytes at offset 4297478144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297482240 ++read 2048/2048 bytes at offset 4297482240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297486336 ++read 2048/2048 bytes at offset 4297486336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297490432 ++read 2048/2048 bytes at offset 4297490432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297494528 ++read 2048/2048 bytes at offset 4297494528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297498624 ++read 2048/2048 bytes at offset 4297498624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297502720 ++read 2048/2048 bytes at offset 4297502720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297506816 ++read 2048/2048 bytes at offset 4297506816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297510912 ++read 2048/2048 bytes at offset 4297510912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297515008 ++read 2048/2048 bytes at offset 4297515008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297519104 ++read 2048/2048 bytes at offset 4297519104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297523200 ++read 2048/2048 bytes at offset 4297523200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297527296 ++read 2048/2048 bytes at offset 4297527296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297531392 ++read 2048/2048 bytes at offset 4297531392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297535488 ++read 2048/2048 bytes at offset 4297535488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297539584 ++read 2048/2048 bytes at offset 4297539584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297543680 ++read 2048/2048 bytes at offset 4297543680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297547776 ++read 2048/2048 bytes at offset 4297547776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297551872 ++read 2048/2048 bytes at offset 4297551872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297555968 ++read 2048/2048 bytes at offset 4297555968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297560064 ++read 2048/2048 bytes at offset 4297560064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297564160 ++read 2048/2048 bytes at offset 4297564160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297568256 ++read 2048/2048 bytes at offset 4297568256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297572352 ++read 2048/2048 bytes at offset 4297572352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297576448 ++read 2048/2048 bytes at offset 4297576448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297580544 ++read 2048/2048 bytes at offset 4297580544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297584640 ++read 2048/2048 bytes at offset 4297584640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297588736 ++read 2048/2048 bytes at offset 4297588736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297592832 ++read 2048/2048 bytes at offset 4297592832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297596928 ++read 2048/2048 bytes at offset 4297596928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297601024 ++read 2048/2048 bytes at offset 4297601024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297605120 ++read 2048/2048 bytes at offset 4297605120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297609216 ++read 2048/2048 bytes at offset 4297609216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297613312 ++read 2048/2048 bytes at offset 4297613312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297617408 ++read 2048/2048 bytes at offset 4297617408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297621504 ++read 2048/2048 bytes at offset 4297621504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297625600 ++read 2048/2048 bytes at offset 4297625600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297629696 ++read 2048/2048 bytes at offset 4297629696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297633792 ++read 2048/2048 bytes at offset 4297633792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297637888 ++read 2048/2048 bytes at offset 4297637888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297641984 ++read 2048/2048 bytes at offset 4297641984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297646080 ++read 2048/2048 bytes at offset 4297646080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297650176 ++read 2048/2048 bytes at offset 4297650176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297654272 ++read 2048/2048 bytes at offset 4297654272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297658368 ++read 2048/2048 bytes at offset 4297658368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297662464 ++read 2048/2048 bytes at offset 4297662464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297666560 ++read 2048/2048 bytes at offset 4297666560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297670656 ++read 2048/2048 bytes at offset 4297670656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297674752 ++read 2048/2048 bytes at offset 4297674752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297678848 ++read 2048/2048 bytes at offset 4297678848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297682944 ++read 2048/2048 bytes at offset 4297682944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297687040 ++read 2048/2048 bytes at offset 4297687040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297691136 ++read 2048/2048 bytes at offset 4297691136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297695232 ++read 2048/2048 bytes at offset 4297695232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297699328 ++read 2048/2048 bytes at offset 4297699328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297703424 ++read 2048/2048 bytes at offset 4297703424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297707520 ++read 2048/2048 bytes at offset 4297707520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297711616 ++read 2048/2048 bytes at offset 4297711616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297715712 ++read 2048/2048 bytes at offset 4297715712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297719808 ++read 2048/2048 bytes at offset 4297719808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297723904 ++read 2048/2048 bytes at offset 4297723904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297728000 ++read 2048/2048 bytes at offset 4297728000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297732096 ++read 2048/2048 bytes at offset 4297732096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297736192 ++read 2048/2048 bytes at offset 4297736192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297740288 ++read 2048/2048 bytes at offset 4297740288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297744384 ++read 2048/2048 bytes at offset 4297744384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297748480 ++read 2048/2048 bytes at offset 4297748480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297752576 ++read 2048/2048 bytes at offset 4297752576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297756672 ++read 2048/2048 bytes at offset 4297756672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297760768 ++read 2048/2048 bytes at offset 4297760768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297764864 ++read 2048/2048 bytes at offset 4297764864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297768960 ++read 2048/2048 bytes at offset 4297768960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297773056 ++read 2048/2048 bytes at offset 4297773056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297777152 ++read 2048/2048 bytes at offset 4297777152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297781248 ++read 2048/2048 bytes at offset 4297781248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297785344 ++read 2048/2048 bytes at offset 4297785344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297789440 ++read 2048/2048 bytes at offset 4297789440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297793536 ++read 2048/2048 bytes at offset 4297793536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297797632 ++read 2048/2048 bytes at offset 4297797632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297801728 ++read 2048/2048 bytes at offset 4297801728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297805824 ++read 2048/2048 bytes at offset 4297805824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297809920 ++read 2048/2048 bytes at offset 4297809920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297814016 ++read 2048/2048 bytes at offset 4297814016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297818112 ++read 2048/2048 bytes at offset 4297818112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297822208 ++read 2048/2048 bytes at offset 4297822208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297826304 ++read 2048/2048 bytes at offset 4297826304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297830400 ++read 2048/2048 bytes at offset 4297830400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297834496 ++read 2048/2048 bytes at offset 4297834496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297838592 ++read 2048/2048 bytes at offset 4297838592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297842688 ++read 2048/2048 bytes at offset 4297842688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297846784 ++read 2048/2048 bytes at offset 4297846784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297850880 ++read 2048/2048 bytes at offset 4297850880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297854976 ++read 2048/2048 bytes at offset 4297854976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297859072 ++read 2048/2048 bytes at offset 4297859072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297863168 ++read 2048/2048 bytes at offset 4297863168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297867264 ++read 2048/2048 bytes at offset 4297867264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297871360 ++read 2048/2048 bytes at offset 4297871360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297875456 ++read 2048/2048 bytes at offset 4297875456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297879552 ++read 2048/2048 bytes at offset 4297879552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297883648 ++read 2048/2048 bytes at offset 4297883648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297887744 ++read 2048/2048 bytes at offset 4297887744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297891840 ++read 2048/2048 bytes at offset 4297891840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297895936 ++read 2048/2048 bytes at offset 4297895936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297900032 ++read 2048/2048 bytes at offset 4297900032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297904128 ++read 2048/2048 bytes at offset 4297904128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297908224 ++read 2048/2048 bytes at offset 4297908224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297912320 ++read 2048/2048 bytes at offset 4297912320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297916416 ++read 2048/2048 bytes at offset 4297916416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297920512 ++read 2048/2048 bytes at offset 4297920512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297924608 ++read 2048/2048 bytes at offset 4297924608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297928704 ++read 2048/2048 bytes at offset 4297928704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297932800 ++read 2048/2048 bytes at offset 4297932800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297936896 ++read 2048/2048 bytes at offset 4297936896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297940992 ++read 2048/2048 bytes at offset 4297940992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297945088 ++read 2048/2048 bytes at offset 4297945088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297949184 ++read 2048/2048 bytes at offset 4297949184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297953280 ++read 2048/2048 bytes at offset 4297953280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297957376 ++read 2048/2048 bytes at offset 4297957376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297961472 ++read 2048/2048 bytes at offset 4297961472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297965568 ++read 2048/2048 bytes at offset 4297965568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297969664 ++read 2048/2048 bytes at offset 4297969664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297973760 ++read 2048/2048 bytes at offset 4297973760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297977856 ++read 2048/2048 bytes at offset 4297977856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297981952 ++read 2048/2048 bytes at offset 4297981952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297986048 ++read 2048/2048 bytes at offset 4297986048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297990144 ++read 2048/2048 bytes at offset 4297990144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297994240 ++read 2048/2048 bytes at offset 4297994240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4297998336 ++read 2048/2048 bytes at offset 4297998336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298002432 ++read 2048/2048 bytes at offset 4298002432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298006528 ++read 2048/2048 bytes at offset 4298006528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298010624 ++read 2048/2048 bytes at offset 4298010624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298014720 ++read 2048/2048 bytes at offset 4298014720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298018816 ++read 2048/2048 bytes at offset 4298018816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298022912 ++read 2048/2048 bytes at offset 4298022912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298027008 ++read 2048/2048 bytes at offset 4298027008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298031104 ++read 2048/2048 bytes at offset 4298031104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298035200 ++read 2048/2048 bytes at offset 4298035200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298039296 ++read 2048/2048 bytes at offset 4298039296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298043392 ++read 2048/2048 bytes at offset 4298043392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298047488 ++read 2048/2048 bytes at offset 4298047488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298051584 ++read 2048/2048 bytes at offset 4298051584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298055680 ++read 2048/2048 bytes at offset 4298055680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298059776 ++read 2048/2048 bytes at offset 4298059776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298063872 ++read 2048/2048 bytes at offset 4298063872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298067968 ++read 2048/2048 bytes at offset 4298067968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298072064 ++read 2048/2048 bytes at offset 4298072064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298076160 ++read 2048/2048 bytes at offset 4298076160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298080256 ++read 2048/2048 bytes at offset 4298080256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298084352 ++read 2048/2048 bytes at offset 4298084352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298088448 ++read 2048/2048 bytes at offset 4298088448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298092544 ++read 2048/2048 bytes at offset 4298092544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298096640 ++read 2048/2048 bytes at offset 4298096640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298100736 ++read 2048/2048 bytes at offset 4298100736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298104832 ++read 2048/2048 bytes at offset 4298104832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298108928 ++read 2048/2048 bytes at offset 4298108928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 2 +-qemu-io> read 2048/2048 bytes at offset 4298114048 ++=== IO: pattern 2 ++read 2048/2048 bytes at offset 4298114048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298118144 ++read 2048/2048 bytes at offset 4298118144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298122240 ++read 2048/2048 bytes at offset 4298122240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298126336 ++read 2048/2048 bytes at offset 4298126336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298130432 ++read 2048/2048 bytes at offset 4298130432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298134528 ++read 2048/2048 bytes at offset 4298134528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298138624 ++read 2048/2048 bytes at offset 4298138624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298142720 ++read 2048/2048 bytes at offset 4298142720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298146816 ++read 2048/2048 bytes at offset 4298146816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298150912 ++read 2048/2048 bytes at offset 4298150912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298155008 ++read 2048/2048 bytes at offset 4298155008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298159104 ++read 2048/2048 bytes at offset 4298159104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298163200 ++read 2048/2048 bytes at offset 4298163200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298167296 ++read 2048/2048 bytes at offset 4298167296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298171392 ++read 2048/2048 bytes at offset 4298171392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298175488 ++read 2048/2048 bytes at offset 4298175488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298179584 ++read 2048/2048 bytes at offset 4298179584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298183680 ++read 2048/2048 bytes at offset 4298183680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298187776 ++read 2048/2048 bytes at offset 4298187776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298191872 ++read 2048/2048 bytes at offset 4298191872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298195968 ++read 2048/2048 bytes at offset 4298195968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298200064 ++read 2048/2048 bytes at offset 4298200064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298204160 ++read 2048/2048 bytes at offset 4298204160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298208256 ++read 2048/2048 bytes at offset 4298208256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298212352 ++read 2048/2048 bytes at offset 4298212352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298216448 ++read 2048/2048 bytes at offset 4298216448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298220544 ++read 2048/2048 bytes at offset 4298220544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298224640 ++read 2048/2048 bytes at offset 4298224640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298228736 ++read 2048/2048 bytes at offset 4298228736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298232832 ++read 2048/2048 bytes at offset 4298232832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298236928 ++read 2048/2048 bytes at offset 4298236928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298241024 ++read 2048/2048 bytes at offset 4298241024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298245120 ++read 2048/2048 bytes at offset 4298245120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298249216 ++read 2048/2048 bytes at offset 4298249216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298253312 ++read 2048/2048 bytes at offset 4298253312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298257408 ++read 2048/2048 bytes at offset 4298257408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298261504 ++read 2048/2048 bytes at offset 4298261504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298265600 ++read 2048/2048 bytes at offset 4298265600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298269696 ++read 2048/2048 bytes at offset 4298269696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298273792 ++read 2048/2048 bytes at offset 4298273792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298277888 ++read 2048/2048 bytes at offset 4298277888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298281984 ++read 2048/2048 bytes at offset 4298281984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298286080 ++read 2048/2048 bytes at offset 4298286080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298290176 ++read 2048/2048 bytes at offset 4298290176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298294272 ++read 2048/2048 bytes at offset 4298294272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298298368 ++read 2048/2048 bytes at offset 4298298368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298302464 ++read 2048/2048 bytes at offset 4298302464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298306560 ++read 2048/2048 bytes at offset 4298306560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298310656 ++read 2048/2048 bytes at offset 4298310656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298314752 ++read 2048/2048 bytes at offset 4298314752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298318848 ++read 2048/2048 bytes at offset 4298318848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298322944 ++read 2048/2048 bytes at offset 4298322944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298327040 ++read 2048/2048 bytes at offset 4298327040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298331136 ++read 2048/2048 bytes at offset 4298331136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298335232 ++read 2048/2048 bytes at offset 4298335232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298339328 ++read 2048/2048 bytes at offset 4298339328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298343424 ++read 2048/2048 bytes at offset 4298343424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298347520 ++read 2048/2048 bytes at offset 4298347520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298351616 ++read 2048/2048 bytes at offset 4298351616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298355712 ++read 2048/2048 bytes at offset 4298355712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298359808 ++read 2048/2048 bytes at offset 4298359808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298363904 ++read 2048/2048 bytes at offset 4298363904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298368000 ++read 2048/2048 bytes at offset 4298368000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298372096 ++read 2048/2048 bytes at offset 4298372096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298376192 ++read 2048/2048 bytes at offset 4298376192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298380288 ++read 2048/2048 bytes at offset 4298380288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298384384 ++read 2048/2048 bytes at offset 4298384384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298388480 ++read 2048/2048 bytes at offset 4298388480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298392576 ++read 2048/2048 bytes at offset 4298392576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298396672 ++read 2048/2048 bytes at offset 4298396672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298400768 ++read 2048/2048 bytes at offset 4298400768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298404864 ++read 2048/2048 bytes at offset 4298404864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298408960 ++read 2048/2048 bytes at offset 4298408960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298413056 ++read 2048/2048 bytes at offset 4298413056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298417152 ++read 2048/2048 bytes at offset 4298417152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298421248 ++read 2048/2048 bytes at offset 4298421248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298425344 ++read 2048/2048 bytes at offset 4298425344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298429440 ++read 2048/2048 bytes at offset 4298429440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298433536 ++read 2048/2048 bytes at offset 4298433536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298437632 ++read 2048/2048 bytes at offset 4298437632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298441728 ++read 2048/2048 bytes at offset 4298441728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298445824 ++read 2048/2048 bytes at offset 4298445824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298449920 ++read 2048/2048 bytes at offset 4298449920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298454016 ++read 2048/2048 bytes at offset 4298454016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298458112 ++read 2048/2048 bytes at offset 4298458112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298462208 ++read 2048/2048 bytes at offset 4298462208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298466304 ++read 2048/2048 bytes at offset 4298466304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298470400 ++read 2048/2048 bytes at offset 4298470400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298474496 ++read 2048/2048 bytes at offset 4298474496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298478592 ++read 2048/2048 bytes at offset 4298478592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298482688 ++read 2048/2048 bytes at offset 4298482688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298486784 ++read 2048/2048 bytes at offset 4298486784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298490880 ++read 2048/2048 bytes at offset 4298490880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298494976 ++read 2048/2048 bytes at offset 4298494976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298499072 ++read 2048/2048 bytes at offset 4298499072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298503168 ++read 2048/2048 bytes at offset 4298503168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298507264 ++read 2048/2048 bytes at offset 4298507264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298511360 ++read 2048/2048 bytes at offset 4298511360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298515456 ++read 2048/2048 bytes at offset 4298515456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298519552 ++read 2048/2048 bytes at offset 4298519552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298523648 ++read 2048/2048 bytes at offset 4298523648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298527744 ++read 2048/2048 bytes at offset 4298527744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298531840 ++read 2048/2048 bytes at offset 4298531840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298535936 ++read 2048/2048 bytes at offset 4298535936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298540032 ++read 2048/2048 bytes at offset 4298540032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298544128 ++read 2048/2048 bytes at offset 4298544128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298548224 ++read 2048/2048 bytes at offset 4298548224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298552320 ++read 2048/2048 bytes at offset 4298552320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298556416 ++read 2048/2048 bytes at offset 4298556416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298560512 ++read 2048/2048 bytes at offset 4298560512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298564608 ++read 2048/2048 bytes at offset 4298564608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298568704 ++read 2048/2048 bytes at offset 4298568704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298572800 ++read 2048/2048 bytes at offset 4298572800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298576896 ++read 2048/2048 bytes at offset 4298576896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298580992 ++read 2048/2048 bytes at offset 4298580992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298585088 ++read 2048/2048 bytes at offset 4298585088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298589184 ++read 2048/2048 bytes at offset 4298589184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298593280 ++read 2048/2048 bytes at offset 4298593280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298597376 ++read 2048/2048 bytes at offset 4298597376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298601472 ++read 2048/2048 bytes at offset 4298601472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298605568 ++read 2048/2048 bytes at offset 4298605568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298609664 ++read 2048/2048 bytes at offset 4298609664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298613760 ++read 2048/2048 bytes at offset 4298613760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298617856 ++read 2048/2048 bytes at offset 4298617856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298621952 ++read 2048/2048 bytes at offset 4298621952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298626048 ++read 2048/2048 bytes at offset 4298626048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298630144 ++read 2048/2048 bytes at offset 4298630144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298634240 ++read 2048/2048 bytes at offset 4298634240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298638336 ++read 2048/2048 bytes at offset 4298638336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298642432 ++read 2048/2048 bytes at offset 4298642432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298646528 ++read 2048/2048 bytes at offset 4298646528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298650624 ++read 2048/2048 bytes at offset 4298650624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298654720 ++read 2048/2048 bytes at offset 4298654720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298658816 ++read 2048/2048 bytes at offset 4298658816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298662912 ++read 2048/2048 bytes at offset 4298662912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298667008 ++read 2048/2048 bytes at offset 4298667008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298671104 ++read 2048/2048 bytes at offset 4298671104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298675200 ++read 2048/2048 bytes at offset 4298675200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298679296 ++read 2048/2048 bytes at offset 4298679296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298683392 ++read 2048/2048 bytes at offset 4298683392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298687488 ++read 2048/2048 bytes at offset 4298687488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298691584 ++read 2048/2048 bytes at offset 4298691584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298695680 ++read 2048/2048 bytes at offset 4298695680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298699776 ++read 2048/2048 bytes at offset 4298699776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298703872 ++read 2048/2048 bytes at offset 4298703872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298707968 ++read 2048/2048 bytes at offset 4298707968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298712064 ++read 2048/2048 bytes at offset 4298712064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298716160 ++read 2048/2048 bytes at offset 4298716160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298720256 ++read 2048/2048 bytes at offset 4298720256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298724352 ++read 2048/2048 bytes at offset 4298724352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298728448 ++read 2048/2048 bytes at offset 4298728448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298732544 ++read 2048/2048 bytes at offset 4298732544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298736640 ++read 2048/2048 bytes at offset 4298736640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298740736 ++read 2048/2048 bytes at offset 4298740736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298744832 ++read 2048/2048 bytes at offset 4298744832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298748928 ++read 2048/2048 bytes at offset 4298748928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298753024 ++read 2048/2048 bytes at offset 4298753024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298757120 ++read 2048/2048 bytes at offset 4298757120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298761216 ++read 2048/2048 bytes at offset 4298761216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298765312 ++read 2048/2048 bytes at offset 4298765312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298769408 ++read 2048/2048 bytes at offset 4298769408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298773504 ++read 2048/2048 bytes at offset 4298773504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298777600 ++read 2048/2048 bytes at offset 4298777600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298781696 ++read 2048/2048 bytes at offset 4298781696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298785792 ++read 2048/2048 bytes at offset 4298785792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298789888 ++read 2048/2048 bytes at offset 4298789888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298793984 ++read 2048/2048 bytes at offset 4298793984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298798080 ++read 2048/2048 bytes at offset 4298798080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298802176 ++read 2048/2048 bytes at offset 4298802176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298806272 ++read 2048/2048 bytes at offset 4298806272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298810368 ++read 2048/2048 bytes at offset 4298810368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298814464 ++read 2048/2048 bytes at offset 4298814464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298818560 ++read 2048/2048 bytes at offset 4298818560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298822656 ++read 2048/2048 bytes at offset 4298822656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298826752 ++read 2048/2048 bytes at offset 4298826752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298830848 ++read 2048/2048 bytes at offset 4298830848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298834944 ++read 2048/2048 bytes at offset 4298834944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298839040 ++read 2048/2048 bytes at offset 4298839040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298843136 ++read 2048/2048 bytes at offset 4298843136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298847232 ++read 2048/2048 bytes at offset 4298847232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298851328 ++read 2048/2048 bytes at offset 4298851328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298855424 ++read 2048/2048 bytes at offset 4298855424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298859520 ++read 2048/2048 bytes at offset 4298859520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298863616 ++read 2048/2048 bytes at offset 4298863616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298867712 ++read 2048/2048 bytes at offset 4298867712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298871808 ++read 2048/2048 bytes at offset 4298871808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298875904 ++read 2048/2048 bytes at offset 4298875904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298880000 ++read 2048/2048 bytes at offset 4298880000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298884096 ++read 2048/2048 bytes at offset 4298884096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298888192 ++read 2048/2048 bytes at offset 4298888192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298892288 ++read 2048/2048 bytes at offset 4298892288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298896384 ++read 2048/2048 bytes at offset 4298896384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298900480 ++read 2048/2048 bytes at offset 4298900480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298904576 ++read 2048/2048 bytes at offset 4298904576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298908672 ++read 2048/2048 bytes at offset 4298908672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298912768 ++read 2048/2048 bytes at offset 4298912768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298916864 ++read 2048/2048 bytes at offset 4298916864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298920960 ++read 2048/2048 bytes at offset 4298920960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298925056 ++read 2048/2048 bytes at offset 4298925056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298929152 ++read 2048/2048 bytes at offset 4298929152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298933248 ++read 2048/2048 bytes at offset 4298933248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298937344 ++read 2048/2048 bytes at offset 4298937344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298941440 ++read 2048/2048 bytes at offset 4298941440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298945536 ++read 2048/2048 bytes at offset 4298945536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298949632 ++read 2048/2048 bytes at offset 4298949632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298953728 ++read 2048/2048 bytes at offset 4298953728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298957824 ++read 2048/2048 bytes at offset 4298957824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298961920 ++read 2048/2048 bytes at offset 4298961920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298966016 ++read 2048/2048 bytes at offset 4298966016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298970112 ++read 2048/2048 bytes at offset 4298970112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298974208 ++read 2048/2048 bytes at offset 4298974208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298978304 ++read 2048/2048 bytes at offset 4298978304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298982400 ++read 2048/2048 bytes at offset 4298982400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298986496 ++read 2048/2048 bytes at offset 4298986496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298990592 ++read 2048/2048 bytes at offset 4298990592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298994688 ++read 2048/2048 bytes at offset 4298994688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4298998784 ++read 2048/2048 bytes at offset 4298998784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299002880 ++read 2048/2048 bytes at offset 4299002880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299006976 ++read 2048/2048 bytes at offset 4299006976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299011072 ++read 2048/2048 bytes at offset 4299011072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299015168 ++read 2048/2048 bytes at offset 4299015168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299019264 ++read 2048/2048 bytes at offset 4299019264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299023360 ++read 2048/2048 bytes at offset 4299023360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299027456 ++read 2048/2048 bytes at offset 4299027456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299031552 ++read 2048/2048 bytes at offset 4299031552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299035648 ++read 2048/2048 bytes at offset 4299035648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299039744 ++read 2048/2048 bytes at offset 4299039744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299043840 ++read 2048/2048 bytes at offset 4299043840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299047936 ++read 2048/2048 bytes at offset 4299047936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299052032 ++read 2048/2048 bytes at offset 4299052032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299056128 ++read 2048/2048 bytes at offset 4299056128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299060224 ++read 2048/2048 bytes at offset 4299060224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299064320 ++read 2048/2048 bytes at offset 4299064320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299068416 ++read 2048/2048 bytes at offset 4299068416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299072512 ++read 2048/2048 bytes at offset 4299072512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299076608 ++read 2048/2048 bytes at offset 4299076608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299080704 ++read 2048/2048 bytes at offset 4299080704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299084800 ++read 2048/2048 bytes at offset 4299084800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299088896 ++read 2048/2048 bytes at offset 4299088896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299092992 ++read 2048/2048 bytes at offset 4299092992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299097088 ++read 2048/2048 bytes at offset 4299097088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299101184 ++read 2048/2048 bytes at offset 4299101184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299105280 ++read 2048/2048 bytes at offset 4299105280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299109376 ++read 2048/2048 bytes at offset 4299109376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299113472 ++read 2048/2048 bytes at offset 4299113472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299117568 ++read 2048/2048 bytes at offset 4299117568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299121664 ++read 2048/2048 bytes at offset 4299121664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299125760 ++read 2048/2048 bytes at offset 4299125760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299129856 ++read 2048/2048 bytes at offset 4299129856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299133952 ++read 2048/2048 bytes at offset 4299133952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299138048 ++read 2048/2048 bytes at offset 4299138048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299142144 ++read 2048/2048 bytes at offset 4299142144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299146240 ++read 2048/2048 bytes at offset 4299146240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299150336 ++read 2048/2048 bytes at offset 4299150336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299154432 ++read 2048/2048 bytes at offset 4299154432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4299158528 ++read 2048/2048 bytes at offset 4299158528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 4 +-qemu-io> read 8192/8192 bytes at offset 4299163648 ++=== IO: pattern 4 ++read 8192/8192 bytes at offset 4299163648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299175936 ++read 8192/8192 bytes at offset 4299175936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299188224 ++read 8192/8192 bytes at offset 4299188224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299200512 ++read 8192/8192 bytes at offset 4299200512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299212800 ++read 8192/8192 bytes at offset 4299212800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299225088 ++read 8192/8192 bytes at offset 4299225088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299237376 ++read 8192/8192 bytes at offset 4299237376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299249664 ++read 8192/8192 bytes at offset 4299249664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299261952 ++read 8192/8192 bytes at offset 4299261952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299274240 ++read 8192/8192 bytes at offset 4299274240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299286528 ++read 8192/8192 bytes at offset 4299286528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299298816 ++read 8192/8192 bytes at offset 4299298816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299311104 ++read 8192/8192 bytes at offset 4299311104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299323392 ++read 8192/8192 bytes at offset 4299323392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299335680 ++read 8192/8192 bytes at offset 4299335680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299347968 ++read 8192/8192 bytes at offset 4299347968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299360256 ++read 8192/8192 bytes at offset 4299360256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299372544 ++read 8192/8192 bytes at offset 4299372544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299384832 ++read 8192/8192 bytes at offset 4299384832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299397120 ++read 8192/8192 bytes at offset 4299397120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299409408 ++read 8192/8192 bytes at offset 4299409408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299421696 ++read 8192/8192 bytes at offset 4299421696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299433984 ++read 8192/8192 bytes at offset 4299433984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299446272 ++read 8192/8192 bytes at offset 4299446272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299458560 ++read 8192/8192 bytes at offset 4299458560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299470848 ++read 8192/8192 bytes at offset 4299470848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299483136 ++read 8192/8192 bytes at offset 4299483136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299495424 ++read 8192/8192 bytes at offset 4299495424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299507712 ++read 8192/8192 bytes at offset 4299507712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299520000 ++read 8192/8192 bytes at offset 4299520000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299532288 ++read 8192/8192 bytes at offset 4299532288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299544576 ++read 8192/8192 bytes at offset 4299544576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299556864 ++read 8192/8192 bytes at offset 4299556864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299569152 ++read 8192/8192 bytes at offset 4299569152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299581440 ++read 8192/8192 bytes at offset 4299581440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299593728 ++read 8192/8192 bytes at offset 4299593728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299606016 ++read 8192/8192 bytes at offset 4299606016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299618304 ++read 8192/8192 bytes at offset 4299618304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299630592 ++read 8192/8192 bytes at offset 4299630592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299642880 ++read 8192/8192 bytes at offset 4299642880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299655168 ++read 8192/8192 bytes at offset 4299655168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299667456 ++read 8192/8192 bytes at offset 4299667456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299679744 ++read 8192/8192 bytes at offset 4299679744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299692032 ++read 8192/8192 bytes at offset 4299692032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299704320 ++read 8192/8192 bytes at offset 4299704320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299716608 ++read 8192/8192 bytes at offset 4299716608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299728896 ++read 8192/8192 bytes at offset 4299728896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299741184 ++read 8192/8192 bytes at offset 4299741184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299753472 ++read 8192/8192 bytes at offset 4299753472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299765760 ++read 8192/8192 bytes at offset 4299765760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299778048 ++read 8192/8192 bytes at offset 4299778048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299790336 ++read 8192/8192 bytes at offset 4299790336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299802624 ++read 8192/8192 bytes at offset 4299802624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299814912 ++read 8192/8192 bytes at offset 4299814912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299827200 ++read 8192/8192 bytes at offset 4299827200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299839488 ++read 8192/8192 bytes at offset 4299839488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299851776 ++read 8192/8192 bytes at offset 4299851776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299864064 ++read 8192/8192 bytes at offset 4299864064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299876352 ++read 8192/8192 bytes at offset 4299876352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299888640 ++read 8192/8192 bytes at offset 4299888640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299900928 ++read 8192/8192 bytes at offset 4299900928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299913216 ++read 8192/8192 bytes at offset 4299913216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299925504 ++read 8192/8192 bytes at offset 4299925504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4299937792 ++read 8192/8192 bytes at offset 4299937792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4301252608 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4301252608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4303351808 ++read 12288/12288 bytes at offset 4303351808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4305451008 ++read 12288/12288 bytes at offset 4305451008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4307550208 ++read 12288/12288 bytes at offset 4307550208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4309649408 ++read 12288/12288 bytes at offset 4309649408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4311748608 ++read 12288/12288 bytes at offset 4311748608 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4313847808 ++read 12288/12288 bytes at offset 4313847808 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4315947008 ++read 12288/12288 bytes at offset 4315947008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/023.out b/tests/qemu-iotests/023.out +index 10c5684..ec32341 100644 +--- a/tests/qemu-iotests/023.out ++++ b/tests/qemu-iotests/023.out +@@ -6,5662 +6,5662 @@ Testing empty image + + At offset 0: + === IO: pattern 0 +-qemu-io> wrote 1024/1024 bytes at offset 0 ++wrote 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 1024 ++wrote 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 2048 ++wrote 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 3072 ++wrote 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4096 ++wrote 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 5120 ++wrote 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 6144 ++wrote 1024/1024 bytes at offset 6144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 7168 ++wrote 1024/1024 bytes at offset 7168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 8192 ++wrote 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 9216 ++wrote 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 10240 ++wrote 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 11264 ++wrote 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 12288 ++wrote 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 13312 ++wrote 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 14336 ++wrote 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 15360 ++wrote 1024/1024 bytes at offset 15360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 16384 ++wrote 1024/1024 bytes at offset 16384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 17408 ++wrote 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 18432 ++wrote 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 19456 ++wrote 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 20480 ++wrote 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 21504 ++wrote 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 22528 ++wrote 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 23552 ++wrote 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 24576 ++wrote 1024/1024 bytes at offset 24576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 25600 ++wrote 1024/1024 bytes at offset 25600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 26624 ++wrote 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 27648 ++wrote 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 28672 ++wrote 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 29696 ++wrote 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 30720 ++wrote 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 31744 ++wrote 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 32768 ++wrote 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 33792 ++wrote 1024/1024 bytes at offset 33792 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 34816 ++wrote 1024/1024 bytes at offset 34816 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 35840 ++wrote 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> wrote 512/512 bytes at offset 37376 ++=== IO: pattern 73 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 66048 ++wrote 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 67072 ++wrote 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 68096 ++wrote 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 69120 ++wrote 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 70144 ++wrote 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 71168 ++wrote 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 72192 ++wrote 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 73216 ++wrote 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 512/512 bytes at offset 73728 ++=== IO: pattern 144 ++wrote 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 74752 ++wrote 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 75776 ++wrote 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 76800 ++wrote 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 77824 ++wrote 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 78848 ++wrote 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 79872 ++wrote 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 80896 ++wrote 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 81920 ++wrote 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 82944 ++wrote 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 83968 ++wrote 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 84992 ++wrote 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 86016 ++wrote 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 87040 ++wrote 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 88064 ++wrote 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 89088 ++wrote 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 90112 ++wrote 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 91136 ++wrote 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 92160 ++wrote 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 93184 ++wrote 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 94208 ++wrote 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 95232 ++wrote 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 96256 ++wrote 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 97280 ++wrote 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 98304 ++wrote 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 99328 ++wrote 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 100352 ++wrote 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 101376 ++wrote 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 102400 ++wrote 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 103424 ++wrote 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 104448 ++wrote 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 105472 ++wrote 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 106496 ++wrote 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 107520 ++wrote 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 108544 ++wrote 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 109568 ++wrote 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 110848 is not sector aligned +-qemu-io> offset 111872 is not sector aligned +-qemu-io> offset 112896 is not sector aligned +-qemu-io> offset 113920 is not sector aligned +-qemu-io> offset 114944 is not sector aligned +-qemu-io> offset 115968 is not sector aligned +-qemu-io> offset 116992 is not sector aligned +-qemu-io> offset 118016 is not sector aligned +-qemu-io> offset 119040 is not sector aligned +-qemu-io> offset 120064 is not sector aligned +-qemu-io> offset 121088 is not sector aligned +-qemu-io> offset 122112 is not sector aligned +-qemu-io> offset 123136 is not sector aligned +-qemu-io> offset 124160 is not sector aligned +-qemu-io> offset 125184 is not sector aligned +-qemu-io> offset 126208 is not sector aligned +-qemu-io> offset 127232 is not sector aligned +-qemu-io> offset 128256 is not sector aligned +-qemu-io> offset 129280 is not sector aligned +-qemu-io> offset 130304 is not sector aligned +-qemu-io> offset 131328 is not sector aligned +-qemu-io> offset 132352 is not sector aligned +-qemu-io> offset 133376 is not sector aligned +-qemu-io> offset 134400 is not sector aligned +-qemu-io> offset 135424 is not sector aligned +-qemu-io> offset 136448 is not sector aligned +-qemu-io> offset 137472 is not sector aligned +-qemu-io> offset 138496 is not sector aligned +-qemu-io> offset 139520 is not sector aligned +-qemu-io> offset 140544 is not sector aligned +-qemu-io> offset 141568 is not sector aligned +-qemu-io> offset 142592 is not sector aligned +-qemu-io> offset 143616 is not sector aligned +-qemu-io> offset 144640 is not sector aligned +-qemu-io> offset 145664 is not sector aligned +-qemu-io> offset 146688 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 2048/2048 bytes at offset 147968 ++=== IO: pattern 216 ++offset 110848 is not sector aligned ++offset 111872 is not sector aligned ++offset 112896 is not sector aligned ++offset 113920 is not sector aligned ++offset 114944 is not sector aligned ++offset 115968 is not sector aligned ++offset 116992 is not sector aligned ++offset 118016 is not sector aligned ++offset 119040 is not sector aligned ++offset 120064 is not sector aligned ++offset 121088 is not sector aligned ++offset 122112 is not sector aligned ++offset 123136 is not sector aligned ++offset 124160 is not sector aligned ++offset 125184 is not sector aligned ++offset 126208 is not sector aligned ++offset 127232 is not sector aligned ++offset 128256 is not sector aligned ++offset 129280 is not sector aligned ++offset 130304 is not sector aligned ++offset 131328 is not sector aligned ++offset 132352 is not sector aligned ++offset 133376 is not sector aligned ++offset 134400 is not sector aligned ++offset 135424 is not sector aligned ++offset 136448 is not sector aligned ++offset 137472 is not sector aligned ++offset 138496 is not sector aligned ++offset 139520 is not sector aligned ++offset 140544 is not sector aligned ++offset 141568 is not sector aligned ++offset 142592 is not sector aligned ++offset 143616 is not sector aligned ++offset 144640 is not sector aligned ++offset 145664 is not sector aligned ++offset 146688 is not sector aligned ++=== IO: pattern 33 ++wrote 2048/2048 bytes at offset 147968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 151040 ++wrote 2048/2048 bytes at offset 151040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 154112 ++wrote 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 157184 ++wrote 2048/2048 bytes at offset 157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 160256 ++wrote 2048/2048 bytes at offset 160256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 163328 ++wrote 2048/2048 bytes at offset 163328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 166400 ++wrote 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 169472 ++wrote 2048/2048 bytes at offset 169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 172544 ++wrote 2048/2048 bytes at offset 172544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 392192 ++wrote 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 523776 ++wrote 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 0 ++=== IO: pattern 0 ++read 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 1024 ++read 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 2048 ++read 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 3072 ++read 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4096 ++read 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 5120 ++read 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 6144 ++read 1024/1024 bytes at offset 6144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 7168 ++read 1024/1024 bytes at offset 7168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 8192 ++read 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 9216 ++read 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 10240 ++read 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11264 ++read 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 12288 ++read 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 13312 ++read 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 14336 ++read 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 15360 ++read 1024/1024 bytes at offset 15360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 16384 ++read 1024/1024 bytes at offset 16384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17408 ++read 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 18432 ++read 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 19456 ++read 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20480 ++read 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 21504 ++read 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 22528 ++read 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 23552 ++read 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 24576 ++read 1024/1024 bytes at offset 24576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 25600 ++read 1024/1024 bytes at offset 25600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26624 ++read 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 27648 ++read 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 28672 ++read 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29696 ++read 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 30720 ++read 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 31744 ++read 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 32768 ++read 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 33792 ++read 1024/1024 bytes at offset 33792 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 34816 ++read 1024/1024 bytes at offset 34816 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35840 ++read 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 37376 ++=== IO: pattern 73 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66048 ++read 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67072 ++read 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 68096 ++read 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 69120 ++read 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 70144 ++read 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 71168 ++read 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 72192 ++read 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 73216 ++read 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 73728 ++=== IO: pattern 144 ++read 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 74752 ++read 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 75776 ++read 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 76800 ++read 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 77824 ++read 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 78848 ++read 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 79872 ++read 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 80896 ++read 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81920 ++read 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82944 ++read 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83968 ++read 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84992 ++read 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 86016 ++read 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 87040 ++read 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 88064 ++read 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 89088 ++read 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 90112 ++read 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 91136 ++read 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 92160 ++read 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 93184 ++read 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 94208 ++read 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 95232 ++read 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 96256 ++read 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 97280 ++read 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 98304 ++read 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 99328 ++read 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100352 ++read 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101376 ++read 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 102400 ++read 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 103424 ++read 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 104448 ++read 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 105472 ++read 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 106496 ++read 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 107520 ++read 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 108544 ++read 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 109568 ++read 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 110848 is not sector aligned +-qemu-io> offset 111872 is not sector aligned +-qemu-io> offset 112896 is not sector aligned +-qemu-io> offset 113920 is not sector aligned +-qemu-io> offset 114944 is not sector aligned +-qemu-io> offset 115968 is not sector aligned +-qemu-io> offset 116992 is not sector aligned +-qemu-io> offset 118016 is not sector aligned +-qemu-io> offset 119040 is not sector aligned +-qemu-io> offset 120064 is not sector aligned +-qemu-io> offset 121088 is not sector aligned +-qemu-io> offset 122112 is not sector aligned +-qemu-io> offset 123136 is not sector aligned +-qemu-io> offset 124160 is not sector aligned +-qemu-io> offset 125184 is not sector aligned +-qemu-io> offset 126208 is not sector aligned +-qemu-io> offset 127232 is not sector aligned +-qemu-io> offset 128256 is not sector aligned +-qemu-io> offset 129280 is not sector aligned +-qemu-io> offset 130304 is not sector aligned +-qemu-io> offset 131328 is not sector aligned +-qemu-io> offset 132352 is not sector aligned +-qemu-io> offset 133376 is not sector aligned +-qemu-io> offset 134400 is not sector aligned +-qemu-io> offset 135424 is not sector aligned +-qemu-io> offset 136448 is not sector aligned +-qemu-io> offset 137472 is not sector aligned +-qemu-io> offset 138496 is not sector aligned +-qemu-io> offset 139520 is not sector aligned +-qemu-io> offset 140544 is not sector aligned +-qemu-io> offset 141568 is not sector aligned +-qemu-io> offset 142592 is not sector aligned +-qemu-io> offset 143616 is not sector aligned +-qemu-io> offset 144640 is not sector aligned +-qemu-io> offset 145664 is not sector aligned +-qemu-io> offset 146688 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 147968 ++=== IO: pattern 216 ++offset 110848 is not sector aligned ++offset 111872 is not sector aligned ++offset 112896 is not sector aligned ++offset 113920 is not sector aligned ++offset 114944 is not sector aligned ++offset 115968 is not sector aligned ++offset 116992 is not sector aligned ++offset 118016 is not sector aligned ++offset 119040 is not sector aligned ++offset 120064 is not sector aligned ++offset 121088 is not sector aligned ++offset 122112 is not sector aligned ++offset 123136 is not sector aligned ++offset 124160 is not sector aligned ++offset 125184 is not sector aligned ++offset 126208 is not sector aligned ++offset 127232 is not sector aligned ++offset 128256 is not sector aligned ++offset 129280 is not sector aligned ++offset 130304 is not sector aligned ++offset 131328 is not sector aligned ++offset 132352 is not sector aligned ++offset 133376 is not sector aligned ++offset 134400 is not sector aligned ++offset 135424 is not sector aligned ++offset 136448 is not sector aligned ++offset 137472 is not sector aligned ++offset 138496 is not sector aligned ++offset 139520 is not sector aligned ++offset 140544 is not sector aligned ++offset 141568 is not sector aligned ++offset 142592 is not sector aligned ++offset 143616 is not sector aligned ++offset 144640 is not sector aligned ++offset 145664 is not sector aligned ++offset 146688 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 147968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 151040 ++read 2048/2048 bytes at offset 151040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154112 ++read 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157184 ++read 2048/2048 bytes at offset 157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 160256 ++read 2048/2048 bytes at offset 160256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 163328 ++read 2048/2048 bytes at offset 163328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166400 ++read 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169472 ++read 2048/2048 bytes at offset 169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 172544 ++read 2048/2048 bytes at offset 172544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 392192 ++read 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 523776 ++read 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 1024/1024 bytes at offset 0 ++=== IO: pattern 0 ++wrote 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 1024 ++wrote 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 2048 ++wrote 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 3072 ++wrote 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4096 ++wrote 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 5120 ++wrote 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 6144 ++wrote 1024/1024 bytes at offset 6144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 7168 ++wrote 1024/1024 bytes at offset 7168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 8192 ++wrote 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 9216 ++wrote 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 10240 ++wrote 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 11264 ++wrote 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 12288 ++wrote 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 13312 ++wrote 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 14336 ++wrote 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 15360 ++wrote 1024/1024 bytes at offset 15360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 16384 ++wrote 1024/1024 bytes at offset 16384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 17408 ++wrote 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 18432 ++wrote 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 19456 ++wrote 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 20480 ++wrote 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 21504 ++wrote 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 22528 ++wrote 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 23552 ++wrote 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 24576 ++wrote 1024/1024 bytes at offset 24576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 25600 ++wrote 1024/1024 bytes at offset 25600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 26624 ++wrote 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 27648 ++wrote 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 28672 ++wrote 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 29696 ++wrote 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 30720 ++wrote 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 31744 ++wrote 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 32768 ++wrote 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 33792 ++wrote 1024/1024 bytes at offset 33792 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 34816 ++wrote 1024/1024 bytes at offset 34816 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 35840 ++wrote 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> wrote 512/512 bytes at offset 37376 ++=== IO: pattern 73 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 66048 ++wrote 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 67072 ++wrote 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 68096 ++wrote 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 69120 ++wrote 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 70144 ++wrote 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 71168 ++wrote 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 72192 ++wrote 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 73216 ++wrote 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 512/512 bytes at offset 73728 ++=== IO: pattern 144 ++wrote 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 74752 ++wrote 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 75776 ++wrote 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 76800 ++wrote 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 77824 ++wrote 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 78848 ++wrote 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 79872 ++wrote 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 80896 ++wrote 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 81920 ++wrote 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 82944 ++wrote 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 83968 ++wrote 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 84992 ++wrote 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 86016 ++wrote 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 87040 ++wrote 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 88064 ++wrote 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 89088 ++wrote 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 90112 ++wrote 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 91136 ++wrote 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 92160 ++wrote 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 93184 ++wrote 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 94208 ++wrote 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 95232 ++wrote 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 96256 ++wrote 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 97280 ++wrote 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 98304 ++wrote 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 99328 ++wrote 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 100352 ++wrote 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 101376 ++wrote 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 102400 ++wrote 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 103424 ++wrote 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 104448 ++wrote 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 105472 ++wrote 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 106496 ++wrote 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 107520 ++wrote 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 108544 ++wrote 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 109568 ++wrote 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 110848 is not sector aligned +-qemu-io> offset 111872 is not sector aligned +-qemu-io> offset 112896 is not sector aligned +-qemu-io> offset 113920 is not sector aligned +-qemu-io> offset 114944 is not sector aligned +-qemu-io> offset 115968 is not sector aligned +-qemu-io> offset 116992 is not sector aligned +-qemu-io> offset 118016 is not sector aligned +-qemu-io> offset 119040 is not sector aligned +-qemu-io> offset 120064 is not sector aligned +-qemu-io> offset 121088 is not sector aligned +-qemu-io> offset 122112 is not sector aligned +-qemu-io> offset 123136 is not sector aligned +-qemu-io> offset 124160 is not sector aligned +-qemu-io> offset 125184 is not sector aligned +-qemu-io> offset 126208 is not sector aligned +-qemu-io> offset 127232 is not sector aligned +-qemu-io> offset 128256 is not sector aligned +-qemu-io> offset 129280 is not sector aligned +-qemu-io> offset 130304 is not sector aligned +-qemu-io> offset 131328 is not sector aligned +-qemu-io> offset 132352 is not sector aligned +-qemu-io> offset 133376 is not sector aligned +-qemu-io> offset 134400 is not sector aligned +-qemu-io> offset 135424 is not sector aligned +-qemu-io> offset 136448 is not sector aligned +-qemu-io> offset 137472 is not sector aligned +-qemu-io> offset 138496 is not sector aligned +-qemu-io> offset 139520 is not sector aligned +-qemu-io> offset 140544 is not sector aligned +-qemu-io> offset 141568 is not sector aligned +-qemu-io> offset 142592 is not sector aligned +-qemu-io> offset 143616 is not sector aligned +-qemu-io> offset 144640 is not sector aligned +-qemu-io> offset 145664 is not sector aligned +-qemu-io> offset 146688 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 2048/2048 bytes at offset 147968 ++=== IO: pattern 216 ++offset 110848 is not sector aligned ++offset 111872 is not sector aligned ++offset 112896 is not sector aligned ++offset 113920 is not sector aligned ++offset 114944 is not sector aligned ++offset 115968 is not sector aligned ++offset 116992 is not sector aligned ++offset 118016 is not sector aligned ++offset 119040 is not sector aligned ++offset 120064 is not sector aligned ++offset 121088 is not sector aligned ++offset 122112 is not sector aligned ++offset 123136 is not sector aligned ++offset 124160 is not sector aligned ++offset 125184 is not sector aligned ++offset 126208 is not sector aligned ++offset 127232 is not sector aligned ++offset 128256 is not sector aligned ++offset 129280 is not sector aligned ++offset 130304 is not sector aligned ++offset 131328 is not sector aligned ++offset 132352 is not sector aligned ++offset 133376 is not sector aligned ++offset 134400 is not sector aligned ++offset 135424 is not sector aligned ++offset 136448 is not sector aligned ++offset 137472 is not sector aligned ++offset 138496 is not sector aligned ++offset 139520 is not sector aligned ++offset 140544 is not sector aligned ++offset 141568 is not sector aligned ++offset 142592 is not sector aligned ++offset 143616 is not sector aligned ++offset 144640 is not sector aligned ++offset 145664 is not sector aligned ++offset 146688 is not sector aligned ++=== IO: pattern 33 ++wrote 2048/2048 bytes at offset 147968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 151040 ++wrote 2048/2048 bytes at offset 151040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 154112 ++wrote 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 157184 ++wrote 2048/2048 bytes at offset 157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 160256 ++wrote 2048/2048 bytes at offset 160256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 163328 ++wrote 2048/2048 bytes at offset 163328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 166400 ++wrote 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 169472 ++wrote 2048/2048 bytes at offset 169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 172544 ++wrote 2048/2048 bytes at offset 172544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 392192 ++wrote 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 523776 ++wrote 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 0 ++=== IO: pattern 0 ++read 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 1024 ++read 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 2048 ++read 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 3072 ++read 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4096 ++read 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 5120 ++read 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 6144 ++read 1024/1024 bytes at offset 6144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 7168 ++read 1024/1024 bytes at offset 7168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 8192 ++read 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 9216 ++read 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 10240 ++read 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11264 ++read 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 12288 ++read 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 13312 ++read 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 14336 ++read 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 15360 ++read 1024/1024 bytes at offset 15360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 16384 ++read 1024/1024 bytes at offset 16384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17408 ++read 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 18432 ++read 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 19456 ++read 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20480 ++read 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 21504 ++read 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 22528 ++read 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 23552 ++read 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 24576 ++read 1024/1024 bytes at offset 24576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 25600 ++read 1024/1024 bytes at offset 25600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26624 ++read 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 27648 ++read 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 28672 ++read 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29696 ++read 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 30720 ++read 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 31744 ++read 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 32768 ++read 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 33792 ++read 1024/1024 bytes at offset 33792 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 34816 ++read 1024/1024 bytes at offset 34816 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35840 ++read 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 37376 ++=== IO: pattern 73 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66048 ++read 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67072 ++read 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 68096 ++read 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 69120 ++read 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 70144 ++read 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 71168 ++read 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 72192 ++read 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 73216 ++read 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 73728 ++=== IO: pattern 144 ++read 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 74752 ++read 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 75776 ++read 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 76800 ++read 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 77824 ++read 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 78848 ++read 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 79872 ++read 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 80896 ++read 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81920 ++read 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82944 ++read 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83968 ++read 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84992 ++read 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 86016 ++read 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 87040 ++read 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 88064 ++read 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 89088 ++read 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 90112 ++read 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 91136 ++read 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 92160 ++read 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 93184 ++read 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 94208 ++read 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 95232 ++read 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 96256 ++read 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 97280 ++read 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 98304 ++read 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 99328 ++read 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100352 ++read 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101376 ++read 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 102400 ++read 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 103424 ++read 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 104448 ++read 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 105472 ++read 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 106496 ++read 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 107520 ++read 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 108544 ++read 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 109568 ++read 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 110848 is not sector aligned +-qemu-io> offset 111872 is not sector aligned +-qemu-io> offset 112896 is not sector aligned +-qemu-io> offset 113920 is not sector aligned +-qemu-io> offset 114944 is not sector aligned +-qemu-io> offset 115968 is not sector aligned +-qemu-io> offset 116992 is not sector aligned +-qemu-io> offset 118016 is not sector aligned +-qemu-io> offset 119040 is not sector aligned +-qemu-io> offset 120064 is not sector aligned +-qemu-io> offset 121088 is not sector aligned +-qemu-io> offset 122112 is not sector aligned +-qemu-io> offset 123136 is not sector aligned +-qemu-io> offset 124160 is not sector aligned +-qemu-io> offset 125184 is not sector aligned +-qemu-io> offset 126208 is not sector aligned +-qemu-io> offset 127232 is not sector aligned +-qemu-io> offset 128256 is not sector aligned +-qemu-io> offset 129280 is not sector aligned +-qemu-io> offset 130304 is not sector aligned +-qemu-io> offset 131328 is not sector aligned +-qemu-io> offset 132352 is not sector aligned +-qemu-io> offset 133376 is not sector aligned +-qemu-io> offset 134400 is not sector aligned +-qemu-io> offset 135424 is not sector aligned +-qemu-io> offset 136448 is not sector aligned +-qemu-io> offset 137472 is not sector aligned +-qemu-io> offset 138496 is not sector aligned +-qemu-io> offset 139520 is not sector aligned +-qemu-io> offset 140544 is not sector aligned +-qemu-io> offset 141568 is not sector aligned +-qemu-io> offset 142592 is not sector aligned +-qemu-io> offset 143616 is not sector aligned +-qemu-io> offset 144640 is not sector aligned +-qemu-io> offset 145664 is not sector aligned +-qemu-io> offset 146688 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 147968 ++=== IO: pattern 216 ++offset 110848 is not sector aligned ++offset 111872 is not sector aligned ++offset 112896 is not sector aligned ++offset 113920 is not sector aligned ++offset 114944 is not sector aligned ++offset 115968 is not sector aligned ++offset 116992 is not sector aligned ++offset 118016 is not sector aligned ++offset 119040 is not sector aligned ++offset 120064 is not sector aligned ++offset 121088 is not sector aligned ++offset 122112 is not sector aligned ++offset 123136 is not sector aligned ++offset 124160 is not sector aligned ++offset 125184 is not sector aligned ++offset 126208 is not sector aligned ++offset 127232 is not sector aligned ++offset 128256 is not sector aligned ++offset 129280 is not sector aligned ++offset 130304 is not sector aligned ++offset 131328 is not sector aligned ++offset 132352 is not sector aligned ++offset 133376 is not sector aligned ++offset 134400 is not sector aligned ++offset 135424 is not sector aligned ++offset 136448 is not sector aligned ++offset 137472 is not sector aligned ++offset 138496 is not sector aligned ++offset 139520 is not sector aligned ++offset 140544 is not sector aligned ++offset 141568 is not sector aligned ++offset 142592 is not sector aligned ++offset 143616 is not sector aligned ++offset 144640 is not sector aligned ++offset 145664 is not sector aligned ++offset 146688 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 147968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 151040 ++read 2048/2048 bytes at offset 151040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154112 ++read 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157184 ++read 2048/2048 bytes at offset 157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 160256 ++read 2048/2048 bytes at offset 160256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 163328 ++read 2048/2048 bytes at offset 163328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166400 ++read 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169472 ++read 2048/2048 bytes at offset 169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 172544 ++read 2048/2048 bytes at offset 172544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 392192 ++read 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 523776 ++read 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + At offset 4294967296: + === IO: pattern 0 +-qemu-io> wrote 1024/1024 bytes at offset 4294967296 ++wrote 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294968320 ++wrote 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294969344 ++wrote 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294970368 ++wrote 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294971392 ++wrote 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294972416 ++wrote 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294973440 ++wrote 1024/1024 bytes at offset 4294973440 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294974464 ++wrote 1024/1024 bytes at offset 4294974464 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294975488 ++wrote 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294976512 ++wrote 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294977536 ++wrote 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294978560 ++wrote 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294979584 ++wrote 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294980608 ++wrote 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294981632 ++wrote 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294982656 ++wrote 1024/1024 bytes at offset 4294982656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294983680 ++wrote 1024/1024 bytes at offset 4294983680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294984704 ++wrote 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294985728 ++wrote 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294986752 ++wrote 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294987776 ++wrote 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294988800 ++wrote 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294989824 ++wrote 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294990848 ++wrote 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294991872 ++wrote 1024/1024 bytes at offset 4294991872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294992896 ++wrote 1024/1024 bytes at offset 4294992896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294993920 ++wrote 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294994944 ++wrote 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294995968 ++wrote 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294996992 ++wrote 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294998016 ++wrote 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294999040 ++wrote 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295000064 ++wrote 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295001088 ++wrote 1024/1024 bytes at offset 4295001088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295002112 ++wrote 1024/1024 bytes at offset 4295002112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295003136 ++wrote 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> wrote 512/512 bytes at offset 4295004672 ++=== IO: pattern 73 ++wrote 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005696 ++wrote 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006720 ++wrote 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007744 ++wrote 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008768 ++wrote 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009792 ++wrote 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010816 ++wrote 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011840 ++wrote 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012864 ++wrote 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013888 ++wrote 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014912 ++wrote 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015936 ++wrote 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016960 ++wrote 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017984 ++wrote 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019008 ++wrote 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020032 ++wrote 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021056 ++wrote 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022080 ++wrote 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023104 ++wrote 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024128 ++wrote 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025152 ++wrote 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026176 ++wrote 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027200 ++wrote 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028224 ++wrote 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029248 ++wrote 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030272 ++wrote 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031296 ++wrote 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032320 ++wrote 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295033344 ++wrote 512/512 bytes at offset 4295033344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295034368 ++wrote 512/512 bytes at offset 4295034368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295035392 ++wrote 512/512 bytes at offset 4295035392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295036416 ++wrote 512/512 bytes at offset 4295036416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295037440 ++wrote 512/512 bytes at offset 4295037440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295038464 ++wrote 512/512 bytes at offset 4295038464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295039488 ++wrote 512/512 bytes at offset 4295039488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295040512 ++wrote 512/512 bytes at offset 4295040512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 512/512 bytes at offset 4295041024 ++=== IO: pattern 144 ++wrote 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295042048 ++wrote 512/512 bytes at offset 4295042048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295043072 ++wrote 512/512 bytes at offset 4295043072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295044096 ++wrote 512/512 bytes at offset 4295044096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295045120 ++wrote 512/512 bytes at offset 4295045120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295046144 ++wrote 512/512 bytes at offset 4295046144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295047168 ++wrote 512/512 bytes at offset 4295047168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295048192 ++wrote 512/512 bytes at offset 4295048192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295049216 ++wrote 512/512 bytes at offset 4295049216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295050240 ++wrote 512/512 bytes at offset 4295050240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295051264 ++wrote 512/512 bytes at offset 4295051264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295052288 ++wrote 512/512 bytes at offset 4295052288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295053312 ++wrote 512/512 bytes at offset 4295053312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295054336 ++wrote 512/512 bytes at offset 4295054336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295055360 ++wrote 512/512 bytes at offset 4295055360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295056384 ++wrote 512/512 bytes at offset 4295056384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295057408 ++wrote 512/512 bytes at offset 4295057408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295058432 ++wrote 512/512 bytes at offset 4295058432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295059456 ++wrote 512/512 bytes at offset 4295059456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295060480 ++wrote 512/512 bytes at offset 4295060480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295061504 ++wrote 512/512 bytes at offset 4295061504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295062528 ++wrote 512/512 bytes at offset 4295062528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295063552 ++wrote 512/512 bytes at offset 4295063552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295064576 ++wrote 512/512 bytes at offset 4295064576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295065600 ++wrote 512/512 bytes at offset 4295065600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295066624 ++wrote 512/512 bytes at offset 4295066624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295067648 ++wrote 512/512 bytes at offset 4295067648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295068672 ++wrote 512/512 bytes at offset 4295068672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295069696 ++wrote 512/512 bytes at offset 4295069696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295070720 ++wrote 512/512 bytes at offset 4295070720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295071744 ++wrote 512/512 bytes at offset 4295071744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295072768 ++wrote 512/512 bytes at offset 4295072768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295073792 ++wrote 512/512 bytes at offset 4295073792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295074816 ++wrote 512/512 bytes at offset 4295074816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295075840 ++wrote 512/512 bytes at offset 4295075840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295076864 ++wrote 512/512 bytes at offset 4295076864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 4295078144 is not sector aligned +-qemu-io> offset 4295079168 is not sector aligned +-qemu-io> offset 4295080192 is not sector aligned +-qemu-io> offset 4295081216 is not sector aligned +-qemu-io> offset 4295082240 is not sector aligned +-qemu-io> offset 4295083264 is not sector aligned +-qemu-io> offset 4295084288 is not sector aligned +-qemu-io> offset 4295085312 is not sector aligned +-qemu-io> offset 4295086336 is not sector aligned +-qemu-io> offset 4295087360 is not sector aligned +-qemu-io> offset 4295088384 is not sector aligned +-qemu-io> offset 4295089408 is not sector aligned +-qemu-io> offset 4295090432 is not sector aligned +-qemu-io> offset 4295091456 is not sector aligned +-qemu-io> offset 4295092480 is not sector aligned +-qemu-io> offset 4295093504 is not sector aligned +-qemu-io> offset 4295094528 is not sector aligned +-qemu-io> offset 4295095552 is not sector aligned +-qemu-io> offset 4295096576 is not sector aligned +-qemu-io> offset 4295097600 is not sector aligned +-qemu-io> offset 4295098624 is not sector aligned +-qemu-io> offset 4295099648 is not sector aligned +-qemu-io> offset 4295100672 is not sector aligned +-qemu-io> offset 4295101696 is not sector aligned +-qemu-io> offset 4295102720 is not sector aligned +-qemu-io> offset 4295103744 is not sector aligned +-qemu-io> offset 4295104768 is not sector aligned +-qemu-io> offset 4295105792 is not sector aligned +-qemu-io> offset 4295106816 is not sector aligned +-qemu-io> offset 4295107840 is not sector aligned +-qemu-io> offset 4295108864 is not sector aligned +-qemu-io> offset 4295109888 is not sector aligned +-qemu-io> offset 4295110912 is not sector aligned +-qemu-io> offset 4295111936 is not sector aligned +-qemu-io> offset 4295112960 is not sector aligned +-qemu-io> offset 4295113984 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 2048/2048 bytes at offset 4295115264 ++=== IO: pattern 216 ++offset 4295078144 is not sector aligned ++offset 4295079168 is not sector aligned ++offset 4295080192 is not sector aligned ++offset 4295081216 is not sector aligned ++offset 4295082240 is not sector aligned ++offset 4295083264 is not sector aligned ++offset 4295084288 is not sector aligned ++offset 4295085312 is not sector aligned ++offset 4295086336 is not sector aligned ++offset 4295087360 is not sector aligned ++offset 4295088384 is not sector aligned ++offset 4295089408 is not sector aligned ++offset 4295090432 is not sector aligned ++offset 4295091456 is not sector aligned ++offset 4295092480 is not sector aligned ++offset 4295093504 is not sector aligned ++offset 4295094528 is not sector aligned ++offset 4295095552 is not sector aligned ++offset 4295096576 is not sector aligned ++offset 4295097600 is not sector aligned ++offset 4295098624 is not sector aligned ++offset 4295099648 is not sector aligned ++offset 4295100672 is not sector aligned ++offset 4295101696 is not sector aligned ++offset 4295102720 is not sector aligned ++offset 4295103744 is not sector aligned ++offset 4295104768 is not sector aligned ++offset 4295105792 is not sector aligned ++offset 4295106816 is not sector aligned ++offset 4295107840 is not sector aligned ++offset 4295108864 is not sector aligned ++offset 4295109888 is not sector aligned ++offset 4295110912 is not sector aligned ++offset 4295111936 is not sector aligned ++offset 4295112960 is not sector aligned ++offset 4295113984 is not sector aligned ++=== IO: pattern 33 ++wrote 2048/2048 bytes at offset 4295115264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295118336 ++wrote 2048/2048 bytes at offset 4295118336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295121408 ++wrote 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295124480 ++wrote 2048/2048 bytes at offset 4295124480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295127552 ++wrote 2048/2048 bytes at offset 4295127552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295130624 ++wrote 2048/2048 bytes at offset 4295130624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295133696 ++wrote 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295136768 ++wrote 2048/2048 bytes at offset 4295136768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295139840 ++wrote 2048/2048 bytes at offset 4295139840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295359488 ++wrote 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295491072 ++wrote 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294968320 ++read 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294969344 ++read 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294970368 ++read 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294971392 ++read 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294972416 ++read 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294973440 ++read 1024/1024 bytes at offset 4294973440 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294974464 ++read 1024/1024 bytes at offset 4294974464 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294975488 ++read 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294976512 ++read 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294977536 ++read 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978560 ++read 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294979584 ++read 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294980608 ++read 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294981632 ++read 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294982656 ++read 1024/1024 bytes at offset 4294982656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294983680 ++read 1024/1024 bytes at offset 4294983680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984704 ++read 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294985728 ++read 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294986752 ++read 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987776 ++read 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294988800 ++read 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294989824 ++read 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294990848 ++read 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294991872 ++read 1024/1024 bytes at offset 4294991872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294992896 ++read 1024/1024 bytes at offset 4294992896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993920 ++read 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294994944 ++read 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294995968 ++read 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996992 ++read 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294998016 ++read 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294999040 ++read 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295000064 ++read 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295001088 ++read 1024/1024 bytes at offset 4295001088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295002112 ++read 1024/1024 bytes at offset 4295002112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003136 ++read 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 4295004672 ++=== IO: pattern 73 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295033344 ++read 512/512 bytes at offset 4295033344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295034368 ++read 512/512 bytes at offset 4295034368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295035392 ++read 512/512 bytes at offset 4295035392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295036416 ++read 512/512 bytes at offset 4295036416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295037440 ++read 512/512 bytes at offset 4295037440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295038464 ++read 512/512 bytes at offset 4295038464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295039488 ++read 512/512 bytes at offset 4295039488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295040512 ++read 512/512 bytes at offset 4295040512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 4295041024 ++=== IO: pattern 144 ++read 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295042048 ++read 512/512 bytes at offset 4295042048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295043072 ++read 512/512 bytes at offset 4295043072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295044096 ++read 512/512 bytes at offset 4295044096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295045120 ++read 512/512 bytes at offset 4295045120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295046144 ++read 512/512 bytes at offset 4295046144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295047168 ++read 512/512 bytes at offset 4295047168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295048192 ++read 512/512 bytes at offset 4295048192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295049216 ++read 512/512 bytes at offset 4295049216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295050240 ++read 512/512 bytes at offset 4295050240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295051264 ++read 512/512 bytes at offset 4295051264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295052288 ++read 512/512 bytes at offset 4295052288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295053312 ++read 512/512 bytes at offset 4295053312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295054336 ++read 512/512 bytes at offset 4295054336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295055360 ++read 512/512 bytes at offset 4295055360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295056384 ++read 512/512 bytes at offset 4295056384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295057408 ++read 512/512 bytes at offset 4295057408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295058432 ++read 512/512 bytes at offset 4295058432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295059456 ++read 512/512 bytes at offset 4295059456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295060480 ++read 512/512 bytes at offset 4295060480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295061504 ++read 512/512 bytes at offset 4295061504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295062528 ++read 512/512 bytes at offset 4295062528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295063552 ++read 512/512 bytes at offset 4295063552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295064576 ++read 512/512 bytes at offset 4295064576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295065600 ++read 512/512 bytes at offset 4295065600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295066624 ++read 512/512 bytes at offset 4295066624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295067648 ++read 512/512 bytes at offset 4295067648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295068672 ++read 512/512 bytes at offset 4295068672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295069696 ++read 512/512 bytes at offset 4295069696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295070720 ++read 512/512 bytes at offset 4295070720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295071744 ++read 512/512 bytes at offset 4295071744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295072768 ++read 512/512 bytes at offset 4295072768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295073792 ++read 512/512 bytes at offset 4295073792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295074816 ++read 512/512 bytes at offset 4295074816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295075840 ++read 512/512 bytes at offset 4295075840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295076864 ++read 512/512 bytes at offset 4295076864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 4295078144 is not sector aligned +-qemu-io> offset 4295079168 is not sector aligned +-qemu-io> offset 4295080192 is not sector aligned +-qemu-io> offset 4295081216 is not sector aligned +-qemu-io> offset 4295082240 is not sector aligned +-qemu-io> offset 4295083264 is not sector aligned +-qemu-io> offset 4295084288 is not sector aligned +-qemu-io> offset 4295085312 is not sector aligned +-qemu-io> offset 4295086336 is not sector aligned +-qemu-io> offset 4295087360 is not sector aligned +-qemu-io> offset 4295088384 is not sector aligned +-qemu-io> offset 4295089408 is not sector aligned +-qemu-io> offset 4295090432 is not sector aligned +-qemu-io> offset 4295091456 is not sector aligned +-qemu-io> offset 4295092480 is not sector aligned +-qemu-io> offset 4295093504 is not sector aligned +-qemu-io> offset 4295094528 is not sector aligned +-qemu-io> offset 4295095552 is not sector aligned +-qemu-io> offset 4295096576 is not sector aligned +-qemu-io> offset 4295097600 is not sector aligned +-qemu-io> offset 4295098624 is not sector aligned +-qemu-io> offset 4295099648 is not sector aligned +-qemu-io> offset 4295100672 is not sector aligned +-qemu-io> offset 4295101696 is not sector aligned +-qemu-io> offset 4295102720 is not sector aligned +-qemu-io> offset 4295103744 is not sector aligned +-qemu-io> offset 4295104768 is not sector aligned +-qemu-io> offset 4295105792 is not sector aligned +-qemu-io> offset 4295106816 is not sector aligned +-qemu-io> offset 4295107840 is not sector aligned +-qemu-io> offset 4295108864 is not sector aligned +-qemu-io> offset 4295109888 is not sector aligned +-qemu-io> offset 4295110912 is not sector aligned +-qemu-io> offset 4295111936 is not sector aligned +-qemu-io> offset 4295112960 is not sector aligned +-qemu-io> offset 4295113984 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 4295115264 ++=== IO: pattern 216 ++offset 4295078144 is not sector aligned ++offset 4295079168 is not sector aligned ++offset 4295080192 is not sector aligned ++offset 4295081216 is not sector aligned ++offset 4295082240 is not sector aligned ++offset 4295083264 is not sector aligned ++offset 4295084288 is not sector aligned ++offset 4295085312 is not sector aligned ++offset 4295086336 is not sector aligned ++offset 4295087360 is not sector aligned ++offset 4295088384 is not sector aligned ++offset 4295089408 is not sector aligned ++offset 4295090432 is not sector aligned ++offset 4295091456 is not sector aligned ++offset 4295092480 is not sector aligned ++offset 4295093504 is not sector aligned ++offset 4295094528 is not sector aligned ++offset 4295095552 is not sector aligned ++offset 4295096576 is not sector aligned ++offset 4295097600 is not sector aligned ++offset 4295098624 is not sector aligned ++offset 4295099648 is not sector aligned ++offset 4295100672 is not sector aligned ++offset 4295101696 is not sector aligned ++offset 4295102720 is not sector aligned ++offset 4295103744 is not sector aligned ++offset 4295104768 is not sector aligned ++offset 4295105792 is not sector aligned ++offset 4295106816 is not sector aligned ++offset 4295107840 is not sector aligned ++offset 4295108864 is not sector aligned ++offset 4295109888 is not sector aligned ++offset 4295110912 is not sector aligned ++offset 4295111936 is not sector aligned ++offset 4295112960 is not sector aligned ++offset 4295113984 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 4295115264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295118336 ++read 2048/2048 bytes at offset 4295118336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121408 ++read 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124480 ++read 2048/2048 bytes at offset 4295124480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295127552 ++read 2048/2048 bytes at offset 4295127552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295130624 ++read 2048/2048 bytes at offset 4295130624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133696 ++read 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295136768 ++read 2048/2048 bytes at offset 4295136768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295139840 ++read 2048/2048 bytes at offset 4295139840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295359488 ++read 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295491072 ++read 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 1024/1024 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294968320 ++wrote 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294969344 ++wrote 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294970368 ++wrote 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294971392 ++wrote 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294972416 ++wrote 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294973440 ++wrote 1024/1024 bytes at offset 4294973440 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294974464 ++wrote 1024/1024 bytes at offset 4294974464 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294975488 ++wrote 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294976512 ++wrote 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294977536 ++wrote 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294978560 ++wrote 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294979584 ++wrote 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294980608 ++wrote 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294981632 ++wrote 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294982656 ++wrote 1024/1024 bytes at offset 4294982656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294983680 ++wrote 1024/1024 bytes at offset 4294983680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294984704 ++wrote 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294985728 ++wrote 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294986752 ++wrote 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294987776 ++wrote 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294988800 ++wrote 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294989824 ++wrote 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294990848 ++wrote 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294991872 ++wrote 1024/1024 bytes at offset 4294991872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294992896 ++wrote 1024/1024 bytes at offset 4294992896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294993920 ++wrote 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294994944 ++wrote 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294995968 ++wrote 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294996992 ++wrote 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294998016 ++wrote 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294999040 ++wrote 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295000064 ++wrote 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295001088 ++wrote 1024/1024 bytes at offset 4295001088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295002112 ++wrote 1024/1024 bytes at offset 4295002112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295003136 ++wrote 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> wrote 512/512 bytes at offset 4295004672 ++=== IO: pattern 73 ++wrote 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295005696 ++wrote 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006720 ++wrote 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007744 ++wrote 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008768 ++wrote 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009792 ++wrote 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010816 ++wrote 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011840 ++wrote 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012864 ++wrote 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013888 ++wrote 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014912 ++wrote 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015936 ++wrote 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016960 ++wrote 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017984 ++wrote 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019008 ++wrote 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020032 ++wrote 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021056 ++wrote 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022080 ++wrote 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023104 ++wrote 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024128 ++wrote 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025152 ++wrote 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026176 ++wrote 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027200 ++wrote 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028224 ++wrote 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029248 ++wrote 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030272 ++wrote 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031296 ++wrote 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032320 ++wrote 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295033344 ++wrote 512/512 bytes at offset 4295033344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295034368 ++wrote 512/512 bytes at offset 4295034368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295035392 ++wrote 512/512 bytes at offset 4295035392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295036416 ++wrote 512/512 bytes at offset 4295036416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295037440 ++wrote 512/512 bytes at offset 4295037440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295038464 ++wrote 512/512 bytes at offset 4295038464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295039488 ++wrote 512/512 bytes at offset 4295039488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295040512 ++wrote 512/512 bytes at offset 4295040512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 512/512 bytes at offset 4295041024 ++=== IO: pattern 144 ++wrote 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295042048 ++wrote 512/512 bytes at offset 4295042048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295043072 ++wrote 512/512 bytes at offset 4295043072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295044096 ++wrote 512/512 bytes at offset 4295044096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295045120 ++wrote 512/512 bytes at offset 4295045120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295046144 ++wrote 512/512 bytes at offset 4295046144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295047168 ++wrote 512/512 bytes at offset 4295047168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295048192 ++wrote 512/512 bytes at offset 4295048192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295049216 ++wrote 512/512 bytes at offset 4295049216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295050240 ++wrote 512/512 bytes at offset 4295050240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295051264 ++wrote 512/512 bytes at offset 4295051264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295052288 ++wrote 512/512 bytes at offset 4295052288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295053312 ++wrote 512/512 bytes at offset 4295053312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295054336 ++wrote 512/512 bytes at offset 4295054336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295055360 ++wrote 512/512 bytes at offset 4295055360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295056384 ++wrote 512/512 bytes at offset 4295056384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295057408 ++wrote 512/512 bytes at offset 4295057408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295058432 ++wrote 512/512 bytes at offset 4295058432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295059456 ++wrote 512/512 bytes at offset 4295059456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295060480 ++wrote 512/512 bytes at offset 4295060480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295061504 ++wrote 512/512 bytes at offset 4295061504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295062528 ++wrote 512/512 bytes at offset 4295062528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295063552 ++wrote 512/512 bytes at offset 4295063552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295064576 ++wrote 512/512 bytes at offset 4295064576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295065600 ++wrote 512/512 bytes at offset 4295065600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295066624 ++wrote 512/512 bytes at offset 4295066624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295067648 ++wrote 512/512 bytes at offset 4295067648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295068672 ++wrote 512/512 bytes at offset 4295068672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295069696 ++wrote 512/512 bytes at offset 4295069696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295070720 ++wrote 512/512 bytes at offset 4295070720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295071744 ++wrote 512/512 bytes at offset 4295071744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295072768 ++wrote 512/512 bytes at offset 4295072768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295073792 ++wrote 512/512 bytes at offset 4295073792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295074816 ++wrote 512/512 bytes at offset 4295074816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295075840 ++wrote 512/512 bytes at offset 4295075840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295076864 ++wrote 512/512 bytes at offset 4295076864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 4295078144 is not sector aligned +-qemu-io> offset 4295079168 is not sector aligned +-qemu-io> offset 4295080192 is not sector aligned +-qemu-io> offset 4295081216 is not sector aligned +-qemu-io> offset 4295082240 is not sector aligned +-qemu-io> offset 4295083264 is not sector aligned +-qemu-io> offset 4295084288 is not sector aligned +-qemu-io> offset 4295085312 is not sector aligned +-qemu-io> offset 4295086336 is not sector aligned +-qemu-io> offset 4295087360 is not sector aligned +-qemu-io> offset 4295088384 is not sector aligned +-qemu-io> offset 4295089408 is not sector aligned +-qemu-io> offset 4295090432 is not sector aligned +-qemu-io> offset 4295091456 is not sector aligned +-qemu-io> offset 4295092480 is not sector aligned +-qemu-io> offset 4295093504 is not sector aligned +-qemu-io> offset 4295094528 is not sector aligned +-qemu-io> offset 4295095552 is not sector aligned +-qemu-io> offset 4295096576 is not sector aligned +-qemu-io> offset 4295097600 is not sector aligned +-qemu-io> offset 4295098624 is not sector aligned +-qemu-io> offset 4295099648 is not sector aligned +-qemu-io> offset 4295100672 is not sector aligned +-qemu-io> offset 4295101696 is not sector aligned +-qemu-io> offset 4295102720 is not sector aligned +-qemu-io> offset 4295103744 is not sector aligned +-qemu-io> offset 4295104768 is not sector aligned +-qemu-io> offset 4295105792 is not sector aligned +-qemu-io> offset 4295106816 is not sector aligned +-qemu-io> offset 4295107840 is not sector aligned +-qemu-io> offset 4295108864 is not sector aligned +-qemu-io> offset 4295109888 is not sector aligned +-qemu-io> offset 4295110912 is not sector aligned +-qemu-io> offset 4295111936 is not sector aligned +-qemu-io> offset 4295112960 is not sector aligned +-qemu-io> offset 4295113984 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 2048/2048 bytes at offset 4295115264 ++=== IO: pattern 216 ++offset 4295078144 is not sector aligned ++offset 4295079168 is not sector aligned ++offset 4295080192 is not sector aligned ++offset 4295081216 is not sector aligned ++offset 4295082240 is not sector aligned ++offset 4295083264 is not sector aligned ++offset 4295084288 is not sector aligned ++offset 4295085312 is not sector aligned ++offset 4295086336 is not sector aligned ++offset 4295087360 is not sector aligned ++offset 4295088384 is not sector aligned ++offset 4295089408 is not sector aligned ++offset 4295090432 is not sector aligned ++offset 4295091456 is not sector aligned ++offset 4295092480 is not sector aligned ++offset 4295093504 is not sector aligned ++offset 4295094528 is not sector aligned ++offset 4295095552 is not sector aligned ++offset 4295096576 is not sector aligned ++offset 4295097600 is not sector aligned ++offset 4295098624 is not sector aligned ++offset 4295099648 is not sector aligned ++offset 4295100672 is not sector aligned ++offset 4295101696 is not sector aligned ++offset 4295102720 is not sector aligned ++offset 4295103744 is not sector aligned ++offset 4295104768 is not sector aligned ++offset 4295105792 is not sector aligned ++offset 4295106816 is not sector aligned ++offset 4295107840 is not sector aligned ++offset 4295108864 is not sector aligned ++offset 4295109888 is not sector aligned ++offset 4295110912 is not sector aligned ++offset 4295111936 is not sector aligned ++offset 4295112960 is not sector aligned ++offset 4295113984 is not sector aligned ++=== IO: pattern 33 ++wrote 2048/2048 bytes at offset 4295115264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295118336 ++wrote 2048/2048 bytes at offset 4295118336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295121408 ++wrote 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295124480 ++wrote 2048/2048 bytes at offset 4295124480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295127552 ++wrote 2048/2048 bytes at offset 4295127552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295130624 ++wrote 2048/2048 bytes at offset 4295130624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295133696 ++wrote 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295136768 ++wrote 2048/2048 bytes at offset 4295136768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295139840 ++wrote 2048/2048 bytes at offset 4295139840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295359488 ++wrote 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295491072 ++wrote 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294968320 ++read 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294969344 ++read 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294970368 ++read 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294971392 ++read 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294972416 ++read 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294973440 ++read 1024/1024 bytes at offset 4294973440 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294974464 ++read 1024/1024 bytes at offset 4294974464 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294975488 ++read 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294976512 ++read 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294977536 ++read 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978560 ++read 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294979584 ++read 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294980608 ++read 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294981632 ++read 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294982656 ++read 1024/1024 bytes at offset 4294982656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294983680 ++read 1024/1024 bytes at offset 4294983680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984704 ++read 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294985728 ++read 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294986752 ++read 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987776 ++read 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294988800 ++read 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294989824 ++read 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294990848 ++read 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294991872 ++read 1024/1024 bytes at offset 4294991872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294992896 ++read 1024/1024 bytes at offset 4294992896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993920 ++read 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294994944 ++read 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294995968 ++read 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996992 ++read 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294998016 ++read 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294999040 ++read 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295000064 ++read 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295001088 ++read 1024/1024 bytes at offset 4295001088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295002112 ++read 1024/1024 bytes at offset 4295002112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003136 ++read 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 4295004672 ++=== IO: pattern 73 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295033344 ++read 512/512 bytes at offset 4295033344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295034368 ++read 512/512 bytes at offset 4295034368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295035392 ++read 512/512 bytes at offset 4295035392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295036416 ++read 512/512 bytes at offset 4295036416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295037440 ++read 512/512 bytes at offset 4295037440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295038464 ++read 512/512 bytes at offset 4295038464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295039488 ++read 512/512 bytes at offset 4295039488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295040512 ++read 512/512 bytes at offset 4295040512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 4295041024 ++=== IO: pattern 144 ++read 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295042048 ++read 512/512 bytes at offset 4295042048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295043072 ++read 512/512 bytes at offset 4295043072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295044096 ++read 512/512 bytes at offset 4295044096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295045120 ++read 512/512 bytes at offset 4295045120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295046144 ++read 512/512 bytes at offset 4295046144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295047168 ++read 512/512 bytes at offset 4295047168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295048192 ++read 512/512 bytes at offset 4295048192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295049216 ++read 512/512 bytes at offset 4295049216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295050240 ++read 512/512 bytes at offset 4295050240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295051264 ++read 512/512 bytes at offset 4295051264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295052288 ++read 512/512 bytes at offset 4295052288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295053312 ++read 512/512 bytes at offset 4295053312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295054336 ++read 512/512 bytes at offset 4295054336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295055360 ++read 512/512 bytes at offset 4295055360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295056384 ++read 512/512 bytes at offset 4295056384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295057408 ++read 512/512 bytes at offset 4295057408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295058432 ++read 512/512 bytes at offset 4295058432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295059456 ++read 512/512 bytes at offset 4295059456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295060480 ++read 512/512 bytes at offset 4295060480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295061504 ++read 512/512 bytes at offset 4295061504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295062528 ++read 512/512 bytes at offset 4295062528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295063552 ++read 512/512 bytes at offset 4295063552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295064576 ++read 512/512 bytes at offset 4295064576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295065600 ++read 512/512 bytes at offset 4295065600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295066624 ++read 512/512 bytes at offset 4295066624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295067648 ++read 512/512 bytes at offset 4295067648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295068672 ++read 512/512 bytes at offset 4295068672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295069696 ++read 512/512 bytes at offset 4295069696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295070720 ++read 512/512 bytes at offset 4295070720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295071744 ++read 512/512 bytes at offset 4295071744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295072768 ++read 512/512 bytes at offset 4295072768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295073792 ++read 512/512 bytes at offset 4295073792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295074816 ++read 512/512 bytes at offset 4295074816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295075840 ++read 512/512 bytes at offset 4295075840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295076864 ++read 512/512 bytes at offset 4295076864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 4295078144 is not sector aligned +-qemu-io> offset 4295079168 is not sector aligned +-qemu-io> offset 4295080192 is not sector aligned +-qemu-io> offset 4295081216 is not sector aligned +-qemu-io> offset 4295082240 is not sector aligned +-qemu-io> offset 4295083264 is not sector aligned +-qemu-io> offset 4295084288 is not sector aligned +-qemu-io> offset 4295085312 is not sector aligned +-qemu-io> offset 4295086336 is not sector aligned +-qemu-io> offset 4295087360 is not sector aligned +-qemu-io> offset 4295088384 is not sector aligned +-qemu-io> offset 4295089408 is not sector aligned +-qemu-io> offset 4295090432 is not sector aligned +-qemu-io> offset 4295091456 is not sector aligned +-qemu-io> offset 4295092480 is not sector aligned +-qemu-io> offset 4295093504 is not sector aligned +-qemu-io> offset 4295094528 is not sector aligned +-qemu-io> offset 4295095552 is not sector aligned +-qemu-io> offset 4295096576 is not sector aligned +-qemu-io> offset 4295097600 is not sector aligned +-qemu-io> offset 4295098624 is not sector aligned +-qemu-io> offset 4295099648 is not sector aligned +-qemu-io> offset 4295100672 is not sector aligned +-qemu-io> offset 4295101696 is not sector aligned +-qemu-io> offset 4295102720 is not sector aligned +-qemu-io> offset 4295103744 is not sector aligned +-qemu-io> offset 4295104768 is not sector aligned +-qemu-io> offset 4295105792 is not sector aligned +-qemu-io> offset 4295106816 is not sector aligned +-qemu-io> offset 4295107840 is not sector aligned +-qemu-io> offset 4295108864 is not sector aligned +-qemu-io> offset 4295109888 is not sector aligned +-qemu-io> offset 4295110912 is not sector aligned +-qemu-io> offset 4295111936 is not sector aligned +-qemu-io> offset 4295112960 is not sector aligned +-qemu-io> offset 4295113984 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 4295115264 ++=== IO: pattern 216 ++offset 4295078144 is not sector aligned ++offset 4295079168 is not sector aligned ++offset 4295080192 is not sector aligned ++offset 4295081216 is not sector aligned ++offset 4295082240 is not sector aligned ++offset 4295083264 is not sector aligned ++offset 4295084288 is not sector aligned ++offset 4295085312 is not sector aligned ++offset 4295086336 is not sector aligned ++offset 4295087360 is not sector aligned ++offset 4295088384 is not sector aligned ++offset 4295089408 is not sector aligned ++offset 4295090432 is not sector aligned ++offset 4295091456 is not sector aligned ++offset 4295092480 is not sector aligned ++offset 4295093504 is not sector aligned ++offset 4295094528 is not sector aligned ++offset 4295095552 is not sector aligned ++offset 4295096576 is not sector aligned ++offset 4295097600 is not sector aligned ++offset 4295098624 is not sector aligned ++offset 4295099648 is not sector aligned ++offset 4295100672 is not sector aligned ++offset 4295101696 is not sector aligned ++offset 4295102720 is not sector aligned ++offset 4295103744 is not sector aligned ++offset 4295104768 is not sector aligned ++offset 4295105792 is not sector aligned ++offset 4295106816 is not sector aligned ++offset 4295107840 is not sector aligned ++offset 4295108864 is not sector aligned ++offset 4295109888 is not sector aligned ++offset 4295110912 is not sector aligned ++offset 4295111936 is not sector aligned ++offset 4295112960 is not sector aligned ++offset 4295113984 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 4295115264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295118336 ++read 2048/2048 bytes at offset 4295118336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121408 ++read 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124480 ++read 2048/2048 bytes at offset 4295124480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295127552 ++read 2048/2048 bytes at offset 4295127552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295130624 ++read 2048/2048 bytes at offset 4295130624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133696 ++read 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295136768 ++read 2048/2048 bytes at offset 4295136768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295139840 ++read 2048/2048 bytes at offset 4295139840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295359488 ++read 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295491072 ++read 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Compressing image + + Testing compressed image + + With offset 0: + === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 0 ++read 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 1024 ++read 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 2048 ++read 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 3072 ++read 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4096 ++read 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 5120 ++read 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 6144 ++read 1024/1024 bytes at offset 6144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 7168 ++read 1024/1024 bytes at offset 7168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 8192 ++read 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 9216 ++read 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 10240 ++read 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11264 ++read 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 12288 ++read 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 13312 ++read 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 14336 ++read 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 15360 ++read 1024/1024 bytes at offset 15360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 16384 ++read 1024/1024 bytes at offset 16384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17408 ++read 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 18432 ++read 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 19456 ++read 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20480 ++read 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 21504 ++read 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 22528 ++read 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 23552 ++read 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 24576 ++read 1024/1024 bytes at offset 24576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 25600 ++read 1024/1024 bytes at offset 25600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26624 ++read 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 27648 ++read 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 28672 ++read 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29696 ++read 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 30720 ++read 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 31744 ++read 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 32768 ++read 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 33792 ++read 1024/1024 bytes at offset 33792 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 34816 ++read 1024/1024 bytes at offset 34816 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35840 ++read 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 37376 ++=== IO: pattern 73 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66048 ++read 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67072 ++read 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 68096 ++read 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 69120 ++read 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 70144 ++read 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 71168 ++read 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 72192 ++read 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 73216 ++read 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 73728 ++=== IO: pattern 144 ++read 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 74752 ++read 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 75776 ++read 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 76800 ++read 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 77824 ++read 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 78848 ++read 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 79872 ++read 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 80896 ++read 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81920 ++read 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82944 ++read 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83968 ++read 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84992 ++read 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 86016 ++read 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 87040 ++read 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 88064 ++read 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 89088 ++read 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 90112 ++read 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 91136 ++read 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 92160 ++read 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 93184 ++read 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 94208 ++read 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 95232 ++read 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 96256 ++read 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 97280 ++read 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 98304 ++read 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 99328 ++read 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100352 ++read 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101376 ++read 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 102400 ++read 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 103424 ++read 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 104448 ++read 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 105472 ++read 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 106496 ++read 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 107520 ++read 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 108544 ++read 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 109568 ++read 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 110848 is not sector aligned +-qemu-io> offset 111872 is not sector aligned +-qemu-io> offset 112896 is not sector aligned +-qemu-io> offset 113920 is not sector aligned +-qemu-io> offset 114944 is not sector aligned +-qemu-io> offset 115968 is not sector aligned +-qemu-io> offset 116992 is not sector aligned +-qemu-io> offset 118016 is not sector aligned +-qemu-io> offset 119040 is not sector aligned +-qemu-io> offset 120064 is not sector aligned +-qemu-io> offset 121088 is not sector aligned +-qemu-io> offset 122112 is not sector aligned +-qemu-io> offset 123136 is not sector aligned +-qemu-io> offset 124160 is not sector aligned +-qemu-io> offset 125184 is not sector aligned +-qemu-io> offset 126208 is not sector aligned +-qemu-io> offset 127232 is not sector aligned +-qemu-io> offset 128256 is not sector aligned +-qemu-io> offset 129280 is not sector aligned +-qemu-io> offset 130304 is not sector aligned +-qemu-io> offset 131328 is not sector aligned +-qemu-io> offset 132352 is not sector aligned +-qemu-io> offset 133376 is not sector aligned +-qemu-io> offset 134400 is not sector aligned +-qemu-io> offset 135424 is not sector aligned +-qemu-io> offset 136448 is not sector aligned +-qemu-io> offset 137472 is not sector aligned +-qemu-io> offset 138496 is not sector aligned +-qemu-io> offset 139520 is not sector aligned +-qemu-io> offset 140544 is not sector aligned +-qemu-io> offset 141568 is not sector aligned +-qemu-io> offset 142592 is not sector aligned +-qemu-io> offset 143616 is not sector aligned +-qemu-io> offset 144640 is not sector aligned +-qemu-io> offset 145664 is not sector aligned +-qemu-io> offset 146688 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 147968 ++=== IO: pattern 216 ++offset 110848 is not sector aligned ++offset 111872 is not sector aligned ++offset 112896 is not sector aligned ++offset 113920 is not sector aligned ++offset 114944 is not sector aligned ++offset 115968 is not sector aligned ++offset 116992 is not sector aligned ++offset 118016 is not sector aligned ++offset 119040 is not sector aligned ++offset 120064 is not sector aligned ++offset 121088 is not sector aligned ++offset 122112 is not sector aligned ++offset 123136 is not sector aligned ++offset 124160 is not sector aligned ++offset 125184 is not sector aligned ++offset 126208 is not sector aligned ++offset 127232 is not sector aligned ++offset 128256 is not sector aligned ++offset 129280 is not sector aligned ++offset 130304 is not sector aligned ++offset 131328 is not sector aligned ++offset 132352 is not sector aligned ++offset 133376 is not sector aligned ++offset 134400 is not sector aligned ++offset 135424 is not sector aligned ++offset 136448 is not sector aligned ++offset 137472 is not sector aligned ++offset 138496 is not sector aligned ++offset 139520 is not sector aligned ++offset 140544 is not sector aligned ++offset 141568 is not sector aligned ++offset 142592 is not sector aligned ++offset 143616 is not sector aligned ++offset 144640 is not sector aligned ++offset 145664 is not sector aligned ++offset 146688 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 147968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 151040 ++read 2048/2048 bytes at offset 151040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154112 ++read 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157184 ++read 2048/2048 bytes at offset 157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 160256 ++read 2048/2048 bytes at offset 160256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 163328 ++read 2048/2048 bytes at offset 163328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166400 ++read 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169472 ++read 2048/2048 bytes at offset 169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 172544 ++read 2048/2048 bytes at offset 172544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 392192 ++read 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 523776 ++read 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 0 ++=== IO: pattern 0 ++read 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 1024 ++read 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 2048 ++read 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 3072 ++read 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4096 ++read 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 5120 ++read 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 6144 ++read 1024/1024 bytes at offset 6144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 7168 ++read 1024/1024 bytes at offset 7168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 8192 ++read 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 9216 ++read 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 10240 ++read 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11264 ++read 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 12288 ++read 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 13312 ++read 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 14336 ++read 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 15360 ++read 1024/1024 bytes at offset 15360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 16384 ++read 1024/1024 bytes at offset 16384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17408 ++read 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 18432 ++read 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 19456 ++read 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20480 ++read 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 21504 ++read 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 22528 ++read 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 23552 ++read 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 24576 ++read 1024/1024 bytes at offset 24576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 25600 ++read 1024/1024 bytes at offset 25600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26624 ++read 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 27648 ++read 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 28672 ++read 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29696 ++read 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 30720 ++read 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 31744 ++read 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 32768 ++read 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 33792 ++read 1024/1024 bytes at offset 33792 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 34816 ++read 1024/1024 bytes at offset 34816 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35840 ++read 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 37376 ++=== IO: pattern 73 ++read 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38400 ++read 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41472 ++read 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 42496 ++read 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43520 ++read 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44544 ++read 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45568 ++read 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46592 ++read 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47616 ++read 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48640 ++read 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49664 ++read 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50688 ++read 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51712 ++read 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52736 ++read 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53760 ++read 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54784 ++read 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55808 ++read 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56832 ++read 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57856 ++read 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58880 ++read 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59904 ++read 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60928 ++read 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61952 ++read 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62976 ++read 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64000 ++read 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66048 ++read 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67072 ++read 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 68096 ++read 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 69120 ++read 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 70144 ++read 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 71168 ++read 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 72192 ++read 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 73216 ++read 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 73728 ++=== IO: pattern 144 ++read 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 74752 ++read 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 75776 ++read 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 76800 ++read 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 77824 ++read 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 78848 ++read 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 79872 ++read 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 80896 ++read 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81920 ++read 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82944 ++read 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83968 ++read 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84992 ++read 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 86016 ++read 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 87040 ++read 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 88064 ++read 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 89088 ++read 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 90112 ++read 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 91136 ++read 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 92160 ++read 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 93184 ++read 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 94208 ++read 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 95232 ++read 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 96256 ++read 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 97280 ++read 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 98304 ++read 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 99328 ++read 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100352 ++read 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101376 ++read 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 102400 ++read 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 103424 ++read 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 104448 ++read 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 105472 ++read 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 106496 ++read 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 107520 ++read 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 108544 ++read 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 109568 ++read 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 110848 is not sector aligned +-qemu-io> offset 111872 is not sector aligned +-qemu-io> offset 112896 is not sector aligned +-qemu-io> offset 113920 is not sector aligned +-qemu-io> offset 114944 is not sector aligned +-qemu-io> offset 115968 is not sector aligned +-qemu-io> offset 116992 is not sector aligned +-qemu-io> offset 118016 is not sector aligned +-qemu-io> offset 119040 is not sector aligned +-qemu-io> offset 120064 is not sector aligned +-qemu-io> offset 121088 is not sector aligned +-qemu-io> offset 122112 is not sector aligned +-qemu-io> offset 123136 is not sector aligned +-qemu-io> offset 124160 is not sector aligned +-qemu-io> offset 125184 is not sector aligned +-qemu-io> offset 126208 is not sector aligned +-qemu-io> offset 127232 is not sector aligned +-qemu-io> offset 128256 is not sector aligned +-qemu-io> offset 129280 is not sector aligned +-qemu-io> offset 130304 is not sector aligned +-qemu-io> offset 131328 is not sector aligned +-qemu-io> offset 132352 is not sector aligned +-qemu-io> offset 133376 is not sector aligned +-qemu-io> offset 134400 is not sector aligned +-qemu-io> offset 135424 is not sector aligned +-qemu-io> offset 136448 is not sector aligned +-qemu-io> offset 137472 is not sector aligned +-qemu-io> offset 138496 is not sector aligned +-qemu-io> offset 139520 is not sector aligned +-qemu-io> offset 140544 is not sector aligned +-qemu-io> offset 141568 is not sector aligned +-qemu-io> offset 142592 is not sector aligned +-qemu-io> offset 143616 is not sector aligned +-qemu-io> offset 144640 is not sector aligned +-qemu-io> offset 145664 is not sector aligned +-qemu-io> offset 146688 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 147968 ++=== IO: pattern 216 ++offset 110848 is not sector aligned ++offset 111872 is not sector aligned ++offset 112896 is not sector aligned ++offset 113920 is not sector aligned ++offset 114944 is not sector aligned ++offset 115968 is not sector aligned ++offset 116992 is not sector aligned ++offset 118016 is not sector aligned ++offset 119040 is not sector aligned ++offset 120064 is not sector aligned ++offset 121088 is not sector aligned ++offset 122112 is not sector aligned ++offset 123136 is not sector aligned ++offset 124160 is not sector aligned ++offset 125184 is not sector aligned ++offset 126208 is not sector aligned ++offset 127232 is not sector aligned ++offset 128256 is not sector aligned ++offset 129280 is not sector aligned ++offset 130304 is not sector aligned ++offset 131328 is not sector aligned ++offset 132352 is not sector aligned ++offset 133376 is not sector aligned ++offset 134400 is not sector aligned ++offset 135424 is not sector aligned ++offset 136448 is not sector aligned ++offset 137472 is not sector aligned ++offset 138496 is not sector aligned ++offset 139520 is not sector aligned ++offset 140544 is not sector aligned ++offset 141568 is not sector aligned ++offset 142592 is not sector aligned ++offset 143616 is not sector aligned ++offset 144640 is not sector aligned ++offset 145664 is not sector aligned ++offset 146688 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 147968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 151040 ++read 2048/2048 bytes at offset 151040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154112 ++read 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157184 ++read 2048/2048 bytes at offset 157184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 160256 ++read 2048/2048 bytes at offset 160256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 163328 ++read 2048/2048 bytes at offset 163328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166400 ++read 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169472 ++read 2048/2048 bytes at offset 169472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 172544 ++read 2048/2048 bytes at offset 172544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 392192 ++read 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 523776 ++read 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967296: + === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 4294967296 ++read 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294968320 ++read 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294969344 ++read 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294970368 ++read 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294971392 ++read 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294972416 ++read 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294973440 ++read 1024/1024 bytes at offset 4294973440 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294974464 ++read 1024/1024 bytes at offset 4294974464 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294975488 ++read 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294976512 ++read 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294977536 ++read 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978560 ++read 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294979584 ++read 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294980608 ++read 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294981632 ++read 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294982656 ++read 1024/1024 bytes at offset 4294982656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294983680 ++read 1024/1024 bytes at offset 4294983680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984704 ++read 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294985728 ++read 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294986752 ++read 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987776 ++read 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294988800 ++read 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294989824 ++read 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294990848 ++read 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294991872 ++read 1024/1024 bytes at offset 4294991872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294992896 ++read 1024/1024 bytes at offset 4294992896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993920 ++read 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294994944 ++read 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294995968 ++read 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996992 ++read 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294998016 ++read 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294999040 ++read 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295000064 ++read 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295001088 ++read 1024/1024 bytes at offset 4295001088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295002112 ++read 1024/1024 bytes at offset 4295002112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003136 ++read 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 4295004672 ++=== IO: pattern 73 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295033344 ++read 512/512 bytes at offset 4295033344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295034368 ++read 512/512 bytes at offset 4295034368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295035392 ++read 512/512 bytes at offset 4295035392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295036416 ++read 512/512 bytes at offset 4295036416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295037440 ++read 512/512 bytes at offset 4295037440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295038464 ++read 512/512 bytes at offset 4295038464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295039488 ++read 512/512 bytes at offset 4295039488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295040512 ++read 512/512 bytes at offset 4295040512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 4295041024 ++=== IO: pattern 144 ++read 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295042048 ++read 512/512 bytes at offset 4295042048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295043072 ++read 512/512 bytes at offset 4295043072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295044096 ++read 512/512 bytes at offset 4295044096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295045120 ++read 512/512 bytes at offset 4295045120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295046144 ++read 512/512 bytes at offset 4295046144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295047168 ++read 512/512 bytes at offset 4295047168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295048192 ++read 512/512 bytes at offset 4295048192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295049216 ++read 512/512 bytes at offset 4295049216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295050240 ++read 512/512 bytes at offset 4295050240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295051264 ++read 512/512 bytes at offset 4295051264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295052288 ++read 512/512 bytes at offset 4295052288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295053312 ++read 512/512 bytes at offset 4295053312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295054336 ++read 512/512 bytes at offset 4295054336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295055360 ++read 512/512 bytes at offset 4295055360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295056384 ++read 512/512 bytes at offset 4295056384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295057408 ++read 512/512 bytes at offset 4295057408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295058432 ++read 512/512 bytes at offset 4295058432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295059456 ++read 512/512 bytes at offset 4295059456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295060480 ++read 512/512 bytes at offset 4295060480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295061504 ++read 512/512 bytes at offset 4295061504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295062528 ++read 512/512 bytes at offset 4295062528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295063552 ++read 512/512 bytes at offset 4295063552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295064576 ++read 512/512 bytes at offset 4295064576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295065600 ++read 512/512 bytes at offset 4295065600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295066624 ++read 512/512 bytes at offset 4295066624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295067648 ++read 512/512 bytes at offset 4295067648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295068672 ++read 512/512 bytes at offset 4295068672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295069696 ++read 512/512 bytes at offset 4295069696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295070720 ++read 512/512 bytes at offset 4295070720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295071744 ++read 512/512 bytes at offset 4295071744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295072768 ++read 512/512 bytes at offset 4295072768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295073792 ++read 512/512 bytes at offset 4295073792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295074816 ++read 512/512 bytes at offset 4295074816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295075840 ++read 512/512 bytes at offset 4295075840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295076864 ++read 512/512 bytes at offset 4295076864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 4295078144 is not sector aligned +-qemu-io> offset 4295079168 is not sector aligned +-qemu-io> offset 4295080192 is not sector aligned +-qemu-io> offset 4295081216 is not sector aligned +-qemu-io> offset 4295082240 is not sector aligned +-qemu-io> offset 4295083264 is not sector aligned +-qemu-io> offset 4295084288 is not sector aligned +-qemu-io> offset 4295085312 is not sector aligned +-qemu-io> offset 4295086336 is not sector aligned +-qemu-io> offset 4295087360 is not sector aligned +-qemu-io> offset 4295088384 is not sector aligned +-qemu-io> offset 4295089408 is not sector aligned +-qemu-io> offset 4295090432 is not sector aligned +-qemu-io> offset 4295091456 is not sector aligned +-qemu-io> offset 4295092480 is not sector aligned +-qemu-io> offset 4295093504 is not sector aligned +-qemu-io> offset 4295094528 is not sector aligned +-qemu-io> offset 4295095552 is not sector aligned +-qemu-io> offset 4295096576 is not sector aligned +-qemu-io> offset 4295097600 is not sector aligned +-qemu-io> offset 4295098624 is not sector aligned +-qemu-io> offset 4295099648 is not sector aligned +-qemu-io> offset 4295100672 is not sector aligned +-qemu-io> offset 4295101696 is not sector aligned +-qemu-io> offset 4295102720 is not sector aligned +-qemu-io> offset 4295103744 is not sector aligned +-qemu-io> offset 4295104768 is not sector aligned +-qemu-io> offset 4295105792 is not sector aligned +-qemu-io> offset 4295106816 is not sector aligned +-qemu-io> offset 4295107840 is not sector aligned +-qemu-io> offset 4295108864 is not sector aligned +-qemu-io> offset 4295109888 is not sector aligned +-qemu-io> offset 4295110912 is not sector aligned +-qemu-io> offset 4295111936 is not sector aligned +-qemu-io> offset 4295112960 is not sector aligned +-qemu-io> offset 4295113984 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 4295115264 ++=== IO: pattern 216 ++offset 4295078144 is not sector aligned ++offset 4295079168 is not sector aligned ++offset 4295080192 is not sector aligned ++offset 4295081216 is not sector aligned ++offset 4295082240 is not sector aligned ++offset 4295083264 is not sector aligned ++offset 4295084288 is not sector aligned ++offset 4295085312 is not sector aligned ++offset 4295086336 is not sector aligned ++offset 4295087360 is not sector aligned ++offset 4295088384 is not sector aligned ++offset 4295089408 is not sector aligned ++offset 4295090432 is not sector aligned ++offset 4295091456 is not sector aligned ++offset 4295092480 is not sector aligned ++offset 4295093504 is not sector aligned ++offset 4295094528 is not sector aligned ++offset 4295095552 is not sector aligned ++offset 4295096576 is not sector aligned ++offset 4295097600 is not sector aligned ++offset 4295098624 is not sector aligned ++offset 4295099648 is not sector aligned ++offset 4295100672 is not sector aligned ++offset 4295101696 is not sector aligned ++offset 4295102720 is not sector aligned ++offset 4295103744 is not sector aligned ++offset 4295104768 is not sector aligned ++offset 4295105792 is not sector aligned ++offset 4295106816 is not sector aligned ++offset 4295107840 is not sector aligned ++offset 4295108864 is not sector aligned ++offset 4295109888 is not sector aligned ++offset 4295110912 is not sector aligned ++offset 4295111936 is not sector aligned ++offset 4295112960 is not sector aligned ++offset 4295113984 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 4295115264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295118336 ++read 2048/2048 bytes at offset 4295118336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121408 ++read 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124480 ++read 2048/2048 bytes at offset 4295124480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295127552 ++read 2048/2048 bytes at offset 4295127552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295130624 ++read 2048/2048 bytes at offset 4295130624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133696 ++read 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295136768 ++read 2048/2048 bytes at offset 4295136768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295139840 ++read 2048/2048 bytes at offset 4295139840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295359488 ++read 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295491072 ++read 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294968320 ++read 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294969344 ++read 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294970368 ++read 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294971392 ++read 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294972416 ++read 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294973440 ++read 1024/1024 bytes at offset 4294973440 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294974464 ++read 1024/1024 bytes at offset 4294974464 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294975488 ++read 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294976512 ++read 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294977536 ++read 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978560 ++read 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294979584 ++read 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294980608 ++read 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294981632 ++read 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294982656 ++read 1024/1024 bytes at offset 4294982656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294983680 ++read 1024/1024 bytes at offset 4294983680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984704 ++read 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294985728 ++read 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294986752 ++read 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987776 ++read 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294988800 ++read 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294989824 ++read 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294990848 ++read 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294991872 ++read 1024/1024 bytes at offset 4294991872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294992896 ++read 1024/1024 bytes at offset 4294992896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993920 ++read 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294994944 ++read 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294995968 ++read 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996992 ++read 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294998016 ++read 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294999040 ++read 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295000064 ++read 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295001088 ++read 1024/1024 bytes at offset 4295001088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295002112 ++read 1024/1024 bytes at offset 4295002112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003136 ++read 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 73 +-qemu-io> read 512/512 bytes at offset 4295004672 ++=== IO: pattern 73 ++read 512/512 bytes at offset 4295004672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295005696 ++read 512/512 bytes at offset 4295005696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006720 ++read 512/512 bytes at offset 4295006720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007744 ++read 512/512 bytes at offset 4295007744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008768 ++read 512/512 bytes at offset 4295008768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009792 ++read 512/512 bytes at offset 4295009792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010816 ++read 512/512 bytes at offset 4295010816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011840 ++read 512/512 bytes at offset 4295011840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012864 ++read 512/512 bytes at offset 4295012864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013888 ++read 512/512 bytes at offset 4295013888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014912 ++read 512/512 bytes at offset 4295014912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015936 ++read 512/512 bytes at offset 4295015936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016960 ++read 512/512 bytes at offset 4295016960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017984 ++read 512/512 bytes at offset 4295017984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019008 ++read 512/512 bytes at offset 4295019008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020032 ++read 512/512 bytes at offset 4295020032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021056 ++read 512/512 bytes at offset 4295021056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022080 ++read 512/512 bytes at offset 4295022080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023104 ++read 512/512 bytes at offset 4295023104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024128 ++read 512/512 bytes at offset 4295024128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025152 ++read 512/512 bytes at offset 4295025152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026176 ++read 512/512 bytes at offset 4295026176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027200 ++read 512/512 bytes at offset 4295027200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028224 ++read 512/512 bytes at offset 4295028224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029248 ++read 512/512 bytes at offset 4295029248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030272 ++read 512/512 bytes at offset 4295030272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031296 ++read 512/512 bytes at offset 4295031296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032320 ++read 512/512 bytes at offset 4295032320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295033344 ++read 512/512 bytes at offset 4295033344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295034368 ++read 512/512 bytes at offset 4295034368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295035392 ++read 512/512 bytes at offset 4295035392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295036416 ++read 512/512 bytes at offset 4295036416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295037440 ++read 512/512 bytes at offset 4295037440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295038464 ++read 512/512 bytes at offset 4295038464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295039488 ++read 512/512 bytes at offset 4295039488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295040512 ++read 512/512 bytes at offset 4295040512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 512/512 bytes at offset 4295041024 ++=== IO: pattern 144 ++read 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295042048 ++read 512/512 bytes at offset 4295042048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295043072 ++read 512/512 bytes at offset 4295043072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295044096 ++read 512/512 bytes at offset 4295044096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295045120 ++read 512/512 bytes at offset 4295045120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295046144 ++read 512/512 bytes at offset 4295046144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295047168 ++read 512/512 bytes at offset 4295047168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295048192 ++read 512/512 bytes at offset 4295048192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295049216 ++read 512/512 bytes at offset 4295049216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295050240 ++read 512/512 bytes at offset 4295050240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295051264 ++read 512/512 bytes at offset 4295051264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295052288 ++read 512/512 bytes at offset 4295052288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295053312 ++read 512/512 bytes at offset 4295053312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295054336 ++read 512/512 bytes at offset 4295054336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295055360 ++read 512/512 bytes at offset 4295055360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295056384 ++read 512/512 bytes at offset 4295056384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295057408 ++read 512/512 bytes at offset 4295057408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295058432 ++read 512/512 bytes at offset 4295058432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295059456 ++read 512/512 bytes at offset 4295059456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295060480 ++read 512/512 bytes at offset 4295060480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295061504 ++read 512/512 bytes at offset 4295061504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295062528 ++read 512/512 bytes at offset 4295062528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295063552 ++read 512/512 bytes at offset 4295063552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295064576 ++read 512/512 bytes at offset 4295064576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295065600 ++read 512/512 bytes at offset 4295065600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295066624 ++read 512/512 bytes at offset 4295066624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295067648 ++read 512/512 bytes at offset 4295067648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295068672 ++read 512/512 bytes at offset 4295068672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295069696 ++read 512/512 bytes at offset 4295069696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295070720 ++read 512/512 bytes at offset 4295070720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295071744 ++read 512/512 bytes at offset 4295071744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295072768 ++read 512/512 bytes at offset 4295072768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295073792 ++read 512/512 bytes at offset 4295073792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295074816 ++read 512/512 bytes at offset 4295074816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295075840 ++read 512/512 bytes at offset 4295075840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295076864 ++read 512/512 bytes at offset 4295076864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 216 +-qemu-io> offset 4295078144 is not sector aligned +-qemu-io> offset 4295079168 is not sector aligned +-qemu-io> offset 4295080192 is not sector aligned +-qemu-io> offset 4295081216 is not sector aligned +-qemu-io> offset 4295082240 is not sector aligned +-qemu-io> offset 4295083264 is not sector aligned +-qemu-io> offset 4295084288 is not sector aligned +-qemu-io> offset 4295085312 is not sector aligned +-qemu-io> offset 4295086336 is not sector aligned +-qemu-io> offset 4295087360 is not sector aligned +-qemu-io> offset 4295088384 is not sector aligned +-qemu-io> offset 4295089408 is not sector aligned +-qemu-io> offset 4295090432 is not sector aligned +-qemu-io> offset 4295091456 is not sector aligned +-qemu-io> offset 4295092480 is not sector aligned +-qemu-io> offset 4295093504 is not sector aligned +-qemu-io> offset 4295094528 is not sector aligned +-qemu-io> offset 4295095552 is not sector aligned +-qemu-io> offset 4295096576 is not sector aligned +-qemu-io> offset 4295097600 is not sector aligned +-qemu-io> offset 4295098624 is not sector aligned +-qemu-io> offset 4295099648 is not sector aligned +-qemu-io> offset 4295100672 is not sector aligned +-qemu-io> offset 4295101696 is not sector aligned +-qemu-io> offset 4295102720 is not sector aligned +-qemu-io> offset 4295103744 is not sector aligned +-qemu-io> offset 4295104768 is not sector aligned +-qemu-io> offset 4295105792 is not sector aligned +-qemu-io> offset 4295106816 is not sector aligned +-qemu-io> offset 4295107840 is not sector aligned +-qemu-io> offset 4295108864 is not sector aligned +-qemu-io> offset 4295109888 is not sector aligned +-qemu-io> offset 4295110912 is not sector aligned +-qemu-io> offset 4295111936 is not sector aligned +-qemu-io> offset 4295112960 is not sector aligned +-qemu-io> offset 4295113984 is not sector aligned +-qemu-io> === IO: pattern 33 +-qemu-io> read 2048/2048 bytes at offset 4295115264 ++=== IO: pattern 216 ++offset 4295078144 is not sector aligned ++offset 4295079168 is not sector aligned ++offset 4295080192 is not sector aligned ++offset 4295081216 is not sector aligned ++offset 4295082240 is not sector aligned ++offset 4295083264 is not sector aligned ++offset 4295084288 is not sector aligned ++offset 4295085312 is not sector aligned ++offset 4295086336 is not sector aligned ++offset 4295087360 is not sector aligned ++offset 4295088384 is not sector aligned ++offset 4295089408 is not sector aligned ++offset 4295090432 is not sector aligned ++offset 4295091456 is not sector aligned ++offset 4295092480 is not sector aligned ++offset 4295093504 is not sector aligned ++offset 4295094528 is not sector aligned ++offset 4295095552 is not sector aligned ++offset 4295096576 is not sector aligned ++offset 4295097600 is not sector aligned ++offset 4295098624 is not sector aligned ++offset 4295099648 is not sector aligned ++offset 4295100672 is not sector aligned ++offset 4295101696 is not sector aligned ++offset 4295102720 is not sector aligned ++offset 4295103744 is not sector aligned ++offset 4295104768 is not sector aligned ++offset 4295105792 is not sector aligned ++offset 4295106816 is not sector aligned ++offset 4295107840 is not sector aligned ++offset 4295108864 is not sector aligned ++offset 4295109888 is not sector aligned ++offset 4295110912 is not sector aligned ++offset 4295111936 is not sector aligned ++offset 4295112960 is not sector aligned ++offset 4295113984 is not sector aligned ++=== IO: pattern 33 ++read 2048/2048 bytes at offset 4295115264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295118336 ++read 2048/2048 bytes at offset 4295118336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121408 ++read 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124480 ++read 2048/2048 bytes at offset 4295124480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295127552 ++read 2048/2048 bytes at offset 4295127552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295130624 ++read 2048/2048 bytes at offset 4295130624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133696 ++read 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295136768 ++read 2048/2048 bytes at offset 4295136768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295139840 ++read 2048/2048 bytes at offset 4295139840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295359488 ++read 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295491072 ++read 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Testing compressed image with odd offsets + + With offset 512: + === IO: pattern 1 +-qemu-io> wrote 1024/1024 bytes at offset 512 ++wrote 1024/1024 bytes at offset 512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 1536 ++wrote 1024/1024 bytes at offset 1536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 2560 ++wrote 1024/1024 bytes at offset 2560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 3584 ++wrote 1024/1024 bytes at offset 3584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4608 ++wrote 1024/1024 bytes at offset 4608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 5632 ++wrote 1024/1024 bytes at offset 5632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 6656 ++wrote 1024/1024 bytes at offset 6656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 7680 ++wrote 1024/1024 bytes at offset 7680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 8704 ++wrote 1024/1024 bytes at offset 8704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 9728 ++wrote 1024/1024 bytes at offset 9728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 10752 ++wrote 1024/1024 bytes at offset 10752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 11776 ++wrote 1024/1024 bytes at offset 11776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 12800 ++wrote 1024/1024 bytes at offset 12800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 13824 ++wrote 1024/1024 bytes at offset 13824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 14848 ++wrote 1024/1024 bytes at offset 14848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 15872 ++wrote 1024/1024 bytes at offset 15872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 16896 ++wrote 1024/1024 bytes at offset 16896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 17920 ++wrote 1024/1024 bytes at offset 17920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 18944 ++wrote 1024/1024 bytes at offset 18944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 19968 ++wrote 1024/1024 bytes at offset 19968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 20992 ++wrote 1024/1024 bytes at offset 20992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 22016 ++wrote 1024/1024 bytes at offset 22016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 23040 ++wrote 1024/1024 bytes at offset 23040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 24064 ++wrote 1024/1024 bytes at offset 24064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 25088 ++wrote 1024/1024 bytes at offset 25088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 26112 ++wrote 1024/1024 bytes at offset 26112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 27136 ++wrote 1024/1024 bytes at offset 27136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 28160 ++wrote 1024/1024 bytes at offset 28160 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 29184 ++wrote 1024/1024 bytes at offset 29184 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 30208 ++wrote 1024/1024 bytes at offset 30208 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 31232 ++wrote 1024/1024 bytes at offset 31232 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 32256 ++wrote 1024/1024 bytes at offset 32256 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 33280 ++wrote 1024/1024 bytes at offset 33280 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 34304 ++wrote 1024/1024 bytes at offset 34304 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 35328 ++wrote 1024/1024 bytes at offset 35328 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 36352 ++wrote 1024/1024 bytes at offset 36352 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> wrote 512/512 bytes at offset 37888 ++=== IO: pattern 74 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65536 ++wrote 512/512 bytes at offset 65536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 66560 ++wrote 512/512 bytes at offset 66560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 67584 ++wrote 512/512 bytes at offset 67584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 68608 ++wrote 512/512 bytes at offset 68608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 69632 ++wrote 512/512 bytes at offset 69632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 70656 ++wrote 512/512 bytes at offset 70656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 71680 ++wrote 512/512 bytes at offset 71680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 72704 ++wrote 512/512 bytes at offset 72704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 73728 ++wrote 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 512/512 bytes at offset 74240 ++=== IO: pattern 145 ++wrote 512/512 bytes at offset 74240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 75264 ++wrote 512/512 bytes at offset 75264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 76288 ++wrote 512/512 bytes at offset 76288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 77312 ++wrote 512/512 bytes at offset 77312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 78336 ++wrote 512/512 bytes at offset 78336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 79360 ++wrote 512/512 bytes at offset 79360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 80384 ++wrote 512/512 bytes at offset 80384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 81408 ++wrote 512/512 bytes at offset 81408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 82432 ++wrote 512/512 bytes at offset 82432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 83456 ++wrote 512/512 bytes at offset 83456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 84480 ++wrote 512/512 bytes at offset 84480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 85504 ++wrote 512/512 bytes at offset 85504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 86528 ++wrote 512/512 bytes at offset 86528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 87552 ++wrote 512/512 bytes at offset 87552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 88576 ++wrote 512/512 bytes at offset 88576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 89600 ++wrote 512/512 bytes at offset 89600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 90624 ++wrote 512/512 bytes at offset 90624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 91648 ++wrote 512/512 bytes at offset 91648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 92672 ++wrote 512/512 bytes at offset 92672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 93696 ++wrote 512/512 bytes at offset 93696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 94720 ++wrote 512/512 bytes at offset 94720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 95744 ++wrote 512/512 bytes at offset 95744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 96768 ++wrote 512/512 bytes at offset 96768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 97792 ++wrote 512/512 bytes at offset 97792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 98816 ++wrote 512/512 bytes at offset 98816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 99840 ++wrote 512/512 bytes at offset 99840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 100864 ++wrote 512/512 bytes at offset 100864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 101888 ++wrote 512/512 bytes at offset 101888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 102912 ++wrote 512/512 bytes at offset 102912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 103936 ++wrote 512/512 bytes at offset 103936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 104960 ++wrote 512/512 bytes at offset 104960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 105984 ++wrote 512/512 bytes at offset 105984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 107008 ++wrote 512/512 bytes at offset 107008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 108032 ++wrote 512/512 bytes at offset 108032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 109056 ++wrote 512/512 bytes at offset 109056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 110080 ++wrote 512/512 bytes at offset 110080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 111360 is not sector aligned +-qemu-io> offset 112384 is not sector aligned +-qemu-io> offset 113408 is not sector aligned +-qemu-io> offset 114432 is not sector aligned +-qemu-io> offset 115456 is not sector aligned +-qemu-io> offset 116480 is not sector aligned +-qemu-io> offset 117504 is not sector aligned +-qemu-io> offset 118528 is not sector aligned +-qemu-io> offset 119552 is not sector aligned +-qemu-io> offset 120576 is not sector aligned +-qemu-io> offset 121600 is not sector aligned +-qemu-io> offset 122624 is not sector aligned +-qemu-io> offset 123648 is not sector aligned +-qemu-io> offset 124672 is not sector aligned +-qemu-io> offset 125696 is not sector aligned +-qemu-io> offset 126720 is not sector aligned +-qemu-io> offset 127744 is not sector aligned +-qemu-io> offset 128768 is not sector aligned +-qemu-io> offset 129792 is not sector aligned +-qemu-io> offset 130816 is not sector aligned +-qemu-io> offset 131840 is not sector aligned +-qemu-io> offset 132864 is not sector aligned +-qemu-io> offset 133888 is not sector aligned +-qemu-io> offset 134912 is not sector aligned +-qemu-io> offset 135936 is not sector aligned +-qemu-io> offset 136960 is not sector aligned +-qemu-io> offset 137984 is not sector aligned +-qemu-io> offset 139008 is not sector aligned +-qemu-io> offset 140032 is not sector aligned +-qemu-io> offset 141056 is not sector aligned +-qemu-io> offset 142080 is not sector aligned +-qemu-io> offset 143104 is not sector aligned +-qemu-io> offset 144128 is not sector aligned +-qemu-io> offset 145152 is not sector aligned +-qemu-io> offset 146176 is not sector aligned +-qemu-io> offset 147200 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> wrote 2048/2048 bytes at offset 148480 ++=== IO: pattern 217 ++offset 111360 is not sector aligned ++offset 112384 is not sector aligned ++offset 113408 is not sector aligned ++offset 114432 is not sector aligned ++offset 115456 is not sector aligned ++offset 116480 is not sector aligned ++offset 117504 is not sector aligned ++offset 118528 is not sector aligned ++offset 119552 is not sector aligned ++offset 120576 is not sector aligned ++offset 121600 is not sector aligned ++offset 122624 is not sector aligned ++offset 123648 is not sector aligned ++offset 124672 is not sector aligned ++offset 125696 is not sector aligned ++offset 126720 is not sector aligned ++offset 127744 is not sector aligned ++offset 128768 is not sector aligned ++offset 129792 is not sector aligned ++offset 130816 is not sector aligned ++offset 131840 is not sector aligned ++offset 132864 is not sector aligned ++offset 133888 is not sector aligned ++offset 134912 is not sector aligned ++offset 135936 is not sector aligned ++offset 136960 is not sector aligned ++offset 137984 is not sector aligned ++offset 139008 is not sector aligned ++offset 140032 is not sector aligned ++offset 141056 is not sector aligned ++offset 142080 is not sector aligned ++offset 143104 is not sector aligned ++offset 144128 is not sector aligned ++offset 145152 is not sector aligned ++offset 146176 is not sector aligned ++offset 147200 is not sector aligned ++=== IO: pattern 34 ++wrote 2048/2048 bytes at offset 148480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 151552 ++wrote 2048/2048 bytes at offset 151552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 154624 ++wrote 2048/2048 bytes at offset 154624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 157696 ++wrote 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 160768 ++wrote 2048/2048 bytes at offset 160768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 163840 ++wrote 2048/2048 bytes at offset 163840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 166912 ++wrote 2048/2048 bytes at offset 166912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 169984 ++wrote 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 173056 ++wrote 2048/2048 bytes at offset 173056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 392192 ++wrote 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 523776 ++wrote 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 1024/1024 bytes at offset 512 ++=== IO: pattern 1 ++read 1024/1024 bytes at offset 512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 1536 ++read 1024/1024 bytes at offset 1536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 2560 ++read 1024/1024 bytes at offset 2560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 3584 ++read 1024/1024 bytes at offset 3584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4608 ++read 1024/1024 bytes at offset 4608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 5632 ++read 1024/1024 bytes at offset 5632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 6656 ++read 1024/1024 bytes at offset 6656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 7680 ++read 1024/1024 bytes at offset 7680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 8704 ++read 1024/1024 bytes at offset 8704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 9728 ++read 1024/1024 bytes at offset 9728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 10752 ++read 1024/1024 bytes at offset 10752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11776 ++read 1024/1024 bytes at offset 11776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 12800 ++read 1024/1024 bytes at offset 12800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 13824 ++read 1024/1024 bytes at offset 13824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 14848 ++read 1024/1024 bytes at offset 14848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 15872 ++read 1024/1024 bytes at offset 15872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 16896 ++read 1024/1024 bytes at offset 16896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17920 ++read 1024/1024 bytes at offset 17920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 18944 ++read 1024/1024 bytes at offset 18944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 19968 ++read 1024/1024 bytes at offset 19968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20992 ++read 1024/1024 bytes at offset 20992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 22016 ++read 1024/1024 bytes at offset 22016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 23040 ++read 1024/1024 bytes at offset 23040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 24064 ++read 1024/1024 bytes at offset 24064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 25088 ++read 1024/1024 bytes at offset 25088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26112 ++read 1024/1024 bytes at offset 26112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 27136 ++read 1024/1024 bytes at offset 27136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 28160 ++read 1024/1024 bytes at offset 28160 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29184 ++read 1024/1024 bytes at offset 29184 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 30208 ++read 1024/1024 bytes at offset 30208 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 31232 ++read 1024/1024 bytes at offset 31232 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 32256 ++read 1024/1024 bytes at offset 32256 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 33280 ++read 1024/1024 bytes at offset 33280 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 34304 ++read 1024/1024 bytes at offset 34304 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35328 ++read 1024/1024 bytes at offset 35328 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 36352 ++read 1024/1024 bytes at offset 36352 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> read 512/512 bytes at offset 37888 ++=== IO: pattern 74 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65536 ++read 512/512 bytes at offset 65536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66560 ++read 512/512 bytes at offset 66560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67584 ++read 512/512 bytes at offset 67584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 68608 ++read 512/512 bytes at offset 68608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 69632 ++read 512/512 bytes at offset 69632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 70656 ++read 512/512 bytes at offset 70656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 71680 ++read 512/512 bytes at offset 71680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 72704 ++read 512/512 bytes at offset 72704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 73728 ++read 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 512/512 bytes at offset 74240 ++=== IO: pattern 145 ++read 512/512 bytes at offset 74240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 75264 ++read 512/512 bytes at offset 75264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 76288 ++read 512/512 bytes at offset 76288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 77312 ++read 512/512 bytes at offset 77312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 78336 ++read 512/512 bytes at offset 78336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 79360 ++read 512/512 bytes at offset 79360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 80384 ++read 512/512 bytes at offset 80384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81408 ++read 512/512 bytes at offset 81408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82432 ++read 512/512 bytes at offset 82432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83456 ++read 512/512 bytes at offset 83456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84480 ++read 512/512 bytes at offset 84480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 85504 ++read 512/512 bytes at offset 85504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 86528 ++read 512/512 bytes at offset 86528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 87552 ++read 512/512 bytes at offset 87552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 88576 ++read 512/512 bytes at offset 88576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 89600 ++read 512/512 bytes at offset 89600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 90624 ++read 512/512 bytes at offset 90624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 91648 ++read 512/512 bytes at offset 91648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 92672 ++read 512/512 bytes at offset 92672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 93696 ++read 512/512 bytes at offset 93696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 94720 ++read 512/512 bytes at offset 94720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 95744 ++read 512/512 bytes at offset 95744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 96768 ++read 512/512 bytes at offset 96768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 97792 ++read 512/512 bytes at offset 97792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 98816 ++read 512/512 bytes at offset 98816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 99840 ++read 512/512 bytes at offset 99840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100864 ++read 512/512 bytes at offset 100864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101888 ++read 512/512 bytes at offset 101888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 102912 ++read 512/512 bytes at offset 102912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 103936 ++read 512/512 bytes at offset 103936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 104960 ++read 512/512 bytes at offset 104960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 105984 ++read 512/512 bytes at offset 105984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 107008 ++read 512/512 bytes at offset 107008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 108032 ++read 512/512 bytes at offset 108032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 109056 ++read 512/512 bytes at offset 109056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 110080 ++read 512/512 bytes at offset 110080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 111360 is not sector aligned +-qemu-io> offset 112384 is not sector aligned +-qemu-io> offset 113408 is not sector aligned +-qemu-io> offset 114432 is not sector aligned +-qemu-io> offset 115456 is not sector aligned +-qemu-io> offset 116480 is not sector aligned +-qemu-io> offset 117504 is not sector aligned +-qemu-io> offset 118528 is not sector aligned +-qemu-io> offset 119552 is not sector aligned +-qemu-io> offset 120576 is not sector aligned +-qemu-io> offset 121600 is not sector aligned +-qemu-io> offset 122624 is not sector aligned +-qemu-io> offset 123648 is not sector aligned +-qemu-io> offset 124672 is not sector aligned +-qemu-io> offset 125696 is not sector aligned +-qemu-io> offset 126720 is not sector aligned +-qemu-io> offset 127744 is not sector aligned +-qemu-io> offset 128768 is not sector aligned +-qemu-io> offset 129792 is not sector aligned +-qemu-io> offset 130816 is not sector aligned +-qemu-io> offset 131840 is not sector aligned +-qemu-io> offset 132864 is not sector aligned +-qemu-io> offset 133888 is not sector aligned +-qemu-io> offset 134912 is not sector aligned +-qemu-io> offset 135936 is not sector aligned +-qemu-io> offset 136960 is not sector aligned +-qemu-io> offset 137984 is not sector aligned +-qemu-io> offset 139008 is not sector aligned +-qemu-io> offset 140032 is not sector aligned +-qemu-io> offset 141056 is not sector aligned +-qemu-io> offset 142080 is not sector aligned +-qemu-io> offset 143104 is not sector aligned +-qemu-io> offset 144128 is not sector aligned +-qemu-io> offset 145152 is not sector aligned +-qemu-io> offset 146176 is not sector aligned +-qemu-io> offset 147200 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> read 2048/2048 bytes at offset 148480 ++=== IO: pattern 217 ++offset 111360 is not sector aligned ++offset 112384 is not sector aligned ++offset 113408 is not sector aligned ++offset 114432 is not sector aligned ++offset 115456 is not sector aligned ++offset 116480 is not sector aligned ++offset 117504 is not sector aligned ++offset 118528 is not sector aligned ++offset 119552 is not sector aligned ++offset 120576 is not sector aligned ++offset 121600 is not sector aligned ++offset 122624 is not sector aligned ++offset 123648 is not sector aligned ++offset 124672 is not sector aligned ++offset 125696 is not sector aligned ++offset 126720 is not sector aligned ++offset 127744 is not sector aligned ++offset 128768 is not sector aligned ++offset 129792 is not sector aligned ++offset 130816 is not sector aligned ++offset 131840 is not sector aligned ++offset 132864 is not sector aligned ++offset 133888 is not sector aligned ++offset 134912 is not sector aligned ++offset 135936 is not sector aligned ++offset 136960 is not sector aligned ++offset 137984 is not sector aligned ++offset 139008 is not sector aligned ++offset 140032 is not sector aligned ++offset 141056 is not sector aligned ++offset 142080 is not sector aligned ++offset 143104 is not sector aligned ++offset 144128 is not sector aligned ++offset 145152 is not sector aligned ++offset 146176 is not sector aligned ++offset 147200 is not sector aligned ++=== IO: pattern 34 ++read 2048/2048 bytes at offset 148480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 151552 ++read 2048/2048 bytes at offset 151552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154624 ++read 2048/2048 bytes at offset 154624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157696 ++read 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 160768 ++read 2048/2048 bytes at offset 160768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 163840 ++read 2048/2048 bytes at offset 163840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166912 ++read 2048/2048 bytes at offset 166912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169984 ++read 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 173056 ++read 2048/2048 bytes at offset 173056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 392192 ++read 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 523776 ++read 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 1024/1024 bytes at offset 512 ++=== IO: pattern 1 ++wrote 1024/1024 bytes at offset 512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 1536 ++wrote 1024/1024 bytes at offset 1536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 2560 ++wrote 1024/1024 bytes at offset 2560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 3584 ++wrote 1024/1024 bytes at offset 3584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4608 ++wrote 1024/1024 bytes at offset 4608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 5632 ++wrote 1024/1024 bytes at offset 5632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 6656 ++wrote 1024/1024 bytes at offset 6656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 7680 ++wrote 1024/1024 bytes at offset 7680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 8704 ++wrote 1024/1024 bytes at offset 8704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 9728 ++wrote 1024/1024 bytes at offset 9728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 10752 ++wrote 1024/1024 bytes at offset 10752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 11776 ++wrote 1024/1024 bytes at offset 11776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 12800 ++wrote 1024/1024 bytes at offset 12800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 13824 ++wrote 1024/1024 bytes at offset 13824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 14848 ++wrote 1024/1024 bytes at offset 14848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 15872 ++wrote 1024/1024 bytes at offset 15872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 16896 ++wrote 1024/1024 bytes at offset 16896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 17920 ++wrote 1024/1024 bytes at offset 17920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 18944 ++wrote 1024/1024 bytes at offset 18944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 19968 ++wrote 1024/1024 bytes at offset 19968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 20992 ++wrote 1024/1024 bytes at offset 20992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 22016 ++wrote 1024/1024 bytes at offset 22016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 23040 ++wrote 1024/1024 bytes at offset 23040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 24064 ++wrote 1024/1024 bytes at offset 24064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 25088 ++wrote 1024/1024 bytes at offset 25088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 26112 ++wrote 1024/1024 bytes at offset 26112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 27136 ++wrote 1024/1024 bytes at offset 27136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 28160 ++wrote 1024/1024 bytes at offset 28160 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 29184 ++wrote 1024/1024 bytes at offset 29184 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 30208 ++wrote 1024/1024 bytes at offset 30208 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 31232 ++wrote 1024/1024 bytes at offset 31232 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 32256 ++wrote 1024/1024 bytes at offset 32256 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 33280 ++wrote 1024/1024 bytes at offset 33280 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 34304 ++wrote 1024/1024 bytes at offset 34304 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 35328 ++wrote 1024/1024 bytes at offset 35328 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 36352 ++wrote 1024/1024 bytes at offset 36352 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> wrote 512/512 bytes at offset 37888 ++=== IO: pattern 74 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65536 ++wrote 512/512 bytes at offset 65536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 66560 ++wrote 512/512 bytes at offset 66560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 67584 ++wrote 512/512 bytes at offset 67584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 68608 ++wrote 512/512 bytes at offset 68608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 69632 ++wrote 512/512 bytes at offset 69632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 70656 ++wrote 512/512 bytes at offset 70656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 71680 ++wrote 512/512 bytes at offset 71680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 72704 ++wrote 512/512 bytes at offset 72704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 73728 ++wrote 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 512/512 bytes at offset 74240 ++=== IO: pattern 145 ++wrote 512/512 bytes at offset 74240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 75264 ++wrote 512/512 bytes at offset 75264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 76288 ++wrote 512/512 bytes at offset 76288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 77312 ++wrote 512/512 bytes at offset 77312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 78336 ++wrote 512/512 bytes at offset 78336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 79360 ++wrote 512/512 bytes at offset 79360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 80384 ++wrote 512/512 bytes at offset 80384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 81408 ++wrote 512/512 bytes at offset 81408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 82432 ++wrote 512/512 bytes at offset 82432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 83456 ++wrote 512/512 bytes at offset 83456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 84480 ++wrote 512/512 bytes at offset 84480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 85504 ++wrote 512/512 bytes at offset 85504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 86528 ++wrote 512/512 bytes at offset 86528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 87552 ++wrote 512/512 bytes at offset 87552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 88576 ++wrote 512/512 bytes at offset 88576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 89600 ++wrote 512/512 bytes at offset 89600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 90624 ++wrote 512/512 bytes at offset 90624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 91648 ++wrote 512/512 bytes at offset 91648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 92672 ++wrote 512/512 bytes at offset 92672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 93696 ++wrote 512/512 bytes at offset 93696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 94720 ++wrote 512/512 bytes at offset 94720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 95744 ++wrote 512/512 bytes at offset 95744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 96768 ++wrote 512/512 bytes at offset 96768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 97792 ++wrote 512/512 bytes at offset 97792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 98816 ++wrote 512/512 bytes at offset 98816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 99840 ++wrote 512/512 bytes at offset 99840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 100864 ++wrote 512/512 bytes at offset 100864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 101888 ++wrote 512/512 bytes at offset 101888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 102912 ++wrote 512/512 bytes at offset 102912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 103936 ++wrote 512/512 bytes at offset 103936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 104960 ++wrote 512/512 bytes at offset 104960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 105984 ++wrote 512/512 bytes at offset 105984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 107008 ++wrote 512/512 bytes at offset 107008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 108032 ++wrote 512/512 bytes at offset 108032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 109056 ++wrote 512/512 bytes at offset 109056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 110080 ++wrote 512/512 bytes at offset 110080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 111360 is not sector aligned +-qemu-io> offset 112384 is not sector aligned +-qemu-io> offset 113408 is not sector aligned +-qemu-io> offset 114432 is not sector aligned +-qemu-io> offset 115456 is not sector aligned +-qemu-io> offset 116480 is not sector aligned +-qemu-io> offset 117504 is not sector aligned +-qemu-io> offset 118528 is not sector aligned +-qemu-io> offset 119552 is not sector aligned +-qemu-io> offset 120576 is not sector aligned +-qemu-io> offset 121600 is not sector aligned +-qemu-io> offset 122624 is not sector aligned +-qemu-io> offset 123648 is not sector aligned +-qemu-io> offset 124672 is not sector aligned +-qemu-io> offset 125696 is not sector aligned +-qemu-io> offset 126720 is not sector aligned +-qemu-io> offset 127744 is not sector aligned +-qemu-io> offset 128768 is not sector aligned +-qemu-io> offset 129792 is not sector aligned +-qemu-io> offset 130816 is not sector aligned +-qemu-io> offset 131840 is not sector aligned +-qemu-io> offset 132864 is not sector aligned +-qemu-io> offset 133888 is not sector aligned +-qemu-io> offset 134912 is not sector aligned +-qemu-io> offset 135936 is not sector aligned +-qemu-io> offset 136960 is not sector aligned +-qemu-io> offset 137984 is not sector aligned +-qemu-io> offset 139008 is not sector aligned +-qemu-io> offset 140032 is not sector aligned +-qemu-io> offset 141056 is not sector aligned +-qemu-io> offset 142080 is not sector aligned +-qemu-io> offset 143104 is not sector aligned +-qemu-io> offset 144128 is not sector aligned +-qemu-io> offset 145152 is not sector aligned +-qemu-io> offset 146176 is not sector aligned +-qemu-io> offset 147200 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> wrote 2048/2048 bytes at offset 148480 ++=== IO: pattern 217 ++offset 111360 is not sector aligned ++offset 112384 is not sector aligned ++offset 113408 is not sector aligned ++offset 114432 is not sector aligned ++offset 115456 is not sector aligned ++offset 116480 is not sector aligned ++offset 117504 is not sector aligned ++offset 118528 is not sector aligned ++offset 119552 is not sector aligned ++offset 120576 is not sector aligned ++offset 121600 is not sector aligned ++offset 122624 is not sector aligned ++offset 123648 is not sector aligned ++offset 124672 is not sector aligned ++offset 125696 is not sector aligned ++offset 126720 is not sector aligned ++offset 127744 is not sector aligned ++offset 128768 is not sector aligned ++offset 129792 is not sector aligned ++offset 130816 is not sector aligned ++offset 131840 is not sector aligned ++offset 132864 is not sector aligned ++offset 133888 is not sector aligned ++offset 134912 is not sector aligned ++offset 135936 is not sector aligned ++offset 136960 is not sector aligned ++offset 137984 is not sector aligned ++offset 139008 is not sector aligned ++offset 140032 is not sector aligned ++offset 141056 is not sector aligned ++offset 142080 is not sector aligned ++offset 143104 is not sector aligned ++offset 144128 is not sector aligned ++offset 145152 is not sector aligned ++offset 146176 is not sector aligned ++offset 147200 is not sector aligned ++=== IO: pattern 34 ++wrote 2048/2048 bytes at offset 148480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 151552 ++wrote 2048/2048 bytes at offset 151552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 154624 ++wrote 2048/2048 bytes at offset 154624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 157696 ++wrote 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 160768 ++wrote 2048/2048 bytes at offset 160768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 163840 ++wrote 2048/2048 bytes at offset 163840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 166912 ++wrote 2048/2048 bytes at offset 166912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 169984 ++wrote 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 173056 ++wrote 2048/2048 bytes at offset 173056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 392192 ++wrote 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 523776 ++wrote 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 1024/1024 bytes at offset 512 ++=== IO: pattern 1 ++read 1024/1024 bytes at offset 512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 1536 ++read 1024/1024 bytes at offset 1536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 2560 ++read 1024/1024 bytes at offset 2560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 3584 ++read 1024/1024 bytes at offset 3584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4608 ++read 1024/1024 bytes at offset 4608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 5632 ++read 1024/1024 bytes at offset 5632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 6656 ++read 1024/1024 bytes at offset 6656 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 7680 ++read 1024/1024 bytes at offset 7680 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 8704 ++read 1024/1024 bytes at offset 8704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 9728 ++read 1024/1024 bytes at offset 9728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 10752 ++read 1024/1024 bytes at offset 10752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11776 ++read 1024/1024 bytes at offset 11776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 12800 ++read 1024/1024 bytes at offset 12800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 13824 ++read 1024/1024 bytes at offset 13824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 14848 ++read 1024/1024 bytes at offset 14848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 15872 ++read 1024/1024 bytes at offset 15872 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 16896 ++read 1024/1024 bytes at offset 16896 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17920 ++read 1024/1024 bytes at offset 17920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 18944 ++read 1024/1024 bytes at offset 18944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 19968 ++read 1024/1024 bytes at offset 19968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20992 ++read 1024/1024 bytes at offset 20992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 22016 ++read 1024/1024 bytes at offset 22016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 23040 ++read 1024/1024 bytes at offset 23040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 24064 ++read 1024/1024 bytes at offset 24064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 25088 ++read 1024/1024 bytes at offset 25088 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26112 ++read 1024/1024 bytes at offset 26112 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 27136 ++read 1024/1024 bytes at offset 27136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 28160 ++read 1024/1024 bytes at offset 28160 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29184 ++read 1024/1024 bytes at offset 29184 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 30208 ++read 1024/1024 bytes at offset 30208 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 31232 ++read 1024/1024 bytes at offset 31232 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 32256 ++read 1024/1024 bytes at offset 32256 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 33280 ++read 1024/1024 bytes at offset 33280 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 34304 ++read 1024/1024 bytes at offset 34304 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35328 ++read 1024/1024 bytes at offset 35328 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 36352 ++read 1024/1024 bytes at offset 36352 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> read 512/512 bytes at offset 37888 ++=== IO: pattern 74 ++read 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40960 ++read 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 41984 ++read 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 43008 ++read 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 44032 ++read 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 45056 ++read 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 46080 ++read 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 47104 ++read 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 48128 ++read 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 49152 ++read 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 50176 ++read 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 51200 ++read 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 52224 ++read 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 53248 ++read 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 54272 ++read 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 55296 ++read 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 56320 ++read 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 57344 ++read 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 58368 ++read 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 59392 ++read 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 60416 ++read 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 61440 ++read 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 62464 ++read 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 63488 ++read 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65536 ++read 512/512 bytes at offset 65536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66560 ++read 512/512 bytes at offset 66560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67584 ++read 512/512 bytes at offset 67584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 68608 ++read 512/512 bytes at offset 68608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 69632 ++read 512/512 bytes at offset 69632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 70656 ++read 512/512 bytes at offset 70656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 71680 ++read 512/512 bytes at offset 71680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 72704 ++read 512/512 bytes at offset 72704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 73728 ++read 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 512/512 bytes at offset 74240 ++=== IO: pattern 145 ++read 512/512 bytes at offset 74240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 75264 ++read 512/512 bytes at offset 75264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 76288 ++read 512/512 bytes at offset 76288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 77312 ++read 512/512 bytes at offset 77312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 78336 ++read 512/512 bytes at offset 78336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 79360 ++read 512/512 bytes at offset 79360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 80384 ++read 512/512 bytes at offset 80384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81408 ++read 512/512 bytes at offset 81408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82432 ++read 512/512 bytes at offset 82432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83456 ++read 512/512 bytes at offset 83456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84480 ++read 512/512 bytes at offset 84480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 85504 ++read 512/512 bytes at offset 85504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 86528 ++read 512/512 bytes at offset 86528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 87552 ++read 512/512 bytes at offset 87552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 88576 ++read 512/512 bytes at offset 88576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 89600 ++read 512/512 bytes at offset 89600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 90624 ++read 512/512 bytes at offset 90624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 91648 ++read 512/512 bytes at offset 91648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 92672 ++read 512/512 bytes at offset 92672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 93696 ++read 512/512 bytes at offset 93696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 94720 ++read 512/512 bytes at offset 94720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 95744 ++read 512/512 bytes at offset 95744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 96768 ++read 512/512 bytes at offset 96768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 97792 ++read 512/512 bytes at offset 97792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 98816 ++read 512/512 bytes at offset 98816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 99840 ++read 512/512 bytes at offset 99840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100864 ++read 512/512 bytes at offset 100864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101888 ++read 512/512 bytes at offset 101888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 102912 ++read 512/512 bytes at offset 102912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 103936 ++read 512/512 bytes at offset 103936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 104960 ++read 512/512 bytes at offset 104960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 105984 ++read 512/512 bytes at offset 105984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 107008 ++read 512/512 bytes at offset 107008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 108032 ++read 512/512 bytes at offset 108032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 109056 ++read 512/512 bytes at offset 109056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 110080 ++read 512/512 bytes at offset 110080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 111360 is not sector aligned +-qemu-io> offset 112384 is not sector aligned +-qemu-io> offset 113408 is not sector aligned +-qemu-io> offset 114432 is not sector aligned +-qemu-io> offset 115456 is not sector aligned +-qemu-io> offset 116480 is not sector aligned +-qemu-io> offset 117504 is not sector aligned +-qemu-io> offset 118528 is not sector aligned +-qemu-io> offset 119552 is not sector aligned +-qemu-io> offset 120576 is not sector aligned +-qemu-io> offset 121600 is not sector aligned +-qemu-io> offset 122624 is not sector aligned +-qemu-io> offset 123648 is not sector aligned +-qemu-io> offset 124672 is not sector aligned +-qemu-io> offset 125696 is not sector aligned +-qemu-io> offset 126720 is not sector aligned +-qemu-io> offset 127744 is not sector aligned +-qemu-io> offset 128768 is not sector aligned +-qemu-io> offset 129792 is not sector aligned +-qemu-io> offset 130816 is not sector aligned +-qemu-io> offset 131840 is not sector aligned +-qemu-io> offset 132864 is not sector aligned +-qemu-io> offset 133888 is not sector aligned +-qemu-io> offset 134912 is not sector aligned +-qemu-io> offset 135936 is not sector aligned +-qemu-io> offset 136960 is not sector aligned +-qemu-io> offset 137984 is not sector aligned +-qemu-io> offset 139008 is not sector aligned +-qemu-io> offset 140032 is not sector aligned +-qemu-io> offset 141056 is not sector aligned +-qemu-io> offset 142080 is not sector aligned +-qemu-io> offset 143104 is not sector aligned +-qemu-io> offset 144128 is not sector aligned +-qemu-io> offset 145152 is not sector aligned +-qemu-io> offset 146176 is not sector aligned +-qemu-io> offset 147200 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> read 2048/2048 bytes at offset 148480 ++=== IO: pattern 217 ++offset 111360 is not sector aligned ++offset 112384 is not sector aligned ++offset 113408 is not sector aligned ++offset 114432 is not sector aligned ++offset 115456 is not sector aligned ++offset 116480 is not sector aligned ++offset 117504 is not sector aligned ++offset 118528 is not sector aligned ++offset 119552 is not sector aligned ++offset 120576 is not sector aligned ++offset 121600 is not sector aligned ++offset 122624 is not sector aligned ++offset 123648 is not sector aligned ++offset 124672 is not sector aligned ++offset 125696 is not sector aligned ++offset 126720 is not sector aligned ++offset 127744 is not sector aligned ++offset 128768 is not sector aligned ++offset 129792 is not sector aligned ++offset 130816 is not sector aligned ++offset 131840 is not sector aligned ++offset 132864 is not sector aligned ++offset 133888 is not sector aligned ++offset 134912 is not sector aligned ++offset 135936 is not sector aligned ++offset 136960 is not sector aligned ++offset 137984 is not sector aligned ++offset 139008 is not sector aligned ++offset 140032 is not sector aligned ++offset 141056 is not sector aligned ++offset 142080 is not sector aligned ++offset 143104 is not sector aligned ++offset 144128 is not sector aligned ++offset 145152 is not sector aligned ++offset 146176 is not sector aligned ++offset 147200 is not sector aligned ++=== IO: pattern 34 ++read 2048/2048 bytes at offset 148480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 151552 ++read 2048/2048 bytes at offset 151552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154624 ++read 2048/2048 bytes at offset 154624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157696 ++read 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 160768 ++read 2048/2048 bytes at offset 160768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 163840 ++read 2048/2048 bytes at offset 163840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166912 ++read 2048/2048 bytes at offset 166912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169984 ++read 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 173056 ++read 2048/2048 bytes at offset 173056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 260608 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 260608 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 392192 ++read 3072/3072 bytes at offset 392192 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 523776 ++read 3072/3072 bytes at offset 523776 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967808: + === IO: pattern 1 +-qemu-io> wrote 1024/1024 bytes at offset 4294967808 ++wrote 1024/1024 bytes at offset 4294967808 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294968832 ++wrote 1024/1024 bytes at offset 4294968832 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294969856 ++wrote 1024/1024 bytes at offset 4294969856 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294970880 ++wrote 1024/1024 bytes at offset 4294970880 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294971904 ++wrote 1024/1024 bytes at offset 4294971904 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294972928 ++wrote 1024/1024 bytes at offset 4294972928 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294973952 ++wrote 1024/1024 bytes at offset 4294973952 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294974976 ++wrote 1024/1024 bytes at offset 4294974976 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294976000 ++wrote 1024/1024 bytes at offset 4294976000 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294977024 ++wrote 1024/1024 bytes at offset 4294977024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294978048 ++wrote 1024/1024 bytes at offset 4294978048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294979072 ++wrote 1024/1024 bytes at offset 4294979072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294980096 ++wrote 1024/1024 bytes at offset 4294980096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294981120 ++wrote 1024/1024 bytes at offset 4294981120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294982144 ++wrote 1024/1024 bytes at offset 4294982144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294983168 ++wrote 1024/1024 bytes at offset 4294983168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294984192 ++wrote 1024/1024 bytes at offset 4294984192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294985216 ++wrote 1024/1024 bytes at offset 4294985216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294986240 ++wrote 1024/1024 bytes at offset 4294986240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294987264 ++wrote 1024/1024 bytes at offset 4294987264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294988288 ++wrote 1024/1024 bytes at offset 4294988288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294989312 ++wrote 1024/1024 bytes at offset 4294989312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294990336 ++wrote 1024/1024 bytes at offset 4294990336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294991360 ++wrote 1024/1024 bytes at offset 4294991360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294992384 ++wrote 1024/1024 bytes at offset 4294992384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294993408 ++wrote 1024/1024 bytes at offset 4294993408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294994432 ++wrote 1024/1024 bytes at offset 4294994432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294995456 ++wrote 1024/1024 bytes at offset 4294995456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294996480 ++wrote 1024/1024 bytes at offset 4294996480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294997504 ++wrote 1024/1024 bytes at offset 4294997504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294998528 ++wrote 1024/1024 bytes at offset 4294998528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294999552 ++wrote 1024/1024 bytes at offset 4294999552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295000576 ++wrote 1024/1024 bytes at offset 4295000576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295001600 ++wrote 1024/1024 bytes at offset 4295001600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295002624 ++wrote 1024/1024 bytes at offset 4295002624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295003648 ++wrote 1024/1024 bytes at offset 4295003648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> wrote 512/512 bytes at offset 4295005184 ++=== IO: pattern 74 ++wrote 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006208 ++wrote 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007232 ++wrote 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008256 ++wrote 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009280 ++wrote 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010304 ++wrote 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011328 ++wrote 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012352 ++wrote 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013376 ++wrote 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014400 ++wrote 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015424 ++wrote 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016448 ++wrote 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017472 ++wrote 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295018496 ++wrote 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019520 ++wrote 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020544 ++wrote 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021568 ++wrote 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022592 ++wrote 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023616 ++wrote 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024640 ++wrote 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025664 ++wrote 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026688 ++wrote 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027712 ++wrote 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028736 ++wrote 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029760 ++wrote 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030784 ++wrote 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031808 ++wrote 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032832 ++wrote 512/512 bytes at offset 4295032832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295033856 ++wrote 512/512 bytes at offset 4295033856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295034880 ++wrote 512/512 bytes at offset 4295034880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295035904 ++wrote 512/512 bytes at offset 4295035904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295036928 ++wrote 512/512 bytes at offset 4295036928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295037952 ++wrote 512/512 bytes at offset 4295037952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295038976 ++wrote 512/512 bytes at offset 4295038976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295040000 ++wrote 512/512 bytes at offset 4295040000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295041024 ++wrote 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 512/512 bytes at offset 4295041536 ++=== IO: pattern 145 ++wrote 512/512 bytes at offset 4295041536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295042560 ++wrote 512/512 bytes at offset 4295042560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295043584 ++wrote 512/512 bytes at offset 4295043584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295044608 ++wrote 512/512 bytes at offset 4295044608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295045632 ++wrote 512/512 bytes at offset 4295045632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295046656 ++wrote 512/512 bytes at offset 4295046656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295047680 ++wrote 512/512 bytes at offset 4295047680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295048704 ++wrote 512/512 bytes at offset 4295048704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295049728 ++wrote 512/512 bytes at offset 4295049728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295050752 ++wrote 512/512 bytes at offset 4295050752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295051776 ++wrote 512/512 bytes at offset 4295051776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295052800 ++wrote 512/512 bytes at offset 4295052800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295053824 ++wrote 512/512 bytes at offset 4295053824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295054848 ++wrote 512/512 bytes at offset 4295054848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295055872 ++wrote 512/512 bytes at offset 4295055872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295056896 ++wrote 512/512 bytes at offset 4295056896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295057920 ++wrote 512/512 bytes at offset 4295057920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295058944 ++wrote 512/512 bytes at offset 4295058944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295059968 ++wrote 512/512 bytes at offset 4295059968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295060992 ++wrote 512/512 bytes at offset 4295060992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295062016 ++wrote 512/512 bytes at offset 4295062016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295063040 ++wrote 512/512 bytes at offset 4295063040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295064064 ++wrote 512/512 bytes at offset 4295064064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295065088 ++wrote 512/512 bytes at offset 4295065088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295066112 ++wrote 512/512 bytes at offset 4295066112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295067136 ++wrote 512/512 bytes at offset 4295067136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295068160 ++wrote 512/512 bytes at offset 4295068160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295069184 ++wrote 512/512 bytes at offset 4295069184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295070208 ++wrote 512/512 bytes at offset 4295070208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295071232 ++wrote 512/512 bytes at offset 4295071232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295072256 ++wrote 512/512 bytes at offset 4295072256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295073280 ++wrote 512/512 bytes at offset 4295073280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295074304 ++wrote 512/512 bytes at offset 4295074304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295075328 ++wrote 512/512 bytes at offset 4295075328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295076352 ++wrote 512/512 bytes at offset 4295076352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295077376 ++wrote 512/512 bytes at offset 4295077376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 4295078656 is not sector aligned +-qemu-io> offset 4295079680 is not sector aligned +-qemu-io> offset 4295080704 is not sector aligned +-qemu-io> offset 4295081728 is not sector aligned +-qemu-io> offset 4295082752 is not sector aligned +-qemu-io> offset 4295083776 is not sector aligned +-qemu-io> offset 4295084800 is not sector aligned +-qemu-io> offset 4295085824 is not sector aligned +-qemu-io> offset 4295086848 is not sector aligned +-qemu-io> offset 4295087872 is not sector aligned +-qemu-io> offset 4295088896 is not sector aligned +-qemu-io> offset 4295089920 is not sector aligned +-qemu-io> offset 4295090944 is not sector aligned +-qemu-io> offset 4295091968 is not sector aligned +-qemu-io> offset 4295092992 is not sector aligned +-qemu-io> offset 4295094016 is not sector aligned +-qemu-io> offset 4295095040 is not sector aligned +-qemu-io> offset 4295096064 is not sector aligned +-qemu-io> offset 4295097088 is not sector aligned +-qemu-io> offset 4295098112 is not sector aligned +-qemu-io> offset 4295099136 is not sector aligned +-qemu-io> offset 4295100160 is not sector aligned +-qemu-io> offset 4295101184 is not sector aligned +-qemu-io> offset 4295102208 is not sector aligned +-qemu-io> offset 4295103232 is not sector aligned +-qemu-io> offset 4295104256 is not sector aligned +-qemu-io> offset 4295105280 is not sector aligned +-qemu-io> offset 4295106304 is not sector aligned +-qemu-io> offset 4295107328 is not sector aligned +-qemu-io> offset 4295108352 is not sector aligned +-qemu-io> offset 4295109376 is not sector aligned +-qemu-io> offset 4295110400 is not sector aligned +-qemu-io> offset 4295111424 is not sector aligned +-qemu-io> offset 4295112448 is not sector aligned +-qemu-io> offset 4295113472 is not sector aligned +-qemu-io> offset 4295114496 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> wrote 2048/2048 bytes at offset 4295115776 ++=== IO: pattern 217 ++offset 4295078656 is not sector aligned ++offset 4295079680 is not sector aligned ++offset 4295080704 is not sector aligned ++offset 4295081728 is not sector aligned ++offset 4295082752 is not sector aligned ++offset 4295083776 is not sector aligned ++offset 4295084800 is not sector aligned ++offset 4295085824 is not sector aligned ++offset 4295086848 is not sector aligned ++offset 4295087872 is not sector aligned ++offset 4295088896 is not sector aligned ++offset 4295089920 is not sector aligned ++offset 4295090944 is not sector aligned ++offset 4295091968 is not sector aligned ++offset 4295092992 is not sector aligned ++offset 4295094016 is not sector aligned ++offset 4295095040 is not sector aligned ++offset 4295096064 is not sector aligned ++offset 4295097088 is not sector aligned ++offset 4295098112 is not sector aligned ++offset 4295099136 is not sector aligned ++offset 4295100160 is not sector aligned ++offset 4295101184 is not sector aligned ++offset 4295102208 is not sector aligned ++offset 4295103232 is not sector aligned ++offset 4295104256 is not sector aligned ++offset 4295105280 is not sector aligned ++offset 4295106304 is not sector aligned ++offset 4295107328 is not sector aligned ++offset 4295108352 is not sector aligned ++offset 4295109376 is not sector aligned ++offset 4295110400 is not sector aligned ++offset 4295111424 is not sector aligned ++offset 4295112448 is not sector aligned ++offset 4295113472 is not sector aligned ++offset 4295114496 is not sector aligned ++=== IO: pattern 34 ++wrote 2048/2048 bytes at offset 4295115776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295118848 ++wrote 2048/2048 bytes at offset 4295118848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295121920 ++wrote 2048/2048 bytes at offset 4295121920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295124992 ++wrote 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295128064 ++wrote 2048/2048 bytes at offset 4295128064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295131136 ++wrote 2048/2048 bytes at offset 4295131136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295134208 ++wrote 2048/2048 bytes at offset 4295134208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295137280 ++wrote 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295140352 ++wrote 2048/2048 bytes at offset 4295140352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295359488 ++wrote 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295491072 ++wrote 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 1024/1024 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 1024/1024 bytes at offset 4294967808 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294968832 ++read 1024/1024 bytes at offset 4294968832 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294969856 ++read 1024/1024 bytes at offset 4294969856 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294970880 ++read 1024/1024 bytes at offset 4294970880 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294971904 ++read 1024/1024 bytes at offset 4294971904 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294972928 ++read 1024/1024 bytes at offset 4294972928 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294973952 ++read 1024/1024 bytes at offset 4294973952 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294974976 ++read 1024/1024 bytes at offset 4294974976 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294976000 ++read 1024/1024 bytes at offset 4294976000 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294977024 ++read 1024/1024 bytes at offset 4294977024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978048 ++read 1024/1024 bytes at offset 4294978048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294979072 ++read 1024/1024 bytes at offset 4294979072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294980096 ++read 1024/1024 bytes at offset 4294980096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294981120 ++read 1024/1024 bytes at offset 4294981120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294982144 ++read 1024/1024 bytes at offset 4294982144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294983168 ++read 1024/1024 bytes at offset 4294983168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984192 ++read 1024/1024 bytes at offset 4294984192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294985216 ++read 1024/1024 bytes at offset 4294985216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294986240 ++read 1024/1024 bytes at offset 4294986240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987264 ++read 1024/1024 bytes at offset 4294987264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294988288 ++read 1024/1024 bytes at offset 4294988288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294989312 ++read 1024/1024 bytes at offset 4294989312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294990336 ++read 1024/1024 bytes at offset 4294990336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294991360 ++read 1024/1024 bytes at offset 4294991360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294992384 ++read 1024/1024 bytes at offset 4294992384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993408 ++read 1024/1024 bytes at offset 4294993408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294994432 ++read 1024/1024 bytes at offset 4294994432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294995456 ++read 1024/1024 bytes at offset 4294995456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996480 ++read 1024/1024 bytes at offset 4294996480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294997504 ++read 1024/1024 bytes at offset 4294997504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294998528 ++read 1024/1024 bytes at offset 4294998528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294999552 ++read 1024/1024 bytes at offset 4294999552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295000576 ++read 1024/1024 bytes at offset 4295000576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295001600 ++read 1024/1024 bytes at offset 4295001600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295002624 ++read 1024/1024 bytes at offset 4295002624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003648 ++read 1024/1024 bytes at offset 4295003648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> read 512/512 bytes at offset 4295005184 ++=== IO: pattern 74 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032832 ++read 512/512 bytes at offset 4295032832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295033856 ++read 512/512 bytes at offset 4295033856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295034880 ++read 512/512 bytes at offset 4295034880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295035904 ++read 512/512 bytes at offset 4295035904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295036928 ++read 512/512 bytes at offset 4295036928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295037952 ++read 512/512 bytes at offset 4295037952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295038976 ++read 512/512 bytes at offset 4295038976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295040000 ++read 512/512 bytes at offset 4295040000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295041024 ++read 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 512/512 bytes at offset 4295041536 ++=== IO: pattern 145 ++read 512/512 bytes at offset 4295041536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295042560 ++read 512/512 bytes at offset 4295042560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295043584 ++read 512/512 bytes at offset 4295043584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295044608 ++read 512/512 bytes at offset 4295044608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295045632 ++read 512/512 bytes at offset 4295045632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295046656 ++read 512/512 bytes at offset 4295046656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295047680 ++read 512/512 bytes at offset 4295047680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295048704 ++read 512/512 bytes at offset 4295048704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295049728 ++read 512/512 bytes at offset 4295049728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295050752 ++read 512/512 bytes at offset 4295050752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295051776 ++read 512/512 bytes at offset 4295051776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295052800 ++read 512/512 bytes at offset 4295052800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295053824 ++read 512/512 bytes at offset 4295053824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295054848 ++read 512/512 bytes at offset 4295054848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295055872 ++read 512/512 bytes at offset 4295055872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295056896 ++read 512/512 bytes at offset 4295056896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295057920 ++read 512/512 bytes at offset 4295057920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295058944 ++read 512/512 bytes at offset 4295058944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295059968 ++read 512/512 bytes at offset 4295059968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295060992 ++read 512/512 bytes at offset 4295060992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295062016 ++read 512/512 bytes at offset 4295062016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295063040 ++read 512/512 bytes at offset 4295063040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295064064 ++read 512/512 bytes at offset 4295064064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295065088 ++read 512/512 bytes at offset 4295065088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295066112 ++read 512/512 bytes at offset 4295066112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295067136 ++read 512/512 bytes at offset 4295067136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295068160 ++read 512/512 bytes at offset 4295068160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295069184 ++read 512/512 bytes at offset 4295069184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295070208 ++read 512/512 bytes at offset 4295070208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295071232 ++read 512/512 bytes at offset 4295071232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295072256 ++read 512/512 bytes at offset 4295072256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295073280 ++read 512/512 bytes at offset 4295073280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295074304 ++read 512/512 bytes at offset 4295074304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295075328 ++read 512/512 bytes at offset 4295075328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295076352 ++read 512/512 bytes at offset 4295076352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295077376 ++read 512/512 bytes at offset 4295077376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 4295078656 is not sector aligned +-qemu-io> offset 4295079680 is not sector aligned +-qemu-io> offset 4295080704 is not sector aligned +-qemu-io> offset 4295081728 is not sector aligned +-qemu-io> offset 4295082752 is not sector aligned +-qemu-io> offset 4295083776 is not sector aligned +-qemu-io> offset 4295084800 is not sector aligned +-qemu-io> offset 4295085824 is not sector aligned +-qemu-io> offset 4295086848 is not sector aligned +-qemu-io> offset 4295087872 is not sector aligned +-qemu-io> offset 4295088896 is not sector aligned +-qemu-io> offset 4295089920 is not sector aligned +-qemu-io> offset 4295090944 is not sector aligned +-qemu-io> offset 4295091968 is not sector aligned +-qemu-io> offset 4295092992 is not sector aligned +-qemu-io> offset 4295094016 is not sector aligned +-qemu-io> offset 4295095040 is not sector aligned +-qemu-io> offset 4295096064 is not sector aligned +-qemu-io> offset 4295097088 is not sector aligned +-qemu-io> offset 4295098112 is not sector aligned +-qemu-io> offset 4295099136 is not sector aligned +-qemu-io> offset 4295100160 is not sector aligned +-qemu-io> offset 4295101184 is not sector aligned +-qemu-io> offset 4295102208 is not sector aligned +-qemu-io> offset 4295103232 is not sector aligned +-qemu-io> offset 4295104256 is not sector aligned +-qemu-io> offset 4295105280 is not sector aligned +-qemu-io> offset 4295106304 is not sector aligned +-qemu-io> offset 4295107328 is not sector aligned +-qemu-io> offset 4295108352 is not sector aligned +-qemu-io> offset 4295109376 is not sector aligned +-qemu-io> offset 4295110400 is not sector aligned +-qemu-io> offset 4295111424 is not sector aligned +-qemu-io> offset 4295112448 is not sector aligned +-qemu-io> offset 4295113472 is not sector aligned +-qemu-io> offset 4295114496 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> read 2048/2048 bytes at offset 4295115776 ++=== IO: pattern 217 ++offset 4295078656 is not sector aligned ++offset 4295079680 is not sector aligned ++offset 4295080704 is not sector aligned ++offset 4295081728 is not sector aligned ++offset 4295082752 is not sector aligned ++offset 4295083776 is not sector aligned ++offset 4295084800 is not sector aligned ++offset 4295085824 is not sector aligned ++offset 4295086848 is not sector aligned ++offset 4295087872 is not sector aligned ++offset 4295088896 is not sector aligned ++offset 4295089920 is not sector aligned ++offset 4295090944 is not sector aligned ++offset 4295091968 is not sector aligned ++offset 4295092992 is not sector aligned ++offset 4295094016 is not sector aligned ++offset 4295095040 is not sector aligned ++offset 4295096064 is not sector aligned ++offset 4295097088 is not sector aligned ++offset 4295098112 is not sector aligned ++offset 4295099136 is not sector aligned ++offset 4295100160 is not sector aligned ++offset 4295101184 is not sector aligned ++offset 4295102208 is not sector aligned ++offset 4295103232 is not sector aligned ++offset 4295104256 is not sector aligned ++offset 4295105280 is not sector aligned ++offset 4295106304 is not sector aligned ++offset 4295107328 is not sector aligned ++offset 4295108352 is not sector aligned ++offset 4295109376 is not sector aligned ++offset 4295110400 is not sector aligned ++offset 4295111424 is not sector aligned ++offset 4295112448 is not sector aligned ++offset 4295113472 is not sector aligned ++offset 4295114496 is not sector aligned ++=== IO: pattern 34 ++read 2048/2048 bytes at offset 4295115776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295118848 ++read 2048/2048 bytes at offset 4295118848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121920 ++read 2048/2048 bytes at offset 4295121920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124992 ++read 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295128064 ++read 2048/2048 bytes at offset 4295128064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295131136 ++read 2048/2048 bytes at offset 4295131136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295134208 ++read 2048/2048 bytes at offset 4295134208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137280 ++read 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295140352 ++read 2048/2048 bytes at offset 4295140352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295359488 ++read 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295491072 ++read 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 1024/1024 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 1024/1024 bytes at offset 4294967808 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294968832 ++wrote 1024/1024 bytes at offset 4294968832 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294969856 ++wrote 1024/1024 bytes at offset 4294969856 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294970880 ++wrote 1024/1024 bytes at offset 4294970880 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294971904 ++wrote 1024/1024 bytes at offset 4294971904 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294972928 ++wrote 1024/1024 bytes at offset 4294972928 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294973952 ++wrote 1024/1024 bytes at offset 4294973952 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294974976 ++wrote 1024/1024 bytes at offset 4294974976 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294976000 ++wrote 1024/1024 bytes at offset 4294976000 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294977024 ++wrote 1024/1024 bytes at offset 4294977024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294978048 ++wrote 1024/1024 bytes at offset 4294978048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294979072 ++wrote 1024/1024 bytes at offset 4294979072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294980096 ++wrote 1024/1024 bytes at offset 4294980096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294981120 ++wrote 1024/1024 bytes at offset 4294981120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294982144 ++wrote 1024/1024 bytes at offset 4294982144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294983168 ++wrote 1024/1024 bytes at offset 4294983168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294984192 ++wrote 1024/1024 bytes at offset 4294984192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294985216 ++wrote 1024/1024 bytes at offset 4294985216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294986240 ++wrote 1024/1024 bytes at offset 4294986240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294987264 ++wrote 1024/1024 bytes at offset 4294987264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294988288 ++wrote 1024/1024 bytes at offset 4294988288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294989312 ++wrote 1024/1024 bytes at offset 4294989312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294990336 ++wrote 1024/1024 bytes at offset 4294990336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294991360 ++wrote 1024/1024 bytes at offset 4294991360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294992384 ++wrote 1024/1024 bytes at offset 4294992384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294993408 ++wrote 1024/1024 bytes at offset 4294993408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294994432 ++wrote 1024/1024 bytes at offset 4294994432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294995456 ++wrote 1024/1024 bytes at offset 4294995456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294996480 ++wrote 1024/1024 bytes at offset 4294996480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294997504 ++wrote 1024/1024 bytes at offset 4294997504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294998528 ++wrote 1024/1024 bytes at offset 4294998528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294999552 ++wrote 1024/1024 bytes at offset 4294999552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295000576 ++wrote 1024/1024 bytes at offset 4295000576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295001600 ++wrote 1024/1024 bytes at offset 4295001600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295002624 ++wrote 1024/1024 bytes at offset 4295002624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295003648 ++wrote 1024/1024 bytes at offset 4295003648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> wrote 512/512 bytes at offset 4295005184 ++=== IO: pattern 74 ++wrote 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295006208 ++wrote 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295007232 ++wrote 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295008256 ++wrote 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295009280 ++wrote 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295010304 ++wrote 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295011328 ++wrote 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295012352 ++wrote 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295013376 ++wrote 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295014400 ++wrote 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295015424 ++wrote 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295016448 ++wrote 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295017472 ++wrote 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295018496 ++wrote 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295019520 ++wrote 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295020544 ++wrote 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295021568 ++wrote 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295022592 ++wrote 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295023616 ++wrote 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295024640 ++wrote 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295025664 ++wrote 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295026688 ++wrote 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295027712 ++wrote 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295028736 ++wrote 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295029760 ++wrote 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295030784 ++wrote 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295031808 ++wrote 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295032832 ++wrote 512/512 bytes at offset 4295032832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295033856 ++wrote 512/512 bytes at offset 4295033856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295034880 ++wrote 512/512 bytes at offset 4295034880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295035904 ++wrote 512/512 bytes at offset 4295035904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295036928 ++wrote 512/512 bytes at offset 4295036928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295037952 ++wrote 512/512 bytes at offset 4295037952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295038976 ++wrote 512/512 bytes at offset 4295038976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295040000 ++wrote 512/512 bytes at offset 4295040000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295041024 ++wrote 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 512/512 bytes at offset 4295041536 ++=== IO: pattern 145 ++wrote 512/512 bytes at offset 4295041536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295042560 ++wrote 512/512 bytes at offset 4295042560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295043584 ++wrote 512/512 bytes at offset 4295043584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295044608 ++wrote 512/512 bytes at offset 4295044608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295045632 ++wrote 512/512 bytes at offset 4295045632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295046656 ++wrote 512/512 bytes at offset 4295046656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295047680 ++wrote 512/512 bytes at offset 4295047680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295048704 ++wrote 512/512 bytes at offset 4295048704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295049728 ++wrote 512/512 bytes at offset 4295049728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295050752 ++wrote 512/512 bytes at offset 4295050752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295051776 ++wrote 512/512 bytes at offset 4295051776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295052800 ++wrote 512/512 bytes at offset 4295052800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295053824 ++wrote 512/512 bytes at offset 4295053824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295054848 ++wrote 512/512 bytes at offset 4295054848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295055872 ++wrote 512/512 bytes at offset 4295055872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295056896 ++wrote 512/512 bytes at offset 4295056896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295057920 ++wrote 512/512 bytes at offset 4295057920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295058944 ++wrote 512/512 bytes at offset 4295058944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295059968 ++wrote 512/512 bytes at offset 4295059968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295060992 ++wrote 512/512 bytes at offset 4295060992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295062016 ++wrote 512/512 bytes at offset 4295062016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295063040 ++wrote 512/512 bytes at offset 4295063040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295064064 ++wrote 512/512 bytes at offset 4295064064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295065088 ++wrote 512/512 bytes at offset 4295065088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295066112 ++wrote 512/512 bytes at offset 4295066112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295067136 ++wrote 512/512 bytes at offset 4295067136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295068160 ++wrote 512/512 bytes at offset 4295068160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295069184 ++wrote 512/512 bytes at offset 4295069184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295070208 ++wrote 512/512 bytes at offset 4295070208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295071232 ++wrote 512/512 bytes at offset 4295071232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295072256 ++wrote 512/512 bytes at offset 4295072256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295073280 ++wrote 512/512 bytes at offset 4295073280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295074304 ++wrote 512/512 bytes at offset 4295074304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295075328 ++wrote 512/512 bytes at offset 4295075328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295076352 ++wrote 512/512 bytes at offset 4295076352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4295077376 ++wrote 512/512 bytes at offset 4295077376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 4295078656 is not sector aligned +-qemu-io> offset 4295079680 is not sector aligned +-qemu-io> offset 4295080704 is not sector aligned +-qemu-io> offset 4295081728 is not sector aligned +-qemu-io> offset 4295082752 is not sector aligned +-qemu-io> offset 4295083776 is not sector aligned +-qemu-io> offset 4295084800 is not sector aligned +-qemu-io> offset 4295085824 is not sector aligned +-qemu-io> offset 4295086848 is not sector aligned +-qemu-io> offset 4295087872 is not sector aligned +-qemu-io> offset 4295088896 is not sector aligned +-qemu-io> offset 4295089920 is not sector aligned +-qemu-io> offset 4295090944 is not sector aligned +-qemu-io> offset 4295091968 is not sector aligned +-qemu-io> offset 4295092992 is not sector aligned +-qemu-io> offset 4295094016 is not sector aligned +-qemu-io> offset 4295095040 is not sector aligned +-qemu-io> offset 4295096064 is not sector aligned +-qemu-io> offset 4295097088 is not sector aligned +-qemu-io> offset 4295098112 is not sector aligned +-qemu-io> offset 4295099136 is not sector aligned +-qemu-io> offset 4295100160 is not sector aligned +-qemu-io> offset 4295101184 is not sector aligned +-qemu-io> offset 4295102208 is not sector aligned +-qemu-io> offset 4295103232 is not sector aligned +-qemu-io> offset 4295104256 is not sector aligned +-qemu-io> offset 4295105280 is not sector aligned +-qemu-io> offset 4295106304 is not sector aligned +-qemu-io> offset 4295107328 is not sector aligned +-qemu-io> offset 4295108352 is not sector aligned +-qemu-io> offset 4295109376 is not sector aligned +-qemu-io> offset 4295110400 is not sector aligned +-qemu-io> offset 4295111424 is not sector aligned +-qemu-io> offset 4295112448 is not sector aligned +-qemu-io> offset 4295113472 is not sector aligned +-qemu-io> offset 4295114496 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> wrote 2048/2048 bytes at offset 4295115776 ++=== IO: pattern 217 ++offset 4295078656 is not sector aligned ++offset 4295079680 is not sector aligned ++offset 4295080704 is not sector aligned ++offset 4295081728 is not sector aligned ++offset 4295082752 is not sector aligned ++offset 4295083776 is not sector aligned ++offset 4295084800 is not sector aligned ++offset 4295085824 is not sector aligned ++offset 4295086848 is not sector aligned ++offset 4295087872 is not sector aligned ++offset 4295088896 is not sector aligned ++offset 4295089920 is not sector aligned ++offset 4295090944 is not sector aligned ++offset 4295091968 is not sector aligned ++offset 4295092992 is not sector aligned ++offset 4295094016 is not sector aligned ++offset 4295095040 is not sector aligned ++offset 4295096064 is not sector aligned ++offset 4295097088 is not sector aligned ++offset 4295098112 is not sector aligned ++offset 4295099136 is not sector aligned ++offset 4295100160 is not sector aligned ++offset 4295101184 is not sector aligned ++offset 4295102208 is not sector aligned ++offset 4295103232 is not sector aligned ++offset 4295104256 is not sector aligned ++offset 4295105280 is not sector aligned ++offset 4295106304 is not sector aligned ++offset 4295107328 is not sector aligned ++offset 4295108352 is not sector aligned ++offset 4295109376 is not sector aligned ++offset 4295110400 is not sector aligned ++offset 4295111424 is not sector aligned ++offset 4295112448 is not sector aligned ++offset 4295113472 is not sector aligned ++offset 4295114496 is not sector aligned ++=== IO: pattern 34 ++wrote 2048/2048 bytes at offset 4295115776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295118848 ++wrote 2048/2048 bytes at offset 4295118848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295121920 ++wrote 2048/2048 bytes at offset 4295121920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295124992 ++wrote 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295128064 ++wrote 2048/2048 bytes at offset 4295128064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295131136 ++wrote 2048/2048 bytes at offset 4295131136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295134208 ++wrote 2048/2048 bytes at offset 4295134208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295137280 ++wrote 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295140352 ++wrote 2048/2048 bytes at offset 4295140352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> wrote 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++wrote 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295359488 ++wrote 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 3072/3072 bytes at offset 4295491072 ++wrote 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 1024/1024 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 1024/1024 bytes at offset 4294967808 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294968832 ++read 1024/1024 bytes at offset 4294968832 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294969856 ++read 1024/1024 bytes at offset 4294969856 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294970880 ++read 1024/1024 bytes at offset 4294970880 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294971904 ++read 1024/1024 bytes at offset 4294971904 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294972928 ++read 1024/1024 bytes at offset 4294972928 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294973952 ++read 1024/1024 bytes at offset 4294973952 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294974976 ++read 1024/1024 bytes at offset 4294974976 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294976000 ++read 1024/1024 bytes at offset 4294976000 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294977024 ++read 1024/1024 bytes at offset 4294977024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978048 ++read 1024/1024 bytes at offset 4294978048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294979072 ++read 1024/1024 bytes at offset 4294979072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294980096 ++read 1024/1024 bytes at offset 4294980096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294981120 ++read 1024/1024 bytes at offset 4294981120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294982144 ++read 1024/1024 bytes at offset 4294982144 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294983168 ++read 1024/1024 bytes at offset 4294983168 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984192 ++read 1024/1024 bytes at offset 4294984192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294985216 ++read 1024/1024 bytes at offset 4294985216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294986240 ++read 1024/1024 bytes at offset 4294986240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987264 ++read 1024/1024 bytes at offset 4294987264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294988288 ++read 1024/1024 bytes at offset 4294988288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294989312 ++read 1024/1024 bytes at offset 4294989312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294990336 ++read 1024/1024 bytes at offset 4294990336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294991360 ++read 1024/1024 bytes at offset 4294991360 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294992384 ++read 1024/1024 bytes at offset 4294992384 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993408 ++read 1024/1024 bytes at offset 4294993408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294994432 ++read 1024/1024 bytes at offset 4294994432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294995456 ++read 1024/1024 bytes at offset 4294995456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996480 ++read 1024/1024 bytes at offset 4294996480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294997504 ++read 1024/1024 bytes at offset 4294997504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294998528 ++read 1024/1024 bytes at offset 4294998528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294999552 ++read 1024/1024 bytes at offset 4294999552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295000576 ++read 1024/1024 bytes at offset 4295000576 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295001600 ++read 1024/1024 bytes at offset 4295001600 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295002624 ++read 1024/1024 bytes at offset 4295002624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003648 ++read 1024/1024 bytes at offset 4295003648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 74 +-qemu-io> read 512/512 bytes at offset 4295005184 ++=== IO: pattern 74 ++read 512/512 bytes at offset 4295005184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295006208 ++read 512/512 bytes at offset 4295006208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295007232 ++read 512/512 bytes at offset 4295007232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295008256 ++read 512/512 bytes at offset 4295008256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295009280 ++read 512/512 bytes at offset 4295009280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295010304 ++read 512/512 bytes at offset 4295010304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295011328 ++read 512/512 bytes at offset 4295011328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295012352 ++read 512/512 bytes at offset 4295012352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295013376 ++read 512/512 bytes at offset 4295013376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295014400 ++read 512/512 bytes at offset 4295014400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295015424 ++read 512/512 bytes at offset 4295015424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295016448 ++read 512/512 bytes at offset 4295016448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295017472 ++read 512/512 bytes at offset 4295017472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295018496 ++read 512/512 bytes at offset 4295018496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295019520 ++read 512/512 bytes at offset 4295019520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295020544 ++read 512/512 bytes at offset 4295020544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295021568 ++read 512/512 bytes at offset 4295021568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295022592 ++read 512/512 bytes at offset 4295022592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295023616 ++read 512/512 bytes at offset 4295023616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295024640 ++read 512/512 bytes at offset 4295024640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295025664 ++read 512/512 bytes at offset 4295025664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295026688 ++read 512/512 bytes at offset 4295026688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295027712 ++read 512/512 bytes at offset 4295027712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295028736 ++read 512/512 bytes at offset 4295028736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295029760 ++read 512/512 bytes at offset 4295029760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295030784 ++read 512/512 bytes at offset 4295030784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295031808 ++read 512/512 bytes at offset 4295031808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295032832 ++read 512/512 bytes at offset 4295032832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295033856 ++read 512/512 bytes at offset 4295033856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295034880 ++read 512/512 bytes at offset 4295034880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295035904 ++read 512/512 bytes at offset 4295035904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295036928 ++read 512/512 bytes at offset 4295036928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295037952 ++read 512/512 bytes at offset 4295037952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295038976 ++read 512/512 bytes at offset 4295038976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295040000 ++read 512/512 bytes at offset 4295040000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295041024 ++read 512/512 bytes at offset 4295041024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 512/512 bytes at offset 4295041536 ++=== IO: pattern 145 ++read 512/512 bytes at offset 4295041536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295042560 ++read 512/512 bytes at offset 4295042560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295043584 ++read 512/512 bytes at offset 4295043584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295044608 ++read 512/512 bytes at offset 4295044608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295045632 ++read 512/512 bytes at offset 4295045632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295046656 ++read 512/512 bytes at offset 4295046656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295047680 ++read 512/512 bytes at offset 4295047680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295048704 ++read 512/512 bytes at offset 4295048704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295049728 ++read 512/512 bytes at offset 4295049728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295050752 ++read 512/512 bytes at offset 4295050752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295051776 ++read 512/512 bytes at offset 4295051776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295052800 ++read 512/512 bytes at offset 4295052800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295053824 ++read 512/512 bytes at offset 4295053824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295054848 ++read 512/512 bytes at offset 4295054848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295055872 ++read 512/512 bytes at offset 4295055872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295056896 ++read 512/512 bytes at offset 4295056896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295057920 ++read 512/512 bytes at offset 4295057920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295058944 ++read 512/512 bytes at offset 4295058944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295059968 ++read 512/512 bytes at offset 4295059968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295060992 ++read 512/512 bytes at offset 4295060992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295062016 ++read 512/512 bytes at offset 4295062016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295063040 ++read 512/512 bytes at offset 4295063040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295064064 ++read 512/512 bytes at offset 4295064064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295065088 ++read 512/512 bytes at offset 4295065088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295066112 ++read 512/512 bytes at offset 4295066112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295067136 ++read 512/512 bytes at offset 4295067136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295068160 ++read 512/512 bytes at offset 4295068160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295069184 ++read 512/512 bytes at offset 4295069184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295070208 ++read 512/512 bytes at offset 4295070208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295071232 ++read 512/512 bytes at offset 4295071232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295072256 ++read 512/512 bytes at offset 4295072256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295073280 ++read 512/512 bytes at offset 4295073280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295074304 ++read 512/512 bytes at offset 4295074304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295075328 ++read 512/512 bytes at offset 4295075328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295076352 ++read 512/512 bytes at offset 4295076352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4295077376 ++read 512/512 bytes at offset 4295077376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 217 +-qemu-io> offset 4295078656 is not sector aligned +-qemu-io> offset 4295079680 is not sector aligned +-qemu-io> offset 4295080704 is not sector aligned +-qemu-io> offset 4295081728 is not sector aligned +-qemu-io> offset 4295082752 is not sector aligned +-qemu-io> offset 4295083776 is not sector aligned +-qemu-io> offset 4295084800 is not sector aligned +-qemu-io> offset 4295085824 is not sector aligned +-qemu-io> offset 4295086848 is not sector aligned +-qemu-io> offset 4295087872 is not sector aligned +-qemu-io> offset 4295088896 is not sector aligned +-qemu-io> offset 4295089920 is not sector aligned +-qemu-io> offset 4295090944 is not sector aligned +-qemu-io> offset 4295091968 is not sector aligned +-qemu-io> offset 4295092992 is not sector aligned +-qemu-io> offset 4295094016 is not sector aligned +-qemu-io> offset 4295095040 is not sector aligned +-qemu-io> offset 4295096064 is not sector aligned +-qemu-io> offset 4295097088 is not sector aligned +-qemu-io> offset 4295098112 is not sector aligned +-qemu-io> offset 4295099136 is not sector aligned +-qemu-io> offset 4295100160 is not sector aligned +-qemu-io> offset 4295101184 is not sector aligned +-qemu-io> offset 4295102208 is not sector aligned +-qemu-io> offset 4295103232 is not sector aligned +-qemu-io> offset 4295104256 is not sector aligned +-qemu-io> offset 4295105280 is not sector aligned +-qemu-io> offset 4295106304 is not sector aligned +-qemu-io> offset 4295107328 is not sector aligned +-qemu-io> offset 4295108352 is not sector aligned +-qemu-io> offset 4295109376 is not sector aligned +-qemu-io> offset 4295110400 is not sector aligned +-qemu-io> offset 4295111424 is not sector aligned +-qemu-io> offset 4295112448 is not sector aligned +-qemu-io> offset 4295113472 is not sector aligned +-qemu-io> offset 4295114496 is not sector aligned +-qemu-io> === IO: pattern 34 +-qemu-io> read 2048/2048 bytes at offset 4295115776 ++=== IO: pattern 217 ++offset 4295078656 is not sector aligned ++offset 4295079680 is not sector aligned ++offset 4295080704 is not sector aligned ++offset 4295081728 is not sector aligned ++offset 4295082752 is not sector aligned ++offset 4295083776 is not sector aligned ++offset 4295084800 is not sector aligned ++offset 4295085824 is not sector aligned ++offset 4295086848 is not sector aligned ++offset 4295087872 is not sector aligned ++offset 4295088896 is not sector aligned ++offset 4295089920 is not sector aligned ++offset 4295090944 is not sector aligned ++offset 4295091968 is not sector aligned ++offset 4295092992 is not sector aligned ++offset 4295094016 is not sector aligned ++offset 4295095040 is not sector aligned ++offset 4295096064 is not sector aligned ++offset 4295097088 is not sector aligned ++offset 4295098112 is not sector aligned ++offset 4295099136 is not sector aligned ++offset 4295100160 is not sector aligned ++offset 4295101184 is not sector aligned ++offset 4295102208 is not sector aligned ++offset 4295103232 is not sector aligned ++offset 4295104256 is not sector aligned ++offset 4295105280 is not sector aligned ++offset 4295106304 is not sector aligned ++offset 4295107328 is not sector aligned ++offset 4295108352 is not sector aligned ++offset 4295109376 is not sector aligned ++offset 4295110400 is not sector aligned ++offset 4295111424 is not sector aligned ++offset 4295112448 is not sector aligned ++offset 4295113472 is not sector aligned ++offset 4295114496 is not sector aligned ++=== IO: pattern 34 ++read 2048/2048 bytes at offset 4295115776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295118848 ++read 2048/2048 bytes at offset 4295118848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121920 ++read 2048/2048 bytes at offset 4295121920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124992 ++read 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295128064 ++read 2048/2048 bytes at offset 4295128064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295131136 ++read 2048/2048 bytes at offset 4295131136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295134208 ++read 2048/2048 bytes at offset 4295134208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137280 ++read 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295140352 ++read 2048/2048 bytes at offset 4295140352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 253 +-qemu-io> read 3072/3072 bytes at offset 4295227904 ++=== IO: pattern 253 ++read 3072/3072 bytes at offset 4295227904 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295359488 ++read 3072/3072 bytes at offset 4295359488 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4295491072 ++read 3072/3072 bytes at offset 4295491072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating another new image + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -5670,221 +5670,221 @@ More complex patterns + test2: With offset 0 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4096 ++wrote 1024/1024 bytes at offset 4096 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 13312 ++wrote 1024/1024 bytes at offset 13312 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 22528 ++wrote 1024/1024 bytes at offset 22528 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 31744 ++wrote 1024/1024 bytes at offset 31744 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 5120 ++wrote 1024/1024 bytes at offset 5120 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 14336 ++wrote 1024/1024 bytes at offset 14336 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 23552 ++wrote 1024/1024 bytes at offset 23552 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 32768 ++wrote 1024/1024 bytes at offset 32768 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 8192 ++wrote 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 17408 ++wrote 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 26624 ++wrote 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 35840 ++wrote 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 0 ++wrote 1024/1024 bytes at offset 0 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 9216 ++wrote 1024/1024 bytes at offset 9216 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 18432 ++wrote 1024/1024 bytes at offset 18432 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 27648 ++wrote 1024/1024 bytes at offset 27648 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 1024 ++wrote 1024/1024 bytes at offset 1024 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 10240 ++wrote 1024/1024 bytes at offset 10240 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 19456 ++wrote 1024/1024 bytes at offset 19456 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 28672 ++wrote 1024/1024 bytes at offset 28672 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 3072 ++wrote 1024/1024 bytes at offset 3072 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 12288 ++wrote 1024/1024 bytes at offset 12288 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 21504 ++wrote 1024/1024 bytes at offset 21504 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 30720 ++wrote 1024/1024 bytes at offset 30720 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 2048/2048 bytes at offset 0 ++read 2048/2048 bytes at offset 0 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 9216 ++read 2048/2048 bytes at offset 9216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 18432 ++read 2048/2048 bytes at offset 18432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 27648 ++read 2048/2048 bytes at offset 27648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 3072/3072 bytes at offset 3072 ++=== IO: pattern 165 ++read 3072/3072 bytes at offset 3072 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 12288 ++read 3072/3072 bytes at offset 12288 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 21504 ++read 3072/3072 bytes at offset 21504 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 30720 ++read 3072/3072 bytes at offset 30720 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 1024/1024 bytes at offset 8192 ++=== IO: pattern 165 ++read 1024/1024 bytes at offset 8192 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 17408 ++read 1024/1024 bytes at offset 17408 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 26624 ++read 1024/1024 bytes at offset 26624 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 35840 ++read 1024/1024 bytes at offset 35840 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 2048 ++read 1024/1024 bytes at offset 2048 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 11264 ++read 1024/1024 bytes at offset 11264 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 20480 ++read 1024/1024 bytes at offset 20480 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 29696 ++read 1024/1024 bytes at offset 29696 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 6144 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 6144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 15360 ++read 2048/2048 bytes at offset 15360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 24576 ++read 2048/2048 bytes at offset 24576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 33792 ++read 2048/2048 bytes at offset 33792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + test2: With offset 4294967296 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4294971392 ++wrote 1024/1024 bytes at offset 4294971392 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294980608 ++wrote 1024/1024 bytes at offset 4294980608 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294989824 ++wrote 1024/1024 bytes at offset 4294989824 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294999040 ++wrote 1024/1024 bytes at offset 4294999040 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4294972416 ++wrote 1024/1024 bytes at offset 4294972416 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294981632 ++wrote 1024/1024 bytes at offset 4294981632 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294990848 ++wrote 1024/1024 bytes at offset 4294990848 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295000064 ++wrote 1024/1024 bytes at offset 4295000064 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4294975488 ++wrote 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294984704 ++wrote 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294993920 ++wrote 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4295003136 ++wrote 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4294967296 ++wrote 1024/1024 bytes at offset 4294967296 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294976512 ++wrote 1024/1024 bytes at offset 4294976512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294985728 ++wrote 1024/1024 bytes at offset 4294985728 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294994944 ++wrote 1024/1024 bytes at offset 4294994944 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4294968320 ++wrote 1024/1024 bytes at offset 4294968320 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294977536 ++wrote 1024/1024 bytes at offset 4294977536 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294986752 ++wrote 1024/1024 bytes at offset 4294986752 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294995968 ++wrote 1024/1024 bytes at offset 4294995968 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 1024/1024 bytes at offset 4294970368 ++wrote 1024/1024 bytes at offset 4294970368 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294979584 ++wrote 1024/1024 bytes at offset 4294979584 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294988800 ++wrote 1024/1024 bytes at offset 4294988800 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 1024/1024 bytes at offset 4294998016 ++wrote 1024/1024 bytes at offset 4294998016 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 2048/2048 bytes at offset 4294967296 ++read 2048/2048 bytes at offset 4294967296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4294976512 ++read 2048/2048 bytes at offset 4294976512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4294985728 ++read 2048/2048 bytes at offset 4294985728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4294994944 ++read 2048/2048 bytes at offset 4294994944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 3072/3072 bytes at offset 4294970368 ++=== IO: pattern 165 ++read 3072/3072 bytes at offset 4294970368 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4294979584 ++read 3072/3072 bytes at offset 4294979584 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4294988800 ++read 3072/3072 bytes at offset 4294988800 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 3072/3072 bytes at offset 4294998016 ++read 3072/3072 bytes at offset 4294998016 + 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 1024/1024 bytes at offset 4294975488 ++=== IO: pattern 165 ++read 1024/1024 bytes at offset 4294975488 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294984704 ++read 1024/1024 bytes at offset 4294984704 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294993920 ++read 1024/1024 bytes at offset 4294993920 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4295003136 ++read 1024/1024 bytes at offset 4295003136 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 1024/1024 bytes at offset 4294969344 ++read 1024/1024 bytes at offset 4294969344 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294978560 ++read 1024/1024 bytes at offset 4294978560 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294987776 ++read 1024/1024 bytes at offset 4294987776 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 1024/1024 bytes at offset 4294996992 ++read 1024/1024 bytes at offset 4294996992 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 2048/2048 bytes at offset 4294973440 ++=== IO: pattern 0 ++read 2048/2048 bytes at offset 4294973440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4294982656 ++read 2048/2048 bytes at offset 4294982656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4294991872 ++read 2048/2048 bytes at offset 4294991872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295001088 ++read 2048/2048 bytes at offset 4295001088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating new image; cluster size: 4096 + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -5892,6382 +5892,6382 @@ Testing empty image + + At offset 0: + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> wrote 2048/2048 bytes at offset 149504 ++=== IO: pattern 36 ++wrote 2048/2048 bytes at offset 149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 153600 ++wrote 2048/2048 bytes at offset 153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 157696 ++wrote 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 161792 ++wrote 2048/2048 bytes at offset 161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 165888 ++wrote 2048/2048 bytes at offset 165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 169984 ++wrote 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 174080 ++wrote 2048/2048 bytes at offset 174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 178176 ++wrote 2048/2048 bytes at offset 178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 182272 ++wrote 2048/2048 bytes at offset 182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 186368 ++wrote 2048/2048 bytes at offset 186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 190464 ++wrote 2048/2048 bytes at offset 190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 194560 ++wrote 2048/2048 bytes at offset 194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 198656 ++wrote 2048/2048 bytes at offset 198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 202752 ++wrote 2048/2048 bytes at offset 202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 206848 ++wrote 2048/2048 bytes at offset 206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 210944 ++wrote 2048/2048 bytes at offset 210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 215040 ++wrote 2048/2048 bytes at offset 215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 219136 ++wrote 2048/2048 bytes at offset 219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 223232 ++wrote 2048/2048 bytes at offset 223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 227328 ++wrote 2048/2048 bytes at offset 227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 231424 ++wrote 2048/2048 bytes at offset 231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 235520 ++wrote 2048/2048 bytes at offset 235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 239616 ++wrote 2048/2048 bytes at offset 239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 243712 ++wrote 2048/2048 bytes at offset 243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 247808 ++wrote 2048/2048 bytes at offset 247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 251904 ++wrote 2048/2048 bytes at offset 251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 256000 ++wrote 2048/2048 bytes at offset 256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 260096 ++wrote 2048/2048 bytes at offset 260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 264192 ++wrote 2048/2048 bytes at offset 264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 268288 ++wrote 2048/2048 bytes at offset 268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 272384 ++wrote 2048/2048 bytes at offset 272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 276480 ++wrote 2048/2048 bytes at offset 276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 280576 ++wrote 2048/2048 bytes at offset 280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 284672 ++wrote 2048/2048 bytes at offset 284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 288768 ++wrote 2048/2048 bytes at offset 288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 292864 ++wrote 2048/2048 bytes at offset 292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 2048/2048 bytes at offset 294912 ++=== IO: pattern 64 ++wrote 2048/2048 bytes at offset 294912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 299008 ++wrote 2048/2048 bytes at offset 299008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 303104 ++wrote 2048/2048 bytes at offset 303104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 307200 ++wrote 2048/2048 bytes at offset 307200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 311296 ++wrote 2048/2048 bytes at offset 311296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 315392 ++wrote 2048/2048 bytes at offset 315392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 319488 ++wrote 2048/2048 bytes at offset 319488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 323584 ++wrote 2048/2048 bytes at offset 323584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 327680 ++wrote 2048/2048 bytes at offset 327680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 331776 ++wrote 2048/2048 bytes at offset 331776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 335872 ++wrote 2048/2048 bytes at offset 335872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 339968 ++wrote 2048/2048 bytes at offset 339968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 344064 ++wrote 2048/2048 bytes at offset 344064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 348160 ++wrote 2048/2048 bytes at offset 348160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 352256 ++wrote 2048/2048 bytes at offset 352256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 356352 ++wrote 2048/2048 bytes at offset 356352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 360448 ++wrote 2048/2048 bytes at offset 360448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 364544 ++wrote 2048/2048 bytes at offset 364544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 368640 ++wrote 2048/2048 bytes at offset 368640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 372736 ++wrote 2048/2048 bytes at offset 372736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 376832 ++wrote 2048/2048 bytes at offset 376832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 380928 ++wrote 2048/2048 bytes at offset 380928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 385024 ++wrote 2048/2048 bytes at offset 385024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 389120 ++wrote 2048/2048 bytes at offset 389120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 393216 ++wrote 2048/2048 bytes at offset 393216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 397312 ++wrote 2048/2048 bytes at offset 397312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 401408 ++wrote 2048/2048 bytes at offset 401408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 405504 ++wrote 2048/2048 bytes at offset 405504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 409600 ++wrote 2048/2048 bytes at offset 409600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 413696 ++wrote 2048/2048 bytes at offset 413696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 417792 ++wrote 2048/2048 bytes at offset 417792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 421888 ++wrote 2048/2048 bytes at offset 421888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 425984 ++wrote 2048/2048 bytes at offset 425984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 430080 ++wrote 2048/2048 bytes at offset 430080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 434176 ++wrote 2048/2048 bytes at offset 434176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 438272 ++wrote 2048/2048 bytes at offset 438272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> wrote 2048/2048 bytes at offset 443392 ++=== IO: pattern 98 ++wrote 2048/2048 bytes at offset 443392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 447488 ++wrote 2048/2048 bytes at offset 447488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 451584 ++wrote 2048/2048 bytes at offset 451584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 455680 ++wrote 2048/2048 bytes at offset 455680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 459776 ++wrote 2048/2048 bytes at offset 459776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 463872 ++wrote 2048/2048 bytes at offset 463872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 467968 ++wrote 2048/2048 bytes at offset 467968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 472064 ++wrote 2048/2048 bytes at offset 472064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 476160 ++wrote 2048/2048 bytes at offset 476160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 480256 ++wrote 2048/2048 bytes at offset 480256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 484352 ++wrote 2048/2048 bytes at offset 484352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 488448 ++wrote 2048/2048 bytes at offset 488448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 492544 ++wrote 2048/2048 bytes at offset 492544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 496640 ++wrote 2048/2048 bytes at offset 496640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 500736 ++wrote 2048/2048 bytes at offset 500736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 504832 ++wrote 2048/2048 bytes at offset 504832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 508928 ++wrote 2048/2048 bytes at offset 508928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 513024 ++wrote 2048/2048 bytes at offset 513024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 517120 ++wrote 2048/2048 bytes at offset 517120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 521216 ++wrote 2048/2048 bytes at offset 521216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 525312 ++wrote 2048/2048 bytes at offset 525312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 529408 ++wrote 2048/2048 bytes at offset 529408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 533504 ++wrote 2048/2048 bytes at offset 533504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 537600 ++wrote 2048/2048 bytes at offset 537600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 541696 ++wrote 2048/2048 bytes at offset 541696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 545792 ++wrote 2048/2048 bytes at offset 545792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 549888 ++wrote 2048/2048 bytes at offset 549888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 553984 ++wrote 2048/2048 bytes at offset 553984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 558080 ++wrote 2048/2048 bytes at offset 558080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 562176 ++wrote 2048/2048 bytes at offset 562176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 566272 ++wrote 2048/2048 bytes at offset 566272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 570368 ++wrote 2048/2048 bytes at offset 570368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 574464 ++wrote 2048/2048 bytes at offset 574464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 578560 ++wrote 2048/2048 bytes at offset 578560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 582656 ++wrote 2048/2048 bytes at offset 582656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 586752 ++wrote 2048/2048 bytes at offset 586752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> wrote 8192/8192 bytes at offset 591872 ++=== IO: pattern 132 ++wrote 8192/8192 bytes at offset 591872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 604160 ++wrote 8192/8192 bytes at offset 604160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 616448 ++wrote 8192/8192 bytes at offset 616448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 628736 ++wrote 8192/8192 bytes at offset 628736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 641024 ++wrote 8192/8192 bytes at offset 641024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 653312 ++wrote 8192/8192 bytes at offset 653312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 665600 ++wrote 8192/8192 bytes at offset 665600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 677888 ++wrote 8192/8192 bytes at offset 677888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 690176 ++wrote 8192/8192 bytes at offset 690176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4190208 ++wrote 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 6289408 ++wrote 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 149504 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 153600 ++read 2048/2048 bytes at offset 153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157696 ++read 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 161792 ++read 2048/2048 bytes at offset 161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 165888 ++read 2048/2048 bytes at offset 165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169984 ++read 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 174080 ++read 2048/2048 bytes at offset 174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 178176 ++read 2048/2048 bytes at offset 178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 182272 ++read 2048/2048 bytes at offset 182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 186368 ++read 2048/2048 bytes at offset 186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 190464 ++read 2048/2048 bytes at offset 190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 194560 ++read 2048/2048 bytes at offset 194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 198656 ++read 2048/2048 bytes at offset 198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 202752 ++read 2048/2048 bytes at offset 202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 206848 ++read 2048/2048 bytes at offset 206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 210944 ++read 2048/2048 bytes at offset 210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 215040 ++read 2048/2048 bytes at offset 215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 219136 ++read 2048/2048 bytes at offset 219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 223232 ++read 2048/2048 bytes at offset 223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 227328 ++read 2048/2048 bytes at offset 227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 231424 ++read 2048/2048 bytes at offset 231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 235520 ++read 2048/2048 bytes at offset 235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 239616 ++read 2048/2048 bytes at offset 239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 243712 ++read 2048/2048 bytes at offset 243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 247808 ++read 2048/2048 bytes at offset 247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 251904 ++read 2048/2048 bytes at offset 251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 256000 ++read 2048/2048 bytes at offset 256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 260096 ++read 2048/2048 bytes at offset 260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 264192 ++read 2048/2048 bytes at offset 264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 268288 ++read 2048/2048 bytes at offset 268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 272384 ++read 2048/2048 bytes at offset 272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 276480 ++read 2048/2048 bytes at offset 276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 280576 ++read 2048/2048 bytes at offset 280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 284672 ++read 2048/2048 bytes at offset 284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 288768 ++read 2048/2048 bytes at offset 288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 292864 ++read 2048/2048 bytes at offset 292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 294912 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 294912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 299008 ++read 2048/2048 bytes at offset 299008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 303104 ++read 2048/2048 bytes at offset 303104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 307200 ++read 2048/2048 bytes at offset 307200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 311296 ++read 2048/2048 bytes at offset 311296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 315392 ++read 2048/2048 bytes at offset 315392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 319488 ++read 2048/2048 bytes at offset 319488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 323584 ++read 2048/2048 bytes at offset 323584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 327680 ++read 2048/2048 bytes at offset 327680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 331776 ++read 2048/2048 bytes at offset 331776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 335872 ++read 2048/2048 bytes at offset 335872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 339968 ++read 2048/2048 bytes at offset 339968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 344064 ++read 2048/2048 bytes at offset 344064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 348160 ++read 2048/2048 bytes at offset 348160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 352256 ++read 2048/2048 bytes at offset 352256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 356352 ++read 2048/2048 bytes at offset 356352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 360448 ++read 2048/2048 bytes at offset 360448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 364544 ++read 2048/2048 bytes at offset 364544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 368640 ++read 2048/2048 bytes at offset 368640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 372736 ++read 2048/2048 bytes at offset 372736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 376832 ++read 2048/2048 bytes at offset 376832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 380928 ++read 2048/2048 bytes at offset 380928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 385024 ++read 2048/2048 bytes at offset 385024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 389120 ++read 2048/2048 bytes at offset 389120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 393216 ++read 2048/2048 bytes at offset 393216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 397312 ++read 2048/2048 bytes at offset 397312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 401408 ++read 2048/2048 bytes at offset 401408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 405504 ++read 2048/2048 bytes at offset 405504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 409600 ++read 2048/2048 bytes at offset 409600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 413696 ++read 2048/2048 bytes at offset 413696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 417792 ++read 2048/2048 bytes at offset 417792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 421888 ++read 2048/2048 bytes at offset 421888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 425984 ++read 2048/2048 bytes at offset 425984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 430080 ++read 2048/2048 bytes at offset 430080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 434176 ++read 2048/2048 bytes at offset 434176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 438272 ++read 2048/2048 bytes at offset 438272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 443392 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 443392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 447488 ++read 2048/2048 bytes at offset 447488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 451584 ++read 2048/2048 bytes at offset 451584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 455680 ++read 2048/2048 bytes at offset 455680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 459776 ++read 2048/2048 bytes at offset 459776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 463872 ++read 2048/2048 bytes at offset 463872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 467968 ++read 2048/2048 bytes at offset 467968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 472064 ++read 2048/2048 bytes at offset 472064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 476160 ++read 2048/2048 bytes at offset 476160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 480256 ++read 2048/2048 bytes at offset 480256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 484352 ++read 2048/2048 bytes at offset 484352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 488448 ++read 2048/2048 bytes at offset 488448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 492544 ++read 2048/2048 bytes at offset 492544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 496640 ++read 2048/2048 bytes at offset 496640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 500736 ++read 2048/2048 bytes at offset 500736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 504832 ++read 2048/2048 bytes at offset 504832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 508928 ++read 2048/2048 bytes at offset 508928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 513024 ++read 2048/2048 bytes at offset 513024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 517120 ++read 2048/2048 bytes at offset 517120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 521216 ++read 2048/2048 bytes at offset 521216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 525312 ++read 2048/2048 bytes at offset 525312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 529408 ++read 2048/2048 bytes at offset 529408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 533504 ++read 2048/2048 bytes at offset 533504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 537600 ++read 2048/2048 bytes at offset 537600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 541696 ++read 2048/2048 bytes at offset 541696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 545792 ++read 2048/2048 bytes at offset 545792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 549888 ++read 2048/2048 bytes at offset 549888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 553984 ++read 2048/2048 bytes at offset 553984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 558080 ++read 2048/2048 bytes at offset 558080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 562176 ++read 2048/2048 bytes at offset 562176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 566272 ++read 2048/2048 bytes at offset 566272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 570368 ++read 2048/2048 bytes at offset 570368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 574464 ++read 2048/2048 bytes at offset 574464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 578560 ++read 2048/2048 bytes at offset 578560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 582656 ++read 2048/2048 bytes at offset 582656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 586752 ++read 2048/2048 bytes at offset 586752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 591872 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 591872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 604160 ++read 8192/8192 bytes at offset 604160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 616448 ++read 8192/8192 bytes at offset 616448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 628736 ++read 8192/8192 bytes at offset 628736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 641024 ++read 8192/8192 bytes at offset 641024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 653312 ++read 8192/8192 bytes at offset 653312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 665600 ++read 8192/8192 bytes at offset 665600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 677888 ++read 8192/8192 bytes at offset 677888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 690176 ++read 8192/8192 bytes at offset 690176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4190208 ++read 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6289408 ++read 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8192 ++wrote 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 24576 ++wrote 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 28672 ++wrote 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45056 ++wrote 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61440 ++wrote 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 65536 ++wrote 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 81920 ++wrote 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98304 ++wrote 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102400 ++wrote 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 118784 ++wrote 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135168 ++wrote 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139264 ++wrote 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> wrote 2048/2048 bytes at offset 149504 ++=== IO: pattern 36 ++wrote 2048/2048 bytes at offset 149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 153600 ++wrote 2048/2048 bytes at offset 153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 157696 ++wrote 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 161792 ++wrote 2048/2048 bytes at offset 161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 165888 ++wrote 2048/2048 bytes at offset 165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 169984 ++wrote 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 174080 ++wrote 2048/2048 bytes at offset 174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 178176 ++wrote 2048/2048 bytes at offset 178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 182272 ++wrote 2048/2048 bytes at offset 182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 186368 ++wrote 2048/2048 bytes at offset 186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 190464 ++wrote 2048/2048 bytes at offset 190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 194560 ++wrote 2048/2048 bytes at offset 194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 198656 ++wrote 2048/2048 bytes at offset 198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 202752 ++wrote 2048/2048 bytes at offset 202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 206848 ++wrote 2048/2048 bytes at offset 206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 210944 ++wrote 2048/2048 bytes at offset 210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 215040 ++wrote 2048/2048 bytes at offset 215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 219136 ++wrote 2048/2048 bytes at offset 219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 223232 ++wrote 2048/2048 bytes at offset 223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 227328 ++wrote 2048/2048 bytes at offset 227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 231424 ++wrote 2048/2048 bytes at offset 231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 235520 ++wrote 2048/2048 bytes at offset 235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 239616 ++wrote 2048/2048 bytes at offset 239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 243712 ++wrote 2048/2048 bytes at offset 243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 247808 ++wrote 2048/2048 bytes at offset 247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 251904 ++wrote 2048/2048 bytes at offset 251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 256000 ++wrote 2048/2048 bytes at offset 256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 260096 ++wrote 2048/2048 bytes at offset 260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 264192 ++wrote 2048/2048 bytes at offset 264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 268288 ++wrote 2048/2048 bytes at offset 268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 272384 ++wrote 2048/2048 bytes at offset 272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 276480 ++wrote 2048/2048 bytes at offset 276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 280576 ++wrote 2048/2048 bytes at offset 280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 284672 ++wrote 2048/2048 bytes at offset 284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 288768 ++wrote 2048/2048 bytes at offset 288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 292864 ++wrote 2048/2048 bytes at offset 292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 2048/2048 bytes at offset 294912 ++=== IO: pattern 64 ++wrote 2048/2048 bytes at offset 294912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 299008 ++wrote 2048/2048 bytes at offset 299008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 303104 ++wrote 2048/2048 bytes at offset 303104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 307200 ++wrote 2048/2048 bytes at offset 307200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 311296 ++wrote 2048/2048 bytes at offset 311296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 315392 ++wrote 2048/2048 bytes at offset 315392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 319488 ++wrote 2048/2048 bytes at offset 319488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 323584 ++wrote 2048/2048 bytes at offset 323584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 327680 ++wrote 2048/2048 bytes at offset 327680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 331776 ++wrote 2048/2048 bytes at offset 331776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 335872 ++wrote 2048/2048 bytes at offset 335872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 339968 ++wrote 2048/2048 bytes at offset 339968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 344064 ++wrote 2048/2048 bytes at offset 344064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 348160 ++wrote 2048/2048 bytes at offset 348160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 352256 ++wrote 2048/2048 bytes at offset 352256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 356352 ++wrote 2048/2048 bytes at offset 356352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 360448 ++wrote 2048/2048 bytes at offset 360448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 364544 ++wrote 2048/2048 bytes at offset 364544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 368640 ++wrote 2048/2048 bytes at offset 368640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 372736 ++wrote 2048/2048 bytes at offset 372736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 376832 ++wrote 2048/2048 bytes at offset 376832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 380928 ++wrote 2048/2048 bytes at offset 380928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 385024 ++wrote 2048/2048 bytes at offset 385024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 389120 ++wrote 2048/2048 bytes at offset 389120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 393216 ++wrote 2048/2048 bytes at offset 393216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 397312 ++wrote 2048/2048 bytes at offset 397312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 401408 ++wrote 2048/2048 bytes at offset 401408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 405504 ++wrote 2048/2048 bytes at offset 405504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 409600 ++wrote 2048/2048 bytes at offset 409600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 413696 ++wrote 2048/2048 bytes at offset 413696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 417792 ++wrote 2048/2048 bytes at offset 417792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 421888 ++wrote 2048/2048 bytes at offset 421888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 425984 ++wrote 2048/2048 bytes at offset 425984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 430080 ++wrote 2048/2048 bytes at offset 430080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 434176 ++wrote 2048/2048 bytes at offset 434176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 438272 ++wrote 2048/2048 bytes at offset 438272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> wrote 2048/2048 bytes at offset 443392 ++=== IO: pattern 98 ++wrote 2048/2048 bytes at offset 443392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 447488 ++wrote 2048/2048 bytes at offset 447488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 451584 ++wrote 2048/2048 bytes at offset 451584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 455680 ++wrote 2048/2048 bytes at offset 455680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 459776 ++wrote 2048/2048 bytes at offset 459776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 463872 ++wrote 2048/2048 bytes at offset 463872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 467968 ++wrote 2048/2048 bytes at offset 467968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 472064 ++wrote 2048/2048 bytes at offset 472064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 476160 ++wrote 2048/2048 bytes at offset 476160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 480256 ++wrote 2048/2048 bytes at offset 480256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 484352 ++wrote 2048/2048 bytes at offset 484352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 488448 ++wrote 2048/2048 bytes at offset 488448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 492544 ++wrote 2048/2048 bytes at offset 492544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 496640 ++wrote 2048/2048 bytes at offset 496640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 500736 ++wrote 2048/2048 bytes at offset 500736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 504832 ++wrote 2048/2048 bytes at offset 504832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 508928 ++wrote 2048/2048 bytes at offset 508928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 513024 ++wrote 2048/2048 bytes at offset 513024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 517120 ++wrote 2048/2048 bytes at offset 517120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 521216 ++wrote 2048/2048 bytes at offset 521216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 525312 ++wrote 2048/2048 bytes at offset 525312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 529408 ++wrote 2048/2048 bytes at offset 529408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 533504 ++wrote 2048/2048 bytes at offset 533504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 537600 ++wrote 2048/2048 bytes at offset 537600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 541696 ++wrote 2048/2048 bytes at offset 541696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 545792 ++wrote 2048/2048 bytes at offset 545792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 549888 ++wrote 2048/2048 bytes at offset 549888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 553984 ++wrote 2048/2048 bytes at offset 553984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 558080 ++wrote 2048/2048 bytes at offset 558080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 562176 ++wrote 2048/2048 bytes at offset 562176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 566272 ++wrote 2048/2048 bytes at offset 566272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 570368 ++wrote 2048/2048 bytes at offset 570368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 574464 ++wrote 2048/2048 bytes at offset 574464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 578560 ++wrote 2048/2048 bytes at offset 578560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 582656 ++wrote 2048/2048 bytes at offset 582656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 586752 ++wrote 2048/2048 bytes at offset 586752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> wrote 8192/8192 bytes at offset 591872 ++=== IO: pattern 132 ++wrote 8192/8192 bytes at offset 591872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 604160 ++wrote 8192/8192 bytes at offset 604160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 616448 ++wrote 8192/8192 bytes at offset 616448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 628736 ++wrote 8192/8192 bytes at offset 628736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 641024 ++wrote 8192/8192 bytes at offset 641024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 653312 ++wrote 8192/8192 bytes at offset 653312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 665600 ++wrote 8192/8192 bytes at offset 665600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 677888 ++wrote 8192/8192 bytes at offset 677888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 690176 ++wrote 8192/8192 bytes at offset 690176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4190208 ++wrote 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 6289408 ++wrote 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 149504 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 153600 ++read 2048/2048 bytes at offset 153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157696 ++read 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 161792 ++read 2048/2048 bytes at offset 161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 165888 ++read 2048/2048 bytes at offset 165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169984 ++read 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 174080 ++read 2048/2048 bytes at offset 174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 178176 ++read 2048/2048 bytes at offset 178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 182272 ++read 2048/2048 bytes at offset 182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 186368 ++read 2048/2048 bytes at offset 186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 190464 ++read 2048/2048 bytes at offset 190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 194560 ++read 2048/2048 bytes at offset 194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 198656 ++read 2048/2048 bytes at offset 198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 202752 ++read 2048/2048 bytes at offset 202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 206848 ++read 2048/2048 bytes at offset 206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 210944 ++read 2048/2048 bytes at offset 210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 215040 ++read 2048/2048 bytes at offset 215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 219136 ++read 2048/2048 bytes at offset 219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 223232 ++read 2048/2048 bytes at offset 223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 227328 ++read 2048/2048 bytes at offset 227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 231424 ++read 2048/2048 bytes at offset 231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 235520 ++read 2048/2048 bytes at offset 235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 239616 ++read 2048/2048 bytes at offset 239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 243712 ++read 2048/2048 bytes at offset 243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 247808 ++read 2048/2048 bytes at offset 247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 251904 ++read 2048/2048 bytes at offset 251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 256000 ++read 2048/2048 bytes at offset 256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 260096 ++read 2048/2048 bytes at offset 260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 264192 ++read 2048/2048 bytes at offset 264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 268288 ++read 2048/2048 bytes at offset 268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 272384 ++read 2048/2048 bytes at offset 272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 276480 ++read 2048/2048 bytes at offset 276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 280576 ++read 2048/2048 bytes at offset 280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 284672 ++read 2048/2048 bytes at offset 284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 288768 ++read 2048/2048 bytes at offset 288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 292864 ++read 2048/2048 bytes at offset 292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 294912 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 294912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 299008 ++read 2048/2048 bytes at offset 299008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 303104 ++read 2048/2048 bytes at offset 303104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 307200 ++read 2048/2048 bytes at offset 307200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 311296 ++read 2048/2048 bytes at offset 311296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 315392 ++read 2048/2048 bytes at offset 315392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 319488 ++read 2048/2048 bytes at offset 319488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 323584 ++read 2048/2048 bytes at offset 323584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 327680 ++read 2048/2048 bytes at offset 327680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 331776 ++read 2048/2048 bytes at offset 331776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 335872 ++read 2048/2048 bytes at offset 335872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 339968 ++read 2048/2048 bytes at offset 339968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 344064 ++read 2048/2048 bytes at offset 344064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 348160 ++read 2048/2048 bytes at offset 348160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 352256 ++read 2048/2048 bytes at offset 352256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 356352 ++read 2048/2048 bytes at offset 356352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 360448 ++read 2048/2048 bytes at offset 360448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 364544 ++read 2048/2048 bytes at offset 364544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 368640 ++read 2048/2048 bytes at offset 368640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 372736 ++read 2048/2048 bytes at offset 372736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 376832 ++read 2048/2048 bytes at offset 376832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 380928 ++read 2048/2048 bytes at offset 380928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 385024 ++read 2048/2048 bytes at offset 385024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 389120 ++read 2048/2048 bytes at offset 389120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 393216 ++read 2048/2048 bytes at offset 393216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 397312 ++read 2048/2048 bytes at offset 397312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 401408 ++read 2048/2048 bytes at offset 401408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 405504 ++read 2048/2048 bytes at offset 405504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 409600 ++read 2048/2048 bytes at offset 409600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 413696 ++read 2048/2048 bytes at offset 413696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 417792 ++read 2048/2048 bytes at offset 417792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 421888 ++read 2048/2048 bytes at offset 421888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 425984 ++read 2048/2048 bytes at offset 425984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 430080 ++read 2048/2048 bytes at offset 430080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 434176 ++read 2048/2048 bytes at offset 434176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 438272 ++read 2048/2048 bytes at offset 438272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 443392 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 443392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 447488 ++read 2048/2048 bytes at offset 447488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 451584 ++read 2048/2048 bytes at offset 451584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 455680 ++read 2048/2048 bytes at offset 455680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 459776 ++read 2048/2048 bytes at offset 459776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 463872 ++read 2048/2048 bytes at offset 463872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 467968 ++read 2048/2048 bytes at offset 467968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 472064 ++read 2048/2048 bytes at offset 472064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 476160 ++read 2048/2048 bytes at offset 476160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 480256 ++read 2048/2048 bytes at offset 480256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 484352 ++read 2048/2048 bytes at offset 484352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 488448 ++read 2048/2048 bytes at offset 488448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 492544 ++read 2048/2048 bytes at offset 492544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 496640 ++read 2048/2048 bytes at offset 496640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 500736 ++read 2048/2048 bytes at offset 500736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 504832 ++read 2048/2048 bytes at offset 504832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 508928 ++read 2048/2048 bytes at offset 508928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 513024 ++read 2048/2048 bytes at offset 513024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 517120 ++read 2048/2048 bytes at offset 517120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 521216 ++read 2048/2048 bytes at offset 521216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 525312 ++read 2048/2048 bytes at offset 525312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 529408 ++read 2048/2048 bytes at offset 529408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 533504 ++read 2048/2048 bytes at offset 533504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 537600 ++read 2048/2048 bytes at offset 537600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 541696 ++read 2048/2048 bytes at offset 541696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 545792 ++read 2048/2048 bytes at offset 545792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 549888 ++read 2048/2048 bytes at offset 549888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 553984 ++read 2048/2048 bytes at offset 553984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 558080 ++read 2048/2048 bytes at offset 558080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 562176 ++read 2048/2048 bytes at offset 562176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 566272 ++read 2048/2048 bytes at offset 566272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 570368 ++read 2048/2048 bytes at offset 570368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 574464 ++read 2048/2048 bytes at offset 574464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 578560 ++read 2048/2048 bytes at offset 578560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 582656 ++read 2048/2048 bytes at offset 582656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 586752 ++read 2048/2048 bytes at offset 586752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 591872 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 591872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 604160 ++read 8192/8192 bytes at offset 604160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 616448 ++read 8192/8192 bytes at offset 616448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 628736 ++read 8192/8192 bytes at offset 628736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 641024 ++read 8192/8192 bytes at offset 641024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 653312 ++read 8192/8192 bytes at offset 653312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 665600 ++read 8192/8192 bytes at offset 665600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 677888 ++read 8192/8192 bytes at offset 677888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 690176 ++read 8192/8192 bytes at offset 690176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4190208 ++read 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6289408 ++read 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + At offset 4294967296: + === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> wrote 2048/2048 bytes at offset 4295116800 ++=== IO: pattern 36 ++wrote 2048/2048 bytes at offset 4295116800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295120896 ++wrote 2048/2048 bytes at offset 4295120896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295124992 ++wrote 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295129088 ++wrote 2048/2048 bytes at offset 4295129088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295133184 ++wrote 2048/2048 bytes at offset 4295133184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295137280 ++wrote 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295141376 ++wrote 2048/2048 bytes at offset 4295141376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295145472 ++wrote 2048/2048 bytes at offset 4295145472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295149568 ++wrote 2048/2048 bytes at offset 4295149568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295153664 ++wrote 2048/2048 bytes at offset 4295153664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295157760 ++wrote 2048/2048 bytes at offset 4295157760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295161856 ++wrote 2048/2048 bytes at offset 4295161856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295165952 ++wrote 2048/2048 bytes at offset 4295165952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295170048 ++wrote 2048/2048 bytes at offset 4295170048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295174144 ++wrote 2048/2048 bytes at offset 4295174144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295178240 ++wrote 2048/2048 bytes at offset 4295178240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295182336 ++wrote 2048/2048 bytes at offset 4295182336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295186432 ++wrote 2048/2048 bytes at offset 4295186432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295190528 ++wrote 2048/2048 bytes at offset 4295190528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295194624 ++wrote 2048/2048 bytes at offset 4295194624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295198720 ++wrote 2048/2048 bytes at offset 4295198720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295202816 ++wrote 2048/2048 bytes at offset 4295202816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295206912 ++wrote 2048/2048 bytes at offset 4295206912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295211008 ++wrote 2048/2048 bytes at offset 4295211008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295215104 ++wrote 2048/2048 bytes at offset 4295215104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295219200 ++wrote 2048/2048 bytes at offset 4295219200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295223296 ++wrote 2048/2048 bytes at offset 4295223296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295227392 ++wrote 2048/2048 bytes at offset 4295227392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295231488 ++wrote 2048/2048 bytes at offset 4295231488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295235584 ++wrote 2048/2048 bytes at offset 4295235584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295239680 ++wrote 2048/2048 bytes at offset 4295239680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295243776 ++wrote 2048/2048 bytes at offset 4295243776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295247872 ++wrote 2048/2048 bytes at offset 4295247872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295251968 ++wrote 2048/2048 bytes at offset 4295251968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295256064 ++wrote 2048/2048 bytes at offset 4295256064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295260160 ++wrote 2048/2048 bytes at offset 4295260160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 2048/2048 bytes at offset 4295262208 ++=== IO: pattern 64 ++wrote 2048/2048 bytes at offset 4295262208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295266304 ++wrote 2048/2048 bytes at offset 4295266304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295270400 ++wrote 2048/2048 bytes at offset 4295270400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295274496 ++wrote 2048/2048 bytes at offset 4295274496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295278592 ++wrote 2048/2048 bytes at offset 4295278592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295282688 ++wrote 2048/2048 bytes at offset 4295282688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295286784 ++wrote 2048/2048 bytes at offset 4295286784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295290880 ++wrote 2048/2048 bytes at offset 4295290880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295294976 ++wrote 2048/2048 bytes at offset 4295294976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295299072 ++wrote 2048/2048 bytes at offset 4295299072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295303168 ++wrote 2048/2048 bytes at offset 4295303168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295307264 ++wrote 2048/2048 bytes at offset 4295307264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295311360 ++wrote 2048/2048 bytes at offset 4295311360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295315456 ++wrote 2048/2048 bytes at offset 4295315456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295319552 ++wrote 2048/2048 bytes at offset 4295319552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295323648 ++wrote 2048/2048 bytes at offset 4295323648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295327744 ++wrote 2048/2048 bytes at offset 4295327744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295331840 ++wrote 2048/2048 bytes at offset 4295331840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295335936 ++wrote 2048/2048 bytes at offset 4295335936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295340032 ++wrote 2048/2048 bytes at offset 4295340032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295344128 ++wrote 2048/2048 bytes at offset 4295344128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295348224 ++wrote 2048/2048 bytes at offset 4295348224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295352320 ++wrote 2048/2048 bytes at offset 4295352320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295356416 ++wrote 2048/2048 bytes at offset 4295356416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295360512 ++wrote 2048/2048 bytes at offset 4295360512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295364608 ++wrote 2048/2048 bytes at offset 4295364608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295368704 ++wrote 2048/2048 bytes at offset 4295368704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295372800 ++wrote 2048/2048 bytes at offset 4295372800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295376896 ++wrote 2048/2048 bytes at offset 4295376896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295380992 ++wrote 2048/2048 bytes at offset 4295380992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295385088 ++wrote 2048/2048 bytes at offset 4295385088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295389184 ++wrote 2048/2048 bytes at offset 4295389184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295393280 ++wrote 2048/2048 bytes at offset 4295393280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295397376 ++wrote 2048/2048 bytes at offset 4295397376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295401472 ++wrote 2048/2048 bytes at offset 4295401472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295405568 ++wrote 2048/2048 bytes at offset 4295405568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> wrote 2048/2048 bytes at offset 4295410688 ++=== IO: pattern 98 ++wrote 2048/2048 bytes at offset 4295410688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295414784 ++wrote 2048/2048 bytes at offset 4295414784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295418880 ++wrote 2048/2048 bytes at offset 4295418880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295422976 ++wrote 2048/2048 bytes at offset 4295422976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295427072 ++wrote 2048/2048 bytes at offset 4295427072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295431168 ++wrote 2048/2048 bytes at offset 4295431168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295435264 ++wrote 2048/2048 bytes at offset 4295435264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295439360 ++wrote 2048/2048 bytes at offset 4295439360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295443456 ++wrote 2048/2048 bytes at offset 4295443456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295447552 ++wrote 2048/2048 bytes at offset 4295447552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295451648 ++wrote 2048/2048 bytes at offset 4295451648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295455744 ++wrote 2048/2048 bytes at offset 4295455744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295459840 ++wrote 2048/2048 bytes at offset 4295459840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295463936 ++wrote 2048/2048 bytes at offset 4295463936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295468032 ++wrote 2048/2048 bytes at offset 4295468032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295472128 ++wrote 2048/2048 bytes at offset 4295472128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295476224 ++wrote 2048/2048 bytes at offset 4295476224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295480320 ++wrote 2048/2048 bytes at offset 4295480320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295484416 ++wrote 2048/2048 bytes at offset 4295484416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295488512 ++wrote 2048/2048 bytes at offset 4295488512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295492608 ++wrote 2048/2048 bytes at offset 4295492608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295496704 ++wrote 2048/2048 bytes at offset 4295496704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295500800 ++wrote 2048/2048 bytes at offset 4295500800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295504896 ++wrote 2048/2048 bytes at offset 4295504896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295508992 ++wrote 2048/2048 bytes at offset 4295508992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295513088 ++wrote 2048/2048 bytes at offset 4295513088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295517184 ++wrote 2048/2048 bytes at offset 4295517184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295521280 ++wrote 2048/2048 bytes at offset 4295521280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295525376 ++wrote 2048/2048 bytes at offset 4295525376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295529472 ++wrote 2048/2048 bytes at offset 4295529472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295533568 ++wrote 2048/2048 bytes at offset 4295533568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295537664 ++wrote 2048/2048 bytes at offset 4295537664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295541760 ++wrote 2048/2048 bytes at offset 4295541760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295545856 ++wrote 2048/2048 bytes at offset 4295545856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295549952 ++wrote 2048/2048 bytes at offset 4295549952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295554048 ++wrote 2048/2048 bytes at offset 4295554048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> wrote 8192/8192 bytes at offset 4295559168 ++=== IO: pattern 132 ++wrote 8192/8192 bytes at offset 4295559168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295571456 ++wrote 8192/8192 bytes at offset 4295571456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295583744 ++wrote 8192/8192 bytes at offset 4295583744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295596032 ++wrote 8192/8192 bytes at offset 4295596032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295608320 ++wrote 8192/8192 bytes at offset 4295608320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295620608 ++wrote 8192/8192 bytes at offset 4295620608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295632896 ++wrote 8192/8192 bytes at offset 4295632896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295645184 ++wrote 8192/8192 bytes at offset 4295645184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295657472 ++wrote 8192/8192 bytes at offset 4295657472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4299157504 ++wrote 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4301256704 ++wrote 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 4295116800 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 4295116800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295120896 ++read 2048/2048 bytes at offset 4295120896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124992 ++read 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295129088 ++read 2048/2048 bytes at offset 4295129088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133184 ++read 2048/2048 bytes at offset 4295133184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137280 ++read 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295141376 ++read 2048/2048 bytes at offset 4295141376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295145472 ++read 2048/2048 bytes at offset 4295145472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295149568 ++read 2048/2048 bytes at offset 4295149568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295153664 ++read 2048/2048 bytes at offset 4295153664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295157760 ++read 2048/2048 bytes at offset 4295157760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295161856 ++read 2048/2048 bytes at offset 4295161856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295165952 ++read 2048/2048 bytes at offset 4295165952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295170048 ++read 2048/2048 bytes at offset 4295170048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295174144 ++read 2048/2048 bytes at offset 4295174144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295178240 ++read 2048/2048 bytes at offset 4295178240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295182336 ++read 2048/2048 bytes at offset 4295182336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295186432 ++read 2048/2048 bytes at offset 4295186432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295190528 ++read 2048/2048 bytes at offset 4295190528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295194624 ++read 2048/2048 bytes at offset 4295194624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295198720 ++read 2048/2048 bytes at offset 4295198720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295202816 ++read 2048/2048 bytes at offset 4295202816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295206912 ++read 2048/2048 bytes at offset 4295206912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295211008 ++read 2048/2048 bytes at offset 4295211008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295215104 ++read 2048/2048 bytes at offset 4295215104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295219200 ++read 2048/2048 bytes at offset 4295219200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295223296 ++read 2048/2048 bytes at offset 4295223296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295227392 ++read 2048/2048 bytes at offset 4295227392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295231488 ++read 2048/2048 bytes at offset 4295231488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295235584 ++read 2048/2048 bytes at offset 4295235584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295239680 ++read 2048/2048 bytes at offset 4295239680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295243776 ++read 2048/2048 bytes at offset 4295243776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295247872 ++read 2048/2048 bytes at offset 4295247872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295251968 ++read 2048/2048 bytes at offset 4295251968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295256064 ++read 2048/2048 bytes at offset 4295256064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295260160 ++read 2048/2048 bytes at offset 4295260160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 4295262208 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 4295262208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295266304 ++read 2048/2048 bytes at offset 4295266304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295270400 ++read 2048/2048 bytes at offset 4295270400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295274496 ++read 2048/2048 bytes at offset 4295274496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295278592 ++read 2048/2048 bytes at offset 4295278592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295282688 ++read 2048/2048 bytes at offset 4295282688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295286784 ++read 2048/2048 bytes at offset 4295286784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295290880 ++read 2048/2048 bytes at offset 4295290880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295294976 ++read 2048/2048 bytes at offset 4295294976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295299072 ++read 2048/2048 bytes at offset 4295299072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295303168 ++read 2048/2048 bytes at offset 4295303168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295307264 ++read 2048/2048 bytes at offset 4295307264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295311360 ++read 2048/2048 bytes at offset 4295311360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295315456 ++read 2048/2048 bytes at offset 4295315456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295319552 ++read 2048/2048 bytes at offset 4295319552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295323648 ++read 2048/2048 bytes at offset 4295323648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295327744 ++read 2048/2048 bytes at offset 4295327744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295331840 ++read 2048/2048 bytes at offset 4295331840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295335936 ++read 2048/2048 bytes at offset 4295335936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295340032 ++read 2048/2048 bytes at offset 4295340032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295344128 ++read 2048/2048 bytes at offset 4295344128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295348224 ++read 2048/2048 bytes at offset 4295348224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295352320 ++read 2048/2048 bytes at offset 4295352320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295356416 ++read 2048/2048 bytes at offset 4295356416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295360512 ++read 2048/2048 bytes at offset 4295360512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295364608 ++read 2048/2048 bytes at offset 4295364608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295368704 ++read 2048/2048 bytes at offset 4295368704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295372800 ++read 2048/2048 bytes at offset 4295372800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295376896 ++read 2048/2048 bytes at offset 4295376896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295380992 ++read 2048/2048 bytes at offset 4295380992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295385088 ++read 2048/2048 bytes at offset 4295385088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295389184 ++read 2048/2048 bytes at offset 4295389184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295393280 ++read 2048/2048 bytes at offset 4295393280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295397376 ++read 2048/2048 bytes at offset 4295397376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295401472 ++read 2048/2048 bytes at offset 4295401472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295405568 ++read 2048/2048 bytes at offset 4295405568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 4295410688 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 4295410688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295414784 ++read 2048/2048 bytes at offset 4295414784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295418880 ++read 2048/2048 bytes at offset 4295418880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295422976 ++read 2048/2048 bytes at offset 4295422976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295427072 ++read 2048/2048 bytes at offset 4295427072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295431168 ++read 2048/2048 bytes at offset 4295431168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295435264 ++read 2048/2048 bytes at offset 4295435264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295439360 ++read 2048/2048 bytes at offset 4295439360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295443456 ++read 2048/2048 bytes at offset 4295443456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295447552 ++read 2048/2048 bytes at offset 4295447552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295451648 ++read 2048/2048 bytes at offset 4295451648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295455744 ++read 2048/2048 bytes at offset 4295455744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295459840 ++read 2048/2048 bytes at offset 4295459840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295463936 ++read 2048/2048 bytes at offset 4295463936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295468032 ++read 2048/2048 bytes at offset 4295468032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295472128 ++read 2048/2048 bytes at offset 4295472128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295476224 ++read 2048/2048 bytes at offset 4295476224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295480320 ++read 2048/2048 bytes at offset 4295480320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295484416 ++read 2048/2048 bytes at offset 4295484416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295488512 ++read 2048/2048 bytes at offset 4295488512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295492608 ++read 2048/2048 bytes at offset 4295492608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295496704 ++read 2048/2048 bytes at offset 4295496704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295500800 ++read 2048/2048 bytes at offset 4295500800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295504896 ++read 2048/2048 bytes at offset 4295504896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295508992 ++read 2048/2048 bytes at offset 4295508992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295513088 ++read 2048/2048 bytes at offset 4295513088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295517184 ++read 2048/2048 bytes at offset 4295517184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295521280 ++read 2048/2048 bytes at offset 4295521280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295525376 ++read 2048/2048 bytes at offset 4295525376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295529472 ++read 2048/2048 bytes at offset 4295529472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295533568 ++read 2048/2048 bytes at offset 4295533568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295537664 ++read 2048/2048 bytes at offset 4295537664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295541760 ++read 2048/2048 bytes at offset 4295541760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295545856 ++read 2048/2048 bytes at offset 4295545856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295549952 ++read 2048/2048 bytes at offset 4295549952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295554048 ++read 2048/2048 bytes at offset 4295554048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 4295559168 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 4295559168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295571456 ++read 8192/8192 bytes at offset 4295571456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295583744 ++read 8192/8192 bytes at offset 4295583744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295596032 ++read 8192/8192 bytes at offset 4295596032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295608320 ++read 8192/8192 bytes at offset 4295608320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295620608 ++read 8192/8192 bytes at offset 4295620608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295632896 ++read 8192/8192 bytes at offset 4295632896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295645184 ++read 8192/8192 bytes at offset 4295645184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295657472 ++read 8192/8192 bytes at offset 4295657472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299157504 ++read 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301256704 ++read 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294975488 ++wrote 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294991872 ++wrote 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294995968 ++wrote 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012352 ++wrote 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295028736 ++wrote 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295032832 ++wrote 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049216 ++wrote 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295065600 ++wrote 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295069696 ++wrote 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086080 ++wrote 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102464 ++wrote 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295106560 ++wrote 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> wrote 2048/2048 bytes at offset 4295116800 ++=== IO: pattern 36 ++wrote 2048/2048 bytes at offset 4295116800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295120896 ++wrote 2048/2048 bytes at offset 4295120896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295124992 ++wrote 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295129088 ++wrote 2048/2048 bytes at offset 4295129088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295133184 ++wrote 2048/2048 bytes at offset 4295133184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295137280 ++wrote 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295141376 ++wrote 2048/2048 bytes at offset 4295141376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295145472 ++wrote 2048/2048 bytes at offset 4295145472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295149568 ++wrote 2048/2048 bytes at offset 4295149568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295153664 ++wrote 2048/2048 bytes at offset 4295153664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295157760 ++wrote 2048/2048 bytes at offset 4295157760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295161856 ++wrote 2048/2048 bytes at offset 4295161856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295165952 ++wrote 2048/2048 bytes at offset 4295165952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295170048 ++wrote 2048/2048 bytes at offset 4295170048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295174144 ++wrote 2048/2048 bytes at offset 4295174144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295178240 ++wrote 2048/2048 bytes at offset 4295178240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295182336 ++wrote 2048/2048 bytes at offset 4295182336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295186432 ++wrote 2048/2048 bytes at offset 4295186432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295190528 ++wrote 2048/2048 bytes at offset 4295190528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295194624 ++wrote 2048/2048 bytes at offset 4295194624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295198720 ++wrote 2048/2048 bytes at offset 4295198720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295202816 ++wrote 2048/2048 bytes at offset 4295202816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295206912 ++wrote 2048/2048 bytes at offset 4295206912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295211008 ++wrote 2048/2048 bytes at offset 4295211008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295215104 ++wrote 2048/2048 bytes at offset 4295215104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295219200 ++wrote 2048/2048 bytes at offset 4295219200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295223296 ++wrote 2048/2048 bytes at offset 4295223296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295227392 ++wrote 2048/2048 bytes at offset 4295227392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295231488 ++wrote 2048/2048 bytes at offset 4295231488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295235584 ++wrote 2048/2048 bytes at offset 4295235584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295239680 ++wrote 2048/2048 bytes at offset 4295239680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295243776 ++wrote 2048/2048 bytes at offset 4295243776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295247872 ++wrote 2048/2048 bytes at offset 4295247872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295251968 ++wrote 2048/2048 bytes at offset 4295251968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295256064 ++wrote 2048/2048 bytes at offset 4295256064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295260160 ++wrote 2048/2048 bytes at offset 4295260160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 2048/2048 bytes at offset 4295262208 ++=== IO: pattern 64 ++wrote 2048/2048 bytes at offset 4295262208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295266304 ++wrote 2048/2048 bytes at offset 4295266304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295270400 ++wrote 2048/2048 bytes at offset 4295270400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295274496 ++wrote 2048/2048 bytes at offset 4295274496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295278592 ++wrote 2048/2048 bytes at offset 4295278592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295282688 ++wrote 2048/2048 bytes at offset 4295282688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295286784 ++wrote 2048/2048 bytes at offset 4295286784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295290880 ++wrote 2048/2048 bytes at offset 4295290880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295294976 ++wrote 2048/2048 bytes at offset 4295294976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295299072 ++wrote 2048/2048 bytes at offset 4295299072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295303168 ++wrote 2048/2048 bytes at offset 4295303168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295307264 ++wrote 2048/2048 bytes at offset 4295307264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295311360 ++wrote 2048/2048 bytes at offset 4295311360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295315456 ++wrote 2048/2048 bytes at offset 4295315456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295319552 ++wrote 2048/2048 bytes at offset 4295319552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295323648 ++wrote 2048/2048 bytes at offset 4295323648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295327744 ++wrote 2048/2048 bytes at offset 4295327744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295331840 ++wrote 2048/2048 bytes at offset 4295331840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295335936 ++wrote 2048/2048 bytes at offset 4295335936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295340032 ++wrote 2048/2048 bytes at offset 4295340032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295344128 ++wrote 2048/2048 bytes at offset 4295344128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295348224 ++wrote 2048/2048 bytes at offset 4295348224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295352320 ++wrote 2048/2048 bytes at offset 4295352320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295356416 ++wrote 2048/2048 bytes at offset 4295356416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295360512 ++wrote 2048/2048 bytes at offset 4295360512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295364608 ++wrote 2048/2048 bytes at offset 4295364608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295368704 ++wrote 2048/2048 bytes at offset 4295368704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295372800 ++wrote 2048/2048 bytes at offset 4295372800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295376896 ++wrote 2048/2048 bytes at offset 4295376896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295380992 ++wrote 2048/2048 bytes at offset 4295380992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295385088 ++wrote 2048/2048 bytes at offset 4295385088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295389184 ++wrote 2048/2048 bytes at offset 4295389184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295393280 ++wrote 2048/2048 bytes at offset 4295393280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295397376 ++wrote 2048/2048 bytes at offset 4295397376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295401472 ++wrote 2048/2048 bytes at offset 4295401472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295405568 ++wrote 2048/2048 bytes at offset 4295405568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> wrote 2048/2048 bytes at offset 4295410688 ++=== IO: pattern 98 ++wrote 2048/2048 bytes at offset 4295410688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295414784 ++wrote 2048/2048 bytes at offset 4295414784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295418880 ++wrote 2048/2048 bytes at offset 4295418880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295422976 ++wrote 2048/2048 bytes at offset 4295422976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295427072 ++wrote 2048/2048 bytes at offset 4295427072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295431168 ++wrote 2048/2048 bytes at offset 4295431168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295435264 ++wrote 2048/2048 bytes at offset 4295435264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295439360 ++wrote 2048/2048 bytes at offset 4295439360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295443456 ++wrote 2048/2048 bytes at offset 4295443456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295447552 ++wrote 2048/2048 bytes at offset 4295447552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295451648 ++wrote 2048/2048 bytes at offset 4295451648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295455744 ++wrote 2048/2048 bytes at offset 4295455744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295459840 ++wrote 2048/2048 bytes at offset 4295459840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295463936 ++wrote 2048/2048 bytes at offset 4295463936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295468032 ++wrote 2048/2048 bytes at offset 4295468032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295472128 ++wrote 2048/2048 bytes at offset 4295472128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295476224 ++wrote 2048/2048 bytes at offset 4295476224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295480320 ++wrote 2048/2048 bytes at offset 4295480320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295484416 ++wrote 2048/2048 bytes at offset 4295484416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295488512 ++wrote 2048/2048 bytes at offset 4295488512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295492608 ++wrote 2048/2048 bytes at offset 4295492608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295496704 ++wrote 2048/2048 bytes at offset 4295496704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295500800 ++wrote 2048/2048 bytes at offset 4295500800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295504896 ++wrote 2048/2048 bytes at offset 4295504896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295508992 ++wrote 2048/2048 bytes at offset 4295508992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295513088 ++wrote 2048/2048 bytes at offset 4295513088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295517184 ++wrote 2048/2048 bytes at offset 4295517184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295521280 ++wrote 2048/2048 bytes at offset 4295521280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295525376 ++wrote 2048/2048 bytes at offset 4295525376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295529472 ++wrote 2048/2048 bytes at offset 4295529472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295533568 ++wrote 2048/2048 bytes at offset 4295533568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295537664 ++wrote 2048/2048 bytes at offset 4295537664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295541760 ++wrote 2048/2048 bytes at offset 4295541760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295545856 ++wrote 2048/2048 bytes at offset 4295545856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295549952 ++wrote 2048/2048 bytes at offset 4295549952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295554048 ++wrote 2048/2048 bytes at offset 4295554048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> wrote 8192/8192 bytes at offset 4295559168 ++=== IO: pattern 132 ++wrote 8192/8192 bytes at offset 4295559168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295571456 ++wrote 8192/8192 bytes at offset 4295571456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295583744 ++wrote 8192/8192 bytes at offset 4295583744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295596032 ++wrote 8192/8192 bytes at offset 4295596032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295608320 ++wrote 8192/8192 bytes at offset 4295608320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295620608 ++wrote 8192/8192 bytes at offset 4295620608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295632896 ++wrote 8192/8192 bytes at offset 4295632896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295645184 ++wrote 8192/8192 bytes at offset 4295645184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295657472 ++wrote 8192/8192 bytes at offset 4295657472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4299157504 ++wrote 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4301256704 ++wrote 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 4295116800 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 4295116800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295120896 ++read 2048/2048 bytes at offset 4295120896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124992 ++read 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295129088 ++read 2048/2048 bytes at offset 4295129088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133184 ++read 2048/2048 bytes at offset 4295133184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137280 ++read 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295141376 ++read 2048/2048 bytes at offset 4295141376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295145472 ++read 2048/2048 bytes at offset 4295145472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295149568 ++read 2048/2048 bytes at offset 4295149568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295153664 ++read 2048/2048 bytes at offset 4295153664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295157760 ++read 2048/2048 bytes at offset 4295157760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295161856 ++read 2048/2048 bytes at offset 4295161856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295165952 ++read 2048/2048 bytes at offset 4295165952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295170048 ++read 2048/2048 bytes at offset 4295170048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295174144 ++read 2048/2048 bytes at offset 4295174144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295178240 ++read 2048/2048 bytes at offset 4295178240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295182336 ++read 2048/2048 bytes at offset 4295182336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295186432 ++read 2048/2048 bytes at offset 4295186432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295190528 ++read 2048/2048 bytes at offset 4295190528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295194624 ++read 2048/2048 bytes at offset 4295194624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295198720 ++read 2048/2048 bytes at offset 4295198720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295202816 ++read 2048/2048 bytes at offset 4295202816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295206912 ++read 2048/2048 bytes at offset 4295206912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295211008 ++read 2048/2048 bytes at offset 4295211008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295215104 ++read 2048/2048 bytes at offset 4295215104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295219200 ++read 2048/2048 bytes at offset 4295219200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295223296 ++read 2048/2048 bytes at offset 4295223296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295227392 ++read 2048/2048 bytes at offset 4295227392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295231488 ++read 2048/2048 bytes at offset 4295231488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295235584 ++read 2048/2048 bytes at offset 4295235584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295239680 ++read 2048/2048 bytes at offset 4295239680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295243776 ++read 2048/2048 bytes at offset 4295243776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295247872 ++read 2048/2048 bytes at offset 4295247872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295251968 ++read 2048/2048 bytes at offset 4295251968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295256064 ++read 2048/2048 bytes at offset 4295256064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295260160 ++read 2048/2048 bytes at offset 4295260160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 4295262208 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 4295262208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295266304 ++read 2048/2048 bytes at offset 4295266304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295270400 ++read 2048/2048 bytes at offset 4295270400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295274496 ++read 2048/2048 bytes at offset 4295274496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295278592 ++read 2048/2048 bytes at offset 4295278592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295282688 ++read 2048/2048 bytes at offset 4295282688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295286784 ++read 2048/2048 bytes at offset 4295286784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295290880 ++read 2048/2048 bytes at offset 4295290880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295294976 ++read 2048/2048 bytes at offset 4295294976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295299072 ++read 2048/2048 bytes at offset 4295299072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295303168 ++read 2048/2048 bytes at offset 4295303168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295307264 ++read 2048/2048 bytes at offset 4295307264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295311360 ++read 2048/2048 bytes at offset 4295311360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295315456 ++read 2048/2048 bytes at offset 4295315456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295319552 ++read 2048/2048 bytes at offset 4295319552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295323648 ++read 2048/2048 bytes at offset 4295323648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295327744 ++read 2048/2048 bytes at offset 4295327744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295331840 ++read 2048/2048 bytes at offset 4295331840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295335936 ++read 2048/2048 bytes at offset 4295335936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295340032 ++read 2048/2048 bytes at offset 4295340032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295344128 ++read 2048/2048 bytes at offset 4295344128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295348224 ++read 2048/2048 bytes at offset 4295348224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295352320 ++read 2048/2048 bytes at offset 4295352320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295356416 ++read 2048/2048 bytes at offset 4295356416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295360512 ++read 2048/2048 bytes at offset 4295360512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295364608 ++read 2048/2048 bytes at offset 4295364608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295368704 ++read 2048/2048 bytes at offset 4295368704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295372800 ++read 2048/2048 bytes at offset 4295372800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295376896 ++read 2048/2048 bytes at offset 4295376896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295380992 ++read 2048/2048 bytes at offset 4295380992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295385088 ++read 2048/2048 bytes at offset 4295385088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295389184 ++read 2048/2048 bytes at offset 4295389184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295393280 ++read 2048/2048 bytes at offset 4295393280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295397376 ++read 2048/2048 bytes at offset 4295397376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295401472 ++read 2048/2048 bytes at offset 4295401472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295405568 ++read 2048/2048 bytes at offset 4295405568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 4295410688 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 4295410688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295414784 ++read 2048/2048 bytes at offset 4295414784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295418880 ++read 2048/2048 bytes at offset 4295418880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295422976 ++read 2048/2048 bytes at offset 4295422976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295427072 ++read 2048/2048 bytes at offset 4295427072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295431168 ++read 2048/2048 bytes at offset 4295431168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295435264 ++read 2048/2048 bytes at offset 4295435264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295439360 ++read 2048/2048 bytes at offset 4295439360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295443456 ++read 2048/2048 bytes at offset 4295443456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295447552 ++read 2048/2048 bytes at offset 4295447552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295451648 ++read 2048/2048 bytes at offset 4295451648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295455744 ++read 2048/2048 bytes at offset 4295455744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295459840 ++read 2048/2048 bytes at offset 4295459840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295463936 ++read 2048/2048 bytes at offset 4295463936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295468032 ++read 2048/2048 bytes at offset 4295468032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295472128 ++read 2048/2048 bytes at offset 4295472128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295476224 ++read 2048/2048 bytes at offset 4295476224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295480320 ++read 2048/2048 bytes at offset 4295480320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295484416 ++read 2048/2048 bytes at offset 4295484416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295488512 ++read 2048/2048 bytes at offset 4295488512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295492608 ++read 2048/2048 bytes at offset 4295492608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295496704 ++read 2048/2048 bytes at offset 4295496704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295500800 ++read 2048/2048 bytes at offset 4295500800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295504896 ++read 2048/2048 bytes at offset 4295504896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295508992 ++read 2048/2048 bytes at offset 4295508992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295513088 ++read 2048/2048 bytes at offset 4295513088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295517184 ++read 2048/2048 bytes at offset 4295517184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295521280 ++read 2048/2048 bytes at offset 4295521280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295525376 ++read 2048/2048 bytes at offset 4295525376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295529472 ++read 2048/2048 bytes at offset 4295529472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295533568 ++read 2048/2048 bytes at offset 4295533568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295537664 ++read 2048/2048 bytes at offset 4295537664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295541760 ++read 2048/2048 bytes at offset 4295541760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295545856 ++read 2048/2048 bytes at offset 4295545856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295549952 ++read 2048/2048 bytes at offset 4295549952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295554048 ++read 2048/2048 bytes at offset 4295554048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 4295559168 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 4295559168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295571456 ++read 8192/8192 bytes at offset 4295571456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295583744 ++read 8192/8192 bytes at offset 4295583744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295596032 ++read 8192/8192 bytes at offset 4295596032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295608320 ++read 8192/8192 bytes at offset 4295608320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295620608 ++read 8192/8192 bytes at offset 4295620608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295632896 ++read 8192/8192 bytes at offset 4295632896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295645184 ++read 8192/8192 bytes at offset 4295645184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295657472 ++read 8192/8192 bytes at offset 4295657472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299157504 ++read 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301256704 ++read 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Compressing image + + Testing compressed image + + With offset 0: + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 149504 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 153600 ++read 2048/2048 bytes at offset 153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157696 ++read 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 161792 ++read 2048/2048 bytes at offset 161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 165888 ++read 2048/2048 bytes at offset 165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169984 ++read 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 174080 ++read 2048/2048 bytes at offset 174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 178176 ++read 2048/2048 bytes at offset 178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 182272 ++read 2048/2048 bytes at offset 182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 186368 ++read 2048/2048 bytes at offset 186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 190464 ++read 2048/2048 bytes at offset 190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 194560 ++read 2048/2048 bytes at offset 194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 198656 ++read 2048/2048 bytes at offset 198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 202752 ++read 2048/2048 bytes at offset 202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 206848 ++read 2048/2048 bytes at offset 206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 210944 ++read 2048/2048 bytes at offset 210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 215040 ++read 2048/2048 bytes at offset 215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 219136 ++read 2048/2048 bytes at offset 219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 223232 ++read 2048/2048 bytes at offset 223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 227328 ++read 2048/2048 bytes at offset 227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 231424 ++read 2048/2048 bytes at offset 231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 235520 ++read 2048/2048 bytes at offset 235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 239616 ++read 2048/2048 bytes at offset 239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 243712 ++read 2048/2048 bytes at offset 243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 247808 ++read 2048/2048 bytes at offset 247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 251904 ++read 2048/2048 bytes at offset 251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 256000 ++read 2048/2048 bytes at offset 256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 260096 ++read 2048/2048 bytes at offset 260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 264192 ++read 2048/2048 bytes at offset 264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 268288 ++read 2048/2048 bytes at offset 268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 272384 ++read 2048/2048 bytes at offset 272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 276480 ++read 2048/2048 bytes at offset 276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 280576 ++read 2048/2048 bytes at offset 280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 284672 ++read 2048/2048 bytes at offset 284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 288768 ++read 2048/2048 bytes at offset 288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 292864 ++read 2048/2048 bytes at offset 292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 294912 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 294912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 299008 ++read 2048/2048 bytes at offset 299008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 303104 ++read 2048/2048 bytes at offset 303104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 307200 ++read 2048/2048 bytes at offset 307200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 311296 ++read 2048/2048 bytes at offset 311296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 315392 ++read 2048/2048 bytes at offset 315392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 319488 ++read 2048/2048 bytes at offset 319488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 323584 ++read 2048/2048 bytes at offset 323584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 327680 ++read 2048/2048 bytes at offset 327680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 331776 ++read 2048/2048 bytes at offset 331776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 335872 ++read 2048/2048 bytes at offset 335872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 339968 ++read 2048/2048 bytes at offset 339968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 344064 ++read 2048/2048 bytes at offset 344064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 348160 ++read 2048/2048 bytes at offset 348160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 352256 ++read 2048/2048 bytes at offset 352256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 356352 ++read 2048/2048 bytes at offset 356352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 360448 ++read 2048/2048 bytes at offset 360448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 364544 ++read 2048/2048 bytes at offset 364544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 368640 ++read 2048/2048 bytes at offset 368640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 372736 ++read 2048/2048 bytes at offset 372736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 376832 ++read 2048/2048 bytes at offset 376832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 380928 ++read 2048/2048 bytes at offset 380928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 385024 ++read 2048/2048 bytes at offset 385024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 389120 ++read 2048/2048 bytes at offset 389120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 393216 ++read 2048/2048 bytes at offset 393216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 397312 ++read 2048/2048 bytes at offset 397312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 401408 ++read 2048/2048 bytes at offset 401408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 405504 ++read 2048/2048 bytes at offset 405504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 409600 ++read 2048/2048 bytes at offset 409600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 413696 ++read 2048/2048 bytes at offset 413696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 417792 ++read 2048/2048 bytes at offset 417792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 421888 ++read 2048/2048 bytes at offset 421888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 425984 ++read 2048/2048 bytes at offset 425984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 430080 ++read 2048/2048 bytes at offset 430080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 434176 ++read 2048/2048 bytes at offset 434176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 438272 ++read 2048/2048 bytes at offset 438272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 443392 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 443392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 447488 ++read 2048/2048 bytes at offset 447488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 451584 ++read 2048/2048 bytes at offset 451584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 455680 ++read 2048/2048 bytes at offset 455680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 459776 ++read 2048/2048 bytes at offset 459776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 463872 ++read 2048/2048 bytes at offset 463872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 467968 ++read 2048/2048 bytes at offset 467968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 472064 ++read 2048/2048 bytes at offset 472064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 476160 ++read 2048/2048 bytes at offset 476160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 480256 ++read 2048/2048 bytes at offset 480256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 484352 ++read 2048/2048 bytes at offset 484352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 488448 ++read 2048/2048 bytes at offset 488448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 492544 ++read 2048/2048 bytes at offset 492544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 496640 ++read 2048/2048 bytes at offset 496640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 500736 ++read 2048/2048 bytes at offset 500736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 504832 ++read 2048/2048 bytes at offset 504832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 508928 ++read 2048/2048 bytes at offset 508928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 513024 ++read 2048/2048 bytes at offset 513024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 517120 ++read 2048/2048 bytes at offset 517120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 521216 ++read 2048/2048 bytes at offset 521216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 525312 ++read 2048/2048 bytes at offset 525312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 529408 ++read 2048/2048 bytes at offset 529408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 533504 ++read 2048/2048 bytes at offset 533504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 537600 ++read 2048/2048 bytes at offset 537600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 541696 ++read 2048/2048 bytes at offset 541696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 545792 ++read 2048/2048 bytes at offset 545792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 549888 ++read 2048/2048 bytes at offset 549888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 553984 ++read 2048/2048 bytes at offset 553984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 558080 ++read 2048/2048 bytes at offset 558080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 562176 ++read 2048/2048 bytes at offset 562176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 566272 ++read 2048/2048 bytes at offset 566272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 570368 ++read 2048/2048 bytes at offset 570368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 574464 ++read 2048/2048 bytes at offset 574464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 578560 ++read 2048/2048 bytes at offset 578560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 582656 ++read 2048/2048 bytes at offset 582656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 586752 ++read 2048/2048 bytes at offset 586752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 591872 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 591872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 604160 ++read 8192/8192 bytes at offset 604160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 616448 ++read 8192/8192 bytes at offset 616448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 628736 ++read 8192/8192 bytes at offset 628736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 641024 ++read 8192/8192 bytes at offset 641024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 653312 ++read 8192/8192 bytes at offset 653312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 665600 ++read 8192/8192 bytes at offset 665600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 677888 ++read 8192/8192 bytes at offset 677888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 690176 ++read 8192/8192 bytes at offset 690176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4190208 ++read 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6289408 ++read 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 0 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4096 ++read 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12288 ++read 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16384 ++read 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20480 ++read 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 24576 ++read 4096/4096 bytes at offset 24576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 28672 ++read 4096/4096 bytes at offset 28672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 32768 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 36864 ++read 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 40960 ++read 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49152 ++read 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53248 ++read 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57344 ++read 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61440 ++read 4096/4096 bytes at offset 61440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 65536 ++read 4096/4096 bytes at offset 65536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 73728 ++read 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 77824 ++read 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86016 ++read 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90112 ++read 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94208 ++read 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98304 ++read 4096/4096 bytes at offset 98304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102400 ++read 4096/4096 bytes at offset 102400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 110592 ++read 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 114688 ++read 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 122880 ++read 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 126976 ++read 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131072 ++read 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135168 ++read 4096/4096 bytes at offset 135168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139264 ++read 4096/4096 bytes at offset 139264 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 149504 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 149504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 153600 ++read 2048/2048 bytes at offset 153600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 157696 ++read 2048/2048 bytes at offset 157696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 161792 ++read 2048/2048 bytes at offset 161792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 165888 ++read 2048/2048 bytes at offset 165888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 169984 ++read 2048/2048 bytes at offset 169984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 174080 ++read 2048/2048 bytes at offset 174080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 178176 ++read 2048/2048 bytes at offset 178176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 182272 ++read 2048/2048 bytes at offset 182272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 186368 ++read 2048/2048 bytes at offset 186368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 190464 ++read 2048/2048 bytes at offset 190464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 194560 ++read 2048/2048 bytes at offset 194560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 198656 ++read 2048/2048 bytes at offset 198656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 202752 ++read 2048/2048 bytes at offset 202752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 206848 ++read 2048/2048 bytes at offset 206848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 210944 ++read 2048/2048 bytes at offset 210944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 215040 ++read 2048/2048 bytes at offset 215040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 219136 ++read 2048/2048 bytes at offset 219136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 223232 ++read 2048/2048 bytes at offset 223232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 227328 ++read 2048/2048 bytes at offset 227328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 231424 ++read 2048/2048 bytes at offset 231424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 235520 ++read 2048/2048 bytes at offset 235520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 239616 ++read 2048/2048 bytes at offset 239616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 243712 ++read 2048/2048 bytes at offset 243712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 247808 ++read 2048/2048 bytes at offset 247808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 251904 ++read 2048/2048 bytes at offset 251904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 256000 ++read 2048/2048 bytes at offset 256000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 260096 ++read 2048/2048 bytes at offset 260096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 264192 ++read 2048/2048 bytes at offset 264192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 268288 ++read 2048/2048 bytes at offset 268288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 272384 ++read 2048/2048 bytes at offset 272384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 276480 ++read 2048/2048 bytes at offset 276480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 280576 ++read 2048/2048 bytes at offset 280576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 284672 ++read 2048/2048 bytes at offset 284672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 288768 ++read 2048/2048 bytes at offset 288768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 292864 ++read 2048/2048 bytes at offset 292864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 294912 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 294912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 299008 ++read 2048/2048 bytes at offset 299008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 303104 ++read 2048/2048 bytes at offset 303104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 307200 ++read 2048/2048 bytes at offset 307200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 311296 ++read 2048/2048 bytes at offset 311296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 315392 ++read 2048/2048 bytes at offset 315392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 319488 ++read 2048/2048 bytes at offset 319488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 323584 ++read 2048/2048 bytes at offset 323584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 327680 ++read 2048/2048 bytes at offset 327680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 331776 ++read 2048/2048 bytes at offset 331776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 335872 ++read 2048/2048 bytes at offset 335872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 339968 ++read 2048/2048 bytes at offset 339968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 344064 ++read 2048/2048 bytes at offset 344064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 348160 ++read 2048/2048 bytes at offset 348160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 352256 ++read 2048/2048 bytes at offset 352256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 356352 ++read 2048/2048 bytes at offset 356352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 360448 ++read 2048/2048 bytes at offset 360448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 364544 ++read 2048/2048 bytes at offset 364544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 368640 ++read 2048/2048 bytes at offset 368640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 372736 ++read 2048/2048 bytes at offset 372736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 376832 ++read 2048/2048 bytes at offset 376832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 380928 ++read 2048/2048 bytes at offset 380928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 385024 ++read 2048/2048 bytes at offset 385024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 389120 ++read 2048/2048 bytes at offset 389120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 393216 ++read 2048/2048 bytes at offset 393216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 397312 ++read 2048/2048 bytes at offset 397312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 401408 ++read 2048/2048 bytes at offset 401408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 405504 ++read 2048/2048 bytes at offset 405504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 409600 ++read 2048/2048 bytes at offset 409600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 413696 ++read 2048/2048 bytes at offset 413696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 417792 ++read 2048/2048 bytes at offset 417792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 421888 ++read 2048/2048 bytes at offset 421888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 425984 ++read 2048/2048 bytes at offset 425984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 430080 ++read 2048/2048 bytes at offset 430080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 434176 ++read 2048/2048 bytes at offset 434176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 438272 ++read 2048/2048 bytes at offset 438272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 443392 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 443392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 447488 ++read 2048/2048 bytes at offset 447488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 451584 ++read 2048/2048 bytes at offset 451584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 455680 ++read 2048/2048 bytes at offset 455680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 459776 ++read 2048/2048 bytes at offset 459776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 463872 ++read 2048/2048 bytes at offset 463872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 467968 ++read 2048/2048 bytes at offset 467968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 472064 ++read 2048/2048 bytes at offset 472064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 476160 ++read 2048/2048 bytes at offset 476160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 480256 ++read 2048/2048 bytes at offset 480256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 484352 ++read 2048/2048 bytes at offset 484352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 488448 ++read 2048/2048 bytes at offset 488448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 492544 ++read 2048/2048 bytes at offset 492544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 496640 ++read 2048/2048 bytes at offset 496640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 500736 ++read 2048/2048 bytes at offset 500736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 504832 ++read 2048/2048 bytes at offset 504832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 508928 ++read 2048/2048 bytes at offset 508928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 513024 ++read 2048/2048 bytes at offset 513024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 517120 ++read 2048/2048 bytes at offset 517120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 521216 ++read 2048/2048 bytes at offset 521216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 525312 ++read 2048/2048 bytes at offset 525312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 529408 ++read 2048/2048 bytes at offset 529408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 533504 ++read 2048/2048 bytes at offset 533504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 537600 ++read 2048/2048 bytes at offset 537600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 541696 ++read 2048/2048 bytes at offset 541696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 545792 ++read 2048/2048 bytes at offset 545792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 549888 ++read 2048/2048 bytes at offset 549888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 553984 ++read 2048/2048 bytes at offset 553984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 558080 ++read 2048/2048 bytes at offset 558080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 562176 ++read 2048/2048 bytes at offset 562176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 566272 ++read 2048/2048 bytes at offset 566272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 570368 ++read 2048/2048 bytes at offset 570368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 574464 ++read 2048/2048 bytes at offset 574464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 578560 ++read 2048/2048 bytes at offset 578560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 582656 ++read 2048/2048 bytes at offset 582656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 586752 ++read 2048/2048 bytes at offset 586752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 591872 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 591872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 604160 ++read 8192/8192 bytes at offset 604160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 616448 ++read 8192/8192 bytes at offset 616448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 628736 ++read 8192/8192 bytes at offset 628736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 641024 ++read 8192/8192 bytes at offset 641024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 653312 ++read 8192/8192 bytes at offset 653312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 665600 ++read 8192/8192 bytes at offset 665600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 677888 ++read 8192/8192 bytes at offset 677888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 690176 ++read 8192/8192 bytes at offset 690176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4190208 ++read 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6289408 ++read 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967296: + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 4295116800 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 4295116800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295120896 ++read 2048/2048 bytes at offset 4295120896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124992 ++read 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295129088 ++read 2048/2048 bytes at offset 4295129088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133184 ++read 2048/2048 bytes at offset 4295133184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137280 ++read 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295141376 ++read 2048/2048 bytes at offset 4295141376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295145472 ++read 2048/2048 bytes at offset 4295145472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295149568 ++read 2048/2048 bytes at offset 4295149568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295153664 ++read 2048/2048 bytes at offset 4295153664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295157760 ++read 2048/2048 bytes at offset 4295157760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295161856 ++read 2048/2048 bytes at offset 4295161856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295165952 ++read 2048/2048 bytes at offset 4295165952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295170048 ++read 2048/2048 bytes at offset 4295170048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295174144 ++read 2048/2048 bytes at offset 4295174144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295178240 ++read 2048/2048 bytes at offset 4295178240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295182336 ++read 2048/2048 bytes at offset 4295182336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295186432 ++read 2048/2048 bytes at offset 4295186432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295190528 ++read 2048/2048 bytes at offset 4295190528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295194624 ++read 2048/2048 bytes at offset 4295194624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295198720 ++read 2048/2048 bytes at offset 4295198720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295202816 ++read 2048/2048 bytes at offset 4295202816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295206912 ++read 2048/2048 bytes at offset 4295206912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295211008 ++read 2048/2048 bytes at offset 4295211008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295215104 ++read 2048/2048 bytes at offset 4295215104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295219200 ++read 2048/2048 bytes at offset 4295219200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295223296 ++read 2048/2048 bytes at offset 4295223296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295227392 ++read 2048/2048 bytes at offset 4295227392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295231488 ++read 2048/2048 bytes at offset 4295231488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295235584 ++read 2048/2048 bytes at offset 4295235584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295239680 ++read 2048/2048 bytes at offset 4295239680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295243776 ++read 2048/2048 bytes at offset 4295243776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295247872 ++read 2048/2048 bytes at offset 4295247872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295251968 ++read 2048/2048 bytes at offset 4295251968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295256064 ++read 2048/2048 bytes at offset 4295256064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295260160 ++read 2048/2048 bytes at offset 4295260160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 4295262208 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 4295262208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295266304 ++read 2048/2048 bytes at offset 4295266304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295270400 ++read 2048/2048 bytes at offset 4295270400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295274496 ++read 2048/2048 bytes at offset 4295274496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295278592 ++read 2048/2048 bytes at offset 4295278592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295282688 ++read 2048/2048 bytes at offset 4295282688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295286784 ++read 2048/2048 bytes at offset 4295286784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295290880 ++read 2048/2048 bytes at offset 4295290880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295294976 ++read 2048/2048 bytes at offset 4295294976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295299072 ++read 2048/2048 bytes at offset 4295299072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295303168 ++read 2048/2048 bytes at offset 4295303168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295307264 ++read 2048/2048 bytes at offset 4295307264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295311360 ++read 2048/2048 bytes at offset 4295311360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295315456 ++read 2048/2048 bytes at offset 4295315456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295319552 ++read 2048/2048 bytes at offset 4295319552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295323648 ++read 2048/2048 bytes at offset 4295323648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295327744 ++read 2048/2048 bytes at offset 4295327744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295331840 ++read 2048/2048 bytes at offset 4295331840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295335936 ++read 2048/2048 bytes at offset 4295335936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295340032 ++read 2048/2048 bytes at offset 4295340032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295344128 ++read 2048/2048 bytes at offset 4295344128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295348224 ++read 2048/2048 bytes at offset 4295348224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295352320 ++read 2048/2048 bytes at offset 4295352320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295356416 ++read 2048/2048 bytes at offset 4295356416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295360512 ++read 2048/2048 bytes at offset 4295360512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295364608 ++read 2048/2048 bytes at offset 4295364608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295368704 ++read 2048/2048 bytes at offset 4295368704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295372800 ++read 2048/2048 bytes at offset 4295372800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295376896 ++read 2048/2048 bytes at offset 4295376896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295380992 ++read 2048/2048 bytes at offset 4295380992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295385088 ++read 2048/2048 bytes at offset 4295385088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295389184 ++read 2048/2048 bytes at offset 4295389184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295393280 ++read 2048/2048 bytes at offset 4295393280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295397376 ++read 2048/2048 bytes at offset 4295397376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295401472 ++read 2048/2048 bytes at offset 4295401472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295405568 ++read 2048/2048 bytes at offset 4295405568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 4295410688 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 4295410688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295414784 ++read 2048/2048 bytes at offset 4295414784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295418880 ++read 2048/2048 bytes at offset 4295418880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295422976 ++read 2048/2048 bytes at offset 4295422976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295427072 ++read 2048/2048 bytes at offset 4295427072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295431168 ++read 2048/2048 bytes at offset 4295431168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295435264 ++read 2048/2048 bytes at offset 4295435264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295439360 ++read 2048/2048 bytes at offset 4295439360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295443456 ++read 2048/2048 bytes at offset 4295443456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295447552 ++read 2048/2048 bytes at offset 4295447552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295451648 ++read 2048/2048 bytes at offset 4295451648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295455744 ++read 2048/2048 bytes at offset 4295455744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295459840 ++read 2048/2048 bytes at offset 4295459840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295463936 ++read 2048/2048 bytes at offset 4295463936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295468032 ++read 2048/2048 bytes at offset 4295468032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295472128 ++read 2048/2048 bytes at offset 4295472128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295476224 ++read 2048/2048 bytes at offset 4295476224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295480320 ++read 2048/2048 bytes at offset 4295480320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295484416 ++read 2048/2048 bytes at offset 4295484416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295488512 ++read 2048/2048 bytes at offset 4295488512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295492608 ++read 2048/2048 bytes at offset 4295492608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295496704 ++read 2048/2048 bytes at offset 4295496704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295500800 ++read 2048/2048 bytes at offset 4295500800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295504896 ++read 2048/2048 bytes at offset 4295504896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295508992 ++read 2048/2048 bytes at offset 4295508992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295513088 ++read 2048/2048 bytes at offset 4295513088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295517184 ++read 2048/2048 bytes at offset 4295517184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295521280 ++read 2048/2048 bytes at offset 4295521280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295525376 ++read 2048/2048 bytes at offset 4295525376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295529472 ++read 2048/2048 bytes at offset 4295529472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295533568 ++read 2048/2048 bytes at offset 4295533568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295537664 ++read 2048/2048 bytes at offset 4295537664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295541760 ++read 2048/2048 bytes at offset 4295541760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295545856 ++read 2048/2048 bytes at offset 4295545856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295549952 ++read 2048/2048 bytes at offset 4295549952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295554048 ++read 2048/2048 bytes at offset 4295554048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 4295559168 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 4295559168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295571456 ++read 8192/8192 bytes at offset 4295571456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295583744 ++read 8192/8192 bytes at offset 4295583744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295596032 ++read 8192/8192 bytes at offset 4295596032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295608320 ++read 8192/8192 bytes at offset 4295608320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295620608 ++read 8192/8192 bytes at offset 4295620608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295632896 ++read 8192/8192 bytes at offset 4295632896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295645184 ++read 8192/8192 bytes at offset 4295645184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295657472 ++read 8192/8192 bytes at offset 4295657472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299157504 ++read 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301256704 ++read 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971392 ++read 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294979584 ++read 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294983680 ++read 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294987776 ++read 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294991872 ++read 4096/4096 bytes at offset 4294991872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294995968 ++read 4096/4096 bytes at offset 4294995968 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004160 ++read 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008256 ++read 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016448 ++read 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295020544 ++read 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295024640 ++read 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295028736 ++read 4096/4096 bytes at offset 4295028736 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295032832 ++read 4096/4096 bytes at offset 4295032832 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041024 ++read 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045120 ++read 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053312 ++read 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057408 ++read 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295061504 ++read 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295065600 ++read 4096/4096 bytes at offset 4295065600 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295069696 ++read 4096/4096 bytes at offset 4295069696 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295077888 ++read 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295081984 ++read 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090176 ++read 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094272 ++read 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098368 ++read 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102464 ++read 4096/4096 bytes at offset 4295102464 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295106560 ++read 4096/4096 bytes at offset 4295106560 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 36 +-qemu-io> read 2048/2048 bytes at offset 4295116800 ++=== IO: pattern 36 ++read 2048/2048 bytes at offset 4295116800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295120896 ++read 2048/2048 bytes at offset 4295120896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295124992 ++read 2048/2048 bytes at offset 4295124992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295129088 ++read 2048/2048 bytes at offset 4295129088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133184 ++read 2048/2048 bytes at offset 4295133184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137280 ++read 2048/2048 bytes at offset 4295137280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295141376 ++read 2048/2048 bytes at offset 4295141376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295145472 ++read 2048/2048 bytes at offset 4295145472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295149568 ++read 2048/2048 bytes at offset 4295149568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295153664 ++read 2048/2048 bytes at offset 4295153664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295157760 ++read 2048/2048 bytes at offset 4295157760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295161856 ++read 2048/2048 bytes at offset 4295161856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295165952 ++read 2048/2048 bytes at offset 4295165952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295170048 ++read 2048/2048 bytes at offset 4295170048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295174144 ++read 2048/2048 bytes at offset 4295174144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295178240 ++read 2048/2048 bytes at offset 4295178240 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295182336 ++read 2048/2048 bytes at offset 4295182336 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295186432 ++read 2048/2048 bytes at offset 4295186432 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295190528 ++read 2048/2048 bytes at offset 4295190528 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295194624 ++read 2048/2048 bytes at offset 4295194624 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295198720 ++read 2048/2048 bytes at offset 4295198720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295202816 ++read 2048/2048 bytes at offset 4295202816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295206912 ++read 2048/2048 bytes at offset 4295206912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295211008 ++read 2048/2048 bytes at offset 4295211008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295215104 ++read 2048/2048 bytes at offset 4295215104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295219200 ++read 2048/2048 bytes at offset 4295219200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295223296 ++read 2048/2048 bytes at offset 4295223296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295227392 ++read 2048/2048 bytes at offset 4295227392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295231488 ++read 2048/2048 bytes at offset 4295231488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295235584 ++read 2048/2048 bytes at offset 4295235584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295239680 ++read 2048/2048 bytes at offset 4295239680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295243776 ++read 2048/2048 bytes at offset 4295243776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295247872 ++read 2048/2048 bytes at offset 4295247872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295251968 ++read 2048/2048 bytes at offset 4295251968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295256064 ++read 2048/2048 bytes at offset 4295256064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295260160 ++read 2048/2048 bytes at offset 4295260160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 2048/2048 bytes at offset 4295262208 ++=== IO: pattern 64 ++read 2048/2048 bytes at offset 4295262208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295266304 ++read 2048/2048 bytes at offset 4295266304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295270400 ++read 2048/2048 bytes at offset 4295270400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295274496 ++read 2048/2048 bytes at offset 4295274496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295278592 ++read 2048/2048 bytes at offset 4295278592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295282688 ++read 2048/2048 bytes at offset 4295282688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295286784 ++read 2048/2048 bytes at offset 4295286784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295290880 ++read 2048/2048 bytes at offset 4295290880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295294976 ++read 2048/2048 bytes at offset 4295294976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295299072 ++read 2048/2048 bytes at offset 4295299072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295303168 ++read 2048/2048 bytes at offset 4295303168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295307264 ++read 2048/2048 bytes at offset 4295307264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295311360 ++read 2048/2048 bytes at offset 4295311360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295315456 ++read 2048/2048 bytes at offset 4295315456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295319552 ++read 2048/2048 bytes at offset 4295319552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295323648 ++read 2048/2048 bytes at offset 4295323648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295327744 ++read 2048/2048 bytes at offset 4295327744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295331840 ++read 2048/2048 bytes at offset 4295331840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295335936 ++read 2048/2048 bytes at offset 4295335936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295340032 ++read 2048/2048 bytes at offset 4295340032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295344128 ++read 2048/2048 bytes at offset 4295344128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295348224 ++read 2048/2048 bytes at offset 4295348224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295352320 ++read 2048/2048 bytes at offset 4295352320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295356416 ++read 2048/2048 bytes at offset 4295356416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295360512 ++read 2048/2048 bytes at offset 4295360512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295364608 ++read 2048/2048 bytes at offset 4295364608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295368704 ++read 2048/2048 bytes at offset 4295368704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295372800 ++read 2048/2048 bytes at offset 4295372800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295376896 ++read 2048/2048 bytes at offset 4295376896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295380992 ++read 2048/2048 bytes at offset 4295380992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295385088 ++read 2048/2048 bytes at offset 4295385088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295389184 ++read 2048/2048 bytes at offset 4295389184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295393280 ++read 2048/2048 bytes at offset 4295393280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295397376 ++read 2048/2048 bytes at offset 4295397376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295401472 ++read 2048/2048 bytes at offset 4295401472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295405568 ++read 2048/2048 bytes at offset 4295405568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 98 +-qemu-io> read 2048/2048 bytes at offset 4295410688 ++=== IO: pattern 98 ++read 2048/2048 bytes at offset 4295410688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295414784 ++read 2048/2048 bytes at offset 4295414784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295418880 ++read 2048/2048 bytes at offset 4295418880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295422976 ++read 2048/2048 bytes at offset 4295422976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295427072 ++read 2048/2048 bytes at offset 4295427072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295431168 ++read 2048/2048 bytes at offset 4295431168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295435264 ++read 2048/2048 bytes at offset 4295435264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295439360 ++read 2048/2048 bytes at offset 4295439360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295443456 ++read 2048/2048 bytes at offset 4295443456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295447552 ++read 2048/2048 bytes at offset 4295447552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295451648 ++read 2048/2048 bytes at offset 4295451648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295455744 ++read 2048/2048 bytes at offset 4295455744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295459840 ++read 2048/2048 bytes at offset 4295459840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295463936 ++read 2048/2048 bytes at offset 4295463936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295468032 ++read 2048/2048 bytes at offset 4295468032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295472128 ++read 2048/2048 bytes at offset 4295472128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295476224 ++read 2048/2048 bytes at offset 4295476224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295480320 ++read 2048/2048 bytes at offset 4295480320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295484416 ++read 2048/2048 bytes at offset 4295484416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295488512 ++read 2048/2048 bytes at offset 4295488512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295492608 ++read 2048/2048 bytes at offset 4295492608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295496704 ++read 2048/2048 bytes at offset 4295496704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295500800 ++read 2048/2048 bytes at offset 4295500800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295504896 ++read 2048/2048 bytes at offset 4295504896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295508992 ++read 2048/2048 bytes at offset 4295508992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295513088 ++read 2048/2048 bytes at offset 4295513088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295517184 ++read 2048/2048 bytes at offset 4295517184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295521280 ++read 2048/2048 bytes at offset 4295521280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295525376 ++read 2048/2048 bytes at offset 4295525376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295529472 ++read 2048/2048 bytes at offset 4295529472 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295533568 ++read 2048/2048 bytes at offset 4295533568 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295537664 ++read 2048/2048 bytes at offset 4295537664 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295541760 ++read 2048/2048 bytes at offset 4295541760 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295545856 ++read 2048/2048 bytes at offset 4295545856 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295549952 ++read 2048/2048 bytes at offset 4295549952 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295554048 ++read 2048/2048 bytes at offset 4295554048 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 132 +-qemu-io> read 8192/8192 bytes at offset 4295559168 ++=== IO: pattern 132 ++read 8192/8192 bytes at offset 4295559168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295571456 ++read 8192/8192 bytes at offset 4295571456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295583744 ++read 8192/8192 bytes at offset 4295583744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295596032 ++read 8192/8192 bytes at offset 4295596032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295608320 ++read 8192/8192 bytes at offset 4295608320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295620608 ++read 8192/8192 bytes at offset 4295620608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295632896 ++read 8192/8192 bytes at offset 4295632896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295645184 ++read 8192/8192 bytes at offset 4295645184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295657472 ++read 8192/8192 bytes at offset 4295657472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299157504 ++read 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301256704 ++read 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Testing compressed image with odd offsets + + With offset 512: + === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 512 ++wrote 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4608 ++wrote 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8704 ++wrote 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12800 ++wrote 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16896 ++wrote 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20992 ++wrote 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 25088 ++wrote 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 29184 ++wrote 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 33280 ++wrote 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 37376 ++wrote 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 41472 ++wrote 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45568 ++wrote 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49664 ++wrote 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53760 ++wrote 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57856 ++wrote 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61952 ++wrote 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 66048 ++wrote 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 70144 ++wrote 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 74240 ++wrote 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 78336 ++wrote 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 82432 ++wrote 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86528 ++wrote 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90624 ++wrote 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94720 ++wrote 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98816 ++wrote 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102912 ++wrote 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 107008 ++wrote 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 111104 ++wrote 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 115200 ++wrote 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 119296 ++wrote 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 123392 ++wrote 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 127488 ++wrote 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131584 ++wrote 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135680 ++wrote 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139776 ++wrote 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143872 ++wrote 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> wrote 2048/2048 bytes at offset 150016 ++=== IO: pattern 37 ++wrote 2048/2048 bytes at offset 150016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 154112 ++wrote 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 158208 ++wrote 2048/2048 bytes at offset 158208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 162304 ++wrote 2048/2048 bytes at offset 162304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 166400 ++wrote 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 170496 ++wrote 2048/2048 bytes at offset 170496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 174592 ++wrote 2048/2048 bytes at offset 174592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 178688 ++wrote 2048/2048 bytes at offset 178688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 182784 ++wrote 2048/2048 bytes at offset 182784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 186880 ++wrote 2048/2048 bytes at offset 186880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 190976 ++wrote 2048/2048 bytes at offset 190976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 195072 ++wrote 2048/2048 bytes at offset 195072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 199168 ++wrote 2048/2048 bytes at offset 199168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 203264 ++wrote 2048/2048 bytes at offset 203264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 207360 ++wrote 2048/2048 bytes at offset 207360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 211456 ++wrote 2048/2048 bytes at offset 211456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 215552 ++wrote 2048/2048 bytes at offset 215552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 219648 ++wrote 2048/2048 bytes at offset 219648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 223744 ++wrote 2048/2048 bytes at offset 223744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 227840 ++wrote 2048/2048 bytes at offset 227840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 231936 ++wrote 2048/2048 bytes at offset 231936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 236032 ++wrote 2048/2048 bytes at offset 236032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 240128 ++wrote 2048/2048 bytes at offset 240128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 244224 ++wrote 2048/2048 bytes at offset 244224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 248320 ++wrote 2048/2048 bytes at offset 248320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 252416 ++wrote 2048/2048 bytes at offset 252416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 256512 ++wrote 2048/2048 bytes at offset 256512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 260608 ++wrote 2048/2048 bytes at offset 260608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 264704 ++wrote 2048/2048 bytes at offset 264704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 268800 ++wrote 2048/2048 bytes at offset 268800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 272896 ++wrote 2048/2048 bytes at offset 272896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 276992 ++wrote 2048/2048 bytes at offset 276992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 281088 ++wrote 2048/2048 bytes at offset 281088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 285184 ++wrote 2048/2048 bytes at offset 285184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 289280 ++wrote 2048/2048 bytes at offset 289280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 293376 ++wrote 2048/2048 bytes at offset 293376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 2048/2048 bytes at offset 295424 ++=== IO: pattern 65 ++wrote 2048/2048 bytes at offset 295424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 299520 ++wrote 2048/2048 bytes at offset 299520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 303616 ++wrote 2048/2048 bytes at offset 303616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 307712 ++wrote 2048/2048 bytes at offset 307712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 311808 ++wrote 2048/2048 bytes at offset 311808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 315904 ++wrote 2048/2048 bytes at offset 315904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 320000 ++wrote 2048/2048 bytes at offset 320000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 324096 ++wrote 2048/2048 bytes at offset 324096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 328192 ++wrote 2048/2048 bytes at offset 328192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 332288 ++wrote 2048/2048 bytes at offset 332288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 336384 ++wrote 2048/2048 bytes at offset 336384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 340480 ++wrote 2048/2048 bytes at offset 340480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 344576 ++wrote 2048/2048 bytes at offset 344576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 348672 ++wrote 2048/2048 bytes at offset 348672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 352768 ++wrote 2048/2048 bytes at offset 352768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 356864 ++wrote 2048/2048 bytes at offset 356864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 360960 ++wrote 2048/2048 bytes at offset 360960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 365056 ++wrote 2048/2048 bytes at offset 365056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 369152 ++wrote 2048/2048 bytes at offset 369152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 373248 ++wrote 2048/2048 bytes at offset 373248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 377344 ++wrote 2048/2048 bytes at offset 377344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 381440 ++wrote 2048/2048 bytes at offset 381440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 385536 ++wrote 2048/2048 bytes at offset 385536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 389632 ++wrote 2048/2048 bytes at offset 389632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 393728 ++wrote 2048/2048 bytes at offset 393728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 397824 ++wrote 2048/2048 bytes at offset 397824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 401920 ++wrote 2048/2048 bytes at offset 401920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 406016 ++wrote 2048/2048 bytes at offset 406016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 410112 ++wrote 2048/2048 bytes at offset 410112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 414208 ++wrote 2048/2048 bytes at offset 414208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 418304 ++wrote 2048/2048 bytes at offset 418304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 422400 ++wrote 2048/2048 bytes at offset 422400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 426496 ++wrote 2048/2048 bytes at offset 426496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 430592 ++wrote 2048/2048 bytes at offset 430592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 434688 ++wrote 2048/2048 bytes at offset 434688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 438784 ++wrote 2048/2048 bytes at offset 438784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> wrote 2048/2048 bytes at offset 443904 ++=== IO: pattern 99 ++wrote 2048/2048 bytes at offset 443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 448000 ++wrote 2048/2048 bytes at offset 448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 452096 ++wrote 2048/2048 bytes at offset 452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 456192 ++wrote 2048/2048 bytes at offset 456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 460288 ++wrote 2048/2048 bytes at offset 460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 464384 ++wrote 2048/2048 bytes at offset 464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 468480 ++wrote 2048/2048 bytes at offset 468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 472576 ++wrote 2048/2048 bytes at offset 472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 476672 ++wrote 2048/2048 bytes at offset 476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 480768 ++wrote 2048/2048 bytes at offset 480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 484864 ++wrote 2048/2048 bytes at offset 484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 488960 ++wrote 2048/2048 bytes at offset 488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 493056 ++wrote 2048/2048 bytes at offset 493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 497152 ++wrote 2048/2048 bytes at offset 497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 501248 ++wrote 2048/2048 bytes at offset 501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 505344 ++wrote 2048/2048 bytes at offset 505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 509440 ++wrote 2048/2048 bytes at offset 509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 513536 ++wrote 2048/2048 bytes at offset 513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 517632 ++wrote 2048/2048 bytes at offset 517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 521728 ++wrote 2048/2048 bytes at offset 521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 525824 ++wrote 2048/2048 bytes at offset 525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 529920 ++wrote 2048/2048 bytes at offset 529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 534016 ++wrote 2048/2048 bytes at offset 534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 538112 ++wrote 2048/2048 bytes at offset 538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 542208 ++wrote 2048/2048 bytes at offset 542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 546304 ++wrote 2048/2048 bytes at offset 546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 550400 ++wrote 2048/2048 bytes at offset 550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 554496 ++wrote 2048/2048 bytes at offset 554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 558592 ++wrote 2048/2048 bytes at offset 558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 562688 ++wrote 2048/2048 bytes at offset 562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 566784 ++wrote 2048/2048 bytes at offset 566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 570880 ++wrote 2048/2048 bytes at offset 570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 574976 ++wrote 2048/2048 bytes at offset 574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 579072 ++wrote 2048/2048 bytes at offset 579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 583168 ++wrote 2048/2048 bytes at offset 583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 587264 ++wrote 2048/2048 bytes at offset 587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> wrote 8192/8192 bytes at offset 592384 ++=== IO: pattern 133 ++wrote 8192/8192 bytes at offset 592384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 604672 ++wrote 8192/8192 bytes at offset 604672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 616960 ++wrote 8192/8192 bytes at offset 616960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 629248 ++wrote 8192/8192 bytes at offset 629248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 641536 ++wrote 8192/8192 bytes at offset 641536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 653824 ++wrote 8192/8192 bytes at offset 653824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 666112 ++wrote 8192/8192 bytes at offset 666112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 678400 ++wrote 8192/8192 bytes at offset 678400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 690688 ++wrote 8192/8192 bytes at offset 690688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4190208 ++wrote 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 6289408 ++wrote 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 512 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4608 ++read 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8704 ++read 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12800 ++read 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16896 ++read 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20992 ++read 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 25088 ++read 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 29184 ++read 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 33280 ++read 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 37376 ++read 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 41472 ++read 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45568 ++read 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49664 ++read 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53760 ++read 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57856 ++read 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61952 ++read 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 66048 ++read 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 70144 ++read 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 74240 ++read 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 78336 ++read 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 82432 ++read 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86528 ++read 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90624 ++read 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94720 ++read 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98816 ++read 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102912 ++read 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 107008 ++read 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 111104 ++read 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 115200 ++read 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 119296 ++read 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 123392 ++read 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 127488 ++read 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131584 ++read 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135680 ++read 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139776 ++read 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143872 ++read 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> read 2048/2048 bytes at offset 150016 ++=== IO: pattern 37 ++read 2048/2048 bytes at offset 150016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154112 ++read 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 158208 ++read 2048/2048 bytes at offset 158208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 162304 ++read 2048/2048 bytes at offset 162304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166400 ++read 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 170496 ++read 2048/2048 bytes at offset 170496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 174592 ++read 2048/2048 bytes at offset 174592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 178688 ++read 2048/2048 bytes at offset 178688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 182784 ++read 2048/2048 bytes at offset 182784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 186880 ++read 2048/2048 bytes at offset 186880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 190976 ++read 2048/2048 bytes at offset 190976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 195072 ++read 2048/2048 bytes at offset 195072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 199168 ++read 2048/2048 bytes at offset 199168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 203264 ++read 2048/2048 bytes at offset 203264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 207360 ++read 2048/2048 bytes at offset 207360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 211456 ++read 2048/2048 bytes at offset 211456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 215552 ++read 2048/2048 bytes at offset 215552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 219648 ++read 2048/2048 bytes at offset 219648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 223744 ++read 2048/2048 bytes at offset 223744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 227840 ++read 2048/2048 bytes at offset 227840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 231936 ++read 2048/2048 bytes at offset 231936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 236032 ++read 2048/2048 bytes at offset 236032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 240128 ++read 2048/2048 bytes at offset 240128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 244224 ++read 2048/2048 bytes at offset 244224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 248320 ++read 2048/2048 bytes at offset 248320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 252416 ++read 2048/2048 bytes at offset 252416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 256512 ++read 2048/2048 bytes at offset 256512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 260608 ++read 2048/2048 bytes at offset 260608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 264704 ++read 2048/2048 bytes at offset 264704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 268800 ++read 2048/2048 bytes at offset 268800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 272896 ++read 2048/2048 bytes at offset 272896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 276992 ++read 2048/2048 bytes at offset 276992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 281088 ++read 2048/2048 bytes at offset 281088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 285184 ++read 2048/2048 bytes at offset 285184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 289280 ++read 2048/2048 bytes at offset 289280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 293376 ++read 2048/2048 bytes at offset 293376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 2048/2048 bytes at offset 295424 ++=== IO: pattern 65 ++read 2048/2048 bytes at offset 295424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 299520 ++read 2048/2048 bytes at offset 299520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 303616 ++read 2048/2048 bytes at offset 303616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 307712 ++read 2048/2048 bytes at offset 307712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 311808 ++read 2048/2048 bytes at offset 311808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 315904 ++read 2048/2048 bytes at offset 315904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 320000 ++read 2048/2048 bytes at offset 320000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 324096 ++read 2048/2048 bytes at offset 324096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 328192 ++read 2048/2048 bytes at offset 328192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 332288 ++read 2048/2048 bytes at offset 332288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 336384 ++read 2048/2048 bytes at offset 336384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 340480 ++read 2048/2048 bytes at offset 340480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 344576 ++read 2048/2048 bytes at offset 344576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 348672 ++read 2048/2048 bytes at offset 348672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 352768 ++read 2048/2048 bytes at offset 352768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 356864 ++read 2048/2048 bytes at offset 356864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 360960 ++read 2048/2048 bytes at offset 360960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 365056 ++read 2048/2048 bytes at offset 365056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 369152 ++read 2048/2048 bytes at offset 369152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 373248 ++read 2048/2048 bytes at offset 373248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 377344 ++read 2048/2048 bytes at offset 377344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 381440 ++read 2048/2048 bytes at offset 381440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 385536 ++read 2048/2048 bytes at offset 385536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 389632 ++read 2048/2048 bytes at offset 389632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 393728 ++read 2048/2048 bytes at offset 393728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 397824 ++read 2048/2048 bytes at offset 397824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 401920 ++read 2048/2048 bytes at offset 401920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 406016 ++read 2048/2048 bytes at offset 406016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 410112 ++read 2048/2048 bytes at offset 410112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 414208 ++read 2048/2048 bytes at offset 414208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 418304 ++read 2048/2048 bytes at offset 418304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 422400 ++read 2048/2048 bytes at offset 422400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 426496 ++read 2048/2048 bytes at offset 426496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 430592 ++read 2048/2048 bytes at offset 430592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 434688 ++read 2048/2048 bytes at offset 434688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 438784 ++read 2048/2048 bytes at offset 438784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> read 2048/2048 bytes at offset 443904 ++=== IO: pattern 99 ++read 2048/2048 bytes at offset 443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 448000 ++read 2048/2048 bytes at offset 448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 452096 ++read 2048/2048 bytes at offset 452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 456192 ++read 2048/2048 bytes at offset 456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 460288 ++read 2048/2048 bytes at offset 460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 464384 ++read 2048/2048 bytes at offset 464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 468480 ++read 2048/2048 bytes at offset 468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 472576 ++read 2048/2048 bytes at offset 472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 476672 ++read 2048/2048 bytes at offset 476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 480768 ++read 2048/2048 bytes at offset 480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 484864 ++read 2048/2048 bytes at offset 484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 488960 ++read 2048/2048 bytes at offset 488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 493056 ++read 2048/2048 bytes at offset 493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 497152 ++read 2048/2048 bytes at offset 497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 501248 ++read 2048/2048 bytes at offset 501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 505344 ++read 2048/2048 bytes at offset 505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 509440 ++read 2048/2048 bytes at offset 509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 513536 ++read 2048/2048 bytes at offset 513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 517632 ++read 2048/2048 bytes at offset 517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 521728 ++read 2048/2048 bytes at offset 521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 525824 ++read 2048/2048 bytes at offset 525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 529920 ++read 2048/2048 bytes at offset 529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 534016 ++read 2048/2048 bytes at offset 534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 538112 ++read 2048/2048 bytes at offset 538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 542208 ++read 2048/2048 bytes at offset 542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 546304 ++read 2048/2048 bytes at offset 546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 550400 ++read 2048/2048 bytes at offset 550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 554496 ++read 2048/2048 bytes at offset 554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 558592 ++read 2048/2048 bytes at offset 558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 562688 ++read 2048/2048 bytes at offset 562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 566784 ++read 2048/2048 bytes at offset 566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 570880 ++read 2048/2048 bytes at offset 570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 574976 ++read 2048/2048 bytes at offset 574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 579072 ++read 2048/2048 bytes at offset 579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 583168 ++read 2048/2048 bytes at offset 583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 587264 ++read 2048/2048 bytes at offset 587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> read 8192/8192 bytes at offset 592384 ++=== IO: pattern 133 ++read 8192/8192 bytes at offset 592384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 604672 ++read 8192/8192 bytes at offset 604672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 616960 ++read 8192/8192 bytes at offset 616960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 629248 ++read 8192/8192 bytes at offset 629248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 641536 ++read 8192/8192 bytes at offset 641536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 653824 ++read 8192/8192 bytes at offset 653824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 666112 ++read 8192/8192 bytes at offset 666112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 678400 ++read 8192/8192 bytes at offset 678400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 690688 ++read 8192/8192 bytes at offset 690688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4190208 ++read 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6289408 ++read 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 512 ++=== IO: pattern 1 ++wrote 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4608 ++wrote 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 8704 ++wrote 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 12800 ++wrote 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 16896 ++wrote 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 20992 ++wrote 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 25088 ++wrote 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 29184 ++wrote 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 33280 ++wrote 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 37376 ++wrote 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 41472 ++wrote 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 45568 ++wrote 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49664 ++wrote 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53760 ++wrote 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57856 ++wrote 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 61952 ++wrote 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 66048 ++wrote 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 70144 ++wrote 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 74240 ++wrote 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 78336 ++wrote 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 82432 ++wrote 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86528 ++wrote 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90624 ++wrote 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94720 ++wrote 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 98816 ++wrote 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 102912 ++wrote 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 107008 ++wrote 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 111104 ++wrote 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 115200 ++wrote 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 119296 ++wrote 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 123392 ++wrote 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 127488 ++wrote 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131584 ++wrote 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 135680 ++wrote 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 139776 ++wrote 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143872 ++wrote 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> wrote 2048/2048 bytes at offset 150016 ++=== IO: pattern 37 ++wrote 2048/2048 bytes at offset 150016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 154112 ++wrote 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 158208 ++wrote 2048/2048 bytes at offset 158208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 162304 ++wrote 2048/2048 bytes at offset 162304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 166400 ++wrote 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 170496 ++wrote 2048/2048 bytes at offset 170496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 174592 ++wrote 2048/2048 bytes at offset 174592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 178688 ++wrote 2048/2048 bytes at offset 178688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 182784 ++wrote 2048/2048 bytes at offset 182784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 186880 ++wrote 2048/2048 bytes at offset 186880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 190976 ++wrote 2048/2048 bytes at offset 190976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 195072 ++wrote 2048/2048 bytes at offset 195072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 199168 ++wrote 2048/2048 bytes at offset 199168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 203264 ++wrote 2048/2048 bytes at offset 203264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 207360 ++wrote 2048/2048 bytes at offset 207360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 211456 ++wrote 2048/2048 bytes at offset 211456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 215552 ++wrote 2048/2048 bytes at offset 215552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 219648 ++wrote 2048/2048 bytes at offset 219648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 223744 ++wrote 2048/2048 bytes at offset 223744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 227840 ++wrote 2048/2048 bytes at offset 227840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 231936 ++wrote 2048/2048 bytes at offset 231936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 236032 ++wrote 2048/2048 bytes at offset 236032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 240128 ++wrote 2048/2048 bytes at offset 240128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 244224 ++wrote 2048/2048 bytes at offset 244224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 248320 ++wrote 2048/2048 bytes at offset 248320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 252416 ++wrote 2048/2048 bytes at offset 252416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 256512 ++wrote 2048/2048 bytes at offset 256512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 260608 ++wrote 2048/2048 bytes at offset 260608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 264704 ++wrote 2048/2048 bytes at offset 264704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 268800 ++wrote 2048/2048 bytes at offset 268800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 272896 ++wrote 2048/2048 bytes at offset 272896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 276992 ++wrote 2048/2048 bytes at offset 276992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 281088 ++wrote 2048/2048 bytes at offset 281088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 285184 ++wrote 2048/2048 bytes at offset 285184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 289280 ++wrote 2048/2048 bytes at offset 289280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 293376 ++wrote 2048/2048 bytes at offset 293376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 2048/2048 bytes at offset 295424 ++=== IO: pattern 65 ++wrote 2048/2048 bytes at offset 295424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 299520 ++wrote 2048/2048 bytes at offset 299520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 303616 ++wrote 2048/2048 bytes at offset 303616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 307712 ++wrote 2048/2048 bytes at offset 307712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 311808 ++wrote 2048/2048 bytes at offset 311808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 315904 ++wrote 2048/2048 bytes at offset 315904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 320000 ++wrote 2048/2048 bytes at offset 320000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 324096 ++wrote 2048/2048 bytes at offset 324096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 328192 ++wrote 2048/2048 bytes at offset 328192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 332288 ++wrote 2048/2048 bytes at offset 332288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 336384 ++wrote 2048/2048 bytes at offset 336384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 340480 ++wrote 2048/2048 bytes at offset 340480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 344576 ++wrote 2048/2048 bytes at offset 344576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 348672 ++wrote 2048/2048 bytes at offset 348672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 352768 ++wrote 2048/2048 bytes at offset 352768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 356864 ++wrote 2048/2048 bytes at offset 356864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 360960 ++wrote 2048/2048 bytes at offset 360960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 365056 ++wrote 2048/2048 bytes at offset 365056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 369152 ++wrote 2048/2048 bytes at offset 369152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 373248 ++wrote 2048/2048 bytes at offset 373248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 377344 ++wrote 2048/2048 bytes at offset 377344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 381440 ++wrote 2048/2048 bytes at offset 381440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 385536 ++wrote 2048/2048 bytes at offset 385536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 389632 ++wrote 2048/2048 bytes at offset 389632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 393728 ++wrote 2048/2048 bytes at offset 393728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 397824 ++wrote 2048/2048 bytes at offset 397824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 401920 ++wrote 2048/2048 bytes at offset 401920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 406016 ++wrote 2048/2048 bytes at offset 406016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 410112 ++wrote 2048/2048 bytes at offset 410112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 414208 ++wrote 2048/2048 bytes at offset 414208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 418304 ++wrote 2048/2048 bytes at offset 418304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 422400 ++wrote 2048/2048 bytes at offset 422400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 426496 ++wrote 2048/2048 bytes at offset 426496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 430592 ++wrote 2048/2048 bytes at offset 430592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 434688 ++wrote 2048/2048 bytes at offset 434688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 438784 ++wrote 2048/2048 bytes at offset 438784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> wrote 2048/2048 bytes at offset 443904 ++=== IO: pattern 99 ++wrote 2048/2048 bytes at offset 443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 448000 ++wrote 2048/2048 bytes at offset 448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 452096 ++wrote 2048/2048 bytes at offset 452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 456192 ++wrote 2048/2048 bytes at offset 456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 460288 ++wrote 2048/2048 bytes at offset 460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 464384 ++wrote 2048/2048 bytes at offset 464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 468480 ++wrote 2048/2048 bytes at offset 468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 472576 ++wrote 2048/2048 bytes at offset 472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 476672 ++wrote 2048/2048 bytes at offset 476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 480768 ++wrote 2048/2048 bytes at offset 480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 484864 ++wrote 2048/2048 bytes at offset 484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 488960 ++wrote 2048/2048 bytes at offset 488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 493056 ++wrote 2048/2048 bytes at offset 493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 497152 ++wrote 2048/2048 bytes at offset 497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 501248 ++wrote 2048/2048 bytes at offset 501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 505344 ++wrote 2048/2048 bytes at offset 505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 509440 ++wrote 2048/2048 bytes at offset 509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 513536 ++wrote 2048/2048 bytes at offset 513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 517632 ++wrote 2048/2048 bytes at offset 517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 521728 ++wrote 2048/2048 bytes at offset 521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 525824 ++wrote 2048/2048 bytes at offset 525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 529920 ++wrote 2048/2048 bytes at offset 529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 534016 ++wrote 2048/2048 bytes at offset 534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 538112 ++wrote 2048/2048 bytes at offset 538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 542208 ++wrote 2048/2048 bytes at offset 542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 546304 ++wrote 2048/2048 bytes at offset 546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 550400 ++wrote 2048/2048 bytes at offset 550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 554496 ++wrote 2048/2048 bytes at offset 554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 558592 ++wrote 2048/2048 bytes at offset 558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 562688 ++wrote 2048/2048 bytes at offset 562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 566784 ++wrote 2048/2048 bytes at offset 566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 570880 ++wrote 2048/2048 bytes at offset 570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 574976 ++wrote 2048/2048 bytes at offset 574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 579072 ++wrote 2048/2048 bytes at offset 579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 583168 ++wrote 2048/2048 bytes at offset 583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 587264 ++wrote 2048/2048 bytes at offset 587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> wrote 8192/8192 bytes at offset 592384 ++=== IO: pattern 133 ++wrote 8192/8192 bytes at offset 592384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 604672 ++wrote 8192/8192 bytes at offset 604672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 616960 ++wrote 8192/8192 bytes at offset 616960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 629248 ++wrote 8192/8192 bytes at offset 629248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 641536 ++wrote 8192/8192 bytes at offset 641536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 653824 ++wrote 8192/8192 bytes at offset 653824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 666112 ++wrote 8192/8192 bytes at offset 666112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 678400 ++wrote 8192/8192 bytes at offset 678400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 690688 ++wrote 8192/8192 bytes at offset 690688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4190208 ++wrote 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 6289408 ++wrote 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 512 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 512 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4608 ++read 4096/4096 bytes at offset 4608 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 8704 ++read 4096/4096 bytes at offset 8704 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 12800 ++read 4096/4096 bytes at offset 12800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 16896 ++read 4096/4096 bytes at offset 16896 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 20992 ++read 4096/4096 bytes at offset 20992 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 25088 ++read 4096/4096 bytes at offset 25088 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 29184 ++read 4096/4096 bytes at offset 29184 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 33280 ++read 4096/4096 bytes at offset 33280 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 37376 ++read 4096/4096 bytes at offset 37376 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 41472 ++read 4096/4096 bytes at offset 41472 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45568 ++read 4096/4096 bytes at offset 45568 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 49664 ++read 4096/4096 bytes at offset 49664 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 53760 ++read 4096/4096 bytes at offset 53760 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 57856 ++read 4096/4096 bytes at offset 57856 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 61952 ++read 4096/4096 bytes at offset 61952 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 66048 ++read 4096/4096 bytes at offset 66048 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 70144 ++read 4096/4096 bytes at offset 70144 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 74240 ++read 4096/4096 bytes at offset 74240 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 78336 ++read 4096/4096 bytes at offset 78336 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 82432 ++read 4096/4096 bytes at offset 82432 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 86528 ++read 4096/4096 bytes at offset 86528 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 90624 ++read 4096/4096 bytes at offset 90624 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 94720 ++read 4096/4096 bytes at offset 94720 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 98816 ++read 4096/4096 bytes at offset 98816 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 102912 ++read 4096/4096 bytes at offset 102912 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 107008 ++read 4096/4096 bytes at offset 107008 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 111104 ++read 4096/4096 bytes at offset 111104 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 115200 ++read 4096/4096 bytes at offset 115200 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 119296 ++read 4096/4096 bytes at offset 119296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 123392 ++read 4096/4096 bytes at offset 123392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 127488 ++read 4096/4096 bytes at offset 127488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 131584 ++read 4096/4096 bytes at offset 131584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 135680 ++read 4096/4096 bytes at offset 135680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 139776 ++read 4096/4096 bytes at offset 139776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143872 ++read 4096/4096 bytes at offset 143872 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> read 2048/2048 bytes at offset 150016 ++=== IO: pattern 37 ++read 2048/2048 bytes at offset 150016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 154112 ++read 2048/2048 bytes at offset 154112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 158208 ++read 2048/2048 bytes at offset 158208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 162304 ++read 2048/2048 bytes at offset 162304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 166400 ++read 2048/2048 bytes at offset 166400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 170496 ++read 2048/2048 bytes at offset 170496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 174592 ++read 2048/2048 bytes at offset 174592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 178688 ++read 2048/2048 bytes at offset 178688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 182784 ++read 2048/2048 bytes at offset 182784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 186880 ++read 2048/2048 bytes at offset 186880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 190976 ++read 2048/2048 bytes at offset 190976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 195072 ++read 2048/2048 bytes at offset 195072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 199168 ++read 2048/2048 bytes at offset 199168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 203264 ++read 2048/2048 bytes at offset 203264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 207360 ++read 2048/2048 bytes at offset 207360 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 211456 ++read 2048/2048 bytes at offset 211456 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 215552 ++read 2048/2048 bytes at offset 215552 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 219648 ++read 2048/2048 bytes at offset 219648 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 223744 ++read 2048/2048 bytes at offset 223744 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 227840 ++read 2048/2048 bytes at offset 227840 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 231936 ++read 2048/2048 bytes at offset 231936 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 236032 ++read 2048/2048 bytes at offset 236032 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 240128 ++read 2048/2048 bytes at offset 240128 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 244224 ++read 2048/2048 bytes at offset 244224 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 248320 ++read 2048/2048 bytes at offset 248320 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 252416 ++read 2048/2048 bytes at offset 252416 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 256512 ++read 2048/2048 bytes at offset 256512 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 260608 ++read 2048/2048 bytes at offset 260608 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 264704 ++read 2048/2048 bytes at offset 264704 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 268800 ++read 2048/2048 bytes at offset 268800 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 272896 ++read 2048/2048 bytes at offset 272896 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 276992 ++read 2048/2048 bytes at offset 276992 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 281088 ++read 2048/2048 bytes at offset 281088 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 285184 ++read 2048/2048 bytes at offset 285184 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 289280 ++read 2048/2048 bytes at offset 289280 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 293376 ++read 2048/2048 bytes at offset 293376 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 2048/2048 bytes at offset 295424 ++=== IO: pattern 65 ++read 2048/2048 bytes at offset 295424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 299520 ++read 2048/2048 bytes at offset 299520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 303616 ++read 2048/2048 bytes at offset 303616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 307712 ++read 2048/2048 bytes at offset 307712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 311808 ++read 2048/2048 bytes at offset 311808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 315904 ++read 2048/2048 bytes at offset 315904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 320000 ++read 2048/2048 bytes at offset 320000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 324096 ++read 2048/2048 bytes at offset 324096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 328192 ++read 2048/2048 bytes at offset 328192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 332288 ++read 2048/2048 bytes at offset 332288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 336384 ++read 2048/2048 bytes at offset 336384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 340480 ++read 2048/2048 bytes at offset 340480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 344576 ++read 2048/2048 bytes at offset 344576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 348672 ++read 2048/2048 bytes at offset 348672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 352768 ++read 2048/2048 bytes at offset 352768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 356864 ++read 2048/2048 bytes at offset 356864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 360960 ++read 2048/2048 bytes at offset 360960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 365056 ++read 2048/2048 bytes at offset 365056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 369152 ++read 2048/2048 bytes at offset 369152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 373248 ++read 2048/2048 bytes at offset 373248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 377344 ++read 2048/2048 bytes at offset 377344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 381440 ++read 2048/2048 bytes at offset 381440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 385536 ++read 2048/2048 bytes at offset 385536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 389632 ++read 2048/2048 bytes at offset 389632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 393728 ++read 2048/2048 bytes at offset 393728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 397824 ++read 2048/2048 bytes at offset 397824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 401920 ++read 2048/2048 bytes at offset 401920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 406016 ++read 2048/2048 bytes at offset 406016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 410112 ++read 2048/2048 bytes at offset 410112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 414208 ++read 2048/2048 bytes at offset 414208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 418304 ++read 2048/2048 bytes at offset 418304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 422400 ++read 2048/2048 bytes at offset 422400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 426496 ++read 2048/2048 bytes at offset 426496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 430592 ++read 2048/2048 bytes at offset 430592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 434688 ++read 2048/2048 bytes at offset 434688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 438784 ++read 2048/2048 bytes at offset 438784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> read 2048/2048 bytes at offset 443904 ++=== IO: pattern 99 ++read 2048/2048 bytes at offset 443904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 448000 ++read 2048/2048 bytes at offset 448000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 452096 ++read 2048/2048 bytes at offset 452096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 456192 ++read 2048/2048 bytes at offset 456192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 460288 ++read 2048/2048 bytes at offset 460288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 464384 ++read 2048/2048 bytes at offset 464384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 468480 ++read 2048/2048 bytes at offset 468480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 472576 ++read 2048/2048 bytes at offset 472576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 476672 ++read 2048/2048 bytes at offset 476672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 480768 ++read 2048/2048 bytes at offset 480768 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 484864 ++read 2048/2048 bytes at offset 484864 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 488960 ++read 2048/2048 bytes at offset 488960 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 493056 ++read 2048/2048 bytes at offset 493056 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 497152 ++read 2048/2048 bytes at offset 497152 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 501248 ++read 2048/2048 bytes at offset 501248 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 505344 ++read 2048/2048 bytes at offset 505344 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 509440 ++read 2048/2048 bytes at offset 509440 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 513536 ++read 2048/2048 bytes at offset 513536 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 517632 ++read 2048/2048 bytes at offset 517632 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 521728 ++read 2048/2048 bytes at offset 521728 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 525824 ++read 2048/2048 bytes at offset 525824 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 529920 ++read 2048/2048 bytes at offset 529920 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 534016 ++read 2048/2048 bytes at offset 534016 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 538112 ++read 2048/2048 bytes at offset 538112 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 542208 ++read 2048/2048 bytes at offset 542208 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 546304 ++read 2048/2048 bytes at offset 546304 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 550400 ++read 2048/2048 bytes at offset 550400 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 554496 ++read 2048/2048 bytes at offset 554496 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 558592 ++read 2048/2048 bytes at offset 558592 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 562688 ++read 2048/2048 bytes at offset 562688 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 566784 ++read 2048/2048 bytes at offset 566784 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 570880 ++read 2048/2048 bytes at offset 570880 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 574976 ++read 2048/2048 bytes at offset 574976 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 579072 ++read 2048/2048 bytes at offset 579072 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 583168 ++read 2048/2048 bytes at offset 583168 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 587264 ++read 2048/2048 bytes at offset 587264 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> read 8192/8192 bytes at offset 592384 ++=== IO: pattern 133 ++read 8192/8192 bytes at offset 592384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 604672 ++read 8192/8192 bytes at offset 604672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 616960 ++read 8192/8192 bytes at offset 616960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 629248 ++read 8192/8192 bytes at offset 629248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 641536 ++read 8192/8192 bytes at offset 641536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 653824 ++read 8192/8192 bytes at offset 653824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 666112 ++read 8192/8192 bytes at offset 666112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 678400 ++read 8192/8192 bytes at offset 678400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 690688 ++read 8192/8192 bytes at offset 690688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 2091008 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 2091008 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4190208 ++read 12288/12288 bytes at offset 4190208 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 6289408 ++read 12288/12288 bytes at offset 6289408 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967808: + === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 4294967808 ++wrote 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971904 ++wrote 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294976000 ++wrote 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294980096 ++wrote 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294984192 ++wrote 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294988288 ++wrote 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294992384 ++wrote 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294996480 ++wrote 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000576 ++wrote 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004672 ++wrote 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008768 ++wrote 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012864 ++wrote 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016960 ++wrote 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295021056 ++wrote 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295025152 ++wrote 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295029248 ++wrote 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295033344 ++wrote 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295037440 ++wrote 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041536 ++wrote 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045632 ++wrote 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049728 ++wrote 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053824 ++wrote 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057920 ++wrote 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295062016 ++wrote 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295066112 ++wrote 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295070208 ++wrote 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295074304 ++wrote 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295078400 ++wrote 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295082496 ++wrote 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086592 ++wrote 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090688 ++wrote 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094784 ++wrote 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098880 ++wrote 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102976 ++wrote 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295107072 ++wrote 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295111168 ++wrote 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> wrote 2048/2048 bytes at offset 4295117312 ++=== IO: pattern 37 ++wrote 2048/2048 bytes at offset 4295117312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295121408 ++wrote 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295125504 ++wrote 2048/2048 bytes at offset 4295125504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295129600 ++wrote 2048/2048 bytes at offset 4295129600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295133696 ++wrote 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295137792 ++wrote 2048/2048 bytes at offset 4295137792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295141888 ++wrote 2048/2048 bytes at offset 4295141888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295145984 ++wrote 2048/2048 bytes at offset 4295145984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295150080 ++wrote 2048/2048 bytes at offset 4295150080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295154176 ++wrote 2048/2048 bytes at offset 4295154176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295158272 ++wrote 2048/2048 bytes at offset 4295158272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295162368 ++wrote 2048/2048 bytes at offset 4295162368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295166464 ++wrote 2048/2048 bytes at offset 4295166464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295170560 ++wrote 2048/2048 bytes at offset 4295170560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295174656 ++wrote 2048/2048 bytes at offset 4295174656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295178752 ++wrote 2048/2048 bytes at offset 4295178752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295182848 ++wrote 2048/2048 bytes at offset 4295182848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295186944 ++wrote 2048/2048 bytes at offset 4295186944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295191040 ++wrote 2048/2048 bytes at offset 4295191040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295195136 ++wrote 2048/2048 bytes at offset 4295195136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295199232 ++wrote 2048/2048 bytes at offset 4295199232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295203328 ++wrote 2048/2048 bytes at offset 4295203328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295207424 ++wrote 2048/2048 bytes at offset 4295207424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295211520 ++wrote 2048/2048 bytes at offset 4295211520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295215616 ++wrote 2048/2048 bytes at offset 4295215616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295219712 ++wrote 2048/2048 bytes at offset 4295219712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295223808 ++wrote 2048/2048 bytes at offset 4295223808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295227904 ++wrote 2048/2048 bytes at offset 4295227904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295232000 ++wrote 2048/2048 bytes at offset 4295232000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295236096 ++wrote 2048/2048 bytes at offset 4295236096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295240192 ++wrote 2048/2048 bytes at offset 4295240192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295244288 ++wrote 2048/2048 bytes at offset 4295244288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295248384 ++wrote 2048/2048 bytes at offset 4295248384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295252480 ++wrote 2048/2048 bytes at offset 4295252480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295256576 ++wrote 2048/2048 bytes at offset 4295256576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295260672 ++wrote 2048/2048 bytes at offset 4295260672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 2048/2048 bytes at offset 4295262720 ++=== IO: pattern 65 ++wrote 2048/2048 bytes at offset 4295262720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295266816 ++wrote 2048/2048 bytes at offset 4295266816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295270912 ++wrote 2048/2048 bytes at offset 4295270912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295275008 ++wrote 2048/2048 bytes at offset 4295275008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295279104 ++wrote 2048/2048 bytes at offset 4295279104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295283200 ++wrote 2048/2048 bytes at offset 4295283200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295287296 ++wrote 2048/2048 bytes at offset 4295287296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295291392 ++wrote 2048/2048 bytes at offset 4295291392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295295488 ++wrote 2048/2048 bytes at offset 4295295488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295299584 ++wrote 2048/2048 bytes at offset 4295299584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295303680 ++wrote 2048/2048 bytes at offset 4295303680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295307776 ++wrote 2048/2048 bytes at offset 4295307776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295311872 ++wrote 2048/2048 bytes at offset 4295311872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295315968 ++wrote 2048/2048 bytes at offset 4295315968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295320064 ++wrote 2048/2048 bytes at offset 4295320064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295324160 ++wrote 2048/2048 bytes at offset 4295324160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295328256 ++wrote 2048/2048 bytes at offset 4295328256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295332352 ++wrote 2048/2048 bytes at offset 4295332352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295336448 ++wrote 2048/2048 bytes at offset 4295336448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295340544 ++wrote 2048/2048 bytes at offset 4295340544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295344640 ++wrote 2048/2048 bytes at offset 4295344640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295348736 ++wrote 2048/2048 bytes at offset 4295348736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295352832 ++wrote 2048/2048 bytes at offset 4295352832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295356928 ++wrote 2048/2048 bytes at offset 4295356928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295361024 ++wrote 2048/2048 bytes at offset 4295361024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295365120 ++wrote 2048/2048 bytes at offset 4295365120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295369216 ++wrote 2048/2048 bytes at offset 4295369216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295373312 ++wrote 2048/2048 bytes at offset 4295373312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295377408 ++wrote 2048/2048 bytes at offset 4295377408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295381504 ++wrote 2048/2048 bytes at offset 4295381504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295385600 ++wrote 2048/2048 bytes at offset 4295385600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295389696 ++wrote 2048/2048 bytes at offset 4295389696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295393792 ++wrote 2048/2048 bytes at offset 4295393792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295397888 ++wrote 2048/2048 bytes at offset 4295397888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295401984 ++wrote 2048/2048 bytes at offset 4295401984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295406080 ++wrote 2048/2048 bytes at offset 4295406080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> wrote 2048/2048 bytes at offset 4295411200 ++=== IO: pattern 99 ++wrote 2048/2048 bytes at offset 4295411200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295415296 ++wrote 2048/2048 bytes at offset 4295415296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295419392 ++wrote 2048/2048 bytes at offset 4295419392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295423488 ++wrote 2048/2048 bytes at offset 4295423488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295427584 ++wrote 2048/2048 bytes at offset 4295427584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295431680 ++wrote 2048/2048 bytes at offset 4295431680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295435776 ++wrote 2048/2048 bytes at offset 4295435776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295439872 ++wrote 2048/2048 bytes at offset 4295439872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295443968 ++wrote 2048/2048 bytes at offset 4295443968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295448064 ++wrote 2048/2048 bytes at offset 4295448064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295452160 ++wrote 2048/2048 bytes at offset 4295452160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295456256 ++wrote 2048/2048 bytes at offset 4295456256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295460352 ++wrote 2048/2048 bytes at offset 4295460352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295464448 ++wrote 2048/2048 bytes at offset 4295464448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295468544 ++wrote 2048/2048 bytes at offset 4295468544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295472640 ++wrote 2048/2048 bytes at offset 4295472640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295476736 ++wrote 2048/2048 bytes at offset 4295476736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295480832 ++wrote 2048/2048 bytes at offset 4295480832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295484928 ++wrote 2048/2048 bytes at offset 4295484928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295489024 ++wrote 2048/2048 bytes at offset 4295489024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295493120 ++wrote 2048/2048 bytes at offset 4295493120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295497216 ++wrote 2048/2048 bytes at offset 4295497216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295501312 ++wrote 2048/2048 bytes at offset 4295501312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295505408 ++wrote 2048/2048 bytes at offset 4295505408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295509504 ++wrote 2048/2048 bytes at offset 4295509504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295513600 ++wrote 2048/2048 bytes at offset 4295513600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295517696 ++wrote 2048/2048 bytes at offset 4295517696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295521792 ++wrote 2048/2048 bytes at offset 4295521792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295525888 ++wrote 2048/2048 bytes at offset 4295525888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295529984 ++wrote 2048/2048 bytes at offset 4295529984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295534080 ++wrote 2048/2048 bytes at offset 4295534080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295538176 ++wrote 2048/2048 bytes at offset 4295538176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295542272 ++wrote 2048/2048 bytes at offset 4295542272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295546368 ++wrote 2048/2048 bytes at offset 4295546368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295550464 ++wrote 2048/2048 bytes at offset 4295550464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295554560 ++wrote 2048/2048 bytes at offset 4295554560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> wrote 8192/8192 bytes at offset 4295559680 ++=== IO: pattern 133 ++wrote 8192/8192 bytes at offset 4295559680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295571968 ++wrote 8192/8192 bytes at offset 4295571968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295584256 ++wrote 8192/8192 bytes at offset 4295584256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295596544 ++wrote 8192/8192 bytes at offset 4295596544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295608832 ++wrote 8192/8192 bytes at offset 4295608832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295621120 ++wrote 8192/8192 bytes at offset 4295621120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295633408 ++wrote 8192/8192 bytes at offset 4295633408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295645696 ++wrote 8192/8192 bytes at offset 4295645696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295657984 ++wrote 8192/8192 bytes at offset 4295657984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4299157504 ++wrote 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4301256704 ++wrote 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971904 ++read 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294976000 ++read 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294980096 ++read 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294984192 ++read 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294988288 ++read 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294992384 ++read 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294996480 ++read 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000576 ++read 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004672 ++read 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008768 ++read 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012864 ++read 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016960 ++read 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295021056 ++read 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295025152 ++read 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295029248 ++read 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295033344 ++read 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295037440 ++read 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041536 ++read 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045632 ++read 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049728 ++read 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053824 ++read 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057920 ++read 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295062016 ++read 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295066112 ++read 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295070208 ++read 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295074304 ++read 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295078400 ++read 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295082496 ++read 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086592 ++read 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090688 ++read 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094784 ++read 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098880 ++read 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102976 ++read 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295107072 ++read 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295111168 ++read 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> read 2048/2048 bytes at offset 4295117312 ++=== IO: pattern 37 ++read 2048/2048 bytes at offset 4295117312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121408 ++read 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295125504 ++read 2048/2048 bytes at offset 4295125504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295129600 ++read 2048/2048 bytes at offset 4295129600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133696 ++read 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137792 ++read 2048/2048 bytes at offset 4295137792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295141888 ++read 2048/2048 bytes at offset 4295141888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295145984 ++read 2048/2048 bytes at offset 4295145984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295150080 ++read 2048/2048 bytes at offset 4295150080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295154176 ++read 2048/2048 bytes at offset 4295154176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295158272 ++read 2048/2048 bytes at offset 4295158272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295162368 ++read 2048/2048 bytes at offset 4295162368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295166464 ++read 2048/2048 bytes at offset 4295166464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295170560 ++read 2048/2048 bytes at offset 4295170560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295174656 ++read 2048/2048 bytes at offset 4295174656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295178752 ++read 2048/2048 bytes at offset 4295178752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295182848 ++read 2048/2048 bytes at offset 4295182848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295186944 ++read 2048/2048 bytes at offset 4295186944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295191040 ++read 2048/2048 bytes at offset 4295191040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295195136 ++read 2048/2048 bytes at offset 4295195136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295199232 ++read 2048/2048 bytes at offset 4295199232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295203328 ++read 2048/2048 bytes at offset 4295203328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295207424 ++read 2048/2048 bytes at offset 4295207424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295211520 ++read 2048/2048 bytes at offset 4295211520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295215616 ++read 2048/2048 bytes at offset 4295215616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295219712 ++read 2048/2048 bytes at offset 4295219712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295223808 ++read 2048/2048 bytes at offset 4295223808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295227904 ++read 2048/2048 bytes at offset 4295227904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295232000 ++read 2048/2048 bytes at offset 4295232000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295236096 ++read 2048/2048 bytes at offset 4295236096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295240192 ++read 2048/2048 bytes at offset 4295240192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295244288 ++read 2048/2048 bytes at offset 4295244288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295248384 ++read 2048/2048 bytes at offset 4295248384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295252480 ++read 2048/2048 bytes at offset 4295252480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295256576 ++read 2048/2048 bytes at offset 4295256576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295260672 ++read 2048/2048 bytes at offset 4295260672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 2048/2048 bytes at offset 4295262720 ++=== IO: pattern 65 ++read 2048/2048 bytes at offset 4295262720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295266816 ++read 2048/2048 bytes at offset 4295266816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295270912 ++read 2048/2048 bytes at offset 4295270912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295275008 ++read 2048/2048 bytes at offset 4295275008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295279104 ++read 2048/2048 bytes at offset 4295279104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295283200 ++read 2048/2048 bytes at offset 4295283200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295287296 ++read 2048/2048 bytes at offset 4295287296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295291392 ++read 2048/2048 bytes at offset 4295291392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295295488 ++read 2048/2048 bytes at offset 4295295488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295299584 ++read 2048/2048 bytes at offset 4295299584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295303680 ++read 2048/2048 bytes at offset 4295303680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295307776 ++read 2048/2048 bytes at offset 4295307776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295311872 ++read 2048/2048 bytes at offset 4295311872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295315968 ++read 2048/2048 bytes at offset 4295315968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295320064 ++read 2048/2048 bytes at offset 4295320064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295324160 ++read 2048/2048 bytes at offset 4295324160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295328256 ++read 2048/2048 bytes at offset 4295328256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295332352 ++read 2048/2048 bytes at offset 4295332352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295336448 ++read 2048/2048 bytes at offset 4295336448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295340544 ++read 2048/2048 bytes at offset 4295340544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295344640 ++read 2048/2048 bytes at offset 4295344640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295348736 ++read 2048/2048 bytes at offset 4295348736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295352832 ++read 2048/2048 bytes at offset 4295352832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295356928 ++read 2048/2048 bytes at offset 4295356928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295361024 ++read 2048/2048 bytes at offset 4295361024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295365120 ++read 2048/2048 bytes at offset 4295365120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295369216 ++read 2048/2048 bytes at offset 4295369216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295373312 ++read 2048/2048 bytes at offset 4295373312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295377408 ++read 2048/2048 bytes at offset 4295377408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295381504 ++read 2048/2048 bytes at offset 4295381504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295385600 ++read 2048/2048 bytes at offset 4295385600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295389696 ++read 2048/2048 bytes at offset 4295389696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295393792 ++read 2048/2048 bytes at offset 4295393792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295397888 ++read 2048/2048 bytes at offset 4295397888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295401984 ++read 2048/2048 bytes at offset 4295401984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295406080 ++read 2048/2048 bytes at offset 4295406080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> read 2048/2048 bytes at offset 4295411200 ++=== IO: pattern 99 ++read 2048/2048 bytes at offset 4295411200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295415296 ++read 2048/2048 bytes at offset 4295415296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295419392 ++read 2048/2048 bytes at offset 4295419392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295423488 ++read 2048/2048 bytes at offset 4295423488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295427584 ++read 2048/2048 bytes at offset 4295427584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295431680 ++read 2048/2048 bytes at offset 4295431680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295435776 ++read 2048/2048 bytes at offset 4295435776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295439872 ++read 2048/2048 bytes at offset 4295439872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295443968 ++read 2048/2048 bytes at offset 4295443968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295448064 ++read 2048/2048 bytes at offset 4295448064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295452160 ++read 2048/2048 bytes at offset 4295452160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295456256 ++read 2048/2048 bytes at offset 4295456256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295460352 ++read 2048/2048 bytes at offset 4295460352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295464448 ++read 2048/2048 bytes at offset 4295464448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295468544 ++read 2048/2048 bytes at offset 4295468544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295472640 ++read 2048/2048 bytes at offset 4295472640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295476736 ++read 2048/2048 bytes at offset 4295476736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295480832 ++read 2048/2048 bytes at offset 4295480832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295484928 ++read 2048/2048 bytes at offset 4295484928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295489024 ++read 2048/2048 bytes at offset 4295489024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295493120 ++read 2048/2048 bytes at offset 4295493120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295497216 ++read 2048/2048 bytes at offset 4295497216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295501312 ++read 2048/2048 bytes at offset 4295501312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295505408 ++read 2048/2048 bytes at offset 4295505408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295509504 ++read 2048/2048 bytes at offset 4295509504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295513600 ++read 2048/2048 bytes at offset 4295513600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295517696 ++read 2048/2048 bytes at offset 4295517696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295521792 ++read 2048/2048 bytes at offset 4295521792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295525888 ++read 2048/2048 bytes at offset 4295525888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295529984 ++read 2048/2048 bytes at offset 4295529984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295534080 ++read 2048/2048 bytes at offset 4295534080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295538176 ++read 2048/2048 bytes at offset 4295538176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295542272 ++read 2048/2048 bytes at offset 4295542272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295546368 ++read 2048/2048 bytes at offset 4295546368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295550464 ++read 2048/2048 bytes at offset 4295550464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295554560 ++read 2048/2048 bytes at offset 4295554560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> read 8192/8192 bytes at offset 4295559680 ++=== IO: pattern 133 ++read 8192/8192 bytes at offset 4295559680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295571968 ++read 8192/8192 bytes at offset 4295571968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295584256 ++read 8192/8192 bytes at offset 4295584256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295596544 ++read 8192/8192 bytes at offset 4295596544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295608832 ++read 8192/8192 bytes at offset 4295608832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295621120 ++read 8192/8192 bytes at offset 4295621120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295633408 ++read 8192/8192 bytes at offset 4295633408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295645696 ++read 8192/8192 bytes at offset 4295645696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295657984 ++read 8192/8192 bytes at offset 4295657984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299157504 ++read 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301256704 ++read 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 4096/4096 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294971904 ++wrote 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294976000 ++wrote 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294980096 ++wrote 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294984192 ++wrote 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294988288 ++wrote 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294992384 ++wrote 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4294996480 ++wrote 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295000576 ++wrote 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004672 ++wrote 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008768 ++wrote 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295012864 ++wrote 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016960 ++wrote 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295021056 ++wrote 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295025152 ++wrote 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295029248 ++wrote 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295033344 ++wrote 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295037440 ++wrote 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041536 ++wrote 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045632 ++wrote 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295049728 ++wrote 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053824 ++wrote 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057920 ++wrote 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295062016 ++wrote 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295066112 ++wrote 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295070208 ++wrote 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295074304 ++wrote 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295078400 ++wrote 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295082496 ++wrote 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295086592 ++wrote 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090688 ++wrote 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094784 ++wrote 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098880 ++wrote 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295102976 ++wrote 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295107072 ++wrote 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295111168 ++wrote 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> wrote 2048/2048 bytes at offset 4295117312 ++=== IO: pattern 37 ++wrote 2048/2048 bytes at offset 4295117312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295121408 ++wrote 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295125504 ++wrote 2048/2048 bytes at offset 4295125504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295129600 ++wrote 2048/2048 bytes at offset 4295129600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295133696 ++wrote 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295137792 ++wrote 2048/2048 bytes at offset 4295137792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295141888 ++wrote 2048/2048 bytes at offset 4295141888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295145984 ++wrote 2048/2048 bytes at offset 4295145984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295150080 ++wrote 2048/2048 bytes at offset 4295150080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295154176 ++wrote 2048/2048 bytes at offset 4295154176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295158272 ++wrote 2048/2048 bytes at offset 4295158272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295162368 ++wrote 2048/2048 bytes at offset 4295162368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295166464 ++wrote 2048/2048 bytes at offset 4295166464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295170560 ++wrote 2048/2048 bytes at offset 4295170560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295174656 ++wrote 2048/2048 bytes at offset 4295174656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295178752 ++wrote 2048/2048 bytes at offset 4295178752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295182848 ++wrote 2048/2048 bytes at offset 4295182848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295186944 ++wrote 2048/2048 bytes at offset 4295186944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295191040 ++wrote 2048/2048 bytes at offset 4295191040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295195136 ++wrote 2048/2048 bytes at offset 4295195136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295199232 ++wrote 2048/2048 bytes at offset 4295199232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295203328 ++wrote 2048/2048 bytes at offset 4295203328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295207424 ++wrote 2048/2048 bytes at offset 4295207424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295211520 ++wrote 2048/2048 bytes at offset 4295211520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295215616 ++wrote 2048/2048 bytes at offset 4295215616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295219712 ++wrote 2048/2048 bytes at offset 4295219712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295223808 ++wrote 2048/2048 bytes at offset 4295223808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295227904 ++wrote 2048/2048 bytes at offset 4295227904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295232000 ++wrote 2048/2048 bytes at offset 4295232000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295236096 ++wrote 2048/2048 bytes at offset 4295236096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295240192 ++wrote 2048/2048 bytes at offset 4295240192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295244288 ++wrote 2048/2048 bytes at offset 4295244288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295248384 ++wrote 2048/2048 bytes at offset 4295248384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295252480 ++wrote 2048/2048 bytes at offset 4295252480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295256576 ++wrote 2048/2048 bytes at offset 4295256576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295260672 ++wrote 2048/2048 bytes at offset 4295260672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 2048/2048 bytes at offset 4295262720 ++=== IO: pattern 65 ++wrote 2048/2048 bytes at offset 4295262720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295266816 ++wrote 2048/2048 bytes at offset 4295266816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295270912 ++wrote 2048/2048 bytes at offset 4295270912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295275008 ++wrote 2048/2048 bytes at offset 4295275008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295279104 ++wrote 2048/2048 bytes at offset 4295279104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295283200 ++wrote 2048/2048 bytes at offset 4295283200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295287296 ++wrote 2048/2048 bytes at offset 4295287296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295291392 ++wrote 2048/2048 bytes at offset 4295291392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295295488 ++wrote 2048/2048 bytes at offset 4295295488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295299584 ++wrote 2048/2048 bytes at offset 4295299584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295303680 ++wrote 2048/2048 bytes at offset 4295303680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295307776 ++wrote 2048/2048 bytes at offset 4295307776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295311872 ++wrote 2048/2048 bytes at offset 4295311872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295315968 ++wrote 2048/2048 bytes at offset 4295315968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295320064 ++wrote 2048/2048 bytes at offset 4295320064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295324160 ++wrote 2048/2048 bytes at offset 4295324160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295328256 ++wrote 2048/2048 bytes at offset 4295328256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295332352 ++wrote 2048/2048 bytes at offset 4295332352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295336448 ++wrote 2048/2048 bytes at offset 4295336448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295340544 ++wrote 2048/2048 bytes at offset 4295340544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295344640 ++wrote 2048/2048 bytes at offset 4295344640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295348736 ++wrote 2048/2048 bytes at offset 4295348736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295352832 ++wrote 2048/2048 bytes at offset 4295352832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295356928 ++wrote 2048/2048 bytes at offset 4295356928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295361024 ++wrote 2048/2048 bytes at offset 4295361024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295365120 ++wrote 2048/2048 bytes at offset 4295365120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295369216 ++wrote 2048/2048 bytes at offset 4295369216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295373312 ++wrote 2048/2048 bytes at offset 4295373312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295377408 ++wrote 2048/2048 bytes at offset 4295377408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295381504 ++wrote 2048/2048 bytes at offset 4295381504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295385600 ++wrote 2048/2048 bytes at offset 4295385600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295389696 ++wrote 2048/2048 bytes at offset 4295389696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295393792 ++wrote 2048/2048 bytes at offset 4295393792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295397888 ++wrote 2048/2048 bytes at offset 4295397888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295401984 ++wrote 2048/2048 bytes at offset 4295401984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295406080 ++wrote 2048/2048 bytes at offset 4295406080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> wrote 2048/2048 bytes at offset 4295411200 ++=== IO: pattern 99 ++wrote 2048/2048 bytes at offset 4295411200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295415296 ++wrote 2048/2048 bytes at offset 4295415296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295419392 ++wrote 2048/2048 bytes at offset 4295419392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295423488 ++wrote 2048/2048 bytes at offset 4295423488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295427584 ++wrote 2048/2048 bytes at offset 4295427584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295431680 ++wrote 2048/2048 bytes at offset 4295431680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295435776 ++wrote 2048/2048 bytes at offset 4295435776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295439872 ++wrote 2048/2048 bytes at offset 4295439872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295443968 ++wrote 2048/2048 bytes at offset 4295443968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295448064 ++wrote 2048/2048 bytes at offset 4295448064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295452160 ++wrote 2048/2048 bytes at offset 4295452160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295456256 ++wrote 2048/2048 bytes at offset 4295456256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295460352 ++wrote 2048/2048 bytes at offset 4295460352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295464448 ++wrote 2048/2048 bytes at offset 4295464448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295468544 ++wrote 2048/2048 bytes at offset 4295468544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295472640 ++wrote 2048/2048 bytes at offset 4295472640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295476736 ++wrote 2048/2048 bytes at offset 4295476736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295480832 ++wrote 2048/2048 bytes at offset 4295480832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295484928 ++wrote 2048/2048 bytes at offset 4295484928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295489024 ++wrote 2048/2048 bytes at offset 4295489024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295493120 ++wrote 2048/2048 bytes at offset 4295493120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295497216 ++wrote 2048/2048 bytes at offset 4295497216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295501312 ++wrote 2048/2048 bytes at offset 4295501312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295505408 ++wrote 2048/2048 bytes at offset 4295505408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295509504 ++wrote 2048/2048 bytes at offset 4295509504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295513600 ++wrote 2048/2048 bytes at offset 4295513600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295517696 ++wrote 2048/2048 bytes at offset 4295517696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295521792 ++wrote 2048/2048 bytes at offset 4295521792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295525888 ++wrote 2048/2048 bytes at offset 4295525888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295529984 ++wrote 2048/2048 bytes at offset 4295529984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295534080 ++wrote 2048/2048 bytes at offset 4295534080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295538176 ++wrote 2048/2048 bytes at offset 4295538176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295542272 ++wrote 2048/2048 bytes at offset 4295542272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295546368 ++wrote 2048/2048 bytes at offset 4295546368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295550464 ++wrote 2048/2048 bytes at offset 4295550464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 2048/2048 bytes at offset 4295554560 ++wrote 2048/2048 bytes at offset 4295554560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> wrote 8192/8192 bytes at offset 4295559680 ++=== IO: pattern 133 ++wrote 8192/8192 bytes at offset 4295559680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295571968 ++wrote 8192/8192 bytes at offset 4295571968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295584256 ++wrote 8192/8192 bytes at offset 4295584256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295596544 ++wrote 8192/8192 bytes at offset 4295596544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295608832 ++wrote 8192/8192 bytes at offset 4295608832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295621120 ++wrote 8192/8192 bytes at offset 4295621120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295633408 ++wrote 8192/8192 bytes at offset 4295633408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295645696 ++wrote 8192/8192 bytes at offset 4295645696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295657984 ++wrote 8192/8192 bytes at offset 4295657984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> wrote 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++wrote 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4299157504 ++wrote 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 12288/12288 bytes at offset 4301256704 ++wrote 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 4096/4096 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 4096/4096 bytes at offset 4294967808 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294971904 ++read 4096/4096 bytes at offset 4294971904 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294976000 ++read 4096/4096 bytes at offset 4294976000 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294980096 ++read 4096/4096 bytes at offset 4294980096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294984192 ++read 4096/4096 bytes at offset 4294984192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294988288 ++read 4096/4096 bytes at offset 4294988288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294992384 ++read 4096/4096 bytes at offset 4294992384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4294996480 ++read 4096/4096 bytes at offset 4294996480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295000576 ++read 4096/4096 bytes at offset 4295000576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295004672 ++read 4096/4096 bytes at offset 4295004672 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295008768 ++read 4096/4096 bytes at offset 4295008768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012864 ++read 4096/4096 bytes at offset 4295012864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295016960 ++read 4096/4096 bytes at offset 4295016960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295021056 ++read 4096/4096 bytes at offset 4295021056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295025152 ++read 4096/4096 bytes at offset 4295025152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295029248 ++read 4096/4096 bytes at offset 4295029248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295033344 ++read 4096/4096 bytes at offset 4295033344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295037440 ++read 4096/4096 bytes at offset 4295037440 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295041536 ++read 4096/4096 bytes at offset 4295041536 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295045632 ++read 4096/4096 bytes at offset 4295045632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049728 ++read 4096/4096 bytes at offset 4295049728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295053824 ++read 4096/4096 bytes at offset 4295053824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295057920 ++read 4096/4096 bytes at offset 4295057920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295062016 ++read 4096/4096 bytes at offset 4295062016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295066112 ++read 4096/4096 bytes at offset 4295066112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295070208 ++read 4096/4096 bytes at offset 4295070208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295074304 ++read 4096/4096 bytes at offset 4295074304 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295078400 ++read 4096/4096 bytes at offset 4295078400 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295082496 ++read 4096/4096 bytes at offset 4295082496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086592 ++read 4096/4096 bytes at offset 4295086592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295090688 ++read 4096/4096 bytes at offset 4295090688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295094784 ++read 4096/4096 bytes at offset 4295094784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295098880 ++read 4096/4096 bytes at offset 4295098880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295102976 ++read 4096/4096 bytes at offset 4295102976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295107072 ++read 4096/4096 bytes at offset 4295107072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295111168 ++read 4096/4096 bytes at offset 4295111168 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 37 +-qemu-io> read 2048/2048 bytes at offset 4295117312 ++=== IO: pattern 37 ++read 2048/2048 bytes at offset 4295117312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295121408 ++read 2048/2048 bytes at offset 4295121408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295125504 ++read 2048/2048 bytes at offset 4295125504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295129600 ++read 2048/2048 bytes at offset 4295129600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295133696 ++read 2048/2048 bytes at offset 4295133696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295137792 ++read 2048/2048 bytes at offset 4295137792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295141888 ++read 2048/2048 bytes at offset 4295141888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295145984 ++read 2048/2048 bytes at offset 4295145984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295150080 ++read 2048/2048 bytes at offset 4295150080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295154176 ++read 2048/2048 bytes at offset 4295154176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295158272 ++read 2048/2048 bytes at offset 4295158272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295162368 ++read 2048/2048 bytes at offset 4295162368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295166464 ++read 2048/2048 bytes at offset 4295166464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295170560 ++read 2048/2048 bytes at offset 4295170560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295174656 ++read 2048/2048 bytes at offset 4295174656 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295178752 ++read 2048/2048 bytes at offset 4295178752 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295182848 ++read 2048/2048 bytes at offset 4295182848 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295186944 ++read 2048/2048 bytes at offset 4295186944 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295191040 ++read 2048/2048 bytes at offset 4295191040 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295195136 ++read 2048/2048 bytes at offset 4295195136 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295199232 ++read 2048/2048 bytes at offset 4295199232 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295203328 ++read 2048/2048 bytes at offset 4295203328 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295207424 ++read 2048/2048 bytes at offset 4295207424 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295211520 ++read 2048/2048 bytes at offset 4295211520 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295215616 ++read 2048/2048 bytes at offset 4295215616 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295219712 ++read 2048/2048 bytes at offset 4295219712 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295223808 ++read 2048/2048 bytes at offset 4295223808 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295227904 ++read 2048/2048 bytes at offset 4295227904 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295232000 ++read 2048/2048 bytes at offset 4295232000 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295236096 ++read 2048/2048 bytes at offset 4295236096 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295240192 ++read 2048/2048 bytes at offset 4295240192 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295244288 ++read 2048/2048 bytes at offset 4295244288 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295248384 ++read 2048/2048 bytes at offset 4295248384 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295252480 ++read 2048/2048 bytes at offset 4295252480 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295256576 ++read 2048/2048 bytes at offset 4295256576 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295260672 ++read 2048/2048 bytes at offset 4295260672 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 2048/2048 bytes at offset 4295262720 ++=== IO: pattern 65 ++read 2048/2048 bytes at offset 4295262720 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295266816 ++read 2048/2048 bytes at offset 4295266816 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295270912 ++read 2048/2048 bytes at offset 4295270912 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295275008 ++read 2048/2048 bytes at offset 4295275008 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295279104 ++read 2048/2048 bytes at offset 4295279104 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295283200 ++read 2048/2048 bytes at offset 4295283200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295287296 ++read 2048/2048 bytes at offset 4295287296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295291392 ++read 2048/2048 bytes at offset 4295291392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295295488 ++read 2048/2048 bytes at offset 4295295488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295299584 ++read 2048/2048 bytes at offset 4295299584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295303680 ++read 2048/2048 bytes at offset 4295303680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295307776 ++read 2048/2048 bytes at offset 4295307776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295311872 ++read 2048/2048 bytes at offset 4295311872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295315968 ++read 2048/2048 bytes at offset 4295315968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295320064 ++read 2048/2048 bytes at offset 4295320064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295324160 ++read 2048/2048 bytes at offset 4295324160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295328256 ++read 2048/2048 bytes at offset 4295328256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295332352 ++read 2048/2048 bytes at offset 4295332352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295336448 ++read 2048/2048 bytes at offset 4295336448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295340544 ++read 2048/2048 bytes at offset 4295340544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295344640 ++read 2048/2048 bytes at offset 4295344640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295348736 ++read 2048/2048 bytes at offset 4295348736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295352832 ++read 2048/2048 bytes at offset 4295352832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295356928 ++read 2048/2048 bytes at offset 4295356928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295361024 ++read 2048/2048 bytes at offset 4295361024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295365120 ++read 2048/2048 bytes at offset 4295365120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295369216 ++read 2048/2048 bytes at offset 4295369216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295373312 ++read 2048/2048 bytes at offset 4295373312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295377408 ++read 2048/2048 bytes at offset 4295377408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295381504 ++read 2048/2048 bytes at offset 4295381504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295385600 ++read 2048/2048 bytes at offset 4295385600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295389696 ++read 2048/2048 bytes at offset 4295389696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295393792 ++read 2048/2048 bytes at offset 4295393792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295397888 ++read 2048/2048 bytes at offset 4295397888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295401984 ++read 2048/2048 bytes at offset 4295401984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295406080 ++read 2048/2048 bytes at offset 4295406080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 99 +-qemu-io> read 2048/2048 bytes at offset 4295411200 ++=== IO: pattern 99 ++read 2048/2048 bytes at offset 4295411200 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295415296 ++read 2048/2048 bytes at offset 4295415296 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295419392 ++read 2048/2048 bytes at offset 4295419392 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295423488 ++read 2048/2048 bytes at offset 4295423488 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295427584 ++read 2048/2048 bytes at offset 4295427584 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295431680 ++read 2048/2048 bytes at offset 4295431680 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295435776 ++read 2048/2048 bytes at offset 4295435776 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295439872 ++read 2048/2048 bytes at offset 4295439872 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295443968 ++read 2048/2048 bytes at offset 4295443968 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295448064 ++read 2048/2048 bytes at offset 4295448064 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295452160 ++read 2048/2048 bytes at offset 4295452160 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295456256 ++read 2048/2048 bytes at offset 4295456256 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295460352 ++read 2048/2048 bytes at offset 4295460352 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295464448 ++read 2048/2048 bytes at offset 4295464448 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295468544 ++read 2048/2048 bytes at offset 4295468544 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295472640 ++read 2048/2048 bytes at offset 4295472640 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295476736 ++read 2048/2048 bytes at offset 4295476736 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295480832 ++read 2048/2048 bytes at offset 4295480832 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295484928 ++read 2048/2048 bytes at offset 4295484928 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295489024 ++read 2048/2048 bytes at offset 4295489024 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295493120 ++read 2048/2048 bytes at offset 4295493120 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295497216 ++read 2048/2048 bytes at offset 4295497216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295501312 ++read 2048/2048 bytes at offset 4295501312 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295505408 ++read 2048/2048 bytes at offset 4295505408 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295509504 ++read 2048/2048 bytes at offset 4295509504 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295513600 ++read 2048/2048 bytes at offset 4295513600 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295517696 ++read 2048/2048 bytes at offset 4295517696 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295521792 ++read 2048/2048 bytes at offset 4295521792 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295525888 ++read 2048/2048 bytes at offset 4295525888 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295529984 ++read 2048/2048 bytes at offset 4295529984 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295534080 ++read 2048/2048 bytes at offset 4295534080 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295538176 ++read 2048/2048 bytes at offset 4295538176 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295542272 ++read 2048/2048 bytes at offset 4295542272 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295546368 ++read 2048/2048 bytes at offset 4295546368 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295550464 ++read 2048/2048 bytes at offset 4295550464 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 4295554560 ++read 2048/2048 bytes at offset 4295554560 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 133 +-qemu-io> read 8192/8192 bytes at offset 4295559680 ++=== IO: pattern 133 ++read 8192/8192 bytes at offset 4295559680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295571968 ++read 8192/8192 bytes at offset 4295571968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295584256 ++read 8192/8192 bytes at offset 4295584256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295596544 ++read 8192/8192 bytes at offset 4295596544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295608832 ++read 8192/8192 bytes at offset 4295608832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295621120 ++read 8192/8192 bytes at offset 4295621120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295633408 ++read 8192/8192 bytes at offset 4295633408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295645696 ++read 8192/8192 bytes at offset 4295645696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295657984 ++read 8192/8192 bytes at offset 4295657984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 244 +-qemu-io> read 12288/12288 bytes at offset 4297058304 ++=== IO: pattern 244 ++read 12288/12288 bytes at offset 4297058304 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4299157504 ++read 12288/12288 bytes at offset 4299157504 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4301256704 ++read 12288/12288 bytes at offset 4301256704 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating another new image + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -12276,221 +12276,221 @@ More complex patterns + test2: With offset 0 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 16384 ++wrote 4096/4096 bytes at offset 16384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 53248 ++wrote 4096/4096 bytes at offset 53248 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 90112 ++wrote 4096/4096 bytes at offset 90112 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 126976 ++wrote 4096/4096 bytes at offset 126976 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 20480 ++wrote 4096/4096 bytes at offset 20480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 57344 ++wrote 4096/4096 bytes at offset 57344 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 94208 ++wrote 4096/4096 bytes at offset 94208 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 131072 ++wrote 4096/4096 bytes at offset 131072 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 32768 ++wrote 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 69632 ++wrote 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 106496 ++wrote 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 143360 ++wrote 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 36864 ++wrote 4096/4096 bytes at offset 36864 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 73728 ++wrote 4096/4096 bytes at offset 73728 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 110592 ++wrote 4096/4096 bytes at offset 110592 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4096 ++wrote 4096/4096 bytes at offset 4096 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 40960 ++wrote 4096/4096 bytes at offset 40960 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 77824 ++wrote 4096/4096 bytes at offset 77824 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 114688 ++wrote 4096/4096 bytes at offset 114688 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 12288 ++wrote 4096/4096 bytes at offset 12288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 49152 ++wrote 4096/4096 bytes at offset 49152 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 86016 ++wrote 4096/4096 bytes at offset 86016 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 122880 ++wrote 4096/4096 bytes at offset 122880 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 8192/8192 bytes at offset 0 ++read 8192/8192 bytes at offset 0 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 36864 ++read 8192/8192 bytes at offset 36864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 73728 ++read 8192/8192 bytes at offset 73728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 110592 ++read 8192/8192 bytes at offset 110592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 12288/12288 bytes at offset 12288 ++=== IO: pattern 165 ++read 12288/12288 bytes at offset 12288 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 49152 ++read 12288/12288 bytes at offset 49152 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 86016 ++read 12288/12288 bytes at offset 86016 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 122880 ++read 12288/12288 bytes at offset 122880 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 4096/4096 bytes at offset 32768 ++=== IO: pattern 165 ++read 4096/4096 bytes at offset 32768 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 69632 ++read 4096/4096 bytes at offset 69632 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 106496 ++read 4096/4096 bytes at offset 106496 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 143360 ++read 4096/4096 bytes at offset 143360 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 8192 ++read 4096/4096 bytes at offset 8192 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 45056 ++read 4096/4096 bytes at offset 45056 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 81920 ++read 4096/4096 bytes at offset 81920 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 118784 ++read 4096/4096 bytes at offset 118784 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 24576 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 24576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 61440 ++read 8192/8192 bytes at offset 61440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 98304 ++read 8192/8192 bytes at offset 98304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 135168 ++read 8192/8192 bytes at offset 135168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + test2: With offset 4294967296 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294983680 ++wrote 4096/4096 bytes at offset 4294983680 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295020544 ++wrote 4096/4096 bytes at offset 4295020544 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295057408 ++wrote 4096/4096 bytes at offset 4295057408 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295094272 ++wrote 4096/4096 bytes at offset 4295094272 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294987776 ++wrote 4096/4096 bytes at offset 4294987776 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295024640 ++wrote 4096/4096 bytes at offset 4295024640 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295061504 ++wrote 4096/4096 bytes at offset 4295061504 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295098368 ++wrote 4096/4096 bytes at offset 4295098368 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4295000064 ++wrote 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295036928 ++wrote 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295073792 ++wrote 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295110656 ++wrote 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294967296 ++wrote 4096/4096 bytes at offset 4294967296 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295004160 ++wrote 4096/4096 bytes at offset 4295004160 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295041024 ++wrote 4096/4096 bytes at offset 4295041024 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295077888 ++wrote 4096/4096 bytes at offset 4295077888 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294971392 ++wrote 4096/4096 bytes at offset 4294971392 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295008256 ++wrote 4096/4096 bytes at offset 4295008256 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295045120 ++wrote 4096/4096 bytes at offset 4295045120 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295081984 ++wrote 4096/4096 bytes at offset 4295081984 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 4096/4096 bytes at offset 4294979584 ++wrote 4096/4096 bytes at offset 4294979584 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295016448 ++wrote 4096/4096 bytes at offset 4295016448 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295053312 ++wrote 4096/4096 bytes at offset 4295053312 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 4295090176 ++wrote 4096/4096 bytes at offset 4295090176 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 8192/8192 bytes at offset 4294967296 ++read 8192/8192 bytes at offset 4294967296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295004160 ++read 8192/8192 bytes at offset 4295004160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295041024 ++read 8192/8192 bytes at offset 4295041024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295077888 ++read 8192/8192 bytes at offset 4295077888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 12288/12288 bytes at offset 4294979584 ++=== IO: pattern 165 ++read 12288/12288 bytes at offset 4294979584 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295016448 ++read 12288/12288 bytes at offset 4295016448 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295053312 ++read 12288/12288 bytes at offset 4295053312 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 4295090176 ++read 12288/12288 bytes at offset 4295090176 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 4096/4096 bytes at offset 4295000064 ++=== IO: pattern 165 ++read 4096/4096 bytes at offset 4295000064 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295036928 ++read 4096/4096 bytes at offset 4295036928 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295073792 ++read 4096/4096 bytes at offset 4295073792 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295110656 ++read 4096/4096 bytes at offset 4295110656 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 4096/4096 bytes at offset 4294975488 ++read 4096/4096 bytes at offset 4294975488 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295012352 ++read 4096/4096 bytes at offset 4295012352 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295049216 ++read 4096/4096 bytes at offset 4295049216 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 4096/4096 bytes at offset 4295086080 ++read 4096/4096 bytes at offset 4295086080 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 4294991872 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 4294991872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295028736 ++read 8192/8192 bytes at offset 4295028736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295065600 ++read 8192/8192 bytes at offset 4295065600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295102464 ++read 8192/8192 bytes at offset 4295102464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating new image; cluster size: 16384 + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -12498,6382 +12498,6382 @@ Testing empty image + + At offset 0: + === IO: pattern 0 +-qemu-io> wrote 16384/16384 bytes at offset 0 ++wrote 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 16384 ++wrote 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 32768 ++wrote 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 49152 ++wrote 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 65536 ++wrote 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 81920 ++wrote 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 98304 ++wrote 16384/16384 bytes at offset 98304 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 114688 ++wrote 16384/16384 bytes at offset 114688 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 131072 ++wrote 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 147456 ++wrote 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 163840 ++wrote 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 180224 ++wrote 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 196608 ++wrote 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 212992 ++wrote 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 229376 ++wrote 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 245760 ++wrote 16384/16384 bytes at offset 245760 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 262144 ++wrote 16384/16384 bytes at offset 262144 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 278528 ++wrote 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 294912 ++wrote 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 311296 ++wrote 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 327680 ++wrote 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 344064 ++wrote 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 360448 ++wrote 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 376832 ++wrote 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 393216 ++wrote 16384/16384 bytes at offset 393216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 409600 ++wrote 16384/16384 bytes at offset 409600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 425984 ++wrote 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 442368 ++wrote 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 458752 ++wrote 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 475136 ++wrote 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 491520 ++wrote 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 507904 ++wrote 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 524288 ++wrote 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 540672 ++wrote 16384/16384 bytes at offset 540672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 557056 ++wrote 16384/16384 bytes at offset 557056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 573440 ++wrote 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 8192/8192 bytes at offset 598016 ++=== IO: pattern 144 ++wrote 8192/8192 bytes at offset 598016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 614400 ++wrote 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 630784 ++wrote 8192/8192 bytes at offset 630784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 647168 ++wrote 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 663552 ++wrote 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 679936 ++wrote 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 696320 ++wrote 8192/8192 bytes at offset 696320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 712704 ++wrote 8192/8192 bytes at offset 712704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 729088 ++wrote 8192/8192 bytes at offset 729088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 745472 ++wrote 8192/8192 bytes at offset 745472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 761856 ++wrote 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 778240 ++wrote 8192/8192 bytes at offset 778240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 794624 ++wrote 8192/8192 bytes at offset 794624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 811008 ++wrote 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 827392 ++wrote 8192/8192 bytes at offset 827392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 843776 ++wrote 8192/8192 bytes at offset 843776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 860160 ++wrote 8192/8192 bytes at offset 860160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 876544 ++wrote 8192/8192 bytes at offset 876544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 892928 ++wrote 8192/8192 bytes at offset 892928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 909312 ++wrote 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 925696 ++wrote 8192/8192 bytes at offset 925696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 942080 ++wrote 8192/8192 bytes at offset 942080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 958464 ++wrote 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 974848 ++wrote 8192/8192 bytes at offset 974848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 991232 ++wrote 8192/8192 bytes at offset 991232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1007616 ++wrote 8192/8192 bytes at offset 1007616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1024000 ++wrote 8192/8192 bytes at offset 1024000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1040384 ++wrote 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1056768 ++wrote 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1073152 ++wrote 8192/8192 bytes at offset 1073152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1089536 ++wrote 8192/8192 bytes at offset 1089536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1105920 ++wrote 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1122304 ++wrote 8192/8192 bytes at offset 1122304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1138688 ++wrote 8192/8192 bytes at offset 1138688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1155072 ++wrote 8192/8192 bytes at offset 1155072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1171456 ++wrote 8192/8192 bytes at offset 1171456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 8192/8192 bytes at offset 1179648 ++=== IO: pattern 0 ++wrote 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1196032 ++wrote 8192/8192 bytes at offset 1196032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1212416 ++wrote 8192/8192 bytes at offset 1212416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1228800 ++wrote 8192/8192 bytes at offset 1228800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1245184 ++wrote 8192/8192 bytes at offset 1245184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1261568 ++wrote 8192/8192 bytes at offset 1261568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1277952 ++wrote 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1294336 ++wrote 8192/8192 bytes at offset 1294336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1310720 ++wrote 8192/8192 bytes at offset 1310720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1327104 ++wrote 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1343488 ++wrote 8192/8192 bytes at offset 1343488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1359872 ++wrote 8192/8192 bytes at offset 1359872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1376256 ++wrote 8192/8192 bytes at offset 1376256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1392640 ++wrote 8192/8192 bytes at offset 1392640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1409024 ++wrote 8192/8192 bytes at offset 1409024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1425408 ++wrote 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1441792 ++wrote 8192/8192 bytes at offset 1441792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1458176 ++wrote 8192/8192 bytes at offset 1458176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1474560 ++wrote 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1490944 ++wrote 8192/8192 bytes at offset 1490944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1507328 ++wrote 8192/8192 bytes at offset 1507328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1523712 ++wrote 8192/8192 bytes at offset 1523712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1540096 ++wrote 8192/8192 bytes at offset 1540096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1556480 ++wrote 8192/8192 bytes at offset 1556480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1572864 ++wrote 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1589248 ++wrote 8192/8192 bytes at offset 1589248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1605632 ++wrote 8192/8192 bytes at offset 1605632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1622016 ++wrote 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1638400 ++wrote 8192/8192 bytes at offset 1638400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1654784 ++wrote 8192/8192 bytes at offset 1654784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1671168 ++wrote 8192/8192 bytes at offset 1671168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1687552 ++wrote 8192/8192 bytes at offset 1687552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1703936 ++wrote 8192/8192 bytes at offset 1703936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1720320 ++wrote 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1736704 ++wrote 8192/8192 bytes at offset 1736704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1753088 ++wrote 8192/8192 bytes at offset 1753088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> wrote 8192/8192 bytes at offset 1773568 ++=== IO: pattern 136 ++wrote 8192/8192 bytes at offset 1773568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1789952 ++wrote 8192/8192 bytes at offset 1789952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1806336 ++wrote 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1822720 ++wrote 8192/8192 bytes at offset 1822720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1839104 ++wrote 8192/8192 bytes at offset 1839104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1855488 ++wrote 8192/8192 bytes at offset 1855488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1871872 ++wrote 8192/8192 bytes at offset 1871872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1888256 ++wrote 8192/8192 bytes at offset 1888256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1904640 ++wrote 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1921024 ++wrote 8192/8192 bytes at offset 1921024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1937408 ++wrote 8192/8192 bytes at offset 1937408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1953792 ++wrote 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1970176 ++wrote 8192/8192 bytes at offset 1970176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1986560 ++wrote 8192/8192 bytes at offset 1986560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2002944 ++wrote 8192/8192 bytes at offset 2002944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2019328 ++wrote 8192/8192 bytes at offset 2019328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2035712 ++wrote 8192/8192 bytes at offset 2035712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2052096 ++wrote 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2068480 ++wrote 8192/8192 bytes at offset 2068480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2084864 ++wrote 8192/8192 bytes at offset 2084864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2101248 ++wrote 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2117632 ++wrote 8192/8192 bytes at offset 2117632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2134016 ++wrote 8192/8192 bytes at offset 2134016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2150400 ++wrote 8192/8192 bytes at offset 2150400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2166784 ++wrote 8192/8192 bytes at offset 2166784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2183168 ++wrote 8192/8192 bytes at offset 2183168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2199552 ++wrote 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2215936 ++wrote 8192/8192 bytes at offset 2215936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2232320 ++wrote 8192/8192 bytes at offset 2232320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2248704 ++wrote 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2265088 ++wrote 8192/8192 bytes at offset 2265088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2281472 ++wrote 8192/8192 bytes at offset 2281472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2297856 ++wrote 8192/8192 bytes at offset 2297856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2314240 ++wrote 8192/8192 bytes at offset 2314240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2330624 ++wrote 8192/8192 bytes at offset 2330624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2347008 ++wrote 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> wrote 32768/32768 bytes at offset 2367488 ++=== IO: pattern 16 ++wrote 32768/32768 bytes at offset 2367488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2416640 ++wrote 32768/32768 bytes at offset 2416640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2465792 ++wrote 32768/32768 bytes at offset 2465792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2514944 ++wrote 32768/32768 bytes at offset 2514944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2564096 ++wrote 32768/32768 bytes at offset 2564096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2613248 ++wrote 32768/32768 bytes at offset 2613248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2662400 ++wrote 32768/32768 bytes at offset 2662400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2711552 ++wrote 32768/32768 bytes at offset 2711552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2760704 ++wrote 32768/32768 bytes at offset 2760704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 67092480 ++wrote 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 100655104 ++wrote 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 0 ++=== IO: pattern 0 ++read 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 16384 ++read 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 32768 ++read 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 49152 ++read 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 65536 ++read 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 81920 ++read 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 98304 ++read 16384/16384 bytes at offset 98304 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 114688 ++read 16384/16384 bytes at offset 114688 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 131072 ++read 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 147456 ++read 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 163840 ++read 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180224 ++read 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 196608 ++read 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 212992 ++read 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 229376 ++read 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 245760 ++read 16384/16384 bytes at offset 245760 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 262144 ++read 16384/16384 bytes at offset 262144 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 278528 ++read 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 294912 ++read 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 311296 ++read 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 327680 ++read 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 344064 ++read 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 360448 ++read 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 376832 ++read 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 393216 ++read 16384/16384 bytes at offset 393216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 409600 ++read 16384/16384 bytes at offset 409600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 425984 ++read 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 442368 ++read 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 458752 ++read 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475136 ++read 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 491520 ++read 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 507904 ++read 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 524288 ++read 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 540672 ++read 16384/16384 bytes at offset 540672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 557056 ++read 16384/16384 bytes at offset 557056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573440 ++read 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 598016 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 598016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614400 ++read 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 630784 ++read 8192/8192 bytes at offset 630784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647168 ++read 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 663552 ++read 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 679936 ++read 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 696320 ++read 8192/8192 bytes at offset 696320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 712704 ++read 8192/8192 bytes at offset 712704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 729088 ++read 8192/8192 bytes at offset 729088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 745472 ++read 8192/8192 bytes at offset 745472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 761856 ++read 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 778240 ++read 8192/8192 bytes at offset 778240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 794624 ++read 8192/8192 bytes at offset 794624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811008 ++read 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 827392 ++read 8192/8192 bytes at offset 827392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 843776 ++read 8192/8192 bytes at offset 843776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 860160 ++read 8192/8192 bytes at offset 860160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 876544 ++read 8192/8192 bytes at offset 876544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 892928 ++read 8192/8192 bytes at offset 892928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909312 ++read 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 925696 ++read 8192/8192 bytes at offset 925696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 942080 ++read 8192/8192 bytes at offset 942080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958464 ++read 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 974848 ++read 8192/8192 bytes at offset 974848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 991232 ++read 8192/8192 bytes at offset 991232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1007616 ++read 8192/8192 bytes at offset 1007616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1024000 ++read 8192/8192 bytes at offset 1024000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040384 ++read 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1056768 ++read 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1073152 ++read 8192/8192 bytes at offset 1073152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1089536 ++read 8192/8192 bytes at offset 1089536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1105920 ++read 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1122304 ++read 8192/8192 bytes at offset 1122304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1138688 ++read 8192/8192 bytes at offset 1138688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1155072 ++read 8192/8192 bytes at offset 1155072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1171456 ++read 8192/8192 bytes at offset 1171456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 1179648 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1196032 ++read 8192/8192 bytes at offset 1196032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1212416 ++read 8192/8192 bytes at offset 1212416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1228800 ++read 8192/8192 bytes at offset 1228800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1245184 ++read 8192/8192 bytes at offset 1245184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1261568 ++read 8192/8192 bytes at offset 1261568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1277952 ++read 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1294336 ++read 8192/8192 bytes at offset 1294336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1310720 ++read 8192/8192 bytes at offset 1310720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327104 ++read 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1343488 ++read 8192/8192 bytes at offset 1343488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1359872 ++read 8192/8192 bytes at offset 1359872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1376256 ++read 8192/8192 bytes at offset 1376256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1392640 ++read 8192/8192 bytes at offset 1392640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1409024 ++read 8192/8192 bytes at offset 1409024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425408 ++read 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1441792 ++read 8192/8192 bytes at offset 1441792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1458176 ++read 8192/8192 bytes at offset 1458176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1474560 ++read 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1490944 ++read 8192/8192 bytes at offset 1490944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1507328 ++read 8192/8192 bytes at offset 1507328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1523712 ++read 8192/8192 bytes at offset 1523712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1540096 ++read 8192/8192 bytes at offset 1540096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1556480 ++read 8192/8192 bytes at offset 1556480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1572864 ++read 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1589248 ++read 8192/8192 bytes at offset 1589248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1605632 ++read 8192/8192 bytes at offset 1605632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622016 ++read 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1638400 ++read 8192/8192 bytes at offset 1638400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1654784 ++read 8192/8192 bytes at offset 1654784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1671168 ++read 8192/8192 bytes at offset 1671168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1687552 ++read 8192/8192 bytes at offset 1687552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1703936 ++read 8192/8192 bytes at offset 1703936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720320 ++read 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1736704 ++read 8192/8192 bytes at offset 1736704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1753088 ++read 8192/8192 bytes at offset 1753088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 1773568 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 1773568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1789952 ++read 8192/8192 bytes at offset 1789952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806336 ++read 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1822720 ++read 8192/8192 bytes at offset 1822720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1839104 ++read 8192/8192 bytes at offset 1839104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1855488 ++read 8192/8192 bytes at offset 1855488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1871872 ++read 8192/8192 bytes at offset 1871872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1888256 ++read 8192/8192 bytes at offset 1888256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1904640 ++read 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1921024 ++read 8192/8192 bytes at offset 1921024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1937408 ++read 8192/8192 bytes at offset 1937408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1953792 ++read 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1970176 ++read 8192/8192 bytes at offset 1970176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1986560 ++read 8192/8192 bytes at offset 1986560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2002944 ++read 8192/8192 bytes at offset 2002944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2019328 ++read 8192/8192 bytes at offset 2019328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2035712 ++read 8192/8192 bytes at offset 2035712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052096 ++read 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2068480 ++read 8192/8192 bytes at offset 2068480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2084864 ++read 8192/8192 bytes at offset 2084864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101248 ++read 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2117632 ++read 8192/8192 bytes at offset 2117632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2134016 ++read 8192/8192 bytes at offset 2134016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2150400 ++read 8192/8192 bytes at offset 2150400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2166784 ++read 8192/8192 bytes at offset 2166784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2183168 ++read 8192/8192 bytes at offset 2183168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2199552 ++read 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2215936 ++read 8192/8192 bytes at offset 2215936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2232320 ++read 8192/8192 bytes at offset 2232320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2248704 ++read 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2265088 ++read 8192/8192 bytes at offset 2265088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2281472 ++read 8192/8192 bytes at offset 2281472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2297856 ++read 8192/8192 bytes at offset 2297856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2314240 ++read 8192/8192 bytes at offset 2314240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2330624 ++read 8192/8192 bytes at offset 2330624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347008 ++read 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 2367488 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 2367488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2416640 ++read 32768/32768 bytes at offset 2416640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2465792 ++read 32768/32768 bytes at offset 2465792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2514944 ++read 32768/32768 bytes at offset 2514944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2564096 ++read 32768/32768 bytes at offset 2564096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2613248 ++read 32768/32768 bytes at offset 2613248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2662400 ++read 32768/32768 bytes at offset 2662400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2711552 ++read 32768/32768 bytes at offset 2711552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2760704 ++read 32768/32768 bytes at offset 2760704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 67092480 ++read 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 100655104 ++read 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 16384/16384 bytes at offset 0 ++=== IO: pattern 0 ++wrote 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 16384 ++wrote 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 32768 ++wrote 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 49152 ++wrote 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 65536 ++wrote 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 81920 ++wrote 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 98304 ++wrote 16384/16384 bytes at offset 98304 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 114688 ++wrote 16384/16384 bytes at offset 114688 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 131072 ++wrote 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 147456 ++wrote 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 163840 ++wrote 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 180224 ++wrote 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 196608 ++wrote 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 212992 ++wrote 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 229376 ++wrote 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 245760 ++wrote 16384/16384 bytes at offset 245760 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 262144 ++wrote 16384/16384 bytes at offset 262144 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 278528 ++wrote 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 294912 ++wrote 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 311296 ++wrote 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 327680 ++wrote 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 344064 ++wrote 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 360448 ++wrote 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 376832 ++wrote 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 393216 ++wrote 16384/16384 bytes at offset 393216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 409600 ++wrote 16384/16384 bytes at offset 409600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 425984 ++wrote 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 442368 ++wrote 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 458752 ++wrote 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 475136 ++wrote 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 491520 ++wrote 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 507904 ++wrote 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 524288 ++wrote 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 540672 ++wrote 16384/16384 bytes at offset 540672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 557056 ++wrote 16384/16384 bytes at offset 557056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 573440 ++wrote 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 8192/8192 bytes at offset 598016 ++=== IO: pattern 144 ++wrote 8192/8192 bytes at offset 598016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 614400 ++wrote 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 630784 ++wrote 8192/8192 bytes at offset 630784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 647168 ++wrote 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 663552 ++wrote 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 679936 ++wrote 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 696320 ++wrote 8192/8192 bytes at offset 696320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 712704 ++wrote 8192/8192 bytes at offset 712704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 729088 ++wrote 8192/8192 bytes at offset 729088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 745472 ++wrote 8192/8192 bytes at offset 745472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 761856 ++wrote 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 778240 ++wrote 8192/8192 bytes at offset 778240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 794624 ++wrote 8192/8192 bytes at offset 794624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 811008 ++wrote 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 827392 ++wrote 8192/8192 bytes at offset 827392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 843776 ++wrote 8192/8192 bytes at offset 843776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 860160 ++wrote 8192/8192 bytes at offset 860160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 876544 ++wrote 8192/8192 bytes at offset 876544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 892928 ++wrote 8192/8192 bytes at offset 892928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 909312 ++wrote 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 925696 ++wrote 8192/8192 bytes at offset 925696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 942080 ++wrote 8192/8192 bytes at offset 942080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 958464 ++wrote 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 974848 ++wrote 8192/8192 bytes at offset 974848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 991232 ++wrote 8192/8192 bytes at offset 991232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1007616 ++wrote 8192/8192 bytes at offset 1007616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1024000 ++wrote 8192/8192 bytes at offset 1024000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1040384 ++wrote 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1056768 ++wrote 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1073152 ++wrote 8192/8192 bytes at offset 1073152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1089536 ++wrote 8192/8192 bytes at offset 1089536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1105920 ++wrote 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1122304 ++wrote 8192/8192 bytes at offset 1122304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1138688 ++wrote 8192/8192 bytes at offset 1138688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1155072 ++wrote 8192/8192 bytes at offset 1155072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1171456 ++wrote 8192/8192 bytes at offset 1171456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 8192/8192 bytes at offset 1179648 ++=== IO: pattern 0 ++wrote 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1196032 ++wrote 8192/8192 bytes at offset 1196032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1212416 ++wrote 8192/8192 bytes at offset 1212416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1228800 ++wrote 8192/8192 bytes at offset 1228800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1245184 ++wrote 8192/8192 bytes at offset 1245184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1261568 ++wrote 8192/8192 bytes at offset 1261568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1277952 ++wrote 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1294336 ++wrote 8192/8192 bytes at offset 1294336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1310720 ++wrote 8192/8192 bytes at offset 1310720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1327104 ++wrote 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1343488 ++wrote 8192/8192 bytes at offset 1343488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1359872 ++wrote 8192/8192 bytes at offset 1359872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1376256 ++wrote 8192/8192 bytes at offset 1376256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1392640 ++wrote 8192/8192 bytes at offset 1392640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1409024 ++wrote 8192/8192 bytes at offset 1409024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1425408 ++wrote 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1441792 ++wrote 8192/8192 bytes at offset 1441792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1458176 ++wrote 8192/8192 bytes at offset 1458176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1474560 ++wrote 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1490944 ++wrote 8192/8192 bytes at offset 1490944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1507328 ++wrote 8192/8192 bytes at offset 1507328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1523712 ++wrote 8192/8192 bytes at offset 1523712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1540096 ++wrote 8192/8192 bytes at offset 1540096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1556480 ++wrote 8192/8192 bytes at offset 1556480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1572864 ++wrote 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1589248 ++wrote 8192/8192 bytes at offset 1589248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1605632 ++wrote 8192/8192 bytes at offset 1605632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1622016 ++wrote 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1638400 ++wrote 8192/8192 bytes at offset 1638400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1654784 ++wrote 8192/8192 bytes at offset 1654784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1671168 ++wrote 8192/8192 bytes at offset 1671168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1687552 ++wrote 8192/8192 bytes at offset 1687552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1703936 ++wrote 8192/8192 bytes at offset 1703936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1720320 ++wrote 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1736704 ++wrote 8192/8192 bytes at offset 1736704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1753088 ++wrote 8192/8192 bytes at offset 1753088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> wrote 8192/8192 bytes at offset 1773568 ++=== IO: pattern 136 ++wrote 8192/8192 bytes at offset 1773568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1789952 ++wrote 8192/8192 bytes at offset 1789952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1806336 ++wrote 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1822720 ++wrote 8192/8192 bytes at offset 1822720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1839104 ++wrote 8192/8192 bytes at offset 1839104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1855488 ++wrote 8192/8192 bytes at offset 1855488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1871872 ++wrote 8192/8192 bytes at offset 1871872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1888256 ++wrote 8192/8192 bytes at offset 1888256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1904640 ++wrote 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1921024 ++wrote 8192/8192 bytes at offset 1921024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1937408 ++wrote 8192/8192 bytes at offset 1937408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1953792 ++wrote 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1970176 ++wrote 8192/8192 bytes at offset 1970176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1986560 ++wrote 8192/8192 bytes at offset 1986560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2002944 ++wrote 8192/8192 bytes at offset 2002944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2019328 ++wrote 8192/8192 bytes at offset 2019328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2035712 ++wrote 8192/8192 bytes at offset 2035712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2052096 ++wrote 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2068480 ++wrote 8192/8192 bytes at offset 2068480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2084864 ++wrote 8192/8192 bytes at offset 2084864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2101248 ++wrote 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2117632 ++wrote 8192/8192 bytes at offset 2117632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2134016 ++wrote 8192/8192 bytes at offset 2134016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2150400 ++wrote 8192/8192 bytes at offset 2150400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2166784 ++wrote 8192/8192 bytes at offset 2166784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2183168 ++wrote 8192/8192 bytes at offset 2183168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2199552 ++wrote 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2215936 ++wrote 8192/8192 bytes at offset 2215936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2232320 ++wrote 8192/8192 bytes at offset 2232320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2248704 ++wrote 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2265088 ++wrote 8192/8192 bytes at offset 2265088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2281472 ++wrote 8192/8192 bytes at offset 2281472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2297856 ++wrote 8192/8192 bytes at offset 2297856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2314240 ++wrote 8192/8192 bytes at offset 2314240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2330624 ++wrote 8192/8192 bytes at offset 2330624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2347008 ++wrote 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> wrote 32768/32768 bytes at offset 2367488 ++=== IO: pattern 16 ++wrote 32768/32768 bytes at offset 2367488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2416640 ++wrote 32768/32768 bytes at offset 2416640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2465792 ++wrote 32768/32768 bytes at offset 2465792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2514944 ++wrote 32768/32768 bytes at offset 2514944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2564096 ++wrote 32768/32768 bytes at offset 2564096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2613248 ++wrote 32768/32768 bytes at offset 2613248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2662400 ++wrote 32768/32768 bytes at offset 2662400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2711552 ++wrote 32768/32768 bytes at offset 2711552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2760704 ++wrote 32768/32768 bytes at offset 2760704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 67092480 ++wrote 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 100655104 ++wrote 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 0 ++=== IO: pattern 0 ++read 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 16384 ++read 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 32768 ++read 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 49152 ++read 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 65536 ++read 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 81920 ++read 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 98304 ++read 16384/16384 bytes at offset 98304 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 114688 ++read 16384/16384 bytes at offset 114688 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 131072 ++read 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 147456 ++read 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 163840 ++read 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180224 ++read 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 196608 ++read 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 212992 ++read 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 229376 ++read 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 245760 ++read 16384/16384 bytes at offset 245760 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 262144 ++read 16384/16384 bytes at offset 262144 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 278528 ++read 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 294912 ++read 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 311296 ++read 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 327680 ++read 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 344064 ++read 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 360448 ++read 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 376832 ++read 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 393216 ++read 16384/16384 bytes at offset 393216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 409600 ++read 16384/16384 bytes at offset 409600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 425984 ++read 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 442368 ++read 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 458752 ++read 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475136 ++read 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 491520 ++read 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 507904 ++read 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 524288 ++read 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 540672 ++read 16384/16384 bytes at offset 540672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 557056 ++read 16384/16384 bytes at offset 557056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573440 ++read 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 598016 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 598016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614400 ++read 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 630784 ++read 8192/8192 bytes at offset 630784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647168 ++read 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 663552 ++read 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 679936 ++read 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 696320 ++read 8192/8192 bytes at offset 696320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 712704 ++read 8192/8192 bytes at offset 712704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 729088 ++read 8192/8192 bytes at offset 729088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 745472 ++read 8192/8192 bytes at offset 745472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 761856 ++read 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 778240 ++read 8192/8192 bytes at offset 778240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 794624 ++read 8192/8192 bytes at offset 794624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811008 ++read 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 827392 ++read 8192/8192 bytes at offset 827392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 843776 ++read 8192/8192 bytes at offset 843776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 860160 ++read 8192/8192 bytes at offset 860160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 876544 ++read 8192/8192 bytes at offset 876544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 892928 ++read 8192/8192 bytes at offset 892928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909312 ++read 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 925696 ++read 8192/8192 bytes at offset 925696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 942080 ++read 8192/8192 bytes at offset 942080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958464 ++read 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 974848 ++read 8192/8192 bytes at offset 974848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 991232 ++read 8192/8192 bytes at offset 991232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1007616 ++read 8192/8192 bytes at offset 1007616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1024000 ++read 8192/8192 bytes at offset 1024000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040384 ++read 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1056768 ++read 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1073152 ++read 8192/8192 bytes at offset 1073152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1089536 ++read 8192/8192 bytes at offset 1089536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1105920 ++read 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1122304 ++read 8192/8192 bytes at offset 1122304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1138688 ++read 8192/8192 bytes at offset 1138688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1155072 ++read 8192/8192 bytes at offset 1155072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1171456 ++read 8192/8192 bytes at offset 1171456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 1179648 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1196032 ++read 8192/8192 bytes at offset 1196032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1212416 ++read 8192/8192 bytes at offset 1212416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1228800 ++read 8192/8192 bytes at offset 1228800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1245184 ++read 8192/8192 bytes at offset 1245184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1261568 ++read 8192/8192 bytes at offset 1261568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1277952 ++read 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1294336 ++read 8192/8192 bytes at offset 1294336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1310720 ++read 8192/8192 bytes at offset 1310720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327104 ++read 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1343488 ++read 8192/8192 bytes at offset 1343488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1359872 ++read 8192/8192 bytes at offset 1359872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1376256 ++read 8192/8192 bytes at offset 1376256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1392640 ++read 8192/8192 bytes at offset 1392640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1409024 ++read 8192/8192 bytes at offset 1409024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425408 ++read 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1441792 ++read 8192/8192 bytes at offset 1441792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1458176 ++read 8192/8192 bytes at offset 1458176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1474560 ++read 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1490944 ++read 8192/8192 bytes at offset 1490944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1507328 ++read 8192/8192 bytes at offset 1507328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1523712 ++read 8192/8192 bytes at offset 1523712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1540096 ++read 8192/8192 bytes at offset 1540096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1556480 ++read 8192/8192 bytes at offset 1556480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1572864 ++read 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1589248 ++read 8192/8192 bytes at offset 1589248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1605632 ++read 8192/8192 bytes at offset 1605632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622016 ++read 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1638400 ++read 8192/8192 bytes at offset 1638400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1654784 ++read 8192/8192 bytes at offset 1654784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1671168 ++read 8192/8192 bytes at offset 1671168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1687552 ++read 8192/8192 bytes at offset 1687552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1703936 ++read 8192/8192 bytes at offset 1703936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720320 ++read 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1736704 ++read 8192/8192 bytes at offset 1736704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1753088 ++read 8192/8192 bytes at offset 1753088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 1773568 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 1773568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1789952 ++read 8192/8192 bytes at offset 1789952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806336 ++read 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1822720 ++read 8192/8192 bytes at offset 1822720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1839104 ++read 8192/8192 bytes at offset 1839104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1855488 ++read 8192/8192 bytes at offset 1855488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1871872 ++read 8192/8192 bytes at offset 1871872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1888256 ++read 8192/8192 bytes at offset 1888256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1904640 ++read 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1921024 ++read 8192/8192 bytes at offset 1921024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1937408 ++read 8192/8192 bytes at offset 1937408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1953792 ++read 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1970176 ++read 8192/8192 bytes at offset 1970176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1986560 ++read 8192/8192 bytes at offset 1986560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2002944 ++read 8192/8192 bytes at offset 2002944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2019328 ++read 8192/8192 bytes at offset 2019328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2035712 ++read 8192/8192 bytes at offset 2035712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052096 ++read 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2068480 ++read 8192/8192 bytes at offset 2068480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2084864 ++read 8192/8192 bytes at offset 2084864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101248 ++read 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2117632 ++read 8192/8192 bytes at offset 2117632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2134016 ++read 8192/8192 bytes at offset 2134016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2150400 ++read 8192/8192 bytes at offset 2150400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2166784 ++read 8192/8192 bytes at offset 2166784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2183168 ++read 8192/8192 bytes at offset 2183168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2199552 ++read 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2215936 ++read 8192/8192 bytes at offset 2215936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2232320 ++read 8192/8192 bytes at offset 2232320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2248704 ++read 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2265088 ++read 8192/8192 bytes at offset 2265088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2281472 ++read 8192/8192 bytes at offset 2281472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2297856 ++read 8192/8192 bytes at offset 2297856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2314240 ++read 8192/8192 bytes at offset 2314240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2330624 ++read 8192/8192 bytes at offset 2330624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347008 ++read 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 2367488 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 2367488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2416640 ++read 32768/32768 bytes at offset 2416640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2465792 ++read 32768/32768 bytes at offset 2465792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2514944 ++read 32768/32768 bytes at offset 2514944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2564096 ++read 32768/32768 bytes at offset 2564096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2613248 ++read 32768/32768 bytes at offset 2613248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2662400 ++read 32768/32768 bytes at offset 2662400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2711552 ++read 32768/32768 bytes at offset 2711552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2760704 ++read 32768/32768 bytes at offset 2760704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 67092480 ++read 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 100655104 ++read 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + At offset 4294967296: + === IO: pattern 0 +-qemu-io> wrote 16384/16384 bytes at offset 4294967296 ++wrote 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4294983680 ++wrote 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295000064 ++wrote 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295016448 ++wrote 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295032832 ++wrote 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295049216 ++wrote 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295065600 ++wrote 16384/16384 bytes at offset 4295065600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295081984 ++wrote 16384/16384 bytes at offset 4295081984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295098368 ++wrote 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295114752 ++wrote 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295131136 ++wrote 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295147520 ++wrote 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295163904 ++wrote 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295180288 ++wrote 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295196672 ++wrote 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295213056 ++wrote 16384/16384 bytes at offset 4295213056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295229440 ++wrote 16384/16384 bytes at offset 4295229440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295245824 ++wrote 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295262208 ++wrote 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295278592 ++wrote 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295294976 ++wrote 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295311360 ++wrote 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295327744 ++wrote 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295344128 ++wrote 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295360512 ++wrote 16384/16384 bytes at offset 4295360512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295376896 ++wrote 16384/16384 bytes at offset 4295376896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295393280 ++wrote 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295409664 ++wrote 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295426048 ++wrote 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295442432 ++wrote 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295458816 ++wrote 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295475200 ++wrote 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295491584 ++wrote 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295507968 ++wrote 16384/16384 bytes at offset 4295507968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295524352 ++wrote 16384/16384 bytes at offset 4295524352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295540736 ++wrote 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 8192/8192 bytes at offset 4295565312 ++=== IO: pattern 144 ++wrote 8192/8192 bytes at offset 4295565312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295581696 ++wrote 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295598080 ++wrote 8192/8192 bytes at offset 4295598080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295614464 ++wrote 8192/8192 bytes at offset 4295614464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295630848 ++wrote 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295647232 ++wrote 8192/8192 bytes at offset 4295647232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295663616 ++wrote 8192/8192 bytes at offset 4295663616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295680000 ++wrote 8192/8192 bytes at offset 4295680000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295696384 ++wrote 8192/8192 bytes at offset 4295696384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295712768 ++wrote 8192/8192 bytes at offset 4295712768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295729152 ++wrote 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295745536 ++wrote 8192/8192 bytes at offset 4295745536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295761920 ++wrote 8192/8192 bytes at offset 4295761920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295778304 ++wrote 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295794688 ++wrote 8192/8192 bytes at offset 4295794688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295811072 ++wrote 8192/8192 bytes at offset 4295811072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295827456 ++wrote 8192/8192 bytes at offset 4295827456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295843840 ++wrote 8192/8192 bytes at offset 4295843840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295860224 ++wrote 8192/8192 bytes at offset 4295860224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295876608 ++wrote 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295892992 ++wrote 8192/8192 bytes at offset 4295892992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295909376 ++wrote 8192/8192 bytes at offset 4295909376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295925760 ++wrote 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295942144 ++wrote 8192/8192 bytes at offset 4295942144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295958528 ++wrote 8192/8192 bytes at offset 4295958528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295974912 ++wrote 8192/8192 bytes at offset 4295974912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295991296 ++wrote 8192/8192 bytes at offset 4295991296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296007680 ++wrote 8192/8192 bytes at offset 4296007680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296024064 ++wrote 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296040448 ++wrote 8192/8192 bytes at offset 4296040448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296056832 ++wrote 8192/8192 bytes at offset 4296056832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296073216 ++wrote 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296089600 ++wrote 8192/8192 bytes at offset 4296089600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296105984 ++wrote 8192/8192 bytes at offset 4296105984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296122368 ++wrote 8192/8192 bytes at offset 4296122368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296138752 ++wrote 8192/8192 bytes at offset 4296138752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 8192/8192 bytes at offset 4296146944 ++=== IO: pattern 0 ++wrote 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296163328 ++wrote 8192/8192 bytes at offset 4296163328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296179712 ++wrote 8192/8192 bytes at offset 4296179712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296196096 ++wrote 8192/8192 bytes at offset 4296196096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296212480 ++wrote 8192/8192 bytes at offset 4296212480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296228864 ++wrote 8192/8192 bytes at offset 4296228864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296245248 ++wrote 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296261632 ++wrote 8192/8192 bytes at offset 4296261632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296278016 ++wrote 8192/8192 bytes at offset 4296278016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296294400 ++wrote 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296310784 ++wrote 8192/8192 bytes at offset 4296310784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296327168 ++wrote 8192/8192 bytes at offset 4296327168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296343552 ++wrote 8192/8192 bytes at offset 4296343552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296359936 ++wrote 8192/8192 bytes at offset 4296359936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296376320 ++wrote 8192/8192 bytes at offset 4296376320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296392704 ++wrote 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296409088 ++wrote 8192/8192 bytes at offset 4296409088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296425472 ++wrote 8192/8192 bytes at offset 4296425472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296441856 ++wrote 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296458240 ++wrote 8192/8192 bytes at offset 4296458240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296474624 ++wrote 8192/8192 bytes at offset 4296474624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296491008 ++wrote 8192/8192 bytes at offset 4296491008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296507392 ++wrote 8192/8192 bytes at offset 4296507392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296523776 ++wrote 8192/8192 bytes at offset 4296523776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296540160 ++wrote 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296556544 ++wrote 8192/8192 bytes at offset 4296556544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296572928 ++wrote 8192/8192 bytes at offset 4296572928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296589312 ++wrote 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296605696 ++wrote 8192/8192 bytes at offset 4296605696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296622080 ++wrote 8192/8192 bytes at offset 4296622080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296638464 ++wrote 8192/8192 bytes at offset 4296638464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296654848 ++wrote 8192/8192 bytes at offset 4296654848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296671232 ++wrote 8192/8192 bytes at offset 4296671232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296687616 ++wrote 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296704000 ++wrote 8192/8192 bytes at offset 4296704000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296720384 ++wrote 8192/8192 bytes at offset 4296720384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> wrote 8192/8192 bytes at offset 4296740864 ++=== IO: pattern 136 ++wrote 8192/8192 bytes at offset 4296740864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296757248 ++wrote 8192/8192 bytes at offset 4296757248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296773632 ++wrote 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296790016 ++wrote 8192/8192 bytes at offset 4296790016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296806400 ++wrote 8192/8192 bytes at offset 4296806400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296822784 ++wrote 8192/8192 bytes at offset 4296822784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296839168 ++wrote 8192/8192 bytes at offset 4296839168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296855552 ++wrote 8192/8192 bytes at offset 4296855552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296871936 ++wrote 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296888320 ++wrote 8192/8192 bytes at offset 4296888320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296904704 ++wrote 8192/8192 bytes at offset 4296904704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296921088 ++wrote 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296937472 ++wrote 8192/8192 bytes at offset 4296937472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296953856 ++wrote 8192/8192 bytes at offset 4296953856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296970240 ++wrote 8192/8192 bytes at offset 4296970240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296986624 ++wrote 8192/8192 bytes at offset 4296986624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297003008 ++wrote 8192/8192 bytes at offset 4297003008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297019392 ++wrote 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297035776 ++wrote 8192/8192 bytes at offset 4297035776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297052160 ++wrote 8192/8192 bytes at offset 4297052160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297068544 ++wrote 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297084928 ++wrote 8192/8192 bytes at offset 4297084928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297101312 ++wrote 8192/8192 bytes at offset 4297101312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297117696 ++wrote 8192/8192 bytes at offset 4297117696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297134080 ++wrote 8192/8192 bytes at offset 4297134080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297150464 ++wrote 8192/8192 bytes at offset 4297150464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297166848 ++wrote 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297183232 ++wrote 8192/8192 bytes at offset 4297183232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297199616 ++wrote 8192/8192 bytes at offset 4297199616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297216000 ++wrote 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297232384 ++wrote 8192/8192 bytes at offset 4297232384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297248768 ++wrote 8192/8192 bytes at offset 4297248768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297265152 ++wrote 8192/8192 bytes at offset 4297265152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297281536 ++wrote 8192/8192 bytes at offset 4297281536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297297920 ++wrote 8192/8192 bytes at offset 4297297920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297314304 ++wrote 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> wrote 32768/32768 bytes at offset 4297334784 ++=== IO: pattern 16 ++wrote 32768/32768 bytes at offset 4297334784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297383936 ++wrote 32768/32768 bytes at offset 4297383936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297433088 ++wrote 32768/32768 bytes at offset 4297433088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297482240 ++wrote 32768/32768 bytes at offset 4297482240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297531392 ++wrote 32768/32768 bytes at offset 4297531392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297580544 ++wrote 32768/32768 bytes at offset 4297580544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297629696 ++wrote 32768/32768 bytes at offset 4297629696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297678848 ++wrote 32768/32768 bytes at offset 4297678848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297728000 ++wrote 32768/32768 bytes at offset 4297728000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4362059776 ++wrote 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4395622400 ++wrote 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4294983680 ++read 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295000064 ++read 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295016448 ++read 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295032832 ++read 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295049216 ++read 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295065600 ++read 16384/16384 bytes at offset 4295065600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295081984 ++read 16384/16384 bytes at offset 4295081984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295098368 ++read 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295114752 ++read 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295131136 ++read 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295147520 ++read 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295163904 ++read 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295180288 ++read 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295196672 ++read 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295213056 ++read 16384/16384 bytes at offset 4295213056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295229440 ++read 16384/16384 bytes at offset 4295229440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295245824 ++read 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295262208 ++read 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295278592 ++read 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295294976 ++read 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295311360 ++read 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295327744 ++read 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295344128 ++read 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295360512 ++read 16384/16384 bytes at offset 4295360512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295376896 ++read 16384/16384 bytes at offset 4295376896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393280 ++read 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295409664 ++read 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295426048 ++read 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442432 ++read 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295458816 ++read 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295475200 ++read 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295491584 ++read 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295507968 ++read 16384/16384 bytes at offset 4295507968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295524352 ++read 16384/16384 bytes at offset 4295524352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295540736 ++read 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 4295565312 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 4295565312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295581696 ++read 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295598080 ++read 8192/8192 bytes at offset 4295598080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295614464 ++read 8192/8192 bytes at offset 4295614464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295630848 ++read 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295647232 ++read 8192/8192 bytes at offset 4295647232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295663616 ++read 8192/8192 bytes at offset 4295663616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295680000 ++read 8192/8192 bytes at offset 4295680000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295696384 ++read 8192/8192 bytes at offset 4295696384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295712768 ++read 8192/8192 bytes at offset 4295712768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729152 ++read 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295745536 ++read 8192/8192 bytes at offset 4295745536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295761920 ++read 8192/8192 bytes at offset 4295761920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778304 ++read 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295794688 ++read 8192/8192 bytes at offset 4295794688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295811072 ++read 8192/8192 bytes at offset 4295811072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295827456 ++read 8192/8192 bytes at offset 4295827456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295843840 ++read 8192/8192 bytes at offset 4295843840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295860224 ++read 8192/8192 bytes at offset 4295860224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295876608 ++read 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295892992 ++read 8192/8192 bytes at offset 4295892992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295909376 ++read 8192/8192 bytes at offset 4295909376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295925760 ++read 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295942144 ++read 8192/8192 bytes at offset 4295942144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295958528 ++read 8192/8192 bytes at offset 4295958528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295974912 ++read 8192/8192 bytes at offset 4295974912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295991296 ++read 8192/8192 bytes at offset 4295991296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296007680 ++read 8192/8192 bytes at offset 4296007680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024064 ++read 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296040448 ++read 8192/8192 bytes at offset 4296040448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296056832 ++read 8192/8192 bytes at offset 4296056832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073216 ++read 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296089600 ++read 8192/8192 bytes at offset 4296089600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296105984 ++read 8192/8192 bytes at offset 4296105984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296122368 ++read 8192/8192 bytes at offset 4296122368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296138752 ++read 8192/8192 bytes at offset 4296138752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 4296146944 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296163328 ++read 8192/8192 bytes at offset 4296163328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296179712 ++read 8192/8192 bytes at offset 4296179712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296196096 ++read 8192/8192 bytes at offset 4296196096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296212480 ++read 8192/8192 bytes at offset 4296212480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296228864 ++read 8192/8192 bytes at offset 4296228864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245248 ++read 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296261632 ++read 8192/8192 bytes at offset 4296261632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296278016 ++read 8192/8192 bytes at offset 4296278016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294400 ++read 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296310784 ++read 8192/8192 bytes at offset 4296310784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296327168 ++read 8192/8192 bytes at offset 4296327168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296343552 ++read 8192/8192 bytes at offset 4296343552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296359936 ++read 8192/8192 bytes at offset 4296359936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296376320 ++read 8192/8192 bytes at offset 4296376320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296392704 ++read 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296409088 ++read 8192/8192 bytes at offset 4296409088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296425472 ++read 8192/8192 bytes at offset 4296425472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296441856 ++read 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296458240 ++read 8192/8192 bytes at offset 4296458240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296474624 ++read 8192/8192 bytes at offset 4296474624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296491008 ++read 8192/8192 bytes at offset 4296491008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296507392 ++read 8192/8192 bytes at offset 4296507392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296523776 ++read 8192/8192 bytes at offset 4296523776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540160 ++read 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296556544 ++read 8192/8192 bytes at offset 4296556544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296572928 ++read 8192/8192 bytes at offset 4296572928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589312 ++read 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296605696 ++read 8192/8192 bytes at offset 4296605696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296622080 ++read 8192/8192 bytes at offset 4296622080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296638464 ++read 8192/8192 bytes at offset 4296638464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296654848 ++read 8192/8192 bytes at offset 4296654848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296671232 ++read 8192/8192 bytes at offset 4296671232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296687616 ++read 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296704000 ++read 8192/8192 bytes at offset 4296704000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296720384 ++read 8192/8192 bytes at offset 4296720384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 4296740864 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 4296740864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296757248 ++read 8192/8192 bytes at offset 4296757248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296773632 ++read 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296790016 ++read 8192/8192 bytes at offset 4296790016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296806400 ++read 8192/8192 bytes at offset 4296806400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296822784 ++read 8192/8192 bytes at offset 4296822784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296839168 ++read 8192/8192 bytes at offset 4296839168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296855552 ++read 8192/8192 bytes at offset 4296855552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296871936 ++read 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296888320 ++read 8192/8192 bytes at offset 4296888320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296904704 ++read 8192/8192 bytes at offset 4296904704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921088 ++read 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296937472 ++read 8192/8192 bytes at offset 4296937472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296953856 ++read 8192/8192 bytes at offset 4296953856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296970240 ++read 8192/8192 bytes at offset 4296970240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296986624 ++read 8192/8192 bytes at offset 4296986624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297003008 ++read 8192/8192 bytes at offset 4297003008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019392 ++read 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297035776 ++read 8192/8192 bytes at offset 4297035776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297052160 ++read 8192/8192 bytes at offset 4297052160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297068544 ++read 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297084928 ++read 8192/8192 bytes at offset 4297084928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297101312 ++read 8192/8192 bytes at offset 4297101312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297117696 ++read 8192/8192 bytes at offset 4297117696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297134080 ++read 8192/8192 bytes at offset 4297134080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297150464 ++read 8192/8192 bytes at offset 4297150464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297166848 ++read 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297183232 ++read 8192/8192 bytes at offset 4297183232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297199616 ++read 8192/8192 bytes at offset 4297199616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216000 ++read 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297232384 ++read 8192/8192 bytes at offset 4297232384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297248768 ++read 8192/8192 bytes at offset 4297248768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297265152 ++read 8192/8192 bytes at offset 4297265152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297281536 ++read 8192/8192 bytes at offset 4297281536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297297920 ++read 8192/8192 bytes at offset 4297297920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314304 ++read 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 4297334784 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 4297334784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297383936 ++read 32768/32768 bytes at offset 4297383936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297433088 ++read 32768/32768 bytes at offset 4297433088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297482240 ++read 32768/32768 bytes at offset 4297482240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297531392 ++read 32768/32768 bytes at offset 4297531392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297580544 ++read 32768/32768 bytes at offset 4297580544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297629696 ++read 32768/32768 bytes at offset 4297629696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297678848 ++read 32768/32768 bytes at offset 4297678848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297728000 ++read 32768/32768 bytes at offset 4297728000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4362059776 ++read 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4395622400 ++read 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 16384/16384 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4294983680 ++wrote 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295000064 ++wrote 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295016448 ++wrote 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295032832 ++wrote 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295049216 ++wrote 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295065600 ++wrote 16384/16384 bytes at offset 4295065600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295081984 ++wrote 16384/16384 bytes at offset 4295081984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295098368 ++wrote 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295114752 ++wrote 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295131136 ++wrote 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295147520 ++wrote 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295163904 ++wrote 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295180288 ++wrote 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295196672 ++wrote 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295213056 ++wrote 16384/16384 bytes at offset 4295213056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295229440 ++wrote 16384/16384 bytes at offset 4295229440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295245824 ++wrote 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295262208 ++wrote 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295278592 ++wrote 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295294976 ++wrote 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295311360 ++wrote 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295327744 ++wrote 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295344128 ++wrote 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295360512 ++wrote 16384/16384 bytes at offset 4295360512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295376896 ++wrote 16384/16384 bytes at offset 4295376896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295393280 ++wrote 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295409664 ++wrote 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295426048 ++wrote 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295442432 ++wrote 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295458816 ++wrote 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295475200 ++wrote 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295491584 ++wrote 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295507968 ++wrote 16384/16384 bytes at offset 4295507968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295524352 ++wrote 16384/16384 bytes at offset 4295524352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295540736 ++wrote 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> wrote 8192/8192 bytes at offset 4295565312 ++=== IO: pattern 144 ++wrote 8192/8192 bytes at offset 4295565312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295581696 ++wrote 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295598080 ++wrote 8192/8192 bytes at offset 4295598080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295614464 ++wrote 8192/8192 bytes at offset 4295614464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295630848 ++wrote 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295647232 ++wrote 8192/8192 bytes at offset 4295647232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295663616 ++wrote 8192/8192 bytes at offset 4295663616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295680000 ++wrote 8192/8192 bytes at offset 4295680000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295696384 ++wrote 8192/8192 bytes at offset 4295696384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295712768 ++wrote 8192/8192 bytes at offset 4295712768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295729152 ++wrote 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295745536 ++wrote 8192/8192 bytes at offset 4295745536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295761920 ++wrote 8192/8192 bytes at offset 4295761920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295778304 ++wrote 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295794688 ++wrote 8192/8192 bytes at offset 4295794688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295811072 ++wrote 8192/8192 bytes at offset 4295811072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295827456 ++wrote 8192/8192 bytes at offset 4295827456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295843840 ++wrote 8192/8192 bytes at offset 4295843840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295860224 ++wrote 8192/8192 bytes at offset 4295860224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295876608 ++wrote 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295892992 ++wrote 8192/8192 bytes at offset 4295892992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295909376 ++wrote 8192/8192 bytes at offset 4295909376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295925760 ++wrote 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295942144 ++wrote 8192/8192 bytes at offset 4295942144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295958528 ++wrote 8192/8192 bytes at offset 4295958528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295974912 ++wrote 8192/8192 bytes at offset 4295974912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295991296 ++wrote 8192/8192 bytes at offset 4295991296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296007680 ++wrote 8192/8192 bytes at offset 4296007680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296024064 ++wrote 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296040448 ++wrote 8192/8192 bytes at offset 4296040448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296056832 ++wrote 8192/8192 bytes at offset 4296056832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296073216 ++wrote 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296089600 ++wrote 8192/8192 bytes at offset 4296089600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296105984 ++wrote 8192/8192 bytes at offset 4296105984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296122368 ++wrote 8192/8192 bytes at offset 4296122368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296138752 ++wrote 8192/8192 bytes at offset 4296138752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 8192/8192 bytes at offset 4296146944 ++=== IO: pattern 0 ++wrote 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296163328 ++wrote 8192/8192 bytes at offset 4296163328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296179712 ++wrote 8192/8192 bytes at offset 4296179712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296196096 ++wrote 8192/8192 bytes at offset 4296196096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296212480 ++wrote 8192/8192 bytes at offset 4296212480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296228864 ++wrote 8192/8192 bytes at offset 4296228864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296245248 ++wrote 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296261632 ++wrote 8192/8192 bytes at offset 4296261632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296278016 ++wrote 8192/8192 bytes at offset 4296278016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296294400 ++wrote 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296310784 ++wrote 8192/8192 bytes at offset 4296310784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296327168 ++wrote 8192/8192 bytes at offset 4296327168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296343552 ++wrote 8192/8192 bytes at offset 4296343552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296359936 ++wrote 8192/8192 bytes at offset 4296359936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296376320 ++wrote 8192/8192 bytes at offset 4296376320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296392704 ++wrote 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296409088 ++wrote 8192/8192 bytes at offset 4296409088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296425472 ++wrote 8192/8192 bytes at offset 4296425472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296441856 ++wrote 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296458240 ++wrote 8192/8192 bytes at offset 4296458240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296474624 ++wrote 8192/8192 bytes at offset 4296474624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296491008 ++wrote 8192/8192 bytes at offset 4296491008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296507392 ++wrote 8192/8192 bytes at offset 4296507392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296523776 ++wrote 8192/8192 bytes at offset 4296523776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296540160 ++wrote 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296556544 ++wrote 8192/8192 bytes at offset 4296556544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296572928 ++wrote 8192/8192 bytes at offset 4296572928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296589312 ++wrote 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296605696 ++wrote 8192/8192 bytes at offset 4296605696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296622080 ++wrote 8192/8192 bytes at offset 4296622080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296638464 ++wrote 8192/8192 bytes at offset 4296638464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296654848 ++wrote 8192/8192 bytes at offset 4296654848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296671232 ++wrote 8192/8192 bytes at offset 4296671232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296687616 ++wrote 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296704000 ++wrote 8192/8192 bytes at offset 4296704000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296720384 ++wrote 8192/8192 bytes at offset 4296720384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> wrote 8192/8192 bytes at offset 4296740864 ++=== IO: pattern 136 ++wrote 8192/8192 bytes at offset 4296740864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296757248 ++wrote 8192/8192 bytes at offset 4296757248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296773632 ++wrote 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296790016 ++wrote 8192/8192 bytes at offset 4296790016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296806400 ++wrote 8192/8192 bytes at offset 4296806400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296822784 ++wrote 8192/8192 bytes at offset 4296822784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296839168 ++wrote 8192/8192 bytes at offset 4296839168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296855552 ++wrote 8192/8192 bytes at offset 4296855552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296871936 ++wrote 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296888320 ++wrote 8192/8192 bytes at offset 4296888320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296904704 ++wrote 8192/8192 bytes at offset 4296904704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296921088 ++wrote 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296937472 ++wrote 8192/8192 bytes at offset 4296937472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296953856 ++wrote 8192/8192 bytes at offset 4296953856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296970240 ++wrote 8192/8192 bytes at offset 4296970240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296986624 ++wrote 8192/8192 bytes at offset 4296986624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297003008 ++wrote 8192/8192 bytes at offset 4297003008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297019392 ++wrote 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297035776 ++wrote 8192/8192 bytes at offset 4297035776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297052160 ++wrote 8192/8192 bytes at offset 4297052160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297068544 ++wrote 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297084928 ++wrote 8192/8192 bytes at offset 4297084928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297101312 ++wrote 8192/8192 bytes at offset 4297101312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297117696 ++wrote 8192/8192 bytes at offset 4297117696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297134080 ++wrote 8192/8192 bytes at offset 4297134080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297150464 ++wrote 8192/8192 bytes at offset 4297150464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297166848 ++wrote 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297183232 ++wrote 8192/8192 bytes at offset 4297183232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297199616 ++wrote 8192/8192 bytes at offset 4297199616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297216000 ++wrote 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297232384 ++wrote 8192/8192 bytes at offset 4297232384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297248768 ++wrote 8192/8192 bytes at offset 4297248768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297265152 ++wrote 8192/8192 bytes at offset 4297265152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297281536 ++wrote 8192/8192 bytes at offset 4297281536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297297920 ++wrote 8192/8192 bytes at offset 4297297920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297314304 ++wrote 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> wrote 32768/32768 bytes at offset 4297334784 ++=== IO: pattern 16 ++wrote 32768/32768 bytes at offset 4297334784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297383936 ++wrote 32768/32768 bytes at offset 4297383936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297433088 ++wrote 32768/32768 bytes at offset 4297433088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297482240 ++wrote 32768/32768 bytes at offset 4297482240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297531392 ++wrote 32768/32768 bytes at offset 4297531392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297580544 ++wrote 32768/32768 bytes at offset 4297580544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297629696 ++wrote 32768/32768 bytes at offset 4297629696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297678848 ++wrote 32768/32768 bytes at offset 4297678848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297728000 ++wrote 32768/32768 bytes at offset 4297728000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4362059776 ++wrote 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4395622400 ++wrote 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4294983680 ++read 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295000064 ++read 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295016448 ++read 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295032832 ++read 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295049216 ++read 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295065600 ++read 16384/16384 bytes at offset 4295065600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295081984 ++read 16384/16384 bytes at offset 4295081984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295098368 ++read 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295114752 ++read 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295131136 ++read 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295147520 ++read 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295163904 ++read 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295180288 ++read 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295196672 ++read 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295213056 ++read 16384/16384 bytes at offset 4295213056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295229440 ++read 16384/16384 bytes at offset 4295229440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295245824 ++read 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295262208 ++read 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295278592 ++read 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295294976 ++read 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295311360 ++read 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295327744 ++read 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295344128 ++read 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295360512 ++read 16384/16384 bytes at offset 4295360512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295376896 ++read 16384/16384 bytes at offset 4295376896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393280 ++read 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295409664 ++read 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295426048 ++read 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442432 ++read 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295458816 ++read 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295475200 ++read 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295491584 ++read 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295507968 ++read 16384/16384 bytes at offset 4295507968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295524352 ++read 16384/16384 bytes at offset 4295524352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295540736 ++read 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 4295565312 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 4295565312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295581696 ++read 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295598080 ++read 8192/8192 bytes at offset 4295598080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295614464 ++read 8192/8192 bytes at offset 4295614464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295630848 ++read 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295647232 ++read 8192/8192 bytes at offset 4295647232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295663616 ++read 8192/8192 bytes at offset 4295663616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295680000 ++read 8192/8192 bytes at offset 4295680000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295696384 ++read 8192/8192 bytes at offset 4295696384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295712768 ++read 8192/8192 bytes at offset 4295712768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729152 ++read 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295745536 ++read 8192/8192 bytes at offset 4295745536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295761920 ++read 8192/8192 bytes at offset 4295761920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778304 ++read 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295794688 ++read 8192/8192 bytes at offset 4295794688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295811072 ++read 8192/8192 bytes at offset 4295811072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295827456 ++read 8192/8192 bytes at offset 4295827456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295843840 ++read 8192/8192 bytes at offset 4295843840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295860224 ++read 8192/8192 bytes at offset 4295860224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295876608 ++read 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295892992 ++read 8192/8192 bytes at offset 4295892992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295909376 ++read 8192/8192 bytes at offset 4295909376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295925760 ++read 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295942144 ++read 8192/8192 bytes at offset 4295942144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295958528 ++read 8192/8192 bytes at offset 4295958528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295974912 ++read 8192/8192 bytes at offset 4295974912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295991296 ++read 8192/8192 bytes at offset 4295991296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296007680 ++read 8192/8192 bytes at offset 4296007680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024064 ++read 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296040448 ++read 8192/8192 bytes at offset 4296040448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296056832 ++read 8192/8192 bytes at offset 4296056832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073216 ++read 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296089600 ++read 8192/8192 bytes at offset 4296089600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296105984 ++read 8192/8192 bytes at offset 4296105984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296122368 ++read 8192/8192 bytes at offset 4296122368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296138752 ++read 8192/8192 bytes at offset 4296138752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 4296146944 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296163328 ++read 8192/8192 bytes at offset 4296163328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296179712 ++read 8192/8192 bytes at offset 4296179712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296196096 ++read 8192/8192 bytes at offset 4296196096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296212480 ++read 8192/8192 bytes at offset 4296212480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296228864 ++read 8192/8192 bytes at offset 4296228864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245248 ++read 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296261632 ++read 8192/8192 bytes at offset 4296261632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296278016 ++read 8192/8192 bytes at offset 4296278016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294400 ++read 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296310784 ++read 8192/8192 bytes at offset 4296310784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296327168 ++read 8192/8192 bytes at offset 4296327168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296343552 ++read 8192/8192 bytes at offset 4296343552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296359936 ++read 8192/8192 bytes at offset 4296359936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296376320 ++read 8192/8192 bytes at offset 4296376320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296392704 ++read 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296409088 ++read 8192/8192 bytes at offset 4296409088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296425472 ++read 8192/8192 bytes at offset 4296425472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296441856 ++read 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296458240 ++read 8192/8192 bytes at offset 4296458240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296474624 ++read 8192/8192 bytes at offset 4296474624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296491008 ++read 8192/8192 bytes at offset 4296491008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296507392 ++read 8192/8192 bytes at offset 4296507392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296523776 ++read 8192/8192 bytes at offset 4296523776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540160 ++read 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296556544 ++read 8192/8192 bytes at offset 4296556544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296572928 ++read 8192/8192 bytes at offset 4296572928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589312 ++read 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296605696 ++read 8192/8192 bytes at offset 4296605696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296622080 ++read 8192/8192 bytes at offset 4296622080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296638464 ++read 8192/8192 bytes at offset 4296638464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296654848 ++read 8192/8192 bytes at offset 4296654848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296671232 ++read 8192/8192 bytes at offset 4296671232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296687616 ++read 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296704000 ++read 8192/8192 bytes at offset 4296704000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296720384 ++read 8192/8192 bytes at offset 4296720384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 4296740864 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 4296740864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296757248 ++read 8192/8192 bytes at offset 4296757248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296773632 ++read 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296790016 ++read 8192/8192 bytes at offset 4296790016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296806400 ++read 8192/8192 bytes at offset 4296806400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296822784 ++read 8192/8192 bytes at offset 4296822784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296839168 ++read 8192/8192 bytes at offset 4296839168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296855552 ++read 8192/8192 bytes at offset 4296855552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296871936 ++read 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296888320 ++read 8192/8192 bytes at offset 4296888320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296904704 ++read 8192/8192 bytes at offset 4296904704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921088 ++read 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296937472 ++read 8192/8192 bytes at offset 4296937472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296953856 ++read 8192/8192 bytes at offset 4296953856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296970240 ++read 8192/8192 bytes at offset 4296970240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296986624 ++read 8192/8192 bytes at offset 4296986624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297003008 ++read 8192/8192 bytes at offset 4297003008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019392 ++read 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297035776 ++read 8192/8192 bytes at offset 4297035776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297052160 ++read 8192/8192 bytes at offset 4297052160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297068544 ++read 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297084928 ++read 8192/8192 bytes at offset 4297084928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297101312 ++read 8192/8192 bytes at offset 4297101312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297117696 ++read 8192/8192 bytes at offset 4297117696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297134080 ++read 8192/8192 bytes at offset 4297134080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297150464 ++read 8192/8192 bytes at offset 4297150464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297166848 ++read 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297183232 ++read 8192/8192 bytes at offset 4297183232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297199616 ++read 8192/8192 bytes at offset 4297199616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216000 ++read 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297232384 ++read 8192/8192 bytes at offset 4297232384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297248768 ++read 8192/8192 bytes at offset 4297248768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297265152 ++read 8192/8192 bytes at offset 4297265152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297281536 ++read 8192/8192 bytes at offset 4297281536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297297920 ++read 8192/8192 bytes at offset 4297297920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314304 ++read 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 4297334784 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 4297334784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297383936 ++read 32768/32768 bytes at offset 4297383936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297433088 ++read 32768/32768 bytes at offset 4297433088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297482240 ++read 32768/32768 bytes at offset 4297482240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297531392 ++read 32768/32768 bytes at offset 4297531392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297580544 ++read 32768/32768 bytes at offset 4297580544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297629696 ++read 32768/32768 bytes at offset 4297629696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297678848 ++read 32768/32768 bytes at offset 4297678848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297728000 ++read 32768/32768 bytes at offset 4297728000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4362059776 ++read 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4395622400 ++read 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Compressing image + + Testing compressed image + + With offset 0: + === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 0 ++read 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 16384 ++read 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 32768 ++read 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 49152 ++read 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 65536 ++read 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 81920 ++read 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 98304 ++read 16384/16384 bytes at offset 98304 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 114688 ++read 16384/16384 bytes at offset 114688 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 131072 ++read 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 147456 ++read 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 163840 ++read 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180224 ++read 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 196608 ++read 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 212992 ++read 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 229376 ++read 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 245760 ++read 16384/16384 bytes at offset 245760 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 262144 ++read 16384/16384 bytes at offset 262144 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 278528 ++read 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 294912 ++read 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 311296 ++read 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 327680 ++read 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 344064 ++read 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 360448 ++read 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 376832 ++read 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 393216 ++read 16384/16384 bytes at offset 393216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 409600 ++read 16384/16384 bytes at offset 409600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 425984 ++read 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 442368 ++read 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 458752 ++read 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475136 ++read 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 491520 ++read 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 507904 ++read 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 524288 ++read 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 540672 ++read 16384/16384 bytes at offset 540672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 557056 ++read 16384/16384 bytes at offset 557056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573440 ++read 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 598016 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 598016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614400 ++read 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 630784 ++read 8192/8192 bytes at offset 630784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647168 ++read 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 663552 ++read 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 679936 ++read 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 696320 ++read 8192/8192 bytes at offset 696320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 712704 ++read 8192/8192 bytes at offset 712704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 729088 ++read 8192/8192 bytes at offset 729088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 745472 ++read 8192/8192 bytes at offset 745472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 761856 ++read 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 778240 ++read 8192/8192 bytes at offset 778240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 794624 ++read 8192/8192 bytes at offset 794624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811008 ++read 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 827392 ++read 8192/8192 bytes at offset 827392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 843776 ++read 8192/8192 bytes at offset 843776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 860160 ++read 8192/8192 bytes at offset 860160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 876544 ++read 8192/8192 bytes at offset 876544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 892928 ++read 8192/8192 bytes at offset 892928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909312 ++read 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 925696 ++read 8192/8192 bytes at offset 925696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 942080 ++read 8192/8192 bytes at offset 942080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958464 ++read 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 974848 ++read 8192/8192 bytes at offset 974848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 991232 ++read 8192/8192 bytes at offset 991232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1007616 ++read 8192/8192 bytes at offset 1007616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1024000 ++read 8192/8192 bytes at offset 1024000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040384 ++read 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1056768 ++read 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1073152 ++read 8192/8192 bytes at offset 1073152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1089536 ++read 8192/8192 bytes at offset 1089536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1105920 ++read 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1122304 ++read 8192/8192 bytes at offset 1122304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1138688 ++read 8192/8192 bytes at offset 1138688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1155072 ++read 8192/8192 bytes at offset 1155072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1171456 ++read 8192/8192 bytes at offset 1171456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 1179648 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1196032 ++read 8192/8192 bytes at offset 1196032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1212416 ++read 8192/8192 bytes at offset 1212416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1228800 ++read 8192/8192 bytes at offset 1228800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1245184 ++read 8192/8192 bytes at offset 1245184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1261568 ++read 8192/8192 bytes at offset 1261568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1277952 ++read 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1294336 ++read 8192/8192 bytes at offset 1294336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1310720 ++read 8192/8192 bytes at offset 1310720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327104 ++read 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1343488 ++read 8192/8192 bytes at offset 1343488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1359872 ++read 8192/8192 bytes at offset 1359872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1376256 ++read 8192/8192 bytes at offset 1376256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1392640 ++read 8192/8192 bytes at offset 1392640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1409024 ++read 8192/8192 bytes at offset 1409024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425408 ++read 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1441792 ++read 8192/8192 bytes at offset 1441792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1458176 ++read 8192/8192 bytes at offset 1458176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1474560 ++read 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1490944 ++read 8192/8192 bytes at offset 1490944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1507328 ++read 8192/8192 bytes at offset 1507328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1523712 ++read 8192/8192 bytes at offset 1523712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1540096 ++read 8192/8192 bytes at offset 1540096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1556480 ++read 8192/8192 bytes at offset 1556480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1572864 ++read 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1589248 ++read 8192/8192 bytes at offset 1589248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1605632 ++read 8192/8192 bytes at offset 1605632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622016 ++read 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1638400 ++read 8192/8192 bytes at offset 1638400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1654784 ++read 8192/8192 bytes at offset 1654784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1671168 ++read 8192/8192 bytes at offset 1671168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1687552 ++read 8192/8192 bytes at offset 1687552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1703936 ++read 8192/8192 bytes at offset 1703936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720320 ++read 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1736704 ++read 8192/8192 bytes at offset 1736704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1753088 ++read 8192/8192 bytes at offset 1753088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 1773568 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 1773568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1789952 ++read 8192/8192 bytes at offset 1789952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806336 ++read 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1822720 ++read 8192/8192 bytes at offset 1822720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1839104 ++read 8192/8192 bytes at offset 1839104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1855488 ++read 8192/8192 bytes at offset 1855488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1871872 ++read 8192/8192 bytes at offset 1871872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1888256 ++read 8192/8192 bytes at offset 1888256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1904640 ++read 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1921024 ++read 8192/8192 bytes at offset 1921024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1937408 ++read 8192/8192 bytes at offset 1937408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1953792 ++read 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1970176 ++read 8192/8192 bytes at offset 1970176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1986560 ++read 8192/8192 bytes at offset 1986560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2002944 ++read 8192/8192 bytes at offset 2002944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2019328 ++read 8192/8192 bytes at offset 2019328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2035712 ++read 8192/8192 bytes at offset 2035712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052096 ++read 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2068480 ++read 8192/8192 bytes at offset 2068480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2084864 ++read 8192/8192 bytes at offset 2084864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101248 ++read 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2117632 ++read 8192/8192 bytes at offset 2117632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2134016 ++read 8192/8192 bytes at offset 2134016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2150400 ++read 8192/8192 bytes at offset 2150400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2166784 ++read 8192/8192 bytes at offset 2166784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2183168 ++read 8192/8192 bytes at offset 2183168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2199552 ++read 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2215936 ++read 8192/8192 bytes at offset 2215936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2232320 ++read 8192/8192 bytes at offset 2232320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2248704 ++read 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2265088 ++read 8192/8192 bytes at offset 2265088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2281472 ++read 8192/8192 bytes at offset 2281472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2297856 ++read 8192/8192 bytes at offset 2297856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2314240 ++read 8192/8192 bytes at offset 2314240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2330624 ++read 8192/8192 bytes at offset 2330624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347008 ++read 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 2367488 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 2367488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2416640 ++read 32768/32768 bytes at offset 2416640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2465792 ++read 32768/32768 bytes at offset 2465792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2514944 ++read 32768/32768 bytes at offset 2514944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2564096 ++read 32768/32768 bytes at offset 2564096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2613248 ++read 32768/32768 bytes at offset 2613248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2662400 ++read 32768/32768 bytes at offset 2662400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2711552 ++read 32768/32768 bytes at offset 2711552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2760704 ++read 32768/32768 bytes at offset 2760704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 67092480 ++read 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 100655104 ++read 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 0 ++=== IO: pattern 0 ++read 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 16384 ++read 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 32768 ++read 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 49152 ++read 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 65536 ++read 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 81920 ++read 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 98304 ++read 16384/16384 bytes at offset 98304 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 114688 ++read 16384/16384 bytes at offset 114688 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 131072 ++read 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 147456 ++read 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 163840 ++read 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180224 ++read 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 196608 ++read 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 212992 ++read 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 229376 ++read 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 245760 ++read 16384/16384 bytes at offset 245760 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 262144 ++read 16384/16384 bytes at offset 262144 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 278528 ++read 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 294912 ++read 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 311296 ++read 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 327680 ++read 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 344064 ++read 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 360448 ++read 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 376832 ++read 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 393216 ++read 16384/16384 bytes at offset 393216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 409600 ++read 16384/16384 bytes at offset 409600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 425984 ++read 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 442368 ++read 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 458752 ++read 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475136 ++read 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 491520 ++read 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 507904 ++read 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 524288 ++read 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 540672 ++read 16384/16384 bytes at offset 540672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 557056 ++read 16384/16384 bytes at offset 557056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573440 ++read 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 598016 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 598016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614400 ++read 8192/8192 bytes at offset 614400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 630784 ++read 8192/8192 bytes at offset 630784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647168 ++read 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 663552 ++read 8192/8192 bytes at offset 663552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 679936 ++read 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 696320 ++read 8192/8192 bytes at offset 696320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 712704 ++read 8192/8192 bytes at offset 712704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 729088 ++read 8192/8192 bytes at offset 729088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 745472 ++read 8192/8192 bytes at offset 745472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 761856 ++read 8192/8192 bytes at offset 761856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 778240 ++read 8192/8192 bytes at offset 778240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 794624 ++read 8192/8192 bytes at offset 794624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811008 ++read 8192/8192 bytes at offset 811008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 827392 ++read 8192/8192 bytes at offset 827392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 843776 ++read 8192/8192 bytes at offset 843776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 860160 ++read 8192/8192 bytes at offset 860160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 876544 ++read 8192/8192 bytes at offset 876544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 892928 ++read 8192/8192 bytes at offset 892928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909312 ++read 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 925696 ++read 8192/8192 bytes at offset 925696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 942080 ++read 8192/8192 bytes at offset 942080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958464 ++read 8192/8192 bytes at offset 958464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 974848 ++read 8192/8192 bytes at offset 974848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 991232 ++read 8192/8192 bytes at offset 991232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1007616 ++read 8192/8192 bytes at offset 1007616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1024000 ++read 8192/8192 bytes at offset 1024000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040384 ++read 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1056768 ++read 8192/8192 bytes at offset 1056768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1073152 ++read 8192/8192 bytes at offset 1073152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1089536 ++read 8192/8192 bytes at offset 1089536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1105920 ++read 8192/8192 bytes at offset 1105920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1122304 ++read 8192/8192 bytes at offset 1122304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1138688 ++read 8192/8192 bytes at offset 1138688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1155072 ++read 8192/8192 bytes at offset 1155072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1171456 ++read 8192/8192 bytes at offset 1171456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 1179648 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 1179648 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1196032 ++read 8192/8192 bytes at offset 1196032 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1212416 ++read 8192/8192 bytes at offset 1212416 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1228800 ++read 8192/8192 bytes at offset 1228800 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1245184 ++read 8192/8192 bytes at offset 1245184 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1261568 ++read 8192/8192 bytes at offset 1261568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1277952 ++read 8192/8192 bytes at offset 1277952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1294336 ++read 8192/8192 bytes at offset 1294336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1310720 ++read 8192/8192 bytes at offset 1310720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327104 ++read 8192/8192 bytes at offset 1327104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1343488 ++read 8192/8192 bytes at offset 1343488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1359872 ++read 8192/8192 bytes at offset 1359872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1376256 ++read 8192/8192 bytes at offset 1376256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1392640 ++read 8192/8192 bytes at offset 1392640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1409024 ++read 8192/8192 bytes at offset 1409024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425408 ++read 8192/8192 bytes at offset 1425408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1441792 ++read 8192/8192 bytes at offset 1441792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1458176 ++read 8192/8192 bytes at offset 1458176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1474560 ++read 8192/8192 bytes at offset 1474560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1490944 ++read 8192/8192 bytes at offset 1490944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1507328 ++read 8192/8192 bytes at offset 1507328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1523712 ++read 8192/8192 bytes at offset 1523712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1540096 ++read 8192/8192 bytes at offset 1540096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1556480 ++read 8192/8192 bytes at offset 1556480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1572864 ++read 8192/8192 bytes at offset 1572864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1589248 ++read 8192/8192 bytes at offset 1589248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1605632 ++read 8192/8192 bytes at offset 1605632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622016 ++read 8192/8192 bytes at offset 1622016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1638400 ++read 8192/8192 bytes at offset 1638400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1654784 ++read 8192/8192 bytes at offset 1654784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1671168 ++read 8192/8192 bytes at offset 1671168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1687552 ++read 8192/8192 bytes at offset 1687552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1703936 ++read 8192/8192 bytes at offset 1703936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720320 ++read 8192/8192 bytes at offset 1720320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1736704 ++read 8192/8192 bytes at offset 1736704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1753088 ++read 8192/8192 bytes at offset 1753088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 1773568 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 1773568 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1789952 ++read 8192/8192 bytes at offset 1789952 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806336 ++read 8192/8192 bytes at offset 1806336 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1822720 ++read 8192/8192 bytes at offset 1822720 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1839104 ++read 8192/8192 bytes at offset 1839104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1855488 ++read 8192/8192 bytes at offset 1855488 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1871872 ++read 8192/8192 bytes at offset 1871872 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1888256 ++read 8192/8192 bytes at offset 1888256 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1904640 ++read 8192/8192 bytes at offset 1904640 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1921024 ++read 8192/8192 bytes at offset 1921024 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1937408 ++read 8192/8192 bytes at offset 1937408 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1953792 ++read 8192/8192 bytes at offset 1953792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1970176 ++read 8192/8192 bytes at offset 1970176 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1986560 ++read 8192/8192 bytes at offset 1986560 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2002944 ++read 8192/8192 bytes at offset 2002944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2019328 ++read 8192/8192 bytes at offset 2019328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2035712 ++read 8192/8192 bytes at offset 2035712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052096 ++read 8192/8192 bytes at offset 2052096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2068480 ++read 8192/8192 bytes at offset 2068480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2084864 ++read 8192/8192 bytes at offset 2084864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101248 ++read 8192/8192 bytes at offset 2101248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2117632 ++read 8192/8192 bytes at offset 2117632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2134016 ++read 8192/8192 bytes at offset 2134016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2150400 ++read 8192/8192 bytes at offset 2150400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2166784 ++read 8192/8192 bytes at offset 2166784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2183168 ++read 8192/8192 bytes at offset 2183168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2199552 ++read 8192/8192 bytes at offset 2199552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2215936 ++read 8192/8192 bytes at offset 2215936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2232320 ++read 8192/8192 bytes at offset 2232320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2248704 ++read 8192/8192 bytes at offset 2248704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2265088 ++read 8192/8192 bytes at offset 2265088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2281472 ++read 8192/8192 bytes at offset 2281472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2297856 ++read 8192/8192 bytes at offset 2297856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2314240 ++read 8192/8192 bytes at offset 2314240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2330624 ++read 8192/8192 bytes at offset 2330624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347008 ++read 8192/8192 bytes at offset 2347008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 2367488 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 2367488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2416640 ++read 32768/32768 bytes at offset 2416640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2465792 ++read 32768/32768 bytes at offset 2465792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2514944 ++read 32768/32768 bytes at offset 2514944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2564096 ++read 32768/32768 bytes at offset 2564096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2613248 ++read 32768/32768 bytes at offset 2613248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2662400 ++read 32768/32768 bytes at offset 2662400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2711552 ++read 32768/32768 bytes at offset 2711552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2760704 ++read 32768/32768 bytes at offset 2760704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 67092480 ++read 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 100655104 ++read 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967296: + === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 4294967296 ++read 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4294983680 ++read 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295000064 ++read 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295016448 ++read 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295032832 ++read 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295049216 ++read 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295065600 ++read 16384/16384 bytes at offset 4295065600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295081984 ++read 16384/16384 bytes at offset 4295081984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295098368 ++read 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295114752 ++read 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295131136 ++read 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295147520 ++read 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295163904 ++read 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295180288 ++read 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295196672 ++read 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295213056 ++read 16384/16384 bytes at offset 4295213056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295229440 ++read 16384/16384 bytes at offset 4295229440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295245824 ++read 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295262208 ++read 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295278592 ++read 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295294976 ++read 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295311360 ++read 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295327744 ++read 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295344128 ++read 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295360512 ++read 16384/16384 bytes at offset 4295360512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295376896 ++read 16384/16384 bytes at offset 4295376896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393280 ++read 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295409664 ++read 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295426048 ++read 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442432 ++read 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295458816 ++read 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295475200 ++read 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295491584 ++read 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295507968 ++read 16384/16384 bytes at offset 4295507968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295524352 ++read 16384/16384 bytes at offset 4295524352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295540736 ++read 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 4295565312 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 4295565312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295581696 ++read 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295598080 ++read 8192/8192 bytes at offset 4295598080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295614464 ++read 8192/8192 bytes at offset 4295614464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295630848 ++read 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295647232 ++read 8192/8192 bytes at offset 4295647232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295663616 ++read 8192/8192 bytes at offset 4295663616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295680000 ++read 8192/8192 bytes at offset 4295680000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295696384 ++read 8192/8192 bytes at offset 4295696384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295712768 ++read 8192/8192 bytes at offset 4295712768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729152 ++read 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295745536 ++read 8192/8192 bytes at offset 4295745536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295761920 ++read 8192/8192 bytes at offset 4295761920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778304 ++read 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295794688 ++read 8192/8192 bytes at offset 4295794688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295811072 ++read 8192/8192 bytes at offset 4295811072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295827456 ++read 8192/8192 bytes at offset 4295827456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295843840 ++read 8192/8192 bytes at offset 4295843840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295860224 ++read 8192/8192 bytes at offset 4295860224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295876608 ++read 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295892992 ++read 8192/8192 bytes at offset 4295892992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295909376 ++read 8192/8192 bytes at offset 4295909376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295925760 ++read 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295942144 ++read 8192/8192 bytes at offset 4295942144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295958528 ++read 8192/8192 bytes at offset 4295958528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295974912 ++read 8192/8192 bytes at offset 4295974912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295991296 ++read 8192/8192 bytes at offset 4295991296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296007680 ++read 8192/8192 bytes at offset 4296007680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024064 ++read 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296040448 ++read 8192/8192 bytes at offset 4296040448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296056832 ++read 8192/8192 bytes at offset 4296056832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073216 ++read 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296089600 ++read 8192/8192 bytes at offset 4296089600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296105984 ++read 8192/8192 bytes at offset 4296105984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296122368 ++read 8192/8192 bytes at offset 4296122368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296138752 ++read 8192/8192 bytes at offset 4296138752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 4296146944 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296163328 ++read 8192/8192 bytes at offset 4296163328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296179712 ++read 8192/8192 bytes at offset 4296179712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296196096 ++read 8192/8192 bytes at offset 4296196096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296212480 ++read 8192/8192 bytes at offset 4296212480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296228864 ++read 8192/8192 bytes at offset 4296228864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245248 ++read 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296261632 ++read 8192/8192 bytes at offset 4296261632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296278016 ++read 8192/8192 bytes at offset 4296278016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294400 ++read 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296310784 ++read 8192/8192 bytes at offset 4296310784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296327168 ++read 8192/8192 bytes at offset 4296327168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296343552 ++read 8192/8192 bytes at offset 4296343552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296359936 ++read 8192/8192 bytes at offset 4296359936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296376320 ++read 8192/8192 bytes at offset 4296376320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296392704 ++read 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296409088 ++read 8192/8192 bytes at offset 4296409088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296425472 ++read 8192/8192 bytes at offset 4296425472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296441856 ++read 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296458240 ++read 8192/8192 bytes at offset 4296458240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296474624 ++read 8192/8192 bytes at offset 4296474624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296491008 ++read 8192/8192 bytes at offset 4296491008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296507392 ++read 8192/8192 bytes at offset 4296507392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296523776 ++read 8192/8192 bytes at offset 4296523776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540160 ++read 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296556544 ++read 8192/8192 bytes at offset 4296556544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296572928 ++read 8192/8192 bytes at offset 4296572928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589312 ++read 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296605696 ++read 8192/8192 bytes at offset 4296605696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296622080 ++read 8192/8192 bytes at offset 4296622080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296638464 ++read 8192/8192 bytes at offset 4296638464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296654848 ++read 8192/8192 bytes at offset 4296654848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296671232 ++read 8192/8192 bytes at offset 4296671232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296687616 ++read 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296704000 ++read 8192/8192 bytes at offset 4296704000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296720384 ++read 8192/8192 bytes at offset 4296720384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 4296740864 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 4296740864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296757248 ++read 8192/8192 bytes at offset 4296757248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296773632 ++read 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296790016 ++read 8192/8192 bytes at offset 4296790016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296806400 ++read 8192/8192 bytes at offset 4296806400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296822784 ++read 8192/8192 bytes at offset 4296822784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296839168 ++read 8192/8192 bytes at offset 4296839168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296855552 ++read 8192/8192 bytes at offset 4296855552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296871936 ++read 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296888320 ++read 8192/8192 bytes at offset 4296888320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296904704 ++read 8192/8192 bytes at offset 4296904704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921088 ++read 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296937472 ++read 8192/8192 bytes at offset 4296937472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296953856 ++read 8192/8192 bytes at offset 4296953856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296970240 ++read 8192/8192 bytes at offset 4296970240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296986624 ++read 8192/8192 bytes at offset 4296986624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297003008 ++read 8192/8192 bytes at offset 4297003008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019392 ++read 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297035776 ++read 8192/8192 bytes at offset 4297035776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297052160 ++read 8192/8192 bytes at offset 4297052160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297068544 ++read 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297084928 ++read 8192/8192 bytes at offset 4297084928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297101312 ++read 8192/8192 bytes at offset 4297101312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297117696 ++read 8192/8192 bytes at offset 4297117696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297134080 ++read 8192/8192 bytes at offset 4297134080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297150464 ++read 8192/8192 bytes at offset 4297150464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297166848 ++read 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297183232 ++read 8192/8192 bytes at offset 4297183232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297199616 ++read 8192/8192 bytes at offset 4297199616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216000 ++read 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297232384 ++read 8192/8192 bytes at offset 4297232384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297248768 ++read 8192/8192 bytes at offset 4297248768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297265152 ++read 8192/8192 bytes at offset 4297265152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297281536 ++read 8192/8192 bytes at offset 4297281536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297297920 ++read 8192/8192 bytes at offset 4297297920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314304 ++read 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 4297334784 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 4297334784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297383936 ++read 32768/32768 bytes at offset 4297383936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297433088 ++read 32768/32768 bytes at offset 4297433088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297482240 ++read 32768/32768 bytes at offset 4297482240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297531392 ++read 32768/32768 bytes at offset 4297531392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297580544 ++read 32768/32768 bytes at offset 4297580544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297629696 ++read 32768/32768 bytes at offset 4297629696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297678848 ++read 32768/32768 bytes at offset 4297678848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297728000 ++read 32768/32768 bytes at offset 4297728000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4362059776 ++read 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4395622400 ++read 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4294983680 ++read 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295000064 ++read 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295016448 ++read 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295032832 ++read 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295049216 ++read 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295065600 ++read 16384/16384 bytes at offset 4295065600 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295081984 ++read 16384/16384 bytes at offset 4295081984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295098368 ++read 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295114752 ++read 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295131136 ++read 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295147520 ++read 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295163904 ++read 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295180288 ++read 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295196672 ++read 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295213056 ++read 16384/16384 bytes at offset 4295213056 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295229440 ++read 16384/16384 bytes at offset 4295229440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295245824 ++read 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295262208 ++read 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295278592 ++read 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295294976 ++read 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295311360 ++read 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295327744 ++read 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295344128 ++read 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295360512 ++read 16384/16384 bytes at offset 4295360512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295376896 ++read 16384/16384 bytes at offset 4295376896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393280 ++read 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295409664 ++read 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295426048 ++read 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442432 ++read 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295458816 ++read 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295475200 ++read 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295491584 ++read 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295507968 ++read 16384/16384 bytes at offset 4295507968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295524352 ++read 16384/16384 bytes at offset 4295524352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295540736 ++read 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 144 +-qemu-io> read 8192/8192 bytes at offset 4295565312 ++=== IO: pattern 144 ++read 8192/8192 bytes at offset 4295565312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295581696 ++read 8192/8192 bytes at offset 4295581696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295598080 ++read 8192/8192 bytes at offset 4295598080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295614464 ++read 8192/8192 bytes at offset 4295614464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295630848 ++read 8192/8192 bytes at offset 4295630848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295647232 ++read 8192/8192 bytes at offset 4295647232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295663616 ++read 8192/8192 bytes at offset 4295663616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295680000 ++read 8192/8192 bytes at offset 4295680000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295696384 ++read 8192/8192 bytes at offset 4295696384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295712768 ++read 8192/8192 bytes at offset 4295712768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729152 ++read 8192/8192 bytes at offset 4295729152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295745536 ++read 8192/8192 bytes at offset 4295745536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295761920 ++read 8192/8192 bytes at offset 4295761920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778304 ++read 8192/8192 bytes at offset 4295778304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295794688 ++read 8192/8192 bytes at offset 4295794688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295811072 ++read 8192/8192 bytes at offset 4295811072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295827456 ++read 8192/8192 bytes at offset 4295827456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295843840 ++read 8192/8192 bytes at offset 4295843840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295860224 ++read 8192/8192 bytes at offset 4295860224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295876608 ++read 8192/8192 bytes at offset 4295876608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295892992 ++read 8192/8192 bytes at offset 4295892992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295909376 ++read 8192/8192 bytes at offset 4295909376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295925760 ++read 8192/8192 bytes at offset 4295925760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295942144 ++read 8192/8192 bytes at offset 4295942144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295958528 ++read 8192/8192 bytes at offset 4295958528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295974912 ++read 8192/8192 bytes at offset 4295974912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295991296 ++read 8192/8192 bytes at offset 4295991296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296007680 ++read 8192/8192 bytes at offset 4296007680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024064 ++read 8192/8192 bytes at offset 4296024064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296040448 ++read 8192/8192 bytes at offset 4296040448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296056832 ++read 8192/8192 bytes at offset 4296056832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073216 ++read 8192/8192 bytes at offset 4296073216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296089600 ++read 8192/8192 bytes at offset 4296089600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296105984 ++read 8192/8192 bytes at offset 4296105984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296122368 ++read 8192/8192 bytes at offset 4296122368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296138752 ++read 8192/8192 bytes at offset 4296138752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 8192/8192 bytes at offset 4296146944 ++=== IO: pattern 0 ++read 8192/8192 bytes at offset 4296146944 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296163328 ++read 8192/8192 bytes at offset 4296163328 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296179712 ++read 8192/8192 bytes at offset 4296179712 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296196096 ++read 8192/8192 bytes at offset 4296196096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296212480 ++read 8192/8192 bytes at offset 4296212480 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296228864 ++read 8192/8192 bytes at offset 4296228864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245248 ++read 8192/8192 bytes at offset 4296245248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296261632 ++read 8192/8192 bytes at offset 4296261632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296278016 ++read 8192/8192 bytes at offset 4296278016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294400 ++read 8192/8192 bytes at offset 4296294400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296310784 ++read 8192/8192 bytes at offset 4296310784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296327168 ++read 8192/8192 bytes at offset 4296327168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296343552 ++read 8192/8192 bytes at offset 4296343552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296359936 ++read 8192/8192 bytes at offset 4296359936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296376320 ++read 8192/8192 bytes at offset 4296376320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296392704 ++read 8192/8192 bytes at offset 4296392704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296409088 ++read 8192/8192 bytes at offset 4296409088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296425472 ++read 8192/8192 bytes at offset 4296425472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296441856 ++read 8192/8192 bytes at offset 4296441856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296458240 ++read 8192/8192 bytes at offset 4296458240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296474624 ++read 8192/8192 bytes at offset 4296474624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296491008 ++read 8192/8192 bytes at offset 4296491008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296507392 ++read 8192/8192 bytes at offset 4296507392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296523776 ++read 8192/8192 bytes at offset 4296523776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540160 ++read 8192/8192 bytes at offset 4296540160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296556544 ++read 8192/8192 bytes at offset 4296556544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296572928 ++read 8192/8192 bytes at offset 4296572928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589312 ++read 8192/8192 bytes at offset 4296589312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296605696 ++read 8192/8192 bytes at offset 4296605696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296622080 ++read 8192/8192 bytes at offset 4296622080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296638464 ++read 8192/8192 bytes at offset 4296638464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296654848 ++read 8192/8192 bytes at offset 4296654848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296671232 ++read 8192/8192 bytes at offset 4296671232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296687616 ++read 8192/8192 bytes at offset 4296687616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296704000 ++read 8192/8192 bytes at offset 4296704000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296720384 ++read 8192/8192 bytes at offset 4296720384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 136 +-qemu-io> read 8192/8192 bytes at offset 4296740864 ++=== IO: pattern 136 ++read 8192/8192 bytes at offset 4296740864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296757248 ++read 8192/8192 bytes at offset 4296757248 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296773632 ++read 8192/8192 bytes at offset 4296773632 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296790016 ++read 8192/8192 bytes at offset 4296790016 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296806400 ++read 8192/8192 bytes at offset 4296806400 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296822784 ++read 8192/8192 bytes at offset 4296822784 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296839168 ++read 8192/8192 bytes at offset 4296839168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296855552 ++read 8192/8192 bytes at offset 4296855552 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296871936 ++read 8192/8192 bytes at offset 4296871936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296888320 ++read 8192/8192 bytes at offset 4296888320 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296904704 ++read 8192/8192 bytes at offset 4296904704 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921088 ++read 8192/8192 bytes at offset 4296921088 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296937472 ++read 8192/8192 bytes at offset 4296937472 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296953856 ++read 8192/8192 bytes at offset 4296953856 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296970240 ++read 8192/8192 bytes at offset 4296970240 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296986624 ++read 8192/8192 bytes at offset 4296986624 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297003008 ++read 8192/8192 bytes at offset 4297003008 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019392 ++read 8192/8192 bytes at offset 4297019392 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297035776 ++read 8192/8192 bytes at offset 4297035776 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297052160 ++read 8192/8192 bytes at offset 4297052160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297068544 ++read 8192/8192 bytes at offset 4297068544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297084928 ++read 8192/8192 bytes at offset 4297084928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297101312 ++read 8192/8192 bytes at offset 4297101312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297117696 ++read 8192/8192 bytes at offset 4297117696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297134080 ++read 8192/8192 bytes at offset 4297134080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297150464 ++read 8192/8192 bytes at offset 4297150464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297166848 ++read 8192/8192 bytes at offset 4297166848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297183232 ++read 8192/8192 bytes at offset 4297183232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297199616 ++read 8192/8192 bytes at offset 4297199616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216000 ++read 8192/8192 bytes at offset 4297216000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297232384 ++read 8192/8192 bytes at offset 4297232384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297248768 ++read 8192/8192 bytes at offset 4297248768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297265152 ++read 8192/8192 bytes at offset 4297265152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297281536 ++read 8192/8192 bytes at offset 4297281536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297297920 ++read 8192/8192 bytes at offset 4297297920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314304 ++read 8192/8192 bytes at offset 4297314304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 16 +-qemu-io> read 32768/32768 bytes at offset 4297334784 ++=== IO: pattern 16 ++read 32768/32768 bytes at offset 4297334784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297383936 ++read 32768/32768 bytes at offset 4297383936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297433088 ++read 32768/32768 bytes at offset 4297433088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297482240 ++read 32768/32768 bytes at offset 4297482240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297531392 ++read 32768/32768 bytes at offset 4297531392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297580544 ++read 32768/32768 bytes at offset 4297580544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297629696 ++read 32768/32768 bytes at offset 4297629696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297678848 ++read 32768/32768 bytes at offset 4297678848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297728000 ++read 32768/32768 bytes at offset 4297728000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4362059776 ++read 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4395622400 ++read 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Testing compressed image with odd offsets + + With offset 512: + === IO: pattern 1 +-qemu-io> wrote 16384/16384 bytes at offset 512 ++wrote 16384/16384 bytes at offset 512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 16896 ++wrote 16384/16384 bytes at offset 16896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 33280 ++wrote 16384/16384 bytes at offset 33280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 49664 ++wrote 16384/16384 bytes at offset 49664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 66048 ++wrote 16384/16384 bytes at offset 66048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 82432 ++wrote 16384/16384 bytes at offset 82432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 98816 ++wrote 16384/16384 bytes at offset 98816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 115200 ++wrote 16384/16384 bytes at offset 115200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 131584 ++wrote 16384/16384 bytes at offset 131584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 147968 ++wrote 16384/16384 bytes at offset 147968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 164352 ++wrote 16384/16384 bytes at offset 164352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 180736 ++wrote 16384/16384 bytes at offset 180736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 197120 ++wrote 16384/16384 bytes at offset 197120 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 213504 ++wrote 16384/16384 bytes at offset 213504 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 229888 ++wrote 16384/16384 bytes at offset 229888 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 246272 ++wrote 16384/16384 bytes at offset 246272 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 262656 ++wrote 16384/16384 bytes at offset 262656 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 279040 ++wrote 16384/16384 bytes at offset 279040 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 295424 ++wrote 16384/16384 bytes at offset 295424 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 311808 ++wrote 16384/16384 bytes at offset 311808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 328192 ++wrote 16384/16384 bytes at offset 328192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 344576 ++wrote 16384/16384 bytes at offset 344576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 360960 ++wrote 16384/16384 bytes at offset 360960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 377344 ++wrote 16384/16384 bytes at offset 377344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 393728 ++wrote 16384/16384 bytes at offset 393728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 410112 ++wrote 16384/16384 bytes at offset 410112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 426496 ++wrote 16384/16384 bytes at offset 426496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 442880 ++wrote 16384/16384 bytes at offset 442880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 459264 ++wrote 16384/16384 bytes at offset 459264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 475648 ++wrote 16384/16384 bytes at offset 475648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 492032 ++wrote 16384/16384 bytes at offset 492032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 508416 ++wrote 16384/16384 bytes at offset 508416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 524800 ++wrote 16384/16384 bytes at offset 524800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 541184 ++wrote 16384/16384 bytes at offset 541184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 557568 ++wrote 16384/16384 bytes at offset 557568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 573952 ++wrote 16384/16384 bytes at offset 573952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 8192/8192 bytes at offset 598528 ++=== IO: pattern 145 ++wrote 8192/8192 bytes at offset 598528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 614912 ++wrote 8192/8192 bytes at offset 614912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 631296 ++wrote 8192/8192 bytes at offset 631296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 647680 ++wrote 8192/8192 bytes at offset 647680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 664064 ++wrote 8192/8192 bytes at offset 664064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 680448 ++wrote 8192/8192 bytes at offset 680448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 696832 ++wrote 8192/8192 bytes at offset 696832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 713216 ++wrote 8192/8192 bytes at offset 713216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 729600 ++wrote 8192/8192 bytes at offset 729600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 745984 ++wrote 8192/8192 bytes at offset 745984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 762368 ++wrote 8192/8192 bytes at offset 762368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 778752 ++wrote 8192/8192 bytes at offset 778752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 795136 ++wrote 8192/8192 bytes at offset 795136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 811520 ++wrote 8192/8192 bytes at offset 811520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 827904 ++wrote 8192/8192 bytes at offset 827904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 844288 ++wrote 8192/8192 bytes at offset 844288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 860672 ++wrote 8192/8192 bytes at offset 860672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 877056 ++wrote 8192/8192 bytes at offset 877056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 893440 ++wrote 8192/8192 bytes at offset 893440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 909824 ++wrote 8192/8192 bytes at offset 909824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 926208 ++wrote 8192/8192 bytes at offset 926208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 942592 ++wrote 8192/8192 bytes at offset 942592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 958976 ++wrote 8192/8192 bytes at offset 958976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 975360 ++wrote 8192/8192 bytes at offset 975360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 991744 ++wrote 8192/8192 bytes at offset 991744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1008128 ++wrote 8192/8192 bytes at offset 1008128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1024512 ++wrote 8192/8192 bytes at offset 1024512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1040896 ++wrote 8192/8192 bytes at offset 1040896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1057280 ++wrote 8192/8192 bytes at offset 1057280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1073664 ++wrote 8192/8192 bytes at offset 1073664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1090048 ++wrote 8192/8192 bytes at offset 1090048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1106432 ++wrote 8192/8192 bytes at offset 1106432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1122816 ++wrote 8192/8192 bytes at offset 1122816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1139200 ++wrote 8192/8192 bytes at offset 1139200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1155584 ++wrote 8192/8192 bytes at offset 1155584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1171968 ++wrote 8192/8192 bytes at offset 1171968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 8192/8192 bytes at offset 1180160 ++=== IO: pattern 1 ++wrote 8192/8192 bytes at offset 1180160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1196544 ++wrote 8192/8192 bytes at offset 1196544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1212928 ++wrote 8192/8192 bytes at offset 1212928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1229312 ++wrote 8192/8192 bytes at offset 1229312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1245696 ++wrote 8192/8192 bytes at offset 1245696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1262080 ++wrote 8192/8192 bytes at offset 1262080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1278464 ++wrote 8192/8192 bytes at offset 1278464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1294848 ++wrote 8192/8192 bytes at offset 1294848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1311232 ++wrote 8192/8192 bytes at offset 1311232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1327616 ++wrote 8192/8192 bytes at offset 1327616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1344000 ++wrote 8192/8192 bytes at offset 1344000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1360384 ++wrote 8192/8192 bytes at offset 1360384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1376768 ++wrote 8192/8192 bytes at offset 1376768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1393152 ++wrote 8192/8192 bytes at offset 1393152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1409536 ++wrote 8192/8192 bytes at offset 1409536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1425920 ++wrote 8192/8192 bytes at offset 1425920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1442304 ++wrote 8192/8192 bytes at offset 1442304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1458688 ++wrote 8192/8192 bytes at offset 1458688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1475072 ++wrote 8192/8192 bytes at offset 1475072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1491456 ++wrote 8192/8192 bytes at offset 1491456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1507840 ++wrote 8192/8192 bytes at offset 1507840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1524224 ++wrote 8192/8192 bytes at offset 1524224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1540608 ++wrote 8192/8192 bytes at offset 1540608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1556992 ++wrote 8192/8192 bytes at offset 1556992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1573376 ++wrote 8192/8192 bytes at offset 1573376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1589760 ++wrote 8192/8192 bytes at offset 1589760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1606144 ++wrote 8192/8192 bytes at offset 1606144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1622528 ++wrote 8192/8192 bytes at offset 1622528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1638912 ++wrote 8192/8192 bytes at offset 1638912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1655296 ++wrote 8192/8192 bytes at offset 1655296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1671680 ++wrote 8192/8192 bytes at offset 1671680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1688064 ++wrote 8192/8192 bytes at offset 1688064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1704448 ++wrote 8192/8192 bytes at offset 1704448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1720832 ++wrote 8192/8192 bytes at offset 1720832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1737216 ++wrote 8192/8192 bytes at offset 1737216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1753600 ++wrote 8192/8192 bytes at offset 1753600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> wrote 8192/8192 bytes at offset 1774080 ++=== IO: pattern 137 ++wrote 8192/8192 bytes at offset 1774080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1790464 ++wrote 8192/8192 bytes at offset 1790464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1806848 ++wrote 8192/8192 bytes at offset 1806848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1823232 ++wrote 8192/8192 bytes at offset 1823232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1839616 ++wrote 8192/8192 bytes at offset 1839616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1856000 ++wrote 8192/8192 bytes at offset 1856000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1872384 ++wrote 8192/8192 bytes at offset 1872384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1888768 ++wrote 8192/8192 bytes at offset 1888768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1905152 ++wrote 8192/8192 bytes at offset 1905152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1921536 ++wrote 8192/8192 bytes at offset 1921536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1937920 ++wrote 8192/8192 bytes at offset 1937920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1954304 ++wrote 8192/8192 bytes at offset 1954304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1970688 ++wrote 8192/8192 bytes at offset 1970688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1987072 ++wrote 8192/8192 bytes at offset 1987072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2003456 ++wrote 8192/8192 bytes at offset 2003456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2019840 ++wrote 8192/8192 bytes at offset 2019840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2036224 ++wrote 8192/8192 bytes at offset 2036224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2052608 ++wrote 8192/8192 bytes at offset 2052608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2068992 ++wrote 8192/8192 bytes at offset 2068992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2085376 ++wrote 8192/8192 bytes at offset 2085376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2101760 ++wrote 8192/8192 bytes at offset 2101760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2118144 ++wrote 8192/8192 bytes at offset 2118144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2134528 ++wrote 8192/8192 bytes at offset 2134528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2150912 ++wrote 8192/8192 bytes at offset 2150912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2167296 ++wrote 8192/8192 bytes at offset 2167296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2183680 ++wrote 8192/8192 bytes at offset 2183680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2200064 ++wrote 8192/8192 bytes at offset 2200064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2216448 ++wrote 8192/8192 bytes at offset 2216448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2232832 ++wrote 8192/8192 bytes at offset 2232832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2249216 ++wrote 8192/8192 bytes at offset 2249216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2265600 ++wrote 8192/8192 bytes at offset 2265600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2281984 ++wrote 8192/8192 bytes at offset 2281984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2298368 ++wrote 8192/8192 bytes at offset 2298368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2314752 ++wrote 8192/8192 bytes at offset 2314752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2331136 ++wrote 8192/8192 bytes at offset 2331136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2347520 ++wrote 8192/8192 bytes at offset 2347520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> wrote 32768/32768 bytes at offset 2368000 ++=== IO: pattern 17 ++wrote 32768/32768 bytes at offset 2368000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2417152 ++wrote 32768/32768 bytes at offset 2417152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2466304 ++wrote 32768/32768 bytes at offset 2466304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2515456 ++wrote 32768/32768 bytes at offset 2515456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2564608 ++wrote 32768/32768 bytes at offset 2564608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2613760 ++wrote 32768/32768 bytes at offset 2613760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2662912 ++wrote 32768/32768 bytes at offset 2662912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2712064 ++wrote 32768/32768 bytes at offset 2712064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2761216 ++wrote 32768/32768 bytes at offset 2761216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 67092480 ++wrote 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 100655104 ++wrote 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 16384/16384 bytes at offset 512 ++=== IO: pattern 1 ++read 16384/16384 bytes at offset 512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 16896 ++read 16384/16384 bytes at offset 16896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 33280 ++read 16384/16384 bytes at offset 33280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 49664 ++read 16384/16384 bytes at offset 49664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 66048 ++read 16384/16384 bytes at offset 66048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 82432 ++read 16384/16384 bytes at offset 82432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 98816 ++read 16384/16384 bytes at offset 98816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 115200 ++read 16384/16384 bytes at offset 115200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 131584 ++read 16384/16384 bytes at offset 131584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 147968 ++read 16384/16384 bytes at offset 147968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 164352 ++read 16384/16384 bytes at offset 164352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180736 ++read 16384/16384 bytes at offset 180736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 197120 ++read 16384/16384 bytes at offset 197120 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 213504 ++read 16384/16384 bytes at offset 213504 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 229888 ++read 16384/16384 bytes at offset 229888 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 246272 ++read 16384/16384 bytes at offset 246272 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 262656 ++read 16384/16384 bytes at offset 262656 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 279040 ++read 16384/16384 bytes at offset 279040 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 295424 ++read 16384/16384 bytes at offset 295424 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 311808 ++read 16384/16384 bytes at offset 311808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 328192 ++read 16384/16384 bytes at offset 328192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 344576 ++read 16384/16384 bytes at offset 344576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 360960 ++read 16384/16384 bytes at offset 360960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 377344 ++read 16384/16384 bytes at offset 377344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 393728 ++read 16384/16384 bytes at offset 393728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 410112 ++read 16384/16384 bytes at offset 410112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 426496 ++read 16384/16384 bytes at offset 426496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 442880 ++read 16384/16384 bytes at offset 442880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 459264 ++read 16384/16384 bytes at offset 459264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475648 ++read 16384/16384 bytes at offset 475648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 492032 ++read 16384/16384 bytes at offset 492032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 508416 ++read 16384/16384 bytes at offset 508416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 524800 ++read 16384/16384 bytes at offset 524800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 541184 ++read 16384/16384 bytes at offset 541184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 557568 ++read 16384/16384 bytes at offset 557568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573952 ++read 16384/16384 bytes at offset 573952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 8192/8192 bytes at offset 598528 ++=== IO: pattern 145 ++read 8192/8192 bytes at offset 598528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614912 ++read 8192/8192 bytes at offset 614912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 631296 ++read 8192/8192 bytes at offset 631296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647680 ++read 8192/8192 bytes at offset 647680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 664064 ++read 8192/8192 bytes at offset 664064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 680448 ++read 8192/8192 bytes at offset 680448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 696832 ++read 8192/8192 bytes at offset 696832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 713216 ++read 8192/8192 bytes at offset 713216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 729600 ++read 8192/8192 bytes at offset 729600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 745984 ++read 8192/8192 bytes at offset 745984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 762368 ++read 8192/8192 bytes at offset 762368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 778752 ++read 8192/8192 bytes at offset 778752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 795136 ++read 8192/8192 bytes at offset 795136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811520 ++read 8192/8192 bytes at offset 811520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 827904 ++read 8192/8192 bytes at offset 827904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 844288 ++read 8192/8192 bytes at offset 844288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 860672 ++read 8192/8192 bytes at offset 860672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 877056 ++read 8192/8192 bytes at offset 877056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 893440 ++read 8192/8192 bytes at offset 893440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909824 ++read 8192/8192 bytes at offset 909824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 926208 ++read 8192/8192 bytes at offset 926208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 942592 ++read 8192/8192 bytes at offset 942592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958976 ++read 8192/8192 bytes at offset 958976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 975360 ++read 8192/8192 bytes at offset 975360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 991744 ++read 8192/8192 bytes at offset 991744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1008128 ++read 8192/8192 bytes at offset 1008128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1024512 ++read 8192/8192 bytes at offset 1024512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040896 ++read 8192/8192 bytes at offset 1040896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1057280 ++read 8192/8192 bytes at offset 1057280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1073664 ++read 8192/8192 bytes at offset 1073664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1090048 ++read 8192/8192 bytes at offset 1090048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1106432 ++read 8192/8192 bytes at offset 1106432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1122816 ++read 8192/8192 bytes at offset 1122816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1139200 ++read 8192/8192 bytes at offset 1139200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1155584 ++read 8192/8192 bytes at offset 1155584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1171968 ++read 8192/8192 bytes at offset 1171968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 8192/8192 bytes at offset 1180160 ++=== IO: pattern 1 ++read 8192/8192 bytes at offset 1180160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1196544 ++read 8192/8192 bytes at offset 1196544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1212928 ++read 8192/8192 bytes at offset 1212928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1229312 ++read 8192/8192 bytes at offset 1229312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1245696 ++read 8192/8192 bytes at offset 1245696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1262080 ++read 8192/8192 bytes at offset 1262080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1278464 ++read 8192/8192 bytes at offset 1278464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1294848 ++read 8192/8192 bytes at offset 1294848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1311232 ++read 8192/8192 bytes at offset 1311232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327616 ++read 8192/8192 bytes at offset 1327616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1344000 ++read 8192/8192 bytes at offset 1344000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1360384 ++read 8192/8192 bytes at offset 1360384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1376768 ++read 8192/8192 bytes at offset 1376768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1393152 ++read 8192/8192 bytes at offset 1393152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1409536 ++read 8192/8192 bytes at offset 1409536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425920 ++read 8192/8192 bytes at offset 1425920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1442304 ++read 8192/8192 bytes at offset 1442304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1458688 ++read 8192/8192 bytes at offset 1458688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1475072 ++read 8192/8192 bytes at offset 1475072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1491456 ++read 8192/8192 bytes at offset 1491456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1507840 ++read 8192/8192 bytes at offset 1507840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1524224 ++read 8192/8192 bytes at offset 1524224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1540608 ++read 8192/8192 bytes at offset 1540608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1556992 ++read 8192/8192 bytes at offset 1556992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1573376 ++read 8192/8192 bytes at offset 1573376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1589760 ++read 8192/8192 bytes at offset 1589760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1606144 ++read 8192/8192 bytes at offset 1606144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622528 ++read 8192/8192 bytes at offset 1622528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1638912 ++read 8192/8192 bytes at offset 1638912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1655296 ++read 8192/8192 bytes at offset 1655296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1671680 ++read 8192/8192 bytes at offset 1671680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1688064 ++read 8192/8192 bytes at offset 1688064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1704448 ++read 8192/8192 bytes at offset 1704448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720832 ++read 8192/8192 bytes at offset 1720832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1737216 ++read 8192/8192 bytes at offset 1737216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1753600 ++read 8192/8192 bytes at offset 1753600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> read 8192/8192 bytes at offset 1774080 ++=== IO: pattern 137 ++read 8192/8192 bytes at offset 1774080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1790464 ++read 8192/8192 bytes at offset 1790464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806848 ++read 8192/8192 bytes at offset 1806848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1823232 ++read 8192/8192 bytes at offset 1823232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1839616 ++read 8192/8192 bytes at offset 1839616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1856000 ++read 8192/8192 bytes at offset 1856000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1872384 ++read 8192/8192 bytes at offset 1872384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1888768 ++read 8192/8192 bytes at offset 1888768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1905152 ++read 8192/8192 bytes at offset 1905152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1921536 ++read 8192/8192 bytes at offset 1921536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1937920 ++read 8192/8192 bytes at offset 1937920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1954304 ++read 8192/8192 bytes at offset 1954304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1970688 ++read 8192/8192 bytes at offset 1970688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1987072 ++read 8192/8192 bytes at offset 1987072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2003456 ++read 8192/8192 bytes at offset 2003456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2019840 ++read 8192/8192 bytes at offset 2019840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2036224 ++read 8192/8192 bytes at offset 2036224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052608 ++read 8192/8192 bytes at offset 2052608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2068992 ++read 8192/8192 bytes at offset 2068992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2085376 ++read 8192/8192 bytes at offset 2085376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101760 ++read 8192/8192 bytes at offset 2101760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2118144 ++read 8192/8192 bytes at offset 2118144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2134528 ++read 8192/8192 bytes at offset 2134528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2150912 ++read 8192/8192 bytes at offset 2150912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2167296 ++read 8192/8192 bytes at offset 2167296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2183680 ++read 8192/8192 bytes at offset 2183680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2200064 ++read 8192/8192 bytes at offset 2200064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2216448 ++read 8192/8192 bytes at offset 2216448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2232832 ++read 8192/8192 bytes at offset 2232832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2249216 ++read 8192/8192 bytes at offset 2249216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2265600 ++read 8192/8192 bytes at offset 2265600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2281984 ++read 8192/8192 bytes at offset 2281984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2298368 ++read 8192/8192 bytes at offset 2298368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2314752 ++read 8192/8192 bytes at offset 2314752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2331136 ++read 8192/8192 bytes at offset 2331136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347520 ++read 8192/8192 bytes at offset 2347520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> read 32768/32768 bytes at offset 2368000 ++=== IO: pattern 17 ++read 32768/32768 bytes at offset 2368000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2417152 ++read 32768/32768 bytes at offset 2417152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2466304 ++read 32768/32768 bytes at offset 2466304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2515456 ++read 32768/32768 bytes at offset 2515456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2564608 ++read 32768/32768 bytes at offset 2564608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2613760 ++read 32768/32768 bytes at offset 2613760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2662912 ++read 32768/32768 bytes at offset 2662912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2712064 ++read 32768/32768 bytes at offset 2712064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2761216 ++read 32768/32768 bytes at offset 2761216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 67092480 ++read 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 100655104 ++read 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 16384/16384 bytes at offset 512 ++=== IO: pattern 1 ++wrote 16384/16384 bytes at offset 512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 16896 ++wrote 16384/16384 bytes at offset 16896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 33280 ++wrote 16384/16384 bytes at offset 33280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 49664 ++wrote 16384/16384 bytes at offset 49664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 66048 ++wrote 16384/16384 bytes at offset 66048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 82432 ++wrote 16384/16384 bytes at offset 82432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 98816 ++wrote 16384/16384 bytes at offset 98816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 115200 ++wrote 16384/16384 bytes at offset 115200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 131584 ++wrote 16384/16384 bytes at offset 131584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 147968 ++wrote 16384/16384 bytes at offset 147968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 164352 ++wrote 16384/16384 bytes at offset 164352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 180736 ++wrote 16384/16384 bytes at offset 180736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 197120 ++wrote 16384/16384 bytes at offset 197120 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 213504 ++wrote 16384/16384 bytes at offset 213504 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 229888 ++wrote 16384/16384 bytes at offset 229888 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 246272 ++wrote 16384/16384 bytes at offset 246272 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 262656 ++wrote 16384/16384 bytes at offset 262656 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 279040 ++wrote 16384/16384 bytes at offset 279040 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 295424 ++wrote 16384/16384 bytes at offset 295424 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 311808 ++wrote 16384/16384 bytes at offset 311808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 328192 ++wrote 16384/16384 bytes at offset 328192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 344576 ++wrote 16384/16384 bytes at offset 344576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 360960 ++wrote 16384/16384 bytes at offset 360960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 377344 ++wrote 16384/16384 bytes at offset 377344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 393728 ++wrote 16384/16384 bytes at offset 393728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 410112 ++wrote 16384/16384 bytes at offset 410112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 426496 ++wrote 16384/16384 bytes at offset 426496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 442880 ++wrote 16384/16384 bytes at offset 442880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 459264 ++wrote 16384/16384 bytes at offset 459264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 475648 ++wrote 16384/16384 bytes at offset 475648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 492032 ++wrote 16384/16384 bytes at offset 492032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 508416 ++wrote 16384/16384 bytes at offset 508416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 524800 ++wrote 16384/16384 bytes at offset 524800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 541184 ++wrote 16384/16384 bytes at offset 541184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 557568 ++wrote 16384/16384 bytes at offset 557568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 573952 ++wrote 16384/16384 bytes at offset 573952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 8192/8192 bytes at offset 598528 ++=== IO: pattern 145 ++wrote 8192/8192 bytes at offset 598528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 614912 ++wrote 8192/8192 bytes at offset 614912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 631296 ++wrote 8192/8192 bytes at offset 631296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 647680 ++wrote 8192/8192 bytes at offset 647680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 664064 ++wrote 8192/8192 bytes at offset 664064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 680448 ++wrote 8192/8192 bytes at offset 680448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 696832 ++wrote 8192/8192 bytes at offset 696832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 713216 ++wrote 8192/8192 bytes at offset 713216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 729600 ++wrote 8192/8192 bytes at offset 729600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 745984 ++wrote 8192/8192 bytes at offset 745984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 762368 ++wrote 8192/8192 bytes at offset 762368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 778752 ++wrote 8192/8192 bytes at offset 778752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 795136 ++wrote 8192/8192 bytes at offset 795136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 811520 ++wrote 8192/8192 bytes at offset 811520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 827904 ++wrote 8192/8192 bytes at offset 827904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 844288 ++wrote 8192/8192 bytes at offset 844288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 860672 ++wrote 8192/8192 bytes at offset 860672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 877056 ++wrote 8192/8192 bytes at offset 877056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 893440 ++wrote 8192/8192 bytes at offset 893440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 909824 ++wrote 8192/8192 bytes at offset 909824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 926208 ++wrote 8192/8192 bytes at offset 926208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 942592 ++wrote 8192/8192 bytes at offset 942592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 958976 ++wrote 8192/8192 bytes at offset 958976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 975360 ++wrote 8192/8192 bytes at offset 975360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 991744 ++wrote 8192/8192 bytes at offset 991744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1008128 ++wrote 8192/8192 bytes at offset 1008128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1024512 ++wrote 8192/8192 bytes at offset 1024512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1040896 ++wrote 8192/8192 bytes at offset 1040896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1057280 ++wrote 8192/8192 bytes at offset 1057280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1073664 ++wrote 8192/8192 bytes at offset 1073664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1090048 ++wrote 8192/8192 bytes at offset 1090048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1106432 ++wrote 8192/8192 bytes at offset 1106432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1122816 ++wrote 8192/8192 bytes at offset 1122816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1139200 ++wrote 8192/8192 bytes at offset 1139200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1155584 ++wrote 8192/8192 bytes at offset 1155584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1171968 ++wrote 8192/8192 bytes at offset 1171968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 8192/8192 bytes at offset 1180160 ++=== IO: pattern 1 ++wrote 8192/8192 bytes at offset 1180160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1196544 ++wrote 8192/8192 bytes at offset 1196544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1212928 ++wrote 8192/8192 bytes at offset 1212928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1229312 ++wrote 8192/8192 bytes at offset 1229312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1245696 ++wrote 8192/8192 bytes at offset 1245696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1262080 ++wrote 8192/8192 bytes at offset 1262080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1278464 ++wrote 8192/8192 bytes at offset 1278464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1294848 ++wrote 8192/8192 bytes at offset 1294848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1311232 ++wrote 8192/8192 bytes at offset 1311232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1327616 ++wrote 8192/8192 bytes at offset 1327616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1344000 ++wrote 8192/8192 bytes at offset 1344000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1360384 ++wrote 8192/8192 bytes at offset 1360384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1376768 ++wrote 8192/8192 bytes at offset 1376768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1393152 ++wrote 8192/8192 bytes at offset 1393152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1409536 ++wrote 8192/8192 bytes at offset 1409536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1425920 ++wrote 8192/8192 bytes at offset 1425920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1442304 ++wrote 8192/8192 bytes at offset 1442304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1458688 ++wrote 8192/8192 bytes at offset 1458688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1475072 ++wrote 8192/8192 bytes at offset 1475072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1491456 ++wrote 8192/8192 bytes at offset 1491456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1507840 ++wrote 8192/8192 bytes at offset 1507840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1524224 ++wrote 8192/8192 bytes at offset 1524224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1540608 ++wrote 8192/8192 bytes at offset 1540608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1556992 ++wrote 8192/8192 bytes at offset 1556992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1573376 ++wrote 8192/8192 bytes at offset 1573376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1589760 ++wrote 8192/8192 bytes at offset 1589760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1606144 ++wrote 8192/8192 bytes at offset 1606144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1622528 ++wrote 8192/8192 bytes at offset 1622528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1638912 ++wrote 8192/8192 bytes at offset 1638912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1655296 ++wrote 8192/8192 bytes at offset 1655296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1671680 ++wrote 8192/8192 bytes at offset 1671680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1688064 ++wrote 8192/8192 bytes at offset 1688064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1704448 ++wrote 8192/8192 bytes at offset 1704448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1720832 ++wrote 8192/8192 bytes at offset 1720832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1737216 ++wrote 8192/8192 bytes at offset 1737216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1753600 ++wrote 8192/8192 bytes at offset 1753600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> wrote 8192/8192 bytes at offset 1774080 ++=== IO: pattern 137 ++wrote 8192/8192 bytes at offset 1774080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1790464 ++wrote 8192/8192 bytes at offset 1790464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1806848 ++wrote 8192/8192 bytes at offset 1806848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1823232 ++wrote 8192/8192 bytes at offset 1823232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1839616 ++wrote 8192/8192 bytes at offset 1839616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1856000 ++wrote 8192/8192 bytes at offset 1856000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1872384 ++wrote 8192/8192 bytes at offset 1872384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1888768 ++wrote 8192/8192 bytes at offset 1888768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1905152 ++wrote 8192/8192 bytes at offset 1905152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1921536 ++wrote 8192/8192 bytes at offset 1921536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1937920 ++wrote 8192/8192 bytes at offset 1937920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1954304 ++wrote 8192/8192 bytes at offset 1954304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1970688 ++wrote 8192/8192 bytes at offset 1970688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 1987072 ++wrote 8192/8192 bytes at offset 1987072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2003456 ++wrote 8192/8192 bytes at offset 2003456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2019840 ++wrote 8192/8192 bytes at offset 2019840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2036224 ++wrote 8192/8192 bytes at offset 2036224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2052608 ++wrote 8192/8192 bytes at offset 2052608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2068992 ++wrote 8192/8192 bytes at offset 2068992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2085376 ++wrote 8192/8192 bytes at offset 2085376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2101760 ++wrote 8192/8192 bytes at offset 2101760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2118144 ++wrote 8192/8192 bytes at offset 2118144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2134528 ++wrote 8192/8192 bytes at offset 2134528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2150912 ++wrote 8192/8192 bytes at offset 2150912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2167296 ++wrote 8192/8192 bytes at offset 2167296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2183680 ++wrote 8192/8192 bytes at offset 2183680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2200064 ++wrote 8192/8192 bytes at offset 2200064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2216448 ++wrote 8192/8192 bytes at offset 2216448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2232832 ++wrote 8192/8192 bytes at offset 2232832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2249216 ++wrote 8192/8192 bytes at offset 2249216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2265600 ++wrote 8192/8192 bytes at offset 2265600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2281984 ++wrote 8192/8192 bytes at offset 2281984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2298368 ++wrote 8192/8192 bytes at offset 2298368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2314752 ++wrote 8192/8192 bytes at offset 2314752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2331136 ++wrote 8192/8192 bytes at offset 2331136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 2347520 ++wrote 8192/8192 bytes at offset 2347520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> wrote 32768/32768 bytes at offset 2368000 ++=== IO: pattern 17 ++wrote 32768/32768 bytes at offset 2368000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2417152 ++wrote 32768/32768 bytes at offset 2417152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2466304 ++wrote 32768/32768 bytes at offset 2466304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2515456 ++wrote 32768/32768 bytes at offset 2515456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2564608 ++wrote 32768/32768 bytes at offset 2564608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2613760 ++wrote 32768/32768 bytes at offset 2613760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2662912 ++wrote 32768/32768 bytes at offset 2662912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2712064 ++wrote 32768/32768 bytes at offset 2712064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2761216 ++wrote 32768/32768 bytes at offset 2761216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 67092480 ++wrote 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 100655104 ++wrote 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 16384/16384 bytes at offset 512 ++=== IO: pattern 1 ++read 16384/16384 bytes at offset 512 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 16896 ++read 16384/16384 bytes at offset 16896 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 33280 ++read 16384/16384 bytes at offset 33280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 49664 ++read 16384/16384 bytes at offset 49664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 66048 ++read 16384/16384 bytes at offset 66048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 82432 ++read 16384/16384 bytes at offset 82432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 98816 ++read 16384/16384 bytes at offset 98816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 115200 ++read 16384/16384 bytes at offset 115200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 131584 ++read 16384/16384 bytes at offset 131584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 147968 ++read 16384/16384 bytes at offset 147968 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 164352 ++read 16384/16384 bytes at offset 164352 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180736 ++read 16384/16384 bytes at offset 180736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 197120 ++read 16384/16384 bytes at offset 197120 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 213504 ++read 16384/16384 bytes at offset 213504 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 229888 ++read 16384/16384 bytes at offset 229888 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 246272 ++read 16384/16384 bytes at offset 246272 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 262656 ++read 16384/16384 bytes at offset 262656 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 279040 ++read 16384/16384 bytes at offset 279040 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 295424 ++read 16384/16384 bytes at offset 295424 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 311808 ++read 16384/16384 bytes at offset 311808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 328192 ++read 16384/16384 bytes at offset 328192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 344576 ++read 16384/16384 bytes at offset 344576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 360960 ++read 16384/16384 bytes at offset 360960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 377344 ++read 16384/16384 bytes at offset 377344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 393728 ++read 16384/16384 bytes at offset 393728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 410112 ++read 16384/16384 bytes at offset 410112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 426496 ++read 16384/16384 bytes at offset 426496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 442880 ++read 16384/16384 bytes at offset 442880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 459264 ++read 16384/16384 bytes at offset 459264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475648 ++read 16384/16384 bytes at offset 475648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 492032 ++read 16384/16384 bytes at offset 492032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 508416 ++read 16384/16384 bytes at offset 508416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 524800 ++read 16384/16384 bytes at offset 524800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 541184 ++read 16384/16384 bytes at offset 541184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 557568 ++read 16384/16384 bytes at offset 557568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573952 ++read 16384/16384 bytes at offset 573952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 8192/8192 bytes at offset 598528 ++=== IO: pattern 145 ++read 8192/8192 bytes at offset 598528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 614912 ++read 8192/8192 bytes at offset 614912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 631296 ++read 8192/8192 bytes at offset 631296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647680 ++read 8192/8192 bytes at offset 647680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 664064 ++read 8192/8192 bytes at offset 664064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 680448 ++read 8192/8192 bytes at offset 680448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 696832 ++read 8192/8192 bytes at offset 696832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 713216 ++read 8192/8192 bytes at offset 713216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 729600 ++read 8192/8192 bytes at offset 729600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 745984 ++read 8192/8192 bytes at offset 745984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 762368 ++read 8192/8192 bytes at offset 762368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 778752 ++read 8192/8192 bytes at offset 778752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 795136 ++read 8192/8192 bytes at offset 795136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 811520 ++read 8192/8192 bytes at offset 811520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 827904 ++read 8192/8192 bytes at offset 827904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 844288 ++read 8192/8192 bytes at offset 844288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 860672 ++read 8192/8192 bytes at offset 860672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 877056 ++read 8192/8192 bytes at offset 877056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 893440 ++read 8192/8192 bytes at offset 893440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909824 ++read 8192/8192 bytes at offset 909824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 926208 ++read 8192/8192 bytes at offset 926208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 942592 ++read 8192/8192 bytes at offset 942592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 958976 ++read 8192/8192 bytes at offset 958976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 975360 ++read 8192/8192 bytes at offset 975360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 991744 ++read 8192/8192 bytes at offset 991744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1008128 ++read 8192/8192 bytes at offset 1008128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1024512 ++read 8192/8192 bytes at offset 1024512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040896 ++read 8192/8192 bytes at offset 1040896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1057280 ++read 8192/8192 bytes at offset 1057280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1073664 ++read 8192/8192 bytes at offset 1073664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1090048 ++read 8192/8192 bytes at offset 1090048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1106432 ++read 8192/8192 bytes at offset 1106432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1122816 ++read 8192/8192 bytes at offset 1122816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1139200 ++read 8192/8192 bytes at offset 1139200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1155584 ++read 8192/8192 bytes at offset 1155584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1171968 ++read 8192/8192 bytes at offset 1171968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 8192/8192 bytes at offset 1180160 ++=== IO: pattern 1 ++read 8192/8192 bytes at offset 1180160 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1196544 ++read 8192/8192 bytes at offset 1196544 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1212928 ++read 8192/8192 bytes at offset 1212928 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1229312 ++read 8192/8192 bytes at offset 1229312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1245696 ++read 8192/8192 bytes at offset 1245696 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1262080 ++read 8192/8192 bytes at offset 1262080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1278464 ++read 8192/8192 bytes at offset 1278464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1294848 ++read 8192/8192 bytes at offset 1294848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1311232 ++read 8192/8192 bytes at offset 1311232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1327616 ++read 8192/8192 bytes at offset 1327616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1344000 ++read 8192/8192 bytes at offset 1344000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1360384 ++read 8192/8192 bytes at offset 1360384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1376768 ++read 8192/8192 bytes at offset 1376768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1393152 ++read 8192/8192 bytes at offset 1393152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1409536 ++read 8192/8192 bytes at offset 1409536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1425920 ++read 8192/8192 bytes at offset 1425920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1442304 ++read 8192/8192 bytes at offset 1442304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1458688 ++read 8192/8192 bytes at offset 1458688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1475072 ++read 8192/8192 bytes at offset 1475072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1491456 ++read 8192/8192 bytes at offset 1491456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1507840 ++read 8192/8192 bytes at offset 1507840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1524224 ++read 8192/8192 bytes at offset 1524224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1540608 ++read 8192/8192 bytes at offset 1540608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1556992 ++read 8192/8192 bytes at offset 1556992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1573376 ++read 8192/8192 bytes at offset 1573376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1589760 ++read 8192/8192 bytes at offset 1589760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1606144 ++read 8192/8192 bytes at offset 1606144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1622528 ++read 8192/8192 bytes at offset 1622528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1638912 ++read 8192/8192 bytes at offset 1638912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1655296 ++read 8192/8192 bytes at offset 1655296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1671680 ++read 8192/8192 bytes at offset 1671680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1688064 ++read 8192/8192 bytes at offset 1688064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1704448 ++read 8192/8192 bytes at offset 1704448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1720832 ++read 8192/8192 bytes at offset 1720832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1737216 ++read 8192/8192 bytes at offset 1737216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1753600 ++read 8192/8192 bytes at offset 1753600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> read 8192/8192 bytes at offset 1774080 ++=== IO: pattern 137 ++read 8192/8192 bytes at offset 1774080 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1790464 ++read 8192/8192 bytes at offset 1790464 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1806848 ++read 8192/8192 bytes at offset 1806848 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1823232 ++read 8192/8192 bytes at offset 1823232 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1839616 ++read 8192/8192 bytes at offset 1839616 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1856000 ++read 8192/8192 bytes at offset 1856000 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1872384 ++read 8192/8192 bytes at offset 1872384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1888768 ++read 8192/8192 bytes at offset 1888768 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1905152 ++read 8192/8192 bytes at offset 1905152 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1921536 ++read 8192/8192 bytes at offset 1921536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1937920 ++read 8192/8192 bytes at offset 1937920 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1954304 ++read 8192/8192 bytes at offset 1954304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1970688 ++read 8192/8192 bytes at offset 1970688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1987072 ++read 8192/8192 bytes at offset 1987072 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2003456 ++read 8192/8192 bytes at offset 2003456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2019840 ++read 8192/8192 bytes at offset 2019840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2036224 ++read 8192/8192 bytes at offset 2036224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2052608 ++read 8192/8192 bytes at offset 2052608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2068992 ++read 8192/8192 bytes at offset 2068992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2085376 ++read 8192/8192 bytes at offset 2085376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2101760 ++read 8192/8192 bytes at offset 2101760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2118144 ++read 8192/8192 bytes at offset 2118144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2134528 ++read 8192/8192 bytes at offset 2134528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2150912 ++read 8192/8192 bytes at offset 2150912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2167296 ++read 8192/8192 bytes at offset 2167296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2183680 ++read 8192/8192 bytes at offset 2183680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2200064 ++read 8192/8192 bytes at offset 2200064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2216448 ++read 8192/8192 bytes at offset 2216448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2232832 ++read 8192/8192 bytes at offset 2232832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2249216 ++read 8192/8192 bytes at offset 2249216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2265600 ++read 8192/8192 bytes at offset 2265600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2281984 ++read 8192/8192 bytes at offset 2281984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2298368 ++read 8192/8192 bytes at offset 2298368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2314752 ++read 8192/8192 bytes at offset 2314752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2331136 ++read 8192/8192 bytes at offset 2331136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 2347520 ++read 8192/8192 bytes at offset 2347520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> read 32768/32768 bytes at offset 2368000 ++=== IO: pattern 17 ++read 32768/32768 bytes at offset 2368000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2417152 ++read 32768/32768 bytes at offset 2417152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2466304 ++read 32768/32768 bytes at offset 2466304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2515456 ++read 32768/32768 bytes at offset 2515456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2564608 ++read 32768/32768 bytes at offset 2564608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2613760 ++read 32768/32768 bytes at offset 2613760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2662912 ++read 32768/32768 bytes at offset 2662912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2712064 ++read 32768/32768 bytes at offset 2712064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2761216 ++read 32768/32768 bytes at offset 2761216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 33529856 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 33529856 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 67092480 ++read 49152/49152 bytes at offset 67092480 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 100655104 ++read 49152/49152 bytes at offset 100655104 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967808: + === IO: pattern 1 +-qemu-io> wrote 16384/16384 bytes at offset 4294967808 ++wrote 16384/16384 bytes at offset 4294967808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4294984192 ++wrote 16384/16384 bytes at offset 4294984192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295000576 ++wrote 16384/16384 bytes at offset 4295000576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295016960 ++wrote 16384/16384 bytes at offset 4295016960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295033344 ++wrote 16384/16384 bytes at offset 4295033344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295049728 ++wrote 16384/16384 bytes at offset 4295049728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295066112 ++wrote 16384/16384 bytes at offset 4295066112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295082496 ++wrote 16384/16384 bytes at offset 4295082496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295098880 ++wrote 16384/16384 bytes at offset 4295098880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295115264 ++wrote 16384/16384 bytes at offset 4295115264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295131648 ++wrote 16384/16384 bytes at offset 4295131648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295148032 ++wrote 16384/16384 bytes at offset 4295148032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295164416 ++wrote 16384/16384 bytes at offset 4295164416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295180800 ++wrote 16384/16384 bytes at offset 4295180800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295197184 ++wrote 16384/16384 bytes at offset 4295197184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295213568 ++wrote 16384/16384 bytes at offset 4295213568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295229952 ++wrote 16384/16384 bytes at offset 4295229952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295246336 ++wrote 16384/16384 bytes at offset 4295246336 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295262720 ++wrote 16384/16384 bytes at offset 4295262720 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295279104 ++wrote 16384/16384 bytes at offset 4295279104 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295295488 ++wrote 16384/16384 bytes at offset 4295295488 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295311872 ++wrote 16384/16384 bytes at offset 4295311872 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295328256 ++wrote 16384/16384 bytes at offset 4295328256 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295344640 ++wrote 16384/16384 bytes at offset 4295344640 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295361024 ++wrote 16384/16384 bytes at offset 4295361024 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295377408 ++wrote 16384/16384 bytes at offset 4295377408 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295393792 ++wrote 16384/16384 bytes at offset 4295393792 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295410176 ++wrote 16384/16384 bytes at offset 4295410176 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295426560 ++wrote 16384/16384 bytes at offset 4295426560 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295442944 ++wrote 16384/16384 bytes at offset 4295442944 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295459328 ++wrote 16384/16384 bytes at offset 4295459328 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295475712 ++wrote 16384/16384 bytes at offset 4295475712 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295492096 ++wrote 16384/16384 bytes at offset 4295492096 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295508480 ++wrote 16384/16384 bytes at offset 4295508480 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295524864 ++wrote 16384/16384 bytes at offset 4295524864 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295541248 ++wrote 16384/16384 bytes at offset 4295541248 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 8192/8192 bytes at offset 4295565824 ++=== IO: pattern 145 ++wrote 8192/8192 bytes at offset 4295565824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295582208 ++wrote 8192/8192 bytes at offset 4295582208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295598592 ++wrote 8192/8192 bytes at offset 4295598592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295614976 ++wrote 8192/8192 bytes at offset 4295614976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295631360 ++wrote 8192/8192 bytes at offset 4295631360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295647744 ++wrote 8192/8192 bytes at offset 4295647744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295664128 ++wrote 8192/8192 bytes at offset 4295664128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295680512 ++wrote 8192/8192 bytes at offset 4295680512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295696896 ++wrote 8192/8192 bytes at offset 4295696896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295713280 ++wrote 8192/8192 bytes at offset 4295713280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295729664 ++wrote 8192/8192 bytes at offset 4295729664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295746048 ++wrote 8192/8192 bytes at offset 4295746048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295762432 ++wrote 8192/8192 bytes at offset 4295762432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295778816 ++wrote 8192/8192 bytes at offset 4295778816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295795200 ++wrote 8192/8192 bytes at offset 4295795200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295811584 ++wrote 8192/8192 bytes at offset 4295811584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295827968 ++wrote 8192/8192 bytes at offset 4295827968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295844352 ++wrote 8192/8192 bytes at offset 4295844352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295860736 ++wrote 8192/8192 bytes at offset 4295860736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295877120 ++wrote 8192/8192 bytes at offset 4295877120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295893504 ++wrote 8192/8192 bytes at offset 4295893504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295909888 ++wrote 8192/8192 bytes at offset 4295909888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295926272 ++wrote 8192/8192 bytes at offset 4295926272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295942656 ++wrote 8192/8192 bytes at offset 4295942656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295959040 ++wrote 8192/8192 bytes at offset 4295959040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295975424 ++wrote 8192/8192 bytes at offset 4295975424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295991808 ++wrote 8192/8192 bytes at offset 4295991808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296008192 ++wrote 8192/8192 bytes at offset 4296008192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296024576 ++wrote 8192/8192 bytes at offset 4296024576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296040960 ++wrote 8192/8192 bytes at offset 4296040960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296057344 ++wrote 8192/8192 bytes at offset 4296057344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296073728 ++wrote 8192/8192 bytes at offset 4296073728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296090112 ++wrote 8192/8192 bytes at offset 4296090112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296106496 ++wrote 8192/8192 bytes at offset 4296106496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296122880 ++wrote 8192/8192 bytes at offset 4296122880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296139264 ++wrote 8192/8192 bytes at offset 4296139264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 8192/8192 bytes at offset 4296147456 ++=== IO: pattern 1 ++wrote 8192/8192 bytes at offset 4296147456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296163840 ++wrote 8192/8192 bytes at offset 4296163840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296180224 ++wrote 8192/8192 bytes at offset 4296180224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296196608 ++wrote 8192/8192 bytes at offset 4296196608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296212992 ++wrote 8192/8192 bytes at offset 4296212992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296229376 ++wrote 8192/8192 bytes at offset 4296229376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296245760 ++wrote 8192/8192 bytes at offset 4296245760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296262144 ++wrote 8192/8192 bytes at offset 4296262144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296278528 ++wrote 8192/8192 bytes at offset 4296278528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296294912 ++wrote 8192/8192 bytes at offset 4296294912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296311296 ++wrote 8192/8192 bytes at offset 4296311296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296327680 ++wrote 8192/8192 bytes at offset 4296327680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296344064 ++wrote 8192/8192 bytes at offset 4296344064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296360448 ++wrote 8192/8192 bytes at offset 4296360448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296376832 ++wrote 8192/8192 bytes at offset 4296376832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296393216 ++wrote 8192/8192 bytes at offset 4296393216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296409600 ++wrote 8192/8192 bytes at offset 4296409600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296425984 ++wrote 8192/8192 bytes at offset 4296425984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296442368 ++wrote 8192/8192 bytes at offset 4296442368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296458752 ++wrote 8192/8192 bytes at offset 4296458752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296475136 ++wrote 8192/8192 bytes at offset 4296475136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296491520 ++wrote 8192/8192 bytes at offset 4296491520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296507904 ++wrote 8192/8192 bytes at offset 4296507904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296524288 ++wrote 8192/8192 bytes at offset 4296524288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296540672 ++wrote 8192/8192 bytes at offset 4296540672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296557056 ++wrote 8192/8192 bytes at offset 4296557056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296573440 ++wrote 8192/8192 bytes at offset 4296573440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296589824 ++wrote 8192/8192 bytes at offset 4296589824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296606208 ++wrote 8192/8192 bytes at offset 4296606208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296622592 ++wrote 8192/8192 bytes at offset 4296622592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296638976 ++wrote 8192/8192 bytes at offset 4296638976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296655360 ++wrote 8192/8192 bytes at offset 4296655360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296671744 ++wrote 8192/8192 bytes at offset 4296671744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296688128 ++wrote 8192/8192 bytes at offset 4296688128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296704512 ++wrote 8192/8192 bytes at offset 4296704512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296720896 ++wrote 8192/8192 bytes at offset 4296720896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> wrote 8192/8192 bytes at offset 4296741376 ++=== IO: pattern 137 ++wrote 8192/8192 bytes at offset 4296741376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296757760 ++wrote 8192/8192 bytes at offset 4296757760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296774144 ++wrote 8192/8192 bytes at offset 4296774144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296790528 ++wrote 8192/8192 bytes at offset 4296790528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296806912 ++wrote 8192/8192 bytes at offset 4296806912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296823296 ++wrote 8192/8192 bytes at offset 4296823296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296839680 ++wrote 8192/8192 bytes at offset 4296839680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296856064 ++wrote 8192/8192 bytes at offset 4296856064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296872448 ++wrote 8192/8192 bytes at offset 4296872448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296888832 ++wrote 8192/8192 bytes at offset 4296888832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296905216 ++wrote 8192/8192 bytes at offset 4296905216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296921600 ++wrote 8192/8192 bytes at offset 4296921600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296937984 ++wrote 8192/8192 bytes at offset 4296937984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296954368 ++wrote 8192/8192 bytes at offset 4296954368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296970752 ++wrote 8192/8192 bytes at offset 4296970752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296987136 ++wrote 8192/8192 bytes at offset 4296987136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297003520 ++wrote 8192/8192 bytes at offset 4297003520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297019904 ++wrote 8192/8192 bytes at offset 4297019904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297036288 ++wrote 8192/8192 bytes at offset 4297036288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297052672 ++wrote 8192/8192 bytes at offset 4297052672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297069056 ++wrote 8192/8192 bytes at offset 4297069056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297085440 ++wrote 8192/8192 bytes at offset 4297085440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297101824 ++wrote 8192/8192 bytes at offset 4297101824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297118208 ++wrote 8192/8192 bytes at offset 4297118208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297134592 ++wrote 8192/8192 bytes at offset 4297134592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297150976 ++wrote 8192/8192 bytes at offset 4297150976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297167360 ++wrote 8192/8192 bytes at offset 4297167360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297183744 ++wrote 8192/8192 bytes at offset 4297183744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297200128 ++wrote 8192/8192 bytes at offset 4297200128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297216512 ++wrote 8192/8192 bytes at offset 4297216512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297232896 ++wrote 8192/8192 bytes at offset 4297232896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297249280 ++wrote 8192/8192 bytes at offset 4297249280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297265664 ++wrote 8192/8192 bytes at offset 4297265664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297282048 ++wrote 8192/8192 bytes at offset 4297282048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297298432 ++wrote 8192/8192 bytes at offset 4297298432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297314816 ++wrote 8192/8192 bytes at offset 4297314816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> wrote 32768/32768 bytes at offset 4297335296 ++=== IO: pattern 17 ++wrote 32768/32768 bytes at offset 4297335296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297384448 ++wrote 32768/32768 bytes at offset 4297384448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297433600 ++wrote 32768/32768 bytes at offset 4297433600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297482752 ++wrote 32768/32768 bytes at offset 4297482752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297531904 ++wrote 32768/32768 bytes at offset 4297531904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297581056 ++wrote 32768/32768 bytes at offset 4297581056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297630208 ++wrote 32768/32768 bytes at offset 4297630208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297679360 ++wrote 32768/32768 bytes at offset 4297679360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297728512 ++wrote 32768/32768 bytes at offset 4297728512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4362059776 ++wrote 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4395622400 ++wrote 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 16384/16384 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 16384/16384 bytes at offset 4294967808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4294984192 ++read 16384/16384 bytes at offset 4294984192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295000576 ++read 16384/16384 bytes at offset 4295000576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295016960 ++read 16384/16384 bytes at offset 4295016960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295033344 ++read 16384/16384 bytes at offset 4295033344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295049728 ++read 16384/16384 bytes at offset 4295049728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295066112 ++read 16384/16384 bytes at offset 4295066112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295082496 ++read 16384/16384 bytes at offset 4295082496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295098880 ++read 16384/16384 bytes at offset 4295098880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295115264 ++read 16384/16384 bytes at offset 4295115264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295131648 ++read 16384/16384 bytes at offset 4295131648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295148032 ++read 16384/16384 bytes at offset 4295148032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295164416 ++read 16384/16384 bytes at offset 4295164416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295180800 ++read 16384/16384 bytes at offset 4295180800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295197184 ++read 16384/16384 bytes at offset 4295197184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295213568 ++read 16384/16384 bytes at offset 4295213568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295229952 ++read 16384/16384 bytes at offset 4295229952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295246336 ++read 16384/16384 bytes at offset 4295246336 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295262720 ++read 16384/16384 bytes at offset 4295262720 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295279104 ++read 16384/16384 bytes at offset 4295279104 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295295488 ++read 16384/16384 bytes at offset 4295295488 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295311872 ++read 16384/16384 bytes at offset 4295311872 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295328256 ++read 16384/16384 bytes at offset 4295328256 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295344640 ++read 16384/16384 bytes at offset 4295344640 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295361024 ++read 16384/16384 bytes at offset 4295361024 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295377408 ++read 16384/16384 bytes at offset 4295377408 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393792 ++read 16384/16384 bytes at offset 4295393792 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295410176 ++read 16384/16384 bytes at offset 4295410176 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295426560 ++read 16384/16384 bytes at offset 4295426560 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442944 ++read 16384/16384 bytes at offset 4295442944 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295459328 ++read 16384/16384 bytes at offset 4295459328 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295475712 ++read 16384/16384 bytes at offset 4295475712 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295492096 ++read 16384/16384 bytes at offset 4295492096 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295508480 ++read 16384/16384 bytes at offset 4295508480 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295524864 ++read 16384/16384 bytes at offset 4295524864 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295541248 ++read 16384/16384 bytes at offset 4295541248 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 8192/8192 bytes at offset 4295565824 ++=== IO: pattern 145 ++read 8192/8192 bytes at offset 4295565824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295582208 ++read 8192/8192 bytes at offset 4295582208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295598592 ++read 8192/8192 bytes at offset 4295598592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295614976 ++read 8192/8192 bytes at offset 4295614976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295631360 ++read 8192/8192 bytes at offset 4295631360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295647744 ++read 8192/8192 bytes at offset 4295647744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295664128 ++read 8192/8192 bytes at offset 4295664128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295680512 ++read 8192/8192 bytes at offset 4295680512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295696896 ++read 8192/8192 bytes at offset 4295696896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295713280 ++read 8192/8192 bytes at offset 4295713280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729664 ++read 8192/8192 bytes at offset 4295729664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295746048 ++read 8192/8192 bytes at offset 4295746048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295762432 ++read 8192/8192 bytes at offset 4295762432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778816 ++read 8192/8192 bytes at offset 4295778816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295795200 ++read 8192/8192 bytes at offset 4295795200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295811584 ++read 8192/8192 bytes at offset 4295811584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295827968 ++read 8192/8192 bytes at offset 4295827968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295844352 ++read 8192/8192 bytes at offset 4295844352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295860736 ++read 8192/8192 bytes at offset 4295860736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295877120 ++read 8192/8192 bytes at offset 4295877120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295893504 ++read 8192/8192 bytes at offset 4295893504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295909888 ++read 8192/8192 bytes at offset 4295909888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295926272 ++read 8192/8192 bytes at offset 4295926272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295942656 ++read 8192/8192 bytes at offset 4295942656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295959040 ++read 8192/8192 bytes at offset 4295959040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295975424 ++read 8192/8192 bytes at offset 4295975424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295991808 ++read 8192/8192 bytes at offset 4295991808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296008192 ++read 8192/8192 bytes at offset 4296008192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024576 ++read 8192/8192 bytes at offset 4296024576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296040960 ++read 8192/8192 bytes at offset 4296040960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296057344 ++read 8192/8192 bytes at offset 4296057344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073728 ++read 8192/8192 bytes at offset 4296073728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296090112 ++read 8192/8192 bytes at offset 4296090112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296106496 ++read 8192/8192 bytes at offset 4296106496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296122880 ++read 8192/8192 bytes at offset 4296122880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296139264 ++read 8192/8192 bytes at offset 4296139264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 8192/8192 bytes at offset 4296147456 ++=== IO: pattern 1 ++read 8192/8192 bytes at offset 4296147456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296163840 ++read 8192/8192 bytes at offset 4296163840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296180224 ++read 8192/8192 bytes at offset 4296180224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296196608 ++read 8192/8192 bytes at offset 4296196608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296212992 ++read 8192/8192 bytes at offset 4296212992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296229376 ++read 8192/8192 bytes at offset 4296229376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245760 ++read 8192/8192 bytes at offset 4296245760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296262144 ++read 8192/8192 bytes at offset 4296262144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296278528 ++read 8192/8192 bytes at offset 4296278528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294912 ++read 8192/8192 bytes at offset 4296294912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296311296 ++read 8192/8192 bytes at offset 4296311296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296327680 ++read 8192/8192 bytes at offset 4296327680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296344064 ++read 8192/8192 bytes at offset 4296344064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296360448 ++read 8192/8192 bytes at offset 4296360448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296376832 ++read 8192/8192 bytes at offset 4296376832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296393216 ++read 8192/8192 bytes at offset 4296393216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296409600 ++read 8192/8192 bytes at offset 4296409600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296425984 ++read 8192/8192 bytes at offset 4296425984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296442368 ++read 8192/8192 bytes at offset 4296442368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296458752 ++read 8192/8192 bytes at offset 4296458752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296475136 ++read 8192/8192 bytes at offset 4296475136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296491520 ++read 8192/8192 bytes at offset 4296491520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296507904 ++read 8192/8192 bytes at offset 4296507904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296524288 ++read 8192/8192 bytes at offset 4296524288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540672 ++read 8192/8192 bytes at offset 4296540672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296557056 ++read 8192/8192 bytes at offset 4296557056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296573440 ++read 8192/8192 bytes at offset 4296573440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589824 ++read 8192/8192 bytes at offset 4296589824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296606208 ++read 8192/8192 bytes at offset 4296606208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296622592 ++read 8192/8192 bytes at offset 4296622592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296638976 ++read 8192/8192 bytes at offset 4296638976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296655360 ++read 8192/8192 bytes at offset 4296655360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296671744 ++read 8192/8192 bytes at offset 4296671744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296688128 ++read 8192/8192 bytes at offset 4296688128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296704512 ++read 8192/8192 bytes at offset 4296704512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296720896 ++read 8192/8192 bytes at offset 4296720896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> read 8192/8192 bytes at offset 4296741376 ++=== IO: pattern 137 ++read 8192/8192 bytes at offset 4296741376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296757760 ++read 8192/8192 bytes at offset 4296757760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296774144 ++read 8192/8192 bytes at offset 4296774144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296790528 ++read 8192/8192 bytes at offset 4296790528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296806912 ++read 8192/8192 bytes at offset 4296806912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296823296 ++read 8192/8192 bytes at offset 4296823296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296839680 ++read 8192/8192 bytes at offset 4296839680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296856064 ++read 8192/8192 bytes at offset 4296856064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296872448 ++read 8192/8192 bytes at offset 4296872448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296888832 ++read 8192/8192 bytes at offset 4296888832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296905216 ++read 8192/8192 bytes at offset 4296905216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921600 ++read 8192/8192 bytes at offset 4296921600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296937984 ++read 8192/8192 bytes at offset 4296937984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296954368 ++read 8192/8192 bytes at offset 4296954368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296970752 ++read 8192/8192 bytes at offset 4296970752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296987136 ++read 8192/8192 bytes at offset 4296987136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297003520 ++read 8192/8192 bytes at offset 4297003520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019904 ++read 8192/8192 bytes at offset 4297019904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297036288 ++read 8192/8192 bytes at offset 4297036288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297052672 ++read 8192/8192 bytes at offset 4297052672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297069056 ++read 8192/8192 bytes at offset 4297069056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297085440 ++read 8192/8192 bytes at offset 4297085440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297101824 ++read 8192/8192 bytes at offset 4297101824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297118208 ++read 8192/8192 bytes at offset 4297118208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297134592 ++read 8192/8192 bytes at offset 4297134592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297150976 ++read 8192/8192 bytes at offset 4297150976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297167360 ++read 8192/8192 bytes at offset 4297167360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297183744 ++read 8192/8192 bytes at offset 4297183744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297200128 ++read 8192/8192 bytes at offset 4297200128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216512 ++read 8192/8192 bytes at offset 4297216512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297232896 ++read 8192/8192 bytes at offset 4297232896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297249280 ++read 8192/8192 bytes at offset 4297249280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297265664 ++read 8192/8192 bytes at offset 4297265664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297282048 ++read 8192/8192 bytes at offset 4297282048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297298432 ++read 8192/8192 bytes at offset 4297298432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314816 ++read 8192/8192 bytes at offset 4297314816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> read 32768/32768 bytes at offset 4297335296 ++=== IO: pattern 17 ++read 32768/32768 bytes at offset 4297335296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297384448 ++read 32768/32768 bytes at offset 4297384448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297433600 ++read 32768/32768 bytes at offset 4297433600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297482752 ++read 32768/32768 bytes at offset 4297482752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297531904 ++read 32768/32768 bytes at offset 4297531904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297581056 ++read 32768/32768 bytes at offset 4297581056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297630208 ++read 32768/32768 bytes at offset 4297630208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297679360 ++read 32768/32768 bytes at offset 4297679360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297728512 ++read 32768/32768 bytes at offset 4297728512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4362059776 ++read 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4395622400 ++read 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 16384/16384 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 16384/16384 bytes at offset 4294967808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4294984192 ++wrote 16384/16384 bytes at offset 4294984192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295000576 ++wrote 16384/16384 bytes at offset 4295000576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295016960 ++wrote 16384/16384 bytes at offset 4295016960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295033344 ++wrote 16384/16384 bytes at offset 4295033344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295049728 ++wrote 16384/16384 bytes at offset 4295049728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295066112 ++wrote 16384/16384 bytes at offset 4295066112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295082496 ++wrote 16384/16384 bytes at offset 4295082496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295098880 ++wrote 16384/16384 bytes at offset 4295098880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295115264 ++wrote 16384/16384 bytes at offset 4295115264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295131648 ++wrote 16384/16384 bytes at offset 4295131648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295148032 ++wrote 16384/16384 bytes at offset 4295148032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295164416 ++wrote 16384/16384 bytes at offset 4295164416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295180800 ++wrote 16384/16384 bytes at offset 4295180800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295197184 ++wrote 16384/16384 bytes at offset 4295197184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295213568 ++wrote 16384/16384 bytes at offset 4295213568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295229952 ++wrote 16384/16384 bytes at offset 4295229952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295246336 ++wrote 16384/16384 bytes at offset 4295246336 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295262720 ++wrote 16384/16384 bytes at offset 4295262720 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295279104 ++wrote 16384/16384 bytes at offset 4295279104 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295295488 ++wrote 16384/16384 bytes at offset 4295295488 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295311872 ++wrote 16384/16384 bytes at offset 4295311872 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295328256 ++wrote 16384/16384 bytes at offset 4295328256 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295344640 ++wrote 16384/16384 bytes at offset 4295344640 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295361024 ++wrote 16384/16384 bytes at offset 4295361024 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295377408 ++wrote 16384/16384 bytes at offset 4295377408 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295393792 ++wrote 16384/16384 bytes at offset 4295393792 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295410176 ++wrote 16384/16384 bytes at offset 4295410176 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295426560 ++wrote 16384/16384 bytes at offset 4295426560 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295442944 ++wrote 16384/16384 bytes at offset 4295442944 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295459328 ++wrote 16384/16384 bytes at offset 4295459328 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295475712 ++wrote 16384/16384 bytes at offset 4295475712 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295492096 ++wrote 16384/16384 bytes at offset 4295492096 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295508480 ++wrote 16384/16384 bytes at offset 4295508480 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295524864 ++wrote 16384/16384 bytes at offset 4295524864 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295541248 ++wrote 16384/16384 bytes at offset 4295541248 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> wrote 8192/8192 bytes at offset 4295565824 ++=== IO: pattern 145 ++wrote 8192/8192 bytes at offset 4295565824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295582208 ++wrote 8192/8192 bytes at offset 4295582208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295598592 ++wrote 8192/8192 bytes at offset 4295598592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295614976 ++wrote 8192/8192 bytes at offset 4295614976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295631360 ++wrote 8192/8192 bytes at offset 4295631360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295647744 ++wrote 8192/8192 bytes at offset 4295647744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295664128 ++wrote 8192/8192 bytes at offset 4295664128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295680512 ++wrote 8192/8192 bytes at offset 4295680512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295696896 ++wrote 8192/8192 bytes at offset 4295696896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295713280 ++wrote 8192/8192 bytes at offset 4295713280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295729664 ++wrote 8192/8192 bytes at offset 4295729664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295746048 ++wrote 8192/8192 bytes at offset 4295746048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295762432 ++wrote 8192/8192 bytes at offset 4295762432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295778816 ++wrote 8192/8192 bytes at offset 4295778816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295795200 ++wrote 8192/8192 bytes at offset 4295795200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295811584 ++wrote 8192/8192 bytes at offset 4295811584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295827968 ++wrote 8192/8192 bytes at offset 4295827968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295844352 ++wrote 8192/8192 bytes at offset 4295844352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295860736 ++wrote 8192/8192 bytes at offset 4295860736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295877120 ++wrote 8192/8192 bytes at offset 4295877120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295893504 ++wrote 8192/8192 bytes at offset 4295893504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295909888 ++wrote 8192/8192 bytes at offset 4295909888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295926272 ++wrote 8192/8192 bytes at offset 4295926272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295942656 ++wrote 8192/8192 bytes at offset 4295942656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295959040 ++wrote 8192/8192 bytes at offset 4295959040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295975424 ++wrote 8192/8192 bytes at offset 4295975424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4295991808 ++wrote 8192/8192 bytes at offset 4295991808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296008192 ++wrote 8192/8192 bytes at offset 4296008192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296024576 ++wrote 8192/8192 bytes at offset 4296024576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296040960 ++wrote 8192/8192 bytes at offset 4296040960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296057344 ++wrote 8192/8192 bytes at offset 4296057344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296073728 ++wrote 8192/8192 bytes at offset 4296073728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296090112 ++wrote 8192/8192 bytes at offset 4296090112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296106496 ++wrote 8192/8192 bytes at offset 4296106496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296122880 ++wrote 8192/8192 bytes at offset 4296122880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296139264 ++wrote 8192/8192 bytes at offset 4296139264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 8192/8192 bytes at offset 4296147456 ++=== IO: pattern 1 ++wrote 8192/8192 bytes at offset 4296147456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296163840 ++wrote 8192/8192 bytes at offset 4296163840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296180224 ++wrote 8192/8192 bytes at offset 4296180224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296196608 ++wrote 8192/8192 bytes at offset 4296196608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296212992 ++wrote 8192/8192 bytes at offset 4296212992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296229376 ++wrote 8192/8192 bytes at offset 4296229376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296245760 ++wrote 8192/8192 bytes at offset 4296245760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296262144 ++wrote 8192/8192 bytes at offset 4296262144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296278528 ++wrote 8192/8192 bytes at offset 4296278528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296294912 ++wrote 8192/8192 bytes at offset 4296294912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296311296 ++wrote 8192/8192 bytes at offset 4296311296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296327680 ++wrote 8192/8192 bytes at offset 4296327680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296344064 ++wrote 8192/8192 bytes at offset 4296344064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296360448 ++wrote 8192/8192 bytes at offset 4296360448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296376832 ++wrote 8192/8192 bytes at offset 4296376832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296393216 ++wrote 8192/8192 bytes at offset 4296393216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296409600 ++wrote 8192/8192 bytes at offset 4296409600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296425984 ++wrote 8192/8192 bytes at offset 4296425984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296442368 ++wrote 8192/8192 bytes at offset 4296442368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296458752 ++wrote 8192/8192 bytes at offset 4296458752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296475136 ++wrote 8192/8192 bytes at offset 4296475136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296491520 ++wrote 8192/8192 bytes at offset 4296491520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296507904 ++wrote 8192/8192 bytes at offset 4296507904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296524288 ++wrote 8192/8192 bytes at offset 4296524288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296540672 ++wrote 8192/8192 bytes at offset 4296540672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296557056 ++wrote 8192/8192 bytes at offset 4296557056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296573440 ++wrote 8192/8192 bytes at offset 4296573440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296589824 ++wrote 8192/8192 bytes at offset 4296589824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296606208 ++wrote 8192/8192 bytes at offset 4296606208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296622592 ++wrote 8192/8192 bytes at offset 4296622592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296638976 ++wrote 8192/8192 bytes at offset 4296638976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296655360 ++wrote 8192/8192 bytes at offset 4296655360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296671744 ++wrote 8192/8192 bytes at offset 4296671744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296688128 ++wrote 8192/8192 bytes at offset 4296688128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296704512 ++wrote 8192/8192 bytes at offset 4296704512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296720896 ++wrote 8192/8192 bytes at offset 4296720896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> wrote 8192/8192 bytes at offset 4296741376 ++=== IO: pattern 137 ++wrote 8192/8192 bytes at offset 4296741376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296757760 ++wrote 8192/8192 bytes at offset 4296757760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296774144 ++wrote 8192/8192 bytes at offset 4296774144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296790528 ++wrote 8192/8192 bytes at offset 4296790528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296806912 ++wrote 8192/8192 bytes at offset 4296806912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296823296 ++wrote 8192/8192 bytes at offset 4296823296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296839680 ++wrote 8192/8192 bytes at offset 4296839680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296856064 ++wrote 8192/8192 bytes at offset 4296856064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296872448 ++wrote 8192/8192 bytes at offset 4296872448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296888832 ++wrote 8192/8192 bytes at offset 4296888832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296905216 ++wrote 8192/8192 bytes at offset 4296905216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296921600 ++wrote 8192/8192 bytes at offset 4296921600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296937984 ++wrote 8192/8192 bytes at offset 4296937984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296954368 ++wrote 8192/8192 bytes at offset 4296954368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296970752 ++wrote 8192/8192 bytes at offset 4296970752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4296987136 ++wrote 8192/8192 bytes at offset 4296987136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297003520 ++wrote 8192/8192 bytes at offset 4297003520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297019904 ++wrote 8192/8192 bytes at offset 4297019904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297036288 ++wrote 8192/8192 bytes at offset 4297036288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297052672 ++wrote 8192/8192 bytes at offset 4297052672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297069056 ++wrote 8192/8192 bytes at offset 4297069056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297085440 ++wrote 8192/8192 bytes at offset 4297085440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297101824 ++wrote 8192/8192 bytes at offset 4297101824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297118208 ++wrote 8192/8192 bytes at offset 4297118208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297134592 ++wrote 8192/8192 bytes at offset 4297134592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297150976 ++wrote 8192/8192 bytes at offset 4297150976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297167360 ++wrote 8192/8192 bytes at offset 4297167360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297183744 ++wrote 8192/8192 bytes at offset 4297183744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297200128 ++wrote 8192/8192 bytes at offset 4297200128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297216512 ++wrote 8192/8192 bytes at offset 4297216512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297232896 ++wrote 8192/8192 bytes at offset 4297232896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297249280 ++wrote 8192/8192 bytes at offset 4297249280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297265664 ++wrote 8192/8192 bytes at offset 4297265664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297282048 ++wrote 8192/8192 bytes at offset 4297282048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297298432 ++wrote 8192/8192 bytes at offset 4297298432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 8192/8192 bytes at offset 4297314816 ++wrote 8192/8192 bytes at offset 4297314816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> wrote 32768/32768 bytes at offset 4297335296 ++=== IO: pattern 17 ++wrote 32768/32768 bytes at offset 4297335296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297384448 ++wrote 32768/32768 bytes at offset 4297384448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297433600 ++wrote 32768/32768 bytes at offset 4297433600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297482752 ++wrote 32768/32768 bytes at offset 4297482752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297531904 ++wrote 32768/32768 bytes at offset 4297531904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297581056 ++wrote 32768/32768 bytes at offset 4297581056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297630208 ++wrote 32768/32768 bytes at offset 4297630208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297679360 ++wrote 32768/32768 bytes at offset 4297679360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297728512 ++wrote 32768/32768 bytes at offset 4297728512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> wrote 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++wrote 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4362059776 ++wrote 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 49152/49152 bytes at offset 4395622400 ++wrote 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 16384/16384 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 16384/16384 bytes at offset 4294967808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4294984192 ++read 16384/16384 bytes at offset 4294984192 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295000576 ++read 16384/16384 bytes at offset 4295000576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295016960 ++read 16384/16384 bytes at offset 4295016960 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295033344 ++read 16384/16384 bytes at offset 4295033344 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295049728 ++read 16384/16384 bytes at offset 4295049728 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295066112 ++read 16384/16384 bytes at offset 4295066112 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295082496 ++read 16384/16384 bytes at offset 4295082496 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295098880 ++read 16384/16384 bytes at offset 4295098880 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295115264 ++read 16384/16384 bytes at offset 4295115264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295131648 ++read 16384/16384 bytes at offset 4295131648 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295148032 ++read 16384/16384 bytes at offset 4295148032 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295164416 ++read 16384/16384 bytes at offset 4295164416 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295180800 ++read 16384/16384 bytes at offset 4295180800 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295197184 ++read 16384/16384 bytes at offset 4295197184 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295213568 ++read 16384/16384 bytes at offset 4295213568 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295229952 ++read 16384/16384 bytes at offset 4295229952 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295246336 ++read 16384/16384 bytes at offset 4295246336 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295262720 ++read 16384/16384 bytes at offset 4295262720 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295279104 ++read 16384/16384 bytes at offset 4295279104 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295295488 ++read 16384/16384 bytes at offset 4295295488 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295311872 ++read 16384/16384 bytes at offset 4295311872 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295328256 ++read 16384/16384 bytes at offset 4295328256 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295344640 ++read 16384/16384 bytes at offset 4295344640 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295361024 ++read 16384/16384 bytes at offset 4295361024 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295377408 ++read 16384/16384 bytes at offset 4295377408 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393792 ++read 16384/16384 bytes at offset 4295393792 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295410176 ++read 16384/16384 bytes at offset 4295410176 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295426560 ++read 16384/16384 bytes at offset 4295426560 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442944 ++read 16384/16384 bytes at offset 4295442944 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295459328 ++read 16384/16384 bytes at offset 4295459328 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295475712 ++read 16384/16384 bytes at offset 4295475712 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295492096 ++read 16384/16384 bytes at offset 4295492096 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295508480 ++read 16384/16384 bytes at offset 4295508480 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295524864 ++read 16384/16384 bytes at offset 4295524864 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295541248 ++read 16384/16384 bytes at offset 4295541248 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 145 +-qemu-io> read 8192/8192 bytes at offset 4295565824 ++=== IO: pattern 145 ++read 8192/8192 bytes at offset 4295565824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295582208 ++read 8192/8192 bytes at offset 4295582208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295598592 ++read 8192/8192 bytes at offset 4295598592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295614976 ++read 8192/8192 bytes at offset 4295614976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295631360 ++read 8192/8192 bytes at offset 4295631360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295647744 ++read 8192/8192 bytes at offset 4295647744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295664128 ++read 8192/8192 bytes at offset 4295664128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295680512 ++read 8192/8192 bytes at offset 4295680512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295696896 ++read 8192/8192 bytes at offset 4295696896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295713280 ++read 8192/8192 bytes at offset 4295713280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295729664 ++read 8192/8192 bytes at offset 4295729664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295746048 ++read 8192/8192 bytes at offset 4295746048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295762432 ++read 8192/8192 bytes at offset 4295762432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295778816 ++read 8192/8192 bytes at offset 4295778816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295795200 ++read 8192/8192 bytes at offset 4295795200 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295811584 ++read 8192/8192 bytes at offset 4295811584 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295827968 ++read 8192/8192 bytes at offset 4295827968 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295844352 ++read 8192/8192 bytes at offset 4295844352 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295860736 ++read 8192/8192 bytes at offset 4295860736 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295877120 ++read 8192/8192 bytes at offset 4295877120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295893504 ++read 8192/8192 bytes at offset 4295893504 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295909888 ++read 8192/8192 bytes at offset 4295909888 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295926272 ++read 8192/8192 bytes at offset 4295926272 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295942656 ++read 8192/8192 bytes at offset 4295942656 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295959040 ++read 8192/8192 bytes at offset 4295959040 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295975424 ++read 8192/8192 bytes at offset 4295975424 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4295991808 ++read 8192/8192 bytes at offset 4295991808 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296008192 ++read 8192/8192 bytes at offset 4296008192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296024576 ++read 8192/8192 bytes at offset 4296024576 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296040960 ++read 8192/8192 bytes at offset 4296040960 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296057344 ++read 8192/8192 bytes at offset 4296057344 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296073728 ++read 8192/8192 bytes at offset 4296073728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296090112 ++read 8192/8192 bytes at offset 4296090112 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296106496 ++read 8192/8192 bytes at offset 4296106496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296122880 ++read 8192/8192 bytes at offset 4296122880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296139264 ++read 8192/8192 bytes at offset 4296139264 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 8192/8192 bytes at offset 4296147456 ++=== IO: pattern 1 ++read 8192/8192 bytes at offset 4296147456 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296163840 ++read 8192/8192 bytes at offset 4296163840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296180224 ++read 8192/8192 bytes at offset 4296180224 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296196608 ++read 8192/8192 bytes at offset 4296196608 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296212992 ++read 8192/8192 bytes at offset 4296212992 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296229376 ++read 8192/8192 bytes at offset 4296229376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296245760 ++read 8192/8192 bytes at offset 4296245760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296262144 ++read 8192/8192 bytes at offset 4296262144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296278528 ++read 8192/8192 bytes at offset 4296278528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296294912 ++read 8192/8192 bytes at offset 4296294912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296311296 ++read 8192/8192 bytes at offset 4296311296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296327680 ++read 8192/8192 bytes at offset 4296327680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296344064 ++read 8192/8192 bytes at offset 4296344064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296360448 ++read 8192/8192 bytes at offset 4296360448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296376832 ++read 8192/8192 bytes at offset 4296376832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296393216 ++read 8192/8192 bytes at offset 4296393216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296409600 ++read 8192/8192 bytes at offset 4296409600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296425984 ++read 8192/8192 bytes at offset 4296425984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296442368 ++read 8192/8192 bytes at offset 4296442368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296458752 ++read 8192/8192 bytes at offset 4296458752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296475136 ++read 8192/8192 bytes at offset 4296475136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296491520 ++read 8192/8192 bytes at offset 4296491520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296507904 ++read 8192/8192 bytes at offset 4296507904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296524288 ++read 8192/8192 bytes at offset 4296524288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296540672 ++read 8192/8192 bytes at offset 4296540672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296557056 ++read 8192/8192 bytes at offset 4296557056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296573440 ++read 8192/8192 bytes at offset 4296573440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296589824 ++read 8192/8192 bytes at offset 4296589824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296606208 ++read 8192/8192 bytes at offset 4296606208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296622592 ++read 8192/8192 bytes at offset 4296622592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296638976 ++read 8192/8192 bytes at offset 4296638976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296655360 ++read 8192/8192 bytes at offset 4296655360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296671744 ++read 8192/8192 bytes at offset 4296671744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296688128 ++read 8192/8192 bytes at offset 4296688128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296704512 ++read 8192/8192 bytes at offset 4296704512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296720896 ++read 8192/8192 bytes at offset 4296720896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 137 +-qemu-io> read 8192/8192 bytes at offset 4296741376 ++=== IO: pattern 137 ++read 8192/8192 bytes at offset 4296741376 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296757760 ++read 8192/8192 bytes at offset 4296757760 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296774144 ++read 8192/8192 bytes at offset 4296774144 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296790528 ++read 8192/8192 bytes at offset 4296790528 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296806912 ++read 8192/8192 bytes at offset 4296806912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296823296 ++read 8192/8192 bytes at offset 4296823296 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296839680 ++read 8192/8192 bytes at offset 4296839680 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296856064 ++read 8192/8192 bytes at offset 4296856064 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296872448 ++read 8192/8192 bytes at offset 4296872448 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296888832 ++read 8192/8192 bytes at offset 4296888832 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296905216 ++read 8192/8192 bytes at offset 4296905216 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296921600 ++read 8192/8192 bytes at offset 4296921600 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296937984 ++read 8192/8192 bytes at offset 4296937984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296954368 ++read 8192/8192 bytes at offset 4296954368 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296970752 ++read 8192/8192 bytes at offset 4296970752 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4296987136 ++read 8192/8192 bytes at offset 4296987136 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297003520 ++read 8192/8192 bytes at offset 4297003520 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297019904 ++read 8192/8192 bytes at offset 4297019904 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297036288 ++read 8192/8192 bytes at offset 4297036288 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297052672 ++read 8192/8192 bytes at offset 4297052672 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297069056 ++read 8192/8192 bytes at offset 4297069056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297085440 ++read 8192/8192 bytes at offset 4297085440 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297101824 ++read 8192/8192 bytes at offset 4297101824 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297118208 ++read 8192/8192 bytes at offset 4297118208 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297134592 ++read 8192/8192 bytes at offset 4297134592 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297150976 ++read 8192/8192 bytes at offset 4297150976 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297167360 ++read 8192/8192 bytes at offset 4297167360 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297183744 ++read 8192/8192 bytes at offset 4297183744 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297200128 ++read 8192/8192 bytes at offset 4297200128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297216512 ++read 8192/8192 bytes at offset 4297216512 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297232896 ++read 8192/8192 bytes at offset 4297232896 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297249280 ++read 8192/8192 bytes at offset 4297249280 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297265664 ++read 8192/8192 bytes at offset 4297265664 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297282048 ++read 8192/8192 bytes at offset 4297282048 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297298432 ++read 8192/8192 bytes at offset 4297298432 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 4297314816 ++read 8192/8192 bytes at offset 4297314816 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 17 +-qemu-io> read 32768/32768 bytes at offset 4297335296 ++=== IO: pattern 17 ++read 32768/32768 bytes at offset 4297335296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297384448 ++read 32768/32768 bytes at offset 4297384448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297433600 ++read 32768/32768 bytes at offset 4297433600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297482752 ++read 32768/32768 bytes at offset 4297482752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297531904 ++read 32768/32768 bytes at offset 4297531904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297581056 ++read 32768/32768 bytes at offset 4297581056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297630208 ++read 32768/32768 bytes at offset 4297630208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297679360 ++read 32768/32768 bytes at offset 4297679360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297728512 ++read 32768/32768 bytes at offset 4297728512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 208 +-qemu-io> read 49152/49152 bytes at offset 4328497152 ++=== IO: pattern 208 ++read 49152/49152 bytes at offset 4328497152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4362059776 ++read 49152/49152 bytes at offset 4362059776 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4395622400 ++read 49152/49152 bytes at offset 4395622400 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating another new image + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -18882,221 +18882,221 @@ More complex patterns + test2: With offset 0 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 65536 ++wrote 16384/16384 bytes at offset 65536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 212992 ++wrote 16384/16384 bytes at offset 212992 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 360448 ++wrote 16384/16384 bytes at offset 360448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 507904 ++wrote 16384/16384 bytes at offset 507904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 81920 ++wrote 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 229376 ++wrote 16384/16384 bytes at offset 229376 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 376832 ++wrote 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 524288 ++wrote 16384/16384 bytes at offset 524288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 131072 ++wrote 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 278528 ++wrote 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 425984 ++wrote 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 573440 ++wrote 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 0 ++wrote 16384/16384 bytes at offset 0 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 147456 ++wrote 16384/16384 bytes at offset 147456 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 294912 ++wrote 16384/16384 bytes at offset 294912 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 442368 ++wrote 16384/16384 bytes at offset 442368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 16384 ++wrote 16384/16384 bytes at offset 16384 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 163840 ++wrote 16384/16384 bytes at offset 163840 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 311296 ++wrote 16384/16384 bytes at offset 311296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 458752 ++wrote 16384/16384 bytes at offset 458752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 49152 ++wrote 16384/16384 bytes at offset 49152 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 196608 ++wrote 16384/16384 bytes at offset 196608 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 344064 ++wrote 16384/16384 bytes at offset 344064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 491520 ++wrote 16384/16384 bytes at offset 491520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 32768/32768 bytes at offset 0 ++read 32768/32768 bytes at offset 0 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 147456 ++read 32768/32768 bytes at offset 147456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 294912 ++read 32768/32768 bytes at offset 294912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 442368 ++read 32768/32768 bytes at offset 442368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 49152/49152 bytes at offset 49152 ++=== IO: pattern 165 ++read 49152/49152 bytes at offset 49152 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 196608 ++read 49152/49152 bytes at offset 196608 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 344064 ++read 49152/49152 bytes at offset 344064 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 491520 ++read 49152/49152 bytes at offset 491520 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 16384/16384 bytes at offset 131072 ++=== IO: pattern 165 ++read 16384/16384 bytes at offset 131072 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 278528 ++read 16384/16384 bytes at offset 278528 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 425984 ++read 16384/16384 bytes at offset 425984 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 573440 ++read 16384/16384 bytes at offset 573440 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 32768 ++read 16384/16384 bytes at offset 32768 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 180224 ++read 16384/16384 bytes at offset 180224 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 327680 ++read 16384/16384 bytes at offset 327680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 475136 ++read 16384/16384 bytes at offset 475136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 98304 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 98304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 245760 ++read 32768/32768 bytes at offset 245760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 393216 ++read 32768/32768 bytes at offset 393216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 540672 ++read 32768/32768 bytes at offset 540672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + test2: With offset 4294967296 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 4295032832 ++wrote 16384/16384 bytes at offset 4295032832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295180288 ++wrote 16384/16384 bytes at offset 4295180288 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295327744 ++wrote 16384/16384 bytes at offset 4295327744 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295475200 ++wrote 16384/16384 bytes at offset 4295475200 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 4295049216 ++wrote 16384/16384 bytes at offset 4295049216 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295196672 ++wrote 16384/16384 bytes at offset 4295196672 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295344128 ++wrote 16384/16384 bytes at offset 4295344128 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295491584 ++wrote 16384/16384 bytes at offset 4295491584 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 4295098368 ++wrote 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295245824 ++wrote 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295393280 ++wrote 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295540736 ++wrote 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 4294967296 ++wrote 16384/16384 bytes at offset 4294967296 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295114752 ++wrote 16384/16384 bytes at offset 4295114752 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295262208 ++wrote 16384/16384 bytes at offset 4295262208 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295409664 ++wrote 16384/16384 bytes at offset 4295409664 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 4294983680 ++wrote 16384/16384 bytes at offset 4294983680 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295131136 ++wrote 16384/16384 bytes at offset 4295131136 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295278592 ++wrote 16384/16384 bytes at offset 4295278592 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295426048 ++wrote 16384/16384 bytes at offset 4295426048 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 16384/16384 bytes at offset 4295016448 ++wrote 16384/16384 bytes at offset 4295016448 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295163904 ++wrote 16384/16384 bytes at offset 4295163904 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295311360 ++wrote 16384/16384 bytes at offset 4295311360 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 16384/16384 bytes at offset 4295458816 ++wrote 16384/16384 bytes at offset 4295458816 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 32768/32768 bytes at offset 4294967296 ++read 32768/32768 bytes at offset 4294967296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4295114752 ++read 32768/32768 bytes at offset 4295114752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4295262208 ++read 32768/32768 bytes at offset 4295262208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4295409664 ++read 32768/32768 bytes at offset 4295409664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 49152/49152 bytes at offset 4295016448 ++=== IO: pattern 165 ++read 49152/49152 bytes at offset 4295016448 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4295163904 ++read 49152/49152 bytes at offset 4295163904 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4295311360 ++read 49152/49152 bytes at offset 4295311360 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 49152/49152 bytes at offset 4295458816 ++read 49152/49152 bytes at offset 4295458816 + 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 16384/16384 bytes at offset 4295098368 ++=== IO: pattern 165 ++read 16384/16384 bytes at offset 4295098368 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295245824 ++read 16384/16384 bytes at offset 4295245824 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295393280 ++read 16384/16384 bytes at offset 4295393280 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295540736 ++read 16384/16384 bytes at offset 4295540736 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 16384/16384 bytes at offset 4295000064 ++read 16384/16384 bytes at offset 4295000064 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295147520 ++read 16384/16384 bytes at offset 4295147520 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295294976 ++read 16384/16384 bytes at offset 4295294976 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4295442432 ++read 16384/16384 bytes at offset 4295442432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4295065600 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4295065600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4295213056 ++read 32768/32768 bytes at offset 4295213056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4295360512 ++read 32768/32768 bytes at offset 4295360512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4295507968 ++read 32768/32768 bytes at offset 4295507968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating new image; cluster size: 65536 + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -19104,6382 +19104,6382 @@ Testing empty image + + At offset 0: + === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 196608 ++wrote 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 327680 ++wrote 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393216 ++wrote 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 458752 ++wrote 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 589824 ++wrote 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 720896 ++wrote 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 851968 ++wrote 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 983040 ++wrote 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1048576 ++wrote 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114112 ++wrote 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1179648 ++wrote 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245184 ++wrote 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1310720 ++wrote 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376256 ++wrote 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1441792 ++wrote 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507328 ++wrote 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1572864 ++wrote 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1638400 ++wrote 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1703936 ++wrote 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769472 ++wrote 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835008 ++wrote 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1900544 ++wrote 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966080 ++wrote 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2031616 ++wrote 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097152 ++wrote 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2162688 ++wrote 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2228224 ++wrote 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2293760 ++wrote 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 32768/32768 bytes at offset 2392064 ++=== IO: pattern 64 ++wrote 32768/32768 bytes at offset 2392064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2457600 ++wrote 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2523136 ++wrote 32768/32768 bytes at offset 2523136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2588672 ++wrote 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2654208 ++wrote 32768/32768 bytes at offset 2654208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2719744 ++wrote 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2785280 ++wrote 32768/32768 bytes at offset 2785280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2850816 ++wrote 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2916352 ++wrote 32768/32768 bytes at offset 2916352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2981888 ++wrote 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3047424 ++wrote 32768/32768 bytes at offset 3047424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3112960 ++wrote 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3178496 ++wrote 32768/32768 bytes at offset 3178496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3244032 ++wrote 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3309568 ++wrote 32768/32768 bytes at offset 3309568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3375104 ++wrote 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3440640 ++wrote 32768/32768 bytes at offset 3440640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3506176 ++wrote 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3571712 ++wrote 32768/32768 bytes at offset 3571712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3637248 ++wrote 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3702784 ++wrote 32768/32768 bytes at offset 3702784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3768320 ++wrote 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3833856 ++wrote 32768/32768 bytes at offset 3833856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3899392 ++wrote 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3964928 ++wrote 32768/32768 bytes at offset 3964928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4030464 ++wrote 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4096000 ++wrote 32768/32768 bytes at offset 4096000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4161536 ++wrote 32768/32768 bytes at offset 4161536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4227072 ++wrote 32768/32768 bytes at offset 4227072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4292608 ++wrote 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4358144 ++wrote 32768/32768 bytes at offset 4358144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4423680 ++wrote 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4489216 ++wrote 32768/32768 bytes at offset 4489216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4554752 ++wrote 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4620288 ++wrote 32768/32768 bytes at offset 4620288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4685824 ++wrote 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 32768/32768 bytes at offset 4718592 ++=== IO: pattern 0 ++wrote 32768/32768 bytes at offset 4718592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4784128 ++wrote 32768/32768 bytes at offset 4784128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4849664 ++wrote 32768/32768 bytes at offset 4849664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4915200 ++wrote 32768/32768 bytes at offset 4915200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4980736 ++wrote 32768/32768 bytes at offset 4980736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5046272 ++wrote 32768/32768 bytes at offset 5046272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5111808 ++wrote 32768/32768 bytes at offset 5111808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5177344 ++wrote 32768/32768 bytes at offset 5177344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5242880 ++wrote 32768/32768 bytes at offset 5242880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5308416 ++wrote 32768/32768 bytes at offset 5308416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5373952 ++wrote 32768/32768 bytes at offset 5373952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5439488 ++wrote 32768/32768 bytes at offset 5439488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5505024 ++wrote 32768/32768 bytes at offset 5505024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5570560 ++wrote 32768/32768 bytes at offset 5570560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5636096 ++wrote 32768/32768 bytes at offset 5636096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5701632 ++wrote 32768/32768 bytes at offset 5701632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5767168 ++wrote 32768/32768 bytes at offset 5767168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5832704 ++wrote 32768/32768 bytes at offset 5832704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5898240 ++wrote 32768/32768 bytes at offset 5898240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5963776 ++wrote 32768/32768 bytes at offset 5963776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6029312 ++wrote 32768/32768 bytes at offset 6029312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6094848 ++wrote 32768/32768 bytes at offset 6094848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6160384 ++wrote 32768/32768 bytes at offset 6160384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6225920 ++wrote 32768/32768 bytes at offset 6225920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6291456 ++wrote 32768/32768 bytes at offset 6291456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6356992 ++wrote 32768/32768 bytes at offset 6356992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6422528 ++wrote 32768/32768 bytes at offset 6422528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6488064 ++wrote 32768/32768 bytes at offset 6488064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6553600 ++wrote 32768/32768 bytes at offset 6553600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6619136 ++wrote 32768/32768 bytes at offset 6619136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6684672 ++wrote 32768/32768 bytes at offset 6684672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6750208 ++wrote 32768/32768 bytes at offset 6750208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6815744 ++wrote 32768/32768 bytes at offset 6815744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6881280 ++wrote 32768/32768 bytes at offset 6881280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6946816 ++wrote 32768/32768 bytes at offset 6946816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7012352 ++wrote 32768/32768 bytes at offset 7012352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> wrote 32768/32768 bytes at offset 7094272 ++=== IO: pattern 32 ++wrote 32768/32768 bytes at offset 7094272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7159808 ++wrote 32768/32768 bytes at offset 7159808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7225344 ++wrote 32768/32768 bytes at offset 7225344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7290880 ++wrote 32768/32768 bytes at offset 7290880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7356416 ++wrote 32768/32768 bytes at offset 7356416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7421952 ++wrote 32768/32768 bytes at offset 7421952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7487488 ++wrote 32768/32768 bytes at offset 7487488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7553024 ++wrote 32768/32768 bytes at offset 7553024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7618560 ++wrote 32768/32768 bytes at offset 7618560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7684096 ++wrote 32768/32768 bytes at offset 7684096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7749632 ++wrote 32768/32768 bytes at offset 7749632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7815168 ++wrote 32768/32768 bytes at offset 7815168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7880704 ++wrote 32768/32768 bytes at offset 7880704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7946240 ++wrote 32768/32768 bytes at offset 7946240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8011776 ++wrote 32768/32768 bytes at offset 8011776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8077312 ++wrote 32768/32768 bytes at offset 8077312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8142848 ++wrote 32768/32768 bytes at offset 8142848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8208384 ++wrote 32768/32768 bytes at offset 8208384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8273920 ++wrote 32768/32768 bytes at offset 8273920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8339456 ++wrote 32768/32768 bytes at offset 8339456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8404992 ++wrote 32768/32768 bytes at offset 8404992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8470528 ++wrote 32768/32768 bytes at offset 8470528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8536064 ++wrote 32768/32768 bytes at offset 8536064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8601600 ++wrote 32768/32768 bytes at offset 8601600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8667136 ++wrote 32768/32768 bytes at offset 8667136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8732672 ++wrote 32768/32768 bytes at offset 8732672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8798208 ++wrote 32768/32768 bytes at offset 8798208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8863744 ++wrote 32768/32768 bytes at offset 8863744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8929280 ++wrote 32768/32768 bytes at offset 8929280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8994816 ++wrote 32768/32768 bytes at offset 8994816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9060352 ++wrote 32768/32768 bytes at offset 9060352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9125888 ++wrote 32768/32768 bytes at offset 9125888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9191424 ++wrote 32768/32768 bytes at offset 9191424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9256960 ++wrote 32768/32768 bytes at offset 9256960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9322496 ++wrote 32768/32768 bytes at offset 9322496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9388032 ++wrote 32768/32768 bytes at offset 9388032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 131072/131072 bytes at offset 9469952 ++=== IO: pattern 64 ++wrote 131072/131072 bytes at offset 9469952 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9666560 ++wrote 131072/131072 bytes at offset 9666560 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9863168 ++wrote 131072/131072 bytes at offset 9863168 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10059776 ++wrote 131072/131072 bytes at offset 10059776 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10256384 ++wrote 131072/131072 bytes at offset 10256384 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10452992 ++wrote 131072/131072 bytes at offset 10452992 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10649600 ++wrote 131072/131072 bytes at offset 10649600 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10846208 ++wrote 131072/131072 bytes at offset 10846208 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 11042816 ++wrote 131072/131072 bytes at offset 11042816 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1073676288 ++wrote 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1610579968 ++wrote 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 0 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 65536 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 131072 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 196608 ++read 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 262144 ++read 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 327680 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 393216 ++read 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 458752 ++read 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 524288 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 589824 ++read 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 655360 ++read 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 720896 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 786432 ++read 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 851968 ++read 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 917504 ++read 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 983040 ++read 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1048576 ++read 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114112 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1179648 ++read 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1245184 ++read 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1310720 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1376256 ++read 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1441792 ++read 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1507328 ++read 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1572864 ++read 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1638400 ++read 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1703936 ++read 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1769472 ++read 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1835008 ++read 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1900544 ++read 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1966080 ++read 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2031616 ++read 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2097152 ++read 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2162688 ++read 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2228224 ++read 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2293760 ++read 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 2392064 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 2392064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2457600 ++read 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2523136 ++read 32768/32768 bytes at offset 2523136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2588672 ++read 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2654208 ++read 32768/32768 bytes at offset 2654208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2719744 ++read 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2785280 ++read 32768/32768 bytes at offset 2785280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2850816 ++read 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2916352 ++read 32768/32768 bytes at offset 2916352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2981888 ++read 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3047424 ++read 32768/32768 bytes at offset 3047424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3112960 ++read 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3178496 ++read 32768/32768 bytes at offset 3178496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244032 ++read 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3309568 ++read 32768/32768 bytes at offset 3309568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375104 ++read 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3440640 ++read 32768/32768 bytes at offset 3440640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506176 ++read 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3571712 ++read 32768/32768 bytes at offset 3571712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637248 ++read 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3702784 ++read 32768/32768 bytes at offset 3702784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768320 ++read 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3833856 ++read 32768/32768 bytes at offset 3833856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899392 ++read 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3964928 ++read 32768/32768 bytes at offset 3964928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030464 ++read 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4096000 ++read 32768/32768 bytes at offset 4096000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4161536 ++read 32768/32768 bytes at offset 4161536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4227072 ++read 32768/32768 bytes at offset 4227072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4292608 ++read 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4358144 ++read 32768/32768 bytes at offset 4358144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4423680 ++read 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4489216 ++read 32768/32768 bytes at offset 4489216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4554752 ++read 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4620288 ++read 32768/32768 bytes at offset 4620288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4685824 ++read 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4718592 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4718592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4784128 ++read 32768/32768 bytes at offset 4784128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4849664 ++read 32768/32768 bytes at offset 4849664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4915200 ++read 32768/32768 bytes at offset 4915200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4980736 ++read 32768/32768 bytes at offset 4980736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5046272 ++read 32768/32768 bytes at offset 5046272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5111808 ++read 32768/32768 bytes at offset 5111808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5177344 ++read 32768/32768 bytes at offset 5177344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5242880 ++read 32768/32768 bytes at offset 5242880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5308416 ++read 32768/32768 bytes at offset 5308416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5373952 ++read 32768/32768 bytes at offset 5373952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5439488 ++read 32768/32768 bytes at offset 5439488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5505024 ++read 32768/32768 bytes at offset 5505024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5570560 ++read 32768/32768 bytes at offset 5570560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5636096 ++read 32768/32768 bytes at offset 5636096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5701632 ++read 32768/32768 bytes at offset 5701632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5767168 ++read 32768/32768 bytes at offset 5767168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5832704 ++read 32768/32768 bytes at offset 5832704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5898240 ++read 32768/32768 bytes at offset 5898240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5963776 ++read 32768/32768 bytes at offset 5963776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6029312 ++read 32768/32768 bytes at offset 6029312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6094848 ++read 32768/32768 bytes at offset 6094848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6160384 ++read 32768/32768 bytes at offset 6160384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6225920 ++read 32768/32768 bytes at offset 6225920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6291456 ++read 32768/32768 bytes at offset 6291456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6356992 ++read 32768/32768 bytes at offset 6356992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6422528 ++read 32768/32768 bytes at offset 6422528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6488064 ++read 32768/32768 bytes at offset 6488064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6553600 ++read 32768/32768 bytes at offset 6553600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6619136 ++read 32768/32768 bytes at offset 6619136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6684672 ++read 32768/32768 bytes at offset 6684672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6750208 ++read 32768/32768 bytes at offset 6750208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6815744 ++read 32768/32768 bytes at offset 6815744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6881280 ++read 32768/32768 bytes at offset 6881280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6946816 ++read 32768/32768 bytes at offset 6946816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7012352 ++read 32768/32768 bytes at offset 7012352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 7094272 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 7094272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7159808 ++read 32768/32768 bytes at offset 7159808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7225344 ++read 32768/32768 bytes at offset 7225344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7290880 ++read 32768/32768 bytes at offset 7290880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7356416 ++read 32768/32768 bytes at offset 7356416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7421952 ++read 32768/32768 bytes at offset 7421952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7487488 ++read 32768/32768 bytes at offset 7487488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7553024 ++read 32768/32768 bytes at offset 7553024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7618560 ++read 32768/32768 bytes at offset 7618560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7684096 ++read 32768/32768 bytes at offset 7684096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7749632 ++read 32768/32768 bytes at offset 7749632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7815168 ++read 32768/32768 bytes at offset 7815168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7880704 ++read 32768/32768 bytes at offset 7880704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7946240 ++read 32768/32768 bytes at offset 7946240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8011776 ++read 32768/32768 bytes at offset 8011776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8077312 ++read 32768/32768 bytes at offset 8077312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8142848 ++read 32768/32768 bytes at offset 8142848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8208384 ++read 32768/32768 bytes at offset 8208384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8273920 ++read 32768/32768 bytes at offset 8273920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8339456 ++read 32768/32768 bytes at offset 8339456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8404992 ++read 32768/32768 bytes at offset 8404992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8470528 ++read 32768/32768 bytes at offset 8470528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8536064 ++read 32768/32768 bytes at offset 8536064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8601600 ++read 32768/32768 bytes at offset 8601600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8667136 ++read 32768/32768 bytes at offset 8667136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8732672 ++read 32768/32768 bytes at offset 8732672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8798208 ++read 32768/32768 bytes at offset 8798208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8863744 ++read 32768/32768 bytes at offset 8863744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8929280 ++read 32768/32768 bytes at offset 8929280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8994816 ++read 32768/32768 bytes at offset 8994816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9060352 ++read 32768/32768 bytes at offset 9060352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9125888 ++read 32768/32768 bytes at offset 9125888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9191424 ++read 32768/32768 bytes at offset 9191424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9256960 ++read 32768/32768 bytes at offset 9256960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9322496 ++read 32768/32768 bytes at offset 9322496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9388032 ++read 32768/32768 bytes at offset 9388032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 9469952 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 9469952 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9666560 ++read 131072/131072 bytes at offset 9666560 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9863168 ++read 131072/131072 bytes at offset 9863168 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10059776 ++read 131072/131072 bytes at offset 10059776 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10256384 ++read 131072/131072 bytes at offset 10256384 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10452992 ++read 131072/131072 bytes at offset 10452992 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10649600 ++read 131072/131072 bytes at offset 10649600 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10846208 ++read 131072/131072 bytes at offset 10846208 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 11042816 ++read 131072/131072 bytes at offset 11042816 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1073676288 ++read 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1610579968 ++read 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 196608 ++wrote 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 327680 ++wrote 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393216 ++wrote 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 458752 ++wrote 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 589824 ++wrote 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 720896 ++wrote 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 851968 ++wrote 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 983040 ++wrote 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1048576 ++wrote 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114112 ++wrote 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1179648 ++wrote 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245184 ++wrote 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1310720 ++wrote 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376256 ++wrote 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1441792 ++wrote 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507328 ++wrote 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1572864 ++wrote 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1638400 ++wrote 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1703936 ++wrote 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769472 ++wrote 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835008 ++wrote 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1900544 ++wrote 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966080 ++wrote 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2031616 ++wrote 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097152 ++wrote 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2162688 ++wrote 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2228224 ++wrote 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2293760 ++wrote 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 32768/32768 bytes at offset 2392064 ++=== IO: pattern 64 ++wrote 32768/32768 bytes at offset 2392064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2457600 ++wrote 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2523136 ++wrote 32768/32768 bytes at offset 2523136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2588672 ++wrote 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2654208 ++wrote 32768/32768 bytes at offset 2654208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2719744 ++wrote 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2785280 ++wrote 32768/32768 bytes at offset 2785280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2850816 ++wrote 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2916352 ++wrote 32768/32768 bytes at offset 2916352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2981888 ++wrote 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3047424 ++wrote 32768/32768 bytes at offset 3047424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3112960 ++wrote 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3178496 ++wrote 32768/32768 bytes at offset 3178496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3244032 ++wrote 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3309568 ++wrote 32768/32768 bytes at offset 3309568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3375104 ++wrote 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3440640 ++wrote 32768/32768 bytes at offset 3440640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3506176 ++wrote 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3571712 ++wrote 32768/32768 bytes at offset 3571712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3637248 ++wrote 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3702784 ++wrote 32768/32768 bytes at offset 3702784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3768320 ++wrote 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3833856 ++wrote 32768/32768 bytes at offset 3833856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3899392 ++wrote 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3964928 ++wrote 32768/32768 bytes at offset 3964928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4030464 ++wrote 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4096000 ++wrote 32768/32768 bytes at offset 4096000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4161536 ++wrote 32768/32768 bytes at offset 4161536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4227072 ++wrote 32768/32768 bytes at offset 4227072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4292608 ++wrote 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4358144 ++wrote 32768/32768 bytes at offset 4358144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4423680 ++wrote 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4489216 ++wrote 32768/32768 bytes at offset 4489216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4554752 ++wrote 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4620288 ++wrote 32768/32768 bytes at offset 4620288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4685824 ++wrote 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 32768/32768 bytes at offset 4718592 ++=== IO: pattern 0 ++wrote 32768/32768 bytes at offset 4718592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4784128 ++wrote 32768/32768 bytes at offset 4784128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4849664 ++wrote 32768/32768 bytes at offset 4849664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4915200 ++wrote 32768/32768 bytes at offset 4915200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4980736 ++wrote 32768/32768 bytes at offset 4980736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5046272 ++wrote 32768/32768 bytes at offset 5046272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5111808 ++wrote 32768/32768 bytes at offset 5111808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5177344 ++wrote 32768/32768 bytes at offset 5177344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5242880 ++wrote 32768/32768 bytes at offset 5242880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5308416 ++wrote 32768/32768 bytes at offset 5308416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5373952 ++wrote 32768/32768 bytes at offset 5373952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5439488 ++wrote 32768/32768 bytes at offset 5439488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5505024 ++wrote 32768/32768 bytes at offset 5505024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5570560 ++wrote 32768/32768 bytes at offset 5570560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5636096 ++wrote 32768/32768 bytes at offset 5636096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5701632 ++wrote 32768/32768 bytes at offset 5701632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5767168 ++wrote 32768/32768 bytes at offset 5767168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5832704 ++wrote 32768/32768 bytes at offset 5832704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5898240 ++wrote 32768/32768 bytes at offset 5898240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5963776 ++wrote 32768/32768 bytes at offset 5963776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6029312 ++wrote 32768/32768 bytes at offset 6029312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6094848 ++wrote 32768/32768 bytes at offset 6094848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6160384 ++wrote 32768/32768 bytes at offset 6160384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6225920 ++wrote 32768/32768 bytes at offset 6225920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6291456 ++wrote 32768/32768 bytes at offset 6291456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6356992 ++wrote 32768/32768 bytes at offset 6356992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6422528 ++wrote 32768/32768 bytes at offset 6422528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6488064 ++wrote 32768/32768 bytes at offset 6488064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6553600 ++wrote 32768/32768 bytes at offset 6553600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6619136 ++wrote 32768/32768 bytes at offset 6619136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6684672 ++wrote 32768/32768 bytes at offset 6684672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6750208 ++wrote 32768/32768 bytes at offset 6750208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6815744 ++wrote 32768/32768 bytes at offset 6815744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6881280 ++wrote 32768/32768 bytes at offset 6881280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6946816 ++wrote 32768/32768 bytes at offset 6946816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7012352 ++wrote 32768/32768 bytes at offset 7012352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> wrote 32768/32768 bytes at offset 7094272 ++=== IO: pattern 32 ++wrote 32768/32768 bytes at offset 7094272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7159808 ++wrote 32768/32768 bytes at offset 7159808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7225344 ++wrote 32768/32768 bytes at offset 7225344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7290880 ++wrote 32768/32768 bytes at offset 7290880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7356416 ++wrote 32768/32768 bytes at offset 7356416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7421952 ++wrote 32768/32768 bytes at offset 7421952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7487488 ++wrote 32768/32768 bytes at offset 7487488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7553024 ++wrote 32768/32768 bytes at offset 7553024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7618560 ++wrote 32768/32768 bytes at offset 7618560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7684096 ++wrote 32768/32768 bytes at offset 7684096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7749632 ++wrote 32768/32768 bytes at offset 7749632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7815168 ++wrote 32768/32768 bytes at offset 7815168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7880704 ++wrote 32768/32768 bytes at offset 7880704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7946240 ++wrote 32768/32768 bytes at offset 7946240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8011776 ++wrote 32768/32768 bytes at offset 8011776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8077312 ++wrote 32768/32768 bytes at offset 8077312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8142848 ++wrote 32768/32768 bytes at offset 8142848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8208384 ++wrote 32768/32768 bytes at offset 8208384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8273920 ++wrote 32768/32768 bytes at offset 8273920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8339456 ++wrote 32768/32768 bytes at offset 8339456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8404992 ++wrote 32768/32768 bytes at offset 8404992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8470528 ++wrote 32768/32768 bytes at offset 8470528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8536064 ++wrote 32768/32768 bytes at offset 8536064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8601600 ++wrote 32768/32768 bytes at offset 8601600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8667136 ++wrote 32768/32768 bytes at offset 8667136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8732672 ++wrote 32768/32768 bytes at offset 8732672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8798208 ++wrote 32768/32768 bytes at offset 8798208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8863744 ++wrote 32768/32768 bytes at offset 8863744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8929280 ++wrote 32768/32768 bytes at offset 8929280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8994816 ++wrote 32768/32768 bytes at offset 8994816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9060352 ++wrote 32768/32768 bytes at offset 9060352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9125888 ++wrote 32768/32768 bytes at offset 9125888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9191424 ++wrote 32768/32768 bytes at offset 9191424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9256960 ++wrote 32768/32768 bytes at offset 9256960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9322496 ++wrote 32768/32768 bytes at offset 9322496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9388032 ++wrote 32768/32768 bytes at offset 9388032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 131072/131072 bytes at offset 9469952 ++=== IO: pattern 64 ++wrote 131072/131072 bytes at offset 9469952 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9666560 ++wrote 131072/131072 bytes at offset 9666560 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9863168 ++wrote 131072/131072 bytes at offset 9863168 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10059776 ++wrote 131072/131072 bytes at offset 10059776 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10256384 ++wrote 131072/131072 bytes at offset 10256384 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10452992 ++wrote 131072/131072 bytes at offset 10452992 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10649600 ++wrote 131072/131072 bytes at offset 10649600 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10846208 ++wrote 131072/131072 bytes at offset 10846208 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 11042816 ++wrote 131072/131072 bytes at offset 11042816 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1073676288 ++wrote 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1610579968 ++wrote 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 0 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 65536 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 131072 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 196608 ++read 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 262144 ++read 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 327680 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 393216 ++read 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 458752 ++read 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 524288 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 589824 ++read 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 655360 ++read 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 720896 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 786432 ++read 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 851968 ++read 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 917504 ++read 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 983040 ++read 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1048576 ++read 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114112 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1179648 ++read 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1245184 ++read 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1310720 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1376256 ++read 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1441792 ++read 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1507328 ++read 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1572864 ++read 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1638400 ++read 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1703936 ++read 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1769472 ++read 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1835008 ++read 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1900544 ++read 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1966080 ++read 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2031616 ++read 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2097152 ++read 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2162688 ++read 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2228224 ++read 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2293760 ++read 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 2392064 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 2392064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2457600 ++read 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2523136 ++read 32768/32768 bytes at offset 2523136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2588672 ++read 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2654208 ++read 32768/32768 bytes at offset 2654208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2719744 ++read 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2785280 ++read 32768/32768 bytes at offset 2785280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2850816 ++read 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2916352 ++read 32768/32768 bytes at offset 2916352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2981888 ++read 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3047424 ++read 32768/32768 bytes at offset 3047424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3112960 ++read 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3178496 ++read 32768/32768 bytes at offset 3178496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244032 ++read 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3309568 ++read 32768/32768 bytes at offset 3309568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375104 ++read 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3440640 ++read 32768/32768 bytes at offset 3440640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506176 ++read 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3571712 ++read 32768/32768 bytes at offset 3571712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637248 ++read 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3702784 ++read 32768/32768 bytes at offset 3702784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768320 ++read 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3833856 ++read 32768/32768 bytes at offset 3833856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899392 ++read 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3964928 ++read 32768/32768 bytes at offset 3964928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030464 ++read 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4096000 ++read 32768/32768 bytes at offset 4096000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4161536 ++read 32768/32768 bytes at offset 4161536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4227072 ++read 32768/32768 bytes at offset 4227072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4292608 ++read 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4358144 ++read 32768/32768 bytes at offset 4358144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4423680 ++read 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4489216 ++read 32768/32768 bytes at offset 4489216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4554752 ++read 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4620288 ++read 32768/32768 bytes at offset 4620288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4685824 ++read 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4718592 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4718592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4784128 ++read 32768/32768 bytes at offset 4784128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4849664 ++read 32768/32768 bytes at offset 4849664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4915200 ++read 32768/32768 bytes at offset 4915200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4980736 ++read 32768/32768 bytes at offset 4980736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5046272 ++read 32768/32768 bytes at offset 5046272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5111808 ++read 32768/32768 bytes at offset 5111808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5177344 ++read 32768/32768 bytes at offset 5177344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5242880 ++read 32768/32768 bytes at offset 5242880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5308416 ++read 32768/32768 bytes at offset 5308416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5373952 ++read 32768/32768 bytes at offset 5373952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5439488 ++read 32768/32768 bytes at offset 5439488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5505024 ++read 32768/32768 bytes at offset 5505024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5570560 ++read 32768/32768 bytes at offset 5570560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5636096 ++read 32768/32768 bytes at offset 5636096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5701632 ++read 32768/32768 bytes at offset 5701632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5767168 ++read 32768/32768 bytes at offset 5767168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5832704 ++read 32768/32768 bytes at offset 5832704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5898240 ++read 32768/32768 bytes at offset 5898240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5963776 ++read 32768/32768 bytes at offset 5963776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6029312 ++read 32768/32768 bytes at offset 6029312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6094848 ++read 32768/32768 bytes at offset 6094848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6160384 ++read 32768/32768 bytes at offset 6160384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6225920 ++read 32768/32768 bytes at offset 6225920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6291456 ++read 32768/32768 bytes at offset 6291456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6356992 ++read 32768/32768 bytes at offset 6356992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6422528 ++read 32768/32768 bytes at offset 6422528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6488064 ++read 32768/32768 bytes at offset 6488064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6553600 ++read 32768/32768 bytes at offset 6553600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6619136 ++read 32768/32768 bytes at offset 6619136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6684672 ++read 32768/32768 bytes at offset 6684672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6750208 ++read 32768/32768 bytes at offset 6750208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6815744 ++read 32768/32768 bytes at offset 6815744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6881280 ++read 32768/32768 bytes at offset 6881280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6946816 ++read 32768/32768 bytes at offset 6946816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7012352 ++read 32768/32768 bytes at offset 7012352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 7094272 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 7094272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7159808 ++read 32768/32768 bytes at offset 7159808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7225344 ++read 32768/32768 bytes at offset 7225344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7290880 ++read 32768/32768 bytes at offset 7290880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7356416 ++read 32768/32768 bytes at offset 7356416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7421952 ++read 32768/32768 bytes at offset 7421952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7487488 ++read 32768/32768 bytes at offset 7487488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7553024 ++read 32768/32768 bytes at offset 7553024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7618560 ++read 32768/32768 bytes at offset 7618560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7684096 ++read 32768/32768 bytes at offset 7684096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7749632 ++read 32768/32768 bytes at offset 7749632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7815168 ++read 32768/32768 bytes at offset 7815168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7880704 ++read 32768/32768 bytes at offset 7880704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7946240 ++read 32768/32768 bytes at offset 7946240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8011776 ++read 32768/32768 bytes at offset 8011776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8077312 ++read 32768/32768 bytes at offset 8077312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8142848 ++read 32768/32768 bytes at offset 8142848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8208384 ++read 32768/32768 bytes at offset 8208384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8273920 ++read 32768/32768 bytes at offset 8273920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8339456 ++read 32768/32768 bytes at offset 8339456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8404992 ++read 32768/32768 bytes at offset 8404992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8470528 ++read 32768/32768 bytes at offset 8470528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8536064 ++read 32768/32768 bytes at offset 8536064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8601600 ++read 32768/32768 bytes at offset 8601600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8667136 ++read 32768/32768 bytes at offset 8667136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8732672 ++read 32768/32768 bytes at offset 8732672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8798208 ++read 32768/32768 bytes at offset 8798208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8863744 ++read 32768/32768 bytes at offset 8863744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8929280 ++read 32768/32768 bytes at offset 8929280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8994816 ++read 32768/32768 bytes at offset 8994816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9060352 ++read 32768/32768 bytes at offset 9060352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9125888 ++read 32768/32768 bytes at offset 9125888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9191424 ++read 32768/32768 bytes at offset 9191424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9256960 ++read 32768/32768 bytes at offset 9256960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9322496 ++read 32768/32768 bytes at offset 9322496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9388032 ++read 32768/32768 bytes at offset 9388032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 9469952 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 9469952 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9666560 ++read 131072/131072 bytes at offset 9666560 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9863168 ++read 131072/131072 bytes at offset 9863168 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10059776 ++read 131072/131072 bytes at offset 10059776 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10256384 ++read 131072/131072 bytes at offset 10256384 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10452992 ++read 131072/131072 bytes at offset 10452992 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10649600 ++read 131072/131072 bytes at offset 10649600 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10846208 ++read 131072/131072 bytes at offset 10846208 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 11042816 ++read 131072/131072 bytes at offset 11042816 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1073676288 ++read 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1610579968 ++read 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + At offset 4294967296: + === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 4294967296 ++wrote 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295032832 ++wrote 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295098368 ++wrote 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295163904 ++wrote 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295229440 ++wrote 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295294976 ++wrote 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295360512 ++wrote 65536/65536 bytes at offset 4295360512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295426048 ++wrote 65536/65536 bytes at offset 4295426048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295491584 ++wrote 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295557120 ++wrote 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295622656 ++wrote 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295688192 ++wrote 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295753728 ++wrote 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295819264 ++wrote 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295884800 ++wrote 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295950336 ++wrote 65536/65536 bytes at offset 4295950336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296015872 ++wrote 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296081408 ++wrote 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296146944 ++wrote 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296212480 ++wrote 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296278016 ++wrote 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296343552 ++wrote 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296409088 ++wrote 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296474624 ++wrote 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296540160 ++wrote 65536/65536 bytes at offset 4296540160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296605696 ++wrote 65536/65536 bytes at offset 4296605696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296671232 ++wrote 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296736768 ++wrote 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296802304 ++wrote 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296867840 ++wrote 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296933376 ++wrote 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296998912 ++wrote 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297064448 ++wrote 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297129984 ++wrote 65536/65536 bytes at offset 4297129984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297195520 ++wrote 65536/65536 bytes at offset 4297195520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297261056 ++wrote 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 32768/32768 bytes at offset 4297359360 ++=== IO: pattern 64 ++wrote 32768/32768 bytes at offset 4297359360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297424896 ++wrote 32768/32768 bytes at offset 4297424896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297490432 ++wrote 32768/32768 bytes at offset 4297490432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297555968 ++wrote 32768/32768 bytes at offset 4297555968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297621504 ++wrote 32768/32768 bytes at offset 4297621504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297687040 ++wrote 32768/32768 bytes at offset 4297687040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297752576 ++wrote 32768/32768 bytes at offset 4297752576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297818112 ++wrote 32768/32768 bytes at offset 4297818112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297883648 ++wrote 32768/32768 bytes at offset 4297883648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297949184 ++wrote 32768/32768 bytes at offset 4297949184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298014720 ++wrote 32768/32768 bytes at offset 4298014720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298080256 ++wrote 32768/32768 bytes at offset 4298080256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298145792 ++wrote 32768/32768 bytes at offset 4298145792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298211328 ++wrote 32768/32768 bytes at offset 4298211328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298276864 ++wrote 32768/32768 bytes at offset 4298276864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298342400 ++wrote 32768/32768 bytes at offset 4298342400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298407936 ++wrote 32768/32768 bytes at offset 4298407936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298473472 ++wrote 32768/32768 bytes at offset 4298473472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298539008 ++wrote 32768/32768 bytes at offset 4298539008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298604544 ++wrote 32768/32768 bytes at offset 4298604544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298670080 ++wrote 32768/32768 bytes at offset 4298670080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298735616 ++wrote 32768/32768 bytes at offset 4298735616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298801152 ++wrote 32768/32768 bytes at offset 4298801152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298866688 ++wrote 32768/32768 bytes at offset 4298866688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298932224 ++wrote 32768/32768 bytes at offset 4298932224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298997760 ++wrote 32768/32768 bytes at offset 4298997760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299063296 ++wrote 32768/32768 bytes at offset 4299063296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299128832 ++wrote 32768/32768 bytes at offset 4299128832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299194368 ++wrote 32768/32768 bytes at offset 4299194368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299259904 ++wrote 32768/32768 bytes at offset 4299259904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299325440 ++wrote 32768/32768 bytes at offset 4299325440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299390976 ++wrote 32768/32768 bytes at offset 4299390976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299456512 ++wrote 32768/32768 bytes at offset 4299456512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299522048 ++wrote 32768/32768 bytes at offset 4299522048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299587584 ++wrote 32768/32768 bytes at offset 4299587584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299653120 ++wrote 32768/32768 bytes at offset 4299653120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 32768/32768 bytes at offset 4299685888 ++=== IO: pattern 0 ++wrote 32768/32768 bytes at offset 4299685888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299751424 ++wrote 32768/32768 bytes at offset 4299751424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299816960 ++wrote 32768/32768 bytes at offset 4299816960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299882496 ++wrote 32768/32768 bytes at offset 4299882496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299948032 ++wrote 32768/32768 bytes at offset 4299948032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300013568 ++wrote 32768/32768 bytes at offset 4300013568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300079104 ++wrote 32768/32768 bytes at offset 4300079104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300144640 ++wrote 32768/32768 bytes at offset 4300144640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300210176 ++wrote 32768/32768 bytes at offset 4300210176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300275712 ++wrote 32768/32768 bytes at offset 4300275712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300341248 ++wrote 32768/32768 bytes at offset 4300341248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300406784 ++wrote 32768/32768 bytes at offset 4300406784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300472320 ++wrote 32768/32768 bytes at offset 4300472320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300537856 ++wrote 32768/32768 bytes at offset 4300537856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300603392 ++wrote 32768/32768 bytes at offset 4300603392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300668928 ++wrote 32768/32768 bytes at offset 4300668928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300734464 ++wrote 32768/32768 bytes at offset 4300734464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300800000 ++wrote 32768/32768 bytes at offset 4300800000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300865536 ++wrote 32768/32768 bytes at offset 4300865536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300931072 ++wrote 32768/32768 bytes at offset 4300931072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300996608 ++wrote 32768/32768 bytes at offset 4300996608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301062144 ++wrote 32768/32768 bytes at offset 4301062144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301127680 ++wrote 32768/32768 bytes at offset 4301127680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301193216 ++wrote 32768/32768 bytes at offset 4301193216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301258752 ++wrote 32768/32768 bytes at offset 4301258752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301324288 ++wrote 32768/32768 bytes at offset 4301324288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301389824 ++wrote 32768/32768 bytes at offset 4301389824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301455360 ++wrote 32768/32768 bytes at offset 4301455360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301520896 ++wrote 32768/32768 bytes at offset 4301520896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301586432 ++wrote 32768/32768 bytes at offset 4301586432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301651968 ++wrote 32768/32768 bytes at offset 4301651968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301717504 ++wrote 32768/32768 bytes at offset 4301717504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301783040 ++wrote 32768/32768 bytes at offset 4301783040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301848576 ++wrote 32768/32768 bytes at offset 4301848576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301914112 ++wrote 32768/32768 bytes at offset 4301914112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301979648 ++wrote 32768/32768 bytes at offset 4301979648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> wrote 32768/32768 bytes at offset 4302061568 ++=== IO: pattern 32 ++wrote 32768/32768 bytes at offset 4302061568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302127104 ++wrote 32768/32768 bytes at offset 4302127104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302192640 ++wrote 32768/32768 bytes at offset 4302192640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302258176 ++wrote 32768/32768 bytes at offset 4302258176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302323712 ++wrote 32768/32768 bytes at offset 4302323712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302389248 ++wrote 32768/32768 bytes at offset 4302389248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302454784 ++wrote 32768/32768 bytes at offset 4302454784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302520320 ++wrote 32768/32768 bytes at offset 4302520320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302585856 ++wrote 32768/32768 bytes at offset 4302585856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302651392 ++wrote 32768/32768 bytes at offset 4302651392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302716928 ++wrote 32768/32768 bytes at offset 4302716928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302782464 ++wrote 32768/32768 bytes at offset 4302782464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302848000 ++wrote 32768/32768 bytes at offset 4302848000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302913536 ++wrote 32768/32768 bytes at offset 4302913536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302979072 ++wrote 32768/32768 bytes at offset 4302979072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303044608 ++wrote 32768/32768 bytes at offset 4303044608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303110144 ++wrote 32768/32768 bytes at offset 4303110144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303175680 ++wrote 32768/32768 bytes at offset 4303175680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303241216 ++wrote 32768/32768 bytes at offset 4303241216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303306752 ++wrote 32768/32768 bytes at offset 4303306752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303372288 ++wrote 32768/32768 bytes at offset 4303372288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303437824 ++wrote 32768/32768 bytes at offset 4303437824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303503360 ++wrote 32768/32768 bytes at offset 4303503360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303568896 ++wrote 32768/32768 bytes at offset 4303568896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303634432 ++wrote 32768/32768 bytes at offset 4303634432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303699968 ++wrote 32768/32768 bytes at offset 4303699968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303765504 ++wrote 32768/32768 bytes at offset 4303765504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303831040 ++wrote 32768/32768 bytes at offset 4303831040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303896576 ++wrote 32768/32768 bytes at offset 4303896576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303962112 ++wrote 32768/32768 bytes at offset 4303962112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304027648 ++wrote 32768/32768 bytes at offset 4304027648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304093184 ++wrote 32768/32768 bytes at offset 4304093184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304158720 ++wrote 32768/32768 bytes at offset 4304158720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304224256 ++wrote 32768/32768 bytes at offset 4304224256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304289792 ++wrote 32768/32768 bytes at offset 4304289792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304355328 ++wrote 32768/32768 bytes at offset 4304355328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 131072/131072 bytes at offset 4304437248 ++=== IO: pattern 64 ++wrote 131072/131072 bytes at offset 4304437248 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304633856 ++wrote 131072/131072 bytes at offset 4304633856 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304830464 ++wrote 131072/131072 bytes at offset 4304830464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305027072 ++wrote 131072/131072 bytes at offset 4305027072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305223680 ++wrote 131072/131072 bytes at offset 4305223680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305420288 ++wrote 131072/131072 bytes at offset 4305420288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305616896 ++wrote 131072/131072 bytes at offset 4305616896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305813504 ++wrote 131072/131072 bytes at offset 4305813504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4306010112 ++wrote 131072/131072 bytes at offset 4306010112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5368643584 ++wrote 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5905547264 ++wrote 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295163904 ++read 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295229440 ++read 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295360512 ++read 65536/65536 bytes at offset 4295360512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295426048 ++read 65536/65536 bytes at offset 4295426048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295491584 ++read 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295557120 ++read 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295622656 ++read 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688192 ++read 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295753728 ++read 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295819264 ++read 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295884800 ++read 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295950336 ++read 65536/65536 bytes at offset 4295950336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296015872 ++read 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296146944 ++read 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296212480 ++read 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296343552 ++read 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296409088 ++read 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296474624 ++read 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296540160 ++read 65536/65536 bytes at offset 4296540160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296605696 ++read 65536/65536 bytes at offset 4296605696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671232 ++read 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296736768 ++read 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296802304 ++read 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296867840 ++read 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296933376 ++read 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296998912 ++read 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297064448 ++read 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297129984 ++read 65536/65536 bytes at offset 4297129984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297195520 ++read 65536/65536 bytes at offset 4297195520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261056 ++read 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 4297359360 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 4297359360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297424896 ++read 32768/32768 bytes at offset 4297424896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297490432 ++read 32768/32768 bytes at offset 4297490432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297555968 ++read 32768/32768 bytes at offset 4297555968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297621504 ++read 32768/32768 bytes at offset 4297621504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297687040 ++read 32768/32768 bytes at offset 4297687040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297752576 ++read 32768/32768 bytes at offset 4297752576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297818112 ++read 32768/32768 bytes at offset 4297818112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297883648 ++read 32768/32768 bytes at offset 4297883648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297949184 ++read 32768/32768 bytes at offset 4297949184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298014720 ++read 32768/32768 bytes at offset 4298014720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298080256 ++read 32768/32768 bytes at offset 4298080256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298145792 ++read 32768/32768 bytes at offset 4298145792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298211328 ++read 32768/32768 bytes at offset 4298211328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298276864 ++read 32768/32768 bytes at offset 4298276864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298342400 ++read 32768/32768 bytes at offset 4298342400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298407936 ++read 32768/32768 bytes at offset 4298407936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298473472 ++read 32768/32768 bytes at offset 4298473472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298539008 ++read 32768/32768 bytes at offset 4298539008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298604544 ++read 32768/32768 bytes at offset 4298604544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298670080 ++read 32768/32768 bytes at offset 4298670080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298735616 ++read 32768/32768 bytes at offset 4298735616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298801152 ++read 32768/32768 bytes at offset 4298801152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298866688 ++read 32768/32768 bytes at offset 4298866688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298932224 ++read 32768/32768 bytes at offset 4298932224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298997760 ++read 32768/32768 bytes at offset 4298997760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299063296 ++read 32768/32768 bytes at offset 4299063296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299128832 ++read 32768/32768 bytes at offset 4299128832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299194368 ++read 32768/32768 bytes at offset 4299194368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299259904 ++read 32768/32768 bytes at offset 4299259904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299325440 ++read 32768/32768 bytes at offset 4299325440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299390976 ++read 32768/32768 bytes at offset 4299390976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299456512 ++read 32768/32768 bytes at offset 4299456512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299522048 ++read 32768/32768 bytes at offset 4299522048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299587584 ++read 32768/32768 bytes at offset 4299587584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299653120 ++read 32768/32768 bytes at offset 4299653120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4299685888 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4299685888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299751424 ++read 32768/32768 bytes at offset 4299751424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299816960 ++read 32768/32768 bytes at offset 4299816960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299882496 ++read 32768/32768 bytes at offset 4299882496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299948032 ++read 32768/32768 bytes at offset 4299948032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300013568 ++read 32768/32768 bytes at offset 4300013568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300079104 ++read 32768/32768 bytes at offset 4300079104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300144640 ++read 32768/32768 bytes at offset 4300144640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300210176 ++read 32768/32768 bytes at offset 4300210176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300275712 ++read 32768/32768 bytes at offset 4300275712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300341248 ++read 32768/32768 bytes at offset 4300341248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300406784 ++read 32768/32768 bytes at offset 4300406784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300472320 ++read 32768/32768 bytes at offset 4300472320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300537856 ++read 32768/32768 bytes at offset 4300537856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300603392 ++read 32768/32768 bytes at offset 4300603392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300668928 ++read 32768/32768 bytes at offset 4300668928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300734464 ++read 32768/32768 bytes at offset 4300734464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300800000 ++read 32768/32768 bytes at offset 4300800000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300865536 ++read 32768/32768 bytes at offset 4300865536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300931072 ++read 32768/32768 bytes at offset 4300931072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300996608 ++read 32768/32768 bytes at offset 4300996608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301062144 ++read 32768/32768 bytes at offset 4301062144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301127680 ++read 32768/32768 bytes at offset 4301127680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301193216 ++read 32768/32768 bytes at offset 4301193216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301258752 ++read 32768/32768 bytes at offset 4301258752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301324288 ++read 32768/32768 bytes at offset 4301324288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301389824 ++read 32768/32768 bytes at offset 4301389824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301455360 ++read 32768/32768 bytes at offset 4301455360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301520896 ++read 32768/32768 bytes at offset 4301520896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301586432 ++read 32768/32768 bytes at offset 4301586432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301651968 ++read 32768/32768 bytes at offset 4301651968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301717504 ++read 32768/32768 bytes at offset 4301717504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301783040 ++read 32768/32768 bytes at offset 4301783040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301848576 ++read 32768/32768 bytes at offset 4301848576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301914112 ++read 32768/32768 bytes at offset 4301914112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301979648 ++read 32768/32768 bytes at offset 4301979648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 4302061568 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 4302061568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302127104 ++read 32768/32768 bytes at offset 4302127104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302192640 ++read 32768/32768 bytes at offset 4302192640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302258176 ++read 32768/32768 bytes at offset 4302258176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302323712 ++read 32768/32768 bytes at offset 4302323712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302389248 ++read 32768/32768 bytes at offset 4302389248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302454784 ++read 32768/32768 bytes at offset 4302454784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302520320 ++read 32768/32768 bytes at offset 4302520320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302585856 ++read 32768/32768 bytes at offset 4302585856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302651392 ++read 32768/32768 bytes at offset 4302651392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302716928 ++read 32768/32768 bytes at offset 4302716928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302782464 ++read 32768/32768 bytes at offset 4302782464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302848000 ++read 32768/32768 bytes at offset 4302848000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302913536 ++read 32768/32768 bytes at offset 4302913536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302979072 ++read 32768/32768 bytes at offset 4302979072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303044608 ++read 32768/32768 bytes at offset 4303044608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303110144 ++read 32768/32768 bytes at offset 4303110144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303175680 ++read 32768/32768 bytes at offset 4303175680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303241216 ++read 32768/32768 bytes at offset 4303241216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303306752 ++read 32768/32768 bytes at offset 4303306752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303372288 ++read 32768/32768 bytes at offset 4303372288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303437824 ++read 32768/32768 bytes at offset 4303437824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303503360 ++read 32768/32768 bytes at offset 4303503360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303568896 ++read 32768/32768 bytes at offset 4303568896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303634432 ++read 32768/32768 bytes at offset 4303634432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303699968 ++read 32768/32768 bytes at offset 4303699968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303765504 ++read 32768/32768 bytes at offset 4303765504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303831040 ++read 32768/32768 bytes at offset 4303831040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303896576 ++read 32768/32768 bytes at offset 4303896576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303962112 ++read 32768/32768 bytes at offset 4303962112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304027648 ++read 32768/32768 bytes at offset 4304027648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304093184 ++read 32768/32768 bytes at offset 4304093184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304158720 ++read 32768/32768 bytes at offset 4304158720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304224256 ++read 32768/32768 bytes at offset 4304224256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304289792 ++read 32768/32768 bytes at offset 4304289792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304355328 ++read 32768/32768 bytes at offset 4304355328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 4304437248 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 4304437248 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304633856 ++read 131072/131072 bytes at offset 4304633856 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304830464 ++read 131072/131072 bytes at offset 4304830464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305027072 ++read 131072/131072 bytes at offset 4305027072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305223680 ++read 131072/131072 bytes at offset 4305223680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305420288 ++read 131072/131072 bytes at offset 4305420288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305616896 ++read 131072/131072 bytes at offset 4305616896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305813504 ++read 131072/131072 bytes at offset 4305813504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4306010112 ++read 131072/131072 bytes at offset 4306010112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5368643584 ++read 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5905547264 ++read 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 65536/65536 bytes at offset 4294967296 ++=== IO: pattern 0 ++wrote 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295032832 ++wrote 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295098368 ++wrote 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295163904 ++wrote 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295229440 ++wrote 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295294976 ++wrote 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295360512 ++wrote 65536/65536 bytes at offset 4295360512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295426048 ++wrote 65536/65536 bytes at offset 4295426048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295491584 ++wrote 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295557120 ++wrote 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295622656 ++wrote 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295688192 ++wrote 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295753728 ++wrote 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295819264 ++wrote 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295884800 ++wrote 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295950336 ++wrote 65536/65536 bytes at offset 4295950336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296015872 ++wrote 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296081408 ++wrote 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296146944 ++wrote 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296212480 ++wrote 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296278016 ++wrote 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296343552 ++wrote 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296409088 ++wrote 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296474624 ++wrote 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296540160 ++wrote 65536/65536 bytes at offset 4296540160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296605696 ++wrote 65536/65536 bytes at offset 4296605696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296671232 ++wrote 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296736768 ++wrote 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296802304 ++wrote 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296867840 ++wrote 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296933376 ++wrote 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296998912 ++wrote 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297064448 ++wrote 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297129984 ++wrote 65536/65536 bytes at offset 4297129984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297195520 ++wrote 65536/65536 bytes at offset 4297195520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297261056 ++wrote 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 32768/32768 bytes at offset 4297359360 ++=== IO: pattern 64 ++wrote 32768/32768 bytes at offset 4297359360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297424896 ++wrote 32768/32768 bytes at offset 4297424896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297490432 ++wrote 32768/32768 bytes at offset 4297490432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297555968 ++wrote 32768/32768 bytes at offset 4297555968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297621504 ++wrote 32768/32768 bytes at offset 4297621504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297687040 ++wrote 32768/32768 bytes at offset 4297687040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297752576 ++wrote 32768/32768 bytes at offset 4297752576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297818112 ++wrote 32768/32768 bytes at offset 4297818112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297883648 ++wrote 32768/32768 bytes at offset 4297883648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297949184 ++wrote 32768/32768 bytes at offset 4297949184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298014720 ++wrote 32768/32768 bytes at offset 4298014720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298080256 ++wrote 32768/32768 bytes at offset 4298080256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298145792 ++wrote 32768/32768 bytes at offset 4298145792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298211328 ++wrote 32768/32768 bytes at offset 4298211328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298276864 ++wrote 32768/32768 bytes at offset 4298276864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298342400 ++wrote 32768/32768 bytes at offset 4298342400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298407936 ++wrote 32768/32768 bytes at offset 4298407936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298473472 ++wrote 32768/32768 bytes at offset 4298473472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298539008 ++wrote 32768/32768 bytes at offset 4298539008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298604544 ++wrote 32768/32768 bytes at offset 4298604544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298670080 ++wrote 32768/32768 bytes at offset 4298670080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298735616 ++wrote 32768/32768 bytes at offset 4298735616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298801152 ++wrote 32768/32768 bytes at offset 4298801152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298866688 ++wrote 32768/32768 bytes at offset 4298866688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298932224 ++wrote 32768/32768 bytes at offset 4298932224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298997760 ++wrote 32768/32768 bytes at offset 4298997760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299063296 ++wrote 32768/32768 bytes at offset 4299063296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299128832 ++wrote 32768/32768 bytes at offset 4299128832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299194368 ++wrote 32768/32768 bytes at offset 4299194368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299259904 ++wrote 32768/32768 bytes at offset 4299259904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299325440 ++wrote 32768/32768 bytes at offset 4299325440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299390976 ++wrote 32768/32768 bytes at offset 4299390976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299456512 ++wrote 32768/32768 bytes at offset 4299456512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299522048 ++wrote 32768/32768 bytes at offset 4299522048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299587584 ++wrote 32768/32768 bytes at offset 4299587584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299653120 ++wrote 32768/32768 bytes at offset 4299653120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> wrote 32768/32768 bytes at offset 4299685888 ++=== IO: pattern 0 ++wrote 32768/32768 bytes at offset 4299685888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299751424 ++wrote 32768/32768 bytes at offset 4299751424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299816960 ++wrote 32768/32768 bytes at offset 4299816960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299882496 ++wrote 32768/32768 bytes at offset 4299882496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299948032 ++wrote 32768/32768 bytes at offset 4299948032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300013568 ++wrote 32768/32768 bytes at offset 4300013568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300079104 ++wrote 32768/32768 bytes at offset 4300079104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300144640 ++wrote 32768/32768 bytes at offset 4300144640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300210176 ++wrote 32768/32768 bytes at offset 4300210176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300275712 ++wrote 32768/32768 bytes at offset 4300275712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300341248 ++wrote 32768/32768 bytes at offset 4300341248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300406784 ++wrote 32768/32768 bytes at offset 4300406784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300472320 ++wrote 32768/32768 bytes at offset 4300472320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300537856 ++wrote 32768/32768 bytes at offset 4300537856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300603392 ++wrote 32768/32768 bytes at offset 4300603392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300668928 ++wrote 32768/32768 bytes at offset 4300668928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300734464 ++wrote 32768/32768 bytes at offset 4300734464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300800000 ++wrote 32768/32768 bytes at offset 4300800000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300865536 ++wrote 32768/32768 bytes at offset 4300865536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300931072 ++wrote 32768/32768 bytes at offset 4300931072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300996608 ++wrote 32768/32768 bytes at offset 4300996608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301062144 ++wrote 32768/32768 bytes at offset 4301062144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301127680 ++wrote 32768/32768 bytes at offset 4301127680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301193216 ++wrote 32768/32768 bytes at offset 4301193216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301258752 ++wrote 32768/32768 bytes at offset 4301258752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301324288 ++wrote 32768/32768 bytes at offset 4301324288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301389824 ++wrote 32768/32768 bytes at offset 4301389824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301455360 ++wrote 32768/32768 bytes at offset 4301455360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301520896 ++wrote 32768/32768 bytes at offset 4301520896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301586432 ++wrote 32768/32768 bytes at offset 4301586432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301651968 ++wrote 32768/32768 bytes at offset 4301651968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301717504 ++wrote 32768/32768 bytes at offset 4301717504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301783040 ++wrote 32768/32768 bytes at offset 4301783040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301848576 ++wrote 32768/32768 bytes at offset 4301848576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301914112 ++wrote 32768/32768 bytes at offset 4301914112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301979648 ++wrote 32768/32768 bytes at offset 4301979648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> wrote 32768/32768 bytes at offset 4302061568 ++=== IO: pattern 32 ++wrote 32768/32768 bytes at offset 4302061568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302127104 ++wrote 32768/32768 bytes at offset 4302127104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302192640 ++wrote 32768/32768 bytes at offset 4302192640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302258176 ++wrote 32768/32768 bytes at offset 4302258176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302323712 ++wrote 32768/32768 bytes at offset 4302323712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302389248 ++wrote 32768/32768 bytes at offset 4302389248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302454784 ++wrote 32768/32768 bytes at offset 4302454784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302520320 ++wrote 32768/32768 bytes at offset 4302520320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302585856 ++wrote 32768/32768 bytes at offset 4302585856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302651392 ++wrote 32768/32768 bytes at offset 4302651392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302716928 ++wrote 32768/32768 bytes at offset 4302716928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302782464 ++wrote 32768/32768 bytes at offset 4302782464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302848000 ++wrote 32768/32768 bytes at offset 4302848000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302913536 ++wrote 32768/32768 bytes at offset 4302913536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302979072 ++wrote 32768/32768 bytes at offset 4302979072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303044608 ++wrote 32768/32768 bytes at offset 4303044608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303110144 ++wrote 32768/32768 bytes at offset 4303110144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303175680 ++wrote 32768/32768 bytes at offset 4303175680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303241216 ++wrote 32768/32768 bytes at offset 4303241216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303306752 ++wrote 32768/32768 bytes at offset 4303306752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303372288 ++wrote 32768/32768 bytes at offset 4303372288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303437824 ++wrote 32768/32768 bytes at offset 4303437824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303503360 ++wrote 32768/32768 bytes at offset 4303503360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303568896 ++wrote 32768/32768 bytes at offset 4303568896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303634432 ++wrote 32768/32768 bytes at offset 4303634432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303699968 ++wrote 32768/32768 bytes at offset 4303699968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303765504 ++wrote 32768/32768 bytes at offset 4303765504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303831040 ++wrote 32768/32768 bytes at offset 4303831040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303896576 ++wrote 32768/32768 bytes at offset 4303896576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303962112 ++wrote 32768/32768 bytes at offset 4303962112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304027648 ++wrote 32768/32768 bytes at offset 4304027648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304093184 ++wrote 32768/32768 bytes at offset 4304093184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304158720 ++wrote 32768/32768 bytes at offset 4304158720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304224256 ++wrote 32768/32768 bytes at offset 4304224256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304289792 ++wrote 32768/32768 bytes at offset 4304289792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304355328 ++wrote 32768/32768 bytes at offset 4304355328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 131072/131072 bytes at offset 4304437248 ++=== IO: pattern 64 ++wrote 131072/131072 bytes at offset 4304437248 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304633856 ++wrote 131072/131072 bytes at offset 4304633856 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304830464 ++wrote 131072/131072 bytes at offset 4304830464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305027072 ++wrote 131072/131072 bytes at offset 4305027072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305223680 ++wrote 131072/131072 bytes at offset 4305223680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305420288 ++wrote 131072/131072 bytes at offset 4305420288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305616896 ++wrote 131072/131072 bytes at offset 4305616896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305813504 ++wrote 131072/131072 bytes at offset 4305813504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4306010112 ++wrote 131072/131072 bytes at offset 4306010112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5368643584 ++wrote 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5905547264 ++wrote 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295163904 ++read 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295229440 ++read 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295360512 ++read 65536/65536 bytes at offset 4295360512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295426048 ++read 65536/65536 bytes at offset 4295426048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295491584 ++read 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295557120 ++read 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295622656 ++read 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688192 ++read 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295753728 ++read 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295819264 ++read 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295884800 ++read 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295950336 ++read 65536/65536 bytes at offset 4295950336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296015872 ++read 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296146944 ++read 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296212480 ++read 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296343552 ++read 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296409088 ++read 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296474624 ++read 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296540160 ++read 65536/65536 bytes at offset 4296540160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296605696 ++read 65536/65536 bytes at offset 4296605696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671232 ++read 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296736768 ++read 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296802304 ++read 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296867840 ++read 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296933376 ++read 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296998912 ++read 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297064448 ++read 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297129984 ++read 65536/65536 bytes at offset 4297129984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297195520 ++read 65536/65536 bytes at offset 4297195520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261056 ++read 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 4297359360 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 4297359360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297424896 ++read 32768/32768 bytes at offset 4297424896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297490432 ++read 32768/32768 bytes at offset 4297490432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297555968 ++read 32768/32768 bytes at offset 4297555968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297621504 ++read 32768/32768 bytes at offset 4297621504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297687040 ++read 32768/32768 bytes at offset 4297687040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297752576 ++read 32768/32768 bytes at offset 4297752576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297818112 ++read 32768/32768 bytes at offset 4297818112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297883648 ++read 32768/32768 bytes at offset 4297883648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297949184 ++read 32768/32768 bytes at offset 4297949184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298014720 ++read 32768/32768 bytes at offset 4298014720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298080256 ++read 32768/32768 bytes at offset 4298080256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298145792 ++read 32768/32768 bytes at offset 4298145792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298211328 ++read 32768/32768 bytes at offset 4298211328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298276864 ++read 32768/32768 bytes at offset 4298276864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298342400 ++read 32768/32768 bytes at offset 4298342400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298407936 ++read 32768/32768 bytes at offset 4298407936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298473472 ++read 32768/32768 bytes at offset 4298473472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298539008 ++read 32768/32768 bytes at offset 4298539008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298604544 ++read 32768/32768 bytes at offset 4298604544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298670080 ++read 32768/32768 bytes at offset 4298670080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298735616 ++read 32768/32768 bytes at offset 4298735616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298801152 ++read 32768/32768 bytes at offset 4298801152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298866688 ++read 32768/32768 bytes at offset 4298866688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298932224 ++read 32768/32768 bytes at offset 4298932224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298997760 ++read 32768/32768 bytes at offset 4298997760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299063296 ++read 32768/32768 bytes at offset 4299063296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299128832 ++read 32768/32768 bytes at offset 4299128832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299194368 ++read 32768/32768 bytes at offset 4299194368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299259904 ++read 32768/32768 bytes at offset 4299259904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299325440 ++read 32768/32768 bytes at offset 4299325440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299390976 ++read 32768/32768 bytes at offset 4299390976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299456512 ++read 32768/32768 bytes at offset 4299456512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299522048 ++read 32768/32768 bytes at offset 4299522048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299587584 ++read 32768/32768 bytes at offset 4299587584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299653120 ++read 32768/32768 bytes at offset 4299653120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4299685888 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4299685888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299751424 ++read 32768/32768 bytes at offset 4299751424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299816960 ++read 32768/32768 bytes at offset 4299816960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299882496 ++read 32768/32768 bytes at offset 4299882496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299948032 ++read 32768/32768 bytes at offset 4299948032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300013568 ++read 32768/32768 bytes at offset 4300013568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300079104 ++read 32768/32768 bytes at offset 4300079104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300144640 ++read 32768/32768 bytes at offset 4300144640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300210176 ++read 32768/32768 bytes at offset 4300210176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300275712 ++read 32768/32768 bytes at offset 4300275712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300341248 ++read 32768/32768 bytes at offset 4300341248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300406784 ++read 32768/32768 bytes at offset 4300406784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300472320 ++read 32768/32768 bytes at offset 4300472320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300537856 ++read 32768/32768 bytes at offset 4300537856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300603392 ++read 32768/32768 bytes at offset 4300603392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300668928 ++read 32768/32768 bytes at offset 4300668928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300734464 ++read 32768/32768 bytes at offset 4300734464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300800000 ++read 32768/32768 bytes at offset 4300800000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300865536 ++read 32768/32768 bytes at offset 4300865536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300931072 ++read 32768/32768 bytes at offset 4300931072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300996608 ++read 32768/32768 bytes at offset 4300996608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301062144 ++read 32768/32768 bytes at offset 4301062144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301127680 ++read 32768/32768 bytes at offset 4301127680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301193216 ++read 32768/32768 bytes at offset 4301193216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301258752 ++read 32768/32768 bytes at offset 4301258752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301324288 ++read 32768/32768 bytes at offset 4301324288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301389824 ++read 32768/32768 bytes at offset 4301389824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301455360 ++read 32768/32768 bytes at offset 4301455360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301520896 ++read 32768/32768 bytes at offset 4301520896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301586432 ++read 32768/32768 bytes at offset 4301586432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301651968 ++read 32768/32768 bytes at offset 4301651968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301717504 ++read 32768/32768 bytes at offset 4301717504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301783040 ++read 32768/32768 bytes at offset 4301783040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301848576 ++read 32768/32768 bytes at offset 4301848576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301914112 ++read 32768/32768 bytes at offset 4301914112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301979648 ++read 32768/32768 bytes at offset 4301979648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 4302061568 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 4302061568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302127104 ++read 32768/32768 bytes at offset 4302127104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302192640 ++read 32768/32768 bytes at offset 4302192640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302258176 ++read 32768/32768 bytes at offset 4302258176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302323712 ++read 32768/32768 bytes at offset 4302323712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302389248 ++read 32768/32768 bytes at offset 4302389248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302454784 ++read 32768/32768 bytes at offset 4302454784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302520320 ++read 32768/32768 bytes at offset 4302520320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302585856 ++read 32768/32768 bytes at offset 4302585856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302651392 ++read 32768/32768 bytes at offset 4302651392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302716928 ++read 32768/32768 bytes at offset 4302716928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302782464 ++read 32768/32768 bytes at offset 4302782464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302848000 ++read 32768/32768 bytes at offset 4302848000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302913536 ++read 32768/32768 bytes at offset 4302913536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302979072 ++read 32768/32768 bytes at offset 4302979072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303044608 ++read 32768/32768 bytes at offset 4303044608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303110144 ++read 32768/32768 bytes at offset 4303110144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303175680 ++read 32768/32768 bytes at offset 4303175680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303241216 ++read 32768/32768 bytes at offset 4303241216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303306752 ++read 32768/32768 bytes at offset 4303306752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303372288 ++read 32768/32768 bytes at offset 4303372288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303437824 ++read 32768/32768 bytes at offset 4303437824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303503360 ++read 32768/32768 bytes at offset 4303503360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303568896 ++read 32768/32768 bytes at offset 4303568896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303634432 ++read 32768/32768 bytes at offset 4303634432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303699968 ++read 32768/32768 bytes at offset 4303699968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303765504 ++read 32768/32768 bytes at offset 4303765504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303831040 ++read 32768/32768 bytes at offset 4303831040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303896576 ++read 32768/32768 bytes at offset 4303896576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303962112 ++read 32768/32768 bytes at offset 4303962112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304027648 ++read 32768/32768 bytes at offset 4304027648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304093184 ++read 32768/32768 bytes at offset 4304093184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304158720 ++read 32768/32768 bytes at offset 4304158720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304224256 ++read 32768/32768 bytes at offset 4304224256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304289792 ++read 32768/32768 bytes at offset 4304289792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304355328 ++read 32768/32768 bytes at offset 4304355328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 4304437248 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 4304437248 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304633856 ++read 131072/131072 bytes at offset 4304633856 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304830464 ++read 131072/131072 bytes at offset 4304830464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305027072 ++read 131072/131072 bytes at offset 4305027072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305223680 ++read 131072/131072 bytes at offset 4305223680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305420288 ++read 131072/131072 bytes at offset 4305420288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305616896 ++read 131072/131072 bytes at offset 4305616896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305813504 ++read 131072/131072 bytes at offset 4305813504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4306010112 ++read 131072/131072 bytes at offset 4306010112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5368643584 ++read 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5905547264 ++read 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Compressing image + + Testing compressed image + + With offset 0: + === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 65536 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 131072 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 196608 ++read 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 262144 ++read 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 327680 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 393216 ++read 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 458752 ++read 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 524288 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 589824 ++read 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 655360 ++read 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 720896 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 786432 ++read 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 851968 ++read 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 917504 ++read 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 983040 ++read 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1048576 ++read 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114112 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1179648 ++read 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1245184 ++read 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1310720 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1376256 ++read 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1441792 ++read 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1507328 ++read 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1572864 ++read 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1638400 ++read 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1703936 ++read 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1769472 ++read 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1835008 ++read 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1900544 ++read 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1966080 ++read 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2031616 ++read 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2097152 ++read 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2162688 ++read 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2228224 ++read 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2293760 ++read 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 2392064 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 2392064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2457600 ++read 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2523136 ++read 32768/32768 bytes at offset 2523136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2588672 ++read 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2654208 ++read 32768/32768 bytes at offset 2654208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2719744 ++read 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2785280 ++read 32768/32768 bytes at offset 2785280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2850816 ++read 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2916352 ++read 32768/32768 bytes at offset 2916352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2981888 ++read 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3047424 ++read 32768/32768 bytes at offset 3047424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3112960 ++read 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3178496 ++read 32768/32768 bytes at offset 3178496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244032 ++read 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3309568 ++read 32768/32768 bytes at offset 3309568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375104 ++read 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3440640 ++read 32768/32768 bytes at offset 3440640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506176 ++read 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3571712 ++read 32768/32768 bytes at offset 3571712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637248 ++read 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3702784 ++read 32768/32768 bytes at offset 3702784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768320 ++read 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3833856 ++read 32768/32768 bytes at offset 3833856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899392 ++read 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3964928 ++read 32768/32768 bytes at offset 3964928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030464 ++read 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4096000 ++read 32768/32768 bytes at offset 4096000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4161536 ++read 32768/32768 bytes at offset 4161536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4227072 ++read 32768/32768 bytes at offset 4227072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4292608 ++read 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4358144 ++read 32768/32768 bytes at offset 4358144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4423680 ++read 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4489216 ++read 32768/32768 bytes at offset 4489216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4554752 ++read 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4620288 ++read 32768/32768 bytes at offset 4620288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4685824 ++read 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4718592 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4718592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4784128 ++read 32768/32768 bytes at offset 4784128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4849664 ++read 32768/32768 bytes at offset 4849664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4915200 ++read 32768/32768 bytes at offset 4915200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4980736 ++read 32768/32768 bytes at offset 4980736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5046272 ++read 32768/32768 bytes at offset 5046272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5111808 ++read 32768/32768 bytes at offset 5111808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5177344 ++read 32768/32768 bytes at offset 5177344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5242880 ++read 32768/32768 bytes at offset 5242880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5308416 ++read 32768/32768 bytes at offset 5308416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5373952 ++read 32768/32768 bytes at offset 5373952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5439488 ++read 32768/32768 bytes at offset 5439488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5505024 ++read 32768/32768 bytes at offset 5505024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5570560 ++read 32768/32768 bytes at offset 5570560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5636096 ++read 32768/32768 bytes at offset 5636096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5701632 ++read 32768/32768 bytes at offset 5701632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5767168 ++read 32768/32768 bytes at offset 5767168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5832704 ++read 32768/32768 bytes at offset 5832704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5898240 ++read 32768/32768 bytes at offset 5898240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5963776 ++read 32768/32768 bytes at offset 5963776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6029312 ++read 32768/32768 bytes at offset 6029312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6094848 ++read 32768/32768 bytes at offset 6094848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6160384 ++read 32768/32768 bytes at offset 6160384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6225920 ++read 32768/32768 bytes at offset 6225920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6291456 ++read 32768/32768 bytes at offset 6291456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6356992 ++read 32768/32768 bytes at offset 6356992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6422528 ++read 32768/32768 bytes at offset 6422528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6488064 ++read 32768/32768 bytes at offset 6488064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6553600 ++read 32768/32768 bytes at offset 6553600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6619136 ++read 32768/32768 bytes at offset 6619136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6684672 ++read 32768/32768 bytes at offset 6684672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6750208 ++read 32768/32768 bytes at offset 6750208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6815744 ++read 32768/32768 bytes at offset 6815744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6881280 ++read 32768/32768 bytes at offset 6881280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6946816 ++read 32768/32768 bytes at offset 6946816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7012352 ++read 32768/32768 bytes at offset 7012352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 7094272 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 7094272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7159808 ++read 32768/32768 bytes at offset 7159808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7225344 ++read 32768/32768 bytes at offset 7225344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7290880 ++read 32768/32768 bytes at offset 7290880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7356416 ++read 32768/32768 bytes at offset 7356416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7421952 ++read 32768/32768 bytes at offset 7421952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7487488 ++read 32768/32768 bytes at offset 7487488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7553024 ++read 32768/32768 bytes at offset 7553024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7618560 ++read 32768/32768 bytes at offset 7618560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7684096 ++read 32768/32768 bytes at offset 7684096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7749632 ++read 32768/32768 bytes at offset 7749632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7815168 ++read 32768/32768 bytes at offset 7815168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7880704 ++read 32768/32768 bytes at offset 7880704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7946240 ++read 32768/32768 bytes at offset 7946240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8011776 ++read 32768/32768 bytes at offset 8011776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8077312 ++read 32768/32768 bytes at offset 8077312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8142848 ++read 32768/32768 bytes at offset 8142848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8208384 ++read 32768/32768 bytes at offset 8208384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8273920 ++read 32768/32768 bytes at offset 8273920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8339456 ++read 32768/32768 bytes at offset 8339456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8404992 ++read 32768/32768 bytes at offset 8404992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8470528 ++read 32768/32768 bytes at offset 8470528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8536064 ++read 32768/32768 bytes at offset 8536064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8601600 ++read 32768/32768 bytes at offset 8601600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8667136 ++read 32768/32768 bytes at offset 8667136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8732672 ++read 32768/32768 bytes at offset 8732672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8798208 ++read 32768/32768 bytes at offset 8798208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8863744 ++read 32768/32768 bytes at offset 8863744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8929280 ++read 32768/32768 bytes at offset 8929280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8994816 ++read 32768/32768 bytes at offset 8994816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9060352 ++read 32768/32768 bytes at offset 9060352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9125888 ++read 32768/32768 bytes at offset 9125888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9191424 ++read 32768/32768 bytes at offset 9191424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9256960 ++read 32768/32768 bytes at offset 9256960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9322496 ++read 32768/32768 bytes at offset 9322496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9388032 ++read 32768/32768 bytes at offset 9388032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 9469952 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 9469952 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9666560 ++read 131072/131072 bytes at offset 9666560 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9863168 ++read 131072/131072 bytes at offset 9863168 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10059776 ++read 131072/131072 bytes at offset 10059776 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10256384 ++read 131072/131072 bytes at offset 10256384 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10452992 ++read 131072/131072 bytes at offset 10452992 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10649600 ++read 131072/131072 bytes at offset 10649600 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10846208 ++read 131072/131072 bytes at offset 10846208 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 11042816 ++read 131072/131072 bytes at offset 11042816 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1073676288 ++read 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1610579968 ++read 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 0 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 65536 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 131072 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 196608 ++read 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 262144 ++read 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 327680 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 393216 ++read 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 458752 ++read 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 524288 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 589824 ++read 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 655360 ++read 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 720896 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 786432 ++read 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 851968 ++read 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 917504 ++read 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 983040 ++read 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1048576 ++read 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114112 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1179648 ++read 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1245184 ++read 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1310720 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1376256 ++read 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1441792 ++read 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1507328 ++read 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1572864 ++read 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1638400 ++read 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1703936 ++read 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1769472 ++read 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1835008 ++read 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1900544 ++read 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1966080 ++read 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2031616 ++read 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2097152 ++read 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2162688 ++read 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2228224 ++read 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2293760 ++read 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 2392064 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 2392064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2457600 ++read 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2523136 ++read 32768/32768 bytes at offset 2523136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2588672 ++read 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2654208 ++read 32768/32768 bytes at offset 2654208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2719744 ++read 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2785280 ++read 32768/32768 bytes at offset 2785280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2850816 ++read 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2916352 ++read 32768/32768 bytes at offset 2916352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2981888 ++read 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3047424 ++read 32768/32768 bytes at offset 3047424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3112960 ++read 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3178496 ++read 32768/32768 bytes at offset 3178496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244032 ++read 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3309568 ++read 32768/32768 bytes at offset 3309568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375104 ++read 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3440640 ++read 32768/32768 bytes at offset 3440640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506176 ++read 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3571712 ++read 32768/32768 bytes at offset 3571712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637248 ++read 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3702784 ++read 32768/32768 bytes at offset 3702784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768320 ++read 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3833856 ++read 32768/32768 bytes at offset 3833856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899392 ++read 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3964928 ++read 32768/32768 bytes at offset 3964928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030464 ++read 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4096000 ++read 32768/32768 bytes at offset 4096000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4161536 ++read 32768/32768 bytes at offset 4161536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4227072 ++read 32768/32768 bytes at offset 4227072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4292608 ++read 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4358144 ++read 32768/32768 bytes at offset 4358144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4423680 ++read 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4489216 ++read 32768/32768 bytes at offset 4489216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4554752 ++read 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4620288 ++read 32768/32768 bytes at offset 4620288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4685824 ++read 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4718592 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4718592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4784128 ++read 32768/32768 bytes at offset 4784128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4849664 ++read 32768/32768 bytes at offset 4849664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4915200 ++read 32768/32768 bytes at offset 4915200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4980736 ++read 32768/32768 bytes at offset 4980736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5046272 ++read 32768/32768 bytes at offset 5046272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5111808 ++read 32768/32768 bytes at offset 5111808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5177344 ++read 32768/32768 bytes at offset 5177344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5242880 ++read 32768/32768 bytes at offset 5242880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5308416 ++read 32768/32768 bytes at offset 5308416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5373952 ++read 32768/32768 bytes at offset 5373952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5439488 ++read 32768/32768 bytes at offset 5439488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5505024 ++read 32768/32768 bytes at offset 5505024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5570560 ++read 32768/32768 bytes at offset 5570560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5636096 ++read 32768/32768 bytes at offset 5636096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5701632 ++read 32768/32768 bytes at offset 5701632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5767168 ++read 32768/32768 bytes at offset 5767168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5832704 ++read 32768/32768 bytes at offset 5832704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5898240 ++read 32768/32768 bytes at offset 5898240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5963776 ++read 32768/32768 bytes at offset 5963776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6029312 ++read 32768/32768 bytes at offset 6029312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6094848 ++read 32768/32768 bytes at offset 6094848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6160384 ++read 32768/32768 bytes at offset 6160384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6225920 ++read 32768/32768 bytes at offset 6225920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6291456 ++read 32768/32768 bytes at offset 6291456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6356992 ++read 32768/32768 bytes at offset 6356992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6422528 ++read 32768/32768 bytes at offset 6422528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6488064 ++read 32768/32768 bytes at offset 6488064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6553600 ++read 32768/32768 bytes at offset 6553600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6619136 ++read 32768/32768 bytes at offset 6619136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6684672 ++read 32768/32768 bytes at offset 6684672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6750208 ++read 32768/32768 bytes at offset 6750208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6815744 ++read 32768/32768 bytes at offset 6815744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6881280 ++read 32768/32768 bytes at offset 6881280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6946816 ++read 32768/32768 bytes at offset 6946816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7012352 ++read 32768/32768 bytes at offset 7012352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 7094272 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 7094272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7159808 ++read 32768/32768 bytes at offset 7159808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7225344 ++read 32768/32768 bytes at offset 7225344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7290880 ++read 32768/32768 bytes at offset 7290880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7356416 ++read 32768/32768 bytes at offset 7356416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7421952 ++read 32768/32768 bytes at offset 7421952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7487488 ++read 32768/32768 bytes at offset 7487488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7553024 ++read 32768/32768 bytes at offset 7553024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7618560 ++read 32768/32768 bytes at offset 7618560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7684096 ++read 32768/32768 bytes at offset 7684096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7749632 ++read 32768/32768 bytes at offset 7749632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7815168 ++read 32768/32768 bytes at offset 7815168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7880704 ++read 32768/32768 bytes at offset 7880704 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7946240 ++read 32768/32768 bytes at offset 7946240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8011776 ++read 32768/32768 bytes at offset 8011776 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8077312 ++read 32768/32768 bytes at offset 8077312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8142848 ++read 32768/32768 bytes at offset 8142848 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8208384 ++read 32768/32768 bytes at offset 8208384 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8273920 ++read 32768/32768 bytes at offset 8273920 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8339456 ++read 32768/32768 bytes at offset 8339456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8404992 ++read 32768/32768 bytes at offset 8404992 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8470528 ++read 32768/32768 bytes at offset 8470528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8536064 ++read 32768/32768 bytes at offset 8536064 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8601600 ++read 32768/32768 bytes at offset 8601600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8667136 ++read 32768/32768 bytes at offset 8667136 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8732672 ++read 32768/32768 bytes at offset 8732672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8798208 ++read 32768/32768 bytes at offset 8798208 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8863744 ++read 32768/32768 bytes at offset 8863744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8929280 ++read 32768/32768 bytes at offset 8929280 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8994816 ++read 32768/32768 bytes at offset 8994816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9060352 ++read 32768/32768 bytes at offset 9060352 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9125888 ++read 32768/32768 bytes at offset 9125888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9191424 ++read 32768/32768 bytes at offset 9191424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9256960 ++read 32768/32768 bytes at offset 9256960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9322496 ++read 32768/32768 bytes at offset 9322496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9388032 ++read 32768/32768 bytes at offset 9388032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 9469952 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 9469952 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9666560 ++read 131072/131072 bytes at offset 9666560 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9863168 ++read 131072/131072 bytes at offset 9863168 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10059776 ++read 131072/131072 bytes at offset 10059776 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10256384 ++read 131072/131072 bytes at offset 10256384 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10452992 ++read 131072/131072 bytes at offset 10452992 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10649600 ++read 131072/131072 bytes at offset 10649600 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10846208 ++read 131072/131072 bytes at offset 10846208 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 11042816 ++read 131072/131072 bytes at offset 11042816 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1073676288 ++read 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1610579968 ++read 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967296: + === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4294967296 ++read 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295163904 ++read 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295229440 ++read 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295360512 ++read 65536/65536 bytes at offset 4295360512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295426048 ++read 65536/65536 bytes at offset 4295426048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295491584 ++read 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295557120 ++read 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295622656 ++read 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688192 ++read 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295753728 ++read 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295819264 ++read 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295884800 ++read 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295950336 ++read 65536/65536 bytes at offset 4295950336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296015872 ++read 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296146944 ++read 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296212480 ++read 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296343552 ++read 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296409088 ++read 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296474624 ++read 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296540160 ++read 65536/65536 bytes at offset 4296540160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296605696 ++read 65536/65536 bytes at offset 4296605696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671232 ++read 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296736768 ++read 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296802304 ++read 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296867840 ++read 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296933376 ++read 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296998912 ++read 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297064448 ++read 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297129984 ++read 65536/65536 bytes at offset 4297129984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297195520 ++read 65536/65536 bytes at offset 4297195520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261056 ++read 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 4297359360 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 4297359360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297424896 ++read 32768/32768 bytes at offset 4297424896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297490432 ++read 32768/32768 bytes at offset 4297490432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297555968 ++read 32768/32768 bytes at offset 4297555968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297621504 ++read 32768/32768 bytes at offset 4297621504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297687040 ++read 32768/32768 bytes at offset 4297687040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297752576 ++read 32768/32768 bytes at offset 4297752576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297818112 ++read 32768/32768 bytes at offset 4297818112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297883648 ++read 32768/32768 bytes at offset 4297883648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297949184 ++read 32768/32768 bytes at offset 4297949184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298014720 ++read 32768/32768 bytes at offset 4298014720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298080256 ++read 32768/32768 bytes at offset 4298080256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298145792 ++read 32768/32768 bytes at offset 4298145792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298211328 ++read 32768/32768 bytes at offset 4298211328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298276864 ++read 32768/32768 bytes at offset 4298276864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298342400 ++read 32768/32768 bytes at offset 4298342400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298407936 ++read 32768/32768 bytes at offset 4298407936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298473472 ++read 32768/32768 bytes at offset 4298473472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298539008 ++read 32768/32768 bytes at offset 4298539008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298604544 ++read 32768/32768 bytes at offset 4298604544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298670080 ++read 32768/32768 bytes at offset 4298670080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298735616 ++read 32768/32768 bytes at offset 4298735616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298801152 ++read 32768/32768 bytes at offset 4298801152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298866688 ++read 32768/32768 bytes at offset 4298866688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298932224 ++read 32768/32768 bytes at offset 4298932224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298997760 ++read 32768/32768 bytes at offset 4298997760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299063296 ++read 32768/32768 bytes at offset 4299063296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299128832 ++read 32768/32768 bytes at offset 4299128832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299194368 ++read 32768/32768 bytes at offset 4299194368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299259904 ++read 32768/32768 bytes at offset 4299259904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299325440 ++read 32768/32768 bytes at offset 4299325440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299390976 ++read 32768/32768 bytes at offset 4299390976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299456512 ++read 32768/32768 bytes at offset 4299456512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299522048 ++read 32768/32768 bytes at offset 4299522048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299587584 ++read 32768/32768 bytes at offset 4299587584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299653120 ++read 32768/32768 bytes at offset 4299653120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4299685888 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4299685888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299751424 ++read 32768/32768 bytes at offset 4299751424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299816960 ++read 32768/32768 bytes at offset 4299816960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299882496 ++read 32768/32768 bytes at offset 4299882496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299948032 ++read 32768/32768 bytes at offset 4299948032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300013568 ++read 32768/32768 bytes at offset 4300013568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300079104 ++read 32768/32768 bytes at offset 4300079104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300144640 ++read 32768/32768 bytes at offset 4300144640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300210176 ++read 32768/32768 bytes at offset 4300210176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300275712 ++read 32768/32768 bytes at offset 4300275712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300341248 ++read 32768/32768 bytes at offset 4300341248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300406784 ++read 32768/32768 bytes at offset 4300406784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300472320 ++read 32768/32768 bytes at offset 4300472320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300537856 ++read 32768/32768 bytes at offset 4300537856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300603392 ++read 32768/32768 bytes at offset 4300603392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300668928 ++read 32768/32768 bytes at offset 4300668928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300734464 ++read 32768/32768 bytes at offset 4300734464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300800000 ++read 32768/32768 bytes at offset 4300800000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300865536 ++read 32768/32768 bytes at offset 4300865536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300931072 ++read 32768/32768 bytes at offset 4300931072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300996608 ++read 32768/32768 bytes at offset 4300996608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301062144 ++read 32768/32768 bytes at offset 4301062144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301127680 ++read 32768/32768 bytes at offset 4301127680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301193216 ++read 32768/32768 bytes at offset 4301193216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301258752 ++read 32768/32768 bytes at offset 4301258752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301324288 ++read 32768/32768 bytes at offset 4301324288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301389824 ++read 32768/32768 bytes at offset 4301389824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301455360 ++read 32768/32768 bytes at offset 4301455360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301520896 ++read 32768/32768 bytes at offset 4301520896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301586432 ++read 32768/32768 bytes at offset 4301586432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301651968 ++read 32768/32768 bytes at offset 4301651968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301717504 ++read 32768/32768 bytes at offset 4301717504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301783040 ++read 32768/32768 bytes at offset 4301783040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301848576 ++read 32768/32768 bytes at offset 4301848576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301914112 ++read 32768/32768 bytes at offset 4301914112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301979648 ++read 32768/32768 bytes at offset 4301979648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 4302061568 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 4302061568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302127104 ++read 32768/32768 bytes at offset 4302127104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302192640 ++read 32768/32768 bytes at offset 4302192640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302258176 ++read 32768/32768 bytes at offset 4302258176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302323712 ++read 32768/32768 bytes at offset 4302323712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302389248 ++read 32768/32768 bytes at offset 4302389248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302454784 ++read 32768/32768 bytes at offset 4302454784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302520320 ++read 32768/32768 bytes at offset 4302520320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302585856 ++read 32768/32768 bytes at offset 4302585856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302651392 ++read 32768/32768 bytes at offset 4302651392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302716928 ++read 32768/32768 bytes at offset 4302716928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302782464 ++read 32768/32768 bytes at offset 4302782464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302848000 ++read 32768/32768 bytes at offset 4302848000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302913536 ++read 32768/32768 bytes at offset 4302913536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302979072 ++read 32768/32768 bytes at offset 4302979072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303044608 ++read 32768/32768 bytes at offset 4303044608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303110144 ++read 32768/32768 bytes at offset 4303110144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303175680 ++read 32768/32768 bytes at offset 4303175680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303241216 ++read 32768/32768 bytes at offset 4303241216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303306752 ++read 32768/32768 bytes at offset 4303306752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303372288 ++read 32768/32768 bytes at offset 4303372288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303437824 ++read 32768/32768 bytes at offset 4303437824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303503360 ++read 32768/32768 bytes at offset 4303503360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303568896 ++read 32768/32768 bytes at offset 4303568896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303634432 ++read 32768/32768 bytes at offset 4303634432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303699968 ++read 32768/32768 bytes at offset 4303699968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303765504 ++read 32768/32768 bytes at offset 4303765504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303831040 ++read 32768/32768 bytes at offset 4303831040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303896576 ++read 32768/32768 bytes at offset 4303896576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303962112 ++read 32768/32768 bytes at offset 4303962112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304027648 ++read 32768/32768 bytes at offset 4304027648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304093184 ++read 32768/32768 bytes at offset 4304093184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304158720 ++read 32768/32768 bytes at offset 4304158720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304224256 ++read 32768/32768 bytes at offset 4304224256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304289792 ++read 32768/32768 bytes at offset 4304289792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304355328 ++read 32768/32768 bytes at offset 4304355328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 4304437248 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 4304437248 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304633856 ++read 131072/131072 bytes at offset 4304633856 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304830464 ++read 131072/131072 bytes at offset 4304830464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305027072 ++read 131072/131072 bytes at offset 4305027072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305223680 ++read 131072/131072 bytes at offset 4305223680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305420288 ++read 131072/131072 bytes at offset 4305420288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305616896 ++read 131072/131072 bytes at offset 4305616896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305813504 ++read 131072/131072 bytes at offset 4305813504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4306010112 ++read 131072/131072 bytes at offset 4306010112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5368643584 ++read 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5905547264 ++read 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4294967296 ++=== IO: pattern 0 ++read 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295032832 ++read 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295163904 ++read 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295229440 ++read 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295294976 ++read 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295360512 ++read 65536/65536 bytes at offset 4295360512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295426048 ++read 65536/65536 bytes at offset 4295426048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295491584 ++read 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295557120 ++read 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295622656 ++read 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688192 ++read 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295753728 ++read 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295819264 ++read 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295884800 ++read 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295950336 ++read 65536/65536 bytes at offset 4295950336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296015872 ++read 65536/65536 bytes at offset 4296015872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296146944 ++read 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296212480 ++read 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296343552 ++read 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296409088 ++read 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296474624 ++read 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296540160 ++read 65536/65536 bytes at offset 4296540160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296605696 ++read 65536/65536 bytes at offset 4296605696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671232 ++read 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296736768 ++read 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296802304 ++read 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296867840 ++read 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296933376 ++read 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296998912 ++read 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297064448 ++read 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297129984 ++read 65536/65536 bytes at offset 4297129984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297195520 ++read 65536/65536 bytes at offset 4297195520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261056 ++read 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 32768/32768 bytes at offset 4297359360 ++=== IO: pattern 64 ++read 32768/32768 bytes at offset 4297359360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297424896 ++read 32768/32768 bytes at offset 4297424896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297490432 ++read 32768/32768 bytes at offset 4297490432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297555968 ++read 32768/32768 bytes at offset 4297555968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297621504 ++read 32768/32768 bytes at offset 4297621504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297687040 ++read 32768/32768 bytes at offset 4297687040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297752576 ++read 32768/32768 bytes at offset 4297752576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297818112 ++read 32768/32768 bytes at offset 4297818112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297883648 ++read 32768/32768 bytes at offset 4297883648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297949184 ++read 32768/32768 bytes at offset 4297949184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298014720 ++read 32768/32768 bytes at offset 4298014720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298080256 ++read 32768/32768 bytes at offset 4298080256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298145792 ++read 32768/32768 bytes at offset 4298145792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298211328 ++read 32768/32768 bytes at offset 4298211328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298276864 ++read 32768/32768 bytes at offset 4298276864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298342400 ++read 32768/32768 bytes at offset 4298342400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298407936 ++read 32768/32768 bytes at offset 4298407936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298473472 ++read 32768/32768 bytes at offset 4298473472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298539008 ++read 32768/32768 bytes at offset 4298539008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298604544 ++read 32768/32768 bytes at offset 4298604544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298670080 ++read 32768/32768 bytes at offset 4298670080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298735616 ++read 32768/32768 bytes at offset 4298735616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298801152 ++read 32768/32768 bytes at offset 4298801152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298866688 ++read 32768/32768 bytes at offset 4298866688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298932224 ++read 32768/32768 bytes at offset 4298932224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298997760 ++read 32768/32768 bytes at offset 4298997760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299063296 ++read 32768/32768 bytes at offset 4299063296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299128832 ++read 32768/32768 bytes at offset 4299128832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299194368 ++read 32768/32768 bytes at offset 4299194368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299259904 ++read 32768/32768 bytes at offset 4299259904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299325440 ++read 32768/32768 bytes at offset 4299325440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299390976 ++read 32768/32768 bytes at offset 4299390976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299456512 ++read 32768/32768 bytes at offset 4299456512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299522048 ++read 32768/32768 bytes at offset 4299522048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299587584 ++read 32768/32768 bytes at offset 4299587584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299653120 ++read 32768/32768 bytes at offset 4299653120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 32768/32768 bytes at offset 4299685888 ++=== IO: pattern 0 ++read 32768/32768 bytes at offset 4299685888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299751424 ++read 32768/32768 bytes at offset 4299751424 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299816960 ++read 32768/32768 bytes at offset 4299816960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299882496 ++read 32768/32768 bytes at offset 4299882496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299948032 ++read 32768/32768 bytes at offset 4299948032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300013568 ++read 32768/32768 bytes at offset 4300013568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300079104 ++read 32768/32768 bytes at offset 4300079104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300144640 ++read 32768/32768 bytes at offset 4300144640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300210176 ++read 32768/32768 bytes at offset 4300210176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300275712 ++read 32768/32768 bytes at offset 4300275712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300341248 ++read 32768/32768 bytes at offset 4300341248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300406784 ++read 32768/32768 bytes at offset 4300406784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300472320 ++read 32768/32768 bytes at offset 4300472320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300537856 ++read 32768/32768 bytes at offset 4300537856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300603392 ++read 32768/32768 bytes at offset 4300603392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300668928 ++read 32768/32768 bytes at offset 4300668928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300734464 ++read 32768/32768 bytes at offset 4300734464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300800000 ++read 32768/32768 bytes at offset 4300800000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300865536 ++read 32768/32768 bytes at offset 4300865536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300931072 ++read 32768/32768 bytes at offset 4300931072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300996608 ++read 32768/32768 bytes at offset 4300996608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301062144 ++read 32768/32768 bytes at offset 4301062144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301127680 ++read 32768/32768 bytes at offset 4301127680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301193216 ++read 32768/32768 bytes at offset 4301193216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301258752 ++read 32768/32768 bytes at offset 4301258752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301324288 ++read 32768/32768 bytes at offset 4301324288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301389824 ++read 32768/32768 bytes at offset 4301389824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301455360 ++read 32768/32768 bytes at offset 4301455360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301520896 ++read 32768/32768 bytes at offset 4301520896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301586432 ++read 32768/32768 bytes at offset 4301586432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301651968 ++read 32768/32768 bytes at offset 4301651968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301717504 ++read 32768/32768 bytes at offset 4301717504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301783040 ++read 32768/32768 bytes at offset 4301783040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301848576 ++read 32768/32768 bytes at offset 4301848576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301914112 ++read 32768/32768 bytes at offset 4301914112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301979648 ++read 32768/32768 bytes at offset 4301979648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 32 +-qemu-io> read 32768/32768 bytes at offset 4302061568 ++=== IO: pattern 32 ++read 32768/32768 bytes at offset 4302061568 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302127104 ++read 32768/32768 bytes at offset 4302127104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302192640 ++read 32768/32768 bytes at offset 4302192640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302258176 ++read 32768/32768 bytes at offset 4302258176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302323712 ++read 32768/32768 bytes at offset 4302323712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302389248 ++read 32768/32768 bytes at offset 4302389248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302454784 ++read 32768/32768 bytes at offset 4302454784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302520320 ++read 32768/32768 bytes at offset 4302520320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302585856 ++read 32768/32768 bytes at offset 4302585856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302651392 ++read 32768/32768 bytes at offset 4302651392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302716928 ++read 32768/32768 bytes at offset 4302716928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302782464 ++read 32768/32768 bytes at offset 4302782464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302848000 ++read 32768/32768 bytes at offset 4302848000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302913536 ++read 32768/32768 bytes at offset 4302913536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302979072 ++read 32768/32768 bytes at offset 4302979072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303044608 ++read 32768/32768 bytes at offset 4303044608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303110144 ++read 32768/32768 bytes at offset 4303110144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303175680 ++read 32768/32768 bytes at offset 4303175680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303241216 ++read 32768/32768 bytes at offset 4303241216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303306752 ++read 32768/32768 bytes at offset 4303306752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303372288 ++read 32768/32768 bytes at offset 4303372288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303437824 ++read 32768/32768 bytes at offset 4303437824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303503360 ++read 32768/32768 bytes at offset 4303503360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303568896 ++read 32768/32768 bytes at offset 4303568896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303634432 ++read 32768/32768 bytes at offset 4303634432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303699968 ++read 32768/32768 bytes at offset 4303699968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303765504 ++read 32768/32768 bytes at offset 4303765504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303831040 ++read 32768/32768 bytes at offset 4303831040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303896576 ++read 32768/32768 bytes at offset 4303896576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303962112 ++read 32768/32768 bytes at offset 4303962112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304027648 ++read 32768/32768 bytes at offset 4304027648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304093184 ++read 32768/32768 bytes at offset 4304093184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304158720 ++read 32768/32768 bytes at offset 4304158720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304224256 ++read 32768/32768 bytes at offset 4304224256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304289792 ++read 32768/32768 bytes at offset 4304289792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304355328 ++read 32768/32768 bytes at offset 4304355328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 131072/131072 bytes at offset 4304437248 ++=== IO: pattern 64 ++read 131072/131072 bytes at offset 4304437248 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304633856 ++read 131072/131072 bytes at offset 4304633856 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304830464 ++read 131072/131072 bytes at offset 4304830464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305027072 ++read 131072/131072 bytes at offset 4305027072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305223680 ++read 131072/131072 bytes at offset 4305223680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305420288 ++read 131072/131072 bytes at offset 4305420288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305616896 ++read 131072/131072 bytes at offset 4305616896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305813504 ++read 131072/131072 bytes at offset 4305813504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4306010112 ++read 131072/131072 bytes at offset 4306010112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5368643584 ++read 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5905547264 ++read 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Testing compressed image with odd offsets + + With offset 512: + === IO: pattern 1 +-qemu-io> wrote 65536/65536 bytes at offset 512 ++wrote 65536/65536 bytes at offset 512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 66048 ++wrote 65536/65536 bytes at offset 66048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131584 ++wrote 65536/65536 bytes at offset 131584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 197120 ++wrote 65536/65536 bytes at offset 197120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262656 ++wrote 65536/65536 bytes at offset 262656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 328192 ++wrote 65536/65536 bytes at offset 328192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393728 ++wrote 65536/65536 bytes at offset 393728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 459264 ++wrote 65536/65536 bytes at offset 459264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524800 ++wrote 65536/65536 bytes at offset 524800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 590336 ++wrote 65536/65536 bytes at offset 590336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655872 ++wrote 65536/65536 bytes at offset 655872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 721408 ++wrote 65536/65536 bytes at offset 721408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786944 ++wrote 65536/65536 bytes at offset 786944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 852480 ++wrote 65536/65536 bytes at offset 852480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 918016 ++wrote 65536/65536 bytes at offset 918016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 983552 ++wrote 65536/65536 bytes at offset 983552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1049088 ++wrote 65536/65536 bytes at offset 1049088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114624 ++wrote 65536/65536 bytes at offset 1114624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1180160 ++wrote 65536/65536 bytes at offset 1180160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245696 ++wrote 65536/65536 bytes at offset 1245696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1311232 ++wrote 65536/65536 bytes at offset 1311232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376768 ++wrote 65536/65536 bytes at offset 1376768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1442304 ++wrote 65536/65536 bytes at offset 1442304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507840 ++wrote 65536/65536 bytes at offset 1507840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1573376 ++wrote 65536/65536 bytes at offset 1573376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1638912 ++wrote 65536/65536 bytes at offset 1638912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1704448 ++wrote 65536/65536 bytes at offset 1704448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769984 ++wrote 65536/65536 bytes at offset 1769984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835520 ++wrote 65536/65536 bytes at offset 1835520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1901056 ++wrote 65536/65536 bytes at offset 1901056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966592 ++wrote 65536/65536 bytes at offset 1966592 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2032128 ++wrote 65536/65536 bytes at offset 2032128 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097664 ++wrote 65536/65536 bytes at offset 2097664 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2163200 ++wrote 65536/65536 bytes at offset 2163200 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2228736 ++wrote 65536/65536 bytes at offset 2228736 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2294272 ++wrote 65536/65536 bytes at offset 2294272 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 32768/32768 bytes at offset 2392576 ++=== IO: pattern 65 ++wrote 32768/32768 bytes at offset 2392576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2458112 ++wrote 32768/32768 bytes at offset 2458112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2523648 ++wrote 32768/32768 bytes at offset 2523648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2589184 ++wrote 32768/32768 bytes at offset 2589184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2654720 ++wrote 32768/32768 bytes at offset 2654720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2720256 ++wrote 32768/32768 bytes at offset 2720256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2785792 ++wrote 32768/32768 bytes at offset 2785792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2851328 ++wrote 32768/32768 bytes at offset 2851328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2916864 ++wrote 32768/32768 bytes at offset 2916864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2982400 ++wrote 32768/32768 bytes at offset 2982400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3047936 ++wrote 32768/32768 bytes at offset 3047936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3113472 ++wrote 32768/32768 bytes at offset 3113472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3179008 ++wrote 32768/32768 bytes at offset 3179008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3244544 ++wrote 32768/32768 bytes at offset 3244544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3310080 ++wrote 32768/32768 bytes at offset 3310080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3375616 ++wrote 32768/32768 bytes at offset 3375616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3441152 ++wrote 32768/32768 bytes at offset 3441152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3506688 ++wrote 32768/32768 bytes at offset 3506688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3572224 ++wrote 32768/32768 bytes at offset 3572224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3637760 ++wrote 32768/32768 bytes at offset 3637760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3703296 ++wrote 32768/32768 bytes at offset 3703296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3768832 ++wrote 32768/32768 bytes at offset 3768832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3834368 ++wrote 32768/32768 bytes at offset 3834368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3899904 ++wrote 32768/32768 bytes at offset 3899904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3965440 ++wrote 32768/32768 bytes at offset 3965440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4030976 ++wrote 32768/32768 bytes at offset 4030976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4096512 ++wrote 32768/32768 bytes at offset 4096512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4162048 ++wrote 32768/32768 bytes at offset 4162048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4227584 ++wrote 32768/32768 bytes at offset 4227584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4293120 ++wrote 32768/32768 bytes at offset 4293120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4358656 ++wrote 32768/32768 bytes at offset 4358656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4424192 ++wrote 32768/32768 bytes at offset 4424192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4489728 ++wrote 32768/32768 bytes at offset 4489728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4555264 ++wrote 32768/32768 bytes at offset 4555264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4620800 ++wrote 32768/32768 bytes at offset 4620800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4686336 ++wrote 32768/32768 bytes at offset 4686336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 32768/32768 bytes at offset 4719104 ++=== IO: pattern 1 ++wrote 32768/32768 bytes at offset 4719104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4784640 ++wrote 32768/32768 bytes at offset 4784640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4850176 ++wrote 32768/32768 bytes at offset 4850176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4915712 ++wrote 32768/32768 bytes at offset 4915712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4981248 ++wrote 32768/32768 bytes at offset 4981248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5046784 ++wrote 32768/32768 bytes at offset 5046784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5112320 ++wrote 32768/32768 bytes at offset 5112320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5177856 ++wrote 32768/32768 bytes at offset 5177856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5243392 ++wrote 32768/32768 bytes at offset 5243392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5308928 ++wrote 32768/32768 bytes at offset 5308928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5374464 ++wrote 32768/32768 bytes at offset 5374464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5440000 ++wrote 32768/32768 bytes at offset 5440000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5505536 ++wrote 32768/32768 bytes at offset 5505536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5571072 ++wrote 32768/32768 bytes at offset 5571072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5636608 ++wrote 32768/32768 bytes at offset 5636608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5702144 ++wrote 32768/32768 bytes at offset 5702144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5767680 ++wrote 32768/32768 bytes at offset 5767680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5833216 ++wrote 32768/32768 bytes at offset 5833216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5898752 ++wrote 32768/32768 bytes at offset 5898752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5964288 ++wrote 32768/32768 bytes at offset 5964288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6029824 ++wrote 32768/32768 bytes at offset 6029824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6095360 ++wrote 32768/32768 bytes at offset 6095360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6160896 ++wrote 32768/32768 bytes at offset 6160896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6226432 ++wrote 32768/32768 bytes at offset 6226432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6291968 ++wrote 32768/32768 bytes at offset 6291968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6357504 ++wrote 32768/32768 bytes at offset 6357504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6423040 ++wrote 32768/32768 bytes at offset 6423040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6488576 ++wrote 32768/32768 bytes at offset 6488576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6554112 ++wrote 32768/32768 bytes at offset 6554112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6619648 ++wrote 32768/32768 bytes at offset 6619648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6685184 ++wrote 32768/32768 bytes at offset 6685184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6750720 ++wrote 32768/32768 bytes at offset 6750720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6816256 ++wrote 32768/32768 bytes at offset 6816256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6881792 ++wrote 32768/32768 bytes at offset 6881792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6947328 ++wrote 32768/32768 bytes at offset 6947328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7012864 ++wrote 32768/32768 bytes at offset 7012864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 32768/32768 bytes at offset 7094784 ++=== IO: pattern 33 ++wrote 32768/32768 bytes at offset 7094784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7160320 ++wrote 32768/32768 bytes at offset 7160320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7225856 ++wrote 32768/32768 bytes at offset 7225856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7291392 ++wrote 32768/32768 bytes at offset 7291392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7356928 ++wrote 32768/32768 bytes at offset 7356928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7422464 ++wrote 32768/32768 bytes at offset 7422464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7488000 ++wrote 32768/32768 bytes at offset 7488000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7553536 ++wrote 32768/32768 bytes at offset 7553536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7619072 ++wrote 32768/32768 bytes at offset 7619072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7684608 ++wrote 32768/32768 bytes at offset 7684608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7750144 ++wrote 32768/32768 bytes at offset 7750144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7815680 ++wrote 32768/32768 bytes at offset 7815680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7881216 ++wrote 32768/32768 bytes at offset 7881216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7946752 ++wrote 32768/32768 bytes at offset 7946752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8012288 ++wrote 32768/32768 bytes at offset 8012288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8077824 ++wrote 32768/32768 bytes at offset 8077824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8143360 ++wrote 32768/32768 bytes at offset 8143360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8208896 ++wrote 32768/32768 bytes at offset 8208896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8274432 ++wrote 32768/32768 bytes at offset 8274432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8339968 ++wrote 32768/32768 bytes at offset 8339968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8405504 ++wrote 32768/32768 bytes at offset 8405504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8471040 ++wrote 32768/32768 bytes at offset 8471040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8536576 ++wrote 32768/32768 bytes at offset 8536576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8602112 ++wrote 32768/32768 bytes at offset 8602112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8667648 ++wrote 32768/32768 bytes at offset 8667648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8733184 ++wrote 32768/32768 bytes at offset 8733184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8798720 ++wrote 32768/32768 bytes at offset 8798720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8864256 ++wrote 32768/32768 bytes at offset 8864256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8929792 ++wrote 32768/32768 bytes at offset 8929792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8995328 ++wrote 32768/32768 bytes at offset 8995328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9060864 ++wrote 32768/32768 bytes at offset 9060864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9126400 ++wrote 32768/32768 bytes at offset 9126400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9191936 ++wrote 32768/32768 bytes at offset 9191936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9257472 ++wrote 32768/32768 bytes at offset 9257472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9323008 ++wrote 32768/32768 bytes at offset 9323008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9388544 ++wrote 32768/32768 bytes at offset 9388544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 131072/131072 bytes at offset 9470464 ++=== IO: pattern 65 ++wrote 131072/131072 bytes at offset 9470464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9667072 ++wrote 131072/131072 bytes at offset 9667072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9863680 ++wrote 131072/131072 bytes at offset 9863680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10060288 ++wrote 131072/131072 bytes at offset 10060288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10256896 ++wrote 131072/131072 bytes at offset 10256896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10453504 ++wrote 131072/131072 bytes at offset 10453504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10650112 ++wrote 131072/131072 bytes at offset 10650112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10846720 ++wrote 131072/131072 bytes at offset 10846720 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 11043328 ++wrote 131072/131072 bytes at offset 11043328 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1073676288 ++wrote 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1610579968 ++wrote 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 65536/65536 bytes at offset 512 ++=== IO: pattern 1 ++read 65536/65536 bytes at offset 512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 66048 ++read 65536/65536 bytes at offset 66048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 131584 ++read 65536/65536 bytes at offset 131584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 197120 ++read 65536/65536 bytes at offset 197120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 262656 ++read 65536/65536 bytes at offset 262656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 328192 ++read 65536/65536 bytes at offset 328192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 393728 ++read 65536/65536 bytes at offset 393728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 459264 ++read 65536/65536 bytes at offset 459264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 524800 ++read 65536/65536 bytes at offset 524800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 590336 ++read 65536/65536 bytes at offset 590336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 655872 ++read 65536/65536 bytes at offset 655872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 721408 ++read 65536/65536 bytes at offset 721408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 786944 ++read 65536/65536 bytes at offset 786944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 852480 ++read 65536/65536 bytes at offset 852480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 918016 ++read 65536/65536 bytes at offset 918016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 983552 ++read 65536/65536 bytes at offset 983552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1049088 ++read 65536/65536 bytes at offset 1049088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114624 ++read 65536/65536 bytes at offset 1114624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1180160 ++read 65536/65536 bytes at offset 1180160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1245696 ++read 65536/65536 bytes at offset 1245696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1311232 ++read 65536/65536 bytes at offset 1311232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1376768 ++read 65536/65536 bytes at offset 1376768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1442304 ++read 65536/65536 bytes at offset 1442304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1507840 ++read 65536/65536 bytes at offset 1507840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1573376 ++read 65536/65536 bytes at offset 1573376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1638912 ++read 65536/65536 bytes at offset 1638912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1704448 ++read 65536/65536 bytes at offset 1704448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1769984 ++read 65536/65536 bytes at offset 1769984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1835520 ++read 65536/65536 bytes at offset 1835520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1901056 ++read 65536/65536 bytes at offset 1901056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1966592 ++read 65536/65536 bytes at offset 1966592 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2032128 ++read 65536/65536 bytes at offset 2032128 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2097664 ++read 65536/65536 bytes at offset 2097664 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2163200 ++read 65536/65536 bytes at offset 2163200 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2228736 ++read 65536/65536 bytes at offset 2228736 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2294272 ++read 65536/65536 bytes at offset 2294272 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 32768/32768 bytes at offset 2392576 ++=== IO: pattern 65 ++read 32768/32768 bytes at offset 2392576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2458112 ++read 32768/32768 bytes at offset 2458112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2523648 ++read 32768/32768 bytes at offset 2523648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2589184 ++read 32768/32768 bytes at offset 2589184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2654720 ++read 32768/32768 bytes at offset 2654720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2720256 ++read 32768/32768 bytes at offset 2720256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2785792 ++read 32768/32768 bytes at offset 2785792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2851328 ++read 32768/32768 bytes at offset 2851328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2916864 ++read 32768/32768 bytes at offset 2916864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2982400 ++read 32768/32768 bytes at offset 2982400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3047936 ++read 32768/32768 bytes at offset 3047936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3113472 ++read 32768/32768 bytes at offset 3113472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3179008 ++read 32768/32768 bytes at offset 3179008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244544 ++read 32768/32768 bytes at offset 3244544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3310080 ++read 32768/32768 bytes at offset 3310080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375616 ++read 32768/32768 bytes at offset 3375616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3441152 ++read 32768/32768 bytes at offset 3441152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506688 ++read 32768/32768 bytes at offset 3506688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3572224 ++read 32768/32768 bytes at offset 3572224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637760 ++read 32768/32768 bytes at offset 3637760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3703296 ++read 32768/32768 bytes at offset 3703296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768832 ++read 32768/32768 bytes at offset 3768832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3834368 ++read 32768/32768 bytes at offset 3834368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899904 ++read 32768/32768 bytes at offset 3899904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3965440 ++read 32768/32768 bytes at offset 3965440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030976 ++read 32768/32768 bytes at offset 4030976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4096512 ++read 32768/32768 bytes at offset 4096512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4162048 ++read 32768/32768 bytes at offset 4162048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4227584 ++read 32768/32768 bytes at offset 4227584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4293120 ++read 32768/32768 bytes at offset 4293120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4358656 ++read 32768/32768 bytes at offset 4358656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4424192 ++read 32768/32768 bytes at offset 4424192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4489728 ++read 32768/32768 bytes at offset 4489728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4555264 ++read 32768/32768 bytes at offset 4555264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4620800 ++read 32768/32768 bytes at offset 4620800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4686336 ++read 32768/32768 bytes at offset 4686336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 32768/32768 bytes at offset 4719104 ++=== IO: pattern 1 ++read 32768/32768 bytes at offset 4719104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4784640 ++read 32768/32768 bytes at offset 4784640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4850176 ++read 32768/32768 bytes at offset 4850176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4915712 ++read 32768/32768 bytes at offset 4915712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4981248 ++read 32768/32768 bytes at offset 4981248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5046784 ++read 32768/32768 bytes at offset 5046784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5112320 ++read 32768/32768 bytes at offset 5112320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5177856 ++read 32768/32768 bytes at offset 5177856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5243392 ++read 32768/32768 bytes at offset 5243392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5308928 ++read 32768/32768 bytes at offset 5308928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5374464 ++read 32768/32768 bytes at offset 5374464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5440000 ++read 32768/32768 bytes at offset 5440000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5505536 ++read 32768/32768 bytes at offset 5505536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5571072 ++read 32768/32768 bytes at offset 5571072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5636608 ++read 32768/32768 bytes at offset 5636608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5702144 ++read 32768/32768 bytes at offset 5702144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5767680 ++read 32768/32768 bytes at offset 5767680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5833216 ++read 32768/32768 bytes at offset 5833216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5898752 ++read 32768/32768 bytes at offset 5898752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5964288 ++read 32768/32768 bytes at offset 5964288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6029824 ++read 32768/32768 bytes at offset 6029824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6095360 ++read 32768/32768 bytes at offset 6095360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6160896 ++read 32768/32768 bytes at offset 6160896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6226432 ++read 32768/32768 bytes at offset 6226432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6291968 ++read 32768/32768 bytes at offset 6291968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6357504 ++read 32768/32768 bytes at offset 6357504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6423040 ++read 32768/32768 bytes at offset 6423040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6488576 ++read 32768/32768 bytes at offset 6488576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6554112 ++read 32768/32768 bytes at offset 6554112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6619648 ++read 32768/32768 bytes at offset 6619648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6685184 ++read 32768/32768 bytes at offset 6685184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6750720 ++read 32768/32768 bytes at offset 6750720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6816256 ++read 32768/32768 bytes at offset 6816256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6881792 ++read 32768/32768 bytes at offset 6881792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6947328 ++read 32768/32768 bytes at offset 6947328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7012864 ++read 32768/32768 bytes at offset 7012864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> read 32768/32768 bytes at offset 7094784 ++=== IO: pattern 33 ++read 32768/32768 bytes at offset 7094784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7160320 ++read 32768/32768 bytes at offset 7160320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7225856 ++read 32768/32768 bytes at offset 7225856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7291392 ++read 32768/32768 bytes at offset 7291392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7356928 ++read 32768/32768 bytes at offset 7356928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7422464 ++read 32768/32768 bytes at offset 7422464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7488000 ++read 32768/32768 bytes at offset 7488000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7553536 ++read 32768/32768 bytes at offset 7553536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7619072 ++read 32768/32768 bytes at offset 7619072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7684608 ++read 32768/32768 bytes at offset 7684608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7750144 ++read 32768/32768 bytes at offset 7750144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7815680 ++read 32768/32768 bytes at offset 7815680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7881216 ++read 32768/32768 bytes at offset 7881216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7946752 ++read 32768/32768 bytes at offset 7946752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8012288 ++read 32768/32768 bytes at offset 8012288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8077824 ++read 32768/32768 bytes at offset 8077824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8143360 ++read 32768/32768 bytes at offset 8143360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8208896 ++read 32768/32768 bytes at offset 8208896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8274432 ++read 32768/32768 bytes at offset 8274432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8339968 ++read 32768/32768 bytes at offset 8339968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8405504 ++read 32768/32768 bytes at offset 8405504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8471040 ++read 32768/32768 bytes at offset 8471040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8536576 ++read 32768/32768 bytes at offset 8536576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8602112 ++read 32768/32768 bytes at offset 8602112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8667648 ++read 32768/32768 bytes at offset 8667648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8733184 ++read 32768/32768 bytes at offset 8733184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8798720 ++read 32768/32768 bytes at offset 8798720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8864256 ++read 32768/32768 bytes at offset 8864256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8929792 ++read 32768/32768 bytes at offset 8929792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8995328 ++read 32768/32768 bytes at offset 8995328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9060864 ++read 32768/32768 bytes at offset 9060864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9126400 ++read 32768/32768 bytes at offset 9126400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9191936 ++read 32768/32768 bytes at offset 9191936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9257472 ++read 32768/32768 bytes at offset 9257472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9323008 ++read 32768/32768 bytes at offset 9323008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9388544 ++read 32768/32768 bytes at offset 9388544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 131072/131072 bytes at offset 9470464 ++=== IO: pattern 65 ++read 131072/131072 bytes at offset 9470464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9667072 ++read 131072/131072 bytes at offset 9667072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9863680 ++read 131072/131072 bytes at offset 9863680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10060288 ++read 131072/131072 bytes at offset 10060288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10256896 ++read 131072/131072 bytes at offset 10256896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10453504 ++read 131072/131072 bytes at offset 10453504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10650112 ++read 131072/131072 bytes at offset 10650112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10846720 ++read 131072/131072 bytes at offset 10846720 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 11043328 ++read 131072/131072 bytes at offset 11043328 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1073676288 ++read 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1610579968 ++read 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 65536/65536 bytes at offset 512 ++=== IO: pattern 1 ++wrote 65536/65536 bytes at offset 512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 66048 ++wrote 65536/65536 bytes at offset 66048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131584 ++wrote 65536/65536 bytes at offset 131584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 197120 ++wrote 65536/65536 bytes at offset 197120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262656 ++wrote 65536/65536 bytes at offset 262656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 328192 ++wrote 65536/65536 bytes at offset 328192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393728 ++wrote 65536/65536 bytes at offset 393728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 459264 ++wrote 65536/65536 bytes at offset 459264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524800 ++wrote 65536/65536 bytes at offset 524800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 590336 ++wrote 65536/65536 bytes at offset 590336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655872 ++wrote 65536/65536 bytes at offset 655872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 721408 ++wrote 65536/65536 bytes at offset 721408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786944 ++wrote 65536/65536 bytes at offset 786944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 852480 ++wrote 65536/65536 bytes at offset 852480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 918016 ++wrote 65536/65536 bytes at offset 918016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 983552 ++wrote 65536/65536 bytes at offset 983552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1049088 ++wrote 65536/65536 bytes at offset 1049088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114624 ++wrote 65536/65536 bytes at offset 1114624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1180160 ++wrote 65536/65536 bytes at offset 1180160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245696 ++wrote 65536/65536 bytes at offset 1245696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1311232 ++wrote 65536/65536 bytes at offset 1311232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376768 ++wrote 65536/65536 bytes at offset 1376768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1442304 ++wrote 65536/65536 bytes at offset 1442304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507840 ++wrote 65536/65536 bytes at offset 1507840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1573376 ++wrote 65536/65536 bytes at offset 1573376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1638912 ++wrote 65536/65536 bytes at offset 1638912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1704448 ++wrote 65536/65536 bytes at offset 1704448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769984 ++wrote 65536/65536 bytes at offset 1769984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835520 ++wrote 65536/65536 bytes at offset 1835520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1901056 ++wrote 65536/65536 bytes at offset 1901056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966592 ++wrote 65536/65536 bytes at offset 1966592 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2032128 ++wrote 65536/65536 bytes at offset 2032128 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097664 ++wrote 65536/65536 bytes at offset 2097664 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2163200 ++wrote 65536/65536 bytes at offset 2163200 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2228736 ++wrote 65536/65536 bytes at offset 2228736 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2294272 ++wrote 65536/65536 bytes at offset 2294272 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 32768/32768 bytes at offset 2392576 ++=== IO: pattern 65 ++wrote 32768/32768 bytes at offset 2392576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2458112 ++wrote 32768/32768 bytes at offset 2458112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2523648 ++wrote 32768/32768 bytes at offset 2523648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2589184 ++wrote 32768/32768 bytes at offset 2589184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2654720 ++wrote 32768/32768 bytes at offset 2654720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2720256 ++wrote 32768/32768 bytes at offset 2720256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2785792 ++wrote 32768/32768 bytes at offset 2785792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2851328 ++wrote 32768/32768 bytes at offset 2851328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2916864 ++wrote 32768/32768 bytes at offset 2916864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 2982400 ++wrote 32768/32768 bytes at offset 2982400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3047936 ++wrote 32768/32768 bytes at offset 3047936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3113472 ++wrote 32768/32768 bytes at offset 3113472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3179008 ++wrote 32768/32768 bytes at offset 3179008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3244544 ++wrote 32768/32768 bytes at offset 3244544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3310080 ++wrote 32768/32768 bytes at offset 3310080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3375616 ++wrote 32768/32768 bytes at offset 3375616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3441152 ++wrote 32768/32768 bytes at offset 3441152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3506688 ++wrote 32768/32768 bytes at offset 3506688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3572224 ++wrote 32768/32768 bytes at offset 3572224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3637760 ++wrote 32768/32768 bytes at offset 3637760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3703296 ++wrote 32768/32768 bytes at offset 3703296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3768832 ++wrote 32768/32768 bytes at offset 3768832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3834368 ++wrote 32768/32768 bytes at offset 3834368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3899904 ++wrote 32768/32768 bytes at offset 3899904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 3965440 ++wrote 32768/32768 bytes at offset 3965440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4030976 ++wrote 32768/32768 bytes at offset 4030976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4096512 ++wrote 32768/32768 bytes at offset 4096512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4162048 ++wrote 32768/32768 bytes at offset 4162048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4227584 ++wrote 32768/32768 bytes at offset 4227584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4293120 ++wrote 32768/32768 bytes at offset 4293120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4358656 ++wrote 32768/32768 bytes at offset 4358656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4424192 ++wrote 32768/32768 bytes at offset 4424192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4489728 ++wrote 32768/32768 bytes at offset 4489728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4555264 ++wrote 32768/32768 bytes at offset 4555264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4620800 ++wrote 32768/32768 bytes at offset 4620800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4686336 ++wrote 32768/32768 bytes at offset 4686336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 32768/32768 bytes at offset 4719104 ++=== IO: pattern 1 ++wrote 32768/32768 bytes at offset 4719104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4784640 ++wrote 32768/32768 bytes at offset 4784640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4850176 ++wrote 32768/32768 bytes at offset 4850176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4915712 ++wrote 32768/32768 bytes at offset 4915712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4981248 ++wrote 32768/32768 bytes at offset 4981248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5046784 ++wrote 32768/32768 bytes at offset 5046784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5112320 ++wrote 32768/32768 bytes at offset 5112320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5177856 ++wrote 32768/32768 bytes at offset 5177856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5243392 ++wrote 32768/32768 bytes at offset 5243392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5308928 ++wrote 32768/32768 bytes at offset 5308928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5374464 ++wrote 32768/32768 bytes at offset 5374464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5440000 ++wrote 32768/32768 bytes at offset 5440000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5505536 ++wrote 32768/32768 bytes at offset 5505536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5571072 ++wrote 32768/32768 bytes at offset 5571072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5636608 ++wrote 32768/32768 bytes at offset 5636608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5702144 ++wrote 32768/32768 bytes at offset 5702144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5767680 ++wrote 32768/32768 bytes at offset 5767680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5833216 ++wrote 32768/32768 bytes at offset 5833216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5898752 ++wrote 32768/32768 bytes at offset 5898752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 5964288 ++wrote 32768/32768 bytes at offset 5964288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6029824 ++wrote 32768/32768 bytes at offset 6029824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6095360 ++wrote 32768/32768 bytes at offset 6095360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6160896 ++wrote 32768/32768 bytes at offset 6160896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6226432 ++wrote 32768/32768 bytes at offset 6226432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6291968 ++wrote 32768/32768 bytes at offset 6291968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6357504 ++wrote 32768/32768 bytes at offset 6357504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6423040 ++wrote 32768/32768 bytes at offset 6423040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6488576 ++wrote 32768/32768 bytes at offset 6488576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6554112 ++wrote 32768/32768 bytes at offset 6554112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6619648 ++wrote 32768/32768 bytes at offset 6619648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6685184 ++wrote 32768/32768 bytes at offset 6685184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6750720 ++wrote 32768/32768 bytes at offset 6750720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6816256 ++wrote 32768/32768 bytes at offset 6816256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6881792 ++wrote 32768/32768 bytes at offset 6881792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 6947328 ++wrote 32768/32768 bytes at offset 6947328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7012864 ++wrote 32768/32768 bytes at offset 7012864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 32768/32768 bytes at offset 7094784 ++=== IO: pattern 33 ++wrote 32768/32768 bytes at offset 7094784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7160320 ++wrote 32768/32768 bytes at offset 7160320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7225856 ++wrote 32768/32768 bytes at offset 7225856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7291392 ++wrote 32768/32768 bytes at offset 7291392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7356928 ++wrote 32768/32768 bytes at offset 7356928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7422464 ++wrote 32768/32768 bytes at offset 7422464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7488000 ++wrote 32768/32768 bytes at offset 7488000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7553536 ++wrote 32768/32768 bytes at offset 7553536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7619072 ++wrote 32768/32768 bytes at offset 7619072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7684608 ++wrote 32768/32768 bytes at offset 7684608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7750144 ++wrote 32768/32768 bytes at offset 7750144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7815680 ++wrote 32768/32768 bytes at offset 7815680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7881216 ++wrote 32768/32768 bytes at offset 7881216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 7946752 ++wrote 32768/32768 bytes at offset 7946752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8012288 ++wrote 32768/32768 bytes at offset 8012288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8077824 ++wrote 32768/32768 bytes at offset 8077824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8143360 ++wrote 32768/32768 bytes at offset 8143360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8208896 ++wrote 32768/32768 bytes at offset 8208896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8274432 ++wrote 32768/32768 bytes at offset 8274432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8339968 ++wrote 32768/32768 bytes at offset 8339968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8405504 ++wrote 32768/32768 bytes at offset 8405504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8471040 ++wrote 32768/32768 bytes at offset 8471040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8536576 ++wrote 32768/32768 bytes at offset 8536576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8602112 ++wrote 32768/32768 bytes at offset 8602112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8667648 ++wrote 32768/32768 bytes at offset 8667648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8733184 ++wrote 32768/32768 bytes at offset 8733184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8798720 ++wrote 32768/32768 bytes at offset 8798720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8864256 ++wrote 32768/32768 bytes at offset 8864256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8929792 ++wrote 32768/32768 bytes at offset 8929792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 8995328 ++wrote 32768/32768 bytes at offset 8995328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9060864 ++wrote 32768/32768 bytes at offset 9060864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9126400 ++wrote 32768/32768 bytes at offset 9126400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9191936 ++wrote 32768/32768 bytes at offset 9191936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9257472 ++wrote 32768/32768 bytes at offset 9257472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9323008 ++wrote 32768/32768 bytes at offset 9323008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 9388544 ++wrote 32768/32768 bytes at offset 9388544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 131072/131072 bytes at offset 9470464 ++=== IO: pattern 65 ++wrote 131072/131072 bytes at offset 9470464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9667072 ++wrote 131072/131072 bytes at offset 9667072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 9863680 ++wrote 131072/131072 bytes at offset 9863680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10060288 ++wrote 131072/131072 bytes at offset 10060288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10256896 ++wrote 131072/131072 bytes at offset 10256896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10453504 ++wrote 131072/131072 bytes at offset 10453504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10650112 ++wrote 131072/131072 bytes at offset 10650112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 10846720 ++wrote 131072/131072 bytes at offset 10846720 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 11043328 ++wrote 131072/131072 bytes at offset 11043328 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1073676288 ++wrote 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 1610579968 ++wrote 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 65536/65536 bytes at offset 512 ++=== IO: pattern 1 ++read 65536/65536 bytes at offset 512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 66048 ++read 65536/65536 bytes at offset 66048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 131584 ++read 65536/65536 bytes at offset 131584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 197120 ++read 65536/65536 bytes at offset 197120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 262656 ++read 65536/65536 bytes at offset 262656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 328192 ++read 65536/65536 bytes at offset 328192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 393728 ++read 65536/65536 bytes at offset 393728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 459264 ++read 65536/65536 bytes at offset 459264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 524800 ++read 65536/65536 bytes at offset 524800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 590336 ++read 65536/65536 bytes at offset 590336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 655872 ++read 65536/65536 bytes at offset 655872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 721408 ++read 65536/65536 bytes at offset 721408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 786944 ++read 65536/65536 bytes at offset 786944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 852480 ++read 65536/65536 bytes at offset 852480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 918016 ++read 65536/65536 bytes at offset 918016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 983552 ++read 65536/65536 bytes at offset 983552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1049088 ++read 65536/65536 bytes at offset 1049088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114624 ++read 65536/65536 bytes at offset 1114624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1180160 ++read 65536/65536 bytes at offset 1180160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1245696 ++read 65536/65536 bytes at offset 1245696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1311232 ++read 65536/65536 bytes at offset 1311232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1376768 ++read 65536/65536 bytes at offset 1376768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1442304 ++read 65536/65536 bytes at offset 1442304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1507840 ++read 65536/65536 bytes at offset 1507840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1573376 ++read 65536/65536 bytes at offset 1573376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1638912 ++read 65536/65536 bytes at offset 1638912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1704448 ++read 65536/65536 bytes at offset 1704448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1769984 ++read 65536/65536 bytes at offset 1769984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1835520 ++read 65536/65536 bytes at offset 1835520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1901056 ++read 65536/65536 bytes at offset 1901056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1966592 ++read 65536/65536 bytes at offset 1966592 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2032128 ++read 65536/65536 bytes at offset 2032128 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2097664 ++read 65536/65536 bytes at offset 2097664 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2163200 ++read 65536/65536 bytes at offset 2163200 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2228736 ++read 65536/65536 bytes at offset 2228736 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2294272 ++read 65536/65536 bytes at offset 2294272 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 32768/32768 bytes at offset 2392576 ++=== IO: pattern 65 ++read 32768/32768 bytes at offset 2392576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2458112 ++read 32768/32768 bytes at offset 2458112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2523648 ++read 32768/32768 bytes at offset 2523648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2589184 ++read 32768/32768 bytes at offset 2589184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2654720 ++read 32768/32768 bytes at offset 2654720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2720256 ++read 32768/32768 bytes at offset 2720256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2785792 ++read 32768/32768 bytes at offset 2785792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2851328 ++read 32768/32768 bytes at offset 2851328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2916864 ++read 32768/32768 bytes at offset 2916864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2982400 ++read 32768/32768 bytes at offset 2982400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3047936 ++read 32768/32768 bytes at offset 3047936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3113472 ++read 32768/32768 bytes at offset 3113472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3179008 ++read 32768/32768 bytes at offset 3179008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244544 ++read 32768/32768 bytes at offset 3244544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3310080 ++read 32768/32768 bytes at offset 3310080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375616 ++read 32768/32768 bytes at offset 3375616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3441152 ++read 32768/32768 bytes at offset 3441152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506688 ++read 32768/32768 bytes at offset 3506688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3572224 ++read 32768/32768 bytes at offset 3572224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637760 ++read 32768/32768 bytes at offset 3637760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3703296 ++read 32768/32768 bytes at offset 3703296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768832 ++read 32768/32768 bytes at offset 3768832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3834368 ++read 32768/32768 bytes at offset 3834368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899904 ++read 32768/32768 bytes at offset 3899904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3965440 ++read 32768/32768 bytes at offset 3965440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030976 ++read 32768/32768 bytes at offset 4030976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4096512 ++read 32768/32768 bytes at offset 4096512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4162048 ++read 32768/32768 bytes at offset 4162048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4227584 ++read 32768/32768 bytes at offset 4227584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4293120 ++read 32768/32768 bytes at offset 4293120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4358656 ++read 32768/32768 bytes at offset 4358656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4424192 ++read 32768/32768 bytes at offset 4424192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4489728 ++read 32768/32768 bytes at offset 4489728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4555264 ++read 32768/32768 bytes at offset 4555264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4620800 ++read 32768/32768 bytes at offset 4620800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4686336 ++read 32768/32768 bytes at offset 4686336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 32768/32768 bytes at offset 4719104 ++=== IO: pattern 1 ++read 32768/32768 bytes at offset 4719104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4784640 ++read 32768/32768 bytes at offset 4784640 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4850176 ++read 32768/32768 bytes at offset 4850176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4915712 ++read 32768/32768 bytes at offset 4915712 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4981248 ++read 32768/32768 bytes at offset 4981248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5046784 ++read 32768/32768 bytes at offset 5046784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5112320 ++read 32768/32768 bytes at offset 5112320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5177856 ++read 32768/32768 bytes at offset 5177856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5243392 ++read 32768/32768 bytes at offset 5243392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5308928 ++read 32768/32768 bytes at offset 5308928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5374464 ++read 32768/32768 bytes at offset 5374464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5440000 ++read 32768/32768 bytes at offset 5440000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5505536 ++read 32768/32768 bytes at offset 5505536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5571072 ++read 32768/32768 bytes at offset 5571072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5636608 ++read 32768/32768 bytes at offset 5636608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5702144 ++read 32768/32768 bytes at offset 5702144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5767680 ++read 32768/32768 bytes at offset 5767680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5833216 ++read 32768/32768 bytes at offset 5833216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5898752 ++read 32768/32768 bytes at offset 5898752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5964288 ++read 32768/32768 bytes at offset 5964288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6029824 ++read 32768/32768 bytes at offset 6029824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6095360 ++read 32768/32768 bytes at offset 6095360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6160896 ++read 32768/32768 bytes at offset 6160896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6226432 ++read 32768/32768 bytes at offset 6226432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6291968 ++read 32768/32768 bytes at offset 6291968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6357504 ++read 32768/32768 bytes at offset 6357504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6423040 ++read 32768/32768 bytes at offset 6423040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6488576 ++read 32768/32768 bytes at offset 6488576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6554112 ++read 32768/32768 bytes at offset 6554112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6619648 ++read 32768/32768 bytes at offset 6619648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6685184 ++read 32768/32768 bytes at offset 6685184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6750720 ++read 32768/32768 bytes at offset 6750720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6816256 ++read 32768/32768 bytes at offset 6816256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6881792 ++read 32768/32768 bytes at offset 6881792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6947328 ++read 32768/32768 bytes at offset 6947328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7012864 ++read 32768/32768 bytes at offset 7012864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> read 32768/32768 bytes at offset 7094784 ++=== IO: pattern 33 ++read 32768/32768 bytes at offset 7094784 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7160320 ++read 32768/32768 bytes at offset 7160320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7225856 ++read 32768/32768 bytes at offset 7225856 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7291392 ++read 32768/32768 bytes at offset 7291392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7356928 ++read 32768/32768 bytes at offset 7356928 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7422464 ++read 32768/32768 bytes at offset 7422464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7488000 ++read 32768/32768 bytes at offset 7488000 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7553536 ++read 32768/32768 bytes at offset 7553536 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7619072 ++read 32768/32768 bytes at offset 7619072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7684608 ++read 32768/32768 bytes at offset 7684608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7750144 ++read 32768/32768 bytes at offset 7750144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7815680 ++read 32768/32768 bytes at offset 7815680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7881216 ++read 32768/32768 bytes at offset 7881216 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 7946752 ++read 32768/32768 bytes at offset 7946752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8012288 ++read 32768/32768 bytes at offset 8012288 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8077824 ++read 32768/32768 bytes at offset 8077824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8143360 ++read 32768/32768 bytes at offset 8143360 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8208896 ++read 32768/32768 bytes at offset 8208896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8274432 ++read 32768/32768 bytes at offset 8274432 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8339968 ++read 32768/32768 bytes at offset 8339968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8405504 ++read 32768/32768 bytes at offset 8405504 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8471040 ++read 32768/32768 bytes at offset 8471040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8536576 ++read 32768/32768 bytes at offset 8536576 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8602112 ++read 32768/32768 bytes at offset 8602112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8667648 ++read 32768/32768 bytes at offset 8667648 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8733184 ++read 32768/32768 bytes at offset 8733184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8798720 ++read 32768/32768 bytes at offset 8798720 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8864256 ++read 32768/32768 bytes at offset 8864256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8929792 ++read 32768/32768 bytes at offset 8929792 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 8995328 ++read 32768/32768 bytes at offset 8995328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9060864 ++read 32768/32768 bytes at offset 9060864 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9126400 ++read 32768/32768 bytes at offset 9126400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9191936 ++read 32768/32768 bytes at offset 9191936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9257472 ++read 32768/32768 bytes at offset 9257472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9323008 ++read 32768/32768 bytes at offset 9323008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 9388544 ++read 32768/32768 bytes at offset 9388544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 131072/131072 bytes at offset 9470464 ++=== IO: pattern 65 ++read 131072/131072 bytes at offset 9470464 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9667072 ++read 131072/131072 bytes at offset 9667072 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 9863680 ++read 131072/131072 bytes at offset 9863680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10060288 ++read 131072/131072 bytes at offset 10060288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10256896 ++read 131072/131072 bytes at offset 10256896 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10453504 ++read 131072/131072 bytes at offset 10453504 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10650112 ++read 131072/131072 bytes at offset 10650112 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 10846720 ++read 131072/131072 bytes at offset 10846720 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 11043328 ++read 131072/131072 bytes at offset 11043328 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 536772608 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 536772608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1073676288 ++read 196608/196608 bytes at offset 1073676288 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1610579968 ++read 196608/196608 bytes at offset 1610579968 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + With offset 4294967808: + === IO: pattern 1 +-qemu-io> wrote 65536/65536 bytes at offset 4294967808 ++wrote 65536/65536 bytes at offset 4294967808 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295033344 ++wrote 65536/65536 bytes at offset 4295033344 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295098880 ++wrote 65536/65536 bytes at offset 4295098880 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295164416 ++wrote 65536/65536 bytes at offset 4295164416 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295229952 ++wrote 65536/65536 bytes at offset 4295229952 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295295488 ++wrote 65536/65536 bytes at offset 4295295488 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295361024 ++wrote 65536/65536 bytes at offset 4295361024 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295426560 ++wrote 65536/65536 bytes at offset 4295426560 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295492096 ++wrote 65536/65536 bytes at offset 4295492096 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295557632 ++wrote 65536/65536 bytes at offset 4295557632 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295623168 ++wrote 65536/65536 bytes at offset 4295623168 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295688704 ++wrote 65536/65536 bytes at offset 4295688704 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295754240 ++wrote 65536/65536 bytes at offset 4295754240 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295819776 ++wrote 65536/65536 bytes at offset 4295819776 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295885312 ++wrote 65536/65536 bytes at offset 4295885312 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295950848 ++wrote 65536/65536 bytes at offset 4295950848 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296016384 ++wrote 65536/65536 bytes at offset 4296016384 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296081920 ++wrote 65536/65536 bytes at offset 4296081920 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296147456 ++wrote 65536/65536 bytes at offset 4296147456 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296212992 ++wrote 65536/65536 bytes at offset 4296212992 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296278528 ++wrote 65536/65536 bytes at offset 4296278528 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296344064 ++wrote 65536/65536 bytes at offset 4296344064 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296409600 ++wrote 65536/65536 bytes at offset 4296409600 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296475136 ++wrote 65536/65536 bytes at offset 4296475136 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296540672 ++wrote 65536/65536 bytes at offset 4296540672 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296606208 ++wrote 65536/65536 bytes at offset 4296606208 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296671744 ++wrote 65536/65536 bytes at offset 4296671744 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296737280 ++wrote 65536/65536 bytes at offset 4296737280 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296802816 ++wrote 65536/65536 bytes at offset 4296802816 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296868352 ++wrote 65536/65536 bytes at offset 4296868352 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296933888 ++wrote 65536/65536 bytes at offset 4296933888 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296999424 ++wrote 65536/65536 bytes at offset 4296999424 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297064960 ++wrote 65536/65536 bytes at offset 4297064960 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297130496 ++wrote 65536/65536 bytes at offset 4297130496 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297196032 ++wrote 65536/65536 bytes at offset 4297196032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297261568 ++wrote 65536/65536 bytes at offset 4297261568 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 32768/32768 bytes at offset 4297359872 ++=== IO: pattern 65 ++wrote 32768/32768 bytes at offset 4297359872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297425408 ++wrote 32768/32768 bytes at offset 4297425408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297490944 ++wrote 32768/32768 bytes at offset 4297490944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297556480 ++wrote 32768/32768 bytes at offset 4297556480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297622016 ++wrote 32768/32768 bytes at offset 4297622016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297687552 ++wrote 32768/32768 bytes at offset 4297687552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297753088 ++wrote 32768/32768 bytes at offset 4297753088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297818624 ++wrote 32768/32768 bytes at offset 4297818624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297884160 ++wrote 32768/32768 bytes at offset 4297884160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297949696 ++wrote 32768/32768 bytes at offset 4297949696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298015232 ++wrote 32768/32768 bytes at offset 4298015232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298080768 ++wrote 32768/32768 bytes at offset 4298080768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298146304 ++wrote 32768/32768 bytes at offset 4298146304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298211840 ++wrote 32768/32768 bytes at offset 4298211840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298277376 ++wrote 32768/32768 bytes at offset 4298277376 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298342912 ++wrote 32768/32768 bytes at offset 4298342912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298408448 ++wrote 32768/32768 bytes at offset 4298408448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298473984 ++wrote 32768/32768 bytes at offset 4298473984 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298539520 ++wrote 32768/32768 bytes at offset 4298539520 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298605056 ++wrote 32768/32768 bytes at offset 4298605056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298670592 ++wrote 32768/32768 bytes at offset 4298670592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298736128 ++wrote 32768/32768 bytes at offset 4298736128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298801664 ++wrote 32768/32768 bytes at offset 4298801664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298867200 ++wrote 32768/32768 bytes at offset 4298867200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298932736 ++wrote 32768/32768 bytes at offset 4298932736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298998272 ++wrote 32768/32768 bytes at offset 4298998272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299063808 ++wrote 32768/32768 bytes at offset 4299063808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299129344 ++wrote 32768/32768 bytes at offset 4299129344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299194880 ++wrote 32768/32768 bytes at offset 4299194880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299260416 ++wrote 32768/32768 bytes at offset 4299260416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299325952 ++wrote 32768/32768 bytes at offset 4299325952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299391488 ++wrote 32768/32768 bytes at offset 4299391488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299457024 ++wrote 32768/32768 bytes at offset 4299457024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299522560 ++wrote 32768/32768 bytes at offset 4299522560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299588096 ++wrote 32768/32768 bytes at offset 4299588096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299653632 ++wrote 32768/32768 bytes at offset 4299653632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 32768/32768 bytes at offset 4299686400 ++=== IO: pattern 1 ++wrote 32768/32768 bytes at offset 4299686400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299751936 ++wrote 32768/32768 bytes at offset 4299751936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299817472 ++wrote 32768/32768 bytes at offset 4299817472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299883008 ++wrote 32768/32768 bytes at offset 4299883008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299948544 ++wrote 32768/32768 bytes at offset 4299948544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300014080 ++wrote 32768/32768 bytes at offset 4300014080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300079616 ++wrote 32768/32768 bytes at offset 4300079616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300145152 ++wrote 32768/32768 bytes at offset 4300145152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300210688 ++wrote 32768/32768 bytes at offset 4300210688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300276224 ++wrote 32768/32768 bytes at offset 4300276224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300341760 ++wrote 32768/32768 bytes at offset 4300341760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300407296 ++wrote 32768/32768 bytes at offset 4300407296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300472832 ++wrote 32768/32768 bytes at offset 4300472832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300538368 ++wrote 32768/32768 bytes at offset 4300538368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300603904 ++wrote 32768/32768 bytes at offset 4300603904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300669440 ++wrote 32768/32768 bytes at offset 4300669440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300734976 ++wrote 32768/32768 bytes at offset 4300734976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300800512 ++wrote 32768/32768 bytes at offset 4300800512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300866048 ++wrote 32768/32768 bytes at offset 4300866048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300931584 ++wrote 32768/32768 bytes at offset 4300931584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300997120 ++wrote 32768/32768 bytes at offset 4300997120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301062656 ++wrote 32768/32768 bytes at offset 4301062656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301128192 ++wrote 32768/32768 bytes at offset 4301128192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301193728 ++wrote 32768/32768 bytes at offset 4301193728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301259264 ++wrote 32768/32768 bytes at offset 4301259264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301324800 ++wrote 32768/32768 bytes at offset 4301324800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301390336 ++wrote 32768/32768 bytes at offset 4301390336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301455872 ++wrote 32768/32768 bytes at offset 4301455872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301521408 ++wrote 32768/32768 bytes at offset 4301521408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301586944 ++wrote 32768/32768 bytes at offset 4301586944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301652480 ++wrote 32768/32768 bytes at offset 4301652480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301718016 ++wrote 32768/32768 bytes at offset 4301718016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301783552 ++wrote 32768/32768 bytes at offset 4301783552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301849088 ++wrote 32768/32768 bytes at offset 4301849088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301914624 ++wrote 32768/32768 bytes at offset 4301914624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301980160 ++wrote 32768/32768 bytes at offset 4301980160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 32768/32768 bytes at offset 4302062080 ++=== IO: pattern 33 ++wrote 32768/32768 bytes at offset 4302062080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302127616 ++wrote 32768/32768 bytes at offset 4302127616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302193152 ++wrote 32768/32768 bytes at offset 4302193152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302258688 ++wrote 32768/32768 bytes at offset 4302258688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302324224 ++wrote 32768/32768 bytes at offset 4302324224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302389760 ++wrote 32768/32768 bytes at offset 4302389760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302455296 ++wrote 32768/32768 bytes at offset 4302455296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302520832 ++wrote 32768/32768 bytes at offset 4302520832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302586368 ++wrote 32768/32768 bytes at offset 4302586368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302651904 ++wrote 32768/32768 bytes at offset 4302651904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302717440 ++wrote 32768/32768 bytes at offset 4302717440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302782976 ++wrote 32768/32768 bytes at offset 4302782976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302848512 ++wrote 32768/32768 bytes at offset 4302848512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302914048 ++wrote 32768/32768 bytes at offset 4302914048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302979584 ++wrote 32768/32768 bytes at offset 4302979584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303045120 ++wrote 32768/32768 bytes at offset 4303045120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303110656 ++wrote 32768/32768 bytes at offset 4303110656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303176192 ++wrote 32768/32768 bytes at offset 4303176192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303241728 ++wrote 32768/32768 bytes at offset 4303241728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303307264 ++wrote 32768/32768 bytes at offset 4303307264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303372800 ++wrote 32768/32768 bytes at offset 4303372800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303438336 ++wrote 32768/32768 bytes at offset 4303438336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303503872 ++wrote 32768/32768 bytes at offset 4303503872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303569408 ++wrote 32768/32768 bytes at offset 4303569408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303634944 ++wrote 32768/32768 bytes at offset 4303634944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303700480 ++wrote 32768/32768 bytes at offset 4303700480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303766016 ++wrote 32768/32768 bytes at offset 4303766016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303831552 ++wrote 32768/32768 bytes at offset 4303831552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303897088 ++wrote 32768/32768 bytes at offset 4303897088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303962624 ++wrote 32768/32768 bytes at offset 4303962624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304028160 ++wrote 32768/32768 bytes at offset 4304028160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304093696 ++wrote 32768/32768 bytes at offset 4304093696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304159232 ++wrote 32768/32768 bytes at offset 4304159232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304224768 ++wrote 32768/32768 bytes at offset 4304224768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304290304 ++wrote 32768/32768 bytes at offset 4304290304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304355840 ++wrote 32768/32768 bytes at offset 4304355840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 131072/131072 bytes at offset 4304437760 ++=== IO: pattern 65 ++wrote 131072/131072 bytes at offset 4304437760 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304634368 ++wrote 131072/131072 bytes at offset 4304634368 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304830976 ++wrote 131072/131072 bytes at offset 4304830976 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305027584 ++wrote 131072/131072 bytes at offset 4305027584 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305224192 ++wrote 131072/131072 bytes at offset 4305224192 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305420800 ++wrote 131072/131072 bytes at offset 4305420800 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305617408 ++wrote 131072/131072 bytes at offset 4305617408 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305814016 ++wrote 131072/131072 bytes at offset 4305814016 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4306010624 ++wrote 131072/131072 bytes at offset 4306010624 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5368643584 ++wrote 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5905547264 ++wrote 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 65536/65536 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 65536/65536 bytes at offset 4294967808 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295033344 ++read 65536/65536 bytes at offset 4295033344 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295098880 ++read 65536/65536 bytes at offset 4295098880 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295164416 ++read 65536/65536 bytes at offset 4295164416 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295229952 ++read 65536/65536 bytes at offset 4295229952 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295295488 ++read 65536/65536 bytes at offset 4295295488 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295361024 ++read 65536/65536 bytes at offset 4295361024 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295426560 ++read 65536/65536 bytes at offset 4295426560 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295492096 ++read 65536/65536 bytes at offset 4295492096 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295557632 ++read 65536/65536 bytes at offset 4295557632 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295623168 ++read 65536/65536 bytes at offset 4295623168 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688704 ++read 65536/65536 bytes at offset 4295688704 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295754240 ++read 65536/65536 bytes at offset 4295754240 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295819776 ++read 65536/65536 bytes at offset 4295819776 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295885312 ++read 65536/65536 bytes at offset 4295885312 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295950848 ++read 65536/65536 bytes at offset 4295950848 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296016384 ++read 65536/65536 bytes at offset 4296016384 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081920 ++read 65536/65536 bytes at offset 4296081920 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296147456 ++read 65536/65536 bytes at offset 4296147456 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296212992 ++read 65536/65536 bytes at offset 4296212992 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278528 ++read 65536/65536 bytes at offset 4296278528 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296344064 ++read 65536/65536 bytes at offset 4296344064 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296409600 ++read 65536/65536 bytes at offset 4296409600 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296475136 ++read 65536/65536 bytes at offset 4296475136 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296540672 ++read 65536/65536 bytes at offset 4296540672 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296606208 ++read 65536/65536 bytes at offset 4296606208 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671744 ++read 65536/65536 bytes at offset 4296671744 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296737280 ++read 65536/65536 bytes at offset 4296737280 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296802816 ++read 65536/65536 bytes at offset 4296802816 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296868352 ++read 65536/65536 bytes at offset 4296868352 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296933888 ++read 65536/65536 bytes at offset 4296933888 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296999424 ++read 65536/65536 bytes at offset 4296999424 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297064960 ++read 65536/65536 bytes at offset 4297064960 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297130496 ++read 65536/65536 bytes at offset 4297130496 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297196032 ++read 65536/65536 bytes at offset 4297196032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261568 ++read 65536/65536 bytes at offset 4297261568 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 32768/32768 bytes at offset 4297359872 ++=== IO: pattern 65 ++read 32768/32768 bytes at offset 4297359872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297425408 ++read 32768/32768 bytes at offset 4297425408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297490944 ++read 32768/32768 bytes at offset 4297490944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297556480 ++read 32768/32768 bytes at offset 4297556480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297622016 ++read 32768/32768 bytes at offset 4297622016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297687552 ++read 32768/32768 bytes at offset 4297687552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297753088 ++read 32768/32768 bytes at offset 4297753088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297818624 ++read 32768/32768 bytes at offset 4297818624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297884160 ++read 32768/32768 bytes at offset 4297884160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297949696 ++read 32768/32768 bytes at offset 4297949696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298015232 ++read 32768/32768 bytes at offset 4298015232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298080768 ++read 32768/32768 bytes at offset 4298080768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298146304 ++read 32768/32768 bytes at offset 4298146304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298211840 ++read 32768/32768 bytes at offset 4298211840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298277376 ++read 32768/32768 bytes at offset 4298277376 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298342912 ++read 32768/32768 bytes at offset 4298342912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298408448 ++read 32768/32768 bytes at offset 4298408448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298473984 ++read 32768/32768 bytes at offset 4298473984 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298539520 ++read 32768/32768 bytes at offset 4298539520 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298605056 ++read 32768/32768 bytes at offset 4298605056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298670592 ++read 32768/32768 bytes at offset 4298670592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298736128 ++read 32768/32768 bytes at offset 4298736128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298801664 ++read 32768/32768 bytes at offset 4298801664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298867200 ++read 32768/32768 bytes at offset 4298867200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298932736 ++read 32768/32768 bytes at offset 4298932736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298998272 ++read 32768/32768 bytes at offset 4298998272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299063808 ++read 32768/32768 bytes at offset 4299063808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299129344 ++read 32768/32768 bytes at offset 4299129344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299194880 ++read 32768/32768 bytes at offset 4299194880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299260416 ++read 32768/32768 bytes at offset 4299260416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299325952 ++read 32768/32768 bytes at offset 4299325952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299391488 ++read 32768/32768 bytes at offset 4299391488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299457024 ++read 32768/32768 bytes at offset 4299457024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299522560 ++read 32768/32768 bytes at offset 4299522560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299588096 ++read 32768/32768 bytes at offset 4299588096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299653632 ++read 32768/32768 bytes at offset 4299653632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 32768/32768 bytes at offset 4299686400 ++=== IO: pattern 1 ++read 32768/32768 bytes at offset 4299686400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299751936 ++read 32768/32768 bytes at offset 4299751936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299817472 ++read 32768/32768 bytes at offset 4299817472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299883008 ++read 32768/32768 bytes at offset 4299883008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299948544 ++read 32768/32768 bytes at offset 4299948544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300014080 ++read 32768/32768 bytes at offset 4300014080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300079616 ++read 32768/32768 bytes at offset 4300079616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300145152 ++read 32768/32768 bytes at offset 4300145152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300210688 ++read 32768/32768 bytes at offset 4300210688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300276224 ++read 32768/32768 bytes at offset 4300276224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300341760 ++read 32768/32768 bytes at offset 4300341760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300407296 ++read 32768/32768 bytes at offset 4300407296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300472832 ++read 32768/32768 bytes at offset 4300472832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300538368 ++read 32768/32768 bytes at offset 4300538368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300603904 ++read 32768/32768 bytes at offset 4300603904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300669440 ++read 32768/32768 bytes at offset 4300669440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300734976 ++read 32768/32768 bytes at offset 4300734976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300800512 ++read 32768/32768 bytes at offset 4300800512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300866048 ++read 32768/32768 bytes at offset 4300866048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300931584 ++read 32768/32768 bytes at offset 4300931584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300997120 ++read 32768/32768 bytes at offset 4300997120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301062656 ++read 32768/32768 bytes at offset 4301062656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301128192 ++read 32768/32768 bytes at offset 4301128192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301193728 ++read 32768/32768 bytes at offset 4301193728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301259264 ++read 32768/32768 bytes at offset 4301259264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301324800 ++read 32768/32768 bytes at offset 4301324800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301390336 ++read 32768/32768 bytes at offset 4301390336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301455872 ++read 32768/32768 bytes at offset 4301455872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301521408 ++read 32768/32768 bytes at offset 4301521408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301586944 ++read 32768/32768 bytes at offset 4301586944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301652480 ++read 32768/32768 bytes at offset 4301652480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301718016 ++read 32768/32768 bytes at offset 4301718016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301783552 ++read 32768/32768 bytes at offset 4301783552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301849088 ++read 32768/32768 bytes at offset 4301849088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301914624 ++read 32768/32768 bytes at offset 4301914624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301980160 ++read 32768/32768 bytes at offset 4301980160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> read 32768/32768 bytes at offset 4302062080 ++=== IO: pattern 33 ++read 32768/32768 bytes at offset 4302062080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302127616 ++read 32768/32768 bytes at offset 4302127616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302193152 ++read 32768/32768 bytes at offset 4302193152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302258688 ++read 32768/32768 bytes at offset 4302258688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302324224 ++read 32768/32768 bytes at offset 4302324224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302389760 ++read 32768/32768 bytes at offset 4302389760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302455296 ++read 32768/32768 bytes at offset 4302455296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302520832 ++read 32768/32768 bytes at offset 4302520832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302586368 ++read 32768/32768 bytes at offset 4302586368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302651904 ++read 32768/32768 bytes at offset 4302651904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302717440 ++read 32768/32768 bytes at offset 4302717440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302782976 ++read 32768/32768 bytes at offset 4302782976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302848512 ++read 32768/32768 bytes at offset 4302848512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302914048 ++read 32768/32768 bytes at offset 4302914048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302979584 ++read 32768/32768 bytes at offset 4302979584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303045120 ++read 32768/32768 bytes at offset 4303045120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303110656 ++read 32768/32768 bytes at offset 4303110656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303176192 ++read 32768/32768 bytes at offset 4303176192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303241728 ++read 32768/32768 bytes at offset 4303241728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303307264 ++read 32768/32768 bytes at offset 4303307264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303372800 ++read 32768/32768 bytes at offset 4303372800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303438336 ++read 32768/32768 bytes at offset 4303438336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303503872 ++read 32768/32768 bytes at offset 4303503872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303569408 ++read 32768/32768 bytes at offset 4303569408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303634944 ++read 32768/32768 bytes at offset 4303634944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303700480 ++read 32768/32768 bytes at offset 4303700480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303766016 ++read 32768/32768 bytes at offset 4303766016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303831552 ++read 32768/32768 bytes at offset 4303831552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303897088 ++read 32768/32768 bytes at offset 4303897088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303962624 ++read 32768/32768 bytes at offset 4303962624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304028160 ++read 32768/32768 bytes at offset 4304028160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304093696 ++read 32768/32768 bytes at offset 4304093696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304159232 ++read 32768/32768 bytes at offset 4304159232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304224768 ++read 32768/32768 bytes at offset 4304224768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304290304 ++read 32768/32768 bytes at offset 4304290304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304355840 ++read 32768/32768 bytes at offset 4304355840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 131072/131072 bytes at offset 4304437760 ++=== IO: pattern 65 ++read 131072/131072 bytes at offset 4304437760 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304634368 ++read 131072/131072 bytes at offset 4304634368 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304830976 ++read 131072/131072 bytes at offset 4304830976 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305027584 ++read 131072/131072 bytes at offset 4305027584 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305224192 ++read 131072/131072 bytes at offset 4305224192 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305420800 ++read 131072/131072 bytes at offset 4305420800 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305617408 ++read 131072/131072 bytes at offset 4305617408 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305814016 ++read 131072/131072 bytes at offset 4305814016 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4306010624 ++read 131072/131072 bytes at offset 4306010624 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5368643584 ++read 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5905547264 ++read 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 65536/65536 bytes at offset 4294967808 ++=== IO: pattern 1 ++wrote 65536/65536 bytes at offset 4294967808 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295033344 ++wrote 65536/65536 bytes at offset 4295033344 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295098880 ++wrote 65536/65536 bytes at offset 4295098880 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295164416 ++wrote 65536/65536 bytes at offset 4295164416 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295229952 ++wrote 65536/65536 bytes at offset 4295229952 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295295488 ++wrote 65536/65536 bytes at offset 4295295488 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295361024 ++wrote 65536/65536 bytes at offset 4295361024 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295426560 ++wrote 65536/65536 bytes at offset 4295426560 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295492096 ++wrote 65536/65536 bytes at offset 4295492096 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295557632 ++wrote 65536/65536 bytes at offset 4295557632 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295623168 ++wrote 65536/65536 bytes at offset 4295623168 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295688704 ++wrote 65536/65536 bytes at offset 4295688704 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295754240 ++wrote 65536/65536 bytes at offset 4295754240 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295819776 ++wrote 65536/65536 bytes at offset 4295819776 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295885312 ++wrote 65536/65536 bytes at offset 4295885312 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295950848 ++wrote 65536/65536 bytes at offset 4295950848 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296016384 ++wrote 65536/65536 bytes at offset 4296016384 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296081920 ++wrote 65536/65536 bytes at offset 4296081920 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296147456 ++wrote 65536/65536 bytes at offset 4296147456 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296212992 ++wrote 65536/65536 bytes at offset 4296212992 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296278528 ++wrote 65536/65536 bytes at offset 4296278528 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296344064 ++wrote 65536/65536 bytes at offset 4296344064 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296409600 ++wrote 65536/65536 bytes at offset 4296409600 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296475136 ++wrote 65536/65536 bytes at offset 4296475136 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296540672 ++wrote 65536/65536 bytes at offset 4296540672 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296606208 ++wrote 65536/65536 bytes at offset 4296606208 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296671744 ++wrote 65536/65536 bytes at offset 4296671744 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296737280 ++wrote 65536/65536 bytes at offset 4296737280 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296802816 ++wrote 65536/65536 bytes at offset 4296802816 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296868352 ++wrote 65536/65536 bytes at offset 4296868352 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296933888 ++wrote 65536/65536 bytes at offset 4296933888 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296999424 ++wrote 65536/65536 bytes at offset 4296999424 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297064960 ++wrote 65536/65536 bytes at offset 4297064960 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297130496 ++wrote 65536/65536 bytes at offset 4297130496 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297196032 ++wrote 65536/65536 bytes at offset 4297196032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297261568 ++wrote 65536/65536 bytes at offset 4297261568 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 32768/32768 bytes at offset 4297359872 ++=== IO: pattern 65 ++wrote 32768/32768 bytes at offset 4297359872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297425408 ++wrote 32768/32768 bytes at offset 4297425408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297490944 ++wrote 32768/32768 bytes at offset 4297490944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297556480 ++wrote 32768/32768 bytes at offset 4297556480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297622016 ++wrote 32768/32768 bytes at offset 4297622016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297687552 ++wrote 32768/32768 bytes at offset 4297687552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297753088 ++wrote 32768/32768 bytes at offset 4297753088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297818624 ++wrote 32768/32768 bytes at offset 4297818624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297884160 ++wrote 32768/32768 bytes at offset 4297884160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4297949696 ++wrote 32768/32768 bytes at offset 4297949696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298015232 ++wrote 32768/32768 bytes at offset 4298015232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298080768 ++wrote 32768/32768 bytes at offset 4298080768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298146304 ++wrote 32768/32768 bytes at offset 4298146304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298211840 ++wrote 32768/32768 bytes at offset 4298211840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298277376 ++wrote 32768/32768 bytes at offset 4298277376 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298342912 ++wrote 32768/32768 bytes at offset 4298342912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298408448 ++wrote 32768/32768 bytes at offset 4298408448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298473984 ++wrote 32768/32768 bytes at offset 4298473984 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298539520 ++wrote 32768/32768 bytes at offset 4298539520 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298605056 ++wrote 32768/32768 bytes at offset 4298605056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298670592 ++wrote 32768/32768 bytes at offset 4298670592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298736128 ++wrote 32768/32768 bytes at offset 4298736128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298801664 ++wrote 32768/32768 bytes at offset 4298801664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298867200 ++wrote 32768/32768 bytes at offset 4298867200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298932736 ++wrote 32768/32768 bytes at offset 4298932736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4298998272 ++wrote 32768/32768 bytes at offset 4298998272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299063808 ++wrote 32768/32768 bytes at offset 4299063808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299129344 ++wrote 32768/32768 bytes at offset 4299129344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299194880 ++wrote 32768/32768 bytes at offset 4299194880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299260416 ++wrote 32768/32768 bytes at offset 4299260416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299325952 ++wrote 32768/32768 bytes at offset 4299325952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299391488 ++wrote 32768/32768 bytes at offset 4299391488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299457024 ++wrote 32768/32768 bytes at offset 4299457024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299522560 ++wrote 32768/32768 bytes at offset 4299522560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299588096 ++wrote 32768/32768 bytes at offset 4299588096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299653632 ++wrote 32768/32768 bytes at offset 4299653632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> wrote 32768/32768 bytes at offset 4299686400 ++=== IO: pattern 1 ++wrote 32768/32768 bytes at offset 4299686400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299751936 ++wrote 32768/32768 bytes at offset 4299751936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299817472 ++wrote 32768/32768 bytes at offset 4299817472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299883008 ++wrote 32768/32768 bytes at offset 4299883008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4299948544 ++wrote 32768/32768 bytes at offset 4299948544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300014080 ++wrote 32768/32768 bytes at offset 4300014080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300079616 ++wrote 32768/32768 bytes at offset 4300079616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300145152 ++wrote 32768/32768 bytes at offset 4300145152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300210688 ++wrote 32768/32768 bytes at offset 4300210688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300276224 ++wrote 32768/32768 bytes at offset 4300276224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300341760 ++wrote 32768/32768 bytes at offset 4300341760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300407296 ++wrote 32768/32768 bytes at offset 4300407296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300472832 ++wrote 32768/32768 bytes at offset 4300472832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300538368 ++wrote 32768/32768 bytes at offset 4300538368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300603904 ++wrote 32768/32768 bytes at offset 4300603904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300669440 ++wrote 32768/32768 bytes at offset 4300669440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300734976 ++wrote 32768/32768 bytes at offset 4300734976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300800512 ++wrote 32768/32768 bytes at offset 4300800512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300866048 ++wrote 32768/32768 bytes at offset 4300866048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300931584 ++wrote 32768/32768 bytes at offset 4300931584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4300997120 ++wrote 32768/32768 bytes at offset 4300997120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301062656 ++wrote 32768/32768 bytes at offset 4301062656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301128192 ++wrote 32768/32768 bytes at offset 4301128192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301193728 ++wrote 32768/32768 bytes at offset 4301193728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301259264 ++wrote 32768/32768 bytes at offset 4301259264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301324800 ++wrote 32768/32768 bytes at offset 4301324800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301390336 ++wrote 32768/32768 bytes at offset 4301390336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301455872 ++wrote 32768/32768 bytes at offset 4301455872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301521408 ++wrote 32768/32768 bytes at offset 4301521408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301586944 ++wrote 32768/32768 bytes at offset 4301586944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301652480 ++wrote 32768/32768 bytes at offset 4301652480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301718016 ++wrote 32768/32768 bytes at offset 4301718016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301783552 ++wrote 32768/32768 bytes at offset 4301783552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301849088 ++wrote 32768/32768 bytes at offset 4301849088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301914624 ++wrote 32768/32768 bytes at offset 4301914624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4301980160 ++wrote 32768/32768 bytes at offset 4301980160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> wrote 32768/32768 bytes at offset 4302062080 ++=== IO: pattern 33 ++wrote 32768/32768 bytes at offset 4302062080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302127616 ++wrote 32768/32768 bytes at offset 4302127616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302193152 ++wrote 32768/32768 bytes at offset 4302193152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302258688 ++wrote 32768/32768 bytes at offset 4302258688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302324224 ++wrote 32768/32768 bytes at offset 4302324224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302389760 ++wrote 32768/32768 bytes at offset 4302389760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302455296 ++wrote 32768/32768 bytes at offset 4302455296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302520832 ++wrote 32768/32768 bytes at offset 4302520832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302586368 ++wrote 32768/32768 bytes at offset 4302586368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302651904 ++wrote 32768/32768 bytes at offset 4302651904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302717440 ++wrote 32768/32768 bytes at offset 4302717440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302782976 ++wrote 32768/32768 bytes at offset 4302782976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302848512 ++wrote 32768/32768 bytes at offset 4302848512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302914048 ++wrote 32768/32768 bytes at offset 4302914048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4302979584 ++wrote 32768/32768 bytes at offset 4302979584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303045120 ++wrote 32768/32768 bytes at offset 4303045120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303110656 ++wrote 32768/32768 bytes at offset 4303110656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303176192 ++wrote 32768/32768 bytes at offset 4303176192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303241728 ++wrote 32768/32768 bytes at offset 4303241728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303307264 ++wrote 32768/32768 bytes at offset 4303307264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303372800 ++wrote 32768/32768 bytes at offset 4303372800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303438336 ++wrote 32768/32768 bytes at offset 4303438336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303503872 ++wrote 32768/32768 bytes at offset 4303503872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303569408 ++wrote 32768/32768 bytes at offset 4303569408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303634944 ++wrote 32768/32768 bytes at offset 4303634944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303700480 ++wrote 32768/32768 bytes at offset 4303700480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303766016 ++wrote 32768/32768 bytes at offset 4303766016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303831552 ++wrote 32768/32768 bytes at offset 4303831552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303897088 ++wrote 32768/32768 bytes at offset 4303897088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4303962624 ++wrote 32768/32768 bytes at offset 4303962624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304028160 ++wrote 32768/32768 bytes at offset 4304028160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304093696 ++wrote 32768/32768 bytes at offset 4304093696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304159232 ++wrote 32768/32768 bytes at offset 4304159232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304224768 ++wrote 32768/32768 bytes at offset 4304224768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304290304 ++wrote 32768/32768 bytes at offset 4304290304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset 4304355840 ++wrote 32768/32768 bytes at offset 4304355840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> wrote 131072/131072 bytes at offset 4304437760 ++=== IO: pattern 65 ++wrote 131072/131072 bytes at offset 4304437760 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304634368 ++wrote 131072/131072 bytes at offset 4304634368 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4304830976 ++wrote 131072/131072 bytes at offset 4304830976 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305027584 ++wrote 131072/131072 bytes at offset 4305027584 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305224192 ++wrote 131072/131072 bytes at offset 4305224192 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305420800 ++wrote 131072/131072 bytes at offset 4305420800 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305617408 ++wrote 131072/131072 bytes at offset 4305617408 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4305814016 ++wrote 131072/131072 bytes at offset 4305814016 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 4306010624 ++wrote 131072/131072 bytes at offset 4306010624 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> wrote 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++wrote 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5368643584 ++wrote 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 196608/196608 bytes at offset 5905547264 ++wrote 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 65536/65536 bytes at offset 4294967808 ++=== IO: pattern 1 ++read 65536/65536 bytes at offset 4294967808 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295033344 ++read 65536/65536 bytes at offset 4295033344 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295098880 ++read 65536/65536 bytes at offset 4295098880 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295164416 ++read 65536/65536 bytes at offset 4295164416 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295229952 ++read 65536/65536 bytes at offset 4295229952 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295295488 ++read 65536/65536 bytes at offset 4295295488 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295361024 ++read 65536/65536 bytes at offset 4295361024 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295426560 ++read 65536/65536 bytes at offset 4295426560 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295492096 ++read 65536/65536 bytes at offset 4295492096 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295557632 ++read 65536/65536 bytes at offset 4295557632 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295623168 ++read 65536/65536 bytes at offset 4295623168 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688704 ++read 65536/65536 bytes at offset 4295688704 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295754240 ++read 65536/65536 bytes at offset 4295754240 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295819776 ++read 65536/65536 bytes at offset 4295819776 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295885312 ++read 65536/65536 bytes at offset 4295885312 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295950848 ++read 65536/65536 bytes at offset 4295950848 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296016384 ++read 65536/65536 bytes at offset 4296016384 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081920 ++read 65536/65536 bytes at offset 4296081920 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296147456 ++read 65536/65536 bytes at offset 4296147456 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296212992 ++read 65536/65536 bytes at offset 4296212992 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278528 ++read 65536/65536 bytes at offset 4296278528 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296344064 ++read 65536/65536 bytes at offset 4296344064 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296409600 ++read 65536/65536 bytes at offset 4296409600 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296475136 ++read 65536/65536 bytes at offset 4296475136 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296540672 ++read 65536/65536 bytes at offset 4296540672 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296606208 ++read 65536/65536 bytes at offset 4296606208 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671744 ++read 65536/65536 bytes at offset 4296671744 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296737280 ++read 65536/65536 bytes at offset 4296737280 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296802816 ++read 65536/65536 bytes at offset 4296802816 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296868352 ++read 65536/65536 bytes at offset 4296868352 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296933888 ++read 65536/65536 bytes at offset 4296933888 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296999424 ++read 65536/65536 bytes at offset 4296999424 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297064960 ++read 65536/65536 bytes at offset 4297064960 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297130496 ++read 65536/65536 bytes at offset 4297130496 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297196032 ++read 65536/65536 bytes at offset 4297196032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261568 ++read 65536/65536 bytes at offset 4297261568 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 32768/32768 bytes at offset 4297359872 ++=== IO: pattern 65 ++read 32768/32768 bytes at offset 4297359872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297425408 ++read 32768/32768 bytes at offset 4297425408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297490944 ++read 32768/32768 bytes at offset 4297490944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297556480 ++read 32768/32768 bytes at offset 4297556480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297622016 ++read 32768/32768 bytes at offset 4297622016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297687552 ++read 32768/32768 bytes at offset 4297687552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297753088 ++read 32768/32768 bytes at offset 4297753088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297818624 ++read 32768/32768 bytes at offset 4297818624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297884160 ++read 32768/32768 bytes at offset 4297884160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4297949696 ++read 32768/32768 bytes at offset 4297949696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298015232 ++read 32768/32768 bytes at offset 4298015232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298080768 ++read 32768/32768 bytes at offset 4298080768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298146304 ++read 32768/32768 bytes at offset 4298146304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298211840 ++read 32768/32768 bytes at offset 4298211840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298277376 ++read 32768/32768 bytes at offset 4298277376 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298342912 ++read 32768/32768 bytes at offset 4298342912 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298408448 ++read 32768/32768 bytes at offset 4298408448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298473984 ++read 32768/32768 bytes at offset 4298473984 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298539520 ++read 32768/32768 bytes at offset 4298539520 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298605056 ++read 32768/32768 bytes at offset 4298605056 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298670592 ++read 32768/32768 bytes at offset 4298670592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298736128 ++read 32768/32768 bytes at offset 4298736128 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298801664 ++read 32768/32768 bytes at offset 4298801664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298867200 ++read 32768/32768 bytes at offset 4298867200 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298932736 ++read 32768/32768 bytes at offset 4298932736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4298998272 ++read 32768/32768 bytes at offset 4298998272 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299063808 ++read 32768/32768 bytes at offset 4299063808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299129344 ++read 32768/32768 bytes at offset 4299129344 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299194880 ++read 32768/32768 bytes at offset 4299194880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299260416 ++read 32768/32768 bytes at offset 4299260416 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299325952 ++read 32768/32768 bytes at offset 4299325952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299391488 ++read 32768/32768 bytes at offset 4299391488 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299457024 ++read 32768/32768 bytes at offset 4299457024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299522560 ++read 32768/32768 bytes at offset 4299522560 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299588096 ++read 32768/32768 bytes at offset 4299588096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299653632 ++read 32768/32768 bytes at offset 4299653632 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 1 +-qemu-io> read 32768/32768 bytes at offset 4299686400 ++=== IO: pattern 1 ++read 32768/32768 bytes at offset 4299686400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299751936 ++read 32768/32768 bytes at offset 4299751936 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299817472 ++read 32768/32768 bytes at offset 4299817472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299883008 ++read 32768/32768 bytes at offset 4299883008 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4299948544 ++read 32768/32768 bytes at offset 4299948544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300014080 ++read 32768/32768 bytes at offset 4300014080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300079616 ++read 32768/32768 bytes at offset 4300079616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300145152 ++read 32768/32768 bytes at offset 4300145152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300210688 ++read 32768/32768 bytes at offset 4300210688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300276224 ++read 32768/32768 bytes at offset 4300276224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300341760 ++read 32768/32768 bytes at offset 4300341760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300407296 ++read 32768/32768 bytes at offset 4300407296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300472832 ++read 32768/32768 bytes at offset 4300472832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300538368 ++read 32768/32768 bytes at offset 4300538368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300603904 ++read 32768/32768 bytes at offset 4300603904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300669440 ++read 32768/32768 bytes at offset 4300669440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300734976 ++read 32768/32768 bytes at offset 4300734976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300800512 ++read 32768/32768 bytes at offset 4300800512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300866048 ++read 32768/32768 bytes at offset 4300866048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300931584 ++read 32768/32768 bytes at offset 4300931584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4300997120 ++read 32768/32768 bytes at offset 4300997120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301062656 ++read 32768/32768 bytes at offset 4301062656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301128192 ++read 32768/32768 bytes at offset 4301128192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301193728 ++read 32768/32768 bytes at offset 4301193728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301259264 ++read 32768/32768 bytes at offset 4301259264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301324800 ++read 32768/32768 bytes at offset 4301324800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301390336 ++read 32768/32768 bytes at offset 4301390336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301455872 ++read 32768/32768 bytes at offset 4301455872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301521408 ++read 32768/32768 bytes at offset 4301521408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301586944 ++read 32768/32768 bytes at offset 4301586944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301652480 ++read 32768/32768 bytes at offset 4301652480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301718016 ++read 32768/32768 bytes at offset 4301718016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301783552 ++read 32768/32768 bytes at offset 4301783552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301849088 ++read 32768/32768 bytes at offset 4301849088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301914624 ++read 32768/32768 bytes at offset 4301914624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4301980160 ++read 32768/32768 bytes at offset 4301980160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 33 +-qemu-io> read 32768/32768 bytes at offset 4302062080 ++=== IO: pattern 33 ++read 32768/32768 bytes at offset 4302062080 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302127616 ++read 32768/32768 bytes at offset 4302127616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302193152 ++read 32768/32768 bytes at offset 4302193152 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302258688 ++read 32768/32768 bytes at offset 4302258688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302324224 ++read 32768/32768 bytes at offset 4302324224 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302389760 ++read 32768/32768 bytes at offset 4302389760 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302455296 ++read 32768/32768 bytes at offset 4302455296 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302520832 ++read 32768/32768 bytes at offset 4302520832 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302586368 ++read 32768/32768 bytes at offset 4302586368 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302651904 ++read 32768/32768 bytes at offset 4302651904 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302717440 ++read 32768/32768 bytes at offset 4302717440 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302782976 ++read 32768/32768 bytes at offset 4302782976 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302848512 ++read 32768/32768 bytes at offset 4302848512 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302914048 ++read 32768/32768 bytes at offset 4302914048 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4302979584 ++read 32768/32768 bytes at offset 4302979584 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303045120 ++read 32768/32768 bytes at offset 4303045120 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303110656 ++read 32768/32768 bytes at offset 4303110656 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303176192 ++read 32768/32768 bytes at offset 4303176192 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303241728 ++read 32768/32768 bytes at offset 4303241728 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303307264 ++read 32768/32768 bytes at offset 4303307264 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303372800 ++read 32768/32768 bytes at offset 4303372800 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303438336 ++read 32768/32768 bytes at offset 4303438336 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303503872 ++read 32768/32768 bytes at offset 4303503872 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303569408 ++read 32768/32768 bytes at offset 4303569408 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303634944 ++read 32768/32768 bytes at offset 4303634944 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303700480 ++read 32768/32768 bytes at offset 4303700480 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303766016 ++read 32768/32768 bytes at offset 4303766016 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303831552 ++read 32768/32768 bytes at offset 4303831552 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303897088 ++read 32768/32768 bytes at offset 4303897088 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4303962624 ++read 32768/32768 bytes at offset 4303962624 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304028160 ++read 32768/32768 bytes at offset 4304028160 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304093696 ++read 32768/32768 bytes at offset 4304093696 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304159232 ++read 32768/32768 bytes at offset 4304159232 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304224768 ++read 32768/32768 bytes at offset 4304224768 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304290304 ++read 32768/32768 bytes at offset 4304290304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4304355840 ++read 32768/32768 bytes at offset 4304355840 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 65 +-qemu-io> read 131072/131072 bytes at offset 4304437760 ++=== IO: pattern 65 ++read 131072/131072 bytes at offset 4304437760 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304634368 ++read 131072/131072 bytes at offset 4304634368 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4304830976 ++read 131072/131072 bytes at offset 4304830976 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305027584 ++read 131072/131072 bytes at offset 4305027584 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305224192 ++read 131072/131072 bytes at offset 4305224192 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305420800 ++read 131072/131072 bytes at offset 4305420800 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305617408 ++read 131072/131072 bytes at offset 4305617408 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4305814016 ++read 131072/131072 bytes at offset 4305814016 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4306010624 ++read 131072/131072 bytes at offset 4306010624 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 64 +-qemu-io> read 196608/196608 bytes at offset 4831739904 ++=== IO: pattern 64 ++read 196608/196608 bytes at offset 4831739904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5368643584 ++read 196608/196608 bytes at offset 5368643584 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 5905547264 ++read 196608/196608 bytes at offset 5905547264 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating another new image + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8589934592 +@@ -25488,219 +25488,219 @@ More complex patterns + test2: With offset 0 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 851968 ++wrote 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1441792 ++wrote 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2031616 ++wrote 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 327680 ++wrote 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507328 ++wrote 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097152 ++wrote 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114112 ++wrote 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1703936 ++wrote 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2293760 ++wrote 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 589824 ++wrote 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1179648 ++wrote 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769472 ++wrote 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245184 ++wrote 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835008 ++wrote 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 196608 ++wrote 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376256 ++wrote 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966080 ++wrote 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 131072/131072 bytes at offset 0 ++read 131072/131072 bytes at offset 0 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 589824 ++read 131072/131072 bytes at offset 589824 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 1179648 ++read 131072/131072 bytes at offset 1179648 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 1769472 ++read 131072/131072 bytes at offset 1769472 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 196608/196608 bytes at offset 196608 ++=== IO: pattern 165 ++read 196608/196608 bytes at offset 196608 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 786432 ++read 196608/196608 bytes at offset 786432 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1376256 ++read 196608/196608 bytes at offset 1376256 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 1966080 ++read 196608/196608 bytes at offset 1966080 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 65536/65536 bytes at offset 524288 ++=== IO: pattern 165 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1114112 ++read 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1703936 ++read 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2293760 ++read 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 131072 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 720896 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1310720 ++read 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 1900544 ++read 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 131072/131072 bytes at offset 393216 ++=== IO: pattern 0 ++read 131072/131072 bytes at offset 393216 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 983040 ++read 131072/131072 bytes at offset 983040 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 1572864 ++read 131072/131072 bytes at offset 1572864 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 2162688 ++read 131072/131072 bytes at offset 2162688 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + test2: With offset 4294967296 + === Clusters to be compressed [1] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 4295229440 ++wrote 65536/65536 bytes at offset 4295229440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295819264 ++wrote 65536/65536 bytes at offset 4295819264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296409088 ++wrote 65536/65536 bytes at offset 4296409088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296998912 ++wrote 65536/65536 bytes at offset 4296998912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [2] ++=== Clusters to be compressed [2] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 4295294976 ++wrote 65536/65536 bytes at offset 4295294976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295884800 ++wrote 65536/65536 bytes at offset 4295884800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296474624 ++wrote 65536/65536 bytes at offset 4296474624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297064448 ++wrote 65536/65536 bytes at offset 4297064448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Clusters to be compressed [3] ++=== Clusters to be compressed [3] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 4295491584 ++wrote 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296081408 ++wrote 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296671232 ++wrote 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4297261056 ++wrote 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [1] ++=== Used clusters [1] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 4294967296 ++wrote 65536/65536 bytes at offset 4294967296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295557120 ++wrote 65536/65536 bytes at offset 4295557120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296146944 ++wrote 65536/65536 bytes at offset 4296146944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296736768 ++wrote 65536/65536 bytes at offset 4296736768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [2] ++=== Used clusters [2] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 4295032832 ++wrote 65536/65536 bytes at offset 4295032832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295622656 ++wrote 65536/65536 bytes at offset 4295622656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296212480 ++wrote 65536/65536 bytes at offset 4296212480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296802304 ++wrote 65536/65536 bytes at offset 4296802304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Used clusters [3] ++=== Used clusters [3] + === IO: pattern 165 +-qemu-io> wrote 65536/65536 bytes at offset 4295163904 ++wrote 65536/65536 bytes at offset 4295163904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4295753728 ++wrote 65536/65536 bytes at offset 4295753728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296343552 ++wrote 65536/65536 bytes at offset 4296343552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4296933376 ++wrote 65536/65536 bytes at offset 4296933376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read used/compressed clusters ++=== Read used/compressed clusters + === IO: pattern 165 +-qemu-io> read 131072/131072 bytes at offset 4294967296 ++read 131072/131072 bytes at offset 4294967296 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4295557120 ++read 131072/131072 bytes at offset 4295557120 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4296146944 ++read 131072/131072 bytes at offset 4296146944 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4296736768 ++read 131072/131072 bytes at offset 4296736768 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 196608/196608 bytes at offset 4295163904 ++=== IO: pattern 165 ++read 196608/196608 bytes at offset 4295163904 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 4295753728 ++read 196608/196608 bytes at offset 4295753728 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 4296343552 ++read 196608/196608 bytes at offset 4296343552 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 196608/196608 bytes at offset 4296933376 ++read 196608/196608 bytes at offset 4296933376 + 192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 165 +-qemu-io> read 65536/65536 bytes at offset 4295491584 ++=== IO: pattern 165 ++read 65536/65536 bytes at offset 4295491584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296081408 ++read 65536/65536 bytes at offset 4296081408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296671232 ++read 65536/65536 bytes at offset 4296671232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4297261056 ++read 65536/65536 bytes at offset 4297261056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === Read zeros ++=== Read zeros + === IO: pattern 0 +-qemu-io> read 65536/65536 bytes at offset 4295098368 ++read 65536/65536 bytes at offset 4295098368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4295688192 ++read 65536/65536 bytes at offset 4295688192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296278016 ++read 65536/65536 bytes at offset 4296278016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4296867840 ++read 65536/65536 bytes at offset 4296867840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 131072/131072 bytes at offset 4295360512 ++=== IO: pattern 0 ++read 131072/131072 bytes at offset 4295360512 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4295950336 ++read 131072/131072 bytes at offset 4295950336 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4296540160 ++read 131072/131072 bytes at offset 4296540160 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 4297129984 ++read 131072/131072 bytes at offset 4297129984 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/024.out b/tests/qemu-iotests/024.out +index 072207c..e84b973 100644 +--- a/tests/qemu-iotests/024.out ++++ b/tests/qemu-iotests/024.out +@@ -3,142 +3,142 @@ Creating backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + === IO: pattern 0x11 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393216 ++wrote 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Creating new backing file ++Creating new backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + === IO: pattern 0x22 +-qemu-io> wrote 131072/131072 bytes at offset 0 ++wrote 131072/131072 bytes at offset 0 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 262144 ++wrote 131072/131072 bytes at offset 262144 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 524288 ++wrote 131072/131072 bytes at offset 524288 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 786432 ++wrote 131072/131072 bytes at offset 786432 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Creating COW image ++Creating COW image + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 backing_file='TEST_DIR/t.IMGFMT.base_old' + === IO: pattern 0x33 +-qemu-io> wrote 262144/262144 bytes at offset 0 ++wrote 262144/262144 bytes at offset 0 + 256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> wrote 262144/262144 bytes at offset 524288 ++=== IO: pattern 0x33 ++wrote 262144/262144 bytes at offset 524288 + 256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Read before the rebase to make sure everything is set up correctly ++Read before the rebase to make sure everything is set up correctly + + === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 65536 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 131072 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 196608 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 262144 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 327680 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 393216 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 458752 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 524288 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 589824 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 655360 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 720896 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 786432 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 851968 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 917504 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 983040 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> ++ + Rebase and test again + + === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 65536 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 131072 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 196608 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 262144 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 327680 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 393216 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 458752 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 524288 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 589824 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 655360 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x33 +-qemu-io> read 65536/65536 bytes at offset 720896 ++=== IO: pattern 0x33 ++read 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 786432 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 851968 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x11 +-qemu-io> read 65536/65536 bytes at offset 917504 ++=== IO: pattern 0x11 ++read 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0x00 +-qemu-io> read 65536/65536 bytes at offset 983040 ++=== IO: pattern 0x00 ++read 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> *** done ++*** done +diff --git a/tests/qemu-iotests/025.out b/tests/qemu-iotests/025.out +index d245727..8c695e6 100644 +--- a/tests/qemu-iotests/025.out ++++ b/tests/qemu-iotests/025.out +@@ -5,23 +5,23 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + + === Writing whole image + === IO: pattern 0xc5 +-qemu-io> wrote 134217728/134217728 bytes at offset 0 ++wrote 134217728/134217728 bytes at offset 0 + 128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + + === Resizing image +-qemu-io> 128 MiB +-qemu-io> qemu-io> 384 MiB +-qemu-io> No errors were found on the image. ++128 MiB ++384 MiB ++No errors were found on the image. + + === Verifying image size after reopen + 384 MiB + + === Verifying resized image + === IO: pattern 0xc5 +-qemu-io> read 134217728/134217728 bytes at offset 0 ++read 134217728/134217728 bytes at offset 0 + 128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 268435456/268435456 bytes at offset 134217728 ++=== IO: pattern 0 ++read 268435456/268435456 bytes at offset 134217728 + 256 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> *** done ++*** done +diff --git a/tests/qemu-iotests/028.out b/tests/qemu-iotests/028.out +index 8b6cfcb..8affb7f 100644 +--- a/tests/qemu-iotests/028.out ++++ b/tests/qemu-iotests/028.out +@@ -3,467 +3,467 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=3221227008 + Filling base image + + === IO: pattern 195 +-qemu-io> wrote 512/512 bytes at offset 3221194240 ++wrote 512/512 bytes at offset 3221194240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221195264 ++wrote 512/512 bytes at offset 3221195264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221196288 ++wrote 512/512 bytes at offset 3221196288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221197312 ++wrote 512/512 bytes at offset 3221197312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221198336 ++wrote 512/512 bytes at offset 3221198336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221199360 ++wrote 512/512 bytes at offset 3221199360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221200384 ++wrote 512/512 bytes at offset 3221200384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221201408 ++wrote 512/512 bytes at offset 3221201408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221202432 ++wrote 512/512 bytes at offset 3221202432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221203456 ++wrote 512/512 bytes at offset 3221203456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221204480 ++wrote 512/512 bytes at offset 3221204480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221205504 ++wrote 512/512 bytes at offset 3221205504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221206528 ++wrote 512/512 bytes at offset 3221206528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221207552 ++wrote 512/512 bytes at offset 3221207552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221208576 ++wrote 512/512 bytes at offset 3221208576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221209600 ++wrote 512/512 bytes at offset 3221209600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221210624 ++wrote 512/512 bytes at offset 3221210624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221211648 ++wrote 512/512 bytes at offset 3221211648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221212672 ++wrote 512/512 bytes at offset 3221212672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221213696 ++wrote 512/512 bytes at offset 3221213696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221214720 ++wrote 512/512 bytes at offset 3221214720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221215744 ++wrote 512/512 bytes at offset 3221215744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221216768 ++wrote 512/512 bytes at offset 3221216768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221217792 ++wrote 512/512 bytes at offset 3221217792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221218816 ++wrote 512/512 bytes at offset 3221218816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221219840 ++wrote 512/512 bytes at offset 3221219840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221220864 ++wrote 512/512 bytes at offset 3221220864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221221888 ++wrote 512/512 bytes at offset 3221221888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221222912 ++wrote 512/512 bytes at offset 3221222912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221223936 ++wrote 512/512 bytes at offset 3221223936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221224960 ++wrote 512/512 bytes at offset 3221224960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221225984 ++wrote 512/512 bytes at offset 3221225984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Creating test image with backing file + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294968832 backing_file='TEST_DIR/t.IMGFMT.base' + Filling test image + + === IO: pattern 196 +-qemu-io> wrote 512/512 bytes at offset 3221194752 ++wrote 512/512 bytes at offset 3221194752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221195776 ++wrote 512/512 bytes at offset 3221195776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221196800 ++wrote 512/512 bytes at offset 3221196800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221197824 ++wrote 512/512 bytes at offset 3221197824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221198848 ++wrote 512/512 bytes at offset 3221198848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221199872 ++wrote 512/512 bytes at offset 3221199872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221200896 ++wrote 512/512 bytes at offset 3221200896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221201920 ++wrote 512/512 bytes at offset 3221201920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221202944 ++wrote 512/512 bytes at offset 3221202944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221203968 ++wrote 512/512 bytes at offset 3221203968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221204992 ++wrote 512/512 bytes at offset 3221204992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221206016 ++wrote 512/512 bytes at offset 3221206016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221207040 ++wrote 512/512 bytes at offset 3221207040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221208064 ++wrote 512/512 bytes at offset 3221208064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221209088 ++wrote 512/512 bytes at offset 3221209088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221210112 ++wrote 512/512 bytes at offset 3221210112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221211136 ++wrote 512/512 bytes at offset 3221211136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221212160 ++wrote 512/512 bytes at offset 3221212160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221213184 ++wrote 512/512 bytes at offset 3221213184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221214208 ++wrote 512/512 bytes at offset 3221214208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221215232 ++wrote 512/512 bytes at offset 3221215232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221216256 ++wrote 512/512 bytes at offset 3221216256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221217280 ++wrote 512/512 bytes at offset 3221217280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221218304 ++wrote 512/512 bytes at offset 3221218304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221219328 ++wrote 512/512 bytes at offset 3221219328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221220352 ++wrote 512/512 bytes at offset 3221220352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221221376 ++wrote 512/512 bytes at offset 3221221376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221222400 ++wrote 512/512 bytes at offset 3221222400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221223424 ++wrote 512/512 bytes at offset 3221223424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221224448 ++wrote 512/512 bytes at offset 3221224448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221225472 ++wrote 512/512 bytes at offset 3221225472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221226496 ++wrote 512/512 bytes at offset 3221226496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221227520 ++wrote 512/512 bytes at offset 3221227520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221228544 ++wrote 512/512 bytes at offset 3221228544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221229568 ++wrote 512/512 bytes at offset 3221229568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221230592 ++wrote 512/512 bytes at offset 3221230592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221231616 ++wrote 512/512 bytes at offset 3221231616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221232640 ++wrote 512/512 bytes at offset 3221232640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221233664 ++wrote 512/512 bytes at offset 3221233664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221234688 ++wrote 512/512 bytes at offset 3221234688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221235712 ++wrote 512/512 bytes at offset 3221235712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221236736 ++wrote 512/512 bytes at offset 3221236736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221237760 ++wrote 512/512 bytes at offset 3221237760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221238784 ++wrote 512/512 bytes at offset 3221238784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221239808 ++wrote 512/512 bytes at offset 3221239808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221240832 ++wrote 512/512 bytes at offset 3221240832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221241856 ++wrote 512/512 bytes at offset 3221241856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221242880 ++wrote 512/512 bytes at offset 3221242880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221243904 ++wrote 512/512 bytes at offset 3221243904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221244928 ++wrote 512/512 bytes at offset 3221244928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221245952 ++wrote 512/512 bytes at offset 3221245952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221246976 ++wrote 512/512 bytes at offset 3221246976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221248000 ++wrote 512/512 bytes at offset 3221248000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221249024 ++wrote 512/512 bytes at offset 3221249024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221250048 ++wrote 512/512 bytes at offset 3221250048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221251072 ++wrote 512/512 bytes at offset 3221251072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221252096 ++wrote 512/512 bytes at offset 3221252096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221253120 ++wrote 512/512 bytes at offset 3221253120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221254144 ++wrote 512/512 bytes at offset 3221254144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221255168 ++wrote 512/512 bytes at offset 3221255168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221256192 ++wrote 512/512 bytes at offset 3221256192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221257216 ++wrote 512/512 bytes at offset 3221257216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221258240 ++wrote 512/512 bytes at offset 3221258240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3221259264 ++wrote 512/512 bytes at offset 3221259264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + Reading + + === IO: pattern 195 +-qemu-io> read 512/512 bytes at offset 3221194240 ++read 512/512 bytes at offset 3221194240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221195264 ++read 512/512 bytes at offset 3221195264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221196288 ++read 512/512 bytes at offset 3221196288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221197312 ++read 512/512 bytes at offset 3221197312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221198336 ++read 512/512 bytes at offset 3221198336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221199360 ++read 512/512 bytes at offset 3221199360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221200384 ++read 512/512 bytes at offset 3221200384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221201408 ++read 512/512 bytes at offset 3221201408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221202432 ++read 512/512 bytes at offset 3221202432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221203456 ++read 512/512 bytes at offset 3221203456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221204480 ++read 512/512 bytes at offset 3221204480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221205504 ++read 512/512 bytes at offset 3221205504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221206528 ++read 512/512 bytes at offset 3221206528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221207552 ++read 512/512 bytes at offset 3221207552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221208576 ++read 512/512 bytes at offset 3221208576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221209600 ++read 512/512 bytes at offset 3221209600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221210624 ++read 512/512 bytes at offset 3221210624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221211648 ++read 512/512 bytes at offset 3221211648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221212672 ++read 512/512 bytes at offset 3221212672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221213696 ++read 512/512 bytes at offset 3221213696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221214720 ++read 512/512 bytes at offset 3221214720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221215744 ++read 512/512 bytes at offset 3221215744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221216768 ++read 512/512 bytes at offset 3221216768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221217792 ++read 512/512 bytes at offset 3221217792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221218816 ++read 512/512 bytes at offset 3221218816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221219840 ++read 512/512 bytes at offset 3221219840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221220864 ++read 512/512 bytes at offset 3221220864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221221888 ++read 512/512 bytes at offset 3221221888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221222912 ++read 512/512 bytes at offset 3221222912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221223936 ++read 512/512 bytes at offset 3221223936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221224960 ++read 512/512 bytes at offset 3221224960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221225984 ++read 512/512 bytes at offset 3221225984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 196 +-qemu-io> read 512/512 bytes at offset 3221194752 ++=== IO: pattern 196 ++read 512/512 bytes at offset 3221194752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221195776 ++read 512/512 bytes at offset 3221195776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221196800 ++read 512/512 bytes at offset 3221196800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221197824 ++read 512/512 bytes at offset 3221197824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221198848 ++read 512/512 bytes at offset 3221198848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221199872 ++read 512/512 bytes at offset 3221199872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221200896 ++read 512/512 bytes at offset 3221200896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221201920 ++read 512/512 bytes at offset 3221201920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221202944 ++read 512/512 bytes at offset 3221202944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221203968 ++read 512/512 bytes at offset 3221203968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221204992 ++read 512/512 bytes at offset 3221204992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221206016 ++read 512/512 bytes at offset 3221206016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221207040 ++read 512/512 bytes at offset 3221207040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221208064 ++read 512/512 bytes at offset 3221208064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221209088 ++read 512/512 bytes at offset 3221209088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221210112 ++read 512/512 bytes at offset 3221210112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221211136 ++read 512/512 bytes at offset 3221211136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221212160 ++read 512/512 bytes at offset 3221212160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221213184 ++read 512/512 bytes at offset 3221213184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221214208 ++read 512/512 bytes at offset 3221214208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221215232 ++read 512/512 bytes at offset 3221215232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221216256 ++read 512/512 bytes at offset 3221216256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221217280 ++read 512/512 bytes at offset 3221217280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221218304 ++read 512/512 bytes at offset 3221218304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221219328 ++read 512/512 bytes at offset 3221219328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221220352 ++read 512/512 bytes at offset 3221220352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221221376 ++read 512/512 bytes at offset 3221221376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221222400 ++read 512/512 bytes at offset 3221222400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221223424 ++read 512/512 bytes at offset 3221223424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221224448 ++read 512/512 bytes at offset 3221224448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221225472 ++read 512/512 bytes at offset 3221225472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221226496 ++read 512/512 bytes at offset 3221226496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221227520 ++read 512/512 bytes at offset 3221227520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221228544 ++read 512/512 bytes at offset 3221228544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221229568 ++read 512/512 bytes at offset 3221229568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221230592 ++read 512/512 bytes at offset 3221230592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221231616 ++read 512/512 bytes at offset 3221231616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221232640 ++read 512/512 bytes at offset 3221232640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221233664 ++read 512/512 bytes at offset 3221233664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221234688 ++read 512/512 bytes at offset 3221234688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221235712 ++read 512/512 bytes at offset 3221235712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221236736 ++read 512/512 bytes at offset 3221236736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221237760 ++read 512/512 bytes at offset 3221237760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221238784 ++read 512/512 bytes at offset 3221238784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221239808 ++read 512/512 bytes at offset 3221239808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221240832 ++read 512/512 bytes at offset 3221240832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221241856 ++read 512/512 bytes at offset 3221241856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221242880 ++read 512/512 bytes at offset 3221242880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221243904 ++read 512/512 bytes at offset 3221243904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221244928 ++read 512/512 bytes at offset 3221244928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221245952 ++read 512/512 bytes at offset 3221245952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221246976 ++read 512/512 bytes at offset 3221246976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221248000 ++read 512/512 bytes at offset 3221248000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221249024 ++read 512/512 bytes at offset 3221249024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221250048 ++read 512/512 bytes at offset 3221250048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221251072 ++read 512/512 bytes at offset 3221251072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221252096 ++read 512/512 bytes at offset 3221252096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221253120 ++read 512/512 bytes at offset 3221253120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221254144 ++read 512/512 bytes at offset 3221254144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221255168 ++read 512/512 bytes at offset 3221255168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221256192 ++read 512/512 bytes at offset 3221256192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221257216 ++read 512/512 bytes at offset 3221257216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221258240 ++read 512/512 bytes at offset 3221258240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221259264 ++read 512/512 bytes at offset 3221259264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> === IO: pattern 0 +-qemu-io> read 512/512 bytes at offset 3221227008 ++=== IO: pattern 0 ++read 512/512 bytes at offset 3221227008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221228032 ++read 512/512 bytes at offset 3221228032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221229056 ++read 512/512 bytes at offset 3221229056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221230080 ++read 512/512 bytes at offset 3221230080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221231104 ++read 512/512 bytes at offset 3221231104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221232128 ++read 512/512 bytes at offset 3221232128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221233152 ++read 512/512 bytes at offset 3221233152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221234176 ++read 512/512 bytes at offset 3221234176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221235200 ++read 512/512 bytes at offset 3221235200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221236224 ++read 512/512 bytes at offset 3221236224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221237248 ++read 512/512 bytes at offset 3221237248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221238272 ++read 512/512 bytes at offset 3221238272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221239296 ++read 512/512 bytes at offset 3221239296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221240320 ++read 512/512 bytes at offset 3221240320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221241344 ++read 512/512 bytes at offset 3221241344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221242368 ++read 512/512 bytes at offset 3221242368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221243392 ++read 512/512 bytes at offset 3221243392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221244416 ++read 512/512 bytes at offset 3221244416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221245440 ++read 512/512 bytes at offset 3221245440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221246464 ++read 512/512 bytes at offset 3221246464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221247488 ++read 512/512 bytes at offset 3221247488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221248512 ++read 512/512 bytes at offset 3221248512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221249536 ++read 512/512 bytes at offset 3221249536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221250560 ++read 512/512 bytes at offset 3221250560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221251584 ++read 512/512 bytes at offset 3221251584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221252608 ++read 512/512 bytes at offset 3221252608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221253632 ++read 512/512 bytes at offset 3221253632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221254656 ++read 512/512 bytes at offset 3221254656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221255680 ++read 512/512 bytes at offset 3221255680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221256704 ++read 512/512 bytes at offset 3221256704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221257728 ++read 512/512 bytes at offset 3221257728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3221258752 ++read 512/512 bytes at offset 3221258752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/032.out b/tests/qemu-iotests/032.out +index 7272ac2..ca20de6 100644 +--- a/tests/qemu-iotests/032.out ++++ b/tests/qemu-iotests/032.out +@@ -3,73 +3,73 @@ QA output created by 032 + === Prepare image === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393216 ++wrote 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1048576 ++wrote 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1179648 ++wrote 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1310720 ++wrote 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1441792 ++wrote 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1572864 ++wrote 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1703936 ++wrote 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835008 ++wrote 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966080 ++wrote 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097152 ++wrote 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2228224 ++wrote 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2359296 ++wrote 65536/65536 bytes at offset 2359296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2490368 ++wrote 65536/65536 bytes at offset 2490368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2621440 ++wrote 65536/65536 bytes at offset 2621440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2752512 ++wrote 65536/65536 bytes at offset 2752512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2883584 ++wrote 65536/65536 bytes at offset 2883584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3014656 ++wrote 65536/65536 bytes at offset 3014656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3145728 ++wrote 65536/65536 bytes at offset 3145728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3276800 ++wrote 65536/65536 bytes at offset 3276800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3407872 ++wrote 65536/65536 bytes at offset 3407872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3538944 ++wrote 65536/65536 bytes at offset 3538944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3670016 ++wrote 65536/65536 bytes at offset 3670016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3801088 ++wrote 65536/65536 bytes at offset 3801088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3932160 ++wrote 65536/65536 bytes at offset 3932160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4063232 ++wrote 65536/65536 bytes at offset 4063232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4194304 ++wrote 65536/65536 bytes at offset 4194304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> ++ + === AIO request during close === + + wrote 4194304/4194304 bytes at offset 0 +diff --git a/tests/qemu-iotests/035.out b/tests/qemu-iotests/035.out +index 0c2279f..cde21d8 100644 +--- a/tests/qemu-iotests/035.out ++++ b/tests/qemu-iotests/035.out +@@ -2,7 +2,7 @@ QA output created by 035 + + creating image + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 +-qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> wrote 512/512 bytes at offset XXX ++wrote 512/512 bytes at offset XXX + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 512/512 bytes at offset XXX + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +diff --git a/tests/qemu-iotests/037.out b/tests/qemu-iotests/037.out +index deb8a3b..4eb84ed 100644 +--- a/tests/qemu-iotests/037.out ++++ b/tests/qemu-iotests/037.out +@@ -2,519 +2,519 @@ QA output created by 037 + + == creating backing file for COW tests == + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +-qemu-io> wrote 512/512 bytes at offset 0 ++wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 512 ++wrote 512/512 bytes at offset 512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1024 ++wrote 512/512 bytes at offset 1024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 1536 ++wrote 512/512 bytes at offset 1536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2048 ++wrote 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 2560 ++wrote 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3072 ++wrote 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 3584 ++wrote 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4096 ++wrote 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 4608 ++wrote 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5120 ++wrote 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 5632 ++wrote 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6144 ++wrote 512/512 bytes at offset 6144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 6656 ++wrote 512/512 bytes at offset 6656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7168 ++wrote 512/512 bytes at offset 7168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 7680 ++wrote 512/512 bytes at offset 7680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8192 ++wrote 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 8704 ++wrote 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9216 ++wrote 512/512 bytes at offset 9216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 9728 ++wrote 512/512 bytes at offset 9728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10240 ++wrote 512/512 bytes at offset 10240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 10752 ++wrote 512/512 bytes at offset 10752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11264 ++wrote 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 11776 ++wrote 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12288 ++wrote 512/512 bytes at offset 12288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 12800 ++wrote 512/512 bytes at offset 12800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13312 ++wrote 512/512 bytes at offset 13312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 13824 ++wrote 512/512 bytes at offset 13824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14336 ++wrote 512/512 bytes at offset 14336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 14848 ++wrote 512/512 bytes at offset 14848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15360 ++wrote 512/512 bytes at offset 15360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 15872 ++wrote 512/512 bytes at offset 15872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16384 ++wrote 512/512 bytes at offset 16384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 16896 ++wrote 512/512 bytes at offset 16896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17408 ++wrote 512/512 bytes at offset 17408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 17920 ++wrote 512/512 bytes at offset 17920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18432 ++wrote 512/512 bytes at offset 18432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 18944 ++wrote 512/512 bytes at offset 18944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19456 ++wrote 512/512 bytes at offset 19456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 19968 ++wrote 512/512 bytes at offset 19968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20480 ++wrote 512/512 bytes at offset 20480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 20992 ++wrote 512/512 bytes at offset 20992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 21504 ++wrote 512/512 bytes at offset 21504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22016 ++wrote 512/512 bytes at offset 22016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 22528 ++wrote 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23040 ++wrote 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 23552 ++wrote 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24064 ++wrote 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 24576 ++wrote 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25088 ++wrote 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 25600 ++wrote 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26112 ++wrote 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 26624 ++wrote 512/512 bytes at offset 26624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27136 ++wrote 512/512 bytes at offset 27136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 27648 ++wrote 512/512 bytes at offset 27648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28160 ++wrote 512/512 bytes at offset 28160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 28672 ++wrote 512/512 bytes at offset 28672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29184 ++wrote 512/512 bytes at offset 29184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 29696 ++wrote 512/512 bytes at offset 29696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30208 ++wrote 512/512 bytes at offset 30208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 30720 ++wrote 512/512 bytes at offset 30720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31232 ++wrote 512/512 bytes at offset 31232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 31744 ++wrote 512/512 bytes at offset 31744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32256 ++wrote 512/512 bytes at offset 32256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 32768 ++wrote 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33280 ++wrote 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 33792 ++wrote 512/512 bytes at offset 33792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34304 ++wrote 512/512 bytes at offset 34304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 34816 ++wrote 512/512 bytes at offset 34816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35328 ++wrote 512/512 bytes at offset 35328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 35840 ++wrote 512/512 bytes at offset 35840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36352 ++wrote 512/512 bytes at offset 36352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 36864 ++wrote 512/512 bytes at offset 36864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37376 ++wrote 512/512 bytes at offset 37376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 37888 ++wrote 512/512 bytes at offset 37888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38400 ++wrote 512/512 bytes at offset 38400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 38912 ++wrote 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39424 ++wrote 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 39936 ++wrote 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40448 ++wrote 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 40960 ++wrote 512/512 bytes at offset 40960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41472 ++wrote 512/512 bytes at offset 41472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 41984 ++wrote 512/512 bytes at offset 41984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 42496 ++wrote 512/512 bytes at offset 42496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43008 ++wrote 512/512 bytes at offset 43008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 43520 ++wrote 512/512 bytes at offset 43520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44032 ++wrote 512/512 bytes at offset 44032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 44544 ++wrote 512/512 bytes at offset 44544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45056 ++wrote 512/512 bytes at offset 45056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 45568 ++wrote 512/512 bytes at offset 45568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46080 ++wrote 512/512 bytes at offset 46080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 46592 ++wrote 512/512 bytes at offset 46592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47104 ++wrote 512/512 bytes at offset 47104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 47616 ++wrote 512/512 bytes at offset 47616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48128 ++wrote 512/512 bytes at offset 48128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 48640 ++wrote 512/512 bytes at offset 48640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49152 ++wrote 512/512 bytes at offset 49152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 49664 ++wrote 512/512 bytes at offset 49664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50176 ++wrote 512/512 bytes at offset 50176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 50688 ++wrote 512/512 bytes at offset 50688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51200 ++wrote 512/512 bytes at offset 51200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 51712 ++wrote 512/512 bytes at offset 51712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52224 ++wrote 512/512 bytes at offset 52224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 52736 ++wrote 512/512 bytes at offset 52736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53248 ++wrote 512/512 bytes at offset 53248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 53760 ++wrote 512/512 bytes at offset 53760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54272 ++wrote 512/512 bytes at offset 54272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 54784 ++wrote 512/512 bytes at offset 54784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55296 ++wrote 512/512 bytes at offset 55296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 55808 ++wrote 512/512 bytes at offset 55808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56320 ++wrote 512/512 bytes at offset 56320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 56832 ++wrote 512/512 bytes at offset 56832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57344 ++wrote 512/512 bytes at offset 57344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 57856 ++wrote 512/512 bytes at offset 57856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58368 ++wrote 512/512 bytes at offset 58368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 58880 ++wrote 512/512 bytes at offset 58880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59392 ++wrote 512/512 bytes at offset 59392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 59904 ++wrote 512/512 bytes at offset 59904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60416 ++wrote 512/512 bytes at offset 60416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 60928 ++wrote 512/512 bytes at offset 60928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61440 ++wrote 512/512 bytes at offset 61440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 61952 ++wrote 512/512 bytes at offset 61952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62464 ++wrote 512/512 bytes at offset 62464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 62976 ++wrote 512/512 bytes at offset 62976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 63488 ++wrote 512/512 bytes at offset 63488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64000 ++wrote 512/512 bytes at offset 64000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 64512 ++wrote 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65024 ++wrote 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 65536 ++wrote 512/512 bytes at offset 65536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 66048 ++wrote 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 66560 ++wrote 512/512 bytes at offset 66560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 67072 ++wrote 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 67584 ++wrote 512/512 bytes at offset 67584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 68096 ++wrote 512/512 bytes at offset 68096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 68608 ++wrote 512/512 bytes at offset 68608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 69120 ++wrote 512/512 bytes at offset 69120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 69632 ++wrote 512/512 bytes at offset 69632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 70144 ++wrote 512/512 bytes at offset 70144 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 70656 ++wrote 512/512 bytes at offset 70656 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 71168 ++wrote 512/512 bytes at offset 71168 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 71680 ++wrote 512/512 bytes at offset 71680 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 72192 ++wrote 512/512 bytes at offset 72192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 72704 ++wrote 512/512 bytes at offset 72704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 73216 ++wrote 512/512 bytes at offset 73216 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 73728 ++wrote 512/512 bytes at offset 73728 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 74240 ++wrote 512/512 bytes at offset 74240 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 74752 ++wrote 512/512 bytes at offset 74752 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 75264 ++wrote 512/512 bytes at offset 75264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 75776 ++wrote 512/512 bytes at offset 75776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 76288 ++wrote 512/512 bytes at offset 76288 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 76800 ++wrote 512/512 bytes at offset 76800 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 77312 ++wrote 512/512 bytes at offset 77312 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 77824 ++wrote 512/512 bytes at offset 77824 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 78336 ++wrote 512/512 bytes at offset 78336 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 78848 ++wrote 512/512 bytes at offset 78848 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 79360 ++wrote 512/512 bytes at offset 79360 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 79872 ++wrote 512/512 bytes at offset 79872 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 80384 ++wrote 512/512 bytes at offset 80384 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 80896 ++wrote 512/512 bytes at offset 80896 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 81408 ++wrote 512/512 bytes at offset 81408 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 81920 ++wrote 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 82432 ++wrote 512/512 bytes at offset 82432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 82944 ++wrote 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 83456 ++wrote 512/512 bytes at offset 83456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 83968 ++wrote 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 84480 ++wrote 512/512 bytes at offset 84480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 84992 ++wrote 512/512 bytes at offset 84992 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 85504 ++wrote 512/512 bytes at offset 85504 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 86016 ++wrote 512/512 bytes at offset 86016 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 86528 ++wrote 512/512 bytes at offset 86528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 87040 ++wrote 512/512 bytes at offset 87040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 87552 ++wrote 512/512 bytes at offset 87552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 88064 ++wrote 512/512 bytes at offset 88064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 88576 ++wrote 512/512 bytes at offset 88576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 89088 ++wrote 512/512 bytes at offset 89088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 89600 ++wrote 512/512 bytes at offset 89600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 90112 ++wrote 512/512 bytes at offset 90112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 90624 ++wrote 512/512 bytes at offset 90624 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 91136 ++wrote 512/512 bytes at offset 91136 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 91648 ++wrote 512/512 bytes at offset 91648 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 92160 ++wrote 512/512 bytes at offset 92160 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 92672 ++wrote 512/512 bytes at offset 92672 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 93184 ++wrote 512/512 bytes at offset 93184 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 93696 ++wrote 512/512 bytes at offset 93696 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 94208 ++wrote 512/512 bytes at offset 94208 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 94720 ++wrote 512/512 bytes at offset 94720 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 95232 ++wrote 512/512 bytes at offset 95232 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 95744 ++wrote 512/512 bytes at offset 95744 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 96256 ++wrote 512/512 bytes at offset 96256 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 96768 ++wrote 512/512 bytes at offset 96768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 97280 ++wrote 512/512 bytes at offset 97280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 97792 ++wrote 512/512 bytes at offset 97792 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 98304 ++wrote 512/512 bytes at offset 98304 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 98816 ++wrote 512/512 bytes at offset 98816 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 99328 ++wrote 512/512 bytes at offset 99328 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 99840 ++wrote 512/512 bytes at offset 99840 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 100352 ++wrote 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 100864 ++wrote 512/512 bytes at offset 100864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 101376 ++wrote 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 101888 ++wrote 512/512 bytes at offset 101888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 102400 ++wrote 512/512 bytes at offset 102400 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 102912 ++wrote 512/512 bytes at offset 102912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 103424 ++wrote 512/512 bytes at offset 103424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 103936 ++wrote 512/512 bytes at offset 103936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 104448 ++wrote 512/512 bytes at offset 104448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 104960 ++wrote 512/512 bytes at offset 104960 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 105472 ++wrote 512/512 bytes at offset 105472 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 105984 ++wrote 512/512 bytes at offset 105984 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 106496 ++wrote 512/512 bytes at offset 106496 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 107008 ++wrote 512/512 bytes at offset 107008 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 107520 ++wrote 512/512 bytes at offset 107520 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 108032 ++wrote 512/512 bytes at offset 108032 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 108544 ++wrote 512/512 bytes at offset 108544 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 109056 ++wrote 512/512 bytes at offset 109056 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 109568 ++wrote 512/512 bytes at offset 109568 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 110080 ++wrote 512/512 bytes at offset 110080 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 110592 ++wrote 512/512 bytes at offset 110592 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 111104 ++wrote 512/512 bytes at offset 111104 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 111616 ++wrote 512/512 bytes at offset 111616 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 112128 ++wrote 512/512 bytes at offset 112128 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 112640 ++wrote 512/512 bytes at offset 112640 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 113152 ++wrote 512/512 bytes at offset 113152 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 113664 ++wrote 512/512 bytes at offset 113664 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 114176 ++wrote 512/512 bytes at offset 114176 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 114688 ++wrote 512/512 bytes at offset 114688 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 115200 ++wrote 512/512 bytes at offset 115200 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 115712 ++wrote 512/512 bytes at offset 115712 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 116224 ++wrote 512/512 bytes at offset 116224 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 116736 ++wrote 512/512 bytes at offset 116736 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 117248 ++wrote 512/512 bytes at offset 117248 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 117760 ++wrote 512/512 bytes at offset 117760 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 118272 ++wrote 512/512 bytes at offset 118272 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 118784 ++wrote 512/512 bytes at offset 118784 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 119296 ++wrote 512/512 bytes at offset 119296 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 119808 ++wrote 512/512 bytes at offset 119808 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 120320 ++wrote 512/512 bytes at offset 120320 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 120832 ++wrote 512/512 bytes at offset 120832 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 121344 ++wrote 512/512 bytes at offset 121344 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 121856 ++wrote 512/512 bytes at offset 121856 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 122368 ++wrote 512/512 bytes at offset 122368 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 122880 ++wrote 512/512 bytes at offset 122880 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 123392 ++wrote 512/512 bytes at offset 123392 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 123904 ++wrote 512/512 bytes at offset 123904 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 124416 ++wrote 512/512 bytes at offset 124416 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 124928 ++wrote 512/512 bytes at offset 124928 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 125440 ++wrote 512/512 bytes at offset 125440 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 125952 ++wrote 512/512 bytes at offset 125952 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 126464 ++wrote 512/512 bytes at offset 126464 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 126976 ++wrote 512/512 bytes at offset 126976 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 127488 ++wrote 512/512 bytes at offset 127488 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 128000 ++wrote 512/512 bytes at offset 128000 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 128512 ++wrote 512/512 bytes at offset 128512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 129024 ++wrote 512/512 bytes at offset 129024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 129536 ++wrote 512/512 bytes at offset 129536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 130048 ++wrote 512/512 bytes at offset 130048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 512/512 bytes at offset 130560 ++wrote 512/512 bytes at offset 130560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + + == COW in a single cluster == + wrote 2048/2048 bytes at offset 0 +@@ -525,35 +525,35 @@ wrote 2048/2048 bytes at offset 9216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + read 2048/2048 bytes at offset 0 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2048 ++read 512/512 bytes at offset 2048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 2560 ++read 512/512 bytes at offset 2560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3072 ++read 512/512 bytes at offset 3072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 3584 ++read 512/512 bytes at offset 3584 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4096 ++read 512/512 bytes at offset 4096 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 4608 ++read 512/512 bytes at offset 4608 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5120 ++read 512/512 bytes at offset 5120 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 5632 ++read 512/512 bytes at offset 5632 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 6144 ++read 2048/2048 bytes at offset 6144 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8192 ++read 512/512 bytes at offset 8192 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 8704 ++read 512/512 bytes at offset 8704 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 2048/2048 bytes at offset 9216 ++read 2048/2048 bytes at offset 9216 + 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11264 ++read 512/512 bytes at offset 11264 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 11776 ++read 512/512 bytes at offset 11776 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> ++ + == COW in two-cluster allocations == + wrote 6144/6144 bytes at offset 16384 + 6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +@@ -563,39 +563,39 @@ wrote 5120/5120 bytes at offset 33792 + 5 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + read 6144/6144 bytes at offset 16384 + 6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 22528 ++read 512/512 bytes at offset 22528 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23040 ++read 512/512 bytes at offset 23040 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 23552 ++read 512/512 bytes at offset 23552 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24064 ++read 512/512 bytes at offset 24064 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 24576 ++read 512/512 bytes at offset 24576 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25088 ++read 512/512 bytes at offset 25088 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 25600 ++read 512/512 bytes at offset 25600 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 26112 ++read 512/512 bytes at offset 26112 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 6144/6144 bytes at offset 26624 ++read 6144/6144 bytes at offset 26624 + 6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 32768 ++read 512/512 bytes at offset 32768 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 33280 ++read 512/512 bytes at offset 33280 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 5120/5120 bytes at offset 33792 ++read 5120/5120 bytes at offset 33792 + 5 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 38912 ++read 512/512 bytes at offset 38912 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39424 ++read 512/512 bytes at offset 39424 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 39936 ++read 512/512 bytes at offset 39936 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 40448 ++read 512/512 bytes at offset 40448 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> ++ + == COW in multi-cluster allocations == + wrote 15360/15360 bytes at offset 49152 + 15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +@@ -605,41 +605,41 @@ wrote 15360/15360 bytes at offset 84992 + 15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + read 15360/15360 bytes at offset 49152 + 15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 64512 ++read 512/512 bytes at offset 64512 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65024 ++read 512/512 bytes at offset 65024 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 65536 ++read 512/512 bytes at offset 65536 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66048 ++read 512/512 bytes at offset 66048 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 66560 ++read 512/512 bytes at offset 66560 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 67072 ++read 512/512 bytes at offset 67072 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 14336/14336 bytes at offset 67584 ++read 14336/14336 bytes at offset 67584 + 14 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 81920 ++read 512/512 bytes at offset 81920 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82432 ++read 512/512 bytes at offset 82432 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 82944 ++read 512/512 bytes at offset 82944 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83456 ++read 512/512 bytes at offset 83456 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 83968 ++read 512/512 bytes at offset 83968 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 84480 ++read 512/512 bytes at offset 84480 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 15360/15360 bytes at offset 84992 ++read 15360/15360 bytes at offset 84992 + 15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100352 ++read 512/512 bytes at offset 100352 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 100864 ++read 512/512 bytes at offset 100864 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101376 ++read 512/512 bytes at offset 101376 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 512/512 bytes at offset 101888 ++read 512/512 bytes at offset 101888 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/038.out b/tests/qemu-iotests/038.out +index 96c2f84..a71c3fa 100644 +--- a/tests/qemu-iotests/038.out ++++ b/tests/qemu-iotests/038.out +@@ -2,519 +2,519 @@ QA output created by 038 + + == creating backing file for COW tests == + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 196608 ++wrote 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 327680 ++wrote 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393216 ++wrote 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 458752 ++wrote 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 589824 ++wrote 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 720896 ++wrote 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 851968 ++wrote 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 983040 ++wrote 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1048576 ++wrote 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114112 ++wrote 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1179648 ++wrote 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245184 ++wrote 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1310720 ++wrote 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376256 ++wrote 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1441792 ++wrote 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507328 ++wrote 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1572864 ++wrote 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1638400 ++wrote 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1703936 ++wrote 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769472 ++wrote 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835008 ++wrote 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1900544 ++wrote 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966080 ++wrote 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2031616 ++wrote 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2097152 ++wrote 65536/65536 bytes at offset 2097152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2162688 ++wrote 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2228224 ++wrote 65536/65536 bytes at offset 2228224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2293760 ++wrote 65536/65536 bytes at offset 2293760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2359296 ++wrote 65536/65536 bytes at offset 2359296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2424832 ++wrote 65536/65536 bytes at offset 2424832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2490368 ++wrote 65536/65536 bytes at offset 2490368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2555904 ++wrote 65536/65536 bytes at offset 2555904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2621440 ++wrote 65536/65536 bytes at offset 2621440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2686976 ++wrote 65536/65536 bytes at offset 2686976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2752512 ++wrote 65536/65536 bytes at offset 2752512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2818048 ++wrote 65536/65536 bytes at offset 2818048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2883584 ++wrote 65536/65536 bytes at offset 2883584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2949120 ++wrote 65536/65536 bytes at offset 2949120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3014656 ++wrote 65536/65536 bytes at offset 3014656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3080192 ++wrote 65536/65536 bytes at offset 3080192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3145728 ++wrote 65536/65536 bytes at offset 3145728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3211264 ++wrote 65536/65536 bytes at offset 3211264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3276800 ++wrote 65536/65536 bytes at offset 3276800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3342336 ++wrote 65536/65536 bytes at offset 3342336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3407872 ++wrote 65536/65536 bytes at offset 3407872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3473408 ++wrote 65536/65536 bytes at offset 3473408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3538944 ++wrote 65536/65536 bytes at offset 3538944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3604480 ++wrote 65536/65536 bytes at offset 3604480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3670016 ++wrote 65536/65536 bytes at offset 3670016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3735552 ++wrote 65536/65536 bytes at offset 3735552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3801088 ++wrote 65536/65536 bytes at offset 3801088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3866624 ++wrote 65536/65536 bytes at offset 3866624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3932160 ++wrote 65536/65536 bytes at offset 3932160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 3997696 ++wrote 65536/65536 bytes at offset 3997696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4063232 ++wrote 65536/65536 bytes at offset 4063232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4128768 ++wrote 65536/65536 bytes at offset 4128768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4194304 ++wrote 65536/65536 bytes at offset 4194304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4259840 ++wrote 65536/65536 bytes at offset 4259840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4325376 ++wrote 65536/65536 bytes at offset 4325376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4390912 ++wrote 65536/65536 bytes at offset 4390912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4456448 ++wrote 65536/65536 bytes at offset 4456448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4521984 ++wrote 65536/65536 bytes at offset 4521984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4587520 ++wrote 65536/65536 bytes at offset 4587520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4653056 ++wrote 65536/65536 bytes at offset 4653056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4718592 ++wrote 65536/65536 bytes at offset 4718592 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4784128 ++wrote 65536/65536 bytes at offset 4784128 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4849664 ++wrote 65536/65536 bytes at offset 4849664 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4915200 ++wrote 65536/65536 bytes at offset 4915200 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 4980736 ++wrote 65536/65536 bytes at offset 4980736 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5046272 ++wrote 65536/65536 bytes at offset 5046272 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5111808 ++wrote 65536/65536 bytes at offset 5111808 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5177344 ++wrote 65536/65536 bytes at offset 5177344 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5242880 ++wrote 65536/65536 bytes at offset 5242880 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5308416 ++wrote 65536/65536 bytes at offset 5308416 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5373952 ++wrote 65536/65536 bytes at offset 5373952 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5439488 ++wrote 65536/65536 bytes at offset 5439488 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5505024 ++wrote 65536/65536 bytes at offset 5505024 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5570560 ++wrote 65536/65536 bytes at offset 5570560 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5636096 ++wrote 65536/65536 bytes at offset 5636096 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5701632 ++wrote 65536/65536 bytes at offset 5701632 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5767168 ++wrote 65536/65536 bytes at offset 5767168 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5832704 ++wrote 65536/65536 bytes at offset 5832704 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5898240 ++wrote 65536/65536 bytes at offset 5898240 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 5963776 ++wrote 65536/65536 bytes at offset 5963776 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6029312 ++wrote 65536/65536 bytes at offset 6029312 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6094848 ++wrote 65536/65536 bytes at offset 6094848 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6160384 ++wrote 65536/65536 bytes at offset 6160384 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6225920 ++wrote 65536/65536 bytes at offset 6225920 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6291456 ++wrote 65536/65536 bytes at offset 6291456 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6356992 ++wrote 65536/65536 bytes at offset 6356992 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6422528 ++wrote 65536/65536 bytes at offset 6422528 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6488064 ++wrote 65536/65536 bytes at offset 6488064 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6553600 ++wrote 65536/65536 bytes at offset 6553600 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6619136 ++wrote 65536/65536 bytes at offset 6619136 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6684672 ++wrote 65536/65536 bytes at offset 6684672 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6750208 ++wrote 65536/65536 bytes at offset 6750208 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6815744 ++wrote 65536/65536 bytes at offset 6815744 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6881280 ++wrote 65536/65536 bytes at offset 6881280 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 6946816 ++wrote 65536/65536 bytes at offset 6946816 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7012352 ++wrote 65536/65536 bytes at offset 7012352 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7077888 ++wrote 65536/65536 bytes at offset 7077888 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7143424 ++wrote 65536/65536 bytes at offset 7143424 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7208960 ++wrote 65536/65536 bytes at offset 7208960 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7274496 ++wrote 65536/65536 bytes at offset 7274496 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7340032 ++wrote 65536/65536 bytes at offset 7340032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7405568 ++wrote 65536/65536 bytes at offset 7405568 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7471104 ++wrote 65536/65536 bytes at offset 7471104 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7536640 ++wrote 65536/65536 bytes at offset 7536640 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7602176 ++wrote 65536/65536 bytes at offset 7602176 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7667712 ++wrote 65536/65536 bytes at offset 7667712 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7733248 ++wrote 65536/65536 bytes at offset 7733248 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7798784 ++wrote 65536/65536 bytes at offset 7798784 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7864320 ++wrote 65536/65536 bytes at offset 7864320 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7929856 ++wrote 65536/65536 bytes at offset 7929856 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 7995392 ++wrote 65536/65536 bytes at offset 7995392 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8060928 ++wrote 65536/65536 bytes at offset 8060928 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8126464 ++wrote 65536/65536 bytes at offset 8126464 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8192000 ++wrote 65536/65536 bytes at offset 8192000 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8257536 ++wrote 65536/65536 bytes at offset 8257536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8323072 ++wrote 65536/65536 bytes at offset 8323072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8388608 ++wrote 65536/65536 bytes at offset 8388608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8454144 ++wrote 65536/65536 bytes at offset 8454144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8519680 ++wrote 65536/65536 bytes at offset 8519680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8585216 ++wrote 65536/65536 bytes at offset 8585216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8650752 ++wrote 65536/65536 bytes at offset 8650752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8716288 ++wrote 65536/65536 bytes at offset 8716288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8781824 ++wrote 65536/65536 bytes at offset 8781824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8847360 ++wrote 65536/65536 bytes at offset 8847360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8912896 ++wrote 65536/65536 bytes at offset 8912896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 8978432 ++wrote 65536/65536 bytes at offset 8978432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9043968 ++wrote 65536/65536 bytes at offset 9043968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9109504 ++wrote 65536/65536 bytes at offset 9109504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9175040 ++wrote 65536/65536 bytes at offset 9175040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9240576 ++wrote 65536/65536 bytes at offset 9240576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9306112 ++wrote 65536/65536 bytes at offset 9306112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9371648 ++wrote 65536/65536 bytes at offset 9371648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9437184 ++wrote 65536/65536 bytes at offset 9437184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9502720 ++wrote 65536/65536 bytes at offset 9502720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9568256 ++wrote 65536/65536 bytes at offset 9568256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9633792 ++wrote 65536/65536 bytes at offset 9633792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9699328 ++wrote 65536/65536 bytes at offset 9699328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9764864 ++wrote 65536/65536 bytes at offset 9764864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9830400 ++wrote 65536/65536 bytes at offset 9830400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9895936 ++wrote 65536/65536 bytes at offset 9895936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 9961472 ++wrote 65536/65536 bytes at offset 9961472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10027008 ++wrote 65536/65536 bytes at offset 10027008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10092544 ++wrote 65536/65536 bytes at offset 10092544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10158080 ++wrote 65536/65536 bytes at offset 10158080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10223616 ++wrote 65536/65536 bytes at offset 10223616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10289152 ++wrote 65536/65536 bytes at offset 10289152 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10354688 ++wrote 65536/65536 bytes at offset 10354688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10420224 ++wrote 65536/65536 bytes at offset 10420224 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10485760 ++wrote 65536/65536 bytes at offset 10485760 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10551296 ++wrote 65536/65536 bytes at offset 10551296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10616832 ++wrote 65536/65536 bytes at offset 10616832 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10682368 ++wrote 65536/65536 bytes at offset 10682368 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10747904 ++wrote 65536/65536 bytes at offset 10747904 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10813440 ++wrote 65536/65536 bytes at offset 10813440 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10878976 ++wrote 65536/65536 bytes at offset 10878976 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 10944512 ++wrote 65536/65536 bytes at offset 10944512 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11010048 ++wrote 65536/65536 bytes at offset 11010048 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11075584 ++wrote 65536/65536 bytes at offset 11075584 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11141120 ++wrote 65536/65536 bytes at offset 11141120 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11206656 ++wrote 65536/65536 bytes at offset 11206656 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11272192 ++wrote 65536/65536 bytes at offset 11272192 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11337728 ++wrote 65536/65536 bytes at offset 11337728 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11403264 ++wrote 65536/65536 bytes at offset 11403264 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11468800 ++wrote 65536/65536 bytes at offset 11468800 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11534336 ++wrote 65536/65536 bytes at offset 11534336 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11599872 ++wrote 65536/65536 bytes at offset 11599872 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11665408 ++wrote 65536/65536 bytes at offset 11665408 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11730944 ++wrote 65536/65536 bytes at offset 11730944 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11796480 ++wrote 65536/65536 bytes at offset 11796480 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11862016 ++wrote 65536/65536 bytes at offset 11862016 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11927552 ++wrote 65536/65536 bytes at offset 11927552 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 11993088 ++wrote 65536/65536 bytes at offset 11993088 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12058624 ++wrote 65536/65536 bytes at offset 12058624 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12124160 ++wrote 65536/65536 bytes at offset 12124160 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12189696 ++wrote 65536/65536 bytes at offset 12189696 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12255232 ++wrote 65536/65536 bytes at offset 12255232 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12320768 ++wrote 65536/65536 bytes at offset 12320768 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12386304 ++wrote 65536/65536 bytes at offset 12386304 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12451840 ++wrote 65536/65536 bytes at offset 12451840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12517376 ++wrote 65536/65536 bytes at offset 12517376 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12582912 ++wrote 65536/65536 bytes at offset 12582912 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12648448 ++wrote 65536/65536 bytes at offset 12648448 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12713984 ++wrote 65536/65536 bytes at offset 12713984 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12779520 ++wrote 65536/65536 bytes at offset 12779520 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12845056 ++wrote 65536/65536 bytes at offset 12845056 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12910592 ++wrote 65536/65536 bytes at offset 12910592 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 12976128 ++wrote 65536/65536 bytes at offset 12976128 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13041664 ++wrote 65536/65536 bytes at offset 13041664 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13107200 ++wrote 65536/65536 bytes at offset 13107200 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13172736 ++wrote 65536/65536 bytes at offset 13172736 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13238272 ++wrote 65536/65536 bytes at offset 13238272 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13303808 ++wrote 65536/65536 bytes at offset 13303808 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13369344 ++wrote 65536/65536 bytes at offset 13369344 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13434880 ++wrote 65536/65536 bytes at offset 13434880 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13500416 ++wrote 65536/65536 bytes at offset 13500416 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13565952 ++wrote 65536/65536 bytes at offset 13565952 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13631488 ++wrote 65536/65536 bytes at offset 13631488 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13697024 ++wrote 65536/65536 bytes at offset 13697024 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13762560 ++wrote 65536/65536 bytes at offset 13762560 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13828096 ++wrote 65536/65536 bytes at offset 13828096 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13893632 ++wrote 65536/65536 bytes at offset 13893632 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 13959168 ++wrote 65536/65536 bytes at offset 13959168 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14024704 ++wrote 65536/65536 bytes at offset 14024704 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14090240 ++wrote 65536/65536 bytes at offset 14090240 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14155776 ++wrote 65536/65536 bytes at offset 14155776 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14221312 ++wrote 65536/65536 bytes at offset 14221312 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14286848 ++wrote 65536/65536 bytes at offset 14286848 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14352384 ++wrote 65536/65536 bytes at offset 14352384 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14417920 ++wrote 65536/65536 bytes at offset 14417920 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14483456 ++wrote 65536/65536 bytes at offset 14483456 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14548992 ++wrote 65536/65536 bytes at offset 14548992 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14614528 ++wrote 65536/65536 bytes at offset 14614528 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14680064 ++wrote 65536/65536 bytes at offset 14680064 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14745600 ++wrote 65536/65536 bytes at offset 14745600 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14811136 ++wrote 65536/65536 bytes at offset 14811136 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14876672 ++wrote 65536/65536 bytes at offset 14876672 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 14942208 ++wrote 65536/65536 bytes at offset 14942208 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15007744 ++wrote 65536/65536 bytes at offset 15007744 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15073280 ++wrote 65536/65536 bytes at offset 15073280 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15138816 ++wrote 65536/65536 bytes at offset 15138816 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15204352 ++wrote 65536/65536 bytes at offset 15204352 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15269888 ++wrote 65536/65536 bytes at offset 15269888 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15335424 ++wrote 65536/65536 bytes at offset 15335424 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15400960 ++wrote 65536/65536 bytes at offset 15400960 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15466496 ++wrote 65536/65536 bytes at offset 15466496 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15532032 ++wrote 65536/65536 bytes at offset 15532032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15597568 ++wrote 65536/65536 bytes at offset 15597568 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15663104 ++wrote 65536/65536 bytes at offset 15663104 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15728640 ++wrote 65536/65536 bytes at offset 15728640 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15794176 ++wrote 65536/65536 bytes at offset 15794176 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15859712 ++wrote 65536/65536 bytes at offset 15859712 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15925248 ++wrote 65536/65536 bytes at offset 15925248 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 15990784 ++wrote 65536/65536 bytes at offset 15990784 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16056320 ++wrote 65536/65536 bytes at offset 16056320 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16121856 ++wrote 65536/65536 bytes at offset 16121856 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16187392 ++wrote 65536/65536 bytes at offset 16187392 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16252928 ++wrote 65536/65536 bytes at offset 16252928 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16318464 ++wrote 65536/65536 bytes at offset 16318464 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16384000 ++wrote 65536/65536 bytes at offset 16384000 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16449536 ++wrote 65536/65536 bytes at offset 16449536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16515072 ++wrote 65536/65536 bytes at offset 16515072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16580608 ++wrote 65536/65536 bytes at offset 16580608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16646144 ++wrote 65536/65536 bytes at offset 16646144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 16711680 ++wrote 65536/65536 bytes at offset 16711680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + + == Some concurrent requests touching the same cluster == + wrote 65536/65536 bytes at offset XXX +@@ -707,203 +707,203 @@ wrote 81920/81920 bytes at offset XXX + 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + + == Verify image content == +-qemu-io> read 4096/4096 bytes at offset 2064384 ++read 4096/4096 bytes at offset 2064384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 81920/81920 bytes at offset 2068480 ++read 81920/81920 bytes at offset 2068480 + 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 12288/12288 bytes at offset 2150400 ++read 12288/12288 bytes at offset 2150400 + 12 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 2162688 ++read 65536/65536 bytes at offset 2162688 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 4161536 ++read 16384/16384 bytes at offset 4161536 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 81920/81920 bytes at offset 4177920 ++read 81920/81920 bytes at offset 4177920 + 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 4259840 ++read 65536/65536 bytes at offset 4259840 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 0 ++read 98304/98304 bytes at offset 0 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 131072 ++read 98304/98304 bytes at offset 131072 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 262144 ++read 98304/98304 bytes at offset 262144 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 393216 ++read 98304/98304 bytes at offset 393216 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 524288 ++read 98304/98304 bytes at offset 524288 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 655360 ++read 98304/98304 bytes at offset 655360 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 786432 ++read 98304/98304 bytes at offset 786432 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 917504 ++read 98304/98304 bytes at offset 917504 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1048576 ++read 98304/98304 bytes at offset 1048576 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1179648 ++read 98304/98304 bytes at offset 1179648 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1310720 ++read 98304/98304 bytes at offset 1310720 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1441792 ++read 98304/98304 bytes at offset 1441792 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1572864 ++read 98304/98304 bytes at offset 1572864 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1703936 ++read 98304/98304 bytes at offset 1703936 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1835008 ++read 98304/98304 bytes at offset 1835008 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 1966080 ++read 98304/98304 bytes at offset 1966080 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 2228224 ++read 98304/98304 bytes at offset 2228224 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 2359296 ++read 98304/98304 bytes at offset 2359296 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 2490368 ++read 98304/98304 bytes at offset 2490368 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 2621440 ++read 98304/98304 bytes at offset 2621440 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 2752512 ++read 98304/98304 bytes at offset 2752512 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 2883584 ++read 98304/98304 bytes at offset 2883584 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3014656 ++read 98304/98304 bytes at offset 3014656 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3145728 ++read 98304/98304 bytes at offset 3145728 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3276800 ++read 98304/98304 bytes at offset 3276800 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3407872 ++read 98304/98304 bytes at offset 3407872 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3538944 ++read 98304/98304 bytes at offset 3538944 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3670016 ++read 98304/98304 bytes at offset 3670016 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3801088 ++read 98304/98304 bytes at offset 3801088 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 3932160 ++read 98304/98304 bytes at offset 3932160 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4063232 ++read 98304/98304 bytes at offset 4063232 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4325376 ++read 98304/98304 bytes at offset 4325376 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4456448 ++read 98304/98304 bytes at offset 4456448 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4587520 ++read 98304/98304 bytes at offset 4587520 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4718592 ++read 98304/98304 bytes at offset 4718592 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4849664 ++read 98304/98304 bytes at offset 4849664 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 4980736 ++read 98304/98304 bytes at offset 4980736 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5111808 ++read 98304/98304 bytes at offset 5111808 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5242880 ++read 98304/98304 bytes at offset 5242880 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5373952 ++read 98304/98304 bytes at offset 5373952 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5505024 ++read 98304/98304 bytes at offset 5505024 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5636096 ++read 98304/98304 bytes at offset 5636096 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5767168 ++read 98304/98304 bytes at offset 5767168 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 5898240 ++read 98304/98304 bytes at offset 5898240 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 6029312 ++read 98304/98304 bytes at offset 6029312 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 6160384 ++read 98304/98304 bytes at offset 6160384 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 98304 ++read 32768/32768 bytes at offset 98304 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 229376 ++read 32768/32768 bytes at offset 229376 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 360448 ++read 32768/32768 bytes at offset 360448 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 491520 ++read 32768/32768 bytes at offset 491520 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 622592 ++read 32768/32768 bytes at offset 622592 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 753664 ++read 32768/32768 bytes at offset 753664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 884736 ++read 32768/32768 bytes at offset 884736 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1015808 ++read 32768/32768 bytes at offset 1015808 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1146880 ++read 32768/32768 bytes at offset 1146880 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1277952 ++read 32768/32768 bytes at offset 1277952 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1409024 ++read 32768/32768 bytes at offset 1409024 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1540096 ++read 32768/32768 bytes at offset 1540096 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1671168 ++read 32768/32768 bytes at offset 1671168 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1802240 ++read 32768/32768 bytes at offset 1802240 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1933312 ++read 32768/32768 bytes at offset 1933312 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2195456 ++read 32768/32768 bytes at offset 2195456 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2326528 ++read 32768/32768 bytes at offset 2326528 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2457600 ++read 32768/32768 bytes at offset 2457600 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2588672 ++read 32768/32768 bytes at offset 2588672 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2719744 ++read 32768/32768 bytes at offset 2719744 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2850816 ++read 32768/32768 bytes at offset 2850816 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 2981888 ++read 32768/32768 bytes at offset 2981888 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3112960 ++read 32768/32768 bytes at offset 3112960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3244032 ++read 32768/32768 bytes at offset 3244032 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3375104 ++read 32768/32768 bytes at offset 3375104 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3506176 ++read 32768/32768 bytes at offset 3506176 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3637248 ++read 32768/32768 bytes at offset 3637248 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3768320 ++read 32768/32768 bytes at offset 3768320 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 3899392 ++read 32768/32768 bytes at offset 3899392 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4030464 ++read 32768/32768 bytes at offset 4030464 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4292608 ++read 32768/32768 bytes at offset 4292608 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4423680 ++read 32768/32768 bytes at offset 4423680 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4554752 ++read 32768/32768 bytes at offset 4554752 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4685824 ++read 32768/32768 bytes at offset 4685824 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4816896 ++read 32768/32768 bytes at offset 4816896 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 4947968 ++read 32768/32768 bytes at offset 4947968 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5079040 ++read 32768/32768 bytes at offset 5079040 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5210112 ++read 32768/32768 bytes at offset 5210112 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5341184 ++read 32768/32768 bytes at offset 5341184 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5472256 ++read 32768/32768 bytes at offset 5472256 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5603328 ++read 32768/32768 bytes at offset 5603328 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5734400 ++read 32768/32768 bytes at offset 5734400 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5865472 ++read 32768/32768 bytes at offset 5865472 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 5996544 ++read 32768/32768 bytes at offset 5996544 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6127616 ++read 32768/32768 bytes at offset 6127616 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 6258688 ++read 32768/32768 bytes at offset 6258688 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/046.out b/tests/qemu-iotests/046.out +index 4b50a17..65d584b 100644 +--- a/tests/qemu-iotests/046.out ++++ b/tests/qemu-iotests/046.out +@@ -2,238 +2,238 @@ QA output created by 046 + + == creating backing file for COW tests == + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +-qemu-io> wrote 65536/65536 bytes at offset 0 ++wrote 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 65536 ++wrote 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 131072 ++wrote 65536/65536 bytes at offset 131072 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 196608 ++wrote 65536/65536 bytes at offset 196608 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 262144 ++wrote 65536/65536 bytes at offset 262144 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 327680 ++wrote 65536/65536 bytes at offset 327680 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 393216 ++wrote 65536/65536 bytes at offset 393216 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 458752 ++wrote 65536/65536 bytes at offset 458752 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 524288 ++wrote 65536/65536 bytes at offset 524288 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 589824 ++wrote 65536/65536 bytes at offset 589824 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 655360 ++wrote 65536/65536 bytes at offset 655360 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 720896 ++wrote 65536/65536 bytes at offset 720896 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 786432 ++wrote 65536/65536 bytes at offset 786432 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 851968 ++wrote 65536/65536 bytes at offset 851968 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 917504 ++wrote 65536/65536 bytes at offset 917504 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 983040 ++wrote 65536/65536 bytes at offset 983040 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1048576 ++wrote 65536/65536 bytes at offset 1048576 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1114112 ++wrote 65536/65536 bytes at offset 1114112 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1179648 ++wrote 65536/65536 bytes at offset 1179648 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1245184 ++wrote 65536/65536 bytes at offset 1245184 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1310720 ++wrote 65536/65536 bytes at offset 1310720 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1376256 ++wrote 65536/65536 bytes at offset 1376256 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1441792 ++wrote 65536/65536 bytes at offset 1441792 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1507328 ++wrote 65536/65536 bytes at offset 1507328 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1572864 ++wrote 65536/65536 bytes at offset 1572864 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1638400 ++wrote 65536/65536 bytes at offset 1638400 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1703936 ++wrote 65536/65536 bytes at offset 1703936 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1769472 ++wrote 65536/65536 bytes at offset 1769472 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1835008 ++wrote 65536/65536 bytes at offset 1835008 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1900544 ++wrote 65536/65536 bytes at offset 1900544 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 1966080 ++wrote 65536/65536 bytes at offset 1966080 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset 2031616 ++wrote 65536/65536 bytes at offset 2031616 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + + == Some concurrent requests touching the same cluster == +-qemu-io> qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset XXX ++wrote 32768/32768 bytes at offset XXX + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 57344/57344 bytes at offset XXX + 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset XXX ++wrote 4096/4096 bytes at offset XXX + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 32768/32768 bytes at offset XXX ++wrote 32768/32768 bytes at offset XXX + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> discard 65536/65536 bytes at offset XXX ++discard 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 57344/57344 bytes at offset XXX + 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset XXX ++wrote 4096/4096 bytes at offset XXX + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 65536/65536 bytes at offset XXX ++wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> discard 65536/65536 bytes at offset XXX ++discard 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 57344/57344 bytes at offset XXX + 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 98304/98304 bytes at offset XXX + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 8192/8192 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 8192/8192 bytes at offset XXX + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 81920/81920 bytes at offset XXX + 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> blkdebug: Suspended request 'A' +-qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' +-qemu-io> wrote 32768/32768 bytes at offset XXX ++blkdebug: Suspended request 'A' ++blkdebug: Resuming request 'A' ++wrote 32768/32768 bytes at offset XXX + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 98304/98304 bytes at offset XXX + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> ++ + == Verify image content == +-qemu-io> read 65536/65536 bytes at offset 0 ++read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 65536 ++read 8192/8192 bytes at offset 65536 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 73728 ++read 8192/8192 bytes at offset 73728 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 81920 ++read 16384/16384 bytes at offset 81920 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 98304 ++read 8192/8192 bytes at offset 98304 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 106496 ++read 8192/8192 bytes at offset 106496 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 114688 ++read 8192/8192 bytes at offset 114688 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 122880 ++read 8192/8192 bytes at offset 122880 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 131072 ++read 32768/32768 bytes at offset 131072 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 163840 ++read 8192/8192 bytes at offset 163840 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 172032 ++read 65536/65536 bytes at offset 172032 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 24576/24576 bytes at offset 237568 ++read 24576/24576 bytes at offset 237568 + 24 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 262144 ++read 32768/32768 bytes at offset 262144 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 294912 ++read 8192/8192 bytes at offset 294912 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 303104 ++read 8192/8192 bytes at offset 303104 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 65536/65536 bytes at offset 311296 ++read 65536/65536 bytes at offset 311296 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 376832 ++read 16384/16384 bytes at offset 376832 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 24576/24576 bytes at offset 393216 ++read 24576/24576 bytes at offset 393216 + 24 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 417792 ++read 8192/8192 bytes at offset 417792 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 425984 ++read 8192/8192 bytes at offset 425984 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 57344/57344 bytes at offset 434176 ++read 57344/57344 bytes at offset 434176 + 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 24576/24576 bytes at offset 491520 ++read 24576/24576 bytes at offset 491520 + 24 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 516096 ++read 8192/8192 bytes at offset 516096 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 24576/24576 bytes at offset 524288 ++read 24576/24576 bytes at offset 524288 + 24 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 548864 ++read 8192/8192 bytes at offset 548864 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 557056 ++read 8192/8192 bytes at offset 557056 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 57344/57344 bytes at offset 565248 ++read 57344/57344 bytes at offset 565248 + 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 24576/24576 bytes at offset 622592 ++read 24576/24576 bytes at offset 622592 + 24 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 647168 ++read 8192/8192 bytes at offset 647168 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 24576/24576 bytes at offset 655360 ++read 24576/24576 bytes at offset 655360 + 24 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 679936 ++read 8192/8192 bytes at offset 679936 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 688128 ++read 8192/8192 bytes at offset 688128 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 57344/57344 bytes at offset 696320 ++read 57344/57344 bytes at offset 696320 + 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 753664 ++read 32768/32768 bytes at offset 753664 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 786432 ++read 16384/16384 bytes at offset 786432 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 802816 ++read 98304/98304 bytes at offset 802816 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 901120 ++read 8192/8192 bytes at offset 901120 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 909312 ++read 8192/8192 bytes at offset 909312 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 917504 ++read 16384/16384 bytes at offset 917504 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 81920/81920 bytes at offset 933888 ++read 81920/81920 bytes at offset 933888 + 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 1015808 ++read 16384/16384 bytes at offset 1015808 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1032192 ++read 8192/8192 bytes at offset 1032192 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 8192/8192 bytes at offset 1040384 ++read 8192/8192 bytes at offset 1040384 + 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 1048576 ++read 16384/16384 bytes at offset 1048576 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1064960 ++read 32768/32768 bytes at offset 1064960 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 32768/32768 bytes at offset 1130496 ++read 32768/32768 bytes at offset 1130496 + 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 16384/16384 bytes at offset 1163264 ++read 16384/16384 bytes at offset 1163264 + 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/047.out b/tests/qemu-iotests/047.out +index 81b2ff7..959f2af 100644 +--- a/tests/qemu-iotests/047.out ++++ b/tests/qemu-iotests/047.out +@@ -1,22 +1,22 @@ + QA output created by 047 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +-qemu-io> wrote 327680/327680 bytes at offset 0 ++wrote 327680/327680 bytes at offset 0 + 320 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 327680 ++wrote 131072/131072 bytes at offset 327680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 1048576 ++wrote 131072/131072 bytes at offset 1048576 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 131072/131072 bytes at offset 458752 ++wrote 131072/131072 bytes at offset 458752 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> discard 131072/131072 bytes at offset 327680 ++discard 131072/131072 bytes at offset 327680 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> qemu-io> wrote 491520/491520 bytes at offset 0 ++wrote 491520/491520 bytes at offset 0 + 480 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> qemu-io> qemu-io> read 491520/491520 bytes at offset 0 ++read 491520/491520 bytes at offset 0 + 480 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 98304/98304 bytes at offset 491520 ++read 98304/98304 bytes at offset 491520 + 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> read 131072/131072 bytes at offset 1048576 ++read 131072/131072 bytes at offset 1048576 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> No errors were found on the image. ++No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/048.out b/tests/qemu-iotests/048.out +index 68f65d5..75f6a15 100644 +--- a/tests/qemu-iotests/048.out ++++ b/tests/qemu-iotests/048.out +@@ -1,15 +1,15 @@ + QA output created by 048 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + === IO: pattern 45 +-qemu-io> wrote 4096/4096 bytes at offset 524288 ++wrote 4096/4096 bytes at offset 524288 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 528384 ++wrote 4096/4096 bytes at offset 528384 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 532480 ++wrote 4096/4096 bytes at offset 532480 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> wrote 4096/4096 bytes at offset 536576 ++wrote 4096/4096 bytes at offset 536576 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Images are identical. ++Images are identical. + 0 + 0 + Image resized. +@@ -19,13 +19,13 @@ Images are identical. + Strict mode: Image size mismatch! + 1 + === IO: pattern 67 +-qemu-io> wrote 4096/4096 bytes at offset 1228800 ++wrote 4096/4096 bytes at offset 1228800 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Content mismatch at offset 1228800! ++Content mismatch at offset 1228800! + 1 + === IO: pattern 123 +-qemu-io> wrote 4096/4096 bytes at offset 0 ++wrote 4096/4096 bytes at offset 0 + 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-qemu-io> Content mismatch at offset 0! ++Content mismatch at offset 0! + 1 + Cleanup +diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter +index 8e7b1a4..9c82c77 100644 +--- a/tests/qemu-iotests/common.filter ++++ b/tests/qemu-iotests/common.filter +@@ -149,7 +149,8 @@ _filter_win32() + # sanitize qemu-io output + _filter_qemu_io() + { +- _filter_win32 | sed -e "s/[0-9]* ops\; [0-9/:. sec]* ([0-9/.inf]* [EPTGMKiBbytes]*\/sec and [0-9/.inf]* ops\/sec)/X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" ++ _filter_win32 | sed -e "s/[0-9]* ops\; [0-9/:. sec]* ([0-9/.inf]* [EPTGMKiBbytes]*\/sec and [0-9/.inf]* ops\/sec)/X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" \ ++ -e "s/qemu-io> //g" + } + + # replace occurrences of QEMU_PROG with "qemu" +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Filter-qemu-io-output-in-025.patch b/SOURCES/kvm-qemu-iotests-Filter-qemu-io-output-in-025.patch new file mode 100644 index 0000000..943bc6e --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Filter-qemu-io-output-in-025.patch @@ -0,0 +1,41 @@ +From 8d7ac23276f1e17163a1679c2bf9b5bee09739a7 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 18 Sep 2015 11:08:50 +0200 +Subject: [PATCH] qemu-iotests: Filter qemu-io output in 025 + +Message-id: <1442574530-9690-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 67829 +O-Subject: [RHEL-7.2 qemu-kvm PATCH] qemu-iotests: Filter qemu-io output in 025 +Bugzilla: 1170974 +RH-Acked-by: John Snow +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz + +From: Fam Zheng + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 0d83c98bf15269e80e3558dc2c7b27e2f4386158) +Signed-off-by: Kevin Wolf +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/025 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/qemu-iotests/025 b/tests/qemu-iotests/025 +index a7241cc..9426c93 100755 +--- a/tests/qemu-iotests/025 ++++ b/tests/qemu-iotests/025 +@@ -56,7 +56,7 @@ _check_test_img + + echo + echo "=== Resizing image" +-$QEMU_IO "$TEST_IMG" < +Date: Mon, 13 Mar 2017 17:46:23 +0100 +Subject: [PATCH 12/24] qemu-iotests: Fix core dump suppression in test 039 + +RH-Author: Max Reitz +Message-id: <20170313174629.28735-1-mreitz@redhat.com> +Patchwork-id: 74281 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 3/9] qemu-iotests: Fix core dump suppression in test 039 +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +From: Markus Armbruster + +The shell script attempts to suppress core dumps like this: + + old_ulimit=$(ulimit -c) + ulimit -c 0 + $QEMU_IO arg... + ulimit -c "$old_ulimit" + +This breaks the test hard unless the limit was zero to begin with! +ulimit sets both hard and soft limit by default, and (re-)raising the +hard limit requires privileges. Broken since it was added in commit +dc68afe. + +Could be fixed by adding -S to set only the soft limit, but I'm not +sure how portable that is in practice. Simply do it in a subshell +instead, like this: + + (ulimit -c 0; exec $QEMU_IO arg...) + +Signed-off-by: Markus Armbruster +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit d530e342320d4db3c9522bfadc60a7bc8142343a) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/039 | 20 ++++++++------------ + tests/qemu-iotests/039.out | 3 +++ + tests/qemu-iotests/common.filter | 1 + + 3 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039 +index 8bade92..1e50651 100755 +--- a/tests/qemu-iotests/039 ++++ b/tests/qemu-iotests/039 +@@ -46,6 +46,11 @@ _supported_proto generic + _supported_os Linux + _unsupported_qemu_io_options --nocache + ++_no_dump_exec() ++{ ++ (ulimit -c 0; exec "$@") ++} ++ + size=128M + + echo +@@ -66,10 +71,7 @@ echo "== Creating a dirty image file ==" + IMGOPTS="compat=1.1,lazy_refcounts=on" + _make_test_img $size + +-old_ulimit=$(ulimit -c) +-ulimit -c 0 # do not produce a core dump on abort(3) +-$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io +-ulimit -c "$old_ulimit" ++_no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io + + # The dirty bit must be set + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +@@ -102,10 +104,7 @@ echo "== Opening a dirty image read/write should repair it ==" + IMGOPTS="compat=1.1,lazy_refcounts=on" + _make_test_img $size + +-old_ulimit=$(ulimit -c) +-ulimit -c 0 # do not produce a core dump on abort(3) +-$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io +-ulimit -c "$old_ulimit" ++_no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io + + # The dirty bit must be set + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +@@ -121,10 +120,7 @@ echo "== Creating an image file with lazy_refcounts=off ==" + IMGOPTS="compat=1.1,lazy_refcounts=off" + _make_test_img $size + +-old_ulimit=$(ulimit -c) +-ulimit -c 0 # do not produce a core dump on abort(3) +-$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io +-ulimit -c "$old_ulimit" ++_no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io + + # The dirty bit must not be set since lazy_refcounts=off + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features +diff --git a/tests/qemu-iotests/039.out b/tests/qemu-iotests/039.out +index d25bf0b..af62da1 100644 +--- a/tests/qemu-iotests/039.out ++++ b/tests/qemu-iotests/039.out +@@ -11,6 +11,7 @@ No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++./039: Aborted ( ulimit -c 0; exec "$@" ) + incompatible_features 0x1 + ERROR cluster 5 refcount=0 reference=1 + ERROR OFLAG_COPIED data cluster: l2_entry=8000000000050000 refcount=0 +@@ -45,6 +46,7 @@ read 512/512 bytes at offset 0 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++./039: Aborted ( ulimit -c 0; exec "$@" ) + incompatible_features 0x1 + ERROR cluster 5 refcount=0 reference=1 + Rebuilding refcount structure +@@ -58,6 +60,7 @@ incompatible_features 0x0 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + wrote 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++./039: Aborted ( ulimit -c 0; exec "$@" ) + incompatible_features 0x0 + No errors were found on the image. + *** done +diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter +index 9c82c77..dcd246d 100644 +--- a/tests/qemu-iotests/common.filter ++++ b/tests/qemu-iotests/common.filter +@@ -150,6 +150,7 @@ _filter_win32() + _filter_qemu_io() + { + _filter_win32 | sed -e "s/[0-9]* ops\; [0-9/:. sec]* ([0-9/.inf]* [EPTGMKiBbytes]*\/sec and [0-9/.inf]* ops\/sec)/X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" \ ++ -e "s/: line [0-9][0-9]*: *[0-9][0-9]*\( Aborted\)/:\1/" \ + -e "s/qemu-io> //g" + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-iotests-Fix-test-038.patch b/SOURCES/kvm-qemu-iotests-Fix-test-038.patch new file mode 100644 index 0000000..b877b11 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Fix-test-038.patch @@ -0,0 +1,89 @@ +From 8e9c1ae6f17f51f05a6e0cf5aacf8bbd7341eee4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 13 Sep 2013 10:37:12 +0200 +Subject: [PATCH 37/38] qemu-iotests: Fix test 038 + +Message-id: <1379499002-5231-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 54436 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 5/6] qemu-iotests: Fix test 038 +Bugzilla: 1006959 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1006959 + +Test 038 uses asynchronous I/O, resulting (potentially) in a different +output for every run (regarding the order of the I/O accesses). This can +be fixed by simply sorting the I/O access messages, since their order is +irrelevant anyway (for this asynchonous I/O). + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit c21bddf27fd8029890e9fc2ee314788919eababf) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/038 | 3 ++- + tests/qemu-iotests/038.out | 10 +++++----- + 2 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/tests/qemu-iotests/038 b/tests/qemu-iotests/038 +index 36125ea..90de1a7 100755 +--- a/tests/qemu-iotests/038 ++++ b/tests/qemu-iotests/038 +@@ -95,7 +95,8 @@ function overlay_io() + } + + overlay_io | $QEMU_IO $TEST_IMG | _filter_qemu_io |\ +- sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g' ++ sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g' \ ++ -e 's/qemu-io> //g' | paste - - | sort | tr '\t' '\n' + + echo + echo "== Verify image content ==" +diff --git a/tests/qemu-iotests/038.out b/tests/qemu-iotests/038.out +index 9cd0cd8..96c2f84 100644 +--- a/tests/qemu-iotests/038.out ++++ b/tests/qemu-iotests/038.out +@@ -517,7 +517,7 @@ qemu-io> wrote 65536/65536 bytes at offset 16711680 + qemu-io> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' + + == Some concurrent requests touching the same cluster == +-qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> wrote 65536/65536 bytes at offset XXX ++wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +@@ -577,8 +577,6 @@ wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-wrote 81920/81920 bytes at offset XXX +-80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX +@@ -645,8 +643,6 @@ wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-wrote 81920/81920 bytes at offset XXX +-80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX +@@ -705,6 +701,10 @@ wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 65536/65536 bytes at offset XXX + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 81920/81920 bytes at offset XXX ++80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 81920/81920 bytes at offset XXX ++80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + + == Verify image content == + qemu-io> read 4096/4096 bytes at offset 2064384 +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Fix-test-041.patch b/SOURCES/kvm-qemu-iotests-Fix-test-041.patch new file mode 100644 index 0000000..043b15f --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Fix-test-041.patch @@ -0,0 +1,102 @@ +From 8a95de5d6c85d1db0f32ab5083ff9e00166a7ee8 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:08:01 +0100 +Subject: [PATCH 27/34] qemu-iotests: Fix test 041 + +RH-Author: Max Reitz +Message-id: <1390154881-17140-8-git-send-email-mreitz@redhat.com> +Patchwork-id: 56820 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 7/7] qemu-iotests: Fix test 041 +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +BZ: 921890 + +Performing multiple drive-mirror blockjobs on the same qemu instance +results in the image file used for the block device being replaced by +the newly mirrored file, which is not what we want. + +Fix this by performing one dedicated test per sync mode. + +Signed-off-by: Max Reitz +Reviewed-by: Paolo Bonzini +Reviewed-by: Kevin Wolf +Reviewed-by: Eric Blake +Message-id: 1385407736-13941-3-git-send-email-mreitz@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 171d64319c9604228429b0580edf764a69b67c75) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/041 | 32 ++++++++++++++++++++++++-------- + tests/qemu-iotests/041.out | 4 ++-- + 2 files changed, 26 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/041 | 32 ++++++++++++++++++++++++-------- + tests/qemu-iotests/041.out | 4 ++-- + 2 files changed, 26 insertions(+), 10 deletions(-) + +diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 +index eccfe38..bcfb759 100755 +--- a/tests/qemu-iotests/041 ++++ b/tests/qemu-iotests/041 +@@ -750,16 +750,32 @@ class TestUnbackedSource(ImageMirroringTestCase): + os.remove(test_img) + os.remove(target_img) + +- def test_absolute_paths(self): ++ def test_absolute_paths_full(self): ++ self.assert_no_active_block_jobs() ++ result = self.vm.qmp('drive-mirror', device='drive0', ++ sync='full', target=target_img, ++ mode='absolute-paths') ++ self.assert_qmp(result, 'return', {}) ++ self.complete_and_wait() ++ self.assert_no_active_block_jobs() ++ ++ def test_absolute_paths_top(self): ++ self.assert_no_active_block_jobs() ++ result = self.vm.qmp('drive-mirror', device='drive0', ++ sync='top', target=target_img, ++ mode='absolute-paths') ++ self.assert_qmp(result, 'return', {}) ++ self.complete_and_wait() + self.assert_no_active_block_jobs() + +- for sync_mode in ['full', 'top', 'none']: +- result = self.vm.qmp('drive-mirror', device='drive0', +- sync=sync_mode, target=target_img, +- mode='absolute-paths') +- self.assert_qmp(result, 'return', {}) +- self.complete_and_wait() +- self.assert_no_active_block_jobs() ++ def test_absolute_paths_none(self): ++ self.assert_no_active_block_jobs() ++ result = self.vm.qmp('drive-mirror', device='drive0', ++ sync='none', target=target_img, ++ mode='absolute-paths') ++ self.assert_qmp(result, 'return', {}) ++ self.complete_and_wait() ++ self.assert_no_active_block_jobs() + + if __name__ == '__main__': + iotests.main(supported_fmts=['qcow2', 'qed']) +diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out +index 4fd1c2d..6d9bee1 100644 +--- a/tests/qemu-iotests/041.out ++++ b/tests/qemu-iotests/041.out +@@ -1,5 +1,5 @@ +-......................... ++........................... + ---------------------------------------------------------------------- +-Ran 25 tests ++Ran 27 tests + + OK +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Fixed-test-case-026.patch b/SOURCES/kvm-qemu-iotests-Fixed-test-case-026.patch new file mode 100644 index 0000000..4b5246b --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Fixed-test-case-026.patch @@ -0,0 +1,828 @@ +From 9b1cfdf3f35a028aafffb01d667cdaf304e678c7 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 4 Sep 2013 13:16:05 +0200 +Subject: [PATCH 36/38] qemu-iotests: Fixed test case 026 + +Message-id: <1379499002-5231-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 54435 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 4/6] qemu-iotests: Fixed test case 026 +Bugzilla: 1006959 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1006959 + +The reference output for test case 026 hasn't been updated in a long +time and it's one of the "known failing" cases. This patch updates the +reference output so that unintentional changes can be reliably detected +again. + +The problem with this test case is that it produces different output +depending on whether -nocache is used or not. The solution of this patch +is to actually have two different reference outputs. If nnn.out.nocache +exists, it is used as the reference output for -nocache; otherwise, +nnn.out stays valid for both cases. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 8f94b077877151de93a63c73f796897309568ddb) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/026.out | 28 +- + tests/qemu-iotests/026.out.nocache | 626 ++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/check | 12 +- + 3 files changed, 649 insertions(+), 17 deletions(-) + create mode 100644 tests/qemu-iotests/026.out.nocache + +diff --git a/tests/qemu-iotests/026.out b/tests/qemu-iotests/026.out +index fb4f20e..0764389 100644 +--- a/tests/qemu-iotests/026.out ++++ b/tests/qemu-iotests/026.out +@@ -126,62 +126,64 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + Event: l2_update; errno: 5; imm: off; once: on; write + write failed: Input/output error + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 5; imm: off; once: on; write -b + write failed: Input/output error + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 5; imm: off; once: off; write + write failed: Input/output error + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 5; imm: off; once: off; write -b + write failed: Input/output error + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 28; imm: off; once: on; write + write failed: No space left on device + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 28; imm: off; once: on; write -b + write failed: No space left on device + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 28; imm: off; once: off; write + write failed: No space left on device + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_update; errno: 28; imm: off; once: off; write -b + write failed: No space left on device + +-128 leaked clusters were found on the image. ++127 leaked clusters were found on the image. + This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_alloc.write; errno: 5; imm: off; once: on; write + write failed: Input/output error +-No errors were found on the image. ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_alloc.write; errno: 5; imm: off; once: on; write -b +@@ -205,7 +207,9 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_alloc.write; errno: 28; imm: off; once: on; write + write failed: No space left on device +-No errors were found on the image. ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l2_alloc.write; errno: 28; imm: off; once: on; write -b +@@ -575,7 +579,6 @@ No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l1_grow.write_table; errno: 5; imm: off; once: off +-qcow2_free_clusters failed: Input/output error + write failed: Input/output error + No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 +@@ -586,7 +589,6 @@ No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l1_grow.write_table; errno: 28; imm: off; once: off +-qcow2_free_clusters failed: No space left on device + write failed: No space left on device + No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 +@@ -597,7 +599,6 @@ No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l1_grow.activate_table; errno: 5; imm: off; once: off +-qcow2_free_clusters failed: Input/output error + write failed: Input/output error + + 96 leaked clusters were found on the image. +@@ -610,7 +611,6 @@ No errors were found on the image. + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 + + Event: l1_grow.activate_table; errno: 28; imm: off; once: off +-qcow2_free_clusters failed: No space left on device + write failed: No space left on device + + 96 leaked clusters were found on the image. +diff --git a/tests/qemu-iotests/026.out.nocache b/tests/qemu-iotests/026.out.nocache +new file mode 100644 +index 0000000..33bad0d +--- /dev/null ++++ b/tests/qemu-iotests/026.out.nocache +@@ -0,0 +1,626 @@ ++QA output created by 026 ++Errors while writing 128 kB ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_update; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 5; imm: off; once: on; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: Input/output error ++read failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 5; imm: off; once: on; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: Input/output error ++read failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 5; imm: off; once: off; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: Input/output error ++read failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 5; imm: off; once: off; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: Input/output error ++read failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 28; imm: off; once: on; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: No space left on device ++read failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 28; imm: off; once: on; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: No space left on device ++read failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 28; imm: off; once: off; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: No space left on device ++read failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_load; errno: 28; imm: off; once: off; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++write failed: No space left on device ++read failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 5; imm: off; once: on; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 5; imm: off; once: on; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 5; imm: off; once: off; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 5; imm: off; once: off; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 28; imm: off; once: on; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 28; imm: off; once: on; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 28; imm: off; once: off; write ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_update; errno: 28; imm: off; once: off; write -b ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++127 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l2_alloc.write; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++ ++1 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: write_aio; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_load; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_update_part; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 5; imm: off; once: on; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 5; imm: off; once: on; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 5; imm: off; once: off; write ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 5; imm: off; once: off; write -b ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: cluster_alloc; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++No errors were found on the image. ++ ++=== Refcout table growth tests === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.hookup; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.hookup; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.hookup; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++ ++55 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.hookup; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++ ++251 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_blocks; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_blocks; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_blocks; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++ ++10 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_blocks; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++ ++23 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_table; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_table; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_table; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++ ++10 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.write_table; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++ ++23 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.switch_table; errno: 28; imm: off; once: on; write ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.switch_table; errno: 28; imm: off; once: on; write -b ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.switch_table; errno: 28; imm: off; once: off; write ++write failed: No space left on device ++ ++10 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: refblock_alloc.switch_table; errno: 28; imm: off; once: off; write -b ++write failed: No space left on device ++ ++23 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++ ++=== L1 growth tests === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.alloc_table; errno: 5; imm: off; once: on ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.alloc_table; errno: 5; imm: off; once: off ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.alloc_table; errno: 28; imm: off; once: on ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.alloc_table; errno: 28; imm: off; once: off ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.write_table; errno: 5; imm: off; once: on ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.write_table; errno: 5; imm: off; once: off ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.write_table; errno: 28; imm: off; once: on ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.write_table; errno: 28; imm: off; once: off ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.activate_table; errno: 5; imm: off; once: on ++write failed: Input/output error ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.activate_table; errno: 5; imm: off; once: off ++write failed: Input/output error ++ ++96 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.activate_table; errno: 28; imm: off; once: on ++write failed: No space left on device ++No errors were found on the image. ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 ++ ++Event: l1_grow.activate_table; errno: 28; imm: off; once: off ++write failed: No space left on device ++ ++96 leaked clusters were found on the image. ++This means waste of disk space, but no harm to data. ++*** done +diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check +index e51bae8..4ecf497 100755 +--- a/tests/qemu-iotests/check ++++ b/tests/qemu-iotests/check +@@ -239,12 +239,18 @@ do + echo -n " [failed, exit status $sts]" + err=true + fi +- if [ ! -f $seq.out ] ++ ++ reference=$seq.out ++ if (echo $QEMU_IO_OPTIONS | grep -s -- '--nocache' > /dev/null); then ++ [ -f $seq.out.nocache ] && reference=$seq.out.nocache ++ fi ++ ++ if [ ! -f $reference ] + then + echo " - no qualified output" + err=true + else +- if diff -w $seq.out $tmp.out >/dev/null 2>&1 ++ if diff -w $reference $tmp.out >/dev/null 2>&1 + then + echo "" + if $err +@@ -256,7 +262,7 @@ do + else + echo " - output mismatch (see $seq.out.bad)" + mv $tmp.out $seq.out.bad +- $diff -w $seq.out $seq.out.bad ++ $diff -w $reference $seq.out.bad + err=true + fi + fi +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Introduce-_unsupported_imgopts.patch b/SOURCES/kvm-qemu-iotests-Introduce-_unsupported_imgopts.patch new file mode 100644 index 0000000..af50ca0 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Introduce-_unsupported_imgopts.patch @@ -0,0 +1,57 @@ +From 40bbc03370fbd830e8010764318e01c3e6af631f Mon Sep 17 00:00:00 2001 +Message-Id: <40bbc03370fbd830e8010764318e01c3e6af631f.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:04:58 -0600 +Subject: [CHANGE 04/31] qemu-iotests: Introduce _unsupported_imgopts +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-5-git-send-email-famz@redhat.com> +Patchwork-id: 62677 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 04/30] qemu-iotests: Introduce _unsupported_imgopts +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Introduce _unsupported_imgopts that causes _notrun for specific image +options. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 2c77f52e39ff2ba071e3b549ad7a3ebea0758edd) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/common.rc | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 65c5bc1..9c6e94b 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -404,6 +404,17 @@ _unsupported_qemu_io_options() + done + } + ++_unsupported_imgopts() ++{ ++ for bad_opt ++ do ++ if echo "$IMGOPTS" | grep -q 2>/dev/null "$bad_opt" ++ then ++ _notrun "not suitable for image option: $bad_opt" ++ fi ++ done ++} ++ + # this test requires that a specified command (executable) exists + # + _require_command() +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-iotests-New-test-case-in-061.patch b/SOURCES/kvm-qemu-iotests-New-test-case-in-061.patch new file mode 100644 index 0000000..c0a92bb --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-New-test-case-in-061.patch @@ -0,0 +1,128 @@ +From af156d9a912c96203f26cde732f95357d7f63cd4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:18 +0100 +Subject: [PATCH 13/14] qemu-iotests: New test case in 061 + +RH-Author: Max Reitz +Message-id: <1389131839-12920-14-git-send-email-mreitz@redhat.com> +Patchwork-id: 56549 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 13/14] qemu-iotests: New test case in 061 +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Add one test case for zero cluster expansion on qcow2 version downgrade +in shared L2 tables (i.e., L2 tables with a refcount > 1) and one for +zero expansion on backed clusters in shared L2 tables. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit d982919d3897f36d79e215c46e3bc27fd6e27bf8) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/061 | 28 ++++++++++++++++++++++++++++ + tests/qemu-iotests/061.out | 27 +++++++++++++++++++++++++++ + 2 files changed, 55 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/061 | 28 ++++++++++++++++++++++++++++ + tests/qemu-iotests/061.out | 27 +++++++++++++++++++++++++++ + 2 files changed, 55 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061 +index 86404e6..5f04bfa 100644 +--- a/tests/qemu-iotests/061 ++++ b/tests/qemu-iotests/061 +@@ -146,6 +146,19 @@ _check_test_img + $QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io + + echo ++echo "=== Testing zero expansion on shared L2 table ===" ++echo ++IMGOPTS="compat=1.1" _make_test_img 64M ++$QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++ ++echo + echo "=== Testing zero expansion on backed image ===" + echo + IMGOPTS="compat=1.1" TEST_IMG="$TEST_IMG.base" _make_test_img 64M +@@ -172,6 +185,21 @@ $QEMU_IMG snapshot -a foo "$TEST_IMG" + _check_test_img + $QEMU_IO -c "read -P 0 0 64k" -c "read -P 0x2a 64k 64k" "$TEST_IMG" | _filter_qemu_io + ++echo ++echo "=== Testing zero expansion on backed image with shared L2 table ===" ++echo ++IMGOPTS="compat=1.1" TEST_IMG="$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 128k" "$TEST_IMG.base" | _filter_qemu_io ++IMGOPTS="compat=1.1,backing_file=$TEST_IMG.base" _make_test_img 64M ++$QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out +index 05bd1d5..d42127f 100644 +--- a/tests/qemu-iotests/061.out ++++ b/tests/qemu-iotests/061.out +@@ -312,6 +312,18 @@ No errors were found on the image. + read 131072/131072 bytes at offset 0 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + ++=== Testing zero expansion on shared L2 table === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ + === Testing zero expansion on backed image === + + Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 +@@ -346,4 +358,19 @@ read 65536/65536 bytes at offset 0 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + read 65536/65536 bytes at offset 65536 + 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing zero expansion on backed image with shared L2 table === ++ ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file='TEST_DIR/t.IMGFMT.base' ++wrote 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 131072/131072 bytes at offset 0 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Overlapping-cluster-allocations.patch b/SOURCES/kvm-qemu-iotests-Overlapping-cluster-allocations.patch new file mode 100644 index 0000000..f5ce436 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Overlapping-cluster-allocations.patch @@ -0,0 +1,218 @@ +From fdd55f6fb66d89ff7d241395419de8615e2063a4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 7 Nov 2013 12:16:30 +0100 +Subject: [PATCH 13/87] qemu-iotests: Overlapping cluster allocations + +RH-Author: Max Reitz +Message-id: <1383604354-12743-16-git-send-email-mreitz@redhat.com> +Patchwork-id: 55315 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 15/43] qemu-iotests: Overlapping cluster allocations +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +A new test on corrupted images with overlapping cluster allocations. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit ca0eca91b65c34d6e5f5c77d5c18ed3de5b26139) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/group + +Conflicts because upstream contains more tests in the group file. +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/060 | 111 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/060.out | 44 +++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 156 insertions(+), 0 deletions(-) + create mode 100644 tests/qemu-iotests/060 + create mode 100644 tests/qemu-iotests/060.out + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +new file mode 100644 +index 0000000..65bb09f +--- /dev/null ++++ b/tests/qemu-iotests/060 +@@ -0,0 +1,111 @@ ++#!/bin/bash ++# ++# Test case for image corruption (overlapping data structures) in qcow2 ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests qocw2-specific low-level functionality ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++rt_offset=65536 # 0x10000 (XXX: just an assumption) ++rb_offset=131072 # 0x20000 (XXX: just an assumption) ++l1_offset=196608 # 0x30000 (XXX: just an assumption) ++l2_offset=262144 # 0x40000 (XXX: just an assumption) ++ ++IMGOPTS="compat=1.1" ++ ++echo ++echo "=== Testing L2 reference into L1 ===" ++echo ++_make_test_img 64M ++# Link first L1 entry (first L2 table) onto itself ++# (Note the MSb in the L1 entry is set, ensuring the refcount is one - else any ++# later write will result in a COW operation, effectively ruining this attempt ++# on image corruption) ++poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x03\x00\x00" ++_check_test_img ++ ++# The corrupt bit should not be set anyway ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++# Try to write something, thereby forcing the corrupt bit to be set ++$QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io ++ ++# The corrupt bit must now be set ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++# Try to open the image R/W (which should fail) ++$QEMU_IO -c "read 0 512" "$TEST_IMG" 2>&1 | _filter_qemu_io | sed -e "s/can't open device .*$/can't open device/" ++ ++# Try to open it RO (which should succeed) ++$QEMU_IO -c "read 0 512" -r "$TEST_IMG" | _filter_qemu_io ++ ++# We could now try to fix the image, but this would probably fail (how should an ++# L2 table linked onto the L1 table be fixed?) ++ ++echo ++echo "=== Testing cluster data reference into refcount block ===" ++echo ++_make_test_img 64M ++# Allocate L2 table ++truncate -s "$(($l2_offset+65536))" "$TEST_IMG" ++poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x04\x00\x00" ++# Mark cluster as used ++poke_file "$TEST_IMG" "$(($rb_offset+8))" "\x00\x01" ++# Redirect new data cluster onto refcount block ++poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x02\x00\x00" ++_check_test_img ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++$QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++# Try to fix it ++_check_test_img -r all ++ ++# The corrupt bit should be cleared ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++# Look if it's really really fixed ++$QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +new file mode 100644 +index 0000000..ca4583a +--- /dev/null ++++ b/tests/qemu-iotests/060.out +@@ -0,0 +1,44 @@ ++QA output created by 060 ++ ++=== Testing L2 reference into L1 === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++ERROR cluster 3 refcount=1 reference=3 ++ ++1 errors were found on the image. ++Data may be corrupted, or further writes to the image may corrupt it. ++incompatible_features 0x0 ++qcow2: Preventing invalid write on metadata (overlaps with active L1 table); image marked as corrupt. ++write failed: Input/output error ++incompatible_features 0x2 ++qcow2: Image is corrupt; cannot be opened read/write. ++qemu-io: can't open device ++no file open, try 'help open' ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing cluster data reference into refcount block === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++ERROR refcount block 0 refcount=2 ++ERROR cluster 2 refcount=1 reference=2 ++ ++2 errors were found on the image. ++Data may be corrupted, or further writes to the image may corrupt it. ++incompatible_features 0x0 ++qcow2: Preventing invalid write on metadata (overlaps with refcount block); image marked as corrupt. ++write failed: Input/output error ++incompatible_features 0x2 ++Repairing refcount block 0 refcount=2 ++The following inconsistencies were found and repaired: ++ ++ 0 leaked clusters ++ 1 corruptions ++ ++Double checking the fixed image now... ++No errors were found on the image. ++incompatible_features 0x0 ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++incompatible_features 0x0 ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 1017a19..9c8826d 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -61,4 +61,5 @@ + 052 rw auto backing + 053 rw auto + 059 rw auto ++060 rw auto + 068 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Preallocated-zero-clusters-in-061.patch b/SOURCES/kvm-qemu-iotests-Preallocated-zero-clusters-in-061.patch new file mode 100644 index 0000000..bdb0dc7 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Preallocated-zero-clusters-in-061.patch @@ -0,0 +1,78 @@ +From 6c3f41d4c4e48cb641c8cf17f6df7b60558427ac Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 7 Jan 2014 21:57:19 +0100 +Subject: [PATCH 14/14] qemu-iotests: Preallocated zero clusters in 061 + +RH-Author: Max Reitz +Message-id: <1389131839-12920-15-git-send-email-mreitz@redhat.com> +Patchwork-id: 56550 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 14/14] qemu-iotests: Preallocated zero clusters in 061 +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +Add a test case for zero cluster expansion on an image completely filled +with preallocated zero clusters to test 061. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit fd9e03e6060b3a64099d17e4a886421b21dd7341) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/061 | 9 +++++++++ + tests/qemu-iotests/061.out | 11 +++++++++++ + 2 files changed, 20 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/061 | 9 +++++++++ + tests/qemu-iotests/061.out | 11 +++++++++++ + 2 files changed, 20 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061 +index 5f04bfa..fa9319d 100644 +--- a/tests/qemu-iotests/061 ++++ b/tests/qemu-iotests/061 +@@ -200,6 +200,15 @@ $QEMU_IMG snapshot -a foo "$TEST_IMG" + _check_test_img + $QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io + ++echo ++echo "=== Testing preallocated zero expansion on full image ===" ++echo ++IMGOPTS="compat=1.1" TEST_IMG="$TEST_IMG" _make_test_img 64M ++$QEMU_IO -c "write -P 0x2a 0 64M" "$TEST_IMG" -c "write -z 0 64M" | _filter_qemu_io ++$QEMU_IMG amend -o "compat=0.10" "$TEST_IMG" ++_check_test_img ++$QEMU_IO -c "read -P 0 0 64M" "$TEST_IMG" | _filter_qemu_io ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/061.out b/tests/qemu-iotests/061.out +index d42127f..4027e00 100644 +--- a/tests/qemu-iotests/061.out ++++ b/tests/qemu-iotests/061.out +@@ -373,4 +373,15 @@ read 131072/131072 bytes at offset 0 + No errors were found on the image. + read 131072/131072 bytes at offset 0 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++=== Testing preallocated zero expansion on full image === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 67108864/67108864 bytes at offset 0 ++64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 67108864/67108864 bytes at offset 0 ++64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++read 67108864/67108864 bytes at offset 0 ++64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Quote-TEST_IMG-and-TEST_DIR-usage.patch b/SOURCES/kvm-qemu-iotests-Quote-TEST_IMG-and-TEST_DIR-usage.patch new file mode 100644 index 0000000..b62b740 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Quote-TEST_IMG-and-TEST_DIR-usage.patch @@ -0,0 +1,1971 @@ +From 75745b6eee8522c8b1eb05dc2be56f3245abae1b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:32 +0100 +Subject: [PATCH 75/87] qemu-iotests: Quote $TEST_IMG* and $TEST_DIR usage + +RH-Author: Max Reitz +Message-id: <1383756824-6921-10-git-send-email-mreitz@redhat.com> +Patchwork-id: 55564 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 09/21] qemu-iotests: Quote $TEST_IMG* and $TEST_DIR usage +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Jeff Cody + +BZ: 980771 + +A lot of image filename and paths are used unquoted. Quote these to +make sure that directories / filenames with spaces are not problematic. + +Signed-off-by: Jeff Cody +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit fef9c19139f4d69a080d99b8cbade163d0bbf0fc) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/051 + +Conflicts because of the downstream-only patch +9dcde11f25f85804f31d00fc45eed16595aebeec. +--- + tests/qemu-iotests/001 | 6 ++--- + tests/qemu-iotests/002 | 36 ++++++++++++------------- + tests/qemu-iotests/003 | 10 +++---- + tests/qemu-iotests/004 | 24 ++++++++--------- + tests/qemu-iotests/005 | 4 +-- + tests/qemu-iotests/007 | 2 +- + tests/qemu-iotests/008 | 6 ++--- + tests/qemu-iotests/009 | 2 +- + tests/qemu-iotests/010 | 2 +- + tests/qemu-iotests/011 | 2 +- + tests/qemu-iotests/012 | 4 +-- + tests/qemu-iotests/013 | 4 +-- + tests/qemu-iotests/014 | 2 +- + tests/qemu-iotests/015 | 16 +++++------ + tests/qemu-iotests/016 | 12 ++++----- + tests/qemu-iotests/018 | 6 ++--- + tests/qemu-iotests/019 | 12 ++++----- + tests/qemu-iotests/020 | 12 ++++----- + tests/qemu-iotests/021 | 2 +- + tests/qemu-iotests/023 | 4 +-- + tests/qemu-iotests/024 | 12 ++++----- + tests/qemu-iotests/025 | 4 +-- + tests/qemu-iotests/026 | 20 +++++++------- + tests/qemu-iotests/027 | 10 +++---- + tests/qemu-iotests/028 | 6 ++--- + tests/qemu-iotests/029 | 12 ++++----- + tests/qemu-iotests/031 | 12 ++++----- + tests/qemu-iotests/032 | 4 +-- + tests/qemu-iotests/033 | 18 ++++++------- + tests/qemu-iotests/034 | 64 ++++++++++++++++++++++---------------------- + tests/qemu-iotests/035 | 2 +- + tests/qemu-iotests/036 | 6 ++--- + tests/qemu-iotests/037 | 62 +++++++++++++++++++++--------------------- + tests/qemu-iotests/038 | 10 +++---- + tests/qemu-iotests/039 | 28 +++++++++---------- + tests/qemu-iotests/042 | 10 +++---- + tests/qemu-iotests/043 | 32 +++++++++++----------- + tests/qemu-iotests/046 | 10 +++---- + tests/qemu-iotests/047 | 2 +- + tests/qemu-iotests/048 | 8 +++--- + tests/qemu-iotests/049 | 36 ++++++++++++------------- + tests/qemu-iotests/050 | 20 +++++++------- + tests/qemu-iotests/051 | 50 +++++++++++++++++----------------- + tests/qemu-iotests/052 | 6 ++--- + tests/qemu-iotests/053 | 10 +++---- + tests/qemu-iotests/054 | 2 +- + tests/qemu-iotests/059 | 6 ++--- + tests/qemu-iotests/063 | 28 +++++++++---------- + tests/qemu-iotests/common.rc | 16 +++++------ + 49 files changed, 337 insertions(+), 337 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/001 | 6 ++-- + tests/qemu-iotests/002 | 36 ++++++++++++------------ + tests/qemu-iotests/003 | 10 +++--- + tests/qemu-iotests/004 | 24 ++++++++-------- + tests/qemu-iotests/005 | 4 +- + tests/qemu-iotests/007 | 2 +- + tests/qemu-iotests/008 | 6 ++-- + tests/qemu-iotests/009 | 2 +- + tests/qemu-iotests/010 | 2 +- + tests/qemu-iotests/011 | 2 +- + tests/qemu-iotests/012 | 4 +- + tests/qemu-iotests/013 | 4 +- + tests/qemu-iotests/014 | 2 +- + tests/qemu-iotests/015 | 16 +++++----- + tests/qemu-iotests/016 | 12 ++++---- + tests/qemu-iotests/018 | 6 ++-- + tests/qemu-iotests/019 | 12 ++++---- + tests/qemu-iotests/020 | 12 ++++---- + tests/qemu-iotests/021 | 2 +- + tests/qemu-iotests/023 | 4 +- + tests/qemu-iotests/024 | 12 ++++---- + tests/qemu-iotests/025 | 4 +- + tests/qemu-iotests/026 | 20 ++++++------ + tests/qemu-iotests/027 | 10 +++--- + tests/qemu-iotests/028 | 6 ++-- + tests/qemu-iotests/029 | 12 ++++---- + tests/qemu-iotests/031 | 12 ++++---- + tests/qemu-iotests/032 | 4 +- + tests/qemu-iotests/033 | 18 ++++++------ + tests/qemu-iotests/034 | 64 +++++++++++++++++++++--------------------- + tests/qemu-iotests/035 | 2 +- + tests/qemu-iotests/036 | 6 ++-- + tests/qemu-iotests/037 | 62 ++++++++++++++++++++-------------------- + tests/qemu-iotests/038 | 10 +++--- + tests/qemu-iotests/039 | 28 +++++++++--------- + tests/qemu-iotests/042 | 10 +++--- + tests/qemu-iotests/043 | 32 ++++++++++---------- + tests/qemu-iotests/046 | 10 +++--- + tests/qemu-iotests/047 | 2 +- + tests/qemu-iotests/048 | 8 ++-- + tests/qemu-iotests/049 | 36 ++++++++++++------------ + tests/qemu-iotests/050 | 20 ++++++------ + tests/qemu-iotests/051 | 50 ++++++++++++++++---------------- + tests/qemu-iotests/052 | 6 ++-- + tests/qemu-iotests/053 | 10 +++--- + tests/qemu-iotests/054 | 2 +- + tests/qemu-iotests/059 | 6 ++-- + tests/qemu-iotests/063 | 28 +++++++++--------- + tests/qemu-iotests/common.rc | 16 +++++----- + 49 files changed, 337 insertions(+), 337 deletions(-) + +diff --git a/tests/qemu-iotests/001 b/tests/qemu-iotests/001 +index bd88dde..4e16469 100755 +--- a/tests/qemu-iotests/001 ++++ b/tests/qemu-iotests/001 +@@ -48,15 +48,15 @@ _make_test_img $size + + echo + echo "== reading whole image ==" +-$QEMU_IO -c "read 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== rewriting whole image ==" +-$QEMU_IO -c "write -P 0xa 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify pattern ==" +-$QEMU_IO -c "read -P 0xa 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io + + + # success, all done +diff --git a/tests/qemu-iotests/002 b/tests/qemu-iotests/002 +index 51d0a8f..6a865aa 100755 +--- a/tests/qemu-iotests/002 ++++ b/tests/qemu-iotests/002 +@@ -48,36 +48,36 @@ _make_test_img $size + + echo + echo "== reading whole image ==" +-$QEMU_IO -c "read -p 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -p 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== rewriting whole image ==" +-$QEMU_IO -c "write -pP 0xa 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -pP 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify pattern ==" +-$QEMU_IO -c "read -pP 0xa 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -pP 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "unaligned pwrite" +-$QEMU_IO -c 'write -pP 0xab 66 42' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'write -pP 0xac 512 288' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'write -pP 0xad 800 224' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'write -pP 0xae 66000 128k' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'write -pP 0xaf 256k 42' $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c 'write -pP 0xab 66 42' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'write -pP 0xac 512 288' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'write -pP 0xad 800 224' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'write -pP 0xae 66000 128k' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'write -pP 0xaf 256k 42' "$TEST_IMG" | _filter_qemu_io + + echo + echo "verify pattern" +-$QEMU_IO -c 'read -pP 0xa 0 66' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xab 66 42' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xa 108 404' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xac 512 288' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xad 800 224' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xa 1k 64976' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xae 66000 128k' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xa 197072 65072' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xaf 256k 42' $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c 'read -pP 0xa 262186 470' $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xa 0 66' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xab 66 42' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xa 108 404' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xac 512 288' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xad 800 224' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xa 1k 64976' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xae 66000 128k' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xa 197072 65072' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xaf 256k 42' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c 'read -pP 0xa 262186 470' "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/003 b/tests/qemu-iotests/003 +index ee25fb8..98638d4 100755 +--- a/tests/qemu-iotests/003 ++++ b/tests/qemu-iotests/003 +@@ -50,27 +50,27 @@ _make_test_img $size + + echo + echo "== reading whole image ==" +-$QEMU_IO -c "readv 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "readv 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== rewriting whole image ==" +-$QEMU_IO -c "writev -P 0xa 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "writev -P 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify pattern ==" +-$QEMU_IO -c "readv -P 0xa 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "readv -P 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== vectored write ==" + $QEMU_IO -c "writev -P 0xb $offset $chunksize $chunksize \ + $chunksize $chunksize $chunksize $chunksize $chunksize" \ +- $TEST_IMG | _filter_qemu_io ++ "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify pattern ==" + $QEMU_IO -c "readv -P 0xb $offset $chunksize $chunksize \ + $chunksize $chunksize $chunksize $chunksize $chunksize" \ +- $TEST_IMG | _filter_qemu_io ++ "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/004 b/tests/qemu-iotests/004 +index c76451c..651072e 100755 +--- a/tests/qemu-iotests/004 ++++ b/tests/qemu-iotests/004 +@@ -51,51 +51,51 @@ _make_test_img $size + + echo + echo "write before image boundary" +-$QEMU_IO -c "write $pre_offset 1M" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write $pre_offset 1M" "$TEST_IMG" | _filter_qemu_io + + echo + echo "write into image boundary" +-$QEMU_IO -c "write $pre_offset 4M" $TEST_IMG ++$QEMU_IO -c "write $pre_offset 4M" "$TEST_IMG" + + echo + echo "write at image boundary" +-$QEMU_IO -c "write $size 4096" $TEST_IMG ++$QEMU_IO -c "write $size 4096" "$TEST_IMG" + + echo + echo "write past image boundary" +-$QEMU_IO -c "write $past_offset 4096" $TEST_IMG ++$QEMU_IO -c "write $past_offset 4096" "$TEST_IMG" + + echo + echo "pwrite past image boundary" +-$QEMU_IO -c "write -p $past_offset 4096" $TEST_IMG ++$QEMU_IO -c "write -p $past_offset 4096" "$TEST_IMG" + + echo + echo "writev past image boundary" +-$QEMU_IO -c "writev $past_offset 4096" $TEST_IMG ++$QEMU_IO -c "writev $past_offset 4096" "$TEST_IMG" + + echo + echo "read before image boundary" +-$QEMU_IO -c "read $pre_offset 1M" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read $pre_offset 1M" "$TEST_IMG" | _filter_qemu_io + + echo + echo "read into image boundary" +-$QEMU_IO -c "read $pre_offset 4M" $TEST_IMG ++$QEMU_IO -c "read $pre_offset 4M" "$TEST_IMG" + + echo + echo "read at image boundary" +-$QEMU_IO -c "read $size 4096" $TEST_IMG ++$QEMU_IO -c "read $size 4096" "$TEST_IMG" + + echo + echo "read past image boundary" +-$QEMU_IO -c "read $past_offset 4096" $TEST_IMG ++$QEMU_IO -c "read $past_offset 4096" "$TEST_IMG" + + echo + echo "pread past image boundary" +-$QEMU_IO -c "read -p $past_offset 4096" $TEST_IMG ++$QEMU_IO -c "read -p $past_offset 4096" "$TEST_IMG" + + echo + echo "readv past image boundary" +-$QEMU_IO -c "readv $past_offset 4096" $TEST_IMG ++$QEMU_IO -c "readv $past_offset 4096" "$TEST_IMG" + + + # success, all done +diff --git a/tests/qemu-iotests/005 b/tests/qemu-iotests/005 +index b7970e3..9abcb84 100755 +--- a/tests/qemu-iotests/005 ++++ b/tests/qemu-iotests/005 +@@ -61,11 +61,11 @@ _make_test_img 5000G + + echo + echo "small read" +-$QEMU_IO -c "read 1024 4096" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read 1024 4096" "$TEST_IMG" | _filter_qemu_io + + echo + echo "small write" +-$QEMU_IO -c "write 8192 4096" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write 8192 4096" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/007 b/tests/qemu-iotests/007 +index c454f2c..fc84445 100755 +--- a/tests/qemu-iotests/007 ++++ b/tests/qemu-iotests/007 +@@ -50,7 +50,7 @@ _make_test_img 1M + + for i in `seq 1 10`; do + echo "savevm $i" +- $QEMU -nographic -hda $TEST_IMG -serial none -monitor stdio >/dev/null 2>&1 </dev/null 2>&1 < $TEST_DIR/blkdebug.conf < "$TEST_DIR/blkdebug.conf" < /dev/null 2>&1 ++ $QEMU_IO -c "write $vmstate 0 512" "$TEST_IMG" > /dev/null 2>&1 + fi + +-$QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write $vmstate 0 128k " "$BLKDBG_TEST_IMG" | _filter_qemu_io + + # l2_load is not called on allocation, so issue a second write + # Reads are another path to trigger l2_load, so do a read, too + if [ "$event" == "l2_load" ]; then +- $QEMU_IO -c "write $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io +- $QEMU_IO -c "read $vmstate 0 128k " $BLKDBG_TEST_IMG | _filter_qemu_io ++ $QEMU_IO -c "write $vmstate 0 128k " "$BLKDBG_TEST_IMG" | _filter_qemu_io ++ $QEMU_IO -c "read $vmstate 0 128k " "$BLKDBG_TEST_IMG" | _filter_qemu_io + fi + + _check_test_img 2>&1 | grep -v "refcount=1 reference=0" +@@ -133,7 +133,7 @@ for imm in off; do + for once in on off; do + for vmstate in "" "-b"; do + +-cat > $TEST_DIR/blkdebug.conf < "$TEST_DIR/blkdebug.conf" <&1 | grep -v "refcount=1 reference=0" + +@@ -172,7 +172,7 @@ for errno in 5 28; do + for imm in off; do + for once in on off; do + +-cat > $TEST_DIR/blkdebug.conf < "$TEST_DIR/blkdebug.conf" <&1 | grep -v "refcount=1 reference=0" + +diff --git a/tests/qemu-iotests/027 b/tests/qemu-iotests/027 +index 7d90481..3fa81b8 100755 +--- a/tests/qemu-iotests/027 ++++ b/tests/qemu-iotests/027 +@@ -54,23 +54,23 @@ _make_test_img $size + # Otherwise an L2 table could get in the way after the data cluster. + echo + echo "== writing first cluster to populate metadata ==" +-$QEMU_IO -c "write -pP 0xde $cluster_size $cluster_size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -pP 0xde $cluster_size $cluster_size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== writing at sub-cluster granularity ==" +-$QEMU_IO -c "write -pP 0xa $subcluster_offset $subcluster_size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -pP 0xa $subcluster_offset $subcluster_size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify pattern ==" +-$QEMU_IO -c "read -pP 0xa $subcluster_offset $subcluster_size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -pP 0xa $subcluster_offset $subcluster_size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify zeroes before sub-cluster pattern ==" +-$QEMU_IO -c "read -pP 0 -l $subcluster_offset 0 $subcluster_size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -pP 0 -l $subcluster_offset 0 $subcluster_size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verify zeroes after sub-cluster pattern ==" +-$QEMU_IO -c "read -pP 0 -l 512 -s $subcluster_size $subcluster_offset $(( subcluster_size + 512 ))" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -pP 0 -l 512 -s $subcluster_size $subcluster_offset $(( subcluster_size + 512 ))" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/028 b/tests/qemu-iotests/028 +index b091ba9..93a9fa6 100755 +--- a/tests/qemu-iotests/028 ++++ b/tests/qemu-iotests/028 +@@ -71,8 +71,8 @@ _check_test_img + echo "Creating test image with backing file" + echo + +-mv $TEST_IMG $TEST_IMG.base +-_make_test_img -b $TEST_IMG.base $image_size ++mv "$TEST_IMG" "$TEST_IMG.base" ++_make_test_img -b "$TEST_IMG.base" $image_size + + echo "Filling test image" + echo +@@ -97,7 +97,7 @@ io_zero readv $(( offset + 32 * 1024 )) 512 1024 32 + _check_test_img + + # Rebase it on top of its base image +-$QEMU_IMG rebase -b $TEST_IMG.base $TEST_IMG ++$QEMU_IMG rebase -b "$TEST_IMG.base" "$TEST_IMG" + + _check_test_img + +diff --git a/tests/qemu-iotests/029 b/tests/qemu-iotests/029 +index 0ad5e45..b424726 100755 +--- a/tests/qemu-iotests/029 ++++ b/tests/qemu-iotests/029 +@@ -47,16 +47,16 @@ _supported_os Linux + + CLUSTER_SIZE=65536 + _make_test_img 64M +-$QEMU_IMG snapshot -c foo $TEST_IMG +-$QEMU_IO -c 'write -b 0 4k' $TEST_IMG | _filter_qemu_io +-$QEMU_IMG snapshot -a foo $TEST_IMG ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IO -c 'write -b 0 4k' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" + _check_test_img + + CLUSTER_SIZE=1024 + _make_test_img 16M +-$QEMU_IMG snapshot -c foo $TEST_IMG +-$QEMU_IO -c 'write -b 0 4M' $TEST_IMG | _filter_qemu_io +-$QEMU_IMG snapshot -a foo $TEST_IMG ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++$QEMU_IO -c 'write -b 0 4M' "$TEST_IMG" | _filter_qemu_io ++$QEMU_IMG snapshot -a foo "$TEST_IMG" + _check_test_img + + # success, all done +diff --git a/tests/qemu-iotests/031 b/tests/qemu-iotests/031 +index 2d5e3b1..c9070b0 100755 +--- a/tests/qemu-iotests/031 ++++ b/tests/qemu-iotests/031 +@@ -56,22 +56,22 @@ for IMGOPTS in "compat=0.10" "compat=1.1"; do + echo === Create image with unknown header extension === + echo + _make_test_img 64M +- ./qcow2.py $TEST_IMG add-header-ext 0x12345678 "This is a test header extension" +- ./qcow2.py $TEST_IMG dump-header ++ ./qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension" ++ ./qcow2.py "$TEST_IMG" dump-header + _check_test_img + + echo + echo === Rewrite header with no backing file === + echo +- $QEMU_IMG rebase -u -b "" $TEST_IMG +- ./qcow2.py $TEST_IMG dump-header ++ $QEMU_IMG rebase -u -b "" "$TEST_IMG" ++ ./qcow2.py "$TEST_IMG" dump-header + _check_test_img + + echo + echo === Add a backing file and format === + echo +- $QEMU_IMG rebase -u -b "/some/backing/file/path" -F host_device $TEST_IMG +- ./qcow2.py $TEST_IMG dump-header ++ $QEMU_IMG rebase -u -b "/some/backing/file/path" -F host_device "$TEST_IMG" ++ ./qcow2.py "$TEST_IMG" dump-header + done + + # success, all done +diff --git a/tests/qemu-iotests/032 b/tests/qemu-iotests/032 +index 7155568..b1ba5c3 100755 +--- a/tests/qemu-iotests/032 ++++ b/tests/qemu-iotests/032 +@@ -55,12 +55,12 @@ _make_test_img 64M + + # Allocate every other cluster so that afterwards a big write request will + # actually loop a while and issue many I/O requests for the lower layer +-for i in $(seq 0 128 4096); do echo "write ${i}k 64k"; done | $QEMU_IO $TEST_IMG | _filter_qemu_io ++for i in $(seq 0 128 4096); do echo "write ${i}k 64k"; done | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + + echo + echo === AIO request during close === + echo +-$QEMU_IO -c "aio_write 0 4M" -c "close" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "aio_write 0 4M" -c "close" "$TEST_IMG" | _filter_qemu_io + _check_test_img + + # success, all done +diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033 +index 9aee078..ea3351c 100755 +--- a/tests/qemu-iotests/033 ++++ b/tests/qemu-iotests/033 +@@ -48,24 +48,24 @@ _make_test_img $size + + echo + echo "== preparing image ==" +-$QEMU_IO -c "write -P 0xa 0x200 0x400" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0xa 0x20000 0x600" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -z 0x400 0x20000" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -z 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verifying patterns (1) ==" +-$QEMU_IO -c "read -P 0xa 0x200 0x200" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 0x400 0x20000" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xa 0x20400 0x200" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== rewriting zeroes ==" +-$QEMU_IO -c "write -P 0xb 0x10000 0x10000" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -z 0x10000 0x10000" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -z 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== verifying patterns (2) ==" +-$QEMU_IO -c "read -P 0x0 0x400 0x20000" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/034 b/tests/qemu-iotests/034 +index 8254df8..67f1959 100755 +--- a/tests/qemu-iotests/034 ++++ b/tests/qemu-iotests/034 +@@ -49,63 +49,63 @@ echo + echo "== creating backing file for COW tests ==" + + _make_test_img $size +-$QEMU_IO -c "write -P 0x55 0 1M" $TEST_IMG | _filter_qemu_io +-mv $TEST_IMG $TEST_IMG.base ++$QEMU_IO -c "write -P 0x55 0 1M" "$TEST_IMG" | _filter_qemu_io ++mv "$TEST_IMG" "$TEST_IMG.base" + +-_make_test_img -b $TEST_IMG.base 6G ++_make_test_img -b "$TEST_IMG.base" 6G + + echo + echo "== zero write with backing file ==" +-$QEMU_IO -c "write -z 64k 192k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -z 513k 13k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -z 64k 192k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -z 513k 13k" "$TEST_IMG" | _filter_qemu_io + + _check_test_img + + echo + echo "== verifying patterns (3) ==" +-$QEMU_IO -c "read -P 0x55 0 64k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 64k 192k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x55 256k 257k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 513k 13k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x55 526k 498k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 0 64k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 64k 192k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 256k 257k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 513k 13k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 526k 498k" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== overwriting zero cluster ==" +-$QEMU_IO -c "write -P 0xa 60k 8k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0xb 64k 8k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0xc 76k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0xd 252k 8k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0xe 248k 8k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0xa 60k 8k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0xb 64k 8k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0xc 76k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0xd 252k 8k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0xe 248k 8k" "$TEST_IMG" | _filter_qemu_io + + _check_test_img + + echo + echo "== verifying patterns (4) ==" +-$QEMU_IO -c "read -P 0x55 0 60k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xa 60k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xb 64k 8k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 72k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xc 76k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 80k 168k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xe 248k 8k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xd 256k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x55 260k 64k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 0 60k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xa 60k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xb 64k 8k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 72k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xc 76k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 80k 168k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xe 248k 8k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xd 256k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 260k 64k" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== re-zeroing overwritten area ==" +-$QEMU_IO -c "write -z 64k 192k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -z 64k 192k" "$TEST_IMG" | _filter_qemu_io + + _check_test_img + + echo + echo "== verifying patterns (5) ==" +-$QEMU_IO -c "read -P 0x55 0 60k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xa 60k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 64k 192k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0xd 256k 4k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x55 260k 253k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 513k 13k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x55 526k 498k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 0 60k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xa 60k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 64k 192k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0xd 256k 4k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 260k 253k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x0 513k 13k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x55 526k 498k" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/035 b/tests/qemu-iotests/035 +index 9d2d347..ebe9b8c 100755 +--- a/tests/qemu-iotests/035 ++++ b/tests/qemu-iotests/035 +@@ -59,7 +59,7 @@ function generate_requests() { + done + } + +-generate_requests | $QEMU_IO $TEST_IMG | _filter_qemu_io |\ ++generate_requests | $QEMU_IO "$TEST_IMG" | _filter_qemu_io |\ + sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g' + + echo +diff --git a/tests/qemu-iotests/036 b/tests/qemu-iotests/036 +index 4dbfc57..e049a64 100755 +--- a/tests/qemu-iotests/036 ++++ b/tests/qemu-iotests/036 +@@ -53,15 +53,15 @@ IMGOPTS="compat=1.1" + echo === Create image with unknown autoclear feature bit === + echo + _make_test_img 64M +-./qcow2.py $TEST_IMG set-feature-bit autoclear 63 +-./qcow2.py $TEST_IMG dump-header ++./qcow2.py "$TEST_IMG" set-feature-bit autoclear 63 ++./qcow2.py "$TEST_IMG" dump-header + + echo + echo === Repair image === + echo + _check_test_img -r all + +-./qcow2.py $TEST_IMG dump-header ++./qcow2.py "$TEST_IMG" dump-header + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/037 b/tests/qemu-iotests/037 +index c11460b..743bae3 100755 +--- a/tests/qemu-iotests/037 ++++ b/tests/qemu-iotests/037 +@@ -66,50 +66,50 @@ function backing_io() + done + } + +-backing_io 0 256 write | $QEMU_IO $TEST_IMG | _filter_qemu_io ++backing_io 0 256 write | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + +-mv $TEST_IMG $TEST_IMG.base ++mv "$TEST_IMG" "$TEST_IMG.base" + +-_make_test_img -b $TEST_IMG.base 6G ++_make_test_img -b "$TEST_IMG.base" 6G + + echo + echo "== COW in a single cluster ==" +-$QEMU_IO -c "write -P 0x77 0 2k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0x88 6k 2k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0x99 9k 2k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x77 0 2k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x88 6k 2k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x99 9k 2k" "$TEST_IMG" | _filter_qemu_io + +-$QEMU_IO -c "read -P 0x77 0 2k" $TEST_IMG | _filter_qemu_io +-backing_io $((2 * 1024)) 8 read | $QEMU_IO $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x88 6k 2k" $TEST_IMG | _filter_qemu_io +-backing_io $((8 * 1024)) 2 read | $QEMU_IO $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x99 9k 2k" $TEST_IMG | _filter_qemu_io +-backing_io $((11 * 1024)) 2 read | $QEMU_IO $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x77 0 2k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((2 * 1024)) 8 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x88 6k 2k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((8 * 1024)) 2 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x99 9k 2k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((11 * 1024)) 2 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + + echo + echo "== COW in two-cluster allocations ==" +-$QEMU_IO -c "write -P 0x77 16k 6k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0x88 26k 6k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0x99 33k 5k" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x77 16k 6k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x88 26k 6k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x99 33k 5k" "$TEST_IMG" | _filter_qemu_io + +-$QEMU_IO -c "read -P 0x77 16k 6k" $TEST_IMG | _filter_qemu_io +-backing_io $((22 * 1024)) 8 read | $QEMU_IO $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x88 26k 6k" $TEST_IMG | _filter_qemu_io +-backing_io $((32 * 1024)) 2 read | $QEMU_IO $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x99 33k 5k" $TEST_IMG | _filter_qemu_io +-backing_io $((38 * 1024)) 4 read | $QEMU_IO $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x77 16k 6k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((22 * 1024)) 8 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x88 26k 6k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((32 * 1024)) 2 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x99 33k 5k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((38 * 1024)) 4 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + + echo + echo "== COW in multi-cluster allocations ==" +-$QEMU_IO -c "write -P 0x77 48k 15k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0x88 66k 14k" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "write -P 0x99 83k 15k" $TEST_IMG | _filter_qemu_io +- +-$QEMU_IO -c "read -P 0x77 48k 15k" $TEST_IMG | _filter_qemu_io +-backing_io $((63 * 1024)) 6 read | $QEMU_IO $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x88 66k 14k" $TEST_IMG | _filter_qemu_io +-backing_io $((80 * 1024)) 6 read | $QEMU_IO $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0x99 83k 15k" $TEST_IMG | _filter_qemu_io +-backing_io $((98 * 1024)) 4 read | $QEMU_IO $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x77 48k 15k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x88 66k 14k" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "write -P 0x99 83k 15k" "$TEST_IMG" | _filter_qemu_io ++ ++$QEMU_IO -c "read -P 0x77 48k 15k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((63 * 1024)) 6 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x88 66k 14k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((80 * 1024)) 6 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0x99 83k 15k" "$TEST_IMG" | _filter_qemu_io ++backing_io $((98 * 1024)) 4 read | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + + _check_test_img + +diff --git a/tests/qemu-iotests/038 b/tests/qemu-iotests/038 +index 90de1a7..7bb7906 100755 +--- a/tests/qemu-iotests/038 ++++ b/tests/qemu-iotests/038 +@@ -66,11 +66,11 @@ function backing_io() + done + } + +-backing_io 0 256 write | $QEMU_IO $TEST_IMG | _filter_qemu_io ++backing_io 0 256 write | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + +-mv $TEST_IMG $TEST_IMG.base ++mv "$TEST_IMG" "$TEST_IMG.base" + +-_make_test_img -b $TEST_IMG.base 6G ++_make_test_img -b "$TEST_IMG.base" 6G + + echo + echo "== Some concurrent requests touching the same cluster ==" +@@ -94,7 +94,7 @@ function overlay_io() + echo aio_write -P 0x90 4080k 80k + } + +-overlay_io | $QEMU_IO $TEST_IMG | _filter_qemu_io |\ ++overlay_io | $QEMU_IO "$TEST_IMG" | _filter_qemu_io |\ + sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g' \ + -e 's/qemu-io> //g' | paste - - | sort | tr '\t' '\n' + +@@ -124,7 +124,7 @@ function verify_io() + done + } + +-verify_io | $QEMU_IO $TEST_IMG | _filter_qemu_io ++verify_io | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + + _check_test_img + +diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039 +index ae35175..f85b4ce 100755 +--- a/tests/qemu-iotests/039 ++++ b/tests/qemu-iotests/039 +@@ -54,10 +54,10 @@ echo "== Checking that image is clean on shutdown ==" + IMGOPTS="compat=1.1,lazy_refcounts=on" + _make_test_img $size + +-$QEMU_IO -c "write -P 0x5a 0 512" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x5a 0 512" ""$TEST_IMG"" | _filter_qemu_io + + # The dirty bit must not be set +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + _check_test_img + + echo +@@ -68,20 +68,20 @@ _make_test_img $size + + old_ulimit=$(ulimit -c) + ulimit -c 0 # do not produce a core dump on abort(3) +-$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io + ulimit -c "$old_ulimit" + + # The dirty bit must be set +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + _check_test_img + + echo + echo "== Read-only access must still work ==" + +-$QEMU_IO -r -c "read -P 0x5a 0 512" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io + + # The dirty bit must be set +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + echo + echo "== Repairing the image file must succeed ==" +@@ -89,12 +89,12 @@ echo "== Repairing the image file must succeed ==" + _check_test_img -r all + + # The dirty bit must not be set +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + echo + echo "== Data should still be accessible after repair ==" + +-$QEMU_IO -c "read -P 0x5a 0 512" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== Opening a dirty image read/write should repair it ==" +@@ -104,16 +104,16 @@ _make_test_img $size + + old_ulimit=$(ulimit -c) + ulimit -c 0 # do not produce a core dump on abort(3) +-$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io + ulimit -c "$old_ulimit" + + # The dirty bit must be set +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + +-$QEMU_IO -c "write 0 512" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io + + # The dirty bit must not be set +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + echo + echo "== Creating an image file with lazy_refcounts=off ==" +@@ -123,11 +123,11 @@ _make_test_img $size + + old_ulimit=$(ulimit -c) + ulimit -c 0 # do not produce a core dump on abort(3) +-$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io + ulimit -c "$old_ulimit" + + # The dirty bit must not be set since lazy_refcounts=off +-./qcow2.py $TEST_IMG dump-header | grep incompatible_features ++./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + _check_test_img + + # success, all done +diff --git a/tests/qemu-iotests/042 b/tests/qemu-iotests/042 +index 16b2fdb..94ce3a9 100755 +--- a/tests/qemu-iotests/042 ++++ b/tests/qemu-iotests/042 +@@ -48,27 +48,27 @@ echo "== Creating zero size image ==" + _make_test_img 0 + _check_test_img + +-mv $TEST_IMG $TEST_IMG.orig ++mv "$TEST_IMG" "$TEST_IMG.orig" + + echo + echo "== Converting the image ==" + +-$QEMU_IMG convert -O $IMGFMT $TEST_IMG.orig $TEST_IMG ++$QEMU_IMG convert -O $IMGFMT "$TEST_IMG.orig" "$TEST_IMG" + _check_test_img + + echo + echo "== Converting the image, compressed ==" + + if [ "$IMGFMT" == "qcow2" ]; then +- $QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG ++ $QEMU_IMG convert -c -O $IMGFMT "$TEST_IMG.orig" "$TEST_IMG" + fi + _check_test_img + + echo + echo "== Rebasing the image ==" + +-$QEMU_IMG rebase -u -b $TEST_IMG.orig $TEST_IMG +-$QEMU_IMG rebase -b $TEST_IMG.orig $TEST_IMG ++$QEMU_IMG rebase -u -b "$TEST_IMG.orig" "$TEST_IMG" ++$QEMU_IMG rebase -b "$TEST_IMG.orig" "$TEST_IMG" + _check_test_img + + # success, all done +diff --git a/tests/qemu-iotests/043 b/tests/qemu-iotests/043 +index 478773d..d7f1231 100755 +--- a/tests/qemu-iotests/043 ++++ b/tests/qemu-iotests/043 +@@ -31,7 +31,7 @@ status=1 # failure is the default! + _cleanup() + { + _cleanup_test_img +- rm -f $TEST_IMG.[123].base ++ rm -f "$TEST_IMG".[123].base + } + trap "_cleanup; exit \$status" 0 1 2 3 15 + +@@ -47,39 +47,39 @@ _supported_os Linux + + size=128M + _make_test_img $size +-$QEMU_IMG rebase -u -b $TEST_IMG $TEST_IMG ++$QEMU_IMG rebase -u -b "$TEST_IMG" "$TEST_IMG" + + echo + echo "== backing file references self ==" + _img_info --backing-chain + + _make_test_img $size +-mv $TEST_IMG $TEST_IMG.base +-_make_test_img -b $TEST_IMG.base $size +-$QEMU_IMG rebase -u -b $TEST_IMG $TEST_IMG.base ++mv "$TEST_IMG" "$TEST_IMG.base" ++_make_test_img -b "$TEST_IMG.base" $size ++$QEMU_IMG rebase -u -b "$TEST_IMG" "$TEST_IMG.base" + + echo + echo "== parent references self ==" + _img_info --backing-chain + + _make_test_img $size +-mv $TEST_IMG $TEST_IMG.1.base +-_make_test_img -b $TEST_IMG.1.base $size +-mv $TEST_IMG $TEST_IMG.2.base +-_make_test_img -b $TEST_IMG.2.base $size +-mv $TEST_IMG $TEST_IMG.3.base +-_make_test_img -b $TEST_IMG.3.base $size +-$QEMU_IMG rebase -u -b $TEST_IMG.2.base $TEST_IMG.1.base ++mv "$TEST_IMG" "$TEST_IMG.1.base" ++_make_test_img -b "$TEST_IMG.1.base" $size ++mv "$TEST_IMG" "$TEST_IMG.2.base" ++_make_test_img -b "$TEST_IMG.2.base" $size ++mv "$TEST_IMG" "$TEST_IMG.3.base" ++_make_test_img -b "$TEST_IMG.3.base" $size ++$QEMU_IMG rebase -u -b "$TEST_IMG.2.base" "$TEST_IMG.1.base" + + echo + echo "== ancestor references another ancestor ==" + _img_info --backing-chain + + _make_test_img $size +-mv $TEST_IMG $TEST_IMG.1.base +-_make_test_img -b $TEST_IMG.1.base $size +-mv $TEST_IMG $TEST_IMG.2.base +-_make_test_img -b $TEST_IMG.2.base $size ++mv "$TEST_IMG" "$TEST_IMG.1.base" ++_make_test_img -b "$TEST_IMG.1.base" $size ++mv "$TEST_IMG" "$TEST_IMG.2.base" ++_make_test_img -b "$TEST_IMG.2.base" $size + + echo + echo "== finite chain of length 3 (human) ==" +diff --git a/tests/qemu-iotests/046 b/tests/qemu-iotests/046 +index 987bfff..3f17ceb 100755 +--- a/tests/qemu-iotests/046 ++++ b/tests/qemu-iotests/046 +@@ -66,11 +66,11 @@ function backing_io() + done + } + +-backing_io 0 32 write | $QEMU_IO $TEST_IMG | _filter_qemu_io ++backing_io 0 32 write | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + +-mv $TEST_IMG $TEST_IMG.base ++mv "$TEST_IMG" "$TEST_IMG.base" + +-_make_test_img -b $TEST_IMG.base 6G ++_make_test_img -b "$TEST_IMG.base" 6G + + echo + echo "== Some concurrent requests touching the same cluster ==" +@@ -185,7 +185,7 @@ aio_flush + EOF + } + +-overlay_io | $QEMU_IO blkdebug::$TEST_IMG | _filter_qemu_io |\ ++overlay_io | $QEMU_IO blkdebug::"$TEST_IMG" | _filter_qemu_io |\ + sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g' + + echo +@@ -252,7 +252,7 @@ function verify_io() + echo read -P 17 0x11c000 0x4000 + } + +-verify_io | $QEMU_IO $TEST_IMG | _filter_qemu_io ++verify_io | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + + _check_test_img + +diff --git a/tests/qemu-iotests/047 b/tests/qemu-iotests/047 +index 0cf36b4..c35cd09 100755 +--- a/tests/qemu-iotests/047 ++++ b/tests/qemu-iotests/047 +@@ -66,7 +66,7 @@ read -P 0x55 1M 128k + EOF + } + +-qemu_io_cmds | $QEMU_IO $TEST_IMG | _filter_qemu_io ++qemu_io_cmds | $QEMU_IO "$TEST_IMG" | _filter_qemu_io + _check_test_img + + # success, all done +diff --git a/tests/qemu-iotests/048 b/tests/qemu-iotests/048 +index 7cce049..9b9d118 100755 +--- a/tests/qemu-iotests/048 ++++ b/tests/qemu-iotests/048 +@@ -31,13 +31,13 @@ _cleanup() + { + echo "Cleanup" + _cleanup_test_img +- rm ${TEST_IMG2} ++ rm "${TEST_IMG2}" + } + trap "_cleanup; exit \$status" 0 1 2 3 15 + + _compare() + { +- $QEMU_IMG compare "$@" $TEST_IMG ${TEST_IMG2} ++ $QEMU_IMG compare "$@" "$TEST_IMG" "${TEST_IMG2}" + echo $? + } + +@@ -59,12 +59,12 @@ _make_test_img $size + io_pattern write 524288 $CLUSTER_SIZE $CLUSTER_SIZE 4 45 + + # Compare identical images +-cp $TEST_IMG ${TEST_IMG2} ++cp "$TEST_IMG" "${TEST_IMG2}" + _compare + _compare -q + + # Compare images with different size +-$QEMU_IMG resize $TEST_IMG +512M ++$QEMU_IMG resize "$TEST_IMG" +512M + _compare + _compare -s + +diff --git a/tests/qemu-iotests/049 b/tests/qemu-iotests/049 +index 6c6017e..93aa0ea 100755 +--- a/tests/qemu-iotests/049 ++++ b/tests/qemu-iotests/049 +@@ -63,13 +63,13 @@ sizes+="1024.0 1024.0b 1.5k 1.5K 1.5M 1.5G 1.5T" + echo "== 1. Traditional size parameter ==" + echo + for s in $sizes; do +- test_qemu_img create -f $IMGFMT $TEST_IMG $s ++ test_qemu_img create -f $IMGFMT "$TEST_IMG" $s + done + + echo "== 2. Specifying size via -o ==" + echo + for s in $sizes; do +- test_qemu_img create -f $IMGFMT -o size=$s $TEST_IMG ++ test_qemu_img create -f $IMGFMT -o size=$s "$TEST_IMG" + done + + echo "== 3. Invalid sizes ==" +@@ -77,8 +77,8 @@ echo + sizes="-1024 -1k 1kilobyte foobar" + + for s in $sizes; do +- test_qemu_img create -f $IMGFMT $TEST_IMG -- $s +- test_qemu_img create -f $IMGFMT -o size=$s $TEST_IMG ++ test_qemu_img create -f $IMGFMT "$TEST_IMG" -- $s ++ test_qemu_img create -f $IMGFMT -o size=$s "$TEST_IMG" + done + + echo "== Check correct interpretation of suffixes for cluster size ==" +@@ -87,35 +87,35 @@ sizes="1024 1024b 1k 1K 1M " + sizes+="1024.0 1024.0b 0.5k 0.5K 0.5M" + + for s in $sizes; do +- test_qemu_img create -f $IMGFMT -o cluster_size=$s $TEST_IMG 64M ++ test_qemu_img create -f $IMGFMT -o cluster_size=$s "$TEST_IMG" 64M + done + + echo "== Check compat level option ==" + echo +-test_qemu_img create -f $IMGFMT -o compat=0.10 $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o compat=1.1 $TEST_IMG 64M ++test_qemu_img create -f $IMGFMT -o compat=0.10 "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o compat=1.1 "$TEST_IMG" 64M + +-test_qemu_img create -f $IMGFMT -o compat=0.42 $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o compat=foobar $TEST_IMG 64M ++test_qemu_img create -f $IMGFMT -o compat=0.42 "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o compat=foobar "$TEST_IMG" 64M + + echo "== Check preallocation option ==" + echo +-test_qemu_img create -f $IMGFMT -o preallocation=off $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o preallocation=metadata $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o preallocation=1234 $TEST_IMG 64M ++test_qemu_img create -f $IMGFMT -o preallocation=off "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o preallocation=metadata "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o preallocation=1234 "$TEST_IMG" 64M + + echo "== Check encryption option ==" + echo +-test_qemu_img create -f $IMGFMT -o encryption=off $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o encryption=on $TEST_IMG 64M ++test_qemu_img create -f $IMGFMT -o encryption=off "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o encryption=on "$TEST_IMG" 64M + + echo "== Check lazy_refcounts option (only with v3) ==" + echo +-test_qemu_img create -f $IMGFMT -o compat=1.1,lazy_refcounts=off $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o compat=1.1,lazy_refcounts=on $TEST_IMG 64M ++test_qemu_img create -f $IMGFMT -o compat=1.1,lazy_refcounts=off "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o compat=1.1,lazy_refcounts=on "$TEST_IMG" 64M + +-test_qemu_img create -f $IMGFMT -o compat=0.10,lazy_refcounts=off $TEST_IMG 64M +-test_qemu_img create -f $IMGFMT -o compat=0.10,lazy_refcounts=on $TEST_IMG 64M ++test_qemu_img create -f $IMGFMT -o compat=0.10,lazy_refcounts=off "$TEST_IMG" 64M ++test_qemu_img create -f $IMGFMT -o compat=0.10,lazy_refcounts=on "$TEST_IMG" 64M + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/050 b/tests/qemu-iotests/050 +index 05793e2..07802bc 100755 +--- a/tests/qemu-iotests/050 ++++ b/tests/qemu-iotests/050 +@@ -31,8 +31,8 @@ status=1 # failure is the default! + _cleanup() + { + _cleanup_test_img +- rm -f $TEST_IMG.old +- rm -f $TEST_IMG.new ++ rm -f "$TEST_IMG.old" ++ rm -f "$TEST_IMG.new" + } + trap "_cleanup; exit \$status" 0 1 2 3 15 + +@@ -53,21 +53,21 @@ echo "== Creating images ==" + + size=10M + _make_test_img $size +-$QEMU_IO -c "write -P 0x40 0 1048576" $TEST_IMG | _filter_qemu_io +-mv $TEST_IMG $TEST_IMG.old ++$QEMU_IO -c "write -P 0x40 0 1048576" "$TEST_IMG" | _filter_qemu_io ++mv "$TEST_IMG" "$TEST_IMG.old" + + _make_test_img $size +-$QEMU_IO -c "write -P 0x5a 0 1048576" $TEST_IMG | _filter_qemu_io +-mv $TEST_IMG $TEST_IMG.new ++$QEMU_IO -c "write -P 0x5a 0 1048576" "$TEST_IMG" | _filter_qemu_io ++mv "$TEST_IMG" "$TEST_IMG.new" + +-_make_test_img -b $TEST_IMG.old $size +-$QEMU_IO -c "write -z 0 1048576" $TEST_IMG | _filter_qemu_io ++_make_test_img -b "$TEST_IMG.old" $size ++$QEMU_IO -c "write -z 0 1048576" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== Rebasing the image ==" + +-$QEMU_IMG rebase -b $TEST_IMG.new $TEST_IMG +-$QEMU_IO -c "read -P 0x00 0 1048576" $TEST_IMG | _filter_qemu_io ++$QEMU_IMG rebase -b "$TEST_IMG.new" "$TEST_IMG" ++$QEMU_IO -c "read -P 0x00 0 1048576" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051 +index 93a2797..b8775b6 100755 +--- a/tests/qemu-iotests/051 ++++ b/tests/qemu-iotests/051 +@@ -62,21 +62,21 @@ echo + echo === Unknown option === + echo + +-run_qemu -drive file=$TEST_IMG,format=qcow2,unknown_opt= +-run_qemu -drive file=$TEST_IMG,format=qcow2,unknown_opt=on +-run_qemu -drive file=$TEST_IMG,format=qcow2,unknown_opt=1234 +-run_qemu -drive file=$TEST_IMG,format=qcow2,unknown_opt=foo ++run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt= ++run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=on ++run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=1234 ++run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=foo + + + echo + echo === Enable and disable lazy refcounting on the command line, plus some invalid values === + echo + +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=on +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=off +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts= +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=42 +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=foo ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=on ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=off ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts= ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=42 ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=foo + + + echo +@@ -85,8 +85,8 @@ echo + + _make_test_img -ocompat=0.10 $size + +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=on +-run_qemu -drive file=$TEST_IMG,format=qcow2,lazy-refcounts=off ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=on ++run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=off + + echo + echo === No medium === +@@ -112,21 +112,21 @@ echo + echo === Read-only === + echo + +-run_qemu -drive file=$TEST_IMG,if=floppy,readonly=on +-run_qemu -drive file=$TEST_IMG,if=ide,media=cdrom,readonly=on +-#run_qemu -drive file=$TEST_IMG,if=scsi,media=cdrom,readonly=on ++run_qemu -drive file="$TEST_IMG",if=floppy,readonly=on ++run_qemu -drive file="$TEST_IMG",if=ide,media=cdrom,readonly=on ++#run_qemu -drive file="$TEST_IMG",if=scsi,media=cdrom,readonly=on + +-run_qemu -drive file=$TEST_IMG,if=ide,readonly=on +-run_qemu -drive file=$TEST_IMG,if=virtio,readonly=on +-#run_qemu -drive file=$TEST_IMG,if=scsi,readonly=on ++run_qemu -drive file="$TEST_IMG",if=ide,readonly=on ++run_qemu -drive file="$TEST_IMG",if=virtio,readonly=on ++#run_qemu -drive file="$TEST_IMG",if=scsi,readonly=on + +-run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device ide-cd,drive=disk +-#run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk ++run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device ide-cd,drive=disk ++#run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk + +-run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device ide-drive,drive=disk +-run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device ide-hd,drive=disk +-#run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk +-#run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk ++run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device ide-drive,drive=disk ++run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device ide-hd,drive=disk ++#run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk ++#run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk + + echo + echo === Cache modes === +@@ -146,8 +146,8 @@ echo + echo === Specifying the protocol layer === + echo + +-run_qemu -drive file=$TEST_IMG,file.driver=file +-run_qemu -drive file=$TEST_IMG,file.driver=qcow2 ++run_qemu -drive file="$TEST_IMG",file.driver=file ++run_qemu -drive file="$TEST_IMG",file.driver=qcow2 + + echo + echo === Parsing protocol from file name === +diff --git a/tests/qemu-iotests/052 b/tests/qemu-iotests/052 +index 14a5126..f955b69 100755 +--- a/tests/qemu-iotests/052 ++++ b/tests/qemu-iotests/052 +@@ -48,12 +48,12 @@ _make_test_img $size + + echo + echo "== reading whole image ==" +-$QEMU_IO -s -c "read 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -s -c "read 0 $size" "$TEST_IMG" | _filter_qemu_io + + echo + echo "== writing whole image does not modify image ==" +-$QEMU_IO -s -c "write -P 0xa 0 $size" $TEST_IMG | _filter_qemu_io +-$QEMU_IO -c "read -P 0 0 $size" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -s -c "write -P 0xa 0 $size" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -P 0 0 $size" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/053 b/tests/qemu-iotests/053 +index bc56992..e589e5f 100755 +--- a/tests/qemu-iotests/053 ++++ b/tests/qemu-iotests/053 +@@ -30,7 +30,7 @@ status=1 # failure is the default! + + _cleanup() + { +- rm -f $TEST_IMG.orig ++ rm -f "$TEST_IMG.orig" + _cleanup_test_img + } + trap "_cleanup; exit \$status" 0 1 2 3 15 +@@ -47,13 +47,13 @@ echo + echo "== Creating single sector image ==" + + _make_test_img 512 +-$QEMU_IO -c "write -P0xa 0 512" $TEST_IMG | _filter_qemu_io +-mv $TEST_IMG $TEST_IMG.orig ++$QEMU_IO -c "write -P0xa 0 512" "$TEST_IMG" | _filter_qemu_io ++mv "$TEST_IMG" "$TEST_IMG.orig" + + echo + echo "== Converting the image, compressed ==" + +-$QEMU_IMG convert -c -O $IMGFMT $TEST_IMG.orig $TEST_IMG ++$QEMU_IMG convert -c -O $IMGFMT "$TEST_IMG.orig" "$TEST_IMG" + _check_test_img + + echo +@@ -64,7 +64,7 @@ _img_info | grep '^virtual size:' + echo + echo "== Verifying the compressed image ==" + +-$QEMU_IO -c "read -P0xa 0 512" $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c "read -P0xa 0 512" "$TEST_IMG" | _filter_qemu_io + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/054 b/tests/qemu-iotests/054 +index b360429..5a0d1b1 100755 +--- a/tests/qemu-iotests/054 ++++ b/tests/qemu-iotests/054 +@@ -49,7 +49,7 @@ _make_test_img $((1024*1024))T + echo + echo "creating too large image (1 EB) using qcow2.py" + _make_test_img 4G +-./qcow2.py $TEST_IMG set-header size $((1024 ** 6)) ++./qcow2.py "$TEST_IMG" set-header size $((1024 ** 6)) + _check_test_img + + # success, all done +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index d2b3f9e..dd6addf 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -51,20 +51,20 @@ echo "=== Testing invalid granularity ===" + echo + _make_test_img 64M + poke_file "$TEST_IMG" "$granularity_offset" "\xff\xff\xff\xff\xff\xff\xff\xff" +-{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir + + echo "=== Testing too big L2 table size ===" + echo + _make_test_img 64M + poke_file "$TEST_IMG" "$grain_table_size_offset" "\xff\xff\xff\xff" +-{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir + + echo "=== Testing too big L1 table size ===" + echo + _make_test_img 64M + poke_file "$TEST_IMG" "$capacity_offset" "\xff\xff\xff\xff" + poke_file "$TEST_IMG" "$grain_table_size_offset" "\x01\x00\x00\x00" +-{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir + + echo "=== Testing monolithicFlat creation and opening ===" + echo +diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063 +index de0cbbd..2ab8f20 100644 +--- a/tests/qemu-iotests/063 ++++ b/tests/qemu-iotests/063 +@@ -32,7 +32,7 @@ status=1 # failure is the default! + _cleanup() + { + _cleanup_test_img +- rm -f $TEST_IMG.orig $TEST_IMG.raw $TEST_IMG.raw2 ++ rm -f "$TEST_IMG.orig" "$TEST_IMG.raw" "$TEST_IMG.raw2" + } + trap "_cleanup; exit \$status" 0 1 2 3 15 + +@@ -49,47 +49,47 @@ _make_test_img 4M + + echo "== Testing conversion with -n fails with no target file ==" + # check .orig file does not exist +-rm -f $TEST_IMG.orig +-if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG $TEST_IMG.orig >/dev/null 2>&1; then ++rm -f "$TEST_IMG.orig" ++if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n "$TEST_IMG" "$TEST_IMG.orig" >/dev/null 2>&1; then + exit 1 + fi + + echo "== Testing conversion with -n succeeds with a target file ==" +-rm -f $TEST_IMG.orig +-cp $TEST_IMG $TEST_IMG.orig +-if ! $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG $TEST_IMG.orig ; then ++rm -f "$TEST_IMG.orig" ++cp "$TEST_IMG" "$TEST_IMG.orig" ++if ! $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n "$TEST_IMG" "$TEST_IMG.orig" ; then + exit 1 + fi + + echo "== Testing conversion to raw is the same after conversion with -n ==" + # compare the raw files +-if ! $QEMU_IMG convert -f $IMGFMT -O raw $TEST_IMG $TEST_IMG.raw1 ; then ++if ! $QEMU_IMG convert -f $IMGFMT -O raw "$TEST_IMG" "$TEST_IMG.raw1" ; then + exit 1 + fi + +-if ! $QEMU_IMG convert -f $IMGFMT -O raw $TEST_IMG.orig $TEST_IMG.raw2 ; then ++if ! $QEMU_IMG convert -f $IMGFMT -O raw "$TEST_IMG.orig" "$TEST_IMG.raw2" ; then + exit 1 + fi + +-if ! cmp $TEST_IMG.raw1 $TEST_IMG.raw2 ; then ++if ! cmp "$TEST_IMG.raw1" "$TEST_IMG.raw2" ; then + exit 1 + fi + + echo "== Testing conversion back to original format ==" +-if ! $QEMU_IMG convert -f raw -O $IMGFMT -n $TEST_IMG.raw2 $TEST_IMG ; then ++if ! $QEMU_IMG convert -f raw -O $IMGFMT -n "$TEST_IMG.raw2" "$TEST_IMG" ; then + exit 1 + fi + _check_test_img + + echo "== Testing conversion to a smaller file fails ==" +-rm -f $TEST_IMG.orig +-mv $TEST_IMG $TEST_IMG.orig ++rm -f "$TEST_IMG.orig" ++mv "$TEST_IMG" "$TEST_IMG.orig" + _make_test_img 2M +-if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n $TEST_IMG.orig $TEST_IMG >/dev/null 2>&1; then ++if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n "$TEST_IMG.orig" "$TEST_IMG" >/dev/null 2>&1; then + exit 1 + fi + +-rm -f $TEST_IMG.orig $TEST_IMG.raw $TEST_IMG.raw2 ++rm -f "$TEST_IMG.orig" "$TEST_IMG.raw" "$TEST_IMG.raw2" + + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 6730955..1b22db0 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -164,12 +164,12 @@ _cleanup_test_img() + + nbd) + kill $QEMU_NBD_PID +- rm -f $TEST_IMG_FILE ++ rm -f "$TEST_IMG_FILE" + ;; + file) +- rm -f $TEST_DIR/t.$IMGFMT +- rm -f $TEST_DIR/t.$IMGFMT.orig +- rm -f $TEST_DIR/t.$IMGFMT.base ++ rm -f "$TEST_DIR/t.$IMGFMT" ++ rm -f "$TEST_DIR/t.$IMGFMT.orig" ++ rm -f "$TEST_DIR/t.$IMGFMT.base" + if [ -n "$SAMPLE_IMG_FILE" ] + then + rm -f "$TEST_DIR/$SAMPLE_IMG_FILE" +@@ -177,11 +177,11 @@ _cleanup_test_img() + ;; + + rbd) +- rbd rm $TEST_DIR/t.$IMGFMT > /dev/null ++ rbd rm "$TEST_DIR/t.$IMGFMT" > /dev/null + ;; + + sheepdog) +- collie vdi delete $TEST_DIR/t.$IMGFMT ++ collie vdi delete "$TEST_DIR/t.$IMGFMT" + ;; + + esac +@@ -189,7 +189,7 @@ _cleanup_test_img() + + _check_test_img() + { +- $QEMU_IMG check "$@" -f $IMGFMT $TEST_IMG 2>&1 | _filter_testdir | \ ++ $QEMU_IMG check "$@" -f $IMGFMT "$TEST_IMG" 2>&1 | _filter_testdir | \ + sed -e '/allocated.*fragmented.*compressed clusters/d' \ + -e 's/qemu-img: This image format does not support checks/No errors were found on the image./' \ + -e '/Image end offset: [0-9]\+/d' +@@ -197,7 +197,7 @@ _check_test_img() + + _img_info() + { +- $QEMU_IMG info "$@" $TEST_IMG 2>&1 | \ ++ $QEMU_IMG info "$@" "$TEST_IMG" 2>&1 | \ + sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \ + -e "s#$TEST_DIR#TEST_DIR#g" \ + -e "s#$IMGFMT#IMGFMT#g" \ +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Remaining-error-propagation-adjustments.patch b/SOURCES/kvm-qemu-iotests-Remaining-error-propagation-adjustments.patch new file mode 100644 index 0000000..31c929a --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Remaining-error-propagation-adjustments.patch @@ -0,0 +1,100 @@ +From b1ee83f0ffaac613717792a9681b0f1f79fcc108 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 29 Dec 2013 22:06:55 +0100 +Subject: [PATCH 4/8] qemu-iotests: Remaining error propagation adjustments + +RH-Author: Max Reitz +Message-id: <1388354817-3013-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 56445 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/5] qemu-iotests: Remaining error propagation adjustments +Bugzilla: 1004347 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1004347 + +This downstream-only patch contains the hunks which have been omitted +when aaf2d00ea8cd6479c5dd15773660e0699472af1c was cherry-picked from +2c78857bf6a9b5d06e17533b8f40fee14e087987, i.e., fixes tests 054 and 060. + +Furthermore, this sets the executable bit for the tests 060, 063 and 067 +(which, for some reason, have been cleared until now). + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/054.out | 4 ++-- + tests/qemu-iotests/060 | 2 +- + tests/qemu-iotests/060.out | 3 +-- + tests/qemu-iotests/063 | 0 + tests/qemu-iotests/067 | 0 + 5 files changed, 4 insertions(+), 5 deletions(-) + mode change 100644 => 100755 tests/qemu-iotests/060 + mode change 100644 => 100755 tests/qemu-iotests/063 + mode change 100644 => 100755 tests/qemu-iotests/067 + +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +old mode 100644 +new mode 100755 +index 65bb09f..9bbc43b +diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063 +old mode 100644 +new mode 100755 +diff --git a/tests/qemu-iotests/067 b/tests/qemu-iotests/067 +old mode 100644 +new mode 100755 + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/054.out | 4 ++-- + tests/qemu-iotests/060 | 2 +- + tests/qemu-iotests/060.out | 3 +-- + 3 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/tests/qemu-iotests/054.out b/tests/qemu-iotests/054.out +index 0b2fe30..7161d6e 100644 +--- a/tests/qemu-iotests/054.out ++++ b/tests/qemu-iotests/054.out +@@ -1,10 +1,10 @@ + QA output created by 054 + + creating too large image (1 EB) +-qemu-img: The image size is too large for file format 'qcow2' ++qemu-img: TEST_DIR/t.IMGFMT: The image size is too large for file format 'IMGFMT' (try using a larger cluster size) + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1152921504606846976 + + creating too large image (1 EB) using qcow2.py + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294967296 +-qemu-img: Could not open 'TEST_DIR/t.qcow2': File too large ++qemu-img: Could not open 'TEST_DIR/t.qcow2': Image is too big + *** done +diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060 +index 65bb09f..9bbc43b 100644 +--- a/tests/qemu-iotests/060 ++++ b/tests/qemu-iotests/060 +@@ -71,7 +71,7 @@ $QEMU_IO -c "write -P 0x2a 0 512" "$TEST_IMG" | _filter_qemu_io + ./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features + + # Try to open the image R/W (which should fail) +-$QEMU_IO -c "read 0 512" "$TEST_IMG" 2>&1 | _filter_qemu_io | sed -e "s/can't open device .*$/can't open device/" ++$QEMU_IO -c "read 0 512" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir | _filter_imgfmt + + # Try to open it RO (which should succeed) + $QEMU_IO -c "read 0 512" -r "$TEST_IMG" | _filter_qemu_io +diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out +index ca4583a..648f743 100644 +--- a/tests/qemu-iotests/060.out ++++ b/tests/qemu-iotests/060.out +@@ -11,8 +11,7 @@ incompatible_features 0x0 + qcow2: Preventing invalid write on metadata (overlaps with active L1 table); image marked as corrupt. + write failed: Input/output error + incompatible_features 0x2 +-qcow2: Image is corrupt; cannot be opened read/write. +-qemu-io: can't open device ++qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write + no file open, try 'help open' + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Remove-lsi53c895a-tests-from-051.patch b/SOURCES/kvm-qemu-iotests-Remove-lsi53c895a-tests-from-051.patch new file mode 100644 index 0000000..77e5d95 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Remove-lsi53c895a-tests-from-051.patch @@ -0,0 +1,184 @@ +From 9dcde11f25f85804f31d00fc45eed16595aebeec Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 18 Sep 2013 10:31:44 +0200 +Subject: [PATCH 38/38] qemu-iotests: Remove lsi53c895a tests from 051 + +Message-id: <1379499002-5231-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 54437 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 6/6] qemu-iotests: Remove lsi53c895a tests from 051 +Bugzilla: 1006959 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1006959 +Upstream: N/A, RHEL-only + +LSI SCSI is disabled in RHEL7, the corresponding checks in 051 are +therefore bound to fail. This patch removes these checks and their +expected output from test 051. + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/051 | 20 +++++++++--------- + tests/qemu-iotests/051.out | 47 -------------------------------------------- + 2 files changed, 10 insertions(+), 57 deletions(-) + +diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051 +index 1f39c6a..93a2797 100755 +--- a/tests/qemu-iotests/051 ++++ b/tests/qemu-iotests/051 +@@ -94,19 +94,19 @@ echo + + run_qemu -drive if=floppy + run_qemu -drive if=ide,media=cdrom +-run_qemu -drive if=scsi,media=cdrom ++#run_qemu -drive if=scsi,media=cdrom + + run_qemu -drive if=ide + run_qemu -drive if=virtio +-run_qemu -drive if=scsi ++#run_qemu -drive if=scsi + + run_qemu -drive if=none,id=disk -device ide-cd,drive=disk +-run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk ++#run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk + + run_qemu -drive if=none,id=disk -device ide-drive,drive=disk + run_qemu -drive if=none,id=disk -device ide-hd,drive=disk +-run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk +-run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk ++#run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk ++#run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk + + echo + echo === Read-only === +@@ -114,19 +114,19 @@ echo + + run_qemu -drive file=$TEST_IMG,if=floppy,readonly=on + run_qemu -drive file=$TEST_IMG,if=ide,media=cdrom,readonly=on +-run_qemu -drive file=$TEST_IMG,if=scsi,media=cdrom,readonly=on ++#run_qemu -drive file=$TEST_IMG,if=scsi,media=cdrom,readonly=on + + run_qemu -drive file=$TEST_IMG,if=ide,readonly=on + run_qemu -drive file=$TEST_IMG,if=virtio,readonly=on +-run_qemu -drive file=$TEST_IMG,if=scsi,readonly=on ++#run_qemu -drive file=$TEST_IMG,if=scsi,readonly=on + + run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device ide-cd,drive=disk +-run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk ++#run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk + + run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device ide-drive,drive=disk + run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device ide-hd,drive=disk +-run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk +-run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk ++#run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk ++#run_qemu -drive file=$TEST_IMG,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk + + echo + echo === Cache modes === +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 5582ed3..e3cf244 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -65,10 +65,6 @@ Testing: -drive if=ide,media=cdrom + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive if=scsi,media=cdrom +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- + Testing: -drive if=ide + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: Device needs media, but drive is empty +@@ -82,21 +78,10 @@ QEMU_PROG: -drive if=virtio: Device initialization failed. + QEMU_PROG: -drive if=virtio: Device initialization failed. + QEMU_PROG: -drive if=virtio: Device 'virtio-blk-pci' could not be initialized + +-Testing: -drive if=scsi +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) QEMU_PROG: -drive if=scsi: Device needs media, but drive is empty +-QEMU_PROG: -drive if=scsi: Device initialization failed. +-QEMU_PROG: Device initialization failed. +-QEMU_PROG: Initialization of device lsi53c895a failed +- + Testing: -drive if=none,id=disk -device ide-cd,drive=disk + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- + Testing: -drive if=none,id=disk -device ide-drive,drive=disk + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device ide-drive,drive=disk: Device needs media, but drive is empty +@@ -109,18 +94,6 @@ QEMU X.Y.Z monitor - type 'help' for more information + QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-hd,drive=disk: Device 'ide-hd' could not be initialized + +-Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty +-QEMU_PROG: -device scsi-disk,drive=disk: Device initialization failed. +-QEMU_PROG: -device scsi-disk,drive=disk: Device 'scsi-disk' could not be initialized +- +-Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) QEMU_PROG: -device scsi-hd,drive=disk: Device needs media, but drive is empty +-QEMU_PROG: -device scsi-hd,drive=disk: Device initialization failed. +-QEMU_PROG: -device scsi-hd,drive=disk: Device 'scsi-hd' could not be initialized +- + + === Read-only === + +@@ -132,10 +105,6 @@ Testing: -drive file=TEST_DIR/t.qcow2,if=ide,media=cdrom,readonly=on + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,media=cdrom,readonly=on +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on: read-only not supported by this bus type + +@@ -143,18 +112,10 @@ Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-cd,drive=disk + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + +-Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-drive,drive=disk + QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device ide-drive,drive=disk: Can't use a read-only drive +@@ -167,14 +128,6 @@ QEMU X.Y.Z monitor - type 'help' for more information + QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-hd,drive=disk: Device 'ide-hd' could not be initialized + +-Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- +-Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk +-QEMU X.Y.Z monitor - type 'help' for more information +-(qemu) qququiquit +- + + === Cache modes === + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Snapshotting-zero-clusters.patch b/SOURCES/kvm-qemu-iotests-Snapshotting-zero-clusters.patch new file mode 100644 index 0000000..23bbbcf --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Snapshotting-zero-clusters.patch @@ -0,0 +1,143 @@ +From 36be200f11e87ccd97a54236550be41bc3ec6862 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 9 Jan 2014 09:11:13 +0100 +Subject: [PATCH 03/14] qemu-iotests: Snapshotting zero clusters + +Message-id: <1389131839-12920-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 56539 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 03/14] qemu-iotests: Snapshotting zero clusters +Bugzilla: 1033490 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1033490 + +This test creates an image with unallocated zero clusters, then creates +a snapshot. Afterwards, there should be neither any errors nor leaks. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 449df7063815489a0b091bcb3afa9ae80ae3acbf) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/group +--- + tests/qemu-iotests/062 | 64 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/062.out | 9 +++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 74 insertions(+) + create mode 100755 tests/qemu-iotests/062 + create mode 100644 tests/qemu-iotests/062.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/062 | 64 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/062.out | 9 ++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 74 insertions(+), 0 deletions(-) + create mode 100644 tests/qemu-iotests/062 + create mode 100644 tests/qemu-iotests/062.out + +diff --git a/tests/qemu-iotests/062 b/tests/qemu-iotests/062 +new file mode 100644 +index 0000000..0511246 +--- /dev/null ++++ b/tests/qemu-iotests/062 +@@ -0,0 +1,64 @@ ++#!/bin/bash ++# ++# Test case for snapshotting images with unallocated zero clusters in ++# qcow2 ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests qocw2-specific low-level functionality ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++IMGOPTS="compat=1.1" ++IMG_SIZE=64M ++ ++echo ++echo "=== Testing snapshotting an image with zero clusters ===" ++echo ++_make_test_img $IMG_SIZE ++# Write some zero clusters ++$QEMU_IO -c "write -z 0 256k" "$TEST_IMG" | _filter_qemu_io ++# Create a snapshot ++$QEMU_IMG snapshot -c foo "$TEST_IMG" ++# Check the image (there shouldn't be any errors or leaks) ++_check_test_img ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/062.out b/tests/qemu-iotests/062.out +new file mode 100644 +index 0000000..442d761 +--- /dev/null ++++ b/tests/qemu-iotests/062.out +@@ -0,0 +1,9 @@ ++QA output created by 062 ++ ++=== Testing snapshotting an image with zero clusters === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++wrote 262144/262144 bytes at offset 0 ++256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++No errors were found on the image. ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 0867b0f..2d0aba0 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -63,6 +63,7 @@ + 054 rw auto + 059 rw auto + 060 rw auto ++062 rw auto + 063 rw auto + 064 rw auto + 065 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Support-for-bochs-format.patch b/SOURCES/kvm-qemu-iotests-Support-for-bochs-format.patch new file mode 100644 index 0000000..8c19a55 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Support-for-bochs-format.patch @@ -0,0 +1,146 @@ +From a510cccdd420d33dc4c12eb5f638521f8d951e22 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:16 +0100 +Subject: [PATCH 09/49] qemu-iotests: Support for bochs format + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-10-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 09/48] qemu-iotests: Support for bochs format +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi + +Conflicts: +tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/078 | 53 ++++++++++++++++++++++ + tests/qemu-iotests/078.out | 6 +++ + tests/qemu-iotests/common | 7 +++ + tests/qemu-iotests/group | 1 + + tests/qemu-iotests/sample_images/empty.bochs.bz2 | Bin 0 -> 118 bytes + 5 files changed, 67 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/078 + create mode 100644 tests/qemu-iotests/078.out + create mode 100644 tests/qemu-iotests/sample_images/empty.bochs.bz2 + +diff --git a/tests/qemu-iotests/078 b/tests/qemu-iotests/078 +new file mode 100755 +index 0000000..f55f46d +--- /dev/null ++++ b/tests/qemu-iotests/078 +@@ -0,0 +1,53 @@ ++#!/bin/bash ++# ++# bochs format input validation tests ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt bochs ++_supported_proto generic ++_supported_os Linux ++ ++echo ++echo "== Read from a valid image ==" ++_use_sample_img empty.bochs.bz2 ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/078.out b/tests/qemu-iotests/078.out +new file mode 100644 +index 0000000..25d37c5 +--- /dev/null ++++ b/tests/qemu-iotests/078.out +@@ -0,0 +1,6 @@ ++QA output created by 078 ++ ++== Read from a valid image == ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index b5043fc..35abbfc 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -128,6 +128,7 @@ common options + + check options + -raw test raw (default) ++ -bochs test bochs + -cow test cow + -cloop test cloop + -qcow test qcow +@@ -163,6 +164,12 @@ testlist options + xpand=false + ;; + ++ -bochs) ++ IMGFMT=bochs ++ IMGFMT_GENERIC=false ++ xpand=false ++ ;; ++ + -cow) + IMGFMT=cow + xpand=false +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 427818c..30a0fd8 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -73,6 +73,7 @@ + 070 rw auto + 075 rw auto + 077 rw auto ++078 rw auto + 079 rw auto + 082 rw auto quick + 086 rw auto quick +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Test-0-length-image-for-mirror.patch b/SOURCES/kvm-qemu-iotests-Test-0-length-image-for-mirror.patch new file mode 100644 index 0000000..9e6418d --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-0-length-image-for-mirror.patch @@ -0,0 +1,93 @@ +From 54287567a2e235abe6967e15dd46eeebe8834f3b Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:13 +0200 +Subject: [PATCH 10/11] qemu-iotests: Test 0-length image for mirror + +Message-id: <1408552814-23031-7-git-send-email-eblake@redhat.com> +Patchwork-id: 60648 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 6/7] qemu-iotests: Test 0-length image for mirror +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +All behavior and invariant should hold for images with 0 length, so +add a class to repeat all the tests in TestSingleDrive. + +Hide two unapplicable test methods that would fail with 0 image length +because it's also used as cluster size. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 3b9f27d2b34cb8c5cc6cec993712c7e1943e9de9) + +Conflicts: + tests/qemu-iotests/041 - context due to no common event handling + +Signed-off-by: Eric Blake +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/041 | 11 ++++++++--- + tests/qemu-iotests/041.out | 4 ++-- + 2 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 +index bcfb759..912e499 100755 +--- a/tests/qemu-iotests/041 ++++ b/tests/qemu-iotests/041 +@@ -123,7 +123,7 @@ class TestSingleDrive(ImageMirroringTestCase): + image_len = 1 * 1024 * 1024 # MB + + def setUp(self): +- self.create_image(backing_img, TestSingleDrive.image_len) ++ self.create_image(backing_img, self.image_len) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img) + self.vm = iotests.VM().add_drive(test_img) + self.vm.launch() +@@ -222,7 +222,7 @@ class TestSingleDrive(ImageMirroringTestCase): + self.assert_no_active_block_jobs() + + qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=%d,size=%d' +- % (TestSingleDrive.image_len, TestSingleDrive.image_len), target_img) ++ % (self.image_len, self.image_len), target_img) + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + buf_size=65536, mode='existing', target=target_img) + self.assert_qmp(result, 'return', {}) +@@ -238,7 +238,7 @@ class TestSingleDrive(ImageMirroringTestCase): + self.assert_no_active_block_jobs() + + qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=%d,backing_file=%s' +- % (TestSingleDrive.image_len, backing_img), target_img) ++ % (self.image_len, backing_img), target_img) + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + mode='existing', target=target_img) + self.assert_qmp(result, 'return', {}) +@@ -265,6 +265,11 @@ class TestSingleDrive(ImageMirroringTestCase): + target=target_img) + self.assert_qmp(result, 'error/class', 'DeviceNotFound') + ++class TestSingleDriveZeroLength(TestSingleDrive): ++ image_len = 0 ++ test_small_buffer2 = None ++ test_large_cluster = None ++ + class TestMirrorNoBacking(ImageMirroringTestCase): + image_len = 2 * 1024 * 1024 # MB + +diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out +index 6d9bee1..cfa5c0d 100644 +--- a/tests/qemu-iotests/041.out ++++ b/tests/qemu-iotests/041.out +@@ -1,5 +1,5 @@ +-........................... ++................................... + ---------------------------------------------------------------------- +-Ran 27 tests ++Ran 35 tests + + OK +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Test-BLOCK_JOB_READY-event-for-0Kb-imag.patch b/SOURCES/kvm-qemu-iotests-Test-BLOCK_JOB_READY-event-for-0Kb-imag.patch new file mode 100644 index 0000000..c67e976 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-BLOCK_JOB_READY-event-for-0Kb-imag.patch @@ -0,0 +1,107 @@ +From 470f4cc7e63a96872463ab7a4a1c23689e32036b Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 20 Aug 2014 16:40:11 +0200 +Subject: [PATCH 08/11] qemu-iotests: Test BLOCK_JOB_READY event for 0Kb image active commit + +Message-id: <1408552814-23031-5-git-send-email-eblake@redhat.com> +Patchwork-id: 60649 +O-Subject: [qemu-kvm-rhev 7.0.z PATCH 4/7] qemu-iotests: Test BLOCK_JOB_READY event for 0Kb image active commit +Bugzilla: 1130603 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Fam Zheng + +There should be a BLOCK_JOB_READY event with active commit, regardless +of image length. Let's test the 0 length image case, and make sure it +goes through the ready->complete process. + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 8b9a30ca5bc10545637429486836f3c206c39fab) + +Conflicts: + tests/qemu-iotests/040 - context, due to no common event infrastructure + +Signed-off-by: Eric Blake +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/040 | 12 +++++++++--- + tests/qemu-iotests/040.out | 4 ++-- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040 +index f210fb7..cf80e0c 100755 +--- a/tests/qemu-iotests/040 ++++ b/tests/qemu-iotests/040 +@@ -63,12 +63,13 @@ class ImageCommitTestCase(iotests.QMPTestCase): + i = i + 512 + file.close() + +- def run_commit_test(self, top, base): ++ def run_commit_test(self, top, base, need_ready=False): + self.assert_no_active_commit() + result = self.vm.qmp('block-commit', device='drive0', top=top, base=base) + self.assert_qmp(result, 'return', {}) + + completed = False ++ ready = False + while not completed: + for event in self.vm.get_qmp_events(wait=True): + if event['event'] == 'BLOCK_JOB_COMPLETED': +@@ -76,8 +77,11 @@ class ImageCommitTestCase(iotests.QMPTestCase): + self.assert_qmp(event, 'data/device', 'drive0') + self.assert_qmp(event, 'data/offset', self.image_len) + self.assert_qmp(event, 'data/len', self.image_len) ++ if need_ready: ++ self.assertTrue(ready, "Expecting BLOCK_JOB_COMPLETED event") + completed = True + elif event['event'] == 'BLOCK_JOB_READY': ++ ready = True + self.assert_qmp(event, 'data/type', 'commit') + self.assert_qmp(event, 'data/device', 'drive0') + self.assert_qmp(event, 'data/len', self.image_len) +@@ -91,7 +95,7 @@ class TestSingleDrive(ImageCommitTestCase): + test_len = 1 * 1024 * 256 + + def setUp(self): +- self.create_image(backing_img, TestSingleDrive.image_len) ++ self.create_image(backing_img, self.image_len) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, mid_img) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img) + qemu_io('-c', 'write -P 0xab 0 524288', backing_img) +@@ -133,7 +137,7 @@ class TestSingleDrive(ImageCommitTestCase): + self.assert_qmp(result, 'error/desc', 'Base \'badfile\' not found') + + def test_top_is_active(self): +- self.run_commit_test(test_img, backing_img) ++ self.run_commit_test(test_img, backing_img, need_ready=True) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed")) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed")) + +@@ -265,6 +269,8 @@ class TestSetSpeed(ImageCommitTestCase): + + self.cancel_and_wait() + ++class TestActiveZeroLengthImage(TestSingleDrive): ++ image_len = 0 + + if __name__ == '__main__': + iotests.main(supported_fmts=['qcow2', 'qed']) +diff --git a/tests/qemu-iotests/040.out b/tests/qemu-iotests/040.out +index b6f2576..42314e9 100644 +--- a/tests/qemu-iotests/040.out ++++ b/tests/qemu-iotests/040.out +@@ -1,5 +1,5 @@ +-................ ++........................ + ---------------------------------------------------------------------- +-Ran 16 tests ++Ran 24 tests + + OK +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Test-a-few-blockdev-add-error-cases.patch b/SOURCES/kvm-qemu-iotests-Test-a-few-blockdev-add-error-cases.patch new file mode 100644 index 0000000..d83fbd9 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-a-few-blockdev-add-error-cases.patch @@ -0,0 +1,218 @@ +From 3ca6e2a4a1ecd9515eda8ebe400e0791a227fb79 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Thu, 23 Oct 2014 10:10:09 +0200 +Subject: [PATCH 05/19] qemu-iotests: Test a few blockdev-add error cases + +Message-id: <1414059011-15516-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 61841 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 6/8] qemu-iotests: Test a few blockdev-add error cases +Bugzilla: 1088176 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit c75203c8d343dc71d95144862bbb47290689c455) +Signed-off-by: Miroslav Rezanina + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/087 | 122 +++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/087.out | 40 +++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 163 insertions(+) + create mode 100755 tests/qemu-iotests/087 + create mode 100644 tests/qemu-iotests/087.out + +diff --git a/tests/qemu-iotests/087 b/tests/qemu-iotests/087 +new file mode 100755 +index 0000000..53b6c43 +--- /dev/null ++++ b/tests/qemu-iotests/087 +@@ -0,0 +1,122 @@ ++#!/bin/bash ++# ++# Test unsupported blockdev-add cases ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++function do_run_qemu() ++{ ++ echo Testing: "$@" ++ $QEMU -nographic -qmp stdio -serial none "$@" ++ echo ++} ++ ++function run_qemu() ++{ ++ do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp | sed -e 's/\("actual-size":\s*\)[0-9]\+/\1SIZE/g' ++} ++ ++size=128M ++ ++_make_test_img $size ++ ++echo ++echo === Missing ID === ++echo ++ ++run_qemu < +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:04:55 -0600 +Subject: [CHANGE 01/31] qemu-iotests: Test case for backing file deletion +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-2-git-send-email-famz@redhat.com> +Patchwork-id: 62674 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 01/30] qemu-iotests: Test case for backing file deletion +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Max Reitz + +Add a test case for trying to open an image file where it is impossible +to open its backing file (in this case, because it was deleted). When +doing this, qemu (or qemu-io in this case) should not crash but rather +print an appropriate error message. + +Signed-off-by: Max Reitz +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 321fd7d2b88defe11528e4d5a9f686c89ebee1ee) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson + +Conflicts: + tests/qemu-iotests/group +Trivial context conflict. + +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/069 | 59 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/069.out | 8 +++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 68 insertions(+) + create mode 100755 tests/qemu-iotests/069 + create mode 100644 tests/qemu-iotests/069.out + +diff --git a/tests/qemu-iotests/069 b/tests/qemu-iotests/069 +new file mode 100755 +index 0000000..3042803 +--- /dev/null ++++ b/tests/qemu-iotests/069 +@@ -0,0 +1,59 @@ ++#!/bin/bash ++# ++# Test case for deleting a backing file ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt cow qed qcow qcow2 vmdk ++_supported_proto generic ++_supported_os Linux ++ ++IMG_SIZE=128K ++ ++echo ++echo "=== Creating an image with a backing file and deleting that file ===" ++echo ++TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE ++_make_test_img -b "$TEST_IMG.base" $IMG_SIZE ++rm -f "$TEST_IMG.base" ++# Just open the image and close it right again (this should print an error message) ++$QEMU_IO -c quit "$TEST_IMG" 2>&1 | _filter_testdir | _filter_imgfmt ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/069.out b/tests/qemu-iotests/069.out +new file mode 100644 +index 0000000..3648814 +--- /dev/null ++++ b/tests/qemu-iotests/069.out +@@ -0,0 +1,8 @@ ++QA output created by 069 ++ ++=== Creating an image with a backing file and deleting that file === ++ ++Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=131072 ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072 backing_file='TEST_DIR/t.IMGFMT.base' ++qemu-io: can't open device TEST_DIR/t.IMGFMT: Could not open file: No such file or directory ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 3fad61d..572438e 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -71,6 +71,7 @@ + 066 rw auto + 067 rw auto + 068 rw auto ++069 rw auto + 070 rw auto + 075 rw auto + 076 auto +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-iotests-Test-converting-to-streamOptimized-from.patch b/SOURCES/kvm-qemu-iotests-Test-converting-to-streamOptimized-from.patch new file mode 100644 index 0000000..525fd58 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-converting-to-streamOptimized-from.patch @@ -0,0 +1,69 @@ +From 44c99fa6aeff34f654a1475b4273308411b58520 Mon Sep 17 00:00:00 2001 +Message-Id: <44c99fa6aeff34f654a1475b4273308411b58520.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:15 -0600 +Subject: [CHANGE 21/31] qemu-iotests: Test converting to streamOptimized from + small cluster size +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-22-git-send-email-famz@redhat.com> +Patchwork-id: 62694 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 21/30] qemu-iotests: Test converting to streamOptimized from small cluster size +Bugzilla: 1134283 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 10f08a0a3435afea441db8d0981dbad49042c7cf) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + tests/qemu-iotests/059 | 7 +++++++ + tests/qemu-iotests/059.out | 7 +++++++ + 2 files changed, 14 insertions(+) + +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 71b7b49..1e7dbf6 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -104,6 +104,13 @@ truncate -s 10M $TEST_IMG + _img_info + + echo ++echo "=== Converting to streamOptimized from image with small cluster size===" ++TEST_IMG="$TEST_IMG.qcow2" IMGFMT=qcow2 IMGOPTS="cluster_size=4096" _make_test_img 1G ++$QEMU_IO -c "write -P 0xa 0 512" "$TEST_IMG.qcow2" | _filter_qemu_io ++$QEMU_IO -c "write -P 0xb 10240 512" "$TEST_IMG.qcow2" | _filter_qemu_io ++$QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2" "$TEST_IMG" 2>&1 ++ ++echo + echo "=== Testing version 3 ===" + _use_sample_img iotest-version3.vmdk.bz2 + _img_info +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index f226f71..9893edf 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -2046,6 +2046,13 @@ RW 12582912 VMFS "dummy.IMGFMT" 1 + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 + qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File truncated, expecting at least 13172736 bytes + ++=== Converting to streamOptimized from image with small cluster size=== ++Formatting 'TEST_DIR/t.vmdk.IMGFMT', fmt=IMGFMT size=1073741824 ++wrote 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 512/512 bytes at offset 10240 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ + === Testing version 3 === + image: TEST_DIR/iotest-version3.IMGFMT + file format: IMGFMT +-- +2.1.0 + diff --git a/SOURCES/kvm-qemu-iotests-Test-for-loading-VM-state-from-qcow2.patch b/SOURCES/kvm-qemu-iotests-Test-for-loading-VM-state-from-qcow2.patch new file mode 100644 index 0000000..1582116 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-for-loading-VM-state-from-qcow2.patch @@ -0,0 +1,147 @@ +From 50513a8391e05285c27241e1cf781ff1370972bf Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Fri, 1 Nov 2013 14:23:17 +0100 +Subject: [PATCH 29/81] qemu-iotests: Test for loading VM state from qcow2 + +RH-Author: Max Reitz +Message-id: <1383315797-30938-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 55218 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/3] qemu-iotests: Test for loading VM state from qcow2 +Bugzilla: 1025740 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Alex Williamson + +BZ: 1025740 + +Add a test for saving a VM state from a qcow2 image and loading it back +(with having restarted qemu in between); this should work without any +problems. + +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit ab6f2bbb2871db8a7ed2457328e864cdf2e2fc82) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/group + +Conflicts because upstream contains more test in the group file. +--- + tests/qemu-iotests/068 | 65 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/068.out | 11 ++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 77 insertions(+) + create mode 100755 tests/qemu-iotests/068 + create mode 100644 tests/qemu-iotests/068.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/068 | 65 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/068.out | 11 +++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 77 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/068 + create mode 100644 tests/qemu-iotests/068.out + +diff --git a/tests/qemu-iotests/068 b/tests/qemu-iotests/068 +new file mode 100755 +index 0000000..b72e555 +--- /dev/null ++++ b/tests/qemu-iotests/068 +@@ -0,0 +1,65 @@ ++#!/bin/bash ++# ++# Test case for loading a saved VM state from a qcow2 image ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=mreitz@redhat.com ++ ++seq="$(basename $0)" ++echo "QA output created by $seq" ++ ++here="$PWD" ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests qocw2-specific low-level functionality ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++IMGOPTS="compat=1.1" ++IMG_SIZE=128K ++ ++echo ++echo "=== Saving and reloading a VM state to/from a qcow2 image ===" ++echo ++_make_test_img $IMG_SIZE ++# Give qemu some time to boot before saving the VM state ++bash -c 'sleep 1; echo -e "savevm 0\nquit"' |\ ++ $QEMU -nographic -monitor stdio -serial none -hda "$TEST_IMG" |\ ++ _filter_qemu ++# Now try to continue from that VM state (this should just work) ++echo quit |\ ++ $QEMU -nographic -monitor stdio -serial none -hda "$TEST_IMG" -loadvm 0 |\ ++ _filter_qemu ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/068.out b/tests/qemu-iotests/068.out +new file mode 100644 +index 0000000..abe35a9 +--- /dev/null ++++ b/tests/qemu-iotests/068.out +@@ -0,0 +1,11 @@ ++QA output created by 068 ++ ++=== Saving and reloading a VM state to/from a qcow2 image === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072 ++QEMU X.Y.Z monitor - type 'help' for more information ++(qemu) ssasavsavesavevsavevmsavevm savevm 0 ++(qemu) qququiquit ++QEMU X.Y.Z monitor - type 'help' for more information ++(qemu) qququiquit ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 3b1d042..1017a19 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -61,3 +61,4 @@ + 052 rw auto backing + 053 rw auto + 059 rw auto ++068 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Test-progress-output-for-conversion.patch b/SOURCES/kvm-qemu-iotests-Test-progress-output-for-conversion.patch new file mode 100644 index 0000000..2f12d8b --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-progress-output-for-conversion.patch @@ -0,0 +1,146 @@ +From c75a52dd49f8b6f888a21952a30b5e3590093fd7 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Mon, 10 Mar 2014 10:33:23 +0100 +Subject: [PATCH 12/16] qemu-iotests: Test progress output for conversion + +RH-Author: Kevin Wolf +Message-id: <1394447603-30527-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 58061 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] qemu-iotests: Test progress output for conversion +Bugzilla: 1073728 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Max Reitz +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Kevin Wolf +(cherry picked from commit 2fa4c042bc55ec10b9ca16163697d02cddd2d768) + +Percentages in the output differ from upstream because RHEL 7 doesnt' +have upstream commit 802c3d4c. + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/086 | 65 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/086.out | 18 +++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 84 insertions(+) + create mode 100755 tests/qemu-iotests/086 + create mode 100644 tests/qemu-iotests/086.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/086 | 65 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/086.out | 18 ++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 84 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/086 + create mode 100644 tests/qemu-iotests/086.out + +diff --git a/tests/qemu-iotests/086 b/tests/qemu-iotests/086 +new file mode 100755 +index 0000000..48fe85b +--- /dev/null ++++ b/tests/qemu-iotests/086 +@@ -0,0 +1,65 @@ ++#!/bin/bash ++# ++# Test qemu-img progress output ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++function run_qemu_img() ++{ ++ echo ++ echo Testing: "$@" | _filter_testdir ++} ++ ++size=128M ++ ++_make_test_img $size ++$QEMU_IO -c 'write 0 1M' $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c 'write 2M 1M' $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c 'write 4M 1M' $TEST_IMG | _filter_qemu_io ++$QEMU_IO -c 'write 32M 1M' $TEST_IMG | _filter_qemu_io ++ ++$QEMU_IMG convert -p -O $IMGFMT -f $IMGFMT "$TEST_IMG" "$TEST_IMG".base 2>&1 |\ ++ _filter_testdir | sed -e 's/\r/\n/g' ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/086.out b/tests/qemu-iotests/086.out +new file mode 100644 +index 0000000..fcf4425 +--- /dev/null ++++ b/tests/qemu-iotests/086.out +@@ -0,0 +1,18 @@ ++QA output created by 086 ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 ++wrote 1048576/1048576 bytes at offset 0 ++1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 1048576/1048576 bytes at offset 2097152 ++1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 1048576/1048576 bytes at offset 4194304 ++1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 1048576/1048576 bytes at offset 33554432 ++1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ (0.00/100%) ++ (1.56/100%) ++ (3.12/100%) ++ (4.69/100%) ++ (26.56/100%) ++ (100.00/100%) ++ ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index ee95d6e..51e7f58 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -74,3 +74,4 @@ + 077 rw auto + 079 rw auto + 082 rw auto quick ++086 rw auto quick +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Test-pwritev-RMW-logic.patch b/SOURCES/kvm-qemu-iotests-Test-pwritev-RMW-logic.patch new file mode 100644 index 0000000..03216db --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-pwritev-RMW-logic.patch @@ -0,0 +1,636 @@ +From df86b255911f2a682ffd411f4924442d6b007624 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 14 Jan 2014 15:37:03 +0100 +Subject: [PATCH 35/37] qemu-iotests: Test pwritev RMW logic + +Message-id: <1392117622-28812-35-git-send-email-kwolf@redhat.com> +Patchwork-id: 57199 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 35/37] qemu-iotests: Test pwritev RMW logic +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit 9e1cb96d9a5e434f389a4d7b7ff4dcdd71e8ec0f) + +Conflicts: + block.c + block/blkdebug.c + include/block/block.h + tests/qemu-iotests/group + +Conflicts because RHEL 7 doesn't have all blkdebug events that upstream +has. (Plus group from qemu-iotests.) + +Signed-off-by: Kevin Wolf +--- + block.c | 7 ++ + block/blkdebug.c | 8 ++ + include/block/block.h | 8 ++ + tests/qemu-iotests/077 | 278 +++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/077.out | 202 ++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 6 files changed, 504 insertions(+) + create mode 100755 tests/qemu-iotests/077 + create mode 100644 tests/qemu-iotests/077.out +--- + block.c | 7 + + block/blkdebug.c | 8 ++ + include/block/block.h | 8 ++ + tests/qemu-iotests/077 | 278 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/077.out | 202 ++++++++++++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 6 files changed, 504 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/077 + create mode 100644 tests/qemu-iotests/077.out + +diff --git a/block.c b/block.c +index d18c2df..d063924 100644 +--- a/block.c ++++ b/block.c +@@ -2982,10 +2982,13 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, + assert(!waited || !req->serialising); + + if (flags & BDRV_REQ_ZERO_WRITE) { ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_ZERO); + ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags); + } else { ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV); + ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov); + } ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_DONE); + + if (ret == 0 && !bs->enable_write_cache) { + ret = bdrv_co_flush(bs); +@@ -3058,11 +3061,13 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + }; + qemu_iovec_init_external(&head_qiov, &head_iov, 1); + ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_HEAD); + ret = bdrv_aligned_preadv(bs, &req, offset & ~(align - 1), align, + align, &head_qiov, 0); + if (ret < 0) { + goto fail; + } ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_HEAD); + + qemu_iovec_init(&local_qiov, qiov->niov + 2); + qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1)); +@@ -3090,11 +3095,13 @@ static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs, + }; + qemu_iovec_init_external(&tail_qiov, &tail_iov, 1); + ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_TAIL); + ret = bdrv_aligned_preadv(bs, &req, (offset + bytes) & ~(align - 1), align, + align, &tail_qiov, 0); + if (ret < 0) { + goto fail; + } ++ BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_TAIL); + + if (!use_local_qiov) { + qemu_iovec_init(&local_qiov, qiov->niov + 1); +diff --git a/block/blkdebug.c b/block/blkdebug.c +index 1e772a5..c61ce52 100644 +--- a/block/blkdebug.c ++++ b/block/blkdebug.c +@@ -183,6 +183,14 @@ static const char *event_names[BLKDBG_EVENT_MAX] = { + [BLKDBG_CLUSTER_ALLOC] = "cluster_alloc", + [BLKDBG_CLUSTER_ALLOC_BYTES] = "cluster_alloc_bytes", + [BLKDBG_CLUSTER_FREE] = "cluster_free", ++ ++ [BLKDBG_PWRITEV_RMW_HEAD] = "pwritev_rmw.head", ++ [BLKDBG_PWRITEV_RMW_AFTER_HEAD] = "pwritev_rmw.after_head", ++ [BLKDBG_PWRITEV_RMW_TAIL] = "pwritev_rmw.tail", ++ [BLKDBG_PWRITEV_RMW_AFTER_TAIL] = "pwritev_rmw.after_tail", ++ [BLKDBG_PWRITEV] = "pwritev", ++ [BLKDBG_PWRITEV_ZERO] = "pwritev_zero", ++ [BLKDBG_PWRITEV_DONE] = "pwritev_done", + }; + + static int get_event_by_name(const char *name, BlkDebugEvent *event) +diff --git a/include/block/block.h b/include/block/block.h +index feb1926..13ef173 100644 +--- a/include/block/block.h ++++ b/include/block/block.h +@@ -498,6 +498,14 @@ typedef enum { + BLKDBG_CLUSTER_ALLOC_BYTES, + BLKDBG_CLUSTER_FREE, + ++ BLKDBG_PWRITEV_RMW_HEAD, ++ BLKDBG_PWRITEV_RMW_AFTER_HEAD, ++ BLKDBG_PWRITEV_RMW_TAIL, ++ BLKDBG_PWRITEV_RMW_AFTER_TAIL, ++ BLKDBG_PWRITEV, ++ BLKDBG_PWRITEV_ZERO, ++ BLKDBG_PWRITEV_DONE, ++ + BLKDBG_EVENT_MAX, + } BlkDebugEvent; + +diff --git a/tests/qemu-iotests/077 b/tests/qemu-iotests/077 +new file mode 100755 +index 0000000..bbf7b51 +--- /dev/null ++++ b/tests/qemu-iotests/077 +@@ -0,0 +1,278 @@ ++#!/bin/bash ++# ++# Test concurrent pread/pwrite ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt generic ++_supported_proto generic ++_supported_os Linux ++ ++CLUSTER_SIZE=4k ++size=128M ++ ++_make_test_img $size ++ ++echo ++echo "== Some concurrent requests involving RMW ==" ++ ++function test_io() ++{ ++echo "open -o file.align=4k blkdebug::$TEST_IMG" ++# A simple RMW request ++cat < +Date: Mon, 25 May 2015 04:45:55 +0200 +Subject: [PATCH 3/6] qemu-iotests: Test unaligned 4k zero write + +Message-id: <1432529157-20381-2-git-send-email-famz@redhat.com> +Patchwork-id: 65119 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v2 1/3] qemu-iotests: Test unaligned 4k zero write +Bugzilla: 1200295 +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Fam Zheng +Message-id: 1427160230-4489-3-git-send-email-famz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 61815d6e0aa1a549ad55f6621b6816aa6b1ab757) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/033 | 47 +++++++++++++++++++++++++++++----------------- + tests/qemu-iotests/033.out | 26 +++++++++++++++++++++++++ + 2 files changed, 56 insertions(+), 17 deletions(-) + +diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033 +index ea3351c..4008f10 100755 +--- a/tests/qemu-iotests/033 ++++ b/tests/qemu-iotests/033 +@@ -46,26 +46,39 @@ _supported_os Linux + size=128M + _make_test_img $size + +-echo +-echo "== preparing image ==" +-$QEMU_IO -c "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io +-$QEMU_IO -c "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io +-$QEMU_IO -c "write -z 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io ++do_test() ++{ ++ local align=$1 ++ local iocmd=$2 ++ local img=$3 ++ { ++ echo "open -o driver=$IMGFMT,file.align=$align blkdebug::$img" ++ echo $iocmd ++ } | $QEMU_IO ++} ++ ++for align in 512 4k; do ++ echo ++ echo "== preparing image ==" ++ do_test $align "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "write -z 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io + +-echo +-echo "== verifying patterns (1) ==" +-$QEMU_IO -c "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io +-$QEMU_IO -c "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io +-$QEMU_IO -c "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io ++ echo ++ echo "== verifying patterns (1) ==" ++ do_test $align "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io + +-echo +-echo "== rewriting zeroes ==" +-$QEMU_IO -c "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io +-$QEMU_IO -c "write -z 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io ++ echo ++ echo "== rewriting zeroes ==" ++ do_test $align "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "write -z 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io + +-echo +-echo "== verifying patterns (2) ==" +-$QEMU_IO -c "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io ++ echo ++ echo "== verifying patterns (2) ==" ++ do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io ++done + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/033.out b/tests/qemu-iotests/033.out +index 2fe74df..344065f 100644 +--- a/tests/qemu-iotests/033.out ++++ b/tests/qemu-iotests/033.out +@@ -26,4 +26,30 @@ wrote 65536/65536 bytes at offset 65536 + == verifying patterns (2) == + read 131072/131072 bytes at offset 1024 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== preparing image == ++wrote 1024/1024 bytes at offset 512 ++1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 1536/1536 bytes at offset 131072 ++1.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 131072/131072 bytes at offset 1024 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== verifying patterns (1) == ++read 512/512 bytes at offset 512 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 131072/131072 bytes at offset 1024 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 512/512 bytes at offset 132096 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== rewriting zeroes == ++wrote 65536/65536 bytes at offset 65536 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 65536/65536 bytes at offset 65536 ++64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== verifying patterns (2) == ++read 131072/131072 bytes at offset 1024 ++128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-iotests-Test-unaligned-sub-block-zero-write.patch b/SOURCES/kvm-qemu-iotests-Test-unaligned-sub-block-zero-write.patch new file mode 100644 index 0000000..3995465 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Test-unaligned-sub-block-zero-write.patch @@ -0,0 +1,101 @@ +From daca4d834e727c73565aa0659da6fab52ab7cc6b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 25 May 2015 04:45:57 +0200 +Subject: [PATCH 5/6] qemu-iotests: Test unaligned sub-block zero write + +Message-id: <1432529157-20381-4-git-send-email-famz@redhat.com> +Patchwork-id: 65121 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v2 3/3] qemu-iotests: Test unaligned sub-block zero write +Bugzilla: 1200295 +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Test zero write in byte range 512~1024 for 4k alignment. + +Signed-off-by: Fam Zheng +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Kevin Wolf +Message-id: 1431522721-3266-4-git-send-email-famz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit ab53c44718305d3fde3d9d2251889f1cab694be2) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/033 | 13 +++++++++++++ + tests/qemu-iotests/033.out | 30 ++++++++++++++++++++++++++++++ + 2 files changed, 43 insertions(+) + +diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033 +index 4008f10..a61d8ce 100755 +--- a/tests/qemu-iotests/033 ++++ b/tests/qemu-iotests/033 +@@ -78,6 +78,19 @@ for align in 512 4k; do + echo + echo "== verifying patterns (2) ==" + do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io ++ ++ echo ++ echo "== rewriting unaligned zeroes ==" ++ do_test $align "write -P 0xb 0x0 0x1000" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "write -z 0x200 0x200" "$TEST_IMG" | _filter_qemu_io ++ ++ echo ++ echo "== verifying patterns (3) ==" ++ do_test $align "read -P 0xb 0x0 0x200" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "read -P 0x0 0x200 0x200" "$TEST_IMG" | _filter_qemu_io ++ do_test $align "read -P 0xb 0x400 0xc00" "$TEST_IMG" | _filter_qemu_io ++ ++ echo + done + + # success, all done +diff --git a/tests/qemu-iotests/033.out b/tests/qemu-iotests/033.out +index 344065f..6896d73 100644 +--- a/tests/qemu-iotests/033.out ++++ b/tests/qemu-iotests/033.out +@@ -27,6 +27,21 @@ wrote 65536/65536 bytes at offset 65536 + read 131072/131072 bytes at offset 1024 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + ++== rewriting unaligned zeroes == ++wrote 4096/4096 bytes at offset 0 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 512/512 bytes at offset 512 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== verifying patterns (3) == ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 512/512 bytes at offset 512 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 3072/3072 bytes at offset 1024 ++3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++ + == preparing image == + wrote 1024/1024 bytes at offset 512 + 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +@@ -52,4 +67,19 @@ wrote 65536/65536 bytes at offset 65536 + == verifying patterns (2) == + read 131072/131072 bytes at offset 1024 + 128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== rewriting unaligned zeroes == ++wrote 4096/4096 bytes at offset 0 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++wrote 512/512 bytes at offset 512 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++== verifying patterns (3) == ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 512/512 bytes at offset 512 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++read 3072/3072 bytes at offset 1024 ++3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ + *** done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-iotests-Try-creating-huge-qcow2-image.patch b/SOURCES/kvm-qemu-iotests-Try-creating-huge-qcow2-image.patch new file mode 100644 index 0000000..572478e --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Try-creating-huge-qcow2-image.patch @@ -0,0 +1,157 @@ +From 72620f05ee7306dcdd209e0e527b7a4c92bcb98d Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:24 +0100 +Subject: [PATCH 67/87] qemu-iotests: Try creating huge qcow2 image + +RH-Author: Max Reitz +Message-id: <1383756824-6921-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 55556 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 01/21] qemu-iotests: Try creating huge qcow2 image +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Kevin Wolf + +BZ: 980771 + +It's supposed to fail gracefully instead of segfaulting. + +Signed-off-by: Kevin Wolf +(cherry picked from commit bd91ecbf5b43b52321c4d938e16a612b9c68bf06) + +Signed-off-by: Max Reitz + +Conflicts: + tests/qemu-iotests/group + +Conflicts because downstream contains more patches in the group file +than upstream did at the time this patch was originally written. +--- + tests/qemu-iotests/054 | 58 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/054.out | 10 ++++++++ + tests/qemu-iotests/common.rc | 2 +- + tests/qemu-iotests/group | 1 + + 4 files changed, 70 insertions(+), 1 deletion(-) + create mode 100755 tests/qemu-iotests/054 + create mode 100644 tests/qemu-iotests/054.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/054 | 58 ++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/054.out | 10 +++++++ + tests/qemu-iotests/common.rc | 2 +- + tests/qemu-iotests/group | 1 + + 4 files changed, 70 insertions(+), 1 deletions(-) + create mode 100755 tests/qemu-iotests/054 + create mode 100644 tests/qemu-iotests/054.out + +diff --git a/tests/qemu-iotests/054 b/tests/qemu-iotests/054 +new file mode 100755 +index 0000000..b360429 +--- /dev/null ++++ b/tests/qemu-iotests/054 +@@ -0,0 +1,58 @@ ++#!/bin/bash ++# ++# Test huge qcow2 images ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto generic ++_supported_os Linux ++ ++echo ++echo "creating too large image (1 EB)" ++_make_test_img $((1024*1024))T ++ ++echo ++echo "creating too large image (1 EB) using qcow2.py" ++_make_test_img 4G ++./qcow2.py $TEST_IMG set-header size $((1024 ** 6)) ++_check_test_img ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/054.out b/tests/qemu-iotests/054.out +new file mode 100644 +index 0000000..0b2fe30 +--- /dev/null ++++ b/tests/qemu-iotests/054.out +@@ -0,0 +1,10 @@ ++QA output created by 054 ++ ++creating too large image (1 EB) ++qemu-img: The image size is too large for file format 'qcow2' ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1152921504606846976 ++ ++creating too large image (1 EB) using qcow2.py ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294967296 ++qemu-img: Could not open 'TEST_DIR/t.qcow2': File too large ++*** done +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 764a3eb..28b39e4 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -173,7 +173,7 @@ _cleanup_test_img() + + _check_test_img() + { +- $QEMU_IMG check "$@" -f $IMGFMT $TEST_IMG 2>&1 | \ ++ $QEMU_IMG check "$@" -f $IMGFMT $TEST_IMG 2>&1 | _filter_testdir | \ + sed -e '/allocated.*fragmented.*compressed clusters/d' \ + -e 's/qemu-img: This image format does not support checks/No errors were found on the image./' \ + -e '/Image end offset: [0-9]\+/d' +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index c841c5e..d02ee96 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -60,6 +60,7 @@ + 051 rw auto + 052 rw auto backing + 053 rw auto ++054 rw auto + 059 rw auto + 060 rw auto + 063 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Update-051-reference-output.patch b/SOURCES/kvm-qemu-iotests-Update-051-reference-output.patch new file mode 100644 index 0000000..2fb4f21 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Update-051-reference-output.patch @@ -0,0 +1,253 @@ +From b63711901e9e01f780e0b4be99bac6009e795b68 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 10 Jul 2013 17:30:26 +0200 +Subject: [PATCH 29/38] qemu-iotests: Update 051 reference output + +Message-id: <1378736903-18489-30-git-send-email-kwolf@redhat.com> +Patchwork-id: 54216 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 29/32] qemu-iotests: Update 051 reference output +Bugzilla: 1005818 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1005818 + +This has been broken by commit bd5c51ee. + +Signed-off-by: Kevin Wolf +(cherry picked from commit 7a370406bdd13b1d46230d1cbca308d984d0dcae) + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/051.out | 107 ++++++++++++++++++++++++++----------- + tests/qemu-iotests/common.filter | 2 +- + 2 files changed, 76 insertions(+), 33 deletions(-) + +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 6b3d636..95ff245 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -23,10 +23,12 @@ QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: could not + === Enable and disable lazy refcounting on the command line, plus some invalid values === + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=off +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts= + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=: Parameter 'lazy_refcounts' expects 'on' or 'off' +@@ -49,112 +51,152 @@ QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on: Lazy ref + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=on: could not open disk image TEST_DIR/t.qcow2: Invalid argument + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy_refcounts=off +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + + === No medium === + + Testing: -drive if=floppy +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive if=ide,media=cdrom +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive if=scsi,media=cdrom +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive if=ide +-QEMU_PROG: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: Device needs media, but drive is empty ++QEMU_PROG: Device initialization failed. + QEMU_PROG: Initialization of device ide-hd failed + + Testing: -drive if=virtio +-QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty ++QEMU_PROG: -drive if=virtio: Device initialization failed. ++QEMU_PROG: -drive if=virtio: Device initialization failed. + QEMU_PROG: -drive if=virtio: Device 'virtio-blk-pci' could not be initialized + + Testing: -drive if=scsi +-QEMU_PROG: -drive if=scsi: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -drive if=scsi: Device needs media, but drive is empty ++QEMU_PROG: -drive if=scsi: Device initialization failed. ++QEMU_PROG: Device initialization failed. + QEMU_PROG: Initialization of device lsi53c895a failed + + Testing: -drive if=none,id=disk -device ide-cd,drive=disk +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive if=none,id=disk -device ide-drive,drive=disk +-QEMU_PROG: -device ide-drive,drive=disk: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -device ide-drive,drive=disk: Device needs media, but drive is empty ++QEMU_PROG: -device ide-drive,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-drive,drive=disk: Device 'ide-drive' could not be initialized + + Testing: -drive if=none,id=disk -device ide-hd,drive=disk +-QEMU_PROG: -device ide-hd,drive=disk: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -device ide-hd,drive=disk: Device needs media, but drive is empty ++QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-hd,drive=disk: Device 'ide-hd' could not be initialized + + Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk +-QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty ++QEMU_PROG: -device scsi-disk,drive=disk: Device initialization failed. + QEMU_PROG: -device scsi-disk,drive=disk: Device 'scsi-disk' could not be initialized + + Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk +-QEMU_PROG: -device scsi-hd,drive=disk: Device needs media, but drive is empty ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -device scsi-hd,drive=disk: Device needs media, but drive is empty ++QEMU_PROG: -device scsi-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device scsi-hd,drive=disk: Device 'scsi-hd' could not be initialized + + + === Read-only === + + Testing: -drive file=TEST_DIR/t.qcow2,if=floppy,readonly=on +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,media=cdrom,readonly=on +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,media=cdrom,readonly=on +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on: readonly not supported by this bus type + + Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-cd,drive=disk +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-drive,drive=disk +-QEMU_PROG: -device ide-drive,drive=disk: Can't use a read-only drive ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -device ide-drive,drive=disk: Can't use a read-only drive ++QEMU_PROG: -device ide-drive,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-drive,drive=disk: Device 'ide-drive' could not be initialized + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-hd,drive=disk +-QEMU_PROG: -device ide-hd,drive=disk: Can't use a read-only drive ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) QEMU_PROG: -device ide-hd,drive=disk: Can't use a read-only drive ++QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-hd,drive=disk: Device 'ide-hd' could not be initialized + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + + === Cache modes === + + Testing: -drive media=cdrom,cache=none +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive media=cdrom,cache=directsync +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive media=cdrom,cache=writeback +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive media=cdrom,cache=writethrough +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive media=cdrom,cache=unsafe +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive media=cdrom,cache=invalid_value + QEMU_PROG: -drive media=cdrom,cache=invalid_value: invalid cache option +@@ -163,7 +205,8 @@ QEMU_PROG: -drive media=cdrom,cache=invalid_value: invalid cache option + === Specifying the protocol layer === + + Testing: -drive file=TEST_DIR/t.qcow2,file.driver=file +-qququiquit ++QEMU 1.5.50 monitor - type 'help' for more information ++(qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2 + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2: Can't use 'qcow2' as a block driver for the protocol level +diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter +index dcf6391..9dbcae8 100644 +--- a/tests/qemu-iotests/common.filter ++++ b/tests/qemu-iotests/common.filter +@@ -155,7 +155,7 @@ _filter_qemu_io() + # replace occurrences of QEMU_PROG with "qemu" + _filter_qemu() + { +- sed -e "s#^$(basename $QEMU_PROG):#QEMU_PROG:#" ++ sed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" + } + + # make sure this script returns success +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Update-test-cases-for-commit-active.patch b/SOURCES/kvm-qemu-iotests-Update-test-cases-for-commit-active.patch new file mode 100644 index 0000000..665a73e --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Update-test-cases-for-commit-active.patch @@ -0,0 +1,162 @@ +From 823ad14cd80063cf09ca5efc2c1d7c584f44a1be Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:08:02 +0100 +Subject: [PATCH 19/34] qemu-iotests: Update test cases for commit active + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-18-git-send-email-famz@redhat.com> +Patchwork-id: 56779 +O-Subject: [RHEL-7 qemu-kvm PATCH 17/18] qemu-iotests: Update test cases for commit active +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Factor out commit test common logic into super class, and update test +of committing the active image. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 4de43470f2f35762b4b3e6a59b4aed55e239024a) +Signed-off-by: Fam Zheng + +Conflicts: + tests/qemu-iotests/040 + +Conflict because "b59b3d5 qemu-iotests: Make test case 030, 040 and 055 +deterministic" and "2499a09 qemu-iotests: make create_image() common" +are not backported yet. + +Signed-off-by: Fam Zheng +--- + tests/qemu-iotests/040 | 74 ++++++++++++++++++++++---------------------------- + 1 file changed, 32 insertions(+), 42 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/040 | 74 ++++++++++++++++++++--------------------------- + 1 files changed, 32 insertions(+), 42 deletions(-) + +diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040 +index aad535a..f210fb7 100755 +--- a/tests/qemu-iotests/040 ++++ b/tests/qemu-iotests/040 +@@ -63,6 +63,28 @@ class ImageCommitTestCase(iotests.QMPTestCase): + i = i + 512 + file.close() + ++ def run_commit_test(self, top, base): ++ self.assert_no_active_commit() ++ result = self.vm.qmp('block-commit', device='drive0', top=top, base=base) ++ self.assert_qmp(result, 'return', {}) ++ ++ completed = False ++ while not completed: ++ for event in self.vm.get_qmp_events(wait=True): ++ if event['event'] == 'BLOCK_JOB_COMPLETED': ++ self.assert_qmp(event, 'data/type', 'commit') ++ self.assert_qmp(event, 'data/device', 'drive0') ++ self.assert_qmp(event, 'data/offset', self.image_len) ++ self.assert_qmp(event, 'data/len', self.image_len) ++ completed = True ++ elif event['event'] == 'BLOCK_JOB_READY': ++ self.assert_qmp(event, 'data/type', 'commit') ++ self.assert_qmp(event, 'data/device', 'drive0') ++ self.assert_qmp(event, 'data/len', self.image_len) ++ self.vm.qmp('block-job-complete', device='drive0') ++ ++ self.assert_no_active_commit() ++ self.vm.shutdown() + + class TestSingleDrive(ImageCommitTestCase): + image_len = 1 * 1024 * 1024 +@@ -84,23 +106,7 @@ class TestSingleDrive(ImageCommitTestCase): + os.remove(backing_img) + + def test_commit(self): +- self.assert_no_active_commit() +- result = self.vm.qmp('block-commit', device='drive0', top='%s' % mid_img) +- self.assert_qmp(result, 'return', {}) +- +- completed = False +- while not completed: +- for event in self.vm.get_qmp_events(wait=True): +- if event['event'] == 'BLOCK_JOB_COMPLETED': +- self.assert_qmp(event, 'data/type', 'commit') +- self.assert_qmp(event, 'data/device', 'drive0') +- self.assert_qmp(event, 'data/offset', self.image_len) +- self.assert_qmp(event, 'data/len', self.image_len) +- completed = True +- +- self.assert_no_active_commit() +- self.vm.shutdown() +- ++ self.run_commit_test(mid_img, backing_img) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed")) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed")) + +@@ -127,10 +133,9 @@ class TestSingleDrive(ImageCommitTestCase): + self.assert_qmp(result, 'error/desc', 'Base \'badfile\' not found') + + def test_top_is_active(self): +- self.assert_no_active_commit() +- result = self.vm.qmp('block-commit', device='drive0', top='%s' % test_img, base='%s' % backing_img) +- self.assert_qmp(result, 'error/class', 'GenericError') +- self.assert_qmp(result, 'error/desc', 'Top image as the active layer is currently unsupported') ++ self.run_commit_test(test_img, backing_img) ++ self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', backing_img).find("verification failed")) ++ self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', backing_img).find("verification failed")) + + def test_top_and_base_reversed(self): + self.assert_no_active_commit() +@@ -191,23 +196,7 @@ class TestRelativePaths(ImageCommitTestCase): + raise + + def test_commit(self): +- self.assert_no_active_commit() +- result = self.vm.qmp('block-commit', device='drive0', top='%s' % self.mid_img) +- self.assert_qmp(result, 'return', {}) +- +- completed = False +- while not completed: +- for event in self.vm.get_qmp_events(wait=True): +- if event['event'] == 'BLOCK_JOB_COMPLETED': +- self.assert_qmp(event, 'data/type', 'commit') +- self.assert_qmp(event, 'data/device', 'drive0') +- self.assert_qmp(event, 'data/offset', self.image_len) +- self.assert_qmp(event, 'data/len', self.image_len) +- completed = True +- +- self.assert_no_active_commit() +- self.vm.shutdown() +- ++ self.run_commit_test(self.mid_img, self.backing_img) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', self.backing_img_abs).find("verification failed")) + self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', self.backing_img_abs).find("verification failed")) + +@@ -234,10 +223,9 @@ class TestRelativePaths(ImageCommitTestCase): + self.assert_qmp(result, 'error/desc', 'Base \'badfile\' not found') + + def test_top_is_active(self): +- self.assert_no_active_commit() +- result = self.vm.qmp('block-commit', device='drive0', top='%s' % self.test_img, base='%s' % self.backing_img) +- self.assert_qmp(result, 'error/class', 'GenericError') +- self.assert_qmp(result, 'error/desc', 'Top image as the active layer is currently unsupported') ++ self.run_commit_test(self.test_img, self.backing_img) ++ self.assertEqual(-1, qemu_io('-c', 'read -P 0xab 0 524288', self.backing_img_abs).find("verification failed")) ++ self.assertEqual(-1, qemu_io('-c', 'read -P 0xef 524288 524288', self.backing_img_abs).find("verification failed")) + + def test_top_and_base_reversed(self): + self.assert_no_active_commit() +@@ -253,6 +241,8 @@ class TestSetSpeed(ImageCommitTestCase): + qemu_img('create', backing_img, str(TestSetSpeed.image_len)) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, mid_img) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img) ++ qemu_io('-c', 'write -P 0x1 0 512', test_img) ++ qemu_io('-c', 'write -P 0xef 524288 524288', mid_img) + self.vm = iotests.VM().add_drive(test_img) + self.vm.launch() + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-Whitespace-cleanup.patch b/SOURCES/kvm-qemu-iotests-Whitespace-cleanup.patch new file mode 100644 index 0000000..d8f95c0 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-Whitespace-cleanup.patch @@ -0,0 +1,1110 @@ +From 092e23e82636cf8a114688523d060f96d4e36eef Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 4 Sep 2013 13:16:04 +0200 +Subject: [PATCH 35/38] qemu-iotests: Whitespace cleanup + +Message-id: <1379499002-5231-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 54434 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/6] qemu-iotests: Whitespace cleanup +Bugzilla: 1006959 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1006959 + +These scripts used to have a four characters indentation, with eight +consecutive spaces converted into a tab. Convert everything into spaces. + +Signed-off-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 79e40ab10e1f4450c11ab8430cb2547146ded639) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/check | 234 ++++++++++---------- + tests/qemu-iotests/common | 422 ++++++++++++++++++------------------ + tests/qemu-iotests/common.config | 6 +- + tests/qemu-iotests/common.filter | 42 ++-- + tests/qemu-iotests/common.pattern | 4 +- + tests/qemu-iotests/common.rc | 92 ++++---- + 6 files changed, 400 insertions(+), 400 deletions(-) + +diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check +index 74628ae..e51bae8 100755 +--- a/tests/qemu-iotests/check ++++ b/tests/qemu-iotests/check +@@ -78,50 +78,50 @@ _wrapup() + + if $showme + then +- : ++ : + elif $needwrap + then +- if [ -f check.time -a -f $tmp.time ] +- then +- cat check.time $tmp.time \ +- | $AWK_PROG ' +- { t[$1] = $2 } +-END { if (NR > 0) { +- for (i in t) print i " " t[i] +- } +- }' \ +- | sort -n >$tmp.out +- mv $tmp.out check.time +- fi +- +- if [ -f $tmp.expunged ] +- then +- notrun=`wc -l <$tmp.expunged | sed -e 's/ *//g'` +- try=`expr $try - $notrun` +- list=`echo "$list" | sed -f $tmp.expunged` +- fi +- +- echo "" >>check.log +- date >>check.log +- echo $list | fmt | sed -e 's/^/ /' >>check.log +- $interrupt && echo "Interrupted!" >>check.log +- +- if [ ! -z "$notrun" ] +- then +- echo "Not run:$notrun" +- echo "Not run:$notrun" >>check.log +- fi ++ if [ -f check.time -a -f $tmp.time ] ++ then ++ cat check.time $tmp.time \ ++ | $AWK_PROG ' ++ { t[$1] = $2 } ++END { if (NR > 0) { ++ for (i in t) print i " " t[i] ++ } ++ }' \ ++ | sort -n >$tmp.out ++ mv $tmp.out check.time ++ fi ++ ++ if [ -f $tmp.expunged ] ++ then ++ notrun=`wc -l <$tmp.expunged | sed -e 's/ *//g'` ++ try=`expr $try - $notrun` ++ list=`echo "$list" | sed -f $tmp.expunged` ++ fi ++ ++ echo "" >>check.log ++ date >>check.log ++ echo $list | fmt | sed -e 's/^/ /' >>check.log ++ $interrupt && echo "Interrupted!" >>check.log ++ ++ if [ ! -z "$notrun" ] ++ then ++ echo "Not run:$notrun" ++ echo "Not run:$notrun" >>check.log ++ fi + if [ ! -z "$n_bad" -a $n_bad != 0 ] +- then +- echo "Failures:$bad" +- echo "Failed $n_bad of $try tests" +- echo "Failures:$bad" | fmt >>check.log +- echo "Failed $n_bad of $try tests" >>check.log +- else +- echo "Passed all $try tests" +- echo "Passed all $try tests" >>check.log +- fi +- needwrap=false ++ then ++ echo "Failures:$bad" ++ echo "Failed $n_bad of $try tests" ++ echo "Failures:$bad" | fmt >>check.log ++ echo "Failed $n_bad of $try tests" >>check.log ++ else ++ echo "Passed all $try tests" ++ echo "Passed all $try tests" >>check.log ++ fi ++ needwrap=false + fi + + rm -f /tmp/*.out /tmp/*.err /tmp/*.time +@@ -185,82 +185,82 @@ do + + if $showme + then +- echo +- continue +- elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null ++ echo ++ continue ++ elif [ -f expunged ] && $expunge && egrep "^$seq([ ]|\$)" expunged >/dev/null + then +- echo " - expunged" +- rm -f $seq.out.bad +- echo "/^$seq\$/d" >>$tmp.expunged ++ echo " - expunged" ++ rm -f $seq.out.bad ++ echo "/^$seq\$/d" >>$tmp.expunged + elif [ ! -f $seq ] + then +- echo " - no such test?" +- echo "/^$seq\$/d" >>$tmp.expunged ++ echo " - no such test?" ++ echo "/^$seq\$/d" >>$tmp.expunged + else +- # really going to try and run this one +- # +- rm -f $seq.out.bad +- lasttime=`sed -n -e "/^$seq /s/.* //p" /tmp/check.sts +- +- start=`_wallclock` +- $timestamp && echo -n " ["`date "+%T"`"]" +- [ ! -x $seq ] && chmod u+x $seq # ensure we can run it +- MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ +- ./$seq >$tmp.out 2>&1 +- sts=$? +- $timestamp && _timestamp +- stop=`_wallclock` +- +- if [ -f core ] +- then +- echo -n " [dumped core]" +- mv core $seq.core +- err=true +- fi +- +- if [ -f $seq.notrun ] +- then +- $timestamp || echo -n " [not run] " +- $timestamp && echo " [not run]" && echo -n " $seq -- " +- cat $seq.notrun +- notrun="$notrun $seq" +- else +- if [ $sts -ne 0 ] +- then +- echo -n " [failed, exit status $sts]" +- err=true +- fi +- if [ ! -f $seq.out ] +- then +- echo " - no qualified output" +- err=true +- else +- if diff -w $seq.out $tmp.out >/dev/null 2>&1 +- then +- echo "" +- if $err +- then +- : +- else +- echo "$seq `expr $stop - $start`" >>$tmp.time +- fi +- else +- echo " - output mismatch (see $seq.out.bad)" +- mv $tmp.out $seq.out.bad +- $diff -w $seq.out $seq.out.bad +- err=true +- fi +- fi +- fi ++ # really going to try and run this one ++ # ++ rm -f $seq.out.bad ++ lasttime=`sed -n -e "/^$seq /s/.* //p" /tmp/check.sts ++ ++ start=`_wallclock` ++ $timestamp && echo -n " ["`date "+%T"`"]" ++ [ ! -x $seq ] && chmod u+x $seq # ensure we can run it ++ MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ ++ ./$seq >$tmp.out 2>&1 ++ sts=$? ++ $timestamp && _timestamp ++ stop=`_wallclock` ++ ++ if [ -f core ] ++ then ++ echo -n " [dumped core]" ++ mv core $seq.core ++ err=true ++ fi ++ ++ if [ -f $seq.notrun ] ++ then ++ $timestamp || echo -n " [not run] " ++ $timestamp && echo " [not run]" && echo -n " $seq -- " ++ cat $seq.notrun ++ notrun="$notrun $seq" ++ else ++ if [ $sts -ne 0 ] ++ then ++ echo -n " [failed, exit status $sts]" ++ err=true ++ fi ++ if [ ! -f $seq.out ] ++ then ++ echo " - no qualified output" ++ err=true ++ else ++ if diff -w $seq.out $tmp.out >/dev/null 2>&1 ++ then ++ echo "" ++ if $err ++ then ++ : ++ else ++ echo "$seq `expr $stop - $start`" >>$tmp.time ++ fi ++ else ++ echo " - output mismatch (see $seq.out.bad)" ++ mv $tmp.out $seq.out.bad ++ $diff -w $seq.out $seq.out.bad ++ err=true ++ fi ++ fi ++ fi + + fi + +@@ -268,12 +268,12 @@ do + # + if $err + then +- bad="$bad $seq" +- n_bad=`expr $n_bad + 1` +- quick=false ++ bad="$bad $seq" ++ n_bad=`expr $n_bad + 1` ++ quick=false + fi + [ -f $seq.notrun ] || try=`expr $try + 1` +- ++ + seq="after_$seq" + done + +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index 6826ea7..fecaf85 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -54,58 +54,58 @@ do + + if $group + then +- # arg after -g +- group_list=`sed -n /dev/null +- then +- : +- else +- echo "$t" >>$tmp.list +- fi +- done +- group=false +- continue ++ if [ -z "$group_list" ] ++ then ++ echo "Group \"$r\" is empty or not defined?" ++ exit 1 ++ fi ++ [ ! -s $tmp.list ] && touch $tmp.list ++ for t in $group_list ++ do ++ if grep -s "^$t\$" $tmp.list >/dev/null ++ then ++ : ++ else ++ echo "$t" >>$tmp.list ++ fi ++ done ++ group=false ++ continue + + elif $xgroup + then +- # arg after -x +- [ ! -s $tmp.list ] && ls [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] >$tmp.list 2>/dev/null +- group_list=`sed -n $tmp.list 2>/dev/null ++ group_list=`sed -n $tmp.tmp +- mv $tmp.tmp $tmp.list +- numsed=0 +- rm -f $tmp.sed +- fi +- echo "/^$t\$/d" >>$tmp.sed +- numsed=`expr $numsed + 1` +- done +- sed -f $tmp.sed <$tmp.list >$tmp.tmp +- mv $tmp.tmp $tmp.list +- xgroup=false +- continue ++ if [ -z "$group_list" ] ++ then ++ echo "Group \"$r\" is empty or not defined?" ++ exit 1 ++ fi ++ numsed=0 ++ rm -f $tmp.sed ++ for t in $group_list ++ do ++ if [ $numsed -gt 100 ] ++ then ++ sed -f $tmp.sed <$tmp.list >$tmp.tmp ++ mv $tmp.tmp $tmp.list ++ numsed=0 ++ rm -f $tmp.sed ++ fi ++ echo "/^$t\$/d" >>$tmp.sed ++ numsed=`expr $numsed + 1` ++ done ++ sed -f $tmp.sed <$tmp.list >$tmp.tmp ++ mv $tmp.tmp $tmp.list ++ xgroup=false ++ continue + + elif $imgopts + then +@@ -119,11 +119,11 @@ s/ .*//p + case "$r" + in + +- -\? | -h | --help) # usage +- echo "Usage: $0 [options] [testlist]"' ++ -\? | -h | --help) # usage ++ echo "Usage: $0 [options] [testlist]"' + + common options +- -v verbose ++ -v verbose + + check options + -raw test raw (default) +@@ -138,162 +138,162 @@ check options + -sheepdog test sheepdog + -nbd test nbd + -ssh test ssh +- -xdiff graphical mode diff +- -nocache use O_DIRECT on backing file +- -misalign misalign memory allocations +- -n show me, do not run tests ++ -xdiff graphical mode diff ++ -nocache use O_DIRECT on backing file ++ -misalign misalign memory allocations ++ -n show me, do not run tests + -o options -o options to pass to qemu-img create/convert +- -T output timestamps +- -r randomize test order +- ++ -T output timestamps ++ -r randomize test order ++ + testlist options +- -g group[,group...] include tests from these groups +- -x group[,group...] exclude tests from these groups +- NNN include test NNN +- NNN-NNN include test range (eg. 012-021) ++ -g group[,group...] include tests from these groups ++ -x group[,group...] exclude tests from these groups ++ NNN include test NNN ++ NNN-NNN include test range (eg. 012-021) + ' +- exit 0 +- ;; +- +- -raw) +- IMGFMT=raw +- xpand=false +- ;; +- +- -cow) +- IMGFMT=cow +- xpand=false +- ;; +- +- -qcow) +- IMGFMT=qcow +- xpand=false +- ;; +- +- -qcow2) +- IMGFMT=qcow2 +- xpand=false +- ;; +- +- -qed) +- IMGFMT=qed +- xpand=false +- ;; +- +- -vdi) +- IMGFMT=vdi +- xpand=false +- ;; +- +- -vmdk) +- IMGFMT=vmdk +- xpand=false +- ;; +- +- -vpc) +- IMGFMT=vpc +- xpand=false +- ;; +- +- -rbd) +- IMGPROTO=rbd +- xpand=false +- ;; +- -sheepdog) +- IMGPROTO=sheepdog +- xpand=false +- ;; +- -nbd) +- IMGPROTO=nbd +- xpand=false +- ;; ++ exit 0 ++ ;; ++ ++ -raw) ++ IMGFMT=raw ++ xpand=false ++ ;; ++ ++ -cow) ++ IMGFMT=cow ++ xpand=false ++ ;; ++ ++ -qcow) ++ IMGFMT=qcow ++ xpand=false ++ ;; ++ ++ -qcow2) ++ IMGFMT=qcow2 ++ xpand=false ++ ;; ++ ++ -qed) ++ IMGFMT=qed ++ xpand=false ++ ;; ++ ++ -vdi) ++ IMGFMT=vdi ++ xpand=false ++ ;; ++ ++ -vmdk) ++ IMGFMT=vmdk ++ xpand=false ++ ;; ++ ++ -vpc) ++ IMGFMT=vpc ++ xpand=false ++ ;; ++ ++ -rbd) ++ IMGPROTO=rbd ++ xpand=false ++ ;; ++ -sheepdog) ++ IMGPROTO=sheepdog ++ xpand=false ++ ;; ++ -nbd) ++ IMGPROTO=nbd ++ xpand=false ++ ;; + -ssh) + IMGPROTO=ssh + xpand=false + ;; +- -nocache) +- QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache" +- xpand=false +- ;; ++ -nocache) ++ QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache" ++ xpand=false ++ ;; + +- -misalign) +- QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" +- xpand=false +- ;; ++ -misalign) ++ QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign" ++ xpand=false ++ ;; + + -valgrind) + valgrind=true +- xpand=false ++ xpand=false + ;; + +- -g) # -g group ... pick from group file +- group=true +- xpand=false +- ;; +- +- -xdiff) # graphical diff mode +- xpand=false +- +- if [ ! -z "$DISPLAY" ] +- then +- which xdiff >/dev/null 2>&1 && diff=xdiff +- which gdiff >/dev/null 2>&1 && diff=gdiff +- which tkdiff >/dev/null 2>&1 && diff=tkdiff +- which xxdiff >/dev/null 2>&1 && diff=xxdiff +- fi +- ;; +- +- -n) # show me, don't do it +- showme=true +- xpand=false +- ;; ++ -g) # -g group ... pick from group file ++ group=true ++ xpand=false ++ ;; ++ ++ -xdiff) # graphical diff mode ++ xpand=false ++ ++ if [ ! -z "$DISPLAY" ] ++ then ++ which xdiff >/dev/null 2>&1 && diff=xdiff ++ which gdiff >/dev/null 2>&1 && diff=gdiff ++ which tkdiff >/dev/null 2>&1 && diff=tkdiff ++ which xxdiff >/dev/null 2>&1 && diff=xxdiff ++ fi ++ ;; ++ ++ -n) # show me, don't do it ++ showme=true ++ xpand=false ++ ;; + -o) + imgopts=true + xpand=false + ;; +- -r) # randomize test order +- randomize=true +- xpand=false +- ;; +- +- -T) # turn on timestamp output +- timestamp=true +- xpand=false +- ;; +- +- -v) +- verbose=true +- xpand=false +- ;; +- -x) # -x group ... exclude from group file +- xgroup=true +- xpand=false +- ;; +- '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') +- echo "No tests?" +- status=1 +- exit $status +- ;; +- +- [0-9]*-[0-9]*) +- eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'` +- ;; +- +- [0-9]*-) +- eval `echo $r | sed -e 's/^/start=/' -e 's/-//'` +- end=`echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'` +- if [ -z "$end" ] +- then +- echo "No tests in range \"$r\"?" +- status=1 +- exit $status +- fi +- ;; +- +- *) +- start=$r +- end=$r +- ;; ++ -r) # randomize test order ++ randomize=true ++ xpand=false ++ ;; ++ ++ -T) # turn on timestamp output ++ timestamp=true ++ xpand=false ++ ;; ++ ++ -v) ++ verbose=true ++ xpand=false ++ ;; ++ -x) # -x group ... exclude from group file ++ xgroup=true ++ xpand=false ++ ;; ++ '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') ++ echo "No tests?" ++ status=1 ++ exit $status ++ ;; ++ ++ [0-9]*-[0-9]*) ++ eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'` ++ ;; ++ ++ [0-9]*-) ++ eval `echo $r | sed -e 's/^/start=/' -e 's/-//'` ++ end=`echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'` ++ if [ -z "$end" ] ++ then ++ echo "No tests in range \"$r\"?" ++ status=1 ++ exit $status ++ fi ++ ;; ++ ++ *) ++ start=$r ++ end=$r ++ ;; + + esac + +@@ -303,26 +303,26 @@ testlist options + + if $xpand + then +- have_test_arg=true +- $AWK_PROG /dev/null +- then +- # in group file ... OK +- echo $id >>$tmp.list +- else +- if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null +- then +- # expunged ... will be reported, but not run, later +- echo $id >>$tmp.list +- else +- # oops +- echo "$id - unknown test, ignored" +- fi +- fi +- done ++ have_test_arg=true ++ $AWK_PROG /dev/null ++ then ++ # in group file ... OK ++ echo $id >>$tmp.list ++ else ++ if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null ++ then ++ # expunged ... will be reported, but not run, later ++ echo $id >>$tmp.list ++ else ++ # oops ++ echo "$id - unknown test, ignored" ++ fi ++ fi ++ done + fi + + done +@@ -337,11 +337,11 @@ then + else + if $have_test_arg + then +- # had test numbers, but none in group file ... do nothing +- touch $tmp.list ++ # had test numbers, but none in group file ... do nothing ++ touch $tmp.list + else +- # no test numbers, do everything from group file +- sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' $tmp.list ++ # no test numbers, do everything from group file ++ sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' $tmp.list + fi + fi + +diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config +index 08a3f10..d794e62 100644 +--- a/tests/qemu-iotests/common.config ++++ b/tests/qemu-iotests/common.config +@@ -19,7 +19,7 @@ + # setup and check for config parameters, and in particular + # + # EMAIL - email of the script runner. +-# TEST_DIR - scratch test directory ++# TEST_DIR - scratch test directory + # + # - These can be added to $HOST_CONFIG_DIR (witch default to ./config) + # below or a separate local configuration file can be used (using +@@ -111,11 +111,11 @@ export QEMU_NBD=$QEMU_NBD_PROG + [ -f /etc/qemu-iotest.config ] && . /etc/qemu-iotest.config + + if [ -z "$TEST_DIR" ]; then +- TEST_DIR=`pwd`/scratch ++ TEST_DIR=`pwd`/scratch + fi + + if [ ! -e "$TEST_DIR" ]; then +- mkdir "$TEST_DIR" ++ mkdir "$TEST_DIR" + fi + + if [ ! -d "$TEST_DIR" ]; then +diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter +index 97a31ff..5dfda63 100644 +--- a/tests/qemu-iotests/common.filter ++++ b/tests/qemu-iotests/common.filter +@@ -25,19 +25,19 @@ + # Outputs suitable message to stdout if it's not in range. + # + # A verbose option, -v, may be used as the LAST argument +-# +-# e.g. ++# ++# e.g. + # foo: 0.0298 = 0.03 +/- 5% +-# _within_tolerance "foo" 0.0298 0.03 5% +-# ++# _within_tolerance "foo" 0.0298 0.03 5% ++# + # foo: 0.0298 = 0.03 +/- 0.01 + # _within_tolerance "foo" 0.0298 0.03 0.01 + # + # foo: 0.0298 = 0.03 -0.01 +0.002 + # _within_tolerance "foo" 0.0298 0.03 0.01 0.002 + # +-# foo: verbose output of 0.0298 = 0.03 +/- 5% +-# _within_tolerance "foo" 0.0298 0.03 5% -v ++# foo: verbose output of 0.0298 = 0.03 +/- 5% ++# _within_tolerance "foo" 0.0298 0.03 5% -v + _within_tolerance() + { + _name=$1 +@@ -51,10 +51,10 @@ _within_tolerance() + # maxtol arg is optional + # verbose arg is optional + if [ $# -ge 5 ] +- then ++ then + if [ "$5" = "-v" ] + then +- _verbose=1 ++ _verbose=1 + else + _maxtol=$5 + fi +@@ -65,18 +65,18 @@ _within_tolerance() + fi + + # find min with or without % +- _mintolerance=`echo $_mintol | sed -e 's/%//'` ++ _mintolerance=`echo $_mintol | sed -e 's/%//'` + if [ $_mintol = $_mintolerance ] +- then ++ then + _min=`echo "scale=5; $_correct_val-$_mintolerance" | bc` + else + _min=`echo "scale=5; $_correct_val-$_mintolerance*0.01*$_correct_val" | bc` + fi + + # find max with or without % +- _maxtolerance=`echo $_maxtol | sed -e 's/%//'` ++ _maxtolerance=`echo $_maxtol | sed -e 's/%//'` + if [ $_maxtol = $_maxtolerance ] +- then ++ then + _max=`echo "scale=5; $_correct_val+$_maxtolerance" | bc` + else + _max=`echo "scale=5; $_correct_val+$_maxtolerance*0.01*$_correct_val" | bc` +@@ -88,7 +88,7 @@ _within_tolerance() + cat <$tmp.bc.1 + scale=5; + if ($_min <= $_given_val) 1; +-if ($_min > $_given_val) 0; ++if ($_min > $_given_val) 0; + EOF + + cat <$tmp.bc.2 +@@ -102,21 +102,21 @@ EOF + + rm -f $tmp.bc.[12] + +- _in_range=`expr $_above_min \& $_below_max` ++ _in_range=`expr $_above_min \& $_below_max` + + # fix up min, max precision for output + # can vary for 5.3, 6.2 + _min=`echo $_min | sed -e 's/0*$//'` # get rid of trailling zeroes + _max=`echo $_max | sed -e 's/0*$//'` # get rid of trailling zeroes + +- if [ $_in_range -eq 1 ] ++ if [ $_in_range -eq 1 ] + then +- [ $_verbose -eq 1 ] && echo $_name is in range +- return 0 ++ [ $_verbose -eq 1 ] && echo $_name is in range ++ return 0 + else +- [ $_verbose -eq 1 ] && echo $_name has value of $_given_val +- [ $_verbose -eq 1 ] && echo $_name is NOT in range $_min .. $_max +- return 1 ++ [ $_verbose -eq 1 ] && echo $_name has value of $_given_val ++ [ $_verbose -eq 1 ] && echo $_name is NOT in range $_min .. $_max ++ return 1 + fi + } + +@@ -125,7 +125,7 @@ EOF + _filter_date() + { + sed \ +- -e 's/[A-Z][a-z][a-z] [A-z][a-z][a-z] *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]$/DATE/' ++ -e 's/[A-Z][a-z][a-z] [A-z][a-z][a-z] *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]$/DATE/' + } + + # replace occurrences of the actual TEST_DIR value with TEST_DIR +diff --git a/tests/qemu-iotests/common.pattern b/tests/qemu-iotests/common.pattern +index 85a40ee..00e0f60 100644 +--- a/tests/qemu-iotests/common.pattern ++++ b/tests/qemu-iotests/common.pattern +@@ -106,8 +106,8 @@ function io_test2() { + local num=$3 + + # Pattern (repeat after 9 clusters): +- # used - used - free - used - compressed - compressed - +- # free - free - compressed ++ # used - used - free - used - compressed - compressed - ++ # free - free - compressed + + # Write the clusters to be compressed + echo === Clusters to be compressed [1] +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 31eb62b..1e9b2f4 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -20,17 +20,17 @@ + dd() + { + if [ "$HOSTOS" == "Linux" ] +- then +- command dd --help | grep noxfer > /dev/null 2>&1 +- +- if [ "$?" -eq 0 ] +- then +- command dd status=noxfer $@ +- else +- command dd $@ +- fi ++ then ++ command dd --help | grep noxfer > /dev/null 2>&1 ++ ++ if [ "$?" -eq 0 ] ++ then ++ command dd status=noxfer $@ ++ else ++ command dd $@ ++ fi + else +- command dd $@ ++ command dd $@ + fi + } + +@@ -187,8 +187,8 @@ _get_pids_by_name() + { + if [ $# -ne 1 ] + then +- echo "Usage: _get_pids_by_name process-name" 1>&2 +- exit 1 ++ echo "Usage: _get_pids_by_name process-name" 1>&2 ++ exit 1 + fi + + # Algorithm ... all ps(1) variants have a time of the form MM:SS or +@@ -200,12 +200,12 @@ _get_pids_by_name() + + ps $PS_ALL_FLAGS \ + | sed -n \ +- -e 's/$/ /' \ +- -e 's/[ ][ ]*/ /g' \ +- -e 's/^ //' \ +- -e 's/^[^ ]* //' \ +- -e "/[0-9]:[0-9][0-9] *[^ ]*\/$1 /s/ .*//p" \ +- -e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p" ++ -e 's/$/ /' \ ++ -e 's/[ ][ ]*/ /g' \ ++ -e 's/^ //' \ ++ -e 's/^[^ ]* //' \ ++ -e "/[0-9]:[0-9][0-9] *[^ ]*\/$1 /s/ .*//p" \ ++ -e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p" + } + + # fqdn for localhost +@@ -223,8 +223,8 @@ _need_to_be_root() + id=`id | $SED_PROG -e 's/(.*//' -e 's/.*=//'` + if [ "$id" -ne 0 ] + then +- echo "Arrgh ... you need to be root (not uid=$id) to run this test" +- exit 1 ++ echo "Arrgh ... you need to be root (not uid=$id) to run this test" ++ exit 1 + fi + } + +@@ -242,33 +242,33 @@ _need_to_be_root() + _do() + { + if [ $# -eq 1 ]; then +- _cmd=$1 ++ _cmd=$1 + elif [ $# -eq 2 ]; then +- _note=$1 +- _cmd=$2 +- echo -n "$_note... " ++ _note=$1 ++ _cmd=$2 ++ echo -n "$_note... " + else +- echo "Usage: _do [note] cmd" 1>&2 +- status=1; exit ++ echo "Usage: _do [note] cmd" 1>&2 ++ status=1; exit + fi + + (eval "echo '---' \"$_cmd\"") >>$here/$seq.full + (eval "$_cmd") >$tmp._out 2>&1; ret=$? + cat $tmp._out >>$here/$seq.full + if [ $# -eq 2 ]; then +- if [ $ret -eq 0 ]; then +- echo "done" +- else +- echo "fail" +- fi ++ if [ $ret -eq 0 ]; then ++ echo "done" ++ else ++ echo "fail" ++ fi + fi + if [ $ret -ne 0 ] \ +- && [ "$_do_die_on_error" = "always" \ +- -o \( $# -eq 2 -a "$_do_die_on_error" = "message_only" \) ] ++ && [ "$_do_die_on_error" = "always" \ ++ -o \( $# -eq 2 -a "$_do_die_on_error" = "message_only" \) ] + then +- [ $# -ne 2 ] && echo +- eval "echo \"$_cmd\" failed \(returned $ret\): see $seq.full" +- status=1; exit ++ [ $# -ne 2 ] && echo ++ eval "echo \"$_cmd\" failed \(returned $ret\): see $seq.full" ++ status=1; exit + fi + + return $ret +@@ -299,9 +299,9 @@ _fail() + _supported_fmt() + { + for f; do +- if [ "$f" = "$IMGFMT" -o "$f" = "generic" ]; then +- return +- fi ++ if [ "$f" = "$IMGFMT" -o "$f" = "generic" ]; then ++ return ++ fi + done + + _notrun "not suitable for this image format: $IMGFMT" +@@ -312,9 +312,9 @@ _supported_fmt() + _supported_proto() + { + for f; do +- if [ "$f" = "$IMGPROTO" -o "$f" = "generic" ]; then +- return +- fi ++ if [ "$f" = "$IMGPROTO" -o "$f" = "generic" ]; then ++ return ++ fi + done + + _notrun "not suitable for this image protocol: $IMGPROTO" +@@ -326,10 +326,10 @@ _supported_os() + { + for h + do +- if [ "$h" = "$HOSTOS" ] +- then +- return +- fi ++ if [ "$h" = "$HOSTOS" ] ++ then ++ return ++ fi + done + + _notrun "not suitable for this OS: $HOSTOS" +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-add-.-check-cloop-support.patch b/SOURCES/kvm-qemu-iotests-add-.-check-cloop-support.patch new file mode 100644 index 0000000..15a9cef --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-add-.-check-cloop-support.patch @@ -0,0 +1,70 @@ +From 5be29b09f5d571260cb48bc4a24f32265662fed1 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:09 +0100 +Subject: [PATCH 02/49] qemu-iotests: add ./check -cloop support + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-3-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 02/48] qemu-iotests: add ./check -cloop support +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Add the cloop block driver to qemu-iotests. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/common | 7 +++++++ + tests/qemu-iotests/common.rc | 3 +++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common +index 8cde7f1..b5043fc 100644 +--- a/tests/qemu-iotests/common ++++ b/tests/qemu-iotests/common +@@ -129,6 +129,7 @@ common options + check options + -raw test raw (default) + -cow test cow ++ -cloop test cloop + -qcow test qcow + -qcow2 test qcow2 + -qed test qed +@@ -167,6 +168,12 @@ testlist options + xpand=false + ;; + ++ -cloop) ++ IMGFMT=cloop ++ IMGFMT_GENERIC=false ++ xpand=false ++ ;; ++ + -qcow) + IMGFMT=qcow + xpand=false +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 7f62457..65c5bc1 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -350,6 +350,9 @@ _fail() + # + _supported_fmt() + { ++ # "generic" is suitable for most image formats. For some formats it doesn't ++ # work, however (most notably read-only formats), so they can opt out by ++ # setting IMGFMT_GENERIC to false. + for f; do + if [ "$f" = "$IMGFMT" -o "$f" = "generic" -a "$IMGFMT_GENERIC" = "true" ]; then + return +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-add-cloop-input-validation-tests.patch b/SOURCES/kvm-qemu-iotests-add-cloop-input-validation-tests.patch new file mode 100644 index 0000000..2ede23a --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-add-cloop-input-validation-tests.patch @@ -0,0 +1,125 @@ +From 1b87276ff64d27cf2ab9096f7e18ad0d71ae79ac Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:10 +0100 +Subject: [PATCH 03/49] qemu-iotests: add cloop input validation tests + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-4-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 03/48] qemu-iotests: add cloop input validation tests +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +Add a cloop format-specific test case. Later patches add tests for +input validation to the script. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf + +Conflicts: +tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + tests/qemu-iotests/075 | 53 ++++++++++++++++++++ + tests/qemu-iotests/075.out | 6 ++ + tests/qemu-iotests/group | 1 + + .../sample_images/simple-pattern.cloop.bz2 | Bin 0 -> 488 bytes + 4 files changed, 60 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/075 + create mode 100644 tests/qemu-iotests/075.out + create mode 100644 tests/qemu-iotests/sample_images/simple-pattern.cloop.bz2 + +diff --git a/tests/qemu-iotests/075 b/tests/qemu-iotests/075 +new file mode 100755 +index 0000000..88ae8bb +--- /dev/null ++++ b/tests/qemu-iotests/075 +@@ -0,0 +1,53 @@ ++#!/bin/bash ++# ++# cloop format input validation tests ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=stefanha@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt cloop ++_supported_proto generic ++_supported_os Linux ++ ++echo ++echo "== check that the first sector can be read ==" ++_use_sample_img simple-pattern.cloop.bz2 ++$QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/075.out b/tests/qemu-iotests/075.out +new file mode 100644 +index 0000000..26661fa +--- /dev/null ++++ b/tests/qemu-iotests/075.out +@@ -0,0 +1,6 @@ ++QA output created by 075 ++ ++== check that the first sector can be read == ++read 512/512 bytes at offset 0 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 51e7f58..427818c 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -71,6 +71,7 @@ + 067 rw auto + 068 rw auto + 070 rw auto ++075 rw auto + 077 rw auto + 079 rw auto + 082 rw auto quick +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-add-empty-test-case-for-vmdk.patch b/SOURCES/kvm-qemu-iotests-add-empty-test-case-for-vmdk.patch new file mode 100644 index 0000000..d527d8b --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-add-empty-test-case-for-vmdk.patch @@ -0,0 +1,109 @@ +From c896fb12ce68b579e8954651db3d903600cf0f00 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:50 +0800 +Subject: [PATCH 04/13] qemu-iotests: add empty test case for vmdk + +Message-id: <1377573001-27070-5-git-send-email-famz@redhat.com> +Patchwork-id: 53784 +O-Subject: [RHEL-7 qemu-kvm PATCH 04/13] qemu-iotests: add empty test case for + vmdk +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +Will add vmdk specific tests later here. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit ca6cbb657d66a7beb70f9d91848c80d1a72b1674) +Signed-off-by: Fam Zheng + +Conflicts: + tests/qemu-iotests/group + Context conflict because some test scritps do not exist yet. +--- + tests/qemu-iotests/059 | 51 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/059.out | 2 + + tests/qemu-iotests/group | 1 + + 3 files changed, 54 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/059 + create mode 100644 tests/qemu-iotests/059.out + +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +new file mode 100755 +index 0000000..9dc7f64 +--- /dev/null ++++ b/tests/qemu-iotests/059 +@@ -0,0 +1,51 @@ ++#!/bin/bash ++# ++# Test case for vmdk ++# ++# Copyright (C) 2013 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=famz@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++# This tests vmdk-specific low-level functionality ++_supported_fmt vmdk ++_supported_proto generic ++_supported_os Linux ++ ++granularity_offset=16 ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +new file mode 100644 +index 0000000..4ca7f29 +--- /dev/null ++++ b/tests/qemu-iotests/059.out +@@ -0,0 +1,2 @@ ++QA output created by 059 ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 68eabda..3b1d042 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -60,3 +60,4 @@ + 051 rw auto + 052 rw auto backing + 053 rw auto ++059 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-add-monolithicFlat-creation-test-to-059.patch b/SOURCES/kvm-qemu-iotests-add-monolithicFlat-creation-test-to-059.patch new file mode 100644 index 0000000..f0a8d33 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-add-monolithicFlat-creation-test-to-059.patch @@ -0,0 +1,64 @@ +From 1e237fbebc414e23218350bdbb2b4f128f345800 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 9 Oct 2013 09:50:23 +0200 +Subject: [PATCH 11/11] qemu-iotests: add monolithicFlat creation test to 059 + +RH-Author: Fam Zheng +Message-id: <1381312223-7074-4-git-send-email-famz@redhat.com> +Patchwork-id: 54795 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/3] qemu-iotests: add monolithicFlat creation test to 059 +Bugzilla: 1017049 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 2fe2e2907163f6d86b6bbced776ec8f9319ca83f) +Signed-off-by: Fam Zheng +--- + tests/qemu-iotests/059 | 5 +++++ + tests/qemu-iotests/059.out | 7 +++++++ + 2 files changed, 12 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/059 | 5 +++++ + tests/qemu-iotests/059.out | 7 +++++++ + 2 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index b03429d..d2b3f9e 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -66,6 +66,11 @@ poke_file "$TEST_IMG" "$capacity_offset" "\xff\xff\xff\xff" + poke_file "$TEST_IMG" "$grain_table_size_offset" "\x01\x00\x00\x00" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo "=== Testing monolithicFlat creation and opening ===" ++echo ++IMGOPTS="subformat=monolithicFlat" _make_test_img 2G ++$QEMU_IMG info $TEST_IMG | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 9e715e5..2a4c44d 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -17,4 +17,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + L1 size too big + qemu-io: can't open device TEST_DIR/t.vmdk + no file open, try 'help open' ++=== Testing monolithicFlat creation and opening === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 ++image: TEST_DIR/t.vmdk ++file format: vmdk ++virtual size: 2.0G (2147483648 bytes) ++disk size: 4.0K + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-add-poke_file-utility-function.patch b/SOURCES/kvm-qemu-iotests-add-poke_file-utility-function.patch new file mode 100644 index 0000000..fae94de --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-add-poke_file-utility-function.patch @@ -0,0 +1,45 @@ +From 43e2ea9a31c301e162507a3f656b8719454df086 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 6 Aug 2013 15:44:49 +0800 +Subject: [PATCH 03/13] qemu-iotests: add poke_file utility function + +Message-id: <1377573001-27070-4-git-send-email-famz@redhat.com> +Patchwork-id: 53783 +O-Subject: [RHEL-7 qemu-kvm PATCH 03/13] qemu-iotests: add poke_file utility function +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +The new poke_file function sets bytes at an offset in a file given a +printf-style format string. It can be used to corrupt an image file for +test coverage of error paths. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 23ea2ecc2a43d850bc9482068201ece5da36a448) +Signed-off-by: Fam Zheng +--- + tests/qemu-iotests/common.rc | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc +index 1e9b2f4..1187b86 100644 +--- a/tests/qemu-iotests/common.rc ++++ b/tests/qemu-iotests/common.rc +@@ -34,6 +34,12 @@ dd() + fi + } + ++# poke_file 'test.img' 512 '\xff\xfe' ++poke_file() ++{ ++ printf "$3" | dd "of=$1" bs=1 "seek=$2" conv=notrunc &>/dev/null ++} ++ + # we need common.config + if [ "$iam" != "check" ] + then +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-add-test-for-qcow2-preallocation-with-d.patch b/SOURCES/kvm-qemu-iotests-add-test-for-qcow2-preallocation-with-d.patch new file mode 100644 index 0000000..c1db5e4 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-add-test-for-qcow2-preallocation-with-d.patch @@ -0,0 +1,161 @@ +From a3a428e70ae71ec09d66cd405bf6a0ef7c42feb4 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sat, 15 Feb 2014 16:03:50 +0100 +Subject: [PATCH 5/5] qemu-iotests: add test for qcow2 preallocation with different cluster sizes + +RH-Author: Max Reitz +Message-id: <1392480230-24011-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 57295 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 4/4] qemu-iotests: add test for qcow2 preallocation with different cluster sizes +Bugzilla: 1055848 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +From: Hu Tao + +BZ: 1049176 +BZ: 1055848 + +Reviewed-by: Max Reitz +Signed-off-by: Hu Tao +Signed-off-by: Kevin Wolf +(cherry picked from commit 693a50ade339e3ef9b042fd73a3b81405101ba3d) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/079 | 63 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/079.out | 32 +++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 96 insertions(+) + create mode 100755 tests/qemu-iotests/079 + create mode 100644 tests/qemu-iotests/079.out + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/079 | 63 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/079.out | 32 ++++++++++++++++++++++ + tests/qemu-iotests/group | 1 + + 3 files changed, 96 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/079 + create mode 100644 tests/qemu-iotests/079.out + +diff --git a/tests/qemu-iotests/079 b/tests/qemu-iotests/079 +new file mode 100755 +index 0000000..2142bbb +--- /dev/null ++++ b/tests/qemu-iotests/079 +@@ -0,0 +1,63 @@ ++#!/bin/bash ++# ++# Test qcow2 preallocation with different cluster_sizes ++# ++# Copyright (C) 2014 Fujitsu. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=hutao@cn.fujitsu.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 ++_supported_proto file ++_supported_os Linux ++ ++function test_qemu_img() ++{ ++ echo qemu-img "$@" | _filter_testdir ++ $QEMU_IMG "$@" 2>&1 | _filter_testdir ++ echo ++} ++ ++echo "=== Check option preallocation and cluster_size ===" ++echo ++cluster_sizes="16384 32768 65536 131072 262144 524288 1048576 2097152 4194304" ++ ++for s in $cluster_sizes; do ++ test_qemu_img create -f $IMGFMT -o preallocation=metadata,cluster_size=$s "$TEST_IMG" 4G ++done ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/079.out b/tests/qemu-iotests/079.out +new file mode 100644 +index 0000000..ef4b8c9 +--- /dev/null ++++ b/tests/qemu-iotests/079.out +@@ -0,0 +1,32 @@ ++QA output created by 079 ++=== Check option preallocation and cluster_size === ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=16384 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=16384 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=32768 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=32768 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=65536 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=131072 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=131072 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=262144 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=262144 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=524288 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=524288 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=1048576 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=1048576 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=2097152 TEST_DIR/t.qcow2 4G ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=2097152 preallocation='metadata' lazy_refcounts=off ++ ++qemu-img create -f qcow2 -o preallocation=metadata,cluster_size=4194304 TEST_DIR/t.qcow2 4G ++qemu-img: TEST_DIR/t.qcow2: Cluster size must be a power of two between 512 and 2048k ++Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 size=4294967296 encryption=off cluster_size=4194304 preallocation='metadata' lazy_refcounts=off ++ ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index dd70acb..fce6ca8 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -72,3 +72,4 @@ + 068 rw auto + 070 rw auto + 077 rw auto ++079 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-filter-QEMU-version-in-monitor-banner.patch b/SOURCES/kvm-qemu-iotests-filter-QEMU-version-in-monitor-banner.patch new file mode 100644 index 0000000..c2bdbee --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-filter-QEMU-version-in-monitor-banner.patch @@ -0,0 +1,252 @@ +From 61a448529ef5b2a2ad37e7f7ff5d858593abc9c6 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 5 Aug 2013 14:40:34 +0200 +Subject: [PATCH 33/38] qemu-iotests: filter QEMU version in monitor banner + +Message-id: <1379499002-5231-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 54432 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/6] qemu-iotests: filter QEMU version in monitor banner +Bugzilla: 1006959 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1006959 + +Filter out the QEMU monitor version banner so that tests do not break +when the QEMU version number is changed. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 9580498b9a599b38c3a28599dcd40bd59f12af2c) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/051.out | 64 +++++++++++++++++++------------------- + tests/qemu-iotests/common.filter | 3 +- + 2 files changed, 34 insertions(+), 33 deletions(-) + +diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out +index 9588d0c..5582ed3 100644 +--- a/tests/qemu-iotests/051.out ++++ b/tests/qemu-iotests/051.out +@@ -23,11 +23,11 @@ QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: could not + === Enable and disable lazy refcounting on the command line, plus some invalid values === + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts= +@@ -51,72 +51,72 @@ QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: Lazy ref + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: could not open disk image TEST_DIR/t.qcow2: Invalid argument + + Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + + === No medium === + + Testing: -drive if=floppy +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive if=ide,media=cdrom +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive if=scsi,media=cdrom +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive if=ide +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: Device needs media, but drive is empty + QEMU_PROG: Device initialization failed. + QEMU_PROG: Initialization of device ide-hd failed + + Testing: -drive if=virtio +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty + QEMU_PROG: -drive if=virtio: Device initialization failed. + QEMU_PROG: -drive if=virtio: Device initialization failed. + QEMU_PROG: -drive if=virtio: Device 'virtio-blk-pci' could not be initialized + + Testing: -drive if=scsi +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -drive if=scsi: Device needs media, but drive is empty + QEMU_PROG: -drive if=scsi: Device initialization failed. + QEMU_PROG: Device initialization failed. + QEMU_PROG: Initialization of device lsi53c895a failed + + Testing: -drive if=none,id=disk -device ide-cd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive if=none,id=disk -device ide-drive,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device ide-drive,drive=disk: Device needs media, but drive is empty + QEMU_PROG: -device ide-drive,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-drive,drive=disk: Device 'ide-drive' could not be initialized + + Testing: -drive if=none,id=disk -device ide-hd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device ide-hd,drive=disk: Device needs media, but drive is empty + QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-hd,drive=disk: Device 'ide-hd' could not be initialized + + Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty + QEMU_PROG: -device scsi-disk,drive=disk: Device initialization failed. + QEMU_PROG: -device scsi-disk,drive=disk: Device 'scsi-disk' could not be initialized + + Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device scsi-hd,drive=disk: Device needs media, but drive is empty + QEMU_PROG: -device scsi-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device scsi-hd,drive=disk: Device 'scsi-hd' could not be initialized +@@ -125,77 +125,77 @@ QEMU_PROG: -device scsi-hd,drive=disk: Device 'scsi-hd' could not be initialized + === Read-only === + + Testing: -drive file=TEST_DIR/t.qcow2,if=floppy,readonly=on +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,media=cdrom,readonly=on +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,media=cdrom,readonly=on +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on + QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on: read-only not supported by this bus type + + Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-cd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-drive,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device ide-drive,drive=disk: Can't use a read-only drive + QEMU_PROG: -device ide-drive,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-drive,drive=disk: Device 'ide-drive' could not be initialized + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-hd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) QEMU_PROG: -device ide-hd,drive=disk: Can't use a read-only drive + QEMU_PROG: -device ide-hd,drive=disk: Device initialization failed. + QEMU_PROG: -device ide-hd,drive=disk: Device 'ide-hd' could not be initialized + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + + === Cache modes === + + Testing: -drive media=cdrom,cache=none +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive media=cdrom,cache=directsync +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive media=cdrom,cache=writeback +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive media=cdrom,cache=writethrough +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive media=cdrom,cache=unsafe +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive media=cdrom,cache=invalid_value +@@ -205,7 +205,7 @@ QEMU_PROG: -drive media=cdrom,cache=invalid_value: invalid cache option + === Specifying the protocol layer === + + Testing: -drive file=TEST_DIR/t.qcow2,file.driver=file +-QEMU 1.5.50 monitor - type 'help' for more information ++QEMU X.Y.Z monitor - type 'help' for more information + (qemu) qququiquit + + Testing: -drive file=TEST_DIR/t.qcow2,file.driver=qcow2 +diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter +index 9dbcae8..97a31ff 100644 +--- a/tests/qemu-iotests/common.filter ++++ b/tests/qemu-iotests/common.filter +@@ -155,7 +155,8 @@ _filter_qemu_io() + # replace occurrences of QEMU_PROG with "qemu" + _filter_qemu() + { +- sed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" ++ sed -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" \ ++ -e 's#^QEMU [0-9]\+\.[0-9]\+\.[0-9]\+ monitor#QEMU X.Y.Z monitor#' + } + + # make sure this script returns success +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-fix-test-case-059.patch b/SOURCES/kvm-qemu-iotests-fix-test-case-059.patch new file mode 100644 index 0000000..9ba2e1c --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-fix-test-case-059.patch @@ -0,0 +1,65 @@ +From aefd8fc94d47366ba697967f3c9704dfeb5bee34 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:33 +0100 +Subject: [PATCH 76/87] qemu-iotests: fix test case 059 + +RH-Author: Max Reitz +Message-id: <1383756824-6921-11-git-send-email-mreitz@redhat.com> +Patchwork-id: 55565 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 10/21] qemu-iotests: fix test case 059 +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +Since commit "block: Error parameter for open functions", error output +is more verbose. Update test case output file to follow the change. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit fc7ce63fb101ffb56027a04e89c8c6a38031bfc3) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/059.out | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/059.out | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 2a4c44d..9159dbe 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -3,19 +3,19 @@ QA output created by 059 + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + invalid granularity, image may be corrupt +-qemu-io: can't open device TEST_DIR/t.vmdk ++qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Wrong medium type + no file open, try 'help open' + === Testing too big L2 table size === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + L2 table size too big +-qemu-io: can't open device TEST_DIR/t.vmdk ++qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Wrong medium type + no file open, try 'help open' + === Testing too big L1 table size === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + L1 size too big +-qemu-io: can't open device TEST_DIR/t.vmdk ++qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Wrong medium type + no file open, try 'help open' + === Testing monolithicFlat creation and opening === + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-make-assert_no_active_block_jobs-common.patch b/SOURCES/kvm-qemu-iotests-make-assert_no_active_block_jobs-common.patch new file mode 100644 index 0000000..ab11f47 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-make-assert_no_active_block_jobs-common.patch @@ -0,0 +1,536 @@ +From dc76b8c7582d037b1b150f9d809deb05d1a31b05 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Sun, 19 Jan 2014 18:07:56 +0100 +Subject: [PATCH 22/34] qemu-iotests: make assert_no_active_block_jobs() common + +RH-Author: Max Reitz +Message-id: <1390154881-17140-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 56815 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 2/7] qemu-iotests: make assert_no_active_block_jobs() common +Bugzilla: 921890 +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf +RH-Acked-by: Jeffrey Cody + +From: Stefan Hajnoczi + +BZ: 921890 + +Tests 030 and 041 both use query-block-jobs to check whether any block +jobs are active. Make this code common so that 'drive-backup' and other +new feature tests will be able to reuse it. + +Suggested-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit ecc1c88efddb376687084c3387c38b3a458c5892) + +Signed-off-by: Max Reitz +--- + tests/qemu-iotests/030 | 54 ++++++++++++++++++-------------------- + tests/qemu-iotests/041 | 60 ++++++++++++++++++++----------------------- + tests/qemu-iotests/iotests.py | 4 +++ + 3 files changed, 57 insertions(+), 61 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/030 | 54 +++++++++++++++++------------------- + tests/qemu-iotests/041 | 60 +++++++++++++++++++---------------------- + tests/qemu-iotests/iotests.py | 4 +++ + 3 files changed, 57 insertions(+), 61 deletions(-) + +diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 +index 3d128b3..9cf256b 100755 +--- a/tests/qemu-iotests/030 ++++ b/tests/qemu-iotests/030 +@@ -31,10 +31,6 @@ test_img = os.path.join(iotests.test_dir, 'test.img') + class ImageStreamingTestCase(iotests.QMPTestCase): + '''Abstract base class for image streaming test cases''' + +- def assert_no_active_streams(self): +- result = self.vm.qmp('query-block-jobs') +- self.assert_qmp(result, 'return', []) +- + def cancel_and_wait(self, drive='drive0'): + '''Cancel a block job and wait for it to finish''' + result = self.vm.qmp('block-job-cancel', device=drive) +@@ -48,7 +44,7 @@ class ImageStreamingTestCase(iotests.QMPTestCase): + self.assert_qmp(event, 'data/device', drive) + cancelled = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + def create_image(self, name, size): + file = open(name, 'w') +@@ -77,7 +73,7 @@ class TestSingleDrive(ImageStreamingTestCase): + os.remove(backing_img) + + def test_stream(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -92,7 +88,7 @@ class TestSingleDrive(ImageStreamingTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + self.assertEqual(qemu_io('-c', 'map', backing_img), +@@ -100,7 +96,7 @@ class TestSingleDrive(ImageStreamingTestCase): + 'image file map does not match backing file after streaming') + + def test_stream_pause(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -129,7 +125,7 @@ class TestSingleDrive(ImageStreamingTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + self.assertEqual(qemu_io('-c', 'map', backing_img), +@@ -137,7 +133,7 @@ class TestSingleDrive(ImageStreamingTestCase): + 'image file map does not match backing file after streaming') + + def test_stream_partial(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', base=mid_img) + self.assert_qmp(result, 'return', {}) +@@ -152,7 +148,7 @@ class TestSingleDrive(ImageStreamingTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + self.assertEqual(qemu_io('-c', 'map', mid_img), +@@ -177,7 +173,7 @@ class TestSmallerBackingFile(ImageStreamingTestCase): + # If this hangs, then you are missing a fix to complete streaming when the + # end of the backing file is reached. + def test_stream(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -192,7 +188,7 @@ class TestSmallerBackingFile(ImageStreamingTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + class TestErrors(ImageStreamingTestCase): +@@ -243,7 +239,7 @@ class TestEIO(TestErrors): + os.remove(self.blkdebug_file) + + def test_report(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -265,11 +261,11 @@ class TestEIO(TestErrors): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + def test_ignore(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', on_error='ignore') + self.assert_qmp(result, 'return', {}) +@@ -293,11 +289,11 @@ class TestEIO(TestErrors): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + def test_stop(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', on_error='stop') + self.assert_qmp(result, 'return', {}) +@@ -331,11 +327,11 @@ class TestEIO(TestErrors): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + def test_enospc(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', on_error='enospc') + self.assert_qmp(result, 'return', {}) +@@ -357,7 +353,7 @@ class TestEIO(TestErrors): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + class TestENOSPC(TestErrors): +@@ -379,7 +375,7 @@ class TestENOSPC(TestErrors): + os.remove(self.blkdebug_file) + + def test_enospc(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', on_error='enospc') + self.assert_qmp(result, 'return', {}) +@@ -413,7 +409,7 @@ class TestENOSPC(TestErrors): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + class TestStreamStop(ImageStreamingTestCase): +@@ -433,7 +429,7 @@ class TestStreamStop(ImageStreamingTestCase): + os.remove(backing_img) + + def test_stream_stop(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -463,7 +459,7 @@ class TestSetSpeed(ImageStreamingTestCase): + # This is a short performance test which is not run by default. + # Invoke "IMGFMT=qed ./030 TestSetSpeed.perf_test_throughput" + def perf_test_throughput(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -481,10 +477,10 @@ class TestSetSpeed(ImageStreamingTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + def test_set_speed(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +@@ -515,12 +511,12 @@ class TestSetSpeed(ImageStreamingTestCase): + self.cancel_and_wait() + + def test_set_speed_invalid(self): +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', speed=-1) + self.assert_qmp(result, 'error/class', 'GenericError') + +- self.assert_no_active_streams() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0') + self.assert_qmp(result, 'return', {}) +diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 +index 720eeff..ff89427 100755 +--- a/tests/qemu-iotests/041 ++++ b/tests/qemu-iotests/041 +@@ -32,10 +32,6 @@ target_img = os.path.join(iotests.test_dir, 'target.img') + class ImageMirroringTestCase(iotests.QMPTestCase): + '''Abstract base class for image mirroring test cases''' + +- def assert_no_active_mirrors(self): +- result = self.vm.qmp('query-block-jobs') +- self.assert_qmp(result, 'return', []) +- + def cancel_and_wait(self, drive='drive0', wait_ready=True): + '''Cancel a block job and wait for it to finish''' + if wait_ready: +@@ -64,7 +60,7 @@ class ImageMirroringTestCase(iotests.QMPTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + cancelled = True + +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + def complete_and_wait(self, drive='drive0', wait_ready=True): + '''Complete a block job and wait for it to finish''' +@@ -91,7 +87,7 @@ class ImageMirroringTestCase(iotests.QMPTestCase): + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + def create_image(self, name, size): + file = open(name, 'w') +@@ -142,7 +138,7 @@ class TestSingleDrive(ImageMirroringTestCase): + pass + + def test_complete(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -156,7 +152,7 @@ class TestSingleDrive(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_cancel(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -168,7 +164,7 @@ class TestSingleDrive(ImageMirroringTestCase): + self.vm.shutdown() + + def test_cancel_after_ready(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -182,7 +178,7 @@ class TestSingleDrive(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_pause(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -208,7 +204,7 @@ class TestSingleDrive(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_small_buffer(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + # A small buffer is rounded up automatically + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', +@@ -223,7 +219,7 @@ class TestSingleDrive(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_small_buffer2(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=%d,size=%d' + % (TestSingleDrive.image_len, TestSingleDrive.image_len), target_img) +@@ -239,7 +235,7 @@ class TestSingleDrive(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_large_cluster(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=%d,backing_file=%s' + % (TestSingleDrive.image_len, backing_img), target_img) +@@ -294,7 +290,7 @@ class TestMirrorNoBacking(ImageMirroringTestCase): + os.remove(target_img) + + def test_complete(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, target_img) + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', +@@ -309,7 +305,7 @@ class TestMirrorNoBacking(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_cancel(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, target_img) + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', +@@ -324,7 +320,7 @@ class TestMirrorNoBacking(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_large_cluster(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + # qemu-img create fails if the image is not there + qemu_img('create', '-f', iotests.imgfmt, '-o', 'size=%d' +@@ -365,7 +361,7 @@ class TestMirrorResized(ImageMirroringTestCase): + pass + + def test_complete_top(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='top', + target=target_img) +@@ -379,7 +375,7 @@ class TestMirrorResized(ImageMirroringTestCase): + 'target image does not match source after mirroring') + + def test_complete_full(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -443,7 +439,7 @@ new_state = "1" + os.remove(self.blkdebug_file) + + def test_report_read(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -467,11 +463,11 @@ new_state = "1" + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + def test_ignore_read(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img, on_source_error='ignore') +@@ -487,7 +483,7 @@ new_state = "1" + self.vm.shutdown() + + def test_large_cluster(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + # Test COW into the target image. The first half of the + # cluster at MIRROR_GRANULARITY has to be copied from +@@ -513,7 +509,7 @@ new_state = "1" + 'target image does not match source after mirroring') + + def test_stop_read(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img, on_source_error='stop') +@@ -544,7 +540,7 @@ new_state = "1" + self.assert_qmp(result, 'return[0]/io-status', 'ok') + + self.complete_and_wait(wait_ready=False) +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + class TestWriteErrors(ImageMirroringTestCase): +@@ -594,7 +590,7 @@ new_state = "1" + os.remove(self.blkdebug_file) + + def test_report_write(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + mode='existing', target=self.target_img) +@@ -618,11 +614,11 @@ new_state = "1" + self.assert_qmp(event, 'data/len', self.image_len) + completed = True + +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + def test_ignore_write(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + mode='existing', target=self.target_img, +@@ -639,7 +635,7 @@ new_state = "1" + self.vm.shutdown() + + def test_stop_write(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + mode='existing', target=self.target_img, +@@ -671,7 +667,7 @@ new_state = "1" + ready = True + + self.complete_and_wait(wait_ready=False) +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + self.vm.shutdown() + + class TestSetSpeed(ImageMirroringTestCase): +@@ -690,7 +686,7 @@ class TestSetSpeed(ImageMirroringTestCase): + os.remove(target_img) + + def test_set_speed(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +@@ -723,13 +719,13 @@ class TestSetSpeed(ImageMirroringTestCase): + self.cancel_and_wait() + + def test_set_speed_invalid(self): +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img, speed=-1) + self.assert_qmp(result, 'error/class', 'GenericError') + +- self.assert_no_active_mirrors() ++ self.assert_no_active_block_jobs() + + result = self.vm.qmp('drive-mirror', device='drive0', sync='full', + target=target_img) +diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py +index 5cbac82..740464a 100644 +--- a/tests/qemu-iotests/iotests.py ++++ b/tests/qemu-iotests/iotests.py +@@ -174,6 +174,10 @@ class QMPTestCase(unittest.TestCase): + result = self.dictpath(d, path) + self.assertEqual(result, value, 'values not equal "%s" and "%s"' % (str(result), str(value))) + ++ def assert_no_active_block_jobs(self): ++ result = self.vm.qmp('query-block-jobs') ++ self.assert_qmp(result, 'return', []) ++ + def notrun(reason): + '''Skip this test suite''' + # Each test in qemu-iotests has a number ("seq") +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-iotests-prefill-some-data-to-test-image.patch b/SOURCES/kvm-qemu-iotests-prefill-some-data-to-test-image.patch new file mode 100644 index 0000000..2b00be6 --- /dev/null +++ b/SOURCES/kvm-qemu-iotests-prefill-some-data-to-test-image.patch @@ -0,0 +1,64 @@ +From 33e66fa335c602b53302cd2838d075a8c05509d6 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:08:01 +0100 +Subject: [PATCH 18/34] qemu-iotests: prefill some data to test image + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-17-git-send-email-famz@redhat.com> +Patchwork-id: 56778 +O-Subject: [RHEL-7 qemu-kvm PATCH 16/18] qemu-iotests: prefill some data to test image +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Case 030 occasionally fails because of block job compltes too fast to be +captured by script, and 'unexpected qmp event' of job completion causes +the test failure. + +Simply fill in some data to the test image to make this false alarm less +likely to happen. + +(For other benefits to prefill data to test image, see also commit +ab68cdfaa). + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 7890111b642e8e03430c3bf8bd6cedee26cec4fe) +Signed-off-by: Fam Zheng +--- + tests/qemu-iotests/030 | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + tests/qemu-iotests/030 | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 +index dd4ef11..3d128b3 100755 +--- a/tests/qemu-iotests/030 ++++ b/tests/qemu-iotests/030 +@@ -421,7 +421,9 @@ class TestStreamStop(ImageStreamingTestCase): + + def setUp(self): + qemu_img('create', backing_img, str(TestStreamStop.image_len)) ++ qemu_io('-c', 'write -P 0x1 0 32M', backing_img) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img) ++ qemu_io('-c', 'write -P 0x1 32M 32M', test_img) + self.vm = iotests.VM().add_drive(test_img) + self.vm.launch() + +@@ -447,7 +449,9 @@ class TestSetSpeed(ImageStreamingTestCase): + + def setUp(self): + qemu_img('create', backing_img, str(TestSetSpeed.image_len)) ++ qemu_io('-c', 'write -P 0x1 0 32M', backing_img) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img) ++ qemu_io('-c', 'write -P 0x1 32M 32M', test_img) + self.vm = iotests.VM().add_drive(test_img) + self.vm.launch() + +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-nbd-Ignore-SIGPIPE.patch b/SOURCES/kvm-qemu-nbd-Ignore-SIGPIPE.patch new file mode 100644 index 0000000..3715bd2 --- /dev/null +++ b/SOURCES/kvm-qemu-nbd-Ignore-SIGPIPE.patch @@ -0,0 +1,67 @@ +From 18c4fbe13ce03654f763f6569bb740c57109555c Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Mon, 10 Jul 2017 17:52:18 +0200 +Subject: [PATCH] qemu-nbd: Ignore SIGPIPE + +RH-Author: Eric Blake +Message-id: <20170710175218.13682-1-eblake@redhat.com> +Patchwork-id: 75718 +O-Subject: [RHEL-7.4.z qemu-kvm PATCH] qemu-nbd: Ignore SIGPIPE +Bugzilla: 1466463 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Max Reitz + +qemu proper has done so for 13 years +(8a7ddc38a60648257dc0645ab4a05b33d6040063), qemu-img and qemu-io have +done so for four years (526eda14a68d5b3596be715505289b541288ef2a). +Ignoring this signal is especially important in qemu-nbd because +otherwise a client can easily take down the qemu-nbd server by dropping +the connection when the server wants to send something, for example: + +$ qemu-nbd -x foo -f raw -t null-co:// & +[1] 12726 +$ qemu-io -c quit nbd://localhost/bar +can't open device nbd://localhost/bar: No export with name 'bar' available +[1] + 12726 broken pipe qemu-nbd -x foo -f raw -t null-co:// + +In this case, the client sends an NBD_OPT_ABORT and closes the +connection (because it is not required to wait for a reply), but the +server replies with an NBD_REP_ACK (because it is required to reply). + +Signed-off-by: Max Reitz +Message-Id: <20170611123714.31292-1-mreitz@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 041e32b8d9d076980b4e35317c0339e57ab888f1) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-nbd.c - context + +Fixes CVE-2017-10664 +Signed-off-by: Eric Blake +--- + qemu-nbd.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/qemu-nbd.c b/qemu-nbd.c +index e0f4517..fc768eb 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -363,6 +363,11 @@ int main(int argc, char **argv) + memset(&sa_sigterm, 0, sizeof(sa_sigterm)); + sa_sigterm.sa_handler = termsig_handler; + sigaction(SIGTERM, &sa_sigterm, NULL); ++ ++#ifdef CONFIG_POSIX ++ signal(SIGPIPE, SIG_IGN); ++#endif ++ + qemu_init_exec_dir(argv[0]); + + while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-option-Fix-qemu_opts_find-for-null-id-arguments.patch b/SOURCES/kvm-qemu-option-Fix-qemu_opts_find-for-null-id-arguments.patch new file mode 100644 index 0000000..a3f0e1d --- /dev/null +++ b/SOURCES/kvm-qemu-option-Fix-qemu_opts_find-for-null-id-arguments.patch @@ -0,0 +1,61 @@ +From e53520a7e7f2cf2f78786c6c1ae906e70c26fd7e Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 6 Aug 2013 13:17:00 +0200 +Subject: [PATCH 07/28] qemu-option: Fix qemu_opts_find() for null id arguments + +RH-Author: Markus Armbruster +Message-id: <1375795025-28674-2-git-send-email-armbru@redhat.com> +Patchwork-id: 52992 +O-Subject: [PATCH 7.0 qemu-kvm 1/6] qemu-option: Fix qemu_opts_find() for null id arguments +Bugzilla: 980782 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny +RH-Acked-by: Orit Wasserman + +Crashes when the first list member has an ID. Admittedly nonsensical +reproducer: + +$ qemu-system-x86_64 -nodefaults -machine id=foo -machine "" + +Signed-off-by: Markus Armbruster +Reviewed-by: Peter Maydell +Message-id: 1372943363-24081-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 96bc97ebf350ec480b69082819cedb8850f46a0f) +--- + util/qemu-option.c | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-option.c | 12 ++++-------- + 1 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/util/qemu-option.c b/util/qemu-option.c +index 8b74bf1..b6d2ac0 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -736,16 +736,12 @@ QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id) + QemuOpts *opts; + + QTAILQ_FOREACH(opts, &list->head, next) { +- if (!opts->id) { +- if (!id) { +- return opts; +- } +- continue; ++ if (!opts->id && !id) { ++ return opts; + } +- if (strcmp(opts->id, id) != 0) { +- continue; ++ if (opts->id && id && !strcmp(opts->id, id)) { ++ return opts; + } +- return opts; + } + return NULL; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-option-Fix-qemu_opts_set_defaults-for-corner-ca.patch b/SOURCES/kvm-qemu-option-Fix-qemu_opts_set_defaults-for-corner-ca.patch new file mode 100644 index 0000000..1eda725 --- /dev/null +++ b/SOURCES/kvm-qemu-option-Fix-qemu_opts_set_defaults-for-corner-ca.patch @@ -0,0 +1,96 @@ +From c4ffa69bdec932cf674d92355967ce2876296893 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 6 Aug 2013 13:17:01 +0200 +Subject: [PATCH 08/28] qemu-option: Fix qemu_opts_set_defaults() for corner cases + +RH-Author: Markus Armbruster +Message-id: <1375795025-28674-3-git-send-email-armbru@redhat.com> +Patchwork-id: 52990 +O-Subject: [PATCH 7.0 qemu-kvm 2/6] qemu-option: Fix qemu_opts_set_defaults() for corner cases +Bugzilla: 980782 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny +RH-Acked-by: Orit Wasserman + +Commit 4f6dd9a changed the initialization of opts in opts_parse() to +this: + + if (defaults) { + if (!id && !QTAILQ_EMPTY(&list->head)) { + opts = qemu_opts_find(list, NULL); + } else { + opts = qemu_opts_create(list, id, 0); + } + } else { + opts = qemu_opts_create(list, id, 1); + } + +Same as before for !defaults. + +If defaults is true, and params has no ID, and options exist, we use +the first assignment. It sets opts to null if all options have an ID. +opts_parse() then returns null. qemu_opts_set_defaults() asserts the +value is non-null. It's the only caller that passes true for +defaults. + +To reproduce, try "-M xenpv -machine id=foo" (yes, "id=foo" is silly, +but it shouldn't crash). + +I believe the function attempts to do the following: + + If options don't yet exist, create new options + Else, if defaults, modify the existing options + Else, if list->merge_lists, modify the existing options + Else, fail + +A straightforward call of qemu_opts_create() does exactly that. + +Cc: Jan Kiszka +Signed-off-by: Markus Armbruster +Message-id: 1372943363-24081-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 6d4cd408686f5ae60b2b3b94b79f48ddedc2f39d) + +The upstream commit message's claim that a "straightforward call of +qemu_opts_create() does exactly that" is wrong. When +!list->merge_lists, and the option string doesn't contain id=, and +options without ID exist, then we don't actually modify the existing +options, we create new ones. + +Not reachable, because we never pass lists with !list->merge_lists to +qemu_opts_set_defaults(). + +Patch adding a suitable assertion pending upstream. +--- + util/qemu-option.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-option.c | 10 +--------- + 1 files changed, 1 insertions(+), 9 deletions(-) + +diff --git a/util/qemu-option.c b/util/qemu-option.c +index b6d2ac0..bdfbdb4 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -944,15 +944,7 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params, + get_opt_value(value, sizeof(value), p+4); + id = value; + } +- if (defaults) { +- if (!id && !QTAILQ_EMPTY(&list->head)) { +- opts = qemu_opts_find(list, NULL); +- } else { +- opts = qemu_opts_create(list, id, 0, &local_err); +- } +- } else { +- opts = qemu_opts_create(list, id, 1, &local_err); +- } ++ opts = qemu_opts_create(list, id, !defaults, &local_err); + if (opts == NULL) { + if (error_is_set(&local_err)) { + qerror_report_err(local_err); +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-option-check_params-is-now-unused-drop-it.patch b/SOURCES/kvm-qemu-option-check_params-is-now-unused-drop-it.patch new file mode 100644 index 0000000..2072736 --- /dev/null +++ b/SOURCES/kvm-qemu-option-check_params-is-now-unused-drop-it.patch @@ -0,0 +1,92 @@ +From 1d20e66fdee76ee9a7cab19de50a138588f0c8c8 Mon Sep 17 00:00:00 2001 +Message-Id: <1d20e66fdee76ee9a7cab19de50a138588f0c8c8.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:12 +0200 +Subject: [PATCH 02/14] qemu-option: check_params() is now unused, drop it + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-3-git-send-email-armbru@redhat.com> +Patchwork-id: 54559 +O-Subject: [PATCH 7.0 qemu-kvm 02/10] qemu-option: check_params() is now unused, drop it +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Anthony Liguori +Message-id: 1371208516-7857-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit a86b35f992f107323e432c0a96107e11e1b699ad) +--- + include/qemu/option.h | 2 -- + util/qemu-option.c | 30 ------------------------------ + 2 files changed, 32 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/qemu/option.h | 2 -- + util/qemu-option.c | 30 ------------------------------ + 2 files changed, 32 deletions(-) + +diff --git a/include/qemu/option.h b/include/qemu/option.h +index 9db74fb..13f5e72 100644 +--- a/include/qemu/option.h ++++ b/include/qemu/option.h +@@ -55,8 +55,6 @@ int get_next_param_value(char *buf, int buf_size, + const char *tag, const char **pstr); + int get_param_value(char *buf, int buf_size, + const char *tag, const char *str); +-int check_params(char *buf, int buf_size, +- const char * const *params, const char *str); + + + /* +diff --git a/util/qemu-option.c b/util/qemu-option.c +index 37e7640..5d686c8 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -123,36 +123,6 @@ int get_param_value(char *buf, int buf_size, + return get_next_param_value(buf, buf_size, tag, &str); + } + +-int check_params(char *buf, int buf_size, +- const char * const *params, const char *str) +-{ +- const char *p; +- int i; +- +- p = str; +- while (*p != '\0') { +- p = get_opt_name(buf, buf_size, p, '='); +- if (*p != '=') { +- return -1; +- } +- p++; +- for (i = 0; params[i] != NULL; i++) { +- if (!strcmp(params[i], buf)) { +- break; +- } +- } +- if (params[i] == NULL) { +- return -1; +- } +- p = get_opt_value(NULL, 0, p); +- if (*p != ',') { +- break; +- } +- p++; +- } +- return 0; +-} +- + /* + * Searches an option list for an option with the given name + */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qemu-option-has_help_option-and-is_valid_option_list.patch b/SOURCES/kvm-qemu-option-has_help_option-and-is_valid_option_list.patch new file mode 100644 index 0000000..608cb0c --- /dev/null +++ b/SOURCES/kvm-qemu-option-has_help_option-and-is_valid_option_list.patch @@ -0,0 +1,114 @@ +From 8720a390e468547c84e8143ee5cf81263d0fb4f3 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Feb 2014 15:00:00 +0100 +Subject: [PATCH 2/7] qemu-option: has_help_option() and is_valid_option_list() + +RH-Author: Kevin Wolf +Message-id: <1393340405-9936-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 57793 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/6] qemu-option: has_help_option() and is_valid_option_list() +Bugzilla: 1065873 +RH-Acked-by: Juan Quintela +RH-Acked-by: Fam Zheng +RH-Acked-by: Miroslav Rezanina + +has_help_option() checks if any help option ('help' or '?') occurs +anywhere in an option string, so that things like 'cluster_size=4k,help' +are recognised. + +is_valid_option_list() ensures that the option list doesn't have options +with leading commas or trailing unescaped commas. + +Signed-off-by: Kevin Wolf +Reviewed-by: Jeff Cody +Reviewed-by: Eric Blake +(cherry picked from commit 7cc07ab8daa01f100f36ab63382d491f2d278c64) + +Signed-off-by: Kevin Wolf +--- + include/qemu/option.h | 2 ++ + util/qemu-option.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 51 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/qemu/option.h | 2 ++ + util/qemu-option.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 51 insertions(+), 0 deletions(-) + +diff --git a/include/qemu/option.h b/include/qemu/option.h +index 5c0c6dd..e1d3dd0 100644 +--- a/include/qemu/option.h ++++ b/include/qemu/option.h +@@ -79,6 +79,8 @@ void parse_option_size(const char *name, const char *value, + void free_option_parameters(QEMUOptionParameter *list); + void print_option_parameters(QEMUOptionParameter *list); + void print_option_help(QEMUOptionParameter *list); ++bool has_help_option(const char *param); ++bool is_valid_option_list(const char *param); + + /* ------------------------------------------------------------------ */ + +diff --git a/util/qemu-option.c b/util/qemu-option.c +index 2445406..4de5d13 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -450,6 +450,55 @@ fail: + return NULL; + } + ++bool has_help_option(const char *param) ++{ ++ size_t buflen = strlen(param) + 1; ++ char *buf = g_malloc0(buflen); ++ const char *p = param; ++ bool result = false; ++ ++ while (*p) { ++ p = get_opt_value(buf, buflen, p); ++ if (*p) { ++ p++; ++ } ++ ++ if (is_help_option(buf)) { ++ result = true; ++ goto out; ++ } ++ } ++ ++out: ++ free(buf); ++ return result; ++} ++ ++bool is_valid_option_list(const char *param) ++{ ++ size_t buflen = strlen(param) + 1; ++ char *buf = g_malloc0(buflen); ++ const char *p = param; ++ bool result = true; ++ ++ while (*p) { ++ p = get_opt_value(buf, buflen, p); ++ if (*p && !*++p) { ++ result = false; ++ goto out; ++ } ++ ++ if (!*buf || *buf == ',') { ++ result = false; ++ goto out; ++ } ++ } ++ ++out: ++ free(buf); ++ return result; ++} ++ + /* + * Prints all options of a list that have a value to stdout + */ +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-option-reject-empty-number-value.patch b/SOURCES/kvm-qemu-option-reject-empty-number-value.patch new file mode 100644 index 0000000..09bea06 --- /dev/null +++ b/SOURCES/kvm-qemu-option-reject-empty-number-value.patch @@ -0,0 +1,53 @@ +From 8fde4e2c8a03832087c7e006e35988245f55c57b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Fri, 3 Nov 2017 18:06:12 +0100 +Subject: [PATCH 2/2] qemu-option: reject empty number value +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171103180612.24523-1-marcandre.lureau@redhat.com> +Patchwork-id: 77500 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v2] qemu-option: reject empty number value +Bugzilla: 1417864 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laurent Vivier +RH-Acked-by: Laszlo Ersek + +(Upstream commit to fix this bug is +3403e5eb884f3a74c40fe7cccc103f848c040215, however, the patch relies on +qemu_strtou64() which was introduced later and had several iterations) + +Signed-off-by: Marc-André Lureau +--- +v2: +- add errno check (Laszlo Ersek) + +util/qemu-option.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-option.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/util/qemu-option.c b/util/qemu-option.c +index 4de5d13..5a85abd 100644 +--- a/util/qemu-option.c ++++ b/util/qemu-option.c +@@ -162,8 +162,9 @@ static void parse_option_number(const char *name, const char *value, + uint64_t number; + + if (value != NULL) { ++ errno = 0; + number = strtoull(value, &postfix, 0); +- if (*postfix != '\0') { ++ if (errno != 0 || *postfix != '\0' || postfix == value) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, name, "a number"); + return; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qemu-progress-Drop-unused-include.patch b/SOURCES/kvm-qemu-progress-Drop-unused-include.patch new file mode 100644 index 0000000..57d693a --- /dev/null +++ b/SOURCES/kvm-qemu-progress-Drop-unused-include.patch @@ -0,0 +1,43 @@ +From ea55137cc4a565a2917267dcdd62cc7d53493135 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 11 Feb 2014 16:24:42 +0100 +Subject: [PATCH 25/28] qemu-progress: Drop unused include + +RH-Author: Kevin Wolf +Message-id: <1392135884-10508-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 57221 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/3] qemu-progress: Drop unused include +Bugzilla: 997878 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit e69968d472bd020a08c677c814237548090d2e59) + +Signed-off-by: Kevin Wolf +--- + util/qemu-progress.c | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-progress.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/util/qemu-progress.c b/util/qemu-progress.c +index 9a3f96c..ad33fee 100644 +--- a/util/qemu-progress.c ++++ b/util/qemu-progress.c +@@ -24,7 +24,6 @@ + + #include "qemu-common.h" + #include "qemu/osdep.h" +-#include "sysemu/sysemu.h" + #include + + struct progress_state { +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-progress-Fix-progress-printing-on-SIGUSR1.patch b/SOURCES/kvm-qemu-progress-Fix-progress-printing-on-SIGUSR1.patch new file mode 100644 index 0000000..c407576 --- /dev/null +++ b/SOURCES/kvm-qemu-progress-Fix-progress-printing-on-SIGUSR1.patch @@ -0,0 +1,63 @@ +From a06249cc31c0f8c2ae37c7e0ff047a922a265e7c Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 11 Feb 2014 16:24:43 +0100 +Subject: [PATCH 26/28] qemu-progress: Fix progress printing on SIGUSR1 + +RH-Author: Kevin Wolf +Message-id: <1392135884-10508-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 57223 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/3] qemu-progress: Fix progress printing on SIGUSR1 +Bugzilla: 997878 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +Since commit a7aae221 ('Switch SIG_IPI to SIGUSR1'), SIGUSR1 is blocked +during startup, breaking the progress report in tools. + +This patch reenables the signal when initialising a progress report. + +Signed-off-by: Kevin Wolf +Reviewed-by: Benoit Canet +(cherry picked from commit 3c4b4e383e82ab3db307ee01f12ab0d4a28584dc) + +Signed-off-by: Kevin Wolf +--- + util/qemu-progress.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-progress.c | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/util/qemu-progress.c b/util/qemu-progress.c +index ad33fee..4ee5cd0 100644 +--- a/util/qemu-progress.c ++++ b/util/qemu-progress.c +@@ -82,12 +82,22 @@ static void progress_dummy_init(void) + { + #ifdef CONFIG_POSIX + struct sigaction action; ++ sigset_t set; + + memset(&action, 0, sizeof(action)); + sigfillset(&action.sa_mask); + action.sa_handler = sigusr_print; + action.sa_flags = 0; + sigaction(SIGUSR1, &action, NULL); ++ ++ /* ++ * SIGUSR1 is SIG_IPI and gets blocked in qemu_init_main_loop(). In the ++ * tools that use the progress report SIGUSR1 isn't used in this meaning ++ * and instead should print the progress, so reenable it. ++ */ ++ sigemptyset(&set); ++ sigaddset(&set, SIGUSR1); ++ pthread_sigmask(SIG_UNBLOCK, &set, NULL); + #endif + + state.print = progress_dummy_print; +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-socket-catch-monitor_get_fd-failures.patch b/SOURCES/kvm-qemu-socket-catch-monitor_get_fd-failures.patch new file mode 100644 index 0000000..faed7d3 --- /dev/null +++ b/SOURCES/kvm-qemu-socket-catch-monitor_get_fd-failures.patch @@ -0,0 +1,43 @@ +From d24a791d6a9b4c316e666c95d676ceaf2f52198a Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:11 +0200 +Subject: [PATCH 04/18] qemu-socket: catch monitor_get_fd failures + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 54862 +O-Subject: [RHEL-7 qemu-kvm PATCH 03/15] qemu-socket: catch monitor_get_fd failures +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit d1ec72a44e0a167f9e8254d6d1098d27f104571f) +--- + util/qemu-sockets.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-sockets.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c +index 35023a8..126cbb6 100644 +--- a/util/qemu-sockets.c ++++ b/util/qemu-sockets.c +@@ -903,7 +903,7 @@ int socket_connect(SocketAddress *addr, Error **errp, + + case SOCKET_ADDRESS_KIND_FD: + fd = monitor_get_fd(cur_mon, addr->fd->str, errp); +- if (callback) { ++ if (fd >= 0 && callback) { + qemu_set_nonblock(fd); + callback(fd, opaque); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-socket-don-t-leak-opts-on-error.patch b/SOURCES/kvm-qemu-socket-don-t-leak-opts-on-error.patch new file mode 100644 index 0000000..82adeb7 --- /dev/null +++ b/SOURCES/kvm-qemu-socket-don-t-leak-opts-on-error.patch @@ -0,0 +1,43 @@ +From ea210ca7017b87a1c7bf02050d6c60dcac17f54b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:22 +0200 +Subject: [PATCH 15/18] qemu-socket: don't leak opts on error + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-15-git-send-email-kraxel@redhat.com> +Patchwork-id: 54858 +O-Subject: [RHEL-7 qemu-kvm PATCH 14/15] qemu-socket: don't leak opts on error +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit 7a5b6af13a45ae7109900dee03a436819302126c) +--- + util/qemu-sockets.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-sockets.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c +index 126cbb6..095716e 100644 +--- a/util/qemu-sockets.c ++++ b/util/qemu-sockets.c +@@ -963,7 +963,7 @@ int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp) + + default: + error_setg(errp, "socket type unsupported for datagram"); +- return -1; ++ fd = -1; + } + qemu_opts_del(opts); + return fd; +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-socket-drop-pointless-allocation.patch b/SOURCES/kvm-qemu-socket-drop-pointless-allocation.patch new file mode 100644 index 0000000..cf4a018 --- /dev/null +++ b/SOURCES/kvm-qemu-socket-drop-pointless-allocation.patch @@ -0,0 +1,42 @@ +From 6340a1e18aaaa236bb09680fdae5c5c58ec2a75b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:10 +0200 +Subject: [PATCH 03/18] qemu-socket: drop pointless allocation + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 54849 +O-Subject: [RHEL-7 qemu-kvm PATCH 02/15] qemu-socket: drop pointless allocation +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit c1204afc7c048cf58b0a8f1c11886f36ca73ef28) +--- + util/qemu-sockets.c | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-sockets.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c +index 86fb09c..35023a8 100644 +--- a/util/qemu-sockets.c ++++ b/util/qemu-sockets.c +@@ -871,7 +871,6 @@ SocketAddress *socket_parse(const char *str, Error **errp) + } + } else { + addr->kind = SOCKET_ADDRESS_KIND_INET; +- addr->inet = g_new(InetSocketAddress, 1); + addr->inet = inet_parse(str, errp); + if (addr->inet == NULL) { + goto fail; +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu-socket-zero-initialize-SocketAddress.patch b/SOURCES/kvm-qemu-socket-zero-initialize-SocketAddress.patch new file mode 100644 index 0000000..4872b62 --- /dev/null +++ b/SOURCES/kvm-qemu-socket-zero-initialize-SocketAddress.patch @@ -0,0 +1,46 @@ +From aa57fbfca8a627f38b2d22585c8d410b7d512231 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 14 Oct 2013 13:35:09 +0200 +Subject: [PATCH 02/18] qemu-socket: zero-initialize SocketAddress + +RH-Author: Gerd Hoffmann +Message-id: <1381757723-23134-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 54863 +O-Subject: [RHEL-7 qemu-kvm PATCH 01/15] qemu-socket: zero-initialize SocketAddress +Bugzilla: 922010 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael Tokarev +(cherry picked from commit afde3f8b9923892d21a735993f533e5d8b60e0b0) +--- + util/qemu-sockets.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + util/qemu-sockets.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c +index 96eca2a..86fb09c 100644 +--- a/util/qemu-sockets.c ++++ b/util/qemu-sockets.c +@@ -848,9 +848,9 @@ int unix_nonblocking_connect(const char *path, + + SocketAddress *socket_parse(const char *str, Error **errp) + { +- SocketAddress *addr = NULL; ++ SocketAddress *addr; + +- addr = g_new(SocketAddress, 1); ++ addr = g_new0(SocketAddress, 1); + if (strstart(str, "unix:", NULL)) { + if (str[5] == '\0') { + error_setg(errp, "invalid Unix socket address"); +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu_file-Fix-mismerge-of-use-fwrite-correctly.patch b/SOURCES/kvm-qemu_file-Fix-mismerge-of-use-fwrite-correctly.patch new file mode 100644 index 0000000..04c9ccb --- /dev/null +++ b/SOURCES/kvm-qemu_file-Fix-mismerge-of-use-fwrite-correctly.patch @@ -0,0 +1,58 @@ +From 28c5321911bde483484eb95d0bef2e8e65a3593b Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Mon, 10 Mar 2014 17:41:44 +0100 +Subject: [PATCH 16/16] qemu_file: Fix mismerge of "use fwrite() correctly" + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1394473304-7190-3-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58074 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 2/2] qemu_file: Fix mismerge of "use fwrite() correctly" +Bugzilla: 1005103 +RH-Acked-by: Juan Quintela +RH-Acked-by: Eric Blake +RH-Acked-by: Amit Shah + +From: Markus Armbruster + +Reviewers accepted v2 of the patch, but what got committed was v1, +with the R-bys for v2. This is the v1->v2 followup fix. + +[Amit: + This fixes commit aded6539d983280212e08d09f14157b1cb4d58cc +] + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Reviewed-by: Amit Shah +Signed-off-by: Amit Shah +Signed-off-by: Juan Quintela +(cherry picked from commit ac4df4e608e84da135eacecd7bba7c6e9e9a63b7) + +Conflicts: + qemu-file.c +was still in savevm.c +--- + savevm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + savevm.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/savevm.c b/savevm.c +index 94121a2..4d92a7b 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -216,7 +216,7 @@ static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int s + res = fwrite(buf, 1, size, s->stdio_file); + + if (res != size) { +- return -EIO; /* fake errno value */ ++ return -errno; + } + return res; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu_file-use-fwrite-correctly.patch b/SOURCES/kvm-qemu_file-use-fwrite-correctly.patch new file mode 100644 index 0000000..745b4a6 --- /dev/null +++ b/SOURCES/kvm-qemu_file-use-fwrite-correctly.patch @@ -0,0 +1,72 @@ +From 2f66e62873ef54bd27ec6e063c8b4f3f11e2413d Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Mon, 10 Mar 2014 17:41:43 +0100 +Subject: [PATCH 15/16] qemu_file: use fwrite() correctly + +RH-Author: Dr. David Alan Gilbert (git) +Message-id: <1394473304-7190-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 58073 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 1/2] qemu_file: use fwrite() correctly +Bugzilla: 1005103 +RH-Acked-by: Juan Quintela +RH-Acked-by: Eric Blake +RH-Acked-by: Amit Shah + +From: Juan Quintela + +fwrite() returns the number of items written. But when there is one +error, it can return a short write. + +In the particular bug that I was tracking, I did a migration to a +read-only filesystem. And it was able to finish the migration +correctly. fwrite() never returned a negative error code, nor zero, +always 4096. (migration writes chunks of about 14000 bytes). And it +was able to "complete" the migration with success (yes, reading the +file was a bit more difficult). + +To add insult to injury, if your amount of memory was big enough (12GB +on my case), it overwrote some important structure, and from them, +malloc failed. This check makes the problem go away. + +Signed-off-by: Juan Quintela +Reviewed-by: Eric Blake +Reviewed-by: Markus Armbruster +Signed-off-by: Juan Quintela +(cherry picked from commit aded6539d983280212e08d09f14157b1cb4d58cc) + +Conflicts: + qemu-file.c + +Code still in savevm.c +--- + savevm.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + savevm.c | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/savevm.c b/savevm.c +index bd37959..94121a2 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -211,7 +211,14 @@ static int stdio_get_fd(void *opaque) + static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size) + { + QEMUFileStdio *s = opaque; +- return fwrite(buf, 1, size, s->stdio_file); ++ int res; ++ ++ res = fwrite(buf, 1, size, s->stdio_file); ++ ++ if (res != size) { ++ return -EIO; /* fake errno value */ ++ } ++ return res; + } + + static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size) +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu_loadvm_state-shadow-SeaBIOS-for-VM-incoming-fro.patch b/SOURCES/kvm-qemu_loadvm_state-shadow-SeaBIOS-for-VM-incoming-fro.patch new file mode 100644 index 0000000..27b8a92 --- /dev/null +++ b/SOURCES/kvm-qemu_loadvm_state-shadow-SeaBIOS-for-VM-incoming-fro.patch @@ -0,0 +1,167 @@ +From 9f136b4ed4ecd83a2de6ffa52775286b106bb5f5 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 17 Apr 2014 11:13:59 +0200 +Subject: [PATCH 10/12] qemu_loadvm_state(): shadow SeaBIOS for VM incoming from RHEL-6 host + +RH-Author: Laszlo Ersek +Message-id: <1397733239-8835-1-git-send-email-lersek@redhat.com> +Patchwork-id: 58498 +O-Subject: [RHEL-7.0 0day qemu-kvm PATCH v2] qemu_loadvm_state(): shadow SeaBIOS for VM incoming from RHEL-6 host +Bugzilla: 1027565 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Eduardo Habkost + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1027565 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7352678 + +RHEL-only patch. + +SeaBIOS's shadowing logic has no effect on "pc.ram" (only on "pc.bios" and +"pc.rom") when it runs on the RHEL-6 emulator. When such a guest is +migrated to the RHEL-7 emulator, where the PAM registers actually work, +these two UMBs under 1MB simply disappear from the guest's view, breaking +reboot and S3 resume. + +Tested extensively by QE. + +Signed-off-by: Laszlo Ersek +--- + +Notes: + Changes in v2: + - print message to stderr when we shadow the UMBs manually [Dave] + - also copy C and D segments from pc.rom to pc.ram + - move to qemu_loadvm_state() from ram_load() -- we must shadow only + when all RAMBlocks have been loaded [Dave] + + include/sysemu/sysemu.h | 1 + + hw/i386/pc_piix.c | 1 + + savevm.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 68 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 1 + + include/sysemu/sysemu.h | 1 + + savevm.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 68 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 940816f..fea98b6 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -954,6 +954,7 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + rom_file_has_mr = false; + has_acpi_build = false; + gigabyte_align = false; ++ shadow_bios_after_incoming = true; + } + + static void pc_init_rhel650(QEMUMachineInitArgs *args) +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index 8dc0a4c..07181ac 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -84,6 +84,7 @@ void qemu_savevm_state_complete(QEMUFile *f); + void qemu_savevm_state_cancel(void); + uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size); + int qemu_loadvm_state(QEMUFile *f); ++extern bool shadow_bios_after_incoming; + + /* SLIRP */ + void do_info_slirp(Monitor *mon); +diff --git a/savevm.c b/savevm.c +index 4d92a7b..6efbb75 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -52,6 +52,8 @@ + #define ARP_PTYPE_IP 0x0800 + #define ARP_OP_REQUEST_REV 0x3 + ++bool shadow_bios_after_incoming; ++ + static int announce_self_create(uint8_t *buf, + uint8_t *mac_addr) + { +@@ -2195,6 +2197,63 @@ typedef struct LoadStateEntry { + int version_id; + } LoadStateEntry; + ++static void shadow_bios(void) ++{ ++ RAMBlock *block, *ram, *oprom, *bios; ++ size_t one_meg, oprom_size, bios_size; ++ uint8_t *cd_seg_host, *ef_seg_host; ++ ++ ram = NULL; ++ oprom = NULL; ++ bios = NULL; ++ QTAILQ_FOREACH(block, &ram_list.blocks, next) { ++ if (strcmp("pc.ram", block->idstr) == 0) { ++ assert(ram == NULL); ++ ram = block; ++ } else if (strcmp("pc.rom", block->idstr) == 0) { ++ assert(oprom == NULL); ++ oprom = block; ++ } else if (strcmp("pc.bios", block->idstr) == 0) { ++ assert(bios == NULL); ++ bios = block; ++ } ++ } ++ assert(ram != NULL); ++ assert(oprom != NULL); ++ assert(bios != NULL); ++ assert(memory_region_is_ram(ram->mr)); ++ assert(memory_region_is_ram(oprom->mr)); ++ assert(memory_region_is_ram(bios->mr)); ++ assert(int128_eq(ram->mr->size, int128_make64(ram->length))); ++ assert(int128_eq(oprom->mr->size, int128_make64(oprom->length))); ++ assert(int128_eq(bios->mr->size, int128_make64(bios->length))); ++ ++ one_meg = 1024 * 1024; ++ oprom_size = 128 * 1024; ++ bios_size = 128 * 1024; ++ assert(ram->length >= one_meg); ++ assert(oprom->length == oprom_size); ++ assert(bios->length == bios_size); ++ ++ ef_seg_host = memory_region_get_ram_ptr(ram->mr) + (one_meg - bios_size); ++ cd_seg_host = ef_seg_host - oprom_size; ++ ++ /* This is a crude hack, but we must distinguish a rhel6.x.0 machtype guest ++ * coming in from a RHEL-6 emulator (where shadowing has had no effect on ++ * "pc.ram") from a similar guest coming in from a RHEL-7 emulator (where ++ * shadowing has worked). In the latter case we must not trample the live ++ * SeaBIOS variables in "pc.ram". ++ */ ++ if (buffer_is_zero(ef_seg_host, bios_size)) { ++ fprintf(stderr, "copying E and F segments from pc.bios to pc.ram\n"); ++ memcpy(ef_seg_host, memory_region_get_ram_ptr(bios->mr), bios_size); ++ } ++ if (buffer_is_zero(cd_seg_host, oprom_size)) { ++ fprintf(stderr, "copying C and D segments from pc.rom to pc.ram\n"); ++ memcpy(cd_seg_host, memory_region_get_ram_ptr(oprom->mr), oprom_size); ++ } ++} ++ + int qemu_loadvm_state(QEMUFile *f) + { + QLIST_HEAD(, LoadStateEntry) loadvm_handlers = +@@ -2297,6 +2356,13 @@ int qemu_loadvm_state(QEMUFile *f) + } + } + ++ /* Supplement SeaBIOS's shadowing now, because it was useless when the ++ * incoming VM started on the RHEL-6 emulator. ++ */ ++ if (shadow_bios_after_incoming) { ++ shadow_bios(); ++ } ++ + cpu_synchronize_all_post_init(); + + ret = 0; +-- +1.7.1 + diff --git a/SOURCES/kvm-qemu_memalign-Allow-small-alignments.patch b/SOURCES/kvm-qemu_memalign-Allow-small-alignments.patch new file mode 100644 index 0000000..c41115d --- /dev/null +++ b/SOURCES/kvm-qemu_memalign-Allow-small-alignments.patch @@ -0,0 +1,52 @@ +From 3e92f885201f2ddf30d093f34a02630ca3324b0b Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Fri, 29 Nov 2013 21:29:17 +0100 +Subject: [PATCH 06/37] qemu_memalign: Allow small alignments +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1392117622-28812-7-git-send-email-kwolf@redhat.com> +Patchwork-id: 57171 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 06/37] qemu_memalign: Allow small alignments +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +The functions used by qemu_memalign() require an alignment that is at +least sizeof(void*). Adjust it if it is too small. + +Signed-off-by: Kevin Wolf +Reviewed-by: Wenchao Xia +Reviewed-by: Max Reitz +Reviewed-by: Benoît Canet +(cherry picked from commit e5354657a626b325c31888f33de88ac6d39e2fcb) + +Signed-off-by: Kevin Wolf +--- + util/oslib-posix.c | 5 +++++ + 1 file changed, 5 insertions(+) +--- + util/oslib-posix.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/util/oslib-posix.c b/util/oslib-posix.c +index 253bc3d..2c756c7 100644 +--- a/util/oslib-posix.c ++++ b/util/oslib-posix.c +@@ -85,6 +85,11 @@ void *qemu_oom_check(void *ptr) + void *qemu_memalign(size_t alignment, size_t size) + { + void *ptr; ++ ++ if (alignment < sizeof(void*)) { ++ alignment = sizeof(void*); ++ } ++ + #if defined(_POSIX_C_SOURCE) && !defined(__sun__) + int ret; + ret = posix_memalign(&ptr, alignment, size); +-- +1.7.1 + diff --git a/SOURCES/kvm-qerror-drop-QERR_OPEN_FILE_FAILED-macro.patch b/SOURCES/kvm-qerror-drop-QERR_OPEN_FILE_FAILED-macro.patch new file mode 100644 index 0000000..6488dec --- /dev/null +++ b/SOURCES/kvm-qerror-drop-QERR_OPEN_FILE_FAILED-macro.patch @@ -0,0 +1,48 @@ +From 079e736f93a50e24b6a9d5fc3d11e25175ce8aea Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:31 +0100 +Subject: [PATCH 12/29] qerror: drop QERR_OPEN_FILE_FAILED macro + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-9-git-send-email-lersek@redhat.com> +Patchwork-id: 55198 +O-Subject: [RHEL-7 qemu-kvm PATCH 8/8] qerror: drop QERR_OPEN_FILE_FAILED macro +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Not used since the last commit. + +Signed-off-by: Luiz Capitulino +Acked-by: Kevin Wolf +(cherry picked from commit dbfbc6373441e436ac6e2bcf7a8acb284225aa21) +Signed-off-by: Laszlo Ersek +--- + include/qapi/qmp/qerror.h | 3 --- + 1 file changed, 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/qapi/qmp/qerror.h | 3 --- + 1 files changed, 0 insertions(+), 3 deletions(-) + +diff --git a/include/qapi/qmp/qerror.h b/include/qapi/qmp/qerror.h +index 6c0a18d..c30c2f6 100644 +--- a/include/qapi/qmp/qerror.h ++++ b/include/qapi/qmp/qerror.h +@@ -177,9 +177,6 @@ void assert_no_error(Error *err); + #define QERR_NOT_SUPPORTED \ + ERROR_CLASS_GENERIC_ERROR, "Not supported" + +-#define QERR_OPEN_FILE_FAILED \ +- ERROR_CLASS_GENERIC_ERROR, "Could not open '%s'" +- + #define QERR_PERMISSION_DENIED \ + ERROR_CLASS_GENERIC_ERROR, "Insufficient permission to perform this operation" + +-- +1.7.1 + diff --git a/SOURCES/kvm-qga-create-state-directory-on-win32.patch b/SOURCES/kvm-qga-create-state-directory-on-win32.patch new file mode 100644 index 0000000..4d0925a --- /dev/null +++ b/SOURCES/kvm-qga-create-state-directory-on-win32.patch @@ -0,0 +1,57 @@ +From 7f69c4a541318610bef76295163cf4d7907d2339 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 14:03:25 +0200 +Subject: [PATCH 04/28] qga: create state directory on win32 + +RH-Author: Laszlo Ersek +Message-id: <1375279407-13573-5-git-send-email-lersek@redhat.com> +Patchwork-id: 52867 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/6] qga: create state directory on win32 +Bugzilla: 964304 +RH-Acked-by: Michal Novotny +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Paolo Bonzini + +On Win32 the local state directory is application specific and users might +expect qemu-ga to create it automatically. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael Roth +(cherry picked from commit bf12c1fa8c78e3c667f2fe2ecc656f4f3cfb914e) +--- + qga/main.c | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qga/main.c | 14 ++++++++++++++ + 1 files changed, 14 insertions(+), 0 deletions(-) + +diff --git a/qga/main.c b/qga/main.c +index 050b968..e49a6dd 100644 +--- a/qga/main.c ++++ b/qga/main.c +@@ -1042,6 +1042,20 @@ int main(int argc, char **argv) + } + } + ++#ifdef _WIN32 ++ /* On win32 the state directory is application specific (be it the default ++ * or a user override). We got past the command line parsing; let's create ++ * the directory (with any intermediate directories). If we run into an ++ * error later on, we won't try to clean up the directory, it is considered ++ * persistent. ++ */ ++ if (g_mkdir_with_parents(state_dir, S_IRWXU) == -1) { ++ g_critical("unable to create (an ancestor of) the state directory" ++ " '%s': %s", state_dir, strerror(errno)); ++ return EXIT_FAILURE; ++ } ++#endif ++ + s = g_malloc0(sizeof(GAState)); + s->log_level = log_level; + s->log_file = stderr; +-- +1.7.1 + diff --git a/SOURCES/kvm-qga-determine-default-state-dir-and-pidfile-dynamica.patch b/SOURCES/kvm-qga-determine-default-state-dir-and-pidfile-dynamica.patch new file mode 100644 index 0000000..b7371b6 --- /dev/null +++ b/SOURCES/kvm-qga-determine-default-state-dir-and-pidfile-dynamica.patch @@ -0,0 +1,124 @@ +From 211077f1cceb5f814d0750b183ff19995b37c6d3 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 14:03:23 +0200 +Subject: [PATCH 02/28] qga: determine default state dir and pidfile dynamically + +RH-Author: Laszlo Ersek +Message-id: <1375279407-13573-3-git-send-email-lersek@redhat.com> +Patchwork-id: 52861 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/6] qga: determine default state dir and pidfile dynamically +Bugzilla: 964304 +RH-Acked-by: Michal Novotny +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Paolo Bonzini + +No effective change on POSIX, but on Win32 the defaults come from the +environment / session. + +Since commit 39097daf ("qemu-ga: use key-value store to avoid recycling fd +handles after restart") we've relied on the state directory for the fd +handles' key-value store. Even though we don't support the guest-file-* +commands on win32 yet, the key-value store is written, and it's the first +use of the state directory on win32. We should have a sensible default for +its location. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Michael Roth +(cherry picked from commit c394ecb7bf55b7234f852b9c8518aefb5d0943fa) +--- + qga/main.c | 32 ++++++++++++++++++++++++++------ + 1 files changed, 26 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qga/main.c | 32 ++++++++++++++++++++++++++------ + 1 files changed, 26 insertions(+), 6 deletions(-) + +diff --git a/qga/main.c b/qga/main.c +index c2ba5d9..050b968 100644 +--- a/qga/main.c ++++ b/qga/main.c +@@ -45,16 +45,21 @@ + + #ifndef _WIN32 + #define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0" ++#define QGA_STATE_RELATIVE_DIR "run" + #else + #define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0" ++#define QGA_STATE_RELATIVE_DIR "qemu-ga" + #endif +-#define QGA_STATEDIR_DEFAULT CONFIG_QEMU_LOCALSTATEDIR "/run" +-#define QGA_PIDFILE_DEFAULT QGA_STATEDIR_DEFAULT "/qemu-ga.pid" + #ifdef CONFIG_FSFREEZE + #define QGA_FSFREEZE_HOOK_DEFAULT CONFIG_QEMU_CONFDIR "/fsfreeze-hook" + #endif + #define QGA_SENTINEL_BYTE 0xFF + ++static struct { ++ const char *state_dir; ++ const char *pidfile; ++} dfl_pathnames; ++ + typedef struct GAPersistentState { + #define QGA_PSTATE_DEFAULT_FD_COUNTER 1000 + int64_t fd_counter; +@@ -106,6 +111,17 @@ DWORD WINAPI service_ctrl_handler(DWORD ctrl, DWORD type, LPVOID data, + VOID WINAPI service_main(DWORD argc, TCHAR *argv[]); + #endif + ++static void ++init_dfl_pathnames(void) ++{ ++ g_assert(dfl_pathnames.state_dir == NULL); ++ g_assert(dfl_pathnames.pidfile == NULL); ++ dfl_pathnames.state_dir = qemu_get_local_state_pathname( ++ QGA_STATE_RELATIVE_DIR); ++ dfl_pathnames.pidfile = qemu_get_local_state_pathname( ++ QGA_STATE_RELATIVE_DIR G_DIR_SEPARATOR_S "qemu-ga.pid"); ++} ++ + static void quit_handler(int sig) + { + /* if we're frozen, don't exit unless we're absolutely forced to, +@@ -198,11 +214,11 @@ static void usage(const char *cmd) + " -h, --help display this help and exit\n" + "\n" + "Report bugs to \n" +- , cmd, QEMU_VERSION, QGA_VIRTIO_PATH_DEFAULT, QGA_PIDFILE_DEFAULT, ++ , cmd, QEMU_VERSION, QGA_VIRTIO_PATH_DEFAULT, dfl_pathnames.pidfile, + #ifdef CONFIG_FSFREEZE + QGA_FSFREEZE_HOOK_DEFAULT, + #endif +- QGA_STATEDIR_DEFAULT); ++ dfl_pathnames.state_dir); + } + + static const char *ga_log_level_str(GLogLevelFlags level) +@@ -908,11 +924,11 @@ int main(int argc, char **argv) + const char *sopt = "hVvdm:p:l:f:F::b:s:t:"; + const char *method = NULL, *path = NULL; + const char *log_filepath = NULL; +- const char *pid_filepath = QGA_PIDFILE_DEFAULT; ++ const char *pid_filepath; + #ifdef CONFIG_FSFREEZE + const char *fsfreeze_hook = NULL; + #endif +- const char *state_dir = QGA_STATEDIR_DEFAULT; ++ const char *state_dir; + #ifdef _WIN32 + const char *service = NULL; + #endif +@@ -942,6 +958,10 @@ int main(int argc, char **argv) + + module_call_init(MODULE_INIT_QAPI); + ++ init_dfl_pathnames(); ++ pid_filepath = dfl_pathnames.pidfile; ++ state_dir = dfl_pathnames.state_dir; ++ + while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { + switch (ch) { + case 'm': +-- +1.7.1 + diff --git a/SOURCES/kvm-qga-move-logfiles-to-new-directory-for-easier-SELinu.patch b/SOURCES/kvm-qga-move-logfiles-to-new-directory-for-easier-SELinu.patch new file mode 100644 index 0000000..20799ad --- /dev/null +++ b/SOURCES/kvm-qga-move-logfiles-to-new-directory-for-easier-SELinu.patch @@ -0,0 +1,58 @@ +From db7dfa77ec3dc8908f3adb94eea121325e8ecda6 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 18 Sep 2013 16:05:42 +0200 +Subject: [PATCH 27/29] qga: move logfiles to new directory for easier SELinux labeling (RHEL only) + +RH-Author: Laszlo Ersek +Message-id: <1379520342-23063-1-git-send-email-lersek@redhat.com> +Patchwork-id: 54449 +O-Subject: [RHEL-7 qemu-kvm PATCH] qga: move logfiles to new directory for easier SELinux labeling (RHEL only) +Bugzilla: 1009491 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1009491 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6300016 + +Tested by me (with manual labeling for now). + +While discussing RHEL-6 selinux-policy bug 964345 ("SELinux policy +prevents qemu guest agent from running main fsfreeze hook script, and from +creating random files"), SELinux developers suggested that the normal qga +logfile, and the fsfreeze hook logfile (which is new in RHEL-6.5) be moved +to a dedicated directory for easier SELinux labeling. + +In RHEL-7 (selinux-policy bug: 1005890) only the fsfreeze hook log exists +as a separate file; the normal qga log is part of the system journal. + +RHEL-7 only patch. + +Signed-off-by: Laszlo Ersek +--- + redhat/qemu-kvm.spec.template | 4 ++++ + scripts/qemu-guest-agent/fsfreeze-hook | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + redhat/qemu-kvm.spec.template | 4 ++++ + scripts/qemu-guest-agent/fsfreeze-hook | 2 +- + 2 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/scripts/qemu-guest-agent/fsfreeze-hook b/scripts/qemu-guest-agent/fsfreeze-hook +index 45514fa..dba51c4 100755 +--- a/scripts/qemu-guest-agent/fsfreeze-hook ++++ b/scripts/qemu-guest-agent/fsfreeze-hook +@@ -7,7 +7,7 @@ + # "freeze" argument before the filesystem is frozen. And for fsfreeze-thaw + # request, it is issued with "thaw" argument after filesystem is thawed. + +-LOGFILE=/var/log/qemu-ga.fsfreeze-hook.log ++LOGFILE=/var/log/qemu-ga/fsfreeze-hook.log + + # Check whether file $1 is a backup or rpm-generated file and should be ignored + is_ignored_file() { +-- +1.7.1 + diff --git a/SOURCES/kvm-qga-save-state-directory-in-ga_install_service-RHEL-.patch b/SOURCES/kvm-qga-save-state-directory-in-ga_install_service-RHEL-.patch new file mode 100644 index 0000000..392c4c3 --- /dev/null +++ b/SOURCES/kvm-qga-save-state-directory-in-ga_install_service-RHEL-.patch @@ -0,0 +1,61 @@ +From e134588808798e0e2059bfc2bfcecea0f3287abf Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 31 Jul 2013 14:03:26 +0200 +Subject: [PATCH 05/28] qga: save state directory in ga_install_service() -- RHEL-7 fixup + +RH-Author: Laszlo Ersek +Message-id: <1375279407-13573-6-git-send-email-lersek@redhat.com> +Patchwork-id: 52866 +O-Subject: [RHEL-7 qemu-kvm PATCH 5/6] qga: save state directory in ga_install_service() -- RHEL-7 fixup +Bugzilla: 964304 +RH-Acked-by: Michal Novotny +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Paolo Bonzini + +If the user selects a non-default state directory at service installation +time, we should remember it in the registered service. + +In RHEL-7 we're getting the fix for CVE-2013-2231 and upstream commit + + a839ee77 qga: save state directory in ga_install_service() + +in reverse order. + +Qemu-1.6 saw "a839ee77" first, and the CVE fix second. For qemu-1.5.2, +Mike Roth pulled in part of "a839ee77" as "31c6ed20", and then applied the +CVE fix. This patch adds the rest of "a839ee77". + +Signed-off-by: Laszlo Ersek +--- + qga/main.c | 10 +++++++++- + 1 files changed, 9 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + qga/main.c | 10 +++++++++- + 1 files changed, 9 insertions(+), 1 deletions(-) + +diff --git a/qga/main.c b/qga/main.c +index e49a6dd..0e04e73 100644 +--- a/qga/main.c ++++ b/qga/main.c +@@ -1023,7 +1023,15 @@ int main(int argc, char **argv) + service = optarg; + if (strcmp(service, "install") == 0) { + const char *fixed_state_dir; +- return ga_install_service(path, log_filepath, state_dir); ++ ++ /* If the user passed the "-t" option, we save that state dir ++ * in the service. Otherwise we let the service fetch the state ++ * dir from the environment when it starts. ++ */ ++ fixed_state_dir = (state_dir == dfl_pathnames.state_dir) ? ++ NULL : ++ state_dir; ++ return ga_install_service(path, log_filepath, fixed_state_dir); + } else if (strcmp(service, "uninstall") == 0) { + return ga_uninstall_service(); + } else { +-- +1.7.1 + diff --git a/SOURCES/kvm-qjson-Apply-nesting-limit-more-sanely.patch b/SOURCES/kvm-qjson-Apply-nesting-limit-more-sanely.patch new file mode 100644 index 0000000..061218c --- /dev/null +++ b/SOURCES/kvm-qjson-Apply-nesting-limit-more-sanely.patch @@ -0,0 +1,46 @@ +From 1f08301adf98c235ccc4e978f809c3f60833452c Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:00 +0200 +Subject: [PATCH 02/16] qjson: Apply nesting limit more sanely + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-4-git-send-email-armbru@redhat.com> +Patchwork-id: 71468 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 02/15] qjson: Apply nesting limit more sanely +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +The nesting limit from commit 29c75dd "json-streamer: limit the +maximum recursion depth and maximum token count" applies separately to +braces and brackets. This makes no sense. Apply it to their sum, +because that's actually a measure of recursion depth. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-Id: <1448486613-17634-2-git-send-email-armbru@redhat.com> +(cherry picked from commit 4f2d31fbc0bfdf41feea7d1be49f4f7ffa005534) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + qobject/json-streamer.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index 1b2f9b1..dced2c7 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -64,8 +64,7 @@ static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTok + parser->bracket_count == 0)) { + goto out_emit; + } else if (parser->token_size > MAX_TOKEN_SIZE || +- parser->bracket_count > MAX_NESTING || +- parser->brace_count > MAX_NESTING) { ++ parser->bracket_count + parser->brace_count > MAX_NESTING) { + /* Security consideration, we limit total memory allocated per object + * and the maximum recursion depth that a message can force. + */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Convert-to-parser-to-recursive-descent.patch b/SOURCES/kvm-qjson-Convert-to-parser-to-recursive-descent.patch new file mode 100644 index 0000000..2da74a2 --- /dev/null +++ b/SOURCES/kvm-qjson-Convert-to-parser-to-recursive-descent.patch @@ -0,0 +1,328 @@ +From 2975abb487a54b49246646db9aa40ee6d1beaa97 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:08 +0200 +Subject: [PATCH 10/16] qjson: Convert to parser to recursive descent + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-12-git-send-email-armbru@redhat.com> +Patchwork-id: 71474 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 10/15] qjson: Convert to parser to recursive descent +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +We backtrack in parse_value(), even though JSON is LL(1) and thus can +be parsed by straightforward recursive descent. Do exactly that. + +Based on an almost-correct patch from Paolo Bonzini. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Markus Armbruster +Message-Id: <1448486613-17634-10-git-send-email-armbru@redhat.com> +Reviewed-by: Eric Blake +(cherry picked from commit d538b25543f4db026bb435066e2403a542522c40) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qobject/json-parser.c + +Straighforward conflicts because lacking commit fc48ffc "qobject: Use +'bool' for qbool", we still use qbool_from_int(), and we lack commit +e549e71 "json-parser: Accept 'null' in QMP". + +Signed-off-by: Markus Armbruster +--- + qobject/json-parser.c | 163 ++++++++++++++------------------------------------ + 1 file changed, 46 insertions(+), 117 deletions(-) + +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index 79f4173..b242fba 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -266,23 +266,6 @@ static QObject *parser_context_peek_token(JSONParserContext *ctxt) + return token; + } + +-static JSONParserContext parser_context_save(JSONParserContext *ctxt) +-{ +- JSONParserContext saved_ctxt = {0}; +- saved_ctxt.tokens.pos = ctxt->tokens.pos; +- saved_ctxt.tokens.count = ctxt->tokens.count; +- saved_ctxt.tokens.buf = ctxt->tokens.buf; +- return saved_ctxt; +-} +- +-static void parser_context_restore(JSONParserContext *ctxt, +- JSONParserContext saved_ctxt) +-{ +- ctxt->tokens.pos = saved_ctxt.tokens.pos; +- ctxt->tokens.count = saved_ctxt.tokens.count; +- ctxt->tokens.buf = saved_ctxt.tokens.buf; +-} +- + static void tokens_append_from_iter(QObject *obj, void *opaque) + { + JSONParserContext *ctxt = opaque; +@@ -334,7 +317,6 @@ static void parser_context_free(JSONParserContext *ctxt) + static int parse_pair(JSONParserContext *ctxt, QDict *dict, va_list *ap) + { + QObject *key = NULL, *token = NULL, *value, *peek; +- JSONParserContext saved_ctxt = parser_context_save(ctxt); + + peek = parser_context_peek_token(ctxt); + if (peek == NULL) { +@@ -372,7 +354,6 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict, va_list *ap) + return 0; + + out: +- parser_context_restore(ctxt, saved_ctxt); + qobject_decref(key); + + return -1; +@@ -382,16 +363,9 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + { + QDict *dict = NULL; + QObject *token, *peek; +- JSONParserContext saved_ctxt = parser_context_save(ctxt); + + token = parser_context_pop_token(ctxt); +- if (token == NULL) { +- goto out; +- } +- +- if (token_get_type(token) != JSON_LCURLY) { +- goto out; +- } ++ assert(token && token_get_type(token) == JSON_LCURLY); + + dict = qdict_new(); + +@@ -435,7 +409,6 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + return QOBJECT(dict); + + out: +- parser_context_restore(ctxt, saved_ctxt); + QDECREF(dict); + return NULL; + } +@@ -444,16 +417,9 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + { + QList *list = NULL; + QObject *token, *peek; +- JSONParserContext saved_ctxt = parser_context_save(ctxt); + + token = parser_context_pop_token(ctxt); +- if (token == NULL) { +- goto out; +- } +- +- if (token_get_type(token) != JSON_LSQUARE) { +- goto out; +- } ++ assert(token && token_get_type(token) == JSON_LSQUARE); + + list = qlist_new(); + +@@ -507,107 +473,70 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + return QOBJECT(list); + + out: +- parser_context_restore(ctxt, saved_ctxt); + QDECREF(list); + return NULL; + } + + static QObject *parse_keyword(JSONParserContext *ctxt) + { +- QObject *token, *ret; +- JSONParserContext saved_ctxt = parser_context_save(ctxt); ++ QObject *token; + const char *val; + + token = parser_context_pop_token(ctxt); +- if (token == NULL) { +- goto out; +- } +- +- if (token_get_type(token) != JSON_KEYWORD) { +- goto out; +- } +- ++ assert(token && token_get_type(token) == JSON_KEYWORD); + val = token_get_value(token); + + if (!strcmp(val, "true")) { +- ret = QOBJECT(qbool_from_int(true)); ++ return QOBJECT(qbool_from_int(true)); + } else if (!strcmp(val, "false")) { +- ret = QOBJECT(qbool_from_int(false)); +- } else { +- parse_error(ctxt, token, "invalid keyword '%s'", val); +- goto out; ++ return QOBJECT(qbool_from_int(false)); + } +- +- return ret; +- +-out: +- parser_context_restore(ctxt, saved_ctxt); +- ++ parse_error(ctxt, token, "invalid keyword '%s'", val); + return NULL; + } + + static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) + { +- QObject *token = NULL, *obj; +- JSONParserContext saved_ctxt = parser_context_save(ctxt); ++ QObject *token; + const char *val; + + if (ap == NULL) { +- goto out; ++ return NULL; + } + + token = parser_context_pop_token(ctxt); +- if (token == NULL) { +- goto out; +- } +- +- if (token_get_type(token) != JSON_ESCAPE) { +- goto out; +- } +- ++ assert(token && token_get_type(token) == JSON_ESCAPE); + val = token_get_value(token); + + if (!strcmp(val, "%p")) { +- obj = va_arg(*ap, QObject *); ++ return va_arg(*ap, QObject *); + } else if (!strcmp(val, "%i")) { +- obj = QOBJECT(qbool_from_int(va_arg(*ap, int))); ++ return QOBJECT(qbool_from_int(va_arg(*ap, int))); + } else if (!strcmp(val, "%d")) { +- obj = QOBJECT(qint_from_int(va_arg(*ap, int))); ++ return QOBJECT(qint_from_int(va_arg(*ap, int))); + } else if (!strcmp(val, "%ld")) { +- obj = QOBJECT(qint_from_int(va_arg(*ap, long))); ++ return QOBJECT(qint_from_int(va_arg(*ap, long))); + } else if (!strcmp(val, "%lld") || + !strcmp(val, "%I64d")) { +- obj = QOBJECT(qint_from_int(va_arg(*ap, long long))); ++ return QOBJECT(qint_from_int(va_arg(*ap, long long))); + } else if (!strcmp(val, "%s")) { +- obj = QOBJECT(qstring_from_str(va_arg(*ap, const char *))); ++ return QOBJECT(qstring_from_str(va_arg(*ap, const char *))); + } else if (!strcmp(val, "%f")) { +- obj = QOBJECT(qfloat_from_double(va_arg(*ap, double))); +- } else { +- goto out; ++ return QOBJECT(qfloat_from_double(va_arg(*ap, double))); + } +- +- return obj; +- +-out: +- parser_context_restore(ctxt, saved_ctxt); +- + return NULL; + } + + static QObject *parse_literal(JSONParserContext *ctxt) + { +- QObject *token, *obj; +- JSONParserContext saved_ctxt = parser_context_save(ctxt); ++ QObject *token; + + token = parser_context_pop_token(ctxt); +- if (token == NULL) { +- goto out; +- } ++ assert(token); + + switch (token_get_type(token)) { + case JSON_STRING: +- obj = QOBJECT(qstring_from_escaped_str(ctxt, token)); +- break; ++ return QOBJECT(qstring_from_escaped_str(ctxt, token)); + case JSON_INTEGER: { + /* A possibility exists that this is a whole-valued float where the + * fractional part was left out due to being 0 (.0). It's not a big +@@ -626,46 +555,46 @@ static QObject *parse_literal(JSONParserContext *ctxt) + errno = 0; /* strtoll doesn't set errno on success */ + value = strtoll(token_get_value(token), NULL, 10); + if (errno != ERANGE) { +- obj = QOBJECT(qint_from_int(value)); +- break; ++ return QOBJECT(qint_from_int(value)); + } + /* fall through to JSON_FLOAT */ + } + case JSON_FLOAT: + /* FIXME dependent on locale */ +- obj = QOBJECT(qfloat_from_double(strtod(token_get_value(token), NULL))); +- break; ++ return QOBJECT(qfloat_from_double(strtod(token_get_value(token), ++ NULL))); + default: +- goto out; ++ abort(); + } +- +- return obj; +- +-out: +- parser_context_restore(ctxt, saved_ctxt); +- +- return NULL; + } + + static QObject *parse_value(JSONParserContext *ctxt, va_list *ap) + { +- QObject *obj; ++ QObject *token; + +- obj = parse_object(ctxt, ap); +- if (obj == NULL) { +- obj = parse_array(ctxt, ap); +- } +- if (obj == NULL) { +- obj = parse_escape(ctxt, ap); +- } +- if (obj == NULL) { +- obj = parse_keyword(ctxt); +- } +- if (obj == NULL) { +- obj = parse_literal(ctxt); ++ token = parser_context_peek_token(ctxt); ++ if (token == NULL) { ++ parse_error(ctxt, NULL, "premature EOI"); ++ return NULL; + } + +- return obj; ++ switch (token_get_type(token)) { ++ case JSON_LCURLY: ++ return parse_object(ctxt, ap); ++ case JSON_LSQUARE: ++ return parse_array(ctxt, ap); ++ case JSON_ESCAPE: ++ return parse_escape(ctxt, ap); ++ case JSON_INTEGER: ++ case JSON_FLOAT: ++ case JSON_STRING: ++ return parse_literal(ctxt); ++ case JSON_KEYWORD: ++ return parse_keyword(ctxt); ++ default: ++ parse_error(ctxt, token, "expecting value"); ++ return NULL; ++ } + } + + QObject *json_parser_parse(QList *tokens, va_list *ap) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Don-t-crash-when-input-exceeds-nesting-limit.patch b/SOURCES/kvm-qjson-Don-t-crash-when-input-exceeds-nesting-limit.patch new file mode 100644 index 0000000..e8ac2fa --- /dev/null +++ b/SOURCES/kvm-qjson-Don-t-crash-when-input-exceeds-nesting-limit.patch @@ -0,0 +1,62 @@ +From ba9229d280e035872ac2258873c1b9f34cc8c4a9 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:01 +0200 +Subject: [PATCH 03/16] qjson: Don't crash when input exceeds nesting limit + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-5-git-send-email-armbru@redhat.com> +Patchwork-id: 71472 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 03/15] qjson: Don't crash when input exceeds nesting limit +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +We limit nesting depth and input size to defend against input +triggering excessive heap or stack memory use (commit 29c75dd +json-streamer: limit the maximum recursion depth and maximum token +count). However, when the nesting limit is exceeded, +parser_context_peek_token()'s assertion fails. + +Broken in commit 65c0f1e "json-parser: don't replicate tokens at each +level of recursion". + +To reproduce stuff 1025 open braces or brackets into QMP. + +Fix by taking the error exit instead of the normal one. + +Reported-by: Eric Blake +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-Id: <1448486613-17634-3-git-send-email-armbru@redhat.com> +(cherry picked from commit 0753113a26bb8c77f951b1ea91fd4f36d099c37a) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + qobject/json-streamer.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index dced2c7..2bd22a7 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -68,13 +68,14 @@ static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTok + /* Security consideration, we limit total memory allocated per object + * and the maximum recursion depth that a message can force. + */ +- goto out_emit; ++ goto out_emit_bad; + } + + return; + + out_emit_bad: +- /* clear out token list and tell the parser to emit and error ++ /* ++ * Clear out token list and tell the parser to emit an error + * indication by passing it a NULL list + */ + QDECREF(parser->tokens); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Give-each-of-the-six-structural-chars-its-own-.patch b/SOURCES/kvm-qjson-Give-each-of-the-six-structural-chars-its-own-.patch new file mode 100644 index 0000000..a007310 --- /dev/null +++ b/SOURCES/kvm-qjson-Give-each-of-the-six-structural-chars-its-own-.patch @@ -0,0 +1,222 @@ +From 95aeff93da762bf7f69317eb674d3eccce672038 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:04 +0200 +Subject: [PATCH 06/16] qjson: Give each of the six structural chars its own + token type + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-8-git-send-email-armbru@redhat.com> +Patchwork-id: 71482 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 06/15] qjson: Give each of the six structural chars its own token type +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +Simplifies things, because we always check for a specific one. + +Signed-off-by: Markus Armbruster +Message-Id: <1448486613-17634-6-git-send-email-armbru@redhat.com> +Reviewed-by: Eric Blake +(cherry picked from commit c54616608af442edf4cfb7397a1909c2653efba0) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + include/qapi/qmp/json-lexer.h | 7 ++++++- + qobject/json-lexer.c | 19 ++++++++++++------- + qobject/json-parser.c | 31 +++++++++---------------------- + qobject/json-streamer.c | 32 +++++++++++++++----------------- + 4 files changed, 42 insertions(+), 47 deletions(-) + +diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h +index 61a143f..f3e8dc7 100644 +--- a/include/qapi/qmp/json-lexer.h ++++ b/include/qapi/qmp/json-lexer.h +@@ -19,7 +19,12 @@ + + typedef enum json_token_type { + JSON_MIN = 100, +- JSON_OPERATOR = JSON_MIN, ++ JSON_LCURLY = JSON_MIN, ++ JSON_RCURLY, ++ JSON_LSQUARE, ++ JSON_RSQUARE, ++ JSON_COLON, ++ JSON_COMMA, + JSON_INTEGER, + JSON_FLOAT, + JSON_KEYWORD, +diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c +index f106ffb..1bfff02 100644 +--- a/qobject/json-lexer.c ++++ b/qobject/json-lexer.c +@@ -257,12 +257,12 @@ static const uint8_t json_lexer[][256] = { + ['0'] = IN_ZERO, + ['1' ... '9'] = IN_NONZERO_NUMBER, + ['-'] = IN_NEG_NONZERO_NUMBER, +- ['{'] = JSON_OPERATOR, +- ['}'] = JSON_OPERATOR, +- ['['] = JSON_OPERATOR, +- [']'] = JSON_OPERATOR, +- [','] = JSON_OPERATOR, +- [':'] = JSON_OPERATOR, ++ ['{'] = JSON_LCURLY, ++ ['}'] = JSON_RCURLY, ++ ['['] = JSON_LSQUARE, ++ [']'] = JSON_RSQUARE, ++ [','] = JSON_COMMA, ++ [':'] = JSON_COLON, + ['a' ... 'z'] = IN_KEYWORD, + ['%'] = IN_ESCAPE, + [' '] = IN_WHITESPACE, +@@ -299,7 +299,12 @@ static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) + } + + switch (new_state) { +- case JSON_OPERATOR: ++ case JSON_LCURLY: ++ case JSON_RCURLY: ++ case JSON_LSQUARE: ++ case JSON_RSQUARE: ++ case JSON_COLON: ++ case JSON_COMMA: + case JSON_ESCAPE: + case JSON_INTEGER: + case JSON_FLOAT: +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index fa09769..50bf30c 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -64,19 +64,6 @@ static JSONTokenType token_get_type(QObject *obj) + return qdict_get_int(qobject_to_qdict(obj), "type"); + } + +-static int token_is_operator(QObject *obj, char op) +-{ +- const char *val; +- +- if (token_get_type(obj) != JSON_OPERATOR) { +- return 0; +- } +- +- val = token_get_value(obj); +- +- return (val[0] == op) && (val[1] == 0); +-} +- + static int token_is_keyword(QObject *obj, const char *value) + { + if (token_get_type(obj) != JSON_KEYWORD) { +@@ -385,7 +372,7 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict, va_list *ap) + goto out; + } + +- if (!token_is_operator(token, ':')) { ++ if (token_get_type(token) != JSON_COLON) { + parse_error(ctxt, token, "missing : in object pair"); + goto out; + } +@@ -420,7 +407,7 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (!token_is_operator(token, '{')) { ++ if (token_get_type(token) != JSON_LCURLY) { + goto out; + } + +@@ -432,7 +419,7 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (!token_is_operator(peek, '}')) { ++ if (token_get_type(peek) != JSON_RCURLY) { + if (parse_pair(ctxt, dict, ap) == -1) { + goto out; + } +@@ -443,8 +430,8 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- while (!token_is_operator(token, '}')) { +- if (!token_is_operator(token, ',')) { ++ while (token_get_type(token) != JSON_RCURLY) { ++ if (token_get_type(token) != JSON_COMMA) { + parse_error(ctxt, token, "expected separator in dict"); + goto out; + } +@@ -482,7 +469,7 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (!token_is_operator(token, '[')) { ++ if (token_get_type(token) != JSON_LSQUARE) { + goto out; + } + +@@ -494,7 +481,7 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (!token_is_operator(peek, ']')) { ++ if (token_get_type(peek) != JSON_RSQUARE) { + QObject *obj; + + obj = parse_value(ctxt, ap); +@@ -511,8 +498,8 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- while (!token_is_operator(token, ']')) { +- if (!token_is_operator(token, ',')) { ++ while (token_get_type(token) != JSON_RSQUARE) { ++ if (token_get_type(token) != JSON_COMMA) { + parse_error(ctxt, token, "expected separator in list"); + goto out; + } +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index 2bd22a7..4a161a1 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -26,23 +26,21 @@ static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTok + JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer); + QDict *dict; + +- if (type == JSON_OPERATOR) { +- switch (qstring_get_str(token)[0]) { +- case '{': +- parser->brace_count++; +- break; +- case '}': +- parser->brace_count--; +- break; +- case '[': +- parser->bracket_count++; +- break; +- case ']': +- parser->bracket_count--; +- break; +- default: +- break; +- } ++ switch (type) { ++ case JSON_LCURLY: ++ parser->brace_count++; ++ break; ++ case JSON_RCURLY: ++ parser->brace_count--; ++ break; ++ case JSON_LSQUARE: ++ parser->bracket_count++; ++ break; ++ case JSON_RSQUARE: ++ parser->bracket_count--; ++ break; ++ default: ++ break; + } + + dict = qdict_new(); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Inline-token_is_escape-and-simplify.patch b/SOURCES/kvm-qjson-Inline-token_is_escape-and-simplify.patch new file mode 100644 index 0000000..8ed2c95 --- /dev/null +++ b/SOURCES/kvm-qjson-Inline-token_is_escape-and-simplify.patch @@ -0,0 +1,97 @@ +From 225cb3d48dd4dcbc7bf845c0b4b06a90030874f3 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:06 +0200 +Subject: [PATCH 08/16] qjson: Inline token_is_escape() and simplify + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-10-git-send-email-armbru@redhat.com> +Patchwork-id: 71479 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 08/15] qjson: Inline token_is_escape() and simplify +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Markus Armbruster +Message-Id: <1448486613-17634-8-git-send-email-armbru@redhat.com> +Reviewed-by: Eric Blake +(cherry picked from commit 6b9606f68ec589def27bd2a9cea97ec63cffd581) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qobject/json-parser.c + +Straighforward conflict because lacking commit fc48ffc "qobject: Use +'bool' for qbool", we still use qbool_from_int(). + +Signed-off-by: Markus Armbruster +--- + qobject/json-parser.c | 32 +++++++++++++++----------------- + 1 file changed, 15 insertions(+), 17 deletions(-) + +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index e3690de..79f4173 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -64,15 +64,6 @@ static JSONTokenType token_get_type(QObject *obj) + return qdict_get_int(qobject_to_qdict(obj), "type"); + } + +-static int token_is_escape(QObject *obj, const char *value) +-{ +- if (token_get_type(obj) != JSON_ESCAPE) { +- return 0; +- } +- +- return (strcmp(token_get_value(obj), value) == 0); +-} +- + /** + * Error handler + */ +@@ -559,6 +550,7 @@ static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) + { + QObject *token = NULL, *obj; + JSONParserContext saved_ctxt = parser_context_save(ctxt); ++ const char *val; + + if (ap == NULL) { + goto out; +@@ -569,20 +561,26 @@ static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (token_is_escape(token, "%p")) { ++ if (token_get_type(token) != JSON_ESCAPE) { ++ goto out; ++ } ++ ++ val = token_get_value(token); ++ ++ if (!strcmp(val, "%p")) { + obj = va_arg(*ap, QObject *); +- } else if (token_is_escape(token, "%i")) { ++ } else if (!strcmp(val, "%i")) { + obj = QOBJECT(qbool_from_int(va_arg(*ap, int))); +- } else if (token_is_escape(token, "%d")) { ++ } else if (!strcmp(val, "%d")) { + obj = QOBJECT(qint_from_int(va_arg(*ap, int))); +- } else if (token_is_escape(token, "%ld")) { ++ } else if (!strcmp(val, "%ld")) { + obj = QOBJECT(qint_from_int(va_arg(*ap, long))); +- } else if (token_is_escape(token, "%lld") || +- token_is_escape(token, "%I64d")) { ++ } else if (!strcmp(val, "%lld") || ++ !strcmp(val, "%I64d")) { + obj = QOBJECT(qint_from_int(va_arg(*ap, long long))); +- } else if (token_is_escape(token, "%s")) { ++ } else if (!strcmp(val, "%s")) { + obj = QOBJECT(qstring_from_str(va_arg(*ap, const char *))); +- } else if (token_is_escape(token, "%f")) { ++ } else if (!strcmp(val, "%f")) { + obj = QOBJECT(qfloat_from_double(va_arg(*ap, double))); + } else { + goto out; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Inline-token_is_keyword-and-simplify.patch b/SOURCES/kvm-qjson-Inline-token_is_keyword-and-simplify.patch new file mode 100644 index 0000000..f885b32 --- /dev/null +++ b/SOURCES/kvm-qjson-Inline-token_is_keyword-and-simplify.patch @@ -0,0 +1,81 @@ +From 3cf8ec8ff0ad3920ce23166b2576655bcd886c5a Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:05 +0200 +Subject: [PATCH 07/16] qjson: Inline token_is_keyword() and simplify + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-9-git-send-email-armbru@redhat.com> +Patchwork-id: 71483 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 07/15] qjson: Inline token_is_keyword() and simplify +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Markus Armbruster +Message-Id: <1448486613-17634-7-git-send-email-armbru@redhat.com> +Reviewed-by: Eric Blake +(cherry picked from commit 50e2a467f5315fa36c547fb6330659ba45f6bb83) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qobject/json-parser.c + +Straighforward conflict because lacking commit fc48ffc "qobject: Use +'bool' for qbool", we still use qbool_from_int(), and we lack commit +e549e71 "json-parser: Accept 'null' in QMP". + +Signed-off-by: Markus Armbruster +--- + qobject/json-parser.c | 18 ++++++------------ + 1 file changed, 6 insertions(+), 12 deletions(-) + +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index 50bf30c..e3690de 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -64,15 +64,6 @@ static JSONTokenType token_get_type(QObject *obj) + return qdict_get_int(qobject_to_qdict(obj), "type"); + } + +-static int token_is_keyword(QObject *obj, const char *value) +-{ +- if (token_get_type(obj) != JSON_KEYWORD) { +- return 0; +- } +- +- return strcmp(token_get_value(obj), value) == 0; +-} +- + static int token_is_escape(QObject *obj, const char *value) + { + if (token_get_type(obj) != JSON_ESCAPE) { +@@ -534,6 +525,7 @@ static QObject *parse_keyword(JSONParserContext *ctxt) + { + QObject *token, *ret; + JSONParserContext saved_ctxt = parser_context_save(ctxt); ++ const char *val; + + token = parser_context_pop_token(ctxt); + if (token == NULL) { +@@ -544,12 +536,14 @@ static QObject *parse_keyword(JSONParserContext *ctxt) + goto out; + } + +- if (token_is_keyword(token, "true")) { ++ val = token_get_value(token); ++ ++ if (!strcmp(val, "true")) { + ret = QOBJECT(qbool_from_int(true)); +- } else if (token_is_keyword(token, "false")) { ++ } else if (!strcmp(val, "false")) { + ret = QOBJECT(qbool_from_int(false)); + } else { +- parse_error(ctxt, token, "invalid keyword `%s'", token_get_value(token)); ++ parse_error(ctxt, token, "invalid keyword '%s'", val); + goto out; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Limit-number-of-tokens-in-addition-to-total-si.patch b/SOURCES/kvm-qjson-Limit-number-of-tokens-in-addition-to-total-si.patch new file mode 100644 index 0000000..94ec4c4 --- /dev/null +++ b/SOURCES/kvm-qjson-Limit-number-of-tokens-in-addition-to-total-si.patch @@ -0,0 +1,59 @@ +From 60ad1bad25ea99c538b745ff95e6e0a877d37d1f Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:11 +0200 +Subject: [PATCH 13/16] qjson: Limit number of tokens in addition to total size + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-15-git-send-email-armbru@redhat.com> +Patchwork-id: 71476 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 13/15] qjson: Limit number of tokens in addition to total size +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +Commit 29c75dd "json-streamer: limit the maximum recursion depth and +maximum token count" attempts to guard against excessive heap usage by +limiting total token size (it says "token count", but that's a lie). + +Total token size is a rather imprecise predictor of heap usage: many +small tokens use more space than few large tokens with the same input +size, because there's a constant per-token overhead: 37 bytes on my +system. + +Tighten this up: limit the token count to 2Mi. Chosen to roughly +match the 64MiB total token size limit. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-Id: <1448486613-17634-13-git-send-email-armbru@redhat.com> +(cherry picked from commit df649835fe48f635a93316fdefe96ced7189316e) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + qobject/json-streamer.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index e87230d..a4db4b8 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -16,6 +16,7 @@ + #include "qapi/qmp/json-streamer.h" + + #define MAX_TOKEN_SIZE (64ULL << 20) ++#define MAX_TOKEN_COUNT (2ULL << 20) + #define MAX_NESTING (1ULL << 10) + + static void json_message_free_tokens(JSONMessageParser *parser) +@@ -68,6 +69,7 @@ static void json_message_process_token(JSONLexer *lexer, GString *input, + parser->bracket_count == 0)) { + goto out_emit; + } else if (parser->token_size > MAX_TOKEN_SIZE || ++ g_queue_get_length(parser->tokens) > MAX_TOKEN_COUNT || + parser->bracket_count + parser->brace_count > MAX_NESTING) { + /* Security consideration, we limit total memory allocated per object + * and the maximum recursion depth that a message can force. +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-Spell-out-some-silent-assumptions.patch b/SOURCES/kvm-qjson-Spell-out-some-silent-assumptions.patch new file mode 100644 index 0000000..6015054 --- /dev/null +++ b/SOURCES/kvm-qjson-Spell-out-some-silent-assumptions.patch @@ -0,0 +1,81 @@ +From c4c2e01b3fa861de40f809785a0643d56e2b311e Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:03 +0200 +Subject: [PATCH 05/16] qjson: Spell out some silent assumptions + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-7-git-send-email-armbru@redhat.com> +Patchwork-id: 71473 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 05/15] qjson: Spell out some silent assumptions +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Markus Armbruster +Message-Id: <1448486613-17634-5-git-send-email-armbru@redhat.com> +Reviewed-by: Eric Blake +(cherry picked from commit b8d3b1da3cdbb02e180618d6be346c564723015d) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + include/qapi/qmp/json-lexer.h | 3 ++- + qobject/json-lexer.c | 7 ++++++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h +index cdff046..61a143f 100644 +--- a/include/qapi/qmp/json-lexer.h ++++ b/include/qapi/qmp/json-lexer.h +@@ -18,7 +18,8 @@ + #include "qapi/qmp/qlist.h" + + typedef enum json_token_type { +- JSON_OPERATOR = 100, ++ JSON_MIN = 100, ++ JSON_OPERATOR = JSON_MIN, + JSON_INTEGER, + JSON_FLOAT, + JSON_KEYWORD, +diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c +index 440df60..f106ffb 100644 +--- a/qobject/json-lexer.c ++++ b/qobject/json-lexer.c +@@ -30,7 +30,7 @@ + */ + + enum json_lexer_state { +- IN_ERROR = 0, ++ IN_ERROR = 0, /* must really be 0, see json_lexer[] */ + IN_DQ_UCODE3, + IN_DQ_UCODE2, + IN_DQ_UCODE1, +@@ -62,6 +62,8 @@ enum json_lexer_state { + IN_START, + }; + ++QEMU_BUILD_BUG_ON((int)JSON_MIN <= (int)IN_START); ++ + #define TERMINAL(state) [0 ... 0x7F] = (state) + + /* Return whether TERMINAL is a terminal state and the transition to it +@@ -71,6 +73,8 @@ enum json_lexer_state { + (json_lexer[(old_state)][0] == (terminal)) + + static const uint8_t json_lexer[][256] = { ++ /* Relies on default initialization to IN_ERROR! */ ++ + /* double quote string */ + [IN_DQ_UCODE3] = { + ['0' ... '9'] = IN_DQ_STRING, +@@ -287,6 +291,7 @@ static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) + } + + do { ++ assert(lexer->state <= ARRAY_SIZE(json_lexer)); + new_state = json_lexer[lexer->state][(uint8_t)ch]; + char_consumed = !TERMINAL_NEEDED_LOOKAHEAD(lexer->state, new_state); + if (char_consumed) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-replace-QString-in-JSONLexer-with-GString.patch b/SOURCES/kvm-qjson-replace-QString-in-JSONLexer-with-GString.patch new file mode 100644 index 0000000..02baa00 --- /dev/null +++ b/SOURCES/kvm-qjson-replace-QString-in-JSONLexer-with-GString.patch @@ -0,0 +1,195 @@ +From 39da81cf143ccc400263362a5319803063ad14cf Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:07 +0200 +Subject: [PATCH 09/16] qjson: replace QString in JSONLexer with GString + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-11-git-send-email-armbru@redhat.com> +Patchwork-id: 71480 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 09/15] qjson: replace QString in JSONLexer with GString +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +JSONLexer only needs a simple resizable buffer. json-streamer.c +can allocate memory for each token instead of relying on reference +counting of QStrings. + +Signed-off-by: Paolo Bonzini +Message-Id: <1448300659-23559-2-git-send-email-pbonzini@redhat.com> +[Straightforwardly rebased on my patches, checkpatch made happy] +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +(cherry picked from commit d2ca7c0b0d876cf0e219ae7a92252626b0913a28) +Signed-off-by: Markus Armbruster + +Signed-off-by: Miroslav Rezanina +--- + include/qapi/qmp/json-lexer.h | 8 ++++---- + include/qapi/qmp/json-streamer.h | 1 + + qobject/json-lexer.c | 22 ++++++++-------------- + qobject/json-streamer.c | 9 +++++---- + 4 files changed, 18 insertions(+), 22 deletions(-) + +diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h +index f3e8dc7..cb456d5 100644 +--- a/include/qapi/qmp/json-lexer.h ++++ b/include/qapi/qmp/json-lexer.h +@@ -14,8 +14,7 @@ + #ifndef QEMU_JSON_LEXER_H + #define QEMU_JSON_LEXER_H + +-#include "qapi/qmp/qstring.h" +-#include "qapi/qmp/qlist.h" ++#include "glib-compat.h" + + typedef enum json_token_type { + JSON_MIN = 100, +@@ -36,13 +35,14 @@ typedef enum json_token_type { + + typedef struct JSONLexer JSONLexer; + +-typedef void (JSONLexerEmitter)(JSONLexer *, QString *, JSONTokenType, int x, int y); ++typedef void (JSONLexerEmitter)(JSONLexer *, GString *, ++ JSONTokenType, int x, int y); + + struct JSONLexer + { + JSONLexerEmitter *emit; + int state; +- QString *token; ++ GString *token; + int x, y; + }; + +diff --git a/include/qapi/qmp/json-streamer.h b/include/qapi/qmp/json-streamer.h +index 823f7d7..e901144 100644 +--- a/include/qapi/qmp/json-streamer.h ++++ b/include/qapi/qmp/json-streamer.h +@@ -14,6 +14,7 @@ + #ifndef QEMU_JSON_STREAMER_H + #define QEMU_JSON_STREAMER_H + ++#include + #include "qapi/qmp/qlist.h" + #include "qapi/qmp/json-lexer.h" + +diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c +index 1bfff02..b89e24f 100644 +--- a/qobject/json-lexer.c ++++ b/qobject/json-lexer.c +@@ -11,12 +11,9 @@ + * + */ + +-#include "qapi/qmp/qstring.h" +-#include "qapi/qmp/qlist.h" +-#include "qapi/qmp/qdict.h" +-#include "qapi/qmp/qint.h" + #include "qemu-common.h" + #include "qapi/qmp/json-lexer.h" ++#include + + #define MAX_TOKEN_SIZE (64ULL << 20) + +@@ -276,7 +273,7 @@ void json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func) + { + lexer->emit = func; + lexer->state = IN_START; +- lexer->token = qstring_new(); ++ lexer->token = g_string_sized_new(3); + lexer->x = lexer->y = 0; + } + +@@ -295,7 +292,7 @@ static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) + new_state = json_lexer[lexer->state][(uint8_t)ch]; + char_consumed = !TERMINAL_NEEDED_LOOKAHEAD(lexer->state, new_state); + if (char_consumed) { +- qstring_append_chr(lexer->token, ch); ++ g_string_append_c(lexer->token, ch); + } + + switch (new_state) { +@@ -313,8 +310,7 @@ static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) + lexer->emit(lexer, lexer->token, new_state, lexer->x, lexer->y); + /* fall through */ + case JSON_SKIP: +- QDECREF(lexer->token); +- lexer->token = qstring_new(); ++ g_string_truncate(lexer->token, 0); + new_state = IN_START; + break; + case IN_ERROR: +@@ -332,8 +328,7 @@ static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) + * induce an error/flush state. + */ + lexer->emit(lexer, lexer->token, JSON_ERROR, lexer->x, lexer->y); +- QDECREF(lexer->token); +- lexer->token = qstring_new(); ++ g_string_truncate(lexer->token, 0); + new_state = IN_START; + lexer->state = new_state; + return 0; +@@ -346,10 +341,9 @@ static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) + /* Do not let a single token grow to an arbitrarily large size, + * this is a security consideration. + */ +- if (lexer->token->length > MAX_TOKEN_SIZE) { ++ if (lexer->token->len > MAX_TOKEN_SIZE) { + lexer->emit(lexer, lexer->token, lexer->state, lexer->x, lexer->y); +- QDECREF(lexer->token); +- lexer->token = qstring_new(); ++ g_string_truncate(lexer->token, 0); + lexer->state = IN_START; + } + +@@ -379,5 +373,5 @@ int json_lexer_flush(JSONLexer *lexer) + + void json_lexer_destroy(JSONLexer *lexer) + { +- QDECREF(lexer->token); ++ g_string_free(lexer->token, true); + } +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index 4a161a1..7292f3a 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -12,6 +12,7 @@ + */ + + #include "qapi/qmp/qlist.h" ++#include "qapi/qmp/qstring.h" + #include "qapi/qmp/qint.h" + #include "qapi/qmp/qdict.h" + #include "qemu-common.h" +@@ -21,7 +22,8 @@ + #define MAX_TOKEN_SIZE (64ULL << 20) + #define MAX_NESTING (1ULL << 10) + +-static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTokenType type, int x, int y) ++static void json_message_process_token(JSONLexer *lexer, GString *input, ++ JSONTokenType type, int x, int y) + { + JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer); + QDict *dict; +@@ -45,12 +47,11 @@ static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTok + + dict = qdict_new(); + qdict_put(dict, "type", qint_from_int(type)); +- QINCREF(token); +- qdict_put(dict, "token", token); ++ qdict_put(dict, "token", qstring_from_str(input->str)); + qdict_put(dict, "x", qint_from_int(x)); + qdict_put(dict, "y", qint_from_int(y)); + +- parser->token_size += token->length; ++ parser->token_size += input->len; + + qlist_append(parser->tokens, dict); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-store-tokens-in-a-GQueue.patch b/SOURCES/kvm-qjson-store-tokens-in-a-GQueue.patch new file mode 100644 index 0000000..46ffff4 --- /dev/null +++ b/SOURCES/kvm-qjson-store-tokens-in-a-GQueue.patch @@ -0,0 +1,332 @@ +From 88ee76fed6344de6cede3bfbb3873423e9a90333 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:09 +0200 +Subject: [PATCH 11/16] qjson: store tokens in a GQueue + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-13-git-send-email-armbru@redhat.com> +Patchwork-id: 71478 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 11/15] qjson: store tokens in a GQueue +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +Even though we still have the "streamer" concept, the tokens can now +be deleted as they are read. While doing so convert from QList to +GQueue, since the next step will make tokens not a QObject and we +will have to do the conversion anyway. + +Signed-off-by: Paolo Bonzini +Message-Id: <1448300659-23559-4-git-send-email-pbonzini@redhat.com> +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +(cherry picked from commit 95385fe9ace7db156b924da6b6f5c9082b68ba68) +Signed-off-by: Miroslav Rezanina + +Conflicts: + monitor.c + +Trivial context difference because we lack a small cleanup part of the +(fairly invasive) series b821cbe..489653b. + +Signed-off-by: Markus Armbruster +--- + include/qapi/qmp/json-parser.h | 4 +-- + include/qapi/qmp/json-streamer.h | 8 ++--- + monitor.c | 2 +- + qga/main.c | 2 +- + qobject/json-parser.c | 65 +++++++++++++--------------------------- + qobject/json-streamer.c | 25 +++++++++------- + qobject/qjson.c | 2 +- + tests/libqtest.c | 2 +- + 8 files changed, 45 insertions(+), 65 deletions(-) + +diff --git a/include/qapi/qmp/json-parser.h b/include/qapi/qmp/json-parser.h +index 44d88f3..fea89f8 100644 +--- a/include/qapi/qmp/json-parser.h ++++ b/include/qapi/qmp/json-parser.h +@@ -18,7 +18,7 @@ + #include "qapi/qmp/qlist.h" + #include "qapi/error.h" + +-QObject *json_parser_parse(QList *tokens, va_list *ap); +-QObject *json_parser_parse_err(QList *tokens, va_list *ap, Error **errp); ++QObject *json_parser_parse(GQueue *tokens, va_list *ap); ++QObject *json_parser_parse_err(GQueue *tokens, va_list *ap, Error **errp); + + #endif +diff --git a/include/qapi/qmp/json-streamer.h b/include/qapi/qmp/json-streamer.h +index e901144..e9f2937 100644 +--- a/include/qapi/qmp/json-streamer.h ++++ b/include/qapi/qmp/json-streamer.h +@@ -15,21 +15,21 @@ + #define QEMU_JSON_STREAMER_H + + #include +-#include "qapi/qmp/qlist.h" ++#include "glib-compat.h" + #include "qapi/qmp/json-lexer.h" + + typedef struct JSONMessageParser + { +- void (*emit)(struct JSONMessageParser *parser, QList *tokens); ++ void (*emit)(struct JSONMessageParser *parser, GQueue *tokens); + JSONLexer lexer; + int brace_count; + int bracket_count; +- QList *tokens; ++ GQueue *tokens; + uint64_t token_size; + } JSONMessageParser; + + void json_message_parser_init(JSONMessageParser *parser, +- void (*func)(JSONMessageParser *, QList *)); ++ void (*func)(JSONMessageParser *, GQueue *)); + + int json_message_parser_feed(JSONMessageParser *parser, + const char *buffer, size_t size); +diff --git a/monitor.c b/monitor.c +index 33c5bc8..1b28ff3 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -4514,7 +4514,7 @@ static void qmp_call_cmd(Monitor *mon, const mon_cmd_t *cmd, + qobject_decref(data); + } + +-static void handle_qmp_command(JSONMessageParser *parser, QList *tokens) ++static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens) + { + int err; + QObject *obj; +diff --git a/qga/main.c b/qga/main.c +index 0e04e73..7e8f9a0 100644 +--- a/qga/main.c ++++ b/qga/main.c +@@ -569,7 +569,7 @@ static void process_command(GAState *s, QDict *req) + } + + /* handle requests/control events coming in over the channel */ +-static void process_event(JSONMessageParser *parser, QList *tokens) ++static void process_event(JSONMessageParser *parser, GQueue *tokens) + { + GAState *s = container_of(parser, GAState, parser); + QObject *obj; +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index b242fba..6e5e257 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -27,11 +27,8 @@ + typedef struct JSONParserContext + { + Error *err; +- struct { +- QObject **buf; +- size_t pos; +- size_t count; +- } tokens; ++ QObject *current; ++ GQueue *buf; + } JSONParserContext; + + #define BUG_ON(cond) assert(!(cond)) +@@ -244,56 +241,34 @@ out: + return NULL; + } + ++/* Note: unless the token object returned by parser_context_peek_token ++ * or parser_context_pop_token is explicitly incref'd, it will be ++ * deleted as soon as parser_context_pop_token is called again. ++ */ + static QObject *parser_context_pop_token(JSONParserContext *ctxt) + { +- QObject *token; +- g_assert(ctxt->tokens.pos < ctxt->tokens.count); +- token = ctxt->tokens.buf[ctxt->tokens.pos]; +- ctxt->tokens.pos++; +- return token; ++ qobject_decref(ctxt->current); ++ assert(!g_queue_is_empty(ctxt->buf)); ++ ctxt->current = g_queue_pop_head(ctxt->buf); ++ return ctxt->current; + } + +-/* Note: parser_context_{peek|pop}_token do not increment the +- * token object's refcount. In both cases the references will continue +- * to be tracked and cleaned up in parser_context_free(), so do not +- * attempt to free the token object. +- */ + static QObject *parser_context_peek_token(JSONParserContext *ctxt) + { +- QObject *token; +- g_assert(ctxt->tokens.pos < ctxt->tokens.count); +- token = ctxt->tokens.buf[ctxt->tokens.pos]; +- return token; +-} +- +-static void tokens_append_from_iter(QObject *obj, void *opaque) +-{ +- JSONParserContext *ctxt = opaque; +- g_assert(ctxt->tokens.pos < ctxt->tokens.count); +- ctxt->tokens.buf[ctxt->tokens.pos++] = obj; +- qobject_incref(obj); ++ assert(!g_queue_is_empty(ctxt->buf)); ++ return g_queue_peek_head(ctxt->buf); + } + +-static JSONParserContext *parser_context_new(QList *tokens) ++static JSONParserContext *parser_context_new(GQueue *tokens) + { + JSONParserContext *ctxt; +- size_t count; + + if (!tokens) { + return NULL; + } + +- count = qlist_size(tokens); +- if (count == 0) { +- return NULL; +- } +- + ctxt = g_malloc0(sizeof(JSONParserContext)); +- ctxt->tokens.pos = 0; +- ctxt->tokens.count = count; +- ctxt->tokens.buf = g_malloc(count * sizeof(QObject *)); +- qlist_iter(tokens, tokens_append_from_iter, ctxt); +- ctxt->tokens.pos = 0; ++ ctxt->buf = tokens; + + return ctxt; + } +@@ -301,12 +276,12 @@ static JSONParserContext *parser_context_new(QList *tokens) + /* to support error propagation, ctxt->err must be freed separately */ + static void parser_context_free(JSONParserContext *ctxt) + { +- int i; + if (ctxt) { +- for (i = 0; i < ctxt->tokens.count; i++) { +- qobject_decref(ctxt->tokens.buf[i]); ++ while (!g_queue_is_empty(ctxt->buf)) { ++ parser_context_pop_token(ctxt); + } +- g_free(ctxt->tokens.buf); ++ qobject_decref(ctxt->current); ++ g_queue_free(ctxt->buf); + g_free(ctxt); + } + } +@@ -597,12 +572,12 @@ static QObject *parse_value(JSONParserContext *ctxt, va_list *ap) + } + } + +-QObject *json_parser_parse(QList *tokens, va_list *ap) ++QObject *json_parser_parse(GQueue *tokens, va_list *ap) + { + return json_parser_parse_err(tokens, ap, NULL); + } + +-QObject *json_parser_parse_err(QList *tokens, va_list *ap, Error **errp) ++QObject *json_parser_parse_err(GQueue *tokens, va_list *ap, Error **errp) + { + JSONParserContext *ctxt = parser_context_new(tokens); + QObject *result; +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index 7292f3a..f7a3e78 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -22,6 +22,14 @@ + #define MAX_TOKEN_SIZE (64ULL << 20) + #define MAX_NESTING (1ULL << 10) + ++static void json_message_free_tokens(JSONMessageParser *parser) ++{ ++ if (parser->tokens) { ++ g_queue_free(parser->tokens); ++ parser->tokens = NULL; ++ } ++} ++ + static void json_message_process_token(JSONLexer *lexer, GString *input, + JSONTokenType type, int x, int y) + { +@@ -53,7 +61,7 @@ static void json_message_process_token(JSONLexer *lexer, GString *input, + + parser->token_size += input->len; + +- qlist_append(parser->tokens, dict); ++ g_queue_push_tail(parser->tokens, dict); + + if (type == JSON_ERROR) { + goto out_emit_bad; +@@ -77,27 +85,24 @@ out_emit_bad: + * Clear out token list and tell the parser to emit an error + * indication by passing it a NULL list + */ +- QDECREF(parser->tokens); +- parser->tokens = NULL; ++ json_message_free_tokens(parser); + out_emit: + /* send current list of tokens to parser and reset tokenizer */ + parser->brace_count = 0; + parser->bracket_count = 0; ++ /* parser->emit takes ownership of parser->tokens. */ + parser->emit(parser, parser->tokens); +- if (parser->tokens) { +- QDECREF(parser->tokens); +- } +- parser->tokens = qlist_new(); ++ parser->tokens = g_queue_new(); + parser->token_size = 0; + } + + void json_message_parser_init(JSONMessageParser *parser, +- void (*func)(JSONMessageParser *, QList *)) ++ void (*func)(JSONMessageParser *, GQueue *)) + { + parser->emit = func; + parser->brace_count = 0; + parser->bracket_count = 0; +- parser->tokens = qlist_new(); ++ parser->tokens = g_queue_new(); + parser->token_size = 0; + + json_lexer_init(&parser->lexer, json_message_process_token); +@@ -117,5 +122,5 @@ int json_message_parser_flush(JSONMessageParser *parser) + void json_message_parser_destroy(JSONMessageParser *parser) + { + json_lexer_destroy(&parser->lexer); +- QDECREF(parser->tokens); ++ json_message_free_tokens(parser); + } +diff --git a/qobject/qjson.c b/qobject/qjson.c +index 6cf2511..fdc274a 100644 +--- a/qobject/qjson.c ++++ b/qobject/qjson.c +@@ -28,7 +28,7 @@ typedef struct JSONParsingState + QObject *result; + } JSONParsingState; + +-static void parse_json(JSONMessageParser *parser, QList *tokens) ++static void parse_json(JSONMessageParser *parser, GQueue *tokens) + { + JSONParsingState *s = container_of(parser, JSONParsingState, parser); + s->result = json_parser_parse(tokens, s->ap); +diff --git a/tests/libqtest.c b/tests/libqtest.c +index 359d571..69b7cd6 100644 +--- a/tests/libqtest.c ++++ b/tests/libqtest.c +@@ -299,7 +299,7 @@ typedef struct { + QDict *response; + } QMPResponseParser; + +-static void qmp_response(JSONMessageParser *parser, QList *tokens) ++static void qmp_response(JSONMessageParser *parser, GQueue *tokens) + { + QMPResponseParser *qmp = container_of(parser, QMPResponseParser, parser); + QObject *obj; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qjson-surprise-allocating-6-QObjects-per-token-is-ex.patch b/SOURCES/kvm-qjson-surprise-allocating-6-QObjects-per-token-is-ex.patch new file mode 100644 index 0000000..fb4fd05 --- /dev/null +++ b/SOURCES/kvm-qjson-surprise-allocating-6-QObjects-per-token-is-ex.patch @@ -0,0 +1,412 @@ +From 7bef5fab7d59aa9a6a1eb6ea747ba04811bc01e2 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 27 Jul 2016 07:35:10 +0200 +Subject: [PATCH 12/16] qjson: surprise, allocating 6 QObjects per token is + expensive + +RH-Author: Markus Armbruster +Message-id: <1469604913-12442-14-git-send-email-armbru@redhat.com> +Patchwork-id: 71475 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 12/15] qjson: surprise, allocating 6 QObjects per token is expensive +Bugzilla: 1276036 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +Replace the contents of the tokens GQueue with a simple struct. This cuts +the amount of memory allocated by tests/check-qjson from ~500MB to ~20MB, +and the execution time from 600ms to 80ms on my laptop. Still a lot (some +could be saved by using an intrusive list, such as QSIMPLEQ, instead of +the GQueue), but the savings are already massive and the right thing to +do would probably be to get rid of json-streamer completely. + +Signed-off-by: Paolo Bonzini +Message-Id: <1448300659-23559-5-git-send-email-pbonzini@redhat.com> +[Straightforwardly rebased on my patches] +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +(cherry picked from commit 9bada8971173345ceb37ed1a47b00a01a4dd48cf) + +Signed-off-by: Miroslav Rezanina + +Conflicts: + qobject/json-parser.c + +Straighforward conflicts because lacking commit fc48ffc "qobject: Use +'bool' for qbool", we still use qbool_from_int(), and we lack commit +e549e71 "json-parser: Accept 'null' in QMP". + +Signed-off-by: Markus Armbruster +--- + include/qapi/qmp/json-streamer.h | 7 +++ + qobject/json-parser.c | 113 ++++++++++++++++----------------------- + qobject/json-streamer.c | 19 +++---- + 3 files changed, 62 insertions(+), 77 deletions(-) + +diff --git a/include/qapi/qmp/json-streamer.h b/include/qapi/qmp/json-streamer.h +index e9f2937..09b3d3e 100644 +--- a/include/qapi/qmp/json-streamer.h ++++ b/include/qapi/qmp/json-streamer.h +@@ -18,6 +18,13 @@ + #include "glib-compat.h" + #include "qapi/qmp/json-lexer.h" + ++typedef struct JSONToken { ++ int type; ++ int x; ++ int y; ++ char str[]; ++} JSONToken; ++ + typedef struct JSONMessageParser + { + void (*emit)(struct JSONMessageParser *parser, GQueue *tokens); +diff --git a/qobject/json-parser.c b/qobject/json-parser.c +index 6e5e257..944e1a1 100644 +--- a/qobject/json-parser.c ++++ b/qobject/json-parser.c +@@ -23,11 +23,12 @@ + #include "qapi/qmp/json-parser.h" + #include "qapi/qmp/json-lexer.h" + #include "qapi/qmp/qerror.h" ++#include "qapi/qmp/json-streamer.h" + + typedef struct JSONParserContext + { + Error *err; +- QObject *current; ++ JSONToken *current; + GQueue *buf; + } JSONParserContext; + +@@ -45,27 +46,10 @@ typedef struct JSONParserContext + static QObject *parse_value(JSONParserContext *ctxt, va_list *ap); + + /** +- * Token manipulators +- * +- * tokens are dictionaries that contain a type, a string value, and geometry information +- * about a token identified by the lexer. These are routines that make working with +- * these objects a bit easier. +- */ +-static const char *token_get_value(QObject *obj) +-{ +- return qdict_get_str(qobject_to_qdict(obj), "token"); +-} +- +-static JSONTokenType token_get_type(QObject *obj) +-{ +- return qdict_get_int(qobject_to_qdict(obj), "type"); +-} +- +-/** + * Error handler + */ + static void GCC_FMT_ATTR(3, 4) parse_error(JSONParserContext *ctxt, +- QObject *token, const char *msg, ...) ++ JSONToken *token, const char *msg, ...) + { + va_list ap; + char message[1024]; +@@ -143,9 +127,10 @@ static int hex2decimal(char ch) + * \t + * \u four-hex-digits + */ +-static QString *qstring_from_escaped_str(JSONParserContext *ctxt, QObject *token) ++static QString *qstring_from_escaped_str(JSONParserContext *ctxt, ++ JSONToken *token) + { +- const char *ptr = token_get_value(token); ++ const char *ptr = token->str; + QString *str; + int double_quote = 1; + +@@ -241,19 +226,19 @@ out: + return NULL; + } + +-/* Note: unless the token object returned by parser_context_peek_token +- * or parser_context_pop_token is explicitly incref'd, it will be +- * deleted as soon as parser_context_pop_token is called again. ++/* Note: the token object returned by parser_context_peek_token or ++ * parser_context_pop_token is deleted as soon as parser_context_pop_token ++ * is called again. + */ +-static QObject *parser_context_pop_token(JSONParserContext *ctxt) ++static JSONToken *parser_context_pop_token(JSONParserContext *ctxt) + { +- qobject_decref(ctxt->current); ++ g_free(ctxt->current); + assert(!g_queue_is_empty(ctxt->buf)); + ctxt->current = g_queue_pop_head(ctxt->buf); + return ctxt->current; + } + +-static QObject *parser_context_peek_token(JSONParserContext *ctxt) ++static JSONToken *parser_context_peek_token(JSONParserContext *ctxt) + { + assert(!g_queue_is_empty(ctxt->buf)); + return g_queue_peek_head(ctxt->buf); +@@ -280,7 +265,7 @@ static void parser_context_free(JSONParserContext *ctxt) + while (!g_queue_is_empty(ctxt->buf)) { + parser_context_pop_token(ctxt); + } +- qobject_decref(ctxt->current); ++ g_free(ctxt->current); + g_queue_free(ctxt->buf); + g_free(ctxt); + } +@@ -291,7 +276,8 @@ static void parser_context_free(JSONParserContext *ctxt) + */ + static int parse_pair(JSONParserContext *ctxt, QDict *dict, va_list *ap) + { +- QObject *key = NULL, *token = NULL, *value, *peek; ++ QObject *key = NULL, *value; ++ JSONToken *peek, *token; + + peek = parser_context_peek_token(ctxt); + if (peek == NULL) { +@@ -311,7 +297,7 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict, va_list *ap) + goto out; + } + +- if (token_get_type(token) != JSON_COLON) { ++ if (token->type != JSON_COLON) { + parse_error(ctxt, token, "missing : in object pair"); + goto out; + } +@@ -337,10 +323,10 @@ out: + static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + { + QDict *dict = NULL; +- QObject *token, *peek; ++ JSONToken *token, *peek; + + token = parser_context_pop_token(ctxt); +- assert(token && token_get_type(token) == JSON_LCURLY); ++ assert(token && token->type == JSON_LCURLY); + + dict = qdict_new(); + +@@ -350,7 +336,7 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (token_get_type(peek) != JSON_RCURLY) { ++ if (peek->type != JSON_RCURLY) { + if (parse_pair(ctxt, dict, ap) == -1) { + goto out; + } +@@ -361,8 +347,8 @@ static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- while (token_get_type(token) != JSON_RCURLY) { +- if (token_get_type(token) != JSON_COMMA) { ++ while (token->type != JSON_RCURLY) { ++ if (token->type != JSON_COMMA) { + parse_error(ctxt, token, "expected separator in dict"); + goto out; + } +@@ -391,10 +377,10 @@ out: + static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + { + QList *list = NULL; +- QObject *token, *peek; ++ JSONToken *token, *peek; + + token = parser_context_pop_token(ctxt); +- assert(token && token_get_type(token) == JSON_LSQUARE); ++ assert(token && token->type == JSON_LSQUARE); + + list = qlist_new(); + +@@ -404,7 +390,7 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- if (token_get_type(peek) != JSON_RSQUARE) { ++ if (peek->type != JSON_RSQUARE) { + QObject *obj; + + obj = parse_value(ctxt, ap); +@@ -421,8 +407,8 @@ static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) + goto out; + } + +- while (token_get_type(token) != JSON_RSQUARE) { +- if (token_get_type(token) != JSON_COMMA) { ++ while (token->type != JSON_RSQUARE) { ++ if (token->type != JSON_COMMA) { + parse_error(ctxt, token, "expected separator in list"); + goto out; + } +@@ -454,49 +440,45 @@ out: + + static QObject *parse_keyword(JSONParserContext *ctxt) + { +- QObject *token; +- const char *val; ++ JSONToken *token; + + token = parser_context_pop_token(ctxt); +- assert(token && token_get_type(token) == JSON_KEYWORD); +- val = token_get_value(token); ++ assert(token && token->type == JSON_KEYWORD); + +- if (!strcmp(val, "true")) { ++ if (!strcmp(token->str, "true")) { + return QOBJECT(qbool_from_int(true)); +- } else if (!strcmp(val, "false")) { ++ } else if (!strcmp(token->str, "false")) { + return QOBJECT(qbool_from_int(false)); + } +- parse_error(ctxt, token, "invalid keyword '%s'", val); ++ parse_error(ctxt, token, "invalid keyword '%s'", token->str); + return NULL; + } + + static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) + { +- QObject *token; +- const char *val; ++ JSONToken *token; + + if (ap == NULL) { + return NULL; + } + + token = parser_context_pop_token(ctxt); +- assert(token && token_get_type(token) == JSON_ESCAPE); +- val = token_get_value(token); ++ assert(token && token->type == JSON_ESCAPE); + +- if (!strcmp(val, "%p")) { ++ if (!strcmp(token->str, "%p")) { + return va_arg(*ap, QObject *); +- } else if (!strcmp(val, "%i")) { ++ } else if (!strcmp(token->str, "%i")) { + return QOBJECT(qbool_from_int(va_arg(*ap, int))); +- } else if (!strcmp(val, "%d")) { ++ } else if (!strcmp(token->str, "%d")) { + return QOBJECT(qint_from_int(va_arg(*ap, int))); +- } else if (!strcmp(val, "%ld")) { ++ } else if (!strcmp(token->str, "%ld")) { + return QOBJECT(qint_from_int(va_arg(*ap, long))); +- } else if (!strcmp(val, "%lld") || +- !strcmp(val, "%I64d")) { ++ } else if (!strcmp(token->str, "%lld") || ++ !strcmp(token->str, "%I64d")) { + return QOBJECT(qint_from_int(va_arg(*ap, long long))); +- } else if (!strcmp(val, "%s")) { ++ } else if (!strcmp(token->str, "%s")) { + return QOBJECT(qstring_from_str(va_arg(*ap, const char *))); +- } else if (!strcmp(val, "%f")) { ++ } else if (!strcmp(token->str, "%f")) { + return QOBJECT(qfloat_from_double(va_arg(*ap, double))); + } + return NULL; +@@ -504,12 +486,12 @@ static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) + + static QObject *parse_literal(JSONParserContext *ctxt) + { +- QObject *token; ++ JSONToken *token; + + token = parser_context_pop_token(ctxt); + assert(token); + +- switch (token_get_type(token)) { ++ switch (token->type) { + case JSON_STRING: + return QOBJECT(qstring_from_escaped_str(ctxt, token)); + case JSON_INTEGER: { +@@ -528,7 +510,7 @@ static QObject *parse_literal(JSONParserContext *ctxt) + int64_t value; + + errno = 0; /* strtoll doesn't set errno on success */ +- value = strtoll(token_get_value(token), NULL, 10); ++ value = strtoll(token->str, NULL, 10); + if (errno != ERANGE) { + return QOBJECT(qint_from_int(value)); + } +@@ -536,8 +518,7 @@ static QObject *parse_literal(JSONParserContext *ctxt) + } + case JSON_FLOAT: + /* FIXME dependent on locale */ +- return QOBJECT(qfloat_from_double(strtod(token_get_value(token), +- NULL))); ++ return QOBJECT(qfloat_from_double(strtod(token->str, NULL))); + default: + abort(); + } +@@ -545,7 +526,7 @@ static QObject *parse_literal(JSONParserContext *ctxt) + + static QObject *parse_value(JSONParserContext *ctxt, va_list *ap) + { +- QObject *token; ++ JSONToken *token; + + token = parser_context_peek_token(ctxt); + if (token == NULL) { +@@ -553,7 +534,7 @@ static QObject *parse_value(JSONParserContext *ctxt, va_list *ap) + return NULL; + } + +- switch (token_get_type(token)) { ++ switch (token->type) { + case JSON_LCURLY: + return parse_object(ctxt, ap); + case JSON_LSQUARE: +diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c +index f7a3e78..e87230d 100644 +--- a/qobject/json-streamer.c ++++ b/qobject/json-streamer.c +@@ -11,10 +11,6 @@ + * + */ + +-#include "qapi/qmp/qlist.h" +-#include "qapi/qmp/qstring.h" +-#include "qapi/qmp/qint.h" +-#include "qapi/qmp/qdict.h" + #include "qemu-common.h" + #include "qapi/qmp/json-lexer.h" + #include "qapi/qmp/json-streamer.h" +@@ -34,7 +30,7 @@ static void json_message_process_token(JSONLexer *lexer, GString *input, + JSONTokenType type, int x, int y) + { + JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer); +- QDict *dict; ++ JSONToken *token; + + switch (type) { + case JSON_LCURLY: +@@ -53,15 +49,16 @@ static void json_message_process_token(JSONLexer *lexer, GString *input, + break; + } + +- dict = qdict_new(); +- qdict_put(dict, "type", qint_from_int(type)); +- qdict_put(dict, "token", qstring_from_str(input->str)); +- qdict_put(dict, "x", qint_from_int(x)); +- qdict_put(dict, "y", qint_from_int(y)); ++ token = g_malloc(sizeof(JSONToken) + input->len + 1); ++ token->type = type; ++ memcpy(token->str, input->str, input->len); ++ token->str[input->len] = 0; ++ token->x = x; ++ token->y = y; + + parser->token_size += input->len; + +- g_queue_push_tail(parser->tokens, dict); ++ g_queue_push_tail(parser->tokens, token); + + if (type == JSON_ERROR) { + goto out_emit_bad; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qmp-Documentation-for-BLOCK_IMAGE_CORRUPTED.patch b/SOURCES/kvm-qmp-Documentation-for-BLOCK_IMAGE_CORRUPTED.patch new file mode 100644 index 0000000..d1f6342 --- /dev/null +++ b/SOURCES/kvm-qmp-Documentation-for-BLOCK_IMAGE_CORRUPTED.patch @@ -0,0 +1,72 @@ +From c37b7417ab2bdc1c6880e192c5d80f865f7ed089 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:22 +0100 +Subject: [PATCH 29/87] qmp: Documentation for BLOCK_IMAGE_CORRUPTED + +RH-Author: Max Reitz +Message-id: <1383604354-12743-32-git-send-email-mreitz@redhat.com> +Patchwork-id: 55331 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 31/43] qmp: Documentation for BLOCK_IMAGE_CORRUPTED +Bugzilla: 1004347 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +BZ: 1004347 + +Add an appropriate entry describing this event and its parameters into +qmp-events.txt. + +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 0ca0b0d5f8a87dbc6daa5095771d036d0e6dc5b4) + +Signed-off-by: Max Reitz +--- + QMP/qmp-events.txt | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + QMP/qmp-events.txt | 22 ++++++++++++++++++++++ + 1 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index 92fe5fb..e185030 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -18,6 +18,28 @@ Example: + "data": { "actual": 944766976 }, + "timestamp": { "seconds": 1267020223, "microseconds": 435656 } } + ++BLOCK_IMAGE_CORRUPTED ++--------------------- ++ ++Emitted when a disk image is being marked corrupt. ++ ++Data: ++ ++- "device": Device name (json-string) ++- "msg": Informative message (e.g., reason for the corruption) (json-string) ++- "offset": If the corruption resulted from an image access, this is the access ++ offset into the image (json-int) ++- "size": If the corruption resulted from an image access, this is the access ++ size (json-int) ++ ++Example: ++ ++{ "event": "BLOCK_IMAGE_CORRUPTED", ++ "data": { "device": "ide0-hd0", ++ "msg": "Prevented active L1 table overwrite", "offset": 196608, ++ "size": 65536 }, ++ "timestamp": { "seconds": 1378126126, "microseconds": 966463 } } ++ + BLOCK_IO_ERROR + -------------- + +-- +1.7.1 + diff --git a/SOURCES/kvm-qmp-access-the-local-QemuOptsLists-for-drive-option.patch b/SOURCES/kvm-qmp-access-the-local-QemuOptsLists-for-drive-option.patch new file mode 100644 index 0000000..6c9ce7d --- /dev/null +++ b/SOURCES/kvm-qmp-access-the-local-QemuOptsLists-for-drive-option.patch @@ -0,0 +1,214 @@ +From 6d981002b5ccbcb4905e5fa45b4606cf4ddc9c9e Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 25 Feb 2014 07:56:50 +0100 +Subject: [PATCH 1/6] qmp: access the local QemuOptsLists for drive option + +RH-Author: Amos Kong +Message-id: <1393315010-20614-1-git-send-email-akong@redhat.com> +Patchwork-id: 57771 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v3] qmp: access the local QemuOptsLists for drive option +Bugzilla: 1026184 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Fam Zheng + +Bugzilla: 1026184 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7104270 + +Currently we have three QemuOptsList (qemu_common_drive_opts, +qemu_legacy_drive_opts, and qemu_drive_opts), only qemu_drive_opts +is added to vm_config_groups[]. + +This patch changes query-command-line-options to access three local +QemuOptsLists for drive option, and merge the description items +together. + +Signed-off-by: Amos Kong +Signed-off-by: Kevin Wolf +(cherry picked from commit 968854c8a106243eae7a68394ce1cb85dc138837) +--- +v2: re-backport when patch is merged to mainline +v3: rebase to latest qemu-kvm-rhel7 +--- +redo/fix query-command-line-options isn't finished, let's fix the +blkdev issue in rhel7.0 by this backport. +--- + blockdev.c | 1 - + include/qemu/config-file.h | 1 + + include/sysemu/sysemu.h | 2 + + util/qemu-config.c | 77 +++++++++++++++++++++++++++++++++++++++++++- + vl.c | 3 ++ + 5 files changed, 82 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + blockdev.c | 1 - + include/qemu/config-file.h | 1 + + include/sysemu/sysemu.h | 2 + + util/qemu-config.c | 77 +++++++++++++++++++++++++++++++++++++++++++- + vl.c | 3 ++ + 5 files changed, 82 insertions(+), 2 deletions(-) + +diff --git a/blockdev.c b/blockdev.c +index 80c6bb4..e51203c 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -47,7 +47,6 @@ + #include "sysemu/arch_init.h" + + static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives); +-extern QemuOptsList qemu_common_drive_opts; + + static const char *const if_name[IF_COUNT] = { + [IF_NONE] = "none", +diff --git a/include/qemu/config-file.h b/include/qemu/config-file.h +index ccfccae..3f92282 100644 +--- a/include/qemu/config-file.h ++++ b/include/qemu/config-file.h +@@ -9,6 +9,7 @@ + QemuOptsList *qemu_find_opts(const char *group); + QemuOptsList *qemu_find_opts_err(const char *group, Error **errp); + void qemu_add_opts(QemuOptsList *list); ++void qemu_add_drive_opts(QemuOptsList *list); + int qemu_set_option(const char *str); + int qemu_global_option(const char *str); + void qemu_add_globals(void); +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index c70d2dd..8dc0a4c 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -191,6 +191,8 @@ QemuOpts *qemu_get_machine_opts(void); + + bool usb_enabled(bool default_usb); + ++extern QemuOptsList qemu_legacy_drive_opts; ++extern QemuOptsList qemu_common_drive_opts; + extern QemuOptsList qemu_drive_opts; + extern QemuOptsList qemu_simple_drive_opts; + extern QemuOptsList qemu_chardev_opts; +diff --git a/util/qemu-config.c b/util/qemu-config.c +index a59568d..04da942 100644 +--- a/util/qemu-config.c ++++ b/util/qemu-config.c +@@ -8,6 +8,7 @@ + #include "qmp-commands.h" + + static QemuOptsList *vm_config_groups[32]; ++static QemuOptsList *drive_config_groups[4]; + + static QemuOptsList *find_list(QemuOptsList **lists, const char *group, + Error **errp) +@@ -77,6 +78,59 @@ static CommandLineParameterInfoList *query_option_descs(const QemuOptDesc *desc) + return param_list; + } + ++/* remove repeated entry from the info list */ ++static void cleanup_infolist(CommandLineParameterInfoList *head) ++{ ++ CommandLineParameterInfoList *pre_entry, *cur, *del_entry; ++ ++ cur = head; ++ while (cur->next) { ++ pre_entry = head; ++ while (pre_entry != cur->next) { ++ if (!strcmp(pre_entry->value->name, cur->next->value->name)) { ++ del_entry = cur->next; ++ cur->next = cur->next->next; ++ g_free(del_entry); ++ break; ++ } ++ pre_entry = pre_entry->next; ++ } ++ cur = cur->next; ++ } ++} ++ ++/* merge the description items of two parameter infolists */ ++static void connect_infolist(CommandLineParameterInfoList *head, ++ CommandLineParameterInfoList *new) ++{ ++ CommandLineParameterInfoList *cur; ++ ++ cur = head; ++ while (cur->next) { ++ cur = cur->next; ++ } ++ cur->next = new; ++} ++ ++/* access all the local QemuOptsLists for drive option */ ++static CommandLineParameterInfoList *get_drive_infolist(void) ++{ ++ CommandLineParameterInfoList *head = NULL, *cur; ++ int i; ++ ++ for (i = 0; drive_config_groups[i] != NULL; i++) { ++ if (!head) { ++ head = query_option_descs(drive_config_groups[i]->desc); ++ } else { ++ cur = query_option_descs(drive_config_groups[i]->desc); ++ connect_infolist(head, cur); ++ } ++ } ++ cleanup_infolist(head); ++ ++ return head; ++} ++ + CommandLineOptionInfoList *qmp_query_command_line_options(bool has_option, + const char *option, + Error **errp) +@@ -89,7 +143,12 @@ CommandLineOptionInfoList *qmp_query_command_line_options(bool has_option, + if (!has_option || !strcmp(option, vm_config_groups[i]->name)) { + info = g_malloc0(sizeof(*info)); + info->option = g_strdup(vm_config_groups[i]->name); +- info->parameters = query_option_descs(vm_config_groups[i]->desc); ++ if (!strcmp("drive", vm_config_groups[i]->name)) { ++ info->parameters = get_drive_infolist(); ++ } else { ++ info->parameters = ++ query_option_descs(vm_config_groups[i]->desc); ++ } + entry = g_malloc0(sizeof(*entry)); + entry->value = info; + entry->next = conf_list; +@@ -109,6 +168,22 @@ QemuOptsList *qemu_find_opts_err(const char *group, Error **errp) + return find_list(vm_config_groups, group, errp); + } + ++void qemu_add_drive_opts(QemuOptsList *list) ++{ ++ int entries, i; ++ ++ entries = ARRAY_SIZE(drive_config_groups); ++ entries--; /* keep list NULL terminated */ ++ for (i = 0; i < entries; i++) { ++ if (drive_config_groups[i] == NULL) { ++ drive_config_groups[i] = list; ++ return; ++ } ++ } ++ fprintf(stderr, "ran out of space in drive_config_groups"); ++ abort(); ++} ++ + void qemu_add_opts(QemuOptsList *list) + { + int entries, i; +diff --git a/vl.c b/vl.c +index deb5884..51300e7 100644 +--- a/vl.c ++++ b/vl.c +@@ -2851,6 +2851,9 @@ int main(int argc, char **argv, char **envp) + + qemu_add_opts(&qemu_drive_opts); + qemu_add_opts(&qemu_simple_drive_opts); ++ qemu_add_drive_opts(&qemu_legacy_drive_opts); ++ qemu_add_drive_opts(&qemu_common_drive_opts); ++ qemu_add_drive_opts(&qemu_drive_opts); + qemu_add_opts(&qemu_chardev_opts); + qemu_add_opts(&qemu_device_opts); + qemu_add_opts(&qemu_netdev_opts); +-- +1.7.1 + diff --git a/SOURCES/kvm-qmp-add-ImageInfo-in-BlockDeviceInfo-used-by-query-b.patch b/SOURCES/kvm-qmp-add-ImageInfo-in-BlockDeviceInfo-used-by-query-b.patch new file mode 100644 index 0000000..06dcd32 --- /dev/null +++ b/SOURCES/kvm-qmp-add-ImageInfo-in-BlockDeviceInfo-used-by-query-b.patch @@ -0,0 +1,291 @@ +From 5c10b431d0dd4538d33c21d7a46f7c8754f42a83 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:29 +0100 +Subject: [PATCH 72/87] qmp: add ImageInfo in BlockDeviceInfo used by query-block + +RH-Author: Max Reitz +Message-id: <1383756824-6921-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 55561 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 06/21] qmp: add ImageInfo in BlockDeviceInfo used by query-block +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Wenchao Xia + +BZ: 980771 + +Now image info will be retrieved as an embbed json object inside +BlockDeviceInfo, backing chain info and all related internal snapshot +info can be got in the enhanced recursive structure of ImageInfo. New +recursive member *backing-image is added to reflect the backing chain +status. + +Signed-off-by: Wenchao Xia +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 553a7e871822d933beaefbd596f0e4eed1614373) + +Signed-off-by: Max Reitz +--- + block/qapi.c | 50 ++++++++++++++++++++++++++++++++++--- + include/block/qapi.h | 4 ++- + qapi-schema.json | 10 ++++++-- + qmp-commands.hx | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++-- + 4 files changed, 125 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/qapi.c | 50 ++++++++++++++++++++++++++++++++++-- + include/block/qapi.h | 4 ++- + qapi-schema.json | 10 ++++++- + qmp-commands.hx | 69 ++++++++++++++++++++++++++++++++++++++++++++++++- + 4 files changed, 125 insertions(+), 8 deletions(-) + +diff --git a/block/qapi.c b/block/qapi.c +index e9d8b74..a4bc411 100644 +--- a/block/qapi.c ++++ b/block/qapi.c +@@ -94,6 +94,13 @@ int bdrv_query_snapshot_info_list(BlockDriverState *bs, + * @p_info: location to store image information + * @errp: location to store error information + * ++ * Store "flat" image information in @p_info. ++ * ++ * "Flat" means it does *not* query backing image information, ++ * i.e. (*pinfo)->has_backing_image will be set to false and ++ * (*pinfo)->backing_image to NULL even when the image does in fact have ++ * a backing image. ++ * + * @p_info will be set only on success. On error, store error in @errp. + */ + void bdrv_query_image_info(BlockDriverState *bs, +@@ -167,9 +174,15 @@ void bdrv_query_image_info(BlockDriverState *bs, + *p_info = info; + } + +-BlockInfo *bdrv_query_info(BlockDriverState *bs) ++/* @p_info will be set only on success. */ ++void bdrv_query_info(BlockDriverState *bs, ++ BlockInfo **p_info, ++ Error **errp) + { + BlockInfo *info = g_malloc0(sizeof(*info)); ++ BlockDriverState *bs0; ++ ImageInfo **p_image_info; ++ Error *local_err = NULL; + info->device = g_strdup(bs->device_name); + info->type = g_strdup("unknown"); + info->locked = bdrv_dev_is_medium_locked(bs); +@@ -223,8 +236,30 @@ BlockInfo *bdrv_query_info(BlockDriverState *bs) + info->inserted->iops_wr = + bs->io_limits.iops[BLOCK_IO_LIMIT_WRITE]; + } ++ ++ bs0 = bs; ++ p_image_info = &info->inserted->image; ++ while (1) { ++ bdrv_query_image_info(bs0, p_image_info, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ goto err; ++ } ++ if (bs0->drv && bs0->backing_hd) { ++ bs0 = bs0->backing_hd; ++ (*p_image_info)->has_backing_image = true; ++ p_image_info = &((*p_image_info)->backing_image); ++ } else { ++ break; ++ } ++ } + } +- return info; ++ ++ *p_info = info; ++ return; ++ ++ err: ++ qapi_free_BlockInfo(info); + } + + BlockStats *bdrv_query_stats(const BlockDriverState *bs) +@@ -261,16 +296,25 @@ BlockInfoList *qmp_query_block(Error **errp) + { + BlockInfoList *head = NULL, **p_next = &head; + BlockDriverState *bs = NULL; ++ Error *local_err = NULL; + + while ((bs = bdrv_next(bs))) { + BlockInfoList *info = g_malloc0(sizeof(*info)); +- info->value = bdrv_query_info(bs); ++ bdrv_query_info(bs, &info->value, &local_err); ++ if (error_is_set(&local_err)) { ++ error_propagate(errp, local_err); ++ goto err; ++ } + + *p_next = info; + p_next = &info->next; + } + + return head; ++ ++ err: ++ qapi_free_BlockInfoList(head); ++ return NULL; + } + + BlockStatsList *qmp_query_blockstats(Error **errp) +diff --git a/include/block/qapi.h b/include/block/qapi.h +index ab1f48f..0496cc9 100644 +--- a/include/block/qapi.h ++++ b/include/block/qapi.h +@@ -35,7 +35,9 @@ int bdrv_query_snapshot_info_list(BlockDriverState *bs, + void bdrv_query_image_info(BlockDriverState *bs, + ImageInfo **p_info, + Error **errp); +-BlockInfo *bdrv_query_info(BlockDriverState *s); ++void bdrv_query_info(BlockDriverState *bs, ++ BlockInfo **p_info, ++ Error **errp); + BlockStats *bdrv_query_stats(const BlockDriverState *bs); + + void bdrv_snapshot_dump(fprintf_function func_fprintf, void *f, +diff --git a/qapi-schema.json b/qapi-schema.json +index 32b41b0..4091b99 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -236,6 +236,8 @@ + # + # @snapshots: #optional list of VM snapshots + # ++# @backing-image: #optional info of the backing image (since 1.6) ++# + # Since: 1.3 + # + ## +@@ -245,7 +247,8 @@ + '*actual-size': 'int', 'virtual-size': 'int', + '*cluster-size': 'int', '*encrypted': 'bool', + '*backing-filename': 'str', '*full-backing-filename': 'str', +- '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'] } } ++ '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'], ++ '*backing-image': 'ImageInfo' } } + + ## + # @ImageCheck: +@@ -768,6 +771,8 @@ + # + # @iops_wr: write I/O operations per second is specified + # ++# @image: the info of image used (since: 1.6) ++# + # Since: 0.14.0 + # + # Notes: This interface is only found in @BlockInfo. +@@ -777,7 +782,8 @@ + '*backing_file': 'str', 'backing_file_depth': 'int', + 'encrypted': 'bool', 'encryption_key_missing': 'bool', + 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int', +- 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int'} } ++ 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', ++ 'image': 'ImageInfo' } } + + ## + # @BlockDeviceIoStatus: +diff --git a/qmp-commands.hx b/qmp-commands.hx +index d1f6f8b..f71c34e 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -1713,6 +1713,47 @@ Each json-object contain the following: + - "iops": limit total I/O operations per second (json-int) + - "iops_rd": limit read operations per second (json-int) + - "iops_wr": limit write operations per second (json-int) ++ - "image": the detail of the image, it is a json-object containing ++ the following: ++ - "filename": image file name (json-string) ++ - "format": image format (json-string) ++ - "virtual-size": image capacity in bytes (json-int) ++ - "dirty-flag": true if image is not cleanly closed, not present ++ means clean (json-bool, optional) ++ - "actual-size": actual size on disk in bytes of the image, not ++ present when image does not support thin ++ provision (json-int, optional) ++ - "cluster-size": size of a cluster in bytes, not present if image ++ format does not support it (json-int, optional) ++ - "encrypted": true if the image is encrypted, not present means ++ false or the image format does not support ++ encryption (json-bool, optional) ++ - "backing_file": backing file name, not present means no backing ++ file is used or the image format does not ++ support backing file chain ++ (json-string, optional) ++ - "full-backing-filename": full path of the backing file, not ++ present if it equals backing_file or no ++ backing file is used ++ (json-string, optional) ++ - "backing-filename-format": the format of the backing file, not ++ present means unknown or no backing ++ file (json-string, optional) ++ - "snapshots": the internal snapshot info, it is an optional list ++ of json-object containing the following: ++ - "id": unique snapshot id (json-string) ++ - "name": snapshot name (json-string) ++ - "vm-state-size": size of the VM state in bytes (json-int) ++ - "date-sec": UTC date of the snapshot in seconds (json-int) ++ - "date-nsec": fractional part in nanoseconds to be used with ++ date-sec(json-int) ++ - "vm-clock-sec": VM clock relative to boot in seconds ++ (json-int) ++ - "vm-clock-nsec": fractional part in nanoseconds to be used ++ with vm-clock-sec (json-int) ++ - "backing-image": the detail of the backing image, it is an ++ optional json-object only present when a ++ backing image present for this image + + - "io-status": I/O operation status, only present if the device supports it + and the VM is configured to stop on errors. It's always reset +@@ -1733,14 +1774,38 @@ Example: + "ro":false, + "drv":"qcow2", + "encrypted":false, +- "file":"disks/test.img", +- "backing_file_depth":0, ++ "file":"disks/test.qcow2", ++ "backing_file_depth":1, + "bps":1000000, + "bps_rd":0, + "bps_wr":0, + "iops":1000000, + "iops_rd":0, + "iops_wr":0, ++ "image":{ ++ "filename":"disks/test.qcow2", ++ "format":"qcow2", ++ "virtual-size":2048000, ++ "backing_file":"base.qcow2", ++ "full-backing-filename":"disks/base.qcow2", ++ "backing-filename-format:"qcow2", ++ "snapshots":[ ++ { ++ "id": "1", ++ "name": "snapshot1", ++ "vm-state-size": 0, ++ "date-sec": 10000200, ++ "date-nsec": 12, ++ "vm-clock-sec": 206, ++ "vm-clock-nsec": 30 ++ } ++ ], ++ "backing-image":{ ++ "filename":"disks/base.qcow2", ++ "format":"qcow2", ++ "virtual-size":2048000 ++ } ++ } + }, + "type":"unknown" + }, +-- +1.7.1 + diff --git a/SOURCES/kvm-qom-Fix-memory-leak-in-object_property_set_link.patch b/SOURCES/kvm-qom-Fix-memory-leak-in-object_property_set_link.patch new file mode 100644 index 0000000..4364dce --- /dev/null +++ b/SOURCES/kvm-qom-Fix-memory-leak-in-object_property_set_link.patch @@ -0,0 +1,59 @@ +From 709b3788e91957a9cff1adbe8ceac45daa2fa2bd Mon Sep 17 00:00:00 2001 +Message-Id: <709b3788e91957a9cff1adbe8ceac45daa2fa2bd.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Amos Kong +Date: Sat, 23 Nov 2013 03:17:44 +0100 +Subject: [PATCH 04/16] qom: Fix memory leak in object_property_set_link() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Amos Kong +Message-id: <1385176664-3852-3-git-send-email-akong@redhat.com> +Patchwork-id: 55867 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] qom: Fix memory leak in object_property_set_link() +Bugzilla: 1033810 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Igor Mammedov + +From: Vlad Yasevich + +Save the result of the call to object_get_canonical_path() +so we can free it. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Vlad Yasevich +Reviewed-by: Amos Kong +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Andreas Färber +(cherry picked from commit 2d3aa28cc2cf382aa04cd577e0be542175eea9bd) +--- + qom/object.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + qom/object.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/qom/object.c b/qom/object.c +index b7ecb9f..05e2636 100644 +--- a/qom/object.c ++++ b/qom/object.c +@@ -824,8 +824,9 @@ char *object_property_get_str(Object *obj, const char *name, + void object_property_set_link(Object *obj, Object *value, + const char *name, Error **errp) + { +- object_property_set_str(obj, object_get_canonical_path(value), +- name, errp); ++ gchar *path = object_get_canonical_path(value); ++ object_property_set_str(obj, path, name, errp); ++ g_free(path); + } + + Object *object_property_get_link(Object *obj, const char *name, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qom-add-pointer-to-int-property-helpers.patch b/SOURCES/kvm-qom-add-pointer-to-int-property-helpers.patch new file mode 100644 index 0000000..6cdaad4 --- /dev/null +++ b/SOURCES/kvm-qom-add-pointer-to-int-property-helpers.patch @@ -0,0 +1,144 @@ +From 5b321366d742d4efe826036108b06796563ea0ed Mon Sep 17 00:00:00 2001 +Message-Id: <5b321366d742d4efe826036108b06796563ea0ed.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:53 +0100 +Subject: [PATCH 25/56] qom: add pointer to int property helpers + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-26-git-send-email-mst@redhat.com> +Patchwork-id: 56331 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 25/57] qom: add pointer to int property helpers +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Make it easy to add read-only helpers for simple +integer properties in memory. + +Reviewed-by: Paolo Bonzini +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit e732ea638705da35445a42dee32691fbe813d3e0) +--- + include/qom/object.h | 21 ++++++++++++++++++ + qom/object.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 81 insertions(+) + +Signed-off-by: Michal Novotny +--- + include/qom/object.h | 21 ++++++++++++++++++ + qom/object.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 81 insertions(+) + +diff --git a/include/qom/object.h b/include/qom/object.h +index dbe1413..193bfeb 100644 +--- a/include/qom/object.h ++++ b/include/qom/object.h +@@ -790,6 +790,27 @@ void object_property_add(Object *obj, const char *name, const char *type, + void object_property_del(Object *obj, const char *name, Error **errp); + + /** ++ * object_property_add_uint8_ptr: ++ * object_property_add_uint16_ptr: ++ * object_property_add_uint32_ptr: ++ * object_property_add_uint64_ptr: ++ * @obj: the object to add a property to ++ * @name: the name of the property ++ * @v: pointer to value ++ * ++ * Add an integer property in memory. This function will add a ++ * property of the appropriate type. ++ */ ++void object_property_add_uint8_ptr(Object *obj, const char *name, ++ const uint8_t *v, Error **errp); ++void object_property_add_uint16_ptr(Object *obj, const char *name, ++ const uint16_t *v, Error **errp); ++void object_property_add_uint32_ptr(Object *obj, const char *name, ++ const uint32_t *v, Error **errp); ++void object_property_add_uint64_ptr(Object *obj, const char *name, ++ const uint64_t *v, Error **Errp); ++ ++/** + * object_property_find: + * @obj: the object + * @name: the name of the property +diff --git a/qom/object.c b/qom/object.c +index 05e2636..d04a96b 100644 +--- a/qom/object.c ++++ b/qom/object.c +@@ -1331,6 +1331,66 @@ static char *qdev_get_type(Object *obj, Error **errp) + return g_strdup(object_get_typename(obj)); + } + ++static void property_get_uint8_ptr(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ uint8_t value = *(uint8_t *)opaque; ++ visit_type_uint8(v, &value, name, errp); ++} ++ ++static void property_get_uint16_ptr(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ uint16_t value = *(uint16_t *)opaque; ++ visit_type_uint16(v, &value, name, errp); ++} ++ ++static void property_get_uint32_ptr(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ uint32_t value = *(uint32_t *)opaque; ++ visit_type_uint32(v, &value, name, errp); ++} ++ ++static void property_get_uint64_ptr(Object *obj, Visitor *v, ++ void *opaque, const char *name, ++ Error **errp) ++{ ++ uint64_t value = *(uint64_t *)opaque; ++ visit_type_uint64(v, &value, name, errp); ++} ++ ++void object_property_add_uint8_ptr(Object *obj, const char *name, ++ const uint8_t *v, Error **errp) ++{ ++ object_property_add(obj, name, "uint8", property_get_uint8_ptr, ++ NULL, NULL, (void *)v, errp); ++} ++ ++void object_property_add_uint16_ptr(Object *obj, const char *name, ++ const uint16_t *v, Error **errp) ++{ ++ object_property_add(obj, name, "uint16", property_get_uint16_ptr, ++ NULL, NULL, (void *)v, errp); ++} ++ ++void object_property_add_uint32_ptr(Object *obj, const char *name, ++ const uint32_t *v, Error **errp) ++{ ++ object_property_add(obj, name, "uint32", property_get_uint32_ptr, ++ NULL, NULL, (void *)v, errp); ++} ++ ++void object_property_add_uint64_ptr(Object *obj, const char *name, ++ const uint64_t *v, Error **errp) ++{ ++ object_property_add(obj, name, "uint64", property_get_uint64_ptr, ++ NULL, NULL, (void *)v, errp); ++} ++ + static void object_instance_init(Object *obj) + { + object_property_add_str(obj, "type", qdev_get_type, NULL, NULL); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qom-cleanup-struct-Error-references.patch b/SOURCES/kvm-qom-cleanup-struct-Error-references.patch new file mode 100644 index 0000000..4d14555 --- /dev/null +++ b/SOURCES/kvm-qom-cleanup-struct-Error-references.patch @@ -0,0 +1,234 @@ +From d8f12c525de1b28b9505d38842b5dece8cbcd61a Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:50 +0100 +Subject: [PATCH 24/56] qom: cleanup struct Error references + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-25-git-send-email-mst@redhat.com> +Patchwork-id: 56330 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 24/57] qom: cleanup struct Error references +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +now that a typedef for struct Error is available, +use it in qom/object.h to match coding style rules. + +Reviewed-by: Paolo Bonzini +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit e82df24873970742778e4a960f059ba9f8b1b2a7) +--- + include/qom/object.h | 50 +++++++++++++++++++++++++------------------------- + 1 file changed, 25 insertions(+), 25 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/qom/object.h | 50 +++++++++++++++++++++++++------------------------- + 1 file changed, 25 insertions(+), 25 deletions(-) + +diff --git a/include/qom/object.h b/include/qom/object.h +index c37f3ca..dbe1413 100644 +--- a/include/qom/object.h ++++ b/include/qom/object.h +@@ -301,7 +301,7 @@ typedef void (ObjectPropertyAccessor)(Object *obj, + struct Visitor *v, + void *opaque, + const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * ObjectPropertyRelease: +@@ -785,9 +785,9 @@ void object_property_add(Object *obj, const char *name, const char *type, + ObjectPropertyAccessor *get, + ObjectPropertyAccessor *set, + ObjectPropertyRelease *release, +- void *opaque, struct Error **errp); ++ void *opaque, Error **errp); + +-void object_property_del(Object *obj, const char *name, struct Error **errp); ++void object_property_del(Object *obj, const char *name, Error **errp); + + /** + * object_property_find: +@@ -798,7 +798,7 @@ void object_property_del(Object *obj, const char *name, struct Error **errp); + * Look up a property for an object and return its #ObjectProperty if found. + */ + ObjectProperty *object_property_find(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + void object_unparent(Object *obj); + +@@ -813,7 +813,7 @@ void object_unparent(Object *obj); + * Reads a property from a object. + */ + void object_property_get(Object *obj, struct Visitor *v, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_set_str: +@@ -824,7 +824,7 @@ void object_property_get(Object *obj, struct Visitor *v, const char *name, + * Writes a string value to a property. + */ + void object_property_set_str(Object *obj, const char *value, +- const char *name, struct Error **errp); ++ const char *name, Error **errp); + + /** + * object_property_get_str: +@@ -837,7 +837,7 @@ void object_property_set_str(Object *obj, const char *value, + * The caller should free the string. + */ + char *object_property_get_str(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_set_link: +@@ -848,7 +848,7 @@ char *object_property_get_str(Object *obj, const char *name, + * Writes an object's canonical path to a property. + */ + void object_property_set_link(Object *obj, Object *value, +- const char *name, struct Error **errp); ++ const char *name, Error **errp); + + /** + * object_property_get_link: +@@ -861,7 +861,7 @@ void object_property_set_link(Object *obj, Object *value, + * string or not a valid object path). + */ + Object *object_property_get_link(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_set_bool: +@@ -872,7 +872,7 @@ Object *object_property_get_link(Object *obj, const char *name, + * Writes a bool value to a property. + */ + void object_property_set_bool(Object *obj, bool value, +- const char *name, struct Error **errp); ++ const char *name, Error **errp); + + /** + * object_property_get_bool: +@@ -884,7 +884,7 @@ void object_property_set_bool(Object *obj, bool value, + * an error occurs (including when the property value is not a bool). + */ + bool object_property_get_bool(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_set_int: +@@ -895,7 +895,7 @@ bool object_property_get_bool(Object *obj, const char *name, + * Writes an integer value to a property. + */ + void object_property_set_int(Object *obj, int64_t value, +- const char *name, struct Error **errp); ++ const char *name, Error **errp); + + /** + * object_property_get_int: +@@ -907,7 +907,7 @@ void object_property_set_int(Object *obj, int64_t value, + * an error occurs (including when the property value is not an integer). + */ + int64_t object_property_get_int(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_set: +@@ -921,7 +921,7 @@ int64_t object_property_get_int(Object *obj, const char *name, + * Writes a property to a object. + */ + void object_property_set(Object *obj, struct Visitor *v, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_parse: +@@ -933,7 +933,7 @@ void object_property_set(Object *obj, struct Visitor *v, const char *name, + * Parses a string and writes the result into a property of an object. + */ + void object_property_parse(Object *obj, const char *string, +- const char *name, struct Error **errp); ++ const char *name, Error **errp); + + /** + * object_property_print: +@@ -945,7 +945,7 @@ void object_property_parse(Object *obj, const char *string, + * caller shall free the string. + */ + char *object_property_print(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_get_type: +@@ -956,7 +956,7 @@ char *object_property_print(Object *obj, const char *name, + * Returns: The type name of the property. + */ + const char *object_property_get_type(Object *obj, const char *name, +- struct Error **errp); ++ Error **errp); + + /** + * object_get_root: +@@ -1049,7 +1049,7 @@ Object *object_resolve_path_component(Object *parent, const gchar *part); + * The child object itself can be retrieved using object_property_get_link(). + */ + void object_property_add_child(Object *obj, const char *name, +- Object *child, struct Error **errp); ++ Object *child, Error **errp); + + /** + * object_property_add_link: +@@ -1072,7 +1072,7 @@ void object_property_add_child(Object *obj, const char *name, + */ + void object_property_add_link(Object *obj, const char *name, + const char *type, Object **child, +- struct Error **errp); ++ Error **errp); + + /** + * object_property_add_str: +@@ -1087,9 +1087,9 @@ void object_property_add_link(Object *obj, const char *name, + * property of type 'string'. + */ + void object_property_add_str(Object *obj, const char *name, +- char *(*get)(Object *, struct Error **), +- void (*set)(Object *, const char *, struct Error **), +- struct Error **errp); ++ char *(*get)(Object *, Error **), ++ void (*set)(Object *, const char *, Error **), ++ Error **errp); + + /** + * object_property_add_bool: +@@ -1103,9 +1103,9 @@ void object_property_add_str(Object *obj, const char *name, + * property of type 'bool'. + */ + void object_property_add_bool(Object *obj, const char *name, +- bool (*get)(Object *, struct Error **), +- void (*set)(Object *, bool, struct Error **), +- struct Error **errp); ++ bool (*get)(Object *, Error **), ++ void (*set)(Object *, bool, Error **), ++ Error **errp); + + /** + * object_child_foreach: +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qtest-Don-t-reset-on-qtest-chardev-connect.patch b/SOURCES/kvm-qtest-Don-t-reset-on-qtest-chardev-connect.patch new file mode 100644 index 0000000..ab8b8d2 --- /dev/null +++ b/SOURCES/kvm-qtest-Don-t-reset-on-qtest-chardev-connect.patch @@ -0,0 +1,59 @@ +From a90030205cdd1c640537ddd5353a900291243746 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:19 +0200 +Subject: [PATCH 09/14] qtest: Don't reset on qtest chardev connect + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-10-git-send-email-armbru@redhat.com> +Patchwork-id: 54565 +O-Subject: [PATCH 7.0 qemu-kvm 09/10] qtest: Don't reset on qtest chardev connect +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +libqtest's qtest_init() connecting to the qtest socket triggers reset. +This was coded in the hope we could use the same QEMU process for +multiple tests that way. Never used. Injects an extra reset even +when it's not used, and that can mess up tests such as the one of +-boot once I'm about to add. Drop it. + +Signed-off-by: Markus Armbruster +Message-id: 1372254743-15808-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit ba646ff6a3149f416424122c628e798be4957997) +--- + qtest.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + qtest.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/qtest.c b/qtest.c +index 07a9612..74f1842 100644 +--- a/qtest.c ++++ b/qtest.c +@@ -472,7 +472,12 @@ static void qtest_event(void *opaque, int event) + + switch (event) { + case CHR_EVENT_OPENED: +- qemu_system_reset(false); ++ /* ++ * We used to call qemu_system_reset() here, hoping we could ++ * use the same process for multiple tests that way. Never ++ * used. Injects an extra reset even when it's not used, and ++ * that can mess up tests, e.g. -boot once. ++ */ + for (i = 0; i < ARRAY_SIZE(irq_levels); i++) { + irq_levels[i] = 0; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qtest-Use-display-none-by-default.patch b/SOURCES/kvm-qtest-Use-display-none-by-default.patch new file mode 100644 index 0000000..ae48a7d --- /dev/null +++ b/SOURCES/kvm-qtest-Use-display-none-by-default.patch @@ -0,0 +1,181 @@ +From 3f51f5d57b5a4c5de484db56175c58e1825d6aa9 Mon Sep 17 00:00:00 2001 +Message-Id: <3f51f5d57b5a4c5de484db56175c58e1825d6aa9.1387288155.git.minovotn@redhat.com> +In-Reply-To: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +References: <527da6c2ce2c09d0183aa8595fc95f136f61b6df.1387288155.git.minovotn@redhat.com> +From: Stefan Hajnoczi +Date: Thu, 12 Dec 2013 16:21:28 +0100 +Subject: [PATCH 8/8] qtest: Use -display none by default +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Stefan Hajnoczi +Message-id: <1386865288-1575-9-git-send-email-stefanha@redhat.com> +Patchwork-id: 56262 +O-Subject: [RHEL7 qemu-kvm PATCH 8/8] qtest: Use -display none by default +Bugzilla: 1003773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster + +From: Andreas Färber + +This avoids each test needing to add it to suppress windows popping up. + +[Commit 7ceeedd016facf8d58e14a0d1417fa7225d71072 ("blockdev-test: add +test case for drive_add duplicate IDs") and commit +43cd209803d6cffb1e1a028c9ff2fd0ff4fce954 ("qdev-monitor-test: add +device_add leak test cases") added qtest tests without specifying +-display none. + +As a result, "make check" now tries to use graphics (GTK or SDL). Since +graphics are not used by the test and inappropriate for headless "make +check" runs, add the missing -display none. + +This fixes "make check" in the QEMU buildbot. +-- Stefan] + +Signed-off-by: Andreas Färber +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 2ad645d2854746b55ddfd1d8e951f689cca5d78f) +Signed-off-by: Stefan Hajnoczi + +Conflicts: + tests/boot-order-test.c + tests/endianness-test.c + tests/qom-test.c + +qom-test.c and endianness-test.c do not exist in RHEL. + +boot-order-test.c is slightly older but the conflict is simple to +resolve. +--- + tests/boot-order-test.c | 2 +- + tests/fw_cfg-test.c | 3 +-- + tests/hd-geo-test.c | 2 +- + tests/i440fx-test.c | 2 +- + tests/libqtest.c | 1 + + tests/m48t59-test.c | 2 +- + tests/rtc-test.c | 2 +- + tests/tmp105-test.c | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/boot-order-test.c | 2 +- + tests/fw_cfg-test.c | 3 +-- + tests/hd-geo-test.c | 2 +- + tests/i440fx-test.c | 2 +- + tests/libqtest.c | 1 + + tests/m48t59-test.c | 2 +- + tests/rtc-test.c | 2 +- + tests/tmp105-test.c | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/tests/boot-order-test.c b/tests/boot-order-test.c +index a35e9f7..f386600 100644 +--- a/tests/boot-order-test.c ++++ b/tests/boot-order-test.c +@@ -32,7 +32,7 @@ static void test_pc_with_args(const char *test_args, + uint8_t boot1, uint8_t boot2, + uint8_t reboot1, uint8_t reboot2) + { +- char *args = g_strdup_printf("-nodefaults -display none %s", test_args); ++ char *args = g_strdup_printf("-nodefaults %s", test_args); + + qtest_start(args); + test_pc_cmos(boot1, boot2); +diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c +index c284c4d..3428dca 100644 +--- a/tests/fw_cfg-test.c ++++ b/tests/fw_cfg-test.c +@@ -126,8 +126,7 @@ int main(int argc, char **argv) + g_test_add_func("/fw_cfg/numa", test_fw_cfg_numa); + g_test_add_func("/fw_cfg/boot_menu", test_fw_cfg_boot_menu); + +- cmdline = g_strdup_printf("-display none " +- "-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8 "); ++ cmdline = g_strdup_printf("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8 "); + s = qtest_start(cmdline); + g_free(cmdline); + +diff --git a/tests/hd-geo-test.c b/tests/hd-geo-test.c +index b72042e..c84d1e7 100644 +--- a/tests/hd-geo-test.c ++++ b/tests/hd-geo-test.c +@@ -171,7 +171,7 @@ static int setup_common(char *argv[], int argv_sz) + { + memset(cur_ide, 0, sizeof(cur_ide)); + return append_arg(0, argv, argv_sz, +- g_strdup("-nodefaults -display none")); ++ g_strdup("-nodefaults")); + } + + static void setup_mbr(int img_idx, MBRcontents mbr) +diff --git a/tests/i440fx-test.c b/tests/i440fx-test.c +index 08ce820..65c786c 100644 +--- a/tests/i440fx-test.c ++++ b/tests/i440fx-test.c +@@ -265,7 +265,7 @@ int main(int argc, char **argv) + + data.num_cpus = 1; + +- cmdline = g_strdup_printf("-display none -smp %d", data.num_cpus); ++ cmdline = g_strdup_printf("-smp %d", data.num_cpus); + s = qtest_start(cmdline); + g_free(cmdline); + +diff --git a/tests/libqtest.c b/tests/libqtest.c +index 83424c3..359d571 100644 +--- a/tests/libqtest.c ++++ b/tests/libqtest.c +@@ -135,6 +135,7 @@ QTestState *qtest_init(const char *extra_args) + "-qmp unix:%s,nowait " + "-pidfile %s " + "-machine accel=qtest " ++ "-display none " + "%s", qemu_binary, s->socket_path, + s->qmp_socket_path, pid_file, + extra_args ?: ""); +diff --git a/tests/m48t59-test.c b/tests/m48t59-test.c +index 4081a5f..6abc4c8 100644 +--- a/tests/m48t59-test.c ++++ b/tests/m48t59-test.c +@@ -249,7 +249,7 @@ int main(int argc, char **argv) + + g_test_init(&argc, &argv, NULL); + +- s = qtest_start("-display none -rtc clock=vm"); ++ s = qtest_start("-rtc clock=vm"); + + qtest_add_func("/rtc/bcd/check-time", bcd_check_time); + qtest_add_func("/rtc/fuzz-registers", fuzz_registers); +diff --git a/tests/rtc-test.c b/tests/rtc-test.c +index 3395d7f..f1b123f 100644 +--- a/tests/rtc-test.c ++++ b/tests/rtc-test.c +@@ -552,7 +552,7 @@ int main(int argc, char **argv) + + g_test_init(&argc, &argv, NULL); + +- s = qtest_start("-display none -rtc clock=vm"); ++ s = qtest_start("-rtc clock=vm"); + qtest_irq_intercept_in(s, "ioapic"); + + qtest_add_func("/rtc/check-time/bcd", bcd_check_time); +diff --git a/tests/tmp105-test.c b/tests/tmp105-test.c +index fecd6dc..5ac48e2 100644 +--- a/tests/tmp105-test.c ++++ b/tests/tmp105-test.c +@@ -59,7 +59,7 @@ int main(int argc, char **argv) + + g_test_init(&argc, &argv, NULL); + +- s = qtest_start("-display none -machine n800"); ++ s = qtest_start("-machine n800"); + i2c = omap_i2c_create(OMAP2_I2C_1_BASE); + addr = N8X0_ADDR; + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-qtest-ide-test-disable-flush-test.patch b/SOURCES/kvm-qtest-ide-test-disable-flush-test.patch new file mode 100644 index 0000000..200ab2e --- /dev/null +++ b/SOURCES/kvm-qtest-ide-test-disable-flush-test.patch @@ -0,0 +1,86 @@ +From 228e49fabffa644ab7a6a03e98205f293115dc89 Mon Sep 17 00:00:00 2001 +Message-Id: <228e49fabffa644ab7a6a03e98205f293115dc89.1445029944.git.jen@redhat.com> +From: John Snow +Date: Fri, 16 Oct 2015 16:26:24 -0500 +Subject: [CHANGE] qtest/ide-test: disable flush-test +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: John Snow +Message-id: <1445012784-22604-2-git-send-email-jsnow@redhat.com> +Patchwork-id: 68169 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/1] qtest/ide-test: disable flush-test +Bugzilla: 1270341 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Wei Huang +RH-Acked-by: Jeff Nelson + +One of the tests downstream causes a race that can result in build +failures. For 7.3, we intend to fix the test properly, but for 7.2, +we disable the test as a workaround. + +Signed-off-by: John Snow +Signed-off-by: Jeff E. Nelson +--- + tests/ide-test.c | 38 -------------------------------------- + 1 file changed, 38 deletions(-) + +diff --git a/tests/ide-test.c b/tests/ide-test.c +index 51f9239..43b7fd6 100644 +--- a/tests/ide-test.c ++++ b/tests/ide-test.c +@@ -425,43 +425,6 @@ static void test_identify(void) + ide_test_quit(); + } + +-static void test_flush(void) +-{ +- uint8_t data; +- +- ide_test_start( +- "-vnc none " +- "-drive file=blkdebug::%s,if=ide,cache=writeback", +- tmp_path); +- +- /* Delay the completion of the flush request until we explicitly do it */ +- qmp("{'execute':'human-monitor-command', 'arguments': { " +- "'command-line': 'qemu-io ide0-hd0 \"break flush_to_os A\"'} }"); +- +- /* FLUSH CACHE command on device 0*/ +- outb(IDE_BASE + reg_device, 0); +- outb(IDE_BASE + reg_command, CMD_FLUSH_CACHE); +- +- /* Check status while request is in flight*/ +- data = inb(IDE_BASE + reg_status); +- assert_bit_set(data, BSY | DRDY); +- assert_bit_clear(data, DF | ERR | DRQ); +- +- /* Complete the command */ +- qmp("{'execute':'human-monitor-command', 'arguments': { " +- "'command-line': 'qemu-io ide0-hd0 \"resume A\"'} }"); +- +- /* Check registers */ +- data = inb(IDE_BASE + reg_device); +- g_assert_cmpint(data & DEV, ==, 0); +- +- data = inb(IDE_BASE + reg_status); +- assert_bit_set(data, DRDY); +- assert_bit_clear(data, BSY | DF | ERR | DRQ); +- +- ide_test_quit(); +-} +- + static void test_flush_nodev(void) + { + ide_test_start(""); +@@ -505,7 +468,6 @@ int main(int argc, char **argv) + qtest_add_func("/ide/bmdma/long_prdt", test_bmdma_long_prdt); + qtest_add_func("/ide/bmdma/teardown", test_bmdma_teardown); + +- qtest_add_func("/ide/flush", test_flush); + qtest_add_func("/ide/flush_nodev", test_flush_nodev); + + ret = g_test_run(); +-- +2.4.3 + diff --git a/SOURCES/kvm-qxl-Fix-new-function-name-for-spice-server-library.patch b/SOURCES/kvm-qxl-Fix-new-function-name-for-spice-server-library.patch new file mode 100644 index 0000000..418fa4e --- /dev/null +++ b/SOURCES/kvm-qxl-Fix-new-function-name-for-spice-server-library.patch @@ -0,0 +1,57 @@ +From ac053d6013f7fab73f66db60462c388bea21b714 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Gerd Hoffmann +Date: Fri, 13 May 2016 16:09:29 -0400 +Subject: [CHANGE 2/3] qxl: Fix new function name for spice-server library +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Gerd Hoffmann +Message-id: <1463155769-32352-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 70403 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 2/2] qxl: Fix new function name for spice-server library +Bugzilla: 1283198 +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Thomas Huth + +From: Frediano Ziglio + +The new spice-server function to limit the number of monitors (0.12.6) +changed while development from spice_qxl_set_monitors_config_limit to +spice_qxl_max_monitors (accepted upstream). +By mistake I post patch with former name. +This patch fix the function name. + +Signed-off-by: Frediano Ziglio +Acked-by: Christophe Fergeau +Acked-by: Martin Kletzander +Signed-off-by: Marc-André Lureau +(cherry picked from commit a52b2cbf218d52f9e357961acb271a98a2bdff71) +Signed-off-by: Jeff E. Nelson +--- + hw/display/qxl.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 1f6a303..748dfce 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -268,8 +268,7 @@ static void qxl_spice_monitors_config_async(PCIQXLDevice *qxl, int replay) + } else { + #if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ + if (qxl->max_outputs) { +- spice_qxl_set_monitors_config_limit(&qxl->ssd.qxl, +- qxl->max_outputs); ++ spice_qxl_set_max_monitors(&qxl->ssd.qxl, qxl->max_outputs); + } + #endif + qxl->guest_monitors_config = qxl->ram->monitors_config; +-- +2.5.5 + diff --git a/SOURCES/kvm-qxl-Only-emit-QXL_INTERRUPT_CLIENT_MONITORS_CONFIG-o.patch b/SOURCES/kvm-qxl-Only-emit-QXL_INTERRUPT_CLIENT_MONITORS_CONFIG-o.patch new file mode 100644 index 0000000..9794833 --- /dev/null +++ b/SOURCES/kvm-qxl-Only-emit-QXL_INTERRUPT_CLIENT_MONITORS_CONFIG-o.patch @@ -0,0 +1,125 @@ +From de84e9659aa6b91bd1a7c4fb30fde859882b9201 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Thu, 5 Jan 2017 23:58:10 +0100 +Subject: [PATCH 4/4] qxl: Only emit QXL_INTERRUPT_CLIENT_MONITORS_CONFIG on + config changes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20170105235810.27189-1-marcandre.lureau@redhat.com> +Patchwork-id: 73185 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] qxl: Only emit QXL_INTERRUPT_CLIENT_MONITORS_CONFIG on config changes +Bugzilla: 1342489 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Christophe Fergeau +RH-Acked-by: Miroslav Rezanina + +From: Christophe Fergeau + +Currently if the client keeps sending the same monitor config to +QEMU/spice-server, QEMU will always raise +a QXL_INTERRUPT_CLIENT_MONITORS_CONFIG regardless of whether there was a +change or not. +Guest-side (with fedora 25), the kernel QXL KMS driver will also forward the +event to user-space without checking if there were actual changes. +Next in line are gnome-shell/mutter (on a default f25 install), which +will try to reconfigure everything without checking if there is anything +to do. +Where this gets ugly is that when applying the resolution changes, +gnome-shell/mutter will call drmModeRmFB, drmModeAddFB, and +drmModeSetCrtc, which will cause the primary surface to be destroyed and +recreated by the QXL KMS driver. This in turn will cause the client to +resend a client monitors config message, which will cause QEMU to reemit +an interrupt with an unchanged monitors configuration, ... +This causes https://bugzilla.redhat.com/show_bug.cgi?id=1266484 + +This commit makes sure that we only emit +QXL_INTERRUPT_CLIENT_MONITORS_CONFIG when there are actual configuration +changes the guest should act on. + +Signed-off-by: Christophe Fergeau +Message-id: 20161028144840.18326-1-cfergeau@redhat.com +Signed-off-by: Gerd Hoffmann + +(cherry picked from commit 6c7565028c272c4c6f2a83c3a90b044eeaf2804a) + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 37 ++++++++++++++++++++++++++++++++++++- + 1 file changed, 36 insertions(+), 1 deletion(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index f762439..c76c237 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -989,6 +989,34 @@ static uint32_t qxl_crc32(const uint8_t *p, unsigned len) + return crc32(0xffffffff, p, len) ^ 0xffffffff; + } + ++static bool qxl_rom_monitors_config_changed(QXLRom *rom, ++ VDAgentMonitorsConfig *monitors_config, ++ unsigned int max_outputs) ++{ ++ int i; ++ unsigned int monitors_count; ++ ++ monitors_count = MIN(monitors_config->num_of_monitors, max_outputs); ++ ++ if (rom->client_monitors_config.count != monitors_count) { ++ return true; ++ } ++ ++ for (i = 0 ; i < rom->client_monitors_config.count ; ++i) { ++ VDAgentMonConfig *monitor = &monitors_config->monitors[i]; ++ QXLURect *rect = &rom->client_monitors_config.heads[i]; ++ /* monitor->depth ignored */ ++ if ((rect->left != monitor->x) || ++ (rect->top != monitor->y) || ++ (rect->right != monitor->x + monitor->width) || ++ (rect->bottom != monitor->y + monitor->height)) { ++ return true; ++ } ++ } ++ ++ return false; ++} ++ + /* called from main context only */ + static int interface_client_monitors_config(QXLInstance *sin, + VDAgentMonitorsConfig *monitors_config) +@@ -997,6 +1025,7 @@ static int interface_client_monitors_config(QXLInstance *sin, + QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar); + int i; + unsigned max_outputs = ARRAY_SIZE(rom->client_monitors_config.heads); ++ bool config_changed = false; + + if (qxl->revision < 4) { + trace_qxl_client_monitors_config_unsupported_by_device(qxl->id, +@@ -1027,6 +1056,10 @@ static int interface_client_monitors_config(QXLInstance *sin, + } + #endif + ++ config_changed = qxl_rom_monitors_config_changed(rom, ++ monitors_config, ++ max_outputs); ++ + memset(&rom->client_monitors_config, 0, + sizeof(rom->client_monitors_config)); + rom->client_monitors_config.count = monitors_config->num_of_monitors; +@@ -1056,7 +1089,9 @@ static int interface_client_monitors_config(QXLInstance *sin, + trace_qxl_interrupt_client_monitors_config(qxl->id, + rom->client_monitors_config.count, + rom->client_monitors_config.heads); +- qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG); ++ if (config_changed) { ++ qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG); ++ } + return 1; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-add-migration-blocker-to-avoid-pre-save-assert.patch b/SOURCES/kvm-qxl-add-migration-blocker-to-avoid-pre-save-assert.patch new file mode 100644 index 0000000..4b16f21 --- /dev/null +++ b/SOURCES/kvm-qxl-add-migration-blocker-to-avoid-pre-save-assert.patch @@ -0,0 +1,99 @@ +From f84d8a785cd2309325476ae5e6a60170dac7c75a Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 23 Jan 2018 18:09:33 +0100 +Subject: [PATCH 3/3] qxl: add migration blocker to avoid pre-save assert +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180123180933.26008-2-dgilbert@redhat.com> +Patchwork-id: 78698 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/1] qxl: add migration blocker to avoid pre-save assert +Bugzilla: 1536883 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Laurent Vivier +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Cc: 1635339@bugs.launchpad.net +Signed-off-by: Gerd Hoffmann +Reviewed-by: Marc-André Lureau +Message-id: 20170410113131.2585-1-kraxel@redhat.com +(cherry picked from commit 86dbcdd9c7590d06db89ca256c5eaf0b4aba8858) + dgilbert: Fixup change in migrate_add_blocker parameters + +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 27 +++++++++++++++++++++++++++ + hw/display/qxl.h | 1 + + 2 files changed, 28 insertions(+) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 0a755df..0625a76 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -26,6 +26,7 @@ + #include "qemu/atomic.h" + #include "monitor/monitor.h" + #include "sysemu/sysemu.h" ++#include "migration/migration.h" + #include "trace.h" + + #include "qxl.h" +@@ -637,6 +638,26 @@ static int interface_get_command(QXLInstance *sin, struct QXLCommandExt *ext) + qxl->guest_primary.commands++; + qxl_track_command(qxl, ext); + qxl_log_command(qxl, "cmd", ext); ++ { ++ /* ++ * Windows 8 drivers place qxl commands in the vram ++ * (instead of the ram) bar. We can't live migrate such a ++ * guest, so add a migration blocker in case we detect ++ * this, to avoid triggering the assert in pre_save(). ++ * ++ * https://cgit.freedesktop.org/spice/win32/qxl-wddm-dod/commit/?id=f6e099db39e7d0787f294d5fd0dce328b5210faa ++ */ ++ void *msg = qxl_phys2virt(qxl, ext->cmd.data, ext->group_id); ++ if (msg != NULL && ( ++ msg < (void *)qxl->vga.vram_ptr || ++ msg > ((void *)qxl->vga.vram_ptr + qxl->vga.vram_size))) { ++ if (!qxl->migration_blocker) { ++ error_setg(&qxl->migration_blocker, ++ "qxl: guest bug: command not in ram bar"); ++ migrate_add_blocker(qxl->migration_blocker); ++ } ++ } ++ } + trace_qxl_ring_command_get(qxl->id, qxl_mode_to_string(qxl->mode)); + return true; + default: +@@ -1215,6 +1236,12 @@ static void qxl_hard_reset(PCIQXLDevice *d, int loadvm) + qemu_spice_create_host_memslot(&d->ssd); + qxl_soft_reset(d); + ++ if (d->migration_blocker) { ++ migrate_del_blocker(d->migration_blocker); ++ error_free(d->migration_blocker); ++ d->migration_blocker = NULL; ++ } ++ + if (startstop) { + qemu_spice_display_start(); + } +diff --git a/hw/display/qxl.h b/hw/display/qxl.h +index f3f51e2..11cf2aa 100644 +--- a/hw/display/qxl.h ++++ b/hw/display/qxl.h +@@ -36,6 +36,7 @@ typedef struct PCIQXLDevice { + uint32_t cmdlog; + + uint32_t guest_bug; ++ Error *migration_blocker; + + enum qxl_mode mode; + uint32_t cmdflags; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-add-sanity-check.patch b/SOURCES/kvm-qxl-add-sanity-check.patch new file mode 100644 index 0000000..010e307 --- /dev/null +++ b/SOURCES/kvm-qxl-add-sanity-check.patch @@ -0,0 +1,55 @@ +From c5e26182fedef98b73f50e9fac3ae09696e59880 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 26 Feb 2014 11:44:47 +0100 +Subject: [PATCH 2/6] qxl: add sanity check + +RH-Author: Gerd Hoffmann +Message-id: <1393415087-3776-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 57815 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] qxl: add sanity check +Bugzilla: 751937 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Paolo Bonzini + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +(cherry picked from commit 9c70434f825fd0d2e89d1aa0f872159378d0aab3) +--- + hw/display/qxl.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 4381d97..4fe4f1b 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1417,7 +1417,7 @@ static int qxl_destroy_primary(PCIQXLDevice *d, qxl_async_io async) + return 1; + } + +-static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) ++static void qxl_set_mode(PCIQXLDevice *d, unsigned int modenr, int loadvm) + { + pcibus_t start = d->pci.io_regions[QXL_RAM_RANGE_INDEX].addr; + pcibus_t end = d->pci.io_regions[QXL_RAM_RANGE_INDEX].size + start; +@@ -1427,6 +1427,12 @@ static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) + .mem_start = start, + .mem_end = end + }; ++ ++ if (modenr >= d->modes->n_modes) { ++ qxl_set_guest_bug(d, "mode number out of range"); ++ return; ++ } ++ + QXLSurfaceCreate surface = { + .width = mode->x_res, + .height = mode->y_res, +-- +1.7.1 + diff --git a/SOURCES/kvm-qxl-allow-to-specify-head-limit-to-qxl-driver.patch b/SOURCES/kvm-qxl-allow-to-specify-head-limit-to-qxl-driver.patch new file mode 100644 index 0000000..bc50ebd --- /dev/null +++ b/SOURCES/kvm-qxl-allow-to-specify-head-limit-to-qxl-driver.patch @@ -0,0 +1,120 @@ +From c7936395ecf322b3de37662c7c6b772e36866cc7 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Gerd Hoffmann +Date: Fri, 13 May 2016 16:09:28 -0400 +Subject: [CHANGE 1/3] qxl: allow to specify head limit to qxl driver +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Gerd Hoffmann +Message-id: <1463155769-32352-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 70404 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/2] qxl: allow to specify head limit to qxl driver +Bugzilla: 1283198 +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Thomas Huth + +From: Frediano Ziglio + +This patch allow to limit number of heads using qxl driver. By default +qxl driver is not limited on any kind on head use so can decide to use +as much heads. + +libvirt has this as a video card parameter (actually set to 1 but not +used). This parameter will allow to limit setting a use can do (which +could be confusing). + +Signed-off-by: Frediano Ziglio +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 567161fdd47aeb6987e700702f6bbfef04ae0236) +Signed-off-by: Jeff E. Nelson +--- + hw/display/qxl.c | 26 +++++++++++++++++++++----- + hw/display/qxl.h | 3 +++ + 2 files changed, 24 insertions(+), 5 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index f11210c..1f6a303 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -266,6 +266,12 @@ static void qxl_spice_monitors_config_async(PCIQXLDevice *qxl, int replay) + QXL_COOKIE_TYPE_POST_LOAD_MONITORS_CONFIG, + 0)); + } else { ++#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ ++ if (qxl->max_outputs) { ++ spice_qxl_set_monitors_config_limit(&qxl->ssd.qxl, ++ qxl->max_outputs); ++ } ++#endif + qxl->guest_monitors_config = qxl->ram->monitors_config; + spice_qxl_monitors_config_async(&qxl->ssd.qxl, + qxl->ram->monitors_config, +@@ -991,6 +997,7 @@ static int interface_client_monitors_config(QXLInstance *sin, + PCIQXLDevice *qxl = container_of(sin, PCIQXLDevice, ssd.qxl); + QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar); + int i; ++ unsigned max_outputs = ARRAY_SIZE(rom->client_monitors_config.heads); + + if (qxl->revision < 4) { + trace_qxl_client_monitors_config_unsupported_by_device(qxl->id, +@@ -1013,17 +1020,23 @@ static int interface_client_monitors_config(QXLInstance *sin, + if (!monitors_config) { + return 1; + } ++ ++#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ ++ /* limit number of outputs based on setting limit */ ++ if (qxl->max_outputs && qxl->max_outputs <= max_outputs) { ++ max_outputs = qxl->max_outputs; ++ } ++#endif ++ + memset(&rom->client_monitors_config, 0, + sizeof(rom->client_monitors_config)); + rom->client_monitors_config.count = monitors_config->num_of_monitors; + /* monitors_config->flags ignored */ +- if (rom->client_monitors_config.count >= +- ARRAY_SIZE(rom->client_monitors_config.heads)) { ++ if (rom->client_monitors_config.count >= max_outputs) { + trace_qxl_client_monitors_config_capped(qxl->id, + monitors_config->num_of_monitors, +- ARRAY_SIZE(rom->client_monitors_config.heads)); +- rom->client_monitors_config.count = +- ARRAY_SIZE(rom->client_monitors_config.heads); ++ max_outputs); ++ rom->client_monitors_config.count = max_outputs; + } + for (i = 0 ; i < rom->client_monitors_config.count ; ++i) { + VDAgentMonConfig *monitor = &monitors_config->monitors[i]; +@@ -2294,6 +2307,9 @@ static Property qxl_properties[] = { + DEFINE_PROP_UINT32("vram64_size_mb", PCIQXLDevice, vram_size_mb, -1), + DEFINE_PROP_UINT32("vgamem_mb", PCIQXLDevice, vgamem_size_mb, 16), + DEFINE_PROP_INT32("surfaces", PCIQXLDevice, ssd.num_surfaces, 1024), ++#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ ++ DEFINE_PROP_UINT16("max_outputs", PCIQXLDevice, max_outputs, 0), ++#endif + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/hw/display/qxl.h b/hw/display/qxl.h +index 5da33e2..5247ce9 100644 +--- a/hw/display/qxl.h ++++ b/hw/display/qxl.h +@@ -95,6 +95,9 @@ typedef struct PCIQXLDevice { + QXLModes *modes; + uint32_t rom_size; + MemoryRegion rom_bar; ++#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */ ++ uint16_t max_outputs; ++#endif + + /* vram pci bar */ + uint32_t vram_size; +-- +2.5.5 + diff --git a/SOURCES/kvm-qxl-check-release-info-object.patch b/SOURCES/kvm-qxl-check-release-info-object.patch new file mode 100644 index 0000000..3fa6998 --- /dev/null +++ b/SOURCES/kvm-qxl-check-release-info-object.patch @@ -0,0 +1,50 @@ +From 1fd91c62715b21e480a8c25d05452acb633ab11c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= +Date: Wed, 19 Jun 2019 16:03:38 +0200 +Subject: [PATCH 1/4] qxl: check release info object +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Philippe Mathieu-Daudé +Message-id: <20190619160338.15430-2-philmd@redhat.com> +Patchwork-id: 88733 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 1/1] qxl: check release info object +Bugzilla: 1712703 +RH-Acked-by: Christophe de Dinechin +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Laszlo Ersek + +From: Prasad J Pandit + +When releasing spice resources in release_resource() routine, +if release info object 'ext.info' is null, it leads to null +pointer dereference. Add check to avoid it. + +Reported-by: Bugs SysSec +Signed-off-by: Prasad J Pandit +Message-id: 20190425063534.32747-1-ppandit@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit d52680fc932efb8a2f334cc6993e705ed1e31e99) +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 0625a76..d493101 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -735,6 +735,9 @@ static void interface_release_resource(QXLInstance *sin, + QXLReleaseRing *ring; + uint64_t *item, id; + ++ if (!ext.info) { ++ return; ++ } + if (ext.group_id == MEMSLOT_GROUP_HOST) { + /* host group -> vga mode update request */ + qemu_spice_destroy_update(&qxl->ssd, (void *)(intptr_t)ext.info->id); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-factor-out-qxl_get_check_slot_offset.patch b/SOURCES/kvm-qxl-factor-out-qxl_get_check_slot_offset.patch new file mode 100644 index 0000000..7ba85fe --- /dev/null +++ b/SOURCES/kvm-qxl-factor-out-qxl_get_check_slot_offset.patch @@ -0,0 +1,108 @@ +From 24a604e857d2797c3da9852bcbea75f2f9e6961c Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 22 Jul 2016 09:34:38 +0200 +Subject: [PATCH 1/4] qxl: factor out qxl_get_check_slot_offset + +RH-Author: Gerd Hoffmann +Message-id: <1469180081-28522-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 71317 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 1/4] qxl: factor out qxl_get_check_slot_offset +Bugzilla: 1355730 +RH-Acked-by: Laurent Vivier +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +New helper function which translates a qxl physical address into +memory slot and offset. Also applies sanity checks. Factored out +from qxl_phys2virt. No functional change. + +Signed-off-by: Gerd Hoffmann +Message-id: 1466597244-5938-1-git-send-email-kraxel@redhat.com +(cherry picked from commit 726bdf653aca9b87e28c9a56dd94c4667ddfacbc) +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 59 ++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 38 insertions(+), 21 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 748dfce..5e1ecd8 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1326,36 +1326,53 @@ static void qxl_reset_surfaces(PCIQXLDevice *d) + } + + /* can be also called from spice server thread context */ +-void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id) ++static bool qxl_get_check_slot_offset(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, ++ uint32_t *s, uint64_t *o) + { + uint64_t phys = le64_to_cpu(pqxl); + uint32_t slot = (phys >> (64 - 8)) & 0xff; + uint64_t offset = phys & 0xffffffffffff; + +- switch (group_id) { +- case MEMSLOT_GROUP_HOST: +- return (void *)(intptr_t)offset; +- case MEMSLOT_GROUP_GUEST: +- if (slot >= NUM_MEMSLOTS) { +- qxl_set_guest_bug(qxl, "slot too large %d >= %d", slot, +- NUM_MEMSLOTS); +- return NULL; +- } +- if (!qxl->guest_slots[slot].active) { +- qxl_set_guest_bug(qxl, "inactive slot %d\n", slot); +- return NULL; +- } +- if (offset < qxl->guest_slots[slot].delta) { +- qxl_set_guest_bug(qxl, ++ if (slot >= NUM_MEMSLOTS) { ++ qxl_set_guest_bug(qxl, "slot too large %d >= %d", slot, ++ NUM_MEMSLOTS); ++ return false; ++ } ++ if (!qxl->guest_slots[slot].active) { ++ qxl_set_guest_bug(qxl, "inactive slot %d\n", slot); ++ return false; ++ } ++ if (offset < qxl->guest_slots[slot].delta) { ++ qxl_set_guest_bug(qxl, + "slot %d offset %"PRIu64" < delta %"PRIu64"\n", + slot, offset, qxl->guest_slots[slot].delta); +- return NULL; +- } +- offset -= qxl->guest_slots[slot].delta; +- if (offset > qxl->guest_slots[slot].size) { +- qxl_set_guest_bug(qxl, ++ return false; ++ } ++ offset -= qxl->guest_slots[slot].delta; ++ if (offset > qxl->guest_slots[slot].size) { ++ qxl_set_guest_bug(qxl, + "slot %d offset %"PRIu64" > size %"PRIu64"\n", + slot, offset, qxl->guest_slots[slot].size); ++ return false; ++ } ++ ++ *s = slot; ++ *o = offset; ++ return true; ++} ++ ++/* can be also called from spice server thread context */ ++void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id) ++{ ++ uint64_t offset; ++ uint32_t slot; ++ ++ switch (group_id) { ++ case MEMSLOT_GROUP_HOST: ++ offset = le64_to_cpu(pqxl) & 0xffffffffffff; ++ return (void *)(intptr_t)offset; ++ case MEMSLOT_GROUP_GUEST: ++ if (!qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset)) { + return NULL; + } + return qxl->guest_slots[slot].ptr + offset; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-fix-local-renderer.patch b/SOURCES/kvm-qxl-fix-local-renderer.patch new file mode 100644 index 0000000..e70c783 --- /dev/null +++ b/SOURCES/kvm-qxl-fix-local-renderer.patch @@ -0,0 +1,82 @@ +From 4a19f6aff24c38ede727026ee6695e561aef1366 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 12 Sep 2013 09:12:56 +0200 +Subject: [PATCH 01/11] qxl: fix local renderer + +RH-Author: Gerd Hoffmann +Message-id: <1378977176-19133-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 54333 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] qxl: fix local renderer +Bugzilla: 1005036 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Hans de Goede + +The local spice renderer assumes the primary surface is located at the +start of the "ram" bar. This used to be a requirement in qxl hardware +revision 1. In revision 2+ this is relaxed. Nevertheless guest drivers +continued to use the traditional location, for historical and backward +compatibility reasons. The qxl kms driver doesn't though as it depends +on qxl revision 4+ anyway. + +Result is that local rendering is hosed for recent linux guests, you'll +get pixel garbage with non-spice ui (gtk, sdl, vnc) and when doing +screendumps. Fix that by doing a proper mapping of the guest-specified +memory location. + +https://bugzilla.redhat.com/show_bug.cgi?id=948717 + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c58c7b959b93b864a27fd6b3646ee1465ab8832b) +--- + hw/display/qxl-render.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl-render.c | 15 ++++++++++----- + 1 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/hw/display/qxl-render.c b/hw/display/qxl-render.c +index f511a62..f654476 100644 +--- a/hw/display/qxl-render.c ++++ b/hw/display/qxl-render.c +@@ -31,10 +31,6 @@ static void qxl_blit(PCIQXLDevice *qxl, QXLRect *rect) + if (is_buffer_shared(surface)) { + return; + } +- if (!qxl->guest_primary.data) { +- trace_qxl_render_blit_guest_primary_initialized(); +- qxl->guest_primary.data = memory_region_get_ram_ptr(&qxl->vga.vram); +- } + trace_qxl_render_blit(qxl->guest_primary.qxl_stride, + rect->left, rect->right, rect->top, rect->bottom); + src = qxl->guest_primary.data; +@@ -104,7 +100,12 @@ static void qxl_render_update_area_unlocked(PCIQXLDevice *qxl) + + if (qxl->guest_primary.resized) { + qxl->guest_primary.resized = 0; +- qxl->guest_primary.data = memory_region_get_ram_ptr(&qxl->vga.vram); ++ qxl->guest_primary.data = qxl_phys2virt(qxl, ++ qxl->guest_primary.surface.mem, ++ MEMSLOT_GROUP_GUEST); ++ if (!qxl->guest_primary.data) { ++ return; ++ } + qxl_set_rect_to_surface(qxl, &qxl->dirty[0]); + qxl->num_dirty_rects = 1; + trace_qxl_render_guest_primary_resized( +@@ -128,6 +129,10 @@ static void qxl_render_update_area_unlocked(PCIQXLDevice *qxl) + } + dpy_gfx_replace_surface(vga->con, surface); + } ++ ++ if (!qxl->guest_primary.data) { ++ return; ++ } + for (i = 0; i < qxl->num_dirty_rects; i++) { + if (qemu_spice_rect_is_empty(qxl->dirty+i)) { + break; +-- +1.7.1 + diff --git a/SOURCES/kvm-qxl-fix-qxl_set_dirty-call-in-qxl_dirty_one_surface.patch b/SOURCES/kvm-qxl-fix-qxl_set_dirty-call-in-qxl_dirty_one_surface.patch new file mode 100644 index 0000000..99b1593 --- /dev/null +++ b/SOURCES/kvm-qxl-fix-qxl_set_dirty-call-in-qxl_dirty_one_surface.patch @@ -0,0 +1,79 @@ +From e7fe5cf70d63552006e8c9eb660db95279f2a3a9 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 22 Jul 2016 09:34:41 +0200 +Subject: [PATCH 4/4] qxl: fix qxl_set_dirty call in qxl_dirty_one_surface + +RH-Author: Gerd Hoffmann +Message-id: <1469180081-28522-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 71316 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 4/4] qxl: fix qxl_set_dirty call in qxl_dirty_one_surface +Bugzilla: 1355730 +RH-Acked-by: Laurent Vivier +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +qxl_set_dirty() expects start and end as range specification. +qxl_dirty_one_surface passes 'size' instead of 'offset + size' as end +parameter. Fix that. Also use uint64_t everywhere while being at it. + +Bug was added by "e25139b qxl: set only off-screen surfaces dirty instead +of the whole vram" and carried forward unnoticed by "5cdc402 qxl: fix +surface migration". + +Reported-by: Dr. David Alan Gilbert +Signed-off-by: Gerd Hoffmann +Reviewed-by: Dr. David Alan Gilbert +Message-id: 1468413187-22071-1-git-send-email-kraxel@redhat.com +(cherry picked from commit e0127d2eec9cd5676ea9f3c47c2a7579a02c0466) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/display/trace-events +--- + hw/display/qxl.c | 11 ++++++----- + trace-events | 2 +- + 2 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index d65c830..f762439 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1825,16 +1825,17 @@ static void qxl_hw_text_update(void *opaque, console_ch_t *chardata) + static void qxl_dirty_one_surface(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, + uint32_t height, int32_t stride) + { +- uint64_t offset; +- uint32_t slot, size; ++ uint64_t offset, size; ++ uint32_t slot; + bool rc; + + rc = qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset); + assert(rc == true); +- size = height * abs(stride); +- trace_qxl_surfaces_dirty(qxl->id, (int)offset, size); ++ size = (uint64_t)height * abs(stride); ++ trace_qxl_surfaces_dirty(qxl->id, offset, size); + qxl_set_dirty(qxl->guest_slots[slot].mr, +- qxl->guest_slots[slot].offset + offset, size); ++ qxl->guest_slots[slot].offset + offset, ++ qxl->guest_slots[slot].offset + offset + size); + } + + static void qxl_dirty_surfaces(PCIQXLDevice *qxl) +diff --git a/trace-events b/trace-events +index 4da84b2..af5147a 100644 +--- a/trace-events ++++ b/trace-events +@@ -1078,7 +1078,7 @@ qxl_spice_reset_image_cache(int qid) "%d" + qxl_spice_reset_memslots(int qid) "%d" + qxl_spice_update_area(int qid, uint32_t surface_id, uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) "%d sid=%d [%d,%d,%d,%d]" + qxl_spice_update_area_rest(int qid, uint32_t num_dirty_rects, uint32_t clear_dirty_region) "%d #d=%d clear=%d" +-qxl_surfaces_dirty(int qid, int offset, int size) "%d offset=%d size=%d" ++qxl_surfaces_dirty(int qid, uint64_t offset, uint64_t size) "%d offset=0x%"PRIx64" size=0x%"PRIx64 + qxl_send_events(int qid, uint32_t events) "%d %d" + qxl_send_events_vm_stopped(int qid, uint32_t events) "%d %d" + qxl_set_guest_bug(int qid) "%d" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-fix-surface-migration.patch b/SOURCES/kvm-qxl-fix-surface-migration.patch new file mode 100644 index 0000000..f164825 --- /dev/null +++ b/SOURCES/kvm-qxl-fix-surface-migration.patch @@ -0,0 +1,124 @@ +From 13bf417cd4063f5db2f0a79265745481d4c69d0d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 22 Jul 2016 09:34:40 +0200 +Subject: [PATCH 3/4] qxl: fix surface migration + +RH-Author: Gerd Hoffmann +Message-id: <1469180081-28522-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 71315 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 3/4] qxl: fix surface migration +Bugzilla: 1355730 +RH-Acked-by: Laurent Vivier +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +Create a helper function qxl_dirty_one_surface() to mark a single qxl +surface as dirty. Use the new qxl_get_check_slot_offset function and +lookup the memory region from the slot instead of assuming the surface +is stored in vram. + +Use the new helper function in qxl_dirty_surfaces, for both primary and +off-screen surfaces. For off-screen surfaces this is no functional +change. For primary surfaces this will dirty only the memory actually +used instead of the whole surface0 region. It will also work correctly +in case the guest places the primary surface in vram instead of the +surface0 region (linux kms driver does that). + +https://bugzilla.redhat.com/show_bug.cgi?id=1235732 + +Signed-off-by: Gerd Hoffmann +Message-id: 1466597244-5938-3-git-send-email-kraxel@redhat.com +(cherry picked from commit 1331eab216c9dc4e50a48a34d14926b31a7fd611) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/display/trace-events +--- + hw/display/qxl.c | 37 +++++++++++++++++++++---------------- + trace-events | 2 +- + 2 files changed, 22 insertions(+), 17 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index de5770e..d65c830 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1822,9 +1822,23 @@ static void qxl_hw_text_update(void *opaque, console_ch_t *chardata) + } + } + ++static void qxl_dirty_one_surface(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, ++ uint32_t height, int32_t stride) ++{ ++ uint64_t offset; ++ uint32_t slot, size; ++ bool rc; ++ ++ rc = qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset); ++ assert(rc == true); ++ size = height * abs(stride); ++ trace_qxl_surfaces_dirty(qxl->id, (int)offset, size); ++ qxl_set_dirty(qxl->guest_slots[slot].mr, ++ qxl->guest_slots[slot].offset + offset, size); ++} ++ + static void qxl_dirty_surfaces(PCIQXLDevice *qxl) + { +- uintptr_t vram_start; + int i; + + if (qxl->mode != QXL_MODE_NATIVE && qxl->mode != QXL_MODE_COMPAT) { +@@ -1832,16 +1846,13 @@ static void qxl_dirty_surfaces(PCIQXLDevice *qxl) + } + + /* dirty the primary surface */ +- qxl_set_dirty(&qxl->vga.vram, qxl->shadow_rom.draw_area_offset, +- qxl->shadow_rom.surface0_area_size); +- +- vram_start = (uintptr_t)memory_region_get_ram_ptr(&qxl->vram_bar); ++ qxl_dirty_one_surface(qxl, qxl->guest_primary.surface.mem, ++ qxl->guest_primary.surface.height, ++ qxl->guest_primary.surface.stride); + + /* dirty the off-screen surfaces */ + for (i = 0; i < qxl->ssd.num_surfaces; i++) { + QXLSurfaceCmd *cmd; +- intptr_t surface_offset; +- int surface_size; + + if (qxl->guest_surfaces.cmds[i] == 0) { + continue; +@@ -1851,15 +1862,9 @@ static void qxl_dirty_surfaces(PCIQXLDevice *qxl) + MEMSLOT_GROUP_GUEST); + assert(cmd); + assert(cmd->type == QXL_SURFACE_CMD_CREATE); +- surface_offset = (intptr_t)qxl_phys2virt(qxl, +- cmd->u.surface_create.data, +- MEMSLOT_GROUP_GUEST); +- assert(surface_offset); +- surface_offset -= vram_start; +- surface_size = cmd->u.surface_create.height * +- abs(cmd->u.surface_create.stride); +- trace_qxl_surfaces_dirty(qxl->id, i, (int)surface_offset, surface_size); +- qxl_set_dirty(&qxl->vram_bar, surface_offset, surface_size); ++ qxl_dirty_one_surface(qxl, cmd->u.surface_create.data, ++ cmd->u.surface_create.height, ++ cmd->u.surface_create.stride); + } + } + +diff --git a/trace-events b/trace-events +index b43132c..4da84b2 100644 +--- a/trace-events ++++ b/trace-events +@@ -1078,7 +1078,7 @@ qxl_spice_reset_image_cache(int qid) "%d" + qxl_spice_reset_memslots(int qid) "%d" + qxl_spice_update_area(int qid, uint32_t surface_id, uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) "%d sid=%d [%d,%d,%d,%d]" + qxl_spice_update_area_rest(int qid, uint32_t num_dirty_rects, uint32_t clear_dirty_region) "%d #d=%d clear=%d" +-qxl_surfaces_dirty(int qid, int surface, int offset, int size) "%d surface=%d offset=%d size=%d" ++qxl_surfaces_dirty(int qid, int offset, int size) "%d offset=%d size=%d" + qxl_send_events(int qid, uint32_t events) "%d %d" + qxl_send_events_vm_stopped(int qid, uint32_t events) "%d %d" + qxl_set_guest_bug(int qid) "%d" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-replace-pipe-signaling-with-bottom-half.patch b/SOURCES/kvm-qxl-replace-pipe-signaling-with-bottom-half.patch new file mode 100644 index 0000000..d9c50a0 --- /dev/null +++ b/SOURCES/kvm-qxl-replace-pipe-signaling-with-bottom-half.patch @@ -0,0 +1,108 @@ +From bf9b8d36996ecbe78f1561404a355af6f7c5d4f6 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 21 Jan 2014 11:25:17 -0500 +Subject: [PATCH 6/6] qxl: replace pipe signaling with bottom half + +Message-id: <1390303517-20167-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 56865 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] qxl: replace pipe signaling with bottom half +Bugzilla: 1009297 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +qxl creates a pipe, then writes something to it to wake up the iothread +from the spice server thread to raise an irq. These days qemu bottom +halves can be scheduled from threads and signals, so there is no reason +to do this any more. Time to clean it up. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4a46c99c8118586f19894fe66fc6e353f159d4d9) +--- + hw/display/qxl.c | 33 +++------------------------------ + hw/display/qxl.h | 3 +-- + 2 files changed, 4 insertions(+), 32 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 33 +++------------------------------ + hw/display/qxl.h | 3 +-- + 2 files changed, 4 insertions(+), 32 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 830b3c5..4381d97 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1702,15 +1702,9 @@ static const MemoryRegionOps qxl_io_ops = { + }, + }; + +-static void pipe_read(void *opaque) ++static void qxl_update_irq_bh(void *opaque) + { + PCIQXLDevice *d = opaque; +- char dummy; +- int len; +- +- do { +- len = read(d->pipe[0], &dummy, sizeof(dummy)); +- } while (len == sizeof(dummy)); + qxl_update_irq(d); + } + +@@ -1731,28 +1725,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events) + if ((old_pending & le_events) == le_events) { + return; + } +- if (qemu_thread_is_self(&d->main)) { +- qxl_update_irq(d); +- } else { +- if (write(d->pipe[1], d, 1) != 1) { +- dprint(d, 1, "%s: write to pipe failed\n", __func__); +- } +- } +-} +- +-static void init_pipe_signaling(PCIQXLDevice *d) +-{ +- if (pipe(d->pipe) < 0) { +- fprintf(stderr, "%s:%s: qxl pipe creation failed\n", +- __FILE__, __func__); +- exit(1); +- } +- fcntl(d->pipe[0], F_SETFL, O_NONBLOCK); +- fcntl(d->pipe[1], F_SETFL, O_NONBLOCK); +- fcntl(d->pipe[0], F_SETOWN, getpid()); +- +- qemu_thread_get_self(&d->main); +- qemu_set_fd_handler(d->pipe[0], pipe_read, NULL, d); ++ qemu_bh_schedule(d->update_irq); + } + + /* graphics console */ +@@ -2044,7 +2017,7 @@ static int qxl_init_common(PCIQXLDevice *qxl) + } + qemu_add_vm_change_state_handler(qxl_vm_change_state_handler, qxl); + +- init_pipe_signaling(qxl); ++ qxl->update_irq = qemu_bh_new(qxl_update_irq_bh, qxl); + qxl_reset_state(qxl); + + qxl->update_area_bh = qemu_bh_new(qxl_render_update_area_bh, qxl); +diff --git a/hw/display/qxl.h b/hw/display/qxl.h +index 8e9b0c2..5da33e2 100644 +--- a/hw/display/qxl.h ++++ b/hw/display/qxl.h +@@ -78,8 +78,7 @@ typedef struct PCIQXLDevice { + QemuMutex track_lock; + + /* thread signaling */ +- QemuThread main; +- int pipe[2]; ++ QEMUBH *update_irq; + + /* ram pci bar */ + QXLRam *ram; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-qxl-store-memory-region-and-offset-instead-of-pointe.patch b/SOURCES/kvm-qxl-store-memory-region-and-offset-instead-of-pointe.patch new file mode 100644 index 0000000..4d64bef --- /dev/null +++ b/SOURCES/kvm-qxl-store-memory-region-and-offset-instead-of-pointe.patch @@ -0,0 +1,109 @@ +From 8f25ff7e1496ce8a26edacfa01c64f3a98c564a0 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 22 Jul 2016 09:34:39 +0200 +Subject: [PATCH 2/4] qxl: store memory region and offset instead of pointer + for guest slots + +RH-Author: Gerd Hoffmann +Message-id: <1469180081-28522-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 71314 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 2/4] qxl: store memory region and offset instead of pointer for guest slots +Bugzilla: 1355730 +RH-Acked-by: Laurent Vivier +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +Store MemoryRegion and offset instead of a pointer for each qxl memory +slot, so we can easily figure in which memory region an qxl object +stored. + +Signed-off-by: Gerd Hoffmann +Message-id: 1466597244-5938-2-git-send-email-kraxel@redhat.com +(cherry picked from commit 3cb5158f15604a9f50287f2f06777d5835ff4c15) +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 15 +++++++++++---- + hw/display/qxl.h | 3 ++- + 2 files changed, 13 insertions(+), 5 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 5e1ecd8..de5770e 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1232,6 +1232,7 @@ static int qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta, + int pci_region; + pcibus_t pci_start; + pcibus_t pci_end; ++ MemoryRegion *mr; + intptr_t virt_start; + QXLDevMemSlot memslot; + int i; +@@ -1278,11 +1279,11 @@ static int qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta, + + switch (pci_region) { + case QXL_RAM_RANGE_INDEX: +- virt_start = (intptr_t)memory_region_get_ram_ptr(&d->vga.vram); ++ mr = &d->vga.vram; + break; + case QXL_VRAM_RANGE_INDEX: + case 4 /* vram 64bit */: +- virt_start = (intptr_t)memory_region_get_ram_ptr(&d->vram_bar); ++ mr = &d->vram_bar; + break; + default: + /* should not happen */ +@@ -1290,6 +1291,7 @@ static int qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta, + return 1; + } + ++ virt_start = (intptr_t)memory_region_get_ram_ptr(mr); + memslot.slot_id = slot_id; + memslot.slot_group_id = MEMSLOT_GROUP_GUEST; /* guest group */ + memslot.virt_start = virt_start + (guest_start - pci_start); +@@ -1299,7 +1301,8 @@ static int qxl_add_memslot(PCIQXLDevice *d, uint32_t slot_id, uint64_t delta, + qxl_rom_set_dirty(d); + + qemu_spice_add_memslot(&d->ssd, &memslot, async); +- d->guest_slots[slot_id].ptr = (void*)memslot.virt_start; ++ d->guest_slots[slot_id].mr = mr; ++ d->guest_slots[slot_id].offset = memslot.virt_start - virt_start; + d->guest_slots[slot_id].size = memslot.virt_end - memslot.virt_start; + d->guest_slots[slot_id].delta = delta; + d->guest_slots[slot_id].active = 1; +@@ -1366,6 +1369,7 @@ void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id) + { + uint64_t offset; + uint32_t slot; ++ void *ptr; + + switch (group_id) { + case MEMSLOT_GROUP_HOST: +@@ -1375,7 +1379,10 @@ void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id) + if (!qxl_get_check_slot_offset(qxl, pqxl, &slot, &offset)) { + return NULL; + } +- return qxl->guest_slots[slot].ptr + offset; ++ ptr = memory_region_get_ram_ptr(qxl->guest_slots[slot].mr); ++ ptr += qxl->guest_slots[slot].offset; ++ ptr += offset; ++ return ptr; + } + return NULL; + } +diff --git a/hw/display/qxl.h b/hw/display/qxl.h +index 5247ce9..f3f51e2 100644 +--- a/hw/display/qxl.h ++++ b/hw/display/qxl.h +@@ -49,7 +49,8 @@ typedef struct PCIQXLDevice { + + struct guest_slots { + QXLMemSlot slot; +- void *ptr; ++ MemoryRegion *mr; ++ uint64_t offset; + uint64_t size; + uint64_t delta; + uint32_t active; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ram-split-function-that-synchronizes-a-range.patch b/SOURCES/kvm-ram-split-function-that-synchronizes-a-range.patch new file mode 100644 index 0000000..9ea39ed --- /dev/null +++ b/SOURCES/kvm-ram-split-function-that-synchronizes-a-range.patch @@ -0,0 +1,98 @@ +From 14eb19d20c600001321edcc664614b9f5f2bb758 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:50 +0100 +Subject: [PATCH 39/40] ram: split function that synchronizes a range + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-40-git-send-email-quintela@redhat.com> +Patchwork-id: 56694 +O-Subject: [RHEL7 qemu-kvm PATCH 39/40] ram: split function that synchronizes a range +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +This function is the only bit where we care about speed. + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit 791fa2a2451799232d6bc0c29c0fbb13b5293eeb) +Signed-off-by: Juan Quintela +--- + arch_init.c | 34 ++++++++++++++++++++-------------- + 1 file changed, 20 insertions(+), 14 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 34 ++++++++++++++++++++-------------- + 1 files changed, 20 insertions(+), 14 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 41da357..23650e7 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -360,11 +360,10 @@ ram_addr_t migration_bitmap_find_and_reset_dirty(MemoryRegion *mr, + return (next - base) << TARGET_PAGE_BITS; + } + +-static inline bool migration_bitmap_set_dirty(MemoryRegion *mr, +- ram_addr_t offset) ++static inline bool migration_bitmap_set_dirty(ram_addr_t addr) + { + bool ret; +- int nr = (mr->ram_addr + offset) >> TARGET_PAGE_BITS; ++ int nr = addr >> TARGET_PAGE_BITS; + + ret = test_and_set_bit(nr, migration_bitmap); + +@@ -374,12 +373,28 @@ static inline bool migration_bitmap_set_dirty(MemoryRegion *mr, + return ret; + } + ++static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length) ++{ ++ ram_addr_t addr; ++ ++ for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) { ++ if (cpu_physical_memory_get_dirty(start + addr, ++ TARGET_PAGE_SIZE, ++ DIRTY_MEMORY_MIGRATION)) { ++ cpu_physical_memory_reset_dirty(start + addr, ++ TARGET_PAGE_SIZE, ++ DIRTY_MEMORY_MIGRATION); ++ migration_bitmap_set_dirty(start + addr); ++ } ++ } ++} ++ ++ + /* Needs iothread lock! */ + + static void migration_bitmap_sync(void) + { + RAMBlock *block; +- ram_addr_t addr; + uint64_t num_dirty_pages_init = migration_dirty_pages; + MigrationState *s = migrate_get_current(); + static int64_t start_time; +@@ -400,16 +415,7 @@ static void migration_bitmap_sync(void) + memory_global_sync_dirty_bitmap(get_system_memory()); + + QTAILQ_FOREACH(block, &ram_list.blocks, next) { +- for (addr = 0; addr < block->length; addr += TARGET_PAGE_SIZE) { +- if (cpu_physical_memory_get_dirty(block->mr->ram_addr + addr, +- TARGET_PAGE_SIZE, +- DIRTY_MEMORY_MIGRATION)) { +- cpu_physical_memory_reset_dirty(block->mr->ram_addr + addr, +- TARGET_PAGE_SIZE, +- DIRTY_MEMORY_MIGRATION); +- migration_bitmap_set_dirty(block->mr, addr); +- } +- } ++ migration_bitmap_sync_range(block->mr->ram_addr, block->length); + } + trace_migration_bitmap_sync_end(migration_dirty_pages + - num_dirty_pages_init); +-- +1.7.1 + diff --git a/SOURCES/kvm-range-add-Range-structure.patch b/SOURCES/kvm-range-add-Range-structure.patch new file mode 100644 index 0000000..c77aed6 --- /dev/null +++ b/SOURCES/kvm-range-add-Range-structure.patch @@ -0,0 +1,65 @@ +From 3ed0fb61a3dc912ef036d7ef450bed192090709e Mon Sep 17 00:00:00 2001 +Message-Id: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:16:49 +0100 +Subject: [PATCH 01/56] range: add Range structure + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-2-git-send-email-mst@redhat.com> +Patchwork-id: 56306 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 01/57] range: add Range structure +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Sometimes we need to pass ranges around, add a +handy structure for this purpose. + +Note: memory.c defines its own concept of AddrRange structure for +working with 128 addresses. It's necessary there for doing range math. +This is not needed for most users: struct Range is +much simpler, and is only used for passing the range around. + +Cc: Peter Maydell +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 620ac82eb0fc4218fb6a4937bcef3fdab3126703) +--- + include/qemu/range.h | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +Signed-off-by: Michal Novotny +--- + include/qemu/range.h | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/include/qemu/range.h b/include/qemu/range.h +index 3502372..b76cc0d 100644 +--- a/include/qemu/range.h ++++ b/include/qemu/range.h +@@ -1,6 +1,22 @@ + #ifndef QEMU_RANGE_H + #define QEMU_RANGE_H + ++#include ++ ++/* ++ * Operations on 64 bit address ranges. ++ * Notes: ++ * - ranges must not wrap around 0, but can include the last byte ~0x0LL. ++ * - this can not represent a full 0 to ~0x0LL range. ++ */ ++ ++/* A structure representing a range of addresses. */ ++struct Range { ++ uint64_t begin; /* First byte of the range, or 0 if empty. */ ++ uint64_t end; /* 1 + the last byte. 0 if range empty or ends at ~0x0LL. */ ++}; ++typedef struct Range Range; ++ + /* Get last byte of a range from offset + length. + * Undefined for ranges that wrap around 0. */ + static inline uint64_t range_get_last(uint64_t offset, uint64_t len) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-range-add-Range-to-typedefs.patch b/SOURCES/kvm-range-add-Range-to-typedefs.patch new file mode 100644 index 0000000..aed9594 --- /dev/null +++ b/SOURCES/kvm-range-add-Range-to-typedefs.patch @@ -0,0 +1,66 @@ +From 46223e9568b32a876f4b4432adec3d21f44f0924 Mon Sep 17 00:00:00 2001 +Message-Id: <46223e9568b32a876f4b4432adec3d21f44f0924.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:16:52 +0100 +Subject: [PATCH 02/56] range: add Range to typedefs + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-3-git-send-email-mst@redhat.com> +Patchwork-id: 56307 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 02/57] range: add Range to typedefs +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +will help simplify header dependencies. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit cfe25e2bcada943984e27ee63918fd75dc4563ac) +--- + include/qemu/range.h | 2 +- + include/qemu/typedefs.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + include/qemu/range.h | 2 +- + include/qemu/typedefs.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/include/qemu/range.h b/include/qemu/range.h +index b76cc0d..4a0780d 100644 +--- a/include/qemu/range.h ++++ b/include/qemu/range.h +@@ -2,6 +2,7 @@ + #define QEMU_RANGE_H + + #include ++#include + + /* + * Operations on 64 bit address ranges. +@@ -15,7 +16,6 @@ struct Range { + uint64_t begin; /* First byte of the range, or 0 if empty. */ + uint64_t end; /* 1 + the last byte. 0 if range empty or ends at ~0x0LL. */ + }; +-typedef struct Range Range; + + /* Get last byte of a range from offset + length. + * Undefined for ranges that wrap around 0. */ +diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h +index 1218a61..2e7d942 100644 +--- a/include/qemu/typedefs.h ++++ b/include/qemu/typedefs.h +@@ -63,5 +63,6 @@ typedef struct EventNotifier EventNotifier; + typedef struct VirtIODevice VirtIODevice; + typedef struct QEMUSGList QEMUSGList; + typedef struct SHPCDevice SHPCDevice; ++typedef struct Range Range; + + #endif /* QEMU_TYPEDEFS_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-range-add-min-max-operations-on-ranges.patch b/SOURCES/kvm-range-add-min-max-operations-on-ranges.patch new file mode 100644 index 0000000..9698eda --- /dev/null +++ b/SOURCES/kvm-range-add-min-max-operations-on-ranges.patch @@ -0,0 +1,60 @@ +From 5b9d5a4f0e351dc73b31507b56334f7ef692f20c Mon Sep 17 00:00:00 2001 +Message-Id: <5b9d5a4f0e351dc73b31507b56334f7ef692f20c.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:16:55 +0100 +Subject: [PATCH 03/56] range: add min/max operations on ranges + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-4-git-send-email-mst@redhat.com> +Patchwork-id: 56308 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 03/57] range: add min/max operations on ranges +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit c5a22c4344f17169bb20e122e9d935c62aedc063) +--- + include/qemu/range.h | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +Signed-off-by: Michal Novotny +--- + include/qemu/range.h | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/include/qemu/range.h b/include/qemu/range.h +index 4a0780d..aae9720 100644 +--- a/include/qemu/range.h ++++ b/include/qemu/range.h +@@ -17,6 +17,24 @@ struct Range { + uint64_t end; /* 1 + the last byte. 0 if range empty or ends at ~0x0LL. */ + }; + ++static inline void range_extend(Range *range, Range *extend_by) ++{ ++ if (!extend_by->begin && !extend_by->end) { ++ return; ++ } ++ if (!range->begin && !range->end) { ++ *range = *extend_by; ++ return; ++ } ++ if (range->begin > extend_by->begin) { ++ range->begin = extend_by->begin; ++ } ++ /* Compare last byte in case region ends at ~0x0LL */ ++ if (range->end - 1 < extend_by->end - 1) { ++ range->end = extend_by->end; ++ } ++} ++ + /* Get last byte of a range from offset + length. + * Undefined for ranges that wrap around 0. */ + static inline uint64_t range_get_last(uint64_t offset, uint64_t len) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-raw-Fix-BlockLimits-passthrough.patch b/SOURCES/kvm-raw-Fix-BlockLimits-passthrough.patch new file mode 100644 index 0000000..fa8911a --- /dev/null +++ b/SOURCES/kvm-raw-Fix-BlockLimits-passthrough.patch @@ -0,0 +1,75 @@ +From 524a3586abb4a10aa87f1b36518f6645caf586c8 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 4 Feb 2014 11:54:13 +0100 +Subject: [PATCH 03/37] raw: Fix BlockLimits passthrough + +Message-id: <1392117622-28812-4-git-send-email-kwolf@redhat.com> +Patchwork-id: 57168 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 03/37] raw: Fix BlockLimits passthrough +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +raw copies over the BlockLimits of bs->file during bdrv_open(). +However, since commit d34682cd it is immediately overwritten during +bdrv_refresh_limits(). This caused all fields except for +opt_transfer_length and opt_mem_alignment (which happen to be correctly +inherited in generic code) to be zeroed. + +Move the BlockLimit assignment to a .bdrv_refresh_limits() callback to +make it work again for all fields. + +Reported-by: Laszlo Ersek +Signed-off-by: Kevin Wolf +Reviewed-by: Laszlo Ersek + +Conflicts: + block/raw_bsd.c + +Conflicts because RHEL 7 still has the old raw driver. + +Signed-off-by: Kevin Wolf +--- + block/raw.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) +--- + block/raw.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/block/raw.c b/block/raw.c +index c853258..eeadba5 100644 +--- a/block/raw.c ++++ b/block/raw.c +@@ -7,7 +7,6 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { + bs->sg = bs->file->sg; +- bs->bl = bs->file->bl; + return 0; + } + +@@ -59,6 +58,12 @@ static int64_t raw_getlength(BlockDriverState *bs) + return bdrv_getlength(bs->file); + } + ++static int raw_refresh_limits(BlockDriverState *bs) ++{ ++ bs->bl = bs->file->bl; ++ return 0; ++} ++ + static int raw_truncate(BlockDriverState *bs, int64_t offset) + { + return bdrv_truncate(bs->file, offset); +@@ -154,6 +159,7 @@ static BlockDriver bdrv_raw = { + .bdrv_probe = raw_probe, + .bdrv_getlength = raw_getlength, + .has_variable_length = true, ++ .bdrv_refresh_limits = raw_refresh_limits, + .bdrv_truncate = raw_truncate, + + .bdrv_is_inserted = raw_is_inserted, +-- +1.7.1 + diff --git a/SOURCES/kvm-raw-Probe-required-direct-I-O-alignment.patch b/SOURCES/kvm-raw-Probe-required-direct-I-O-alignment.patch new file mode 100644 index 0000000..8eaab77 --- /dev/null +++ b/SOURCES/kvm-raw-Probe-required-direct-I-O-alignment.patch @@ -0,0 +1,316 @@ +From de29d97cab7b97d776cbb1077079eff0bfc46186 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 29 Nov 2011 12:42:20 +0100 +Subject: [PATCH 10/37] raw: Probe required direct I/O alignment + +Message-id: <1392117622-28812-11-git-send-email-kwolf@redhat.com> +Patchwork-id: 57175 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 10/37] raw: Probe required direct I/O alignment +Bugzilla: 748906 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Add a bs->request_alignment field that contains the required +offset/length alignment for I/O requests and fill it in the raw block +drivers. Use ioctls if possible, else see what alignment it takes for +O_DIRECT to succeed. + +While at it, also expose the memory alignment requirements, which may be +(and in practice are) different from the disk alignment requirements. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Kevin Wolf +Reviewed-by: Max Reitz +(cherry picked from commit c25f53b06eba1575d5d0e92a0132455c97825b83) + +Signed-off-by: Kevin Wolf +--- + block.c | 3 ++ + block/raw-posix.c | 102 ++++++++++++++++++++++++++++++++++++++-------- + block/raw-win32.c | 41 +++++++++++++++++++ + include/block/block_int.h | 3 ++ + 4 files changed, 132 insertions(+), 17 deletions(-) +--- + block.c | 3 + + block/raw-posix.c | 102 +++++++++++++++++++++++++++++++++++++------- + block/raw-win32.c | 41 ++++++++++++++++++ + include/block/block_int.h | 3 + + 4 files changed, 132 insertions(+), 17 deletions(-) + +diff --git a/block.c b/block.c +index f2102bc..40a4a34 100644 +--- a/block.c ++++ b/block.c +@@ -780,6 +780,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + + bs->open_flags = flags; + bs->guest_block_size = 512; ++ bs->request_alignment = 512; + bs->zero_beyond_eof = true; + open_flags = bdrv_open_flags(bs, flags); + bs->read_only = !(open_flags & BDRV_O_RDWR); +@@ -845,6 +846,8 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, + } + + bdrv_refresh_limits(bs); ++ assert(bdrv_opt_mem_align(bs) != 0); ++ assert(bs->request_alignment != 0); + + #ifndef _WIN32 + if (bs->is_temporary) { +diff --git a/block/raw-posix.c b/block/raw-posix.c +index f410668..9ee5b8e 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -127,6 +127,8 @@ typedef struct BDRVRawState { + int fd; + int type; + int open_flags; ++ size_t buf_align; ++ + #if defined(__linux__) + /* linux floppy specific */ + int64_t fd_open_time; +@@ -213,6 +215,76 @@ static int raw_normalize_devicepath(const char **filename) + } + #endif + ++static void raw_probe_alignment(BlockDriverState *bs) ++{ ++ BDRVRawState *s = bs->opaque; ++ char *buf; ++ unsigned int sector_size; ++ ++ /* For /dev/sg devices the alignment is not really used. ++ With buffered I/O, we don't have any restrictions. */ ++ if (bs->sg || !(s->open_flags & O_DIRECT)) { ++ bs->request_alignment = 1; ++ s->buf_align = 1; ++ return; ++ } ++ ++ /* Try a few ioctls to get the right size */ ++ bs->request_alignment = 0; ++ s->buf_align = 0; ++ ++#ifdef BLKSSZGET ++ if (ioctl(s->fd, BLKSSZGET, §or_size) >= 0) { ++ bs->request_alignment = sector_size; ++ } ++#endif ++#ifdef DKIOCGETBLOCKSIZE ++ if (ioctl(s->fd, DKIOCGETBLOCKSIZE, §or_size) >= 0) { ++ bs->request_alignment = sector_size; ++ } ++#endif ++#ifdef DIOCGSECTORSIZE ++ if (ioctl(s->fd, DIOCGSECTORSIZE, §or_size) >= 0) { ++ bs->request_alignment = sector_size; ++ } ++#endif ++#ifdef CONFIG_XFS ++ if (s->is_xfs) { ++ struct dioattr da; ++ if (xfsctl(NULL, s->fd, XFS_IOC_DIOINFO, &da) >= 0) { ++ bs->request_alignment = da.d_miniosz; ++ /* The kernel returns wrong information for d_mem */ ++ /* s->buf_align = da.d_mem; */ ++ } ++ } ++#endif ++ ++ /* If we could not get the sizes so far, we can only guess them */ ++ if (!s->buf_align) { ++ size_t align; ++ buf = qemu_memalign(MAX_BLOCKSIZE, 2 * MAX_BLOCKSIZE); ++ for (align = 512; align <= MAX_BLOCKSIZE; align <<= 1) { ++ if (pread(s->fd, buf + align, MAX_BLOCKSIZE, 0) >= 0) { ++ s->buf_align = align; ++ break; ++ } ++ } ++ qemu_vfree(buf); ++ } ++ ++ if (!bs->request_alignment) { ++ size_t align; ++ buf = qemu_memalign(s->buf_align, MAX_BLOCKSIZE); ++ for (align = 512; align <= MAX_BLOCKSIZE; align <<= 1) { ++ if (pread(s->fd, buf, align, 0) >= 0) { ++ bs->request_alignment = align; ++ break; ++ } ++ } ++ qemu_vfree(buf); ++ } ++} ++ + static void raw_parse_flags(int bdrv_flags, int *open_flags) + { + assert(open_flags != NULL); +@@ -464,7 +536,6 @@ static int raw_reopen_prepare(BDRVReopenState *state, + return ret; + } + +- + static void raw_reopen_commit(BDRVReopenState *state) + { + BDRVRawReopenState *raw_s = state->opaque; +@@ -500,23 +571,15 @@ static void raw_reopen_abort(BDRVReopenState *state) + state->opaque = NULL; + } + ++static int raw_refresh_limits(BlockDriverState *bs) ++{ ++ BDRVRawState *s = bs->opaque; + +-/* XXX: use host sector size if necessary with: +-#ifdef DIOCGSECTORSIZE +- { +- unsigned int sectorsize = 512; +- if (!ioctl(fd, DIOCGSECTORSIZE, §orsize) && +- sectorsize > bufsize) +- bufsize = sectorsize; +- } +-#endif +-#ifdef CONFIG_COCOA +- uint32_t blockSize = 512; +- if ( !ioctl( fd, DKIOCGETBLOCKSIZE, &blockSize ) && blockSize > bufsize) { +- bufsize = blockSize; +- } +-#endif +-*/ ++ raw_probe_alignment(bs); ++ bs->bl.opt_mem_alignment = s->buf_align; ++ ++ return 0; ++} + + static ssize_t handle_aiocb_ioctl(RawPosixAIOData *aiocb) + { +@@ -1363,6 +1426,7 @@ static BlockDriver bdrv_file = { + .bdrv_aio_writev = raw_aio_writev, + .bdrv_aio_flush = raw_aio_flush, + .bdrv_aio_discard = raw_aio_discard, ++ .bdrv_refresh_limits = raw_refresh_limits, + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, +@@ -1739,6 +1803,7 @@ static BlockDriver bdrv_host_device = { + .bdrv_aio_writev = raw_aio_writev, + .bdrv_aio_flush = raw_aio_flush, + .bdrv_aio_discard = hdev_aio_discard, ++ .bdrv_refresh_limits = raw_refresh_limits, + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, +@@ -1869,6 +1934,7 @@ static BlockDriver bdrv_host_floppy = { + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, + .bdrv_aio_flush = raw_aio_flush, ++ .bdrv_refresh_limits = raw_refresh_limits, + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, +@@ -1978,6 +2044,7 @@ static BlockDriver bdrv_host_cdrom = { + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, + .bdrv_aio_flush = raw_aio_flush, ++ .bdrv_refresh_limits = raw_refresh_limits, + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, +@@ -2105,6 +2172,7 @@ static BlockDriver bdrv_host_cdrom = { + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, + .bdrv_aio_flush = raw_aio_flush, ++ .bdrv_refresh_limits = raw_refresh_limits, + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 6ac3797..ac20370 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -201,6 +201,35 @@ static int set_sparse(int fd) + NULL, 0, NULL, 0, &returned, NULL); + } + ++static void raw_probe_alignment(BlockDriverState *bs) ++{ ++ BDRVRawState *s = bs->opaque; ++ DWORD sectorsPerCluster, freeClusters, totalClusters, count; ++ DISK_GEOMETRY_EX dg; ++ BOOL status; ++ ++ if (s->type == FTYPE_CD) { ++ bs->request_alignment = 2048; ++ return; ++ } ++ if (s->type == FTYPE_HARDDISK) { ++ status = DeviceIoControl(s->hfile, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, ++ NULL, 0, &dg, sizeof(dg), &count, NULL); ++ if (status != 0) { ++ bs->request_alignment = dg.Geometry.BytesPerSector; ++ return; ++ } ++ /* try GetDiskFreeSpace too */ ++ } ++ ++ if (s->drive_path[0]) { ++ GetDiskFreeSpace(s->drive_path, §orsPerCluster, ++ &dg.Geometry.BytesPerSector, ++ &freeClusters, &totalClusters); ++ bs->request_alignment = dg.Geometry.BytesPerSector; ++ } ++} ++ + static void raw_parse_flags(int flags, int *access_flags, DWORD *overlapped) + { + assert(access_flags != NULL); +@@ -268,6 +297,17 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + } + } + ++ if (filename[0] && filename[1] == ':') { ++ snprintf(s->drive_path, sizeof(s->drive_path), "%c:\\", filename[0]); ++ } else if (filename[0] == '\\' && filename[1] == '\\') { ++ s->drive_path[0] = 0; ++ } else { ++ /* Relative path. */ ++ char buf[MAX_PATH]; ++ GetCurrentDirectory(MAX_PATH, buf); ++ snprintf(s->drive_path, sizeof(s->drive_path), "%c:\\", buf[0]); ++ } ++ + s->hfile = CreateFile(filename, access_flags, + FILE_SHARE_READ, NULL, + OPEN_EXISTING, overlapped, NULL); +@@ -293,6 +333,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, + s->aio = aio; + } + ++ raw_probe_alignment(bs); + ret = 0; + fail: + qemu_opts_del(opts); +diff --git a/include/block/block_int.h b/include/block/block_int.h +index 0445e6b..e66bd5f 100644 +--- a/include/block/block_int.h ++++ b/include/block/block_int.h +@@ -307,6 +307,9 @@ struct BlockDriverState { + /* Whether produces zeros when read beyond eof */ + bool zero_beyond_eof; + ++ /* Alignment requirement for offset/length of I/O requests */ ++ unsigned int request_alignment; ++ + /* the block size for which the guest device expects atomicity */ + int guest_block_size; + +-- +1.7.1 + diff --git a/SOURCES/kvm-raw-posix-Add-falloc-and-full-preallocation-option.patch b/SOURCES/kvm-raw-posix-Add-falloc-and-full-preallocation-option.patch new file mode 100644 index 0000000..1422891 --- /dev/null +++ b/SOURCES/kvm-raw-posix-Add-falloc-and-full-preallocation-option.patch @@ -0,0 +1,188 @@ +From 61a3061760caaaaa4f025f5712dcd8f84f2f5d70 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 10 Nov 2014 09:14:06 +0100 +Subject: [PATCH 29/41] raw-posix: Add falloc and full preallocation option + +Message-id: <1415610847-15383-4-git-send-email-mreitz@redhat.com> +Patchwork-id: 62239 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 3/4] raw-posix: Add falloc and full preallocation option +Bugzilla: 1087724 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Hu Tao + +This patch adds a new option preallocation for raw format, and implements +falloc and full preallocation. + +Signed-off-by: Hu Tao +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 06247428be8037b3739280f82cb29efe8397695f) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/raw-posix.c + +QEMUOptionParameter has not been replaced with QemuOpts downstream +(upstream 6f482f742dd841b45297fb0e5f3d2c81779253be) and no "nocow" +downstream. + +Signed-off-by: Max Reitz +--- + block/raw-posix.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++------ + qemu-doc.texi | 9 ++++++++ + qemu-img.texi | 9 ++++++++ + 3 files changed, 78 insertions(+), 7 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 9ee5b8e..cfe7452 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -30,6 +30,7 @@ + #include "block/thread-pool.h" + #include "qemu/iov.h" + #include "raw-aio.h" ++#include "qapi/util.h" + + #if defined(__APPLE__) && (__MACH__) + #include +@@ -1230,11 +1231,23 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, + int fd; + int result = 0; + int64_t total_size = 0; ++ PreallocMode prealloc = PREALLOC_MODE_OFF; ++ char *buf = NULL; ++ Error *local_err = NULL; + + /* Read out options */ + while (options && options->name) { + if (!strcmp(options->name, BLOCK_OPT_SIZE)) { + total_size = options->value.n / BDRV_SECTOR_SIZE; ++ } else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) { ++ prealloc = qapi_enum_parse(PreallocMode_lookup, options->value.s, ++ PREALLOC_MODE_MAX, PREALLOC_MODE_OFF, ++ &local_err); ++ if (local_err) { ++ error_propagate(errp, local_err); ++ result = -EINVAL; ++ goto out; ++ } + } + options++; + } +@@ -1244,16 +1257,51 @@ static int raw_create(const char *filename, QEMUOptionParameter *options, + if (fd < 0) { + result = -errno; + error_setg_errno(errp, -result, "Could not create file"); +- } else { +- if (ftruncate(fd, total_size * BDRV_SECTOR_SIZE) != 0) { +- result = -errno; +- error_setg_errno(errp, -result, "Could not resize file"); ++ goto out; ++ } ++ ++ if (ftruncate(fd, total_size * BDRV_SECTOR_SIZE) != 0) { ++ result = -errno; ++ error_setg_errno(errp, -result, "Could not resize file"); ++ goto out_close; ++ } ++ ++ if (prealloc == PREALLOC_MODE_FALLOC) { ++ /* posix_fallocate() doesn't set errno. */ ++ result = -posix_fallocate(fd, 0, total_size * BDRV_SECTOR_SIZE); ++ if (result != 0) { ++ error_setg_errno(errp, -result, ++ "Could not preallocate data for the new file"); + } +- if (qemu_close(fd) != 0) { +- result = -errno; +- error_setg_errno(errp, -result, "Could not close the new file"); ++ } else if (prealloc == PREALLOC_MODE_FULL) { ++ buf = g_malloc0(65536); ++ int64_t num = 0, left = total_size * BDRV_SECTOR_SIZE; ++ ++ while (left > 0) { ++ num = MIN(left, 65536); ++ result = write(fd, buf, num); ++ if (result < 0) { ++ result = -errno; ++ error_setg_errno(errp, -result, ++ "Could not write to the new file"); ++ break; ++ } ++ left -= num; + } ++ fsync(fd); ++ g_free(buf); ++ } else if (prealloc != PREALLOC_MODE_OFF) { ++ result = -EINVAL; ++ error_setg(errp, "Unsupported preallocation mode: %s", ++ PreallocMode_lookup[prealloc]); ++ } ++ ++out_close: ++ if (qemu_close(fd) != 0 && result == 0) { ++ result = -errno; ++ error_setg_errno(errp, -result, "Could not close the new file"); + } ++out: + return result; + } + +@@ -1404,6 +1452,11 @@ static QEMUOptionParameter raw_create_options[] = { + .type = OPT_SIZE, + .help = "Virtual disk size" + }, ++ { ++ .name = BLOCK_OPT_PREALLOC, ++ .type = OPT_STRING, ++ .help = "Preallocation mode (allowed values: off, falloc, full)" ++ }, + { NULL } + }; + +diff --git a/qemu-doc.texi b/qemu-doc.texi +index 54ab3c5..dc5b49e 100644 +--- a/qemu-doc.texi ++++ b/qemu-doc.texi +@@ -527,6 +527,15 @@ Linux or NTFS on Windows), then only the written sectors will reserve + space. Use @code{qemu-img info} to know the real size used by the + image or @code{ls -ls} on Unix/Linux. + ++Supported options: ++@table @code ++@item preallocation ++Preallocation mode (allowed values: @code{off}, @code{falloc}, @code{full}). ++@code{falloc} mode preallocates space for image by calling posix_fallocate(). ++@code{full} mode preallocates space for image by writing zeros to underlying ++storage. ++@end table ++ + @item qcow2 + QEMU image format, the most versatile format. Use it to have smaller + images (useful if your filesystem does not supports holes, for example +diff --git a/qemu-img.texi b/qemu-img.texi +index 5f99ebb..80d3261 100644 +--- a/qemu-img.texi ++++ b/qemu-img.texi +@@ -392,6 +392,15 @@ Linux or NTFS on Windows), then only the written sectors will reserve + space. Use @code{qemu-img info} to know the real size used by the + image or @code{ls -ls} on Unix/Linux. + ++Supported options: ++@table @code ++@item preallocation ++Preallocation mode (allowed values: @code{off}, @code{falloc}, @code{full}). ++@code{falloc} mode preallocates space for image by calling posix_fallocate(). ++@code{full} mode preallocates space for image by writing zeros to underlying ++storage. ++@end table ++ + @item qcow2 + QEMU image format, the most versatile format. Use it to have smaller + images (useful if your filesystem does not supports holes, for example +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-Fail-gracefully-if-no-working-alignment-is.patch b/SOURCES/kvm-raw-posix-Fail-gracefully-if-no-working-alignment-is.patch new file mode 100644 index 0000000..09e50c3 --- /dev/null +++ b/SOURCES/kvm-raw-posix-Fail-gracefully-if-no-working-alignment-is.patch @@ -0,0 +1,141 @@ +From ea0e0a4820d0dfa1227bd8351d89e9d55b25da44 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 17 Mar 2015 12:59:01 +0100 +Subject: [PATCH 12/16] raw-posix: Fail gracefully if no working alignment is + found + +Message-id: <1424365599-9801-3-git-send-email-stefanha@redhat.com> +Patchwork-id: 63913 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/2] raw-posix: Fail gracefully if no working alignment is found +Bugzilla: 1184363 +RH-Acked-by: Max Reitz +RH-Acked-by: John Snow +RH-Acked-by: Laszlo Ersek + +From: Kevin Wolf + +If qemu couldn't find out what O_DIRECT alignment to use with a given +file, it would run into assert(bdrv_opt_mem_align(bs) != 0); in block.c +and confuse users. This adds a more descriptive error message for such +cases. + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit df26a35025427f34c1d4e5a8e51152371a5e231e) +Signed-off-by: Stefan Hajnoczi +--- + block/raw-posix.c | 35 +++++++++++++++++++++++++++-------- + 1 file changed, 27 insertions(+), 8 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 6a50856..af526ca 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -213,7 +213,7 @@ static int raw_normalize_devicepath(const char **filename) + } + #endif + +-static void raw_probe_alignment(BlockDriverState *bs) ++static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp) + { + BDRVRawState *s = bs->opaque; + char *buf; +@@ -232,24 +232,24 @@ static void raw_probe_alignment(BlockDriverState *bs) + s->buf_align = 0; + + #ifdef BLKSSZGET +- if (ioctl(s->fd, BLKSSZGET, §or_size) >= 0) { ++ if (ioctl(fd, BLKSSZGET, §or_size) >= 0) { + bs->request_alignment = sector_size; + } + #endif + #ifdef DKIOCGETBLOCKSIZE +- if (ioctl(s->fd, DKIOCGETBLOCKSIZE, §or_size) >= 0) { ++ if (ioctl(fd, DKIOCGETBLOCKSIZE, §or_size) >= 0) { + bs->request_alignment = sector_size; + } + #endif + #ifdef DIOCGSECTORSIZE +- if (ioctl(s->fd, DIOCGSECTORSIZE, §or_size) >= 0) { ++ if (ioctl(fd, DIOCGSECTORSIZE, §or_size) >= 0) { + bs->request_alignment = sector_size; + } + #endif + #ifdef CONFIG_XFS + if (s->is_xfs) { + struct dioattr da; +- if (xfsctl(NULL, s->fd, XFS_IOC_DIOINFO, &da) >= 0) { ++ if (xfsctl(NULL, fd, XFS_IOC_DIOINFO, &da) >= 0) { + bs->request_alignment = da.d_miniosz; + /* The kernel returns wrong information for d_mem */ + /* s->buf_align = da.d_mem; */ +@@ -262,7 +262,7 @@ static void raw_probe_alignment(BlockDriverState *bs) + size_t align; + buf = qemu_memalign(MAX_BLOCKSIZE, 2 * MAX_BLOCKSIZE); + for (align = 512; align <= MAX_BLOCKSIZE; align <<= 1) { +- if (pread(s->fd, buf + align, MAX_BLOCKSIZE, 0) >= 0) { ++ if (pread(fd, buf + align, MAX_BLOCKSIZE, 0) >= 0) { + s->buf_align = align; + break; + } +@@ -274,13 +274,18 @@ static void raw_probe_alignment(BlockDriverState *bs) + size_t align; + buf = qemu_memalign(s->buf_align, MAX_BLOCKSIZE); + for (align = 512; align <= MAX_BLOCKSIZE; align <<= 1) { +- if (pread(s->fd, buf, align, 0) >= 0) { ++ if (pread(fd, buf, align, 0) >= 0) { + bs->request_alignment = align; + break; + } + } + qemu_vfree(buf); + } ++ ++ if (!s->buf_align || !bs->request_alignment) { ++ error_setg(errp, "Could not find working O_DIRECT alignment. " ++ "Try cache.direct=off."); ++ } + } + + static void raw_parse_flags(int bdrv_flags, int *open_flags) +@@ -459,6 +464,7 @@ static int raw_reopen_prepare(BDRVReopenState *state, + BDRVRawState *s; + BDRVRawReopenState *raw_s; + int ret = 0; ++ Error *local_err = NULL; + + assert(state != NULL); + assert(state->bs != NULL); +@@ -531,6 +537,19 @@ static int raw_reopen_prepare(BDRVReopenState *state, + ret = -1; + } + } ++ ++ /* Fail already reopen_prepare() if we can't get a working O_DIRECT ++ * alignment with the new fd. */ ++ if (raw_s->fd != -1) { ++ raw_probe_alignment(state->bs, raw_s->fd, &local_err); ++ if (local_err) { ++ qemu_close(raw_s->fd); ++ raw_s->fd = -1; ++ error_propagate(errp, local_err); ++ ret = -EINVAL; ++ } ++ } ++ + return ret; + } + +@@ -573,7 +592,7 @@ static int raw_refresh_limits(BlockDriverState *bs) + { + BDRVRawState *s = bs->opaque; + +- raw_probe_alignment(bs); ++ raw_probe_alignment(bs, s->fd, errp); + bs->bl.opt_mem_alignment = s->buf_align; + + return 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-Fetch-max-sectors-for-host-block-device.patch b/SOURCES/kvm-raw-posix-Fetch-max-sectors-for-host-block-device.patch new file mode 100644 index 0000000..e24544e --- /dev/null +++ b/SOURCES/kvm-raw-posix-Fetch-max-sectors-for-host-block-device.patch @@ -0,0 +1,67 @@ +From 52288902dd647cbcfa470a11867163a6e5983297 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 11 Jul 2016 05:33:38 +0200 +Subject: [PATCH 5/7] raw-posix: Fetch max sectors for host block device + +RH-Author: Fam Zheng +Message-id: <1468215219-30793-6-git-send-email-famz@redhat.com> +Patchwork-id: 71109 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 5/6] raw-posix: Fetch max sectors for host block device +Bugzilla: 1318199 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +This is sometimes a useful value we should count in. + +Signed-off-by: Fam Zheng +Reviewed-by: Eric Blake +Signed-off-by: Kevin Wolf +(cherry picked from commit 6f6071745bd0366221f5a0160ed7d18d0e38b9f7) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 92fcb6c..ed97bd4 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -587,9 +587,33 @@ static void raw_reopen_abort(BDRVReopenState *state) + state->opaque = NULL; + } + ++static int hdev_get_max_transfer_length(int fd) ++{ ++#ifdef BLKSECTGET ++ int max_sectors = 0; ++ if (ioctl(fd, BLKSECTGET, &max_sectors) == 0) { ++ return max_sectors; ++ } else { ++ return -errno; ++ } ++#else ++ return -ENOSYS; ++#endif ++} ++ + static void raw_refresh_limits(BlockDriverState *bs, Error **errp) + { + BDRVRawState *s = bs->opaque; ++ struct stat st; ++ ++ if (!fstat(s->fd, &st)) { ++ if (S_ISBLK(st.st_mode)) { ++ int ret = hdev_get_max_transfer_length(s->fd); ++ if (ret >= 0) { ++ bs->bl.max_transfer_length = ret; ++ } ++ } ++ } + + raw_probe_alignment(bs, s->fd, errp); + bs->bl.opt_mem_alignment = s->buf_align; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-Fix-.bdrv_co_get_block_status-for-unaligne.patch b/SOURCES/kvm-raw-posix-Fix-.bdrv_co_get_block_status-for-unaligne.patch new file mode 100644 index 0000000..adae243 --- /dev/null +++ b/SOURCES/kvm-raw-posix-Fix-.bdrv_co_get_block_status-for-unaligne.patch @@ -0,0 +1,57 @@ +From 4237964a9f433faaf643166a8ce9c070dc4cf165 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 14 Jan 2016 15:10:31 +0100 +Subject: [PATCH] raw-posix: Fix .bdrv_co_get_block_status() for unaligned + image size + +Message-id: <1452784231-14211-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 68756 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] raw-posix: Fix .bdrv_co_get_block_status() for unaligned image size +Bugzilla: 1283116 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +From: Kevin Wolf + +Image files with an unaligned image size have a final hole that starts +at EOF, i.e. in the middle of a sector. Currently, *pnum == 0 is +returned when checking the status of this sector. In qemu-img, this +triggers an assertion failure. + +In order to fix this, one type for the sector that contains EOF must be +found. Treating a hole as data is safe, so this patch rounds the +calculated number of data sectors up, so that a partial sector at EOF is +treated as a full data sector. + +This fixes https://bugzilla.redhat.com/show_bug.cgi?id=1229394 + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Tested-by: Cole Robinson +(cherry picked from commit b8684454e152ca2e100f4b59d80de2be27186206) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 72a9dc0..1f5275f 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1452,8 +1452,9 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + *pnum = nb_sectors; + ret = BDRV_BLOCK_DATA; + } else if (data == start) { +- /* On a data extent, compute sectors to the end of the extent. */ +- *pnum = MIN(nb_sectors, (hole - start) / BDRV_SECTOR_SIZE); ++ /* On a data extent, compute sectors to the end of the extent, ++ * possibly including a partial sector at EOF. */ ++ *pnum = MIN(nb_sectors, DIV_ROUND_UP(hole - start, BDRV_SECTOR_SIZE)); + ret = BDRV_BLOCK_DATA; + } else { + /* On a hole, compute sectors to the beginning of the next extent. */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-Fix-raw_co_get_block_status-after-EOF.patch b/SOURCES/kvm-raw-posix-Fix-raw_co_get_block_status-after-EOF.patch new file mode 100644 index 0000000..b850b9b --- /dev/null +++ b/SOURCES/kvm-raw-posix-Fix-raw_co_get_block_status-after-EOF.patch @@ -0,0 +1,89 @@ +From d058befe667eb24da6884a78efc23443dd9de566 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:17 +0100 +Subject: [PATCH 38/41] raw-posix: Fix raw_co_get_block_status() after EOF + +Message-id: <1416324620-16229-5-git-send-email-mreitz@redhat.com> +Patchwork-id: 62439 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 4/7] raw-posix: Fix raw_co_get_block_status() after EOF +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +As its comment states, raw_co_get_block_status() should unconditionally +return 0 and set *pnum to 0 for after EOF. + +An assertion after lseek(..., SEEK_HOLE) tried to catch this case by +asserting that errno != -ENXIO (which would indicate a position after +the EOF); but it should be errno != ENXIO instead. Regardless of that, +there should be no such assertion at all. If bdrv_getlength() returned +an outdated value and the image has been resized outside of qemu, +lseek() will return with errno == ENXIO. Just return that value as an +error then. + +Setting *pnum to 0 and returning 0 should not be done here, as in that +case we should update the device length as well. So, from qemu's +perspective, the file has not been resized; it's just that there was an +error querying sectors beyond a certain point (the actual file size). + +Additionally, nb_sectors should be clamped against the image end. This +was probably not an issue if FIEMAP or SEEK_HOLE/SEEK_DATA worked, but +the fallback did not take this case into account. + +Reported-by: Kevin Wolf +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Message-id: 1414148280-17949-2-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e6d7ec32dd315422a023ed3425fe36df8c274eeb) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 781ebf3..75a81b1 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1362,10 +1362,6 @@ static int64_t try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, + + *hole = lseek(s->fd, start, SEEK_HOLE); + if (*hole == -1) { +- /* -ENXIO indicates that sector_num was past the end of the file. +- * There is a virtual hole there. */ +- assert(errno != -ENXIO); +- + return -errno; + } + +@@ -1405,6 +1401,7 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + int nb_sectors, int *pnum) + { + off_t start, data = 0, hole = 0; ++ int64_t total_size; + int64_t ret; + + ret = fd_open(bs); +@@ -1413,6 +1410,15 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + } + + start = sector_num * BDRV_SECTOR_SIZE; ++ total_size = bdrv_getlength(bs); ++ if (total_size < 0) { ++ return total_size; ++ } else if (start >= total_size) { ++ *pnum = 0; ++ return 0; ++ } else if (start + nb_sectors * BDRV_SECTOR_SIZE > total_size) { ++ nb_sectors = DIV_ROUND_UP(total_size - start, BDRV_SECTOR_SIZE); ++ } + + ret = try_seek_hole(bs, start, &data, &hole, pnum); + if (ret < 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-SEEK_HOLE-suffices-get-rid-of-FIEMAP.patch b/SOURCES/kvm-raw-posix-SEEK_HOLE-suffices-get-rid-of-FIEMAP.patch new file mode 100644 index 0000000..82d80af --- /dev/null +++ b/SOURCES/kvm-raw-posix-SEEK_HOLE-suffices-get-rid-of-FIEMAP.patch @@ -0,0 +1,177 @@ +From 726f113a3fbea10e910a2962fa25b6274314380c Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:19 +0100 +Subject: [PATCH 40/41] raw-posix: SEEK_HOLE suffices, get rid of FIEMAP + +Message-id: <1416324620-16229-7-git-send-email-mreitz@redhat.com> +Patchwork-id: 62441 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 6/7] raw-posix: SEEK_HOLE suffices, get rid of FIEMAP +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +From: Markus Armbruster + +Commit 5500316 (May 2012) implemented raw_co_is_allocated() as +follows: + +1. If defined(CONFIG_FIEMAP), use the FS_IOC_FIEMAP ioctl + +2. Else if defined(SEEK_HOLE) && defined(SEEK_DATA), use lseek() + +3. Else pretend there are no holes + +Later on, raw_co_is_allocated() was generalized to +raw_co_get_block_status(). + +Commit 4f11aa8 (May 2014) changed it to try the three methods in order +until success, because "there may be implementations which support +[SEEK_HOLE/SEEK_DATA] but not [FIEMAP] (e.g., NFSv4.2) as well as vice +versa." + +Unfortunately, we used FIEMAP incorrectly: we lacked FIEMAP_FLAG_SYNC. +Commit 38c4d0a (Sep 2014) added it. Because that's a significant +speed hit, the next commit 7c159037 put SEEK_HOLE/SEEK_DATA first. + +As you see, the obvious use of FIEMAP is wrong, and the correct use is +slow. I guess this puts it somewhere between -7 "The obvious use is +wrong" and -10 "It's impossible to get right" on Rusty Russel's Hard +to Misuse scale[*]. + +"Fortunately", the FIEMAP code is used only when + +* SEEK_HOLE/SEEK_DATA aren't defined, but CONFIG_FIEMAP is + + Uncommon. SEEK_HOLE had no XFS implementation between 2011 (when it + was introduced for ext4 and btrfs) and 2012. + +* SEEK_HOLE/SEEK_DATA and CONFIG_FIEMAP are defined, but lseek() fails + + Unlikely. + +Thus, the FIEMAP code executes rarely. Makes it a nice hidey-hole for +bugs. Worse, bugs hiding there can theoretically bite even on a host +that has SEEK_HOLE/SEEK_DATA. + +I don't want to worry about this crap, not even theoretically. Get +rid of it. + +[*] http://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html + +Signed-off-by: Markus Armbruster +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Max Reitz +(cherry picked from commit c4875e5b2216cf5427459e619b10f75083565792) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/raw-posix.c + +Upstream has a "needs_alignment" field in BDRVRawState, downstream does +not. + +Signed-off-by: Max Reitz +--- + block/raw-posix.c | 63 ++++--------------------------------------------------- + 1 file changed, 4 insertions(+), 59 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index a46e50b..aeb8a97 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -57,9 +57,6 @@ + #include + #include + #endif +-#ifdef CONFIG_FIEMAP +-#include +-#endif + #ifdef CONFIG_FALLOCATE_PUNCH_HOLE + #include + #endif +@@ -147,9 +144,6 @@ typedef struct BDRVRawState { + bool has_discard:1; + bool has_write_zeroes:1; + bool discard_zeroes:1; +-#ifdef CONFIG_FIEMAP +- bool skip_fiemap; +-#endif + } BDRVRawState; + + typedef struct BDRVRawReopenState { +@@ -1308,52 +1302,6 @@ out: + return result; + } + +-static int try_fiemap(BlockDriverState *bs, off_t start, off_t *data, +- off_t *hole, int nb_sectors) +-{ +-#ifdef CONFIG_FIEMAP +- BDRVRawState *s = bs->opaque; +- int ret = 0; +- struct { +- struct fiemap fm; +- struct fiemap_extent fe; +- } f; +- +- if (s->skip_fiemap) { +- return -ENOTSUP; +- } +- +- f.fm.fm_start = start; +- f.fm.fm_length = (int64_t)nb_sectors * BDRV_SECTOR_SIZE; +- f.fm.fm_flags = FIEMAP_FLAG_SYNC; +- f.fm.fm_extent_count = 1; +- f.fm.fm_reserved = 0; +- if (ioctl(s->fd, FS_IOC_FIEMAP, &f) == -1) { +- s->skip_fiemap = true; +- return -errno; +- } +- +- if (f.fm.fm_mapped_extents == 0) { +- /* No extents found, data is beyond f.fm.fm_start + f.fm.fm_length. +- * f.fm.fm_start + f.fm.fm_length must be clamped to the file size! +- */ +- off_t length = lseek(s->fd, 0, SEEK_END); +- *hole = f.fm.fm_start; +- *data = MIN(f.fm.fm_start + f.fm.fm_length, length); +- } else { +- *data = f.fe.fe_logical; +- *hole = f.fe.fe_logical + f.fe.fe_length; +- if (f.fe.fe_flags & FIEMAP_EXTENT_UNWRITTEN) { +- ret |= BDRV_BLOCK_ZERO; +- } +- } +- +- return ret; +-#else +- return -ENOTSUP; +-#endif +-} +- + static int try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, + off_t *hole) + { +@@ -1422,13 +1370,10 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + + ret = try_seek_hole(bs, start, &data, &hole); + if (ret < 0) { +- ret = try_fiemap(bs, start, &data, &hole, nb_sectors); +- if (ret < 0) { +- /* Assume everything is allocated. */ +- data = 0; +- hole = start + nb_sectors * BDRV_SECTOR_SIZE; +- ret = 0; +- } ++ /* Assume everything is allocated. */ ++ data = 0; ++ hole = start + nb_sectors * BDRV_SECTOR_SIZE; ++ ret = 0; + } + + assert(ret >= 0); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-The-SEEK_HOLE-code-is-flawed-rewrite-it.patch b/SOURCES/kvm-raw-posix-The-SEEK_HOLE-code-is-flawed-rewrite-it.patch new file mode 100644 index 0000000..d33c6e9 --- /dev/null +++ b/SOURCES/kvm-raw-posix-The-SEEK_HOLE-code-is-flawed-rewrite-it.patch @@ -0,0 +1,197 @@ +From 03b3f6befef3ab33a422d4dad9c2b3892e49b686 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:20 +0100 +Subject: [PATCH 41/41] raw-posix: The SEEK_HOLE code is flawed, rewrite it + +Message-id: <1416324620-16229-8-git-send-email-mreitz@redhat.com> +Patchwork-id: 62442 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 7/7] raw-posix: The SEEK_HOLE code is flawed, rewrite it +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +From: Markus Armbruster + +On systems where SEEK_HOLE in a trailing hole seeks to EOF (Solaris, +but not Linux), try_seek_hole() reports trailing data instead. + +Additionally, unlikely lseek() failures are treated badly: + +* When SEEK_HOLE fails, try_seek_hole() reports trailing data. For + -ENXIO, there's in fact a trailing hole. Can happen only when + something truncated the file since we opened it. + +* When SEEK_HOLE succeeds, SEEK_DATA fails, and SEEK_END succeeds, + then try_seek_hole() reports a trailing hole. This is okay only + when SEEK_DATA failed with -ENXIO (which means the non-trailing hole + found by SEEK_HOLE has since become trailing somehow). For other + failures (unlikely), it's wrong. + +* When SEEK_HOLE succeeds, SEEK_DATA fails, SEEK_END fails (unlikely), + then try_seek_hole() reports bogus data [-1,start), which its caller + raw_co_get_block_status() turns into zero sectors of data. Could + theoretically lead to infinite loops in code that attempts to scan + data vs. hole forward. + +Rewrite from scratch, with very careful comments. + +Signed-off-by: Markus Armbruster +Reviewed-by: Max Reitz +Reviewed-by: Eric Blake +Signed-off-by: Max Reitz +(cherry picked from commit d1f06fe665acdd7aa7a46a5ef88172c3d7d3028e) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 111 +++++++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 85 insertions(+), 26 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index aeb8a97..6a50856 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1302,28 +1302,86 @@ out: + return result; + } + +-static int try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, +- off_t *hole) ++/* ++ * Find allocation range in @bs around offset @start. ++ * May change underlying file descriptor's file offset. ++ * If @start is not in a hole, store @start in @data, and the ++ * beginning of the next hole in @hole, and return 0. ++ * If @start is in a non-trailing hole, store @start in @hole and the ++ * beginning of the next non-hole in @data, and return 0. ++ * If @start is in a trailing hole or beyond EOF, return -ENXIO. ++ * If we can't find out, return a negative errno other than -ENXIO. ++ */ ++static int find_allocation(BlockDriverState *bs, off_t start, ++ off_t *data, off_t *hole) + { + #if defined SEEK_HOLE && defined SEEK_DATA + BDRVRawState *s = bs->opaque; ++ off_t offs; + +- *hole = lseek(s->fd, start, SEEK_HOLE); +- if (*hole == -1) { +- return -errno; ++ /* ++ * SEEK_DATA cases: ++ * D1. offs == start: start is in data ++ * D2. offs > start: start is in a hole, next data at offs ++ * D3. offs < 0, errno = ENXIO: either start is in a trailing hole ++ * or start is beyond EOF ++ * If the latter happens, the file has been truncated behind ++ * our back since we opened it. All bets are off then. ++ * Treating like a trailing hole is simplest. ++ * D4. offs < 0, errno != ENXIO: we learned nothing ++ */ ++ offs = lseek(s->fd, start, SEEK_DATA); ++ if (offs < 0) { ++ return -errno; /* D3 or D4 */ ++ } ++ assert(offs >= start); ++ ++ if (offs > start) { ++ /* D2: in hole, next data at offs */ ++ *hole = start; ++ *data = offs; ++ return 0; + } + +- if (*hole > start) { ++ /* D1: in data, end not yet known */ ++ ++ /* ++ * SEEK_HOLE cases: ++ * H1. offs == start: start is in a hole ++ * If this happens here, a hole has been dug behind our back ++ * since the previous lseek(). ++ * H2. offs > start: either start is in data, next hole at offs, ++ * or start is in trailing hole, EOF at offs ++ * Linux treats trailing holes like any other hole: offs == ++ * start. Solaris seeks to EOF instead: offs > start (blech). ++ * If that happens here, a hole has been dug behind our back ++ * since the previous lseek(). ++ * H3. offs < 0, errno = ENXIO: start is beyond EOF ++ * If this happens, the file has been truncated behind our ++ * back since we opened it. Treat it like a trailing hole. ++ * H4. offs < 0, errno != ENXIO: we learned nothing ++ * Pretend we know nothing at all, i.e. "forget" about D1. ++ */ ++ offs = lseek(s->fd, start, SEEK_HOLE); ++ if (offs < 0) { ++ return -errno; /* D1 and (H3 or H4) */ ++ } ++ assert(offs >= start); ++ ++ if (offs > start) { ++ /* ++ * D1 and H2: either in data, next hole at offs, or it was in ++ * data but is now in a trailing hole. In the latter case, ++ * all bets are off. Treating it as if it there was data all ++ * the way to EOF is safe, so simply do that. ++ */ + *data = start; +- } else { +- /* On a hole. We need another syscall to find its end. */ +- *data = lseek(s->fd, start, SEEK_DATA); +- if (*data == -1) { +- *data = lseek(s->fd, 0, SEEK_END); +- } ++ *hole = offs; ++ return 0; + } + +- return 0; ++ /* D1 and H1 */ ++ return -EBUSY; + #else + return -ENOTSUP; + #endif +@@ -1368,25 +1426,26 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + nb_sectors = DIV_ROUND_UP(total_size - start, BDRV_SECTOR_SIZE); + } + +- ret = try_seek_hole(bs, start, &data, &hole); +- if (ret < 0) { +- /* Assume everything is allocated. */ +- data = 0; +- hole = start + nb_sectors * BDRV_SECTOR_SIZE; +- ret = 0; +- } +- +- assert(ret >= 0); +- +- if (data <= start) { ++ ret = find_allocation(bs, start, &data, &hole); ++ if (ret == -ENXIO) { ++ /* Trailing hole */ ++ *pnum = nb_sectors; ++ ret = BDRV_BLOCK_ZERO; ++ } else if (ret < 0) { ++ /* No info available, so pretend there are no holes */ ++ *pnum = nb_sectors; ++ ret = BDRV_BLOCK_DATA; ++ } else if (data == start) { + /* On a data extent, compute sectors to the end of the extent. */ + *pnum = MIN(nb_sectors, (hole - start) / BDRV_SECTOR_SIZE); +- return ret | BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; ++ ret = BDRV_BLOCK_DATA; + } else { + /* On a hole, compute sectors to the beginning of the next extent. */ ++ assert(hole == start); + *pnum = MIN(nb_sectors, (data - start) / BDRV_SECTOR_SIZE); +- return ret | BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID | start; ++ ret = BDRV_BLOCK_ZERO; + } ++ return ret | BDRV_BLOCK_OFFSET_VALID | start; + } + + static coroutine_fn BlockDriverAIOCB *raw_aio_discard(BlockDriverState *bs, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-add-support-for-write_zeroes-on-XFS-and-bl.patch.patch b/SOURCES/kvm-raw-posix-add-support-for-write_zeroes-on-XFS-and-bl.patch.patch new file mode 100644 index 0000000..6059b8c --- /dev/null +++ b/SOURCES/kvm-raw-posix-add-support-for-write_zeroes-on-XFS-and-bl.patch.patch @@ -0,0 +1,225 @@ +From adf32529b8b95ed360356f13bd9a7f2a4b707412 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:29 +0100 +Subject: [PATCH 41/50] raw-posix: add support for write_zeroes on XFS and + block devices + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-44-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56080 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 43/52] raw-posix: add support for write_zeroes on XFS and block devices +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +The code is similar to the implementation of discard and write_zeroes +with UNMAP. However, failure must be propagated up to block.c. + +The stale page cache problem can be reproduced as follows: + + # modprobe scsi-debug lbpws=1 lbprz=1 + # ./qemu-io /dev/sdXX + qemu-io> write -P 0xcc 0 2M + qemu-io> write -z 0 1M + qemu-io> read -P 0x00 0 512 + Pattern verification failed at offset 0, 512 bytes + qemu-io> read -v 0 512 + 00000000: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc ................ + ... + + # ./qemu-io --cache=none /dev/sdXX + qemu-io> write -P 0xcc 0 2M + qemu-io> write -z 0 1M + qemu-io> read -P 0x00 0 512 + qemu-io> read -v 0 512 + 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + ... + +And similarly with discard instead of "write -z". + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 97a2ae34537882df34810d538ab1f51085499d2c) +--- + block/raw-aio.h | 3 +- + block/raw-posix.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++-------- + 2 files changed, 74 insertions(+), 13 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/raw-aio.h | 3 +- + block/raw-posix.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++-------- + 2 files changed, 74 insertions(+), 13 deletions(-) + +diff --git a/block/raw-aio.h b/block/raw-aio.h +index c61f159..7ad0a8a 100644 +--- a/block/raw-aio.h ++++ b/block/raw-aio.h +@@ -21,9 +21,10 @@ + #define QEMU_AIO_IOCTL 0x0004 + #define QEMU_AIO_FLUSH 0x0008 + #define QEMU_AIO_DISCARD 0x0010 ++#define QEMU_AIO_WRITE_ZEROES 0x0020 + #define QEMU_AIO_TYPE_MASK \ + (QEMU_AIO_READ|QEMU_AIO_WRITE|QEMU_AIO_IOCTL|QEMU_AIO_FLUSH| \ +- QEMU_AIO_DISCARD) ++ QEMU_AIO_DISCARD|QEMU_AIO_WRITE_ZEROES) + + /* AIO flags */ + #define QEMU_AIO_MISALIGNED 0x1000 +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 815a80b..f410668 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -142,6 +142,7 @@ typedef struct BDRVRawState { + bool is_xfs:1; + #endif + bool has_discard:1; ++ bool has_write_zeroes:1; + bool discard_zeroes:1; + } BDRVRawState; + +@@ -327,6 +328,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + #endif + + s->has_discard = true; ++ s->has_write_zeroes = true; + + if (fstat(s->fd, &st) < 0) { + error_setg_errno(errp, errno, "Could not stat file"); +@@ -345,9 +347,11 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + #ifdef __linux__ + /* On Linux 3.10, BLKDISCARD leaves stale data in the page cache. Do + * not rely on the contents of discarded blocks unless using O_DIRECT. ++ * Same for BLKZEROOUT. + */ + if (!(bs->open_flags & BDRV_O_NOCACHE)) { + s->discard_zeroes = false; ++ s->has_write_zeroes = false; + } + #endif + } +@@ -703,6 +707,23 @@ static ssize_t handle_aiocb_rw(RawPosixAIOData *aiocb) + } + + #ifdef CONFIG_XFS ++static int xfs_write_zeroes(BDRVRawState *s, int64_t offset, uint64_t bytes) ++{ ++ struct xfs_flock64 fl; ++ ++ memset(&fl, 0, sizeof(fl)); ++ fl.l_whence = SEEK_SET; ++ fl.l_start = offset; ++ fl.l_len = bytes; ++ ++ if (xfsctl(NULL, s->fd, XFS_IOC_ZERO_RANGE, &fl) < 0) { ++ DEBUG_BLOCK_PRINT("cannot write zero range (%s)\n", strerror(errno)); ++ return -errno; ++ } ++ ++ return 0; ++} ++ + static int xfs_discard(BDRVRawState *s, int64_t offset, uint64_t bytes) + { + struct xfs_flock64 fl; +@@ -721,6 +742,42 @@ static int xfs_discard(BDRVRawState *s, int64_t offset, uint64_t bytes) + } + #endif + ++static ssize_t handle_aiocb_write_zeroes(RawPosixAIOData *aiocb) ++{ ++ int ret = -EOPNOTSUPP; ++ BDRVRawState *s = aiocb->bs->opaque; ++ ++ if (s->has_write_zeroes == 0) { ++ return -ENOTSUP; ++ } ++ ++ if (aiocb->aio_type & QEMU_AIO_BLKDEV) { ++#ifdef BLKZEROOUT ++ do { ++ uint64_t range[2] = { aiocb->aio_offset, aiocb->aio_nbytes }; ++ if (ioctl(aiocb->aio_fildes, BLKZEROOUT, range) == 0) { ++ return 0; ++ } ++ } while (errno == EINTR); ++ ++ ret = -errno; ++#endif ++ } else { ++#ifdef CONFIG_XFS ++ if (s->is_xfs) { ++ return xfs_write_zeroes(s, aiocb->aio_offset, aiocb->aio_nbytes); ++ } ++#endif ++ } ++ ++ if (ret == -ENODEV || ret == -ENOSYS || ret == -EOPNOTSUPP || ++ ret == -ENOTTY) { ++ s->has_write_zeroes = false; ++ ret = -ENOTSUP; ++ } ++ return ret; ++} ++ + static ssize_t handle_aiocb_discard(RawPosixAIOData *aiocb) + { + int ret = -EOPNOTSUPP; +@@ -805,6 +862,9 @@ static int aio_worker(void *arg) + case QEMU_AIO_DISCARD: + ret = handle_aiocb_discard(aiocb); + break; ++ case QEMU_AIO_WRITE_ZEROES: ++ ret = handle_aiocb_write_zeroes(aiocb); ++ break; + default: + fprintf(stderr, "invalid aio request (0x%x)\n", aiocb->aio_type); + ret = -EINVAL; +@@ -1257,13 +1317,13 @@ static int coroutine_fn raw_co_write_zeroes( + BDRVRawState *s = bs->opaque; + + if (!(flags & BDRV_REQ_MAY_UNMAP)) { +- return -ENOTSUP; +- } +- if (!s->discard_zeroes) { +- return -ENOTSUP; ++ return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, ++ QEMU_AIO_WRITE_ZEROES); ++ } else if (s->discard_zeroes) { ++ return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, ++ QEMU_AIO_DISCARD); + } +- return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, +- QEMU_AIO_DISCARD); ++ return -ENOTSUP; + } + + static int raw_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) +@@ -1613,13 +1673,13 @@ static coroutine_fn int hdev_co_write_zeroes(BlockDriverState *bs, + return rc; + } + if (!(flags & BDRV_REQ_MAY_UNMAP)) { +- return -ENOTSUP; +- } +- if (!s->discard_zeroes) { +- return -ENOTSUP; ++ return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, ++ QEMU_AIO_WRITE_ZEROES|QEMU_AIO_BLKDEV); ++ } else if (s->discard_zeroes) { ++ return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, ++ QEMU_AIO_DISCARD|QEMU_AIO_BLKDEV); + } +- return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, +- QEMU_AIO_DISCARD|QEMU_AIO_BLKDEV); ++ return -ENOTSUP; + } + + static int hdev_create(const char *filename, QEMUOptionParameter *options, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch b/SOURCES/kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch new file mode 100644 index 0000000..4a2d1ce --- /dev/null +++ b/SOURCES/kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch @@ -0,0 +1,180 @@ +From 4a5025f224c53d2194e2f62cb730a1fef961ff45 Mon Sep 17 00:00:00 2001 +Message-Id: <4a5025f224c53d2194e2f62cb730a1fef961ff45.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:27 +0100 +Subject: [PATCH 39/50] raw-posix: implement write_zeroes with MAY_UNMAP for + files + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-42-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56078 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 41/52] raw-posix: implement write_zeroes with MAY_UNMAP for files +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Writing zeroes to a file can be done by punching a hole if +MAY_UNMAP is set. + +Note that in this case ENOTSUP is not ignored, but makes +the block layer fall back to the generic implementation. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 260a82e524b7f86c12b8e39d4c3f208af95645f7) +--- + block/raw-posix.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- + trace-events | 1 + + 2 files changed, 65 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + block/raw-posix.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- + trace-events | 1 + + 2 files changed, 65 insertions(+), 2 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 7a140b0..ca5bcb3 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -139,9 +139,10 @@ typedef struct BDRVRawState { + void *aio_ctx; + #endif + #ifdef CONFIG_XFS +- bool is_xfs : 1; ++ bool is_xfs:1; + #endif +- bool has_discard : 1; ++ bool has_discard:1; ++ bool discard_zeroes:1; + } BDRVRawState; + + typedef struct BDRVRawReopenState { +@@ -283,6 +284,7 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + Error *local_err = NULL; + const char *filename; + int fd, ret; ++ struct stat st; + + opts = qemu_opts_create_nofail(&raw_runtime_opts); + qemu_opts_absorb_qdict(opts, options, &local_err); +@@ -325,6 +327,15 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + #endif + + s->has_discard = true; ++ ++ if (fstat(s->fd, &st) < 0) { ++ error_setg_errno(errp, errno, "Could not stat file"); ++ goto fail; ++ } ++ if (S_ISREG(st.st_mode)) { ++ s->discard_zeroes = true; ++ } ++ + #ifdef CONFIG_XFS + if (platform_test_xfs_fd(s->fd)) { + s->is_xfs = true; +@@ -788,6 +799,29 @@ static int aio_worker(void *arg) + return ret; + } + ++static int paio_submit_co(BlockDriverState *bs, int fd, ++ int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, ++ int type) ++{ ++ RawPosixAIOData *acb = g_slice_new(RawPosixAIOData); ++ ThreadPool *pool; ++ ++ acb->bs = bs; ++ acb->aio_type = type; ++ acb->aio_fildes = fd; ++ ++ if (qiov) { ++ acb->aio_iov = qiov->iov; ++ acb->aio_niov = qiov->niov; ++ } ++ acb->aio_nbytes = nb_sectors * 512; ++ acb->aio_offset = sector_num * 512; ++ ++ trace_paio_submit_co(sector_num, nb_sectors, type); ++ pool = aio_get_thread_pool(bdrv_get_aio_context(bs)); ++ return thread_pool_submit_co(pool, aio_worker, acb); ++} ++ + static BlockDriverAIOCB *paio_submit(BlockDriverState *bs, int fd, + int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, + BlockDriverCompletionFunc *cb, void *opaque, int type) +@@ -1200,6 +1234,31 @@ static coroutine_fn BlockDriverAIOCB *raw_aio_discard(BlockDriverState *bs, + cb, opaque, QEMU_AIO_DISCARD); + } + ++static int coroutine_fn raw_co_write_zeroes( ++ BlockDriverState *bs, int64_t sector_num, ++ int nb_sectors, BdrvRequestFlags flags) ++{ ++ BDRVRawState *s = bs->opaque; ++ ++ if (!(flags & BDRV_REQ_MAY_UNMAP)) { ++ return -ENOTSUP; ++ } ++ if (!s->discard_zeroes) { ++ return -ENOTSUP; ++ } ++ return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, ++ QEMU_AIO_DISCARD); ++} ++ ++static int raw_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) ++{ ++ BDRVRawState *s = bs->opaque; ++ ++ bdi->unallocated_blocks_are_zero = s->discard_zeroes; ++ bdi->can_write_zeroes_with_unmap = s->discard_zeroes; ++ return 0; ++} ++ + static QEMUOptionParameter raw_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -1222,6 +1281,7 @@ static BlockDriver bdrv_file = { + .bdrv_create = raw_create, + .bdrv_has_zero_init = bdrv_has_zero_init_1, + .bdrv_co_get_block_status = raw_co_get_block_status, ++ .bdrv_co_write_zeroes = raw_co_write_zeroes, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +@@ -1230,6 +1290,7 @@ static BlockDriver bdrv_file = { + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, ++ .bdrv_get_info = raw_get_info, + .bdrv_get_allocated_file_size + = raw_get_allocated_file_size, + +@@ -1584,6 +1645,7 @@ static BlockDriver bdrv_host_device = { + + .bdrv_truncate = raw_truncate, + .bdrv_getlength = raw_getlength, ++ .bdrv_get_info = raw_get_info, + .bdrv_get_allocated_file_size + = raw_get_allocated_file_size, + +diff --git a/trace-events b/trace-events +index 40d4312..e9ee94f 100644 +--- a/trace-events ++++ b/trace-events +@@ -120,6 +120,7 @@ thread_pool_cancel(void *req, void *opaque) "req %p opaque %p" + + # block/raw-win32.c + # block/raw-posix.c ++paio_submit_co(int64_t sector_num, int nb_sectors, int type) "sector_num %"PRId64" nb_sectors %d type %d" + paio_submit(void *acb, void *opaque, int64_t sector_num, int nb_sectors, int type) "acb %p opaque %p sector_num %"PRId64" nb_sectors %d type %d" + + # ioport.c +-- +1.7.11.7 + diff --git a/SOURCES/kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch.patch b/SOURCES/kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch.patch new file mode 100644 index 0000000..749bb0d --- /dev/null +++ b/SOURCES/kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch.patch @@ -0,0 +1,98 @@ +From f1b8961cbef828b62ba1ca7da79cd516f7dfc52b Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:28 +0100 +Subject: [PATCH 40/50] raw-posix: implement write_zeroes with MAY_UNMAP for + block devices + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-43-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56079 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 42/52] raw-posix: implement write_zeroes with MAY_UNMAP for block devices +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +See the next commit for the description of the Linux kernel problem +that is worked around in raw_open_common. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d0b4503ed2d8713791c38839341b023f78d1a3d9) +--- + block/raw-posix.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/raw-posix.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index ca5bcb3..815a80b 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -335,6 +335,22 @@ static int raw_open_common(BlockDriverState *bs, QDict *options, + if (S_ISREG(st.st_mode)) { + s->discard_zeroes = true; + } ++ if (S_ISBLK(st.st_mode)) { ++#ifdef BLKDISCARDZEROES ++ unsigned int arg; ++ if (ioctl(s->fd, BLKDISCARDZEROES, &arg) == 0 && arg) { ++ s->discard_zeroes = true; ++ } ++#endif ++#ifdef __linux__ ++ /* On Linux 3.10, BLKDISCARD leaves stale data in the page cache. Do ++ * not rely on the contents of discarded blocks unless using O_DIRECT. ++ */ ++ if (!(bs->open_flags & BDRV_O_NOCACHE)) { ++ s->discard_zeroes = false; ++ } ++#endif ++ } + + #ifdef CONFIG_XFS + if (platform_test_xfs_fd(s->fd)) { +@@ -1586,6 +1602,26 @@ static coroutine_fn BlockDriverAIOCB *hdev_aio_discard(BlockDriverState *bs, + cb, opaque, QEMU_AIO_DISCARD|QEMU_AIO_BLKDEV); + } + ++static coroutine_fn int hdev_co_write_zeroes(BlockDriverState *bs, ++ int64_t sector_num, int nb_sectors, BdrvRequestFlags flags) ++{ ++ BDRVRawState *s = bs->opaque; ++ int rc; ++ ++ rc = fd_open(bs); ++ if (rc < 0) { ++ return rc; ++ } ++ if (!(flags & BDRV_REQ_MAY_UNMAP)) { ++ return -ENOTSUP; ++ } ++ if (!s->discard_zeroes) { ++ return -ENOTSUP; ++ } ++ return paio_submit_co(bs, s->fd, sector_num, NULL, nb_sectors, ++ QEMU_AIO_DISCARD|QEMU_AIO_BLKDEV); ++} ++ + static int hdev_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { +@@ -1637,6 +1673,7 @@ static BlockDriver bdrv_host_device = { + .bdrv_reopen_abort = raw_reopen_abort, + .bdrv_create = hdev_create, + .create_options = raw_create_options, ++ .bdrv_co_write_zeroes = hdev_co_write_zeroes, + + .bdrv_aio_readv = raw_aio_readv, + .bdrv_aio_writev = raw_aio_writev, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-raw-posix-raw_co_get_block_status-return-value.patch b/SOURCES/kvm-raw-posix-raw_co_get_block_status-return-value.patch new file mode 100644 index 0000000..3b4d4b8 --- /dev/null +++ b/SOURCES/kvm-raw-posix-raw_co_get_block_status-return-value.patch @@ -0,0 +1,122 @@ +From 89ef5998670954140a6e605f6a5e6286ee3a5eb2 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Tue, 18 Nov 2014 15:30:18 +0100 +Subject: [PATCH 39/41] raw-posix: raw_co_get_block_status() return value + +Message-id: <1416324620-16229-6-git-send-email-mreitz@redhat.com> +Patchwork-id: 62440 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH v3 5/7] raw-posix: raw_co_get_block_status() return value +Bugzilla: 1160237 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Markus Armbruster + +Instead of generating the full return value thrice in try_fiemap(), +try_seek_hole() and as a fall-back in raw_co_get_block_status() itself, +generate the value only in raw_co_get_block_status(). + +While at it, also remove the pnum parameter from try_fiemap() and +try_seek_hole(). + +Suggested-by: Kevin Wolf +Signed-off-by: Max Reitz +Reviewed-by: Eric Blake +Reviewed-by: Kevin Wolf +Message-id: 1414148280-17949-3-git-send-email-mreitz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d7f62751a14d1d34c7d388431a3e403ef1fe28a5) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 75a81b1..a46e50b 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1308,12 +1308,12 @@ out: + return result; + } + +-static int64_t try_fiemap(BlockDriverState *bs, off_t start, off_t *data, +- off_t *hole, int nb_sectors, int *pnum) ++static int try_fiemap(BlockDriverState *bs, off_t start, off_t *data, ++ off_t *hole, int nb_sectors) + { + #ifdef CONFIG_FIEMAP + BDRVRawState *s = bs->opaque; +- int64_t ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; ++ int ret = 0; + struct { + struct fiemap fm; + struct fiemap_extent fe; +@@ -1354,8 +1354,8 @@ static int64_t try_fiemap(BlockDriverState *bs, off_t start, off_t *data, + #endif + } + +-static int64_t try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, +- off_t *hole, int *pnum) ++static int try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, ++ off_t *hole) + { + #if defined SEEK_HOLE && defined SEEK_DATA + BDRVRawState *s = bs->opaque; +@@ -1375,7 +1375,7 @@ static int64_t try_seek_hole(BlockDriverState *bs, off_t start, off_t *data, + } + } + +- return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; ++ return 0; + #else + return -ENOTSUP; + #endif +@@ -1402,7 +1402,7 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + { + off_t start, data = 0, hole = 0; + int64_t total_size; +- int64_t ret; ++ int ret; + + ret = fd_open(bs); + if (ret < 0) { +@@ -1420,28 +1420,28 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + nb_sectors = DIV_ROUND_UP(total_size - start, BDRV_SECTOR_SIZE); + } + +- ret = try_seek_hole(bs, start, &data, &hole, pnum); ++ ret = try_seek_hole(bs, start, &data, &hole); + if (ret < 0) { +- ret = try_fiemap(bs, start, &data, &hole, nb_sectors, pnum); ++ ret = try_fiemap(bs, start, &data, &hole, nb_sectors); + if (ret < 0) { + /* Assume everything is allocated. */ + data = 0; + hole = start + nb_sectors * BDRV_SECTOR_SIZE; +- ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; ++ ret = 0; + } + } + ++ assert(ret >= 0); ++ + if (data <= start) { + /* On a data extent, compute sectors to the end of the extent. */ + *pnum = MIN(nb_sectors, (hole - start) / BDRV_SECTOR_SIZE); ++ return ret | BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; + } else { + /* On a hole, compute sectors to the beginning of the next extent. */ + *pnum = MIN(nb_sectors, (data - start) / BDRV_SECTOR_SIZE); +- ret &= ~BDRV_BLOCK_DATA; +- ret |= BDRV_BLOCK_ZERO; ++ return ret | BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID | start; + } +- +- return ret; + } + + static coroutine_fn BlockDriverAIOCB *raw_aio_discard(BlockDriverState *bs, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-raw-posix-report-unwritten-extents-as-zero.patch b/SOURCES/kvm-raw-posix-report-unwritten-extents-as-zero.patch new file mode 100644 index 0000000..226e318 --- /dev/null +++ b/SOURCES/kvm-raw-posix-report-unwritten-extents-as-zero.patch @@ -0,0 +1,45 @@ +From e58d84de9cb73fba1b98c57edc63e751b4171c4e Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:45 +0200 +Subject: [PATCH 20/81] raw-posix: report unwritten extents as zero + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-21-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55003 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 20/26] raw-posix: report unwritten extents as zero +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +These are created for example with XFS_IOC_ZERO_RANGE. + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit f5f7abcfd50bca38ae278a9c7a3ed60fba3d76dc) +--- + block/raw-posix.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index a829ce0..c7ab908 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1128,6 +1128,9 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + } else { + data = f.fe.fe_logical; + hole = f.fe.fe_logical + f.fe.fe_length; ++ if (f.fe.fe_flags & FIEMAP_EXTENT_UNWRITTEN) { ++ ret |= BDRV_BLOCK_ZERO; ++ } + } + + #elif defined SEEK_HOLE && defined SEEK_DATA +-- +1.7.1 + diff --git a/SOURCES/kvm-raw-posix-return-get_block_status-data-and-flags.patch b/SOURCES/kvm-raw-posix-return-get_block_status-data-and-flags.patch new file mode 100644 index 0000000..1a411f1 --- /dev/null +++ b/SOURCES/kvm-raw-posix-return-get_block_status-data-and-flags.patch @@ -0,0 +1,94 @@ +From 145376957366516a0b47f4a83d93b6c0c026e469 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 18 Oct 2013 08:14:44 +0200 +Subject: [PATCH 19/81] raw-posix: return get_block_status data and flags + +RH-Author: Paolo Bonzini +Message-id: <1382084091-16636-20-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55002 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 19/26] raw-posix: return get_block_status data and flags +Bugzilla: 989646 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit 63390a8d14c9006f42bdaab22291c9c97676322d) +--- + block/raw-posix.c | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/raw-posix.c | 17 ++++++++++------- + 1 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/block/raw-posix.c b/block/raw-posix.c +index 9a7c5a8..a829ce0 100644 +--- a/block/raw-posix.c ++++ b/block/raw-posix.c +@@ -1089,7 +1089,7 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + int nb_sectors, int *pnum) + { + off_t start, data, hole; +- int ret; ++ int64_t ret; + + ret = fd_open(bs); + if (ret < 0) { +@@ -1097,6 +1097,7 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + } + + start = sector_num * BDRV_SECTOR_SIZE; ++ ret = BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | start; + + #ifdef CONFIG_FIEMAP + +@@ -1114,7 +1115,7 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + if (ioctl(s->fd, FS_IOC_FIEMAP, &f) == -1) { + /* Assume everything is allocated. */ + *pnum = nb_sectors; +- return 1; ++ return ret; + } + + if (f.fm.fm_mapped_extents == 0) { +@@ -1141,7 +1142,7 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + + /* Most likely EINVAL. Assume everything is allocated. */ + *pnum = nb_sectors; +- return 1; ++ return ret; + } + + if (hole > start) { +@@ -1154,19 +1155,21 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs, + } + } + #else +- *pnum = nb_sectors; +- return 1; ++ data = 0; ++ hole = start + nb_sectors * BDRV_SECTOR_SIZE; + #endif + + if (data <= start) { + /* On a data extent, compute sectors to the end of the extent. */ + *pnum = MIN(nb_sectors, (hole - start) / BDRV_SECTOR_SIZE); +- return 1; + } else { + /* On a hole, compute sectors to the beginning of the next extent. */ + *pnum = MIN(nb_sectors, (data - start) / BDRV_SECTOR_SIZE); +- return 0; ++ ret &= ~BDRV_BLOCK_DATA; ++ ret |= BDRV_BLOCK_ZERO; + } ++ ++ return ret; + } + + static coroutine_fn BlockDriverAIOCB *raw_aio_discard(BlockDriverState *bs, +-- +1.7.1 + diff --git a/SOURCES/kvm-rbd-Only-look-for-qemu-specific-copy-of-librbd.so.1.patch b/SOURCES/kvm-rbd-Only-look-for-qemu-specific-copy-of-librbd.so.1.patch new file mode 100644 index 0000000..6e564a5 --- /dev/null +++ b/SOURCES/kvm-rbd-Only-look-for-qemu-specific-copy-of-librbd.so.1.patch @@ -0,0 +1,53 @@ +From ece4ff225717364edc3136599113709dacdc5731 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Kevin Wolf +Date: Thu, 31 Oct 2013 12:13:14 +0100 +Subject: [PATCH 13/14] rbd: Only look for qemu-specific copy of librbd.so.1 + +RH-Author: Kevin Wolf +Message-id: <1383221595-24285-3-git-send-email-kwolf@redhat.com> +Patchwork-id: 55184 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/3] rbd: Only look for qemu-specific copy of librbd.so.1 +Bugzilla: 989608 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: 989608 +Upstream status: n/a +Downstream status: Forward ported from RHEL 6 + +For non-technical reasons, we don't want to pick up a random librbd that +may be installed for other reasons on this system, but only a librbd +that was specificially installed in order to consciously extend qemu. + +So change the gmodule_open() argument to an absolute path. + +Signed-off-by: Kevin Wolf +--- + block/rbd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + block/rbd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/rbd.c b/block/rbd.c +index 7f5cfca..7b6e03b 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -1122,7 +1122,7 @@ static int qemu_rbd_load_libs(void) + return -1; + } + +- librbd_handle = g_module_open("librbd.so.1", 0); ++ librbd_handle = g_module_open("/usr/lib64/qemu/librbd.so.1", 0); + if (!librbd_handle) { + error_report("error loading librbd: %s", g_module_error()); + return -1; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rbd-fix-ceph-settings-precedence.patch b/SOURCES/kvm-rbd-fix-ceph-settings-precedence.patch new file mode 100644 index 0000000..a5b699e --- /dev/null +++ b/SOURCES/kvm-rbd-fix-ceph-settings-precedence.patch @@ -0,0 +1,113 @@ +From 109d7dedc79629f58fd9b685ccd9990b90f374e9 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Thu, 5 Nov 2015 15:20:58 +0100 +Subject: [PATCH 3/6] rbd: fix ceph settings precedence + +Message-id: <1446736858-29005-3-git-send-email-stefanha@redhat.com> +Patchwork-id: 68294 +O-Subject: [RHEL-7.2.z qemu-kvm PATCH 2/2] rbd: fix ceph settings precedence +Bugzilla: 1277248 1279389 +RH-Acked-by: Max Reitz +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf + +From: Josh Durgin + +Apply the ceph settings from a config file before any ceph settings +from the command line. Since the ceph config file location may be +specified on the command line, parse it once to read the config file, +and do a second pass to apply the rest of the command line ceph +options. + +Signed-off-by: Josh Durgin +Signed-off-by: Kevin Wolf +(cherry picked from commit e34d8f297d51b7ffa5dce72df1e45fa94cff989c) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/rbd.c - downstream does not use Error* + +Signed-off-by: Stefan Hajnoczi +--- + block/rbd.c | 34 +++++++++++++++++++++++++--------- + 1 file changed, 25 insertions(+), 9 deletions(-) + +diff --git a/block/rbd.c b/block/rbd.c +index 11a39ac..b982658 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -235,7 +235,8 @@ static char *qemu_rbd_parse_clientname(const char *conf, char *clientname) + return NULL; + } + +-static int qemu_rbd_set_conf(rados_t cluster, const char *conf) ++static int qemu_rbd_set_conf(rados_t cluster, const char *conf, ++ bool only_read_conf_file) + { + char *p, *buf; + char name[RBD_MAX_CONF_NAME_SIZE]; +@@ -267,14 +268,18 @@ static int qemu_rbd_set_conf(rados_t cluster, const char *conf) + qemu_rbd_unescape(value); + + if (strcmp(name, "conf") == 0) { +- ret = rados_conf_read_file(cluster, value); +- if (ret < 0) { +- error_report("error reading conf file %s", value); +- break; ++ /* read the conf file alone, so it doesn't override more ++ specific settings for a particular device */ ++ if (only_read_conf_file) { ++ ret = rados_conf_read_file(cluster, value); ++ if (ret < 0) { ++ error_report("error reading conf file %s", value); ++ break; ++ } + } + } else if (strcmp(name, "id") == 0) { + /* ignore, this is parsed by qemu_rbd_parse_clientname() */ +- } else { ++ } else if (!only_read_conf_file) { + ret = rados_conf_set(cluster, name, value); + if (ret < 0) { + error_report("invalid conf option %s", name); +@@ -341,12 +346,17 @@ static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options, + if (strstr(conf, "conf=") == NULL) { + /* try default location, but ignore failure */ + rados_conf_read_file(cluster, NULL); ++ } else if (conf[0] != '\0' && ++ qemu_rbd_set_conf(cluster, conf, true) < 0) { ++ rados_shutdown(cluster); ++ error_report("error setting config options"); ++ return -EIO; + } + + if (conf[0] != '\0' && +- qemu_rbd_set_conf(cluster, conf) < 0) { +- error_report("error setting config options"); ++ qemu_rbd_set_conf(cluster, conf, false) < 0) { + rados_shutdown(cluster); ++ error_report("error setting config options"); + return -EIO; + } + +@@ -504,10 +514,16 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, + if (strstr(conf, "conf=") == NULL) { + /* try default location, but ignore failure */ + rados_conf_read_file(s->cluster, NULL); ++ } else if (conf[0] != '\0') { ++ r = qemu_rbd_set_conf(s->cluster, conf, true); ++ if (r < 0) { ++ error_report("error setting config options"); ++ goto failed_shutdown; ++ } + } + + if (conf[0] != '\0') { +- r = qemu_rbd_set_conf(s->cluster, conf); ++ r = qemu_rbd_set_conf(s->cluster, conf, false); + if (r < 0) { + error_report("error setting config options"); + goto failed_shutdown; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rbd-link-and-load-librbd-dynamically.patch b/SOURCES/kvm-rbd-link-and-load-librbd-dynamically.patch new file mode 100644 index 0000000..4f74bef --- /dev/null +++ b/SOURCES/kvm-rbd-link-and-load-librbd-dynamically.patch @@ -0,0 +1,614 @@ +From 64d9964fc97fc525b86e12c5f385dea7e646a3b0 Mon Sep 17 00:00:00 2001 +Message-Id: <64d9964fc97fc525b86e12c5f385dea7e646a3b0.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Kevin Wolf +Date: Thu, 31 Oct 2013 12:13:13 +0100 +Subject: [PATCH 12/14] rbd: link and load librbd dynamically + +RH-Author: Kevin Wolf +Message-id: <1383221595-24285-2-git-send-email-kwolf@redhat.com> +Patchwork-id: 55183 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/3] rbd: link and load librbd dynamically +Bugzilla: 989608 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: 989608 +Upstream status: Rejected +Downstream status: Forward ported from RHEL 6 + +This is the downstream-only part that gets us rid of the build-time +dependency on librbd and loads it dynamically when using an image. +It is based on a patch submitted to qemu-devel and archived as +http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg01814.html + +For the forward-port to RHEL 7, I decided to implement the review +suggestions from RHEL 6 to move the function pointers out of a separate +struct to the top level, so that callers don't have to be changed +compared to upstream. This should also reduce merge conflicts in future +forward-ports. + +Note that this is not much more than compile tested; the real testing +will be done by Inktank as soon as they can access RHEL 7. + +Original commit message follows: + +This allows the rbd block driver to detect symbols in the installed +version of librbd, and enable or disable features appropriately. This +obviates the #ifdefs regarding librbd versions. + +Loading librbd dynamically also makes the rbd block driver easier to +install and package, since it removes the dependency on librbd at +build time. + +Add structures containing the necessary function pointer signatures +and types from librbd, and fill them in the first time the rbd module +is used. Use glib's g_module interface so we don't preclude future +portability, and don't have to deal with odd dlopen behavior directly. + +Internally, librbd and some libraries it depends on use C++ templates, +which mean that they each contain a defined weak symbol for their +definition. Due to the way the linker resolves duplicate symbols, the +libraries loaded by librbd end up using the template definitions from +librbd, creating a circular dependency. This means that once librbd is +loaded, it won't be unloaded. Changing this behavior might work with a +Sun ld, but there doesn't seem to be a portable (or even working with +GNU ld) way to hide these C++ symbols correctly. Instead, never unload +librbd, and explicitly make it resident. + +Signed-off-by: Josh Durgin +Signed-off-by: Kevin Wolf +--- + block/Makefile.objs | 2 +- + block/rbd.c | 218 ++++++++++++++++++++++++++++++++++++++++------------ + block/rbd_types.h | 91 ++++++++++++++++++++++ + configure | 41 +--------- + 4 files changed, 263 insertions(+), 89 deletions(-) + create mode 100644 block/rbd_types.h + +Signed-off-by: Michal Novotny +--- + block/Makefile.objs | 2 +- + block/rbd.c | 218 ++++++++++++++++++++++++++++++++++++++++------------ + block/rbd_types.h | 91 ++++++++++++++++++++++ + configure | 41 +--------- + 4 files changed, 263 insertions(+), 89 deletions(-) + create mode 100644 block/rbd_types.h + +diff --git a/block/Makefile.objs b/block/Makefile.objs +index 5f0358a..6b8d5ec 100644 +--- a/block/Makefile.objs ++++ b/block/Makefile.objs +@@ -12,7 +12,7 @@ ifeq ($(CONFIG_POSIX),y) + block-obj-y += nbd.o sheepdog.o + block-obj-$(CONFIG_LIBISCSI) += iscsi.o + block-obj-$(CONFIG_CURL) += curl.o +-block-obj-$(CONFIG_RBD) += rbd.o ++block-obj-y += rbd.o + block-obj-$(CONFIG_GLUSTERFS) += gluster.o + block-obj-$(CONFIG_LIBSSH2) += ssh.o + endif +diff --git a/block/rbd.c b/block/rbd.c +index 0f2608b..7f5cfca 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -11,13 +11,14 @@ + * GNU GPL, version 2 or (at your option) any later version. + */ + ++#include + #include + + #include "qemu-common.h" + #include "qemu/error-report.h" + #include "block/block_int.h" + +-#include ++#include "rbd_types.h" + + /* + * When specifying the image filename use: +@@ -44,13 +45,6 @@ + * leading "\". + */ + +-/* rbd_aio_discard added in 0.1.2 */ +-#if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 2) +-#define LIBRBD_SUPPORTS_DISCARD +-#else +-#undef LIBRBD_SUPPORTS_DISCARD +-#endif +- + #define OBJ_MAX_SIZE (1UL << OBJ_DEFAULT_OBJ_ORDER) + + #define RBD_MAX_CONF_NAME_SIZE 128 +@@ -106,6 +100,10 @@ typedef struct BDRVRBDState { + RADOSCB *event_rcb; + } BDRVRBDState; + ++static bool librbd_loaded; ++static GModule *librbd_handle; ++ ++static int qemu_rbd_load_libs(void); + static void rbd_aio_bh_cb(void *opaque); + + static int qemu_rbd_next_tok(char *dst, int dst_len, +@@ -310,6 +308,10 @@ static int qemu_rbd_create(const char *filename, QEMUOptionParameter *options) + return -EINVAL; + } + ++ if (qemu_rbd_load_libs() < 0) { ++ return -EIO; ++ } ++ + /* Read out options */ + while (options && options->name) { + if (!strcmp(options->name, BLOCK_OPT_SIZE)) { +@@ -487,6 +489,10 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags) + goto failed_opts; + } + ++ if (qemu_rbd_load_libs() < 0) { ++ return -EIO; ++ } ++ + clientname = qemu_rbd_parse_clientname(conf, clientname_buf); + r = rados_create(&s->cluster, clientname); + if (r < 0) { +@@ -678,28 +684,6 @@ static void rbd_aio_bh_cb(void *opaque) + } + } + +-static int rbd_aio_discard_wrapper(rbd_image_t image, +- uint64_t off, +- uint64_t len, +- rbd_completion_t comp) +-{ +-#ifdef LIBRBD_SUPPORTS_DISCARD +- return rbd_aio_discard(image, off, len, comp); +-#else +- return -ENOTSUP; +-#endif +-} +- +-static int rbd_aio_flush_wrapper(rbd_image_t image, +- rbd_completion_t comp) +-{ +-#ifdef LIBRBD_SUPPORTS_AIO_FLUSH +- return rbd_aio_flush(image, comp); +-#else +- return -ENOTSUP; +-#endif +-} +- + static BlockDriverAIOCB *rbd_start_aio(BlockDriverState *bs, + int64_t sector_num, + QEMUIOVector *qiov, +@@ -762,10 +746,10 @@ static BlockDriverAIOCB *rbd_start_aio(BlockDriverState *bs, + r = rbd_aio_read(s->image, off, size, buf, c); + break; + case RBD_AIO_DISCARD: +- r = rbd_aio_discard_wrapper(s->image, off, size, c); ++ r = rbd_aio_discard(s->image, off, size, c); + break; + case RBD_AIO_FLUSH: +- r = rbd_aio_flush_wrapper(s->image, c); ++ r = rbd_aio_flush(s->image, c); + break; + default: + r = -EINVAL; +@@ -806,7 +790,6 @@ static BlockDriverAIOCB *qemu_rbd_aio_writev(BlockDriverState *bs, + RBD_AIO_WRITE); + } + +-#ifdef LIBRBD_SUPPORTS_AIO_FLUSH + static BlockDriverAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs, + BlockDriverCompletionFunc *cb, + void *opaque) +@@ -814,19 +797,14 @@ static BlockDriverAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs, + return rbd_start_aio(bs, 0, NULL, 0, cb, opaque, RBD_AIO_FLUSH); + } + +-#else +- + static int qemu_rbd_co_flush(BlockDriverState *bs) + { +-#if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 1) +- /* rbd_flush added in 0.1.1 */ + BDRVRBDState *s = bs->opaque; +- return rbd_flush(s->image); +-#else ++ if (rbd_flush) { ++ return rbd_flush(s->image); ++ } + return 0; +-#endif + } +-#endif + + static int qemu_rbd_getinfo(BlockDriverState *bs, BlockDriverInfo *bdi) + { +@@ -964,7 +942,6 @@ static int qemu_rbd_snap_list(BlockDriverState *bs, + return snap_count; + } + +-#ifdef LIBRBD_SUPPORTS_DISCARD + static BlockDriverAIOCB* qemu_rbd_aio_discard(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, +@@ -974,7 +951,6 @@ static BlockDriverAIOCB* qemu_rbd_aio_discard(BlockDriverState *bs, + return rbd_start_aio(bs, sector_num, NULL, nb_sectors, cb, opaque, + RBD_AIO_DISCARD); + } +-#endif + + static QEMUOptionParameter qemu_rbd_create_options[] = { + { +@@ -1004,16 +980,9 @@ static BlockDriver bdrv_rbd = { + + .bdrv_aio_readv = qemu_rbd_aio_readv, + .bdrv_aio_writev = qemu_rbd_aio_writev, +- +-#ifdef LIBRBD_SUPPORTS_AIO_FLUSH + .bdrv_aio_flush = qemu_rbd_aio_flush, +-#else + .bdrv_co_flush_to_disk = qemu_rbd_co_flush, +-#endif +- +-#ifdef LIBRBD_SUPPORTS_DISCARD + .bdrv_aio_discard = qemu_rbd_aio_discard, +-#endif + + .bdrv_snapshot_create = qemu_rbd_snap_create, + .bdrv_snapshot_delete = qemu_rbd_snap_remove, +@@ -1026,4 +995,153 @@ static void bdrv_rbd_init(void) + bdrv_register(&bdrv_rbd); + } + ++typedef struct LibSymbol { ++ const char *name; ++ gpointer *addr; ++} LibSymbol; ++ ++static int qemu_rbd_set_functions(GModule *lib, const LibSymbol *funcs) ++{ ++ int i = 0; ++ while (funcs[i].name) { ++ const char *name = funcs[i].name; ++ if (!g_module_symbol(lib, name, funcs[i].addr)) { ++ error_report("%s could not be loaded from librbd or librados: %s", ++ name, g_module_error()); ++ return -1; ++ } ++ ++i; ++ } ++ return 0; ++} ++ ++/* ++ * Set function pointers for basic librados and librbd ++ * functions that have always been present in these libraries. ++ */ ++static int qemu_rbd_set_mandatory_functions(void) ++{ ++ LibSymbol symbols[] = { ++ {"rados_create", ++ (gpointer *) &rados_create}, ++ {"rados_connect", ++ (gpointer *) &rados_connect}, ++ {"rados_shutdown", ++ (gpointer *) &rados_shutdown}, ++ {"rados_conf_read_file", ++ (gpointer *) &rados_conf_read_file}, ++ {"rados_conf_set", ++ (gpointer *) &rados_conf_set}, ++ {"rados_ioctx_create", ++ (gpointer *) &rados_ioctx_create}, ++ {"rados_ioctx_destroy", ++ (gpointer *) &rados_ioctx_destroy}, ++ {"rbd_create", ++ (gpointer *) &rbd_create}, ++ {"rbd_open", ++ (gpointer *) &rbd_open}, ++ {"rbd_close", ++ (gpointer *) &rbd_close}, ++ {"rbd_resize", ++ (gpointer *) &rbd_resize}, ++ {"rbd_stat", ++ (gpointer *) &rbd_stat}, ++ {"rbd_snap_list", ++ (gpointer *) &rbd_snap_list}, ++ {"rbd_snap_list_end", ++ (gpointer *) &rbd_snap_list_end}, ++ {"rbd_snap_create", ++ (gpointer *) &rbd_snap_create}, ++ {"rbd_snap_remove", ++ (gpointer *) &rbd_snap_remove}, ++ {"rbd_snap_rollback", ++ (gpointer *) &rbd_snap_rollback}, ++ {"rbd_aio_write", ++ (gpointer *) &rbd_aio_write}, ++ {"rbd_aio_read", ++ (gpointer *) &rbd_aio_read}, ++ {"rbd_aio_create_completion", ++ (gpointer *) &rbd_aio_create_completion}, ++ {"rbd_aio_get_return_value", ++ (gpointer *) &rbd_aio_get_return_value}, ++ {"rbd_aio_release", ++ (gpointer *) &rbd_aio_release}, ++ {NULL} ++ }; ++ ++ if (qemu_rbd_set_functions(librbd_handle, symbols) < 0) { ++ return -1; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Detect whether the installed version of librbd ++ * supports newer functionality, and enable or disable ++ * it appropriately in bdrv_rbd. ++ */ ++static void qemu_rbd_set_optional_functions(void) ++{ ++ if (g_module_symbol(librbd_handle, "rbd_flush", ++ (gpointer *) &rbd_flush)) { ++ bdrv_rbd.bdrv_aio_flush = NULL; ++ bdrv_rbd.bdrv_co_flush_to_disk = qemu_rbd_co_flush; ++ } else { ++ rbd_flush = NULL; ++ bdrv_rbd.bdrv_co_flush_to_disk = NULL; ++ } ++ ++ if (g_module_symbol(librbd_handle, "rbd_aio_flush", ++ (gpointer *) &rbd_aio_flush)) { ++ bdrv_rbd.bdrv_co_flush_to_disk = NULL; ++ bdrv_rbd.bdrv_aio_flush = qemu_rbd_aio_flush; ++ } else { ++ rbd_aio_flush = NULL; ++ bdrv_rbd.bdrv_aio_flush = NULL; ++ } ++ ++ if (g_module_symbol(librbd_handle, "rbd_aio_discard", ++ (gpointer *) &rbd_aio_discard)) { ++ bdrv_rbd.bdrv_aio_discard = qemu_rbd_aio_discard; ++ } else { ++ rbd_aio_discard = NULL; ++ bdrv_rbd.bdrv_aio_discard = NULL; ++ } ++} ++ ++static int qemu_rbd_load_libs(void) ++{ ++ if (librbd_loaded) { ++ return 0; ++ } ++ ++ if (!g_module_supported()) { ++ error_report("modules are not supported on this platform: %s", ++ g_module_error()); ++ return -1; ++ } ++ ++ librbd_handle = g_module_open("librbd.so.1", 0); ++ if (!librbd_handle) { ++ error_report("error loading librbd: %s", g_module_error()); ++ return -1; ++ } ++ ++ /* ++ * Due to c++ templates used in librbd/librados and their ++ * dependencies, and linker duplicate trimming rules, closing ++ * librbd would leave it mapped. Make this explicit. ++ */ ++ g_module_make_resident(librbd_handle); ++ ++ if (qemu_rbd_set_mandatory_functions() < 0) { ++ return -1; ++ } ++ qemu_rbd_set_optional_functions(); ++ librbd_loaded = true; ++ ++ return 0; ++} ++ + block_init(bdrv_rbd_init); +diff --git a/block/rbd_types.h b/block/rbd_types.h +new file mode 100644 +index 0000000..f327cb4 +--- /dev/null ++++ b/block/rbd_types.h +@@ -0,0 +1,91 @@ ++/* ++ * Types and signatures for librados and librbd ++ * ++ * Copyright (C) 2013 Inktank Storage Inc. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, see . ++ */ ++ ++#ifndef QEMU_BLOCK_RBD_TYPES_H ++#define QEMU_BLOCK_RBD_TYPES_H ++ ++/* types from librados used by the rbd block driver */ ++ ++typedef void *rados_t; ++typedef void *rados_ioctx_t; ++ ++static int (*rados_create)(rados_t *cluster, const char * const id); ++static int (*rados_connect)(rados_t cluster); ++static void (*rados_shutdown)(rados_t cluster); ++static int (*rados_conf_read_file)(rados_t cluster, const char *path); ++static int (*rados_conf_set)(rados_t cluster, const char *option, ++ const char *value); ++static int (*rados_ioctx_create)(rados_t cluster, const char *pool_name, ++ rados_ioctx_t *ioctx); ++static void (*rados_ioctx_destroy)(rados_ioctx_t io); ++ ++/* types from librbd used by the rbd block driver*/ ++ ++typedef void *rbd_image_t; ++typedef void *rbd_completion_t; ++typedef void (*rbd_callback_t)(rbd_completion_t cb, void *arg); ++ ++typedef struct { ++ uint64_t id; ++ uint64_t size; ++ const char *name; ++} rbd_snap_info_t; ++ ++#define RBD_MAX_IMAGE_NAME_SIZE 96 ++#define RBD_MAX_BLOCK_NAME_SIZE 24 ++ ++typedef struct { ++ uint64_t size; ++ uint64_t obj_size; ++ uint64_t num_objs; ++ int order; ++ char block_name_prefix[RBD_MAX_BLOCK_NAME_SIZE]; ++ int64_t parent_pool; ++ char parent_name[RBD_MAX_IMAGE_NAME_SIZE]; ++} rbd_image_info_t; ++ ++static int (*rbd_create)(rados_ioctx_t io, const char *name, uint64_t size, ++ int *order); ++static int (*rbd_open)(rados_ioctx_t io, const char *name, rbd_image_t *image, ++ const char *snap_name); ++static int (*rbd_close)(rbd_image_t image); ++static int (*rbd_resize)(rbd_image_t image, uint64_t size); ++static int (*rbd_stat)(rbd_image_t image, rbd_image_info_t *info, ++ size_t infosize); ++static int (*rbd_snap_list)(rbd_image_t image, rbd_snap_info_t *snaps, ++ int *max_snaps); ++static void (*rbd_snap_list_end)(rbd_snap_info_t *snaps); ++static int (*rbd_snap_create)(rbd_image_t image, const char *snapname); ++static int (*rbd_snap_remove)(rbd_image_t image, const char *snapname); ++static int (*rbd_snap_rollback)(rbd_image_t image, const char *snapname); ++static int (*rbd_aio_write)(rbd_image_t image, uint64_t off, size_t len, ++ const char *buf, rbd_completion_t c); ++static int (*rbd_aio_read)(rbd_image_t image, uint64_t off, size_t len, ++ char *buf, rbd_completion_t c); ++static int (*rbd_aio_discard)(rbd_image_t image, uint64_t off, uint64_t len, ++ rbd_completion_t c); ++static int (*rbd_aio_create_completion)(void *cb_arg, ++ rbd_callback_t complete_cb, ++ rbd_completion_t *c); ++static ssize_t (*rbd_aio_get_return_value)(rbd_completion_t c); ++static void (*rbd_aio_release)(rbd_completion_t c); ++static int (*rbd_flush)(rbd_image_t image); ++static int (*rbd_aio_flush)(rbd_image_t image, rbd_completion_t c); ++ ++#endif +diff --git a/configure b/configure +index 4d1bc44..df587d7 100755 +--- a/configure ++++ b/configure +@@ -224,7 +224,6 @@ qom_cast_debug="yes" + trace_backend="nop" + trace_file="trace" + spice="" +-rbd="" + smartcard_nss="" + libusb="" + usb_redir="" +@@ -880,10 +879,6 @@ for opt do + ;; + --enable-glx) glx="yes" + ;; +- --disable-rbd) rbd="no" +- ;; +- --enable-rbd) rbd="yes" +- ;; + --disable-xfsctl) xfs="no" + ;; + --enable-xfsctl) xfs="yes" +@@ -1181,7 +1176,6 @@ echo " --with-trace-file=NAME Full PATH,NAME of file to store traces" + echo " Default:trace-" + echo " --disable-spice disable spice" + echo " --enable-spice enable spice" +-echo " --enable-rbd enable building the rados block device (rbd)" + echo " --disable-libiscsi disable iscsi support" + echo " --enable-libiscsi enable iscsi support" + echo " --disable-smartcard-nss disable smartcard nss support" +@@ -2250,10 +2244,10 @@ if test "$mingw32" = yes; then + else + glib_req_ver=2.12 + fi +-if $pkg_config --atleast-version=$glib_req_ver gthread-2.0 > /dev/null 2>&1 ++if $pkg_config --atleast-version=$glib_req_ver gthread-2.0 gmodule-2.0 > /dev/null 2>&1 + then +- glib_cflags=`$pkg_config --cflags gthread-2.0 2>/dev/null` +- glib_libs=`$pkg_config --libs gthread-2.0 2>/dev/null` ++ glib_cflags=`$pkg_config --cflags gthread-2.0 gmodule-2.0 2>/dev/null` ++ glib_libs=`$pkg_config --libs gthread-2.0 gmodule-2.0 2>/dev/null` + LIBS="$glib_libs $LIBS" + libs_qga="$glib_libs $libs_qga" + else +@@ -2354,31 +2348,6 @@ if test "$mingw32" != yes -a "$pthread" = no; then + fi + + ########################################## +-# rbd probe +-if test "$rbd" != "no" ; then +- cat > $TMPC < +-#include +-int main(void) { +- rados_t cluster; +- rados_create(&cluster, NULL); +- return 0; +-} +-EOF +- rbd_libs="-lrbd -lrados" +- if compile_prog "" "$rbd_libs" ; then +- rbd=yes +- libs_tools="$rbd_libs $libs_tools" +- libs_softmmu="$rbd_libs $libs_softmmu" +- else +- if test "$rbd" = "yes" ; then +- feature_not_found "rados block device" +- fi +- rbd=no +- fi +-fi +- +-########################################## + # libssh2 probe + min_libssh2_version=1.2.8 + if test "$libssh2" != "no" ; then +@@ -3573,7 +3542,6 @@ echo "vhost-scsi support $vhost_scsi" + echo "Trace backend $trace_backend" + echo "Trace output file $trace_file-" + echo "spice support $spice ($spice_protocol_version/$spice_server_version)" +-echo "rbd support $rbd" + echo "xfsctl support $xfs" + echo "nss used $smartcard_nss" + echo "libusb $libusb" +@@ -3928,9 +3896,6 @@ fi + if test "$qom_cast_debug" = "yes" ; then + echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak + fi +-if test "$rbd" = "yes" ; then +- echo "CONFIG_RBD=y" >> $config_host_mak +-fi + + echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rbd-make-qemu-s-cache-setting-override-any-ceph-sett.patch b/SOURCES/kvm-rbd-make-qemu-s-cache-setting-override-any-ceph-sett.patch new file mode 100644 index 0000000..22705e6 --- /dev/null +++ b/SOURCES/kvm-rbd-make-qemu-s-cache-setting-override-any-ceph-sett.patch @@ -0,0 +1,85 @@ +From 23bc583f18eb8ffc28604a4ae42e2f7a55b31c3e Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Thu, 5 Nov 2015 15:20:57 +0100 +Subject: [PATCH 2/6] rbd: make qemu's cache setting override any ceph setting + +Message-id: <1446736858-29005-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 68293 +O-Subject: [RHEL-7.2.z qemu-kvm PATCH 1/2] rbd: make qemu's cache setting override any ceph setting +Bugzilla: 1277248 +RH-Acked-by: Max Reitz +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf + +From: Josh Durgin + +To be safe, when cache=none is used ceph settings should not be able +to override it to turn on caching. This was previously possible with +rbd_cache=true in the rbd device configuration or a ceph configuration +file. Similarly, rbd settings could have turned off caching when qemu +requested it, although this would just be a performance problem. + +Fix this by changing rbd's cache setting to match qemu after all other +ceph settings have been applied. + +Signed-off-by: Josh Durgin +Reviewed-by: Jeff Cody +Signed-off-by: Kevin Wolf +(cherry picked from commit 99a3c89d5d538dc6c360e35dffb797cfe06e9cda) +Signed-off-by: Miroslav Rezanina + +Conflicts: + block/rbd.c - downstream doesn't use Error **errp + +Signed-off-by: Stefan Hajnoczi +--- + block/rbd.c | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/block/rbd.c b/block/rbd.c +index 4eea455..11a39ac 100644 +--- a/block/rbd.c ++++ b/block/rbd.c +@@ -501,19 +501,6 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, + s->snap = g_strdup(snap_buf); + } + +- /* +- * Fallback to more conservative semantics if setting cache +- * options fails. Ignore errors from setting rbd_cache because the +- * only possible error is that the option does not exist, and +- * librbd defaults to no caching. If write through caching cannot +- * be set up, fall back to no caching. +- */ +- if (flags & BDRV_O_NOCACHE) { +- rados_conf_set(s->cluster, "rbd_cache", "false"); +- } else { +- rados_conf_set(s->cluster, "rbd_cache", "true"); +- } +- + if (strstr(conf, "conf=") == NULL) { + /* try default location, but ignore failure */ + rados_conf_read_file(s->cluster, NULL); +@@ -527,6 +514,19 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, + } + } + ++ /* ++ * Fallback to more conservative semantics if setting cache ++ * options fails. Ignore errors from setting rbd_cache because the ++ * only possible error is that the option does not exist, and ++ * librbd defaults to no caching. If write through caching cannot ++ * be set up, fall back to no caching. ++ */ ++ if (flags & BDRV_O_NOCACHE) { ++ rados_conf_set(s->cluster, "rbd_cache", "false"); ++ } else { ++ rados_conf_set(s->cluster, "rbd_cache", "true"); ++ } ++ + r = rados_connect(s->cluster); + if (r < 0) { + error_report("error connecting"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rdma-Fix-block-during-rdma-migration.patch b/SOURCES/kvm-rdma-Fix-block-during-rdma-migration.patch new file mode 100644 index 0000000..ed3d110 --- /dev/null +++ b/SOURCES/kvm-rdma-Fix-block-during-rdma-migration.patch @@ -0,0 +1,49 @@ +From 68dbf16886540b4ec6edc46409f5adf0b97f1dcf Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert (git)" +Date: Mon, 20 Oct 2014 14:55:55 +0200 +Subject: [PATCH 43/43] rdma: Fix block during rdma migration + +Message-id: <1413816955-4190-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 61746 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] rdma: Fix block during rdma migration +Bugzilla: 1152969 +RH-Acked-by: Juan Quintela +RH-Acked-by: Amit Shah +RH-Acked-by: Marcel Apfelbaum + +From: Gonglei + +If the networking break or there's something wrong with rdma +device(ib0 with no IP) during rdma migration, the main_loop of +qemu will be blocked in rdma_destroy_id. I add rdma_ack_cm_event +to fix this bug. + +Signed-off-by: Mo Yuxiang +Signed-off-by: Gonglei +Reviewed-by: Michael R. Hines +Signed-off-by: Juan Quintela +(cherry picked from commit 2a9343470432573acf06379bcbf8e5e6568507e4) +--- + migration-rdma.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + migration-rdma.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/migration-rdma.c b/migration-rdma.c +index ba4ad76..5596571 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -949,6 +949,7 @@ route: + ERROR(errp, "result not equal to event_addr_resolved %s", + rdma_event_str(cm_event->event)); + perror("rdma_resolve_addr"); ++ rdma_ack_cm_event(cm_event); + ret = -EINVAL; + goto err_resolve_get_addr; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rdma-IPv6-over-Ethernet-RoCE-is-broken-in-linux-work.patch b/SOURCES/kvm-rdma-IPv6-over-Ethernet-RoCE-is-broken-in-linux-work.patch new file mode 100644 index 0000000..f4ba1d1 --- /dev/null +++ b/SOURCES/kvm-rdma-IPv6-over-Ethernet-RoCE-is-broken-in-linux-work.patch @@ -0,0 +1,380 @@ +From 876b9284b61269d977d0b6b8585ba29758957622 Mon Sep 17 00:00:00 2001 +Message-Id: <876b9284b61269d977d0b6b8585ba29758957622.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:07 +0100 +Subject: [PATCH 31/46] rdma: IPv6 over Ethernet (RoCE) is broken in linux - + workaround + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-32-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55713 +O-Subject: [RHEL7.0 PATCH 31/42] rdma: IPv6 over Ethernet (RoCE) is broken in linux - workaround +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 7fc5b13fd7b05babc7bcad9dcb8281ae202a9494 +Author: Michael R. Hines +Date: Fri Aug 9 16:05:44 2013 -0400 + + rdma: IPv6 over Ethernet (RoCE) is broken in linux - workaround + + We've gotten reports from multiple testers (including Frank Yangjie + and myself) that RDMA IPv6 support over RocE (Ethernet) is broken + in linux. + + A patch to Linux is still in review: + + http://comments.gmane.org/gmane.linux.drivers.rdma/16448 + + If the user is listening on '[::]', then we will not have a opened a device + yet and have no way of verifying if the device is RoCE or not. + + In this case, the source VM will throw an error for ALL types of + connections (both IPv4 and IPv6) if the destination machine does not have + a regular infiniband network available for use. + + The only way to gaurantee that an error is thrown for broken kernels is + for the management software to choose a *specific* interface at bind time + and validate what time of hardware it is. + + Unfortunately, this puts the user in a fix: + + If the source VM connects with an IPv4 address without knowing that the + destination has bound to '[::]' the migration will unconditionally fail + unless the management software is not explicitly listening on the the IPv4 + address while using a RoCE-based device. + + If the source VM connects with an IPv6 address, then we're OK because we can + throw an error on the source (and similarly on the destination). + + But in mixed environments, this will be broken for a while until it is fixed + inside linux. + + We do provide a *tiny* bit of help in mixed environments, though in this patch: + + We can list all of the devices in the system and check to see if all the + devices are RoCE or Infiniband. + + If we detect that we have a *pure* RoCE environment, then we can safely + thrown an error even if the management sofware has specified '[::]' as the + bind address. + + However, if there is are multiple hetergeneous devices, then we cannot make + this assumption and the user just has to be sure they know what they are doing. + + Signed-off-by: Michael R. Hines + Message-id: 1376078746-24948-6-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 189 ++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 files changed, 169 insertions(+), 20 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 189 +++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 169 insertions(+), 20 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index e6fd77a..ada488e 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -707,15 +707,27 @@ static int __qemu_rdma_delete_block(RDMAContext *rdma, ram_addr_t block_offset) + */ + static void qemu_rdma_dump_id(const char *who, struct ibv_context *verbs) + { ++ struct ibv_port_attr port; ++ ++ if (ibv_query_port(verbs, 1, &port)) { ++ fprintf(stderr, "FAILED TO QUERY PORT INFORMATION!\n"); ++ return; ++ } ++ + printf("%s RDMA Device opened: kernel name %s " + "uverbs device name %s, " +- "infiniband_verbs class device path %s," +- " infiniband class device path %s\n", ++ "infiniband_verbs class device path %s, " ++ "infiniband class device path %s, " ++ "transport: (%d) %s\n", + who, + verbs->device->name, + verbs->device->dev_name, + verbs->device->dev_path, +- verbs->device->ibdev_path); ++ verbs->device->ibdev_path, ++ port.link_layer, ++ (port.link_layer == IBV_LINK_LAYER_INFINIBAND) ? "Infiniband" : ++ ((port.link_layer == IBV_LINK_LAYER_ETHERNET) ++ ? "Ethernet" : "Unknown")); + } + + /* +@@ -733,6 +745,132 @@ static void qemu_rdma_dump_gid(const char *who, struct rdma_cm_id *id) + } + + /* ++ * As of now, IPv6 over RoCE / iWARP is not supported by linux. ++ * We will try the next addrinfo struct, and fail if there are ++ * no other valid addresses to bind against. ++ * ++ * If user is listening on '[::]', then we will not have a opened a device ++ * yet and have no way of verifying if the device is RoCE or not. ++ * ++ * In this case, the source VM will throw an error for ALL types of ++ * connections (both IPv4 and IPv6) if the destination machine does not have ++ * a regular infiniband network available for use. ++ * ++ * The only way to gaurantee that an error is thrown for broken kernels is ++ * for the management software to choose a *specific* interface at bind time ++ * and validate what time of hardware it is. ++ * ++ * Unfortunately, this puts the user in a fix: ++ * ++ * If the source VM connects with an IPv4 address without knowing that the ++ * destination has bound to '[::]' the migration will unconditionally fail ++ * unless the management software is explicitly listening on the the IPv4 ++ * address while using a RoCE-based device. ++ * ++ * If the source VM connects with an IPv6 address, then we're OK because we can ++ * throw an error on the source (and similarly on the destination). ++ * ++ * But in mixed environments, this will be broken for a while until it is fixed ++ * inside linux. ++ * ++ * We do provide a *tiny* bit of help in this function: We can list all of the ++ * devices in the system and check to see if all the devices are RoCE or ++ * Infiniband. ++ * ++ * If we detect that we have a *pure* RoCE environment, then we can safely ++ * thrown an error even if the management sofware has specified '[::]' as the ++ * bind address. ++ * ++ * However, if there is are multiple hetergeneous devices, then we cannot make ++ * this assumption and the user just has to be sure they know what they are ++ * doing. ++ * ++ * Patches are being reviewed on linux-rdma. ++ */ ++static int qemu_rdma_broken_ipv6_kernel(Error **errp, struct ibv_context *verbs) ++{ ++ struct ibv_port_attr port_attr; ++ ++ /* This bug only exists in linux, to our knowledge. */ ++#ifdef CONFIG_LINUX ++ ++ /* ++ * Verbs are only NULL if management has bound to '[::]'. ++ * ++ * Let's iterate through all the devices and see if there any pure IB ++ * devices (non-ethernet). ++ * ++ * If not, then we can safely proceed with the migration. ++ * Otherwise, there are no gaurantees until the bug is fixed in linux. ++ */ ++ if (!verbs) { ++ int num_devices, x; ++ struct ibv_device ** dev_list = ibv_get_device_list(&num_devices); ++ bool roce_found = false; ++ bool ib_found = false; ++ ++ for (x = 0; x < num_devices; x++) { ++ verbs = ibv_open_device(dev_list[x]); ++ ++ if (ibv_query_port(verbs, 1, &port_attr)) { ++ ibv_close_device(verbs); ++ ERROR(errp, "Could not query initial IB port"); ++ return -EINVAL; ++ } ++ ++ if (port_attr.link_layer == IBV_LINK_LAYER_INFINIBAND) { ++ ib_found = true; ++ } else if (port_attr.link_layer == IBV_LINK_LAYER_ETHERNET) { ++ roce_found = true; ++ } ++ ++ ibv_close_device(verbs); ++ ++ } ++ ++ if (roce_found) { ++ if (ib_found) { ++ fprintf(stderr, "WARN: migrations may fail:" ++ " IPv6 over RoCE / iWARP in linux" ++ " is broken. But since you appear to have a" ++ " mixed RoCE / IB environment, be sure to only" ++ " migrate over the IB fabric until the kernel " ++ " fixes the bug.\n"); ++ } else { ++ ERROR(errp, "You only have RoCE / iWARP devices in your systems" ++ " and your management software has specified '[::]'" ++ ", but IPv6 over RoCE / iWARP is not supported in Linux."); ++ return -ENONET; ++ } ++ } ++ ++ return 0; ++ } ++ ++ /* ++ * If we have a verbs context, that means that some other than '[::]' was ++ * used by the management software for binding. In which case we can actually ++ * warn the user about a potential broken kernel; ++ */ ++ ++ /* IB ports start with 1, not 0 */ ++ if (ibv_query_port(verbs, 1, &port_attr)) { ++ ERROR(errp, "Could not query initial IB port"); ++ return -EINVAL; ++ } ++ ++ if (port_attr.link_layer == IBV_LINK_LAYER_ETHERNET) { ++ ERROR(errp, "Linux kernel's RoCE / iWARP does not support IPv6 " ++ "(but patches on linux-rdma in progress)"); ++ return -ENONET; ++ } ++ ++#endif ++ ++ return 0; ++} ++ ++/* + * Figure out which RDMA device corresponds to the requested IP hostname + * Also create the initial connection manager identifiers for opening + * the connection. +@@ -740,22 +878,22 @@ static void qemu_rdma_dump_gid(const char *who, struct rdma_cm_id *id) + static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + { + int ret; +- struct addrinfo *res; ++ struct rdma_addrinfo *res; + char port_str[16]; + struct rdma_cm_event *cm_event; + char ip[40] = "unknown"; +- struct addrinfo *e; ++ struct rdma_addrinfo *e; + + if (rdma->host == NULL || !strcmp(rdma->host, "")) { + ERROR(errp, "RDMA hostname has not been set"); +- return -1; ++ return -EINVAL; + } + + /* create CM channel */ + rdma->channel = rdma_create_event_channel(); + if (!rdma->channel) { + ERROR(errp, "could not create CM channel"); +- return -1; ++ return -EINVAL; + } + + /* create CM id */ +@@ -768,21 +906,24 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + snprintf(port_str, 16, "%d", rdma->port); + port_str[15] = '\0'; + +- ret = getaddrinfo(rdma->host, port_str, NULL, &res); ++ ret = rdma_getaddrinfo(rdma->host, port_str, NULL, &res); + if (ret < 0) { +- ERROR(errp, "could not getaddrinfo address %s", rdma->host); ++ ERROR(errp, "could not rdma_getaddrinfo address %s", rdma->host); + goto err_resolve_get_addr; + } + + for (e = res; e != NULL; e = e->ai_next) { + inet_ntop(e->ai_family, +- &((struct sockaddr_in *) e->ai_addr)->sin_addr, ip, sizeof ip); ++ &((struct sockaddr_in *) e->ai_dst_addr)->sin_addr, ip, sizeof ip); + DPRINTF("Trying %s => %s\n", rdma->host, ip); + +- /* resolve the first address */ +- ret = rdma_resolve_addr(rdma->cm_id, NULL, e->ai_addr, ++ ret = rdma_resolve_addr(rdma->cm_id, NULL, e->ai_dst_addr, + RDMA_RESOLVE_TIMEOUT_MS); + if (!ret) { ++ ret = qemu_rdma_broken_ipv6_kernel(errp, rdma->cm_id->verbs); ++ if (ret) { ++ continue; ++ } + goto route; + } + } +@@ -803,6 +944,7 @@ route: + ERROR(errp, "result not equal to event_addr_resolved %s", + rdma_event_str(cm_event->event)); + perror("rdma_resolve_addr"); ++ ret = -EINVAL; + goto err_resolve_get_addr; + } + rdma_ack_cm_event(cm_event); +@@ -823,6 +965,7 @@ route: + ERROR(errp, "result not equal to event_route_resolved: %s", + rdma_event_str(cm_event->event)); + rdma_ack_cm_event(cm_event); ++ ret = -EINVAL; + goto err_resolve_get_addr; + } + rdma_ack_cm_event(cm_event); +@@ -837,8 +980,7 @@ err_resolve_get_addr: + err_resolve_create_id: + rdma_destroy_event_channel(rdma->channel); + rdma->channel = NULL; +- +- return -1; ++ return ret; + } + + /* +@@ -2266,7 +2408,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + int ret = -EINVAL, idx; + struct rdma_cm_id *listen_id; + char ip[40] = "unknown"; +- struct addrinfo *res; ++ struct rdma_addrinfo *res; + char port_str[16]; + + for (idx = 0; idx < RDMA_WRID_MAX; idx++) { +@@ -2298,20 +2440,27 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + port_str[15] = '\0'; + + if (rdma->host && strcmp("", rdma->host)) { +- struct addrinfo *e; ++ struct rdma_addrinfo *e; + +- ret = getaddrinfo(rdma->host, port_str, NULL, &res); ++ ret = rdma_getaddrinfo(rdma->host, port_str, NULL, &res); + if (ret < 0) { +- ERROR(errp, "could not getaddrinfo address %s", rdma->host); ++ ERROR(errp, "could not rdma_getaddrinfo address %s", rdma->host); + goto err_dest_init_bind_addr; + } + + for (e = res; e != NULL; e = e->ai_next) { + inet_ntop(e->ai_family, +- &((struct sockaddr_in *) e->ai_addr)->sin_addr, ip, sizeof ip); ++ &((struct sockaddr_in *) e->ai_dst_addr)->sin_addr, ip, sizeof ip); + DPRINTF("Trying %s => %s\n", rdma->host, ip); +- ret = rdma_bind_addr(listen_id, e->ai_addr); ++ ret = rdma_bind_addr(listen_id, e->ai_dst_addr); + if (!ret) { ++ if (e->ai_family == AF_INET6) { ++ ret = qemu_rdma_broken_ipv6_kernel(errp, listen_id->verbs); ++ if (ret) { ++ continue; ++ } ++ } ++ + goto listen; + } + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-account-for-the-time-spent-in-MIG_STATE_SETUP-t.patch b/SOURCES/kvm-rdma-account-for-the-time-spent-in-MIG_STATE_SETUP-t.patch new file mode 100644 index 0000000..f3dad17 --- /dev/null +++ b/SOURCES/kvm-rdma-account-for-the-time-spent-in-MIG_STATE_SETUP-t.patch @@ -0,0 +1,158 @@ +From 55c36d5525751d4b2676e206680762769758d934 Mon Sep 17 00:00:00 2001 +Message-Id: <55c36d5525751d4b2676e206680762769758d934.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:55 +0100 +Subject: [PATCH 19/46] rdma: account for the time spent in MIG_STATE_SETUP + through QMP + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-20-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55701 +O-Subject: [RHEL7.0 PATCH 19/42] rdma: account for the time spent in MIG_STATE_SETUP through QMP +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit ed4fbd10823a7b0dbded6b481a68973e47f7e14d +Author: Michael R. Hines +Date: Mon Jul 22 10:01:58 2013 -0400 + + rdma: account for the time spent in MIG_STATE_SETUP through QMP + + Using the previous patches, we're now able to timestamp the SETUP + state. Once we have this time, let the user know about it in the + schema. + + Reviewed-by: Juan Quintela + Reviewed-by: Eric Blake + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + hmp.c | 4 ++++ + include/migration/migration.h | 1 + + migration.c | 9 +++++++++ + qapi-schema.json | 9 ++++++++- + 4 files changed, 22 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + hmp.c | 4 ++++ + include/migration/migration.h | 1 + + migration.c | 9 +++++++++ + qapi-schema.json | 9 ++++++++- + 4 files changed, 22 insertions(+), 1 deletion(-) + +diff --git a/hmp.c b/hmp.c +index 316e6a1..841929d 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -162,6 +162,10 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) + monitor_printf(mon, "downtime: %" PRIu64 " milliseconds\n", + info->downtime); + } ++ if (info->has_setup_time) { ++ monitor_printf(mon, "setup: %" PRIu64 " milliseconds\n", ++ info->setup_time); ++ } + } + + if (info->has_ram) { +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 13a9629..08c772d 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -49,6 +49,7 @@ struct MigrationState + int64_t dirty_bytes_rate; + bool enabled_capabilities[MIGRATION_CAPABILITY_MAX]; + int64_t xbzrle_cache_size; ++ int64_t setup_time; + }; + + void process_incoming_migration(QEMUFile *f); +diff --git a/migration.c b/migration.c +index ddbfd45..4f070a3 100644 +--- a/migration.c ++++ b/migration.c +@@ -191,6 +191,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) + case MIG_STATE_SETUP: + info->has_status = true; + info->status = g_strdup("setup"); ++ info->has_total_time = false; + break; + case MIG_STATE_ACTIVE: + info->has_status = true; +@@ -200,6 +201,8 @@ MigrationInfo *qmp_query_migrate(Error **errp) + - s->total_time; + info->has_expected_downtime = true; + info->expected_downtime = s->expected_downtime; ++ info->has_setup_time = true; ++ info->setup_time = s->setup_time; + + info->has_ram = true; + info->ram = g_malloc0(sizeof(*info->ram)); +@@ -232,6 +235,8 @@ MigrationInfo *qmp_query_migrate(Error **errp) + info->total_time = s->total_time; + info->has_downtime = true; + info->downtime = s->downtime; ++ info->has_setup_time = true; ++ info->setup_time = s->setup_time; + + info->has_ram = true; + info->ram = g_malloc0(sizeof(*info->ram)); +@@ -548,6 +553,7 @@ static void *migration_thread(void *opaque) + { + MigrationState *s = opaque; + int64_t initial_time = qemu_get_clock_ms(rt_clock); ++ int64_t setup_start = qemu_get_clock_ms(host_clock); + int64_t initial_bytes = 0; + int64_t max_size = 0; + int64_t start_time = initial_time; +@@ -556,8 +562,11 @@ static void *migration_thread(void *opaque) + DPRINTF("beginning savevm\n"); + qemu_savevm_state_begin(s->file, &s->params); + ++ s->setup_time = qemu_get_clock_ms(host_clock) - setup_start; + migrate_set_state(s, MIG_STATE_SETUP, MIG_STATE_ACTIVE); + ++ DPRINTF("setup complete\n"); ++ + while (s->state == MIG_STATE_ACTIVE) { + int64_t current_time; + uint64_t pending_size; +diff --git a/qapi-schema.json b/qapi-schema.json +index bf1fe68..7333b8f 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -634,6 +634,12 @@ + # expected downtime in milliseconds for the guest in last walk + # of the dirty bitmap. (since 1.3) + # ++# @setup-time: #optional amount of setup time in milliseconds _before_ the ++# iterations begin but _after_ the QMP command is issued. This is designed ++# to provide an accounting of any activities (such as RDMA pinning) which ++# may be expensive, but do not actually occur during the iterative ++# migration rounds themselves. (since 1.6) ++# + # Since: 0.14.0 + ## + { 'type': 'MigrationInfo', +@@ -642,7 +648,8 @@ + '*xbzrle-cache': 'XBZRLECacheStats', + '*total-time': 'int', + '*expected-downtime': 'int', +- '*downtime': 'int'} } ++ '*downtime': 'int', ++ '*setup-time': 'int'} } + + ## + # @query-migrate +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-add-documentation.patch b/SOURCES/kvm-rdma-add-documentation.patch new file mode 100644 index 0000000..14a5b42 --- /dev/null +++ b/SOURCES/kvm-rdma-add-documentation.patch @@ -0,0 +1,472 @@ +From 7c25e4dc9a5a8d07f2c59fd2160bb22c774d1d7a Mon Sep 17 00:00:00 2001 +Message-Id: <7c25e4dc9a5a8d07f2c59fd2160bb22c774d1d7a.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:40 +0100 +Subject: [PATCH 04/46] rdma: add documentation + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-5-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55688 +O-Subject: [RHEL7.0 PATCH 04/42] rdma: add documentation +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit f4abc9d621823b14a6cd508c66c1ecb21f96349e +Author: Michael R. Hines +Date: Tue Jun 25 21:35:27 2013 -0400 + + rdma: add documentation + + docs/rdma.txt contains full documentation, + wiki links, github url and contact information. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + docs/rdma.txt | 415 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 415 insertions(+), 0 deletions(-) + create mode 100644 docs/rdma.txt + +Signed-off-by: Michal Novotny +--- + docs/rdma.txt | 415 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 415 insertions(+) + create mode 100644 docs/rdma.txt + +diff --git a/docs/rdma.txt b/docs/rdma.txt +new file mode 100644 +index 0000000..45a4b1d +--- /dev/null ++++ b/docs/rdma.txt +@@ -0,0 +1,415 @@ ++(RDMA: Remote Direct Memory Access) ++RDMA Live Migration Specification, Version # 1 ++============================================== ++Wiki: http://wiki.qemu.org/Features/RDMALiveMigration ++Github: git@github.com:hinesmr/qemu.git, 'rdma' branch ++ ++Copyright (C) 2013 Michael R. Hines ++ ++An *exhaustive* paper (2010) shows additional performance details ++linked on the QEMU wiki above. ++ ++Contents: ++========= ++* Introduction ++* Before running ++* Running ++* Performance ++* RDMA Migration Protocol Description ++* Versioning and Capabilities ++* QEMUFileRDMA Interface ++* Migration of pc.ram ++* Error handling ++* TODO ++ ++Introduction: ++============= ++ ++RDMA helps make your migration more deterministic under heavy load because ++of the significantly lower latency and higher throughput over TCP/IP. This is ++because the RDMA I/O architecture reduces the number of interrupts and ++data copies by bypassing the host networking stack. In particular, a TCP-based ++migration, under certain types of memory-bound workloads, may take a more ++unpredicatable amount of time to complete the migration if the amount of ++memory tracked during each live migration iteration round cannot keep pace ++with the rate of dirty memory produced by the workload. ++ ++RDMA currently comes in two flavors: both Ethernet based (RoCE, or RDMA ++over Convered Ethernet) as well as Infiniband-based. This implementation of ++migration using RDMA is capable of using both technologies because of ++the use of the OpenFabrics OFED software stack that abstracts out the ++programming model irrespective of the underlying hardware. ++ ++Refer to openfabrics.org or your respective RDMA hardware vendor for ++an understanding on how to verify that you have the OFED software stack ++installed in your environment. You should be able to successfully link ++against the "librdmacm" and "libibverbs" libraries and development headers ++for a working build of QEMU to run successfully using RDMA Migration. ++ ++BEFORE RUNNING: ++=============== ++ ++Use of RDMA during migration requires pinning and registering memory ++with the hardware. This means that memory must be physically resident ++before the hardware can transmit that memory to another machine. ++If this is not acceptable for your application or product, then the use ++of RDMA migration may in fact be harmful to co-located VMs or other ++software on the machine if there is not sufficient memory available to ++relocate the entire footprint of the virtual machine. If so, then the ++use of RDMA is discouraged and it is recommended to use standard TCP migration. ++ ++Experimental: Next, decide if you want dynamic page registration. ++For example, if you have an 8GB RAM virtual machine, but only 1GB ++is in active use, then enabling this feature will cause all 8GB to ++be pinned and resident in memory. This feature mostly affects the ++bulk-phase round of the migration and can be enabled for extremely ++high-performance RDMA hardware using the following command: ++ ++QEMU Monitor Command: ++$ migrate_set_capability x-rdma-pin-all on # disabled by default ++ ++Performing this action will cause all 8GB to be pinned, so if that's ++not what you want, then please ignore this step altogether. ++ ++On the other hand, this will also significantly speed up the bulk round ++of the migration, which can greatly reduce the "total" time of your migration. ++Example performance of this using an idle VM in the previous example ++can be found in the "Performance" section. ++ ++Note: for very large virtual machines (hundreds of GBs), pinning all ++*all* of the memory of your virtual machine in the kernel is very expensive ++may extend the initial bulk iteration time by many seconds, ++and thus extending the total migration time. However, this will not ++affect the determinism or predictability of your migration you will ++still gain from the benefits of advanced pinning with RDMA. ++ ++RUNNING: ++======== ++ ++First, set the migration speed to match your hardware's capabilities: ++ ++QEMU Monitor Command: ++$ migrate_set_speed 40g # or whatever is the MAX of your RDMA device ++ ++Next, on the destination machine, add the following to the QEMU command line: ++ ++qemu ..... -incoming x-rdma:host:port ++ ++Finally, perform the actual migration on the source machine: ++ ++QEMU Monitor Command: ++$ migrate -d x-rdma:host:port ++ ++PERFORMANCE ++=========== ++ ++Here is a brief summary of total migration time and downtime using RDMA: ++Using a 40gbps infiniband link performing a worst-case stress test, ++using an 8GB RAM virtual machine: ++ ++Using the following command: ++$ apt-get install stress ++$ stress --vm-bytes 7500M --vm 1 --vm-keep ++ ++1. Migration throughput: 26 gigabits/second. ++2. Downtime (stop time) varies between 15 and 100 milliseconds. ++ ++EFFECTS of memory registration on bulk phase round: ++ ++For example, in the same 8GB RAM example with all 8GB of memory in ++active use and the VM itself is completely idle using the same 40 gbps ++infiniband link: ++ ++1. x-rdma-pin-all disabled total time: approximately 7.5 seconds @ 9.5 Gbps ++2. x-rdma-pin-all enabled total time: approximately 4 seconds @ 26 Gbps ++ ++These numbers would of course scale up to whatever size virtual machine ++you have to migrate using RDMA. ++ ++Enabling this feature does *not* have any measurable affect on ++migration *downtime*. This is because, without this feature, all of the ++memory will have already been registered already in advance during ++the bulk round and does not need to be re-registered during the successive ++iteration rounds. ++ ++RDMA Protocol Description: ++========================== ++ ++Migration with RDMA is separated into two parts: ++ ++1. The transmission of the pages using RDMA ++2. Everything else (a control channel is introduced) ++ ++"Everything else" is transmitted using a formal ++protocol now, consisting of infiniband SEND messages. ++ ++An infiniband SEND message is the standard ibverbs ++message used by applications of infiniband hardware. ++The only difference between a SEND message and an RDMA ++message is that SEND messages cause notifications ++to be posted to the completion queue (CQ) on the ++infiniband receiver side, whereas RDMA messages (used ++for pc.ram) do not (to behave like an actual DMA). ++ ++Messages in infiniband require two things: ++ ++1. registration of the memory that will be transmitted ++2. (SEND only) work requests to be posted on both ++ sides of the network before the actual transmission ++ can occur. ++ ++RDMA messages are much easier to deal with. Once the memory ++on the receiver side is registered and pinned, we're ++basically done. All that is required is for the sender ++side to start dumping bytes onto the link. ++ ++(Memory is not released from pinning until the migration ++completes, given that RDMA migrations are very fast.) ++ ++SEND messages require more coordination because the ++receiver must have reserved space (using a receive ++work request) on the receive queue (RQ) before QEMUFileRDMA ++can start using them to carry all the bytes as ++a control transport for migration of device state. ++ ++To begin the migration, the initial connection setup is ++as follows (migration-rdma.c): ++ ++1. Receiver and Sender are started (command line or libvirt): ++2. Both sides post two RQ work requests ++3. Receiver does listen() ++4. Sender does connect() ++5. Receiver accept() ++6. Check versioning and capabilities (described later) ++ ++At this point, we define a control channel on top of SEND messages ++which is described by a formal protocol. Each SEND message has a ++header portion and a data portion (but together are transmitted ++as a single SEND message). ++ ++Header: ++ * Length (of the data portion, uint32, network byte order) ++ * Type (what command to perform, uint32, network byte order) ++ * Repeat (Number of commands in data portion, same type only) ++ ++The 'Repeat' field is here to support future multiple page registrations ++in a single message without any need to change the protocol itself ++so that the protocol is compatible against multiple versions of QEMU. ++Version #1 requires that all server implementations of the protocol must ++check this field and register all requests found in the array of commands located ++in the data portion and return an equal number of results in the response. ++The maximum number of repeats is hard-coded to 4096. This is a conservative ++limit based on the maximum size of a SEND message along with emperical ++observations on the maximum future benefit of simultaneous page registrations. ++ ++The 'type' field has 10 different command values: ++ 1. Unused ++ 2. Error (sent to the source during bad things) ++ 3. Ready (control-channel is available) ++ 4. QEMU File (for sending non-live device state) ++ 5. RAM Blocks request (used right after connection setup) ++ 6. RAM Blocks result (used right after connection setup) ++ 7. Compress page (zap zero page and skip registration) ++ 8. Register request (dynamic chunk registration) ++ 9. Register result ('rkey' to be used by sender) ++ 10. Register finished (registration for current iteration finished) ++ ++A single control message, as hinted above, can contain within the data ++portion an array of many commands of the same type. If there is more than ++one command, then the 'repeat' field will be greater than 1. ++ ++After connection setup, message 5 & 6 are used to exchange ram block ++information and optionally pin all the memory if requested by the user. ++ ++After ram block exchange is completed, we have two protocol-level ++functions, responsible for communicating control-channel commands ++using the above list of values: ++ ++Logically: ++ ++qemu_rdma_exchange_recv(header, expected command type) ++ ++1. We transmit a READY command to let the sender know that ++ we are *ready* to receive some data bytes on the control channel. ++2. Before attempting to receive the expected command, we post another ++ RQ work request to replace the one we just used up. ++3. Block on a CQ event channel and wait for the SEND to arrive. ++4. When the send arrives, librdmacm will unblock us. ++5. Verify that the command-type and version received matches the one we expected. ++ ++qemu_rdma_exchange_send(header, data, optional response header & data): ++ ++1. Block on the CQ event channel waiting for a READY command ++ from the receiver to tell us that the receiver ++ is *ready* for us to transmit some new bytes. ++2. Optionally: if we are expecting a response from the command ++ (that we have no yet transmitted), let's post an RQ ++ work request to receive that data a few moments later. ++3. When the READY arrives, librdmacm will ++ unblock us and we immediately post a RQ work request ++ to replace the one we just used up. ++4. Now, we can actually post the work request to SEND ++ the requested command type of the header we were asked for. ++5. Optionally, if we are expecting a response (as before), ++ we block again and wait for that response using the additional ++ work request we previously posted. (This is used to carry ++ 'Register result' commands #6 back to the sender which ++ hold the rkey need to perform RDMA. Note that the virtual address ++ corresponding to this rkey was already exchanged at the beginning ++ of the connection (described below). ++ ++All of the remaining command types (not including 'ready') ++described above all use the aformentioned two functions to do the hard work: ++ ++1. After connection setup, RAMBlock information is exchanged using ++ this protocol before the actual migration begins. This information includes ++ a description of each RAMBlock on the server side as well as the virtual addresses ++ and lengths of each RAMBlock. This is used by the client to determine the ++ start and stop locations of chunks and how to register them dynamically ++ before performing the RDMA operations. ++2. During runtime, once a 'chunk' becomes full of pages ready to ++ be sent with RDMA, the registration commands are used to ask the ++ other side to register the memory for this chunk and respond ++ with the result (rkey) of the registration. ++3. Also, the QEMUFile interfaces also call these functions (described below) ++ when transmitting non-live state, such as devices or to send ++ its own protocol information during the migration process. ++4. Finally, zero pages are only checked if a page has not yet been registered ++ using chunk registration (or not checked at all and unconditionally ++ written if chunk registration is disabled. This is accomplished using ++ the "Compress" command listed above. If the page *has* been registered ++ then we check the entire chunk for zero. Only if the entire chunk is ++ zero, then we send a compress command to zap the page on the other side. ++ ++Versioning and Capabilities ++=========================== ++Current version of the protocol is version #1. ++ ++The same version applies to both for protocol traffic and capabilities ++negotiation. (i.e. There is only one version number that is referred to ++by all communication). ++ ++librdmacm provides the user with a 'private data' area to be exchanged ++at connection-setup time before any infiniband traffic is generated. ++ ++Header: ++ * Version (protocol version validated before send/recv occurs), uint32, network byte order ++ * Flags (bitwise OR of each capability), uint32, network byte order ++ ++There is no data portion of this header right now, so there is ++no length field. The maximum size of the 'private data' section ++is only 192 bytes per the Infiniband specification, so it's not ++very useful for data anyway. This structure needs to remain small. ++ ++This private data area is a convenient place to check for protocol ++versioning because the user does not need to register memory to ++transmit a few bytes of version information. ++ ++This is also a convenient place to negotiate capabilities ++(like dynamic page registration). ++ ++If the version is invalid, we throw an error. ++ ++If the version is new, we only negotiate the capabilities that the ++requested version is able to perform and ignore the rest. ++ ++Currently there is only *one* capability in Version #1: dynamic page registration ++ ++Finally: Negotiation happens with the Flags field: If the primary-VM ++sets a flag, but the destination does not support this capability, it ++will return a zero-bit for that flag and the primary-VM will understand ++that as not being an available capability and will thus disable that ++capability on the primary-VM side. ++ ++QEMUFileRDMA Interface: ++======================= ++ ++QEMUFileRDMA introduces a couple of new functions: ++ ++1. qemu_rdma_get_buffer() (QEMUFileOps rdma_read_ops) ++2. qemu_rdma_put_buffer() (QEMUFileOps rdma_write_ops) ++ ++These two functions are very short and simply use the protocol ++describe above to deliver bytes without changing the upper-level ++users of QEMUFile that depend on a bytestream abstraction. ++ ++Finally, how do we handoff the actual bytes to get_buffer()? ++ ++Again, because we're trying to "fake" a bytestream abstraction ++using an analogy not unlike individual UDP frames, we have ++to hold on to the bytes received from control-channel's SEND ++messages in memory. ++ ++Each time we receive a complete "QEMU File" control-channel ++message, the bytes from SEND are copied into a small local holding area. ++ ++Then, we return the number of bytes requested by get_buffer() ++and leave the remaining bytes in the holding area until get_buffer() ++comes around for another pass. ++ ++If the buffer is empty, then we follow the same steps ++listed above and issue another "QEMU File" protocol command, ++asking for a new SEND message to re-fill the buffer. ++ ++Migration of pc.ram: ++==================== ++ ++At the beginning of the migration, (migration-rdma.c), ++the sender and the receiver populate the list of RAMBlocks ++to be registered with each other into a structure. ++Then, using the aforementioned protocol, they exchange a ++description of these blocks with each other, to be used later ++during the iteration of main memory. This description includes ++a list of all the RAMBlocks, their offsets and lengths, virtual ++addresses and possibly includes pre-registered RDMA keys in case dynamic ++page registration was disabled on the server-side, otherwise not. ++ ++Main memory is not migrated with the aforementioned protocol, ++but is instead migrated with normal RDMA Write operations. ++ ++Pages are migrated in "chunks" (hard-coded to 1 Megabyte right now). ++Chunk size is not dynamic, but it could be in a future implementation. ++There's nothing to indicate that this is useful right now. ++ ++When a chunk is full (or a flush() occurs), the memory backed by ++the chunk is registered with librdmacm is pinned in memory on ++both sides using the aforementioned protocol. ++After pinning, an RDMA Write is generated and transmitted ++for the entire chunk. ++ ++Chunks are also transmitted in batches: This means that we ++do not request that the hardware signal the completion queue ++for the completion of *every* chunk. The current batch size ++is about 64 chunks (corresponding to 64 MB of memory). ++Only the last chunk in a batch must be signaled. ++This helps keep everything as asynchronous as possible ++and helps keep the hardware busy performing RDMA operations. ++ ++Error-handling: ++=============== ++ ++Infiniband has what is called a "Reliable, Connected" ++link (one of 4 choices). This is the mode in which ++we use for RDMA migration. ++ ++If a *single* message fails, ++the decision is to abort the migration entirely and ++cleanup all the RDMA descriptors and unregister all ++the memory. ++ ++After cleanup, the Virtual Machine is returned to normal ++operation the same way that would happen if the TCP ++socket is broken during a non-RDMA based migration. ++ ++TODO: ++===== ++1. 'migrate x-rdma:host:port' and '-incoming x-rdma' options will be ++ renamed to 'rdma' after the experimental phase of this work has ++ completed upstream. ++2. Currently, 'ulimit -l' mlock() limits as well as cgroups swap limits ++ are not compatible with infinband memory pinning and will result in ++ an aborted migration (but with the source VM left unaffected). ++3. Use of the recent /proc//pagemap would likely speed up ++ the use of KSM and ballooning while using RDMA. ++4. Also, some form of balloon-device usage tracking would also ++ help alleviate some issues. +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-allow-state-transitions-between-other-states-be.patch b/SOURCES/kvm-rdma-allow-state-transitions-between-other-states-be.patch new file mode 100644 index 0000000..8db0278 --- /dev/null +++ b/SOURCES/kvm-rdma-allow-state-transitions-between-other-states-be.patch @@ -0,0 +1,110 @@ +From d6d76951c7e02baad0ee5944d4a6b5a5468d0d40 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:53 +0100 +Subject: [PATCH 17/46] rdma: allow state transitions between other states + besides ACTIVE + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-18-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55705 +O-Subject: [RHEL7.0 PATCH 17/42] rdma: allow state transitions between other states besides ACTIVE +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit d58f574bf39796ed2396dfd1e308352fbb03f944 +Author: Michael R. Hines +Date: Mon Jul 22 10:01:56 2013 -0400 + + rdma: allow state transitions between other states besides ACTIVE + + This patch is in preparation for the next ones: Until now the MIG_STATE_SETUP + state was not really a 'formal' state. It has been used as a 'zero' state + and QEMU has been unconditionally transitioning into this state when + the QMP migrate command was called. In preparation for timing this state, + we have to make this state a a 'real' state which actually gets transitioned + from later in the migration_thread() from SETUP => ACTIVE, rather than just + automatically dropping into this state at the beginninig of the migration. + + This means that the state transition function (migration_finish_set_state()) + needs to be capable of transitioning from valid states _other_ than just + MIG_STATE_ACTIVE. + + The function is in fact already capable of doing that, but was not allowing the + old state to be a parameter specified as an input. + + This patch fixes that and only makes the transition if the current state + matches the old state that the caller intended to transition from. + + Reviewed-by: Juan Quintela + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + migration.c | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/migration.c b/migration.c +index 2fa0237..e885bb7 100644 +--- a/migration.c ++++ b/migration.c +@@ -296,9 +296,9 @@ static void migrate_fd_cleanup(void *opaque) + notifier_list_notify(&migration_state_notifiers, s); + } + +-static void migrate_finish_set_state(MigrationState *s, int new_state) ++static void migrate_set_state(MigrationState *s, int old_state, int new_state) + { +- if (atomic_cmpxchg(&s->state, MIG_STATE_ACTIVE, new_state) == new_state) { ++ if (atomic_cmpxchg(&s->state, old_state, new_state) == new_state) { + trace_migrate_set_state(new_state); + } + } +@@ -316,7 +316,7 @@ static void migrate_fd_cancel(MigrationState *s) + { + DPRINTF("cancelling migration\n"); + +- migrate_finish_set_state(s, MIG_STATE_CANCELLED); ++ migrate_set_state(s, s->state, MIG_STATE_CANCELLED); + } + + void add_migration_state_change_notifier(Notifier *notify) +@@ -578,19 +578,19 @@ static void *migration_thread(void *opaque) + qemu_mutex_unlock_iothread(); + + if (ret < 0) { +- migrate_finish_set_state(s, MIG_STATE_ERROR); ++ migrate_set_state(s, MIG_STATE_ACTIVE, MIG_STATE_ERROR); + break; + } + + if (!qemu_file_get_error(s->file)) { +- migrate_finish_set_state(s, MIG_STATE_COMPLETED); ++ migrate_set_state(s, MIG_STATE_ACTIVE, MIG_STATE_COMPLETED); + break; + } + } + } + + if (qemu_file_get_error(s->file)) { +- migrate_finish_set_state(s, MIG_STATE_ERROR); ++ migrate_set_state(s, MIG_STATE_ACTIVE, MIG_STATE_ERROR); + break; + } + current_time = qemu_get_clock_ms(rt_clock); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-bug-fixes.patch b/SOURCES/kvm-rdma-bug-fixes.patch new file mode 100644 index 0000000..56456dd --- /dev/null +++ b/SOURCES/kvm-rdma-bug-fixes.patch @@ -0,0 +1,91 @@ +From 41048b716132906fe54b6dbca48421a24f78affb Mon Sep 17 00:00:00 2001 +From: Dr. David Alan Gilbert (git) +Date: Fri, 11 Jul 2014 09:05:28 +0200 +Subject: [PATCH 01/11] rdma: bug fixes + +Message-id: <1405069528-20466-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 59778 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] rdma: bug fixes +Bugzilla: 1107821 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek + +From: "Michael R. Hines" + +1. Fix small memory leak in parsing inet address from command line in data_init() +2. Fix ibv_post_send() return value check and pass error code back up correctly. +3. Fix rdma_destroy_qp() segfault after failure to connect to destination. + +Reported-by: frank.yangjie@gmail.com +Reported-by: dgilbert@redhat.com +Signed-off-by: Michael R. Hines +Signed-off-by: Juan Quintela +(cherry picked from commit e325b49a320b493cc5d69e263751ff716dc458fe) +--- + migration-rdma.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + migration-rdma.c | 20 ++++++++++---------- + 1 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index f79be20..ba4ad76 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -1589,13 +1589,11 @@ static int qemu_rdma_post_send_control(RDMAContext *rdma, uint8_t *buf, + } + + +- if (ibv_post_send(rdma->qp, &send_wr, &bad_wr)) { +- return -1; +- } ++ ret = ibv_post_send(rdma->qp, &send_wr, &bad_wr); + +- if (ret < 0) { ++ if (ret > 0) { + fprintf(stderr, "Failed to use post IB SEND for control!\n"); +- return ret; ++ return -ret; + } + + ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_SEND_CONTROL, NULL); +@@ -2237,10 +2235,6 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + } + } + +- if (rdma->qp) { +- rdma_destroy_qp(rdma->cm_id); +- rdma->qp = NULL; +- } + if (rdma->cq) { + ibv_destroy_cq(rdma->cq); + rdma->cq = NULL; +@@ -2258,6 +2252,10 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + rdma->listen_id = NULL; + } + if (rdma->cm_id) { ++ if (rdma->qp) { ++ rdma_destroy_qp(rdma->cm_id); ++ rdma->qp = NULL; ++ } + rdma_destroy_id(rdma->cm_id); + rdma->cm_id = NULL; + } +@@ -2512,8 +2510,10 @@ static void *qemu_rdma_data_init(const char *host_port, Error **errp) + } else { + ERROR(errp, "bad RDMA migration address '%s'", host_port); + g_free(rdma); +- return NULL; ++ rdma = NULL; + } ++ ++ qapi_free_InetSocketAddress(addr); + } + + return rdma; +-- +1.7.1 + diff --git a/SOURCES/kvm-rdma-bugfix-make-IPv6-support-work.patch b/SOURCES/kvm-rdma-bugfix-make-IPv6-support-work.patch new file mode 100644 index 0000000..810933a --- /dev/null +++ b/SOURCES/kvm-rdma-bugfix-make-IPv6-support-work.patch @@ -0,0 +1,143 @@ +From e61f1896870d99e21879b95f538b15114d65e9d0 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:56 +0100 +Subject: [PATCH 20/46] rdma: bugfix: make IPv6 support work + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-21-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55725 +O-Subject: [RHEL7.0 PATCH 20/42] rdma: bugfix: make IPv6 support work +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit b58c8552bd466aaab67c59dedeb846838082cad6 +Author: Michael R. Hines +Date: Sat Aug 3 22:54:48 2013 -0400 + + rdma: bugfix: make IPv6 support work + + RDMA does not use sockets, so we cannot use many of the socket + helper functions, but we *do* use inet_parse() which gives + RDMA all the necessary details of the connection parameters. + + However, when testing with libvirt, a simple IPv6 migration test failed + because we were not using getaddrinfo() properly. + + This makes IPv6 migration over RDMA work. + + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-2-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 33 +++++++++++++++++++++------------ + 1 files changed, 21 insertions(+), 12 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 33 +++++++++++++++++++++------------ + 1 file changed, 21 insertions(+), 12 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index d044830..9cf73e3 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -392,6 +392,7 @@ typedef struct RDMAContext { + uint64_t unregistrations[RDMA_SIGNALED_SEND_MAX]; + + GHashTable *blockmap; ++ bool ipv6; + } RDMAContext; + + /* +@@ -744,6 +745,7 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + char port_str[16]; + struct rdma_cm_event *cm_event; + char ip[40] = "unknown"; ++ int af = rdma->ipv6 ? PF_INET6 : PF_INET; + + if (rdma->host == NULL || !strcmp(rdma->host, "")) { + ERROR(errp, "RDMA hostname has not been set\n"); +@@ -773,7 +775,7 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + goto err_resolve_get_addr; + } + +- inet_ntop(AF_INET, &((struct sockaddr_in *) res->ai_addr)->sin_addr, ++ inet_ntop(af, &((struct sockaddr_in *) res->ai_addr)->sin_addr, + ip, sizeof ip); + DPRINTF("%s => %s\n", rdma->host, ip); + +@@ -2236,9 +2238,12 @@ err_rdma_source_connect: + static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + { + int ret = -EINVAL, idx; ++ int af = rdma->ipv6 ? PF_INET6 : PF_INET; + struct sockaddr_in sin; + struct rdma_cm_id *listen_id; + char ip[40] = "unknown"; ++ struct addrinfo *res; ++ char port_str[16]; + + for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { + rdma->wr_data[idx].control_len = 0; +@@ -2266,27 +2271,30 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + } + + memset(&sin, 0, sizeof(sin)); +- sin.sin_family = AF_INET; ++ sin.sin_family = af; + sin.sin_port = htons(rdma->port); ++ snprintf(port_str, 16, "%d", rdma->port); ++ port_str[15] = '\0'; + + if (rdma->host && strcmp("", rdma->host)) { +- struct hostent *dest_addr; +- dest_addr = gethostbyname(rdma->host); +- if (!dest_addr) { +- ERROR(errp, "migration could not gethostbyname!\n"); +- ret = -EINVAL; ++ ret = getaddrinfo(rdma->host, port_str, NULL, &res); ++ if (ret < 0) { ++ ERROR(errp, "could not getaddrinfo address %s\n", rdma->host); + goto err_dest_init_bind_addr; + } +- memcpy(&sin.sin_addr.s_addr, dest_addr->h_addr, +- dest_addr->h_length); +- inet_ntop(AF_INET, dest_addr->h_addr, ip, sizeof ip); ++ ++ ++ inet_ntop(af, &((struct sockaddr_in *) res->ai_addr)->sin_addr, ++ ip, sizeof ip); + } else { +- sin.sin_addr.s_addr = INADDR_ANY; ++ ERROR(errp, "migration host and port not specified!\n"); ++ ret = -EINVAL; ++ goto err_dest_init_bind_addr; + } + + DPRINTF("%s => %s\n", rdma->host, ip); + +- ret = rdma_bind_addr(listen_id, (struct sockaddr *)&sin); ++ ret = rdma_bind_addr(listen_id, res->ai_addr); + if (ret) { + ERROR(errp, "Error: could not rdma_bind_addr!\n"); + goto err_dest_init_bind_addr; +@@ -2321,6 +2329,7 @@ static void *qemu_rdma_data_init(const char *host_port, Error **errp) + if (addr != NULL) { + rdma->port = atoi(addr->port); + rdma->host = g_strdup(addr->host); ++ rdma->ipv6 = addr->ipv6; + } else { + ERROR(errp, "bad RDMA migration address '%s'", host_port); + g_free(rdma); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-bugfix-ram_control_save_page.patch b/SOURCES/kvm-rdma-bugfix-ram_control_save_page.patch new file mode 100644 index 0000000..dc90268 --- /dev/null +++ b/SOURCES/kvm-rdma-bugfix-ram_control_save_page.patch @@ -0,0 +1,57 @@ +From e5cb4139f938fd2f8e6910f92b15173083a3a517 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:49 +0100 +Subject: [PATCH 13/46] rdma: bugfix: ram_control_save_page() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-14-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55695 +O-Subject: [RHEL7.0 PATCH 13/42] rdma: bugfix: ram_control_save_page() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit de7b685c9e1cf606e37e7116e4c4f03a6ae2d14f +Author: Michael R. Hines +Date: Mon Jul 22 10:01:52 2013 -0400 + + rdma: bugfix: ram_control_save_page() + + We were not checking for a valid 'bytes_sent' pointer before accessing it. + + Reviewed-by: Eric Blake + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + savevm.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + savevm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/savevm.c b/savevm.c +index e0491e7..03fc4d9 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -662,7 +662,7 @@ size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, + offset, size, bytes_sent); + + if (ret != RAM_SAVE_CONTROL_DELAYED) { +- if (*bytes_sent > 0) { ++ if (bytes_sent && *bytes_sent > 0) { + qemu_update_position(f, *bytes_sent); + } else if (ret < 0) { + qemu_file_set_error(f, ret); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-check-if-RDMAControlHeader-len-match-transferre.patch b/SOURCES/kvm-rdma-check-if-RDMAControlHeader-len-match-transferre.patch new file mode 100644 index 0000000..ff1d364 --- /dev/null +++ b/SOURCES/kvm-rdma-check-if-RDMAControlHeader-len-match-transferre.patch @@ -0,0 +1,169 @@ +From 90c28e632cce2d60c8242f5fb3e93f630e6211bc Mon Sep 17 00:00:00 2001 +Message-Id: <90c28e632cce2d60c8242f5fb3e93f630e6211bc.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:05 +0100 +Subject: [PATCH 29/46] rdma: check if RDMAControlHeader::len match + transferred byte + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-30-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55718 +O-Subject: [RHEL7.0 PATCH 29/42] rdma: check if RDMAControlHeader::len match transferred byte +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 88571882516a7cb4291a329c537eb79fd126e1f2 +Author: Isaku Yamahata +Date: Fri Aug 9 16:05:42 2013 -0400 + + rdma: check if RDMAControlHeader::len match transferred byte + + RDMAControlHeader::len is provided from remote, so check if the value + match the actual transferred byte_len. + + Reviewed-by: Orit Wasserman + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1376078746-24948-4-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 32 ++++++++++++++++++++++---------- + 1 files changed, 22 insertions(+), 10 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 32 ++++++++++++++++++++++---------- + 1 file changed, 22 insertions(+), 10 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 140d930..9c02ad3 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -1214,7 +1214,8 @@ static void qemu_rdma_signal_unregister(RDMAContext *rdma, uint64_t index, + * (of any kind) has completed. + * Return the work request ID that completed. + */ +-static uint64_t qemu_rdma_poll(RDMAContext *rdma, uint64_t *wr_id_out) ++static uint64_t qemu_rdma_poll(RDMAContext *rdma, uint64_t *wr_id_out, ++ uint32_t *byte_len) + { + int ret; + struct ibv_wc wc; +@@ -1285,6 +1286,9 @@ static uint64_t qemu_rdma_poll(RDMAContext *rdma, uint64_t *wr_id_out) + } + + *wr_id_out = wc.wr_id; ++ if (byte_len) { ++ *byte_len = wc.byte_len; ++ } + + return 0; + } +@@ -1302,7 +1306,8 @@ static uint64_t qemu_rdma_poll(RDMAContext *rdma, uint64_t *wr_id_out) + * completions only need to be recorded, but do not actually + * need further processing. + */ +-static int qemu_rdma_block_for_wrid(RDMAContext *rdma, int wrid_requested) ++static int qemu_rdma_block_for_wrid(RDMAContext *rdma, int wrid_requested, ++ uint32_t *byte_len) + { + int num_cq_events = 0, ret = 0; + struct ibv_cq *cq; +@@ -1314,7 +1319,7 @@ static int qemu_rdma_block_for_wrid(RDMAContext *rdma, int wrid_requested) + } + /* poll cq first */ + while (wr_id != wrid_requested) { +- ret = qemu_rdma_poll(rdma, &wr_id_in); ++ ret = qemu_rdma_poll(rdma, &wr_id_in, byte_len); + if (ret < 0) { + return ret; + } +@@ -1356,7 +1361,7 @@ static int qemu_rdma_block_for_wrid(RDMAContext *rdma, int wrid_requested) + } + + while (wr_id != wrid_requested) { +- ret = qemu_rdma_poll(rdma, &wr_id_in); ++ ret = qemu_rdma_poll(rdma, &wr_id_in, byte_len); + if (ret < 0) { + goto err_block_for_wrid; + } +@@ -1442,7 +1447,7 @@ static int qemu_rdma_post_send_control(RDMAContext *rdma, uint8_t *buf, + return ret; + } + +- ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_SEND_CONTROL); ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_SEND_CONTROL, NULL); + if (ret < 0) { + fprintf(stderr, "rdma migration: send polling control error!\n"); + } +@@ -1483,7 +1488,9 @@ static int qemu_rdma_post_recv_control(RDMAContext *rdma, int idx) + static int qemu_rdma_exchange_get_response(RDMAContext *rdma, + RDMAControlHeader *head, int expecting, int idx) + { +- int ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RECV_CONTROL + idx); ++ uint32_t byte_len; ++ int ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RECV_CONTROL + idx, ++ &byte_len); + + if (ret < 0) { + fprintf(stderr, "rdma migration: recv polling control error!\n"); +@@ -1509,6 +1516,11 @@ static int qemu_rdma_exchange_get_response(RDMAContext *rdma, + fprintf(stderr, "too long length: %d\n", head->len); + return -EINVAL; + } ++ if (sizeof(*head) + head->len != byte_len) { ++ fprintf(stderr, "Malformed length: %d byte_len %d\n", ++ head->len, byte_len); ++ return -EINVAL; ++ } + + return 0; + } +@@ -1738,7 +1750,7 @@ retry: + count++, current_index, chunk, + sge.addr, length, rdma->nb_sent, block->nb_chunks); + +- ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE); ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE, NULL); + + if (ret < 0) { + fprintf(stderr, "Failed to Wait for previous write to complete " +@@ -1882,7 +1894,7 @@ retry: + + if (ret == ENOMEM) { + DDPRINTF("send queue is full. wait a little....\n"); +- ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE); ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE, NULL); + if (ret < 0) { + fprintf(stderr, "rdma migration: failed to make " + "room in full send queue! %d\n", ret); +@@ -2471,7 +2483,7 @@ static int qemu_rdma_drain_cq(QEMUFile *f, RDMAContext *rdma) + } + + while (rdma->nb_sent) { +- ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE); ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE, NULL); + if (ret < 0) { + fprintf(stderr, "rdma migration: complete polling error!\n"); + return -EIO; +@@ -2607,7 +2619,7 @@ static size_t qemu_rdma_save_page(QEMUFile *f, void *opaque, + */ + while (1) { + uint64_t wr_id, wr_id_in; +- int ret = qemu_rdma_poll(rdma, &wr_id_in); ++ int ret = qemu_rdma_poll(rdma, &wr_id_in, NULL); + if (ret < 0) { + fprintf(stderr, "rdma migration: polling error! %d\n", ret); + goto err; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-clean-up-of-qemu_rdma_cleanup.patch b/SOURCES/kvm-rdma-clean-up-of-qemu_rdma_cleanup.patch new file mode 100644 index 0000000..140151c --- /dev/null +++ b/SOURCES/kvm-rdma-clean-up-of-qemu_rdma_cleanup.patch @@ -0,0 +1,104 @@ +From d54fad56d67682c441b6e79a14df9ab9867a7b21 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:12 +0100 +Subject: [PATCH 36/46] rdma: clean up of qemu_rdma_cleanup() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-37-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55726 +O-Subject: [RHEL7.0 PATCH 36/42] rdma: clean up of qemu_rdma_cleanup() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 5a91337cdf343b94474f8bbecab85a8c00f6d2a1 +Author: Isaku Yamahata +Date: Tue Aug 13 11:12:43 2013 +0900 + + rdma: clean up of qemu_rdma_cleanup() + + - It can't be determined by RDMAContext::cm_id != NULL if the connection + is established or not. + - RDMAContext::cm_id is leaked and not destroyed because it is set to NULL + too early. + - RDMAContext::qp is created by rdma_create_qp() so that it should be destroyed + by rdma_destroy_qp(). not ibv_destroy_qp() + + Cc: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Juan Quintela +--- + migration-rdma.c | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 943496f..be3d984 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -356,6 +356,7 @@ typedef struct RDMAContext { + */ + struct rdma_cm_id *cm_id; /* connection manager ID */ + struct rdma_cm_id *listen_id; ++ bool connected; + + struct ibv_context *verbs; + struct rdma_event_channel *channel; +@@ -2194,7 +2195,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + struct rdma_cm_event *cm_event; + int ret, idx; + +- if (rdma->cm_id) { ++ if (rdma->cm_id && rdma->connected) { + if (rdma->error_state) { + RDMAControlHeader head = { .len = 0, + .type = RDMA_CONTROL_ERROR, +@@ -2213,7 +2214,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + } + } + DDPRINTF("Disconnected.\n"); +- rdma->cm_id = NULL; ++ rdma->connected = false; + } + + g_free(rdma->block); +@@ -2235,7 +2236,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + } + + if (rdma->qp) { +- ibv_destroy_qp(rdma->qp); ++ rdma_destroy_qp(rdma->cm_id); + rdma->qp = NULL; + } + if (rdma->cq) { +@@ -2372,6 +2373,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + rdma->cm_id = NULL; + goto err_rdma_source_connect; + } ++ rdma->connected = true; + + memcpy(&cap, cm_event->param.conn.private_data, sizeof(cap)); + network_to_caps(&cap); +@@ -2906,6 +2908,7 @@ static int qemu_rdma_accept(RDMAContext *rdma) + } + + rdma_ack_cm_event(cm_event); ++ rdma->connected = true; + + ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY); + if (ret) { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-constify-ram_chunk_-index-start-end.patch b/SOURCES/kvm-rdma-constify-ram_chunk_-index-start-end.patch new file mode 100644 index 0000000..7a48722 --- /dev/null +++ b/SOURCES/kvm-rdma-constify-ram_chunk_-index-start-end.patch @@ -0,0 +1,70 @@ +From 46ab899a1dd2c704e18b5542aa2297d6e342e803 Mon Sep 17 00:00:00 2001 +Message-Id: <46ab899a1dd2c704e18b5542aa2297d6e342e803.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:13 +0100 +Subject: [PATCH 37/46] rdma: constify ram_chunk_{index, start, end} + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-38-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55721 +O-Subject: [RHEL7.0 PATCH 37/42] rdma: constify ram_chunk_{index, start, end} +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit dd286ed700c6ca2768ac3452bc5b79af1709296a +Author: Isaku Yamahata +Date: Wed Sep 4 11:32:19 2013 +0900 + + rdma: constify ram_chunk_{index, start, end} + + Signed-off-by: Isaku Yamahata + Signed-off-by: Juan Quintela +--- + migration-rdma.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index be3d984..f79be20 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -511,19 +511,21 @@ static int qemu_rdma_exchange_send(RDMAContext *rdma, RDMAControlHeader *head, + int *resp_idx, + int (*callback)(RDMAContext *rdma)); + +-static inline uint64_t ram_chunk_index(uint8_t *start, uint8_t *host) ++static inline uint64_t ram_chunk_index(const uint8_t *start, ++ const uint8_t *host) + { + return ((uintptr_t) host - (uintptr_t) start) >> RDMA_REG_CHUNK_SHIFT; + } + +-static inline uint8_t *ram_chunk_start(RDMALocalBlock *rdma_ram_block, ++static inline uint8_t *ram_chunk_start(const RDMALocalBlock *rdma_ram_block, + uint64_t i) + { + return (uint8_t *) (((uintptr_t) rdma_ram_block->local_host_addr) + + (i << RDMA_REG_CHUNK_SHIFT)); + } + +-static inline uint8_t *ram_chunk_end(RDMALocalBlock *rdma_ram_block, uint64_t i) ++static inline uint8_t *ram_chunk_end(const RDMALocalBlock *rdma_ram_block, ++ uint64_t i) + { + uint8_t *result = ram_chunk_start(rdma_ram_block, i) + + (1UL << RDMA_REG_CHUNK_SHIFT); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-core-logic.patch b/SOURCES/kvm-rdma-core-logic.patch new file mode 100644 index 0000000..7a43469 --- /dev/null +++ b/SOURCES/kvm-rdma-core-logic.patch @@ -0,0 +1,3468 @@ +From 5d7481d76a57e533f521a5d99ba8d35b5d69625c Mon Sep 17 00:00:00 2001 +Message-Id: <5d7481d76a57e533f521a5d99ba8d35b5d69625c.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:51 +0100 +Subject: [PATCH 15/46] rdma: core logic + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-16-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55697 +O-Subject: [RHEL7.0 PATCH 15/42] rdma: core logic +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 2da776db4846eadcb808598a5d3484d149773c05 +Author: Michael R. Hines +Date: Mon Jul 22 10:01:54 2013 -0400 + + rdma: core logic + + Code that does need to be visible is kept + well contained inside this file and this is the only + new additional file to the entire patch. + + This file includes the entire protocol and interfaces + required to perform RDMA migration. + + Also, the configure and Makefile modifications to link + this file are included. + + Full documentation is in docs/rdma.txt + + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + Makefile.objs | 1 + + configure | 40 + + include/migration/migration.h | 4 + + migration-rdma.c | 3249 +++++++++++++++++++++++++++++++++++++++++ + migration.c | 8 + + 5 files changed, 3302 insertions(+), 0 deletions(-) + create mode 100644 migration-rdma.c + +Signed-off-by: Michal Novotny +--- + Makefile.objs | 1 + + configure | 40 + + include/migration/migration.h | 4 + + migration-rdma.c | 3249 +++++++++++++++++++++++++++++++++++++++++ + migration.c | 8 + + 5 files changed, 3302 insertions(+) + create mode 100644 migration-rdma.c + +diff --git a/Makefile.objs b/Makefile.objs +index 286ce06..67b4a28 100644 +--- a/Makefile.objs ++++ b/Makefile.objs +@@ -50,6 +50,7 @@ common-obj-$(CONFIG_POSIX) += os-posix.o + common-obj-$(CONFIG_LINUX) += fsdev/ + + common-obj-y += migration.o migration-tcp.o ++common-obj-$(CONFIG_RDMA) += migration-rdma.o + common-obj-y += qemu-char.o #aio.o + common-obj-y += block-migration.o + common-obj-y += page_cache.o xbzrle.o +diff --git a/configure b/configure +index 0a729ac..33235c4 100755 +--- a/configure ++++ b/configure +@@ -181,6 +181,7 @@ xfs="" + vhost_net="no" + vhost_scsi="no" + kvm="no" ++rdma="" + gprof="no" + debug_tcg="no" + debug="no" +@@ -925,6 +926,10 @@ for opt do + ;; + --enable-gtk) gtk="yes" + ;; ++ --enable-rdma) rdma="yes" ++ ;; ++ --disable-rdma) rdma="no" ++ ;; + --with-gtkabi=*) gtkabi="$optarg" + ;; + --enable-tpm) tpm="yes" +@@ -1151,6 +1156,8 @@ echo " --enable-bluez enable bluez stack connectivity" + echo " --disable-slirp disable SLIRP userspace network connectivity" + echo " --disable-kvm disable KVM acceleration support" + echo " --enable-kvm enable KVM acceleration support" ++echo " --disable-rdma disable RDMA-based migration support" ++echo " --enable-rdma enable RDMA-based migration support" + echo " --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)" + echo " --disable-nptl disable usermode NPTL support" + echo " --enable-nptl enable usermode NPTL support" +@@ -1846,6 +1853,30 @@ EOF + fi + + ########################################## ++# RDMA needs OpenFabrics libraries ++if test "$rdma" != "no" ; then ++ cat > $TMPC < ++int main(void) { return 0; } ++EOF ++ rdma_libs="-lrdmacm -libverbs" ++ if compile_prog "" "$rdma_libs" ; then ++ rdma="yes" ++ libs_softmmu="$libs_softmmu $rdma_libs" ++ else ++ if test "$rdma" = "yes" ; then ++ error_exit \ ++ " OpenFabrics librdmacm/libibverbs not present." \ ++ " Your options:" \ ++ " (1) Fast: Install infiniband packages from your distro." \ ++ " (2) Cleanest: Install libraries from www.openfabrics.org" \ ++ " (3) Also: Install softiwarp if you don't have RDMA hardware" ++ fi ++ rdma="no" ++ fi ++fi ++ ++########################################## + # VNC TLS/WS detection + if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then + cat > $TMPC <> $config_host_mak + fi + ++if test "$rdma" = "yes" ; then ++ echo "CONFIG_RDMA=y" >> $config_host_mak ++fi ++ + if test "$tcg_interpreter" = "yes"; then + QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" + elif test "$ARCH" = "sparc64" ; then +@@ -4506,6 +4542,10 @@ if [ "$pixman" = "internal" ]; then + echo "config-host.h: subdir-pixman" >> $config_host_mak + fi + ++if test "$rdma" = "yes" ; then ++echo "CONFIG_RDMA=y" >> $config_host_mak ++fi ++ + if [ "$dtc_internal" = "yes" ]; then + echo "config-host.h: subdir-dtc" >> $config_host_mak + fi +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 90b5021..13a9629 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -77,6 +77,10 @@ void fd_start_incoming_migration(const char *path, Error **errp); + + void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp); + ++void rdma_start_outgoing_migration(void *opaque, const char *host_port, Error **errp); ++ ++void rdma_start_incoming_migration(const char *host_port, Error **errp); ++ + void migrate_fd_error(MigrationState *s); + + void migrate_fd_connect(MigrationState *s); +diff --git a/migration-rdma.c b/migration-rdma.c +new file mode 100644 +index 0000000..d044830 +--- /dev/null ++++ b/migration-rdma.c +@@ -0,0 +1,3249 @@ ++/* ++ * RDMA protocol and interfaces ++ * ++ * Copyright IBM, Corp. 2010-2013 ++ * ++ * Authors: ++ * Michael R. Hines ++ * Jiuxing Liu ++ * ++ * This work is licensed under the terms of the GNU GPL, version 2 or ++ * later. See the COPYING file in the top-level directory. ++ * ++ */ ++#include "qemu-common.h" ++#include "migration/migration.h" ++#include "migration/qemu-file.h" ++#include "exec/cpu-common.h" ++#include "qemu/main-loop.h" ++#include "qemu/sockets.h" ++#include "qemu/bitmap.h" ++#include "block/coroutine.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define DEBUG_RDMA ++//#define DEBUG_RDMA_VERBOSE ++//#define DEBUG_RDMA_REALLY_VERBOSE ++ ++#ifdef DEBUG_RDMA ++#define DPRINTF(fmt, ...) \ ++ do { printf("rdma: " fmt, ## __VA_ARGS__); } while (0) ++#else ++#define DPRINTF(fmt, ...) \ ++ do { } while (0) ++#endif ++ ++#ifdef DEBUG_RDMA_VERBOSE ++#define DDPRINTF(fmt, ...) \ ++ do { printf("rdma: " fmt, ## __VA_ARGS__); } while (0) ++#else ++#define DDPRINTF(fmt, ...) \ ++ do { } while (0) ++#endif ++ ++#ifdef DEBUG_RDMA_REALLY_VERBOSE ++#define DDDPRINTF(fmt, ...) \ ++ do { printf("rdma: " fmt, ## __VA_ARGS__); } while (0) ++#else ++#define DDDPRINTF(fmt, ...) \ ++ do { } while (0) ++#endif ++ ++/* ++ * Print and error on both the Monitor and the Log file. ++ */ ++#define ERROR(errp, fmt, ...) \ ++ do { \ ++ fprintf(stderr, "RDMA ERROR: " fmt, ## __VA_ARGS__); \ ++ if (errp && (*(errp) == NULL)) { \ ++ error_setg(errp, "RDMA ERROR: " fmt, ## __VA_ARGS__); \ ++ } \ ++ } while (0) ++ ++#define RDMA_RESOLVE_TIMEOUT_MS 10000 ++ ++/* Do not merge data if larger than this. */ ++#define RDMA_MERGE_MAX (2 * 1024 * 1024) ++#define RDMA_SIGNALED_SEND_MAX (RDMA_MERGE_MAX / 4096) ++ ++#define RDMA_REG_CHUNK_SHIFT 20 /* 1 MB */ ++ ++/* ++ * This is only for non-live state being migrated. ++ * Instead of RDMA_WRITE messages, we use RDMA_SEND ++ * messages for that state, which requires a different ++ * delivery design than main memory. ++ */ ++#define RDMA_SEND_INCREMENT 32768 ++ ++/* ++ * Maximum size infiniband SEND message ++ */ ++#define RDMA_CONTROL_MAX_BUFFER (512 * 1024) ++#define RDMA_CONTROL_MAX_COMMANDS_PER_MESSAGE 4096 ++ ++#define RDMA_CONTROL_VERSION_CURRENT 1 ++/* ++ * Capabilities for negotiation. ++ */ ++#define RDMA_CAPABILITY_PIN_ALL 0x01 ++ ++/* ++ * Add the other flags above to this list of known capabilities ++ * as they are introduced. ++ */ ++static uint32_t known_capabilities = RDMA_CAPABILITY_PIN_ALL; ++ ++#define CHECK_ERROR_STATE() \ ++ do { \ ++ if (rdma->error_state) { \ ++ if (!rdma->error_reported) { \ ++ fprintf(stderr, "RDMA is in an error state waiting migration" \ ++ " to abort!\n"); \ ++ rdma->error_reported = 1; \ ++ } \ ++ return rdma->error_state; \ ++ } \ ++ } while (0); ++ ++/* ++ * A work request ID is 64-bits and we split up these bits ++ * into 3 parts: ++ * ++ * bits 0-15 : type of control message, 2^16 ++ * bits 16-29: ram block index, 2^14 ++ * bits 30-63: ram block chunk number, 2^34 ++ * ++ * The last two bit ranges are only used for RDMA writes, ++ * in order to track their completion and potentially ++ * also track unregistration status of the message. ++ */ ++#define RDMA_WRID_TYPE_SHIFT 0UL ++#define RDMA_WRID_BLOCK_SHIFT 16UL ++#define RDMA_WRID_CHUNK_SHIFT 30UL ++ ++#define RDMA_WRID_TYPE_MASK \ ++ ((1UL << RDMA_WRID_BLOCK_SHIFT) - 1UL) ++ ++#define RDMA_WRID_BLOCK_MASK \ ++ (~RDMA_WRID_TYPE_MASK & ((1UL << RDMA_WRID_CHUNK_SHIFT) - 1UL)) ++ ++#define RDMA_WRID_CHUNK_MASK (~RDMA_WRID_BLOCK_MASK & ~RDMA_WRID_TYPE_MASK) ++ ++/* ++ * RDMA migration protocol: ++ * 1. RDMA Writes (data messages, i.e. RAM) ++ * 2. IB Send/Recv (control channel messages) ++ */ ++enum { ++ RDMA_WRID_NONE = 0, ++ RDMA_WRID_RDMA_WRITE = 1, ++ RDMA_WRID_SEND_CONTROL = 2000, ++ RDMA_WRID_RECV_CONTROL = 4000, ++}; ++ ++const char *wrid_desc[] = { ++ [RDMA_WRID_NONE] = "NONE", ++ [RDMA_WRID_RDMA_WRITE] = "WRITE RDMA", ++ [RDMA_WRID_SEND_CONTROL] = "CONTROL SEND", ++ [RDMA_WRID_RECV_CONTROL] = "CONTROL RECV", ++}; ++ ++/* ++ * Work request IDs for IB SEND messages only (not RDMA writes). ++ * This is used by the migration protocol to transmit ++ * control messages (such as device state and registration commands) ++ * ++ * We could use more WRs, but we have enough for now. ++ */ ++enum { ++ RDMA_WRID_READY = 0, ++ RDMA_WRID_DATA, ++ RDMA_WRID_CONTROL, ++ RDMA_WRID_MAX, ++}; ++ ++/* ++ * SEND/RECV IB Control Messages. ++ */ ++enum { ++ RDMA_CONTROL_NONE = 0, ++ RDMA_CONTROL_ERROR, ++ RDMA_CONTROL_READY, /* ready to receive */ ++ RDMA_CONTROL_QEMU_FILE, /* QEMUFile-transmitted bytes */ ++ RDMA_CONTROL_RAM_BLOCKS_REQUEST, /* RAMBlock synchronization */ ++ RDMA_CONTROL_RAM_BLOCKS_RESULT, /* RAMBlock synchronization */ ++ RDMA_CONTROL_COMPRESS, /* page contains repeat values */ ++ RDMA_CONTROL_REGISTER_REQUEST, /* dynamic page registration */ ++ RDMA_CONTROL_REGISTER_RESULT, /* key to use after registration */ ++ RDMA_CONTROL_REGISTER_FINISHED, /* current iteration finished */ ++ RDMA_CONTROL_UNREGISTER_REQUEST, /* dynamic UN-registration */ ++ RDMA_CONTROL_UNREGISTER_FINISHED, /* unpinning finished */ ++}; ++ ++const char *control_desc[] = { ++ [RDMA_CONTROL_NONE] = "NONE", ++ [RDMA_CONTROL_ERROR] = "ERROR", ++ [RDMA_CONTROL_READY] = "READY", ++ [RDMA_CONTROL_QEMU_FILE] = "QEMU FILE", ++ [RDMA_CONTROL_RAM_BLOCKS_REQUEST] = "RAM BLOCKS REQUEST", ++ [RDMA_CONTROL_RAM_BLOCKS_RESULT] = "RAM BLOCKS RESULT", ++ [RDMA_CONTROL_COMPRESS] = "COMPRESS", ++ [RDMA_CONTROL_REGISTER_REQUEST] = "REGISTER REQUEST", ++ [RDMA_CONTROL_REGISTER_RESULT] = "REGISTER RESULT", ++ [RDMA_CONTROL_REGISTER_FINISHED] = "REGISTER FINISHED", ++ [RDMA_CONTROL_UNREGISTER_REQUEST] = "UNREGISTER REQUEST", ++ [RDMA_CONTROL_UNREGISTER_FINISHED] = "UNREGISTER FINISHED", ++}; ++ ++/* ++ * Memory and MR structures used to represent an IB Send/Recv work request. ++ * This is *not* used for RDMA writes, only IB Send/Recv. ++ */ ++typedef struct { ++ uint8_t control[RDMA_CONTROL_MAX_BUFFER]; /* actual buffer to register */ ++ struct ibv_mr *control_mr; /* registration metadata */ ++ size_t control_len; /* length of the message */ ++ uint8_t *control_curr; /* start of unconsumed bytes */ ++} RDMAWorkRequestData; ++ ++/* ++ * Negotiate RDMA capabilities during connection-setup time. ++ */ ++typedef struct { ++ uint32_t version; ++ uint32_t flags; ++} RDMACapabilities; ++ ++static void caps_to_network(RDMACapabilities *cap) ++{ ++ cap->version = htonl(cap->version); ++ cap->flags = htonl(cap->flags); ++} ++ ++static void network_to_caps(RDMACapabilities *cap) ++{ ++ cap->version = ntohl(cap->version); ++ cap->flags = ntohl(cap->flags); ++} ++ ++/* ++ * Representation of a RAMBlock from an RDMA perspective. ++ * This is not transmitted, only local. ++ * This and subsequent structures cannot be linked lists ++ * because we're using a single IB message to transmit ++ * the information. It's small anyway, so a list is overkill. ++ */ ++typedef struct RDMALocalBlock { ++ uint8_t *local_host_addr; /* local virtual address */ ++ uint64_t remote_host_addr; /* remote virtual address */ ++ uint64_t offset; ++ uint64_t length; ++ struct ibv_mr **pmr; /* MRs for chunk-level registration */ ++ struct ibv_mr *mr; /* MR for non-chunk-level registration */ ++ uint32_t *remote_keys; /* rkeys for chunk-level registration */ ++ uint32_t remote_rkey; /* rkeys for non-chunk-level registration */ ++ int index; /* which block are we */ ++ bool is_ram_block; ++ int nb_chunks; ++ unsigned long *transit_bitmap; ++ unsigned long *unregister_bitmap; ++} RDMALocalBlock; ++ ++/* ++ * Also represents a RAMblock, but only on the dest. ++ * This gets transmitted by the dest during connection-time ++ * to the source VM and then is used to populate the ++ * corresponding RDMALocalBlock with ++ * the information needed to perform the actual RDMA. ++ */ ++typedef struct QEMU_PACKED RDMARemoteBlock { ++ uint64_t remote_host_addr; ++ uint64_t offset; ++ uint64_t length; ++ uint32_t remote_rkey; ++ uint32_t padding; ++} RDMARemoteBlock; ++ ++static uint64_t htonll(uint64_t v) ++{ ++ union { uint32_t lv[2]; uint64_t llv; } u; ++ u.lv[0] = htonl(v >> 32); ++ u.lv[1] = htonl(v & 0xFFFFFFFFULL); ++ return u.llv; ++} ++ ++static uint64_t ntohll(uint64_t v) { ++ union { uint32_t lv[2]; uint64_t llv; } u; ++ u.llv = v; ++ return ((uint64_t)ntohl(u.lv[0]) << 32) | (uint64_t) ntohl(u.lv[1]); ++} ++ ++static void remote_block_to_network(RDMARemoteBlock *rb) ++{ ++ rb->remote_host_addr = htonll(rb->remote_host_addr); ++ rb->offset = htonll(rb->offset); ++ rb->length = htonll(rb->length); ++ rb->remote_rkey = htonl(rb->remote_rkey); ++} ++ ++static void network_to_remote_block(RDMARemoteBlock *rb) ++{ ++ rb->remote_host_addr = ntohll(rb->remote_host_addr); ++ rb->offset = ntohll(rb->offset); ++ rb->length = ntohll(rb->length); ++ rb->remote_rkey = ntohl(rb->remote_rkey); ++} ++ ++/* ++ * Virtual address of the above structures used for transmitting ++ * the RAMBlock descriptions at connection-time. ++ * This structure is *not* transmitted. ++ */ ++typedef struct RDMALocalBlocks { ++ int nb_blocks; ++ bool init; /* main memory init complete */ ++ RDMALocalBlock *block; ++} RDMALocalBlocks; ++ ++/* ++ * Main data structure for RDMA state. ++ * While there is only one copy of this structure being allocated right now, ++ * this is the place where one would start if you wanted to consider ++ * having more than one RDMA connection open at the same time. ++ */ ++typedef struct RDMAContext { ++ char *host; ++ int port; ++ ++ RDMAWorkRequestData wr_data[RDMA_WRID_MAX + 1]; ++ ++ /* ++ * This is used by *_exchange_send() to figure out whether or not ++ * the initial "READY" message has already been received or not. ++ * This is because other functions may potentially poll() and detect ++ * the READY message before send() does, in which case we need to ++ * know if it completed. ++ */ ++ int control_ready_expected; ++ ++ /* number of outstanding writes */ ++ int nb_sent; ++ ++ /* store info about current buffer so that we can ++ merge it with future sends */ ++ uint64_t current_addr; ++ uint64_t current_length; ++ /* index of ram block the current buffer belongs to */ ++ int current_index; ++ /* index of the chunk in the current ram block */ ++ int current_chunk; ++ ++ bool pin_all; ++ ++ /* ++ * infiniband-specific variables for opening the device ++ * and maintaining connection state and so forth. ++ * ++ * cm_id also has ibv_context, rdma_event_channel, and ibv_qp in ++ * cm_id->verbs, cm_id->channel, and cm_id->qp. ++ */ ++ struct rdma_cm_id *cm_id; /* connection manager ID */ ++ struct rdma_cm_id *listen_id; ++ ++ struct ibv_context *verbs; ++ struct rdma_event_channel *channel; ++ struct ibv_qp *qp; /* queue pair */ ++ struct ibv_comp_channel *comp_channel; /* completion channel */ ++ struct ibv_pd *pd; /* protection domain */ ++ struct ibv_cq *cq; /* completion queue */ ++ ++ /* ++ * If a previous write failed (perhaps because of a failed ++ * memory registration, then do not attempt any future work ++ * and remember the error state. ++ */ ++ int error_state; ++ int error_reported; ++ ++ /* ++ * Description of ram blocks used throughout the code. ++ */ ++ RDMALocalBlocks local_ram_blocks; ++ RDMARemoteBlock *block; ++ ++ /* ++ * Migration on *destination* started. ++ * Then use coroutine yield function. ++ * Source runs in a thread, so we don't care. ++ */ ++ int migration_started_on_destination; ++ ++ int total_registrations; ++ int total_writes; ++ ++ int unregister_current, unregister_next; ++ uint64_t unregistrations[RDMA_SIGNALED_SEND_MAX]; ++ ++ GHashTable *blockmap; ++} RDMAContext; ++ ++/* ++ * Interface to the rest of the migration call stack. ++ */ ++typedef struct QEMUFileRDMA { ++ RDMAContext *rdma; ++ size_t len; ++ void *file; ++} QEMUFileRDMA; ++ ++/* ++ * Main structure for IB Send/Recv control messages. ++ * This gets prepended at the beginning of every Send/Recv. ++ */ ++typedef struct QEMU_PACKED { ++ uint32_t len; /* Total length of data portion */ ++ uint32_t type; /* which control command to perform */ ++ uint32_t repeat; /* number of commands in data portion of same type */ ++ uint32_t padding; ++} RDMAControlHeader; ++ ++static void control_to_network(RDMAControlHeader *control) ++{ ++ control->type = htonl(control->type); ++ control->len = htonl(control->len); ++ control->repeat = htonl(control->repeat); ++} ++ ++static void network_to_control(RDMAControlHeader *control) ++{ ++ control->type = ntohl(control->type); ++ control->len = ntohl(control->len); ++ control->repeat = ntohl(control->repeat); ++} ++ ++/* ++ * Register a single Chunk. ++ * Information sent by the source VM to inform the dest ++ * to register an single chunk of memory before we can perform ++ * the actual RDMA operation. ++ */ ++typedef struct QEMU_PACKED { ++ union QEMU_PACKED { ++ uint64_t current_addr; /* offset into the ramblock of the chunk */ ++ uint64_t chunk; /* chunk to lookup if unregistering */ ++ } key; ++ uint32_t current_index; /* which ramblock the chunk belongs to */ ++ uint32_t padding; ++ uint64_t chunks; /* how many sequential chunks to register */ ++} RDMARegister; ++ ++static void register_to_network(RDMARegister *reg) ++{ ++ reg->key.current_addr = htonll(reg->key.current_addr); ++ reg->current_index = htonl(reg->current_index); ++ reg->chunks = htonll(reg->chunks); ++} ++ ++static void network_to_register(RDMARegister *reg) ++{ ++ reg->key.current_addr = ntohll(reg->key.current_addr); ++ reg->current_index = ntohl(reg->current_index); ++ reg->chunks = ntohll(reg->chunks); ++} ++ ++typedef struct QEMU_PACKED { ++ uint32_t value; /* if zero, we will madvise() */ ++ uint32_t block_idx; /* which ram block index */ ++ uint64_t offset; /* where in the remote ramblock this chunk */ ++ uint64_t length; /* length of the chunk */ ++} RDMACompress; ++ ++static void compress_to_network(RDMACompress *comp) ++{ ++ comp->value = htonl(comp->value); ++ comp->block_idx = htonl(comp->block_idx); ++ comp->offset = htonll(comp->offset); ++ comp->length = htonll(comp->length); ++} ++ ++static void network_to_compress(RDMACompress *comp) ++{ ++ comp->value = ntohl(comp->value); ++ comp->block_idx = ntohl(comp->block_idx); ++ comp->offset = ntohll(comp->offset); ++ comp->length = ntohll(comp->length); ++} ++ ++/* ++ * The result of the dest's memory registration produces an "rkey" ++ * which the source VM must reference in order to perform ++ * the RDMA operation. ++ */ ++typedef struct QEMU_PACKED { ++ uint32_t rkey; ++ uint32_t padding; ++ uint64_t host_addr; ++} RDMARegisterResult; ++ ++static void result_to_network(RDMARegisterResult *result) ++{ ++ result->rkey = htonl(result->rkey); ++ result->host_addr = htonll(result->host_addr); ++}; ++ ++static void network_to_result(RDMARegisterResult *result) ++{ ++ result->rkey = ntohl(result->rkey); ++ result->host_addr = ntohll(result->host_addr); ++}; ++ ++const char *print_wrid(int wrid); ++static int qemu_rdma_exchange_send(RDMAContext *rdma, RDMAControlHeader *head, ++ uint8_t *data, RDMAControlHeader *resp, ++ int *resp_idx, ++ int (*callback)(RDMAContext *rdma)); ++ ++static inline uint64_t ram_chunk_index(uint8_t *start, uint8_t *host) ++{ ++ return ((uintptr_t) host - (uintptr_t) start) >> RDMA_REG_CHUNK_SHIFT; ++} ++ ++static inline uint8_t *ram_chunk_start(RDMALocalBlock *rdma_ram_block, ++ uint64_t i) ++{ ++ return (uint8_t *) (((uintptr_t) rdma_ram_block->local_host_addr) ++ + (i << RDMA_REG_CHUNK_SHIFT)); ++} ++ ++static inline uint8_t *ram_chunk_end(RDMALocalBlock *rdma_ram_block, uint64_t i) ++{ ++ uint8_t *result = ram_chunk_start(rdma_ram_block, i) + ++ (1UL << RDMA_REG_CHUNK_SHIFT); ++ ++ if (result > (rdma_ram_block->local_host_addr + rdma_ram_block->length)) { ++ result = rdma_ram_block->local_host_addr + rdma_ram_block->length; ++ } ++ ++ return result; ++} ++ ++static int __qemu_rdma_add_block(RDMAContext *rdma, void *host_addr, ++ ram_addr_t block_offset, uint64_t length) ++{ ++ RDMALocalBlocks *local = &rdma->local_ram_blocks; ++ RDMALocalBlock *block = g_hash_table_lookup(rdma->blockmap, ++ (void *) block_offset); ++ RDMALocalBlock *old = local->block; ++ ++ assert(block == NULL); ++ ++ local->block = g_malloc0(sizeof(RDMALocalBlock) * (local->nb_blocks + 1)); ++ ++ if (local->nb_blocks) { ++ int x; ++ ++ for (x = 0; x < local->nb_blocks; x++) { ++ g_hash_table_remove(rdma->blockmap, (void *)old[x].offset); ++ g_hash_table_insert(rdma->blockmap, (void *)old[x].offset, ++ &local->block[x]); ++ } ++ memcpy(local->block, old, sizeof(RDMALocalBlock) * local->nb_blocks); ++ g_free(old); ++ } ++ ++ block = &local->block[local->nb_blocks]; ++ ++ block->local_host_addr = host_addr; ++ block->offset = block_offset; ++ block->length = length; ++ block->index = local->nb_blocks; ++ block->nb_chunks = ram_chunk_index(host_addr, host_addr + length) + 1UL; ++ block->transit_bitmap = bitmap_new(block->nb_chunks); ++ bitmap_clear(block->transit_bitmap, 0, block->nb_chunks); ++ block->unregister_bitmap = bitmap_new(block->nb_chunks); ++ bitmap_clear(block->unregister_bitmap, 0, block->nb_chunks); ++ block->remote_keys = g_malloc0(block->nb_chunks * sizeof(uint32_t)); ++ ++ block->is_ram_block = local->init ? false : true; ++ ++ g_hash_table_insert(rdma->blockmap, (void *) block_offset, block); ++ ++ DDPRINTF("Added Block: %d, addr: %" PRIu64 ", offset: %" PRIu64 ++ " length: %" PRIu64 " end: %" PRIu64 " bits %" PRIu64 " chunks %d\n", ++ local->nb_blocks, (uint64_t) block->local_host_addr, block->offset, ++ block->length, (uint64_t) (block->local_host_addr + block->length), ++ BITS_TO_LONGS(block->nb_chunks) * ++ sizeof(unsigned long) * 8, block->nb_chunks); ++ ++ local->nb_blocks++; ++ ++ return 0; ++} ++ ++/* ++ * Memory regions need to be registered with the device and queue pairs setup ++ * in advanced before the migration starts. This tells us where the RAM blocks ++ * are so that we can register them individually. ++ */ ++static void qemu_rdma_init_one_block(void *host_addr, ++ ram_addr_t block_offset, ram_addr_t length, void *opaque) ++{ ++ __qemu_rdma_add_block(opaque, host_addr, block_offset, length); ++} ++ ++/* ++ * Identify the RAMBlocks and their quantity. They will be references to ++ * identify chunk boundaries inside each RAMBlock and also be referenced ++ * during dynamic page registration. ++ */ ++static int qemu_rdma_init_ram_blocks(RDMAContext *rdma) ++{ ++ RDMALocalBlocks *local = &rdma->local_ram_blocks; ++ ++ assert(rdma->blockmap == NULL); ++ rdma->blockmap = g_hash_table_new(g_direct_hash, g_direct_equal); ++ memset(local, 0, sizeof *local); ++ qemu_ram_foreach_block(qemu_rdma_init_one_block, rdma); ++ DPRINTF("Allocated %d local ram block structures\n", local->nb_blocks); ++ rdma->block = (RDMARemoteBlock *) g_malloc0(sizeof(RDMARemoteBlock) * ++ rdma->local_ram_blocks.nb_blocks); ++ local->init = true; ++ return 0; ++} ++ ++static int __qemu_rdma_delete_block(RDMAContext *rdma, ram_addr_t block_offset) ++{ ++ RDMALocalBlocks *local = &rdma->local_ram_blocks; ++ RDMALocalBlock *block = g_hash_table_lookup(rdma->blockmap, ++ (void *) block_offset); ++ RDMALocalBlock *old = local->block; ++ int x; ++ ++ assert(block); ++ ++ if (block->pmr) { ++ int j; ++ ++ for (j = 0; j < block->nb_chunks; j++) { ++ if (!block->pmr[j]) { ++ continue; ++ } ++ ibv_dereg_mr(block->pmr[j]); ++ rdma->total_registrations--; ++ } ++ g_free(block->pmr); ++ block->pmr = NULL; ++ } ++ ++ if (block->mr) { ++ ibv_dereg_mr(block->mr); ++ rdma->total_registrations--; ++ block->mr = NULL; ++ } ++ ++ g_free(block->transit_bitmap); ++ block->transit_bitmap = NULL; ++ ++ g_free(block->unregister_bitmap); ++ block->unregister_bitmap = NULL; ++ ++ g_free(block->remote_keys); ++ block->remote_keys = NULL; ++ ++ for (x = 0; x < local->nb_blocks; x++) { ++ g_hash_table_remove(rdma->blockmap, (void *)old[x].offset); ++ } ++ ++ if (local->nb_blocks > 1) { ++ ++ local->block = g_malloc0(sizeof(RDMALocalBlock) * ++ (local->nb_blocks - 1)); ++ ++ if (block->index) { ++ memcpy(local->block, old, sizeof(RDMALocalBlock) * block->index); ++ } ++ ++ if (block->index < (local->nb_blocks - 1)) { ++ memcpy(local->block + block->index, old + (block->index + 1), ++ sizeof(RDMALocalBlock) * ++ (local->nb_blocks - (block->index + 1))); ++ } ++ } else { ++ assert(block == local->block); ++ local->block = NULL; ++ } ++ ++ DDPRINTF("Deleted Block: %d, addr: %" PRIu64 ", offset: %" PRIu64 ++ " length: %" PRIu64 " end: %" PRIu64 " bits %" PRIu64 " chunks %d\n", ++ local->nb_blocks, (uint64_t) block->local_host_addr, block->offset, ++ block->length, (uint64_t) (block->local_host_addr + block->length), ++ BITS_TO_LONGS(block->nb_chunks) * ++ sizeof(unsigned long) * 8, block->nb_chunks); ++ ++ g_free(old); ++ ++ local->nb_blocks--; ++ ++ if (local->nb_blocks) { ++ for (x = 0; x < local->nb_blocks; x++) { ++ g_hash_table_insert(rdma->blockmap, (void *)local->block[x].offset, ++ &local->block[x]); ++ } ++ } ++ ++ return 0; ++} ++ ++/* ++ * Put in the log file which RDMA device was opened and the details ++ * associated with that device. ++ */ ++static void qemu_rdma_dump_id(const char *who, struct ibv_context *verbs) ++{ ++ printf("%s RDMA Device opened: kernel name %s " ++ "uverbs device name %s, " ++ "infiniband_verbs class device path %s," ++ " infiniband class device path %s\n", ++ who, ++ verbs->device->name, ++ verbs->device->dev_name, ++ verbs->device->dev_path, ++ verbs->device->ibdev_path); ++} ++ ++/* ++ * Put in the log file the RDMA gid addressing information, ++ * useful for folks who have trouble understanding the ++ * RDMA device hierarchy in the kernel. ++ */ ++static void qemu_rdma_dump_gid(const char *who, struct rdma_cm_id *id) ++{ ++ char sgid[33]; ++ char dgid[33]; ++ inet_ntop(AF_INET6, &id->route.addr.addr.ibaddr.sgid, sgid, sizeof sgid); ++ inet_ntop(AF_INET6, &id->route.addr.addr.ibaddr.dgid, dgid, sizeof dgid); ++ DPRINTF("%s Source GID: %s, Dest GID: %s\n", who, sgid, dgid); ++} ++ ++/* ++ * Figure out which RDMA device corresponds to the requested IP hostname ++ * Also create the initial connection manager identifiers for opening ++ * the connection. ++ */ ++static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) ++{ ++ int ret; ++ struct addrinfo *res; ++ char port_str[16]; ++ struct rdma_cm_event *cm_event; ++ char ip[40] = "unknown"; ++ ++ if (rdma->host == NULL || !strcmp(rdma->host, "")) { ++ ERROR(errp, "RDMA hostname has not been set\n"); ++ return -1; ++ } ++ ++ /* create CM channel */ ++ rdma->channel = rdma_create_event_channel(); ++ if (!rdma->channel) { ++ ERROR(errp, "could not create CM channel\n"); ++ return -1; ++ } ++ ++ /* create CM id */ ++ ret = rdma_create_id(rdma->channel, &rdma->cm_id, NULL, RDMA_PS_TCP); ++ if (ret) { ++ ERROR(errp, "could not create channel id\n"); ++ goto err_resolve_create_id; ++ } ++ ++ snprintf(port_str, 16, "%d", rdma->port); ++ port_str[15] = '\0'; ++ ++ ret = getaddrinfo(rdma->host, port_str, NULL, &res); ++ if (ret < 0) { ++ ERROR(errp, "could not getaddrinfo address %s\n", rdma->host); ++ goto err_resolve_get_addr; ++ } ++ ++ inet_ntop(AF_INET, &((struct sockaddr_in *) res->ai_addr)->sin_addr, ++ ip, sizeof ip); ++ DPRINTF("%s => %s\n", rdma->host, ip); ++ ++ /* resolve the first address */ ++ ret = rdma_resolve_addr(rdma->cm_id, NULL, res->ai_addr, ++ RDMA_RESOLVE_TIMEOUT_MS); ++ if (ret) { ++ ERROR(errp, "could not resolve address %s\n", rdma->host); ++ goto err_resolve_get_addr; ++ } ++ ++ qemu_rdma_dump_gid("source_resolve_addr", rdma->cm_id); ++ ++ ret = rdma_get_cm_event(rdma->channel, &cm_event); ++ if (ret) { ++ ERROR(errp, "could not perform event_addr_resolved\n"); ++ goto err_resolve_get_addr; ++ } ++ ++ if (cm_event->event != RDMA_CM_EVENT_ADDR_RESOLVED) { ++ ERROR(errp, "result not equal to event_addr_resolved %s\n", ++ rdma_event_str(cm_event->event)); ++ perror("rdma_resolve_addr"); ++ goto err_resolve_get_addr; ++ } ++ rdma_ack_cm_event(cm_event); ++ ++ /* resolve route */ ++ ret = rdma_resolve_route(rdma->cm_id, RDMA_RESOLVE_TIMEOUT_MS); ++ if (ret) { ++ ERROR(errp, "could not resolve rdma route\n"); ++ goto err_resolve_get_addr; ++ } ++ ++ ret = rdma_get_cm_event(rdma->channel, &cm_event); ++ if (ret) { ++ ERROR(errp, "could not perform event_route_resolved\n"); ++ goto err_resolve_get_addr; ++ } ++ if (cm_event->event != RDMA_CM_EVENT_ROUTE_RESOLVED) { ++ ERROR(errp, "result not equal to event_route_resolved: %s\n", ++ rdma_event_str(cm_event->event)); ++ rdma_ack_cm_event(cm_event); ++ goto err_resolve_get_addr; ++ } ++ rdma_ack_cm_event(cm_event); ++ rdma->verbs = rdma->cm_id->verbs; ++ qemu_rdma_dump_id("source_resolve_host", rdma->cm_id->verbs); ++ qemu_rdma_dump_gid("source_resolve_host", rdma->cm_id); ++ return 0; ++ ++err_resolve_get_addr: ++ rdma_destroy_id(rdma->cm_id); ++ rdma->cm_id = NULL; ++err_resolve_create_id: ++ rdma_destroy_event_channel(rdma->channel); ++ rdma->channel = NULL; ++ ++ return -1; ++} ++ ++/* ++ * Create protection domain and completion queues ++ */ ++static int qemu_rdma_alloc_pd_cq(RDMAContext *rdma) ++{ ++ /* allocate pd */ ++ rdma->pd = ibv_alloc_pd(rdma->verbs); ++ if (!rdma->pd) { ++ fprintf(stderr, "failed to allocate protection domain\n"); ++ return -1; ++ } ++ ++ /* create completion channel */ ++ rdma->comp_channel = ibv_create_comp_channel(rdma->verbs); ++ if (!rdma->comp_channel) { ++ fprintf(stderr, "failed to allocate completion channel\n"); ++ goto err_alloc_pd_cq; ++ } ++ ++ /* ++ * Completion queue can be filled by both read and write work requests, ++ * so must reflect the sum of both possible queue sizes. ++ */ ++ rdma->cq = ibv_create_cq(rdma->verbs, (RDMA_SIGNALED_SEND_MAX * 3), ++ NULL, rdma->comp_channel, 0); ++ if (!rdma->cq) { ++ fprintf(stderr, "failed to allocate completion queue\n"); ++ goto err_alloc_pd_cq; ++ } ++ ++ return 0; ++ ++err_alloc_pd_cq: ++ if (rdma->pd) { ++ ibv_dealloc_pd(rdma->pd); ++ } ++ if (rdma->comp_channel) { ++ ibv_destroy_comp_channel(rdma->comp_channel); ++ } ++ rdma->pd = NULL; ++ rdma->comp_channel = NULL; ++ return -1; ++ ++} ++ ++/* ++ * Create queue pairs. ++ */ ++static int qemu_rdma_alloc_qp(RDMAContext *rdma) ++{ ++ struct ibv_qp_init_attr attr = { 0 }; ++ int ret; ++ ++ attr.cap.max_send_wr = RDMA_SIGNALED_SEND_MAX; ++ attr.cap.max_recv_wr = 3; ++ attr.cap.max_send_sge = 1; ++ attr.cap.max_recv_sge = 1; ++ attr.send_cq = rdma->cq; ++ attr.recv_cq = rdma->cq; ++ attr.qp_type = IBV_QPT_RC; ++ ++ ret = rdma_create_qp(rdma->cm_id, rdma->pd, &attr); ++ if (ret) { ++ return -1; ++ } ++ ++ rdma->qp = rdma->cm_id->qp; ++ return 0; ++} ++ ++static int qemu_rdma_reg_whole_ram_blocks(RDMAContext *rdma) ++{ ++ int i; ++ RDMALocalBlocks *local = &rdma->local_ram_blocks; ++ ++ for (i = 0; i < local->nb_blocks; i++) { ++ local->block[i].mr = ++ ibv_reg_mr(rdma->pd, ++ local->block[i].local_host_addr, ++ local->block[i].length, ++ IBV_ACCESS_LOCAL_WRITE | ++ IBV_ACCESS_REMOTE_WRITE ++ ); ++ if (!local->block[i].mr) { ++ perror("Failed to register local dest ram block!\n"); ++ break; ++ } ++ rdma->total_registrations++; ++ } ++ ++ if (i >= local->nb_blocks) { ++ return 0; ++ } ++ ++ for (i--; i >= 0; i--) { ++ ibv_dereg_mr(local->block[i].mr); ++ rdma->total_registrations--; ++ } ++ ++ return -1; ++ ++} ++ ++/* ++ * Find the ram block that corresponds to the page requested to be ++ * transmitted by QEMU. ++ * ++ * Once the block is found, also identify which 'chunk' within that ++ * block that the page belongs to. ++ * ++ * This search cannot fail or the migration will fail. ++ */ ++static int qemu_rdma_search_ram_block(RDMAContext *rdma, ++ uint64_t block_offset, ++ uint64_t offset, ++ uint64_t length, ++ uint64_t *block_index, ++ uint64_t *chunk_index) ++{ ++ uint64_t current_addr = block_offset + offset; ++ RDMALocalBlock *block = g_hash_table_lookup(rdma->blockmap, ++ (void *) block_offset); ++ assert(block); ++ assert(current_addr >= block->offset); ++ assert((current_addr + length) <= (block->offset + block->length)); ++ ++ *block_index = block->index; ++ *chunk_index = ram_chunk_index(block->local_host_addr, ++ block->local_host_addr + (current_addr - block->offset)); ++ ++ return 0; ++} ++ ++/* ++ * Register a chunk with IB. If the chunk was already registered ++ * previously, then skip. ++ * ++ * Also return the keys associated with the registration needed ++ * to perform the actual RDMA operation. ++ */ ++static int qemu_rdma_register_and_get_keys(RDMAContext *rdma, ++ RDMALocalBlock *block, uint8_t *host_addr, ++ uint32_t *lkey, uint32_t *rkey, int chunk, ++ uint8_t *chunk_start, uint8_t *chunk_end) ++{ ++ if (block->mr) { ++ if (lkey) { ++ *lkey = block->mr->lkey; ++ } ++ if (rkey) { ++ *rkey = block->mr->rkey; ++ } ++ return 0; ++ } ++ ++ /* allocate memory to store chunk MRs */ ++ if (!block->pmr) { ++ block->pmr = g_malloc0(block->nb_chunks * sizeof(struct ibv_mr *)); ++ if (!block->pmr) { ++ return -1; ++ } ++ } ++ ++ /* ++ * If 'rkey', then we're the destination, so grant access to the source. ++ * ++ * If 'lkey', then we're the source VM, so grant access only to ourselves. ++ */ ++ if (!block->pmr[chunk]) { ++ uint64_t len = chunk_end - chunk_start; ++ ++ DDPRINTF("Registering %" PRIu64 " bytes @ %p\n", ++ len, chunk_start); ++ ++ block->pmr[chunk] = ibv_reg_mr(rdma->pd, ++ chunk_start, len, ++ (rkey ? (IBV_ACCESS_LOCAL_WRITE | ++ IBV_ACCESS_REMOTE_WRITE) : 0)); ++ ++ if (!block->pmr[chunk]) { ++ perror("Failed to register chunk!"); ++ fprintf(stderr, "Chunk details: block: %d chunk index %d" ++ " start %" PRIu64 " end %" PRIu64 " host %" PRIu64 ++ " local %" PRIu64 " registrations: %d\n", ++ block->index, chunk, (uint64_t) chunk_start, ++ (uint64_t) chunk_end, (uint64_t) host_addr, ++ (uint64_t) block->local_host_addr, ++ rdma->total_registrations); ++ return -1; ++ } ++ rdma->total_registrations++; ++ } ++ ++ if (lkey) { ++ *lkey = block->pmr[chunk]->lkey; ++ } ++ if (rkey) { ++ *rkey = block->pmr[chunk]->rkey; ++ } ++ return 0; ++} ++ ++/* ++ * Register (at connection time) the memory used for control ++ * channel messages. ++ */ ++static int qemu_rdma_reg_control(RDMAContext *rdma, int idx) ++{ ++ rdma->wr_data[idx].control_mr = ibv_reg_mr(rdma->pd, ++ rdma->wr_data[idx].control, RDMA_CONTROL_MAX_BUFFER, ++ IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE); ++ if (rdma->wr_data[idx].control_mr) { ++ rdma->total_registrations++; ++ return 0; ++ } ++ fprintf(stderr, "qemu_rdma_reg_control failed!\n"); ++ return -1; ++} ++ ++const char *print_wrid(int wrid) ++{ ++ if (wrid >= RDMA_WRID_RECV_CONTROL) { ++ return wrid_desc[RDMA_WRID_RECV_CONTROL]; ++ } ++ return wrid_desc[wrid]; ++} ++ ++/* ++ * RDMA requires memory registration (mlock/pinning), but this is not good for ++ * overcommitment. ++ * ++ * In preparation for the future where LRU information or workload-specific ++ * writable writable working set memory access behavior is available to QEMU ++ * it would be nice to have in place the ability to UN-register/UN-pin ++ * particular memory regions from the RDMA hardware when it is determine that ++ * those regions of memory will likely not be accessed again in the near future. ++ * ++ * While we do not yet have such information right now, the following ++ * compile-time option allows us to perform a non-optimized version of this ++ * behavior. ++ * ++ * By uncommenting this option, you will cause *all* RDMA transfers to be ++ * unregistered immediately after the transfer completes on both sides of the ++ * connection. This has no effect in 'rdma-pin-all' mode, only regular mode. ++ * ++ * This will have a terrible impact on migration performance, so until future ++ * workload information or LRU information is available, do not attempt to use ++ * this feature except for basic testing. ++ */ ++//#define RDMA_UNREGISTRATION_EXAMPLE ++ ++/* ++ * Perform a non-optimized memory unregistration after every transfer ++ * for demonsration purposes, only if pin-all is not requested. ++ * ++ * Potential optimizations: ++ * 1. Start a new thread to run this function continuously ++ - for bit clearing ++ - and for receipt of unregister messages ++ * 2. Use an LRU. ++ * 3. Use workload hints. ++ */ ++static int qemu_rdma_unregister_waiting(RDMAContext *rdma) ++{ ++ while (rdma->unregistrations[rdma->unregister_current]) { ++ int ret; ++ uint64_t wr_id = rdma->unregistrations[rdma->unregister_current]; ++ uint64_t chunk = ++ (wr_id & RDMA_WRID_CHUNK_MASK) >> RDMA_WRID_CHUNK_SHIFT; ++ uint64_t index = ++ (wr_id & RDMA_WRID_BLOCK_MASK) >> RDMA_WRID_BLOCK_SHIFT; ++ RDMALocalBlock *block = ++ &(rdma->local_ram_blocks.block[index]); ++ RDMARegister reg = { .current_index = index }; ++ RDMAControlHeader resp = { .type = RDMA_CONTROL_UNREGISTER_FINISHED, ++ }; ++ RDMAControlHeader head = { .len = sizeof(RDMARegister), ++ .type = RDMA_CONTROL_UNREGISTER_REQUEST, ++ .repeat = 1, ++ }; ++ ++ DDPRINTF("Processing unregister for chunk: %" PRIu64 ++ " at position %d\n", chunk, rdma->unregister_current); ++ ++ rdma->unregistrations[rdma->unregister_current] = 0; ++ rdma->unregister_current++; ++ ++ if (rdma->unregister_current == RDMA_SIGNALED_SEND_MAX) { ++ rdma->unregister_current = 0; ++ } ++ ++ ++ /* ++ * Unregistration is speculative (because migration is single-threaded ++ * and we cannot break the protocol's inifinband message ordering). ++ * Thus, if the memory is currently being used for transmission, ++ * then abort the attempt to unregister and try again ++ * later the next time a completion is received for this memory. ++ */ ++ clear_bit(chunk, block->unregister_bitmap); ++ ++ if (test_bit(chunk, block->transit_bitmap)) { ++ DDPRINTF("Cannot unregister inflight chunk: %" PRIu64 "\n", chunk); ++ continue; ++ } ++ ++ DDPRINTF("Sending unregister for chunk: %" PRIu64 "\n", chunk); ++ ++ ret = ibv_dereg_mr(block->pmr[chunk]); ++ block->pmr[chunk] = NULL; ++ block->remote_keys[chunk] = 0; ++ ++ if (ret != 0) { ++ perror("unregistration chunk failed"); ++ return -ret; ++ } ++ rdma->total_registrations--; ++ ++ reg.key.chunk = chunk; ++ register_to_network(®); ++ ret = qemu_rdma_exchange_send(rdma, &head, (uint8_t *) ®, ++ &resp, NULL, NULL); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ DDPRINTF("Unregister for chunk: %" PRIu64 " complete.\n", chunk); ++ } ++ ++ return 0; ++} ++ ++static uint64_t qemu_rdma_make_wrid(uint64_t wr_id, uint64_t index, ++ uint64_t chunk) ++{ ++ uint64_t result = wr_id & RDMA_WRID_TYPE_MASK; ++ ++ result |= (index << RDMA_WRID_BLOCK_SHIFT); ++ result |= (chunk << RDMA_WRID_CHUNK_SHIFT); ++ ++ return result; ++} ++ ++/* ++ * Set bit for unregistration in the next iteration. ++ * We cannot transmit right here, but will unpin later. ++ */ ++static void qemu_rdma_signal_unregister(RDMAContext *rdma, uint64_t index, ++ uint64_t chunk, uint64_t wr_id) ++{ ++ if (rdma->unregistrations[rdma->unregister_next] != 0) { ++ fprintf(stderr, "rdma migration: queue is full!\n"); ++ } else { ++ RDMALocalBlock *block = &(rdma->local_ram_blocks.block[index]); ++ ++ if (!test_and_set_bit(chunk, block->unregister_bitmap)) { ++ DDPRINTF("Appending unregister chunk %" PRIu64 ++ " at position %d\n", chunk, rdma->unregister_next); ++ ++ rdma->unregistrations[rdma->unregister_next++] = ++ qemu_rdma_make_wrid(wr_id, index, chunk); ++ ++ if (rdma->unregister_next == RDMA_SIGNALED_SEND_MAX) { ++ rdma->unregister_next = 0; ++ } ++ } else { ++ DDPRINTF("Unregister chunk %" PRIu64 " already in queue.\n", ++ chunk); ++ } ++ } ++} ++ ++/* ++ * Consult the connection manager to see a work request ++ * (of any kind) has completed. ++ * Return the work request ID that completed. ++ */ ++static uint64_t qemu_rdma_poll(RDMAContext *rdma, uint64_t *wr_id_out) ++{ ++ int ret; ++ struct ibv_wc wc; ++ uint64_t wr_id; ++ ++ ret = ibv_poll_cq(rdma->cq, 1, &wc); ++ ++ if (!ret) { ++ *wr_id_out = RDMA_WRID_NONE; ++ return 0; ++ } ++ ++ if (ret < 0) { ++ fprintf(stderr, "ibv_poll_cq return %d!\n", ret); ++ return ret; ++ } ++ ++ wr_id = wc.wr_id & RDMA_WRID_TYPE_MASK; ++ ++ if (wc.status != IBV_WC_SUCCESS) { ++ fprintf(stderr, "ibv_poll_cq wc.status=%d %s!\n", ++ wc.status, ibv_wc_status_str(wc.status)); ++ fprintf(stderr, "ibv_poll_cq wrid=%s!\n", wrid_desc[wr_id]); ++ ++ return -1; ++ } ++ ++ if (rdma->control_ready_expected && ++ (wr_id >= RDMA_WRID_RECV_CONTROL)) { ++ DDDPRINTF("completion %s #%" PRId64 " received (%" PRId64 ")" ++ " left %d\n", wrid_desc[RDMA_WRID_RECV_CONTROL], ++ wr_id - RDMA_WRID_RECV_CONTROL, wr_id, rdma->nb_sent); ++ rdma->control_ready_expected = 0; ++ } ++ ++ if (wr_id == RDMA_WRID_RDMA_WRITE) { ++ uint64_t chunk = ++ (wc.wr_id & RDMA_WRID_CHUNK_MASK) >> RDMA_WRID_CHUNK_SHIFT; ++ uint64_t index = ++ (wc.wr_id & RDMA_WRID_BLOCK_MASK) >> RDMA_WRID_BLOCK_SHIFT; ++ RDMALocalBlock *block = &(rdma->local_ram_blocks.block[index]); ++ ++ DDDPRINTF("completions %s (%" PRId64 ") left %d, " ++ "block %" PRIu64 ", chunk: %" PRIu64 " %p %p\n", ++ print_wrid(wr_id), wr_id, rdma->nb_sent, index, chunk, ++ block->local_host_addr, (void *)block->remote_host_addr); ++ ++ clear_bit(chunk, block->transit_bitmap); ++ ++ if (rdma->nb_sent > 0) { ++ rdma->nb_sent--; ++ } ++ ++ if (!rdma->pin_all) { ++ /* ++ * FYI: If one wanted to signal a specific chunk to be unregistered ++ * using LRU or workload-specific information, this is the function ++ * you would call to do so. That chunk would then get asynchronously ++ * unregistered later. ++ */ ++#ifdef RDMA_UNREGISTRATION_EXAMPLE ++ qemu_rdma_signal_unregister(rdma, index, chunk, wc.wr_id); ++#endif ++ } ++ } else { ++ DDDPRINTF("other completion %s (%" PRId64 ") received left %d\n", ++ print_wrid(wr_id), wr_id, rdma->nb_sent); ++ } ++ ++ *wr_id_out = wc.wr_id; ++ ++ return 0; ++} ++ ++/* ++ * Block until the next work request has completed. ++ * ++ * First poll to see if a work request has already completed, ++ * otherwise block. ++ * ++ * If we encounter completed work requests for IDs other than ++ * the one we're interested in, then that's generally an error. ++ * ++ * The only exception is actual RDMA Write completions. These ++ * completions only need to be recorded, but do not actually ++ * need further processing. ++ */ ++static int qemu_rdma_block_for_wrid(RDMAContext *rdma, int wrid_requested) ++{ ++ int num_cq_events = 0, ret = 0; ++ struct ibv_cq *cq; ++ void *cq_ctx; ++ uint64_t wr_id = RDMA_WRID_NONE, wr_id_in; ++ ++ if (ibv_req_notify_cq(rdma->cq, 0)) { ++ return -1; ++ } ++ /* poll cq first */ ++ while (wr_id != wrid_requested) { ++ ret = qemu_rdma_poll(rdma, &wr_id_in); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ wr_id = wr_id_in & RDMA_WRID_TYPE_MASK; ++ ++ if (wr_id == RDMA_WRID_NONE) { ++ break; ++ } ++ if (wr_id != wrid_requested) { ++ DDDPRINTF("A Wanted wrid %s (%d) but got %s (%" PRIu64 ")\n", ++ print_wrid(wrid_requested), ++ wrid_requested, print_wrid(wr_id), wr_id); ++ } ++ } ++ ++ if (wr_id == wrid_requested) { ++ return 0; ++ } ++ ++ while (1) { ++ /* ++ * Coroutine doesn't start until process_incoming_migration() ++ * so don't yield unless we know we're running inside of a coroutine. ++ */ ++ if (rdma->migration_started_on_destination) { ++ yield_until_fd_readable(rdma->comp_channel->fd); ++ } ++ ++ if (ibv_get_cq_event(rdma->comp_channel, &cq, &cq_ctx)) { ++ perror("ibv_get_cq_event"); ++ goto err_block_for_wrid; ++ } ++ ++ num_cq_events++; ++ ++ if (ibv_req_notify_cq(cq, 0)) { ++ goto err_block_for_wrid; ++ } ++ ++ while (wr_id != wrid_requested) { ++ ret = qemu_rdma_poll(rdma, &wr_id_in); ++ if (ret < 0) { ++ goto err_block_for_wrid; ++ } ++ ++ wr_id = wr_id_in & RDMA_WRID_TYPE_MASK; ++ ++ if (wr_id == RDMA_WRID_NONE) { ++ break; ++ } ++ if (wr_id != wrid_requested) { ++ DDDPRINTF("B Wanted wrid %s (%d) but got %s (%" PRIu64 ")\n", ++ print_wrid(wrid_requested), wrid_requested, ++ print_wrid(wr_id), wr_id); ++ } ++ } ++ ++ if (wr_id == wrid_requested) { ++ goto success_block_for_wrid; ++ } ++ } ++ ++success_block_for_wrid: ++ if (num_cq_events) { ++ ibv_ack_cq_events(cq, num_cq_events); ++ } ++ return 0; ++ ++err_block_for_wrid: ++ if (num_cq_events) { ++ ibv_ack_cq_events(cq, num_cq_events); ++ } ++ return ret; ++} ++ ++/* ++ * Post a SEND message work request for the control channel ++ * containing some data and block until the post completes. ++ */ ++static int qemu_rdma_post_send_control(RDMAContext *rdma, uint8_t *buf, ++ RDMAControlHeader *head) ++{ ++ int ret = 0; ++ RDMAWorkRequestData *wr = &rdma->wr_data[RDMA_WRID_MAX]; ++ struct ibv_send_wr *bad_wr; ++ struct ibv_sge sge = { ++ .addr = (uint64_t)(wr->control), ++ .length = head->len + sizeof(RDMAControlHeader), ++ .lkey = wr->control_mr->lkey, ++ }; ++ struct ibv_send_wr send_wr = { ++ .wr_id = RDMA_WRID_SEND_CONTROL, ++ .opcode = IBV_WR_SEND, ++ .send_flags = IBV_SEND_SIGNALED, ++ .sg_list = &sge, ++ .num_sge = 1, ++ }; ++ ++ DDDPRINTF("CONTROL: sending %s..\n", control_desc[head->type]); ++ ++ /* ++ * We don't actually need to do a memcpy() in here if we used ++ * the "sge" properly, but since we're only sending control messages ++ * (not RAM in a performance-critical path), then its OK for now. ++ * ++ * The copy makes the RDMAControlHeader simpler to manipulate ++ * for the time being. ++ */ ++ memcpy(wr->control, head, sizeof(RDMAControlHeader)); ++ control_to_network((void *) wr->control); ++ ++ if (buf) { ++ memcpy(wr->control + sizeof(RDMAControlHeader), buf, head->len); ++ } ++ ++ ++ if (ibv_post_send(rdma->qp, &send_wr, &bad_wr)) { ++ return -1; ++ } ++ ++ if (ret < 0) { ++ fprintf(stderr, "Failed to use post IB SEND for control!\n"); ++ return ret; ++ } ++ ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_SEND_CONTROL); ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: send polling control error!\n"); ++ } ++ ++ return ret; ++} ++ ++/* ++ * Post a RECV work request in anticipation of some future receipt ++ * of data on the control channel. ++ */ ++static int qemu_rdma_post_recv_control(RDMAContext *rdma, int idx) ++{ ++ struct ibv_recv_wr *bad_wr; ++ struct ibv_sge sge = { ++ .addr = (uint64_t)(rdma->wr_data[idx].control), ++ .length = RDMA_CONTROL_MAX_BUFFER, ++ .lkey = rdma->wr_data[idx].control_mr->lkey, ++ }; ++ ++ struct ibv_recv_wr recv_wr = { ++ .wr_id = RDMA_WRID_RECV_CONTROL + idx, ++ .sg_list = &sge, ++ .num_sge = 1, ++ }; ++ ++ ++ if (ibv_post_recv(rdma->qp, &recv_wr, &bad_wr)) { ++ return -1; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Block and wait for a RECV control channel message to arrive. ++ */ ++static int qemu_rdma_exchange_get_response(RDMAContext *rdma, ++ RDMAControlHeader *head, int expecting, int idx) ++{ ++ int ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RECV_CONTROL + idx); ++ ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: recv polling control error!\n"); ++ return ret; ++ } ++ ++ network_to_control((void *) rdma->wr_data[idx].control); ++ memcpy(head, rdma->wr_data[idx].control, sizeof(RDMAControlHeader)); ++ ++ DDDPRINTF("CONTROL: %s receiving...\n", control_desc[expecting]); ++ ++ if (expecting == RDMA_CONTROL_NONE) { ++ DDDPRINTF("Surprise: got %s (%d)\n", ++ control_desc[head->type], head->type); ++ } else if (head->type != expecting || head->type == RDMA_CONTROL_ERROR) { ++ fprintf(stderr, "Was expecting a %s (%d) control message" ++ ", but got: %s (%d), length: %d\n", ++ control_desc[expecting], expecting, ++ control_desc[head->type], head->type, head->len); ++ return -EIO; ++ } ++ ++ return 0; ++} ++ ++/* ++ * When a RECV work request has completed, the work request's ++ * buffer is pointed at the header. ++ * ++ * This will advance the pointer to the data portion ++ * of the control message of the work request's buffer that ++ * was populated after the work request finished. ++ */ ++static void qemu_rdma_move_header(RDMAContext *rdma, int idx, ++ RDMAControlHeader *head) ++{ ++ rdma->wr_data[idx].control_len = head->len; ++ rdma->wr_data[idx].control_curr = ++ rdma->wr_data[idx].control + sizeof(RDMAControlHeader); ++} ++ ++/* ++ * This is an 'atomic' high-level operation to deliver a single, unified ++ * control-channel message. ++ * ++ * Additionally, if the user is expecting some kind of reply to this message, ++ * they can request a 'resp' response message be filled in by posting an ++ * additional work request on behalf of the user and waiting for an additional ++ * completion. ++ * ++ * The extra (optional) response is used during registration to us from having ++ * to perform an *additional* exchange of message just to provide a response by ++ * instead piggy-backing on the acknowledgement. ++ */ ++static int qemu_rdma_exchange_send(RDMAContext *rdma, RDMAControlHeader *head, ++ uint8_t *data, RDMAControlHeader *resp, ++ int *resp_idx, ++ int (*callback)(RDMAContext *rdma)) ++{ ++ int ret = 0; ++ ++ /* ++ * Wait until the dest is ready before attempting to deliver the message ++ * by waiting for a READY message. ++ */ ++ if (rdma->control_ready_expected) { ++ RDMAControlHeader resp; ++ ret = qemu_rdma_exchange_get_response(rdma, ++ &resp, RDMA_CONTROL_READY, RDMA_WRID_READY); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ ++ /* ++ * If the user is expecting a response, post a WR in anticipation of it. ++ */ ++ if (resp) { ++ ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_DATA); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error posting" ++ " extra control recv for anticipated result!"); ++ return ret; ++ } ++ } ++ ++ /* ++ * Post a WR to replace the one we just consumed for the READY message. ++ */ ++ ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error posting first control recv!"); ++ return ret; ++ } ++ ++ /* ++ * Deliver the control message that was requested. ++ */ ++ ret = qemu_rdma_post_send_control(rdma, data, head); ++ ++ if (ret < 0) { ++ fprintf(stderr, "Failed to send control buffer!\n"); ++ return ret; ++ } ++ ++ /* ++ * If we're expecting a response, block and wait for it. ++ */ ++ if (resp) { ++ if (callback) { ++ DDPRINTF("Issuing callback before receiving response...\n"); ++ ret = callback(rdma); ++ if (ret < 0) { ++ return ret; ++ } ++ } ++ ++ DDPRINTF("Waiting for response %s\n", control_desc[resp->type]); ++ ret = qemu_rdma_exchange_get_response(rdma, resp, ++ resp->type, RDMA_WRID_DATA); ++ ++ if (ret < 0) { ++ return ret; ++ } ++ ++ qemu_rdma_move_header(rdma, RDMA_WRID_DATA, resp); ++ if (resp_idx) { ++ *resp_idx = RDMA_WRID_DATA; ++ } ++ DDPRINTF("Response %s received.\n", control_desc[resp->type]); ++ } ++ ++ rdma->control_ready_expected = 1; ++ ++ return 0; ++} ++ ++/* ++ * This is an 'atomic' high-level operation to receive a single, unified ++ * control-channel message. ++ */ ++static int qemu_rdma_exchange_recv(RDMAContext *rdma, RDMAControlHeader *head, ++ int expecting) ++{ ++ RDMAControlHeader ready = { ++ .len = 0, ++ .type = RDMA_CONTROL_READY, ++ .repeat = 1, ++ }; ++ int ret; ++ ++ /* ++ * Inform the source that we're ready to receive a message. ++ */ ++ ret = qemu_rdma_post_send_control(rdma, NULL, &ready); ++ ++ if (ret < 0) { ++ fprintf(stderr, "Failed to send control buffer!\n"); ++ return ret; ++ } ++ ++ /* ++ * Block and wait for the message. ++ */ ++ ret = qemu_rdma_exchange_get_response(rdma, head, ++ expecting, RDMA_WRID_READY); ++ ++ if (ret < 0) { ++ return ret; ++ } ++ ++ qemu_rdma_move_header(rdma, RDMA_WRID_READY, head); ++ ++ /* ++ * Post a new RECV work request to replace the one we just consumed. ++ */ ++ ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error posting second control recv!"); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* ++ * Write an actual chunk of memory using RDMA. ++ * ++ * If we're using dynamic registration on the dest-side, we have to ++ * send a registration command first. ++ */ ++static int qemu_rdma_write_one(QEMUFile *f, RDMAContext *rdma, ++ int current_index, uint64_t current_addr, ++ uint64_t length) ++{ ++ struct ibv_sge sge; ++ struct ibv_send_wr send_wr = { 0 }; ++ struct ibv_send_wr *bad_wr; ++ int reg_result_idx, ret, count = 0; ++ uint64_t chunk, chunks; ++ uint8_t *chunk_start, *chunk_end; ++ RDMALocalBlock *block = &(rdma->local_ram_blocks.block[current_index]); ++ RDMARegister reg; ++ RDMARegisterResult *reg_result; ++ RDMAControlHeader resp = { .type = RDMA_CONTROL_REGISTER_RESULT }; ++ RDMAControlHeader head = { .len = sizeof(RDMARegister), ++ .type = RDMA_CONTROL_REGISTER_REQUEST, ++ .repeat = 1, ++ }; ++ ++retry: ++ sge.addr = (uint64_t)(block->local_host_addr + ++ (current_addr - block->offset)); ++ sge.length = length; ++ ++ chunk = ram_chunk_index(block->local_host_addr, (uint8_t *) sge.addr); ++ chunk_start = ram_chunk_start(block, chunk); ++ ++ if (block->is_ram_block) { ++ chunks = length / (1UL << RDMA_REG_CHUNK_SHIFT); ++ ++ if (chunks && ((length % (1UL << RDMA_REG_CHUNK_SHIFT)) == 0)) { ++ chunks--; ++ } ++ } else { ++ chunks = block->length / (1UL << RDMA_REG_CHUNK_SHIFT); ++ ++ if (chunks && ((block->length % (1UL << RDMA_REG_CHUNK_SHIFT)) == 0)) { ++ chunks--; ++ } ++ } ++ ++ DDPRINTF("Writing %" PRIu64 " chunks, (%" PRIu64 " MB)\n", ++ chunks + 1, (chunks + 1) * (1UL << RDMA_REG_CHUNK_SHIFT) / 1024 / 1024); ++ ++ chunk_end = ram_chunk_end(block, chunk + chunks); ++ ++ if (!rdma->pin_all) { ++#ifdef RDMA_UNREGISTRATION_EXAMPLE ++ qemu_rdma_unregister_waiting(rdma); ++#endif ++ } ++ ++ while (test_bit(chunk, block->transit_bitmap)) { ++ (void)count; ++ DDPRINTF("(%d) Not clobbering: block: %d chunk %" PRIu64 ++ " current %" PRIu64 " len %" PRIu64 " %d %d\n", ++ count++, current_index, chunk, ++ sge.addr, length, rdma->nb_sent, block->nb_chunks); ++ ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE); ++ ++ if (ret < 0) { ++ fprintf(stderr, "Failed to Wait for previous write to complete " ++ "block %d chunk %" PRIu64 ++ " current %" PRIu64 " len %" PRIu64 " %d\n", ++ current_index, chunk, sge.addr, length, rdma->nb_sent); ++ return ret; ++ } ++ } ++ ++ if (!rdma->pin_all || !block->is_ram_block) { ++ if (!block->remote_keys[chunk]) { ++ /* ++ * This chunk has not yet been registered, so first check to see ++ * if the entire chunk is zero. If so, tell the other size to ++ * memset() + madvise() the entire chunk without RDMA. ++ */ ++ ++ if (can_use_buffer_find_nonzero_offset((void *)sge.addr, length) ++ && buffer_find_nonzero_offset((void *)sge.addr, ++ length) == length) { ++ RDMACompress comp = { ++ .offset = current_addr, ++ .value = 0, ++ .block_idx = current_index, ++ .length = length, ++ }; ++ ++ head.len = sizeof(comp); ++ head.type = RDMA_CONTROL_COMPRESS; ++ ++ DDPRINTF("Entire chunk is zero, sending compress: %" ++ PRIu64 " for %d " ++ "bytes, index: %d, offset: %" PRId64 "...\n", ++ chunk, sge.length, current_index, current_addr); ++ ++ compress_to_network(&comp); ++ ret = qemu_rdma_exchange_send(rdma, &head, ++ (uint8_t *) &comp, NULL, NULL, NULL); ++ ++ if (ret < 0) { ++ return -EIO; ++ } ++ ++ acct_update_position(f, sge.length, true); ++ ++ return 1; ++ } ++ ++ /* ++ * Otherwise, tell other side to register. ++ */ ++ reg.current_index = current_index; ++ if (block->is_ram_block) { ++ reg.key.current_addr = current_addr; ++ } else { ++ reg.key.chunk = chunk; ++ } ++ reg.chunks = chunks; ++ ++ DDPRINTF("Sending registration request chunk %" PRIu64 " for %d " ++ "bytes, index: %d, offset: %" PRId64 "...\n", ++ chunk, sge.length, current_index, current_addr); ++ ++ register_to_network(®); ++ ret = qemu_rdma_exchange_send(rdma, &head, (uint8_t *) ®, ++ &resp, ®_result_idx, NULL); ++ if (ret < 0) { ++ return ret; ++ } ++ ++ /* try to overlap this single registration with the one we sent. */ ++ if (qemu_rdma_register_and_get_keys(rdma, block, ++ (uint8_t *) sge.addr, ++ &sge.lkey, NULL, chunk, ++ chunk_start, chunk_end)) { ++ fprintf(stderr, "cannot get lkey!\n"); ++ return -EINVAL; ++ } ++ ++ reg_result = (RDMARegisterResult *) ++ rdma->wr_data[reg_result_idx].control_curr; ++ ++ network_to_result(reg_result); ++ ++ DDPRINTF("Received registration result:" ++ " my key: %x their key %x, chunk %" PRIu64 "\n", ++ block->remote_keys[chunk], reg_result->rkey, chunk); ++ ++ block->remote_keys[chunk] = reg_result->rkey; ++ block->remote_host_addr = reg_result->host_addr; ++ } else { ++ /* already registered before */ ++ if (qemu_rdma_register_and_get_keys(rdma, block, ++ (uint8_t *)sge.addr, ++ &sge.lkey, NULL, chunk, ++ chunk_start, chunk_end)) { ++ fprintf(stderr, "cannot get lkey!\n"); ++ return -EINVAL; ++ } ++ } ++ ++ send_wr.wr.rdma.rkey = block->remote_keys[chunk]; ++ } else { ++ send_wr.wr.rdma.rkey = block->remote_rkey; ++ ++ if (qemu_rdma_register_and_get_keys(rdma, block, (uint8_t *)sge.addr, ++ &sge.lkey, NULL, chunk, ++ chunk_start, chunk_end)) { ++ fprintf(stderr, "cannot get lkey!\n"); ++ return -EINVAL; ++ } ++ } ++ ++ /* ++ * Encode the ram block index and chunk within this wrid. ++ * We will use this information at the time of completion ++ * to figure out which bitmap to check against and then which ++ * chunk in the bitmap to look for. ++ */ ++ send_wr.wr_id = qemu_rdma_make_wrid(RDMA_WRID_RDMA_WRITE, ++ current_index, chunk); ++ ++ send_wr.opcode = IBV_WR_RDMA_WRITE; ++ send_wr.send_flags = IBV_SEND_SIGNALED; ++ send_wr.sg_list = &sge; ++ send_wr.num_sge = 1; ++ send_wr.wr.rdma.remote_addr = block->remote_host_addr + ++ (current_addr - block->offset); ++ ++ DDDPRINTF("Posting chunk: %" PRIu64 ", addr: %lx" ++ " remote: %lx, bytes %" PRIu32 "\n", ++ chunk, sge.addr, send_wr.wr.rdma.remote_addr, ++ sge.length); ++ ++ /* ++ * ibv_post_send() does not return negative error numbers, ++ * per the specification they are positive - no idea why. ++ */ ++ ret = ibv_post_send(rdma->qp, &send_wr, &bad_wr); ++ ++ if (ret == ENOMEM) { ++ DDPRINTF("send queue is full. wait a little....\n"); ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE); ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: failed to make " ++ "room in full send queue! %d\n", ret); ++ return ret; ++ } ++ ++ goto retry; ++ ++ } else if (ret > 0) { ++ perror("rdma migration: post rdma write failed"); ++ return -ret; ++ } ++ ++ set_bit(chunk, block->transit_bitmap); ++ acct_update_position(f, sge.length, false); ++ rdma->total_writes++; ++ ++ return 0; ++} ++ ++/* ++ * Push out any unwritten RDMA operations. ++ * ++ * We support sending out multiple chunks at the same time. ++ * Not all of them need to get signaled in the completion queue. ++ */ ++static int qemu_rdma_write_flush(QEMUFile *f, RDMAContext *rdma) ++{ ++ int ret; ++ ++ if (!rdma->current_length) { ++ return 0; ++ } ++ ++ ret = qemu_rdma_write_one(f, rdma, ++ rdma->current_index, rdma->current_addr, rdma->current_length); ++ ++ if (ret < 0) { ++ return ret; ++ } ++ ++ if (ret == 0) { ++ rdma->nb_sent++; ++ DDDPRINTF("sent total: %d\n", rdma->nb_sent); ++ } ++ ++ rdma->current_length = 0; ++ rdma->current_addr = 0; ++ ++ return 0; ++} ++ ++static inline int qemu_rdma_buffer_mergable(RDMAContext *rdma, ++ uint64_t offset, uint64_t len) ++{ ++ RDMALocalBlock *block = ++ &(rdma->local_ram_blocks.block[rdma->current_index]); ++ uint8_t *host_addr = block->local_host_addr + (offset - block->offset); ++ uint8_t *chunk_end = ram_chunk_end(block, rdma->current_chunk); ++ ++ if (rdma->current_length == 0) { ++ return 0; ++ } ++ ++ /* ++ * Only merge into chunk sequentially. ++ */ ++ if (offset != (rdma->current_addr + rdma->current_length)) { ++ return 0; ++ } ++ ++ if (rdma->current_index < 0) { ++ return 0; ++ } ++ ++ if (offset < block->offset) { ++ return 0; ++ } ++ ++ if ((offset + len) > (block->offset + block->length)) { ++ return 0; ++ } ++ ++ if (rdma->current_chunk < 0) { ++ return 0; ++ } ++ ++ if ((host_addr + len) > chunk_end) { ++ return 0; ++ } ++ ++ return 1; ++} ++ ++/* ++ * We're not actually writing here, but doing three things: ++ * ++ * 1. Identify the chunk the buffer belongs to. ++ * 2. If the chunk is full or the buffer doesn't belong to the current ++ * chunk, then start a new chunk and flush() the old chunk. ++ * 3. To keep the hardware busy, we also group chunks into batches ++ * and only require that a batch gets acknowledged in the completion ++ * qeueue instead of each individual chunk. ++ */ ++static int qemu_rdma_write(QEMUFile *f, RDMAContext *rdma, ++ uint64_t block_offset, uint64_t offset, ++ uint64_t len) ++{ ++ uint64_t current_addr = block_offset + offset; ++ uint64_t index = rdma->current_index; ++ uint64_t chunk = rdma->current_chunk; ++ int ret; ++ ++ /* If we cannot merge it, we flush the current buffer first. */ ++ if (!qemu_rdma_buffer_mergable(rdma, current_addr, len)) { ++ ret = qemu_rdma_write_flush(f, rdma); ++ if (ret) { ++ return ret; ++ } ++ rdma->current_length = 0; ++ rdma->current_addr = current_addr; ++ ++ ret = qemu_rdma_search_ram_block(rdma, block_offset, ++ offset, len, &index, &chunk); ++ if (ret) { ++ fprintf(stderr, "ram block search failed\n"); ++ return ret; ++ } ++ rdma->current_index = index; ++ rdma->current_chunk = chunk; ++ } ++ ++ /* merge it */ ++ rdma->current_length += len; ++ ++ /* flush it if buffer is too large */ ++ if (rdma->current_length >= RDMA_MERGE_MAX) { ++ return qemu_rdma_write_flush(f, rdma); ++ } ++ ++ return 0; ++} ++ ++static void qemu_rdma_cleanup(RDMAContext *rdma) ++{ ++ struct rdma_cm_event *cm_event; ++ int ret, idx; ++ ++ if (rdma->cm_id) { ++ if (rdma->error_state) { ++ RDMAControlHeader head = { .len = 0, ++ .type = RDMA_CONTROL_ERROR, ++ .repeat = 1, ++ }; ++ fprintf(stderr, "Early error. Sending error.\n"); ++ qemu_rdma_post_send_control(rdma, NULL, &head); ++ } ++ ++ ret = rdma_disconnect(rdma->cm_id); ++ if (!ret) { ++ DDPRINTF("waiting for disconnect\n"); ++ ret = rdma_get_cm_event(rdma->channel, &cm_event); ++ if (!ret) { ++ rdma_ack_cm_event(cm_event); ++ } ++ } ++ DDPRINTF("Disconnected.\n"); ++ rdma->cm_id = NULL; ++ } ++ ++ g_free(rdma->block); ++ rdma->block = NULL; ++ ++ for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ if (rdma->wr_data[idx].control_mr) { ++ rdma->total_registrations--; ++ ibv_dereg_mr(rdma->wr_data[idx].control_mr); ++ } ++ rdma->wr_data[idx].control_mr = NULL; ++ } ++ ++ if (rdma->local_ram_blocks.block) { ++ while (rdma->local_ram_blocks.nb_blocks) { ++ __qemu_rdma_delete_block(rdma, ++ rdma->local_ram_blocks.block->offset); ++ } ++ } ++ ++ if (rdma->qp) { ++ ibv_destroy_qp(rdma->qp); ++ rdma->qp = NULL; ++ } ++ if (rdma->cq) { ++ ibv_destroy_cq(rdma->cq); ++ rdma->cq = NULL; ++ } ++ if (rdma->comp_channel) { ++ ibv_destroy_comp_channel(rdma->comp_channel); ++ rdma->comp_channel = NULL; ++ } ++ if (rdma->pd) { ++ ibv_dealloc_pd(rdma->pd); ++ rdma->pd = NULL; ++ } ++ if (rdma->listen_id) { ++ rdma_destroy_id(rdma->listen_id); ++ rdma->listen_id = NULL; ++ } ++ if (rdma->cm_id) { ++ rdma_destroy_id(rdma->cm_id); ++ rdma->cm_id = NULL; ++ } ++ if (rdma->channel) { ++ rdma_destroy_event_channel(rdma->channel); ++ rdma->channel = NULL; ++ } ++} ++ ++ ++static int qemu_rdma_source_init(RDMAContext *rdma, Error **errp, bool pin_all) ++{ ++ int ret, idx; ++ Error *local_err = NULL, **temp = &local_err; ++ ++ /* ++ * Will be validated against destination's actual capabilities ++ * after the connect() completes. ++ */ ++ rdma->pin_all = pin_all; ++ ++ ret = qemu_rdma_resolve_host(rdma, temp); ++ if (ret) { ++ goto err_rdma_source_init; ++ } ++ ++ ret = qemu_rdma_alloc_pd_cq(rdma); ++ if (ret) { ++ ERROR(temp, "rdma migration: error allocating pd and cq! Your mlock()" ++ " limits may be too low. Please check $ ulimit -a # and " ++ "search for 'ulimit -l' in the output\n"); ++ goto err_rdma_source_init; ++ } ++ ++ ret = qemu_rdma_alloc_qp(rdma); ++ if (ret) { ++ ERROR(temp, "rdma migration: error allocating qp!\n"); ++ goto err_rdma_source_init; ++ } ++ ++ ret = qemu_rdma_init_ram_blocks(rdma); ++ if (ret) { ++ ERROR(temp, "rdma migration: error initializing ram blocks!\n"); ++ goto err_rdma_source_init; ++ } ++ ++ for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ ret = qemu_rdma_reg_control(rdma, idx); ++ if (ret) { ++ ERROR(temp, "rdma migration: error registering %d control!\n", ++ idx); ++ goto err_rdma_source_init; ++ } ++ } ++ ++ return 0; ++ ++err_rdma_source_init: ++ error_propagate(errp, local_err); ++ qemu_rdma_cleanup(rdma); ++ return -1; ++} ++ ++static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) ++{ ++ RDMACapabilities cap = { ++ .version = RDMA_CONTROL_VERSION_CURRENT, ++ .flags = 0, ++ }; ++ struct rdma_conn_param conn_param = { .initiator_depth = 2, ++ .retry_count = 5, ++ .private_data = &cap, ++ .private_data_len = sizeof(cap), ++ }; ++ struct rdma_cm_event *cm_event; ++ int ret; ++ ++ /* ++ * Only negotiate the capability with destination if the user ++ * on the source first requested the capability. ++ */ ++ if (rdma->pin_all) { ++ DPRINTF("Server pin-all memory requested.\n"); ++ cap.flags |= RDMA_CAPABILITY_PIN_ALL; ++ } ++ ++ caps_to_network(&cap); ++ ++ ret = rdma_connect(rdma->cm_id, &conn_param); ++ if (ret) { ++ perror("rdma_connect"); ++ ERROR(errp, "connecting to destination!\n"); ++ rdma_destroy_id(rdma->cm_id); ++ rdma->cm_id = NULL; ++ goto err_rdma_source_connect; ++ } ++ ++ ret = rdma_get_cm_event(rdma->channel, &cm_event); ++ if (ret) { ++ perror("rdma_get_cm_event after rdma_connect"); ++ ERROR(errp, "connecting to destination!\n"); ++ rdma_ack_cm_event(cm_event); ++ rdma_destroy_id(rdma->cm_id); ++ rdma->cm_id = NULL; ++ goto err_rdma_source_connect; ++ } ++ ++ if (cm_event->event != RDMA_CM_EVENT_ESTABLISHED) { ++ perror("rdma_get_cm_event != EVENT_ESTABLISHED after rdma_connect"); ++ ERROR(errp, "connecting to destination!\n"); ++ rdma_ack_cm_event(cm_event); ++ rdma_destroy_id(rdma->cm_id); ++ rdma->cm_id = NULL; ++ goto err_rdma_source_connect; ++ } ++ ++ memcpy(&cap, cm_event->param.conn.private_data, sizeof(cap)); ++ network_to_caps(&cap); ++ ++ /* ++ * Verify that the *requested* capabilities are supported by the destination ++ * and disable them otherwise. ++ */ ++ if (rdma->pin_all && !(cap.flags & RDMA_CAPABILITY_PIN_ALL)) { ++ ERROR(errp, "Server cannot support pinning all memory. " ++ "Will register memory dynamically.\n"); ++ rdma->pin_all = false; ++ } ++ ++ DPRINTF("Pin all memory: %s\n", rdma->pin_all ? "enabled" : "disabled"); ++ ++ rdma_ack_cm_event(cm_event); ++ ++ ret = qemu_rdma_post_recv_control(rdma, 0); ++ if (ret) { ++ ERROR(errp, "posting second control recv!\n"); ++ goto err_rdma_source_connect; ++ } ++ ++ rdma->control_ready_expected = 1; ++ rdma->nb_sent = 0; ++ return 0; ++ ++err_rdma_source_connect: ++ qemu_rdma_cleanup(rdma); ++ return -1; ++} ++ ++static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) ++{ ++ int ret = -EINVAL, idx; ++ struct sockaddr_in sin; ++ struct rdma_cm_id *listen_id; ++ char ip[40] = "unknown"; ++ ++ for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ rdma->wr_data[idx].control_len = 0; ++ rdma->wr_data[idx].control_curr = NULL; ++ } ++ ++ if (rdma->host == NULL) { ++ ERROR(errp, "RDMA host is not set!\n"); ++ rdma->error_state = -EINVAL; ++ return -1; ++ } ++ /* create CM channel */ ++ rdma->channel = rdma_create_event_channel(); ++ if (!rdma->channel) { ++ ERROR(errp, "could not create rdma event channel\n"); ++ rdma->error_state = -EINVAL; ++ return -1; ++ } ++ ++ /* create CM id */ ++ ret = rdma_create_id(rdma->channel, &listen_id, NULL, RDMA_PS_TCP); ++ if (ret) { ++ ERROR(errp, "could not create cm_id!\n"); ++ goto err_dest_init_create_listen_id; ++ } ++ ++ memset(&sin, 0, sizeof(sin)); ++ sin.sin_family = AF_INET; ++ sin.sin_port = htons(rdma->port); ++ ++ if (rdma->host && strcmp("", rdma->host)) { ++ struct hostent *dest_addr; ++ dest_addr = gethostbyname(rdma->host); ++ if (!dest_addr) { ++ ERROR(errp, "migration could not gethostbyname!\n"); ++ ret = -EINVAL; ++ goto err_dest_init_bind_addr; ++ } ++ memcpy(&sin.sin_addr.s_addr, dest_addr->h_addr, ++ dest_addr->h_length); ++ inet_ntop(AF_INET, dest_addr->h_addr, ip, sizeof ip); ++ } else { ++ sin.sin_addr.s_addr = INADDR_ANY; ++ } ++ ++ DPRINTF("%s => %s\n", rdma->host, ip); ++ ++ ret = rdma_bind_addr(listen_id, (struct sockaddr *)&sin); ++ if (ret) { ++ ERROR(errp, "Error: could not rdma_bind_addr!\n"); ++ goto err_dest_init_bind_addr; ++ } ++ ++ rdma->listen_id = listen_id; ++ qemu_rdma_dump_gid("dest_init", listen_id); ++ return 0; ++ ++err_dest_init_bind_addr: ++ rdma_destroy_id(listen_id); ++err_dest_init_create_listen_id: ++ rdma_destroy_event_channel(rdma->channel); ++ rdma->channel = NULL; ++ rdma->error_state = ret; ++ return ret; ++ ++} ++ ++static void *qemu_rdma_data_init(const char *host_port, Error **errp) ++{ ++ RDMAContext *rdma = NULL; ++ InetSocketAddress *addr; ++ ++ if (host_port) { ++ rdma = g_malloc0(sizeof(RDMAContext)); ++ memset(rdma, 0, sizeof(RDMAContext)); ++ rdma->current_index = -1; ++ rdma->current_chunk = -1; ++ ++ addr = inet_parse(host_port, NULL); ++ if (addr != NULL) { ++ rdma->port = atoi(addr->port); ++ rdma->host = g_strdup(addr->host); ++ } else { ++ ERROR(errp, "bad RDMA migration address '%s'", host_port); ++ g_free(rdma); ++ return NULL; ++ } ++ } ++ ++ return rdma; ++} ++ ++/* ++ * QEMUFile interface to the control channel. ++ * SEND messages for control only. ++ * pc.ram is handled with regular RDMA messages. ++ */ ++static int qemu_rdma_put_buffer(void *opaque, const uint8_t *buf, ++ int64_t pos, int size) ++{ ++ QEMUFileRDMA *r = opaque; ++ QEMUFile *f = r->file; ++ RDMAContext *rdma = r->rdma; ++ size_t remaining = size; ++ uint8_t * data = (void *) buf; ++ int ret; ++ ++ CHECK_ERROR_STATE(); ++ ++ /* ++ * Push out any writes that ++ * we're queued up for pc.ram. ++ */ ++ ret = qemu_rdma_write_flush(f, rdma); ++ if (ret < 0) { ++ rdma->error_state = ret; ++ return ret; ++ } ++ ++ while (remaining) { ++ RDMAControlHeader head; ++ ++ r->len = MIN(remaining, RDMA_SEND_INCREMENT); ++ remaining -= r->len; ++ ++ head.len = r->len; ++ head.type = RDMA_CONTROL_QEMU_FILE; ++ ++ ret = qemu_rdma_exchange_send(rdma, &head, data, NULL, NULL, NULL); ++ ++ if (ret < 0) { ++ rdma->error_state = ret; ++ return ret; ++ } ++ ++ data += r->len; ++ } ++ ++ return size; ++} ++ ++static size_t qemu_rdma_fill(RDMAContext *rdma, uint8_t *buf, ++ int size, int idx) ++{ ++ size_t len = 0; ++ ++ if (rdma->wr_data[idx].control_len) { ++ DDDPRINTF("RDMA %" PRId64 " of %d bytes already in buffer\n", ++ rdma->wr_data[idx].control_len, size); ++ ++ len = MIN(size, rdma->wr_data[idx].control_len); ++ memcpy(buf, rdma->wr_data[idx].control_curr, len); ++ rdma->wr_data[idx].control_curr += len; ++ rdma->wr_data[idx].control_len -= len; ++ } ++ ++ return len; ++} ++ ++/* ++ * QEMUFile interface to the control channel. ++ * RDMA links don't use bytestreams, so we have to ++ * return bytes to QEMUFile opportunistically. ++ */ ++static int qemu_rdma_get_buffer(void *opaque, uint8_t *buf, ++ int64_t pos, int size) ++{ ++ QEMUFileRDMA *r = opaque; ++ RDMAContext *rdma = r->rdma; ++ RDMAControlHeader head; ++ int ret = 0; ++ ++ CHECK_ERROR_STATE(); ++ ++ /* ++ * First, we hold on to the last SEND message we ++ * were given and dish out the bytes until we run ++ * out of bytes. ++ */ ++ r->len = qemu_rdma_fill(r->rdma, buf, size, 0); ++ if (r->len) { ++ return r->len; ++ } ++ ++ /* ++ * Once we run out, we block and wait for another ++ * SEND message to arrive. ++ */ ++ ret = qemu_rdma_exchange_recv(rdma, &head, RDMA_CONTROL_QEMU_FILE); ++ ++ if (ret < 0) { ++ rdma->error_state = ret; ++ return ret; ++ } ++ ++ /* ++ * SEND was received with new bytes, now try again. ++ */ ++ return qemu_rdma_fill(r->rdma, buf, size, 0); ++} ++ ++/* ++ * Block until all the outstanding chunks have been delivered by the hardware. ++ */ ++static int qemu_rdma_drain_cq(QEMUFile *f, RDMAContext *rdma) ++{ ++ int ret; ++ ++ if (qemu_rdma_write_flush(f, rdma) < 0) { ++ return -EIO; ++ } ++ ++ while (rdma->nb_sent) { ++ ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE); ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: complete polling error!\n"); ++ return -EIO; ++ } ++ } ++ ++ qemu_rdma_unregister_waiting(rdma); ++ ++ return 0; ++} ++ ++static int qemu_rdma_close(void *opaque) ++{ ++ DPRINTF("Shutting down connection.\n"); ++ QEMUFileRDMA *r = opaque; ++ if (r->rdma) { ++ qemu_rdma_cleanup(r->rdma); ++ g_free(r->rdma); ++ } ++ g_free(r); ++ return 0; ++} ++ ++/* ++ * Parameters: ++ * @offset == 0 : ++ * This means that 'block_offset' is a full virtual address that does not ++ * belong to a RAMBlock of the virtual machine and instead ++ * represents a private malloc'd memory area that the caller wishes to ++ * transfer. ++ * ++ * @offset != 0 : ++ * Offset is an offset to be added to block_offset and used ++ * to also lookup the corresponding RAMBlock. ++ * ++ * @size > 0 : ++ * Initiate an transfer this size. ++ * ++ * @size == 0 : ++ * A 'hint' or 'advice' that means that we wish to speculatively ++ * and asynchronously unregister this memory. In this case, there is no ++ * gaurantee that the unregister will actually happen, for example, ++ * if the memory is being actively transmitted. Additionally, the memory ++ * may be re-registered at any future time if a write within the same ++ * chunk was requested again, even if you attempted to unregister it ++ * here. ++ * ++ * @size < 0 : TODO, not yet supported ++ * Unregister the memory NOW. This means that the caller does not ++ * expect there to be any future RDMA transfers and we just want to clean ++ * things up. This is used in case the upper layer owns the memory and ++ * cannot wait for qemu_fclose() to occur. ++ * ++ * @bytes_sent : User-specificed pointer to indicate how many bytes were ++ * sent. Usually, this will not be more than a few bytes of ++ * the protocol because most transfers are sent asynchronously. ++ */ ++static size_t qemu_rdma_save_page(QEMUFile *f, void *opaque, ++ ram_addr_t block_offset, ram_addr_t offset, ++ size_t size, int *bytes_sent) ++{ ++ QEMUFileRDMA *rfile = opaque; ++ RDMAContext *rdma = rfile->rdma; ++ int ret; ++ ++ CHECK_ERROR_STATE(); ++ ++ qemu_fflush(f); ++ ++ if (size > 0) { ++ /* ++ * Add this page to the current 'chunk'. If the chunk ++ * is full, or the page doen't belong to the current chunk, ++ * an actual RDMA write will occur and a new chunk will be formed. ++ */ ++ ret = qemu_rdma_write(f, rdma, block_offset, offset, size); ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: write error! %d\n", ret); ++ goto err; ++ } ++ ++ /* ++ * We always return 1 bytes because the RDMA ++ * protocol is completely asynchronous. We do not yet know ++ * whether an identified chunk is zero or not because we're ++ * waiting for other pages to potentially be merged with ++ * the current chunk. So, we have to call qemu_update_position() ++ * later on when the actual write occurs. ++ */ ++ if (bytes_sent) { ++ *bytes_sent = 1; ++ } ++ } else { ++ uint64_t index, chunk; ++ ++ /* TODO: Change QEMUFileOps prototype to be signed: size_t => long ++ if (size < 0) { ++ ret = qemu_rdma_drain_cq(f, rdma); ++ if (ret < 0) { ++ fprintf(stderr, "rdma: failed to synchronously drain" ++ " completion queue before unregistration.\n"); ++ goto err; ++ } ++ } ++ */ ++ ++ ret = qemu_rdma_search_ram_block(rdma, block_offset, ++ offset, size, &index, &chunk); ++ ++ if (ret) { ++ fprintf(stderr, "ram block search failed\n"); ++ goto err; ++ } ++ ++ qemu_rdma_signal_unregister(rdma, index, chunk, 0); ++ ++ /* ++ * TODO: Synchronous, gauranteed unregistration (should not occur during ++ * fast-path). Otherwise, unregisters will process on the next call to ++ * qemu_rdma_drain_cq() ++ if (size < 0) { ++ qemu_rdma_unregister_waiting(rdma); ++ } ++ */ ++ } ++ ++ /* ++ * Drain the Completion Queue if possible, but do not block, ++ * just poll. ++ * ++ * If nothing to poll, the end of the iteration will do this ++ * again to make sure we don't overflow the request queue. ++ */ ++ while (1) { ++ uint64_t wr_id, wr_id_in; ++ int ret = qemu_rdma_poll(rdma, &wr_id_in); ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: polling error! %d\n", ret); ++ goto err; ++ } ++ ++ wr_id = wr_id_in & RDMA_WRID_TYPE_MASK; ++ ++ if (wr_id == RDMA_WRID_NONE) { ++ break; ++ } ++ } ++ ++ return RAM_SAVE_CONTROL_DELAYED; ++err: ++ rdma->error_state = ret; ++ return ret; ++} ++ ++static int qemu_rdma_accept(RDMAContext *rdma) ++{ ++ RDMACapabilities cap; ++ struct rdma_conn_param conn_param = { ++ .responder_resources = 2, ++ .private_data = &cap, ++ .private_data_len = sizeof(cap), ++ }; ++ struct rdma_cm_event *cm_event; ++ struct ibv_context *verbs; ++ int ret = -EINVAL; ++ int idx; ++ ++ ret = rdma_get_cm_event(rdma->channel, &cm_event); ++ if (ret) { ++ goto err_rdma_dest_wait; ++ } ++ ++ if (cm_event->event != RDMA_CM_EVENT_CONNECT_REQUEST) { ++ rdma_ack_cm_event(cm_event); ++ goto err_rdma_dest_wait; ++ } ++ ++ memcpy(&cap, cm_event->param.conn.private_data, sizeof(cap)); ++ ++ network_to_caps(&cap); ++ ++ if (cap.version < 1 || cap.version > RDMA_CONTROL_VERSION_CURRENT) { ++ fprintf(stderr, "Unknown source RDMA version: %d, bailing...\n", ++ cap.version); ++ rdma_ack_cm_event(cm_event); ++ goto err_rdma_dest_wait; ++ } ++ ++ /* ++ * Respond with only the capabilities this version of QEMU knows about. ++ */ ++ cap.flags &= known_capabilities; ++ ++ /* ++ * Enable the ones that we do know about. ++ * Add other checks here as new ones are introduced. ++ */ ++ if (cap.flags & RDMA_CAPABILITY_PIN_ALL) { ++ rdma->pin_all = true; ++ } ++ ++ rdma->cm_id = cm_event->id; ++ verbs = cm_event->id->verbs; ++ ++ rdma_ack_cm_event(cm_event); ++ ++ DPRINTF("Memory pin all: %s\n", rdma->pin_all ? "enabled" : "disabled"); ++ ++ caps_to_network(&cap); ++ ++ DPRINTF("verbs context after listen: %p\n", verbs); ++ ++ if (!rdma->verbs) { ++ rdma->verbs = verbs; ++ } else if (rdma->verbs != verbs) { ++ fprintf(stderr, "ibv context not matching %p, %p!\n", ++ rdma->verbs, verbs); ++ goto err_rdma_dest_wait; ++ } ++ ++ qemu_rdma_dump_id("dest_init", verbs); ++ ++ ret = qemu_rdma_alloc_pd_cq(rdma); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error allocating pd and cq!\n"); ++ goto err_rdma_dest_wait; ++ } ++ ++ ret = qemu_rdma_alloc_qp(rdma); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error allocating qp!\n"); ++ goto err_rdma_dest_wait; ++ } ++ ++ ret = qemu_rdma_init_ram_blocks(rdma); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error initializing ram blocks!\n"); ++ goto err_rdma_dest_wait; ++ } ++ ++ for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ ret = qemu_rdma_reg_control(rdma, idx); ++ if (ret) { ++ fprintf(stderr, "rdma: error registering %d control!\n", idx); ++ goto err_rdma_dest_wait; ++ } ++ } ++ ++ qemu_set_fd_handler2(rdma->channel->fd, NULL, NULL, NULL, NULL); ++ ++ ret = rdma_accept(rdma->cm_id, &conn_param); ++ if (ret) { ++ fprintf(stderr, "rdma_accept returns %d!\n", ret); ++ goto err_rdma_dest_wait; ++ } ++ ++ ret = rdma_get_cm_event(rdma->channel, &cm_event); ++ if (ret) { ++ fprintf(stderr, "rdma_accept get_cm_event failed %d!\n", ret); ++ goto err_rdma_dest_wait; ++ } ++ ++ if (cm_event->event != RDMA_CM_EVENT_ESTABLISHED) { ++ fprintf(stderr, "rdma_accept not event established!\n"); ++ rdma_ack_cm_event(cm_event); ++ goto err_rdma_dest_wait; ++ } ++ ++ rdma_ack_cm_event(cm_event); ++ ++ ret = qemu_rdma_post_recv_control(rdma, 0); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error posting second control recv!\n"); ++ goto err_rdma_dest_wait; ++ } ++ ++ qemu_rdma_dump_gid("dest_connect", rdma->cm_id); ++ ++ return 0; ++ ++err_rdma_dest_wait: ++ rdma->error_state = ret; ++ qemu_rdma_cleanup(rdma); ++ return ret; ++} ++ ++/* ++ * During each iteration of the migration, we listen for instructions ++ * by the source VM to perform dynamic page registrations before they ++ * can perform RDMA operations. ++ * ++ * We respond with the 'rkey'. ++ * ++ * Keep doing this until the source tells us to stop. ++ */ ++static int qemu_rdma_registration_handle(QEMUFile *f, void *opaque, ++ uint64_t flags) ++{ ++ RDMAControlHeader reg_resp = { .len = sizeof(RDMARegisterResult), ++ .type = RDMA_CONTROL_REGISTER_RESULT, ++ .repeat = 0, ++ }; ++ RDMAControlHeader unreg_resp = { .len = 0, ++ .type = RDMA_CONTROL_UNREGISTER_FINISHED, ++ .repeat = 0, ++ }; ++ RDMAControlHeader blocks = { .type = RDMA_CONTROL_RAM_BLOCKS_RESULT, ++ .repeat = 1 }; ++ QEMUFileRDMA *rfile = opaque; ++ RDMAContext *rdma = rfile->rdma; ++ RDMALocalBlocks *local = &rdma->local_ram_blocks; ++ RDMAControlHeader head; ++ RDMARegister *reg, *registers; ++ RDMACompress *comp; ++ RDMARegisterResult *reg_result; ++ static RDMARegisterResult results[RDMA_CONTROL_MAX_COMMANDS_PER_MESSAGE]; ++ RDMALocalBlock *block; ++ void *host_addr; ++ int ret = 0; ++ int idx = 0; ++ int count = 0; ++ int i = 0; ++ ++ CHECK_ERROR_STATE(); ++ ++ do { ++ DDDPRINTF("Waiting for next request %" PRIu64 "...\n", flags); ++ ++ ret = qemu_rdma_exchange_recv(rdma, &head, RDMA_CONTROL_NONE); ++ ++ if (ret < 0) { ++ break; ++ } ++ ++ if (head.repeat > RDMA_CONTROL_MAX_COMMANDS_PER_MESSAGE) { ++ fprintf(stderr, "rdma: Too many requests in this message (%d)." ++ "Bailing.\n", head.repeat); ++ ret = -EIO; ++ break; ++ } ++ ++ switch (head.type) { ++ case RDMA_CONTROL_COMPRESS: ++ comp = (RDMACompress *) rdma->wr_data[idx].control_curr; ++ network_to_compress(comp); ++ ++ DDPRINTF("Zapping zero chunk: %" PRId64 ++ " bytes, index %d, offset %" PRId64 "\n", ++ comp->length, comp->block_idx, comp->offset); ++ block = &(rdma->local_ram_blocks.block[comp->block_idx]); ++ ++ host_addr = block->local_host_addr + ++ (comp->offset - block->offset); ++ ++ ram_handle_compressed(host_addr, comp->value, comp->length); ++ break; ++ ++ case RDMA_CONTROL_REGISTER_FINISHED: ++ DDDPRINTF("Current registrations complete.\n"); ++ goto out; ++ ++ case RDMA_CONTROL_RAM_BLOCKS_REQUEST: ++ DPRINTF("Initial setup info requested.\n"); ++ ++ if (rdma->pin_all) { ++ ret = qemu_rdma_reg_whole_ram_blocks(rdma); ++ if (ret) { ++ fprintf(stderr, "rdma migration: error dest " ++ "registering ram blocks!\n"); ++ goto out; ++ } ++ } ++ ++ /* ++ * Dest uses this to prepare to transmit the RAMBlock descriptions ++ * to the source VM after connection setup. ++ * Both sides use the "remote" structure to communicate and update ++ * their "local" descriptions with what was sent. ++ */ ++ for (i = 0; i < local->nb_blocks; i++) { ++ rdma->block[i].remote_host_addr = ++ (uint64_t)(local->block[i].local_host_addr); ++ ++ if (rdma->pin_all) { ++ rdma->block[i].remote_rkey = local->block[i].mr->rkey; ++ } ++ ++ rdma->block[i].offset = local->block[i].offset; ++ rdma->block[i].length = local->block[i].length; ++ ++ remote_block_to_network(&rdma->block[i]); ++ } ++ ++ blocks.len = rdma->local_ram_blocks.nb_blocks ++ * sizeof(RDMARemoteBlock); ++ ++ ++ ret = qemu_rdma_post_send_control(rdma, ++ (uint8_t *) rdma->block, &blocks); ++ ++ if (ret < 0) { ++ fprintf(stderr, "rdma migration: error sending remote info!\n"); ++ goto out; ++ } ++ ++ break; ++ case RDMA_CONTROL_REGISTER_REQUEST: ++ DDPRINTF("There are %d registration requests\n", head.repeat); ++ ++ reg_resp.repeat = head.repeat; ++ registers = (RDMARegister *) rdma->wr_data[idx].control_curr; ++ ++ for (count = 0; count < head.repeat; count++) { ++ uint64_t chunk; ++ uint8_t *chunk_start, *chunk_end; ++ ++ reg = ®isters[count]; ++ network_to_register(reg); ++ ++ reg_result = &results[count]; ++ ++ DDPRINTF("Registration request (%d): index %d, current_addr %" ++ PRIu64 " chunks: %" PRIu64 "\n", count, ++ reg->current_index, reg->key.current_addr, reg->chunks); ++ ++ block = &(rdma->local_ram_blocks.block[reg->current_index]); ++ if (block->is_ram_block) { ++ host_addr = (block->local_host_addr + ++ (reg->key.current_addr - block->offset)); ++ chunk = ram_chunk_index(block->local_host_addr, ++ (uint8_t *) host_addr); ++ } else { ++ chunk = reg->key.chunk; ++ host_addr = block->local_host_addr + ++ (reg->key.chunk * (1UL << RDMA_REG_CHUNK_SHIFT)); ++ } ++ chunk_start = ram_chunk_start(block, chunk); ++ chunk_end = ram_chunk_end(block, chunk + reg->chunks); ++ if (qemu_rdma_register_and_get_keys(rdma, block, ++ (uint8_t *)host_addr, NULL, ®_result->rkey, ++ chunk, chunk_start, chunk_end)) { ++ fprintf(stderr, "cannot get rkey!\n"); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ reg_result->host_addr = (uint64_t) block->local_host_addr; ++ ++ DDPRINTF("Registered rkey for this request: %x\n", ++ reg_result->rkey); ++ ++ result_to_network(reg_result); ++ } ++ ++ ret = qemu_rdma_post_send_control(rdma, ++ (uint8_t *) results, ®_resp); ++ ++ if (ret < 0) { ++ fprintf(stderr, "Failed to send control buffer!\n"); ++ goto out; ++ } ++ break; ++ case RDMA_CONTROL_UNREGISTER_REQUEST: ++ DDPRINTF("There are %d unregistration requests\n", head.repeat); ++ unreg_resp.repeat = head.repeat; ++ registers = (RDMARegister *) rdma->wr_data[idx].control_curr; ++ ++ for (count = 0; count < head.repeat; count++) { ++ reg = ®isters[count]; ++ network_to_register(reg); ++ ++ DDPRINTF("Unregistration request (%d): " ++ " index %d, chunk %" PRIu64 "\n", ++ count, reg->current_index, reg->key.chunk); ++ ++ block = &(rdma->local_ram_blocks.block[reg->current_index]); ++ ++ ret = ibv_dereg_mr(block->pmr[reg->key.chunk]); ++ block->pmr[reg->key.chunk] = NULL; ++ ++ if (ret != 0) { ++ perror("rdma unregistration chunk failed"); ++ ret = -ret; ++ goto out; ++ } ++ ++ rdma->total_registrations--; ++ ++ DDPRINTF("Unregistered chunk %" PRIu64 " successfully.\n", ++ reg->key.chunk); ++ } ++ ++ ret = qemu_rdma_post_send_control(rdma, NULL, &unreg_resp); ++ ++ if (ret < 0) { ++ fprintf(stderr, "Failed to send control buffer!\n"); ++ goto out; ++ } ++ break; ++ case RDMA_CONTROL_REGISTER_RESULT: ++ fprintf(stderr, "Invalid RESULT message at dest.\n"); ++ ret = -EIO; ++ goto out; ++ default: ++ fprintf(stderr, "Unknown control message %s\n", ++ control_desc[head.type]); ++ ret = -EIO; ++ goto out; ++ } ++ } while (1); ++out: ++ if (ret < 0) { ++ rdma->error_state = ret; ++ } ++ return ret; ++} ++ ++static int qemu_rdma_registration_start(QEMUFile *f, void *opaque, ++ uint64_t flags) ++{ ++ QEMUFileRDMA *rfile = opaque; ++ RDMAContext *rdma = rfile->rdma; ++ ++ CHECK_ERROR_STATE(); ++ ++ DDDPRINTF("start section: %" PRIu64 "\n", flags); ++ qemu_put_be64(f, RAM_SAVE_FLAG_HOOK); ++ qemu_fflush(f); ++ ++ return 0; ++} ++ ++/* ++ * Inform dest that dynamic registrations are done for now. ++ * First, flush writes, if any. ++ */ ++static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, ++ uint64_t flags) ++{ ++ Error *local_err = NULL, **errp = &local_err; ++ QEMUFileRDMA *rfile = opaque; ++ RDMAContext *rdma = rfile->rdma; ++ RDMAControlHeader head = { .len = 0, .repeat = 1 }; ++ int ret = 0; ++ ++ CHECK_ERROR_STATE(); ++ ++ qemu_fflush(f); ++ ret = qemu_rdma_drain_cq(f, rdma); ++ ++ if (ret < 0) { ++ goto err; ++ } ++ ++ if (flags == RAM_CONTROL_SETUP) { ++ RDMAControlHeader resp = {.type = RDMA_CONTROL_RAM_BLOCKS_RESULT }; ++ RDMALocalBlocks *local = &rdma->local_ram_blocks; ++ int reg_result_idx, i, j, nb_remote_blocks; ++ ++ head.type = RDMA_CONTROL_RAM_BLOCKS_REQUEST; ++ DPRINTF("Sending registration setup for ram blocks...\n"); ++ ++ /* ++ * Make sure that we parallelize the pinning on both sides. ++ * For very large guests, doing this serially takes a really ++ * long time, so we have to 'interleave' the pinning locally ++ * with the control messages by performing the pinning on this ++ * side before we receive the control response from the other ++ * side that the pinning has completed. ++ */ ++ ret = qemu_rdma_exchange_send(rdma, &head, NULL, &resp, ++ ®_result_idx, rdma->pin_all ? ++ qemu_rdma_reg_whole_ram_blocks : NULL); ++ if (ret < 0) { ++ ERROR(errp, "receiving remote info!\n"); ++ return ret; ++ } ++ ++ qemu_rdma_move_header(rdma, reg_result_idx, &resp); ++ memcpy(rdma->block, ++ rdma->wr_data[reg_result_idx].control_curr, resp.len); ++ ++ nb_remote_blocks = resp.len / sizeof(RDMARemoteBlock); ++ ++ /* ++ * The protocol uses two different sets of rkeys (mutually exclusive): ++ * 1. One key to represent the virtual address of the entire ram block. ++ * (dynamic chunk registration disabled - pin everything with one rkey.) ++ * 2. One to represent individual chunks within a ram block. ++ * (dynamic chunk registration enabled - pin individual chunks.) ++ * ++ * Once the capability is successfully negotiated, the destination transmits ++ * the keys to use (or sends them later) including the virtual addresses ++ * and then propagates the remote ram block descriptions to his local copy. ++ */ ++ ++ if (local->nb_blocks != nb_remote_blocks) { ++ ERROR(errp, "ram blocks mismatch #1! " ++ "Your QEMU command line parameters are probably " ++ "not identical on both the source and destination.\n"); ++ return -EINVAL; ++ } ++ ++ for (i = 0; i < nb_remote_blocks; i++) { ++ network_to_remote_block(&rdma->block[i]); ++ ++ /* search local ram blocks */ ++ for (j = 0; j < local->nb_blocks; j++) { ++ if (rdma->block[i].offset != local->block[j].offset) { ++ continue; ++ } ++ ++ if (rdma->block[i].length != local->block[j].length) { ++ ERROR(errp, "ram blocks mismatch #2! " ++ "Your QEMU command line parameters are probably " ++ "not identical on both the source and destination.\n"); ++ return -EINVAL; ++ } ++ local->block[j].remote_host_addr = ++ rdma->block[i].remote_host_addr; ++ local->block[j].remote_rkey = rdma->block[i].remote_rkey; ++ break; ++ } ++ ++ if (j >= local->nb_blocks) { ++ ERROR(errp, "ram blocks mismatch #3! " ++ "Your QEMU command line parameters are probably " ++ "not identical on both the source and destination.\n"); ++ return -EINVAL; ++ } ++ } ++ } ++ ++ DDDPRINTF("Sending registration finish %" PRIu64 "...\n", flags); ++ ++ head.type = RDMA_CONTROL_REGISTER_FINISHED; ++ ret = qemu_rdma_exchange_send(rdma, &head, NULL, NULL, NULL, NULL); ++ ++ if (ret < 0) { ++ goto err; ++ } ++ ++ return 0; ++err: ++ rdma->error_state = ret; ++ return ret; ++} ++ ++static int qemu_rdma_get_fd(void *opaque) ++{ ++ QEMUFileRDMA *rfile = opaque; ++ RDMAContext *rdma = rfile->rdma; ++ ++ return rdma->comp_channel->fd; ++} ++ ++const QEMUFileOps rdma_read_ops = { ++ .get_buffer = qemu_rdma_get_buffer, ++ .get_fd = qemu_rdma_get_fd, ++ .close = qemu_rdma_close, ++ .hook_ram_load = qemu_rdma_registration_handle, ++}; ++ ++const QEMUFileOps rdma_write_ops = { ++ .put_buffer = qemu_rdma_put_buffer, ++ .close = qemu_rdma_close, ++ .before_ram_iterate = qemu_rdma_registration_start, ++ .after_ram_iterate = qemu_rdma_registration_stop, ++ .save_page = qemu_rdma_save_page, ++}; ++ ++static void *qemu_fopen_rdma(RDMAContext *rdma, const char *mode) ++{ ++ QEMUFileRDMA *r = g_malloc0(sizeof(QEMUFileRDMA)); ++ ++ if (qemu_file_mode_is_not_valid(mode)) { ++ return NULL; ++ } ++ ++ r->rdma = rdma; ++ ++ if (mode[0] == 'w') { ++ r->file = qemu_fopen_ops(r, &rdma_write_ops); ++ } else { ++ r->file = qemu_fopen_ops(r, &rdma_read_ops); ++ } ++ ++ return r->file; ++} ++ ++static void rdma_accept_incoming_migration(void *opaque) ++{ ++ RDMAContext *rdma = opaque; ++ int ret; ++ QEMUFile *f; ++ Error *local_err = NULL, **errp = &local_err; ++ ++ DPRINTF("Accepting rdma connection...\n"); ++ ret = qemu_rdma_accept(rdma); ++ ++ if (ret) { ++ ERROR(errp, "RDMA Migration initialization failed!\n"); ++ return; ++ } ++ ++ DPRINTF("Accepted migration\n"); ++ ++ f = qemu_fopen_rdma(rdma, "rb"); ++ if (f == NULL) { ++ ERROR(errp, "could not qemu_fopen_rdma!\n"); ++ qemu_rdma_cleanup(rdma); ++ return; ++ } ++ ++ rdma->migration_started_on_destination = 1; ++ process_incoming_migration(f); ++} ++ ++void rdma_start_incoming_migration(const char *host_port, Error **errp) ++{ ++ int ret; ++ RDMAContext *rdma; ++ Error *local_err = NULL; ++ ++ DPRINTF("Starting RDMA-based incoming migration\n"); ++ rdma = qemu_rdma_data_init(host_port, &local_err); ++ ++ if (rdma == NULL) { ++ goto err; ++ } ++ ++ ret = qemu_rdma_dest_init(rdma, &local_err); ++ ++ if (ret) { ++ goto err; ++ } ++ ++ DPRINTF("qemu_rdma_dest_init success\n"); ++ ++ ret = rdma_listen(rdma->listen_id, 5); ++ ++ if (ret) { ++ ERROR(errp, "listening on socket!\n"); ++ goto err; ++ } ++ ++ DPRINTF("rdma_listen success\n"); ++ ++ qemu_set_fd_handler2(rdma->channel->fd, NULL, ++ rdma_accept_incoming_migration, NULL, ++ (void *)(intptr_t) rdma); ++ return; ++err: ++ error_propagate(errp, local_err); ++ g_free(rdma); ++} ++ ++void rdma_start_outgoing_migration(void *opaque, ++ const char *host_port, Error **errp) ++{ ++ MigrationState *s = opaque; ++ Error *local_err = NULL, **temp = &local_err; ++ RDMAContext *rdma = qemu_rdma_data_init(host_port, &local_err); ++ int ret = 0; ++ ++ if (rdma == NULL) { ++ ERROR(temp, "Failed to initialize RDMA data structures! %d\n", ret); ++ goto err; ++ } ++ ++ ret = qemu_rdma_source_init(rdma, &local_err, ++ s->enabled_capabilities[MIGRATION_CAPABILITY_X_RDMA_PIN_ALL]); ++ ++ if (ret) { ++ goto err; ++ } ++ ++ DPRINTF("qemu_rdma_source_init success\n"); ++ ret = qemu_rdma_connect(rdma, &local_err); ++ ++ if (ret) { ++ goto err; ++ } ++ ++ DPRINTF("qemu_rdma_source_connect success\n"); ++ ++ s->file = qemu_fopen_rdma(rdma, "wb"); ++ migrate_fd_connect(s); ++ return; ++err: ++ error_propagate(errp, local_err); ++ g_free(rdma); ++ migrate_fd_error(s); ++} +diff --git a/migration.c b/migration.c +index 73a348f..2fa0237 100644 +--- a/migration.c ++++ b/migration.c +@@ -78,6 +78,10 @@ void qemu_start_incoming_migration(const char *uri, Error **errp) + + if (strstart(uri, "tcp:", &p)) + tcp_start_incoming_migration(p, errp); ++#ifdef CONFIG_RDMA ++ else if (strstart(uri, "x-rdma:", &p)) ++ rdma_start_incoming_migration(p, errp); ++#endif + #if !defined(WIN32) + else if (strstart(uri, "exec:", &p)) + exec_start_incoming_migration(p, errp); +@@ -415,6 +419,10 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + + if (strstart(uri, "tcp:", &p)) { + tcp_start_outgoing_migration(s, p, &local_err); ++#ifdef CONFIG_RDMA ++ } else if (strstart(uri, "x-rdma:", &p)) { ++ rdma_start_outgoing_migration(s, p, &local_err); ++#endif + #if !defined(WIN32) + } else if (strstart(uri, "exec:", &p)) { + exec_start_outgoing_migration(s, p, &local_err); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-correct-newlines-in-error-statements.patch b/SOURCES/kvm-rdma-correct-newlines-in-error-statements.patch new file mode 100644 index 0000000..ec2b476 --- /dev/null +++ b/SOURCES/kvm-rdma-correct-newlines-in-error-statements.patch @@ -0,0 +1,338 @@ +From 5ff68375e65250c295b6ed5ba946dc792df3cd55 Mon Sep 17 00:00:00 2001 +Message-Id: <5ff68375e65250c295b6ed5ba946dc792df3cd55.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:58 +0100 +Subject: [PATCH 22/46] rdma: correct newlines in error statements + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-23-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55712 +O-Subject: [RHEL7.0 PATCH 22/42] rdma: correct newlines in error statements +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 66988941251ef64044aa3b951ebd84162e5a4e3a +Author: Michael R. Hines +Date: Sat Aug 3 22:54:50 2013 -0400 + + rdma: correct newlines in error statements + + Don't print newlines on the error_setg() function, + but still allow newlines on fprintf(). + + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-4-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 68 +++++++++++++++++++++++++++--------------------------- + 1 files changed, 34 insertions(+), 34 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 68 ++++++++++++++++++++++++++++---------------------------- + 1 file changed, 34 insertions(+), 34 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index fe6118d..c958e5f 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -60,7 +60,7 @@ + */ + #define ERROR(errp, fmt, ...) \ + do { \ +- fprintf(stderr, "RDMA ERROR: " fmt, ## __VA_ARGS__); \ ++ fprintf(stderr, "RDMA ERROR: " fmt "\n", ## __VA_ARGS__); \ + if (errp && (*(errp) == NULL)) { \ + error_setg(errp, "RDMA ERROR: " fmt, ## __VA_ARGS__); \ + } \ +@@ -748,21 +748,21 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + int af = rdma->ipv6 ? PF_INET6 : PF_INET; + + if (rdma->host == NULL || !strcmp(rdma->host, "")) { +- ERROR(errp, "RDMA hostname has not been set\n"); ++ ERROR(errp, "RDMA hostname has not been set"); + return -1; + } + + /* create CM channel */ + rdma->channel = rdma_create_event_channel(); + if (!rdma->channel) { +- ERROR(errp, "could not create CM channel\n"); ++ ERROR(errp, "could not create CM channel"); + return -1; + } + + /* create CM id */ + ret = rdma_create_id(rdma->channel, &rdma->cm_id, NULL, RDMA_PS_TCP); + if (ret) { +- ERROR(errp, "could not create channel id\n"); ++ ERROR(errp, "could not create channel id"); + goto err_resolve_create_id; + } + +@@ -771,7 +771,7 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + + ret = getaddrinfo(rdma->host, port_str, NULL, &res); + if (ret < 0) { +- ERROR(errp, "could not getaddrinfo address %s\n", rdma->host); ++ ERROR(errp, "could not getaddrinfo address %s", rdma->host); + goto err_resolve_get_addr; + } + +@@ -783,7 +783,7 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + ret = rdma_resolve_addr(rdma->cm_id, NULL, res->ai_addr, + RDMA_RESOLVE_TIMEOUT_MS); + if (ret) { +- ERROR(errp, "could not resolve address %s\n", rdma->host); ++ ERROR(errp, "could not resolve address %s", rdma->host); + goto err_resolve_get_addr; + } + +@@ -791,12 +791,12 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + + ret = rdma_get_cm_event(rdma->channel, &cm_event); + if (ret) { +- ERROR(errp, "could not perform event_addr_resolved\n"); ++ ERROR(errp, "could not perform event_addr_resolved"); + goto err_resolve_get_addr; + } + + if (cm_event->event != RDMA_CM_EVENT_ADDR_RESOLVED) { +- ERROR(errp, "result not equal to event_addr_resolved %s\n", ++ ERROR(errp, "result not equal to event_addr_resolved %s", + rdma_event_str(cm_event->event)); + perror("rdma_resolve_addr"); + goto err_resolve_get_addr; +@@ -806,17 +806,17 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + /* resolve route */ + ret = rdma_resolve_route(rdma->cm_id, RDMA_RESOLVE_TIMEOUT_MS); + if (ret) { +- ERROR(errp, "could not resolve rdma route\n"); ++ ERROR(errp, "could not resolve rdma route"); + goto err_resolve_get_addr; + } + + ret = rdma_get_cm_event(rdma->channel, &cm_event); + if (ret) { +- ERROR(errp, "could not perform event_route_resolved\n"); ++ ERROR(errp, "could not perform event_route_resolved"); + goto err_resolve_get_addr; + } + if (cm_event->event != RDMA_CM_EVENT_ROUTE_RESOLVED) { +- ERROR(errp, "result not equal to event_route_resolved: %s\n", ++ ERROR(errp, "result not equal to event_route_resolved: %s", + rdma_event_str(cm_event->event)); + rdma_ack_cm_event(cm_event); + goto err_resolve_get_addr; +@@ -2117,26 +2117,26 @@ static int qemu_rdma_source_init(RDMAContext *rdma, Error **errp, bool pin_all) + if (ret) { + ERROR(temp, "rdma migration: error allocating pd and cq! Your mlock()" + " limits may be too low. Please check $ ulimit -a # and " +- "search for 'ulimit -l' in the output\n"); ++ "search for 'ulimit -l' in the output"); + goto err_rdma_source_init; + } + + ret = qemu_rdma_alloc_qp(rdma); + if (ret) { +- ERROR(temp, "rdma migration: error allocating qp!\n"); ++ ERROR(temp, "rdma migration: error allocating qp!"); + goto err_rdma_source_init; + } + + ret = qemu_rdma_init_ram_blocks(rdma); + if (ret) { +- ERROR(temp, "rdma migration: error initializing ram blocks!\n"); ++ ERROR(temp, "rdma migration: error initializing ram blocks!"); + goto err_rdma_source_init; + } + + for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { + ret = qemu_rdma_reg_control(rdma, idx); + if (ret) { +- ERROR(temp, "rdma migration: error registering %d control!\n", ++ ERROR(temp, "rdma migration: error registering %d control!", + idx); + goto err_rdma_source_init; + } +@@ -2178,7 +2178,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + ret = rdma_connect(rdma->cm_id, &conn_param); + if (ret) { + perror("rdma_connect"); +- ERROR(errp, "connecting to destination!\n"); ++ ERROR(errp, "connecting to destination!"); + rdma_destroy_id(rdma->cm_id); + rdma->cm_id = NULL; + goto err_rdma_source_connect; +@@ -2187,7 +2187,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + ret = rdma_get_cm_event(rdma->channel, &cm_event); + if (ret) { + perror("rdma_get_cm_event after rdma_connect"); +- ERROR(errp, "connecting to destination!\n"); ++ ERROR(errp, "connecting to destination!"); + rdma_ack_cm_event(cm_event); + rdma_destroy_id(rdma->cm_id); + rdma->cm_id = NULL; +@@ -2196,7 +2196,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + + if (cm_event->event != RDMA_CM_EVENT_ESTABLISHED) { + perror("rdma_get_cm_event != EVENT_ESTABLISHED after rdma_connect"); +- ERROR(errp, "connecting to destination!\n"); ++ ERROR(errp, "connecting to destination!"); + rdma_ack_cm_event(cm_event); + rdma_destroy_id(rdma->cm_id); + rdma->cm_id = NULL; +@@ -2212,7 +2212,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + */ + if (rdma->pin_all && !(cap.flags & RDMA_CAPABILITY_PIN_ALL)) { + ERROR(errp, "Server cannot support pinning all memory. " +- "Will register memory dynamically.\n"); ++ "Will register memory dynamically."); + rdma->pin_all = false; + } + +@@ -2222,7 +2222,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + + ret = qemu_rdma_post_recv_control(rdma, 0); + if (ret) { +- ERROR(errp, "posting second control recv!\n"); ++ ERROR(errp, "posting second control recv!"); + goto err_rdma_source_connect; + } + +@@ -2251,14 +2251,14 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + } + + if (rdma->host == NULL) { +- ERROR(errp, "RDMA host is not set!\n"); ++ ERROR(errp, "RDMA host is not set!"); + rdma->error_state = -EINVAL; + return -1; + } + /* create CM channel */ + rdma->channel = rdma_create_event_channel(); + if (!rdma->channel) { +- ERROR(errp, "could not create rdma event channel\n"); ++ ERROR(errp, "could not create rdma event channel"); + rdma->error_state = -EINVAL; + return -1; + } +@@ -2266,7 +2266,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + /* create CM id */ + ret = rdma_create_id(rdma->channel, &listen_id, NULL, RDMA_PS_TCP); + if (ret) { +- ERROR(errp, "could not create cm_id!\n"); ++ ERROR(errp, "could not create cm_id!"); + goto err_dest_init_create_listen_id; + } + +@@ -2279,7 +2279,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + if (rdma->host && strcmp("", rdma->host)) { + ret = getaddrinfo(rdma->host, port_str, NULL, &res); + if (ret < 0) { +- ERROR(errp, "could not getaddrinfo address %s\n", rdma->host); ++ ERROR(errp, "could not getaddrinfo address %s", rdma->host); + goto err_dest_init_bind_addr; + } + +@@ -2287,7 +2287,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + inet_ntop(af, &((struct sockaddr_in *) res->ai_addr)->sin_addr, + ip, sizeof ip); + } else { +- ERROR(errp, "migration host and port not specified!\n"); ++ ERROR(errp, "migration host and port not specified!"); + ret = -EINVAL; + goto err_dest_init_bind_addr; + } +@@ -2296,7 +2296,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + + ret = rdma_bind_addr(listen_id, res->ai_addr); + if (ret) { +- ERROR(errp, "Error: could not rdma_bind_addr!\n"); ++ ERROR(errp, "Error: could not rdma_bind_addr!"); + goto err_dest_init_bind_addr; + } + +@@ -3036,7 +3036,7 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, + ®_result_idx, rdma->pin_all ? + qemu_rdma_reg_whole_ram_blocks : NULL); + if (ret < 0) { +- ERROR(errp, "receiving remote info!\n"); ++ ERROR(errp, "receiving remote info!"); + return ret; + } + +@@ -3061,7 +3061,7 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, + if (local->nb_blocks != nb_remote_blocks) { + ERROR(errp, "ram blocks mismatch #1! " + "Your QEMU command line parameters are probably " +- "not identical on both the source and destination.\n"); ++ "not identical on both the source and destination."); + return -EINVAL; + } + +@@ -3077,7 +3077,7 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, + if (rdma->block[i].length != local->block[j].length) { + ERROR(errp, "ram blocks mismatch #2! " + "Your QEMU command line parameters are probably " +- "not identical on both the source and destination.\n"); ++ "not identical on both the source and destination."); + return -EINVAL; + } + local->block[j].remote_host_addr = +@@ -3089,7 +3089,7 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, + if (j >= local->nb_blocks) { + ERROR(errp, "ram blocks mismatch #3! " + "Your QEMU command line parameters are probably " +- "not identical on both the source and destination.\n"); ++ "not identical on both the source and destination."); + return -EINVAL; + } + } +@@ -3163,7 +3163,7 @@ static void rdma_accept_incoming_migration(void *opaque) + ret = qemu_rdma_accept(rdma); + + if (ret) { +- ERROR(errp, "RDMA Migration initialization failed!\n"); ++ ERROR(errp, "RDMA Migration initialization failed!"); + return; + } + +@@ -3171,7 +3171,7 @@ static void rdma_accept_incoming_migration(void *opaque) + + f = qemu_fopen_rdma(rdma, "rb"); + if (f == NULL) { +- ERROR(errp, "could not qemu_fopen_rdma!\n"); ++ ERROR(errp, "could not qemu_fopen_rdma!"); + qemu_rdma_cleanup(rdma); + return; + } +@@ -3204,7 +3204,7 @@ void rdma_start_incoming_migration(const char *host_port, Error **errp) + ret = rdma_listen(rdma->listen_id, 5); + + if (ret) { +- ERROR(errp, "listening on socket!\n"); ++ ERROR(errp, "listening on socket!"); + goto err; + } + +@@ -3228,7 +3228,7 @@ void rdma_start_outgoing_migration(void *opaque, + int ret = 0; + + if (rdma == NULL) { +- ERROR(temp, "Failed to initialize RDMA data structures! %d\n", ret); ++ ERROR(temp, "Failed to initialize RDMA data structures! %d", ret); + goto err; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-don-t-use-negative-index-to-array.patch b/SOURCES/kvm-rdma-don-t-use-negative-index-to-array.patch new file mode 100644 index 0000000..3750a78 --- /dev/null +++ b/SOURCES/kvm-rdma-don-t-use-negative-index-to-array.patch @@ -0,0 +1,96 @@ +From 64b612d6551f21f7c3e34fa522b5b9c13f2b4ed8 Mon Sep 17 00:00:00 2001 +Message-Id: <64b612d6551f21f7c3e34fa522b5b9c13f2b4ed8.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:59 +0100 +Subject: [PATCH 23/46] rdma: don't use negative index to array + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-24-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55707 +O-Subject: [RHEL7.0 PATCH 23/42] rdma: don't use negative index to array +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 44b5949491a47043c4f7c4ff09f0191f82919a82 +Author: Isaku Yamahata +Date: Sat Aug 3 22:54:51 2013 -0400 + + rdma: don't use negative index to array + + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-5-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 27 +++++++++++++++------------ + 1 files changed, 15 insertions(+), 12 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 27 +++++++++++++++------------ + 1 file changed, 15 insertions(+), 12 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index c958e5f..7266803 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -1933,10 +1933,21 @@ static int qemu_rdma_write_flush(QEMUFile *f, RDMAContext *rdma) + static inline int qemu_rdma_buffer_mergable(RDMAContext *rdma, + uint64_t offset, uint64_t len) + { +- RDMALocalBlock *block = +- &(rdma->local_ram_blocks.block[rdma->current_index]); +- uint8_t *host_addr = block->local_host_addr + (offset - block->offset); +- uint8_t *chunk_end = ram_chunk_end(block, rdma->current_chunk); ++ RDMALocalBlock *block; ++ uint8_t *host_addr; ++ uint8_t *chunk_end; ++ ++ if (rdma->current_index < 0) { ++ return 0; ++ } ++ ++ if (rdma->current_chunk < 0) { ++ return 0; ++ } ++ ++ block = &(rdma->local_ram_blocks.block[rdma->current_index]); ++ host_addr = block->local_host_addr + (offset - block->offset); ++ chunk_end = ram_chunk_end(block, rdma->current_chunk); + + if (rdma->current_length == 0) { + return 0; +@@ -1949,10 +1960,6 @@ static inline int qemu_rdma_buffer_mergable(RDMAContext *rdma, + return 0; + } + +- if (rdma->current_index < 0) { +- return 0; +- } +- + if (offset < block->offset) { + return 0; + } +@@ -1961,10 +1968,6 @@ static inline int qemu_rdma_buffer_mergable(RDMAContext *rdma, + return 0; + } + +- if (rdma->current_chunk < 0) { +- return 0; +- } +- + if ((host_addr + len) > chunk_end) { + return 0; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-export-qemu_fflush.patch b/SOURCES/kvm-rdma-export-qemu_fflush.patch new file mode 100644 index 0000000..de19f2c --- /dev/null +++ b/SOURCES/kvm-rdma-export-qemu_fflush.patch @@ -0,0 +1,66 @@ +From 4848a95daabaa6794869126afd7426b76653920f Mon Sep 17 00:00:00 2001 +From: Orit Wasserman +Date: Wed, 9 Oct 2013 10:09:08 +0200 +Subject: [PATCH 13/25] rdma: export qemu_fflush() + +RH-Author: Orit Wasserman +Message-id: <1381313355-15641-4-git-send-email-owasserm@redhat.com> +Patchwork-id: 54799 +O-Subject: [RHEL7.0 qemu-kvm v2 03/10] rdma: export qemu_fflush() +Bugzilla: 921465 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Juan Quintela + +From: "Michael R. Hines" + +RDMA uses this to flush the control channel before sending its +own message to handle page registrations. + +Reviewed-by: Juan Quintela +Reviewed-by: Paolo Bonzini +Reviewed-by: Chegu Vinod +Tested-by: Chegu Vinod +Tested-by: Michael R. Hines +Signed-off-by: Michael R. Hines +Signed-off-by: Juan Quintela +(cherry picked from commit be903b2ae7ca750bde2549432c5536087436cf49) +--- + include/migration/qemu-file.h | 1 + + savevm.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + include/migration/qemu-file.h | 1 + + savevm.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h +index 7519464..8931e16 100644 +--- a/include/migration/qemu-file.h ++++ b/include/migration/qemu-file.h +@@ -110,6 +110,7 @@ void qemu_file_reset_rate_limit(QEMUFile *f); + void qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate); + int64_t qemu_file_get_rate_limit(QEMUFile *f); + int qemu_file_get_error(QEMUFile *f); ++void qemu_fflush(QEMUFile *f); + + static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv) + { +diff --git a/savevm.c b/savevm.c +index 4e0fab6..d3bd0ec 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -608,7 +608,7 @@ static inline bool qemu_file_is_writable(QEMUFile *f) + * If there is writev_buffer QEMUFileOps it uses it otherwise uses + * put_buffer ops. + */ +-static void qemu_fflush(QEMUFile *f) ++void qemu_fflush(QEMUFile *f) + { + ssize_t ret = 0; + +-- +1.7.1 + diff --git a/SOURCES/kvm-rdma-export-throughput-w-MigrationStats-QMP.patch b/SOURCES/kvm-rdma-export-throughput-w-MigrationStats-QMP.patch new file mode 100644 index 0000000..0bf22fd --- /dev/null +++ b/SOURCES/kvm-rdma-export-throughput-w-MigrationStats-QMP.patch @@ -0,0 +1,138 @@ +From a181c782ef252d49815ce3628716f91e51c765c2 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:43 +0100 +Subject: [PATCH 07/46] rdma: export throughput w/ MigrationStats QMP + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-8-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55698 +O-Subject: [RHEL7.0 PATCH 07/42] rdma: export throughput w/ MigrationStats QMP +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 7e114f8cf24a01893226e3a4d22a288125515cfd +Author: Michael R. Hines +Date: Tue Jun 25 21:35:30 2013 -0400 + + rdma: export throughput w/ MigrationStats QMP + + This exposes throughput (in megabits/sec) through QMP. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + hmp.c | 2 ++ + include/migration/migration.h | 1 + + migration.c | 6 ++++++ + qapi-schema.json | 5 ++++- + 4 files changed, 13 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + hmp.c | 2 ++ + include/migration/migration.h | 1 + + migration.c | 6 ++++++ + qapi-schema.json | 5 ++++- + 4 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/hmp.c b/hmp.c +index 29990d2..316e6a1 100644 +--- a/hmp.c ++++ b/hmp.c +@@ -167,6 +167,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) + if (info->has_ram) { + monitor_printf(mon, "transferred ram: %" PRIu64 " kbytes\n", + info->ram->transferred >> 10); ++ monitor_printf(mon, "throughput: %0.2f mbps\n", ++ info->ram->mbps); + monitor_printf(mon, "remaining ram: %" PRIu64 " kbytes\n", + info->ram->remaining >> 10); + monitor_printf(mon, "total ram: %" PRIu64 " kbytes\n", +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 2f3a3d9..201be18 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -40,6 +40,7 @@ struct MigrationState + + int state; + MigrationParams params; ++ double mbps; + int64_t total_time; + int64_t downtime; + int64_t expected_downtime; +diff --git a/migration.c b/migration.c +index 3520776..f4d1e34 100644 +--- a/migration.c ++++ b/migration.c +@@ -66,6 +66,7 @@ MigrationState *migrate_get_current(void) + .state = MIG_STATE_SETUP, + .bandwidth_limit = MAX_THROTTLE, + .xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE, ++ .mbps = -1, + }; + + return ¤t_migration; +@@ -201,6 +202,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) + info->ram->normal = norm_mig_pages_transferred(); + info->ram->normal_bytes = norm_mig_bytes_transferred(); + info->ram->dirty_pages_rate = s->dirty_pages_rate; ++ info->ram->mbps = s->mbps; + + if (blk_mig_active()) { + info->has_disk = true; +@@ -231,6 +233,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) + info->ram->skipped = skipped_mig_pages_transferred(); + info->ram->normal = norm_mig_pages_transferred(); + info->ram->normal_bytes = norm_mig_bytes_transferred(); ++ info->ram->mbps = s->mbps; + break; + case MIG_STATE_ERROR: + info->has_status = true; +@@ -580,6 +583,9 @@ static void *migration_thread(void *opaque) + double bandwidth = transferred_bytes / time_spent; + max_size = bandwidth * migrate_max_downtime() / 1000000; + ++ s->mbps = time_spent ? (((double) transferred_bytes * 8.0) / ++ ((double) time_spent / 1000.0)) / 1000.0 / 1000.0 : -1; ++ + DPRINTF("transferred %" PRIu64 " time_spent %" PRIu64 + " bandwidth %g max_size %" PRId64 "\n", + transferred_bytes, time_spent, bandwidth, max_size); +diff --git a/qapi-schema.json b/qapi-schema.json +index 92fcd54..17df327 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -569,12 +569,15 @@ + # @dirty-pages-rate: number of pages dirtied by second by the + # guest (since 1.3) + # ++# @mbps: throughput in megabits/sec. (since 1.6) ++# + # Since: 0.14.0 + ## + { 'type': 'MigrationStats', + 'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' , + 'duplicate': 'int', 'skipped': 'int', 'normal': 'int', +- 'normal-bytes': 'int', 'dirty-pages-rate' : 'int' } } ++ 'normal-bytes': 'int', 'dirty-pages-rate' : 'int', ++ 'mbps' : 'number' } } + + ## + # @XBZRLECacheStats +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-export-yield_until_fd_readable.patch b/SOURCES/kvm-rdma-export-yield_until_fd_readable.patch new file mode 100644 index 0000000..dbca42a --- /dev/null +++ b/SOURCES/kvm-rdma-export-yield_until_fd_readable.patch @@ -0,0 +1,139 @@ +From 5134b54a7e8941d6e6c112e03b7e85b578606fc0 Mon Sep 17 00:00:00 2001 +Message-Id: <5134b54a7e8941d6e6c112e03b7e85b578606fc0.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:42 +0100 +Subject: [PATCH 06/46] rdma: export yield_until_fd_readable() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-7-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55691 +O-Subject: [RHEL7.0 PATCH 06/42] rdma: export yield_until_fd_readable() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 9f05d0c3a4f9e8fcb13ed09cc350af45a627809a +Author: Michael R. Hines +Date: Tue Jun 25 21:35:29 2013 -0400 + + rdma: export yield_until_fd_readable() + + The RDMA event channel can be made non-blocking just like a TCP + socket. Exporting this function allows us to yield so that the + QEMU monitor remains available. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + include/block/coroutine.h | 6 ++++++ + qemu-coroutine-io.c | 23 +++++++++++++++++++++++ + savevm.c | 28 ---------------------------- + 3 files changed, 29 insertions(+), 28 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/block/coroutine.h | 6 ++++++ + qemu-coroutine-io.c | 23 +++++++++++++++++++++++ + savevm.c | 28 ---------------------------- + 3 files changed, 29 insertions(+), 28 deletions(-) + +diff --git a/include/block/coroutine.h b/include/block/coroutine.h +index a978162..377805a 100644 +--- a/include/block/coroutine.h ++++ b/include/block/coroutine.h +@@ -209,4 +209,10 @@ void qemu_co_rwlock_unlock(CoRwlock *lock); + */ + void coroutine_fn co_sleep_ns(QEMUClock *clock, int64_t ns); + ++/** ++ * Yield until a file descriptor becomes readable ++ * ++ * Note that this function clobbers the handlers for the file descriptor. ++ */ ++void coroutine_fn yield_until_fd_readable(int fd); + #endif /* QEMU_COROUTINE_H */ +diff --git a/qemu-coroutine-io.c b/qemu-coroutine-io.c +index e8ad1a4..c4df35a 100644 +--- a/qemu-coroutine-io.c ++++ b/qemu-coroutine-io.c +@@ -63,3 +63,26 @@ qemu_co_send_recv(int sockfd, void *buf, size_t bytes, bool do_send) + struct iovec iov = { .iov_base = buf, .iov_len = bytes }; + return qemu_co_sendv_recvv(sockfd, &iov, 1, 0, bytes, do_send); + } ++ ++typedef struct { ++ Coroutine *co; ++ int fd; ++} FDYieldUntilData; ++ ++static void fd_coroutine_enter(void *opaque) ++{ ++ FDYieldUntilData *data = opaque; ++ qemu_set_fd_handler(data->fd, NULL, NULL, NULL); ++ qemu_coroutine_enter(data->co, NULL); ++} ++ ++void coroutine_fn yield_until_fd_readable(int fd) ++{ ++ FDYieldUntilData data; ++ ++ assert(qemu_in_coroutine()); ++ data.co = qemu_coroutine_self(); ++ data.fd = fd; ++ qemu_set_fd_handler(fd, fd_coroutine_enter, NULL, &data); ++ qemu_coroutine_yield(); ++} +diff --git a/savevm.c b/savevm.c +index f68f7f2..9304788 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -149,34 +149,6 @@ typedef struct QEMUFileSocket + QEMUFile *file; + } QEMUFileSocket; + +-typedef struct { +- Coroutine *co; +- int fd; +-} FDYieldUntilData; +- +-static void fd_coroutine_enter(void *opaque) +-{ +- FDYieldUntilData *data = opaque; +- qemu_set_fd_handler(data->fd, NULL, NULL, NULL); +- qemu_coroutine_enter(data->co, NULL); +-} +- +-/** +- * Yield until a file descriptor becomes readable +- * +- * Note that this function clobbers the handlers for the file descriptor. +- */ +-static void coroutine_fn yield_until_fd_readable(int fd) +-{ +- FDYieldUntilData data; +- +- assert(qemu_in_coroutine()); +- data.co = qemu_coroutine_self(); +- data.fd = fd; +- qemu_set_fd_handler(fd, fd_coroutine_enter, NULL, &data); +- qemu_coroutine_yield(); +-} +- + static ssize_t socket_writev_buffer(void *opaque, struct iovec *iov, int iovcnt, + int64_t pos) + { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-forgot-to-turn-off-the-debugging-flag.patch b/SOURCES/kvm-rdma-forgot-to-turn-off-the-debugging-flag.patch new file mode 100644 index 0000000..1b29e0e --- /dev/null +++ b/SOURCES/kvm-rdma-forgot-to-turn-off-the-debugging-flag.patch @@ -0,0 +1,57 @@ +From 78b9f22700ec26bf8bc9bb1fb8c2ba69296955cf Mon Sep 17 00:00:00 2001 +Message-Id: <78b9f22700ec26bf8bc9bb1fb8c2ba69296955cf.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:57 +0100 +Subject: [PATCH 21/46] rdma: forgot to turn off the debugging flag + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-22-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55703 +O-Subject: [RHEL7.0 PATCH 21/42] rdma: forgot to turn off the debugging flag +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 8cd31adc7cc0602ba0a66b7d9b50fd016ab5530a +Author: Michael R. Hines +Date: Sat Aug 3 22:54:49 2013 -0400 + + rdma: forgot to turn off the debugging flag + + Ooops. We forgot to turn off the flag. + + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-3-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 9cf73e3..fe6118d 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -27,7 +27,7 @@ + #include + #include + +-#define DEBUG_RDMA ++//#define DEBUG_RDMA + //#define DEBUG_RDMA_VERBOSE + //#define DEBUG_RDMA_REALLY_VERBOSE + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-introduce-MIG_STATE_NONE-and-change-MIG_STATE_S.patch b/SOURCES/kvm-rdma-introduce-MIG_STATE_NONE-and-change-MIG_STATE_S.patch new file mode 100644 index 0000000..148a183 --- /dev/null +++ b/SOURCES/kvm-rdma-introduce-MIG_STATE_NONE-and-change-MIG_STATE_S.patch @@ -0,0 +1,140 @@ +From 8495376b2f1376da64faa0a62a8ec06a4499d735 Mon Sep 17 00:00:00 2001 +Message-Id: <8495376b2f1376da64faa0a62a8ec06a4499d735.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:54 +0100 +Subject: [PATCH 18/46] rdma: introduce MIG_STATE_NONE and change + MIG_STATE_SETUP state transition + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-19-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55699 +O-Subject: [RHEL7.0 PATCH 18/42] rdma: introduce MIG_STATE_NONE and change MIG_STATE_SETUP state transition +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 29ae8a4133082e16970c9d4be09f4b6a15034617 +Author: Michael R. Hines +Date: Mon Jul 22 10:01:57 2013 -0400 + + rdma: introduce MIG_STATE_NONE and change MIG_STATE_SETUP state transition + + As described in the previous patch, until now, the MIG_STATE_SETUP + state was not really a 'formal' state. It has been used as a 'zero' state + (what we're calling 'NONE' here) and QEMU has been unconditionally transitioning + into this state when the QMP migration command was called. Instead we want to + introduce MIG_STATE_NONE, which is our starting state in the state machine, and + then immediately transition into the MIG_STATE_SETUP state when the QMP migrate + command is issued. + + In order to do this, we must delay the transition into MIG_STATE_ACTIVE until + later in the migration_thread(). This is done to be able to timestamp the amount of + time spent in the SETUP state for proper accounting to the user during + an RDMA migration. + + Furthermore, the management software, until now, has never been aware of the + existence of the SETUP state whatsoever. This must change, because, timing of this + state implies that the state actually exists. + + These two patches cannot be separated because the 'query_migrate' QMP + switch statement needs to know how to handle this new state transition. + + Reviewed-by: Juan Quintela + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + migration.c | 21 ++++++++++++++------- + 1 files changed, 14 insertions(+), 7 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/migration.c b/migration.c +index e885bb7..ddbfd45 100644 +--- a/migration.c ++++ b/migration.c +@@ -36,7 +36,8 @@ + #endif + + enum { +- MIG_STATE_ERROR, ++ MIG_STATE_ERROR = -1, ++ MIG_STATE_NONE, + MIG_STATE_SETUP, + MIG_STATE_CANCELLED, + MIG_STATE_ACTIVE, +@@ -63,7 +64,7 @@ static NotifierList migration_state_notifiers = + MigrationState *migrate_get_current(void) + { + static MigrationState current_migration = { +- .state = MIG_STATE_SETUP, ++ .state = MIG_STATE_NONE, + .bandwidth_limit = MAX_THROTTLE, + .xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE, + .mbps = -1, +@@ -184,9 +185,13 @@ MigrationInfo *qmp_query_migrate(Error **errp) + MigrationState *s = migrate_get_current(); + + switch (s->state) { +- case MIG_STATE_SETUP: ++ case MIG_STATE_NONE: + /* no migration has happened ever */ + break; ++ case MIG_STATE_SETUP: ++ info->has_status = true; ++ info->status = g_strdup("setup"); ++ break; + case MIG_STATE_ACTIVE: + info->has_status = true; + info->status = g_strdup("active"); +@@ -258,7 +263,7 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, + MigrationState *s = migrate_get_current(); + MigrationCapabilityStatusList *cap; + +- if (s->state == MIG_STATE_ACTIVE) { ++ if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP) { + error_set(errp, QERR_MIGRATION_ACTIVE); + return; + } +@@ -401,7 +406,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + } + #endif + +- if (s->state == MIG_STATE_ACTIVE) { ++ if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP) { + error_set(errp, QERR_MIGRATION_ACTIVE); + return; + } +@@ -551,6 +556,8 @@ static void *migration_thread(void *opaque) + DPRINTF("beginning savevm\n"); + qemu_savevm_state_begin(s->file, &s->params); + ++ migrate_set_state(s, MIG_STATE_SETUP, MIG_STATE_ACTIVE); ++ + while (s->state == MIG_STATE_ACTIVE) { + int64_t current_time; + uint64_t pending_size; +@@ -641,8 +648,8 @@ static void *migration_thread(void *opaque) + + void migrate_fd_connect(MigrationState *s) + { +- s->state = MIG_STATE_ACTIVE; +- trace_migrate_set_state(MIG_STATE_ACTIVE); ++ s->state = MIG_STATE_SETUP; ++ trace_migrate_set_state(MIG_STATE_SETUP); + + /* This is a best 1st approximation. ns to ms */ + s->expected_downtime = max_downtime/1000000; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-introduce-capability-x-rdma-pin-all.patch b/SOURCES/kvm-rdma-introduce-capability-x-rdma-pin-all.patch new file mode 100644 index 0000000..2b713e1 --- /dev/null +++ b/SOURCES/kvm-rdma-introduce-capability-x-rdma-pin-all.patch @@ -0,0 +1,126 @@ +From e3995aaa436e2ec92e720ff17855c6460dbc3761 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:47 +0100 +Subject: [PATCH 11/46] rdma: introduce capability x-rdma-pin-all + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-12-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55696 +O-Subject: [RHEL7.0 PATCH 11/42] rdma: introduce capability x-rdma-pin-all +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 60d9222c8f50c3e5dd3df9ee84ddd1d1c4b35389 +Author: Michael R. Hines +Date: Tue Jun 25 21:35:36 2013 -0400 + + rdma: introduce capability x-rdma-pin-all + + This capability allows you to disable dynamic chunk registration + for better throughput on high-performance links. + + For example, using an 8GB RAM virtual machine with all 8GB of memory in + active use and the VM itself is completely idle using a 40 gbps infiniband link: + + 1. x-rdma-pin-all disabled total time: approximately 7.5 seconds @ 9.5 Gbps + 2. x-rdma-pin-all enabled total time: approximately 4 seconds @ 26 Gbps + + These numbers would of course scale up to whatever size virtual machine + you have to migrate using RDMA. + + Enabling this feature does *not* have any measurable affect on + migration *downtime*. This is because, without this feature, all of the + memory will have already been registered already in advance during + the bulk round and does not need to be re-registered during the successive + iteration rounds. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Reviewed-by: Eric Blake + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + include/migration/migration.h | 1 + + migration.c | 9 +++++++++ + qapi-schema.json | 7 ++++++- + 3 files changed, 16 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/migration/migration.h | 1 + + migration.c | 9 +++++++++ + qapi-schema.json | 7 ++++++- + 3 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 6455e36..701709a 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -123,6 +123,7 @@ void migrate_add_blocker(Error *reason); + */ + void migrate_del_blocker(Error *reason); + ++bool migrate_rdma_pin_all(void); + bool migrate_zero_blocks(void); + + bool migrate_auto_converge(void); +diff --git a/migration.c b/migration.c +index f4d1e34..73a348f 100644 +--- a/migration.c ++++ b/migration.c +@@ -484,6 +484,15 @@ void qmp_migrate_set_downtime(double value, Error **errp) + max_downtime = (uint64_t)value; + } + ++bool migrate_rdma_pin_all(void) ++{ ++ MigrationState *s; ++ ++ s = migrate_get_current(); ++ ++ return s->enabled_capabilities[MIGRATION_CAPABILITY_X_RDMA_PIN_ALL]; ++} ++ + bool migrate_auto_converge(void) + { + MigrationState *s; +diff --git a/qapi-schema.json b/qapi-schema.json +index 17df327..bf1fe68 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -664,6 +664,11 @@ + # This feature allows us to minimize migration traffic for certain work + # loads, by sending compressed difference of the pages + # ++# @x-rdma-pin-all: Controls whether or not the entire VM memory footprint is ++# mlock()'d on demand or all at once. Refer to docs/rdma.txt for usage. ++# Disabled by default. Experimental: may (or may not) be renamed after ++# further testing is complete. (since 1.6) ++# + # @auto-converge: If enabled, QEMU will automatically throttle down the guest + # to speed up convergence of RAM migration. (since 1.6) + # +@@ -679,7 +684,7 @@ + # Since: 1.2 + ## + { 'enum': 'MigrationCapability', +- 'data': ['xbzrle', 'auto-converge', 'zero-blocks'] } ++ 'data': ['xbzrle', 'x-rdma-pin-all', 'auto-converge', 'zero-blocks'] } + + ## + # @MigrationCapabilityStatus +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-introduce-qemu_file_mode_is_not_valid.patch b/SOURCES/kvm-rdma-introduce-qemu_file_mode_is_not_valid.patch new file mode 100644 index 0000000..8762934 --- /dev/null +++ b/SOURCES/kvm-rdma-introduce-qemu_file_mode_is_not_valid.patch @@ -0,0 +1,106 @@ +From e7b184d50f2723ae82e35251ad8f05ec1cddb034 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:44 +0100 +Subject: [PATCH 08/46] rdma: introduce qemu_file_mode_is_not_valid() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-9-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55692 +O-Subject: [RHEL7.0 PATCH 08/42] rdma: introduce qemu_file_mode_is_not_valid() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit bc1256f7f187cc7d491bfe3861249a60873adbbc +Author: Michael R. Hines +Date: Tue Jun 25 21:35:31 2013 -0400 + + rdma: introduce qemu_file_mode_is_not_valid() + + QEMUFileRDMA also has read and write modes. This function is now + shared to reduce code duplication. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + include/migration/qemu-file.h | 1 + + savevm.c | 20 +++++++++++++------- + 2 files changed, 14 insertions(+), 7 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/migration/qemu-file.h | 1 + + savevm.c | 20 +++++++++++++------- + 2 files changed, 14 insertions(+), 7 deletions(-) + +diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h +index fb1cf40..37d1604 100644 +--- a/include/migration/qemu-file.h ++++ b/include/migration/qemu-file.h +@@ -80,6 +80,7 @@ void qemu_put_byte(QEMUFile *f, int v); + * The buffer should be available till it is sent asynchronously. + */ + void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, int size); ++bool qemu_file_mode_is_not_valid(const char *mode); + + static inline void qemu_put_ubyte(QEMUFile *f, unsigned int v) + { +diff --git a/savevm.c b/savevm.c +index 9304788..26d5607 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -449,14 +449,23 @@ static const QEMUFileOps socket_write_ops = { + .close = socket_close + }; + +-QEMUFile *qemu_fopen_socket(int fd, const char *mode) ++bool qemu_file_mode_is_not_valid(const char *mode) + { +- QEMUFileSocket *s; +- + if (mode == NULL || + (mode[0] != 'r' && mode[0] != 'w') || + mode[1] != 'b' || mode[2] != 0) { + fprintf(stderr, "qemu_fopen: Argument validity check failed\n"); ++ return true; ++ } ++ ++ return false; ++} ++ ++QEMUFile *qemu_fopen_socket(int fd, const char *mode) ++{ ++ QEMUFileSocket *s; ++ ++ if (qemu_file_mode_is_not_valid(mode)) { + return NULL; + } + +@@ -475,10 +484,7 @@ QEMUFile *qemu_fopen(const char *filename, const char *mode) + { + QEMUFileStdio *s; + +- if (mode == NULL || +- (mode[0] != 'r' && mode[0] != 'w') || +- mode[1] != 'b' || mode[2] != 0) { +- fprintf(stderr, "qemu_fopen: Argument validity check failed\n"); ++ if (qemu_file_mode_is_not_valid(mode)) { + return NULL; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-introduce-qemu_ram_foreach_block.patch b/SOURCES/kvm-rdma-introduce-qemu_ram_foreach_block.patch new file mode 100644 index 0000000..2f60c16 --- /dev/null +++ b/SOURCES/kvm-rdma-introduce-qemu_ram_foreach_block.patch @@ -0,0 +1,85 @@ +From 34bab268a046ceb03e4f925eb8f45a80314c6c34 Mon Sep 17 00:00:00 2001 +Message-Id: <34bab268a046ceb03e4f925eb8f45a80314c6c34.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:45 +0100 +Subject: [PATCH 09/46] rdma: introduce qemu_ram_foreach_block() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-10-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55693 +O-Subject: [RHEL7.0 PATCH 09/42] rdma: introduce qemu_ram_foreach_block() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit bd2fa51fcdba3408f308df1b08fae04053ecdee5 +Author: Michael R. Hines +Date: Tue Jun 25 21:35:34 2013 -0400 + + rdma: introduce qemu_ram_foreach_block() + + This is used during RDMA initialization in order to + transmit a description of all the RAM blocks to the + peer for later dynamic chunk registration purposes. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + exec.c | 9 +++++++++ + include/exec/cpu-common.h | 5 +++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +Signed-off-by: Michal Novotny +--- + exec.c | 9 +++++++++ + include/exec/cpu-common.h | 5 +++++ + 2 files changed, 14 insertions(+) + +diff --git a/exec.c b/exec.c +index cb11571..64af205 100644 +--- a/exec.c ++++ b/exec.c +@@ -2644,3 +2644,12 @@ bool cpu_physical_memory_is_io(hwaddr phys_addr) + memory_region_is_romd(section->mr)); + } + #endif ++ ++void qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque) ++{ ++ RAMBlock *block; ++ ++ QTAILQ_FOREACH(block, &ram_list.blocks, next) { ++ func(block->host, block->offset, block->length, opaque); ++ } ++} +diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h +index 2e5f11f..2900fd6 100644 +--- a/include/exec/cpu-common.h ++++ b/include/exec/cpu-common.h +@@ -119,6 +119,11 @@ extern struct MemoryRegion io_mem_rom; + extern struct MemoryRegion io_mem_unassigned; + extern struct MemoryRegion io_mem_notdirty; + ++typedef void (RAMBlockIterFunc)(void *host_addr, ++ ram_addr_t offset, ram_addr_t length, void *opaque); ++ ++void qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); ++ + #endif + + #endif /* !CPU_COMMON_H */ +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-introduce-qemu_update_position.patch b/SOURCES/kvm-rdma-introduce-qemu_update_position.patch new file mode 100644 index 0000000..dbf2f1d --- /dev/null +++ b/SOURCES/kvm-rdma-introduce-qemu_update_position.patch @@ -0,0 +1,120 @@ +From 2d15ce1f7898287ef50a658bb08aeb4bb22b8a0a Mon Sep 17 00:00:00 2001 +Message-Id: <2d15ce1f7898287ef50a658bb08aeb4bb22b8a0a.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:41 +0100 +Subject: [PATCH 05/46] rdma: introduce qemu_update_position() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-6-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55689 +O-Subject: [RHEL7.0 PATCH 05/42] rdma: introduce qemu_update_position() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 2b0ce0797d6bfb13ebefe010da86abced0b7a9b3 +Author: Michael R. Hines +Date: Tue Jun 25 21:35:28 2013 -0400 + + rdma: introduce qemu_update_position() + + RDMA writes happen asynchronously, and thus the performance accounting + also needs to be able to occur asynchronously. This allows anybody + to call into savevm.c to update both f->pos as well as into arch_init.c + to update the acct_info structure with up-to-date values when + the RDMA transfer actually completes. + + Reviewed-by: Juan Quintela + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + arch_init.c | 12 ++++++++++++ + include/migration/migration.h | 2 ++ + include/migration/qemu-file.h | 1 + + savevm.c | 5 +++++ + 4 files changed, 20 insertions(+), 0 deletions(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 12 ++++++++++++ + include/migration/migration.h | 2 ++ + include/migration/qemu-file.h | 1 + + savevm.c | 5 +++++ + 4 files changed, 20 insertions(+) + +diff --git a/arch_init.c b/arch_init.c +index 2c0ea1b..e940ede 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -522,6 +522,18 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + + static uint64_t bytes_transferred; + ++void acct_update_position(QEMUFile *f, size_t size, bool zero) ++{ ++ uint64_t pages = size / TARGET_PAGE_SIZE; ++ if (zero) { ++ acct_info.dup_pages += pages; ++ } else { ++ acct_info.norm_pages += pages; ++ bytes_transferred += size; ++ qemu_update_position(f, size); ++ } ++} ++ + static ram_addr_t ram_save_remaining(void) + { + return migration_dirty_pages; +diff --git a/include/migration/migration.h b/include/migration/migration.h +index f1519dd..2f3a3d9 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -92,6 +92,8 @@ uint64_t ram_bytes_remaining(void); + uint64_t ram_bytes_transferred(void); + uint64_t ram_bytes_total(void); + ++void acct_update_position(QEMUFile *f, size_t size, bool zero); ++ + extern SaveVMHandlers savevm_ram_handlers; + + uint64_t dup_mig_bytes_transferred(void); +diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h +index 8931e16..fb1cf40 100644 +--- a/include/migration/qemu-file.h ++++ b/include/migration/qemu-file.h +@@ -93,6 +93,7 @@ void qemu_put_be32(QEMUFile *f, unsigned int v); + void qemu_put_be64(QEMUFile *f, uint64_t v); + int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size); + int qemu_get_byte(QEMUFile *f); ++void qemu_update_position(QEMUFile *f, size_t size); + + static inline unsigned int qemu_get_ubyte(QEMUFile *f) + { +diff --git a/savevm.c b/savevm.c +index 4d898af..f68f7f2 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -671,6 +671,11 @@ int qemu_get_fd(QEMUFile *f) + return -1; + } + ++void qemu_update_position(QEMUFile *f, size_t size) ++{ ++ f->pos += size; ++} ++ + /** Closes the file + * + * Returns negative error value if any error happened on previous operations or +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-introduce-ram_handle_compressed.patch b/SOURCES/kvm-rdma-introduce-ram_handle_compressed.patch new file mode 100644 index 0000000..f8023b6 --- /dev/null +++ b/SOURCES/kvm-rdma-introduce-ram_handle_compressed.patch @@ -0,0 +1,111 @@ +From 6499b6033f8aff6482cfa7942b0c16b386a519f5 Mon Sep 17 00:00:00 2001 +Message-Id: <6499b6033f8aff6482cfa7942b0c16b386a519f5.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:50 +0100 +Subject: [PATCH 14/46] rdma: introduce ram_handle_compressed() + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-15-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55706 +O-Subject: [RHEL7.0 PATCH 14/42] rdma: introduce ram_handle_compressed() +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 44c3b58cf9b2c91a38363f0b45d20f3f40b8f2b3 +Author: Michael R. Hines +Date: Mon Jul 22 10:01:53 2013 -0400 + + rdma: introduce ram_handle_compressed() + + This gives RDMA shared access to madvise() on the destination side + when an entire chunk is found to be zero. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + arch_init.c | 29 +++++++++++++++++++---------- + include/migration/migration.h | 2 ++ + 2 files changed, 21 insertions(+), 10 deletions(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 29 +++++++++++++++++++---------- + include/migration/migration.h | 2 ++ + 2 files changed, 21 insertions(+), 10 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index e940ede..e7da520 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -809,6 +809,24 @@ static inline void *host_from_stream_offset(QEMUFile *f, + return NULL; + } + ++/* ++ * If a page (or a whole RDMA chunk) has been ++ * determined to be zero, then zap it. ++ */ ++void ram_handle_compressed(void *host, uint8_t ch, uint64_t size) ++{ ++ if (ch != 0 || !is_zero_page(host)) { ++ memset(host, ch, size); ++#ifndef _WIN32 ++ if (ch == 0 && ++ (!kvm_enabled() || kvm_has_sync_mmu()) && ++ getpagesize() <= TARGET_PAGE_SIZE) { ++ qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED); ++ } ++#endif ++ } ++} ++ + static int ram_load(QEMUFile *f, void *opaque, int version_id) + { + ram_addr_t addr; +@@ -876,16 +894,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) + } + + ch = qemu_get_byte(f); +- if (ch != 0 || !is_zero_page(host)) { +- memset(host, ch, TARGET_PAGE_SIZE); +-#ifndef _WIN32 +- if (ch == 0 && +- (!kvm_enabled() || kvm_has_sync_mmu()) && +- getpagesize() <= TARGET_PAGE_SIZE) { +- qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED); +- } +-#endif +- } ++ ram_handle_compressed(host, ch, TARGET_PAGE_SIZE); + } else if (flags & RAM_SAVE_FLAG_PAGE) { + void *host; + +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 701709a..90b5021 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -109,6 +109,8 @@ uint64_t xbzrle_mig_pages_transferred(void); + uint64_t xbzrle_mig_pages_overflow(void); + uint64_t xbzrle_mig_pages_cache_miss(void); + ++void ram_handle_compressed(void *host, uint8_t ch, uint64_t size); ++ + /** + * @migrate_add_blocker - prevent migration from proceeding + * +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-memory-leak-RDMAContext-host.patch b/SOURCES/kvm-rdma-memory-leak-RDMAContext-host.patch new file mode 100644 index 0000000..d4bd4bb --- /dev/null +++ b/SOURCES/kvm-rdma-memory-leak-RDMAContext-host.patch @@ -0,0 +1,59 @@ +From ca20b922adfc76c1aff60e86ae731295cf82f884 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:02 +0100 +Subject: [PATCH 26/46] rdma: memory leak RDMAContext::host + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-27-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55704 +O-Subject: [RHEL7.0 PATCH 26/42] rdma: memory leak RDMAContext::host +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit e1d0fb378ae3bb4272124a12e3fe1a02c4745eb1 +Author: Isaku Yamahata +Date: Sat Aug 3 22:54:54 2013 -0400 + + rdma: memory leak RDMAContext::host + + It is allocated by g_strdup(), so needs to be freed. + + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-8-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 6afe98c..ff0a823 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -2097,6 +2097,8 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + rdma_destroy_event_channel(rdma->channel); + rdma->channel = NULL; + } ++ g_free(rdma->host); ++ rdma->host = NULL; + } + + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-new-QEMUFileOps-hooks.patch b/SOURCES/kvm-rdma-new-QEMUFileOps-hooks.patch new file mode 100644 index 0000000..e809999 --- /dev/null +++ b/SOURCES/kvm-rdma-new-QEMUFileOps-hooks.patch @@ -0,0 +1,220 @@ +From 01eb364d7e367e66572363b4c974b7f3428ea4ca Mon Sep 17 00:00:00 2001 +Message-Id: <01eb364d7e367e66572363b4c974b7f3428ea4ca.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:46 +0100 +Subject: [PATCH 10/46] rdma: new QEMUFileOps hooks + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-11-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55694 +O-Subject: [RHEL7.0 PATCH 10/42] rdma: new QEMUFileOps hooks +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 43487c678d6e4e7182bfa70d2bc75422578782aa +Author: Michael R. Hines +Date: Tue Jun 25 21:35:35 2013 -0400 + + rdma: new QEMUFileOps hooks + + These are the prototypes and implementation of new hooks that + RDMA takes advantage of to perform dynamic page registration. + + An optional hook is also introduced for a custom function + to be able to override the default save_page function. + + Also included are the prototypes and accessor methods used by + arch_init.c which invoke funtions inside savevm.c to call out + to the hooks that may or may not have been overridden + inside of QEMUFileOps. + + Reviewed-by: Juan Quintela + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + include/migration/migration.h | 20 ++++++++++++++ + include/migration/qemu-file.h | 29 ++++++++++++++++++++ + savevm.c | 59 +++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 108 insertions(+), 0 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/migration/migration.h | 20 +++++++++++++++ + include/migration/qemu-file.h | 29 +++++++++++++++++++++ + savevm.c | 59 +++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 108 insertions(+) + +diff --git a/include/migration/migration.h b/include/migration/migration.h +index 201be18..6455e36 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -21,6 +21,7 @@ + #include "qapi/error.h" + #include "migration/vmstate.h" + #include "qapi-types.h" ++#include "exec/cpu-common.h" + + struct MigrationParams { + bool blk; +@@ -134,4 +135,23 @@ int migrate_use_xbzrle(void); + int64_t migrate_xbzrle_cache_size(void); + + int64_t xbzrle_cache_resize(int64_t new_size); ++ ++void ram_control_before_iterate(QEMUFile *f, uint64_t flags); ++void ram_control_after_iterate(QEMUFile *f, uint64_t flags); ++void ram_control_load_hook(QEMUFile *f, uint64_t flags); ++ ++/* Whenever this is found in the data stream, the flags ++ * will be passed to ram_control_load_hook in the incoming-migration ++ * side. This lets before_ram_iterate/after_ram_iterate add ++ * transport-specific sections to the RAM migration data. ++ */ ++#define RAM_SAVE_FLAG_HOOK 0x80 ++ ++#define RAM_SAVE_CONTROL_NOT_SUPP -1000 ++#define RAM_SAVE_CONTROL_DELAYED -2000 ++ ++size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, ++ ram_addr_t offset, size_t size, ++ int *bytes_sent); ++ + #endif +diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h +index 37d1604..0f757fb 100644 +--- a/include/migration/qemu-file.h ++++ b/include/migration/qemu-file.h +@@ -23,6 +23,7 @@ + */ + #ifndef QEMU_FILE_H + #define QEMU_FILE_H 1 ++#include "exec/cpu-common.h" + + /* This function writes a chunk of data to a file at the given position. + * The pos argument can be ignored if the file is only being used for +@@ -57,12 +58,40 @@ typedef int (QEMUFileGetFD)(void *opaque); + typedef ssize_t (QEMUFileWritevBufferFunc)(void *opaque, struct iovec *iov, + int iovcnt, int64_t pos); + ++/* ++ * This function provides hooks around different ++ * stages of RAM migration. ++ */ ++typedef int (QEMURamHookFunc)(QEMUFile *f, void *opaque, uint64_t flags); ++ ++/* ++ * Constants used by ram_control_* hooks ++ */ ++#define RAM_CONTROL_SETUP 0 ++#define RAM_CONTROL_ROUND 1 ++#define RAM_CONTROL_HOOK 2 ++#define RAM_CONTROL_FINISH 3 ++ ++/* ++ * This function allows override of where the RAM page ++ * is saved (such as RDMA, for example.) ++ */ ++typedef size_t (QEMURamSaveFunc)(QEMUFile *f, void *opaque, ++ ram_addr_t block_offset, ++ ram_addr_t offset, ++ size_t size, ++ int *bytes_sent); ++ + typedef struct QEMUFileOps { + QEMUFilePutBufferFunc *put_buffer; + QEMUFileGetBufferFunc *get_buffer; + QEMUFileCloseFunc *close; + QEMUFileGetFD *get_fd; + QEMUFileWritevBufferFunc *writev_buffer; ++ QEMURamHookFunc *before_ram_iterate; ++ QEMURamHookFunc *after_ram_iterate; ++ QEMURamHookFunc *hook_ram_load; ++ QEMURamSaveFunc *save_page; + } QEMUFileOps; + + QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops); +diff --git a/savevm.c b/savevm.c +index 26d5607..e0491e7 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -616,6 +616,65 @@ void qemu_fflush(QEMUFile *f) + } + } + ++void ram_control_before_iterate(QEMUFile *f, uint64_t flags) ++{ ++ int ret = 0; ++ ++ if (f->ops->before_ram_iterate) { ++ ret = f->ops->before_ram_iterate(f, f->opaque, flags); ++ if (ret < 0) { ++ qemu_file_set_error(f, ret); ++ } ++ } ++} ++ ++void ram_control_after_iterate(QEMUFile *f, uint64_t flags) ++{ ++ int ret = 0; ++ ++ if (f->ops->after_ram_iterate) { ++ ret = f->ops->after_ram_iterate(f, f->opaque, flags); ++ if (ret < 0) { ++ qemu_file_set_error(f, ret); ++ } ++ } ++} ++ ++void ram_control_load_hook(QEMUFile *f, uint64_t flags) ++{ ++ int ret = 0; ++ ++ if (f->ops->hook_ram_load) { ++ ret = f->ops->hook_ram_load(f, f->opaque, flags); ++ if (ret < 0) { ++ qemu_file_set_error(f, ret); ++ } ++ } else { ++ qemu_file_set_error(f, ret); ++ } ++} ++ ++size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, ++ ram_addr_t offset, size_t size, int *bytes_sent) ++{ ++ if (f->ops->save_page) { ++ int ret = f->ops->save_page(f, f->opaque, block_offset, ++ offset, size, bytes_sent); ++ ++ if (ret != RAM_SAVE_CONTROL_DELAYED) { ++ if (*bytes_sent > 0) { ++ qemu_update_position(f, *bytes_sent); ++ } else if (ret < 0) { ++ qemu_file_set_error(f, ret); ++ } ++ } ++ ++ return ret; ++ } ++ ++ return RAM_SAVE_CONTROL_NOT_SUPP; ++} ++ + static void qemu_fill_buffer(QEMUFile *f) + { + int len; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-proper-getaddrinfo-handling.patch b/SOURCES/kvm-rdma-proper-getaddrinfo-handling.patch new file mode 100644 index 0000000..f2cc4f4 --- /dev/null +++ b/SOURCES/kvm-rdma-proper-getaddrinfo-handling.patch @@ -0,0 +1,168 @@ +From b60d6390ff9415bc5960ba20ff5cc56e50078f85 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:06 +0100 +Subject: [PATCH 30/46] rdma: proper getaddrinfo() handling + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-31-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55714 +O-Subject: [RHEL7.0 PATCH 30/42] rdma: proper getaddrinfo() handling +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 6470215b794d6d9f9ffbd82f669645715eb014f8 +Author: Michael R. Hines +Date: Fri Aug 9 16:05:43 2013 -0400 + + rdma: proper getaddrinfo() handling + + getaddrinfo() already knows what it's doing, + but it can potentially return multiple addresses. + We need to handle that... + + Reviewed-by: Orit Wasserman + Signed-off-by: Michael R. Hines + Message-id: 1376078746-24948-5-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 56 +++++++++++++++++++++++++++-------------------------- + 1 files changed, 29 insertions(+), 27 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 56 +++++++++++++++++++++++++++++--------------------------- + 1 file changed, 29 insertions(+), 27 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 9c02ad3..e6fd77a 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -392,7 +392,6 @@ typedef struct RDMAContext { + uint64_t unregistrations[RDMA_SIGNALED_SEND_MAX]; + + GHashTable *blockmap; +- bool ipv6; + } RDMAContext; + + /* +@@ -745,7 +744,7 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + char port_str[16]; + struct rdma_cm_event *cm_event; + char ip[40] = "unknown"; +- int af = rdma->ipv6 ? PF_INET6 : PF_INET; ++ struct addrinfo *e; + + if (rdma->host == NULL || !strcmp(rdma->host, "")) { + ERROR(errp, "RDMA hostname has not been set"); +@@ -775,18 +774,23 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + goto err_resolve_get_addr; + } + +- inet_ntop(af, &((struct sockaddr_in *) res->ai_addr)->sin_addr, +- ip, sizeof ip); +- DPRINTF("%s => %s\n", rdma->host, ip); ++ for (e = res; e != NULL; e = e->ai_next) { ++ inet_ntop(e->ai_family, ++ &((struct sockaddr_in *) e->ai_addr)->sin_addr, ip, sizeof ip); ++ DPRINTF("Trying %s => %s\n", rdma->host, ip); + +- /* resolve the first address */ +- ret = rdma_resolve_addr(rdma->cm_id, NULL, res->ai_addr, +- RDMA_RESOLVE_TIMEOUT_MS); +- if (ret) { +- ERROR(errp, "could not resolve address %s", rdma->host); +- goto err_resolve_get_addr; ++ /* resolve the first address */ ++ ret = rdma_resolve_addr(rdma->cm_id, NULL, e->ai_addr, ++ RDMA_RESOLVE_TIMEOUT_MS); ++ if (!ret) { ++ goto route; ++ } + } + ++ ERROR(errp, "could not resolve address %s", rdma->host); ++ goto err_resolve_get_addr; ++ ++route: + qemu_rdma_dump_gid("source_resolve_addr", rdma->cm_id); + + ret = rdma_get_cm_event(rdma->channel, &cm_event); +@@ -2260,8 +2264,6 @@ err_rdma_source_connect: + static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + { + int ret = -EINVAL, idx; +- int af = rdma->ipv6 ? PF_INET6 : PF_INET; +- struct sockaddr_in sin; + struct rdma_cm_id *listen_id; + char ip[40] = "unknown"; + struct addrinfo *res; +@@ -2292,35 +2294,36 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + goto err_dest_init_create_listen_id; + } + +- memset(&sin, 0, sizeof(sin)); +- sin.sin_family = af; +- sin.sin_port = htons(rdma->port); + snprintf(port_str, 16, "%d", rdma->port); + port_str[15] = '\0'; + + if (rdma->host && strcmp("", rdma->host)) { ++ struct addrinfo *e; ++ + ret = getaddrinfo(rdma->host, port_str, NULL, &res); + if (ret < 0) { + ERROR(errp, "could not getaddrinfo address %s", rdma->host); + goto err_dest_init_bind_addr; + } + ++ for (e = res; e != NULL; e = e->ai_next) { ++ inet_ntop(e->ai_family, ++ &((struct sockaddr_in *) e->ai_addr)->sin_addr, ip, sizeof ip); ++ DPRINTF("Trying %s => %s\n", rdma->host, ip); ++ ret = rdma_bind_addr(listen_id, e->ai_addr); ++ if (!ret) { ++ goto listen; ++ } ++ } + +- inet_ntop(af, &((struct sockaddr_in *) res->ai_addr)->sin_addr, +- ip, sizeof ip); ++ ERROR(errp, "Error: could not rdma_bind_addr!"); ++ goto err_dest_init_bind_addr; + } else { + ERROR(errp, "migration host and port not specified!"); + ret = -EINVAL; + goto err_dest_init_bind_addr; + } +- +- DPRINTF("%s => %s\n", rdma->host, ip); +- +- ret = rdma_bind_addr(listen_id, res->ai_addr); +- if (ret) { +- ERROR(errp, "Error: could not rdma_bind_addr!"); +- goto err_dest_init_bind_addr; +- } ++listen: + + rdma->listen_id = listen_id; + qemu_rdma_dump_gid("dest_init", listen_id); +@@ -2351,7 +2354,6 @@ static void *qemu_rdma_data_init(const char *host_port, Error **errp) + if (addr != NULL) { + rdma->port = atoi(addr->port); + rdma->host = g_strdup(addr->host); +- rdma->ipv6 = addr->ipv6; + } else { + ERROR(errp, "bad RDMA migration address '%s'", host_port); + g_free(rdma); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-qemu_rdma_post_send_control-uses-wrongly-RDMA_W.patch b/SOURCES/kvm-rdma-qemu_rdma_post_send_control-uses-wrongly-RDMA_W.patch new file mode 100644 index 0000000..901f488 --- /dev/null +++ b/SOURCES/kvm-rdma-qemu_rdma_post_send_control-uses-wrongly-RDMA_W.patch @@ -0,0 +1,105 @@ +From 4d2bc4b2e4d04efa0fd2f3cd10f6bc22b9c0af9f Mon Sep 17 00:00:00 2001 +Message-Id: <4d2bc4b2e4d04efa0fd2f3cd10f6bc22b9c0af9f.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:00 +0100 +Subject: [PATCH 24/46] rdma: qemu_rdma_post_send_control uses wrongly + RDMA_WRID_MAX + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-25-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55708 +O-Subject: [RHEL7.0 PATCH 24/42] rdma: qemu_rdma_post_send_control uses wrongly RDMA_WRID_MAX +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 1f22364bb5a756dfcbd15c2ae2bac18bbcef6190 +Author: Isaku Yamahata +Date: Sat Aug 3 22:54:52 2013 -0400 + + rdma: qemu_rdma_post_send_control uses wrongly RDMA_WRID_MAX + + RDMA_WRID_CONTROL should be used. And remove related work around. + + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-6-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 7266803..ea16f0e 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -322,7 +322,7 @@ typedef struct RDMAContext { + char *host; + int port; + +- RDMAWorkRequestData wr_data[RDMA_WRID_MAX + 1]; ++ RDMAWorkRequestData wr_data[RDMA_WRID_MAX]; + + /* + * This is used by *_exchange_send() to figure out whether or not +@@ -1399,7 +1399,7 @@ static int qemu_rdma_post_send_control(RDMAContext *rdma, uint8_t *buf, + RDMAControlHeader *head) + { + int ret = 0; +- RDMAWorkRequestData *wr = &rdma->wr_data[RDMA_WRID_MAX]; ++ RDMAWorkRequestData *wr = &rdma->wr_data[RDMA_WRID_CONTROL]; + struct ibv_send_wr *bad_wr; + struct ibv_sge sge = { + .addr = (uint64_t)(wr->control), +@@ -2054,7 +2054,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) + g_free(rdma->block); + rdma->block = NULL; + +- for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ for (idx = 0; idx < RDMA_WRID_MAX; idx++) { + if (rdma->wr_data[idx].control_mr) { + rdma->total_registrations--; + ibv_dereg_mr(rdma->wr_data[idx].control_mr); +@@ -2136,7 +2136,7 @@ static int qemu_rdma_source_init(RDMAContext *rdma, Error **errp, bool pin_all) + goto err_rdma_source_init; + } + +- for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ for (idx = 0; idx < RDMA_WRID_MAX; idx++) { + ret = qemu_rdma_reg_control(rdma, idx); + if (ret) { + ERROR(temp, "rdma migration: error registering %d control!", +@@ -2248,7 +2248,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) + struct addrinfo *res; + char port_str[16]; + +- for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ for (idx = 0; idx < RDMA_WRID_MAX; idx++) { + rdma->wr_data[idx].control_len = 0; + rdma->wr_data[idx].control_curr = NULL; + } +@@ -2705,7 +2705,7 @@ static int qemu_rdma_accept(RDMAContext *rdma) + goto err_rdma_dest_wait; + } + +- for (idx = 0; idx <= RDMA_WRID_MAX; idx++) { ++ for (idx = 0; idx < RDMA_WRID_MAX; idx++) { + ret = qemu_rdma_reg_control(rdma, idx); + if (ret) { + fprintf(stderr, "rdma: error registering %d control!\n", idx); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-remaining-documentation-fixes.patch b/SOURCES/kvm-rdma-remaining-documentation-fixes.patch new file mode 100644 index 0000000..f65c426 --- /dev/null +++ b/SOURCES/kvm-rdma-remaining-documentation-fixes.patch @@ -0,0 +1,94 @@ +From 0488e742dcf68d044910b51beddc712ae1baa767 Mon Sep 17 00:00:00 2001 +Message-Id: <0488e742dcf68d044910b51beddc712ae1baa767.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:08 +0100 +Subject: [PATCH 32/46] rdma: remaining documentation fixes + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-33-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55710 +O-Subject: [RHEL7.0 PATCH 32/42] rdma: remaining documentation fixes +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 8f3067bd86485f8cd03abc940ddb2b8467ef3627 +Author: Michael R. Hines +Date: Fri Aug 9 16:05:45 2013 -0400 + + rdma: remaining documentation fixes + + Was missing 'setup-time' in some of the QMP documentation... + + Signed-off-by: Michael R. Hines + Reviewed-by: Eric Blake + Message-id: 1376078746-24948-7-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + qmp-commands.hx | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +Signed-off-by: Michal Novotny +--- + qmp-commands.hx | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 4942590..cedcd17 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -2576,6 +2576,12 @@ The main json-object contains the following: + - "total-time": total amount of ms since migration started. If + migration has ended, it returns the total migration + time (json-int) ++- "setup-time" amount of setup time in milliseconds _before_ the ++ iterations begin but _after_ the QMP command is issued. ++ This is designed to provide an accounting of any activities ++ (such as RDMA pinning) which may be expensive, but do not ++ actually occur during the iterative migration rounds ++ themselves. (json-int) + - "downtime": only present when migration has finished correctly + total amount in ms for downtime that happened (json-int) + - "expected-downtime": only present while migration is active +@@ -2629,6 +2635,7 @@ Examples: + "remaining":123, + "total":246, + "total-time":12345, ++ "setup-time":12345, + "downtime":12345, + "duplicate":123, + "normal":123, +@@ -2653,6 +2660,7 @@ Examples: + "remaining":123, + "total":246, + "total-time":12345, ++ "setup-time":12345, + "expected-downtime":12345, + "duplicate":123, + "normal":123, +@@ -2672,6 +2680,7 @@ Examples: + "remaining":1053304, + "transferred":3720, + "total-time":12345, ++ "setup-time":12345, + "expected-downtime":12345, + "duplicate":123, + "normal":123, +@@ -2697,6 +2706,7 @@ Examples: + "remaining":1053304, + "transferred":3720, + "total-time":12345, ++ "setup-time":12345, + "expected-downtime":12345, + "duplicate":10, + "normal":3333, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-send-pc.ram.patch b/SOURCES/kvm-rdma-send-pc.ram.patch new file mode 100644 index 0000000..cac694a --- /dev/null +++ b/SOURCES/kvm-rdma-send-pc.ram.patch @@ -0,0 +1,152 @@ +From ab8cff98f973031b20d7f1971b4fe42d8bf6488c Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:52 +0100 +Subject: [PATCH 16/46] rdma: send pc.ram + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-17-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55700 +O-Subject: [RHEL7.0 PATCH 16/42] rdma: send pc.ram +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 0033b8b42a1cc2a9350619ea19e11954b12fb819 +Author: Michael R. Hines +Date: Mon Jul 22 10:01:55 2013 -0400 + + rdma: send pc.ram + + This takes advantages of the previous patches: + + 1. use the new QEMUFileOps hook 'save_page' + + 2. call out to the right accessor methods to invoke + the iteration hooks defined in QEMUFileOps + + Reviewed-by: Paolo Bonzini + Reviewed-by: Chegu Vinod + Tested-by: Chegu Vinod + Tested-by: Michael R. Hines + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + arch_init.c | 33 ++++++++++++++++++++++++++++++++- + 1 files changed, 32 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + arch_init.c | 33 ++++++++++++++++++++++++++++++++- + 1 file changed, 32 insertions(+), 1 deletion(-) + +diff --git a/arch_init.c b/arch_init.c +index e7da520..034341c 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -118,6 +118,7 @@ static void check_guest_throttling(void); + #define RAM_SAVE_FLAG_EOS 0x10 + #define RAM_SAVE_FLAG_CONTINUE 0x20 + #define RAM_SAVE_FLAG_XBZRLE 0x40 ++/* 0x80 is reserved in migration.h start with 0x100 next */ + + + static struct defconfig_file { +@@ -476,6 +477,7 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + ram_bulk_stage = false; + } + } else { ++ int ret; + uint8_t *p; + int cont = (block == last_sent_block) ? + RAM_SAVE_FLAG_CONTINUE : 0; +@@ -484,7 +486,18 @@ static int ram_save_block(QEMUFile *f, bool last_stage) + + /* In doubt sent page as normal */ + bytes_sent = -1; +- if (is_zero_page(p)) { ++ ret = ram_control_save_page(f, block->offset, ++ offset, TARGET_PAGE_SIZE, &bytes_sent); ++ ++ if (ret != RAM_SAVE_CONTROL_NOT_SUPP) { ++ if (ret != RAM_SAVE_CONTROL_DELAYED) { ++ if (bytes_sent > 0) { ++ acct_info.norm_pages++; ++ } else if (bytes_sent == 0) { ++ acct_info.dup_pages++; ++ } ++ } ++ } else if (is_zero_page(p)) { + acct_info.dup_pages++; + bytes_sent = save_block_hdr(f, block, offset, cont, + RAM_SAVE_FLAG_COMPRESS); +@@ -636,6 +649,10 @@ static int ram_save_setup(QEMUFile *f, void *opaque) + } + + qemu_mutex_unlock_ramlist(); ++ ++ ram_control_before_iterate(f, RAM_CONTROL_SETUP); ++ ram_control_after_iterate(f, RAM_CONTROL_SETUP); ++ + qemu_put_be64(f, RAM_SAVE_FLAG_EOS); + + return 0; +@@ -654,6 +671,8 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) + reset_ram_globals(); + } + ++ ram_control_before_iterate(f, RAM_CONTROL_ROUND); ++ + t0 = qemu_get_clock_ns(rt_clock); + i = 0; + while ((ret = qemu_file_rate_limit(f)) == 0) { +@@ -685,6 +704,12 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) + + qemu_mutex_unlock_ramlist(); + ++ /* ++ * Must occur before EOS (or any QEMUFile operation) ++ * because of RDMA protocol. ++ */ ++ ram_control_after_iterate(f, RAM_CONTROL_ROUND); ++ + if (ret < 0) { + bytes_transferred += total_sent; + return ret; +@@ -702,6 +727,8 @@ static int ram_save_complete(QEMUFile *f, void *opaque) + qemu_mutex_lock_ramlist(); + migration_bitmap_sync(); + ++ ram_control_before_iterate(f, RAM_CONTROL_FINISH); ++ + /* try transferring iterative blocks of memory */ + + /* flush all remaining blocks regardless of rate limiting */ +@@ -715,6 +742,8 @@ static int ram_save_complete(QEMUFile *f, void *opaque) + } + bytes_transferred += bytes_sent; + } ++ ++ ram_control_after_iterate(f, RAM_CONTROL_FINISH); + migration_end(); + + qemu_mutex_unlock_ramlist(); +@@ -914,6 +943,8 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) + ret = -EINVAL; + goto done; + } ++ } else if (flags & RAM_SAVE_FLAG_HOOK) { ++ ram_control_load_hook(f, flags); + } + error = qemu_file_get_error(f); + if (error) { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-silly-ipv6-bugfix.patch b/SOURCES/kvm-rdma-silly-ipv6-bugfix.patch new file mode 100644 index 0000000..99b6c36 --- /dev/null +++ b/SOURCES/kvm-rdma-silly-ipv6-bugfix.patch @@ -0,0 +1,64 @@ +From b00c5116a41f106737f011b4c803b7451941a732 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:09 +0100 +Subject: [PATCH 33/46] rdma: silly ipv6 bugfix + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-34-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55715 +O-Subject: [RHEL7.0 PATCH 33/42] rdma: silly ipv6 bugfix +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit c89aa2f1851b08c3efa8a1070c0a6b9a36e1227f +Author: Michael R. Hines +Date: Sun Aug 18 22:27:08 2013 -0400 + + rdma: silly ipv6 bugfix + + My bad - but it's very important for us to warn the user that + IPv6 is broken on RoCE in linux right now, until linux releases + a fixed version. + + Signed-off-by: Michael R. Hines + Signed-off-by: Michael Tokarev +--- + migration-rdma.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index ada488e..943496f 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -920,9 +920,11 @@ static int qemu_rdma_resolve_host(RDMAContext *rdma, Error **errp) + ret = rdma_resolve_addr(rdma->cm_id, NULL, e->ai_dst_addr, + RDMA_RESOLVE_TIMEOUT_MS); + if (!ret) { +- ret = qemu_rdma_broken_ipv6_kernel(errp, rdma->cm_id->verbs); +- if (ret) { +- continue; ++ if (e->ai_family == AF_INET6) { ++ ret = qemu_rdma_broken_ipv6_kernel(errp, rdma->cm_id->verbs); ++ if (ret) { ++ continue; ++ } + } + goto route; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-update-documentation-to-reflect-new-unpin-suppo.patch b/SOURCES/kvm-rdma-update-documentation-to-reflect-new-unpin-suppo.patch new file mode 100644 index 0000000..740f6b9 --- /dev/null +++ b/SOURCES/kvm-rdma-update-documentation-to-reflect-new-unpin-suppo.patch @@ -0,0 +1,160 @@ +From bd86e4e5fd283179e97ef07354d822afbf21b7dd Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:48 +0100 +Subject: [PATCH 12/46] rdma: update documentation to reflect new unpin + support + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-13-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55702 +O-Subject: [RHEL7.0 PATCH 12/42] rdma: update documentation to reflect new unpin support +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit a5f56b906e0d7975b87dc3d3c5bfe5a75a4028d2 +Author: Michael R. Hines +Date: Mon Jul 22 10:01:51 2013 -0400 + + rdma: update documentation to reflect new unpin support + + As requested, the protocol now includes memory unpinning support. + This has been implemented in a non-optimized manner, in such a way + that one could devise an LRU or other workload-specific information + on top of the basic mechanism to influence the way unpinning happens + during runtime. + + The feature is not yet user-facing, and is thus can only be enabled + at compile-time. + + Reviewed-by: Eric Blake + Signed-off-by: Michael R. Hines + Signed-off-by: Juan Quintela +--- + docs/rdma.txt | 51 ++++++++++++++++++++++++++++++--------------------- + 1 files changed, 30 insertions(+), 21 deletions(-) + +Signed-off-by: Michal Novotny +--- + docs/rdma.txt | 51 ++++++++++++++++++++++++++++++--------------------- + 1 file changed, 30 insertions(+), 21 deletions(-) + +diff --git a/docs/rdma.txt b/docs/rdma.txt +index 45a4b1d..45d1c8a 100644 +--- a/docs/rdma.txt ++++ b/docs/rdma.txt +@@ -35,7 +35,7 @@ memory tracked during each live migration iteration round cannot keep pace + with the rate of dirty memory produced by the workload. + + RDMA currently comes in two flavors: both Ethernet based (RoCE, or RDMA +-over Convered Ethernet) as well as Infiniband-based. This implementation of ++over Converged Ethernet) as well as Infiniband-based. This implementation of + migration using RDMA is capable of using both technologies because of + the use of the OpenFabrics OFED software stack that abstracts out the + programming model irrespective of the underlying hardware. +@@ -188,9 +188,9 @@ header portion and a data portion (but together are transmitted + as a single SEND message). + + Header: +- * Length (of the data portion, uint32, network byte order) +- * Type (what command to perform, uint32, network byte order) +- * Repeat (Number of commands in data portion, same type only) ++ * Length (of the data portion, uint32, network byte order) ++ * Type (what command to perform, uint32, network byte order) ++ * Repeat (Number of commands in data portion, same type only) + + The 'Repeat' field is here to support future multiple page registrations + in a single message without any need to change the protocol itself +@@ -202,17 +202,19 @@ The maximum number of repeats is hard-coded to 4096. This is a conservative + limit based on the maximum size of a SEND message along with emperical + observations on the maximum future benefit of simultaneous page registrations. + +-The 'type' field has 10 different command values: +- 1. Unused +- 2. Error (sent to the source during bad things) +- 3. Ready (control-channel is available) +- 4. QEMU File (for sending non-live device state) +- 5. RAM Blocks request (used right after connection setup) +- 6. RAM Blocks result (used right after connection setup) +- 7. Compress page (zap zero page and skip registration) +- 8. Register request (dynamic chunk registration) +- 9. Register result ('rkey' to be used by sender) +- 10. Register finished (registration for current iteration finished) ++The 'type' field has 12 different command values: ++ 1. Unused ++ 2. Error (sent to the source during bad things) ++ 3. Ready (control-channel is available) ++ 4. QEMU File (for sending non-live device state) ++ 5. RAM Blocks request (used right after connection setup) ++ 6. RAM Blocks result (used right after connection setup) ++ 7. Compress page (zap zero page and skip registration) ++ 8. Register request (dynamic chunk registration) ++ 9. Register result ('rkey' to be used by sender) ++ 10. Register finished (registration for current iteration finished) ++ 11. Unregister request (unpin previously registered memory) ++ 12. Unregister finished (confirmation that unpin completed) + + A single control message, as hinted above, can contain within the data + portion an array of many commands of the same type. If there is more than +@@ -243,7 +245,7 @@ qemu_rdma_exchange_send(header, data, optional response header & data): + from the receiver to tell us that the receiver + is *ready* for us to transmit some new bytes. + 2. Optionally: if we are expecting a response from the command +- (that we have no yet transmitted), let's post an RQ ++ (that we have not yet transmitted), let's post an RQ + work request to receive that data a few moments later. + 3. When the READY arrives, librdmacm will + unblock us and we immediately post a RQ work request +@@ -293,8 +295,10 @@ librdmacm provides the user with a 'private data' area to be exchanged + at connection-setup time before any infiniband traffic is generated. + + Header: +- * Version (protocol version validated before send/recv occurs), uint32, network byte order +- * Flags (bitwise OR of each capability), uint32, network byte order ++ * Version (protocol version validated before send/recv occurs), ++ uint32, network byte order ++ * Flags (bitwise OR of each capability), ++ uint32, network byte order + + There is no data portion of this header right now, so there is + no length field. The maximum size of the 'private data' section +@@ -313,7 +317,7 @@ If the version is invalid, we throw an error. + If the version is new, we only negotiate the capabilities that the + requested version is able to perform and ignore the rest. + +-Currently there is only *one* capability in Version #1: dynamic page registration ++Currently there is only one capability in Version #1: dynamic page registration + + Finally: Negotiation happens with the Flags field: If the primary-VM + sets a flag, but the destination does not support this capability, it +@@ -326,8 +330,8 @@ QEMUFileRDMA Interface: + + QEMUFileRDMA introduces a couple of new functions: + +-1. qemu_rdma_get_buffer() (QEMUFileOps rdma_read_ops) +-2. qemu_rdma_put_buffer() (QEMUFileOps rdma_write_ops) ++1. qemu_rdma_get_buffer() (QEMUFileOps rdma_read_ops) ++2. qemu_rdma_put_buffer() (QEMUFileOps rdma_write_ops) + + These two functions are very short and simply use the protocol + describe above to deliver bytes without changing the upper-level +@@ -413,3 +417,8 @@ TODO: + the use of KSM and ballooning while using RDMA. + 4. Also, some form of balloon-device usage tracking would also + help alleviate some issues. ++5. Move UNREGISTER requests to a separate thread. ++6. Use LRU to provide more fine-grained direction of UNREGISTER ++ requests for unpinning memory in an overcommitted environment. ++7. Expose UNREGISTER support to the user by way of workload-specific ++ hints about application behavior. +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-use-DRMA_WRID_READY.patch b/SOURCES/kvm-rdma-use-DRMA_WRID_READY.patch new file mode 100644 index 0000000..0157dfd --- /dev/null +++ b/SOURCES/kvm-rdma-use-DRMA_WRID_READY.patch @@ -0,0 +1,66 @@ +From 4eebbdd32a06ffc62947151257883db34294b598 Mon Sep 17 00:00:00 2001 +Message-Id: <4eebbdd32a06ffc62947151257883db34294b598.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:01 +0100 +Subject: [PATCH 25/46] rdma: use DRMA_WRID_READY + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-26-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55711 +O-Subject: [RHEL7.0 PATCH 25/42] rdma: use DRMA_WRID_READY +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 877726397f7e24d0c8a2b303a852769b5edd155c +Author: Isaku Yamahata +Date: Sat Aug 3 22:54:53 2013 -0400 + + rdma: use RDMA_WRID_READY + + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1375584894-9917-7-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index ea16f0e..6afe98c 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -2223,7 +2223,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) + + rdma_ack_cm_event(cm_event); + +- ret = qemu_rdma_post_recv_control(rdma, 0); ++ ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY); + if (ret) { + ERROR(errp, "posting second control recv!"); + goto err_rdma_source_connect; +@@ -2735,7 +2735,7 @@ static int qemu_rdma_accept(RDMAContext *rdma) + + rdma_ack_cm_event(cm_event); + +- ret = qemu_rdma_post_recv_control(rdma, 0); ++ ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY); + if (ret) { + fprintf(stderr, "rdma migration: error posting second control recv!\n"); + goto err_rdma_dest_wait; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-use-resp.len-after-validation-in-qemu_rdma_regi.patch b/SOURCES/kvm-rdma-use-resp.len-after-validation-in-qemu_rdma_regi.patch new file mode 100644 index 0000000..3161a6b --- /dev/null +++ b/SOURCES/kvm-rdma-use-resp.len-after-validation-in-qemu_rdma_regi.patch @@ -0,0 +1,75 @@ +From a2aad899158f118fd8ab16531385b9fc2b48ba14 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:03 +0100 +Subject: [PATCH 27/46] rdma: use resp.len after validation in + qemu_rdma_registration_stop + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-28-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55716 +O-Subject: [RHEL7.0 PATCH 27/42] rdma: use resp.len after validation in qemu_rdma_registration_stop +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 885e8f984ea846e79a39ddc4f066f4dd3d04b264 +Author: Isaku Yamahata +Date: Fri Aug 9 16:05:40 2013 -0400 + + rdma: use resp.len after validation in qemu_rdma_registration_stop + + resp.len is given from remote host. So should be validated before use. + Otherwise memcpy can access beyond the buffer. + + Cc: Michael R. Hines + Reviewed-by: Orit Wasserman + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1376078746-24948-2-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/migration-rdma.c b/migration-rdma.c +index ff0a823..1412cde 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -3045,10 +3045,6 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, + return ret; + } + +- qemu_rdma_move_header(rdma, reg_result_idx, &resp); +- memcpy(rdma->block, +- rdma->wr_data[reg_result_idx].control_curr, resp.len); +- + nb_remote_blocks = resp.len / sizeof(RDMARemoteBlock); + + /* +@@ -3070,6 +3066,9 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, + return -EINVAL; + } + ++ qemu_rdma_move_header(rdma, reg_result_idx, &resp); ++ memcpy(rdma->block, ++ rdma->wr_data[reg_result_idx].control_curr, resp.len); + for (i = 0; i < nb_remote_blocks; i++) { + network_to_remote_block(&rdma->block[i]); + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rdma-validate-RDMAControlHeader-len.patch b/SOURCES/kvm-rdma-validate-RDMAControlHeader-len.patch new file mode 100644 index 0000000..0e14bd7 --- /dev/null +++ b/SOURCES/kvm-rdma-validate-RDMAControlHeader-len.patch @@ -0,0 +1,70 @@ +From 036dba4d4b9a82507dafba8a365bf6e6bbf5b6e8 Mon Sep 17 00:00:00 2001 +Message-Id: <036dba4d4b9a82507dafba8a365bf6e6bbf5b6e8.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:04 +0100 +Subject: [PATCH 28/46] rdma: validate RDMAControlHeader::len + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-29-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55709 +O-Subject: [RHEL7.0 PATCH 28/42] rdma: validate RDMAControlHeader::len +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 6f1484edadba57f2800dc04ae3527ee4b6dac7ef +Author: Isaku Yamahata +Date: Fri Aug 9 16:05:41 2013 -0400 + + rdma: validate RDMAControlHeader::len + + RMDAControlHeader::len is provided from remote, so validate it. + + Reviewed-by: Orit Wasserman + Reviewed-by: Michael R. Hines + Signed-off-by: Isaku Yamahata + Signed-off-by: Michael R. Hines + Message-id: 1376078746-24948-3-git-send-email-mrhines@linux.vnet.ibm.com + Signed-off-by: Anthony Liguori +--- + migration-rdma.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +Signed-off-by: Michal Novotny +--- + migration-rdma.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/migration-rdma.c b/migration-rdma.c +index 1412cde..140d930 100644 +--- a/migration-rdma.c ++++ b/migration-rdma.c +@@ -1424,6 +1424,7 @@ static int qemu_rdma_post_send_control(RDMAContext *rdma, uint8_t *buf, + * The copy makes the RDMAControlHeader simpler to manipulate + * for the time being. + */ ++ assert(head->len <= RDMA_CONTROL_MAX_BUFFER - sizeof(*head)); + memcpy(wr->control, head, sizeof(RDMAControlHeader)); + control_to_network((void *) wr->control); + +@@ -1504,6 +1505,10 @@ static int qemu_rdma_exchange_get_response(RDMAContext *rdma, + control_desc[head->type], head->type, head->len); + return -EIO; + } ++ if (head->len > RDMA_CONTROL_MAX_BUFFER - sizeof(*head)) { ++ fprintf(stderr, "too long length: %d\n", head->len); ++ return -EINVAL; ++ } + + return 0; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-refactor-start-address-calculation.patch b/SOURCES/kvm-refactor-start-address-calculation.patch new file mode 100644 index 0000000..6b3b57a --- /dev/null +++ b/SOURCES/kvm-refactor-start-address-calculation.patch @@ -0,0 +1,56 @@ +From f792ee6d096426909f440421758e908460c18f77 Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:47 +0100 +Subject: [PATCH 36/40] kvm: refactor start address calculation + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-37-git-send-email-quintela@redhat.com> +Patchwork-id: 56691 +O-Subject: [RHEL7 qemu-kvm PATCH 36/40] kvm: refactor start address calculation +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit c9dd46fc0d64d9f314aa3c220d4aff9d01ab778e) +Signed-off-by: Juan Quintela +--- + kvm-all.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 8e2bd34..d3aa869 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -367,7 +367,8 @@ static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section, + { + unsigned int i, j; + unsigned long page_number, c; +- hwaddr addr, addr1; ++ hwaddr addr; ++ ram_addr_t start = section->offset_within_region + section->mr->ram_addr; + ram_addr_t ram_addr; + unsigned int len = ((section->size / getpagesize()) + HOST_LONG_BITS - 1) / HOST_LONG_BITS; + unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE; +@@ -383,9 +384,8 @@ static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section, + j = ffsl(c) - 1; + c &= ~(1ul << j); + page_number = (i * HOST_LONG_BITS + j) * hpratio; +- addr1 = page_number * TARGET_PAGE_SIZE; +- addr = section->offset_within_region + addr1; +- ram_addr = section->mr->ram_addr + addr; ++ addr = page_number * TARGET_PAGE_SIZE; ++ ram_addr = start + addr; + cpu_physical_memory_set_dirty_range(ram_addr, + TARGET_PAGE_SIZE * hpratio); + } while (c != 0); +-- +1.7.1 + diff --git a/SOURCES/kvm-refer-to-FWCfgState-explicitly.patch b/SOURCES/kvm-refer-to-FWCfgState-explicitly.patch new file mode 100644 index 0000000..c1f491c --- /dev/null +++ b/SOURCES/kvm-refer-to-FWCfgState-explicitly.patch @@ -0,0 +1,268 @@ +From 9698fead0e127336b0483ec2289affb308d7f505 Mon Sep 17 00:00:00 2001 +Message-Id: <9698fead0e127336b0483ec2289affb308d7f505.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:17:11 +0100 +Subject: [PATCH 09/56] refer to FWCfgState explicitly + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-10-git-send-email-mst@redhat.com> +Patchwork-id: 56314 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 09/57] refer to FWCfgState explicitly +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +From: Laszlo Ersek + +Currently some places use pointer-to-void even though they mean +pointer-to-FWCfgState. Clean them up. + +Signed-off-by: Laszlo Ersek +Reviewed-by: Anthony Liguori +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit a88b362c6ffbb7a802bf0ed5ef0e2447164dc989) +--- + hw/i386/multiboot.h | 4 +++- + include/hw/i386/pc.h | 19 ++++++++++--------- + include/hw/loader.h | 3 ++- + hw/acpi/piix4.c | 2 +- + hw/core/loader.c | 2 +- + hw/i386/multiboot.c | 2 +- + hw/i386/pc.c | 24 ++++++++++++------------ + hw/i386/pc_piix.c | 2 +- + hw/sparc/sun4m.c | 2 +- + hw/sparc64/sun4u.c | 2 +- + 10 files changed, 33 insertions(+), 29 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/acpi/piix4.c | 2 +- + hw/core/loader.c | 2 +- + hw/i386/multiboot.c | 2 +- + hw/i386/multiboot.h | 4 +++- + hw/i386/pc.c | 24 ++++++++++++------------ + hw/i386/pc_piix.c | 2 +- + hw/sparc/sun4m.c | 2 +- + hw/sparc64/sun4u.c | 2 +- + include/hw/i386/pc.h | 19 ++++++++++--------- + include/hw/loader.h | 3 ++- + 10 files changed, 33 insertions(+), 29 deletions(-) + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index 8af97cf..6882937 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -447,7 +447,7 @@ static int piix4_pm_initfn(PCIDevice *dev) + + i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, + qemu_irq sci_irq, qemu_irq smi_irq, +- int kvm_enabled, void *fw_cfg) ++ int kvm_enabled, FWCfgState *fw_cfg) + { + PCIDevice *dev; + PIIX4PMState *s; +diff --git a/hw/core/loader.c b/hw/core/loader.c +index 8514eaf..7d61537 100644 +--- a/hw/core/loader.c ++++ b/hw/core/loader.c +@@ -733,7 +733,7 @@ int rom_load_all(void) + return 0; + } + +-void rom_set_fw(void *f) ++void rom_set_fw(FWCfgState *f) + { + fw_cfg = f; + } +diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c +index d696507..09211e0 100644 +--- a/hw/i386/multiboot.c ++++ b/hw/i386/multiboot.c +@@ -124,7 +124,7 @@ static void mb_add_mod(MultibootState *s, + s->mb_mods_count++; + } + +-int load_multiboot(void *fw_cfg, ++int load_multiboot(FWCfgState *fw_cfg, + FILE *f, + const char *kernel_filename, + const char *initrd_filename, +diff --git a/hw/i386/multiboot.h b/hw/i386/multiboot.h +index 98fb1b7..60de309 100644 +--- a/hw/i386/multiboot.h ++++ b/hw/i386/multiboot.h +@@ -1,7 +1,9 @@ + #ifndef QEMU_MULTIBOOT_H + #define QEMU_MULTIBOOT_H + +-int load_multiboot(void *fw_cfg, ++#include "hw/nvram/fw_cfg.h" ++ ++int load_multiboot(FWCfgState *fw_cfg, + FILE *f, + const char *kernel_filename, + const char *initrd_filename, +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 333e83f..2948781 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -598,9 +598,9 @@ static unsigned int pc_apic_id_limit(unsigned int max_cpus) + return x86_cpu_apic_id_from_index(max_cpus - 1) + 1; + } + +-static void *bochs_bios_init(void) ++static FWCfgState *bochs_bios_init(void) + { +- void *fw_cfg; ++ FWCfgState *fw_cfg; + uint8_t *smbios_table; + size_t smbios_len; + uint64_t *numa_fw_cfg; +@@ -677,7 +677,7 @@ static long get_file_size(FILE *f) + return size; + } + +-static void load_linux(void *fw_cfg, ++static void load_linux(FWCfgState *fw_cfg, + const char *kernel_filename, + const char *initrd_filename, + const char *kernel_cmdline, +@@ -1019,19 +1019,19 @@ void pc_acpi_init(const char *default_dsdt) + } + } + +-void *pc_memory_init(MemoryRegion *system_memory, +- const char *kernel_filename, +- const char *kernel_cmdline, +- const char *initrd_filename, +- ram_addr_t below_4g_mem_size, +- ram_addr_t above_4g_mem_size, +- MemoryRegion *rom_memory, +- MemoryRegion **ram_memory) ++FWCfgState *pc_memory_init(MemoryRegion *system_memory, ++ const char *kernel_filename, ++ const char *kernel_cmdline, ++ const char *initrd_filename, ++ ram_addr_t below_4g_mem_size, ++ ram_addr_t above_4g_mem_size, ++ MemoryRegion *rom_memory, ++ MemoryRegion **ram_memory) + { + int linux_boot, i; + MemoryRegion *ram, *option_rom_mr; + MemoryRegion *ram_below_4g, *ram_above_4g; +- void *fw_cfg; ++ FWCfgState *fw_cfg; + + linux_boot = (kernel_filename != NULL); + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 8c3f2d6..b6f9288 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -85,7 +85,7 @@ static void pc_init1(QEMUMachineInitArgs *args, + MemoryRegion *pci_memory; + MemoryRegion *rom_memory; + DeviceState *icc_bridge; +- void *fw_cfg = NULL; ++ FWCfgState *fw_cfg = NULL; + + icc_bridge = qdev_create(NULL, TYPE_ICC_BRIDGE); + object_property_add_child(qdev_get_machine(), "icc-bridge", +diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c +index 635115f..7c5b8e7 100644 +--- a/hw/sparc/sun4m.c ++++ b/hw/sparc/sun4m.c +@@ -873,7 +873,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, + qemu_irq *cpu_halt; + unsigned long kernel_size; + DriveInfo *fd[MAX_FD]; +- void *fw_cfg; ++ FWCfgState *fw_cfg; + unsigned int num_vsimms; + + /* init CPUs */ +diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c +index 5c2bbd4..5ce5ed6 100644 +--- a/hw/sparc64/sun4u.c ++++ b/hw/sparc64/sun4u.c +@@ -818,7 +818,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem, + qemu_irq *ivec_irqs, *pbm_irqs; + DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; + DriveInfo *fd[MAX_FD]; +- void *fw_cfg; ++ FWCfgState *fw_cfg; + + /* init CPUs */ + cpu = cpu_devinit(cpu_model, hwdef); +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 72f6882..4175c1b 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -9,6 +9,7 @@ + #include "net/net.h" + #include "exec/memory.h" + #include "hw/i386/ioapic.h" ++#include "hw/nvram/fw_cfg.h" + + /* PC-style peripherals (also used by other machines). */ + +@@ -84,14 +85,14 @@ void pc_acpi_smi_interrupt(void *opaque, int irq, int level); + void pc_cpus_init(const char *cpu_model, DeviceState *icc_bridge); + void pc_hot_add_cpu(const int64_t id, Error **errp); + void pc_acpi_init(const char *default_dsdt); +-void *pc_memory_init(MemoryRegion *system_memory, +- const char *kernel_filename, +- const char *kernel_cmdline, +- const char *initrd_filename, +- ram_addr_t below_4g_mem_size, +- ram_addr_t above_4g_mem_size, +- MemoryRegion *rom_memory, +- MemoryRegion **ram_memory); ++FWCfgState *pc_memory_init(MemoryRegion *system_memory, ++ const char *kernel_filename, ++ const char *kernel_cmdline, ++ const char *initrd_filename, ++ ram_addr_t below_4g_mem_size, ++ ram_addr_t above_4g_mem_size, ++ MemoryRegion *rom_memory, ++ MemoryRegion **ram_memory); + qemu_irq *pc_allocate_cpu_irq(void); + DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus); + void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi, +@@ -115,7 +116,7 @@ void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name); + + i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, + qemu_irq sci_irq, qemu_irq smi_irq, +- int kvm_enabled, void *fw_cfg); ++ int kvm_enabled, FWCfgState *fw_cfg); + void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr); + + /* hpet.c */ +diff --git a/include/hw/loader.h b/include/hw/loader.h +index 0958f06..15d4cc9 100644 +--- a/include/hw/loader.h ++++ b/include/hw/loader.h +@@ -1,6 +1,7 @@ + #ifndef LOADER_H + #define LOADER_H + #include "qapi/qmp/qdict.h" ++#include "hw/nvram/fw_cfg.h" + + /* loader.c */ + int get_image_size(const char *filename); +@@ -30,7 +31,7 @@ int rom_add_blob(const char *name, const void *blob, size_t len, + int rom_add_elf_program(const char *name, void *data, size_t datasize, + size_t romsize, hwaddr addr); + int rom_load_all(void); +-void rom_set_fw(void *f); ++void rom_set_fw(FWCfgState *f); + int rom_copy(uint8_t *dest, hwaddr addr, size_t size); + void *rom_ptr(hwaddr addr); + void do_info_roms(Monitor *mon, const QDict *qdict); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-rename-parse_enum_option-to-qapi_enum_parse-and-make.patch b/SOURCES/kvm-rename-parse_enum_option-to-qapi_enum_parse-and-make.patch new file mode 100644 index 0000000..4a42a47 --- /dev/null +++ b/SOURCES/kvm-rename-parse_enum_option-to-qapi_enum_parse-and-make.patch @@ -0,0 +1,119 @@ +From af8241e3dc9a94d82423cb106114ae77a0333f32 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 10 Nov 2014 09:14:04 +0100 +Subject: [PATCH 27/41] rename parse_enum_option to qapi_enum_parse and make it + public + +Message-id: <1415610847-15383-2-git-send-email-mreitz@redhat.com> +Patchwork-id: 62237 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 1/4] rename parse_enum_option to qapi_enum_parse and make it public +Bugzilla: 1087724 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Peter Lieven + +relaxing the license to LGPLv2+ is intentional. + +Suggested-by: Markus Armbruster +Signed-off-by: Hu Tao +Signed-off-by: Peter Lieven +Reviewed-by: Eric Blake +Reviewed-by: Benoit Canet +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 9e7dac7c6c6003ad9d4aca0125f0278233fcf761) +Signed-off-by: Miroslav Rezanina + +Conflicts: + blockdev.c + qapi/Makefile.objs + +Since detect-zeroes does not exist downstream, there was no +parse_enum_option() in blockdev.c and therefore no changes to that file +are necessary. + +Signed-off-by: Max Reitz +--- + include/qapi/util.h | 17 +++++++++++++++++ + qapi/Makefile.objs | 1 + + qapi/qapi-util.c | 34 ++++++++++++++++++++++++++++++++++ + 3 files changed, 52 insertions(+) + create mode 100644 include/qapi/util.h + create mode 100644 qapi/qapi-util.c + +diff --git a/include/qapi/util.h b/include/qapi/util.h +new file mode 100644 +index 0000000..de9238b +--- /dev/null ++++ b/include/qapi/util.h +@@ -0,0 +1,17 @@ ++/* ++ * QAPI util functions ++ * ++ * Copyright Fujitsu, Inc. 2014 ++ * ++ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. ++ * See the COPYING.LIB file in the top-level directory. ++ * ++ */ ++ ++#ifndef QAPI_UTIL_H ++#define QAPI_UTIL_H ++ ++int qapi_enum_parse(const char *lookup[], const char *buf, ++ int max, int def, Error **errp); ++ ++#endif +diff --git a/qapi/Makefile.objs b/qapi/Makefile.objs +index 1f9c973..d896ef0 100644 +--- a/qapi/Makefile.objs ++++ b/qapi/Makefile.objs +@@ -3,3 +3,4 @@ util-obj-y += qmp-output-visitor.o qmp-registry.o qmp-dispatch.o + util-obj-y += string-input-visitor.o string-output-visitor.o + + util-obj-y += opts-visitor.o ++util-obj-y += qapi-util.o +diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c +new file mode 100644 +index 0000000..1d8fb96 +--- /dev/null ++++ b/qapi/qapi-util.c +@@ -0,0 +1,34 @@ ++/* ++ * QAPI util functions ++ * ++ * Authors: ++ * Hu Tao ++ * Peter Lieven ++ * ++ * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. ++ * See the COPYING.LIB file in the top-level directory. ++ * ++ */ ++ ++#include "qemu-common.h" ++#include "qapi/error.h" ++#include "qapi/util.h" ++ ++int qapi_enum_parse(const char *lookup[], const char *buf, ++ int max, int def, Error **errp) ++{ ++ int i; ++ ++ if (!buf) { ++ return def; ++ } ++ ++ for (i = 0; i < max; i++) { ++ if (!strcmp(buf, lookup[i])) { ++ return i; ++ } ++ } ++ ++ error_setg(errp, "invalid parameter value: %s", buf); ++ return def; ++} +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rhel-Drop-cfi.pflash01-and-isa-ide-device.patch b/SOURCES/kvm-rhel-Drop-cfi.pflash01-and-isa-ide-device.patch new file mode 100644 index 0000000..c24188e --- /dev/null +++ b/SOURCES/kvm-rhel-Drop-cfi.pflash01-and-isa-ide-device.patch @@ -0,0 +1,61 @@ +From f6852e27575e095269a47f434d318b5fc8822e0a Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 14:10:18 +0100 +Subject: [PATCH 48/81] rhel: Drop "cfi.pflash01" and "isa-ide" device + +RH-Author: Markus Armbruster +Message-id: <1383401418-4444-3-git-send-email-armbru@redhat.com> +Patchwork-id: 55269 +O-Subject: [PATCH 7.0 qemu-kvm 2/2] rhel: Drop "cfi.pflash01" and "isa-ide" device +Bugzilla: 1001076 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +From: Markus Armbruster + +We can drop a device from the build only when it isn't referenced from +code we build. References come in two forms: extern symbols, and qdev +driver names. + +Unresolved extern symbols pose no real danger, because they fail +safely at link time. Note for the curious: the optimizer gets rid of +the reference to isa_ide_init() in hw/i386/pc_piix.c. + +Unresolved driver names get detected only at runtime, so we better be +extra careful. There is just one occurence of either driver name +outside the code dropped by this patch: "isa-ide" in hw/isa/pc87312.c. +Compiled only when CONFIG_PC87312 is enabled. It isn't in our build. + +"cfi.pflash01" is already no-user. Drop it anyway, because it's easy +and safe. + +Signed-off-by: Markus Armbruster +--- + default-configs/x86_64-softmmu.mak | 2 -- + 1 file changed, 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/x86_64-softmmu.mak | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index 05cc2a3..70d8bd9 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -17,11 +17,9 @@ CONFIG_FDC=y + CONFIG_ACPI=y + CONFIG_APM=y + CONFIG_I8257=y +-CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y + CONFIG_PIIX_PCI=y + CONFIG_I8259=y +-CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) + CONFIG_PCI_HOTPLUG=y + CONFIG_MC146818RTC=y +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Drop-isa-vga-device.patch b/SOURCES/kvm-rhel-Drop-isa-vga-device.patch new file mode 100644 index 0000000..a3e1d94 --- /dev/null +++ b/SOURCES/kvm-rhel-Drop-isa-vga-device.patch @@ -0,0 +1,63 @@ +From 2badec2441d95d693d7125d87fa8867f24f1ea9d Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 15:05:06 +0100 +Subject: [PATCH 49/81] rhel: Drop "isa-vga" device + +RH-Author: Markus Armbruster +Message-id: <1383404707-6015-2-git-send-email-armbru@redhat.com> +Patchwork-id: 55272 +O-Subject: [PATCH 7.0 qemu-kvm 1/2] rhel: Drop "isa-vga" device +Bugzilla: 1001088 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +From: Markus Armbruster + +We can drop a device from the build only when it isn't referenced from +code we build. References come in two forms: extern symbols, and qdev +driver names. + +Unresolved extern symbols pose no real danger, because they fail +safely at link time. The dropped code doesn't define any extern +symbols anyway. + +Unresolved driver names get detected only at runtime, so we better be +extra careful. Occurences of the driver name outside the code dropped +by this patch: + +* default_list[] in vl.c: Used only to disable default VGA with + -device isa-vga. Safe. + +* vga_available() in vl.c: Tests whether the device is compiled in. + No change, because device "VGA" is still compiled in, therfore safe. + +* isa_vga_init() in hw/isa/isa-bus.c: Its only potential caller + pc_vga_init() never calls in RHEL, because it never gets a null + pci_bus argument. Safe. + +Signed-off-by: Markus Armbruster +--- + default-configs/x86_64-softmmu.mak | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/x86_64-softmmu.mak | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/default-configs/x86_64-softmmu.mak b/default-configs/x86_64-softmmu.mak +index 70d8bd9..e7c48ec 100644 +--- a/default-configs/x86_64-softmmu.mak ++++ b/default-configs/x86_64-softmmu.mak +@@ -6,7 +6,6 @@ include usb.mak + CONFIG_VGA=y + CONFIG_QXL=$(CONFIG_SPICE) + CONFIG_VGA_PCI=y +-CONFIG_VGA_ISA=y + CONFIG_VGA_CIRRUS=y + CONFIG_VMMOUSE=y + CONFIG_SERIAL=y +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Drop-ivshmem-device.patch b/SOURCES/kvm-rhel-Drop-ivshmem-device.patch new file mode 100644 index 0000000..8a41e66 --- /dev/null +++ b/SOURCES/kvm-rhel-Drop-ivshmem-device.patch @@ -0,0 +1,60 @@ +From 987638b1d627c7f7234210c1dff1f7e795f3aae3 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 16:09:08 +0100 +Subject: [PATCH 13/29] rhel: Drop "ivshmem" device + +RH-Author: Markus Armbruster +Message-id: <1383408548-7760-2-git-send-email-armbru@redhat.com> +Patchwork-id: 55277 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] rhel: Drop "ivshmem" device +Bugzilla: 787463 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +We can drop a device from the build only when it isn't referenced from +code we build. References come in two forms: extern symbols, and qdev +driver names. + +Unresolved extern symbols pose no real danger, because they fail +safely at link time. But the dropped code doesn't define any extern +symbols anyway. + +Unresolved driver names get detected only at runtime, so we better be +extra careful. The only occurences of the driver name outside the +code dropped by this patch is in machine type compat properties +(safe), and those aren't even compiled for RHEL (extra safe). + +Since there's no CONFIG_IVSHMEM, we need to hack the Makefile +directly. Creating CONFIG_IVSHMEM upstream would be nice, but we're +out of time. + +Signed-off-by: Markus Armbruster +--- + hw/misc/Makefile.objs | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/Makefile.objs | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs +index 2578e29..cd3123b 100644 +--- a/hw/misc/Makefile.objs ++++ b/hw/misc/Makefile.objs +@@ -17,7 +17,8 @@ common-obj-$(CONFIG_PUV3) += puv3_pm.o + common-obj-$(CONFIG_MACIO) += macio/ + + ifeq ($(CONFIG_PCI), y) +-obj-$(CONFIG_KVM) += ivshmem.o ++# Disabled for Red Hat Enterprise Linux: ++# obj-$(CONFIG_KVM) += ivshmem.o + obj-$(CONFIG_LINUX) += vfio.o + endif + +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Drop-machine-type-pc-q35-rhel7.0.0.patch b/SOURCES/kvm-rhel-Drop-machine-type-pc-q35-rhel7.0.0.patch new file mode 100644 index 0000000..24e2ebc --- /dev/null +++ b/SOURCES/kvm-rhel-Drop-machine-type-pc-q35-rhel7.0.0.patch @@ -0,0 +1,114 @@ +From 983dc94f2937e8f19732f205711348b0a170e604 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 31 Oct 2014 14:11:31 +0100 +Subject: [PATCH 3/9] rhel: Drop machine type pc-q35-rhel7.0.0 + +Message-id: <1414764691-31603-2-git-send-email-armbru@redhat.com> +Patchwork-id: 62013 +O-Subject: [PATCH RHEL-7.1 qemu-kvm 1/1] rhel: Drop machine type pc-q35-rhel7.0.0 +Bugzilla: 1111107 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum + +Q35 is tech preview in RHEL 7.0. From 7.1 on, we want to support it, +but only in qemu-kvm-rhev. We don't intend to support it in qemu-kvm. +So as to not mislead customers, drop the machine type from qemu-kvm, +by removing pc_q35.c from the build. Remove RHEL-specific code from +pc_q35.c just to avoid confusion. + +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + hw/i386/Makefile.objs | 2 +- + hw/i386/pc_q35.c | 58 --------------------------------------------------- + 2 files changed, 1 insertion(+), 59 deletions(-) + +diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs +index 09ac433..f2bcdcb 100644 +--- a/hw/i386/Makefile.objs ++++ b/hw/i386/Makefile.objs +@@ -1,6 +1,6 @@ + obj-$(CONFIG_KVM) += kvm/ + obj-y += multiboot.o smbios.o +-obj-y += pc.o pc_piix.o pc_q35.o ++obj-y += pc.o pc_piix.o + obj-y += pc_sysfw.o + obj-$(CONFIG_XEN) += xen_domainbuild.o xen_machine_pv.o + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 4534539..850a25a 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -218,8 +218,6 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + } + } + +-#if 0 /* Disabled for Red Hat Enterprise Linux */ +- + static void pc_q35_init_1_5(QEMUMachineInitArgs *args) + { + has_pci_info = false; +@@ -266,59 +264,3 @@ static void pc_q35_machine_init(void) + } + + machine_init(pc_q35_machine_init); +- +-#endif /* Disabled for Red Hat Enterprise Linux */ +- +-/* Red Hat Enterprise Linux machine types */ +- +-static void pc_q35_compat_rhel700(QEMUMachineInitArgs *args) +-{ +- x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- /* SandyBridge and Haswell already have x2apic enabled */ +- x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Opteron_G3", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Opteron_G4", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- x86_cpu_compat_set_features("Opteron_G5", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +- +- /* KVM can't expose RDTSCP on AMD CPUs, so there's no point in enabling it +- * on AMD CPU models. +- */ +- x86_cpu_compat_set_features("phenom", FEAT_8000_0001_EDX, 0, +- CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G2", FEAT_8000_0001_EDX, 0, +- CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G3", FEAT_8000_0001_EDX, 0, +- CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G4", FEAT_8000_0001_EDX, 0, +- CPUID_EXT2_RDTSCP); +- x86_cpu_compat_set_features("Opteron_G5", FEAT_8000_0001_EDX, 0, +- CPUID_EXT2_RDTSCP); +-} +- +-static void pc_q35_init_rhel700(QEMUMachineInitArgs *args) +-{ +- pc_q35_compat_rhel700(args); +- pc_q35_init(args); +-} +- +-static QEMUMachine pc_q35_machine_rhel700 = { +- .name = "pc-q35-rhel7.0.0", +- .alias = "q35", +- .desc = "RHEL-7.0.0 PC (Q35 + ICH9, 2009)", +- .init = pc_q35_init_rhel700, +- .hot_add_cpu = pc_hot_add_cpu, +- .max_cpus = RHEL_MAX_CPUS, +- .default_machine_opts = "firmware=bios-256k.bin", +- DEFAULT_MACHINE_OPTIONS, +-}; +- +-static void rhel_pc_q35_machine_init(void) +-{ +- qemu_register_machine(&pc_q35_machine_rhel700); +-} +- +-machine_init(rhel_pc_q35_machine_init); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rhel-Make-ccid-card-emulated-device-unavailable.patch b/SOURCES/kvm-rhel-Make-ccid-card-emulated-device-unavailable.patch new file mode 100644 index 0000000..eb688e2 --- /dev/null +++ b/SOURCES/kvm-rhel-Make-ccid-card-emulated-device-unavailable.patch @@ -0,0 +1,48 @@ +From 92d723eb5a17c33f9b446f59ebc453c05614a6ac Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 15:24:00 +0100 +Subject: [PATCH 51/81] rhel: Make "ccid-card-emulated" device unavailable + +RH-Author: Markus Armbruster +Message-id: <1383405840-6221-2-git-send-email-armbru@redhat.com> +Patchwork-id: 55273 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] rhel: Make "ccid-card-emulated" device unavailable +Bugzilla: 1001123 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +From: Markus Armbruster + +We can't just --disable-smartcard-nss, because that also disables +libcacard. Instead, make it unavailable with -device / device_add. +Suffices, because there's no other way to get it: the device model +defines no external symbols, and the driver name doesn't occur in code +outside the device model. + +Signed-off-by: Markus Armbruster +--- + hw/usb/ccid-card-emulated.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/ccid-card-emulated.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c +index aa913df..037a9ec 100644 +--- a/hw/usb/ccid-card-emulated.c ++++ b/hw/usb/ccid-card-emulated.c +@@ -595,6 +595,8 @@ static void emulated_class_initfn(ObjectClass *klass, void *data) + set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + dc->desc = "emulated smartcard"; + dc->props = emulated_card_properties; ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo emulated_card_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Make-isa-cirrus-vga-device-unavailable.patch b/SOURCES/kvm-rhel-Make-isa-cirrus-vga-device-unavailable.patch new file mode 100644 index 0000000..8d5e608 --- /dev/null +++ b/SOURCES/kvm-rhel-Make-isa-cirrus-vga-device-unavailable.patch @@ -0,0 +1,51 @@ +From 76ec45c8db5e4654a02c296ce7bc610c5be60bdb Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 15:05:07 +0100 +Subject: [PATCH 50/81] rhel: Make "isa-cirrus-vga" device unavailable + +RH-Author: Markus Armbruster +Message-id: <1383404707-6015-3-git-send-email-armbru@redhat.com> +Patchwork-id: 55270 +O-Subject: [PATCH 7.0 qemu-kvm 2/2] rhel: Make "isa-cirrus-vga" device unavailable +Bugzilla: 1001088 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +From: Markus Armbruster + +We can't drop it, because the ISA device is entangled with the PCI +device, which we want to keep. Disentangling it upstream would be +nice, but we're out of time. + +Instead, make it unavailable with -device / device_add. Suffices, +because the only other way to get it is via pc_vga_init() calling +isa_vga_init(), which it never does in RHEL, because it never gets a +null pci_bus argument. + +Signed-off-by: Markus Armbruster +--- + hw/display/cirrus_vga.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/display/cirrus_vga.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index a7634ba..bfaa0b0 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -2937,6 +2937,8 @@ static void isa_cirrus_vga_class_init(ObjectClass *klass, void *data) + k->init = vga_initfn; + dc->props = isa_cirrus_vga_properties; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo isa_cirrus_vga_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Make-pci-serial-2x-and-pci-serial-4x-device-una.patch b/SOURCES/kvm-rhel-Make-pci-serial-2x-and-pci-serial-4x-device-una.patch new file mode 100644 index 0000000..b3f2409 --- /dev/null +++ b/SOURCES/kvm-rhel-Make-pci-serial-2x-and-pci-serial-4x-device-una.patch @@ -0,0 +1,57 @@ +From 300a7cf7103f2bad1767dbb9f4a805bb2199fb7f Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 15:39:00 +0100 +Subject: [PATCH 62/81] rhel: Make "pci-serial-2x" and "pci-serial-4x" device unavailable + +RH-Author: Markus Armbruster +Message-id: <1383406740-6461-2-git-send-email-armbru@redhat.com> +Patchwork-id: 55276 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] rhel: Make "pci-serial-2x" and "pci-serial-4x" device unavailable +Bugzilla: 1001180 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das + +From: Markus Armbruster + +We can't just drop CONFIG_SERIAL_PCI, because we still want +"pci-serial". Instead, make them unavailable with -device / +device_add. Suffices, because there's no other way to get it: the +device model defines no external symbols, and the driver name doesn't +occur in code outside the device model. + +Signed-off-by: Markus Armbruster +--- + hw/char/serial-pci.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial-pci.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c +index 77fec01..bfe686b 100644 +--- a/hw/char/serial-pci.c ++++ b/hw/char/serial-pci.c +@@ -207,6 +207,8 @@ static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data) + dc->vmsd = &vmstate_pci_multi_serial; + dc->props = multi_2x_serial_pci_properties; + set_bit(DEVICE_CATEGORY_INPUT, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static void multi_4x_serial_pci_class_initfn(ObjectClass *klass, void *data) +@@ -222,6 +224,8 @@ static void multi_4x_serial_pci_class_initfn(ObjectClass *klass, void *data) + dc->vmsd = &vmstate_pci_multi_serial; + dc->props = multi_4x_serial_pci_properties; + set_bit(DEVICE_CATEGORY_INPUT, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo serial_pci_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Revert-downstream-changes-to-unused-default-con.patch b/SOURCES/kvm-rhel-Revert-downstream-changes-to-unused-default-con.patch new file mode 100644 index 0000000..8fac221 --- /dev/null +++ b/SOURCES/kvm-rhel-Revert-downstream-changes-to-unused-default-con.patch @@ -0,0 +1,254 @@ +From a73d17d9798440ecd0c6bc45a016093fddfea944 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 14:10:17 +0100 +Subject: [PATCH 47/81] rhel: Revert downstream changes to unused default-configs/*.mak + +RH-Author: Markus Armbruster +Message-id: <1383401418-4444-2-git-send-email-armbru@redhat.com> +Patchwork-id: 55268 +O-Subject: [PATCH 7.0 qemu-kvm 1/2] rhel: Revert downstream changes to unused default-configs/*.mak +Bugzilla: 1001076 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +From: Markus Armbruster + +Pointless conflict magnets. "Unused" means they don't affect the RHEL +build in any way. + +Signed-off-by: Markus Armbruster +--- + default-configs/alpha-softmmu.mak | 1 + + default-configs/i386-softmmu.mak | 5 +++++ + default-configs/mips-softmmu.mak | 3 +++ + default-configs/mips64-softmmu.mak | 3 +++ + default-configs/mips64el-softmmu.mak | 3 +++ + default-configs/mipsel-softmmu.mak | 3 +++ + default-configs/ppc-softmmu.mak | 2 ++ + default-configs/ppc64-softmmu.mak | 2 ++ + default-configs/ppcemb-softmmu.mak | 1 + + default-configs/sparc-softmmu.mak | 1 + + default-configs/sparc64-softmmu.mak | 1 + + 11 files changed, 25 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + default-configs/alpha-softmmu.mak | 1 + + default-configs/i386-softmmu.mak | 5 +++++ + default-configs/mips-softmmu.mak | 3 +++ + default-configs/mips64-softmmu.mak | 3 +++ + default-configs/mips64el-softmmu.mak | 3 +++ + default-configs/mipsel-softmmu.mak | 3 +++ + default-configs/ppc-softmmu.mak | 2 ++ + default-configs/ppc64-softmmu.mak | 2 ++ + default-configs/ppcemb-softmmu.mak | 1 + + default-configs/sparc-softmmu.mak | 1 + + default-configs/sparc64-softmmu.mak | 1 + + 11 files changed, 25 insertions(+), 0 deletions(-) + +diff --git a/default-configs/alpha-softmmu.mak b/default-configs/alpha-softmmu.mak +index f2792ad..18e5337 100644 +--- a/default-configs/alpha-softmmu.mak ++++ b/default-configs/alpha-softmmu.mak +@@ -10,6 +10,7 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_CIRRUS=y + CONFIG_IDE_CORE=y + CONFIG_IDE_QDEV=y ++CONFIG_VMWARE_VGA=y + CONFIG_IDE_CMD646=y + CONFIG_I8259=y + CONFIG_MC146818RTC=y +diff --git a/default-configs/i386-softmmu.mak b/default-configs/i386-softmmu.mak +index 54df7bd..03deca2 100644 +--- a/default-configs/i386-softmmu.mak ++++ b/default-configs/i386-softmmu.mak +@@ -8,8 +8,10 @@ CONFIG_QXL=$(CONFIG_SPICE) + CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_CIRRUS=y ++CONFIG_VMWARE_VGA=y + CONFIG_VMMOUSE=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +@@ -19,7 +21,10 @@ CONFIG_APM=y + CONFIG_I8257=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y ++CONFIG_NE2000_ISA=y + CONFIG_PIIX_PCI=y ++CONFIG_HPET=y ++CONFIG_APPLESMC=y + CONFIG_I8259=y + CONFIG_PFLASH_CFI01=y + CONFIG_TPM_TIS=$(CONFIG_TPM) +diff --git a/default-configs/mips-softmmu.mak b/default-configs/mips-softmmu.mak +index b4eef8c..b443702 100644 +--- a/default-configs/mips-softmmu.mak ++++ b/default-configs/mips-softmmu.mak +@@ -10,7 +10,9 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y ++CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +@@ -21,6 +23,7 @@ CONFIG_I8257=y + CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y ++CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/mips64-softmmu.mak b/default-configs/mips64-softmmu.mak +index c7a9232..d638957 100644 +--- a/default-configs/mips64-softmmu.mak ++++ b/default-configs/mips64-softmmu.mak +@@ -10,7 +10,9 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y ++CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +@@ -21,6 +23,7 @@ CONFIG_I8257=y + CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y ++CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/mips64el-softmmu.mak b/default-configs/mips64el-softmmu.mak +index 79bdfdb..c9be3f4 100644 +--- a/default-configs/mips64el-softmmu.mak ++++ b/default-configs/mips64el-softmmu.mak +@@ -10,7 +10,9 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y ++CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +@@ -22,6 +24,7 @@ CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y + CONFIG_IDE_VIA=y ++CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/mipsel-softmmu.mak b/default-configs/mipsel-softmmu.mak +index beb6819..4f4a449 100644 +--- a/default-configs/mipsel-softmmu.mak ++++ b/default-configs/mipsel-softmmu.mak +@@ -10,7 +10,9 @@ CONFIG_VGA_PCI=y + CONFIG_VGA_ISA=y + CONFIG_VGA_ISA_MM=y + CONFIG_VGA_CIRRUS=y ++CONFIG_VMWARE_VGA=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCSPK=y + CONFIG_PCKBD=y +@@ -21,6 +23,7 @@ CONFIG_I8257=y + CONFIG_PIIX4=y + CONFIG_IDE_ISA=y + CONFIG_IDE_PIIX=y ++CONFIG_NE2000_ISA=y + CONFIG_RC4030=y + CONFIG_DP8393X=y + CONFIG_DS1225Y=y +diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak +index 7f6ea0f..cc3587f 100644 +--- a/default-configs/ppc-softmmu.mak ++++ b/default-configs/ppc-softmmu.mak +@@ -10,6 +10,7 @@ CONFIG_M48T59=y + CONFIG_VGA=y + CONFIG_VGA_PCI=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCKBD=y + CONFIG_FDC=y +@@ -33,6 +34,7 @@ CONFIG_PPCE500_PCI=y + CONFIG_IDE_ISA=y + CONFIG_IDE_CMD646=y + CONFIG_IDE_MACIO=y ++CONFIG_NE2000_ISA=y + CONFIG_PFLASH_CFI01=y + CONFIG_PFLASH_CFI02=y + CONFIG_PTIMER=y +diff --git a/default-configs/ppc64-softmmu.mak b/default-configs/ppc64-softmmu.mak +index 29a8be6..884ea8a 100644 +--- a/default-configs/ppc64-softmmu.mak ++++ b/default-configs/ppc64-softmmu.mak +@@ -10,6 +10,7 @@ CONFIG_M48T59=y + CONFIG_VGA=y + CONFIG_VGA_PCI=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_I8254=y + CONFIG_PCKBD=y + CONFIG_FDC=y +@@ -33,6 +34,7 @@ CONFIG_PPCE500_PCI=y + CONFIG_IDE_ISA=y + CONFIG_IDE_CMD646=y + CONFIG_IDE_MACIO=y ++CONFIG_NE2000_ISA=y + CONFIG_PFLASH_CFI01=y + CONFIG_PFLASH_CFI02=y + CONFIG_PTIMER=y +diff --git a/default-configs/ppcemb-softmmu.mak b/default-configs/ppcemb-softmmu.mak +index a8ab6e3..be93e03 100644 +--- a/default-configs/ppcemb-softmmu.mak ++++ b/default-configs/ppcemb-softmmu.mak +@@ -29,6 +29,7 @@ CONFIG_PPCE500_PCI=y + CONFIG_IDE_ISA=y + CONFIG_IDE_CMD646=y + CONFIG_IDE_MACIO=y ++CONFIG_NE2000_ISA=y + CONFIG_PFLASH_CFI01=y + CONFIG_PFLASH_CFI02=y + CONFIG_PTIMER=y +diff --git a/default-configs/sparc-softmmu.mak b/default-configs/sparc-softmmu.mak +index ddba71d..8fc93dd 100644 +--- a/default-configs/sparc-softmmu.mak ++++ b/default-configs/sparc-softmmu.mak +@@ -7,6 +7,7 @@ CONFIG_M48T59=y + CONFIG_PTIMER=y + CONFIG_FDC=y + CONFIG_EMPTY_SLOT=y ++CONFIG_PCNET_COMMON=y + CONFIG_LANCE=y + CONFIG_TCX=y + CONFIG_SLAVIO=y +diff --git a/default-configs/sparc64-softmmu.mak b/default-configs/sparc64-softmmu.mak +index 2998f34..9b08ee8 100644 +--- a/default-configs/sparc64-softmmu.mak ++++ b/default-configs/sparc64-softmmu.mak +@@ -8,6 +8,7 @@ CONFIG_PTIMER=y + CONFIG_VGA=y + CONFIG_VGA_PCI=y + CONFIG_SERIAL=y ++CONFIG_PARALLEL=y + CONFIG_PCKBD=y + CONFIG_FDC=y + CONFIG_IDE_ISA=y +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-Revert-unwanted-cannot_instantiate_with_device_.patch b/SOURCES/kvm-rhel-Revert-unwanted-cannot_instantiate_with_device_.patch new file mode 100644 index 0000000..7744eea --- /dev/null +++ b/SOURCES/kvm-rhel-Revert-unwanted-cannot_instantiate_with_device_.patch @@ -0,0 +1,117 @@ +From 782eba126f0af8ccbb3625fe1ac1d92bf923a10d Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:22 +0100 +Subject: [PATCH 46/81] rhel: Revert unwanted cannot_instantiate_with_device_add_yet changes + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-18-git-send-email-kwolf@redhat.com> +Patchwork-id: 55543 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 17/17] rhel: Revert unwanted cannot_instantiate_with_device_add_yet changes +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +The no-user series just backported from upstream makes the following +onboard devices also available with -device / device_add: + +* PCI [PATCH 07-08]: piix3-ide, piix3-ide-xen, piix4-ide, via-ide +* ISA [PATCH 09]: i8042, isa-fdc + +Not wanted for RHEL, so revert that part. + +Note: via-ide just for consistency; we don't actually compile it. + +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +--- + hw/block/fdc.c | 2 ++ + hw/ide/piix.c | 6 ++++++ + hw/ide/via.c | 2 ++ + hw/input/pckbd.c | 2 ++ + 4 files changed, 12 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/fdc.c | 2 ++ + hw/ide/piix.c | 6 ++++++ + hw/ide/via.c | 2 ++ + hw/input/pckbd.c | 2 ++ + 4 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/hw/block/fdc.c b/hw/block/fdc.c +index f3b5bec..322d863 100644 +--- a/hw/block/fdc.c ++++ b/hw/block/fdc.c +@@ -2210,6 +2210,8 @@ static void isabus_fdc_class_init(ObjectClass *klass, void *data) + dc->vmsd = &vmstate_isa_fdc; + dc->props = isa_fdc_properties; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo isa_fdc_info = { +diff --git a/hw/ide/piix.c b/hw/ide/piix.c +index 304cab0..1757ae0 100644 +--- a/hw/ide/piix.c ++++ b/hw/ide/piix.c +@@ -249,6 +249,8 @@ static void piix3_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371SB_1; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo piix3_ide_info = { +@@ -269,6 +271,8 @@ static void piix3_ide_xen_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + dc->unplug = pci_piix3_xen_ide_unplug; ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo piix3_ide_xen_info = { +@@ -290,6 +294,8 @@ static void piix4_ide_class_init(ObjectClass *klass, void *data) + k->device_id = PCI_DEVICE_ID_INTEL_82371AB; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo piix4_ide_info = { +diff --git a/hw/ide/via.c b/hw/ide/via.c +index 326722c..30bdc60 100644 +--- a/hw/ide/via.c ++++ b/hw/ide/via.c +@@ -224,6 +224,8 @@ static void via_ide_class_init(ObjectClass *klass, void *data) + k->revision = 0x06; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo via_ide_info = { +diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c +index ed396bf..850a92c 100644 +--- a/hw/input/pckbd.c ++++ b/hw/input/pckbd.c +@@ -515,6 +515,8 @@ static void i8042_class_initfn(ObjectClass *klass, void *data) + ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); + ic->init = i8042_initfn; + dc->vmsd = &vmstate_kbd_isa; ++ /* Disabled for Red Hat Enterprise Linux: */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo i8042_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel-SMBIOS-type-1-branding.patch b/SOURCES/kvm-rhel-SMBIOS-type-1-branding.patch new file mode 100644 index 0000000..d500d40 --- /dev/null +++ b/SOURCES/kvm-rhel-SMBIOS-type-1-branding.patch @@ -0,0 +1,83 @@ +From 13f5bfee8de72bc90324d84cba85850c66c001ed Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:28 +0100 +Subject: [PATCH 28/29] rhel: SMBIOS type 1 branding + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-12-git-send-email-armbru@redhat.com> +Patchwork-id: 55242 +O-Subject: [PATCH 7.0 qemu-kvm 11/11] rhel: SMBIOS type 1 branding +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +The previous two commits got us the upstreamable parts of RHEL-6 +commit 68c63bd "per-machine-type smbios Type 1 smbios values". This +is the RHEL-only part. + +Note: RHEL-6 also has commit 8e0d71e "Set SMBIOS vendor to QEMU for +RHEL5 machine types.", which RHEL-7 doesn't need, because it doesn't +have RHEL-5 machine types. + +Signed-off-by: Markus Armbruster +--- + hw/i386/pc_piix.c | 3 +-- + hw/i386/pc_q35.c | 3 +-- + hw/i386/smbios.c | 3 +++ + 3 files changed, 5 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 3 +-- + hw/i386/pc_q35.c | 3 +-- + hw/i386/smbios.c | 3 +++ + 3 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 396f4e4..825a5b1 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -117,8 +117,7 @@ static void pc_init1(QEMUMachineInitArgs *args, + + if (smbios_type1_defaults) { + /* These values are guest ABI, do not change */ +- smbios_set_type1_defaults("QEMU", "Standard PC (i440FX + PIIX, 1996)", +- args->machine->name); ++ smbios_set_type1_defaults("Red Hat", "KVM", args->machine->desc); + } + + /* allocate ram and load rom/bios */ +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 473f01b..64995ac 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -103,8 +103,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + + if (smbios_type1_defaults) { + /* These values are guest ABI, do not change */ +- smbios_set_type1_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)", +- args->machine->name); ++ smbios_set_type1_defaults("Red Hat", "KVM", args->machine->desc); + } + + /* allocate ram and load rom/bios */ +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index e8f41ad..60aa62e 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -268,6 +268,9 @@ void smbios_set_type1_defaults(const char *manufacturer, + if (!type1.version) { + type1.version = version; + } ++ if (!type1.family) { ++ type1.family = "Red Hat Enterprise Linux"; ++ } + } + + uint8_t *smbios_get_table(size_t *length) +-- +1.7.1 + diff --git a/SOURCES/kvm-rhel6-compat-usb-serial-numbers.patch b/SOURCES/kvm-rhel6-compat-usb-serial-numbers.patch new file mode 100644 index 0000000..9feec6c --- /dev/null +++ b/SOURCES/kvm-rhel6-compat-usb-serial-numbers.patch @@ -0,0 +1,95 @@ +From c1565b1a48db60bb86d83ec00c86b6ddfaf12d62 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 2 Sep 2013 13:26:16 +0200 +Subject: [PATCH 10/29] rhel6 compat: usb serial numbers + +RH-Author: Gerd Hoffmann +Message-id: <1378128376-25930-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 53987 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] rhel6 compat: usb serial numbers +Bugzilla: 953304 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Hans de Goede +RH-Acked-by: Paolo Bonzini + +Add serial number compat properties to the rhel6 machine types, +to match rhel6 behavior. Two things we have to watch out here: + +First the HID devices flipped serial from "1" to "42" to indicate +remote wakeup capability, in RHEL-6.2. + +rhel6 commit 85ae0a096fdbc4a6f5a660bf60a74c092f9c0f7a + +Second devices get unique serial numbers, by appending host adapter +pci address and port path, in RHEL-6.4, for usb-hub and usb-storage. +Also usb-net + usb-serial + usb-wacom, but those are disabled in RHEL. + +rhel6 commit e91156bc452250291f72b82b43654540be7101be + +usb-ccid has a unique serial in RHEL-7 but not in RHEL-6, so we need +a compat property for all RHEL-6.x machine types. + +bugzilla: 953304 + +Signed-off-by: Gerd Hoffmann +--- + hw/i386/pc_piix.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 24 ++++++++++++++++++++++++ + 1 files changed, 24 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index da7701c..a19f155 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -860,6 +860,10 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "486-" TYPE_X86_CPU,\ + .property = "level",\ + .value = stringify(0),\ ++ },{\ ++ .driver = "usb-ccid",\ ++ .property = "serial",\ ++ .value = "1",\ + } + + static void pc_init_rhel650(QEMUMachineInitArgs *args) +@@ -959,6 +963,14 @@ static QEMUMachine pc_machine_rhel640 = { + .driver = TYPE_X86_CPU,\ + .property = "pmu",\ + .value = "on",\ ++ },{\ ++ .driver = "usb-hub",\ ++ .property = "serial",\ ++ .value = "314159",\ ++ },{\ ++ .driver = "usb-storage",\ ++ .property = "serial",\ ++ .value = "1",\ + } + + static void pc_init_rhel630(QEMUMachineInitArgs *args) +@@ -1041,6 +1053,18 @@ static QEMUMachine pc_machine_rhel620 = { + .driver = "virtio-balloon-pci",\ + .property = "event_idx",\ + .value = "off",\ ++ },{\ ++ .driver = "usb-kbd",\ ++ .property = "serial",\ ++ .value = "1",\ ++ },{\ ++ .driver = "usb-mouse",\ ++ .property = "serial",\ ++ .value = "1",\ ++ },{\ ++ .driver = "usb-tablet",\ ++ .property = "serial",\ ++ .value = "1",\ + } + + static void pc_init_rhel610(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-rng-egd-offset-the-point-when-repeatedly-read-from-t.patch b/SOURCES/kvm-rng-egd-offset-the-point-when-repeatedly-read-from-t.patch new file mode 100644 index 0000000..5145d23 --- /dev/null +++ b/SOURCES/kvm-rng-egd-offset-the-point-when-repeatedly-read-from-t.patch @@ -0,0 +1,60 @@ +From 5b3829247a3edf89ebc63e8c2be2554fd66dfd41 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Sat, 23 Nov 2013 03:48:48 +0100 +Subject: [PATCH 13/14] rng-egd: offset the point when repeatedly read from the buffer + +RH-Author: Amos Kong +Message-id: <1385178528-7953-1-git-send-email-akong@redhat.com> +Patchwork-id: 55868 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] rng-egd: offset the point when repeatedly read from the buffer +Bugzilla: 1032862 +RH-Acked-by: Fam Zheng +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Amit Shah +RH-Acked-by: Xiao Wang + +Bugzilla: 1032862 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6634396 + +The buffer content might be read out more than once, currently +we just repeatedly read the first data block, buffer offset is +missing. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Amos Kong +Message-id: 1385023371-8198-3-git-send-email-akong@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9) +--- + backends/rng-egd.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + backends/rng-egd.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/backends/rng-egd.c b/backends/rng-egd.c +index 9e5a536..2962795 100644 +--- a/backends/rng-egd.c ++++ b/backends/rng-egd.c +@@ -91,12 +91,14 @@ static int rng_egd_chr_can_read(void *opaque) + static void rng_egd_chr_read(void *opaque, const uint8_t *buf, int size) + { + RngEgd *s = RNG_EGD(opaque); ++ size_t buf_offset = 0; + + while (size > 0 && s->requests) { + RngRequest *req = s->requests->data; + int len = MIN(size, req->size - req->offset); + +- memcpy(req->data + req->offset, buf, len); ++ memcpy(req->data + req->offset, buf + buf_offset, len); ++ buf_offset += len; + req->offset += len; + size -= len; + +-- +1.7.1 + diff --git a/SOURCES/kvm-rng-random-use-error_setg_file_open.patch b/SOURCES/kvm-rng-random-use-error_setg_file_open.patch new file mode 100644 index 0000000..9a72315 --- /dev/null +++ b/SOURCES/kvm-rng-random-use-error_setg_file_open.patch @@ -0,0 +1,47 @@ +From bfff0a4af270437508a38f1795e87ff293c4f9d4 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:24 +0100 +Subject: [PATCH 05/29] rng-random: use error_setg_file_open() + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-2-git-send-email-lersek@redhat.com> +Patchwork-id: 55191 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/8] rng-random: use error_setg_file_open() +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Acked-by: Kevin Wolf +(cherry picked from commit bc5741add11113ee8febdcf33931ec3afe10c729) +Signed-off-by: Laszlo Ersek +--- + backends/rng-random.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + backends/rng-random.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/backends/rng-random.c b/backends/rng-random.c +index 830360c..68dfc8a 100644 +--- a/backends/rng-random.c ++++ b/backends/rng-random.c +@@ -78,9 +78,8 @@ static void rng_random_opened(RngBackend *b, Error **errp) + "filename", "a valid filename"); + } else { + s->fd = qemu_open(s->filename, O_RDONLY | O_NONBLOCK); +- + if (s->fd == -1) { +- error_set(errp, QERR_OPEN_FILE_FAILED, s->filename); ++ error_setg_file_open(errp, errno, s->filename); + } + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-rtl8139-Do-not-consume-the-packet-during-overflow-in.patch b/SOURCES/kvm-rtl8139-Do-not-consume-the-packet-during-overflow-in.patch new file mode 100644 index 0000000..db4b86a --- /dev/null +++ b/SOURCES/kvm-rtl8139-Do-not-consume-the-packet-during-overflow-in.patch @@ -0,0 +1,48 @@ +From 9318bd2b84409c6f3810d410c6918fefec072408 Mon Sep 17 00:00:00 2001 +From: Vlad Yasevich +Date: Wed, 16 Dec 2015 02:58:23 +0100 +Subject: [PATCH 6/6] rtl8139: Do not consume the packet during overflow in + standard mode. + +Message-id: <1450234703-7606-3-git-send-email-vyasevic@redhat.com> +Patchwork-id: 68618 +O-Subject: [RHEL7.3 qemu-kvm PATCH 2/2] rtl8139: Do not consume the packet during overflow in standard mode. +Bugzilla: 1252757 +RH-Acked-by: Thomas Huth +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Xiao Wang + +When operation in standard mode, we currently return the size +of packet during buffer overflow. This consumes the overflow +packet. Return 0 instead so we can re-process the overflow packet +when we have room. + +This fixes issues with lost/dropped fragments of large messages. + +Signed-off-by: Vladislav Yasevich +Reviewed-by: Jason Wang +Message-id: 1441121206-6997-3-git-send-email-vyasevic@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 26c4e7ca72d970d120f0f51244bc8d37458512a0) +Signed-off-by: Vladislav Yasevich +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 6a167df..aa2503d 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -1148,7 +1148,7 @@ static ssize_t rtl8139_do_receive(NetClientState *nc, const uint8_t *buf, size_t + s->IntrStatus |= RxOverflow; + ++s->RxMissed; + rtl8139_update_irq(s); +- return size_; ++ return 0; + } + + packet_header |= RxStatusOK; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-Fix-receive-buffer-overflow-check.patch b/SOURCES/kvm-rtl8139-Fix-receive-buffer-overflow-check.patch new file mode 100644 index 0000000..7399163 --- /dev/null +++ b/SOURCES/kvm-rtl8139-Fix-receive-buffer-overflow-check.patch @@ -0,0 +1,64 @@ +From dc546cbfdefb8ddbaf121d3b075ca723df264d1c Mon Sep 17 00:00:00 2001 +From: Vlad Yasevich +Date: Wed, 16 Dec 2015 02:58:22 +0100 +Subject: [PATCH 5/6] rtl8139: Fix receive buffer overflow check + +Message-id: <1450234703-7606-2-git-send-email-vyasevic@redhat.com> +Patchwork-id: 68617 +O-Subject: [RHEL7.3 qemu-kvm PATCH 1/2] rtl8139: Fix receive buffer overflow check +Bugzilla: 1252757 +RH-Acked-by: Thomas Huth +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Xiao Wang + +rtl8139_do_receive() tries to check for the overflow condition +by making sure that packet_size + 8 does not exceed the +available buffer space. The issue here is that RxBuffAddr, +used to calculate available buffer space, is aligned to a +a 4 byte boundry after every update. So it is possible that +every packet ends up being slightly padded when written +to the receive buffer. This padding is not taken into +account when checking for overflow and we may end up missing +the overflow condition can causing buffer overwrite. + +This patch takes alignment into consideration when +checking for overflow condition. + +Signed-off-by: Vladislav Yasevich +Reviewed-by: Jason Wang +Message-id: 1441121206-6997-2-git-send-email-vyasevic@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit fabdcd3392f16fc666b1d04fc1bbe5f1dbbf10a4) +Signed-off-by: Vladislav Yasevich +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 4f89328..6a167df 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -1137,7 +1137,9 @@ static ssize_t rtl8139_do_receive(NetClientState *nc, const uint8_t *buf, size_t + + /* if receiver buffer is empty then avail == 0 */ + +- if (avail != 0 && size + 8 >= avail) ++#define RX_ALIGN(x) (((x) + 3) & ~0x3) ++ ++ if (avail != 0 && RX_ALIGN(size + 8) >= avail) + { + DPRINTF("rx overflow: rx buffer length %d head 0x%04x " + "read 0x%04x === available 0x%04x need 0x%04x\n", +@@ -1165,7 +1167,7 @@ static ssize_t rtl8139_do_receive(NetClientState *nc, const uint8_t *buf, size_t + rtl8139_write_buffer(s, (uint8_t *)&val, 4); + + /* correct buffer write pointer */ +- s->RxBufAddr = MOD2((s->RxBufAddr + 3) & ~0x3, s->RxBufferSize); ++ s->RxBufAddr = MOD2(RX_ALIGN(s->RxBufAddr), s->RxBufferSize); + + /* now we can signal we have received something */ + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-avoid-nested-ifs-in-IP-header-parsing-CVE-20.patch b/SOURCES/kvm-rtl8139-avoid-nested-ifs-in-IP-header-parsing-CVE-20.patch new file mode 100644 index 0000000..7181046 --- /dev/null +++ b/SOURCES/kvm-rtl8139-avoid-nested-ifs-in-IP-header-parsing-CVE-20.patch @@ -0,0 +1,92 @@ +From 5ec13dc4ed1c536de9711cb05af88609d073abf9 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:42 +0200 +Subject: [PATCH 07/13] rtl8139: avoid nested ifs in IP header parsing + (CVE-2015-5165) + +Message-id: <1438358388-10575-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 67236 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 1/7] rtl8139: avoid nested ifs in IP header parsing (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +Transmit offload needs to parse packet headers. If header fields have +unexpected values the offload processing is skipped. + +The code currently uses nested ifs because there is relatively little +input validation. The next patches will add missing input validation +and a goto label is more appropriate to avoid deep if statement nesting. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 41 ++++++++++++++++++++++------------------- + 1 file changed, 22 insertions(+), 19 deletions(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index d08106b..e3b594f 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2152,28 +2152,30 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + size_t eth_payload_len = 0; + + int proto = be16_to_cpu(*(uint16_t *)(saved_buffer + 12)); +- if (proto == ETH_P_IP) ++ if (proto != ETH_P_IP) + { +- DPRINTF("+++ C+ mode has IP packet\n"); +- +- /* not aligned */ +- eth_payload_data = saved_buffer + ETH_HLEN; +- eth_payload_len = saved_size - ETH_HLEN; +- +- ip = (ip_header*)eth_payload_data; +- +- if (IP_HEADER_VERSION(ip) != IP_HEADER_VERSION_4) { +- DPRINTF("+++ C+ mode packet has bad IP version %d " +- "expected %d\n", IP_HEADER_VERSION(ip), +- IP_HEADER_VERSION_4); +- ip = NULL; +- } else { +- hlen = IP_HEADER_LENGTH(ip); +- ip_protocol = ip->ip_p; +- ip_data_len = be16_to_cpu(ip->ip_len) - hlen; +- } ++ goto skip_offload; + } + ++ DPRINTF("+++ C+ mode has IP packet\n"); ++ ++ /* not aligned */ ++ eth_payload_data = saved_buffer + ETH_HLEN; ++ eth_payload_len = saved_size - ETH_HLEN; ++ ++ ip = (ip_header*)eth_payload_data; ++ ++ if (IP_HEADER_VERSION(ip) != IP_HEADER_VERSION_4) { ++ DPRINTF("+++ C+ mode packet has bad IP version %d " ++ "expected %d\n", IP_HEADER_VERSION(ip), ++ IP_HEADER_VERSION_4); ++ goto skip_offload; ++ } ++ ++ hlen = IP_HEADER_LENGTH(ip); ++ ip_protocol = ip->ip_p; ++ ip_data_len = be16_to_cpu(ip->ip_len) - hlen; ++ + if (ip) + { + if (txdw0 & CP_TX_IPCS) +@@ -2369,6 +2371,7 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + } + } + ++skip_offload: + /* update tally counter */ + ++s->tally_counters.TxOk; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-check-IP-Header-Length-field-CVE-2015-5165.patch b/SOURCES/kvm-rtl8139-check-IP-Header-Length-field-CVE-2015-5165.patch new file mode 100644 index 0000000..8eb671f --- /dev/null +++ b/SOURCES/kvm-rtl8139-check-IP-Header-Length-field-CVE-2015-5165.patch @@ -0,0 +1,62 @@ +From bea12592014d3371ca8d65fdf7cba2e84d3d46b7 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:45 +0200 +Subject: [PATCH 10/13] rtl8139: check IP Header Length field (CVE-2015-5165) + +Message-id: <1438358388-10575-5-git-send-email-stefanha@redhat.com> +Patchwork-id: 67239 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 4/7] rtl8139: check IP Header Length field (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +The IP Header Length field was only checked in the IP checksum case, but +is used in other cases too. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 19 ++++++++----------- + 1 file changed, 8 insertions(+), 11 deletions(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 409029d..7efc0b5 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2178,6 +2178,10 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + } + + hlen = IP_HEADER_LENGTH(ip); ++ if (hlen < sizeof(ip_header) || hlen > eth_payload_len) { ++ goto skip_offload; ++ } ++ + ip_protocol = ip->ip_p; + ip_data_len = be16_to_cpu(ip->ip_len) - hlen; + +@@ -2185,17 +2189,10 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + { + DPRINTF("+++ C+ mode need IP checksum\n"); + +- if (hleneth_payload_len) {/* min header length */ +- /* bad packet header len */ +- /* or packet too short */ +- } +- else +- { +- ip->ip_sum = 0; +- ip->ip_sum = ip_checksum(ip, hlen); +- DPRINTF("+++ C+ mode IP header len=%d checksum=%04x\n", +- hlen, ip->ip_sum); +- } ++ ip->ip_sum = 0; ++ ip->ip_sum = ip_checksum(ip, hlen); ++ DPRINTF("+++ C+ mode IP header len=%d checksum=%04x\n", ++ hlen, ip->ip_sum); + } + + if ((txdw0 & CP_TX_LGSEN) && ip_protocol == IP_PROTO_TCP) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-check-IP-Total-Length-field-CVE-2015-5165.patch b/SOURCES/kvm-rtl8139-check-IP-Total-Length-field-CVE-2015-5165.patch new file mode 100644 index 0000000..546999f --- /dev/null +++ b/SOURCES/kvm-rtl8139-check-IP-Total-Length-field-CVE-2015-5165.patch @@ -0,0 +1,43 @@ +From 41ff6215085ee4118cad53b590be957143161f96 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:46 +0200 +Subject: [PATCH 11/13] rtl8139: check IP Total Length field (CVE-2015-5165) + +Message-id: <1438358388-10575-6-git-send-email-stefanha@redhat.com> +Patchwork-id: 67240 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 5/7] rtl8139: check IP Total Length field (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +The IP Total Length field includes the IP header and data. Make sure it +is valid and does not exceed the Ethernet payload size. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 7efc0b5..61bc34c 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2183,7 +2183,12 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + } + + ip_protocol = ip->ip_p; +- ip_data_len = be16_to_cpu(ip->ip_len) - hlen; ++ ++ ip_data_len = be16_to_cpu(ip->ip_len); ++ if (ip_data_len < hlen || ip_data_len > eth_payload_len) { ++ goto skip_offload; ++ } ++ ip_data_len -= hlen; + + if (txdw0 & CP_TX_IPCS) + { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-check-TCP-Data-Offset-field-CVE-2015-5165.patch b/SOURCES/kvm-rtl8139-check-TCP-Data-Offset-field-CVE-2015-5165.patch new file mode 100644 index 0000000..df59a3b --- /dev/null +++ b/SOURCES/kvm-rtl8139-check-TCP-Data-Offset-field-CVE-2015-5165.patch @@ -0,0 +1,41 @@ +From 03a9670ae89e39fcfcd6b99ab66b4e4cab7c85b7 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:48 +0200 +Subject: [PATCH 13/13] rtl8139: check TCP Data Offset field (CVE-2015-5165) + +Message-id: <1438358388-10575-8-git-send-email-stefanha@redhat.com> +Patchwork-id: 67242 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 7/7] rtl8139: check TCP Data Offset field (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +The TCP Data Offset field contains the length of the header. Make sure +it is valid and does not exceed the IP data length. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index c9bf454..4f89328 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2231,6 +2231,11 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + + int tcp_hlen = TCP_HEADER_DATA_OFFSET(p_tcp_hdr); + ++ /* Invalid TCP data offset? */ ++ if (tcp_hlen < sizeof(tcp_header) || tcp_hlen > ip_data_len) { ++ goto skip_offload; ++ } ++ + /* ETH_MTU = ip header len + tcp header len + payload */ + int tcp_data_len = ip_data_len - tcp_hlen; + int tcp_chunk_size = ETH_MTU - hlen - tcp_hlen; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-drop-tautologous-if-ip-.-statement-CVE-2015-.patch b/SOURCES/kvm-rtl8139-drop-tautologous-if-ip-.-statement-CVE-2015-.patch new file mode 100644 index 0000000..f062488 --- /dev/null +++ b/SOURCES/kvm-rtl8139-drop-tautologous-if-ip-.-statement-CVE-2015-.patch @@ -0,0 +1,383 @@ +From fc8f8c54749bfeb7a4320875dc2bfd3565cf5ebe Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:43 +0200 +Subject: [PATCH 08/13] rtl8139: drop tautologous if (ip) {...} statement + (CVE-2015-5165) + +Message-id: <1438358388-10575-3-git-send-email-stefanha@redhat.com> +Patchwork-id: 67238 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 2/7] rtl8139: drop tautologous if (ip) {...} statement (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +The previous patch stopped using the ip pointer as an indicator that the +IP header is present. When we reach the if (ip) {...} statement we know +ip is always non-NULL. + +Remove the if statement to reduce nesting. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 305 +++++++++++++++++++++++++++---------------------------- + 1 file changed, 151 insertions(+), 154 deletions(-) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index e3b594f..ab32714 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2176,198 +2176,195 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + ip_protocol = ip->ip_p; + ip_data_len = be16_to_cpu(ip->ip_len) - hlen; + +- if (ip) ++ if (txdw0 & CP_TX_IPCS) + { +- if (txdw0 & CP_TX_IPCS) +- { +- DPRINTF("+++ C+ mode need IP checksum\n"); ++ DPRINTF("+++ C+ mode need IP checksum\n"); + +- if (hleneth_payload_len) {/* min header length */ +- /* bad packet header len */ +- /* or packet too short */ +- } +- else +- { +- ip->ip_sum = 0; +- ip->ip_sum = ip_checksum(ip, hlen); +- DPRINTF("+++ C+ mode IP header len=%d checksum=%04x\n", +- hlen, ip->ip_sum); +- } ++ if (hleneth_payload_len) {/* min header length */ ++ /* bad packet header len */ ++ /* or packet too short */ + } +- +- if ((txdw0 & CP_TX_LGSEN) && ip_protocol == IP_PROTO_TCP) ++ else + { +- int large_send_mss = (txdw0 >> 16) & CP_TC_LGSEN_MSS_MASK; ++ ip->ip_sum = 0; ++ ip->ip_sum = ip_checksum(ip, hlen); ++ DPRINTF("+++ C+ mode IP header len=%d checksum=%04x\n", ++ hlen, ip->ip_sum); ++ } ++ } + +- DPRINTF("+++ C+ mode offloaded task TSO MTU=%d IP data %d " +- "frame data %d specified MSS=%d\n", ETH_MTU, +- ip_data_len, saved_size - ETH_HLEN, large_send_mss); ++ if ((txdw0 & CP_TX_LGSEN) && ip_protocol == IP_PROTO_TCP) ++ { ++ int large_send_mss = (txdw0 >> 16) & CP_TC_LGSEN_MSS_MASK; + +- int tcp_send_offset = 0; +- int send_count = 0; ++ DPRINTF("+++ C+ mode offloaded task TSO MTU=%d IP data %d " ++ "frame data %d specified MSS=%d\n", ETH_MTU, ++ ip_data_len, saved_size - ETH_HLEN, large_send_mss); + +- /* maximum IP header length is 60 bytes */ +- uint8_t saved_ip_header[60]; ++ int tcp_send_offset = 0; ++ int send_count = 0; + +- /* save IP header template; data area is used in tcp checksum calculation */ +- memcpy(saved_ip_header, eth_payload_data, hlen); ++ /* maximum IP header length is 60 bytes */ ++ uint8_t saved_ip_header[60]; + +- /* a placeholder for checksum calculation routine in tcp case */ +- uint8_t *data_to_checksum = eth_payload_data + hlen - 12; +- // size_t data_to_checksum_len = eth_payload_len - hlen + 12; ++ /* save IP header template; data area is used in tcp checksum calculation */ ++ memcpy(saved_ip_header, eth_payload_data, hlen); + +- /* pointer to TCP header */ +- tcp_header *p_tcp_hdr = (tcp_header*)(eth_payload_data + hlen); ++ /* a placeholder for checksum calculation routine in tcp case */ ++ uint8_t *data_to_checksum = eth_payload_data + hlen - 12; ++ // size_t data_to_checksum_len = eth_payload_len - hlen + 12; + +- int tcp_hlen = TCP_HEADER_DATA_OFFSET(p_tcp_hdr); ++ /* pointer to TCP header */ ++ tcp_header *p_tcp_hdr = (tcp_header*)(eth_payload_data + hlen); + +- /* ETH_MTU = ip header len + tcp header len + payload */ +- int tcp_data_len = ip_data_len - tcp_hlen; +- int tcp_chunk_size = ETH_MTU - hlen - tcp_hlen; ++ int tcp_hlen = TCP_HEADER_DATA_OFFSET(p_tcp_hdr); + +- DPRINTF("+++ C+ mode TSO IP data len %d TCP hlen %d TCP " +- "data len %d TCP chunk size %d\n", ip_data_len, +- tcp_hlen, tcp_data_len, tcp_chunk_size); ++ /* ETH_MTU = ip header len + tcp header len + payload */ ++ int tcp_data_len = ip_data_len - tcp_hlen; ++ int tcp_chunk_size = ETH_MTU - hlen - tcp_hlen; + +- /* note the cycle below overwrites IP header data, +- but restores it from saved_ip_header before sending packet */ ++ DPRINTF("+++ C+ mode TSO IP data len %d TCP hlen %d TCP " ++ "data len %d TCP chunk size %d\n", ip_data_len, ++ tcp_hlen, tcp_data_len, tcp_chunk_size); + +- int is_last_frame = 0; ++ /* note the cycle below overwrites IP header data, ++ but restores it from saved_ip_header before sending packet */ + +- for (tcp_send_offset = 0; tcp_send_offset < tcp_data_len; tcp_send_offset += tcp_chunk_size) +- { +- uint16_t chunk_size = tcp_chunk_size; +- +- /* check if this is the last frame */ +- if (tcp_send_offset + tcp_chunk_size >= tcp_data_len) +- { +- is_last_frame = 1; +- chunk_size = tcp_data_len - tcp_send_offset; +- } +- +- DPRINTF("+++ C+ mode TSO TCP seqno %08x\n", +- be32_to_cpu(p_tcp_hdr->th_seq)); +- +- /* add 4 TCP pseudoheader fields */ +- /* copy IP source and destination fields */ +- memcpy(data_to_checksum, saved_ip_header + 12, 8); +- +- DPRINTF("+++ C+ mode TSO calculating TCP checksum for " +- "packet with %d bytes data\n", tcp_hlen + +- chunk_size); +- +- if (tcp_send_offset) +- { +- memcpy((uint8_t*)p_tcp_hdr + tcp_hlen, (uint8_t*)p_tcp_hdr + tcp_hlen + tcp_send_offset, chunk_size); +- } +- +- /* keep PUSH and FIN flags only for the last frame */ +- if (!is_last_frame) +- { +- TCP_HEADER_CLEAR_FLAGS(p_tcp_hdr, TCP_FLAG_PUSH|TCP_FLAG_FIN); +- } +- +- /* recalculate TCP checksum */ +- ip_pseudo_header *p_tcpip_hdr = (ip_pseudo_header *)data_to_checksum; +- p_tcpip_hdr->zeros = 0; +- p_tcpip_hdr->ip_proto = IP_PROTO_TCP; +- p_tcpip_hdr->ip_payload = cpu_to_be16(tcp_hlen + chunk_size); +- +- p_tcp_hdr->th_sum = 0; +- +- int tcp_checksum = ip_checksum(data_to_checksum, tcp_hlen + chunk_size + 12); +- DPRINTF("+++ C+ mode TSO TCP checksum %04x\n", +- tcp_checksum); +- +- p_tcp_hdr->th_sum = tcp_checksum; +- +- /* restore IP header */ +- memcpy(eth_payload_data, saved_ip_header, hlen); +- +- /* set IP data length and recalculate IP checksum */ +- ip->ip_len = cpu_to_be16(hlen + tcp_hlen + chunk_size); +- +- /* increment IP id for subsequent frames */ +- ip->ip_id = cpu_to_be16(tcp_send_offset/tcp_chunk_size + be16_to_cpu(ip->ip_id)); +- +- ip->ip_sum = 0; +- ip->ip_sum = ip_checksum(eth_payload_data, hlen); +- DPRINTF("+++ C+ mode TSO IP header len=%d " +- "checksum=%04x\n", hlen, ip->ip_sum); +- +- int tso_send_size = ETH_HLEN + hlen + tcp_hlen + chunk_size; +- DPRINTF("+++ C+ mode TSO transferring packet size " +- "%d\n", tso_send_size); +- rtl8139_transfer_frame(s, saved_buffer, tso_send_size, +- 0, (uint8_t *) dot1q_buffer); +- +- /* add transferred count to TCP sequence number */ +- p_tcp_hdr->th_seq = cpu_to_be32(chunk_size + be32_to_cpu(p_tcp_hdr->th_seq)); +- ++send_count; +- } ++ int is_last_frame = 0; + +- /* Stop sending this frame */ +- saved_size = 0; +- } +- else if (txdw0 & (CP_TX_TCPCS|CP_TX_UDPCS)) ++ for (tcp_send_offset = 0; tcp_send_offset < tcp_data_len; tcp_send_offset += tcp_chunk_size) + { +- DPRINTF("+++ C+ mode need TCP or UDP checksum\n"); ++ uint16_t chunk_size = tcp_chunk_size; + +- /* maximum IP header length is 60 bytes */ +- uint8_t saved_ip_header[60]; +- memcpy(saved_ip_header, eth_payload_data, hlen); ++ /* check if this is the last frame */ ++ if (tcp_send_offset + tcp_chunk_size >= tcp_data_len) ++ { ++ is_last_frame = 1; ++ chunk_size = tcp_data_len - tcp_send_offset; ++ } + +- uint8_t *data_to_checksum = eth_payload_data + hlen - 12; +- // size_t data_to_checksum_len = eth_payload_len - hlen + 12; ++ DPRINTF("+++ C+ mode TSO TCP seqno %08x\n", ++ be32_to_cpu(p_tcp_hdr->th_seq)); + + /* add 4 TCP pseudoheader fields */ + /* copy IP source and destination fields */ + memcpy(data_to_checksum, saved_ip_header + 12, 8); + +- if ((txdw0 & CP_TX_TCPCS) && ip_protocol == IP_PROTO_TCP) ++ DPRINTF("+++ C+ mode TSO calculating TCP checksum for " ++ "packet with %d bytes data\n", tcp_hlen + ++ chunk_size); ++ ++ if (tcp_send_offset) + { +- DPRINTF("+++ C+ mode calculating TCP checksum for " +- "packet with %d bytes data\n", ip_data_len); ++ memcpy((uint8_t*)p_tcp_hdr + tcp_hlen, (uint8_t*)p_tcp_hdr + tcp_hlen + tcp_send_offset, chunk_size); ++ } + +- ip_pseudo_header *p_tcpip_hdr = (ip_pseudo_header *)data_to_checksum; +- p_tcpip_hdr->zeros = 0; +- p_tcpip_hdr->ip_proto = IP_PROTO_TCP; +- p_tcpip_hdr->ip_payload = cpu_to_be16(ip_data_len); ++ /* keep PUSH and FIN flags only for the last frame */ ++ if (!is_last_frame) ++ { ++ TCP_HEADER_CLEAR_FLAGS(p_tcp_hdr, TCP_FLAG_PUSH|TCP_FLAG_FIN); ++ } + +- tcp_header* p_tcp_hdr = (tcp_header *) (data_to_checksum+12); ++ /* recalculate TCP checksum */ ++ ip_pseudo_header *p_tcpip_hdr = (ip_pseudo_header *)data_to_checksum; ++ p_tcpip_hdr->zeros = 0; ++ p_tcpip_hdr->ip_proto = IP_PROTO_TCP; ++ p_tcpip_hdr->ip_payload = cpu_to_be16(tcp_hlen + chunk_size); + +- p_tcp_hdr->th_sum = 0; ++ p_tcp_hdr->th_sum = 0; + +- int tcp_checksum = ip_checksum(data_to_checksum, ip_data_len + 12); +- DPRINTF("+++ C+ mode TCP checksum %04x\n", +- tcp_checksum); ++ int tcp_checksum = ip_checksum(data_to_checksum, tcp_hlen + chunk_size + 12); ++ DPRINTF("+++ C+ mode TSO TCP checksum %04x\n", ++ tcp_checksum); + +- p_tcp_hdr->th_sum = tcp_checksum; +- } +- else if ((txdw0 & CP_TX_UDPCS) && ip_protocol == IP_PROTO_UDP) +- { +- DPRINTF("+++ C+ mode calculating UDP checksum for " +- "packet with %d bytes data\n", ip_data_len); ++ p_tcp_hdr->th_sum = tcp_checksum; + +- ip_pseudo_header *p_udpip_hdr = (ip_pseudo_header *)data_to_checksum; +- p_udpip_hdr->zeros = 0; +- p_udpip_hdr->ip_proto = IP_PROTO_UDP; +- p_udpip_hdr->ip_payload = cpu_to_be16(ip_data_len); ++ /* restore IP header */ ++ memcpy(eth_payload_data, saved_ip_header, hlen); + +- udp_header *p_udp_hdr = (udp_header *) (data_to_checksum+12); ++ /* set IP data length and recalculate IP checksum */ ++ ip->ip_len = cpu_to_be16(hlen + tcp_hlen + chunk_size); + +- p_udp_hdr->uh_sum = 0; ++ /* increment IP id for subsequent frames */ ++ ip->ip_id = cpu_to_be16(tcp_send_offset/tcp_chunk_size + be16_to_cpu(ip->ip_id)); + +- int udp_checksum = ip_checksum(data_to_checksum, ip_data_len + 12); +- DPRINTF("+++ C+ mode UDP checksum %04x\n", +- udp_checksum); ++ ip->ip_sum = 0; ++ ip->ip_sum = ip_checksum(eth_payload_data, hlen); ++ DPRINTF("+++ C+ mode TSO IP header len=%d " ++ "checksum=%04x\n", hlen, ip->ip_sum); + +- p_udp_hdr->uh_sum = udp_checksum; +- } ++ int tso_send_size = ETH_HLEN + hlen + tcp_hlen + chunk_size; ++ DPRINTF("+++ C+ mode TSO transferring packet size " ++ "%d\n", tso_send_size); ++ rtl8139_transfer_frame(s, saved_buffer, tso_send_size, ++ 0, (uint8_t *) dot1q_buffer); + +- /* restore IP header */ +- memcpy(eth_payload_data, saved_ip_header, hlen); ++ /* add transferred count to TCP sequence number */ ++ p_tcp_hdr->th_seq = cpu_to_be32(chunk_size + be32_to_cpu(p_tcp_hdr->th_seq)); ++ ++send_count; + } ++ ++ /* Stop sending this frame */ ++ saved_size = 0; ++ } ++ else if (txdw0 & (CP_TX_TCPCS|CP_TX_UDPCS)) ++ { ++ DPRINTF("+++ C+ mode need TCP or UDP checksum\n"); ++ ++ /* maximum IP header length is 60 bytes */ ++ uint8_t saved_ip_header[60]; ++ memcpy(saved_ip_header, eth_payload_data, hlen); ++ ++ uint8_t *data_to_checksum = eth_payload_data + hlen - 12; ++ // size_t data_to_checksum_len = eth_payload_len - hlen + 12; ++ ++ /* add 4 TCP pseudoheader fields */ ++ /* copy IP source and destination fields */ ++ memcpy(data_to_checksum, saved_ip_header + 12, 8); ++ ++ if ((txdw0 & CP_TX_TCPCS) && ip_protocol == IP_PROTO_TCP) ++ { ++ DPRINTF("+++ C+ mode calculating TCP checksum for " ++ "packet with %d bytes data\n", ip_data_len); ++ ++ ip_pseudo_header *p_tcpip_hdr = (ip_pseudo_header *)data_to_checksum; ++ p_tcpip_hdr->zeros = 0; ++ p_tcpip_hdr->ip_proto = IP_PROTO_TCP; ++ p_tcpip_hdr->ip_payload = cpu_to_be16(ip_data_len); ++ ++ tcp_header* p_tcp_hdr = (tcp_header *) (data_to_checksum+12); ++ ++ p_tcp_hdr->th_sum = 0; ++ ++ int tcp_checksum = ip_checksum(data_to_checksum, ip_data_len + 12); ++ DPRINTF("+++ C+ mode TCP checksum %04x\n", ++ tcp_checksum); ++ ++ p_tcp_hdr->th_sum = tcp_checksum; ++ } ++ else if ((txdw0 & CP_TX_UDPCS) && ip_protocol == IP_PROTO_UDP) ++ { ++ DPRINTF("+++ C+ mode calculating UDP checksum for " ++ "packet with %d bytes data\n", ip_data_len); ++ ++ ip_pseudo_header *p_udpip_hdr = (ip_pseudo_header *)data_to_checksum; ++ p_udpip_hdr->zeros = 0; ++ p_udpip_hdr->ip_proto = IP_PROTO_UDP; ++ p_udpip_hdr->ip_payload = cpu_to_be16(ip_data_len); ++ ++ udp_header *p_udp_hdr = (udp_header *) (data_to_checksum+12); ++ ++ p_udp_hdr->uh_sum = 0; ++ ++ int udp_checksum = ip_checksum(data_to_checksum, ip_data_len + 12); ++ DPRINTF("+++ C+ mode UDP checksum %04x\n", ++ udp_checksum); ++ ++ p_udp_hdr->uh_sum = udp_checksum; ++ } ++ ++ /* restore IP header */ ++ memcpy(eth_payload_data, saved_ip_header, hlen); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-skip-offload-on-short-Ethernet-IP-header-CVE.patch b/SOURCES/kvm-rtl8139-skip-offload-on-short-Ethernet-IP-header-CVE.patch new file mode 100644 index 0000000..1e14729 --- /dev/null +++ b/SOURCES/kvm-rtl8139-skip-offload-on-short-Ethernet-IP-header-CVE.patch @@ -0,0 +1,49 @@ +From 87c927af369a24b466b9429e9c785219ea718863 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:44 +0200 +Subject: [PATCH 09/13] rtl8139: skip offload on short Ethernet/IP header + (CVE-2015-5165) + +Message-id: <1438358388-10575-4-git-send-email-stefanha@redhat.com> +Patchwork-id: 67237 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 3/7] rtl8139: skip offload on short Ethernet/IP header (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +Transmit offload features access Ethernet and IP headers the packet. If +the packet is too short we must not attempt to access header fields: + + int proto = be16_to_cpu(*(uint16_t *)(saved_buffer + 12)); + ... + eth_payload_data = saved_buffer + ETH_HLEN; + ... + ip = (ip_header*)eth_payload_data; + if (IP_HEADER_VERSION(ip) != IP_HEADER_VERSION_4) { + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index ab32714..409029d 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2142,6 +2142,11 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + { + DPRINTF("+++ C+ mode offloaded task checksum\n"); + ++ /* Large enough for Ethernet and IP headers? */ ++ if (saved_size < ETH_HLEN + sizeof(ip_header)) { ++ goto skip_offload; ++ } ++ + /* ip packet header */ + ip_header *ip = NULL; + int hlen = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rtl8139-skip-offload-on-short-TCP-header-CVE-2015-51.patch b/SOURCES/kvm-rtl8139-skip-offload-on-short-TCP-header-CVE-2015-51.patch new file mode 100644 index 0000000..05fa035 --- /dev/null +++ b/SOURCES/kvm-rtl8139-skip-offload-on-short-TCP-header-CVE-2015-51.patch @@ -0,0 +1,45 @@ +From 62f1eddbc1e0261ff18e5a0dd0e0db23a93e8d4e Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 31 Jul 2015 15:59:47 +0200 +Subject: [PATCH 12/13] rtl8139: skip offload on short TCP header + (CVE-2015-5165) + +Message-id: <1438358388-10575-7-git-send-email-stefanha@redhat.com> +Patchwork-id: 67241 +O-Subject: [RHEL-7.1.z qemu-kvm EMBARGOED PATCH 6/7] rtl8139: skip offload on short TCP header (CVE-2015-5165) +Bugzilla: 1248766 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Xiao Wang +RH-Acked-by: Laszlo Ersek + +TCP Large Segment Offload accesses the TCP header in the packet. If the +packet is too short we must not attempt to access header fields: + + tcp_header *p_tcp_hdr = (tcp_header*)(eth_payload_data + hlen); + int tcp_hlen = TCP_HEADER_DATA_OFFSET(p_tcp_hdr); + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/net/rtl8139.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c +index 61bc34c..c9bf454 100644 +--- a/hw/net/rtl8139.c ++++ b/hw/net/rtl8139.c +@@ -2202,6 +2202,11 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) + + if ((txdw0 & CP_TX_LGSEN) && ip_protocol == IP_PROTO_TCP) + { ++ /* Large enough for the TCP header? */ ++ if (ip_data_len < sizeof(tcp_header)) { ++ goto skip_offload; ++ } ++ + int large_send_mss = (txdw0 >> 16) & CP_TC_LGSEN_MSS_MASK; + + DPRINTF("+++ C+ mode offloaded task TSO MTU=%d IP data %d " +-- +1.8.3.1 + diff --git a/SOURCES/kvm-rules.mak-allow-per-object-cflags-and-libs.patch b/SOURCES/kvm-rules.mak-allow-per-object-cflags-and-libs.patch new file mode 100644 index 0000000..a662fab --- /dev/null +++ b/SOURCES/kvm-rules.mak-allow-per-object-cflags-and-libs.patch @@ -0,0 +1,104 @@ +From ef6f26bb4a43131a7a3de4109aa9aeb145ad139a Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 16 Jul 2014 02:20:27 -0500 +Subject: [CHANGE 27/29] rules.mak: allow per object cflags and libs +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405477228-11490-4-git-send-email-famz@redhat.com> +Patchwork-id: 59917 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/4] rules.mak: allow per object cflags and libs +Bugzilla: 1017685 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +Adds extract-libs in LINK to expand any "per object libs", the syntax to define +such a libs options is like: + + foo.o-libs := $(CURL_LIBS) + +in block/Makefile.objs. + +Similarly, + + foo.o-cflags := $(FOO_CFLAGS) + +is also supported. + +"foo.o" must be listed in a nested var (e.g. common-obj-y) to make the +option variables effective. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5c0d52bcd3aada33e274ea7dad75955f98bc2636) +Signed-off-by: Fam Zheng +--- + rules.mak | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +Signed-off-by: jen +--- + rules.mak | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +diff --git a/rules.mak b/rules.mak +index 0c5125d..355c275 100644 +--- a/rules.mak ++++ b/rules.mak +@@ -17,15 +17,17 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(*D)/$(*F).d + # Same as -I$(SRC_PATH) -I., but for the nested source/object directories + QEMU_INCLUDES += -I$( +Date: Wed, 16 Jul 2014 02:20:26 -0500 +Subject: [CHANGE 26/29] rules.mak: fix $(obj) to a real relative path +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405477228-11490-3-git-send-email-famz@redhat.com> +Patchwork-id: 59921 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/4] rules.mak: fix $(obj) to a real relative path +Bugzilla: 1017685 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Miroslav Rezanina + +Upstream: ba1183da9a10b94611cad88c44a5c6df005f9b55 + +Makefile.target includes rule.mak and unnested common-obj-y, then prefix +them with '../', this will ignore object specific QEMU_CFLAGS in subdir +Makefile.objs: + +$(obj)/curl.o: QEMU_CFLAGS += $(CURL_CFLAGS) + +Because $(obj) here is './block', instead of '../block'. This doesn't +hurt compiling because we basically build all .o from top Makefile, +before entering Makefile.target, but it will affact arriving per-object +libs support. + +The starting point of $(obj) is passed in as argument of unnest-vars, as +well as nested variables, so that different Makefiles can pass in a +right value. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini + +This is manual backport. +Signed-off-by: Miroslav Rezanina +Signed-off-by: Fam Zheng +--- + Makefile | 14 ++++++++++++++ + Makefile.objs | 16 +--------------- + Makefile.target | 17 +++++++++++++---- + configure | 1 + + rules.mak | 14 +++++++++----- + 5 files changed, 38 insertions(+), 24 deletions(-) + +Signed-off-by: jen +--- + Makefile | 14 ++++++++++++++ + Makefile.objs | 16 +--------------- + Makefile.target | 17 +++++++++++++---- + configure | 1 + + rules.mak | 14 +++++++++----- + 5 files changed, 38 insertions(+), 24 deletions(-) + +diff --git a/Makefile b/Makefile +index 66774de..f504754 100644 +--- a/Makefile ++++ b/Makefile +@@ -120,6 +120,16 @@ defconfig: + + ifneq ($(wildcard config-host.mak),) + include $(SRC_PATH)/Makefile.objs ++endif ++ ++dummy := $(call unnest-vars,, \ ++ stub-obj-y \ ++ util-obj-y \ ++ qga-obj-y \ ++ block-obj-y \ ++ common-obj-y) ++ ++ifneq ($(wildcard config-host.mak),) + include $(SRC_PATH)/tests/Makefile + endif + ifeq ($(CONFIG_SMARTCARD_NSS),y) +@@ -128,6 +138,10 @@ endif + + all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all + ++vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) ++ ++vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) ++ + config-host.h: config-host.h-timestamp + config-host.h-timestamp: config-host.mak + qemu-options.def: $(SRC_PATH)/qemu-options.hx +diff --git a/Makefile.objs b/Makefile.objs +index 67b4a28..f83a5b2 100644 +--- a/Makefile.objs ++++ b/Makefile.objs +@@ -40,7 +40,7 @@ libcacard-y += libcacard/vcardt.o + # single QEMU executable should support all CPUs and machines. + + ifeq ($(CONFIG_SOFTMMU),y) +-common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.o block/ ++common-obj-y = blockdev.o blockdev-nbd.o block/ + common-obj-y += net/ + common-obj-y += readline.o + common-obj-y += qdev-monitor.o device-hotplug.o +@@ -103,17 +103,3 @@ common-obj-y += disas/ + # FIXME: a few definitions from qapi-types.o/qapi-visit.o are needed + # by libqemuutil.a. These should be moved to a separate .json schema. + qga-obj-y = qga/ qapi-types.o qapi-visit.o +- +-vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) +- +-vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS) +- +-QEMU_CFLAGS+=$(GLIB_CFLAGS) +- +-nested-vars += \ +- stub-obj-y \ +- util-obj-y \ +- qga-obj-y \ +- block-obj-y \ +- common-obj-y +-dummy := $(call unnest-vars) +diff --git a/Makefile.target b/Makefile.target +index 1cafb17..b871dda 100644 +--- a/Makefile.target ++++ b/Makefile.target +@@ -135,13 +135,22 @@ endif # CONFIG_SOFTMMU + # Workaround for http://gcc.gnu.org/PR55489, see configure. + %/translate.o: QEMU_CFLAGS += $(TRANSLATE_OPT_CFLAGS) + +-nested-vars += obj-y ++dummy := $(call unnest-vars,,obj-y) + +-# This resolves all nested paths, so it must come last ++# we are making another call to unnest-vars with different vars, protect obj-y, ++# it can be overriden in subdir Makefile.objs ++obj-y-save := $(obj-y) ++ ++block-obj-y := ++common-obj-y := + include $(SRC_PATH)/Makefile.objs ++dummy := $(call unnest-vars,..,block-obj-y common-obj-y) + +-all-obj-y = $(obj-y) +-all-obj-y += $(addprefix ../, $(common-obj-y)) ++# Now restore obj-y ++obj-y := $(obj-y-save) ++ ++all-obj-y = $(obj-y) $(common-obj-y) ++all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y) + + ifndef CONFIG_HAIKU + LIBS+=-lm +diff --git a/configure b/configure +index 0ac437c..8c6f4e5 100755 +--- a/configure ++++ b/configure +@@ -2333,6 +2333,7 @@ if $pkg_config --atleast-version=$glib_req_ver gthread-2.0 gmodule-2.0 > /dev/nu + then + glib_cflags=`$pkg_config --cflags gthread-2.0 gmodule-2.0 2>/dev/null` + glib_libs=`$pkg_config --libs gthread-2.0 gmodule-2.0 2>/dev/null` ++ CFLAGS="$glib_cflags $CFLAGS" + LIBS="$glib_libs $LIBS" + libs_qga="$glib_libs $libs_qga" + else +diff --git a/rules.mak b/rules.mak +index 4499745..0c5125d 100644 +--- a/rules.mak ++++ b/rules.mak +@@ -103,9 +103,6 @@ clean: clean-timestamp + + # magic to descend into other directories + +-obj := . +-old-nested-dirs := +- + define push-var + $(eval save-$2-$1 = $(value $1)) + $(eval $1 :=) +@@ -119,9 +116,11 @@ endef + + define unnest-dir + $(foreach var,$(nested-vars),$(call push-var,$(var),$1/)) +-$(eval obj := $(obj)/$1) ++$(eval obj-parent-$1 := $(obj)) ++$(eval obj := $(if $(obj),$(obj)/$1,$1)) + $(eval include $(SRC_PATH)/$1/Makefile.objs) +-$(eval obj := $(patsubst %/$1,%,$(obj))) ++$(eval obj := $(obj-parent-$1)) ++$(eval obj-parent-$1 := ) + $(foreach var,$(nested-vars),$(call pop-var,$(var),$1/)) + endef + +@@ -136,7 +135,12 @@ $(if $(nested-dirs), + endef + + define unnest-vars ++$(eval obj := $1) ++$(eval nested-vars := $2) ++$(eval old-nested-dirs := ) + $(call unnest-vars-1) ++$(if $1,$(foreach v,$(nested-vars),$(eval \ ++ $v := $(addprefix $1/,$($v))))) + $(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var))))) + $(shell mkdir -p $(sort $(foreach var,$(nested-vars),$(dir $($(var)))))) + $(foreach var,$(nested-vars), $(eval \ +-- +1.9.3 + diff --git a/SOURCES/kvm-savevm-Fix-potential-memory-leak.patch b/SOURCES/kvm-savevm-Fix-potential-memory-leak.patch new file mode 100644 index 0000000..68773f6 --- /dev/null +++ b/SOURCES/kvm-savevm-Fix-potential-memory-leak.patch @@ -0,0 +1,65 @@ +From 59e3d6e0995b2db39e4d87436c600e2475a9b502 Mon Sep 17 00:00:00 2001 +Message-Id: <59e3d6e0995b2db39e4d87436c600e2475a9b502.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:52:38 +0100 +Subject: [PATCH 02/46] savevm: Fix potential memory leak + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-3-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55690 +O-Subject: [RHEL7.0 PATCH 02/42] savevm: Fix potential memory leak +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit 4f080057767a684aab60998659e18f98c5fbefc7 +Author: Stefan Weil +Date: Sun Jun 16 13:33:05 2013 +0200 + + savevm: Fix potential memory leak + + The leak was reported by cppcheck. Fix it by moving the g_malloc0 after + the argument validity check. + + Signed-off-by: Stefan Weil + Signed-off-by: Michael Tokarev +--- + savevm.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + savevm.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/savevm.c b/savevm.c +index 4d12d92..4d898af 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -479,7 +479,7 @@ static const QEMUFileOps socket_write_ops = { + + QEMUFile *qemu_fopen_socket(int fd, const char *mode) + { +- QEMUFileSocket *s = g_malloc0(sizeof(QEMUFileSocket)); ++ QEMUFileSocket *s; + + if (mode == NULL || + (mode[0] != 'r' && mode[0] != 'w') || +@@ -488,6 +488,7 @@ QEMUFile *qemu_fopen_socket(int fd, const char *mode) + return NULL; + } + ++ s = g_malloc0(sizeof(QEMUFileSocket)); + s->fd = fd; + if (mode[0] == 'w') { + qemu_set_block(s->fd); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-savevm-Improve-error-message-for-blocked-migration.patch b/SOURCES/kvm-savevm-Improve-error-message-for-blocked-migration.patch new file mode 100644 index 0000000..9a4ac3d --- /dev/null +++ b/SOURCES/kvm-savevm-Improve-error-message-for-blocked-migration.patch @@ -0,0 +1,101 @@ +From 88b94264928e180cad4067a55cb328fe594985b9 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Fri, 26 Jan 2018 18:53:14 +0100 +Subject: [PATCH 3/4] savevm: Improve error message for blocked migration + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180126185315.2342-2-dgilbert@redhat.com> +Patchwork-id: 78730 +O-Subject: [RHEL7.5 qemu-kvm PATCH 1/2] savevm: Improve error message for blocked migration +Bugzilla: 1536883 +RH-Acked-by: Peter Xu +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Kevin Wolf + +If an internal snapshot can't be saved because migration is blocked +(most commonly probably because of AHCI), we had a really bad error +message: + +$ echo -e "savevm foo\nquit" | qemu -M q35 /tmp/test.qcow2 -monitor stdio +QEMU 2.2.50 monitor - type 'help' for more information +(qemu) savevm foo +Error -22 while writing VM +(qemu) quit + +This patch converts qemu_savevm_state() to the Error infrastructure so +that a useful error pointing to the problematic device is produced now: + +$ echo -e "savevm foo\nquit" | qemu -M q35 /tmp/test.qcow2 -monitor stdio +QEMU 2.2.50 monitor - type 'help' for more information +(qemu) savevm foo +State blocked by non-migratable device '0000:00:1f.2/ich9_ahci' +(qemu) quit + +Signed-off-by: Kevin Wolf +Reviewed-by: Eric Blake +Message-id: 1423574702-23072-1-git-send-email-kwolf@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5d80448c3fc566e505adfa2b566ec8074442c8e1) +Signed-off-by: Miroslav Rezanina +--- + savevm.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/savevm.c b/savevm.c +index 731d5c0..d34004e 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -2199,7 +2199,7 @@ void qemu_savevm_state_cancel(void) + } + } + +-static int qemu_savevm_state(QEMUFile *f) ++static int qemu_savevm_state(QEMUFile *f, Error **errp) + { + int ret; + MigrationParams params = { +@@ -2207,7 +2207,7 @@ static int qemu_savevm_state(QEMUFile *f) + .shared = 0 + }; + +- if (qemu_savevm_state_blocked(NULL)) { ++ if (qemu_savevm_state_blocked(errp)) { + return -EINVAL; + } + +@@ -2228,6 +2228,7 @@ static int qemu_savevm_state(QEMUFile *f) + } + if (ret != 0) { + qemu_savevm_state_cancel(); ++ error_setg_errno(errp, -ret, "Error while writing VM state"); + } + return ret; + } +@@ -2603,6 +2604,7 @@ void do_savevm(Monitor *mon, const QDict *qdict) + qemu_timeval tv; + struct tm tm; + const char *name = qdict_get_try_str(qdict, "name"); ++ Error *local_err = NULL; + + /* Verify if there is a device that doesn't support snapshots and is writable */ + bs = NULL; +@@ -2661,11 +2663,12 @@ void do_savevm(Monitor *mon, const QDict *qdict) + monitor_printf(mon, "Could not open VM state file\n"); + goto the_end; + } +- ret = qemu_savevm_state(f); ++ ret = qemu_savevm_state(f, &local_err); + vm_state_size = qemu_ftell(f); + qemu_fclose(f); + if (ret < 0) { +- monitor_printf(mon, "Error %d while writing VM\n", ret); ++ monitor_printf(mon, "%s\n", error_get_pretty(local_err)); ++ error_free(local_err); + goto the_end; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-savevm-fail-if-migration-blockers-are-present.patch b/SOURCES/kvm-savevm-fail-if-migration-blockers-are-present.patch new file mode 100644 index 0000000..62adbba --- /dev/null +++ b/SOURCES/kvm-savevm-fail-if-migration-blockers-are-present.patch @@ -0,0 +1,117 @@ +From 51568d18bbfef1adce26d8cd33f3f4a4c12b1e78 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Fri, 26 Jan 2018 18:53:15 +0100 +Subject: [PATCH 4/4] savevm: fail if migration blockers are present + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180126185315.2342-3-dgilbert@redhat.com> +Patchwork-id: 78732 +O-Subject: [RHEL7.5 qemu-kvm PATCH 2/2] savevm: fail if migration blockers are present +Bugzilla: 1536883 +RH-Acked-by: Peter Xu +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Greg Kurz + +QEMU has currently two ways to prevent migration to occur: +- migration blocker when it depends on runtime state +- VMStateDescription.unmigratable when migration is not supported at all + +This patch gathers all the logic into a single function to be called from +both the savevm and the migrate paths. + +This fixes a bug with 9p, at least, where savevm would succeed and the +following would happen in the guest after loadvm: + +$ ls /host +ls: cannot access /host: Protocol error + +With this patch: + +(qemu) savevm foo +Migration is disabled when VirtFS export path '/' is mounted in the guest +using mount_tag 'host' + +Signed-off-by: Greg Kurz +Reviewed-by: Paolo Bonzini +Message-Id: <146239057139.11271.9011797645454781543.stgit@bahia.huguette.org> +[Update subject according to Paolo's suggestion - Amit] +(cherry picked from commit 24f3902b088cd4f2dbebfd90527b5d81d6a050e9) + dgilbert: Manual merge + +Signed-off-by: Amit Shah +Signed-off-by: Miroslav Rezanina +--- + include/migration/migration.h | 1 + + migration.c | 21 +++++++++++++++------ + savevm.c | 2 +- + 3 files changed, 17 insertions(+), 7 deletions(-) + +diff --git a/include/migration/migration.h b/include/migration/migration.h +index c99a67c..0760984 100644 +--- a/include/migration/migration.h ++++ b/include/migration/migration.h +@@ -90,6 +90,7 @@ int migrate_fd_close(MigrationState *s); + + void add_migration_state_change_notifier(Notifier *notify); + void remove_migration_state_change_notifier(Notifier *notify); ++bool migration_is_blocked(Error **errp); + bool migration_in_setup(MigrationState *); + bool migration_has_finished(MigrationState *); + bool migration_has_failed(MigrationState *); +diff --git a/migration.c b/migration.c +index e8c5939..5591601 100644 +--- a/migration.c ++++ b/migration.c +@@ -417,6 +417,20 @@ void migrate_del_blocker(Error *reason) + migration_blockers = g_slist_remove(migration_blockers, reason); + } + ++bool migration_is_blocked(Error **errp) ++{ ++ if (qemu_savevm_state_blocked(errp)) { ++ return true; ++ } ++ ++ if (migration_blockers) { ++ *errp = error_copy(migration_blockers->data); ++ return true; ++ } ++ ++ return false; ++} ++ + void qmp_migrate(const char *uri, bool has_blk, bool blk, + bool has_inc, bool inc, bool has_detach, bool detach, + Error **errp) +@@ -447,12 +461,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, + return; + } + +- if (qemu_savevm_state_blocked(errp)) { +- return; +- } +- +- if (migration_blockers) { +- *errp = error_copy(migration_blockers->data); ++ if (migration_is_blocked(errp)) { + return; + } + +diff --git a/savevm.c b/savevm.c +index d34004e..0216df2 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -2207,7 +2207,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp) + .shared = 0 + }; + +- if (qemu_savevm_state_blocked(errp)) { ++ if (migration_is_blocked(errp)) { + return -EINVAL; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-savevm-fix-wrong-initialization-by-ram_control_load_.patch b/SOURCES/kvm-savevm-fix-wrong-initialization-by-ram_control_load_.patch new file mode 100644 index 0000000..d019c6f --- /dev/null +++ b/SOURCES/kvm-savevm-fix-wrong-initialization-by-ram_control_load_.patch @@ -0,0 +1,59 @@ +From 9933c07995dc978f8ea636cead7c66d78428484b Mon Sep 17 00:00:00 2001 +Message-Id: <9933c07995dc978f8ea636cead7c66d78428484b.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Nigel Croxon +Date: Thu, 14 Nov 2013 22:53:10 +0100 +Subject: [PATCH 34/46] savevm: fix wrong initialization by + ram_control_load_hook + +RH-Author: Nigel Croxon +Message-id: <1384469598-13137-35-git-send-email-ncroxon@redhat.com> +Patchwork-id: 55720 +O-Subject: [RHEL7.0 PATCH 34/42] savevm: fix wrong initialization by ram_control_load_hook +Bugzilla: 1011720 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1011720 +https://bugzilla.redhat.com/show_bug.cgi?id=1011720 + +>From commit ID: +commit c77a5f2daa1ccbd825d59b95c70207c0a196bb94 +Author: Lei Li +Date: Wed Sep 4 17:02:35 2013 +0800 + + savevm: fix wrong initialization by ram_control_load_hook + + It should set negative error value rather than 0 in QEMUFile + if there has been an error. + + Reviewed-by: Michael R. Hines + Signed-off-by: Lei Li + Signed-off-by: Juan Quintela +--- + savevm.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Signed-off-by: Michal Novotny +--- + savevm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/savevm.c b/savevm.c +index 03fc4d9..a0d4e09 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -642,7 +642,7 @@ void ram_control_after_iterate(QEMUFile *f, uint64_t flags) + + void ram_control_load_hook(QEMUFile *f, uint64_t flags) + { +- int ret = 0; ++ int ret = -EINVAL; + + if (f->ops->hook_ram_load) { + ret = f->ops->hook_ram_load(f, f->opaque, flags); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-savevm-qmp_xen_save_devices_state-use-error_setg_fil.patch b/SOURCES/kvm-savevm-qmp_xen_save_devices_state-use-error_setg_fil.patch new file mode 100644 index 0000000..d1c7451 --- /dev/null +++ b/SOURCES/kvm-savevm-qmp_xen_save_devices_state-use-error_setg_fil.patch @@ -0,0 +1,45 @@ +From 1cb04a74ed9b2f4a05ac21ce1e9a5ca884c9b97e Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 31 Oct 2013 16:29:29 +0100 +Subject: [PATCH 10/29] savevm: qmp_xen_save_devices_state(): use error_setg_file_open() + +RH-Author: Laszlo Ersek +Message-id: <1383236971-6067-7-git-send-email-lersek@redhat.com> +Patchwork-id: 55196 +O-Subject: [RHEL-7 qemu-kvm PATCH 6/8] savevm: qmp_xen_save_devices_state(): use error_setg_file_open() +Bugzilla: 907743 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini + +From: Luiz Capitulino + +Signed-off-by: Luiz Capitulino +Acked-by: Kevin Wolf +(cherry picked from commit 1befce9652a1b7cfca0191b3031fae3cbce26ef0) +Signed-off-by: Laszlo Ersek +--- + savevm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + savevm.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/savevm.c b/savevm.c +index d3bd0ec..1ed7f05 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -2419,7 +2419,7 @@ void qmp_xen_save_devices_state(const char *filename, Error **errp) + + f = qemu_fopen(filename, "wb"); + if (!f) { +- error_set(errp, QERR_OPEN_FILE_FAILED, filename); ++ error_setg_file_open(errp, errno, filename); + goto the_end; + } + ret = qemu_save_device_state(f); +-- +1.7.1 + diff --git a/SOURCES/kvm-scripts-dump-guest-memory.py-Cleanup-functions.patch b/SOURCES/kvm-scripts-dump-guest-memory.py-Cleanup-functions.patch new file mode 100644 index 0000000..9bb1025 --- /dev/null +++ b/SOURCES/kvm-scripts-dump-guest-memory.py-Cleanup-functions.patch @@ -0,0 +1,201 @@ +From e40871f4bf8ca981075eb7baa5a8ff0f3f8f4a67 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:07 +0100 +Subject: [PATCH 36/41] scripts/dump-guest-memory.py: Cleanup functions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-37-marcandre.lureau@redhat.com> +Patchwork-id: 78387 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 36/41] scripts/dump-guest-memory.py: Cleanup functions +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Janosch Frank + +Increase readability by adding newlines and comments, as well as +removing wrong whitespaces and C style braces around conditionals and +loops. + +Reviewed-by: Laszlo Ersek +Signed-off-by: Janosch Frank +Message-Id: <1453464520-3882-5-git-send-email-frankja@linux.vnet.ibm.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 6782c0e785a0ba48cd96d99f2402cb87af027d26) + +RHEL: conflicts due to qtailq usage + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 69 +++++++++++++++++++++++++++++--------------- + 1 file changed, 46 insertions(+), 23 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index d44de99..3d54d05 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -69,35 +69,58 @@ ELF64_PHDR = ("I" # p_type + ) + + def int128_get64(val): +- assert (val["hi"] == 0) ++ """Returns low 64bit part of Int128 struct.""" ++ ++ assert val["hi"] == 0 + return val["lo"] + + def qtailq_foreach(head, field_str): ++ """Generator for qtails.""" ++ + var_p = head["tqh_first"] + while (var_p != 0): + var = var_p.dereference() +- yield var + var_p = var[field_str]["tqe_next"] ++ yield var + + def qemu_get_ram_block(ram_addr): ++ """Returns the RAMBlock struct to which the given address belongs.""" ++ + ram_blocks = gdb.parse_and_eval("ram_list.blocks") ++ + for block in qtailq_foreach(ram_blocks, "next"): + if (ram_addr - block["offset"] < block["length"]): + return block ++ + raise gdb.GdbError("Bad ram offset %x" % ram_addr) + ++ + def qemu_get_ram_ptr(ram_addr): ++ """Returns qemu vaddr for given guest physical address.""" ++ + block = qemu_get_ram_block(ram_addr) + return block["host"] + (ram_addr - block["offset"]) + +-def memory_region_get_ram_ptr(mr): +- if (mr["alias"] != 0): +- return (memory_region_get_ram_ptr(mr["alias"].dereference()) + +- mr["alias_offset"]) +- return qemu_get_ram_ptr(mr["ram_addr"] & TARGET_PAGE_MASK) ++ ++def memory_region_get_ram_ptr(memory_region): ++ if memory_region["alias"] != 0: ++ return (memory_region_get_ram_ptr(memory_region["alias"].dereference()) ++ + memory_region["alias_offset"]) ++ ++ return qemu_get_ram_ptr(memory_region["ram_addr"] & TARGET_PAGE_MASK) ++ + + def get_guest_phys_blocks(): ++ """Returns a list of ram blocks. ++ ++ Each block entry contains: ++ 'target_start': guest block phys start address ++ 'target_end': guest block phys end address ++ 'host_addr': qemu vaddr of the block's start ++ """ ++ + guest_phys_blocks = [] ++ + print("guest RAM blocks:") + print("target_start target_end host_addr message " + "count") +@@ -111,29 +134,29 @@ def get_guest_phys_blocks(): + # compatibility. Otherwise range doesn't cast the value itself and + # breaks. + for cur in range(int(current_map["nr"])): +- flat_range = (current_map["ranges"] + cur).dereference() +- mr = flat_range["mr"].dereference() ++ flat_range = (current_map["ranges"] + cur).dereference() ++ memory_region = flat_range["mr"].dereference() + + # we only care about RAM +- if (not mr["ram"]): ++ if not memory_region["ram"]: + continue + + section_size = int128_get64(flat_range["addr"]["size"]) + target_start = int128_get64(flat_range["addr"]["start"]) +- target_end = target_start + section_size +- host_addr = (memory_region_get_ram_ptr(mr) + +- flat_range["offset_in_region"]) ++ target_end = target_start + section_size ++ host_addr = (memory_region_get_ram_ptr(memory_region) ++ + flat_range["offset_in_region"]) + predecessor = None + + # find continuity in guest physical address space +- if (len(guest_phys_blocks) > 0): ++ if len(guest_phys_blocks) > 0: + predecessor = guest_phys_blocks[-1] + predecessor_size = (predecessor["target_end"] - + predecessor["target_start"]) + + # the memory API guarantees monotonically increasing + # traversal +- assert (predecessor["target_end"] <= target_start) ++ assert predecessor["target_end"] <= target_start + + # we want continuity in both guest-physical and + # host-virtual memory +@@ -141,11 +164,11 @@ def get_guest_phys_blocks(): + predecessor["host_addr"] + predecessor_size != host_addr): + predecessor = None + +- if (predecessor is None): ++ if predecessor is None: + # isolated mapping, add it to the list + guest_phys_blocks.append({"target_start": target_start, +- "target_end" : target_end, +- "host_addr" : host_addr}) ++ "target_end": target_end, ++ "host_addr": host_addr}) + message = "added" + else: + # expand predecessor until @target_end; predecessor's +@@ -282,7 +305,7 @@ shape and this command should mostly work.""" + # We should never reach PN_XNUM for paging=false dumps: there's + # just a handful of discontiguous ranges after merging. + self.phdr_num += len(self.guest_phys_blocks) +- assert (self.phdr_num < PN_XNUM) ++ assert self.phdr_num < PN_XNUM + + # Calculate the ELF file offset where the memory dump commences: + # +@@ -313,15 +336,15 @@ shape and this command should mostly work.""" + def dump_iterate(self, vmcore): + qemu_core = gdb.inferiors()[0] + for block in self.guest_phys_blocks: +- cur = block["host_addr"] ++ cur = block["host_addr"] + left = block["target_end"] - block["target_start"] + print("dumping range at %016x for length %016x" % + (cur.cast(UINTPTR_T), left)) +- while (left > 0): ++ while left > 0: + chunk_size = min(TARGET_PAGE_SIZE, left) + chunk = qemu_core.read_memory(cur, chunk_size) + vmcore.write(chunk) +- cur += chunk_size ++ cur += chunk_size + left -= chunk_size + + def create_vmcore(self, filename): +@@ -336,7 +359,7 @@ shape and this command should mostly work.""" + self.dont_repeat() + + argv = gdb.string_to_argv(args) +- if (len(argv) != 1): ++ if len(argv) != 1: + raise gdb.GdbError("usage: dump-guest-memory FILE") + + self.dump_init() +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scripts-dump-guest-memory.py-Improve-python-3-compat.patch b/SOURCES/kvm-scripts-dump-guest-memory.py-Improve-python-3-compat.patch new file mode 100644 index 0000000..e8a2ab9 --- /dev/null +++ b/SOURCES/kvm-scripts-dump-guest-memory.py-Improve-python-3-compat.patch @@ -0,0 +1,98 @@ +From 58efb548d48964d4ff7bdcebdb97ec10e708e5ed Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:06 +0100 +Subject: [PATCH 35/41] scripts/dump-guest-memory.py: Improve python 3 + compatibility +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-36-marcandre.lureau@redhat.com> +Patchwork-id: 78385 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 35/41] scripts/dump-guest-memory.py: Improve python 3 compatibility +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Janosch Frank + +This commit does not make the script python 3 compatible, it is a +preparation that fixes the easy and common incompatibilities. + +Print is a function in python 3 and therefore needs braces around its +arguments. + +Range does not cast a gdb.Value object to int in python 3, we have to +do it ourselves. + +Reviewed-by: Laszlo Ersek +Signed-off-by: Janosch Frank +Message-Id: <1453464520-3882-4-git-send-email-frankja@linux.vnet.ibm.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 7cb1089d5fbd7b2d9497f111ce948edef41df32d) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 26 +++++++++++++++----------- + 1 file changed, 15 insertions(+), 11 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 7d93d86..d44de99 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -98,15 +98,19 @@ def memory_region_get_ram_ptr(mr): + + def get_guest_phys_blocks(): + guest_phys_blocks = [] +- print "guest RAM blocks:" +- print ("target_start target_end host_addr message " +- "count") +- print ("---------------- ---------------- ---------------- ------- " +- "-----") ++ print("guest RAM blocks:") ++ print("target_start target_end host_addr message " ++ "count") ++ print("---------------- ---------------- ---------------- ------- " ++ "-----") + + current_map_p = gdb.parse_and_eval("address_space_memory.current_map") + current_map = current_map_p.dereference() +- for cur in range(current_map["nr"]): ++ ++ # Conversion to int is needed for python 3 ++ # compatibility. Otherwise range doesn't cast the value itself and ++ # breaks. ++ for cur in range(int(current_map["nr"])): + flat_range = (current_map["ranges"] + cur).dereference() + mr = flat_range["mr"].dereference() + +@@ -149,9 +153,9 @@ def get_guest_phys_blocks(): + predecessor["target_end"] = target_end + message = "joined" + +- print ("%016x %016x %016x %-7s %5u" % +- (target_start, target_end, host_addr.cast(UINTPTR_T), +- message, len(guest_phys_blocks))) ++ print("%016x %016x %016x %-7s %5u" % ++ (target_start, target_end, host_addr.cast(UINTPTR_T), ++ message, len(guest_phys_blocks))) + + return guest_phys_blocks + +@@ -311,8 +315,8 @@ shape and this command should mostly work.""" + for block in self.guest_phys_blocks: + cur = block["host_addr"] + left = block["target_end"] - block["target_start"] +- print ("dumping range at %016x for length %016x" % +- (cur.cast(UINTPTR_T), left)) ++ print("dumping range at %016x for length %016x" % ++ (cur.cast(UINTPTR_T), left)) + while (left > 0): + chunk_size = min(TARGET_PAGE_SIZE, left) + chunk = qemu_core.read_memory(cur, chunk_size) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scripts-dump-guest-memory.py-Introduce-multi-arch-su.patch b/SOURCES/kvm-scripts-dump-guest-memory.py-Introduce-multi-arch-su.patch new file mode 100644 index 0000000..18055c3 --- /dev/null +++ b/SOURCES/kvm-scripts-dump-guest-memory.py-Introduce-multi-arch-su.patch @@ -0,0 +1,612 @@ +From 0867b6efa038add3ce58fcec50b27cad8718d43a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:08 +0100 +Subject: [PATCH 37/41] scripts/dump-guest-memory.py: Introduce multi-arch + support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-38-marcandre.lureau@redhat.com> +Patchwork-id: 78386 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 37/41] scripts/dump-guest-memory.py: Introduce multi-arch support +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Janosch Frank + +By modelling the ELF with ctypes we not only gain full python 3 +support but can also create dumps for different architectures more easily. + +Tested-by: Andrew Jones +Acked-by: Laszlo Ersek +Signed-off-by: Janosch Frank +Message-Id: <1453464520-3882-6-git-send-email-frankja@linux.vnet.ibm.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 368e3adc8928b2786939a25a336527f83f18e926) + +RHEL: Change it to be x86-64 only, to keep compatibility and limit the + feature exposure. + + Backport it because ctypes have various benefits simplifying the + following patch. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 488 ++++++++++++++++++++++++++++--------------- + 1 file changed, 323 insertions(+), 165 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 3d54d05..308cfca 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -6,6 +6,7 @@ + # + # Authors: + # Laszlo Ersek ++# Janosch Frank + # + # This work is licensed under the terms of the GNU GPL, version 2 or later. See + # the COPYING file in the top-level directory. +@@ -15,58 +16,303 @@ + # "help data" summary), and it should match how other help texts look in + # gdb. + +-import struct ++import ctypes + + UINTPTR_T = gdb.lookup_type("uintptr_t") + + TARGET_PAGE_SIZE = 0x1000 + TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000 + +-# Various ELF constants +-EM_X86_64 = 62 # AMD x86-64 target machine +-ELFDATA2LSB = 1 # little endian +-ELFCLASS64 = 2 +-ELFMAG = "\x7FELF" +-EV_CURRENT = 1 +-ET_CORE = 4 +-PT_LOAD = 1 +-PT_NOTE = 4 +- + # Special value for e_phnum. This indicates that the real number of + # program headers is too large to fit into e_phnum. Instead the real + # value is in the field sh_info of section 0. + PN_XNUM = 0xFFFF + +-# Format strings for packing and header size calculation. +-ELF64_EHDR = ("4s" # e_ident/magic +- "B" # e_ident/class +- "B" # e_ident/data +- "B" # e_ident/version +- "B" # e_ident/osabi +- "8s" # e_ident/pad +- "H" # e_type +- "H" # e_machine +- "I" # e_version +- "Q" # e_entry +- "Q" # e_phoff +- "Q" # e_shoff +- "I" # e_flags +- "H" # e_ehsize +- "H" # e_phentsize +- "H" # e_phnum +- "H" # e_shentsize +- "H" # e_shnum +- "H" # e_shstrndx +- ) +-ELF64_PHDR = ("I" # p_type +- "I" # p_flags +- "Q" # p_offset +- "Q" # p_vaddr +- "Q" # p_paddr +- "Q" # p_filesz +- "Q" # p_memsz +- "Q" # p_align +- ) ++EV_CURRENT = 1 ++ ++ELFCLASS32 = 1 ++ELFCLASS64 = 2 ++ ++ELFDATA2LSB = 1 ++ELFDATA2MSB = 2 ++ ++ET_CORE = 4 ++ ++PT_LOAD = 1 ++PT_NOTE = 4 ++ ++EM_386 = 3 ++EM_PPC = 20 ++EM_PPC64 = 21 ++EM_S390 = 22 ++EM_AARCH = 183 ++EM_X86_64 = 62 ++ ++class ELF(object): ++ """Representation of a ELF file.""" ++ ++ def __init__(self, arch): ++ self.ehdr = None ++ self.notes = [] ++ self.segments = [] ++ self.notes_size = 0 ++ self.endianess = None ++ self.elfclass = ELFCLASS64 ++ ++ if arch == 'aarch64-le': ++ self.endianess = ELFDATA2LSB ++ self.elfclass = ELFCLASS64 ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_AARCH ++ ++ elif arch == 'aarch64-be': ++ self.endianess = ELFDATA2MSB ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_AARCH ++ ++ elif arch == 'X86_64': ++ self.endianess = ELFDATA2LSB ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_X86_64 ++ ++ elif arch == '386': ++ self.endianess = ELFDATA2LSB ++ self.elfclass = ELFCLASS32 ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_386 ++ ++ elif arch == 's390': ++ self.endianess = ELFDATA2MSB ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_S390 ++ ++ elif arch == 'ppc64-le': ++ self.endianess = ELFDATA2LSB ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_PPC64 ++ ++ elif arch == 'ppc64-be': ++ self.endianess = ELFDATA2MSB ++ self.ehdr = get_arch_ehdr(self.endianess, self.elfclass) ++ self.ehdr.e_machine = EM_PPC64 ++ ++ else: ++ raise gdb.GdbError("No valid arch type specified.\n" ++ "Currently supported types:\n" ++ "aarch64-be, aarch64-le, X86_64, 386, s390, " ++ "ppc64-be, ppc64-le") ++ ++ self.add_segment(PT_NOTE, 0, 0) ++ ++ def add_note(self, n_name, n_desc, n_type): ++ """Adds a note to the ELF.""" ++ ++ note = get_arch_note(self.endianess, len(n_name), len(n_desc)) ++ note.n_namesz = len(n_name) + 1 ++ note.n_descsz = len(n_desc) ++ note.n_name = n_name.encode() ++ note.n_type = n_type ++ ++ # Desc needs to be 4 byte aligned (although the 64bit spec ++ # specifies 8 byte). When defining n_desc as uint32 it will be ++ # automatically aligned but we need the memmove to copy the ++ # string into it. ++ ctypes.memmove(note.n_desc, n_desc.encode(), len(n_desc)) ++ ++ self.notes.append(note) ++ self.segments[0].p_filesz += ctypes.sizeof(note) ++ self.segments[0].p_memsz += ctypes.sizeof(note) ++ ++ def add_segment(self, p_type, p_paddr, p_size): ++ """Adds a segment to the elf.""" ++ ++ phdr = get_arch_phdr(self.endianess, self.elfclass) ++ phdr.p_type = p_type ++ phdr.p_paddr = p_paddr ++ phdr.p_filesz = p_size ++ phdr.p_memsz = p_size ++ self.segments.append(phdr) ++ self.ehdr.e_phnum += 1 ++ ++ def to_file(self, elf_file): ++ """Writes all ELF structures to the the passed file. ++ ++ Structure: ++ Ehdr ++ Segment 0:PT_NOTE ++ Segment 1:PT_LOAD ++ Segment N:PT_LOAD ++ Note 0..N ++ Dump contents ++ """ ++ elf_file.write(self.ehdr) ++ off = ctypes.sizeof(self.ehdr) + \ ++ len(self.segments) * ctypes.sizeof(self.segments[0]) ++ ++ for phdr in self.segments: ++ phdr.p_offset = off ++ elf_file.write(phdr) ++ off += phdr.p_filesz ++ ++ for note in self.notes: ++ elf_file.write(note) ++ ++ ++def get_arch_note(endianess, len_name, len_desc): ++ """Returns a Note class with the specified endianess.""" ++ ++ if endianess == ELFDATA2LSB: ++ superclass = ctypes.LittleEndianStructure ++ else: ++ superclass = ctypes.BigEndianStructure ++ ++ len_name = len_name + 1 ++ ++ class Note(superclass): ++ """Represents an ELF note, includes the content.""" ++ ++ _fields_ = [("n_namesz", ctypes.c_uint32), ++ ("n_descsz", ctypes.c_uint32), ++ ("n_type", ctypes.c_uint32), ++ ("n_name", ctypes.c_char * len_name), ++ ("n_desc", ctypes.c_uint32 * ((len_desc + 3) // 4))] ++ return Note() ++ ++ ++class Ident(ctypes.Structure): ++ """Represents the ELF ident array in the ehdr structure.""" ++ ++ _fields_ = [('ei_mag0', ctypes.c_ubyte), ++ ('ei_mag1', ctypes.c_ubyte), ++ ('ei_mag2', ctypes.c_ubyte), ++ ('ei_mag3', ctypes.c_ubyte), ++ ('ei_class', ctypes.c_ubyte), ++ ('ei_data', ctypes.c_ubyte), ++ ('ei_version', ctypes.c_ubyte), ++ ('ei_osabi', ctypes.c_ubyte), ++ ('ei_abiversion', ctypes.c_ubyte), ++ ('ei_pad', ctypes.c_ubyte * 7)] ++ ++ def __init__(self, endianess, elfclass): ++ self.ei_mag0 = 0x7F ++ self.ei_mag1 = ord('E') ++ self.ei_mag2 = ord('L') ++ self.ei_mag3 = ord('F') ++ self.ei_class = elfclass ++ self.ei_data = endianess ++ self.ei_version = EV_CURRENT ++ ++ ++def get_arch_ehdr(endianess, elfclass): ++ """Returns a EHDR64 class with the specified endianess.""" ++ ++ if endianess == ELFDATA2LSB: ++ superclass = ctypes.LittleEndianStructure ++ else: ++ superclass = ctypes.BigEndianStructure ++ ++ class EHDR64(superclass): ++ """Represents the 64 bit ELF header struct.""" ++ ++ _fields_ = [('e_ident', Ident), ++ ('e_type', ctypes.c_uint16), ++ ('e_machine', ctypes.c_uint16), ++ ('e_version', ctypes.c_uint32), ++ ('e_entry', ctypes.c_uint64), ++ ('e_phoff', ctypes.c_uint64), ++ ('e_shoff', ctypes.c_uint64), ++ ('e_flags', ctypes.c_uint32), ++ ('e_ehsize', ctypes.c_uint16), ++ ('e_phentsize', ctypes.c_uint16), ++ ('e_phnum', ctypes.c_uint16), ++ ('e_shentsize', ctypes.c_uint16), ++ ('e_shnum', ctypes.c_uint16), ++ ('e_shstrndx', ctypes.c_uint16)] ++ ++ def __init__(self): ++ super(superclass, self).__init__() ++ self.e_ident = Ident(endianess, elfclass) ++ self.e_type = ET_CORE ++ self.e_version = EV_CURRENT ++ self.e_ehsize = ctypes.sizeof(self) ++ self.e_phoff = ctypes.sizeof(self) ++ self.e_phentsize = ctypes.sizeof(get_arch_phdr(endianess, elfclass)) ++ self.e_phnum = 0 ++ ++ ++ class EHDR32(superclass): ++ """Represents the 32 bit ELF header struct.""" ++ ++ _fields_ = [('e_ident', Ident), ++ ('e_type', ctypes.c_uint16), ++ ('e_machine', ctypes.c_uint16), ++ ('e_version', ctypes.c_uint32), ++ ('e_entry', ctypes.c_uint32), ++ ('e_phoff', ctypes.c_uint32), ++ ('e_shoff', ctypes.c_uint32), ++ ('e_flags', ctypes.c_uint32), ++ ('e_ehsize', ctypes.c_uint16), ++ ('e_phentsize', ctypes.c_uint16), ++ ('e_phnum', ctypes.c_uint16), ++ ('e_shentsize', ctypes.c_uint16), ++ ('e_shnum', ctypes.c_uint16), ++ ('e_shstrndx', ctypes.c_uint16)] ++ ++ def __init__(self): ++ super(superclass, self).__init__() ++ self.e_ident = Ident(endianess, elfclass) ++ self.e_type = ET_CORE ++ self.e_version = EV_CURRENT ++ self.e_ehsize = ctypes.sizeof(self) ++ self.e_phoff = ctypes.sizeof(self) ++ self.e_phentsize = ctypes.sizeof(get_arch_phdr(endianess, elfclass)) ++ self.e_phnum = 0 ++ ++ # End get_arch_ehdr ++ if elfclass == ELFCLASS64: ++ return EHDR64() ++ else: ++ return EHDR32() ++ ++ ++def get_arch_phdr(endianess, elfclass): ++ """Returns a 32 or 64 bit PHDR class with the specified endianess.""" ++ ++ if endianess == ELFDATA2LSB: ++ superclass = ctypes.LittleEndianStructure ++ else: ++ superclass = ctypes.BigEndianStructure ++ ++ class PHDR64(superclass): ++ """Represents the 64 bit ELF program header struct.""" ++ ++ _fields_ = [('p_type', ctypes.c_uint32), ++ ('p_flags', ctypes.c_uint32), ++ ('p_offset', ctypes.c_uint64), ++ ('p_vaddr', ctypes.c_uint64), ++ ('p_paddr', ctypes.c_uint64), ++ ('p_filesz', ctypes.c_uint64), ++ ('p_memsz', ctypes.c_uint64), ++ ('p_align', ctypes.c_uint64)] ++ ++ class PHDR32(superclass): ++ """Represents the 32 bit ELF program header struct.""" ++ ++ _fields_ = [('p_type', ctypes.c_uint32), ++ ('p_offset', ctypes.c_uint32), ++ ('p_vaddr', ctypes.c_uint32), ++ ('p_paddr', ctypes.c_uint32), ++ ('p_filesz', ctypes.c_uint32), ++ ('p_memsz', ctypes.c_uint32), ++ ('p_flags', ctypes.c_uint32), ++ ('p_align', ctypes.c_uint32)] ++ ++ # End get_arch_phdr ++ if elfclass == ELFCLASS64: ++ return PHDR64() ++ else: ++ return PHDR32() ++ + + def int128_get64(val): + """Returns low 64bit part of Int128 struct.""" +@@ -186,20 +432,22 @@ def get_guest_phys_blocks(): + class DumpGuestMemory(gdb.Command): + """Extract guest vmcore from qemu process coredump. + +-The sole argument is FILE, identifying the target file to write the +-guest vmcore to. ++The two required arguments are FILE and ARCH: ++FILE identifies the target file to write the guest vmcore to. ++ARCH specifies the architecture for which the core will be generated. + + This GDB command reimplements the dump-guest-memory QMP command in + python, using the representation of guest memory as captured in the qemu + coredump. The qemu process that has been dumped must have had the +-command line option "-machine dump-guest-core=on". ++command line option "-machine dump-guest-core=on" which is the default. + + For simplicity, the "paging", "begin" and "end" parameters of the QMP + command are not supported -- no attempt is made to get the guest's + internal paging structures (ie. paging=false is hard-wired), and guest + memory is always fully dumped. + +-Only x86_64 guests are supported. ++Currently aarch64-be, aarch64-le, X86_64, 386, s390, ppc64-be, ++ppc64-le guests are supported. + + The CORE/NT_PRSTATUS and QEMU notes (that is, the VCPUs' statuses) are + not written to the vmcore. Preparing these would require context that is +@@ -217,129 +465,39 @@ shape and this command should mostly work.""" + super(DumpGuestMemory, self).__init__("dump-guest-memory", + gdb.COMMAND_DATA, + gdb.COMPLETE_FILENAME) +- self.elf64_ehdr_le = struct.Struct("<%s" % ELF64_EHDR) +- self.elf64_phdr_le = struct.Struct("<%s" % ELF64_PHDR) ++ self.elf = None + self.guest_phys_blocks = None + +- def cpu_get_dump_info(self): +- # We can't synchronize the registers with KVM post-mortem, and +- # the bits in (first_x86_cpu->env.hflags) seem to be stale; they +- # may not reflect long mode for example. Hence just assume the +- # most common values. This also means that instruction pointer +- # etc. will be bogus in the dump, but at least the RAM contents +- # should be valid. +- self.dump_info = {"d_machine": EM_X86_64, +- "d_endian" : ELFDATA2LSB, +- "d_class" : ELFCLASS64} +- +- def encode_elf64_ehdr_le(self): +- return self.elf64_ehdr_le.pack( +- ELFMAG, # e_ident/magic +- self.dump_info["d_class"], # e_ident/class +- self.dump_info["d_endian"], # e_ident/data +- EV_CURRENT, # e_ident/version +- 0, # e_ident/osabi +- "", # e_ident/pad +- ET_CORE, # e_type +- self.dump_info["d_machine"], # e_machine +- EV_CURRENT, # e_version +- 0, # e_entry +- self.elf64_ehdr_le.size, # e_phoff +- 0, # e_shoff +- 0, # e_flags +- self.elf64_ehdr_le.size, # e_ehsize +- self.elf64_phdr_le.size, # e_phentsize +- self.phdr_num, # e_phnum +- 0, # e_shentsize +- 0, # e_shnum +- 0 # e_shstrndx +- ) +- +- def encode_elf64_note_le(self): +- return self.elf64_phdr_le.pack(PT_NOTE, # p_type +- 0, # p_flags +- (self.memory_offset - +- len(self.note)), # p_offset +- 0, # p_vaddr +- 0, # p_paddr +- len(self.note), # p_filesz +- len(self.note), # p_memsz +- 0 # p_align +- ) +- +- def encode_elf64_load_le(self, offset, start_hwaddr, range_size): +- return self.elf64_phdr_le.pack(PT_LOAD, # p_type +- 0, # p_flags +- offset, # p_offset +- 0, # p_vaddr +- start_hwaddr, # p_paddr +- range_size, # p_filesz +- range_size, # p_memsz +- 0 # p_align +- ) +- +- def note_init(self, name, desc, type): +- # name must include a trailing NUL +- namesz = (len(name) + 1 + 3) / 4 * 4 +- descsz = (len(desc) + 3) / 4 * 4 +- fmt = ("<" # little endian +- "I" # n_namesz +- "I" # n_descsz +- "I" # n_type +- "%us" # name +- "%us" # desc +- % (namesz, descsz)) +- self.note = struct.pack(fmt, +- len(name) + 1, len(desc), type, name, desc) +- +- def dump_init(self): +- self.guest_phys_blocks = get_guest_phys_blocks() +- self.cpu_get_dump_info() +- # we have no way to retrieve the VCPU status from KVM +- # post-mortem +- self.note_init("NONE", "EMPTY", 0) +- +- # Account for PT_NOTE. +- self.phdr_num = 1 +- +- # We should never reach PN_XNUM for paging=false dumps: there's +- # just a handful of discontiguous ranges after merging. +- self.phdr_num += len(self.guest_phys_blocks) +- assert self.phdr_num < PN_XNUM +- +- # Calculate the ELF file offset where the memory dump commences: +- # +- # ELF header +- # PT_NOTE +- # PT_LOAD: 1 +- # PT_LOAD: 2 +- # ... +- # PT_LOAD: len(self.guest_phys_blocks) +- # ELF note +- # memory dump +- self.memory_offset = (self.elf64_ehdr_le.size + +- self.elf64_phdr_le.size * self.phdr_num + +- len(self.note)) +- +- def dump_begin(self, vmcore): +- vmcore.write(self.encode_elf64_ehdr_le()) +- vmcore.write(self.encode_elf64_note_le()) +- running = self.memory_offset ++ def dump_init(self, vmcore): ++ """Prepares and writes ELF structures to core file.""" ++ ++ # Needed to make crash happy, data for more useful notes is ++ # not available in a qemu core. ++ self.elf.add_note("NONE", "EMPTY", 0) ++ ++ # We should never reach PN_XNUM for paging=false dumps, ++ # there's just a handful of discontiguous ranges after ++ # merging. ++ # The constant is needed to account for the PT_NOTE segment. ++ phdr_num = len(self.guest_phys_blocks) + 1 ++ assert phdr_num < PN_XNUM ++ + for block in self.guest_phys_blocks: +- range_size = block["target_end"] - block["target_start"] +- vmcore.write(self.encode_elf64_load_le(running, +- block["target_start"], +- range_size)) +- running += range_size +- vmcore.write(self.note) ++ block_size = block["target_end"] - block["target_start"] ++ self.elf.add_segment(PT_LOAD, block["target_start"], block_size) ++ ++ self.elf.to_file(vmcore) + + def dump_iterate(self, vmcore): ++ """Writes guest core to file.""" ++ + qemu_core = gdb.inferiors()[0] + for block in self.guest_phys_blocks: + cur = block["host_addr"] + left = block["target_end"] - block["target_start"] + print("dumping range at %016x for length %016x" % + (cur.cast(UINTPTR_T), left)) ++ + while left > 0: + chunk_size = min(TARGET_PAGE_SIZE, left) + chunk = qemu_core.read_memory(cur, chunk_size) +@@ -347,13 +505,9 @@ shape and this command should mostly work.""" + cur += chunk_size + left -= chunk_size + +- def create_vmcore(self, filename): +- vmcore = open(filename, "wb") +- self.dump_begin(vmcore) +- self.dump_iterate(vmcore) +- vmcore.close() +- + def invoke(self, args, from_tty): ++ """Handles command invocation from gdb.""" ++ + # Unwittingly pressing the Enter key after the command should + # not dump the same multi-gig coredump to the same file. + self.dont_repeat() +@@ -362,7 +516,11 @@ shape and this command should mostly work.""" + if len(argv) != 1: + raise gdb.GdbError("usage: dump-guest-memory FILE") + +- self.dump_init() +- self.create_vmcore(argv[0]) ++ self.elf = ELF("X86_64") ++ self.guest_phys_blocks = get_guest_phys_blocks() ++ ++ with open(argv[0], "wb") as vmcore: ++ self.dump_init(vmcore) ++ self.dump_iterate(vmcore) + + DumpGuestMemory() +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scripts-dump-guest-memory.py-Make-methods-functions.patch b/SOURCES/kvm-scripts-dump-guest-memory.py-Make-methods-functions.patch new file mode 100644 index 0000000..41469ab --- /dev/null +++ b/SOURCES/kvm-scripts-dump-guest-memory.py-Make-methods-functions.patch @@ -0,0 +1,268 @@ +From 0e125906f0e8bd7015569e7c76b687e4aacb3cca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:05 +0100 +Subject: [PATCH 34/41] scripts/dump-guest-memory.py: Make methods functions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-35-marcandre.lureau@redhat.com> +Patchwork-id: 78384 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 34/41] scripts/dump-guest-memory.py: Make methods functions +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Janosch Frank + +The functions dealing with qemu components rarely used parts of the +class, so they were moved out of the class. + +As the uintptr_t variable is needed both within and outside the class, +it was made a constant and moved to the top. + +Reviewed-by: Laszlo Ersek +Signed-off-by: Janosch Frank +Message-Id: <1453464520-3882-3-git-send-email-frankja@linux.vnet.ibm.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit 47890203842de8b29716bdffb406ca851e70829d) + +RHEL: conflicts due to qtailq->qlist, used_length->length + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 184 ++++++++++++++++++++++--------------------- + 1 file changed, 93 insertions(+), 91 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 29f7c5b..7d93d86 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -17,6 +17,8 @@ + + import struct + ++UINTPTR_T = gdb.lookup_type("uintptr_t") ++ + TARGET_PAGE_SIZE = 0x1000 + TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000 + +@@ -66,6 +68,94 @@ ELF64_PHDR = ("I" # p_type + "Q" # p_align + ) + ++def int128_get64(val): ++ assert (val["hi"] == 0) ++ return val["lo"] ++ ++def qtailq_foreach(head, field_str): ++ var_p = head["tqh_first"] ++ while (var_p != 0): ++ var = var_p.dereference() ++ yield var ++ var_p = var[field_str]["tqe_next"] ++ ++def qemu_get_ram_block(ram_addr): ++ ram_blocks = gdb.parse_and_eval("ram_list.blocks") ++ for block in qtailq_foreach(ram_blocks, "next"): ++ if (ram_addr - block["offset"] < block["length"]): ++ return block ++ raise gdb.GdbError("Bad ram offset %x" % ram_addr) ++ ++def qemu_get_ram_ptr(ram_addr): ++ block = qemu_get_ram_block(ram_addr) ++ return block["host"] + (ram_addr - block["offset"]) ++ ++def memory_region_get_ram_ptr(mr): ++ if (mr["alias"] != 0): ++ return (memory_region_get_ram_ptr(mr["alias"].dereference()) + ++ mr["alias_offset"]) ++ return qemu_get_ram_ptr(mr["ram_addr"] & TARGET_PAGE_MASK) ++ ++def get_guest_phys_blocks(): ++ guest_phys_blocks = [] ++ print "guest RAM blocks:" ++ print ("target_start target_end host_addr message " ++ "count") ++ print ("---------------- ---------------- ---------------- ------- " ++ "-----") ++ ++ current_map_p = gdb.parse_and_eval("address_space_memory.current_map") ++ current_map = current_map_p.dereference() ++ for cur in range(current_map["nr"]): ++ flat_range = (current_map["ranges"] + cur).dereference() ++ mr = flat_range["mr"].dereference() ++ ++ # we only care about RAM ++ if (not mr["ram"]): ++ continue ++ ++ section_size = int128_get64(flat_range["addr"]["size"]) ++ target_start = int128_get64(flat_range["addr"]["start"]) ++ target_end = target_start + section_size ++ host_addr = (memory_region_get_ram_ptr(mr) + ++ flat_range["offset_in_region"]) ++ predecessor = None ++ ++ # find continuity in guest physical address space ++ if (len(guest_phys_blocks) > 0): ++ predecessor = guest_phys_blocks[-1] ++ predecessor_size = (predecessor["target_end"] - ++ predecessor["target_start"]) ++ ++ # the memory API guarantees monotonically increasing ++ # traversal ++ assert (predecessor["target_end"] <= target_start) ++ ++ # we want continuity in both guest-physical and ++ # host-virtual memory ++ if (predecessor["target_end"] < target_start or ++ predecessor["host_addr"] + predecessor_size != host_addr): ++ predecessor = None ++ ++ if (predecessor is None): ++ # isolated mapping, add it to the list ++ guest_phys_blocks.append({"target_start": target_start, ++ "target_end" : target_end, ++ "host_addr" : host_addr}) ++ message = "added" ++ else: ++ # expand predecessor until @target_end; predecessor's ++ # start doesn't change ++ predecessor["target_end"] = target_end ++ message = "joined" ++ ++ print ("%016x %016x %016x %-7s %5u" % ++ (target_start, target_end, host_addr.cast(UINTPTR_T), ++ message, len(guest_phys_blocks))) ++ ++ return guest_phys_blocks ++ ++ + class DumpGuestMemory(gdb.Command): + """Extract guest vmcore from qemu process coredump. + +@@ -100,96 +190,9 @@ shape and this command should mostly work.""" + super(DumpGuestMemory, self).__init__("dump-guest-memory", + gdb.COMMAND_DATA, + gdb.COMPLETE_FILENAME) +- self.uintptr_t = gdb.lookup_type("uintptr_t") + self.elf64_ehdr_le = struct.Struct("<%s" % ELF64_EHDR) + self.elf64_phdr_le = struct.Struct("<%s" % ELF64_PHDR) +- +- def int128_get64(self, val): +- assert (val["hi"] == 0) +- return val["lo"] +- +- def qtailq_foreach(self, head, field_str): +- var_p = head["tqh_first"] +- while (var_p != 0): +- var = var_p.dereference() +- yield var +- var_p = var[field_str]["tqe_next"] +- +- def qemu_get_ram_block(self, ram_addr): +- ram_blocks = gdb.parse_and_eval("ram_list.blocks") +- for block in self.qtailq_foreach(ram_blocks, "next"): +- if (ram_addr - block["offset"] < block["length"]): +- return block +- raise gdb.GdbError("Bad ram offset %x" % ram_addr) +- +- def qemu_get_ram_ptr(self, ram_addr): +- block = self.qemu_get_ram_block(ram_addr) +- return block["host"] + (ram_addr - block["offset"]) +- +- def memory_region_get_ram_ptr(self, mr): +- if (mr["alias"] != 0): +- return (self.memory_region_get_ram_ptr(mr["alias"].dereference()) + +- mr["alias_offset"]) +- return self.qemu_get_ram_ptr(mr["ram_addr"] & TARGET_PAGE_MASK) +- +- def guest_phys_blocks_init(self): +- self.guest_phys_blocks = [] +- +- def guest_phys_blocks_append(self): +- print "guest RAM blocks:" +- print ("target_start target_end host_addr message " +- "count") +- print ("---------------- ---------------- ---------------- ------- " +- "-----") +- +- current_map_p = gdb.parse_and_eval("address_space_memory.current_map") +- current_map = current_map_p.dereference() +- for cur in range(current_map["nr"]): +- flat_range = (current_map["ranges"] + cur).dereference() +- mr = flat_range["mr"].dereference() +- +- # we only care about RAM +- if (not mr["ram"]): +- continue +- +- section_size = self.int128_get64(flat_range["addr"]["size"]) +- target_start = self.int128_get64(flat_range["addr"]["start"]) +- target_end = target_start + section_size +- host_addr = (self.memory_region_get_ram_ptr(mr) + +- flat_range["offset_in_region"]) +- predecessor = None +- +- # find continuity in guest physical address space +- if (len(self.guest_phys_blocks) > 0): +- predecessor = self.guest_phys_blocks[-1] +- predecessor_size = (predecessor["target_end"] - +- predecessor["target_start"]) +- +- # the memory API guarantees monotonically increasing +- # traversal +- assert (predecessor["target_end"] <= target_start) +- +- # we want continuity in both guest-physical and +- # host-virtual memory +- if (predecessor["target_end"] < target_start or +- predecessor["host_addr"] + predecessor_size != host_addr): +- predecessor = None +- +- if (predecessor is None): +- # isolated mapping, add it to the list +- self.guest_phys_blocks.append({"target_start": target_start, +- "target_end" : target_end, +- "host_addr" : host_addr}) +- message = "added" +- else: +- # expand predecessor until @target_end; predecessor's +- # start doesn't change +- predecessor["target_end"] = target_end +- message = "joined" +- +- print ("%016x %016x %016x %-7s %5u" % +- (target_start, target_end, host_addr.cast(self.uintptr_t), +- message, len(self.guest_phys_blocks))) ++ self.guest_phys_blocks = None + + def cpu_get_dump_info(self): + # We can't synchronize the registers with KVM post-mortem, and +@@ -263,8 +266,7 @@ shape and this command should mostly work.""" + len(name) + 1, len(desc), type, name, desc) + + def dump_init(self): +- self.guest_phys_blocks_init() +- self.guest_phys_blocks_append() ++ self.guest_phys_blocks = get_guest_phys_blocks() + self.cpu_get_dump_info() + # we have no way to retrieve the VCPU status from KVM + # post-mortem +@@ -310,7 +312,7 @@ shape and this command should mostly work.""" + cur = block["host_addr"] + left = block["target_end"] - block["target_start"] + print ("dumping range at %016x for length %016x" % +- (cur.cast(self.uintptr_t), left)) ++ (cur.cast(UINTPTR_T), left)) + while (left > 0): + chunk_size = min(TARGET_PAGE_SIZE, left) + chunk = qemu_core.read_memory(cur, chunk_size) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scripts-dump-guest-memory.py-Move-constants-to-the-t.patch b/SOURCES/kvm-scripts-dump-guest-memory.py-Move-constants-to-the-t.patch new file mode 100644 index 0000000..665e98c --- /dev/null +++ b/SOURCES/kvm-scripts-dump-guest-memory.py-Move-constants-to-the-t.patch @@ -0,0 +1,236 @@ +From 231682fd6a7ca6fc5eecbec3df2f96133b9f3729 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:04 +0100 +Subject: [PATCH 33/41] scripts/dump-guest-memory.py: Move constants to the top +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-34-marcandre.lureau@redhat.com> +Patchwork-id: 78378 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 33/41] scripts/dump-guest-memory.py: Move constants to the top +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Janosch Frank + +The constants bloated the class definition and were therefore moved to +the top. + +Reviewed-by: Laszlo Ersek +Signed-off-by: Janosch Frank +Message-Id: <1453464520-3882-2-git-send-email-frankja@linux.vnet.ibm.com> +Signed-off-by: Paolo Bonzini + +(cherry picked from commit ca81ce72b4d12494424d1813c6437035c1f89a8c) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 126 +++++++++++++++++++++---------------------- + 1 file changed, 63 insertions(+), 63 deletions(-) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 1ed8b67..29f7c5b 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -17,6 +17,55 @@ + + import struct + ++TARGET_PAGE_SIZE = 0x1000 ++TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000 ++ ++# Various ELF constants ++EM_X86_64 = 62 # AMD x86-64 target machine ++ELFDATA2LSB = 1 # little endian ++ELFCLASS64 = 2 ++ELFMAG = "\x7FELF" ++EV_CURRENT = 1 ++ET_CORE = 4 ++PT_LOAD = 1 ++PT_NOTE = 4 ++ ++# Special value for e_phnum. This indicates that the real number of ++# program headers is too large to fit into e_phnum. Instead the real ++# value is in the field sh_info of section 0. ++PN_XNUM = 0xFFFF ++ ++# Format strings for packing and header size calculation. ++ELF64_EHDR = ("4s" # e_ident/magic ++ "B" # e_ident/class ++ "B" # e_ident/data ++ "B" # e_ident/version ++ "B" # e_ident/osabi ++ "8s" # e_ident/pad ++ "H" # e_type ++ "H" # e_machine ++ "I" # e_version ++ "Q" # e_entry ++ "Q" # e_phoff ++ "Q" # e_shoff ++ "I" # e_flags ++ "H" # e_ehsize ++ "H" # e_phentsize ++ "H" # e_phnum ++ "H" # e_shentsize ++ "H" # e_shnum ++ "H" # e_shstrndx ++ ) ++ELF64_PHDR = ("I" # p_type ++ "I" # p_flags ++ "Q" # p_offset ++ "Q" # p_vaddr ++ "Q" # p_paddr ++ "Q" # p_filesz ++ "Q" # p_memsz ++ "Q" # p_align ++ ) ++ + class DumpGuestMemory(gdb.Command): + """Extract guest vmcore from qemu process coredump. + +@@ -47,62 +96,13 @@ deliberately called abort(), or it was dumped in response to a signal at + a halfway fortunate point, then its coredump should be in reasonable + shape and this command should mostly work.""" + +- TARGET_PAGE_SIZE = 0x1000 +- TARGET_PAGE_MASK = 0xFFFFFFFFFFFFF000 +- +- # Various ELF constants +- EM_X86_64 = 62 # AMD x86-64 target machine +- ELFDATA2LSB = 1 # little endian +- ELFCLASS64 = 2 +- ELFMAG = "\x7FELF" +- EV_CURRENT = 1 +- ET_CORE = 4 +- PT_LOAD = 1 +- PT_NOTE = 4 +- +- # Special value for e_phnum. This indicates that the real number of +- # program headers is too large to fit into e_phnum. Instead the real +- # value is in the field sh_info of section 0. +- PN_XNUM = 0xFFFF +- +- # Format strings for packing and header size calculation. +- ELF64_EHDR = ("4s" # e_ident/magic +- "B" # e_ident/class +- "B" # e_ident/data +- "B" # e_ident/version +- "B" # e_ident/osabi +- "8s" # e_ident/pad +- "H" # e_type +- "H" # e_machine +- "I" # e_version +- "Q" # e_entry +- "Q" # e_phoff +- "Q" # e_shoff +- "I" # e_flags +- "H" # e_ehsize +- "H" # e_phentsize +- "H" # e_phnum +- "H" # e_shentsize +- "H" # e_shnum +- "H" # e_shstrndx +- ) +- ELF64_PHDR = ("I" # p_type +- "I" # p_flags +- "Q" # p_offset +- "Q" # p_vaddr +- "Q" # p_paddr +- "Q" # p_filesz +- "Q" # p_memsz +- "Q" # p_align +- ) +- + def __init__(self): + super(DumpGuestMemory, self).__init__("dump-guest-memory", + gdb.COMMAND_DATA, + gdb.COMPLETE_FILENAME) + self.uintptr_t = gdb.lookup_type("uintptr_t") +- self.elf64_ehdr_le = struct.Struct("<%s" % self.ELF64_EHDR) +- self.elf64_phdr_le = struct.Struct("<%s" % self.ELF64_PHDR) ++ self.elf64_ehdr_le = struct.Struct("<%s" % ELF64_EHDR) ++ self.elf64_phdr_le = struct.Struct("<%s" % ELF64_PHDR) + + def int128_get64(self, val): + assert (val["hi"] == 0) +@@ -130,7 +130,7 @@ shape and this command should mostly work.""" + if (mr["alias"] != 0): + return (self.memory_region_get_ram_ptr(mr["alias"].dereference()) + + mr["alias_offset"]) +- return self.qemu_get_ram_ptr(mr["ram_addr"] & self.TARGET_PAGE_MASK) ++ return self.qemu_get_ram_ptr(mr["ram_addr"] & TARGET_PAGE_MASK) + + def guest_phys_blocks_init(self): + self.guest_phys_blocks = [] +@@ -198,21 +198,21 @@ shape and this command should mostly work.""" + # most common values. This also means that instruction pointer + # etc. will be bogus in the dump, but at least the RAM contents + # should be valid. +- self.dump_info = {"d_machine": self.EM_X86_64, +- "d_endian" : self.ELFDATA2LSB, +- "d_class" : self.ELFCLASS64} ++ self.dump_info = {"d_machine": EM_X86_64, ++ "d_endian" : ELFDATA2LSB, ++ "d_class" : ELFCLASS64} + + def encode_elf64_ehdr_le(self): + return self.elf64_ehdr_le.pack( +- self.ELFMAG, # e_ident/magic ++ ELFMAG, # e_ident/magic + self.dump_info["d_class"], # e_ident/class + self.dump_info["d_endian"], # e_ident/data +- self.EV_CURRENT, # e_ident/version ++ EV_CURRENT, # e_ident/version + 0, # e_ident/osabi + "", # e_ident/pad +- self.ET_CORE, # e_type ++ ET_CORE, # e_type + self.dump_info["d_machine"], # e_machine +- self.EV_CURRENT, # e_version ++ EV_CURRENT, # e_version + 0, # e_entry + self.elf64_ehdr_le.size, # e_phoff + 0, # e_shoff +@@ -226,7 +226,7 @@ shape and this command should mostly work.""" + ) + + def encode_elf64_note_le(self): +- return self.elf64_phdr_le.pack(self.PT_NOTE, # p_type ++ return self.elf64_phdr_le.pack(PT_NOTE, # p_type + 0, # p_flags + (self.memory_offset - + len(self.note)), # p_offset +@@ -238,7 +238,7 @@ shape and this command should mostly work.""" + ) + + def encode_elf64_load_le(self, offset, start_hwaddr, range_size): +- return self.elf64_phdr_le.pack(self.PT_LOAD, # p_type ++ return self.elf64_phdr_le.pack(PT_LOAD, # p_type + 0, # p_flags + offset, # p_offset + 0, # p_vaddr +@@ -276,7 +276,7 @@ shape and this command should mostly work.""" + # We should never reach PN_XNUM for paging=false dumps: there's + # just a handful of discontiguous ranges after merging. + self.phdr_num += len(self.guest_phys_blocks) +- assert (self.phdr_num < self.PN_XNUM) ++ assert (self.phdr_num < PN_XNUM) + + # Calculate the ELF file offset where the memory dump commences: + # +@@ -312,7 +312,7 @@ shape and this command should mostly work.""" + print ("dumping range at %016x for length %016x" % + (cur.cast(self.uintptr_t), left)) + while (left > 0): +- chunk_size = min(self.TARGET_PAGE_SIZE, left) ++ chunk_size = min(TARGET_PAGE_SIZE, left) + chunk = qemu_core.read_memory(cur, chunk_size) + vmcore.write(chunk) + cur += chunk_size +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scripts-dump-guest-memory.py-add-vmcoreinfo.patch b/SOURCES/kvm-scripts-dump-guest-memory.py-add-vmcoreinfo.patch new file mode 100644 index 0000000..49e4645 --- /dev/null +++ b/SOURCES/kvm-scripts-dump-guest-memory.py-add-vmcoreinfo.patch @@ -0,0 +1,134 @@ +From 8a0fb382404cba1a4d88dd489a14d585fc95f3cf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:39:10 +0100 +Subject: [PATCH 39/41] scripts/dump-guest-memory.py: add vmcoreinfo +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-40-marcandre.lureau@redhat.com> +Patchwork-id: 78389 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 39/41] scripts/dump-guest-memory.py: add vmcoreinfo +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +Add a vmcoreinfo ELF note in the dump if vmcoreinfo device has the +memory location details. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit d23bfa91b7789534d16ede6cb7d925bfac3f3c4c) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + scripts/dump-guest-memory.py | 61 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 61 insertions(+) + +diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py +index 03d692d..471aa73 100644 +--- a/scripts/dump-guest-memory.py ++++ b/scripts/dump-guest-memory.py +@@ -17,6 +17,7 @@ + # gdb. + + import ctypes ++import struct + + UINTPTR_T = gdb.lookup_type("uintptr_t") + +@@ -48,6 +49,17 @@ EM_S390 = 22 + EM_AARCH = 183 + EM_X86_64 = 62 + ++VMCOREINFO_FORMAT_ELF = 1 ++ ++def le16_to_cpu(val): ++ return struct.unpack(" 1 << 20: ++ print('warning: invalid vmcoreinfo size') ++ return ++ # now get the full note ++ note = get_arch_note(self.endianness, ++ header.n_namesz - 1, header.n_descsz) ++ ctypes.memmove(ctypes.pointer(note), vmcoreinfo, ctypes.sizeof(note)) ++ ++ self.notes.append(note) ++ self.segments[0].p_filesz += ctypes.sizeof(note) ++ self.segments[0].p_memsz += ctypes.sizeof(note) ++ + def add_segment(self, p_type, p_paddr, p_size): + """Adds a segment to the elf.""" + +@@ -505,6 +536,35 @@ shape and this command should mostly work.""" + cur += chunk_size + left -= chunk_size + ++ def phys_memory_read(self, addr, size): ++ qemu_core = gdb.inferiors()[0] ++ for block in self.guest_phys_blocks: ++ if block["target_start"] <= addr \ ++ and addr + size <= block["target_end"]: ++ haddr = block["host_addr"] + (addr - block["target_start"]) ++ return qemu_core.read_memory(haddr, size) ++ return None ++ ++ def add_vmcoreinfo(self): ++ if not gdb.parse_and_eval("vmcoreinfo_find()") \ ++ or not gdb.parse_and_eval("vmcoreinfo_find()->has_vmcoreinfo"): ++ return ++ ++ fmt = gdb.parse_and_eval("vmcoreinfo_find()->vmcoreinfo.guest_format") ++ addr = gdb.parse_and_eval("vmcoreinfo_find()->vmcoreinfo.paddr") ++ size = gdb.parse_and_eval("vmcoreinfo_find()->vmcoreinfo.size") ++ ++ fmt = le16_to_cpu(fmt) ++ addr = le64_to_cpu(addr) ++ size = le32_to_cpu(size) ++ ++ if fmt != VMCOREINFO_FORMAT_ELF: ++ return ++ ++ vmcoreinfo = self.phys_memory_read(addr, size) ++ if vmcoreinfo: ++ self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes()) ++ + def invoke(self, args, from_tty): + """Handles command invocation from gdb.""" + +@@ -518,6 +578,7 @@ shape and this command should mostly work.""" + + self.elf = ELF("X86_64") + self.guest_phys_blocks = get_guest_phys_blocks() ++ self.add_vmcoreinfo() + + with open(argv[0], "wb") as vmcore: + self.dump_init(vmcore) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scripts-qapi.py-Avoid-syntax-not-supported-by-Python.patch b/SOURCES/kvm-scripts-qapi.py-Avoid-syntax-not-supported-by-Python.patch new file mode 100644 index 0000000..9c0f0ab --- /dev/null +++ b/SOURCES/kvm-scripts-qapi.py-Avoid-syntax-not-supported-by-Python.patch @@ -0,0 +1,54 @@ +From e41361867982017cdfed92f1874395da2596cb51 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:20 +0100 +Subject: [PATCH 20/21] scripts/qapi.py: Avoid syntax not supported by Python + 2.4 + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-18-git-send-email-armbru@redhat.com> +Patchwork-id: 56138 +O-Subject: [PATCH 7.0 qemu-kvm 17/18] scripts/qapi.py: Avoid syntax not supported by Python 2.4 +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Peter Maydell + +The Python "except Foo as x" syntax was only introduced in +Python 2.6, but we aim to support Python 2.4 and later. +Use the old-style "except Foo, x" syntax instead, thus +fixing configure/compile on systems with older Python. + +Signed-off-by: Peter Maydell +Signed-off-by: Luiz Capitulino +(cherry picked from commit 21e0043bada1a24ae2ba6cd0051e104c0cbf9634) +Signed-off-by: Markus Armbruster +--- + scripts/qapi.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + scripts/qapi.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/qapi.py b/scripts/qapi.py +index 0ebea94..1069310 100644 +--- a/scripts/qapi.py ++++ b/scripts/qapi.py +@@ -161,7 +161,7 @@ class QAPISchema: + def parse_schema(fp): + try: + schema = QAPISchema(fp) +- except QAPISchemaError as e: ++ except QAPISchemaError, e: + print >>sys.stderr, e + exit(1) + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-scsi-Advertise-limits-by-blocksize-not-512.patch b/SOURCES/kvm-scsi-Advertise-limits-by-blocksize-not-512.patch new file mode 100644 index 0000000..4d7aed1 --- /dev/null +++ b/SOURCES/kvm-scsi-Advertise-limits-by-blocksize-not-512.patch @@ -0,0 +1,54 @@ +From c8644154fb4b460f00c9d24ed9090edc40fef067 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 11 Jul 2016 05:33:39 +0200 +Subject: [PATCH 6/7] scsi: Advertise limits by blocksize, not 512 + +RH-Author: Fam Zheng +Message-id: <1468215219-30793-7-git-send-email-famz@redhat.com> +Patchwork-id: 71110 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 6/6] scsi: Advertise limits by blocksize, not 512 +Bugzilla: 1318199 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Eric Blake + +s->blocksize may be larger than 512, in which case our +tweaks to max_xfer_len and opt_xfer_len must be scaled +appropriately. + +CC: qemu-stable@nongnu.org +Reported-by: Fam Zheng +Signed-off-by: Eric Blake +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit efaf4781a995aacd22b1dd521b14e4644bafae14) + + Conflicts: + hw/scsi/scsi-generic.c +Downstream uses bdrv_get_max_transfer_length(). + +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-generic.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c +index 6b0c1fe..ced92f7 100644 +--- a/hw/scsi/scsi-generic.c ++++ b/hw/scsi/scsi-generic.c +@@ -210,7 +210,8 @@ static void scsi_read_complete(void * opaque, int ret) + } else if (s->type == TYPE_DISK && + r->req.cmd.buf[0] == INQUIRY && + r->req.cmd.buf[2] == 0xb0) { +- uint32_t max_xfer_len = bdrv_get_max_transfer_length(s->conf.bs); ++ uint32_t max_xfer_len = bdrv_get_max_transfer_length(s->conf.bs) / ++ (s->blocksize / BDRV_SECTOR_SIZE); + if (max_xfer_len) { + stl_be_p(&r->buf[8], max_xfer_len); + /* Also take care of the opt xfer len. */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scsi-Allocate-SCSITargetReq-r-buf-dynamically-CVE-20.patch b/SOURCES/kvm-scsi-Allocate-SCSITargetReq-r-buf-dynamically-CVE-20.patch new file mode 100644 index 0000000..987f3de --- /dev/null +++ b/SOURCES/kvm-scsi-Allocate-SCSITargetReq-r-buf-dynamically-CVE-20.patch @@ -0,0 +1,166 @@ +From 3f4a2e18f357a82186ce02018e42a24b5db4154d Mon Sep 17 00:00:00 2001 +From: Asias He +Date: Fri, 11 Oct 2013 10:36:39 +0800 +Subject: [PATCH] scsi: Allocate SCSITargetReq r->buf dynamically [CVE-2013-4344] + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1007334 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6402920 +RH-Author: Asias He +Message-id: <1381458999-8048-1-git-send-email-asias@redhat.com> +O-Subject: [RHEL7.0 qemu-kvm EMBARGOED PATCH v2] scsi: Allocate SCSITargetReq r->buf dynamically [CVE-2013-4344] +Bugzilla: 1007334 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi + +r->buf is hardcoded to 2056 which is (256 + 1) * 8, allowing 256 luns at +most. If more than 256 luns are specified by user, we have buffer +overflow in scsi_target_emulate_report_luns. + +To fix, we allocate the buffer dynamically. + +Signed-off-by: Asias He +Tested-by: Michael Roth +Signed-off-by: Paolo Bonzini +(cherry picked from commit 846424350b292f16b732b573273a5c1f195cd7a3) +--- + hw/scsi/scsi-bus.c | 45 ++++++++++++++++++++++++++++++++++----------- + include/hw/scsi/scsi.h | 2 ++ + 2 files changed, 36 insertions(+), 11 deletions(-) + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 18a0399..9082ea7 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -11,6 +11,8 @@ static char *scsibus_get_dev_path(DeviceState *dev); + static char *scsibus_get_fw_dev_path(DeviceState *dev); + static int scsi_req_parse(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf); + static void scsi_req_dequeue(SCSIRequest *req); ++static uint8_t *scsi_target_alloc_buf(SCSIRequest *req, size_t len); ++static void scsi_target_free_buf(SCSIRequest *req); + + static Property scsi_props[] = { + DEFINE_PROP_UINT32("channel", SCSIDevice, channel, 0), +@@ -309,7 +311,8 @@ typedef struct SCSITargetReq SCSITargetReq; + struct SCSITargetReq { + SCSIRequest req; + int len; +- uint8_t buf[2056]; ++ uint8_t *buf; ++ int buf_len; + }; + + static void store_lun(uint8_t *outbuf, int lun) +@@ -353,14 +356,12 @@ static bool scsi_target_emulate_report_luns(SCSITargetReq *r) + if (!found_lun0) { + n += 8; + } +- len = MIN(n + 8, r->req.cmd.xfer & ~7); +- if (len > sizeof(r->buf)) { +- /* TODO: > 256 LUNs? */ +- return false; +- } + ++ scsi_target_alloc_buf(&r->req, n + 8); ++ ++ len = MIN(n + 8, r->req.cmd.xfer & ~7); + memset(r->buf, 0, len); +- stl_be_p(&r->buf, n); ++ stl_be_p(&r->buf[0], n); + i = found_lun0 ? 8 : 16; + QTAILQ_FOREACH(kid, &r->req.bus->qbus.children, sibling) { + DeviceState *qdev = kid->child; +@@ -379,6 +380,9 @@ static bool scsi_target_emulate_report_luns(SCSITargetReq *r) + static bool scsi_target_emulate_inquiry(SCSITargetReq *r) + { + assert(r->req.dev->lun != r->req.lun); ++ ++ scsi_target_alloc_buf(&r->req, SCSI_INQUIRY_LEN); ++ + if (r->req.cmd.buf[1] & 0x2) { + /* Command support data - optional, not implemented */ + return false; +@@ -403,7 +407,7 @@ static bool scsi_target_emulate_inquiry(SCSITargetReq *r) + return false; + } + /* done with EVPD */ +- assert(r->len < sizeof(r->buf)); ++ assert(r->len < r->buf_len); + r->len = MIN(r->req.cmd.xfer, r->len); + return true; + } +@@ -414,7 +418,7 @@ static bool scsi_target_emulate_inquiry(SCSITargetReq *r) + } + + /* PAGE CODE == 0 */ +- r->len = MIN(r->req.cmd.xfer, 36); ++ r->len = MIN(r->req.cmd.xfer, SCSI_INQUIRY_LEN); + memset(r->buf, 0, r->len); + if (r->req.lun != 0) { + r->buf[0] = TYPE_NO_LUN; +@@ -447,8 +451,9 @@ static int32_t scsi_target_send_command(SCSIRequest *req, uint8_t *buf) + } + break; + case REQUEST_SENSE: ++ scsi_target_alloc_buf(&r->req, SCSI_SENSE_LEN); + r->len = scsi_device_get_sense(r->req.dev, r->buf, +- MIN(req->cmd.xfer, sizeof r->buf), ++ MIN(req->cmd.xfer, r->buf_len), + (req->cmd.buf[1] & 1) == 0); + if (r->req.dev->sense_is_ua) { + scsi_device_unit_attention_reported(req->dev); +@@ -493,11 +498,29 @@ static uint8_t *scsi_target_get_buf(SCSIRequest *req) + return r->buf; + } + ++static uint8_t *scsi_target_alloc_buf(SCSIRequest *req, size_t len) ++{ ++ SCSITargetReq *r = DO_UPCAST(SCSITargetReq, req, req); ++ ++ r->buf = g_malloc(len); ++ r->buf_len = len; ++ ++ return r->buf; ++} ++ ++static void scsi_target_free_buf(SCSIRequest *req) ++{ ++ SCSITargetReq *r = DO_UPCAST(SCSITargetReq, req, req); ++ ++ g_free(r->buf); ++} ++ + static const struct SCSIReqOps reqops_target_command = { + .size = sizeof(SCSITargetReq), + .send_command = scsi_target_send_command, + .read_data = scsi_target_read_data, + .get_buf = scsi_target_get_buf, ++ .free_req = scsi_target_free_buf, + }; + + +@@ -1353,7 +1376,7 @@ int scsi_build_sense(uint8_t *in_buf, int in_len, + buf[7] = 10; + buf[12] = sense.asc; + buf[13] = sense.ascq; +- return MIN(len, 18); ++ return MIN(len, SCSI_SENSE_LEN); + } else { + /* Return descriptor format sense buffer */ + buf[0] = 0x72; +diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h +index 9786e00..2eccb72 100644 +--- a/include/hw/scsi/scsi.h ++++ b/include/hw/scsi/scsi.h +@@ -9,6 +9,8 @@ + #define MAX_SCSI_DEVS 255 + + #define SCSI_CMD_BUF_SIZE 16 ++#define SCSI_SENSE_LEN 18 ++#define SCSI_INQUIRY_LEN 36 + + typedef struct SCSIBus SCSIBus; + typedef struct SCSIBusInfo SCSIBusInfo; +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-Change-scsi-sense-buf-size-to-252.patch b/SOURCES/kvm-scsi-Change-scsi-sense-buf-size-to-252.patch new file mode 100644 index 0000000..d3ee4a5 --- /dev/null +++ b/SOURCES/kvm-scsi-Change-scsi-sense-buf-size-to-252.patch @@ -0,0 +1,101 @@ +From 79d13d1e7d0934198a2774235b70f688aa5f433f Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 19 Mar 2014 05:33:13 +0100 +Subject: [PATCH 1/2] scsi: Change scsi sense buf size to 252 + +RH-Author: Fam Zheng +Message-id: <1395207194-25330-2-git-send-email-famz@redhat.com> +Patchwork-id: 58139 +O-Subject: [RHEL-7 qemu-kvm PATCH v2 1/2] scsi: Change scsi sense buf size to 252 +Bugzilla: 1058173 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1058173 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7141744 + +Current buffer size fails the assersion check in like + + hw/scsi/scsi-bus.c:1655: assert(req->sense_len <= sizeof(req->sense)); + +when backend (block/iscsi.c) returns more data then 96. + +Exercise the core dump path by booting an Gentoo ISO with scsi-generic +device backed with iscsi (built with libiscsi 1.7.0): + + x86_64-softmmu/qemu-system-x86_64 \ + -drive file=iscsi://localhost:3260/iqn.foobar/0,if=none,id=drive-disk \ + -device virtio-scsi-pci,id=scsi1,bus=pci.0,addr=0x6 \ + -device scsi-generic,drive=drive-disk,bus=scsi1.0,id=iscsi-disk \ + -boot d \ + -cdrom gentoo.iso + + qemu-system-x86_64: hw/scsi/scsi-bus.c:1655: scsi_req_complete: + Assertion `req->sense_len <= sizeof(req->sense)' failed. + +According to SPC-4, section 4.5.2.1, 252 is the limit of sense data. So +increase the value to fix it. + +Also remove duplicated define for the macro. + +Signed-off-by: Fam Zheng +Reviewed-by: Benoit Canet +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +(cherry picked from commit c5f52875b980e54e6bebad6121c76863356e1d7f) +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-generic.c | 2 -- + hw/scsi/spapr_vscsi.c | 1 - + include/hw/scsi/scsi.h | 2 +- + 3 files changed, 1 insertion(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-generic.c | 2 -- + hw/scsi/spapr_vscsi.c | 1 - + include/hw/scsi/scsi.h | 2 +- + 3 files changed, 1 insertions(+), 4 deletions(-) + +diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c +index f08b64e..8d92e0d 100644 +--- a/hw/scsi/scsi-generic.c ++++ b/hw/scsi/scsi-generic.c +@@ -37,8 +37,6 @@ do { fprintf(stderr, "scsi-generic: " fmt , ## __VA_ARGS__); } while (0) + #include + #include "block/scsi.h" + +-#define SCSI_SENSE_BUF_SIZE 96 +- + #define SG_ERR_DRIVER_TIMEOUT 0x06 + #define SG_ERR_DRIVER_SENSE 0x08 + +diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c +index e8978bf..514ab88 100644 +--- a/hw/scsi/spapr_vscsi.c ++++ b/hw/scsi/spapr_vscsi.c +@@ -60,7 +60,6 @@ + #define VSCSI_MAX_SECTORS 4096 + #define VSCSI_REQ_LIMIT 24 + +-#define SCSI_SENSE_BUF_SIZE 96 + #define SRP_RSP_SENSE_DATA_LEN 18 + + typedef union vscsi_crq { +diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h +index 2eccb72..4a1de1b 100644 +--- a/include/hw/scsi/scsi.h ++++ b/include/hw/scsi/scsi.h +@@ -31,7 +31,7 @@ typedef struct SCSISense { + uint8_t ascq; + } SCSISense; + +-#define SCSI_SENSE_BUF_SIZE 96 ++#define SCSI_SENSE_BUF_SIZE 252 + + struct SCSICommand { + uint8_t buf[SCSI_CMD_BUF_SIZE]; +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-Fix-migration-of-scsi-sense-data.patch b/SOURCES/kvm-scsi-Fix-migration-of-scsi-sense-data.patch new file mode 100644 index 0000000..8baa340 --- /dev/null +++ b/SOURCES/kvm-scsi-Fix-migration-of-scsi-sense-data.patch @@ -0,0 +1,119 @@ +From 5cd8edcba7977ebc8973af8a894716f3915e1dc7 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 19 Mar 2014 05:33:14 +0100 +Subject: [PATCH 2/2] scsi: Fix migration of scsi sense data + +RH-Author: Fam Zheng +Message-id: <1395207194-25330-3-git-send-email-famz@redhat.com> +Patchwork-id: 58140 +O-Subject: [RHEL-7 qemu-kvm PATCH v2 2/2] scsi: Fix migration of scsi sense data +Bugzilla: 1058173 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +c5f52875 changed the size of sense array in vmstate_scsi_device by +mistake. This patch restores the old size, and add a subsection for the +remaining part of the buffer size. So that migration is not broken. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2e323f03bfa323636552b386c982412944ff86ae) +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-bus.c | 30 +++++++++++++++++++++++++++++- + include/hw/scsi/scsi.h | 1 + + include/migration/vmstate.h | 3 +++ + 3 files changed, 33 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-bus.c | 30 +++++++++++++++++++++++++++++- + include/hw/scsi/scsi.h | 1 + + include/migration/vmstate.h | 3 +++ + 3 files changed, 33 insertions(+), 1 deletions(-) + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index a0fbf06..77e0c10 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -1874,6 +1874,26 @@ static const VMStateInfo vmstate_info_scsi_requests = { + .put = put_scsi_requests, + }; + ++static bool scsi_sense_state_needed(void *opaque) ++{ ++ SCSIDevice *s = opaque; ++ ++ return s->sense_len > SCSI_SENSE_BUF_SIZE_OLD; ++} ++ ++static const VMStateDescription vmstate_scsi_sense_state = { ++ .name = "SCSIDevice/sense", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField []) { ++ VMSTATE_UINT8_SUB_ARRAY(sense, SCSIDevice, ++ SCSI_SENSE_BUF_SIZE_OLD, ++ SCSI_SENSE_BUF_SIZE - SCSI_SENSE_BUF_SIZE_OLD), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_scsi_device = { + .name = "SCSIDevice", + .version_id = 1, +@@ -1884,7 +1904,7 @@ const VMStateDescription vmstate_scsi_device = { + VMSTATE_UINT8(unit_attention.asc, SCSIDevice), + VMSTATE_UINT8(unit_attention.ascq, SCSIDevice), + VMSTATE_BOOL(sense_is_ua, SCSIDevice), +- VMSTATE_UINT8_ARRAY(sense, SCSIDevice, SCSI_SENSE_BUF_SIZE), ++ VMSTATE_UINT8_SUB_ARRAY(sense, SCSIDevice, 0, SCSI_SENSE_BUF_SIZE_OLD), + VMSTATE_UINT32(sense_len, SCSIDevice), + { + .name = "requests", +@@ -1896,6 +1916,14 @@ const VMStateDescription vmstate_scsi_device = { + .offset = 0, + }, + VMSTATE_END_OF_LIST() ++ }, ++ .subsections = (VMStateSubsection []) { ++ { ++ .vmsd = &vmstate_scsi_sense_state, ++ .needed = scsi_sense_state_needed, ++ }, { ++ /* empty */ ++ } + } + }; + +diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h +index 4a1de1b..b0d6e8f 100644 +--- a/include/hw/scsi/scsi.h ++++ b/include/hw/scsi/scsi.h +@@ -31,6 +31,7 @@ typedef struct SCSISense { + uint8_t ascq; + } SCSISense; + ++#define SCSI_SENSE_BUF_SIZE_OLD 96 + #define SCSI_SENSE_BUF_SIZE 252 + + struct SCSICommand { +diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h +index ebc4d09..11d93e1 100644 +--- a/include/migration/vmstate.h ++++ b/include/migration/vmstate.h +@@ -625,6 +625,9 @@ extern const VMStateInfo vmstate_info_bitmap; + #define VMSTATE_UINT8_ARRAY(_f, _s, _n) \ + VMSTATE_UINT8_ARRAY_V(_f, _s, _n, 0) + ++#define VMSTATE_UINT8_SUB_ARRAY(_f, _s, _start, _num) \ ++ VMSTATE_SUB_ARRAY(_f, _s, _start, _num, 0, vmstate_info_uint8, uint8_t) ++ + #define VMSTATE_UINT8_2DARRAY(_f, _s, _n1, _n2) \ + VMSTATE_UINT8_2DARRAY_V(_f, _s, _n1, _n2, 0) + +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-Fix-scsi_bus_legacy_add_drive-scsi-generic-with.patch b/SOURCES/kvm-scsi-Fix-scsi_bus_legacy_add_drive-scsi-generic-with.patch new file mode 100644 index 0000000..8f4bff2 --- /dev/null +++ b/SOURCES/kvm-scsi-Fix-scsi_bus_legacy_add_drive-scsi-generic-with.patch @@ -0,0 +1,65 @@ +From 284ff94d1e2c50f7314d5a60e0a45d6710160420 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Mon, 30 Sep 2013 12:03:39 +0200 +Subject: [PATCH 09/25] scsi: Fix scsi_bus_legacy_add_drive() scsi-generic with serial +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1380542619-20274-2-git-send-email-armbru@redhat.com> +Patchwork-id: 54583 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] scsi: Fix scsi_bus_legacy_add_drive() scsi-generic with serial +Bugzilla: 1009285 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +scsi_bus_legacy_add_drive() creates either a scsi-disk or a +scsi-generic device. It sets property "serial" to argument serial +unless null. Crashes with scsi-generic, because it doesn't have such +the property. + +Only usb_msd_initfn_storage() passes non-null serial. Reproducer: + + $ qemu-system-x86_64 -nodefaults -display none -S -usb \ + -drive if=none,file=/dev/sg1,id=usb-drv0 \ + -device usb-storage,id=usb-msd0,drive=usb-drv0,serial=123 + qemu-system-x86_64: -device usb-storage,id=usb-msd0,drive=usb-drv0,serial=123: Property '.serial' not found + Aborted (core dumped) + +Fix by handling exactly like "removable": set the property only when +it exists. + +Cc: qemu-stable@nongnu.org +Reviewed-by: Andreas Färber +Signed-off-by: Markus Armbruster +Signed-off-by: Paolo Bonzini +(cherry picked from commit c24e7517ee4a98e90eee5f0f07708a1fa12326b3) +--- + hw/scsi/scsi-bus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-bus.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 53ea906..0885d9d 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -223,7 +223,7 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv, + if (object_property_find(OBJECT(dev), "removable", NULL)) { + qdev_prop_set_bit(dev, "removable", removable); + } +- if (serial) { ++ if (serial && object_property_find(OBJECT(dev), "serial", NULL)) { + qdev_prop_set_string(dev, "serial", serial); + } + if (qdev_prop_set_drive(dev, "drive", bdrv) < 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-Improve-error-messages-more.patch b/SOURCES/kvm-scsi-Improve-error-messages-more.patch new file mode 100644 index 0000000..fdd2ada --- /dev/null +++ b/SOURCES/kvm-scsi-Improve-error-messages-more.patch @@ -0,0 +1,103 @@ +From 3560dd9e730c41824fcaa9aeb9b4ee503aa98de1 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 6 Jun 2014 04:11:39 +0200 +Subject: [PATCH 10/13] scsi: Improve error messages more + +RH-Author: Fam Zheng +Message-id: <1402027899-1917-3-git-send-email-famz@redhat.com> +Patchwork-id: 59164 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] scsi: Improve error messages more +Bugzilla: 1021788 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Stefan Hajnoczi + +From: Paolo Bonzini + +Remove the "scsi-block:" prefix for error messages as suggested +by Markus. + +Improve the previous patch by making the message the same for both +scsi-block and scsi-generic, including the strerror() output in both +and making an explicit reference to SG_IO. Also s/can not/cannot/. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 6ee143a0a4f8b5c437ac327e3d694a6a0e5380ad) +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-disk.c | 11 ++++++----- + hw/scsi/scsi-generic.c | 8 ++++++-- + 2 files changed, 12 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 11 ++++++----- + hw/scsi/scsi-generic.c | 8 ++++++-- + 2 files changed, 12 insertions(+), 7 deletions(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 5a6384e..1d41db2 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -2434,26 +2434,27 @@ static int scsi_block_initfn(SCSIDevice *dev) + int rc; + + if (!s->qdev.conf.bs) { +- error_report("scsi-block: drive property not set"); ++ error_report("drive property not set"); + return -1; + } + + /* check we are using a driver managing SG_IO (version 3 and after) */ +- rc = bdrv_ioctl(s->qdev.conf.bs, SG_GET_VERSION_NUM, &sg_version); ++ rc = bdrv_ioctl(s->qdev.conf.bs, SG_GET_VERSION_NUM, &sg_version); + if (rc < 0) { +- error_report("scsi-block: can not get version number: %s", ++ error_report("cannot get SG_IO version number: %s. " ++ "Is this a SCSI device?", + strerror(-rc)); + return -1; + } + if (sg_version < 30000) { +- error_report("scsi-block: scsi generic interface too old"); ++ error_report("scsi generic interface too old"); + return -1; + } + + /* get device type from INQUIRY data */ + rc = get_device_type(s); + if (rc < 0) { +- error_report("scsi-block: INQUIRY failed"); ++ error_report("INQUIRY failed"); + return -1; + } + +diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c +index 8d92e0d..3733d2c 100644 +--- a/hw/scsi/scsi-generic.c ++++ b/hw/scsi/scsi-generic.c +@@ -394,6 +394,7 @@ static void scsi_destroy(SCSIDevice *s) + + static int scsi_generic_initfn(SCSIDevice *s) + { ++ int rc; + int sg_version; + struct sg_scsi_id scsiid; + +@@ -412,8 +413,11 @@ static int scsi_generic_initfn(SCSIDevice *s) + } + + /* check we are using a driver managing SG_IO (version 3 and after */ +- if (bdrv_ioctl(s->conf.bs, SG_GET_VERSION_NUM, &sg_version) < 0) { +- error_report("scsi generic interface not supported"); ++ rc = bdrv_ioctl(s->conf.bs, SG_GET_VERSION_NUM, &sg_version); ++ if (rc < 0) { ++ error_report("cannot get SG_IO version number: %s. " ++ "Is this a SCSI device?", ++ strerror(-rc)); + return -1; + } + if (sg_version < 30000) { +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-Report-error-when-lun-number-is-in-use.patch b/SOURCES/kvm-scsi-Report-error-when-lun-number-is-in-use.patch new file mode 100644 index 0000000..c6c368d --- /dev/null +++ b/SOURCES/kvm-scsi-Report-error-when-lun-number-is-in-use.patch @@ -0,0 +1,52 @@ +From dcbbbce1a1315b8baf85e10f43ee8355b34314cf Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 15 Jul 2014 15:54:03 -0500 +Subject: [CHANGE 24/29] scsi: Report error when lun number is in use +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405439643-14545-1-git-send-email-famz@redhat.com> +Patchwork-id: 59914 +O-Subject: [RHEL-7 qemu-kvm PATCH] scsi: Report error when lun number is in use +Bugzilla: 1096576 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1096576 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7702061 + +In the case that the lun number is taken by another scsi device, don't +release the existing device siliently, but report an error to user. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2039511b8f573165420c86380762ae829dc398d9) +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-bus.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: jen +--- + hw/scsi/scsi-bus.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 77e0c10..7e25c62 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -178,7 +178,8 @@ static int scsi_qdev_init(DeviceState *qdev) + d = scsi_device_find(bus, dev->channel, dev->id, dev->lun); + assert(d); + if (d->lun == dev->lun && dev != d) { +- object_unparent(OBJECT(d)); ++ error_report("lun already used by '%s'", d->qdev.id); ++ goto err; + } + } + +-- +1.9.3 + diff --git a/SOURCES/kvm-scsi-Support-TEST-UNIT-READY-in-the-dummy-LUN0.patch b/SOURCES/kvm-scsi-Support-TEST-UNIT-READY-in-the-dummy-LUN0.patch new file mode 100644 index 0000000..11bfb63 --- /dev/null +++ b/SOURCES/kvm-scsi-Support-TEST-UNIT-READY-in-the-dummy-LUN0.patch @@ -0,0 +1,55 @@ +From 4dfa4b8a0adf2ff3b5f48426e5f293d4ccaa86ce Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 29 Jan 2014 05:09:21 +0100 +Subject: [PATCH 03/28] scsi: Support TEST UNIT READY in the dummy LUN0 + +RH-Author: Fam Zheng +Message-id: <1390972161-27425-1-git-send-email-famz@redhat.com> +Patchwork-id: 57014 +O-Subject: [RHEL-7 qemu-kvm PATCH] scsi: Support TEST UNIT READY in the dummy LUN0 +Bugzilla: 1004143 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Markus Armbruster + +From: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1004143 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6965573 + +SeaBIOS waits for LUN0 to respond to the TEST UNIT READY command +in order to decide whether it should part of the boot sequence. +If LUN0 does not respond to the command, boot is delayed by up +to 5 seconds. This currently happens when there is no LUN0 on +a target. Fix that by adding a trivial implementation of the +command. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +(cherry picked from commit 1cb27d9233d572826b45bd8498d2fab1b6f01df9) +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-bus.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-bus.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 0f02208..a0fbf06 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -461,6 +461,8 @@ static int32_t scsi_target_send_command(SCSIRequest *req, uint8_t *buf) + r->req.dev->sense_is_ua = false; + } + break; ++ case TEST_UNIT_READY: ++ break; + default: + scsi_req_build_sense(req, SENSE_CODE(LUN_NOT_SUPPORTED)); + scsi_req_complete(req, CHECK_CONDITION); +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-bus-fix-transfer-length-and-direction-for-VERIF.patch b/SOURCES/kvm-scsi-bus-fix-transfer-length-and-direction-for-VERIF.patch new file mode 100644 index 0000000..008e1b0 --- /dev/null +++ b/SOURCES/kvm-scsi-bus-fix-transfer-length-and-direction-for-VERIF.patch @@ -0,0 +1,75 @@ +From 496cf1296786c104f08a04263d59abf701759374 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 20 Jan 2014 12:49:44 +0100 +Subject: [PATCH 28/34] scsi-bus: fix transfer length and direction for VERIFY command +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Paolo Bonzini +Message-id: <1390222185-24969-2-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56833 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 1/2] scsi-bus: fix transfer length and direction for VERIFY command +Bugzilla: 1035644 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +The amount of bytes to transfer depends on the BYTCHK field. +If any data is transferred, it is sent to the device. + +Cc: qemu-stable@nongnu.org +Tested-by: Hervé Poussineau +Signed-off-by: Paolo Bonzini +(cherry picked from commit d12ad44cc4cc9142179e64295608611f118b8ad8) +--- + hw/scsi/scsi-bus.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-bus.c | 14 +++++++++++++- + 1 files changed, 13 insertions(+), 1 deletions(-) + +diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c +index 6733c1a..0f02208 100644 +--- a/hw/scsi/scsi-bus.c ++++ b/hw/scsi/scsi-bus.c +@@ -874,7 +874,6 @@ static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) + case RELEASE: + case ERASE: + case ALLOW_MEDIUM_REMOVAL: +- case VERIFY_10: + case SEEK_10: + case SYNCHRONIZE_CACHE: + case SYNCHRONIZE_CACHE_16: +@@ -891,6 +890,16 @@ static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf) + case ALLOW_OVERWRITE: + cmd->xfer = 0; + break; ++ case VERIFY_10: ++ case VERIFY_12: ++ case VERIFY_16: ++ if ((buf[1] & 2) == 0) { ++ cmd->xfer = 0; ++ } else if ((buf[1] & 4) == 1) { ++ cmd->xfer = 1; ++ } ++ cmd->xfer *= dev->blocksize; ++ break; + case MODE_SENSE: + break; + case WRITE_SAME_10: +@@ -1088,6 +1097,9 @@ static void scsi_cmd_xfer_mode(SCSICommand *cmd) + case WRITE_VERIFY_12: + case WRITE_16: + case WRITE_VERIFY_16: ++ case VERIFY_10: ++ case VERIFY_12: ++ case VERIFY_16: + case COPY: + case COPY_VERIFY: + case COMPARE: +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-disk-Improve-error-messager-if-can-t-get-versio.patch b/SOURCES/kvm-scsi-disk-Improve-error-messager-if-can-t-get-versio.patch new file mode 100644 index 0000000..b112df6 --- /dev/null +++ b/SOURCES/kvm-scsi-disk-Improve-error-messager-if-can-t-get-versio.patch @@ -0,0 +1,54 @@ +From cd4c45ef3c5323053d76057a0435759ce84ede90 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 6 Jun 2014 04:11:38 +0200 +Subject: [PATCH 09/13] scsi-disk: Improve error messager if can't get version number + +RH-Author: Fam Zheng +Message-id: <1402027899-1917-2-git-send-email-famz@redhat.com> +Patchwork-id: 59163 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/2] scsi-disk: Improve error messager if can't get version number +Bugzilla: 1021788 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Stefan Hajnoczi + +More often it is that bdrv_ioctl fails due to not supported by driver or +whatever reason, in this case we should be specific, because "interface +too old" is very confusing. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4bbeb8b173e8116851d5ececb93189ae34c68309) +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-disk.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 6491091..5a6384e 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -2439,8 +2439,13 @@ static int scsi_block_initfn(SCSIDevice *dev) + } + + /* check we are using a driver managing SG_IO (version 3 and after) */ +- if (bdrv_ioctl(s->qdev.conf.bs, SG_GET_VERSION_NUM, &sg_version) < 0 || +- sg_version < 30000) { ++ rc = bdrv_ioctl(s->qdev.conf.bs, SG_GET_VERSION_NUM, &sg_version); ++ if (rc < 0) { ++ error_report("scsi-block: can not get version number: %s", ++ strerror(-rc)); ++ return -1; ++ } ++ if (sg_version < 30000) { + error_report("scsi-block: scsi generic interface too old"); + return -1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-disk-add-UNMAP-limits-to-block-limits-VPD-page.patch b/SOURCES/kvm-scsi-disk-add-UNMAP-limits-to-block-limits-VPD-page.patch new file mode 100644 index 0000000..607b422 --- /dev/null +++ b/SOURCES/kvm-scsi-disk-add-UNMAP-limits-to-block-limits-VPD-page.patch @@ -0,0 +1,113 @@ +From de979b1f256be8488f49a78646dee1ded06251ef Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 20 Jan 2014 12:49:40 +0100 +Subject: [PATCH 2/4] scsi-disk: add UNMAP limits to block limits VPD page + +RH-Author: Paolo Bonzini +Message-id: <1390222180-24891-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56831 +O-Subject: [RHEL 7.0 qemu-kvm PATCH] scsi-disk: add UNMAP limits to block limits VPD page +Bugzilla: 1037503 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng + +Bugzilla: 1037503 + +Brew build: 6896455 + +Linux prefers WRITE SAME to UNMAP if the limits are zero, and WRITE +SAME does not discard anything unless the device can guarantee that +the resulting block is zero. + +Setting the maximum unmap block and descriptor counts to non-zero +makes Linux choose UNMAP and fixes thin provisioning on glusterfs. + +While the maximum unmap block count can have some effect on performance, +the (suggested) maximum number of descriptors is not particularly +important so I didn't add a customization option. SCSI drivers are +used to online firmware updates so I'm not yet adding versioning support +for SCSI, but we're probably getting close to the point when it's worth +thinking about it. + +Reported-by: Bharata B Rao +Signed-off-by: Paolo Bonzini +(cherry picked from commit 8a1bd2973ed5f99a3c37c9afdff823c4a22152b1) +--- + hw/scsi/scsi-disk.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 20 ++++++++++++++++++++ + 1 files changed, 20 insertions(+), 0 deletions(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 7653411..bce617c 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -47,6 +47,7 @@ do { printf("scsi-disk: " fmt , ## __VA_ARGS__); } while (0) + #define SCSI_MAX_MODE_LEN 256 + + #define DEFAULT_DISCARD_GRANULARITY 4096 ++#define DEFAULT_MAX_UNMAP_SIZE (1 << 30) /* 1 GB */ + + typedef struct SCSIDiskState SCSIDiskState; + +@@ -74,6 +75,7 @@ struct SCSIDiskState + bool media_event; + bool eject_request; + uint64_t wwn; ++ uint64_t max_unmap_size; + QEMUBH *bh; + char *version; + char *serial; +@@ -625,6 +627,8 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf) + s->qdev.conf.min_io_size / s->qdev.blocksize; + unsigned int opt_io_size = + s->qdev.conf.opt_io_size / s->qdev.blocksize; ++ unsigned int max_unmap_sectors = ++ s->max_unmap_size / s->qdev.blocksize; + + if (s->qdev.type == TYPE_ROM) { + DPRINTF("Inquiry (EVPD[%02X] not supported for CDROM\n", +@@ -647,6 +651,18 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf) + outbuf[14] = (opt_io_size >> 8) & 0xff; + outbuf[15] = opt_io_size & 0xff; + ++ /* max unmap LBA count, default is 1GB */ ++ outbuf[20] = (max_unmap_sectors >> 24) & 0xff; ++ outbuf[21] = (max_unmap_sectors >> 16) & 0xff; ++ outbuf[22] = (max_unmap_sectors >> 8) & 0xff; ++ outbuf[23] = max_unmap_sectors & 0xff; ++ ++ /* max unmap descriptors, 255 fit in 4 kb with an 8-byte header. */ ++ outbuf[24] = 0; ++ outbuf[25] = 0; ++ outbuf[26] = 0; ++ outbuf[27] = 255; ++ + /* optimal unmap granularity */ + outbuf[28] = (unmap_sectors >> 24) & 0xff; + outbuf[29] = (unmap_sectors >> 16) & 0xff; +@@ -2519,6 +2535,8 @@ static Property scsi_hd_properties[] = { + DEFINE_PROP_BIT("dpofua", SCSIDiskState, features, + SCSI_DISK_F_DPOFUA, false), + DEFINE_PROP_HEX64("wwn", SCSIDiskState, wwn, 0), ++ DEFINE_PROP_UINT64("max_unmap_size", SCSIDiskState, max_unmap_size, ++ DEFAULT_MAX_UNMAP_SIZE), + DEFINE_BLOCK_CHS_PROPERTIES(SCSIDiskState, qdev.conf), + DEFINE_PROP_END_OF_LIST(), + }; +@@ -2628,6 +2646,8 @@ static Property scsi_disk_properties[] = { + DEFINE_PROP_BIT("dpofua", SCSIDiskState, features, + SCSI_DISK_F_DPOFUA, false), + DEFINE_PROP_HEX64("wwn", SCSIDiskState, wwn, 0), ++ DEFINE_PROP_UINT64("max_unmap_size", SCSIDiskState, max_unmap_size, ++ DEFAULT_MAX_UNMAP_SIZE), + DEFINE_PROP_END_OF_LIST(), + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-disk-catch-write-protection-errors-in-UNMAP.patch.patch.patch b/SOURCES/kvm-scsi-disk-catch-write-protection-errors-in-UNMAP.patch.patch.patch new file mode 100644 index 0000000..f83c383 --- /dev/null +++ b/SOURCES/kvm-scsi-disk-catch-write-protection-errors-in-UNMAP.patch.patch.patch @@ -0,0 +1,58 @@ +From 25760de201dc5c29d171fc4ae4f34d6eaabbdad6 Mon Sep 17 00:00:00 2001 +Message-Id: <25760de201dc5c29d171fc4ae4f34d6eaabbdad6.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:23 +0100 +Subject: [PATCH 35/50] scsi-disk: catch write protection errors in UNMAP + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-38-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56074 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 37/52] scsi-disk: catch write protection errors in UNMAP +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +This is the same that is already done for WRITE SAME. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c5fd1fb038405ed13496761970b3b531f747a892) +--- + hw/scsi/scsi-disk.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/scsi/scsi-disk.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 74e6a14..4138268 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -1543,6 +1543,7 @@ done: + + static void scsi_disk_emulate_unmap(SCSIDiskReq *r, uint8_t *inbuf) + { ++ SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev); + uint8_t *p = inbuf; + int len = r->req.cmd.xfer; + UnmapCBData *data; +@@ -1560,6 +1561,11 @@ static void scsi_disk_emulate_unmap(SCSIDiskReq *r, uint8_t *inbuf) + goto invalid_param_len; + } + ++ if (bdrv_is_read_only(s->qdev.conf.bs)) { ++ scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED)); ++ return; ++ } ++ + data = g_new0(UnmapCBData, 1); + data->r = r; + data->inbuf = &p[8]; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-scsi-disk-correctly-implement-WRITE-SAME.patch.patch.patch b/SOURCES/kvm-scsi-disk-correctly-implement-WRITE-SAME.patch.patch.patch new file mode 100644 index 0000000..0001b6a --- /dev/null +++ b/SOURCES/kvm-scsi-disk-correctly-implement-WRITE-SAME.patch.patch.patch @@ -0,0 +1,219 @@ +From 36d03c829bbf59e9346784b1e582803c482c4320 Mon Sep 17 00:00:00 2001 +Message-Id: <36d03c829bbf59e9346784b1e582803c482c4320.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:25 +0100 +Subject: [PATCH 37/50] scsi-disk: correctly implement WRITE SAME + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-40-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56076 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 39/52] scsi-disk: correctly implement WRITE SAME +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Fetch the data to be written from the input buffer. If it is all zeroes, +we can use the write_zeroes call (possibly with the new MAY_UNMAP flag). +Otherwise, do as many write cycles as needed, writing 512k at a time. + +Strictly speaking, this is still incorrect because a zero cluster should +only be written if the MAY_UNMAP flag is set. But this is a bug in qcow2 +and the other formats, not in the SCSI code. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 84f94a9a82487639bc87d5f09f938c9f6a61f79a) +--- + hw/scsi/scsi-disk.c | 140 +++++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 116 insertions(+), 24 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/scsi/scsi-disk.c | 140 +++++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 116 insertions(+), 24 deletions(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 0640bb0..efadfc0 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -41,6 +41,7 @@ do { printf("scsi-disk: " fmt , ## __VA_ARGS__); } while (0) + #include + #endif + ++#define SCSI_WRITE_SAME_MAX 524288 + #define SCSI_DMA_BUF_SIZE 131072 + #define SCSI_MAX_INQUIRY_LEN 256 + #define SCSI_MAX_MODE_LEN 256 +@@ -634,6 +635,8 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf) + buflen = 0x40; + memset(outbuf + 4, 0, buflen - 4); + ++ outbuf[4] = 0x1; /* wsnz */ ++ + /* optimal transfer length granularity */ + outbuf[6] = (min_io_size >> 8) & 0xff; + outbuf[7] = min_io_size & 0xff; +@@ -1589,6 +1592,111 @@ invalid_field: + scsi_check_condition(r, SENSE_CODE(INVALID_FIELD)); + } + ++typedef struct WriteSameCBData { ++ SCSIDiskReq *r; ++ int64_t sector; ++ int nb_sectors; ++ QEMUIOVector qiov; ++ struct iovec iov; ++} WriteSameCBData; ++ ++static void scsi_write_same_complete(void *opaque, int ret) ++{ ++ WriteSameCBData *data = opaque; ++ SCSIDiskReq *r = data->r; ++ SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev); ++ ++ assert(r->req.aiocb != NULL); ++ r->req.aiocb = NULL; ++ bdrv_acct_done(s->qdev.conf.bs, &r->acct); ++ if (r->req.io_canceled) { ++ goto done; ++ } ++ ++ if (ret < 0) { ++ if (scsi_handle_rw_error(r, -ret)) { ++ goto done; ++ } ++ } ++ ++ data->nb_sectors -= data->iov.iov_len / 512; ++ data->sector += data->iov.iov_len / 512; ++ data->iov.iov_len = MIN(data->nb_sectors * 512, data->iov.iov_len); ++ if (data->iov.iov_len) { ++ bdrv_acct_start(s->qdev.conf.bs, &r->acct, data->iov.iov_len, BDRV_ACCT_WRITE); ++ r->req.aiocb = bdrv_aio_writev(s->qdev.conf.bs, data->sector, ++ &data->qiov, data->iov.iov_len / 512, ++ scsi_write_same_complete, r); ++ return; ++ } ++ ++ scsi_req_complete(&r->req, GOOD); ++ ++done: ++ if (!r->req.io_canceled) { ++ scsi_req_unref(&r->req); ++ } ++ qemu_vfree(data->iov.iov_base); ++ g_free(data); ++} ++ ++static void scsi_disk_emulate_write_same(SCSIDiskReq *r, uint8_t *inbuf) ++{ ++ SCSIRequest *req = &r->req; ++ SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, req->dev); ++ uint32_t nb_sectors = scsi_data_cdb_length(r->req.cmd.buf); ++ WriteSameCBData *data; ++ uint8_t *buf; ++ int i; ++ ++ /* Fail if PBDATA=1 or LBDATA=1 or ANCHOR=1. */ ++ if (nb_sectors == 0 || (req->cmd.buf[1] & 0x16)) { ++ scsi_check_condition(r, SENSE_CODE(INVALID_FIELD)); ++ return; ++ } ++ ++ if (bdrv_is_read_only(s->qdev.conf.bs)) { ++ scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED)); ++ return; ++ } ++ if (!check_lba_range(s, r->req.cmd.lba, nb_sectors)) { ++ scsi_check_condition(r, SENSE_CODE(LBA_OUT_OF_RANGE)); ++ return; ++ } ++ ++ if (buffer_is_zero(inbuf, s->qdev.blocksize)) { ++ int flags = (req->cmd.buf[1] & 0x8) ? BDRV_REQ_MAY_UNMAP : 0; ++ ++ /* The request is used as the AIO opaque value, so add a ref. */ ++ scsi_req_ref(&r->req); ++ bdrv_acct_start(s->qdev.conf.bs, &r->acct, nb_sectors * s->qdev.blocksize, ++ BDRV_ACCT_WRITE); ++ r->req.aiocb = bdrv_aio_write_zeroes(s->qdev.conf.bs, ++ r->req.cmd.lba * (s->qdev.blocksize / 512), ++ nb_sectors * (s->qdev.blocksize / 512), ++ flags, scsi_aio_complete, r); ++ return; ++ } ++ ++ data = g_new0(WriteSameCBData, 1); ++ data->r = r; ++ data->sector = r->req.cmd.lba * (s->qdev.blocksize / 512); ++ data->nb_sectors = nb_sectors * (s->qdev.blocksize / 512); ++ data->iov.iov_len = MIN(data->nb_sectors * 512, SCSI_WRITE_SAME_MAX); ++ data->iov.iov_base = buf = qemu_blockalign(s->qdev.conf.bs, data->iov.iov_len); ++ qemu_iovec_init_external(&data->qiov, &data->iov, 1); ++ ++ for (i = 0; i < data->iov.iov_len; i += s->qdev.blocksize) { ++ memcpy(&buf[i], inbuf, s->qdev.blocksize); ++ } ++ ++ scsi_req_ref(&r->req); ++ bdrv_acct_start(s->qdev.conf.bs, &r->acct, data->iov.iov_len, BDRV_ACCT_WRITE); ++ r->req.aiocb = bdrv_aio_writev(s->qdev.conf.bs, data->sector, ++ &data->qiov, data->iov.iov_len / 512, ++ scsi_write_same_complete, data); ++} ++ + static void scsi_disk_emulate_write_data(SCSIRequest *req) + { + SCSIDiskReq *r = DO_UPCAST(SCSIDiskReq, req, req); +@@ -1612,6 +1720,10 @@ static void scsi_disk_emulate_write_data(SCSIRequest *req) + scsi_disk_emulate_unmap(r, r->iov.iov_base); + break; + ++ case WRITE_SAME_10: ++ case WRITE_SAME_16: ++ scsi_disk_emulate_write_same(r, r->iov.iov_base); ++ break; + default: + abort(); + } +@@ -1854,30 +1966,10 @@ static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf) + break; + case WRITE_SAME_10: + case WRITE_SAME_16: +- nb_sectors = scsi_data_cdb_length(r->req.cmd.buf); +- if (bdrv_is_read_only(s->qdev.conf.bs)) { +- scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED)); +- return 0; +- } +- if (!check_lba_range(s, r->req.cmd.lba, nb_sectors)) { +- goto illegal_lba; +- } +- +- /* +- * We only support WRITE SAME with the unmap bit set for now. +- * Reject UNMAP=0 or ANCHOR=1. +- */ +- if (!(req->cmd.buf[1] & 0x8) || (req->cmd.buf[1] & 0x10)) { +- goto illegal_request; +- } +- +- /* The request is used as the AIO opaque value, so add a ref. */ +- scsi_req_ref(&r->req); +- r->req.aiocb = bdrv_aio_discard(s->qdev.conf.bs, +- r->req.cmd.lba * (s->qdev.blocksize / 512), +- nb_sectors * (s->qdev.blocksize / 512), +- scsi_aio_complete, r); +- return 0; ++ DPRINTF("WRITE SAME %d (len %lu)\n", ++ req->cmd.buf[0] == WRITE_SAME_10 ? 10 : 16, ++ (long)r->req.cmd.xfer); ++ break; + default: + DPRINTF("Unknown SCSI command (%2.2x)\n", buf[0]); + scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE)); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-scsi-disk-fix-VERIFY-emulation.patch b/SOURCES/kvm-scsi-disk-fix-VERIFY-emulation.patch new file mode 100644 index 0000000..37f0853 --- /dev/null +++ b/SOURCES/kvm-scsi-disk-fix-VERIFY-emulation.patch @@ -0,0 +1,109 @@ +From e110f0eee587fbfc75409e0980f25275dd8551de Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 20 Jan 2014 12:49:45 +0100 +Subject: [PATCH 29/34] scsi-disk: fix VERIFY emulation +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Paolo Bonzini +Message-id: <1390222185-24969-3-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56834 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 2/2] scsi-disk: fix VERIFY emulation +Bugzilla: 1035644 +RH-Acked-by: Fam Zheng +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +VERIFY emulation was completely botched (and remained botched through +all the refactorings). The command must be emulated both in check-medium +mode (BYTCHK=00, which we implement by doing nothing) and in check-bytes +mode (which we do not implement yet). Unlike WRITE AND VERIFY (which we +treat simply as WRITE with FUA bit set), VERIFY cannot be handled like +READ. In fact the device is _receiving_ data for VERIFY, not _sending_ +it like READ. + +Cc: qemu-stable@nongnu.org +Tested-by: Hervé Poussineau +Signed-off-by: Paolo Bonzini +(cherry picked from commit d97e7730816094a71cd1f19a56d7a73f77cdbf96) +--- + hw/scsi/scsi-disk.c | 27 ++++++++++++++++++++------- + 1 file changed, 20 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 27 ++++++++++++++++++++------- + 1 files changed, 20 insertions(+), 7 deletions(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index c44f159..7653411 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -1720,10 +1720,19 @@ static void scsi_disk_emulate_write_data(SCSIRequest *req) + scsi_disk_emulate_unmap(r, r->iov.iov_base); + break; + ++ case VERIFY_10: ++ case VERIFY_12: ++ case VERIFY_16: ++ if (r->req.status == -1) { ++ scsi_check_condition(r, SENSE_CODE(INVALID_FIELD)); ++ } ++ break; ++ + case WRITE_SAME_10: + case WRITE_SAME_16: + scsi_disk_emulate_write_same(r, r->iov.iov_base); + break; ++ + default: + abort(); + } +@@ -1964,6 +1973,14 @@ static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf) + case UNMAP: + DPRINTF("Unmap (len %lu)\n", (long)r->req.cmd.xfer); + break; ++ case VERIFY_10: ++ case VERIFY_12: ++ case VERIFY_16: ++ DPRINTF("Verify (bytchk %lu)\n", (r->req.buf[1] >> 1) & 3); ++ if (req->cmd.buf[1] & 6) { ++ goto illegal_request; ++ } ++ break; + case WRITE_SAME_10: + case WRITE_SAME_16: + DPRINTF("WRITE SAME %d (len %lu)\n", +@@ -2044,10 +2061,6 @@ static int32_t scsi_disk_dma_command(SCSIRequest *req, uint8_t *buf) + scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED)); + return 0; + } +- /* fallthrough */ +- case VERIFY_10: +- case VERIFY_12: +- case VERIFY_16: + DPRINTF("Write %s(sector %" PRId64 ", count %u)\n", + (command & 0xe) == 0xe ? "And Verify " : "", + r->req.cmd.lba, len); +@@ -2315,14 +2328,14 @@ static const SCSIReqOps *const scsi_disk_reqops_dispatch[256] = { + [UNMAP] = &scsi_disk_emulate_reqops, + [WRITE_SAME_10] = &scsi_disk_emulate_reqops, + [WRITE_SAME_16] = &scsi_disk_emulate_reqops, ++ [VERIFY_10] = &scsi_disk_emulate_reqops, ++ [VERIFY_12] = &scsi_disk_emulate_reqops, ++ [VERIFY_16] = &scsi_disk_emulate_reqops, + + [READ_6] = &scsi_disk_dma_reqops, + [READ_10] = &scsi_disk_dma_reqops, + [READ_12] = &scsi_disk_dma_reqops, + [READ_16] = &scsi_disk_dma_reqops, +- [VERIFY_10] = &scsi_disk_dma_reqops, +- [VERIFY_12] = &scsi_disk_dma_reqops, +- [VERIFY_16] = &scsi_disk_dma_reqops, + [WRITE_6] = &scsi_disk_dma_reqops, + [WRITE_10] = &scsi_disk_dma_reqops, + [WRITE_12] = &scsi_disk_dma_reqops, +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-disk-fix-WRITE-SAME-with-large-non-zero-payload.patch.patch.patch b/SOURCES/kvm-scsi-disk-fix-WRITE-SAME-with-large-non-zero-payload.patch.patch.patch new file mode 100644 index 0000000..3fb0993 --- /dev/null +++ b/SOURCES/kvm-scsi-disk-fix-WRITE-SAME-with-large-non-zero-payload.patch.patch.patch @@ -0,0 +1,46 @@ +From 7239bc0ab3b7be4dabb0e65a19c0618ce0a6a171 Mon Sep 17 00:00:00 2001 +Message-Id: <7239bc0ab3b7be4dabb0e65a19c0618ce0a6a171.1389014116.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:26 +0100 +Subject: [PATCH 38/50] scsi-disk: fix WRITE SAME with large non-zero payload + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-41-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56077 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 40/52] scsi-disk: fix WRITE SAME with large non-zero payload +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Due to a thinko in the patch that implemented WRITE SAME. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 98e33f1b0eff84d9538cf957dde48c3f67f6f9d8) +--- + hw/scsi/scsi-disk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/scsi/scsi-disk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index efadfc0..c44f159 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -1626,7 +1626,7 @@ static void scsi_write_same_complete(void *opaque, int ret) + bdrv_acct_start(s->qdev.conf.bs, &r->acct, data->iov.iov_len, BDRV_ACCT_WRITE); + r->req.aiocb = bdrv_aio_writev(s->qdev.conf.bs, data->sector, + &data->qiov, data->iov.iov_len / 512, +- scsi_write_same_complete, r); ++ scsi_write_same_complete, data); + return; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-scsi-disk-fix-bug-in-scsi_block_new_request-introduc.patch b/SOURCES/kvm-scsi-disk-fix-bug-in-scsi_block_new_request-introduc.patch new file mode 100644 index 0000000..8ee496d --- /dev/null +++ b/SOURCES/kvm-scsi-disk-fix-bug-in-scsi_block_new_request-introduc.patch @@ -0,0 +1,46 @@ +From 4c3960c0fdeb57a5cb74a9de3883b6e6109bf946 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 12 Sep 2014 11:56:30 +0200 +Subject: [PATCH] scsi-disk: fix bug in scsi_block_new_request() introduced by commit 137745c + +Message-id: <1410522991-11612-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 61021 +O-Subject: [RHEL 7.1/7.0.z qemu-kvm PATCH] scsi-disk: fix bug in scsi_block_new_request() introduced by commit 137745c +Bugzilla: 1105880 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng + +From: Ulrich Obergfell + +This patch fixes a bug in scsi_block_new_request() that was introduced +by commit 137745c5c60f083ec982fe9e861e8c16ebca1ba8. If the host cache +is used - i.e. if BDRV_O_NOCACHE is _not_ set - the 'break' statement +needs to be executed to 'fall back' to SG_IO. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Ulrich Obergfell +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2fe5a9f73b3446690db2cae8a58473b0b4beaa32) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 1d41db2..50b7910 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -2502,7 +2502,7 @@ static SCSIRequest *scsi_block_new_request(SCSIDevice *d, uint32_t tag, + * ones (such as WRITE SAME or EXTENDED COPY, etc.). So, without + * O_DIRECT everything must go through SG_IO. + */ +- if (bdrv_get_flags(s->qdev.conf.bs) & BDRV_O_NOCACHE) { ++ if (!(bdrv_get_flags(s->qdev.conf.bs) & BDRV_O_NOCACHE)) { + break; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-scsi-disk-fix-cmd.mode-field-typo.patch b/SOURCES/kvm-scsi-disk-fix-cmd.mode-field-typo.patch new file mode 100644 index 0000000..f5935cd --- /dev/null +++ b/SOURCES/kvm-scsi-disk-fix-cmd.mode-field-typo.patch @@ -0,0 +1,45 @@ +From 684c8889083b1479d64c7a04b2d0dd8b9961d46d Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 3 Aug 2015 16:51:20 +0200 +Subject: [PATCH 06/13] scsi-disk: fix cmd.mode field typo + +Message-id: <1438620680-24121-3-git-send-email-stefanha@redhat.com> +Patchwork-id: 67256 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/2] scsi-disk: fix cmd.mode field typo +Bugzilla: 1249718 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Fam Zheng +RH-Acked-by: Paolo Bonzini + +The cmd.xfer field is the data length. The cmd.mode field is the data +transfer direction. + +scsi_handle_rw_error() was using the wrong error policy for read +requests. + +Signed-off-by: Stefan Hajnoczi +Message-Id: <1438262173-11546-3-git-send-email-stefanha@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit c85a7a0057ca454607a40cde991d495e0deec34d) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 50b7910..8a8b0ab 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -413,7 +413,7 @@ static void scsi_read_data(SCSIRequest *req) + */ + static int scsi_handle_rw_error(SCSIDiskReq *r, int error) + { +- bool is_read = (r->req.cmd.xfer == SCSI_XFER_FROM_DEV); ++ bool is_read = (r->req.cmd.mode == SCSI_XFER_FROM_DEV); + SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev); + BlockErrorAction action = bdrv_get_error_action(s->qdev.conf.bs, is_read, error); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scsi-disk-reject-ANCHOR-1-for-UNMAP-and-WRITE-SAME-c.patch.patch.patch b/SOURCES/kvm-scsi-disk-reject-ANCHOR-1-for-UNMAP-and-WRITE-SAME-c.patch.patch.patch new file mode 100644 index 0000000..f57486c --- /dev/null +++ b/SOURCES/kvm-scsi-disk-reject-ANCHOR-1-for-UNMAP-and-WRITE-SAME-c.patch.patch.patch @@ -0,0 +1,77 @@ +From bcf0f4b1f226bcb27e154cc14850f67229b22d90 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:24 +0100 +Subject: [PATCH 36/50] scsi-disk: reject ANCHOR=1 for UNMAP and WRITE SAME + commands + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-39-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56075 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 38/52] scsi-disk: reject ANCHOR=1 for UNMAP and WRITE SAME commands +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Since we report ANC_SUP==0 in VPD page B2h, we need to return +an error (ILLEGAL REQUEST/INVALID FIELD IN CDB) for all WRITE SAME +requests with ANCHOR==1. + +Inspired by a similar patch to the LIO in-kernel target. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 823bd7391c96ba675f20fd6d952d1cb6e1ffb851) +--- + hw/scsi/scsi-disk.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/scsi/scsi-disk.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 4138268..0640bb0 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -1548,6 +1548,11 @@ static void scsi_disk_emulate_unmap(SCSIDiskReq *r, uint8_t *inbuf) + int len = r->req.cmd.xfer; + UnmapCBData *data; + ++ /* Reject ANCHOR=1. */ ++ if (r->req.cmd.buf[1] & 0x1) { ++ goto invalid_field; ++ } ++ + if (len < 8) { + goto invalid_param_len; + } +@@ -1578,6 +1583,10 @@ static void scsi_disk_emulate_unmap(SCSIDiskReq *r, uint8_t *inbuf) + + invalid_param_len: + scsi_check_condition(r, SENSE_CODE(INVALID_PARAM_LEN)); ++ return; ++ ++invalid_field: ++ scsi_check_condition(r, SENSE_CODE(INVALID_FIELD)); + } + + static void scsi_disk_emulate_write_data(SCSIRequest *req) +@@ -1856,8 +1865,9 @@ static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf) + + /* + * We only support WRITE SAME with the unmap bit set for now. ++ * Reject UNMAP=0 or ANCHOR=1. + */ +- if (!(req->cmd.buf[1] & 0x8)) { ++ if (!(req->cmd.buf[1] & 0x8) || (req->cmd.buf[1] & 0x10)) { + goto illegal_request; + } + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-scsi-disk-support-reporting-of-rotation-rate.patch b/SOURCES/kvm-scsi-disk-support-reporting-of-rotation-rate.patch new file mode 100644 index 0000000..02733ca --- /dev/null +++ b/SOURCES/kvm-scsi-disk-support-reporting-of-rotation-rate.patch @@ -0,0 +1,103 @@ +From 04ab93423b97ab5bc175032e0e4e1da288840805 Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Thu, 2 Aug 2018 15:53:34 +0200 +Subject: [PATCH 1/4] scsi-disk: support reporting of rotation rate + +RH-Author: John Snow +Message-id: <20180802155336.10347-2-jsnow@redhat.com> +Patchwork-id: 81613 +O-Subject: [RHEL-7.6 qemu-kvm PATCH 1/3] scsi-disk: support reporting of rotation rate +Bugzilla: 1583807 +RH-Acked-by: Daniel P. Berrange +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Thomas Huth + +From: "Daniel P. Berrange" + +The Linux kernel will query the SCSI "Block device characteristics" +VPD to determine the rotations per minute of the disk. If this has +the value 1, it is taken to be an SSD and so Linux sets the +'rotational' flag to 0 for the I/O queue and will stop using that +disk as a source of random entropy. Other operating systems may +also take into account rotation rate when setting up default +behaviour. + +Mgmt apps should be able to set the rotation rate for virtualized +block devices, based on characteristics of the host storage in use, +so that the guest OS gets sensible behaviour out of the box. This +patch thus adds a 'rotation-rate' parameter for 'scsi-hd' and +'scsi-block' device types. For the latter, this parameter will be +ignored unless the host device has TYPE_DISK. + +Signed-off-by: Daniel P. Berrange +Message-Id: <20171004114008.14849-2-berrange@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 070f80095ad5b1143b50d2faffd2b1a84292e00d) +Signed-off-by: John Snow +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/scsi-disk.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c +index 8a8b0ab..911c7b7 100644 +--- a/hw/scsi/scsi-disk.c ++++ b/hw/scsi/scsi-disk.c +@@ -83,6 +83,14 @@ struct SCSIDiskState + char *product; + bool tray_open; + bool tray_locked; ++ /* ++ * 0x0000 - rotation rate not reported ++ * 0x0001 - non-rotating medium (SSD) ++ * 0x0002-0x0400 - reserved ++ * 0x0401-0xffe - rotations per minute ++ * 0xffff - reserved ++ */ ++ uint16_t rotation_rate; + }; + + static int scsi_handle_rw_error(SCSIDiskReq *r, int error); +@@ -565,6 +573,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf) + outbuf[buflen++] = 0x83; // device identification + if (s->qdev.type == TYPE_DISK) { + outbuf[buflen++] = 0xb0; // block limits ++ outbuf[buflen++] = 0xb1; /* block device characteristics */ + outbuf[buflen++] = 0xb2; // thin provisioning + } + break; +@@ -670,6 +679,15 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf) + outbuf[31] = unmap_sectors & 0xff; + break; + } ++ case 0xb1: /* block device characteristics */ ++ { ++ buflen = 8; ++ outbuf[4] = (s->rotation_rate >> 8) & 0xff; ++ outbuf[5] = s->rotation_rate & 0xff; ++ outbuf[6] = 0; ++ outbuf[7] = 0; ++ break; ++ } + case 0xb2: /* thin provisioning */ + { + buflen = 8; +@@ -2543,6 +2561,7 @@ static Property scsi_hd_properties[] = { + DEFINE_PROP_HEX64("wwn", SCSIDiskState, wwn, 0), + DEFINE_PROP_UINT64("max_unmap_size", SCSIDiskState, max_unmap_size, + DEFAULT_MAX_UNMAP_SIZE), ++ DEFINE_PROP_UINT16("rotation_rate", SCSIDiskState, rotation_rate, 0), + DEFINE_BLOCK_CHS_PROPERTIES(SCSIDiskState, qdev.conf), + DEFINE_PROP_END_OF_LIST(), + }; +@@ -2619,6 +2638,7 @@ static const TypeInfo scsi_cd_info = { + static Property scsi_block_properties[] = { + DEFINE_PROP_DRIVE("drive", SCSIDiskState, qdev.conf.bs), + DEFINE_PROP_INT32("bootindex", SCSIDiskState, qdev.conf.bootindex, -1), ++ DEFINE_PROP_UINT16("rotation_rate", SCSIDiskState, rotation_rate, 0), + DEFINE_PROP_END_OF_LIST(), + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scsi-generic-Merge-block-max-xfer-len-in-INQUIRY-res.patch b/SOURCES/kvm-scsi-generic-Merge-block-max-xfer-len-in-INQUIRY-res.patch new file mode 100644 index 0000000..9f465df --- /dev/null +++ b/SOURCES/kvm-scsi-generic-Merge-block-max-xfer-len-in-INQUIRY-res.patch @@ -0,0 +1,67 @@ +From b3f427e4eb27091ca712f6c18e2e63a414dc4ce2 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 11 Jul 2016 05:33:37 +0200 +Subject: [PATCH 4/7] scsi-generic: Merge block max xfer len in INQUIRY + response + +RH-Author: Fam Zheng +Message-id: <1468215219-30793-5-git-send-email-famz@redhat.com> +Patchwork-id: 71108 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 4/6] scsi-generic: Merge block max xfer len in INQUIRY response +Bugzilla: 1318199 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +The rationale is similar to the above mode sense response interception: +this is practically the only channel to communicate restraints from +elsewhere such as host and block driver. + +The scsi bus we attach onto can have a larger max xfer len than what is +accepted by the host file system (guarding between the host scsi LUN and +QEMU), in which case the SG_IO we generate would get -EINVAL. + +Signed-off-by: Fam Zheng +Message-Id: <1464243305-10661-3-git-send-email-famz@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 063143d5b1fde0fdcbae30bc7d6d14e76fa607d2) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/scsi/scsi-generic.c +We don't have BlockBackend in downstream, use bdrv_get_max_transfer_length() +instead. + +The context is different because we don't have fa0d653b0 (scsi-generic: +identify AIO callbacks more clearly). + +Signed-off-by: Fam Zheng +--- + hw/scsi/scsi-generic.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c +index 3733d2c..6b0c1fe 100644 +--- a/hw/scsi/scsi-generic.c ++++ b/hw/scsi/scsi-generic.c +@@ -207,6 +207,17 @@ static void scsi_read_complete(void * opaque, int ret) + (r->req.cmd.buf[1] & 31) == SAI_READ_CAPACITY_16) { + s->blocksize = ldl_be_p(&r->buf[8]); + s->max_lba = ldq_be_p(&r->buf[0]); ++ } else if (s->type == TYPE_DISK && ++ r->req.cmd.buf[0] == INQUIRY && ++ r->req.cmd.buf[2] == 0xb0) { ++ uint32_t max_xfer_len = bdrv_get_max_transfer_length(s->conf.bs); ++ if (max_xfer_len) { ++ stl_be_p(&r->buf[8], max_xfer_len); ++ /* Also take care of the opt xfer len. */ ++ if (ldl_be_p(&r->buf[12]) > max_xfer_len) { ++ stl_be_p(&r->buf[12], max_xfer_len); ++ } ++ } + } + bdrv_set_guest_block_size(s->conf.bs, s->blocksize); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-scsi-prefer-UUID-to-VM-name-for-the-initiator-name.patch b/SOURCES/kvm-scsi-prefer-UUID-to-VM-name-for-the-initiator-name.patch new file mode 100644 index 0000000..442ead1 --- /dev/null +++ b/SOURCES/kvm-scsi-prefer-UUID-to-VM-name-for-the-initiator-name.patch @@ -0,0 +1,140 @@ +From ca89af18d37afb4fe9cea6e4ff3e22386d0db5b0 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 23 Sep 2013 17:07:53 +0200 +Subject: [PATCH 2/3] scsi: prefer UUID to VM name for the initiator name + +RH-Author: Paolo Bonzini +Message-id: <1379956073-3496-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54488 +O-Subject: [RHEL 7.0 qemu-kvm PATCH] scsi: prefer UUID to VM name for the initiator name +Bugzilla: 1006468 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Amos Kong + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1006468 + +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6317378 + +The UUID is unique even across multiple hosts, thus it is +better than a VM name even if it is less user-friendly. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5accc8408f2dac1e00d888e4fe75e6174ba2a940) +--- + block/iscsi.c | 23 ++++++++++++++++------- + include/sysemu/sysemu.h | 2 ++ + stubs/Makefile.objs | 1 + + stubs/uuid.c | 12 ++++++++++++ + 4 files changed, 31 insertions(+), 7 deletions(-) + create mode 100644 stubs/uuid.c + +Signed-off-by: Miroslav Rezanina +--- + block/iscsi.c | 23 ++++++++++++++++------- + include/sysemu/sysemu.h | 2 ++ + stubs/Makefile.objs | 1 + + stubs/uuid.c | 12 ++++++++++++ + 4 files changed, 31 insertions(+), 7 deletions(-) + create mode 100644 stubs/uuid.c + +diff --git a/block/iscsi.c b/block/iscsi.c +index 1294fdf..4ab9edc 100644 +--- a/block/iscsi.c ++++ b/block/iscsi.c +@@ -33,6 +33,8 @@ + #include "trace.h" + #include "block/scsi.h" + #include "qemu/iov.h" ++#include "sysemu/sysemu.h" ++#include "qmp-commands.h" + + #include + #include +@@ -923,8 +925,9 @@ static char *parse_initiator_name(const char *target) + { + QemuOptsList *list; + QemuOpts *opts; +- const char *name = NULL; +- const char *iscsi_name = qemu_get_vm_name(); ++ const char *name; ++ char *iscsi_name; ++ UuidInfo *uuid_info; + + list = qemu_find_opts("iscsi"); + if (list) { +@@ -934,16 +937,22 @@ static char *parse_initiator_name(const char *target) + } + if (opts) { + name = qemu_opt_get(opts, "initiator-name"); ++ if (name) { ++ return g_strdup(name); ++ } + } + } + +- if (name) { +- return g_strdup(name); ++ uuid_info = qmp_query_uuid(NULL); ++ if (strcmp(uuid_info->UUID, UUID_NONE) == 0) { ++ name = qemu_get_vm_name(); + } else { +- return g_strdup_printf("iqn.2008-11.org.linux-kvm%s%s", +- iscsi_name ? ":" : "", +- iscsi_name ? iscsi_name : ""); ++ name = uuid_info->UUID; + } ++ iscsi_name = g_strdup_printf("iqn.2008-11.org.linux-kvm%s%s", ++ name ? ":" : "", name ? name : ""); ++ qapi_free_UuidInfo(uuid_info); ++ return iscsi_name; + } + + #if defined(LIBISCSI_FEATURE_NOP_COUNTER) +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index d7a77b6..76c5b64 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -17,7 +17,9 @@ extern const char *bios_name; + extern const char *qemu_name; + extern uint8_t qemu_uuid[]; + int qemu_uuid_parse(const char *str, uint8_t *uuid); ++ + #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" ++#define UUID_NONE "00000000-0000-0000-0000-000000000000" + + bool runstate_check(RunState state); + void runstate_set(RunState new_state); +diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs +index 9b701b4..4b2cb7d 100644 +--- a/stubs/Makefile.objs ++++ b/stubs/Makefile.objs +@@ -21,6 +21,7 @@ stub-obj-y += reset.o + stub-obj-y += set-fd-handler.o + stub-obj-y += slirp.o + stub-obj-y += sysbus.o ++stub-obj-y += uuid.o + stub-obj-y += vm-stop.o + stub-obj-y += vmstate.o + stub-obj-$(CONFIG_WIN32) += fd-register.o +diff --git a/stubs/uuid.c b/stubs/uuid.c +new file mode 100644 +index 0000000..ffc0ed4 +--- /dev/null ++++ b/stubs/uuid.c +@@ -0,0 +1,12 @@ ++#include "qemu-common.h" ++#include "sysemu/sysemu.h" ++#include "qmp-commands.h" ++ ++UuidInfo *qmp_query_uuid(Error **errp) ++{ ++ UuidInfo *info = g_malloc0(sizeof(*info)); ++ ++ info->UUID = g_strdup(UUID_NONE); ++ return info; ++} ++ +-- +1.7.1 + diff --git a/SOURCES/kvm-sd-Avoid-access-to-NULL-BlockDriverState.patch b/SOURCES/kvm-sd-Avoid-access-to-NULL-BlockDriverState.patch new file mode 100644 index 0000000..162590e --- /dev/null +++ b/SOURCES/kvm-sd-Avoid-access-to-NULL-BlockDriverState.patch @@ -0,0 +1,58 @@ +From 6c6316c53a1e2ddd34c31ecf5d757646482c4202 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 5 Nov 2013 14:09:15 +0100 +Subject: [PATCH 62/87] sd: Avoid access to NULL BlockDriverState +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Kevin Wolf +Message-id: <1383660558-32096-22-git-send-email-kwolf@redhat.com> +Patchwork-id: 55400 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 21/24] sd: Avoid access to NULL BlockDriverState +Bugzilla: 978402 +RH-Acked-by: Fam Zheng +RH-Acked-by: Max Reitz +RH-Acked-by: Laszlo Ersek + +From: Andreas Färber + +Commit 4f8a066b5fc254eeaabbbde56ba4f5b29cc68fdf (blockdev: Remove IF_* +check for read-only blockdev_init) added a usage of bdrv_is_read_only() +to sd_init(), which is called for versatilepb, versatileab and +xilinx-zynq-a9 machines among others with NULL argument by default, +causing the new qom-test to fail. + +Add a check to prevent this. + +Suggested-by: Kevin Wolf +Signed-off-by: Andreas Färber +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 794cbc26eb94ce13c75d105eea9ff0afff56e2c2) + +Signed-off-by: Kevin Wolf +--- + hw/sd/sd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/sd/sd.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/sd/sd.c b/hw/sd/sd.c +index e816c78..c9651b9 100644 +--- a/hw/sd/sd.c ++++ b/hw/sd/sd.c +@@ -492,7 +492,7 @@ SDState *sd_init(BlockDriverState *bs, bool is_spi) + { + SDState *sd; + +- if (bdrv_is_read_only(bs)) { ++ if (bs && bdrv_is_read_only(bs)) { + fprintf(stderr, "sd_init: Cannot use read-only drive\n"); + return NULL; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-seabios-paravirt-allow-more-than-1TB-in-x86-guest.patch b/SOURCES/kvm-seabios-paravirt-allow-more-than-1TB-in-x86-guest.patch new file mode 100644 index 0000000..58edd85 --- /dev/null +++ b/SOURCES/kvm-seabios-paravirt-allow-more-than-1TB-in-x86-guest.patch @@ -0,0 +1,43 @@ +From df701ea37b50b14a18185708189d85d332b29319 Mon Sep 17 00:00:00 2001 +From: Andrea Arcangeli +Date: Tue, 8 Oct 2013 17:05:45 +0200 +Subject: [PATCH 1/3] seabios paravirt: allow more than 1TB in x86 guest + +RH-Author: Andrea Arcangeli +Message-id: <1381251945-13402-2-git-send-email-aarcange@redhat.com> +Patchwork-id: 54784 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] seabios paravirt: allow more than 1TB in x86 guest +Bugzilla: 989677 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gleb Natapov +RH-Acked-by: Laszlo Ersek + +This patch should be applied to the qemu-kvm rpm package at the same +time of the other one for seabios, so qemu will forward the ram_size +bits over 40 to seabios without losing them. + +Signed-off-by: Andrea Arcangeli +--- + hw/i386/pc.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc.c b/hw/i386/pc.c +index 3c77040..d3acbbb 100644 +--- a/hw/i386/pc.c ++++ b/hw/i386/pc.c +@@ -399,6 +399,7 @@ void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, + rtc_set_memory(s, 0x5b, val); + rtc_set_memory(s, 0x5c, val >> 8); + rtc_set_memory(s, 0x5d, val >> 16); ++ rtc_set_memory(s, 0x5e, val >> 24); + + /* set the number of CPU */ + rtc_set_memory(s, 0x5f, smp_cpus - 1); +-- +1.7.1 + diff --git a/SOURCES/kvm-seccomp-add-kill-to-the-syscall-whitelist.patch b/SOURCES/kvm-seccomp-add-kill-to-the-syscall-whitelist.patch new file mode 100644 index 0000000..79e8d69 --- /dev/null +++ b/SOURCES/kvm-seccomp-add-kill-to-the-syscall-whitelist.patch @@ -0,0 +1,73 @@ +From 2735c1f0c0ae68933112a98bf5a5c6d22486c74f Mon Sep 17 00:00:00 2001 +Message-Id: <2735c1f0c0ae68933112a98bf5a5c6d22486c74f.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Paul Moore +Date: Tue, 3 Dec 2013 16:04:48 +0100 +Subject: [PATCH 03/21] seccomp: add kill() to the syscall whitelist + +RH-Author: Paul Moore +Message-id: <20131203160448.1445.78917.stgit@localhost> +Patchwork-id: 55976 +O-Subject: [RHEL7 qemu-kvm PATCH] seccomp: add kill() to the syscall whitelist +Bugzilla: 1026314 +RH-Acked-by: Bandan Das +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: knoel@redhat.com + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1026314 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6672333 +Upstream: In QEMU/seccomp maintainer's tree + git://github.com/otubo/qemu.git#seccomp +Tested: Tested by myself, IBM, and original BZ reporter, see BZ + + commit: e9eecb5bf82a71564bf018fcbbfc6cda19cab6c2 + From: Paul Moore + Date: 2013-11-20 11:12:17 -0500 + + seccomp: add kill() to the syscall whitelist + + The kill() syscall is triggered with the following command: + + # qemu -sandbox on -monitor stdio \ + -device intel-hda -device hda-duplex -vnc :0 + + The resulting syslog/audit message: + + # ausearch -m SECCOMP + ---- + time->Wed Nov 20 09:52:08 2013 + type=SECCOMP msg=audit(1384912328.482:6656): auid=0 uid=0 gid=0 ses=854 + subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 pid=12087 + comm="qemu-kvm" sig=31 syscall=62 compat=0 ip=0x7f7a1d2abc67 code=0x0 + # scmp_sys_resolver 62 + kill + + Reported-by: CongLi + Tested-by: CongLi + Signed-off-by: Paul Moore + Acked-by: Eduardo Otubo +--- + qemu-seccomp.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Michal Novotny +--- + qemu-seccomp.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index ca15f21..906101f 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -123,6 +123,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(write), 244 }, + { SCMP_SYS(fcntl), 243 }, + { SCMP_SYS(tgkill), 242 }, ++ { SCMP_SYS(kill), 242 }, + { SCMP_SYS(rt_sigaction), 242 }, + { SCMP_SYS(pipe2), 242 }, + { SCMP_SYS(munmap), 242 }, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-seccomp-add-mkdir-and-fchmod-to-the-whitelist.patch b/SOURCES/kvm-seccomp-add-mkdir-and-fchmod-to-the-whitelist.patch new file mode 100644 index 0000000..0d7cec0 --- /dev/null +++ b/SOURCES/kvm-seccomp-add-mkdir-and-fchmod-to-the-whitelist.patch @@ -0,0 +1,62 @@ +From 45031cfb033d0c3941f48acb8c46861f756ab700 Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Mon, 27 Jan 2014 21:43:11 +0100 +Subject: [PATCH 01/28] seccomp: add mkdir() and fchmod() to the whitelist + +RH-Author: Paul Moore +Message-id: <20140127214311.24608.57759.stgit@localhost> +Patchwork-id: 56966 +O-Subject: [RHEL7 qemu-kvm PATCH 1/2] seccomp: add mkdir() and fchmod() to the whitelist +Bugzilla: 1026314 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1026314 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6956172 +Upstream: upstream, see commit IDs +Testing: tested, see BZ + + seccomp: add mkdir() and fchmod() to the whitelist + + The PulseAudio library attempts to do a mkdir(2) and fchmod(2) on + "/run/user//pulse" which is currently blocked by the syscall + filter; this patch adds the two missing syscalls to the whitelist. + You can reproduce this problem with the following command: + + # qemu -monitor stdio -device intel-hda -device hda-duplex + + If watched under strace the following syscalls are shown: + + mkdir("/run/user/0/pulse", 0700) + fchmod(11, 0700) [NOTE: 11 is the fd for /run/user/0/pulse] + + Reported-by: xuhan@redhat.com + Signed-off-by: Paul Moore +--- + qemu-seccomp.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index fc48bdd..34a54e4 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -237,7 +237,9 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(io_cancel), 241 }, + { SCMP_SYS(io_setup), 241 }, + { SCMP_SYS(io_destroy), 241 }, +- { SCMP_SYS(arch_prctl), 240 } ++ { SCMP_SYS(arch_prctl), 240 }, ++ { SCMP_SYS(mkdir), 240 }, ++ { SCMP_SYS(fchmod), 240 } + }; + + int seccomp_start(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-seccomp-add-semctl-to-the-syscall-whitelist.patch b/SOURCES/kvm-seccomp-add-semctl-to-the-syscall-whitelist.patch new file mode 100644 index 0000000..9e5476e --- /dev/null +++ b/SOURCES/kvm-seccomp-add-semctl-to-the-syscall-whitelist.patch @@ -0,0 +1,50 @@ +From 2b34fb6fdd65055bb38f53312542a1ea7ecbed2e Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Thu, 11 Sep 2014 03:16:56 +0200 +Subject: [PATCH 1/6] seccomp: add semctl() to the syscall whitelist + +Message-id: <20140911031656.11035.52808.stgit@localhost> +Patchwork-id: 60971 +O-Subject: [RHEL7 qemu-kvm PATCH] seccomp: add semctl() to the syscall whitelist +Bugzilla: 1026314 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + + commit b22876cc2f863c58cfebd4a5301fc47e8ec89228 + Author: Paul Moore + Date: Thu Aug 14 13:19:32 2014 -0400 + + seccomp: add semctl() to the syscall whitelist + + QEMU needs to call semctl() for correct operation. This particular + problem was identified on shutdown with the following commandline: + + # qemu -sandbox on -monitor stdio \ + -device intel-hda -device hda-duplex -vnc :0 + + Signed-off-by: Paul Moore + Signed-off-by: Eduardo Otubo + +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index cca1070..59cae8e 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -245,7 +245,8 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(shmdt), 240 }, + { SCMP_SYS(shmctl), 240 }, + { SCMP_SYS(mlock), 240 }, +- { SCMP_SYS(munlock), 240 } ++ { SCMP_SYS(munlock), 240 }, ++ { SCMP_SYS(semctl), 240 } + }; + + int seccomp_start(void) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-seccomp-add-shmctl-mlock-and-munlock-to-the-syscall-.patch b/SOURCES/kvm-seccomp-add-shmctl-mlock-and-munlock-to-the-syscall-.patch new file mode 100644 index 0000000..9940777 --- /dev/null +++ b/SOURCES/kvm-seccomp-add-shmctl-mlock-and-munlock-to-the-syscall-.patch @@ -0,0 +1,66 @@ +From 06d87c5605ba8229f2a3a0f257621bcf6e8c4330 Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Wed, 30 Apr 2014 19:54:46 +0200 +Subject: [PATCH 03/13] seccomp: add shmctl(), mlock(), and munlock() to the syscall whitelist + +RH-Author: Paul Moore +Message-id: <20140430195446.13069.14348.stgit@localhost> +Patchwork-id: 58635 +O-Subject: [RHEL7 qemu-kvm PATCH] seccomp: add shmctl(), mlock(), and munlock() to the syscall whitelist +Bugzilla: 1026314 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1026314 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7405978 +Upstream: Upstream, see commit ID below +Testing: Tested, see BZ + +Minor differences from upstream patch due to a slowly diverging +codebase. + + commit e3f9bb011ae24a594310fa4917754945dc832f8f + Author: Paul Moore + Date: Wed Feb 26 10:25:01 2014 -0500 + + seccomp: add shmctl(), mlock(), and munlock() to the syscall whitelist + + Additional testing reveals that PulseAudio requires shmctl() and the + mlock()/munlock() syscalls on some systems/configurations. As before, + on systems that do require these syscalls, the problem can be seen with + the following command line: + + # qemu -monitor stdio -sandbox on \ + -device intel-hda -device hda-duplex + + Signed-off-by: Paul Moore + Signed-off-by: Eduardo Otubo +--- + qemu-seccomp.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index 3a2fbed..cca1070 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -242,7 +242,10 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(fchmod), 240 }, + { SCMP_SYS(shmget), 240 }, + { SCMP_SYS(shmat), 240 }, +- { SCMP_SYS(shmdt), 240 } ++ { SCMP_SYS(shmdt), 240 }, ++ { SCMP_SYS(shmctl), 240 }, ++ { SCMP_SYS(mlock), 240 }, ++ { SCMP_SYS(munlock), 240 } + }; + + int seccomp_start(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-seccomp-add-some-basic-shared-memory-syscalls-to-the.patch b/SOURCES/kvm-seccomp-add-some-basic-shared-memory-syscalls-to-the.patch new file mode 100644 index 0000000..164ad5b --- /dev/null +++ b/SOURCES/kvm-seccomp-add-some-basic-shared-memory-syscalls-to-the.patch @@ -0,0 +1,54 @@ +From 38a4a6fb83fc002980bda2b47662997181607579 Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Mon, 27 Jan 2014 21:43:17 +0100 +Subject: [PATCH 02/28] seccomp: add some basic shared memory syscalls to the whitelist + +RH-Author: Paul Moore +Message-id: <20140127214317.24608.67441.stgit@localhost> +Patchwork-id: 56967 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] seccomp: add some basic shared memory syscalls to the whitelist +Bugzilla: 1026314 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1026314 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6956172 +Upstream: upstream, see commit IDs +Testing: tested, see BZ + + seccomp: add some basic shared memory syscalls to the whitelist + + PulseAudio requires the use of shared memory so add shmget(), shmat(), + and shmdt() to the syscall whitelist. + + Reported-by: xuhan@redhat.com + Signed-off-by: Paul Moore +--- + qemu-seccomp.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index 34a54e4..3a2fbed 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -239,7 +239,10 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(io_destroy), 241 }, + { SCMP_SYS(arch_prctl), 240 }, + { SCMP_SYS(mkdir), 240 }, +- { SCMP_SYS(fchmod), 240 } ++ { SCMP_SYS(fchmod), 240 }, ++ { SCMP_SYS(shmget), 240 }, ++ { SCMP_SYS(shmat), 240 }, ++ { SCMP_SYS(shmdt), 240 } + }; + + int seccomp_start(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-seccomp-add-timerfd_create-and-timerfd_settime-to-th.patch b/SOURCES/kvm-seccomp-add-timerfd_create-and-timerfd_settime-to-th.patch new file mode 100644 index 0000000..77250ce --- /dev/null +++ b/SOURCES/kvm-seccomp-add-timerfd_create-and-timerfd_settime-to-th.patch @@ -0,0 +1,88 @@ +From 982a3d6d0569bed08ee7d31380271abe69d836b4 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 30 Apr 2015 10:31:57 +0200 +Subject: [PATCH 1/4] seccomp: add timerfd_create and timerfd_settime to the + whitelist + +Message-id: <1430389917-29237-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 64959 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] seccomp: add timerfd_create and timerfd_settime to the whitelist +Bugzilla: 1185737 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster + +From: Felix Geyer + +libusb calls timerfd_create() and timerfd_settime() when it's built with +timerfd support. + +Command to reproduce: + + -device usb-host,hostbus=1,hostaddr=3,id=hostdev0 + +Log messages: + +audit(1390730418.924:135): auid=4294967295 uid=121 gid=103 ses=4294967295 + pid=5232 comm="qemu-system-x86" sig=31 syscall=283 + compat=0 ip=0x7f2b0f4e96a7 code=0x0 +audit(1390733100.580:142): auid=4294967295 uid=121 gid=103 ses=4294967295 + pid=16909 comm="qemu-system-x86" sig=31 syscall=286 + compat=0 ip=0x7f03513a06da code=0x0 + +Reading a few hundred MB from a USB drive on x86_64 shows this syscall distribution. +Therefore the timerfd_settime priority is set to 242. + + calls syscall + --------- ---------------- + 5303600 write + 2240554 read + 2167030 ppoll + 2134828 ioctl + 704023 timerfd_settime + 689105 poll + 83122 futex + 803 writev + 476 rt_sigprocmask + 287 recvmsg + 178 brk + +Signed-off-by: Felix Geyer +Signed-off-by: Eduardo Otubo +(cherry picked from commit 84397618529f920bea45d0bab22ec097766244fc) +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu-seccomp.c +--- + qemu-seccomp.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) +--- + qemu-seccomp.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index 59cae8e..5e60fce 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -154,6 +154,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(getsockname), 242 }, + { SCMP_SYS(getpeername), 242 }, + { SCMP_SYS(accept4), 242 }, ++ { SCMP_SYS(timerfd_settime), 242 }, + { SCMP_SYS(newfstatat), 241 }, + { SCMP_SYS(shutdown), 241 }, + { SCMP_SYS(getsockopt), 241 }, +@@ -246,7 +247,8 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(shmctl), 240 }, + { SCMP_SYS(mlock), 240 }, + { SCMP_SYS(munlock), 240 }, +- { SCMP_SYS(semctl), 240 } ++ { SCMP_SYS(semctl), 240 }, ++ { SCMP_SYS(timerfd_create), 240 }, + }; + + int seccomp_start(void) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-seccomp-adding-sysinfo-system-call-to-whitelist.patch b/SOURCES/kvm-seccomp-adding-sysinfo-system-call-to-whitelist.patch new file mode 100644 index 0000000..1e6fac4 --- /dev/null +++ b/SOURCES/kvm-seccomp-adding-sysinfo-system-call-to-whitelist.patch @@ -0,0 +1,48 @@ +From 2dc9b654f678a1cfa95a680f31085cdff1e648b2 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 22 Apr 2016 05:14:07 +0200 +Subject: [PATCH 02/10] seccomp: adding sysinfo system call to whitelist + +RH-Author: Miroslav Rezanina +Message-id: <1461302047-6677-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 70221 +O-Subject: [RHEL 7.3 qemu-kvm PATCH] seccomp: adding sysinfo system call to whitelist +Bugzilla: 1177318 +RH-Acked-by: Thomas Huth +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi + +From: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1177318 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=10914613 +RHEV: BZ 1177309, fixed with 2.6 rebase + +Newer version of nss-softokn libraries (> 3.16.2.3) use sysinfo call +so qemu using rbd image hang after start when run in sandbox mode. + +To allow using rbd images in sandbox mode we have to whitelist it. + +Signed-off-by: Miroslav Rezanina +Acked-by: Eduardo Otubo +(cherry picked from commit 8e08f8a4a7f613af65b29fcc3ac3bfc2a08a3343) +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index 5e60fce..e947909 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -249,6 +249,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(munlock), 240 }, + { SCMP_SYS(semctl), 240 }, + { SCMP_SYS(timerfd_create), 240 }, ++ { SCMP_SYS(sysinfo), 240 }, + }; + + int seccomp_start(void) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-seccomp-exit-if-seccomp_init-fails.patch b/SOURCES/kvm-seccomp-exit-if-seccomp_init-fails.patch new file mode 100644 index 0000000..03cdea7 --- /dev/null +++ b/SOURCES/kvm-seccomp-exit-if-seccomp_init-fails.patch @@ -0,0 +1,55 @@ +From 77b56ef5c4488f32151018c06443c701d6173ce7 Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Fri, 20 Dec 2013 21:43:16 +0100 +Subject: [PATCH 04/16] seccomp: exit if seccomp_init() fails + +RH-Author: Paul Moore +Message-id: <20131220214316.2542.64440.stgit@localhost> +Patchwork-id: 56418 +O-Subject: [RHEL7 qemu-kvm PATCH] seccomp: exit if seccomp_init() fails +Bugzilla: 1044845 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Markus Armbruster +RH-Acked-by: Laszlo Ersek + +From: Corey Bryant + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1044845 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6770015 +Upstream: merged into the QEMU seccomp tree + git://github.com/otubo/qemu.git seccomp +Testing: Tested by IBM, see BZ + + seccomp: exit if seccomp_init() fails + + This fixes a bug where we weren't exiting if seccomp_init() failed. + + Signed-off-by: Corey Bryant + Acked-by: Eduardo Otubo + Acked-by: Paul Moore + (cherry picked from commit 2a13f991123fa16841e6d94b02a9cc2c76d91725) + Signed-off-by: Paul Moore +--- + qemu-seccomp.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index 906101f..fc48bdd 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -248,6 +248,7 @@ int seccomp_start(void) + + ctx = seccomp_init(SCMP_ACT_KILL); + if (ctx == NULL) { ++ rc = -1; + goto seccomp_return; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-seccomp-fine-tuning-whitelist-by-adding-times.patch b/SOURCES/kvm-seccomp-fine-tuning-whitelist-by-adding-times.patch new file mode 100644 index 0000000..9c22506 --- /dev/null +++ b/SOURCES/kvm-seccomp-fine-tuning-whitelist-by-adding-times.patch @@ -0,0 +1,56 @@ +From e95603940674bdb0d59c58f9a7fac3ea97c56d88 Mon Sep 17 00:00:00 2001 +From: Paul Moore +Date: Wed, 2 Oct 2013 20:09:33 +0200 +Subject: [PATCH 10/25] seccomp: fine tuning whitelist by adding times() + +RH-Author: Paul Moore +Message-id: <20131002200933.4639.16090.stgit@localhost> +Patchwork-id: 54645 +O-Subject: [RHEL7 qemu-kvm PATCH] seccomp: fine tuning whitelist by adding times() +Bugzilla: 1004175 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Luiz Capitulino + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1004175 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6362319 +Upstream: In QEMU/seccomp maintainer's tree + git://github.com/otubo/qemu.git#seccomp +Tested: Tested by myself, IBM, and original BZ reporter; see BZ. + + commit: c236f4519c9838801798f3705c17dce9ab9e3b9d + From: Eduardo Otubo + Date: 2013-09-04 09:21:12 -0300 + + seccomp: fine tuning whitelist by adding times() + + This was causing Qemu process to hang when using -sandbox on as + discribed on RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1004175 + + Signed-off-by: Eduardo Otubo + Tested-by: Paul Moore + Acked-by: Paul Moore +--- + qemu-seccomp.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + qemu-seccomp.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/qemu-seccomp.c b/qemu-seccomp.c +index 9e91c73..ca15f21 100644 +--- a/qemu-seccomp.c ++++ b/qemu-seccomp.c +@@ -98,6 +98,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = { + { SCMP_SYS(getuid), 245 }, + { SCMP_SYS(geteuid), 245 }, + { SCMP_SYS(timer_create), 245 }, ++ { SCMP_SYS(times), 245 }, + { SCMP_SYS(exit), 245 }, + { SCMP_SYS(clock_gettime), 245 }, + { SCMP_SYS(time), 245 }, +-- +1.7.1 + diff --git a/SOURCES/kvm-serial-change-retry-logic-to-avoid-concurrency.patch b/SOURCES/kvm-serial-change-retry-logic-to-avoid-concurrency.patch new file mode 100644 index 0000000..5b76103 --- /dev/null +++ b/SOURCES/kvm-serial-change-retry-logic-to-avoid-concurrency.patch @@ -0,0 +1,143 @@ +From 19651bdbf15a4ce03d6fc6e3a6be514a3f46a118 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:21 +0200 +Subject: [PATCH 08/18] serial: change retry logic to avoid concurrency + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-9-famz@redhat.com> +Patchwork-id: 75300 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 08/18] serial: change retry logic to avoid concurrency +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Kirill Batuzov + +Whenever serial_xmit fails to transmit a byte it adds a watch that would +call it again when the "line" becomes ready. This results in a retry +chain: + serial_xmit -> add_watch -> serial_xmit +Each chain is able to transmit one character, and for every character +passed to serial by the guest driver a new chain is spawned. + +The problem lays with the fact that a new chain is spawned even when +there is one already waiting on the watch. So there can be several retry +chains waiting concurrently on one "line". Every chain tries to transmit +current character, so character order is not messed up. But also every +chain increases retry counter (tsr_retry). If there are enough +concurrent chains this counter will hit MAX_XMIT_RETRY value and +the character will be dropped. + +To reproduce this bug you need to feed serial output to some program +consuming it slowly enough. A python script from bug #1335444 +description is an example of such program. + +This commit changes retry logic in the following way to avoid +concurrency: instead of spawning a new chain for each character being +transmitted spawn only one and make it transmit characters until FIFO is +empty. + +The change consists of two parts: + - add a do {} while () loop in serial_xmit (diff is a bit erratic + for this part, diff -w will show actual change), + - do not call serial_xmit from serial_ioport_write if there is one + waiting on the watch already. + +This should fix another issue causing bug #1335444. + +Signed-off-by: Kirill Batuzov +Signed-off-by: Paolo Bonzini +(cherry picked from commit f702e62a193e9ddb41cef95068717e5582b39a64) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 59 +++++++++++++++++++++++++++++++------------------------- + 1 file changed, 33 insertions(+), 26 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index add4738..33e06fb 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -223,37 +223,42 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + { + SerialState *s = opaque; + +- if (s->tsr_retry <= 0) { +- if (s->fcr & UART_FCR_FE) { +- if (fifo8_is_empty(&s->xmit_fifo)) { ++ do { ++ if (s->tsr_retry <= 0) { ++ if (s->fcr & UART_FCR_FE) { ++ if (fifo8_is_empty(&s->xmit_fifo)) { ++ return FALSE; ++ } ++ s->tsr = fifo8_pop(&s->xmit_fifo); ++ if (!s->xmit_fifo.num) { ++ s->lsr |= UART_LSR_THRE; ++ } ++ } else if ((s->lsr & UART_LSR_THRE)) { + return FALSE; +- } +- s->tsr = fifo8_pop(&s->xmit_fifo); +- if (!s->xmit_fifo.num) { ++ } else { ++ s->tsr = s->thr; + s->lsr |= UART_LSR_THRE; ++ s->lsr &= ~UART_LSR_TEMT; + } +- } else if ((s->lsr & UART_LSR_THRE)) { +- return FALSE; +- } else { +- s->tsr = s->thr; +- s->lsr |= UART_LSR_THRE; +- s->lsr &= ~UART_LSR_TEMT; + } +- } + +- if (s->mcr & UART_MCR_LOOP) { +- /* in loopback mode, say that we just received a char */ +- serial_receive1(s, &s->tsr, 1); +- } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) { +- if (s->tsr_retry >= 0 && s->tsr_retry < MAX_XMIT_RETRY && +- qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, serial_xmit, s) > 0) { +- s->tsr_retry++; +- return FALSE; ++ if (s->mcr & UART_MCR_LOOP) { ++ /* in loopback mode, say that we just received a char */ ++ serial_receive1(s, &s->tsr, 1); ++ } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) { ++ if (s->tsr_retry >= 0 && s->tsr_retry < MAX_XMIT_RETRY && ++ qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, ++ serial_xmit, s) > 0) { ++ s->tsr_retry++; ++ return FALSE; ++ } ++ s->tsr_retry = 0; ++ } else { ++ s->tsr_retry = 0; + } +- s->tsr_retry = 0; +- } else { +- s->tsr_retry = 0; +- } ++ /* Transmit another byte if it is already available. It is only ++ possible when FIFO is enabled and not empty. */ ++ } while ((s->fcr & UART_FCR_FE) && !fifo8_is_empty(&s->xmit_fifo)); + + s->last_xmit_ts = qemu_get_clock_ns(vm_clock); + +@@ -293,7 +298,9 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + s->thr_ipending = 0; + s->lsr &= ~UART_LSR_THRE; + serial_update_irq(s); +- serial_xmit(NULL, G_IO_OUT, s); ++ if (s->tsr_retry <= 0) { ++ serial_xmit(NULL, G_IO_OUT, s); ++ } + } + break; + case 1: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-check-if-backed-by-a-physical-serial-port-at-.patch b/SOURCES/kvm-serial-check-if-backed-by-a-physical-serial-port-at-.patch new file mode 100644 index 0000000..9b8e621 --- /dev/null +++ b/SOURCES/kvm-serial-check-if-backed-by-a-physical-serial-port-at-.patch @@ -0,0 +1,63 @@ +From 3ad8bb6f424f7ff1d4bbf73237fb1590f0ce1810 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:23 +0200 +Subject: [PATCH 10/18] serial: check if backed by a physical serial port at + realize time + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-11-famz@redhat.com> +Patchwork-id: 75299 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 10/18] serial: check if backed by a physical serial port at realize time +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +Right now, s->poll_msl may linger at "0" value for an arbitrarily long +time, until serial_update_msl is called for the first time. This is +unnecessary, and will lead to the s->poll_msl field being unnecessarily +migrated. + +We can call serial_update_msl immediately at realize time (via +serial_reset) and be done with it. The memory-mapped UART was already +doing that, but not the ISA and PCI variants. + +Regarding the delta bits, be consistent with what serial_reset does when +the serial port is not backed by a physical serial port, and always clear +them at reset time. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit a30cf8760f4a59797fc060c3c5a13b7749551d0c) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 33e06fb..5ef9b95 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -650,6 +650,9 @@ static void serial_reset(void *opaque) + s->thr_ipending = 0; + s->last_break_enable = 0; + qemu_irq_lower(s->irq); ++ ++ serial_update_msl(s); ++ s->msr &= ~UART_MSR_ANY_DELTA; + } + + void serial_init_core(SerialState *s) +@@ -768,7 +771,5 @@ SerialState *serial_mm_init(MemoryRegion *address_space, + memory_region_init_io(&s->io, &serial_mm_ops[end], s, + "serial", 8 << it_shift); + memory_region_add_subregion(address_space, base, &s->io); +- +- serial_update_msl(s); + return s; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-clean-up-THRE-TEMT-handling.patch b/SOURCES/kvm-serial-clean-up-THRE-TEMT-handling.patch new file mode 100644 index 0000000..dfc6fa0 --- /dev/null +++ b/SOURCES/kvm-serial-clean-up-THRE-TEMT-handling.patch @@ -0,0 +1,125 @@ +From 1b37b298fc1f0d69e24229191e4bbe741e4d96ab Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:25 +0200 +Subject: [PATCH 12/18] serial: clean up THRE/TEMT handling + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-13-famz@redhat.com> +Patchwork-id: 75303 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 12/18] serial: clean up THRE/TEMT handling +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +- assert TEMT is cleared before sending a character; we'll get one from +TSR if tsr_retry > 0, from the FIFO or THR otherwise + +- assert THRE cleared and FIFO not empty (if enabled) before fetching a +character to send. This effectively reverts dffacd46, but the check +makes no sense and commit f702e62 (serial: change retry logic to avoid +concurrency, 2014-07-11) must have made it unnecessary. The commit +message for f702e62 talks about multiple calls to qemu_chr_fe_add_watch +triggering s->tsr_retry >= MAX_XMIT_RETRY, but other failures were +possible. For example, if you have multiple calls, the subsequent ones +will see s->tsr_retry == 0 and will find THRE and/or TEMT on entry. + +- for clarity, raise THRI immediately after the code sets THRE + +- check THRE to see if another character has to be sent. This makes +the assertions more obvious and also means TEMT has to be set as soon as +the loop ends. It makes the loop send both TSR and THR if flow-control +happens in non-FIFO mode. Previously, THR would be lost. + +- clear TEMT together with THRE even in the non-FIFO case + +The last two items are bugfixes, but they were just found by inspection +and do not squash known bugs. + +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 0d931d706266d6ada3bf22d3afca1afdc8d12fa9) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/char/serial.c + +Contextual conflict because upstream has the new timer API +qemu_clock_get_ns, but downstream still uses qemu_get_clock_ns. +--- + hw/char/serial.c | 26 ++++++++++++-------------- + 1 file changed, 12 insertions(+), 14 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 15c628f..c2be4bd 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -224,21 +224,23 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + SerialState *s = opaque; + + do { ++ assert(!(s->lsr & UART_LSR_TEMT)); + if (s->tsr_retry <= 0) { ++ assert(!(s->lsr & UART_LSR_THRE)); ++ + if (s->fcr & UART_FCR_FE) { +- if (fifo8_is_empty(&s->xmit_fifo)) { +- return FALSE; +- } ++ assert(!fifo8_is_empty(&s->xmit_fifo)); + s->tsr = fifo8_pop(&s->xmit_fifo); + if (!s->xmit_fifo.num) { + s->lsr |= UART_LSR_THRE; + } +- } else if ((s->lsr & UART_LSR_THRE)) { +- return FALSE; + } else { + s->tsr = s->thr; + s->lsr |= UART_LSR_THRE; +- s->lsr &= ~UART_LSR_TEMT; ++ } ++ if ((s->lsr & UART_LSR_THRE) && !s->thr_ipending) { ++ s->thr_ipending = 1; ++ serial_update_irq(s); + } + } + +@@ -256,17 +258,13 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + } else { + s->tsr_retry = 0; + } ++ + /* Transmit another byte if it is already available. It is only + possible when FIFO is enabled and not empty. */ +- } while ((s->fcr & UART_FCR_FE) && !fifo8_is_empty(&s->xmit_fifo)); ++ } while (!(s->lsr & UART_LSR_THRE)); + + s->last_xmit_ts = qemu_get_clock_ns(vm_clock); +- +- if (s->lsr & UART_LSR_THRE) { +- s->lsr |= UART_LSR_TEMT; +- s->thr_ipending = 1; +- serial_update_irq(s); +- } ++ s->lsr |= UART_LSR_TEMT; + + return FALSE; + } +@@ -293,10 +291,10 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + fifo8_pop(&s->xmit_fifo); + } + fifo8_push(&s->xmit_fifo, s->thr); +- s->lsr &= ~UART_LSR_TEMT; + } + s->thr_ipending = 0; + s->lsr &= ~UART_LSR_THRE; ++ s->lsr &= ~UART_LSR_TEMT; + serial_update_irq(s); + if (s->tsr_retry <= 0) { + serial_xmit(NULL, G_IO_OUT, s); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-fixing-vmstate-for-save-restore.patch b/SOURCES/kvm-serial-fixing-vmstate-for-save-restore.patch new file mode 100644 index 0000000..e23ec75 --- /dev/null +++ b/SOURCES/kvm-serial-fixing-vmstate-for-save-restore.patch @@ -0,0 +1,355 @@ +From 7d2e8f9662feb64c0b15b6fd53e06e3c56921f27 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 9 Jun 2017 11:43:58 +0200 +Subject: [PATCH 3/6] serial: fixing vmstate for save/restore + +RH-Author: Paolo Bonzini +Message-id: <20170609114359.13036-3-pbonzini@redhat.com> +Patchwork-id: 75567 +O-Subject: [RHEL7.4 qemu-kvm PATCH v2 2/3] serial: fixing vmstate for save/restore +Bugzilla: 1452067 +RH-Acked-by: David Hildenbrand +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laszlo Ersek + +From: Pavel Dovgalyuk + +Some fields were added to VMState by this patch to preserve correct +loading of the serial port controller state. +Updating FCR value while loading was also modified to disable generating +an interrupt by loadvm. + +Signed-off-by: Pavel Dovgalyuk +Signed-off-by: Paolo Bonzini +(cherry picked from commit 7385b275d9ae8bdf3c012bc4e2ae9779fcea6312) + +[RHEL: omit some subsections. thr_ipending can be reconstructed fairly + reliably by serial_post_load. The others are features that are + unlikely to be used in RHEL, respectively receive timeout (Linux + does not even have the UART_IIR_CTI symbol in the driver) and + physical serial ports connected to a modem] + +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 245 ++++++++++++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 215 insertions(+), 30 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 39de1ca..0518a6f 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -275,6 +275,36 @@ static void serial_xmit(SerialState *s) + s->lsr |= UART_LSR_TEMT; + } + ++/* Setter for FCR. ++ is_load flag means, that value is set while loading VM state ++ and interrupt should not be invoked */ ++static void serial_write_fcr(SerialState *s, uint8_t val) ++{ ++ /* Set fcr - val only has the bits that are supposed to "stick" */ ++ s->fcr = val; ++ ++ if (val & UART_FCR_FE) { ++ s->iir |= UART_IIR_FE; ++ /* Set recv_fifo trigger Level */ ++ switch (val & 0xC0) { ++ case UART_FCR_ITL_1: ++ s->recv_fifo_itl = 1; ++ break; ++ case UART_FCR_ITL_2: ++ s->recv_fifo_itl = 4; ++ break; ++ case UART_FCR_ITL_3: ++ s->recv_fifo_itl = 8; ++ break; ++ case UART_FCR_ITL_4: ++ s->recv_fifo_itl = 14; ++ break; ++ } ++ } else { ++ s->iir &= ~UART_IIR_FE; ++ } ++} ++ + static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) + { +@@ -351,21 +381,17 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + } + break; + case 2: +- val = val & 0xFF; +- +- if (s->fcr == val) +- break; +- + /* Did the enable/disable flag change? If so, make sure FIFOs get flushed */ +- if ((val ^ s->fcr) & UART_FCR_FE) ++ if ((val ^ s->fcr) & UART_FCR_FE) { + val |= UART_FCR_XFR | UART_FCR_RFR; ++ } + + /* FIFO clear */ + + if (val & UART_FCR_RFR) { + s->lsr &= ~(UART_LSR_DR | UART_LSR_BI); + qemu_del_timer(s->fifo_timeout_timer); +- s->timeout_ipending=0; ++ s->timeout_ipending = 0; + fifo8_reset(&s->recv_fifo); + } + +@@ -375,28 +401,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + fifo8_reset(&s->xmit_fifo); + } + +- if (val & UART_FCR_FE) { +- s->iir |= UART_IIR_FE; +- /* Set recv_fifo trigger Level */ +- switch (val & 0xC0) { +- case UART_FCR_ITL_1: +- s->recv_fifo_itl = 1; +- break; +- case UART_FCR_ITL_2: +- s->recv_fifo_itl = 4; +- break; +- case UART_FCR_ITL_3: +- s->recv_fifo_itl = 8; +- break; +- case UART_FCR_ITL_4: +- s->recv_fifo_itl = 14; +- break; +- } +- } else +- s->iir &= ~UART_IIR_FE; +- +- /* Set fcr - or at least the bits in it that are supposed to "stick" */ +- s->fcr = val & 0xC9; ++ serial_write_fcr(s, val & 0xC9); + serial_update_irq(s); + break; + case 3: +@@ -617,6 +622,14 @@ static void serial_pre_save(void *opaque) + s->fcr_vmstate = s->fcr; + } + ++static int serial_pre_load(void *opaque) ++{ ++ SerialState *s = opaque; ++ s->thr_ipending = -1; ++ s->poll_msl = -1; ++ return 0; ++} ++ + static int serial_post_load(void *opaque, int version_id) + { + SerialState *s = opaque; +@@ -628,17 +641,159 @@ static int serial_post_load(void *opaque, int version_id) + s->tsr_retry = MAX_XMIT_RETRY; + } + ++ if (s->thr_ipending == -1) { ++ s->thr_ipending = ((s->iir & UART_IIR_ID) == UART_IIR_THRI); ++ } ++ s->last_break_enable = (s->lcr >> 6) & 1; + /* Initialize fcr via setter to perform essential side-effects */ +- serial_ioport_write(s, 0x02, s->fcr_vmstate, 1); ++ serial_write_fcr(s, s->fcr_vmstate); + serial_update_parameters(s); + return 0; + } + ++static bool serial_thr_ipending_needed(void *opaque) ++{ ++#if 0 ++ SerialState *s = opaque; ++ bool expected_value = ((s->iir & UART_IIR_ID) == UART_IIR_THRI); ++ return s->thr_ipending != expected_value; ++#else ++ /* for migration compatibility with RHEL <= 7.3 */ ++ return 0; ++#endif ++} ++ ++const VMStateDescription vmstate_serial_thr_ipending = { ++ .name = "serial/thr_ipending", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_INT32(thr_ipending, SerialState), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static bool serial_tsr_needed(void *opaque) ++{ ++ SerialState *s = (SerialState *)opaque; ++ return s->tsr_retry != 0; ++} ++ ++const VMStateDescription vmstate_serial_tsr = { ++ .name = "serial/tsr", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT32(tsr_retry, SerialState), ++ VMSTATE_UINT8(thr, SerialState), ++ VMSTATE_UINT8(tsr, SerialState), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static bool serial_recv_fifo_needed(void *opaque) ++{ ++ SerialState *s = (SerialState *)opaque; ++ return !fifo8_is_empty(&s->recv_fifo); ++ ++} ++ ++const VMStateDescription vmstate_serial_recv_fifo = { ++ .name = "serial/recv_fifo", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_STRUCT(recv_fifo, SerialState, 1, vmstate_fifo8, Fifo8), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static bool serial_xmit_fifo_needed(void *opaque) ++{ ++ SerialState *s = (SerialState *)opaque; ++ return !fifo8_is_empty(&s->xmit_fifo); ++} ++ ++const VMStateDescription vmstate_serial_xmit_fifo = { ++ .name = "serial/xmit_fifo", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_STRUCT(xmit_fifo, SerialState, 1, vmstate_fifo8, Fifo8), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static bool serial_fifo_timeout_timer_needed(void *opaque) ++{ ++#if 0 ++ SerialState *s = (SerialState *)opaque; ++ return timer_pending(s->fifo_timeout_timer); ++#else ++ /* for migration compatibility with RHEL <= 7.3 */ ++ return 0; ++#endif ++} ++ ++const VMStateDescription vmstate_serial_fifo_timeout_timer = { ++ .name = "serial/fifo_timeout_timer", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_TIMER(fifo_timeout_timer, SerialState), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static bool serial_timeout_ipending_needed(void *opaque) ++{ ++#if 0 ++ SerialState *s = (SerialState *)opaque; ++ return s->timeout_ipending != 0; ++#else ++ /* for migration compatibility with RHEL <= 7.3 */ ++ return 0; ++#endif ++} ++ ++const VMStateDescription vmstate_serial_timeout_ipending = { ++ .name = "serial/timeout_ipending", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_INT32(timeout_ipending, SerialState), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static bool serial_poll_needed(void *opaque) ++{ ++#if 0 ++ SerialState *s = (SerialState *)opaque; ++ return s->poll_msl >= 0; ++#else ++ /* for migration compatibility with RHEL <= 7.3 */ ++ return 0; ++#endif ++} ++ ++const VMStateDescription vmstate_serial_poll = { ++ .name = "serial/poll", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_INT32(poll_msl, SerialState), ++ VMSTATE_TIMER(modem_status_poll, SerialState), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_serial = { + .name = "serial", + .version_id = 3, + .minimum_version_id = 2, + .pre_save = serial_pre_save, ++ .pre_load = serial_pre_load, + .post_load = serial_post_load, + .fields = (VMStateField []) { + VMSTATE_UINT16_V(divider, SerialState, 2), +@@ -652,6 +807,32 @@ const VMStateDescription vmstate_serial = { + VMSTATE_UINT8(scr, SerialState), + VMSTATE_UINT8_V(fcr_vmstate, SerialState, 3), + VMSTATE_END_OF_LIST() ++ }, ++ .subsections = (VMStateSubsection[]) { ++ { ++ .vmsd = &vmstate_serial_thr_ipending, ++ .needed = &serial_thr_ipending_needed, ++ } , { ++ .vmsd = &vmstate_serial_tsr, ++ .needed = &serial_tsr_needed, ++ } , { ++ .vmsd = &vmstate_serial_recv_fifo, ++ .needed = &serial_recv_fifo_needed, ++ } , { ++ .vmsd = &vmstate_serial_xmit_fifo, ++ .needed = &serial_xmit_fifo_needed, ++ } , { ++ .vmsd = &vmstate_serial_fifo_timeout_timer, ++ .needed = &serial_fifo_timeout_timer_needed, ++ } , { ++ .vmsd = &vmstate_serial_timeout_ipending, ++ .needed = &serial_timeout_ipending_needed, ++ } , { ++ .vmsd = &vmstate_serial_poll, ++ .needed = &serial_poll_needed, ++ } , { ++ /* empty */ ++ } + } + }; + +@@ -678,6 +859,10 @@ static void serial_reset(void *opaque) + s->char_transmit_time = (get_ticks_per_sec() / 9600) * 10; + s->poll_msl = 0; + ++ s->timeout_ipending = 0; ++ qemu_del_timer(s->fifo_timeout_timer); ++ qemu_del_timer(s->modem_status_poll); ++ + fifo8_reset(&s->recv_fifo); + fifo8_reset(&s->xmit_fifo); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-make-tsr_retry-unsigned.patch b/SOURCES/kvm-serial-make-tsr_retry-unsigned.patch new file mode 100644 index 0000000..be7cc03 --- /dev/null +++ b/SOURCES/kvm-serial-make-tsr_retry-unsigned.patch @@ -0,0 +1,97 @@ +From 03b9104f9cf6c0b4f7b7976b987753afddb32599 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:28 +0200 +Subject: [PATCH 15/18] serial: make tsr_retry unsigned + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-16-famz@redhat.com> +Patchwork-id: 75305 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 15/18] serial: make tsr_retry unsigned +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +It can never become negative; reflect this in the type of the field +and simplify the conditions. + +Tested-by: Bret Ketchum +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 807464d8a7326e1025a2f392bf41636b0809d6da) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/char/serial.c + +Downstream doesn't have 7385b275d9, so dropped the vmstate_serial_tsr +hunk because the structure doesn't exist. + +The serial_post_load hunk is backported because it's safe, and good for +the future backport of 7385b275d9 if there will be. +--- + hw/char/serial.c | 10 +++++++--- + include/hw/char/serial.h | 2 +- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 9986adf..afa1932 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -225,7 +225,7 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + + do { + assert(!(s->lsr & UART_LSR_TEMT)); +- if (s->tsr_retry <= 0) { ++ if (s->tsr_retry == 0) { + assert(!(s->lsr & UART_LSR_THRE)); + + if (s->fcr & UART_FCR_FE) { +@@ -248,7 +248,7 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + /* in loopback mode, say that we just received a char */ + serial_receive1(s, &s->tsr, 1); + } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) { +- if (s->tsr_retry >= 0 && s->tsr_retry < MAX_XMIT_RETRY && ++ if (s->tsr_retry < MAX_XMIT_RETRY && + qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, + serial_xmit, s) > 0) { + s->tsr_retry++; +@@ -296,7 +296,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + s->lsr &= ~UART_LSR_THRE; + s->lsr &= ~UART_LSR_TEMT; + serial_update_irq(s); +- if (s->tsr_retry <= 0) { ++ if (s->tsr_retry == 0) { + serial_xmit(NULL, G_IO_OUT, s); + } + } +@@ -619,6 +619,10 @@ static int serial_post_load(void *opaque, int version_id) + if (version_id < 3) { + s->fcr_vmstate = 0; + } ++ if (s->tsr_retry > MAX_XMIT_RETRY) { ++ s->tsr_retry = MAX_XMIT_RETRY; ++ } ++ + /* Initialize fcr via setter to perform essential side-effects */ + serial_ioport_write(s, 0x02, s->fcr_vmstate, 1); + serial_update_parameters(s); +diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h +index 9ab81f6..2661f8c 100644 +--- a/include/hw/char/serial.h ++++ b/include/hw/char/serial.h +@@ -55,7 +55,7 @@ struct SerialState { + int last_break_enable; + int it_shift; + int baudbase; +- int tsr_retry; ++ uint32_t tsr_retry; + uint32_t wakeup; + + /* Time when the last byte was successfully sent out of the tsr */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-only-resample-THR-interrupt-on-rising-edge-of.patch b/SOURCES/kvm-serial-only-resample-THR-interrupt-on-rising-edge-of.patch new file mode 100644 index 0000000..6c0dce6 --- /dev/null +++ b/SOURCES/kvm-serial-only-resample-THR-interrupt-on-rising-edge-of.patch @@ -0,0 +1,87 @@ +From 0c6d2ffcebff88c6cda738aa46fa77c09b93b78b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:27 +0200 +Subject: [PATCH 14/18] serial: only resample THR interrupt on rising edge of + IER.THRI + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-15-famz@redhat.com> +Patchwork-id: 75304 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 14/18] serial: only resample THR interrupt on rising edge of IER.THRI +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +There is disagreement on whether LSR.THRE should be resampled when +IER.THRI goes from 1 to 1. Bochs only does it if IER.THRI goes from 0 +to 1; PCE does it even if IER.THRI is unchanged. But the Windows driver +seems to always go from 1 to 0 and back to 1, so do things in agreement +with Bochs, because the handling of thr_ipending was reported in 2010 +(https://lists.gnu.org/archive/html/qemu-devel/2010-03/msg01914.html) +as breaking DR-DOS Plus. + +Reported-by: Roy Tam +Signed-off-by: Paolo Bonzini +(cherry picked from commit 1645b8eee558ffe2389a081bf61d08a864c36d2c) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 25 ++++++++++++++++--------- + 1 file changed, 16 insertions(+), 9 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index e0d29a8..9986adf 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -306,10 +306,12 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + s->divider = (s->divider & 0x00ff) | (val << 8); + serial_update_parameters(s); + } else { ++ uint8_t changed = (s->ier ^ val) & 0x0f; + s->ier = val & 0x0f; + /* If the backend device is a real serial port, turn polling of the modem +- status lines on physical port on or off depending on UART_IER_MSI state */ +- if (s->poll_msl >= 0) { ++ * status lines on physical port on or off depending on UART_IER_MSI state. ++ */ ++ if ((changed & UART_IER_MSI) && s->poll_msl >= 0) { + if (s->ier & UART_IER_MSI) { + s->poll_msl = 1; + serial_update_msl(s); +@@ -324,18 +326,23 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + * This is not in the datasheet, but Windows relies on it. It is + * unclear if THRE has to be resampled every time THRI becomes + * 1, or only on the rising edge. Bochs does the latter, and Windows +- * always toggles IER to all zeroes and back to all ones. But for +- * now leave it as it has always been in QEMU. ++ * always toggles IER to all zeroes and back to all ones, so do the ++ * same. + * + * If IER.THRI is zero, thr_ipending is not used. Set it to zero + * so that the thr_ipending subsection is not migrated. + */ +- if ((s->ier & UART_IER_THRI) && (s->lsr & UART_LSR_THRE)) { +- s->thr_ipending = 1; +- } else { +- s->thr_ipending = 0; ++ if (changed & UART_IER_THRI) { ++ if ((s->ier & UART_IER_THRI) && (s->lsr & UART_LSR_THRE)) { ++ s->thr_ipending = 1; ++ } else { ++ s->thr_ipending = 0; ++ } ++ } ++ ++ if (changed) { ++ serial_update_irq(s); + } +- serial_update_irq(s); + } + break; + case 2: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-poll-the-serial-console-with-G_IO_HUP.patch b/SOURCES/kvm-serial-poll-the-serial-console-with-G_IO_HUP.patch new file mode 100644 index 0000000..cfb1898 --- /dev/null +++ b/SOURCES/kvm-serial-poll-the-serial-console-with-G_IO_HUP.patch @@ -0,0 +1,124 @@ +From 4b71b3a9e37d06da2ecc48e06eea7e4a4ae1cfe9 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:20 +0200 +Subject: [PATCH 07/18] serial: poll the serial console with G_IO_HUP +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-8-famz@redhat.com> +Patchwork-id: 75297 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 07/18] serial: poll the serial console with G_IO_HUP +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Roger Pau Monne + +On FreeBSD polling a master pty while the other end is not connected +with G_IO_OUT only results in an endless wait. This is different from +the Linux behaviour, that returns immediately. In order to demonstrate +this, I have the following example code: + +http://xenbits.xen.org/people/royger/test_poll.c + +When executed on Linux: + +$ ./test_poll +In callback + +On FreeBSD instead, the callback never gets called: + +$ ./test_poll + +So, in order to workaround this, poll the source with G_IO_HUP (which +makes the code behave the same way on both Linux and FreeBSD). + +Signed-off-by: Roger Pau Monné +Cc: Peter Crosthwaite +Cc: Michael Tokarev +Cc: "Andreas Färber" +Cc: Paolo Bonzini +Cc: xen-devel@lists.xenproject.org +[Add hw/char/cadence_uart.c too. - Paolo] +Signed-off-by: Paolo Bonzini + +(cherry picked from commit e02bc6de30c44fd668dc0d6e1cd1804f2eed3ed3) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/char/cadence_uart.c + +Downstream doesn't use qemu_chr_fe_add_watch because we don't have +38acd64b1c etc. + + monitor.c + +The changed line is different because we don't have 6cff3e8594 (monitor: +protect outbuf and mux_out with mutex). +--- + hw/char/serial.c | 2 +- + hw/char/virtio-console.c | 3 ++- + hw/usb/redirect.c | 2 +- + monitor.c | 2 +- + 4 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index e020b0e..add4738 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -246,7 +246,7 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + serial_receive1(s, &s->tsr, 1); + } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) { + if (s->tsr_retry >= 0 && s->tsr_retry < MAX_XMIT_RETRY && +- qemu_chr_fe_add_watch(s->chr, G_IO_OUT, serial_xmit, s) > 0) { ++ qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, serial_xmit, s) > 0) { + s->tsr_retry++; + return FALSE; + } +diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c +index 1b01dcd..69dd95a 100644 +--- a/hw/char/virtio-console.c ++++ b/hw/char/virtio-console.c +@@ -66,7 +66,8 @@ static ssize_t flush_buf(VirtIOSerialPort *port, + if (!k->is_console) { + virtio_serial_throttle_port(port, true); + if (!vcon->watch) { +- vcon->watch = qemu_chr_fe_add_watch(vcon->chr, G_IO_OUT, ++ vcon->watch = qemu_chr_fe_add_watch(vcon->chr, ++ G_IO_OUT|G_IO_HUP, + chr_write_unblocked, vcon); + } + } +diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c +index e3b9f32..3fe2106 100644 +--- a/hw/usb/redirect.c ++++ b/hw/usb/redirect.c +@@ -284,7 +284,7 @@ static int usbredir_write(void *priv, uint8_t *data, int count) + r = qemu_chr_fe_write(dev->cs, data, count); + if (r < count) { + if (!dev->watch) { +- dev->watch = qemu_chr_fe_add_watch(dev->cs, G_IO_OUT, ++ dev->watch = qemu_chr_fe_add_watch(dev->cs, G_IO_OUT|G_IO_HUP, + usbredir_write_unblocked, dev); + } + if (r < 0) { +diff --git a/monitor.c b/monitor.c +index 1b28ff3..393a508 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -300,7 +300,7 @@ void monitor_flush(Monitor *mon) + mon->outbuf = tmp; + } + if (mon->watch == 0) { +- mon->watch = qemu_chr_fe_add_watch(mon->chr, G_IO_OUT, ++ mon->watch = qemu_chr_fe_add_watch(mon->chr, G_IO_OUT|G_IO_HUP, + monitor_unblocked, mon); + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-reinstate-watch-after-migration.patch b/SOURCES/kvm-serial-reinstate-watch-after-migration.patch new file mode 100644 index 0000000..b18fcc0 --- /dev/null +++ b/SOURCES/kvm-serial-reinstate-watch-after-migration.patch @@ -0,0 +1,72 @@ +From ba96da130a625a71b574c1bb9f6027e3b8d655ab Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 9 Jun 2017 11:43:59 +0200 +Subject: [PATCH 4/6] serial: reinstate watch after migration + +RH-Author: Paolo Bonzini +Message-id: <20170609114359.13036-4-pbonzini@redhat.com> +Patchwork-id: 75566 +O-Subject: [RHEL7.4 qemu-kvm PATCH v2 3/3] serial: reinstate watch after migration +Bugzilla: 1452067 +RH-Acked-by: David Hildenbrand +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laszlo Ersek + +Otherwise, a serial port can get stuck if it is migrated while flow control +is in effect. + +Tested-by: Bret Ketchum +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 9f34a35e0020b0b2b2e21c086a486d7dfd18df4f) +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 29 +++++++++++++++++++++++++---- + 1 file changed, 25 insertions(+), 4 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 0518a6f..820960b 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -637,13 +637,34 @@ static int serial_post_load(void *opaque, int version_id) + if (version_id < 3) { + s->fcr_vmstate = 0; + } +- if (s->tsr_retry > MAX_XMIT_RETRY) { +- s->tsr_retry = MAX_XMIT_RETRY; +- } +- + if (s->thr_ipending == -1) { + s->thr_ipending = ((s->iir & UART_IIR_ID) == UART_IIR_THRI); + } ++ ++ if (s->tsr_retry > 0) { ++ /* tsr_retry > 0 implies LSR.TEMT = 0 (transmitter not empty). */ ++ if (s->lsr & UART_LSR_TEMT) { ++ error_report("inconsistent state in serial device " ++ "(tsr empty, tsr_retry=%d", s->tsr_retry); ++ return -1; ++ } ++ ++ if (s->tsr_retry > MAX_XMIT_RETRY) { ++ s->tsr_retry = MAX_XMIT_RETRY; ++ } ++ ++ assert(s->watch_tag == 0); ++ s->watch_tag = qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, ++ serial_watch_cb, s); ++ } else { ++ /* tsr_retry == 0 implies LSR.TEMT = 1 (transmitter empty). */ ++ if (!(s->lsr & UART_LSR_TEMT)) { ++ error_report("inconsistent state in serial device " ++ "(tsr not empty, tsr_retry=0"); ++ return -1; ++ } ++ } ++ + s->last_break_enable = (s->lcr >> 6) & 1; + /* Initialize fcr via setter to perform essential side-effects */ + serial_write_fcr(s, s->fcr_vmstate); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-remove-watch-on-reset.patch b/SOURCES/kvm-serial-remove-watch-on-reset.patch new file mode 100644 index 0000000..4293ee6 --- /dev/null +++ b/SOURCES/kvm-serial-remove-watch-on-reset.patch @@ -0,0 +1,87 @@ +From 768dddfbe60ecc3a9a920101aa755804f8a5700e Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:31 +0200 +Subject: [PATCH 18/18] serial: remove watch on reset + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-19-famz@redhat.com> +Patchwork-id: 75308 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 18/18] serial: remove watch on reset +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +Otherwise, this can cause serial_xmit to be entered with LSR.TEMT=0, +which is invalid and causes an assertion failure. + +Reported-by: Bret Ketchum +Tested-by: Bret Ketchum +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit a1df76da57aa8772a75e7c49f8e3829d07b4c46c) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 16 ++++++++++++---- + include/hw/char/serial.h | 1 + + 2 files changed, 13 insertions(+), 4 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 69fefb2..39de1ca 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -224,6 +224,7 @@ static gboolean serial_watch_cb(GIOChannel *chan, GIOCondition cond, + void *opaque) + { + SerialState *s = opaque; ++ s->watch_tag = 0; + serial_xmit(s); + return FALSE; + } +@@ -254,10 +255,12 @@ static void serial_xmit(SerialState *s) + if (s->mcr & UART_MCR_LOOP) { + /* in loopback mode, say that we just received a char */ + serial_receive1(s, &s->tsr, 1); +- } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) { +- if (s->tsr_retry < MAX_XMIT_RETRY && +- qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, +- serial_watch_cb, s) > 0) { ++ } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1 && ++ s->tsr_retry < MAX_XMIT_RETRY) { ++ assert(s->watch_tag == 0); ++ s->watch_tag = qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, ++ serial_watch_cb, s); ++ if (s->watch_tag > 0) { + s->tsr_retry++; + return; + } +@@ -656,6 +659,11 @@ static void serial_reset(void *opaque) + { + SerialState *s = opaque; + ++ if (s->watch_tag > 0) { ++ g_source_remove(s->watch_tag); ++ s->watch_tag = 0; ++ } ++ + s->rbr = 0; + s->ier = 0; + s->iir = UART_IIR_NO_INT; +diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h +index 2661f8c..19c7763 100644 +--- a/include/hw/char/serial.h ++++ b/include/hw/char/serial.h +@@ -56,6 +56,7 @@ struct SerialState { + int it_shift; + int baudbase; + uint32_t tsr_retry; ++ guint watch_tag; + uint32_t wakeup; + + /* Time when the last byte was successfully sent out of the tsr */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-reset-state-at-startup.patch b/SOURCES/kvm-serial-reset-state-at-startup.patch new file mode 100644 index 0000000..b7a71fb --- /dev/null +++ b/SOURCES/kvm-serial-reset-state-at-startup.patch @@ -0,0 +1,39 @@ +From 3f947faca0fb91f4b1104862f7c71bf3f6bd5d48 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 7 Aug 2015 15:24:38 +0200 +Subject: [PATCH 1/2] serial: reset state at startup + +Message-id: <1438961078-13625-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 67393 +O-Subject: [RHEL7.2 qemu-kvm-rhev PATCH] serial: reset state at startup +Bugzilla: 922014 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Andrew Jones +RH-Acked-by: Laszlo Ersek + +When a serial port is started, its initial state is all zero. Make +it consistent with reset state instead. + +Signed-off-by: Paolo Bonzini +Upstream commit 4df7961faaa317d57e873ecdec58422d3f979336 + +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 0c472e2..2383c31 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -685,6 +685,7 @@ void serial_init_core(SerialState *s) + + qemu_chr_add_handlers(s->chr, serial_can_receive1, serial_receive1, + serial_event, s); ++ serial_reset(s); + } + + void serial_exit_core(SerialState *s) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-reset-thri_pending-on-IER-writes-with-THRI-0.patch b/SOURCES/kvm-serial-reset-thri_pending-on-IER-writes-with-THRI-0.patch new file mode 100644 index 0000000..d04d626 --- /dev/null +++ b/SOURCES/kvm-serial-reset-thri_pending-on-IER-writes-with-THRI-0.patch @@ -0,0 +1,85 @@ +From 09ff2706109ce647d1fe59e99f44f96810d80b7c Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:24 +0200 +Subject: [PATCH 11/18] serial: reset thri_pending on IER writes with THRI=0 + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-12-famz@redhat.com> +Patchwork-id: 75302 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 11/18] serial: reset thri_pending on IER writes with THRI=0 +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +This is responsible for failure of migration from 2.2 to 2.1, because +thr_ipending is always one in practice. + +serial.c is setting thr_ipending unconditionally. However, thr_ipending +is not used at all if THRI=0, and it will be overwritten again the next +time THRE or THRI changes. For that reason, we can set thr_ipending to +zero every time THRI is reset. + +There is disagreement on whether LSR.THRE should be resampled when IER.THRI +goes from 1 to 1. This patch does not touch the code, leaving that for +QEMU 2.3+. + +This has no semantic change and is enough to fix migration in the common +case where the interrupt is not pending or is reported in IIR. It does not +change the migration format, so 2.2.0 -> 2.1 will remain broken but we +can fix 2.2.1 -> 2.1 without breaking 2.2.1 <-> 2.2.0. + +The case that remains broken (the one in which the subsection is strictly +necessary) is when THRE=1, the THRI interrupt has *not* been acknowledged +yet, and a higher-priority interrupt comes. In this case, you need the +subsection to tell the source that the lower-priority THRI interrupt is +pending. The subsection's breakage of migration, in this case, prevents +continuing the VM on the destination with an invalid state. + +Cc: qemu-stable@nongnu.org +Reported-by: Igor Mammedov +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 4e02b0fcf5c97579d0d3261c80c65abcf92870fe) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index 5ef9b95..15c628f 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -320,10 +320,24 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + s->poll_msl = 0; + } + } +- if (s->lsr & UART_LSR_THRE) { ++ ++ /* Turning on the THRE interrupt on IER can trigger the interrupt ++ * if LSR.THRE=1, even if it had been masked before by reading IIR. ++ * This is not in the datasheet, but Windows relies on it. It is ++ * unclear if THRE has to be resampled every time THRI becomes ++ * 1, or only on the rising edge. Bochs does the latter, and Windows ++ * always toggles IER to all zeroes and back to all ones. But for ++ * now leave it as it has always been in QEMU. ++ * ++ * If IER.THRI is zero, thr_ipending is not used. Set it to zero ++ * so that the thr_ipending subsection is not migrated. ++ */ ++ if ((s->ier & UART_IER_THRI) && (s->lsr & UART_LSR_THRE)) { + s->thr_ipending = 1; +- serial_update_irq(s); ++ } else { ++ s->thr_ipending = 0; + } ++ serial_update_irq(s); + } + break; + case 2: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-separate-serial_xmit-and-serial_watch_cb.patch b/SOURCES/kvm-serial-separate-serial_xmit-and-serial_watch_cb.patch new file mode 100644 index 0000000..79df988 --- /dev/null +++ b/SOURCES/kvm-serial-separate-serial_xmit-and-serial_watch_cb.patch @@ -0,0 +1,102 @@ +From 8497b21c6dabe117b27d76f3bdbd86d80b0dd1d7 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:30 +0200 +Subject: [PATCH 17/18] serial: separate serial_xmit and serial_watch_cb + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-18-famz@redhat.com> +Patchwork-id: 75309 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 17/18] serial: separate serial_xmit and serial_watch_cb +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +serial_xmit starts transmission of whatever is in the transmitter +register, THR or FIFO; serial_watch_cb is a wrapper around it and is +only used as a qemu_chr_fe_add_watch callback. + +Tested-by: Bret Ketchum +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit b0585e7e07982daa578c3bfef7f6843c89f110a8) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/char/serial.c + +Contextual conflict because the surrounding migration code around the +touched functions is different. +--- + hw/char/serial.c | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index fdda802..69fefb2 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -104,6 +104,7 @@ do {} while (0) + #endif + + static void serial_receive1(void *opaque, const uint8_t *buf, int size); ++static void serial_xmit(SerialState *s); + + static inline void recv_fifo_put(SerialState *s, uint8_t chr) + { +@@ -219,10 +220,16 @@ static void serial_update_msl(SerialState *s) + qemu_mod_timer(s->modem_status_poll, qemu_get_clock_ns(vm_clock) + get_ticks_per_sec() / 100); + } + +-static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) ++static gboolean serial_watch_cb(GIOChannel *chan, GIOCondition cond, ++ void *opaque) + { + SerialState *s = opaque; ++ serial_xmit(s); ++ return FALSE; ++} + ++static void serial_xmit(SerialState *s) ++{ + do { + assert(!(s->lsr & UART_LSR_TEMT)); + if (s->tsr_retry == 0) { +@@ -250,9 +257,9 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + } else if (qemu_chr_fe_write(s->chr, &s->tsr, 1) != 1) { + if (s->tsr_retry < MAX_XMIT_RETRY && + qemu_chr_fe_add_watch(s->chr, G_IO_OUT|G_IO_HUP, +- serial_xmit, s) > 0) { ++ serial_watch_cb, s) > 0) { + s->tsr_retry++; +- return FALSE; ++ return; + } + } + s->tsr_retry = 0; +@@ -263,11 +270,8 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + + s->last_xmit_ts = qemu_get_clock_ns(vm_clock); + s->lsr |= UART_LSR_TEMT; +- +- return FALSE; + } + +- + static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) + { +@@ -295,7 +299,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + s->lsr &= ~UART_LSR_TEMT; + serial_update_irq(s); + if (s->tsr_retry == 0) { +- serial_xmit(NULL, G_IO_OUT, s); ++ serial_xmit(s); + } + } + break; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-simplify-tsr_retry-reset.patch b/SOURCES/kvm-serial-simplify-tsr_retry-reset.patch new file mode 100644 index 0000000..f61be2c --- /dev/null +++ b/SOURCES/kvm-serial-simplify-tsr_retry-reset.patch @@ -0,0 +1,49 @@ +From 8f143ae501a5bd1010dc4526ff8e0e85c4d2baf1 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:29 +0200 +Subject: [PATCH 16/18] serial: simplify tsr_retry reset + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-17-famz@redhat.com> +Patchwork-id: 75307 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 16/18] serial: simplify tsr_retry reset +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +Move common code outside the if, and reset tsr_retry even in loopback mode. +Right now it cannot become non-zero, but it will be possible as soon as +we start respecting the baud rate. + +Tested-by: Bret Ketchum +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit bce933b85a34514fe34fa559be1d8ccd1f39f954) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/char/serial.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index afa1932..fdda802 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -254,10 +254,8 @@ static gboolean serial_xmit(GIOChannel *chan, GIOCondition cond, void *opaque) + s->tsr_retry++; + return FALSE; + } +- s->tsr_retry = 0; +- } else { +- s->tsr_retry = 0; + } ++ s->tsr_retry = 0; + + /* Transmit another byte if it is already available. It is only + possible when FIFO is enabled and not empty. */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-serial-update-LSR-on-enabling-disabling-FIFOs.patch b/SOURCES/kvm-serial-update-LSR-on-enabling-disabling-FIFOs.patch new file mode 100644 index 0000000..7a61ec1 --- /dev/null +++ b/SOURCES/kvm-serial-update-LSR-on-enabling-disabling-FIFOs.patch @@ -0,0 +1,63 @@ +From d6acc0368578932ee6a2949054a6f640a5b6fa09 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 18 May 2017 09:21:26 +0200 +Subject: [PATCH 13/18] serial: update LSR on enabling/disabling FIFOs + +RH-Author: Fam Zheng +Message-id: <20170518092131.16571-14-famz@redhat.com> +Patchwork-id: 75306 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v3 13/18] serial: update LSR on enabling/disabling FIFOs +Bugzilla: 1451470 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost + +From: Paolo Bonzini + +When the transmit FIFO is emptied or enabled, the transmitter +hold register is empty. When it is disabled, it is also emptied and +in addition the previous contents of the transmitter hold register +are discarded. In either case, the THRE bit in LSR must be set and +THRI raised. + +When the receive FIFO is emptied or enabled, the data ready and break +bits must be cleared in LSR. Likewise when the receive FIFO is disabled. + +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Paolo Bonzini +(cherry picked from commit 023c3a9707d0d9259a1e858cdf7804dd10973fca) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/char/serial.c + +Contextual conflict because upstream uses new timer API timer_del while +downstream still uses qemu_del_timer. +--- + hw/char/serial.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hw/char/serial.c b/hw/char/serial.c +index c2be4bd..e0d29a8 100644 +--- a/hw/char/serial.c ++++ b/hw/char/serial.c +@@ -351,12 +351,15 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, + /* FIFO clear */ + + if (val & UART_FCR_RFR) { ++ s->lsr &= ~(UART_LSR_DR | UART_LSR_BI); + qemu_del_timer(s->fifo_timeout_timer); + s->timeout_ipending=0; + fifo8_reset(&s->recv_fifo); + } + + if (val & UART_FCR_XFR) { ++ s->lsr |= UART_LSR_THRE; ++ s->thr_ipending = 1; + fifo8_reset(&s->xmit_fifo); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-simpletrace-add-simpletrace.py-no-header-option.patch b/SOURCES/kvm-simpletrace-add-simpletrace.py-no-header-option.patch new file mode 100644 index 0000000..1b0b0b6 --- /dev/null +++ b/SOURCES/kvm-simpletrace-add-simpletrace.py-no-header-option.patch @@ -0,0 +1,109 @@ +From ae603c6d842f7e7f1529f040ca463be2f2edd4c8 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:53 +0200 +Subject: [PATCH 35/43] simpletrace: add simpletrace.py --no-header option + +Message-id: <1412690820-31016-5-git-send-email-stefanha@redhat.com> +Patchwork-id: 61609 +O-Subject: [RHEL7.1 qemu-kvm PATCH 04/11] simpletrace: add simpletrace.py --no-header option +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +It can be useful to read simpletrace files that have no header. For +example, a ring buffer may not have a header record but can still be +processed if the user is sure the file format version is compatible. + + $ scripts/simpletrace.py --no-header trace-events trace-file + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 15327c3df049c9621ff9b542ccbfc3d17203d1f7) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + scripts/simpletrace.py + +Context conflict because upstream doesn't have enabled_events[]. +--- + scripts/simpletrace.py | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +diff --git a/scripts/simpletrace.py b/scripts/simpletrace.py +index 682ec66..b931dd2 100755 +--- a/scripts/simpletrace.py ++++ b/scripts/simpletrace.py +@@ -59,8 +59,8 @@ def read_record(edict, fobj): + rechdr = read_header(fobj, rec_header_fmt) + return get_record(edict, rechdr, fobj) # return tuple of record elements + +-def read_trace_file(edict, fobj): +- """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, pid, arg1, ..., arg6).""" ++def read_trace_header(fobj): ++ """Read and verify trace file header""" + header = read_header(fobj, log_header_fmt) + if header is None or \ + header[0] != header_event_id or \ +@@ -74,6 +74,8 @@ def read_trace_file(edict, fobj): + raise ValueError('Log format %d not supported with this QEMU release!' + % log_version) + ++def read_trace_records(edict, fobj): ++ """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, pid, arg1, ..., arg6).""" + while True: + rec = read_record(edict, fobj) + if rec is None: +@@ -103,7 +105,7 @@ class Analyzer(object): + """Called at the end of the trace.""" + pass + +-def process(events, log, analyzer): ++def process(events, log, analyzer, read_header=True): + """Invoke an analyzer on each event in a log.""" + if isinstance(events, str): + events = _read_events(open(events, 'r')) +@@ -111,6 +113,10 @@ def process(events, log, analyzer): + log = open(log, 'rb') + + enabled_events = [] ++ ++ if read_header: ++ read_trace_header(log) ++ + dropped_event = Event.build("Dropped_Event(uint64_t num_events_dropped)") + edict = {dropped_event_id: dropped_event} + +@@ -142,7 +148,7 @@ def process(events, log, analyzer): + + analyzer.begin() + fn_cache = {} +- for rec in read_trace_file(edict, log): ++ for rec in read_trace_records(edict, log): + event_num = rec[0] + event = edict[event_num] + if event_num not in fn_cache: +@@ -157,12 +163,17 @@ def run(analyzer): + advanced scripts will want to call process() instead.""" + import sys + +- if len(sys.argv) != 3: +- sys.stderr.write('usage: %s \n' % sys.argv[0]) ++ read_header = True ++ if len(sys.argv) == 4 and sys.argv[1] == '--no-header': ++ read_header = False ++ del sys.argv[1] ++ elif len(sys.argv) != 3: ++ sys.stderr.write('usage: %s [--no-header] ' \ ++ '\n' % sys.argv[0]) + sys.exit(1) + + events = _read_events(open(sys.argv[1], 'r')) +- process(events, sys.argv[2], analyzer) ++ process(events, sys.argv[2], analyzer, read_header=read_header) + + if __name__ == '__main__': + class Formatter(Analyzer): +-- +1.8.3.1 + diff --git a/SOURCES/kvm-simpletrace-add-support-for-trace-record-pid-field.patch b/SOURCES/kvm-simpletrace-add-support-for-trace-record-pid-field.patch new file mode 100644 index 0000000..9101155 --- /dev/null +++ b/SOURCES/kvm-simpletrace-add-support-for-trace-record-pid-field.patch @@ -0,0 +1,113 @@ +From c319a5160a1b86c5cfa288cdf36e7473f8c38515 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:52 +0200 +Subject: [PATCH 34/43] simpletrace: add support for trace record pid field + +Message-id: <1412690820-31016-4-git-send-email-stefanha@redhat.com> +Patchwork-id: 61608 +O-Subject: [RHEL7.1 qemu-kvm PATCH 03/11] simpletrace: add support for trace record pid field +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +Extract the pid field from the trace record and print it. + +Change the trace record tuple from: + (event_num, timestamp, arg1, ..., arg6) +to: + (event_num, timestamp, pid, arg1, ..., arg6) + +Trace event methods now support 3 prototypes: +1. (arg1, arg2, arg3) +2. (timestamp, arg1, arg2, arg3) +3. (timestamp, pid, arg1, arg2, arg3) + +Existing script continue to work without changes, they only know about +prototypes 1 and 2. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 80ff35cd3ff451e8f200413ddf27816058630c1f) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + scripts/simpletrace.py | 26 +++++++++++++++----------- + 1 file changed, 15 insertions(+), 11 deletions(-) + +diff --git a/scripts/simpletrace.py b/scripts/simpletrace.py +index 3cb2cf0..682ec66 100755 +--- a/scripts/simpletrace.py ++++ b/scripts/simpletrace.py +@@ -32,10 +32,10 @@ def read_header(fobj, hfmt): + return struct.unpack(hfmt, hdr) + + def get_record(edict, rechdr, fobj): +- """Deserialize a trace record from a file into a tuple (event_num, timestamp, arg1, ..., arg6).""" ++ """Deserialize a trace record from a file into a tuple (event_num, timestamp, pid, arg1, ..., arg6).""" + if rechdr is None: + return None +- rec = (rechdr[0], rechdr[1]) ++ rec = (rechdr[0], rechdr[1], rechdr[3]) + if rechdr[0] != dropped_event_id: + event_id = rechdr[0] + event = edict[event_id] +@@ -55,12 +55,12 @@ def get_record(edict, rechdr, fobj): + + + def read_record(edict, fobj): +- """Deserialize a trace record from a file into a tuple (event_num, timestamp, arg1, ..., arg6).""" ++ """Deserialize a trace record from a file into a tuple (event_num, timestamp, pid, arg1, ..., arg6).""" + rechdr = read_header(fobj, rec_header_fmt) + return get_record(edict, rechdr, fobj) # return tuple of record elements + + def read_trace_file(edict, fobj): +- """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, arg1, ..., arg6).""" ++ """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, pid, arg1, ..., arg6).""" + header = read_header(fobj, log_header_fmt) + if header is None or \ + header[0] != header_event_id or \ +@@ -132,10 +132,13 @@ def process(events, log, analyzer): + fn_argcount = len(inspect.getargspec(fn)[0]) - 1 + if fn_argcount == event_argcount + 1: + # Include timestamp as first argument +- return lambda _, rec: fn(*rec[1:2 + event_argcount]) ++ return lambda _, rec: fn(*((rec[1:2],) + rec[3:3 + event_argcount])) ++ elif fn_argcount == event_argcount + 2: ++ # Include timestamp and pid ++ return lambda _, rec: fn(*rec[1:3 + event_argcount]) + else: +- # Just arguments, no timestamp +- return lambda _, rec: fn(*rec[2:2 + event_argcount]) ++ # Just arguments, no timestamp or pid ++ return lambda _, rec: fn(*rec[3:3 + event_argcount]) + + analyzer.begin() + fn_cache = {} +@@ -167,19 +170,20 @@ if __name__ == '__main__': + self.last_timestamp = None + + def catchall(self, event, rec): +- i = 1 + timestamp = rec[1] + if self.last_timestamp is None: + self.last_timestamp = timestamp + delta_ns = timestamp - self.last_timestamp + self.last_timestamp = timestamp + +- fields = [event.name, '%0.3f' % (delta_ns / 1000.0)] ++ fields = [event.name, '%0.3f' % (delta_ns / 1000.0), ++ 'pid=%d' % rec[2]] ++ i = 3 + for type, name in event.args: + if is_string(type): +- fields.append('%s=%s' % (name, rec[i + 1])) ++ fields.append('%s=%s' % (name, rec[i])) + else: +- fields.append('%s=0x%x' % (name, rec[i + 1])) ++ fields.append('%s=0x%x' % (name, rec[i])) + i += 1 + print ' '.join(fields) + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-size-off-by-one.patch b/SOURCES/kvm-size-off-by-one.patch new file mode 100644 index 0000000..3d30ba8 --- /dev/null +++ b/SOURCES/kvm-size-off-by-one.patch @@ -0,0 +1,118 @@ +From cac9ac8f0173f95893fbc62fa67fcf04e4c76f5f Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 25 Mar 2014 14:23:15 +0100 +Subject: [PATCH 08/49] size off-by-one + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-9-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 08/48] block/cloop: fix offsets[] size off-by-one +Bugzilla: 1066691 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1066691 +Upstream status: Series embargoed + +cloop stores the number of compressed blocks in the n_blocks header +field. The file actually contains n_blocks + 1 offsets, where the extra +offset is the end-of-file offset. + +The following line in cloop_read_block() results in an out-of-bounds +offsets[] access: + +uint32_t bytes = s->offsets[block_num + 1] - s->offsets[block_num]; + +This patch allocates and loads the extra offset so that +cloop_read_block() works correctly when the last block is accessed. + +Notice that we must free s->offsets[] unconditionally now since there is +always an end-of-file offset. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +--- + block/cloop.c | 12 +++++------- + tests/qemu-iotests/075 | 5 +++++ + tests/qemu-iotests/075.out | 4 ++++ + 3 files changed, 14 insertions(+), 7 deletions(-) + +diff --git a/block/cloop.c b/block/cloop.c +index 55a804f..b6ad50f 100644 +--- a/block/cloop.c ++++ b/block/cloop.c +@@ -99,14 +99,14 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags, + s->n_blocks = be32_to_cpu(s->n_blocks); + + /* read offsets */ +- if (s->n_blocks > UINT32_MAX / sizeof(uint64_t)) { ++ if (s->n_blocks > (UINT32_MAX - 1) / sizeof(uint64_t)) { + /* Prevent integer overflow */ + error_setg(errp, "n_blocks %u must be %zu or less", + s->n_blocks, +- UINT32_MAX / sizeof(uint64_t)); ++ (UINT32_MAX - 1) / sizeof(uint64_t)); + return -EINVAL; + } +- offsets_size = s->n_blocks * sizeof(uint64_t); ++ offsets_size = (s->n_blocks + 1) * sizeof(uint64_t); + if (offsets_size > 512 * 1024 * 1024) { + /* Prevent ridiculous offsets_size which causes memory allocation to + * fail or overflows bdrv_pread() size. In practice the 512 MB +@@ -123,7 +123,7 @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- for(i=0;in_blocks;i++) { ++ for (i = 0; i < s->n_blocks + 1; i++) { + uint64_t size; + + s->offsets[i] = be64_to_cpu(s->offsets[i]); +@@ -243,9 +243,7 @@ static coroutine_fn int cloop_co_read(BlockDriverState *bs, int64_t sector_num, + static void cloop_close(BlockDriverState *bs) + { + BDRVCloopState *s = bs->opaque; +- if (s->n_blocks > 0) { +- g_free(s->offsets); +- } ++ g_free(s->offsets); + g_free(s->compressed_block); + g_free(s->uncompressed_block); + inflateEnd(&s->zstream); +diff --git a/tests/qemu-iotests/075 b/tests/qemu-iotests/075 +index d74fb33..40032c5 100755 +--- a/tests/qemu-iotests/075 ++++ b/tests/qemu-iotests/075 +@@ -52,6 +52,11 @@ _use_sample_img simple-pattern.cloop.bz2 + $QEMU_IO -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir + + echo ++echo "== check that the last sector can be read ==" ++_use_sample_img simple-pattern.cloop.bz2 ++$QEMU_IO -c "read $((1024 * 1024 - 512)) 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir ++ ++echo + echo "== block_size must be a multiple of 512 ==" + _use_sample_img simple-pattern.cloop.bz2 + poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x02\x01" +diff --git a/tests/qemu-iotests/075.out b/tests/qemu-iotests/075.out +index 911cd3b..5f1d6c1 100644 +--- a/tests/qemu-iotests/075.out ++++ b/tests/qemu-iotests/075.out +@@ -4,6 +4,10 @@ QA output created by 075 + read 512/512 bytes at offset 0 + 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + ++== check that the last sector can be read == ++read 512/512 bytes at offset 1048064 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ + == block_size must be a multiple of 512 == + qemu-io: can't open device TEST_DIR/simple-pattern.cloop: block_size 513 must be a multiple of 512 + no file open, try 'help open' +-- +1.7.1 + diff --git a/SOURCES/kvm-skip-system-call-when-msi-route-is-unchanged.patch b/SOURCES/kvm-skip-system-call-when-msi-route-is-unchanged.patch new file mode 100644 index 0000000..bee1ded --- /dev/null +++ b/SOURCES/kvm-skip-system-call-when-msi-route-is-unchanged.patch @@ -0,0 +1,51 @@ +From 34488aa0dd2c4c0a0dcc57a0557ec07750170f67 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Mon, 19 May 2014 09:57:40 +0200 +Subject: [PATCH 2/2] kvm: skip system call when msi route is unchanged + +RH-Author: Michael S. Tsirkin +Message-id: <1400493448-29146-3-git-send-email-mst@redhat.com> +Patchwork-id: 58949 +O-Subject: [PATCH qemu-kvm RHEL7.1 2/2] kvm: skip system call when msi route is unchanged +Bugzilla: 1098976 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +Some guests do a large number of mask/unmask +calls which currently trigger expensive route update +system calls. +Detect that route in unchanged and skip the system call. + +Reported-by: "Zhanghaoyu (A)" +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Gleb Natapov +(cherry picked from commit 40509f7f52672fe41c2cce895e187352fc09f53a) +--- + kvm-all.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 592301a..f7f621b 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1008,6 +1008,10 @@ static int kvm_update_routing_entry(KVMState *s, + continue; + } + ++ if(!memcmp(entry, new_entry, sizeof *entry)) { ++ return 0; ++ } ++ + *entry = *new_entry; + + kvm_irqchip_commit_routes(s); +-- +1.7.1 + diff --git a/SOURCES/kvm-slavio_misc-Fix-slavio_led_mem_readw-_writew-tracepo.patch b/SOURCES/kvm-slavio_misc-Fix-slavio_led_mem_readw-_writew-tracepo.patch new file mode 100644 index 0000000..1c1a1b8 --- /dev/null +++ b/SOURCES/kvm-slavio_misc-Fix-slavio_led_mem_readw-_writew-tracepo.patch @@ -0,0 +1,50 @@ +From bd6746591d0d325933ef99cf67eff755974136d7 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:51 +0100 +Subject: [PATCH 10/16] slavio_misc: Fix slavio_led_mem_readw/_writew + tracepoints + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56113 +O-Subject: [PATCH 7.0 qemu-kvm 2/7] slavio_misc: Fix slavio_led_mem_readw/_writew tracepoints +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Broken since they got added in commit 97bf485. + +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f3a64b8c89ac9b5111f97e2653d249e4668764b3) +--- + hw/misc/slavio_misc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/misc/slavio_misc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/misc/slavio_misc.c b/hw/misc/slavio_misc.c +index a7a9368..3571850 100644 +--- a/hw/misc/slavio_misc.c ++++ b/hw/misc/slavio_misc.c +@@ -368,7 +368,7 @@ static void slavio_led_mem_writew(void *opaque, hwaddr addr, + { + MiscState *s = opaque; + +- trace_slavio_led_mem_readw(val & 0xffff); ++ trace_slavio_led_mem_writew(val & 0xffff); + switch (addr) { + case 0: + s->leds = val; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-slirp-Correct-size-check-in-m_inc.patch b/SOURCES/kvm-slirp-Correct-size-check-in-m_inc.patch new file mode 100644 index 0000000..6d9514b --- /dev/null +++ b/SOURCES/kvm-slirp-Correct-size-check-in-m_inc.patch @@ -0,0 +1,76 @@ +From b25ccac372f3289d7b0b5500064fe0a38eb32d6f Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Wed, 8 Aug 2018 08:44:36 +0200 +Subject: [PATCH 4/4] slirp: Correct size check in m_inc() + +RH-Author: Xiao Wang +Message-id: <1533717876-2330-1-git-send-email-jasowang@redhat.com> +Patchwork-id: 81676 +O-Subject: [RHEL-7.6/7.5z qemu-kvm PATCH] slirp: Correct size check in m_inc() +Bugzilla: 1586253 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Thomas Huth + +From: Peter Maydell + +Notes: +- Conflict since we lacks 6da5de1ee87e ("slirp: reformat m_inc + routine"), and its backport has various other dependicies. +- This is a fixup for CVE-2018-11806 fix + +The data in an mbuf buffer is not necessarily at the start of the +allocated buffer. (For instance m_adj() allows data to be trimmed +from the start by just advancing the pointer and reducing the length.) +This means that the allocated buffer size (m->m_size) and the +amount of space from the m_data pointer to the end of the +buffer (M_ROOM(m)) are not necessarily the same. + +Commit 864036e251f54c9 tried to change the m_inc() function from +taking the new allocated-buffer-size to taking the new room-size, +but forgot to change the initial "do we already have enough space" +check. This meant that if we were trying to extend a buffer which +had a leading gap between the buffer start and the data, we might +incorrectly decide it didn't need to be extended, and then +overrun the end of the buffer, causing memory corruption and +an eventual crash. + +Change the "already big enough?" condition from checking the +argument against m->m_size to checking against M_ROOM(). +This only makes a difference for the callsite in m_cat(); +the other three callsites all start with a freshly allocated +mbuf from m_get(), which will have m->m_size == M_ROOM(m). + +Fixes: 864036e251f54c9 +Fixes: https://bugs.launchpad.net/qemu/+bug/1785670 +Signed-off-by: Peter Maydell +Reviewed-by: Samuel Thibault +Message-id: 20180807114501.12370-1-peter.maydell@linaro.org +Tested-by: Dr. David Alan Gilbert +(cherry picked from commit c22098c74a09164797fae6511c5eaf68f32c4dd8) +Signed-off-by: Jason Wang +Signed-off-by: Miroslav Rezanina +--- + slirp/mbuf.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/slirp/mbuf.c b/slirp/mbuf.c +index ced2033..63f071f 100644 +--- a/slirp/mbuf.c ++++ b/slirp/mbuf.c +@@ -154,8 +154,10 @@ m_inc(struct mbuf *m, int size) + { + int datasize; + +- /* some compiles throw up on gotos. This one we can fake. */ +- if(m->m_size>size) return; ++ /* some compilers throw up on gotos. This one we can fake. */ ++ if (M_ROOM(m) > size) { ++ return; ++ } + + if (m->m_flags & M_EXT) { + datasize = m->m_data - m->m_ext; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-Fix-access-to-freed-memory.patch b/SOURCES/kvm-slirp-Fix-access-to-freed-memory.patch new file mode 100644 index 0000000..df5f1ff --- /dev/null +++ b/SOURCES/kvm-slirp-Fix-access-to-freed-memory.patch @@ -0,0 +1,62 @@ +From 8c490d636f5dbe289b43cd0c34413aca3e62e2a9 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Mon, 27 Nov 2017 07:07:56 +0100 +Subject: [PATCH 5/9] slirp: Fix access to freed memory + +RH-Author: Xiao Wang +Message-id: <1511766477-29559-4-git-send-email-jasowang@redhat.com> +Patchwork-id: 77898 +O-Subject: [RHEL7.5 qemu-kvm PATCH 3/4] slirp: Fix access to freed memory +Bugzilla: 1508745 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Miroslav Rezanina + +From: Samuel Thibault + +if_start() goes through the slirp->if_fastq and slirp->if_batchq +list of pending messages, and accesses ifm->ifq_so->so_nqueued of its +elements if ifm->ifq_so != NULL. When freeing a socket, we thus need +to make sure that any pending message for this socket does not refer +to the socket any more. + +Signed-off-by: Samuel Thibault +Tested-by: Brian Candler +Reviewed-by: Stefan Hajnoczi +(cherry picked from commit ea64d5f08817b5e79e17135dce516c7583107f91) +Signed-off-by: Miroslav Rezanina +--- + slirp/socket.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/slirp/socket.c b/slirp/socket.c +index 8e8819c..09b5d3d 100644 +--- a/slirp/socket.c ++++ b/slirp/socket.c +@@ -63,6 +63,23 @@ void + sofree(struct socket *so) + { + Slirp *slirp = so->slirp; ++ struct mbuf *ifm; ++ ++ for (ifm = (struct mbuf *) slirp->if_fastq.qh_link; ++ (struct quehead *) ifm != &slirp->if_fastq; ++ ifm = ifm->ifq_next) { ++ if (ifm->ifq_so == so) { ++ ifm->ifq_so = NULL; ++ } ++ } ++ ++ for (ifm = (struct mbuf *) slirp->if_batchq.qh_link; ++ (struct quehead *) ifm != &slirp->if_batchq; ++ ifm = ifm->ifq_next) { ++ if (ifm->ifq_so == so) { ++ ifm->ifq_so = NULL; ++ } ++ } + + if (so->so_emu==EMU_RSH && so->extra) { + sofree(so->extra); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-check-sscanf-result-when-emulating-ident.patch b/SOURCES/kvm-slirp-check-sscanf-result-when-emulating-ident.patch new file mode 100644 index 0000000..dc98e6f --- /dev/null +++ b/SOURCES/kvm-slirp-check-sscanf-result-when-emulating-ident.patch @@ -0,0 +1,62 @@ +From 013f795cb54d42e6b057689f7d51fd27e1730197 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Tue, 2 Apr 2019 13:39:01 +0200 +Subject: [PATCH 3/3] slirp: check sscanf result when emulating ident +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20190402133901.28238-1-marcandre.lureau@redhat.com> +Patchwork-id: 85305 +O-Subject: [RHEL-7.7 qemu-kvm PATCH] slirp: check sscanf result when emulating ident +Bugzilla: 1689791 +RH-Acked-by: Philippe Mathieu-Daudé +RH-Acked-by: Markus Armbruster +RH-Acked-by: Dr. David Alan Gilbert + +From: William Bowling + +When emulating ident in tcp_emu, if the strchr checks passed but the +sscanf check failed, two uninitialized variables would be copied and +sent in the reply, so move this code inside the if(sscanf()) clause. + +Signed-off-by: William Bowling +Cc: qemu-stable@nongnu.org +Cc: secalert@redhat.com +Message-Id: <1551476756-25749-1-git-send-email-will@wbowling.info> +Signed-off-by: Samuel Thibault +Reviewed-by: Philippe Mathieu-Daudé + +(cherry picked from commit d3222975c7d6cda9e25809dea05241188457b113) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + slirp/tcp_subr.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c +index 043f28f..0b7138b 100644 +--- a/slirp/tcp_subr.c ++++ b/slirp/tcp_subr.c +@@ -605,12 +605,12 @@ tcp_emu(struct socket *so, struct mbuf *m) + break; + } + } ++ so_rcv->sb_cc = snprintf(so_rcv->sb_data, ++ so_rcv->sb_datalen, ++ "%d,%d\r\n", n1, n2); ++ so_rcv->sb_rptr = so_rcv->sb_data; ++ so_rcv->sb_wptr = so_rcv->sb_data + so_rcv->sb_cc; + } +- so_rcv->sb_cc = snprintf(so_rcv->sb_data, +- so_rcv->sb_datalen, +- "%d,%d\r\n", n1, n2); +- so_rcv->sb_rptr = so_rcv->sb_data; +- so_rcv->sb_wptr = so_rcv->sb_data + so_rcv->sb_cc; + } + m_free(m); + return 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-cleanup-leftovers-from-misc.h.patch b/SOURCES/kvm-slirp-cleanup-leftovers-from-misc.h.patch new file mode 100644 index 0000000..a04db3a --- /dev/null +++ b/SOURCES/kvm-slirp-cleanup-leftovers-from-misc.h.patch @@ -0,0 +1,64 @@ +From def99e39e5f759343634b0f0047343744a0e0c36 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Mon, 27 Nov 2017 07:07:54 +0100 +Subject: [PATCH 3/9] slirp: cleanup leftovers from misc.h + +RH-Author: Xiao Wang +Message-id: <1511766477-29559-2-git-send-email-jasowang@redhat.com> +Patchwork-id: 77897 +O-Subject: [RHEL7.5 qemu-kvm PATCH 1/4] slirp: cleanup leftovers from misc.h +Bugzilla: 1508745 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Miroslav Rezanina + +From: Michael Tokarev + +There are quite a few leftover declarations in slirp/misc.h. +Remove them. + +Signed-off-by: Michael Tokarev +(cherry picked from commit a9c34e4485ef0a8a61e88f1c9f9bb87f00ba2c72) +Signed-off-by: Miroslav Rezanina +--- + slirp/misc.h | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/slirp/misc.h b/slirp/misc.h +index cc36aeb..ba8beb1 100644 +--- a/slirp/misc.h ++++ b/slirp/misc.h +@@ -20,8 +20,6 @@ struct ex_list { + char *strdup(const char *); + #endif + +-void do_wait(int); +- + #define EMU_NONE 0x0 + + /* TCP emulations */ +@@ -51,21 +49,9 @@ struct emu_t { + struct emu_t *next; + }; + +-extern int x_port, x_server, x_display; +- +-int show_x(char *, struct socket *); +-void redir_x(uint32_t, int, int, int); + void slirp_insque(void *, void *); + void slirp_remque(void *); + int add_exec(struct ex_list **, int, char *, struct in_addr, int); +-int slirp_openpty(int *, int *); + int fork_exec(struct socket *so, const char *ex, int do_pty); +-void snooze_hup(int); +-void snooze(void); +-void relay(int); +-void add_emu(char *); +-void fd_nonblock(int); +-void fd_block(int); +-int rsh_exec(struct socket *, struct socket *, char *, char *, char *); + + #endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-correct-size-computation-while-concatenating-m.patch b/SOURCES/kvm-slirp-correct-size-computation-while-concatenating-m.patch new file mode 100644 index 0000000..af506aa --- /dev/null +++ b/SOURCES/kvm-slirp-correct-size-computation-while-concatenating-m.patch @@ -0,0 +1,113 @@ +From 2c90d2f3ad8d299df7df7c055c66fa6711397f4a Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Mon, 30 Jul 2018 06:31:57 +0200 +Subject: [PATCH 8/8] slirp: correct size computation while concatenating mbuf + +RH-Author: Xiao Wang +Message-id: <1532932317-6100-3-git-send-email-jasowang@redhat.com> +Patchwork-id: 81543 +O-Subject: [RHEL7.6/7.5.z qemu-kvm PATCH 2/2] slirp: correct size computation while concatenating mbuf +Bugzilla: 1586253 +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Michael S. Tsirkin + +From: Prasad J Pandit + +Upstream: 70f2e64e4dde slirp: Convert mbufs to use g_malloc() and g_free() +Notes: Conflict since we lacks 70f2e64e4dde + ("slirp: Convert mbufs to use g_malloc() and g_free()") + +While reassembling incoming fragmented datagrams, 'm_cat' routine +extends the 'mbuf' buffer, if it has insufficient room. It computes +a wrong buffer size, which leads to overwriting adjacent heap buffer +area. Correct this size computation in m_cat. + +Reported-by: ZDI Disclosures +Signed-off-by: Prasad J Pandit +Signed-off-by: Samuel Thibault +Signed-off-by: Jason Wang +Signed-off-by: Miroslav Rezanina +--- + slirp/mbuf.c | 11 +++++------ + slirp/mbuf.h | 8 +++----- + 2 files changed, 8 insertions(+), 11 deletions(-) + +diff --git a/slirp/mbuf.c b/slirp/mbuf.c +index 5565fd1..ced2033 100644 +--- a/slirp/mbuf.c ++++ b/slirp/mbuf.c +@@ -139,7 +139,7 @@ m_cat(struct mbuf *m, struct mbuf *n) + * If there's no room, realloc + */ + if (M_FREEROOM(m) < n->m_len) +- m_inc(m,m->m_size+MINCSIZE); ++ m_inc(m, m->m_len + n->m_len); + + memcpy(m->m_data+m->m_len, n->m_data, n->m_len); + m->m_len += n->m_len; +@@ -148,7 +148,7 @@ m_cat(struct mbuf *m, struct mbuf *n) + } + + +-/* make m size bytes large */ ++/* make m 'size' bytes large from m_data */ + void + m_inc(struct mbuf *m, int size) + { +@@ -159,12 +159,12 @@ m_inc(struct mbuf *m, int size) + + if (m->m_flags & M_EXT) { + datasize = m->m_data - m->m_ext; +- m->m_ext = (char *)realloc(m->m_ext,size); ++ m->m_ext = (char *)realloc(m->m_ext, size + datasize); + m->m_data = m->m_ext + datasize; + } else { + char *dat; + datasize = m->m_data - m->m_dat; +- dat = (char *)malloc(size); ++ dat = (char *)malloc(size + datasize); + memcpy(dat, m->m_dat, m->m_size); + + m->m_ext = dat; +@@ -172,8 +172,7 @@ m_inc(struct mbuf *m, int size) + m->m_flags |= M_EXT; + } + +- m->m_size = size; +- ++ m->m_size = size + datasize; + } + + +diff --git a/slirp/mbuf.h b/slirp/mbuf.h +index b144f1c..32e5120 100644 +--- a/slirp/mbuf.h ++++ b/slirp/mbuf.h +@@ -33,8 +33,6 @@ + #ifndef _MBUF_H_ + #define _MBUF_H_ + +-#define MINCSIZE 4096 /* Amount to increase mbuf if too small */ +- + /* + * Macros for type conversion + * mtod(m,t) - convert mbuf pointer to data pointer of correct type +@@ -72,11 +70,11 @@ struct mbuf { + struct mbuf *m_prevpkt; /* Flags aren't used in the output queue */ + int m_flags; /* Misc flags */ + +- int m_size; /* Size of data */ ++ int m_size; /* Size of mbuf, from m_dat or m_ext */ + struct socket *m_so; + +- caddr_t m_data; /* Location of data */ +- int m_len; /* Amount of data in this mbuf */ ++ caddr_t m_data; /* Current location of data */ ++ int m_len; /* Amount of data in this mbuf, from m_data */ + + Slirp *slirp; + bool arp_requested; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-don-t-manipulate-so_rcv-in-tcp_emu.patch b/SOURCES/kvm-slirp-don-t-manipulate-so_rcv-in-tcp_emu.patch new file mode 100644 index 0000000..7ba8686 --- /dev/null +++ b/SOURCES/kvm-slirp-don-t-manipulate-so_rcv-in-tcp_emu.patch @@ -0,0 +1,127 @@ +From 5e805decf566e71cd315243de9a037d99becb074 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Mon, 20 May 2019 16:43:15 +0200 +Subject: [PATCH 4/4] slirp: don't manipulate so_rcv in tcp_emu() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20190520164315.22140-4-marcandre.lureau@redhat.com> +Patchwork-id: 88095 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 3/3] slirp: don't manipulate so_rcv in tcp_emu() +Bugzilla: 1669068 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Philippe Mathieu-Daudé +RH-Acked-by: Thomas Huth + +For some reason, EMU_IDENT is not like other "emulated" protocols and +tries to reconstitute the original buffer, if it came in multiple +packets. Unfortunately, it does so wrongly, as it doesn't respect the +sbuf circular buffer appending rules, nor does it maintain some of the +invariants (rptr is incremented without bounds, etc): this leads to +further memory corruption revealed by ASAN or various malloc +errors. Furthermore, the so_rcv buffer is regularly flushed, so there +is no guarantee that buffer reconstruction will do what is expected. + +Instead, do what the function comment says: "XXX Assumes the whole +command came in one packet", and don't touch so_rcv. + +Related to: https://bugzilla.redhat.com/show_bug.cgi?id=1664205 + +Cc: Prasad J Pandit +Signed-off-by: Marc-André Lureau + +(cherry picked from libslirp commit +9da0da837780f825b5db31db6620492f8b7cd5d6) + +[ MA - backported with style conflicts, and without qemu commit +a7104eda7dab99d0cdbd3595c211864cba415905 which is unnecessary with +this patch ] + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + slirp/tcp_subr.c | 63 +++++++++++++++++++++++++++----------------------------- + 1 file changed, 30 insertions(+), 33 deletions(-) + +diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c +index 578b204..d49a366 100644 +--- a/slirp/tcp_subr.c ++++ b/slirp/tcp_subr.c +@@ -581,42 +581,39 @@ tcp_emu(struct socket *so, struct mbuf *m) + struct socket *tmpso; + struct sockaddr_in addr; + socklen_t addrlen = sizeof(struct sockaddr_in); +- struct sbuf *so_rcv = &so->so_rcv; +- +- memcpy(so_rcv->sb_wptr, m->m_data, m->m_len); +- so_rcv->sb_wptr += m->m_len; +- so_rcv->sb_rptr += m->m_len; +- m_inc(m, m->m_len + 1); +- m->m_data[m->m_len] = 0; /* NULL terminate */ +- if (strchr(m->m_data, '\r') || strchr(m->m_data, '\n')) { +- if (sscanf(so_rcv->sb_data, "%u%*[ ,]%u", &n1, &n2) == 2) { +- HTONS(n1); +- HTONS(n2); +- /* n2 is the one on our host */ +- for (tmpso = slirp->tcb.so_next; +- tmpso != &slirp->tcb; +- tmpso = tmpso->so_next) { +- if (tmpso->so_laddr.s_addr == so->so_laddr.s_addr && +- tmpso->so_lport == n2 && +- tmpso->so_faddr.s_addr == so->so_faddr.s_addr && +- tmpso->so_fport == n1) { +- if (getsockname(tmpso->s, +- (struct sockaddr *)&addr, &addrlen) == 0) +- n2 = addr.sin_port; +- break; +- } ++ char *eol = g_strstr_len(m->m_data, m->m_len, "\r\n"); ++ ++ if (!eol) { ++ return 1; ++ } ++ ++ *eol = '\0'; ++ if (sscanf(m->m_data, "%u%*[ ,]%u", &n1, &n2) == 2) { ++ HTONS(n1); ++ HTONS(n2); ++ /* n2 is the one on our host */ ++ for (tmpso = slirp->tcb.so_next; tmpso != &slirp->tcb; ++ tmpso = tmpso->so_next) { ++ if (tmpso->so_laddr.s_addr == so->so_laddr.s_addr && ++ tmpso->so_lport == n2 && ++ tmpso->so_faddr.s_addr == so->so_faddr.s_addr && ++ tmpso->so_fport == n1) { ++ if (getsockname(tmpso->s, (struct sockaddr *)&addr, ++ &addrlen) == 0) ++ n2 = addr.sin_port; ++ break; + } +- NTOHS(n1); +- NTOHS(n2); +- so_rcv->sb_cc = snprintf(so_rcv->sb_data, +- so_rcv->sb_datalen, +- "%d,%d\r\n", n1, n2); +- so_rcv->sb_rptr = so_rcv->sb_data; +- so_rcv->sb_wptr = so_rcv->sb_data + so_rcv->sb_cc; + } ++ NTOHS(n1); ++ NTOHS(n2); ++ m_inc(m, snprintf(NULL, 0, "%d,%d\r\n", n1, n2) + 1); ++ m->m_len = snprintf(m->m_data, M_ROOM(m), "%d,%d\r\n", n1, n2); ++ assert(m->m_len < M_ROOM(m)); ++ } else { ++ *eol = '\r'; + } +- m_free(m); +- return 0; ++ ++ return 1; + } + + case EMU_FTP: /* ftp */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-ensure-there-is-enough-space-in-mbuf-to-null-t.patch b/SOURCES/kvm-slirp-ensure-there-is-enough-space-in-mbuf-to-null-t.patch new file mode 100644 index 0000000..9971280 --- /dev/null +++ b/SOURCES/kvm-slirp-ensure-there-is-enough-space-in-mbuf-to-null-t.patch @@ -0,0 +1,66 @@ +From e80c12dfdbde349dcd225771a4801b47be0b3b5f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Mon, 20 May 2019 16:43:14 +0200 +Subject: [PATCH 3/4] slirp: ensure there is enough space in mbuf to + null-terminate +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20190520164315.22140-3-marcandre.lureau@redhat.com> +Patchwork-id: 88094 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 2/3] slirp: ensure there is enough space in mbuf to null-terminate +Bugzilla: 1669068 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Philippe Mathieu-Daudé +RH-Acked-by: Thomas Huth + +Prevents from buffer overflows. +Related to: https://bugzilla.redhat.com/show_bug.cgi?id=1664205 + +Cc: Prasad J Pandit +Signed-off-by: Marc-André Lureau + +(cherry picked from libslirp commit +306fef58b54d793ba4b259728c21322765bda917) + +[ MA - backported with style conflicts fixes ] +Signed-off-by: Marc-André Lureau + +Signed-off-by: Miroslav Rezanina +--- + slirp/tcp_subr.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c +index 80538a9..578b204 100644 +--- a/slirp/tcp_subr.c ++++ b/slirp/tcp_subr.c +@@ -586,6 +586,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + memcpy(so_rcv->sb_wptr, m->m_data, m->m_len); + so_rcv->sb_wptr += m->m_len; + so_rcv->sb_rptr += m->m_len; ++ m_inc(m, m->m_len + 1); + m->m_data[m->m_len] = 0; /* NULL terminate */ + if (strchr(m->m_data, '\r') || strchr(m->m_data, '\n')) { + if (sscanf(so_rcv->sb_data, "%u%*[ ,]%u", &n1, &n2) == 2) { +@@ -619,6 +620,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + } + + case EMU_FTP: /* ftp */ ++ m_inc(m, m->m_len + 1); + *(m->m_data+m->m_len) = 0; /* NUL terminate for strstr */ + if ((bptr = (char *)strstr(m->m_data, "ORT")) != NULL) { + /* +@@ -716,6 +718,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + /* + * Need to emulate DCC CHAT, DCC SEND and DCC MOVE + */ ++ m_inc(m, m->m_len + 1); + *(m->m_data+m->m_len) = 0; /* NULL terminate the string for strstr */ + if ((bptr = (char *)strstr(m->m_data, "DCC")) == NULL) + return 1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-fix-big-little-endian-conversion-in-ident-prot.patch b/SOURCES/kvm-slirp-fix-big-little-endian-conversion-in-ident-prot.patch new file mode 100644 index 0000000..4d7e4ed --- /dev/null +++ b/SOURCES/kvm-slirp-fix-big-little-endian-conversion-in-ident-prot.patch @@ -0,0 +1,54 @@ +From 91ca04a8a1df19f73e50733190175e137eeba933 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Mon, 20 May 2019 16:43:13 +0200 +Subject: [PATCH 2/4] slirp: fix big/little endian conversion in ident protocol +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20190520164315.22140-2-marcandre.lureau@redhat.com> +Patchwork-id: 88093 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 1/3] slirp: fix big/little endian conversion in ident protocol +Bugzilla: 1669068 +RH-Acked-by: Philippe Mathieu-Daudé +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Thomas Huth + +From: Samuel Thibault + +Signed-off-by: Samuel Thibault +Reviewed-by: Philippe Mathieu-Daudé + +[ MA - backported to ease backport of + https://bugzilla.redhat.com/show_bug.cgi?id=1669068 ] + +(cherry picked from 1fd71067dae501f1c78618e9583c6cc72db0cfa6) +Signed-off-by: Marc-André Lureau + +Signed-off-by: Miroslav Rezanina +--- + slirp/tcp_subr.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c +index 0b7138b..80538a9 100644 +--- a/slirp/tcp_subr.c ++++ b/slirp/tcp_subr.c +@@ -601,10 +601,12 @@ tcp_emu(struct socket *so, struct mbuf *m) + tmpso->so_fport == n1) { + if (getsockname(tmpso->s, + (struct sockaddr *)&addr, &addrlen) == 0) +- n2 = ntohs(addr.sin_port); ++ n2 = addr.sin_port; + break; + } + } ++ NTOHS(n1); ++ NTOHS(n2); + so_rcv->sb_cc = snprintf(so_rcv->sb_data, + so_rcv->sb_datalen, + "%d,%d\r\n", n1, n2); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-fix-clearing-ifq_so-from-pending-packets.patch b/SOURCES/kvm-slirp-fix-clearing-ifq_so-from-pending-packets.patch new file mode 100644 index 0000000..f63c8f6 --- /dev/null +++ b/SOURCES/kvm-slirp-fix-clearing-ifq_so-from-pending-packets.patch @@ -0,0 +1,93 @@ +From 082c19eeb7917a141bae4cf98d0ef941956adab6 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Mon, 27 Nov 2017 07:07:57 +0100 +Subject: [PATCH 6/9] slirp: fix clearing ifq_so from pending packets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Xiao Wang +Message-id: <1511766477-29559-5-git-send-email-jasowang@redhat.com> +Patchwork-id: 77901 +O-Subject: [RHEL7.5 qemu-kvm PATCH 4/4] slirp: fix clearing ifq_so from pending packets +Bugzilla: 1508745 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Miroslav Rezanina + +From: Samuel Thibault + +The if_fastq and if_batchq contain not only packets, but queues of packets +for the same socket. When sofree frees a socket, it thus has to clear ifq_so +from all the packets from the queues, not only the first. + +Signed-off-by: Samuel Thibault +Reviewed-by: Philippe Mathieu-Daudé +Cc: qemu-stable@nongnu.org +Signed-off-by: Peter Maydell +(cherry picked from commit 1201d308519f1e915866d7583d5136d03cc1d384) +Signed-off-by: Miroslav Rezanina +--- + slirp/socket.c | 39 +++++++++++++++++++++++---------------- + 1 file changed, 23 insertions(+), 16 deletions(-) + +diff --git a/slirp/socket.c b/slirp/socket.c +index 09b5d3d..7837664 100644 +--- a/slirp/socket.c ++++ b/slirp/socket.c +@@ -57,29 +57,36 @@ socreate(Slirp *slirp) + } + + /* ++ * Remove references to so from the given message queue. ++ */ ++static void ++soqfree(struct socket *so, struct quehead *qh) ++{ ++ struct mbuf *ifq; ++ ++ for (ifq = (struct mbuf *) qh->qh_link; ++ (struct quehead *) ifq != qh; ++ ifq = ifq->ifq_next) { ++ if (ifq->ifq_so == so) { ++ struct mbuf *ifm; ++ ifq->ifq_so = NULL; ++ for (ifm = ifq->ifs_next; ifm != ifq; ifm = ifm->ifs_next) { ++ ifm->ifq_so = NULL; ++ } ++ } ++ } ++} ++ ++/* + * remque and free a socket, clobber cache + */ + void + sofree(struct socket *so) + { + Slirp *slirp = so->slirp; +- struct mbuf *ifm; +- +- for (ifm = (struct mbuf *) slirp->if_fastq.qh_link; +- (struct quehead *) ifm != &slirp->if_fastq; +- ifm = ifm->ifq_next) { +- if (ifm->ifq_so == so) { +- ifm->ifq_so = NULL; +- } +- } + +- for (ifm = (struct mbuf *) slirp->if_batchq.qh_link; +- (struct quehead *) ifm != &slirp->if_batchq; +- ifm = ifm->ifq_next) { +- if (ifm->ifq_so == so) { +- ifm->ifq_so = NULL; +- } +- } ++ soqfree(so, &slirp->if_fastq); ++ soqfree(so, &slirp->if_batchq); + + if (so->so_emu==EMU_RSH && so->extra) { + sofree(so->extra); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-remove-mbuf-m_hdr-m_dat-indirection.patch b/SOURCES/kvm-slirp-remove-mbuf-m_hdr-m_dat-indirection.patch new file mode 100644 index 0000000..39862cf --- /dev/null +++ b/SOURCES/kvm-slirp-remove-mbuf-m_hdr-m_dat-indirection.patch @@ -0,0 +1,159 @@ +From aac430f476746c628665b96d2ef520a4fc88ca67 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Mon, 30 Jul 2018 06:31:56 +0200 +Subject: [PATCH 7/8] slirp: remove mbuf(m_hdr, m_dat) indirection + +RH-Author: Xiao Wang +Message-id: <1532932317-6100-2-git-send-email-jasowang@redhat.com> +Patchwork-id: 81542 +O-Subject: [RHEL7.6/7.5.z qemu-kvm PATCH 1/2] slirp: remove mbuf(m_hdr, m_dat) indirection +Bugzilla: 1586253 +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Michael S. Tsirkin + +From: Michael Tokarev + +(cherry picked from commit 0e44486cdccb4c1f9e5fad390cfd7186850c7204) +Signed-off-by: Miroslav Rezanina +--- + slirp/mbuf.h | 51 ++++++++++++++++++--------------------------------- + slirp/tcp_subr.c | 12 ++++++------ + 2 files changed, 24 insertions(+), 39 deletions(-) + +diff --git a/slirp/mbuf.h b/slirp/mbuf.h +index 3f3ab09..b144f1c 100644 +--- a/slirp/mbuf.h ++++ b/slirp/mbuf.h +@@ -49,22 +49,6 @@ + * free the m_ext. This is inefficient memory-wise, but who cares. + */ + +-/* XXX should union some of these! */ +-/* header at beginning of each mbuf: */ +-struct m_hdr { +- struct mbuf *mh_next; /* Linked list of mbufs */ +- struct mbuf *mh_prev; +- struct mbuf *mh_nextpkt; /* Next packet in queue/record */ +- struct mbuf *mh_prevpkt; /* Flags aren't used in the output queue */ +- int mh_flags; /* Misc flags */ +- +- int mh_size; /* Size of data */ +- struct socket *mh_so; +- +- caddr_t mh_data; /* Location of data */ +- int mh_len; /* Amount of data in this mbuf */ +-}; +- + /* + * How much room is in the mbuf, from m_data to the end of the mbuf + */ +@@ -80,29 +64,30 @@ struct m_hdr { + #define M_TRAILINGSPACE M_FREEROOM + + struct mbuf { +- struct m_hdr m_hdr; ++ /* XXX should union some of these! */ ++ /* header at beginning of each mbuf: */ ++ struct mbuf *m_next; /* Linked list of mbufs */ ++ struct mbuf *m_prev; ++ struct mbuf *m_nextpkt; /* Next packet in queue/record */ ++ struct mbuf *m_prevpkt; /* Flags aren't used in the output queue */ ++ int m_flags; /* Misc flags */ ++ ++ int m_size; /* Size of data */ ++ struct socket *m_so; ++ ++ caddr_t m_data; /* Location of data */ ++ int m_len; /* Amount of data in this mbuf */ ++ + Slirp *slirp; + bool arp_requested; + uint64_t expiration_date; + /* start of dynamic buffer area, must be last element */ +- union M_dat { +- char m_dat_[1]; /* ANSI don't like 0 sized arrays */ +- char *m_ext_; +- } M_dat; ++ union { ++ char m_dat[1]; /* ANSI don't like 0 sized arrays */ ++ char *m_ext; ++ }; + }; + +-#define m_next m_hdr.mh_next +-#define m_prev m_hdr.mh_prev +-#define m_nextpkt m_hdr.mh_nextpkt +-#define m_prevpkt m_hdr.mh_prevpkt +-#define m_flags m_hdr.mh_flags +-#define m_len m_hdr.mh_len +-#define m_data m_hdr.mh_data +-#define m_size m_hdr.mh_size +-#define m_dat M_dat.m_dat_ +-#define m_ext M_dat.m_ext_ +-#define m_so m_hdr.mh_so +- + #define ifq_prev m_prev + #define ifq_next m_next + #define ifs_prev m_prevpkt +diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c +index e98ce1a..043f28f 100644 +--- a/slirp/tcp_subr.c ++++ b/slirp/tcp_subr.c +@@ -647,7 +647,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + n4 = (laddr & 0xff); + + m->m_len = bptr - m->m_data; /* Adjust length */ +- m->m_len += snprintf(bptr, m->m_hdr.mh_size - m->m_len, ++ m->m_len += snprintf(bptr, m->m_size - m->m_len, + "ORT %d,%d,%d,%d,%d,%d\r\n%s", + n1, n2, n3, n4, n5, n6, x==7?buff:""); + return 1; +@@ -680,7 +680,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + n4 = (laddr & 0xff); + + m->m_len = bptr - m->m_data; /* Adjust length */ +- m->m_len += snprintf(bptr, m->m_hdr.mh_size - m->m_len, ++ m->m_len += snprintf(bptr, m->m_size - m->m_len, + "27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%s", + n1, n2, n3, n4, n5, n6, x==7?buff:""); + +@@ -706,7 +706,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + if (m->m_data[m->m_len-1] == '\0' && lport != 0 && + (so = tcp_listen(slirp, INADDR_ANY, 0, so->so_laddr.s_addr, + htons(lport), SS_FACCEPTONCE)) != NULL) +- m->m_len = snprintf(m->m_data, m->m_hdr.mh_size, "%d", ++ m->m_len = snprintf(m->m_data, m->m_size, "%d", + ntohs(so->so_fport)) + 1; + return 1; + +@@ -726,7 +726,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + return 1; + } + m->m_len = bptr - m->m_data; /* Adjust length */ +- m->m_len += snprintf(bptr, m->m_hdr.mh_size, ++ m->m_len += snprintf(bptr, m->m_size, + "DCC CHAT chat %lu %u%c\n", + (unsigned long)ntohl(so->so_faddr.s_addr), + ntohs(so->so_fport), 1); +@@ -737,7 +737,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + return 1; + } + m->m_len = bptr - m->m_data; /* Adjust length */ +- m->m_len += snprintf(bptr, m->m_hdr.mh_size, ++ m->m_len += snprintf(bptr, m->m_size, + "DCC SEND %s %lu %u %u%c\n", buff, + (unsigned long)ntohl(so->so_faddr.s_addr), + ntohs(so->so_fport), n1, 1); +@@ -748,7 +748,7 @@ tcp_emu(struct socket *so, struct mbuf *m) + return 1; + } + m->m_len = bptr - m->m_data; /* Adjust length */ +- m->m_len += snprintf(bptr, m->m_hdr.mh_size, ++ m->m_len += snprintf(bptr, m->m_size, + "DCC MOVE %s %lu %u %u%c\n", buff, + (unsigned long)ntohl(so->so_faddr.s_addr), + ntohs(so->so_fport), n1, 1); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-slirp-udp-fix-NULL-pointer-dereference-because-of-un.patch b/SOURCES/kvm-slirp-udp-fix-NULL-pointer-dereference-because-of-un.patch new file mode 100644 index 0000000..fd0eb37 --- /dev/null +++ b/SOURCES/kvm-slirp-udp-fix-NULL-pointer-dereference-because-of-un.patch @@ -0,0 +1,55 @@ +From 00e16a0908803bf1e796864511862067a763e95e Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 23 Oct 2014 09:19:24 +0200 +Subject: [PATCH 1/9] slirp: udp: fix NULL pointer dereference because of + uninitialized socket + +Message-id: <1414055964-27479-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 61832 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] slirp: udp: fix NULL pointer dereference because of uninitialized socket +Bugzilla: 1144820 +RH-Acked-by: Petr Matousek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Amos Kong + +From: Petr Matousek + +When guest sends udp packet with source port and source addr 0, +uninitialized socket is picked up when looking for matching and already +created udp sockets, and later passed to sosendto() where NULL pointer +dereference is hit during so->slirp->vnetwork_mask.s_addr access. + +Fix this by checking that the socket is not just a socket stub. + +This is CVE-2014-3640. + +Signed-off-by: Petr Matousek +Reported-by: Xavier Mehrenberger +Reported-by: Stephane Duverger +Reviewed-by: Jan Kiszka +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Michael Tokarev +Message-id: 20140918063537.GX9321@dhcp-25-225.brq.redhat.com +Signed-off-by: Peter Maydell +(cherry picked from commit 01f7cecf0037997cb0e58ec0d56bf9b5a6f7cb2a) +Signed-off-by: Miroslav Rezanina +--- + slirp/udp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/slirp/udp.c b/slirp/udp.c +index b105f87..2188176 100644 +--- a/slirp/udp.c ++++ b/slirp/udp.c +@@ -152,7 +152,7 @@ udp_input(register struct mbuf *m, int iphlen) + * Locate pcb for datagram. + */ + so = slirp->udp_last_so; +- if (so->so_lport != uh->uh_sport || ++ if (so == &slirp->udb || so->so_lport != uh->uh_sport || + so->so_laddr.s_addr != ip->ip_src.s_addr) { + struct socket *tmp; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-smbios-Convert-to-QemuOpts.patch b/SOURCES/kvm-smbios-Convert-to-QemuOpts.patch new file mode 100644 index 0000000..8b045e5 --- /dev/null +++ b/SOURCES/kvm-smbios-Convert-to-QemuOpts.patch @@ -0,0 +1,408 @@ +From 6a4b96232747a7e7319115a532f17913da6a7774 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:21 +0100 +Subject: [PATCH 21/29] smbios: Convert to QemuOpts + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-5-git-send-email-armbru@redhat.com> +Patchwork-id: 55240 +O-Subject: [PATCH 7.0 qemu-kvm 04/11] smbios: Convert to QemuOpts +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +So that it can be set in config file for -readconfig. + +This tightens parsing of -smbios, and makes it more consistent with +other options: unknown parameters are rejected, numbers with trailing +junk are rejected, when a parameter is given multiple times, last +rather than first wins, ... + +MST: drop one chunk to fix build errors + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 4f953d2fc806f1ba6fa76f01dfd121fe7d0dc4a7) +--- + arch_init.c | 4 +- + hw/i386/smbios.c | 209 ++++++++++++++++++++++++++++++++++++--------- + include/hw/i386/smbios.h | 4 +- + include/sysemu/arch_init.h | 2 +- + vl.c | 3 +- + 5 files changed, 179 insertions(+), 43 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 4 +- + hw/i386/smbios.c | 209 ++++++++++++++++++++++++++++++++++++-------- + include/hw/i386/smbios.h | 4 +- + include/sysemu/arch_init.h | 2 +- + vl.c | 3 +- + 5 files changed, 179 insertions(+), 43 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index 7834d36..d8c4e2e 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -1077,10 +1077,10 @@ void do_acpitable_option(const QemuOpts *opts) + #endif + } + +-void do_smbios_option(const char *optarg) ++void do_smbios_option(QemuOpts *opts) + { + #ifdef TARGET_I386 +- smbios_entry_add(optarg); ++ smbios_entry_add(opts); + #endif + } + +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index 0608aee..abfd6f7 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -2,9 +2,11 @@ + * SMBIOS Support + * + * Copyright (C) 2009 Hewlett-Packard Development Company, L.P. ++ * Copyright (C) 2013 Red Hat, Inc. + * + * Authors: + * Alex Williamson ++ * Markus Armbruster + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. +@@ -13,6 +15,7 @@ + * GNU GPL, version 2 or (at your option) any later version. + */ + ++#include "qemu/config-file.h" + #include "qemu/error-report.h" + #include "sysemu/sysemu.h" + #include "hw/i386/smbios.h" +@@ -41,11 +44,100 @@ struct smbios_table { + #define SMBIOS_FIELD_ENTRY 0 + #define SMBIOS_TABLE_ENTRY 1 + +- + static uint8_t *smbios_entries; + static size_t smbios_entries_len; + static int smbios_type4_count = 0; + ++static QemuOptsList qemu_smbios_opts = { ++ .name = "smbios", ++ .head = QTAILQ_HEAD_INITIALIZER(qemu_smbios_opts.head), ++ .desc = { ++ /* ++ * no elements => accept any params ++ * validation will happen later ++ */ ++ { /* end of list */ } ++ } ++}; ++ ++static const QemuOptDesc qemu_smbios_file_opts[] = { ++ { ++ .name = "file", ++ .type = QEMU_OPT_STRING, ++ .help = "binary file containing an SMBIOS element", ++ }, ++ { /* end of list */ } ++}; ++ ++static const QemuOptDesc qemu_smbios_type0_opts[] = { ++ { ++ .name = "type", ++ .type = QEMU_OPT_NUMBER, ++ .help = "SMBIOS element type", ++ },{ ++ .name = "vendor", ++ .type = QEMU_OPT_STRING, ++ .help = "vendor name", ++ },{ ++ .name = "version", ++ .type = QEMU_OPT_STRING, ++ .help = "version number", ++ },{ ++ .name = "date", ++ .type = QEMU_OPT_STRING, ++ .help = "release date", ++ },{ ++ .name = "release", ++ .type = QEMU_OPT_STRING, ++ .help = "revision number", ++ }, ++ { /* end of list */ } ++}; ++ ++static const QemuOptDesc qemu_smbios_type1_opts[] = { ++ { ++ .name = "type", ++ .type = QEMU_OPT_NUMBER, ++ .help = "SMBIOS element type", ++ },{ ++ .name = "manufacturer", ++ .type = QEMU_OPT_STRING, ++ .help = "manufacturer name", ++ },{ ++ .name = "product", ++ .type = QEMU_OPT_STRING, ++ .help = "product name", ++ },{ ++ .name = "version", ++ .type = QEMU_OPT_STRING, ++ .help = "version number", ++ },{ ++ .name = "serial", ++ .type = QEMU_OPT_STRING, ++ .help = "serial number", ++ },{ ++ .name = "uuid", ++ .type = QEMU_OPT_STRING, ++ .help = "UUID", ++ },{ ++ .name = "sku", ++ .type = QEMU_OPT_STRING, ++ .help = "SKU number", ++ },{ ++ .name = "family", ++ .type = QEMU_OPT_STRING, ++ .help = "family name", ++ }, ++ { /* end of list */ } ++}; ++ ++static void smbios_register_config(void) ++{ ++ qemu_add_opts(&qemu_smbios_opts); ++} ++ ++machine_init(smbios_register_config); ++ + static void smbios_validate_table(void) + { + if (smbios_type4_count && smbios_type4_count != smp_cpus) { +@@ -124,23 +216,30 @@ void smbios_add_field(int type, int offset, const void *data, size_t len) + cpu_to_le16(le16_to_cpu(*(uint16_t *)smbios_entries) + 1); + } + +-static void smbios_build_type_0_fields(const char *t) ++static void smbios_build_type_0_fields(QemuOpts *opts) + { +- char buf[1024]; ++ const char *val; + unsigned char major, minor; + +- if (get_param_value(buf, sizeof(buf), "vendor", t)) ++ val = qemu_opt_get(opts, "vendor"); ++ if (val) { + smbios_add_field(0, offsetof(struct smbios_type_0, vendor_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "version", t)) ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "version"); ++ if (val) { + smbios_add_field(0, offsetof(struct smbios_type_0, bios_version_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "date", t)) ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "date"); ++ if (val) { + smbios_add_field(0, offsetof(struct smbios_type_0, + bios_release_date_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "release", t)) { +- if (sscanf(buf, "%hhu.%hhu", &major, &minor) != 2) { ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "release"); ++ if (val) { ++ if (sscanf(val, "%hhu.%hhu", &major, &minor) != 2) { + error_report("Invalid release"); + exit(1); + } +@@ -153,47 +252,69 @@ static void smbios_build_type_0_fields(const char *t) + } + } + +-static void smbios_build_type_1_fields(const char *t) ++static void smbios_build_type_1_fields(QemuOpts *opts) + { +- char buf[1024]; ++ const char *val; + +- if (get_param_value(buf, sizeof(buf), "manufacturer", t)) ++ val = qemu_opt_get(opts, "manufacturer"); ++ if (val) { + smbios_add_field(1, offsetof(struct smbios_type_1, manufacturer_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "product", t)) ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "product"); ++ if (val) { + smbios_add_field(1, offsetof(struct smbios_type_1, product_name_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "version", t)) ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "version"); ++ if (val) { + smbios_add_field(1, offsetof(struct smbios_type_1, version_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "serial", t)) ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "serial"); ++ if (val) { + smbios_add_field(1, offsetof(struct smbios_type_1, serial_number_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "uuid", t)) { +- if (qemu_uuid_parse(buf, qemu_uuid) != 0) { ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "uuid"); ++ if (val) { ++ if (qemu_uuid_parse(val, qemu_uuid) != 0) { + error_report("Invalid UUID"); + exit(1); + } + } +- if (get_param_value(buf, sizeof(buf), "sku", t)) ++ val = qemu_opt_get(opts, "sku"); ++ if (val) { + smbios_add_field(1, offsetof(struct smbios_type_1, sku_number_str), +- buf, strlen(buf) + 1); +- if (get_param_value(buf, sizeof(buf), "family", t)) ++ val, strlen(val) + 1); ++ } ++ val = qemu_opt_get(opts, "family"); ++ if (val) { + smbios_add_field(1, offsetof(struct smbios_type_1, family_str), +- buf, strlen(buf) + 1); ++ val, strlen(val) + 1); ++ } + } + +-void smbios_entry_add(const char *t) ++void smbios_entry_add(QemuOpts *opts) + { +- char buf[1024]; ++ Error *local_err = NULL; ++ const char *val; + +- if (get_param_value(buf, sizeof(buf), "file", t)) { ++ val = qemu_opt_get(opts, "file"); ++ if (val) { + struct smbios_structure_header *header; + struct smbios_table *table; +- int size = get_image_size(buf); ++ int size; ++ ++ qemu_opts_validate(opts, qemu_smbios_file_opts, &local_err); ++ if (local_err) { ++ error_report("%s", error_get_pretty(local_err)); ++ exit(1); ++ } + ++ size = get_image_size(val); + if (size == -1 || size < sizeof(struct smbios_structure_header)) { +- error_report("Cannot read SMBIOS file %s", buf); ++ error_report("Cannot read SMBIOS file %s", val); + exit(1); + } + +@@ -208,8 +329,8 @@ void smbios_entry_add(const char *t) + table->header.type = SMBIOS_TABLE_ENTRY; + table->header.length = cpu_to_le16(sizeof(*table) + size); + +- if (load_image(buf, table->data) != size) { +- error_report("Failed to load SMBIOS file %s", buf); ++ if (load_image(val, table->data) != size) { ++ error_report("Failed to load SMBIOS file %s", val); + exit(1); + } + +@@ -225,14 +346,26 @@ void smbios_entry_add(const char *t) + return; + } + +- if (get_param_value(buf, sizeof(buf), "type", t)) { +- unsigned long type = strtoul(buf, NULL, 0); ++ val = qemu_opt_get(opts, "type"); ++ if (val) { ++ unsigned long type = strtoul(val, NULL, 0); ++ + switch (type) { + case 0: +- smbios_build_type_0_fields(t); ++ qemu_opts_validate(opts, qemu_smbios_type0_opts, &local_err); ++ if (local_err) { ++ error_report("%s", error_get_pretty(local_err)); ++ exit(1); ++ } ++ smbios_build_type_0_fields(opts); + return; + case 1: +- smbios_build_type_1_fields(t); ++ qemu_opts_validate(opts, qemu_smbios_type1_opts, &local_err); ++ if (local_err) { ++ error_report("%s", error_get_pretty(local_err)); ++ exit(1); ++ } ++ smbios_build_type_1_fields(opts); + return; + default: + error_report("Don't know how to build fields for SMBIOS type %ld", +diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h +index 56c6108..d9f43b7 100644 +--- a/include/hw/i386/smbios.h ++++ b/include/hw/i386/smbios.h +@@ -13,7 +13,9 @@ + * + */ + +-void smbios_entry_add(const char *t); ++#include "qemu/option.h" ++ ++void smbios_entry_add(QemuOpts *opts); + void smbios_add_field(int type, int offset, const void *data, size_t len); + uint8_t *smbios_get_table(size_t *length); + +diff --git a/include/sysemu/arch_init.h b/include/sysemu/arch_init.h +index dece913..be71bca 100644 +--- a/include/sysemu/arch_init.h ++++ b/include/sysemu/arch_init.h +@@ -28,7 +28,7 @@ extern const uint32_t arch_type; + + void select_soundhw(const char *optarg); + void do_acpitable_option(const QemuOpts *opts); +-void do_smbios_option(const char *optarg); ++void do_smbios_option(QemuOpts *opts); + void cpudef_init(void); + void audio_init(void); + int tcg_available(void); +diff --git a/vl.c b/vl.c +index b8a8cc6..e82eb1c 100644 +--- a/vl.c ++++ b/vl.c +@@ -3463,7 +3463,8 @@ int main(int argc, char **argv, char **envp) + do_acpitable_option(opts); + break; + case QEMU_OPTION_smbios: +- do_smbios_option(optarg); ++ opts = qemu_opts_parse(qemu_find_opts("smbios"), optarg, 0); ++ do_smbios_option(opts); + break; + case QEMU_OPTION_enable_kvm: + olist = qemu_find_opts("machine"); +-- +1.7.1 + diff --git a/SOURCES/kvm-smbios-Decouple-system-product-from-QEMUMachine.patch b/SOURCES/kvm-smbios-Decouple-system-product-from-QEMUMachine.patch new file mode 100644 index 0000000..c61065c --- /dev/null +++ b/SOURCES/kvm-smbios-Decouple-system-product-from-QEMUMachine.patch @@ -0,0 +1,67 @@ +From fb2c8a946384ac07ad74ec3df7ee5906ffbf0b72 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:27 +0100 +Subject: [PATCH 27/29] smbios: Decouple system product from QEMUMachine + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-11-git-send-email-armbru@redhat.com> +Patchwork-id: 55247 +O-Subject: [PATCH 7.0 qemu-kvm 10/11] smbios: Decouple system product from QEMUMachine +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Michael Tsirkin doesn't trust us to keep values of QEMUMachine member +product stable in the future. Use copies instead, and in a way that +makes it obvious that they're guest ABI. + +Note that we can be trusted to keep values of member name, because +that has always been ABI. + +Signed-off-by: Markus Armbruster +(cherry picked from pending upstream submission) +--- + hw/i386/pc_piix.c | 3 ++- + hw/i386/pc_q35.c | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 3 ++- + hw/i386/pc_q35.c | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index e8fe607..396f4e4 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -116,7 +116,8 @@ static void pc_init1(QEMUMachineInitArgs *args, + } + + if (smbios_type1_defaults) { +- smbios_set_type1_defaults("QEMU", args->machine->desc, ++ /* These values are guest ABI, do not change */ ++ smbios_set_type1_defaults("QEMU", "Standard PC (i440FX + PIIX, 1996)", + args->machine->name); + } + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 3ef854a..473f01b 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -102,7 +102,8 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + } + + if (smbios_type1_defaults) { +- smbios_set_type1_defaults("QEMU", args->machine->desc, ++ /* These values are guest ABI, do not change */ ++ smbios_set_type1_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)", + args->machine->name); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-smbios-Factor-out-smbios_maybe_add_str.patch b/SOURCES/kvm-smbios-Factor-out-smbios_maybe_add_str.patch new file mode 100644 index 0000000..5e34d88 --- /dev/null +++ b/SOURCES/kvm-smbios-Factor-out-smbios_maybe_add_str.patch @@ -0,0 +1,114 @@ +From 8a7a5d92f6d6e0980e9f4119cdab88fd6e7b83e3 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 6 Nov 2013 09:11:26 +0100 +Subject: [PATCH 24/29] smbios: Factor out smbios_maybe_add_str() + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-8-git-send-email-armbru@redhat.com> +Patchwork-id: 55248 +O-Subject: [PATCH 7.0 qemu-kvm 07/11] smbios: Factor out smbios_maybe_add_str() +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit e26d3e734650640fabd7d95ace4f3a6f88725e0b) +--- + hw/i386/smbios.c | 61 +++++++++++++++++++++++--------------------------------- + 1 file changed, 25 insertions(+), 36 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/smbios.c | 61 ++++++++++++++++++++++------------------------------- + 1 files changed, 25 insertions(+), 36 deletions(-) + +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index d2dba6c..d3f1ee6 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -210,21 +210,22 @@ static void smbios_add_field(int type, int offset, const void *data, size_t len) + cpu_to_le16(le16_to_cpu(*(uint16_t *)smbios_entries) + 1); + } + +-static void smbios_build_type_0_fields(void) ++static void smbios_maybe_add_str(int type, int offset, const char *data) + { +- if (type0.vendor) { +- smbios_add_field(0, offsetof(struct smbios_type_0, vendor_str), +- type0.vendor, strlen(type0.vendor) + 1); +- } +- if (type0.version) { +- smbios_add_field(0, offsetof(struct smbios_type_0, bios_version_str), +- type0.version, strlen(type0.version) + 1); ++ if (data) { ++ smbios_add_field(type, offset, data, strlen(data) + 1); + } +- if (type0.date) { +- smbios_add_field(0, offsetof(struct smbios_type_0, ++} ++ ++static void smbios_build_type_0_fields(void) ++{ ++ smbios_maybe_add_str(0, offsetof(struct smbios_type_0, vendor_str), ++ type0.vendor); ++ smbios_maybe_add_str(0, offsetof(struct smbios_type_0, bios_version_str), ++ type0.version); ++ smbios_maybe_add_str(0, offsetof(struct smbios_type_0, + bios_release_date_str), +- type0.date, strlen(type0.date) + 1); +- } ++ type0.date); + if (type0.have_major_minor) { + smbios_add_field(0, offsetof(struct smbios_type_0, + system_bios_major_release), +@@ -237,30 +238,18 @@ static void smbios_build_type_0_fields(void) + + static void smbios_build_type_1_fields(void) + { +- if (type1.manufacturer) { +- smbios_add_field(1, offsetof(struct smbios_type_1, manufacturer_str), +- type1.manufacturer, strlen(type1.manufacturer) + 1); +- } +- if (type1.product) { +- smbios_add_field(1, offsetof(struct smbios_type_1, product_name_str), +- type1.product, strlen(type1.product) + 1); +- } +- if (type1.version) { +- smbios_add_field(1, offsetof(struct smbios_type_1, version_str), +- type1.version, strlen(type1.version) + 1); +- } +- if (type1.serial) { +- smbios_add_field(1, offsetof(struct smbios_type_1, serial_number_str), +- type1.serial, strlen(type1.serial) + 1); +- } +- if (type1.sku) { +- smbios_add_field(1, offsetof(struct smbios_type_1, sku_number_str), +- type1.sku, strlen(type1.sku) + 1); +- } +- if (type1.family) { +- smbios_add_field(1, offsetof(struct smbios_type_1, family_str), +- type1.family, strlen(type1.family) + 1); +- } ++ smbios_maybe_add_str(1, offsetof(struct smbios_type_1, manufacturer_str), ++ type1.manufacturer); ++ smbios_maybe_add_str(1, offsetof(struct smbios_type_1, product_name_str), ++ type1.product); ++ smbios_maybe_add_str(1, offsetof(struct smbios_type_1, version_str), ++ type1.version); ++ smbios_maybe_add_str(1, offsetof(struct smbios_type_1, serial_number_str), ++ type1.serial); ++ smbios_maybe_add_str(1, offsetof(struct smbios_type_1, sku_number_str), ++ type1.sku); ++ smbios_maybe_add_str(1, offsetof(struct smbios_type_1, family_str), ++ type1.family); + if (qemu_uuid_set) { + smbios_add_field(1, offsetof(struct smbios_type_1, uuid), + qemu_uuid, 16); +-- +1.7.1 + diff --git a/SOURCES/kvm-smbios-Improve-diagnostics-for-conflicting-entries.patch b/SOURCES/kvm-smbios-Improve-diagnostics-for-conflicting-entries.patch new file mode 100644 index 0000000..0518612 --- /dev/null +++ b/SOURCES/kvm-smbios-Improve-diagnostics-for-conflicting-entries.patch @@ -0,0 +1,113 @@ +From 3a4932455a7f7926b673089170f55de437eec5fa Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:22 +0100 +Subject: [PATCH 22/29] smbios: Improve diagnostics for conflicting entries + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-6-git-send-email-armbru@redhat.com> +Patchwork-id: 55243 +O-Subject: [PATCH 7.0 qemu-kvm 05/11] smbios: Improve diagnostics for conflicting entries +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +We allow either tables or fields for the same type. Makes sense, +because SeaBIOS uses fields only when no tables are present. + +We do this by searching the SMBIOS blob for a previously added table +or field. Error messages look like this: + + qemu-system-x86_64: -smbios type=1,serial=42: SMBIOS type 1 table already defined, cannot add field + +User needs to know that "table" is defined by -smbios file=..., and +"field" by -smbios type=... + +Instead of searching the blob, record additions of interest, and check +that. Simpler, and makes better error messages possible: + + qemu-system-x86_64: -smbios file=smbios_type_1.bin: Can't mix file= and type= for same type + qemu-system-x86_64: -smbios type=1,serial=42,serial=99: This is the conflicting setting + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit ec2df8c10a4585ba4641ae482cf2f5f13daa810e) +--- + hw/i386/smbios.c | 43 +++++++++++++++++-------------------------- + 1 file changed, 17 insertions(+), 26 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/smbios.c | 43 +++++++++++++++++-------------------------- + 1 files changed, 17 insertions(+), 26 deletions(-) + +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index abfd6f7..4263551 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -48,6 +48,12 @@ static uint8_t *smbios_entries; + static size_t smbios_entries_len; + static int smbios_type4_count = 0; + ++static struct { ++ bool seen; ++ int headertype; ++ Location loc; ++} first_opt[2]; ++ + static QemuOptsList qemu_smbios_opts = { + .name = "smbios", + .head = QTAILQ_HEAD_INITIALIZER(qemu_smbios_opts.head), +@@ -159,35 +165,20 @@ uint8_t *smbios_get_table(size_t *length) + */ + static void smbios_check_collision(int type, int entry) + { +- uint16_t *num_entries = (uint16_t *)smbios_entries; +- struct smbios_header *header; +- char *p; +- int i; +- +- if (!num_entries) +- return; +- +- p = (char *)(num_entries + 1); +- +- for (i = 0; i < *num_entries; i++) { +- header = (struct smbios_header *)p; +- if (entry == SMBIOS_TABLE_ENTRY && header->type == SMBIOS_FIELD_ENTRY) { +- struct smbios_field *field = (void *)header; +- if (type == field->type) { +- error_report("SMBIOS type %d field already defined, " +- "cannot add table", type); +- exit(1); +- } +- } else if (entry == SMBIOS_FIELD_ENTRY && +- header->type == SMBIOS_TABLE_ENTRY) { +- struct smbios_structure_header *table = (void *)(header + 1); +- if (type == table->type) { +- error_report("SMBIOS type %d table already defined, " +- "cannot add field", type); ++ if (type < ARRAY_SIZE(first_opt)) { ++ if (first_opt[type].seen) { ++ if (first_opt[type].headertype != entry) { ++ error_report("Can't mix file= and type= for same type"); ++ loc_push_restore(&first_opt[type].loc); ++ error_report("This is the conflicting setting"); ++ loc_pop(&first_opt[type].loc); + exit(1); + } ++ } else { ++ first_opt[type].seen = true; ++ first_opt[type].headertype = entry; ++ loc_save(&first_opt[type].loc); + } +- p += le16_to_cpu(header->length); + } + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-smbios-Make-multiple-smbios-type-accumulate-sanely.patch b/SOURCES/kvm-smbios-Make-multiple-smbios-type-accumulate-sanely.patch new file mode 100644 index 0000000..a990243 --- /dev/null +++ b/SOURCES/kvm-smbios-Make-multiple-smbios-type-accumulate-sanely.patch @@ -0,0 +1,361 @@ +From f602774bca68ddc853f88cf90c62e1af94390731 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Wed, 6 Nov 2013 09:09:09 +0100 +Subject: [PATCH 23/29] smbios: Make multiple -smbios type= accumulate sanely + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-7-git-send-email-armbru@redhat.com> +Patchwork-id: 55244 +O-Subject: [PATCH 7.0 qemu-kvm 06/11] smbios: Make multiple -smbios type= accumulate sanely +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Currently, -smbios type=T,NAME=VAL,... adds one field (T,NAME) with +value VAL to fw_cfg for each unique NAME. If NAME occurs multiple +times, the last one's VAL is used (before the QemuOpts conversion, the +first one was used). + +Multiple -smbios can add multiple fields with the same (T, NAME). +SeaBIOS reads all of them from fw_cfg, but uses only the first field +(T, NAME). The others are ignored. + +"First one wins, subsequent ones get ignored silently" isn't nice. We +commonly let the last option win. Useful, because it lets you +-readconfig first, then selectively override with command line +options. + +Clean up -smbios to work the common way. Accumulate the settings, +with later ones overwriting earlier ones. Put the result into fw_cfg +(no more useless duplicates). + +Bonus cleanup: qemu_uuid_parse() no longer sets SMBIOS system uuid by +side effect. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit fc3b32958a80bca13309e2695de07b43dd788421) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 3 - + hw/i386/smbios.c | 152 +++++++++++++++++++++++++++------------------ + include/hw/i386/smbios.h | 1 - + include/sysemu/sysemu.h | 1 + + vl.c | 2 + + 5 files changed, 94 insertions(+), 65 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index d8c4e2e..5301cfd 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -1056,9 +1056,6 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid) + if (ret != 16) { + return -1; + } +-#ifdef TARGET_I386 +- smbios_add_field(1, offsetof(struct smbios_type_1, uuid), uuid, 16); +-#endif + return 0; + } + +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index 4263551..d2dba6c 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -47,6 +47,7 @@ struct smbios_table { + static uint8_t *smbios_entries; + static size_t smbios_entries_len; + static int smbios_type4_count = 0; ++static bool smbios_immutable; + + static struct { + bool seen; +@@ -54,6 +55,17 @@ static struct { + Location loc; + } first_opt[2]; + ++static struct { ++ const char *vendor, *version, *date; ++ bool have_major_minor; ++ uint8_t major, minor; ++} type0; ++ ++static struct { ++ const char *manufacturer, *product, *version, *serial, *sku, *family; ++ /* uuid is in qemu_uuid[] */ ++} type1; ++ + static QemuOptsList qemu_smbios_opts = { + .name = "smbios", + .head = QTAILQ_HEAD_INITIALIZER(qemu_smbios_opts.head), +@@ -152,13 +164,6 @@ static void smbios_validate_table(void) + } + } + +-uint8_t *smbios_get_table(size_t *length) +-{ +- smbios_validate_table(); +- *length = smbios_entries_len; +- return smbios_entries; +-} +- + /* + * To avoid unresolvable overlaps in data, don't allow both + * tables and fields for the same smbios type. +@@ -182,12 +187,10 @@ static void smbios_check_collision(int type, int entry) + } + } + +-void smbios_add_field(int type, int offset, const void *data, size_t len) ++static void smbios_add_field(int type, int offset, const void *data, size_t len) + { + struct smbios_field *field; + +- smbios_check_collision(type, SMBIOS_FIELD_ENTRY); +- + if (!smbios_entries) { + smbios_entries_len = sizeof(uint16_t); + smbios_entries = g_malloc0(smbios_entries_len); +@@ -207,82 +210,81 @@ void smbios_add_field(int type, int offset, const void *data, size_t len) + cpu_to_le16(le16_to_cpu(*(uint16_t *)smbios_entries) + 1); + } + +-static void smbios_build_type_0_fields(QemuOpts *opts) ++static void smbios_build_type_0_fields(void) + { +- const char *val; +- unsigned char major, minor; +- +- val = qemu_opt_get(opts, "vendor"); +- if (val) { ++ if (type0.vendor) { + smbios_add_field(0, offsetof(struct smbios_type_0, vendor_str), +- val, strlen(val) + 1); ++ type0.vendor, strlen(type0.vendor) + 1); + } +- val = qemu_opt_get(opts, "version"); +- if (val) { ++ if (type0.version) { + smbios_add_field(0, offsetof(struct smbios_type_0, bios_version_str), +- val, strlen(val) + 1); ++ type0.version, strlen(type0.version) + 1); + } +- val = qemu_opt_get(opts, "date"); +- if (val) { ++ if (type0.date) { + smbios_add_field(0, offsetof(struct smbios_type_0, + bios_release_date_str), +- val, strlen(val) + 1); ++ type0.date, strlen(type0.date) + 1); + } +- val = qemu_opt_get(opts, "release"); +- if (val) { +- if (sscanf(val, "%hhu.%hhu", &major, &minor) != 2) { +- error_report("Invalid release"); +- exit(1); +- } ++ if (type0.have_major_minor) { + smbios_add_field(0, offsetof(struct smbios_type_0, + system_bios_major_release), +- &major, 1); ++ &type0.major, 1); + smbios_add_field(0, offsetof(struct smbios_type_0, + system_bios_minor_release), +- &minor, 1); ++ &type0.minor, 1); + } + } + +-static void smbios_build_type_1_fields(QemuOpts *opts) ++static void smbios_build_type_1_fields(void) + { +- const char *val; +- +- val = qemu_opt_get(opts, "manufacturer"); +- if (val) { ++ if (type1.manufacturer) { + smbios_add_field(1, offsetof(struct smbios_type_1, manufacturer_str), +- val, strlen(val) + 1); ++ type1.manufacturer, strlen(type1.manufacturer) + 1); + } +- val = qemu_opt_get(opts, "product"); +- if (val) { ++ if (type1.product) { + smbios_add_field(1, offsetof(struct smbios_type_1, product_name_str), +- val, strlen(val) + 1); ++ type1.product, strlen(type1.product) + 1); + } +- val = qemu_opt_get(opts, "version"); +- if (val) { ++ if (type1.version) { + smbios_add_field(1, offsetof(struct smbios_type_1, version_str), +- val, strlen(val) + 1); ++ type1.version, strlen(type1.version) + 1); + } +- val = qemu_opt_get(opts, "serial"); +- if (val) { ++ if (type1.serial) { + smbios_add_field(1, offsetof(struct smbios_type_1, serial_number_str), +- val, strlen(val) + 1); +- } +- val = qemu_opt_get(opts, "uuid"); +- if (val) { +- if (qemu_uuid_parse(val, qemu_uuid) != 0) { +- error_report("Invalid UUID"); +- exit(1); +- } ++ type1.serial, strlen(type1.serial) + 1); + } +- val = qemu_opt_get(opts, "sku"); +- if (val) { ++ if (type1.sku) { + smbios_add_field(1, offsetof(struct smbios_type_1, sku_number_str), +- val, strlen(val) + 1); ++ type1.sku, strlen(type1.sku) + 1); + } +- val = qemu_opt_get(opts, "family"); +- if (val) { ++ if (type1.family) { + smbios_add_field(1, offsetof(struct smbios_type_1, family_str), +- val, strlen(val) + 1); ++ type1.family, strlen(type1.family) + 1); ++ } ++ if (qemu_uuid_set) { ++ smbios_add_field(1, offsetof(struct smbios_type_1, uuid), ++ qemu_uuid, 16); ++ } ++} ++ ++uint8_t *smbios_get_table(size_t *length) ++{ ++ if (!smbios_immutable) { ++ smbios_build_type_0_fields(); ++ smbios_build_type_1_fields(); ++ smbios_validate_table(); ++ smbios_immutable = true; ++ } ++ *length = smbios_entries_len; ++ return smbios_entries; ++} ++ ++static void save_opt(const char **dest, QemuOpts *opts, const char *name) ++{ ++ const char *val = qemu_opt_get(opts, name); ++ ++ if (val) { ++ *dest = val; + } + } + +@@ -291,6 +293,7 @@ void smbios_entry_add(QemuOpts *opts) + Error *local_err = NULL; + const char *val; + ++ assert(!smbios_immutable); + val = qemu_opt_get(opts, "file"); + if (val) { + struct smbios_structure_header *header; +@@ -341,6 +344,8 @@ void smbios_entry_add(QemuOpts *opts) + if (val) { + unsigned long type = strtoul(val, NULL, 0); + ++ smbios_check_collision(type, SMBIOS_FIELD_ENTRY); ++ + switch (type) { + case 0: + qemu_opts_validate(opts, qemu_smbios_type0_opts, &local_err); +@@ -348,7 +353,18 @@ void smbios_entry_add(QemuOpts *opts) + error_report("%s", error_get_pretty(local_err)); + exit(1); + } +- smbios_build_type_0_fields(opts); ++ save_opt(&type0.vendor, opts, "vendor"); ++ save_opt(&type0.version, opts, "version"); ++ save_opt(&type0.date, opts, "date"); ++ ++ val = qemu_opt_get(opts, "release"); ++ if (val) { ++ if (sscanf(val, "%hhu.%hhu", &type0.major, &type0.minor) != 2) { ++ error_report("Invalid release"); ++ exit(1); ++ } ++ type0.have_major_minor = true; ++ } + return; + case 1: + qemu_opts_validate(opts, qemu_smbios_type1_opts, &local_err); +@@ -356,7 +372,21 @@ void smbios_entry_add(QemuOpts *opts) + error_report("%s", error_get_pretty(local_err)); + exit(1); + } +- smbios_build_type_1_fields(opts); ++ save_opt(&type1.manufacturer, opts, "manufacturer"); ++ save_opt(&type1.product, opts, "product"); ++ save_opt(&type1.version, opts, "version"); ++ save_opt(&type1.serial, opts, "serial"); ++ save_opt(&type1.sku, opts, "sku"); ++ save_opt(&type1.family, opts, "family"); ++ ++ val = qemu_opt_get(opts, "uuid"); ++ if (val) { ++ if (qemu_uuid_parse(val, qemu_uuid) != 0) { ++ error_report("Invalid UUID"); ++ exit(1); ++ } ++ qemu_uuid_set = true; ++ } + return; + default: + error_report("Don't know how to build fields for SMBIOS type %ld", +diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h +index d9f43b7..b08ec71 100644 +--- a/include/hw/i386/smbios.h ++++ b/include/hw/i386/smbios.h +@@ -16,7 +16,6 @@ + #include "qemu/option.h" + + void smbios_entry_add(QemuOpts *opts); +-void smbios_add_field(int type, int offset, const void *data, size_t len); + uint8_t *smbios_get_table(size_t *length); + + /* +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index 76c5b64..8fbc818 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -16,6 +16,7 @@ extern const char *bios_name; + + extern const char *qemu_name; + extern uint8_t qemu_uuid[]; ++extern bool qemu_uuid_set; + int qemu_uuid_parse(const char *str, uint8_t *uuid); + + #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" +diff --git a/vl.c b/vl.c +index e82eb1c..19cc3b2 100644 +--- a/vl.c ++++ b/vl.c +@@ -256,6 +256,7 @@ uint64_t node_mem[MAX_NODES]; + unsigned long *node_cpumask[MAX_NODES]; + + uint8_t qemu_uuid[16]; ++bool qemu_uuid_set; + + static QEMUBootSetHandler *boot_set_handler; + static void *boot_set_opaque; +@@ -3573,6 +3574,7 @@ int main(int argc, char **argv, char **envp) + " Wrong format.\n"); + exit(1); + } ++ qemu_uuid_set = true; + break; + case QEMU_OPTION_option_rom: + if (nb_option_roms >= MAX_OPTION_ROMS) { +-- +1.7.1 + diff --git a/SOURCES/kvm-smbios-Normalize-smbios_entry_add-s-error-handling-t.patch b/SOURCES/kvm-smbios-Normalize-smbios_entry_add-s-error-handling-t.patch new file mode 100644 index 0000000..e7c5061 --- /dev/null +++ b/SOURCES/kvm-smbios-Normalize-smbios_entry_add-s-error-handling-t.patch @@ -0,0 +1,109 @@ +From d2bfd3e4bb4a6115dc40b56e885a68887df30f94 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:20 +0100 +Subject: [PATCH 20/29] smbios: Normalize smbios_entry_add()'s error handling to exit(1) + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-4-git-send-email-armbru@redhat.com> +Patchwork-id: 55241 +O-Subject: [PATCH 7.0 qemu-kvm 03/11] smbios: Normalize smbios_entry_add()'s error handling to exit(1) +Bugzilla: 994490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +It exits on all error conditions but one, where it returns -1. +Normalize, and return void. + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 351a6a73ca7a9123f0dfd6c6f85fd01e82fe3741) +--- + arch_init.c | 4 +--- + hw/i386/smbios.c | 10 +++++----- + include/hw/i386/smbios.h | 2 +- + 3 files changed, 7 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + arch_init.c | 4 +--- + hw/i386/smbios.c | 10 +++++----- + include/hw/i386/smbios.h | 2 +- + 3 files changed, 7 insertions(+), 9 deletions(-) + +diff --git a/arch_init.c b/arch_init.c +index cd2bb5a..7834d36 100644 +--- a/arch_init.c ++++ b/arch_init.c +@@ -1080,9 +1080,7 @@ void do_acpitable_option(const QemuOpts *opts) + void do_smbios_option(const char *optarg) + { + #ifdef TARGET_I386 +- if (smbios_entry_add(optarg) < 0) { +- exit(1); +- } ++ smbios_entry_add(optarg); + #endif + } + +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index e708cb8..0608aee 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -183,7 +183,7 @@ static void smbios_build_type_1_fields(const char *t) + buf, strlen(buf) + 1); + } + +-int smbios_entry_add(const char *t) ++void smbios_entry_add(const char *t) + { + char buf[1024]; + +@@ -222,7 +222,7 @@ int smbios_entry_add(const char *t) + smbios_entries_len += sizeof(*table) + size; + (*(uint16_t *)smbios_entries) = + cpu_to_le16(le16_to_cpu(*(uint16_t *)smbios_entries) + 1); +- return 0; ++ return; + } + + if (get_param_value(buf, sizeof(buf), "type", t)) { +@@ -230,10 +230,10 @@ int smbios_entry_add(const char *t) + switch (type) { + case 0: + smbios_build_type_0_fields(t); +- return 0; ++ return; + case 1: + smbios_build_type_1_fields(t); +- return 0; ++ return; + default: + error_report("Don't know how to build fields for SMBIOS type %ld", + type); +@@ -242,5 +242,5 @@ int smbios_entry_add(const char *t) + } + + error_report("Must specify type= or file="); +- return -1; ++ exit(1); + } +diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h +index 9babeaf..56c6108 100644 +--- a/include/hw/i386/smbios.h ++++ b/include/hw/i386/smbios.h +@@ -13,7 +13,7 @@ + * + */ + +-int smbios_entry_add(const char *t); ++void smbios_entry_add(const char *t); + void smbios_add_field(int type, int offset, const void *data, size_t len); + uint8_t *smbios_get_table(size_t *length); + +-- +1.7.1 + diff --git a/SOURCES/kvm-smbios-Set-system-manufacturer-product-version-by-de.patch b/SOURCES/kvm-smbios-Set-system-manufacturer-product-version-by-de.patch new file mode 100644 index 0000000..095223e --- /dev/null +++ b/SOURCES/kvm-smbios-Set-system-manufacturer-product-version-by-de.patch @@ -0,0 +1,149 @@ +From 1123ee2cf18b526b19fc3770f20c91b1ac409cf7 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Sat, 2 Nov 2013 10:01:26 +0100 +Subject: [PATCH 26/29] smbios: Set system manufacturer, product & version by default + +RH-Author: Markus Armbruster +Message-id: <1383386488-29789-10-git-send-email-armbru@redhat.com> +Patchwork-id: 55245 +O-Subject: [PATCH 7.0 qemu-kvm 09/11] smbios: Set system manufacturer, product & version by default +Bugzilla: 994490 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +Currently, we get SeaBIOS defaults: manufacturer Bochs, product Bochs, +no version. Best SeaBIOS can do, but we can provide better defaults: +manufacturer QEMU, product & version taken from QEMUMachine desc and +name. + +Take care to do this only for new machine types, of course. + +Signed-off-by: Markus Armbruster +(cherry picked from pending upstream submission) + +Conflicts: + hw/i386/pc_piix.c + hw/i386/pc_q35.c +--- + hw/i386/pc_piix.c | 7 +++++++ + hw/i386/pc_q35.c | 7 +++++++ + hw/i386/smbios.c | 14 ++++++++++++++ + include/hw/i386/smbios.h | 2 ++ + 4 files changed, 30 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 7 +++++++ + hw/i386/pc_q35.c | 7 +++++++ + hw/i386/smbios.c | 14 ++++++++++++++ + include/hw/i386/smbios.h | 2 ++ + 4 files changed, 30 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 65f7f3a..e8fe607 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -27,6 +27,7 @@ + #include "hw/hw.h" + #include "hw/i386/pc.h" + #include "hw/i386/apic.h" ++#include "hw/i386/smbios.h" + #include "hw/pci/pci.h" + #include "hw/pci/pci_ids.h" + #include "hw/usb.h" +@@ -57,6 +58,7 @@ static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; + static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; + + static bool has_pvpanic = true; ++static bool smbios_type1_defaults = true; + + /* PC hardware initialisation */ + static void pc_init1(QEMUMachineInitArgs *args, +@@ -113,6 +115,11 @@ static void pc_init1(QEMUMachineInitArgs *args, + rom_memory = system_memory; + } + ++ if (smbios_type1_defaults) { ++ smbios_set_type1_defaults("QEMU", args->machine->desc, ++ args->machine->name); ++ } ++ + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { + fw_cfg = pc_memory_init(system_memory, +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 99d3a10..3ef854a 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -38,6 +38,7 @@ + #include "hw/pci-host/q35.h" + #include "exec/address-spaces.h" + #include "hw/i386/ich9.h" ++#include "hw/i386/smbios.h" + #include "hw/ide/pci.h" + #include "hw/ide/ahci.h" + #include "hw/usb.h" +@@ -47,6 +48,7 @@ + #define MAX_SATA_PORTS 6 + + static bool has_pvpanic = true; ++static bool smbios_type1_defaults = true; + + /* PC hardware initialisation */ + static void pc_q35_init(QEMUMachineInitArgs *args) +@@ -99,6 +101,11 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + rom_memory = get_system_memory(); + } + ++ if (smbios_type1_defaults) { ++ smbios_set_type1_defaults("QEMU", args->machine->desc, ++ args->machine->name); ++ } ++ + /* allocate ram and load rom/bios */ + if (!xen_enabled()) { + pc_memory_init(get_system_memory(), +diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c +index d3f1ee6..e8f41ad 100644 +--- a/hw/i386/smbios.c ++++ b/hw/i386/smbios.c +@@ -256,6 +256,20 @@ static void smbios_build_type_1_fields(void) + } + } + ++void smbios_set_type1_defaults(const char *manufacturer, ++ const char *product, const char *version) ++{ ++ if (!type1.manufacturer) { ++ type1.manufacturer = manufacturer; ++ } ++ if (!type1.product) { ++ type1.product = product; ++ } ++ if (!type1.version) { ++ type1.version = version; ++ } ++} ++ + uint8_t *smbios_get_table(size_t *length) + { + if (!smbios_immutable) { +diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h +index b08ec71..18fb970 100644 +--- a/include/hw/i386/smbios.h ++++ b/include/hw/i386/smbios.h +@@ -16,6 +16,8 @@ + #include "qemu/option.h" + + void smbios_entry_add(QemuOpts *opts); ++void smbios_set_type1_defaults(const char *manufacturer, ++ const char *product, const char *version); + uint8_t *smbios_get_table(size_t *length); + + /* +-- +1.7.1 + diff --git a/SOURCES/kvm-socket-shutdown.patch b/SOURCES/kvm-socket-shutdown.patch new file mode 100644 index 0000000..38ad378 --- /dev/null +++ b/SOURCES/kvm-socket-shutdown.patch @@ -0,0 +1,151 @@ +From da3039bc7ec4fda6719be3bdd10f4b0fdaceb17a Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Fri, 16 Jan 2015 17:35:35 +0100 +Subject: [PATCH 03/16] socket shutdown + +Message-id: <1421429737-23581-2-git-send-email-dgilbert@redhat.com> +Patchwork-id: 63332 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/3] socket shutdown +Bugzilla: 1086168 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek + +From: "Dr. David Alan Gilbert" + +Add QEMUFile interface to allow a socket to be 'shut down' - i.e. any +reads/writes will fail (and any blocking read/write will be woken). + +Signed-off-by: Dr. David Alan Gilbert +Reviewed-by: Paolo Bonzini +Reviewed-by: Amit Shah +Signed-off-by: Amit Shah +(cherry picked from commit e1a8c9b67fc97d293211773edcae9e8e2f3367ab) +Signed-off-by: Miroslav Rezanina + +Conflicts: + include/migration/qemu-file.h + migration/qemu-file-unix.c + migration/qemu-file.c + + Because we split qemu-file.c out of savevm and moved it +--- + include/migration/qemu-file.h | 10 ++++++++++ + include/qemu/sockets.h | 7 +++++++ + savevm.c | 33 +++++++++++++++++++++++++++++---- + 3 files changed, 46 insertions(+), 4 deletions(-) + +diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h +index 0f757fb..032de47 100644 +--- a/include/migration/qemu-file.h ++++ b/include/migration/qemu-file.h +@@ -82,6 +82,14 @@ typedef size_t (QEMURamSaveFunc)(QEMUFile *f, void *opaque, + size_t size, + int *bytes_sent); + ++/* ++ * Stop any read or write (depending on flags) on the underlying ++ * transport on the QEMUFile. ++ * Existing blocking reads/writes must be woken ++ * Returns 0 on success, -err on error ++ */ ++typedef int (QEMUFileShutdownFunc)(void *opaque, bool rd, bool wr); ++ + typedef struct QEMUFileOps { + QEMUFilePutBufferFunc *put_buffer; + QEMUFileGetBufferFunc *get_buffer; +@@ -92,6 +100,7 @@ typedef struct QEMUFileOps { + QEMURamHookFunc *after_ram_iterate; + QEMURamHookFunc *hook_ram_load; + QEMURamSaveFunc *save_page; ++ QEMUFileShutdownFunc *shut_down; + } QEMUFileOps; + + QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops); +@@ -141,6 +150,7 @@ void qemu_file_reset_rate_limit(QEMUFile *f); + void qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate); + int64_t qemu_file_get_rate_limit(QEMUFile *f); + int qemu_file_get_error(QEMUFile *f); ++int qemu_file_shutdown(QEMUFile *f); + void qemu_fflush(QEMUFile *f); + + static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv) +diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h +index c5174d7..729ff52 100644 +--- a/include/qemu/sockets.h ++++ b/include/qemu/sockets.h +@@ -42,6 +42,13 @@ void qemu_set_nonblock(int fd); + int send_all(int fd, const void *buf, int len1); + int recv_all(int fd, void *buf, int len1, bool single_read); + ++#ifdef WIN32 ++/* Windows has different names for the same constants with the same values */ ++#define SHUT_RD 0 ++#define SHUT_WR 1 ++#define SHUT_RDWR 2 ++#endif ++ + /* callback function for nonblocking connect + * valid fd on success, negative error code on failure + */ +diff --git a/savevm.c b/savevm.c +index 963dc7d..731d5c0 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -204,6 +204,17 @@ static int socket_close(void *opaque) + return 0; + } + ++static int socket_shutdown(void *opaque, bool rd, bool wr) ++{ ++ QEMUFileSocket *s = opaque; ++ ++ if (shutdown(s->fd, rd ? (wr ? SHUT_RDWR : SHUT_RD) : SHUT_WR)) { ++ return -errno; ++ } else { ++ return 0; ++ } ++} ++ + static int stdio_get_fd(void *opaque) + { + QEMUFileStdio *s = opaque; +@@ -448,17 +459,31 @@ QEMUFile *qemu_fdopen(int fd, const char *mode) + } + + static const QEMUFileOps socket_read_ops = { +- .get_fd = socket_get_fd, ++ .get_fd = socket_get_fd, + .get_buffer = socket_get_buffer, +- .close = socket_close ++ .close = socket_close, ++ .shut_down = socket_shutdown + }; + + static const QEMUFileOps socket_write_ops = { +- .get_fd = socket_get_fd, ++ .get_fd = socket_get_fd, + .writev_buffer = socket_writev_buffer, +- .close = socket_close ++ .close = socket_close, ++ .shut_down = socket_shutdown + }; + ++/* ++ * Stop a file from being read/written - not all backing files can do this ++ * typically only sockets can. ++ */ ++int qemu_file_shutdown(QEMUFile *f) ++{ ++ if (!f->ops->shut_down) { ++ return -ENOSYS; ++ } ++ return f->ops->shut_down(f->opaque, true, true); ++} ++ + bool qemu_file_mode_is_not_valid(const char *mode) + { + if (mode == NULL || +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-call-qemu_spice_set_passwd-during-init.patch b/SOURCES/kvm-spice-call-qemu_spice_set_passwd-during-init.patch new file mode 100644 index 0000000..0111422 --- /dev/null +++ b/SOURCES/kvm-spice-call-qemu_spice_set_passwd-during-init.patch @@ -0,0 +1,46 @@ +From 3d38cb5a412b18287684cd52579afe8034294d53 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 18 Nov 2014 13:35:20 +0100 +Subject: [PATCH 34/41] spice: call qemu_spice_set_passwd() during init +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1416317720-17906-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 62433 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] spice: call qemu_spice_set_passwd() during init +Bugzilla: 1138639 +RH-Acked-by: Amos Kong +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Laszlo Ersek + +From: Marc-André Lureau + +Don't call SPICE API directly to set password given in command line, but +use the internal API, saving password for later calls. + +This solves losing password when changing expiration in qemu monitor. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 07d49a53b6394941ed833486a3acb5c480d87db2) +Signed-off-by: Miroslav Rezanina +--- + ui/spice-core.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui/spice-core.c b/ui/spice-core.c +index 99a76d2..141afd1 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -721,7 +721,7 @@ void qemu_spice_init(void) + tls_ciphers); + } + if (password) { +- spice_server_set_ticket(spice_server, password, 0, 0, 0); ++ qemu_spice_set_passwd(password, false, false); + } + if (qemu_opt_get_bool(opts, "sasl", 0)) { + if (spice_server_set_sasl_appname(spice_server, "qemu") == -1 || +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-display-add-display-channel-id-to-the-debug-me.patch b/SOURCES/kvm-spice-display-add-display-channel-id-to-the-debug-me.patch new file mode 100644 index 0000000..fe0dd15 --- /dev/null +++ b/SOURCES/kvm-spice-display-add-display-channel-id-to-the-debug-me.patch @@ -0,0 +1,144 @@ +From 514a9261b651aacc643075159f7c8eac07c64d81 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 15 Sep 2014 13:08:22 +0200 +Subject: [PATCH 3/4] spice-display: add display channel id to the debug messages. + +Message-id: <1410786503-19794-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 61138 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 3/4] spice-display: add display channel id to the debug messages. +Bugzilla: 1139118 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +And s/__FUNCTION__/__func__/ while being at it. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 35b2122db446a03be9b88f540e865930efd01d6a) + +Signed-off-by: Miroslav Rezanina +--- + ui/spice-display.c | 27 ++++++++++++++------------- + 1 files changed, 14 insertions(+), 13 deletions(-) + +diff --git a/ui/spice-display.c b/ui/spice-display.c +index f0f95c8..5d0a21e 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -280,7 +280,7 @@ void qemu_spice_create_host_memslot(SimpleSpiceDisplay *ssd) + { + QXLDevMemSlot memslot; + +- dprint(1, "%s:\n", __FUNCTION__); ++ dprint(1, "%s/%d:\n", __func__, ssd->qxl.id); + + memset(&memslot, 0, sizeof(memslot)); + memslot.slot_group_id = MEMSLOT_GROUP_HOST; +@@ -294,7 +294,7 @@ void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd) + + memset(&surface, 0, sizeof(surface)); + +- dprint(1, "%s: %dx%d\n", __FUNCTION__, ++ dprint(1, "%s/%d: %dx%d\n", __func__, ssd->qxl.id, + surface_width(ssd->ds), surface_height(ssd->ds)); + + surface.format = SPICE_SURFACE_FMT_32_xRGB; +@@ -312,7 +312,7 @@ void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd) + + void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd) + { +- dprint(1, "%s:\n", __FUNCTION__); ++ dprint(1, "%s/%d:\n", __func__, ssd->qxl.id); + + qemu_spice_destroy_primary_surface(ssd, 0, QXL_SYNC); + } +@@ -337,7 +337,8 @@ void qemu_spice_display_update(SimpleSpiceDisplay *ssd, + { + QXLRect update_area; + +- dprint(2, "%s: x %d y %d w %d h %d\n", __FUNCTION__, x, y, w, h); ++ dprint(2, "%s/%d: x %d y %d w %d h %d\n", __func__, ++ ssd->qxl.id, x, y, w, h); + update_area.left = x, + update_area.right = x + w; + update_area.top = y; +@@ -354,7 +355,7 @@ void qemu_spice_display_switch(SimpleSpiceDisplay *ssd, + { + SimpleSpiceUpdate *update; + +- dprint(1, "%s:\n", __FUNCTION__); ++ dprint(1, "%s/%d:\n", __func__, ssd->qxl.id); + + memset(&ssd->dirty, 0, sizeof(ssd->dirty)); + if (ssd->surface) { +@@ -396,7 +397,7 @@ void qemu_spice_cursor_refresh_unlocked(SimpleSpiceDisplay *ssd) + + void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd) + { +- dprint(3, "%s:\n", __func__); ++ dprint(3, "%s/%d:\n", __func__, ssd->qxl.id); + graphic_hw_update(ssd->dcl.con); + + qemu_mutex_lock(&ssd->lock); +@@ -410,7 +411,7 @@ void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd) + if (ssd->notify) { + ssd->notify = 0; + qemu_spice_wakeup(ssd); +- dprint(2, "%s: notify\n", __FUNCTION__); ++ dprint(2, "%s/%d: notify\n", __func__, ssd->qxl.id); + } + } + +@@ -420,19 +421,19 @@ static void interface_attach_worker(QXLInstance *sin, QXLWorker *qxl_worker) + { + SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl); + +- dprint(1, "%s:\n", __FUNCTION__); ++ dprint(1, "%s/%d:\n", __func__, ssd->qxl.id); + ssd->worker = qxl_worker; + } + + static void interface_set_compression_level(QXLInstance *sin, int level) + { +- dprint(1, "%s:\n", __FUNCTION__); ++ dprint(1, "%s/%d:\n", __func__, sin->id); + /* nothing to do */ + } + + static void interface_set_mm_time(QXLInstance *sin, uint32_t mm_time) + { +- dprint(3, "%s:\n", __FUNCTION__); ++ dprint(3, "%s/%d:\n", __func__, sin->id); + /* nothing to do */ + } + +@@ -455,7 +456,7 @@ static int interface_get_command(QXLInstance *sin, struct QXLCommandExt *ext) + SimpleSpiceUpdate *update; + int ret = false; + +- dprint(3, "%s:\n", __FUNCTION__); ++ dprint(3, "%s/%d:\n", __func__, ssd->qxl.id); + + qemu_mutex_lock(&ssd->lock); + update = QTAILQ_FIRST(&ssd->updates); +@@ -471,7 +472,7 @@ static int interface_get_command(QXLInstance *sin, struct QXLCommandExt *ext) + + static int interface_req_cmd_notification(QXLInstance *sin) + { +- dprint(1, "%s:\n", __FUNCTION__); ++ dprint(1, "%s/%d:\n", __func__, sin->id); + return 1; + } + +@@ -481,7 +482,7 @@ static void interface_release_resource(QXLInstance *sin, + SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl); + uintptr_t id; + +- dprint(2, "%s:\n", __FUNCTION__); ++ dprint(2, "%s/%d:\n", __func__, ssd->qxl.id); + id = ext.info->id; + qemu_spice_destroy_update(ssd, (void*)id); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-spice-display-fix-segfault-in-qemu_spice_create_upda.patch b/SOURCES/kvm-spice-display-fix-segfault-in-qemu_spice_create_upda.patch new file mode 100644 index 0000000..3a94d53 --- /dev/null +++ b/SOURCES/kvm-spice-display-fix-segfault-in-qemu_spice_create_upda.patch @@ -0,0 +1,60 @@ +From 25bafb9e1c938197a716d21010ab532aa85b82bf Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 11 Jun 2015 15:17:36 +0200 +Subject: [PATCH 4/4] spice-display: fix segfault in qemu_spice_create_update + +Message-id: <1434035856-9153-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 65858 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/1] spice-display: fix segfault in qemu_spice_create_update +Bugzilla: 1230808 +RH-Acked-by: Bandan Das +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laszlo Ersek + +Although it is pretty unusual the stride for the guest image and the +mirror image maintained by spice-display can be different. So use +separate variables for them. + +Cc: qemu-stable@nongnu.org +Reported-by: perrier vincent +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c6e484707f28b3e115e64122a0570f6b3c585489) +Signed-off-by: Miroslav Rezanina +--- + ui/spice-display.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/ui/spice-display.c b/ui/spice-display.c +index dc8be8a..d29d2ab 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -199,7 +199,7 @@ static void qemu_spice_create_update(SimpleSpiceDisplay *ssd) + static const int blksize = 32; + int blocks = (surface_width(ssd->ds) + blksize - 1) / blksize; + int dirty_top[blocks]; +- int y, yoff, x, xoff, blk, bw; ++ int y, yoff1, yoff2, x, xoff, blk, bw; + int bpp = surface_bytes_per_pixel(ssd->ds); + uint8_t *guest, *mirror; + +@@ -220,13 +220,14 @@ static void qemu_spice_create_update(SimpleSpiceDisplay *ssd) + guest = surface_data(ssd->ds); + mirror = (void *)pixman_image_get_data(ssd->mirror); + for (y = ssd->dirty.top; y < ssd->dirty.bottom; y++) { +- yoff = y * surface_stride(ssd->ds); ++ yoff1 = y * surface_stride(ssd->ds); ++ yoff2 = y * pixman_image_get_stride(ssd->mirror); + for (x = ssd->dirty.left; x < ssd->dirty.right; x += blksize) { + xoff = x * bpp; + blk = x / blksize; + bw = MIN(blksize, ssd->dirty.right - x); +- if (memcmp(guest + yoff + xoff, +- mirror + yoff + xoff, ++ if (memcmp(guest + yoff1 + xoff, ++ mirror + yoff2 + xoff, + bw * bpp) == 0) { + if (dirty_top[blk] != -1) { + QXLRect update = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-do-not-require-TCP-ports.patch b/SOURCES/kvm-spice-do-not-require-TCP-ports.patch new file mode 100644 index 0000000..7e0f350 --- /dev/null +++ b/SOURCES/kvm-spice-do-not-require-TCP-ports.patch @@ -0,0 +1,48 @@ +From f40c437eed664b31984a21ec6bbed12c6b03dd0b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 1 Jun 2016 13:16:08 +0200 +Subject: [PATCH 1/2] spice: do not require TCP ports +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1464786968-25518-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 70523 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] spice: do not require TCP ports +Bugzilla: 1336491 +RH-Acked-by: Laurent Vivier +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek + +From: Marc-André Lureau + +It is possible to use Spice server without TCP port. On local VM, +qemu (and libvirt) can add new clients thanks to QMP add_client command. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Gerd Hoffmann +(cherry picked from commit cf7856adefebe86e0cd50302d93b3045e3111690) +Signed-off-by: Miroslav Rezanina +--- + ui/spice-core.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/ui/spice-core.c b/ui/spice-core.c +index 141afd1..8d6e726 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -648,10 +648,6 @@ void qemu_spice_init(void) + } + port = qemu_opt_get_number(opts, "port", 0); + tls_port = qemu_opt_get_number(opts, "tls-port", 0); +- if (!port && !tls_port) { +- error_report("neither port nor tls-port specified for spice"); +- exit(1); +- } + if (port < 0 || port > 65535) { + error_report("spice port is out of range"); + exit(1); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-fix-display-initialization.patch b/SOURCES/kvm-spice-fix-display-initialization.patch new file mode 100644 index 0000000..ead65b8 --- /dev/null +++ b/SOURCES/kvm-spice-fix-display-initialization.patch @@ -0,0 +1,113 @@ +From e2022d7c9e8623092daeca9c9a3f6118f3c7239e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 30 Aug 2013 07:08:09 +0200 +Subject: [PATCH 01/29] spice: fix display initialization + +RH-Author: Gerd Hoffmann +Message-id: <1377846489-22691-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 53931 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] spice: fix display initialization +Bugzilla: 974887 +RH-Acked-by: Hans de Goede +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Markus Armbruster + +Spice has two display interface implementations: One integrated into +the qxl graphics card, and one generic which can operate with every +qemu-emulated graphics card. + +The generic one is activated in case spice is used without qxl. The +logic for that only caught the "-vga qxl" case, "-device qxl-vga" goes +unnoticed. Fix that by adding a check in the spice interface +registration so we'll notice the qxl card no matter how it is created. + +https://bugzilla.redhat.com/show_bug.cgi?id=981094 + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 58ae52a8dc7752e3da9a905678580b4cb8181cdc) +--- + include/sysemu/sysemu.h | 1 - + include/ui/qemu-spice.h | 2 ++ + ui/spice-core.c | 5 +++++ + vl.c | 2 +- + 4 files changed, 8 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/sysemu.h | 1 - + include/ui/qemu-spice.h | 2 ++ + ui/spice-core.c | 5 +++++ + vl.c | 2 +- + 4 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index 3caeb66..d7a77b6 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -103,7 +103,6 @@ typedef enum { + + extern int vga_interface_type; + #define xenfb_enabled (vga_interface_type == VGA_XENFB) +-#define qxl_enabled (vga_interface_type == VGA_QXL) + + extern int graphic_width; + extern int graphic_height; +diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h +index eba6d77..c6c756b 100644 +--- a/include/ui/qemu-spice.h ++++ b/include/ui/qemu-spice.h +@@ -27,6 +27,7 @@ + #include "monitor/monitor.h" + + extern int using_spice; ++extern int spice_displays; + + void qemu_spice_init(void); + void qemu_spice_input_init(void); +@@ -57,6 +58,7 @@ static inline CharDriverState *qemu_chr_open_spice_port(const char *name) + #include "monitor/monitor.h" + + #define using_spice 0 ++#define spice_displays 0 + static inline int qemu_spice_set_passwd(const char *passwd, + bool fail_if_connected, + bool disconnect_if_connected) +diff --git a/ui/spice-core.c b/ui/spice-core.c +index bcc4199..c8337ab 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -48,6 +48,7 @@ static char *auth_passwd; + static time_t auth_expires = TIME_MAX; + static int spice_migration_completed; + int using_spice = 0; ++int spice_displays; + + static QemuThread me; + +@@ -823,6 +824,10 @@ int qemu_spice_add_interface(SpiceBaseInstance *sin) + qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); + } + ++ if (strcmp(sin->sif->type, SPICE_INTERFACE_QXL) == 0) { ++ spice_displays++; ++ } ++ + return spice_server_add_interface(spice_server, sin); + } + +diff --git a/vl.c b/vl.c +index 51c04e7..f7b326a 100644 +--- a/vl.c ++++ b/vl.c +@@ -4405,7 +4405,7 @@ int main(int argc, char **argv, char **envp) + } + #endif + #ifdef CONFIG_SPICE +- if (using_spice && !qxl_enabled) { ++ if (using_spice && !spice_displays) { + qemu_spice_display_init(ds); + } + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-spice-fix-simple-display-on-bigendian-hosts.patch b/SOURCES/kvm-spice-fix-simple-display-on-bigendian-hosts.patch new file mode 100644 index 0000000..15f0bd1 --- /dev/null +++ b/SOURCES/kvm-spice-fix-simple-display-on-bigendian-hosts.patch @@ -0,0 +1,60 @@ +From b01048102e5cc91d484d23531799a130a49d723a Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:16 +0200 +Subject: [PATCH 08/17] spice: fix simple display on bigendian hosts + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-3-git-send-email-tgupta@redhat.com> +Patchwork-id: 80907 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 02/11] spice: fix simple display on bigendian hosts +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Denis Kirjanov is busy getting spice run on ppc64 and trapped into this +one. Spice wire format is little endian, so we have to explicitly say +we want little endian when letting pixman convert the data for us. + +Reported-by: Denis Kirjanov +Signed-off-by: Gerd Hoffmann + +(cherry picked from c1d37cd353be3ea4c5773fc227ba8459c1f20470) + +Signed-off-by: Miroslav Rezanina +--- + include/ui/qemu-pixman.h | 2 ++ + ui/spice-display.c | 2 +- + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h +index ba970f8..500725c 100644 +--- a/include/ui/qemu-pixman.h ++++ b/include/ui/qemu-pixman.h +@@ -27,8 +27,10 @@ + + #ifdef HOST_WORDS_BIGENDIAN + # define PIXMAN_BE_r8g8b8 PIXMAN_r8g8b8 ++# define PIXMAN_LE_x8r8g8b8 PIXMAN_b8g8r8x8 + #else + # define PIXMAN_BE_r8g8b8 PIXMAN_b8g8r8 ++# define PIXMAN_LE_x8r8g8b8 PIXMAN_x8r8g8b8 + #endif + + /* -------------------------------------------------------------------- */ +diff --git a/ui/spice-display.c b/ui/spice-display.c +index e2c24a9..8b73e5a 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -178,7 +178,7 @@ static void qemu_spice_create_one_update(SimpleSpiceDisplay *ssd, + image->bitmap.palette = 0; + image->bitmap.format = SPICE_BITMAP_FMT_32BIT; + +- dest = pixman_image_create_bits(PIXMAN_x8r8g8b8, bw, bh, ++ dest = pixman_image_create_bits(PIXMAN_LE_x8r8g8b8, bw, bh, + (void *)update->bitmap, bw * 4); + pixman_image_composite(PIXMAN_OP_SRC, ssd->surface, NULL, ssd->mirror, + rect->left, rect->top, 0, 0, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-fix-spice_chr_add_watch-pre-condition.patch b/SOURCES/kvm-spice-fix-spice_chr_add_watch-pre-condition.patch new file mode 100644 index 0000000..d184899 --- /dev/null +++ b/SOURCES/kvm-spice-fix-spice_chr_add_watch-pre-condition.patch @@ -0,0 +1,56 @@ +From a88811fcdd3dbc600a669eed0b106a5bf8f6b907 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 31 May 2017 08:09:49 +0200 +Subject: [PATCH] spice: fix spice_chr_add_watch() pre-condition +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20170531080949.17102-1-marcandre.lureau@redhat.com> +Patchwork-id: 75440 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] spice: fix spice_chr_add_watch() pre-condition +Bugzilla: 1456983 +RH-Acked-by: Fam Zheng +RH-Acked-by: Eduardo Habkost +RH-Acked-by: John Snow + +From: Marc-André Lureau + +Since e02bc6de30c44fd668dc0d6e1cd1804f2eed3ed3, add_watch() is called +with G_IO_HUP. Even if spice-qemu-char ignores this flag, the +precondition must be changed. + +https://bugzilla.redhat.com/show_bug.cgi?id=1128992 + +Signed-off-by: Gerd Hoffmann + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1456983 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=13310981 + +"serial: poll the serial console with G_IO_HUP" was backported without +the Spice related fix. + +(cherry picked from commit f7a8beb5e6a13dc924895244777d9ef08b23b367) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + spice-qemu-char.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/spice-qemu-char.c b/spice-qemu-char.c +index cd51f3c..02c568c 100644 +--- a/spice-qemu-char.c ++++ b/spice-qemu-char.c +@@ -170,7 +170,7 @@ static GSource *spice_chr_add_watch(CharDriverState *chr, GIOCondition cond) + SpiceCharDriver *scd = chr->opaque; + SpiceCharSource *src; + +- assert(cond == G_IO_OUT); ++ assert(cond & G_IO_OUT); + + src = (SpiceCharSource *)g_source_new(&SpiceCharSourceFuncs, + sizeof(SpiceCharSource)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-make-sure-we-don-t-overflow-ssd-buf.patch b/SOURCES/kvm-spice-make-sure-we-don-t-overflow-ssd-buf.patch new file mode 100644 index 0000000..84e7650 --- /dev/null +++ b/SOURCES/kvm-spice-make-sure-we-don-t-overflow-ssd-buf.patch @@ -0,0 +1,90 @@ +From 27d5bab00da6a59c9eae2e5f66dc985f1a0b95ac Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 15 Sep 2014 13:08:23 +0200 +Subject: [PATCH 4/4] spice: make sure we don't overflow ssd->buf + +Message-id: <1410786503-19794-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 61136 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 4/4] spice: make sure we don't overflow ssd->buf +Bugzilla: 1139118 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Related spice-only bug. We have a fixed 16 MB buffer here, being +presented to the spice-server as qxl video memory in case spice is +used with a non-qxl card. It's also used with qxl in vga mode. + +When using display resolutions requiring more than 16 MB of memory we +are going to overflow that buffer. In theory the guest can write, +indirectly via spice-server. The spice-server clears the memory after +setting a new video mode though, triggering a segfault in the overflow +case, so qemu crashes before the guest has a chance to do something +evil. + +Fix that by switching to dynamic allocation for the buffer. + +CVE-2014-3615 + +Cc: qemu-stable@nongnu.org +Cc: secalert@redhat.com +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +(cherry picked from commit ab9509cceabef28071e41bdfa073083859c949a7) + +Signed-off-by: Miroslav Rezanina +--- + ui/spice-display.c | 20 +++++++++++++++----- + 1 files changed, 15 insertions(+), 5 deletions(-) + +diff --git a/ui/spice-display.c b/ui/spice-display.c +index 5d0a21e..dc8be8a 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -291,11 +291,23 @@ void qemu_spice_create_host_memslot(SimpleSpiceDisplay *ssd) + void qemu_spice_create_host_primary(SimpleSpiceDisplay *ssd) + { + QXLDevSurfaceCreate surface; ++ uint64_t surface_size; + + memset(&surface, 0, sizeof(surface)); + +- dprint(1, "%s/%d: %dx%d\n", __func__, ssd->qxl.id, +- surface_width(ssd->ds), surface_height(ssd->ds)); ++ surface_size = (uint64_t) surface_width(ssd->ds) * ++ surface_height(ssd->ds) * 4; ++ assert(surface_size > 0); ++ assert(surface_size < INT_MAX); ++ if (ssd->bufsize < surface_size) { ++ ssd->bufsize = surface_size; ++ g_free(ssd->buf); ++ ssd->buf = g_malloc(ssd->bufsize); ++ } ++ ++ dprint(1, "%s/%d: %ux%u (size %" PRIu64 "/%d)\n", __func__, ssd->qxl.id, ++ surface_width(ssd->ds), surface_height(ssd->ds), ++ surface_size, ssd->bufsize); + + surface.format = SPICE_SURFACE_FMT_32_xRGB; + surface.width = surface_width(ssd->ds); +@@ -326,8 +338,6 @@ void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd) + if (ssd->num_surfaces == 0) { + ssd->num_surfaces = 1024; + } +- ssd->bufsize = (16 * 1024 * 1024); +- ssd->buf = g_malloc(ssd->bufsize); + } + + /* display listener callbacks */ +@@ -446,7 +456,7 @@ static void interface_get_init_info(QXLInstance *sin, QXLDevInitInfo *info) + info->num_memslots = NUM_MEMSLOTS; + info->num_memslots_groups = NUM_MEMSLOTS_GROUPS; + info->internal_groupslot_id = 0; +- info->qxl_ram_size = ssd->bufsize; ++ info->qxl_ram_size = 16 * 1024 * 1024; + info->n_surfaces = ssd->num_surfaces; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-spice-move-qemu_spice_display_-from-spice-graphics-t.patch b/SOURCES/kvm-spice-move-qemu_spice_display_-from-spice-graphics-t.patch new file mode 100644 index 0000000..799ac97 --- /dev/null +++ b/SOURCES/kvm-spice-move-qemu_spice_display_-from-spice-graphics-t.patch @@ -0,0 +1,91 @@ +From 79928996c2bf6ebb143564faf371433489ae5da4 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 5 Sep 2014 12:30:35 +0200 +Subject: [PATCH 01/12] spice: move qemu_spice_display_*() from spice-graphics to spice-core + +Message-id: <1409920238-9070-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 60875 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/4] spice: move qemu_spice_display_*() from spice-graphics to spice-core +Bugzilla: 1054077 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 7cc6a25fe94b430cb5a041bcb19d7d854b4e99a7) +--- + ui/spice-core.c | 16 ++++++++++++++++ + ui/spice-display.c | 17 ----------------- + 2 files changed, 16 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + ui/spice-core.c | 16 ++++++++++++++++ + ui/spice-display.c | 17 ----------------- + 2 files changed, 16 insertions(+), 17 deletions(-) + +diff --git a/ui/spice-core.c b/ui/spice-core.c +index d67449e..6a7c86f 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -47,6 +47,7 @@ static const char *auth = "spice"; + static char *auth_passwd; + static time_t auth_expires = TIME_MAX; + static int spice_migration_completed; ++static int spice_display_is_running; + int using_spice = 0; + int spice_displays; + +@@ -873,6 +874,21 @@ int qemu_spice_display_add_client(int csock, int skipauth, int tls) + } + } + ++void qemu_spice_display_start(void) ++{ ++ spice_display_is_running = true; ++} ++ ++void qemu_spice_display_stop(void) ++{ ++ spice_display_is_running = false; ++} ++ ++int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd) ++{ ++ return spice_display_is_running; ++} ++ + static void spice_register_config(void) + { + qemu_add_opts(&qemu_spice_opts); +diff --git a/ui/spice-display.c b/ui/spice-display.c +index 82d8b9f..f0f95c8 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -126,23 +126,6 @@ void qemu_spice_wakeup(SimpleSpiceDisplay *ssd) + ssd->worker->wakeup(ssd->worker); + } + +-static int spice_display_is_running; +- +-void qemu_spice_display_start(void) +-{ +- spice_display_is_running = true; +-} +- +-void qemu_spice_display_stop(void) +-{ +- spice_display_is_running = false; +-} +- +-int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd) +-{ +- return spice_display_is_running; +-} +- + static void qemu_spice_create_one_update(SimpleSpiceDisplay *ssd, + QXLRect *rect) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-spice-move-spice_server_vm_-start-stop-calls-into-qe.patch b/SOURCES/kvm-spice-move-spice_server_vm_-start-stop-calls-into-qe.patch new file mode 100644 index 0000000..770177f --- /dev/null +++ b/SOURCES/kvm-spice-move-spice_server_vm_-start-stop-calls-into-qe.patch @@ -0,0 +1,57 @@ +From 8b96a7cb5bab06ecc5e85f292fbe7598b0e24c8c Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 5 Sep 2014 12:30:36 +0200 +Subject: [PATCH 02/12] spice: move spice_server_vm_{start, stop} calls into qemu_spice_display_*() + +Message-id: <1409920238-9070-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 60874 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/4] spice: move spice_server_vm_{start, stop} calls into qemu_spice_display_*() +Bugzilla: 1054077 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +So calling spice server to start/stop the worker goes +hand in hand with the status variable update. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b50f3e42b9438e033074222671c0502ecfeba82c) +--- + ui/spice-core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + ui/spice-core.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ui/spice-core.c b/ui/spice-core.c +index 6a7c86f..99a76d2 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -621,9 +621,7 @@ static void vm_change_state_handler(void *opaque, int running, + { + if (running) { + qemu_spice_display_start(); +- spice_server_vm_start(spice_server); + } else { +- spice_server_vm_stop(spice_server); + qemu_spice_display_stop(); + } + } +@@ -877,10 +875,12 @@ int qemu_spice_display_add_client(int csock, int skipauth, int tls) + void qemu_spice_display_start(void) + { + spice_display_is_running = true; ++ spice_server_vm_start(spice_server); + } + + void qemu_spice_display_stop(void) + { ++ spice_server_vm_stop(spice_server); + spice_display_is_running = false; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-spice-remove-spice-experimental.h-include.patch b/SOURCES/kvm-spice-remove-spice-experimental.h-include.patch new file mode 100644 index 0000000..37f1f57 --- /dev/null +++ b/SOURCES/kvm-spice-remove-spice-experimental.h-include.patch @@ -0,0 +1,58 @@ +From 8ed773749fd59ff4036ded5ad106de027f92cefe Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 9 Mar 2017 06:12:04 +0100 +Subject: [PATCH 16/17] spice: remove spice-experimental.h include +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 74258 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/2] spice: remove spice-experimental.h include +Bugzilla: 1430606 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Marc-André Lureau +RH-Acked-by: David Hildenbrand + +From: Marc-André Lureau + +Nothing seems to be using functions from spice-experimental.h (better +that way). Let's remove its inclusion. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Gerd Hoffmann +(cherry picked from commit e0883e2de0ef36f254acc274e80ddeac13a2a8f6) +Signed-off-by: Miroslav Rezanina +--- + spice-qemu-char.c | 1 - + ui/spice-core.c | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/spice-qemu-char.c b/spice-qemu-char.c +index 6d147a7..cd51f3c 100644 +--- a/spice-qemu-char.c ++++ b/spice-qemu-char.c +@@ -3,7 +3,6 @@ + #include "ui/qemu-spice.h" + #include "sysemu/char.h" + #include +-#include + #include + + #include "qemu/osdep.h" +diff --git a/ui/spice-core.c b/ui/spice-core.c +index 8d6e726..0585267 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -16,7 +16,6 @@ + */ + + #include +-#include + + #include + #include "sysemu/sysemu.h" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-replace-use-of-deprecated-API.patch b/SOURCES/kvm-spice-replace-use-of-deprecated-API.patch new file mode 100644 index 0000000..e9ab192 --- /dev/null +++ b/SOURCES/kvm-spice-replace-use-of-deprecated-API.patch @@ -0,0 +1,179 @@ +From 43d3585ba869c97c46cffc3c9fd7e46885d539c0 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 9 Mar 2017 06:12:05 +0100 +Subject: [PATCH 17/17] spice: replace use of deprecated API +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Miroslav Rezanina +Message-id: <4696b589a948f544ea081abeb496cb383a466020.1489039263.git.mrezanin@redhat.com> +Patchwork-id: 74259 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/2] spice: replace use of deprecated API +Bugzilla: 1430606 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Marc-André Lureau +RH-Acked-by: David Hildenbrand + +From: Marc-André Lureau + +hose API are deprecated since 0.11, and qemu depends on 0.12 already. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 26defe81f6a878f33e0aaeb1df4d0d7022c929ca) +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 16 ++++++++-------- + ui/spice-core.c | 15 +++++++-------- + ui/spice-display.c | 10 +++++----- + 3 files changed, 20 insertions(+), 21 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index c76c237..0a755df 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -162,7 +162,7 @@ void qxl_spice_update_area(PCIQXLDevice *qxl, uint32_t surface_id, + trace_qxl_spice_update_area_rest(qxl->id, num_dirty_rects, + clear_dirty_region); + if (async == QXL_SYNC) { +- qxl->ssd.worker->update_area(qxl->ssd.worker, surface_id, area, ++ spice_qxl_update_area(&qxl->ssd.qxl, surface_id, area, + dirty_rects, num_dirty_rects, clear_dirty_region); + } else { + assert(cookie != NULL); +@@ -193,7 +193,7 @@ static void qxl_spice_destroy_surface_wait(PCIQXLDevice *qxl, uint32_t id, + cookie->u.surface_id = id; + spice_qxl_destroy_surface_async(&qxl->ssd.qxl, id, (uintptr_t)cookie); + } else { +- qxl->ssd.worker->destroy_surface_wait(qxl->ssd.worker, id); ++ spice_qxl_destroy_surface_wait(&qxl->ssd.qxl, id); + qxl_spice_destroy_surface_wait_complete(qxl, id); + } + } +@@ -211,19 +211,19 @@ void qxl_spice_loadvm_commands(PCIQXLDevice *qxl, struct QXLCommandExt *ext, + uint32_t count) + { + trace_qxl_spice_loadvm_commands(qxl->id, ext, count); +- qxl->ssd.worker->loadvm_commands(qxl->ssd.worker, ext, count); ++ spice_qxl_loadvm_commands(&qxl->ssd.qxl, ext, count); + } + + void qxl_spice_oom(PCIQXLDevice *qxl) + { + trace_qxl_spice_oom(qxl->id); +- qxl->ssd.worker->oom(qxl->ssd.worker); ++ spice_qxl_oom(&qxl->ssd.qxl); + } + + void qxl_spice_reset_memslots(PCIQXLDevice *qxl) + { + trace_qxl_spice_reset_memslots(qxl->id); +- qxl->ssd.worker->reset_memslots(qxl->ssd.worker); ++ spice_qxl_reset_memslots(&qxl->ssd.qxl); + } + + static void qxl_spice_destroy_surfaces_complete(PCIQXLDevice *qxl) +@@ -244,7 +244,7 @@ static void qxl_spice_destroy_surfaces(PCIQXLDevice *qxl, qxl_async_io async) + (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_IO, + QXL_IO_DESTROY_ALL_SURFACES_ASYNC)); + } else { +- qxl->ssd.worker->destroy_surfaces(qxl->ssd.worker); ++ spice_qxl_destroy_surfaces(&qxl->ssd.qxl); + qxl_spice_destroy_surfaces_complete(qxl); + } + } +@@ -283,13 +283,13 @@ static void qxl_spice_monitors_config_async(PCIQXLDevice *qxl, int replay) + void qxl_spice_reset_image_cache(PCIQXLDevice *qxl) + { + trace_qxl_spice_reset_image_cache(qxl->id); +- qxl->ssd.worker->reset_image_cache(qxl->ssd.worker); ++ spice_qxl_reset_image_cache(&qxl->ssd.qxl); + } + + void qxl_spice_reset_cursor(PCIQXLDevice *qxl) + { + trace_qxl_spice_reset_cursor(qxl->id); +- qxl->ssd.worker->reset_cursor(qxl->ssd.worker); ++ spice_qxl_reset_cursor(&qxl->ssd.qxl); + qemu_mutex_lock(&qxl->track_lock); + qxl->guest_cursor = 0; + qemu_mutex_unlock(&qxl->track_lock); +diff --git a/ui/spice-core.c b/ui/spice-core.c +index 0585267..0cd60f3 100644 +--- a/ui/spice-core.c ++++ b/ui/spice-core.c +@@ -383,17 +383,16 @@ static SpiceChannelList *qmp_query_spice_channels(void) + struct sockaddr *paddr; + socklen_t plen; + ++ if (!(item->info->flags & SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT)) { ++ error_report("invalid channel event"); ++ return NULL; ++ } ++ + chan = g_malloc0(sizeof(*chan)); + chan->value = g_malloc0(sizeof(*chan->value)); + +- if (item->info->flags & SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT) { +- paddr = (struct sockaddr *)&item->info->paddr_ext; +- plen = item->info->plen_ext; +- } else { +- paddr = &item->info->paddr; +- plen = item->info->plen; +- } +- ++ paddr = (struct sockaddr *)&item->info->paddr_ext; ++ plen = item->info->plen_ext; + getnameinfo(paddr, plen, + host, sizeof(host), port, sizeof(port), + NI_NUMERICHOST | NI_NUMERICSERV); +diff --git a/ui/spice-display.c b/ui/spice-display.c +index d29d2ab..e2c24a9 100644 +--- a/ui/spice-display.c ++++ b/ui/spice-display.c +@@ -83,14 +83,14 @@ void qemu_spice_add_memslot(SimpleSpiceDisplay *ssd, QXLDevMemSlot *memslot, + (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_IO, + QXL_IO_MEMSLOT_ADD_ASYNC)); + } else { +- ssd->worker->add_memslot(ssd->worker, memslot); ++ spice_qxl_add_memslot(&ssd->qxl, memslot); + } + } + + void qemu_spice_del_memslot(SimpleSpiceDisplay *ssd, uint32_t gid, uint32_t sid) + { + trace_qemu_spice_del_memslot(ssd->qxl.id, gid, sid); +- ssd->worker->del_memslot(ssd->worker, gid, sid); ++ spice_qxl_del_memslot(&ssd->qxl, gid, sid); + } + + void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id, +@@ -103,7 +103,7 @@ void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id, + (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_IO, + QXL_IO_CREATE_PRIMARY_ASYNC)); + } else { +- ssd->worker->create_primary_surface(ssd->worker, id, surface); ++ spice_qxl_create_primary_surface(&ssd->qxl, id, surface); + } + } + +@@ -116,14 +116,14 @@ void qemu_spice_destroy_primary_surface(SimpleSpiceDisplay *ssd, + (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_IO, + QXL_IO_DESTROY_PRIMARY_ASYNC)); + } else { +- ssd->worker->destroy_primary_surface(ssd->worker, id); ++ spice_qxl_destroy_primary_surface(&ssd->qxl, id); + } + } + + void qemu_spice_wakeup(SimpleSpiceDisplay *ssd) + { + trace_qemu_spice_wakeup(ssd->qxl.id); +- ssd->worker->wakeup(ssd->worker); ++ spice_qxl_wakeup(&ssd->qxl); + } + + static void qemu_spice_create_one_update(SimpleSpiceDisplay *ssd, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-spice-stop-server-for-qxl-hard-reset.patch b/SOURCES/kvm-spice-stop-server-for-qxl-hard-reset.patch new file mode 100644 index 0000000..96c8fc3 --- /dev/null +++ b/SOURCES/kvm-spice-stop-server-for-qxl-hard-reset.patch @@ -0,0 +1,62 @@ +From 4997362f21fdf91a47dbcce2c8c27fcad673d21a Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 5 Sep 2014 12:30:37 +0200 +Subject: [PATCH 03/12] spice: stop server for qxl hard reset + +Message-id: <1409920238-9070-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 60876 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 3/4] spice: stop server for qxl hard reset +Bugzilla: 1054077 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Hard reset can happen at any time. We should be able to put qxl into a +known-good state no matter what. Stop spice server thread for reset so +it can't be confused by fetching stale commands lingering around in the +rings while we reset is ongoing. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 75c70e37bc4a6bdc394b4d1b163fe730abb82c72) +--- + hw/display/qxl.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 10 ++++++++++ + 1 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 4fe4f1b..6f8adc8 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -1146,8 +1146,14 @@ static void qxl_soft_reset(PCIQXLDevice *d) + + static void qxl_hard_reset(PCIQXLDevice *d, int loadvm) + { ++ bool startstop = qemu_spice_display_is_running(&d->ssd); ++ + trace_qxl_hard_reset(d->id, loadvm); + ++ if (startstop) { ++ qemu_spice_display_stop(); ++ } ++ + qxl_spice_reset_cursor(d); + qxl_spice_reset_image_cache(d); + qxl_reset_surfaces(d); +@@ -1161,6 +1167,10 @@ static void qxl_hard_reset(PCIQXLDevice *d, int loadvm) + } + qemu_spice_create_host_memslot(&d->ssd); + qxl_soft_reset(d); ++ ++ if (startstop) { ++ qemu_spice_display_start(); ++ } + } + + static void qxl_reset_handler(DeviceState *dev) +-- +1.7.1 + diff --git a/SOURCES/kvm-ssdt-fix-PBLK-length.patch b/SOURCES/kvm-ssdt-fix-PBLK-length.patch new file mode 100644 index 0000000..d0263a1 --- /dev/null +++ b/SOURCES/kvm-ssdt-fix-PBLK-length.patch @@ -0,0 +1,50 @@ +From 58ee433311cbd3f767efba8d062a84dead7ce44e Mon Sep 17 00:00:00 2001 +Message-Id: <58ee433311cbd3f767efba8d062a84dead7ce44e.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:11 +0100 +Subject: [PATCH 49/56] ssdt: fix PBLK length + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-50-git-send-email-mst@redhat.com> +Patchwork-id: 56355 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 49/57] ssdt: fix PBLK length +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +We don't really support CPU throttling, so supply 0 PBLK length. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 6ec80ef1502e90d19b90f021514debe32c8689a8) +--- + hw/i386/ssdt-proc.dsl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/ssdt-proc.dsl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/i386/ssdt-proc.dsl b/hw/i386/ssdt-proc.dsl +index 58333c7..8229bfd 100644 +--- a/hw/i386/ssdt-proc.dsl ++++ b/hw/i386/ssdt-proc.dsl +@@ -37,7 +37,7 @@ DefinitionBlock ("ssdt-proc.aml", "SSDT", 0x01, "BXPC", "BXSSDT", 0x1) + ACPI_EXTRACT_PROCESSOR_START ssdt_proc_start + ACPI_EXTRACT_PROCESSOR_END ssdt_proc_end + ACPI_EXTRACT_PROCESSOR_STRING ssdt_proc_name +- Processor(CPAA, 0xAA, 0x0000b010, 0x06) { ++ Processor(CPAA, 0xAA, 0x00000000, 0x0) { + ACPI_EXTRACT_NAME_BYTE_CONST ssdt_proc_id + Name(ID, 0xAA) + /* +-- +1.7.11.7 + diff --git a/SOURCES/kvm-ssdt-proc-update-generated-file.patch b/SOURCES/kvm-ssdt-proc-update-generated-file.patch new file mode 100644 index 0000000..900f2e8 --- /dev/null +++ b/SOURCES/kvm-ssdt-proc-update-generated-file.patch @@ -0,0 +1,73 @@ +From 7677a5cbf45e70853de5e5af2de447ff585aee39 Mon Sep 17 00:00:00 2001 +Message-Id: <7677a5cbf45e70853de5e5af2de447ff585aee39.1387298827.git.minovotn@redhat.com> +In-Reply-To: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +References: <3ed0fb61a3dc912ef036d7ef450bed192090709e.1387298827.git.minovotn@redhat.com> +From: "Michael S. Tsirkin" +Date: Tue, 17 Dec 2013 15:19:13 +0100 +Subject: [PATCH 50/56] ssdt-proc: update generated file + +RH-Author: Michael S. Tsirkin +Message-id: <1387293161-4085-51-git-send-email-mst@redhat.com> +Patchwork-id: 56356 +O-Subject: [PATCH qemu-kvm RHEL7.0 v2 50/57] ssdt-proc: update generated file +Bugzilla: 1034876 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +Update generated ssdt proc hex file (used for systems +lacking IASL) after P_BLK length change. + +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Reviewed-by: Igor Mammedov +Tested-by: Igor Mammedov +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 742f5d2ed578bb53b2130b6da2c66de9929f4821) +--- + hw/i386/ssdt-proc.hex.generated | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/i386/ssdt-proc.hex.generated | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/hw/i386/ssdt-proc.hex.generated b/hw/i386/ssdt-proc.hex.generated +index a28172e..bb9920d 100644 +--- a/hw/i386/ssdt-proc.hex.generated ++++ b/hw/i386/ssdt-proc.hex.generated +@@ -11,7 +11,7 @@ static unsigned char ssdp_proc_aml[] = { + 0x0, + 0x0, + 0x1, +-0xb3, ++0xb8, + 0x42, + 0x58, + 0x50, +@@ -34,9 +34,9 @@ static unsigned char ssdp_proc_aml[] = { + 0x4e, + 0x54, + 0x4c, +-0x28, +-0x5, +-0x10, ++0x23, ++0x8, ++0x13, + 0x20, + 0x5b, + 0x83, +@@ -51,7 +51,7 @@ static unsigned char ssdp_proc_aml[] = { + 0xb0, + 0x0, + 0x0, +-0x6, ++0x0, + 0x8, + 0x49, + 0x44, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-ssh-Don-t-crash-if-either-host-or-path-is-not-specif.patch b/SOURCES/kvm-ssh-Don-t-crash-if-either-host-or-path-is-not-specif.patch new file mode 100644 index 0000000..90e1e93 --- /dev/null +++ b/SOURCES/kvm-ssh-Don-t-crash-if-either-host-or-path-is-not-specif.patch @@ -0,0 +1,70 @@ +From 566d5a879e639f0dd5beacf49e5fcb03691aac09 Mon Sep 17 00:00:00 2001 +From: Richard Jones +Date: Mon, 8 Jun 2015 11:57:00 +0200 +Subject: [PATCH 07/30] ssh: Don't crash if either host or path is not + specified. + +Message-id: <1433764620-20506-7-git-send-email-rjones@redhat.com> +Patchwork-id: 65481 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 6/6] ssh: Don't crash if either host or path is not specified. +Bugzilla: 1226683 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +From: "Richard W.M. Jones" + +$ ./qemu-img create -f qcow2 overlay \ + -b 'json: { "file.driver":"ssh", + "file.host":"localhost", + "file.host_key_check":"no" }' +qemu-img: qobject/qdict.c:193: qdict_get_obj: Assertion `obj != ((void *)0)' failed. +Aborted + +A similar crash also happens if the file.host field is omitted. + +https://bugzilla.redhat.com/show_bug.cgi?id=1147343 + +Bug found and reported by Jun Li. + +Signed-off-by: Richard W.M. Jones +Reviewed-by: Gonglei +Signed-off-by: Stefan Hajnoczi + +Upstream-status: 18fe46d79a6de61cb2c379fb610d834ef658d84b +Signed-off-by: Miroslav Rezanina +--- + block/ssh.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/block/ssh.c b/block/ssh.c +index 3b4d9e7..b00ff7f 100644 +--- a/block/ssh.c ++++ b/block/ssh.c +@@ -517,6 +517,11 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + const char *host, *user, *path, *host_key_check; + int port; + ++ if (!qdict_haskey(options, "host")) { ++ ret = -EINVAL; ++ error_setg(errp, "No hostname was specified"); ++ goto err; ++ } + host = qdict_get_str(options, "host"); + + if (qdict_haskey(options, "port")) { +@@ -525,6 +530,11 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options, + port = 22; + } + ++ if (!qdict_haskey(options, "path")) { ++ ret = -EINVAL; ++ error_setg(errp, "No path was specified"); ++ goto err; ++ } + path = qdict_get_str(options, "path"); + + if (qdict_haskey(options, "user")) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-support-using-KVM_MEM_READONLY-flag-for-regions.patch b/SOURCES/kvm-support-using-KVM_MEM_READONLY-flag-for-regions.patch new file mode 100644 index 0000000..d6b4b42 --- /dev/null +++ b/SOURCES/kvm-support-using-KVM_MEM_READONLY-flag-for-regions.patch @@ -0,0 +1,158 @@ +From 8140691df300c06f99981832cf2f19a2e5e5d0b9 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 17:59:57 +0100 +Subject: [PATCH 07/22] kvm: support using KVM_MEM_READONLY flag for regions + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-8-git-send-email-lersek@redhat.com> +Patchwork-id: 56619 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 07/18] kvm: support using KVM_MEM_READONLY flag for regions +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Jordan Justen + +For readonly memory regions and rom devices in romd_mode, +we make use of the KVM_MEM_READONLY. A slot that uses +KVM_MEM_READONLY can be read from and code can execute from the +region, but writes will exit to qemu. + +For rom devices with !romd_mode, we force the slot to be +removed so reads or writes to the region will exit to qemu. +(Note that a memory region in this state is not executable +within kvm.) + +v7: + * Update for readable => romd_mode rename (5f9a5ea1) + +Signed-off-by: Jordan Justen +Reviewed-by: Xiao Guangrong (v4) +Reviewed-by: Paolo Bonzini (v5) +Message-id: 1369816047-16384-4-git-send-email-jordan.l.justen@intel.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 235e8982ad393e5611cb892df54881c872eea9e1) +Signed-off-by: Laszlo Ersek +--- + kvm-all.c | 37 ++++++++++++++++++++++++++++--------- + 1 file changed, 28 insertions(+), 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 37 ++++++++++++++++++++++++++++--------- + 1 files changed, 28 insertions(+), 9 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 0a70ca1..42c71b9 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -203,12 +203,18 @@ static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot) + + mem.slot = slot->slot; + mem.guest_phys_addr = slot->start_addr; +- mem.memory_size = slot->memory_size; + mem.userspace_addr = (unsigned long)slot->ram; + mem.flags = slot->flags; + if (s->migration_log) { + mem.flags |= KVM_MEM_LOG_DIRTY_PAGES; + } ++ if (mem.flags & KVM_MEM_READONLY) { ++ /* Set the slot size to 0 before setting the slot to the desired ++ * value. This is needed based on KVM commit 75d61fbc. */ ++ mem.memory_size = 0; ++ kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem); ++ } ++ mem.memory_size = slot->memory_size; + return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem); + } + +@@ -270,9 +276,14 @@ err: + * dirty pages logging control + */ + +-static int kvm_mem_flags(KVMState *s, bool log_dirty) ++static int kvm_mem_flags(KVMState *s, bool log_dirty, bool readonly) + { +- return log_dirty ? KVM_MEM_LOG_DIRTY_PAGES : 0; ++ int flags = 0; ++ flags = log_dirty ? KVM_MEM_LOG_DIRTY_PAGES : 0; ++ if (readonly && kvm_readonly_mem_allowed) { ++ flags |= KVM_MEM_READONLY; ++ } ++ return flags; + } + + static int kvm_slot_dirty_pages_log_change(KVMSlot *mem, bool log_dirty) +@@ -283,7 +294,7 @@ static int kvm_slot_dirty_pages_log_change(KVMSlot *mem, bool log_dirty) + + old_flags = mem->flags; + +- flags = (mem->flags & ~mask) | kvm_mem_flags(s, log_dirty); ++ flags = (mem->flags & ~mask) | kvm_mem_flags(s, log_dirty, false); + mem->flags = flags; + + /* If nothing changed effectively, no need to issue ioctl */ +@@ -601,6 +612,8 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + int err; + MemoryRegion *mr = section->mr; + bool log_dirty = memory_region_is_logging(mr); ++ bool writeable = !mr->readonly && !mr->rom_device; ++ bool readonly_flag = mr->readonly || memory_region_is_romd(mr); + hwaddr start_addr = section->offset_within_address_space; + ram_addr_t size = section->size; + void *ram = NULL; +@@ -620,7 +633,13 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + } + + if (!memory_region_is_ram(mr)) { +- return; ++ if (writeable || !kvm_readonly_mem_allowed) { ++ return; ++ } else if (!mr->romd_mode) { ++ /* If the memory device is not in romd_mode, then we actually want ++ * to remove the kvm memory slot so all accesses will trap. */ ++ add = false; ++ } + } + + ram = memory_region_get_ram_ptr(mr) + section->offset_within_region + delta; +@@ -669,7 +688,7 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + mem->memory_size = old.memory_size; + mem->start_addr = old.start_addr; + mem->ram = old.ram; +- mem->flags = kvm_mem_flags(s, log_dirty); ++ mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag); + + err = kvm_set_user_memory_region(s, mem); + if (err) { +@@ -690,7 +709,7 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + mem->memory_size = start_addr - old.start_addr; + mem->start_addr = old.start_addr; + mem->ram = old.ram; +- mem->flags = kvm_mem_flags(s, log_dirty); ++ mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag); + + err = kvm_set_user_memory_region(s, mem); + if (err) { +@@ -714,7 +733,7 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + size_delta = mem->start_addr - old.start_addr; + mem->memory_size = old.memory_size - size_delta; + mem->ram = old.ram + size_delta; +- mem->flags = kvm_mem_flags(s, log_dirty); ++ mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag); + + err = kvm_set_user_memory_region(s, mem); + if (err) { +@@ -736,7 +755,7 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add) + mem->memory_size = size; + mem->start_addr = start_addr; + mem->ram = ram; +- mem->flags = kvm_mem_flags(s, log_dirty); ++ mem->flags = kvm_mem_flags(s, log_dirty, readonly_flag); + + err = kvm_set_user_memory_region(s, mem); + if (err) { +-- +1.7.1 + diff --git a/SOURCES/kvm-switch-rhel7-machine-types-to-big-bios.patch b/SOURCES/kvm-switch-rhel7-machine-types-to-big-bios.patch new file mode 100644 index 0000000..59c487b --- /dev/null +++ b/SOURCES/kvm-switch-rhel7-machine-types-to-big-bios.patch @@ -0,0 +1,53 @@ +From a1a0f3cf9b80f1d13f7dc10cf540c1ca19570b70 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 16 Jan 2014 09:31:59 -0500 +Subject: [PATCH 09/14] switch rhel7 machine types to big bios. + +Message-id: <1389864720-14128-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 56737 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/3] switch rhel7 machine types to big bios. +Bugzilla: 1038603 +RH-Acked-by: Orit Wasserman +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +related upstream commit: bcf2b7d2af7c54bb42be1229df9e78ba7d08d2a7 + +Signed-off-by: Gerd Hoffmann +--- + hw/i386/pc_piix.c | 1 + + hw/i386/pc_q35.c | 1 + + redhat/qemu-kvm.spec.template | 6 ++++-- + 3 files changed, 6 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 1 + + hw/i386/pc_q35.c | 1 + + redhat/qemu-kvm.spec.template | 6 ++++-- + 3 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 29c013a..e061877 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -756,6 +756,7 @@ static QEMUMachine pc_machine_rhel700 = { + .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .is_default = 1, ++ .default_machine_opts = "firmware=bios-256k.bin", + DEFAULT_MACHINE_OPTIONS, + }; + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 86c0c90..8d1a714 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -280,6 +280,7 @@ static QEMUMachine pc_q35_machine_rhel700 = { + .init = pc_q35_init_rhel700, + .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, ++ .default_machine_opts = "firmware=bios-256k.bin", + DEFAULT_MACHINE_OPTIONS, + }; + diff --git a/SOURCES/kvm-sysbus-Set-cannot_instantiate_with_device_add_yet.patch b/SOURCES/kvm-sysbus-Set-cannot_instantiate_with_device_add_yet.patch new file mode 100644 index 0000000..d1f05ce --- /dev/null +++ b/SOURCES/kvm-sysbus-Set-cannot_instantiate_with_device_add_yet.patch @@ -0,0 +1,499 @@ +From a44e7ab97ff7ed0494ba8746c73aa66afa506ef4 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:13 +0100 +Subject: [PATCH 37/81] sysbus: Set cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-9-git-send-email-kwolf@redhat.com> +Patchwork-id: 55534 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 08/17] sysbus: Set cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +device_add plugs devices into suitable bus. For "real" buses, that +actually connects the device. For sysbus, the connections need to be +made separately, and device_add can't do that. The device would be +left unconnected, and could not possibly work. + +Quite a few, but not all sysbus devices already set +cannot_instantiate_with_device_add_yet in their class init function. + +Set it in their abstract base's class init function +sysbus_device_class_init(), and remove the now redundant assignments +from device class init functions. + +Signed-off-by: Markus Armbruster +Reviewed-by: Marcel Apfelbaum +(cherry picked from pending upstream submission) + +Conflicts: + hw/dma/pl080.c + hw/i386/kvm/clock.c + hw/nvram/fw_cfg.c + hw/pci-host/piix.c + hw/timer/hpet.c + +Conflict resolution is always the same: drop redundant assignment, +keep context intact. Three additional redundant assignments dropped +in hw/display/pl110.c and hw/dma/pl080.c. +Signed-off-by: Kevin Wolf +--- + hw/alpha/typhoon.c | 2 -- + hw/arm/versatilepb.c | 1 - + hw/audio/pl041.c | 1 - + hw/core/sysbus.c | 7 +++++++ + hw/display/pl110.c | 3 --- + hw/dma/pl080.c | 2 -- + hw/i386/kvm/clock.c | 1 - + hw/i386/kvmvapic.c | 1 - + hw/intc/arm_gic.c | 1 - + hw/intc/arm_gic_common.c | 1 - + hw/intc/arm_gic_kvm.c | 1 - + hw/intc/ioapic_common.c | 1 - + hw/intc/pl190.c | 1 - + hw/isa/isa-bus.c | 1 - + hw/misc/arm_l2x0.c | 1 - + hw/nvram/fw_cfg.c | 1 - + hw/pci-host/bonito.c | 2 -- + hw/pci-host/grackle.c | 2 -- + hw/pci-host/piix.c | 1 - + hw/pci-host/prep.c | 1 - + hw/ppc/spapr_vio.c | 2 -- + hw/s390x/ipl.c | 1 - + hw/s390x/s390-virtio-bus.c | 2 -- + hw/s390x/virtio-ccw.c | 2 -- + hw/sd/pl181.c | 1 - + hw/timer/arm_mptimer.c | 1 - + hw/timer/hpet.c | 1 - + hw/timer/pl031.c | 1 - + 28 files changed, 7 insertions(+), 36 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/alpha/typhoon.c | 2 -- + hw/arm/versatilepb.c | 1 - + hw/audio/pl041.c | 1 - + hw/core/sysbus.c | 7 +++++++ + hw/display/pl110.c | 3 --- + hw/dma/pl080.c | 2 -- + hw/i386/kvm/clock.c | 1 - + hw/i386/kvmvapic.c | 1 - + hw/intc/arm_gic.c | 1 - + hw/intc/arm_gic_common.c | 1 - + hw/intc/arm_gic_kvm.c | 1 - + hw/intc/ioapic_common.c | 1 - + hw/intc/pl190.c | 1 - + hw/isa/isa-bus.c | 1 - + hw/misc/arm_l2x0.c | 1 - + hw/nvram/fw_cfg.c | 1 - + hw/pci-host/bonito.c | 2 -- + hw/pci-host/grackle.c | 2 -- + hw/pci-host/piix.c | 1 - + hw/pci-host/prep.c | 1 - + hw/ppc/spapr_vio.c | 2 -- + hw/s390x/ipl.c | 1 - + hw/s390x/s390-virtio-bus.c | 2 -- + hw/s390x/virtio-ccw.c | 2 -- + hw/sd/pl181.c | 1 - + hw/timer/arm_mptimer.c | 1 - + hw/timer/hpet.c | 1 - + hw/timer/pl031.c | 1 - + 28 files changed, 7 insertions(+), 36 deletions(-) + +diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c +index 55a0e76..070c34b 100644 +--- a/hw/alpha/typhoon.c ++++ b/hw/alpha/typhoon.c +@@ -819,11 +819,9 @@ static int typhoon_pcihost_init(SysBusDevice *dev) + + static void typhoon_pcihost_class_init(ObjectClass *klass, void *data) + { +- DeviceClass *dc = DEVICE_CLASS(klass); + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = typhoon_pcihost_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo typhoon_pcihost_info = { +diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c +index 84cd1ed..adc7a5d 100644 +--- a/hw/arm/versatilepb.c ++++ b/hw/arm/versatilepb.c +@@ -387,7 +387,6 @@ static void vpb_sic_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = vpb_sic_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_vpb_sic; + } + +diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c +index 36a7ecb..227ddf9 100644 +--- a/hw/audio/pl041.c ++++ b/hw/audio/pl041.c +@@ -627,7 +627,6 @@ static void pl041_device_class_init(ObjectClass *klass, void *data) + + k->init = pl041_init; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = pl041_device_reset; + dc->vmsd = &vmstate_pl041; + dc->props = pl041_device_properties; +diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c +index 9004d8c..e07f1c4 100644 +--- a/hw/core/sysbus.c ++++ b/hw/core/sysbus.c +@@ -257,6 +257,13 @@ static void sysbus_device_class_init(ObjectClass *klass, void *data) + DeviceClass *k = DEVICE_CLASS(klass); + k->init = sysbus_device_init; + k->bus_type = TYPE_SYSTEM_BUS; ++ /* ++ * device_add plugs devices into suitable bus. For "real" buses, ++ * that actually connects the device. For sysbus, the connections ++ * need to be made separately, and device_add can't do that. The ++ * device would be left unconncected, and could not possibly work. ++ */ ++ k->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo sysbus_device_type_info = { +diff --git a/hw/display/pl110.c b/hw/display/pl110.c +index 173ddf8..f4acf78 100644 +--- a/hw/display/pl110.c ++++ b/hw/display/pl110.c +@@ -482,7 +482,6 @@ static void pl110_class_init(ObjectClass *klass, void *data) + + k->init = pl110_init; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl110; + } + +@@ -500,7 +499,6 @@ static void pl110_versatile_class_init(ObjectClass *klass, void *data) + + k->init = pl110_versatile_init; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl110; + } + +@@ -518,7 +516,6 @@ static void pl111_class_init(ObjectClass *klass, void *data) + + k->init = pl111_init; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl110; + } + +diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c +index 2920780..e00ccdb 100644 +--- a/hw/dma/pl080.c ++++ b/hw/dma/pl080.c +@@ -382,7 +382,6 @@ static void pl080_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl080_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl080; + } + +@@ -399,7 +398,6 @@ static void pl081_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl081_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl080; + } + +diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c +index 6204939..6d6f3a7 100644 +--- a/hw/i386/kvm/clock.c ++++ b/hw/i386/kvm/clock.c +@@ -110,7 +110,6 @@ static void kvmclock_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = kvmclock_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &kvmclock_vmsd; + } + +diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c +index e6405da..a7db94d 100644 +--- a/hw/i386/kvmvapic.c ++++ b/hw/i386/kvmvapic.c +@@ -809,7 +809,6 @@ static void vapic_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *sc = SYS_BUS_DEVICE_CLASS(klass); + DeviceClass *dc = DEVICE_CLASS(klass); + +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = vapic_reset; + dc->vmsd = &vmstate_vapic; + sc->init = vapic_init; +diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c +index 243cbf1..8c72437 100644 +--- a/hw/intc/arm_gic.c ++++ b/hw/intc/arm_gic.c +@@ -702,7 +702,6 @@ static void arm_gic_class_init(ObjectClass *klass, void *data) + DeviceClass *dc = DEVICE_CLASS(klass); + ARMGICClass *agc = ARM_GIC_CLASS(klass); + +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + agc->parent_realize = dc->realize; + dc->realize = arm_gic_realize; + } +diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c +index 26b7756..0192537 100644 +--- a/hw/intc/arm_gic_common.c ++++ b/hw/intc/arm_gic_common.c +@@ -156,7 +156,6 @@ static void arm_gic_common_class_init(ObjectClass *klass, void *data) + dc->realize = arm_gic_common_realize; + dc->props = arm_gic_common_properties; + dc->vmsd = &vmstate_gic; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo arm_gic_common_type = { +diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c +index cb4ce23..9b8a106 100644 +--- a/hw/intc/arm_gic_kvm.c ++++ b/hw/intc/arm_gic_kvm.c +@@ -148,7 +148,6 @@ static void kvm_arm_gic_class_init(ObjectClass *klass, void *data) + kgc->parent_reset = dc->reset; + dc->realize = kvm_arm_gic_realize; + dc->reset = kvm_arm_gic_reset; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo kvm_arm_gic_info = { +diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c +index ce610b7..8e555de 100644 +--- a/hw/intc/ioapic_common.c ++++ b/hw/intc/ioapic_common.c +@@ -100,7 +100,6 @@ static void ioapic_common_class_init(ObjectClass *klass, void *data) + + sc->init = ioapic_init_common; + dc->vmsd = &vmstate_ioapic_common; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo ioapic_common_type = { +diff --git a/hw/intc/pl190.c b/hw/intc/pl190.c +index ff0e5b0..2cda150 100644 +--- a/hw/intc/pl190.c ++++ b/hw/intc/pl190.c +@@ -269,7 +269,6 @@ static void pl190_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl190_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = pl190_reset; + dc->vmsd = &vmstate_pl190; + } +diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c +index a87a841..3471d0f 100644 +--- a/hw/isa/isa-bus.c ++++ b/hw/isa/isa-bus.c +@@ -217,7 +217,6 @@ static void isabus_bridge_class_init(ObjectClass *klass, void *data) + + k->init = isabus_bridge_init; + dc->fw_name = "isa"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo isabus_bridge_info = { +diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c +index 2b19e34..21bf291 100644 +--- a/hw/misc/arm_l2x0.c ++++ b/hw/misc/arm_l2x0.c +@@ -174,7 +174,6 @@ static void l2x0_class_init(ObjectClass *klass, void *data) + + k->init = l2x0_priv_init; + dc->vmsd = &vmstate_l2x0; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = l2x0_properties; + dc->reset = l2x0_priv_reset; + } +diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c +index 155edd4..3fa1488 100644 +--- a/hw/nvram/fw_cfg.c ++++ b/hw/nvram/fw_cfg.c +@@ -559,7 +559,6 @@ static void fw_cfg_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = fw_cfg_init1; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = fw_cfg_reset; + dc->vmsd = &vmstate_fw_cfg; + dc->props = fw_cfg_properties; +diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c +index b73359e..c2a056a 100644 +--- a/hw/pci-host/bonito.c ++++ b/hw/pci-host/bonito.c +@@ -824,11 +824,9 @@ static const TypeInfo bonito_info = { + + static void bonito_pcihost_class_init(ObjectClass *klass, void *data) + { +- DeviceClass *dc = DEVICE_CLASS(klass); + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = bonito_pcihost_initfn; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo bonito_pcihost_info = { +diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c +index 5eb2840..4643beb 100644 +--- a/hw/pci-host/grackle.c ++++ b/hw/pci-host/grackle.c +@@ -143,10 +143,8 @@ static const TypeInfo grackle_pci_info = { + static void pci_grackle_class_init(ObjectClass *klass, void *data) + { + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); +- DeviceClass *dc = DEVICE_CLASS(klass); + + k->init = pci_grackle_init_device; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo grackle_pci_host_info = { +diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c +index b9c2dcf..20cc682 100644 +--- a/hw/pci-host/piix.c ++++ b/hw/pci-host/piix.c +@@ -636,7 +636,6 @@ static void i440fx_pcihost_class_init(ObjectClass *klass, void *data) + + k->init = i440fx_pcihost_initfn; + dc->fw_name = "pci"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo i440fx_pcihost_info = { +diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c +index eec538e..cdb401f 100644 +--- a/hw/pci-host/prep.c ++++ b/hw/pci-host/prep.c +@@ -213,7 +213,6 @@ static void raven_pcihost_class_init(ObjectClass *klass, void *data) + set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); + dc->realize = raven_pcihost_realizefn; + dc->fw_name = "pci"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo raven_pcihost_info = { +diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c +index 42b6367..0cc840e 100644 +--- a/hw/ppc/spapr_vio.c ++++ b/hw/ppc/spapr_vio.c +@@ -529,11 +529,9 @@ static int spapr_vio_bridge_init(SysBusDevice *dev) + + static void spapr_vio_bridge_class_init(ObjectClass *klass, void *data) + { +- DeviceClass *dc = DEVICE_CLASS(klass); + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = spapr_vio_bridge_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo spapr_vio_bridge_info = { +diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c +index f86a4af..cc29d8e 100644 +--- a/hw/s390x/ipl.c ++++ b/hw/s390x/ipl.c +@@ -181,7 +181,6 @@ static void s390_ipl_class_init(ObjectClass *klass, void *data) + k->init = s390_ipl_init; + dc->props = s390_ipl_properties; + dc->reset = s390_ipl_reset; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo s390_ipl_info = { +diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c +index 9078bfb..2fce4c5 100644 +--- a/hw/s390x/s390-virtio-bus.c ++++ b/hw/s390x/s390-virtio-bus.c +@@ -675,11 +675,9 @@ static int s390_virtio_bridge_init(SysBusDevice *dev) + + static void s390_virtio_bridge_class_init(ObjectClass *klass, void *data) + { +- DeviceClass *dc = DEVICE_CLASS(klass); + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = s390_virtio_bridge_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo s390_virtio_bridge_info = { +diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c +index 74eb559..d981101 100644 +--- a/hw/s390x/virtio-ccw.c ++++ b/hw/s390x/virtio-ccw.c +@@ -1071,11 +1071,9 @@ static int virtual_css_bridge_init(SysBusDevice *dev) + + static void virtual_css_bridge_class_init(ObjectClass *klass, void *data) + { +- DeviceClass *dc = DEVICE_CLASS(klass); + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = virtual_css_bridge_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo virtual_css_bridge_info = { +diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c +index 95e4587..c5ad890 100644 +--- a/hw/sd/pl181.c ++++ b/hw/sd/pl181.c +@@ -497,7 +497,6 @@ static void pl181_class_init(ObjectClass *klass, void *data) + sdc->init = pl181_init; + k->vmsd = &vmstate_pl181; + k->reset = pl181_reset; +- k->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo pl181_info = { +diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c +index 6b088fa..aab4ae4 100644 +--- a/hw/timer/arm_mptimer.c ++++ b/hw/timer/arm_mptimer.c +@@ -290,7 +290,6 @@ static void arm_mptimer_class_init(ObjectClass *klass, void *data) + sbc->init = arm_mptimer_init; + dc->vmsd = &vmstate_arm_mptimer; + dc->reset = arm_mptimer_reset; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->props = arm_mptimer_properties; + } + +diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c +index 3f7f457..dd486a1 100644 +--- a/hw/timer/hpet.c ++++ b/hw/timer/hpet.c +@@ -739,7 +739,6 @@ static void hpet_device_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = hpet_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->reset = hpet_reset; + dc->vmsd = &vmstate_hpet; + dc->props = hpet_device_properties; +diff --git a/hw/timer/pl031.c b/hw/timer/pl031.c +index aa9c5a6..241e7c8 100644 +--- a/hw/timer/pl031.c ++++ b/hw/timer/pl031.c +@@ -246,7 +246,6 @@ static void pl031_class_init(ObjectClass *klass, void *data) + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); + + k->init = pl031_init; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_pl031; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-sysfw-remove-read-only-pc_sysfw_flash_vs_rom_bug_com.patch b/SOURCES/kvm-sysfw-remove-read-only-pc_sysfw_flash_vs_rom_bug_com.patch new file mode 100644 index 0000000..6adb0d0 --- /dev/null +++ b/SOURCES/kvm-sysfw-remove-read-only-pc_sysfw_flash_vs_rom_bug_com.patch @@ -0,0 +1,84 @@ +From 6c03a5a402c6438f8873f81f4a24514eddf475e7 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sat, 11 Jan 2014 18:00:00 +0100 +Subject: [PATCH 10/22] sysfw: remove read-only pc_sysfw_flash_vs_rom_bug_compatible + +RH-Author: Laszlo Ersek +Message-id: <1389463208-6278-11-git-send-email-lersek@redhat.com> +Patchwork-id: 56624 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 10/18] sysfw: remove read-only pc_sysfw_flash_vs_rom_bug_compatible +Bugzilla: 1032346 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Andrew Jones + +From: Paolo Bonzini + +The variable is not written anymore. + +This cleans up after 9e1c2ec (which accidentally left variable +pc_sysfw_flash_vs_rom_bug_compatible behind, value always zero), and +buries dead code from commit dafb82e (which resurrected the pc_sysfw +code for pc_sysfw_flash_vs_rom_bug_compatible by mistake). + +Signed-off-by: Paolo Bonzini +Message-id: 1376069702-22330-2-git-send-email-aliguori@us.ibm.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 133bb095acf536f85e7e57821596c8c844aaa583) +Signed-off-by: Laszlo Ersek +--- + hw/block/pc_sysfw.c | 26 +------------------------- + 1 file changed, 1 insertion(+), 25 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/pc_sysfw.c | 26 +------------------------- + 1 files changed, 1 insertions(+), 25 deletions(-) + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 76932fc..38261b1 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -196,12 +196,6 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw) + bios); + } + +-/* +- * Bug-compatible flash vs. ROM selection enabled? +- * A few older machines enable this. +- */ +-bool pc_sysfw_flash_vs_rom_bug_compatible; +- + void pc_system_firmware_init(MemoryRegion *rom_memory) + { + DriveInfo *pflash_drv; +@@ -219,25 +213,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory) + + pflash_drv = drive_get(IF_PFLASH, 0, 0); + +- if (pc_sysfw_flash_vs_rom_bug_compatible) { +- /* +- * This is a Bad Idea, because it makes enabling/disabling KVM +- * guest-visible. Do it only in bug-compatibility mode. +- */ +- if (kvm_enabled()) { +- if (pflash_drv != NULL) { +- fprintf(stderr, "qemu: pflash cannot be used with kvm enabled\n"); +- exit(1); +- } else { +- /* In old pc_sysfw_flash_vs_rom_bug_compatible mode, we assume +- * that KVM cannot execute from device memory. In this case, we +- * use old rom based firmware initialization for KVM. But, since +- * this is different from non-kvm mode, this behavior is +- * undesirable */ +- sysfw_dev->rom_only = 1; +- } +- } +- } else if (pflash_drv == NULL) { ++ if (pflash_drv == NULL) { + /* When a pflash drive is not found, use rom-mode */ + sysfw_dev->rom_only = 1; + } else if (kvm_enabled() && !kvm_readonly_mem_enabled()) { +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Add-Intel-SHA_NI-instruction-support.patch b/SOURCES/kvm-target-i386-Add-Intel-SHA_NI-instruction-support.patch new file mode 100644 index 0000000..09943b4 --- /dev/null +++ b/SOURCES/kvm-target-i386-Add-Intel-SHA_NI-instruction-support.patch @@ -0,0 +1,61 @@ +From 481923b5c3cd124ba38ee34e803f15afae39c793 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 5 Oct 2017 22:39:07 +0200 +Subject: [PATCH 24/27] target-i386: Add Intel SHA_NI instruction support. + +RH-Author: Eduardo Habkost +Message-id: <20171005223908.431-2-ehabkost@redhat.com> +Patchwork-id: 76832 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/2] target-i386: Add Intel SHA_NI instruction support. +Bugzilla: 1450396 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das + +From: Yi Sun + +Add SHA_NI feature bit. Its spec can be found at: +https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf + +Backport notes: +* target/i386 is target-i386 in the QEMU 1.5.3 tree + +Signed-off-by: Yi Sun +Message-Id: <1481683803-10051-1-git-send-email-yi.y.sun@linux.intel.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 638cbd452d3a92a2ab18caee73078483d90f64eb) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + target-i386/cpu.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index fbd3117..e0749c0 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -151,7 +151,7 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + "avx512f", "avx512dq", "rdseed", "adx", + "smap", "avx512ifma", NULL, NULL, + NULL, NULL, "avx512pf", "avx512er", +- "avx512cd", NULL, "avx512bw", "avx512vl", ++ "avx512cd", "sha-ni", "avx512bw", "avx512vl", + }; + + static const char *cpuid_7_0_ecx_feature_name[] = { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 7a12c0d..78b8072 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -575,6 +575,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EBX_AVX512ER (1U << 27) /* AVX-512 Exponential and Reciprocal */ + #define CPUID_7_0_EBX_AVX512CD (1U << 28) /* AVX-512 Conflict Detection */ + #define CPUID_7_0_EBX_AVX512BW (1U << 30) /* AVX-512 Byte and Word Instructions */ ++#define CPUID_7_0_EBX_SHA_NI (1U << 29) /* SHA1/SHA256 Instruction Extensions */ + #define CPUID_7_0_EBX_AVX512VL (1U << 31) /* AVX-512 Vector Length Extensions */ + + #define CPUID_7_0_ECX_VBMI (1U << 1) /* AVX-512 Vector Byte Manipulation Instrs */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Add-PKU-and-and-OSPKE-support.patch b/SOURCES/kvm-target-i386-Add-PKU-and-and-OSPKE-support.patch new file mode 100644 index 0000000..7143ed0 --- /dev/null +++ b/SOURCES/kvm-target-i386-Add-PKU-and-and-OSPKE-support.patch @@ -0,0 +1,186 @@ +From 27f52a18ed8503f5a0333106c38e44f911052d4d Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 11 Sep 2017 21:57:36 +0200 +Subject: [PATCH 4/4] target-i386: Add PKU and and OSPKE support + +RH-Author: plai@redhat.com +Message-id: <1505167056-5861-1-git-send-email-plai@redhat.com> +Patchwork-id: 76308 +O-Subject: [RHEL7.5 PATCH BZ 1387648 v2] target-i386: Add PKU and and OSPKE support +Bugzilla: 1387648 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Huaitong Han + +------ v2 comment +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1387648 +BREW: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=14031692 + +In v1, Eduardo noticed "avx512-vpopcntdq" moved in +target-i386/cpu.c:cpuid_7_0_ecx_feature_name[]. +Corrected the patch typo here in v2. + +Tested on intel-purley-fpgabmp-01.khw.lab.eng.bos.redhat.com. +VM guest was fedora-26 image (linux 4.11.0-300). +Tests Run (of tools/testing/selftests/x86/protection_keys.c): + 1. Successful test on host, + 2. Successful negative test w/ current qemu-kvm in VM guest. + 3. Successful test w/ test build qemu-kvm in VM guest. +------ + +Add PKU and OSPKE CPUID features, including xsave state and +migration support. + +Signed-off-by: Huaitong Han +Reviewed-by: Eduardo Habkost +[ehabkost: squashed 3 patches together, edited patch description] +Signed-off-by: Eduardo Habkost + +(cherry picked from commit f74eefe0b98cd7e13825de8e8d9f32e22aed102c) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target-i386/cpu.c + target-i386/cpu.h + target-i386/kvm.c + target-i386/machine.c + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 6 ++++-- + target-i386/cpu.h | 6 ++++++ + target-i386/kvm.c | 3 +++ + target-i386/machine.c | 25 +++++++++++++++++++++++++ + 4 files changed, 38 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index ae56995..fbd3117 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -155,8 +155,8 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + }; + + static const char *cpuid_7_0_ecx_feature_name[] = { +- NULL, "avx512vbmi", NULL, NULL, +- NULL, NULL, NULL, NULL, ++ NULL, "avx512vbmi", NULL, "pku", ++ "ospke", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, "avx512-vpopcntdq", NULL, + NULL, NULL, NULL, NULL, +@@ -361,6 +361,8 @@ static const ExtSaveArea ext_save_areas[] = { + .offset = 0x480, .size = 0x200 }, + [7] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, + .offset = 0x680, .size = 0x400 }, ++ [9] = { .feature = FEAT_7_0_ECX, .bits = CPUID_7_0_ECX_PKU, ++ .offset = 0xA80, .size = 0x8 }, + }; + + const char *get_register_name_32(unsigned int reg) +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index ac60309..7a12c0d 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -394,6 +394,7 @@ + #define XSTATE_OPMASK (1ULL << 5) + #define XSTATE_ZMM_Hi256 (1ULL << 6) + #define XSTATE_Hi16_ZMM (1ULL << 7) ++#define XSTATE_PKRU (1ULL << 9) + + + /* CPUID feature words */ +@@ -586,6 +587,9 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ + #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ + ++#define CPUID_7_0_ECX_PKU (1U << 3) ++#define CPUID_7_0_ECX_OSPKE (1U << 4) ++ + #define CPUID_XSAVE_XSAVEOPT (1U << 0) + #define CPUID_XSAVE_XSAVEC (1U << 1) + #define CPUID_XSAVE_XGETBV1 (1U << 2) +@@ -1029,6 +1033,8 @@ typedef struct CPUX86State { + uint64_t xcr0; + uint64_t xss; + ++ uint32_t pkru; ++ + TPRAccess tpr_access_type; + } CPUX86State; + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 6a479f4..0dc0e79 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1008,6 +1008,7 @@ static int kvm_put_fpu(X86CPU *cpu) + #define XSAVE_OPMASK 272 + #define XSAVE_ZMM_Hi256 288 + #define XSAVE_Hi16_ZMM 416 ++#define XSAVE_PKRU 672 + + static int kvm_put_xsave(X86CPU *cpu) + { +@@ -1051,6 +1052,7 @@ static int kvm_put_xsave(X86CPU *cpu) + #ifdef TARGET_X86_64 + memcpy(&xsave->region[XSAVE_Hi16_ZMM], env->hi16_zmm_regs, + sizeof env->hi16_zmm_regs); ++ memcpy(&xsave->region[XSAVE_PKRU], &env->pkru, sizeof env->pkru); + #endif + r = kvm_vcpu_ioctl(CPU(cpu), KVM_SET_XSAVE, xsave); + return r; +@@ -1388,6 +1390,7 @@ static int kvm_get_xsave(X86CPU *cpu) + #ifdef TARGET_X86_64 + memcpy(env->hi16_zmm_regs, &xsave->region[XSAVE_Hi16_ZMM], + sizeof env->hi16_zmm_regs); ++ memcpy(&env->pkru, &xsave->region[XSAVE_PKRU], sizeof env->pkru); + #endif + return 0; + } +diff --git a/target-i386/machine.c b/target-i386/machine.c +index ce7fcd3..ba34088 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -722,6 +722,26 @@ static const VMStateDescription vmstate_xss = { + } + }; + ++#ifdef TARGET_X86_64 ++static bool pkru_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->pkru != 0; ++} ++ ++static const VMStateDescription vmstate_pkru = { ++ .name = "cpu/pkru", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]){ ++ VMSTATE_UINT32(env.pkru, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++#endif ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -871,6 +891,11 @@ const VMStateDescription vmstate_x86_cpu = { + }, { + .vmsd = &vmstate_xss, + .needed = xss_needed, ++#ifdef TARGET_X86_64 ++ }, { ++ .vmsd = &vmstate_pkru, ++ .needed = pkru_needed, ++#endif + } , { + /* empty */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Add-more-Intel-AVX-512-instructions-supp.patch b/SOURCES/kvm-target-i386-Add-more-Intel-AVX-512-instructions-supp.patch new file mode 100644 index 0000000..85efb16 --- /dev/null +++ b/SOURCES/kvm-target-i386-Add-more-Intel-AVX-512-instructions-supp.patch @@ -0,0 +1,93 @@ +From 73b0c0b62c08330e65e9ec3d54ae5738d4b5211d Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 9 Sep 2016 19:08:34 +0200 +Subject: [PATCH 2/2] target-i386: Add more Intel AVX-512 instructions support + +RH-Author: Eduardo Habkost +Message-id: <1473448114-1430-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 72277 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 2/2] target-i386: Add more Intel AVX-512 instructions support +Bugzilla: 1372459 +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: Luwei Kang + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1372459 + +Add more AVX512 feature bits, include AVX512DQ, AVX512IFMA, +AVX512BW, AVX512VL, AVX512VBMI. Its spec can be found at: +https://software.intel.com/sites/default/files/managed/b4/3a/319433-024.pdf + +Signed-off-by: Luwei Kang +Signed-off-by: Eduardo Habkost +(cherry picked from commit cc728d1493eee3e20c1547191862e43d3f55e714) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 14 +++++++++----- + target-i386/cpu.h | 13 +++++++++++++ + 2 files changed, 22 insertions(+), 5 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index d9c214c..476306d 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -144,14 +144,18 @@ static const char *svm_feature_name[] = { + }; + + static const char *cpuid_7_0_ebx_feature_name[] = { +- "fsgsbase", NULL, NULL, "bmi1", "hle", "avx2", NULL, "smep", +- "bmi2", "erms", "invpcid", "rtm", NULL, NULL, "mpx", NULL, +- "avx512f", NULL, "rdseed", "adx", "smap", NULL, NULL, NULL, +- NULL, NULL, "avx512pf", "avx512er", "avx512cd", NULL, NULL, NULL, ++ "fsgsbase", NULL, NULL, "bmi1", ++ "hle", "avx2", NULL, "smep", ++ "bmi2", "erms", "invpcid", "rtm", ++ NULL, NULL, "mpx", NULL, ++ "avx512f", "avx512dq", "rdseed", "adx", ++ "smap", "avx512ifma", NULL, NULL, ++ NULL, NULL, "avx512pf", "avx512er", ++ "avx512cd", NULL, "avx512bw", "avx512vl", + }; + + static const char *cpuid_7_0_ecx_feature_name[] = { +- NULL, NULL, NULL, NULL, ++ NULL, "avx512vbmi", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 5c62ee3..d541809 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -560,12 +560,25 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EBX_RTM (1U << 11) + #define CPUID_7_0_EBX_MPX (1U << 14) + #define CPUID_7_0_EBX_AVX512F (1U << 16) /* AVX-512 Foundation */ ++#define CPUID_7_0_EBX_AVX512DQ (1U << 17) /* AVX-512 Doubleword & Quadword Instrs */ + #define CPUID_7_0_EBX_RDSEED (1U << 18) + #define CPUID_7_0_EBX_ADX (1U << 19) + #define CPUID_7_0_EBX_SMAP (1U << 20) ++#define CPUID_7_0_EBX_AVX512IFMA (1U << 21) /* AVX-512 Integer Fused Multiply Add */ ++#define CPUID_7_0_EBX_PCOMMIT (1U << 22) /* Persistent Commit */ ++#define CPUID_7_0_EBX_CLFLUSHOPT (1U << 23) /* Flush a Cache Line Optimized */ ++#define CPUID_7_0_EBX_CLWB (1U << 24) /* Cache Line Write Back */ + #define CPUID_7_0_EBX_AVX512PF (1U << 26) /* AVX-512 Prefetch */ + #define CPUID_7_0_EBX_AVX512ER (1U << 27) /* AVX-512 Exponential and Reciprocal */ + #define CPUID_7_0_EBX_AVX512CD (1U << 28) /* AVX-512 Conflict Detection */ ++#define CPUID_7_0_EBX_AVX512BW (1U << 30) /* AVX-512 Byte and Word Instructions */ ++#define CPUID_7_0_EBX_AVX512VL (1U << 31) /* AVX-512 Vector Length Extensions */ ++ ++#define CPUID_7_0_ECX_VBMI (1U << 1) /* AVX-512 Vector Byte Manipulation Instrs */ ++#define CPUID_7_0_ECX_UMIP (1U << 2) ++#define CPUID_7_0_ECX_PKU (1U << 3) ++#define CPUID_7_0_ECX_OSPKE (1U << 4) ++#define CPUID_7_0_ECX_RDPID (1U << 22) + + #define CPUID_XSAVE_XSAVEOPT (1U << 0) + #define CPUID_XSAVE_XSAVEC (1U << 1) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Add-mpx-CPU-feature-name.patch b/SOURCES/kvm-target-i386-Add-mpx-CPU-feature-name.patch new file mode 100644 index 0000000..d808848 --- /dev/null +++ b/SOURCES/kvm-target-i386-Add-mpx-CPU-feature-name.patch @@ -0,0 +1,42 @@ +From 60fe9056e610b5ee15b4715586d816c099060f41 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:27 +0200 +Subject: [PATCH 07/10] target-i386: Add "mpx" CPU feature name + +Message-id: <1435260689-9556-7-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66503 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 6/8] target-i386: Add "mpx" CPU feature name +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +Migration support for MPX is already implemented (commit +79e9ebebbf2a00c46fcedb6dc7dd5e12bbd30216), so we can add it to the list +of known feature names. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5bd8ff07e65d066f1e90f05d49ee634f3ccd2664) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 96af1bf..fe60c33 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -145,7 +145,7 @@ static const char *svm_feature_name[] = { + + static const char *cpuid_7_0_ebx_feature_name[] = { + "fsgsbase", NULL, NULL, "bmi1", "hle", "avx2", NULL, "smep", +- "bmi2", "erms", "invpcid", "rtm", NULL, NULL, NULL, NULL, ++ "bmi2", "erms", "invpcid", "rtm", NULL, NULL, "mpx", NULL, + NULL, NULL, "rdseed", "adx", "smap", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + }; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Add-support-for-FEAT_7_0_ECX.patch b/SOURCES/kvm-target-i386-Add-support-for-FEAT_7_0_ECX.patch new file mode 100644 index 0000000..43d29aa --- /dev/null +++ b/SOURCES/kvm-target-i386-Add-support-for-FEAT_7_0_ECX.patch @@ -0,0 +1,147 @@ +From eb87f1106d038247356ecd3071e6fa5654386ff5 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 9 Sep 2016 19:08:33 +0200 +Subject: [PATCH 1/2] target-i386: Add support for FEAT_7_0_ECX + +RH-Author: Eduardo Habkost +Message-id: <1473448114-1430-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 72276 +O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 1/2] target-i386: Add support for FEAT_7_0_ECX +Bugzilla: 1372459 +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1372459 + +Done from scratch by copying what is done for FEAT_7_0_EBX. Compare +to upstream commit f74eefe ("target-i386: Add PKU and and OSPKE support", +2016-01-21), but without actually adding PKU and OSPKE. Because all +these features are "-cpu host"-only, they can be added without modifying +machine types. + +Signed-off-by: Paolo Bonzini +[ehabkost: v2: removed the non-upstream cpuid_level < 7 check] +Signed-off-by: Eduardo Habkost + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 29 ++++++++++++++++++++++++++++- + target-i386/cpu.h | 1 + + 2 files changed, 29 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 1001c47..d9c214c 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -150,6 +150,17 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + NULL, NULL, "avx512pf", "avx512er", "avx512cd", NULL, NULL, NULL, + }; + ++static const char *cpuid_7_0_ecx_feature_name[] = { ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++}; ++ + static const char *cpuid_xsave_feature_name[] = { + "xsaveopt", "xsavec", "xgetbv1", NULL, + NULL, NULL, NULL, NULL, +@@ -204,6 +215,12 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .cpuid_needs_ecx = true, .cpuid_ecx = 0, + .cpuid_reg = R_EBX, + }, ++ [FEAT_7_0_ECX] = { ++ .feat_names = cpuid_7_0_ecx_feature_name, ++ .cpuid_eax = 7, ++ .cpuid_needs_ecx = true, .cpuid_ecx = 0, ++ .cpuid_reg = R_ECX, ++ }, + [FEAT_XSAVE] = { + .feat_names = cpuid_xsave_feature_name, + .cpuid_eax = 0xd, +@@ -462,6 +479,7 @@ typedef struct x86_def_t { + CPUID_7_0_EBX_FSGSBASE, CPUID_7_0_EBX_HLE, CPUID_7_0_EBX_AVX2, + CPUID_7_0_EBX_ERMS, CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM, + CPUID_7_0_EBX_RDSEED */ ++#define TCG_7_0_ECX_FEATURES 0 + + /* built-in CPU model definitions + */ +@@ -1198,8 +1216,11 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + if (x86_cpu_def->level >= 7) { + x86_cpu_def->features[FEAT_7_0_EBX] = + kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); ++ x86_cpu_def->features[FEAT_7_0_ECX] = ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); + } else { + x86_cpu_def->features[FEAT_7_0_EBX] = 0; ++ x86_cpu_def->features[FEAT_7_0_ECX] = 0; + } + x86_cpu_def->features[FEAT_XSAVE] = + kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); +@@ -1283,6 +1304,9 @@ static int kvm_check_features_against_host(X86CPU *cpu) + {&env->features[FEAT_7_0_EBX], + &host_def.features[FEAT_7_0_EBX], + FEAT_7_0_EBX }, ++ {&env->features[FEAT_7_0_ECX], ++ &host_def.features[FEAT_7_0_ECX], ++ FEAT_7_0_ECX }, + {&env->features[FEAT_XSAVE], + &host_def.features[FEAT_XSAVE], + FEAT_XSAVE }, +@@ -1824,6 +1848,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + env->features[FEAT_KVM] |= plus_features[FEAT_KVM]; + env->features[FEAT_SVM] |= plus_features[FEAT_SVM]; + env->features[FEAT_7_0_EBX] |= plus_features[FEAT_7_0_EBX]; ++ env->features[FEAT_7_0_ECX] |= plus_features[FEAT_7_0_ECX]; + env->features[FEAT_XSAVE] |= plus_features[FEAT_XSAVE]; + env->features[FEAT_1_EDX] &= ~minus_features[FEAT_1_EDX]; + env->features[FEAT_1_ECX] &= ~minus_features[FEAT_1_ECX]; +@@ -1833,6 +1858,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + env->features[FEAT_KVM] &= ~minus_features[FEAT_KVM]; + env->features[FEAT_SVM] &= ~minus_features[FEAT_SVM]; + env->features[FEAT_7_0_EBX] &= ~minus_features[FEAT_7_0_EBX]; ++ env->features[FEAT_7_0_ECX] &= ~minus_features[FEAT_7_0_ECX]; + env->features[FEAT_XSAVE] &= ~minus_features[FEAT_XSAVE]; + + out: +@@ -1969,6 +1995,7 @@ static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + env->features[FEAT_SVM] = def->features[FEAT_SVM]; + env->features[FEAT_C000_0001_EDX] = def->features[FEAT_C000_0001_EDX]; + env->features[FEAT_7_0_EBX] = def->features[FEAT_7_0_EBX]; ++ env->features[FEAT_7_0_ECX] = def->features[FEAT_7_0_ECX]; + env->features[FEAT_XSAVE] = def->features[FEAT_XSAVE]; + env->cpuid_xlevel2 = def->xlevel2; + +@@ -2206,7 +2233,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + if (count == 0) { + *eax = 0; /* Maximum ECX value for sub-leaves */ + *ebx = env->features[FEAT_7_0_EBX]; /* Feature flags */ +- *ecx = 0; /* Reserved */ ++ *ecx = env->features[FEAT_7_0_ECX]; /* Feature flags */ + *edx = 0; /* Reserved */ + } else { + *eax = 0; +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index da7e060..5c62ee3 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -400,6 +400,7 @@ typedef enum FeatureWord { + FEAT_1_EDX, /* CPUID[1].EDX */ + FEAT_1_ECX, /* CPUID[1].ECX */ + FEAT_7_0_EBX, /* CPUID[EAX=7,ECX=0].EBX */ ++ FEAT_7_0_ECX, /* CPUID[EAX=7,ECX=0].ECX */ + FEAT_8000_0001_EDX, /* CPUID[8000_0001].EDX */ + FEAT_8000_0001_ECX, /* CPUID[8000_0001].ECX */ + FEAT_C000_0001_EDX, /* CPUID[C000_0001].EDX */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Add-support-for-UMIP-and-RDPID-CPUID-bit.patch b/SOURCES/kvm-target-i386-Add-support-for-UMIP-and-RDPID-CPUID-bit.patch new file mode 100644 index 0000000..c0de457 --- /dev/null +++ b/SOURCES/kvm-target-i386-Add-support-for-UMIP-and-RDPID-CPUID-bit.patch @@ -0,0 +1,82 @@ +From 9349e4be5ecf8b70dfc36f6cad56297cd7aa5fc9 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Wed, 27 Jun 2018 07:53:07 +0200 +Subject: [PATCH 02/17] target-i386: Add support for UMIP and RDPID CPUID bits + +RH-Author: plai@redhat.com +Message-id: <1526495303-9837-1-git-send-email-plai@redhat.com> +Patchwork-id: 80372 +O-Subject: [RHEL7.6 PATCH BZ 1526638] target-i386: Add support for UMIP and RDPID CPUID bits +Bugzilla: 1526638 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +From: Paolo Bonzini + +Tested by Intel OTC QA on icelake client hw. +Tested by Intel OTC Virtualization QA. Test Result: + XEN_UMIP_ENABLE : Check if UMIP has been enabled on the feature supported machine / PASS + XEN_UMIP_DISABLE: Verify if the UMIP can be turned off by boot. / PASS + XEN_UMIP_TEST : Check if the protection effect on the instructions of sgdt/sidt/sldt/smsw/str / PASS + XEN_UMIP_EX_TEST :Check if the protection effects on instruction of str, sldtand smsw for register and memory operands. /PASS + XEN_UMIP_TEST: Check if the protection effect on the instructions of sgdt/sidt/sldt/smsw/str / PASS + XEN_UMIP_EX_TEST: Check if the protection effects on instruction of str, sldtand smsw for register and memory operands / PASS + XEN_UMIP_LDT: Verify all the possible 32-bit address encodings / PASS + +These are both stored in CPUID[EAX=7,EBX=0].ECX. KVM is going to +be able to emulate both (albeit with a performance loss in the case +of RDPID, which therefore will be in KVM_GET_EMULATED_CPUID rather +than KVM_GET_SUPPORTED_CPUID). + +It's also possible to implement both in TCG, but this is for 2.8. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Eduardo Habkost +(cherry picked from commit c2f193b538032accb9db504998bf2ea7c0ef65af) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target-i386/cpu.c +--- + target-i386/cpu.c | 4 ++-- + target-i386/cpu.h | 2 ++ + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 48a5507..0254747 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -155,12 +155,12 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + }; + + static const char *cpuid_7_0_ecx_feature_name[] = { +- NULL, "avx512vbmi", NULL, "pku", ++ NULL, "avx512vbmi", "umip", "pku", + "ospke", NULL, "avx512vbmi2", NULL, + "gfni", "vaes", "vpclmulqdq", "avx512vnni", + "avx512bitalg", NULL, "avx512-vpopcntdq", NULL, + NULL, NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, ++ NULL, NULL, "rdpid", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }; +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index a781639..c72b545 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -600,8 +600,10 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + + #define CPUID_8000_0008_EBX_IBPB (1U << 12) /* Indirect Branch Prediction Barrier */ + ++#define CPUID_7_0_ECX_UMIP (1U << 2) + #define CPUID_7_0_ECX_PKU (1U << 3) + #define CPUID_7_0_ECX_OSPKE (1U << 4) ++#define CPUID_7_0_ECX_RDPID (1U << 22) + + #define CPUID_XSAVE_XSAVEOPT (1U << 0) + #define CPUID_XSAVE_XSAVEC (1U << 1) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Avoid-shifting-left-into-sign-bit.patch b/SOURCES/kvm-target-i386-Avoid-shifting-left-into-sign-bit.patch new file mode 100644 index 0000000..a9a92c1 --- /dev/null +++ b/SOURCES/kvm-target-i386-Avoid-shifting-left-into-sign-bit.patch @@ -0,0 +1,399 @@ +From ded1f83456d03cef5f99abe18a6c7568b0ecd656 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:28 +0200 +Subject: [PATCH 08/10] target-i386: Avoid shifting left into sign bit + +Message-id: <1435260689-9556-8-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66504 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 7/8] target-i386: Avoid shifting left into sign bit +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +From: Peter Maydell + +Add 'U' suffixes where necessary to avoid (1 << 31) which +shifts left into the sign bit, which is undefined behaviour. +Add the suffix also for other constants in the same groupings +even if they don't shift into bit 31, for consistency. + +Signed-off-by: Peter Maydell +Signed-off-by: Michael Tokarev +(cherry picked from commit 2cd49cbfab0dd294de421893048ab614518fa263) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 334 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 167 insertions(+), 167 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 715ba63..fc1e42e 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -194,35 +194,35 @@ + #define CR0_PE_SHIFT 0 + #define CR0_MP_SHIFT 1 + +-#define CR0_PE_MASK (1 << 0) +-#define CR0_MP_MASK (1 << 1) +-#define CR0_EM_MASK (1 << 2) +-#define CR0_TS_MASK (1 << 3) +-#define CR0_ET_MASK (1 << 4) +-#define CR0_NE_MASK (1 << 5) +-#define CR0_WP_MASK (1 << 16) +-#define CR0_AM_MASK (1 << 18) +-#define CR0_PG_MASK (1 << 31) +- +-#define CR4_VME_MASK (1 << 0) +-#define CR4_PVI_MASK (1 << 1) +-#define CR4_TSD_MASK (1 << 2) +-#define CR4_DE_MASK (1 << 3) +-#define CR4_PSE_MASK (1 << 4) +-#define CR4_PAE_MASK (1 << 5) +-#define CR4_MCE_MASK (1 << 6) +-#define CR4_PGE_MASK (1 << 7) +-#define CR4_PCE_MASK (1 << 8) ++#define CR0_PE_MASK (1U << 0) ++#define CR0_MP_MASK (1U << 1) ++#define CR0_EM_MASK (1U << 2) ++#define CR0_TS_MASK (1U << 3) ++#define CR0_ET_MASK (1U << 4) ++#define CR0_NE_MASK (1U << 5) ++#define CR0_WP_MASK (1U << 16) ++#define CR0_AM_MASK (1U << 18) ++#define CR0_PG_MASK (1U << 31) ++ ++#define CR4_VME_MASK (1U << 0) ++#define CR4_PVI_MASK (1U << 1) ++#define CR4_TSD_MASK (1U << 2) ++#define CR4_DE_MASK (1U << 3) ++#define CR4_PSE_MASK (1U << 4) ++#define CR4_PAE_MASK (1U << 5) ++#define CR4_MCE_MASK (1U << 6) ++#define CR4_PGE_MASK (1U << 7) ++#define CR4_PCE_MASK (1U << 8) + #define CR4_OSFXSR_SHIFT 9 +-#define CR4_OSFXSR_MASK (1 << CR4_OSFXSR_SHIFT) +-#define CR4_OSXMMEXCPT_MASK (1 << 10) +-#define CR4_VMXE_MASK (1 << 13) +-#define CR4_SMXE_MASK (1 << 14) +-#define CR4_FSGSBASE_MASK (1 << 16) +-#define CR4_PCIDE_MASK (1 << 17) +-#define CR4_OSXSAVE_MASK (1 << 18) +-#define CR4_SMEP_MASK (1 << 20) +-#define CR4_SMAP_MASK (1 << 21) ++#define CR4_OSFXSR_MASK (1U << CR4_OSFXSR_SHIFT) ++#define CR4_OSXMMEXCPT_MASK (1U << 10) ++#define CR4_VMXE_MASK (1U << 13) ++#define CR4_SMXE_MASK (1U << 14) ++#define CR4_FSGSBASE_MASK (1U << 16) ++#define CR4_PCIDE_MASK (1U << 17) ++#define CR4_OSXSAVE_MASK (1U << 18) ++#define CR4_SMEP_MASK (1U << 20) ++#define CR4_SMAP_MASK (1U << 21) + + #define DR6_BD (1 << 13) + #define DR6_BS (1 << 14) +@@ -408,96 +408,96 @@ typedef enum FeatureWord { + typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + + /* cpuid_features bits */ +-#define CPUID_FP87 (1 << 0) +-#define CPUID_VME (1 << 1) +-#define CPUID_DE (1 << 2) +-#define CPUID_PSE (1 << 3) +-#define CPUID_TSC (1 << 4) +-#define CPUID_MSR (1 << 5) +-#define CPUID_PAE (1 << 6) +-#define CPUID_MCE (1 << 7) +-#define CPUID_CX8 (1 << 8) +-#define CPUID_APIC (1 << 9) +-#define CPUID_SEP (1 << 11) /* sysenter/sysexit */ +-#define CPUID_MTRR (1 << 12) +-#define CPUID_PGE (1 << 13) +-#define CPUID_MCA (1 << 14) +-#define CPUID_CMOV (1 << 15) +-#define CPUID_PAT (1 << 16) +-#define CPUID_PSE36 (1 << 17) +-#define CPUID_PN (1 << 18) +-#define CPUID_CLFLUSH (1 << 19) +-#define CPUID_DTS (1 << 21) +-#define CPUID_ACPI (1 << 22) +-#define CPUID_MMX (1 << 23) +-#define CPUID_FXSR (1 << 24) +-#define CPUID_SSE (1 << 25) +-#define CPUID_SSE2 (1 << 26) +-#define CPUID_SS (1 << 27) +-#define CPUID_HT (1 << 28) +-#define CPUID_TM (1 << 29) +-#define CPUID_IA64 (1 << 30) +-#define CPUID_PBE (1 << 31) +- +-#define CPUID_EXT_SSE3 (1 << 0) +-#define CPUID_EXT_PCLMULQDQ (1 << 1) +-#define CPUID_EXT_DTES64 (1 << 2) +-#define CPUID_EXT_MONITOR (1 << 3) +-#define CPUID_EXT_DSCPL (1 << 4) +-#define CPUID_EXT_VMX (1 << 5) +-#define CPUID_EXT_SMX (1 << 6) +-#define CPUID_EXT_EST (1 << 7) +-#define CPUID_EXT_TM2 (1 << 8) +-#define CPUID_EXT_SSSE3 (1 << 9) +-#define CPUID_EXT_CID (1 << 10) +-#define CPUID_EXT_FMA (1 << 12) +-#define CPUID_EXT_CX16 (1 << 13) +-#define CPUID_EXT_XTPR (1 << 14) +-#define CPUID_EXT_PDCM (1 << 15) +-#define CPUID_EXT_PCID (1 << 17) +-#define CPUID_EXT_DCA (1 << 18) +-#define CPUID_EXT_SSE41 (1 << 19) +-#define CPUID_EXT_SSE42 (1 << 20) +-#define CPUID_EXT_X2APIC (1 << 21) +-#define CPUID_EXT_MOVBE (1 << 22) +-#define CPUID_EXT_POPCNT (1 << 23) +-#define CPUID_EXT_TSC_DEADLINE_TIMER (1 << 24) +-#define CPUID_EXT_AES (1 << 25) +-#define CPUID_EXT_XSAVE (1 << 26) +-#define CPUID_EXT_OSXSAVE (1 << 27) +-#define CPUID_EXT_AVX (1 << 28) +-#define CPUID_EXT_F16C (1 << 29) +-#define CPUID_EXT_RDRAND (1 << 30) +-#define CPUID_EXT_HYPERVISOR (1 << 31) +- +-#define CPUID_EXT2_FPU (1 << 0) +-#define CPUID_EXT2_VME (1 << 1) +-#define CPUID_EXT2_DE (1 << 2) +-#define CPUID_EXT2_PSE (1 << 3) +-#define CPUID_EXT2_TSC (1 << 4) +-#define CPUID_EXT2_MSR (1 << 5) +-#define CPUID_EXT2_PAE (1 << 6) +-#define CPUID_EXT2_MCE (1 << 7) +-#define CPUID_EXT2_CX8 (1 << 8) +-#define CPUID_EXT2_APIC (1 << 9) +-#define CPUID_EXT2_SYSCALL (1 << 11) +-#define CPUID_EXT2_MTRR (1 << 12) +-#define CPUID_EXT2_PGE (1 << 13) +-#define CPUID_EXT2_MCA (1 << 14) +-#define CPUID_EXT2_CMOV (1 << 15) +-#define CPUID_EXT2_PAT (1 << 16) +-#define CPUID_EXT2_PSE36 (1 << 17) +-#define CPUID_EXT2_MP (1 << 19) +-#define CPUID_EXT2_NX (1 << 20) +-#define CPUID_EXT2_MMXEXT (1 << 22) +-#define CPUID_EXT2_MMX (1 << 23) +-#define CPUID_EXT2_FXSR (1 << 24) +-#define CPUID_EXT2_FFXSR (1 << 25) +-#define CPUID_EXT2_PDPE1GB (1 << 26) +-#define CPUID_EXT2_RDTSCP (1 << 27) +-#define CPUID_EXT2_LM (1 << 29) +-#define CPUID_EXT2_3DNOWEXT (1 << 30) +-#define CPUID_EXT2_3DNOW (1 << 31) ++#define CPUID_FP87 (1U << 0) ++#define CPUID_VME (1U << 1) ++#define CPUID_DE (1U << 2) ++#define CPUID_PSE (1U << 3) ++#define CPUID_TSC (1U << 4) ++#define CPUID_MSR (1U << 5) ++#define CPUID_PAE (1U << 6) ++#define CPUID_MCE (1U << 7) ++#define CPUID_CX8 (1U << 8) ++#define CPUID_APIC (1U << 9) ++#define CPUID_SEP (1U << 11) /* sysenter/sysexit */ ++#define CPUID_MTRR (1U << 12) ++#define CPUID_PGE (1U << 13) ++#define CPUID_MCA (1U << 14) ++#define CPUID_CMOV (1U << 15) ++#define CPUID_PAT (1U << 16) ++#define CPUID_PSE36 (1U << 17) ++#define CPUID_PN (1U << 18) ++#define CPUID_CLFLUSH (1U << 19) ++#define CPUID_DTS (1U << 21) ++#define CPUID_ACPI (1U << 22) ++#define CPUID_MMX (1U << 23) ++#define CPUID_FXSR (1U << 24) ++#define CPUID_SSE (1U << 25) ++#define CPUID_SSE2 (1U << 26) ++#define CPUID_SS (1U << 27) ++#define CPUID_HT (1U << 28) ++#define CPUID_TM (1U << 29) ++#define CPUID_IA64 (1U << 30) ++#define CPUID_PBE (1U << 31) ++ ++#define CPUID_EXT_SSE3 (1U << 0) ++#define CPUID_EXT_PCLMULQDQ (1U << 1) ++#define CPUID_EXT_DTES64 (1U << 2) ++#define CPUID_EXT_MONITOR (1U << 3) ++#define CPUID_EXT_DSCPL (1U << 4) ++#define CPUID_EXT_VMX (1U << 5) ++#define CPUID_EXT_SMX (1U << 6) ++#define CPUID_EXT_EST (1U << 7) ++#define CPUID_EXT_TM2 (1U << 8) ++#define CPUID_EXT_SSSE3 (1U << 9) ++#define CPUID_EXT_CID (1U << 10) ++#define CPUID_EXT_FMA (1U << 12) ++#define CPUID_EXT_CX16 (1U << 13) ++#define CPUID_EXT_XTPR (1U << 14) ++#define CPUID_EXT_PDCM (1U << 15) ++#define CPUID_EXT_PCID (1U << 17) ++#define CPUID_EXT_DCA (1U << 18) ++#define CPUID_EXT_SSE41 (1U << 19) ++#define CPUID_EXT_SSE42 (1U << 20) ++#define CPUID_EXT_X2APIC (1U << 21) ++#define CPUID_EXT_MOVBE (1U << 22) ++#define CPUID_EXT_POPCNT (1U << 23) ++#define CPUID_EXT_TSC_DEADLINE_TIMER (1U << 24) ++#define CPUID_EXT_AES (1U << 25) ++#define CPUID_EXT_XSAVE (1U << 26) ++#define CPUID_EXT_OSXSAVE (1U << 27) ++#define CPUID_EXT_AVX (1U << 28) ++#define CPUID_EXT_F16C (1U << 29) ++#define CPUID_EXT_RDRAND (1U << 30) ++#define CPUID_EXT_HYPERVISOR (1U << 31) ++ ++#define CPUID_EXT2_FPU (1U << 0) ++#define CPUID_EXT2_VME (1U << 1) ++#define CPUID_EXT2_DE (1U << 2) ++#define CPUID_EXT2_PSE (1U << 3) ++#define CPUID_EXT2_TSC (1U << 4) ++#define CPUID_EXT2_MSR (1U << 5) ++#define CPUID_EXT2_PAE (1U << 6) ++#define CPUID_EXT2_MCE (1U << 7) ++#define CPUID_EXT2_CX8 (1U << 8) ++#define CPUID_EXT2_APIC (1U << 9) ++#define CPUID_EXT2_SYSCALL (1U << 11) ++#define CPUID_EXT2_MTRR (1U << 12) ++#define CPUID_EXT2_PGE (1U << 13) ++#define CPUID_EXT2_MCA (1U << 14) ++#define CPUID_EXT2_CMOV (1U << 15) ++#define CPUID_EXT2_PAT (1U << 16) ++#define CPUID_EXT2_PSE36 (1U << 17) ++#define CPUID_EXT2_MP (1U << 19) ++#define CPUID_EXT2_NX (1U << 20) ++#define CPUID_EXT2_MMXEXT (1U << 22) ++#define CPUID_EXT2_MMX (1U << 23) ++#define CPUID_EXT2_FXSR (1U << 24) ++#define CPUID_EXT2_FFXSR (1U << 25) ++#define CPUID_EXT2_PDPE1GB (1U << 26) ++#define CPUID_EXT2_RDTSCP (1U << 27) ++#define CPUID_EXT2_LM (1U << 29) ++#define CPUID_EXT2_3DNOWEXT (1U << 30) ++#define CPUID_EXT2_3DNOW (1U << 31) + + /* CPUID[8000_0001].EDX bits that are aliase of CPUID[1].EDX bits on AMD CPUs */ + #define CPUID_EXT2_AMD_ALIASES (CPUID_EXT2_FPU | CPUID_EXT2_VME | \ +@@ -510,53 +510,53 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + CPUID_EXT2_PAT | CPUID_EXT2_PSE36 | \ + CPUID_EXT2_MMX | CPUID_EXT2_FXSR) + +-#define CPUID_EXT3_LAHF_LM (1 << 0) +-#define CPUID_EXT3_CMP_LEG (1 << 1) +-#define CPUID_EXT3_SVM (1 << 2) +-#define CPUID_EXT3_EXTAPIC (1 << 3) +-#define CPUID_EXT3_CR8LEG (1 << 4) +-#define CPUID_EXT3_ABM (1 << 5) +-#define CPUID_EXT3_SSE4A (1 << 6) +-#define CPUID_EXT3_MISALIGNSSE (1 << 7) +-#define CPUID_EXT3_3DNOWPREFETCH (1 << 8) +-#define CPUID_EXT3_OSVW (1 << 9) +-#define CPUID_EXT3_IBS (1 << 10) +-#define CPUID_EXT3_XOP (1 << 11) +-#define CPUID_EXT3_SKINIT (1 << 12) +-#define CPUID_EXT3_WDT (1 << 13) +-#define CPUID_EXT3_LWP (1 << 15) +-#define CPUID_EXT3_FMA4 (1 << 16) +-#define CPUID_EXT3_TCE (1 << 17) +-#define CPUID_EXT3_NODEID (1 << 19) +-#define CPUID_EXT3_TBM (1 << 21) +-#define CPUID_EXT3_TOPOEXT (1 << 22) +-#define CPUID_EXT3_PERFCORE (1 << 23) +-#define CPUID_EXT3_PERFNB (1 << 24) +- +-#define CPUID_SVM_NPT (1 << 0) +-#define CPUID_SVM_LBRV (1 << 1) +-#define CPUID_SVM_SVMLOCK (1 << 2) +-#define CPUID_SVM_NRIPSAVE (1 << 3) +-#define CPUID_SVM_TSCSCALE (1 << 4) +-#define CPUID_SVM_VMCBCLEAN (1 << 5) +-#define CPUID_SVM_FLUSHASID (1 << 6) +-#define CPUID_SVM_DECODEASSIST (1 << 7) +-#define CPUID_SVM_PAUSEFILTER (1 << 10) +-#define CPUID_SVM_PFTHRESHOLD (1 << 12) +- +-#define CPUID_7_0_EBX_FSGSBASE (1 << 0) +-#define CPUID_7_0_EBX_BMI1 (1 << 3) +-#define CPUID_7_0_EBX_HLE (1 << 4) +-#define CPUID_7_0_EBX_AVX2 (1 << 5) +-#define CPUID_7_0_EBX_SMEP (1 << 7) +-#define CPUID_7_0_EBX_BMI2 (1 << 8) +-#define CPUID_7_0_EBX_ERMS (1 << 9) +-#define CPUID_7_0_EBX_INVPCID (1 << 10) +-#define CPUID_7_0_EBX_RTM (1 << 11) +-#define CPUID_7_0_EBX_MPX (1 << 14) +-#define CPUID_7_0_EBX_RDSEED (1 << 18) +-#define CPUID_7_0_EBX_ADX (1 << 19) +-#define CPUID_7_0_EBX_SMAP (1 << 20) ++#define CPUID_EXT3_LAHF_LM (1U << 0) ++#define CPUID_EXT3_CMP_LEG (1U << 1) ++#define CPUID_EXT3_SVM (1U << 2) ++#define CPUID_EXT3_EXTAPIC (1U << 3) ++#define CPUID_EXT3_CR8LEG (1U << 4) ++#define CPUID_EXT3_ABM (1U << 5) ++#define CPUID_EXT3_SSE4A (1U << 6) ++#define CPUID_EXT3_MISALIGNSSE (1U << 7) ++#define CPUID_EXT3_3DNOWPREFETCH (1U << 8) ++#define CPUID_EXT3_OSVW (1U << 9) ++#define CPUID_EXT3_IBS (1U << 10) ++#define CPUID_EXT3_XOP (1U << 11) ++#define CPUID_EXT3_SKINIT (1U << 12) ++#define CPUID_EXT3_WDT (1U << 13) ++#define CPUID_EXT3_LWP (1U << 15) ++#define CPUID_EXT3_FMA4 (1U << 16) ++#define CPUID_EXT3_TCE (1U << 17) ++#define CPUID_EXT3_NODEID (1U << 19) ++#define CPUID_EXT3_TBM (1U << 21) ++#define CPUID_EXT3_TOPOEXT (1U << 22) ++#define CPUID_EXT3_PERFCORE (1U << 23) ++#define CPUID_EXT3_PERFNB (1U << 24) ++ ++#define CPUID_SVM_NPT (1U << 0) ++#define CPUID_SVM_LBRV (1U << 1) ++#define CPUID_SVM_SVMLOCK (1U << 2) ++#define CPUID_SVM_NRIPSAVE (1U << 3) ++#define CPUID_SVM_TSCSCALE (1U << 4) ++#define CPUID_SVM_VMCBCLEAN (1U << 5) ++#define CPUID_SVM_FLUSHASID (1U << 6) ++#define CPUID_SVM_DECODEASSIST (1U << 7) ++#define CPUID_SVM_PAUSEFILTER (1U << 10) ++#define CPUID_SVM_PFTHRESHOLD (1U << 12) ++ ++#define CPUID_7_0_EBX_FSGSBASE (1U << 0) ++#define CPUID_7_0_EBX_BMI1 (1U << 3) ++#define CPUID_7_0_EBX_HLE (1U << 4) ++#define CPUID_7_0_EBX_AVX2 (1U << 5) ++#define CPUID_7_0_EBX_SMEP (1U << 7) ++#define CPUID_7_0_EBX_BMI2 (1U << 8) ++#define CPUID_7_0_EBX_ERMS (1U << 9) ++#define CPUID_7_0_EBX_INVPCID (1U << 10) ++#define CPUID_7_0_EBX_RTM (1U << 11) ++#define CPUID_7_0_EBX_MPX (1U << 14) ++#define CPUID_7_0_EBX_RDSEED (1U << 18) ++#define CPUID_7_0_EBX_ADX (1U << 19) ++#define CPUID_7_0_EBX_SMAP (1U << 20) + + #define CPUID_VENDOR_SZ 12 + +@@ -572,8 +572,8 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + + #define CPUID_VENDOR_VIA "CentaurHauls" + +-#define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */ +-#define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */ ++#define CPUID_MWAIT_IBE (1U << 1) /* Interrupts can exit capability */ ++#define CPUID_MWAIT_EMX (1U << 0) /* enumeration supported */ + + #ifndef HYPERV_SPINLOCK_NEVER_RETRY + #define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Broadwell-CPU-model.patch b/SOURCES/kvm-target-i386-Broadwell-CPU-model.patch new file mode 100644 index 0000000..58b0ac1 --- /dev/null +++ b/SOURCES/kvm-target-i386-Broadwell-CPU-model.patch @@ -0,0 +1,90 @@ +From 9593b95415b6da77211860e76987c988c08e19d4 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 21 Aug 2014 19:58:16 +0200 +Subject: [PATCH 1/3] target-i386: Broadwell CPU model +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1408651097-24190-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 60670 +O-Subject: [RHEL7.1 qemu-kvm PATCH 1/2] target-i386: Broadwell CPU model +Bugzilla: 1116117 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini + +This adds a new CPU model named "Broadwell". It has all the features +from Haswell, plus PREFETCHW, RDSEED, ADX, SMAP. + +PREFETCHW was already supported as "3dnowprefetch". +[Already supported by RHEL-7 kernel, too] + +RDSEED, ADX was added on Linux v3.15-rc1. +[RDSEED: RHEL-7 kernel commit c4311bc8c9167a3d7011aff8728fd8067404246f] +[ADX: RHEL-7 kernel commit fe5f6cdf4428dcd01f5b060b31eabe44c2f5e468] + +SMAP was added on Linux v3.15-rc2. +[RHEL-7 kernel commit 890edaefc84a2596a3f17d1e9967935a1984e302] + +About migration support: +* SMAP state is a single bit on CR4 which is already migrated; +* PREFETCHW, RDSEED, ADX have no new state. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit ece01354073f8e02db0205ea7522f3dbf589c9aa) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index e65318e..1507530 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -860,6 +860,40 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core Processor (Haswell)", + }, + { ++ .name = "Broadwell", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 61, ++ .stepping = 2, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | ++ CPUID_7_0_EBX_SMAP, ++ .xlevel = 0x8000000A, ++ .model_id = "Intel Core Processor (Broadwell)", ++ }, ++ { + .name = "Opteron_G1", + .level = 5, + .vendor = CPUID_VENDOR_AMD, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Cleanup-foo-feature-handling.patch b/SOURCES/kvm-target-i386-Cleanup-foo-feature-handling.patch new file mode 100644 index 0000000..4d09b27 --- /dev/null +++ b/SOURCES/kvm-target-i386-Cleanup-foo-feature-handling.patch @@ -0,0 +1,70 @@ +From d451bbe0826ead2944fcea51e70cab1a40c0c478 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:23 +0100 +Subject: [PATCH 11/12] target-i386: Cleanup 'foo' feature handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-12-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57967 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 11/12] target-i386: Cleanup 'foo' feature handling +Bugzilla: 1057173 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +From: Igor Mammedov + +Features check, enforce, hv_relaxed and hv_vapic are treated as boolean +set to 'on' when passed from command line, so it's not necessary to +handle each of them separately. Collapse them to one catch-all branch +which will treat any feature in format 'foo' as boolean set to 'on'. + +Any unknown feature will be rejected by CPU property setter so there is no +need to check for unknown feature in cpu_x86_parse_featurestr(), therefore +it's replaced by above mentioned catch-all handler. + +Signed-off-by: Igor Mammedov +Reviewed-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 258f5abe9a8786c410f98367e9e042ee16c249f2) +--- + target-i386/cpu.c | 13 ++----------- + 1 file changed, 2 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 13 ++----------- + 1 files changed, 2 insertions(+), 11 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 9f2a04e..8421dfc 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1683,18 +1683,9 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + error_setg(errp, "unrecognized feature %s", featurestr); + goto out; + } +- } else if (!strcmp(featurestr, "check")) { +- object_property_parse(OBJECT(cpu), "on", featurestr, errp); +- } else if (!strcmp(featurestr, "enforce")) { +- object_property_parse(OBJECT(cpu), "on", featurestr, errp); +- } else if (!strcmp(featurestr, "hv_relaxed")) { +- object_property_parse(OBJECT(cpu), "on", "hv-relaxed", errp); +- } else if (!strcmp(featurestr, "hv_vapic")) { +- object_property_parse(OBJECT(cpu), "on", "hv-vapic", errp); + } else { +- error_setg(errp, "feature string `%s' not in format (+feature|" +- "-feature|feature=xyz)", featurestr); +- goto out; ++ feat2prop(featurestr); ++ object_property_parse(OBJECT(cpu), "on", featurestr, errp); + } + if (error_is_set(errp)) { + goto out; +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Convert-check-and-enforce-to-static-prop.patch b/SOURCES/kvm-target-i386-Convert-check-and-enforce-to-static-prop.patch new file mode 100644 index 0000000..260c879 --- /dev/null +++ b/SOURCES/kvm-target-i386-Convert-check-and-enforce-to-static-prop.patch @@ -0,0 +1,100 @@ +From f60e83f9ba3436243c247fe81a53b0158f982b2a Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:22 +0100 +Subject: [PATCH 10/12] target-i386: Convert 'check' and 'enforce' to static properties +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-11-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57966 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 10/12] target-i386: Convert 'check' and 'enforce' to static properties +Bugzilla: 1004773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +From: Igor Mammedov + +* Additionally convert check_cpuid & enforce_cpuid to bool and make them + members of X86CPU +* Make 'enforce' feature independent from 'check' + +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 912ffc479c0008bd983f5733daa52438b359be6f) +--- + target-i386/cpu-qom.h | 2 ++ + target-i386/cpu.c | 13 ++++++------- + 2 files changed, 8 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu-qom.h | 2 ++ + target-i386/cpu.c | 13 ++++++------- + 2 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h +index ac56fec..99ba65f 100644 +--- a/target-i386/cpu-qom.h ++++ b/target-i386/cpu-qom.h +@@ -69,6 +69,8 @@ typedef struct X86CPU { + bool hyperv_vapic; + bool hyperv_relaxed_timing; + int hyperv_spinlock_attempts; ++ bool check_cpuid; ++ bool enforce_cpuid; + + /* Features that were filtered out because of missing host capabilities */ + uint32_t filtered_features[FEATURE_WORDS]; +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index db51f72..9f2a04e 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -242,9 +242,6 @@ typedef struct model_features_t { + FeatureWord feat_word; + } model_features_t; + +-int check_cpuid = 0; +-int enforce_cpuid = 0; +- + static uint32_t kvm_default_features = (1 << KVM_FEATURE_CLOCKSOURCE) | + (1 << KVM_FEATURE_NOP_IO_DELAY) | + (1 << KVM_FEATURE_CLOCKSOURCE2) | +@@ -1687,9 +1684,9 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + goto out; + } + } else if (!strcmp(featurestr, "check")) { +- check_cpuid = 1; ++ object_property_parse(OBJECT(cpu), "on", featurestr, errp); + } else if (!strcmp(featurestr, "enforce")) { +- check_cpuid = enforce_cpuid = 1; ++ object_property_parse(OBJECT(cpu), "on", featurestr, errp); + } else if (!strcmp(featurestr, "hv_relaxed")) { + object_property_parse(OBJECT(cpu), "on", "hv-relaxed", errp); + } else if (!strcmp(featurestr, "hv_vapic")) { +@@ -2490,8 +2487,8 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; + env->features[FEAT_SVM] &= TCG_SVM_FEATURES; + } else { +- if (check_cpuid && kvm_check_features_against_host(cpu) +- && enforce_cpuid) { ++ if ((cpu->check_cpuid || cpu->enforce_cpuid) ++ && kvm_check_features_against_host(cpu) && cpu->enforce_cpuid) { + error_setg(&local_err, + "Host's CPU doesn't support requested features"); + goto out; +@@ -2633,6 +2630,8 @@ static Property x86_cpu_properties[] = { + { .name = "hv-spinlocks", .info = &qdev_prop_spinlocks }, + DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false), + DEFINE_PROP_BOOL("hv-vapic", X86CPU, hyperv_vapic, false), ++ DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, false), ++ DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false), + DEFINE_PROP_END_OF_LIST() + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Convert-hv_relaxed-to-static-property.patch b/SOURCES/kvm-target-i386-Convert-hv_relaxed-to-static-property.patch new file mode 100644 index 0000000..0464a33 --- /dev/null +++ b/SOURCES/kvm-target-i386-Convert-hv_relaxed-to-static-property.patch @@ -0,0 +1,59 @@ +From 69161658b1c504064ce50f7f89662b44c39d8839 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:19 +0100 +Subject: [PATCH 07/12] target-i386: Convert 'hv_relaxed' to static property +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-8-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57963 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 07/12] target-i386: Convert 'hv_relaxed' to static property +Bugzilla: 1057173 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +From: Igor Mammedov + +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 89314504197b305173e3f2d23ce541898ef2691c) + +Conflicts: + target-i386/cpu.c +--- + target-i386/cpu.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 826d8d6..7c8efaf 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1649,7 +1649,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + } else if (!strcmp(featurestr, "enforce")) { + check_cpuid = enforce_cpuid = 1; + } else if (!strcmp(featurestr, "hv_relaxed")) { +- cpu->hyperv_relaxed_timing = true; ++ object_property_parse(OBJECT(cpu), "on", "hv-relaxed", errp); + } else if (!strcmp(featurestr, "hv_vapic")) { + cpu->hyperv_vapic = true; + } else { +@@ -2588,6 +2588,7 @@ static int64_t x86_cpu_get_arch_id(CPUState *cs) + + static Property x86_cpu_properties[] = { + DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), ++ DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false), + DEFINE_PROP_END_OF_LIST() + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Convert-hv_spinlocks-to-static-property.patch b/SOURCES/kvm-target-i386-Convert-hv_spinlocks-to-static-property.patch new file mode 100644 index 0000000..6dc9e85 --- /dev/null +++ b/SOURCES/kvm-target-i386-Convert-hv_spinlocks-to-static-property.patch @@ -0,0 +1,112 @@ +From 8b2c0bd8595d7e175c04f80fbc3035cd538aab2b Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:21 +0100 +Subject: [PATCH 09/12] target-i386: Convert 'hv_spinlocks' to static property +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-10-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57965 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 09/12] target-i386: Convert 'hv_spinlocks' to static property +Bugzilla: 1057173 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +From: Igor Mammedov + +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit c8f0f88e2a4cf27bde27a31a98badd61fe212652) +--- + target-i386/cpu.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 44 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 44 insertions(+), 1 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 7a8cb01..db51f72 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1511,6 +1511,46 @@ static void x86_cpu_get_feature_words(Object *obj, Visitor *v, void *opaque, + error_propagate(errp, err); + } + ++static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque, ++ const char *name, Error **errp) ++{ ++ X86CPU *cpu = X86_CPU(obj); ++ int64_t value = cpu->hyperv_spinlock_attempts; ++ ++ visit_type_int(v, &value, name, errp); ++} ++ ++static void x86_set_hv_spinlocks(Object *obj, Visitor *v, void *opaque, ++ const char *name, Error **errp) ++{ ++ const int64_t min = 0xFFF; ++ const int64_t max = UINT_MAX; ++ X86CPU *cpu = X86_CPU(obj); ++ Error *err = NULL; ++ int64_t value; ++ ++ visit_type_int(v, &value, name, &err); ++ if (err) { ++ error_propagate(errp, err); ++ return; ++ } ++ ++ if (value < min || value > max) { ++ error_setg(errp, "Property %s.%s doesn't take value %" PRId64 ++ " (minimum: %" PRId64 ", maximum: %" PRId64 ")", ++ object_get_typename(obj), name ? name : "null", ++ value, min, max); ++ return; ++ } ++ cpu->hyperv_spinlock_attempts = value; ++} ++ ++static PropertyInfo qdev_prop_spinlocks = { ++ .name = "int", ++ .get = x86_get_hv_spinlocks, ++ .set = x86_set_hv_spinlocks, ++}; ++ + static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def, + const char *name) + { +@@ -1628,6 +1668,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + } else if (!strcmp(featurestr, "hv-spinlocks")) { + char *err; + const int min = 0xFFF; ++ char num[32]; + numvalue = strtoul(val, &err, 0); + if (!*val || *err) { + error_setg(errp, "bad numerical value %s", val); +@@ -1639,7 +1680,8 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + min); + numvalue = min; + } +- cpu->hyperv_spinlock_attempts = numvalue; ++ snprintf(num, sizeof(num), "%" PRId32, numvalue); ++ object_property_parse(OBJECT(cpu), num, featurestr, errp); + } else { + error_setg(errp, "unrecognized feature %s", featurestr); + goto out; +@@ -2588,6 +2630,7 @@ static int64_t x86_cpu_get_arch_id(CPUState *cs) + + static Property x86_cpu_properties[] = { + DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), ++ { .name = "hv-spinlocks", .info = &qdev_prop_spinlocks }, + DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false), + DEFINE_PROP_BOOL("hv-vapic", X86CPU, hyperv_vapic, false), + DEFINE_PROP_END_OF_LIST() +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Convert-hv_vapic-to-static-property.patch b/SOURCES/kvm-target-i386-Convert-hv_vapic-to-static-property.patch new file mode 100644 index 0000000..8eb46c1 --- /dev/null +++ b/SOURCES/kvm-target-i386-Convert-hv_vapic-to-static-property.patch @@ -0,0 +1,56 @@ +From 7c8a13c9c4e443bb7bd1cc5492ce8d0eb728f8fe Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:20 +0100 +Subject: [PATCH 08/12] target-i386: Convert 'hv_vapic' to static property +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-9-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57964 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 08/12] target-i386: Convert 'hv_vapic' to static property +Bugzilla: 1057173 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Juan Quintela + +From: Igor Mammedov + +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 0f46685d1b03efaaf5189f0e9af8754cb8f8979c) +--- + target-i386/cpu.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 7c8efaf..7a8cb01 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1651,7 +1651,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + } else if (!strcmp(featurestr, "hv_relaxed")) { + object_property_parse(OBJECT(cpu), "on", "hv-relaxed", errp); + } else if (!strcmp(featurestr, "hv_vapic")) { +- cpu->hyperv_vapic = true; ++ object_property_parse(OBJECT(cpu), "on", "hv-vapic", errp); + } else { + error_setg(errp, "feature string `%s' not in format (+feature|" + "-feature|feature=xyz)", featurestr); +@@ -2589,6 +2589,7 @@ static int64_t x86_cpu_get_arch_id(CPUState *cs) + static Property x86_cpu_properties[] = { + DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), + DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false), ++ DEFINE_PROP_BOOL("hv-vapic", X86CPU, hyperv_vapic, false), + DEFINE_PROP_END_OF_LIST() + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Copy-cpu64-rhel6-definition-into-qemu64.patch b/SOURCES/kvm-target-i386-Copy-cpu64-rhel6-definition-into-qemu64.patch new file mode 100644 index 0000000..7ffa123 --- /dev/null +++ b/SOURCES/kvm-target-i386-Copy-cpu64-rhel6-definition-into-qemu64.patch @@ -0,0 +1,83 @@ +From 4941c3e5c2366f008c90f1f58a49c0ed203fce11 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 25 Mar 2014 16:03:47 +0100 +Subject: [PATCH 2/2] target-i386: Copy cpu64-rhel6 definition into qemu64 + +RH-Author: Eduardo Habkost +Message-id: <1395763427-31684-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 58248 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] target-i386: Copy cpu64-rhel6 definition into qemu64 +Bugzilla: 1080170 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Alex Williamson +RH-Acked-by: Bandan Das + +Bugzilla: 1078607 +Brew scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7250917 +Upstream status: not applicable + +The CPUID data from cpu64-rhel6 is a better default than qemu64. Among +other things, this fixes MSI problems on 32-bit Windows guests. + +Signed-off-by: Eduardo Habkost +--- + target-i386/cpu.c | 33 ++++++++++++++++++++------------- + 1 file changed, 20 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 33 ++++++++++++++++++++------------- + 1 files changed, 20 insertions(+), 13 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 005e190..e65318e 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -440,24 +440,31 @@ typedef struct x86_def_t { + */ + static x86_def_t builtin_x86_defs[] = { + { ++ /* qemu64 is the default CPU model for all *-rhel7.* machine-types. ++ * The default on RHEL-6 was cpu64-rhel6. ++ * libvirt assumes that qemu64 is the default for _all_ machine-types, ++ * so we should try to keep qemu64 and cpu64-rhel6 as similar as ++ * possible. ++ */ + .name = "qemu64", + .level = 4, + .vendor = CPUID_VENDOR_AMD, + .family = 6, +- .model = 6, ++ .model = 13, + .stepping = 3, +- .features[FEAT_1_EDX] = +- PPRO_FEATURES | +- CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | +- CPUID_PSE36, +- .features[FEAT_1_ECX] = +- CPUID_EXT_SSE3 | CPUID_EXT_CX16 | CPUID_EXT_POPCNT, +- .features[FEAT_8000_0001_EDX] = +- (PPRO_FEATURES & CPUID_EXT2_AMD_ALIASES) | +- CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX, +- .features[FEAT_8000_0001_ECX] = +- CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | +- CPUID_EXT3_ABM | CPUID_EXT3_SSE4A, ++ .features[FEAT_1_EDX] = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | ++ CPUID_MMX | CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | ++ CPUID_MCA | CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | ++ CPUID_CX8 | CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | ++ CPUID_PSE | CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = CPUID_EXT_CX16 | CPUID_EXT_SSE3, ++ .features[FEAT_8000_0001_EDX] = CPUID_EXT2_LM | CPUID_EXT2_FXSR | ++ CPUID_EXT2_MMX | CPUID_EXT2_NX | CPUID_EXT2_PAT | CPUID_EXT2_CMOV | ++ CPUID_EXT2_PGE | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC | ++ CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | CPUID_EXT2_TSC | ++ CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, ++ .features[FEAT_8000_0001_ECX] = CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | ++ CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM, + .xlevel = 0x8000000A, + }, + { +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Define-TCG_-_FEATURES-earlier-in-cpu.c.patch b/SOURCES/kvm-target-i386-Define-TCG_-_FEATURES-earlier-in-cpu.c.patch new file mode 100644 index 0000000..0fcd889 --- /dev/null +++ b/SOURCES/kvm-target-i386-Define-TCG_-_FEATURES-earlier-in-cpu.c.patch @@ -0,0 +1,171 @@ +From 30c05c032f0af4e959b304f5223dbaf331955488 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:43 +0100 +Subject: [PATCH 13/17] target-i386: Define TCG_*_FEATURES earlier in cpu.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-13-ehabkost@redhat.com> +Patchwork-id: 74042 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 12/14] target-i386: Define TCG_*_FEATURES earlier in cpu.c +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Those macros will be used in the feature_word_info array data, so need +to be defined earlier. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 621626ce7d44f008298c7e6cfefa9fbb80a33dc2) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 121 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 61 insertions(+), 60 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index e6821b6..d611062 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -187,6 +187,67 @@ static const char *cpuid_xsave_feature_name[] = { + NULL, NULL, NULL, NULL, + }; + ++#define I486_FEATURES (CPUID_FP87 | CPUID_VME | CPUID_PSE) ++#define PENTIUM_FEATURES (I486_FEATURES | CPUID_DE | CPUID_TSC | \ ++ CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_MMX | CPUID_APIC) ++#define PENTIUM2_FEATURES (PENTIUM_FEATURES | CPUID_PAE | CPUID_SEP | \ ++ CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | CPUID_PAT | \ ++ CPUID_PSE36 | CPUID_FXSR) ++#define PENTIUM3_FEATURES (PENTIUM2_FEATURES | CPUID_SSE) ++#define PPRO_FEATURES (CPUID_FP87 | CPUID_DE | CPUID_PSE | CPUID_TSC | \ ++ CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_PGE | CPUID_CMOV | \ ++ CPUID_PAT | CPUID_FXSR | CPUID_MMX | CPUID_SSE | CPUID_SSE2 | \ ++ CPUID_PAE | CPUID_SEP | CPUID_APIC) ++ ++#define TCG_FEATURES (CPUID_FP87 | CPUID_PSE | CPUID_TSC | CPUID_MSR | \ ++ CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC | CPUID_SEP | \ ++ CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | CPUID_PAT | \ ++ CPUID_PSE36 | CPUID_CLFLUSH | CPUID_ACPI | CPUID_MMX | \ ++ CPUID_FXSR | CPUID_SSE | CPUID_SSE2 | CPUID_SS) ++ /* partly implemented: ++ CPUID_MTRR, CPUID_MCA, CPUID_CLFLUSH (needed for Win64) ++ CPUID_PSE36 (needed for Solaris) */ ++ /* missing: ++ CPUID_VME, CPUID_DTS, CPUID_SS, CPUID_HT, CPUID_TM, CPUID_PBE */ ++#define TCG_EXT_FEATURES (CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | \ ++ CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 | CPUID_EXT_CX16 | \ ++ CPUID_EXT_SSE41 | CPUID_EXT_SSE42 | CPUID_EXT_POPCNT | \ ++ CPUID_EXT_MOVBE | CPUID_EXT_AES | CPUID_EXT_HYPERVISOR) ++ /* missing: ++ CPUID_EXT_DTES64, CPUID_EXT_DSCPL, CPUID_EXT_VMX, CPUID_EXT_SMX, ++ CPUID_EXT_EST, CPUID_EXT_TM2, CPUID_EXT_CID, CPUID_EXT_FMA, ++ CPUID_EXT_XTPR, CPUID_EXT_PDCM, CPUID_EXT_PCID, CPUID_EXT_DCA, ++ CPUID_EXT_X2APIC, CPUID_EXT_TSC_DEADLINE_TIMER, CPUID_EXT_XSAVE, ++ CPUID_EXT_OSXSAVE, CPUID_EXT_AVX, CPUID_EXT_F16C, ++ CPUID_EXT_RDRAND */ ++ ++#ifdef TARGET_X86_64 ++#define TCG_EXT2_X86_64_FEATURES (CPUID_EXT2_SYSCALL | CPUID_EXT2_LM) ++#else ++#define TCG_EXT2_X86_64_FEATURES 0 ++#endif ++ ++#define TCG_EXT2_FEATURES ((TCG_FEATURES & CPUID_EXT2_AMD_ALIASES) | \ ++ CPUID_EXT2_NX | CPUID_EXT2_MMXEXT | CPUID_EXT2_RDTSCP | \ ++ CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT | \ ++ TCG_EXT2_X86_64_FEATURES) ++ /* missing: ++ CPUID_EXT2_PDPE1GB */ ++#define TCG_EXT3_FEATURES (CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | \ ++ CPUID_EXT3_CR8LEG | CPUID_EXT3_ABM | CPUID_EXT3_SSE4A) ++#define TCG_EXT4_FEATURES 0 ++#define TCG_SVM_FEATURES 0 ++#define TCG_KVM_FEATURES 0 ++#define TCG_7_0_EBX_FEATURES (CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_SMAP | \ ++ CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ADX) ++ /* missing: ++ CPUID_7_0_EBX_FSGSBASE, CPUID_7_0_EBX_HLE, CPUID_7_0_EBX_AVX2, ++ CPUID_7_0_EBX_ERMS, CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM, ++ CPUID_7_0_EBX_RDSEED */ ++#define TCG_7_0_ECX_FEATURES 0 ++#define TCG_7_0_EDX_FEATURES 0 ++ ++ + typedef struct FeatureWordInfo { + const char **feat_names; + uint32_t cpuid_eax; /* Input EAX for CPUID */ +@@ -453,66 +514,6 @@ typedef struct x86_def_t { + char model_id[48]; + } x86_def_t; + +-#define I486_FEATURES (CPUID_FP87 | CPUID_VME | CPUID_PSE) +-#define PENTIUM_FEATURES (I486_FEATURES | CPUID_DE | CPUID_TSC | \ +- CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_MMX | CPUID_APIC) +-#define PENTIUM2_FEATURES (PENTIUM_FEATURES | CPUID_PAE | CPUID_SEP | \ +- CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | CPUID_PAT | \ +- CPUID_PSE36 | CPUID_FXSR) +-#define PENTIUM3_FEATURES (PENTIUM2_FEATURES | CPUID_SSE) +-#define PPRO_FEATURES (CPUID_FP87 | CPUID_DE | CPUID_PSE | CPUID_TSC | \ +- CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_PGE | CPUID_CMOV | \ +- CPUID_PAT | CPUID_FXSR | CPUID_MMX | CPUID_SSE | CPUID_SSE2 | \ +- CPUID_PAE | CPUID_SEP | CPUID_APIC) +- +-#define TCG_FEATURES (CPUID_FP87 | CPUID_PSE | CPUID_TSC | CPUID_MSR | \ +- CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC | CPUID_SEP | \ +- CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | CPUID_PAT | \ +- CPUID_PSE36 | CPUID_CLFLUSH | CPUID_ACPI | CPUID_MMX | \ +- CPUID_FXSR | CPUID_SSE | CPUID_SSE2 | CPUID_SS) +- /* partly implemented: +- CPUID_MTRR, CPUID_MCA, CPUID_CLFLUSH (needed for Win64) +- CPUID_PSE36 (needed for Solaris) */ +- /* missing: +- CPUID_VME, CPUID_DTS, CPUID_SS, CPUID_HT, CPUID_TM, CPUID_PBE */ +-#define TCG_EXT_FEATURES (CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | \ +- CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 | CPUID_EXT_CX16 | \ +- CPUID_EXT_SSE41 | CPUID_EXT_SSE42 | CPUID_EXT_POPCNT | \ +- CPUID_EXT_MOVBE | CPUID_EXT_AES | CPUID_EXT_HYPERVISOR) +- /* missing: +- CPUID_EXT_DTES64, CPUID_EXT_DSCPL, CPUID_EXT_VMX, CPUID_EXT_SMX, +- CPUID_EXT_EST, CPUID_EXT_TM2, CPUID_EXT_CID, CPUID_EXT_FMA, +- CPUID_EXT_XTPR, CPUID_EXT_PDCM, CPUID_EXT_PCID, CPUID_EXT_DCA, +- CPUID_EXT_X2APIC, CPUID_EXT_TSC_DEADLINE_TIMER, CPUID_EXT_XSAVE, +- CPUID_EXT_OSXSAVE, CPUID_EXT_AVX, CPUID_EXT_F16C, +- CPUID_EXT_RDRAND */ +- +-#ifdef TARGET_X86_64 +-#define TCG_EXT2_X86_64_FEATURES (CPUID_EXT2_SYSCALL | CPUID_EXT2_LM) +-#else +-#define TCG_EXT2_X86_64_FEATURES 0 +-#endif +- +-#define TCG_EXT2_FEATURES ((TCG_FEATURES & CPUID_EXT2_AMD_ALIASES) | \ +- CPUID_EXT2_NX | CPUID_EXT2_MMXEXT | CPUID_EXT2_RDTSCP | \ +- CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT | \ +- TCG_EXT2_X86_64_FEATURES) +- /* missing: +- CPUID_EXT2_PDPE1GB */ +-#define TCG_EXT3_FEATURES (CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | \ +- CPUID_EXT3_CR8LEG | CPUID_EXT3_ABM | CPUID_EXT3_SSE4A) +-#define TCG_EXT4_FEATURES 0 +-#define TCG_SVM_FEATURES 0 +-#define TCG_KVM_FEATURES 0 +-#define TCG_7_0_EBX_FEATURES (CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_SMAP | \ +- CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ADX) +- /* missing: +- CPUID_7_0_EBX_FSGSBASE, CPUID_7_0_EBX_HLE, CPUID_7_0_EBX_AVX2, +- CPUID_7_0_EBX_ERMS, CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM, +- CPUID_7_0_EBX_RDSEED */ +-#define TCG_7_0_ECX_FEATURES 0 +-#define TCG_7_0_EDX_FEATURES 0 +- + /* built-in CPU model definitions + */ + static x86_def_t builtin_x86_defs[] = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Disable-PMU-CPUID-leaf-by-default.patch b/SOURCES/kvm-target-i386-Disable-PMU-CPUID-leaf-by-default.patch new file mode 100644 index 0000000..fa45f83 --- /dev/null +++ b/SOURCES/kvm-target-i386-Disable-PMU-CPUID-leaf-by-default.patch @@ -0,0 +1,122 @@ +From 99ce2407227bd5474e69c93ab0f061f2a3438eac Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 2 Aug 2013 14:08:52 +0200 +Subject: target-i386: Disable PMU CPUID leaf by default + +RH-Author: Eduardo Habkost +Message-id: <1375452533-12507-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 52933 +O-Subject: [RHEL-7 PATCH 2/3] target-i386: Disable PMU CPUID leaf by default +Bugzilla: 853101 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Gleb Natapov + +Bugzilla: 853101 + +Bug description: QEMU currently gets all bits from GET_SUPPORTED_CPUID +for CPUID leaf 0xA and passes them directly to the guest. This makes +the guest ABI depend on host kernel and host CPU capabilities, and +breaks live migration if we migrate between hosts with different +capabilities (e.g., different number of PMU counters). + +Add a "pmu" property to X86CPU, and set it to true only on "-cpu host", +or on pc-*-1.5 and older machine-types. + +For now, setting pmu=on will enable the current passthrough mode that +doesn't have any ABI stability guarantees, but in the future we may +implement a mode where the PMU CPUID bits are stable and configurable. + +Signed-off-by: Eduardo Habkost +Cc: Paolo Bonzini +Signed-off-by: Andreas Färber +(cherry picked from commit 9337e3b6e1d779215423d9b419d42200506deaab) +Signed-off-by: Eduardo Habkost + +Conflicts: + include/hw/i386/pc.h + target-i386/cpu.c + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 6692728..45487ba 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -211,6 +211,10 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t); + .driver = "Nehalem-" TYPE_X86_CPU,\ + .property = "level",\ + .value = stringify(2),\ ++ },{\ ++ .driver = TYPE_X86_CPU,\ ++ .property = "pmu",\ ++ .value = "on",\ + } + + #define PC_COMPAT_1_4 \ +diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h +index 849cedf..5231005 100644 +--- a/target-i386/cpu-qom.h ++++ b/target-i386/cpu-qom.h +@@ -68,6 +68,13 @@ typedef struct X86CPU { + + /* Features that were filtered out because of missing host capabilities */ + uint32_t filtered_features[FEATURE_WORDS]; ++ ++ /* Enable PMU CPUID bits. This can't be enabled by default yet because ++ * it doesn't have ABI stability guarantees, as it passes all PMU CPUID ++ * bits returned by GET_SUPPORTED_CPUID (that depend on host CPU and kernel ++ * capabilities) directly to the guest. ++ */ ++ bool enable_pmu; + } X86CPU; + + static inline X86CPU *x86_env_get_cpu(CPUX86State *env) +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 0c9a99a..2bcc21e 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1479,6 +1479,7 @@ static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def, + const char *name) + { + x86_def_t *def; ++ Error *err = NULL; + int i; + + if (name == NULL) { +@@ -1486,6 +1487,8 @@ static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def, + } + if (kvm_enabled() && strcmp(name, "host") == 0) { + kvm_cpu_fill_host(x86_cpu_def); ++ object_property_set_bool(OBJECT(cpu), true, "pmu", &err); ++ assert_no_error(err); + return 0; + } + +@@ -2017,7 +2020,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + break; + case 0xA: + /* Architectural Performance Monitoring Leaf */ +- if (kvm_enabled()) { ++ if (kvm_enabled() && cpu->enable_pmu) { + KVMState *s = cs->kvm_state; + + *eax = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EAX); +@@ -2506,6 +2509,11 @@ static int64_t x86_cpu_get_arch_id(CPUState *cs) + return env->cpuid_apic_id; + } + ++static Property x86_cpu_properties[] = { ++ DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), ++ DEFINE_PROP_END_OF_LIST() ++}; ++ + static void x86_cpu_common_class_init(ObjectClass *oc, void *data) + { + X86CPUClass *xcc = X86_CPU_CLASS(oc); +@@ -2515,6 +2523,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) + xcc->parent_realize = dc->realize; + dc->realize = x86_cpu_realizefn; + dc->bus_type = TYPE_ICC_BUS; ++ dc->props = x86_cpu_properties; + + xcc->parent_reset = cc->reset; + cc->reset = x86_cpu_reset; diff --git a/SOURCES/kvm-target-i386-Enable-clflushopt-clwb-pcommit-instructi.patch b/SOURCES/kvm-target-i386-Enable-clflushopt-clwb-pcommit-instructi.patch new file mode 100644 index 0000000..e4b696a --- /dev/null +++ b/SOURCES/kvm-target-i386-Enable-clflushopt-clwb-pcommit-instructi.patch @@ -0,0 +1,50 @@ +From 9381f1943a9e2c5273e32a76fae36daf67ab7089 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Tue, 24 Oct 2017 05:33:03 +0200 +Subject: [PATCH 26/27] target-i386: Enable clflushopt/clwb/pcommit + instructions + +RH-Author: Eduardo Habkost +Message-id: <20171017203653.28578-2-ehabkost@redhat.com> +Patchwork-id: 77349 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/2] target-i386: Enable clflushopt/clwb/pcommit instructions +Bugzilla: 1501510 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das + +From: Xiao Guangrong + +These instructions are used by NVDIMM drivers and the specification is +located at: +https://software.intel.com/sites/default/files/managed/0d/53/319433-022.pdf + +There instructions are available on Skylake Server. + +Signed-off-by: Xiao Guangrong +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +(cherry picked from commit f7fda280948a5e74aeb076ef346b991ecb173c56) +Signed-off-by: Eduardo Habkost +--- + target-i386/cpu.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 914fc66..e739647 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -149,8 +149,8 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + "bmi2", "erms", "invpcid", "rtm", + NULL, NULL, "mpx", NULL, + "avx512f", "avx512dq", "rdseed", "adx", +- "smap", "avx512ifma", NULL, NULL, +- NULL, NULL, "avx512pf", "avx512er", ++ "smap", "avx512ifma", "pcommit", "clflushopt", ++ "clwb", NULL, "avx512pf", "avx512er", + "avx512cd", "sha-ni", "avx512bw", "avx512vl", + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Filter-FEAT_7_0_EBX-TCG-features-too.patch b/SOURCES/kvm-target-i386-Filter-FEAT_7_0_EBX-TCG-features-too.patch new file mode 100644 index 0000000..0752c5f --- /dev/null +++ b/SOURCES/kvm-target-i386-Filter-FEAT_7_0_EBX-TCG-features-too.patch @@ -0,0 +1,56 @@ +From 65c528e40cc9e6d3d887fd79284d465bb482bbe2 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:41 +0100 +Subject: [PATCH 11/17] target-i386: Filter FEAT_7_0_EBX TCG features too +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-11-ehabkost@redhat.com> +Patchwork-id: 74044 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 10/14] target-i386: Filter FEAT_7_0_EBX TCG features too +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +The TCG_7_0_EBX_FEATURES macro was defined but never used (it even had a +typo that was never noticed). Make the existing TCG feature filtering +code use it. + +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +Cc: qemu-stable@nongnu.org +Signed-off-by: Andreas Färber +(cherry picked from commit d0a70f46fa9a3257089a56f2f620b0eff868557f) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index e32d4d7..d424211 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -502,7 +502,7 @@ typedef struct x86_def_t { + #define TCG_EXT3_FEATURES (CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | \ + CPUID_EXT3_CR8LEG | CPUID_EXT3_ABM | CPUID_EXT3_SSE4A) + #define TCG_SVM_FEATURES 0 +-#define TCG_7_0_EBX_FEATURES (CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_SMAP \ ++#define TCG_7_0_EBX_FEATURES (CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_SMAP | \ + CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ADX) + /* missing: + CPUID_7_0_EBX_FSGSBASE, CPUID_7_0_EBX_HLE, CPUID_7_0_EBX_AVX2, +@@ -2640,6 +2640,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + if (!kvm_enabled()) { + env->features[FEAT_1_EDX] &= TCG_FEATURES; + env->features[FEAT_1_ECX] &= TCG_EXT_FEATURES; ++ env->features[FEAT_7_0_EBX] &= TCG_7_0_EBX_FEATURES; + env->features[FEAT_8000_0001_EDX] &= TCG_EXT2_FEATURES; + env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; + env->features[FEAT_SVM] &= TCG_SVM_FEATURES; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Filter-KVM-and-0xC0000001-features-on-TC.patch b/SOURCES/kvm-target-i386-Filter-KVM-and-0xC0000001-features-on-TC.patch new file mode 100644 index 0000000..20f595a --- /dev/null +++ b/SOURCES/kvm-target-i386-Filter-KVM-and-0xC0000001-features-on-TC.patch @@ -0,0 +1,57 @@ +From d037664335efca55df79abcde79f4f2733ca535b Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:42 +0100 +Subject: [PATCH 12/17] target-i386: Filter KVM and 0xC0000001 features on TCG +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-12-ehabkost@redhat.com> +Patchwork-id: 74040 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 11/14] target-i386: Filter KVM and 0xC0000001 features on TCG +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +TCG doesn't support any of the feature flags on FEAT_KVM and +FEAT_C000_0001_EDX feature words, so clear all bits on those feature +words. + +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 84a6c6cd40687598c7e85d7de8095e08b5e636d7) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index d424211..e6821b6 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -501,7 +501,9 @@ typedef struct x86_def_t { + CPUID_EXT2_PDPE1GB */ + #define TCG_EXT3_FEATURES (CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | \ + CPUID_EXT3_CR8LEG | CPUID_EXT3_ABM | CPUID_EXT3_SSE4A) ++#define TCG_EXT4_FEATURES 0 + #define TCG_SVM_FEATURES 0 ++#define TCG_KVM_FEATURES 0 + #define TCG_7_0_EBX_FEATURES (CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_SMAP | \ + CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ADX) + /* missing: +@@ -2644,6 +2646,8 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + env->features[FEAT_8000_0001_EDX] &= TCG_EXT2_FEATURES; + env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; + env->features[FEAT_SVM] &= TCG_SVM_FEATURES; ++ env->features[FEAT_KVM] &= TCG_KVM_FEATURES; ++ env->features[FEAT_C000_0001_EDX] &= TCG_EXT4_FEATURES; + env->features[FEAT_XSAVE] = 0; + env->features[FEAT_7_0_ECX] &= TCG_7_0_ECX_FEATURES; + env->features[FEAT_7_0_EDX] &= TCG_7_0_EDX_FEATURES; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Intel-MPX.patch b/SOURCES/kvm-target-i386-Intel-MPX.patch new file mode 100644 index 0000000..a52582d --- /dev/null +++ b/SOURCES/kvm-target-i386-Intel-MPX.patch @@ -0,0 +1,272 @@ +From 0c9168510f4ddbdec3b0a88095db2e8f3f0aeef7 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:23 +0200 +Subject: [PATCH 03/10] target-i386: Intel MPX + +Message-id: <1435260689-9556-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66500 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/8] target-i386: Intel MPX +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +From: Liu Jinsong + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1233350 + +Add some MPX related definiation, and hardcode sizes and offsets +of xsave features 3 and 4. It also add corresponding part to +kvm_get/put_xsave, and vmstate. + +Signed-off-by: Liu Jinsong +Signed-off-by: Paolo Bonzini +(cherry picked from commit 79e9ebebbf2a00c46fcedb6dc7dd5e12bbd30216) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/kvm.c + target-i386/machine.c +--- + target-i386/cpu.c | 4 ++++ + target-i386/cpu.h | 25 ++++++++++++++++++++++--- + target-i386/kvm.c | 24 ++++++++++++++++++++++++ + target-i386/machine.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 101 insertions(+), 3 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 0fd100f..a9e80d9 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -224,6 +224,10 @@ typedef struct ExtSaveArea { + static const ExtSaveArea ext_save_areas[] = { + [2] = { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, + .offset = 0x240, .size = 0x100 }, ++ [3] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, ++ .offset = 0x3c0, .size = 0x40 }, ++ [4] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, ++ .offset = 0x400, .size = 0x10 }, + }; + + const char *get_register_name_32(unsigned int reg) +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index e9edd3d..7ebdbb3 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -383,9 +383,14 @@ + + #define MSR_VM_HSAVE_PA 0xc0010117 + +-#define XSTATE_FP 1 +-#define XSTATE_SSE 2 +-#define XSTATE_YMM 4 ++#define MSR_IA32_BNDCFGS 0x00000d90 ++ ++#define XSTATE_FP (1ULL << 0) ++#define XSTATE_SSE (1ULL << 1) ++#define XSTATE_YMM (1ULL << 2) ++#define XSTATE_BNDREGS (1ULL << 3) ++#define XSTATE_BNDCSR (1ULL << 4) ++ + + /* CPUID feature words */ + typedef enum FeatureWord { +@@ -548,6 +553,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EBX_ERMS (1 << 9) + #define CPUID_7_0_EBX_INVPCID (1 << 10) + #define CPUID_7_0_EBX_RTM (1 << 11) ++#define CPUID_7_0_EBX_MPX (1 << 14) + #define CPUID_7_0_EBX_RDSEED (1 << 18) + #define CPUID_7_0_EBX_ADX (1 << 19) + #define CPUID_7_0_EBX_SMAP (1 << 20) +@@ -698,6 +704,16 @@ typedef union { + uint64_t q; + } MMXReg; + ++typedef struct BNDReg { ++ uint64_t lb; ++ uint64_t ub; ++} BNDReg; ++ ++typedef struct BNDCSReg { ++ uint64_t cfgu; ++ uint64_t sts; ++} BNDCSReg; ++ + #ifdef HOST_WORDS_BIGENDIAN + #define XMM_B(n) _b[15 - (n)] + #define XMM_W(n) _w[7 - (n)] +@@ -918,6 +934,9 @@ typedef struct CPUX86State { + + uint64_t xstate_bv; + XMMReg ymmh_regs[CPU_NB_REGS]; ++ BNDReg bnd_regs[4]; ++ BNDCSReg bndcs_regs; ++ uint64_t msr_bndcfgs; + + uint64_t xcr0; + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 97ae345..6d9aa63 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -68,6 +68,7 @@ static bool has_msr_tsc_deadline; + static bool has_msr_async_pf_en; + static bool has_msr_pv_eoi_en; + static bool has_msr_misc_enable; ++static bool has_msr_bndcfgs; + static bool has_msr_kvm_steal_time; + static int lm_capable_kernel; + static bool has_msr_hv_hypercall; +@@ -785,6 +786,10 @@ static int kvm_get_supported_msrs(KVMState *s) + has_msr_misc_enable = true; + continue; + } ++ if (kvm_msr_list->indices[i] == MSR_IA32_BNDCFGS) { ++ has_msr_bndcfgs = true; ++ continue; ++ } + } + } + +@@ -988,6 +993,8 @@ static int kvm_put_fpu(X86CPU *cpu) + #define XSAVE_XMM_SPACE 40 + #define XSAVE_XSTATE_BV 128 + #define XSAVE_YMMH_SPACE 144 ++#define XSAVE_BNDREGS 240 ++#define XSAVE_BNDCSR 256 + + static int kvm_put_xsave(X86CPU *cpu) + { +@@ -1020,6 +1027,10 @@ static int kvm_put_xsave(X86CPU *cpu) + *(uint64_t *)&xsave->region[XSAVE_XSTATE_BV] = env->xstate_bv; + memcpy(&xsave->region[XSAVE_YMMH_SPACE], env->ymmh_regs, + sizeof env->ymmh_regs); ++ memcpy(&xsave->region[XSAVE_BNDREGS], env->bnd_regs, ++ sizeof env->bnd_regs); ++ memcpy(&xsave->region[XSAVE_BNDCSR], &env->bndcs_regs, ++ sizeof(env->bndcs_regs)); + r = kvm_vcpu_ioctl(CPU(cpu), KVM_SET_XSAVE, xsave); + return r; + } +@@ -1255,6 +1266,9 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + MSR_MTRRphysMask(i), env->mtrr_var[i].mask); + } + } ++ if (has_msr_bndcfgs) { ++ kvm_msr_entry_set(&msrs[n++], MSR_IA32_BNDCFGS, env->msr_bndcfgs); ++ } + } + if (env->mcg_cap) { + int i; +@@ -1336,6 +1350,10 @@ static int kvm_get_xsave(X86CPU *cpu) + env->xstate_bv = *(uint64_t *)&xsave->region[XSAVE_XSTATE_BV]; + memcpy(env->ymmh_regs, &xsave->region[XSAVE_YMMH_SPACE], + sizeof env->ymmh_regs); ++ memcpy(env->bnd_regs, &xsave->region[XSAVE_BNDREGS], ++ sizeof env->bnd_regs); ++ memcpy(&env->bndcs_regs, &xsave->region[XSAVE_BNDCSR], ++ sizeof(env->bndcs_regs)); + return 0; + } + +@@ -1479,6 +1497,9 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_misc_enable) { + msrs[n++].index = MSR_IA32_MISC_ENABLE; + } ++ if (has_msr_bndcfgs) { ++ msrs[n++].index = MSR_IA32_BNDCFGS; ++ } + + if (!env->tsc_valid) { + msrs[n++].index = MSR_IA32_TSC; +@@ -1620,6 +1641,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_IA32_MISC_ENABLE: + env->msr_ia32_misc_enable = msrs[i].data; + break; ++ case MSR_IA32_BNDCFGS: ++ env->msr_bndcfgs = msrs[i].data; ++ break; + default: + if (msrs[i].index >= MSR_MC0_CTL && + msrs[i].index < MSR_MC0_CTL + (env->mcg_cap & 0xff) * 4) { +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 4c1ead4..b6be606 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -63,6 +63,21 @@ static const VMStateDescription vmstate_ymmh_reg = { + #define VMSTATE_YMMH_REGS_VARS(_field, _state, _n, _v) \ + VMSTATE_STRUCT_ARRAY(_field, _state, _n, _v, vmstate_ymmh_reg, XMMReg) + ++static const VMStateDescription vmstate_bnd_regs = { ++ .name = "bnd_regs", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64(lb, BNDReg), ++ VMSTATE_UINT64(ub, BNDReg), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++#define VMSTATE_BND_REGS(_field, _state, _n) \ ++ VMSTATE_STRUCT_ARRAY(_field, _state, _n, 0, vmstate_bnd_regs, BNDReg) ++ + static const VMStateDescription vmstate_mtrr_var = { + .name = "mtrr_var", + .version_id = 1, +@@ -572,6 +587,39 @@ static const VMStateDescription vmstate_msr_hyperv_time = { + } + }; + ++static bool mpx_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ unsigned int i; ++ ++ for (i = 0; i < 4; i++) { ++ if (env->bnd_regs[i].lb || env->bnd_regs[i].ub) { ++ return true; ++ } ++ } ++ ++ if (env->bndcs_regs.cfgu || env->bndcs_regs.sts) { ++ return true; ++ } ++ ++ return !!env->msr_bndcfgs; ++} ++ ++static const VMStateDescription vmstate_mpx = { ++ .name = "cpu/mpx", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_BND_REGS(env.bnd_regs, X86CPU, 4), ++ VMSTATE_UINT64(env.bndcs_regs.cfgu, X86CPU), ++ VMSTATE_UINT64(env.bndcs_regs.sts, X86CPU), ++ VMSTATE_UINT64(env.msr_bndcfgs, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -713,6 +761,9 @@ const VMStateDescription vmstate_x86_cpu = { + .vmsd = &vmstate_msr_hyperv_time, + .needed = hyperv_time_enable_needed, + } , { ++ .vmsd = &vmstate_mpx, ++ .needed = mpx_needed, ++ } , { + /* empty */ + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Isolate-KVM-specific-code-on-CPU-feature.patch b/SOURCES/kvm-target-i386-Isolate-KVM-specific-code-on-CPU-feature.patch new file mode 100644 index 0000000..4ffc0d9 --- /dev/null +++ b/SOURCES/kvm-target-i386-Isolate-KVM-specific-code-on-CPU-feature.patch @@ -0,0 +1,89 @@ +From 592237e21bc3527ebc66b8f4c76652cf5cde9438 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:19 +0200 +Subject: [PATCH 03/12] target-i386: Isolate KVM-specific code on CPU feature + filtering logic +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-3-git-send-email-plai@redhat.com> +Patchwork-id: 90855 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 02/10] target-i386: Isolate KVM-specific code on CPU feature filtering logic +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Eduardo Habkost + +This will allow us to re-use the feature filtering logic (and the +check/enforce flag logic) for TCG. + +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 27418adf32b9cd164d464fffc4fc0505d6b2b15d) +Signed-off-by: Paul Lai +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 21 +++++++++++++-------- + 1 file changed, 13 insertions(+), 8 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 6fb805b..ff0921f 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2387,6 +2387,16 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp) + return cpu_list; + } + ++static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w) ++{ ++ FeatureWordInfo *wi = &feature_word_info[w]; ++ ++ assert(kvm_enabled()); ++ return kvm_arch_get_supported_cpuid(kvm_state, wi->cpuid_eax, ++ wi->cpuid_ecx, ++ wi->cpuid_reg); ++} ++ + /* + * Filters CPU feature words based on host availability of each feature. + * +@@ -2394,20 +2404,15 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp) + * + * Returns: 0 if all flags are supported by the host, non-zero otherwise. + */ +-static int filter_features_for_kvm(X86CPU *cpu) ++static int x86_cpu_filter_features(X86CPU *cpu) + { + CPUX86State *env = &cpu->env; +- KVMState *s = kvm_state; + FeatureWord w; + int rv = 0; + +- assert(kvm_enabled()); +- + for (w = 0; w < FEATURE_WORDS; w++) { + FeatureWordInfo *wi = &feature_word_info[w]; +- uint32_t host_feat = kvm_arch_get_supported_cpuid(s, wi->cpuid_eax, +- wi->cpuid_ecx, +- wi->cpuid_reg); ++ uint32_t host_feat = x86_cpu_get_supported_feature_word(w); + uint32_t requested_features = env->features[w]; + env->features[w] &= host_feat; + cpu->filtered_features[w] = requested_features & ~env->features[w]; +@@ -3102,7 +3107,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + env->features[w] &= feature_word_info[w].tcg_features; + } + } else { +- if (filter_features_for_kvm(cpu) && cpu->enforce_cpuid) { ++ if (x86_cpu_filter_features(cpu) && cpu->enforce_cpuid) { + error_setg(&local_err, + "Host's CPU doesn't support requested features"); + goto out; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Loop-based-copying-and-setting-unsetting.patch b/SOURCES/kvm-target-i386-Loop-based-copying-and-setting-unsetting.patch new file mode 100644 index 0000000..6efcc59 --- /dev/null +++ b/SOURCES/kvm-target-i386-Loop-based-copying-and-setting-unsetting.patch @@ -0,0 +1,112 @@ +From 04a8a3d76b171deb5eaf8318591e5cfaea3cc843 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:44 +0100 +Subject: [PATCH 14/17] target-i386: Loop-based copying and setting/unsetting + of feature words +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-14-ehabkost@redhat.com> +Patchwork-id: 74045 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 13/14] target-i386: Loop-based copying and setting/unsetting of feature words +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Now that we have the feature word arrays, we don't need to manually copy +each array item, we can simply iterate through each feature word. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit e1c224b4eb3b8693c230bb2762a959ae1f531f76) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 44 ++++++++++---------------------------------- + 1 file changed, 10 insertions(+), 34 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index d611062..010b95f 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1755,6 +1755,7 @@ static inline void feat2prop(char *s) + static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + { + char *featurestr; /* Single 'key=value" string being parsed */ ++ FeatureWord w; + /* Features to be added */ + FeatureWordArray plus_features = { 0 }; + /* Features to be removed */ +@@ -1844,28 +1845,11 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + } + featurestr = strtok(NULL, ","); + } +- env->features[FEAT_1_EDX] |= plus_features[FEAT_1_EDX]; +- env->features[FEAT_1_ECX] |= plus_features[FEAT_1_ECX]; +- env->features[FEAT_8000_0001_EDX] |= plus_features[FEAT_8000_0001_EDX]; +- env->features[FEAT_8000_0001_ECX] |= plus_features[FEAT_8000_0001_ECX]; +- env->features[FEAT_C000_0001_EDX] |= plus_features[FEAT_C000_0001_EDX]; +- env->features[FEAT_KVM] |= plus_features[FEAT_KVM]; +- env->features[FEAT_SVM] |= plus_features[FEAT_SVM]; +- env->features[FEAT_7_0_EBX] |= plus_features[FEAT_7_0_EBX]; +- env->features[FEAT_7_0_ECX] |= plus_features[FEAT_7_0_ECX]; +- env->features[FEAT_7_0_EDX] |= plus_features[FEAT_7_0_EDX]; +- env->features[FEAT_XSAVE] |= plus_features[FEAT_XSAVE]; +- env->features[FEAT_1_EDX] &= ~minus_features[FEAT_1_EDX]; +- env->features[FEAT_1_ECX] &= ~minus_features[FEAT_1_ECX]; +- env->features[FEAT_8000_0001_EDX] &= ~minus_features[FEAT_8000_0001_EDX]; +- env->features[FEAT_8000_0001_ECX] &= ~minus_features[FEAT_8000_0001_ECX]; +- env->features[FEAT_C000_0001_EDX] &= ~minus_features[FEAT_C000_0001_EDX]; +- env->features[FEAT_KVM] &= ~minus_features[FEAT_KVM]; +- env->features[FEAT_SVM] &= ~minus_features[FEAT_SVM]; +- env->features[FEAT_7_0_EBX] &= ~minus_features[FEAT_7_0_EBX]; +- env->features[FEAT_7_0_ECX] &= ~minus_features[FEAT_7_0_ECX]; +- env->features[FEAT_7_0_EDX] &= ~minus_features[FEAT_7_0_EDX]; +- env->features[FEAT_XSAVE] &= ~minus_features[FEAT_XSAVE]; ++ ++ for (w = 0; w < FEATURE_WORDS; w++) { ++ env->features[w] |= plus_features[w]; ++ env->features[w] &= ~minus_features[w]; ++ } + + out: + return; +@@ -1974,6 +1958,7 @@ static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + { + CPUX86State *env = &cpu->env; + x86_def_t def1, *def = &def1; ++ FeatureWord w; + + memset(def, 0, sizeof(*def)); + +@@ -1992,21 +1977,12 @@ static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + object_property_set_int(OBJECT(cpu), def->family, "family", errp); + object_property_set_int(OBJECT(cpu), def->model, "model", errp); + object_property_set_int(OBJECT(cpu), def->stepping, "stepping", errp); +- env->features[FEAT_1_EDX] = def->features[FEAT_1_EDX]; +- env->features[FEAT_1_ECX] = def->features[FEAT_1_ECX]; +- env->features[FEAT_8000_0001_EDX] = def->features[FEAT_8000_0001_EDX]; +- env->features[FEAT_8000_0001_ECX] = def->features[FEAT_8000_0001_ECX]; + object_property_set_int(OBJECT(cpu), def->xlevel, "xlevel", errp); +- env->features[FEAT_KVM] = def->features[FEAT_KVM]; +- env->features[FEAT_SVM] = def->features[FEAT_SVM]; +- env->features[FEAT_C000_0001_EDX] = def->features[FEAT_C000_0001_EDX]; +- env->features[FEAT_7_0_EBX] = def->features[FEAT_7_0_EBX]; +- env->features[FEAT_7_0_ECX] = def->features[FEAT_7_0_ECX]; +- env->features[FEAT_7_0_EDX] = def->features[FEAT_7_0_EDX]; +- env->features[FEAT_XSAVE] = def->features[FEAT_XSAVE]; + env->cpuid_xlevel2 = def->xlevel2; +- + object_property_set_str(OBJECT(cpu), def->model_id, "model-id", errp); ++ for (w = 0; w < FEATURE_WORDS; w++) { ++ env->features[w] = def->features[w]; ++ } + } + + X86CPU *cpu_x86_create(const char *cpu_model, DeviceState *icc_bridge, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Loop-based-feature-word-filtering-in-TCG.patch b/SOURCES/kvm-target-i386-Loop-based-feature-word-filtering-in-TCG.patch new file mode 100644 index 0000000..5b90519 --- /dev/null +++ b/SOURCES/kvm-target-i386-Loop-based-feature-word-filtering-in-TCG.patch @@ -0,0 +1,127 @@ +From 91e436476830a82f429e1df848ea751280580b46 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:45 +0100 +Subject: [PATCH 15/17] target-i386: Loop-based feature word filtering in TCG + mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-15-ehabkost@redhat.com> +Patchwork-id: 74046 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 14/14] target-i386: Loop-based feature word filtering in TCG mode +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Instead of manually filtering each feature word, add a tcg_features +field to FeatureWordInfo, and use that field to filter all feature words +in TCG mode. + +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 37ce3522cb88c524caec57cb52a4bfbb880abbe5) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 26 +++++++++++++++----------- + 1 file changed, 15 insertions(+), 11 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 010b95f..38056eb 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -254,54 +254,65 @@ typedef struct FeatureWordInfo { + bool cpuid_needs_ecx; /* CPUID instruction uses ECX as input */ + uint32_t cpuid_ecx; /* Input ECX value for CPUID */ + int cpuid_reg; /* output register (R_* constant) */ ++ uint32_t tcg_features; /* Feature flags supported by TCG */ + } FeatureWordInfo; + + static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + [FEAT_1_EDX] = { + .feat_names = feature_name, + .cpuid_eax = 1, .cpuid_reg = R_EDX, ++ .tcg_features = TCG_FEATURES, + }, + [FEAT_1_ECX] = { + .feat_names = ext_feature_name, + .cpuid_eax = 1, .cpuid_reg = R_ECX, ++ .tcg_features = TCG_EXT_FEATURES, + }, + [FEAT_8000_0001_EDX] = { + .feat_names = ext2_feature_name, + .cpuid_eax = 0x80000001, .cpuid_reg = R_EDX, ++ .tcg_features = TCG_EXT2_FEATURES, + }, + [FEAT_8000_0001_ECX] = { + .feat_names = ext3_feature_name, + .cpuid_eax = 0x80000001, .cpuid_reg = R_ECX, ++ .tcg_features = TCG_EXT3_FEATURES, + }, + [FEAT_C000_0001_EDX] = { + .feat_names = ext4_feature_name, + .cpuid_eax = 0xC0000001, .cpuid_reg = R_EDX, ++ .tcg_features = TCG_EXT4_FEATURES, + }, + [FEAT_KVM] = { + .feat_names = kvm_feature_name, + .cpuid_eax = KVM_CPUID_FEATURES, .cpuid_reg = R_EAX, ++ .tcg_features = TCG_KVM_FEATURES, + }, + [FEAT_SVM] = { + .feat_names = svm_feature_name, + .cpuid_eax = 0x8000000A, .cpuid_reg = R_EDX, ++ .tcg_features = TCG_SVM_FEATURES, + }, + [FEAT_7_0_EBX] = { + .feat_names = cpuid_7_0_ebx_feature_name, + .cpuid_eax = 7, + .cpuid_needs_ecx = true, .cpuid_ecx = 0, + .cpuid_reg = R_EBX, ++ .tcg_features = TCG_7_0_EBX_FEATURES, + }, + [FEAT_7_0_ECX] = { + .feat_names = cpuid_7_0_ecx_feature_name, + .cpuid_eax = 7, + .cpuid_needs_ecx = true, .cpuid_ecx = 0, + .cpuid_reg = R_ECX, ++ .tcg_features = TCG_7_0_ECX_FEATURES, + }, + [FEAT_7_0_EDX] = { + .feat_names = cpuid_7_0_edx_feature_name, + .cpuid_eax = 7, + .cpuid_needs_ecx = true, .cpuid_ecx = 0, + .cpuid_reg = R_EDX, ++ .tcg_features = TCG_7_0_EDX_FEATURES, + }, + [FEAT_XSAVE] = { + .feat_names = cpuid_xsave_feature_name, +@@ -2617,17 +2628,10 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + } + + if (!kvm_enabled()) { +- env->features[FEAT_1_EDX] &= TCG_FEATURES; +- env->features[FEAT_1_ECX] &= TCG_EXT_FEATURES; +- env->features[FEAT_7_0_EBX] &= TCG_7_0_EBX_FEATURES; +- env->features[FEAT_8000_0001_EDX] &= TCG_EXT2_FEATURES; +- env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; +- env->features[FEAT_SVM] &= TCG_SVM_FEATURES; +- env->features[FEAT_KVM] &= TCG_KVM_FEATURES; +- env->features[FEAT_C000_0001_EDX] &= TCG_EXT4_FEATURES; +- env->features[FEAT_XSAVE] = 0; +- env->features[FEAT_7_0_ECX] &= TCG_7_0_ECX_FEATURES; +- env->features[FEAT_7_0_EDX] &= TCG_7_0_EDX_FEATURES; ++ FeatureWord w; ++ for (w = 0; w < FEATURE_WORDS; w++) { ++ env->features[w] &= feature_word_info[w].tcg_features; ++ } + } else { + KVMState *s = kvm_state; + if ((cpu->check_cpuid || cpu->enforce_cpuid) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Make-TCG-feature-filtering-more-readable.patch b/SOURCES/kvm-target-i386-Make-TCG-feature-filtering-more-readable.patch new file mode 100644 index 0000000..2683994 --- /dev/null +++ b/SOURCES/kvm-target-i386-Make-TCG-feature-filtering-more-readable.patch @@ -0,0 +1,69 @@ +From 6e553d9996682836a35a1020e9d992c856236342 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:40 +0100 +Subject: [PATCH 10/17] target-i386: Make TCG feature filtering more readable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-10-ehabkost@redhat.com> +Patchwork-id: 74041 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 09/14] target-i386: Make TCG feature filtering more readable +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Instead of an #ifdef in the middle of the code, just set +TCG_EXT2_FEATURES to a different value depending on TARGET_X86_64. + +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit a42d9938a162c3e3c9e441d1927dca5bd59167d9) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index bb8abf7..e32d4d7 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -486,9 +486,17 @@ typedef struct x86_def_t { + CPUID_EXT_X2APIC, CPUID_EXT_TSC_DEADLINE_TIMER, CPUID_EXT_XSAVE, + CPUID_EXT_OSXSAVE, CPUID_EXT_AVX, CPUID_EXT_F16C, + CPUID_EXT_RDRAND */ ++ ++#ifdef TARGET_X86_64 ++#define TCG_EXT2_X86_64_FEATURES (CPUID_EXT2_SYSCALL | CPUID_EXT2_LM) ++#else ++#define TCG_EXT2_X86_64_FEATURES 0 ++#endif ++ + #define TCG_EXT2_FEATURES ((TCG_FEATURES & CPUID_EXT2_AMD_ALIASES) | \ + CPUID_EXT2_NX | CPUID_EXT2_MMXEXT | CPUID_EXT2_RDTSCP | \ +- CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT) ++ CPUID_EXT2_3DNOW | CPUID_EXT2_3DNOWEXT | \ ++ TCG_EXT2_X86_64_FEATURES) + /* missing: + CPUID_EXT2_PDPE1GB */ + #define TCG_EXT3_FEATURES (CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM | \ +@@ -2632,11 +2640,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + if (!kvm_enabled()) { + env->features[FEAT_1_EDX] &= TCG_FEATURES; + env->features[FEAT_1_ECX] &= TCG_EXT_FEATURES; +- env->features[FEAT_8000_0001_EDX] &= (TCG_EXT2_FEATURES +-#ifdef TARGET_X86_64 +- | CPUID_EXT2_SYSCALL | CPUID_EXT2_LM +-#endif +- ); ++ env->features[FEAT_8000_0001_EDX] &= TCG_EXT2_FEATURES; + env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; + env->features[FEAT_SVM] &= TCG_SVM_FEATURES; + env->features[FEAT_XSAVE] = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Merge-feature-filtering-checking-functio.patch b/SOURCES/kvm-target-i386-Merge-feature-filtering-checking-functio.patch new file mode 100644 index 0000000..6511e2e --- /dev/null +++ b/SOURCES/kvm-target-i386-Merge-feature-filtering-checking-functio.patch @@ -0,0 +1,187 @@ +From 50e0729e98e9938b338367e29afd6b7abce9bb04 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:18 +0200 +Subject: [PATCH 02/12] target-i386: Merge feature filtering/checking functions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-2-git-send-email-plai@redhat.com> +Patchwork-id: 90853 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 01/10] target-i386: Merge feature filtering/checking functions +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Eduardo Habkost + +Merge filter_features_for_kvm() and kvm_check_features_against_host(). + +Both functions made exactly the same calculations, the only difference +was that filter_features_for_kvm() changed the bits on cpu->features[], +and kvm_check_features_against_host() did error reporting. + +Reviewed-by: Richard Henderson +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 51f63aed32314479065207ff2fb28255de4dbda4) +Signed-off-by: Paul Lai + + unavailable_host_feature() removed due to lack of references. + report_unavailable_features() from 51f63aed3 to make things compile. + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 91 ++++++++++++++----------------------------------------- + 1 file changed, 22 insertions(+), 69 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index ca43268..6fb805b 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1774,11 +1774,11 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + #endif /* CONFIG_KVM */ + } + +-static int unavailable_host_feature(FeatureWordInfo *f, uint32_t mask) ++static void report_unavailable_features(FeatureWordInfo *f, uint32_t mask) + { + int i; + +- for (i = 0; i < 32; ++i) ++ for (i = 0; i < 32; ++i) { + if (1 << i & mask) { + const char *reg = get_register_name_32(f->cpuid_reg); + assert(reg); +@@ -1787,40 +1787,8 @@ static int unavailable_host_feature(FeatureWordInfo *f, uint32_t mask) + f->cpuid_eax, reg, + f->feat_names[i] ? "." : "", + f->feat_names[i] ? f->feat_names[i] : "", i); +- break; +- } +- return 0; +-} +- +-/* Check if all requested cpu flags are making their way to the guest +- * +- * Returns 0 if all flags are supported by the host, non-zero otherwise. +- * +- * This function may be called only if KVM is enabled. +- */ +-static int kvm_check_features_against_host(KVMState *s, X86CPU *cpu) +-{ +- CPUX86State *env = &cpu->env; +- int rv = 0; +- FeatureWord w; +- +- assert(kvm_enabled()); +- +- for (w = 0; w < FEATURE_WORDS; w++) { +- FeatureWordInfo *wi = &feature_word_info[w]; +- uint32_t guest_feat = env->features[w]; +- uint32_t host_feat = kvm_arch_get_supported_cpuid(s, wi->cpuid_eax, +- wi->cpuid_ecx, +- wi->cpuid_reg); +- uint32_t mask; +- for (mask = 1; mask; mask <<= 1) { +- if (guest_feat & mask && !(host_feat & mask)) { +- unavailable_host_feature(wi, mask); +- rv = 1; +- } + } + } +- return rv; + } + + static void x86_cpuid_version_get_family(Object *obj, Visitor *v, void *opaque, +@@ -2419,12 +2387,21 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp) + return cpu_list; + } + +-#ifdef CONFIG_KVM +-static void filter_features_for_kvm(X86CPU *cpu) ++/* ++ * Filters CPU feature words based on host availability of each feature. ++ * ++ * This function may be called only if KVM is enabled. ++ * ++ * Returns: 0 if all flags are supported by the host, non-zero otherwise. ++ */ ++static int filter_features_for_kvm(X86CPU *cpu) + { + CPUX86State *env = &cpu->env; + KVMState *s = kvm_state; + FeatureWord w; ++ int rv = 0; ++ ++ assert(kvm_enabled()); + + for (w = 0; w < FEATURE_WORDS; w++) { + FeatureWordInfo *wi = &feature_word_info[w]; +@@ -2434,9 +2411,16 @@ static void filter_features_for_kvm(X86CPU *cpu) + uint32_t requested_features = env->features[w]; + env->features[w] &= host_feat; + cpu->filtered_features[w] = requested_features & ~env->features[w]; ++ if (cpu->filtered_features[w]) { ++ if (cpu->check_cpuid || cpu->enforce_cpuid) { ++ report_unavailable_features(wi, cpu->filtered_features[w]); ++ } ++ rv = 1; ++ } + } ++ ++ return rv; + } +-#endif + + static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + { +@@ -3118,42 +3102,11 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + env->features[w] &= feature_word_info[w].tcg_features; + } + } else { +- KVMState *s = kvm_state; +- if ((cpu->check_cpuid || cpu->enforce_cpuid) +- && kvm_check_features_against_host(s, cpu) && cpu->enforce_cpuid) { ++ if (filter_features_for_kvm(cpu) && cpu->enforce_cpuid) { + error_setg(&local_err, + "Host's CPU doesn't support requested features"); + goto out; + } +-#ifdef CONFIG_KVM +- filter_features_for_kvm(cpu); +-#endif +- } +- +- /* +- * RHEL-only: +- * +- * The arch-facilities feature flag is deprecated because it was never +- * supported upstream. The upstream property is "arch-capabilities", +- * but it was not backported to this QEMU version. Note that +- * arch-capabilities is not required for mitigation of CVE-2017-5715. +- * +- * In addition to being deprecated, arch-facilities blocks live migration +- * because the value of MSR_IA32_ARCH_CAPABILITIES is host-dependent and +- * not migration-safe. +- */ +- if (cpu->env.features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_CAPABILITIES) { +- static bool warned = false; +- static Error *arch_facilities_blocker; +- if (!warned) { +- error_setg(&arch_facilities_blocker, +- "The arch-facilities CPU feature is deprecated and " +- "does not support live migration"); +- migrate_add_blocker(arch_facilities_blocker); +- error_report("WARNING: the arch-facilities CPU feature is " +- "deprecated and does not support live migration"); +- warned = true; +- } + } + + #ifndef CONFIG_USER_ONLY +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-Move-hyperv_-static-globals-to-X86CPU.patch b/SOURCES/kvm-target-i386-Move-hyperv_-static-globals-to-X86CPU.patch new file mode 100644 index 0000000..5608caa --- /dev/null +++ b/SOURCES/kvm-target-i386-Move-hyperv_-static-globals-to-X86CPU.patch @@ -0,0 +1,375 @@ +From 6d78a7906b69054a4798b1b68548f59fec9e5da8 Mon Sep 17 00:00:00 2001 +From: Vadim Rozenfeld +Date: Mon, 3 Mar 2014 12:09:13 +0100 +Subject: [PATCH 01/12] target-i386: Move hyperv_* static globals to X86CPU +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Vadim Rozenfeld +Message-id: <1393848564-10511-2-git-send-email-vrozenfe@redhat.com> +Patchwork-id: 57957 +O-Subject: [RHEL-7.0 qemu-kvm v4 PATCH 01/12] target-i386: Move hyperv_* static globals to X86CPU +Bugzilla: 1004773 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Juan Quintela +RH-Acked-by: Eduardo Habkost + +From: Igor Mammedov + + since hyperv_* helper functions are used only in target-i386/kvm.c + move them there as static helpers + +Requested-by: Eduardo Habkost +Signed-off-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 92067bf4bfa144ea3967a9951808f5e587bdab18) + +Conflicts: + target-i386/cpu.h + target-i386/kvm.c +--- + target-i386/Makefile.objs | 2 +- + target-i386/cpu-qom.h | 4 +++ + target-i386/cpu.c | 16 ++++++++---- + target-i386/cpu.h | 4 +++ + target-i386/hyperv.c | 64 ----------------------------------------------- + target-i386/hyperv.h | 45 --------------------------------- + target-i386/kvm.c | 36 ++++++++++++++++++-------- + 7 files changed, 46 insertions(+), 125 deletions(-) + delete mode 100644 target-i386/hyperv.c + delete mode 100644 target-i386/hyperv.h + +Signed-off-by: Miroslav Rezanina +--- + target-i386/Makefile.objs | 2 +- + target-i386/cpu-qom.h | 4 +++ + target-i386/cpu.c | 16 +++++++--- + target-i386/cpu.h | 4 +++ + target-i386/hyperv.c | 64 --------------------------------------------- + target-i386/hyperv.h | 45 ------------------------------- + target-i386/kvm.c | 36 ++++++++++++++++++------- + 7 files changed, 46 insertions(+), 125 deletions(-) + delete mode 100644 target-i386/hyperv.c + delete mode 100644 target-i386/hyperv.h + +diff --git a/target-i386/Makefile.objs b/target-i386/Makefile.objs +index c1d4f05..887dca7 100644 +--- a/target-i386/Makefile.objs ++++ b/target-i386/Makefile.objs +@@ -2,7 +2,7 @@ obj-y += translate.o helper.o cpu.o + obj-y += excp_helper.o fpu_helper.o cc_helper.o int_helper.o svm_helper.o + obj-y += smm_helper.o misc_helper.o mem_helper.o seg_helper.o + obj-$(CONFIG_SOFTMMU) += machine.o arch_memory_mapping.o arch_dump.o +-obj-$(CONFIG_KVM) += kvm.o hyperv.o ++obj-$(CONFIG_KVM) += kvm.o + obj-$(CONFIG_NO_KVM) += kvm-stub.o + obj-$(CONFIG_LINUX_USER) += ioport-user.o + obj-$(CONFIG_BSD_USER) += ioport-user.o +diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h +index 12c7bea..ac56fec 100644 +--- a/target-i386/cpu-qom.h ++++ b/target-i386/cpu-qom.h +@@ -66,6 +66,10 @@ typedef struct X86CPU { + + CPUX86State env; + ++ bool hyperv_vapic; ++ bool hyperv_relaxed_timing; ++ int hyperv_spinlock_attempts; ++ + /* Features that were filtered out because of missing host capabilities */ + uint32_t filtered_features[FEATURE_WORDS]; + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 31ff568..826d8d6 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -35,8 +35,6 @@ + #include "qapi/visitor.h" + #include "sysemu/arch_init.h" + +-#include "hyperv.h" +- + #include "hw/hw.h" + #if defined(CONFIG_KVM) + #include +@@ -1629,12 +1627,19 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + object_property_parse(OBJECT(cpu), num, "tsc-frequency", errp); + } else if (!strcmp(featurestr, "hv-spinlocks")) { + char *err; ++ const int min = 0xFFF; + numvalue = strtoul(val, &err, 0); + if (!*val || *err) { + error_setg(errp, "bad numerical value %s", val); + goto out; + } +- hyperv_set_spinlock_retries(numvalue); ++ if (numvalue < min) { ++ fprintf(stderr, "hv-spinlocks value shall always be >= 0x%x" ++ ", fixup will be removed in future versions\n", ++ min); ++ numvalue = min; ++ } ++ cpu->hyperv_spinlock_attempts = numvalue; + } else { + error_setg(errp, "unrecognized feature %s", featurestr); + goto out; +@@ -1644,9 +1649,9 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + } else if (!strcmp(featurestr, "enforce")) { + check_cpuid = enforce_cpuid = 1; + } else if (!strcmp(featurestr, "hv_relaxed")) { +- hyperv_enable_relaxed_timing(true); ++ cpu->hyperv_relaxed_timing = true; + } else if (!strcmp(featurestr, "hv_vapic")) { +- hyperv_enable_vapic_recommended(true); ++ cpu->hyperv_vapic = true; + } else { + error_setg(errp, "feature string `%s' not in format (+feature|" + "-feature|feature=xyz)", featurestr); +@@ -2559,6 +2564,7 @@ static void x86_cpu_initfn(Object *obj) + x86_cpu_get_feature_words, + NULL, NULL, (void *)cpu->filtered_features, NULL); + ++ cpu->hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY; + env->cpuid_apic_id = x86_cpu_apic_id_from_index(cs->cpu_index); + + /* init various static tables used in TCG mode */ +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 37ff264..4c4c9ff 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -565,6 +565,10 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */ + #define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */ + ++#ifndef HYPERV_SPINLOCK_NEVER_RETRY ++#define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF ++#endif ++ + #define EXCP00_DIVZ 0 + #define EXCP01_DB 1 + #define EXCP02_NMI 2 +diff --git a/target-i386/hyperv.c b/target-i386/hyperv.c +deleted file mode 100644 +index f284e99..0000000 +--- a/target-i386/hyperv.c ++++ /dev/null +@@ -1,64 +0,0 @@ +-/* +- * QEMU Hyper-V support +- * +- * Copyright Red Hat, Inc. 2011 +- * +- * Author: Vadim Rozenfeld +- * +- * This work is licensed under the terms of the GNU GPL, version 2 or later. +- * See the COPYING file in the top-level directory. +- * +- */ +- +-#include "hyperv.h" +- +-static bool hyperv_vapic; +-static bool hyperv_relaxed_timing; +-static int hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY; +- +-void hyperv_enable_vapic_recommended(bool val) +-{ +- hyperv_vapic = val; +-} +- +-void hyperv_enable_relaxed_timing(bool val) +-{ +- hyperv_relaxed_timing = val; +-} +- +-void hyperv_set_spinlock_retries(int val) +-{ +- hyperv_spinlock_attempts = val; +- if (hyperv_spinlock_attempts < 0xFFF) { +- hyperv_spinlock_attempts = 0xFFF; +- } +-} +- +-bool hyperv_enabled(void) +-{ +- return hyperv_hypercall_available() || hyperv_relaxed_timing_enabled(); +-} +- +-bool hyperv_hypercall_available(void) +-{ +- if (hyperv_vapic || +- (hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY)) { +- return true; +- } +- return false; +-} +- +-bool hyperv_vapic_recommended(void) +-{ +- return hyperv_vapic; +-} +- +-bool hyperv_relaxed_timing_enabled(void) +-{ +- return hyperv_relaxed_timing; +-} +- +-int hyperv_get_spinlock_retries(void) +-{ +- return hyperv_spinlock_attempts; +-} +diff --git a/target-i386/hyperv.h b/target-i386/hyperv.h +deleted file mode 100644 +index bacb1d4..0000000 +--- a/target-i386/hyperv.h ++++ /dev/null +@@ -1,45 +0,0 @@ +-/* +- * QEMU Hyper-V support +- * +- * Copyright Red Hat, Inc. 2011 +- * +- * Author: Vadim Rozenfeld +- * +- * This work is licensed under the terms of the GNU GPL, version 2 or later. +- * See the COPYING file in the top-level directory. +- * +- */ +- +-#ifndef QEMU_HW_HYPERV_H +-#define QEMU_HW_HYPERV_H 1 +- +-#include "qemu-common.h" +-#ifdef CONFIG_KVM +-#include +-#endif +- +-#ifndef HYPERV_SPINLOCK_NEVER_RETRY +-#define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF +-#endif +- +-#ifndef KVM_CPUID_SIGNATURE_NEXT +-#define KVM_CPUID_SIGNATURE_NEXT 0x40000100 +-#endif +- +-#if !defined(CONFIG_USER_ONLY) && defined(CONFIG_KVM) +-void hyperv_enable_vapic_recommended(bool val); +-void hyperv_enable_relaxed_timing(bool val); +-void hyperv_set_spinlock_retries(int val); +-#else +-static inline void hyperv_enable_vapic_recommended(bool val) { } +-static inline void hyperv_enable_relaxed_timing(bool val) { } +-static inline void hyperv_set_spinlock_retries(int val) { } +-#endif +- +-bool hyperv_enabled(void); +-bool hyperv_hypercall_available(void); +-bool hyperv_vapic_recommended(void); +-bool hyperv_relaxed_timing_enabled(void); +-int hyperv_get_spinlock_retries(void); +- +-#endif /* QEMU_HW_HYPERV_H */ +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 4b470e4..c7fabd7 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -31,7 +31,7 @@ + #include "hw/i386/pc.h" + #include "hw/i386/apic.h" + #include "exec/ioport.h" +-#include "hyperv.h" ++#include + #include "hw/pci/pci.h" + + //#define DEBUG_KVM +@@ -421,6 +421,22 @@ unsigned long kvm_arch_vcpu_id(CPUState *cs) + return cpu->env.cpuid_apic_id; + } + ++#ifndef KVM_CPUID_SIGNATURE_NEXT ++#define KVM_CPUID_SIGNATURE_NEXT 0x40000100 ++#endif ++ ++static bool hyperv_hypercall_available(X86CPU *cpu) ++{ ++ return cpu->hyperv_vapic || ++ (cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY); ++} ++ ++static bool hyperv_enabled(X86CPU *cpu) ++{ ++ return hyperv_hypercall_available(cpu) || ++ cpu->hyperv_relaxed_timing; ++} ++ + #define KVM_MAX_CPUID_ENTRIES 100 + + int kvm_arch_init_vcpu(CPUState *cs) +@@ -443,7 +459,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + c = &cpuid_data.entries[cpuid_i++]; + memset(c, 0, sizeof(*c)); + c->function = KVM_CPUID_SIGNATURE; +- if (!hyperv_enabled()) { ++ if (!hyperv_enabled(cpu)) { + memcpy(signature, "KVMKVMKVM\0\0\0", 12); + c->eax = 0; + } else { +@@ -459,7 +475,7 @@ int kvm_arch_init_vcpu(CPUState *cs) + c->function = KVM_CPUID_FEATURES; + c->eax = env->features[FEAT_KVM]; + +- if (hyperv_enabled()) { ++ if (hyperv_enabled(cpu)) { + memcpy(signature, "Hv#1\0\0\0\0\0\0\0\0", 12); + c->eax = signature[0]; + +@@ -472,10 +488,10 @@ int kvm_arch_init_vcpu(CPUState *cs) + c = &cpuid_data.entries[cpuid_i++]; + memset(c, 0, sizeof(*c)); + c->function = HYPERV_CPUID_FEATURES; +- if (hyperv_relaxed_timing_enabled()) { ++ if (cpu->hyperv_relaxed_timing) { + c->eax |= HV_X64_MSR_HYPERCALL_AVAILABLE; + } +- if (hyperv_vapic_recommended()) { ++ if (cpu->hyperv_vapic) { + c->eax |= HV_X64_MSR_HYPERCALL_AVAILABLE; + c->eax |= HV_X64_MSR_APIC_ACCESS_AVAILABLE; + } +@@ -483,13 +499,13 @@ int kvm_arch_init_vcpu(CPUState *cs) + c = &cpuid_data.entries[cpuid_i++]; + memset(c, 0, sizeof(*c)); + c->function = HYPERV_CPUID_ENLIGHTMENT_INFO; +- if (hyperv_relaxed_timing_enabled()) { ++ if (cpu->hyperv_relaxed_timing) { + c->eax |= HV_X64_RELAXED_TIMING_RECOMMENDED; + } +- if (hyperv_vapic_recommended()) { ++ if (cpu->hyperv_vapic) { + c->eax |= HV_X64_APIC_ACCESS_RECOMMENDED; + } +- c->ebx = hyperv_get_spinlock_retries(); ++ c->ebx = cpu->hyperv_spinlock_attempts; + + c = &cpuid_data.entries[cpuid_i++]; + memset(c, 0, sizeof(*c)); +@@ -1177,11 +1193,11 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], MSR_CORE_PERF_GLOBAL_CTRL, + env->msr_global_ctrl); + } +- if (hyperv_hypercall_available()) { ++ if (hyperv_hypercall_available(cpu)) { + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_GUEST_OS_ID, 0); + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_HYPERCALL, 0); + } +- if (hyperv_vapic_recommended()) { ++ if (cpu->hyperv_vapic) { + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_APIC_ASSIST_PAGE, 0); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Pass-X86CPU-object-to-cpu_x86_find_by_name.patch b/SOURCES/kvm-target-i386-Pass-X86CPU-object-to-cpu_x86_find_by_name.patch new file mode 100644 index 0000000..aed3676 --- /dev/null +++ b/SOURCES/kvm-target-i386-Pass-X86CPU-object-to-cpu_x86_find_by_name.patch @@ -0,0 +1,48 @@ +From 72dbf6a170042cdeccc37ef106df264a48631d71 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 2 Aug 2013 14:08:51 +0200 +Subject: target-i386: Pass X86CPU object to cpu_x86_find_by_name() + +RH-Author: Eduardo Habkost +Message-id: <1375452533-12507-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 52932 +O-Subject: [RHEL-7 PATCH 1/3] target-i386: Pass X86CPU object to cpu_x86_find_by_name() +Bugzilla: 853101 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Gleb Natapov + +Bugzilla: 853101 + +This will help us change the initialization code to not require carrying +some intermediate values in a x86_def_t struct (and eventually kill the +x86_def_t struct entirely). + +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit c139911261c5acc9dae56b1180db320ba25636bd) +Signed-off-by: Eduardo Habkost + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 4b2da0d..0c9a99a 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1475,7 +1475,8 @@ static void x86_cpu_get_feature_words(Object *obj, Visitor *v, void *opaque, + error_propagate(errp, err); + } + +-static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, const char *name) ++static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def, ++ const char *name) + { + x86_def_t *def; + int i; +@@ -1742,7 +1743,7 @@ static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + + memset(def, 0, sizeof(*def)); + +- if (cpu_x86_find_by_name(def, name) < 0) { ++ if (cpu_x86_find_by_name(cpu, def, name) < 0) { + error_setg(errp, "Unable to find CPU definition: %s", name); + return; + } diff --git a/SOURCES/kvm-target-i386-Set-model-6-on-qemu64-qemu32-CPU-models.patch b/SOURCES/kvm-target-i386-Set-model-6-on-qemu64-qemu32-CPU-models.patch new file mode 100644 index 0000000..0178ace --- /dev/null +++ b/SOURCES/kvm-target-i386-Set-model-6-on-qemu64-qemu32-CPU-models.patch @@ -0,0 +1,105 @@ +From 9baf8dbaac5707b25f9126a5ba06716efe6793d5 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 17 Oct 2013 10:38:42 +0200 +Subject: [PATCH 05/25] target-i386: Set model=6 on qemu64 & qemu32 CPU models +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1379363997-11783-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54398 +O-Subject: [RHEL7 PATCH 1/4] target-i386: Set model=6 on qemu64 & qemu32 CPU models +Bugzilla: 1004290 +RH-Acked-by: Bandan Das +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +Bugzilla: 1004290 +Upstream status: commit f8e6a11aecc96e9d8a84f17d7c07019471714e20. +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6290888 + +There's no Intel CPU with family=6,model=2, and Linux and Windows guests +disable SEP when seeing that combination due to Pentium Pro erratum #82. + +In addition to just having SEP ignored by guests, Skype (and maybe other +applications) runs sysenter directly without passing through ntdll on +Windows, and crashes because Windows ignored the SEP CPUID bit. + +So, having model > 2 is a better default on qemu64 and qemu32 for two +reasons: making SEP really available for guests, and avoiding crashing +applications that work on bare metal. + +model=3 would fix the problem, but it causes CPU enumeration problems +for Windows guests[1]. So let's set model=6, that matches "Athlon +(PM core)" on AMD and "P2 with on-die L2 cache" on Intel and it allows +Windows to use all CPUs as well as fixing sysenter. + +[1] https://bugzilla.redhat.com/show_bug.cgi?id=508623 + +Cc: Andrea Arcangeli +Signed-off-by: Eduardo Habkost +Reviewed-by: Igor Mammedov +Signed-off-by: Andreas Färber +(cherry picked from commit 5cb6eb263d92972b54f84e0acf75e7159de20498) +Signed-off-by: Eduardo Habkost + +Conflicts: + include/hw/i386/pc.h + +Backport notes: + * PC_COMPAT_1_6 does not exist on the RHEL-7 tree + * RHEL-6 already have model=6 on qemu64 since RHEL-6.0, but not on + qemu32, so PC_RHEL6_5_COMPAT includes only the qemu32 compat change + +Maintainer's notes: + * Cherry-picked from Andreas Färber's qom-cpu tree + * Upstream status valid for qemu tree +--- + hw/i386/pc_piix.c | 4 ++++ + target-i386/cpu.c | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) +--- + hw/i386/pc_piix.c | 4 ++++ + target-i386/cpu.c | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index a19f155..39be127 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -861,6 +861,10 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "level",\ + .value = stringify(0),\ + },{\ ++ .driver = "qemu32-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(3),\ ++ },{\ + .driver = "usb-ccid",\ + .property = "serial",\ + .value = "1",\ +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index a0358c0..170a46c 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -434,7 +434,7 @@ static x86_def_t builtin_x86_defs[] = { + .level = 4, + .vendor = CPUID_VENDOR_AMD, + .family = 6, +- .model = 2, ++ .model = 6, + .stepping = 3, + .features[FEAT_1_EDX] = + PPRO_FEATURES | +@@ -537,7 +537,7 @@ static x86_def_t builtin_x86_defs[] = { + .level = 4, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, +- .model = 3, ++ .model = 6, + .stepping = 3, + .features[FEAT_1_EDX] = + PPRO_FEATURES, +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-Support-invariant-tsc-flag.patch b/SOURCES/kvm-target-i386-Support-invariant-tsc-flag.patch new file mode 100644 index 0000000..d8a216a --- /dev/null +++ b/SOURCES/kvm-target-i386-Support-invariant-tsc-flag.patch @@ -0,0 +1,142 @@ +From 4e903b8594bb59a953e66ca0fb422079f6f6b573 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 21 Aug 2019 14:30:05 +0200 +Subject: [PATCH 1/3] target-i386: Support "invariant tsc" flag +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20190821143006.23516-2-ehabkost@redhat.com> +Patchwork-id: 90101 +O-Subject: [RHEL-7.8 qemu-kvm PATCH 1/2] target-i386: Support "invariant tsc" flag +Bugzilla: 1626871 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Igor Mammedov + +From: Marcelo Tosatti + +Expose "Invariant TSC" flag, if KVM is enabled. From Intel documentation: + +17.13.1 Invariant TSC The time stamp counter in newer processors may +support an enhancement, referred to as invariant TSC. Processor’s +support for invariant TSC is indicated by CPUID.80000007H:EDX[8]. +The invariant TSC will run at a constant rate in all ACPI P-, C-. +and T-states. This is the architectural behavior moving forward. On +processors with invariant TSC support, the OS may use the TSC for wall +clock timer services (instead of ACPI or HPET timers). TSC reads are +much more efficient and do not incur the overhead associated with a ring +transition or access to a platform resource. + +Backport notes: + One extra line to remove invtsc was added to + kvm_cpu_fill_host(), to replace the unmigratable_flags field, + and fix the same issue fixed by upstream commit 120eee7d1fdb + ("target-i386: Set migratable=yes by default on "host" CPU + mooel"). + +Signed-off-by: Marcelo Tosatti +[ehabkost: redo feature filtering to use .tcg_features] +[ehabkost: add CPUID_APM_INVTSC macro, add it to .unmigratable_flags] +Signed-off-by: Eduardo Habkost +Signed-off-by: Andreas Färber +(cherry picked from commit 303752a9068bfe84b9b05f1cd5ad5ff65b7f3ea6) +Signed-off-by: Eduardo Habkost + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 26 ++++++++++++++++++++++++++ + target-i386/cpu.h | 4 ++++ + 2 files changed, 30 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index c2fcd1e..c74f597 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -199,6 +199,17 @@ static const char *cpuid_xsave_feature_name[] = { + NULL, NULL, NULL, NULL, + }; + ++static const char *cpuid_apm_edx_feature_name[] = { ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ "invtsc", NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++}; ++ + #define I486_FEATURES (CPUID_FP87 | CPUID_VME | CPUID_PSE) + #define PENTIUM_FEATURES (I486_FEATURES | CPUID_DE | CPUID_TSC | \ + CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_MMX | CPUID_APIC) +@@ -258,6 +269,7 @@ static const char *cpuid_xsave_feature_name[] = { + CPUID_7_0_EBX_RDSEED */ + #define TCG_7_0_ECX_FEATURES 0 + #define TCG_7_0_EDX_FEATURES 0 ++#define TCG_APM_FEATURES 0 + + + typedef struct FeatureWordInfo { +@@ -326,6 +338,12 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .cpuid_reg = R_EDX, + .tcg_features = TCG_7_0_EDX_FEATURES, + }, ++ [FEAT_8000_0007_EDX] = { ++ .feat_names = cpuid_apm_edx_feature_name, ++ .cpuid_eax = 0x80000007, ++ .cpuid_reg = R_EDX, ++ .tcg_features = TCG_APM_FEATURES, ++ }, + [FEAT_8000_0008_EBX] = { + .feat_names = cpuid_80000008_ebx_feature_name, + .cpuid_eax = 0x80000008, +@@ -1750,6 +1768,8 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + + /* arch-facilities: deprecated (see comment on x86_cpu_realizefn()) */ + x86_cpu_def->features[FEAT_7_0_EDX] &= ~CPUID_7_0_EDX_ARCH_CAPABILITIES; ++ /* invtsc: not migratable, so not enabled by default */ ++ x86_cpu_def->features[FEAT_8000_0007_EDX] &= ~CPUID_APM_INVTSC; + + #endif /* CONFIG_KVM */ + } +@@ -2805,6 +2825,12 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + *ecx = 0x02008140; + *edx = 0; + break; ++ case 0x80000007: ++ *eax = 0; ++ *ebx = 0; ++ *ecx = 0; ++ *edx = env->features[FEAT_8000_0007_EDX]; ++ break; + case 0x80000008: + /* virtual & phys address size in low 2 bytes. */ + /* XXX: This value must match the one used in the MMU code. */ +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 5d47ab8..cbbc34f 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -408,6 +408,7 @@ typedef enum FeatureWord { + FEAT_7_0_EDX, /* CPUID[EAX=7,ECX=0].EDX */ + FEAT_8000_0001_EDX, /* CPUID[8000_0001].EDX */ + FEAT_8000_0001_ECX, /* CPUID[8000_0001].ECX */ ++ FEAT_8000_0007_EDX, /* CPUID[8000_0007].EDX */ + FEAT_8000_0008_EBX, /* CPUID[8000_0008].EBX */ + FEAT_C000_0001_EDX, /* CPUID[C000_0001].EDX */ + FEAT_KVM, /* CPUID[4000_0001].EAX (KVM_CPUID_FEATURES) */ +@@ -613,6 +614,9 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_XSAVE_XGETBV1 (1U << 2) + #define CPUID_XSAVE_XSAVES (1U << 3) + ++/* CPUID[0x80000007].EDX flags: */ ++#define CPUID_APM_INVTSC (1U << 8) ++ + #define CPUID_VENDOR_SZ 12 + + #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-add-Intel-AVX-512-support.patch b/SOURCES/kvm-target-i386-add-Intel-AVX-512-support.patch new file mode 100644 index 0000000..dc644dd --- /dev/null +++ b/SOURCES/kvm-target-i386-add-Intel-AVX-512-support.patch @@ -0,0 +1,337 @@ +From 5567938d29bf8a0ce451e59a8db009c12ab3444c Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:29 +0200 +Subject: [PATCH 09/10] target-i386: add Intel AVX-512 support + +Message-id: <1435260689-9556-9-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66506 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 8/8] target-i386: add Intel AVX-512 support +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +Add AVX512 feature bits, register definition and corresponding +xsave/vmstate support. + +Reviewed-by: Eduardo Habkost +Signed-off-by: Chao Peng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 9aecd6f8aef653cea58932f06a2740299dbe5fd3) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/cpu.h + target-i386/machine.c +--- + target-i386/cpu.c | 10 ++++-- + target-i386/cpu.h | 61 ++++++++++++++++++++++++++++++++++++ + target-i386/kvm.c | 19 +++++++++++ + target-i386/machine.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 175 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index fe60c33..06efe17 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -146,8 +146,8 @@ static const char *svm_feature_name[] = { + static const char *cpuid_7_0_ebx_feature_name[] = { + "fsgsbase", NULL, NULL, "bmi1", "hle", "avx2", NULL, "smep", + "bmi2", "erms", "invpcid", "rtm", NULL, NULL, "mpx", NULL, +- NULL, NULL, "rdseed", "adx", "smap", NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ++ "avx512f", NULL, "rdseed", "adx", "smap", NULL, NULL, NULL, ++ NULL, NULL, "avx512pf", "avx512er", "avx512cd", NULL, NULL, NULL, + }; + + typedef struct FeatureWordInfo { +@@ -228,6 +228,12 @@ static const ExtSaveArea ext_save_areas[] = { + .offset = 0x3c0, .size = 0x40 }, + [4] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, + .offset = 0x400, .size = 0x40 }, ++ [5] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, ++ .offset = 0x440, .size = 0x40 }, ++ [6] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, ++ .offset = 0x480, .size = 0x200 }, ++ [7] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, ++ .offset = 0x680, .size = 0x400 }, + }; + + const char *get_register_name_32(unsigned int reg) +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index fc1e42e..61e9b86 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -390,6 +390,9 @@ + #define XSTATE_YMM (1ULL << 2) + #define XSTATE_BNDREGS (1ULL << 3) + #define XSTATE_BNDCSR (1ULL << 4) ++#define XSTATE_OPMASK (1ULL << 5) ++#define XSTATE_ZMM_Hi256 (1ULL << 6) ++#define XSTATE_Hi16_ZMM (1ULL << 7) + + + /* CPUID feature words */ +@@ -554,9 +557,13 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EBX_INVPCID (1U << 10) + #define CPUID_7_0_EBX_RTM (1U << 11) + #define CPUID_7_0_EBX_MPX (1U << 14) ++#define CPUID_7_0_EBX_AVX512F (1U << 16) /* AVX-512 Foundation */ + #define CPUID_7_0_EBX_RDSEED (1U << 18) + #define CPUID_7_0_EBX_ADX (1U << 19) + #define CPUID_7_0_EBX_SMAP (1U << 20) ++#define CPUID_7_0_EBX_AVX512PF (1U << 26) /* AVX-512 Prefetch */ ++#define CPUID_7_0_EBX_AVX512ER (1U << 27) /* AVX-512 Exponential and Reciprocal */ ++#define CPUID_7_0_EBX_AVX512CD (1U << 28) /* AVX-512 Conflict Detection */ + + #define CPUID_VENDOR_SZ 12 + +@@ -697,6 +704,24 @@ typedef union { + } XMMReg; + + typedef union { ++ uint8_t _b[32]; ++ uint16_t _w[16]; ++ uint32_t _l[8]; ++ uint64_t _q[4]; ++ float32 _s[8]; ++ float64 _d[4]; ++} YMMReg; ++ ++typedef union { ++ uint8_t _b[64]; ++ uint16_t _w[32]; ++ uint32_t _l[16]; ++ uint64_t _q[8]; ++ float32 _s[16]; ++ float64 _d[8]; ++} ZMMReg; ++ ++typedef union { + uint8_t _b[8]; + uint16_t _w[4]; + uint32_t _l[2]; +@@ -715,6 +740,20 @@ typedef struct BNDCSReg { + } BNDCSReg; + + #ifdef HOST_WORDS_BIGENDIAN ++#define ZMM_B(n) _b[63 - (n)] ++#define ZMM_W(n) _w[31 - (n)] ++#define ZMM_L(n) _l[15 - (n)] ++#define ZMM_S(n) _s[15 - (n)] ++#define ZMM_Q(n) _q[7 - (n)] ++#define ZMM_D(n) _d[7 - (n)] ++ ++#define YMM_B(n) _b[31 - (n)] ++#define YMM_W(n) _w[15 - (n)] ++#define YMM_L(n) _l[7 - (n)] ++#define YMM_S(n) _s[7 - (n)] ++#define YMM_Q(n) _q[3 - (n)] ++#define YMM_D(n) _d[3 - (n)] ++ + #define XMM_B(n) _b[15 - (n)] + #define XMM_W(n) _w[7 - (n)] + #define XMM_L(n) _l[3 - (n)] +@@ -727,6 +766,20 @@ typedef struct BNDCSReg { + #define MMX_L(n) _l[1 - (n)] + #define MMX_S(n) _s[1 - (n)] + #else ++#define ZMM_B(n) _b[n] ++#define ZMM_W(n) _w[n] ++#define ZMM_L(n) _l[n] ++#define ZMM_S(n) _s[n] ++#define ZMM_Q(n) _q[n] ++#define ZMM_D(n) _d[n] ++ ++#define YMM_B(n) _b[n] ++#define YMM_W(n) _w[n] ++#define YMM_L(n) _l[n] ++#define YMM_S(n) _s[n] ++#define YMM_Q(n) _q[n] ++#define YMM_D(n) _d[n] ++ + #define XMM_B(n) _b[n] + #define XMM_W(n) _w[n] + #define XMM_L(n) _l[n] +@@ -765,6 +818,8 @@ typedef struct { + + #define NB_MMU_MODES 3 + ++#define NB_OPMASK_REGS 8 ++ + typedef enum TPRAccess { + TPR_ACCESS_READ, + TPR_ACCESS_WRITE, +@@ -826,6 +881,12 @@ typedef struct CPUX86State { + + XMMReg ymmh_regs[CPU_NB_REGS]; + ++ uint64_t opmask_regs[NB_OPMASK_REGS]; ++ YMMReg zmmh_regs[CPU_NB_REGS]; ++#ifdef TARGET_X86_64 ++ ZMMReg hi16_zmm_regs[CPU_NB_REGS]; ++#endif ++ + /* sysenter registers */ + uint32_t sysenter_cs; + target_ulong sysenter_esp; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index bbbbac0..c91bfb8 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -995,6 +995,9 @@ static int kvm_put_fpu(X86CPU *cpu) + #define XSAVE_YMMH_SPACE 144 + #define XSAVE_BNDREGS 240 + #define XSAVE_BNDCSR 256 ++#define XSAVE_OPMASK 272 ++#define XSAVE_ZMM_Hi256 288 ++#define XSAVE_Hi16_ZMM 416 + + static int kvm_put_xsave(X86CPU *cpu) + { +@@ -1031,6 +1034,14 @@ static int kvm_put_xsave(X86CPU *cpu) + sizeof env->bnd_regs); + memcpy(&xsave->region[XSAVE_BNDCSR], &env->bndcs_regs, + sizeof(env->bndcs_regs)); ++ memcpy(&xsave->region[XSAVE_OPMASK], env->opmask_regs, ++ sizeof env->opmask_regs); ++ memcpy(&xsave->region[XSAVE_ZMM_Hi256], env->zmmh_regs, ++ sizeof env->zmmh_regs); ++#ifdef TARGET_X86_64 ++ memcpy(&xsave->region[XSAVE_Hi16_ZMM], env->hi16_zmm_regs, ++ sizeof env->hi16_zmm_regs); ++#endif + r = kvm_vcpu_ioctl(CPU(cpu), KVM_SET_XSAVE, xsave); + return r; + } +@@ -1354,6 +1365,14 @@ static int kvm_get_xsave(X86CPU *cpu) + sizeof env->bnd_regs); + memcpy(&env->bndcs_regs, &xsave->region[XSAVE_BNDCSR], + sizeof(env->bndcs_regs)); ++ memcpy(env->opmask_regs, &xsave->region[XSAVE_OPMASK], ++ sizeof env->opmask_regs); ++ memcpy(env->zmmh_regs, &xsave->region[XSAVE_ZMM_Hi256], ++ sizeof env->zmmh_regs); ++#ifdef TARGET_X86_64 ++ memcpy(env->hi16_zmm_regs, &xsave->region[XSAVE_Hi16_ZMM], ++ sizeof env->hi16_zmm_regs); ++#endif + return 0; + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index b6be606..2c97002 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -63,6 +63,44 @@ static const VMStateDescription vmstate_ymmh_reg = { + #define VMSTATE_YMMH_REGS_VARS(_field, _state, _n, _v) \ + VMSTATE_STRUCT_ARRAY(_field, _state, _n, _v, vmstate_ymmh_reg, XMMReg) + ++static const VMStateDescription vmstate_zmmh_reg = { ++ .name = "zmmh_reg", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64(YMM_Q(0), YMMReg), ++ VMSTATE_UINT64(YMM_Q(1), YMMReg), ++ VMSTATE_UINT64(YMM_Q(2), YMMReg), ++ VMSTATE_UINT64(YMM_Q(3), YMMReg), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++#define VMSTATE_ZMMH_REGS_VARS(_field, _state, _n) \ ++ VMSTATE_STRUCT_ARRAY(_field, _state, _n, 0, vmstate_zmmh_reg, YMMReg) ++ ++#ifdef TARGET_X86_64 ++static const VMStateDescription vmstate_hi16_zmm_reg = { ++ .name = "hi16_zmm_reg", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64(ZMM_Q(0), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(1), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(2), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(3), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(4), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(5), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(6), ZMMReg), ++ VMSTATE_UINT64(ZMM_Q(7), ZMMReg), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++#define VMSTATE_Hi16_ZMM_REGS_VARS(_field, _state, _n) \ ++ VMSTATE_STRUCT_ARRAY(_field, _state, _n, 0, vmstate_hi16_zmm_reg, ZMMReg) ++#endif ++ + static const VMStateDescription vmstate_bnd_regs = { + .name = "bnd_regs", + .version_id = 1, +@@ -620,6 +658,52 @@ static const VMStateDescription vmstate_mpx = { + } + }; + ++static bool avx512_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ unsigned int i; ++ ++ for (i = 0; i < NB_OPMASK_REGS; i++) { ++ if (env->opmask_regs[i]) { ++ return true; ++ } ++ } ++ ++ for (i = 0; i < CPU_NB_REGS; i++) { ++#define ENV_ZMMH(reg, field) (env->zmmh_regs[reg].YMM_Q(field)) ++ if (ENV_ZMMH(i, 0) || ENV_ZMMH(i, 1) || ++ ENV_ZMMH(i, 2) || ENV_ZMMH(i, 3)) { ++ return true; ++ } ++#ifdef TARGET_X86_64 ++#define ENV_Hi16_ZMM(reg, field) (env->hi16_zmm_regs[reg].ZMM_Q(field)) ++ if (ENV_Hi16_ZMM(i, 0) || ENV_Hi16_ZMM(i, 1) || ++ ENV_Hi16_ZMM(i, 2) || ENV_Hi16_ZMM(i, 3) || ++ ENV_Hi16_ZMM(i, 4) || ENV_Hi16_ZMM(i, 5) || ++ ENV_Hi16_ZMM(i, 6) || ENV_Hi16_ZMM(i, 7)) { ++ return true; ++ } ++#endif ++ } ++ ++ return false; ++} ++ ++static const VMStateDescription vmstate_avx512 = { ++ .name = "cpu/avx512", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64_ARRAY(env.opmask_regs, X86CPU, NB_OPMASK_REGS), ++ VMSTATE_ZMMH_REGS_VARS(env.zmmh_regs, X86CPU, CPU_NB_REGS), ++#ifdef TARGET_X86_64 ++ VMSTATE_Hi16_ZMM_REGS_VARS(env.hi16_zmm_regs, X86CPU, CPU_NB_REGS), ++#endif ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -763,6 +847,9 @@ const VMStateDescription vmstate_x86_cpu = { + } , { + .vmsd = &vmstate_mpx, + .needed = mpx_needed, ++ }, { ++ .vmsd = &vmstate_avx512, ++ .needed = avx512_needed, + } , { + /* empty */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-add-Ivy-Bridge-CPU-model.patch b/SOURCES/kvm-target-i386-add-Ivy-Bridge-CPU-model.patch new file mode 100644 index 0000000..d211806 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-Ivy-Bridge-CPU-model.patch @@ -0,0 +1,73 @@ +From 8075eadce1f9f144ae2e2fcf23c1890943caf1f8 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 22 Feb 2017 21:11:07 +0100 +Subject: [PATCH 01/17] target-i386: add Ivy Bridge CPU model + +RH-Author: Eduardo Habkost +Message-id: <20170222211107.29696-1-ehabkost@redhat.com> +Patchwork-id: 74028 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] target-i386: add Ivy Bridge CPU model +Bugzilla: 1368375 +RH-Acked-by: Bandan Das +RH-Acked-by: Igor Mammedov +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1368375 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=12606134 + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2f9ac42acf4602453d5839221df6cc7cabc3355e) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 32 ++++++++++++++++++++++++++++++++ + 1 file changed, 32 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 476306d..c3c8306 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -878,6 +878,38 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Xeon E312xx (Sandy Bridge)", + }, + { ++ .name = "IvyBridge", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 58, ++ .stepping = 9, ++ .features[FEAT_1_EDX] = ++ CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_POPCNT | ++ CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | ++ CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ | ++ CPUID_EXT_SSE3 | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_ERMS, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, ++ .xlevel = 0x8000000A, ++ .model_id = "Intel Xeon E3-12xx v2 (Ivy Bridge)", ++ }, ++ { + .name = "Haswell", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-add-MDS-NO-feature.patch b/SOURCES/kvm-target-i386-add-MDS-NO-feature.patch new file mode 100644 index 0000000..abbaec3 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-MDS-NO-feature.patch @@ -0,0 +1,50 @@ +From 5f41a4ac3ff6527f7a23c3b2a2d8bef128f5c077 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 24 Sep 2019 20:50:32 +0200 +Subject: [PATCH 12/12] target/i386: add MDS-NO feature + +RH-Author: Eduardo Habkost +Message-id: <20190924205032.12926-2-ehabkost@redhat.com> +Patchwork-id: 90873 +O-Subject: [RHEL-7.8 qemu-kvm PATCH 1/1] target/i386: add MDS-NO feature +Bugzilla: 1714791 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Igor Mammedov +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +Microarchitectural Data Sampling is a hardware vulnerability which allows +unprivileged speculative access to data which is available in various CPU +internal buffers. + +Some Intel processors use the ARCH_CAP_MDS_NO bit in the +IA32_ARCH_CAPABILITIES +MSR to report that they are not vulnerable, make it available to guests. + +Signed-off-by: Paolo Bonzini +Message-Id: <20190516185320.28340-1-pbonzini@redhat.com> +Signed-off-by: Eduardo Habkost +(cherry picked from commit 20140a82c67467f53814ca197403d5e1b561a5e5) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 3ea4e97..f92cb62 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -211,7 +211,7 @@ static const char *cpuid_apm_edx_feature_name[] = { + + static const char *cpuid_arch_capabilities_feature_name[] = { + "rdctl-no", "ibrs-all", "rsba", "skip-l1dfl-vmentry", +- "ssb-no", NULL, NULL, NULL, ++ "ssb-no", "mds-no", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-add-Skylake-Client-cpu-model.patch b/SOURCES/kvm-target-i386-add-Skylake-Client-cpu-model.patch new file mode 100644 index 0000000..e135496 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-Skylake-Client-cpu-model.patch @@ -0,0 +1,92 @@ +From ce561d78c7199821beae26112f41da5733fab5bb Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 6 Jul 2016 20:47:53 +0200 +Subject: [PATCH 2/2] target-i386: add Skylake-Client cpu model + +RH-Author: Eduardo Habkost +Message-id: <1467838073-23873-3-git-send-email-ehabkost@redhat.com> +Patchwork-id: 71052 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 2/2] target-i386: add Skylake-Client cpu model +Bugzilla: 1327599 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das + +Introduce Skylake-Client cpu mode which inherits the features from +Broadwell and supports some additional features that are: MPX, +XSAVEC, and XGETBV1. + +Backport notes: +* ARAT feature not included, as it is not available in the + qemu-kvm-1.5.3 tree (and disabled by compat code in + pc-i440fx-rhel7.2.0 and older on qemu-kvm-rhev) + +Signed-off-by: Eduardo Habkost +Signed-off-by: Xiao Guangrong +Reviewed-by: Paolo Bonzini +Reviewed-by: Xiao Guangrong +Signed-off-by: Eduardo Habkost +(cherry picked from commit f6f949e9295889fb272698aea763dcea77d616ce) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 6650c72..80106ba 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -927,6 +927,49 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core Processor (Broadwell)", + }, + { ++ .name = "Skylake-Client", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 94, ++ .stepping = 3, ++ .features[FEAT_1_EDX] = ++ CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | ++ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX, ++ /* Missing: XSAVES (not supported by some Linux versions, ++ * including v4.1 to v4.6). ++ * KVM doesn't yet expose any XSAVES state save component, ++ * and the only one defined in Skylake (processor tracing) ++ * probably will block migration anyway. ++ */ ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Core Processor (Skylake)", ++ }, ++ { + .name = "Opteron_G1", + .level = 5, + .vendor = CPUID_VENDOR_AMD, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-add-cpu64-rhel6-CPU-model.patch b/SOURCES/kvm-target-i386-add-cpu64-rhel6-CPU-model.patch new file mode 100644 index 0000000..8cc5bf1 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-cpu64-rhel6-CPU-model.patch @@ -0,0 +1,72 @@ +From b0e92beaf0cd1146d417bff8241940762ab3d60f Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 18 Sep 2013 20:49:59 +0200 +Subject: [PATCH 28/29] target-i386: add cpu64-rhel6 CPU model + +RH-Author: Eduardo Habkost +Message-id: <1379537399-7308-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54451 +O-Subject: [RHEL-7 qemu-kvm PATCH] target-i386: add cpu64-rhel6 CPU model +Bugzilla: 918907 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das + +Bugzilla: 918907 +Upstream status: not applicable +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6300787 + +RHEL-6 has a cpu64-rhel6 CPU model, and it is even the default CPU +model. We need to allow migration from RHEL-6, so we need to have a +compatible cpu64-rhel6 CPU model to be present. + +Signed-off-by: Eduardo Habkost +--- +Change v1 -> v2: + - Don't include cpu64-rhel5 CPU model. It won't be supported +--- + target-i386/cpu.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 23 +++++++++++++++++++++++ + 1 files changed, 23 insertions(+), 0 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 355375b..051ab39 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -668,6 +668,29 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel(R) Atom(TM) CPU N270 @ 1.60GHz", + }, + { ++ .name = "cpu64-rhel6", ++ .level = 4, ++ .vendor = CPUID_VENDOR_AMD, ++ .family = 6, ++ .model = 13, ++ .stepping = 3, ++ .features[FEAT_1_EDX] = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | ++ CPUID_MMX | CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | ++ CPUID_MCA | CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | ++ CPUID_CX8 | CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | ++ CPUID_PSE | CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = CPUID_EXT_CX16 | CPUID_EXT_SSE3, ++ .features[FEAT_8000_0001_EDX] = CPUID_EXT2_LM | CPUID_EXT2_FXSR | ++ CPUID_EXT2_MMX | CPUID_EXT2_NX | CPUID_EXT2_PAT | CPUID_EXT2_CMOV | ++ CPUID_EXT2_PGE | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC | ++ CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | CPUID_EXT2_TSC | ++ CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, ++ .features[FEAT_8000_0001_ECX] = CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | ++ CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM, ++ .xlevel = 0x8000000A, ++ .model_id = "QEMU Virtual CPU version (cpu64-rhel6)", ++ }, ++ { + .name = "Conroe", + .level = 4, + .vendor = CPUID_VENDOR_INTEL, +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-add-feature-flags-for-CPUID-EAX-0xd-ECX-.patch b/SOURCES/kvm-target-i386-add-feature-flags-for-CPUID-EAX-0xd-ECX-.patch new file mode 100644 index 0000000..14bc767 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-feature-flags-for-CPUID-EAX-0xd-ECX-.patch @@ -0,0 +1,168 @@ +From 5fcaf5176d7545518c76f3aa8ea7ce6fb063c62d Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 6 Jul 2016 20:47:52 +0200 +Subject: [PATCH 1/2] target-i386: add feature flags for CPUID[EAX=0xd, ECX=1] + +RH-Author: Eduardo Habkost +Message-id: <1467838073-23873-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 71051 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/2] target-i386: add feature flags for CPUID[EAX=0xd, ECX=1] +Bugzilla: 1327599 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das + +From: Paolo Bonzini + +These represent xsave-related capabilities of the processor, and KVM may +or may not support them. + +Add feature bits so that they are considered by "-cpu ...,enforce", and use +the new feature work instead of calling kvm_arch_get_supported_cpuid. + +Bit 3 (XSAVES) is not migratables because it requires saving MSR_IA32_XSS. +Neither KVM nor any commonly available hardware supports it anyway. + +RHEL backport notes: +* In addition to allowing xsave flags to be configured, this + patch is a bug fix because we shouldn't use + kvm_arch_supported_cpuid() directly when configuring CPUID for + the guest +* tcg_features didn't exist, handle it inside x86_cpu_realizefn() + directly in the !kvm_enabled() check +* As the unmigratable_flags mechanism is not present yet, + remove the "xsaves" flag name so it can't be enabled manually + (otherwise we would need to backport upstream commit + 18cd2c17b5370369a886155c001da0a7f54bbcca too) + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 0bb0b2d2fe7f645ddaf1f0ff40ac669c9feb4aa1) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 28 +++++++++++++++++++++++++++- + target-i386/cpu.h | 6 ++++++ + 2 files changed, 33 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 06efe17..6650c72 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -150,6 +150,17 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + NULL, NULL, "avx512pf", "avx512er", "avx512cd", NULL, NULL, NULL, + }; + ++static const char *cpuid_xsave_feature_name[] = { ++ "xsaveopt", "xsavec", "xgetbv1", NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++}; ++ + typedef struct FeatureWordInfo { + const char **feat_names; + uint32_t cpuid_eax; /* Input EAX for CPUID */ +@@ -193,6 +204,12 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .cpuid_needs_ecx = true, .cpuid_ecx = 0, + .cpuid_reg = R_EBX, + }, ++ [FEAT_XSAVE] = { ++ .feat_names = cpuid_xsave_feature_name, ++ .cpuid_eax = 0xd, ++ .cpuid_needs_ecx = true, .cpuid_ecx = 1, ++ .cpuid_reg = R_EAX, ++ }, + }; + + typedef struct X86RegisterInfo32 { +@@ -833,6 +850,8 @@ static x86_def_t builtin_x86_defs[] = { + CPUID_EXT2_SYSCALL, + .features[FEAT_8000_0001_ECX] = + CPUID_EXT3_LAHF_LM, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, + .xlevel = 0x8000000A, + .model_id = "Intel Xeon E312xx (Sandy Bridge)", + }, +@@ -866,6 +885,8 @@ static x86_def_t builtin_x86_defs[] = { + CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | + CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | + CPUID_7_0_EBX_RTM, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, + .xlevel = 0x8000000A, + .model_id = "Intel Core Processor (Haswell)", + }, +@@ -900,6 +921,8 @@ static x86_def_t builtin_x86_defs[] = { + CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | + CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | + CPUID_7_0_EBX_SMAP, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, + .xlevel = 0x8000000A, + .model_id = "Intel Core Processor (Broadwell)", + }, +@@ -1017,6 +1040,7 @@ static x86_def_t builtin_x86_defs[] = { + CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_MISALIGNSSE | + CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | CPUID_EXT3_SVM | + CPUID_EXT3_LAHF_LM, ++ /* no xsaveopt! */ + .xlevel = 0x8000001A, + .model_id = "AMD Opteron 62xx class CPU", + }, +@@ -1051,6 +1075,7 @@ static x86_def_t builtin_x86_defs[] = { + CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_MISALIGNSSE | + CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | CPUID_EXT3_SVM | + CPUID_EXT3_LAHF_LM, ++ /* no xsaveopt! */ + .xlevel = 0x8000001A, + .model_id = "AMD Opteron 63xx class CPU", + }, +@@ -2196,7 +2221,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + *eax |= kvm_mask & (XSTATE_FP | XSTATE_SSE); + *ebx = *ecx; + } else if (count == 1) { +- *eax = kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); ++ *eax = env->features[FEAT_XSAVE]; + } else if (count < ARRAY_SIZE(ext_save_areas)) { + const ExtSaveArea *esa = &ext_save_areas[count]; + if ((env->features[esa->feature] & esa->bits) == esa->bits && +@@ -2540,6 +2565,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + ); + env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; + env->features[FEAT_SVM] &= TCG_SVM_FEATURES; ++ env->features[FEAT_XSAVE] = 0; + } else { + if ((cpu->check_cpuid || cpu->enforce_cpuid) + && kvm_check_features_against_host(cpu) && cpu->enforce_cpuid) { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 61e9b86..da7e060 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -405,6 +405,7 @@ typedef enum FeatureWord { + FEAT_C000_0001_EDX, /* CPUID[C000_0001].EDX */ + FEAT_KVM, /* CPUID[4000_0001].EAX (KVM_CPUID_FEATURES) */ + FEAT_SVM, /* CPUID[8000_000A].EDX */ ++ FEAT_XSAVE, /* CPUID[EAX=0xd,ECX=1].EAX */ + FEATURE_WORDS, + } FeatureWord; + +@@ -565,6 +566,11 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_EBX_AVX512ER (1U << 27) /* AVX-512 Exponential and Reciprocal */ + #define CPUID_7_0_EBX_AVX512CD (1U << 28) /* AVX-512 Conflict Detection */ + ++#define CPUID_XSAVE_XSAVEOPT (1U << 0) ++#define CPUID_XSAVE_XSAVEC (1U << 1) ++#define CPUID_XSAVE_XGETBV1 (1U << 2) ++#define CPUID_XSAVE_XSAVES (1U << 3) ++ + #define CPUID_VENDOR_SZ 12 + + #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-add-feature-kvm_pv_unhalt.patch b/SOURCES/kvm-target-i386-add-feature-kvm_pv_unhalt.patch new file mode 100644 index 0000000..521c5a2 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-feature-kvm_pv_unhalt.patch @@ -0,0 +1,56 @@ +From 7a204d6f5d8286fe56f91236aa72c26ec367d39b Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 24 Sep 2013 13:08:53 +0200 +Subject: [PATCH 04/11] target-i386: add feature kvm_pv_unhalt +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Andrew Jones +Message-id: <1380028133-15578-3-git-send-email-drjones@redhat.com> +Patchwork-id: 54525 +O-Subject: [RHEL7.0 qemu-kvm PATCH 2/2] target-i386: add feature kvm_pv_unhalt +Bugzilla: 1008987 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Radim Krcmar + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1008987 + +(cherry picked from commit f010bc643a2759e87e989c3e4e85f15ec71ae98f + of uq/master) + +=== + +I don't know yet if want this feature on by default, so for now I'm +just adding support for "-cpu ...,+kvm_pv_unhalt". + +Signed-off-by: Andrew Jones +Reviewed-by: Eduardo Habkost +Reviewed-by: Andreas Färber +Signed-off-by: Paolo Bonzini +--- + target-i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 051ab39..a0358c0 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -125,7 +125,7 @@ static const char *ext4_feature_name[] = { + + static const char *kvm_feature_name[] = { + "kvmclock", "kvm_nopiodelay", "kvm_mmu", "kvmclock", +- "kvm_asyncpf", "kvm_steal_time", "kvm_pv_eoi", NULL, ++ "kvm_asyncpf", "kvm_steal_time", "kvm_pv_eoi", "kvm_pv_unhalt", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-add-support-for-SPEC_CTRL-MSR.patch b/SOURCES/kvm-target-i386-add-support-for-SPEC_CTRL-MSR.patch new file mode 100644 index 0000000..d0a50e9 --- /dev/null +++ b/SOURCES/kvm-target-i386-add-support-for-SPEC_CTRL-MSR.patch @@ -0,0 +1,143 @@ +From 9875f9aaef996083064bf6a7afa1bfa30ff7d953 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 13 Dec 2017 15:43:40 -0200 +Subject: [PATCH 2/3] target-i386: add support for SPEC_CTRL MSR + +RH-Author: Eduardo Habkost +Message-id: <20171213174341.20684-3-ehabkost@redhat.com> +Patchwork-id: n/a +O-Subject: [CONFIDENTIAL][RHEL-7.5 qemu-kvm PATCH v2 2/3] target-i386: add + support for SPEC_CTRL MSR +Bugzilla: CVE-2017-5715 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina +--- + target-i386/cpu.h | 4 ++++ + target-i386/kvm.c | 14 ++++++++++++++ + target-i386/machine.c | 21 +++++++++++++++++++++ + 3 files changed, 39 insertions(+) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 1e5c980..7d815cd 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -304,6 +304,7 @@ + #define MSR_IA32_APICBASE_ENABLE (1<<11) + #define MSR_IA32_APICBASE_BASE (0xfffff<<12) + #define MSR_TSC_ADJUST 0x0000003b ++#define MSR_IA32_SPEC_CTRL 0x48 + #define MSR_IA32_TSCDEADLINE 0x6e0 + + #define MSR_P6_PERFCTR0 0xc1 +@@ -963,6 +964,7 @@ typedef struct CPUX86State { + uint64_t msr_fixed_counters[MAX_FIXED_COUNTERS]; + uint64_t msr_gp_counters[MAX_GP_COUNTERS]; + uint64_t msr_gp_evtsel[MAX_GP_COUNTERS]; ++ + uint64_t msr_hv_hypercall; + uint64_t msr_hv_guest_os_id; + uint64_t msr_hv_vapic; +@@ -1037,6 +1039,8 @@ typedef struct CPUX86State { + + uint32_t pkru; + ++ uint64_t spec_ctrl; ++ + TPRAccess tpr_access_type; + } CPUX86State; + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 0dc0e79..24d17ad 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -77,6 +77,7 @@ static bool has_msr_hv_vapic; + static bool has_msr_hv_tsc; + static bool has_msr_mtrr; + static bool has_msr_xss; ++static bool has_msr_spec_ctrl; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -800,6 +801,10 @@ static int kvm_get_supported_msrs(KVMState *s) + has_msr_xss = true; + continue; + } ++ if (kvm_msr_list->indices[i] == MSR_IA32_SPEC_CTRL) { ++ has_msr_spec_ctrl = true; ++ continue; ++ } + } + } + +@@ -1187,6 +1192,9 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + if (has_msr_xss) { + kvm_msr_entry_set(&msrs[n++], MSR_IA32_XSS, env->xss); + } ++ if (has_msr_spec_ctrl) { ++ kvm_msr_entry_set(&msrs[n++], MSR_IA32_SPEC_CTRL, env->spec_ctrl); ++ } + #ifdef TARGET_X86_64 + if (lm_capable_kernel) { + kvm_msr_entry_set(&msrs[n++], MSR_CSTAR, env->cstar); +@@ -1544,6 +1552,9 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_xss) { + msrs[n++].index = MSR_IA32_XSS; + } ++ if (has_msr_spec_ctrl) { ++ msrs[n++].index = MSR_IA32_SPEC_CTRL; ++ } + + + if (!env->tsc_valid) { +@@ -1786,6 +1797,9 @@ static int kvm_get_msrs(X86CPU *cpu) + env->mtrr_var[MSR_MTRRphysIndex(index)].base = msrs[i].data; + } + break; ++ case MSR_IA32_SPEC_CTRL: ++ env->spec_ctrl = msrs[i].data; ++ break; + } + } + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index ba34088..d883c86 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -742,6 +742,24 @@ static const VMStateDescription vmstate_pkru = { + }; + #endif + ++static bool spec_ctrl_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->spec_ctrl != 0; ++} ++ ++static const VMStateDescription vmstate_spec_ctrl = { ++ .name = "cpu/spec_ctrl", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]){ ++ VMSTATE_UINT64(env.spec_ctrl, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -896,6 +914,9 @@ const VMStateDescription vmstate_x86_cpu = { + .vmsd = &vmstate_pkru, + .needed = pkru_needed, + #endif ++ }, { ++ .vmsd = &vmstate_spec_ctrl, ++ .needed = spec_ctrl_needed, + } , { + /* empty */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-block-migration-and-savevm-if-invariant-.patch b/SOURCES/kvm-target-i386-block-migration-and-savevm-if-invariant-.patch new file mode 100644 index 0000000..d2ff0b7 --- /dev/null +++ b/SOURCES/kvm-target-i386-block-migration-and-savevm-if-invariant-.patch @@ -0,0 +1,111 @@ +From f53b97e4cda28b911c11400a985bcff587b2df34 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 21 Aug 2019 14:30:06 +0200 +Subject: [PATCH 2/3] target-i386: block migration and savevm if invariant tsc + is exposed +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Eduardo Habkost +Message-id: <20190821143006.23516-3-ehabkost@redhat.com> +Patchwork-id: 90102 +O-Subject: [RHEL-7.8 qemu-kvm PATCH 2/2] target-i386: block migration and savevm if invariant tsc is exposed +Bugzilla: 1626871 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Igor Mammedov + +From: Marcelo Tosatti + +Invariant TSC documentation mentions that "invariant TSC will run at a +constant rate in all ACPI P-, C-. and T-states". + +This is not the case if migration to a host with different TSC frequency +is allowed, or if savevm is performed. So block migration/savevm. + +Signed-off-by: Marcelo Tosatti +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost +Reviewed-by: Juan Quintela +[AF+mtosatti: Updated error message] +Signed-off-by: Andreas Färber +(cherry picked from commit 68bfd0ad4a1dcc4c328d5db85dc746b49c1ec07e) +Signed-off-by: Eduardo Habkost + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu-qom.h | 2 +- + target-i386/kvm.c | 15 +++++++++++++++ + target-i386/machine.c | 2 +- + 3 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h +index 0b01e8f..89dd29a 100644 +--- a/target-i386/cpu-qom.h ++++ b/target-i386/cpu-qom.h +@@ -94,7 +94,7 @@ static inline X86CPU *x86_env_get_cpu(CPUX86State *env) + #define ENV_OFFSET offsetof(X86CPU, env) + + #ifndef CONFIG_USER_ONLY +-extern const struct VMStateDescription vmstate_x86_cpu; ++extern struct VMStateDescription vmstate_x86_cpu; + #endif + + /** +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index d5f6deb..b6c76f1 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -33,6 +33,8 @@ + #include "exec/ioport.h" + #include + #include "hw/pci/pci.h" ++#include "migration/migration.h" ++#include "qapi/qmp/qerror.h" + + //#define DEBUG_KVM + +@@ -449,6 +451,8 @@ static bool hyperv_enabled(X86CPU *cpu) + cpu->hyperv_relaxed_timing); + } + ++static Error *invtsc_mig_blocker; ++ + #define KVM_MAX_CPUID_ENTRIES 100 + + int kvm_arch_init_vcpu(CPUState *cs) +@@ -698,6 +702,17 @@ int kvm_arch_init_vcpu(CPUState *cs) + + qemu_add_vm_change_state_handler(cpu_update_state, env); + ++ c = cpuid_find_entry(&cpuid_data.cpuid, 0x80000007, 0); ++ if (c && (c->edx & 1<<8) && invtsc_mig_blocker == NULL) { ++ /* for migration */ ++ error_setg(&invtsc_mig_blocker, ++ "State blocked by non-migratable CPU device" ++ " (invtsc flag)"); ++ migrate_add_blocker(invtsc_mig_blocker); ++ /* for savevm */ ++ vmstate_x86_cpu.unmigratable = 1; ++ } ++ + cpuid_data.cpuid.padding = 0; + r = kvm_vcpu_ioctl(cs, KVM_SET_CPUID2, &cpuid_data); + if (r) { +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 507ab1a..cd2cf6f 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -778,7 +778,7 @@ static const VMStateDescription vmstate_msr_virt_ssbd = { + } + }; + +-const VMStateDescription vmstate_x86_cpu = { ++VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, + .minimum_version_id = 3, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-bugfix-of-Intel-MPX.patch b/SOURCES/kvm-target-i386-bugfix-of-Intel-MPX.patch new file mode 100644 index 0000000..04dcbd1 --- /dev/null +++ b/SOURCES/kvm-target-i386-bugfix-of-Intel-MPX.patch @@ -0,0 +1,47 @@ +From ec56a547380c2cecda150988545287fafee14a6d Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:25 +0200 +Subject: [PATCH 05/10] target-i386: bugfix of Intel MPX + +Message-id: <1435260689-9556-5-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66502 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 4/8] target-i386: bugfix of Intel MPX +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +From: "Liu, Jinsong" + +The correct size of cpuid 0x0d sub-leaf 4 is 0x40, not 0x10. +This is confirmed by Anvin H Peter and Mallick Asit K. + +Signed-off-by: Liu Jinsong +Cc: H. Peter Anvin +Cc: Asit K Mallick +Signed-off-by: Paolo Bonzini + +Signed-off-by: Liu, Jinsong +(cherry picked from commit b0f15a5d5628994c71a6f428f360a5a537ad3b39) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index a9e80d9..2eeff5c 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -227,7 +227,7 @@ static const ExtSaveArea ext_save_areas[] = { + [3] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, + .offset = 0x3c0, .size = 0x40 }, + [4] = { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, +- .offset = 0x400, .size = 0x10 }, ++ .offset = 0x400, .size = 0x40 }, + }; + + const char *get_register_name_32(unsigned int reg) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-cpu-Add-new-EPYC-CPU-model.patch b/SOURCES/kvm-target-i386-cpu-Add-new-EPYC-CPU-model.patch new file mode 100644 index 0000000..9e83d76 --- /dev/null +++ b/SOURCES/kvm-target-i386-cpu-Add-new-EPYC-CPU-model.patch @@ -0,0 +1,104 @@ +From 15c5cb87402b646349a6cc535cc74cefd01dbf1e Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 5 Oct 2017 22:39:08 +0200 +Subject: [PATCH 25/27] target-i386/cpu: Add new EPYC CPU model + +RH-Author: Eduardo Habkost +Message-id: <20171005223908.431-3-ehabkost@redhat.com> +Patchwork-id: 76833 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/2] target-i386/cpu: Add new EPYC CPU model +Bugzilla: 1450396 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das + +From: Brijesh Singh + +Add a new base CPU model called 'EPYC' to model processors from AMD EPYC +family (which includes EPYC 76xx,75xx,74xx, 73xx and 72xx). + +The following features bits have been added/removed compare to Opteron_G5 + +Added: monitor, movbe, rdrand, mmxext, ffxsr, rdtscp, cr8legacy, osvw, + fsgsbase, bmi1, avx2, smep, bmi2, rdseed, adx, smap, clfshopt, sha + xsaveopt, xsavec, xgetbv1, arat + +Removed: xop, fma4, tbm + +Backport notes: +* ARAT feature removed. It is already disabled by the rhel7.2.0 + compat code in qemu-kvm-rhev, so it keeps migration compatibility + with qemu-kvm-rhev. + +Signed-off-by: Brijesh Singh +Message-Id: <20170815170051.127257-1-brijesh.singh@amd.com> +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost +(cherry picked from commit 2e2efc7dbe2b0adc1200b5aa286cdbed729f6751) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 47 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index e0749c0..914fc66 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1218,6 +1218,53 @@ static x86_def_t builtin_x86_defs[] = { + .xlevel = 0x8000001A, + .model_id = "AMD Opteron 63xx class CPU", + }, ++ { ++ .name = "EPYC", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_AMD, ++ .family = 23, ++ .model = 1, ++ .stepping = 2, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | CPUID_CLFLUSH | ++ CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | CPUID_PGE | ++ CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | CPUID_MCE | ++ CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | CPUID_DE | ++ CPUID_VME | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_RDRAND | CPUID_EXT_F16C | CPUID_EXT_AVX | ++ CPUID_EXT_XSAVE | CPUID_EXT_AES | CPUID_EXT_POPCNT | ++ CPUID_EXT_MOVBE | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | ++ CPUID_EXT_CX16 | CPUID_EXT_FMA | CPUID_EXT_SSSE3 | ++ CPUID_EXT_MONITOR | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_PDPE1GB | ++ CPUID_EXT2_FFXSR | CPUID_EXT2_MMXEXT | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_OSVW | CPUID_EXT3_3DNOWPREFETCH | ++ CPUID_EXT3_MISALIGNSSE | CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | ++ CPUID_EXT3_CR8LEG | CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_AVX2 | ++ CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_RDSEED | ++ CPUID_7_0_EBX_ADX | CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_CLFLUSHOPT | ++ CPUID_7_0_EBX_SHA_NI, ++ /* Missing: XSAVES (not supported by some Linux versions, ++ * including v4.1 to v4.12). ++ * KVM doesn't yet expose any XSAVES state save component. ++ */ ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1, ++ /* Missing: ARAT (not supported by QEMU 1.5.3) */ ++#if 0 ++ .features[FEAT_6_EAX] = ++ CPUID_6_EAX_ARAT, ++#endif ++ .xlevel = 0x8000000A, ++ .model_id = "AMD EPYC Processor", ++ }, + }; + + /** +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-cpu-add-new-CPU-models-for-indirect-bran.patch b/SOURCES/kvm-target-i386-cpu-add-new-CPU-models-for-indirect-bran.patch new file mode 100644 index 0000000..e0e53f8 --- /dev/null +++ b/SOURCES/kvm-target-i386-cpu-add-new-CPU-models-for-indirect-bran.patch @@ -0,0 +1,523 @@ +From 4f2a39dd988cfae0210dfa7a84be00617ba17bef Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 13 Dec 2017 15:43:41 -0200 +Subject: [PATCH 3/3] target-i386: cpu: add new CPU models for indirect branch + predictor restrictions + +RH-Author: Eduardo Habkost +Message-id: <20171213174341.20684-4-ehabkost@redhat.com> +Patchwork-id: n/a +O-Subject: [CONFIDENTIAL][RHEL-7.5 qemu-kvm PATCH v2 3/3] target-i386: cpu: add + new CPU models for indirect branch predictor restrictions +Bugzilla: CVE-2017-5715 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +Changes v1 -> v2: +* Copied the original CPU models from the same source file, just adding + SPEC_CTRL and updating level/xlevel/model_id/stepping, to keep compatibility + code exactly the same. +* Update compat_props so we can be sure the same compat rules will apply to the + original CPU models and to the *-IBRS ones + +To ensure the New CPU models won't introduce any unexpected +changes except for the spec-ctrl feature (even if people are +running older machine-types), copy all compat_props entries for +existing CPU models to their *-IBRS versions. + +The only entries that are not being copied are the ones touching +"(min-)level" and "(min-)xlevel" because it's an expected result +of the CPU model change (otherwise the spec-ctrl feature would +remain unavailable to the guest). + +The entries that had to be copied can be found using: + $ git grep -E 'Nehalem|Westmere|SandyBridge|IvyBridge|Haswell-noTSX|Haswell|Broadwell-noTSX|Broadwell|Skylake-Client|Skylake-Server|EPYC' + +Note that the upstream-only PC_COMPAT_* macros are not being +touched as they are not used by the RHEL machine-types. +--- + hw/i386/pc_piix.c | 17 +++ + hw/i386/pc_q35.c | 1 + + target-i386/cpu.c | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + target-i386/cpu.h | 3 + + 4 files changed, 349 insertions(+) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index b043124..c53a6d4 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -753,7 +753,9 @@ static void pc_compat_rhel700(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Nehalem-IBRS", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere-IBRS", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + /* SandyBridge and Haswell already have x2apic enabled */ + x86_cpu_compat_set_features("Opteron_G1", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Opteron_G2", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); +@@ -928,18 +930,31 @@ static void pc_compat_rhel660(QEMUMachineInitArgs *args) + x86_cpu_compat_set_features("Conroe", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Penryn", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Nehalem", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Nehalem-IBRS", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); ++ x86_cpu_compat_set_features("Westmere-IBRS", FEAT_1_ECX, CPUID_EXT_X2APIC, 0); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); ++ x86_cpu_compat_set_features("Westmere-IBRS", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); + x86_cpu_compat_set_features("Westmere", FEAT_8000_0001_EDX, + CPUID_EXT2_FXSR | CPUID_EXT2_MMX | CPUID_EXT2_PAT | + CPUID_EXT2_CMOV | CPUID_EXT2_PGE | CPUID_EXT2_APIC | + CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | + CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, + 0); ++ x86_cpu_compat_set_features("Westmere-IBRS", FEAT_8000_0001_EDX, ++ CPUID_EXT2_FXSR | CPUID_EXT2_MMX | CPUID_EXT2_PAT | ++ CPUID_EXT2_CMOV | CPUID_EXT2_PGE | CPUID_EXT2_APIC | ++ CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | ++ CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, ++ 0); + x86_cpu_compat_set_features("Broadwell", FEAT_8000_0001_EDX, + 0, CPUID_EXT2_RDTSCP); ++ x86_cpu_compat_set_features("Broadwell-IBRS", FEAT_8000_0001_EDX, ++ 0, CPUID_EXT2_RDTSCP); + x86_cpu_compat_set_features("Broadwell", FEAT_7_0_EBX, + 0, CPUID_7_0_EBX_SMAP); ++ x86_cpu_compat_set_features("Broadwell-IBRS", FEAT_7_0_EBX, ++ 0, CPUID_7_0_EBX_SMAP); + + /* RHEL-6 kernel never supported exposing RDTSCP */ + x86_cpu_compat_set_features(NULL, FEAT_8000_0001_EDX, 0, CPUID_EXT2_RDTSCP); +@@ -1122,6 +1137,8 @@ static void pc_compat_rhel630(QEMUMachineInitArgs *args) + enable_compat_apic_id_mode(); + x86_cpu_compat_set_features("SandyBridge", FEAT_1_ECX, + 0, CPUID_EXT_TSC_DEADLINE_TIMER); ++ x86_cpu_compat_set_features("SandyBridge-IBRS", FEAT_1_ECX, ++ 0, CPUID_EXT_TSC_DEADLINE_TIMER); + } + + static void pc_init_rhel630(QEMUMachineInitArgs *args) +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 850a25a..e6043df 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -228,6 +228,7 @@ static void pc_q35_init_1_4(QEMUMachineInitArgs *args) + { + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); + x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); ++ x86_cpu_compat_set_features("Westmere-IBRS", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); + pc_q35_init_1_5(args); + } + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 335689b..08b43f5 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -884,6 +884,31 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core i7 9xx (Nehalem Class Core i7)", + }, + { ++ .name = "Nehalem-IBRS", ++ .level = 11, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 26, ++ .stepping = 3, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | ++ CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_SSE3, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Core i7 9xx (Nehalem Core i7, IBRS update)", ++ }, ++ { + .name = "Westmere", + .level = 11, + .vendor = CPUID_VENDOR_INTEL, +@@ -908,6 +933,32 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Westmere E56xx/L56xx/X56xx (Nehalem-C)", + }, + { ++ .name = "Westmere-IBRS", ++ .level = 11, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 44, ++ .stepping = 1, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AES | CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .xlevel = 0x80000008, ++ .model_id = "Westmere E56xx/L56xx/X56xx (IBRS update)", ++ }, ++ { + .name = "SandyBridge", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +@@ -937,6 +988,37 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Xeon E312xx (Sandy Bridge)", + }, + { ++ .name = "SandyBridge-IBRS", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 42, ++ .stepping = 1, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_POPCNT | ++ CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | ++ CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ | ++ CPUID_EXT_SSE3, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Xeon E312xx (Sandy Bridge, IBRS update)", ++ }, ++ { + .name = "IvyBridge", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +@@ -969,6 +1051,40 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Xeon E3-12xx v2 (Ivy Bridge)", + }, + { ++ .name = "IvyBridge-IBRS", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 58, ++ .stepping = 9, ++ .features[FEAT_1_EDX] = ++ CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_POPCNT | ++ CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | ++ CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ | ++ CPUID_EXT_SSE3 | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_ERMS, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS)", ++ }, ++ { + .name = "Haswell", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +@@ -1004,6 +1120,43 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core Processor (Haswell)", + }, + { ++ .name = "Haswell-IBRS", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 60, ++ .stepping = 4, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Core Processor (Haswell, IBRS)", ++ }, ++ { + .name = "Broadwell", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +@@ -1040,6 +1193,44 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core Processor (Broadwell)", + }, + { ++ .name = "Broadwell-IBRS", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 61, ++ .stepping = 2, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | ++ CPUID_7_0_EBX_SMAP, ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Core Processor (Broadwell, IBRS)", ++ }, ++ { + .name = "Skylake-Client", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +@@ -1083,6 +1274,51 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Core Processor (Skylake)", + }, + { ++ .name = "Skylake-Client-IBRS", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 94, ++ .stepping = 3, ++ .features[FEAT_1_EDX] = ++ CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | ++ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX, ++ /* Missing: XSAVES (not supported by some Linux versions, ++ * including v4.1 to v4.12). ++ * KVM doesn't yet expose any XSAVES state save component, ++ * and the only one defined in Skylake (processor tracing) ++ * probably will block migration anyway. ++ */ ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Core Processor (Skylake, IBRS)", ++ }, ++ { + .name = "Skylake-Server", + .level = 0xd, + .vendor = CPUID_VENDOR_INTEL, +@@ -1133,6 +1369,54 @@ static x86_def_t builtin_x86_defs[] = { + .model_id = "Intel Xeon Processor (Skylake)", + }, + { ++ .name = "Skylake-Server-IBRS", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_INTEL, ++ .family = 6, ++ .model = 85, ++ .stepping = 4, ++ .features[FEAT_1_EDX] = ++ CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | ++ CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | ++ CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | ++ CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | ++ CPUID_DE | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | ++ CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | ++ CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | ++ CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | ++ CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | ++ CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_PDPE1GB | CPUID_EXT2_RDTSCP | ++ CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, ++ .features[FEAT_7_0_EDX] = ++ CPUID_7_0_EDX_SPEC_CTRL, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | ++ CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | ++ CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | ++ CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | ++ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_MPX | CPUID_7_0_EBX_CLWB | ++ CPUID_7_0_EBX_AVX512F | CPUID_7_0_EBX_AVX512DQ | ++ CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512CD | ++ CPUID_7_0_EBX_AVX512VL, ++ /* Missing: XSAVES (not supported by some Linux versions, ++ * including v4.1 to v4.12). ++ * KVM doesn't yet expose any XSAVES state save component, ++ * and the only one defined in Skylake (processor tracing) ++ * probably will block migration anyway. ++ */ ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1, ++ .xlevel = 0x80000008, ++ .model_id = "Intel Xeon Processor (Skylake, IBRS)", ++ }, ++ { + .name = "Opteron_G1", + .level = 5, + .vendor = CPUID_VENDOR_AMD, +@@ -1332,6 +1616,50 @@ static x86_def_t builtin_x86_defs[] = { + .xlevel = 0x8000000A, + .model_id = "AMD EPYC Processor", + }, ++ { ++ .name = "EPYC-IBPB", ++ .level = 0xd, ++ .vendor = CPUID_VENDOR_AMD, ++ .family = 23, ++ .model = 1, ++ .stepping = 2, ++ .features[FEAT_1_EDX] = ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | CPUID_CLFLUSH | ++ CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | CPUID_PGE | ++ CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | CPUID_MCE | ++ CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | CPUID_DE | ++ CPUID_VME | CPUID_FP87, ++ .features[FEAT_1_ECX] = ++ CPUID_EXT_RDRAND | CPUID_EXT_F16C | CPUID_EXT_AVX | ++ CPUID_EXT_XSAVE | CPUID_EXT_AES | CPUID_EXT_POPCNT | ++ CPUID_EXT_MOVBE | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | ++ CPUID_EXT_CX16 | CPUID_EXT_FMA | CPUID_EXT_SSSE3 | ++ CPUID_EXT_MONITOR | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3, ++ .features[FEAT_8000_0001_EDX] = ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_PDPE1GB | ++ CPUID_EXT2_FFXSR | CPUID_EXT2_MMXEXT | CPUID_EXT2_NX | ++ CPUID_EXT2_SYSCALL, ++ .features[FEAT_8000_0001_ECX] = ++ CPUID_EXT3_OSVW | CPUID_EXT3_3DNOWPREFETCH | ++ CPUID_EXT3_MISALIGNSSE | CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | ++ CPUID_EXT3_CR8LEG | CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM, ++ .features[FEAT_8000_0008_EBX] = ++ CPUID_8000_0008_EBX_IBPB, ++ .features[FEAT_7_0_EBX] = ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_AVX2 | ++ CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_RDSEED | ++ CPUID_7_0_EBX_ADX | CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_CLFLUSHOPT | ++ CPUID_7_0_EBX_SHA_NI, ++ /* Missing: XSAVES (not supported by some Linux versions, ++ * including v4.1 to v4.12). ++ * KVM doesn't yet expose any XSAVES state save component. ++ */ ++ .features[FEAT_XSAVE] = ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | ++ CPUID_XSAVE_XGETBV1, ++ .xlevel = 0x8000000A, ++ .model_id = "AMD EPYC Processor (with IBPB)", ++ }, + }; + + /** +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 7d815cd..a8a640a 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -589,6 +589,9 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + + #define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ + #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ ++#define CPUID_7_0_EDX_SPEC_CTRL (1U << 26) /* Indirect Branch - Restrict Speculation */ ++ ++#define CPUID_8000_0008_EBX_IBPB (1U << 12) /* Indirect Branch Prediction Barrier */ + + #define CPUID_7_0_ECX_PKU (1U << 3) + #define CPUID_7_0_ECX_OSPKE (1U << 4) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-cpu-add-new-CPUID-bits-for-indirect-bran.patch b/SOURCES/kvm-target-i386-cpu-add-new-CPUID-bits-for-indirect-bran.patch new file mode 100644 index 0000000..38fadcb --- /dev/null +++ b/SOURCES/kvm-target-i386-cpu-add-new-CPUID-bits-for-indirect-bran.patch @@ -0,0 +1,78 @@ +From 151cbf5d444ab746d05dc0757ec972df8880d0ec Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 13 Dec 2017 15:43:39 -0200 +Subject: [PATCH 1/3] target-i386: cpu: add new CPUID bits for indirect branch + predictor restrictions + +RH-Author: Eduardo Habkost +Message-id: <20171213174341.20684-2-ehabkost@redhat.com> +Patchwork-id: n/a +O-Subject: [CONFIDENTIAL][RHEL-7.5 qemu-kvm PATCH v2 1/3] target-i386: cpu: + add new CPUID bits for indirect branch predictor restrictions +Bugzilla: CVE-2017-5715 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina +--- + target-i386/cpu.c | 19 ++++++++++++++++++- + target-i386/cpu.h | 1 + + 2 files changed, 19 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 539d659..335689b 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -172,6 +172,17 @@ static const char *cpuid_7_0_edx_feature_name[] = { + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, ++ NULL, NULL, "spec-ctrl", "stibp", ++ NULL, "arch-facilities", NULL, NULL, ++}; ++ ++static const char *cpuid_80000008_ebx_feature_name[] = { ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ "ibpb", NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }; +@@ -314,6 +325,12 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .cpuid_reg = R_EDX, + .tcg_features = TCG_7_0_EDX_FEATURES, + }, ++ [FEAT_8000_0008_EBX] = { ++ .feat_names = cpuid_80000008_ebx_feature_name, ++ .cpuid_eax = 0x80000008, ++ .cpuid_needs_ecx = false, .cpuid_ecx = 0, ++ .cpuid_reg = R_EBX, ++ }, + [FEAT_XSAVE] = { + .feat_names = cpuid_xsave_feature_name, + .cpuid_eax = 0xd, +@@ -2470,7 +2487,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + *eax = 0x00000020; /* 32 bits physical */ + } + } +- *ebx = 0; ++ *ebx = env->features[FEAT_8000_0008_EBX]; + *ecx = 0; + *edx = 0; + if (cs->nr_cores * cs->nr_threads > 1) { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 78b8072..1e5c980 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -406,6 +406,7 @@ typedef enum FeatureWord { + FEAT_7_0_EDX, /* CPUID[EAX=7,ECX=0].EDX */ + FEAT_8000_0001_EDX, /* CPUID[8000_0001].EDX */ + FEAT_8000_0001_ECX, /* CPUID[8000_0001].ECX */ ++ FEAT_8000_0008_EBX, /* CPUID[8000_0008].EBX */ + FEAT_C000_0001_EDX, /* CPUID[C000_0001].EDX */ + FEAT_KVM, /* CPUID[4000_0001].EAX (KVM_CPUID_FEATURES) */ + FEAT_SVM, /* CPUID[8000_000A].EDX */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-define-md-clear-bit-rhel.patch b/SOURCES/kvm-target-i386-define-md-clear-bit-rhel.patch new file mode 100644 index 0000000..2f7523d --- /dev/null +++ b/SOURCES/kvm-target-i386-define-md-clear-bit-rhel.patch @@ -0,0 +1,33 @@ +From 8f9887acd04e8db0bebd0ad3fe1cf5d7294abdfd Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Sat, 2 Mar 2019 00:07:10 +0100 +Subject: target/i386: define md-clear bit + +Message-id: <20190301230710.692-1-pbonzini@redhat.com> +O-Subject: [qemu PATCH] target/i386: define md-clear bit + +md-clear is a new CPUID bit which is set when microcode provides the +mechanism to invoke a flush of various exploitable CPU buffers by invoking +the VERW instruction. + +Signed-off-by: Paolo Bonzini + +--- + + target/i386/cpu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 4b3a238e8d..7247fdd179 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -168,7 +168,7 @@ static const char *cpuid_7_0_ecx_feature_name[] = { + static const char *cpuid_7_0_edx_feature_name[] = { + NULL, NULL, "avx512-4vnniw", "avx512-4fmaps", + NULL, NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, ++ NULL, NULL, "md-clear", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + diff --git a/SOURCES/kvm-target-i386-fix-cpuid-leaf-0x0d.patch b/SOURCES/kvm-target-i386-fix-cpuid-leaf-0x0d.patch new file mode 100644 index 0000000..4318112 --- /dev/null +++ b/SOURCES/kvm-target-i386-fix-cpuid-leaf-0x0d.patch @@ -0,0 +1,59 @@ +From 39ffb75b89ae1a1be6e6ed5c03d4c22cc640e832 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:22 +0200 +Subject: [PATCH 02/10] target-i386: fix cpuid leaf 0x0d + +Message-id: <1435260689-9556-2-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66499 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/8] target-i386: fix cpuid leaf 0x0d +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +From: Liu Jinsong + +Fix cpuid leaf 0x0d which incorrectly parsed eax and ebx. + +However, before this patch the CPUID worked fine -- the .offset +field contained the size _and_ was stored in the register that +is supposed to hold the size (eax), and likewise the .size field +contained the offset _and_ was stored in the register trhat is +supposed to hold the offset (ebx). + +Signed-off-by: Liu Jinsong +Signed-off-by: Paolo Bonzini +(cherry picked from commit 33f373d7c56350fd2ec3e31f4f2c46cb49464911) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index b76719d..0fd100f 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -223,7 +223,7 @@ typedef struct ExtSaveArea { + + static const ExtSaveArea ext_save_areas[] = { + [2] = { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, +- .offset = 0x100, .size = 0x240 }, ++ .offset = 0x240, .size = 0x100 }, + }; + + const char *get_register_name_32(unsigned int reg) +@@ -2191,8 +2191,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + const ExtSaveArea *esa = &ext_save_areas[count]; + if ((env->features[esa->feature] & esa->bits) == esa->bits && + (kvm_mask & (1 << count)) != 0) { +- *eax = esa->offset; +- *ebx = esa->size; ++ *eax = esa->size; ++ *ebx = esa->offset; + } + } + break; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-fix-pcmpxstrx-equal-ordered-strstr-mode.patch b/SOURCES/kvm-target-i386-fix-pcmpxstrx-equal-ordered-strstr-mode.patch new file mode 100644 index 0000000..f38645f --- /dev/null +++ b/SOURCES/kvm-target-i386-fix-pcmpxstrx-equal-ordered-strstr-mode.patch @@ -0,0 +1,57 @@ +From b05eb2cc7decc07ed044484861587b3490144d02 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 8 Jun 2016 13:04:21 +0200 +Subject: [PATCH 2/3] target-i386: fix pcmpxstrx equal-ordered (strstr) mode + +RH-Author: Paolo Bonzini +Message-id: <1465391061-17748-1-git-send-email-pbonzini@redhat.com> +Patchwork-id: 70570 +O-Subject: [RHEL7.3/7.2.z qemu-kvm PATCH] target-i386: fix pcmpxstrx equal-ordered (strstr) mode +Bugzilla: 1340971 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Thomas Huth +RH-Acked-by: Laurent Vivier + +Kindly requested by the Openstack folks, who sometimes uses TCG +instead of nested virt. + +In this mode, referring an invalid element of the source forces the +result to false (table 4-7, last column) but referring an invalid +element of the destination forces the result to true, so the outer +loop should still be run even if some elements of the destination +will be invalid. They will be avoided in the inner loop, which +correctly bounds "i" to validd, but they will still contribute to a +positive outcome of the search. + +This fixes tst_strstr in glibc 2.17. + +Reported-by: Florian Weimer +Cc: Richard Henderson +Cc: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit 54c54f8b56047d3c2420e1ae06a6a8890c220ac4) +Signed-off-by: Miroslav Rezanina +--- + target-i386/ops_sse.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/target-i386/ops_sse.h b/target-i386/ops_sse.h +index eb24b5f..5145d9e 100644 +--- a/target-i386/ops_sse.h ++++ b/target-i386/ops_sse.h +@@ -2034,10 +2034,10 @@ static inline unsigned pcmpxstrx(CPUX86State *env, Reg *d, Reg *s, + } + break; + case 3: +- for (j = valids - validd; j >= 0; j--) { ++ for (j = valids; j >= 0; j--) { + res <<= 1; + v = 1; +- for (i = MIN(upper - j, validd); i >= 0; i--) { ++ for (i = MIN(valids - j, validd); i >= 0; i--) { + v &= (pcmp_val(s, ctrl, i + j) == pcmp_val(d, ctrl, i)); + } + res |= v; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-fix-set-of-registers-zeroed-on-reset.patch b/SOURCES/kvm-target-i386-fix-set-of-registers-zeroed-on-reset.patch new file mode 100644 index 0000000..acdfe67 --- /dev/null +++ b/SOURCES/kvm-target-i386-fix-set-of-registers-zeroed-on-reset.patch @@ -0,0 +1,94 @@ +From 5f40ed9dd62b914f259c1b6a51298fedb6bb2a24 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 25 Jun 2015 19:31:26 +0200 +Subject: [PATCH 06/10] target-i386: fix set of registers zeroed on reset + +Message-id: <1435260689-9556-6-git-send-email-ehabkost@redhat.com> +Patchwork-id: 66505 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 5/8] target-i386: fix set of registers zeroed on reset +Bugzilla: 1233350 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini + +From: Paolo Bonzini + +BND0-3, BNDCFGU, BNDCFGS, BNDSTATUS were not zeroed on reset, but they +should be (Intel Instruction Set Extensions Programming Reference +319433-015, pages 9-4 and 9-6). Same for YMM. + +XCR0 should be reset to 1. + +TSC and TSC_RESET were zeroed already by the memset, remove the explicit +assignments. + +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Paolo Bonzini +(cherry picked from commit 05e7e819d7d159a75a46354aead95e1199b8f168) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/cpu.c + +Backport notes: + * The TSC and TSC_RESET reset lines were never added to the + qemu-kvm-1.5.3 tree +--- + target-i386/cpu.c | 2 ++ + target-i386/cpu.h | 11 ++++++----- + 2 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 2eeff5c..96af1bf 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2402,6 +2402,8 @@ static void x86_cpu_reset(CPUState *s) + cpu_breakpoint_remove_all(env, BP_CPU); + cpu_watchpoint_remove_all(env, BP_CPU); + ++ env->xcr0 = 1; ++ + /* + * SDM 11.11.5 requires: + * - IA32_MTRR_DEF_TYPE MSR.E = 0 +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 7ebdbb3..715ba63 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -798,6 +798,10 @@ typedef struct CPUX86State { + target_ulong cr[5]; /* NOTE: cr1 is unused */ + int32_t a20_mask; + ++ BNDReg bnd_regs[4]; ++ BNDCSReg bndcs_regs; ++ uint64_t msr_bndcfgs; ++ + /* FPU state */ + unsigned int fpstt; /* top of stack index */ + uint16_t fpus; +@@ -820,6 +824,8 @@ typedef struct CPUX86State { + XMMReg xmm_t0; + MMXReg mmx_t0; + ++ XMMReg ymmh_regs[CPU_NB_REGS]; ++ + /* sysenter registers */ + uint32_t sysenter_cs; + target_ulong sysenter_esp; +@@ -931,12 +937,7 @@ typedef struct CPUX86State { + uint16_t fpus_vmstate; + uint16_t fptag_vmstate; + uint16_t fpregs_format_vmstate; +- + uint64_t xstate_bv; +- XMMReg ymmh_regs[CPU_NB_REGS]; +- BNDReg bnd_regs[4]; +- BNDCSReg bndcs_regs; +- uint64_t msr_bndcfgs; + + uint64_t xcr0; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-get-CPL-from-SS.DPL.patch b/SOURCES/kvm-target-i386-get-CPL-from-SS.DPL.patch new file mode 100644 index 0000000..08eff71 --- /dev/null +++ b/SOURCES/kvm-target-i386-get-CPL-from-SS.DPL.patch @@ -0,0 +1,74 @@ +From 848115120ffa7b2287069fe6d23683304b9ffec1 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Fri, 12 Sep 2014 11:56:31 +0200 +Subject: [PATCH 31/43] target-i386: get CPL from SS.DPL + +Message-id: <1410522991-11612-2-git-send-email-pbonzini@redhat.com> +Patchwork-id: 61022 +O-Subject: [RHEL 7.1 qemu-kvm PATCH] target-i386: get CPL from SS.DPL +Bugzilla: 1097363 +RH-Acked-by: wei@redhat.com +RH-Acked-by: Radim Krcmar +RH-Acked-by: Laszlo Ersek + +CS.RPL is not equal to the CPL in the few instructions between +setting CR0.PE and reloading CS. We get this right in the common +case, because writes to CR0 do not modify the CPL, but it would +not be enough if an SMI comes exactly during that brief period. +Were this to happen, the RSM instruction would erroneously set +CPL to the low two bits of the real-mode selector; and if they are +not 00, the next instruction fetch cannot access the code segment +and causes a triple fault. + +However, SS.DPL *is* always equal to the CPL. In real processors +(AMD only) there is a weird case of SYSRET setting SS.DPL=SS.RPL +from the STAR register while forcing CPL=3, but we do not emulate +that. + +Tested-by: Kevin O'Connor +Signed-off-by: Paolo Bonzini +(cherry picked from commit 7125c937c97d9ec4a41b3cb6d1b3e805ec53e255) +Signed-off-by: Miroslav Rezanina + +Conflicts: + target-i386/cpu.h [only needed for TCG and has other dependencies] +--- + target-i386/kvm.c | 2 +- + target-i386/machine.c | 8 ++++++++ + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 6b250f5..65362ac 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1381,7 +1381,7 @@ static int kvm_get_sregs(X86CPU *cpu) + HF_OSFXSR_MASK | HF_LMA_MASK | HF_CS32_MASK | \ + HF_SS32_MASK | HF_CS64_MASK | HF_ADDSEG_MASK) + +- hflags = (env->segs[R_CS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; ++ hflags = (env->segs[R_SS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; + hflags |= (env->cr[0] & CR0_PE_MASK) << (HF_PE_SHIFT - CR0_PE_SHIFT); + hflags |= (env->cr[0] << (HF_MP_SHIFT - CR0_MP_SHIFT)) & + (HF_MP_MASK | HF_EM_MASK | HF_TS_MASK); +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 42b049b..87fd496 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -296,6 +296,14 @@ static int cpu_post_load(void *opaque, int version_id) + env->segs[R_SS].flags &= ~(env->segs[R_SS].flags & DESC_DPL_MASK); + } + ++ /* Older versions of QEMU incorrectly used CS.DPL as the CPL when ++ * running under KVM. This is wrong for conforming code segments. ++ * Luckily, in our implementation the CPL field of hflags is redundant ++ * and we can get the right value from the SS descriptor privilege level. ++ */ ++ env->hflags &= ~HF_CPL_MASK; ++ env->hflags |= (env->segs[R_SS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; ++ + /* XXX: restore FPU round state */ + env->fpstt = (env->fpus_vmstate >> 11) & 7; + env->fpus = env->fpus_vmstate & ~0x3800; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-get-put-MSR_TSC_AUX-across-reset-and-mig.patch b/SOURCES/kvm-target-i386-get-put-MSR_TSC_AUX-across-reset-and-mig.patch new file mode 100644 index 0000000..17dd46a --- /dev/null +++ b/SOURCES/kvm-target-i386-get-put-MSR_TSC_AUX-across-reset-and-mig.patch @@ -0,0 +1,93 @@ +From f9a24822687113e34194f05aeb641365b8202e9e Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Wed, 25 Nov 2015 05:51:34 +0100 +Subject: [PATCH 4/6] target-i386: get/put MSR_TSC_AUX across reset and + migration + +Message-id: +Patchwork-id: 68467 +O-Subject: [RHEL 7.3 qemu-kvm PATCH 1/1] target-i386: get/put MSR_TSC_AUX across reset and migration +Bugzilla: 1265427 +RH-Acked-by: Juan Quintela +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Paolo Bonzini + +There's one report of migration breaking due to missing MSR_TSC_AUX +save/restore. Fix this by adding a new subsection that saves the state +of this MSR. + +https://bugzilla.redhat.com/show_bug.cgi?id=1261797 + +Reported-by: Xiaoqing Wei +Signed-off-by: Amit Shah +CC: Paolo Bonzini +CC: Juan Quintela +CC: "Dr. David Alan Gilbert" +CC: Marcelo Tosatti +CC: Richard Henderson +CC: Eduardo Habkost +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost +(cherry picked from commit c9b8f6b6210847b4381c5b2ee172b1c7eb9985d6) +Signed-off-by: Amit Shah +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index c91bfb8..e1b0ca2 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -63,6 +63,7 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = { + + static bool has_msr_star; + static bool has_msr_hsave_pa; ++static bool has_msr_tsc_aux; + static bool has_msr_tsc_adjust; + static bool has_msr_tsc_deadline; + static bool has_msr_async_pf_en; +@@ -774,6 +775,10 @@ static int kvm_get_supported_msrs(KVMState *s) + has_msr_hsave_pa = true; + continue; + } ++ if (kvm_msr_list->indices[i] == MSR_TSC_AUX) { ++ has_msr_tsc_aux = true; ++ continue; ++ } + if (kvm_msr_list->indices[i] == MSR_TSC_ADJUST) { + has_msr_tsc_adjust = true; + continue; +@@ -1159,6 +1164,9 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + if (has_msr_hsave_pa) { + kvm_msr_entry_set(&msrs[n++], MSR_VM_HSAVE_PA, env->vm_hsave); + } ++ if (has_msr_tsc_aux) { ++ kvm_msr_entry_set(&msrs[n++], MSR_TSC_AUX, env->tsc_aux); ++ } + if (has_msr_tsc_adjust) { + kvm_msr_entry_set(&msrs[n++], MSR_TSC_ADJUST, env->tsc_adjust); + } +@@ -1507,6 +1515,9 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_hsave_pa) { + msrs[n++].index = MSR_VM_HSAVE_PA; + } ++ if (has_msr_tsc_aux) { ++ msrs[n++].index = MSR_TSC_AUX; ++ } + if (has_msr_tsc_adjust) { + msrs[n++].index = MSR_TSC_ADJUST; + } +@@ -1636,6 +1647,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_IA32_TSC: + env->tsc = msrs[i].data; + break; ++ case MSR_TSC_AUX: ++ env->tsc_aux = msrs[i].data; ++ break; + case MSR_TSC_ADJUST: + env->tsc_adjust = msrs[i].data; + break; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-get-set-migrate-XSAVES-state.patch b/SOURCES/kvm-target-i386-get-set-migrate-XSAVES-state.patch new file mode 100644 index 0000000..760ac99 --- /dev/null +++ b/SOURCES/kvm-target-i386-get-set-migrate-XSAVES-state.patch @@ -0,0 +1,170 @@ +From a824033fdc6956ee449f49f6d1a74ebfb21d0700 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Fri, 31 Mar 2017 11:37:37 +0200 +Subject: [PATCH 1/4] target-i386: get/set/migrate XSAVES state + +RH-Author: Eduardo Habkost +Message-id: <20170331113737.9930-1-ehabkost@redhat.com> +Patchwork-id: 74596 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] target-i386: get/set/migrate XSAVES state +Bugzilla: 1327593 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: David Hildenbrand + +From: Wanpeng Li + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1327593 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=12913269 + +Add xsaves related definition, it also adds corresponding part +to kvm_get/put, and vmstate. + +Backport notes: +* As we didn't have unmigratable_flags yet, our backport + of upstream commit 0bb0b2d2fe7f645ddaf1f0ff40ac669c9feb4aa1 + (commit 5fcaf5176d7545518c76f3aa8ea7ce6fb063c62d) didn't + include "xsaves" cpuid_xsave_feature_name[]. This patch now + adds "xsave" to cpuid_xsave_feature_name[]. + +Signed-off-by: Wanpeng Li +Signed-off-by: Paolo Bonzini +(cherry picked from commit 18cd2c17b5370369a886155c001da0a7f54bbcca) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + target-i386/cpu.h | 2 ++ + target-i386/kvm.c | 15 +++++++++++++++ + target-i386/machine.c | 21 +++++++++++++++++++++ + 4 files changed, 39 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 33f0997..ae56995 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -177,7 +177,7 @@ static const char *cpuid_7_0_edx_feature_name[] = { + }; + + static const char *cpuid_xsave_feature_name[] = { +- "xsaveopt", "xsavec", "xgetbv1", NULL, ++ "xsaveopt", "xsavec", "xgetbv1", "xsaves", + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index f04deb4..ac60309 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -384,6 +384,7 @@ + #define MSR_VM_HSAVE_PA 0xc0010117 + + #define MSR_IA32_BNDCFGS 0x00000d90 ++#define MSR_IA32_XSS 0x00000da0 + + #define XSTATE_FP (1ULL << 0) + #define XSTATE_SSE (1ULL << 1) +@@ -1026,6 +1027,7 @@ typedef struct CPUX86State { + uint64_t xstate_bv; + + uint64_t xcr0; ++ uint64_t xss; + + TPRAccess tpr_access_type; + } CPUX86State; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index e1b0ca2..6a479f4 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -76,6 +76,7 @@ static bool has_msr_hv_hypercall; + static bool has_msr_hv_vapic; + static bool has_msr_hv_tsc; + static bool has_msr_mtrr; ++static bool has_msr_xss; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -795,6 +796,10 @@ static int kvm_get_supported_msrs(KVMState *s) + has_msr_bndcfgs = true; + continue; + } ++ if (kvm_msr_list->indices[i] == MSR_IA32_XSS) { ++ has_msr_xss = true; ++ continue; ++ } + } + } + +@@ -1177,6 +1182,9 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + if (has_msr_bndcfgs) { + kvm_msr_entry_set(&msrs[n++], MSR_IA32_BNDCFGS, env->msr_bndcfgs); + } ++ if (has_msr_xss) { ++ kvm_msr_entry_set(&msrs[n++], MSR_IA32_XSS, env->xss); ++ } + #ifdef TARGET_X86_64 + if (lm_capable_kernel) { + kvm_msr_entry_set(&msrs[n++], MSR_CSTAR, env->cstar); +@@ -1530,6 +1538,10 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_bndcfgs) { + msrs[n++].index = MSR_IA32_BNDCFGS; + } ++ if (has_msr_xss) { ++ msrs[n++].index = MSR_IA32_XSS; ++ } ++ + + if (!env->tsc_valid) { + msrs[n++].index = MSR_IA32_TSC; +@@ -1677,6 +1689,9 @@ static int kvm_get_msrs(X86CPU *cpu) + case MSR_IA32_BNDCFGS: + env->msr_bndcfgs = msrs[i].data; + break; ++ case MSR_IA32_XSS: ++ env->xss = msrs[i].data; ++ break; + default: + if (msrs[i].index >= MSR_MC0_CTL && + msrs[i].index < MSR_MC0_CTL + (env->mcg_cap & 0xff) * 4) { +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 2c97002..ce7fcd3 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -704,6 +704,24 @@ static const VMStateDescription vmstate_avx512 = { + } + }; + ++static bool xss_needed(void *opaque) ++{ ++ X86CPU *cpu = opaque; ++ CPUX86State *env = &cpu->env; ++ ++ return env->xss != 0; ++} ++ ++static const VMStateDescription vmstate_xss = { ++ .name = "cpu/xss", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64(env.xss, X86CPU), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -850,6 +868,9 @@ const VMStateDescription vmstate_x86_cpu = { + }, { + .vmsd = &vmstate_avx512, + .needed = avx512_needed, ++ }, { ++ .vmsd = &vmstate_xss, ++ .needed = xss_needed, + } , { + /* empty */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-introduce-kvm_put_one_msr.patch b/SOURCES/kvm-target-i386-introduce-kvm_put_one_msr.patch new file mode 100644 index 0000000..7751a52 --- /dev/null +++ b/SOURCES/kvm-target-i386-introduce-kvm_put_one_msr.patch @@ -0,0 +1,86 @@ +From 596e3e7f77a1570aff586199e7bb34de0b4e0ba6 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 15 May 2018 11:56:30 +0200 +Subject: [PATCH 04/10] target-i386: introduce kvm_put_one_msr + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180515115634.24469-2-dgilbert@redhat.com> +Patchwork-id: 80272 +O-Subject: [RHEL-7.6 qemu-kvm PATCH v2 1/5] target-i386: introduce kvm_put_one_msr +Bugzilla: 1577680 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Eduardo Habkost + +From: "Dr. David Alan Gilbert" + +Avoid further code duplication in the next patch. + +Signed-off-by: Paolo Bonzini +(cherry picked from commit 73e1b8f2f9b8a90361f9c1af306ee17bfcfd592d) +(cherry picked from commit e9e26236af6a858961280cd4997c437eab27c1e9) + Merge conflict: + We don't yet have Eduardo's patch where kvm_msr_entry_add + was added, so rework to the older kvm_msr_entry_set. + + No msr_feature_control in this world + +Signed-off-by: Dr. David Alan Gilbert +Signed-off-by: Miroslav Rezanina +--- + target-i386/kvm.c | 28 +++++++++++++++++++++------- + 1 file changed, 21 insertions(+), 7 deletions(-) + +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 24d17ad..6f3424e 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1136,24 +1136,38 @@ static void kvm_msr_entry_set(struct kvm_msr_entry *entry, + entry->data = value; + } + +-static int kvm_put_tscdeadline_msr(X86CPU *cpu) ++static int kvm_put_one_msr(X86CPU *cpu, int index, uint64_t value) + { +- CPUX86State *env = &cpu->env; + struct { + struct kvm_msrs info; + struct kvm_msr_entry entries[1]; + } msr_data; +- struct kvm_msr_entry *msrs = msr_data.entries; ++ ++ kvm_msr_entry_set(&msr_data.entries[0], index, value); ++ ++ msr_data.info = (struct kvm_msrs) { ++ .nmsrs = 1, ++ }; ++ ++ return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, &msr_data); ++} ++ ++static int kvm_put_tscdeadline_msr(X86CPU *cpu) ++{ ++ CPUX86State *env = &cpu->env; ++ int ret; + + if (!has_msr_tsc_deadline) { + return 0; + } + +- kvm_msr_entry_set(&msrs[0], MSR_IA32_TSCDEADLINE, env->tsc_deadline); +- +- msr_data.info.nmsrs = 1; ++ ret = kvm_put_one_msr(cpu, MSR_IA32_TSCDEADLINE, env->tsc_deadline); ++ if (ret < 0) { ++ return ret; ++ } + +- return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MSRS, &msr_data); ++ assert(ret == 1); ++ return 0; + } + + static int kvm_put_msrs(X86CPU *cpu, int level) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_check_features_against_host-Kill-fea.patch b/SOURCES/kvm-target-i386-kvm_check_features_against_host-Kill-fea.patch new file mode 100644 index 0000000..ce9514e --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_check_features_against_host-Kill-fea.patch @@ -0,0 +1,114 @@ +From 6d76a3d10423f99561a431964637b58d7e5f2e77 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:39 +0100 +Subject: [PATCH 09/17] target-i386: kvm_check_features_against_host(): Kill + feature word array + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-9-ehabkost@redhat.com> +Patchwork-id: 74039 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 08/14] target-i386: kvm_check_features_against_host(): Kill feature word array +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +We don't need the ft[] array on kvm_check_features_against_host() +anymore, as we can simply use the feature_word_info[] array, that has +everything we need. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit f0b9b11164482a8a2283dee25cecc4a4c531259e) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 57 ++++++++++++------------------------------------------- + 1 file changed, 12 insertions(+), 45 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 22ad4f9..bb8abf7 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1303,57 +1303,23 @@ static int unavailable_host_feature(FeatureWordInfo *f, uint32_t mask) + * + * This function may be called only if KVM is enabled. + */ +-static int kvm_check_features_against_host(X86CPU *cpu) ++static int kvm_check_features_against_host(KVMState *s, X86CPU *cpu) + { + CPUX86State *env = &cpu->env; +- x86_def_t host_def; +- uint32_t mask; +- int rv, i; +- struct model_features_t ft[] = { +- {&env->features[FEAT_1_EDX], +- &host_def.features[FEAT_1_EDX], +- FEAT_1_EDX }, +- {&env->features[FEAT_1_ECX], +- &host_def.features[FEAT_1_ECX], +- FEAT_1_ECX }, +- {&env->features[FEAT_8000_0001_EDX], +- &host_def.features[FEAT_8000_0001_EDX], +- FEAT_8000_0001_EDX }, +- {&env->features[FEAT_8000_0001_ECX], +- &host_def.features[FEAT_8000_0001_ECX], +- FEAT_8000_0001_ECX }, +- {&env->features[FEAT_C000_0001_EDX], +- &host_def.features[FEAT_C000_0001_EDX], +- FEAT_C000_0001_EDX }, +- {&env->features[FEAT_7_0_EBX], +- &host_def.features[FEAT_7_0_EBX], +- FEAT_7_0_EBX }, +- {&env->features[FEAT_7_0_ECX], +- &host_def.features[FEAT_7_0_ECX], +- FEAT_7_0_ECX }, +- {&env->features[FEAT_7_0_EDX], +- &host_def.features[FEAT_7_0_EDX], +- FEAT_7_0_EDX }, +- {&env->features[FEAT_XSAVE], +- &host_def.features[FEAT_XSAVE], +- FEAT_XSAVE }, +- {&env->features[FEAT_SVM], +- &host_def.features[FEAT_SVM], +- FEAT_SVM }, +- {&env->features[FEAT_KVM], +- &host_def.features[FEAT_KVM], +- FEAT_KVM }, +- }; ++ int rv = 0; ++ FeatureWord w; + + assert(kvm_enabled()); + +- kvm_cpu_fill_host(&host_def); +- for (rv = 0, i = 0; i < ARRAY_SIZE(ft); ++i) { +- FeatureWord w = ft[i].feat_word; ++ for (w = 0; w < FEATURE_WORDS; w++) { + FeatureWordInfo *wi = &feature_word_info[w]; ++ uint32_t guest_feat = env->features[w]; ++ uint32_t host_feat = kvm_arch_get_supported_cpuid(s, wi->cpuid_eax, ++ wi->cpuid_ecx, ++ wi->cpuid_reg); ++ uint32_t mask; + for (mask = 1; mask; mask <<= 1) { +- if (*ft[i].guest_feat & mask && +- !(*ft[i].host_feat & mask)) { ++ if (guest_feat & mask && !(host_feat & mask)) { + unavailable_host_feature(wi, mask); + rv = 1; + } +@@ -2677,8 +2643,9 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + env->features[FEAT_7_0_ECX] &= TCG_7_0_ECX_FEATURES; + env->features[FEAT_7_0_EDX] &= TCG_7_0_EDX_FEATURES; + } else { ++ KVMState *s = kvm_state; + if ((cpu->check_cpuid || cpu->enforce_cpuid) +- && kvm_check_features_against_host(cpu) && cpu->enforce_cpuid) { ++ && kvm_check_features_against_host(s, cpu) && cpu->enforce_cpuid) { + error_setg(&local_err, + "Host's CPU doesn't support requested features"); + goto out; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Fill-feature-words-in-.patch b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Fill-feature-words-in-.patch new file mode 100644 index 0000000..ab2524c --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Fill-feature-words-in-.patch @@ -0,0 +1,70 @@ +From acedcdc24c0aad54530c0d41958b19981207e803 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:38 +0100 +Subject: [PATCH 08/17] target-i386: kvm_cpu_fill_host(): Fill feature words in + a loop + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-8-ehabkost@redhat.com> +Patchwork-id: 74038 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 07/14] target-i386: kvm_cpu_fill_host(): Fill feature words in a loop +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Now that the kvm_cpu_fill_host() code is simplified, we can simply set +the feature word array using a simple loop. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2bc65d2b020887da3eb9043ae4f7d133ed85a7fe) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 29 +++++++---------------------- + 1 file changed, 7 insertions(+), 22 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 1515b87..22ad4f9 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1268,28 +1268,13 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + + cpu_x86_fill_model_id(x86_cpu_def->model_id); + +- x86_cpu_def->features[FEAT_1_EDX] = +- kvm_arch_get_supported_cpuid(s, 0x1, 0, R_EDX); +- x86_cpu_def->features[FEAT_1_ECX] = +- kvm_arch_get_supported_cpuid(s, 0x1, 0, R_ECX); +- x86_cpu_def->features[FEAT_7_0_EBX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); +- x86_cpu_def->features[FEAT_7_0_ECX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); +- x86_cpu_def->features[FEAT_7_0_EDX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EDX); +- x86_cpu_def->features[FEAT_XSAVE] = +- kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); +- x86_cpu_def->features[FEAT_8000_0001_EDX] = +- kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_EDX); +- x86_cpu_def->features[FEAT_8000_0001_ECX] = +- kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_ECX); +- x86_cpu_def->features[FEAT_C000_0001_EDX] = +- kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); +- x86_cpu_def->features[FEAT_SVM] = +- kvm_arch_get_supported_cpuid(s, 0x8000000A, 0, R_EDX); +- x86_cpu_def->features[FEAT_KVM] = +- kvm_arch_get_supported_cpuid(s, KVM_CPUID_FEATURES, 0, R_EAX); ++ FeatureWord w; ++ for (w = 0; w < FEATURE_WORDS; w++) { ++ FeatureWordInfo *wi = &feature_word_info[w]; ++ x86_cpu_def->features[w] = ++ kvm_arch_get_supported_cpuid(s, wi->cpuid_eax, wi->cpuid_ecx, ++ wi->cpuid_reg); ++ } + + #endif /* CONFIG_KVM */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Kill-unused-code.patch b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Kill-unused-code.patch new file mode 100644 index 0000000..7956a54 --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Kill-unused-code.patch @@ -0,0 +1,46 @@ +From bdde6d373b48144d8b4c1ebb60a3d50d9c31dc87 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:33 +0100 +Subject: [PATCH 03/17] target-i386: kvm_cpu_fill_host(): Kill unused code + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-3-ehabkost@redhat.com> +Patchwork-id: 74034 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 02/14] target-i386: kvm_cpu_fill_host(): Kill unused code +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Those host_cpuid() calls are useless. They are leftovers from when the +old code using host_cpuid() was removed. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit 81e207707e7b6204f64451779d752f23777ed451) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 789e687..8a49ff5 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1292,12 +1292,10 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + + /* Call Centaur's CPUID instruction. */ + if (!strcmp(x86_cpu_def->vendor, CPUID_VENDOR_VIA)) { +- host_cpuid(0xC0000000, 0, &eax, &ebx, &ecx, &edx); + eax = kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); + if (eax >= 0xC0000001) { + /* Support VIA max extended level */ + x86_cpu_def->xlevel2 = eax; +- host_cpuid(0xC0000001, 0, &eax, &ebx, &ecx, &edx); + x86_cpu_def->features[FEAT_C000_0001_EDX] = + kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-CPU-v.patch b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-CPU-v.patch new file mode 100644 index 0000000..69ebd26 --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-CPU-v.patch @@ -0,0 +1,62 @@ +From ce8b0103a1c5cae9030156d9f17daf5dee5ed4c5 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:35 +0100 +Subject: [PATCH 05/17] target-i386: kvm_cpu_fill_host(): No need to check CPU + vendor + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-5-ehabkost@redhat.com> +Patchwork-id: 74043 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 04/14] target-i386: kvm_cpu_fill_host(): No need to check CPU vendor +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +There's no need to check CPU vendor before calling +kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX), because: + + * The kernel won't return any entry for 0xC0000000 if host CPU vendor + is not Centaur (See kvm_dev_ioctl_get_cpuid() on the kernel code); + * kvm_arch_get_supported_cpuid() will return 0 if no entry is returned + by the kernel for the requested leaf. + +This will simplify the kvm_cpu_fill_host() code a little. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit b73dcfb16fc894041de553ac9f98b9e1640fcf06) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index c82073e..a10055b 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1285,14 +1285,12 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + cpu_x86_fill_model_id(x86_cpu_def->model_id); + + /* Call Centaur's CPUID instruction. */ +- if (!strcmp(x86_cpu_def->vendor, CPUID_VENDOR_VIA)) { +- eax = kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); +- if (eax >= 0xC0000001) { +- /* Support VIA max extended level */ +- x86_cpu_def->xlevel2 = eax; +- x86_cpu_def->features[FEAT_C000_0001_EDX] = +- kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); +- } ++ eax = kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); ++ if (eax >= 0xC0000001) { ++ /* Support VIA max extended level */ ++ x86_cpu_def->xlevel2 = eax; ++ x86_cpu_def->features[FEAT_C000_0001_EDX] = ++ kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); + } + + /* Other KVM-specific feature fields: */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-level.patch b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-level.patch new file mode 100644 index 0000000..2a6cde8 --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-level.patch @@ -0,0 +1,66 @@ +From 40d8624f4a90769b60ee567035f8231b64c10011 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:34 +0100 +Subject: [PATCH 04/17] target-i386: kvm_cpu_fill_host(): No need to check + level + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-4-ehabkost@redhat.com> +Patchwork-id: 74035 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 03/14] target-i386: kvm_cpu_fill_host(): No need to check level +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +There's no need to check level (CPUID[0].EAX) before calling +kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX), because: + + * The kernel won't return any entry for CPUID 7 if CPUID[0].EAX is < 7 + on the host (See kvm_dev_ioctl_get_cpuid() on the kernel code); + * kvm_arch_get_supported_cpuid() will return 0 if no entry is returned + by the kernel for the requested leaf. + +This will simplify the kvm_cpu_fill_host() code a little. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit 7171a3933f2ee8cb984fd64c59ca081f39b943a4) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 18 ++++++------------ + 1 file changed, 6 insertions(+), 12 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 8a49ff5..c82073e 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1267,18 +1267,12 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + x86_cpu_def->features[FEAT_1_ECX] = + kvm_arch_get_supported_cpuid(s, 0x1, 0, R_ECX); + +- if (x86_cpu_def->level >= 7) { +- x86_cpu_def->features[FEAT_7_0_EBX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); +- x86_cpu_def->features[FEAT_7_0_ECX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); +- x86_cpu_def->features[FEAT_7_0_EDX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EDX); +- } else { +- x86_cpu_def->features[FEAT_7_0_EBX] = 0; +- x86_cpu_def->features[FEAT_7_0_ECX] = 0; +- x86_cpu_def->features[FEAT_7_0_EDX] = 0; +- } ++ x86_cpu_def->features[FEAT_7_0_EBX] = ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); ++ x86_cpu_def->features[FEAT_7_0_ECX] = ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); ++ x86_cpu_def->features[FEAT_7_0_EDX] = ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EDX); + x86_cpu_def->features[FEAT_XSAVE] = + kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-xleve.patch b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-xleve.patch new file mode 100644 index 0000000..3accad7 --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-xleve.patch @@ -0,0 +1,68 @@ +From f51c618ce3598d9a6a3256e4dd2b9dd3164fbc81 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:36 +0100 +Subject: [PATCH 06/17] target-i386: kvm_cpu_fill_host(): No need to check + xlevel2 + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-6-ehabkost@redhat.com> +Patchwork-id: 74036 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 05/14] target-i386: kvm_cpu_fill_host(): No need to check xlevel2 +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +There's no need to check CPU xlevel2 before calling +kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX), because: + + * The kernel won't return any entry for 0xC0000000 if host CPU vendor + is not Centaur (See kvm_dev_ioctl_get_supported_cpuid() on the kernel + code) + * Similarly, the kernel won't return any entry for 0xC0000001 if + CPUID[0xC0000000].EAX is < 0xC0000001 + * kvm_arch_get_supported_cpuid() will return 0 if no entry is returned + by the kernel for the requested leaf + +For similar reasons, we can simply set x86_cpu_def->xlevel2 directly +instead of making it conditional, because it will be set to 0 CPU vendor +is not Centaur. + +This will simplify the kvm_cpu_fill_host() code a little. + +Signed-off-by: Eduardo Habkost +[Remove unparseable comment. - Paolo] +Signed-off-by: Paolo Bonzini +(cherry picked from commit 803a932706e3ba335d4c98f3577a05cb000f1699) +Signed-off-by: Eduardo Habkost + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index a10055b..02bd038 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1285,13 +1285,10 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + cpu_x86_fill_model_id(x86_cpu_def->model_id); + + /* Call Centaur's CPUID instruction. */ +- eax = kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); +- if (eax >= 0xC0000001) { +- /* Support VIA max extended level */ +- x86_cpu_def->xlevel2 = eax; +- x86_cpu_def->features[FEAT_C000_0001_EDX] = +- kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); +- } ++ x86_cpu_def->xlevel2 = ++ kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); ++ x86_cpu_def->features[FEAT_C000_0001_EDX] = ++ kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); + + /* Other KVM-specific feature fields: */ + x86_cpu_def->features[FEAT_SVM] = +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Set-all-feature-words-.patch b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Set-all-feature-words-.patch new file mode 100644 index 0000000..0de6ac3 --- /dev/null +++ b/SOURCES/kvm-target-i386-kvm_cpu_fill_host-Set-all-feature-words-.patch @@ -0,0 +1,82 @@ +From 905a9704d3099a82421850ae172b89f4de2e58b3 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:37 +0100 +Subject: [PATCH 07/17] target-i386: kvm_cpu_fill_host(): Set all feature words + at end of function + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-7-ehabkost@redhat.com> +Patchwork-id: 74037 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 06/14] target-i386: kvm_cpu_fill_host(): Set all feature words at end of function +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Reorder the code so all the code that sets x86_cpu_def->features is at +the end of the function. + +Signed-off-by: Eduardo Habkost +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2a573259ebf8b1072707257d547603520d1ed236) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 29 ++++++++++++----------------- + 1 file changed, 12 insertions(+), 17 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 02bd038..1515b87 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -1262,35 +1262,30 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + x86_cpu_def->stepping = eax & 0x0F; + + x86_cpu_def->level = kvm_arch_get_supported_cpuid(s, 0x0, 0, R_EAX); ++ x86_cpu_def->xlevel = kvm_arch_get_supported_cpuid(s, 0x80000000, 0, R_EAX); ++ x86_cpu_def->xlevel2 = ++ kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); ++ ++ cpu_x86_fill_model_id(x86_cpu_def->model_id); ++ + x86_cpu_def->features[FEAT_1_EDX] = + kvm_arch_get_supported_cpuid(s, 0x1, 0, R_EDX); + x86_cpu_def->features[FEAT_1_ECX] = + kvm_arch_get_supported_cpuid(s, 0x1, 0, R_ECX); +- + x86_cpu_def->features[FEAT_7_0_EBX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); + x86_cpu_def->features[FEAT_7_0_ECX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); + x86_cpu_def->features[FEAT_7_0_EDX] = +- kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EDX); ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EDX); + x86_cpu_def->features[FEAT_XSAVE] = +- kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); +- +- x86_cpu_def->xlevel = kvm_arch_get_supported_cpuid(s, 0x80000000, 0, R_EAX); ++ kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); + x86_cpu_def->features[FEAT_8000_0001_EDX] = +- kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_EDX); ++ kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_EDX); + x86_cpu_def->features[FEAT_8000_0001_ECX] = +- kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_ECX); +- +- cpu_x86_fill_model_id(x86_cpu_def->model_id); +- +- /* Call Centaur's CPUID instruction. */ +- x86_cpu_def->xlevel2 = +- kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); ++ kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_ECX); + x86_cpu_def->features[FEAT_C000_0001_EDX] = + kvm_arch_get_supported_cpuid(s, 0xC0000001, 0, R_EDX); +- +- /* Other KVM-specific feature fields: */ + x86_cpu_def->features[FEAT_SVM] = + kvm_arch_get_supported_cpuid(s, 0x8000000A, 0, R_EDX); + x86_cpu_def->features[FEAT_KVM] = +-- +1.8.3.1 + diff --git a/SOURCES/kvm-target-i386-remove-tabs-from-target-i386-cpu.h.patch b/SOURCES/kvm-target-i386-remove-tabs-from-target-i386-cpu.h.patch new file mode 100644 index 0000000..384d922 --- /dev/null +++ b/SOURCES/kvm-target-i386-remove-tabs-from-target-i386-cpu.h.patch @@ -0,0 +1,304 @@ +From 1f49705e06366e1c2fa2b2c77497ed33ca1c6a30 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 23 Sep 2013 17:06:11 +0200 +Subject: [PATCH 01/29] target-i386: remove tabs from target-i386/cpu.h + +RH-Author: Paolo Bonzini +Message-id: <1379955972-3080-2-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54486 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 1/2] target-i386: remove tabs from target-i386/cpu.h +Bugzilla: 928867 +RH-Acked-by: Juan Quintela +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Bandan Das + +Signed-off-by: Paolo Bonzini +(cherry-picked from commit e4a09c9637f13a744ad7e2bc5223df05ac582c0d) +--- + target-i386/cpu.h | 192 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 96 insertions(+), 96 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 192 ++++++++++++++++++++++++++-------------------------- + 1 files changed, 96 insertions(+), 96 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 058c57f..74c7899 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -37,9 +37,9 @@ + #define TARGET_HAS_ICE 1 + + #ifdef TARGET_X86_64 +-#define ELF_MACHINE EM_X86_64 ++#define ELF_MACHINE EM_X86_64 + #else +-#define ELF_MACHINE EM_386 ++#define ELF_MACHINE EM_386 + #endif + + #define CPUArchState struct CPUX86State +@@ -98,10 +98,10 @@ + #define DESC_TSS_BUSY_MASK (1 << 9) + + /* eflags masks */ +-#define CC_C 0x0001 +-#define CC_P 0x0004 +-#define CC_A 0x0010 +-#define CC_Z 0x0040 ++#define CC_C 0x0001 ++#define CC_P 0x0004 ++#define CC_A 0x0010 ++#define CC_Z 0x0040 + #define CC_S 0x0080 + #define CC_O 0x0800 + +@@ -109,14 +109,14 @@ + #define IOPL_SHIFT 12 + #define VM_SHIFT 17 + +-#define TF_MASK 0x00000100 +-#define IF_MASK 0x00000200 +-#define DF_MASK 0x00000400 +-#define IOPL_MASK 0x00003000 +-#define NT_MASK 0x00004000 +-#define RF_MASK 0x00010000 +-#define VM_MASK 0x00020000 +-#define AC_MASK 0x00040000 ++#define TF_MASK 0x00000100 ++#define IF_MASK 0x00000200 ++#define DF_MASK 0x00000400 ++#define IOPL_MASK 0x00003000 ++#define NT_MASK 0x00004000 ++#define RF_MASK 0x00010000 ++#define VM_MASK 0x00020000 ++#define AC_MASK 0x00040000 + #define VIF_MASK 0x00080000 + #define VIP_MASK 0x00100000 + #define ID_MASK 0x00200000 +@@ -238,28 +238,28 @@ + #define DR7_TYPE_IO_RW 0x2 + #define DR7_TYPE_DATA_RW 0x3 + +-#define PG_PRESENT_BIT 0 +-#define PG_RW_BIT 1 +-#define PG_USER_BIT 2 +-#define PG_PWT_BIT 3 +-#define PG_PCD_BIT 4 +-#define PG_ACCESSED_BIT 5 +-#define PG_DIRTY_BIT 6 +-#define PG_PSE_BIT 7 +-#define PG_GLOBAL_BIT 8 +-#define PG_NX_BIT 63 ++#define PG_PRESENT_BIT 0 ++#define PG_RW_BIT 1 ++#define PG_USER_BIT 2 ++#define PG_PWT_BIT 3 ++#define PG_PCD_BIT 4 ++#define PG_ACCESSED_BIT 5 ++#define PG_DIRTY_BIT 6 ++#define PG_PSE_BIT 7 ++#define PG_GLOBAL_BIT 8 ++#define PG_NX_BIT 63 + + #define PG_PRESENT_MASK (1 << PG_PRESENT_BIT) +-#define PG_RW_MASK (1 << PG_RW_BIT) +-#define PG_USER_MASK (1 << PG_USER_BIT) +-#define PG_PWT_MASK (1 << PG_PWT_BIT) +-#define PG_PCD_MASK (1 << PG_PCD_BIT) ++#define PG_RW_MASK (1 << PG_RW_BIT) ++#define PG_USER_MASK (1 << PG_USER_BIT) ++#define PG_PWT_MASK (1 << PG_PWT_BIT) ++#define PG_PCD_MASK (1 << PG_PCD_BIT) + #define PG_ACCESSED_MASK (1 << PG_ACCESSED_BIT) +-#define PG_DIRTY_MASK (1 << PG_DIRTY_BIT) +-#define PG_PSE_MASK (1 << PG_PSE_BIT) +-#define PG_GLOBAL_MASK (1 << PG_GLOBAL_BIT) ++#define PG_DIRTY_MASK (1 << PG_DIRTY_BIT) ++#define PG_PSE_MASK (1 << PG_PSE_BIT) ++#define PG_GLOBAL_MASK (1 << PG_GLOBAL_BIT) + #define PG_HI_USER_MASK 0x7ff0000000000000LL +-#define PG_NX_MASK (1LL << PG_NX_BIT) ++#define PG_NX_MASK (1LL << PG_NX_BIT) + + #define PG_ERROR_W_BIT 1 + +@@ -269,32 +269,32 @@ + #define PG_ERROR_RSVD_MASK 0x08 + #define PG_ERROR_I_D_MASK 0x10 + +-#define MCG_CTL_P (1ULL<<8) /* MCG_CAP register available */ +-#define MCG_SER_P (1ULL<<24) /* MCA recovery/new status bits */ ++#define MCG_CTL_P (1ULL<<8) /* MCG_CAP register available */ ++#define MCG_SER_P (1ULL<<24) /* MCA recovery/new status bits */ + +-#define MCE_CAP_DEF (MCG_CTL_P|MCG_SER_P) +-#define MCE_BANKS_DEF 10 ++#define MCE_CAP_DEF (MCG_CTL_P|MCG_SER_P) ++#define MCE_BANKS_DEF 10 + +-#define MCG_STATUS_RIPV (1ULL<<0) /* restart ip valid */ +-#define MCG_STATUS_EIPV (1ULL<<1) /* ip points to correct instruction */ +-#define MCG_STATUS_MCIP (1ULL<<2) /* machine check in progress */ ++#define MCG_STATUS_RIPV (1ULL<<0) /* restart ip valid */ ++#define MCG_STATUS_EIPV (1ULL<<1) /* ip points to correct instruction */ ++#define MCG_STATUS_MCIP (1ULL<<2) /* machine check in progress */ + +-#define MCI_STATUS_VAL (1ULL<<63) /* valid error */ +-#define MCI_STATUS_OVER (1ULL<<62) /* previous errors lost */ +-#define MCI_STATUS_UC (1ULL<<61) /* uncorrected error */ +-#define MCI_STATUS_EN (1ULL<<60) /* error enabled */ +-#define MCI_STATUS_MISCV (1ULL<<59) /* misc error reg. valid */ +-#define MCI_STATUS_ADDRV (1ULL<<58) /* addr reg. valid */ +-#define MCI_STATUS_PCC (1ULL<<57) /* processor context corrupt */ +-#define MCI_STATUS_S (1ULL<<56) /* Signaled machine check */ +-#define MCI_STATUS_AR (1ULL<<55) /* Action required */ ++#define MCI_STATUS_VAL (1ULL<<63) /* valid error */ ++#define MCI_STATUS_OVER (1ULL<<62) /* previous errors lost */ ++#define MCI_STATUS_UC (1ULL<<61) /* uncorrected error */ ++#define MCI_STATUS_EN (1ULL<<60) /* error enabled */ ++#define MCI_STATUS_MISCV (1ULL<<59) /* misc error reg. valid */ ++#define MCI_STATUS_ADDRV (1ULL<<58) /* addr reg. valid */ ++#define MCI_STATUS_PCC (1ULL<<57) /* processor context corrupt */ ++#define MCI_STATUS_S (1ULL<<56) /* Signaled machine check */ ++#define MCI_STATUS_AR (1ULL<<55) /* Action required */ + + /* MISC register defines */ +-#define MCM_ADDR_SEGOFF 0 /* segment offset */ +-#define MCM_ADDR_LINEAR 1 /* linear address */ +-#define MCM_ADDR_PHYS 2 /* physical address */ +-#define MCM_ADDR_MEM 3 /* memory address */ +-#define MCM_ADDR_GENERIC 7 /* generic */ ++#define MCM_ADDR_SEGOFF 0 /* segment offset */ ++#define MCM_ADDR_LINEAR 1 /* linear address */ ++#define MCM_ADDR_PHYS 2 /* physical address */ ++#define MCM_ADDR_MEM 3 /* memory address */ ++#define MCM_ADDR_GENERIC 7 /* generic */ + + #define MSR_IA32_TSC 0x10 + #define MSR_IA32_APICBASE 0x1b +@@ -304,10 +304,10 @@ + #define MSR_TSC_ADJUST 0x0000003b + #define MSR_IA32_TSCDEADLINE 0x6e0 + +-#define MSR_MTRRcap 0xfe +-#define MSR_MTRRcap_VCNT 8 +-#define MSR_MTRRcap_FIXRANGE_SUPPORT (1 << 8) +-#define MSR_MTRRcap_WC_SUPPORTED (1 << 10) ++#define MSR_MTRRcap 0xfe ++#define MSR_MTRRcap_VCNT 8 ++#define MSR_MTRRcap_FIXRANGE_SUPPORT (1 << 8) ++#define MSR_MTRRcap_WC_SUPPORTED (1 << 10) + + #define MSR_IA32_SYSENTER_CS 0x174 + #define MSR_IA32_SYSENTER_ESP 0x175 +@@ -319,33 +319,33 @@ + + #define MSR_IA32_PERF_STATUS 0x198 + +-#define MSR_IA32_MISC_ENABLE 0x1a0 ++#define MSR_IA32_MISC_ENABLE 0x1a0 + /* Indicates good rep/movs microcode on some processors: */ + #define MSR_IA32_MISC_ENABLE_DEFAULT 1 + +-#define MSR_MTRRphysBase(reg) (0x200 + 2 * (reg)) +-#define MSR_MTRRphysMask(reg) (0x200 + 2 * (reg) + 1) +- +-#define MSR_MTRRfix64K_00000 0x250 +-#define MSR_MTRRfix16K_80000 0x258 +-#define MSR_MTRRfix16K_A0000 0x259 +-#define MSR_MTRRfix4K_C0000 0x268 +-#define MSR_MTRRfix4K_C8000 0x269 +-#define MSR_MTRRfix4K_D0000 0x26a +-#define MSR_MTRRfix4K_D8000 0x26b +-#define MSR_MTRRfix4K_E0000 0x26c +-#define MSR_MTRRfix4K_E8000 0x26d +-#define MSR_MTRRfix4K_F0000 0x26e +-#define MSR_MTRRfix4K_F8000 0x26f ++#define MSR_MTRRphysBase(reg) (0x200 + 2 * (reg)) ++#define MSR_MTRRphysMask(reg) (0x200 + 2 * (reg) + 1) ++ ++#define MSR_MTRRfix64K_00000 0x250 ++#define MSR_MTRRfix16K_80000 0x258 ++#define MSR_MTRRfix16K_A0000 0x259 ++#define MSR_MTRRfix4K_C0000 0x268 ++#define MSR_MTRRfix4K_C8000 0x269 ++#define MSR_MTRRfix4K_D0000 0x26a ++#define MSR_MTRRfix4K_D8000 0x26b ++#define MSR_MTRRfix4K_E0000 0x26c ++#define MSR_MTRRfix4K_E8000 0x26d ++#define MSR_MTRRfix4K_F0000 0x26e ++#define MSR_MTRRfix4K_F8000 0x26f + + #define MSR_PAT 0x277 + +-#define MSR_MTRRdefType 0x2ff ++#define MSR_MTRRdefType 0x2ff + +-#define MSR_MC0_CTL 0x400 +-#define MSR_MC0_STATUS 0x401 +-#define MSR_MC0_ADDR 0x402 +-#define MSR_MC0_MISC 0x403 ++#define MSR_MC0_CTL 0x400 ++#define MSR_MC0_STATUS 0x401 ++#define MSR_MC0_ADDR 0x402 ++#define MSR_MC0_MISC 0x403 + + #define MSR_EFER 0xc0000080 + +@@ -549,24 +549,24 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */ + #define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */ + +-#define EXCP00_DIVZ 0 +-#define EXCP01_DB 1 +-#define EXCP02_NMI 2 +-#define EXCP03_INT3 3 +-#define EXCP04_INTO 4 +-#define EXCP05_BOUND 5 +-#define EXCP06_ILLOP 6 +-#define EXCP07_PREX 7 +-#define EXCP08_DBLE 8 +-#define EXCP09_XERR 9 +-#define EXCP0A_TSS 10 +-#define EXCP0B_NOSEG 11 +-#define EXCP0C_STACK 12 +-#define EXCP0D_GPF 13 +-#define EXCP0E_PAGE 14 +-#define EXCP10_COPR 16 +-#define EXCP11_ALGN 17 +-#define EXCP12_MCHK 18 ++#define EXCP00_DIVZ 0 ++#define EXCP01_DB 1 ++#define EXCP02_NMI 2 ++#define EXCP03_INT3 3 ++#define EXCP04_INTO 4 ++#define EXCP05_BOUND 5 ++#define EXCP06_ILLOP 6 ++#define EXCP07_PREX 7 ++#define EXCP08_DBLE 8 ++#define EXCP09_XERR 9 ++#define EXCP0A_TSS 10 ++#define EXCP0B_NOSEG 11 ++#define EXCP0C_STACK 12 ++#define EXCP0D_GPF 13 ++#define EXCP0E_PAGE 14 ++#define EXCP10_COPR 16 ++#define EXCP11_ALGN 17 ++#define EXCP12_MCHK 18 + + #define EXCP_SYSCALL 0x100 /* only happens in user only emulation + for syscall instruction */ +@@ -1085,7 +1085,7 @@ static inline CPUX86State *cpu_init(const char *cpu_model) + #define cpu_gen_code cpu_x86_gen_code + #define cpu_signal_handler cpu_x86_signal_handler + #define cpu_list x86_cpu_list +-#define cpudef_setup x86_cpudef_setup ++#define cpudef_setup x86_cpudef_setup + + /* MMU modes definitions */ + #define MMU_MODE0_SUFFIX _kernel +-- +1.7.1 + diff --git a/SOURCES/kvm-target-i386-support-loading-of-cpu-xsave-subsection.patch b/SOURCES/kvm-target-i386-support-loading-of-cpu-xsave-subsection.patch new file mode 100644 index 0000000..c712bba --- /dev/null +++ b/SOURCES/kvm-target-i386-support-loading-of-cpu-xsave-subsection.patch @@ -0,0 +1,84 @@ +From c437843790b9b21a90a41b6d96b2b6db3be3d33a Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Wed, 16 Oct 2013 20:00:44 +0200 +Subject: [PATCH 18/18] target-i386: support loading of "cpu/xsave" subsection + +RH-Author: Eduardo Habkost +Message-id: <1381953644-6411-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 54966 +O-Subject: [qemu-kvm RHEL7 PATCH] target-i386: support loading of "cpu/xsave" subsection +Bugzilla: 1004743 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Orit Wasserman + +Bugzilla: 1004743 +Scratch build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6429524 +Upstream status: not applicable + (We could try to make upstream accept the subsection, but I don't + think it will be accepted because there's no real benefit) + +This is a kind of forward-port of RHEL-6 commits ceee3a15c8 and 7f468b80fd, so +the "cpu/xsave" subsection can be loaded when migrating from RHEL-6. + +The differences between the RHEL-6 patches and this one are: + * The xsave state is not being removed from the main "cpu" section, + so we keep using the same format/version used upstream + * The subsection is always reported as optional, because the xsave + state is kept in the main "cpu" section + +Signed-off-by: Eduardo Habkost +--- + target-i386/machine.c | 24 +++++++++++++++++++++++- + 1 file changed, 23 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/machine.c | 24 +++++++++++++++++++++++- + 1 files changed, 23 insertions(+), 1 deletions(-) + +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 8faea62..4f30347 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -446,6 +446,25 @@ static const VMStateDescription vmstate_msr_ia32_misc_enable = { + } + }; + ++static bool vmstate_xsave_needed(void *opaque) ++{ ++ /* The xsave state is already on the main "cpu" section */ ++ return false; ++} ++ ++static const VMStateDescription vmstate_xsave ={ ++ .name = "cpu/xsave", ++ .version_id = 1, ++ .minimum_version_id = 1, ++ .minimum_version_id_old = 1, ++ .fields = (VMStateField []) { ++ VMSTATE_UINT64_V(env.xcr0, X86CPU, 1), ++ VMSTATE_UINT64_V(env.xstate_bv, X86CPU, 1), ++ VMSTATE_YMMH_REGS_VARS(env.ymmh_regs, X86CPU, CPU_NB_REGS, 1), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + const VMStateDescription vmstate_x86_cpu = { + .name = "cpu", + .version_id = 12, +@@ -571,7 +590,10 @@ const VMStateDescription vmstate_x86_cpu = { + }, { + .vmsd = &vmstate_msr_ia32_misc_enable, + .needed = misc_enable_needed, +- } , { ++ }, { ++ .vmsd = &vmstate_xsave, ++ .needed = vmstate_xsave_needed, ++ }, { + /* empty */ + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-tests-Fix-schema-parser-test-for-in-tree-build.patch b/SOURCES/kvm-tests-Fix-schema-parser-test-for-in-tree-build.patch new file mode 100644 index 0000000..8ad31b8 --- /dev/null +++ b/SOURCES/kvm-tests-Fix-schema-parser-test-for-in-tree-build.patch @@ -0,0 +1,75 @@ +From ba8738a0a615a51984a60be2f987b98789968fb6 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:21 +0100 +Subject: [PATCH 21/21] tests: Fix schema parser test for in-tree build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-19-git-send-email-armbru@redhat.com> +Patchwork-id: 56133 +O-Subject: [PATCH 7.0 qemu-kvm 18/18] tests: Fix schema parser test for in-tree build +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Commit 4f193e3 added the test, but screwed up in-tree builds +(SRCDIR=.): the tests's output overwrites the expected output, and is +thus compared to itself. + +Cc: qemu-stable@nongnu.org +Reported-by: Laszlo Ersek +Reviewed-by: Andreas Färber +Reviewed-by: Laszlo Ersek +Signed-off-by: Markus Armbruster +Signed-off-by: Michael Tokarev +(cherry picked from commit d8039e58b1ecfdc9af171502c83e3949f6dafb95) +--- + tests/.gitignore | 1 + + tests/Makefile | 8 ++++---- + 2 files changed, 5 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + tests/.gitignore | 1 + + tests/Makefile | 8 ++++---- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/tests/.gitignore b/tests/.gitignore +index fb05c2a..d9c2ef4 100644 +--- a/tests/.gitignore ++++ b/tests/.gitignore +@@ -19,3 +19,4 @@ test-thread-pool + test-x86-cpuid + test-xbzrle + *-test ++qapi-schema/*.test.* +diff --git a/tests/Makefile b/tests/Makefile +index a38f360..3d196aa 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -233,10 +233,10 @@ check-tests/test-qapi.py: tests/test-qapi.py + + .PHONY: $(patsubst %, check-%, $(check-qapi-schema-y)) + $(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json +- $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py <$^ >$*.out 2>$*.err; echo $$? >$*.exit, " TEST $*.out") +- @diff -q $(SRC_PATH)/$*.out $*.out +- @diff -q $(SRC_PATH)/$*.err $*.err +- @diff -q $(SRC_PATH)/$*.exit $*.exit ++ $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py <$^ >$*.test.out 2>$*.test.err; echo $$? >$*.test.exit, " TEST $*.out") ++ @diff -q $(SRC_PATH)/$*.out $*.test.out ++ @diff -q $(SRC_PATH)/$*.err $*.test.err ++ @diff -q $(SRC_PATH)/$*.exit $*.test.exit + + # Consolidated targets + +-- +1.7.11.7 + diff --git a/SOURCES/kvm-tests-QAPI-schema-parser-tests.patch b/SOURCES/kvm-tests-QAPI-schema-parser-tests.patch new file mode 100644 index 0000000..033c8d6 --- /dev/null +++ b/SOURCES/kvm-tests-QAPI-schema-parser-tests.patch @@ -0,0 +1,713 @@ +From 6a72b8101fdaa33464d6f82e7a7963e4aa135f41 Mon Sep 17 00:00:00 2001 +Message-Id: <6a72b8101fdaa33464d6f82e7a7963e4aa135f41.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:11 +0100 +Subject: [PATCH 11/21] tests: QAPI schema parser tests + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-9-git-send-email-armbru@redhat.com> +Patchwork-id: 56130 +O-Subject: [PATCH 7.0 qemu-kvm 08/18] tests: QAPI schema parser tests +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +The parser handles erroneous input badly. To be improved shortly. + +Signed-off-by: Markus Armbruster +Message-id: 1374939721-7876-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 98626572f18ddc61c08588c32a1773bc91f8624e) +--- + configure | 2 +- + tests/Makefile | 24 ++++++++++++++++++++++-- + tests/qapi-schema/comments.err | 0 + tests/qapi-schema/comments.exit | 1 + + tests/qapi-schema/comments.json | 4 ++++ + tests/qapi-schema/comments.out | 3 +++ + tests/qapi-schema/empty.err | 0 + tests/qapi-schema/empty.exit | 1 + + tests/qapi-schema/empty.json | 0 + tests/qapi-schema/empty.out | 3 +++ + tests/qapi-schema/funny-char.err | 0 + tests/qapi-schema/funny-char.exit | 1 + + tests/qapi-schema/funny-char.json | 2 ++ + tests/qapi-schema/funny-char.out | 3 +++ + tests/qapi-schema/indented-expr.err | 0 + tests/qapi-schema/indented-expr.exit | 1 + + tests/qapi-schema/indented-expr.json | 2 ++ + tests/qapi-schema/indented-expr.out | 3 +++ + tests/qapi-schema/missing-colon.err | 0 + tests/qapi-schema/missing-colon.exit | 1 + + tests/qapi-schema/missing-colon.json | 2 ++ + tests/qapi-schema/missing-colon.out | 3 +++ + tests/qapi-schema/missing-comma-list.err | 0 + tests/qapi-schema/missing-comma-list.exit | 1 + + tests/qapi-schema/missing-comma-list.json | 2 ++ + tests/qapi-schema/missing-comma-list.out | 3 +++ + tests/qapi-schema/missing-comma-object.err | 0 + tests/qapi-schema/missing-comma-object.exit | 1 + + tests/qapi-schema/missing-comma-object.json | 2 ++ + tests/qapi-schema/missing-comma-object.out | 3 +++ + tests/qapi-schema/non-objects.err | 1 + + tests/qapi-schema/non-objects.exit | 1 + + tests/qapi-schema/non-objects.json | 2 ++ + tests/qapi-schema/non-objects.out | 0 + tests/qapi-schema/quoted-structural-chars.err | 0 + tests/qapi-schema/quoted-structural-chars.exit | 1 + + tests/qapi-schema/quoted-structural-chars.json | 1 + + tests/qapi-schema/quoted-structural-chars.out | 3 +++ + tests/qapi-schema/test-qapi.py | 25 +++++++++++++++++++++++++ + tests/qapi-schema/trailing-comma-list.err | 0 + tests/qapi-schema/trailing-comma-list.exit | 1 + + tests/qapi-schema/trailing-comma-list.json | 2 ++ + tests/qapi-schema/trailing-comma-list.out | 3 +++ + tests/qapi-schema/trailing-comma-object.err | 0 + tests/qapi-schema/trailing-comma-object.exit | 1 + + tests/qapi-schema/trailing-comma-object.json | 2 ++ + tests/qapi-schema/trailing-comma-object.out | 3 +++ + tests/qapi-schema/unclosed-list.err | 1 + + tests/qapi-schema/unclosed-list.exit | 1 + + tests/qapi-schema/unclosed-list.json | 1 + + tests/qapi-schema/unclosed-list.out | 0 + tests/qapi-schema/unclosed-object.err | 1 + + tests/qapi-schema/unclosed-object.exit | 1 + + tests/qapi-schema/unclosed-object.json | 1 + + tests/qapi-schema/unclosed-object.out | 0 + tests/qapi-schema/unclosed-string.err | 1 + + tests/qapi-schema/unclosed-string.exit | 1 + + tests/qapi-schema/unclosed-string.json | 2 ++ + tests/qapi-schema/unclosed-string.out | 0 + 59 files changed, 121 insertions(+), 3 deletions(-) + create mode 100644 tests/qapi-schema/comments.err + create mode 100644 tests/qapi-schema/comments.exit + create mode 100644 tests/qapi-schema/comments.json + create mode 100644 tests/qapi-schema/comments.out + create mode 100644 tests/qapi-schema/empty.err + create mode 100644 tests/qapi-schema/empty.exit + create mode 100644 tests/qapi-schema/empty.json + create mode 100644 tests/qapi-schema/empty.out + create mode 100644 tests/qapi-schema/funny-char.err + create mode 100644 tests/qapi-schema/funny-char.exit + create mode 100644 tests/qapi-schema/funny-char.json + create mode 100644 tests/qapi-schema/funny-char.out + create mode 100644 tests/qapi-schema/indented-expr.err + create mode 100644 tests/qapi-schema/indented-expr.exit + create mode 100644 tests/qapi-schema/indented-expr.json + create mode 100644 tests/qapi-schema/indented-expr.out + create mode 100644 tests/qapi-schema/missing-colon.err + create mode 100644 tests/qapi-schema/missing-colon.exit + create mode 100644 tests/qapi-schema/missing-colon.json + create mode 100644 tests/qapi-schema/missing-colon.out + create mode 100644 tests/qapi-schema/missing-comma-list.err + create mode 100644 tests/qapi-schema/missing-comma-list.exit + create mode 100644 tests/qapi-schema/missing-comma-list.json + create mode 100644 tests/qapi-schema/missing-comma-list.out + create mode 100644 tests/qapi-schema/missing-comma-object.err + create mode 100644 tests/qapi-schema/missing-comma-object.exit + create mode 100644 tests/qapi-schema/missing-comma-object.json + create mode 100644 tests/qapi-schema/missing-comma-object.out + create mode 100644 tests/qapi-schema/non-objects.err + create mode 100644 tests/qapi-schema/non-objects.exit + create mode 100644 tests/qapi-schema/non-objects.json + create mode 100644 tests/qapi-schema/non-objects.out + create mode 100644 tests/qapi-schema/quoted-structural-chars.err + create mode 100644 tests/qapi-schema/quoted-structural-chars.exit + create mode 100644 tests/qapi-schema/quoted-structural-chars.json + create mode 100644 tests/qapi-schema/quoted-structural-chars.out + create mode 100644 tests/qapi-schema/test-qapi.py + create mode 100644 tests/qapi-schema/trailing-comma-list.err + create mode 100644 tests/qapi-schema/trailing-comma-list.exit + create mode 100644 tests/qapi-schema/trailing-comma-list.json + create mode 100644 tests/qapi-schema/trailing-comma-list.out + create mode 100644 tests/qapi-schema/trailing-comma-object.err + create mode 100644 tests/qapi-schema/trailing-comma-object.exit + create mode 100644 tests/qapi-schema/trailing-comma-object.json + create mode 100644 tests/qapi-schema/trailing-comma-object.out + create mode 100644 tests/qapi-schema/unclosed-list.err + create mode 100644 tests/qapi-schema/unclosed-list.exit + create mode 100644 tests/qapi-schema/unclosed-list.json + create mode 100644 tests/qapi-schema/unclosed-list.out + create mode 100644 tests/qapi-schema/unclosed-object.err + create mode 100644 tests/qapi-schema/unclosed-object.exit + create mode 100644 tests/qapi-schema/unclosed-object.json + create mode 100644 tests/qapi-schema/unclosed-object.out + create mode 100644 tests/qapi-schema/unclosed-string.err + create mode 100644 tests/qapi-schema/unclosed-string.exit + create mode 100644 tests/qapi-schema/unclosed-string.json + create mode 100644 tests/qapi-schema/unclosed-string.out + +diff --git a/tests/qapi-schema/unclosed-string.out b/tests/qapi-schema/unclosed-string.out +new file mode 100644 +index 0000000..e69de29 + +Signed-off-by: Michal Novotny +--- + configure | 2 +- + tests/Makefile | 24 ++++++++++++++++++++++-- + tests/qapi-schema/comments.exit | 1 + + tests/qapi-schema/comments.json | 4 ++++ + tests/qapi-schema/comments.out | 3 +++ + tests/qapi-schema/empty.exit | 1 + + tests/qapi-schema/empty.out | 3 +++ + tests/qapi-schema/funny-char.exit | 1 + + tests/qapi-schema/funny-char.json | 2 ++ + tests/qapi-schema/funny-char.out | 3 +++ + tests/qapi-schema/indented-expr.exit | 1 + + tests/qapi-schema/indented-expr.json | 2 ++ + tests/qapi-schema/indented-expr.out | 3 +++ + tests/qapi-schema/missing-colon.exit | 1 + + tests/qapi-schema/missing-colon.json | 2 ++ + tests/qapi-schema/missing-colon.out | 3 +++ + tests/qapi-schema/missing-comma-list.exit | 1 + + tests/qapi-schema/missing-comma-list.json | 2 ++ + tests/qapi-schema/missing-comma-list.out | 3 +++ + tests/qapi-schema/missing-comma-object.exit | 1 + + tests/qapi-schema/missing-comma-object.json | 2 ++ + tests/qapi-schema/missing-comma-object.out | 3 +++ + tests/qapi-schema/non-objects.err | 1 + + tests/qapi-schema/non-objects.exit | 1 + + tests/qapi-schema/non-objects.json | 2 ++ + tests/qapi-schema/quoted-structural-chars.exit | 1 + + tests/qapi-schema/quoted-structural-chars.json | 1 + + tests/qapi-schema/quoted-structural-chars.out | 3 +++ + tests/qapi-schema/test-qapi.py | 25 +++++++++++++++++++++++++ + tests/qapi-schema/trailing-comma-list.exit | 1 + + tests/qapi-schema/trailing-comma-list.json | 2 ++ + tests/qapi-schema/trailing-comma-list.out | 3 +++ + tests/qapi-schema/trailing-comma-object.exit | 1 + + tests/qapi-schema/trailing-comma-object.json | 2 ++ + tests/qapi-schema/trailing-comma-object.out | 3 +++ + tests/qapi-schema/unclosed-list.err | 1 + + tests/qapi-schema/unclosed-list.exit | 1 + + tests/qapi-schema/unclosed-list.json | 1 + + tests/qapi-schema/unclosed-object.err | 1 + + tests/qapi-schema/unclosed-object.exit | 1 + + tests/qapi-schema/unclosed-object.json | 1 + + tests/qapi-schema/unclosed-string.err | 1 + + tests/qapi-schema/unclosed-string.exit | 1 + + tests/qapi-schema/unclosed-string.json | 2 ++ + 44 files changed, 121 insertions(+), 3 deletions(-) + create mode 100644 tests/qapi-schema/comments.err + create mode 100644 tests/qapi-schema/comments.exit + create mode 100644 tests/qapi-schema/comments.json + create mode 100644 tests/qapi-schema/comments.out + create mode 100644 tests/qapi-schema/empty.err + create mode 100644 tests/qapi-schema/empty.exit + create mode 100644 tests/qapi-schema/empty.json + create mode 100644 tests/qapi-schema/empty.out + create mode 100644 tests/qapi-schema/funny-char.err + create mode 100644 tests/qapi-schema/funny-char.exit + create mode 100644 tests/qapi-schema/funny-char.json + create mode 100644 tests/qapi-schema/funny-char.out + create mode 100644 tests/qapi-schema/indented-expr.err + create mode 100644 tests/qapi-schema/indented-expr.exit + create mode 100644 tests/qapi-schema/indented-expr.json + create mode 100644 tests/qapi-schema/indented-expr.out + create mode 100644 tests/qapi-schema/missing-colon.err + create mode 100644 tests/qapi-schema/missing-colon.exit + create mode 100644 tests/qapi-schema/missing-colon.json + create mode 100644 tests/qapi-schema/missing-colon.out + create mode 100644 tests/qapi-schema/missing-comma-list.err + create mode 100644 tests/qapi-schema/missing-comma-list.exit + create mode 100644 tests/qapi-schema/missing-comma-list.json + create mode 100644 tests/qapi-schema/missing-comma-list.out + create mode 100644 tests/qapi-schema/missing-comma-object.err + create mode 100644 tests/qapi-schema/missing-comma-object.exit + create mode 100644 tests/qapi-schema/missing-comma-object.json + create mode 100644 tests/qapi-schema/missing-comma-object.out + create mode 100644 tests/qapi-schema/non-objects.err + create mode 100644 tests/qapi-schema/non-objects.exit + create mode 100644 tests/qapi-schema/non-objects.json + create mode 100644 tests/qapi-schema/non-objects.out + create mode 100644 tests/qapi-schema/quoted-structural-chars.err + create mode 100644 tests/qapi-schema/quoted-structural-chars.exit + create mode 100644 tests/qapi-schema/quoted-structural-chars.json + create mode 100644 tests/qapi-schema/quoted-structural-chars.out + create mode 100644 tests/qapi-schema/test-qapi.py + create mode 100644 tests/qapi-schema/trailing-comma-list.err + create mode 100644 tests/qapi-schema/trailing-comma-list.exit + create mode 100644 tests/qapi-schema/trailing-comma-list.json + create mode 100644 tests/qapi-schema/trailing-comma-list.out + create mode 100644 tests/qapi-schema/trailing-comma-object.err + create mode 100644 tests/qapi-schema/trailing-comma-object.exit + create mode 100644 tests/qapi-schema/trailing-comma-object.json + create mode 100644 tests/qapi-schema/trailing-comma-object.out + create mode 100644 tests/qapi-schema/unclosed-list.err + create mode 100644 tests/qapi-schema/unclosed-list.exit + create mode 100644 tests/qapi-schema/unclosed-list.json + create mode 100644 tests/qapi-schema/unclosed-list.out + create mode 100644 tests/qapi-schema/unclosed-object.err + create mode 100644 tests/qapi-schema/unclosed-object.exit + create mode 100644 tests/qapi-schema/unclosed-object.json + create mode 100644 tests/qapi-schema/unclosed-object.out + create mode 100644 tests/qapi-schema/unclosed-string.err + create mode 100644 tests/qapi-schema/unclosed-string.exit + create mode 100644 tests/qapi-schema/unclosed-string.json + +diff --git a/configure b/configure +index f86793d..0a729ac 100755 +--- a/configure ++++ b/configure +@@ -4511,7 +4511,7 @@ if [ "$dtc_internal" = "yes" ]; then + fi + + # build tree in object directory in case the source is not in the current directory +-DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos" ++DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema" + DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" + DIRS="$DIRS roms/seabios roms/vgabios" + DIRS="$DIRS qapi-generated" +diff --git a/tests/Makefile b/tests/Makefile +index 2e9093e..e96982b 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -70,6 +70,14 @@ gcov-files-sparc64-y += hw/m48t59.c + check-qtest-arm-y = tests/tmp105-test$(EXESUF) + gcov-files-arm-y += hw/tmp105.c + ++check-qapi-schema-y := $(addprefix tests/qapi-schema/, \ ++ comments.json empty.json funny-char.json indented-expr.json \ ++ missing-colon.json missing-comma-list.json \ ++ missing-comma-object.json non-objects.json \ ++ quoted-structural-chars.json \ ++ trailing-comma-list.json trailing-comma-object.json \ ++ unclosed-list.json unclosed-object.json unclosed-string.json) ++ + GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h tests/test-qmp-commands.h + + test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \ +@@ -157,6 +165,7 @@ check-help: + @echo " make check-qtest-TARGET Run qtest tests for given target" + @echo " make check-qtest Run qtest tests" + @echo " make check-unit Run qobject tests" ++ @echo " make check-qapi-schema Run QAPI schema tests" + @echo " make check-block Run block tests" + @echo " make check-report.html Generates an HTML test report" + @echo +@@ -219,12 +228,23 @@ check-report.html: check-report.xml + check-tests/qemu-iotests-quick.sh: tests/qemu-iotests-quick.sh qemu-img$(EXESUF) qemu-io$(EXESUF) + $< + ++.PHONY: check-tests/test-qapi.py ++check-tests/test-qapi.py: tests/test-qapi.py ++ ++.PHONY: $(patsubst %, check-%, $(check-qapi-schema-y)) ++$(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json ++ $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py <$^ >$*.out 2>$*.err; echo $$? >$*.exit, " TEST $*.out") ++ @diff -q $(SRC_PATH)/$*.out $*.out ++ @diff -q $(SRC_PATH)/$*.err $*.err ++ @diff -q $(SRC_PATH)/$*.exit $*.exit ++ + # Consolidated targets + +-.PHONY: check-qtest check-unit check ++.PHONY: check-qapi-schema check-qtest check-unit check ++check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y)) + check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS)) + check-unit: $(patsubst %,check-%, $(check-unit-y)) + check-block: $(patsubst %,check-%, $(check-block-y)) +-check: check-unit check-qtest ++check: check-qapi-schema check-unit check-qtest + + -include $(wildcard tests/*.d) +diff --git a/tests/qapi-schema/comments.err b/tests/qapi-schema/comments.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/comments.exit b/tests/qapi-schema/comments.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/comments.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/comments.json b/tests/qapi-schema/comments.json +new file mode 100644 +index 0000000..e643f3a +--- /dev/null ++++ b/tests/qapi-schema/comments.json +@@ -0,0 +1,4 @@ ++# Unindented comment ++{ 'enum': 'Status', # Comment to the right of code ++ # Indented comment ++ 'data': [ 'good', 'bad', 'ugly' ] } +diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out +new file mode 100644 +index 0000000..e3bd904 +--- /dev/null ++++ b/tests/qapi-schema/comments.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +diff --git a/tests/qapi-schema/empty.err b/tests/qapi-schema/empty.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/empty.exit b/tests/qapi-schema/empty.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/empty.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/empty.json b/tests/qapi-schema/empty.json +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/empty.out b/tests/qapi-schema/empty.out +new file mode 100644 +index 0000000..b7f89a4 +--- /dev/null ++++ b/tests/qapi-schema/empty.out +@@ -0,0 +1,3 @@ ++[] ++[] ++[] +diff --git a/tests/qapi-schema/funny-char.err b/tests/qapi-schema/funny-char.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/funny-char.exit b/tests/qapi-schema/funny-char.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/funny-char.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/funny-char.json b/tests/qapi-schema/funny-char.json +new file mode 100644 +index 0000000..d4973a2 +--- /dev/null ++++ b/tests/qapi-schema/funny-char.json +@@ -0,0 +1,2 @@ ++{ 'enum': 'Status', ++ 'data': [ 'good', 'bad', 'ugly' ]; } +diff --git a/tests/qapi-schema/funny-char.out b/tests/qapi-schema/funny-char.out +new file mode 100644 +index 0000000..e3bd904 +--- /dev/null ++++ b/tests/qapi-schema/funny-char.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +diff --git a/tests/qapi-schema/indented-expr.err b/tests/qapi-schema/indented-expr.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/indented-expr.exit b/tests/qapi-schema/indented-expr.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/indented-expr.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/indented-expr.json b/tests/qapi-schema/indented-expr.json +new file mode 100644 +index 0000000..d80af60 +--- /dev/null ++++ b/tests/qapi-schema/indented-expr.json +@@ -0,0 +1,2 @@ ++{ 'id' : 'eins' } ++ { 'id' : 'zwei' } +diff --git a/tests/qapi-schema/indented-expr.out b/tests/qapi-schema/indented-expr.out +new file mode 100644 +index 0000000..98ae692 +--- /dev/null ++++ b/tests/qapi-schema/indented-expr.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('id', 'eins')])] ++[] ++[] +diff --git a/tests/qapi-schema/missing-colon.err b/tests/qapi-schema/missing-colon.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/missing-colon.exit b/tests/qapi-schema/missing-colon.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/missing-colon.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/missing-colon.json b/tests/qapi-schema/missing-colon.json +new file mode 100644 +index 0000000..6fc27ce +--- /dev/null ++++ b/tests/qapi-schema/missing-colon.json +@@ -0,0 +1,2 @@ ++{ 'enum' 'Status', ++ 'data': [ 'good', 'bad', 'ugly' ] } +diff --git a/tests/qapi-schema/missing-colon.out b/tests/qapi-schema/missing-colon.out +new file mode 100644 +index 0000000..50f827e +--- /dev/null ++++ b/tests/qapi-schema/missing-colon.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', ','), ('data', ['good', 'bad', 'ugly'])])] ++[','] ++[] +diff --git a/tests/qapi-schema/missing-comma-list.err b/tests/qapi-schema/missing-comma-list.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/missing-comma-list.exit b/tests/qapi-schema/missing-comma-list.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/missing-comma-list.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/missing-comma-list.json b/tests/qapi-schema/missing-comma-list.json +new file mode 100644 +index 0000000..1af39b2 +--- /dev/null ++++ b/tests/qapi-schema/missing-comma-list.json +@@ -0,0 +1,2 @@ ++{ 'enum': 'Status', ++ 'data': [ 'good' 'bad', 'ugly' ] } +diff --git a/tests/qapi-schema/missing-comma-list.out b/tests/qapi-schema/missing-comma-list.out +new file mode 100644 +index 0000000..e3bd904 +--- /dev/null ++++ b/tests/qapi-schema/missing-comma-list.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +diff --git a/tests/qapi-schema/missing-comma-object.err b/tests/qapi-schema/missing-comma-object.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/missing-comma-object.exit b/tests/qapi-schema/missing-comma-object.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/missing-comma-object.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/missing-comma-object.json b/tests/qapi-schema/missing-comma-object.json +new file mode 100644 +index 0000000..50f5178 +--- /dev/null ++++ b/tests/qapi-schema/missing-comma-object.json +@@ -0,0 +1,2 @@ ++{ 'enum': 'Status' ++ 'data': [ 'good', 'bad', 'ugly' ] } +diff --git a/tests/qapi-schema/missing-comma-object.out b/tests/qapi-schema/missing-comma-object.out +new file mode 100644 +index 0000000..e3bd904 +--- /dev/null ++++ b/tests/qapi-schema/missing-comma-object.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +diff --git a/tests/qapi-schema/non-objects.err b/tests/qapi-schema/non-objects.err +new file mode 100644 +index 0000000..48c849d +--- /dev/null ++++ b/tests/qapi-schema/non-objects.err +@@ -0,0 +1 @@ ++Crashed: +diff --git a/tests/qapi-schema/non-objects.exit b/tests/qapi-schema/non-objects.exit +new file mode 100644 +index 0000000..d00491f +--- /dev/null ++++ b/tests/qapi-schema/non-objects.exit +@@ -0,0 +1 @@ ++1 +diff --git a/tests/qapi-schema/non-objects.json b/tests/qapi-schema/non-objects.json +new file mode 100644 +index 0000000..f3fa851 +--- /dev/null ++++ b/tests/qapi-schema/non-objects.json +@@ -0,0 +1,2 @@ ++'string' ++[ ] +diff --git a/tests/qapi-schema/non-objects.out b/tests/qapi-schema/non-objects.out +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/quoted-structural-chars.err b/tests/qapi-schema/quoted-structural-chars.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/quoted-structural-chars.exit b/tests/qapi-schema/quoted-structural-chars.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/quoted-structural-chars.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/quoted-structural-chars.json b/tests/qapi-schema/quoted-structural-chars.json +new file mode 100644 +index 0000000..9fe657a +--- /dev/null ++++ b/tests/qapi-schema/quoted-structural-chars.json +@@ -0,0 +1 @@ ++'{' 'key1' ':' 'value1' ',' 'key2' ':' '[' ']' '}' +diff --git a/tests/qapi-schema/quoted-structural-chars.out b/tests/qapi-schema/quoted-structural-chars.out +new file mode 100644 +index 0000000..85405be +--- /dev/null ++++ b/tests/qapi-schema/quoted-structural-chars.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('key1', 'value1'), ('key2', [])])] ++[] ++[] +diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py +new file mode 100644 +index 0000000..3280eff +--- /dev/null ++++ b/tests/qapi-schema/test-qapi.py +@@ -0,0 +1,25 @@ ++# ++# QAPI parser test harness ++# ++# Copyright (c) 2013 Red Hat Inc. ++# ++# Authors: ++# Markus Armbruster ++# ++# This work is licensed under the terms of the GNU GPL, version 2 or later. ++# See the COPYING file in the top-level directory. ++# ++ ++from qapi import * ++from pprint import pprint ++import sys ++ ++try: ++ exprs = parse_schema(sys.stdin) ++except: ++ print >>sys.stderr, "Crashed:", sys.exc_info()[0] ++ exit(1) ++ ++pprint(exprs) ++pprint(enum_types) ++pprint(struct_types) +diff --git a/tests/qapi-schema/trailing-comma-list.err b/tests/qapi-schema/trailing-comma-list.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/trailing-comma-list.exit b/tests/qapi-schema/trailing-comma-list.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/trailing-comma-list.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/trailing-comma-list.json b/tests/qapi-schema/trailing-comma-list.json +new file mode 100644 +index 0000000..9b0c8bd +--- /dev/null ++++ b/tests/qapi-schema/trailing-comma-list.json +@@ -0,0 +1,2 @@ ++{ 'enum': 'Status', ++ 'data': [ 'good', 'bad', 'ugly', ] } +diff --git a/tests/qapi-schema/trailing-comma-list.out b/tests/qapi-schema/trailing-comma-list.out +new file mode 100644 +index 0000000..e3bd904 +--- /dev/null ++++ b/tests/qapi-schema/trailing-comma-list.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +diff --git a/tests/qapi-schema/trailing-comma-object.err b/tests/qapi-schema/trailing-comma-object.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/trailing-comma-object.exit b/tests/qapi-schema/trailing-comma-object.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/trailing-comma-object.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/trailing-comma-object.json b/tests/qapi-schema/trailing-comma-object.json +new file mode 100644 +index 0000000..bbaea55 +--- /dev/null ++++ b/tests/qapi-schema/trailing-comma-object.json +@@ -0,0 +1,2 @@ ++{ 'enum': 'Status', ++ 'data': [ 'good', 'bad', 'ugly' ], } +diff --git a/tests/qapi-schema/trailing-comma-object.out b/tests/qapi-schema/trailing-comma-object.out +new file mode 100644 +index 0000000..e3bd904 +--- /dev/null ++++ b/tests/qapi-schema/trailing-comma-object.out +@@ -0,0 +1,3 @@ ++[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])] ++['Status'] ++[] +diff --git a/tests/qapi-schema/unclosed-list.err b/tests/qapi-schema/unclosed-list.err +new file mode 100644 +index 0000000..f9a9c2a +--- /dev/null ++++ b/tests/qapi-schema/unclosed-list.err +@@ -0,0 +1 @@ ++Crashed: +diff --git a/tests/qapi-schema/unclosed-list.exit b/tests/qapi-schema/unclosed-list.exit +new file mode 100644 +index 0000000..d00491f +--- /dev/null ++++ b/tests/qapi-schema/unclosed-list.exit +@@ -0,0 +1 @@ ++1 +diff --git a/tests/qapi-schema/unclosed-list.json b/tests/qapi-schema/unclosed-list.json +new file mode 100644 +index 0000000..e3e9566 +--- /dev/null ++++ b/tests/qapi-schema/unclosed-list.json +@@ -0,0 +1 @@ ++{ 'key': [ 'value' } +diff --git a/tests/qapi-schema/unclosed-list.out b/tests/qapi-schema/unclosed-list.out +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/unclosed-object.err b/tests/qapi-schema/unclosed-object.err +new file mode 100644 +index 0000000..f9a9c2a +--- /dev/null ++++ b/tests/qapi-schema/unclosed-object.err +@@ -0,0 +1 @@ ++Crashed: +diff --git a/tests/qapi-schema/unclosed-object.exit b/tests/qapi-schema/unclosed-object.exit +new file mode 100644 +index 0000000..d00491f +--- /dev/null ++++ b/tests/qapi-schema/unclosed-object.exit +@@ -0,0 +1 @@ ++1 +diff --git a/tests/qapi-schema/unclosed-object.json b/tests/qapi-schema/unclosed-object.json +new file mode 100644 +index 0000000..8ac069d +--- /dev/null ++++ b/tests/qapi-schema/unclosed-object.json +@@ -0,0 +1 @@ ++{ 'key': [ 'value' ] +diff --git a/tests/qapi-schema/unclosed-object.out b/tests/qapi-schema/unclosed-object.out +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/unclosed-string.err b/tests/qapi-schema/unclosed-string.err +new file mode 100644 +index 0000000..5af46c2 +--- /dev/null ++++ b/tests/qapi-schema/unclosed-string.err +@@ -0,0 +1 @@ ++Crashed: +diff --git a/tests/qapi-schema/unclosed-string.exit b/tests/qapi-schema/unclosed-string.exit +new file mode 100644 +index 0000000..d00491f +--- /dev/null ++++ b/tests/qapi-schema/unclosed-string.exit +@@ -0,0 +1 @@ ++1 +diff --git a/tests/qapi-schema/unclosed-string.json b/tests/qapi-schema/unclosed-string.json +new file mode 100644 +index 0000000..8c16b6b +--- /dev/null ++++ b/tests/qapi-schema/unclosed-string.json +@@ -0,0 +1,2 @@ ++{ 'text': 'lorem ips ++} +-- +1.7.11.7 + diff --git a/SOURCES/kvm-tests-Use-qapi-schema-test.json-as-schema-parser-tes.patch b/SOURCES/kvm-tests-Use-qapi-schema-test.json-as-schema-parser-tes.patch new file mode 100644 index 0000000..8e38077 --- /dev/null +++ b/SOURCES/kvm-tests-Use-qapi-schema-test.json-as-schema-parser-tes.patch @@ -0,0 +1,119 @@ +From 1c4e0e685b539c2ee15d88922a88c9b9998ba8c1 Mon Sep 17 00:00:00 2001 +Message-Id: <1c4e0e685b539c2ee15d88922a88c9b9998ba8c1.1387369730.git.minovotn@redhat.com> +In-Reply-To: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +References: <091eecc4fa42754760dfff393dabcc2b444e9693.1387369730.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:29:12 +0100 +Subject: [PATCH 12/21] tests: Use qapi-schema-test.json as schema parser test + +RH-Author: Markus Armbruster +Message-id: <1386689361-30281-10-git-send-email-armbru@redhat.com> +Patchwork-id: 56137 +O-Subject: [PATCH 7.0 qemu-kvm 09/18] tests: Use qapi-schema-test.json as schema parser test +Bugzilla: 997915 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Kevin Wolf +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Message-id: 1374939721-7876-3-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 4f193e34c6c41abdd06c134e584312077def2bda) +--- + tests/Makefile | 8 ++++---- + tests/qapi-schema/qapi-schema-test.err | 0 + tests/qapi-schema/qapi-schema-test.exit | 1 + + .../qapi-schema/qapi-schema-test.json | 0 + tests/qapi-schema/qapi-schema-test.out | 19 +++++++++++++++++++ + 5 files changed, 24 insertions(+), 4 deletions(-) + create mode 100644 tests/qapi-schema/qapi-schema-test.err + create mode 100644 tests/qapi-schema/qapi-schema-test.exit + rename qapi-schema-test.json => tests/qapi-schema/qapi-schema-test.json (100%) + create mode 100644 tests/qapi-schema/qapi-schema-test.out + +diff --git a/qapi-schema-test.json b/tests/qapi-schema/qapi-schema-test.json +similarity index 100% +rename from qapi-schema-test.json +rename to tests/qapi-schema/qapi-schema-test.json + +Signed-off-by: Michal Novotny +--- + tests/Makefile | 8 ++++---- + tests/qapi-schema/qapi-schema-test.exit | 1 + + tests/qapi-schema/qapi-schema-test.out | 19 +++++++++++++++++++ + 3 files changed, 24 insertions(+), 4 deletions(-) + create mode 100644 tests/qapi-schema/qapi-schema-test.err + create mode 100644 tests/qapi-schema/qapi-schema-test.exit + create mode 100644 tests/qapi-schema/qapi-schema-test.out + +diff --git a/tests/Makefile b/tests/Makefile +index e96982b..a38f360 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -74,7 +74,7 @@ check-qapi-schema-y := $(addprefix tests/qapi-schema/, \ + comments.json empty.json funny-char.json indented-expr.json \ + missing-colon.json missing-comma-list.json \ + missing-comma-object.json non-objects.json \ +- quoted-structural-chars.json \ ++ qapi-schema-test.json quoted-structural-chars.json \ + trailing-comma-list.json trailing-comma-object.json \ + unclosed-list.json unclosed-object.json unclosed-string.json) + +@@ -111,13 +111,13 @@ tests/test-xbzrle$(EXESUF): tests/test-xbzrle.o xbzrle.o page_cache.o libqemuuti + tests/test-cutils$(EXESUF): tests/test-cutils.o util/cutils.o + + tests/test-qapi-types.c tests/test-qapi-types.h :\ +-$(SRC_PATH)/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-types.py ++$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-types.py + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py $(gen-out-type) -o tests -p "test-" < $<, " GEN $@") + tests/test-qapi-visit.c tests/test-qapi-visit.h :\ +-$(SRC_PATH)/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-visit.py ++$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-visit.py + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py $(gen-out-type) -o tests -p "test-" < $<, " GEN $@") + tests/test-qmp-commands.h tests/test-qmp-marshal.c :\ +-$(SRC_PATH)/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-commands.py ++$(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-commands.py + $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -o tests -p "test-" < $<, " GEN $@") + + tests/test-string-output-visitor$(EXESUF): tests/test-string-output-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a +diff --git a/tests/qapi-schema/qapi-schema-test.err b/tests/qapi-schema/qapi-schema-test.err +new file mode 100644 +index 0000000..e69de29 +diff --git a/tests/qapi-schema/qapi-schema-test.exit b/tests/qapi-schema/qapi-schema-test.exit +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tests/qapi-schema/qapi-schema-test.exit +@@ -0,0 +1 @@ ++0 +diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out +new file mode 100644 +index 0000000..fb00344 +--- /dev/null ++++ b/tests/qapi-schema/qapi-schema-test.out +@@ -0,0 +1,19 @@ ++[OrderedDict([('enum', 'EnumOne'), ('data', ['value1', 'value2', 'value3'])]), ++ OrderedDict([('type', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]), ++ OrderedDict([('type', 'UserDefOne'), ('data', OrderedDict([('integer', 'int'), ('string', 'str'), ('*enum1', 'EnumOne')]))]), ++ OrderedDict([('type', 'UserDefTwo'), ('data', OrderedDict([('string', 'str'), ('dict', OrderedDict([('string', 'str'), ('dict', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')])), ('*dict2', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')]))]))]))]), ++ OrderedDict([('type', 'UserDefNested'), ('data', OrderedDict([('string0', 'str'), ('dict1', OrderedDict([('string1', 'str'), ('dict2', OrderedDict([('userdef1', 'UserDefOne'), ('string2', 'str')])), ('*dict3', OrderedDict([('userdef2', 'UserDefOne'), ('string3', 'str')]))]))]))]), ++ OrderedDict([('type', 'UserDefA'), ('data', OrderedDict([('boolean', 'bool')]))]), ++ OrderedDict([('type', 'UserDefB'), ('data', OrderedDict([('integer', 'int')]))]), ++ OrderedDict([('union', 'UserDefUnion'), ('data', OrderedDict([('a', 'UserDefA'), ('b', 'UserDefB')]))]), ++ OrderedDict([('union', 'UserDefNativeListUnion'), ('data', OrderedDict([('integer', ['int']), ('s8', ['int8']), ('s16', ['int16']), ('s32', ['int32']), ('s64', ['int64']), ('u8', ['uint8']), ('u16', ['uint16']), ('u32', ['uint32']), ('u64', ['uint64']), ('number', ['number']), ('boolean', ['bool']), ('string', ['str'])]))]), ++ OrderedDict([('command', 'user_def_cmd'), ('data', OrderedDict())]), ++ OrderedDict([('command', 'user_def_cmd1'), ('data', OrderedDict([('ud1a', 'UserDefOne')]))]), ++ OrderedDict([('command', 'user_def_cmd2'), ('data', OrderedDict([('ud1a', 'UserDefOne'), ('ud1b', 'UserDefOne')])), ('returns', 'UserDefTwo')])] ++['EnumOne', 'UserDefUnionKind', 'UserDefNativeListUnionKind'] ++[OrderedDict([('type', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]), ++ OrderedDict([('type', 'UserDefOne'), ('data', OrderedDict([('integer', 'int'), ('string', 'str'), ('*enum1', 'EnumOne')]))]), ++ OrderedDict([('type', 'UserDefTwo'), ('data', OrderedDict([('string', 'str'), ('dict', OrderedDict([('string', 'str'), ('dict', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')])), ('*dict2', OrderedDict([('userdef', 'UserDefOne'), ('string', 'str')]))]))]))]), ++ OrderedDict([('type', 'UserDefNested'), ('data', OrderedDict([('string0', 'str'), ('dict1', OrderedDict([('string1', 'str'), ('dict2', OrderedDict([('userdef1', 'UserDefOne'), ('string2', 'str')])), ('*dict3', OrderedDict([('userdef2', 'UserDefOne'), ('string3', 'str')]))]))]))]), ++ OrderedDict([('type', 'UserDefA'), ('data', OrderedDict([('boolean', 'bool')]))]), ++ OrderedDict([('type', 'UserDefB'), ('data', OrderedDict([('integer', 'int')]))])] +-- +1.7.11.7 + diff --git a/SOURCES/kvm-tests-set-MALLOC_PERTURB_-to-expose-memory-bugs.patch b/SOURCES/kvm-tests-set-MALLOC_PERTURB_-to-expose-memory-bugs.patch new file mode 100644 index 0000000..9463544 --- /dev/null +++ b/SOURCES/kvm-tests-set-MALLOC_PERTURB_-to-expose-memory-bugs.patch @@ -0,0 +1,79 @@ +From 5178597af3139c1ce9ac95971729468eda5625d7 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 27 May 2013 15:28:51 +0200 +Subject: [PATCH 34/38] tests: set MALLOC_PERTURB_ to expose memory bugs + +Message-id: <1379499002-5231-3-git-send-email-mreitz@redhat.com> +Patchwork-id: 54433 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/6] tests: set MALLOC_PERTURB_ to expose memory bugs +Bugzilla: 1006959 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +BZ: 1006959 + +glibc wipes malloc(3) memory when the MALLOC_PERTURB_ environment +variable is set. The value of the environment variable determines the +bit pattern used to wipe memory. For more information, see +http://udrepper.livejournal.com/11429.html. + +Set MALLOC_PERTURB_ for gtester and qemu-iotests. Note we pick a random +value from 1 to 255 to expose more bugs. If you need to reproduce a +crash use 'show environment' in gdb to extract the MALLOC_PERTURB_ +value from a core dump. + +Both make check and qemu-iotests pass with MALLOC_PERTURB_ enabled. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Eric Blake +Message-id: 1369661331-28041-1-git-send-email-stefanha@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 04129606170ec9011d4952b4f22c368679bedbf9) + +Signed-off-by: Max Reitz +--- + tests/Makefile | 5 ++++- + tests/qemu-iotests/check | 3 ++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/tests/Makefile b/tests/Makefile +index a307d5a..c107489 100644 +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -171,6 +171,7 @@ GCOV_OPTIONS = -n $(if $(V),-f,) + $(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y) + $(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,) + $(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \ ++ MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \ + gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y),"GTESTER $@") + $(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y); do \ + echo Gcov report for $$f:;\ +@@ -180,7 +181,9 @@ $(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y) + .PHONY: $(patsubst %, check-%, $(check-unit-y)) + $(patsubst %, check-%, $(check-unit-y)): check-%: % + $(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,) +- $(call quiet-command,gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*") ++ $(call quiet-command, \ ++ MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \ ++ gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*") + $(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y); do \ + echo Gcov report for $$f:;\ + $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \ +diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check +index 432732c..74628ae 100755 +--- a/tests/qemu-iotests/check ++++ b/tests/qemu-iotests/check +@@ -214,7 +214,8 @@ do + start=`_wallclock` + $timestamp && echo -n " ["`date "+%T"`"]" + [ ! -x $seq ] && chmod u+x $seq # ensure we can run it +- ./$seq >$tmp.out 2>&1 ++ MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \ ++ ./$seq >$tmp.out 2>&1 + sts=$? + $timestamp && _timestamp + stop=`_wallclock` +-- +1.7.1 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-add-dump1-and-dump2-fil.patch b/SOURCES/kvm-tests-vmstate-static-checker-add-dump1-and-dump2-fil.patch new file mode 100644 index 0000000..8056d1b --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-add-dump1-and-dump2-fil.patch @@ -0,0 +1,2376 @@ +From a681849c8c4978c085fc8882fa750e00cf03492c Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:00 -0500 +Subject: [CHANGE 04/29] tests: vmstate static checker: add dump1 and dump2 + files +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <42a556722619e2344964639021fb55f882f30586.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59784 +O-Subject: [RHEL7.1 qemu-kvm PATCH 03/18] tests: vmstate static checker: add dump1 and dump2 files +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +These are stripped-down JSON data as obtained from the -dump-vmstate +option. The two files are identical in this commit, and will be +modified in the later commits to show what the script does with the +data. + +Signed-off-by: Amit Shah +Acked-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit a10413e4fc96f83ff60b3c57d7b805752a7fc492) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump1.json | 1163 ++++++++++++++++++++++++++ + tests/vmstate-static-checker-data/dump2.json | 1163 ++++++++++++++++++++++++++ + 2 files changed, 2326 insertions(+) + create mode 100644 tests/vmstate-static-checker-data/dump1.json + create mode 100644 tests/vmstate-static-checker-data/dump2.json + +diff --git a/tests/vmstate-static-checker-data/dump1.json b/tests/vmstate-static-checker-data/dump1.json +new file mode 100644 +index 0000000..44200fb +--- /dev/null ++++ b/tests/vmstate-static-checker-data/dump1.json +@@ -0,0 +1,1163 @@ ++{ ++ "vmschkmachine": { ++ "Name": "pc-i440fx-2.1" ++ }, ++ "fw_cfg": { ++ "Name": "fw_cfg", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "fw_cfg", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "cur_entry", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "cur_offset", ++ "version_id": 0, ++ "field_exists": true, ++ "size": 4 ++ }, ++ { ++ "field": "cur_offset", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ }, ++ "fusbh200-ehci-usb": { ++ "Name": "fusbh200-ehci-usb", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "ehci-sysbus", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "ehci", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 1880, ++ "Description": { ++ "name": "ehci-core", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "usbcmd", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbsts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbsts_pending", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbsts_frindex", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbintr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "frindex", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "ctrldssegment", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "periodiclistbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "asynclistaddr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "configflag", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[0]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[1]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[2]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[3]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[4]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[5]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "frame_timer", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "last_run_ns", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "async_stepdown", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "astate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "pstate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "a_fetch_addr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "p_fetch_addr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ } ++ ] ++ } ++ }, ++ "pci-serial-4x": { ++ "Name": "pci-serial-4x", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "pci-serial-multi", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 368, ++ "Description": { ++ "name": "serial", ++ "version_id": 3, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "divider", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "rbr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "ier", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "iir", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "lcr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "mcr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "lsr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "msr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "scr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "fcr_vmstate", ++ "version_id": 3, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "level", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ }, ++ "intel-hda-generic": { ++ "Name": "intel-hda-generic", ++ "version_id": 1, ++ "minimum_version_id": 0, ++ "Description": { ++ "name": "intel-hda", ++ "version_id": 1, ++ "minimum_version_id": 0, ++ "Fields": [ ++ { ++ "field": "pci", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "g_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "wake_en", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "state_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "int_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "int_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "wall_clk", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_rp", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_wp", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_size", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_wp", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_cnt", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_size", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "dp_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "dp_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "icw", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "irr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "ics", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "st", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 56, ++ "Description": { ++ "name": "intel-hda-stream", ++ "version_id": 1, ++ "minimum_version_id": 0, ++ "Fields": [ ++ { ++ "field": "ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "lpib", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "cbl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "lvi", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "fmt", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "bdlp_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "bdlp_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "rirb_count", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "wall_base_ns", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ } ++ ] ++ } ++ }, ++ "cfi.pflash01": { ++ "Name": "cfi.pflash01", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "pflash_cfi01", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "wcycle", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "cmd", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "counter", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ } ++ ] ++ } ++ }, ++ "megasas": { ++ "Name": "megasas", ++ "version_id": 0, ++ "minimum_version_id": 0, ++ "Description": { ++ "name": "megasas", ++ "version_id": 0, ++ "minimum_version_id": 0, ++ "Fields": [ ++ { ++ "field": "parent_obj", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "fw_state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "intr_mask", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "doorbell", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "reply_queue_pa", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "consumer_pa", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "producer_pa", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ } ++ ] ++ } ++ }, ++ "PIIX3-xen": { ++ "Name": "PIIX3-xen", ++ "version_id": 3, ++ "minimum_version_id": 2, ++ "Description": { ++ "name": "PIIX3", ++ "version_id": 3, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "pci_irq_levels_vmstate", ++ "version_id": 3, ++ "field_exists": false, ++ "size": 4 ++ } ++ ], ++ "Subsections": [ ++ { ++ "name": "PIIX3/rcr", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "rcr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ ] ++ } ++ }, ++ "tpci200": { ++ "Name": "tpci200", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "tpci200", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "big_endian", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "ctrl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "int_set", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ }, ++ "SUNW,fdtwo": { ++ "Name": "SUNW,fdtwo", ++ "version_id": 2, ++ "minimum_version_id": 2, ++ "Description": { ++ "name": "fdc", ++ "version_id": 2, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 360, ++ "Description": { ++ "name": "fdc", ++ "version_id": 2, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "sra", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "srb", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "dor_vmstate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "tdr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "dsr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "msr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status0", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status1", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status2", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "fifo", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "data_pos", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "data_len", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "data_state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "data_dir", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "eot", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "timer0", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "timer1", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "precomp_trk", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "lock", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "pwrd", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "num_floppies", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "drives", ++ "version_id": 1, ++ "field_exists": false, ++ "size": 40, ++ "Description": { ++ "name": "fdrive", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "head", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "track", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "sect", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ], ++ "Subsections": [ ++ { ++ "name": "fdrive/media_changed", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "media_changed", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ }, ++ { ++ "name": "fdrive/media_rate", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "media_rate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ ] ++ } ++ } ++ ] ++ } ++ } ++ ] ++ } ++ }, ++ "usb-kbd": { ++ "Name": "usb-kbd", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "usb-kbd", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4352, ++ "Description": { ++ "name": "USBDevice", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "addr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "remote_wakeup", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_len", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_index", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_buf", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "kbd.keycodes", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "head", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "n", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "kbd.modifiers", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "kbd.leds", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "kbd.key", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "kbd.keys", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "protocol", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "idle", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ } ++} +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +new file mode 100644 +index 0000000..44200fb +--- /dev/null ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -0,0 +1,1163 @@ ++{ ++ "vmschkmachine": { ++ "Name": "pc-i440fx-2.1" ++ }, ++ "fw_cfg": { ++ "Name": "fw_cfg", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "fw_cfg", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "cur_entry", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "cur_offset", ++ "version_id": 0, ++ "field_exists": true, ++ "size": 4 ++ }, ++ { ++ "field": "cur_offset", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ }, ++ "fusbh200-ehci-usb": { ++ "Name": "fusbh200-ehci-usb", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "ehci-sysbus", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "ehci", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 1880, ++ "Description": { ++ "name": "ehci-core", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "usbcmd", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbsts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbsts_pending", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbsts_frindex", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "usbintr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "frindex", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "ctrldssegment", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "periodiclistbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "asynclistaddr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "configflag", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[0]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[1]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[2]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[3]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[4]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "portsc[5]", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "frame_timer", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "last_run_ns", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "async_stepdown", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "astate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "pstate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "a_fetch_addr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "p_fetch_addr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ } ++ ] ++ } ++ }, ++ "pci-serial-4x": { ++ "Name": "pci-serial-4x", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "pci-serial-multi", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 368, ++ "Description": { ++ "name": "serial", ++ "version_id": 3, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "divider", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "rbr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "ier", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "iir", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "lcr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "mcr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "lsr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "msr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "scr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "fcr_vmstate", ++ "version_id": 3, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "level", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ }, ++ "intel-hda-generic": { ++ "Name": "intel-hda-generic", ++ "version_id": 1, ++ "minimum_version_id": 0, ++ "Description": { ++ "name": "intel-hda", ++ "version_id": 1, ++ "minimum_version_id": 0, ++ "Fields": [ ++ { ++ "field": "pci", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "g_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "wake_en", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "state_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "int_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "int_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "wall_clk", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_rp", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_wp", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "corb_size", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_wp", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_cnt", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_sts", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "rirb_size", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "dp_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "dp_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "icw", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "irr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "ics", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "st", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 56, ++ "Description": { ++ "name": "intel-hda-stream", ++ "version_id": 1, ++ "minimum_version_id": 0, ++ "Fields": [ ++ { ++ "field": "ctl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "lpib", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "cbl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "lvi", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "fmt", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "bdlp_lbase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "bdlp_ubase", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "rirb_count", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "wall_base_ns", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ } ++ ] ++ } ++ }, ++ "cfi.pflash01": { ++ "Name": "cfi.pflash01", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "pflash_cfi01", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "wcycle", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "cmd", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "counter", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ } ++ ] ++ } ++ }, ++ "megasas": { ++ "Name": "megasas", ++ "version_id": 0, ++ "minimum_version_id": 0, ++ "Description": { ++ "name": "megasas", ++ "version_id": 0, ++ "minimum_version_id": 0, ++ "Fields": [ ++ { ++ "field": "parent_obj", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "fw_state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "intr_mask", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "doorbell", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "reply_queue_pa", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "consumer_pa", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ }, ++ { ++ "field": "producer_pa", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 8 ++ } ++ ] ++ } ++ }, ++ "PIIX3-xen": { ++ "Name": "PIIX3-xen", ++ "version_id": 3, ++ "minimum_version_id": 2, ++ "Description": { ++ "name": "PIIX3", ++ "version_id": 3, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "pci_irq_levels_vmstate", ++ "version_id": 3, ++ "field_exists": false, ++ "size": 4 ++ } ++ ], ++ "Subsections": [ ++ { ++ "name": "PIIX3/rcr", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "rcr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ ] ++ } ++ }, ++ "tpci200": { ++ "Name": "tpci200", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "tpci200", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1944, ++ "Description": { ++ "name": "PCIDevice", ++ "version_id": 2, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "version_id", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 256 ++ }, ++ { ++ "field": "irq_state", ++ "version_id": 2, ++ "field_exists": false, ++ "size": 16 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "big_endian", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "ctrl", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "int_set", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ }, ++ "SUNW,fdtwo": { ++ "Name": "SUNW,fdtwo", ++ "version_id": 2, ++ "minimum_version_id": 2, ++ "Description": { ++ "name": "fdc", ++ "version_id": 2, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 360, ++ "Description": { ++ "name": "fdc", ++ "version_id": 2, ++ "minimum_version_id": 2, ++ "Fields": [ ++ { ++ "field": "sra", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "srb", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "dor_vmstate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "tdr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "dsr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "msr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status0", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status1", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "status2", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "fifo", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "data_pos", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "data_len", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "data_state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "data_dir", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "eot", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "timer0", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "timer1", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "precomp_trk", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "config", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "lock", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "pwrd", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "num_floppies", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "drives", ++ "version_id": 1, ++ "field_exists": false, ++ "size": 40, ++ "Description": { ++ "name": "fdrive", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "head", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "track", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "sect", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ], ++ "Subsections": [ ++ { ++ "name": "fdrive/media_changed", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "media_changed", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ }, ++ { ++ "name": "fdrive/media_rate", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "media_rate", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ ] ++ } ++ } ++ ] ++ } ++ } ++ ] ++ } ++ }, ++ "usb-kbd": { ++ "Name": "usb-kbd", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Description": { ++ "name": "usb-kbd", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "dev", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4352, ++ "Description": { ++ "name": "USBDevice", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "addr", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "remote_wakeup", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_state", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_len", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_index", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "setup_buf", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ }, ++ { ++ "field": "kbd.keycodes", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "head", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "n", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "kbd.modifiers", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "kbd.leds", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "kbd.key", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "kbd.keys", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "protocol", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "idle", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } ++ } ++} +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-add-size-mismatch-insid.patch b/SOURCES/kvm-tests-vmstate-static-checker-add-size-mismatch-insid.patch new file mode 100644 index 0000000..db2f886 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-add-size-mismatch-insid.patch @@ -0,0 +1,43 @@ +From 9c606e84ad6c69ac27a1f6d8ec7b077722d0a80a Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:15 -0500 +Subject: [CHANGE 19/29] tests: vmstate static checker: add size mismatch + inside substructure +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <88c2db2eee6f9327d274f61e63c4c05effc05e01.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59799 +O-Subject: [RHEL7.1 qemu-kvm PATCH 18/18] tests: vmstate static checker: add size mismatch inside substructure +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 38ef86b5a68a6553904ee89672417d7a61c5182e) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 45cccaf..75719f5 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -909,7 +909,7 @@ + "field": "kbd.keycodes", + "version_id": 0, + "field_exists": false, +- "size": 4 ++ "size": 2 + }, + { + "field": "head", +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-add-substructure-for-us.patch b/SOURCES/kvm-tests-vmstate-static-checker-add-substructure-for-us.patch new file mode 100644 index 0000000..655a4ae --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-add-substructure-for-us.patch @@ -0,0 +1,168 @@ +From a2686d53c032a75e66f3be389671c9f07359c53d Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:14 -0500 +Subject: [CHANGE 18/29] tests: vmstate static checker: add substructure for + usb-kbd for hid section +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59798 +O-Subject: [RHEL7.1 qemu-kvm PATCH 17/18] tests: vmstate static checker: add substructure for usb-kbd for hid section +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +This shows how the script deals with substructures added to vmstate +descriptions that don't change the on-wire format. + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit af3713f6b9eaef52ae0eef2f95c5df1987e8f0a4) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 115 +++++++++++++++------------ + 1 file changed, 64 insertions(+), 51 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index b5cb1aa..45cccaf 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -844,7 +844,7 @@ + "field": "dev", + "version_id": 0, + "field_exists": false, +- "size": 4352, ++ "size": 5832, + "Description": { + "name": "USBDevice", + "version_id": 1, +@@ -896,58 +896,71 @@ + } + }, + { +- "field": "kbd.keycodes", ++ "field": "hid", + "version_id": 0, + "field_exists": false, +- "size": 4 +- }, +- { +- "field": "head", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { +- "field": "n", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { +- "field": "kbd.modifiers", +- "version_id": 0, +- "field_exists": false, +- "size": 2 +- }, +- { +- "field": "kbd.leds", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "kbd.key", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "kbd.keys", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { +- "field": "protocol", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { +- "field": "idle", +- "version_id": 0, +- "field_exists": false, +- "size": 1 ++ "size": 312, ++ "Description": { ++ "name": "HIDKeyboardDevice", ++ "version_id": 1, ++ "minimum_version_id": 1, ++ "Fields": [ ++ { ++ "field": "kbd.keycodes", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "head", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "n", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "kbd.modifiers", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 2 ++ }, ++ { ++ "field": "kbd.leds", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "kbd.key", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ }, ++ { ++ "field": "kbd.keys", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "protocol", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 4 ++ }, ++ { ++ "field": "idle", ++ "version_id": 0, ++ "field_exists": false, ++ "size": 1 ++ } ++ ] ++ } + } + ] + } +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-add-version-error-in-ma.patch b/SOURCES/kvm-tests-vmstate-static-checker-add-version-error-in-ma.patch new file mode 100644 index 0000000..71ba732 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-add-version-error-in-ma.patch @@ -0,0 +1,43 @@ +From 5cea0da742284b2c1aea911a3e20860c42110d4d Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:02 -0500 +Subject: [CHANGE 06/29] tests: vmstate static checker: add version error in + main section +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59786 +O-Subject: [RHEL7.1 qemu-kvm PATCH 05/18] tests: vmstate static checker: add version error in main section +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Acked-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit a81d3fad87302e482c4a8009c3c7d3eca96527e0) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 0a8b81d..f405534 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -34,7 +34,7 @@ + }, + "fusbh200-ehci-usb": { + "Name": "fusbh200-ehci-usb", +- "version_id": 2, ++ "version_id": 1, + "minimum_version_id": 1, + "Description": { + "name": "ehci-sysbus", +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-change-description-name.patch b/SOURCES/kvm-tests-vmstate-static-checker-change-description-name.patch new file mode 100644 index 0000000..fae4852 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-change-description-name.patch @@ -0,0 +1,42 @@ +From fab8b4c62034a9987cee2601f49972e597cab50f Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:08 -0500 +Subject: [CHANGE 12/29] tests: vmstate static checker: change description name +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59792 +O-Subject: [RHEL7.1 qemu-kvm PATCH 11/18] tests: vmstate static checker: change description name +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 1d681c712af592287750fc9ac9f7f75005e7b039) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 34bfbf6..f69966d 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -749,7 +749,7 @@ + "version_id": 1, + "minimum_version_id": 1, + "Description": { +- "name": "tpci200", ++ "name": "tpci2002", + "version_id": 1, + "minimum_version_id": 1, + "Fields": [ +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-incompat-machine-types.patch b/SOURCES/kvm-tests-vmstate-static-checker-incompat-machine-types.patch new file mode 100644 index 0000000..db3375a --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-incompat-machine-types.patch @@ -0,0 +1,44 @@ +From 7cae700ac81f981cccc7da24bf0bafa5553c6814 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:01 -0500 +Subject: [CHANGE 05/29] tests: vmstate static checker: incompat machine types +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <2702cc4c7819182770b80f1e3b846163a7a7d9d5.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59785 +O-Subject: [RHEL7.1 qemu-kvm PATCH 04/18] tests: vmstate static checker: incompat machine types +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +This commit modifies the dump2 data to flag incompatibilities in the +machine types being compared. + +Signed-off-by: Amit Shah +Acked-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit bc178dc5630a243f95c9d3c2ee2329af09606f41) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 44200fb..0a8b81d 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -1,6 +1,6 @@ + { + "vmschkmachine": { +- "Name": "pc-i440fx-2.1" ++ "Name": "pc-i440fx-2.2" + }, + "fw_cfg": { + "Name": "fw_cfg", +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-minimum_version_id-chec.patch b/SOURCES/kvm-tests-vmstate-static-checker-minimum_version_id-chec.patch new file mode 100644 index 0000000..c3041f2 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-minimum_version_id-chec.patch @@ -0,0 +1,43 @@ +From 45d82bd7efc9c6f2f241b36b40f467ae07cf35d8 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:04 -0500 +Subject: [CHANGE 08/29] tests: vmstate static checker: minimum_version_id + check +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <5e344334e387d805ccfdeab313f70f06cfdcc57b.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59788 +O-Subject: [RHEL7.1 qemu-kvm PATCH 07/18] tests: vmstate static checker: minimum_version_id check +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 7daa3d76dff720465188867272682a4f8fcf6e82) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump1.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump1.json b/tests/vmstate-static-checker-data/dump1.json +index 44200fb..786ca0b 100644 +--- a/tests/vmstate-static-checker-data/dump1.json ++++ b/tests/vmstate-static-checker-data/dump1.json +@@ -698,7 +698,7 @@ + "minimum_version_id": 2, + "Description": { + "name": "PIIX3", +- "version_id": 3, ++ "version_id": 1, + "minimum_version_id": 2, + "Fields": [ + { +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-Description-insi.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-Description-insi.patch new file mode 100644 index 0000000..8217993 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-Description-insi.patch @@ -0,0 +1,68 @@ +From eaf817bf17f3413f9b4ecc8751bc7fce55af4d7a Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:11 -0500 +Subject: [CHANGE 15/29] tests: vmstate static checker: remove Description + inside Fields +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59795 +O-Subject: [RHEL7.1 qemu-kvm PATCH 14/18] tests: vmstate static checker: remove Description inside Fields +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit b5968f0ab399002cae2fddbc24c6a89cee90ebd3) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 27 +-------------------------- + 1 file changed, 1 insertion(+), 26 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 66ac3bd..05b8fce 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -212,32 +212,7 @@ + "field": "pci", + "version_id": 0, + "field_exists": false, +- "size": 1944, +- "Description": { +- "name": "PCIDevice", +- "version_id": 2, +- "minimum_version_id": 1, +- "Fields": [ +- { +- "field": "version_id", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { +- "field": "config", +- "version_id": 0, +- "field_exists": false, +- "size": 256 +- }, +- { +- "field": "irq_state", +- "version_id": 2, +- "field_exists": false, +- "size": 16 +- } +- ] +- } ++ "size": 1944 + }, + { + "field": "g_ctl", +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-Description.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-Description.patch new file mode 100644 index 0000000..3eae2ad --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-Description.patch @@ -0,0 +1,73 @@ +From 7e6a14b47a1a22dfd6b2eff2a761586706de71b6 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:10 -0500 +Subject: [CHANGE 14/29] tests: vmstate static checker: remove Description +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59794 +O-Subject: [RHEL7.1 qemu-kvm PATCH 13/18] tests: vmstate static checker: remove Description +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit ff29b8573f250148a567bfdc0ee7d077aa17b7f6) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 33 +--------------------------- + 1 file changed, 1 insertion(+), 32 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index cc0aae3..66ac3bd 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -462,38 +462,7 @@ + "cfi.pflash01": { + "Name": "cfi.pflash01", + "version_id": 1, +- "minimum_version_id": 1, +- "Description": { +- "name": "pflash_cfi01", +- "version_id": 1, +- "minimum_version_id": 1, +- "Fields": [ +- { +- "field": "wcycle", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "cmd", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "status", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "counter", +- "version_id": 0, +- "field_exists": false, +- "size": 8 +- } +- ] +- } ++ "minimum_version_id": 1 + }, + "megasas": { + "Name": "megasas", +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-Fields.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-Fields.patch new file mode 100644 index 0000000..c63bb38 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-Fields.patch @@ -0,0 +1,154 @@ +From ca933e260fc4d595e1cdeae545953873d68823d1 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:09 -0500 +Subject: [CHANGE 13/29] tests: vmstate static checker: remove Fields +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <69b371009d0ee46ec02502595e5bc4d273cc1b5c.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59793 +O-Subject: [RHEL7.1 qemu-kvm PATCH 12/18] tests: vmstate static checker: remove Fields +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 083bac3484e335130235ca0369e840a9ee766c4f) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 114 +-------------------------- + 1 file changed, 1 insertion(+), 113 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index f69966d..cc0aae3 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -196,119 +196,7 @@ + "Description": { + "name": "pci-serial-multi", + "version_id": 1, +- "minimum_version_id": 1, +- "Fields": [ +- { +- "field": "dev", +- "version_id": 0, +- "field_exists": false, +- "size": 1944, +- "Description": { +- "name": "PCIDevice", +- "version_id": 2, +- "minimum_version_id": 1, +- "Fields": [ +- { +- "field": "version_id", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { +- "field": "config", +- "version_id": 0, +- "field_exists": false, +- "size": 256 +- }, +- { +- "field": "irq_state", +- "version_id": 2, +- "field_exists": false, +- "size": 16 +- } +- ] +- } +- }, +- { +- "field": "state", +- "version_id": 0, +- "field_exists": false, +- "size": 368, +- "Description": { +- "name": "serial", +- "version_id": 3, +- "minimum_version_id": 2, +- "Fields": [ +- { +- "field": "divider", +- "version_id": 2, +- "field_exists": false, +- "size": 2 +- }, +- { +- "field": "rbr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "ier", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "iir", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "lcr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "mcr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "lsr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "msr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "scr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- }, +- { +- "field": "fcr_vmstate", +- "version_id": 3, +- "field_exists": false, +- "size": 1 +- } +- ] +- } +- }, +- { +- "field": "level", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- } +- ] ++ "minimum_version_id": 1 + } + }, + "intel-hda-generic": { +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-Subsections.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-Subsections.patch new file mode 100644 index 0000000..02f4156 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-Subsections.patch @@ -0,0 +1,55 @@ +From cee2b0f8cedc1308b9e215091ce75907d737406b Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:13 -0500 +Subject: [CHANGE 17/29] tests: vmstate static checker: remove Subsections +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <257ecb190461b9f6e3ab763896b6831cdbc4341e.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59797 +O-Subject: [RHEL7.1 qemu-kvm PATCH 16/18] tests: vmstate static checker: remove Subsections +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit c7173a9c182c9092de6be57490132a218c850675) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 15 --------------- + 1 file changed, 15 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 6f8a617..b5cb1aa 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -558,21 +558,6 @@ + "field_exists": false, + "size": 4 + } +- ], +- "Subsections": [ +- { +- "name": "PIIX3/rcr", +- "version_id": 1, +- "minimum_version_id": 1, +- "Fields": [ +- { +- "field": "rcr", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- } +- ] +- } + ] + } + }, +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-a-field.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-a-field.patch new file mode 100644 index 0000000..19cc0cc --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-a-field.patch @@ -0,0 +1,46 @@ +From fc38cd81546942d51dd29c8e9660523d2da7b044 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:06 -0500 +Subject: [CHANGE 10/29] tests: vmstate static checker: remove a field +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <074c895a3122131fd689795261464f5a28e3b8da.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59790 +O-Subject: [RHEL7.1 qemu-kvm PATCH 09/18] tests: vmstate static checker: remove a field +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 55e8e0e19c169ee83fd23436f348a948adf5d095) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 4ccfd67..f6b52d0 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -58,12 +58,6 @@ + "size": 4 + }, + { +- "field": "usbsts", +- "version_id": 0, +- "field_exists": false, +- "size": 4 +- }, +- { + "field": "usbsts_pending", + "version_id": 2, + "field_exists": false, +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-a-section.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-a-section.patch new file mode 100644 index 0000000..7a0c2c3 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-a-section.patch @@ -0,0 +1,42 @@ +From fb43164b1d88f51beb9a3b81e18a4327a29d518d Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:05 -0500 +Subject: [CHANGE 09/29] tests: vmstate static checker: remove a section +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <85af25c60c6546e4b4fef4176b5a5ac67088afe8.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59789 +O-Subject: [RHEL7.1 qemu-kvm PATCH 08/18] tests: vmstate static checker: remove a section +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit ab99bdbe33cd108f490d89ba92361c4197c5c56b) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 36a9b4b..4ccfd67 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -2,7 +2,7 @@ + "vmschkmachine": { + "Name": "pc-i440fx-2.2" + }, +- "fw_cfg": { ++ "fw_cfg2": { + "Name": "fw_cfg", + "version_id": 2, + "minimum_version_id": 1, +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-a-subsection.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-a-subsection.patch new file mode 100644 index 0000000..73676f5 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-a-subsection.patch @@ -0,0 +1,53 @@ +From fe9b5a30d04270d9639e3f5ce8a4338a4074e39f Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:12 -0500 +Subject: [CHANGE 16/29] tests: vmstate static checker: remove a subsection +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59796 +O-Subject: [RHEL7.1 qemu-kvm PATCH 15/18] tests: vmstate static checker: remove a subsection +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit aa2a12bb824170a0dae94f0d39bbd3b61add038f) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index 05b8fce..6f8a617 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -836,19 +836,6 @@ + "size": 1 + } + ] +- }, +- { +- "name": "fdrive/media_rate", +- "version_id": 1, +- "minimum_version_id": 1, +- "Fields": [ +- { +- "field": "media_rate", +- "version_id": 0, +- "field_exists": false, +- "size": 1 +- } +- ] + } + ] + } +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-remove-last-field-in-a-.patch b/SOURCES/kvm-tests-vmstate-static-checker-remove-last-field-in-a-.patch new file mode 100644 index 0000000..0787ab2 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-remove-last-field-in-a-.patch @@ -0,0 +1,47 @@ +From dbcb21d9f76dd057e78273de8720cb8092ba0315 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:07 -0500 +Subject: [CHANGE 11/29] tests: vmstate static checker: remove last field in a + struct +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59791 +O-Subject: [RHEL7.1 qemu-kvm PATCH 10/18] tests: vmstate static checker: remove last field in a struct +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Reviewed-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit fd52ffb9bfa3cb9adc4d7578209ec95eba47b45f) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index f6b52d0..34bfbf6 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -637,12 +637,6 @@ + "version_id": 0, + "field_exists": false, + "size": 256 +- }, +- { +- "field": "irq_state", +- "version_id": 2, +- "field_exists": false, +- "size": 16 + } + ] + } +-- +1.9.3 + diff --git a/SOURCES/kvm-tests-vmstate-static-checker-version-mismatch-inside.patch b/SOURCES/kvm-tests-vmstate-static-checker-version-mismatch-inside.patch new file mode 100644 index 0000000..89c82a2 --- /dev/null +++ b/SOURCES/kvm-tests-vmstate-static-checker-version-mismatch-inside.patch @@ -0,0 +1,43 @@ +From 25c8d00cf4d0ad9e464c44ae8564f8f78f8da119 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:09:03 -0500 +Subject: [CHANGE 07/29] tests: vmstate static checker: version mismatch inside + a Description +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: <42e1d8959484f1d5c4e085ec4b9516aba940c105.1405072585.git.amit.shah@redhat.com> +Patchwork-id: 59787 +O-Subject: [RHEL7.1 qemu-kvm PATCH 06/18] tests: vmstate static checker: version mismatch inside a Description +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +Signed-off-by: Amit Shah +Acked-by: Juan Quintela +Signed-off-by: Juan Quintela +(cherry picked from commit 4efa6e1d6473dbd775a5dd7eb976fa11501a94d2) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + tests/vmstate-static-checker-data/dump2.json | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json +index f405534..36a9b4b 100644 +--- a/tests/vmstate-static-checker-data/dump2.json ++++ b/tests/vmstate-static-checker-data/dump2.json +@@ -829,7 +829,7 @@ + "minimum_version_id": 2, + "Description": { + "name": "fdc", +- "version_id": 2, ++ "version_id": 1, + "minimum_version_id": 2, + "Fields": [ + { +-- +1.9.3 + diff --git a/SOURCES/kvm-trace-add-SystemTap-init-scripts-for-simpletrace-bri.patch b/SOURCES/kvm-trace-add-SystemTap-init-scripts-for-simpletrace-bri.patch new file mode 100644 index 0000000..f883a18 --- /dev/null +++ b/SOURCES/kvm-trace-add-SystemTap-init-scripts-for-simpletrace-bri.patch @@ -0,0 +1,107 @@ +From a8ebb2f69df031099116afebca2fb2a2cb3ec678 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:58 +0200 +Subject: [PATCH 40/43] trace: add SystemTap init scripts for simpletrace + bridge + +Message-id: <1412690820-31016-10-git-send-email-stefanha@redhat.com> +Patchwork-id: 61614 +O-Subject: [RHEL7.1 qemu-kvm PATCH 09/11] trace: add SystemTap init scripts for simpletrace bridge +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +Add example files for use with the systemtap-initscript package. These +example files set up the SystemTap flight recorder with our simpletrace +bridge script. In other words, they set up always-on simpletrace. + +The example file enables a small subset of trace events across all +qemu-kvm processes with 4MB per CPU trace buffers. This example +configuration may be useful to customers who wish to run with always-on +tracing. + +To enable it: + + # yum install systemtap-initscript + # cp /usr/share/qemu-kvm/systemtap/conf.d/qemu_kvm.conf /etc/systemtap/conf.d/ + # cp /usr/share/qemu-kvm/systemtap/script.d/qemu_kvm.stp /etc/systemtap/script.d/ + # service systemtap start qemu_kvm + +Note that due to systemtap-initscript naming restrictions the scripts +are called "qemu_kvm" instead of "qemu-kvm". + +Once installed the script will be activated on boot. + +Note that since gitignore(1) hides *.d we explicitly unhide +scripts/systemtap/{conf.d,script.d} in this patch. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3a83a60ee0fd25580499695e4781fc473de147c5) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + Makefile + redhat/qemu-kvm.spec.template + +This downstream commit from RHEL 6.6 was forwarded-ported to RHEL 7.1 +where the Makefile and qemu-kvm.spec.template are organized differently. +--- + .gitignore | 2 ++ + Makefile | 4 ++++ + redhat/qemu-kvm.spec.template | 4 +++- + scripts/systemtap/conf.d/qemu_kvm.conf | 4 ++++ + scripts/systemtap/script.d/qemu_kvm.stp | 1 + + 5 files changed, 14 insertions(+), 1 deletion(-) + create mode 100644 scripts/systemtap/conf.d/qemu_kvm.conf + create mode 100644 scripts/systemtap/script.d/qemu_kvm.stp + +diff --git a/.gitignore b/.gitignore +index 4f2345c..454561e 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -74,6 +74,8 @@ fsdev/virtfs-proxy-helper.pod + *.vr + *.d + !scripts/qemu-guest-agent/fsfreeze-hook.d ++!scripts/systemtap/script.d ++!scripts/systemtap/conf.d + *.o + *.lo + *.la +diff --git a/Makefile b/Makefile +index 1b0b4f7..8407945 100644 +--- a/Makefile ++++ b/Makefile +@@ -407,6 +407,10 @@ endif + $(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \ + done + $(INSTALL_DATA) $(SRC_PATH)/trace-events "$(DESTDIR)$(qemu_datadir)/trace-events" ++ $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/systemtap/script.d" ++ $(INSTALL_DATA) $(SRC_PATH)/scripts/systemtap/script.d/qemu_kvm.stp "$(DESTDIR)$(qemu_datadir)/systemtap/script.d/" ++ $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/systemtap/conf.d" ++ $(INSTALL_DATA) $(SRC_PATH)/scripts/systemtap/conf.d/qemu_kvm.conf "$(DESTDIR)$(qemu_datadir)/systemtap/conf.d/" + for d in $(TARGET_DIRS); do \ + $(MAKE) -C $$d $@ || exit 1 ; \ + done +diff --git a/scripts/systemtap/conf.d/qemu_kvm.conf b/scripts/systemtap/conf.d/qemu_kvm.conf +new file mode 100644 +index 0000000..372d816 +--- /dev/null ++++ b/scripts/systemtap/conf.d/qemu_kvm.conf +@@ -0,0 +1,4 @@ ++# Force load uprobes (see BZ#1118352) ++stap -e 'probe process("/usr/libexec/qemu-kvm").function("main") { printf("") }' -c true ++ ++qemu_kvm_OPT="-s4" # per-CPU buffer size, in megabytes +diff --git a/scripts/systemtap/script.d/qemu_kvm.stp b/scripts/systemtap/script.d/qemu_kvm.stp +new file mode 100644 +index 0000000..c04abf9 +--- /dev/null ++++ b/scripts/systemtap/script.d/qemu_kvm.stp +@@ -0,0 +1 @@ ++probe qemu.kvm.simpletrace.handle_qmp_command,qemu.kvm.simpletrace.monitor_protocol_*,qemu.kvm.simpletrace.migrate_set_state {} +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-add-pid-field-to-simpletrace-record.patch b/SOURCES/kvm-trace-add-pid-field-to-simpletrace-record.patch new file mode 100644 index 0000000..5003f3f --- /dev/null +++ b/SOURCES/kvm-trace-add-pid-field-to-simpletrace-record.patch @@ -0,0 +1,89 @@ +From af89b472e5fb4743a41cd7304ac831e777eadaa4 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:51 +0200 +Subject: [PATCH 33/43] trace: add pid field to simpletrace record + +Message-id: <1412690820-31016-3-git-send-email-stefanha@redhat.com> +Patchwork-id: 61607 +O-Subject: [RHEL7.1 qemu-kvm PATCH 02/11] trace: add pid field to simpletrace record +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +It is useful to know the QEMU process ID when working with traces from +multiple VMs. Although the trace filename may contain the pid, tools +that aggregate traces or even trace globally need somewhere to record +the pid. + +There is a reserved field in the trace event header struct that we can +use. + +It is not necessary to bump the simpletrace file format version number +because it has already been incremented for the QEMU 2.1 release cycle +in commit "trace: [simple] Bump up log version number". + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 26896cbf353e3017f76da8193074839b6e875250) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + trace/simple.c + +Downstream still has a g_thread_init() call in trace/simple.c so there +is a context conflict. Easy to resolve. +--- + trace/simple.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/trace/simple.c b/trace/simple.c +index 64e196a..479b7d2 100644 +--- a/trace/simple.c ++++ b/trace/simple.c +@@ -64,6 +64,7 @@ uint8_t trace_buf[TRACE_BUF_LEN]; + static volatile gint trace_idx; + static unsigned int writeout_idx; + static volatile gint dropped_events; ++static uint32_t trace_pid; + static FILE *trace_fp; + static char *trace_file_name; + +@@ -72,7 +73,7 @@ typedef struct { + uint64_t event; /* TraceEventID */ + uint64_t timestamp_ns; + uint32_t length; /* in bytes */ +- uint32_t reserved; /* unused */ ++ uint32_t pid; + uint64_t arguments[]; + } TraceRecord; + +@@ -180,7 +181,7 @@ static gpointer writeout_thread(gpointer opaque) + dropped.rec.event = DROPPED_EVENT_ID, + dropped.rec.timestamp_ns = get_clock(); + dropped.rec.length = sizeof(TraceRecord) + sizeof(uint64_t), +- dropped.rec.reserved = 0; ++ dropped.rec.pid = trace_pid; + do { + dropped_count = g_atomic_int_get(&dropped_events); + } while (!g_atomic_int_compare_and_exchange(&dropped_events, +@@ -239,6 +240,7 @@ int trace_record_start(TraceBufferRecord *rec, TraceEventID event, size_t datasi + rec_off = write_to_buffer(rec_off, &event_u64, sizeof(event_u64)); + rec_off = write_to_buffer(rec_off, ×tamp_ns, sizeof(timestamp_ns)); + rec_off = write_to_buffer(rec_off, &rec_len, sizeof(rec_len)); ++ rec_off = write_to_buffer(rec_off, &trace_pid, sizeof(trace_pid)); + + rec->tbuf_idx = idx; + rec->rec_off = (idx + sizeof(TraceRecord)) % TRACE_BUF_LEN; +@@ -413,6 +415,8 @@ bool trace_backend_init(const char *events, const char *file) + #endif + } + ++ trace_pid = getpid(); ++ + #if !GLIB_CHECK_VERSION(2, 31, 0) + trace_available_cond = g_cond_new(); + trace_empty_cond = g_cond_new(); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-add-qemu_system_powerdown_request-and-qemu_sys.patch b/SOURCES/kvm-trace-add-qemu_system_powerdown_request-and-qemu_sys.patch new file mode 100644 index 0000000..cace807 --- /dev/null +++ b/SOURCES/kvm-trace-add-qemu_system_powerdown_request-and-qemu_sys.patch @@ -0,0 +1,110 @@ +From 5e18df4d60ba22586ec4f4d80804ee8d4e41372e Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Thu, 23 Oct 2014 10:03:09 +0200 +Subject: [PATCH 01/16] trace: add qemu_system_powerdown_request and + qemu_system_shutdown_request trace events + +Message-id: <1414058589-12881-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 61833 +O-Subject: [RHEL7.2 qemu-kvm PATCH] trace: add qemu_system_powerdown_request and qemu_system_shutdown_request trace events +Bugzilla: 1155671 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Amos Kong +RH-Acked-by: Markus Armbruster + +From: Yang Zhiyong + +Bugzilla: 1155671 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=8153235 +Upstream: merged + +We have the experience that the guest doesn't stop successfully +though it was instructed to shut down. + +The root cause may be not in QEMU mostly. However, QEMU is often +suspected at the beginning just because the issue occurred in +virtualization environment. + +Therefore, we need to affirm that QEMU received the shutdown +request and raised ACPI irq from "virsh shutdown" command, +virt-manger or stopping QEMU process to the VM . +So that we can affirm the problems was belonged to the Guset OS +rather than the QEMU itself. + +When we stop guests by "virsh shutdown" command or virt-manger, +or stopping QEMU process, qemu_system_powerdown_request() or +qemu_system_shutdown_request() is called. Then the below functions +in main_loop_should_exit() of Vl.c are called roughly in the +following order. + + if (qemu_powerdown_requested()) + qemu_system_powerdown() + monitor_protocol_event(QEVENT_POWERDOWN, NULL) + + OR + + if(qemu_shutdown_requested()} + monitor_protocol_event(QEVENT_SHUTDOWN, NULL); + +The tracepoint of monitor_protocol_event() already exists, but no +tracepoints are defined for qemu_system_powerdown_request() and +qemu_system_shutdown_request(). So this patch adds two tracepoints for +the two functions. We believe that it will become much easier to +isolate the problem mentioned above by these tracepoints. + +Signed-off-by: Yang Zhiyong +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit bc78cff9757782501db15d39828e6af4186fe331) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + trace-events + +Context conflict, easy to resolve. +--- + trace-events | 2 ++ + vl.c | 2 ++ + 2 files changed, 4 insertions(+) +--- + trace-events | 2 ++ + vl.c | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/trace-events b/trace-events +index e7bb7e0..b43132c 100644 +--- a/trace-events ++++ b/trace-events +@@ -477,6 +477,8 @@ runstate_set(int new_state) "new state %d" + g_malloc(size_t size, void *ptr) "size %zu ptr %p" + g_realloc(void *ptr, size_t size, void *newptr) "ptr %p size %zu newptr %p" + g_free(void *ptr) "ptr %p" ++qemu_system_shutdown_request(void) "" ++qemu_system_powerdown_request(void) "" + + # block/qcow2.c + qcow2_writev_start_req(void *co, int64_t sector, int nb_sectors) "co %p sector %" PRIx64 " nb_sectors %d" +diff --git a/vl.c b/vl.c +index 2932d7c..2b3dc88 100644 +--- a/vl.c ++++ b/vl.c +@@ -1894,6 +1894,7 @@ void qemu_system_killed(int signal, pid_t pid) + + void qemu_system_shutdown_request(void) + { ++ trace_qemu_system_shutdown_request(); + shutdown_requested = 1; + qemu_notify_event(); + } +@@ -1906,6 +1907,7 @@ static void qemu_system_powerdown(void) + + void qemu_system_powerdown_request(void) + { ++ trace_qemu_system_powerdown_request(); + powerdown_requested = 1; + qemu_notify_event(); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-add-systemtap-initscript-README-file-to-RPM.patch b/SOURCES/kvm-trace-add-systemtap-initscript-README-file-to-RPM.patch new file mode 100644 index 0000000..76d1b07 --- /dev/null +++ b/SOURCES/kvm-trace-add-systemtap-initscript-README-file-to-RPM.patch @@ -0,0 +1,85 @@ +From 47c61bc22285224ee24a7cbfa822c481f1155a81 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:07:00 +0200 +Subject: [PATCH 42/43] trace: add systemtap-initscript README file to RPM + +Message-id: <1412690820-31016-12-git-send-email-stefanha@redhat.com> +Patchwork-id: 61616 +O-Subject: [RHEL7.1 qemu-kvm PATCH 11/11] trace: add systemtap-initscript README file to RPM +Bugzilla: 1088112 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +The downstream systemtap-initscript integration is undocumented. Fix +that with a brief guide containing usage instructions. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d73b49dbbce7535531da5aa1dc640208f18979d2) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + redhat/qemu-kvm.spec.template + +This patch is forward-ported from RHEL 6 qemu-kvm. RHEL 7's +qemu-kvm.spec.template is significantly different from RHEL 6 so +adjustments are necessary to include README.systemtap in the RPM. +--- + README.systemtap | 43 +++++++++++++++++++++++++++++++++++++++++++ + redhat/qemu-kvm.spec.template | 3 ++- + 2 files changed, 45 insertions(+), 1 deletion(-) + create mode 100644 README.systemtap + +diff --git a/README.systemtap b/README.systemtap +new file mode 100644 +index 0000000..ad913fc +--- /dev/null ++++ b/README.systemtap +@@ -0,0 +1,43 @@ ++QEMU tracing using systemtap-initscript ++--------------------------------------- ++ ++You can capture QEMU trace data all the time using systemtap-initscript. This ++uses SystemTap's flight recorder mode to trace all running guests to a ++fixed-size buffer on the host. Old trace entries are overwritten by new ++entries when the buffer size wraps. ++ ++1. Install the systemtap-initscript package: ++ # yum install systemtap-initscript ++ ++2. Install the systemtap scripts and the conf file: ++ # cp /usr/share/qemu-kvm/systemtap/script.d/qemu_kvm.stp /etc/systemtap/script.d/ ++ # cp /usr/share/qemu-kvm/systemtap/conf.d/qemu_kvm.conf /etc/systemtap/conf.d/ ++ ++The set of trace events to enable is given in qemu_kvm.stp. This SystemTap ++script can be customized to add or remove trace events provided in ++/usr/share/systemtap/tapset/qemu-kvm-simpletrace.stp. ++ ++SystemTap customizations can be made to qemu_kvm.conf to control the flight ++recorder buffer size and whether to store traces in memory only or disk too. ++See stap(1) for option documentation. ++ ++3. Start the systemtap service. ++ # service systemtap start qemu_kvm ++ ++4. Make the service start at boot time. ++ # chkconfig systemtap on ++ ++5. Confirm that the service works. ++ # service systemtap status qemu_kvm ++ qemu_kvm is running... ++ ++When you want to inspect the trace buffer, perform the following steps: ++ ++1. Dump the trace buffer. ++ # staprun -A qemu_kvm >/tmp/trace.log ++ ++2. Start the systemtap service because the preceding step stops the service. ++ # service systemtap start qemu_kvm ++ ++3. Translate the trace record to readable format. ++ # /usr/share/qemu-kvm/simpletrace.py --no-header /usr/share/qemu-kvm/trace-events /tmp/trace.log +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-add-tracetool-simpletrace_stap-format.patch b/SOURCES/kvm-trace-add-tracetool-simpletrace_stap-format.patch new file mode 100644 index 0000000..5a9823b --- /dev/null +++ b/SOURCES/kvm-trace-add-tracetool-simpletrace_stap-format.patch @@ -0,0 +1,140 @@ +From a38cb7ff39accd9ea600e2409866eb12fb3b8871 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:55 +0200 +Subject: [PATCH 37/43] trace: add tracetool simpletrace_stap format + +Message-id: <1412690820-31016-7-git-send-email-stefanha@redhat.com> +Patchwork-id: 61611 +O-Subject: [RHEL7.1 qemu-kvm PATCH 06/11] trace: add tracetool simpletrace_stap format +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +This new tracetool "format" generates a SystemTap .stp file that outputs +simpletrace binary trace data. + +In contrast to simpletrace or ftrace, SystemTap does not define its own +trace format. All output from SystemTap is generated by .stp files. +This patch lets us generate a .stp file that outputs in the simpletrace +binary format. + +This makes it possible to reuse simpletrace.py to analyze traces +recorded using SystemTap. The simpletrace binary format is especially +useful for long-running traces like flight-recorder mode where string +formatting can be expensive. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3f8b112d6b9ab65e165096582c78154dda1adc69) +Signed-off-by: Stefan Hajnoczi + +Downstream tracetool does not have the code reorganization from the +multi-backend tracing changes. Therefore the stap generation has to +happen in scripts/tracetool/backend/dtrace.py while the +scripts/tracetool/format/simpletrace_stap.py file just emits the file +header. + +Remember to import tracetool.backend.simple is_string() in dtrace.py. + +Also note that scripts/tracetool/__init__.py filters out disabled events +so we don't need to skip them explicitly. + +Signed-off-by: Miroslav Rezanina +--- + scripts/tracetool/backend/dtrace.py | 47 ++++++++++++++++++++++++++++ + scripts/tracetool/format/simpletrace_stap.py | 21 +++++++++++++ + 2 files changed, 68 insertions(+) + create mode 100644 scripts/tracetool/format/simpletrace_stap.py + +diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/backend/dtrace.py +index 614316f..2d8cd2d 100644 +--- a/scripts/tracetool/backend/dtrace.py ++++ b/scripts/tracetool/backend/dtrace.py +@@ -14,6 +14,7 @@ __email__ = "stefanha@linux.vnet.ibm.com" + + + from tracetool import out ++from tracetool.backend.simple import is_string + + + PUBLIC = True +@@ -112,3 +113,49 @@ def stap(events): + out('}') + + out() ++ ++ ++def simpletrace_stap(events): ++ for event_id, e in enumerate(events): ++ out('probe %(probeprefix)s.simpletrace.%(name)s = %(probeprefix)s.%(name)s ?', ++ '{', ++ probeprefix=_probeprefix(), ++ name=e.name) ++ ++ # Calculate record size ++ sizes = ['24'] # sizeof(TraceRecord) ++ for type_, name in e.args: ++ name = stap_escape(name) ++ if is_string(type_): ++ out(' try {', ++ ' arg%(name)s_str = %(name)s ? user_string_n(%(name)s, 512) : ""', ++ ' } catch {}', ++ ' arg%(name)s_len = strlen(arg%(name)s_str)', ++ name=name) ++ sizes.append('4 + arg%s_len' % name) ++ else: ++ sizes.append('8') ++ sizestr = ' + '.join(sizes) ++ ++ # Generate format string and value pairs for record header and arguments ++ fields = [('8b', str(event_id)), ++ ('8b', 'gettimeofday_ns()'), ++ ('4b', sizestr), ++ ('4b', 'pid()')] ++ for type_, name in e.args: ++ name = stap_escape(name) ++ if is_string(type_): ++ fields.extend([('4b', 'arg%s_len' % name), ++ ('.*s', 'arg%s_len, arg%s_str' % (name, name))]) ++ else: ++ fields.append(('8b', name)) ++ ++ # Emit the entire record in a single SystemTap printf() ++ fmt_str = '%'.join(fmt for fmt, _ in fields) ++ arg_str = ', '.join(arg for _, arg in fields) ++ out(' printf("%%%(fmt_str)s", %(arg_str)s)', ++ fmt_str=fmt_str, arg_str=arg_str) ++ ++ out('}') ++ ++ out() +diff --git a/scripts/tracetool/format/simpletrace_stap.py b/scripts/tracetool/format/simpletrace_stap.py +new file mode 100644 +index 0000000..b8daa03 +--- /dev/null ++++ b/scripts/tracetool/format/simpletrace_stap.py +@@ -0,0 +1,21 @@ ++#!/usr/bin/env python ++# -*- coding: utf-8 -*- ++ ++""" ++Generate .stp file that outputs simpletrace binary traces (DTrace with SystemTAP only). ++""" ++ ++__author__ = "Stefan Hajnoczi " ++__copyright__ = "Copyright (C) 2014, Red Hat, Inc." ++__license__ = "GPL version 2 or (at your option) any later version" ++ ++__maintainer__ = "Stefan Hajnoczi" ++__email__ = "stefanha@redhat.com" ++ ++ ++from tracetool import out ++ ++ ++def begin(events): ++ out('/* This file is autogenerated by tracetool, do not edit. */', ++ '') +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-events-Clean-up-after-removal-of-old-usb-host-.patch b/SOURCES/kvm-trace-events-Clean-up-after-removal-of-old-usb-host-.patch new file mode 100644 index 0000000..f1e8db3 --- /dev/null +++ b/SOURCES/kvm-trace-events-Clean-up-after-removal-of-old-usb-host-.patch @@ -0,0 +1,87 @@ +From 2122cd12101fcf8d3289ae516ec4612d986a00d8 Mon Sep 17 00:00:00 2001 +Message-Id: <2122cd12101fcf8d3289ae516ec4612d986a00d8.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:56 +0100 +Subject: [PATCH 15/16] trace-events: Clean up after removal of old usb-host + code + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-8-git-send-email-armbru@redhat.com> +Patchwork-id: 56117 +O-Subject: [PATCH 7.0 qemu-kvm 7/7] trace-events: Clean up after removal of old usb-host code +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Commit b5613fd neglected to drop the trace events along with the code. + +Signed-off-by: Markus Armbruster +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 904c063039f5923a07ce35fc40ed78ec6f7dee1a) +--- + trace-events | 13 ------------- + 1 file changed, 13 deletions(-) + +Signed-off-by: Michal Novotny +--- + trace-events | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/trace-events b/trace-events +index 2336943..b72a72f 100644 +--- a/trace-events ++++ b/trace-events +@@ -417,45 +417,32 @@ usb_uas_tmf_abort_task(int addr, uint16_t tag, uint16_t task_tag) "dev %d, tag 0 + usb_uas_tmf_logical_unit_reset(int addr, uint16_t tag, int lun) "dev %d, tag 0x%x, lun %d" + usb_uas_tmf_unsupported(int addr, uint16_t tag, uint32_t function) "dev %d, tag 0x%x, function 0x%x" + +-# hw/usb/host-linux.c + # hw/usb/host-libusb.c + usb_host_open_started(int bus, int addr) "dev %d:%d" + usb_host_open_success(int bus, int addr) "dev %d:%d" + usb_host_open_failure(int bus, int addr) "dev %d:%d" +-usb_host_disconnect(int bus, int addr) "dev %d:%d" + usb_host_close(int bus, int addr) "dev %d:%d" + usb_host_attach_kernel(int bus, int addr, int interface) "dev %d:%d, if %d" + usb_host_detach_kernel(int bus, int addr, int interface) "dev %d:%d, if %d" + usb_host_set_address(int bus, int addr, int config) "dev %d:%d, address %d" + usb_host_set_config(int bus, int addr, int config) "dev %d:%d, config %d" + usb_host_set_interface(int bus, int addr, int interface, int alt) "dev %d:%d, interface %d, alt %d" +-usb_host_claim_interfaces(int bus, int addr, int config, int nif) "dev %d:%d, config %d, nif %d" + usb_host_claim_interface(int bus, int addr, int config, int interface) "dev %d:%d, config %d, if %d" +-usb_host_release_interfaces(int bus, int addr) "dev %d:%d" + usb_host_release_interface(int bus, int addr, int interface) "dev %d:%d, if %d" + usb_host_req_control(int bus, int addr, void *p, int req, int value, int index) "dev %d:%d, packet %p, req 0x%x, value %d, index %d" + usb_host_req_data(int bus, int addr, void *p, int in, int ep, int size) "dev %d:%d, packet %p, in %d, ep %d, size %d" + usb_host_req_complete(int bus, int addr, void *p, int status, int length) "dev %d:%d, packet %p, status %d, length %d" + usb_host_req_emulated(int bus, int addr, void *p, int status) "dev %d:%d, packet %p, status %d" + usb_host_req_canceled(int bus, int addr, void *p) "dev %d:%d, packet %p" +-usb_host_urb_submit(int bus, int addr, void *aurb, int length, int more) "dev %d:%d, aurb %p, length %d, more %d" +-usb_host_urb_complete(int bus, int addr, void *aurb, int status, int length, int more) "dev %d:%d, aurb %p, status %d, length %d, more %d" +-usb_host_urb_canceled(int bus, int addr, void *aurb) "dev %d:%d, aurb %p" +-usb_host_ep_set_halt(int bus, int addr, int ep) "dev %d:%d, ep %d" +-usb_host_ep_clear_halt(int bus, int addr, int ep) "dev %d:%d, ep %d" + usb_host_iso_start(int bus, int addr, int ep) "dev %d:%d, ep %d" + usb_host_iso_stop(int bus, int addr, int ep) "dev %d:%d, ep %d" + usb_host_iso_out_of_bufs(int bus, int addr, int ep) "dev %d:%d, ep %d" +-usb_host_iso_many_urbs(int bus, int addr, int count) "dev %d:%d, count %d" + usb_host_reset(int bus, int addr) "dev %d:%d" + usb_host_auto_scan_enabled(void) + usb_host_auto_scan_disabled(void) +-usb_host_claim_port(int bus, int hub, int port) "bus %d, hub addr %d, port %d" +-usb_host_parse_device(int bus, int addr, int vendor, int product) "dev %d:%d, id %04x:%04x" + usb_host_parse_config(int bus, int addr, int value, int active) "dev %d:%d, value %d, active %d" + usb_host_parse_interface(int bus, int addr, int num, int alt, int active) "dev %d:%d, num %d, alt %d, active %d" + usb_host_parse_endpoint(int bus, int addr, int ep, const char *dir, const char *type, int active) "dev %d:%d, ep %d, %s, %s, active %d" +-usb_host_parse_unknown(int bus, int addr, int len, int type) "dev %d:%d, len %d, type %d" + usb_host_parse_error(int bus, int addr, const char *errmsg) "dev %d:%d, msg %s" + + # hw/scsi/scsi-bus.c +-- +1.7.11.7 + diff --git a/SOURCES/kvm-trace-events-Clean-up-with-scripts-cleanup-trace-eve.patch b/SOURCES/kvm-trace-events-Clean-up-with-scripts-cleanup-trace-eve.patch new file mode 100644 index 0000000..7d47d28 --- /dev/null +++ b/SOURCES/kvm-trace-events-Clean-up-with-scripts-cleanup-trace-eve.patch @@ -0,0 +1,58 @@ +From e0a3caa2206a851a3311bf42ddfb1558314868b1 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:55 +0100 +Subject: [PATCH 14/16] trace-events: Clean up with + scripts/cleanup-trace-events.pl again + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-7-git-send-email-armbru@redhat.com> +Patchwork-id: 56116 +O-Subject: [PATCH 7.0 qemu-kvm 6/7] trace-events: Clean up with scripts/cleanup-trace-events.pl again +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Event qxl_render_blit_guest_primary_initialized is unused since commit +c58c7b9, drop it. + +Commit 42e5b4c moved hw/ppc/xics.c to hw/intc/xics.c without updating +the comment in trace-events. + +"scripts/cleanup-trace-events.pl trace-events | diff trace-events" is +now clean again. + +Signed-off-by: Markus Armbruster +Signed-off-by: Michael Tokarev +(cherry picked from commit ddd0bd480fc07cc45f9cc7e3d113f23cb58b6082) + +Second hunk dropped, because we don't have commit 42e5b4c. +--- + trace-events | 1 - + 1 file changed, 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + trace-events | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/trace-events b/trace-events +index 2a034cb..2336943 100644 +--- a/trace-events ++++ b/trace-events +@@ -1102,7 +1102,6 @@ qemu_spice_wakeup(uint32_t qid) "%d" + qemu_spice_create_update(uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) "lr %d -> %d, tb -> %d -> %d" + + # hw/display/qxl-render.c +-qxl_render_blit_guest_primary_initialized(void) "" + qxl_render_blit(int32_t stride, int32_t left, int32_t right, int32_t top, int32_t bottom) "stride=%d [%d, %d, %d, %d]" + qxl_render_guest_primary_resized(int32_t width, int32_t height, int32_t stride, int32_t bytes_pp, int32_t bits_pp) "%dx%d, stride %d, bpp %d, depth %d" + qxl_render_update_area_done(void *cookie) "%p" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-trace-events-Drop-unused-events.patch b/SOURCES/kvm-trace-events-Drop-unused-events.patch new file mode 100644 index 0000000..7195694 --- /dev/null +++ b/SOURCES/kvm-trace-events-Drop-unused-events.patch @@ -0,0 +1,134 @@ +From 9a52cf8f79e980ccc07e18ad1ad2f410a2546799 Mon Sep 17 00:00:00 2001 +Message-Id: <9a52cf8f79e980ccc07e18ad1ad2f410a2546799.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:53 +0100 +Subject: [PATCH 12/16] trace-events: Drop unused events + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-5-git-send-email-armbru@redhat.com> +Patchwork-id: 56115 +O-Subject: [PATCH 7.0 qemu-kvm 4/7] trace-events: Drop unused events +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +Dropped event Unused since +mirror_cow 884fea4 +paio_complete 47e6b25 +paio_cancel 47e6b25 +usb_ehci_data 0ce668b +megasas_qf_dequeue never used +megasas_handle_frame never used +megasas_io_continue never used +megasas_iovec_map_failed never used +megasas_dcmd_map_failed never used +milkymist_softusb_mouse_event 4c15ba9 +xen_map_block 6506e4f +xen_unmap_block 6506e4f +qemu_spice_start 67be672 +qemu_spice_stop 67be672 + +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3ae76d23d21a1f47390c6abe3497c33b708aec1f) +--- + trace-events | 14 -------------- + 1 file changed, 14 deletions(-) + +Signed-off-by: Michal Novotny +--- + trace-events | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/trace-events b/trace-events +index 7cd335d..ef8b5e1 100644 +--- a/trace-events ++++ b/trace-events +@@ -85,7 +85,6 @@ mirror_before_flush(void *s) "s %p" + mirror_before_drain(void *s, int64_t cnt) "s %p dirty count %"PRId64 + mirror_before_sleep(void *s, int64_t cnt, int synced) "s %p dirty count %"PRId64" synced %d" + mirror_one_iteration(void *s, int64_t sector_num, int nb_sectors) "s %p sector_num %"PRId64" nb_sectors %d" +-mirror_cow(void *s, int64_t sector_num) "s %p sector_num %"PRId64 + mirror_iteration_done(void *s, int64_t sector_num, int nb_sectors, int ret) "s %p sector_num %"PRId64" nb_sectors %d ret %d" + mirror_yield(void *s, int64_t cnt, int buf_free_count, int in_flight) "s %p dirty count %"PRId64" free buffers %d in_flight %d" + mirror_yield_in_flight(void *s, int64_t sector_num, int in_flight) "s %p sector_num %"PRId64" in_flight %d" +@@ -122,8 +121,6 @@ thread_pool_cancel(void *req, void *opaque) "req %p opaque %p" + + # posix-aio-compat.c + paio_submit(void *acb, void *opaque, int64_t sector_num, int nb_sectors, int type) "acb %p opaque %p sector_num %"PRId64" nb_sectors %d type %d" +-paio_complete(void *acb, void *opaque, int ret) "acb %p opaque %p ret %d" +-paio_cancel(void *acb, void *opaque) "acb %p opaque %p" + + # ioport.c + cpu_in(unsigned int addr, unsigned int val) "addr %#x value %u" +@@ -303,7 +300,6 @@ usb_ehci_sitd(uint32_t addr, uint32_t nxt, uint32_t active) "ITD @ %08x: next %0 + usb_ehci_port_attach(uint32_t port, const char *owner, const char *device) "attach port #%d, owner %s, device %s" + usb_ehci_port_detach(uint32_t port, const char *owner) "detach port #%d, owner %s" + usb_ehci_port_reset(uint32_t port, int enable) "reset port #%d - %d" +-usb_ehci_data(int rw, uint32_t cpage, uint32_t offset, uint32_t addr, uint32_t len, uint32_t bufpos) "write %d, cpage %d, offset 0x%03x, addr 0x%08x, len %d, bufpos %d" + usb_ehci_queue_action(void *q, const char *action) "q %p: %s" + usb_ehci_packet_action(void *q, void *p, const char *action) "q %p p %p: %s" + usb_ehci_irq(uint32_t level, uint32_t frindex, uint32_t sts, uint32_t mask) "level %d, frindex 0x%04x, sts 0x%x, mask 0x%x" +@@ -609,11 +605,9 @@ megasas_qf_new(unsigned int index, void *cmd) "return new frame %x cmd %p" + megasas_qf_failed(unsigned long pa) "all frames busy for frame %lx" + megasas_qf_enqueue(unsigned int index, unsigned int count, uint64_t context, unsigned int tail, int busy) "enqueue frame %x count %d context %" PRIx64 " tail %x busy %d" + megasas_qf_update(unsigned int head, unsigned int busy) "update reply queue head %x busy %d" +-megasas_qf_dequeue(unsigned int index) "dequeue frame %x" + megasas_qf_map_failed(int cmd, unsigned long frame) "scmd %d: frame %lu" + megasas_qf_complete_noirq(uint64_t context) "context %" PRIx64 " " + megasas_qf_complete(uint64_t context, unsigned int tail, unsigned int offset, int busy, unsigned int doorbell) "context %" PRIx64 " tail %x offset %d busy %d doorbell %x" +-megasas_handle_frame(const char *cmd, uint64_t addr, uint64_t context, uint32_t count) "MFI cmd %s addr %" PRIx64 " context %" PRIx64 " count %d" + megasas_frame_busy(uint64_t addr) "frame %" PRIx64 " busy" + megasas_unhandled_frame_cmd(int cmd, uint8_t frame_cmd) "scmd %d: Unhandled MFI cmd %x" + megasas_handle_scsi(const char *frame, int bus, int dev, int lun, void *sdev, unsigned long size) "%s dev %x/%x/%x sdev %p xfer %lu" +@@ -636,8 +630,6 @@ megasas_io_write_start(int cmd, unsigned long lba, unsigned long count, unsigned + megasas_io_complete(int cmd, uint32_t len) "scmd %d: %d bytes completed" + megasas_io_read(int cmd, int bytes, int len, unsigned long offset) "scmd %d: %d/%d bytes, iov offset %lu" + megasas_io_write(int cmd, int bytes, int len, unsigned long offset) "scmd %d: %d/%d bytes, iov offset %lu" +-megasas_io_continue(int cmd, int bytes) "scmd %d: %d bytes left" +-megasas_iovec_map_failed(int cmd, int index, unsigned long iov_size) "scmd %d: iovec %d size %lu" + megasas_iovec_sgl_overflow(int cmd, int index, int limit) "scmd %d: iovec count %d limit %d" + megasas_iovec_sgl_underflow(int cmd, int index) "scmd %d: iovec count %d" + megasas_iovec_sgl_invalid(int cmd, int index, uint64_t pa, uint32_t len) "scmd %d: element %d pa %" PRIx64 " len %u" +@@ -652,7 +644,6 @@ megasas_dcmd_internal_invalid(int cmd, int opcode) "scmd %d: Invalid internal DC + megasas_dcmd_unhandled(int cmd, int opcode, int len) "scmd %d: opcode %x, len %d" + megasas_dcmd_zero_sge(int cmd) "scmd %d: zero DCMD sge count" + megasas_dcmd_invalid_sge(int cmd, int count) "scmd %d: invalid DCMD sge count %d" +-megasas_dcmd_map_failed(int cmd) "scmd %d: Failed to map DCMD buffer" + megasas_dcmd_invalid_xfer_len(int cmd, unsigned long size, unsigned long max) "scmd %d: invalid xfer len %ld, max %ld" + megasas_dcmd_enter(int cmd, const char *dcmd, int len) "scmd %d: DCMD %s len %d" + megasas_dcmd_dummy(int cmd, unsigned long size) "scmd %d: DCMD dummy xfer len %ld" +@@ -722,7 +713,6 @@ milkymist_softusb_memory_read(uint32_t addr, uint32_t value) "addr %08x value %0 + milkymist_softusb_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_softusb_mevt(uint8_t m) "m %d" + milkymist_softusb_kevt(uint8_t m) "m %d" +-milkymist_softusb_mouse_event(int dx, int dy, int dz, int bs) "dx %d dy %d dz %d bs %02x" + milkymist_softusb_pulse_irq(void) "Pulse IRQ" + + # hw/milkymist-sysctl.c +@@ -810,8 +800,6 @@ xen_client_set_memory(uint64_t start_addr, unsigned long size, bool log_dirty) " + xen_map_cache(uint64_t phys_addr) "want %#"PRIx64 + xen_remap_bucket(uint64_t index) "index %#"PRIx64 + xen_map_cache_return(void* ptr) "%p" +-xen_map_block(uint64_t phys_addr, uint64_t size) "%#"PRIx64", size %#"PRIx64 +-xen_unmap_block(void* addr, unsigned long size) "%p, size %#lx" + + # exec.c + qemu_put_ram_ptr(void* addr) "%p" +@@ -1076,8 +1064,6 @@ qemu_spice_del_memslot(int qid, uint32_t gid, uint32_t slot_id) "%d gid=%u sid=% + qemu_spice_create_primary_surface(int qid, uint32_t sid, void *surface, int async) "%d sid=%u surface=%p async=%d" + qemu_spice_destroy_primary_surface(int qid, uint32_t sid, int async) "%d sid=%u async=%d" + qemu_spice_wakeup(uint32_t qid) "%d" +-qemu_spice_start(uint32_t qid) "%d" +-qemu_spice_stop(uint32_t qid) "%d" + qemu_spice_create_update(uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) "lr %d -> %d, tb -> %d -> %d" + qxl_spice_destroy_surfaces_complete(int qid) "%d" + qxl_spice_destroy_surfaces(int qid, int async) "%d async=%d" +-- +1.7.11.7 + diff --git a/SOURCES/kvm-trace-events-Fix-up-source-file-comments.patch b/SOURCES/kvm-trace-events-Fix-up-source-file-comments.patch new file mode 100644 index 0000000..9e495b2 --- /dev/null +++ b/SOURCES/kvm-trace-events-Fix-up-source-file-comments.patch @@ -0,0 +1,605 @@ +From a4bbc54648f6865edee446d1d066c84a43e83695 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Markus Armbruster +Date: Tue, 10 Dec 2013 15:12:54 +0100 +Subject: [PATCH 13/16] trace-events: Fix up source file comments + +RH-Author: Markus Armbruster +Message-id: <1386688376-29521-6-git-send-email-armbru@redhat.com> +Patchwork-id: 56118 +O-Subject: [PATCH 7.0 qemu-kvm 5/7] trace-events: Fix up source file comments +Bugzilla: 997832 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Laszlo Ersek + +From: Markus Armbruster + +They're all wrong since (at least) Paolo's big source tree +reorganization. Need to shuffle some event declarations around to +keep them under the correct source file comment. + +Signed-off-by: Markus Armbruster +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3ba00637d024b9d43b26106060a23a85411d0757) + +Conflicts: + trace-events + +Trivially conflicts because we still have qemu_put_ram_ptr(), removed +upstream in commit 4f39178. +--- + trace-events | 162 ++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 87 insertions(+), 75 deletions(-) + +Signed-off-by: Michal Novotny +--- + trace-events | 162 ++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 87 insertions(+), 75 deletions(-) + +diff --git a/trace-events b/trace-events +index ef8b5e1..2a034cb 100644 +--- a/trace-events ++++ b/trace-events +@@ -25,18 +25,14 @@ + # + # The should be a sprintf()-compatible format string. + +-# qemu-malloc.c +-g_malloc(size_t size, void *ptr) "size %zu ptr %p" +-g_realloc(void *ptr, size_t size, void *newptr) "ptr %p size %zu newptr %p" +-g_free(void *ptr) "ptr %p" +- +-# osdep.c ++# util/oslib-win32.c ++# util/oslib-posix.c + qemu_memalign(size_t alignment, size_t size, void *ptr) "alignment %zu size %zu ptr %p" + qemu_anon_ram_alloc(size_t size, void *ptr) "size %zu ptr %p" + qemu_vfree(void *ptr) "ptr %p" + qemu_anon_ram_free(void *ptr, size_t size) "ptr %p size %zu" + +-# hw/virtio.c ++# hw/virtio/virtio.c + virtqueue_fill(void *vq, const void *elem, unsigned int len, unsigned int idx) "vq %p elem %p len %u idx %u" + virtqueue_flush(void *vq, unsigned int count) "vq %p count %u" + virtqueue_pop(void *vq, void *elem, unsigned int in_num, unsigned int out_num) "vq %p elem %p in_num %u out_num %u" +@@ -45,13 +41,13 @@ virtio_irq(void *vq) "vq %p" + virtio_notify(void *vdev, void *vq) "vdev %p vq %p" + virtio_set_status(void *vdev, uint8_t val) "vdev %p val %u" + +-# hw/virtio-serial-bus.c ++# hw/char/virtio-serial-bus.c + virtio_serial_send_control_event(unsigned int port, uint16_t event, uint16_t value) "port %u, event %u, value %u" + virtio_serial_throttle_port(unsigned int port, bool throttle) "port %u, throttle %d" + virtio_serial_handle_control_message(uint16_t event, uint16_t value) "event %u, value %u" + virtio_serial_handle_control_message_port(unsigned int port) "port %u" + +-# hw/virtio-console.c ++# hw/char/virtio-console.c + virtio_console_flush_buf(unsigned int port, size_t len, ssize_t ret) "port %u, in_len %zu, out_len %zd" + virtio_console_chr_read(unsigned int port, int size) "port %u, size %d" + virtio_console_chr_event(unsigned int port, int event) "port %u, event %d" +@@ -75,6 +71,8 @@ bdrv_co_do_copy_on_readv(void *bs, int64_t sector_num, int nb_sectors, int64_t c + # block/stream.c + stream_one_iteration(void *s, int64_t sector_num, int nb_sectors, int is_allocated) "s %p sector_num %"PRId64" nb_sectors %d is_allocated %d" + stream_start(void *bs, void *base, void *s, void *co, void *opaque) "bs %p base %p s %p co %p opaque %p" ++ ++# block/commit.c + commit_one_iteration(void *s, int64_t sector_num, int nb_sectors, int is_allocated) "s %p sector_num %"PRId64" nb_sectors %d is_allocated %d" + commit_start(void *bs, void *base, void *top, void *s, void *co, void *opaque) "bs %p base %p top %p s %p co %p opaque %p" + +@@ -99,19 +97,19 @@ qmp_block_job_complete(void *job) "job %p" + block_job_cb(void *bs, void *job, int ret) "bs %p job %p ret %d" + qmp_block_stream(void *bs, void *job) "bs %p job %p" + +-# hw/virtio-blk.c ++# hw/block/virtio-blk.c + virtio_blk_req_complete(void *req, int status) "req %p status %d" + virtio_blk_rw_complete(void *req, int ret) "req %p ret %d" + virtio_blk_handle_write(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu" + virtio_blk_handle_read(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu" + +-# hw/dataplane/virtio-blk.c ++# hw/block/dataplane/virtio-blk.c + virtio_blk_data_plane_start(void *s) "dataplane %p" + virtio_blk_data_plane_stop(void *s) "dataplane %p" + virtio_blk_data_plane_process_request(void *s, unsigned int out_num, unsigned int in_num, unsigned int head) "dataplane %p out_num %u in_num %u head %u" + virtio_blk_data_plane_complete_request(void *s, unsigned int head, int ret) "dataplane %p head %u ret %d" + +-# hw/dataplane/vring.c ++# hw/virtio/dataplane/vring.c + vring_setup(uint64_t physical, void *desc, void *avail, void *used) "vring physical %#"PRIx64" desc %p avail %p used %p" + + # thread-pool.c +@@ -119,7 +117,8 @@ thread_pool_submit(void *pool, void *req, void *opaque) "pool %p req %p opaque % + thread_pool_complete(void *pool, void *req, void *opaque, int ret) "pool %p req %p opaque %p ret %d" + thread_pool_cancel(void *req, void *opaque) "req %p opaque %p" + +-# posix-aio-compat.c ++# block/raw-win32.c ++# block/raw-posix.c + paio_submit(void *acb, void *opaque, int64_t sector_num, int nb_sectors, int type) "acb %p opaque %p sector_num %"PRId64" nb_sectors %d type %d" + + # ioport.c +@@ -130,29 +129,31 @@ cpu_out(unsigned int addr, unsigned int val) "addr %#x value %u" + # Since requests are raised via monitor, not many tracepoints are needed. + balloon_event(void *opaque, unsigned long addr) "opaque %p addr %lu" + +-# hw/apic.c +-apic_local_deliver(int vector, uint32_t lvt) "vector %d delivery mode %d" +-apic_deliver_irq(uint8_t dest, uint8_t dest_mode, uint8_t delivery_mode, uint8_t vector_num, uint8_t trigger_mode) "dest %d dest_mode %d delivery_mode %d vector %d trigger_mode %d" ++# hw/intc/apic_common.c + cpu_set_apic_base(uint64_t val) "%016"PRIx64 + cpu_get_apic_base(uint64_t val) "%016"PRIx64 +-apic_mem_readl(uint64_t addr, uint32_t val) "%"PRIx64" = %08x" +-apic_mem_writel(uint64_t addr, uint32_t val) "%"PRIx64" = %08x" + # coalescing + apic_report_irq_delivered(int apic_irq_delivered) "coalescing %d" + apic_reset_irq_delivered(int apic_irq_delivered) "old coalescing %d" + apic_get_irq_delivered(int apic_irq_delivered) "returning coalescing %d" + +-# hw/cs4231.c ++# hw/intc/apic.c ++apic_local_deliver(int vector, uint32_t lvt) "vector %d delivery mode %d" ++apic_deliver_irq(uint8_t dest, uint8_t dest_mode, uint8_t delivery_mode, uint8_t vector_num, uint8_t trigger_mode) "dest %d dest_mode %d delivery_mode %d vector %d trigger_mode %d" ++apic_mem_readl(uint64_t addr, uint32_t val) "%"PRIx64" = %08x" ++apic_mem_writel(uint64_t addr, uint32_t val) "%"PRIx64" = %08x" ++ ++# hw/audio/cs4231.c + cs4231_mem_readl_dreg(uint32_t reg, uint32_t ret) "read dreg %d: 0x%02x" + cs4231_mem_readl_reg(uint32_t reg, uint32_t ret) "read reg %d: 0x%08x" + cs4231_mem_writel_reg(uint32_t reg, uint32_t old, uint32_t val) "write reg %d: 0x%08x -> 0x%08x" + cs4231_mem_writel_dreg(uint32_t reg, uint32_t old, uint32_t val) "write dreg %d: 0x%02x -> 0x%02x" + +-# hw/ds1225y.c ++# hw/nvram/ds1225y.c + nvram_read(uint32_t addr, uint32_t ret) "read addr %d: 0x%02x" + nvram_write(uint32_t addr, uint32_t old, uint32_t val) "write addr %d: 0x%02x -> 0x%02x" + +-# hw/eccmemctl.c ++# hw/misc/eccmemctl.c + ecc_mem_writel_mer(uint32_t val) "Write memory enable %08x" + ecc_mem_writel_mdr(uint32_t val) "Write memory delay %08x" + ecc_mem_writel_mfsr(uint32_t val) "Write memory fault status %08x" +@@ -172,26 +173,26 @@ ecc_mem_readl_ecr1(uint32_t ret) "Read event count 2 %08x" + ecc_diag_mem_writeb(uint64_t addr, uint32_t val) "Write diagnostic %"PRId64" = %02x" + ecc_diag_mem_readb(uint64_t addr, uint32_t ret) "Read diagnostic %"PRId64"= %02x" + +-# hw/fw_cfg.c ++# hw/nvram/fw_cfg.c + fw_cfg_write(void *s, uint8_t value) "%p %d" + fw_cfg_select(void *s, uint16_t key, int ret) "%p key %d = %d" + fw_cfg_read(void *s, uint8_t ret) "%p = %d" + fw_cfg_add_file_dupe(void *s, char *name) "%p %s" + fw_cfg_add_file(void *s, int index, char *name, size_t len) "%p #%d: %s (%zd bytes)" + +-# hw/hd-geometry.c ++# hw/block/hd-geometry.c + hd_geometry_lchs_guess(void *bs, int cyls, int heads, int secs) "bs %p LCHS %d %d %d" + hd_geometry_guess(void *bs, uint32_t cyls, uint32_t heads, uint32_t secs, int trans) "bs %p CHS %u %u %u trans %d" + +-# hw/jazz-led.c ++# hw/display/jazz_led.c + jazz_led_read(uint64_t addr, uint8_t val) "read addr=0x%"PRIx64": 0x%x" + jazz_led_write(uint64_t addr, uint8_t new) "write addr=0x%"PRIx64": 0x%x" + +-# hw/lance.c ++# hw/net/lance.c + lance_mem_readw(uint64_t addr, uint32_t ret) "addr=%"PRIx64"val=0x%04x" + lance_mem_writew(uint64_t addr, uint32_t val) "addr=%"PRIx64"val=0x%04x" + +-# hw/slavio_intctl.c ++# hw/intc/slavio_intctl.c + slavio_intctl_mem_readl(uint32_t cpu, uint64_t addr, uint32_t ret) "read cpu %d reg 0x%"PRIx64" = %x" + slavio_intctl_mem_writel(uint32_t cpu, uint64_t addr, uint32_t val) "write cpu %d reg 0x%"PRIx64" = %x" + slavio_intctl_mem_writel_clear(uint32_t cpu, uint32_t val, uint32_t intreg_pending) "Cleared cpu %d irq mask %x, curmask %x" +@@ -205,7 +206,7 @@ slavio_check_interrupts(uint32_t pending, uint32_t intregm_disabled) "pending %x + slavio_set_irq(uint32_t target_cpu, int irq, uint32_t pil, int level) "Set cpu %d irq %d -> pil %d level %d" + slavio_set_timer_irq_cpu(int cpu, int level) "Set cpu %d local timer level %d" + +-# hw/slavio_misc.c ++# hw/misc/slavio_misc.c + slavio_misc_update_irq_raise(void) "Raise IRQ" + slavio_misc_update_irq_lower(void) "Lower IRQ" + slavio_set_power_fail(int power_failing, uint8_t config) "Power fail: %d, config: %d" +@@ -226,7 +227,7 @@ slavio_sysctrl_mem_readl(uint32_t ret) "Read system control %08x" + slavio_led_mem_writew(uint32_t val) "Write diagnostic LED %04x" + slavio_led_mem_readw(uint32_t ret) "Read diagnostic LED %04x" + +-# hw/slavio_timer.c ++# hw/timer/slavio_timer.c + slavio_timer_get_out(uint64_t limit, uint32_t counthigh, uint32_t count) "limit %"PRIx64" count %x%08x" + slavio_timer_irq(uint32_t counthigh, uint32_t count) "callback: count %x%08x" + slavio_timer_mem_readl_invalid(uint64_t addr) "invalid read address %"PRIx64 +@@ -241,7 +242,7 @@ slavio_timer_mem_writel_mode_counter(unsigned int timer_index) "processor %d cha + slavio_timer_mem_writel_mode_invalid(void) "not system timer" + slavio_timer_mem_writel_invalid(uint64_t addr) "invalid write address %"PRIx64 + +-# hw/sparc32_dma.c ++# hw/dma/sparc32_dma.c + ledma_memory_read(uint64_t addr) "DMA read addr 0x%"PRIx64 + ledma_memory_write(uint64_t addr) "DMA write addr 0x%"PRIx64 + sparc32_dma_set_irq_raise(void) "Raise IRQ" +@@ -253,13 +254,13 @@ sparc32_dma_mem_writel(uint64_t addr, uint32_t old, uint32_t val) "write dmareg + sparc32_dma_enable_raise(void) "Raise DMA enable" + sparc32_dma_enable_lower(void) "Lower DMA enable" + +-# hw/sun4m.c ++# hw/sparc/sun4m.c + sun4m_cpu_interrupt(unsigned int level) "Set CPU IRQ %d" + sun4m_cpu_reset_interrupt(unsigned int level) "Reset CPU IRQ %d" + sun4m_cpu_set_irq_raise(int level) "Raise CPU IRQ %d" + sun4m_cpu_set_irq_lower(int level) "Lower CPU IRQ %d" + +-# hw/sun4m_iommu.c ++# hw/dma/sun4m_iommu.c + sun4m_iommu_mem_readl(uint64_t addr, uint32_t ret) "read reg[%"PRIx64"] = %x" + sun4m_iommu_mem_writel(uint64_t addr, uint32_t val) "write reg[%"PRIx64"] = %x" + sun4m_iommu_mem_writel_ctrl(uint64_t iostart) "iostart = %"PRIx64 +@@ -417,6 +418,7 @@ usb_uas_tmf_logical_unit_reset(int addr, uint16_t tag, int lun) "dev %d, tag 0x% + usb_uas_tmf_unsupported(int addr, uint16_t tag, uint32_t function) "dev %d, tag 0x%x, function 0x%x" + + # hw/usb/host-linux.c ++# hw/usb/host-libusb.c + usb_host_open_started(int bus, int addr) "dev %d:%d" + usb_host_open_success(int bus, int addr) "dev %d:%d" + usb_host_open_failure(int bus, int addr) "dev %d:%d" +@@ -456,7 +458,7 @@ usb_host_parse_endpoint(int bus, int addr, int ep, const char *dir, const char * + usb_host_parse_unknown(int bus, int addr, int len, int type) "dev %d:%d, len %d, type %d" + usb_host_parse_error(int bus, int addr, const char *errmsg) "dev %d:%d, msg %s" + +-# hw/scsi-bus.c ++# hw/scsi/scsi-bus.c + scsi_req_alloc(int target, int lun, int tag) "target %d lun %d tag %d" + scsi_req_cancel(int target, int lun, int tag) "target %d lun %d tag %d" + scsi_req_data(int target, int lun, int tag, int len) "target %d lun %d tag %d len %d" +@@ -478,6 +480,9 @@ scsi_request_sense(int target, int lun, int tag) "target %d lun %d tag %d" + vm_state_notify(int running, int reason) "running %d reason %d" + load_file(const char *name, const char *path) "name %s location %s" + runstate_set(int new_state) "new state %d" ++g_malloc(size_t size, void *ptr) "size %zu ptr %p" ++g_realloc(void *ptr, size_t size, void *newptr) "ptr %p size %zu newptr %p" ++g_free(void *ptr) "ptr %p" + + # block/qcow2.c + qcow2_writev_start_req(void *co, int64_t sector, int nb_sectors) "co %p sector %" PRIx64 " nb_sectors %d" +@@ -486,6 +491,7 @@ qcow2_writev_start_part(void *co) "co %p" + qcow2_writev_done_part(void *co, int cur_nr_sectors) "co %p cur_nr_sectors %d" + qcow2_writev_data(void *co, uint64_t offset) "co %p offset %" PRIx64 + ++# block/qcow2-cluster.c + qcow2_alloc_clusters_offset(void *co, uint64_t offset, int n_start, int n_end) "co %p offet %" PRIx64 " n_start %d n_end %d" + qcow2_handle_copied(void *co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes) "co %p guest_offet %" PRIx64 " host_offset %" PRIx64 " bytes %" PRIx64 + qcow2_handle_alloc(void *co, uint64_t guest_offset, uint64_t host_offset, uint64_t bytes) "co %p guest_offet %" PRIx64 " host_offset %" PRIx64 " bytes %" PRIx64 +@@ -499,6 +505,7 @@ qcow2_l2_allocate_write_l2(void *bs, int l1_index) "bs %p l1_index %d" + qcow2_l2_allocate_write_l1(void *bs, int l1_index) "bs %p l1_index %d" + qcow2_l2_allocate_done(void *bs, int l1_index, int ret) "bs %p l1_index %d ret %d" + ++# block/qcow2-cache.c + qcow2_cache_get(void *co, int c, uint64_t offset, bool read_from_disk) "co %p is_l2_cache %d offset %" PRIx64 " read_from_disk %d" + qcow2_cache_get_replace_entry(void *co, int c, int i) "co %p is_l2_cache %d index %d" + qcow2_cache_get_read(void *co, int c, int i) "co %p is_l2_cache %d index %d" +@@ -530,11 +537,11 @@ qed_aio_write_prefill(void *s, void *acb, uint64_t start, size_t len, uint64_t o + qed_aio_write_postfill(void *s, void *acb, uint64_t start, size_t len, uint64_t offset) "s %p acb %p start %"PRIu64" len %zu offset %"PRIu64 + qed_aio_write_main(void *s, void *acb, int ret, uint64_t offset, size_t len) "s %p acb %p ret %d offset %"PRIu64" len %zu" + +-# hw/g364fb.c ++# hw/display/g364fb.c + g364fb_read(uint64_t addr, uint32_t val) "read addr=0x%"PRIx64": 0x%x" + g364fb_write(uint64_t addr, uint32_t new) "write addr=0x%"PRIx64": 0x%x" + +-# hw/grlib_gptimer.c ++# hw/timer/grlib_gptimer.c + grlib_gptimer_enable(int id, uint32_t count) "timer:%d set count 0x%x and run" + grlib_gptimer_disabled(int id, uint32_t config) "timer:%d Timer disable config 0x%x" + grlib_gptimer_restart(int id, uint32_t reload) "timer:%d reload val: 0x%x" +@@ -543,19 +550,19 @@ grlib_gptimer_hit(int id) "timer:%d HIT" + grlib_gptimer_readl(int id, uint64_t addr, uint32_t val) "timer:%d addr 0x%"PRIx64" 0x%x" + grlib_gptimer_writel(int id, uint64_t addr, uint32_t val) "timer:%d addr 0x%"PRIx64" 0x%x" + +-# hw/grlib_irqmp.c ++# hw/intc/grlib_irqmp.c + grlib_irqmp_check_irqs(uint32_t pend, uint32_t force, uint32_t mask, uint32_t lvl1, uint32_t lvl2) "pend:0x%04x force:0x%04x mask:0x%04x lvl1:0x%04x lvl0:0x%04x" + grlib_irqmp_ack(int intno) "interrupt:%d" + grlib_irqmp_set_irq(int irq) "Raise CPU IRQ %d" + grlib_irqmp_readl_unknown(uint64_t addr) "addr 0x%"PRIx64 + grlib_irqmp_writel_unknown(uint64_t addr, uint32_t value) "addr 0x%"PRIx64" value 0x%x" + +-# hw/grlib_apbuart.c ++# hw/char/grlib_apbuart.c + grlib_apbuart_event(int event) "event:%d" + grlib_apbuart_writel_unknown(uint64_t addr, uint32_t value) "addr 0x%"PRIx64" value 0x%x" + grlib_apbuart_readl_unknown(uint64_t addr) "addr 0x%"PRIx64"" + +-# hw/leon3.c ++# hw/sparc/leon3.c + leon3_set_irq(int intno) "Set CPU IRQ %d" + leon3_reset_irq(int intno) "Reset CPU IRQ %d" + +@@ -566,7 +573,7 @@ spice_vmc_register_interface(void *scd) "spice vmc registered interface %p" + spice_vmc_unregister_interface(void *scd) "spice vmc unregistered interface %p" + spice_vmc_event(int event) "spice vmc event %d" + +-# hw/lm32_pic.c ++# hw/intc/lm32_pic.c + lm32_pic_raise_irq(void) "Raise CPU interrupt" + lm32_pic_lower_irq(void) "Lower CPU interrupt" + lm32_pic_interrupt(int irq, int level) "Set IRQ%d %d" +@@ -575,27 +582,27 @@ lm32_pic_set_ip(uint32_t ip) "ip 0x%08x" + lm32_pic_get_im(uint32_t im) "im 0x%08x" + lm32_pic_get_ip(uint32_t ip) "ip 0x%08x" + +-# hw/lm32_juart.c ++# hw/char/lm32_juart.c + lm32_juart_get_jtx(uint32_t value) "jtx 0x%08x" + lm32_juart_set_jtx(uint32_t value) "jtx 0x%08x" + lm32_juart_get_jrx(uint32_t value) "jrx 0x%08x" + lm32_juart_set_jrx(uint32_t value) "jrx 0x%08x" + +-# hw/lm32_timer.c ++# hw/timer/lm32_timer.c + lm32_timer_memory_write(uint32_t addr, uint32_t value) "addr 0x%08x value 0x%08x" + lm32_timer_memory_read(uint32_t addr, uint32_t value) "addr 0x%08x value 0x%08x" + lm32_timer_hit(void) "timer hit" + lm32_timer_irq_state(int level) "irq state %d" + +-# hw/lm32_uart.c ++# hw/char/lm32_uart.c + lm32_uart_memory_write(uint32_t addr, uint32_t value) "addr 0x%08x value 0x%08x" + lm32_uart_memory_read(uint32_t addr, uint32_t value) "addr 0x%08x value 0x%08x" + lm32_uart_irq_state(int level) "irq state %d" + +-# hw/lm32_sys.c ++# hw/misc/lm32_sys.c + lm32_sys_memory_write(uint32_t addr, uint32_t value) "addr 0x%08x value 0x%08x" + +-# hw/megasas.c ++# hw/scsi/megasas.c + megasas_init_firmware(uint64_t pa) "pa %" PRIx64 " " + megasas_init_queue(uint64_t queue_pa, int queue_len, uint64_t head, uint64_t tail, uint32_t flags) "queue at %" PRIx64 " len %d head %" PRIx64 " tail %" PRIx64 " flags %x" + megasas_initq_map_failed(int frame) "scmd %d: failed to map queue" +@@ -669,7 +676,7 @@ megasas_mmio_invalid_readl(unsigned long addr) "addr 0x%lx" + megasas_mmio_writel(uint32_t addr, uint32_t val) "addr 0x%x: 0x%x" + megasas_mmio_invalid_writel(uint32_t addr, uint32_t val) "addr 0x%x: 0x%x" + +-# hw/milkymist-ac97.c ++# hw/audio/milkymist-ac97.c + milkymist_ac97_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_ac97_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_ac97_pulse_irq_crrequest(void) "Pulse IRQ CR request" +@@ -681,15 +688,15 @@ milkymist_ac97_in_cb_transferred(int transferred) "transferred %d" + milkymist_ac97_out_cb(int free, uint32_t remaining) "free %d remaining %u" + milkymist_ac97_out_cb_transferred(int transferred) "transferred %d" + +-# hw/milkymist-hpdmc.c ++# hw/misc/milkymist-hpdmc.c + milkymist_hpdmc_memory_read(uint32_t addr, uint32_t value) "addr=%08x value=%08x" + milkymist_hpdmc_memory_write(uint32_t addr, uint32_t value) "addr=%08x value=%08x" + +-# hw/milkymist-memcard.c ++# hw/sd/milkymist-memcard.c + milkymist_memcard_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_memcard_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + +-# hw/milkymist-minimac2.c ++# hw/net/milkymist-minimac2.c + milkymist_minimac2_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_minimac2_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_minimac2_mdio_write(uint8_t phy_addr, uint8_t addr, uint16_t value) "phy_addr %02x addr %02x value %04x" +@@ -702,20 +709,20 @@ milkymist_minimac2_raise_irq_rx(void) "Raise IRQ RX" + milkymist_minimac2_lower_irq_rx(void) "Lower IRQ RX" + milkymist_minimac2_pulse_irq_tx(void) "Pulse IRQ TX" + +-# hw/milkymist-pfpu.c ++# hw/misc/milkymist-pfpu.c + milkymist_pfpu_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_pfpu_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_pfpu_vectout(uint32_t a, uint32_t b, uint32_t dma_ptr) "a %08x b %08x dma_ptr %08x" + milkymist_pfpu_pulse_irq(void) "Pulse IRQ" + +-# hw/milkymist-softusb.c ++# hw/input/milkymist-softusb.c + milkymist_softusb_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_softusb_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_softusb_mevt(uint8_t m) "m %d" + milkymist_softusb_kevt(uint8_t m) "m %d" + milkymist_softusb_pulse_irq(void) "Pulse IRQ" + +-# hw/milkymist-sysctl.c ++# hw/timer/milkymist-sysctl.c + milkymist_sysctl_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_sysctl_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_sysctl_icap_write(uint32_t value) "value %08x" +@@ -726,30 +733,30 @@ milkymist_sysctl_stop_timer1(void) "Stop timer1" + milkymist_sysctl_pulse_irq_timer0(void) "Pulse IRQ Timer0" + milkymist_sysctl_pulse_irq_timer1(void) "Pulse IRQ Timer1" + +-# hw/milkymist-tmu2.c ++# hw/display/milkymist-tmu2.c + milkymist_tmu2_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_tmu2_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_tmu2_start(void) "Start TMU" + milkymist_tmu2_pulse_irq(void) "Pulse IRQ" + +-# hw/milkymist-uart.c ++# hw/char/milkymist-uart.c + milkymist_uart_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_uart_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_uart_raise_irq(void) "Raise IRQ" + milkymist_uart_lower_irq(void) "Lower IRQ" + +-# hw/milkymist-vgafb.c ++# hw/display/milkymist-vgafb.c + milkymist_vgafb_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x" + milkymist_vgafb_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x" + +-# hw/mipsnet.c ++# hw/net/mipsnet.c + mipsnet_send(uint32_t size) "sending len=%u" + mipsnet_receive(uint32_t size) "receiving len=%u" + mipsnet_read(uint64_t addr, uint32_t val) "read addr=0x%" PRIx64 " val=0x%x" + mipsnet_write(uint64_t addr, uint64_t val) "write addr=0x%" PRIx64 " val=0x%" PRIx64 "" + mipsnet_irq(uint32_t isr, uint32_t intctl) "set irq to %d (%02x)" + +-# hw/pc87312.c ++# hw/isa/pc87312.c + pc87312_io_read(uint32_t addr, uint32_t val) "read addr=%x val=%x" + pc87312_io_write(uint32_t addr, uint32_t val) "write addr=%x val=%x" + pc87312_info_floppy(uint32_t base) "base 0x%x" +@@ -804,7 +811,7 @@ xen_map_cache_return(void* ptr) "%p" + # exec.c + qemu_put_ram_ptr(void* addr) "%p" + +-# hw/xen_platform.c ++# hw/xen/xen_platform.c + xen_platform_log(char *s) "xen platform: %s" + + # qemu-coroutine.c +@@ -820,7 +827,7 @@ qemu_co_mutex_lock_return(void *mutex, void *self) "mutex %p self %p" + qemu_co_mutex_unlock_entry(void *mutex, void *self) "mutex %p self %p" + qemu_co_mutex_unlock_return(void *mutex, void *self) "mutex %p self %p" + +-# hw/escc.c ++# hw/char/escc.c + escc_put_queue(char channel, int b) "channel %c put: 0x%02x" + escc_get_queue(char channel, int val) "channel %c get 0x%02x" + escc_update_irq(int irq) "IRQ = %d" +@@ -841,7 +848,7 @@ iscsi_aio_writev(void *iscsi, int64_t sector_num, int nb_sectors, void *opaque, + iscsi_aio_read16_cb(void *iscsi, int status, void *acb, int canceled) "iscsi %p status %d acb %p canceled %d" + iscsi_aio_readv(void *iscsi, int64_t sector_num, int nb_sectors, void *opaque, void *acb) "iscsi %p sector_num %"PRId64" nb_sectors %d opaque %p acb %p" + +-# hw/esp.c ++# hw/scsi/esp.c + esp_error_fifo_overrun(void) "FIFO overrun" + esp_error_unhandled_command(uint32_t val) "unhandled command (%2.2x)" + esp_error_invalid_write(uint32_t val, uint32_t addr) "invalid write of 0x%02x at [0x%x]" +@@ -876,6 +883,8 @@ esp_mem_writeb_cmd_selatn(uint32_t val) "Select with ATN (%2.2x)" + esp_mem_writeb_cmd_selatns(uint32_t val) "Select with ATN & stop (%2.2x)" + esp_mem_writeb_cmd_ensel(uint32_t val) "Enable selection (%2.2x)" + esp_mem_writeb_cmd_dissel(uint32_t val) "Disable selection (%2.2x)" ++ ++# hw/scsi/esp-pci.c + esp_pci_error_invalid_dma_direction(void) "invalid DMA transfer direction" + esp_pci_error_invalid_read(uint32_t reg) "read access outside bounds (reg 0x%x)" + esp_pci_error_invalid_write(uint32_t reg) "write access outside bounds (reg 0x%x)" +@@ -898,7 +907,7 @@ monitor_protocol_event_emit(uint32_t event, void *data) "event=%d data=%p" + monitor_protocol_event_queue(uint32_t event, void *data, uint64_t rate, uint64_t last, uint64_t now) "event=%d data=%p rate=%" PRId64 " last=%" PRId64 " now=%" PRId64 + monitor_protocol_event_throttle(uint32_t event, uint64_t rate) "event=%d rate=%" PRId64 + +-# hw/opencores_eth.c ++# hw/net/opencores_eth.c + open_eth_mii_write(unsigned idx, uint16_t v) "MII[%02x] <- %04x" + open_eth_mii_read(unsigned idx, uint16_t v) "MII[%02x] -> %04x" + open_eth_update_irq(uint32_t v) "IRQ <- %x" +@@ -968,10 +977,12 @@ mmu_helper_get_phys_addr_code(uint32_t tl, int mmu_idx, uint64_t prim_context, u + mmu_helper_get_phys_addr_data(uint32_t tl, int mmu_idx, uint64_t prim_context, uint64_t sec_context, uint64_t address) "tl=%d mmu_idx=%d primary context=%"PRIx64" secondary context=%"PRIx64" address=%"PRIx64"" + mmu_helper_mmu_fault(uint64_t address, uint64_t paddr, int mmu_idx, uint32_t tl, uint64_t prim_context, uint64_t sec_context) "Translate at %"PRIx64" -> %"PRIx64", mmu_idx=%d tl=%d primary context=%"PRIx64" secondary context=%"PRIx64"" + +-# target-sparc/int_helper.c ++# target-sparc/int64_helper.c + int_helper_set_softint(uint32_t softint) "new %08x" + int_helper_clear_softint(uint32_t softint) "new %08x" + int_helper_write_softint(uint32_t softint) "new %08x" ++ ++# target-sparc/int32_helper.c + int_helper_icache_freeze(void) "Instruction cache: freeze" + int_helper_dcache_freeze(void) "Data cache: freeze" + +@@ -990,7 +1001,7 @@ dma_complete(void *dbs, int ret, void *cb) "dbs=%p ret=%d cb=%p" + dma_bdrv_cb(void *dbs, int ret) "dbs=%p ret=%d" + dma_map_wait(void *dbs) "dbs=%p" + +-# console.h ++# ui/console.c + console_gfx_new(void) "" + console_txt_new(int w, int h) "%dx%d" + console_select(int nr) "%d" +@@ -1000,9 +1011,9 @@ displaysurface_create_from(void *display_surface, int w, int h, int bpp, int swa + displaysurface_free(void *display_surface) "surface=%p" + displaychangelistener_register(void *dcl, const char *name) "%p [ %s ]" + displaychangelistener_unregister(void *dcl, const char *name) "%p [ %s ]" +- +-# vga.c + ppm_save(const char *filename, void *display_surface) "%s surface=%p" ++ ++# hw/display/vmware_vga.c + vmware_value_read(uint32_t index, uint32_t value) "index %d, value 0x%x" + vmware_value_write(uint32_t index, uint32_t value) "index %d, value 0x%x" + vmware_palette_read(uint32_t index, uint32_t value) "index %d, value 0x%x" +@@ -1012,7 +1023,6 @@ vmware_scratch_write(uint32_t index, uint32_t value) "index %d, value 0x%x" + vmware_setmode(uint32_t w, uint32_t h, uint32_t bpp) "%dx%d @ %d bpp" + + # savevm.c +- + savevm_section_start(void) "" + savevm_section_end(unsigned int section_id) "section_id %u" + +@@ -1021,7 +1031,7 @@ migration_bitmap_sync_start(void) "" + migration_bitmap_sync_end(uint64_t dirty_pages) "dirty_pages %" PRIu64"" + migration_throttle(void) "" + +-# hw/qxl.c ++# hw/display/qxl.c + disable qxl_interface_set_mm_time(int qid, uint32_t mm_time) "%d %d" + disable qxl_io_write_vga(int qid, const char *mode, uint32_t addr, uint32_t val) "%d %s addr=%u val=%u" + qxl_create_guest_primary(int qid, uint32_t width, uint32_t height, uint64_t mem, uint32_t format, uint32_t position) "%d %ux%u mem=%" PRIx64 " %u,%u" +@@ -1059,12 +1069,6 @@ qxl_ring_res_push_rest(int qid, uint32_t ring_has, uint32_t ring_size, uint32_t + qxl_ring_res_put(int qid, uint32_t free_res) "%d #res=%d" + qxl_set_mode(int qid, int modenr, uint32_t x_res, uint32_t y_res, uint32_t bits, uint64_t devmem) "%d mode=%d [ x=%d y=%d @ bpp=%d devmem=0x%" PRIx64 " ]" + qxl_soft_reset(int qid) "%d" +-qemu_spice_add_memslot(int qid, uint32_t slot_id, unsigned long virt_start, unsigned long virt_end, int async) "%d %u: host virt 0x%lx - 0x%lx async=%d" +-qemu_spice_del_memslot(int qid, uint32_t gid, uint32_t slot_id) "%d gid=%u sid=%u" +-qemu_spice_create_primary_surface(int qid, uint32_t sid, void *surface, int async) "%d sid=%u surface=%p async=%d" +-qemu_spice_destroy_primary_surface(int qid, uint32_t sid, int async) "%d sid=%u async=%d" +-qemu_spice_wakeup(uint32_t qid) "%d" +-qemu_spice_create_update(uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) "lr %d -> %d, tb -> %d -> %d" + qxl_spice_destroy_surfaces_complete(int qid) "%d" + qxl_spice_destroy_surfaces(int qid, int async) "%d async=%d" + qxl_spice_destroy_surface_wait_complete(int qid, uint32_t id) "%d sid=%d" +@@ -1089,13 +1093,21 @@ qxl_client_monitors_config_capped(int qid, int requested, int limit) "%d %d %d" + qxl_client_monitors_config_crc(int qid, unsigned size, uint32_t crc32) "%d %u %u" + qxl_set_client_capabilities_unsupported_by_revision(int qid, int revision) "%d revision=%d" + +-# hw/qxl-render.c ++# ui/spice-display.c ++qemu_spice_add_memslot(int qid, uint32_t slot_id, unsigned long virt_start, unsigned long virt_end, int async) "%d %u: host virt 0x%lx - 0x%lx async=%d" ++qemu_spice_del_memslot(int qid, uint32_t gid, uint32_t slot_id) "%d gid=%u sid=%u" ++qemu_spice_create_primary_surface(int qid, uint32_t sid, void *surface, int async) "%d sid=%u surface=%p async=%d" ++qemu_spice_destroy_primary_surface(int qid, uint32_t sid, int async) "%d sid=%u async=%d" ++qemu_spice_wakeup(uint32_t qid) "%d" ++qemu_spice_create_update(uint32_t left, uint32_t right, uint32_t top, uint32_t bottom) "lr %d -> %d, tb -> %d -> %d" ++ ++# hw/display/qxl-render.c + qxl_render_blit_guest_primary_initialized(void) "" + qxl_render_blit(int32_t stride, int32_t left, int32_t right, int32_t top, int32_t bottom) "stride=%d [%d, %d, %d, %d]" + qxl_render_guest_primary_resized(int32_t width, int32_t height, int32_t stride, int32_t bytes_pp, int32_t bits_pp) "%dx%d, stride %d, bpp %d, depth %d" + qxl_render_update_area_done(void *cookie) "%p" + +-# hw/spapr_pci.c ++# hw/ppc/spapr_pci.c + spapr_pci_msi(const char *msg, uint32_t n, uint32_t ca) "%s (device#%d, cfg=%x)" + spapr_pci_msi_setup(const char *name, unsigned vector, uint64_t addr) "dev\"%s\" vector %u, addr=%"PRIx64 + spapr_pci_rtas_ibm_change_msi(unsigned func, unsigned req) "func %u, requested %u" +@@ -1103,7 +1115,7 @@ spapr_pci_rtas_ibm_query_interrupt_source_number(unsigned ioa, unsigned intr) "q + spapr_pci_msi_write(uint64_t addr, uint64_t data, uint32_t dt_irq) "@%"PRIx64"<=%"PRIx64" IRQ %u" + spapr_pci_lsi_set(const char *busname, int pin, uint32_t irq) "%s PIN%d IRQ %u" + +-# hw/xics.c ++# hw/ppc/xics.c + xics_icp_check_ipi(int server, uint8_t mfrr) "CPU %d can take IPI mfrr=%#x" + xics_icp_accept(uint32_t old_xirr, uint32_t new_xirr) "icp_accept: XIRR %#"PRIx32"->%#"PRIx32 + xics_icp_eoi(int server, uint32_t xirr, uint32_t new_xirr) "icp_eoi: server %d given XIRR %#"PRIx32" new XIRR %#"PRIx32 +@@ -1116,7 +1128,7 @@ xics_ics_write_xive(int nr, int srcno, int server, uint8_t priority) "ics_write_ + xics_ics_reject(int nr, int srcno) "reject irq %#x [src %d]" + xics_ics_eoi(int nr) "ics_eoi: irq %#x" + +-# hbitmap.c ++# util/hbitmap.c + hbitmap_iter_skip_words(const void *hb, void *hbi, uint64_t pos, unsigned long cur) "hb %p hbi %p pos %"PRId64" cur 0x%lx" + hbitmap_reset(void *hb, uint64_t start, uint64_t count, uint64_t sbit, uint64_t ebit) "hb %p items %"PRIu64",%"PRIu64" bits %"PRIu64"..%"PRIu64 + hbitmap_set(void *hb, uint64_t start, uint64_t count, uint64_t sbit, uint64_t ebit) "hb %p items %"PRIu64",%"PRIu64" bits %"PRIu64"..%"PRIu64 +-- +1.7.11.7 + diff --git a/SOURCES/kvm-trace-extract-stap_escape-function-for-reuse.patch b/SOURCES/kvm-trace-extract-stap_escape-function-for-reuse.patch new file mode 100644 index 0000000..c4825c0 --- /dev/null +++ b/SOURCES/kvm-trace-extract-stap_escape-function-for-reuse.patch @@ -0,0 +1,66 @@ +From 7c6cf82e285a657b38a2b2c85e26d975b7e91ae0 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:54 +0200 +Subject: [PATCH 36/43] trace: extract stap_escape() function for reuse + +Message-id: <1412690820-31016-6-git-send-email-stefanha@redhat.com> +Patchwork-id: 61610 +O-Subject: [RHEL7.1 qemu-kvm PATCH 05/11] trace: extract stap_escape() function for reuse +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +SystemTap reserved words sometimes conflict with QEMU variable names. +We escape them to prevent conflicts. + +Move escaping into its own function so the next patch can reuse it. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit a76ccf3c1cb06576af091c5ac8bc264515b1bb7f) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + scripts/tracetool/format/stap.py + +The tracetool downstream code is missing the TCG instrumentation and +multi-backend tracing, which involved a reorganization of the code. +The upstream patch modified scripts/tracetool/format/stap.py but +downstream the right file is scripts/tracetool/backend/dtrace.py. +--- + scripts/tracetool/backend/dtrace.py | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/backend/dtrace.py +index e31bc79..614316f 100644 +--- a/scripts/tracetool/backend/dtrace.py ++++ b/scripts/tracetool/backend/dtrace.py +@@ -35,6 +35,13 @@ def _binary(): + return BINARY + + ++def stap_escape(identifier): ++ # Append underscore to reserved keywords ++ if identifier in RESERVED_WORDS: ++ return identifier + '_' ++ return identifier ++ ++ + def c(events): + pass + +@@ -98,9 +105,7 @@ def stap(events): + i = 1 + if len(e.args) > 0: + for name in e.args.names(): +- # Append underscore to reserved keywords +- if name in RESERVED_WORDS: +- name += '_' ++ name = stap_escape(name) + out(' %s = $arg%d;' % (name, i)) + i += 1 + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-install-simpletrace-SystemTap-tapset.patch b/SOURCES/kvm-trace-install-simpletrace-SystemTap-tapset.patch new file mode 100644 index 0000000..86dbec9 --- /dev/null +++ b/SOURCES/kvm-trace-install-simpletrace-SystemTap-tapset.patch @@ -0,0 +1,97 @@ +From 13f5df42cd4ccb6d199305b1c82bdd6d39403ae8 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:56 +0200 +Subject: [PATCH 38/43] trace: install simpletrace SystemTap tapset + +Message-id: <1412690820-31016-8-git-send-email-stefanha@redhat.com> +Patchwork-id: 61612 +O-Subject: [RHEL7.1 qemu-kvm PATCH 07/11] trace: install simpletrace SystemTap tapset +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +The simpletrace SystemTap tapset outputs simpletrace binary traces for +SystemTap probes. This is useful because SystemTap has no default way +to format or store traces. The simpletrace SystemTap tapset provides an +easy way to store traces. + +The simpletrace.py tool or custom Python scripts using the +simpletrace.py API can analyze SystemTap these traces: + + $ ./configure --enable-trace-backends=dtrace ... + $ make && make install + $ stap -e 'probe qemu.system.x86_64.simpletrace.* {}' \ + -c qemu-system-x86_64 >/tmp/trace.out + $ scripts/simpletrace.py --no-header trace-events /tmp/trace.out + g_malloc 4.531 pid=15519 size=0xb ptr=0x7f8639c10470 + g_malloc 3.264 pid=15519 size=0x300 ptr=0x7f8639c10490 + g_free 5.155 pid=15519 ptr=0x7f8639c0f7b0 + +Note that, unlike qemu-system-x86_64.stp and +qemu-system-x86_64.stp-installed, only one file is needed since the +simpletrace SystemTap tapset does not reference the QEMU binary by path. +Therefore it doesn't matter whether the QEMU binary is installed or not. + +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit e0b2fd0efb4d282bc6fa0ed5397f472298a66ca2) +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina + +Conflicts: + Makefile.target + +Downstream does not have .stp-installed, which was added upstream to +differentiate between .stp files that can be used in the build tree and +.stp files that can be used after make install. Context conflict. + +Also note that downstream uses --backend=$(TRACE_BACKEND) instead of +--backends=$(TRACE_BACKENDS). + +Downstream needs to install the qemu-kvm-simpletrace.stp file right away +to avoid rpm check "unpackaged file" errors, so modify +qemu-kvm.spec.template. +--- + Makefile.target | 11 ++++++++++- + redhat/qemu-kvm.spec.template | 10 +++++++++- + 2 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/Makefile.target b/Makefile.target +index b871dda..ca407d7 100644 +--- a/Makefile.target ++++ b/Makefile.target +@@ -35,7 +35,7 @@ config-target.h: config-target.h-timestamp + config-target.h-timestamp: config-target.mak + + ifdef CONFIG_TRACE_SYSTEMTAP +-stap: $(QEMU_PROG).stp ++stap: $(QEMU_PROG).stp $(QEMU_PROG)-simpletrace.stp + + ifdef CONFIG_USER_ONLY + TARGET_TYPE=user +@@ -51,6 +51,14 @@ $(QEMU_PROG).stp: $(SRC_PATH)/trace-events + --target-arch=$(TARGET_ARCH) \ + --target-type=$(TARGET_TYPE) \ + < $< > $@," GEN $(TARGET_DIR)$(QEMU_PROG).stp") ++ ++$(QEMU_PROG)-simpletrace.stp: $(SRC_PATH)/trace-events ++ $(call quiet-command,$(TRACETOOL) \ ++ --format=simpletrace-stap \ ++ --backend=$(TRACE_BACKEND) \ ++ --probe-prefix=qemu.$(TARGET_TYPE).$(TARGET_ARCH) \ ++ < $< > $@," GEN $(TARGET_DIR)$(QEMU_PROG)-simpletrace.stp") ++ + else + stap: + endif +@@ -194,6 +202,7 @@ endif + ifdef CONFIG_TRACE_SYSTEMTAP + $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset" + $(INSTALL_DATA) $(QEMU_PROG).stp "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset" ++ $(INSTALL_DATA) $(QEMU_PROG)-simpletrace.stp "$(DESTDIR)$(qemu_datadir)/../systemtap/tapset/$(QEMU_PROG)-simpletrace.stp" + endif + + GENERATED_HEADERS += config-target.h +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-install-trace-events-file.patch b/SOURCES/kvm-trace-install-trace-events-file.patch new file mode 100644 index 0000000..8fe8683 --- /dev/null +++ b/SOURCES/kvm-trace-install-trace-events-file.patch @@ -0,0 +1,52 @@ +From a648336c0e837c016bba5f19ec683d09f91471e5 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:57 +0200 +Subject: [PATCH 39/43] trace: install trace-events file + +Message-id: <1412690820-31016-9-git-send-email-stefanha@redhat.com> +Patchwork-id: 61613 +O-Subject: [RHEL7.1 qemu-kvm PATCH 08/11] trace: install trace-events file +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +Install the ./trace-events file into the data directory. This file +contains the list of trace events that were built into QEMU at +compile-time. + +The file is a handy reference for the set of trace events that the QEMU +binary was built with. It is also needed by the simpletrace.py tool +that parses binary trace data either emitted from QEMU when built with +--enable-trace-backend=simple or by the SystemTap simpletrace script +that QEMU provides. + +Signed-off-by: Stefan Hajnoczi +Message-id: 1411486175-3017-1-git-send-email-stefanha@redhat.com +(cherry picked from commit 89ae5831a53e2d30a370e9a30fdb35da5a8f89aa) +Signed-off-by: Stefan Hajnoczi + +Downstream needs to install trace-events in qemu-kvm.spec.template to +prevent rpm check "unpackaged file" errors. + +Signed-off-by: Miroslav Rezanina +--- + Makefile | 1 + + redhat/qemu-kvm.spec.template | 3 ++- + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index f504754..1b0b4f7 100644 +--- a/Makefile ++++ b/Makefile +@@ -406,6 +406,7 @@ endif + set -e; for x in $(KEYMAPS); do \ + $(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \ + done ++ $(INSTALL_DATA) $(SRC_PATH)/trace-events "$(DESTDIR)$(qemu_datadir)/trace-events" + for d in $(TARGET_DIRS); do \ + $(MAKE) -C $$d $@ || exit 1 ; \ + done +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-remove-malloc-tracing.patch b/SOURCES/kvm-trace-remove-malloc-tracing.patch new file mode 100644 index 0000000..ef72ff0 --- /dev/null +++ b/SOURCES/kvm-trace-remove-malloc-tracing.patch @@ -0,0 +1,104 @@ +From d15566b6a91973dbf83c92a9678bd3ac4939af75 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Fri, 29 Jul 2016 07:41:27 +0200 +Subject: [PATCH 16/16] trace: remove malloc tracing + +RH-Author: Miroslav Rezanina +Message-id: <1469778087-316-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 71514 +O-Subject: [RHEL-7.3 qemu-kvm PATCH] trace: remove malloc tracing +Bugzilla: 1360137 +RH-Acked-by: Fam Zheng +RH-Acked-by: Markus Armbruster +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Laurent Vivier + +From: Paolo Bonzini + +The malloc vtable is not supported anymore in glib, because it broke +when constructors called g_malloc. Remove tracing of g_malloc, +g_realloc and g_free calls. + +Note that, for systemtap users, glib also provides tracepoints +glib.mem_alloc, glib.mem_free, glib.mem_realloc, glib.slice_alloc +and glib.slice_free. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Alberto Garcia +Message-id: 1442417924-25831-1-git-send-email-pbonzini@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 98cf48f60aa4999f5b2808569a193a401a390e6a) +Signed-off-by: Miroslav Rezanina +--- + trace-events | 3 --- + vl.c | 26 -------------------------- + 2 files changed, 29 deletions(-) + +diff --git a/trace-events b/trace-events +index af5147a..6cd46e9 100644 +--- a/trace-events ++++ b/trace-events +@@ -474,9 +474,6 @@ scsi_request_sense(int target, int lun, int tag) "target %d lun %d tag %d" + vm_state_notify(int running, int reason) "running %d reason %d" + load_file(const char *name, const char *path) "name %s location %s" + runstate_set(int new_state) "new state %d" +-g_malloc(size_t size, void *ptr) "size %zu ptr %p" +-g_realloc(void *ptr, size_t size, void *newptr) "ptr %p size %zu newptr %p" +-g_free(void *ptr) "ptr %p" + qemu_system_shutdown_request(void) "" + qemu_system_powerdown_request(void) "" + +diff --git a/vl.c b/vl.c +index 35b927e..9756361 100644 +--- a/vl.c ++++ b/vl.c +@@ -2738,26 +2738,6 @@ static const QEMUOption *lookup_opt(int argc, char **argv, + return popt; + } + +-static gpointer malloc_and_trace(gsize n_bytes) +-{ +- void *ptr = malloc(n_bytes); +- trace_g_malloc(n_bytes, ptr); +- return ptr; +-} +- +-static gpointer realloc_and_trace(gpointer mem, gsize n_bytes) +-{ +- void *ptr = realloc(mem, n_bytes); +- trace_g_realloc(mem, n_bytes, ptr); +- return ptr; +-} +- +-static void free_and_trace(gpointer mem) +-{ +- trace_g_free(mem); +- free(mem); +-} +- + static int object_set_property(const char *name, const char *value, void *opaque) + { + Object *obj = OBJECT(opaque); +@@ -2832,11 +2812,6 @@ int main(int argc, char **argv, char **envp) + bool userconfig = true; + const char *log_mask = NULL; + const char *log_file = NULL; +- GMemVTable mem_trace = { +- .malloc = malloc_and_trace, +- .realloc = realloc_and_trace, +- .free = free_and_trace, +- }; + const char *trace_events = NULL; + const char *trace_file = NULL; + FILE *vmstate_dump_file = NULL; +@@ -2845,7 +2820,6 @@ int main(int argc, char **argv, char **envp) + error_set_progname(argv[0]); + qemu_init_exec_dir(argv[0]); + +- g_mem_set_vtable(&mem_trace); + if (!g_thread_supported()) { + #if !GLIB_CHECK_VERSION(2, 31, 0) + g_thread_init(NULL); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-trace-use-unique-Red-Hat-version-number-in-simpletra.patch b/SOURCES/kvm-trace-use-unique-Red-Hat-version-number-in-simpletra.patch new file mode 100644 index 0000000..1c483c4 --- /dev/null +++ b/SOURCES/kvm-trace-use-unique-Red-Hat-version-number-in-simpletra.patch @@ -0,0 +1,78 @@ +From 002f410771e49dbfe738a2c31a231b5e0ca97b38 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 7 Oct 2014 14:06:50 +0200 +Subject: [PATCH 32/43] trace: use unique Red Hat version number in simpletrace + +Message-id: <1412690820-31016-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 61606 +O-Subject: [RHEL7.1 qemu-kvm PATCH 01/11] trace: use unique Red Hat version number in simpletrace +Bugzilla: 1088112 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Paolo Bonzini + +The simpletrace format has changed upstream several times. RHEL7 +qemu-kvm is currently at version 2 level, but now we need to add the pid +field. This means we need to bump the version number. + +Upstream version 3 changed the way that trace event IDs are calculated. +Those tracetool changes are not downstream. + +Avoid colliding with upstream version numbers - just in case binary +trace files from upstream and RHEL are exchanged. Use a unique part of +the 64-bit version number namespace (based on Red Hat's PCI vendor ID). + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + scripts/simpletrace.py | 11 ++++++----- + trace/simple.c | 2 +- + 2 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/scripts/simpletrace.py b/scripts/simpletrace.py +index 8bbcb42..3cb2cf0 100755 +--- a/scripts/simpletrace.py ++++ b/scripts/simpletrace.py +@@ -18,6 +18,7 @@ from tracetool.backend.simple import is_string + header_event_id = 0xffffffffffffffff + header_magic = 0xf2b177cb0aa429b4 + dropped_event_id = 0xfffffffffffffffe ++red_hat_version = 0x00001af400000000 + + log_header_fmt = '=QQQ' + rec_header_fmt = '=QQII' +@@ -65,13 +66,13 @@ def read_trace_file(edict, fobj): + header[0] != header_event_id or \ + header[1] != header_magic: + raise ValueError('Not a valid trace file!') +- if header[2] != 0 and \ +- header[2] != 2: +- raise ValueError('Unknown version of tracelog format!') + + log_version = header[2] +- if log_version == 0: +- raise ValueError('Older log format, not supported with this QEMU release!') ++ if log_version not in [0, 2, 3, red_hat_version]: ++ raise ValueError('Unknown version of tracelog format!') ++ if log_version != red_hat_version: ++ raise ValueError('Log format %d not supported with this QEMU release!' ++ % log_version) + + while True: + rec = read_record(edict, fobj) +diff --git a/trace/simple.c b/trace/simple.c +index 1e3f691..64e196a 100644 +--- a/trace/simple.c ++++ b/trace/simple.c +@@ -27,7 +27,7 @@ + #define HEADER_MAGIC 0xf2b177cb0aa429b4ULL + + /** Trace file version number, bump if format changes */ +-#define HEADER_VERSION 2 ++#define HEADER_VERSION 0x00001af400000000ULL + + /** Records were dropped event ID */ + #define DROPPED_EVENT_ID (~(uint64_t)0 - 1) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-onl.patch b/SOURCES/kvm-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-onl.patch new file mode 100644 index 0000000..78d3bef --- /dev/null +++ b/SOURCES/kvm-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-onl.patch @@ -0,0 +1,177 @@ +From 8061ffe654905d1e184b82cb4b4d75647618a0c1 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Thu, 24 Apr 2014 10:57:23 +0200 +Subject: [PATCH 11/12] uhci: UNfix irq routing for RHEL-6 machtypes (RHEL only) + +RH-Author: Laszlo Ersek +Message-id: <1398337043-4967-1-git-send-email-lersek@redhat.com> +Patchwork-id: 58540 +O-Subject: [RHEL-7.0 0day qemu-kvm PATCH] uhci: UNfix irq routing for RHEL-6 machtypes (RHEL only) +Bugzilla: 1085701 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1085701 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=7368968 + +Tested by myself and QE. + +(Note that the bulk of the work related to this issue happened in bug +1027565 comments 64 to 74, because QE was experiencing it with the other +(original) issue reported in bug 1027565. Only later did I realize that +bug 1085701 already existed for this specific problem.) + +Refer to the following upstream commit, present in v1.2.0 and RHEL-7: + + commit 973002c11460efd3c17fe61a76711a103e30e1f9 + Author: Gerd Hoffmann + Date: Fri May 25 12:53:47 2012 +0200 + + uhci: fix irq routing + + The multifunction ich9 ehci controller with uhci companions uses a + different interrupt pin for each function. The three uhci devices + get pins A, B and C, whereas ehci uses pin D. This way the guest + can assign different IRQ lines to each controller. + + Signed-off-by: Gerd Hoffmann + +This is a performance optimization so that IRQ sharing can be avoided in +the guest. + +Contrarily, the RHEL-6 emulator exclusively assigns pin D to each of the +three devices (see "hw/usb-uhci.c" there): +- usb_uhci_ich9_1_initfn() +- usb_uhci_ich9_2_initfn() +- usb_uhci_ich9_3_initfn() + +These init functions call usb_uhci_common_initfn(), which in turn assigns: + + pci_conf[0x3d] = 4; // interrupt pin 3 + +This mismatch breaks migration for rhel6.x.0 machine types from the +RHEL-6.5 emulator to the RHEL-7.0 one. + +For example, considering the uhci1 controller, the guest kernel, started +on the RHEL-6.5 source host, will see pin D advertised, and (according to +the PCI interrupt routing table provided by SeaBIOS) will route it to IRQ +11: + + dmesg: + + uhci_hcd 0000:00:11.0: PCI INT D -> Link[LNKD] -> GSI 11 (level, high) + -> IRQ 11 + + /proc/interrupts: + + 10: ... IO-APIC-fasteoi virtio0 + 11: ... IO-APIC-fasteoi uhci_hcd:usb1 + +When the same guest kernel, using the same rhel6.5.0 machine type, is +started fresh on the RHEL-7.0 target host, pin A is advertised instead +(and routed to a different IRQ, based on the same table from SeaBIOS): + + dmesg: + + uhci_hcd 0000:00:11.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, high) + -> IRQ 10 + + /proc/interrupts: + + 10: ... IO-APIC-fasteoi uhci_hcd:usb1, virtio0 + +This is no problem as long as we don't migrate. + +When we migrate the rhel6.x.0 machtype guest from the RHEL-6.5 host to the +RHEL-7.0 host, the guest kernel (having booted on the source host) will +expect the interrupts for the UHCI device on pin D / IRQ 11. However, the +target host will inject the interrupts on pin A / IRQ 10. No handler in +the guest kernel will claim such IRQ 10 instances (examples are: HDA or +virtio-balloon), hence IRQ 10 will be disabled. + +We can fix this in at least two ways: +(1) Drop the persistent "UHCIState.irq_pin" field, and simply use the pin + identifier that is stored in (already migrated) PCI config space (at + offset 0x3d). +(2) Introduce yet another RHEL-6 compatibility knob that selects pin D for + all three ICH9-UHCI controllers. + +Since PCI config space could be write-accessible to the guest, plus it +could originate from an untrusted migration source as well, and we'd use +the setting as a subscript into the s->dev.irq[] array in +uhci_update_irq(), it seems safer to go with (2). + +Signed-off-by: Laszlo Ersek +--- + include/hw/usb.h | 4 ++++ + hw/i386/pc_piix.c | 1 + + hw/usb/hcd-uhci.c | 13 ++++++++++++- + 3 files changed, 17 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 1 + + hw/usb/hcd-uhci.c | 13 ++++++++++++- + include/hw/usb.h | 4 ++++ + 3 files changed, 17 insertions(+), 1 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index fea98b6..67d51da 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -955,6 +955,7 @@ static void pc_compat_rhel650(QEMUMachineInitArgs *args) + has_acpi_build = false; + gigabyte_align = false; + shadow_bios_after_incoming = true; ++ ich9_uhci123_irqpin_override = true; + } + + static void pc_init_rhel650(QEMUMachineInitArgs *args) +diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c +index 4fc3410..3380107 100644 +--- a/hw/usb/hcd-uhci.c ++++ b/hw/usb/hcd-uhci.c +@@ -187,6 +187,8 @@ typedef struct UHCI_QH { + uint32_t el_link; + } UHCI_QH; + ++bool ich9_uhci123_irqpin_override; ++ + static void uhci_async_cancel(UHCIAsync *async); + static void uhci_queue_fill(UHCIQueue *q, UHCI_TD *td); + +@@ -1232,7 +1234,16 @@ static int usb_uhci_common_initfn(PCIDevice *dev) + /* TODO: reset value should be 0. */ + pci_conf[USB_SBRN] = USB_RELEASE_1; // release number + +- s->irq_pin = u->info.irq_pin; ++ if (ich9_uhci123_irqpin_override && ++ u->info.vendor_id == PCI_VENDOR_ID_INTEL && ++ (u->info.device_id == PCI_DEVICE_ID_INTEL_82801I_UHCI1 || ++ u->info.device_id == PCI_DEVICE_ID_INTEL_82801I_UHCI2 || ++ u->info.device_id == PCI_DEVICE_ID_INTEL_82801I_UHCI3)) { ++ fprintf(stderr, "RHEL-6 compat: %s: irq_pin = 3\n", u->info.name); ++ s->irq_pin = 3; ++ } else { ++ s->irq_pin = u->info.irq_pin; ++ } + pci_config_set_interrupt_pin(pci_conf, s->irq_pin + 1); + + if (s->masterbus) { +diff --git a/include/hw/usb.h b/include/hw/usb.h +index b111be0..5668701 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -578,4 +578,8 @@ int usb_get_quirks(uint16_t vendor_id, uint16_t product_id, + uint8_t interface_class, uint8_t interface_subclass, + uint8_t interface_protocol); + ++ ++/* hcd-uhci.c -- RHEL-6 machine type compatibility */ ++extern bool ich9_uhci123_irqpin_override; ++ + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-uhci-egsm-fix.patch b/SOURCES/kvm-uhci-egsm-fix.patch new file mode 100644 index 0000000..6d07ffe --- /dev/null +++ b/SOURCES/kvm-uhci-egsm-fix.patch @@ -0,0 +1,56 @@ +From a558699e5f028623c2d5f9bb60d28b8f56b7766a Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:36 +0200 +Subject: [PATCH 03/43] uhci: egsm fix + +Message-id: <1405088470-24115-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 59820 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 03/37] uhci: egsm fix +Bugzilla: 1046873 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +When the guest goes suspend the uhci controller while there are +pending resume requests on the ports go signal global resume +instantly. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 9f0f1a0c096f29a856f2e6903beda45b44ce9cdd) +--- + hw/usb/hcd-uhci.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-uhci.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c +index 3380107..989c37a 100644 +--- a/hw/usb/hcd-uhci.c ++++ b/hw/usb/hcd-uhci.c +@@ -191,6 +191,7 @@ bool ich9_uhci123_irqpin_override; + + static void uhci_async_cancel(UHCIAsync *async); + static void uhci_queue_fill(UHCIQueue *q, UHCI_TD *td); ++static void uhci_resume(void *opaque); + + static inline int32_t uhci_queue_token(UHCI_TD *td) + { +@@ -500,6 +501,12 @@ static void uhci_port_write(void *opaque, hwaddr addr, + return; + } + s->cmd = val; ++ if (val & UHCI_CMD_EGSM) { ++ if ((s->ports[0].ctrl & UHCI_PORT_RD) || ++ (s->ports[1].ctrl & UHCI_PORT_RD)) { ++ uhci_resume(s); ++ } ++ } + break; + case 0x02: + s->status &= ~val; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-uhci-invalidate-queue-on-device-address-changes.patch b/SOURCES/kvm-uhci-invalidate-queue-on-device-address-changes.patch new file mode 100644 index 0000000..82807a8 --- /dev/null +++ b/SOURCES/kvm-uhci-invalidate-queue-on-device-address-changes.patch @@ -0,0 +1,43 @@ +From c5deaa70b6b347189a53bd2b058164dffc439a59 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:56 +0200 +Subject: [PATCH 22/43] uhci: invalidate queue on device address changes + +Message-id: <1405088470-24115-24-git-send-email-kraxel@redhat.com> +Patchwork-id: 59851 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 23/37] uhci: invalidate queue on device address changes +Bugzilla: 1111450 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c348e481759057c925cce4bf54336f1518b8c702) +--- + hw/usb/hcd-uhci.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-uhci.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c +index 989c37a..f38f737 100644 +--- a/hw/usb/hcd-uhci.c ++++ b/hw/usb/hcd-uhci.c +@@ -254,9 +254,11 @@ static bool uhci_queue_verify(UHCIQueue *queue, uint32_t qh_addr, UHCI_TD *td, + uint32_t td_addr, bool queuing) + { + UHCIAsync *first = QTAILQ_FIRST(&queue->asyncs); ++ uint32_t queue_token_addr = (queue->token >> 8) & 0x7f; + + return queue->qh_addr == qh_addr && + queue->token == uhci_queue_token(td) && ++ queue_token_addr == queue->ep->dev->addr && + (queuing || !(td->ctrl & TD_CTRL_ACTIVE) || first == NULL || + first->td_addr == td_addr); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-avoid-pointless-VNC-updates-if-framebuffer-isn-t-.patch b/SOURCES/kvm-ui-avoid-pointless-VNC-updates-if-framebuffer-isn-t-.patch new file mode 100644 index 0000000..1007023 --- /dev/null +++ b/SOURCES/kvm-ui-avoid-pointless-VNC-updates-if-framebuffer-isn-t-.patch @@ -0,0 +1,54 @@ +From cbfdbd7430e27c24d55b880144d5df05ef949417 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:31 +0100 +Subject: [PATCH 17/27] ui: avoid pointless VNC updates if framebuffer isn't + dirty +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-18-berrange@redhat.com> +Patchwork-id: 78946 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 17/27] ui: avoid pointless VNC updates if framebuffer isn't dirty +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +The vnc_update_client() method checks the 'has_dirty' flag to see if there are +dirty regions that are pending to send to the client. Regardless of this flag, +if a forced update is requested, updates must be sent. For unknown reasons +though, the code also tries to sent updates if audio capture is enabled. This +makes no sense as audio capture state does not impact framebuffer contents, so +this check is removed. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-5-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 3541b08475d51bddf8aded36576a0ff5a547a978) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index aebaa37..eea5702 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -869,7 +869,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + return 0; + } + +- if (!vs->has_dirty && !vs->audio_cap && !vs->force_update) { ++ if (!vs->has_dirty && !vs->force_update) { + return 0; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-avoid-sign-extension-using-client-width-height.patch b/SOURCES/kvm-ui-avoid-sign-extension-using-client-width-height.patch new file mode 100644 index 0000000..c5b8cbb --- /dev/null +++ b/SOURCES/kvm-ui-avoid-sign-extension-using-client-width-height.patch @@ -0,0 +1,115 @@ +From 023a741e196fd99b532f69df9560730425b174a0 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:39 +0100 +Subject: [PATCH 25/27] ui: avoid sign extension using client width/height + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-26-berrange@redhat.com> +Patchwork-id: 78960 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 25/27] ui: avoid sign extension using client width/height +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +Pixman returns a signed int for the image width/height, but the VNC +protocol only permits a unsigned int16. Effective framebuffer size +is determined by the guest, limited by the video RAM size, so the +dimensions are unlikely to exceed the range of an unsigned int16, +but this is not currently validated. + +With the current use of 'int' for client width/height, the calculation +of offsets in vnc_update_throttle_offset() suffers from integer size +promotion and sign extension, causing coverity warnings + +*** CID 1385147: Integer handling issues (SIGN_EXTENSION) +/ui/vnc.c: 979 in vnc_update_throttle_offset() +973 * than that the client would already suffering awful audio +974 * glitches, so dropping samples is no worse really). +975 */ +976 static void vnc_update_throttle_offset(VncState *vs) +977 { +978 size_t offset = +>>> CID 1385147: Integer handling issues (SIGN_EXTENSION) +>>> Suspicious implicit sign extension: + "vs->client_pf.bytes_per_pixel" with type "unsigned char" (8 bits, + unsigned) is promoted in "vs->client_width * vs->client_height * + vs->client_pf.bytes_per_pixel" to type "int" (32 bits, signed), then + sign-extended to type "unsigned long" (64 bits, unsigned). If + "vs->client_width * vs->client_height * vs->client_pf.bytes_per_pixel" + is greater than 0x7FFFFFFF, the upper bits of the result will all be 1. +979 vs->client_width * vs->client_height * vs->client_pf.bytes_per_pixel; + +Change client_width / client_height to be a size_t to avoid sign +extension and integer promotion. Then validate that dimensions are in +range wrt the RFB protocol u16 limits. + +Signed-off-by: Daniel P. Berrange +Message-id: 20180118155254.17053-1-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4c956bd81e2e16afd19d38d1fdeba6d9faa8a1ae) + + Conflicts: + ui/vnc.c + ui/vnc.h - context differences + +RHEL-7 note: The context difference in VncState is because downstream +lacks commit 14768eba46e4 ("input: mouse: switch vnc ui to new core", +2014-03-05), part of v2.0.0. The context difference in +protocol_client_init() is because downstream lacks e5f34cdd2da5 ("vnc: +track & limit connections", 2015-01-22), part of v2.3.0. Neither +upstream commit is necessary for this backport. + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 9 +++++++++ + ui/vnc.h | 4 ++-- + 2 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 61fbec2..2be87b8 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -570,6 +570,11 @@ static void vnc_desktop_resize(VncState *vs) + vs->client_height == pixman_image_get_height(vs->vd->server)) { + return; + } ++ ++ assert(pixman_image_get_width(vs->vd->server) < 65536 && ++ pixman_image_get_width(vs->vd->server) >= 0); ++ assert(pixman_image_get_height(vs->vd->server) < 65536 && ++ pixman_image_get_height(vs->vd->server) >= 0); + vs->client_width = pixman_image_get_width(vs->vd->server); + vs->client_height = pixman_image_get_height(vs->vd->server); + vnc_lock_output(vs); +@@ -2387,6 +2392,10 @@ static int protocol_client_init(VncState *vs, uint8_t *data, size_t len) + } + vnc_set_share_mode(vs, mode); + ++ assert(pixman_image_get_width(vs->vd->server) < 65536 && ++ pixman_image_get_width(vs->vd->server) >= 0); ++ assert(pixman_image_get_height(vs->vd->server) < 65536 && ++ pixman_image_get_height(vs->vd->server) >= 0); + vs->client_width = pixman_image_get_width(vs->vd->server); + vs->client_height = pixman_image_get_height(vs->vd->server); + vnc_write_u16(vs, vs->client_width); +diff --git a/ui/vnc.h b/ui/vnc.h +index 70316ba..f9c5f89 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -274,8 +274,8 @@ struct VncState + int absolute; + int last_x; + int last_y; +- int client_width; +- int client_height; ++ size_t client_width; /* limited to u16 by RFB proto */ ++ size_t client_height; /* limited to u16 by RFB proto */ + VncShareMode share_mode; + + uint32_t vnc_encoding; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-correctly-advance-output-buffer-when-writing-SASL.patch b/SOURCES/kvm-ui-correctly-advance-output-buffer-when-writing-SASL.patch new file mode 100644 index 0000000..98853de --- /dev/null +++ b/SOURCES/kvm-ui-correctly-advance-output-buffer-when-writing-SASL.patch @@ -0,0 +1,66 @@ +From 1bf158dc510fc63f11725f2350369d06a3fff929 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:40 +0100 +Subject: [PATCH 26/27] ui: correctly advance output buffer when writing SASL + data +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-27-berrange@redhat.com> +Patchwork-id: 78955 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 26/27] ui: correctly advance output buffer when writing SASL data +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +In this previous commit: + + commit 8f61f1c5a6bc06438a1172efa80bc7606594fa07 + Author: Daniel P. Berrange + Date: Mon Dec 18 19:12:20 2017 +0000 + + ui: track how much decoded data we consumed when doing SASL encoding + +I attempted to fix a flaw with tracking how much data had actually been +processed when encoding with SASL. With that flaw, the VNC server could +mistakenly discard queued data that had not been sent. + +The fix was not quite right though, because it merely decremented the +vs->output.offset value. This is effectively discarding data from the +end of the pending output buffer. We actually need to discard data from +the start of the pending output buffer. We also want to free memory that +is no longer required. The correct way to handle this is to use the +buffer_advance() helper method instead of directly manipulating the +offset value. + +Reported-by: Laszlo Ersek +Signed-off-by: Daniel P. Berrangé +Reviewed-by: Eric Blake +Reviewed-by: Laszlo Ersek +Message-id: 20180201155841.27509-1-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 627ebec208a8809818589e17f4fce55a59420ad2) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-auth-sasl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui/vnc-auth-sasl.c b/ui/vnc-auth-sasl.c +index 8188081..c39f588 100644 +--- a/ui/vnc-auth-sasl.c ++++ b/ui/vnc-auth-sasl.c +@@ -81,7 +81,7 @@ long vnc_client_write_sasl(VncState *vs) + } else { + vs->force_update_offset -= vs->sasl.encodedRawLength; + } +- vs->output.offset -= vs->sasl.encodedRawLength; ++ buffer_advance(&vs->output, vs->sasl.encodedRawLength); + vs->sasl.encoded = NULL; + vs->sasl.encodedOffset = vs->sasl.encodedLength = 0; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-correctly-reset-framebuffer-update-state-after-pr.patch b/SOURCES/kvm-ui-correctly-reset-framebuffer-update-state-after-pr.patch new file mode 100644 index 0000000..945a3aa --- /dev/null +++ b/SOURCES/kvm-ui-correctly-reset-framebuffer-update-state-after-pr.patch @@ -0,0 +1,62 @@ +From 3d48415578c65490675616d41a32a1e9e3a71f43 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:34 +0100 +Subject: [PATCH 20/27] ui: correctly reset framebuffer update state after + processing dirty regions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-21-berrange@redhat.com> +Patchwork-id: 78941 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 20/27] ui: correctly reset framebuffer update state after processing dirty regions +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +According to the RFB protocol, a client sends one or more framebuffer update +requests to the server. The server can reply with a single framebuffer update +response, that covers all previously received requests. Once the client has +read this update from the server, it may send further framebuffer update +requests to monitor future changes. The client is free to delay sending the +framebuffer update request if it needs to throttle the amount of data it is +reading from the server. + +The QEMU VNC server, however, has never correctly handled the framebuffer +update requests. Once QEMU has received an update request, it will continue to +send client updates forever, even if the client hasn't asked for further +updates. This prevents the client from throttling back data it gets from the +server. This change fixes the flawed logic such that after a set of updates are +sent out, QEMU waits for a further update request before sending more data. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-8-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 728a7ac95484a7ba5e624ccbac4c1326571576b0) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 7239602..075def1 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -910,7 +910,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + } + + vnc_job_push(job); +- vs->update = VNC_STATE_UPDATE_INCREMENTAL; ++ vs->update = VNC_STATE_UPDATE_NONE; + vs->has_dirty = 0; + return n; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-fix-VNC-client-throttling-when-audio-capture-is-a.patch b/SOURCES/kvm-ui-fix-VNC-client-throttling-when-audio-capture-is-a.patch new file mode 100644 index 0000000..ec38157 --- /dev/null +++ b/SOURCES/kvm-ui-fix-VNC-client-throttling-when-audio-capture-is-a.patch @@ -0,0 +1,228 @@ +From a12ad57f4b108dc98987b2002169ccfbbd76721d Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:36 +0100 +Subject: [PATCH 22/27] ui: fix VNC client throttling when audio capture is + active +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-23-berrange@redhat.com> +Patchwork-id: 78958 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 22/27] ui: fix VNC client throttling when audio capture is active +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +The VNC server must throttle data sent to the client to prevent the 'output' +buffer size growing without bound, if the client stops reading data off the +socket (either maliciously or due to stalled/slow network connection). + +The current throttling is very crude because it simply checks whether the +output buffer offset is zero. This check must be disabled if audio capture is +enabled, because when streaming audio the output buffer offset will rarely be +zero due to queued audio data, and so this would starve framebuffer updates. + +As a result, the VNC client can cause QEMU to allocate arbitrary amounts of RAM. +They can first start something in the guest that triggers lots of framebuffer +updates eg play a youtube video. Then enable audio capture, and simply never +read data back from the server. This can easily make QEMU's VNC server send +buffer consume 100MB of RAM per second, until the OOM killer starts reaping +processes (hopefully the rogue QEMU process, but it might pick others...). + +To address this we make the throttling more intelligent, so we can throttle +when audio capture is active too. To determine how to throttle incremental +updates or audio data, we calculate a size threshold. Normally the threshold is +the approximate number of bytes associated with a single complete framebuffer +update. ie width * height * bytes per pixel. We'll send incremental updates +until we hit this threshold, at which point we'll stop sending updates until +data has been written to the wire, causing the output buffer offset to fall +back below the threshold. + +If audio capture is enabled, we increase the size of the threshold to also +allow for upto 1 seconds worth of audio data samples. ie nchannels * bytes +per sample * frequency. This allows the output buffer to have a mixture of +incremental framebuffer updates and audio data queued, but once the threshold +is exceeded, audio data will be dropped and incremental updates will be +throttled. + +This unbounded memory growth affects all VNC server configurations supported by +QEMU, with no workaround possible. The mitigating factor is that it can only be +triggered by a client that has authenticated with the VNC server, and who is +able to trigger a large quantity of framebuffer updates or audio samples from +the guest OS. Mostly they'll just succeed in getting the OOM killer to kill +their own QEMU process, but its possible other processes can get taken out as +collateral damage. + +This is a more general variant of the similar unbounded memory usage flaw in +the websockets server, that was previously assigned CVE-2017-15268, and fixed +in 2.11 by: + + commit a7b20a8efa28e5f22c26c06cd06c2f12bc863493 + Author: Daniel P. Berrange + Date: Mon Oct 9 14:43:42 2017 +0100 + + io: monitor encoutput buffer size from websocket GSource + +This new general memory usage flaw has been assigned CVE-2017-15124, and is +partially fixed by this patch. + +RHEL-7 note: minimal context differences in "struct VncState" due to +downstream lacking (a) commit fb6ba0d5256c ("qapi event: convert VNC +events", 2014-06-23), part of v2.1.0, and (b) commit 8e9b0d24fb98 ("ui: +convert VNC websockets to use crypto APIs", 2015-07-08), part of v2.4.0. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-10-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit e2b72cb6e0443d90d7ab037858cb6834b6cca852) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- + ui/vnc.h | 6 ++++++ + 2 files changed, 70 insertions(+), 8 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index a7ec8cc..952a051 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -47,6 +47,7 @@ static VncDisplay *vnc_display; /* needed for info vnc */ + + static int vnc_cursor_define(VncState *vs); + static void vnc_release_modifiers(VncState *vs); ++static void vnc_update_throttle_offset(VncState *vs); + + static void vnc_set_share_mode(VncState *vs, VncShareMode mode) + { +@@ -664,6 +665,7 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + vnc_set_area_dirty(vs->dirty, vd, 0, 0, + vnc_width(vd), + vnc_height(vd)); ++ vnc_update_throttle_offset(vs); + } + } + +@@ -846,16 +848,67 @@ static int find_and_clear_dirty_height(struct VncState *vs, + return h; + } + ++/* ++ * Figure out how much pending data we should allow in the output ++ * buffer before we throttle incremental display updates, and/or ++ * drop audio samples. ++ * ++ * We allow for equiv of 1 full display's worth of FB updates, ++ * and 1 second of audio samples. If audio backlog was larger ++ * than that the client would already suffering awful audio ++ * glitches, so dropping samples is no worse really). ++ */ ++static void vnc_update_throttle_offset(VncState *vs) ++{ ++ size_t offset = ++ vs->client_width * vs->client_height * vs->client_pf.bytes_per_pixel; ++ ++ if (vs->audio_cap) { ++ int freq = vs->as.freq; ++ /* We don't limit freq when reading settings from client, so ++ * it could be upto MAX_INT in size. 48khz is a sensible ++ * upper bound for trustworthy clients */ ++ int bps; ++ if (freq > 48000) { ++ freq = 48000; ++ } ++ switch (vs->as.fmt) { ++ default: ++ case AUD_FMT_U8: ++ case AUD_FMT_S8: ++ bps = 1; ++ break; ++ case AUD_FMT_U16: ++ case AUD_FMT_S16: ++ bps = 2; ++ break; ++ case AUD_FMT_U32: ++ case AUD_FMT_S32: ++ bps = 4; ++ break; ++ } ++ offset += freq * bps * vs->as.nchannels; ++ } ++ ++ /* Put a floor of 1MB on offset, so that if we have a large pending ++ * buffer and the display is resized to a small size & back again ++ * we don't suddenly apply a tiny send limit ++ */ ++ offset = MAX(offset, 1024 * 1024); ++ ++ vs->throttle_output_offset = offset; ++} ++ + static bool vnc_should_update(VncState *vs) + { + switch (vs->update) { + case VNC_STATE_UPDATE_NONE: + break; + case VNC_STATE_UPDATE_INCREMENTAL: +- /* Only allow incremental updates if the output buffer +- * is empty, or if audio capture is enabled. ++ /* Only allow incremental updates if the pending send queue ++ * is less than the permitted threshold + */ +- if (!vs->output.offset || vs->audio_cap) { ++ if (vs->output.offset < vs->throttle_output_offset) { + return true; + } + break; +@@ -963,11 +1016,13 @@ static void audio_capture(void *opaque, void *buf, int size) + VncState *vs = opaque; + + vnc_lock_output(vs); +- vnc_write_u8(vs, VNC_MSG_SERVER_QEMU); +- vnc_write_u8(vs, VNC_MSG_SERVER_QEMU_AUDIO); +- vnc_write_u16(vs, VNC_MSG_SERVER_QEMU_AUDIO_DATA); +- vnc_write_u32(vs, size); +- vnc_write(vs, buf, size); ++ if (vs->output.offset < vs->throttle_output_offset) { ++ vnc_write_u8(vs, VNC_MSG_SERVER_QEMU); ++ vnc_write_u8(vs, VNC_MSG_SERVER_QEMU_AUDIO); ++ vnc_write_u16(vs, VNC_MSG_SERVER_QEMU_AUDIO_DATA); ++ vnc_write_u32(vs, size); ++ vnc_write(vs, buf, size); ++ } + vnc_unlock_output(vs); + vnc_flush(vs); + } +@@ -2214,6 +2269,7 @@ static int protocol_client_msg(VncState *vs, uint8_t *data, size_t len) + break; + } + ++ vnc_update_throttle_offset(vs); + vnc_read_when(vs, protocol_client_msg, 1); + return 0; + } +diff --git a/ui/vnc.h b/ui/vnc.h +index f19fd0a..d7eede3 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -301,6 +301,12 @@ struct VncState + + QObject *info; + ++ /* We allow multiple incremental updates or audio capture ++ * samples to be queued in output buffer, provided the ++ * buffer size doesn't exceed this threshold. The value ++ * is calculating dynamically based on framebuffer size ++ * and audio sample settings in vnc_update_throttle_offset() */ ++ size_t throttle_output_offset; + Buffer output; + Buffer input; + #ifdef CONFIG_VNC_WS +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-fix-VNC-client-throttling-when-forced-update-is-r.patch b/SOURCES/kvm-ui-fix-VNC-client-throttling-when-forced-update-is-r.patch new file mode 100644 index 0000000..aecf6a0 --- /dev/null +++ b/SOURCES/kvm-ui-fix-VNC-client-throttling-when-forced-update-is-r.patch @@ -0,0 +1,207 @@ +From 0f463c3d8c457d6a0bf3b91e48fc4e9162061cf6 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:37 +0100 +Subject: [PATCH 23/27] ui: fix VNC client throttling when forced update is + requested +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-24-berrange@redhat.com> +Patchwork-id: 78949 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 23/27] ui: fix VNC client throttling when forced update is requested +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +The VNC server must throttle data sent to the client to prevent the 'output' +buffer size growing without bound, if the client stops reading data off the +socket (either maliciously or due to stalled/slow network connection). + +The current throttling is very crude because it simply checks whether the +output buffer offset is zero. This check is disabled if the client has requested +a forced update, because we want to send these as soon as possible. + +As a result, the VNC client can cause QEMU to allocate arbitrary amounts of RAM. +They can first start something in the guest that triggers lots of framebuffer +updates eg play a youtube video. Then repeatedly send full framebuffer update +requests, but never read data back from the server. This can easily make QEMU's +VNC server send buffer consume 100MB of RAM per second, until the OOM killer +starts reaping processes (hopefully the rogue QEMU process, but it might pick +others...). + +To address this we make the throttling more intelligent, so we can throttle +full updates. When we get a forced update request, we keep track of exactly how +much data we put on the output buffer. We will not process a subsequent forced +update request until this data has been fully sent on the wire. We always allow +one forced update request to be in flight, regardless of what data is queued +for incremental updates or audio data. The slight complication is that we do +not initially know how much data an update will send, as this is done in the +background by the VNC job thread. So we must track the fact that the job thread +has an update pending, and not process any further updates until this job is +has been completed & put data on the output buffer. + +This unbounded memory growth affects all VNC server configurations supported by +QEMU, with no workaround possible. The mitigating factor is that it can only be +triggered by a client that has authenticated with the VNC server, and who is +able to trigger a large quantity of framebuffer updates or audio samples from +the guest OS. Mostly they'll just succeed in getting the OOM killer to kill +their own QEMU process, but its possible other processes can get taken out as +collateral damage. + +This is a more general variant of the similar unbounded memory usage flaw in +the websockets server, that was previously assigned CVE-2017-15268, and fixed +in 2.11 by: + + commit a7b20a8efa28e5f22c26c06cd06c2f12bc863493 + Author: Daniel P. Berrange + Date: Mon Oct 9 14:43:42 2017 +0100 + + io: monitor encoutput buffer size from websocket GSource + +This new general memory usage flaw has been assigned CVE-2017-15124, and is +partially fixed by this patch. + +RHEL-7 note: context differences in "struct VncState" and +vnc_jobs_consume_buffer() due to downstream lacking (a) commit +fb6ba0d5256c ("qapi event: convert VNC events", 2014-06-23), part of +v2.1.0, and (b) commit 04d2529da27d ("ui: convert VNC server to use +QIOChannelSocket", 2015-12-18), part of v2.6.0. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-11-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit ada8d2e4369ea49677d8672ac81bce73eefd5b54) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-auth-sasl.c | 5 +++++ + ui/vnc-jobs.c | 5 +++++ + ui/vnc.c | 28 ++++++++++++++++++++++++---- + ui/vnc.h | 7 +++++++ + 4 files changed, 41 insertions(+), 4 deletions(-) + +diff --git a/ui/vnc-auth-sasl.c b/ui/vnc-auth-sasl.c +index 804b8e7..8188081 100644 +--- a/ui/vnc-auth-sasl.c ++++ b/ui/vnc-auth-sasl.c +@@ -76,6 +76,11 @@ long vnc_client_write_sasl(VncState *vs) + + vs->sasl.encodedOffset += ret; + if (vs->sasl.encodedOffset == vs->sasl.encodedLength) { ++ if (vs->sasl.encodedRawLength >= vs->force_update_offset) { ++ vs->force_update_offset = 0; ++ } else { ++ vs->force_update_offset -= vs->sasl.encodedRawLength; ++ } + vs->output.offset -= vs->sasl.encodedRawLength; + vs->sasl.encoded = NULL; + vs->sasl.encodedOffset = vs->sasl.encodedLength = 0; +diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c +index e553bd9..9705899 100644 +--- a/ui/vnc-jobs.c ++++ b/ui/vnc-jobs.c +@@ -170,6 +170,11 @@ void vnc_jobs_consume_buffer(VncState *vs) + vnc_client_write, vs); + } + buffer_move(&vs->output, &vs->jobs_buffer); ++ ++ if (vs->job_update == VNC_STATE_UPDATE_FORCE) { ++ vs->force_update_offset = vs->output.offset; ++ } ++ vs->job_update = VNC_STATE_UPDATE_NONE; + } + flush = vs->csock != -1 && vs->abort != true; + vnc_unlock_output(vs); +diff --git a/ui/vnc.c b/ui/vnc.c +index 952a051..96b6caf 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -906,14 +906,28 @@ static bool vnc_should_update(VncState *vs) + break; + case VNC_STATE_UPDATE_INCREMENTAL: + /* Only allow incremental updates if the pending send queue +- * is less than the permitted threshold ++ * is less than the permitted threshold, and the job worker ++ * is completely idle. + */ +- if (vs->output.offset < vs->throttle_output_offset) { ++ if (vs->output.offset < vs->throttle_output_offset && ++ vs->job_update == VNC_STATE_UPDATE_NONE) { + return true; + } + break; + case VNC_STATE_UPDATE_FORCE: +- return true; ++ /* Only allow forced updates if the pending send queue ++ * does not contain a previous forced update, and the ++ * job worker is completely idle. ++ * ++ * Note this means we'll queue a forced update, even if ++ * the output buffer size is otherwise over the throttle ++ * output limit. ++ */ ++ if (vs->force_update_offset == 0 && ++ vs->job_update == VNC_STATE_UPDATE_NONE) { ++ return true; ++ } ++ break; + } + return false; + } +@@ -975,8 +989,9 @@ static int vnc_update_client(VncState *vs, int has_dirty) + } + } + +- vnc_job_push(job); ++ vs->job_update = vs->update; + vs->update = VNC_STATE_UPDATE_NONE; ++ vnc_job_push(job); + vs->has_dirty = 0; + return n; + } +@@ -1241,6 +1256,11 @@ static long vnc_client_write_plain(VncState *vs) + if (!ret) + return 0; + ++ if (ret >= vs->force_update_offset) { ++ vs->force_update_offset = 0; ++ } else { ++ vs->force_update_offset -= ret; ++ } + buffer_advance(&vs->output, ret); + + if (vs->output.offset == 0) { +diff --git a/ui/vnc.h b/ui/vnc.h +index d7eede3..70316ba 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -268,6 +268,7 @@ struct VncState + + VncDisplay *vd; + VncStateUpdate update; /* Most recent pending request from client */ ++ VncStateUpdate job_update; /* Currently processed by job thread */ + int has_dirty; + uint32_t features; + int absolute; +@@ -301,6 +302,12 @@ struct VncState + + QObject *info; + ++ /* Job thread bottom half has put data for a forced update ++ * into the output buffer. This offset points to the end of ++ * the update data in the output buffer. This lets us determine ++ * when a force update is fully sent to the client, allowing ++ * us to process further forced updates. */ ++ size_t force_update_offset; + /* We allow multiple incremental updates or audio capture + * samples to be queued in output buffer, provided the + * buffer size doesn't exceed this threshold. The value +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-fix-refresh-of-VNC-server-surface.patch b/SOURCES/kvm-ui-fix-refresh-of-VNC-server-surface.patch new file mode 100644 index 0000000..e6a799d --- /dev/null +++ b/SOURCES/kvm-ui-fix-refresh-of-VNC-server-surface.patch @@ -0,0 +1,119 @@ +From 3fa0b44ff46eccd3c22729a6e5d4ed044d22ab8a Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:28 +0100 +Subject: [PATCH 14/27] ui: fix refresh of VNC server surface + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-15-berrange@redhat.com> +Patchwork-id: 78948 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 14/27] ui: fix refresh of VNC server surface +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +In previous commit + + commit c7628bff4138ce906a3620d12e0820c1cf6c140d + Author: Gerd Hoffmann + Date: Fri Oct 30 12:10:09 2015 +0100 + + vnc: only alloc server surface with clients connected + +the VNC server was changed so that the 'vd->server' pixman +image was only allocated when a client is connected. + +Since then if a client disconnects and then reconnects to +the VNC server all they will see is a black screen until +they do something that triggers a refresh. On a graphical +desktop this is not often noticed since there's many things +going on which cause a refresh. On a plain text console it +is really obvious since nothing refreshes frequently. + +The problem is that the VNC server didn't update the guest +dirty bitmap, so still believes its server image is in sync +with the guest contents. + +To fix this we must explicitly mark the entire guest desktop +as dirty after re-creating the server surface. Move this +logic into vnc_update_server_surface() so it is guaranteed +to be call in all code paths that re-create the surface +instead of only in vnc_dpy_switch() + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Peter Lieven +Tested-by: Peter Lieven +Message-id: 1471365032-18096-1-git-send-email-berrange@redhat.com +Signed-off-by: Peter Maydell +(cherry picked from commit b69a553b4af9bc87a8b2e0a7b7a7de4cc7f0557e) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index dc09089..ec7bb0c 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -617,6 +617,8 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y) + + static void vnc_update_server_surface(VncDisplay *vd) + { ++ int width, height; ++ + qemu_pixman_image_unref(vd->server); + vd->server = NULL; + +@@ -624,10 +626,15 @@ static void vnc_update_server_surface(VncDisplay *vd) + return; + } + ++ width = vnc_width(vd); ++ height = vnc_height(vd); + vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT, +- vnc_width(vd), +- vnc_height(vd), ++ width, height, + NULL, 0); ++ ++ memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty)); ++ vnc_set_area_dirty(vd->guest.dirty, vd, 0, 0, ++ width, height); + } + + static void vnc_dpy_switch(DisplayChangeListener *dcl, +@@ -635,7 +642,6 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + { + VncDisplay *vd = container_of(dcl, VncDisplay, dcl); + VncState *vs; +- int width, height; + + vnc_abort_display_jobs(vd); + vd->ds = surface; +@@ -647,11 +653,6 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + qemu_pixman_image_unref(vd->guest.fb); + vd->guest.fb = pixman_image_ref(surface->image); + vd->guest.format = surface->format; +- width = vnc_width(vd); +- height = vnc_height(vd); +- memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty)); +- vnc_set_area_dirty(vd->guest.dirty, vd, 0, 0, +- width, height); + + QTAILQ_FOREACH(vs, &vd->clients, next) { + vnc_colordepth(vs); +@@ -661,7 +662,8 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + } + memset(vs->dirty, 0x00, sizeof(vs->dirty)); + vnc_set_area_dirty(vs->dirty, vd, 0, 0, +- width, height); ++ vnc_width(vd), ++ vnc_height(vd)); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-introduce-enum-to-track-VNC-client-framebuffer-up.patch b/SOURCES/kvm-ui-introduce-enum-to-track-VNC-client-framebuffer-up.patch new file mode 100644 index 0000000..d49d491 --- /dev/null +++ b/SOURCES/kvm-ui-introduce-enum-to-track-VNC-client-framebuffer-up.patch @@ -0,0 +1,121 @@ +From bb6e65d667f1bbc28cfab0ba2626880cee8e7741 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:33 +0100 +Subject: [PATCH 19/27] ui: introduce enum to track VNC client framebuffer + update request state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-20-berrange@redhat.com> +Patchwork-id: 78953 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 19/27] ui: introduce enum to track VNC client framebuffer update request state +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +Currently the VNC servers tracks whether a client has requested an incremental +or forced update with two boolean flags. There are only really 3 distinct +states to track, so create an enum to more accurately reflect permitted states. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-7-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit fef1bbadfb2c3027208eb3d14b43e1bdb51166ca) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 21 +++++++++++---------- + ui/vnc.h | 9 +++++++-- + 2 files changed, 18 insertions(+), 12 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index eea5702..7239602 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -860,16 +860,17 @@ static int vnc_update_client(VncState *vs, int has_dirty) + } + + vs->has_dirty += has_dirty; +- if (!vs->need_update) { ++ if (vs->update == VNC_STATE_UPDATE_NONE) { + return 0; + } + +- if (vs->output.offset && !vs->audio_cap && !vs->force_update) { ++ if (vs->output.offset && !vs->audio_cap && ++ vs->update != VNC_STATE_UPDATE_FORCE) { + /* kernel send buffers are full -> drop frames to throttle */ + return 0; + } + +- if (!vs->has_dirty && !vs->force_update) { ++ if (!vs->has_dirty && vs->update != VNC_STATE_UPDATE_FORCE) { + return 0; + } + +@@ -909,7 +910,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + } + + vnc_job_push(job); +- vs->force_update = 0; ++ vs->update = VNC_STATE_UPDATE_INCREMENTAL; + vs->has_dirty = 0; + return n; + } +@@ -1832,14 +1833,14 @@ static void ext_key_event(VncState *vs, int down, + static void framebuffer_update_request(VncState *vs, int incremental, + int x, int y, int w, int h) + { +- vs->need_update = 1; +- + if (incremental) { +- return; ++ if (vs->update != VNC_STATE_UPDATE_FORCE) { ++ vs->update = VNC_STATE_UPDATE_INCREMENTAL; ++ } ++ } else { ++ vs->update = VNC_STATE_UPDATE_FORCE; ++ vnc_set_area_dirty(vs->dirty, vs->vd, x, y, w, h); + } +- +- vs->force_update = 1; +- vnc_set_area_dirty(vs->dirty, vs->vd, x, y, w, h); + } + + static void send_ext_key_event_ack(VncState *vs) +diff --git a/ui/vnc.h b/ui/vnc.h +index d8465ba..f19fd0a 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -252,6 +252,12 @@ struct VncJob + QTAILQ_ENTRY(VncJob) next; + }; + ++typedef enum { ++ VNC_STATE_UPDATE_NONE, ++ VNC_STATE_UPDATE_INCREMENTAL, ++ VNC_STATE_UPDATE_FORCE, ++} VncStateUpdate; ++ + struct VncState + { + int csock; +@@ -261,8 +267,7 @@ struct VncState + * vnc-jobs-async.c */ + + VncDisplay *vd; +- int need_update; +- int force_update; ++ VncStateUpdate update; /* Most recent pending request from client */ + int has_dirty; + uint32_t features; + int absolute; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-move-disconnecting-check-to-start-of-vnc_update_c.patch b/SOURCES/kvm-ui-move-disconnecting-check-to-start-of-vnc_update_c.patch new file mode 100644 index 0000000..93d0e41 --- /dev/null +++ b/SOURCES/kvm-ui-move-disconnecting-check-to-start-of-vnc_update_c.patch @@ -0,0 +1,77 @@ +From a56b8ac0a5917f0a2d007a9249a4ea299fc5c208 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:29 +0100 +Subject: [PATCH 15/27] ui: move disconnecting check to start of + vnc_update_client +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-16-berrange@redhat.com> +Patchwork-id: 78937 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 15/27] ui: move disconnecting check to start of vnc_update_client +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +This is superficially similar to the combination of + + commit 5a8be0f73d6f60ff08746377eb09ca459f39deab + Author: Gerd Hoffmann + Date: Wed Jul 13 12:21:20 2016 +0200 + + vnc: make sure we finish disconnect + +and + + commit c53df961617736f94731d94b62c2954c261d2bae + Author: Daniel P. Berrange + Date: Mon Dec 18 19:12:17 2017 +0000 + + ui: remove unreachable code in vnc_update_client + +We can't cherry-pick those changes, however, because they depend +on the QIOChannel conversion. Thus, this downstream only change +is done to make other following changes apply with fewer conflicts +during backport. + +Signed-off-by: Daniel P. Berrangé +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index ec7bb0c..874900c 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -848,8 +848,13 @@ static int find_and_clear_dirty_height(struct VncState *vs, + + static int vnc_update_client(VncState *vs, int has_dirty) + { ++ if (vs->csock == -1) { ++ vnc_disconnect_finish(vs); ++ return 0; ++ } ++ + vs->has_dirty += has_dirty; +- if (vs->need_update && vs->csock != -1) { ++ if (vs->need_update) { + VncDisplay *vd = vs->vd; + VncJob *job; + int y; +@@ -904,9 +909,6 @@ static int vnc_update_client(VncState *vs, int has_dirty) + return n; + } + +- if (vs->csock == -1) +- vnc_disconnect_finish(vs); +- + return 0; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-pixman-add-qemu_drm_format_to_pixman.patch b/SOURCES/kvm-ui-pixman-add-qemu_drm_format_to_pixman.patch new file mode 100644 index 0000000..ce1bb52 --- /dev/null +++ b/SOURCES/kvm-ui-pixman-add-qemu_drm_format_to_pixman.patch @@ -0,0 +1,91 @@ +From df989559119707094b17269d025bcdf83df765f1 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:17 +0200 +Subject: [PATCH 09/17] ui/pixman: add qemu_drm_format_to_pixman() + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-4-git-send-email-tgupta@redhat.com> +Patchwork-id: 80911 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 03/11] ui/pixman: add qemu_drm_format_to_pixman() +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Map drm fourcc codes to pixman formats. + +Signed-off-by: Gerd Hoffmann +Reviewed by: Kirti Wankhede +Signed-off-by: Alex Williamson + +(cherry picked from a5127bd73f77b90b50d63014be10cef467c1c3f9) + +Signed-off-by: Miroslav Rezanina +--- + include/ui/qemu-pixman.h | 6 ++++++ + ui/qemu-pixman.c | 22 ++++++++++++++++++++++ + 2 files changed, 28 insertions(+) + +diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h +index 500725c..8deb008 100644 +--- a/include/ui/qemu-pixman.h ++++ b/include/ui/qemu-pixman.h +@@ -27,9 +27,13 @@ + + #ifdef HOST_WORDS_BIGENDIAN + # define PIXMAN_BE_r8g8b8 PIXMAN_r8g8b8 ++# define PIXMAN_LE_r8g8b8 PIXMAN_b8g8r8 ++# define PIXMAN_LE_a8r8g8b8 PIXMAN_b8g8r8a8 + # define PIXMAN_LE_x8r8g8b8 PIXMAN_b8g8r8x8 + #else + # define PIXMAN_BE_r8g8b8 PIXMAN_b8g8r8 ++# define PIXMAN_LE_r8g8b8 PIXMAN_r8g8b8 ++# define PIXMAN_LE_a8r8g8b8 PIXMAN_a8r8g8b8 + # define PIXMAN_LE_x8r8g8b8 PIXMAN_x8r8g8b8 + #endif + +@@ -46,6 +50,8 @@ pixman_image_t *qemu_pixman_mirror_create(pixman_format_code_t format, + pixman_image_t *image); + void qemu_pixman_image_unref(pixman_image_t *image); + ++pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format); ++ + pixman_color_t qemu_pixman_color(PixelFormat *pf, uint32_t color); + pixman_image_t *qemu_pixman_glyph_from_vgafont(int height, const uint8_t *font, + unsigned int ch); +diff --git a/ui/qemu-pixman.c b/ui/qemu-pixman.c +index 254bd8c..4be422c 100644 +--- a/ui/qemu-pixman.c ++++ b/ui/qemu-pixman.c +@@ -5,6 +5,28 @@ + + #include "qemu-common.h" + #include "ui/console.h" ++#include "drm_fourcc.h" ++ ++/* Note: drm is little endian, pixman is native endian */ ++pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format) ++{ ++ static const struct { ++ uint32_t drm_format; ++ pixman_format_code_t pixman; ++ } map[] = { ++ { DRM_FORMAT_RGB888, PIXMAN_LE_r8g8b8 }, ++ { DRM_FORMAT_ARGB8888, PIXMAN_LE_a8r8g8b8 }, ++ { DRM_FORMAT_XRGB8888, PIXMAN_LE_x8r8g8b8 } ++ }; ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(map); i++) { ++ if (drm_format == map[i].drm_format) { ++ return map[i].pixman; ++ } ++ } ++ return 0; ++} + + int qemu_pixman_get_type(int rshift, int gshift, int bshift) + { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-place-a-hard-cap-on-VNC-server-output-buffer-size.patch b/SOURCES/kvm-ui-place-a-hard-cap-on-VNC-server-output-buffer-size.patch new file mode 100644 index 0000000..03df9b4 --- /dev/null +++ b/SOURCES/kvm-ui-place-a-hard-cap-on-VNC-server-output-buffer-size.patch @@ -0,0 +1,112 @@ +From 52fe55e2bf9df408ebe127a670ee698642d3fcb4 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:38 +0100 +Subject: [PATCH 24/27] ui: place a hard cap on VNC server output buffer size +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-25-berrange@redhat.com> +Patchwork-id: 78957 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 24/27] ui: place a hard cap on VNC server output buffer size +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +The previous patches fix problems with throttling of forced framebuffer updates +and audio data capture that would cause the QEMU output buffer size to grow +without bound. Those fixes are graceful in that once the client catches up with +reading data from the server, everything continues operating normally. + +There is some data which the server sends to the client that is impractical to +throttle. Specifically there are various pseudo framebuffer update encodings to +inform the client of things like desktop resizes, pointer changes, audio +playback start/stop, LED state and so on. These generally only involve sending +a very small amount of data to the client, but a malicious guest might be able +to do things that trigger these changes at a very high rate. Throttling them is +not practical as missed or delayed events would cause broken behaviour for the +client. + +This patch thus takes a more forceful approach of setting an absolute upper +bound on the amount of data we permit to be present in the output buffer at +any time. The previous patch set a threshold for throttling the output buffer +by allowing an amount of data equivalent to one complete framebuffer update and +one seconds worth of audio data. On top of this it allowed for one further +forced framebuffer update to be queued. + +To be conservative, we thus take that throttling threshold and multiply it by +5 to form an absolute upper bound. If this bound is hit during vnc_write() we +forceably disconnect the client, refusing to queue further data. This limit is +high enough that it should never be hit unless a malicious client is trying to +exploit the sever, or the network is completely saturated preventing any sending +of data on the socket. + +This completes the fix for CVE-2017-15124 started in the previous patches. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-12-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit f887cf165db20f405cb8805c716bd363aaadf815) + + Conflicts: + ui/vnc.c - context differences and no 'vs->disconnecting' flag. + Using share_mode as a better check for the disconnecting state + than csock == -1, because the worker thread calls vnc_write() + with a fake VncState that has csock == -1. + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 96b6caf..61fbec2 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -1460,8 +1460,37 @@ void vnc_client_read(void *opaque) + } + } + ++/* ++ * Scale factor to apply to vs->throttle_output_offset when checking for ++ * hard limit. Worst case normal usage could be x2, if we have a complete ++ * incremental update and complete forced update in the output buffer. ++ * So x3 should be good enough, but we pick x5 to be conservative and thus ++ * (hopefully) never trigger incorrectly. ++ */ ++#define VNC_THROTTLE_OUTPUT_LIMIT_SCALE 5 ++ + void vnc_write(VncState *vs, const void *data, size_t len) + { ++ if (vs->share_mode == VNC_SHARE_MODE_DISCONNECTED) { ++ return; ++ } ++ /* Protection against malicious client/guest to prevent our output ++ * buffer growing without bound if client stops reading data. This ++ * should rarely trigger, because we have earlier throttling code ++ * which stops issuing framebuffer updates and drops audio data ++ * if the throttle_output_offset value is exceeded. So we only reach ++ * this higher level if a huge number of pseudo-encodings get ++ * triggered while data can't be sent on the socket. ++ * ++ * NB throttle_output_offset can be zero during early protocol ++ * handshake, or from the job thread's VncState clone ++ */ ++ if (vs->throttle_output_offset != 0 && ++ vs->output.offset > (vs->throttle_output_offset * ++ VNC_THROTTLE_OUTPUT_LIMIT_SCALE)) { ++ vnc_disconnect_start(vs); ++ return; ++ } + buffer_reserve(&vs->output, len); + + if (vs->csock != -1 && buffer_empty(&vs->output)) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-refactor-code-for-determining-if-an-update-should.patch b/SOURCES/kvm-ui-refactor-code-for-determining-if-an-update-should.patch new file mode 100644 index 0000000..4fbe43c --- /dev/null +++ b/SOURCES/kvm-ui-refactor-code-for-determining-if-an-update-should.patch @@ -0,0 +1,83 @@ +From 3b0e5204ae4a681ed9f6bedd3cd18ecad877546c Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:35 +0100 +Subject: [PATCH 21/27] ui: refactor code for determining if an update should + be sent to the client +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-22-berrange@redhat.com> +Patchwork-id: 78954 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 21/27] ui: refactor code for determining if an update should be sent to the client +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +The logic for determining if it is possible to send an update to the client +will become more complicated shortly, so pull it out into a separate method +for easier extension later. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-9-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 0bad834228b9ee63e4239108d02dcb94568254d0) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 27 ++++++++++++++++++++------- + 1 file changed, 20 insertions(+), 7 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 075def1..a7ec8cc 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -846,6 +846,25 @@ static int find_and_clear_dirty_height(struct VncState *vs, + return h; + } + ++static bool vnc_should_update(VncState *vs) ++{ ++ switch (vs->update) { ++ case VNC_STATE_UPDATE_NONE: ++ break; ++ case VNC_STATE_UPDATE_INCREMENTAL: ++ /* Only allow incremental updates if the output buffer ++ * is empty, or if audio capture is enabled. ++ */ ++ if (!vs->output.offset || vs->audio_cap) { ++ return true; ++ } ++ break; ++ case VNC_STATE_UPDATE_FORCE: ++ return true; ++ } ++ return false; ++} ++ + static int vnc_update_client(VncState *vs, int has_dirty) + { + VncDisplay *vd = vs->vd; +@@ -860,13 +879,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + } + + vs->has_dirty += has_dirty; +- if (vs->update == VNC_STATE_UPDATE_NONE) { +- return 0; +- } +- +- if (vs->output.offset && !vs->audio_cap && +- vs->update != VNC_STATE_UPDATE_FORCE) { +- /* kernel send buffers are full -> drop frames to throttle */ ++ if (!vnc_should_update(vs)) { + return 0; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-remove-redundant-indentation-in-vnc_client_update.patch b/SOURCES/kvm-ui-remove-redundant-indentation-in-vnc_client_update.patch new file mode 100644 index 0000000..14f16b0 --- /dev/null +++ b/SOURCES/kvm-ui-remove-redundant-indentation-in-vnc_client_update.patch @@ -0,0 +1,168 @@ +From 2f49f56062f802fd47bc1c1c81d811aa6c9e9cff Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:30 +0100 +Subject: [PATCH 16/27] ui: remove redundant indentation in vnc_client_update +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-17-berrange@redhat.com> +Patchwork-id: 78936 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 16/27] ui: remove redundant indentation in vnc_client_update +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +Now that previous dead / unreachable code has been removed, we can simplify +the indentation in the vnc_client_update method. + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-4-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b939eb89b6f320544a9328fa908d881d0024c1ee) + + Conflicts: + ui/vnc.c - context difference due to vs->csock no longer + existing and some other optimizations in + determining dirty rectangles. + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 104 ++++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 53 insertions(+), 51 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 874900c..aebaa37 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -848,68 +848,70 @@ static int find_and_clear_dirty_height(struct VncState *vs, + + static int vnc_update_client(VncState *vs, int has_dirty) + { ++ VncDisplay *vd = vs->vd; ++ VncJob *job; ++ int y; ++ int height, width; ++ int n = 0; ++ + if (vs->csock == -1) { + vnc_disconnect_finish(vs); + return 0; + } + + vs->has_dirty += has_dirty; +- if (vs->need_update) { +- VncDisplay *vd = vs->vd; +- VncJob *job; +- int y; +- int height, width; +- int n = 0; +- +- if (vs->output.offset && !vs->audio_cap && !vs->force_update) +- /* kernel send buffers are full -> drop frames to throttle */ +- return 0; ++ if (!vs->need_update) { ++ return 0; ++ } + +- if (!vs->has_dirty && !vs->audio_cap && !vs->force_update) +- return 0; ++ if (vs->output.offset && !vs->audio_cap && !vs->force_update) { ++ /* kernel send buffers are full -> drop frames to throttle */ ++ return 0; ++ } + +- /* +- * Send screen updates to the vnc client using the server +- * surface and server dirty map. guest surface updates +- * happening in parallel don't disturb us, the next pass will +- * send them to the client. +- */ +- job = vnc_job_new(vs); +- +- height = pixman_image_get_height(vd->server); +- width = pixman_image_get_width(vd->server); +- +- y = 0; +- for (;;) { +- int x, h; +- unsigned long x2; +- unsigned long offset = find_next_bit((unsigned long *) &vs->dirty, +- height * VNC_DIRTY_BPL(vs), +- y * VNC_DIRTY_BPL(vs)); +- if (offset == height * VNC_DIRTY_BPL(vs)) { +- /* no more dirty bits */ +- break; +- } +- y = offset / VNC_DIRTY_BPL(vs); +- x = offset % VNC_DIRTY_BPL(vs); +- x2 = find_next_zero_bit((unsigned long *) &vs->dirty[y], +- VNC_DIRTY_BPL(vs), x); +- bitmap_clear(vs->dirty[y], x, x2 - x); +- h = find_and_clear_dirty_height(vs, y, x, x2, height); +- x2 = MIN(x2, width / VNC_DIRTY_PIXELS_PER_BIT); +- if (x2 > x) { +- n += vnc_job_add_rect(job, x * VNC_DIRTY_PIXELS_PER_BIT, y, +- (x2 - x) * VNC_DIRTY_PIXELS_PER_BIT, h); +- } +- } ++ if (!vs->has_dirty && !vs->audio_cap && !vs->force_update) { ++ return 0; ++ } ++ ++ /* ++ * Send screen updates to the vnc client using the server ++ * surface and server dirty map. guest surface updates ++ * happening in parallel don't disturb us, the next pass will ++ * send them to the client. ++ */ ++ job = vnc_job_new(vs); ++ ++ height = pixman_image_get_height(vd->server); ++ width = pixman_image_get_width(vd->server); + +- vnc_job_push(job); +- vs->force_update = 0; +- vs->has_dirty = 0; +- return n; ++ y = 0; ++ for (;;) { ++ int x, h; ++ unsigned long x2; ++ unsigned long offset = find_next_bit((unsigned long *) &vs->dirty, ++ height * VNC_DIRTY_BPL(vs), ++ y * VNC_DIRTY_BPL(vs)); ++ if (offset == height * VNC_DIRTY_BPL(vs)) { ++ /* no more dirty bits */ ++ break; ++ } ++ y = offset / VNC_DIRTY_BPL(vs); ++ x = offset % VNC_DIRTY_BPL(vs); ++ x2 = find_next_zero_bit((unsigned long *) &vs->dirty[y], ++ VNC_DIRTY_BPL(vs), x); ++ bitmap_clear(vs->dirty[y], x, x2 - x); ++ h = find_and_clear_dirty_height(vs, y, x, x2, height); ++ x2 = MIN(x2, width / VNC_DIRTY_PIXELS_PER_BIT); ++ if (x2 > x) { ++ n += vnc_job_add_rect(job, x * VNC_DIRTY_PIXELS_PER_BIT, y, ++ (x2 - x) * VNC_DIRTY_PIXELS_PER_BIT, h); ++ } + } + +- return 0; ++ vnc_job_push(job); ++ vs->force_update = 0; ++ vs->has_dirty = 0; ++ return n; + } + + /* audio */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-track-how-much-decoded-data-we-consumed-when-doin.patch b/SOURCES/kvm-ui-track-how-much-decoded-data-we-consumed-when-doin.patch new file mode 100644 index 0000000..bb43a2d --- /dev/null +++ b/SOURCES/kvm-ui-track-how-much-decoded-data-we-consumed-when-doin.patch @@ -0,0 +1,88 @@ +From 3be810287878138e5f72568d1ba1160b5bad22f8 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:32 +0100 +Subject: [PATCH 18/27] ui: track how much decoded data we consumed when doing + SASL encoding +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-19-berrange@redhat.com> +Patchwork-id: 78951 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 18/27] ui: track how much decoded data we consumed when doing SASL encoding +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Daniel P. Berrange" + +When we encode data for writing with SASL, we encode the entire pending output +buffer. The subsequent write, however, may not be able to send the full encoded +data in one go though, particularly with a slow network. So we delay setting the +output buffer offset back to zero until all the SASL encoded data is sent. + +Between encoding the data and completing sending of the SASL encoded data, +however, more data might have been placed on the pending output buffer. So it +is not valid to set offset back to zero. Instead we must keep track of how much +data we consumed during encoding and subtract only that amount. + +With the current bug we would be throwing away some pending data without having +sent it at all. By sheer luck this did not previously cause any serious problem +because appending data to the send buffer is always an atomic action, so we +only ever throw away complete RFB protocol messages. In the case of frame buffer +updates we'd catch up fairly quickly, so no obvious problem was visible. + +RHEL-7 note: context difference in the last argument to +vnc_client_io_error() due to downstream lacking commit 04d2529da27d +("ui: convert VNC server to use QIOChannelSocket", 2015-12-18). + +Signed-off-by: Daniel P. Berrange +Reviewed-by: Darren Kenny +Reviewed-by: Marc-André Lureau +Message-id: 20171218191228.31018-6-berrange@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 8f61f1c5a6bc06438a1172efa80bc7606594fa07) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-auth-sasl.c | 3 ++- + ui/vnc-auth-sasl.h | 1 + + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/ui/vnc-auth-sasl.c b/ui/vnc-auth-sasl.c +index f3ad75d..804b8e7 100644 +--- a/ui/vnc-auth-sasl.c ++++ b/ui/vnc-auth-sasl.c +@@ -64,6 +64,7 @@ long vnc_client_write_sasl(VncState *vs) + if (err != SASL_OK) + return vnc_client_io_error(vs, -1, EIO); + ++ vs->sasl.encodedRawLength = vs->output.offset; + vs->sasl.encodedOffset = 0; + } + +@@ -75,7 +76,7 @@ long vnc_client_write_sasl(VncState *vs) + + vs->sasl.encodedOffset += ret; + if (vs->sasl.encodedOffset == vs->sasl.encodedLength) { +- vs->output.offset = 0; ++ vs->output.offset -= vs->sasl.encodedRawLength; + vs->sasl.encoded = NULL; + vs->sasl.encodedOffset = vs->sasl.encodedLength = 0; + } +diff --git a/ui/vnc-auth-sasl.h b/ui/vnc-auth-sasl.h +index 8091d68..4ec6fb5 100644 +--- a/ui/vnc-auth-sasl.h ++++ b/ui/vnc-auth-sasl.h +@@ -54,6 +54,7 @@ struct VncStateSASL { + */ + const uint8_t *encoded; + unsigned int encodedLength; ++ unsigned int encodedRawLength; + unsigned int encodedOffset; + char *username; + char *mechlist; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-vnc-derive-cmp_bytes-from-VNC_DIRTY_PIXELS_PER_BI.patch b/SOURCES/kvm-ui-vnc-derive-cmp_bytes-from-VNC_DIRTY_PIXELS_PER_BI.patch new file mode 100644 index 0000000..38db6ec --- /dev/null +++ b/SOURCES/kvm-ui-vnc-derive-cmp_bytes-from-VNC_DIRTY_PIXELS_PER_BI.patch @@ -0,0 +1,47 @@ +From 6eed761f1505348596f34c915c56e8a98ce7c3af Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:20 +0100 +Subject: [PATCH 02/24] ui/vnc: derive cmp_bytes from VNC_DIRTY_PIXELS_PER_BIT +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 73973 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/8] ui/vnc: derive cmp_bytes from VNC_DIRTY_PIXELS_PER_BIT +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +From: Peter Lieven + +this allows for setting VNC_DIRTY_PIXELS_PER_BIT to different +values than 16 if desired. + +Reviewed-by: Wenchao Xia +Signed-off-by: Peter Lieven +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 6cd859aa8a7fb60fe6edb89e628cddfe25dfe186) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 0c799ed..13fb34b 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -2709,7 +2709,7 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + * Check and copy modified bits from guest to server surface. + * Update server dirty map. + */ +- cmp_bytes = 64; ++ cmp_bytes = VNC_DIRTY_PIXELS_PER_BIT * VNC_SERVER_FB_BYTES; + if (cmp_bytes > vnc_server_fb_stride(vd)) { + cmp_bytes = vnc_server_fb_stride(vd); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-vnc-fix-potential-memory-corruption-issues.patch b/SOURCES/kvm-ui-vnc-fix-potential-memory-corruption-issues.patch new file mode 100644 index 0000000..ba588c9 --- /dev/null +++ b/SOURCES/kvm-ui-vnc-fix-potential-memory-corruption-issues.patch @@ -0,0 +1,407 @@ +From 3d842d39e26560dfb7679d88746c314a3545ca18 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:24 +0100 +Subject: [PATCH 06/24] ui/vnc: fix potential memory corruption issues +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-7-git-send-email-kraxel@redhat.com> +Patchwork-id: 73977 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 6/8] ui/vnc: fix potential memory corruption issues +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +From: Peter Lieven + +this patch makes the VNC server work correctly if the +server surface and the guest surface have different sizes. + +Basically the server surface is adjusted to not exceed VNC_MAX_WIDTH +x VNC_MAX_HEIGHT and additionally the width is rounded up to multiple of +VNC_DIRTY_PIXELS_PER_BIT. + +If we have a resolution whose width is not dividable by VNC_DIRTY_PIXELS_PER_BIT +we now get a small black bar on the right of the screen. + +If the surface is too big to fit the limits only the upper left area is shown. + +On top of that this fixes 2 memory corruption issues: + +The first was actually discovered during playing +around with a Windows 7 vServer. During resolution +change in Windows 7 it happens sometimes that Windows +changes to an intermediate resolution where +server_stride % cmp_bytes != 0 (in vnc_refresh_server_surface). +This happens only if width % VNC_DIRTY_PIXELS_PER_BIT != 0. + +The second is a theoretical issue, but is maybe exploitable +by the guest. If for some reason the guest surface size is bigger +than VNC_MAX_WIDTH x VNC_MAX_HEIGHT we end up in severe corruption since +this limit is nowhere enforced. + +Signed-off-by: Peter Lieven +Signed-off-by: Gerd Hoffmann +(cherry picked from commit bea60dd7679364493a0d7f5b54316c767cf894ef) +Signed-off-by: Miroslav Rezanina + +Conflicts: + ui/vnc.c [ in pointer_event, input subsystem differences ] +--- + ui/vnc.c | 149 +++++++++++++++++++++++++++++---------------------------------- + ui/vnc.h | 14 +++--- + 2 files changed, 77 insertions(+), 86 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 51f95be..80b7792 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -427,14 +427,10 @@ static void framebuffer_update_request(VncState *vs, int incremental, + static void vnc_refresh(DisplayChangeListener *dcl); + static int vnc_refresh_server_surface(VncDisplay *vd); + +-static void vnc_dpy_update(DisplayChangeListener *dcl, +- int x, int y, int w, int h) +-{ +- VncDisplay *vd = container_of(dcl, VncDisplay, dcl); +- struct VncSurface *s = &vd->guest; +- int width = surface_width(vd->ds); +- int height = surface_height(vd->ds); +- ++static void vnc_set_area_dirty(DECLARE_BITMAP(dirty[VNC_MAX_HEIGHT], ++ VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT), ++ int width, int height, ++ int x, int y, int w, int h) { + /* this is needed this to ensure we updated all affected + * blocks if x % VNC_DIRTY_PIXELS_PER_BIT != 0 */ + w += (x % VNC_DIRTY_PIXELS_PER_BIT); +@@ -446,11 +442,22 @@ static void vnc_dpy_update(DisplayChangeListener *dcl, + h = MIN(y + h, height); + + for (; y < h; y++) { +- bitmap_set(s->dirty[y], x / VNC_DIRTY_PIXELS_PER_BIT, ++ bitmap_set(dirty[y], x / VNC_DIRTY_PIXELS_PER_BIT, + DIV_ROUND_UP(w, VNC_DIRTY_PIXELS_PER_BIT)); + } + } + ++static void vnc_dpy_update(DisplayChangeListener *dcl, ++ int x, int y, int w, int h) ++{ ++ VncDisplay *vd = container_of(dcl, VncDisplay, dcl); ++ struct VncSurface *s = &vd->guest; ++ int width = pixman_image_get_width(vd->server); ++ int height = pixman_image_get_height(vd->server); ++ ++ vnc_set_area_dirty(s->dirty, width, height, x, y, w, h); ++} ++ + void vnc_framebuffer_update(VncState *vs, int x, int y, int w, int h, + int32_t encoding) + { +@@ -512,17 +519,15 @@ void buffer_advance(Buffer *buf, size_t len) + + static void vnc_desktop_resize(VncState *vs) + { +- DisplaySurface *ds = vs->vd->ds; +- + if (vs->csock == -1 || !vnc_has_feature(vs, VNC_FEATURE_RESIZE)) { + return; + } +- if (vs->client_width == surface_width(ds) && +- vs->client_height == surface_height(ds)) { ++ if (vs->client_width == pixman_image_get_width(vs->vd->server) && ++ vs->client_height == pixman_image_get_height(vs->vd->server)) { + return; + } +- vs->client_width = surface_width(ds); +- vs->client_height = surface_height(ds); ++ vs->client_width = pixman_image_get_width(vs->vd->server); ++ vs->client_height = pixman_image_get_height(vs->vd->server); + vnc_lock_output(vs); + vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); + vnc_write_u8(vs, 0); +@@ -566,31 +571,24 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y) + ptr += x * VNC_SERVER_FB_BYTES; + return ptr; + } +-/* this sets only the visible pixels of a dirty bitmap */ +-#define VNC_SET_VISIBLE_PIXELS_DIRTY(bitmap, w, h) {\ +- int y;\ +- memset(bitmap, 0x00, sizeof(bitmap));\ +- for (y = 0; y < h; y++) {\ +- bitmap_set(bitmap[y], 0,\ +- DIV_ROUND_UP(w, VNC_DIRTY_PIXELS_PER_BIT));\ +- } \ +- } + + static void vnc_dpy_switch(DisplayChangeListener *dcl, + DisplaySurface *surface) + { + VncDisplay *vd = container_of(dcl, VncDisplay, dcl); + VncState *vs; ++ int width, height; + + vnc_abort_display_jobs(vd); + + /* server surface */ + qemu_pixman_image_unref(vd->server); + vd->ds = surface; ++ width = MIN(VNC_MAX_WIDTH, ROUND_UP(surface_width(vd->ds), ++ VNC_DIRTY_PIXELS_PER_BIT)); ++ height = MIN(VNC_MAX_HEIGHT, surface_height(vd->ds)); + vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT, +- surface_width(vd->ds), +- surface_height(vd->ds), +- NULL, 0); ++ width, height, NULL, 0); + + /* guest surface */ + #if 0 /* FIXME */ +@@ -600,9 +598,9 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + qemu_pixman_image_unref(vd->guest.fb); + vd->guest.fb = pixman_image_ref(surface->image); + vd->guest.format = surface->format; +- VNC_SET_VISIBLE_PIXELS_DIRTY(vd->guest.dirty, +- surface_width(vd->ds), +- surface_height(vd->ds)); ++ memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty)); ++ vnc_set_area_dirty(vd->guest.dirty, width, height, 0, 0, ++ width, height); + + QTAILQ_FOREACH(vs, &vd->clients, next) { + vnc_colordepth(vs); +@@ -610,9 +608,9 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + if (vs->vd->cursor) { + vnc_cursor_define(vs); + } +- VNC_SET_VISIBLE_PIXELS_DIRTY(vs->dirty, +- surface_width(vd->ds), +- surface_height(vd->ds)); ++ memset(vs->dirty, 0x00, sizeof(vs->dirty)); ++ vnc_set_area_dirty(vs->dirty, width, height, 0, 0, ++ width, height); + } + } + +@@ -916,8 +914,8 @@ static int vnc_update_client(VncState *vs, int has_dirty) + */ + job = vnc_job_new(vs); + +- height = MIN(pixman_image_get_height(vd->server), vs->client_height); +- width = MIN(pixman_image_get_width(vd->server), vs->client_width); ++ height = pixman_image_get_height(vd->server); ++ width = pixman_image_get_width(vd->server); + + y = 0; + for (;;) { +@@ -1500,8 +1498,8 @@ static void check_pointer_type_change(Notifier *notifier, void *data) + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); + vnc_framebuffer_update(vs, absolute, 0, +- surface_width(vs->vd->ds), +- surface_height(vs->vd->ds), ++ pixman_image_get_width(vs->vd->server), ++ pixman_image_get_height(vs->vd->server), + VNC_ENCODING_POINTER_TYPE_CHANGE); + vnc_unlock_output(vs); + vnc_flush(vs); +@@ -1513,8 +1511,8 @@ static void pointer_event(VncState *vs, int button_mask, int x, int y) + { + int buttons = 0; + int dz = 0; +- int width = surface_width(vs->vd->ds); +- int height = surface_height(vs->vd->ds); ++ int width = pixman_image_get_width(vs->vd->server); ++ int height = pixman_image_get_height(vs->vd->server); + + if (button_mask & 0x01) + buttons |= MOUSE_EVENT_LBUTTON; +@@ -1866,29 +1864,18 @@ static void ext_key_event(VncState *vs, int down, + } + + static void framebuffer_update_request(VncState *vs, int incremental, +- int x_position, int y_position, +- int w, int h) ++ int x, int y, int w, int h) + { +- int i; +- const size_t width = surface_width(vs->vd->ds) / VNC_DIRTY_PIXELS_PER_BIT; +- const size_t height = surface_height(vs->vd->ds); +- +- if (y_position > height) { +- y_position = height; +- } +- if (y_position + h >= height) { +- h = height - y_position; +- } ++ int width = pixman_image_get_width(vs->vd->server); ++ int height = pixman_image_get_height(vs->vd->server); + + vs->need_update = 1; +- if (!incremental) { +- vs->force_update = 1; +- for (i = 0; i < h; i++) { +- bitmap_set(vs->dirty[y_position + i], 0, width); +- bitmap_clear(vs->dirty[y_position + i], width, +- VNC_DIRTY_BITS - width); +- } ++ ++ if (incremental) { ++ return; + } ++ ++ vnc_set_area_dirty(vs->dirty, width, height, x, y, w, h); + } + + static void send_ext_key_event_ack(VncState *vs) +@@ -1898,8 +1885,8 @@ static void send_ext_key_event_ack(VncState *vs) + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); + vnc_framebuffer_update(vs, 0, 0, +- surface_width(vs->vd->ds), +- surface_height(vs->vd->ds), ++ pixman_image_get_width(vs->vd->server), ++ pixman_image_get_height(vs->vd->server), + VNC_ENCODING_EXT_KEY_EVENT); + vnc_unlock_output(vs); + vnc_flush(vs); +@@ -1912,8 +1899,8 @@ static void send_ext_audio_ack(VncState *vs) + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); + vnc_framebuffer_update(vs, 0, 0, +- surface_width(vs->vd->ds), +- surface_height(vs->vd->ds), ++ pixman_image_get_width(vs->vd->server), ++ pixman_image_get_height(vs->vd->server), + VNC_ENCODING_AUDIO); + vnc_unlock_output(vs); + vnc_flush(vs); +@@ -2101,8 +2088,8 @@ static void vnc_colordepth(VncState *vs) + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); /* number of rects */ + vnc_framebuffer_update(vs, 0, 0, +- surface_width(vs->vd->ds), +- surface_height(vs->vd->ds), ++ pixman_image_get_width(vs->vd->server), ++ pixman_image_get_height(vs->vd->server), + VNC_ENCODING_WMVi); + pixel_format_message(vs); + vnc_unlock_output(vs); +@@ -2317,8 +2304,8 @@ static int protocol_client_init(VncState *vs, uint8_t *data, size_t len) + } + vnc_set_share_mode(vs, mode); + +- vs->client_width = surface_width(vs->vd->ds); +- vs->client_height = surface_height(vs->vd->ds); ++ vs->client_width = pixman_image_get_width(vs->vd->server); ++ vs->client_height = pixman_image_get_height(vs->vd->server); + vnc_write_u16(vs, vs->client_width); + vnc_write_u16(vs, vs->client_height); + +@@ -2685,12 +2672,12 @@ static void vnc_rect_updated(VncDisplay *vd, int x, int y, struct timeval * tv) + + static int vnc_refresh_server_surface(VncDisplay *vd) + { +- int width = pixman_image_get_width(vd->guest.fb); +- int height = pixman_image_get_height(vd->guest.fb); +- int y; ++ int width = MIN(pixman_image_get_width(vd->guest.fb), ++ pixman_image_get_width(vd->server)); ++ int height = MIN(pixman_image_get_height(vd->guest.fb), ++ pixman_image_get_height(vd->server)); ++ int cmp_bytes, server_stride, min_stride, guest_stride, y = 0; + uint8_t *guest_row0 = NULL, *server_row0; +- int guest_stride = 0, server_stride; +- int cmp_bytes; + VncState *vs; + int has_dirty = 0; + pixman_image_t *tmpbuf = NULL; +@@ -2707,10 +2694,10 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + * Check and copy modified bits from guest to server surface. + * Update server dirty map. + */ +- cmp_bytes = VNC_DIRTY_PIXELS_PER_BIT * VNC_SERVER_FB_BYTES; +- if (cmp_bytes > vnc_server_fb_stride(vd)) { +- cmp_bytes = vnc_server_fb_stride(vd); +- } ++ server_row0 = (uint8_t *)pixman_image_get_data(vd->server); ++ server_stride = guest_stride = pixman_image_get_stride(vd->server); ++ cmp_bytes = MIN(VNC_DIRTY_PIXELS_PER_BIT * VNC_SERVER_FB_BYTES, ++ server_stride); + if (vd->guest.format != VNC_SERVER_FB_FORMAT) { + int width = pixman_image_get_width(vd->server); + tmpbuf = qemu_pixman_linebuf_create(VNC_SERVER_FB_FORMAT, width); +@@ -2718,10 +2705,8 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + guest_row0 = (uint8_t *)pixman_image_get_data(vd->guest.fb); + guest_stride = pixman_image_get_stride(vd->guest.fb); + } +- server_row0 = (uint8_t *)pixman_image_get_data(vd->server); +- server_stride = pixman_image_get_stride(vd->server); ++ min_stride = MIN(server_stride, guest_stride); + +- y = 0; + for (;;) { + int x; + uint8_t *guest_ptr, *server_ptr; +@@ -2747,13 +2732,17 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + + for (; x < DIV_ROUND_UP(width, VNC_DIRTY_PIXELS_PER_BIT); + x++, guest_ptr += cmp_bytes, server_ptr += cmp_bytes) { ++ int _cmp_bytes = cmp_bytes; + if (!test_and_clear_bit(x, vd->guest.dirty[y])) { + continue; + } +- if (memcmp(server_ptr, guest_ptr, cmp_bytes) == 0) { ++ if ((x + 1) * cmp_bytes > min_stride) { ++ _cmp_bytes = min_stride - x * cmp_bytes; ++ } ++ if (memcmp(server_ptr, guest_ptr, _cmp_bytes) == 0) { + continue; + } +- memcpy(server_ptr, guest_ptr, cmp_bytes); ++ memcpy(server_ptr, guest_ptr, _cmp_bytes); + if (!vd->non_adaptive) { + vnc_rect_updated(vd, x * VNC_DIRTY_PIXELS_PER_BIT, + y, &tv); +diff --git a/ui/vnc.h b/ui/vnc.h +index ebf4bdd..8d534b6 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -77,14 +77,15 @@ typedef void VncSendHextileTile(VncState *vs, + void *last_fg, + int *has_bg, int *has_fg); + +-/* VNC_MAX_WIDTH must be a multiple of 16. */ +-#define VNC_MAX_WIDTH 2560 +-#define VNC_MAX_HEIGHT 2048 +- + /* VNC_DIRTY_PIXELS_PER_BIT is the number of dirty pixels represented +- * by one bit in the dirty bitmap */ ++ * by one bit in the dirty bitmap, should be a power of 2 */ + #define VNC_DIRTY_PIXELS_PER_BIT 16 + ++/* VNC_MAX_WIDTH must be a multiple of VNC_DIRTY_PIXELS_PER_BIT. */ ++ ++#define VNC_MAX_WIDTH ROUND_UP(2560, VNC_DIRTY_PIXELS_PER_BIT) ++#define VNC_MAX_HEIGHT 2048 ++ + /* VNC_DIRTY_BITS is the number of bits in the dirty bitmap. */ + #define VNC_DIRTY_BITS (VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT) + +@@ -126,7 +127,8 @@ typedef struct VncRectStat VncRectStat; + struct VncSurface + { + struct timeval last_freq_check; +- DECLARE_BITMAP(dirty[VNC_MAX_HEIGHT], VNC_MAX_WIDTH / 16); ++ DECLARE_BITMAP(dirty[VNC_MAX_HEIGHT], ++ VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT); + VncRectStat stats[VNC_STAT_ROWS][VNC_STAT_COLS]; + pixman_image_t *fb; + pixman_format_code_t format; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-vnc-fix-vmware-VGA-incompatiblities.patch b/SOURCES/kvm-ui-vnc-fix-vmware-VGA-incompatiblities.patch new file mode 100644 index 0000000..96479d3 --- /dev/null +++ b/SOURCES/kvm-ui-vnc-fix-vmware-VGA-incompatiblities.patch @@ -0,0 +1,94 @@ +From e35f40730d3d79ebc1870c5716c14f821a67a5ef Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:23 +0100 +Subject: [PATCH 05/24] ui/vnc: fix vmware VGA incompatiblities +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 73976 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 5/8] ui/vnc: fix vmware VGA incompatiblities +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +From: Peter Lieven + +this fixes invalid rectangle updates observed after commit 12b316d +with the vmware VGA driver. The issues occured because the server +and client surface update seems to be out of sync at some points +and the max width of the surface is not dividable by +VNC_DIRTY_BITS_PER_PIXEL (16). + +Reported-by: Serge Hallyn +Signed-off-by: Peter Lieven +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 2f487a3d40faff1772e14da6b921900915501f9a) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vmware_vga.c | 3 ++- + ui/vnc.c | 10 +++++++--- + 2 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c +index df76aec..8e334c0 100644 +--- a/hw/display/vmware_vga.c ++++ b/hw/display/vmware_vga.c +@@ -24,6 +24,7 @@ + #include "hw/hw.h" + #include "hw/loader.h" + #include "ui/console.h" ++#include "ui/vnc.h" + #include "hw/pci/pci.h" + + #undef VERBOSE +@@ -209,7 +210,7 @@ enum { + + /* These values can probably be changed arbitrarily. */ + #define SVGA_SCRATCH_SIZE 0x8000 +-#define SVGA_MAX_WIDTH 2360 ++#define SVGA_MAX_WIDTH ROUND_UP(2360, VNC_DIRTY_PIXELS_PER_BIT) + #define SVGA_MAX_HEIGHT 1770 + + #ifdef VERBOSE +diff --git a/ui/vnc.c b/ui/vnc.c +index 2540261..51f95be 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -898,7 +898,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + VncDisplay *vd = vs->vd; + VncJob *job; + int y; +- int height; ++ int height, width; + int n = 0; + + if (vs->output.offset && !vs->audio_cap && !vs->force_update) +@@ -917,6 +917,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + job = vnc_job_new(vs); + + height = MIN(pixman_image_get_height(vd->server), vs->client_height); ++ width = MIN(pixman_image_get_width(vd->server), vs->client_width); + + y = 0; + for (;;) { +@@ -935,8 +936,11 @@ static int vnc_update_client(VncState *vs, int has_dirty) + VNC_DIRTY_BPL(vs), x); + bitmap_clear(vs->dirty[y], x, x2 - x); + h = find_and_clear_dirty_height(vs, y, x, x2, height); +- n += vnc_job_add_rect(job, x * VNC_DIRTY_PIXELS_PER_BIT, y, +- (x2 - x) * VNC_DIRTY_PIXELS_PER_BIT, h); ++ x2 = MIN(x2, width / VNC_DIRTY_PIXELS_PER_BIT); ++ if (x2 > x) { ++ n += vnc_job_add_rect(job, x * VNC_DIRTY_PIXELS_PER_BIT, y, ++ (x2 - x) * VNC_DIRTY_PIXELS_PER_BIT, h); ++ } + } + + vnc_job_push(job); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-vnc-introduce-VNC_DIRTY_PIXELS_PER_BIT-macro.patch b/SOURCES/kvm-ui-vnc-introduce-VNC_DIRTY_PIXELS_PER_BIT-macro.patch new file mode 100644 index 0000000..f435ab8 --- /dev/null +++ b/SOURCES/kvm-ui-vnc-introduce-VNC_DIRTY_PIXELS_PER_BIT-macro.patch @@ -0,0 +1,203 @@ +From fd7f778fd9bd7b99ce790081544b28adede189b2 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:19 +0100 +Subject: [PATCH 01/24] ui/vnc: introduce VNC_DIRTY_PIXELS_PER_BIT macro +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 73972 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/8] ui/vnc: introduce VNC_DIRTY_PIXELS_PER_BIT macro +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Wenchao Xia +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b4c85ddcec24c60616aad9b3b7fc36ce19ba3ca4) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 65 ++++++++++++++++++++++++++++++++++++++++------------------------ + ui/vnc.h | 6 +++++- + 2 files changed, 46 insertions(+), 25 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index a0e2d33..0c799ed 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -442,17 +442,19 @@ static void vnc_dpy_update(DisplayChangeListener *dcl, + iteration. otherwise, if (x % 16) != 0, the last iteration may span + two 16-pixel blocks but we only mark the first as dirty + */ +- w += (x % 16); +- x -= (x % 16); ++ w += (x % VNC_DIRTY_PIXELS_PER_BIT); ++ x -= (x % VNC_DIRTY_PIXELS_PER_BIT); + + x = MIN(x, width); + y = MIN(y, height); + w = MIN(x + w, width) - x; + h = MIN(h, height); + +- for (; y < h; y++) +- for (i = 0; i < w; i += 16) +- set_bit((x + i) / 16, s->dirty[y]); ++ for (; y < h; y++) { ++ for (i = 0; i < w; i += VNC_DIRTY_PIXELS_PER_BIT) { ++ set_bit((x + i) / VNC_DIRTY_PIXELS_PER_BIT, s->dirty[y]); ++ } ++ } + } + + void vnc_framebuffer_update(VncState *vs, int x, int y, int w, int h, +@@ -769,11 +771,12 @@ static void vnc_dpy_copy(DisplayChangeListener *dcl, + y = dst_y + h - 1; + inc = -1; + } +- w_lim = w - (16 - (dst_x % 16)); +- if (w_lim < 0) ++ w_lim = w - (VNC_DIRTY_PIXELS_PER_BIT - (dst_x % VNC_DIRTY_PIXELS_PER_BIT)); ++ if (w_lim < 0) { + w_lim = w; +- else +- w_lim = w - (w_lim % 16); ++ } else { ++ w_lim = w - (w_lim % VNC_DIRTY_PIXELS_PER_BIT); ++ } + for (i = 0; i < h; i++) { + for (x = 0; x <= w_lim; + x += s, src_row += cmp_bytes, dst_row += cmp_bytes) { +@@ -781,10 +784,11 @@ static void vnc_dpy_copy(DisplayChangeListener *dcl, + if ((s = w - w_lim) == 0) + break; + } else if (!x) { +- s = (16 - (dst_x % 16)); ++ s = (VNC_DIRTY_PIXELS_PER_BIT - ++ (dst_x % VNC_DIRTY_PIXELS_PER_BIT)); + s = MIN(s, w_lim); + } else { +- s = 16; ++ s = VNC_DIRTY_PIXELS_PER_BIT; + } + cmp_bytes = s * VNC_SERVER_FB_BYTES; + if (memcmp(src_row, dst_row, cmp_bytes) == 0) +@@ -792,7 +796,8 @@ static void vnc_dpy_copy(DisplayChangeListener *dcl, + memmove(dst_row, src_row, cmp_bytes); + QTAILQ_FOREACH(vs, &vd->clients, next) { + if (!vnc_has_feature(vs, VNC_FEATURE_COPYRECT)) { +- set_bit(((x + dst_x) / 16), vs->dirty[y]); ++ set_bit(((x + dst_x) / VNC_DIRTY_PIXELS_PER_BIT), ++ vs->dirty[y]); + } + } + } +@@ -911,7 +916,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + for (y = 0; y < height; y++) { + int x; + int last_x = -1; +- for (x = 0; x < width / 16; x++) { ++ for (x = 0; x < width / VNC_DIRTY_PIXELS_PER_BIT; x++) { + if (test_and_clear_bit(x, vs->dirty[y])) { + if (last_x == -1) { + last_x = x; +@@ -921,16 +926,22 @@ static int vnc_update_client(VncState *vs, int has_dirty) + int h = find_and_clear_dirty_height(vs, y, last_x, x, + height); + +- n += vnc_job_add_rect(job, last_x * 16, y, +- (x - last_x) * 16, h); ++ n += vnc_job_add_rect(job, ++ last_x * VNC_DIRTY_PIXELS_PER_BIT, ++ y, ++ (x - last_x) * ++ VNC_DIRTY_PIXELS_PER_BIT, ++ h); + } + last_x = -1; + } + } + if (last_x != -1) { + int h = find_and_clear_dirty_height(vs, y, last_x, x, height); +- n += vnc_job_add_rect(job, last_x * 16, y, +- (x - last_x) * 16, h); ++ n += vnc_job_add_rect(job, last_x * VNC_DIRTY_PIXELS_PER_BIT, ++ y, ++ (x - last_x) * VNC_DIRTY_PIXELS_PER_BIT, ++ h); + } + } + +@@ -1861,7 +1872,7 @@ static void framebuffer_update_request(VncState *vs, int incremental, + int w, int h) + { + int i; +- const size_t width = surface_width(vs->vd->ds) / 16; ++ const size_t width = surface_width(vs->vd->ds) / VNC_DIRTY_PIXELS_PER_BIT; + const size_t height = surface_height(vs->vd->ds); + + if (y_position > height) { +@@ -2573,7 +2584,9 @@ static int vnc_refresh_lossy_rect(VncDisplay *vd, int x, int y) + + vs->lossy_rect[sty][stx] = 0; + for (j = 0; j < VNC_STAT_RECT; ++j) { +- bitmap_set(vs->dirty[y + j], x / 16, VNC_STAT_RECT / 16); ++ bitmap_set(vs->dirty[y + j], ++ x / VNC_DIRTY_PIXELS_PER_BIT, ++ VNC_STAT_RECT / VNC_DIRTY_PIXELS_PER_BIT); + } + has_dirty++; + } +@@ -2720,17 +2733,21 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + } + server_ptr = server_row; + +- for (x = 0; x + 15 < width; +- x += 16, guest_ptr += cmp_bytes, server_ptr += cmp_bytes) { +- if (!test_and_clear_bit((x / 16), vd->guest.dirty[y])) ++ for (x = 0; x + VNC_DIRTY_PIXELS_PER_BIT - 1 < width; ++ x += VNC_DIRTY_PIXELS_PER_BIT, guest_ptr += cmp_bytes, ++ server_ptr += cmp_bytes) { ++ if (!test_and_clear_bit((x / VNC_DIRTY_PIXELS_PER_BIT), ++ vd->guest.dirty[y])) { + continue; +- if (memcmp(server_ptr, guest_ptr, cmp_bytes) == 0) ++ } ++ if (memcmp(server_ptr, guest_ptr, cmp_bytes) == 0) { + continue; ++ } + memcpy(server_ptr, guest_ptr, cmp_bytes); + if (!vd->non_adaptive) + vnc_rect_updated(vd, x, y, &tv); + QTAILQ_FOREACH(vs, &vd->clients, next) { +- set_bit((x / 16), vs->dirty[y]); ++ set_bit((x / VNC_DIRTY_PIXELS_PER_BIT), vs->dirty[y]); + } + has_dirty++; + } +diff --git a/ui/vnc.h b/ui/vnc.h +index 0efc5c6..561f383 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -81,8 +81,12 @@ typedef void VncSendHextileTile(VncState *vs, + #define VNC_MAX_WIDTH 2560 + #define VNC_MAX_HEIGHT 2048 + ++/* VNC_DIRTY_PIXELS_PER_BIT is the number of dirty pixels represented ++ * by one bit in the dirty bitmap */ ++#define VNC_DIRTY_PIXELS_PER_BIT 16 ++ + /* VNC_DIRTY_BITS is the number of bits in the dirty bitmap. */ +-#define VNC_DIRTY_BITS (VNC_MAX_WIDTH / 16) ++#define VNC_DIRTY_BITS (VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT) + + #define VNC_STAT_RECT 64 + #define VNC_STAT_COLS (VNC_MAX_WIDTH / VNC_STAT_RECT) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-vnc-optimize-dirty-bitmap-tracking.patch b/SOURCES/kvm-ui-vnc-optimize-dirty-bitmap-tracking.patch new file mode 100644 index 0000000..d45c7a3 --- /dev/null +++ b/SOURCES/kvm-ui-vnc-optimize-dirty-bitmap-tracking.patch @@ -0,0 +1,287 @@ +From ea939f77fa0b152746821afb017cfef8170e5500 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:21 +0100 +Subject: [PATCH 03/24] ui/vnc: optimize dirty bitmap tracking +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 73979 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 3/8] ui/vnc: optimize dirty bitmap tracking +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +From: Peter Lieven + +vnc_update_client currently scans the dirty bitmap of each client +bitwise which is a very costly operation if only few bits are dirty. +vnc_refresh_server_surface does almost the same. +this patch optimizes both by utilizing the heavily optimized +function find_next_bit to find the offset of the next dirty +bit in the dirty bitmaps. + +The following artifical test (just the bitmap operation part) running +vnc_update_client 65536 times on a 2560x2048 surface illustrates the +performance difference: + +All bits clean - vnc_update_client_new: 0.07 secs + vnc_update_client_old: 10.98 secs + +All bits dirty - vnc_update_client_new: 11.26 secs + vnc_update_client_old: 20.19 secs + +Few bits dirty - vnc_update_client_new: 0.08 secs + vnc_update_client_old: 10.98 secs + +The case for all bits dirty is still rather slow, this +is due to the implementation of find_and_clear_dirty_height. +This will be addresses in a separate patch. + +Signed-off-by: Peter Lieven +Reviewed-by: Wenchao Xia +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 12b316d4c173bf07f421ef9dc98ba4b53916066e) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 155 ++++++++++++++++++++++++++++++++++----------------------------- + ui/vnc.h | 4 ++ + 2 files changed, 88 insertions(+), 71 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 13fb34b..54530a2 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -572,6 +572,15 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y) + ptr += x * VNC_SERVER_FB_BYTES; + return ptr; + } ++/* this sets only the visible pixels of a dirty bitmap */ ++#define VNC_SET_VISIBLE_PIXELS_DIRTY(bitmap, w, h) {\ ++ int y;\ ++ memset(bitmap, 0x00, sizeof(bitmap));\ ++ for (y = 0; y < h; y++) {\ ++ bitmap_set(bitmap[y], 0,\ ++ DIV_ROUND_UP(w, VNC_DIRTY_PIXELS_PER_BIT));\ ++ } \ ++ } + + static void vnc_dpy_switch(DisplayChangeListener *dcl, + DisplaySurface *surface) +@@ -597,7 +606,9 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + qemu_pixman_image_unref(vd->guest.fb); + vd->guest.fb = pixman_image_ref(surface->image); + vd->guest.format = surface->format; +- memset(vd->guest.dirty, 0xFF, sizeof(vd->guest.dirty)); ++ VNC_SET_VISIBLE_PIXELS_DIRTY(vd->guest.dirty, ++ surface_width(vd->ds), ++ surface_height(vd->ds)); + + QTAILQ_FOREACH(vs, &vd->clients, next) { + vnc_colordepth(vs); +@@ -605,7 +616,9 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + if (vs->vd->cursor) { + vnc_cursor_define(vs); + } +- memset(vs->dirty, 0xFF, sizeof(vs->dirty)); ++ VNC_SET_VISIBLE_PIXELS_DIRTY(vs->dirty, ++ surface_width(vd->ds), ++ surface_height(vd->ds)); + } + } + +@@ -891,10 +904,9 @@ static int vnc_update_client(VncState *vs, int has_dirty) + VncDisplay *vd = vs->vd; + VncJob *job; + int y; +- int width, height; ++ int height; + int n = 0; + +- + if (vs->output.offset && !vs->audio_cap && !vs->force_update) + /* kernel send buffers are full -> drop frames to throttle */ + return 0; +@@ -910,39 +922,27 @@ static int vnc_update_client(VncState *vs, int has_dirty) + */ + job = vnc_job_new(vs); + +- width = MIN(pixman_image_get_width(vd->server), vs->client_width); + height = MIN(pixman_image_get_height(vd->server), vs->client_height); + +- for (y = 0; y < height; y++) { +- int x; +- int last_x = -1; +- for (x = 0; x < width / VNC_DIRTY_PIXELS_PER_BIT; x++) { +- if (test_and_clear_bit(x, vs->dirty[y])) { +- if (last_x == -1) { +- last_x = x; +- } +- } else { +- if (last_x != -1) { +- int h = find_and_clear_dirty_height(vs, y, last_x, x, +- height); +- +- n += vnc_job_add_rect(job, +- last_x * VNC_DIRTY_PIXELS_PER_BIT, +- y, +- (x - last_x) * +- VNC_DIRTY_PIXELS_PER_BIT, +- h); +- } +- last_x = -1; +- } +- } +- if (last_x != -1) { +- int h = find_and_clear_dirty_height(vs, y, last_x, x, height); +- n += vnc_job_add_rect(job, last_x * VNC_DIRTY_PIXELS_PER_BIT, +- y, +- (x - last_x) * VNC_DIRTY_PIXELS_PER_BIT, +- h); ++ y = 0; ++ for (;;) { ++ int x, h; ++ unsigned long x2; ++ unsigned long offset = find_next_bit((unsigned long *) &vs->dirty, ++ height * VNC_DIRTY_BPL(vs), ++ y * VNC_DIRTY_BPL(vs)); ++ if (offset == height * VNC_DIRTY_BPL(vs)) { ++ /* no more dirty bits */ ++ break; + } ++ y = offset / VNC_DIRTY_BPL(vs); ++ x = offset % VNC_DIRTY_BPL(vs); ++ x2 = find_next_zero_bit((unsigned long *) &vs->dirty[y], ++ VNC_DIRTY_BPL(vs), x); ++ bitmap_clear(vs->dirty[y], x, x2 - x); ++ h = find_and_clear_dirty_height(vs, y, x, x2, height); ++ n += vnc_job_add_rect(job, x * VNC_DIRTY_PIXELS_PER_BIT, y, ++ (x2 - x) * VNC_DIRTY_PIXELS_PER_BIT, h); + } + + vnc_job_push(job); +@@ -2690,8 +2690,8 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + int width = pixman_image_get_width(vd->guest.fb); + int height = pixman_image_get_height(vd->guest.fb); + int y; +- uint8_t *guest_row; +- uint8_t *server_row; ++ uint8_t *guest_row0 = NULL, *server_row0; ++ int guest_stride = 0, server_stride; + int cmp_bytes; + VncState *vs; + int has_dirty = 0; +@@ -2716,44 +2716,57 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + if (vd->guest.format != VNC_SERVER_FB_FORMAT) { + int width = pixman_image_get_width(vd->server); + tmpbuf = qemu_pixman_linebuf_create(VNC_SERVER_FB_FORMAT, width); +- } +- guest_row = (uint8_t *)pixman_image_get_data(vd->guest.fb); +- server_row = (uint8_t *)pixman_image_get_data(vd->server); +- for (y = 0; y < height; y++) { +- if (!bitmap_empty(vd->guest.dirty[y], VNC_DIRTY_BITS)) { +- int x; +- uint8_t *guest_ptr; +- uint8_t *server_ptr; +- +- if (vd->guest.format != VNC_SERVER_FB_FORMAT) { +- qemu_pixman_linebuf_fill(tmpbuf, vd->guest.fb, width, 0, y); +- guest_ptr = (uint8_t *)pixman_image_get_data(tmpbuf); +- } else { +- guest_ptr = guest_row; +- } +- server_ptr = server_row; ++ } else { ++ guest_row0 = (uint8_t *)pixman_image_get_data(vd->guest.fb); ++ guest_stride = pixman_image_get_stride(vd->guest.fb); ++ } ++ server_row0 = (uint8_t *)pixman_image_get_data(vd->server); ++ server_stride = pixman_image_get_stride(vd->server); ++ ++ y = 0; ++ for (;;) { ++ int x; ++ uint8_t *guest_ptr, *server_ptr; ++ unsigned long offset = find_next_bit((unsigned long *) &vd->guest.dirty, ++ height * VNC_DIRTY_BPL(&vd->guest), ++ y * VNC_DIRTY_BPL(&vd->guest)); ++ if (offset == height * VNC_DIRTY_BPL(&vd->guest)) { ++ /* no more dirty bits */ ++ break; ++ } ++ y = offset / VNC_DIRTY_BPL(&vd->guest); ++ x = offset % VNC_DIRTY_BPL(&vd->guest); + +- for (x = 0; x + VNC_DIRTY_PIXELS_PER_BIT - 1 < width; +- x += VNC_DIRTY_PIXELS_PER_BIT, guest_ptr += cmp_bytes, +- server_ptr += cmp_bytes) { +- if (!test_and_clear_bit((x / VNC_DIRTY_PIXELS_PER_BIT), +- vd->guest.dirty[y])) { +- continue; +- } +- if (memcmp(server_ptr, guest_ptr, cmp_bytes) == 0) { +- continue; +- } +- memcpy(server_ptr, guest_ptr, cmp_bytes); +- if (!vd->non_adaptive) +- vnc_rect_updated(vd, x, y, &tv); +- QTAILQ_FOREACH(vs, &vd->clients, next) { +- set_bit((x / VNC_DIRTY_PIXELS_PER_BIT), vs->dirty[y]); +- } +- has_dirty++; ++ server_ptr = server_row0 + y * server_stride + x * cmp_bytes; ++ ++ if (vd->guest.format != VNC_SERVER_FB_FORMAT) { ++ qemu_pixman_linebuf_fill(tmpbuf, vd->guest.fb, width, 0, y); ++ guest_ptr = (uint8_t *)pixman_image_get_data(tmpbuf); ++ } else { ++ guest_ptr = guest_row0 + y * guest_stride; ++ } ++ guest_ptr += x * cmp_bytes; ++ ++ for (; x < DIV_ROUND_UP(width, VNC_DIRTY_PIXELS_PER_BIT); ++ x++, guest_ptr += cmp_bytes, server_ptr += cmp_bytes) { ++ if (!test_and_clear_bit(x, vd->guest.dirty[y])) { ++ continue; ++ } ++ if (memcmp(server_ptr, guest_ptr, cmp_bytes) == 0) { ++ continue; ++ } ++ memcpy(server_ptr, guest_ptr, cmp_bytes); ++ if (!vd->non_adaptive) { ++ vnc_rect_updated(vd, x * VNC_DIRTY_PIXELS_PER_BIT, ++ y, &tv); + } ++ QTAILQ_FOREACH(vs, &vd->clients, next) { ++ set_bit(x, vs->dirty[y]); ++ } ++ has_dirty++; + } +- guest_row += pixman_image_get_stride(vd->guest.fb); +- server_row += pixman_image_get_stride(vd->server); ++ ++ y++; + } + qemu_pixman_image_unref(tmpbuf); + return has_dirty; +diff --git a/ui/vnc.h b/ui/vnc.h +index 561f383..ebf4bdd 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -88,6 +88,10 @@ typedef void VncSendHextileTile(VncState *vs, + /* VNC_DIRTY_BITS is the number of bits in the dirty bitmap. */ + #define VNC_DIRTY_BITS (VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT) + ++/* VNC_DIRTY_BPL (BPL = bits per line) might be greater than ++ * VNC_DIRTY_BITS due to alignment */ ++#define VNC_DIRTY_BPL(x) (sizeof((x)->dirty) / VNC_MAX_HEIGHT * BITS_PER_BYTE) ++ + #define VNC_STAT_RECT 64 + #define VNC_STAT_COLS (VNC_MAX_WIDTH / VNC_STAT_RECT) + #define VNC_STAT_ROWS (VNC_MAX_HEIGHT / VNC_STAT_RECT) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-ui-vnc-optimize-setting-in-vnc_dpy_update.patch b/SOURCES/kvm-ui-vnc-optimize-setting-in-vnc_dpy_update.patch new file mode 100644 index 0000000..d2de57e --- /dev/null +++ b/SOURCES/kvm-ui-vnc-optimize-setting-in-vnc_dpy_update.patch @@ -0,0 +1,71 @@ +From 9730b328cc524281334344466a01fb861b271b82 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:22 +0100 +Subject: [PATCH 04/24] ui/vnc: optimize setting in vnc_dpy_update() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 73974 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 4/8] ui/vnc: optimize setting in vnc_dpy_update() +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +From: Peter Lieven + +Signed-off-by: Peter Lieven +Reviewed-by: Wenchao Xia +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 919372251cbfa9e43b0264fec475dd1eca23784f) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 16 +++++----------- + 1 file changed, 5 insertions(+), 11 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 54530a2..2540261 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -430,30 +430,24 @@ static int vnc_refresh_server_surface(VncDisplay *vd); + static void vnc_dpy_update(DisplayChangeListener *dcl, + int x, int y, int w, int h) + { +- int i; + VncDisplay *vd = container_of(dcl, VncDisplay, dcl); + struct VncSurface *s = &vd->guest; + int width = surface_width(vd->ds); + int height = surface_height(vd->ds); + +- h += y; +- +- /* round x down to ensure the loop only spans one 16-pixel block per, +- iteration. otherwise, if (x % 16) != 0, the last iteration may span +- two 16-pixel blocks but we only mark the first as dirty +- */ ++ /* this is needed this to ensure we updated all affected ++ * blocks if x % VNC_DIRTY_PIXELS_PER_BIT != 0 */ + w += (x % VNC_DIRTY_PIXELS_PER_BIT); + x -= (x % VNC_DIRTY_PIXELS_PER_BIT); + + x = MIN(x, width); + y = MIN(y, height); + w = MIN(x + w, width) - x; +- h = MIN(h, height); ++ h = MIN(y + h, height); + + for (; y < h; y++) { +- for (i = 0; i < w; i += VNC_DIRTY_PIXELS_PER_BIT) { +- set_bit((x + i) / VNC_DIRTY_PIXELS_PER_BIT, s->dirty[y]); +- } ++ bitmap_set(s->dirty[y], x / VNC_DIRTY_PIXELS_PER_BIT, ++ DIV_ROUND_UP(w, VNC_DIRTY_PIXELS_PER_BIT)); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-Add-max_streams-attribute-to-endpoint-info.patch b/SOURCES/kvm-usb-Add-max_streams-attribute-to-endpoint-info.patch new file mode 100644 index 0000000..9cc5211 --- /dev/null +++ b/SOURCES/kvm-usb-Add-max_streams-attribute-to-endpoint-info.patch @@ -0,0 +1,115 @@ +From 232db7b0f138480202ce2bba4e69de5b0972c455 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:53 +0200 +Subject: [PATCH 19/43] usb: Add max_streams attribute to endpoint info + +Message-id: <1405088470-24115-21-git-send-email-kraxel@redhat.com> +Patchwork-id: 59847 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 20/37] usb: Add max_streams attribute to endpoint info +Bugzilla: 1111450 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 04b300f85fafd2d6a92ec0a766f0035e9bc5835c) +--- + hw/usb/core.c | 22 ++++++++++++++++++++++ + hw/usb/desc.c | 2 ++ + include/hw/usb.h | 3 +++ + 3 files changed, 27 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/core.c | 22 ++++++++++++++++++++++ + hw/usb/desc.c | 2 ++ + include/hw/usb.h | 3 +++ + 3 files changed, 27 insertions(+) + +diff --git a/hw/usb/core.c b/hw/usb/core.c +index cf59a1a..67ba7d6 100644 +--- a/hw/usb/core.c ++++ b/hw/usb/core.c +@@ -623,6 +623,7 @@ void usb_ep_reset(USBDevice *dev) + dev->ep_ctl.type = USB_ENDPOINT_XFER_CONTROL; + dev->ep_ctl.ifnum = 0; + dev->ep_ctl.max_packet_size = 64; ++ dev->ep_ctl.max_streams = 0; + dev->ep_ctl.dev = dev; + dev->ep_ctl.pipeline = false; + for (ep = 0; ep < USB_MAX_ENDPOINTS; ep++) { +@@ -636,6 +637,8 @@ void usb_ep_reset(USBDevice *dev) + dev->ep_out[ep].ifnum = USB_INTERFACE_INVALID; + dev->ep_in[ep].max_packet_size = 0; + dev->ep_out[ep].max_packet_size = 0; ++ dev->ep_in[ep].max_streams = 0; ++ dev->ep_out[ep].max_streams = 0; + dev->ep_in[ep].dev = dev; + dev->ep_out[ep].dev = dev; + dev->ep_in[ep].pipeline = false; +@@ -764,6 +767,25 @@ int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep) + return uep->max_packet_size; + } + ++void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw) ++{ ++ struct USBEndpoint *uep = usb_ep_get(dev, pid, ep); ++ int MaxStreams; ++ ++ MaxStreams = raw & 0x1f; ++ if (MaxStreams) { ++ uep->max_streams = 1 << MaxStreams; ++ } else { ++ uep->max_streams = 0; ++ } ++} ++ ++int usb_ep_get_max_streams(USBDevice *dev, int pid, int ep) ++{ ++ struct USBEndpoint *uep = usb_ep_get(dev, pid, ep); ++ return uep->max_streams; ++} ++ + void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled) + { + struct USBEndpoint *uep = usb_ep_get(dev, pid, ep); +diff --git a/hw/usb/desc.c b/hw/usb/desc.c +index 5a954c6..f133ddb 100644 +--- a/hw/usb/desc.c ++++ b/hw/usb/desc.c +@@ -385,6 +385,8 @@ static void usb_desc_ep_init(USBDevice *dev) + usb_ep_set_ifnum(dev, pid, ep, iface->bInterfaceNumber); + usb_ep_set_max_packet_size(dev, pid, ep, + iface->eps[e].wMaxPacketSize); ++ usb_ep_set_max_streams(dev, pid, ep, ++ iface->eps[e].bmAttributes_super); + } + } + } +diff --git a/include/hw/usb.h b/include/hw/usb.h +index 5668701..116293e 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -199,6 +199,7 @@ struct USBEndpoint { + uint8_t type; + uint8_t ifnum; + int max_packet_size; ++ int max_streams; + bool pipeline; + bool halted; + USBDevice *dev; +@@ -433,6 +434,8 @@ void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum); + void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep, + uint16_t raw); + int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep); ++void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw); ++int usb_ep_get_max_streams(USBDevice *dev, int pid, int ep); + void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled); + void usb_ep_set_halted(USBDevice *dev, int pid, int ep, bool halted); + USBPacket *usb_ep_find_packet_by_id(USBDevice *dev, int pid, int ep, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-Add-usb_device_alloc-free_streams.patch b/SOURCES/kvm-usb-Add-usb_device_alloc-free_streams.patch new file mode 100644 index 0000000..a94b684 --- /dev/null +++ b/SOURCES/kvm-usb-Add-usb_device_alloc-free_streams.patch @@ -0,0 +1,91 @@ +From eccc9faa264d2228126d4fccc5a603b70b02cc9c Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:54 +0200 +Subject: [PATCH 20/43] usb: Add usb_device_alloc/free_streams + +Message-id: <1405088470-24115-22-git-send-email-kraxel@redhat.com> +Patchwork-id: 59833 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 21/37] usb: Add usb_device_alloc/free_streams +Bugzilla: 1111450 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 3b444eadf7726d976be4ac89e8e742cb7eb7a5ee) +--- + hw/usb/bus.c | 18 ++++++++++++++++++ + include/hw/usb.h | 12 ++++++++++++ + 2 files changed, 30 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/bus.c | 18 ++++++++++++++++++ + include/hw/usb.h | 12 ++++++++++++ + 2 files changed, 30 insertions(+) + +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index f4eeb5e..12641fe 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -206,6 +206,24 @@ void usb_device_ep_stopped(USBDevice *dev, USBEndpoint *ep) + } + } + ++int usb_device_alloc_streams(USBDevice *dev, USBEndpoint **eps, int nr_eps, ++ int streams) ++{ ++ USBDeviceClass *klass = USB_DEVICE_GET_CLASS(dev); ++ if (klass->alloc_streams) { ++ return klass->alloc_streams(dev, eps, nr_eps, streams); ++ } ++ return 0; ++} ++ ++void usb_device_free_streams(USBDevice *dev, USBEndpoint **eps, int nr_eps) ++{ ++ USBDeviceClass *klass = USB_DEVICE_GET_CLASS(dev); ++ if (klass->free_streams) { ++ klass->free_streams(dev, eps, nr_eps); ++ } ++} ++ + static int usb_qdev_init(DeviceState *qdev) + { + USBDevice *dev = USB_DEVICE(qdev); +diff --git a/include/hw/usb.h b/include/hw/usb.h +index 116293e..000001b 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -327,6 +327,14 @@ typedef struct USBDeviceClass { + */ + void (*ep_stopped)(USBDevice *dev, USBEndpoint *ep); + ++ /* ++ * Called by the hcd to alloc / free streams on a bulk endpoint. ++ * Optional may be NULL. ++ */ ++ int (*alloc_streams)(USBDevice *dev, USBEndpoint **eps, int nr_eps, ++ int streams); ++ void (*free_streams)(USBDevice *dev, USBEndpoint **eps, int nr_eps); ++ + const char *product_desc; + const USBDesc *usb_desc; + } USBDeviceClass; +@@ -564,6 +572,10 @@ void usb_device_flush_ep_queue(USBDevice *dev, USBEndpoint *ep); + + void usb_device_ep_stopped(USBDevice *dev, USBEndpoint *ep); + ++int usb_device_alloc_streams(USBDevice *dev, USBEndpoint **eps, int nr_eps, ++ int streams); ++void usb_device_free_streams(USBDevice *dev, USBEndpoint **eps, int nr_eps); ++ + const char *usb_device_get_product_desc(USBDevice *dev); + + const USBDesc *usb_device_get_usb_desc(USBDevice *dev); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-Also-reset-max_packet_size-on-ep_reset.patch b/SOURCES/kvm-usb-Also-reset-max_packet_size-on-ep_reset.patch new file mode 100644 index 0000000..242061b --- /dev/null +++ b/SOURCES/kvm-usb-Also-reset-max_packet_size-on-ep_reset.patch @@ -0,0 +1,51 @@ +From ded29e4e267ff8f7cbaf815f27e2ced2e4a24775 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:46 +0200 +Subject: [PATCH 12/43] usb: Also reset max_packet_size on ep_reset + +Message-id: <1405088470-24115-14-git-send-email-kraxel@redhat.com> +Patchwork-id: 59824 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 13/37] usb: Also reset max_packet_size on ep_reset +Bugzilla: 1075846 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 9adbaad318cddd300c42dbbbc88991cdc9cecd99) +--- + hw/usb/core.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/core.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hw/usb/core.c b/hw/usb/core.c +index 31960c2..cf59a1a 100644 +--- a/hw/usb/core.c ++++ b/hw/usb/core.c +@@ -622,6 +622,7 @@ void usb_ep_reset(USBDevice *dev) + dev->ep_ctl.nr = 0; + dev->ep_ctl.type = USB_ENDPOINT_XFER_CONTROL; + dev->ep_ctl.ifnum = 0; ++ dev->ep_ctl.max_packet_size = 64; + dev->ep_ctl.dev = dev; + dev->ep_ctl.pipeline = false; + for (ep = 0; ep < USB_MAX_ENDPOINTS; ep++) { +@@ -633,6 +634,8 @@ void usb_ep_reset(USBDevice *dev) + dev->ep_out[ep].type = USB_ENDPOINT_XFER_INVALID; + dev->ep_in[ep].ifnum = USB_INTERFACE_INVALID; + dev->ep_out[ep].ifnum = USB_INTERFACE_INVALID; ++ dev->ep_in[ep].max_packet_size = 0; ++ dev->ep_out[ep].max_packet_size = 0; + dev->ep_in[ep].dev = dev; + dev->ep_out[ep].dev = dev; + dev->ep_in[ep].pipeline = false; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-Fix-iovec-memleak-on-combined-packet-free.patch b/SOURCES/kvm-usb-Fix-iovec-memleak-on-combined-packet-free.patch new file mode 100644 index 0000000..6d8ec92 --- /dev/null +++ b/SOURCES/kvm-usb-Fix-iovec-memleak-on-combined-packet-free.patch @@ -0,0 +1,42 @@ +From 722ac823089706c3c4ea71386eafb4d7062fa7c9 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:47 +0200 +Subject: [PATCH 13/43] usb: Fix iovec memleak on combined-packet free + +Message-id: <1405088470-24115-15-git-send-email-kraxel@redhat.com> +Patchwork-id: 59845 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 14/37] usb: Fix iovec memleak on combined-packet free +Bugzilla: 1075846 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 0ca6db4f3b3df5c4e5285a48a7709bdced5068de) +--- + hw/usb/combined-packet.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/combined-packet.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/usb/combined-packet.c b/hw/usb/combined-packet.c +index 13f6602..ad77705 100644 +--- a/hw/usb/combined-packet.c ++++ b/hw/usb/combined-packet.c +@@ -39,6 +39,7 @@ static void usb_combined_packet_remove(USBCombinedPacket *combined, + p->combined = NULL; + QTAILQ_REMOVE(&combined->packets, p, combined_entry); + if (QTAILQ_EMPTY(&combined->packets)) { ++ qemu_iovec_destroy(&combined->iov); + g_free(combined); + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-add-microsoft-os-descriptors-compat-property.patch b/SOURCES/kvm-usb-add-microsoft-os-descriptors-compat-property.patch new file mode 100644 index 0000000..918235a --- /dev/null +++ b/SOURCES/kvm-usb-add-microsoft-os-descriptors-compat-property.patch @@ -0,0 +1,44 @@ +From 081943079e969c7f5edb5d52182b09da3230fb3b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 3 Feb 2014 16:30:31 +0100 +Subject: [PATCH 07/28] usb: add microsoft os descriptors compat property + +RH-Author: Gerd Hoffmann +Message-id: <1391445032-5540-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 57074 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/5] usb: add microsoft os descriptors compat property +Bugzilla: 1039530 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +Turn off for rhel6 machine types. RHEL only patch. + +Signed-off-by: Gerd Hoffmann +--- + hw/i386/pc_piix.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index aac920a..697f12f 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -900,6 +900,10 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "virtio-net-pci",\ + .property = "romfile",\ + .value = "rhel6-virtio.rom",\ ++ },{\ ++ .driver = TYPE_USB_DEVICE,\ ++ .property = "msos-desc",\ ++ .value = "no",\ + } + + static void pc_compat_rhel650(QEMUMachineInitArgs *args) +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-add-serial-bus-property.patch b/SOURCES/kvm-usb-add-serial-bus-property.patch new file mode 100644 index 0000000..7cc03cc --- /dev/null +++ b/SOURCES/kvm-usb-add-serial-bus-property.patch @@ -0,0 +1,143 @@ +From b853920b298d19a1905d106c7d965bda29b7a26c Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 2 Sep 2013 13:26:15 +0200 +Subject: [PATCH 09/29] usb: add serial bus property + +RH-Author: Gerd Hoffmann +Message-id: <1378128376-25930-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 53989 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/2] usb: add serial bus property +Bugzilla: 953304 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Hans de Goede +RH-Acked-by: Paolo Bonzini + +This patch adds a serial property for all usb devices, which can be +used to set the serial number of a usb device (as listed by lsusb -v) +to a specific value. Applies to emulated devices only. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 71938a09d2b9fd4007515fec6c395916cb08f868) +--- + hw/usb/bus.c | 1 + + hw/usb/desc.c | 6 ++++++ + hw/usb/dev-hid.c | 3 +++ + hw/usb/dev-storage.c | 13 +++---------- + include/hw/usb.h | 1 + + 5 files changed, 14 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/bus.c | 1 + + hw/usb/desc.c | 6 ++++++ + hw/usb/dev-hid.c | 3 +++ + hw/usb/dev-storage.c | 13 +++---------- + include/hw/usb.h | 1 + + 5 files changed, 14 insertions(+), 10 deletions(-) + +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index d1827be..f83d1de 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -13,6 +13,7 @@ static int usb_qdev_exit(DeviceState *qdev); + + static Property usb_props[] = { + DEFINE_PROP_STRING("port", USBDevice, port_path), ++ DEFINE_PROP_STRING("serial", USBDevice, serial), + DEFINE_PROP_BIT("full-path", USBDevice, flags, + USB_DEV_FLAG_FULL_PATH, true), + DEFINE_PROP_END_OF_LIST() +diff --git a/hw/usb/desc.c b/hw/usb/desc.c +index fce303e..bf6c522 100644 +--- a/hw/usb/desc.c ++++ b/hw/usb/desc.c +@@ -566,6 +566,12 @@ void usb_desc_create_serial(USBDevice *dev) + char *path; + int dst; + ++ if (dev->serial) { ++ /* 'serial' usb bus property has priority if present */ ++ usb_desc_set_string(dev, index, dev->serial); ++ return; ++ } ++ + assert(index != 0 && desc->str[index] != NULL); + dst = snprintf(serial, sizeof(serial), "%s", desc->str[index]); + path = qdev_get_dev_path(hcd); +diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c +index b48899d..31f3cde 100644 +--- a/hw/usb/dev-hid.c ++++ b/hw/usb/dev-hid.c +@@ -560,6 +560,9 @@ static int usb_hid_initfn(USBDevice *dev, int kind) + { + USBHIDState *us = DO_UPCAST(USBHIDState, dev, dev); + ++ if (dev->serial) { ++ usb_desc_set_string(dev, STR_SERIALNUMBER, dev->serial); ++ } + usb_desc_init(dev); + us->intr = usb_ep_get(dev, USB_TOKEN_IN, 1); + hid_init(&us->hid, kind, usb_hid_changed); +diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c +index 1073901..fe914ab 100644 +--- a/hw/usb/dev-storage.c ++++ b/hw/usb/dev-storage.c +@@ -58,7 +58,6 @@ typedef struct { + USBPacket *packet; + /* usb-storage only */ + BlockConf conf; +- char *serial; + uint32_t removable; + } MSDState; + +@@ -602,7 +601,7 @@ static int usb_msd_initfn_storage(USBDevice *dev) + return -1; + } + +- blkconf_serial(&s->conf, &s->serial); ++ blkconf_serial(&s->conf, &dev->serial); + + /* + * Hack alert: this pretends to be a block device, but it's really +@@ -616,16 +615,11 @@ static int usb_msd_initfn_storage(USBDevice *dev) + bdrv_detach_dev(bs, &s->dev.qdev); + s->conf.bs = NULL; + +- if (s->serial) { +- usb_desc_set_string(dev, STR_SERIALNUMBER, s->serial); +- } else { +- usb_desc_create_serial(dev); +- } +- ++ usb_desc_create_serial(dev); + usb_desc_init(dev); + scsi_bus_new(&s->bus, &s->dev.qdev, &usb_msd_scsi_info_storage, NULL); + scsi_dev = scsi_bus_legacy_add_drive(&s->bus, bs, 0, !!s->removable, +- s->conf.bootindex, s->serial); ++ s->conf.bootindex, dev->serial); + if (!scsi_dev) { + return -1; + } +@@ -734,7 +728,6 @@ static const VMStateDescription vmstate_usb_msd = { + + static Property msd_properties[] = { + DEFINE_BLOCK_PROPERTIES(MSDState, conf), +- DEFINE_PROP_STRING("serial", MSDState, serial), + DEFINE_PROP_BIT("removable", MSDState, removable, 0, false), + DEFINE_PROP_END_OF_LIST(), + }; +diff --git a/include/hw/usb.h b/include/hw/usb.h +index 4d9d05e..901b0da 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -205,6 +205,7 @@ struct USBDevice { + DeviceState qdev; + USBPort *port; + char *port_path; ++ char *serial; + void *opaque; + uint32_t flags; + +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-add-support-for-microsoft-os-descriptors.patch b/SOURCES/kvm-usb-add-support-for-microsoft-os-descriptors.patch new file mode 100644 index 0000000..540116e --- /dev/null +++ b/SOURCES/kvm-usb-add-support-for-microsoft-os-descriptors.patch @@ -0,0 +1,490 @@ +From b907cc56cbbb6b979d97aa0c64eb08c1fe7b6f1e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 3 Feb 2014 16:30:30 +0100 +Subject: [PATCH 06/28] usb: add support for microsoft os descriptors + +RH-Author: Gerd Hoffmann +Message-id: <1391445032-5540-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 57075 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/5] usb: add support for microsoft os descriptors +Bugzilla: 1039530 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +This patch adds support for special usb descriptors used by microsoft +windows. They allow more fine-grained control over driver binding and +adding entries to the registry for configuration. + +As this is a guest-visible change the "msos-desc" compat property +has been added to turn this off for 1.7 + older + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 5319dc7b42610575cbd3a33f4340c1fb4f19b939) + +Conflicts: + hw/i386/pc_piix.c [ 1.7 compat properties ] + include/hw/i386/pc.h [ likewise ] +--- + hw/usb/Makefile.objs | 2 +- + hw/usb/bus.c | 2 + + hw/usb/desc-msos.c | 234 +++++++++++++++++++++++++++++++++++++++++++++++++++ + hw/usb/desc.c | 37 +++++++- + hw/usb/desc.h | 11 ++- + include/hw/usb.h | 3 + + trace-events | 1 + + 7 files changed, 284 insertions(+), 6 deletions(-) + create mode 100644 hw/usb/desc-msos.c + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/Makefile.objs | 2 +- + hw/usb/bus.c | 2 + + hw/usb/desc-msos.c | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++ + hw/usb/desc.c | 37 +++++++- + hw/usb/desc.h | 11 ++- + include/hw/usb.h | 3 + + trace-events | 1 + + 7 files changed, 284 insertions(+), 6 deletions(-) + create mode 100644 hw/usb/desc-msos.c + +diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs +index a3eac3e..97b4575 100644 +--- a/hw/usb/Makefile.objs ++++ b/hw/usb/Makefile.objs +@@ -1,5 +1,5 @@ + # usb subsystem core +-common-obj-y += core.o combined-packet.o bus.o desc.o ++common-obj-y += core.o combined-packet.o bus.o desc.o desc-msos.o + common-obj-y += libhw.o + + # usb host adapters +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index ade9abc..fe6bd13 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -16,6 +16,8 @@ static Property usb_props[] = { + DEFINE_PROP_STRING("serial", USBDevice, serial), + DEFINE_PROP_BIT("full-path", USBDevice, flags, + USB_DEV_FLAG_FULL_PATH, true), ++ DEFINE_PROP_BIT("msos-desc", USBDevice, flags, ++ USB_DEV_FLAG_MSOS_DESC_ENABLE, true), + DEFINE_PROP_END_OF_LIST() + }; + +diff --git a/hw/usb/desc-msos.c b/hw/usb/desc-msos.c +new file mode 100644 +index 0000000..ed8d62c +--- /dev/null ++++ b/hw/usb/desc-msos.c +@@ -0,0 +1,234 @@ ++#include "hw/usb.h" ++#include "hw/usb/desc.h" ++ ++/* ++ * Microsoft OS Descriptors ++ * ++ * Windows tries to fetch some special descriptors with informations ++ * specifically for windows. Presence is indicated using a special ++ * string @ index 0xee. There are two kinds of descriptors: ++ * ++ * compatid descriptor ++ * Used to bind drivers, if usb class isn't specific enougth. ++ * Used for PTP/MTP for example (both share the same usb class). ++ * ++ * properties descriptor ++ * Does carry registry entries. They show up in ++ * HLM\SYSTEM\CurrentControlSet\Enum\USB\\\Device Parameters ++ * ++ * Note that Windows caches the stuff it got in the registry, so when ++ * playing with this you have to delete registry subtrees to make ++ * windows query the device again: ++ * HLM\SYSTEM\CurrentControlSet\Control\usbflags ++ * HLM\SYSTEM\CurrentControlSet\Enum\USB ++ * Windows will complain it can't delete entries on the second one. ++ * It has deleted everything it had permissions too, which is enouth ++ * as this includes "Device Parameters". ++ * ++ * http://msdn.microsoft.com/en-us/library/windows/hardware/ff537430.aspx ++ * ++ */ ++ ++/* ------------------------------------------------------------------ */ ++ ++typedef struct msos_compat_hdr { ++ uint32_t dwLength; ++ uint8_t bcdVersion_lo; ++ uint8_t bcdVersion_hi; ++ uint8_t wIndex_lo; ++ uint8_t wIndex_hi; ++ uint8_t bCount; ++ uint8_t reserved[7]; ++} QEMU_PACKED msos_compat_hdr; ++ ++typedef struct msos_compat_func { ++ uint8_t bFirstInterfaceNumber; ++ uint8_t reserved_1; ++ uint8_t compatibleId[8]; ++ uint8_t subCompatibleId[8]; ++ uint8_t reserved_2[6]; ++} QEMU_PACKED msos_compat_func; ++ ++static int usb_desc_msos_compat(const USBDesc *desc, uint8_t *dest) ++{ ++ msos_compat_hdr *hdr = (void *)dest; ++ msos_compat_func *func; ++ int length = sizeof(*hdr); ++ int count = 0; ++ ++ func = (void *)(dest + length); ++ func->bFirstInterfaceNumber = 0; ++ func->reserved_1 = 0x01; ++ length += sizeof(*func); ++ count++; ++ ++ hdr->dwLength = cpu_to_le32(length); ++ hdr->bcdVersion_lo = 0x00; ++ hdr->bcdVersion_hi = 0x01; ++ hdr->wIndex_lo = 0x04; ++ hdr->wIndex_hi = 0x00; ++ hdr->bCount = count; ++ return length; ++} ++ ++/* ------------------------------------------------------------------ */ ++ ++typedef struct msos_prop_hdr { ++ uint32_t dwLength; ++ uint8_t bcdVersion_lo; ++ uint8_t bcdVersion_hi; ++ uint8_t wIndex_lo; ++ uint8_t wIndex_hi; ++ uint8_t wCount_lo; ++ uint8_t wCount_hi; ++} QEMU_PACKED msos_prop_hdr; ++ ++typedef struct msos_prop { ++ uint32_t dwLength; ++ uint32_t dwPropertyDataType; ++ uint8_t dwPropertyNameLength_lo; ++ uint8_t dwPropertyNameLength_hi; ++ uint8_t bPropertyName[]; ++} QEMU_PACKED msos_prop; ++ ++typedef struct msos_prop_data { ++ uint32_t dwPropertyDataLength; ++ uint8_t bPropertyData[]; ++} QEMU_PACKED msos_prop_data; ++ ++typedef enum msos_prop_type { ++ MSOS_REG_SZ = 1, ++ MSOS_REG_EXPAND_SZ = 2, ++ MSOS_REG_BINARY = 3, ++ MSOS_REG_DWORD_LE = 4, ++ MSOS_REG_DWORD_BE = 5, ++ MSOS_REG_LINK = 6, ++ MSOS_REG_MULTI_SZ = 7, ++} msos_prop_type; ++ ++static int usb_desc_msos_prop_name(struct msos_prop *prop, ++ const wchar_t *name) ++{ ++ int length = wcslen(name) + 1; ++ int i; ++ ++ prop->dwPropertyNameLength_lo = usb_lo(length*2); ++ prop->dwPropertyNameLength_hi = usb_hi(length*2); ++ for (i = 0; i < length; i++) { ++ prop->bPropertyName[i*2] = usb_lo(name[i]); ++ prop->bPropertyName[i*2+1] = usb_hi(name[i]); ++ } ++ return length*2; ++} ++ ++static int usb_desc_msos_prop_str(uint8_t *dest, msos_prop_type type, ++ const wchar_t *name, const wchar_t *value) ++{ ++ struct msos_prop *prop = (void *)dest; ++ struct msos_prop_data *data; ++ int length = sizeof(*prop); ++ int i, vlen = wcslen(value) + 1; ++ ++ prop->dwPropertyDataType = cpu_to_le32(type); ++ length += usb_desc_msos_prop_name(prop, name); ++ data = (void *)(dest + length); ++ ++ data->dwPropertyDataLength = cpu_to_le32(vlen*2); ++ length += sizeof(*prop); ++ ++ for (i = 0; i < vlen; i++) { ++ data->bPropertyData[i*2] = usb_lo(value[i]); ++ data->bPropertyData[i*2+1] = usb_hi(value[i]); ++ } ++ length += vlen*2; ++ ++ prop->dwLength = cpu_to_le32(length); ++ return length; ++} ++ ++static int usb_desc_msos_prop_dword(uint8_t *dest, const wchar_t *name, ++ uint32_t value) ++{ ++ struct msos_prop *prop = (void *)dest; ++ struct msos_prop_data *data; ++ int length = sizeof(*prop); ++ ++ prop->dwPropertyDataType = cpu_to_le32(MSOS_REG_DWORD_LE); ++ length += usb_desc_msos_prop_name(prop, name); ++ data = (void *)(dest + length); ++ ++ data->dwPropertyDataLength = cpu_to_le32(4); ++ data->bPropertyData[0] = (value) & 0xff; ++ data->bPropertyData[1] = (value >> 8) & 0xff; ++ data->bPropertyData[2] = (value >> 16) & 0xff; ++ data->bPropertyData[3] = (value >> 24) & 0xff; ++ length += sizeof(*prop) + 4; ++ ++ prop->dwLength = cpu_to_le32(length); ++ return length; ++} ++ ++static int usb_desc_msos_prop(const USBDesc *desc, uint8_t *dest) ++{ ++ msos_prop_hdr *hdr = (void *)dest; ++ int length = sizeof(*hdr); ++ int count = 0; ++ ++ if (desc->msos->Label) { ++ /* ++ * Given as example in the specs. Havn't figured yet where ++ * this label shows up in the windows gui. ++ */ ++ length += usb_desc_msos_prop_str(dest+length, MSOS_REG_SZ, ++ L"Label", desc->msos->Label); ++ count++; ++ } ++ ++ if (desc->msos->SelectiveSuspendEnabled) { ++ /* ++ * Signaling remote wakeup capability in the standard usb ++ * descriptors isn't enouth to make windows actually use it. ++ * This is the "Yes, we really mean it" registy entry to flip ++ * the switch in the windows drivers. ++ */ ++ length += usb_desc_msos_prop_dword(dest+length, ++ L"SelectiveSuspendEnabled", 1); ++ count++; ++ } ++ ++ hdr->dwLength = cpu_to_le32(length); ++ hdr->bcdVersion_lo = 0x00; ++ hdr->bcdVersion_hi = 0x01; ++ hdr->wIndex_lo = 0x05; ++ hdr->wIndex_hi = 0x00; ++ hdr->wCount_lo = usb_lo(count); ++ hdr->wCount_hi = usb_hi(count); ++ return length; ++} ++ ++/* ------------------------------------------------------------------ */ ++ ++int usb_desc_msos(const USBDesc *desc, USBPacket *p, ++ int index, uint8_t *dest, size_t len) ++{ ++ void *buf = g_malloc0(4096); ++ int length = 0; ++ ++ switch (index) { ++ case 0x0004: ++ length = usb_desc_msos_compat(desc, buf); ++ break; ++ case 0x0005: ++ length = usb_desc_msos_prop(desc, buf); ++ break; ++ } ++ ++ if (length > len) { ++ length = len; ++ } ++ memcpy(dest, buf, length); ++ free(buf); ++ ++ p->actual_length = length; ++ return 0; ++} +diff --git a/hw/usb/desc.c b/hw/usb/desc.c +index 3e560cd..5a954c6 100644 +--- a/hw/usb/desc.c ++++ b/hw/usb/desc.c +@@ -7,7 +7,7 @@ + /* ------------------------------------------------------------------ */ + + int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, +- uint8_t *dest, size_t len) ++ bool msos, uint8_t *dest, size_t len) + { + uint8_t bLength = 0x12; + USBDescriptor *d = (void *)dest; +@@ -19,8 +19,18 @@ int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, + d->bLength = bLength; + d->bDescriptorType = USB_DT_DEVICE; + +- d->u.device.bcdUSB_lo = usb_lo(dev->bcdUSB); +- d->u.device.bcdUSB_hi = usb_hi(dev->bcdUSB); ++ if (msos && dev->bcdUSB < 0x0200) { ++ /* ++ * Version 2.0+ required for microsoft os descriptors to work. ++ * Done this way so msos-desc compat property will handle both ++ * the version and the new descriptors being present. ++ */ ++ d->u.device.bcdUSB_lo = usb_lo(0x0200); ++ d->u.device.bcdUSB_hi = usb_hi(0x0200); ++ } else { ++ d->u.device.bcdUSB_lo = usb_lo(dev->bcdUSB); ++ d->u.device.bcdUSB_hi = usb_hi(dev->bcdUSB); ++ } + d->u.device.bDeviceClass = dev->bDeviceClass; + d->u.device.bDeviceSubClass = dev->bDeviceSubClass; + d->u.device.bDeviceProtocol = dev->bDeviceProtocol; +@@ -497,6 +507,10 @@ void usb_desc_init(USBDevice *dev) + if (desc->super) { + dev->speedmask |= USB_SPEED_MASK_SUPER; + } ++ if (desc->msos && (dev->flags & (1 << USB_DEV_FLAG_MSOS_DESC_ENABLE))) { ++ dev->flags |= (1 << USB_DEV_FLAG_MSOS_DESC_IN_USE); ++ usb_desc_set_string(dev, 0xee, "MSFT100Q"); ++ } + usb_desc_setdefaults(dev); + } + +@@ -624,6 +638,7 @@ int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len) + int usb_desc_get_descriptor(USBDevice *dev, USBPacket *p, + int value, uint8_t *dest, size_t len) + { ++ bool msos = (dev->flags & (1 << USB_DEV_FLAG_MSOS_DESC_IN_USE)); + const USBDesc *desc = usb_device_get_usb_desc(dev); + const USBDescDevice *other_dev; + uint8_t buf[256]; +@@ -644,7 +659,7 @@ int usb_desc_get_descriptor(USBDevice *dev, USBPacket *p, + + switch(type) { + case USB_DT_DEVICE: +- ret = usb_desc_device(&desc->id, dev->device, buf, sizeof(buf)); ++ ret = usb_desc_device(&desc->id, dev->device, msos, buf, sizeof(buf)); + trace_usb_desc_device(dev->addr, len, ret); + break; + case USB_DT_CONFIG: +@@ -701,6 +716,7 @@ int usb_desc_get_descriptor(USBDevice *dev, USBPacket *p, + int usb_desc_handle_control(USBDevice *dev, USBPacket *p, + int request, int value, int index, int length, uint8_t *data) + { ++ bool msos = (dev->flags & (1 << USB_DEV_FLAG_MSOS_DESC_IN_USE)); + const USBDesc *desc = usb_device_get_usb_desc(dev); + int ret = -1; + +@@ -780,6 +796,19 @@ int usb_desc_handle_control(USBDevice *dev, USBPacket *p, + trace_usb_set_interface(dev->addr, index, value, ret); + break; + ++ case VendorDeviceRequest | 'Q': ++ if (msos) { ++ ret = usb_desc_msos(desc, p, index, data, length); ++ trace_usb_desc_msos(dev->addr, index, length, ret); ++ } ++ break; ++ case VendorInterfaceRequest | 'Q': ++ if (msos) { ++ ret = usb_desc_msos(desc, p, index, data, length); ++ trace_usb_desc_msos(dev->addr, index, length, ret); ++ } ++ break; ++ + } + return ret; + } +diff --git a/hw/usb/desc.h b/hw/usb/desc.h +index 81327b0..2b4fcda 100644 +--- a/hw/usb/desc.h ++++ b/hw/usb/desc.h +@@ -2,6 +2,7 @@ + #define QEMU_HW_USB_DESC_H + + #include ++#include + + /* binary representation */ + typedef struct USBDescriptor { +@@ -182,6 +183,11 @@ struct USBDescOther { + const uint8_t *data; + }; + ++struct USBDescMSOS { ++ const wchar_t *Label; ++ bool SelectiveSuspendEnabled; ++}; ++ + typedef const char *USBDescStrings[256]; + + struct USBDesc { +@@ -190,6 +196,7 @@ struct USBDesc { + const USBDescDevice *high; + const USBDescDevice *super; + const char* const *str; ++ const USBDescMSOS *msos; + }; + + #define USB_DESC_FLAG_SUPER (1 << 1) +@@ -207,7 +214,7 @@ static inline uint8_t usb_hi(uint16_t val) + + /* generate usb packages from structs */ + int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, +- uint8_t *dest, size_t len); ++ bool msos, uint8_t *dest, size_t len); + int usb_desc_device_qualifier(const USBDescDevice *dev, + uint8_t *dest, size_t len); + int usb_desc_config(const USBDescConfig *conf, int flags, +@@ -219,6 +226,8 @@ int usb_desc_iface(const USBDescIface *iface, int flags, + int usb_desc_endpoint(const USBDescEndpoint *ep, int flags, + uint8_t *dest, size_t len); + int usb_desc_other(const USBDescOther *desc, uint8_t *dest, size_t len); ++int usb_desc_msos(const USBDesc *desc, USBPacket *p, ++ int index, uint8_t *dest, size_t len); + + /* control message emulation helpers */ + void usb_desc_init(USBDevice *dev); +diff --git a/include/hw/usb.h b/include/hw/usb.h +index a910456..b111be0 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -182,6 +182,7 @@ typedef struct USBDescIface USBDescIface; + typedef struct USBDescEndpoint USBDescEndpoint; + typedef struct USBDescOther USBDescOther; + typedef struct USBDescString USBDescString; ++typedef struct USBDescMSOS USBDescMSOS; + + struct USBDescString { + uint8_t index; +@@ -207,6 +208,8 @@ struct USBEndpoint { + enum USBDeviceFlags { + USB_DEV_FLAG_FULL_PATH, + USB_DEV_FLAG_IS_HOST, ++ USB_DEV_FLAG_MSOS_DESC_ENABLE, ++ USB_DEV_FLAG_MSOS_DESC_IN_USE, + }; + + /* definition of a USB device */ +diff --git a/trace-events b/trace-events +index dbbd25d..5d86cf3 100644 +--- a/trace-events ++++ b/trace-events +@@ -393,6 +393,7 @@ usb_desc_config(int addr, int index, int len, int ret) "dev %d query config %d, + usb_desc_other_speed_config(int addr, int index, int len, int ret) "dev %d query config %d, len %d, ret %d" + usb_desc_string(int addr, int index, int len, int ret) "dev %d query string %d, len %d, ret %d" + usb_desc_bos(int addr, int len, int ret) "dev %d bos, len %d, ret %d" ++usb_desc_msos(int addr, int index, int len, int ret) "dev %d msos, index 0x%x, len %d, ret %d" + usb_set_addr(int addr) "dev %d" + usb_set_config(int addr, int config, int ret) "dev %d, config %d, ret %d" + usb_set_interface(int addr, int iface, int alt, int ret) "dev %d, interface %d, altsetting %d, ret %d" +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-add-usb_pick_speed.patch b/SOURCES/kvm-usb-add-usb_pick_speed.patch new file mode 100644 index 0000000..36813f3 --- /dev/null +++ b/SOURCES/kvm-usb-add-usb_pick_speed.patch @@ -0,0 +1,115 @@ +From 2eb03118784d98cc6cd1d1cadd2badc0cfd19469 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:21:08 +0200 +Subject: [PATCH 28/43] usb: add usb_pick_speed + +Message-id: <1405088470-24115-36-git-send-email-kraxel@redhat.com> +Patchwork-id: 59839 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 35/37] usb: add usb_pick_speed +Bugzilla: 1075846 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +We can pick the usb port speed in generic code, by looking at the port +and device speed masks and looking for the fastest match. So add a +function to do exactly that, and drop the speed setting code from +usb_desc_attach as it isn't needed any more. + +This way we can set the device speed before calling port->ops->attach, +which fixes some xhci hotplug issues. + +https://bugzilla.redhat.com/show_bug.cgi?id=1046873 + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b791c3b38c7969cb9f4acda8229e19fd865a1c08) +--- + hw/usb/core.c | 21 +++++++++++++++++++++ + hw/usb/desc.c | 12 ------------ + include/hw/usb.h | 1 + + 3 files changed, 22 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/core.c | 21 +++++++++++++++++++++ + hw/usb/desc.c | 12 ------------ + include/hw/usb.h | 1 + + 3 files changed, 22 insertions(+), 12 deletions(-) + +diff --git a/hw/usb/core.c b/hw/usb/core.c +index 67ba7d6..cf34755 100644 +--- a/hw/usb/core.c ++++ b/hw/usb/core.c +@@ -28,6 +28,26 @@ + #include "qemu/iov.h" + #include "trace.h" + ++void usb_pick_speed(USBPort *port) ++{ ++ static const int speeds[] = { ++ USB_SPEED_SUPER, ++ USB_SPEED_HIGH, ++ USB_SPEED_FULL, ++ USB_SPEED_LOW, ++ }; ++ USBDevice *udev = port->dev; ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(speeds); i++) { ++ if ((udev->speedmask & (1 << speeds[i])) && ++ (port->speedmask & (1 << speeds[i]))) { ++ udev->speed = speeds[i]; ++ return; ++ } ++ } ++} ++ + void usb_attach(USBPort *port) + { + USBDevice *dev = port->dev; +@@ -35,6 +55,7 @@ void usb_attach(USBPort *port) + assert(dev != NULL); + assert(dev->attached); + assert(dev->state == USB_STATE_NOTATTACHED); ++ usb_pick_speed(port); + port->ops->attach(port); + dev->state = USB_STATE_ATTACHED; + usb_device_handle_attach(dev); +diff --git a/hw/usb/desc.c b/hw/usb/desc.c +index f133ddb..138881f 100644 +--- a/hw/usb/desc.c ++++ b/hw/usb/desc.c +@@ -518,18 +518,6 @@ void usb_desc_init(USBDevice *dev) + + void usb_desc_attach(USBDevice *dev) + { +- const USBDesc *desc = usb_device_get_usb_desc(dev); +- +- assert(desc != NULL); +- if (desc->super && (dev->port->speedmask & USB_SPEED_MASK_SUPER)) { +- dev->speed = USB_SPEED_SUPER; +- } else if (desc->high && (dev->port->speedmask & USB_SPEED_MASK_HIGH)) { +- dev->speed = USB_SPEED_HIGH; +- } else if (desc->full && (dev->port->speedmask & USB_SPEED_MASK_FULL)) { +- dev->speed = USB_SPEED_FULL; +- } else { +- return; +- } + usb_desc_setdefaults(dev); + } + +diff --git a/include/hw/usb.h b/include/hw/usb.h +index 000001b..ebbff47 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -453,6 +453,7 @@ void usb_ep_combine_input_packets(USBEndpoint *ep); + void usb_combined_input_packet_complete(USBDevice *dev, USBPacket *p); + void usb_combined_packet_cancel(USBDevice *dev, USBPacket *p); + ++void usb_pick_speed(USBPort *port); + void usb_attach(USBPort *port); + void usb_detach(USBPort *port); + void usb_port_reset(USBPort *port); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-add-vendor-request-defines.patch b/SOURCES/kvm-usb-add-vendor-request-defines.patch new file mode 100644 index 0000000..d07a690 --- /dev/null +++ b/SOURCES/kvm-usb-add-vendor-request-defines.patch @@ -0,0 +1,67 @@ +From d76e3e1722f8895eaa4f34596169decde859fa86 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 3 Feb 2014 16:30:28 +0100 +Subject: [PATCH 04/28] usb: add vendor request defines + +RH-Author: Gerd Hoffmann +Message-id: <1391445032-5540-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 57078 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/5] usb: add vendor request defines +Bugzilla: 1039530 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +Add defines for vendor specific usb control requests. +Group defines by Device / Interface / Endpoint while +being at it. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 2b81ba53887e6f3b5a79ecd2f446f849ed89561f) +--- + include/hw/usb.h | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/hw/usb.h | 17 +++++++++++++---- + 1 files changed, 13 insertions(+), 4 deletions(-) + +diff --git a/include/hw/usb.h b/include/hw/usb.h +index 695d853..a910456 100644 +--- a/include/hw/usb.h ++++ b/include/hw/usb.h +@@ -102,17 +102,26 @@ + + #define DeviceRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) + #define DeviceOutRequest ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) +-#define InterfaceRequest \ ++#define VendorDeviceRequest ((USB_DIR_IN|USB_TYPE_VENDOR|USB_RECIP_DEVICE)<<8) ++#define VendorDeviceOutRequest \ ++ ((USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_DEVICE)<<8) ++ ++#define InterfaceRequest \ + ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) + #define InterfaceOutRequest \ + ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) +-#define EndpointRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) +-#define EndpointOutRequest \ +- ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) + #define ClassInterfaceRequest \ + ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8) + #define ClassInterfaceOutRequest \ + ((USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8) ++#define VendorInterfaceRequest \ ++ ((USB_DIR_IN|USB_TYPE_VENDOR|USB_RECIP_INTERFACE)<<8) ++#define VendorInterfaceOutRequest \ ++ ((USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE)<<8) ++ ++#define EndpointRequest ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) ++#define EndpointOutRequest \ ++ ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8) + + #define USB_REQ_GET_STATUS 0x00 + #define USB_REQ_CLEAR_FEATURE 0x01 +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-ccid-add-check-message-size-checks.patch b/SOURCES/kvm-usb-ccid-add-check-message-size-checks.patch new file mode 100644 index 0000000..f0c2e48 --- /dev/null +++ b/SOURCES/kvm-usb-ccid-add-check-message-size-checks.patch @@ -0,0 +1,64 @@ +From 3d6cc57909eca16bd7bc4dc823b5eb71e65baffb Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 14 Mar 2017 08:52:56 +0100 +Subject: [PATCH 23/24] usb-ccid: add check message size checks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1489481576-26911-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 74287 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 4/4] usb-ccid: add check message size checks +Bugzilla: 1419818 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laurent Vivier +RH-Acked-by: Miroslav Rezanina + +Check message size too when figuring whenever we should expect more data. +Fix debug message to show useful data, p->iov.size is fixed anyway if we +land there, print how much we got meanwhile instead. + +Also check announced message size against actual message size. That +is a more general fix for CVE-2017-5898 than commit "c7dfbf3 usb: ccid: +check ccid apdu length". + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Marc-André Lureau +Message-id: 1487250819-23764-4-git-send-email-kraxel@redhat.com +(cherry picked from commit 31fb4444a485a348f8e2699d7c3dd15e1819ad2c) +Signed-off-by: Miroslav Rezanina +--- + hw/usb/dev-smartcard-reader.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c +index 07d15ba..5e96a18 100644 +--- a/hw/usb/dev-smartcard-reader.c ++++ b/hw/usb/dev-smartcard-reader.c +@@ -1009,12 +1009,19 @@ static void ccid_handle_bulk_out(USBCCIDState *s, USBPacket *p) + } + + ccid_header = (CCID_Header *)s->bulk_out_data; +- if (p->iov.size == CCID_MAX_PACKET_SIZE) { ++ if ((s->bulk_out_pos - 10 < ccid_header->dwLength) && ++ (p->iov.size == CCID_MAX_PACKET_SIZE)) { + DPRINTF(s, D_VERBOSE, +- "usb-ccid: bulk_in: expecting more packets (%zd/%d)\n", +- p->iov.size, ccid_header->dwLength); ++ "usb-ccid: bulk_in: expecting more packets (%d/%d)\n", ++ s->bulk_out_pos - 10, ccid_header->dwLength); + return; + } ++ if (s->bulk_out_pos - 10 != ccid_header->dwLength) { ++ DPRINTF(s, 1, ++ "usb-ccid: bulk_in: message size mismatch (got %d, expected %d)\n", ++ s->bulk_out_pos - 10, ccid_header->dwLength); ++ goto err; ++ } + + DPRINTF(s, D_MORE_INFO, "%s %x %s\n", __func__, + ccid_header->bMessageType, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-ccid-add-missing-wakeup-calls.patch b/SOURCES/kvm-usb-ccid-add-missing-wakeup-calls.patch new file mode 100644 index 0000000..b8b301c --- /dev/null +++ b/SOURCES/kvm-usb-ccid-add-missing-wakeup-calls.patch @@ -0,0 +1,76 @@ +From deb3ccfc4df641110546b2af49e885101565143d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 17 Jul 2015 11:55:40 +0200 +Subject: [PATCH 01/13] usb-ccid: add missing wakeup calls + +Message-id: <1437134140-27898-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 67056 +O-Subject: [RHEL-7.2 qemu-kvm PATCH v2 1/1] usb-ccid: add missing wakeup calls +Bugzilla: 1243731 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Juan Quintela +RH-Acked-by: Dr. David Alan Gilbert + +Properly notify the host adapter that we have +data pending, so it doesn't has to poll us. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 86d7e214c224f939c897cfa3b6d597f7af4b5bba) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/usb/dev-smartcard-reader.c [ slightly different context ] +--- + hw/usb/dev-smartcard-reader.c | 5 +++++ + 1 file changed, 5 insertions(+) +--- + hw/usb/dev-smartcard-reader.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c +index c1acf70..0e666e1 100644 +--- a/hw/usb/dev-smartcard-reader.c ++++ b/hw/usb/dev-smartcard-reader.c +@@ -284,6 +284,7 @@ typedef struct CCIDBus { + typedef struct USBCCIDState { + USBDevice dev; + USBEndpoint *intr; ++ USBEndpoint *bulk; + CCIDBus bus; + CCIDCardState *card; + BulkIn bulk_in_pending[BULK_IN_PENDING_NUM]; /* circular */ +@@ -769,6 +770,7 @@ static void ccid_write_slot_status(USBCCIDState *s, CCID_Header *recv) + h->b.bError = s->bError; + h->bClockStatus = CLOCK_STATUS_RUNNING; + ccid_reset_error_status(s); ++ usb_wakeup(s->bulk, 0); + } + + static void ccid_write_parameters(USBCCIDState *s, CCID_Header *recv) +@@ -789,6 +791,7 @@ static void ccid_write_parameters(USBCCIDState *s, CCID_Header *recv) + h->bProtocolNum = s->bProtocolNum; + h->abProtocolDataStructure = s->abProtocolDataStructure; + ccid_reset_error_status(s); ++ usb_wakeup(s->bulk, 0); + } + + static void ccid_write_data_block(USBCCIDState *s, uint8_t slot, uint8_t seq, +@@ -810,6 +813,7 @@ static void ccid_write_data_block(USBCCIDState *s, uint8_t slot, uint8_t seq, + } + memcpy(p->abData, data, len); + ccid_reset_error_status(s); ++ usb_wakeup(s->bulk, 0); + } + + static void ccid_report_error_failed(USBCCIDState *s, uint8_t error) +@@ -1311,6 +1315,7 @@ static int ccid_initfn(USBDevice *dev) + usb_desc_init(dev); + qbus_create_inplace(&s->bus.qbus, TYPE_CCID_BUS, &dev->qdev, NULL); + s->intr = usb_ep_get(dev, USB_TOKEN_IN, CCID_INT_IN_EP); ++ s->bulk = usb_ep_get(dev, USB_TOKEN_IN, CCID_BULK_IN_EP); + s->bus.qbus.allow_hotplug = 1; + s->card = NULL; + s->migration_state = MIGRATION_NONE; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-ccid-better-bulk_out-error-handling.patch b/SOURCES/kvm-usb-ccid-better-bulk_out-error-handling.patch new file mode 100644 index 0000000..6eab01a --- /dev/null +++ b/SOURCES/kvm-usb-ccid-better-bulk_out-error-handling.patch @@ -0,0 +1,175 @@ +From b71bd2f7f4a259183fa3d38e6e891cffb86683e2 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 14 Mar 2017 08:52:54 +0100 +Subject: [PATCH 21/24] usb-ccid: better bulk_out error handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1489481576-26911-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 74289 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 2/4] usb-ccid: better bulk_out error handling +Bugzilla: 1419818 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laurent Vivier +RH-Acked-by: Miroslav Rezanina + +Add err goto label where we can jump to from all error conditions. +STALL request on all errors. Reset position on all errors. + +Normal request processing is not in a else branch any more, so this code +is reintended, there are no code changes in that part of the code +though. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Marc-André Lureau +Message-id: 1487250819-23764-2-git-send-email-kraxel@redhat.com +(cherry picked from commit 0aeebc73b7976bae5cb7e9768e3d9a0fd9d634e8) +Signed-off-by: Miroslav Rezanina +--- + hw/usb/dev-smartcard-reader.c | 116 ++++++++++++++++++++++-------------------- + 1 file changed, 61 insertions(+), 55 deletions(-) + +diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c +index 0e0b363..672a7bf 100644 +--- a/hw/usb/dev-smartcard-reader.c ++++ b/hw/usb/dev-smartcard-reader.c +@@ -999,8 +999,7 @@ static void ccid_handle_bulk_out(USBCCIDState *s, USBPacket *p) + CCID_Header *ccid_header; + + if (p->iov.size + s->bulk_out_pos > BULK_OUT_DATA_SIZE) { +- p->status = USB_RET_STALL; +- return; ++ goto err; + } + ccid_header = (CCID_Header *)s->bulk_out_data; + usb_packet_copy(p, s->bulk_out_data + s->bulk_out_pos, p->iov.size); +@@ -1015,64 +1014,71 @@ static void ccid_handle_bulk_out(USBCCIDState *s, USBPacket *p) + DPRINTF(s, 1, + "%s: bad USB_TOKEN_OUT length, should be at least 10 bytes\n", + __func__); +- } else { +- DPRINTF(s, D_MORE_INFO, "%s %x %s\n", __func__, +- ccid_header->bMessageType, +- ccid_message_type_to_str(ccid_header->bMessageType)); +- switch (ccid_header->bMessageType) { +- case CCID_MESSAGE_TYPE_PC_to_RDR_GetSlotStatus: +- ccid_write_slot_status(s, ccid_header); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOn: +- DPRINTF(s, 1, "%s: PowerOn: %d\n", __func__, ++ goto err; ++ } ++ ++ DPRINTF(s, D_MORE_INFO, "%s %x %s\n", __func__, ++ ccid_header->bMessageType, ++ ccid_message_type_to_str(ccid_header->bMessageType)); ++ switch (ccid_header->bMessageType) { ++ case CCID_MESSAGE_TYPE_PC_to_RDR_GetSlotStatus: ++ ccid_write_slot_status(s, ccid_header); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOn: ++ DPRINTF(s, 1, "%s: PowerOn: %d\n", __func__, + ((CCID_IccPowerOn *)(ccid_header))->bPowerSelect); +- s->powered = true; +- if (!ccid_card_inserted(s)) { +- ccid_report_error_failed(s, ERROR_ICC_MUTE); +- } +- /* atr is written regardless of error. */ +- ccid_write_data_block_atr(s, ccid_header); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOff: +- ccid_reset_error_status(s); +- s->powered = false; +- ccid_write_slot_status(s, ccid_header); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_XfrBlock: +- ccid_on_apdu_from_guest(s, (CCID_XferBlock *)s->bulk_out_data); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_SetParameters: +- ccid_reset_error_status(s); +- ccid_set_parameters(s, ccid_header); +- ccid_write_parameters(s, ccid_header); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_ResetParameters: +- ccid_reset_error_status(s); +- ccid_reset_parameters(s); +- ccid_write_parameters(s, ccid_header); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_GetParameters: +- ccid_reset_error_status(s); +- ccid_write_parameters(s, ccid_header); +- break; +- case CCID_MESSAGE_TYPE_PC_to_RDR_Mechanical: +- ccid_report_error_failed(s, 0); +- ccid_write_slot_status(s, ccid_header); +- break; +- default: +- DPRINTF(s, 1, ++ s->powered = true; ++ if (!ccid_card_inserted(s)) { ++ ccid_report_error_failed(s, ERROR_ICC_MUTE); ++ } ++ /* atr is written regardless of error. */ ++ ccid_write_data_block_atr(s, ccid_header); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOff: ++ ccid_reset_error_status(s); ++ s->powered = false; ++ ccid_write_slot_status(s, ccid_header); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_XfrBlock: ++ ccid_on_apdu_from_guest(s, (CCID_XferBlock *)s->bulk_out_data); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_SetParameters: ++ ccid_reset_error_status(s); ++ ccid_set_parameters(s, ccid_header); ++ ccid_write_parameters(s, ccid_header); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_ResetParameters: ++ ccid_reset_error_status(s); ++ ccid_reset_parameters(s); ++ ccid_write_parameters(s, ccid_header); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_GetParameters: ++ ccid_reset_error_status(s); ++ ccid_write_parameters(s, ccid_header); ++ break; ++ case CCID_MESSAGE_TYPE_PC_to_RDR_Mechanical: ++ ccid_report_error_failed(s, 0); ++ ccid_write_slot_status(s, ccid_header); ++ break; ++ default: ++ DPRINTF(s, 1, + "handle_data: ERROR: unhandled message type %Xh\n", + ccid_header->bMessageType); +- /* +- * The caller is expecting the device to respond, tell it we +- * don't support the operation. +- */ +- ccid_report_error_failed(s, ERROR_CMD_NOT_SUPPORTED); +- ccid_write_slot_status(s, ccid_header); +- break; +- } ++ /* ++ * The caller is expecting the device to respond, tell it we ++ * don't support the operation. ++ */ ++ ccid_report_error_failed(s, ERROR_CMD_NOT_SUPPORTED); ++ ccid_write_slot_status(s, ccid_header); ++ break; + } + s->bulk_out_pos = 0; ++ return; ++ ++err: ++ p->status = USB_RET_STALL; ++ s->bulk_out_pos = 0; ++ return; + } + + static void ccid_bulk_in_copy_to_guest(USBCCIDState *s, USBPacket *p) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-ccid-check-ccid-apdu-length.patch b/SOURCES/kvm-usb-ccid-check-ccid-apdu-length.patch new file mode 100644 index 0000000..7091df9 --- /dev/null +++ b/SOURCES/kvm-usb-ccid-check-ccid-apdu-length.patch @@ -0,0 +1,48 @@ +From c69bcffde2abc36576ff8b9d60f721e1261fec32 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 14 Mar 2017 08:52:53 +0100 +Subject: [PATCH 20/24] usb: ccid: check ccid apdu length + +RH-Author: Gerd Hoffmann +Message-id: <1489481576-26911-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 74286 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 1/4] usb: ccid: check ccid apdu length +Bugzilla: 1419818 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laurent Vivier +RH-Acked-by: Miroslav Rezanina + +From: Prasad J Pandit + +CCID device emulator uses Application Protocol Data Units(APDU) +to exchange command and responses to and from the host. +The length in these units couldn't be greater than 65536. Add +check to ensure the same. It'd also avoid potential integer +overflow in emulated_apdu_from_guest. + +Reported-by: Li Qiang +Signed-off-by: Prasad J Pandit +Message-id: 20170202192228.10847-1-ppandit@redhat.com +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c7dfbf322595ded4e70b626bf83158a9f3807c6a) +Signed-off-by: Miroslav Rezanina +--- + hw/usb/dev-smartcard-reader.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c +index 0e666e1..0e0b363 100644 +--- a/hw/usb/dev-smartcard-reader.c ++++ b/hw/usb/dev-smartcard-reader.c +@@ -965,7 +965,7 @@ static void ccid_on_apdu_from_guest(USBCCIDState *s, CCID_XferBlock *recv) + DPRINTF(s, 1, "%s: seq %d, len %d\n", __func__, + recv->hdr.bSeq, len); + ccid_add_pending_answer(s, (CCID_Header *)recv); +- if (s->card) { ++ if (s->card && len <= BULK_OUT_DATA_SIZE) { + ccid_card_apdu_from_guest(s->card, recv->abData, len); + } else { + DPRINTF(s, D_WARN, "warning: discarded apdu\n"); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-ccid-move-header-size-check.patch b/SOURCES/kvm-usb-ccid-move-header-size-check.patch new file mode 100644 index 0000000..ac197eb --- /dev/null +++ b/SOURCES/kvm-usb-ccid-move-header-size-check.patch @@ -0,0 +1,64 @@ +From 6116e5c19a7623b2543fbd937970da9a6e0e1ce7 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 14 Mar 2017 08:52:55 +0100 +Subject: [PATCH 22/24] usb-ccid: move header size check +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1489481576-26911-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 74285 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 3/4] usb-ccid: move header size check +Bugzilla: 1419818 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laurent Vivier +RH-Acked-by: Miroslav Rezanina + +Move up header size check, so we can use header fields in sanity checks +(in followup patches). Also reword the debug message. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Marc-André Lureau +Message-id: 1487250819-23764-3-git-send-email-kraxel@redhat.com +(cherry picked from commit 7569c54642e8aa9fa03e250c7c578bd4d3747f00) +Signed-off-by: Miroslav Rezanina +--- + hw/usb/dev-smartcard-reader.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c +index 672a7bf..07d15ba 100644 +--- a/hw/usb/dev-smartcard-reader.c ++++ b/hw/usb/dev-smartcard-reader.c +@@ -1001,21 +1001,20 @@ static void ccid_handle_bulk_out(USBCCIDState *s, USBPacket *p) + if (p->iov.size + s->bulk_out_pos > BULK_OUT_DATA_SIZE) { + goto err; + } +- ccid_header = (CCID_Header *)s->bulk_out_data; + usb_packet_copy(p, s->bulk_out_data + s->bulk_out_pos, p->iov.size); + s->bulk_out_pos += p->iov.size; ++ if (s->bulk_out_pos < 10) { ++ DPRINTF(s, 1, "%s: header incomplete\n", __func__); ++ goto err; ++ } ++ ++ ccid_header = (CCID_Header *)s->bulk_out_data; + if (p->iov.size == CCID_MAX_PACKET_SIZE) { + DPRINTF(s, D_VERBOSE, + "usb-ccid: bulk_in: expecting more packets (%zd/%d)\n", + p->iov.size, ccid_header->dwLength); + return; + } +- if (s->bulk_out_pos < 10) { +- DPRINTF(s, 1, +- "%s: bad USB_TOKEN_OUT length, should be at least 10 bytes\n", +- __func__); +- goto err; +- } + + DPRINTF(s, D_MORE_INFO, "%s %x %s\n", __func__, + ccid_header->bMessageType, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-fix-up-post-load-checks.patch b/SOURCES/kvm-usb-fix-up-post-load-checks.patch new file mode 100644 index 0000000..a63db0d --- /dev/null +++ b/SOURCES/kvm-usb-fix-up-post-load-checks.patch @@ -0,0 +1,64 @@ +From b7dd3cebccd2a785e78aca482f336d0e1500cfc5 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Thu, 15 May 2014 09:52:56 +0200 +Subject: [PATCH 25/31] usb: fix up post load checks + +RH-Author: Michael S. Tsirkin +Message-id: <1400144784-16355-1-git-send-email-mst@redhat.com> +Patchwork-id: 58907 +O-Subject: [PATCH qemu-kvm RHEL7.1] usb: fix up post load checks +Bugzilla: 1096829 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Juan Quintela + +Correct post load checks: +1. dev->setup_len == sizeof(dev->data_buf) + seems fine, no need to fail migration +2. When state is DATA, passing index > len + will cause memcpy with negative length, + resulting in heap overflow + +First of the issues was reported by dgilbert. + +Reported-by: "Dr. David Alan Gilbert" +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juan Quintela +(cherry picked from commit 719ffe1f5f72b1c7ace4afe9ba2815bcb53a829e) +Note: in maintainer's tree + git://github.com/juanquintela/qemu.git tags/migration/20140515, + pull request sent + +CVE-2014-3461 + +Bugzilla: 1096829 +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7459730 +Tested: lightly on developer's box +--- + hw/usb/bus.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/bus.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index 9766b7f..f4eeb5e 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -51,8 +51,8 @@ static int usb_device_post_load(void *opaque, int version_id) + } + if (dev->setup_index < 0 || + dev->setup_len < 0 || +- dev->setup_index >= sizeof(dev->data_buf) || +- dev->setup_len >= sizeof(dev->data_buf)) { ++ dev->setup_index > dev->setup_len || ++ dev->setup_len > sizeof(dev->data_buf)) { + return -EINVAL; + } + return 0; +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-hcd-xhci-QOM-Upcast-Sweep.patch b/SOURCES/kvm-usb-hcd-xhci-QOM-Upcast-Sweep.patch new file mode 100644 index 0000000..ed36aa2 --- /dev/null +++ b/SOURCES/kvm-usb-hcd-xhci-QOM-Upcast-Sweep.patch @@ -0,0 +1,126 @@ +From ccf8ee841c1d72d74bc4b6b54247089eb847087b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:34 +0200 +Subject: [PATCH 01/43] usb/hcd-xhci: QOM Upcast Sweep +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1405088470-24115-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 59835 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 01/37] usb/hcd-xhci: QOM Upcast Sweep +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Peter Crosthwaite + +Define and use standard QOM cast macro. Remove usages of DO_UPCAST() +and direct -> style upcasting. + +Signed-off-by: Peter Crosthwaite +[AF: Dropped usb_xhci_init() DeviceState argument and renamed variable] +Signed-off-by: Andreas Färber + +(cherry picked from commit 37034575d23a06447e4f44ab365afec6b198c53f) +--- + hw/usb/hcd-xhci.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 2c9e36a..8fa1c6e 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -485,6 +485,11 @@ struct XHCIState { + XHCIRing cmd_ring; + }; + ++#define TYPE_XHCI "nec-usb-xhci" ++ ++#define XHCI(obj) \ ++ OBJECT_CHECK(XHCIState, (obj), TYPE_XHCI) ++ + typedef struct XHCIEvRingSeg { + uint32_t addr_low; + uint32_t addr_high; +@@ -2719,7 +2724,7 @@ static void xhci_port_reset(XHCIPort *port, bool warm_reset) + + static void xhci_reset(DeviceState *dev) + { +- XHCIState *xhci = DO_UPCAST(XHCIState, pci_dev.qdev, dev); ++ XHCIState *xhci = XHCI(dev); + int i; + + trace_usb_xhci_reset(); +@@ -2968,6 +2973,7 @@ static void xhci_oper_write(void *ptr, hwaddr reg, + uint64_t val, unsigned size) + { + XHCIState *xhci = ptr; ++ DeviceState *d = DEVICE(ptr); + + trace_usb_xhci_oper_write(reg, val); + +@@ -2989,7 +2995,7 @@ static void xhci_oper_write(void *ptr, hwaddr reg, + xhci->usbcmd = val & 0xc0f; + xhci_mfwrap_update(xhci); + if (val & USBCMD_HCRST) { +- xhci_reset(&xhci->pci_dev.qdev); ++ xhci_reset(d); + } + xhci_intx_update(xhci); + break; +@@ -3315,8 +3321,9 @@ static USBBusOps xhci_bus_ops = { + .wakeup_endpoint = xhci_wakeup_endpoint, + }; + +-static void usb_xhci_init(XHCIState *xhci, DeviceState *dev) ++static void usb_xhci_init(XHCIState *xhci) + { ++ DeviceState *dev = DEVICE(xhci); + XHCIPort *port; + int i, usbports, speedmask; + +@@ -3331,7 +3338,7 @@ static void usb_xhci_init(XHCIState *xhci, DeviceState *dev) + usbports = MAX(xhci->numports_2, xhci->numports_3); + xhci->numports = xhci->numports_2 + xhci->numports_3; + +- usb_bus_new(&xhci->bus, &xhci_bus_ops, &xhci->pci_dev.qdev); ++ usb_bus_new(&xhci->bus, &xhci_bus_ops, dev); + + for (i = 0; i < usbports; i++) { + speedmask = 0; +@@ -3363,14 +3370,14 @@ static int usb_xhci_initfn(struct PCIDevice *dev) + { + int i, ret; + +- XHCIState *xhci = DO_UPCAST(XHCIState, pci_dev, dev); ++ XHCIState *xhci = XHCI(dev); + + xhci->pci_dev.config[PCI_CLASS_PROG] = 0x30; /* xHCI */ + xhci->pci_dev.config[PCI_INTERRUPT_PIN] = 0x01; /* interrupt pin 1 */ + xhci->pci_dev.config[PCI_CACHE_LINE_SIZE] = 0x10; + xhci->pci_dev.config[0x60] = 0x30; /* release number */ + +- usb_xhci_init(xhci, &dev->qdev); ++ usb_xhci_init(xhci); + + if (xhci->numintrs > MAXINTRS) { + xhci->numintrs = MAXINTRS; +@@ -3644,7 +3651,7 @@ static void xhci_class_init(ObjectClass *klass, void *data) + } + + static const TypeInfo xhci_info = { +- .name = "nec-usb-xhci", ++ .name = TYPE_XHCI, + .parent = TYPE_PCI_DEVICE, + .instance_size = sizeof(XHCIState), + .class_init = xhci_class_init, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-hcd-xhci-QOM-parent-field-cleanup.patch b/SOURCES/kvm-usb-hcd-xhci-QOM-parent-field-cleanup.patch new file mode 100644 index 0000000..a27f60c --- /dev/null +++ b/SOURCES/kvm-usb-hcd-xhci-QOM-parent-field-cleanup.patch @@ -0,0 +1,331 @@ +From d7852bf27b3c4bb0fa932d171325c3d386550ebe Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:35 +0200 +Subject: [PATCH 02/43] usb/hcd-xhci: QOM parent field cleanup +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1405088470-24115-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 59826 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 02/37] usb/hcd-xhci: QOM parent field cleanup +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Andreas Färber + +Replace direct uses of XHCIState::pci_dev with QOM casts and rename it +to parent_obj. + +Acked-by: Peter Crosthwaite +Signed-off-by: Andreas Färber +(cherry picked from commit 9b7d3334d062e8c9e4f1b0ad3df35abb08cd8bf0) +--- + hw/usb/hcd-xhci.c | 83 ++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 48 insertions(+), 35 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 83 ++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 48 insertions(+), 35 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 8fa1c6e..724c412 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -446,7 +446,10 @@ typedef struct XHCIInterrupter { + } XHCIInterrupter; + + struct XHCIState { +- PCIDevice pci_dev; ++ /*< private >*/ ++ PCIDevice parent_obj; ++ /*< public >*/ ++ + USBBus bus; + qemu_irq irq; + MemoryRegion mem; +@@ -662,7 +665,7 @@ static inline void xhci_dma_read_u32s(XHCIState *xhci, dma_addr_t addr, + + assert((len % sizeof(uint32_t)) == 0); + +- pci_dma_read(&xhci->pci_dev, addr, buf, len); ++ pci_dma_read(PCI_DEVICE(xhci), addr, buf, len); + + for (i = 0; i < (len / sizeof(uint32_t)); i++) { + buf[i] = le32_to_cpu(buf[i]); +@@ -680,7 +683,7 @@ static inline void xhci_dma_write_u32s(XHCIState *xhci, dma_addr_t addr, + for (i = 0; i < (len / sizeof(uint32_t)); i++) { + tmp[i] = cpu_to_le32(buf[i]); + } +- pci_dma_write(&xhci->pci_dev, addr, tmp, len); ++ pci_dma_write(PCI_DEVICE(xhci), addr, tmp, len); + } + + static XHCIPort *xhci_lookup_port(XHCIState *xhci, struct USBPort *uport) +@@ -707,10 +710,11 @@ static XHCIPort *xhci_lookup_port(XHCIState *xhci, struct USBPort *uport) + + static void xhci_intx_update(XHCIState *xhci) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); + int level = 0; + +- if (msix_enabled(&xhci->pci_dev) || +- msi_enabled(&xhci->pci_dev)) { ++ if (msix_enabled(pci_dev) || ++ msi_enabled(pci_dev)) { + return; + } + +@@ -726,9 +730,10 @@ static void xhci_intx_update(XHCIState *xhci) + + static void xhci_msix_update(XHCIState *xhci, int v) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); + bool enabled; + +- if (!msix_enabled(&xhci->pci_dev)) { ++ if (!msix_enabled(pci_dev)) { + return; + } + +@@ -739,17 +744,19 @@ static void xhci_msix_update(XHCIState *xhci, int v) + + if (enabled) { + trace_usb_xhci_irq_msix_use(v); +- msix_vector_use(&xhci->pci_dev, v); ++ msix_vector_use(pci_dev, v); + xhci->intr[v].msix_used = true; + } else { + trace_usb_xhci_irq_msix_unuse(v); +- msix_vector_unuse(&xhci->pci_dev, v); ++ msix_vector_unuse(pci_dev, v); + xhci->intr[v].msix_used = false; + } + } + + static void xhci_intr_raise(XHCIState *xhci, int v) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); ++ + xhci->intr[v].erdp_low |= ERDP_EHB; + xhci->intr[v].iman |= IMAN_IP; + xhci->usbsts |= USBSTS_EINT; +@@ -762,15 +769,15 @@ static void xhci_intr_raise(XHCIState *xhci, int v) + return; + } + +- if (msix_enabled(&xhci->pci_dev)) { ++ if (msix_enabled(pci_dev)) { + trace_usb_xhci_irq_msix(v); +- msix_notify(&xhci->pci_dev, v); ++ msix_notify(pci_dev, v); + return; + } + +- if (msi_enabled(&xhci->pci_dev)) { ++ if (msi_enabled(pci_dev)) { + trace_usb_xhci_irq_msi(v); +- msi_notify(&xhci->pci_dev, v); ++ msi_notify(pci_dev, v); + return; + } + +@@ -793,6 +800,7 @@ static void xhci_die(XHCIState *xhci) + + static void xhci_write_event(XHCIState *xhci, XHCIEvent *event, int v) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); + XHCIInterrupter *intr = &xhci->intr[v]; + XHCITRB ev_trb; + dma_addr_t addr; +@@ -811,7 +819,7 @@ static void xhci_write_event(XHCIState *xhci, XHCIEvent *event, int v) + ev_trb.status, ev_trb.control); + + addr = intr->er_start + TRB_SIZE*intr->er_ep_idx; +- pci_dma_write(&xhci->pci_dev, addr, &ev_trb, TRB_SIZE); ++ pci_dma_write(pci_dev, addr, &ev_trb, TRB_SIZE); + + intr->er_ep_idx++; + if (intr->er_ep_idx >= intr->er_size) { +@@ -958,9 +966,11 @@ static void xhci_ring_init(XHCIState *xhci, XHCIRing *ring, + static TRBType xhci_ring_fetch(XHCIState *xhci, XHCIRing *ring, XHCITRB *trb, + dma_addr_t *addr) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); ++ + while (1) { + TRBType type; +- pci_dma_read(&xhci->pci_dev, ring->dequeue, trb, TRB_SIZE); ++ pci_dma_read(pci_dev, ring->dequeue, trb, TRB_SIZE); + trb->addr = ring->dequeue; + trb->ccs = ring->ccs; + le64_to_cpus(&trb->parameter); +@@ -993,6 +1003,7 @@ static TRBType xhci_ring_fetch(XHCIState *xhci, XHCIRing *ring, XHCITRB *trb, + + static int xhci_ring_chain_length(XHCIState *xhci, const XHCIRing *ring) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); + XHCITRB trb; + int length = 0; + dma_addr_t dequeue = ring->dequeue; +@@ -1002,7 +1013,7 @@ static int xhci_ring_chain_length(XHCIState *xhci, const XHCIRing *ring) + + while (1) { + TRBType type; +- pci_dma_read(&xhci->pci_dev, dequeue, &trb, TRB_SIZE); ++ pci_dma_read(pci_dev, dequeue, &trb, TRB_SIZE); + le64_to_cpus(&trb.parameter); + le32_to_cpus(&trb.status); + le32_to_cpus(&trb.control); +@@ -1054,7 +1065,7 @@ static void xhci_er_reset(XHCIState *xhci, int v) + return; + } + dma_addr_t erstba = xhci_addr64(intr->erstba_low, intr->erstba_high); +- pci_dma_read(&xhci->pci_dev, erstba, &seg, sizeof(seg)); ++ pci_dma_read(PCI_DEVICE(xhci), erstba, &seg, sizeof(seg)); + le32_to_cpus(&seg.addr_low); + le32_to_cpus(&seg.addr_high); + le32_to_cpus(&seg.size); +@@ -1528,7 +1539,7 @@ static int xhci_xfer_create_sgl(XHCITransfer *xfer, int in_xfer) + int i; + + xfer->int_req = false; +- pci_dma_sglist_init(&xfer->sgl, &xhci->pci_dev, xfer->trb_count); ++ pci_dma_sglist_init(&xfer->sgl, PCI_DEVICE(xhci), xfer->trb_count); + for (i = 0; i < xfer->trb_count; i++) { + XHCITRB *trb = &xfer->trbs[i]; + dma_addr_t addr; +@@ -2144,7 +2155,7 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + assert(slotid >= 1 && slotid <= xhci->numslots); + + dcbaap = xhci_addr64(xhci->dcbaap_low, xhci->dcbaap_high); +- poctx = ldq_le_pci_dma(&xhci->pci_dev, dcbaap + 8*slotid); ++ poctx = ldq_le_pci_dma(PCI_DEVICE(xhci), dcbaap + 8 * slotid); + ictx = xhci_mask64(pictx); + octx = xhci_mask64(poctx); + +@@ -2465,7 +2476,7 @@ static TRBCCode xhci_get_port_bandwidth(XHCIState *xhci, uint64_t pctx) + /* TODO: actually implement real values here */ + bw_ctx[0] = 0; + memset(&bw_ctx[1], 80, xhci->numports); /* 80% */ +- pci_dma_write(&xhci->pci_dev, ctx, bw_ctx, sizeof(bw_ctx)); ++ pci_dma_write(PCI_DEVICE(xhci), ctx, bw_ctx, sizeof(bw_ctx)); + + return CC_SUCCESS; + } +@@ -2488,11 +2499,12 @@ static uint32_t xhci_nec_challenge(uint32_t hi, uint32_t lo) + + static void xhci_via_challenge(XHCIState *xhci, uint64_t addr) + { ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); + uint32_t buf[8]; + uint32_t obuf[8]; + dma_addr_t paddr = xhci_mask64(addr); + +- pci_dma_read(&xhci->pci_dev, paddr, &buf, 32); ++ pci_dma_read(pci_dev, paddr, &buf, 32); + + memcpy(obuf, buf, sizeof(obuf)); + +@@ -2508,7 +2520,7 @@ static void xhci_via_challenge(XHCIState *xhci, uint64_t addr) + obuf[7] = obuf[2] ^ obuf[3] ^ 0x65866593; + } + +- pci_dma_write(&xhci->pci_dev, paddr, &obuf, 32); ++ pci_dma_write(pci_dev, paddr, &obuf, 32); + } + + static void xhci_process_commands(XHCIState *xhci) +@@ -3372,10 +3384,10 @@ static int usb_xhci_initfn(struct PCIDevice *dev) + + XHCIState *xhci = XHCI(dev); + +- xhci->pci_dev.config[PCI_CLASS_PROG] = 0x30; /* xHCI */ +- xhci->pci_dev.config[PCI_INTERRUPT_PIN] = 0x01; /* interrupt pin 1 */ +- xhci->pci_dev.config[PCI_CACHE_LINE_SIZE] = 0x10; +- xhci->pci_dev.config[0x60] = 0x30; /* release number */ ++ dev->config[PCI_CLASS_PROG] = 0x30; /* xHCI */ ++ dev->config[PCI_INTERRUPT_PIN] = 0x01; /* interrupt pin 1 */ ++ dev->config[PCI_CACHE_LINE_SIZE] = 0x10; ++ dev->config[0x60] = 0x30; /* release number */ + + usb_xhci_init(xhci); + +@@ -3397,7 +3409,7 @@ static int usb_xhci_initfn(struct PCIDevice *dev) + + xhci->mfwrap_timer = qemu_new_timer_ns(vm_clock, xhci_mfwrap_timer, xhci); + +- xhci->irq = xhci->pci_dev.irq[0]; ++ xhci->irq = dev->irq[0]; + + memory_region_init(&xhci->mem, "xhci", LEN_REGS); + memory_region_init_io(&xhci->mem_cap, &xhci_cap_ops, xhci, +@@ -3423,18 +3435,18 @@ static int usb_xhci_initfn(struct PCIDevice *dev) + memory_region_add_subregion(&xhci->mem, offset, &port->mem); + } + +- pci_register_bar(&xhci->pci_dev, 0, ++ pci_register_bar(dev, 0, + PCI_BASE_ADDRESS_SPACE_MEMORY|PCI_BASE_ADDRESS_MEM_TYPE_64, + &xhci->mem); + +- ret = pcie_endpoint_cap_init(&xhci->pci_dev, 0xa0); ++ ret = pcie_endpoint_cap_init(dev, 0xa0); + assert(ret >= 0); + + if (xhci->flags & (1 << XHCI_FLAG_USE_MSI)) { +- msi_init(&xhci->pci_dev, 0x70, xhci->numintrs, true, false); ++ msi_init(dev, 0x70, xhci->numintrs, true, false); + } + if (xhci->flags & (1 << XHCI_FLAG_USE_MSI_X)) { +- msix_init(&xhci->pci_dev, xhci->numintrs, ++ msix_init(dev, xhci->numintrs, + &xhci->mem, 0, OFF_MSIX_TABLE, + &xhci->mem, 0, OFF_MSIX_PBA, + 0x90); +@@ -3446,6 +3458,7 @@ static int usb_xhci_initfn(struct PCIDevice *dev) + static int usb_xhci_post_load(void *opaque, int version_id) + { + XHCIState *xhci = opaque; ++ PCIDevice *pci_dev = PCI_DEVICE(xhci); + XHCISlot *slot; + XHCIEPContext *epctx; + dma_addr_t dcbaap, pctx; +@@ -3461,7 +3474,7 @@ static int usb_xhci_post_load(void *opaque, int version_id) + continue; + } + slot->ctx = +- xhci_mask64(ldq_le_pci_dma(&xhci->pci_dev, dcbaap + 8*slotid)); ++ xhci_mask64(ldq_le_pci_dma(pci_dev, dcbaap + 8 * slotid)); + xhci_dma_read_u32s(xhci, slot->ctx, slot_ctx, sizeof(slot_ctx)); + slot->uport = xhci_lookup_uport(xhci, slot_ctx); + assert(slot->uport && slot->uport->dev); +@@ -3486,9 +3499,9 @@ static int usb_xhci_post_load(void *opaque, int version_id) + + for (intr = 0; intr < xhci->numintrs; intr++) { + if (xhci->intr[intr].msix_used) { +- msix_vector_use(&xhci->pci_dev, intr); ++ msix_vector_use(pci_dev, intr); + } else { +- msix_vector_unuse(&xhci->pci_dev, intr); ++ msix_vector_unuse(pci_dev, intr); + } + } + +@@ -3593,8 +3606,8 @@ static const VMStateDescription vmstate_xhci = { + .version_id = 1, + .post_load = usb_xhci_post_load, + .fields = (VMStateField[]) { +- VMSTATE_PCIE_DEVICE(pci_dev, XHCIState), +- VMSTATE_MSIX(pci_dev, XHCIState), ++ VMSTATE_PCIE_DEVICE(parent_obj, XHCIState), ++ VMSTATE_MSIX(parent_obj, XHCIState), + + VMSTATE_STRUCT_VARRAY_UINT32(ports, XHCIState, numports, 1, + vmstate_xhci_port, XHCIPort), +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-hcd-xhci-Remove-unused-cancelled-member-from-XHC.patch b/SOURCES/kvm-usb-hcd-xhci-Remove-unused-cancelled-member-from-XHC.patch new file mode 100644 index 0000000..9eaa998 --- /dev/null +++ b/SOURCES/kvm-usb-hcd-xhci-Remove-unused-cancelled-member-from-XHC.patch @@ -0,0 +1,72 @@ +From fc1acb16e008aea013d59435fc14b967f1c8a144 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:49 +0200 +Subject: [PATCH 15/43] usb-hcd-xhci: Remove unused cancelled member from + XHCITransfer + +Message-id: <1405088470-24115-17-git-send-email-kraxel@redhat.com> +Patchwork-id: 59831 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 16/37] usb-hcd-xhci: Remove unused cancelled member from XHCITransfer +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Since qemu's USB model is geared towards emulated devices cancellation +is instanteneous, so no need to wait for cancellation to complete, as +such there is no wait for cancellation code, and the cancelled bool +as well as the bogus comment about it can be removed. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 8de1838afed4b5b05d18cc42a3e5a6fe9b19f29b) +--- + hw/usb/hcd-xhci.c | 5 ----- + 1 file changed, 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index af0c42d..3b4cd01 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -346,7 +346,6 @@ typedef struct XHCITransfer { + QEMUSGList sgl; + bool running_async; + bool running_retry; +- bool cancelled; + bool complete; + bool int_req; + unsigned int iso_pkts; +@@ -1312,8 +1311,6 @@ static int xhci_ep_nuke_one_xfer(XHCITransfer *t) + if (t->running_async) { + usb_cancel_packet(&t->packet); + t->running_async = 0; +- t->cancelled = 1; +- DPRINTF("xhci: cancelling transfer, waiting for it to complete\n"); + killed = 1; + } + if (t->running_retry) { +@@ -1730,14 +1727,12 @@ static int xhci_complete_packet(XHCITransfer *xfer) + xfer->running_async = 1; + xfer->running_retry = 0; + xfer->complete = 0; +- xfer->cancelled = 0; + return 0; + } else if (xfer->packet.status == USB_RET_NAK) { + trace_usb_xhci_xfer_nak(xfer); + xfer->running_async = 0; + xfer->running_retry = 1; + xfer->complete = 0; +- xfer->cancelled = 0; + return 0; + } else { + xfer->running_async = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-hcd-xhci-Remove-unused-sstreamsm-member-from-XHC.patch b/SOURCES/kvm-usb-hcd-xhci-Remove-unused-sstreamsm-member-from-XHC.patch new file mode 100644 index 0000000..7ab6ada --- /dev/null +++ b/SOURCES/kvm-usb-hcd-xhci-Remove-unused-sstreamsm-member-from-XHC.patch @@ -0,0 +1,67 @@ +From 20c1e309f606aaec8274ff3cc7471382de049473 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:48 +0200 +Subject: [PATCH 14/43] usb-hcd-xhci: Remove unused sstreamsm member from + XHCIStreamContext + +Message-id: <1405088470-24115-16-git-send-email-kraxel@redhat.com> +Patchwork-id: 59828 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 15/37] usb-hcd-xhci: Remove unused sstreamsm member from XHCIStreamContext +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 946ff2c0c353e4bf493f6ff2bcc308adddee4a4c) +--- + hw/usb/hcd-xhci.c | 9 --------- + 1 file changed, 9 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index bb3bba3..af0c42d 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -374,7 +374,6 @@ struct XHCIStreamContext { + dma_addr_t pctx; + unsigned int sct; + XHCIRing ring; +- XHCIStreamContext *sstreams; + }; + + struct XHCIEPContext { +@@ -1135,7 +1134,6 @@ static void xhci_reset_streams(XHCIEPContext *epctx) + + for (i = 0; i < epctx->nr_pstreams; i++) { + epctx->pstreams[i].sct = -1; +- g_free(epctx->pstreams[i].sstreams); + } + } + +@@ -1148,15 +1146,8 @@ static void xhci_alloc_streams(XHCIEPContext *epctx, dma_addr_t base) + + static void xhci_free_streams(XHCIEPContext *epctx) + { +- int i; +- + assert(epctx->pstreams != NULL); + +- if (!epctx->lsa) { +- for (i = 0; i < epctx->nr_pstreams; i++) { +- g_free(epctx->pstreams[i].sstreams); +- } +- } + g_free(epctx->pstreams); + epctx->pstreams = NULL; + epctx->nr_pstreams = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-hcd-xhci-Report-completion-of-active-transfer-wi.patch b/SOURCES/kvm-usb-hcd-xhci-Report-completion-of-active-transfer-wi.patch new file mode 100644 index 0000000..ac6eff4 --- /dev/null +++ b/SOURCES/kvm-usb-hcd-xhci-Report-completion-of-active-transfer-wi.patch @@ -0,0 +1,136 @@ +From 356cd0ad58931df9374324eeceff760a6310db27 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:50 +0200 +Subject: [PATCH 16/43] usb-hcd-xhci: Report completion of active transfer with + CC_STOPPED on ep stop + +Message-id: <1405088470-24115-18-git-send-email-kraxel@redhat.com> +Patchwork-id: 59832 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 17/37] usb-hcd-xhci: Report completion of active transfer with CC_STOPPED on ep stop +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +As we should per the XHCI spec "4.6.9 Stop Endpoint". + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 582d6f4aba0ff24604a82b48aee2db17b100d4b4) +--- + hw/usb/hcd-xhci.c | 26 ++++++++++++++++++-------- + 1 file changed, 18 insertions(+), 8 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 26 ++++++++++++++++++-------- + 1 file changed, 18 insertions(+), 8 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 3b4cd01..fc3b330 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -507,6 +507,7 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + unsigned int epid, unsigned int streamid); + static TRBCCode xhci_disable_ep(XHCIState *xhci, unsigned int slotid, + unsigned int epid); ++static void xhci_xfer_report(XHCITransfer *xfer); + static void xhci_event(XHCIState *xhci, XHCIEvent *event, int v); + static void xhci_write_event(XHCIState *xhci, XHCIEvent *event, int v); + static USBEndpoint *xhci_epid_to_usbep(XHCIState *xhci, +@@ -1304,10 +1305,15 @@ static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, + return CC_SUCCESS; + } + +-static int xhci_ep_nuke_one_xfer(XHCITransfer *t) ++static int xhci_ep_nuke_one_xfer(XHCITransfer *t, TRBCCode report) + { + int killed = 0; + ++ if (report && (t->running_async || t->running_retry)) { ++ t->status = report; ++ xhci_xfer_report(t); ++ } ++ + if (t->running_async) { + usb_cancel_packet(&t->packet); + t->running_async = 0; +@@ -1320,6 +1326,7 @@ static int xhci_ep_nuke_one_xfer(XHCITransfer *t) + qemu_del_timer(epctx->kick_timer); + } + t->running_retry = 0; ++ killed = 1; + } + if (t->trbs) { + g_free(t->trbs); +@@ -1332,7 +1339,7 @@ static int xhci_ep_nuke_one_xfer(XHCITransfer *t) + } + + static int xhci_ep_nuke_xfers(XHCIState *xhci, unsigned int slotid, +- unsigned int epid) ++ unsigned int epid, TRBCCode report) + { + XHCISlot *slot; + XHCIEPContext *epctx; +@@ -1353,7 +1360,10 @@ static int xhci_ep_nuke_xfers(XHCIState *xhci, unsigned int slotid, + + xferi = epctx->next_xfer; + for (i = 0; i < TD_QUEUE; i++) { +- killed += xhci_ep_nuke_one_xfer(&epctx->transfers[xferi]); ++ killed += xhci_ep_nuke_one_xfer(&epctx->transfers[xferi], report); ++ if (killed) { ++ report = 0; /* Only report once */ ++ } + epctx->transfers[xferi].packet.ep = NULL; + xferi = (xferi + 1) % TD_QUEUE; + } +@@ -1383,7 +1393,7 @@ static TRBCCode xhci_disable_ep(XHCIState *xhci, unsigned int slotid, + return CC_SUCCESS; + } + +- xhci_ep_nuke_xfers(xhci, slotid, epid); ++ xhci_ep_nuke_xfers(xhci, slotid, epid, 0); + + epctx = slot->eps[epid-1]; + +@@ -1425,7 +1435,7 @@ static TRBCCode xhci_stop_ep(XHCIState *xhci, unsigned int slotid, + return CC_EP_NOT_ENABLED_ERROR; + } + +- if (xhci_ep_nuke_xfers(xhci, slotid, epid) > 0) { ++ if (xhci_ep_nuke_xfers(xhci, slotid, epid, CC_STOPPED) > 0) { + fprintf(stderr, "xhci: FIXME: endpoint stopped w/ xfers running, " + "data might be lost\n"); + } +@@ -1470,7 +1480,7 @@ static TRBCCode xhci_reset_ep(XHCIState *xhci, unsigned int slotid, + return CC_CONTEXT_STATE_ERROR; + } + +- if (xhci_ep_nuke_xfers(xhci, slotid, epid) > 0) { ++ if (xhci_ep_nuke_xfers(xhci, slotid, epid, 0) > 0) { + fprintf(stderr, "xhci: FIXME: endpoint reset w/ xfers running, " + "data might be lost\n"); + } +@@ -2463,7 +2473,7 @@ static void xhci_detach_slot(XHCIState *xhci, USBPort *uport) + + for (ep = 0; ep < 31; ep++) { + if (xhci->slots[slot].eps[ep]) { +- xhci_ep_nuke_xfers(xhci, slot+1, ep+1); ++ xhci_ep_nuke_xfers(xhci, slot + 1, ep + 1, 0); + } + } + xhci->slots[slot].uport = NULL; +@@ -3286,7 +3296,7 @@ static void xhci_complete(USBPort *port, USBPacket *packet) + XHCITransfer *xfer = container_of(packet, XHCITransfer, packet); + + if (packet->status == USB_RET_REMOVE_FROM_QUEUE) { +- xhci_ep_nuke_one_xfer(xfer); ++ xhci_ep_nuke_one_xfer(xfer, 0); + return; + } + xhci_complete_packet(xfer); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-hcd-xhci-Update-endpoint-context-dequeue-pointer.patch b/SOURCES/kvm-usb-hcd-xhci-Update-endpoint-context-dequeue-pointer.patch new file mode 100644 index 0000000..6cea4a0 --- /dev/null +++ b/SOURCES/kvm-usb-hcd-xhci-Update-endpoint-context-dequeue-pointer.patch @@ -0,0 +1,77 @@ +From 83423f42cd68e8b3ee644f38686dc4eabba9ce37 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:51 +0200 +Subject: [PATCH 17/43] usb-hcd-xhci: Update endpoint context dequeue pointer + for streams too + +Message-id: <1405088470-24115-19-git-send-email-kraxel@redhat.com> +Patchwork-id: 59838 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 18/37] usb-hcd-xhci: Update endpoint context dequeue pointer for streams too +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +With streams the endpoint context dequeue pointer should point to the +dequeue value for the currently active stream. + +At least Linux guests expect it to point to value set by an set_ep_dequeue +upon completion of the set_ep_dequeue (before kicking the ep). + +Otherwise the Linux kernel will complain (and things won't work): + +xhci_hcd 0000:00:05.0: Mismatch between completed Set TR Deq Ptr command & xHCI internal state. +xhci_hcd 0000:00:05.0: ep deq seg = ffff8800366f0880, deq ptr = ffff8800366ec010 + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c90daa1c109348099088c1cc954c1e9f3392ae03) +--- + hw/usb/hcd-xhci.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index fc3b330..ef0c073 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1189,6 +1189,7 @@ static XHCIStreamContext *xhci_find_stream(XHCIEPContext *epctx, + static void xhci_set_ep_state(XHCIState *xhci, XHCIEPContext *epctx, + XHCIStreamContext *sctx, uint32_t state) + { ++ XHCIRing *ring = NULL; + uint32_t ctx[5]; + uint32_t ctx2[2]; + +@@ -1199,6 +1200,7 @@ static void xhci_set_ep_state(XHCIState *xhci, XHCIEPContext *epctx, + /* update ring dequeue ptr */ + if (epctx->nr_pstreams) { + if (sctx != NULL) { ++ ring = &sctx->ring; + xhci_dma_read_u32s(xhci, sctx->pctx, ctx2, sizeof(ctx2)); + ctx2[0] &= 0xe; + ctx2[0] |= sctx->ring.dequeue | sctx->ring.ccs; +@@ -1206,8 +1208,12 @@ static void xhci_set_ep_state(XHCIState *xhci, XHCIEPContext *epctx, + xhci_dma_write_u32s(xhci, sctx->pctx, ctx2, sizeof(ctx2)); + } + } else { +- ctx[2] = epctx->ring.dequeue | epctx->ring.ccs; +- ctx[3] = (epctx->ring.dequeue >> 16) >> 16; ++ ring = &epctx->ring; ++ } ++ if (ring) { ++ ctx[2] = ring->dequeue | ring->ccs; ++ ctx[3] = (ring->dequeue >> 16) >> 16; ++ + DPRINTF("xhci: set epctx: " DMA_ADDR_FMT " state=%d dequeue=%08x%08x\n", + epctx->pctx, state, ctx[3], ctx[2]); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-hid-add-microsoft-os-descriptor-support.patch b/SOURCES/kvm-usb-hid-add-microsoft-os-descriptor-support.patch new file mode 100644 index 0000000..7b9ffd6 --- /dev/null +++ b/SOURCES/kvm-usb-hid-add-microsoft-os-descriptor-support.patch @@ -0,0 +1,79 @@ +From 2dbe97005502fe2e1dcbebf177bafe443a62e96d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 3 Feb 2014 16:30:32 +0100 +Subject: [PATCH 08/28] usb-hid: add microsoft os descriptor support + +RH-Author: Gerd Hoffmann +Message-id: <1391445032-5540-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 57079 +O-Subject: [RHEL-7 qemu-kvm PATCH 5/5] usb-hid: add microsoft os descriptor support +Bugzilla: 1039530 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +Set SelectiveSuspendEnabled registy entry to one. +This makes Windows use remote suspend by default, +without manual registry fiddeling. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 88678fbd9dbf01fd0988bcb651508378d85e868a) +--- + hw/usb/dev-hid.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/dev-hid.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c +index 6aadaa0..7dc75f7 100644 +--- a/hw/usb/dev-hid.c ++++ b/hw/usb/dev-hid.c +@@ -261,6 +261,10 @@ static const USBDescDevice desc_device_keyboard = { + }, + }; + ++static const USBDescMSOS desc_msos_suspend = { ++ .SelectiveSuspendEnabled = true, ++}; ++ + static const USBDesc desc_mouse = { + .id = { + .idVendor = 0x0627, +@@ -272,6 +276,7 @@ static const USBDesc desc_mouse = { + }, + .full = &desc_device_mouse, + .str = desc_strings, ++ .msos = &desc_msos_suspend, + }; + + static const USBDesc desc_tablet = { +@@ -285,6 +290,7 @@ static const USBDesc desc_tablet = { + }, + .full = &desc_device_tablet, + .str = desc_strings, ++ .msos = &desc_msos_suspend, + }; + + static const USBDesc desc_tablet2 = { +@@ -299,6 +305,7 @@ static const USBDesc desc_tablet2 = { + .full = &desc_device_tablet, + .high = &desc_device_tablet2, + .str = desc_strings, ++ .msos = &desc_msos_suspend, + }; + + static const USBDesc desc_keyboard = { +@@ -312,6 +319,7 @@ static const USBDesc desc_keyboard = { + }, + .full = &desc_device_keyboard, + .str = desc_strings, ++ .msos = &desc_msos_suspend, + }; + + static const uint8_t qemu_mouse_hid_report_descriptor[] = { +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-host-libusb-Configuration-0-may-be-a-valid-confi.patch b/SOURCES/kvm-usb-host-libusb-Configuration-0-may-be-a-valid-confi.patch new file mode 100644 index 0000000..952b11e --- /dev/null +++ b/SOURCES/kvm-usb-host-libusb-Configuration-0-may-be-a-valid-confi.patch @@ -0,0 +1,66 @@ +From 50120520c3ec6385d2d36f5f0fe37acf8d230e91 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 6 Nov 2013 12:16:59 +0100 +Subject: [PATCH 64/81] usb-host-libusb: Configuration 0 may be a valid configuration + +RH-Author: Gerd Hoffmann +Message-id: <1383740220-2049-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 55512 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/3] usb-host-libusb: Configuration 0 may be a valid configuration +Bugzilla: 980383 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Alex Williamson + +From: Hans de Goede + +Quoting from: linux/Documentation/ABI/stable/sysfs-bus-usb: + + Note that some devices, in violation of the USB spec, have a + configuration with a value equal to 0. Writing 0 to + bConfigurationValue for these devices will install that + configuration, rather then unconfigure the device. + +So don't compare the configuration value against 0 to check for unconfigured +devices, instead check for a LIBUSB_ERROR_NOT_FOUND return from +libusb_get_active_config_descriptor(). + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 1294ca797c6bee39d4dbc3e92010873ce4047e0e) +--- + hw/usb/host-libusb.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/host-libusb.c | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index 9c8905e..9b226e4 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -992,15 +992,14 @@ static int usb_host_claim_interfaces(USBHostDevice *s, int configuration) + udev->ninterfaces = 0; + udev->configuration = 0; + +- if (configuration == 0) { +- /* address state - ignore */ +- return USB_RET_SUCCESS; +- } +- + usb_host_detach_kernel(s); + + rc = libusb_get_active_config_descriptor(s->dev, &conf); + if (rc != 0) { ++ if (rc == LIBUSB_ERROR_NOT_FOUND) { ++ /* address state - ignore */ ++ return USB_RET_SUCCESS; ++ } + return USB_RET_STALL; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-host-libusb-Detach-kernel-drivers-earlier.patch b/SOURCES/kvm-usb-host-libusb-Detach-kernel-drivers-earlier.patch new file mode 100644 index 0000000..95ff9ff --- /dev/null +++ b/SOURCES/kvm-usb-host-libusb-Detach-kernel-drivers-earlier.patch @@ -0,0 +1,70 @@ +From 13b8b9eda753aa5bc1758627f9148e4fff91f90f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 6 Nov 2013 12:17:00 +0100 +Subject: [PATCH 65/81] usb-host-libusb: Detach kernel drivers earlier + +RH-Author: Gerd Hoffmann +Message-id: <1383740220-2049-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 55515 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/3] usb-host-libusb: Detach kernel drivers earlier +Bugzilla: 980383 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Alex Williamson + +From: Hans de Goede + +If we detach the kernel drivers on the first set_config, then they will +be still attached when the device gets its initial reset. Causing the drivers +to re-initialize the device after the reset, dirtying the device state. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit f34d5c750897abb3853910ce73f63d88d74dc827) +--- + hw/usb/host-libusb.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/host-libusb.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index 9b226e4..8510902 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -137,6 +137,7 @@ static QTAILQ_HEAD(, USBHostDevice) hostdevs = + static void usb_host_auto_check(void *unused); + static void usb_host_release_interfaces(USBHostDevice *s); + static void usb_host_nodev(USBHostDevice *s); ++static void usb_host_detach_kernel(USBHostDevice *s); + static void usb_host_attach_kernel(USBHostDevice *s); + + /* ------------------------------------------------------------------------ */ +@@ -787,10 +788,13 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev) + goto fail; + } + +- libusb_get_device_descriptor(dev, &s->ddesc); + s->dev = dev; + s->bus_num = bus_num; + s->addr = addr; ++ ++ usb_host_detach_kernel(s); ++ ++ libusb_get_device_descriptor(dev, &s->ddesc); + usb_host_get_port(s->dev, s->port, sizeof(s->port)); + + usb_ep_init(udev); +@@ -1051,7 +1055,6 @@ static void usb_host_set_config(USBHostDevice *s, int config, USBPacket *p) + trace_usb_host_set_config(s->bus_num, s->addr, config); + + usb_host_release_interfaces(s); +- usb_host_detach_kernel(s); + rc = libusb_set_configuration(s->dh, config); + if (rc != 0) { + usb_host_libusb_error("libusb_set_configuration", rc); +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-host-libusb-Fix-building-with-libusb-git-master-code.patch b/SOURCES/kvm-usb-host-libusb-Fix-building-with-libusb-git-master-code.patch new file mode 100644 index 0000000..3657616 --- /dev/null +++ b/SOURCES/kvm-usb-host-libusb-Fix-building-with-libusb-git-master-code.patch @@ -0,0 +1,44 @@ +From 4de8173704a782b602f2d5412b2b9d08ceb9fc1d Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Tue, 13 Aug 2013 08:31:21 +0200 +Subject: usb/host-libusb: Fix building with libusb git master code + +RH-Author: Stefan Hajnoczi +Message-id: <1376382681-14630-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 53201 +O-Subject: [PATCH] usb/host-libusb: Fix building with libusb git master code +Bugzilla: 996469 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Hans de Goede + +From: Hans de Goede + +Upstream-status: bc45de8c21dfc3bc3896a78b33d5a6d9e710dfff +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6159903 +BZ: 996469 + +The next libusb release will deprecate libusb_get_port_path, and since +we compile with -Werror, this breaks the build. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit bc45de8c21dfc3bc3896a78b33d5a6d9e710dfff) +Signed-off-by: Stefan Hajnoczi + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index 3a582c5..0c12b0f 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -241,7 +241,11 @@ static int usb_host_get_port(libusb_device *dev, char *port, size_t len) + size_t off; + int rc, i; + ++#if LIBUSBX_API_VERSION >= 0x01000102 ++ rc = libusb_get_port_numbers(dev, path, 7); ++#else + rc = libusb_get_port_path(ctx, dev, path, 7); ++#endif + if (rc < 0) { + return 0; + } diff --git a/SOURCES/kvm-usb-host-libusb-Fix-reset-handling.patch b/SOURCES/kvm-usb-host-libusb-Fix-reset-handling.patch new file mode 100644 index 0000000..827b9c8 --- /dev/null +++ b/SOURCES/kvm-usb-host-libusb-Fix-reset-handling.patch @@ -0,0 +1,75 @@ +From d8c698663916222fea36f660f0e56a23a8688afc Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 6 Nov 2013 12:16:58 +0100 +Subject: [PATCH 63/81] usb-host-libusb: Fix reset handling + +RH-Author: Gerd Hoffmann +Message-id: <1383740220-2049-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 55513 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/3] usb-host-libusb: Fix reset handling +Bugzilla: 980415 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Alex Williamson + +From: Hans de Goede + +The guest will issue an initial device reset when the device is attached, but +since the current usb-host-libusb code only actually does the reset when +udev->configuration != 0, and on attach the device is not yet configured, +the reset gets ignored. This means that the device gets passed to the guest +in an unknown state, which is not good. + +The udev->configuration check is there because of the release / claim +interfaces done around the libusb_device_reset call, but these are not +necessary. If interfaces are claimed when libusb_device_reset gets called +libusb will release + reclaim them itself. + +The usb_host_ep_update call also is not necessary. If the reset succeeds the +original config and interface alt settings will be restored. + +Last if the reset fails, that means the device has either disconnected or +morphed into an another device and has been completely re-enumerated, +so it is treated by the host as a new device and our handle is invalid, +so on reset failure we need to call usb_host_nodev(). + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 5af35d7feccaa7d26b72c6c3d14116421d736b36) +--- + hw/usb/host-libusb.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/host-libusb.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index f660770..9c8905e 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -1256,16 +1256,14 @@ static void usb_host_flush_ep_queue(USBDevice *dev, USBEndpoint *ep) + static void usb_host_handle_reset(USBDevice *udev) + { + USBHostDevice *s = USB_HOST_DEVICE(udev); ++ int rc; + + trace_usb_host_reset(s->bus_num, s->addr); + +- if (udev->configuration == 0) { +- return; ++ rc = libusb_reset_device(s->dh); ++ if (rc != 0) { ++ usb_host_nodev(s); + } +- usb_host_release_interfaces(s); +- libusb_reset_device(s->dh); +- usb_host_claim_interfaces(s, 0); +- usb_host_ep_update(s); + } + + /* +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-initialize-libusb_device-to-avoid-crash.patch b/SOURCES/kvm-usb-initialize-libusb_device-to-avoid-crash.patch new file mode 100644 index 0000000..aef0ff7 --- /dev/null +++ b/SOURCES/kvm-usb-initialize-libusb_device-to-avoid-crash.patch @@ -0,0 +1,72 @@ +From 7940a4b551e845a34409ad79a6250c5ea2f97df6 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:21:10 +0200 +Subject: [PATCH 30/43] usb: initialize libusb_device to avoid crash + +Message-id: <1405088470-24115-38-git-send-email-kraxel@redhat.com> +Patchwork-id: 59842 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 37/37] usb: initialize libusb_device to avoid crash +Bugzilla: 1111450 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Jincheng Miao + +If libusb_get_device_list() fails, the uninitialized local variable +libusb_device would be passed to libusb_free_device_list(), that +will cause a crash, like: +(gdb) bt + #0 0x00007fbbb4bafc10 in pthread_mutex_lock () from /lib64/libpthread.so.0 + #1 0x00007fbbb233e653 in libusb_unref_device (dev=0x6275682d627375) + at core.c:902 + #2 0x00007fbbb233e739 in libusb_free_device_list (list=0x7fbbb6e8436e, + unref_devices=) at core.c:653 + #3 0x00007fbbb6cd80a4 in usb_host_auto_check (unused=unused@entry=0x0) + at hw/usb/host-libusb.c:1446 + #4 0x00007fbbb6cd8525 in usb_host_initfn (udev=0x7fbbbd3c5670) + at hw/usb/host-libusb.c:912 + #5 0x00007fbbb6cc123b in usb_device_init (dev=0x7fbbbd3c5670) + at hw/usb/bus.c:106 + ... + +So initialize libusb_device at the begin time. + +Signed-off-by: Jincheng Miao +Reviewed-by: Gonglei +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 3ce21445387c64032a21ae73c995195307a28a36) +--- + hw/usb/host-libusb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/host-libusb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index 8510902..ef3dd5f 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -1384,7 +1384,7 @@ static void usb_host_auto_check(void *unused) + { + struct USBHostDevice *s; + struct USBAutoFilter *f; +- libusb_device **devs; ++ libusb_device **devs = NULL; + struct libusb_device_descriptor ddesc; + int unconnected = 0; + int i, n; +@@ -1485,7 +1485,7 @@ static void usb_host_auto_check(void *unused) + + void usb_host_info(Monitor *mon, const QDict *qdict) + { +- libusb_device **devs; ++ libusb_device **devs = NULL; + struct libusb_device_descriptor ddesc; + char port[16]; + int i, n; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-move-usb_-hi-lo-helpers-to-header-file.patch b/SOURCES/kvm-usb-move-usb_-hi-lo-helpers-to-header-file.patch new file mode 100644 index 0000000..5266719 --- /dev/null +++ b/SOURCES/kvm-usb-move-usb_-hi-lo-helpers-to-header-file.patch @@ -0,0 +1,73 @@ +From f37a2871c57468d317739e21cc747066d9ed284f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 3 Feb 2014 16:30:29 +0100 +Subject: [PATCH 05/28] usb: move usb_{hi, lo} helpers to header file. + +RH-Author: Gerd Hoffmann +Message-id: <1391445032-5540-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 57076 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/5] usb: move usb_{hi, lo} helpers to header file. +Bugzilla: 1039530 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 0b1fa34e1dd2764ee7ae2be849e1c5ba5e8724ca) +--- + hw/usb/desc.c | 10 ---------- + hw/usb/desc.h | 11 +++++++++++ + 2 files changed, 11 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/desc.c | 10 ---------- + hw/usb/desc.h | 11 +++++++++++ + 2 files changed, 11 insertions(+), 10 deletions(-) + +diff --git a/hw/usb/desc.c b/hw/usb/desc.c +index bf6c522..3e560cd 100644 +--- a/hw/usb/desc.c ++++ b/hw/usb/desc.c +@@ -6,16 +6,6 @@ + + /* ------------------------------------------------------------------ */ + +-static uint8_t usb_lo(uint16_t val) +-{ +- return val & 0xff; +-} +- +-static uint8_t usb_hi(uint16_t val) +-{ +- return (val >> 8) & 0xff; +-} +- + int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, + uint8_t *dest, size_t len) + { +diff --git a/hw/usb/desc.h b/hw/usb/desc.h +index ddd3e74..81327b0 100644 +--- a/hw/usb/desc.h ++++ b/hw/usb/desc.h +@@ -194,6 +194,17 @@ struct USBDesc { + + #define USB_DESC_FLAG_SUPER (1 << 1) + ++/* little helpers */ ++static inline uint8_t usb_lo(uint16_t val) ++{ ++ return val & 0xff; ++} ++ ++static inline uint8_t usb_hi(uint16_t val) ++{ ++ return (val >> 8) & 0xff; ++} ++ + /* generate usb packages from structs */ + int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, + uint8_t *dest, size_t len); +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-parallelize-usb3-streams.patch b/SOURCES/kvm-usb-parallelize-usb3-streams.patch new file mode 100644 index 0000000..b06cebb --- /dev/null +++ b/SOURCES/kvm-usb-parallelize-usb3-streams.patch @@ -0,0 +1,66 @@ +From 2160ddf46b85b84d271e450383151ff288958622 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:41 +0200 +Subject: [PATCH 08/43] usb: parallelize usb3 streams + +Message-id: <1405088470-24115-9-git-send-email-kraxel@redhat.com> +Patchwork-id: 59844 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 08/37] usb: parallelize usb3 streams +Bugzilla: 1075846 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +usb3 bulk endpoints with streams are implicitly pipelined now, +so the requests will actually be processed in parallel. Also +allow them to complete out-of-order. + +Fixes stalls in the uas driver. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c96c41ed0d38d68a6c8b6f84751afebafeae31be) +--- + hw/usb/core.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/core.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/hw/usb/core.c b/hw/usb/core.c +index 05948ca..31960c2 100644 +--- a/hw/usb/core.c ++++ b/hw/usb/core.c +@@ -403,7 +403,7 @@ void usb_handle_packet(USBDevice *dev, USBPacket *p) + p->ep->halted = false; + } + +- if (QTAILQ_EMPTY(&p->ep->queue) || p->ep->pipeline) { ++ if (QTAILQ_EMPTY(&p->ep->queue) || p->ep->pipeline || p->stream) { + usb_process_one(p); + if (p->status == USB_RET_ASYNC) { + /* hcd drivers cannot handle async for isoc */ +@@ -420,7 +420,8 @@ void usb_handle_packet(USBDevice *dev, USBPacket *p) + * When pipelining is enabled usb-devices must always return async, + * otherwise packets can complete out of order! + */ +- assert(!p->ep->pipeline || QTAILQ_EMPTY(&p->ep->queue)); ++ assert(p->stream || !p->ep->pipeline || ++ QTAILQ_EMPTY(&p->ep->queue)); + if (p->status != USB_RET_NAK) { + usb_packet_set_state(p, USB_PACKET_COMPLETE); + } +@@ -434,7 +435,7 @@ void usb_packet_complete_one(USBDevice *dev, USBPacket *p) + { + USBEndpoint *ep = p->ep; + +- assert(QTAILQ_FIRST(&ep->queue) == p); ++ assert(p->stream || QTAILQ_FIRST(&ep->queue) == p); + assert(p->status != USB_RET_ASYNC && p->status != USB_RET_NAK); + + if (p->status != USB_RET_SUCCESS || +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-redir-fix-use-after-free.patch b/SOURCES/kvm-usb-redir-fix-use-after-free.patch new file mode 100644 index 0000000..7f1af09 --- /dev/null +++ b/SOURCES/kvm-usb-redir-fix-use-after-free.patch @@ -0,0 +1,45 @@ +From bba21b64c47889ee3a11b3f011fab73b84697e16 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:37 +0200 +Subject: [PATCH 04/43] usb-redir: fix use-after-free + +Message-id: <1405088470-24115-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 59819 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 04/37] usb-redir: fix use-after-free +Bugzilla: 1046574 1088116 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Hans de Goede +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Markus Armbruster +RH-Acked-by: Laszlo Ersek + +Reinitialize dev->cs to NULL after deleting it, to make sure it isn't +used afterwards. + +Reported-by: Martin Cerveny +Signed-off-by: Gerd Hoffmann +(cherry picked from commit a14ff8a650b5943ee6221b952494661f7cb3b5e2) +--- + hw/usb/redirect.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/redirect.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c +index 8b8c010..e3b9f32 100644 +--- a/hw/usb/redirect.c ++++ b/hw/usb/redirect.c +@@ -1334,6 +1334,7 @@ static void usbredir_handle_destroy(USBDevice *udev) + USBRedirDevice *dev = DO_UPCAST(USBRedirDevice, dev, udev); + + qemu_chr_delete(dev->cs); ++ dev->cs = NULL; + /* Note must be done after qemu_chr_close, as that causes a close event */ + qemu_bh_delete(dev->chardev_close_bh); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-usb-remove-old-usb-host-code.patch b/SOURCES/kvm-usb-remove-old-usb-host-code.patch new file mode 100644 index 0000000..8ab4201 --- /dev/null +++ b/SOURCES/kvm-usb-remove-old-usb-host-code.patch @@ -0,0 +1,2665 @@ +From 328574a81c4879246b3f222447654eced05ab570 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 5 Nov 2013 10:54:20 +0100 +Subject: [PATCH 14/29] usb: remove old usb-host code + +RH-Author: Gerd Hoffmann +Message-id: <1383648860-6526-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 55374 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] usb: remove old usb-host code +Bugzilla: 1001144 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +The usb-host code has been rewritten for qemu 1.5 to use libusb, +the old code has been left in as temporary fallback. Now we are +two releases further out, targeting the 1.7 release. No major +issues with the new code poped up until now. Time to remove it +from tre tree. Should we ever need it again for some reason -- +git has a copy for us in the history. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b5613fdcb0e03d47852582c252942512f050b5b6) + +Conflicts: + configure + hw/usb/host-linux.c +--- + configure | 24 +- + hw/usb/host-bsd.c | 639 ----------------- + hw/usb/host-linux.c | 1910 --------------------------------------------------- + 3 files changed, 4 insertions(+), 2569 deletions(-) + delete mode 100644 hw/usb/host-bsd.c + delete mode 100644 hw/usb/host-linux.c + +Signed-off-by: Miroslav Rezanina +--- + configure | 24 +- + hw/usb/host-bsd.c | 639 ----------------- + hw/usb/host-linux.c | 1910 --------------------------------------------------- + 3 files changed, 4 insertions(+), 2569 deletions(-) + delete mode 100644 hw/usb/host-bsd.c + delete mode 100644 hw/usb/host-linux.c + +diff --git a/configure b/configure +index df587d7..4830f7e 100755 +--- a/configure ++++ b/configure +@@ -538,7 +538,6 @@ Haiku) + audio_possible_drivers="oss alsa sdl esd pa" + linux="yes" + linux_user="yes" +- usb="linux" + kvm="yes" + vhost_net="yes" + vhost_scsi="yes" +@@ -551,7 +550,6 @@ esac + + if [ "$bsd" = "yes" ] ; then + if [ "$darwin" != "yes" ] ; then +- usb="bsd" + bsd_user="yes" + fi + fi +@@ -3036,7 +3034,6 @@ fi + if test "$libusb" != "no" ; then + if $pkg_config --atleast-version=1.0.13 libusb-1.0 >/dev/null 2>&1 ; then + libusb="yes" +- usb="libusb" + libusb_cflags=$($pkg_config --cflags libusb-1.0 2>/dev/null) + libusb_libs=$($pkg_config --libs libusb-1.0 2>/dev/null) + QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags" +@@ -3944,24 +3941,11 @@ if test "$virtio_blk_data_plane" = "yes" ; then + fi + + # USB host support +-case "$usb" in +-linux) +- echo "HOST_USB=linux legacy" >> $config_host_mak +-;; +-bsd) +- echo "HOST_USB=bsd" >> $config_host_mak +-;; +-libusb) +- if test "$linux" = "yes"; then +- echo "HOST_USB=libusb linux legacy" >> $config_host_mak +- else +- echo "HOST_USB=libusb legacy" >> $config_host_mak +- fi +-;; +-*) ++if test "$libusb" = "yes"; then ++ echo "HOST_USB=libusb legacy" >> $config_host_mak ++else + echo "HOST_USB=stub" >> $config_host_mak +-;; +-esac ++fi + + # TPM passthrough support? + if test "$tpm" = "yes"; then +diff --git a/hw/usb/host-bsd.c b/hw/usb/host-bsd.c +deleted file mode 100644 +index 39f2281..0000000 +--- a/hw/usb/host-bsd.c ++++ /dev/null +@@ -1,639 +0,0 @@ +-/* +- * BSD host USB redirector +- * +- * Copyright (c) 2006 Lonnie Mendez +- * Portions of code and concepts borrowed from +- * usb-linux.c and libusb's bsd.c and are copyright their respective owners. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a copy +- * of this software and associated documentation files (the "Software"), to deal +- * in the Software without restriction, including without limitation the rights +- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +- * copies of the Software, and to permit persons to whom the Software is +- * furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +- * THE SOFTWARE. +- */ +- +-#include "qemu-common.h" +-#include "monitor/monitor.h" +-#include "hw/usb.h" +- +-/* usb.h declares these */ +-#undef USB_SPEED_HIGH +-#undef USB_SPEED_FULL +-#undef USB_SPEED_LOW +- +-#include +-#ifndef __DragonFly__ +-#include +-#else +-#include +-#endif +- +-/* This value has maximum potential at 16. +- * You should also set hw.usb.debug to gain +- * more detailed view. +- */ +-//#define DEBUG +-#define UGEN_DEBUG_LEVEL 0 +- +- +-typedef int USBScanFunc(void *opaque, int bus_num, int addr, int class_id, +- int vendor_id, int product_id, +- const char *product_name, int speed); +-static int usb_host_find_device(int *pbus_num, int *paddr, +- const char *devname); +- +-typedef struct USBHostDevice { +- USBDevice dev; +- int ep_fd[USB_MAX_ENDPOINTS]; +- int devfd; +- char devpath[32]; +-} USBHostDevice; +- +- +-static int ensure_ep_open(USBHostDevice *dev, int ep, int mode) +-{ +- char buf[32]; +- int fd; +- +- /* Get the address for this endpoint */ +- ep = UE_GET_ADDR(ep); +- +- if (dev->ep_fd[ep] < 0) { +-#if defined(__FreeBSD__) || defined(__DragonFly__) +- snprintf(buf, sizeof(buf) - 1, "%s.%d", dev->devpath, ep); +-#else +- snprintf(buf, sizeof(buf) - 1, "%s.%02d", dev->devpath, ep); +-#endif +- /* Try to open it O_RDWR first for those devices which have in and out +- * endpoints with the same address (eg 0x02 and 0x82) +- */ +- fd = open(buf, O_RDWR); +- if (fd < 0 && errno == ENXIO) +- fd = open(buf, mode); +- if (fd < 0) { +-#ifdef DEBUG +- printf("ensure_ep_open: failed to open device endpoint %s: %s\n", +- buf, strerror(errno)); +-#endif +- } +- dev->ep_fd[ep] = fd; +- } +- +- return dev->ep_fd[ep]; +-} +- +-static void ensure_eps_closed(USBHostDevice *dev) +-{ +- int epnum = 1; +- +- if (!dev) +- return; +- +- while (epnum < USB_MAX_ENDPOINTS) { +- if (dev->ep_fd[epnum] >= 0) { +- close(dev->ep_fd[epnum]); +- dev->ep_fd[epnum] = -1; +- } +- epnum++; +- } +-} +- +-static void usb_host_handle_reset(USBDevice *dev) +-{ +-#if 0 +- USBHostDevice *s = (USBHostDevice *)dev; +-#endif +-} +- +-/* XXX: +- * -check device states against transfer requests +- * and return appropriate response +- */ +-static void usb_host_handle_control(USBDevice *dev, +- USBPacket *p, +- int request, +- int value, +- int index, +- int length, +- uint8_t *data) +-{ +- USBHostDevice *s = (USBHostDevice *)dev; +- struct usb_ctl_request req; +- struct usb_alt_interface aiface; +- int ret, timeout = 50; +- +- if ((request >> 8) == UT_WRITE_DEVICE && +- (request & 0xff) == UR_SET_ADDRESS) { +- +- /* specific SET_ADDRESS support */ +- dev->addr = value; +- } else if ((request >> 8) == UT_WRITE_DEVICE && +- (request & 0xff) == UR_SET_CONFIG) { +- +- ensure_eps_closed(s); /* can't do this without all eps closed */ +- +- ret = ioctl(s->devfd, USB_SET_CONFIG, &value); +- if (ret < 0) { +-#ifdef DEBUG +- printf("handle_control: failed to set configuration - %s\n", +- strerror(errno)); +-#endif +- p->status = USB_RET_STALL; +- } +- } else if ((request >> 8) == UT_WRITE_INTERFACE && +- (request & 0xff) == UR_SET_INTERFACE) { +- +- aiface.uai_interface_index = index; +- aiface.uai_alt_no = value; +- +- ensure_eps_closed(s); /* can't do this without all eps closed */ +- ret = ioctl(s->devfd, USB_SET_ALTINTERFACE, &aiface); +- if (ret < 0) { +-#ifdef DEBUG +- printf("handle_control: failed to set alternate interface - %s\n", +- strerror(errno)); +-#endif +- p->status = USB_RET_STALL; +- } +- } else { +- req.ucr_request.bmRequestType = request >> 8; +- req.ucr_request.bRequest = request & 0xff; +- USETW(req.ucr_request.wValue, value); +- USETW(req.ucr_request.wIndex, index); +- USETW(req.ucr_request.wLength, length); +- req.ucr_data = data; +- req.ucr_flags = USBD_SHORT_XFER_OK; +- +- ret = ioctl(s->devfd, USB_SET_TIMEOUT, &timeout); +-#if defined(__NetBSD__) || defined(__OpenBSD__) +- if (ret < 0 && errno != EINVAL) { +-#else +- if (ret < 0) { +-#endif +-#ifdef DEBUG +- printf("handle_control: setting timeout failed - %s\n", +- strerror(errno)); +-#endif +- } +- +- ret = ioctl(s->devfd, USB_DO_REQUEST, &req); +- /* ugen returns EIO for usbd_do_request_ no matter what +- * happens with the transfer */ +- if (ret < 0) { +-#ifdef DEBUG +- printf("handle_control: error after request - %s\n", +- strerror(errno)); +-#endif +- p->status = USB_RET_NAK; /* STALL */ +- } else { +- p->actual_length = req.ucr_actlen; +- } +- } +-} +- +-static void usb_host_handle_data(USBDevice *dev, USBPacket *p) +-{ +- USBHostDevice *s = (USBHostDevice *)dev; +- int ret, fd, mode; +- int one = 1, shortpacket = 0, timeout = 50; +- sigset_t new_mask, old_mask; +- uint8_t devep = p->ep->nr; +- +- /* protect data transfers from SIGALRM signal */ +- sigemptyset(&new_mask); +- sigaddset(&new_mask, SIGALRM); +- sigprocmask(SIG_BLOCK, &new_mask, &old_mask); +- +- if (p->pid == USB_TOKEN_IN) { +- devep |= 0x80; +- mode = O_RDONLY; +- shortpacket = 1; +- } else { +- mode = O_WRONLY; +- } +- +- fd = ensure_ep_open(s, devep, mode); +- if (fd < 0) { +- sigprocmask(SIG_SETMASK, &old_mask, NULL); +- p->status = USB_RET_NODEV; +- return; +- } +- +- if (ioctl(fd, USB_SET_TIMEOUT, &timeout) < 0) { +-#ifdef DEBUG +- printf("handle_data: failed to set timeout - %s\n", +- strerror(errno)); +-#endif +- } +- +- if (shortpacket) { +- if (ioctl(fd, USB_SET_SHORT_XFER, &one) < 0) { +-#ifdef DEBUG +- printf("handle_data: failed to set short xfer mode - %s\n", +- strerror(errno)); +-#endif +- sigprocmask(SIG_SETMASK, &old_mask, NULL); +- } +- } +- +- if (p->pid == USB_TOKEN_IN) +- ret = readv(fd, p->iov.iov, p->iov.niov); +- else +- ret = writev(fd, p->iov.iov, p->iov.niov); +- +- sigprocmask(SIG_SETMASK, &old_mask, NULL); +- +- if (ret < 0) { +-#ifdef DEBUG +- printf("handle_data: error after %s data - %s\n", +- pid == USB_TOKEN_IN ? "reading" : "writing", strerror(errno)); +-#endif +- switch(errno) { +- case ETIMEDOUT: +- case EINTR: +- p->status = USB_RET_NAK; +- break; +- default: +- p->status = USB_RET_STALL; +- } +- } else { +- p->actual_length = ret; +- } +-} +- +-static void usb_host_handle_destroy(USBDevice *opaque) +-{ +- USBHostDevice *s = (USBHostDevice *)opaque; +- int i; +- +- for (i = 0; i < USB_MAX_ENDPOINTS; i++) +- if (s->ep_fd[i] >= 0) +- close(s->ep_fd[i]); +- +- if (s->devfd < 0) +- return; +- +- close(s->devfd); +- +- g_free(s); +-} +- +-static int usb_host_initfn(USBDevice *dev) +-{ +- dev->flags |= (1 << USB_DEV_FLAG_IS_HOST); +- return 0; +-} +- +-USBDevice *usb_host_device_open(USBBus *guest_bus, const char *devname) +-{ +- struct usb_device_info bus_info, dev_info; +- USBDevice *d = NULL, *ret = NULL; +- USBHostDevice *dev; +- char ctlpath[PATH_MAX + 1]; +- char buspath[PATH_MAX + 1]; +- int bfd, dfd, bus, address, i; +- int ugendebug = UGEN_DEBUG_LEVEL; +- +- if (usb_host_find_device(&bus, &address, devname) < 0) { +- goto fail; +- } +- +- snprintf(buspath, PATH_MAX, "/dev/usb%d", bus); +- +- bfd = open(buspath, O_RDWR); +- if (bfd < 0) { +-#ifdef DEBUG +- printf("usb_host_device_open: failed to open usb bus - %s\n", +- strerror(errno)); +-#endif +- goto fail; +- } +- +- bus_info.udi_addr = address; +- if (ioctl(bfd, USB_DEVICEINFO, &bus_info) < 0) { +-#ifdef DEBUG +- printf("usb_host_device_open: failed to grab bus information - %s\n", +- strerror(errno)); +-#endif +- goto fail_bfd; +- } +- +-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +- snprintf(ctlpath, PATH_MAX, "/dev/%s", bus_info.udi_devnames[0]); +-#else +- snprintf(ctlpath, PATH_MAX, "/dev/%s.00", bus_info.udi_devnames[0]); +-#endif +- +- dfd = open(ctlpath, O_RDWR); +- if (dfd < 0) { +- dfd = open(ctlpath, O_RDONLY); +- if (dfd < 0) { +-#ifdef DEBUG +- printf("usb_host_device_open: failed to open usb device %s - %s\n", +- ctlpath, strerror(errno)); +-#endif +- } +- goto fail_dfd; +- } +- +- if (ioctl(dfd, USB_GET_DEVICEINFO, &dev_info) < 0) { +-#ifdef DEBUG +- printf("usb_host_device_open: failed to grab device info - %s\n", +- strerror(errno)); +-#endif +- goto fail_dfd; +- } +- +- d = usb_create(guest_bus, "usb-host"); +- dev = DO_UPCAST(USBHostDevice, dev, d); +- +- if (dev_info.udi_speed == 1) { +- dev->dev.speed = USB_SPEED_LOW - 1; +- dev->dev.speedmask = USB_SPEED_MASK_LOW; +- } else { +- dev->dev.speed = USB_SPEED_FULL - 1; +- dev->dev.speedmask = USB_SPEED_MASK_FULL; +- } +- +- if (strncmp(dev_info.udi_product, "product", 7) != 0) { +- pstrcpy(dev->dev.product_desc, sizeof(dev->dev.product_desc), +- dev_info.udi_product); +- } else { +- snprintf(dev->dev.product_desc, sizeof(dev->dev.product_desc), +- "host:%s", devname); +- } +- +- pstrcpy(dev->devpath, sizeof(dev->devpath), "/dev/"); +- pstrcat(dev->devpath, sizeof(dev->devpath), dev_info.udi_devnames[0]); +- +- /* Mark the endpoints as not yet open */ +- for (i = 0; i < USB_MAX_ENDPOINTS; i++) { +- dev->ep_fd[i] = -1; +- } +- +- ioctl(dfd, USB_SETDEBUG, &ugendebug); +- +- ret = (USBDevice *)dev; +- +-fail_dfd: +- close(dfd); +-fail_bfd: +- close(bfd); +-fail: +- return ret; +-} +- +-static void usb_host_class_initfn(ObjectClass *klass, void *data) +-{ +- USBDeviceClass *uc = USB_DEVICE_CLASS(klass); +- +- uc->product_desc = "USB Host Device"; +- uc->init = usb_host_initfn; +- uc->handle_reset = usb_host_handle_reset; +- uc->handle_control = usb_host_handle_control; +- uc->handle_data = usb_host_handle_data; +- uc->handle_destroy = usb_host_handle_destroy; +-} +- +-static const TypeInfo usb_host_dev_info = { +- .name = "usb-host", +- .parent = TYPE_USB_DEVICE, +- .instance_size = sizeof(USBHostDevice), +- .class_init = usb_host_class_initfn, +-}; +- +-static void usb_host_register_types(void) +-{ +- type_register_static(&usb_host_dev_info); +-} +- +-type_init(usb_host_register_types) +- +-static int usb_host_scan(void *opaque, USBScanFunc *func) +-{ +- struct usb_device_info bus_info; +- struct usb_device_info dev_info; +- uint16_t vendor_id, product_id, class_id, speed; +- int bfd, dfd, bus, address; +- char busbuf[20], devbuf[20], product_name[256]; +- int ret = 0; +- +- for (bus = 0; bus < 10; bus++) { +- +- snprintf(busbuf, sizeof(busbuf) - 1, "/dev/usb%d", bus); +- bfd = open(busbuf, O_RDWR); +- if (bfd < 0) +- continue; +- +- for (address = 1; address < 127; address++) { +- +- bus_info.udi_addr = address; +- if (ioctl(bfd, USB_DEVICEINFO, &bus_info) < 0) +- continue; +- +- /* only list devices that can be used by generic layer */ +- if (strncmp(bus_info.udi_devnames[0], "ugen", 4) != 0) +- continue; +- +-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +- snprintf(devbuf, sizeof(devbuf) - 1, "/dev/%s", bus_info.udi_devnames[0]); +-#else +- snprintf(devbuf, sizeof(devbuf) - 1, "/dev/%s.00", bus_info.udi_devnames[0]); +-#endif +- +- dfd = open(devbuf, O_RDONLY); +- if (dfd < 0) { +-#ifdef DEBUG +- printf("usb_host_scan: couldn't open device %s - %s\n", devbuf, +- strerror(errno)); +-#endif +- continue; +- } +- +- if (ioctl(dfd, USB_GET_DEVICEINFO, &dev_info) < 0) +- printf("usb_host_scan: couldn't get device information for %s - %s\n", +- devbuf, strerror(errno)); +- +- /* XXX: might need to fixup endianness of word values before copying over */ +- +- vendor_id = dev_info.udi_vendorNo; +- product_id = dev_info.udi_productNo; +- class_id = dev_info.udi_class; +- speed = dev_info.udi_speed; +- +- if (strncmp(dev_info.udi_product, "product", 7) != 0) +- pstrcpy(product_name, sizeof(product_name), +- dev_info.udi_product); +- else +- product_name[0] = '\0'; +- +- ret = func(opaque, bus, address, class_id, vendor_id, +- product_id, product_name, speed); +- +- close(dfd); +- +- if (ret) +- goto the_end; +- } +- +- close(bfd); +- } +- +-the_end: +- return ret; +-} +- +-typedef struct FindDeviceState { +- int vendor_id; +- int product_id; +- int bus_num; +- int addr; +-} FindDeviceState; +- +-static int usb_host_find_device_scan(void *opaque, int bus_num, int addr, +- int class_id, +- int vendor_id, int product_id, +- const char *product_name, int speed) +-{ +- FindDeviceState *s = opaque; +- if (vendor_id == s->vendor_id && +- product_id == s->product_id) { +- s->bus_num = bus_num; +- s->addr = addr; +- return 1; +- } else { +- return 0; +- } +-} +- +- +-/* the syntax is : +- 'bus.addr' (decimal numbers) or +- 'vendor_id:product_id' (hexa numbers) */ +-static int usb_host_find_device(int *pbus_num, int *paddr, +- const char *devname) +-{ +- const char *p; +- int ret; +- FindDeviceState fs; +- +- p = strchr(devname, '.'); +- if (p) { +- *pbus_num = strtoul(devname, NULL, 0); +- *paddr = strtoul(p + 1, NULL, 0); +- return 0; +- } +- p = strchr(devname, ':'); +- if (p) { +- fs.vendor_id = strtoul(devname, NULL, 16); +- fs.product_id = strtoul(p + 1, NULL, 16); +- ret = usb_host_scan(&fs, usb_host_find_device_scan); +- if (ret) { +- *pbus_num = fs.bus_num; +- *paddr = fs.addr; +- return 0; +- } +- } +- return -1; +-} +- +-/**********************/ +-/* USB host device info */ +- +-struct usb_class_info { +- int class; +- const char *class_name; +-}; +- +-static const struct usb_class_info usb_class_info[] = { +- { USB_CLASS_AUDIO, "Audio"}, +- { USB_CLASS_COMM, "Communication"}, +- { USB_CLASS_HID, "HID"}, +- { USB_CLASS_HUB, "Hub" }, +- { USB_CLASS_PHYSICAL, "Physical" }, +- { USB_CLASS_PRINTER, "Printer" }, +- { USB_CLASS_MASS_STORAGE, "Storage" }, +- { USB_CLASS_CDC_DATA, "Data" }, +- { USB_CLASS_APP_SPEC, "Application Specific" }, +- { USB_CLASS_VENDOR_SPEC, "Vendor Specific" }, +- { USB_CLASS_STILL_IMAGE, "Still Image" }, +- { USB_CLASS_CSCID, "Smart Card" }, +- { USB_CLASS_CONTENT_SEC, "Content Security" }, +- { -1, NULL } +-}; +- +-static const char *usb_class_str(uint8_t class) +-{ +- const struct usb_class_info *p; +- for (p = usb_class_info; p->class != -1; p++) { +- if (p->class == class) +- break; +- } +- return p->class_name; +-} +- +-static void usb_info_device(Monitor *mon, int bus_num, int addr, int class_id, +- int vendor_id, int product_id, +- const char *product_name, +- int speed) +-{ +- const char *class_str, *speed_str; +- +- switch(speed) { +- case USB_SPEED_LOW: +- speed_str = "1.5"; +- break; +- case USB_SPEED_FULL: +- speed_str = "12"; +- break; +- case USB_SPEED_HIGH: +- speed_str = "480"; +- break; +- default: +- speed_str = "?"; +- break; +- } +- +- monitor_printf(mon, " Device %d.%d, speed %s Mb/s\n", +- bus_num, addr, speed_str); +- class_str = usb_class_str(class_id); +- if (class_str) +- monitor_printf(mon, " %s:", class_str); +- else +- monitor_printf(mon, " Class %02x:", class_id); +- monitor_printf(mon, " USB device %04x:%04x", vendor_id, product_id); +- if (product_name[0] != '\0') +- monitor_printf(mon, ", %s", product_name); +- monitor_printf(mon, "\n"); +-} +- +-static int usb_host_info_device(void *opaque, +- int bus_num, int addr, +- int class_id, +- int vendor_id, int product_id, +- const char *product_name, +- int speed) +-{ +- Monitor *mon = opaque; +- +- usb_info_device(mon, bus_num, addr, class_id, vendor_id, product_id, +- product_name, speed); +- return 0; +-} +- +-void usb_host_info(Monitor *mon, const QDict *qdict) +-{ +- usb_host_scan(mon, usb_host_info_device); +-} +diff --git a/hw/usb/host-linux.c b/hw/usb/host-linux.c +deleted file mode 100644 +index ca09a89..0000000 +--- a/hw/usb/host-linux.c ++++ /dev/null +@@ -1,1910 +0,0 @@ +-/* +- * Linux host USB redirector +- * +- * Copyright (c) 2005 Fabrice Bellard +- * +- * Copyright (c) 2008 Max Krasnyansky +- * Support for host device auto connect & disconnect +- * Major rewrite to support fully async operation +- * +- * Copyright 2008 TJ +- * Added flexible support for /dev/bus/usb /sys/bus/usb/devices in addition +- * to the legacy /proc/bus/usb USB device discovery and handling +- * +- * Permission is hereby granted, free of charge, to any person obtaining a copy +- * of this software and associated documentation files (the "Software"), to deal +- * in the Software without restriction, including without limitation the rights +- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +- * copies of the Software, and to permit persons to whom the Software is +- * furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +- * THE SOFTWARE. +- */ +- +-#include "qemu-common.h" +-#include "qemu/timer.h" +-#include "monitor/monitor.h" +-#include "sysemu/sysemu.h" +-#include "trace.h" +- +-#include +-#include +- +-#include +-#include +-#include "hw/usb.h" +-#include "hw/usb/desc.h" +-#include "hw/usb/host.h" +- +-#ifdef CONFIG_USB_LIBUSB +-# define DEVNAME "usb-host-linux" +-#else +-# define DEVNAME "usb-host" +-#endif +- +-/* We redefine it to avoid version problems */ +-struct usb_ctrltransfer { +- uint8_t bRequestType; +- uint8_t bRequest; +- uint16_t wValue; +- uint16_t wIndex; +- uint16_t wLength; +- uint32_t timeout; +- void *data; +-}; +- +-typedef int USBScanFunc(void *opaque, int bus_num, int addr, const char *port, +- int class_id, int vendor_id, int product_id, +- const char *product_name, int speed); +- +-//#define DEBUG +- +-#ifdef DEBUG +-#define DPRINTF printf +-#else +-#define DPRINTF(...) +-#endif +- +-#define PRODUCT_NAME_SZ 32 +-#define MAX_PORTLEN 16 +- +-/* endpoint association data */ +-#define ISO_FRAME_DESC_PER_URB 32 +- +-/* devio.c limits single requests to 16k */ +-#define MAX_USBFS_BUFFER_SIZE 16384 +- +-typedef struct AsyncURB AsyncURB; +- +-struct endp_data { +- uint8_t halted; +- uint8_t iso_started; +- AsyncURB *iso_urb; +- int iso_urb_idx; +- int iso_buffer_used; +- int inflight; +-}; +- +-enum USBHostDeviceOptions { +- USB_HOST_OPT_PIPELINE, +-}; +- +-typedef struct USBHostDevice { +- USBDevice dev; +- int fd; +- int hub_fd; +- int hub_port; +- +- uint8_t descr[8192]; +- int descr_len; +- int closing; +- uint32_t iso_urb_count; +- uint32_t options; +- Notifier exit; +- QEMUBH *bh; +- +- struct endp_data ep_in[USB_MAX_ENDPOINTS]; +- struct endp_data ep_out[USB_MAX_ENDPOINTS]; +- QLIST_HEAD(, AsyncURB) aurbs; +- +- /* Host side address */ +- int bus_num; +- int addr; +- char port[MAX_PORTLEN]; +- struct USBAutoFilter match; +- int32_t bootindex; +- int seen, errcount; +- +- QTAILQ_ENTRY(USBHostDevice) next; +-} USBHostDevice; +- +-static QTAILQ_HEAD(, USBHostDevice) hostdevs = QTAILQ_HEAD_INITIALIZER(hostdevs); +- +-static int usb_host_close(USBHostDevice *dev); +-static void usb_host_auto_check(void *unused); +-static int usb_host_read_file(char *line, size_t line_size, +- const char *device_file, const char *device_name); +-static void usb_linux_update_endp_table(USBHostDevice *s); +- +-static int usb_host_usbfs_type(USBHostDevice *s, USBPacket *p) +-{ +- static const int usbfs[] = { +- [USB_ENDPOINT_XFER_CONTROL] = USBDEVFS_URB_TYPE_CONTROL, +- [USB_ENDPOINT_XFER_ISOC] = USBDEVFS_URB_TYPE_ISO, +- [USB_ENDPOINT_XFER_BULK] = USBDEVFS_URB_TYPE_BULK, +- [USB_ENDPOINT_XFER_INT] = USBDEVFS_URB_TYPE_INTERRUPT, +- }; +- uint8_t type = p->ep->type; +- assert(type < ARRAY_SIZE(usbfs)); +- return usbfs[type]; +-} +- +-static int usb_host_do_reset(USBHostDevice *dev) +-{ +- struct timeval s, e; +- uint32_t usecs; +- int ret; +- +- gettimeofday(&s, NULL); +- ret = ioctl(dev->fd, USBDEVFS_RESET); +- gettimeofday(&e, NULL); +- usecs = (e.tv_sec - s.tv_sec) * 1000000; +- usecs += e.tv_usec - s.tv_usec; +- if (usecs > 1000000) { +- /* more than a second, something is fishy, broken usb device? */ +- fprintf(stderr, "husb: device %d:%d reset took %d.%06d seconds\n", +- dev->bus_num, dev->addr, usecs / 1000000, usecs % 1000000); +- } +- return ret; +-} +- +-static struct endp_data *get_endp(USBHostDevice *s, int pid, int ep) +-{ +- struct endp_data *eps = pid == USB_TOKEN_IN ? s->ep_in : s->ep_out; +- assert(pid == USB_TOKEN_IN || pid == USB_TOKEN_OUT); +- assert(ep > 0 && ep <= USB_MAX_ENDPOINTS); +- return eps + ep - 1; +-} +- +-static int is_isoc(USBHostDevice *s, int pid, int ep) +-{ +- return usb_ep_get_type(&s->dev, pid, ep) == USB_ENDPOINT_XFER_ISOC; +-} +- +-static int is_valid(USBHostDevice *s, int pid, int ep) +-{ +- return usb_ep_get_type(&s->dev, pid, ep) != USB_ENDPOINT_XFER_INVALID; +-} +- +-static int is_halted(USBHostDevice *s, int pid, int ep) +-{ +- return get_endp(s, pid, ep)->halted; +-} +- +-static void clear_halt(USBHostDevice *s, int pid, int ep) +-{ +- trace_usb_host_ep_clear_halt(s->bus_num, s->addr, ep); +- get_endp(s, pid, ep)->halted = 0; +-} +- +-static void set_halt(USBHostDevice *s, int pid, int ep) +-{ +- if (ep != 0) { +- trace_usb_host_ep_set_halt(s->bus_num, s->addr, ep); +- get_endp(s, pid, ep)->halted = 1; +- } +-} +- +-static int is_iso_started(USBHostDevice *s, int pid, int ep) +-{ +- return get_endp(s, pid, ep)->iso_started; +-} +- +-static void clear_iso_started(USBHostDevice *s, int pid, int ep) +-{ +- trace_usb_host_iso_stop(s->bus_num, s->addr, ep); +- get_endp(s, pid, ep)->iso_started = 0; +-} +- +-static void set_iso_started(USBHostDevice *s, int pid, int ep) +-{ +- struct endp_data *e = get_endp(s, pid, ep); +- +- trace_usb_host_iso_start(s->bus_num, s->addr, ep); +- if (!e->iso_started) { +- e->iso_started = 1; +- e->inflight = 0; +- } +-} +- +-static int change_iso_inflight(USBHostDevice *s, int pid, int ep, int value) +-{ +- struct endp_data *e = get_endp(s, pid, ep); +- +- e->inflight += value; +- return e->inflight; +-} +- +-static void set_iso_urb(USBHostDevice *s, int pid, int ep, AsyncURB *iso_urb) +-{ +- get_endp(s, pid, ep)->iso_urb = iso_urb; +-} +- +-static AsyncURB *get_iso_urb(USBHostDevice *s, int pid, int ep) +-{ +- return get_endp(s, pid, ep)->iso_urb; +-} +- +-static void set_iso_urb_idx(USBHostDevice *s, int pid, int ep, int i) +-{ +- get_endp(s, pid, ep)->iso_urb_idx = i; +-} +- +-static int get_iso_urb_idx(USBHostDevice *s, int pid, int ep) +-{ +- return get_endp(s, pid, ep)->iso_urb_idx; +-} +- +-static void set_iso_buffer_used(USBHostDevice *s, int pid, int ep, int i) +-{ +- get_endp(s, pid, ep)->iso_buffer_used = i; +-} +- +-static int get_iso_buffer_used(USBHostDevice *s, int pid, int ep) +-{ +- return get_endp(s, pid, ep)->iso_buffer_used; +-} +- +-/* +- * Async URB state. +- * We always allocate iso packet descriptors even for bulk transfers +- * to simplify allocation and casts. +- */ +-struct AsyncURB +-{ +- struct usbdevfs_urb urb; +- struct usbdevfs_iso_packet_desc isocpd[ISO_FRAME_DESC_PER_URB]; +- USBHostDevice *hdev; +- QLIST_ENTRY(AsyncURB) next; +- +- /* For regular async urbs */ +- USBPacket *packet; +- int more; /* large transfer, more urbs follow */ +- +- /* For buffered iso handling */ +- int iso_frame_idx; /* -1 means in flight */ +-}; +- +-static AsyncURB *async_alloc(USBHostDevice *s) +-{ +- AsyncURB *aurb = g_malloc0(sizeof(AsyncURB)); +- aurb->hdev = s; +- QLIST_INSERT_HEAD(&s->aurbs, aurb, next); +- return aurb; +-} +- +-static void async_free(AsyncURB *aurb) +-{ +- QLIST_REMOVE(aurb, next); +- g_free(aurb); +-} +- +-static void do_disconnect(USBHostDevice *s) +-{ +- usb_host_close(s); +- usb_host_auto_check(NULL); +-} +- +-static void async_complete(void *opaque) +-{ +- USBHostDevice *s = opaque; +- AsyncURB *aurb; +- int urbs = 0; +- +- while (1) { +- USBPacket *p; +- +- int r = ioctl(s->fd, USBDEVFS_REAPURBNDELAY, &aurb); +- if (r < 0) { +- if (errno == EAGAIN) { +- if (urbs > 2) { +- /* indicates possible latency issues */ +- trace_usb_host_iso_many_urbs(s->bus_num, s->addr, urbs); +- } +- return; +- } +- if (errno == ENODEV) { +- if (!s->closing) { +- trace_usb_host_disconnect(s->bus_num, s->addr); +- do_disconnect(s); +- } +- return; +- } +- +- perror("USBDEVFS_REAPURBNDELAY"); +- return; +- } +- +- DPRINTF("husb: async completed. aurb %p status %d alen %d\n", +- aurb, aurb->urb.status, aurb->urb.actual_length); +- +- /* If this is a buffered iso urb mark it as complete and don't do +- anything else (it is handled further in usb_host_handle_iso_data) */ +- if (aurb->iso_frame_idx == -1) { +- int inflight; +- int pid = (aurb->urb.endpoint & USB_DIR_IN) ? +- USB_TOKEN_IN : USB_TOKEN_OUT; +- int ep = aurb->urb.endpoint & 0xf; +- if (aurb->urb.status == -EPIPE) { +- set_halt(s, pid, ep); +- } +- aurb->iso_frame_idx = 0; +- urbs++; +- inflight = change_iso_inflight(s, pid, ep, -1); +- if (inflight == 0 && is_iso_started(s, pid, ep)) { +- /* can be latency issues, or simply end of stream */ +- trace_usb_host_iso_out_of_bufs(s->bus_num, s->addr, ep); +- } +- continue; +- } +- +- p = aurb->packet; +- trace_usb_host_urb_complete(s->bus_num, s->addr, aurb, aurb->urb.status, +- aurb->urb.actual_length, aurb->more); +- +- if (p) { +- switch (aurb->urb.status) { +- case 0: +- p->actual_length += aurb->urb.actual_length; +- if (!aurb->more) { +- /* Clear previous ASYNC status */ +- p->status = USB_RET_SUCCESS; +- } +- break; +- +- case -EPIPE: +- set_halt(s, p->pid, p->ep->nr); +- p->status = USB_RET_STALL; +- break; +- +- case -EOVERFLOW: +- p->status = USB_RET_BABBLE; +- break; +- +- default: +- p->status = USB_RET_IOERROR; +- break; +- } +- +- if (aurb->urb.type == USBDEVFS_URB_TYPE_CONTROL) { +- trace_usb_host_req_complete(s->bus_num, s->addr, p, +- p->status, aurb->urb.actual_length); +- usb_generic_async_ctrl_complete(&s->dev, p); +- } else if (!aurb->more) { +- trace_usb_host_req_complete(s->bus_num, s->addr, p, +- p->status, aurb->urb.actual_length); +- usb_packet_complete(&s->dev, p); +- } +- } +- +- async_free(aurb); +- } +-} +- +-static void usb_host_async_cancel(USBDevice *dev, USBPacket *p) +-{ +- USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev); +- AsyncURB *aurb; +- +- trace_usb_host_req_canceled(s->bus_num, s->addr, p); +- +- QLIST_FOREACH(aurb, &s->aurbs, next) { +- if (p != aurb->packet) { +- continue; +- } +- +- trace_usb_host_urb_canceled(s->bus_num, s->addr, aurb); +- +- /* Mark it as dead (see async_complete above) */ +- aurb->packet = NULL; +- +- int r = ioctl(s->fd, USBDEVFS_DISCARDURB, aurb); +- if (r < 0) { +- DPRINTF("husb: async. discard urb failed errno %d\n", errno); +- } +- } +-} +- +-static int usb_host_open_device(int bus, int addr) +-{ +- const char *usbfs = NULL; +- char filename[32]; +- struct stat st; +- int fd, rc; +- +- rc = stat("/dev/bus/usb", &st); +- if (rc == 0 && S_ISDIR(st.st_mode)) { +- /* udev-created device nodes available */ +- usbfs = "/dev/bus/usb"; +- } else { +- /* fallback: usbfs mounted below /proc */ +- usbfs = "/proc/bus/usb"; +- } +- +- snprintf(filename, sizeof(filename), "%s/%03d/%03d", +- usbfs, bus, addr); +- fd = open(filename, O_RDWR | O_NONBLOCK); +- if (fd < 0) { +- fprintf(stderr, "husb: open %s: %s\n", filename, strerror(errno)); +- } +- return fd; +-} +- +-static int usb_host_claim_port(USBHostDevice *s) +-{ +-#ifdef USBDEVFS_CLAIM_PORT +- char *h, hub_name[64], line[1024]; +- int hub_addr, ret; +- +- snprintf(hub_name, sizeof(hub_name), "%d-%s", +- s->match.bus_num, s->match.port); +- +- /* try strip off last ".$portnr" to get hub */ +- h = strrchr(hub_name, '.'); +- if (h != NULL) { +- s->hub_port = atoi(h+1); +- *h = '\0'; +- } else { +- /* no dot in there -> it is the root hub */ +- snprintf(hub_name, sizeof(hub_name), "usb%d", +- s->match.bus_num); +- s->hub_port = atoi(s->match.port); +- } +- +- if (!usb_host_read_file(line, sizeof(line), "devnum", +- hub_name)) { +- return -1; +- } +- if (sscanf(line, "%d", &hub_addr) != 1) { +- return -1; +- } +- +- s->hub_fd = usb_host_open_device(s->match.bus_num, hub_addr); +- if (s->hub_fd < 0) { +- return -1; +- } +- +- ret = ioctl(s->hub_fd, USBDEVFS_CLAIM_PORT, &s->hub_port); +- if (ret < 0) { +- close(s->hub_fd); +- s->hub_fd = -1; +- return -1; +- } +- +- trace_usb_host_claim_port(s->match.bus_num, hub_addr, s->hub_port); +- return 0; +-#else +- return -1; +-#endif +-} +- +-static void usb_host_release_port(USBHostDevice *s) +-{ +- if (s->hub_fd == -1) { +- return; +- } +-#ifdef USBDEVFS_RELEASE_PORT +- ioctl(s->hub_fd, USBDEVFS_RELEASE_PORT, &s->hub_port); +-#endif +- close(s->hub_fd); +- s->hub_fd = -1; +-} +- +-static int usb_host_disconnect_ifaces(USBHostDevice *dev, int nb_interfaces) +-{ +- /* earlier Linux 2.4 do not support that */ +-#ifdef USBDEVFS_DISCONNECT +- struct usbdevfs_ioctl ctrl; +- int ret, interface; +- +- for (interface = 0; interface < nb_interfaces; interface++) { +- ctrl.ioctl_code = USBDEVFS_DISCONNECT; +- ctrl.ifno = interface; +- ctrl.data = 0; +- ret = ioctl(dev->fd, USBDEVFS_IOCTL, &ctrl); +- if (ret < 0 && errno != ENODATA) { +- perror("USBDEVFS_DISCONNECT"); +- return -1; +- } +- } +-#endif +- return 0; +-} +- +-static int usb_linux_get_num_interfaces(USBHostDevice *s) +-{ +- char device_name[64], line[1024]; +- int num_interfaces = 0; +- +- sprintf(device_name, "%d-%s", s->bus_num, s->port); +- if (!usb_host_read_file(line, sizeof(line), "bNumInterfaces", +- device_name)) { +- return -1; +- } +- if (sscanf(line, "%d", &num_interfaces) != 1) { +- return -1; +- } +- return num_interfaces; +-} +- +-static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration) +-{ +- const char *op = NULL; +- int dev_descr_len, config_descr_len; +- int interface, nb_interfaces; +- int ret, i; +- +- for (i = 0; i < USB_MAX_INTERFACES; i++) { +- dev->dev.altsetting[i] = 0; +- } +- +- if (configuration == 0) { /* address state - ignore */ +- dev->dev.ninterfaces = 0; +- dev->dev.configuration = 0; +- return 1; +- } +- +- DPRINTF("husb: claiming interfaces. config %d\n", configuration); +- +- i = 0; +- dev_descr_len = dev->descr[0]; +- if (dev_descr_len > dev->descr_len) { +- fprintf(stderr, "husb: update iface failed. descr too short\n"); +- return 0; +- } +- +- i += dev_descr_len; +- while (i < dev->descr_len) { +- DPRINTF("husb: i is %d, descr_len is %d, dl %d, dt %d\n", +- i, dev->descr_len, +- dev->descr[i], dev->descr[i+1]); +- +- if (dev->descr[i+1] != USB_DT_CONFIG) { +- i += dev->descr[i]; +- continue; +- } +- config_descr_len = dev->descr[i]; +- +- DPRINTF("husb: config #%d need %d\n", dev->descr[i + 5], configuration); +- +- if (configuration == dev->descr[i + 5]) { +- configuration = dev->descr[i + 5]; +- break; +- } +- +- i += config_descr_len; +- } +- +- if (i >= dev->descr_len) { +- fprintf(stderr, +- "husb: update iface failed. no matching configuration\n"); +- return 0; +- } +- nb_interfaces = dev->descr[i + 4]; +- +- if (usb_host_disconnect_ifaces(dev, nb_interfaces) < 0) { +- goto fail; +- } +- +- /* XXX: only grab if all interfaces are free */ +- for (interface = 0; interface < nb_interfaces; interface++) { +- op = "USBDEVFS_CLAIMINTERFACE"; +- ret = ioctl(dev->fd, USBDEVFS_CLAIMINTERFACE, &interface); +- if (ret < 0) { +- goto fail; +- } +- } +- +- trace_usb_host_claim_interfaces(dev->bus_num, dev->addr, +- nb_interfaces, configuration); +- +- dev->dev.ninterfaces = nb_interfaces; +- dev->dev.configuration = configuration; +- return 1; +- +-fail: +- if (errno == ENODEV) { +- do_disconnect(dev); +- } +- perror(op); +- return 0; +-} +- +-static int usb_host_release_interfaces(USBHostDevice *s) +-{ +- int ret, i; +- +- trace_usb_host_release_interfaces(s->bus_num, s->addr); +- +- for (i = 0; i < s->dev.ninterfaces; i++) { +- ret = ioctl(s->fd, USBDEVFS_RELEASEINTERFACE, &i); +- if (ret < 0) { +- perror("USBDEVFS_RELEASEINTERFACE"); +- return 0; +- } +- } +- return 1; +-} +- +-static void usb_host_handle_reset(USBDevice *dev) +-{ +- USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev); +- +- trace_usb_host_reset(s->bus_num, s->addr); +- +- usb_host_do_reset(s); +- +- usb_host_claim_interfaces(s, 0); +- usb_linux_update_endp_table(s); +-} +- +-static void usb_host_handle_destroy(USBDevice *dev) +-{ +- USBHostDevice *s = (USBHostDevice *)dev; +- +- usb_host_release_port(s); +- usb_host_close(s); +- QTAILQ_REMOVE(&hostdevs, s, next); +- qemu_remove_exit_notifier(&s->exit); +-} +- +-/* iso data is special, we need to keep enough urbs in flight to make sure +- that the controller never runs out of them, otherwise the device will +- likely suffer a buffer underrun / overrun. */ +-static AsyncURB *usb_host_alloc_iso(USBHostDevice *s, int pid, uint8_t ep) +-{ +- AsyncURB *aurb; +- int i, j, len = usb_ep_get_max_packet_size(&s->dev, pid, ep); +- +- aurb = g_malloc0(s->iso_urb_count * sizeof(*aurb)); +- for (i = 0; i < s->iso_urb_count; i++) { +- aurb[i].urb.endpoint = ep; +- aurb[i].urb.buffer_length = ISO_FRAME_DESC_PER_URB * len; +- aurb[i].urb.buffer = g_malloc(aurb[i].urb.buffer_length); +- aurb[i].urb.type = USBDEVFS_URB_TYPE_ISO; +- aurb[i].urb.flags = USBDEVFS_URB_ISO_ASAP; +- aurb[i].urb.number_of_packets = ISO_FRAME_DESC_PER_URB; +- for (j = 0 ; j < ISO_FRAME_DESC_PER_URB; j++) +- aurb[i].urb.iso_frame_desc[j].length = len; +- if (pid == USB_TOKEN_IN) { +- aurb[i].urb.endpoint |= 0x80; +- /* Mark as fully consumed (idle) */ +- aurb[i].iso_frame_idx = ISO_FRAME_DESC_PER_URB; +- } +- } +- set_iso_urb(s, pid, ep, aurb); +- +- return aurb; +-} +- +-static void usb_host_stop_n_free_iso(USBHostDevice *s, int pid, uint8_t ep) +-{ +- AsyncURB *aurb; +- int i, ret, killed = 0, free = 1; +- +- aurb = get_iso_urb(s, pid, ep); +- if (!aurb) { +- return; +- } +- +- for (i = 0; i < s->iso_urb_count; i++) { +- /* in flight? */ +- if (aurb[i].iso_frame_idx == -1) { +- ret = ioctl(s->fd, USBDEVFS_DISCARDURB, &aurb[i]); +- if (ret < 0) { +- perror("USBDEVFS_DISCARDURB"); +- free = 0; +- continue; +- } +- killed++; +- } +- } +- +- /* Make sure any urbs we've killed are reaped before we free them */ +- if (killed) { +- async_complete(s); +- } +- +- for (i = 0; i < s->iso_urb_count; i++) { +- g_free(aurb[i].urb.buffer); +- } +- +- if (free) +- g_free(aurb); +- else +- printf("husb: leaking iso urbs because of discard failure\n"); +- set_iso_urb(s, pid, ep, NULL); +- set_iso_urb_idx(s, pid, ep, 0); +- clear_iso_started(s, pid, ep); +-} +- +-static void urb_status_to_usb_ret(int status, USBPacket *p) +-{ +- switch (status) { +- case -EPIPE: +- p->status = USB_RET_STALL; +- break; +- case -EOVERFLOW: +- p->status = USB_RET_BABBLE; +- break; +- default: +- p->status = USB_RET_IOERROR; +- } +-} +- +-static void usb_host_handle_iso_data(USBHostDevice *s, USBPacket *p, int in) +-{ +- AsyncURB *aurb; +- int i, j, max_packet_size, offset, len; +- uint8_t *buf; +- +- max_packet_size = p->ep->max_packet_size; +- if (max_packet_size == 0) { +- p->status = USB_RET_NAK; +- return; +- } +- +- aurb = get_iso_urb(s, p->pid, p->ep->nr); +- if (!aurb) { +- aurb = usb_host_alloc_iso(s, p->pid, p->ep->nr); +- } +- +- i = get_iso_urb_idx(s, p->pid, p->ep->nr); +- j = aurb[i].iso_frame_idx; +- if (j >= 0 && j < ISO_FRAME_DESC_PER_URB) { +- if (in) { +- /* Check urb status */ +- if (aurb[i].urb.status) { +- urb_status_to_usb_ret(aurb[i].urb.status, p); +- /* Move to the next urb */ +- aurb[i].iso_frame_idx = ISO_FRAME_DESC_PER_URB - 1; +- /* Check frame status */ +- } else if (aurb[i].urb.iso_frame_desc[j].status) { +- urb_status_to_usb_ret(aurb[i].urb.iso_frame_desc[j].status, p); +- /* Check the frame fits */ +- } else if (aurb[i].urb.iso_frame_desc[j].actual_length +- > p->iov.size) { +- printf("husb: received iso data is larger then packet\n"); +- p->status = USB_RET_BABBLE; +- /* All good copy data over */ +- } else { +- len = aurb[i].urb.iso_frame_desc[j].actual_length; +- buf = aurb[i].urb.buffer + +- j * aurb[i].urb.iso_frame_desc[0].length; +- usb_packet_copy(p, buf, len); +- } +- } else { +- len = p->iov.size; +- offset = (j == 0) ? 0 : get_iso_buffer_used(s, p->pid, p->ep->nr); +- +- /* Check the frame fits */ +- if (len > max_packet_size) { +- printf("husb: send iso data is larger then max packet size\n"); +- p->status = USB_RET_NAK; +- return; +- } +- +- /* All good copy data over */ +- usb_packet_copy(p, aurb[i].urb.buffer + offset, len); +- aurb[i].urb.iso_frame_desc[j].length = len; +- offset += len; +- set_iso_buffer_used(s, p->pid, p->ep->nr, offset); +- +- /* Start the stream once we have buffered enough data */ +- if (!is_iso_started(s, p->pid, p->ep->nr) && i == 1 && j == 8) { +- set_iso_started(s, p->pid, p->ep->nr); +- } +- } +- aurb[i].iso_frame_idx++; +- if (aurb[i].iso_frame_idx == ISO_FRAME_DESC_PER_URB) { +- i = (i + 1) % s->iso_urb_count; +- set_iso_urb_idx(s, p->pid, p->ep->nr, i); +- } +- } else { +- if (in) { +- set_iso_started(s, p->pid, p->ep->nr); +- } else { +- DPRINTF("hubs: iso out error no free buffer, dropping packet\n"); +- } +- } +- +- if (is_iso_started(s, p->pid, p->ep->nr)) { +- /* (Re)-submit all fully consumed / filled urbs */ +- for (i = 0; i < s->iso_urb_count; i++) { +- if (aurb[i].iso_frame_idx == ISO_FRAME_DESC_PER_URB) { +- if (ioctl(s->fd, USBDEVFS_SUBMITURB, &aurb[i]) < 0) { +- perror("USBDEVFS_SUBMITURB"); +- if (!in || p->status == USB_RET_SUCCESS) { +- switch(errno) { +- case ETIMEDOUT: +- p->status = USB_RET_NAK; +- break; +- case EPIPE: +- default: +- p->status = USB_RET_STALL; +- } +- } +- break; +- } +- aurb[i].iso_frame_idx = -1; +- change_iso_inflight(s, p->pid, p->ep->nr, 1); +- } +- } +- } +-} +- +-static void usb_host_handle_data(USBDevice *dev, USBPacket *p) +-{ +- USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev); +- struct usbdevfs_urb *urb; +- AsyncURB *aurb; +- int ret, rem, prem, v; +- uint8_t *pbuf; +- uint8_t ep; +- +- trace_usb_host_req_data(s->bus_num, s->addr, p, +- p->pid == USB_TOKEN_IN, +- p->ep->nr, p->iov.size); +- +- if (!is_valid(s, p->pid, p->ep->nr)) { +- p->status = USB_RET_NAK; +- trace_usb_host_req_complete(s->bus_num, s->addr, p, +- p->status, p->actual_length); +- return; +- } +- +- if (p->pid == USB_TOKEN_IN) { +- ep = p->ep->nr | 0x80; +- } else { +- ep = p->ep->nr; +- } +- +- if (is_halted(s, p->pid, p->ep->nr)) { +- unsigned int arg = ep; +- ret = ioctl(s->fd, USBDEVFS_CLEAR_HALT, &arg); +- if (ret < 0) { +- perror("USBDEVFS_CLEAR_HALT"); +- p->status = USB_RET_NAK; +- trace_usb_host_req_complete(s->bus_num, s->addr, p, +- p->status, p->actual_length); +- return; +- } +- clear_halt(s, p->pid, p->ep->nr); +- } +- +- if (is_isoc(s, p->pid, p->ep->nr)) { +- usb_host_handle_iso_data(s, p, p->pid == USB_TOKEN_IN); +- return; +- } +- +- v = 0; +- prem = 0; +- pbuf = NULL; +- rem = p->iov.size; +- do { +- if (prem == 0 && rem > 0) { +- assert(v < p->iov.niov); +- prem = p->iov.iov[v].iov_len; +- pbuf = p->iov.iov[v].iov_base; +- assert(prem <= rem); +- v++; +- } +- aurb = async_alloc(s); +- aurb->packet = p; +- +- urb = &aurb->urb; +- urb->endpoint = ep; +- urb->type = usb_host_usbfs_type(s, p); +- urb->usercontext = s; +- urb->buffer = pbuf; +- urb->buffer_length = prem; +- +- if (urb->buffer_length > MAX_USBFS_BUFFER_SIZE) { +- urb->buffer_length = MAX_USBFS_BUFFER_SIZE; +- } +- pbuf += urb->buffer_length; +- prem -= urb->buffer_length; +- rem -= urb->buffer_length; +- if (rem) { +- aurb->more = 1; +- } +- +- trace_usb_host_urb_submit(s->bus_num, s->addr, aurb, +- urb->buffer_length, aurb->more); +- ret = ioctl(s->fd, USBDEVFS_SUBMITURB, urb); +- +- DPRINTF("husb: data submit: ep 0x%x, len %u, more %d, packet %p, aurb %p\n", +- urb->endpoint, urb->buffer_length, aurb->more, p, aurb); +- +- if (ret < 0) { +- perror("USBDEVFS_SUBMITURB"); +- async_free(aurb); +- +- switch(errno) { +- case ETIMEDOUT: +- p->status = USB_RET_NAK; +- trace_usb_host_req_complete(s->bus_num, s->addr, p, +- p->status, p->actual_length); +- break; +- case EPIPE: +- default: +- p->status = USB_RET_STALL; +- trace_usb_host_req_complete(s->bus_num, s->addr, p, +- p->status, p->actual_length); +- } +- return; +- } +- } while (rem > 0); +- +- p->status = USB_RET_ASYNC; +-} +- +-static int ctrl_error(void) +-{ +- if (errno == ETIMEDOUT) { +- return USB_RET_NAK; +- } else { +- return USB_RET_STALL; +- } +-} +- +-static void usb_host_set_address(USBHostDevice *s, int addr) +-{ +- trace_usb_host_set_address(s->bus_num, s->addr, addr); +- s->dev.addr = addr; +-} +- +-static void usb_host_set_config(USBHostDevice *s, int config, USBPacket *p) +-{ +- int ret, first = 1; +- +- trace_usb_host_set_config(s->bus_num, s->addr, config); +- +- usb_host_release_interfaces(s); +- +-again: +- ret = ioctl(s->fd, USBDEVFS_SETCONFIGURATION, &config); +- +- DPRINTF("husb: ctrl set config %d ret %d errno %d\n", config, ret, errno); +- +- if (ret < 0 && errno == EBUSY && first) { +- /* happens if usb device is in use by host drivers */ +- int count = usb_linux_get_num_interfaces(s); +- if (count > 0) { +- DPRINTF("husb: busy -> disconnecting %d interfaces\n", count); +- usb_host_disconnect_ifaces(s, count); +- first = 0; +- goto again; +- } +- } +- +- if (ret < 0) { +- p->status = ctrl_error(); +- return; +- } +- usb_host_claim_interfaces(s, config); +- usb_linux_update_endp_table(s); +-} +- +-static void usb_host_set_interface(USBHostDevice *s, int iface, int alt, +- USBPacket *p) +-{ +- struct usbdevfs_setinterface si; +- int i, ret; +- +- trace_usb_host_set_interface(s->bus_num, s->addr, iface, alt); +- +- for (i = 1; i <= USB_MAX_ENDPOINTS; i++) { +- if (is_isoc(s, USB_TOKEN_IN, i)) { +- usb_host_stop_n_free_iso(s, USB_TOKEN_IN, i); +- } +- if (is_isoc(s, USB_TOKEN_OUT, i)) { +- usb_host_stop_n_free_iso(s, USB_TOKEN_OUT, i); +- } +- } +- +- if (iface >= USB_MAX_INTERFACES) { +- p->status = USB_RET_STALL; +- return; +- } +- +- si.interface = iface; +- si.altsetting = alt; +- ret = ioctl(s->fd, USBDEVFS_SETINTERFACE, &si); +- +- DPRINTF("husb: ctrl set iface %d altset %d ret %d errno %d\n", +- iface, alt, ret, errno); +- +- if (ret < 0) { +- p->status = ctrl_error(); +- return; +- } +- +- s->dev.altsetting[iface] = alt; +- usb_linux_update_endp_table(s); +-} +- +-static void usb_host_handle_control(USBDevice *dev, USBPacket *p, +- int request, int value, int index, int length, uint8_t *data) +-{ +- USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev); +- struct usbdevfs_urb *urb; +- AsyncURB *aurb; +- int ret; +- +- /* +- * Process certain standard device requests. +- * These are infrequent and are processed synchronously. +- */ +- +- /* Note request is (bRequestType << 8) | bRequest */ +- trace_usb_host_req_control(s->bus_num, s->addr, p, request, value, index); +- +- switch (request) { +- case DeviceOutRequest | USB_REQ_SET_ADDRESS: +- usb_host_set_address(s, value); +- trace_usb_host_req_emulated(s->bus_num, s->addr, p, p->status); +- return; +- +- case DeviceOutRequest | USB_REQ_SET_CONFIGURATION: +- usb_host_set_config(s, value & 0xff, p); +- trace_usb_host_req_emulated(s->bus_num, s->addr, p, p->status); +- return; +- +- case InterfaceOutRequest | USB_REQ_SET_INTERFACE: +- usb_host_set_interface(s, index, value, p); +- trace_usb_host_req_emulated(s->bus_num, s->addr, p, p->status); +- return; +- +- case EndpointOutRequest | USB_REQ_CLEAR_FEATURE: +- if (value == 0) { /* clear halt */ +- int pid = (index & USB_DIR_IN) ? USB_TOKEN_IN : USB_TOKEN_OUT; +- ioctl(s->fd, USBDEVFS_CLEAR_HALT, &index); +- clear_halt(s, pid, index & 0x0f); +- trace_usb_host_req_emulated(s->bus_num, s->addr, p, 0); +- return; +- } +- } +- +- /* The rest are asynchronous */ +- if (length > sizeof(dev->data_buf)) { +- fprintf(stderr, "husb: ctrl buffer too small (%d > %zu)\n", +- length, sizeof(dev->data_buf)); +- p->status = USB_RET_STALL; +- return; +- } +- +- aurb = async_alloc(s); +- aurb->packet = p; +- +- /* +- * Setup ctrl transfer. +- * +- * s->ctrl is laid out such that data buffer immediately follows +- * 'req' struct which is exactly what usbdevfs expects. +- */ +- urb = &aurb->urb; +- +- urb->type = USBDEVFS_URB_TYPE_CONTROL; +- urb->endpoint = p->ep->nr; +- +- urb->buffer = &dev->setup_buf; +- urb->buffer_length = length + 8; +- +- urb->usercontext = s; +- +- trace_usb_host_urb_submit(s->bus_num, s->addr, aurb, +- urb->buffer_length, aurb->more); +- ret = ioctl(s->fd, USBDEVFS_SUBMITURB, urb); +- +- DPRINTF("husb: submit ctrl. len %u aurb %p\n", urb->buffer_length, aurb); +- +- if (ret < 0) { +- DPRINTF("husb: submit failed. errno %d\n", errno); +- async_free(aurb); +- +- switch(errno) { +- case ETIMEDOUT: +- p->status = USB_RET_NAK; +- break; +- case EPIPE: +- default: +- p->status = USB_RET_STALL; +- break; +- } +- return; +- } +- +- p->status = USB_RET_ASYNC; +-} +- +-static void usb_linux_update_endp_table(USBHostDevice *s) +-{ +- static const char *tname[] = { +- [USB_ENDPOINT_XFER_CONTROL] = "control", +- [USB_ENDPOINT_XFER_ISOC] = "isoc", +- [USB_ENDPOINT_XFER_BULK] = "bulk", +- [USB_ENDPOINT_XFER_INT] = "int", +- }; +- uint8_t devep, type; +- uint16_t mps, v, p; +- int ep, pid; +- unsigned int i, configuration = -1, interface = -1, altsetting = -1; +- struct endp_data *epd; +- USBDescriptor *d; +- bool active = false; +- +- usb_ep_reset(&s->dev); +- +- for (i = 0;; i += d->bLength) { +- if (i+2 >= s->descr_len) { +- break; +- } +- d = (void *)(s->descr + i); +- if (d->bLength < 2) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "descriptor too short"); +- return; +- } +- if (i + d->bLength > s->descr_len) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "descriptor too long"); +- return; +- } +- switch (d->bDescriptorType) { +- case 0: +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "invalid descriptor type"); +- return; +- case USB_DT_DEVICE: +- if (d->bLength < 0x12) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "device descriptor too short"); +- return; +- } +- v = (d->u.device.idVendor_hi << 8) | d->u.device.idVendor_lo; +- p = (d->u.device.idProduct_hi << 8) | d->u.device.idProduct_lo; +- trace_usb_host_parse_device(s->bus_num, s->addr, v, p); +- break; +- case USB_DT_CONFIG: +- if (d->bLength < 0x09) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "config descriptor too short"); +- return; +- } +- configuration = d->u.config.bConfigurationValue; +- active = (configuration == s->dev.configuration); +- trace_usb_host_parse_config(s->bus_num, s->addr, +- configuration, active); +- break; +- case USB_DT_INTERFACE: +- if (d->bLength < 0x09) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "interface descriptor too short"); +- return; +- } +- interface = d->u.interface.bInterfaceNumber; +- altsetting = d->u.interface.bAlternateSetting; +- active = (configuration == s->dev.configuration) && +- (altsetting == s->dev.altsetting[interface]); +- trace_usb_host_parse_interface(s->bus_num, s->addr, +- interface, altsetting, active); +- break; +- case USB_DT_ENDPOINT: +- if (d->bLength < 0x07) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "endpoint descriptor too short"); +- return; +- } +- devep = d->u.endpoint.bEndpointAddress; +- pid = (devep & USB_DIR_IN) ? USB_TOKEN_IN : USB_TOKEN_OUT; +- ep = devep & 0xf; +- if (ep == 0) { +- trace_usb_host_parse_error(s->bus_num, s->addr, +- "invalid endpoint address"); +- return; +- } +- +- type = d->u.endpoint.bmAttributes & 0x3; +- mps = d->u.endpoint.wMaxPacketSize_lo | +- (d->u.endpoint.wMaxPacketSize_hi << 8); +- trace_usb_host_parse_endpoint(s->bus_num, s->addr, ep, +- (devep & USB_DIR_IN) ? "in" : "out", +- tname[type], active); +- +- if (active) { +- usb_ep_set_max_packet_size(&s->dev, pid, ep, mps); +- assert(usb_ep_get_type(&s->dev, pid, ep) == +- USB_ENDPOINT_XFER_INVALID); +- usb_ep_set_type(&s->dev, pid, ep, type); +- usb_ep_set_ifnum(&s->dev, pid, ep, interface); +- if ((s->options & (1 << USB_HOST_OPT_PIPELINE)) && +- (type == USB_ENDPOINT_XFER_BULK) && +- (pid == USB_TOKEN_OUT)) { +- usb_ep_set_pipeline(&s->dev, pid, ep, true); +- } +- +- epd = get_endp(s, pid, ep); +- epd->halted = 0; +- } +- +- break; +- default: +- trace_usb_host_parse_unknown(s->bus_num, s->addr, +- d->bLength, d->bDescriptorType); +- break; +- } +- } +-} +- +-/* +- * Check if we can safely redirect a usb2 device to a usb1 virtual controller, +- * this function assumes this is safe, if: +- * 1) There are no isoc endpoints +- * 2) There are no interrupt endpoints with a max_packet_size > 64 +- * Note bulk endpoints with a max_packet_size > 64 in theory also are not +- * usb1 compatible, but in practice this seems to work fine. +- */ +-static int usb_linux_full_speed_compat(USBHostDevice *dev) +-{ +- int i, packet_size; +- +- /* +- * usb_linux_update_endp_table only registers info about ep in the current +- * interface altsettings, so we need to parse the descriptors again. +- */ +- for (i = 0; (i + 5) < dev->descr_len; i += dev->descr[i]) { +- if (dev->descr[i + 1] == USB_DT_ENDPOINT) { +- switch (dev->descr[i + 3] & 0x3) { +- case 0x00: /* CONTROL */ +- break; +- case 0x01: /* ISO */ +- return 0; +- case 0x02: /* BULK */ +- break; +- case 0x03: /* INTERRUPT */ +- packet_size = dev->descr[i + 4] + (dev->descr[i + 5] << 8); +- if (packet_size > 64) +- return 0; +- break; +- } +- } +- } +- return 1; +-} +- +-static int usb_host_open(USBHostDevice *dev, int bus_num, +- int addr, const char *port, +- const char *prod_name, int speed) +-{ +- int fd = -1, ret; +- +- trace_usb_host_open_started(bus_num, addr); +- +- if (dev->fd != -1) { +- goto fail; +- } +- +- fd = usb_host_open_device(bus_num, addr); +- if (fd < 0) { +- goto fail; +- } +- DPRINTF("husb: opened %s\n", buf); +- +- dev->bus_num = bus_num; +- dev->addr = addr; +- pstrcpy(dev->port, sizeof(dev->port), port); +- dev->fd = fd; +- +- /* read the device description */ +- dev->descr_len = read(fd, dev->descr, sizeof(dev->descr)); +- if (dev->descr_len <= 0) { +- perror("husb: reading device data failed"); +- goto fail; +- } +- +-#ifdef DEBUG +- { +- int x; +- printf("=== begin dumping device descriptor data ===\n"); +- for (x = 0; x < dev->descr_len; x++) { +- printf("%02x ", dev->descr[x]); +- } +- printf("\n=== end dumping device descriptor data ===\n"); +- } +-#endif +- +- +- /* start unconfigured -- we'll wait for the guest to set a configuration */ +- if (!usb_host_claim_interfaces(dev, 0)) { +- goto fail; +- } +- +- usb_ep_init(&dev->dev); +- usb_linux_update_endp_table(dev); +- +- if (speed == -1) { +- struct usbdevfs_connectinfo ci; +- +- ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci); +- if (ret < 0) { +- perror("usb_host_device_open: USBDEVFS_CONNECTINFO"); +- goto fail; +- } +- +- if (ci.slow) { +- speed = USB_SPEED_LOW; +- } else { +- speed = USB_SPEED_HIGH; +- } +- } +- dev->dev.speed = speed; +- dev->dev.speedmask = (1 << speed); +- if (dev->dev.speed == USB_SPEED_HIGH && usb_linux_full_speed_compat(dev)) { +- dev->dev.speedmask |= USB_SPEED_MASK_FULL; +- } +- +- trace_usb_host_open_success(bus_num, addr); +- +- if (!prod_name || prod_name[0] == '\0') { +- snprintf(dev->dev.product_desc, sizeof(dev->dev.product_desc), +- "host:%d.%d", bus_num, addr); +- } else { +- pstrcpy(dev->dev.product_desc, sizeof(dev->dev.product_desc), +- prod_name); +- } +- +- ret = usb_device_attach(&dev->dev); +- if (ret) { +- goto fail; +- } +- +- /* USB devio uses 'write' flag to check for async completions */ +- qemu_set_fd_handler(dev->fd, NULL, async_complete, dev); +- +- return 0; +- +-fail: +- trace_usb_host_open_failure(bus_num, addr); +- if (dev->fd != -1) { +- close(dev->fd); +- dev->fd = -1; +- } +- return -1; +-} +- +-static int usb_host_close(USBHostDevice *dev) +-{ +- int i; +- +- if (dev->fd == -1) { +- return -1; +- } +- +- trace_usb_host_close(dev->bus_num, dev->addr); +- +- qemu_set_fd_handler(dev->fd, NULL, NULL, NULL); +- dev->closing = 1; +- for (i = 1; i <= USB_MAX_ENDPOINTS; i++) { +- if (is_isoc(dev, USB_TOKEN_IN, i)) { +- usb_host_stop_n_free_iso(dev, USB_TOKEN_IN, i); +- } +- if (is_isoc(dev, USB_TOKEN_OUT, i)) { +- usb_host_stop_n_free_iso(dev, USB_TOKEN_OUT, i); +- } +- } +- async_complete(dev); +- dev->closing = 0; +- if (dev->dev.attached) { +- usb_device_detach(&dev->dev); +- } +- usb_host_do_reset(dev); +- close(dev->fd); +- dev->fd = -1; +- return 0; +-} +- +-static void usb_host_exit_notifier(struct Notifier *n, void *data) +-{ +- USBHostDevice *s = container_of(n, USBHostDevice, exit); +- +- usb_host_release_port(s); +- if (s->fd != -1) { +- usb_host_do_reset(s); +- } +-} +- +-/* +- * This is *NOT* about restoring state. We have absolutely no idea +- * what state the host device is in at the moment and whenever it is +- * still present in the first place. Attemping to contine where we +- * left off is impossible. +- * +- * What we are going to to to here is emulate a surprise removal of +- * the usb device passed through, then kick host scan so the device +- * will get re-attached (and re-initialized by the guest) in case it +- * is still present. +- * +- * As the device removal will change the state of other devices (usb +- * host controller, most likely interrupt controller too) we have to +- * wait with it until *all* vmstate is loaded. Thus post_load just +- * kicks a bottom half which then does the actual work. +- */ +-static void usb_host_post_load_bh(void *opaque) +-{ +- USBHostDevice *dev = opaque; +- +- if (dev->fd != -1) { +- usb_host_close(dev); +- } +- if (dev->dev.attached) { +- usb_device_detach(&dev->dev); +- } +- usb_host_auto_check(NULL); +-} +- +-static int usb_host_post_load(void *opaque, int version_id) +-{ +- USBHostDevice *dev = opaque; +- +- qemu_bh_schedule(dev->bh); +- return 0; +-} +- +-static int usb_host_initfn(USBDevice *dev) +-{ +- USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev); +- +- dev->flags |= (1 << USB_DEV_FLAG_IS_HOST); +- dev->auto_attach = 0; +- s->fd = -1; +- s->hub_fd = -1; +- +- QTAILQ_INSERT_TAIL(&hostdevs, s, next); +- s->exit.notify = usb_host_exit_notifier; +- qemu_add_exit_notifier(&s->exit); +- s->bh = qemu_bh_new(usb_host_post_load_bh, s); +- usb_host_auto_check(NULL); +- +- if (s->match.bus_num != 0 && s->match.port != NULL) { +- usb_host_claim_port(s); +- } +- add_boot_device_path(s->bootindex, &dev->qdev, NULL); +- return 0; +-} +- +-static const VMStateDescription vmstate_usb_host = { +- .name = DEVNAME, +- .version_id = 1, +- .minimum_version_id = 1, +- .post_load = usb_host_post_load, +- .fields = (VMStateField[]) { +- VMSTATE_USB_DEVICE(dev, USBHostDevice), +- VMSTATE_END_OF_LIST() +- } +-}; +- +-static Property usb_host_dev_properties[] = { +- DEFINE_PROP_UINT32("hostbus", USBHostDevice, match.bus_num, 0), +- DEFINE_PROP_UINT32("hostaddr", USBHostDevice, match.addr, 0), +- DEFINE_PROP_STRING("hostport", USBHostDevice, match.port), +- DEFINE_PROP_HEX32("vendorid", USBHostDevice, match.vendor_id, 0), +- DEFINE_PROP_HEX32("productid", USBHostDevice, match.product_id, 0), +- DEFINE_PROP_UINT32("isobufs", USBHostDevice, iso_urb_count, 4), +- DEFINE_PROP_INT32("bootindex", USBHostDevice, bootindex, -1), +- DEFINE_PROP_BIT("pipeline", USBHostDevice, options, +- USB_HOST_OPT_PIPELINE, true), +- DEFINE_PROP_END_OF_LIST(), +-}; +- +-static void usb_host_class_initfn(ObjectClass *klass, void *data) +-{ +- DeviceClass *dc = DEVICE_CLASS(klass); +- USBDeviceClass *uc = USB_DEVICE_CLASS(klass); +- +- uc->init = usb_host_initfn; +- uc->product_desc = "USB Host Device"; +- uc->cancel_packet = usb_host_async_cancel; +- uc->handle_data = usb_host_handle_data; +- uc->handle_control = usb_host_handle_control; +- uc->handle_reset = usb_host_handle_reset; +- uc->handle_destroy = usb_host_handle_destroy; +- dc->vmsd = &vmstate_usb_host; +- dc->props = usb_host_dev_properties; +-} +- +-static const TypeInfo usb_host_dev_info = { +- .name = DEVNAME, +- .parent = TYPE_USB_DEVICE, +- .instance_size = sizeof(USBHostDevice), +- .class_init = usb_host_class_initfn, +-}; +- +-static void usb_host_register_types(void) +-{ +- type_register_static(&usb_host_dev_info); +-} +- +-type_init(usb_host_register_types) +- +-/* +- * Read sys file-system device file +- * +- * @line address of buffer to put file contents in +- * @line_size size of line +- * @device_file path to device file (printf format string) +- * @device_name device being opened (inserted into device_file) +- * +- * @return 0 failed, 1 succeeded ('line' contains data) +- */ +-static int usb_host_read_file(char *line, size_t line_size, +- const char *device_file, const char *device_name) +-{ +- FILE *f; +- int ret = 0; +- char filename[PATH_MAX]; +- +- snprintf(filename, PATH_MAX, "/sys/bus/usb/devices/%s/%s", device_name, +- device_file); +- f = fopen(filename, "r"); +- if (f) { +- ret = fgets(line, line_size, f) != NULL; +- fclose(f); +- } +- +- return ret; +-} +- +-/* +- * Use /sys/bus/usb/devices/ directory to determine host's USB +- * devices. +- * +- * This code is based on Robert Schiele's original patches posted to +- * the Novell bug-tracker https://bugzilla.novell.com/show_bug.cgi?id=241950 +- */ +-static int usb_host_scan(void *opaque, USBScanFunc *func) +-{ +- DIR *dir = NULL; +- char line[1024]; +- int bus_num, addr, speed, class_id, product_id, vendor_id; +- int ret = 0; +- char port[MAX_PORTLEN]; +- char product_name[512]; +- struct dirent *de; +- +- dir = opendir("/sys/bus/usb/devices"); +- if (!dir) { +- perror("husb: opendir /sys/bus/usb/devices"); +- fprintf(stderr, "husb: please make sure sysfs is mounted at /sys\n"); +- goto the_end; +- } +- +- while ((de = readdir(dir))) { +- if (de->d_name[0] != '.' && !strchr(de->d_name, ':')) { +- if (sscanf(de->d_name, "%d-%7[0-9.]", &bus_num, port) < 2) { +- continue; +- } +- +- if (!usb_host_read_file(line, sizeof(line), "devnum", de->d_name)) { +- goto the_end; +- } +- if (sscanf(line, "%d", &addr) != 1) { +- goto the_end; +- } +- if (!usb_host_read_file(line, sizeof(line), "bDeviceClass", +- de->d_name)) { +- goto the_end; +- } +- if (sscanf(line, "%x", &class_id) != 1) { +- goto the_end; +- } +- +- if (!usb_host_read_file(line, sizeof(line), "idVendor", +- de->d_name)) { +- goto the_end; +- } +- if (sscanf(line, "%x", &vendor_id) != 1) { +- goto the_end; +- } +- if (!usb_host_read_file(line, sizeof(line), "idProduct", +- de->d_name)) { +- goto the_end; +- } +- if (sscanf(line, "%x", &product_id) != 1) { +- goto the_end; +- } +- if (!usb_host_read_file(line, sizeof(line), "product", +- de->d_name)) { +- *product_name = 0; +- } else { +- if (strlen(line) > 0) { +- line[strlen(line) - 1] = '\0'; +- } +- pstrcpy(product_name, sizeof(product_name), line); +- } +- +- if (!usb_host_read_file(line, sizeof(line), "speed", de->d_name)) { +- goto the_end; +- } +- if (!strcmp(line, "5000\n")) { +- speed = USB_SPEED_SUPER; +- } else if (!strcmp(line, "480\n")) { +- speed = USB_SPEED_HIGH; +- } else if (!strcmp(line, "1.5\n")) { +- speed = USB_SPEED_LOW; +- } else { +- speed = USB_SPEED_FULL; +- } +- +- ret = func(opaque, bus_num, addr, port, class_id, vendor_id, +- product_id, product_name, speed); +- if (ret) { +- goto the_end; +- } +- } +- } +- the_end: +- if (dir) { +- closedir(dir); +- } +- return ret; +-} +- +-static QEMUTimer *usb_auto_timer; +-static VMChangeStateEntry *usb_vmstate; +- +-static int usb_host_auto_scan(void *opaque, int bus_num, +- int addr, const char *port, +- int class_id, int vendor_id, int product_id, +- const char *product_name, int speed) +-{ +- struct USBAutoFilter *f; +- struct USBHostDevice *s; +- +- /* Ignore hubs */ +- if (class_id == 9) +- return 0; +- +- QTAILQ_FOREACH(s, &hostdevs, next) { +- f = &s->match; +- +- if (f->bus_num > 0 && f->bus_num != bus_num) { +- continue; +- } +- if (f->addr > 0 && f->addr != addr) { +- continue; +- } +- if (f->port != NULL && strcmp(f->port, port) != 0) { +- continue; +- } +- +- if (f->vendor_id > 0 && f->vendor_id != vendor_id) { +- continue; +- } +- +- if (f->product_id > 0 && f->product_id != product_id) { +- continue; +- } +- /* We got a match */ +- s->seen++; +- if (s->errcount >= 3) { +- return 0; +- } +- +- /* Already attached ? */ +- if (s->fd != -1) { +- return 0; +- } +- DPRINTF("husb: auto open: bus_num %d addr %d\n", bus_num, addr); +- +- if (usb_host_open(s, bus_num, addr, port, product_name, speed) < 0) { +- s->errcount++; +- } +- break; +- } +- +- return 0; +-} +- +-static void usb_host_vm_state(void *unused, int running, RunState state) +-{ +- if (running) { +- usb_host_auto_check(unused); +- } +-} +- +-static void usb_host_auto_check(void *unused) +-{ +- struct USBHostDevice *s; +- int unconnected = 0; +- +- if (runstate_is_running()) { +- usb_host_scan(NULL, usb_host_auto_scan); +- +- QTAILQ_FOREACH(s, &hostdevs, next) { +- if (s->fd == -1) { +- unconnected++; +- } +- if (s->seen == 0) { +- s->errcount = 0; +- } +- s->seen = 0; +- } +- +- if (unconnected == 0) { +- /* nothing to watch */ +- if (usb_auto_timer) { +- qemu_del_timer(usb_auto_timer); +- trace_usb_host_auto_scan_disabled(); +- } +- return; +- } +- } +- +- if (!usb_vmstate) { +- usb_vmstate = qemu_add_vm_change_state_handler(usb_host_vm_state, NULL); +- } +- if (!usb_auto_timer) { +- usb_auto_timer = qemu_new_timer_ms(rt_clock, usb_host_auto_check, NULL); +- if (!usb_auto_timer) { +- return; +- } +- trace_usb_host_auto_scan_enabled(); +- } +- qemu_mod_timer(usb_auto_timer, qemu_get_clock_ms(rt_clock) + 2000); +-} +- +-#ifndef CONFIG_USB_LIBUSB +- +-/**********************/ +-/* USB host device info */ +- +-struct usb_class_info { +- int class; +- const char *class_name; +-}; +- +-static const struct usb_class_info usb_class_info[] = { +- { USB_CLASS_AUDIO, "Audio"}, +- { USB_CLASS_COMM, "Communication"}, +- { USB_CLASS_HID, "HID"}, +- { USB_CLASS_HUB, "Hub" }, +- { USB_CLASS_PHYSICAL, "Physical" }, +- { USB_CLASS_PRINTER, "Printer" }, +- { USB_CLASS_MASS_STORAGE, "Storage" }, +- { USB_CLASS_CDC_DATA, "Data" }, +- { USB_CLASS_APP_SPEC, "Application Specific" }, +- { USB_CLASS_VENDOR_SPEC, "Vendor Specific" }, +- { USB_CLASS_STILL_IMAGE, "Still Image" }, +- { USB_CLASS_CSCID, "Smart Card" }, +- { USB_CLASS_CONTENT_SEC, "Content Security" }, +- { -1, NULL } +-}; +- +-static const char *usb_class_str(uint8_t class) +-{ +- const struct usb_class_info *p; +- for(p = usb_class_info; p->class != -1; p++) { +- if (p->class == class) { +- break; +- } +- } +- return p->class_name; +-} +- +-static void usb_info_device(Monitor *mon, int bus_num, +- int addr, const char *port, +- int class_id, int vendor_id, int product_id, +- const char *product_name, +- int speed) +-{ +- const char *class_str, *speed_str; +- +- switch(speed) { +- case USB_SPEED_LOW: +- speed_str = "1.5"; +- break; +- case USB_SPEED_FULL: +- speed_str = "12"; +- break; +- case USB_SPEED_HIGH: +- speed_str = "480"; +- break; +- case USB_SPEED_SUPER: +- speed_str = "5000"; +- break; +- default: +- speed_str = "?"; +- break; +- } +- +- monitor_printf(mon, " Bus %d, Addr %d, Port %s, Speed %s Mb/s\n", +- bus_num, addr, port, speed_str); +- class_str = usb_class_str(class_id); +- if (class_str) { +- monitor_printf(mon, " %s:", class_str); +- } else { +- monitor_printf(mon, " Class %02x:", class_id); +- } +- monitor_printf(mon, " USB device %04x:%04x", vendor_id, product_id); +- if (product_name[0] != '\0') { +- monitor_printf(mon, ", %s", product_name); +- } +- monitor_printf(mon, "\n"); +-} +- +-static int usb_host_info_device(void *opaque, int bus_num, int addr, +- const char *path, int class_id, +- int vendor_id, int product_id, +- const char *product_name, +- int speed) +-{ +- Monitor *mon = opaque; +- +- usb_info_device(mon, bus_num, addr, path, class_id, vendor_id, product_id, +- product_name, speed); +- return 0; +-} +- +-static void dec2str(int val, char *str, size_t size) +-{ +- if (val == 0) { +- snprintf(str, size, "*"); +- } else { +- snprintf(str, size, "%d", val); +- } +-} +- +-static void hex2str(int val, char *str, size_t size) +-{ +- if (val == 0) { +- snprintf(str, size, "*"); +- } else { +- snprintf(str, size, "%04x", val); +- } +-} +- +-void usb_host_info(Monitor *mon, const QDict *qdict) +-{ +- struct USBAutoFilter *f; +- struct USBHostDevice *s; +- +- usb_host_scan(mon, usb_host_info_device); +- +- if (QTAILQ_EMPTY(&hostdevs)) { +- return; +- } +- +- monitor_printf(mon, " Auto filters:\n"); +- QTAILQ_FOREACH(s, &hostdevs, next) { +- char bus[10], addr[10], vid[10], pid[10]; +- f = &s->match; +- dec2str(f->bus_num, bus, sizeof(bus)); +- dec2str(f->addr, addr, sizeof(addr)); +- hex2str(f->vendor_id, vid, sizeof(vid)); +- hex2str(f->product_id, pid, sizeof(pid)); +- monitor_printf(mon, " Bus %s, Addr %s, Port %s, ID %s:%s\n", +- bus, addr, f->port ? f->port : "*", vid, pid); +- } +-} +- +-#endif +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-sanity-check-setup_index-setup_len-in-post_l2.patch b/SOURCES/kvm-usb-sanity-check-setup_index-setup_len-in-post_l2.patch new file mode 100644 index 0000000..790bf36 --- /dev/null +++ b/SOURCES/kvm-usb-sanity-check-setup_index-setup_len-in-post_l2.patch @@ -0,0 +1,62 @@ +From 66f0fbb6a54ab1110afd12eb9a25d8966b60c7fa Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:36:01 +0200 +Subject: [PATCH 19/31] usb: sanity check setup_index+setup_len in post_load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056525-6869-2-git-send-email-mst@redhat.com> +Patchwork-id: 58865 +O-Subject: [PATCH qemu-kvm RHEL7.1 2/2] usb: sanity check setup_index+setup_len in post_load +Bugzilla: 1095747 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann + +CVE-2013-4541 + +s->setup_len and s->setup_index are fed into usb_packet_copy as +size/offset into s->data_buf, it's possible for invalid state to exploit +this to load arbitrary data. + +setup_len and setup_index should be checked to make sure +they are not negative. + +Cc: Gerd Hoffmann +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Gerd Hoffmann +Signed-off-by: Juan Quintela +(cherry picked from commit 9f8e9895c504149d7048e9fc5eb5cbb34b16e49a) + +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Tested: lightly on developer's box +Bugzilla: 1095743 + +Note: the fix isn't complete upstream. there's a separate bugzilla to +fix more issues upstream and in rhel. +--- + hw/usb/bus.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/bus.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index e0c3a77..9766b7f 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -49,7 +49,9 @@ static int usb_device_post_load(void *opaque, int version_id) + } else { + dev->attached = 1; + } +- if (dev->setup_index >= sizeof(dev->data_buf) || ++ if (dev->setup_index < 0 || ++ dev->setup_len < 0 || ++ dev->setup_index >= sizeof(dev->data_buf) || + dev->setup_len >= sizeof(dev->data_buf)) { + return -EINVAL; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-usb-sanity-check-setup_index-setup_len-in-post_load.patch b/SOURCES/kvm-usb-sanity-check-setup_index-setup_len-in-post_load.patch new file mode 100644 index 0000000..af9b2a1 --- /dev/null +++ b/SOURCES/kvm-usb-sanity-check-setup_index-setup_len-in-post_load.patch @@ -0,0 +1,49 @@ +From 744a9df71d68005c83f01ddde142f1b08c8fc69c Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:35:57 +0200 +Subject: [PATCH 18/31] usb: sanity check setup_index+setup_len in post_load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056525-6869-1-git-send-email-mst@redhat.com> +Patchwork-id: 58864 +O-Subject: [PATCH qemu-kvm RHEL7.1 1/2] usb: sanity check setup_index+setup_len in post_load +Bugzilla: 1095747 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c60174e847082ab9f70720f86509a3353f816fad) + +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Tested: lightly on developer's box +Bugzilla: 1095743 +--- + hw/usb/bus.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/bus.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/bus.c b/hw/usb/bus.c +index fe6bd13..e0c3a77 100644 +--- a/hw/usb/bus.c ++++ b/hw/usb/bus.c +@@ -49,6 +49,10 @@ static int usb_device_post_load(void *opaque, int version_id) + } else { + dev->attached = 1; + } ++ if (dev->setup_index >= sizeof(dev->data_buf) || ++ dev->setup_len >= sizeof(dev->data_buf)) { ++ return -EINVAL; ++ } + return 0; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-use-directly-cpu_physical_memory_-api-for-tracki.patch b/SOURCES/kvm-use-directly-cpu_physical_memory_-api-for-tracki.patch new file mode 100644 index 0000000..04f2eb1 --- /dev/null +++ b/SOURCES/kvm-use-directly-cpu_physical_memory_-api-for-tracki.patch @@ -0,0 +1,79 @@ +From 85f240605d1a46de1fc8609f8e64b994f4716adb Mon Sep 17 00:00:00 2001 +From: Juan Quintela +Date: Tue, 14 Jan 2014 15:07:46 +0100 +Subject: [PATCH 35/40] kvm: use directly cpu_physical_memory_* api for tracking dirty pages +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Juan Quintela +Message-id: <1389712071-23303-36-git-send-email-quintela@redhat.com> +Patchwork-id: 56690 +O-Subject: [RHEL7 qemu-kvm PATCH 35/40] kvm: use directly cpu_physical_memory_* api for tracking dirty pages +Bugzilla: 997559 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Orit Wasserman +RH-Acked-by: Dr. David Alan Gilbert (git) + +Performance is important in this function, and we want to optimize even further. + +Signed-off-by: Juan Quintela +Reviewed-by: Orit Wasserman +(cherry picked from commit 747afd5bcdc90f608c75d95f8a629a9cfc838c57) + +Conflicts: + kvm-all.c + +Due to upstream commits: + +commit dd1750d7981cf9e38985c9dfa474dcdbbe236270 +Author: Andreas Färber +Date: Wed May 1 13:45:44 2013 +0200 + + kvm: Change kvm_cpu_synchronize_state() argument to CPUState + +Signed-off-by: Juan Quintela +--- + kvm-all.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 0e21494..8e2bd34 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -31,6 +31,7 @@ + #include "sysemu/kvm.h" + #include "qemu/bswap.h" + #include "exec/memory.h" ++#include "exec/ram_addr.h" + #include "exec/address-spaces.h" + #include "qemu/event_notifier.h" + #include "trace.h" +@@ -367,6 +368,7 @@ static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section, + unsigned int i, j; + unsigned long page_number, c; + hwaddr addr, addr1; ++ ram_addr_t ram_addr; + unsigned int len = ((section->size / getpagesize()) + HOST_LONG_BITS - 1) / HOST_LONG_BITS; + unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE; + +@@ -383,8 +385,9 @@ static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section, + page_number = (i * HOST_LONG_BITS + j) * hpratio; + addr1 = page_number * TARGET_PAGE_SIZE; + addr = section->offset_within_region + addr1; +- memory_region_set_dirty(section->mr, addr, +- TARGET_PAGE_SIZE * hpratio); ++ ram_addr = section->mr->ram_addr + addr; ++ cpu_physical_memory_set_dirty_range(ram_addr, ++ TARGET_PAGE_SIZE * hpratio); + } while (c != 0); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-use-recommended-max-vcpu-count.patch b/SOURCES/kvm-use-recommended-max-vcpu-count.patch new file mode 100644 index 0000000..bd9d7dc --- /dev/null +++ b/SOURCES/kvm-use-recommended-max-vcpu-count.patch @@ -0,0 +1,50 @@ +From 3513ae9049f3587572997f2728e219be11679da8 Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 21 Jan 2014 10:46:52 +0100 +Subject: [PATCH 31/34] use recommended max vcpu count + +RH-Author: Andrew Jones +Message-id: <1390301212-15344-1-git-send-email-drjones@redhat.com> +Patchwork-id: 56862 +O-Subject: [RHEL7.0 qemu-kvm PATCH v6] use recommended max vcpu count +Bugzilla: 998708 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Marcelo Tosatti + +RHEL-only +Bugzilla: 998708 +Brew: 6905708 + +The recommended vcpu max limit (KVM_CAP_NR_VCPUS) should be used instead +of the actual max vcpu limit (KVM_CAP_MAX_VCPUS) to give an error. + +This matches the limit tested by QE on RHEL6: 160. + +Signed-off-by: Andrew Jones +--- + kvm-all.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index 19acd58..603bd4b 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1350,6 +1350,9 @@ int kvm_init(void) + soft_vcpus_limit = kvm_recommended_vcpus(s); + hard_vcpus_limit = kvm_max_vcpus(s); + ++ /* RHEL doesn't support nr_vcpus > soft_vcpus_limit */ ++ hard_vcpus_limit = soft_vcpus_limit; ++ + while (nc->name) { + if (nc->num > soft_vcpus_limit) { + fprintf(stderr, +-- +1.7.1 + diff --git a/SOURCES/kvm-util-Drop-superfluous-conditionals-around-g_free.patch b/SOURCES/kvm-util-Drop-superfluous-conditionals-around-g_free.patch new file mode 100644 index 0000000..47cfd5c --- /dev/null +++ b/SOURCES/kvm-util-Drop-superfluous-conditionals-around-g_free.patch @@ -0,0 +1,177 @@ +From 7c92e003601bf83d662f5e21a4bc095de875e906 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:20 +0200 +Subject: [PATCH 2/7] util: Drop superfluous conditionals around g_free() + +Message-id: <1441735585-23432-3-git-send-email-armbru@redhat.com> +Patchwork-id: 67707 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 2/7] util: Drop superfluous conditionals around g_free() +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Reviewed-by: Fam Zheng +Signed-off-by: Michael Tokarev +(cherry picked from commit 44c2286b5df1f50fc9fedabd7b1a5a8022e583fc) +Signed-off-by: Miroslav Rezanina +--- + util/uri.c | 48 ++++++++++++++++++++++-------------------------- + 1 file changed, 22 insertions(+), 26 deletions(-) + +diff --git a/util/uri.c b/util/uri.c +index bbf2832..01dc09e 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -225,7 +225,7 @@ rfc3986_parse_scheme(URI *uri, const char **str) { + while (ISA_ALPHA(cur) || ISA_DIGIT(cur) || + (*cur == '+') || (*cur == '-') || (*cur == '.')) cur++; + if (uri != NULL) { +- if (uri->scheme != NULL) g_free(uri->scheme); ++ g_free(uri->scheme); + uri->scheme = g_strndup(*str, cur - *str); + } + *str = cur; +@@ -262,8 +262,7 @@ rfc3986_parse_fragment(URI *uri, const char **str) + ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur)))) + NEXT(cur); + if (uri != NULL) { +- if (uri->fragment != NULL) +- g_free(uri->fragment); ++ g_free(uri->fragment); + if (uri->cleanup & 2) + uri->fragment = g_strndup(*str, cur - *str); + else +@@ -298,8 +297,7 @@ rfc3986_parse_query(URI *uri, const char **str) + ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur)))) + NEXT(cur); + if (uri != NULL) { +- if (uri->query != NULL) +- g_free (uri->query); ++ g_free(uri->query); + uri->query = g_strndup (*str, cur - *str); + } + *str = cur; +@@ -360,7 +358,7 @@ rfc3986_parse_user_info(URI *uri, const char **str) + NEXT(cur); + if (*cur == '@') { + if (uri != NULL) { +- if (uri->user != NULL) g_free(uri->user); ++ g_free(uri->user); + if (uri->cleanup & 2) + uri->user = g_strndup(*str, cur - *str); + else +@@ -473,9 +471,9 @@ not_ipv4: + NEXT(cur); + found: + if (uri != NULL) { +- if (uri->authority != NULL) g_free(uri->authority); ++ g_free(uri->authority); + uri->authority = NULL; +- if (uri->server != NULL) g_free(uri->server); ++ g_free(uri->server); + if (cur != host) { + if (uri->cleanup & 2) + uri->server = g_strndup(host, cur - host); +@@ -585,7 +583,7 @@ rfc3986_parse_path_ab_empty(URI *uri, const char **str) + if (ret != 0) return(ret); + } + if (uri != NULL) { +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + if (*str != cur) { + if (uri->cleanup & 2) + uri->path = g_strndup(*str, cur - *str); +@@ -631,7 +629,7 @@ rfc3986_parse_path_absolute(URI *uri, const char **str) + } + } + if (uri != NULL) { +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + if (cur != *str) { + if (uri->cleanup & 2) + uri->path = g_strndup(*str, cur - *str); +@@ -673,7 +671,7 @@ rfc3986_parse_path_rootless(URI *uri, const char **str) + if (ret != 0) return(ret); + } + if (uri != NULL) { +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + if (cur != *str) { + if (uri->cleanup & 2) + uri->path = g_strndup(*str, cur - *str); +@@ -715,7 +713,7 @@ rfc3986_parse_path_no_scheme(URI *uri, const char **str) + if (ret != 0) return(ret); + } + if (uri != NULL) { +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + if (cur != *str) { + if (uri->cleanup & 2) + uri->path = g_strndup(*str, cur - *str); +@@ -769,7 +767,7 @@ rfc3986_parse_hier_part(URI *uri, const char **str) + } else { + /* path-empty is effectively empty */ + if (uri != NULL) { +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + uri->path = NULL; + } + } +@@ -812,7 +810,7 @@ rfc3986_parse_relative_ref(URI *uri, const char *str) { + } else { + /* path-empty is effectively empty */ + if (uri != NULL) { +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + uri->path = NULL; + } + } +@@ -1285,21 +1283,21 @@ static void + uri_clean(URI *uri) { + if (uri == NULL) return; + +- if (uri->scheme != NULL) g_free(uri->scheme); ++ g_free(uri->scheme); + uri->scheme = NULL; +- if (uri->server != NULL) g_free(uri->server); ++ g_free(uri->server); + uri->server = NULL; +- if (uri->user != NULL) g_free(uri->user); ++ g_free(uri->user); + uri->user = NULL; +- if (uri->path != NULL) g_free(uri->path); ++ g_free(uri->path); + uri->path = NULL; +- if (uri->fragment != NULL) g_free(uri->fragment); ++ g_free(uri->fragment); + uri->fragment = NULL; +- if (uri->opaque != NULL) g_free(uri->opaque); ++ g_free(uri->opaque); + uri->opaque = NULL; +- if (uri->authority != NULL) g_free(uri->authority); ++ g_free(uri->authority); + uri->authority = NULL; +- if (uri->query != NULL) g_free(uri->query); ++ g_free(uri->query); + uri->query = NULL; + } + +@@ -1711,10 +1709,8 @@ uri_resolve(const char *uri, const char *base) { + /* + * the base fragment must be ignored + */ +- if (bas->fragment != NULL) { +- g_free(bas->fragment); +- bas->fragment = NULL; +- } ++ g_free(bas->fragment); ++ bas->fragment = NULL; + val = uri_to_string(bas); + goto done; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-Fix-MIN_NON_ZERO.patch b/SOURCES/kvm-util-Fix-MIN_NON_ZERO.patch new file mode 100644 index 0000000..6b2577a --- /dev/null +++ b/SOURCES/kvm-util-Fix-MIN_NON_ZERO.patch @@ -0,0 +1,46 @@ +From 756b23c15387acefe4139831c2f3c8a5f3d41bb2 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 18 Jul 2016 01:32:10 +0200 +Subject: [PATCH 7/7] util: Fix MIN_NON_ZERO + +RH-Author: Fam Zheng +Message-id: <1468805530-19033-1-git-send-email-famz@redhat.com> +Patchwork-id: 71200 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 7/6] util: Fix MIN_NON_ZERO +Bugzilla: 1318199 +RH-Acked-by: John Snow +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +MIN_NON_ZERO(1, 0) is evaluated to 0. Rewrite the macro to fix it. + +Reported-by: Miroslav Rezanina +Signed-off-by: Fam Zheng +Message-Id: <1468306113-847-1-git-send-email-famz@redhat.com> +Reviewed-by: Eric Blake +Signed-off-by: Paolo Bonzini +(cherry picked from commit d27ba624aa1dfe5c07cc01200d95967ffce905d9) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + include/qemu/osdep.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h +index c47a600..5ca05bc 100644 +--- a/include/qemu/osdep.h ++++ b/include/qemu/osdep.h +@@ -71,7 +71,8 @@ typedef signed int int_fast16_t; + /* Minimum function that returns zero only iff both values are zero. + * Intended for use with unsigned values only. */ + #ifndef MIN_NON_ZERO +-#define MIN_NON_ZERO(a, b) (((a) != 0 && (a) < (b)) ? (a) : (b)) ++#define MIN_NON_ZERO(a, b) ((a) == 0 ? (b) : \ ++ ((b) == 0 ? (a) : (MIN(a, b)))) + #endif + + #ifndef ROUND_UP +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-Fuse-g_malloc-memset-into-g_new0.patch b/SOURCES/kvm-util-Fuse-g_malloc-memset-into-g_new0.patch new file mode 100644 index 0000000..b2bd7cf --- /dev/null +++ b/SOURCES/kvm-util-Fuse-g_malloc-memset-into-g_new0.patch @@ -0,0 +1,40 @@ +From 26622e239160e7dc9811c944d7567f0d8fbb0040 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:21 +0200 +Subject: [PATCH 3/7] util: Fuse g_malloc(); memset() into g_new0() + +Message-id: <1441735585-23432-4-git-send-email-armbru@redhat.com> +Patchwork-id: 67704 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 3/7] util: Fuse g_malloc(); memset() into g_new0() +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +Signed-off-by: Markus Armbruster +Reviewed-by: Eric Blake +Reviewed-by: Fam Zheng +Signed-off-by: Michael Tokarev +(cherry picked from commit 9be71be5bda27b068176ab9b982cf3d7d41a4acd) +Signed-off-by: Miroslav Rezanina +--- + util/uri.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/util/uri.c b/util/uri.c +index 01dc09e..918d235 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -1004,8 +1004,7 @@ URI * + uri_new(void) { + URI *ret; + +- ret = (URI *) g_malloc(sizeof(URI)); +- memset(ret, 0, sizeof(URI)); ++ ret = g_new0(URI, 1); + return(ret); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-Split-out-exec_dir-from-os_find_datadir.patch b/SOURCES/kvm-util-Split-out-exec_dir-from-os_find_datadir.patch new file mode 100644 index 0000000..c076d6e --- /dev/null +++ b/SOURCES/kvm-util-Split-out-exec_dir-from-os_find_datadir.patch @@ -0,0 +1,358 @@ +From cf0bb22a1d897cc225f14489eaad0dd02ec4a6e3 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 16 Jul 2014 02:20:25 -0500 +Subject: [CHANGE 25/29] util: Split out exec_dir from os_find_datadir +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405477228-11490-2-git-send-email-famz@redhat.com> +Patchwork-id: 59920 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/4] util: Split out exec_dir from os_find_datadir +Bugzilla: 1017685 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +From: Miroslav Rezanina + +Upstream: 10f5bff622cad71645e22c027b77ac31e51008ef + +With this change, main() calls qemu_init_exec_dir and uses argv[0] to +init exec_dir. The saved value can be retrieved with +qemu_get_exec_dir later. It will be reused by module loading. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini + +This is manual backport. Following change is handling -Werror=strict-prototypes +error (function declaration isn't a prototype): + +Upstream: char *os_find_datadir(); +RHEL: char *os_find_datadir(void); + +Signed-off-by: Miroslav Rezanina +Signed-off-by: Fam Zheng +--- + include/qemu-common.h | 2 +- + include/qemu/osdep.h | 9 +++++++++ + os-posix.c | 42 +++++++-------------------------------- + os-win32.c | 21 ++------------------ + qemu-img.c | 1 + + qemu-io.c | 1 + + qemu-nbd.c | 1 + + util/oslib-posix.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ + util/oslib-win32.c | 30 ++++++++++++++++++++++++++++ + vl.c | 3 ++- + 10 files changed, 108 insertions(+), 56 deletions(-) + +Signed-off-by: jen +--- + include/qemu-common.h | 2 +- + include/qemu/osdep.h | 9 +++++++++ + os-posix.c | 42 +++++++-------------------------------- + os-win32.c | 21 ++------------------ + qemu-img.c | 1 + + qemu-io.c | 1 + + qemu-nbd.c | 1 + + util/oslib-posix.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ + util/oslib-win32.c | 30 ++++++++++++++++++++++++++++ + vl.c | 3 ++- + 10 files changed, 108 insertions(+), 56 deletions(-) + +diff --git a/include/qemu-common.h b/include/qemu-common.h +index 73c6419..aee85e3 100644 +--- a/include/qemu-common.h ++++ b/include/qemu-common.h +@@ -360,7 +360,7 @@ char *qemu_find_file(int type, const char *name); + + /* OS specific functions */ + void os_setup_early_signal_handling(void); +-char *os_find_datadir(const char *argv0); ++char *os_find_datadir(void); + void os_parse_cmd_args(int index, const char *optarg); + void os_pidfile_error(void); + +diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h +index 26136f1..7a5ae28 100644 +--- a/include/qemu/osdep.h ++++ b/include/qemu/osdep.h +@@ -215,4 +215,13 @@ bool fips_get_state(void); + */ + char *qemu_get_local_state_pathname(const char *relative_pathname); + ++/* Find program directory, and save it for later usage with ++ * qemu_get_exec_dir(). ++ * Try OS specific API first, if not working, parse from argv0. */ ++void qemu_init_exec_dir(const char *argv0); ++ ++/* Get the saved exec dir. ++ * Caller needs to release the returned string by g_free() */ ++char *qemu_get_exec_dir(void); ++ + #endif +diff --git a/os-posix.c b/os-posix.c +index 3a4678a..7cfca4b 100644 +--- a/os-posix.c ++++ b/os-posix.c +@@ -84,46 +84,17 @@ void os_setup_signal_handling(void) + running from the build tree this will be "$bindir/../pc-bios". */ + #define SHARE_SUFFIX "/share/qemu-kvm" + #define BUILD_SUFFIX "/pc-bios" +-char *os_find_datadir(const char *argv0) ++char *os_find_datadir(void) + { +- char *dir; +- char *p = NULL; ++ char *dir, *exec_dir; + char *res; +- char buf[PATH_MAX]; + size_t max_len; + +-#if defined(__linux__) +- { +- int len; +- len = readlink("/proc/self/exe", buf, sizeof(buf) - 1); +- if (len > 0) { +- buf[len] = 0; +- p = buf; +- } ++ exec_dir = qemu_get_exec_dir(); ++ if (exec_dir == NULL) { ++ return NULL; + } +-#elif defined(__FreeBSD__) +- { +- static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; +- size_t len = sizeof(buf) - 1; +- +- *buf = '\0'; +- if (!sysctl(mib, ARRAY_SIZE(mib), buf, &len, NULL, 0) && +- *buf) { +- buf[sizeof(buf) - 1] = '\0'; +- p = buf; +- } +- } +-#endif +- /* If we don't have any way of figuring out the actual executable +- location then try argv[0]. */ +- if (!p) { +- p = realpath(argv0, buf); +- if (!p) { +- return NULL; +- } +- } +- dir = dirname(p); +- dir = dirname(dir); ++ dir = dirname(exec_dir); + + max_len = strlen(dir) + + MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1; +@@ -137,6 +108,7 @@ char *os_find_datadir(const char *argv0) + } + } + ++ g_free(exec_dir); + return res; + } + #undef SHARE_SUFFIX +diff --git a/os-win32.c b/os-win32.c +index 50b7f6f..5f95caa 100644 +--- a/os-win32.c ++++ b/os-win32.c +@@ -84,26 +84,9 @@ void os_setup_early_signal_handling(void) + } + + /* Look for support files in the same directory as the executable. */ +-char *os_find_datadir(const char *argv0) ++char *os_find_datadir(void) + { +- char *p; +- char buf[MAX_PATH]; +- DWORD len; +- +- len = GetModuleFileName(NULL, buf, sizeof(buf) - 1); +- if (len == 0) { +- return NULL; +- } +- +- buf[len] = 0; +- p = buf + len - 1; +- while (p != buf && *p != '\\') +- p--; +- *p = 0; +- if (access(buf, R_OK) == 0) { +- return g_strdup(buf); +- } +- return NULL; ++ return qemu_get_exec_dir(); + } + + void os_set_line_buffering(void) +diff --git a/qemu-img.c b/qemu-img.c +index dcce380..ed1799c 100644 +--- a/qemu-img.c ++++ b/qemu-img.c +@@ -2726,6 +2726,7 @@ int main(int argc, char **argv) + #endif + + error_set_progname(argv[0]); ++ qemu_init_exec_dir(argv[0]); + + qemu_init_main_loop(); + bdrv_init(); +diff --git a/qemu-io.c b/qemu-io.c +index 0959178..bbe2518 100644 +--- a/qemu-io.c ++++ b/qemu-io.c +@@ -2008,6 +2008,7 @@ int main(int argc, char **argv) + #endif + + progname = basename(argv[0]); ++ qemu_init_exec_dir(argv[0]); + + while ((c = getopt_long(argc, argv, sopt, lopt, &opt_index)) != -1) { + switch (c) { +diff --git a/qemu-nbd.c b/qemu-nbd.c +index c1b395d..207a610 100644 +--- a/qemu-nbd.c ++++ b/qemu-nbd.c +@@ -363,6 +363,7 @@ int main(int argc, char **argv) + memset(&sa_sigterm, 0, sizeof(sa_sigterm)); + sa_sigterm.sa_handler = termsig_handler; + sigaction(SIGTERM, &sa_sigterm, NULL); ++ qemu_init_exec_dir(argv[0]); + + while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { + switch (ch) { +diff --git a/util/oslib-posix.c b/util/oslib-posix.c +index 2c756c7..fef840a 100644 +--- a/util/oslib-posix.c ++++ b/util/oslib-posix.c +@@ -54,6 +54,7 @@ extern int daemon(int, int); + #include "trace.h" + #include "qemu/sockets.h" + #include ++#include + + #ifdef CONFIG_LINUX + #include +@@ -244,3 +245,56 @@ qemu_get_local_state_pathname(const char *relative_pathname) + return g_strdup_printf("%s/%s", CONFIG_QEMU_LOCALSTATEDIR, + relative_pathname); + } ++ ++static char exec_dir[PATH_MAX]; ++ ++void qemu_init_exec_dir(const char *argv0) ++{ ++ char *dir; ++ char *p = NULL; ++ char buf[PATH_MAX]; ++ ++ assert(!exec_dir[0]); ++ ++#if defined(__linux__) ++ { ++ int len; ++ len = readlink("/proc/self/exe", buf, sizeof(buf) - 1); ++ if (len > 0) { ++ buf[len] = 0; ++ p = buf; ++ } ++ } ++#elif defined(__FreeBSD__) ++ { ++ static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; ++ size_t len = sizeof(buf) - 1; ++ ++ *buf = '\0'; ++ if (!sysctl(mib, ARRAY_SIZE(mib), buf, &len, NULL, 0) && ++ *buf) { ++ buf[sizeof(buf) - 1] = '\0'; ++ p = buf; ++ } ++ } ++#endif ++ /* If we don't have any way of figuring out the actual executable ++ location then try argv[0]. */ ++ if (!p) { ++ if (!argv0) { ++ return; ++ } ++ p = realpath(argv0, buf); ++ if (!p) { ++ return; ++ } ++ } ++ dir = dirname(p); ++ ++ pstrcpy(exec_dir, sizeof(exec_dir), dir); ++} ++ ++char *qemu_get_exec_dir(void) ++{ ++ return g_strdup(exec_dir); ++} +diff --git a/util/oslib-win32.c b/util/oslib-win32.c +index 983b7a2..332e743 100644 +--- a/util/oslib-win32.c ++++ b/util/oslib-win32.c +@@ -179,3 +179,33 @@ qemu_get_local_state_pathname(const char *relative_pathname) + return g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", base_path, + relative_pathname); + } ++ ++static char exec_dir[PATH_MAX]; ++ ++void qemu_init_exec_dir(const char *argv0) ++{ ++ ++ char *p; ++ char buf[MAX_PATH]; ++ DWORD len; ++ ++ len = GetModuleFileName(NULL, buf, sizeof(buf) - 1); ++ if (len == 0) { ++ return; ++ } ++ ++ buf[len] = 0; ++ p = buf + len - 1; ++ while (p != buf && *p != '\\') { ++ p--; ++ } ++ *p = 0; ++ if (access(buf, R_OK) == 0) { ++ pstrcpy(exec_dir, sizeof(exec_dir), buf); ++ } ++} ++ ++char *qemu_get_exec_dir(void) ++{ ++ return g_strdup(exec_dir); ++} +diff --git a/vl.c b/vl.c +index ca3d498..ead90ba 100644 +--- a/vl.c ++++ b/vl.c +@@ -2842,6 +2842,7 @@ int main(int argc, char **argv, char **envp) + + atexit(qemu_run_exit_notifiers); + error_set_progname(argv[0]); ++ qemu_init_exec_dir(argv[0]); + + g_mem_set_vtable(&mem_trace); + if (!g_thread_supported()) { +@@ -3880,7 +3881,7 @@ int main(int argc, char **argv, char **envp) + /* If no data_dir is specified then try to find it relative to the + executable path. */ + if (data_dir_idx < ARRAY_SIZE(data_dir)) { +- data_dir[data_dir_idx] = os_find_datadir(argv[0]); ++ data_dir[data_dir_idx] = os_find_datadir(); + if (data_dir[data_dir_idx] != NULL) { + data_dir_idx++; + } +-- +1.9.3 + diff --git a/SOURCES/kvm-util-introduce-MIN_NON_ZERO.patch b/SOURCES/kvm-util-introduce-MIN_NON_ZERO.patch new file mode 100644 index 0000000..38e74e5 --- /dev/null +++ b/SOURCES/kvm-util-introduce-MIN_NON_ZERO.patch @@ -0,0 +1,52 @@ +From 6e14ac55a7b40804cf69de560f38561214129b07 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 11 Jul 2016 05:33:34 +0200 +Subject: [PATCH 1/7] util: introduce MIN_NON_ZERO + +RH-Author: Fam Zheng +Message-id: <1468215219-30793-2-git-send-email-famz@redhat.com> +Patchwork-id: 71105 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/6] util: introduce MIN_NON_ZERO +Bugzilla: 1318199 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow +RH-Acked-by: Paolo Bonzini + +From: Peter Lieven + +at least in block layer we have the case of limits being defined for a +BlockDriverState. However, in this context often zero (0) has the special +meanining of undefined which means no limit. If two of those limits are +combined and the minimum is needed the minimum function should only return +zero if both parameters are zero. + +Signed-off-by: Peter Lieven +Reviewed-by: Max Reitz +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit ac3a8726644d4783eacf54212d23db01d1d30044) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + include/qemu/osdep.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h +index 8984da0..c47a600 100644 +--- a/include/qemu/osdep.h ++++ b/include/qemu/osdep.h +@@ -68,6 +68,12 @@ typedef signed int int_fast16_t; + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) + #endif + ++/* Minimum function that returns zero only iff both values are zero. ++ * Intended for use with unsigned values only. */ ++#ifndef MIN_NON_ZERO ++#define MIN_NON_ZERO(a, b) (((a) != 0 && (a) < (b)) ? (a) : (b)) ++#endif ++ + #ifndef ROUND_UP + #define ROUND_UP(n,d) (((n) + (d) - 1) & -(d)) + #endif +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-uri-Add-overflow-check-to-rfc3986_parse_port.patch b/SOURCES/kvm-util-uri-Add-overflow-check-to-rfc3986_parse_port.patch new file mode 100644 index 0000000..2314d12 --- /dev/null +++ b/SOURCES/kvm-util-uri-Add-overflow-check-to-rfc3986_parse_port.patch @@ -0,0 +1,68 @@ +From 8880d01298ccf89558b95b948984647959d862ae Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:25 +0200 +Subject: [PATCH 7/7] util/uri: Add overflow check to rfc3986_parse_port + +Message-id: <1441735585-23432-8-git-send-email-armbru@redhat.com> +Patchwork-id: 67705 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 7/7] util/uri: Add overflow check to rfc3986_parse_port +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +From: Max Reitz + +And while at it, replace tabs by eight spaces in this function. + +Signed-off-by: Max Reitz +Message-Id: <1424887718-10800-2-git-send-email-mreitz@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 2b21233061696feed434317a70e0a8b74f956ec8) +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + util/uri.c | 24 ++++++++++++++---------- + 1 file changed, 14 insertions(+), 10 deletions(-) + +diff --git a/util/uri.c b/util/uri.c +index 1cfd78b..550b984 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -320,19 +320,23 @@ static int + rfc3986_parse_port(URI *uri, const char **str) + { + const char *cur = *str; ++ int port = 0; + + if (ISA_DIGIT(cur)) { +- if (uri != NULL) +- uri->port = 0; +- while (ISA_DIGIT(cur)) { +- if (uri != NULL) +- uri->port = uri->port * 10 + (*cur - '0'); +- cur++; +- } +- *str = cur; +- return(0); ++ while (ISA_DIGIT(cur)) { ++ port = port * 10 + (*cur - '0'); ++ if (port > 65535) { ++ return 1; ++ } ++ cur++; ++ } ++ if (uri) { ++ uri->port = port; ++ } ++ *str = cur; ++ return 0; + } +- return(1); ++ return 1; + } + + /** +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-uri-URI-member-path-can-be-null-compare-more-ca.patch b/SOURCES/kvm-util-uri-URI-member-path-can-be-null-compare-more-ca.patch new file mode 100644 index 0000000..eb44071 --- /dev/null +++ b/SOURCES/kvm-util-uri-URI-member-path-can-be-null-compare-more-ca.patch @@ -0,0 +1,64 @@ +From 81278fd6c82c8a1c22c65f1ae1ea048d2473dbfe Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:24 +0200 +Subject: [PATCH 6/7] util/uri: URI member path can be null, compare more + carfully + +Message-id: <1441735585-23432-7-git-send-email-armbru@redhat.com> +Patchwork-id: 67709 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 6/7] util/uri: URI member path can be null, compare more carfully +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +uri_resolve_relative() calls strcmp(bas->path, ref->path). However, +either argument could be null! Evidence: the code checks for null +after the comparison. Spotted by Coverity. + +I suspect this was screwed up when we stole the code from libxml2. +There the conditional reads + + xmlStrEqual((xmlChar *)bas->path, (xmlChar *)ref->path) + +with + + int + xmlStrEqual(const xmlChar *str1, const xmlChar *str2) { + if (str1 == str2) return(1); + if (str1 == NULL) return(0); + if (str2 == NULL) return(0); + do { + if (*str1++ != *str2) return(0); + } while (*str2++); + return(1); + } + +Fix by replicating libxml2's logic faithfully. + +Cc: Paolo Bonzini +Signed-off-by: Markus Armbruster +Signed-off-by: Michael Tokarev +(cherry picked from commit afb30dde3ad71349fc65726946d58e5d3c61f8af) +Signed-off-by: Miroslav Rezanina +--- + util/uri.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/util/uri.c b/util/uri.c +index b9a7b54..1cfd78b 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -1935,7 +1935,8 @@ uri_resolve_relative (const char *uri, const char * base) + val = g_strdup (uri); + goto done; + } +- if (!strcmp(bas->path, ref->path)) { ++ if (bas->path == ref->path || ++ (bas->path && ref->path && !strcmp(bas->path, ref->path))) { + val = g_strdup(""); + goto done; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-uri-realloc2n-can-t-fail-drop-dead-error-handli.patch b/SOURCES/kvm-util-uri-realloc2n-can-t-fail-drop-dead-error-handli.patch new file mode 100644 index 0000000..b1317f8 --- /dev/null +++ b/SOURCES/kvm-util-uri-realloc2n-can-t-fail-drop-dead-error-handli.patch @@ -0,0 +1,180 @@ +From 3704c5a2d54b2e4e492ce7dc8606fe1dc4a2c547 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:23 +0200 +Subject: [PATCH 5/7] util/uri: realloc2n() can't fail, drop dead error + handling + +Message-id: <1441735585-23432-6-git-send-email-armbru@redhat.com> +Patchwork-id: 67710 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 5/7] util/uri: realloc2n() can't fail, drop dead error handling +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +Signed-off-by: Markus Armbruster +Signed-off-by: Michael Tokarev +(cherry picked from commit afd5ea3671f936f511015a71af9cd0ed23788515) +Signed-off-by: Miroslav Rezanina +--- + util/uri.c | 22 ---------------------- + 1 file changed, 22 deletions(-) + +diff --git a/util/uri.c b/util/uri.c +index aa39694..b9a7b54 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -1049,14 +1049,12 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; + } + if (len >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = ':'; +@@ -1066,7 +1064,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + if (IS_RESERVED(*(p)) || IS_UNRESERVED(*(p))) +@@ -1083,7 +1080,6 @@ uri_to_string(URI *uri) { + if (uri->server != NULL) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '/'; +@@ -1093,7 +1089,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + if ((IS_UNRESERVED(*(p))) || +@@ -1112,7 +1107,6 @@ uri_to_string(URI *uri) { + } + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '@'; +@@ -1121,7 +1115,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; +@@ -1129,7 +1122,6 @@ uri_to_string(URI *uri) { + if (uri->port > 0) { + if (len + 10 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + len += snprintf(&ret[len], max - len, ":%d", uri->port); +@@ -1137,7 +1129,6 @@ uri_to_string(URI *uri) { + } else if (uri->authority != NULL) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '/'; +@@ -1146,7 +1137,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + if ((IS_UNRESERVED(*(p))) || +@@ -1165,7 +1155,6 @@ uri_to_string(URI *uri) { + } else if (uri->scheme != NULL) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '/'; +@@ -1185,7 +1174,6 @@ uri_to_string(URI *uri) { + (!strcmp(uri->scheme, "file"))) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; +@@ -1195,7 +1183,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + if ((IS_UNRESERVED(*(p))) || ((*(p) == '/')) || +@@ -1215,7 +1202,6 @@ uri_to_string(URI *uri) { + if (uri->query != NULL) { + if (len + 1 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '?'; +@@ -1223,7 +1209,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len + 1 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = *p++; +@@ -1233,7 +1218,6 @@ uri_to_string(URI *uri) { + if (uri->fragment != NULL) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len++] = '#'; +@@ -1241,7 +1225,6 @@ uri_to_string(URI *uri) { + while (*p != 0) { + if (len + 3 >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) +@@ -1257,15 +1240,10 @@ uri_to_string(URI *uri) { + } + if (len >= max) { + temp = realloc2n(ret, &max); +- if (temp == NULL) goto mem_error; + ret = temp; + } + ret[len] = 0; + return(ret); +- +-mem_error: +- g_free(ret); +- return(NULL); + } + + /** +-- +1.8.3.1 + diff --git a/SOURCES/kvm-util-uri-uri_new-can-t-fail-drop-dead-error-handling.patch b/SOURCES/kvm-util-uri-uri_new-can-t-fail-drop-dead-error-handling.patch new file mode 100644 index 0000000..ca780f8 --- /dev/null +++ b/SOURCES/kvm-util-uri-uri_new-can-t-fail-drop-dead-error-handling.patch @@ -0,0 +1,113 @@ +From 9a2e25a1a72443b00a54fb1660c818856c2569c6 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 8 Sep 2015 18:06:22 +0200 +Subject: [PATCH 4/7] util/uri: uri_new() can't fail, drop dead error handling + +Message-id: <1441735585-23432-5-git-send-email-armbru@redhat.com> +Patchwork-id: 67703 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 4/7] util/uri: uri_new() can't fail, drop dead error handling +Bugzilla: 1218919 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Dr. David Alan Gilbert + +Signed-off-by: Markus Armbruster +Signed-off-by: Michael Tokarev +(cherry picked from commit c89c6e80a66aac16d7b14ff21e0aaeb99ebfe165) +Signed-off-by: Miroslav Rezanina +--- + util/uri.c | 36 +++++++++++------------------------- + 1 file changed, 11 insertions(+), 25 deletions(-) + +diff --git a/util/uri.c b/util/uri.c +index 918d235..aa39694 100644 +--- a/util/uri.c ++++ b/util/uri.c +@@ -928,12 +928,10 @@ uri_parse(const char *str) { + if (str == NULL) + return(NULL); + uri = uri_new(); +- if (uri != NULL) { +- ret = rfc3986_parse_uri_reference(uri, str); +- if (ret) { +- uri_free(uri); +- return(NULL); +- } ++ ret = rfc3986_parse_uri_reference(uri, str); ++ if (ret) { ++ uri_free(uri); ++ return(NULL); + } + return(uri); + } +@@ -974,15 +972,13 @@ uri_parse_raw(const char *str, int raw) { + if (str == NULL) + return(NULL); + uri = uri_new(); +- if (uri != NULL) { +- if (raw) { +- uri->cleanup |= 2; +- } +- ret = uri_parse_into(uri, str); +- if (ret) { +- uri_free(uri); +- return(NULL); +- } ++ if (raw) { ++ uri->cleanup |= 2; ++ } ++ ret = uri_parse_into(uri, str); ++ if (ret) { ++ uri_free(uri); ++ return(NULL); + } + return(uri); + } +@@ -1675,8 +1671,6 @@ uri_resolve(const char *uri, const char *base) { + else { + if (*uri) { + ref = uri_new(); +- if (ref == NULL) +- goto done; + ret = uri_parse_into(ref, uri); + } + else +@@ -1695,8 +1689,6 @@ uri_resolve(const char *uri, const char *base) { + ret = -1; + else { + bas = uri_new(); +- if (bas == NULL) +- goto done; + ret = uri_parse_into(bas, base); + } + if (ret != 0) { +@@ -1727,8 +1719,6 @@ uri_resolve(const char *uri, const char *base) { + * document. + */ + res = uri_new(); +- if (res == NULL) +- goto done; + if ((ref->scheme == NULL) && (ref->path == NULL) && + ((ref->authority == NULL) && (ref->server == NULL))) { + res->scheme = g_strdup(bas->scheme); +@@ -1933,8 +1923,6 @@ uri_resolve_relative (const char *uri, const char * base) + * First parse URI into a standard form + */ + ref = uri_new (); +- if (ref == NULL) +- return NULL; + /* If URI not already in "relative" form */ + if (uri[0] != '.') { + ret = uri_parse_into (ref, uri); +@@ -1951,8 +1939,6 @@ uri_resolve_relative (const char *uri, const char * base) + goto done; + } + bas = uri_new (); +- if (bas == NULL) +- goto done; + if (base[0] != '.') { + ret = uri_parse_into (bas, base); + if (ret != 0) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vbe-make-bochs-dispi-interface-return-the-correct-me.patch b/SOURCES/kvm-vbe-make-bochs-dispi-interface-return-the-correct-me.patch new file mode 100644 index 0000000..cca5fec --- /dev/null +++ b/SOURCES/kvm-vbe-make-bochs-dispi-interface-return-the-correct-me.patch @@ -0,0 +1,91 @@ +From 2e02d49769291dda0436ec3d113c5b4917037f3f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 15 Sep 2014 13:08:20 +0200 +Subject: [PATCH 1/4] vbe: make bochs dispi interface return the correct memory size with qxl + +Message-id: <1410786503-19794-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 61135 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/4] vbe: make bochs dispi interface return the correct memory size with qxl +Bugzilla: 1139118 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +VgaState->vram_size is the size of the pci bar. In case of qxl not the +whole pci bar can be used as vga framebuffer. Add a new variable +vbe_size to handle that case. By default (if unset) it equals +vram_size, but qxl can set vbe_size to something else. + +This makes sure VBE_DISPI_INDEX_VIDEO_MEMORY_64K returns correct results +and sanity checks are done with the correct size too. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +(cherry picked from commit 54a85d462447c1cb8a1638578a7fd086350b4d2d) +Signed-off-by: Miroslav Rezanina +--- + hw/display/qxl.c | 1 + + hw/display/vga.c | 7 +++++-- + hw/display/vga_int.h | 1 + + 3 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/hw/display/qxl.c b/hw/display/qxl.c +index 6f8adc8..f11210c 100644 +--- a/hw/display/qxl.c ++++ b/hw/display/qxl.c +@@ -2056,6 +2056,7 @@ static int qxl_init_primary(PCIDevice *dev) + + qxl->id = 0; + qxl_init_ramsize(qxl); ++ vga->vbe_size = qxl->vgamem_size; + vga->vram_size_mb = qxl->vga.vram_size >> 20; + vga_common_init(vga); + vga_init(vga, pci_address_space(dev), pci_address_space_io(dev), false); +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 21a108d..d703d90 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -613,7 +613,7 @@ uint32_t vbe_ioport_read_data(void *opaque, uint32_t addr) + val = s->vbe_regs[s->vbe_index]; + } + } else if (s->vbe_index == VBE_DISPI_INDEX_VIDEO_MEMORY_64K) { +- val = s->vram_size / (64 * 1024); ++ val = s->vbe_size / (64 * 1024); + } else { + val = 0; + } +@@ -752,7 +752,7 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + line_offset = w >> 1; + else + line_offset = w * ((s->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3); +- h = s->vram_size / line_offset; ++ h = s->vbe_size / line_offset; + /* XXX: support weird bochs semantics ? */ + if (h < s->vbe_regs[VBE_DISPI_INDEX_YRES]) + return; +@@ -2290,6 +2290,9 @@ void vga_common_init(VGACommonState *s) + s->vram_size <<= 1; + } + s->vram_size_mb = s->vram_size >> 20; ++ if (!s->vbe_size) { ++ s->vbe_size = s->vram_size; ++ } + + s->is_vbe_vmstate = 1; + memory_region_init_ram(&s->vram, "vga.vram", s->vram_size); +diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h +index 66f9f3c..5a2f466 100644 +--- a/hw/display/vga_int.h ++++ b/hw/display/vga_int.h +@@ -93,6 +93,7 @@ typedef struct VGACommonState { + MemoryRegion vram_vbe; + uint32_t vram_size; + uint32_t vram_size_mb; /* property */ ++ uint32_t vbe_size; + uint32_t latch; + MemoryRegion *chain4_alias; + uint8_t sr_index; +-- +1.7.1 + diff --git a/SOURCES/kvm-vbe-rework-sanity-checks.patch b/SOURCES/kvm-vbe-rework-sanity-checks.patch new file mode 100644 index 0000000..e90d0b2 --- /dev/null +++ b/SOURCES/kvm-vbe-rework-sanity-checks.patch @@ -0,0 +1,246 @@ +From a0cd3ce8aa79a08cfc41ca5926889ca591ac5cd1 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 15 Sep 2014 13:08:21 +0200 +Subject: [PATCH 2/4] vbe: rework sanity checks + +Message-id: <1410786503-19794-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 61137 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 2/4] vbe: rework sanity checks +Bugzilla: 1139118 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Plug a bunch of holes in the bochs dispi interface parameter checking. +Add a function doing verification on all registers. Call that +unconditionally on every register write. That way we should catch +everything, even changing one register affecting the valid range of +another register. + +Some of the holes have been added by commit +e9c6149f6ae6873f14a12eea554925b6aa4c4dec. Before that commit the +maximum possible framebuffer (VBE_DISPI_MAX_XRES * VBE_DISPI_MAX_YRES * +32 bpp) has been smaller than the qemu vga memory (8MB) and the checking +for VBE_DISPI_MAX_XRES + VBE_DISPI_MAX_YRES + VBE_DISPI_MAX_BPP was ok. + +Some of the holes have been there forever, such as +VBE_DISPI_INDEX_X_OFFSET and VBE_DISPI_INDEX_Y_OFFSET register writes +lacking any verification. + +Security impact: + +(1) Guest can make the ui (gtk/vnc/...) use memory rages outside the vga +frame buffer as source -> host memory leak. Memory isn't leaked to +the guest but to the vnc client though. + +(2) Qemu will segfault in case the memory range happens to include +unmapped areas -> Guest can DoS itself. + +The guest can not modify host memory, so I don't think this can be used +by the guest to escape. + +CVE-2014-3615 + +Cc: qemu-stable@nongnu.org +Cc: secalert@redhat.com +Signed-off-by: Gerd Hoffmann +Reviewed-by: Laszlo Ersek +(cherry picked from commit c1b886c45dc70f247300f549dce9833f3fa2def5) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 154 +++++++++++++++++++++++++++++++++--------------------- + 1 files changed, 95 insertions(+), 59 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index d703d90..de5d63d 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -579,6 +579,93 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val) + } + } + ++/* ++ * Sanity check vbe register writes. ++ * ++ * As we don't have a way to signal errors to the guest in the bochs ++ * dispi interface we'll go adjust the registers to the closest valid ++ * value. ++ */ ++static void vbe_fixup_regs(VGACommonState *s) ++{ ++ uint16_t *r = s->vbe_regs; ++ uint32_t bits, linelength, maxy, offset; ++ ++ if (!(r[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED)) { ++ /* vbe is turned off -- nothing to do */ ++ return; ++ } ++ ++ /* check depth */ ++ switch (r[VBE_DISPI_INDEX_BPP]) { ++ case 4: ++ case 8: ++ case 16: ++ case 24: ++ case 32: ++ bits = r[VBE_DISPI_INDEX_BPP]; ++ break; ++ case 15: ++ bits = 16; ++ break; ++ default: ++ bits = r[VBE_DISPI_INDEX_BPP] = 8; ++ break; ++ } ++ ++ /* check width */ ++ r[VBE_DISPI_INDEX_XRES] &= ~7u; ++ if (r[VBE_DISPI_INDEX_XRES] == 0) { ++ r[VBE_DISPI_INDEX_XRES] = 8; ++ } ++ if (r[VBE_DISPI_INDEX_XRES] > VBE_DISPI_MAX_XRES) { ++ r[VBE_DISPI_INDEX_XRES] = VBE_DISPI_MAX_XRES; ++ } ++ r[VBE_DISPI_INDEX_VIRT_WIDTH] &= ~7u; ++ if (r[VBE_DISPI_INDEX_VIRT_WIDTH] > VBE_DISPI_MAX_XRES) { ++ r[VBE_DISPI_INDEX_VIRT_WIDTH] = VBE_DISPI_MAX_XRES; ++ } ++ if (r[VBE_DISPI_INDEX_VIRT_WIDTH] < r[VBE_DISPI_INDEX_XRES]) { ++ r[VBE_DISPI_INDEX_VIRT_WIDTH] = r[VBE_DISPI_INDEX_XRES]; ++ } ++ ++ /* check height */ ++ linelength = r[VBE_DISPI_INDEX_VIRT_WIDTH] * bits / 8; ++ maxy = s->vbe_size / linelength; ++ if (r[VBE_DISPI_INDEX_YRES] == 0) { ++ r[VBE_DISPI_INDEX_YRES] = 1; ++ } ++ if (r[VBE_DISPI_INDEX_YRES] > VBE_DISPI_MAX_YRES) { ++ r[VBE_DISPI_INDEX_YRES] = VBE_DISPI_MAX_YRES; ++ } ++ if (r[VBE_DISPI_INDEX_YRES] > maxy) { ++ r[VBE_DISPI_INDEX_YRES] = maxy; ++ } ++ ++ /* check offset */ ++ if (r[VBE_DISPI_INDEX_X_OFFSET] > VBE_DISPI_MAX_XRES) { ++ r[VBE_DISPI_INDEX_X_OFFSET] = VBE_DISPI_MAX_XRES; ++ } ++ if (r[VBE_DISPI_INDEX_Y_OFFSET] > VBE_DISPI_MAX_YRES) { ++ r[VBE_DISPI_INDEX_Y_OFFSET] = VBE_DISPI_MAX_YRES; ++ } ++ offset = r[VBE_DISPI_INDEX_X_OFFSET] * bits / 8; ++ offset += r[VBE_DISPI_INDEX_Y_OFFSET] * linelength; ++ if (offset + r[VBE_DISPI_INDEX_YRES] * linelength > s->vbe_size) { ++ r[VBE_DISPI_INDEX_Y_OFFSET] = 0; ++ offset = r[VBE_DISPI_INDEX_X_OFFSET] * bits / 8; ++ if (offset + r[VBE_DISPI_INDEX_YRES] * linelength > s->vbe_size) { ++ r[VBE_DISPI_INDEX_X_OFFSET] = 0; ++ offset = 0; ++ } ++ } ++ ++ /* update vga state */ ++ r[VBE_DISPI_INDEX_VIRT_HEIGHT] = maxy; ++ s->vbe_line_offset = linelength; ++ s->vbe_start_addr = offset / 4; ++} ++ + static uint32_t vbe_ioport_read_index(void *opaque, uint32_t addr) + { + VGACommonState *s = opaque; +@@ -648,22 +735,13 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + } + break; + case VBE_DISPI_INDEX_XRES: +- if ((val <= VBE_DISPI_MAX_XRES) && ((val & 7) == 0)) { +- s->vbe_regs[s->vbe_index] = val; +- } +- break; + case VBE_DISPI_INDEX_YRES: +- if (val <= VBE_DISPI_MAX_YRES) { +- s->vbe_regs[s->vbe_index] = val; +- } +- break; + case VBE_DISPI_INDEX_BPP: +- if (val == 0) +- val = 8; +- if (val == 4 || val == 8 || val == 15 || +- val == 16 || val == 24 || val == 32) { +- s->vbe_regs[s->vbe_index] = val; +- } ++ case VBE_DISPI_INDEX_VIRT_WIDTH: ++ case VBE_DISPI_INDEX_X_OFFSET: ++ case VBE_DISPI_INDEX_Y_OFFSET: ++ s->vbe_regs[s->vbe_index] = val; ++ vbe_fixup_regs(s); + break; + case VBE_DISPI_INDEX_BANK: + if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) { +@@ -680,19 +758,11 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + !(s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED)) { + int h, shift_control; + +- s->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] = +- s->vbe_regs[VBE_DISPI_INDEX_XRES]; +- s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] = +- s->vbe_regs[VBE_DISPI_INDEX_YRES]; ++ s->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] = 0; + s->vbe_regs[VBE_DISPI_INDEX_X_OFFSET] = 0; + s->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET] = 0; +- +- if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) +- s->vbe_line_offset = s->vbe_regs[VBE_DISPI_INDEX_XRES] >> 1; +- else +- s->vbe_line_offset = s->vbe_regs[VBE_DISPI_INDEX_XRES] * +- ((s->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3); +- s->vbe_start_addr = 0; ++ s->vbe_regs[VBE_DISPI_INDEX_ENABLE] |= VBE_DISPI_ENABLED; ++ vbe_fixup_regs(s); + + /* clear the screen (should be done in BIOS) */ + if (!(val & VBE_DISPI_NOCLEARMEM)) { +@@ -741,40 +811,6 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + s->vbe_regs[s->vbe_index] = val; + vga_update_memory_access(s); + break; +- case VBE_DISPI_INDEX_VIRT_WIDTH: +- { +- int w, h, line_offset; +- +- if (val < s->vbe_regs[VBE_DISPI_INDEX_XRES]) +- return; +- w = val; +- if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) +- line_offset = w >> 1; +- else +- line_offset = w * ((s->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3); +- h = s->vbe_size / line_offset; +- /* XXX: support weird bochs semantics ? */ +- if (h < s->vbe_regs[VBE_DISPI_INDEX_YRES]) +- return; +- s->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] = w; +- s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] = h; +- s->vbe_line_offset = line_offset; +- } +- break; +- case VBE_DISPI_INDEX_X_OFFSET: +- case VBE_DISPI_INDEX_Y_OFFSET: +- { +- int x; +- s->vbe_regs[s->vbe_index] = val; +- s->vbe_start_addr = s->vbe_line_offset * s->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET]; +- x = s->vbe_regs[VBE_DISPI_INDEX_X_OFFSET]; +- if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) +- s->vbe_start_addr += x >> 1; +- else +- s->vbe_start_addr += x * ((s->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3); +- s->vbe_start_addr >>= 2; +- } +- break; + default: + break; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vdi-add-bounds-checks-for-blocks_in_image-and-disk_s.patch b/SOURCES/kvm-vdi-add-bounds-checks-for-blocks_in_image-and-disk_s.patch new file mode 100644 index 0000000..7f56604 --- /dev/null +++ b/SOURCES/kvm-vdi-add-bounds-checks-for-blocks_in_image-and-disk_s.patch @@ -0,0 +1,112 @@ +From 6ce116dda5d5a7708d660e32713ff40fc3f749ef Mon Sep 17 00:00:00 2001 +From: Jeff Cody +Date: Tue, 25 Mar 2014 14:23:24 +0100 +Subject: [PATCH 17/49] vdi: add bounds checks for blocks_in_image and disk_size header fields (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-18-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 17/48] vdi: add bounds checks for blocks_in_image and disk_size header fields (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Jeff Cody + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +The maximum blocks_in_image is 0xffffffff / 4, which also limits the +maximum disk_size for a VDI image. + +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf + +Conflicts: +block/vdi.c + +Signed-off-by: Kevin Wolf +--- + block/vdi.c | 26 ++++++++++++++++++++++++-- + 1 files changed, 24 insertions(+), 2 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index f973883..0457298 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -120,6 +120,12 @@ typedef unsigned char uuid_t[16]; + + #define VDI_IS_ALLOCATED(X) ((X) < VDI_DISCARDED) + ++#define VDI_BLOCK_SIZE (1 * MiB) ++/* max blocks in image is (0xffffffff / 4) */ ++#define VDI_BLOCKS_IN_IMAGE_MAX 0x3fffffff ++#define VDI_DISK_SIZE_MAX ((uint64_t)VDI_BLOCKS_IN_IMAGE_MAX * \ ++ (uint64_t)VDI_BLOCK_SIZE) ++ + #if !defined(CONFIG_UUID) + static inline void uuid_generate(uuid_t out) + { +@@ -385,6 +391,11 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + vdi_header_print(&header); + #endif + ++ if (header.disk_size > VDI_DISK_SIZE_MAX) { ++ ret = -EINVAL; ++ goto fail; ++ } ++ + if (header.disk_size % SECTOR_SIZE != 0) { + /* 'VBoxManage convertfromraw' can create images with odd disk sizes. + We accept them but round the disk size to the next multiple of +@@ -417,7 +428,7 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + logout("unsupported sector size %u B\n", header.sector_size); + ret = -ENOTSUP; + goto fail; +- } else if (header.block_size != 1 * MiB) { ++ } else if (header.block_size != VDI_BLOCK_SIZE) { + logout("unsupported block size %u B\n", header.block_size); + ret = -ENOTSUP; + goto fail; +@@ -434,6 +445,10 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + logout("parent uuid != 0, unsupported\n"); + ret = -ENOTSUP; + goto fail; ++ } else if (header.blocks_in_image > VDI_BLOCKS_IN_IMAGE_MAX) { ++ logout("unsupported number of blocks in image\n"); ++ ret = -ENOTSUP; ++ goto fail; + } + + bs->total_sectors = header.disk_size / SECTOR_SIZE; +@@ -682,11 +697,17 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + options++; + } + ++ if (bytes > VDI_DISK_SIZE_MAX) { ++ result = -EINVAL; ++ goto exit; ++ } ++ + fd = qemu_open(filename, + O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, + 0644); + if (fd < 0) { +- return -errno; ++ result = -errno; ++ goto exit; + } + + /* We need enough blocks to store the given disk size, +@@ -747,6 +768,7 @@ static int vdi_create(const char *filename, QEMUOptionParameter *options, + result = -errno; + } + ++exit: + return result; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-vdi-remove-double-conversion.patch b/SOURCES/kvm-vdi-remove-double-conversion.patch new file mode 100644 index 0000000..8acb3c4 --- /dev/null +++ b/SOURCES/kvm-vdi-remove-double-conversion.patch @@ -0,0 +1,44 @@ +From 873247249112ac26ae02946d3f6a9484a85268a3 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:46 +0200 +Subject: [PATCH 08/20] vdi: remove double conversion + +Message-id: <843ab27113b00881159ce51034472849d8178804.1410897407.git.jcody@redhat.com> +Patchwork-id: 61212 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 07/15] vdi: remove double conversion +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +This should be a problem when running on big-endian machines. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Benoit Canet +Reviewed-by: Stefan Weil +Signed-off-by: Michael Tokarev +(cherry picked from commit 6998b6c11b4e8ca5e3c3e6bdbdf07a4f747d5d37) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/vdi.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index fecfa14..0211023 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -239,7 +239,6 @@ static void vdi_header_to_le(VdiHeader *header) + cpu_to_le32s(&header->block_extra); + cpu_to_le32s(&header->blocks_in_image); + cpu_to_le32s(&header->blocks_allocated); +- cpu_to_le32s(&header->blocks_allocated); + uuid_convert(header->uuid_image); + uuid_convert(header->uuid_last_snap); + uuid_convert(header->uuid_link); +-- +1.7.1 + diff --git a/SOURCES/kvm-vdi-say-why-an-image-is-bad.patch b/SOURCES/kvm-vdi-say-why-an-image-is-bad.patch new file mode 100644 index 0000000..4807352 --- /dev/null +++ b/SOURCES/kvm-vdi-say-why-an-image-is-bad.patch @@ -0,0 +1,98 @@ +From ee2c4c17b2bf7a0f1b420096460d33d87792ef78 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:42 +0200 +Subject: [PATCH 04/20] vdi: say why an image is bad + +Message-id: <3fcc4a3635f7e4e2da9110df47e59d9727327707.1410897407.git.jcody@redhat.com> +Patchwork-id: 61208 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 03/15] vdi: say why an image is bad +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Instead of just putting it in debugging output, we can now put the +value in an Error. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 5b7aa9b56d1bfc79916262f380c3fc7961becb50) + +Conflicts: + block/vdi.c + +RHEL7 Conflict Notes: Conflict due to different patch order, from + a CVE commit. + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vdi.c | 25 ++++++++++++++++--------- + 1 files changed, 16 insertions(+), 9 deletions(-) + +diff --git a/block/vdi.c b/block/vdi.c +index 5e2fad5..b095bee 100644 +--- a/block/vdi.c ++++ b/block/vdi.c +@@ -412,39 +412,46 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags, + ret = -EMEDIUMTYPE; + goto fail; + } else if (header.version != VDI_VERSION_1_1) { +- logout("unsupported version %u.%u\n", +- header.version >> 16, header.version & 0xffff); ++ error_setg(errp, "unsupported VDI image (version %u.%u)", ++ header.version >> 16, header.version & 0xffff); + ret = -ENOTSUP; + goto fail; + } else if (header.offset_bmap % SECTOR_SIZE != 0) { + /* We only support block maps which start on a sector boundary. */ +- logout("unsupported block map offset 0x%x B\n", header.offset_bmap); ++ error_setg(errp, "unsupported VDI image (unaligned block map offset " ++ "0x%x)", header.offset_bmap); + ret = -ENOTSUP; + goto fail; + } else if (header.offset_data % SECTOR_SIZE != 0) { + /* We only support data blocks which start on a sector boundary. */ +- logout("unsupported data offset 0x%x B\n", header.offset_data); ++ error_setg(errp, "unsupported VDI image (unaligned data offset 0x%x)", ++ header.offset_data); + ret = -ENOTSUP; + goto fail; + } else if (header.sector_size != SECTOR_SIZE) { +- logout("unsupported sector size %u B\n", header.sector_size); ++ error_setg(errp, "unsupported VDI image (sector size %u is not %u)", ++ header.sector_size, SECTOR_SIZE); + ret = -ENOTSUP; + goto fail; + } else if (header.block_size != DEFAULT_CLUSTER_SIZE) { +- logout("unsupported block size %u B\n", header.block_size); ++ error_setg(errp, "unsupported VDI image (sector size %u is not %u)", ++ header.block_size, DEFAULT_CLUSTER_SIZE); + ret = -ENOTSUP; + goto fail; + } else if (header.disk_size > + (uint64_t)header.blocks_in_image * header.block_size) { +- logout("unsupported disk size %" PRIu64 " B\n", header.disk_size); ++ error_setg(errp, "unsupported VDI image (disk size %" PRIu64 ", " ++ "image bitmap has room for %" PRIu64 ")", ++ header.disk_size, ++ (uint64_t)header.blocks_in_image * header.block_size); + ret = -ENOTSUP; + goto fail; + } else if (!uuid_is_null(header.uuid_link)) { +- logout("link uuid != 0, unsupported\n"); ++ error_setg(errp, "unsupported VDI image (non-NULL link UUID)"); + ret = -ENOTSUP; + goto fail; + } else if (!uuid_is_null(header.uuid_parent)) { +- logout("parent uuid != 0, unsupported\n"); ++ error_setg(errp, "unsupported VDI image (non-NULL parent UUID)"); + ret = -ENOTSUP; + goto fail; + } else if (header.blocks_in_image > VDI_BLOCKS_IN_IMAGE_MAX) { +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-Add-sysfsdev-property-for-pci-platform.patch b/SOURCES/kvm-vfio-Add-sysfsdev-property-for-pci-platform.patch new file mode 100644 index 0000000..92137cb --- /dev/null +++ b/SOURCES/kvm-vfio-Add-sysfsdev-property-for-pci-platform.patch @@ -0,0 +1,367 @@ +From acd0e88a7222dac83caf4d507a1bfce7cd0ea734 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:14 +0200 +Subject: [PATCH 09/27] vfio: Add sysfsdev property for pci & platform + +RH-Author: Alex Williamson +Message-id: <20170929214514.16765.36252.stgit@gimli.home> +Patchwork-id: 76768 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 09/16] vfio: Add sysfsdev property for pci & platform +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +Upstream: 7df9381b7aa56c897e344f3bfe43bf5848bbd3e0 +RHEL: Dropped platform + +vfio-pci currently requires a host= parameter, which comes in the +form of a PCI address in [domain:] notation. We +expect to find a matching entry in sysfs for that under +/sys/bus/pci/devices/. vfio-platform takes a similar approach, but +defines the host= parameter to be a string, which can be matched +directly under /sys/bus/platform/devices/. On the PCI side, we have +some interest in using vfio to expose vGPU devices. These are not +actual discrete PCI devices, so they don't have a compatible host PCI +bus address or a device link where QEMU wants to look for it. There's +also really no requirement that vfio can only be used to expose +physical devices, a new vfio bus and iommu driver could expose a +completely emulated device. To fit within the vfio framework, it +would need a kernel struct device and associated IOMMU group, but +those are easy constraints to manage. + +To support such devices, which would include vGPUs, that honor the +VFIO PCI programming API, but are not necessarily backed by a unique +PCI address, add support for specifying any device in sysfs. The +vfio API already has support for probing the device type to ensure +compatibility with either vfio-pci or vfio-platform. + +With this, a vfio-pci device could either be specified as: + +-device vfio-pci,host=02:00.0 + +or + +-device vfio-pci,sysfsdev=/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0 + +or even + +-device vfio-pci,sysfsdev=/sys/bus/pci/devices/0000:02:00.0 + +When vGPU support comes along, this might look something more like: + +-device vfio-pci,sysfsdev=/sys/devices/virtual/intel-vgpu/vgpu0@0000:00:02.0 + +NB - This is only a made up example path + +The same change is made for vfio-platform, specifying sysfsdev has +precedence over the old host option. + +Tested-by: Eric Auger +Reviewed-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 131 ++++++++++++++++++++++++--------------------------------- + 1 file changed, 54 insertions(+), 77 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 0d88313..64d4dc7 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -187,6 +187,7 @@ typedef struct VFIODeviceOps VFIODeviceOps; + typedef struct VFIODevice { + QLIST_ENTRY(VFIODevice) next; + struct VFIOGroup *group; ++ char *sysfsdev; + char *name; + int fd; + int type; +@@ -1288,12 +1289,8 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { + /* Since pci handles romfile, just print a message and return */ + if (vfio_blacklist_opt_rom(vdev) && vdev->pdev.romfile) { +- error_printf("Warning : Device at %04x:%02x:%02x.%x " +- "is known to cause system instability issues during " +- "option rom execution. " +- "Proceeding anyway since user specified romfile\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ error_printf("Warning : Device at %s is known to cause system instability issues during option rom execution. Proceeding anyway since user specified romfile\n", ++ vdev->vbasedev.name); + } + return; + } +@@ -1306,9 +1303,7 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + pwrite(fd, &size, 4, offset) != 4 || + pread(fd, &size, 4, offset) != 4 || + pwrite(fd, &orig, 4, offset) != 4) { +- error_report("%s(%04x:%02x:%02x.%x) failed: %m", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function); ++ error_report("%s(%s) failed: %m", __func__, vdev->vbasedev.name); + return; + } + +@@ -1320,29 +1315,18 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev) + + if (vfio_blacklist_opt_rom(vdev)) { + if (dev->opts && qemu_opt_get(dev->opts, "rombar")) { +- error_printf("Warning : Device at %04x:%02x:%02x.%x " +- "is known to cause system instability issues during " +- "option rom execution. " +- "Proceeding anyway since user specified non zero value for " +- "rombar\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ error_printf("Warning : Device at %s is known to cause system instability issues during option rom execution. Proceeding anyway since user specified non zero value for rombar\n", ++ vdev->vbasedev.name); + } else { +- error_printf("Warning : Rom loading for device at " +- "%04x:%02x:%02x.%x has been disabled due to " +- "system instability issues. " +- "Specify rombar=1 or romfile to force\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ error_printf("Warning : Rom loading for device at %s has been disabled due to system instability issues. Specify rombar=1 or romfile to force\n", ++ vdev->vbasedev.name); + return; + } + } + + DPRINTF("%s ROM size 0x%x\n", vdev->vbasedev.name, size); + +- snprintf(name, sizeof(name), "vfio[%04x:%02x:%02x.%x].rom", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ snprintf(name, sizeof(name), "vfio[%s].rom", vdev->vbasedev.name); + + memory_region_init_io(&vdev->pdev.rom, + &vfio_rom_ops, vdev, name, size); +@@ -2112,9 +2096,8 @@ static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len) + ret = pread(vdev->vbasedev.fd, &phys_val, len, + vdev->config_offset + addr); + if (ret != len) { +- error_report("%s(%04x:%02x:%02x.%x, 0x%x, 0x%x) failed: %m", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr, len); ++ error_report("%s(%s, 0x%x, 0x%x) failed: %m", ++ __func__, vdev->vbasedev.name, addr, len); + return -errno; + } + phys_val = le32_to_cpu(phys_val); +@@ -2140,9 +2123,8 @@ static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + /* Write everything to VFIO, let it filter out what we can't write */ + if (pwrite(vdev->vbasedev.fd, &val_le, len, vdev->config_offset + addr) + != len) { +- error_report("%s(%04x:%02x:%02x.%x, 0x%x, 0x%x, 0x%x) failed: %m", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr, val, len); ++ error_report("%s(%s, 0x%x, 0x%x, 0x%x) failed: %m", ++ __func__, vdev->vbasedev.name, addr, val, len); + } + + /* MSI/MSI-X Enabling/Disabling */ +@@ -2610,9 +2592,7 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + return; + } + +- snprintf(name, sizeof(name), "VFIO %04x:%02x:%02x.%x BAR %d", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, nr); ++ snprintf(name, sizeof(name), "VFIO %s BAR %d", vdev->vbasedev.name, nr); + + /* Determine what type of BAR this is for registration */ + ret = pread(vdev->vbasedev.fd, &pci_bar, sizeof(pci_bar), +@@ -2946,9 +2926,8 @@ static int vfio_add_std_cap(VFIOPCIDevice *vdev, uint8_t pos) + } + + if (ret < 0) { +- error_report("vfio: %04x:%02x:%02x.%x Error adding PCI capability " +- "0x%x[0x%x]@0x%x: %d", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, ++ error_report("vfio: %s Error adding PCI capability " ++ "0x%x[0x%x]@0x%x: %d", vdev->vbasedev.name, + cap_id, size, pos, ret); + return ret; + } +@@ -3010,11 +2989,14 @@ static void vfio_pci_post_reset(VFIOPCIDevice *vdev) + vfio_enable_intx(vdev); + } + +-static bool vfio_pci_host_match(PCIHostDeviceAddress *host1, +- PCIHostDeviceAddress *host2) ++static bool vfio_pci_host_match(PCIHostDeviceAddress *addr, const char *name) + { +- return (host1->domain == host2->domain && host1->bus == host2->bus && +- host1->slot == host2->slot && host1->function == host2->function); ++ char tmp[13]; ++ ++ sprintf(tmp, "%04x:%02x:%02x.%1x", addr->domain, ++ addr->bus, addr->slot, addr->function); ++ ++ return (strcmp(tmp, name) == 0); + } + + static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) +@@ -3040,9 +3022,8 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + if (ret && errno != ENOSPC) { + ret = -errno; + if (!vdev->has_pm_reset) { +- error_report("vfio: Cannot reset device %04x:%02x:%02x.%x, " +- "no available reset mechanism.", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ error_report("vfio: Cannot reset device %s, " ++ "no available reset mechanism.", vdev->vbasedev.name); + } + goto out_single; + } +@@ -3075,7 +3056,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + DPRINTF("\t%04x:%02x:%02x.%x group %d\n", host.domain, + host.bus, host.slot, host.function, devices[i].group_id); + +- if (vfio_pci_host_match(&host, &vdev->host)) { ++ if (vfio_pci_host_match(&host, vdev->vbasedev.name)) { + continue; + } + +@@ -3101,7 +3082,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) + continue; + } + tmp = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev); +- if (vfio_pci_host_match(&host, &tmp->host)) { ++ if (vfio_pci_host_match(&host, tmp->vbasedev.name)) { + if (single) { + DPRINTF("vfio: found another in-use device " + "%s\n", tmp->vbasedev.name); +@@ -3165,7 +3146,7 @@ out: + host.slot = PCI_SLOT(devices[i].devfn); + host.function = PCI_FUNC(devices[i].devfn); + +- if (vfio_pci_host_match(&host, &vdev->host)) { ++ if (vfio_pci_host_match(&host, vdev->vbasedev.name)) { + continue; + } + +@@ -3184,7 +3165,7 @@ out: + continue; + } + tmp = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev); +- if (vfio_pci_host_match(&host, &tmp->host)) { ++ if (vfio_pci_host_match(&host, tmp->vbasedev.name)) { + vfio_pci_post_reset(tmp); + break; + } +@@ -3683,10 +3664,7 @@ static void vfio_err_notifier_handler(void *opaque) + * guest to contain the error. + */ + +- error_report("%s(%04x:%02x:%02x.%x) Unrecoverable error detected. " +- "Please collect any data possible and then kill the guest", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function); ++ error_report("%s(%s) Unrecoverable error detected. Please collect any data possible and then kill the guest", __func__, vdev->vbasedev.name); + + vm_stop(RUN_STATE_INTERNAL_ERROR); + } +@@ -3867,7 +3845,7 @@ static int vfio_initfn(PCIDevice *pdev) + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + VFIODevice *vbasedev_iter; + VFIOGroup *group; +- char path[PATH_MAX], iommu_group_path[PATH_MAX], *group_name; ++ char *tmp, group_path[PATH_MAX], *group_name; + ssize_t len; + struct stat st; + int groupid; +@@ -3885,36 +3863,37 @@ static int vfio_initfn(PCIDevice *pdev) + return -1; + } + +- /* Check that the host device exists */ +- snprintf(path, sizeof(path), +- "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); +- if (stat(path, &st) < 0) { +- error_report("vfio: error: no such host device: %s", path); ++ if (!vdev->vbasedev.sysfsdev) { ++ vdev->vbasedev.sysfsdev = ++ g_strdup_printf("/sys/bus/pci/devices/%04x:%02x:%02x.%01x", ++ vdev->host.domain, vdev->host.bus, ++ vdev->host.slot, vdev->host.function); ++ } ++ ++ if (stat(vdev->vbasedev.sysfsdev, &st) < 0) { ++ error_report("vfio: error: no such host device: %s", ++ vdev->vbasedev.sysfsdev); + return -errno; + } + ++ vdev->vbasedev.name = g_strdup(basename(vdev->vbasedev.sysfsdev)); + vdev->vbasedev.ops = &vfio_pci_ops; +- + vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI; +- vdev->vbasedev.name = g_strdup_printf("%04x:%02x:%02x.%01x", +- vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function); + +- strncat(path, "iommu_group", sizeof(path) - strlen(path) - 1); ++ tmp = g_strdup_printf("%s/iommu_group", vdev->vbasedev.sysfsdev); ++ len = readlink(tmp, group_path, sizeof(group_path)); ++ g_free(tmp); + +- len = readlink(path, iommu_group_path, sizeof(path)); +- if (len <= 0 || len >= sizeof(path)) { ++ if (len <= 0 || len >= sizeof(group_path)) { + error_report("vfio: error no iommu_group for device"); + return len < 0 ? -errno : -ENAMETOOLONG; + } + +- iommu_group_path[len] = 0; +- group_name = basename(iommu_group_path); ++ group_path[len] = 0; + ++ group_name = basename(group_path); + if (sscanf(group_name, "%d", &groupid) != 1) { +- error_report("vfio: error reading %s: %m", path); ++ error_report("vfio: error reading %s: %m", group_path); + return -errno; + } + +@@ -3926,21 +3905,18 @@ static int vfio_initfn(PCIDevice *pdev) + return -ENOENT; + } + +- snprintf(path, sizeof(path), "%04x:%02x:%02x.%01x", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); +- + QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { + if (strcmp(vbasedev_iter->name, vdev->vbasedev.name) == 0) { +- error_report("vfio: error: device %s is already attached", path); ++ error_report("vfio: error: device %s is already attached", ++ vdev->vbasedev.name); + vfio_put_group(group); + return -EBUSY; + } + } + +- ret = vfio_get_device(group, path, vdev); ++ ret = vfio_get_device(group, vdev->vbasedev.name, vdev); + if (ret) { +- error_report("vfio: failed to get device %s", path); ++ error_report("vfio: failed to get device %s", vdev->vbasedev.name); + vfio_put_group(group); + return ret; + } +@@ -4086,6 +4062,7 @@ post_reset: + + static Property vfio_pci_dev_properties[] = { + DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), ++ DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), + DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice, + intx.mmap_timeout, 1100), + DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Correction-in-vfio_rom_read-when-attempting-rom.patch b/SOURCES/kvm-vfio-Correction-in-vfio_rom_read-when-attempting-rom.patch new file mode 100644 index 0000000..0954434 --- /dev/null +++ b/SOURCES/kvm-vfio-Correction-in-vfio_rom_read-when-attempting-rom.patch @@ -0,0 +1,50 @@ +From d6d48e0a9ce4dfc91085e450f2a9a334b1ece89b Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:33:51 +0200 +Subject: [PATCH 03/14] vfio: Correction in vfio_rom_read when attempting rom + loading + +Message-id: <20150410163351.15324.30965.stgit@gimli.home> +Patchwork-id: 64785 +O-Subject: [RHEL7.2 qemu-kvm PATCH 3/8] vfio: Correction in vfio_rom_read when attempting rom loading +Bugzilla: 1210503 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +From: Bandan Das + +Upstream: db01eedb6d883a1fed5b4079f8a6ff048b9c1217 + +commit e638073c569e801ce9de added a flag to track whether +a previous rom read had failed. Accidentally, the code +ended up adding vfio_load_option_rom twice. (Thanks to Alex +for spotting it) + +Signed-off-by: Bandan Das +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index f3bf491..57bc974 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -1235,11 +1235,8 @@ static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) + uint64_t val = ((uint64_t)1 << (size * 8)) - 1; + + /* Load the ROM lazily when the guest tries to read it */ +- if (unlikely(!vdev->rom)) { ++ if (unlikely(!vdev->rom && !vdev->rom_read_failed)) { + vfio_pci_load_rom(vdev); +- if (unlikely(!vdev->rom && !vdev->rom_read_failed)) { +- vfio_pci_load_rom(vdev); +- } + } + + memcpy(&val, vdev->rom + addr, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Destroy-memory-regions.patch b/SOURCES/kvm-vfio-Destroy-memory-regions.patch new file mode 100644 index 0000000..40f3eac --- /dev/null +++ b/SOURCES/kvm-vfio-Destroy-memory-regions.patch @@ -0,0 +1,68 @@ +From 6ca164c42aa26e2273871061aa509cc50bd0dc4c Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Wed, 22 Jan 2014 21:33:06 -0500 +Subject: [PATCH 2/6] vfio: Destroy memory regions + +Message-id: <20140122213238.6166.63139.stgit@bling.home> +Patchwork-id: 56902 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] vfio: Destroy memory regions +Bugzilla: 1052030 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek + +Bugzilla: 1052030 +Upstream: 7c4228b4771acddcb8815079bc116007cec8a1ff (tag from pull request) + +Somehow this has been lurking for a while; we remove our subregions +from the base BAR and VGA region mappings, but we don't destroy them, +creating a leak and more serious problems when we try to migrate after +removing these devices. Add the trivial bit of final cleanup to +remove these entirely. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 83f2b6a..e1f30a2 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -1928,6 +1928,7 @@ static void vfio_vga_quirk_teardown(VFIODevice *vdev) + while (!QLIST_EMPTY(&vdev->vga.region[i].quirks)) { + VFIOQuirk *quirk = QLIST_FIRST(&vdev->vga.region[i].quirks); + memory_region_del_subregion(&vdev->vga.region[i].mem, &quirk->mem); ++ memory_region_destroy(&quirk->mem); + QLIST_REMOVE(quirk, next); + g_free(quirk); + } +@@ -1950,6 +1951,7 @@ static void vfio_bar_quirk_teardown(VFIODevice *vdev, int nr) + while (!QLIST_EMPTY(&bar->quirks)) { + VFIOQuirk *quirk = QLIST_FIRST(&bar->quirks); + memory_region_del_subregion(&bar->mem, &quirk->mem); ++ memory_region_destroy(&quirk->mem); + QLIST_REMOVE(quirk, next); + g_free(quirk); + } +@@ -2379,10 +2381,12 @@ static void vfio_unmap_bar(VFIODevice *vdev, int nr) + + memory_region_del_subregion(&bar->mem, &bar->mmap_mem); + munmap(bar->mmap, memory_region_size(&bar->mmap_mem)); ++ memory_region_destroy(&bar->mmap_mem); + + if (vdev->msix && vdev->msix->table_bar == nr) { + memory_region_del_subregion(&bar->mem, &vdev->msix->mmap_mem); + munmap(vdev->msix->mmap, memory_region_size(&vdev->msix->mmap_mem)); ++ memory_region_destroy(&vdev->msix->mmap_mem); + } + + memory_region_destroy(&bar->mem); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Do-not-reattempt-a-failed-rom-read.patch b/SOURCES/kvm-vfio-Do-not-reattempt-a-failed-rom-read.patch new file mode 100644 index 0000000..09f3fbf --- /dev/null +++ b/SOURCES/kvm-vfio-Do-not-reattempt-a-failed-rom-read.patch @@ -0,0 +1,72 @@ +From d8cc073c06a4c79e24a86a958b8c1ac7a26fa039 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:33:45 +0200 +Subject: [PATCH 02/14] vfio: Do not reattempt a failed rom read + +Message-id: <20150410163345.15324.23733.stgit@gimli.home> +Patchwork-id: 64790 +O-Subject: [RHEL7.2 qemu-kvm PATCH 2/8] vfio: Do not reattempt a failed rom read +Bugzilla: 1210503 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +From: Bandan Das + +Upstream: e638073c569e801ce9def2016a84f955cbbca779 + +During lazy rom loading, if rom read fails, and the +guest attempts a read again, vfio will again attempt it. +Add a boolean to prevent this. There could be a case where +a failed rom read might succeed the next time because of +a device reset or such, but it's best to exclude unpredictable +behavior + +Signed-off-by: Bandan Das +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index c9dbc28..f3bf491 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -206,6 +206,7 @@ typedef struct VFIODevice { + bool has_flr; + bool has_pm_reset; + bool needs_reset; ++ bool rom_read_failed; + } VFIODevice; + + typedef struct VFIOGroup { +@@ -1197,6 +1198,7 @@ static void vfio_pci_load_rom(VFIODevice *vdev) + vdev->rom_offset = reg_info.offset; + + if (!vdev->rom_size) { ++ vdev->rom_read_failed = true; + error_report("vfio-pci: Cannot read device rom at " + "%04x:%02x:%02x.%x\n", + vdev->host.domain, vdev->host.bus, vdev->host.slot, +@@ -1235,6 +1237,9 @@ static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) + /* Load the ROM lazily when the guest tries to read it */ + if (unlikely(!vdev->rom)) { + vfio_pci_load_rom(vdev); ++ if (unlikely(!vdev->rom && !vdev->rom_read_failed)) { ++ vfio_pci_load_rom(vdev); ++ } + } + + memcpy(&val, vdev->rom + addr, +@@ -1352,6 +1357,7 @@ static void vfio_pci_size_rom(VFIODevice *vdev) + PCI_BASE_ADDRESS_SPACE_MEMORY, &vdev->pdev.rom); + + vdev->pdev.has_rom = true; ++ vdev->rom_read_failed = false; + } + + static void vfio_vga_write(void *opaque, hwaddr addr, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Don-t-cache-MSIMessage.patch b/SOURCES/kvm-vfio-Don-t-cache-MSIMessage.patch new file mode 100644 index 0000000..fc66deb --- /dev/null +++ b/SOURCES/kvm-vfio-Don-t-cache-MSIMessage.patch @@ -0,0 +1,78 @@ +From cc5b2c1e8ea83b1d1e377993c302322beb37bc50 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 7 Aug 2014 21:03:20 +0200 +Subject: [PATCH 7/7] vfio: Don't cache MSIMessage + +Message-id: <20140807210320.11689.35203.stgit@gimli.home> +Patchwork-id: 60483 +O-Subject: [RHEL7.0/z qemu-kvm PATCH v2 6/6] vfio: Don't cache MSIMessage +Bugzilla: 1098976 +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong +RH-Acked-by: Laszlo Ersek + +Commit 40509f7f added a test to avoid updating KVM MSI routes when the +MSIMessage is unchanged and f4d45d47 switched to relying on this +rather than doing our own comparison. Our cached msg is effectively +unused now. Remove it. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 688e2ef..abaa4c1 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -131,7 +131,6 @@ typedef struct VFIOMSIVector { + EventNotifier interrupt; + EventNotifier kvm_interrupt; + struct VFIODevice *vdev; /* back pointer to device */ +- MSIMessage msg; /* cache the MSI message so we know when it changes */ + int virq; + bool use; + } VFIOMSIVector; +@@ -725,7 +724,6 @@ static void vfio_add_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage *msg, + return; + } + +- vector->msg = *msg; + vector->virq = virq; + } + +@@ -741,7 +739,6 @@ static void vfio_remove_kvm_msi_virq(VFIOMSIVector *vector) + static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg) + { + kvm_irqchip_update_msi_route(kvm_state, vector->virq, msg); +- vector->msg = msg; + } + + static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, +@@ -920,6 +917,7 @@ retry: + + for (i = 0; i < vdev->nr_vectors; i++) { + VFIOMSIVector *vector = &vdev->msi_vectors[i]; ++ MSIMessage msg = msi_get_message(&vdev->pdev, i); + + vector->vdev = vdev; + vector->virq = -1; +@@ -932,13 +930,11 @@ retry: + qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), + vfio_msi_interrupt, NULL, vector); + +- vector->msg = msi_get_message(&vdev->pdev, i); +- + /* + * Attempt to enable route through KVM irqchip, + * default to userspace handling if unavailable. + */ +- vfio_add_kvm_msi_virq(vector, &vector->msg, false); ++ vfio_add_kvm_msi_virq(vector, &msg, false); + } + + /* Set interrupt type prior to possible interrupts */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Enable-sparse-mmap-capability.patch b/SOURCES/kvm-vfio-Enable-sparse-mmap-capability.patch new file mode 100644 index 0000000..bdfffe5 --- /dev/null +++ b/SOURCES/kvm-vfio-Enable-sparse-mmap-capability.patch @@ -0,0 +1,223 @@ +From bbd8cc516329f84b70d38a75820f36f2ecd0abda Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:46:14 +0200 +Subject: [PATCH 15/27] vfio: Enable sparse mmap capability + +RH-Author: Alex Williamson +Message-id: <20170929214614.16765.48627.stgit@gimli.home> +Patchwork-id: 76773 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 15/16] vfio: Enable sparse mmap capability +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +Upstream: b53b0f696b10828f6393155f44a352c019e673fd +RHEL: Roll in required linux-headers update + +The sparse mmap capability in a vfio region info allows vfio to tell +us which sub-areas of a region may be mmap'd. Thus rather than +assuming a single mmap covers the entire region and later frobbing it +ourselves for things like the PCI MSI-X vector table, we can read that +directly from vfio. + +Signed-off-by: Alex Williamson +Reviewed-by: Gerd Hoffmann +Tested-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 67 +++++++++++++++++++++++++++++++++++++++++++--- + linux-headers/linux/vfio.h | 53 +++++++++++++++++++++++++++++++++++- + trace-events | 2 ++ + 3 files changed, 117 insertions(+), 5 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index d634531..a27698b 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2602,6 +2602,54 @@ static void vfio_unmap_bar(VFIOPCIDevice *vdev, int nr) + vfio_region_finalize(&bar->region); + } + ++static struct vfio_info_cap_header * ++vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id) ++{ ++ struct vfio_info_cap_header *hdr; ++ void *ptr = info; ++ ++ if (!(info->flags & VFIO_REGION_INFO_FLAG_CAPS)) { ++ return NULL; ++ } ++ ++ for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) { ++ if (hdr->id == id) { ++ return hdr; ++ } ++ } ++ ++ return NULL; ++} ++ ++static void vfio_setup_region_sparse_mmaps(VFIORegion *region, ++ struct vfio_region_info *info) ++{ ++ struct vfio_info_cap_header *hdr; ++ struct vfio_region_info_cap_sparse_mmap *sparse; ++ int i; ++ ++ hdr = vfio_get_region_info_cap(info, VFIO_REGION_INFO_CAP_SPARSE_MMAP); ++ if (!hdr) { ++ return; ++ } ++ ++ sparse = container_of(hdr, struct vfio_region_info_cap_sparse_mmap, header); ++ ++ trace_vfio_region_sparse_mmap_header(region->vbasedev->name, ++ region->nr, sparse->nr_areas); ++ ++ region->nr_mmaps = sparse->nr_areas; ++ region->mmaps = g_new0(VFIOMmap, region->nr_mmaps); ++ ++ for (i = 0; i < region->nr_mmaps; i++) { ++ region->mmaps[i].offset = sparse->areas[i].offset; ++ region->mmaps[i].size = sparse->areas[i].size; ++ trace_vfio_region_sparse_mmap_entry(i, region->mmaps[i].offset, ++ region->mmaps[i].offset + ++ region->mmaps[i].size); ++ } ++} ++ + static int vfio_region_setup(Object *obj, VFIODevice *vbasedev, + VFIORegion *region, int index, const char *name) + { +@@ -2628,11 +2676,14 @@ static int vfio_region_setup(Object *obj, VFIODevice *vbasedev, + region->flags & VFIO_REGION_INFO_FLAG_MMAP && + !(region->size & ~TARGET_PAGE_MASK)) { + +- region->nr_mmaps = 1; +- region->mmaps = g_new0(VFIOMmap, region->nr_mmaps); ++ vfio_setup_region_sparse_mmaps(region, info); + +- region->mmaps[0].offset = 0; +- region->mmaps[0].size = region->size; ++ if (!region->nr_mmaps) { ++ region->nr_mmaps = 1; ++ region->mmaps = g_new0(VFIOMmap, region->nr_mmaps); ++ region->mmaps[0].offset = 0; ++ region->mmaps[0].size = region->size; ++ } + } + } + +@@ -3796,6 +3847,7 @@ static int vfio_get_region_info(VFIODevice *vbasedev, int index, + *info = g_malloc0(argsz); + + (*info)->index = index; ++retry: + (*info)->argsz = argsz; + + if (ioctl(vbasedev->fd, VFIO_DEVICE_GET_REGION_INFO, *info)) { +@@ -3803,6 +3855,13 @@ static int vfio_get_region_info(VFIODevice *vbasedev, int index, + return -errno; + } + ++ if ((*info)->argsz > argsz) { ++ argsz = (*info)->argsz; ++ *info = g_realloc(*info, argsz); ++ ++ goto retry; ++ } ++ + return 0; + } + +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index d197fd4..8995a34 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -38,6 +38,33 @@ + #define VFIO_TYPE (';') + #define VFIO_BASE 100 + ++/* ++ * For extension of INFO ioctls, VFIO makes use of a capability chain ++ * designed after PCI/e capabilities. A flag bit indicates whether ++ * this capability chain is supported and a field defined in the fixed ++ * structure defines the offset of the first capability in the chain. ++ * This field is only valid when the corresponding bit in the flags ++ * bitmap is set. This offset field is relative to the start of the ++ * INFO buffer, as is the next field within each capability header. ++ * The id within the header is a shared address space per INFO ioctl, ++ * while the version field is specific to the capability id. The ++ * contents following the header are specific to the capability id. ++ */ ++struct vfio_info_cap_header { ++ __u16 id; /* Identifies capability */ ++ __u16 version; /* Version specific to the capability ID */ ++ __u32 next; /* Offset of next capability */ ++}; ++ ++/* ++ * Callers of INFO ioctls passing insufficiently sized buffers will see ++ * the capability chain flag bit set, a zero value for the first capability ++ * offset (if available within the provided argsz), and argsz will be ++ * updated to report the necessary buffer size. For compatibility, the ++ * INFO ioctl will not report error in this case, but the capability chain ++ * will not be available. ++ */ ++ + /* -------- IOCTLs for VFIO file descriptor (/dev/vfio/vfio) -------- */ + + /** +@@ -171,13 +198,37 @@ struct vfio_region_info { + #define VFIO_REGION_INFO_FLAG_READ (1 << 0) /* Region supports read */ + #define VFIO_REGION_INFO_FLAG_WRITE (1 << 1) /* Region supports write */ + #define VFIO_REGION_INFO_FLAG_MMAP (1 << 2) /* Region supports mmap */ ++#define VFIO_REGION_INFO_FLAG_CAPS (1 << 3) /* Info supports caps */ + __u32 index; /* Region index */ +- __u32 resv; /* Reserved for alignment */ ++ __u32 cap_offset; /* Offset within info struct of first cap */ + __u64 size; /* Region size (bytes) */ + __u64 offset; /* Region offset from start of device fd */ + }; + #define VFIO_DEVICE_GET_REGION_INFO _IO(VFIO_TYPE, VFIO_BASE + 8) + ++/* ++ * The sparse mmap capability allows finer granularity of specifying areas ++ * within a region with mmap support. When specified, the user should only ++ * mmap the offset ranges specified by the areas array. mmaps outside of the ++ * areas specified may fail (such as the range covering a PCI MSI-X table) or ++ * may result in improper device behavior. ++ * ++ * The structures below define version 1 of this capability. ++ */ ++#define VFIO_REGION_INFO_CAP_SPARSE_MMAP 1 ++ ++struct vfio_region_sparse_mmap_area { ++ __u64 offset; /* Offset of mmap'able area within region */ ++ __u64 size; /* Size of mmap'able area */ ++}; ++ ++struct vfio_region_info_cap_sparse_mmap { ++ struct vfio_info_cap_header header; ++ __u32 nr_areas; ++ __u32 reserved; ++ struct vfio_region_sparse_mmap_area areas[]; ++}; ++ + /** + * VFIO_DEVICE_GET_IRQ_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 9, + * struct vfio_irq_info) +diff --git a/trace-events b/trace-events +index cc62b0b..fa2618d 100644 +--- a/trace-events ++++ b/trace-events +@@ -1164,3 +1164,5 @@ vfio_region_mmap(const char *name, unsigned long offset, unsigned long end) "Reg + vfio_region_exit(const char *name, int index) "Device %s, region %d" + vfio_region_finalize(const char *name, int index) "Device %s, region %d" + vfio_region_mmaps_set_enabled(const char *name, bool enabled) "Region %s mmaps enabled: %d" ++vfio_region_sparse_mmap_header(const char *name, int index, int nr_areas) "Device %s region %d: %d sparse mmap entries" ++vfio_region_sparse_mmap_entry(int i, unsigned long start, unsigned long end) "sparse entry %d [0x%lx - 0x%lx]" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Fix-MSI-X-vector-expansion.patch b/SOURCES/kvm-vfio-Fix-MSI-X-vector-expansion.patch new file mode 100644 index 0000000..b9c0c0d --- /dev/null +++ b/SOURCES/kvm-vfio-Fix-MSI-X-vector-expansion.patch @@ -0,0 +1,93 @@ +From e71b8aac80271011c1248a32782452c02bb23198 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 7 Aug 2014 21:03:14 +0200 +Subject: [PATCH 6/7] vfio: Fix MSI-X vector expansion + +Message-id: <20140807210314.11689.89693.stgit@gimli.home> +Patchwork-id: 60482 +O-Subject: [RHEL7.0/z qemu-kvm PATCH v2 5/6] vfio: Fix MSI-X vector expansion +Bugzilla: 1098976 +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong +RH-Acked-by: Laszlo Ersek + +When new MSI-X vectors are enabled we need to disable MSI-X and +re-enable it with the correct number of vectors. That means we need +to reprogram the eventfd triggers for each vector. Prior to f4d45d47 +vector->use tracked whether a vector was masked or unmasked and we +could always pick the KVM path when available for unmasked vectors. +Now vfio doesn't track mask state itself and vector->use and virq +remains configured even for masked vectors. Therefore we need to ask +the MSI-X code whether a vector is masked in order to select the +correct signaling path. As noted in the comment, MSI relies on +hardware to handle masking. + +Signed-off-by: Alex Williamson +Cc: qemu-stable@nongnu.org # QEMU 2.1 +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 38 +++++++++++++++++++++++++++++--------- + 1 file changed, 29 insertions(+), 9 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index bd37924..688e2ef 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -119,11 +119,20 @@ typedef struct VFIOINTx { + } VFIOINTx; + + typedef struct VFIOMSIVector { +- EventNotifier interrupt; /* eventfd triggered on interrupt */ +- EventNotifier kvm_interrupt; /* eventfd triggered for KVM irqfd bypass */ ++ /* ++ * Two interrupt paths are configured per vector. The first, is only used ++ * for interrupts injected via QEMU. This is typically the non-accel path, ++ * but may also be used when we want QEMU to handle masking and pending ++ * bits. The KVM path bypasses QEMU and is therefore higher performance, ++ * but requires masking at the device. virq is used to track the MSI route ++ * through KVM, thus kvm_interrupt is only available when virq is set to a ++ * valid (>= 0) value. ++ */ ++ EventNotifier interrupt; ++ EventNotifier kvm_interrupt; + struct VFIODevice *vdev; /* back pointer to device */ + MSIMessage msg; /* cache the MSI message so we know when it changes */ +- int virq; /* KVM irqchip route for QEMU bypass */ ++ int virq; + bool use; + } VFIOMSIVector; + +@@ -662,13 +671,24 @@ static int vfio_enable_vectors(VFIODevice *vdev, bool msix) + fds = (int32_t *)&irq_set->data; + + for (i = 0; i < vdev->nr_vectors; i++) { +- if (!vdev->msi_vectors[i].use) { +- fds[i] = -1; +- } else if (vdev->msi_vectors[i].virq >= 0) { +- fds[i] = event_notifier_get_fd(&vdev->msi_vectors[i].kvm_interrupt); +- } else { +- fds[i] = event_notifier_get_fd(&vdev->msi_vectors[i].interrupt); ++ int fd = -1; ++ ++ /* ++ * MSI vs MSI-X - The guest has direct access to MSI mask and pending ++ * bits, therefore we always use the KVM signaling path when setup. ++ * MSI-X mask and pending bits are emulated, so we want to use the ++ * KVM signaling path only when configured and unmasked. ++ */ ++ if (vdev->msi_vectors[i].use) { ++ if (vdev->msi_vectors[i].virq < 0 || ++ (msix && msix_is_masked(&vdev->pdev, i))) { ++ fd = event_notifier_get_fd(&vdev->msi_vectors[i].interrupt); ++ } else { ++ fd = event_notifier_get_fd(&vdev->msi_vectors[i].kvm_interrupt); ++ } + } ++ ++ fds[i] = fd; + } + + ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Fix-overrun-after-readlink-fills-buffer-complet.patch b/SOURCES/kvm-vfio-Fix-overrun-after-readlink-fills-buffer-complet.patch new file mode 100644 index 0000000..c11cc27 --- /dev/null +++ b/SOURCES/kvm-vfio-Fix-overrun-after-readlink-fills-buffer-complet.patch @@ -0,0 +1,55 @@ +From a254fe579062a9eaf97f2b81474c19b4b46ddc85 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:33:56 +0200 +Subject: [PATCH 04/14] vfio: Fix overrun after readlink() fills buffer + completely + +Message-id: <20150410163356.15324.47617.stgit@gimli.home> +Patchwork-id: 64786 +O-Subject: [RHEL7.2 qemu-kvm PATCH 4/8] vfio: Fix overrun after readlink() fills buffer completely +Bugzilla: 1210504 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +From: Markus Armbruster + +Upstream: 13665a2d2f675341e73618fcd7f9d36b6c68b509 + +readlink() returns the number of bytes written to the buffer, and it +doesn't write a terminating null byte. vfio_init() writes it itself. +Overruns the buffer when readlink() filled it completely. + +Fix by treating readlink() filling the buffer completely as error, +like we do in pci-assign.c's assign_failed_examine(). + +Spotted by Coverity. + +Signed-off-by: Markus Armbruster +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 57bc974..81e6594 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3767,10 +3767,10 @@ static int vfio_initfn(PCIDevice *pdev) + + strncat(path, "iommu_group", sizeof(path) - strlen(path) - 1); + +- len = readlink(path, iommu_group_path, PATH_MAX); +- if (len <= 0) { ++ len = readlink(path, iommu_group_path, sizeof(path)); ++ if (len <= 0 || len >= sizeof(path)) { + error_report("vfio: error no iommu_group for device"); +- return -errno; ++ return len < 0 ? -errno : ENAMETOOLONG; + } + + iommu_group_path[len] = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Generalize-region-support.patch b/SOURCES/kvm-vfio-Generalize-region-support.patch new file mode 100644 index 0000000..c0018c8 --- /dev/null +++ b/SOURCES/kvm-vfio-Generalize-region-support.patch @@ -0,0 +1,591 @@ +From a33e922436f708fe4881da4b6f363c49db5af581 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:46:02 +0200 +Subject: [PATCH 14/27] vfio: Generalize region support + +RH-Author: Alex Williamson +Message-id: <20170929214601.16765.68107.stgit@gimli.home> +Patchwork-id: 76772 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 14/16] vfio: Generalize region support +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +Upstream: db0da029a1853d46c90a6c0790ce6ca77fd46ea3 +RHEL: MemoryRegions still destroyed from exitfn, so finalize is called + immediately after exit with memory_region_destroy(). + +Both platform and PCI vfio drivers create a "slow", I/O memory region +with one or more mmap memory regions overlayed when supported by the +device. Generalize this to a set of common helpers in the core that +pulls the region info from vfio, fills the region data, configures +slow mapping, and adds helpers for comleting the mmap, enable/disable, +and teardown. This can be immediately used by the PCI MSI-X code, +which needs to mmap around the MSI-X vector table. + +This also changes VFIORegion.mem to be dynamically allocated because +otherwise we don't know how the caller has allocated VFIORegion and +therefore don't know whether to unreference it to destroy the +MemoryRegion or not. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 360 +++++++++++++++++++++++++++++++++++++++------------------ + trace-events | 9 ++ + 2 files changed, 258 insertions(+), 111 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 57a0065..d634531 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -39,6 +39,7 @@ + #include "qemu/range.h" + #include "sysemu/kvm.h" + #include "sysemu/sysemu.h" ++#include "trace.h" + + /* #define DEBUG_VFIO */ + #ifdef DEBUG_VFIO +@@ -84,14 +85,21 @@ typedef struct VFIOQuirk { + } data; + } VFIOQuirk; + ++typedef struct VFIOMmap { ++ MemoryRegion mem; ++ void *mmap; ++ off_t offset; ++ size_t size; ++} VFIOMmap; ++ + typedef struct VFIORegion { + struct VFIODevice *vbasedev; + off_t fd_offset; /* offset of region within device fd */ +- MemoryRegion mem; /* slow, read/write access */ +- MemoryRegion mmap_mem; /* direct mapped access */ +- void *mmap; ++ MemoryRegion *mem; /* slow, read/write access */ + size_t size; + uint32_t flags; /* VFIO region flags (rd/wr/mmap) */ ++ uint32_t nr_mmaps; ++ VFIOMmap *mmaps; + uint8_t nr; /* cache the region number for debug */ + } VFIORegion; + +@@ -294,6 +302,9 @@ static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); + static int vfio_get_region_info(VFIODevice *vbasedev, int index, + struct vfio_region_info **info); ++static void vfio_region_mmaps_set_enabled(VFIORegion *region, bool enabled); ++static void vfio_region_exit(VFIORegion *region); ++static void vfio_region_finalize(VFIORegion *region); + + /* + * Common VFIO interrupt disable +@@ -1681,7 +1692,7 @@ static void vfio_probe_ati_bar4_window_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, + &vfio_generic_window_quirk, quirk, + "vfio-ati-bar4-window-quirk", 8); +- memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, ++ memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, + quirk->data.base_offset, &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); +@@ -1714,7 +1725,7 @@ static void vfio_probe_ati_bar2_4000_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, &vfio_generic_quirk, quirk, + "vfio-ati-bar2-4000-quirk", + TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); +- memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, ++ memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, + quirk->data.address_match & TARGET_PAGE_MASK, + &quirk->mem, 1); + +@@ -1939,7 +1950,7 @@ static void vfio_probe_nvidia_bar5_window_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, + &vfio_nvidia_bar5_window_quirk, quirk, + "vfio-nvidia-bar5-window-quirk", 16); +- memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, ++ memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, + 0, &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); +@@ -1977,7 +1988,7 @@ static void vfio_probe_nvidia_bar0_88000_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, &vfio_generic_quirk, + quirk, "vfio-nvidia-bar0-88000-quirk", + TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); +- memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, ++ memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, + quirk->data.address_match & TARGET_PAGE_MASK, + &quirk->mem, 1); + +@@ -2015,7 +2026,7 @@ static void vfio_probe_nvidia_bar0_1800_quirk(VFIOPCIDevice *vdev, int nr) + memory_region_init_io(&quirk->mem, &vfio_generic_quirk, quirk, + "vfio-nvidia-bar0-1800-quirk", + TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); +- memory_region_add_subregion_overlap(&vdev->bars[nr].region.mem, ++ memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, + quirk->data.address_match & TARGET_PAGE_MASK, + &quirk->mem, 1); + +@@ -2070,7 +2081,7 @@ static void vfio_bar_quirk_teardown(VFIOPCIDevice *vdev, int nr) + + while (!QLIST_EMPTY(&bar->quirks)) { + VFIOQuirk *quirk = QLIST_FIRST(&bar->quirks); +- memory_region_del_subregion(&bar->region.mem, &quirk->mem); ++ memory_region_del_subregion(bar->region.mem, &quirk->mem); + memory_region_destroy(&quirk->mem); + QLIST_REMOVE(quirk, next); + g_free(quirk); +@@ -2384,6 +2395,74 @@ static int vfio_setup_msi(VFIOPCIDevice *vdev, int pos) + return 0; + } + ++static void vfio_pci_fixup_msix_region(VFIOPCIDevice *vdev) ++{ ++ off_t start, end; ++ VFIORegion *region = &vdev->bars[vdev->msix->table_bar].region; ++ ++ /* ++ * We expect to find a single mmap covering the whole BAR, anything else ++ * means it's either unsupported or already setup. ++ */ ++ if (region->nr_mmaps != 1 || region->mmaps[0].offset || ++ region->size != region->mmaps[0].size) { ++ return; ++ } ++ ++ /* MSI-X table start and end aligned to host page size */ ++ start = vdev->msix->table_offset & TARGET_PAGE_MASK; ++ end = TARGET_PAGE_ALIGN((uint64_t)vdev->msix->table_offset + ++ (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE)); ++ ++ /* ++ * Does the MSI-X table cover the beginning of the BAR? The whole BAR? ++ * NB - Host page size is necessarily a power of two and so is the PCI ++ * BAR (not counting EA yet), therefore if we have host page aligned ++ * @start and @end, then any remainder of the BAR before or after those ++ * must be at least host page sized and therefore mmap'able. ++ */ ++ if (!start) { ++ if (end >= region->size) { ++ region->nr_mmaps = 0; ++ g_free(region->mmaps); ++ region->mmaps = NULL; ++ trace_vfio_msix_fixup(vdev->vbasedev.name, ++ vdev->msix->table_bar, 0, 0); ++ } else { ++ region->mmaps[0].offset = end; ++ region->mmaps[0].size = region->size - end; ++ trace_vfio_msix_fixup(vdev->vbasedev.name, ++ vdev->msix->table_bar, region->mmaps[0].offset, ++ region->mmaps[0].offset + region->mmaps[0].size); ++ } ++ ++ /* Maybe it's aligned at the end of the BAR */ ++ } else if (end >= region->size) { ++ region->mmaps[0].size = start; ++ trace_vfio_msix_fixup(vdev->vbasedev.name, ++ vdev->msix->table_bar, region->mmaps[0].offset, ++ region->mmaps[0].offset + region->mmaps[0].size); ++ ++ /* Otherwise it must split the BAR */ ++ } else { ++ region->nr_mmaps = 2; ++ region->mmaps = g_renew(VFIOMmap, region->mmaps, 2); ++ ++ memcpy(®ion->mmaps[1], ®ion->mmaps[0], sizeof(VFIOMmap)); ++ ++ region->mmaps[0].size = start; ++ trace_vfio_msix_fixup(vdev->vbasedev.name, ++ vdev->msix->table_bar, region->mmaps[0].offset, ++ region->mmaps[0].offset + region->mmaps[0].size); ++ ++ region->mmaps[1].offset = end; ++ region->mmaps[1].size = region->size - end; ++ trace_vfio_msix_fixup(vdev->vbasedev.name, ++ vdev->msix->table_bar, region->mmaps[1].offset, ++ region->mmaps[1].offset + region->mmaps[1].size); ++ } ++} ++ + /* + * We don't have any control over how pci_add_capability() inserts + * capabilities into the chain. In order to setup MSI-X we need a +@@ -2461,6 +2540,8 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev) + } + } + ++ vfio_pci_fixup_msix_region(vdev); ++ + return 0; + } + +@@ -2469,9 +2550,9 @@ static int vfio_setup_msix(VFIOPCIDevice *vdev, int pos) + int ret; + + ret = msix_init(&vdev->pdev, vdev->msix->entries, +- &vdev->bars[vdev->msix->table_bar].region.mem, ++ vdev->bars[vdev->msix->table_bar].region.mem, + vdev->msix->table_bar, vdev->msix->table_offset, +- &vdev->bars[vdev->msix->pba_bar].region.mem, ++ vdev->bars[vdev->msix->pba_bar].region.mem, + vdev->msix->pba_bar, vdev->msix->pba_offset, pos); + if (ret < 0) { + if (ret == -ENOTSUP) { +@@ -2490,8 +2571,8 @@ static void vfio_teardown_msi(VFIOPCIDevice *vdev) + + if (vdev->msix) { + msix_uninit(&vdev->pdev, +- &vdev->bars[vdev->msix->table_bar].region.mem, +- &vdev->bars[vdev->msix->pba_bar].region.mem); ++ vdev->bars[vdev->msix->table_bar].region.mem, ++ vdev->bars[vdev->msix->pba_bar].region.mem); + } + } + +@@ -2503,16 +2584,7 @@ static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled) + int i; + + for (i = 0; i < PCI_ROM_SLOT; i++) { +- VFIOBAR *bar = &vdev->bars[i]; +- +- if (!bar->region.size) { +- continue; +- } +- +- memory_region_set_enabled(&bar->region.mmap_mem, enabled); +- if (vdev->msix && vdev->msix->table_bar == i) { +- memory_region_set_enabled(&vdev->msix->mmap_mem, enabled); +- } ++ vfio_region_mmaps_set_enabled(&vdev->bars[i].region, enabled); + } + } + +@@ -2526,65 +2598,171 @@ static void vfio_unmap_bar(VFIOPCIDevice *vdev, int nr) + + vfio_bar_quirk_teardown(vdev, nr); + +- memory_region_del_subregion(&bar->region.mem, &bar->region.mmap_mem); +- munmap(bar->region.mmap, memory_region_size(&bar->region.mmap_mem)); +- memory_region_destroy(&bar->region.mmap_mem); ++ vfio_region_exit(&bar->region); ++ vfio_region_finalize(&bar->region); ++} ++ ++static int vfio_region_setup(Object *obj, VFIODevice *vbasedev, ++ VFIORegion *region, int index, const char *name) ++{ ++ struct vfio_region_info *info; ++ int ret; ++ ++ ret = vfio_get_region_info(vbasedev, index, &info); ++ if (ret) { ++ return ret; ++ } ++ ++ region->vbasedev = vbasedev; ++ region->flags = info->flags; ++ region->size = info->size; ++ region->fd_offset = info->offset; ++ region->nr = index; + +- if (vdev->msix && vdev->msix->table_bar == nr) { +- memory_region_del_subregion(&bar->region.mem, &vdev->msix->mmap_mem); +- munmap(vdev->msix->mmap, memory_region_size(&vdev->msix->mmap_mem)); +- memory_region_destroy(&vdev->msix->mmap_mem); ++ if (region->size) { ++ region->mem = g_new0(MemoryRegion, 1); ++ memory_region_init_io(region->mem, &vfio_region_ops, ++ region, name, region->size); ++ ++ if (VFIO_ALLOW_MMAP && ++ region->flags & VFIO_REGION_INFO_FLAG_MMAP && ++ !(region->size & ~TARGET_PAGE_MASK)) { ++ ++ region->nr_mmaps = 1; ++ region->mmaps = g_new0(VFIOMmap, region->nr_mmaps); ++ ++ region->mmaps[0].offset = 0; ++ region->mmaps[0].size = region->size; ++ } + } + +- memory_region_destroy(&bar->region.mem); ++ g_free(info); ++ ++ trace_vfio_region_setup(vbasedev->name, index, name, ++ region->flags, region->fd_offset, region->size); ++ return 0; + } + +-static int vfio_mmap_region(Object *obj, VFIORegion *region, +- MemoryRegion *mem, MemoryRegion *submem, +- void **map, size_t size, off_t offset, +- const char *name) ++static int vfio_region_mmap(VFIORegion *region) + { +- int ret = 0; +- VFIODevice *vbasedev = region->vbasedev; ++ int i, prot = 0; ++ char *name; ++ ++ if (!region->mem) { ++ return 0; ++ } ++ ++ prot |= region->flags & VFIO_REGION_INFO_FLAG_READ ? PROT_READ : 0; ++ prot |= region->flags & VFIO_REGION_INFO_FLAG_WRITE ? PROT_WRITE : 0; ++ ++ for (i = 0; i < region->nr_mmaps; i++) { ++ region->mmaps[i].mmap = mmap(NULL, region->mmaps[i].size, prot, ++ MAP_SHARED, region->vbasedev->fd, ++ region->fd_offset + ++ region->mmaps[i].offset); ++ if (region->mmaps[i].mmap == MAP_FAILED) { ++ int ret = -errno; + +- if (VFIO_ALLOW_MMAP && size && region->flags & +- VFIO_REGION_INFO_FLAG_MMAP) { +- int prot = 0; ++ trace_vfio_region_mmap_fault(memory_region_name(region->mem), i, ++ region->fd_offset + ++ region->mmaps[i].offset, ++ region->fd_offset + ++ region->mmaps[i].offset + ++ region->mmaps[i].size - 1, ret); + +- if (region->flags & VFIO_REGION_INFO_FLAG_READ) { +- prot |= PROT_READ; ++ region->mmaps[i].mmap = NULL; ++ ++ for (i--; i >= 0; i--) { ++ memory_region_del_subregion(region->mem, ®ion->mmaps[i].mem); ++ munmap(region->mmaps[i].mmap, region->mmaps[i].size); ++ memory_region_destroy(®ion->mmaps[i].mem); ++ region->mmaps[i].mmap = NULL; ++ } ++ ++ return ret; + } + +- if (region->flags & VFIO_REGION_INFO_FLAG_WRITE) { +- prot |= PROT_WRITE; ++ name = g_strdup_printf("%s mmaps[%d]", ++ memory_region_name(region->mem), i); ++ memory_region_init_ram_ptr(®ion->mmaps[i].mem, ++ name, region->mmaps[i].size, ++ region->mmaps[i].mmap); ++ g_free(name); ++ memory_region_set_skip_dump(®ion->mmaps[i].mem); ++ memory_region_add_subregion(region->mem, region->mmaps[i].offset, ++ ®ion->mmaps[i].mem); ++ ++ trace_vfio_region_mmap(memory_region_name(®ion->mmaps[i].mem), ++ region->mmaps[i].offset, ++ region->mmaps[i].offset + ++ region->mmaps[i].size - 1); ++ } ++ ++ return 0; ++} ++ ++static void vfio_region_exit(VFIORegion *region) ++{ ++ int i; ++ ++ if (!region->mem) { ++ return; ++ } ++ ++ for (i = 0; i < region->nr_mmaps; i++) { ++ if (region->mmaps[i].mmap) { ++ memory_region_del_subregion(region->mem, ®ion->mmaps[i].mem); + } ++ } ++ ++ trace_vfio_region_exit(region->vbasedev->name, region->nr); ++} ++ ++static void vfio_region_finalize(VFIORegion *region) ++{ ++ int i; ++ ++ if (!region->mem) { ++ return; ++ } + +- *map = mmap(NULL, size, prot, MAP_SHARED, +- vbasedev->fd, region->fd_offset + offset); +- if (*map == MAP_FAILED) { +- *map = NULL; +- ret = -errno; +- goto empty_region; ++ for (i = 0; i < region->nr_mmaps; i++) { ++ if (region->mmaps[i].mmap) { ++ munmap(region->mmaps[i].mmap, region->mmaps[i].size); ++ memory_region_destroy(®ion->mmaps[i].mem); + } ++ } + +- memory_region_init_ram_ptr(submem, name, size, *map); +- memory_region_set_skip_dump(submem); +- } else { +-empty_region: +- /* Create a zero sized sub-region to make cleanup easy. */ +- memory_region_init(submem, name, 0); ++ memory_region_destroy(region->mem); ++ ++ g_free(region->mem); ++ g_free(region->mmaps); ++ ++ trace_vfio_region_finalize(region->vbasedev->name, region->nr); ++} ++ ++static void vfio_region_mmaps_set_enabled(VFIORegion *region, bool enabled) ++{ ++ int i; ++ ++ if (!region->mem) { ++ return; + } + +- memory_region_add_subregion(mem, offset, submem); ++ for (i = 0; i < region->nr_mmaps; i++) { ++ if (region->mmaps[i].mmap) { ++ memory_region_set_enabled(®ion->mmaps[i].mem, enabled); ++ } ++ } + +- return ret; ++ trace_vfio_region_mmaps_set_enabled(memory_region_name(region->mem), ++ enabled); + } + + static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; + uint64_t size = bar->region.size; +- char name[64]; + uint32_t pci_bar; + uint8_t type; + int ret; +@@ -2594,8 +2772,6 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + return; + } + +- snprintf(name, sizeof(name), "VFIO %s BAR %d", vdev->vbasedev.name, nr); +- + /* Determine what type of BAR this is for registration */ + ret = pread(vdev->vbasedev.fd, &pci_bar, sizeof(pci_bar), + vdev->config_offset + PCI_BASE_ADDRESS_0 + (4 * nr)); +@@ -2610,40 +2786,11 @@ static void vfio_map_bar(VFIOPCIDevice *vdev, int nr) + type = pci_bar & (bar->ioport ? ~PCI_BASE_ADDRESS_IO_MASK : + ~PCI_BASE_ADDRESS_MEM_MASK); + +- /* A "slow" read/write mapping underlies all BARs */ +- memory_region_init_io(&bar->region.mem, &vfio_region_ops, +- bar, name, size); +- pci_register_bar(&vdev->pdev, nr, type, &bar->region.mem); +- +- /* +- * We can't mmap areas overlapping the MSIX vector table, so we +- * potentially insert a direct-mapped subregion before and after it. +- */ +- if (vdev->msix && vdev->msix->table_bar == nr) { +- size = vdev->msix->table_offset & TARGET_PAGE_MASK; +- } +- +- strncat(name, " mmap", sizeof(name) - strlen(name) - 1); +- if (vfio_mmap_region(OBJECT(vdev), &bar->region, &bar->region.mem, +- &bar->region.mmap_mem, &bar->region.mmap, +- size, 0, name)) { +- error_report("%s unsupported. Performance may be slow", name); +- } +- +- if (vdev->msix && vdev->msix->table_bar == nr) { +- uint64_t start; ++ pci_register_bar(&vdev->pdev, nr, type, bar->region.mem); + +- start = TARGET_PAGE_ALIGN((uint64_t)vdev->msix->table_offset + +- (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE)); +- +- size = start < bar->region.size ? bar->region.size - start : 0; +- strncat(name, " msix-hi", sizeof(name) - strlen(name) - 1); +- /* VFIOMSIXInfo contains another MemoryRegion for this mapping */ +- if (vfio_mmap_region(OBJECT(vdev), &bar->region, &bar->region.mem, +- &vdev->msix->mmap_mem, +- &vdev->msix->mmap, size, start, name)) { +- error_report("%s unsupported. Performance may be slow", name); +- } ++ if (vfio_region_mmap(&bar->region)) { ++ error_report("Failed to mmap %s BAR %d. Performance may be slow", ++ vdev->vbasedev.name, nr); + } + + vfio_bar_quirk_setup(vdev, nr); +@@ -3531,25 +3678,18 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + } + + for (i = VFIO_PCI_BAR0_REGION_INDEX; i < VFIO_PCI_ROM_REGION_INDEX; i++) { +- ret = vfio_get_region_info(&vdev->vbasedev, i, ®_info); ++ char *name = g_strdup_printf("%s BAR %d", vdev->vbasedev.name, i); ++ ++ ret = vfio_region_setup(OBJECT(vdev), &vdev->vbasedev, ++ &vdev->bars[i].region, i, name); ++ g_free(name); ++ + if (ret) { + error_report("vfio: Error getting region %d info: %m", i); + goto error; + } + +- DPRINTF("Device %s region %d:\n", name, i); +- DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", +- (unsigned long)reg_info->size, (unsigned long)reg_info->offset, +- (unsigned long)reg_info->flags); +- +- vdev->bars[i].region.vbasedev = &vdev->vbasedev; +- vdev->bars[i].region.flags = reg_info->flags; +- vdev->bars[i].region.size = reg_info->size; +- vdev->bars[i].region.fd_offset = reg_info->offset; +- vdev->bars[i].region.nr = i; + QLIST_INIT(&vdev->bars[i].quirks); +- +- g_free(reg_info); + } + + ret = vfio_get_region_info(&vdev->vbasedev, +@@ -3644,10 +3784,8 @@ static void vfio_put_device(VFIOPCIDevice *vdev) + DPRINTF("vfio_put_device: close vdev->vbasedev.fd\n"); + close(vdev->vbasedev.fd); + g_free(vdev->vbasedev.name); +- if (vdev->msix) { +- g_free(vdev->msix); +- vdev->msix = NULL; +- } ++ g_free(vdev->msix); ++ + } + + static int vfio_get_region_info(VFIODevice *vbasedev, int index, +diff --git a/trace-events b/trace-events +index 6cd46e9..cc62b0b 100644 +--- a/trace-events ++++ b/trace-events +@@ -1155,3 +1155,12 @@ kvm_run_exit(int cpu_index, uint32_t reason) "cpu_index %d, reason %d" + # qom/object.c + object_dynamic_cast_assert(const char *type, const char *target, const char *file, int line, const char *func) "%s->%s (%s:%d:%s)" + object_class_dynamic_cast_assert(const char *type, const char *target, const char *file, int line, const char *func) "%s->%s (%s:%d:%s)" ++ ++# hw/misc/vfio.c ++vfio_msix_fixup(const char *name, int bar, uint64_t start, uint64_t end) " (%s) MSI-X region %d mmap fixup [0x%"PRIx64" - 0x%"PRIx64"]" ++vfio_region_setup(const char *dev, int index, const char *name, unsigned long flags, unsigned long offset, unsigned long size) "Device %s, region %d \"%s\", flags: %lx, offset: %lx, size: %lx" ++vfio_region_mmap_fault(const char *name, int index, unsigned long offset, unsigned long size, int fault) "Region %s mmaps[%d], [%lx - %lx], fault: %d" ++vfio_region_mmap(const char *name, unsigned long offset, unsigned long end) "Region %s [%lx - %lx]" ++vfio_region_exit(const char *name, int index) "Device %s, region %d" ++vfio_region_finalize(const char *name, int index) "Device %s, region %d" ++vfio_region_mmaps_set_enabled(const char *name, bool enabled) "Region %s mmaps enabled: %d" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Handle-zero-length-sparse-mmap-ranges.patch b/SOURCES/kvm-vfio-Handle-zero-length-sparse-mmap-ranges.patch new file mode 100644 index 0000000..6f40b9a --- /dev/null +++ b/SOURCES/kvm-vfio-Handle-zero-length-sparse-mmap-ranges.patch @@ -0,0 +1,110 @@ +From 9291ea1d33e70d9c01558da25ac6744ff2ef77ec Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:46:24 +0200 +Subject: [PATCH 16/27] vfio: Handle zero-length sparse mmap ranges + +RH-Author: Alex Williamson +Message-id: <20170929214624.16765.84023.stgit@gimli.home> +Patchwork-id: 76774 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 16/16] vfio: Handle zero-length sparse mmap ranges +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +Upstream: 24acf72b9a291cebfd05f2ecdf3a982ac01e6291 + +As reported in the link below, user has a PCI device with a 4KB BAR +which contains the MSI-X table. This seems to hit a corner case in +the kernel where the region reports being mmap capable, but the sparse +mmap information reports a zero sized range. It's not entirely clear +that the kernel is incorrect in doing this, but regardless, we need +to handle it. To do this, fill our mmap array only with non-zero +sized sparse mmap entries and add an error return from the function +so we can tell the difference between nr_mmaps being zero based on +sparse mmap info vs lack of sparse mmap info. + +NB, this doesn't actually change the behavior of the device, it only +removes the scary "Failed to mmap ... Performance may be slow" error +message. We cannot currently create an mmap over the MSI-X table. + +Link: http://lists.nongnu.org/archive/html/qemu-discuss/2016-10/msg00009.html +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 36 ++++++++++++++++++++++-------------- + 1 file changed, 22 insertions(+), 14 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index a27698b..68ff949 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2621,16 +2621,16 @@ vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id) + return NULL; + } + +-static void vfio_setup_region_sparse_mmaps(VFIORegion *region, +- struct vfio_region_info *info) ++static int vfio_setup_region_sparse_mmaps(VFIORegion *region, ++ struct vfio_region_info *info) + { + struct vfio_info_cap_header *hdr; + struct vfio_region_info_cap_sparse_mmap *sparse; +- int i; ++ int i, j; + + hdr = vfio_get_region_info_cap(info, VFIO_REGION_INFO_CAP_SPARSE_MMAP); + if (!hdr) { +- return; ++ return -ENODEV; + } + + sparse = container_of(hdr, struct vfio_region_info_cap_sparse_mmap, header); +@@ -2638,16 +2638,24 @@ static void vfio_setup_region_sparse_mmaps(VFIORegion *region, + trace_vfio_region_sparse_mmap_header(region->vbasedev->name, + region->nr, sparse->nr_areas); + +- region->nr_mmaps = sparse->nr_areas; +- region->mmaps = g_new0(VFIOMmap, region->nr_mmaps); ++ region->mmaps = g_new0(VFIOMmap, sparse->nr_areas); + +- for (i = 0; i < region->nr_mmaps; i++) { +- region->mmaps[i].offset = sparse->areas[i].offset; +- region->mmaps[i].size = sparse->areas[i].size; +- trace_vfio_region_sparse_mmap_entry(i, region->mmaps[i].offset, +- region->mmaps[i].offset + +- region->mmaps[i].size); ++ for (i = 0, j = 0; i < sparse->nr_areas; i++) { ++ trace_vfio_region_sparse_mmap_entry(i, sparse->areas[i].offset, ++ sparse->areas[i].offset + ++ sparse->areas[i].size); ++ ++ if (sparse->areas[i].size) { ++ region->mmaps[j].offset = sparse->areas[i].offset; ++ region->mmaps[j].size = sparse->areas[i].size; ++ j++; ++ } + } ++ ++ region->nr_mmaps = j; ++ region->mmaps = g_realloc(region->mmaps, j * sizeof(VFIOMmap)); ++ ++ return 0; + } + + static int vfio_region_setup(Object *obj, VFIODevice *vbasedev, +@@ -2676,9 +2684,9 @@ static int vfio_region_setup(Object *obj, VFIODevice *vbasedev, + region->flags & VFIO_REGION_INFO_FLAG_MMAP && + !(region->size & ~TARGET_PAGE_MASK)) { + +- vfio_setup_region_sparse_mmaps(region, info); ++ ret = vfio_setup_region_sparse_mmaps(region, info); + +- if (!region->nr_mmaps) { ++ if (ret) { + region->nr_mmaps = 1; + region->mmaps = g_new0(VFIOMmap, region->nr_mmaps); + region->mmaps[0].offset = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Inhibit-ballooning-based-on-group-attachment-to.patch b/SOURCES/kvm-vfio-Inhibit-ballooning-based-on-group-attachment-to.patch new file mode 100644 index 0000000..c766450 --- /dev/null +++ b/SOURCES/kvm-vfio-Inhibit-ballooning-based-on-group-attachment-to.patch @@ -0,0 +1,169 @@ +From e9148733cef44bebb0d74a731a70b3304e720634 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 13 Dec 2018 21:55:26 +0100 +Subject: [PATCH 5/5] vfio: Inhibit ballooning based on group attachment to a + container + +RH-Author: Alex Williamson +Message-id: <154473812659.22725.6814768117383324849.stgit@gimli.home> +Patchwork-id: 83497 +O-Subject: [RHEL-7.7 qemu-kvm PATCH 5/5] vfio: Inhibit ballooning based on group attachment to a container +Bugzilla: 1659229 +RH-Acked-by: Peter Xu +RH-Acked-by: Cornelia Huck +RH-Acked-by: Auger Eric + +Bugzilla: 1659229 +Notes: Error path has more exit paths versus upstream + +We use a VFIOContainer to associate an AddressSpace to one or more +VFIOGroups. The VFIOContainer represents the DMA context for that +AdressSpace for those VFIOGroups and is synchronized to changes in +that AddressSpace via a MemoryListener. For IOMMU backed devices, +maintaining the DMA context for a VFIOGroup generally involves +pinning a host virtual address in order to create a stable host +physical address and then mapping a translation from the associated +guest physical address to that host physical address into the IOMMU. + +While the above maintains the VFIOContainer synchronized to the QEMU +memory API of the VM, memory ballooning occurs outside of that API. +Inflating the memory balloon (ie. cooperatively capturing pages from +the guest for use by the host) simply uses MADV_DONTNEED to "zap" +pages from QEMU's host virtual address space. The page pinning and +IOMMU mapping above remains in place, negating the host's ability to +reuse the page, but the host virtual to host physical mapping of the +page is invalidated outside of QEMU's memory API. + +When the balloon is later deflated, attempting to cooperatively +return pages to the guest, the page is simply freed by the guest +balloon driver, allowing it to be used in the guest and incurring a +page fault when that occurs. The page fault maps a new host physical +page backing the existing host virtual address, meanwhile the +VFIOContainer still maintains the translation to the original host +physical address. At this point the guest vCPU and any assigned +devices will map different host physical addresses to the same guest +physical address. Badness. + +The IOMMU typically does not have page level granularity with which +it can track this mapping without also incurring inefficiencies in +using page size mappings throughout. MMU notifiers in the host +kernel also provide indicators for invalidating the mapping on +balloon inflation, not for updating the mapping when the balloon is +deflated. For these reasons we assume a default behavior that the +mapping of each VFIOGroup into the VFIOContainer is incompatible +with memory ballooning and increment the balloon inhibitor to match +the attached VFIOGroups. + +Reviewed-by: Peter Xu +Signed-off-by: Alex Williamson +(cherry picked from commit c65ee433153b5925e183a00ebf568e160077c694) +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 35 +++++++++++++++++++++++++++++++++++ + 1 file changed, 35 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index f91eecb..f7360bf 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -37,6 +37,7 @@ + #include "qemu/event_notifier.h" + #include "qemu/queue.h" + #include "qemu/range.h" ++#include "sysemu/balloon.h" + #include "sysemu/kvm.h" + #include "sysemu/sysemu.h" + #include "trace.h" +@@ -3667,6 +3668,33 @@ static int vfio_connect_container(VFIOGroup *group) + return 0; + } + ++ /* ++ * VFIO is currently incompatible with memory ballooning insofar as the ++ * madvise to purge (zap) the page from QEMU's address space does not ++ * interact with the memory API and therefore leaves stale virtual to ++ * physical mappings in the IOMMU if the page was previously pinned. We ++ * therefore add a balloon inhibit for each group added to a container, ++ * whether the container is used individually or shared. This provides ++ * us with options to allow devices within a group to opt-in and allow ++ * ballooning, so long as it is done consistently for a group (for instance ++ * if the device is an mdev device where it is known that the host vendor ++ * driver will never pin pages outside of the working set of the guest ++ * driver, which would thus not be ballooning candidates). ++ * ++ * The first opportunity to induce pinning occurs here where we attempt to ++ * attach the group to existing containers within the AddressSpace. If any ++ * pages are already zapped from the virtual address space, such as from a ++ * previous ballooning opt-in, new pinning will cause valid mappings to be ++ * re-established. Likewise, when the overall MemoryListener for a new ++ * container is registered, a replay of mappings within the AddressSpace ++ * will occur, re-establishing any previously zapped pages as well. ++ * ++ * NB. Balloon inhibiting does not currently block operation of the ++ * balloon driver or revoke previously pinned pages, it only prevents ++ * calling madvise to modify the virtual mapping of ballooned pages. ++ */ ++ qemu_balloon_inhibit(true); ++ + QLIST_FOREACH(container, &container_list, next) { + if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) { + group->container = container; +@@ -3678,6 +3706,7 @@ static int vfio_connect_container(VFIOGroup *group) + fd = qemu_open("/dev/vfio/vfio", O_RDWR); + if (fd < 0) { + error_report("vfio: failed to open /dev/vfio/vfio: %m"); ++ qemu_balloon_inhibit(false); + return -errno; + } + +@@ -3686,6 +3715,7 @@ static int vfio_connect_container(VFIOGroup *group) + error_report("vfio: supported vfio version: %d, " + "reported version: %d", VFIO_API_VERSION, ret); + close(fd); ++ qemu_balloon_inhibit(false); + return -EINVAL; + } + +@@ -3701,6 +3731,7 @@ static int vfio_connect_container(VFIOGroup *group) + error_report("vfio: failed to set group container: %m"); + g_free(container); + close(fd); ++ qemu_balloon_inhibit(false); + return -errno; + } + +@@ -3710,6 +3741,7 @@ static int vfio_connect_container(VFIOGroup *group) + error_report("vfio: failed to set iommu for container: %m"); + g_free(container); + close(fd); ++ qemu_balloon_inhibit(false); + return -errno; + } + +@@ -3724,6 +3756,7 @@ static int vfio_connect_container(VFIOGroup *group) + vfio_listener_release(container); + g_free(container); + close(fd); ++ qemu_balloon_inhibit(false); + error_report("vfio: memory listener initialization failed for container\n"); + return ret; + } +@@ -3734,6 +3767,7 @@ static int vfio_connect_container(VFIOGroup *group) + error_report("vfio: No available IOMMU models"); + g_free(container); + close(fd); ++ qemu_balloon_inhibit(false); + return -EINVAL; + } + +@@ -3834,6 +3868,7 @@ static void vfio_put_group(VFIOGroup *group) + return; + } + ++ qemu_balloon_inhibit(false); + vfio_kvm_device_del_group(group); + vfio_disconnect_container(group); + QLIST_REMOVE(group, next); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-QEMU-AER-Qemu-changes-to-support-AER-for-VFIO-PCI-devices.patch b/SOURCES/kvm-vfio-QEMU-AER-Qemu-changes-to-support-AER-for-VFIO-PCI-devices.patch new file mode 100644 index 0000000..46033e2 --- /dev/null +++ b/SOURCES/kvm-vfio-QEMU-AER-Qemu-changes-to-support-AER-for-VFIO-PCI-devices.patch @@ -0,0 +1,226 @@ +From 742bae4cea60c8601bbb6e5ec643167d8ca664d7 Mon Sep 17 00:00:00 2001 +From: Nigel Croxon +Date: Tue, 6 Aug 2013 19:52:04 +0200 +Subject: vfio: QEMU-AER: Qemu changes to support AER for VFIO-PCI devices + +RH-Author: Nigel Croxon +Message-id: <1375818724-41239-3-git-send-email-ncroxon@redhat.com> +Patchwork-id: 53017 +O-Subject: [RHEL7.0 qemu-kvm PATCH v2 2/2] vfio: QEMU-AER: Qemu changes to support AER for VFIO-PCI devices +Bugzilla: 984604 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Alex Williamson +RH-Acked-by: Miroslav Rezanina + +From: Vijay Mohan Pandarathil + +Add support for error containment when a VFIO device assigned to a KVM +guest encounters an error. This is for PCIe devices/drivers that support AER +functionality. When the host OS is notified of an error in a device either +through the firmware first approach or through an interrupt handled by the AER +root port driver, the error handler registered by the vfio-pci driver gets +invoked. The qemu process is signaled through an eventfd registered per +VFIO device by the qemu process. In the eventfd handler, qemu decides on +what action to take. In this implementation, guest is brought down to +contain the error. + +The kernel patches for the above functionality has been already accepted. + +This is a refresh of the QEMU patch which was reviewed earlier. +http://marc.info/?l=linux-kernel&m=136281557608087&w=2 +This patch has the same contents and has been built after refreshing +to latest upstream and after the linux headers have been updated in qemu. + + - Create eventfd per vfio device assigned to a guest and register an + event handler + + - This fd is passed to the vfio_pci driver through the SET_IRQ ioctl + + - When the device encounters an error, the eventfd is signalled + and the qemu eventfd handler gets invoked. + + - In the handler decide what action to take. Current action taken + is to stop the guest. + +Signed-off-by: Vijay Mohan Pandarathil +Signed-off-by: Alex Williamson +(cherry picked from commit 7b4b0e9eda51902b53bc1a2318df53cdb8b72eed) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 693a9ff..f8fef8c 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -158,6 +158,7 @@ typedef struct VFIODevice { + PCIHostDeviceAddress host; + QLIST_ENTRY(VFIODevice) next; + struct VFIOGroup *group; ++ EventNotifier err_notifier; + uint32_t features; + #define VFIO_FEATURE_ENABLE_VGA_BIT 0 + #define VFIO_FEATURE_ENABLE_VGA (1 << VFIO_FEATURE_ENABLE_VGA_BIT) +@@ -165,6 +166,7 @@ typedef struct VFIODevice { + uint8_t pm_cap; + bool reset_works; + bool has_vga; ++ bool pci_aer; + } VFIODevice; + + typedef struct VFIOGroup { +@@ -2776,6 +2778,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) + { + struct vfio_device_info dev_info = { .argsz = sizeof(dev_info) }; + struct vfio_region_info reg_info = { .argsz = sizeof(reg_info) }; ++ struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info) }; + int ret, i; + + ret = ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, name); +@@ -2919,6 +2922,19 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) + + vdev->has_vga = true; + } ++ irq_info.index = VFIO_PCI_ERR_IRQ_INDEX; ++ ++ ret = ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); ++ if (ret) { ++ /* This can fail for an old kernel or legacy PCI dev */ ++ DPRINTF("VFIO_DEVICE_GET_IRQ_INFO failure ret=%d\n", ret); ++ ret = 0; ++ } else if (irq_info.count == 1) { ++ vdev->pci_aer = true; ++ } else { ++ error_report("vfio: Warning: " ++ "Could not enable error recovery for the device\n"); ++ } + + error: + if (ret) { +@@ -2941,6 +2957,113 @@ static void vfio_put_device(VFIODevice *vdev) + } + } + ++static void vfio_err_notifier_handler(void *opaque) ++{ ++ VFIODevice *vdev = opaque; ++ ++ if (!event_notifier_test_and_clear(&vdev->err_notifier)) { ++ return; ++ } ++ ++ /* ++ * TBD. Retrieve the error details and decide what action ++ * needs to be taken. One of the actions could be to pass ++ * the error to the guest and have the guest driver recover ++ * from the error. This requires that PCIe capabilities be ++ * exposed to the guest. For now, we just terminate the ++ * guest to contain the error. ++ */ ++ ++ error_report("%s (%04x:%02x:%02x.%x)" ++ "Unrecoverable error detected...\n" ++ "Please collect any data possible and then kill the guest", ++ __func__, vdev->host.domain, vdev->host.bus, ++ vdev->host.slot, vdev->host.function); ++ ++ vm_stop(RUN_STATE_IO_ERROR); ++} ++ ++/* ++ * Registers error notifier for devices supporting error recovery. ++ * If we encounter a failure in this function, we report an error ++ * and continue after disabling error recovery support for the ++ * device. ++ */ ++static void vfio_register_err_notifier(VFIODevice *vdev) ++{ ++ int ret; ++ int argsz; ++ struct vfio_irq_set *irq_set; ++ int32_t *pfd; ++ ++ if (!vdev->pci_aer) { ++ return; ++ } ++ ++ if (event_notifier_init(&vdev->err_notifier, 0)) { ++ error_report("vfio: Warning: " ++ "Unable to init event notifier for error detection\n"); ++ vdev->pci_aer = false; ++ return; ++ } ++ ++ argsz = sizeof(*irq_set) + sizeof(*pfd); ++ ++ irq_set = g_malloc0(argsz); ++ irq_set->argsz = argsz; ++ irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | ++ VFIO_IRQ_SET_ACTION_TRIGGER; ++ irq_set->index = VFIO_PCI_ERR_IRQ_INDEX; ++ irq_set->start = 0; ++ irq_set->count = 1; ++ pfd = (int32_t *)&irq_set->data; ++ ++ *pfd = event_notifier_get_fd(&vdev->err_notifier); ++ qemu_set_fd_handler(*pfd, vfio_err_notifier_handler, NULL, vdev); ++ ++ ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ if (ret) { ++ error_report("vfio: Failed to set up error notification\n"); ++ qemu_set_fd_handler(*pfd, NULL, NULL, vdev); ++ event_notifier_cleanup(&vdev->err_notifier); ++ vdev->pci_aer = false; ++ } ++ g_free(irq_set); ++} ++ ++static void vfio_unregister_err_notifier(VFIODevice *vdev) ++{ ++ int argsz; ++ struct vfio_irq_set *irq_set; ++ int32_t *pfd; ++ int ret; ++ ++ if (!vdev->pci_aer) { ++ return; ++ } ++ ++ argsz = sizeof(*irq_set) + sizeof(*pfd); ++ ++ irq_set = g_malloc0(argsz); ++ irq_set->argsz = argsz; ++ irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | ++ VFIO_IRQ_SET_ACTION_TRIGGER; ++ irq_set->index = VFIO_PCI_ERR_IRQ_INDEX; ++ irq_set->start = 0; ++ irq_set->count = 1; ++ pfd = (int32_t *)&irq_set->data; ++ *pfd = -1; ++ ++ ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ if (ret) { ++ error_report("vfio: Failed to de-assign error fd: %d\n", ret); ++ } ++ g_free(irq_set); ++ qemu_set_fd_handler(event_notifier_get_fd(&vdev->err_notifier), ++ NULL, NULL, vdev); ++ event_notifier_cleanup(&vdev->err_notifier); ++} ++ + static int vfio_initfn(PCIDevice *pdev) + { + VFIODevice *pvdev, *vdev = DO_UPCAST(VFIODevice, pdev, pdev); +@@ -3073,6 +3196,7 @@ static int vfio_initfn(PCIDevice *pdev) + } + + add_boot_device_path(vdev->bootindex, &pdev->qdev, NULL); ++ vfio_register_err_notifier(vdev); + + return 0; + +@@ -3092,6 +3216,7 @@ static void vfio_exitfn(PCIDevice *pdev) + VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); + VFIOGroup *group = vdev->group; + ++ vfio_unregister_err_notifier(vdev); + pci_device_set_intx_routing_notifier(&vdev->pdev, NULL); + vfio_disable_interrupts(vdev); + if (vdev->intx.mmap_timer) { diff --git a/SOURCES/kvm-vfio-Use-vfio-type1-v2-IOMMU-interface.patch b/SOURCES/kvm-vfio-Use-vfio-type1-v2-IOMMU-interface.patch new file mode 100644 index 0000000..b4315e6 --- /dev/null +++ b/SOURCES/kvm-vfio-Use-vfio-type1-v2-IOMMU-interface.patch @@ -0,0 +1,73 @@ +From d9bcfe28139d190ed9847217dd309296580c2b7e Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:34:13 +0200 +Subject: [PATCH 07/14] vfio: Use vfio type1 v2 IOMMU interface + +Message-id: <20150410163413.15324.90697.stgit@gimli.home> +Patchwork-id: 64787 +O-Subject: [RHEL7.2 qemu-kvm PATCH 7/8] vfio: Use vfio type1 v2 IOMMU interface +Bugzilla: 1210508 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +Upstream: 2e6e697e166568fdd09ceaa8c7c8c8c53a5e345b + +The difference between v1 and v2 is fairly subtle, simply more +deterministic behavior for unmaps. The v1 interface allows the user +to attempt to unmap sub-regions of previous mappings, returning +success with zero size if unable to comply. This was a reflection of +the underlying IOMMU API. The v2 interface requires that the user +may only unmap fully contained mappings, ie. an unmap cannot intersect +or bisect a previous mapping, but may cover multiple mappings. QEMU +never made use of the sub-region v1 support anyway, so we can support +either v1 or v2. We'll favor v2 since it's newer. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 8 ++++++-- + linux-headers/linux/vfio.h | 1 + + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 607dbf4..d06b485 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3312,7 +3312,10 @@ static int vfio_connect_container(VFIOGroup *group) + container = g_malloc0(sizeof(*container)); + container->fd = fd; + +- if (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU)) { ++ if (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU) || ++ ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1v2_IOMMU)) { ++ bool v2 = !!ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1v2_IOMMU); ++ + ret = ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &fd); + if (ret) { + error_report("vfio: failed to set group container: %m"); +@@ -3321,7 +3324,8 @@ static int vfio_connect_container(VFIOGroup *group) + return -errno; + } + +- ret = ioctl(fd, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU); ++ ret = ioctl(fd, VFIO_SET_IOMMU, ++ v2 ? VFIO_TYPE1v2_IOMMU : VFIO_TYPE1_IOMMU); + if (ret) { + error_report("vfio: failed to set iommu for container: %m"); + g_free(container); +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index d341312..7919c76 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -22,6 +22,7 @@ + /* Extensions */ + + #define VFIO_TYPE1_IOMMU 1 ++#define VFIO_TYPE1v2_IOMMU 3 + + /* + * The IOCTL interface is designed for extensibility by embedding the +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-Wrap-VFIO_DEVICE_GET_REGION_INFO.patch b/SOURCES/kvm-vfio-Wrap-VFIO_DEVICE_GET_REGION_INFO.patch new file mode 100644 index 0000000..bf4d416 --- /dev/null +++ b/SOURCES/kvm-vfio-Wrap-VFIO_DEVICE_GET_REGION_INFO.patch @@ -0,0 +1,213 @@ +From 474ecfa2ca12dee5c07c974a166c27652b9c9a93 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:50 +0200 +Subject: [PATCH 13/27] vfio: Wrap VFIO_DEVICE_GET_REGION_INFO + +RH-Author: Alex Williamson +Message-id: <20170929214550.16765.34651.stgit@gimli.home> +Patchwork-id: 76771 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 13/16] vfio: Wrap VFIO_DEVICE_GET_REGION_INFO +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +Upstream: 469002263a295ec471c1498c3b456ccd9f85a841 + +In preparation for supporting capability chains on regions, wrap +ioctl(VFIO_DEVICE_GET_REGION_INFO) so we don't duplicate the code for +each caller. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 95 +++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 58 insertions(+), 37 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index e2dc3f5..57a0065 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -292,6 +292,8 @@ static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len); + static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + uint32_t val, int len); + static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); ++static int vfio_get_region_info(VFIODevice *vbasedev, int index, ++ struct vfio_region_info **info); + + /* + * Common VFIO interrupt disable +@@ -1176,26 +1178,26 @@ static const MemoryRegionOps vfio_region_ops = { + + static void vfio_pci_load_rom(VFIOPCIDevice *vdev) + { +- struct vfio_region_info reg_info = { +- .argsz = sizeof(reg_info), +- .index = VFIO_PCI_ROM_REGION_INDEX +- }; ++ struct vfio_region_info *reg_info; + uint64_t size; + off_t off = 0; + size_t bytes; + +- if (ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, ®_info)) { ++ if (vfio_get_region_info(&vdev->vbasedev, ++ VFIO_PCI_ROM_REGION_INDEX, ®_info)) { + error_report("vfio: Error getting ROM info: %m"); + return; + } + + DPRINTF("Device %s ROM:\n", vdev->vbasedev.name); + DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", +- (unsigned long)reg_info.size, (unsigned long)reg_info.offset, +- (unsigned long)reg_info.flags); ++ (unsigned long)reg_info->size, (unsigned long)reg_info->offset, ++ (unsigned long)reg_info->flags); ++ ++ vdev->rom_size = size = reg_info->size; ++ vdev->rom_offset = reg_info->offset; + +- vdev->rom_size = size = reg_info.size; +- vdev->rom_offset = reg_info.offset; ++ g_free(reg_info); + + if (!vdev->rom_size) { + vdev->rom_read_failed = true; +@@ -3483,7 +3485,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + VFIOPCIDevice *vdev) + { + struct vfio_device_info dev_info = { .argsz = sizeof(dev_info) }; +- struct vfio_region_info reg_info = { .argsz = sizeof(reg_info) }; ++ struct vfio_region_info *reg_info; + struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info) }; + int ret, i; + +@@ -3529,9 +3531,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + } + + for (i = VFIO_PCI_BAR0_REGION_INDEX; i < VFIO_PCI_ROM_REGION_INDEX; i++) { +- reg_info.index = i; +- +- ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); ++ ret = vfio_get_region_info(&vdev->vbasedev, i, ®_info); + if (ret) { + error_report("vfio: Error getting region %d info: %m", i); + goto error; +@@ -3539,20 +3539,21 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + + DPRINTF("Device %s region %d:\n", name, i); + DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", +- (unsigned long)reg_info.size, (unsigned long)reg_info.offset, +- (unsigned long)reg_info.flags); ++ (unsigned long)reg_info->size, (unsigned long)reg_info->offset, ++ (unsigned long)reg_info->flags); + + vdev->bars[i].region.vbasedev = &vdev->vbasedev; +- vdev->bars[i].region.flags = reg_info.flags; +- vdev->bars[i].region.size = reg_info.size; +- vdev->bars[i].region.fd_offset = reg_info.offset; ++ vdev->bars[i].region.flags = reg_info->flags; ++ vdev->bars[i].region.size = reg_info->size; ++ vdev->bars[i].region.fd_offset = reg_info->offset; + vdev->bars[i].region.nr = i; + QLIST_INIT(&vdev->bars[i].quirks); +- } + +- reg_info.index = VFIO_PCI_CONFIG_REGION_INDEX; ++ g_free(reg_info); ++ } + +- ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); ++ ret = vfio_get_region_info(&vdev->vbasedev, ++ VFIO_PCI_CONFIG_REGION_INDEX, ®_info); + if (ret) { + error_report("vfio: Error getting config info: %m"); + goto error; +@@ -3560,41 +3561,43 @@ static int vfio_get_device(VFIOGroup *group, const char *name, + + DPRINTF("Device %s config:\n", name); + DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", +- (unsigned long)reg_info.size, (unsigned long)reg_info.offset, +- (unsigned long)reg_info.flags); ++ (unsigned long)reg_info->size, (unsigned long)reg_info->offset, ++ (unsigned long)reg_info->flags); + +- vdev->config_size = reg_info.size; ++ vdev->config_size = reg_info->size; + if (vdev->config_size == PCI_CONFIG_SPACE_SIZE) { + vdev->pdev.cap_present &= ~QEMU_PCI_CAP_EXPRESS; + } +- vdev->config_offset = reg_info.offset; ++ vdev->config_offset = reg_info->offset; ++ ++ g_free(reg_info); + + if ((vdev->features & VFIO_FEATURE_ENABLE_VGA) && + dev_info.num_regions > VFIO_PCI_VGA_REGION_INDEX) { +- struct vfio_region_info vga_info = { +- .argsz = sizeof(vga_info), +- .index = VFIO_PCI_VGA_REGION_INDEX, +- }; +- +- ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_REGION_INFO, &vga_info); ++ ret = vfio_get_region_info(&vdev->vbasedev, ++ VFIO_PCI_VGA_REGION_INDEX, ®_info); + if (ret) { + error_report( + "vfio: Device does not support requested feature x-vga"); + goto error; + } + +- if (!(vga_info.flags & VFIO_REGION_INFO_FLAG_READ) || +- !(vga_info.flags & VFIO_REGION_INFO_FLAG_WRITE) || +- vga_info.size < 0xbffff + 1) { ++ if (!(reg_info->flags & VFIO_REGION_INFO_FLAG_READ) || ++ !(reg_info->flags & VFIO_REGION_INFO_FLAG_WRITE) || ++ reg_info->size < 0xbffff + 1) { + error_report("vfio: Unexpected VGA info, flags 0x%lx, size 0x%lx", +- (unsigned long)vga_info.flags, +- (unsigned long)vga_info.size); ++ (unsigned long)reg_info->flags, ++ (unsigned long)reg_info->size); ++ g_free(reg_info); ++ ret = -1; + goto error; + } + +- vdev->vga.fd_offset = vga_info.offset; ++ vdev->vga.fd_offset = reg_info->offset; + vdev->vga.fd = vdev->vbasedev.fd; + ++ g_free(reg_info); ++ + vdev->vga.region[QEMU_PCI_VGA_MEM].offset = QEMU_PCI_VGA_MEM_BASE; + vdev->vga.region[QEMU_PCI_VGA_MEM].nr = QEMU_PCI_VGA_MEM; + QLIST_INIT(&vdev->vga.region[QEMU_PCI_VGA_MEM].quirks); +@@ -3647,6 +3650,24 @@ static void vfio_put_device(VFIOPCIDevice *vdev) + } + } + ++static int vfio_get_region_info(VFIODevice *vbasedev, int index, ++ struct vfio_region_info **info) ++{ ++ size_t argsz = sizeof(struct vfio_region_info); ++ ++ *info = g_malloc0(argsz); ++ ++ (*info)->index = index; ++ (*info)->argsz = argsz; ++ ++ if (ioctl(vbasedev->fd, VFIO_DEVICE_GET_REGION_INFO, *info)) { ++ g_free(*info); ++ return -errno; ++ } ++ ++ return 0; ++} ++ + static void vfio_err_notifier_handler(void *opaque) + { + VFIOPCIDevice *vdev = opaque; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-blacklist-loading-of-unstable-roms.patch b/SOURCES/kvm-vfio-blacklist-loading-of-unstable-roms.patch new file mode 100644 index 0000000..03c0a67 --- /dev/null +++ b/SOURCES/kvm-vfio-blacklist-loading-of-unstable-roms.patch @@ -0,0 +1,141 @@ +From 8c54fd61fa0c98d6e543923badfd174160acedd0 Mon Sep 17 00:00:00 2001 +From: Bandan Das +Date: Thu, 27 Feb 2014 18:31:17 +0100 +Subject: [PATCH 5/6] vfio: blacklist loading of unstable roms + +RH-Author: Bandan Das +Message-id: <1393525877-32262-3-git-send-email-bsd@redhat.com> +Patchwork-id: 57933 +O-Subject: [PATCH RHEL-7.0 qemu-kvm v2 2/2] vfio: blacklist loading of unstable roms +Bugzilla: 1037956 +RH-Acked-by: Alex Williamson +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Marcel Apfelbaum + +Certain cards such as the Broadcom BCM57810 have rom quirks +that exhibit unstable system behavior duing device assignment. In +the particular case of 57810, rom execution hangs and if a FLR +follows, the device becomes inoperable until a power cycle. This +change blacklists loading of rom for such cards unless the user +specifies a romfile or rombar=1 on the cmd line + +Signed-off-by: Bandan Das +Signed-off-by: Alex Williamson +(cherry picked from commit 4b9430294ed406a00f045d825ada146aecf32309) +--- + hw/misc/vfio.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 73 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 73 insertions(+), 0 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index e1f30a2..b04170e 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -206,6 +206,29 @@ typedef struct VFIOGroup { + QLIST_ENTRY(VFIOGroup) container_next; + } VFIOGroup; + ++typedef struct VFIORomBlacklistEntry { ++ uint16_t vendor_id; ++ uint16_t device_id; ++} VFIORomBlacklistEntry; ++ ++/* ++ * List of device ids/vendor ids for which to disable ++ * option rom loading. This avoids the guest hangs during rom ++ * execution as noticed with the BCM 57810 card for lack of a ++ * more better way to handle such issues. ++ * The user can still override by specifying a romfile or ++ * rombar=1. ++ * Please see https://bugs.launchpad.net/qemu/+bug/1284874 ++ * for an analysis of the 57810 card hang. When adding ++ * a new vendor id/device id combination below, please also add ++ * your card/environment details and information that could ++ * help in debugging to the bug tracking this issue ++ */ ++static const VFIORomBlacklistEntry romblacklist[] = { ++ /* Broadcom BCM 57810 */ ++ { 0x14e4, 0x168e } ++}; ++ + #define MSIX_CAP_LENGTH 12 + #define MAX_DEV_ASSIGN_CMDLINE 32 + +@@ -1167,13 +1190,43 @@ static const MemoryRegionOps vfio_rom_ops = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + ++static bool vfio_blacklist_opt_rom(VFIODevice *vdev) ++{ ++ PCIDevice *pdev = &vdev->pdev; ++ uint16_t vendor_id, device_id; ++ int count = 0; ++ ++ vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); ++ device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); ++ ++ while (count < ARRAY_SIZE(romblacklist)) { ++ if (romblacklist[count].vendor_id == vendor_id && ++ romblacklist[count].device_id == device_id) { ++ return true; ++ } ++ count++; ++ } ++ ++ return false; ++} ++ + static void vfio_pci_size_rom(VFIODevice *vdev) + { + uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK); + off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; ++ DeviceState *dev = DEVICE(vdev); + char name[32]; + + if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { ++ /* Since pci handles romfile, just print a message and return */ ++ if (vfio_blacklist_opt_rom(vdev) && vdev->pdev.romfile) { ++ error_printf("Warning : Device at %04x:%02x:%02x.%x " ++ "is known to cause system instability issues during " ++ "option rom execution. " ++ "Proceeding anyway since user specified romfile\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ } + return; + } + +@@ -1197,6 +1250,26 @@ static void vfio_pci_size_rom(VFIODevice *vdev) + return; + } + ++ if (vfio_blacklist_opt_rom(vdev)) { ++ if (dev->opts && qemu_opt_get(dev->opts, "rombar")) { ++ error_printf("Warning : Device at %04x:%02x:%02x.%x " ++ "is known to cause system instability issues during " ++ "option rom execution. " ++ "Proceeding anyway since user specified non zero value for " ++ "rombar\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ } else { ++ error_printf("Warning : Rom loading for device at " ++ "%04x:%02x:%02x.%x has been disabled due to " ++ "system instability issues. " ++ "Specify rombar=1 or romfile to force\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ return; ++ } ++ } ++ + DPRINTF("%04x:%02x:%02x.%x ROM size 0x%x\n", vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function, size); + +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-cap-number-of-devices-that-can-be-assigned.patch b/SOURCES/kvm-vfio-cap-number-of-devices-that-can-be-assigned.patch new file mode 100644 index 0000000..7ce6fd3 --- /dev/null +++ b/SOURCES/kvm-vfio-cap-number-of-devices-that-can-be-assigned.patch @@ -0,0 +1,73 @@ +From 4110ee428550f672ee1a1a73a634d5392bf9c55f Mon Sep 17 00:00:00 2001 +Message-Id: <4110ee428550f672ee1a1a73a634d5392bf9c55f.1387382496.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Bandan Das +Date: Tue, 3 Dec 2013 20:05:13 +0100 +Subject: [PATCH 44/46] vfio: cap number of devices that can be assigned + +RH-Author: Bandan Das +Message-id: <1386101113-31560-3-git-send-email-bsd@redhat.com> +Patchwork-id: 55984 +O-Subject: [PATCH RHEL7 qemu-kvm v2 2/2] vfio: cap number of devices that can be assigned +Bugzilla: 678368 +RH-Acked-by: Alex Williamson +RH-Acked-by: Marcelo Tosatti +RH-Acked-by: Michael S. Tsirkin + +Go through all groups to get count of total number of devices +active to enforce limit + +Reasoning from Alex for the limit(32) - Assuming 3 slots per +device, with 125 slots (number of memory slots for RHEL 7), +we can support almost 40 devices and still have few slots left +for other uses. Stepping down a bit, the number 32 arbitrarily +matches the number of slots on a PCI bus and is also a nice power +of two. + +Signed-off-by: Bandan Das +--- + hw/misc/vfio.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + hw/misc/vfio.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 250f96f..bd30130 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -201,6 +201,7 @@ typedef struct VFIOGroup { + } VFIOGroup; + + #define MSIX_CAP_LENGTH 12 ++#define MAX_DEV_ASSIGN_CMDLINE 32 + + static QLIST_HEAD(, VFIOContainer) + container_list = QLIST_HEAD_INITIALIZER(container_list); +@@ -3557,7 +3558,19 @@ static int vfio_initfn(PCIDevice *pdev) + ssize_t len; + struct stat st; + int groupid; +- int ret; ++ int ret, i = 0; ++ ++ QLIST_FOREACH(group, &group_list, next) { ++ QLIST_FOREACH(pvdev, &group->device_list, next) { ++ i++; ++ } ++ } ++ ++ if (i >= MAX_DEV_ASSIGN_CMDLINE) { ++ error_report("vfio: Maximum supported vfio devices (%d) " ++ "already attached\n", MAX_DEV_ASSIGN_CMDLINE); ++ return -1; ++ } + + /* Check that the host device exists */ + snprintf(path, sizeof(path), +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vfio-common-cleanup-in-vfio_region_finalize.patch b/SOURCES/kvm-vfio-common-cleanup-in-vfio_region_finalize.patch new file mode 100644 index 0000000..ffdc163 --- /dev/null +++ b/SOURCES/kvm-vfio-common-cleanup-in-vfio_region_finalize.patch @@ -0,0 +1,46 @@ +From b79ac72e8192d3f1036a7027ffed668399183be5 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:20 +0200 +Subject: [PATCH 12/17] vfio/common: cleanup in vfio_region_finalize + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-7-git-send-email-tgupta@redhat.com> +Patchwork-id: 80910 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 06/11] vfio/common: cleanup in vfio_region_finalize +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Gerd Hoffmann +Reviewed by: Kirti Wankhede +Signed-off-by: Alex Williamson + +(cherry picked from 92f86bff088dc6f0c0ed93b8e82d4d2459c35145) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 68ff949..414b689 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2798,6 +2798,13 @@ static void vfio_region_finalize(VFIORegion *region) + g_free(region->mmaps); + + trace_vfio_region_finalize(region->vbasedev->name, region->nr); ++ ++ region->mem = NULL; ++ region->mmaps = NULL; ++ region->nr_mmaps = 0; ++ region->size = 0; ++ region->flags = 0; ++ region->nr = 0; + } + + static void vfio_region_mmaps_set_enabled(VFIORegion *region, bool enabled) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-correct-debug-macro-typo.patch b/SOURCES/kvm-vfio-correct-debug-macro-typo.patch new file mode 100644 index 0000000..10fedc9 --- /dev/null +++ b/SOURCES/kvm-vfio-correct-debug-macro-typo.patch @@ -0,0 +1,41 @@ +From e91335b95ff98b38bfa8f054fda9ff8f4abdae87 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 7 Aug 2014 21:02:57 +0200 +Subject: [PATCH 3/7] vfio: correct debug macro typo + +Message-id: <20140807210257.11689.30368.stgit@gimli.home> +Patchwork-id: 60479 +O-Subject: [RHEL7.0/z qemu-kvm PATCH v2 2/6] vfio: correct debug macro typo +Bugzilla: 1098976 +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong +RH-Acked-by: Laszlo Ersek + +From: Bandan Das + +Change to DEBUG_VFIO in vfio_msi_interrupt() for debug +messages to get printed + +Signed-off-by: Bandan Das +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index b5387ca..7f6ebf9 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -619,7 +619,7 @@ static void vfio_msi_interrupt(void *opaque) + return; + } + +-#ifdef VFIO_DEBUG ++#ifdef DEBUG_VFIO + MSIMessage msg; + + if (vdev->interrupt == VFIO_INT_MSIX) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-display-adding-region-support.patch b/SOURCES/kvm-vfio-display-adding-region-support.patch new file mode 100644 index 0000000..024187c --- /dev/null +++ b/SOURCES/kvm-vfio-display-adding-region-support.patch @@ -0,0 +1,205 @@ +From 8635eaec9dd5152d94e2cd98056b80879357cf56 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:24 +0200 +Subject: [PATCH 16/17] vfio/display: adding region support + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-11-git-send-email-tgupta@redhat.com> +Patchwork-id: 80912 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 10/11] vfio/display: adding region support +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Wire up region-based display. + +Signed-off-by: Gerd Hoffmann +Reviewed By: Kirti Wankhede +Signed-off-by: Alex Williamson + +(cherry picked from 00195ba710a004af02a711239324d7137f0b189a) + +Bugzilla: https://bugzilla.redhat.com/1555246 +Signed-off-by: Miroslav Rezanina + +Conflicts: + qemu_create_displaysurface_from() function in qemu-kvm does not + have "format" argument. It instead has the "bpp" and "byteswap" + argument. + + graphic_console_init() function in qemu-kvm does not have the + "head" argument +--- + hw/misc/vfio.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 125 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 22d5cac..dd3efb3 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -211,6 +211,14 @@ struct VFIODeviceOps { + void (*vfio_eoi)(VFIODevice *vdev); + }; + ++typedef struct VFIODisplay { ++ QemuConsole *con; ++ struct { ++ VFIORegion buffer; ++ DisplaySurface *surface; ++ } region; ++} VFIODisplay; ++ + typedef struct VFIOPCIDevice { + PCIDevice pdev; + VFIODevice vbasedev; +@@ -245,6 +253,7 @@ typedef struct VFIOPCIDevice { + bool has_flr; + bool has_pm_reset; + bool rom_read_failed; ++ VFIODisplay *dpy; + } VFIOPCIDevice; + + typedef struct VFIOGroup { +@@ -2762,6 +2771,114 @@ static int vfio_region_mmap(VFIORegion *region) + return 0; + } + ++/* ---------------------------------------------------------------------- */ ++ ++static void vfio_display_region_update(void *opaque) ++{ ++ VFIOPCIDevice *vdev = opaque; ++ VFIODisplay *dpy = vdev->dpy; ++ struct vfio_device_gfx_plane_info plane = { ++ .argsz = sizeof(plane), ++ .flags = VFIO_GFX_PLANE_TYPE_REGION ++ }; ++ pixman_format_code_t format; ++ int ret; ++ ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &plane); ++ if (ret < 0) { ++ error_report("ioctl VFIO_DEVICE_QUERY_GFX_PLANE: %s", ++ strerror(errno)); ++ return; ++ } ++ if (!plane.drm_format || !plane.size) { ++ return; ++ } ++ format = qemu_drm_format_to_pixman(plane.drm_format); ++ if (!format) { ++ return; ++ } ++ ++ if (dpy->region.buffer.size && ++ dpy->region.buffer.nr != plane.region_index) { ++ /* region changed */ ++ vfio_region_exit(&dpy->region.buffer); ++ vfio_region_finalize(&dpy->region.buffer); ++ dpy->region.surface = NULL; ++ } ++ ++ if (dpy->region.surface && ++ (surface_width(dpy->region.surface) != plane.width || ++ surface_height(dpy->region.surface) != plane.height || ++ dpy->region.surface->format != format)) { ++ /* size changed */ ++ dpy->region.surface = NULL; ++ } ++ ++ if (!dpy->region.buffer.size) { ++ /* mmap region */ ++ ret = vfio_region_setup(OBJECT(vdev), &vdev->vbasedev, ++ &dpy->region.buffer, ++ plane.region_index, ++ "display"); ++ if (ret != 0) { ++ error_report("%s: vfio_region_setup(%d): %s", ++ __func__, plane.region_index, strerror(-ret)); ++ goto err; ++ } ++ ret = vfio_region_mmap(&dpy->region.buffer); ++ if (ret != 0) { ++ error_report("%s: vfio_region_mmap(%d): %s", __func__, ++ plane.region_index, strerror(-ret)); ++ goto err; ++ } ++ assert(dpy->region.buffer.mmaps[0].mmap != NULL); ++ } ++ ++ if (dpy->region.surface == NULL) { ++ int bpp = PIXMAN_FORMAT_BPP(format); ++ /* create surface */ ++ dpy->region.surface = qemu_create_displaysurface_from ++ (plane.width, plane.height, bpp, ++ plane.stride, dpy->region.buffer.mmaps[0].mmap, false); ++ dpy_gfx_replace_surface(dpy->con, dpy->region.surface); ++ } ++ ++ /* full screen update */ ++ dpy_gfx_update(dpy->con, 0, 0, ++ surface_width(dpy->region.surface), ++ surface_height(dpy->region.surface)); ++ return; ++ ++err: ++ vfio_region_exit(&dpy->region.buffer); ++ vfio_region_finalize(&dpy->region.buffer); ++} ++ ++static const GraphicHwOps vfio_display_region_ops = { ++ .gfx_update = vfio_display_region_update, ++}; ++ ++static int vfio_display_region_init(VFIOPCIDevice *vdev) ++{ ++ vdev->dpy = g_new0(VFIODisplay, 1); ++ vdev->dpy->con = graphic_console_init(DEVICE(vdev), ++ &vfio_display_region_ops, ++ vdev); ++ return 0; ++} ++ ++static void vfio_display_region_exit(VFIODisplay *dpy) ++{ ++ if (!dpy->region.buffer.size) { ++ return; ++ } ++ ++ vfio_region_exit(&dpy->region.buffer); ++ vfio_region_finalize(&dpy->region.buffer); ++} ++ ++/* ---------------------------------------------------------------------- */ ++ + static int vfio_display_probe(VFIOPCIDevice *vdev) + { + struct vfio_device_gfx_plane_info probe; +@@ -2772,8 +2889,7 @@ static int vfio_display_probe(VFIOPCIDevice *vdev) + probe.flags = VFIO_GFX_PLANE_TYPE_PROBE | VFIO_GFX_PLANE_TYPE_REGION; + ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &probe); + if (ret == 0) { +- error_report("vfio-display: region support not implemented yet"); +- return -1; ++ return vfio_display_region_init(vdev); + } + + if (vdev->display == ON_OFF_AUTO_AUTO) { +@@ -2787,6 +2903,13 @@ static int vfio_display_probe(VFIOPCIDevice *vdev) + + static void vfio_display_finalize(VFIOPCIDevice *vdev) + { ++ if (!vdev->dpy) { ++ return; ++ } ++ ++ graphic_console_close(vdev->dpy->con); ++ vfio_display_region_exit(vdev->dpy); ++ g_free(vdev->dpy); + } + + static void vfio_region_exit(VFIORegion *region) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-display-core-wireup.patch b/SOURCES/kvm-vfio-display-core-wireup.patch new file mode 100644 index 0000000..45e8b6e --- /dev/null +++ b/SOURCES/kvm-vfio-display-core-wireup.patch @@ -0,0 +1,117 @@ +From 5a0718f03d4da66682d5580e156c6cf4b8005891 Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:23 +0200 +Subject: [PATCH 15/17] vfio/display: core & wireup + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-10-git-send-email-tgupta@redhat.com> +Patchwork-id: 80918 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 09/11] vfio/display: core & wireup +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +nfrastructure for display support. Must be enabled +using 'display' property. + +Signed-off-by: Gerd Hoffmann +Reviewed By: Kirti Wankhede +Signed-off-by: Alex Williamson + +(cherry picked from a9994687cb9b5f72399398a0985419f4d2b95dc5) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 414b689..22d5cac 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -40,6 +40,7 @@ + #include "sysemu/kvm.h" + #include "sysemu/sysemu.h" + #include "trace.h" ++#include "ui/console.h" + + /* #define DEBUG_VFIO */ + #ifdef DEBUG_VFIO +@@ -235,6 +236,7 @@ typedef struct VFIOPCIDevice { + #define VFIO_FEATURE_ENABLE_VGA (1 << VFIO_FEATURE_ENABLE_VGA_BIT) + #define VFIO_FEATURE_ENABLE_REQ_BIT 1 + #define VFIO_FEATURE_ENABLE_REQ (1 << VFIO_FEATURE_ENABLE_REQ_BIT) ++ OnOffAuto display; + int32_t bootindex; + uint8_t pm_cap; + bool has_vga; +@@ -2760,6 +2762,33 @@ static int vfio_region_mmap(VFIORegion *region) + return 0; + } + ++static int vfio_display_probe(VFIOPCIDevice *vdev) ++{ ++ struct vfio_device_gfx_plane_info probe; ++ int ret; ++ ++ memset(&probe, 0, sizeof(probe)); ++ probe.argsz = sizeof(probe); ++ probe.flags = VFIO_GFX_PLANE_TYPE_PROBE | VFIO_GFX_PLANE_TYPE_REGION; ++ ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_QUERY_GFX_PLANE, &probe); ++ if (ret == 0) { ++ error_report("vfio-display: region support not implemented yet"); ++ return -1; ++ } ++ ++ if (vdev->display == ON_OFF_AUTO_AUTO) { ++ /* not an error in automatic mode */ ++ return 0; ++ } ++ ++ error_report("vfio: device doesn't support any (known) display method"); ++ return -1; ++} ++ ++static void vfio_display_finalize(VFIOPCIDevice *vdev) ++{ ++} ++ + static void vfio_region_exit(VFIORegion *region) + { + int i; +@@ -4232,6 +4261,14 @@ static int vfio_initfn(PCIDevice *pdev) + } + + add_boot_device_path(vdev->bootindex, &pdev->qdev, NULL); ++ ++ if (vdev->display != ON_OFF_AUTO_OFF) { ++ ret = vfio_display_probe(vdev); ++ if (ret) { ++ goto out_teardown; ++ } ++ } ++ + vfio_register_err_notifier(vdev); + vfio_register_req_notifier(vdev); + +@@ -4261,6 +4298,7 @@ static void vfio_exitfn(PCIDevice *pdev) + qemu_free_timer(vdev->intx.mmap_timer); + } + vfio_teardown_msi(vdev); ++ vfio_display_finalize(vdev); + vfio_unmap_bars(vdev); + g_free(vdev->emulated_config_bits); + g_free(vdev->rom); +@@ -4313,6 +4351,8 @@ static void vfio_instance_init(Object *obj) + static Property vfio_pci_dev_properties[] = { + DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), + DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), ++ DEFINE_PROP_ON_OFF_AUTO("display", VFIOPCIDevice, ++ display, ON_OFF_AUTO_AUTO), + DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice, + intx.mmap_timeout, 1100), + DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pass-device-to-vfio_mmap_bar-and-use-it-to-set-.patch b/SOURCES/kvm-vfio-pass-device-to-vfio_mmap_bar-and-use-it-to-set-.patch new file mode 100644 index 0000000..cc4c86e --- /dev/null +++ b/SOURCES/kvm-vfio-pass-device-to-vfio_mmap_bar-and-use-it-to-set-.patch @@ -0,0 +1,63 @@ +From 4adaef467772d0131b96e6dc2533b13afd8254a9 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:44:01 +0200 +Subject: [PATCH 01/27] vfio: pass device to vfio_mmap_bar and use it to set + owner + +RH-Author: Alex Williamson +Message-id: <20170929214401.16765.56856.stgit@gimli.home> +Patchwork-id: 76759 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 01/16] vfio: pass device to vfio_mmap_bar and use it to set owner +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Paolo Bonzini + +Upstream: 5cb022a1bfaa0c15a13d3266bc6d683cc1f44d7f +RHEL: Update vfio_mmap_bar() parameters, but RHEL memory API doesn't + support an owner, this makes later patches apply more cleanly. + +Cc: Alex Williamson +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 4fdc09a..363c646 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2570,7 +2570,8 @@ static void vfio_unmap_bar(VFIODevice *vdev, int nr) + memory_region_destroy(&bar->mem); + } + +-static int vfio_mmap_bar(VFIOBAR *bar, MemoryRegion *mem, MemoryRegion *submem, ++static int vfio_mmap_bar(VFIODevice *vdev, VFIOBAR *bar, ++ MemoryRegion *mem, MemoryRegion *submem, + void **map, size_t size, off_t offset, + const char *name) + { +@@ -2654,7 +2655,7 @@ static void vfio_map_bar(VFIODevice *vdev, int nr) + } + + strncat(name, " mmap", sizeof(name) - strlen(name) - 1); +- if (vfio_mmap_bar(bar, &bar->mem, ++ if (vfio_mmap_bar(vdev, bar, &bar->mem, + &bar->mmap_mem, &bar->mmap, size, 0, name)) { + error_report("%s unsupported. Performance may be slow", name); + } +@@ -2668,7 +2669,7 @@ static void vfio_map_bar(VFIODevice *vdev, int nr) + size = start < bar->size ? bar->size - start : 0; + strncat(name, " msix-hi", sizeof(name) - strlen(name) - 1); + /* VFIOMSIXInfo contains another MemoryRegion for this mapping */ +- if (vfio_mmap_bar(bar, &bar->mem, &vdev->msix->mmap_mem, ++ if (vfio_mmap_bar(vdev, bar, &bar->mem, &vdev->msix->mmap_mem, + &vdev->msix->mmap, size, start, name)) { + error_report("%s unsupported. Performance may be slow", name); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Add-debug-config-options-to-disable-MSI-X-K.patch b/SOURCES/kvm-vfio-pci-Add-debug-config-options-to-disable-MSI-X-K.patch new file mode 100644 index 0000000..e7cb548 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Add-debug-config-options-to-disable-MSI-X-K.patch @@ -0,0 +1,83 @@ +From ef5458e0c626a035c0de4b0b44e5fc0a38ab352c Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 7 Aug 2014 21:02:51 +0200 +Subject: [PATCH 2/7] vfio-pci: Add debug config options to disable MSI/X KVM + support + +Message-id: <20140807210251.11689.35960.stgit@gimli.home> +Patchwork-id: 60478 +O-Subject: [RHEL7.0/z qemu-kvm PATCH v2 1/6] vfio-pci: Add debug config options to disable MSI/X KVM support +Bugzilla: 1098976 +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong +RH-Acked-by: Laszlo Ersek + +It's sometimes useful to be able to verify interrupts are passing +through correctly. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index b04170e..b5387ca 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -52,6 +52,8 @@ + /* Extra debugging, trap acceleration paths for more logging */ + #define VFIO_ALLOW_MMAP 1 + #define VFIO_ALLOW_KVM_INTX 1 ++#define VFIO_ALLOW_KVM_MSI 1 ++#define VFIO_ALLOW_KVM_MSIX 1 + + struct VFIODevice; + +@@ -617,9 +619,21 @@ static void vfio_msi_interrupt(void *opaque) + return; + } + +- DPRINTF("%s(%04x:%02x:%02x.%x) vector %d\n", __func__, ++#ifdef VFIO_DEBUG ++ MSIMessage msg; ++ ++ if (vdev->interrupt == VFIO_INT_MSIX) { ++ msg = msi_get_message(&vdev->pdev, nr); ++ } else if (vdev->interrupt == VFIO_INT_MSI) { ++ msg = msix_get_message(&vdev->pdev, nr); ++ } else { ++ abort(); ++ } ++ ++ DPRINTF("%s(%04x:%02x:%02x.%x) vector %d 0x%"PRIx64"/0x%x\n", __func__, + vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function, nr); ++ vdev->host.function, nr, msg.address, msg.data); ++#endif + + if (vdev->interrupt == VFIO_INT_MSIX) { + msix_notify(&vdev->pdev, nr); +@@ -687,7 +701,8 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + * Attempt to enable route through KVM irqchip, + * default to userspace handling if unavailable. + */ +- vector->virq = msg ? kvm_irqchip_add_msi_route(kvm_state, *msg) : -1; ++ vector->virq = msg && VFIO_ALLOW_KVM_MSIX ? ++ kvm_irqchip_add_msi_route(kvm_state, *msg) : -1; + if (vector->virq < 0 || + kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, + vector->virq) < 0) { +@@ -854,7 +869,8 @@ retry: + * Attempt to enable route through KVM irqchip, + * default to userspace handling if unavailable. + */ +- vector->virq = kvm_irqchip_add_msi_route(kvm_state, vector->msg); ++ vector->virq = VFIO_ALLOW_KVM_MSI ? ++ kvm_irqchip_add_msi_route(kvm_state, vector->msg) : -1; + if (vector->virq < 0 || + kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, + vector->virq) < 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Add-dummy-PCI-ROM-write-accessor.patch b/SOURCES/kvm-vfio-pci-Add-dummy-PCI-ROM-write-accessor.patch new file mode 100644 index 0000000..f5be0ab --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Add-dummy-PCI-ROM-write-accessor.patch @@ -0,0 +1,53 @@ +From 0d04efadb8289105d4ab7632c8b6d70b860a22c6 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:37:46 +0100 +Subject: [PATCH 16/25] vfio-pci: Add dummy PCI ROM write accessor + +RH-Author: Alex Williamson +Message-id: <20131105153746.16057.36730.stgit@bling.home> +Patchwork-id: 55425 +O-Subject: [RHEL7 qemu-kvm PATCH 4/5] vfio-pci: Add dummy PCI ROM write accessor +Bugzilla: 1026550 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1026550 +Upstream commit: 64fa25a0efcadda6e8197e8ea578f6117d01bb4b + +Just to be sure we don't jump off any NULL pointer cliffs. + +Signed-off-by: Alex Williamson +Reported-by: Paolo Bonzini +--- + hw/misc/vfio.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index e336021..d327b40 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -1127,8 +1127,14 @@ static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) + return val; + } + ++static void vfio_rom_write(void *opaque, hwaddr addr, ++ uint64_t data, unsigned size) ++{ ++} ++ + static const MemoryRegionOps vfio_rom_ops = { + .read = vfio_rom_read, ++ .write = vfio_rom_write, + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Add-pba_offset-PCI-quirk-for-Chelsio-T5-dev.patch b/SOURCES/kvm-vfio-pci-Add-pba_offset-PCI-quirk-for-Chelsio-T5-dev.patch new file mode 100644 index 0000000..c42e302 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Add-pba_offset-PCI-quirk-for-Chelsio-T5-dev.patch @@ -0,0 +1,93 @@ +From b6a8c4f1ada2c7d31bdd2438163f11026a0a0711 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 17 Jul 2015 20:46:43 +0200 +Subject: [PATCH 2/5] vfio/pci : Add pba_offset PCI quirk for Chelsio T5 + devices + +Message-id: <20150717203953.606.815.stgit@gimli.home> +Patchwork-id: 67057 +O-Subject: [RHEL7.2 qemu-kvm PATCH] vfio/pci : Add pba_offset PCI quirk for Chelsio T5 devices +Bugzilla: 1244347 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek + +From: Gabriel Laupre + +Upstream: 43302969966bc3a95470bfc300289a83068ef5d9 + +Fix pba_offset initialization value for Chelsio T5 Virtual Function +device. The T5 hardware has a bug in it where it reports a Pending Interrupt +Bit Array Offset of 0x8000 for its SR-IOV Virtual Functions instead +of the 0x1000 that the hardware actually uses internally. As the hardware +doesn't return the correct pba_offset value, add a quirk to instead +return a hardcoded value of 0x1000 when a Chelsio T5 VF device is +detected. + +This bug has been fixed in the Chelsio's next chip series T6 but there are +no plans to respin the T5 ASIC for this bug. It is just documented in the +T5 Errata and left it at that. + +Signed-off-by: Gabriel Laupre +Reviewed-by: Bandan Das +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 27 +++++++++++++++++++++++++++ + include/hw/pci/pci_ids.h | 2 ++ + 2 files changed, 29 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 118489c..36b9832 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2466,6 +2466,33 @@ static int vfio_early_setup_msix(VFIODevice *vdev) + vdev->host.function, pos, vdev->msix->table_bar, + vdev->msix->table_offset, vdev->msix->entries); + ++ /* ++ * Test the size of the pba_offset variable and catch if it extends outside ++ * of the specified BAR. If it is the case, we need to apply a hardware ++ * specific quirk if the device is known or we have a broken configuration. ++ */ ++ if (vdev->msix->pba_offset >= ++ vdev->bars[vdev->msix->pba_bar].size) { ++ ++ PCIDevice *pdev = &vdev->pdev; ++ uint16_t vendor = pci_get_word(pdev->config + PCI_VENDOR_ID); ++ uint16_t device = pci_get_word(pdev->config + PCI_DEVICE_ID); ++ ++ /* ++ * Chelsio T5 Virtual Function devices are encoded as 0x58xx for T5 ++ * adapters. The T5 hardware returns an incorrect value of 0x8000 for ++ * the VF PBA offset while the BAR itself is only 8k. The correct value ++ * is 0x1000, so we hard code that here. ++ */ ++ if (vendor == PCI_VENDOR_ID_CHELSIO && (device & 0xff00) == 0x5800) { ++ vdev->msix->pba_offset = 0x1000; ++ } else { ++ error_report("vfio: Hardware reports invalid configuration, " ++ "MSIX PBA outside of specified BAR"); ++ return -EINVAL; ++ } ++ } ++ + return 0; + } + +diff --git a/include/hw/pci/pci_ids.h b/include/hw/pci/pci_ids.h +index d8dc2f1..3792255 100644 +--- a/include/hw/pci/pci_ids.h ++++ b/include/hw/pci/pci_ids.h +@@ -102,6 +102,8 @@ + #define PCI_VENDOR_ID_ENSONIQ 0x1274 + #define PCI_DEVICE_ID_ENSONIQ_ES1370 0x5000 + ++#define PCI_VENDOR_ID_CHELSIO 0x1425 ++ + #define PCI_VENDOR_ID_FREESCALE 0x1957 + #define PCI_DEVICE_ID_MPC8533E 0x0030 + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Add-support-for-MSI-affinity.patch b/SOURCES/kvm-vfio-pci-Add-support-for-MSI-affinity.patch new file mode 100644 index 0000000..1894127 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Add-support-for-MSI-affinity.patch @@ -0,0 +1,134 @@ +From 6f572c45ff2c2376a16cd15882067d7fdcd74a83 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:30:40 +0100 +Subject: [PATCH 12/25] vfio-pci: Add support for MSI affinity +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Alex Williamson +Message-id: <20131105153040.15749.78283.stgit@bling.home> +Patchwork-id: 55413 +O-Subject: [RHEL7 qemu-kvm PATCH v2 2/2] vfio-pci: Add support for MSI affinity +Bugzilla: 1025477 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody + +Bugzilla: 1025477 +Upstream commit: c7679d450ee021eb0826be65e4e018884443643a + +When MSI is accelerated through KVM the vectors are only programmed +when the guest first enables MSI support.  Subsequent writes to the +vector address or data fields are ignored.  Unfortunately that means +we're ignore updates done to adjust SMP affinity of the vectors. +MSI SMP affinity already works in non-KVM mode because the address +and data fields are read from their backing store on each interrupt. + +This patch stores the MSIMessage programmed into KVM so that we can +determine when changes are made and update the routes. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 47 ++++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 40 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 47 ++++++++++++++++++++++++++++++++++++++++------- + 1 files changed, 40 insertions(+), 7 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index a072fd9..286dad1 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -119,6 +119,7 @@ typedef struct VFIOINTx { + typedef struct VFIOMSIVector { + EventNotifier interrupt; /* eventfd triggered on interrupt */ + struct VFIODevice *vdev; /* back pointer to device */ ++ MSIMessage msg; /* cache the MSI message so we know when it changes */ + int virq; /* KVM irqchip route for QEMU bypass */ + bool use; + } VFIOMSIVector; +@@ -795,7 +796,6 @@ retry: + vdev->msi_vectors = g_malloc0(vdev->nr_vectors * sizeof(VFIOMSIVector)); + + for (i = 0; i < vdev->nr_vectors; i++) { +- MSIMessage msg; + VFIOMSIVector *vector = &vdev->msi_vectors[i]; + + vector->vdev = vdev; +@@ -805,13 +805,13 @@ retry: + error_report("vfio: Error: event_notifier_init failed"); + } + +- msg = msi_get_message(&vdev->pdev, i); ++ vector->msg = msi_get_message(&vdev->pdev, i); + + /* + * Attempt to enable route through KVM irqchip, + * default to userspace handling if unavailable. + */ +- vector->virq = kvm_irqchip_add_msi_route(kvm_state, msg); ++ vector->virq = kvm_irqchip_add_msi_route(kvm_state, vector->msg); + if (vector->virq < 0 || + kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, + vector->virq) < 0) { +@@ -917,6 +917,33 @@ static void vfio_disable_msi(VFIODevice *vdev) + vdev->host.bus, vdev->host.slot, vdev->host.function); + } + ++static void vfio_update_msi(VFIODevice *vdev) ++{ ++ int i; ++ ++ for (i = 0; i < vdev->nr_vectors; i++) { ++ VFIOMSIVector *vector = &vdev->msi_vectors[i]; ++ MSIMessage msg; ++ ++ if (!vector->use || vector->virq < 0) { ++ continue; ++ } ++ ++ msg = msi_get_message(&vdev->pdev, i); ++ ++ if (msg.address != vector->msg.address || ++ msg.data != vector->msg.data) { ++ ++ DPRINTF("%s(%04x:%02x:%02x.%x) MSI vector %d changed\n", ++ __func__, vdev->host.domain, vdev->host.bus, ++ vdev->host.slot, vdev->host.function, i); ++ ++ kvm_irqchip_update_msi_route(kvm_state, vector->virq, msg); ++ vector->msg = msg; ++ } ++ } ++} ++ + /* + * IO Port/MMIO - Beware of the endians, VFIO is always little endian + */ +@@ -1834,10 +1861,16 @@ static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, + + is_enabled = msi_enabled(pdev); + +- if (!was_enabled && is_enabled) { +- vfio_enable_msi(vdev); +- } else if (was_enabled && !is_enabled) { +- vfio_disable_msi(vdev); ++ if (!was_enabled) { ++ if (is_enabled) { ++ vfio_enable_msi(vdev); ++ } ++ } else { ++ if (!is_enabled) { ++ vfio_disable_msi(vdev); ++ } else { ++ vfio_update_msi(vdev); ++ } + } + } else if (pdev->cap_present & QEMU_PCI_CAP_MSIX && + ranges_overlap(addr, len, pdev->msix_cap, MSIX_CAP_LENGTH)) { +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Cleanup-error_reports.patch b/SOURCES/kvm-vfio-pci-Cleanup-error_reports.patch new file mode 100644 index 0000000..e2e5beb --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Cleanup-error_reports.patch @@ -0,0 +1,100 @@ +From 2f16dbb9130d90415c9db17ac8d28a196515b109 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:37:40 +0100 +Subject: [PATCH 15/25] vfio-pci: Cleanup error_reports + +RH-Author: Alex Williamson +Message-id: <20131105153740.16057.95138.stgit@bling.home> +Patchwork-id: 55424 +O-Subject: [RHEL7 qemu-kvm PATCH 3/5] vfio-pci: Cleanup error_reports +Bugzilla: 1026550 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1026550 +Upstream commit: 8fbf47c3a8a7f37a11268a07290d20a325ba4cb6 + +Remove carriage returns and tweak formatting for error_reports. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 8d84891..e336021 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3050,13 +3050,15 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) + ret = ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); + if (ret) { + /* This can fail for an old kernel or legacy PCI dev */ +- DPRINTF("VFIO_DEVICE_GET_IRQ_INFO failure ret=%d\n", ret); ++ DPRINTF("VFIO_DEVICE_GET_IRQ_INFO failure: %m\n"); + ret = 0; + } else if (irq_info.count == 1) { + vdev->pci_aer = true; + } else { +- error_report("vfio: Warning: " +- "Could not enable error recovery for the device\n"); ++ error_report("vfio: %04x:%02x:%02x.%x " ++ "Could not enable error recovery for the device", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); + } + + error: +@@ -3097,11 +3099,10 @@ static void vfio_err_notifier_handler(void *opaque) + * guest to contain the error. + */ + +- error_report("%s (%04x:%02x:%02x.%x)" +- "Unrecoverable error detected...\n" +- "Please collect any data possible and then kill the guest", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function); ++ error_report("%s(%04x:%02x:%02x.%x) Unrecoverable error detected. " ++ "Please collect any data possible and then kill the guest", ++ __func__, vdev->host.domain, vdev->host.bus, ++ vdev->host.slot, vdev->host.function); + + vm_stop(RUN_STATE_IO_ERROR); + } +@@ -3124,8 +3125,7 @@ static void vfio_register_err_notifier(VFIODevice *vdev) + } + + if (event_notifier_init(&vdev->err_notifier, 0)) { +- error_report("vfio: Warning: " +- "Unable to init event notifier for error detection\n"); ++ error_report("vfio: Unable to init event notifier for error detection"); + vdev->pci_aer = false; + return; + } +@@ -3146,7 +3146,7 @@ static void vfio_register_err_notifier(VFIODevice *vdev) + + ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); + if (ret) { +- error_report("vfio: Failed to set up error notification\n"); ++ error_report("vfio: Failed to set up error notification"); + qemu_set_fd_handler(*pfd, NULL, NULL, vdev); + event_notifier_cleanup(&vdev->err_notifier); + vdev->pci_aer = false; +@@ -3179,7 +3179,7 @@ static void vfio_unregister_err_notifier(VFIODevice *vdev) + + ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); + if (ret) { +- error_report("vfio: Failed to de-assign error fd: %d\n", ret); ++ error_report("vfio: Failed to de-assign error fd: %m"); + } + g_free(irq_set); + qemu_set_fd_handler(event_notifier_get_fd(&vdev->err_notifier), +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Default-display-option-to-off.patch b/SOURCES/kvm-vfio-pci-Default-display-option-to-off.patch new file mode 100644 index 0000000..7997e43 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Default-display-option-to-off.patch @@ -0,0 +1,48 @@ +From 24d5cb5f451e6e41456e5967d326fa51c844b22f Mon Sep 17 00:00:00 2001 +From: Tarun Gupta +Date: Wed, 20 Jun 2018 18:54:25 +0200 +Subject: [PATCH 17/17] vfio/pci: Default display option to "off" + +RH-Author: Tarun Gupta +Message-id: <1529520865-18127-12-git-send-email-tgupta@redhat.com> +Patchwork-id: 80917 +O-Subject: [RHEL7.6 qemu-kvm PATCH v3 11/11] vfio/pci: Default display option to "off" +Bugzilla: 1555246 +RH-Acked-by: Alex Williamson +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +Commit a9994687cb9b ("vfio/display: core & wireup") added display +support to vfio-pci with the default being "auto", which breaks +existing VMs when the vGPU requires GL support but had no previous +requirement for a GL compatible configuration. "Off" is the safer +default as we impose no new requirements to VM configurations. + +Fixes: a9994687cb9b ("vfio/display: core & wireup") + +Signed-off-by: Alex Williamson + +(cherry picked from upstream qemu +8151a9c56d31eeeea872b8103c8b86d03c411667) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index dd3efb3..f91eecb 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -4475,7 +4475,7 @@ static Property vfio_pci_dev_properties[] = { + DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), + DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), + DEFINE_PROP_ON_OFF_AUTO("display", VFIOPCIDevice, +- display, ON_OFF_AUTO_AUTO), ++ display, ON_OFF_AUTO_OFF), + DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice, + intx.mmap_timeout, 1100), + DEFINE_PROP_BIT("x-vga", VFIOPCIDevice, features, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Enable-device-request-notification-support.patch b/SOURCES/kvm-vfio-pci-Enable-device-request-notification-support.patch new file mode 100644 index 0000000..090a99c --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Enable-device-request-notification-support.patch @@ -0,0 +1,201 @@ +From 3e7a0ab48e4cd233caf8ab9e2593d1d2978bad9d Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:34:19 +0200 +Subject: [PATCH 08/14] vfio-pci: Enable device request notification support + +Message-id: <20150410163419.15324.17072.stgit@gimli.home> +Patchwork-id: 64788 +O-Subject: [RHEL7.2 qemu-kvm PATCH 8/8] vfio-pci: Enable device request notification support +Bugzilla: 1210509 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +Upstream: 47cbe50cc8d8e59129311bcdb827e1116e935bde + +Linux v4.0-rc1 vfio-pci introduced a new virtual interrupt to allow +the kernel to request a device from the user. When signaled, QEMU +will by default attmempt to hot-unplug the device. This is a one- +shot attempt with the expectation that the kernel will continue to +poll for the device if it is not returned. Returning the device when +requested is the expected standard model of cooperative usage, but we +also add an option option to disable this feature. Initially this +opt-out is set as an experimental option because we really should +honor kernel requests for the device. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 100 +++++++++++++++++++++++++++++++++++++++++++++ + linux-headers/linux/vfio.h | 1 + + 2 files changed, 101 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index d06b485..cbc9d8a 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -195,14 +195,18 @@ typedef struct VFIODevice { + QLIST_ENTRY(VFIODevice) next; + struct VFIOGroup *group; + EventNotifier err_notifier; ++ EventNotifier req_notifier; + uint32_t features; + #define VFIO_FEATURE_ENABLE_VGA_BIT 0 + #define VFIO_FEATURE_ENABLE_VGA (1 << VFIO_FEATURE_ENABLE_VGA_BIT) ++#define VFIO_FEATURE_ENABLE_REQ_BIT 1 ++#define VFIO_FEATURE_ENABLE_REQ (1 << VFIO_FEATURE_ENABLE_REQ_BIT) + int32_t bootindex; + uint8_t pm_cap; + bool reset_works; + bool has_vga; + bool pci_aer; ++ bool req_enabled; + bool has_flr; + bool has_pm_reset; + bool needs_reset; +@@ -3595,6 +3599,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) + + vdev->has_vga = true; + } ++ + irq_info.index = VFIO_PCI_ERR_IRQ_INDEX; + + ret = ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); +@@ -3737,6 +3742,97 @@ static void vfio_unregister_err_notifier(VFIODevice *vdev) + event_notifier_cleanup(&vdev->err_notifier); + } + ++static void vfio_req_notifier_handler(void *opaque) ++{ ++ VFIODevice *vdev = opaque; ++ ++ if (!event_notifier_test_and_clear(&vdev->req_notifier)) { ++ return; ++ } ++ ++ qdev_unplug(&vdev->pdev.qdev, NULL); ++} ++ ++static void vfio_register_req_notifier(VFIODevice *vdev) ++{ ++ struct vfio_irq_info irq_info = { .argsz = sizeof(irq_info), ++ .index = VFIO_PCI_REQ_IRQ_INDEX }; ++ int argsz; ++ struct vfio_irq_set *irq_set; ++ int32_t *pfd; ++ ++ if (!(vdev->features & VFIO_FEATURE_ENABLE_REQ)) { ++ return; ++ } ++ ++ if (ioctl(vdev->fd, ++ VFIO_DEVICE_GET_IRQ_INFO, &irq_info) < 0 || irq_info.count < 1) { ++ return; ++ } ++ ++ if (event_notifier_init(&vdev->req_notifier, 0)) { ++ error_report("vfio: Unable to init event notifier for device request"); ++ return; ++ } ++ ++ argsz = sizeof(*irq_set) + sizeof(*pfd); ++ ++ irq_set = g_malloc0(argsz); ++ irq_set->argsz = argsz; ++ irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | ++ VFIO_IRQ_SET_ACTION_TRIGGER; ++ irq_set->index = VFIO_PCI_REQ_IRQ_INDEX; ++ irq_set->start = 0; ++ irq_set->count = 1; ++ pfd = (int32_t *)&irq_set->data; ++ ++ *pfd = event_notifier_get_fd(&vdev->req_notifier); ++ qemu_set_fd_handler(*pfd, vfio_req_notifier_handler, NULL, vdev); ++ ++ if (ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) { ++ error_report("vfio: Failed to set up device request notification"); ++ qemu_set_fd_handler(*pfd, NULL, NULL, vdev); ++ event_notifier_cleanup(&vdev->req_notifier); ++ } else { ++ vdev->req_enabled = true; ++ } ++ ++ g_free(irq_set); ++} ++ ++static void vfio_unregister_req_notifier(VFIODevice *vdev) ++{ ++ int argsz; ++ struct vfio_irq_set *irq_set; ++ int32_t *pfd; ++ ++ if (!vdev->req_enabled) { ++ return; ++ } ++ ++ argsz = sizeof(*irq_set) + sizeof(*pfd); ++ ++ irq_set = g_malloc0(argsz); ++ irq_set->argsz = argsz; ++ irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | ++ VFIO_IRQ_SET_ACTION_TRIGGER; ++ irq_set->index = VFIO_PCI_REQ_IRQ_INDEX; ++ irq_set->start = 0; ++ irq_set->count = 1; ++ pfd = (int32_t *)&irq_set->data; ++ *pfd = -1; ++ ++ if (ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) { ++ error_report("vfio: Failed to de-assign device request fd: %m"); ++ } ++ g_free(irq_set); ++ qemu_set_fd_handler(event_notifier_get_fd(&vdev->req_notifier), ++ NULL, NULL, vdev); ++ event_notifier_cleanup(&vdev->req_notifier); ++ ++ vdev->req_enabled = false; ++} ++ + static int vfio_initfn(PCIDevice *pdev) + { + VFIODevice *pvdev, *vdev = DO_UPCAST(VFIODevice, pdev, pdev); +@@ -3889,6 +3985,7 @@ static int vfio_initfn(PCIDevice *pdev) + + add_boot_device_path(vdev->bootindex, &pdev->qdev, NULL); + vfio_register_err_notifier(vdev); ++ vfio_register_req_notifier(vdev); + + return 0; + +@@ -3908,6 +4005,7 @@ static void vfio_exitfn(PCIDevice *pdev) + VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); + VFIOGroup *group = vdev->group; + ++ vfio_unregister_req_notifier(vdev); + vfio_unregister_err_notifier(vdev); + pci_device_set_intx_routing_notifier(&vdev->pdev, NULL); + vfio_disable_interrupts(vdev); +@@ -3962,6 +4060,8 @@ static Property vfio_pci_dev_properties[] = { + intx.mmap_timeout, 1100), + DEFINE_PROP_BIT("x-vga", VFIODevice, features, + VFIO_FEATURE_ENABLE_VGA_BIT, false), ++ DEFINE_PROP_BIT("x-req", VFIODevice, features, ++ VFIO_FEATURE_ENABLE_REQ_BIT, true), + DEFINE_PROP_INT32("bootindex", VFIODevice, bootindex, -1), + /* + * TODO - support passed fds... is this necessary? +diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h +index 7919c76..d197fd4 100644 +--- a/linux-headers/linux/vfio.h ++++ b/linux-headers/linux/vfio.h +@@ -321,6 +321,7 @@ enum { + VFIO_PCI_MSI_IRQ_INDEX, + VFIO_PCI_MSIX_IRQ_INDEX, + VFIO_PCI_ERR_IRQ_INDEX, ++ VFIO_PCI_REQ_IRQ_INDEX, + VFIO_PCI_NUM_IRQS + }; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fail-initfn-on-DMA-mapping-errors.patch b/SOURCES/kvm-vfio-pci-Fail-initfn-on-DMA-mapping-errors.patch new file mode 100644 index 0000000..b049362 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fail-initfn-on-DMA-mapping-errors.patch @@ -0,0 +1,139 @@ +From 00636d4945615f869926ec05df55680dfb452a01 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Wed, 22 Jan 2014 20:52:52 -0500 +Subject: [PATCH 1/6] vfio-pci: Fail initfn on DMA mapping errors + +Message-id: <20140122205231.4223.40719.stgit@bling.home> +Patchwork-id: 56900 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] vfio-pci: Fail initfn on DMA mapping errors +Bugzilla: 1044815 +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster + +Bugzilla: 1044815 +Upstream: 87ca1f77b1c406137fe36ab73b2dc91fb75f8d0a (tag from pull request) + +The vfio-pci initfn will currently succeed even if DMA mappings fail. +A typical reason for failure is if the user does not have sufficient +privilege to lock all the memory for the guest. In this case, the +device gets attached, but can only access a portion of guest memory +and is extremely unlikely to work. + +DMA mappings are done via a MemoryListener, which provides no direct +error return path. We therefore stuff the errno into our container +structure and check for error after registration completes. We can +also test for mapping errors during runtime, but our only option for +resolution at that point is to kill the guest with a hw_error. + +Signed-off-by: Alex Williamson +(cherry picked from commit 87ca1f77b1c406137fe36ab73b2dc91fb75f8d0a) +--- + hw/misc/vfio.c | 44 ++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 38 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 44 ++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 38 insertions(+), 6 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index bd30130..83f2b6a 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -133,12 +133,18 @@ enum { + + struct VFIOGroup; + ++typedef struct VFIOType1 { ++ MemoryListener listener; ++ int error; ++ bool initialized; ++} VFIOType1; ++ + typedef struct VFIOContainer { + int fd; /* /dev/vfio/vfio, empowered by the attached groups */ + struct { + /* enable abstraction to support various iommu backends */ + union { +- MemoryListener listener; /* Used by type1 iommu */ ++ VFIOType1 type1; + }; + void (*release)(struct VFIOContainer *); + } iommu_data; +@@ -2102,7 +2108,7 @@ static void vfio_listener_region_add(MemoryListener *listener, + MemoryRegionSection *section) + { + VFIOContainer *container = container_of(listener, VFIOContainer, +- iommu_data.listener); ++ iommu_data.type1.listener); + hwaddr iova, end; + void *vaddr; + int ret; +@@ -2140,6 +2146,19 @@ static void vfio_listener_region_add(MemoryListener *listener, + error_report("vfio_dma_map(%p, 0x%"HWADDR_PRIx", " + "0x%"HWADDR_PRIx", %p) = %d (%m)", + container, iova, end - iova, vaddr, ret); ++ ++ /* ++ * On the initfn path, store the first error in the container so we ++ * can gracefully fail. Runtime, there's not much we can do other ++ * than throw a hardware error. ++ */ ++ if (!container->iommu_data.type1.initialized) { ++ if (!container->iommu_data.type1.error) { ++ container->iommu_data.type1.error = ret; ++ } ++ } else { ++ hw_error("vfio: DMA mapping failed, unable to continue\n"); ++ } + } + } + +@@ -2147,7 +2166,7 @@ static void vfio_listener_region_del(MemoryListener *listener, + MemoryRegionSection *section) + { + VFIOContainer *container = container_of(listener, VFIOContainer, +- iommu_data.listener); ++ iommu_data.type1.listener); + hwaddr iova, end; + int ret; + +@@ -2190,7 +2209,7 @@ static MemoryListener vfio_memory_listener = { + + static void vfio_listener_release(VFIOContainer *container) + { +- memory_listener_unregister(&container->iommu_data.listener); ++ memory_listener_unregister(&container->iommu_data.type1.listener); + } + + /* +@@ -3159,10 +3178,23 @@ static int vfio_connect_container(VFIOGroup *group) + return -errno; + } + +- container->iommu_data.listener = vfio_memory_listener; ++ container->iommu_data.type1.listener = vfio_memory_listener; + container->iommu_data.release = vfio_listener_release; + +- memory_listener_register(&container->iommu_data.listener, &address_space_memory); ++ memory_listener_register(&container->iommu_data.type1.listener, ++ &address_space_memory); ++ ++ if (container->iommu_data.type1.error) { ++ ret = container->iommu_data.type1.error; ++ vfio_listener_release(container); ++ g_free(container); ++ close(fd); ++ error_report("vfio: memory listener initialization failed for container\n"); ++ return ret; ++ } ++ ++ container->iommu_data.type1.initialized = true; ++ + } else { + error_report("vfio: No available IOMMU models"); + g_free(container); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-BAR-size-overflow.patch b/SOURCES/kvm-vfio-pci-Fix-BAR-size-overflow.patch new file mode 100644 index 0000000..dcb01a2 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-BAR-size-overflow.patch @@ -0,0 +1,57 @@ +From 27b471e574edcee7ac065a7a46f558dca0fd7bf0 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:34:08 +0200 +Subject: [PATCH 06/14] vfio-pci: Fix BAR size overflow + +Message-id: <20150410163408.15324.43004.stgit@gimli.home> +Patchwork-id: 64792 +O-Subject: [RHEL7.2 qemu-kvm PATCH 6/8] vfio-pci: Fix BAR size overflow +Bugzilla: 1181267 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +Upstream: 29c6e6df492d81b1843e5dd999171bb84c6effea + +We use an unsigned int when working with the PCI BAR size, which can +obviously overflow if the BAR is 4GB or larger. This needs to change +to a fixed length uint64_t. A similar issue is possible, though even +more unlikely, when mapping the region above an MSI-X table. The +start of the MSI-X vector table must be below 4GB, but the end, and +therefore the start of the next mapping region, could still land at +4GB. + +Suggested-by: Nishank Trivedi +Signed-off-by: Alex Williamson +Reviewed-by: Don Slutz +Tested-by: Alexey Kardashevskiy +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index f6e019c..607dbf4 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2579,7 +2579,7 @@ empty_region: + static void vfio_map_bar(VFIODevice *vdev, int nr) + { + VFIOBAR *bar = &vdev->bars[nr]; +- unsigned size = bar->size; ++ uint64_t size = bar->size; + char name[64]; + uint32_t pci_bar; + uint8_t type; +@@ -2628,7 +2628,7 @@ static void vfio_map_bar(VFIODevice *vdev, int nr) + } + + if (vdev->msix && vdev->msix->table_bar == nr) { +- unsigned start; ++ uint64_t start; + + start = TARGET_PAGE_ALIGN(vdev->msix->table_offset + + (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-MSI-X-debug-code.patch b/SOURCES/kvm-vfio-pci-Fix-MSI-X-debug-code.patch new file mode 100644 index 0000000..98e3a07 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-MSI-X-debug-code.patch @@ -0,0 +1,40 @@ +From 6b9b6494bc17888edf8a9673e645fb0416aa6e3e Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 7 Aug 2014 21:03:03 +0200 +Subject: [PATCH 4/7] vfio-pci: Fix MSI/X debug code + +Message-id: <20140807210302.11689.73901.stgit@gimli.home> +Patchwork-id: 60480 +O-Subject: [RHEL7.0/z qemu-kvm PATCH v2 3/6] vfio-pci: Fix MSI/X debug code +Bugzilla: 1098976 +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong +RH-Acked-by: Laszlo Ersek + +Use the correct MSI message function for debug info. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 7f6ebf9..5f0460a 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -623,9 +623,9 @@ static void vfio_msi_interrupt(void *opaque) + MSIMessage msg; + + if (vdev->interrupt == VFIO_INT_MSIX) { +- msg = msi_get_message(&vdev->pdev, nr); +- } else if (vdev->interrupt == VFIO_INT_MSI) { + msg = msix_get_message(&vdev->pdev, nr); ++ } else if (vdev->interrupt == VFIO_INT_MSI) { ++ msg = msi_get_message(&vdev->pdev, nr); + } else { + abort(); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-MSI-X-masking-performance.patch b/SOURCES/kvm-vfio-pci-Fix-MSI-X-masking-performance.patch new file mode 100644 index 0000000..88d2e35 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-MSI-X-masking-performance.patch @@ -0,0 +1,409 @@ +From 81ee28858d0082b300184c9fcfc10480c67aa74d Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 7 Aug 2014 21:03:08 +0200 +Subject: [PATCH 5/7] vfio-pci: Fix MSI-X masking performance + +Message-id: <20140807210308.11689.93757.stgit@gimli.home> +Patchwork-id: 60481 +O-Subject: [RHEL7.0/z qemu-kvm PATCH v2 4/6] vfio-pci: Fix MSI-X masking performance +Bugzilla: 1098976 +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong +RH-Acked-by: Laszlo Ersek + +There are still old guests out there that over-exercise MSI-X masking. +The current code completely sets-up and tears-down an MSI-X vector on +the "use" and "release" callbacks. While this is functional, it can +slow an old guest to a crawl. We can easily skip the KVM parts of +this so that we keep the MSI route and irqfd setup. We do however +need to switch VFIO to trigger a different eventfd while masked. +Actually, we have the option of continuing to use -1 to disable the +trigger, but by using another EventNotifier we can allow the MSI-X +core to emulate pending bits and re-fire the vector once unmasked. +MSI code gets updated as well to use the same setup and teardown +structures and functions. + +Prior to this change, an igbvf assigned to a RHEL5 guest gets about +20Mbps and 50 transactions/s with netperf (remote or VF->PF). With +this change, we get line rate and 3k transactions/s remote or 2Gbps +and 6k+ transactions/s to the PF. No significant change is expected +for newer guests with more well behaved MSI-X support. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 233 ++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 131 insertions(+), 102 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 5f0460a..bd37924 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -120,6 +120,7 @@ typedef struct VFIOINTx { + + typedef struct VFIOMSIVector { + EventNotifier interrupt; /* eventfd triggered on interrupt */ ++ EventNotifier kvm_interrupt; /* eventfd triggered for KVM irqfd bypass */ + struct VFIODevice *vdev; /* back pointer to device */ + MSIMessage msg; /* cache the MSI message so we know when it changes */ + int virq; /* KVM irqchip route for QEMU bypass */ +@@ -663,10 +664,11 @@ static int vfio_enable_vectors(VFIODevice *vdev, bool msix) + for (i = 0; i < vdev->nr_vectors; i++) { + if (!vdev->msi_vectors[i].use) { + fds[i] = -1; +- continue; ++ } else if (vdev->msi_vectors[i].virq >= 0) { ++ fds[i] = event_notifier_get_fd(&vdev->msi_vectors[i].kvm_interrupt); ++ } else { ++ fds[i] = event_notifier_get_fd(&vdev->msi_vectors[i].interrupt); + } +- +- fds[i] = event_notifier_get_fd(&vdev->msi_vectors[i].interrupt); + } + + ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); +@@ -676,6 +678,52 @@ static int vfio_enable_vectors(VFIODevice *vdev, bool msix) + return ret; + } + ++static void vfio_add_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage *msg, ++ bool msix) ++{ ++ int virq; ++ ++ if ((msix && !VFIO_ALLOW_KVM_MSIX) || ++ (!msix && !VFIO_ALLOW_KVM_MSI) || !msg) { ++ return; ++ } ++ ++ if (event_notifier_init(&vector->kvm_interrupt, 0)) { ++ return; ++ } ++ ++ virq = kvm_irqchip_add_msi_route(kvm_state, *msg); ++ if (virq < 0) { ++ event_notifier_cleanup(&vector->kvm_interrupt); ++ return; ++ } ++ ++ if (kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->kvm_interrupt, ++ virq) < 0) { ++ kvm_irqchip_release_virq(kvm_state, virq); ++ event_notifier_cleanup(&vector->kvm_interrupt); ++ return; ++ } ++ ++ vector->msg = *msg; ++ vector->virq = virq; ++} ++ ++static void vfio_remove_kvm_msi_virq(VFIOMSIVector *vector) ++{ ++ kvm_irqchip_remove_irqfd_notifier(kvm_state, &vector->kvm_interrupt, ++ vector->virq); ++ kvm_irqchip_release_virq(kvm_state, vector->virq); ++ vector->virq = -1; ++ event_notifier_cleanup(&vector->kvm_interrupt); ++} ++ ++static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg) ++{ ++ kvm_irqchip_update_msi_route(kvm_state, vector->virq, msg); ++ vector->msg = msg; ++} ++ + static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + MSIMessage *msg, IOHandler *handler) + { +@@ -688,30 +736,32 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + vdev->host.function, nr); + + vector = &vdev->msi_vectors[nr]; +- vector->vdev = vdev; +- vector->use = true; +- +- msix_vector_use(pdev, nr); + +- if (event_notifier_init(&vector->interrupt, 0)) { +- error_report("vfio: Error: event_notifier_init failed"); ++ if (!vector->use) { ++ vector->vdev = vdev; ++ vector->virq = -1; ++ if (event_notifier_init(&vector->interrupt, 0)) { ++ error_report("vfio: Error: event_notifier_init failed"); ++ } ++ vector->use = true; ++ msix_vector_use(pdev, nr); + } + ++ qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), ++ handler, NULL, vector); ++ + /* + * Attempt to enable route through KVM irqchip, + * default to userspace handling if unavailable. + */ +- vector->virq = msg && VFIO_ALLOW_KVM_MSIX ? +- kvm_irqchip_add_msi_route(kvm_state, *msg) : -1; +- if (vector->virq < 0 || +- kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, +- vector->virq) < 0) { +- if (vector->virq >= 0) { +- kvm_irqchip_release_virq(kvm_state, vector->virq); +- vector->virq = -1; ++ if (vector->virq >= 0) { ++ if (!msg) { ++ vfio_remove_kvm_msi_virq(vector); ++ } else { ++ vfio_update_kvm_msi_virq(vector, *msg); + } +- qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), +- handler, NULL, vector); ++ } else { ++ vfio_add_kvm_msi_virq(vector, msg, true); + } + + /* +@@ -742,7 +792,11 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + irq_set->count = 1; + pfd = (int32_t *)&irq_set->data; + +- *pfd = event_notifier_get_fd(&vector->interrupt); ++ if (vector->virq >= 0) { ++ *pfd = event_notifier_get_fd(&vector->kvm_interrupt); ++ } else { ++ *pfd = event_notifier_get_fd(&vector->interrupt); ++ } + + ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); + g_free(irq_set); +@@ -764,50 +818,41 @@ static void vfio_msix_vector_release(PCIDevice *pdev, unsigned int nr) + { + VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); + VFIOMSIVector *vector = &vdev->msi_vectors[nr]; +- int argsz; +- struct vfio_irq_set *irq_set; +- int32_t *pfd; + + DPRINTF("%s(%04x:%02x:%02x.%x) vector %d released\n", __func__, + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function, nr); + + /* +- * XXX What's the right thing to do here? This turns off the interrupt +- * completely, but do we really just want to switch the interrupt to +- * bouncing through userspace and let msix.c drop it? Not sure. ++ * There are still old guests that mask and unmask vectors on every ++ * interrupt. If we're using QEMU bypass with a KVM irqfd, leave all of ++ * the KVM setup in place, simply switch VFIO to use the non-bypass ++ * eventfd. We'll then fire the interrupt through QEMU and the MSI-X ++ * core will mask the interrupt and set pending bits, allowing it to ++ * be re-asserted on unmask. Nothing to do if already using QEMU mode. + */ +- msix_vector_unuse(pdev, nr); +- +- argsz = sizeof(*irq_set) + sizeof(*pfd); ++ if (vector->virq >= 0) { ++ int argsz; ++ struct vfio_irq_set *irq_set; ++ int32_t *pfd; + +- irq_set = g_malloc0(argsz); +- irq_set->argsz = argsz; +- irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | +- VFIO_IRQ_SET_ACTION_TRIGGER; +- irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX; +- irq_set->start = nr; +- irq_set->count = 1; +- pfd = (int32_t *)&irq_set->data; ++ argsz = sizeof(*irq_set) + sizeof(*pfd); + +- *pfd = -1; ++ irq_set = g_malloc0(argsz); ++ irq_set->argsz = argsz; ++ irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | ++ VFIO_IRQ_SET_ACTION_TRIGGER; ++ irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX; ++ irq_set->start = nr; ++ irq_set->count = 1; ++ pfd = (int32_t *)&irq_set->data; + +- ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); ++ *pfd = event_notifier_get_fd(&vector->interrupt); + +- g_free(irq_set); ++ ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set); + +- if (vector->virq < 0) { +- qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), +- NULL, NULL, NULL); +- } else { +- kvm_irqchip_remove_irqfd_notifier(kvm_state, &vector->interrupt, +- vector->virq); +- kvm_irqchip_release_virq(kvm_state, vector->virq); +- vector->virq = -1; ++ g_free(irq_set); + } +- +- event_notifier_cleanup(&vector->interrupt); +- vector->use = false; + } + + static void vfio_enable_msix(VFIODevice *vdev) +@@ -857,28 +902,28 @@ retry: + VFIOMSIVector *vector = &vdev->msi_vectors[i]; + + vector->vdev = vdev; ++ vector->virq = -1; + vector->use = true; + + if (event_notifier_init(&vector->interrupt, 0)) { + error_report("vfio: Error: event_notifier_init failed"); + } + ++ qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), ++ vfio_msi_interrupt, NULL, vector); ++ + vector->msg = msi_get_message(&vdev->pdev, i); + + /* + * Attempt to enable route through KVM irqchip, + * default to userspace handling if unavailable. + */ +- vector->virq = VFIO_ALLOW_KVM_MSI ? +- kvm_irqchip_add_msi_route(kvm_state, vector->msg) : -1; +- if (vector->virq < 0 || +- kvm_irqchip_add_irqfd_notifier(kvm_state, &vector->interrupt, +- vector->virq) < 0) { +- qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), +- vfio_msi_interrupt, NULL, vector); +- } ++ vfio_add_kvm_msi_virq(vector, &vector->msg, false); + } + ++ /* Set interrupt type prior to possible interrupts */ ++ vdev->interrupt = VFIO_INT_MSI; ++ + ret = vfio_enable_vectors(vdev, false); + if (ret) { + if (ret < 0) { +@@ -891,14 +936,10 @@ retry: + for (i = 0; i < vdev->nr_vectors; i++) { + VFIOMSIVector *vector = &vdev->msi_vectors[i]; + if (vector->virq >= 0) { +- kvm_irqchip_remove_irqfd_notifier(kvm_state, &vector->interrupt, +- vector->virq); +- kvm_irqchip_release_virq(kvm_state, vector->virq); +- vector->virq = -1; +- } else { +- qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), +- NULL, NULL, NULL); ++ vfio_remove_kvm_msi_virq(vector); + } ++ qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), ++ NULL, NULL, NULL); + event_notifier_cleanup(&vector->interrupt); + } + +@@ -910,11 +951,17 @@ retry: + } + vdev->nr_vectors = 0; + ++ /* ++ * Failing to setup MSI doesn't really fall within any specification. ++ * Let's try leaving interrupts disabled and hope the guest figures ++ * out to fall back to INTx for this device. ++ */ ++ error_report("vfio: Error: Failed to enable MSI"); ++ vdev->interrupt = VFIO_INT_NONE; ++ + return; + } + +- vdev->interrupt = VFIO_INT_MSI; +- + DPRINTF("%s(%04x:%02x:%02x.%x) Enabled %d MSI vectors\n", __func__, + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function, vdev->nr_vectors); +@@ -922,6 +969,20 @@ retry: + + static void vfio_disable_msi_common(VFIODevice *vdev) + { ++ int i; ++ ++ for (i = 0; i < vdev->nr_vectors; i++) { ++ VFIOMSIVector *vector = &vdev->msi_vectors[i]; ++ if (vdev->msi_vectors[i].use) { ++ if (vector->virq >= 0) { ++ vfio_remove_kvm_msi_virq(vector); ++ } ++ qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), ++ NULL, NULL, NULL); ++ event_notifier_cleanup(&vector->interrupt); ++ } ++ } ++ + g_free(vdev->msi_vectors); + vdev->msi_vectors = NULL; + vdev->nr_vectors = 0; +@@ -943,6 +1004,7 @@ static void vfio_disable_msix(VFIODevice *vdev) + for (i = 0; i < vdev->nr_vectors; i++) { + if (vdev->msi_vectors[i].use) { + vfio_msix_vector_release(&vdev->pdev, i); ++ msix_vector_unuse(&vdev->pdev, i); + } + } + +@@ -958,30 +1020,7 @@ static void vfio_disable_msix(VFIODevice *vdev) + + static void vfio_disable_msi(VFIODevice *vdev) + { +- int i; +- + vfio_disable_irqindex(vdev, VFIO_PCI_MSI_IRQ_INDEX); +- +- for (i = 0; i < vdev->nr_vectors; i++) { +- VFIOMSIVector *vector = &vdev->msi_vectors[i]; +- +- if (!vector->use) { +- continue; +- } +- +- if (vector->virq >= 0) { +- kvm_irqchip_remove_irqfd_notifier(kvm_state, +- &vector->interrupt, vector->virq); +- kvm_irqchip_release_virq(kvm_state, vector->virq); +- vector->virq = -1; +- } else { +- qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), +- NULL, NULL, NULL); +- } +- +- event_notifier_cleanup(&vector->interrupt); +- } +- + vfio_disable_msi_common(vdev); + + DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +@@ -1001,17 +1040,7 @@ static void vfio_update_msi(VFIODevice *vdev) + } + + msg = msi_get_message(&vdev->pdev, i); +- +- if (msg.address != vector->msg.address || +- msg.data != vector->msg.data) { +- +- DPRINTF("%s(%04x:%02x:%02x.%x) MSI vector %d changed\n", +- __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, i); +- +- kvm_irqchip_update_msi_route(kvm_state, vector->virq, msg); +- vector->msg = msg; +- } ++ vfio_update_kvm_msi_virq(vector, msg); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-endian-issues-in-vfio_pci_size_rom.patch b/SOURCES/kvm-vfio-pci-Fix-endian-issues-in-vfio_pci_size_rom.patch new file mode 100644 index 0000000..b07fe46 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-endian-issues-in-vfio_pci_size_rom.patch @@ -0,0 +1,57 @@ +From 4bb91ae660a2b4aa64c12b9f92227881edf13609 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:37:52 +0100 +Subject: [PATCH 17/25] vfio-pci: Fix endian issues in vfio_pci_size_rom() + +RH-Author: Alex Williamson +Message-id: <20131105153752.16057.43832.stgit@bling.home> +Patchwork-id: 55426 +O-Subject: [RHEL7 qemu-kvm PATCH 5/5] vfio-pci: Fix endian issues in vfio_pci_size_rom() +Bugzilla: 1026550 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1026550 +Upstream commit: b1c50c5f248805be747e96e89efbe784ee99f764 + +VFIO is always little endian so do byte swapping of our mask on the +way in and byte swapping of the size on the way out. + +Signed-off-by: Alex Williamson +Reported-by: Alexey Kardashevskiy +--- + hw/misc/vfio.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index d327b40..6178221 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -1140,7 +1140,7 @@ static const MemoryRegionOps vfio_rom_ops = { + + static void vfio_pci_size_rom(VFIODevice *vdev) + { +- uint32_t orig, size = (uint32_t)PCI_ROM_ADDRESS_MASK; ++ uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK); + off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; + char name[32]; + +@@ -1162,7 +1162,7 @@ static void vfio_pci_size_rom(VFIODevice *vdev) + return; + } + +- size = ~(size & PCI_ROM_ADDRESS_MASK) + 1; ++ size = ~(le32_to_cpu(size) & PCI_ROM_ADDRESS_MASK) + 1; + + if (!size) { + return; +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-error-path-sign.patch b/SOURCES/kvm-vfio-pci-Fix-error-path-sign.patch new file mode 100644 index 0000000..261d929 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-error-path-sign.patch @@ -0,0 +1,45 @@ +From ad2855430b1fcbd4566af464120892a32ce7d9f8 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 1 May 2015 18:10:44 +0200 +Subject: [PATCH 10/14] vfio-pci: Fix error path sign + +Message-id: <20150501180951.31395.33354.stgit@gimli.home> +Patchwork-id: 64973 +O-Subject: [RHEL7.2 qemu-kvm PATCH 10/8] vfio-pci: Fix error path sign +Bugzilla: 1210504 +RH-Acked-by: Bandan Das +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek + +This is an impossible error path due to the fact that we're reading a +kernel provided, rather than user provided link, which will certainly +always fit in PATH_MAX. Currently it returns a fixed 26 char path +plus %d group number, which typically maxes out at double digits. +However, the caller of the initfn certainly expects a less-than zero +return value on error, not just a non-zero value. Therefore we +should correct the sign here. + +Reported-by: Laszlo Ersek +Reviewed-by: Laszlo Ersek +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index e6f96db..118489c 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3870,7 +3870,7 @@ static int vfio_initfn(PCIDevice *pdev) + len = readlink(path, iommu_group_path, sizeof(path)); + if (len <= 0 || len >= sizeof(path)) { + error_report("vfio: error no iommu_group for device"); +- return len < 0 ? -errno : ENAMETOOLONG; ++ return len < 0 ? -errno : -ENAMETOOLONG; + } + + iommu_group_path[len] = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-incorrect-error-message.patch b/SOURCES/kvm-vfio-pci-Fix-incorrect-error-message.patch new file mode 100644 index 0000000..bdb7ba7 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-incorrect-error-message.patch @@ -0,0 +1,50 @@ +From 0dadf0b76c9236d048c203fb5b9baaf3fe6fac15 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:44 +0200 +Subject: [PATCH 12/27] vfio/pci: Fix incorrect error message + +RH-Author: Alex Williamson +Message-id: <20170929214544.16765.85472.stgit@gimli.home> +Patchwork-id: 76770 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 12/16] vfio/pci: Fix incorrect error message +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Dong Jia Shi + +Upstream: 6e4e6f0d403b1fb25f9dfdbe17754c643997753d + +When the "No host device provided" error occurs, the hint message +that starts with "Use -vfio-pci," makes no sense, since "-vfio-pci" +is not a valid command line parameter. + +Correct this by replacing "-vfio-pci" with "-device vfio-pci". + +Signed-off-by: Dong Jia Shi +Reviewed-by: Eric Auger +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index a95bbaf..e2dc3f5 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3867,8 +3867,8 @@ static int vfio_initfn(PCIDevice *pdev) + if (!(~vdev->host.domain || ~vdev->host.bus || + ~vdev->host.slot || ~vdev->host.function)) { + error_report("No provided host device - " +- "Use -vfio-pci,host=DDDD:BB:DD.F " +- "or -vfio-pci,sysfsdev=PATH_TO_DEVICE"); ++ "Use -device vfio-pci,host=DDDD:BB:DD.F " ++ "or -device vfio-pci,sysfsdev=PATH_TO_DEVICE"); + return -EINVAL; + } + vdev->vbasedev.sysfsdev = +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-interrupt-disabling.patch b/SOURCES/kvm-vfio-pci-Fix-interrupt-disabling.patch new file mode 100644 index 0000000..3c4e0ee --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-interrupt-disabling.patch @@ -0,0 +1,74 @@ +From fdad8c197b91f1010e4f61147f27513a4f061e40 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Mon, 12 Jan 2015 04:52:17 +0100 +Subject: [PATCH 1/3] vfio-pci: Fix interrupt disabling + +Message-id: <20150112045144.9215.59820.stgit@gimli.home> +Patchwork-id: 63242 +O-Subject: [RHEL7.1 qemu-kvm PATCH] vfio-pci: Fix interrupt disabling +Bugzilla: 1180942 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek + +Upstream: b3e27c3aee8f5a96debfe0346e9c0e3a641a8516 + +When disabling MSI/X interrupts the disable functions will leave the +device in INTx mode (when available). This matches how hardware +operates, INTx is enabled unless MSI/X is enabled (DisINTx is handled +separately). Therefore when we really want to disable all interrupts, +such as when removing the device, and we start with the device in +MSI/X mode, we need to pass through INTx on our way to being +completely quiesced. + +In well behaved situations, the guest driver will have shutdown the +device and it will start vfio_exitfn() in INTx mode, producing the +desired result. If hot-unplug causes the guest to crash, we may get +the device in MSI/X state, which will leave QEMU with a bogus handler +installed. + +Fix this by re-ordering our disable routine so that it should always +finish in VFIO_INT_NONE state, which is what all callers expect. + +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index abaa4c1..40b0923 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2353,16 +2353,19 @@ static void vfio_listener_release(VFIOContainer *container) + */ + static void vfio_disable_interrupts(VFIODevice *vdev) + { +- switch (vdev->interrupt) { +- case VFIO_INT_INTx: +- vfio_disable_intx(vdev); +- break; +- case VFIO_INT_MSI: +- vfio_disable_msi(vdev); +- break; +- case VFIO_INT_MSIX: ++ /* ++ * More complicated than it looks. Disabling MSI/X transitions the ++ * device to INTx mode (if supported). Therefore we need to first ++ * disable MSI/X and then cleanup by disabling INTx. ++ */ ++ if (vdev->interrupt == VFIO_INT_MSIX) { + vfio_disable_msix(vdev); +- break; ++ } else if (vdev->interrupt == VFIO_INT_MSI) { ++ vfio_disable_msi(vdev); ++ } ++ ++ if (vdev->interrupt == VFIO_INT_INTx) { ++ vfio_disable_intx(vdev); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Fix-multifunction-on.patch b/SOURCES/kvm-vfio-pci-Fix-multifunction-on.patch new file mode 100644 index 0000000..e3d4171 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Fix-multifunction-on.patch @@ -0,0 +1,58 @@ +From 7197c8b9234f26922ce7c6f3d7784b2604bdaafd Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Thu, 21 Nov 2013 21:08:58 +0100 +Subject: [PATCH 10/14] vfio-pci: Fix multifunction=on + +RH-Author: Alex Williamson +Message-id: <20131121210817.12705.22782.stgit@bling.home> +Patchwork-id: 55844 +O-Subject: [RHEL7 qemu-kvm PATCH] vfio-pci: Fix multifunction=on +Bugzilla: 1029275 +RH-Acked-by: Amos Kong +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1029275 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6627360 +Upstream: 187d62327aca39afbb038d13d7cd6bf2d11640d3 + +When an assigned device is initialized it copies the device config +space into the emulated config space. Unfortunately multifunction is +setup prior to the device initfn and gets clobbered. We need to +restore it just like pci-assign does. + +Signed-off-by: Alex Williamson +Reviewed-by: Bandan Das +Message-id: 20131112185059.7262.33780.stgit@bling.home +Cc: qemu-stable@nongnu.org +Signed-off-by: Anthony Liguori +--- + hw/misc/vfio.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index b7f213b..5a6925c 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3625,6 +3625,13 @@ static int vfio_initfn(PCIDevice *pdev) + vdev->emulated_config_bits[PCI_HEADER_TYPE] = + PCI_HEADER_TYPE_MULTI_FUNCTION; + ++ /* Restore or clear multifunction, this is always controlled by QEMU */ ++ if (vdev->pdev.cap_present & QEMU_PCI_CAP_MULTIFUNCTION) { ++ vdev->pdev.config[PCI_HEADER_TYPE] |= PCI_HEADER_TYPE_MULTI_FUNCTION; ++ } else { ++ vdev->pdev.config[PCI_HEADER_TYPE] &= ~PCI_HEADER_TYPE_MULTI_FUNCTION; ++ } ++ + /* + * Clear host resource mapping info. If we choose not to register a + * BAR, such as might be the case with the option ROM, we can get +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Further-fix-BAR-size-overflow.patch b/SOURCES/kvm-vfio-pci-Further-fix-BAR-size-overflow.patch new file mode 100644 index 0000000..cb1f866 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Further-fix-BAR-size-overflow.patch @@ -0,0 +1,59 @@ +From 46edd2ae852e19ee3a1b473be949691c6ce5694d Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 1 May 2015 18:09:33 +0200 +Subject: [PATCH 09/14] vfio-pci: Further fix BAR size overflow + +Message-id: <20150501180733.31334.63326.stgit@gimli.home> +Patchwork-id: 64972 +O-Subject: [RHEL7.2 qemu-kvm PATCH 9/8] vfio-pci: Further fix BAR size overflow +Bugzilla: 1181267 +RH-Acked-by: Thomas Huth +RH-Acked-by: Bandan Das +RH-Acked-by: Laszlo Ersek + +Bugzilla: 1181267 +Upstream: 07ceaf98800519ef9c5dc893af00f1fe1f9144e4 + +In an analysis by Laszlo, the resulting type of our calculation for +the end of the MSI-X table, and thus the start of memory after the +table, is uint32_t. We're therefore not correctly preventing the +corner case overflow that we intended to fix here where a BAR >=4G +could place the MSI-X table to end exactly at the 4G boundary. The +MSI-X table offset is defined by the hardware spec to 32bits, so we +simply use a cast rather than changing data structure types. This +scenario is purely theoretically, typically the MSI-X table is located +at the front of the BAR. + +Reported-by: Laszlo Ersek +Reviewed-by: Laszlo Ersek +Signed-off-by: Alex Williamson +--- + +Brew for series including 9 & 10: + +http://brewweb.devel.redhat.com/brew/taskinfo?taskID=9082147 + + hw/misc/vfio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index cbc9d8a..e6f96db 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -2634,7 +2634,7 @@ static void vfio_map_bar(VFIODevice *vdev, int nr) + if (vdev->msix && vdev->msix->table_bar == nr) { + uint64_t start; + +- start = TARGET_PAGE_ALIGN(vdev->msix->table_offset + ++ start = TARGET_PAGE_ALIGN((uint64_t)vdev->msix->table_offset + + (vdev->msix->entries * PCI_MSIX_ENTRY_SIZE)); + + size = start < bar->size ? bar->size - start : 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Handle-host-oversight.patch b/SOURCES/kvm-vfio-pci-Handle-host-oversight.patch new file mode 100644 index 0000000..85b2469 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Handle-host-oversight.patch @@ -0,0 +1,64 @@ +From 9f8e26c9d8485647072b2cbe7848b8d0054597c6 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:31 +0200 +Subject: [PATCH 11/27] vfio/pci: Handle host oversight + +RH-Author: Alex Williamson +Message-id: <20170929214531.16765.45212.stgit@gimli.home> +Patchwork-id: 76769 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 11/16] vfio/pci: Handle host oversight +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Eric Auger + +Upstream: 4a946268504e72fe0c547b9dda97adbe277a585f + +In case the end-user calls qemu with -vfio-pci option without passing +either sysfsdev or host property value, the device is interpreted as +0000:00:00.0. Let's create a specific error message to guide the end-user. + +Signed-off-by: Eric Auger +Reviewed-by: Markus Armbruster +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 0af8613..a95bbaf 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3864,6 +3864,13 @@ static int vfio_initfn(PCIDevice *pdev) + } + + if (!vdev->vbasedev.sysfsdev) { ++ if (!(~vdev->host.domain || ~vdev->host.bus || ++ ~vdev->host.slot || ~vdev->host.function)) { ++ error_report("No provided host device - " ++ "Use -vfio-pci,host=DDDD:BB:DD.F " ++ "or -vfio-pci,sysfsdev=PATH_TO_DEVICE"); ++ return -EINVAL; ++ } + vdev->vbasedev.sysfsdev = + g_strdup_printf("/sys/bus/pci/devices/%04x:%02x:%02x.%01x", + vdev->host.domain, vdev->host.bus, +@@ -4062,6 +4069,12 @@ post_reset: + + static void vfio_instance_init(Object *obj) + { ++ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, PCI_DEVICE(obj)); ++ ++ vdev->host.domain = ~0U; ++ vdev->host.bus = ~0U; ++ vdev->host.slot = ~0U; ++ vdev->host.function = ~0U; + } + + static Property vfio_pci_dev_properties[] = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Implement-PCI-hot-reset.patch b/SOURCES/kvm-vfio-pci-Implement-PCI-hot-reset.patch new file mode 100644 index 0000000..9cdf5ee --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Implement-PCI-hot-reset.patch @@ -0,0 +1,444 @@ +From 8ea5e0ba0b1ba054d71bb10f8c45c167dd3d7792 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 17:31:11 +0100 +Subject: [PATCH 19/25] vfio-pci: Implement PCI hot reset + +RH-Author: Alex Williamson +Message-id: <20131105173110.19372.22420.stgit@bling.home> +Patchwork-id: 55440 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] vfio-pci: Implement PCI hot reset +Bugzilla: 1025472 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1025472 +Upstream commit: f16f39c3fc973c5d7cbc2224eefb4ef5eb1e64ff + +Now that VFIO has a PCI hot reset interface, take advantage of it. +There are two modes that we need to consider. The first is when only +one device within the set of devices affected is actually assigned to +the guest. In this case the other devices are are just held by VFIO +for isolation and we can pretend they're not there, doing an entire +bus reset whenever the device reset callback is triggered. Supporting +this case separately allows us to do the best reset we can do of the +device even if the device is hotplugged. + +The second mode is when multiple affected devices are all exposed to +the guest. In this case we can only do a hot reset when the entire +system is being reset. However, this also allows us to track which +individual devices are affected by a reset and only do them once. + +We split our reset function into pre- and post-reset helper functions +prioritize the types of device resets available to us, and create +separate _one vs _multi reset interfaces to handle the distinct cases +above. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 338 ++++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 300 insertions(+), 38 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 338 +++++++++++++++++++++++++++++++++++++++++++++++++------- + 1 files changed, 300 insertions(+), 38 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 6178221..331ae5f 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -188,6 +188,7 @@ typedef struct VFIODevice { + bool pci_aer; + bool has_flr; + bool has_pm_reset; ++ bool needs_reset; + } VFIODevice; + + typedef struct VFIOGroup { +@@ -2759,6 +2760,279 @@ static int vfio_add_capabilities(VFIODevice *vdev) + return vfio_add_std_cap(vdev, pdev->config[PCI_CAPABILITY_LIST]); + } + ++static void vfio_pci_pre_reset(VFIODevice *vdev) ++{ ++ PCIDevice *pdev = &vdev->pdev; ++ uint16_t cmd; ++ ++ vfio_disable_interrupts(vdev); ++ ++ /* Make sure the device is in D0 */ ++ if (vdev->pm_cap) { ++ uint16_t pmcsr; ++ uint8_t state; ++ ++ pmcsr = vfio_pci_read_config(pdev, vdev->pm_cap + PCI_PM_CTRL, 2); ++ state = pmcsr & PCI_PM_CTRL_STATE_MASK; ++ if (state) { ++ pmcsr &= ~PCI_PM_CTRL_STATE_MASK; ++ vfio_pci_write_config(pdev, vdev->pm_cap + PCI_PM_CTRL, pmcsr, 2); ++ /* vfio handles the necessary delay here */ ++ pmcsr = vfio_pci_read_config(pdev, vdev->pm_cap + PCI_PM_CTRL, 2); ++ state = pmcsr & PCI_PM_CTRL_STATE_MASK; ++ if (state) { ++ error_report("vfio: Unable to power on device, stuck in D%d\n", ++ state); ++ } ++ } ++ } ++ ++ /* ++ * Stop any ongoing DMA by disconecting I/O, MMIO, and bus master. ++ * Also put INTx Disable in known state. ++ */ ++ cmd = vfio_pci_read_config(pdev, PCI_COMMAND, 2); ++ cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | ++ PCI_COMMAND_INTX_DISABLE); ++ vfio_pci_write_config(pdev, PCI_COMMAND, cmd, 2); ++} ++ ++static void vfio_pci_post_reset(VFIODevice *vdev) ++{ ++ vfio_enable_intx(vdev); ++} ++ ++static bool vfio_pci_host_match(PCIHostDeviceAddress *host1, ++ PCIHostDeviceAddress *host2) ++{ ++ return (host1->domain == host2->domain && host1->bus == host2->bus && ++ host1->slot == host2->slot && host1->function == host2->function); ++} ++ ++static int vfio_pci_hot_reset(VFIODevice *vdev, bool single) ++{ ++ VFIOGroup *group; ++ struct vfio_pci_hot_reset_info *info; ++ struct vfio_pci_dependent_device *devices; ++ struct vfio_pci_hot_reset *reset; ++ int32_t *fds; ++ int ret, i, count; ++ bool multi = false; ++ ++ DPRINTF("%s(%04x:%02x:%02x.%x) %s\n", __func__, vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function, ++ single ? "one" : "multi"); ++ ++ vfio_pci_pre_reset(vdev); ++ vdev->needs_reset = false; ++ ++ info = g_malloc0(sizeof(*info)); ++ info->argsz = sizeof(*info); ++ ++ ret = ioctl(vdev->fd, VFIO_DEVICE_GET_PCI_HOT_RESET_INFO, info); ++ if (ret && errno != ENOSPC) { ++ ret = -errno; ++ if (!vdev->has_pm_reset) { ++ error_report("vfio: Cannot reset device %04x:%02x:%02x.%x, " ++ "no available reset mechanism.", vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function); ++ } ++ goto out_single; ++ } ++ ++ count = info->count; ++ info = g_realloc(info, sizeof(*info) + (count * sizeof(*devices))); ++ info->argsz = sizeof(*info) + (count * sizeof(*devices)); ++ devices = &info->devices[0]; ++ ++ ret = ioctl(vdev->fd, VFIO_DEVICE_GET_PCI_HOT_RESET_INFO, info); ++ if (ret) { ++ ret = -errno; ++ error_report("vfio: hot reset info failed: %m"); ++ goto out_single; ++ } ++ ++ DPRINTF("%04x:%02x:%02x.%x: hot reset dependent devices:\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ ++ /* Verify that we have all the groups required */ ++ for (i = 0; i < info->count; i++) { ++ PCIHostDeviceAddress host; ++ VFIODevice *tmp; ++ ++ host.domain = devices[i].segment; ++ host.bus = devices[i].bus; ++ host.slot = PCI_SLOT(devices[i].devfn); ++ host.function = PCI_FUNC(devices[i].devfn); ++ ++ DPRINTF("\t%04x:%02x:%02x.%x group %d\n", host.domain, ++ host.bus, host.slot, host.function, devices[i].group_id); ++ ++ if (vfio_pci_host_match(&host, &vdev->host)) { ++ continue; ++ } ++ ++ QLIST_FOREACH(group, &group_list, next) { ++ if (group->groupid == devices[i].group_id) { ++ break; ++ } ++ } ++ ++ if (!group) { ++ if (!vdev->has_pm_reset) { ++ error_report("vfio: Cannot reset device %04x:%02x:%02x.%x, " ++ "depends on group %d which is not owned.", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function, devices[i].group_id); ++ } ++ ret = -EPERM; ++ goto out; ++ } ++ ++ /* Prep dependent devices for reset and clear our marker. */ ++ QLIST_FOREACH(tmp, &group->device_list, next) { ++ if (vfio_pci_host_match(&host, &tmp->host)) { ++ if (single) { ++ DPRINTF("vfio: found another in-use device " ++ "%04x:%02x:%02x.%x\n", host.domain, host.bus, ++ host.slot, host.function); ++ ret = -EINVAL; ++ goto out_single; ++ } ++ vfio_pci_pre_reset(tmp); ++ tmp->needs_reset = false; ++ multi = true; ++ break; ++ } ++ } ++ } ++ ++ if (!single && !multi) { ++ DPRINTF("vfio: No other in-use devices for multi hot reset\n"); ++ ret = -EINVAL; ++ goto out_single; ++ } ++ ++ /* Determine how many group fds need to be passed */ ++ count = 0; ++ QLIST_FOREACH(group, &group_list, next) { ++ for (i = 0; i < info->count; i++) { ++ if (group->groupid == devices[i].group_id) { ++ count++; ++ break; ++ } ++ } ++ } ++ ++ reset = g_malloc0(sizeof(*reset) + (count * sizeof(*fds))); ++ reset->argsz = sizeof(*reset) + (count * sizeof(*fds)); ++ fds = &reset->group_fds[0]; ++ ++ /* Fill in group fds */ ++ QLIST_FOREACH(group, &group_list, next) { ++ for (i = 0; i < info->count; i++) { ++ if (group->groupid == devices[i].group_id) { ++ fds[reset->count++] = group->fd; ++ break; ++ } ++ } ++ } ++ ++ /* Bus reset! */ ++ ret = ioctl(vdev->fd, VFIO_DEVICE_PCI_HOT_RESET, reset); ++ g_free(reset); ++ ++ DPRINTF("%04x:%02x:%02x.%x hot reset: %s\n", vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function, ++ ret ? "%m" : "Success"); ++ ++out: ++ /* Re-enable INTx on affected devices */ ++ for (i = 0; i < info->count; i++) { ++ PCIHostDeviceAddress host; ++ VFIODevice *tmp; ++ ++ host.domain = devices[i].segment; ++ host.bus = devices[i].bus; ++ host.slot = PCI_SLOT(devices[i].devfn); ++ host.function = PCI_FUNC(devices[i].devfn); ++ ++ if (vfio_pci_host_match(&host, &vdev->host)) { ++ continue; ++ } ++ ++ QLIST_FOREACH(group, &group_list, next) { ++ if (group->groupid == devices[i].group_id) { ++ break; ++ } ++ } ++ ++ if (!group) { ++ break; ++ } ++ ++ QLIST_FOREACH(tmp, &group->device_list, next) { ++ if (vfio_pci_host_match(&host, &tmp->host)) { ++ vfio_pci_post_reset(tmp); ++ break; ++ } ++ } ++ } ++out_single: ++ vfio_pci_post_reset(vdev); ++ g_free(info); ++ ++ return ret; ++} ++ ++/* ++ * We want to differentiate hot reset of mulitple in-use devices vs hot reset ++ * of a single in-use device. VFIO_DEVICE_RESET will already handle the case ++ * of doing hot resets when there is only a single device per bus. The in-use ++ * here refers to how many VFIODevices are affected. A hot reset that affects ++ * multiple devices, but only a single in-use device, means that we can call ++ * it from our bus ->reset() callback since the extent is effectively a single ++ * device. This allows us to make use of it in the hotplug path. When there ++ * are multiple in-use devices, we can only trigger the hot reset during a ++ * system reset and thus from our reset handler. We separate _one vs _multi ++ * here so that we don't overlap and do a double reset on the system reset ++ * path where both our reset handler and ->reset() callback are used. Calling ++ * _one() will only do a hot reset for the one in-use devices case, calling ++ * _multi() will do nothing if a _one() would have been sufficient. ++ */ ++static int vfio_pci_hot_reset_one(VFIODevice *vdev) ++{ ++ return vfio_pci_hot_reset(vdev, true); ++} ++ ++static int vfio_pci_hot_reset_multi(VFIODevice *vdev) ++{ ++ return vfio_pci_hot_reset(vdev, false); ++} ++ ++static void vfio_pci_reset_handler(void *opaque) ++{ ++ VFIOGroup *group; ++ VFIODevice *vdev; ++ ++ QLIST_FOREACH(group, &group_list, next) { ++ QLIST_FOREACH(vdev, &group->device_list, next) { ++ if (!vdev->reset_works || (!vdev->has_flr && vdev->has_pm_reset)) { ++ vdev->needs_reset = true; ++ } ++ } ++ } ++ ++ QLIST_FOREACH(group, &group_list, next) { ++ QLIST_FOREACH(vdev, &group->device_list, next) { ++ if (vdev->needs_reset) { ++ vfio_pci_hot_reset_multi(vdev); ++ } ++ } ++ } ++} ++ + static int vfio_connect_container(VFIOGroup *group) + { + VFIOContainer *container; +@@ -2901,6 +3175,10 @@ static VFIOGroup *vfio_get_group(int groupid) + return NULL; + } + ++ if (QLIST_EMPTY(&group_list)) { ++ qemu_register_reset(vfio_pci_reset_handler, NULL); ++ } ++ + QLIST_INSERT_HEAD(&group_list, group, next); + + return group; +@@ -2917,6 +3195,10 @@ static void vfio_put_group(VFIOGroup *group) + DPRINTF("vfio_put_group: close group->fd\n"); + close(group->fd); + g_free(group); ++ ++ if (QLIST_EMPTY(&group_list)) { ++ qemu_unregister_reset(vfio_pci_reset_handler, NULL); ++ } + } + + static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) +@@ -2955,9 +3237,6 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) + } + + vdev->reset_works = !!(dev_info.flags & VFIO_DEVICE_FLAGS_RESET); +- if (!vdev->reset_works) { +- error_report("Warning, device %s does not support reset", name); +- } + + if (dev_info.num_regions < VFIO_PCI_CONFIG_REGION_INDEX + 1) { + error_report("vfio: unexpected number of io regions %u", +@@ -3363,51 +3642,34 @@ static void vfio_pci_reset(DeviceState *dev) + { + PCIDevice *pdev = DO_UPCAST(PCIDevice, qdev, dev); + VFIODevice *vdev = DO_UPCAST(VFIODevice, pdev, pdev); +- uint16_t cmd; + + DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, + vdev->host.bus, vdev->host.slot, vdev->host.function); + +- vfio_disable_interrupts(vdev); +- +- /* Make sure the device is in D0 */ +- if (vdev->pm_cap) { +- uint16_t pmcsr; +- uint8_t state; ++ vfio_pci_pre_reset(vdev); + +- pmcsr = vfio_pci_read_config(pdev, vdev->pm_cap + PCI_PM_CTRL, 2); +- state = pmcsr & PCI_PM_CTRL_STATE_MASK; +- if (state) { +- pmcsr &= ~PCI_PM_CTRL_STATE_MASK; +- vfio_pci_write_config(pdev, vdev->pm_cap + PCI_PM_CTRL, pmcsr, 2); +- /* vfio handles the necessary delay here */ +- pmcsr = vfio_pci_read_config(pdev, vdev->pm_cap + PCI_PM_CTRL, 2); +- state = pmcsr & PCI_PM_CTRL_STATE_MASK; +- if (state) { +- error_report("vfio: Unable to power on device, stuck in D%d\n", +- state); +- } +- } ++ if (vdev->reset_works && (vdev->has_flr || !vdev->has_pm_reset) && ++ !ioctl(vdev->fd, VFIO_DEVICE_RESET)) { ++ DPRINTF("%04x:%02x:%02x.%x FLR/VFIO_DEVICE_RESET\n", vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function); ++ goto post_reset; + } + +- /* +- * Stop any ongoing DMA by disconecting I/O, MMIO, and bus master. +- * Also put INTx Disable in known state. +- */ +- cmd = vfio_pci_read_config(pdev, PCI_COMMAND, 2); +- cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | +- PCI_COMMAND_INTX_DISABLE); +- vfio_pci_write_config(pdev, PCI_COMMAND, cmd, 2); ++ /* See if we can do our own bus reset */ ++ if (!vfio_pci_hot_reset_one(vdev)) { ++ goto post_reset; ++ } + +- if (vdev->reset_works) { +- if (ioctl(vdev->fd, VFIO_DEVICE_RESET)) { +- error_report("vfio: Error unable to reset physical device " +- "(%04x:%02x:%02x.%x): %m", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); +- } ++ /* If nothing else works and the device supports PM reset, use it */ ++ if (vdev->reset_works && vdev->has_pm_reset && ++ !ioctl(vdev->fd, VFIO_DEVICE_RESET)) { ++ DPRINTF("%04x:%02x:%02x.%x PCI PM Reset\n", vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function); ++ goto post_reset; + } + +- vfio_enable_intx(vdev); ++post_reset: ++ vfio_pci_post_reset(vdev); + } + + static Property vfio_pci_dev_properties[] = { +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Lazy-PBA-emulation.patch b/SOURCES/kvm-vfio-pci-Lazy-PBA-emulation.patch new file mode 100644 index 0000000..a009b88 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Lazy-PBA-emulation.patch @@ -0,0 +1,163 @@ +From 1cdac7e143db48d28605da1feb85a229197d9692 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Mon, 18 Mar 2019 19:41:40 +0100 +Subject: [PATCH 2/3] vfio/pci: Lazy PBA emulation + +RH-Author: Alex Williamson +Message-id: <155293738623.17152.7817154338901863813.stgit@gimli.home> +Patchwork-id: 84905 +O-Subject: [RHEL7.7 qemu-kvm PATCH] vfio/pci: Lazy PBA emulation +Bugzilla: 1459077 +RH-Acked-by: Auger Eric +RH-Acked-by: Laurent Vivier +RH-Acked-by: Cornelia Huck + +Bugzilla: 1459077 +Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=20652144 + +Notes: Intel's Omnipath card seems to depend on direct access to the + MSI-X PBA, when it's emulated the driver in the guest will + report: + + hfi1_0: Interrupt registers not properly mapped by VMM + + The patch here disables the PBA memory region except when + vectors are masked, which is essentially never, and therefore + provides that direct access. Tested against an "Omni-Path + HFI Silicon 100 Series" card as well as regression tested + against a Intel 82576 PF and VF, both of which also use MSI-X. + +The PCI spec recommends devices use additional alignment for MSI-X +data structures to allow software to map them to separate processor +pages. One advantage of doing this is that we can emulate those data +structures without a significant performance impact to the operation +of the device. Some devices fail to implement that suggestion and +assigned device performance suffers. + +One such case of this is a Mellanox MT27500 series, ConnectX-3 VF, +where the MSI-X vector table and PBA are aligned on separate 4K +pages. If PBA emulation is enabled, performance suffers. It's not +clear how much value we get from PBA emulation, but the solution here +is to only lazily enable the emulated PBA when a masked MSI-X vector +fires. We then attempt to more aggresively disable the PBA memory +region any time a vector is unmasked. The expectation is then that +a typical VM will run entirely with PBA emulation disabled, and only +when used is that emulation re-enabled. + +Reported-by: Shyam Kaushik +Tested-by: Shyam Kaushik +Signed-off-by: Alex Williamson +(cherry picked from 95239e162518dc6577164be3d9a789aba7f591a3) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 40 ++++++++++++++++++++++++++++++++++++++++ + trace-events | 2 ++ + 2 files changed, 42 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index f7360bf..781acd9 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -190,6 +190,7 @@ typedef struct VFIOMSIXInfo { + uint32_t pba_offset; + MemoryRegion mmap_mem; + void *mmap; ++ unsigned long *pending; + } VFIOMSIXInfo; + + typedef struct VFIODeviceOps VFIODeviceOps; +@@ -691,6 +692,13 @@ static void vfio_msi_interrupt(void *opaque) + #endif + + if (vdev->interrupt == VFIO_INT_MSIX) { ++ /* A masked vector firing needs to use the PBA, enable it */ ++ if (msix_is_masked(&vdev->pdev, nr)) { ++ set_bit(nr, vdev->msix->pending); ++ memory_region_set_enabled(&vdev->pdev.msix_pba_mmio, true); ++ trace_vfio_msix_pba_enable(vdev->vbasedev.name); ++ } ++ + msix_notify(&vdev->pdev, nr); + } else if (vdev->interrupt == VFIO_INT_MSI) { + msi_notify(&vdev->pdev, nr); +@@ -866,6 +874,14 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, + } + } + ++ /* Disable PBA emulation when nothing more is pending. */ ++ clear_bit(nr, vdev->msix->pending); ++ if (find_first_bit(vdev->msix->pending, ++ vdev->nr_vectors) == vdev->nr_vectors) { ++ memory_region_set_enabled(&vdev->pdev.msix_pba_mmio, false); ++ trace_vfio_msix_pba_disable(vdev->vbasedev.name); ++ } ++ + return 0; + } + +@@ -1070,6 +1086,9 @@ static void vfio_disable_msix(VFIOPCIDevice *vdev) + + vfio_disable_msi_common(vdev); + ++ memset(vdev->msix->pending, 0, ++ BITS_TO_LONGS(vdev->msix->entries) * sizeof(unsigned long)); ++ + DPRINTF("%s(%s)\n", __func__, vdev->vbasedev.name); + } + +@@ -2561,6 +2580,8 @@ static int vfio_setup_msix(VFIOPCIDevice *vdev, int pos) + { + int ret; + ++ vdev->msix->pending = g_malloc0(BITS_TO_LONGS(vdev->msix->entries) * ++ sizeof(unsigned long)); + ret = msix_init(&vdev->pdev, vdev->msix->entries, + vdev->bars[vdev->msix->table_bar].region.mem, + vdev->msix->table_bar, vdev->msix->table_offset, +@@ -2574,6 +2595,24 @@ static int vfio_setup_msix(VFIOPCIDevice *vdev, int pos) + return ret; + } + ++ /* ++ * The PCI spec suggests that devices provide additional alignment for ++ * MSI-X structures and avoid overlapping non-MSI-X related registers. ++ * For an assigned device, this hopefully means that emulation of MSI-X ++ * structures does not affect the performance of the device. If devices ++ * fail to provide that alignment, a significant performance penalty may ++ * result, for instance Mellanox MT27500 VFs: ++ * http://www.spinics.net/lists/kvm/msg125881.html ++ * ++ * The PBA is simply not that important for such a serious regression and ++ * most drivers do not appear to look at it. The solution for this is to ++ * disable the PBA MemoryRegion unless it's being used. We disable it ++ * here and only enable it if a masked vector fires through QEMU. As the ++ * vector-use notifier is called, which occurs on unmask, we test whether ++ * PBA emulation is needed and again disable if not. ++ */ ++ memory_region_set_enabled(&vdev->pdev.msix_pba_mmio, false); ++ + return 0; + } + +@@ -2585,6 +2624,7 @@ static void vfio_teardown_msi(VFIOPCIDevice *vdev) + msix_uninit(&vdev->pdev, + vdev->bars[vdev->msix->table_bar].region.mem, + vdev->bars[vdev->msix->pba_bar].region.mem); ++ g_free(vdev->msix->pending); + } + } + +diff --git a/trace-events b/trace-events +index 7b7aad1..0fb2745 100644 +--- a/trace-events ++++ b/trace-events +@@ -1166,3 +1166,5 @@ vfio_region_finalize(const char *name, int index) "Device %s, region %d" + vfio_region_mmaps_set_enabled(const char *name, bool enabled) "Region %s mmaps enabled: %d" + vfio_region_sparse_mmap_header(const char *name, int index, int nr_areas) "Device %s region %d: %d sparse mmap entries" + vfio_region_sparse_mmap_entry(int i, unsigned long start, unsigned long end) "sparse entry %d [0x%lx - 0x%lx]" ++vfio_msix_pba_disable(const char *name) " (%s)" ++vfio_msix_pba_enable(const char *name) " (%s)" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-pci-Lazy-PCI-option-ROM-loading.patch b/SOURCES/kvm-vfio-pci-Lazy-PCI-option-ROM-loading.patch new file mode 100644 index 0000000..5cac9b3 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Lazy-PCI-option-ROM-loading.patch @@ -0,0 +1,282 @@ +From f3b05560b20866cadb604f0a5a6f4a7698d2e07b Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:37:35 +0100 +Subject: [PATCH 14/25] vfio-pci: Lazy PCI option ROM loading + +RH-Author: Alex Williamson +Message-id: <20131105153734.16057.77668.stgit@bling.home> +Patchwork-id: 55423 +O-Subject: [RHEL7 qemu-kvm PATCH 2/5] vfio-pci: Lazy PCI option ROM loading +Bugzilla: 1026550 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1026550 +Upstream commit: 6f864e6ec8812d5a5525a7861ca599c6bcabdebe + +During vfio-pci initfn, the device is not always in a state where the +option ROM can be read. In the case of graphics cards, there's often +no per function reset, which means we have host driver state affecting +whether the option ROM is usable. Ideally we want to move reading the +option ROM past any co-assigned device resets to the point where the +guest first tries to read the ROM itself. + +To accomplish this, we switch the memory region for the option rom to +an I/O region rather than a memory mapped region. This has the side +benefit that we don't waste KVM memory slots for a BAR where we don't +care about performance. This also allows us to delay loading the ROM +from the device until the first read by the guest. We then use the +PCI config space size of the ROM BAR when setting up the BAR through +QEMU PCI. + +Another benefit of this approach is that previously when a user set +the ROM to a file using the romfile= option, we still probed VFIO for +the parameters of the ROM, which can result in dmesg errors about an +invalid ROM. We now only probe VFIO to get the ROM contents if the +guest actually tries to read the ROM. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 184 +++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 122 insertions(+), 62 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 184 +++++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 122 insertions(+), 62 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 8e69182..8d84891 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -166,6 +166,7 @@ typedef struct VFIODevice { + off_t config_offset; /* Offset of config space region within device fd */ + unsigned int rom_size; + off_t rom_offset; /* Offset of ROM region within device fd */ ++ void *rom; + int msi_cap_size; + VFIOMSIVector *msi_vectors; + VFIOMSIXInfo *msix; +@@ -1058,6 +1059,125 @@ static const MemoryRegionOps vfio_bar_ops = { + .endianness = DEVICE_LITTLE_ENDIAN, + }; + ++static void vfio_pci_load_rom(VFIODevice *vdev) ++{ ++ struct vfio_region_info reg_info = { ++ .argsz = sizeof(reg_info), ++ .index = VFIO_PCI_ROM_REGION_INDEX ++ }; ++ uint64_t size; ++ off_t off = 0; ++ size_t bytes; ++ ++ if (ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info)) { ++ error_report("vfio: Error getting ROM info: %m"); ++ return; ++ } ++ ++ DPRINTF("Device %04x:%02x:%02x.%x ROM:\n", vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function); ++ DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", ++ (unsigned long)reg_info.size, (unsigned long)reg_info.offset, ++ (unsigned long)reg_info.flags); ++ ++ vdev->rom_size = size = reg_info.size; ++ vdev->rom_offset = reg_info.offset; ++ ++ if (!vdev->rom_size) { ++ return; ++ } ++ ++ vdev->rom = g_malloc(size); ++ memset(vdev->rom, 0xff, size); ++ ++ while (size) { ++ bytes = pread(vdev->fd, vdev->rom + off, size, vdev->rom_offset + off); ++ if (bytes == 0) { ++ break; ++ } else if (bytes > 0) { ++ off += bytes; ++ size -= bytes; ++ } else { ++ if (errno == EINTR || errno == EAGAIN) { ++ continue; ++ } ++ error_report("vfio: Error reading device ROM: %m"); ++ break; ++ } ++ } ++} ++ ++static uint64_t vfio_rom_read(void *opaque, hwaddr addr, unsigned size) ++{ ++ VFIODevice *vdev = opaque; ++ uint64_t val = ((uint64_t)1 << (size * 8)) - 1; ++ ++ /* Load the ROM lazily when the guest tries to read it */ ++ if (unlikely(!vdev->rom)) { ++ vfio_pci_load_rom(vdev); ++ } ++ ++ memcpy(&val, vdev->rom + addr, ++ (addr < vdev->rom_size) ? MIN(size, vdev->rom_size - addr) : 0); ++ ++ DPRINTF("%s(%04x:%02x:%02x.%x, 0x%"HWADDR_PRIx", 0x%x) = 0x%"PRIx64"\n", ++ __func__, vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function, addr, size, val); ++ ++ return val; ++} ++ ++static const MemoryRegionOps vfio_rom_ops = { ++ .read = vfio_rom_read, ++ .endianness = DEVICE_LITTLE_ENDIAN, ++}; ++ ++static void vfio_pci_size_rom(VFIODevice *vdev) ++{ ++ uint32_t orig, size = (uint32_t)PCI_ROM_ADDRESS_MASK; ++ off_t offset = vdev->config_offset + PCI_ROM_ADDRESS; ++ char name[32]; ++ ++ if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { ++ return; ++ } ++ ++ /* ++ * Use the same size ROM BAR as the physical device. The contents ++ * will get filled in later when the guest tries to read it. ++ */ ++ if (pread(vdev->fd, &orig, 4, offset) != 4 || ++ pwrite(vdev->fd, &size, 4, offset) != 4 || ++ pread(vdev->fd, &size, 4, offset) != 4 || ++ pwrite(vdev->fd, &orig, 4, offset) != 4) { ++ error_report("%s(%04x:%02x:%02x.%x) failed: %m", ++ __func__, vdev->host.domain, vdev->host.bus, ++ vdev->host.slot, vdev->host.function); ++ return; ++ } ++ ++ size = ~(size & PCI_ROM_ADDRESS_MASK) + 1; ++ ++ if (!size) { ++ return; ++ } ++ ++ DPRINTF("%04x:%02x:%02x.%x ROM size 0x%x\n", vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function, size); ++ ++ snprintf(name, sizeof(name), "vfio[%04x:%02x:%02x.%x].rom", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ ++ memory_region_init_io(&vdev->pdev.rom, ++ &vfio_rom_ops, vdev, name, size); ++ ++ pci_register_bar(&vdev->pdev, PCI_ROM_SLOT, ++ PCI_BASE_ADDRESS_SPACE_MEMORY, &vdev->pdev.rom); ++ ++ vdev->pdev.has_rom = true; ++} ++ + static void vfio_vga_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) + { +@@ -2633,51 +2753,6 @@ static int vfio_add_capabilities(VFIODevice *vdev) + return vfio_add_std_cap(vdev, pdev->config[PCI_CAPABILITY_LIST]); + } + +-static int vfio_load_rom(VFIODevice *vdev) +-{ +- uint64_t size = vdev->rom_size; +- char name[32]; +- off_t off = 0, voff = vdev->rom_offset; +- ssize_t bytes; +- void *ptr; +- +- /* If loading ROM from file, pci handles it */ +- if (vdev->pdev.romfile || !vdev->pdev.rom_bar || !size) { +- return 0; +- } +- +- DPRINTF("%s(%04x:%02x:%02x.%x)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); +- +- snprintf(name, sizeof(name), "vfio[%04x:%02x:%02x.%x].rom", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); +- memory_region_init_ram(&vdev->pdev.rom, name, size); +- ptr = memory_region_get_ram_ptr(&vdev->pdev.rom); +- memset(ptr, 0xff, size); +- +- while (size) { +- bytes = pread(vdev->fd, ptr + off, size, voff + off); +- if (bytes == 0) { +- break; /* expect that we could get back less than the ROM BAR */ +- } else if (bytes > 0) { +- off += bytes; +- size -= bytes; +- } else { +- if (errno == EINTR || errno == EAGAIN) { +- continue; +- } +- error_report("vfio: Error reading device ROM: %m"); +- memory_region_destroy(&vdev->pdev.rom); +- return -errno; +- } +- } +- +- pci_register_bar(&vdev->pdev, PCI_ROM_SLOT, 0, &vdev->pdev.rom); +- vdev->pdev.has_rom = true; +- return 0; +-} +- + static int vfio_connect_container(VFIOGroup *group) + { + VFIOContainer *container; +@@ -2911,22 +2986,6 @@ static int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vdev) + QLIST_INIT(&vdev->bars[i].quirks); + } + +- reg_info.index = VFIO_PCI_ROM_REGION_INDEX; +- +- ret = ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); +- if (ret) { +- error_report("vfio: Error getting ROM info: %m"); +- goto error; +- } +- +- DPRINTF("Device %s ROM:\n", name); +- DPRINTF(" size: 0x%lx, offset: 0x%lx, flags: 0x%lx\n", +- (unsigned long)reg_info.size, (unsigned long)reg_info.offset, +- (unsigned long)reg_info.flags); +- +- vdev->rom_size = reg_info.size; +- vdev->rom_offset = reg_info.offset; +- + reg_info.index = VFIO_PCI_CONFIG_REGION_INDEX; + + ret = ioctl(vdev->fd, VFIO_DEVICE_GET_REGION_INFO, ®_info); +@@ -3224,7 +3283,7 @@ static int vfio_initfn(PCIDevice *pdev) + memset(&vdev->pdev.config[PCI_BASE_ADDRESS_0], 0, 24); + memset(&vdev->pdev.config[PCI_ROM_ADDRESS], 0, 4); + +- vfio_load_rom(vdev); ++ vfio_pci_size_rom(vdev); + + ret = vfio_early_setup_msix(vdev); + if (ret) { +@@ -3289,6 +3348,7 @@ static void vfio_exitfn(PCIDevice *pdev) + vfio_teardown_msi(vdev); + vfio_unmap_bars(vdev); + g_free(vdev->emulated_config_bits); ++ g_free(vdev->rom); + vfio_put_device(vdev); + vfio_put_group(group); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Make-use-of-new-KVM-VFIO-device.patch b/SOURCES/kvm-vfio-pci-Make-use-of-new-KVM-VFIO-device.patch new file mode 100644 index 0000000..e041cb0 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Make-use-of-new-KVM-VFIO-device.patch @@ -0,0 +1,131 @@ +From 3f6f409e0c66e7f67d8830ffce9576ca306853ff Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 17:51:11 +0100 +Subject: [PATCH 21/25] vfio-pci: Make use of new KVM-VFIO device + +RH-Author: Alex Williamson +Message-id: <20131105175111.19705.95280.stgit@bling.home> +Patchwork-id: 55443 +O-Subject: [RHEL7 qemu-kvm PATCH 2/2] vfio-pci: Make use of new KVM-VFIO device +Bugzilla: 1025474 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1025474 +Upstream: Posted - http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg00091.html + +Add and remove groups from the KVM virtual VFIO device as we make +use of them. This allows KVM to optimize for performance and +correctness based on properties of the group. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 65 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 65 insertions(+), 0 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 331ae5f..b7f213b 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -208,6 +208,15 @@ static QLIST_HEAD(, VFIOContainer) + static QLIST_HEAD(, VFIOGroup) + group_list = QLIST_HEAD_INITIALIZER(group_list); + ++/* ++ * We have a single VFIO pseudo device per KVM VM. Once created it lives ++ * for the life of the VM. Closing the file descriptor only drops our ++ * reference to it and the device's reference to kvm. Therefore once ++ * initialized, this file descriptor is only released on QEMU exit and ++ * we'll re-use it should another vfio device be attached before then. ++ */ ++static int vfio_kvm_device_fd = -1; ++ + static void vfio_disable_interrupts(VFIODevice *vdev); + static uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len); + static void vfio_pci_write_config(PCIDevice *pdev, uint32_t addr, +@@ -3033,6 +3042,59 @@ static void vfio_pci_reset_handler(void *opaque) + } + } + ++static void vfio_kvm_device_add_group(VFIOGroup *group) ++{ ++#ifdef CONFIG_KVM ++ struct kvm_device_attr attr = { ++ .group = KVM_DEV_VFIO_GROUP, ++ .attr = KVM_DEV_VFIO_GROUP_ADD, ++ .addr = (uint64_t)(unsigned long)&group->fd, ++ }; ++ ++ if (!kvm_enabled()) { ++ return; ++ } ++ ++ if (vfio_kvm_device_fd < 0) { ++ struct kvm_create_device cd = { ++ .type = KVM_DEV_TYPE_VFIO, ++ }; ++ ++ if (kvm_vm_ioctl(kvm_state, KVM_CREATE_DEVICE, &cd)) { ++ DPRINTF("KVM_CREATE_DEVICE: %m\n"); ++ return; ++ } ++ ++ vfio_kvm_device_fd = cd.fd; ++ } ++ ++ if (ioctl(vfio_kvm_device_fd, KVM_SET_DEVICE_ATTR, &attr)) { ++ error_report("Failed to add group %d to KVM VFIO device: %m", ++ group->groupid); ++ } ++#endif ++} ++ ++static void vfio_kvm_device_del_group(VFIOGroup *group) ++{ ++#ifdef CONFIG_KVM ++ struct kvm_device_attr attr = { ++ .group = KVM_DEV_VFIO_GROUP, ++ .attr = KVM_DEV_VFIO_GROUP_DEL, ++ .addr = (uint64_t)(unsigned long)&group->fd, ++ }; ++ ++ if (vfio_kvm_device_fd < 0) { ++ return; ++ } ++ ++ if (ioctl(vfio_kvm_device_fd, KVM_SET_DEVICE_ATTR, &attr)) { ++ error_report("Failed to remove group %d to KVM VFIO device: %m", ++ group->groupid); ++ } ++#endif ++} ++ + static int vfio_connect_container(VFIOGroup *group) + { + VFIOContainer *container; +@@ -3181,6 +3243,8 @@ static VFIOGroup *vfio_get_group(int groupid) + + QLIST_INSERT_HEAD(&group_list, group, next); + ++ vfio_kvm_device_add_group(group); ++ + return group; + } + +@@ -3190,6 +3254,7 @@ static void vfio_put_group(VFIOGroup *group) + return; + } + ++ vfio_kvm_device_del_group(group); + vfio_disconnect_container(group); + QLIST_REMOVE(group, next); + DPRINTF("vfio_put_group: close group->fd\n"); +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-Release-all-MSI-X-vectors-when-disabled.patch b/SOURCES/kvm-vfio-pci-Release-all-MSI-X-vectors-when-disabled.patch new file mode 100644 index 0000000..8756cf4 --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Release-all-MSI-X-vectors-when-disabled.patch @@ -0,0 +1,67 @@ +From 4e1c9f340ef7820e28c55ad286a631cb9e63967a Mon Sep 17 00:00:00 2001 +Message-Id: <4e1c9f340ef7820e28c55ad286a631cb9e63967a.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Alex Williamson +Date: Mon, 9 Dec 2013 17:48:46 +0100 +Subject: [PATCH 06/16] vfio-pci: Release all MSI-X vectors when disabled + +RH-Author: Alex Williamson +Message-id: <20131209174830.21963.40720.stgit@bling.home> +Patchwork-id: 56091 +O-Subject: [RHEL7 qemu-kvm PATCH] vfio-pci: Release all MSI-X vectors when disabled +Bugzilla: 1029743 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Amos Kong + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1029743 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6696250 +Upstream: 3e40ba0faf0822fa78336fe6cd9d677ea9b14f1b + +We were relying on msix_unset_vector_notifiers() to release all the +vectors when we disable MSI-X, but this only happens when MSI-X is +still enabled on the device. Perform further cleanup by releasing +any remaining vectors listed as in-use after this call. This caused +a leak of IRQ routes on hotplug depending on how the guest OS prepared +the device for removal. + +Signed-off-by: Alex Williamson +Cc: qemu-stable@nongnu.org +--- + hw/misc/vfio.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +Signed-off-by: Michal Novotny +--- + hw/misc/vfio.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 5a6925c..250f96f 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -886,8 +886,20 @@ static void vfio_disable_msi_common(VFIODevice *vdev) + + static void vfio_disable_msix(VFIODevice *vdev) + { ++ int i; ++ + msix_unset_vector_notifiers(&vdev->pdev); + ++ /* ++ * MSI-X will only release vectors if MSI-X is still enabled on the ++ * device, check through the rest and release it ourselves if necessary. ++ */ ++ for (i = 0; i < vdev->nr_vectors; i++) { ++ if (vdev->msi_vectors[i].use) { ++ vfio_msix_vector_release(&vdev->pdev, i); ++ } ++ } ++ + if (vdev->nr_vectors) { + vfio_disable_irqindex(vdev, VFIO_PCI_MSIX_IRQ_INDEX); + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vfio-pci-Test-device-reset-capabilities.patch b/SOURCES/kvm-vfio-pci-Test-device-reset-capabilities.patch new file mode 100644 index 0000000..86c9d1e --- /dev/null +++ b/SOURCES/kvm-vfio-pci-Test-device-reset-capabilities.patch @@ -0,0 +1,116 @@ +From bd32da91efdbcccaeb7eb2ad06f3c87946fce903 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:37:29 +0100 +Subject: [PATCH 13/25] vfio-pci: Test device reset capabilities + +RH-Author: Alex Williamson +Message-id: <20131105153729.16057.85790.stgit@bling.home> +Patchwork-id: 55422 +O-Subject: [RHEL7 qemu-kvm PATCH 1/5] vfio-pci: Test device reset capabilities +Bugzilla: 1026550 +RH-Acked-by: Bandan Das +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin + +Bugzilla: 1026550 +Upstream commit: befe5176ef7a0004ba23517c97c804e292273635 + +Not all resets are created equal. PM reset is not very reliable, +especially for GPUs, so we might want to opt for a bus reset if a +standard reset will only do a D3hot->D0 transition. We can also +use this to tell if the standard reset will do a bus reset (if +neither has_pm_reset or has_flr is probed, but the device still +supports reset). + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 46 insertions(+), 0 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 286dad1..8e69182 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -185,6 +185,8 @@ typedef struct VFIODevice { + bool reset_works; + bool has_vga; + bool pci_aer; ++ bool has_flr; ++ bool has_pm_reset; + } VFIODevice; + + typedef struct VFIOGroup { +@@ -2508,6 +2510,42 @@ static int vfio_setup_pcie_cap(VFIODevice *vdev, int pos, uint8_t size) + return pos; + } + ++static void vfio_check_pcie_flr(VFIODevice *vdev, uint8_t pos) ++{ ++ uint32_t cap = pci_get_long(vdev->pdev.config + pos + PCI_EXP_DEVCAP); ++ ++ if (cap & PCI_EXP_DEVCAP_FLR) { ++ DPRINTF("%04x:%02x:%02x.%x Supports FLR via PCIe cap\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ vdev->has_flr = true; ++ } ++} ++ ++static void vfio_check_pm_reset(VFIODevice *vdev, uint8_t pos) ++{ ++ uint16_t csr = pci_get_word(vdev->pdev.config + pos + PCI_PM_CTRL); ++ ++ if (!(csr & PCI_PM_CTRL_NO_SOFT_RESET)) { ++ DPRINTF("%04x:%02x:%02x.%x Supports PM reset\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ vdev->has_pm_reset = true; ++ } ++} ++ ++static void vfio_check_af_flr(VFIODevice *vdev, uint8_t pos) ++{ ++ uint8_t cap = pci_get_byte(vdev->pdev.config + pos + PCI_AF_CAP); ++ ++ if ((cap & PCI_AF_CAP_TP) && (cap & PCI_AF_CAP_FLR)) { ++ DPRINTF("%04x:%02x:%02x.%x Supports FLR via AF cap\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ vdev->has_flr = true; ++ } ++} ++ + static int vfio_add_std_cap(VFIODevice *vdev, uint8_t pos) + { + PCIDevice *pdev = &vdev->pdev; +@@ -2552,13 +2590,21 @@ static int vfio_add_std_cap(VFIODevice *vdev, uint8_t pos) + ret = vfio_setup_msi(vdev, pos); + break; + case PCI_CAP_ID_EXP: ++ vfio_check_pcie_flr(vdev, pos); + ret = vfio_setup_pcie_cap(vdev, pos, size); + break; + case PCI_CAP_ID_MSIX: + ret = vfio_setup_msix(vdev, pos); + break; + case PCI_CAP_ID_PM: ++ vfio_check_pm_reset(vdev, pos); + vdev->pm_cap = pos; ++ ret = pci_add_capability(pdev, cap_id, pos, size); ++ break; ++ case PCI_CAP_ID_AF: ++ vfio_check_af_flr(vdev, pos); ++ ret = pci_add_capability(pdev, cap_id, pos, size); ++ break; + default: + ret = pci_add_capability(pdev, cap_id, pos, size); + break; +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-pci-VGA-quirk-update.patch b/SOURCES/kvm-vfio-pci-VGA-quirk-update.patch new file mode 100644 index 0000000..b1c4ecc --- /dev/null +++ b/SOURCES/kvm-vfio-pci-VGA-quirk-update.patch @@ -0,0 +1,947 @@ +From 7bbd16ac0463f162e4ca38e11876bdea519a0461 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Tue, 5 Nov 2013 15:30:34 +0100 +Subject: [PATCH 11/25] vfio-pci: VGA quirk update + +RH-Author: Alex Williamson +Message-id: <20131105153034.15749.72694.stgit@bling.home> +Patchwork-id: 55414 +O-Subject: [RHEL7 qemu-kvm PATCH v2 1/2] vfio-pci: VGA quirk update +Bugzilla: 1025477 +RH-Acked-by: Bandan Das +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Paolo Bonzini + +Bugzilla: 1025477 +Upstream commit: 39360f0b91d38790b5756d621ca9a7dd93ca8816 + +Turns out all the suspicions for AMD devices were correct, everywhere +we read a BAR address that the address matches the config space offset, +there's full access to PCI config space. Attempt to generalize some +helpers to allow quirks to easily be added for mirrors and windows. +Also fill in complete config space for AMD. + +Signed-off-by: Alex Williamson +--- + hw/misc/vfio.c | 657 +++++++++++++++++++++++++++----------------------------- + 1 file changed, 321 insertions(+), 336 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 657 +++++++++++++++++++++++++++----------------------------- + 1 files changed, 321 insertions(+), 336 deletions(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index a966c58..a072fd9 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -59,8 +59,23 @@ typedef struct VFIOQuirk { + MemoryRegion mem; + struct VFIODevice *vdev; + QLIST_ENTRY(VFIOQuirk) next; +- uint32_t data; +- uint32_t data2; ++ struct { ++ uint32_t base_offset:TARGET_PAGE_BITS; ++ uint32_t address_offset:TARGET_PAGE_BITS; ++ uint32_t address_size:3; ++ uint32_t bar:3; ++ ++ uint32_t address_match; ++ uint32_t address_mask; ++ ++ uint32_t address_val:TARGET_PAGE_BITS; ++ uint32_t data_offset:TARGET_PAGE_BITS; ++ uint32_t data_size:3; ++ ++ uint8_t flags; ++ uint8_t read_flags; ++ uint8_t write_flags; ++ } data; + } VFIOQuirk; + + typedef struct VFIOBAR { +@@ -72,6 +87,8 @@ typedef struct VFIOBAR { + size_t size; + uint32_t flags; /* VFIO region flags (rd/wr/mmap) */ + uint8_t nr; /* cache the BAR number for debug */ ++ bool ioport; ++ bool mem64; + QLIST_HEAD(, VFIOQuirk) quirks; + } VFIOBAR; + +@@ -1099,251 +1116,315 @@ static const MemoryRegionOps vfio_vga_ops = { + * Device specific quirks + */ + +-#define PCI_VENDOR_ID_ATI 0x1002 ++/* Is range1 fully contained within range2? */ ++static bool vfio_range_contained(uint64_t first1, uint64_t len1, ++ uint64_t first2, uint64_t len2) { ++ return (first1 >= first2 && first1 + len1 <= first2 + len2); ++} + +-/* +- * Device 1002:68f9 (Advanced Micro Devices [AMD] nee ATI Cedar PRO [Radeon +- * HD 5450/6350]) reports the upper byte of the physical address of the +- * I/O port BAR4 through VGA register 0x3c3. The BAR is 256 bytes, so the +- * lower byte is known to be zero. Probing for this quirk reads 0xff from +- * port 0x3c3 on some devices so we store the physical address and replace +- * reads with the virtual address any time it matches. XXX Research when +- * to enable quirk. +- */ +-static uint64_t vfio_ati_3c3_quirk_read(void *opaque, +- hwaddr addr, unsigned size) ++static bool vfio_flags_enabled(uint8_t flags, uint8_t mask) ++{ ++ return (mask && (flags & mask) == mask); ++} ++ ++static uint64_t vfio_generic_window_quirk_read(void *opaque, ++ hwaddr addr, unsigned size) + { + VFIOQuirk *quirk = opaque; + VFIODevice *vdev = quirk->vdev; +- PCIDevice *pdev = &vdev->pdev; +- uint64_t data = vfio_vga_read(&vdev->vga.region[QEMU_PCI_VGA_IO_HI], +- addr + 0x3, size); ++ uint64_t data; + +- if (data == quirk->data) { +- data = pci_get_byte(pdev->config + PCI_BASE_ADDRESS_4 + 1); +- DPRINTF("%s(0x3c3, 1) = 0x%"PRIx64"\n", __func__, data); ++ if (vfio_flags_enabled(quirk->data.flags, quirk->data.read_flags) && ++ ranges_overlap(addr, size, ++ quirk->data.data_offset, quirk->data.data_size)) { ++ hwaddr offset = addr - quirk->data.data_offset; ++ ++ if (!vfio_range_contained(addr, size, quirk->data.data_offset, ++ quirk->data.data_size)) { ++ hw_error("%s: window data read not fully contained: %s\n", ++ __func__, memory_region_name(&quirk->mem)); ++ } ++ ++ data = vfio_pci_read_config(&vdev->pdev, ++ quirk->data.address_val + offset, size); ++ ++ DPRINTF("%s read(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%" ++ PRIx64"\n", memory_region_name(&quirk->mem), vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function, ++ quirk->data.bar, addr, size, data); ++ } else { ++ data = vfio_bar_read(&vdev->bars[quirk->data.bar], ++ addr + quirk->data.base_offset, size); + } + + return data; + } + +-static const MemoryRegionOps vfio_ati_3c3_quirk = { +- .read = vfio_ati_3c3_quirk_read, +- .endianness = DEVICE_LITTLE_ENDIAN, +-}; +- +-static void vfio_vga_probe_ati_3c3_quirk(VFIODevice *vdev) ++static void vfio_generic_window_quirk_write(void *opaque, hwaddr addr, ++ uint64_t data, unsigned size) + { +- PCIDevice *pdev = &vdev->pdev; +- off_t physoffset = vdev->config_offset + PCI_BASE_ADDRESS_4; +- uint32_t physbar; +- VFIOQuirk *quirk; ++ VFIOQuirk *quirk = opaque; ++ VFIODevice *vdev = quirk->vdev; + +- if (pci_get_word(pdev->config + PCI_VENDOR_ID) != PCI_VENDOR_ID_ATI || +- vdev->bars[4].size < 256) { +- return; +- } ++ if (ranges_overlap(addr, size, ++ quirk->data.address_offset, quirk->data.address_size)) { + +- /* Get I/O port BAR physical address */ +- if (pread(vdev->fd, &physbar, 4, physoffset) != 4) { +- error_report("vfio: probe failed for ATI/AMD 0x3c3 quirk on device " +- "%04x:%02x:%02x.%x", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); +- return; ++ if (addr != quirk->data.address_offset) { ++ hw_error("%s: offset write into address window: %s\n", ++ __func__, memory_region_name(&quirk->mem)); ++ } ++ ++ if ((data & ~quirk->data.address_mask) == quirk->data.address_match) { ++ quirk->data.flags |= quirk->data.write_flags | ++ quirk->data.read_flags; ++ quirk->data.address_val = data & quirk->data.address_mask; ++ } else { ++ quirk->data.flags &= ~(quirk->data.write_flags | ++ quirk->data.read_flags); ++ } + } + +- quirk = g_malloc0(sizeof(*quirk)); +- quirk->vdev = vdev; +- quirk->data = (physbar >> 8) & 0xff; ++ if (vfio_flags_enabled(quirk->data.flags, quirk->data.write_flags) && ++ ranges_overlap(addr, size, ++ quirk->data.data_offset, quirk->data.data_size)) { ++ hwaddr offset = addr - quirk->data.data_offset; + +- memory_region_init_io(&quirk->mem, &vfio_ati_3c3_quirk, quirk, +- "vfio-ati-3c3-quirk", 1); +- memory_region_add_subregion(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].mem, 3, +- &quirk->mem); ++ if (!vfio_range_contained(addr, size, quirk->data.data_offset, ++ quirk->data.data_size)) { ++ hw_error("%s: window data write not fully contained: %s\n", ++ __func__, memory_region_name(&quirk->mem)); ++ } + +- QLIST_INSERT_HEAD(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].quirks, +- quirk, next); ++ vfio_pci_write_config(&vdev->pdev, ++ quirk->data.address_val + offset, data, size); ++ DPRINTF("%s write(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", 0x%" ++ PRIx64", %d)\n", memory_region_name(&quirk->mem), ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function, quirk->data.bar, addr, data, size); ++ return; ++ } + +- DPRINTF("Enabled ATI/AMD quirk 0x3c3 for device %04x:%02x:%02x.%x\n", +- vdev->host.domain, vdev->host.bus, vdev->host.slot, +- vdev->host.function); ++ vfio_bar_write(&vdev->bars[quirk->data.bar], ++ addr + quirk->data.base_offset, data, size); + } + +-/* +- * Device 1002:68f9 (Advanced Micro Devices [AMD] nee ATI Cedar PRO [Radeon +- * HD 5450/6350]) reports the physical address of MMIO BAR0 through a +- * write/read operation on I/O port BAR4. When uint32_t 0x4010 is written +- * to offset 0x0, the subsequent read from offset 0x4 returns the contents +- * of BAR0. Test for this quirk on all ATI/AMD devices. XXX - Note that +- * 0x10 is the offset of BAR0 in config sapce, is this a window to all of +- * config space? +- */ +-static uint64_t vfio_ati_4010_quirk_read(void *opaque, +- hwaddr addr, unsigned size) ++static const MemoryRegionOps vfio_generic_window_quirk = { ++ .read = vfio_generic_window_quirk_read, ++ .write = vfio_generic_window_quirk_write, ++ .endianness = DEVICE_LITTLE_ENDIAN, ++}; ++ ++static uint64_t vfio_generic_quirk_read(void *opaque, ++ hwaddr addr, unsigned size) + { + VFIOQuirk *quirk = opaque; + VFIODevice *vdev = quirk->vdev; +- PCIDevice *pdev = &vdev->pdev; +- uint64_t data = vfio_bar_read(&vdev->bars[4], addr, size); ++ hwaddr base = quirk->data.address_match & TARGET_PAGE_MASK; ++ hwaddr offset = quirk->data.address_match & ~TARGET_PAGE_MASK; ++ uint64_t data; + +- if (addr == 4 && size == 4 && quirk->data) { +- data = pci_get_long(pdev->config + PCI_BASE_ADDRESS_0); +- DPRINTF("%s(BAR4+0x4) = 0x%"PRIx64"\n", __func__, data); +- } ++ if (vfio_flags_enabled(quirk->data.flags, quirk->data.read_flags) && ++ ranges_overlap(addr, size, offset, quirk->data.address_mask + 1)) { ++ if (!vfio_range_contained(addr, size, offset, ++ quirk->data.address_mask + 1)) { ++ hw_error("%s: read not fully contained: %s\n", ++ __func__, memory_region_name(&quirk->mem)); ++ } + +- quirk->data = 0; ++ data = vfio_pci_read_config(&vdev->pdev, addr - offset, size); ++ ++ DPRINTF("%s read(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", %d) = 0x%" ++ PRIx64"\n", memory_region_name(&quirk->mem), vdev->host.domain, ++ vdev->host.bus, vdev->host.slot, vdev->host.function, ++ quirk->data.bar, addr + base, size, data); ++ } else { ++ data = vfio_bar_read(&vdev->bars[quirk->data.bar], addr + base, size); ++ } + + return data; + } + +-static void vfio_ati_4010_quirk_write(void *opaque, hwaddr addr, +- uint64_t data, unsigned size) ++static void vfio_generic_quirk_write(void *opaque, hwaddr addr, ++ uint64_t data, unsigned size) + { + VFIOQuirk *quirk = opaque; + VFIODevice *vdev = quirk->vdev; ++ hwaddr base = quirk->data.address_match & TARGET_PAGE_MASK; ++ hwaddr offset = quirk->data.address_match & ~TARGET_PAGE_MASK; ++ ++ if (vfio_flags_enabled(quirk->data.flags, quirk->data.write_flags) && ++ ranges_overlap(addr, size, offset, quirk->data.address_mask + 1)) { ++ if (!vfio_range_contained(addr, size, offset, ++ quirk->data.address_mask + 1)) { ++ hw_error("%s: write not fully contained: %s\n", ++ __func__, memory_region_name(&quirk->mem)); ++ } + +- vfio_bar_write(&vdev->bars[4], addr, data, size); ++ vfio_pci_write_config(&vdev->pdev, addr - offset, data, size); + +- quirk->data = (addr == 0 && size == 4 && data == 0x4010) ? 1 : 0; ++ DPRINTF("%s write(%04x:%02x:%02x.%x:BAR%d+0x%"HWADDR_PRIx", 0x%" ++ PRIx64", %d)\n", memory_region_name(&quirk->mem), ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function, quirk->data.bar, addr + base, data, size); ++ } else { ++ vfio_bar_write(&vdev->bars[quirk->data.bar], addr + base, data, size); ++ } + } + +-static const MemoryRegionOps vfio_ati_4010_quirk = { +- .read = vfio_ati_4010_quirk_read, +- .write = vfio_ati_4010_quirk_write, ++static const MemoryRegionOps vfio_generic_quirk = { ++ .read = vfio_generic_quirk_read, ++ .write = vfio_generic_quirk_write, + .endianness = DEVICE_LITTLE_ENDIAN, + }; + +-static void vfio_probe_ati_4010_quirk(VFIODevice *vdev, int nr) ++#define PCI_VENDOR_ID_ATI 0x1002 ++ ++/* ++ * Radeon HD cards (HD5450 & HD7850) report the upper byte of the I/O port BAR ++ * through VGA register 0x3c3. On newer cards, the I/O port BAR is always ++ * BAR4 (older cards like the X550 used BAR1, but we don't care to support ++ * those). Note that on bare metal, a read of 0x3c3 doesn't always return the ++ * I/O port BAR address. Originally this was coded to return the virtual BAR ++ * address only if the physical register read returns the actual BAR address, ++ * but users have reported greater success if we return the virtual address ++ * unconditionally. ++ */ ++static uint64_t vfio_ati_3c3_quirk_read(void *opaque, ++ hwaddr addr, unsigned size) ++{ ++ VFIOQuirk *quirk = opaque; ++ VFIODevice *vdev = quirk->vdev; ++ uint64_t data = vfio_pci_read_config(&vdev->pdev, ++ PCI_BASE_ADDRESS_0 + (4 * 4) + 1, ++ size); ++ DPRINTF("%s(0x3c3, 1) = 0x%"PRIx64"\n", __func__, data); ++ ++ return data; ++} ++ ++static const MemoryRegionOps vfio_ati_3c3_quirk = { ++ .read = vfio_ati_3c3_quirk_read, ++ .endianness = DEVICE_LITTLE_ENDIAN, ++}; ++ ++static void vfio_vga_probe_ati_3c3_quirk(VFIODevice *vdev) + { + PCIDevice *pdev = &vdev->pdev; +- off_t physoffset = vdev->config_offset + PCI_BASE_ADDRESS_0; +- uint32_t physbar0; +- uint64_t data; + VFIOQuirk *quirk; + +- if (!vdev->has_vga || nr != 4 || !vdev->bars[0].size || +- pci_get_word(pdev->config + PCI_VENDOR_ID) != PCI_VENDOR_ID_ATI) { +- return; +- } +- +- /* Get I/O port BAR physical address */ +- if (pread(vdev->fd, &physbar0, 4, physoffset) != 4) { +- error_report("vfio: probe failed for ATI/AMD 0x4010 quirk on device " +- "%04x:%02x:%02x.%x", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); ++ if (pci_get_word(pdev->config + PCI_VENDOR_ID) != PCI_VENDOR_ID_ATI) { + return; + } + +- /* Write 0x4010 to I/O port BAR offset 0 */ +- vfio_bar_write(&vdev->bars[4], 0, 0x4010, 4); +- /* Read back result */ +- data = vfio_bar_read(&vdev->bars[4], 4, 4); +- +- /* If the register matches the physical address of BAR0, we need a quirk */ +- if (data != physbar0) { ++ /* ++ * As long as the BAR is >= 256 bytes it will be aligned such that the ++ * lower byte is always zero. Filter out anything else, if it exists. ++ */ ++ if (!vdev->bars[4].ioport || vdev->bars[4].size < 256) { + return; + } + + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; + +- memory_region_init_io(&quirk->mem, &vfio_ati_4010_quirk, quirk, +- "vfio-ati-4010-quirk", 8); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, 0, &quirk->mem, 1); ++ memory_region_init_io(&quirk->mem, &vfio_ati_3c3_quirk, quirk, ++ "vfio-ati-3c3-quirk", 1); ++ memory_region_add_subregion(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].mem, ++ 3 /* offset 3 bytes from 0x3c0 */, &quirk->mem); + +- QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); ++ QLIST_INSERT_HEAD(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].quirks, ++ quirk, next); + +- DPRINTF("Enabled ATI/AMD quirk 0x4010 for device %04x:%02x:%02x.%x\n", ++ DPRINTF("Enabled ATI/AMD quirk 0x3c3 BAR4for device %04x:%02x:%02x.%x\n", + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function); + } + + /* +- * Device 1002:5b63 (Advanced Micro Devices [AMD] nee ATI RV370 [Radeon X550]) +- * retrieves the upper half of the MMIO BAR0 physical address by writing +- * 0xf10 to I/O port BAR1 offset 0 and reading the result from offset 6. +- * XXX - 0x10 is the offset of BAR0 in PCI config space, this could provide +- * full access to config space. Config space is little endian, so the data +- * register probably starts at 0x4. ++ * Newer ATI/AMD devices, including HD5450 and HD7850, have a window to PCI ++ * config space through MMIO BAR2 at offset 0x4000. Nothing seems to access ++ * the MMIO space directly, but a window to this space is provided through ++ * I/O port BAR4. Offset 0x0 is the address register and offset 0x4 is the ++ * data register. When the address is programmed to a range of 0x4000-0x4fff ++ * PCI configuration space is available. Experimentation seems to indicate ++ * that only read-only access is provided, but we drop writes when the window ++ * is enabled to config space nonetheless. + */ +-static uint64_t vfio_ati_f10_quirk_read(void *opaque, +- hwaddr addr, unsigned size) ++static void vfio_probe_ati_bar4_window_quirk(VFIODevice *vdev, int nr) + { +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; + PCIDevice *pdev = &vdev->pdev; +- uint64_t data = vfio_bar_read(&vdev->bars[1], addr, size); ++ VFIOQuirk *quirk; + +- if (addr == 6 && size == 2 && quirk->data) { +- data = pci_get_word(pdev->config + PCI_BASE_ADDRESS_0 + 2); +- DPRINTF("%s(BAR1+0x6) = 0x%"PRIx64"\n", __func__, data); ++ if (!vdev->has_vga || nr != 4 || ++ pci_get_word(pdev->config + PCI_VENDOR_ID) != PCI_VENDOR_ID_ATI) { ++ return; + } + +- quirk->data = 0; +- +- return data; +-} +- +-static void vfio_ati_f10_quirk_write(void *opaque, hwaddr addr, +- uint64_t data, unsigned size) +-{ +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; ++ quirk = g_malloc0(sizeof(*quirk)); ++ quirk->vdev = vdev; ++ quirk->data.address_size = 4; ++ quirk->data.data_offset = 4; ++ quirk->data.data_size = 4; ++ quirk->data.address_match = 0x4000; ++ quirk->data.address_mask = PCIE_CONFIG_SPACE_SIZE - 1; ++ quirk->data.bar = nr; ++ quirk->data.read_flags = quirk->data.write_flags = 1; ++ ++ memory_region_init_io(&quirk->mem, ++ &vfio_generic_window_quirk, quirk, ++ "vfio-ati-bar4-window-quirk", 8); ++ memory_region_add_subregion_overlap(&vdev->bars[nr].mem, ++ quirk->data.base_offset, &quirk->mem, 1); + +- vfio_bar_write(&vdev->bars[1], addr, data, size); ++ QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- quirk->data = (addr == 0 && size == 4 && data == 0xf10) ? 1 : 0; ++ DPRINTF("Enabled ATI/AMD BAR4 window quirk for device %04x:%02x:%02x.%x\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); + } + +-static const MemoryRegionOps vfio_ati_f10_quirk = { +- .read = vfio_ati_f10_quirk_read, +- .write = vfio_ati_f10_quirk_write, +- .endianness = DEVICE_LITTLE_ENDIAN, +-}; +- +-static void vfio_probe_ati_f10_quirk(VFIODevice *vdev, int nr) ++/* ++ * Trap the BAR2 MMIO window to config space as well. ++ */ ++static void vfio_probe_ati_bar2_4000_quirk(VFIODevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; +- off_t physoffset = vdev->config_offset + PCI_BASE_ADDRESS_0; +- uint32_t physbar0; +- uint64_t data; + VFIOQuirk *quirk; + +- if (!vdev->has_vga || nr != 1 || !vdev->bars[0].size || ++ /* Only enable on newer devices where BAR2 is 64bit */ ++ if (!vdev->has_vga || nr != 2 || !vdev->bars[2].mem64 || + pci_get_word(pdev->config + PCI_VENDOR_ID) != PCI_VENDOR_ID_ATI) { + return; + } + +- /* Get I/O port BAR physical address */ +- if (pread(vdev->fd, &physbar0, 4, physoffset) != 4) { +- error_report("vfio: probe failed for ATI/AMD 0xf10 quirk on device " +- "%04x:%02x:%02x.%x", vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function); +- return; +- } +- +- vfio_bar_write(&vdev->bars[1], 0, 0xf10, 4); +- data = vfio_bar_read(&vdev->bars[1], 0x6, 2); +- +- /* If the register matches the physical address of BAR0, we need a quirk */ +- if (data != (le32_to_cpu(physbar0) >> 16)) { +- return; +- } +- + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; +- +- memory_region_init_io(&quirk->mem, &vfio_ati_f10_quirk, quirk, +- "vfio-ati-f10-quirk", 8); +- memory_region_add_subregion_overlap(&vdev->bars[nr].mem, 0, &quirk->mem, 1); ++ quirk->data.flags = quirk->data.read_flags = quirk->data.write_flags = 1; ++ quirk->data.address_match = 0x4000; ++ quirk->data.address_mask = PCIE_CONFIG_SPACE_SIZE - 1; ++ quirk->data.bar = nr; ++ ++ memory_region_init_io(&quirk->mem, &vfio_generic_quirk, quirk, ++ "vfio-ati-bar2-4000-quirk", ++ TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); ++ memory_region_add_subregion_overlap(&vdev->bars[nr].mem, ++ quirk->data.address_match & TARGET_PAGE_MASK, ++ &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +- DPRINTF("Enabled ATI/AMD quirk 0xf10 for device %04x:%02x:%02x.%x\n", ++ DPRINTF("Enabled ATI/AMD BAR2 0x4000 quirk for device %04x:%02x:%02x.%x\n", + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function); + } + ++/* ++ * Older ATI/AMD cards like the X550 have a similar window to that above. ++ * I/O port BAR1 provides a window to a mirror of PCI config space located ++ * in BAR2 at offset 0xf00. We don't care to support such older cards, but ++ * note it for future reference. ++ */ ++ + #define PCI_VENDOR_ID_NVIDIA 0x10de + + /* +@@ -1362,7 +1443,7 @@ static void vfio_probe_ati_f10_quirk(VFIODevice *vdev, int nr) + * that use the I/O port BAR5 window but it doesn't hurt to leave it. + */ + enum { +- NV_3D0_NONE, ++ NV_3D0_NONE = 0, + NV_3D0_SELECT, + NV_3D0_WINDOW, + NV_3D0_READ, +@@ -1376,14 +1457,14 @@ static uint64_t vfio_nvidia_3d0_quirk_read(void *opaque, + VFIODevice *vdev = quirk->vdev; + PCIDevice *pdev = &vdev->pdev; + uint64_t data = vfio_vga_read(&vdev->vga.region[QEMU_PCI_VGA_IO_HI], +- addr + 0x10, size); ++ addr + quirk->data.base_offset, size); + +- if (quirk->data == NV_3D0_READ && addr == 0) { +- data = vfio_pci_read_config(pdev, quirk->data2, size); ++ if (quirk->data.flags == NV_3D0_READ && addr == quirk->data.data_offset) { ++ data = vfio_pci_read_config(pdev, quirk->data.address_val, size); + DPRINTF("%s(0x3d0, %d) = 0x%"PRIx64"\n", __func__, size, data); + } + +- quirk->data = NV_3D0_NONE; ++ quirk->data.flags = NV_3D0_NONE; + + return data; + } +@@ -1395,43 +1476,42 @@ static void vfio_nvidia_3d0_quirk_write(void *opaque, hwaddr addr, + VFIODevice *vdev = quirk->vdev; + PCIDevice *pdev = &vdev->pdev; + +- switch (quirk->data) { ++ switch (quirk->data.flags) { + case NV_3D0_NONE: +- if (addr == 4 && data == 0x338) { +- quirk->data = NV_3D0_SELECT; ++ if (addr == quirk->data.address_offset && data == 0x338) { ++ quirk->data.flags = NV_3D0_SELECT; + } + break; + case NV_3D0_SELECT: +- quirk->data = NV_3D0_NONE; +- if (addr == 0 && (data & ~0xff) == 0x1800) { +- quirk->data = NV_3D0_WINDOW; +- quirk->data2 = data & 0xff; ++ quirk->data.flags = NV_3D0_NONE; ++ if (addr == quirk->data.data_offset && ++ (data & ~quirk->data.address_mask) == quirk->data.address_match) { ++ quirk->data.flags = NV_3D0_WINDOW; ++ quirk->data.address_val = data & quirk->data.address_mask; + } + break; + case NV_3D0_WINDOW: +- quirk->data = NV_3D0_NONE; +- if (addr == 4) { ++ quirk->data.flags = NV_3D0_NONE; ++ if (addr == quirk->data.address_offset) { + if (data == 0x538) { +- quirk->data = NV_3D0_READ; ++ quirk->data.flags = NV_3D0_READ; + } else if (data == 0x738) { +- quirk->data = NV_3D0_WRITE; ++ quirk->data.flags = NV_3D0_WRITE; + } + } + break; + case NV_3D0_WRITE: +- quirk->data = NV_3D0_NONE; +- if (addr == 0) { +- vfio_pci_write_config(pdev, quirk->data2, data, size); ++ quirk->data.flags = NV_3D0_NONE; ++ if (addr == quirk->data.data_offset) { ++ vfio_pci_write_config(pdev, quirk->data.address_val, data, size); + DPRINTF("%s(0x3d0, 0x%"PRIx64", %d)\n", __func__, data, size); + return; + } + break; +- default: +- quirk->data = NV_3D0_NONE; + } + + vfio_vga_write(&vdev->vga.region[QEMU_PCI_VGA_IO_HI], +- addr + 0x10, data, size); ++ addr + quirk->data.base_offset, data, size); + } + + static const MemoryRegionOps vfio_nvidia_3d0_quirk = { +@@ -1452,11 +1532,18 @@ static void vfio_vga_probe_nvidia_3d0_quirk(VFIODevice *vdev) + + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; +- +- memory_region_init_io(&quirk->mem, &vfio_nvidia_3d0_quirk, quirk, +- "vfio-nvidia-3d0-quirk", 6); ++ quirk->data.base_offset = 0x10; ++ quirk->data.address_offset = 4; ++ quirk->data.address_size = 2; ++ quirk->data.address_match = 0x1800; ++ quirk->data.address_mask = PCI_CONFIG_SPACE_SIZE - 1; ++ quirk->data.data_offset = 0; ++ quirk->data.data_size = 4; ++ ++ memory_region_init_io(&quirk->mem, &vfio_nvidia_3d0_quirk, ++ quirk, "vfio-nvidia-3d0-quirk", 6); + memory_region_add_subregion(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].mem, +- 0x10, &quirk->mem); ++ quirk->data.base_offset, &quirk->mem); + + QLIST_INSERT_HEAD(&vdev->vga.region[QEMU_PCI_VGA_IO_HI].quirks, + quirk, next); +@@ -1480,76 +1567,46 @@ enum { + NV_BAR5_VALID = 0x7, + }; + +-static uint64_t vfio_nvidia_bar5_window_quirk_read(void *opaque, +- hwaddr addr, unsigned size) +-{ +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; +- uint64_t data = vfio_bar_read(&vdev->bars[5], addr, size); +- +- if (addr == 0xc && quirk->data == NV_BAR5_VALID) { +- data = vfio_pci_read_config(&vdev->pdev, quirk->data2, size); +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR5+0x%"HWADDR_PRIx", %d) = 0x%" +- PRIx64"\n", __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr, size, data); +- } +- +- return data; +-} +- + static void vfio_nvidia_bar5_window_quirk_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) + { + VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; + +- /* +- * Use quirk->data to track enables and quirk->data2 for the offset +- */ + switch (addr) { + case 0x0: + if (data & 0x1) { +- quirk->data |= NV_BAR5_MASTER; ++ quirk->data.flags |= NV_BAR5_MASTER; + } else { +- quirk->data &= ~NV_BAR5_MASTER; ++ quirk->data.flags &= ~NV_BAR5_MASTER; + } + break; + case 0x4: + if (data & 0x1) { +- quirk->data |= NV_BAR5_ENABLE; ++ quirk->data.flags |= NV_BAR5_ENABLE; + } else { +- quirk->data &= ~NV_BAR5_ENABLE; ++ quirk->data.flags &= ~NV_BAR5_ENABLE; + } + break; + case 0x8: +- if (quirk->data & NV_BAR5_MASTER) { ++ if (quirk->data.flags & NV_BAR5_MASTER) { + if ((data & ~0xfff) == 0x88000) { +- quirk->data |= NV_BAR5_ADDRESS; +- quirk->data2 = data & 0xfff; ++ quirk->data.flags |= NV_BAR5_ADDRESS; ++ quirk->data.address_val = data & 0xfff; + } else if ((data & ~0xff) == 0x1800) { +- quirk->data |= NV_BAR5_ADDRESS; +- quirk->data2 = data & 0xff; ++ quirk->data.flags |= NV_BAR5_ADDRESS; ++ quirk->data.address_val = data & 0xff; + } else { +- quirk->data &= ~NV_BAR5_ADDRESS; ++ quirk->data.flags &= ~NV_BAR5_ADDRESS; + } + } + break; +- case 0xc: +- if (quirk->data == NV_BAR5_VALID) { +- vfio_pci_write_config(&vdev->pdev, quirk->data2, data, size); +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR5+0x%"HWADDR_PRIx", 0x%" +- PRIx64", %d)\n", __func__, vdev->host.domain, +- vdev->host.bus, vdev->host.slot, vdev->host.function, +- addr, data, size); +- return; +- } + } + +- vfio_bar_write(&vdev->bars[5], addr, data, size); ++ vfio_generic_window_quirk_write(opaque, addr, data, size); + } + + static const MemoryRegionOps vfio_nvidia_bar5_window_quirk = { +- .read = vfio_nvidia_bar5_window_quirk_read, ++ .read = vfio_generic_window_quirk_read, + .write = vfio_nvidia_bar5_window_quirk_write, + .valid.min_access_size = 4, + .endianness = DEVICE_LITTLE_ENDIAN, +@@ -1567,8 +1624,15 @@ static void vfio_probe_nvidia_bar5_window_quirk(VFIODevice *vdev, int nr) + + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; +- +- memory_region_init_io(&quirk->mem, &vfio_nvidia_bar5_window_quirk, quirk, ++ quirk->data.read_flags = quirk->data.write_flags = NV_BAR5_VALID; ++ quirk->data.address_offset = 0x8; ++ quirk->data.address_size = 0; /* actually 4, but avoids generic code */ ++ quirk->data.data_offset = 0xc; ++ quirk->data.data_size = 4; ++ quirk->data.bar = nr; ++ ++ memory_region_init_io(&quirk->mem, ++ &vfio_nvidia_bar5_window_quirk, quirk, + "vfio-nvidia-bar5-window-quirk", 16); + memory_region_add_subregion_overlap(&vdev->bars[nr].mem, 0, &quirk->mem, 1); + +@@ -1588,51 +1652,6 @@ static void vfio_probe_nvidia_bar5_window_quirk(VFIODevice *vdev, int nr) + * + * Here's offset 0x88000... + */ +-static uint64_t vfio_nvidia_bar0_88000_quirk_read(void *opaque, +- hwaddr addr, unsigned size) +-{ +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; +- hwaddr base = 0x88000 & TARGET_PAGE_MASK; +- hwaddr offset = 0x88000 & ~TARGET_PAGE_MASK; +- uint64_t data = vfio_bar_read(&vdev->bars[0], addr + base, size); +- +- if (ranges_overlap(addr, size, offset, PCI_CONFIG_SPACE_SIZE)) { +- data = vfio_pci_read_config(&vdev->pdev, addr - offset, size); +- +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR0+0x%"HWADDR_PRIx", %d) = 0x%" +- PRIx64"\n", __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr + base, size, data); +- } +- +- return data; +-} +- +-static void vfio_nvidia_bar0_88000_quirk_write(void *opaque, hwaddr addr, +- uint64_t data, unsigned size) +-{ +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; +- hwaddr base = 0x88000 & TARGET_PAGE_MASK; +- hwaddr offset = 0x88000 & ~TARGET_PAGE_MASK; +- +- if (ranges_overlap(addr, size, offset, PCI_CONFIG_SPACE_SIZE)) { +- vfio_pci_write_config(&vdev->pdev, addr - offset, data, size); +- +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR0+0x%"HWADDR_PRIx", 0x%" +- PRIx64", %d)\n", __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr + base, data, size); +- } else { +- vfio_bar_write(&vdev->bars[0], addr + base, data, size); +- } +-} +- +-static const MemoryRegionOps vfio_nvidia_bar0_88000_quirk = { +- .read = vfio_nvidia_bar0_88000_quirk_read, +- .write = vfio_nvidia_bar0_88000_quirk_write, +- .endianness = DEVICE_LITTLE_ENDIAN, +-}; +- + static void vfio_probe_nvidia_bar0_88000_quirk(VFIODevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; +@@ -1645,13 +1664,17 @@ static void vfio_probe_nvidia_bar0_88000_quirk(VFIODevice *vdev, int nr) + + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; +- +- memory_region_init_io(&quirk->mem, &vfio_nvidia_bar0_88000_quirk, quirk, +- "vfio-nvidia-bar0-88000-quirk", +- TARGET_PAGE_ALIGN(PCIE_CONFIG_SPACE_SIZE)); ++ quirk->data.flags = quirk->data.read_flags = quirk->data.write_flags = 1; ++ quirk->data.address_match = 0x88000; ++ quirk->data.address_mask = PCIE_CONFIG_SPACE_SIZE - 1; ++ quirk->data.bar = nr; ++ ++ memory_region_init_io(&quirk->mem, &vfio_generic_quirk, ++ quirk, "vfio-nvidia-bar0-88000-quirk", ++ TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); + memory_region_add_subregion_overlap(&vdev->bars[nr].mem, +- 0x88000 & TARGET_PAGE_MASK, +- &quirk->mem, 1); ++ quirk->data.address_match & TARGET_PAGE_MASK, ++ &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +@@ -1663,51 +1686,6 @@ static void vfio_probe_nvidia_bar0_88000_quirk(VFIODevice *vdev, int nr) + /* + * And here's the same for BAR0 offset 0x1800... + */ +-static uint64_t vfio_nvidia_bar0_1800_quirk_read(void *opaque, +- hwaddr addr, unsigned size) +-{ +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; +- hwaddr base = 0x1800 & TARGET_PAGE_MASK; +- hwaddr offset = 0x1800 & ~TARGET_PAGE_MASK; +- uint64_t data = vfio_bar_read(&vdev->bars[0], addr + base, size); +- +- if (ranges_overlap(addr, size, offset, PCI_CONFIG_SPACE_SIZE)) { +- data = vfio_pci_read_config(&vdev->pdev, addr - offset, size); +- +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR0+0x%"HWADDR_PRIx", %d) = 0x%" +- PRIx64"\n", __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr + base, size, data); +- } +- +- return data; +-} +- +-static void vfio_nvidia_bar0_1800_quirk_write(void *opaque, hwaddr addr, +- uint64_t data, unsigned size) +-{ +- VFIOQuirk *quirk = opaque; +- VFIODevice *vdev = quirk->vdev; +- hwaddr base = 0x1800 & TARGET_PAGE_MASK; +- hwaddr offset = 0x1800 & ~TARGET_PAGE_MASK; +- +- if (ranges_overlap(addr, size, offset, PCI_CONFIG_SPACE_SIZE)) { +- vfio_pci_write_config(&vdev->pdev, addr - offset, data, size); +- +- DPRINTF("%s(%04x:%02x:%02x.%x:BAR0+0x%"HWADDR_PRIx", 0x%" +- PRIx64", %d)\n", __func__, vdev->host.domain, vdev->host.bus, +- vdev->host.slot, vdev->host.function, addr + base, data, size); +- } else { +- vfio_bar_write(&vdev->bars[0], addr + base, data, size); +- } +-} +- +-static const MemoryRegionOps vfio_nvidia_bar0_1800_quirk = { +- .read = vfio_nvidia_bar0_1800_quirk_read, +- .write = vfio_nvidia_bar0_1800_quirk_write, +- .endianness = DEVICE_LITTLE_ENDIAN, +-}; +- + static void vfio_probe_nvidia_bar0_1800_quirk(VFIODevice *vdev, int nr) + { + PCIDevice *pdev = &vdev->pdev; +@@ -1724,13 +1702,17 @@ static void vfio_probe_nvidia_bar0_1800_quirk(VFIODevice *vdev, int nr) + + quirk = g_malloc0(sizeof(*quirk)); + quirk->vdev = vdev; ++ quirk->data.flags = quirk->data.read_flags = quirk->data.write_flags = 1; ++ quirk->data.address_match = 0x1800; ++ quirk->data.address_mask = PCI_CONFIG_SPACE_SIZE - 1; ++ quirk->data.bar = nr; + +- memory_region_init_io(&quirk->mem, &vfio_nvidia_bar0_1800_quirk, quirk, ++ memory_region_init_io(&quirk->mem, &vfio_generic_quirk, quirk, + "vfio-nvidia-bar0-1800-quirk", +- TARGET_PAGE_ALIGN(PCI_CONFIG_SPACE_SIZE)); ++ TARGET_PAGE_ALIGN(quirk->data.address_mask + 1)); + memory_region_add_subregion_overlap(&vdev->bars[nr].mem, +- 0x1800 & TARGET_PAGE_MASK, +- &quirk->mem, 1); ++ quirk->data.address_match & TARGET_PAGE_MASK, ++ &quirk->mem, 1); + + QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); + +@@ -1770,8 +1752,8 @@ static void vfio_vga_quirk_teardown(VFIODevice *vdev) + + static void vfio_bar_quirk_setup(VFIODevice *vdev, int nr) + { +- vfio_probe_ati_4010_quirk(vdev, nr); +- vfio_probe_ati_f10_quirk(vdev, nr); ++ vfio_probe_ati_bar4_window_quirk(vdev, nr); ++ vfio_probe_ati_bar2_4000_quirk(vdev, nr); + vfio_probe_nvidia_bar5_window_quirk(vdev, nr); + vfio_probe_nvidia_bar0_88000_quirk(vdev, nr); + vfio_probe_nvidia_bar0_1800_quirk(vdev, nr); +@@ -2267,11 +2249,14 @@ static void vfio_map_bar(VFIODevice *vdev, int nr) + } + + pci_bar = le32_to_cpu(pci_bar); +- type = pci_bar & (pci_bar & PCI_BASE_ADDRESS_SPACE_IO ? +- ~PCI_BASE_ADDRESS_IO_MASK : ~PCI_BASE_ADDRESS_MEM_MASK); ++ bar->ioport = (pci_bar & PCI_BASE_ADDRESS_SPACE_IO); ++ bar->mem64 = bar->ioport ? 0 : (pci_bar & PCI_BASE_ADDRESS_MEM_TYPE_64); ++ type = pci_bar & (bar->ioport ? ~PCI_BASE_ADDRESS_IO_MASK : ++ ~PCI_BASE_ADDRESS_MEM_MASK); + + /* A "slow" read/write mapping underlies all BARs */ +- memory_region_init_io(&bar->mem, &vfio_bar_ops, bar, name, size); ++ memory_region_init_io(&bar->mem, &vfio_bar_ops, ++ bar, name, size); + pci_register_bar(&vdev->pdev, nr, type, &bar->mem); + + /* +-- +1.7.1 + diff --git a/SOURCES/kvm-vfio-remove-bootindex-property-from-qdev-to-qom.patch b/SOURCES/kvm-vfio-remove-bootindex-property-from-qdev-to-qom.patch new file mode 100644 index 0000000..e95987b --- /dev/null +++ b/SOURCES/kvm-vfio-remove-bootindex-property-from-qdev-to-qom.patch @@ -0,0 +1,58 @@ +From 394cb4371862245164782e8a98910bc78f90c629 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 29 Sep 2017 21:45:24 +0200 +Subject: [PATCH 10/27] vfio: remove bootindex property from qdev to qom + +RH-Author: Alex Williamson +Message-id: <20170929214524.16765.24180.stgit@gimli.home> +Patchwork-id: 76767 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 10/16] vfio: remove bootindex property from qdev to qom +Bugzilla: 1494181 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Auger Eric +RH-Acked-by: Miroslav Rezanina + +From: Gonglei + +Upstream: abc5b3bfe1c77ad622188341d1ee4d49de308ae3 +RHEL: Only taking the instance_init infrastructure, bootindex not + moved and vars removed to allow clean build, re-added later. + +Remove bootindex form qdev property to qom, things will +continue to work just fine, and we can use qom features +which are not supported by qdev property. + +Signed-off-by: Gonglei +Reviewed-by: Gerd Hoffmann +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 64d4dc7..0af8613 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -4060,6 +4060,10 @@ post_reset: + vfio_pci_post_reset(vdev); + } + ++static void vfio_instance_init(Object *obj) ++{ ++} ++ + static Property vfio_pci_dev_properties[] = { + DEFINE_PROP_PCI_HOST_DEVADDR("host", VFIOPCIDevice, host), + DEFINE_PROP_STRING("sysfsdev", VFIOPCIDevice, vbasedev.sysfsdev), +@@ -4105,6 +4109,7 @@ static const TypeInfo vfio_pci_dev_info = { + .parent = TYPE_PCI_DEVICE, + .instance_size = sizeof(VFIOPCIDevice), + .class_init = vfio_pci_dev_class_init, ++ .instance_init = vfio_instance_init, + }; + + static void register_vfio_pci_dev_type(void) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-use-correct-runstate.patch b/SOURCES/kvm-vfio-use-correct-runstate.patch new file mode 100644 index 0000000..b77de61 --- /dev/null +++ b/SOURCES/kvm-vfio-use-correct-runstate.patch @@ -0,0 +1,44 @@ +From 78d0d122c47898c20a5209d0020674d28b42c513 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:34:02 +0200 +Subject: [PATCH 05/14] vfio: use correct runstate + +Message-id: <20150410163402.15324.34238.stgit@gimli.home> +Patchwork-id: 64791 +O-Subject: [RHEL7.2 qemu-kvm PATCH 5/8] vfio: use correct runstate +Bugzilla: 1210505 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +From: Paolo Bonzini + +Upstream: ba29776fd8160a5c1c1892af5e237fc37aec3cf7 + +io-error is for block device errors; it should always be preceded +by a BLOCK_IO_ERROR event. I think vfio wants to use +RUN_STATE_INTERNAL_ERROR instead. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 81e6594..f6e019c 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -3650,7 +3650,7 @@ static void vfio_err_notifier_handler(void *opaque) + __func__, vdev->host.domain, vdev->host.bus, + vdev->host.slot, vdev->host.function); + +- vm_stop(RUN_STATE_IO_ERROR); ++ vm_stop(RUN_STATE_INTERNAL_ERROR); + } + + /* +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vfio-warn-if-host-device-rom-can-t-be-read.patch b/SOURCES/kvm-vfio-warn-if-host-device-rom-can-t-be-read.patch new file mode 100644 index 0000000..a965b8f --- /dev/null +++ b/SOURCES/kvm-vfio-warn-if-host-device-rom-can-t-be-read.patch @@ -0,0 +1,51 @@ +From 5bf64f8c7302964bd5fd208d9db9fa38ee96e0fa Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:33:39 +0200 +Subject: [PATCH 01/14] vfio: warn if host device rom can't be read + +Message-id: <20150410163339.15324.77513.stgit@gimli.home> +Patchwork-id: 64789 +O-Subject: [RHEL7.2 qemu-kvm PATCH 1/8] vfio: warn if host device rom can't be read +Bugzilla: 1210503 +RH-Acked-by: Thomas Huth +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das + +From: Bandan Das + +Upstream: d20b43dfea1587b561aae17e4fa0f7407779d253 + +If the device rom can't be read, report an error to the +user. This alerts the user that the device has a bad +state that is causing rom read failure or option rom +loading has been disabled from the device boot menu +(among other reasons). + +Signed-off-by: Bandan Das +Signed-off-by: Alex Williamson +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vfio.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c +index 40b0923..c9dbc28 100644 +--- a/hw/misc/vfio.c ++++ b/hw/misc/vfio.c +@@ -1197,6 +1197,13 @@ static void vfio_pci_load_rom(VFIODevice *vdev) + vdev->rom_offset = reg_info.offset; + + if (!vdev->rom_size) { ++ error_report("vfio-pci: Cannot read device rom at " ++ "%04x:%02x:%02x.%x\n", ++ vdev->host.domain, vdev->host.bus, vdev->host.slot, ++ vdev->host.function); ++ error_printf("Device option ROM contents are probably invalid " ++ "(check dmesg).\nSkip option ROM probe with rombar=0, " ++ "or load from file with romfile=\n"); + return; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-Add-mechanism-to-force-the-use-of-a-shadow-surfa.patch b/SOURCES/kvm-vga-Add-mechanism-to-force-the-use-of-a-shadow-surfa.patch new file mode 100644 index 0000000..92e7f61 --- /dev/null +++ b/SOURCES/kvm-vga-Add-mechanism-to-force-the-use-of-a-shadow-surfa.patch @@ -0,0 +1,88 @@ +From 3067d5947bd28c5c05ba8dc7c87b70edc6157a27 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 20 Oct 2017 11:06:17 +0200 +Subject: [PATCH 2/7] vga: Add mechanism to force the use of a shadow surface + +RH-Author: Gerd Hoffmann +Message-id: <20171020110619.2541-10-kraxel@redhat.com> +Patchwork-id: 77409 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 09/11] vga: Add mechanism to force the use of a shadow surface +Bugzilla: 1501295 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Miroslav Rezanina + +From: Benjamin Herrenschmidt + +This prevents surface sharing which will be necessary to +fix cirrus HW cursor support. + +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 5508099397c480f1c3b4f14b0e64593ebe284b26) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 17 +++++++++++++++-- + hw/display/vga_int.h | 1 + + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index dda3f5f..a343a0a 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1510,6 +1510,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + uint8_t *d; + uint32_t v, addr1, addr; + vga_draw_line_func *vga_draw_line; ++ bool share_surface; + #if defined(TARGET_WORDS_BIGENDIAN) + static const bool big_endian_fb = true; + #else +@@ -1558,18 +1559,30 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + } + + depth = s->get_bpp(s); ++ ++ share_surface = (!s->force_shadow) && ++ ( depth == 32 || (depth == 16 && !byteswap) ); + if (s->line_offset != s->last_line_offset || + disp_width != s->last_width || + height != s->last_height || +- s->last_depth != depth) { +- if (depth == 32 || (depth == 16 && !byteswap)) { ++ s->last_depth != depth || ++ share_surface != is_buffer_shared(surface)) { ++ if (share_surface) { + surface = qemu_create_displaysurface_from(disp_width, + height, depth, s->line_offset, + s->vram_ptr + (s->start_addr * 4), byteswap); + dpy_gfx_replace_surface(s->con, surface); ++#ifdef DEBUG_VGA ++ printf("VGA: Using shared surface for depth=%d swap=%d\n", ++ depth, byteswap); ++#endif + } else { + qemu_console_resize(s->con, disp_width, height); + surface = qemu_console_surface(s->con); ++#ifdef DEBUG_VGA ++ printf("VGA: Using shadow surface for depth=%d swap=%d\n", ++ depth, byteswap); ++#endif + } + s->last_scr_width = disp_width; + s->last_scr_height = height; +diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h +index 94add2f..5b9ca87 100644 +--- a/hw/display/vga_int.h ++++ b/hw/display/vga_int.h +@@ -149,6 +149,7 @@ typedef struct VGACommonState { + uint32_t last_width, last_height; /* in chars or pixels */ + uint32_t last_scr_width, last_scr_height; /* in pixels */ + uint32_t last_depth; /* in bits */ ++ bool force_shadow; + uint8_t cursor_start, cursor_end; + bool cursor_visible_phase; + int64_t cursor_blink_time; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-Remove-remainder-of-old-conversion-cruft.patch b/SOURCES/kvm-vga-Remove-remainder-of-old-conversion-cruft.patch new file mode 100644 index 0000000..a3121ab --- /dev/null +++ b/SOURCES/kvm-vga-Remove-remainder-of-old-conversion-cruft.patch @@ -0,0 +1,559 @@ +From d177da08e3ad6ff44abdc0887fd513a0c8222d48 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:16 +0200 +Subject: [PATCH 20/27] vga: Remove remainder of old conversion cruft + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-5-kraxel@redhat.com> +Patchwork-id: 76826 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 4/7] vga: Remove remainder of old conversion cruft +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Benjamin Herrenschmidt + +All the macros used to generate different versions of vga_template.h +are now unnecessary, take them all out and remove the _32 suffix from +most functions. + +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Gerd Hoffmann +Reviewed-by: David Gibson +(cherry picked from commit d2e043a804141ec0a896270d25d6ae370c473ddd) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 46 +++++----- + hw/display/vga_template.h | 227 +++++++++++++++------------------------------- + 2 files changed, 95 insertions(+), 178 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index dab75a3..1a292a9 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1047,10 +1047,8 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + typedef void vga_draw_line_func(VGACommonState *s1, uint8_t *d, + const uint8_t *s, int width); + +-#define DEPTH 32 + #include "vga_template.h" + +- + static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned b) + { + unsigned int col; +@@ -1349,19 +1347,19 @@ static void vga_draw_text(VGACommonState *s, int full_update) + bgcol = palette[cattr >> 4]; + fgcol = palette[cattr & 0x0f]; + if (cw == 16) { +- vga_draw_glyph16_32(d1, linesize, +- font_ptr, cheight, fgcol, bgcol); ++ vga_draw_glyph16(d1, linesize, ++ font_ptr, cheight, fgcol, bgcol); + } else if (cw != 9) { +- vga_draw_glyph8_32(d1, linesize, +- font_ptr, cheight, fgcol, bgcol); ++ vga_draw_glyph8(d1, linesize, ++ font_ptr, cheight, fgcol, bgcol); + } else { + dup9 = 0; + if (ch >= 0xb0 && ch <= 0xdf && + (s->ar[VGA_ATC_MODE] & 0x04)) { + dup9 = 1; + } +- vga_draw_glyph9_32(d1, linesize, +- font_ptr, cheight, fgcol, bgcol, dup9); ++ vga_draw_glyph9(d1, linesize, ++ font_ptr, cheight, fgcol, bgcol, dup9); + } + if (src == cursor_ptr && + !(s->cr[VGA_CRTC_CURSOR_START] & 0x20) && +@@ -1377,14 +1375,14 @@ static void vga_draw_text(VGACommonState *s, int full_update) + h = line_last - line_start + 1; + d = d1 + linesize * line_start; + if (cw == 16) { +- vga_draw_glyph16_32(d, linesize, +- cursor_glyph, h, fgcol, bgcol); ++ vga_draw_glyph16(d, linesize, ++ cursor_glyph, h, fgcol, bgcol); + } else if (cw != 9) { +- vga_draw_glyph8_32(d, linesize, +- cursor_glyph, h, fgcol, bgcol); ++ vga_draw_glyph8(d, linesize, ++ cursor_glyph, h, fgcol, bgcol); + } else { +- vga_draw_glyph9_32(d, linesize, +- cursor_glyph, h, fgcol, bgcol, 1); ++ vga_draw_glyph9(d, linesize, ++ cursor_glyph, h, fgcol, bgcol, 1); + } + } + } +@@ -1422,16 +1420,16 @@ enum { + }; + + static vga_draw_line_func * const vga_draw_line_table[VGA_DRAW_LINE_NB] = { +- vga_draw_line2_32, +- vga_draw_line2d2_32, +- vga_draw_line4_32, +- vga_draw_line4d2_32, +- vga_draw_line8d2_32, +- vga_draw_line8_32, +- vga_draw_line15_32, +- vga_draw_line16_32, +- vga_draw_line24_32, +- vga_draw_line32_32, ++ vga_draw_line2, ++ vga_draw_line2d2, ++ vga_draw_line4, ++ vga_draw_line4d2, ++ vga_draw_line8d2, ++ vga_draw_line8, ++ vga_draw_line15, ++ vga_draw_line16, ++ vga_draw_line24, ++ vga_draw_line32, + }; + + static int vga_get_bpp(VGACommonState *s) +diff --git a/hw/display/vga_template.h b/hw/display/vga_template.h +index 90ec9c2..0660b52 100644 +--- a/hw/display/vga_template.h ++++ b/hw/display/vga_template.h +@@ -22,41 +22,9 @@ + * THE SOFTWARE. + */ + +-#if DEPTH == 8 +-#define BPP 1 +-#define PIXEL_TYPE uint8_t +-#elif DEPTH == 15 || DEPTH == 16 +-#define BPP 2 +-#define PIXEL_TYPE uint16_t +-#elif DEPTH == 32 +-#define BPP 4 +-#define PIXEL_TYPE uint32_t +-#else +-#error unsupport depth +-#endif +- +-#ifdef BGR_FORMAT +-#define PIXEL_NAME glue(DEPTH, bgr) +-#else +-#define PIXEL_NAME DEPTH +-#endif /* BGR_FORMAT */ +- +-#if DEPTH != 15 && !defined(BGR_FORMAT) +- +-static inline void glue(vga_draw_glyph_line_, DEPTH)(uint8_t *d, +- uint32_t font_data, +- uint32_t xorcol, +- uint32_t bgcol) ++static inline void vga_draw_glyph_line(uint8_t *d, uint32_t font_data, ++ uint32_t xorcol, uint32_t bgcol) + { +-#if BPP == 1 +- ((uint32_t *)d)[0] = (dmask16[(font_data >> 4)] & xorcol) ^ bgcol; +- ((uint32_t *)d)[1] = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol; +-#elif BPP == 2 +- ((uint32_t *)d)[0] = (dmask4[(font_data >> 6)] & xorcol) ^ bgcol; +- ((uint32_t *)d)[1] = (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol; +- ((uint32_t *)d)[2] = (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol; +- ((uint32_t *)d)[3] = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol; +-#else + ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol; + ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol; + ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol; +@@ -65,25 +33,24 @@ static inline void glue(vga_draw_glyph_line_, DEPTH)(uint8_t *d, + ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol; + ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol; + ((uint32_t *)d)[7] = (-((font_data >> 0) & 1) & xorcol) ^ bgcol; +-#endif + } + +-static void glue(vga_draw_glyph8_, DEPTH)(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol) ++static void vga_draw_glyph8(uint8_t *d, int linesize, ++ const uint8_t *font_ptr, int h, ++ uint32_t fgcol, uint32_t bgcol) + { + uint32_t font_data, xorcol; + + xorcol = bgcol ^ fgcol; + do { + font_data = font_ptr[0]; +- glue(vga_draw_glyph_line_, DEPTH)(d, font_data, xorcol, bgcol); ++ vga_draw_glyph_line(d, font_data, xorcol, bgcol); + font_ptr += 4; + d += linesize; + } while (--h); + } + +-static void glue(vga_draw_glyph16_, DEPTH)(uint8_t *d, int linesize, ++static void vga_draw_glyph16(uint8_t *d, int linesize, + const uint8_t *font_ptr, int h, + uint32_t fgcol, uint32_t bgcol) + { +@@ -92,48 +59,24 @@ static void glue(vga_draw_glyph16_, DEPTH)(uint8_t *d, int linesize, + xorcol = bgcol ^ fgcol; + do { + font_data = font_ptr[0]; +- glue(vga_draw_glyph_line_, DEPTH)(d, +- expand4to8[font_data >> 4], +- xorcol, bgcol); +- glue(vga_draw_glyph_line_, DEPTH)(d + 8 * BPP, +- expand4to8[font_data & 0x0f], +- xorcol, bgcol); ++ vga_draw_glyph_line(d, expand4to8[font_data >> 4], ++ xorcol, bgcol); ++ vga_draw_glyph_line(d + 32, expand4to8[font_data & 0x0f], ++ xorcol, bgcol); + font_ptr += 4; + d += linesize; + } while (--h); + } + +-static void glue(vga_draw_glyph9_, DEPTH)(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol, int dup9) ++static void vga_draw_glyph9(uint8_t *d, int linesize, ++ const uint8_t *font_ptr, int h, ++ uint32_t fgcol, uint32_t bgcol, int dup9) + { + uint32_t font_data, xorcol, v; + + xorcol = bgcol ^ fgcol; + do { + font_data = font_ptr[0]; +-#if BPP == 1 +- stl_p((uint32_t *)d, (dmask16[(font_data >> 4)] & xorcol) ^ bgcol); +- v = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol; +- stl_p(((uint32_t *)d)+1, v); +- if (dup9) +- ((uint8_t *)d)[8] = v >> (24 * (1 - BIG)); +- else +- ((uint8_t *)d)[8] = bgcol; +- +-#elif BPP == 2 +- stl_p(((uint32_t *)d)+0, (dmask4[(font_data >> 6)] & xorcol) ^ bgcol); +- stl_p(((uint32_t *)d)+1, +- (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol); +- stl_p(((uint32_t *)d)+2, +- (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol); +- v = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol; +- stl_p(((uint32_t *)d)+3, v); +- if (dup9) +- ((uint16_t *)d)[8] = v >> (16 * (1 - BIG)); +- else +- ((uint16_t *)d)[8] = bgcol; +-#else + ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol; + ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol; + ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol; +@@ -147,7 +90,6 @@ static void glue(vga_draw_glyph9_, DEPTH)(uint8_t *d, int linesize, + ((uint32_t *)d)[8] = v; + else + ((uint32_t *)d)[8] = bgcol; +-#endif + font_ptr += 4; + d += linesize; + } while (--h); +@@ -156,8 +98,8 @@ static void glue(vga_draw_glyph9_, DEPTH)(uint8_t *d, int linesize, + /* + * 4 color mode + */ +-static void glue(vga_draw_line2_, DEPTH)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + uint32_t plane_mask, *palette, data, v; + int x; +@@ -170,36 +112,30 @@ static void glue(vga_draw_line2_, DEPTH)(VGACommonState *s1, uint8_t *d, + data &= plane_mask; + v = expand2[GET_PLANE(data, 0)]; + v |= expand2[GET_PLANE(data, 2)] << 2; +- ((PIXEL_TYPE *)d)[0] = palette[v >> 12]; +- ((PIXEL_TYPE *)d)[1] = palette[(v >> 8) & 0xf]; +- ((PIXEL_TYPE *)d)[2] = palette[(v >> 4) & 0xf]; +- ((PIXEL_TYPE *)d)[3] = palette[(v >> 0) & 0xf]; ++ ((uint32_t *)d)[0] = palette[v >> 12]; ++ ((uint32_t *)d)[1] = palette[(v >> 8) & 0xf]; ++ ((uint32_t *)d)[2] = palette[(v >> 4) & 0xf]; ++ ((uint32_t *)d)[3] = palette[(v >> 0) & 0xf]; + + v = expand2[GET_PLANE(data, 1)]; + v |= expand2[GET_PLANE(data, 3)] << 2; +- ((PIXEL_TYPE *)d)[4] = palette[v >> 12]; +- ((PIXEL_TYPE *)d)[5] = palette[(v >> 8) & 0xf]; +- ((PIXEL_TYPE *)d)[6] = palette[(v >> 4) & 0xf]; +- ((PIXEL_TYPE *)d)[7] = palette[(v >> 0) & 0xf]; +- d += BPP * 8; ++ ((uint32_t *)d)[4] = palette[v >> 12]; ++ ((uint32_t *)d)[5] = palette[(v >> 8) & 0xf]; ++ ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; ++ ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; ++ d += 32; + s += 4; + } + } + +-#if BPP == 1 +-#define PUT_PIXEL2(d, n, v) ((uint16_t *)d)[(n)] = (v) +-#elif BPP == 2 +-#define PUT_PIXEL2(d, n, v) ((uint32_t *)d)[(n)] = (v) +-#else + #define PUT_PIXEL2(d, n, v) \ + ((uint32_t *)d)[2*(n)] = ((uint32_t *)d)[2*(n)+1] = (v) +-#endif + + /* + * 4 color mode, dup2 horizontal + */ +-static void glue(vga_draw_line2d2_, DEPTH)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line2d2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + uint32_t plane_mask, *palette, data, v; + int x; +@@ -223,7 +159,7 @@ static void glue(vga_draw_line2d2_, DEPTH)(VGACommonState *s1, uint8_t *d, + PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]); + PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); + PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); +- d += BPP * 16; ++ d += 64; + s += 4; + } + } +@@ -231,8 +167,8 @@ static void glue(vga_draw_line2d2_, DEPTH)(VGACommonState *s1, uint8_t *d, + /* + * 16 color mode + */ +-static void glue(vga_draw_line4_, DEPTH)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line4(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + uint32_t plane_mask, data, v, *palette; + int x; +@@ -247,15 +183,15 @@ static void glue(vga_draw_line4_, DEPTH)(VGACommonState *s1, uint8_t *d, + v |= expand4[GET_PLANE(data, 1)] << 1; + v |= expand4[GET_PLANE(data, 2)] << 2; + v |= expand4[GET_PLANE(data, 3)] << 3; +- ((PIXEL_TYPE *)d)[0] = palette[v >> 28]; +- ((PIXEL_TYPE *)d)[1] = palette[(v >> 24) & 0xf]; +- ((PIXEL_TYPE *)d)[2] = palette[(v >> 20) & 0xf]; +- ((PIXEL_TYPE *)d)[3] = palette[(v >> 16) & 0xf]; +- ((PIXEL_TYPE *)d)[4] = palette[(v >> 12) & 0xf]; +- ((PIXEL_TYPE *)d)[5] = palette[(v >> 8) & 0xf]; +- ((PIXEL_TYPE *)d)[6] = palette[(v >> 4) & 0xf]; +- ((PIXEL_TYPE *)d)[7] = palette[(v >> 0) & 0xf]; +- d += BPP * 8; ++ ((uint32_t *)d)[0] = palette[v >> 28]; ++ ((uint32_t *)d)[1] = palette[(v >> 24) & 0xf]; ++ ((uint32_t *)d)[2] = palette[(v >> 20) & 0xf]; ++ ((uint32_t *)d)[3] = palette[(v >> 16) & 0xf]; ++ ((uint32_t *)d)[4] = palette[(v >> 12) & 0xf]; ++ ((uint32_t *)d)[5] = palette[(v >> 8) & 0xf]; ++ ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; ++ ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; ++ d += 32; + s += 4; + } + } +@@ -263,8 +199,8 @@ static void glue(vga_draw_line4_, DEPTH)(VGACommonState *s1, uint8_t *d, + /* + * 16 color mode, dup2 horizontal + */ +-static void glue(vga_draw_line4d2_, DEPTH)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line4d2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + uint32_t plane_mask, data, v, *palette; + int x; +@@ -287,7 +223,7 @@ static void glue(vga_draw_line4d2_, DEPTH)(VGACommonState *s1, uint8_t *d, + PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]); + PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); + PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); +- d += BPP * 16; ++ d += 64; + s += 4; + } + } +@@ -297,8 +233,8 @@ static void glue(vga_draw_line4d2_, DEPTH)(VGACommonState *s1, uint8_t *d, + * + * XXX: add plane_mask support (never used in standard VGA modes) + */ +-static void glue(vga_draw_line8d2_, DEPTH)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line8d2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + uint32_t *palette; + int x; +@@ -310,7 +246,7 @@ static void glue(vga_draw_line8d2_, DEPTH)(VGACommonState *s1, uint8_t *d, + PUT_PIXEL2(d, 1, palette[s[1]]); + PUT_PIXEL2(d, 2, palette[s[2]]); + PUT_PIXEL2(d, 3, palette[s[3]]); +- d += BPP * 8; ++ d += 32; + s += 4; + } + } +@@ -320,8 +256,8 @@ static void glue(vga_draw_line8d2_, DEPTH)(VGACommonState *s1, uint8_t *d, + * + * XXX: add plane_mask support (never used in standard VGA modes) + */ +-static void glue(vga_draw_line8_, DEPTH)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line8(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + uint32_t *palette; + int x; +@@ -329,33 +265,28 @@ static void glue(vga_draw_line8_, DEPTH)(VGACommonState *s1, uint8_t *d, + palette = s1->last_palette; + width >>= 3; + for(x = 0; x < width; x++) { +- ((PIXEL_TYPE *)d)[0] = palette[s[0]]; +- ((PIXEL_TYPE *)d)[1] = palette[s[1]]; +- ((PIXEL_TYPE *)d)[2] = palette[s[2]]; +- ((PIXEL_TYPE *)d)[3] = palette[s[3]]; +- ((PIXEL_TYPE *)d)[4] = palette[s[4]]; +- ((PIXEL_TYPE *)d)[5] = palette[s[5]]; +- ((PIXEL_TYPE *)d)[6] = palette[s[6]]; +- ((PIXEL_TYPE *)d)[7] = palette[s[7]]; +- d += BPP * 8; ++ ((uint32_t *)d)[0] = palette[s[0]]; ++ ((uint32_t *)d)[1] = palette[s[1]]; ++ ((uint32_t *)d)[2] = palette[s[2]]; ++ ((uint32_t *)d)[3] = palette[s[3]]; ++ ((uint32_t *)d)[4] = palette[s[4]]; ++ ((uint32_t *)d)[5] = palette[s[5]]; ++ ((uint32_t *)d)[6] = palette[s[6]]; ++ ((uint32_t *)d)[7] = palette[s[7]]; ++ d += 32; + s += 8; + } + } + +-#endif /* DEPTH != 15 */ +- + + /* XXX: optimize */ + + /* + * 15 bit color + */ +-static void glue(vga_draw_line15_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line15(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { +-#if DEPTH == 15 && defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN) +- memcpy(d, s, width * 2); +-#else + int w; + uint32_t v, r, g, b; + +@@ -365,22 +296,18 @@ static void glue(vga_draw_line15_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, + r = (v >> 7) & 0xf8; + g = (v >> 2) & 0xf8; + b = (v << 3) & 0xf8; +- ((PIXEL_TYPE *)d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b); ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); + s += 2; +- d += BPP; ++ d += 4; + } while (--w != 0); +-#endif + } + + /* + * 16 bit color + */ +-static void glue(vga_draw_line16_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line16(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { +-#if DEPTH == 16 && defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN) +- memcpy(d, s, width * 2); +-#else + int w; + uint32_t v, r, g, b; + +@@ -390,18 +317,17 @@ static void glue(vga_draw_line16_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, + r = (v >> 8) & 0xf8; + g = (v >> 3) & 0xfc; + b = (v << 3) & 0xf8; +- ((PIXEL_TYPE *)d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b); ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); + s += 2; +- d += BPP; ++ d += 4; + } while (--w != 0); +-#endif + } + + /* + * 24 bit color + */ +-static void glue(vga_draw_line24_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line24(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + int w; + uint32_t r, g, b; +@@ -417,19 +343,19 @@ static void glue(vga_draw_line24_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, + g = s[1]; + r = s[2]; + #endif +- ((PIXEL_TYPE *)d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b); ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); + s += 3; +- d += BPP; ++ d += 4; + } while (--w != 0); + } + + /* + * 32 bit color + */ +-static void glue(vga_draw_line32_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line32(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { +-#if DEPTH == 32 && defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN) && !defined(BGR_FORMAT) ++#if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN) + memcpy(d, s, width * 4); + #else + int w; +@@ -446,16 +372,9 @@ static void glue(vga_draw_line32_, PIXEL_NAME)(VGACommonState *s1, uint8_t *d, + g = s[1]; + r = s[2]; + #endif +- ((PIXEL_TYPE *)d)[0] = glue(rgb_to_pixel, PIXEL_NAME)(r, g, b); ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); + s += 4; +- d += BPP; ++ d += 4; + } while (--w != 0); + #endif + } +- +-#undef PUT_PIXEL2 +-#undef DEPTH +-#undef BPP +-#undef PIXEL_TYPE +-#undef PIXEL_NAME +-#undef BGR_FORMAT +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-Remove-some-should-be-done-in-BIOS-comments.patch b/SOURCES/kvm-vga-Remove-some-should-be-done-in-BIOS-comments.patch new file mode 100644 index 0000000..5cfc3f5 --- /dev/null +++ b/SOURCES/kvm-vga-Remove-some-should-be-done-in-BIOS-comments.patch @@ -0,0 +1,60 @@ +From c5ee3f3aab59ff26b0fed770077a16714da9696e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 28 Apr 2016 16:07:27 +0200 +Subject: [PATCH 22/27] vga: Remove some "should be done in BIOS" comments + +RH-Author: Gerd Hoffmann +Message-id: <1461859652-20918-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 70292 +O-Subject: [virt-devel] [RHEL-7.3 qemu-kvm PATCH 1/6] vga: Remove some "should be done in BIOS" comments +Bugzilla: 1331413 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +From: Benjamin Herrenschmidt + +Not all platforms have a VGA BIOS, powerpc typically relies on +using the DISPI interface to initialize the card. + +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Gerd Hoffmann +Reviewed-by: David Gibson +(cherry picked from commit ace89b8ff21cc3fb20986a334e54e6e6a1ccf729) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 0761b9e..48dad03 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -764,14 +764,13 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + s->vbe_regs[VBE_DISPI_INDEX_ENABLE] |= VBE_DISPI_ENABLED; + vbe_fixup_regs(s); + +- /* clear the screen (should be done in BIOS) */ ++ /* clear the screen */ + if (!(val & VBE_DISPI_NOCLEARMEM)) { + memset(s->vram_ptr, 0, + s->vbe_regs[VBE_DISPI_INDEX_YRES] * s->vbe_line_offset); + } + +- /* we initialize the VGA graphic mode (should be done +- in BIOS) */ ++ /* we initialize the VGA graphic mode */ + /* graphic mode + memory map 1 */ + s->gr[VGA_GFX_MISC] = (s->gr[VGA_GFX_MISC] & ~0x0c) | 0x04 | + VGA_GR06_GRAPHICS_MODE; +@@ -804,7 +803,6 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + (shift_control << 5); + s->cr[VGA_CRTC_MAX_SCAN] &= ~0x9f; /* no double scan */ + } else { +- /* XXX: the bios should do that */ + s->bank_offset = 0; + } + s->dac_8bit = (val & VBE_DISPI_8BIT_DAC) > 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-Rename-vga_template.h-to-vga-helpers.h.patch b/SOURCES/kvm-vga-Rename-vga_template.h-to-vga-helpers.h.patch new file mode 100644 index 0000000..fe4de16 --- /dev/null +++ b/SOURCES/kvm-vga-Rename-vga_template.h-to-vga-helpers.h.patch @@ -0,0 +1,939 @@ +From b97bdaf62f567d661feaf69662cb176e43ceba60 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:18 +0200 +Subject: [PATCH 22/27] vga: Rename vga_template.h to vga-helpers.h + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-7-kraxel@redhat.com> +Patchwork-id: 76822 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 6/7] vga: Rename vga_template.h to vga-helpers.h +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Benjamin Herrenschmidt + +It's no longer a template, we only instanciate the file once. + +Keep it a #included file so the functions remain static. + +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Gerd Hoffmann +Reviewed-by: David Gibson +(cherry picked from commit e657d8ef3c810c4c46d3a61bb76103f77bdb499b) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga-helpers.h | 439 ++++++++++++++++++++++++++++++++++++++++++++++ + hw/display/vga.c | 2 +- + hw/display/vga_template.h | 439 ---------------------------------------------- + 3 files changed, 440 insertions(+), 440 deletions(-) + create mode 100644 hw/display/vga-helpers.h + delete mode 100644 hw/display/vga_template.h + +diff --git a/hw/display/vga-helpers.h b/hw/display/vga-helpers.h +new file mode 100644 +index 0000000..94f6de2 +--- /dev/null ++++ b/hw/display/vga-helpers.h +@@ -0,0 +1,439 @@ ++/* ++ * QEMU VGA Emulator templates ++ * ++ * Copyright (c) 2003 Fabrice Bellard ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++static inline void vga_draw_glyph_line(uint8_t *d, uint32_t font_data, ++ uint32_t xorcol, uint32_t bgcol) ++{ ++ ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[7] = (-((font_data >> 0) & 1) & xorcol) ^ bgcol; ++} ++ ++static void vga_draw_glyph8(uint8_t *d, int linesize, ++ const uint8_t *font_ptr, int h, ++ uint32_t fgcol, uint32_t bgcol) ++{ ++ uint32_t font_data, xorcol; ++ ++ xorcol = bgcol ^ fgcol; ++ do { ++ font_data = font_ptr[0]; ++ vga_draw_glyph_line(d, font_data, xorcol, bgcol); ++ font_ptr += 4; ++ d += linesize; ++ } while (--h); ++} ++ ++static void vga_draw_glyph16(uint8_t *d, int linesize, ++ const uint8_t *font_ptr, int h, ++ uint32_t fgcol, uint32_t bgcol) ++{ ++ uint32_t font_data, xorcol; ++ ++ xorcol = bgcol ^ fgcol; ++ do { ++ font_data = font_ptr[0]; ++ vga_draw_glyph_line(d, expand4to8[font_data >> 4], ++ xorcol, bgcol); ++ vga_draw_glyph_line(d + 32, expand4to8[font_data & 0x0f], ++ xorcol, bgcol); ++ font_ptr += 4; ++ d += linesize; ++ } while (--h); ++} ++ ++static void vga_draw_glyph9(uint8_t *d, int linesize, ++ const uint8_t *font_ptr, int h, ++ uint32_t fgcol, uint32_t bgcol, int dup9) ++{ ++ uint32_t font_data, xorcol, v; ++ ++ xorcol = bgcol ^ fgcol; ++ do { ++ font_data = font_ptr[0]; ++ ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol; ++ v = (-((font_data >> 0) & 1) & xorcol) ^ bgcol; ++ ((uint32_t *)d)[7] = v; ++ if (dup9) ++ ((uint32_t *)d)[8] = v; ++ else ++ ((uint32_t *)d)[8] = bgcol; ++ font_ptr += 4; ++ d += linesize; ++ } while (--h); ++} ++ ++/* ++ * 4 color mode ++ */ ++static void vga_draw_line2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ uint32_t plane_mask, *palette, data, v; ++ int x; ++ ++ palette = s1->last_palette; ++ plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ width >>= 3; ++ for(x = 0; x < width; x++) { ++ data = ((uint32_t *)s)[0]; ++ data &= plane_mask; ++ v = expand2[GET_PLANE(data, 0)]; ++ v |= expand2[GET_PLANE(data, 2)] << 2; ++ ((uint32_t *)d)[0] = palette[v >> 12]; ++ ((uint32_t *)d)[1] = palette[(v >> 8) & 0xf]; ++ ((uint32_t *)d)[2] = palette[(v >> 4) & 0xf]; ++ ((uint32_t *)d)[3] = palette[(v >> 0) & 0xf]; ++ ++ v = expand2[GET_PLANE(data, 1)]; ++ v |= expand2[GET_PLANE(data, 3)] << 2; ++ ((uint32_t *)d)[4] = palette[v >> 12]; ++ ((uint32_t *)d)[5] = palette[(v >> 8) & 0xf]; ++ ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; ++ ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; ++ d += 32; ++ s += 4; ++ } ++} ++ ++#define PUT_PIXEL2(d, n, v) \ ++((uint32_t *)d)[2*(n)] = ((uint32_t *)d)[2*(n)+1] = (v) ++ ++/* ++ * 4 color mode, dup2 horizontal ++ */ ++static void vga_draw_line2d2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ uint32_t plane_mask, *palette, data, v; ++ int x; ++ ++ palette = s1->last_palette; ++ plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ width >>= 3; ++ for(x = 0; x < width; x++) { ++ data = ((uint32_t *)s)[0]; ++ data &= plane_mask; ++ v = expand2[GET_PLANE(data, 0)]; ++ v |= expand2[GET_PLANE(data, 2)] << 2; ++ PUT_PIXEL2(d, 0, palette[v >> 12]); ++ PUT_PIXEL2(d, 1, palette[(v >> 8) & 0xf]); ++ PUT_PIXEL2(d, 2, palette[(v >> 4) & 0xf]); ++ PUT_PIXEL2(d, 3, palette[(v >> 0) & 0xf]); ++ ++ v = expand2[GET_PLANE(data, 1)]; ++ v |= expand2[GET_PLANE(data, 3)] << 2; ++ PUT_PIXEL2(d, 4, palette[v >> 12]); ++ PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]); ++ PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); ++ PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); ++ d += 64; ++ s += 4; ++ } ++} ++ ++/* ++ * 16 color mode ++ */ ++static void vga_draw_line4(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ uint32_t plane_mask, data, v, *palette; ++ int x; ++ ++ palette = s1->last_palette; ++ plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ width >>= 3; ++ for(x = 0; x < width; x++) { ++ data = ((uint32_t *)s)[0]; ++ data &= plane_mask; ++ v = expand4[GET_PLANE(data, 0)]; ++ v |= expand4[GET_PLANE(data, 1)] << 1; ++ v |= expand4[GET_PLANE(data, 2)] << 2; ++ v |= expand4[GET_PLANE(data, 3)] << 3; ++ ((uint32_t *)d)[0] = palette[v >> 28]; ++ ((uint32_t *)d)[1] = palette[(v >> 24) & 0xf]; ++ ((uint32_t *)d)[2] = palette[(v >> 20) & 0xf]; ++ ((uint32_t *)d)[3] = palette[(v >> 16) & 0xf]; ++ ((uint32_t *)d)[4] = palette[(v >> 12) & 0xf]; ++ ((uint32_t *)d)[5] = palette[(v >> 8) & 0xf]; ++ ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; ++ ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; ++ d += 32; ++ s += 4; ++ } ++} ++ ++/* ++ * 16 color mode, dup2 horizontal ++ */ ++static void vga_draw_line4d2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ uint32_t plane_mask, data, v, *palette; ++ int x; ++ ++ palette = s1->last_palette; ++ plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ width >>= 3; ++ for(x = 0; x < width; x++) { ++ data = ((uint32_t *)s)[0]; ++ data &= plane_mask; ++ v = expand4[GET_PLANE(data, 0)]; ++ v |= expand4[GET_PLANE(data, 1)] << 1; ++ v |= expand4[GET_PLANE(data, 2)] << 2; ++ v |= expand4[GET_PLANE(data, 3)] << 3; ++ PUT_PIXEL2(d, 0, palette[v >> 28]); ++ PUT_PIXEL2(d, 1, palette[(v >> 24) & 0xf]); ++ PUT_PIXEL2(d, 2, palette[(v >> 20) & 0xf]); ++ PUT_PIXEL2(d, 3, palette[(v >> 16) & 0xf]); ++ PUT_PIXEL2(d, 4, palette[(v >> 12) & 0xf]); ++ PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]); ++ PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); ++ PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); ++ d += 64; ++ s += 4; ++ } ++} ++ ++/* ++ * 256 color mode, double pixels ++ * ++ * XXX: add plane_mask support (never used in standard VGA modes) ++ */ ++static void vga_draw_line8d2(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ uint32_t *palette; ++ int x; ++ ++ palette = s1->last_palette; ++ width >>= 3; ++ for(x = 0; x < width; x++) { ++ PUT_PIXEL2(d, 0, palette[s[0]]); ++ PUT_PIXEL2(d, 1, palette[s[1]]); ++ PUT_PIXEL2(d, 2, palette[s[2]]); ++ PUT_PIXEL2(d, 3, palette[s[3]]); ++ d += 32; ++ s += 4; ++ } ++} ++ ++/* ++ * standard 256 color mode ++ * ++ * XXX: add plane_mask support (never used in standard VGA modes) ++ */ ++static void vga_draw_line8(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ uint32_t *palette; ++ int x; ++ ++ palette = s1->last_palette; ++ width >>= 3; ++ for(x = 0; x < width; x++) { ++ ((uint32_t *)d)[0] = palette[s[0]]; ++ ((uint32_t *)d)[1] = palette[s[1]]; ++ ((uint32_t *)d)[2] = palette[s[2]]; ++ ((uint32_t *)d)[3] = palette[s[3]]; ++ ((uint32_t *)d)[4] = palette[s[4]]; ++ ((uint32_t *)d)[5] = palette[s[5]]; ++ ((uint32_t *)d)[6] = palette[s[6]]; ++ ((uint32_t *)d)[7] = palette[s[7]]; ++ d += 32; ++ s += 8; ++ } ++} ++ ++/* ++ * 15 bit color ++ */ ++static void vga_draw_line15_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t v, r, g, b; ++ ++ w = width; ++ do { ++ v = lduw_le_p((void *)s); ++ r = (v >> 7) & 0xf8; ++ g = (v >> 2) & 0xf8; ++ b = (v << 3) & 0xf8; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 2; ++ d += 4; ++ } while (--w != 0); ++} ++ ++static void vga_draw_line15_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t v, r, g, b; ++ ++ w = width; ++ do { ++ v = lduw_be_p((void *)s); ++ r = (v >> 7) & 0xf8; ++ g = (v >> 2) & 0xf8; ++ b = (v << 3) & 0xf8; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 2; ++ d += 4; ++ } while (--w != 0); ++} ++ ++/* ++ * 16 bit color ++ */ ++static void vga_draw_line16_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t v, r, g, b; ++ ++ w = width; ++ do { ++ v = lduw_le_p((void *)s); ++ r = (v >> 8) & 0xf8; ++ g = (v >> 3) & 0xfc; ++ b = (v << 3) & 0xf8; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 2; ++ d += 4; ++ } while (--w != 0); ++} ++ ++static void vga_draw_line16_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t v, r, g, b; ++ ++ w = width; ++ do { ++ v = lduw_be_p((void *)s); ++ r = (v >> 8) & 0xf8; ++ g = (v >> 3) & 0xfc; ++ b = (v << 3) & 0xf8; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 2; ++ d += 4; ++ } while (--w != 0); ++} ++ ++/* ++ * 24 bit color ++ */ ++static void vga_draw_line24_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t r, g, b; ++ ++ w = width; ++ do { ++ b = s[0]; ++ g = s[1]; ++ r = s[2]; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 3; ++ d += 4; ++ } while (--w != 0); ++} ++ ++static void vga_draw_line24_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t r, g, b; ++ ++ w = width; ++ do { ++ r = s[0]; ++ g = s[1]; ++ b = s[2]; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 3; ++ d += 4; ++ } while (--w != 0); ++} ++ ++/* ++ * 32 bit color ++ */ ++static void vga_draw_line32_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++#ifndef HOST_WORDS_BIGENDIAN ++ memcpy(d, s, width * 4); ++#else ++ int w; ++ uint32_t r, g, b; ++ ++ w = width; ++ do { ++ b = s[0]; ++ g = s[1]; ++ r = s[2]; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 4; ++ d += 4; ++ } while (--w != 0); ++#endif ++} ++ ++static void vga_draw_line32_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++#ifdef HOST_WORDS_BIGENDIAN ++ memcpy(d, s, width * 4); ++#else ++ int w; ++ uint32_t r, g, b; ++ ++ w = width; ++ do { ++ r = s[1]; ++ g = s[2]; ++ b = s[3]; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 4; ++ d += 4; ++ } while (--w != 0); ++#endif ++} +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 50999ee..4618823 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1047,7 +1047,7 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + typedef void vga_draw_line_func(VGACommonState *s1, uint8_t *d, + const uint8_t *s, int width); + +-#include "vga_template.h" ++#include "vga-helpers.h" + + static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned b) + { +diff --git a/hw/display/vga_template.h b/hw/display/vga_template.h +deleted file mode 100644 +index 94f6de2..0000000 +--- a/hw/display/vga_template.h ++++ /dev/null +@@ -1,439 +0,0 @@ +-/* +- * QEMU VGA Emulator templates +- * +- * Copyright (c) 2003 Fabrice Bellard +- * +- * Permission is hereby granted, free of charge, to any person obtaining a copy +- * of this software and associated documentation files (the "Software"), to deal +- * in the Software without restriction, including without limitation the rights +- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +- * copies of the Software, and to permit persons to whom the Software is +- * furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +- * THE SOFTWARE. +- */ +- +-static inline void vga_draw_glyph_line(uint8_t *d, uint32_t font_data, +- uint32_t xorcol, uint32_t bgcol) +-{ +- ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol; +- ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[7] = (-((font_data >> 0) & 1) & xorcol) ^ bgcol; +-} +- +-static void vga_draw_glyph8(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol) +-{ +- uint32_t font_data, xorcol; +- +- xorcol = bgcol ^ fgcol; +- do { +- font_data = font_ptr[0]; +- vga_draw_glyph_line(d, font_data, xorcol, bgcol); +- font_ptr += 4; +- d += linesize; +- } while (--h); +-} +- +-static void vga_draw_glyph16(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol) +-{ +- uint32_t font_data, xorcol; +- +- xorcol = bgcol ^ fgcol; +- do { +- font_data = font_ptr[0]; +- vga_draw_glyph_line(d, expand4to8[font_data >> 4], +- xorcol, bgcol); +- vga_draw_glyph_line(d + 32, expand4to8[font_data & 0x0f], +- xorcol, bgcol); +- font_ptr += 4; +- d += linesize; +- } while (--h); +-} +- +-static void vga_draw_glyph9(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol, int dup9) +-{ +- uint32_t font_data, xorcol, v; +- +- xorcol = bgcol ^ fgcol; +- do { +- font_data = font_ptr[0]; +- ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol; +- ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol; +- v = (-((font_data >> 0) & 1) & xorcol) ^ bgcol; +- ((uint32_t *)d)[7] = v; +- if (dup9) +- ((uint32_t *)d)[8] = v; +- else +- ((uint32_t *)d)[8] = bgcol; +- font_ptr += 4; +- d += linesize; +- } while (--h); +-} +- +-/* +- * 4 color mode +- */ +-static void vga_draw_line2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- uint32_t plane_mask, *palette, data, v; +- int x; +- +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; +- width >>= 3; +- for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; +- data &= plane_mask; +- v = expand2[GET_PLANE(data, 0)]; +- v |= expand2[GET_PLANE(data, 2)] << 2; +- ((uint32_t *)d)[0] = palette[v >> 12]; +- ((uint32_t *)d)[1] = palette[(v >> 8) & 0xf]; +- ((uint32_t *)d)[2] = palette[(v >> 4) & 0xf]; +- ((uint32_t *)d)[3] = palette[(v >> 0) & 0xf]; +- +- v = expand2[GET_PLANE(data, 1)]; +- v |= expand2[GET_PLANE(data, 3)] << 2; +- ((uint32_t *)d)[4] = palette[v >> 12]; +- ((uint32_t *)d)[5] = palette[(v >> 8) & 0xf]; +- ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; +- ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; +- d += 32; +- s += 4; +- } +-} +- +-#define PUT_PIXEL2(d, n, v) \ +-((uint32_t *)d)[2*(n)] = ((uint32_t *)d)[2*(n)+1] = (v) +- +-/* +- * 4 color mode, dup2 horizontal +- */ +-static void vga_draw_line2d2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- uint32_t plane_mask, *palette, data, v; +- int x; +- +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; +- width >>= 3; +- for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; +- data &= plane_mask; +- v = expand2[GET_PLANE(data, 0)]; +- v |= expand2[GET_PLANE(data, 2)] << 2; +- PUT_PIXEL2(d, 0, palette[v >> 12]); +- PUT_PIXEL2(d, 1, palette[(v >> 8) & 0xf]); +- PUT_PIXEL2(d, 2, palette[(v >> 4) & 0xf]); +- PUT_PIXEL2(d, 3, palette[(v >> 0) & 0xf]); +- +- v = expand2[GET_PLANE(data, 1)]; +- v |= expand2[GET_PLANE(data, 3)] << 2; +- PUT_PIXEL2(d, 4, palette[v >> 12]); +- PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]); +- PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); +- PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); +- d += 64; +- s += 4; +- } +-} +- +-/* +- * 16 color mode +- */ +-static void vga_draw_line4(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- uint32_t plane_mask, data, v, *palette; +- int x; +- +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; +- width >>= 3; +- for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; +- data &= plane_mask; +- v = expand4[GET_PLANE(data, 0)]; +- v |= expand4[GET_PLANE(data, 1)] << 1; +- v |= expand4[GET_PLANE(data, 2)] << 2; +- v |= expand4[GET_PLANE(data, 3)] << 3; +- ((uint32_t *)d)[0] = palette[v >> 28]; +- ((uint32_t *)d)[1] = palette[(v >> 24) & 0xf]; +- ((uint32_t *)d)[2] = palette[(v >> 20) & 0xf]; +- ((uint32_t *)d)[3] = palette[(v >> 16) & 0xf]; +- ((uint32_t *)d)[4] = palette[(v >> 12) & 0xf]; +- ((uint32_t *)d)[5] = palette[(v >> 8) & 0xf]; +- ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; +- ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; +- d += 32; +- s += 4; +- } +-} +- +-/* +- * 16 color mode, dup2 horizontal +- */ +-static void vga_draw_line4d2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- uint32_t plane_mask, data, v, *palette; +- int x; +- +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; +- width >>= 3; +- for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; +- data &= plane_mask; +- v = expand4[GET_PLANE(data, 0)]; +- v |= expand4[GET_PLANE(data, 1)] << 1; +- v |= expand4[GET_PLANE(data, 2)] << 2; +- v |= expand4[GET_PLANE(data, 3)] << 3; +- PUT_PIXEL2(d, 0, palette[v >> 28]); +- PUT_PIXEL2(d, 1, palette[(v >> 24) & 0xf]); +- PUT_PIXEL2(d, 2, palette[(v >> 20) & 0xf]); +- PUT_PIXEL2(d, 3, palette[(v >> 16) & 0xf]); +- PUT_PIXEL2(d, 4, palette[(v >> 12) & 0xf]); +- PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]); +- PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); +- PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); +- d += 64; +- s += 4; +- } +-} +- +-/* +- * 256 color mode, double pixels +- * +- * XXX: add plane_mask support (never used in standard VGA modes) +- */ +-static void vga_draw_line8d2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- uint32_t *palette; +- int x; +- +- palette = s1->last_palette; +- width >>= 3; +- for(x = 0; x < width; x++) { +- PUT_PIXEL2(d, 0, palette[s[0]]); +- PUT_PIXEL2(d, 1, palette[s[1]]); +- PUT_PIXEL2(d, 2, palette[s[2]]); +- PUT_PIXEL2(d, 3, palette[s[3]]); +- d += 32; +- s += 4; +- } +-} +- +-/* +- * standard 256 color mode +- * +- * XXX: add plane_mask support (never used in standard VGA modes) +- */ +-static void vga_draw_line8(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- uint32_t *palette; +- int x; +- +- palette = s1->last_palette; +- width >>= 3; +- for(x = 0; x < width; x++) { +- ((uint32_t *)d)[0] = palette[s[0]]; +- ((uint32_t *)d)[1] = palette[s[1]]; +- ((uint32_t *)d)[2] = palette[s[2]]; +- ((uint32_t *)d)[3] = palette[s[3]]; +- ((uint32_t *)d)[4] = palette[s[4]]; +- ((uint32_t *)d)[5] = palette[s[5]]; +- ((uint32_t *)d)[6] = palette[s[6]]; +- ((uint32_t *)d)[7] = palette[s[7]]; +- d += 32; +- s += 8; +- } +-} +- +-/* +- * 15 bit color +- */ +-static void vga_draw_line15_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- int w; +- uint32_t v, r, g, b; +- +- w = width; +- do { +- v = lduw_le_p((void *)s); +- r = (v >> 7) & 0xf8; +- g = (v >> 2) & 0xf8; +- b = (v << 3) & 0xf8; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; +- d += 4; +- } while (--w != 0); +-} +- +-static void vga_draw_line15_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- int w; +- uint32_t v, r, g, b; +- +- w = width; +- do { +- v = lduw_be_p((void *)s); +- r = (v >> 7) & 0xf8; +- g = (v >> 2) & 0xf8; +- b = (v << 3) & 0xf8; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; +- d += 4; +- } while (--w != 0); +-} +- +-/* +- * 16 bit color +- */ +-static void vga_draw_line16_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- int w; +- uint32_t v, r, g, b; +- +- w = width; +- do { +- v = lduw_le_p((void *)s); +- r = (v >> 8) & 0xf8; +- g = (v >> 3) & 0xfc; +- b = (v << 3) & 0xf8; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; +- d += 4; +- } while (--w != 0); +-} +- +-static void vga_draw_line16_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- int w; +- uint32_t v, r, g, b; +- +- w = width; +- do { +- v = lduw_be_p((void *)s); +- r = (v >> 8) & 0xf8; +- g = (v >> 3) & 0xfc; +- b = (v << 3) & 0xf8; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; +- d += 4; +- } while (--w != 0); +-} +- +-/* +- * 24 bit color +- */ +-static void vga_draw_line24_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- int w; +- uint32_t r, g, b; +- +- w = width; +- do { +- b = s[0]; +- g = s[1]; +- r = s[2]; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 3; +- d += 4; +- } while (--w != 0); +-} +- +-static void vga_draw_line24_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +- int w; +- uint32_t r, g, b; +- +- w = width; +- do { +- r = s[0]; +- g = s[1]; +- b = s[2]; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 3; +- d += 4; +- } while (--w != 0); +-} +- +-/* +- * 32 bit color +- */ +-static void vga_draw_line32_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +-#ifndef HOST_WORDS_BIGENDIAN +- memcpy(d, s, width * 4); +-#else +- int w; +- uint32_t r, g, b; +- +- w = width; +- do { +- b = s[0]; +- g = s[1]; +- r = s[2]; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 4; +- d += 4; +- } while (--w != 0); +-#endif +-} +- +-static void vga_draw_line32_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) +-{ +-#ifdef HOST_WORDS_BIGENDIAN +- memcpy(d, s, width * 4); +-#else +- int w; +- uint32_t r, g, b; +- +- w = width; +- do { +- r = s[1]; +- g = s[2]; +- b = s[3]; +- ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 4; +- d += 4; +- } while (--w != 0); +-#endif +-} +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-Separate-LE-and-BE-conversion-functions.patch b/SOURCES/kvm-vga-Separate-LE-and-BE-conversion-functions.patch new file mode 100644 index 0000000..4bb351b --- /dev/null +++ b/SOURCES/kvm-vga-Separate-LE-and-BE-conversion-functions.patch @@ -0,0 +1,297 @@ +From 83678480936d5e15ffb30321a6f61e443bc1012f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:17 +0200 +Subject: [PATCH 21/27] vga: Separate LE and BE conversion functions + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-6-kraxel@redhat.com> +Patchwork-id: 76824 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 5/7] vga: Separate LE and BE conversion functions +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Benjamin Herrenschmidt + +Provide different functions for converting from an LE vs a BE +framebuffer. We cannot rely on the simple cases always being +shared surfaces since cirrus will need to always shadow for +cursor emulation, so we need the full set of functions to +be able to later handle runtime switching. + +Signed-off-by: Benjamin Herrenschmidt \ +Signed-off-by: Gerd Hoffmann +Reviewed-by: David Gibson +(cherry picked from commit 46c3a8c8ebe2966cc1f7af12626f89c83d547bfb) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 43 +++++++++++------- + hw/display/vga_template.h | 109 +++++++++++++++++++++++++++++++++++----------- + 2 files changed, 112 insertions(+), 40 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 1a292a9..50999ee 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1412,10 +1412,14 @@ enum { + VGA_DRAW_LINE4D2, + VGA_DRAW_LINE8D2, + VGA_DRAW_LINE8, +- VGA_DRAW_LINE15, +- VGA_DRAW_LINE16, +- VGA_DRAW_LINE24, +- VGA_DRAW_LINE32, ++ VGA_DRAW_LINE15_LE, ++ VGA_DRAW_LINE16_LE, ++ VGA_DRAW_LINE24_LE, ++ VGA_DRAW_LINE32_LE, ++ VGA_DRAW_LINE15_BE, ++ VGA_DRAW_LINE16_BE, ++ VGA_DRAW_LINE24_BE, ++ VGA_DRAW_LINE32_BE, + VGA_DRAW_LINE_NB, + }; + +@@ -1426,10 +1430,14 @@ static vga_draw_line_func * const vga_draw_line_table[VGA_DRAW_LINE_NB] = { + vga_draw_line4d2, + vga_draw_line8d2, + vga_draw_line8, +- vga_draw_line15, +- vga_draw_line16, +- vga_draw_line24, +- vga_draw_line32, ++ vga_draw_line15_le, ++ vga_draw_line16_le, ++ vga_draw_line24_le, ++ vga_draw_line32_le, ++ vga_draw_line15_be, ++ vga_draw_line16_be, ++ vga_draw_line24_be, ++ vga_draw_line32_be, + }; + + static int vga_get_bpp(VGACommonState *s) +@@ -1502,10 +1510,15 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + uint8_t *d; + uint32_t v, addr1, addr; + vga_draw_line_func *vga_draw_line; +-#if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN) +- static const bool byteswap = false; ++#if defined(TARGET_WORDS_BIGENDIAN) ++ static const bool big_endian_fb = true; + #else +- static const bool byteswap = true; ++ static const bool big_endian_fb = false; ++#endif ++#if defined(HOST_WORDS_BIGENDIAN) ++ static const bool byteswap = !big_endian_fb; ++#else ++ static const bool byteswap = big_endian_fb; + #endif + + full_update |= update_basic_params(s); +@@ -1606,19 +1619,19 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + bits = 8; + break; + case 15: +- v = VGA_DRAW_LINE15; ++ v = big_endian_fb ? VGA_DRAW_LINE15_BE : VGA_DRAW_LINE15_LE; + bits = 16; + break; + case 16: +- v = VGA_DRAW_LINE16; ++ v = big_endian_fb ? VGA_DRAW_LINE16_BE : VGA_DRAW_LINE16_LE; + bits = 16; + break; + case 24: +- v = VGA_DRAW_LINE24; ++ v = big_endian_fb ? VGA_DRAW_LINE24_BE : VGA_DRAW_LINE24_LE; + bits = 24; + break; + case 32: +- v = VGA_DRAW_LINE32; ++ v = big_endian_fb ? VGA_DRAW_LINE32_BE : VGA_DRAW_LINE32_LE; + bits = 32; + break; + } +diff --git a/hw/display/vga_template.h b/hw/display/vga_template.h +index 0660b52..94f6de2 100644 +--- a/hw/display/vga_template.h ++++ b/hw/display/vga_template.h +@@ -278,21 +278,36 @@ static void vga_draw_line8(VGACommonState *s1, uint8_t *d, + } + } + +- +-/* XXX: optimize */ +- + /* + * 15 bit color + */ +-static void vga_draw_line15(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line15_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + int w; + uint32_t v, r, g, b; + + w = width; + do { +- v = lduw_p((void *)s); ++ v = lduw_le_p((void *)s); ++ r = (v >> 7) & 0xf8; ++ g = (v >> 2) & 0xf8; ++ b = (v << 3) & 0xf8; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 2; ++ d += 4; ++ } while (--w != 0); ++} ++ ++static void vga_draw_line15_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t v, r, g, b; ++ ++ w = width; ++ do { ++ v = lduw_be_p((void *)s); + r = (v >> 7) & 0xf8; + g = (v >> 2) & 0xf8; + b = (v << 3) & 0xf8; +@@ -305,15 +320,33 @@ static void vga_draw_line15(VGACommonState *s1, uint8_t *d, + /* + * 16 bit color + */ +-static void vga_draw_line16(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line16_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + int w; + uint32_t v, r, g, b; + + w = width; + do { +- v = lduw_p((void *)s); ++ v = lduw_le_p((void *)s); ++ r = (v >> 8) & 0xf8; ++ g = (v >> 3) & 0xfc; ++ b = (v << 3) & 0xf8; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 2; ++ d += 4; ++ } while (--w != 0); ++} ++ ++static void vga_draw_line16_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t v, r, g, b; ++ ++ w = width; ++ do { ++ v = lduw_be_p((void *)s); + r = (v >> 8) & 0xf8; + g = (v >> 3) & 0xfc; + b = (v << 3) & 0xf8; +@@ -326,23 +359,34 @@ static void vga_draw_line16(VGACommonState *s1, uint8_t *d, + /* + * 24 bit color + */ +-static void vga_draw_line24(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line24_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { + int w; + uint32_t r, g, b; + + w = width; + do { +-#if defined(TARGET_WORDS_BIGENDIAN) +- r = s[0]; +- g = s[1]; +- b = s[2]; +-#else + b = s[0]; + g = s[1]; + r = s[2]; +-#endif ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 3; ++ d += 4; ++ } while (--w != 0); ++} ++ ++static void vga_draw_line24_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++ int w; ++ uint32_t r, g, b; ++ ++ w = width; ++ do { ++ r = s[0]; ++ g = s[1]; ++ b = s[2]; + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); + s += 3; + d += 4; +@@ -352,10 +396,10 @@ static void vga_draw_line24(VGACommonState *s1, uint8_t *d, + /* + * 32 bit color + */ +-static void vga_draw_line32(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line32_le(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) + { +-#if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN) ++#ifndef HOST_WORDS_BIGENDIAN + memcpy(d, s, width * 4); + #else + int w; +@@ -363,15 +407,30 @@ static void vga_draw_line32(VGACommonState *s1, uint8_t *d, + + w = width; + do { +-#if defined(TARGET_WORDS_BIGENDIAN) +- r = s[1]; +- g = s[2]; +- b = s[3]; +-#else + b = s[0]; + g = s[1]; + r = s[2]; ++ ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); ++ s += 4; ++ d += 4; ++ } while (--w != 0); + #endif ++} ++ ++static void vga_draw_line32_be(VGACommonState *s1, uint8_t *d, ++ const uint8_t *s, int width) ++{ ++#ifdef HOST_WORDS_BIGENDIAN ++ memcpy(d, s, width * 4); ++#else ++ int w; ++ uint32_t r, g, b; ++ ++ w = width; ++ do { ++ r = s[1]; ++ g = s[2]; ++ b = s[3]; + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); + s += 4; + d += 4; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-Start-cutting-out-non-32bpp-conversion-support.patch b/SOURCES/kvm-vga-Start-cutting-out-non-32bpp-conversion-support.patch new file mode 100644 index 0000000..222b708 --- /dev/null +++ b/SOURCES/kvm-vga-Start-cutting-out-non-32bpp-conversion-support.patch @@ -0,0 +1,413 @@ +From 08caae6c10ff9769921e408b0faa41f8c952f653 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:15 +0200 +Subject: [PATCH 19/27] vga: Start cutting out non-32bpp conversion support + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-4-kraxel@redhat.com> +Patchwork-id: 76825 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 3/7] vga: Start cutting out non-32bpp conversion support +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +From: Benjamin Herrenschmidt + +Nowadays, we either share a surface with the host, or we create +a 32bpp ARGB console surface. + +So we only need to draw/convert to 32bpp, enabling us to remove +all but one instance of vga_template.h inclusion (to be further +cleaned up), rgb_to_pixel_* etc... + +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Gerd Hoffmann +Reviewed-by: David Gibson +(cherry picked from commit 9e057c0b09c3018cd24c7a49995f8b66d5b3d1eb) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 258 +++++-------------------------------------------------- + 1 file changed, 22 insertions(+), 236 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 4e3c3f3..dab75a3 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1044,81 +1044,12 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + } + } + +-typedef void vga_draw_glyph8_func(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol); +-typedef void vga_draw_glyph9_func(uint8_t *d, int linesize, +- const uint8_t *font_ptr, int h, +- uint32_t fgcol, uint32_t bgcol, int dup9); + typedef void vga_draw_line_func(VGACommonState *s1, uint8_t *d, + const uint8_t *s, int width); + +-#define DEPTH 8 +-#include "vga_template.h" +- +-#define DEPTH 15 +-#include "vga_template.h" +- +-#define BGR_FORMAT +-#define DEPTH 15 +-#include "vga_template.h" +- +-#define DEPTH 16 +-#include "vga_template.h" +- +-#define BGR_FORMAT +-#define DEPTH 16 +-#include "vga_template.h" +- + #define DEPTH 32 + #include "vga_template.h" + +-#define BGR_FORMAT +-#define DEPTH 32 +-#include "vga_template.h" +- +-static unsigned int rgb_to_pixel8_dup(unsigned int r, unsigned int g, unsigned b) +-{ +- unsigned int col; +- col = rgb_to_pixel8(r, g, b); +- col |= col << 8; +- col |= col << 16; +- return col; +-} +- +-static unsigned int rgb_to_pixel15_dup(unsigned int r, unsigned int g, unsigned b) +-{ +- unsigned int col; +- col = rgb_to_pixel15(r, g, b); +- col |= col << 16; +- return col; +-} +- +-static unsigned int rgb_to_pixel15bgr_dup(unsigned int r, unsigned int g, +- unsigned int b) +-{ +- unsigned int col; +- col = rgb_to_pixel15bgr(r, g, b); +- col |= col << 16; +- return col; +-} +- +-static unsigned int rgb_to_pixel16_dup(unsigned int r, unsigned int g, unsigned b) +-{ +- unsigned int col; +- col = rgb_to_pixel16(r, g, b); +- col |= col << 16; +- return col; +-} +- +-static unsigned int rgb_to_pixel16bgr_dup(unsigned int r, unsigned int g, +- unsigned int b) +-{ +- unsigned int col; +- col = rgb_to_pixel16bgr(r, g, b); +- col |= col << 16; +- return col; +-} + + static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned b) + { +@@ -1127,13 +1058,6 @@ static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned + return col; + } + +-static unsigned int rgb_to_pixel32bgr_dup(unsigned int r, unsigned int g, unsigned b) +-{ +- unsigned int col; +- col = rgb_to_pixel32bgr(r, g, b); +- return col; +-} +- + /* return true if the palette was modified */ + static int update_palette16(VGACommonState *s) + { +@@ -1240,56 +1164,6 @@ static int update_basic_params(VGACommonState *s) + return full_update; + } + +-#define NB_DEPTHS 7 +- +-static inline int get_depth_index(DisplaySurface *s) +-{ +- switch (surface_bits_per_pixel(s)) { +- default: +- case 8: +- return 0; +- case 15: +- return 1; +- case 16: +- return 2; +- case 32: +- if (is_surface_bgr(s)) { +- return 4; +- } else { +- return 3; +- } +- } +-} +- +-static vga_draw_glyph8_func * const vga_draw_glyph8_table[NB_DEPTHS] = { +- vga_draw_glyph8_8, +- vga_draw_glyph8_16, +- vga_draw_glyph8_16, +- vga_draw_glyph8_32, +- vga_draw_glyph8_32, +- vga_draw_glyph8_16, +- vga_draw_glyph8_16, +-}; +- +-static vga_draw_glyph8_func * const vga_draw_glyph16_table[NB_DEPTHS] = { +- vga_draw_glyph16_8, +- vga_draw_glyph16_16, +- vga_draw_glyph16_16, +- vga_draw_glyph16_32, +- vga_draw_glyph16_32, +- vga_draw_glyph16_16, +- vga_draw_glyph16_16, +-}; +- +-static vga_draw_glyph9_func * const vga_draw_glyph9_table[NB_DEPTHS] = { +- vga_draw_glyph9_8, +- vga_draw_glyph9_16, +- vga_draw_glyph9_16, +- vga_draw_glyph9_32, +- vga_draw_glyph9_32, +- vga_draw_glyph9_16, +- vga_draw_glyph9_16, +-}; + + static const uint8_t cursor_glyph[32 * 4] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +@@ -1341,18 +1215,6 @@ static void vga_get_text_resolution(VGACommonState *s, int *pwidth, int *pheight + *pcheight = cheight; + } + +-typedef unsigned int rgb_to_pixel_dup_func(unsigned int r, unsigned int g, unsigned b); +- +-static rgb_to_pixel_dup_func * const rgb_to_pixel_dup_table[NB_DEPTHS] = { +- rgb_to_pixel8_dup, +- rgb_to_pixel15_dup, +- rgb_to_pixel16_dup, +- rgb_to_pixel32_dup, +- rgb_to_pixel32bgr_dup, +- rgb_to_pixel15bgr_dup, +- rgb_to_pixel16bgr_dup, +-}; +- + /* + * Text mode update + * Missing: +@@ -1369,11 +1231,9 @@ static void vga_draw_text(VGACommonState *s, int full_update) + uint32_t offset, fgcol, bgcol, v, cursor_offset; + uint8_t *d1, *d, *src, *dest, *cursor_ptr; + const uint8_t *font_ptr, *font_base[2]; +- int dup9, line_offset, depth_index; ++ int dup9, line_offset; + uint32_t *palette; + uint32_t *ch_attr_ptr; +- vga_draw_glyph8_func *vga_draw_glyph8; +- vga_draw_glyph9_func *vga_draw_glyph9; + int64_t now = qemu_get_clock_ms(vm_clock); + + /* compute font data address (in plane 2) */ +@@ -1425,8 +1285,7 @@ static void vga_draw_text(VGACommonState *s, int full_update) + s->last_cw = cw; + full_update = 1; + } +- s->rgb_to_pixel = +- rgb_to_pixel_dup_table[get_depth_index(surface)]; ++ s->rgb_to_pixel = rgb_to_pixel32_dup; + full_update |= update_palette16(s); + palette = s->last_palette; + x_incr = cw * surface_bytes_per_pixel(surface); +@@ -1460,13 +1319,6 @@ static void vga_draw_text(VGACommonState *s, int full_update) + s->cursor_visible_phase = !s->cursor_visible_phase; + } + +- depth_index = get_depth_index(surface); +- if (cw == 16) +- vga_draw_glyph8 = vga_draw_glyph16_table[depth_index]; +- else +- vga_draw_glyph8 = vga_draw_glyph8_table[depth_index]; +- vga_draw_glyph9 = vga_draw_glyph9_table[depth_index]; +- + dest = surface_data(surface); + linesize = surface_stride(surface); + ch_attr_ptr = s->last_ch_attr; +@@ -1496,17 +1348,20 @@ static void vga_draw_text(VGACommonState *s, int full_update) + font_ptr += 32 * 4 * ch; + bgcol = palette[cattr >> 4]; + fgcol = palette[cattr & 0x0f]; +- if (cw != 9) { +- vga_draw_glyph8(d1, linesize, +- font_ptr, cheight, fgcol, bgcol); ++ if (cw == 16) { ++ vga_draw_glyph16_32(d1, linesize, ++ font_ptr, cheight, fgcol, bgcol); ++ } else if (cw != 9) { ++ vga_draw_glyph8_32(d1, linesize, ++ font_ptr, cheight, fgcol, bgcol); + } else { + dup9 = 0; + if (ch >= 0xb0 && ch <= 0xdf && + (s->ar[VGA_ATC_MODE] & 0x04)) { + dup9 = 1; + } +- vga_draw_glyph9(d1, linesize, +- font_ptr, cheight, fgcol, bgcol, dup9); ++ vga_draw_glyph9_32(d1, linesize, ++ font_ptr, cheight, fgcol, bgcol, dup9); + } + if (src == cursor_ptr && + !(s->cr[VGA_CRTC_CURSOR_START] & 0x20) && +@@ -1521,12 +1376,15 @@ static void vga_draw_text(VGACommonState *s, int full_update) + if (line_last >= line_start && line_start < cheight) { + h = line_last - line_start + 1; + d = d1 + linesize * line_start; +- if (cw != 9) { +- vga_draw_glyph8(d, linesize, +- cursor_glyph, h, fgcol, bgcol); ++ if (cw == 16) { ++ vga_draw_glyph16_32(d, linesize, ++ cursor_glyph, h, fgcol, bgcol); ++ } else if (cw != 9) { ++ vga_draw_glyph8_32(d, linesize, ++ cursor_glyph, h, fgcol, bgcol); + } else { +- vga_draw_glyph9(d, linesize, +- cursor_glyph, h, fgcol, bgcol, 1); ++ vga_draw_glyph9_32(d, linesize, ++ cursor_glyph, h, fgcol, bgcol, 1); + } + } + } +@@ -1563,86 +1421,17 @@ enum { + VGA_DRAW_LINE_NB, + }; + +-static vga_draw_line_func * const vga_draw_line_table[NB_DEPTHS * VGA_DRAW_LINE_NB] = { +- vga_draw_line2_8, +- vga_draw_line2_16, +- vga_draw_line2_16, +- vga_draw_line2_32, ++static vga_draw_line_func * const vga_draw_line_table[VGA_DRAW_LINE_NB] = { + vga_draw_line2_32, +- vga_draw_line2_16, +- vga_draw_line2_16, +- +- vga_draw_line2d2_8, +- vga_draw_line2d2_16, +- vga_draw_line2d2_16, +- vga_draw_line2d2_32, + vga_draw_line2d2_32, +- vga_draw_line2d2_16, +- vga_draw_line2d2_16, +- +- vga_draw_line4_8, +- vga_draw_line4_16, +- vga_draw_line4_16, + vga_draw_line4_32, +- vga_draw_line4_32, +- vga_draw_line4_16, +- vga_draw_line4_16, +- +- vga_draw_line4d2_8, +- vga_draw_line4d2_16, +- vga_draw_line4d2_16, + vga_draw_line4d2_32, +- vga_draw_line4d2_32, +- vga_draw_line4d2_16, +- vga_draw_line4d2_16, +- +- vga_draw_line8d2_8, +- vga_draw_line8d2_16, +- vga_draw_line8d2_16, +- vga_draw_line8d2_32, + vga_draw_line8d2_32, +- vga_draw_line8d2_16, +- vga_draw_line8d2_16, +- +- vga_draw_line8_8, +- vga_draw_line8_16, +- vga_draw_line8_16, +- vga_draw_line8_32, + vga_draw_line8_32, +- vga_draw_line8_16, +- vga_draw_line8_16, +- +- vga_draw_line15_8, +- vga_draw_line15_15, +- vga_draw_line15_16, + vga_draw_line15_32, +- vga_draw_line15_32bgr, +- vga_draw_line15_15bgr, +- vga_draw_line15_16bgr, +- +- vga_draw_line16_8, +- vga_draw_line16_15, +- vga_draw_line16_16, + vga_draw_line16_32, +- vga_draw_line16_32bgr, +- vga_draw_line16_15bgr, +- vga_draw_line16_16bgr, +- +- vga_draw_line24_8, +- vga_draw_line24_15, +- vga_draw_line24_16, + vga_draw_line24_32, +- vga_draw_line24_32bgr, +- vga_draw_line24_15bgr, +- vga_draw_line24_16bgr, +- +- vga_draw_line32_8, +- vga_draw_line32_15, +- vga_draw_line32_16, + vga_draw_line32_32, +- vga_draw_line32_32bgr, +- vga_draw_line32_15bgr, +- vga_draw_line32_16bgr, + }; + + static int vga_get_bpp(VGACommonState *s) +@@ -1787,8 +1576,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + dpy_gfx_replace_surface(s->con, surface); + } + +- s->rgb_to_pixel = +- rgb_to_pixel_dup_table[get_depth_index(surface)]; ++ s->rgb_to_pixel = rgb_to_pixel32_dup; + + if (shift_control == 0) { + full_update |= update_palette16(s); +@@ -1837,8 +1625,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + break; + } + } +- vga_draw_line = vga_draw_line_table[v * NB_DEPTHS + +- get_depth_index(surface)]; ++ vga_draw_line = vga_draw_line_table[v]; + + if (!is_buffer_shared(surface) && s->cursor_invalidate) { + s->cursor_invalidate(s); +@@ -1936,8 +1723,7 @@ static void vga_draw_blank(VGACommonState *s, int full_update) + if (s->last_scr_width <= 0 || s->last_scr_height <= 0) + return; + +- s->rgb_to_pixel = +- rgb_to_pixel_dup_table[get_depth_index(surface)]; ++ s->rgb_to_pixel = rgb_to_pixel32_dup; + if (surface_bits_per_pixel(surface) == 8) { + val = s->rgb_to_pixel(0, 0, 0); + } else { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-add-ram_addr_t-cast.patch b/SOURCES/kvm-vga-add-ram_addr_t-cast.patch new file mode 100644 index 0000000..0a614ab --- /dev/null +++ b/SOURCES/kvm-vga-add-ram_addr_t-cast.patch @@ -0,0 +1,41 @@ +From c7db4596ac0794d7feaea30fcc5f3a05aa7210c3 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 9 Apr 2018 13:27:35 +0200 +Subject: [PATCH 01/10] vga: add ram_addr_t cast + +RH-Author: Gerd Hoffmann +Message-id: <20180409132736.24598-2-kraxel@redhat.com> +Patchwork-id: 79513 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/2] vga: add ram_addr_t cast +Bugzilla: 1553670 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow + +Reported by Coverity. + +Fixes: CID 1381409 +Signed-off-by: Gerd Hoffmann +Message-id: 20171010141323.14049-4-kraxel@redhat.com +(cherry picked from commit b0898b42ef099bc125db1fbf62b7f02b505ef3a2) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 017e951..8e6c6d6 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1534,7 +1534,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + disp_width = width; + + region_start = (s->start_addr * 4); +- region_end = region_start + s->line_offset * height; ++ region_end = region_start + (ram_addr_t)s->line_offset * height; + if (region_end > s->vbe_size) { + /* wraps around (can happen with cirrus vbe modes) */ + region_start = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-add-sr_vbe-register-set.patch b/SOURCES/kvm-vga-add-sr_vbe-register-set.patch new file mode 100644 index 0000000..49bd9a5 --- /dev/null +++ b/SOURCES/kvm-vga-add-sr_vbe-register-set.patch @@ -0,0 +1,252 @@ +From 40d4a0ec487abcde65d4175dde0c9dda45b570f9 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 16 Jun 2016 15:30:11 +0200 +Subject: [PATCH 2/2] vga: add sr_vbe register set + +RH-Author: Gerd Hoffmann +Message-id: <1466091011-8095-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 70639 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] vga: add sr_vbe register set +Bugzilla: 1346982 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert + +Commit "fd3c136 vga: make sure vga register setup for vbe stays intact +(CVE-2016-3712)." causes a regression. The win7 installer is unhappy +because it can't freely modify vga registers any more while in vbe mode. + +This patch introduces a new sr_vbe register set. The vbe_update_vgaregs +will fill sr_vbe[] instead of sr[]. Normal vga register reads and +writes go to sr[]. Any sr register read access happens through a new +sr() helper function which will read from sr_vbe[] with vbe active and +from sr[] otherwise. + +This way we can allow guests update sr[] registers as they want, without +allowing them disrupt vbe video modes that way. + +Cc: qemu-stable@nongnu.org +Reported-by: Thomas Lamprecht +Signed-off-by: Gerd Hoffmann +Message-id: 1463475294-14119-1-git-send-email-kraxel@redhat.com +(cherry picked from commit 94ef4f337fb614f18b765a8e0e878a4c23cdedcd) +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/display/vga.c + +[ RHEL-7 note: context differences in vga_update_memory_access ] +--- + hw/display/vga.c | 50 ++++++++++++++++++++++++++++---------------------- + hw/display/vga_int.h | 1 + + 2 files changed, 29 insertions(+), 22 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index f049b26..4e3c3f3 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -173,6 +173,11 @@ static inline bool vbe_enabled(VGACommonState *s) + return s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED; + } + ++static inline uint8_t sr(VGACommonState *s, int idx) ++{ ++ return vbe_enabled(s) ? s->sr_vbe[idx] : s->sr[idx]; ++} ++ + static void vga_update_memory_access(VGACommonState *s) + { + MemoryRegion *region, *old_region = s->chain4_alias; +@@ -180,8 +185,8 @@ static void vga_update_memory_access(VGACommonState *s) + + s->chain4_alias = NULL; + +- if ((s->sr[VGA_SEQ_PLANE_WRITE] & VGA_SR02_ALL_PLANES) == +- VGA_SR02_ALL_PLANES && s->sr[VGA_SEQ_MEMORY_MODE] & VGA_SR04_CHN_4M) { ++ if ((sr(s, VGA_SEQ_PLANE_WRITE) & VGA_SR02_ALL_PLANES) == ++ VGA_SR02_ALL_PLANES && sr(s, VGA_SEQ_MEMORY_MODE) & VGA_SR04_CHN_4M) { + offset = 0; + switch ((s->gr[VGA_GFX_MISC] >> 2) & 3) { + case 0: +@@ -257,7 +262,7 @@ static void vga_precise_update_retrace_info(VGACommonState *s) + ((s->cr[VGA_CRTC_OVERFLOW] >> 6) & 2)) << 8); + vretr_end_line = s->cr[VGA_CRTC_V_SYNC_END] & 0xf; + +- clocking_mode = (s->sr[VGA_SEQ_CLOCK_MODE] >> 3) & 1; ++ clocking_mode = (sr(s, VGA_SEQ_CLOCK_MODE) >> 3) & 1; + clock_sel = (s->msr >> 2) & 3; + dots = (s->msr & 1) ? 8 : 9; + +@@ -513,7 +518,6 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val) + printf("vga: write SR%x = 0x%02x\n", s->sr_index, val); + #endif + s->sr[s->sr_index] = val & sr_mask[s->sr_index]; +- vbe_update_vgaregs(s); + if (s->sr_index == VGA_SEQ_CLOCK_MODE) { + s->update_retrace_info(s); + } +@@ -707,13 +711,13 @@ static void vbe_update_vgaregs(VGACommonState *s) + + if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) { + shift_control = 0; +- s->sr[VGA_SEQ_CLOCK_MODE] &= ~8; /* no double line */ ++ s->sr_vbe[VGA_SEQ_CLOCK_MODE] &= ~8; /* no double line */ + } else { + shift_control = 2; + /* set chain 4 mode */ +- s->sr[VGA_SEQ_MEMORY_MODE] |= VGA_SR04_CHN_4M; ++ s->sr_vbe[VGA_SEQ_MEMORY_MODE] |= VGA_SR04_CHN_4M; + /* activate all planes */ +- s->sr[VGA_SEQ_PLANE_WRITE] |= VGA_SR02_ALL_PLANES; ++ s->sr_vbe[VGA_SEQ_PLANE_WRITE] |= VGA_SR02_ALL_PLANES; + } + s->gr[VGA_GFX_MODE] = (s->gr[VGA_GFX_MODE] & ~0x60) | + (shift_control << 5); +@@ -863,7 +867,7 @@ uint32_t vga_mem_readb(VGACommonState *s, hwaddr addr) + break; + } + +- if (s->sr[VGA_SEQ_MEMORY_MODE] & VGA_SR04_CHN_4M) { ++ if (sr(s, VGA_SEQ_MEMORY_MODE) & VGA_SR04_CHN_4M) { + /* chain 4 mode : simplest access */ + assert(addr < s->vram_size); + ret = s->vram_ptr[addr]; +@@ -931,11 +935,11 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + break; + } + +- if (s->sr[VGA_SEQ_MEMORY_MODE] & VGA_SR04_CHN_4M) { ++ if (sr(s, VGA_SEQ_MEMORY_MODE) & VGA_SR04_CHN_4M) { + /* chain 4 mode : simplest access */ + plane = addr & 3; + mask = (1 << plane); +- if (s->sr[VGA_SEQ_PLANE_WRITE] & mask) { ++ if (sr(s, VGA_SEQ_PLANE_WRITE) & mask) { + assert(addr < s->vram_size); + s->vram_ptr[addr] = val; + #ifdef DEBUG_VGA_MEM +@@ -948,7 +952,7 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + /* odd/even mode (aka text mode mapping) */ + plane = (s->gr[VGA_GFX_PLANE_READ] & 2) | (addr & 1); + mask = (1 << plane); +- if (s->sr[VGA_SEQ_PLANE_WRITE] & mask) { ++ if (sr(s, VGA_SEQ_PLANE_WRITE) & mask) { + addr = ((addr & ~1) << 1) | plane; + if (addr >= s->vram_size) { + return; +@@ -1023,7 +1027,7 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + + do_write: + /* mask data according to sr[2] */ +- mask = s->sr[VGA_SEQ_PLANE_WRITE]; ++ mask = sr(s, VGA_SEQ_PLANE_WRITE); + s->plane_updated |= mask; /* only used to detect font change */ + write_mask = mask16[mask]; + if (addr * sizeof(uint32_t) >= s->vram_size) { +@@ -1314,10 +1318,10 @@ static void vga_get_text_resolution(VGACommonState *s, int *pwidth, int *pheight + /* total width & height */ + cheight = (s->cr[VGA_CRTC_MAX_SCAN] & 0x1f) + 1; + cwidth = 8; +- if (!(s->sr[VGA_SEQ_CLOCK_MODE] & VGA_SR01_CHAR_CLK_8DOTS)) { ++ if (!(sr(s, VGA_SEQ_CLOCK_MODE) & VGA_SR01_CHAR_CLK_8DOTS)) { + cwidth = 9; + } +- if (s->sr[VGA_SEQ_CLOCK_MODE] & 0x08) { ++ if (sr(s, VGA_SEQ_CLOCK_MODE) & 0x08) { + cwidth = 16; /* NOTE: no 18 pixel wide */ + } + width = (s->cr[VGA_CRTC_H_DISP] + 1); +@@ -1373,7 +1377,7 @@ static void vga_draw_text(VGACommonState *s, int full_update) + int64_t now = qemu_get_clock_ms(vm_clock); + + /* compute font data address (in plane 2) */ +- v = s->sr[VGA_SEQ_CHARACTER_MAP]; ++ v = sr(s, VGA_SEQ_CHARACTER_MAP); + offset = (((v >> 4) & 1) | ((v << 1) & 6)) * 8192 * 4 + 2; + if (offset != s->font_offsets[0]) { + s->font_offsets[0] = offset; +@@ -1744,11 +1748,11 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + } + + if (shift_control == 0) { +- if (s->sr[VGA_SEQ_CLOCK_MODE] & 8) { ++ if (sr(s, VGA_SEQ_CLOCK_MODE) & 8) { + disp_width <<= 1; + } + } else if (shift_control == 1) { +- if (s->sr[VGA_SEQ_CLOCK_MODE] & 8) { ++ if (sr(s, VGA_SEQ_CLOCK_MODE) & 8) { + disp_width <<= 1; + } + } +@@ -1788,7 +1792,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + + if (shift_control == 0) { + full_update |= update_palette16(s); +- if (s->sr[VGA_SEQ_CLOCK_MODE] & 8) { ++ if (sr(s, VGA_SEQ_CLOCK_MODE) & 8) { + v = VGA_DRAW_LINE4D2; + } else { + v = VGA_DRAW_LINE4; +@@ -1796,7 +1800,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + bits = 4; + } else if (shift_control == 1) { + full_update |= update_palette16(s); +- if (s->sr[VGA_SEQ_CLOCK_MODE] & 8) { ++ if (sr(s, VGA_SEQ_CLOCK_MODE) & 8) { + v = VGA_DRAW_LINE2D2; + } else { + v = VGA_DRAW_LINE2; +@@ -1844,7 +1848,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + #if 0 + printf("w=%d h=%d v=%d line_offset=%d cr[0x09]=0x%02x cr[0x17]=0x%02x linecmp=%d sr[0x01]=0x%02x\n", + width, height, v, line_offset, s->cr[9], s->cr[VGA_CRTC_MODE], +- s->line_compare, s->sr[VGA_SEQ_CLOCK_MODE]); ++ s->line_compare, sr(s, VGA_SEQ_CLOCK_MODE)); + #endif + addr1 = (s->start_addr * 4); + bwidth = (width * bits + 7) / 8; +@@ -2003,6 +2007,7 @@ void vga_common_reset(VGACommonState *s) + { + s->sr_index = 0; + memset(s->sr, '\0', sizeof(s->sr)); ++ memset(s->sr_vbe, '\0', sizeof(s->sr_vbe)); + s->gr_index = 0; + memset(s->gr, '\0', sizeof(s->gr)); + s->ar_index = 0; +@@ -2104,10 +2109,10 @@ static void vga_update_text(void *opaque, console_ch_t *chardata) + /* total width & height */ + cheight = (s->cr[VGA_CRTC_MAX_SCAN] & 0x1f) + 1; + cw = 8; +- if (!(s->sr[VGA_SEQ_CLOCK_MODE] & VGA_SR01_CHAR_CLK_8DOTS)) { ++ if (!(sr(s, VGA_SEQ_CLOCK_MODE) & VGA_SR01_CHAR_CLK_8DOTS)) { + cw = 9; + } +- if (s->sr[VGA_SEQ_CLOCK_MODE] & 0x08) { ++ if (sr(s, VGA_SEQ_CLOCK_MODE) & 0x08) { + cw = 16; /* NOTE: no 18 pixel wide */ + } + width = (s->cr[VGA_CRTC_H_DISP] + 1); +@@ -2273,6 +2278,7 @@ static int vga_common_post_load(void *opaque, int version_id) + + /* force refresh */ + s->graphic_mode = -1; ++ vbe_update_vgaregs(s); + return 0; + } + +diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h +index 5a2f466..7c758ac 100644 +--- a/hw/display/vga_int.h ++++ b/hw/display/vga_int.h +@@ -98,6 +98,7 @@ typedef struct VGACommonState { + MemoryRegion *chain4_alias; + uint8_t sr_index; + uint8_t sr[256]; ++ uint8_t sr_vbe[256]; + uint8_t gr_index; + uint8_t gr[256]; + uint8_t ar_index; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-add-vbe_enabled-helper.patch b/SOURCES/kvm-vga-add-vbe_enabled-helper.patch new file mode 100644 index 0000000..fa400af --- /dev/null +++ b/SOURCES/kvm-vga-add-vbe_enabled-helper.patch @@ -0,0 +1,86 @@ +From 6e615e8fbbd979134868bcd63150365d48d12137 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 28 Apr 2016 16:07:29 +0200 +Subject: [PATCH 24/27] vga: add vbe_enabled() helper + +RH-Author: Gerd Hoffmann +Message-id: <1461859652-20918-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 70294 +O-Subject: [virt-devel] [RHEL-7.3 qemu-kvm PATCH 3/6] vga: add vbe_enabled() helper +Bugzilla: 1331413 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +Makes code a bit easier to read. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index ba171ba..b694a26 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -166,6 +166,11 @@ static uint32_t expand4[256]; + static uint16_t expand2[256]; + static uint8_t expand4to8[16]; + ++static inline bool vbe_enabled(VGACommonState *s) ++{ ++ return s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED; ++} ++ + static void vga_update_memory_access(VGACommonState *s) + { + MemoryRegion *region, *old_region = s->chain4_alias; +@@ -591,7 +596,7 @@ static void vbe_fixup_regs(VGACommonState *s) + uint16_t *r = s->vbe_regs; + uint32_t bits, linelength, maxy, offset; + +- if (!(r[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED)) { ++ if (!vbe_enabled(s)) { + /* vbe is turned off -- nothing to do */ + return; + } +@@ -775,7 +780,7 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + /* width */ + s->cr[VGA_CRTC_H_DISP] = + (s->vbe_regs[VBE_DISPI_INDEX_XRES] >> 3) - 1; +- /* height (only meaningful if < 1024) */ ++ /* height (only meaningful if < 1024) */ + h = s->vbe_regs[VBE_DISPI_INDEX_YRES] - 1; + s->cr[VGA_CRTC_V_DISP_END] = h; + s->cr[VGA_CRTC_OVERFLOW] = (s->cr[VGA_CRTC_OVERFLOW] & ~0x42) | +@@ -1170,7 +1175,7 @@ static void vga_get_offsets(VGACommonState *s, + { + uint32_t start_addr, line_offset, line_compare; + +- if (s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) { ++ if (vbe_enabled(s)) { + line_offset = s->vbe_line_offset; + start_addr = s->vbe_start_addr; + line_compare = 65535; +@@ -1623,7 +1628,7 @@ static int vga_get_bpp(VGACommonState *s) + { + int ret; + +- if (s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) { ++ if (vbe_enabled(s)) { + ret = s->vbe_regs[VBE_DISPI_INDEX_BPP]; + } else { + ret = 0; +@@ -1635,7 +1640,7 @@ static void vga_get_resolution(VGACommonState *s, int *pwidth, int *pheight) + { + int width, height; + +- if (s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) { ++ if (vbe_enabled(s)) { + width = s->vbe_regs[VBE_DISPI_INDEX_XRES]; + height = s->vbe_regs[VBE_DISPI_INDEX_YRES]; + } else { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-check-the-validation-of-memory-addr-when-draw-te.patch b/SOURCES/kvm-vga-check-the-validation-of-memory-addr-when-draw-te.patch new file mode 100644 index 0000000..4280086 --- /dev/null +++ b/SOURCES/kvm-vga-check-the-validation-of-memory-addr-when-draw-te.patch @@ -0,0 +1,69 @@ +From 5c99bd7a9de1f1a64d948776482ae7103091fac2 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 26 Jan 2018 07:30:05 +0100 +Subject: [PATCH 2/4] vga: check the validation of memory addr when draw text + +RH-Author: Gerd Hoffmann +Message-id: <20180126073005.15344-2-kraxel@redhat.com> +Patchwork-id: 78710 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 1/1] vga: check the validation of memory addr when draw text +Bugzilla: 1534691 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Miroslav Rezanina + +From: linzhecheng + +Start a vm with qemu-kvm -enable-kvm -vnc :66 -smp 1 -m 1024 -hda +redhat_5.11.qcow2 -device pcnet -vga cirrus, +then use VNC client to connect to VM, and excute the code below in guest +OS will lead to qemu crash: + +int main() + { + iopl(3); + srand(time(NULL)); + int a,b; + while(1){ + a = rand()%0x100; + b = 0x3c0 + (rand()%0x20); + outb(a,b); + } + return 0; +} + +The above code is writing the registers of VGA randomly. +We can write VGA CRT controller registers index 0x0C or 0x0D +(which is the start address register) to modify the +the display memory address of the upper left pixel +or character of the screen. The address may be out of the +range of vga ram. So we should check the validation of memory address +when reading or writing it to avoid segfault. + +Signed-off-by: linzhecheng +Message-id: 20180111132724.13744-1-linzhecheng@huawei.com +Fixes: CVE-2018-5683 +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 191f59dc17396bb5a8da50f8c59b6e0a430711a4) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index c40744f..017e951 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1328,6 +1328,9 @@ static void vga_draw_text(VGACommonState *s, int full_update) + cx_min = width; + cx_max = -1; + for(cx = 0; cx < width; cx++) { ++ if (src + sizeof(uint16_t) > s->vram_ptr + s->vram_size) { ++ break; ++ } + ch_attr = *(uint16_t *)src; + if (full_update || ch_attr != *ch_attr_ptr || src == cursor_ptr) { + if (cx < cx_min) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-drop-line_offset-variable.patch b/SOURCES/kvm-vga-drop-line_offset-variable.patch new file mode 100644 index 0000000..fbbb2b8 --- /dev/null +++ b/SOURCES/kvm-vga-drop-line_offset-variable.patch @@ -0,0 +1,54 @@ +From 52c3ce4ea3447ae11bd18184b7659c130ec676df Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 20 Oct 2017 11:06:16 +0200 +Subject: [PATCH 1/7] vga: drop line_offset variable + +RH-Author: Gerd Hoffmann +Message-id: <20171020110619.2541-9-kraxel@redhat.com> +Patchwork-id: 77399 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 08/11] vga: drop line_offset variable +Bugzilla: 1501295 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 362f811793ff6cb4d209ab61d76cc4f841bb5e46) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 5b0b864..dda3f5f 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1504,7 +1504,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + { + DisplaySurface *surface = qemu_console_surface(s->con); + int y1, y, update, linesize, y_start, double_scan, mask, depth; +- int width, height, shift_control, line_offset, bwidth, bits; ++ int width, height, shift_control, bwidth, bits; + ram_addr_t page0, page1, page_min, page_max; + int disp_width, multi_scan, multi_run; + uint8_t *d; +@@ -1642,7 +1642,6 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + s->cursor_invalidate(s); + } + +- line_offset = s->line_offset; + #if 0 + printf("w=%d h=%d v=%d line_offset=%d cr[0x09]=0x%02x cr[0x17]=0x%02x linecmp=%d sr[0x01]=0x%02x\n", + width, height, v, line_offset, s->cr[9], s->cr[VGA_CRTC_MODE], +@@ -1697,7 +1696,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + if (!multi_run) { + mask = (s->cr[VGA_CRTC_MODE] & 3) ^ 3; + if ((y1 & mask) == mask) +- addr1 += line_offset; ++ addr1 += s->line_offset; + y1++; + multi_run = multi_scan; + } else { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-factor-out-vga-register-setup.patch b/SOURCES/kvm-vga-factor-out-vga-register-setup.patch new file mode 100644 index 0000000..01f3261 --- /dev/null +++ b/SOURCES/kvm-vga-factor-out-vga-register-setup.patch @@ -0,0 +1,136 @@ +From 445ec835479fd06142078a59f1a88f2b30708930 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 28 Apr 2016 16:07:30 +0200 +Subject: [PATCH 25/27] vga: factor out vga register setup + +RH-Author: Gerd Hoffmann +Message-id: <1461859652-20918-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 70295 +O-Subject: [virt-devel] [RHEL-7.3 qemu-kvm PATCH 4/6] vga: factor out vga register setup +Bugzilla: 1331413 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +When enabling vbe mode qemu will setup a bunch of vga registers to make +sure the vga emulation operates in correct mode for a linear +framebuffer. Move that code to a separate function so we can call it +from other places too. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 78 ++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 44 insertions(+), 34 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index b694a26..4cc0df5 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -671,6 +671,49 @@ static void vbe_fixup_regs(VGACommonState *s) + s->vbe_start_addr = offset / 4; + } + ++/* we initialize the VGA graphic mode */ ++static void vbe_update_vgaregs(VGACommonState *s) ++{ ++ int h, shift_control; ++ ++ if (!vbe_enabled(s)) { ++ /* vbe is turned off -- nothing to do */ ++ return; ++ } ++ ++ /* graphic mode + memory map 1 */ ++ s->gr[VGA_GFX_MISC] = (s->gr[VGA_GFX_MISC] & ~0x0c) | 0x04 | ++ VGA_GR06_GRAPHICS_MODE; ++ s->cr[VGA_CRTC_MODE] |= 3; /* no CGA modes */ ++ s->cr[VGA_CRTC_OFFSET] = s->vbe_line_offset >> 3; ++ /* width */ ++ s->cr[VGA_CRTC_H_DISP] = ++ (s->vbe_regs[VBE_DISPI_INDEX_XRES] >> 3) - 1; ++ /* height (only meaningful if < 1024) */ ++ h = s->vbe_regs[VBE_DISPI_INDEX_YRES] - 1; ++ s->cr[VGA_CRTC_V_DISP_END] = h; ++ s->cr[VGA_CRTC_OVERFLOW] = (s->cr[VGA_CRTC_OVERFLOW] & ~0x42) | ++ ((h >> 7) & 0x02) | ((h >> 3) & 0x40); ++ /* line compare to 1023 */ ++ s->cr[VGA_CRTC_LINE_COMPARE] = 0xff; ++ s->cr[VGA_CRTC_OVERFLOW] |= 0x10; ++ s->cr[VGA_CRTC_MAX_SCAN] |= 0x40; ++ ++ if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) { ++ shift_control = 0; ++ s->sr[VGA_SEQ_CLOCK_MODE] &= ~8; /* no double line */ ++ } else { ++ shift_control = 2; ++ /* set chain 4 mode */ ++ s->sr[VGA_SEQ_MEMORY_MODE] |= VGA_SR04_CHN_4M; ++ /* activate all planes */ ++ s->sr[VGA_SEQ_PLANE_WRITE] |= VGA_SR02_ALL_PLANES; ++ } ++ s->gr[VGA_GFX_MODE] = (s->gr[VGA_GFX_MODE] & ~0x60) | ++ (shift_control << 5); ++ s->cr[VGA_CRTC_MAX_SCAN] &= ~0x9f; /* no double scan */ ++} ++ + static uint32_t vbe_ioport_read_index(void *opaque, uint32_t addr) + { + VGACommonState *s = opaque; +@@ -757,52 +800,19 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + case VBE_DISPI_INDEX_ENABLE: + if ((val & VBE_DISPI_ENABLED) && + !(s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED)) { +- int h, shift_control; + + s->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] = 0; + s->vbe_regs[VBE_DISPI_INDEX_X_OFFSET] = 0; + s->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET] = 0; + s->vbe_regs[VBE_DISPI_INDEX_ENABLE] |= VBE_DISPI_ENABLED; + vbe_fixup_regs(s); ++ vbe_update_vgaregs(s); + + /* clear the screen */ + if (!(val & VBE_DISPI_NOCLEARMEM)) { + memset(s->vram_ptr, 0, + s->vbe_regs[VBE_DISPI_INDEX_YRES] * s->vbe_line_offset); + } +- +- /* we initialize the VGA graphic mode */ +- /* graphic mode + memory map 1 */ +- s->gr[VGA_GFX_MISC] = (s->gr[VGA_GFX_MISC] & ~0x0c) | 0x04 | +- VGA_GR06_GRAPHICS_MODE; +- s->cr[VGA_CRTC_MODE] |= 3; /* no CGA modes */ +- s->cr[VGA_CRTC_OFFSET] = s->vbe_line_offset >> 3; +- /* width */ +- s->cr[VGA_CRTC_H_DISP] = +- (s->vbe_regs[VBE_DISPI_INDEX_XRES] >> 3) - 1; +- /* height (only meaningful if < 1024) */ +- h = s->vbe_regs[VBE_DISPI_INDEX_YRES] - 1; +- s->cr[VGA_CRTC_V_DISP_END] = h; +- s->cr[VGA_CRTC_OVERFLOW] = (s->cr[VGA_CRTC_OVERFLOW] & ~0x42) | +- ((h >> 7) & 0x02) | ((h >> 3) & 0x40); +- /* line compare to 1023 */ +- s->cr[VGA_CRTC_LINE_COMPARE] = 0xff; +- s->cr[VGA_CRTC_OVERFLOW] |= 0x10; +- s->cr[VGA_CRTC_MAX_SCAN] |= 0x40; +- +- if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) { +- shift_control = 0; +- s->sr[VGA_SEQ_CLOCK_MODE] &= ~8; /* no double line */ +- } else { +- shift_control = 2; +- /* set chain 4 mode */ +- s->sr[VGA_SEQ_MEMORY_MODE] |= VGA_SR04_CHN_4M; +- /* activate all planes */ +- s->sr[VGA_SEQ_PLANE_WRITE] |= VGA_SR02_ALL_PLANES; +- } +- s->gr[VGA_GFX_MODE] = (s->gr[VGA_GFX_MODE] & ~0x60) | +- (shift_control << 5); +- s->cr[VGA_CRTC_MAX_SCAN] &= ~0x9f; /* no double scan */ + } else { + s->bank_offset = 0; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-fix-banked-access-bounds-checking-CVE-2016-xxxx.patch b/SOURCES/kvm-vga-fix-banked-access-bounds-checking-CVE-2016-xxxx.patch new file mode 100644 index 0000000..681e31b --- /dev/null +++ b/SOURCES/kvm-vga-fix-banked-access-bounds-checking-CVE-2016-xxxx.patch @@ -0,0 +1,108 @@ +From 27bca97bf22a55b1be7611e07c7592fcef5dd7cc Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 28 Apr 2016 16:07:28 +0200 +Subject: [PATCH 23/27] vga: fix banked access bounds checking (CVE-2016-xxxx). + +RH-Author: Gerd Hoffmann +Message-id: <1461859652-20918-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 70293 +O-Subject: [virt-devel] [RHEL-7.3 qemu-kvm PATCH 2/6] vga: fix banked access bounds checking (CVE-2016-xxxx). +Bugzilla: 1331413 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +vga allows banked access to video memory using the window at 0xa00000 +and it supports a different access modes with different address +calculations. + +The VBE bochs extentions support banked access too, using the +VBE_DISPI_INDEX_BANK register. The code tries to take the different +address calculations into account and applies different limits to +VBE_DISPI_INDEX_BANK depending on the current access mode. + +Which is probably effective in stopping misprogramming by accident. +But from a security point of view completely useless as an attacker +can easily change access modes after setting the bank register. + +Drop the bogus check, add range checks to vga_mem_{readb,writeb} +instead. + +Reported-by: Qinghao Tang +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 23 +++++++++++++++++------ + 1 file changed, 17 insertions(+), 6 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 48dad03..ba171ba 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -744,11 +744,7 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + vbe_fixup_regs(s); + break; + case VBE_DISPI_INDEX_BANK: +- if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) { +- val &= (s->vbe_bank_mask >> 2); +- } else { +- val &= s->vbe_bank_mask; +- } ++ val &= s->vbe_bank_mask; + s->vbe_regs[s->vbe_index] = val; + s->bank_offset = (val << 16); + vga_update_memory_access(s); +@@ -847,13 +843,21 @@ uint32_t vga_mem_readb(VGACommonState *s, hwaddr addr) + + if (s->sr[VGA_SEQ_MEMORY_MODE] & VGA_SR04_CHN_4M) { + /* chain 4 mode : simplest access */ ++ assert(addr < s->vram_size); + ret = s->vram_ptr[addr]; + } else if (s->gr[VGA_GFX_MODE] & 0x10) { + /* odd/even mode (aka text mode mapping) */ + plane = (s->gr[VGA_GFX_PLANE_READ] & 2) | (addr & 1); +- ret = s->vram_ptr[((addr & ~1) << 1) | plane]; ++ addr = ((addr & ~1) << 1) | plane; ++ if (addr >= s->vram_size) { ++ return 0xff; ++ } ++ ret = s->vram_ptr[addr]; + } else { + /* standard VGA latched access */ ++ if (addr * sizeof(uint32_t) >= s->vram_size) { ++ return 0xff; ++ } + s->latch = ((uint32_t *)s->vram_ptr)[addr]; + + if (!(s->gr[VGA_GFX_MODE] & 0x08)) { +@@ -910,6 +914,7 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + plane = addr & 3; + mask = (1 << plane); + if (s->sr[VGA_SEQ_PLANE_WRITE] & mask) { ++ assert(addr < s->vram_size); + s->vram_ptr[addr] = val; + #ifdef DEBUG_VGA_MEM + printf("vga: chain4: [0x" TARGET_FMT_plx "]\n", addr); +@@ -923,6 +928,9 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + mask = (1 << plane); + if (s->sr[VGA_SEQ_PLANE_WRITE] & mask) { + addr = ((addr & ~1) << 1) | plane; ++ if (addr >= s->vram_size) { ++ return; ++ } + s->vram_ptr[addr] = val; + #ifdef DEBUG_VGA_MEM + printf("vga: odd/even: [0x" TARGET_FMT_plx "]\n", addr); +@@ -996,6 +1004,9 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + mask = s->sr[VGA_SEQ_PLANE_WRITE]; + s->plane_updated |= mask; /* only used to detect font change */ + write_mask = mask16[mask]; ++ if (addr * sizeof(uint32_t) >= s->vram_size) { ++ return; ++ } + ((uint32_t *)s->vram_ptr)[addr] = + (((uint32_t *)s->vram_ptr)[addr] & ~write_mask) | + (val & write_mask); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-fix-invalid-read-after-free.patch b/SOURCES/kvm-vga-fix-invalid-read-after-free.patch new file mode 100644 index 0000000..c0cc8e5 --- /dev/null +++ b/SOURCES/kvm-vga-fix-invalid-read-after-free.patch @@ -0,0 +1,73 @@ +From 92ff5f7388ad0e0826c8ca6fc362b0f84a37f26c Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 12 Nov 2014 13:05:33 +0100 +Subject: [PATCH 31/41] vga: fix invalid read after free +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Message-id: <1415797533-28127-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 62323 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] vga: fix invalid read after free +Bugzilla: 1161890 +RH-Acked-by: dgibson +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini + +From: Marc-André Lureau + +After calling dpy_gfx_replace_surface(s->con, surface), the outer +surface is invalid. + +==5370== Invalid read of size 4 +==5370== at 0x460229: surface_bits_per_pixel (console.h:250) +==5370== by 0x466A81: get_depth_index (vga.c:1173) +==5370== by 0x467EC2: vga_draw_graphic (vga.c:1718) +==5370== by 0x4687A5: vga_update_display (vga.c:1914) +==5370== by 0x2A782E: qxl_hw_update (qxl.c:1766) +==5370== by 0x3EB83B: graphic_hw_update (console.c:254) +==5370== by 0x3FBE31: qemu_spice_display_refresh (spice-display.c:418) +==5370== by 0x2A7D01: display_refresh (qxl.c:1886) +==5370== by 0x3EEE1C: dpy_refresh (console.c:1436) +==5370== by 0x3EB543: gui_update (console.c:192) +==5370== by 0x3C43B3: timerlist_run_timers (qemu-timer.c:488) +==5370== by 0x3C4416: qemu_clock_run_timers (qemu-timer.c:499) +==5370== Address 0x22ffb1e0 is 0 bytes inside a block of size 56 free'd +==5370== at 0x4A074C4: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) +==5370== by 0x4245FC: free_and_trace (vl.c:2771) +==5370== by 0x50899AE: g_free (gmem.c:252) +==5370== by 0x3EE8D3: qemu_free_displaysurface (console.c:1332) +==5370== by 0x3EEDB7: dpy_gfx_replace_surface (console.c:1427) +==5370== by 0x467EB6: vga_draw_graphic (vga.c:1714) +==5370== by 0x4687A5: vga_update_display (vga.c:1914) +==5370== by 0x2A782E: qxl_hw_update (qxl.c:1766) +==5370== by 0x3EB83B: graphic_hw_update (console.c:254) +==5370== by 0x3FBE31: qemu_spice_display_refresh (spice-display.c:418) +==5370== by 0x2A7D01: display_refresh (qxl.c:1886) +==5370== by 0x3EEE1C: dpy_refresh (console.c:1436) + +Signed-off-by: Marc-André Lureau +Reviewed-by: Gerd Hoffmann +Message-id: 1383664554-15248-1-git-send-email-marcandre.lureau@gmail.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 2c8ebac7ccf51a8e683de593c4240d2ed7d592ec) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index de5d63d..0761b9e 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1746,7 +1746,6 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + } else if (is_buffer_shared(surface) && + (full_update || surface_data(surface) != s->vram_ptr + + (s->start_addr * 4))) { +- DisplaySurface *surface; + surface = qemu_create_displaysurface_from(disp_width, + height, depth, s->line_offset, + s->vram_ptr + (s->start_addr * 4), byteswap); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-fix-region-calculation.patch b/SOURCES/kvm-vga-fix-region-calculation.patch new file mode 100644 index 0000000..bfe5614 --- /dev/null +++ b/SOURCES/kvm-vga-fix-region-calculation.patch @@ -0,0 +1,47 @@ +From e47337aa12a371cded61aefee052a808d32e0d64 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 9 Apr 2018 13:27:36 +0200 +Subject: [PATCH 02/10] vga: fix region calculation + +RH-Author: Gerd Hoffmann +Message-id: <20180409132736.24598-3-kraxel@redhat.com> +Patchwork-id: 79512 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 2/2] vga: fix region calculation +Bugzilla: 1553670 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: John Snow + +Typically the scanline length and the line offset are identical. But +in case they are not our calculation for region_end is incorrect. Using +line_offset is fine for all scanlines, except the last one where we have +to use the actual scanline length. + +Fixes: CVE-2018-7550 +Reported-by: Ross Lagerwall +Signed-off-by: Gerd Hoffmann +Reviewed-by: Prasad J Pandit +Tested-by: Ross Lagerwall +Message-id: 20180309143704.13420-1-kraxel@redhat.com +(cherry picked from commit 7cdc61becd095b64a786b2625f321624e7111f3d) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 8e6c6d6..9270a75 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1535,6 +1535,8 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + + region_start = (s->start_addr * 4); + region_end = region_start + (ram_addr_t)s->line_offset * height; ++ region_end += width * s->get_bpp(s) / 8; /* scanline length */ ++ region_end -= s->line_offset; + if (region_end > s->vbe_size) { + /* wraps around (can happen with cirrus vbe modes) */ + region_start = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-handle-cirrus-vbe-mode-wraparounds.patch b/SOURCES/kvm-vga-handle-cirrus-vbe-mode-wraparounds.patch new file mode 100644 index 0000000..e2ea070 --- /dev/null +++ b/SOURCES/kvm-vga-handle-cirrus-vbe-mode-wraparounds.patch @@ -0,0 +1,107 @@ +From 90ded2892509c6c62140b907c7d036964cf312d5 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 20 Oct 2017 11:06:18 +0200 +Subject: [PATCH 3/7] vga: handle cirrus vbe mode wraparounds. + +RH-Author: Gerd Hoffmann +Message-id: <20171020110619.2541-11-kraxel@redhat.com> +Patchwork-id: 77404 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 10/11] vga: handle cirrus vbe mode wraparounds. +Bugzilla: 1501295 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Miroslav Rezanina + +Commit "3d90c62548 vga: stop passing pointers to vga_draw_line* +functions" is incomplete. It doesn't handle the case that the vga +rendering code tries to create a shared surface, i.e. a pixman image +backed by vga video memory. That can not work in case the guest display +wraps from end of video memory to the start. So force shadowing in that +case. Also adjust the snapshot region calculation. + +Can trigger with cirrus only, when programming vbe modes using the bochs +api (stdvga, also qxl and virtio-vga in vga compat mode) wrap arounds +can't happen. + +Fixes: CVE-2017-13672 +Fixes: 3d90c6254863693a6b13d918d2b8682e08bbc681 +Cc: P J P +Reported-by: David Buchanan +Signed-off-by: Gerd Hoffmann +Message-id: 20171010141323.14049-3-kraxel@redhat.com +(cherry picked from commit 28f77de26a4f9995458ddeb9d34bb06c0193bdc9) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 31 ++++++++++++++++++++++++------- + 1 file changed, 24 insertions(+), 7 deletions(-) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index a343a0a..c40744f 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1505,12 +1505,12 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + DisplaySurface *surface = qemu_console_surface(s->con); + int y1, y, update, linesize, y_start, double_scan, mask, depth; + int width, height, shift_control, bwidth, bits; +- ram_addr_t page0, page1, page_min, page_max; ++ ram_addr_t page0, page1, page_min, page_max, region_start, region_end; + int disp_width, multi_scan, multi_run; + uint8_t *d; + uint32_t v, addr1, addr; + vga_draw_line_func *vga_draw_line; +- bool share_surface; ++ bool share_surface, force_shadow = false; + #if defined(TARGET_WORDS_BIGENDIAN) + static const bool big_endian_fb = true; + #else +@@ -1530,6 +1530,15 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + s->get_resolution(s, &width, &height); + disp_width = width; + ++ region_start = (s->start_addr * 4); ++ region_end = region_start + s->line_offset * height; ++ if (region_end > s->vbe_size) { ++ /* wraps around (can happen with cirrus vbe modes) */ ++ region_start = 0; ++ region_end = s->vbe_size; ++ force_shadow = true; ++ } ++ + shift_control = (s->gr[VGA_GFX_MODE] >> 5) & 3; + double_scan = (s->cr[VGA_CRTC_MAX_SCAN] >> 7); + if (shift_control != 1) { +@@ -1560,7 +1569,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + + depth = s->get_bpp(s); + +- share_surface = (!s->force_shadow) && ++ share_surface = (!s->force_shadow) && !force_shadow && + ( depth == 32 || (depth == 16 && !byteswap) ); + if (s->line_offset != s->last_line_offset || + disp_width != s->last_width || +@@ -1680,10 +1689,18 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + addr = (addr & ~0x8000) | ((y1 & 2) << 14); + } + update = full_update; +- page0 = addr; +- page1 = addr + bwidth - 1; +- update |= memory_region_get_dirty(&s->vram, page0, page1 - page0, +- DIRTY_MEMORY_VGA); ++ page0 = addr & s->vbe_size_mask; ++ page1 = (addr + bwidth - 1) & s->vbe_size_mask; ++ if (page1 < page0) { ++ /* scanline wraps from end of video memory to the start */ ++ update |= memory_region_get_dirty(&s->vram, page0, 0, ++ DIRTY_MEMORY_VGA); ++ update |= memory_region_get_dirty(&s->vram, page1, 0, ++ DIRTY_MEMORY_VGA); ++ } else { ++ update |= memory_region_get_dirty(&s->vram, page0, page1 - page0, ++ DIRTY_MEMORY_VGA); ++ } + /* explicit invalidation for the hardware cursor */ + update |= (s->invalidated_y_table[y >> 5] >> (y & 0x1f)) & 1; + if (update) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-make-sure-vga-register-setup-for-vbe-stays-intac.patch b/SOURCES/kvm-vga-make-sure-vga-register-setup-for-vbe-stays-intac.patch new file mode 100644 index 0000000..2cbc550 --- /dev/null +++ b/SOURCES/kvm-vga-make-sure-vga-register-setup-for-vbe-stays-intac.patch @@ -0,0 +1,82 @@ +From 3c18025a495a2c105c2c33051ece0f3525d1e0c4 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 28 Apr 2016 16:07:32 +0200 +Subject: [PATCH 27/27] vga: make sure vga register setup for vbe stays intact. + +RH-Author: Gerd Hoffmann +Message-id: <1461859652-20918-7-git-send-email-kraxel@redhat.com> +Patchwork-id: 70297 +O-Subject: [virt-devel] [RHEL-7.3 qemu-kvm PATCH 6/6] vga: make sure vga register setup for vbe stays intact. +Bugzilla: 1331413 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +Call vbe_update_vgaregs() when the guest touches GFX, SEQ or CRT +registers, to make sure the vga registers will always have the +values needed by vbe mode. This makes sure the sanity checks +applied by vbe_fixup_regs() are effective. + +Without this guests can muck with shift_control, can turn on planar +vga modes or text mode emulation while VBE is active, making qemu +take code paths meant for CGA compatibility, but with the very +large display widths and heigts settable using VBE registers. + +Which is good for one or another buffer overflow. Not that +critical as they typically read overflows happening somewhere +in the display code. So guests can DoS by crashing qemu with a +segfault, but it is probably not possible to break out of the VM. + +Reported-by: Zuozhi Fzz +Reported-by: P J P +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index ee3c0c0..f049b26 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -166,6 +166,8 @@ static uint32_t expand4[256]; + static uint16_t expand2[256]; + static uint8_t expand4to8[16]; + ++static void vbe_update_vgaregs(VGACommonState *s); ++ + static inline bool vbe_enabled(VGACommonState *s) + { + return s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED; +@@ -511,6 +513,7 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val) + printf("vga: write SR%x = 0x%02x\n", s->sr_index, val); + #endif + s->sr[s->sr_index] = val & sr_mask[s->sr_index]; ++ vbe_update_vgaregs(s); + if (s->sr_index == VGA_SEQ_CLOCK_MODE) { + s->update_retrace_info(s); + } +@@ -542,6 +545,7 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val) + printf("vga: write GR%x = 0x%02x\n", s->gr_index, val); + #endif + s->gr[s->gr_index] = val & gr_mask[s->gr_index]; ++ vbe_update_vgaregs(s); + vga_update_memory_access(s); + break; + case VGA_CRT_IM: +@@ -560,10 +564,12 @@ void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val) + if (s->cr_index == VGA_CRTC_OVERFLOW) { + s->cr[VGA_CRTC_OVERFLOW] = (s->cr[VGA_CRTC_OVERFLOW] & ~0x10) | + (val & 0x10); ++ vbe_update_vgaregs(s); + } + return; + } + s->cr[s->cr_index] = val; ++ vbe_update_vgaregs(s); + + switch(s->cr_index) { + case VGA_CRTC_H_TOTAL: +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-stop-passing-pointers-to-vga_draw_line-functions.patch b/SOURCES/kvm-vga-stop-passing-pointers-to-vga_draw_line-functions.patch new file mode 100644 index 0000000..c21ef03 --- /dev/null +++ b/SOURCES/kvm-vga-stop-passing-pointers-to-vga_draw_line-functions.patch @@ -0,0 +1,508 @@ +From e56700784b7585dddff0713ea52b2b00b8531b7f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 5 Oct 2017 14:51:19 +0200 +Subject: [PATCH 23/27] vga: stop passing pointers to vga_draw_line* functions + +RH-Author: Gerd Hoffmann +Message-id: <20171005145119.15277-8-kraxel@redhat.com> +Patchwork-id: 76828 +O-Subject: [RHEL-7.5 qemu-kvm PATCH 7/7] vga: stop passing pointers to vga_draw_line* functions +Bugzilla: 1486642 +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Thomas Huth +RH-Acked-by: Miroslav Rezanina + +Instead pass around the address (aka offset into vga memory). +Add vga_read_* helper functions which apply vbe_size_mask to +the address, to make sure the address stays within the valid +range, similar to the cirrus blitter fixes (commits ffaf857778 +and 026aeffcb4). + +Impact: DoS for privileged guest users. qemu crashes with +a segfault, when hitting the guard page after vga memory +allocation, while reading vga memory for display updates. + +Fixes: CVE-2017-13672 +Cc: P J P +Reported-by: David Buchanan +Signed-off-by: Gerd Hoffmann +Message-id: 20170828122906.18993-1-kraxel@redhat.com +(cherry picked from commit 3d90c6254863693a6b13d918d2b8682e08bbc681) +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga-helpers.h | 202 ++++++++++++++++++++++++++--------------------- + hw/display/vga.c | 5 +- + hw/display/vga_int.h | 1 + + 3 files changed, 114 insertions(+), 94 deletions(-) + +diff --git a/hw/display/vga-helpers.h b/hw/display/vga-helpers.h +index 94f6de2..5a752b3 100644 +--- a/hw/display/vga-helpers.h ++++ b/hw/display/vga-helpers.h +@@ -95,20 +95,46 @@ static void vga_draw_glyph9(uint8_t *d, int linesize, + } while (--h); + } + ++static inline uint8_t vga_read_byte(VGACommonState *vga, uint32_t addr) ++{ ++ return vga->vram_ptr[addr & vga->vbe_size_mask]; ++} ++ ++static inline uint16_t vga_read_word_le(VGACommonState *vga, uint32_t addr) ++{ ++ uint32_t offset = addr & vga->vbe_size_mask & ~1; ++ uint16_t *ptr = (uint16_t *)(vga->vram_ptr + offset); ++ return lduw_le_p(ptr); ++} ++ ++static inline uint16_t vga_read_word_be(VGACommonState *vga, uint32_t addr) ++{ ++ uint32_t offset = addr & vga->vbe_size_mask & ~1; ++ uint16_t *ptr = (uint16_t *)(vga->vram_ptr + offset); ++ return lduw_be_p(ptr); ++} ++ ++static inline uint32_t vga_read_dword_le(VGACommonState *vga, uint32_t addr) ++{ ++ uint32_t offset = addr & vga->vbe_size_mask & ~3; ++ uint32_t *ptr = (uint32_t *)(vga->vram_ptr + offset); ++ return ldl_le_p(ptr); ++} ++ + /* + * 4 color mode + */ +-static void vga_draw_line2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line2(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + uint32_t plane_mask, *palette, data, v; + int x; + +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ palette = vga->last_palette; ++ plane_mask = mask16[vga->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; + width >>= 3; + for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; ++ data = vga_read_dword_le(vga, addr); + data &= plane_mask; + v = expand2[GET_PLANE(data, 0)]; + v |= expand2[GET_PLANE(data, 2)] << 2; +@@ -124,7 +150,7 @@ static void vga_draw_line2(VGACommonState *s1, uint8_t *d, + ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; + ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; + d += 32; +- s += 4; ++ addr += 4; + } + } + +@@ -134,17 +160,17 @@ static void vga_draw_line2(VGACommonState *s1, uint8_t *d, + /* + * 4 color mode, dup2 horizontal + */ +-static void vga_draw_line2d2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line2d2(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + uint32_t plane_mask, *palette, data, v; + int x; + +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ palette = vga->last_palette; ++ plane_mask = mask16[vga->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; + width >>= 3; + for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; ++ data = vga_read_dword_le(vga, addr); + data &= plane_mask; + v = expand2[GET_PLANE(data, 0)]; + v |= expand2[GET_PLANE(data, 2)] << 2; +@@ -160,24 +186,24 @@ static void vga_draw_line2d2(VGACommonState *s1, uint8_t *d, + PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); + PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); + d += 64; +- s += 4; ++ addr += 4; + } + } + + /* + * 16 color mode + */ +-static void vga_draw_line4(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line4(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + uint32_t plane_mask, data, v, *palette; + int x; + +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ palette = vga->last_palette; ++ plane_mask = mask16[vga->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; + width >>= 3; + for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; ++ data = vga_read_dword_le(vga, addr); + data &= plane_mask; + v = expand4[GET_PLANE(data, 0)]; + v |= expand4[GET_PLANE(data, 1)] << 1; +@@ -192,24 +218,24 @@ static void vga_draw_line4(VGACommonState *s1, uint8_t *d, + ((uint32_t *)d)[6] = palette[(v >> 4) & 0xf]; + ((uint32_t *)d)[7] = palette[(v >> 0) & 0xf]; + d += 32; +- s += 4; ++ addr += 4; + } + } + + /* + * 16 color mode, dup2 horizontal + */ +-static void vga_draw_line4d2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line4d2(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + uint32_t plane_mask, data, v, *palette; + int x; + +- palette = s1->last_palette; +- plane_mask = mask16[s1->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; ++ palette = vga->last_palette; ++ plane_mask = mask16[vga->ar[VGA_ATC_PLANE_ENABLE] & 0xf]; + width >>= 3; + for(x = 0; x < width; x++) { +- data = ((uint32_t *)s)[0]; ++ data = vga_read_dword_le(vga, addr); + data &= plane_mask; + v = expand4[GET_PLANE(data, 0)]; + v |= expand4[GET_PLANE(data, 1)] << 1; +@@ -224,7 +250,7 @@ static void vga_draw_line4d2(VGACommonState *s1, uint8_t *d, + PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]); + PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]); + d += 64; +- s += 4; ++ addr += 4; + } + } + +@@ -233,21 +259,21 @@ static void vga_draw_line4d2(VGACommonState *s1, uint8_t *d, + * + * XXX: add plane_mask support (never used in standard VGA modes) + */ +-static void vga_draw_line8d2(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line8d2(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + uint32_t *palette; + int x; + +- palette = s1->last_palette; ++ palette = vga->last_palette; + width >>= 3; + for(x = 0; x < width; x++) { +- PUT_PIXEL2(d, 0, palette[s[0]]); +- PUT_PIXEL2(d, 1, palette[s[1]]); +- PUT_PIXEL2(d, 2, palette[s[2]]); +- PUT_PIXEL2(d, 3, palette[s[3]]); ++ PUT_PIXEL2(d, 0, palette[vga_read_byte(vga, addr + 0)]); ++ PUT_PIXEL2(d, 1, palette[vga_read_byte(vga, addr + 1)]); ++ PUT_PIXEL2(d, 2, palette[vga_read_byte(vga, addr + 2)]); ++ PUT_PIXEL2(d, 3, palette[vga_read_byte(vga, addr + 3)]); + d += 32; +- s += 4; ++ addr += 4; + } + } + +@@ -256,63 +282,63 @@ static void vga_draw_line8d2(VGACommonState *s1, uint8_t *d, + * + * XXX: add plane_mask support (never used in standard VGA modes) + */ +-static void vga_draw_line8(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line8(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + uint32_t *palette; + int x; + +- palette = s1->last_palette; ++ palette = vga->last_palette; + width >>= 3; + for(x = 0; x < width; x++) { +- ((uint32_t *)d)[0] = palette[s[0]]; +- ((uint32_t *)d)[1] = palette[s[1]]; +- ((uint32_t *)d)[2] = palette[s[2]]; +- ((uint32_t *)d)[3] = palette[s[3]]; +- ((uint32_t *)d)[4] = palette[s[4]]; +- ((uint32_t *)d)[5] = palette[s[5]]; +- ((uint32_t *)d)[6] = palette[s[6]]; +- ((uint32_t *)d)[7] = palette[s[7]]; ++ ((uint32_t *)d)[0] = palette[vga_read_byte(vga, addr + 0)]; ++ ((uint32_t *)d)[1] = palette[vga_read_byte(vga, addr + 1)]; ++ ((uint32_t *)d)[2] = palette[vga_read_byte(vga, addr + 2)]; ++ ((uint32_t *)d)[3] = palette[vga_read_byte(vga, addr + 3)]; ++ ((uint32_t *)d)[4] = palette[vga_read_byte(vga, addr + 4)]; ++ ((uint32_t *)d)[5] = palette[vga_read_byte(vga, addr + 5)]; ++ ((uint32_t *)d)[6] = palette[vga_read_byte(vga, addr + 6)]; ++ ((uint32_t *)d)[7] = palette[vga_read_byte(vga, addr + 7)]; + d += 32; +- s += 8; ++ addr += 8; + } + } + + /* + * 15 bit color + */ +-static void vga_draw_line15_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line15_le(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + int w; + uint32_t v, r, g, b; + + w = width; + do { +- v = lduw_le_p((void *)s); ++ v = vga_read_word_le(vga, addr); + r = (v >> 7) & 0xf8; + g = (v >> 2) & 0xf8; + b = (v << 3) & 0xf8; + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; ++ addr += 2; + d += 4; + } while (--w != 0); + } + +-static void vga_draw_line15_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line15_be(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + int w; + uint32_t v, r, g, b; + + w = width; + do { +- v = lduw_be_p((void *)s); ++ v = vga_read_word_be(vga, addr); + r = (v >> 7) & 0xf8; + g = (v >> 2) & 0xf8; + b = (v << 3) & 0xf8; + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; ++ addr += 2; + d += 4; + } while (--w != 0); + } +@@ -320,38 +346,38 @@ static void vga_draw_line15_be(VGACommonState *s1, uint8_t *d, + /* + * 16 bit color + */ +-static void vga_draw_line16_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line16_le(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + int w; + uint32_t v, r, g, b; + + w = width; + do { +- v = lduw_le_p((void *)s); ++ v = vga_read_word_le(vga, addr); + r = (v >> 8) & 0xf8; + g = (v >> 3) & 0xfc; + b = (v << 3) & 0xf8; + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; ++ addr += 2; + d += 4; + } while (--w != 0); + } + +-static void vga_draw_line16_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line16_be(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + int w; + uint32_t v, r, g, b; + + w = width; + do { +- v = lduw_be_p((void *)s); ++ v = vga_read_word_be(vga, addr); + r = (v >> 8) & 0xf8; + g = (v >> 3) & 0xfc; + b = (v << 3) & 0xf8; + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 2; ++ addr += 2; + d += 4; + } while (--w != 0); + } +@@ -359,36 +385,36 @@ static void vga_draw_line16_be(VGACommonState *s1, uint8_t *d, + /* + * 24 bit color + */ +-static void vga_draw_line24_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line24_le(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + int w; + uint32_t r, g, b; + + w = width; + do { +- b = s[0]; +- g = s[1]; +- r = s[2]; ++ b = vga_read_byte(vga, addr + 0); ++ g = vga_read_byte(vga, addr + 1); ++ r = vga_read_byte(vga, addr + 2); + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 3; ++ addr += 3; + d += 4; + } while (--w != 0); + } + +-static void vga_draw_line24_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line24_be(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { + int w; + uint32_t r, g, b; + + w = width; + do { +- r = s[0]; +- g = s[1]; +- b = s[2]; ++ r = vga_read_byte(vga, addr + 0); ++ g = vga_read_byte(vga, addr + 1); ++ b = vga_read_byte(vga, addr + 2); + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 3; ++ addr += 3; + d += 4; + } while (--w != 0); + } +@@ -396,44 +422,36 @@ static void vga_draw_line24_be(VGACommonState *s1, uint8_t *d, + /* + * 32 bit color + */ +-static void vga_draw_line32_le(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line32_le(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { +-#ifndef HOST_WORDS_BIGENDIAN +- memcpy(d, s, width * 4); +-#else + int w; + uint32_t r, g, b; + + w = width; + do { +- b = s[0]; +- g = s[1]; +- r = s[2]; ++ b = vga_read_byte(vga, addr + 0); ++ g = vga_read_byte(vga, addr + 1); ++ r = vga_read_byte(vga, addr + 2); + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 4; ++ addr += 4; + d += 4; + } while (--w != 0); +-#endif + } + +-static void vga_draw_line32_be(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width) ++static void vga_draw_line32_be(VGACommonState *vga, uint8_t *d, ++ uint32_t addr, int width) + { +-#ifdef HOST_WORDS_BIGENDIAN +- memcpy(d, s, width * 4); +-#else + int w; + uint32_t r, g, b; + + w = width; + do { +- r = s[1]; +- g = s[2]; +- b = s[3]; ++ r = vga_read_byte(vga, addr + 1); ++ g = vga_read_byte(vga, addr + 2); ++ b = vga_read_byte(vga, addr + 3); + ((uint32_t *)d)[0] = rgb_to_pixel32(r, g, b); +- s += 4; ++ addr += 4; + d += 4; + } while (--w != 0); +-#endif + } +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 4618823..5b0b864 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -1045,7 +1045,7 @@ void vga_mem_writeb(VGACommonState *s, hwaddr addr, uint32_t val) + } + + typedef void vga_draw_line_func(VGACommonState *s1, uint8_t *d, +- const uint8_t *s, int width); ++ uint32_t srcaddr, int width); + + #include "vga-helpers.h" + +@@ -1682,7 +1682,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update) + if (page1 > page_max) + page_max = page1; + if (!(is_buffer_shared(surface))) { +- vga_draw_line(s, d, s->vram_ptr + addr, width); ++ vga_draw_line(s, d, addr, width); + if (s->cursor_draw_line) + s->cursor_draw_line(s, d, y); + } +@@ -2162,6 +2162,7 @@ void vga_common_init(VGACommonState *s) + if (!s->vbe_size) { + s->vbe_size = s->vram_size; + } ++ s->vbe_size_mask = s->vbe_size - 1; + + s->is_vbe_vmstate = 1; + memory_region_init_ram(&s->vram, "vga.vram", s->vram_size); +diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h +index 7c758ac..94add2f 100644 +--- a/hw/display/vga_int.h ++++ b/hw/display/vga_int.h +@@ -94,6 +94,7 @@ typedef struct VGACommonState { + uint32_t vram_size; + uint32_t vram_size_mb; /* property */ + uint32_t vbe_size; ++ uint32_t vbe_size_mask; + uint32_t latch; + MemoryRegion *chain4_alias; + uint8_t sr_index; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vga-update-vga-register-setup-on-vbe-changes.patch b/SOURCES/kvm-vga-update-vga-register-setup-on-vbe-changes.patch new file mode 100644 index 0000000..648f3dd --- /dev/null +++ b/SOURCES/kvm-vga-update-vga-register-setup-on-vbe-changes.patch @@ -0,0 +1,38 @@ +From 6bf28a8a9e2e6d6505f2a906b7fc532427037c5f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 28 Apr 2016 16:07:31 +0200 +Subject: [PATCH 26/27] vga: update vga register setup on vbe changes + +RH-Author: Gerd Hoffmann +Message-id: <1461859652-20918-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 70296 +O-Subject: [virt-devel] [RHEL-7.3 qemu-kvm PATCH 5/6] vga: update vga register setup on vbe changes +Bugzilla: 1331413 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert + +Call the new vbe_update_vgaregs() function on vbe configuration +changes, to make sure vga registers are up-to-date. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +--- + hw/display/vga.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/display/vga.c b/hw/display/vga.c +index 4cc0df5..ee3c0c0 100644 +--- a/hw/display/vga.c ++++ b/hw/display/vga.c +@@ -790,6 +790,7 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) + case VBE_DISPI_INDEX_Y_OFFSET: + s->vbe_regs[s->vbe_index] = val; + vbe_fixup_regs(s); ++ vbe_update_vgaregs(s); + break; + case VBE_DISPI_INDEX_BANK: + val &= s->vbe_bank_mask; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vhdx-Bounds-checking-for-block_size-and-logical_sect.patch b/SOURCES/kvm-vhdx-Bounds-checking-for-block_size-and-logical_sect.patch new file mode 100644 index 0000000..596cf45 --- /dev/null +++ b/SOURCES/kvm-vhdx-Bounds-checking-for-block_size-and-logical_sect.patch @@ -0,0 +1,64 @@ +From 95b523f48df55dfd60229d2573385828a884aa7c Mon Sep 17 00:00:00 2001 +From: Jeff Cody +Date: Tue, 25 Mar 2014 14:23:25 +0100 +Subject: [PATCH 18/49] vhdx: Bounds checking for block_size and logical_sector_size (CVE-2014-0148) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-19-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 18/48] vhdx: Bounds checking for block_size and logical_sector_size (CVE-2014-0148) +Bugzilla: 1079346 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Jeff Cody + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079346 +Upstream status: Embargoed + +Other variables (e.g. sectors_per_block) are calculated using these +variables, and if not range-checked illegal values could be obtained +causing infinite loops and other potential issues when calculating +BAT entries. + +The 1.00 VHDX spec requires BlockSize to be min 1MB, max 256MB. +LogicalSectorSize is required to be either 512 or 4096 bytes. + +Reported-by: Kevin Wolf +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +--- + block/vhdx.c | 12 ++++++++++-- + 1 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 1995778..66a25c9 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -785,12 +785,20 @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s) + le32_to_cpus(&s->logical_sector_size); + le32_to_cpus(&s->physical_sector_size); + +- if (s->logical_sector_size == 0 || s->params.block_size == 0) { ++ if (s->params.block_size < VHDX_BLOCK_SIZE_MIN || ++ s->params.block_size > VHDX_BLOCK_SIZE_MAX) { + ret = -EINVAL; + goto exit; + } + +- /* both block_size and sector_size are guaranteed powers of 2 */ ++ /* only 2 supported sector sizes */ ++ if (s->logical_sector_size != 512 && s->logical_sector_size != 4096) { ++ ret = -EINVAL; ++ goto exit; ++ } ++ ++ /* Both block_size and sector_size are guaranteed powers of 2, below. ++ Due to range checks above, s->sectors_per_block can never be < 256 */ + s->sectors_per_block = s->params.block_size / s->logical_sector_size; + s->chunk_ratio = (VHDX_MAX_SECTORS_PER_BLOCK) * + (uint64_t)s->logical_sector_size / +-- +1.7.1 + diff --git a/SOURCES/kvm-vhdx-Fix-zero-fill-iov-length.patch b/SOURCES/kvm-vhdx-Fix-zero-fill-iov-length.patch new file mode 100644 index 0000000..d0fdca3 --- /dev/null +++ b/SOURCES/kvm-vhdx-Fix-zero-fill-iov-length.patch @@ -0,0 +1,57 @@ +From a7cfda7b304697450f0a55c22f4459b25999e9c5 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 13 Mar 2017 17:47:05 +0100 +Subject: [PATCH 17/24] vhdx: Fix zero-fill iov length + +RH-Author: Max Reitz +Message-id: <20170313174706.29316-2-mreitz@redhat.com> +Patchwork-id: 74279 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 8/9] vhdx: Fix zero-fill iov length +Bugzilla: 1427176 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +From: Kevin Wolf + +Fix the length of the zero-fill for the back, which was accidentally +using the same value as for the front. This is caught by qemu-iotests +033. + +For consistency, change the code for the front as well to use the length +stored in the iov (it is the same value, copied four lines above). + +Signed-off-by: Kevin Wolf +Acked-by: Jeff Cody +(cherry picked from commit d1a126c53ddc563b7b731cee013e0362f7a5f22f) +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/vhdx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 21ad6ad..47a872d 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -1247,7 +1247,7 @@ static coroutine_fn int vhdx_co_writev(BlockDriverState *bs, int64_t sector_num, + iov1.iov_base = qemu_blockalign(bs, iov1.iov_len); + memset(iov1.iov_base, 0, iov1.iov_len); + qemu_iovec_concat_iov(&hd_qiov, &iov1, 1, 0, +- sinfo.block_offset); ++ iov1.iov_len); + sectors_to_write += iov1.iov_len >> BDRV_SECTOR_BITS; + } + +@@ -1263,7 +1263,7 @@ static coroutine_fn int vhdx_co_writev(BlockDriverState *bs, int64_t sector_num, + iov2.iov_base = qemu_blockalign(bs, iov2.iov_len); + memset(iov2.iov_base, 0, iov2.iov_len); + qemu_iovec_concat_iov(&hd_qiov, &iov2, 1, 0, +- sinfo.block_offset); ++ iov2.iov_len); + sectors_to_write += iov2.iov_len >> BDRV_SECTOR_BITS; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-add-virtqueue_rewind.patch b/SOURCES/kvm-virtio-add-virtqueue_rewind.patch new file mode 100644 index 0000000..a5d98d3 --- /dev/null +++ b/SOURCES/kvm-virtio-add-virtqueue_rewind.patch @@ -0,0 +1,86 @@ +From 6b2d5dafa9847ce29e5cddeb369b35db5ce076b1 Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Thu, 10 Nov 2016 23:00:50 +0100 +Subject: [PATCH 7/8] virtio: add virtqueue_rewind() + +RH-Author: Ladi Prosek +Message-id: <1478797251-10302-1-git-send-email-lprosek@redhat.com> +Patchwork-id: 72818 +O-Subject: [PATCH v2 7/6] virtio: add virtqueue_rewind() +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +From: Stefan Hajnoczi + +virtqueue_discard() requires a VirtQueueElement but virtio-balloon does +not migrate its in-use element. Introduce a new function that is +similar to virtqueue_discard() but doesn't require a VirtQueueElement. + +This will allow virtio-balloon to access element again after migration +with the usual proviso that the guest may have modified the vring since +last time. + +Cc: Michael S. Tsirkin +Cc: Roman Kagan +Cc: Stefan Hajnoczi +Signed-off-by: Ladi Prosek +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 297a75e6c55d91db2704a3d6e4029d99c7df51fd) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 22 ++++++++++++++++++++++ + include/hw/virtio/virtio.h | 1 + + 2 files changed, 23 insertions(+) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index cdb21b1..fe6b032 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -259,6 +259,28 @@ void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, + virtqueue_unmap_sg(vq, elem, len); + } + ++/* virtqueue_rewind: ++ * @vq: The #VirtQueue ++ * @num: Number of elements to push back ++ * ++ * Pretend that elements weren't popped from the virtqueue. The next ++ * virtqueue_pop() will refetch the oldest element. ++ * ++ * Use virtqueue_discard() instead if you have a VirtQueueElement. ++ * ++ * Returns: true on success, false if @num is greater than the number of in use ++ * elements. ++ */ ++bool virtqueue_rewind(VirtQueue *vq, unsigned int num) ++{ ++ if (num > vq->inuse) { ++ return false; ++ } ++ vq->last_avail_idx -= num; ++ vq->inuse -= num; ++ return true; ++} ++ + void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len, unsigned int idx) + { +diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h +index de32425..d9bfe4c 100644 +--- a/include/hw/virtio/virtio.h ++++ b/include/hw/virtio/virtio.h +@@ -167,6 +167,7 @@ void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem, + void virtqueue_flush(VirtQueue *vq, unsigned int count); + void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len); ++bool virtqueue_rewind(VirtQueue *vq, unsigned int num); + void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len, unsigned int idx); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-allow-mapping-up-to-max-queue-size.patch b/SOURCES/kvm-virtio-allow-mapping-up-to-max-queue-size.patch new file mode 100644 index 0000000..698feb3 --- /dev/null +++ b/SOURCES/kvm-virtio-allow-mapping-up-to-max-queue-size.patch @@ -0,0 +1,54 @@ +From c518aac987c63baaf6f039589c043e3da966974e Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:34:08 +0200 +Subject: [PATCH 17/31] virtio: allow mapping up to max queue size + +RH-Author: Michael S. Tsirkin +Message-id: <1400056377-6802-2-git-send-email-mst@redhat.com> +Patchwork-id: 58863 +O-Subject: [PATCH qemu-kvm RHEL7.1 2/2] virtio: allow mapping up to max queue size +Bugzilla: 1095766 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Xiao Wang +RH-Acked-by: Amos Kong + +It's a loop from i < num_sg and the array is VIRTQUEUE_MAX_SIZE - so +it's OK if the value read is VIRTQUEUE_MAX_SIZE. + +Not a big problem in practice as people don't use +such big queues, but it's inelegant. + +Reported-by: "Dr. David Alan Gilbert" +Cc: qemu-stable@nongnu.org +Signed-off-by: Michael S. Tsirkin + +Upstream status: 937251408051e0489f78e4db3c92e045b147b38b +(in maintainer's tree, pull request sent) +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095766 +--- + hw/virtio/virtio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 2667390..44309c2 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -423,7 +423,7 @@ void virtqueue_map_sg(struct iovec *sg, hwaddr *addr, + unsigned int i; + hwaddr len; + +- if (num_sg >= VIRTQUEUE_MAX_SIZE) { ++ if (num_sg > VIRTQUEUE_MAX_SIZE) { + error_report("virtio: map attempt out of bounds: %zd > %d", + num_sg, VIRTQUEUE_MAX_SIZE); + exit(1); +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-avoid-buffer-overrun-on-incoming-migration.patch b/SOURCES/kvm-virtio-avoid-buffer-overrun-on-incoming-migration.patch new file mode 100644 index 0000000..19b5f8c --- /dev/null +++ b/SOURCES/kvm-virtio-avoid-buffer-overrun-on-incoming-migration.patch @@ -0,0 +1,61 @@ +From 790375122726ecafec569bb31bbc68df7400f3b9 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:32:06 +0200 +Subject: [PATCH 13/31] virtio: avoid buffer overrun on incoming migration + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-10-git-send-email-mst@redhat.com> +Patchwork-id: 58859 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio: avoid buffer overrun on incoming migration +Bugzilla: 1095738 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Xiao Wang +RH-Acked-by: Amos Kong + +CVE-2013-6399 + +vdev->queue_sel is read from the wire, and later used in the +emulation code as an index into vdev->vq[]. If the value of +vdev->queue_sel exceeds the length of vdev->vq[], currently +allocated to be VIRTIO_PCI_QUEUE_MAX elements, subsequent PIO +operations such as VIRTIO_PCI_QUEUE_PFN can be used to overrun +the buffer with arbitrary data originating from the source. + +Fix this by failing migration if the value from the wire exceeds +VIRTIO_PCI_QUEUE_MAX. + +Signed-off-by: Michael Roth +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Peter Maydell +Signed-off-by: Juan Quintela +(cherry picked from commit 4b53c2c72cb5541cf394033b528a6fe2a86c0ac1) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095738 +--- + hw/virtio/virtio.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 070d64e..9600a12 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -867,6 +867,9 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f) + qemu_get_8s(f, &vdev->status); + qemu_get_8s(f, &vdev->isr); + qemu_get_be16s(f, &vdev->queue_sel); ++ if (vdev->queue_sel >= VIRTIO_PCI_QUEUE_MAX) { ++ return -1; ++ } + qemu_get_be32s(f, &features); + + if (virtio_set_features(vdev, features) < 0) { +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-balloon-discard-virtqueue-element-on-reset.patch b/SOURCES/kvm-virtio-balloon-discard-virtqueue-element-on-reset.patch new file mode 100644 index 0000000..2c37b1d --- /dev/null +++ b/SOURCES/kvm-virtio-balloon-discard-virtqueue-element-on-reset.patch @@ -0,0 +1,54 @@ +From 2c71eba27413f9b34610cee3f6b16b0678f4d102 Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Wed, 5 Oct 2016 17:22:27 +0200 +Subject: [PATCH 5/8] virtio-balloon: discard virtqueue element on reset + +RH-Author: Ladi Prosek +Message-id: <1475666548-9186-6-git-send-email-lprosek@redhat.com> +Patchwork-id: 72484 +O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 5/6] virtio-balloon: discard virtqueue element on reset +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +The one pending element is being freed but not discarded on device +reset, which causes svq->inuse to creep up, eventually hitting the +"Virtqueue size exceeded" error. + +Properly discarding the element on device reset makes sure that its +buffers are unmapped and the inuse counter stays balanced. + +Cc: Michael S. Tsirkin +Cc: Roman Kagan +Cc: Stefan Hajnoczi +Signed-off-by: Ladi Prosek +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 104e70cae78bd4afd95d948c6aff188f10508a9c) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina + +Conflicts: + * s->stats_vq_elem => &s->stats_vq_elem because the field is not + s pointer in 1.5.3 +--- + hw/virtio/virtio-balloon.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index 17b3029..faf93f7 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -398,6 +398,7 @@ static void virtio_balloon_device_reset(VirtIODevice *vdev) + VirtIOBalloon *s = VIRTIO_BALLOON(vdev); + + if (s->stats_vq_elem_pending) { ++ virtqueue_discard(s->svq, &s->stats_vq_elem, 0); + s->stats_vq_elem_pending = false; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-balloon-fix-integer-overflow-in-memory-stats-.patch b/SOURCES/kvm-virtio-balloon-fix-integer-overflow-in-memory-stats-.patch new file mode 100644 index 0000000..9cd838d --- /dev/null +++ b/SOURCES/kvm-virtio-balloon-fix-integer-overflow-in-memory-stats-.patch @@ -0,0 +1,64 @@ +From 62ba92f33f1d727cff17f5d1b38fabfe0901f7ee Mon Sep 17 00:00:00 2001 +From: Luiz Capitulino +Date: Tue, 30 Sep 2014 01:08:31 +0200 +Subject: [PATCH 3/3] virtio-balloon: fix integer overflow in memory stats + feature + +Message-id: <20140929210831.1cc65ebe@redhat.com> +Patchwork-id: 61504 +O-Subject: [RHEL7.1 qemu-kvm PATCH] virtio-balloon: fix integer overflow in memory stats feature +Bugzilla: 1142290 +RH-Acked-by: Amit Shah +RH-Acked-by: Juan Quintela +RH-Acked-by: Markus Armbruster + +When a QMP client changes the polling interval time by setting +the guest-stats-polling-interval property, the interval value +is stored and manipulated as an int64_t variable. + +However, the balloon_stats_change_timer() function, which is +used to set the actual timer with the interval value, takes +an int instead, causing an overflow for big interval values. + +This commit fix this bug by changing balloon_stats_change_timer() +to take an int64_t and also it limits the polling interval value +to UINT_MAX to avoid other kinds of overflow. + +Signed-off-by: Luiz Capitulino +Reviewed-by: Eric Blake +Reviewed-by: Markus Armbruster +(cherry picked from commit 1f9296b51a26650916a2c4191268bb64057bdc5f) +Signed-off-by: Luiz Capitulino +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-balloon.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index 76c607f..016dc60 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -85,7 +85,7 @@ static void balloon_stats_destroy_timer(VirtIOBalloon *s) + } + } + +-static void balloon_stats_change_timer(VirtIOBalloon *s, int secs) ++static void balloon_stats_change_timer(VirtIOBalloon *s, int64_t secs) + { + qemu_mod_timer(s->stats_timer, qemu_get_clock_ms(vm_clock) + secs * 1000); + } +@@ -154,6 +154,11 @@ static void balloon_stats_set_poll_interval(Object *obj, struct Visitor *v, + return; + } + ++ if (value > UINT_MAX) { ++ error_setg(errp, "timer value is too big"); ++ return; ++ } ++ + if (value == s->stats_poll_interval) { + return; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-balloon-fix-stats-vq-migration.patch b/SOURCES/kvm-virtio-balloon-fix-stats-vq-migration.patch new file mode 100644 index 0000000..38c7762 --- /dev/null +++ b/SOURCES/kvm-virtio-balloon-fix-stats-vq-migration.patch @@ -0,0 +1,75 @@ +From 92a638cb3b0601746d47b4a443762fe71bb21431 Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Thu, 10 Nov 2016 23:00:51 +0100 +Subject: [PATCH 8/8] virtio-balloon: fix stats vq migration + +RH-Author: Ladi Prosek +Message-id: <1478797251-10302-2-git-send-email-lprosek@redhat.com> +Patchwork-id: 72819 +O-Subject: [PATCH v2 8/6] virtio-balloon: fix stats vq migration +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +The statistics virtqueue is not migrated properly because virtio-balloon +does not include s->stats_vq_elem in the migration stream. + +After migration the statistics virtqueue hangs because the host never +completes the last element (s->stats_vq_elem is NULL on the destination +QEMU). Therefore the guest never submits new elements and the virtqueue +is hung. + +Instead of changing the migration stream format in an incompatible way, +detect the migration case and rewind the virtqueue so the last element +can be completed. + +Cc: Michael S. Tsirkin +Cc: Roman Kagan +Cc: Stefan Hajnoczi +Suggested-by: Roman Kagan +Signed-off-by: Ladi Prosek +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 4a1e48becab81020adfb74b22c76a595f2d02a01) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-balloon.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index faf93f7..1a60d3c 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -403,6 +403,18 @@ static void virtio_balloon_device_reset(VirtIODevice *vdev) + } + } + ++static void virtio_balloon_set_status(VirtIODevice *vdev, uint8_t status) ++{ ++ VirtIOBalloon *s = VIRTIO_BALLOON(vdev); ++ ++ if (!s->stats_vq_elem_pending && vdev->vm_running && ++ (status & VIRTIO_CONFIG_S_DRIVER_OK) && virtqueue_rewind(s->svq, 1)) { ++ /* poll stats queue for the element we have discarded when the VM ++ * was stopped */ ++ virtio_balloon_receive_stats(vdev, s->svq); ++ } ++} ++ + static Property virtio_balloon_properties[] = { + DEFINE_PROP_END_OF_LIST(), + }; +@@ -419,6 +431,7 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data) + vdc->get_config = virtio_balloon_get_config; + vdc->set_config = virtio_balloon_set_config; + vdc->get_features = virtio_balloon_get_features; ++ vdc->set_status = virtio_balloon_set_status; + } + + static const TypeInfo virtio_balloon_info = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-balloon-switch-exit-callback-to-VirtioDeviceC.patch b/SOURCES/kvm-virtio-balloon-switch-exit-callback-to-VirtioDeviceC.patch new file mode 100644 index 0000000..b21da97 --- /dev/null +++ b/SOURCES/kvm-virtio-balloon-switch-exit-callback-to-VirtioDeviceC.patch @@ -0,0 +1,72 @@ +From 9813363c031fd56a536dfafd64dcc9bc430f9bb1 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:38 +0100 +Subject: [PATCH 11/14] virtio-balloon: switch exit callback to VirtioDeviceClass + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-9-git-send-email-armbru@redhat.com> +Patchwork-id: 56930 +O-Subject: [PATCH 7.0 qemu-kvm 08/10] virtio-balloon: switch exit callback to VirtioDeviceClass +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This ensures hot-unplug is handled properly by the proxy, and avoids +leaking bus_name which is freed by virtio_device_exit. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit baa61b9870dd7e0bb07e0ae61c6ec805db13f699) +Signed-off-by: Markus Armbruster +--- + hw/virtio/virtio-balloon.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-balloon.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c +index 85661f6..76c607f 100644 +--- a/hw/virtio/virtio-balloon.c ++++ b/hw/virtio/virtio-balloon.c +@@ -369,16 +369,14 @@ static int virtio_balloon_device_init(VirtIODevice *vdev) + return 0; + } + +-static int virtio_balloon_device_exit(DeviceState *qdev) ++static void virtio_balloon_device_exit(VirtIODevice *vdev) + { +- VirtIOBalloon *s = VIRTIO_BALLOON(qdev); +- VirtIODevice *vdev = VIRTIO_DEVICE(qdev); ++ VirtIOBalloon *s = VIRTIO_BALLOON(vdev); + + balloon_stats_destroy_timer(s); + qemu_remove_balloon_handler(s); +- unregister_savevm(qdev, "virtio-balloon", s); ++ unregister_savevm(DEVICE(vdev), "virtio-balloon", s); + virtio_cleanup(vdev); +- return 0; + } + + static Property virtio_balloon_properties[] = { +@@ -389,10 +387,10 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = virtio_balloon_device_exit; + dc->props = virtio_balloon_properties; + set_bit(DEVICE_CATEGORY_MISC, dc->categories); + vdc->init = virtio_balloon_device_init; ++ vdc->exit = virtio_balloon_device_exit; + vdc->get_config = virtio_balloon_get_config; + vdc->set_config = virtio_balloon_set_config; + vdc->get_features = virtio_balloon_get_features; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-blk-Bypass-error-action-and-I-O-accounting-on.patch b/SOURCES/kvm-virtio-blk-Bypass-error-action-and-I-O-accounting-on.patch new file mode 100644 index 0000000..1ee46af --- /dev/null +++ b/SOURCES/kvm-virtio-blk-Bypass-error-action-and-I-O-accounting-on.patch @@ -0,0 +1,88 @@ +From 8406a85d6b78d2f3478a204b5eab0cd714fe9aa4 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 31 Oct 2014 16:29:53 +0100 +Subject: [PATCH 16/19] virtio-blk: Bypass error action and I/O accounting on + invalid r/w + +Message-id: <1414772996-17272-3-git-send-email-armbru@redhat.com> +Patchwork-id: 62014 +O-Subject: [PATCH RHEL-7.1 qemu-kvm 2/5] virtio-blk: Bypass error action and I/O accounting on invalid r/w +Bugzilla: 1085232 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +When a device model's I/O operation fails, we execute the error +action. This lets layers above QEMU implement thin provisioning, or +attempt to correct errors before they reach the guest. But when the +I/O operation fails because it's invalid, reporting the error to the +guest is the only sensible action. + +If the guest's read or write asks for an invalid sector range, fail +the request right away, without considering the error action. No +change with error action BDRV_ACTION_REPORT. + +Furthermore, bypass I/O accounting, because we want to track only I/O +that actually reaches the block layer. + +The next commit will extend "invalid sector range" to cover attempts +to read/write beyond the end of the medium. + +Signed-off-by: Markus Armbruster +Signed-off-by: Kevin Wolf +(cherry picked from commit 42e38c1fd0199155d32f3464aedce282d3d7f6a1) + +Straightforward semantic conflict: requests still have to be freed +with g_free() because we don't have commit 671ec3f. + +Signed-off-by: Markus Armbruster +Signed-off-by: Miroslav Rezanina +--- + hw/block/virtio-blk.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index 0f1d3ec..ffb311c 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -300,15 +300,16 @@ static void virtio_blk_handle_write(VirtIOBlockReq *req, MultiReqBuffer *mrb) + + sector = ldq_p(&req->out->sector); + +- bdrv_acct_start(req->dev->bs, &req->acct, req->qiov.size, BDRV_ACCT_WRITE); +- + trace_virtio_blk_handle_write(req, sector, req->qiov.size / 512); + + if (!virtio_blk_sect_range_ok(req->dev, sector, req->qiov.size)) { +- virtio_blk_rw_complete(req, -EIO); ++ virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR); ++ g_free(req); + return; + } + ++ bdrv_acct_start(req->dev->bs, &req->acct, req->qiov.size, BDRV_ACCT_WRITE); ++ + if (mrb->num_writes == 32) { + virtio_submit_multiwrite(req->dev->bs, mrb); + } +@@ -330,14 +331,15 @@ static void virtio_blk_handle_read(VirtIOBlockReq *req) + + sector = ldq_p(&req->out->sector); + +- bdrv_acct_start(req->dev->bs, &req->acct, req->qiov.size, BDRV_ACCT_READ); +- + trace_virtio_blk_handle_read(req, sector, req->qiov.size / 512); + + if (!virtio_blk_sect_range_ok(req->dev, sector, req->qiov.size)) { +- virtio_blk_rw_complete(req, -EIO); ++ virtio_blk_req_complete(req, VIRTIO_BLK_S_IOERR); ++ g_free(req); + return; + } ++ ++ bdrv_acct_start(req->dev->bs, &req->acct, req->qiov.size, BDRV_ACCT_READ); + bdrv_aio_readv(req->dev->bs, sector, &req->qiov, + req->qiov.size / BDRV_SECTOR_SIZE, + virtio_blk_rw_complete, req); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-blk-Factor-common-checks-out-of-virtio_blk_ha.patch b/SOURCES/kvm-virtio-blk-Factor-common-checks-out-of-virtio_blk_ha.patch new file mode 100644 index 0000000..05dad31 --- /dev/null +++ b/SOURCES/kvm-virtio-blk-Factor-common-checks-out-of-virtio_blk_ha.patch @@ -0,0 +1,74 @@ +From 08530984c8ea08a6e0494e91576ff24917c46e14 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 31 Oct 2014 16:29:52 +0100 +Subject: [PATCH 15/19] virtio-blk: Factor common checks out of + virtio_blk_handle_read/write() + +Message-id: <1414772996-17272-2-git-send-email-armbru@redhat.com> +Patchwork-id: 62018 +O-Subject: [PATCH RHEL-7.1 qemu-kvm 1/5] virtio-blk: Factor common checks out of virtio_blk_handle_read/write() +Bugzilla: 1085232 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +Signed-off-by: Markus Armbruster +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit d0e14376eefc40b07c8fb42c132c2202c66dcb0b) +Signed-off-by: Miroslav Rezanina +--- + hw/block/virtio-blk.c | 24 ++++++++++++++---------- + 1 file changed, 14 insertions(+), 10 deletions(-) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index a96207d..0f1d3ec 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -281,6 +281,18 @@ static void virtio_blk_handle_flush(VirtIOBlockReq *req, MultiReqBuffer *mrb) + bdrv_aio_flush(req->dev->bs, virtio_blk_flush_complete, req); + } + ++static bool virtio_blk_sect_range_ok(VirtIOBlock *dev, ++ uint64_t sector, size_t size) ++{ ++ if (sector & dev->sector_mask) { ++ return false; ++ } ++ if (size % dev->conf->logical_block_size) { ++ return false; ++ } ++ return true; ++} ++ + static void virtio_blk_handle_write(VirtIOBlockReq *req, MultiReqBuffer *mrb) + { + BlockRequest *blkreq; +@@ -292,11 +304,7 @@ static void virtio_blk_handle_write(VirtIOBlockReq *req, MultiReqBuffer *mrb) + + trace_virtio_blk_handle_write(req, sector, req->qiov.size / 512); + +- if (sector & req->dev->sector_mask) { +- virtio_blk_rw_complete(req, -EIO); +- return; +- } +- if (req->qiov.size % req->dev->conf->logical_block_size) { ++ if (!virtio_blk_sect_range_ok(req->dev, sector, req->qiov.size)) { + virtio_blk_rw_complete(req, -EIO); + return; + } +@@ -326,11 +334,7 @@ static void virtio_blk_handle_read(VirtIOBlockReq *req) + + trace_virtio_blk_handle_read(req, sector, req->qiov.size / 512); + +- if (sector & req->dev->sector_mask) { +- virtio_blk_rw_complete(req, -EIO); +- return; +- } +- if (req->qiov.size % req->dev->conf->logical_block_size) { ++ if (!virtio_blk_sect_range_ok(req->dev, sector, req->qiov.size)) { + virtio_blk_rw_complete(req, -EIO); + return; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-blk-Release-s-rq-queue-at-system_reset.patch b/SOURCES/kvm-virtio-blk-Release-s-rq-queue-at-system_reset.patch new file mode 100644 index 0000000..f730a9a --- /dev/null +++ b/SOURCES/kvm-virtio-blk-Release-s-rq-queue-at-system_reset.patch @@ -0,0 +1,68 @@ +From 200748826a6069c31f5004dde00614675bac659b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 7 Feb 2017 09:21:53 +0100 +Subject: [PATCH 02/11] virtio-blk: Release s->rq queue at system_reset + +RH-Author: Fam Zheng +Message-id: <20170207092153.8331-1-famz@redhat.com> +Patchwork-id: 73553 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] virtio-blk: Release s->rq queue at system_reset +Bugzilla: 1361488 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi + +At system_reset, there is no point in retrying the queued request, +because the driver that issued the request won't be around any more. + +Analyzed-by: Laszlo Ersek +Reported-by: Laszlo Ersek +Signed-off-by: Fam Zheng +Reviewed-by: Laszlo Ersek +Message-id: 1470278654-13525-2-git-send-email-famz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 26307f6aa451708b8c60a49d605a78bbd29f70ef) + + Conflicts: + hw/block/virtio-blk.c + +The context is different. The hunk is placed below bdrv_drain_all() with +the comment updated to match downstream. + +There is no virtio_blk_free_request in qemu-kvm in RHEL 7, use g_free(). + +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/block/virtio-blk.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index 4f6aa22..462ac81 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -474,6 +474,7 @@ static void virtio_blk_dma_restart_cb(void *opaque, int running, + static void virtio_blk_reset(VirtIODevice *vdev) + { + VirtIOBlock *s = VIRTIO_BLK(vdev); ++ VirtIOBlockReq *req; + + #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + if (s->dataplane) { +@@ -487,6 +488,13 @@ static void virtio_blk_reset(VirtIODevice *vdev) + */ + bdrv_drain_all(); + bdrv_set_enable_write_cache(s->bs, s->original_wce); ++ /* We drop queued requests after bdrv_drain_all() because bdrv_drain_all() ++ * itself can produce them. */ ++ while (s->rq) { ++ req = s->rq; ++ s->rq = req->next; ++ g_free(req); ++ } + } + + /* coalesce internal state, copy to pci i/o region 0 +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-blk-Treat-read-write-beyond-end-as-invalid.patch b/SOURCES/kvm-virtio-blk-Treat-read-write-beyond-end-as-invalid.patch new file mode 100644 index 0000000..720a75e --- /dev/null +++ b/SOURCES/kvm-virtio-blk-Treat-read-write-beyond-end-as-invalid.patch @@ -0,0 +1,56 @@ +From 55767ddb818ef53eee50777bd276cbf7e7813bfb Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Fri, 31 Oct 2014 16:29:54 +0100 +Subject: [PATCH 17/19] virtio-blk: Treat read/write beyond end as invalid + +Message-id: <1414772996-17272-4-git-send-email-armbru@redhat.com> +Patchwork-id: 62019 +O-Subject: [PATCH RHEL-7.1 qemu-kvm 3/5] virtio-blk: Treat read/write beyond end as invalid +Bugzilla: 1085232 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Fam Zheng + +The block layer fails such reads and writes just fine. However, they +then get treated like valid operations that fail: the error action +gets executed. Unwanted; reporting the error to the guest is the only +sensible action. + +Reject them before passing them to the block layer. This bypasses the +error action and I/O accounting. + +Signed-off-by: Markus Armbruster +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 3c2daac0b98952a858277878cb11294256b39e43) +Signed-off-by: Miroslav Rezanina +--- + hw/block/virtio-blk.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index ffb311c..4f6aa22 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -284,12 +284,19 @@ static void virtio_blk_handle_flush(VirtIOBlockReq *req, MultiReqBuffer *mrb) + static bool virtio_blk_sect_range_ok(VirtIOBlock *dev, + uint64_t sector, size_t size) + { ++ uint64_t nb_sectors = size >> BDRV_SECTOR_BITS; ++ uint64_t total_sectors; ++ + if (sector & dev->sector_mask) { + return false; + } + if (size % dev->conf->logical_block_size) { + return false; + } ++ bdrv_get_geometry(dev->bs, &total_sectors); ++ if (sector > total_sectors || nb_sectors > total_sectors - sector) { ++ return false; ++ } + return true; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-blk-do-not-relay-a-previous-driver-s-WCE-conf.patch b/SOURCES/kvm-virtio-blk-do-not-relay-a-previous-driver-s-WCE-conf.patch new file mode 100644 index 0000000..8d34029 --- /dev/null +++ b/SOURCES/kvm-virtio-blk-do-not-relay-a-previous-driver-s-WCE-conf.patch @@ -0,0 +1,126 @@ +From 20180f303f6fd602ca8fd66bdd746916184177de Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 23 Sep 2013 17:08:02 +0200 +Subject: [PATCH 04/29] virtio-blk: do not relay a previous driver's WCE configuration to the current + +RH-Author: Paolo Bonzini +Message-id: <1379956082-3646-3-git-send-email-pbonzini@redhat.com> +Patchwork-id: 54492 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 2/2] virtio-blk: do not relay a previous driver's WCE configuration to the current +Bugzilla: 1009993 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Kevin Wolf + +The following sequence happens: +- the SeaBIOS virtio-blk driver does not support the WCE feature, which +causes QEMU to disable writeback caching + +- the Linux virtio-blk driver resets the device, finds WCE is available +but writeback caching is disabled; tells block layer to not send cache +flush commands + +- the Linux virtio-blk driver sets the DRIVER_OK bit, which causes +writeback caching to be re-enabled, but the Linux virtio-blk driver does +not know of this side effect and cache flushes remain disabled + +The bug is at the third step. If the guest does know about CONFIG_WCE, +QEMU should ignore the WCE feature's state. The guest will control the +cache mode solely using configuration space. This change makes Linux +do flushes correctly, but Linux will keep SeaBIOS's writethrough mode. + +Hence, whenever the guest is reset, the cache mode of the disk should +be reset to whatever was specified in the "-drive" option. With this +change, the Linux virtio-blk driver finds that writeback caching is +enabled, and tells the block layer to send cache flush commands +appropriately. + +Reported-by: Rusty Russell +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit ef5bc96268ceec64769617dc53b0ac3a20ff351c) +--- + hw/block/virtio-blk.c | 24 ++++++++++++++++++++++-- + include/hw/virtio/virtio-blk.h | 1 + + 2 files changed, 23 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/virtio-blk.c | 24 ++++++++++++++++++++++-- + include/hw/virtio/virtio-blk.h | 1 + + 2 files changed, 23 insertions(+), 2 deletions(-) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index cca0c77..ce1a523 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -460,9 +460,9 @@ static void virtio_blk_dma_restart_cb(void *opaque, int running, + + static void virtio_blk_reset(VirtIODevice *vdev) + { +-#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + VirtIOBlock *s = VIRTIO_BLK(vdev); + ++#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + if (s->dataplane) { + virtio_blk_data_plane_stop(s->dataplane); + } +@@ -473,6 +473,7 @@ static void virtio_blk_reset(VirtIODevice *vdev) + * are per-device request lists. + */ + bdrv_drain_all(); ++ bdrv_set_enable_write_cache(s->bs, s->original_wce); + } + + /* coalesce internal state, copy to pci i/o region 0 +@@ -564,7 +565,25 @@ static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status) + } + + features = vdev->guest_features; +- bdrv_set_enable_write_cache(s->bs, !!(features & (1 << VIRTIO_BLK_F_WCE))); ++ ++ /* A guest that supports VIRTIO_BLK_F_CONFIG_WCE must be able to send ++ * cache flushes. Thus, the "auto writethrough" behavior is never ++ * necessary for guests that support the VIRTIO_BLK_F_CONFIG_WCE feature. ++ * Leaving it enabled would break the following sequence: ++ * ++ * Guest started with "-drive cache=writethrough" ++ * Guest sets status to 0 ++ * Guest sets DRIVER bit in status field ++ * Guest reads host features (WCE=0, CONFIG_WCE=1) ++ * Guest writes guest features (WCE=0, CONFIG_WCE=1) ++ * Guest writes 1 to the WCE configuration field (writeback mode) ++ * Guest sets DRIVER_OK bit in status field ++ * ++ * s->bs would erroneously be placed in writethrough mode. ++ */ ++ if (!(features & (1 << VIRTIO_BLK_F_CONFIG_WCE))) { ++ bdrv_set_enable_write_cache(s->bs, !!(features & (1 << VIRTIO_BLK_F_WCE))); ++ } + } + + static void virtio_blk_save(QEMUFile *f, void *opaque) +@@ -674,6 +693,7 @@ static int virtio_blk_device_init(VirtIODevice *vdev) + } + + blkconf_serial(&blk->conf, &blk->serial); ++ s->original_wce = bdrv_enable_write_cache(blk->conf.bs); + if (blkconf_geometry(&blk->conf, NULL, 65535, 255, 255) < 0) { + return -1; + } +diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h +index b87cf49..41885da 100644 +--- a/include/hw/virtio/virtio-blk.h ++++ b/include/hw/virtio/virtio-blk.h +@@ -123,6 +123,7 @@ typedef struct VirtIOBlock { + BlockConf *conf; + VirtIOBlkConf blk; + unsigned short sector_mask; ++ bool original_wce; + VMChangeStateEntry *change; + #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + Notifier migration_state_notifier; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-blk-switch-exit-callback-to-VirtioDeviceClass.patch b/SOURCES/kvm-virtio-blk-switch-exit-callback-to-VirtioDeviceClass.patch new file mode 100644 index 0000000..6e7963d --- /dev/null +++ b/SOURCES/kvm-virtio-blk-switch-exit-callback-to-VirtioDeviceClass.patch @@ -0,0 +1,76 @@ +From f9630bb1a1267c9d3f8b2d3e70bfa9a05bd0cf07 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:34 +0100 +Subject: [PATCH 07/14] virtio-blk: switch exit callback to VirtioDeviceClass + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-5-git-send-email-armbru@redhat.com> +Patchwork-id: 56922 +O-Subject: [PATCH 7.0 qemu-kvm 04/10] virtio-blk: switch exit callback to VirtioDeviceClass +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This ensures hot-unplug is handled properly by the proxy, and avoids +leaking bus_name which is freed by virtio_device_exit. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 40dfc16f5fe0afb66f9436718781264dfadb6c61) +Signed-off-by: Markus Armbruster +--- + hw/block/virtio-blk.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/virtio-blk.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c +index 49a23c3..aa37cc9 100644 +--- a/hw/block/virtio-blk.c ++++ b/hw/block/virtio-blk.c +@@ -729,20 +729,18 @@ static int virtio_blk_device_init(VirtIODevice *vdev) + return 0; + } + +-static int virtio_blk_device_exit(DeviceState *dev) ++static void virtio_blk_device_exit(VirtIODevice *vdev) + { +- VirtIODevice *vdev = VIRTIO_DEVICE(dev); +- VirtIOBlock *s = VIRTIO_BLK(dev); ++ VirtIOBlock *s = VIRTIO_BLK(vdev); + #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + remove_migration_state_change_notifier(&s->migration_state_notifier); + virtio_blk_data_plane_destroy(s->dataplane); + s->dataplane = NULL; + #endif + qemu_del_vm_change_state_handler(s->change); +- unregister_savevm(dev, "virtio-blk", s); ++ unregister_savevm(DEVICE(vdev), "virtio-blk", s); + blockdev_mark_auto_del(s->bs); + virtio_cleanup(vdev); +- return 0; + } + + static Property virtio_blk_properties[] = { +@@ -754,10 +752,10 @@ static void virtio_blk_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = virtio_blk_device_exit; + dc->props = virtio_blk_properties; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = virtio_blk_device_init; ++ vdc->exit = virtio_blk_device_exit; + vdc->get_config = virtio_blk_update_config; + vdc->set_config = virtio_blk_set_config; + vdc->get_features = virtio_blk_get_features; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-bus-cleanup-plug-unplug-interface.patch b/SOURCES/kvm-virtio-bus-cleanup-plug-unplug-interface.patch new file mode 100644 index 0000000..ad7bf81 --- /dev/null +++ b/SOURCES/kvm-virtio-bus-cleanup-plug-unplug-interface.patch @@ -0,0 +1,178 @@ +From 39ea2d15631b21f962924e88b62e3586e531ac66 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:33 +0100 +Subject: [PATCH 06/14] virtio-bus: cleanup plug/unplug interface + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-4-git-send-email-armbru@redhat.com> +Patchwork-id: 56924 +O-Subject: [PATCH 7.0 qemu-kvm 03/10] virtio-bus: cleanup plug/unplug interface +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +Right now we have these pairs: + +- virtio_bus_plug_device/virtio_bus_destroy_device. The first + takes a VirtIODevice, the second takes a VirtioBusState + +- device_plugged/device_unplug callbacks in the VirtioBusClass + (here it's just the naming that is inconsistent) + +- virtio_bus_destroy_device is not called by anyone (and since + it calls qdev_free, it would be called by the proxies---but + then the callback is useless since the proxies can do whatever + they want before calling virtio_bus_destroy_device) + +And there is a k->init but no k->exit, hence virtio_device_exit is +overwritten by subclasses (except virtio-9p). This cleans it up by: + +- renaming the device_unplug callback to device_unplugged + +- renaming virtio_bus_plug_device to virtio_bus_device_plugged, + matching the callback name + +- renaming virtio_bus_destroy_device to virtio_bus_device_unplugged, + removing the qdev_free, making it take a VirtIODevice and calling it + from virtio_device_exit + +- adding a k->exit callback + +virtio_device_exit is still overwritten, the next patches will fix that. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 5e96f5d2f8d2696ef7d2d8d7282c18fa6023470b) + +Conflicts: + include/hw/virtio/virtio-bus.h + +Trivially conflicts because we lack commit 6ce69d1 "virtio: Support +transports which can specify the vring alignment". +Signed-off-by: Markus Armbruster +--- + hw/virtio/virtio-bus.c | 19 +++++++++---------- + hw/virtio/virtio.c | 7 ++++++- + include/hw/virtio/virtio-bus.h | 6 +++--- + include/hw/virtio/virtio.h | 1 + + 4 files changed, 19 insertions(+), 14 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-bus.c | 19 +++++++++---------- + hw/virtio/virtio.c | 7 ++++++- + include/hw/virtio/virtio-bus.h | 6 +++--- + include/hw/virtio/virtio.h | 1 + + 4 files changed, 19 insertions(+), 14 deletions(-) + +diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c +index 17dd06e..eb77019 100644 +--- a/hw/virtio/virtio-bus.c ++++ b/hw/virtio/virtio-bus.c +@@ -37,8 +37,8 @@ do { printf("virtio_bus: " fmt , ## __VA_ARGS__); } while (0) + #define DPRINTF(fmt, ...) do { } while (0) + #endif + +-/* Plug the VirtIODevice */ +-int virtio_bus_plug_device(VirtIODevice *vdev) ++/* A VirtIODevice is being plugged */ ++int virtio_bus_device_plugged(VirtIODevice *vdev) + { + DeviceState *qdev = DEVICE(vdev); + BusState *qbus = BUS(qdev_get_parent_bus(qdev)); +@@ -64,20 +64,19 @@ void virtio_bus_reset(VirtioBusState *bus) + } + } + +-/* Destroy the VirtIODevice */ +-void virtio_bus_destroy_device(VirtioBusState *bus) ++/* A VirtIODevice is being unplugged */ ++void virtio_bus_device_unplugged(VirtIODevice *vdev) + { +- BusState *qbus = BUS(bus); +- VirtioBusClass *klass = VIRTIO_BUS_GET_CLASS(bus); +- VirtIODevice *vdev = virtio_bus_get_device(bus); ++ DeviceState *qdev = DEVICE(vdev); ++ BusState *qbus = BUS(qdev_get_parent_bus(qdev)); ++ VirtioBusClass *klass = VIRTIO_BUS_GET_CLASS(qbus); + + DPRINTF("%s: remove device.\n", qbus->name); + + if (vdev != NULL) { +- if (klass->device_unplug != NULL) { +- klass->device_unplug(qbus->parent); ++ if (klass->device_unplugged != NULL) { ++ klass->device_unplugged(qbus->parent); + } +- object_unparent(OBJECT(vdev)); + } + } + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index a5251cb..b5bb0b6 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -1118,14 +1118,19 @@ static int virtio_device_init(DeviceState *qdev) + if (k->init(vdev) < 0) { + return -1; + } +- virtio_bus_plug_device(vdev); ++ virtio_bus_device_plugged(vdev); + return 0; + } + + static int virtio_device_exit(DeviceState *qdev) + { + VirtIODevice *vdev = VIRTIO_DEVICE(qdev); ++ VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(qdev); + ++ virtio_bus_device_unplugged(vdev); ++ if (k->exit) { ++ k->exit(vdev); ++ } + if (vdev->bus_name) { + g_free(vdev->bus_name); + vdev->bus_name = NULL; +diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h +index 105ca6d..228c9d7 100644 +--- a/include/hw/virtio/virtio-bus.h ++++ b/include/hw/virtio/virtio-bus.h +@@ -61,16 +61,16 @@ typedef struct VirtioBusClass { + * transport independent exit function. + * This is called by virtio-bus just before the device is unplugged. + */ +- void (*device_unplug)(DeviceState *d); ++ void (*device_unplugged)(DeviceState *d); + } VirtioBusClass; + + struct VirtioBusState { + BusState parent_obj; + }; + +-int virtio_bus_plug_device(VirtIODevice *vdev); ++int virtio_bus_device_plugged(VirtIODevice *vdev); + void virtio_bus_reset(VirtioBusState *bus); +-void virtio_bus_destroy_device(VirtioBusState *bus); ++void virtio_bus_device_unplugged(VirtIODevice *bus); + /* Get the device id of the plugged device. */ + uint16_t virtio_bus_get_vdev_id(VirtioBusState *bus); + /* Get the config_len field of the plugged device. */ +diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h +index f2aa6a3..cd886c3 100644 +--- a/include/hw/virtio/virtio.h ++++ b/include/hw/virtio/virtio.h +@@ -125,6 +125,7 @@ typedef struct VirtioDeviceClass { + /* This is what a VirtioDevice must implement */ + DeviceClass parent; + int (*init)(VirtIODevice *vdev); ++ void (*exit)(VirtIODevice *vdev); + uint32_t (*get_features)(VirtIODevice *vdev, uint32_t requested_features); + uint32_t (*bad_features)(VirtIODevice *vdev); + void (*set_features)(VirtIODevice *vdev, uint32_t val); +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-bus-remove-vdev-field.patch b/SOURCES/kvm-virtio-bus-remove-vdev-field.patch new file mode 100644 index 0000000..a665c22 --- /dev/null +++ b/SOURCES/kvm-virtio-bus-remove-vdev-field.patch @@ -0,0 +1,256 @@ +From 9164d579671d6147799c92ee35b9efc1760155cb Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:31 +0100 +Subject: [PATCH 04/14] virtio-bus: remove vdev field + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56927 +O-Subject: [PATCH 7.0 qemu-kvm 01/10] virtio-bus: remove vdev field +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +The vdev field is complicated to synchronize. Just access the +BusState's list of children. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 06d3dff0723c712a4b109ced4243edf49ef850af) + +Conflicts: + hw/virtio/virtio-mmio.c + +We don't have hw/virtio/virtio-mmio.c. + +Semantic conflict in hw/pci/pci-hotplug, because we got commit 1e3043a +via upstream 1.5.3, but upstream master has not. +Signed-off-by: Markus Armbruster +--- + hw/pci/pci-hotplug.c | 2 +- + hw/virtio/virtio-bus.c | 65 +++++++++++++++++++++++++----------------- + hw/virtio/virtio-pci.c | 2 +- + include/hw/virtio/virtio-bus.h | 16 ++++++++--- + 4 files changed, 53 insertions(+), 32 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/pci/pci-hotplug.c | 2 +- + hw/virtio/virtio-bus.c | 65 ++++++++++++++++++++++++---------------- + hw/virtio/virtio-pci.c | 2 +- + include/hw/virtio/virtio-bus.h | 16 +++++++-- + 4 files changed, 53 insertions(+), 32 deletions(-) + +diff --git a/hw/pci/pci-hotplug.c b/hw/pci/pci-hotplug.c +index 667e40c..eae28d4 100644 +--- a/hw/pci/pci-hotplug.c ++++ b/hw/pci/pci-hotplug.c +@@ -96,7 +96,7 @@ static int scsi_hot_add(Monitor *mon, DeviceState *adapter, + return -1; + } + virtio_proxy = VIRTIO_PCI(adapter); +- adapter = DEVICE(virtio_proxy->bus.vdev); ++ adapter = DEVICE(virtio_bus_get_device(&virtio_proxy->bus)); + scsibus = (SCSIBus *) + object_dynamic_cast(OBJECT(QLIST_FIRST(&adapter->child_bus)), + TYPE_SCSI_BUS); +diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c +index e6b103c..17dd06e 100644 +--- a/hw/virtio/virtio-bus.c ++++ b/hw/virtio/virtio-bus.c +@@ -46,8 +46,6 @@ int virtio_bus_plug_device(VirtIODevice *vdev) + VirtioBusClass *klass = VIRTIO_BUS_GET_CLASS(bus); + DPRINTF("%s: plug device.\n", qbus->name); + +- bus->vdev = vdev; +- + if (klass->device_plugged != NULL) { + klass->device_plugged(qbus->parent); + } +@@ -58,9 +56,11 @@ int virtio_bus_plug_device(VirtIODevice *vdev) + /* Reset the virtio_bus */ + void virtio_bus_reset(VirtioBusState *bus) + { ++ VirtIODevice *vdev = virtio_bus_get_device(bus); ++ + DPRINTF("%s: reset device.\n", qbus->name); +- if (bus->vdev != NULL) { +- virtio_reset(bus->vdev); ++ if (vdev != NULL) { ++ virtio_reset(vdev); + } + } + +@@ -69,62 +69,71 @@ void virtio_bus_destroy_device(VirtioBusState *bus) + { + BusState *qbus = BUS(bus); + VirtioBusClass *klass = VIRTIO_BUS_GET_CLASS(bus); ++ VirtIODevice *vdev = virtio_bus_get_device(bus); ++ + DPRINTF("%s: remove device.\n", qbus->name); + +- if (bus->vdev != NULL) { ++ if (vdev != NULL) { + if (klass->device_unplug != NULL) { + klass->device_unplug(qbus->parent); + } +- object_unparent(OBJECT(bus->vdev)); +- bus->vdev = NULL; ++ object_unparent(OBJECT(vdev)); + } + } + + /* Get the device id of the plugged device. */ + uint16_t virtio_bus_get_vdev_id(VirtioBusState *bus) + { +- assert(bus->vdev != NULL); +- return bus->vdev->device_id; ++ VirtIODevice *vdev = virtio_bus_get_device(bus); ++ assert(vdev != NULL); ++ return vdev->device_id; + } + + /* Get the config_len field of the plugged device. */ + size_t virtio_bus_get_vdev_config_len(VirtioBusState *bus) + { +- assert(bus->vdev != NULL); +- return bus->vdev->config_len; ++ VirtIODevice *vdev = virtio_bus_get_device(bus); ++ assert(vdev != NULL); ++ return vdev->config_len; + } + + /* Get the features of the plugged device. */ + uint32_t virtio_bus_get_vdev_features(VirtioBusState *bus, + uint32_t requested_features) + { ++ VirtIODevice *vdev = virtio_bus_get_device(bus); + VirtioDeviceClass *k; +- assert(bus->vdev != NULL); +- k = VIRTIO_DEVICE_GET_CLASS(bus->vdev); ++ ++ assert(vdev != NULL); ++ k = VIRTIO_DEVICE_GET_CLASS(vdev); + assert(k->get_features != NULL); +- return k->get_features(bus->vdev, requested_features); ++ return k->get_features(vdev, requested_features); + } + + /* Set the features of the plugged device. */ + void virtio_bus_set_vdev_features(VirtioBusState *bus, + uint32_t requested_features) + { ++ VirtIODevice *vdev = virtio_bus_get_device(bus); + VirtioDeviceClass *k; +- assert(bus->vdev != NULL); +- k = VIRTIO_DEVICE_GET_CLASS(bus->vdev); ++ ++ assert(vdev != NULL); ++ k = VIRTIO_DEVICE_GET_CLASS(vdev); + if (k->set_features != NULL) { +- k->set_features(bus->vdev, requested_features); ++ k->set_features(vdev, requested_features); + } + } + + /* Get bad features of the plugged device. */ + uint32_t virtio_bus_get_vdev_bad_features(VirtioBusState *bus) + { ++ VirtIODevice *vdev = virtio_bus_get_device(bus); + VirtioDeviceClass *k; +- assert(bus->vdev != NULL); +- k = VIRTIO_DEVICE_GET_CLASS(bus->vdev); ++ ++ assert(vdev != NULL); ++ k = VIRTIO_DEVICE_GET_CLASS(vdev); + if (k->bad_features != NULL) { +- return k->bad_features(bus->vdev); ++ return k->bad_features(vdev); + } else { + return 0; + } +@@ -133,22 +142,26 @@ uint32_t virtio_bus_get_vdev_bad_features(VirtioBusState *bus) + /* Get config of the plugged device. */ + void virtio_bus_get_vdev_config(VirtioBusState *bus, uint8_t *config) + { ++ VirtIODevice *vdev = virtio_bus_get_device(bus); + VirtioDeviceClass *k; +- assert(bus->vdev != NULL); +- k = VIRTIO_DEVICE_GET_CLASS(bus->vdev); ++ ++ assert(vdev != NULL); ++ k = VIRTIO_DEVICE_GET_CLASS(vdev); + if (k->get_config != NULL) { +- k->get_config(bus->vdev, config); ++ k->get_config(vdev, config); + } + } + + /* Set config of the plugged device. */ + void virtio_bus_set_vdev_config(VirtioBusState *bus, uint8_t *config) + { ++ VirtIODevice *vdev = virtio_bus_get_device(bus); + VirtioDeviceClass *k; +- assert(bus->vdev != NULL); +- k = VIRTIO_DEVICE_GET_CLASS(bus->vdev); ++ ++ assert(vdev != NULL); ++ k = VIRTIO_DEVICE_GET_CLASS(vdev); + if (k->set_config != NULL) { +- k->set_config(bus->vdev, config); ++ k->set_config(vdev, config); + } + } + +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index 6f5c434..1287e59 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -948,7 +948,7 @@ static void virtio_pci_device_plugged(DeviceState *d) + uint8_t *config; + uint32_t size; + +- proxy->vdev = bus->vdev; ++ proxy->vdev = virtio_bus_get_device(bus); + + config = proxy->pci_dev.config; + if (proxy->class_code) { +diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h +index 9ed60f9..105ca6d 100644 +--- a/include/hw/virtio/virtio-bus.h ++++ b/include/hw/virtio/virtio-bus.h +@@ -66,10 +66,6 @@ typedef struct VirtioBusClass { + + struct VirtioBusState { + BusState parent_obj; +- /* +- * Only one VirtIODevice can be plugged on the bus. +- */ +- VirtIODevice *vdev; + }; + + int virtio_bus_plug_device(VirtIODevice *vdev); +@@ -92,4 +88,16 @@ void virtio_bus_get_vdev_config(VirtioBusState *bus, uint8_t *config); + /* Set config of the plugged device. */ + void virtio_bus_set_vdev_config(VirtioBusState *bus, uint8_t *config); + ++static inline VirtIODevice *virtio_bus_get_device(VirtioBusState *bus) ++{ ++ BusState *qbus = &bus->parent_obj; ++ BusChild *kid = QTAILQ_FIRST(&qbus->children); ++ DeviceState *qdev = kid ? kid->child : NULL; ++ ++ /* This is used on the data path, the cast is guaranteed ++ * to succeed by the qdev machinery. ++ */ ++ return (VirtIODevice *)qdev; ++} ++ + #endif /* VIRTIO_BUS_H */ +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-decrement-vq-inuse-in-virtqueue_discard.patch b/SOURCES/kvm-virtio-decrement-vq-inuse-in-virtqueue_discard.patch new file mode 100644 index 0000000..949fd97 --- /dev/null +++ b/SOURCES/kvm-virtio-decrement-vq-inuse-in-virtqueue_discard.patch @@ -0,0 +1,48 @@ +From bf7aa4bb11e9991a3d5a1007dbe52dd0ac6dae99 Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Wed, 5 Oct 2016 17:22:25 +0200 +Subject: [PATCH 3/8] virtio: decrement vq->inuse in virtqueue_discard() + +RH-Author: Ladi Prosek +Message-id: <1475666548-9186-4-git-send-email-lprosek@redhat.com> +Patchwork-id: 72482 +O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 3/6] virtio: decrement vq->inuse in virtqueue_discard() +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +From: Stefan Hajnoczi + +virtqueue_discard() moves vq->last_avail_idx back so the element can be +popped again. It's necessary to decrement vq->inuse to avoid "leaking" +the element count. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Cornelia Huck +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 58a83c61496eeb0d31571a07a51bc1947e3379ac) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 91c9642..87a7639 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -255,6 +255,7 @@ void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len) + { + vq->last_avail_idx--; ++ vq->inuse--; + virtqueue_unmap_sg(vq, elem, len); + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-error-out-if-guest-exceeds-virtqueue-size.patch b/SOURCES/kvm-virtio-error-out-if-guest-exceeds-virtqueue-size.patch new file mode 100644 index 0000000..85dee6d --- /dev/null +++ b/SOURCES/kvm-virtio-error-out-if-guest-exceeds-virtqueue-size.patch @@ -0,0 +1,57 @@ +From acb67d9c43f3921861eebbabb447a85644e99320 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 25 Jul 2016 12:55:36 +0200 +Subject: [PATCH 2/2] virtio: error out if guest exceeds virtqueue size +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Stefan Hajnoczi +Message-id: <1469451336-20117-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 71428 +O-Subject: [virt-devel] [RHEL-7.3 EMBARGOED qemu-kvm PATCH 1/1] virtio: error out if guest exceeds virtqueue size +Bugzilla: 1359729 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laszlo Ersek + +A broken or malicious guest can submit more requests than the virtqueue +size permits. + +The guest can submit requests without bothering to wait for completion +and is therefore not bound by virtqueue size. This requires reusing +vring descriptors in more than one request, which is incorrect but +possible. Processing a request allocates a VirtQueueElement and +therefore causes unbounded memory allocation controlled by the guest. + +Exit with an error if the guest provides more requests than the +virtqueue size permits. This bounds memory allocation and makes the +buggy guest visible to the user. + +This patch fixes CVE-2016-5403. + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 132b5af..a861870 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -452,6 +452,11 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem) + + max = vq->vring.num; + ++ if (vq->inuse >= max) { ++ error_report("Virtqueue size exceeded"); ++ exit(1); ++ } ++ + i = head = virtqueue_get_head(vq, vq->last_avail_idx++); + if (vq->vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) { + vring_avail_event(vq, vring_avail_idx(vq)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-introduce-virtqueue_discard.patch b/SOURCES/kvm-virtio-introduce-virtqueue_discard.patch new file mode 100644 index 0000000..ee5aedc --- /dev/null +++ b/SOURCES/kvm-virtio-introduce-virtqueue_discard.patch @@ -0,0 +1,66 @@ +From 06ca4cab12a4216d40c297d8a79c83a4df4dd80e Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Wed, 5 Oct 2016 17:22:24 +0200 +Subject: [PATCH 2/8] virtio: introduce virtqueue_discard() + +RH-Author: Ladi Prosek +Message-id: <1475666548-9186-3-git-send-email-lprosek@redhat.com> +Patchwork-id: 72481 +O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 2/6] virtio: introduce virtqueue_discard() +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +From: Jason Wang + +This patch introduces virtqueue_discard() to discard a descriptor and +unmap the sgs. This will be used by the patch that will discard +descriptor when packet is truncated. + +Cc: Michael S. Tsirkin +Signed-off-by: Jason Wang +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 29b9f5efd78ae0f9cc02dd169b6e80d2c404bade) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 7 +++++++ + include/hw/virtio/virtio.h | 2 ++ + 2 files changed, 9 insertions(+) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 5ee899a..91c9642 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -251,6 +251,13 @@ static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem, + 0, elem->out_sg[i].iov_len); + } + ++void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, ++ unsigned int len) ++{ ++ vq->last_avail_idx--; ++ virtqueue_unmap_sg(vq, elem, len); ++} ++ + void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len, unsigned int idx) + { +diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h +index 9e22865..de32425 100644 +--- a/include/hw/virtio/virtio.h ++++ b/include/hw/virtio/virtio.h +@@ -165,6 +165,8 @@ void virtio_del_queue(VirtIODevice *vdev, int n); + void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len); + void virtqueue_flush(VirtQueue *vq, unsigned int count); ++void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem, ++ unsigned int len); + void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, + unsigned int len, unsigned int idx); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-introduce-virtqueue_unmap_sg.patch b/SOURCES/kvm-virtio-introduce-virtqueue_unmap_sg.patch new file mode 100644 index 0000000..bd3e621 --- /dev/null +++ b/SOURCES/kvm-virtio-introduce-virtqueue_unmap_sg.patch @@ -0,0 +1,70 @@ +From 9d3ccec3b8323f7cfbce932f8c6530aa4105ba02 Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Wed, 5 Oct 2016 17:22:23 +0200 +Subject: [PATCH 1/8] virtio: introduce virtqueue_unmap_sg() + +RH-Author: Ladi Prosek +Message-id: <1475666548-9186-2-git-send-email-lprosek@redhat.com> +Patchwork-id: 72480 +O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 1/6] virtio: introduce virtqueue_unmap_sg() +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +From: Jason Wang + +Factor out sg unmapping logic. This will be reused by the patch that +can discard descriptor. + +Cc: Michael S. Tsirkin +Cc: Andrew James +Signed-off-by: Jason Wang +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit ce317461573bac12b10d67699b4ddf1f97cf066c) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 0df4ed3..5ee899a 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -228,14 +228,12 @@ int virtio_queue_empty(VirtQueue *vq) + return vring_avail_idx(vq) == vq->last_avail_idx; + } + +-void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, +- unsigned int len, unsigned int idx) ++static void virtqueue_unmap_sg(VirtQueue *vq, const VirtQueueElement *elem, ++ unsigned int len) + { + unsigned int offset; + int i; + +- trace_virtqueue_fill(vq, elem, len, idx); +- + offset = 0; + for (i = 0; i < elem->in_num; i++) { + size_t size = MIN(len - offset, elem->in_sg[i].iov_len); +@@ -251,6 +249,14 @@ void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, + cpu_physical_memory_unmap(elem->out_sg[i].iov_base, + elem->out_sg[i].iov_len, + 0, elem->out_sg[i].iov_len); ++} ++ ++void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, ++ unsigned int len, unsigned int idx) ++{ ++ trace_virtqueue_fill(vq, elem, len, idx); ++ ++ virtqueue_unmap_sg(vq, elem, len); + + idx = (idx + vring_used_idx(vq)) % vq->vring.num; + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-net-Do-not-filter-VLANs-without-F_CTRL_VLAN.patch b/SOURCES/kvm-virtio-net-Do-not-filter-VLANs-without-F_CTRL_VLAN.patch new file mode 100644 index 0000000..51bc040 --- /dev/null +++ b/SOURCES/kvm-virtio-net-Do-not-filter-VLANs-without-F_CTRL_VLAN.patch @@ -0,0 +1,55 @@ +From e892a0cc154fecadbd209c4cac1ebcc9208173d9 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Mon, 4 Aug 2014 04:12:07 +0200 +Subject: [PATCH 1/4] virtio-net: Do not filter VLANs without F_CTRL_VLAN + +Message-id: <1407125528-27862-2-git-send-email-akong@redhat.com> +Patchwork-id: 60415 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 1/2] virtio-net: Do not filter VLANs without F_CTRL_VLAN +Bugzilla: 1065724 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Xiao Wang +RH-Acked-by: Vlad Yasevich + +From: Stefan Fritsch + +If VIRTIO_NET_F_CTRL_VLAN is not negotiated, do not filter out all +VLAN-tagged packets but send them to the guest. + +This fixes VLANs with OpenBSD guests (and probably NetBSD, too, because +the OpenBSD driver started as a port from NetBSD). + +Signed-off-by: Stefan Fritsch +Signed-off-by: Amos Kong +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 0b1eaa8803e680de9a05727355dfe3d306b81e17) +--- + hw/net/virtio-net.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index f72be9f..8e58139 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -490,6 +490,12 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features) + } + vhost_net_ack_features(tap_get_vhost_net(nc->peer), features); + } ++ ++ if ((1 << VIRTIO_NET_F_CTRL_VLAN) & features) { ++ memset(n->vlans, 0, MAX_VLAN >> 3); ++ } else { ++ memset(n->vlans, 0xff, MAX_VLAN >> 3); ++ } + } + + static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd, +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-add-feature-bit-for-any-header-s-g.patch b/SOURCES/kvm-virtio-net-add-feature-bit-for-any-header-s-g.patch new file mode 100644 index 0000000..ee97b67 --- /dev/null +++ b/SOURCES/kvm-virtio-net-add-feature-bit-for-any-header-s-g.patch @@ -0,0 +1,128 @@ +From 01ebac2f7d54e80a690c855680d35574d118b072 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 12 Mar 2014 06:52:43 +0100 +Subject: [PATCH 06/16] virtio-net: add feature bit for any header s/g + +Message-id: <1394169006-8402-1-git-send-email-mst@redhat.com> +Patchwork-id: 58046 +O-Subject: [PATCH qemu-kvm RHEL7.0] virtio-net: add feature bit for any header s/g +Bugzilla: 990989 +RH-Acked-by: Xiao Wang +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek + +Old qemu versions required that 1st s/g entry is the header. + +Since QEMU 1.5, patchset titled "virtio-net: iovec handling cleanup" +removed this limitation but a feature bit is needed so guests know it's +safe to lay out header differently. + +This patch applies on top and adds such a feature bit to QEMU. +It is set by default for virtio-net. +virtio net header inline with the data is beneficial +for latency and small packet bandwidth - guest driver +code utilizing this feature has been acked but missed 3.11 +by a narrow margin, it's pending for 3.12. + +This feature bit is cleared by default when compatibility with old +machine types is requested. + +Other performance-sensitive devices (blk and scsi) +don't yet support arbitrary s/g layouts, so +we only set this bit for virtio-net for now. +There are plans to allow arbitrary layouts there, but +no code has been posted yet. + +Cc: Rusty Russell +Reviewed-by: Laszlo Ersek +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 488f069bd1f3aeb6ee748acb02b7581831bcb3f8) + +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7155286 +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=990989 +Tested: on developer's box + +Conflicts: + include/hw/i386/pc.h +--- + +Oops, the patch got lost somehow. +I was sure our last rebase included it but no ... +Pls review ASAP and we'll discuss setting blocker for this one +separately. + +Impossible to fix in zstream since it would affect +migration. + + include/hw/i386/pc.h | 4 ++++ + include/hw/virtio/virtio-net.h | 1 + + include/hw/virtio/virtio.h | 2 ++ + hw/i386/pc_piix.c | 4 ++++ + 4 files changed, 11 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/i386/pc_piix.c | 4 ++++ + include/hw/i386/pc.h | 4 ++++ + include/hw/virtio/virtio-net.h | 1 + + include/hw/virtio/virtio.h | 2 ++ + 4 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 697f12f..98a5253 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -904,6 +904,10 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = TYPE_USB_DEVICE,\ + .property = "msos-desc",\ + .value = "no",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "any_layout",\ ++ .value = "off",\ + } + + static void pc_compat_rhel650(QEMUMachineInitArgs *args) +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index f56e9ea..8a69347 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -274,6 +274,10 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t); + .driver = TYPE_X86_CPU,\ + .property = "pmu",\ + .value = "on",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "any_layout",\ ++ .value = "off",\ + } + + #define PC_COMPAT_1_4 \ +diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h +index beeead7..75723a8 100644 +--- a/include/hw/virtio/virtio-net.h ++++ b/include/hw/virtio/virtio-net.h +@@ -231,6 +231,7 @@ struct virtio_net_ctrl_mq { + + #define DEFINE_VIRTIO_NET_FEATURES(_state, _field) \ + DEFINE_VIRTIO_COMMON_FEATURES(_state, _field), \ ++ DEFINE_PROP_BIT("any_layout", _state, _field, VIRTIO_F_ANY_LAYOUT, true), \ + DEFINE_PROP_BIT("csum", _state, _field, VIRTIO_NET_F_CSUM, true), \ + DEFINE_PROP_BIT("guest_csum", _state, _field, VIRTIO_NET_F_GUEST_CSUM, true), \ + DEFINE_PROP_BIT("gso", _state, _field, VIRTIO_NET_F_GSO, true), \ +diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h +index cd886c3..9e22865 100644 +--- a/include/hw/virtio/virtio.h ++++ b/include/hw/virtio/virtio.h +@@ -43,6 +43,8 @@ + /* We notify when the ring is completely used, even if the guest is suppressing + * callbacks */ + #define VIRTIO_F_NOTIFY_ON_EMPTY 24 ++/* Can the device handle any descriptor layout? */ ++#define VIRTIO_F_ANY_LAYOUT 27 + /* We support indirect buffer descriptors */ + #define VIRTIO_RING_F_INDIRECT_DESC 28 + /* The Guest publishes the used index for which it expects an interrupt +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-add-vlan-receive-state-to-RxFilterInfo.patch b/SOURCES/kvm-virtio-net-add-vlan-receive-state-to-RxFilterInfo.patch new file mode 100644 index 0000000..97a25b0 --- /dev/null +++ b/SOURCES/kvm-virtio-net-add-vlan-receive-state-to-RxFilterInfo.patch @@ -0,0 +1,154 @@ +From 89c377a3dbf9f2caf94f210025c96bc84f7c2a4d Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Mon, 4 Aug 2014 04:12:08 +0200 +Subject: [PATCH 2/4] virtio-net: add vlan receive state to RxFilterInfo + +Message-id: <1407125528-27862-3-git-send-email-akong@redhat.com> +Patchwork-id: 60416 +O-Subject: [RHEL-7.1/7.0.z qemu-kvm PATCH 2/2] virtio-net: add vlan receive state to RxFilterInfo +Bugzilla: 1065724 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Xiao Wang +RH-Acked-by: Vlad Yasevich + +Stefan Fritsch just fixed a virtio-net driver bug [1], virtio-net won't +filter out VLAN-tagged packets if VIRTIO_NET_F_CTRL_VLAN isn't negotiated. + +This patch added a new field to @RxFilterInfo to indicate vlan receive +state ('normal', 'none', 'all'). If VIRTIO_NET_F_CTRL_VLAN isn't +negotiated, vlan receive state will be 'all', then all VLAN-tagged packets +will be received by guest. + +This patch also fixed a boundary issue in visiting vlan table. + +[1] http://lists.nongnu.org/archive/html/qemu-devel/2014-02/msg02604.html + +Signed-off-by: Amos Kong +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Eric Blake +(backport from commit f7bc8ef8091229a4bec0e2a40af90abb8dcb3834) +--- + hw/net/virtio-net.c | 42 +++++++++++++++++++++++++++++------------- + qapi-schema.json | 3 +++ + qmp-commands.hx | 2 ++ + 3 files changed, 34 insertions(+), 13 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 42 +++++++++++++++++++++++++++++------------- + qapi-schema.json | 3 +++ + qmp-commands.hx | 2 ++ + 3 files changed, 34 insertions(+), 13 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 8e58139..4a50869 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -222,13 +222,33 @@ static char *mac_strdup_printf(const uint8_t *mac) + mac[1], mac[2], mac[3], mac[4], mac[5]); + } + ++static intList *get_vlan_table(VirtIONet *n) ++{ ++ intList *list, *entry; ++ int i, j; ++ ++ list = NULL; ++ for (i = 0; i < MAX_VLAN >> 5; i++) { ++ for (j = 0; n->vlans[i] && j <= 0x1f; j++) { ++ if (n->vlans[i] & (1U << j)) { ++ entry = g_malloc0(sizeof(*entry)); ++ entry->value = (i << 5) + j; ++ entry->next = list; ++ list = entry; ++ } ++ } ++ } ++ ++ return list; ++} ++ + static RxFilterInfo *virtio_net_query_rxfilter(NetClientState *nc) + { + VirtIONet *n = qemu_get_nic_opaque(nc); ++ VirtIODevice *vdev = VIRTIO_DEVICE(n); + RxFilterInfo *info; + strList *str_list, *entry; +- intList *int_list, *int_entry; +- int i, j; ++ int i; + + info = g_malloc0(sizeof(*info)); + info->name = g_strdup(nc->name); +@@ -273,19 +293,15 @@ static RxFilterInfo *virtio_net_query_rxfilter(NetClientState *nc) + str_list = entry; + } + info->multicast_table = str_list; ++ info->vlan_table = get_vlan_table(n); + +- int_list = NULL; +- for (i = 0; i < MAX_VLAN >> 5; i++) { +- for (j = 0; n->vlans[i] && j < 0x1f; j++) { +- if (n->vlans[i] & (1U << j)) { +- int_entry = g_malloc0(sizeof(*int_entry)); +- int_entry->value = (i << 5) + j; +- int_entry->next = int_list; +- int_list = int_entry; +- } +- } ++ if (!((1 << VIRTIO_NET_F_CTRL_VLAN) & vdev->guest_features)) { ++ info->vlan = RX_STATE_ALL; ++ } else if (!info->vlan_table) { ++ info->vlan = RX_STATE_NONE; ++ } else { ++ info->vlan = RX_STATE_NORMAL; + } +- info->vlan_table = int_list; + + /* enable event notification after query */ + nc->rxfilter_notify_enabled = 1; +diff --git a/qapi-schema.json b/qapi-schema.json +index 017b3b7..aaa86f5 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -4044,6 +4044,8 @@ + # + # @unicast: unicast receive state + # ++# @vlan: vlan receive state (Since 2.0) ++# + # @broadcast-allowed: whether to receive broadcast + # + # @multicast-overflow: multicast table is overflowed or not +@@ -4067,6 +4069,7 @@ + 'promiscuous': 'bool', + 'multicast': 'RxState', + 'unicast': 'RxState', ++ 'vlan': 'RxState', + 'broadcast-allowed': 'bool', + 'multicast-overflow': 'bool', + 'unicast-overflow': 'bool', +diff --git a/qmp-commands.hx b/qmp-commands.hx +index 08a01ee..1d4be84 100644 +--- a/qmp-commands.hx ++++ b/qmp-commands.hx +@@ -3230,6 +3230,7 @@ Each array entry contains the following: + - "promiscuous": promiscuous mode is enabled (json-bool) + - "multicast": multicast receive state (one of 'normal', 'none', 'all') + - "unicast": unicast receive state (one of 'normal', 'none', 'all') ++- "vlan": vlan receive state (one of 'normal', 'none', 'all') (Since 2.0) + - "broadcast-allowed": allow to receive broadcast (json-bool) + - "multicast-overflow": multicast table is overflowed (json-bool) + - "unicast-overflow": unicast table is overflowed (json-bool) +@@ -3247,6 +3248,7 @@ Example: + "name": "vnet0", + "main-mac": "52:54:00:12:34:56", + "unicast": "normal", ++ "vlan": "normal", + "vlan-table": [ + 4, + 0 +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-broken-RX-filtering-logic-fixed.patch b/SOURCES/kvm-virtio-net-broken-RX-filtering-logic-fixed.patch new file mode 100644 index 0000000..16ba2aa --- /dev/null +++ b/SOURCES/kvm-virtio-net-broken-RX-filtering-logic-fixed.patch @@ -0,0 +1,49 @@ +From d16828fb1034ceb05e3e690065aa1ddc2088d53c Mon Sep 17 00:00:00 2001 +From: Dmitry Fleytman +Date: Tue, 19 Nov 2013 13:18:27 +0100 +Subject: [PATCH 03/14] virtio-net: broken RX filtering logic fixed + +RH-Author: Dmitry Fleytman +Message-id: <1384867107-25295-1-git-send-email-dfleytma@redhat.com> +Patchwork-id: 55756 +O-Subject: [RHEL-7 qemu-kvm PATCH] virtio-net: broken RX filtering logic fixed +Bugzilla: 1029370 +RH-Acked-by: Yan Vugenfirer +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Amos Kong + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1029370 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6606668 +Upstream-status: cc386e96727442f5b67052d4e0a602f6f652ffe6 + +Upon processing of VIRTIO_NET_CTRL_MAC_TABLE_SET command +multicast list overwrites unicast list in mac_table. +This leads to broken logic for both unicast and multicast RX filtering. + +Signed-off-by: Dmitry Fleytman +--- + hw/net/virtio-net.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index f889841..3bc1eed 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -595,7 +595,8 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + } + + if (n->mac_table.in_use + mac_data.entries <= MAC_TABLE_ENTRIES) { +- s = iov_to_buf(iov, iov_cnt, 0, n->mac_table.macs, ++ s = iov_to_buf(iov, iov_cnt, 0, ++ &n->mac_table.macs[n->mac_table.in_use * ETH_ALEN], + mac_data.entries * ETH_ALEN); + if (s != mac_data.entries * ETH_ALEN) { + goto error; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-don-t-update-mac_table-in-error-state.patch b/SOURCES/kvm-virtio-net-don-t-update-mac_table-in-error-state.patch new file mode 100644 index 0000000..ce94a81 --- /dev/null +++ b/SOURCES/kvm-virtio-net-don-t-update-mac_table-in-error-state.patch @@ -0,0 +1,130 @@ +From 4b542df026dfcc30802d300e56a99799f410ef50 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Mon, 6 Jan 2014 05:29:20 +0100 +Subject: [PATCH 7/8] virtio-net: don't update mac_table in error state + +RH-Author: Amos Kong +Message-id: <1388986160-19461-1-git-send-email-akong@redhat.com> +Patchwork-id: 56495 +O-Subject: [RHEL-7.0 qemu-kvm PATCH] virtio-net: don't update mac_table in error state +Bugzilla: 1048671 +RH-Acked-by: Xiao Wang +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: 1048671 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6805382 + +mac_table was always cleaned up first in handling +VIRTIO_NET_CTRL_MAC_TABLE_SET command, and we din't recover +mac_table content in error state, it's not correct. + +This patch makes all the changes in temporal variables, +only update the real mac_table if everything is ok. +We won't change mac_table in error state, so rxfilter +notification isn't needed. + +This patch also fixed same problame in + http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg01188.html + (not merge) + +I will send patch for virtio spec to clarifying this change. + +Signed-off-by: Amos Kong +Reviewed-by: Vlad Yasevich +Acked-by: Jason Wang +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit cae2e5562cdaf3aafa1c4ec2d5f2b19af6c886dd) +--- + hw/net/virtio-net.c | 35 ++++++++++++++++++++--------------- + 1 files changed, 20 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 35 ++++++++++++++++++++--------------- + 1 files changed, 20 insertions(+), 15 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 915aa70..21b126f 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -548,11 +548,11 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + return VIRTIO_NET_ERR; + } + +- n->mac_table.in_use = 0; +- n->mac_table.first_multi = 0; +- n->mac_table.uni_overflow = 0; +- n->mac_table.multi_overflow = 0; +- memset(n->mac_table.macs, 0, MAC_TABLE_ENTRIES * ETH_ALEN); ++ int in_use = 0; ++ int first_multi = 0; ++ uint8_t uni_overflow = 0; ++ uint8_t multi_overflow = 0; ++ uint8_t *macs = g_malloc0(MAC_TABLE_ENTRIES * ETH_ALEN); + + s = iov_to_buf(iov, iov_cnt, 0, &mac_data.entries, + sizeof(mac_data.entries)); +@@ -567,19 +567,19 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + } + + if (mac_data.entries <= MAC_TABLE_ENTRIES) { +- s = iov_to_buf(iov, iov_cnt, 0, n->mac_table.macs, ++ s = iov_to_buf(iov, iov_cnt, 0, macs, + mac_data.entries * ETH_ALEN); + if (s != mac_data.entries * ETH_ALEN) { + goto error; + } +- n->mac_table.in_use += mac_data.entries; ++ in_use += mac_data.entries; + } else { +- n->mac_table.uni_overflow = 1; ++ uni_overflow = 1; + } + + iov_discard_front(&iov, &iov_cnt, mac_data.entries * ETH_ALEN); + +- n->mac_table.first_multi = n->mac_table.in_use; ++ first_multi = in_use; + + s = iov_to_buf(iov, iov_cnt, 0, &mac_data.entries, + sizeof(mac_data.entries)); +@@ -594,24 +594,29 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + goto error; + } + +- if (n->mac_table.in_use + mac_data.entries <= MAC_TABLE_ENTRIES) { +- s = iov_to_buf(iov, iov_cnt, 0, +- &n->mac_table.macs[n->mac_table.in_use * ETH_ALEN], ++ if (in_use + mac_data.entries <= MAC_TABLE_ENTRIES) { ++ s = iov_to_buf(iov, iov_cnt, 0, &macs[in_use * ETH_ALEN], + mac_data.entries * ETH_ALEN); + if (s != mac_data.entries * ETH_ALEN) { + goto error; + } +- n->mac_table.in_use += mac_data.entries; ++ in_use += mac_data.entries; + } else { +- n->mac_table.multi_overflow = 1; ++ multi_overflow = 1; + } + ++ n->mac_table.in_use = in_use; ++ n->mac_table.first_multi = first_multi; ++ n->mac_table.uni_overflow = uni_overflow; ++ n->mac_table.multi_overflow = multi_overflow; ++ memcpy(n->mac_table.macs, macs, MAC_TABLE_ENTRIES * ETH_ALEN); ++ g_free(macs); + rxfilter_notify(nc); + + return VIRTIO_NET_OK; + + error: +- rxfilter_notify(nc); ++ g_free(macs); + return VIRTIO_NET_ERR; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-drop-assert-on-vm-stop.patch b/SOURCES/kvm-virtio-net-drop-assert-on-vm-stop.patch new file mode 100644 index 0000000..6b5c6fe --- /dev/null +++ b/SOURCES/kvm-virtio-net-drop-assert-on-vm-stop.patch @@ -0,0 +1,47 @@ +From 83375cf67c9567c94808e70fa9def3383a97320c Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Fri, 19 Dec 2014 13:51:53 +0100 +Subject: [PATCH 02/16] virtio-net: drop assert on vm stop + +Message-id: <1418997113-32517-1-git-send-email-akong@redhat.com> +Patchwork-id: 62996 +O-Subject: [RHEL-7.2 qemu-kvm PATCH] virtio-net: drop assert on vm stop +Bugzilla: 1139562 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Fam Zheng +RH-Acked-by: Xiao Wang + +From: Michael S. Tsirkin + +On vm stop, vm_running state set to stopped +before device is notified, so callbacks can get envoked with +vm_running = false; and this is not an error. + +Cc: qemu-stable@nongnu.org +Acked-by: Jason Wang +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 131c5221fe25a9547c4a388a3d26ff7fd14843e5) + +Signed-off-by: Amos Kong +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 4a50869..3fde455 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1025,8 +1025,6 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q) + return num_packets; + } + +- assert(vdev->vm_running); +- + if (q->async_tx.elem.out_num) { + virtio_queue_set_notification(q->tx_vq, 0); + return num_packets; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-net-dynamic-network-offloads-configuration.patch b/SOURCES/kvm-virtio-net-dynamic-network-offloads-configuration.patch new file mode 100644 index 0000000..65e26dd --- /dev/null +++ b/SOURCES/kvm-virtio-net-dynamic-network-offloads-configuration.patch @@ -0,0 +1,256 @@ +From bb34da88524f313681005435f8fd6d905ca81b6a Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Thu, 17 Aug 2017 09:45:35 +0200 +Subject: [PATCH 2/4] virtio-net: dynamic network offloads configuration + +RH-Author: Dr. David Alan Gilbert +Message-id: <20170817094536.12740-2-dgilbert@redhat.com> +Patchwork-id: 76021 +O-Subject: [RHEL-7.5/7.4.z/7.3.z/7.2.z qemu-kvm PATCH v2 1/2] virtio-net: dynamic network offloads configuration +Bugzilla: 1480428 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Thomas Huth + +From: Dmitry Fleytman + +Virtio-net driver currently negotiates network offloads +on startup via features mechanism and have no ability to +disable and re-enable offloads later. +This patch introduced a new control command that allows +to configure device network offloads state dynamically. +The patch also introduces a new feature flag +VIRTIO_NET_F_CTRL_GUEST_OFFLOADS. + +Signed-off-by: Dmitry Fleytman +Signed-off-by: Michael S. Tsirkin +Message-id: 20130520081814.GA8162@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 644c98587d4ccc09e7592e1688e4e7fa363c5a75) + +RHEL7.0 qemu-kvm only: Configure ctrl_guest_offloads off +Signed-off-by: Dr. David Alan Gilbert + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 99 +++++++++++++++++++++++++++++++++++------- + include/hw/i386/pc.h | 4 ++ + include/hw/virtio/virtio-net.h | 14 ++++++ + 3 files changed, 102 insertions(+), 15 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 3fde455..eb2feaf 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -477,6 +477,34 @@ static uint32_t virtio_net_bad_features(VirtIODevice *vdev) + return features; + } + ++static void virtio_net_apply_guest_offloads(VirtIONet *n) ++{ ++ tap_set_offload(qemu_get_subqueue(n->nic, 0)->peer, ++ !!(n->curr_guest_offloads & (1ULL << VIRTIO_NET_F_GUEST_CSUM)), ++ !!(n->curr_guest_offloads & (1ULL << VIRTIO_NET_F_GUEST_TSO4)), ++ !!(n->curr_guest_offloads & (1ULL << VIRTIO_NET_F_GUEST_TSO6)), ++ !!(n->curr_guest_offloads & (1ULL << VIRTIO_NET_F_GUEST_ECN)), ++ !!(n->curr_guest_offloads & (1ULL << VIRTIO_NET_F_GUEST_UFO))); ++} ++ ++static uint64_t virtio_net_guest_offloads_by_features(uint32_t features) ++{ ++ static const uint64_t guest_offloads_mask = ++ (1ULL << VIRTIO_NET_F_GUEST_CSUM) | ++ (1ULL << VIRTIO_NET_F_GUEST_TSO4) | ++ (1ULL << VIRTIO_NET_F_GUEST_TSO6) | ++ (1ULL << VIRTIO_NET_F_GUEST_ECN) | ++ (1ULL << VIRTIO_NET_F_GUEST_UFO); ++ ++ return guest_offloads_mask & features; ++} ++ ++static inline uint64_t virtio_net_supported_guest_offloads(VirtIONet *n) ++{ ++ VirtIODevice *vdev = VIRTIO_DEVICE(n); ++ return virtio_net_guest_offloads_by_features(vdev->guest_features); ++} ++ + static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features) + { + VirtIONet *n = VIRTIO_NET(vdev); +@@ -487,12 +515,9 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features) + virtio_net_set_mrg_rx_bufs(n, !!(features & (1 << VIRTIO_NET_F_MRG_RXBUF))); + + if (n->has_vnet_hdr) { +- tap_set_offload(qemu_get_subqueue(n->nic, 0)->peer, +- (features >> VIRTIO_NET_F_GUEST_CSUM) & 1, +- (features >> VIRTIO_NET_F_GUEST_TSO4) & 1, +- (features >> VIRTIO_NET_F_GUEST_TSO6) & 1, +- (features >> VIRTIO_NET_F_GUEST_ECN) & 1, +- (features >> VIRTIO_NET_F_GUEST_UFO) & 1); ++ n->curr_guest_offloads = ++ virtio_net_guest_offloads_by_features(features); ++ virtio_net_apply_guest_offloads(n); + } + + for (i = 0; i < n->max_queues; i++) { +@@ -547,6 +572,43 @@ static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd, + return VIRTIO_NET_OK; + } + ++static int virtio_net_handle_offloads(VirtIONet *n, uint8_t cmd, ++ struct iovec *iov, unsigned int iov_cnt) ++{ ++ VirtIODevice *vdev = VIRTIO_DEVICE(n); ++ uint64_t offloads; ++ size_t s; ++ ++ if (!((1 << VIRTIO_NET_F_CTRL_GUEST_OFFLOADS) & vdev->guest_features)) { ++ return VIRTIO_NET_ERR; ++ } ++ ++ s = iov_to_buf(iov, iov_cnt, 0, &offloads, sizeof(offloads)); ++ if (s != sizeof(offloads)) { ++ return VIRTIO_NET_ERR; ++ } ++ ++ if (cmd == VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET) { ++ uint64_t supported_offloads; ++ ++ if (!n->has_vnet_hdr) { ++ return VIRTIO_NET_ERR; ++ } ++ ++ supported_offloads = virtio_net_supported_guest_offloads(n); ++ if (offloads & ~supported_offloads) { ++ return VIRTIO_NET_ERR; ++ } ++ ++ n->curr_guest_offloads = offloads; ++ virtio_net_apply_guest_offloads(n); ++ ++ return VIRTIO_NET_OK; ++ } else { ++ return VIRTIO_NET_ERR; ++ } ++} ++ + static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + struct iovec *iov, unsigned int iov_cnt) + { +@@ -735,6 +797,8 @@ static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq) + status = virtio_net_handle_vlan_table(n, ctrl.cmd, iov, iov_cnt); + } else if (ctrl.class == VIRTIO_NET_CTRL_MQ) { + status = virtio_net_handle_mq(n, ctrl.cmd, iov, iov_cnt); ++ } else if (ctrl.class == VIRTIO_NET_CTRL_GUEST_OFFLOADS) { ++ status = virtio_net_handle_offloads(n, ctrl.cmd, iov, iov_cnt); + } + + s = iov_from_buf(elem.in_sg, elem.in_num, 0, &status, sizeof(status)); +@@ -1253,6 +1317,10 @@ static void virtio_net_save(QEMUFile *f, void *opaque) + qemu_put_be32(f, n->vqs[i].tx_waiting); + } + } ++ ++ if ((1 << VIRTIO_NET_F_CTRL_GUEST_OFFLOADS) & vdev->guest_features) { ++ qemu_put_be64(f, n->curr_guest_offloads); ++ } + } + + static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) +@@ -1317,15 +1385,6 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) + error_report("virtio-net: saved image requires vnet_hdr=on"); + return -1; + } +- +- if (n->has_vnet_hdr) { +- tap_set_offload(qemu_get_queue(n->nic)->peer, +- (vdev->guest_features >> VIRTIO_NET_F_GUEST_CSUM) & 1, +- (vdev->guest_features >> VIRTIO_NET_F_GUEST_TSO4) & 1, +- (vdev->guest_features >> VIRTIO_NET_F_GUEST_TSO6) & 1, +- (vdev->guest_features >> VIRTIO_NET_F_GUEST_ECN) & 1, +- (vdev->guest_features >> VIRTIO_NET_F_GUEST_UFO) & 1); +- } + } + + if (version_id >= 9) { +@@ -1364,6 +1423,16 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) + } + } + ++ if ((1 << VIRTIO_NET_F_CTRL_GUEST_OFFLOADS) & vdev->guest_features) { ++ n->curr_guest_offloads = qemu_get_be64(f); ++ } else { ++ n->curr_guest_offloads = virtio_net_supported_guest_offloads(n); ++ } ++ ++ if (peer_has_vnet_hdr(n)) { ++ virtio_net_apply_guest_offloads(n); ++ } ++ + virtio_net_set_queues(n); + + /* Find the first multicast entry in the saved MAC filter */ +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 3b8f7d8..89bb458 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -318,6 +318,10 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t); + .property = "vectors",\ + /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */\ + .value = stringify(0xFFFFFFFF),\ ++ },{ \ ++ .driver = "virtio-net-pci", \ ++ .property = "ctrl_guest_offloads", \ ++ .value = "off", \ + },{\ + .driver = "e1000",\ + .property = "romfile",\ +diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h +index a02fc50..02fa5c5 100644 +--- a/include/hw/virtio/virtio-net.h ++++ b/include/hw/virtio/virtio-net.h +@@ -31,6 +31,8 @@ + /* The feature bitmap for virtio net */ + #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ + #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ ++#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Control channel offload ++ * configuration support */ + #define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ + #define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type */ + #define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ +@@ -190,6 +192,7 @@ typedef struct VirtIONet { + size_t config_size; + char *netclient_name; + char *netclient_type; ++ uint64_t curr_guest_offloads; + } VirtIONet; + + #define VIRTIO_NET_CTRL_MAC 1 +@@ -229,6 +232,15 @@ struct virtio_net_ctrl_mq { + #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1 + #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000 + ++/* ++ * Control network offloads ++ * ++ * Dynamic offloads are available with the ++ * VIRTIO_NET_F_CTRL_GUEST_OFFLOADS feature bit. ++ */ ++#define VIRTIO_NET_CTRL_GUEST_OFFLOADS 5 ++ #define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET 0 ++ + #define DEFINE_VIRTIO_NET_FEATURES(_state, _field) \ + DEFINE_VIRTIO_COMMON_FEATURES(_state, _field), \ + DEFINE_PROP_BIT("any_layout", _state, _field, VIRTIO_F_ANY_LAYOUT, true), \ +@@ -250,6 +262,8 @@ struct virtio_net_ctrl_mq { + DEFINE_PROP_BIT("ctrl_vlan", _state, _field, VIRTIO_NET_F_CTRL_VLAN, true), \ + DEFINE_PROP_BIT("ctrl_rx_extra", _state, _field, VIRTIO_NET_F_CTRL_RX_EXTRA, true), \ + DEFINE_PROP_BIT("ctrl_mac_addr", _state, _field, VIRTIO_NET_F_CTRL_MAC_ADDR, true), \ ++ /* RHEL 7.0 qemu-kvm: ctrl_guest_offloads always configured off */ \ ++ DEFINE_PROP_BIT("ctrl_guest_offloads", _state, _field, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS, false), \ + DEFINE_PROP_BIT("mq", _state, _field, VIRTIO_NET_F_MQ, false) + + #define DEFINE_VIRTIO_NET_PROPERTIES(_state, _field) \ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-net-fix-buffer-overflow-on-invalid-state-load.patch b/SOURCES/kvm-virtio-net-fix-buffer-overflow-on-invalid-state-load.patch new file mode 100644 index 0000000..70fb250 --- /dev/null +++ b/SOURCES/kvm-virtio-net-fix-buffer-overflow-on-invalid-state-load.patch @@ -0,0 +1,80 @@ +From 798f06c3737233a836584a72565f8076907365d9 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:31:36 +0200 +Subject: [PATCH 09/31] virtio-net: fix buffer overflow on invalid state load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-1-git-send-email-mst@redhat.com> +Patchwork-id: 58855 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio-net: fix buffer overflow on invalid state load +Bugzilla: 1095678 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Xiao Wang +RH-Acked-by: Amos Kong + +CVE-2013-4148 QEMU 1.0 integer conversion in +virtio_net_load()@hw/net/virtio-net.c + +Deals with loading a corrupted savevm image. + +> n->mac_table.in_use = qemu_get_be32(f); + +in_use is int so it can get negative when assigned 32bit unsigned value. + +> /* MAC_TABLE_ENTRIES may be different from the saved image */ +> if (n->mac_table.in_use <= MAC_TABLE_ENTRIES) { + +passing this check ^^^ + +> qemu_get_buffer(f, n->mac_table.macs, +> n->mac_table.in_use * ETH_ALEN); + +with good in_use value, "n->mac_table.in_use * ETH_ALEN" can get +positive and bigger than mac_table.macs. For example 0x81000000 +satisfies this condition when ETH_ALEN is 6. + +Fix it by making the value unsigned. +For consistency, change first_multi as well. + +Note: all call sites were audited to confirm that +making them unsigned didn't cause any issues: +it turns out we actually never do math on them, +so it's easy to validate because both values are +always <= MAC_TABLE_ENTRIES. + +Reviewed-by: Michael Roth +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Laszlo Ersek +Signed-off-by: Juan Quintela +(cherry picked from commit 71f7fe48e10a8437c9d42d859389f37157f59980) + +Bugzilla: 1095678 +Tested: on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +--- + include/hw/virtio/virtio-net.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + include/hw/virtio/virtio-net.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h +index 75723a8..a02fc50 100644 +--- a/include/hw/virtio/virtio-net.h ++++ b/include/hw/virtio/virtio-net.h +@@ -174,8 +174,8 @@ typedef struct VirtIONet { + uint8_t nobcast; + uint8_t vhost_started; + struct { +- int in_use; +- int first_multi; ++ uint32_t in_use; ++ uint32_t first_multi; + uint8_t multi_overflow; + uint8_t uni_overflow; + uint8_t *macs; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-fix-guest-triggerable-buffer-overrun.patch b/SOURCES/kvm-virtio-net-fix-guest-triggerable-buffer-overrun.patch new file mode 100644 index 0000000..ddf2952 --- /dev/null +++ b/SOURCES/kvm-virtio-net-fix-guest-triggerable-buffer-overrun.patch @@ -0,0 +1,57 @@ +From 92504013c1489168e3514f3c7342c016156c6af3 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 19 Mar 2014 17:21:02 +0200 +Subject: [PATCH] virtio-net: fix guest-triggerable buffer overrun + +RH-Author: Michael S. Tsirkin +Message-id: <1395242197-28749-1-git-send-email-mst@redhat.com> +O-Subject: [virt-devel][PATCH EMBARGOED qemu-kvm RHEL7.0] virtio-net: fix +Bugzilla: 1078308 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Dr. David Alan Gilbert + +When VM guest programs multicast addresses for +a virtio net card, it supplies a 32 bit +entries counter for the number of addresses. +These addresses are read into tail portion of +a fixed macs array which has size MAC_TABLE_ENTRIES, +at offset equal to in_use. + +To avoid overflow of this array by guest, qemu attempts +to test the size as follows: +- if (in_use + mac_data.entries <= MAC_TABLE_ENTRIES) { + +however, as mac_data.entries is uint32_t, this sum +can overflow, e.g. if in_use is 1 and mac_data.entries +is 0xffffffff then in_use + mac_data.entries will be 0. + +Qemu will then read guest supplied buffer into this +memory, overflowing buffer on heap. + +Signed-off-by: Michael S. Tsirkin + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1078308 +Upstream status: EMBARGOED RT 284849 +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7225956 +--- + hw/net/virtio-net.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 06c53fe..2d559e0 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -594,7 +594,7 @@ static int virtio_net_handle_mac(VirtIONet *n, uint8_t cmd, + goto error; + } + +- if (in_use + mac_data.entries <= MAC_TABLE_ENTRIES) { ++ if (mac_data.entries <= MAC_TABLE_ENTRIES - in_use) { + s = iov_to_buf(iov, iov_cnt, 0, &macs[in_use * ETH_ALEN], + mac_data.entries * ETH_ALEN); + if (s != mac_data.entries * ETH_ALEN) { +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-fix-the-memory-leak-in-rxfilter_notify.patch b/SOURCES/kvm-virtio-net-fix-the-memory-leak-in-rxfilter_notify.patch new file mode 100644 index 0000000..ddd6a40 --- /dev/null +++ b/SOURCES/kvm-virtio-net-fix-the-memory-leak-in-rxfilter_notify.patch @@ -0,0 +1,66 @@ +From 7bbc53ba5ca8c488498cc1f8a66de4e3bad5372c Mon Sep 17 00:00:00 2001 +Message-Id: <7bbc53ba5ca8c488498cc1f8a66de4e3bad5372c.1387276076.git.minovotn@redhat.com> +In-Reply-To: +References: +From: Amos Kong +Date: Sat, 23 Nov 2013 03:17:43 +0100 +Subject: [PATCH 03/16] virtio-net: fix the memory leak in rxfilter_notify() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Amos Kong +Message-id: <1385176664-3852-2-git-send-email-akong@redhat.com> +Patchwork-id: 55866 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 1/2] virtio-net: fix the memory leak in rxfilter_notify() +Bugzilla: 1033810 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Igor Mammedov + +object_get_canonical_path() returns a gchar*, it should be freed by the +caller. + +Signed-off-by: Amos Kong +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Vlad Yasevich +Reviewed-by: Andreas Färber +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 96e35046e4a97df5b4e1e24e217eb1e1701c7c71) +--- + hw/net/virtio-net.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/net/virtio-net.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 3bc1eed..915aa70 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -200,16 +200,16 @@ static void rxfilter_notify(NetClientState *nc) + VirtIONet *n = qemu_get_nic_opaque(nc); + + if (nc->rxfilter_notify_enabled) { ++ gchar *path = object_get_canonical_path(OBJECT(n->qdev)); + if (n->netclient_name) { + event_data = qobject_from_jsonf("{ 'name': %s, 'path': %s }", +- n->netclient_name, +- object_get_canonical_path(OBJECT(n->qdev))); ++ n->netclient_name, path); + } else { +- event_data = qobject_from_jsonf("{ 'path': %s }", +- object_get_canonical_path(OBJECT(n->qdev))); ++ event_data = qobject_from_jsonf("{ 'path': %s }", path); + } + monitor_protocol_event(QEVENT_NIC_RX_FILTER_CHANGED, event_data); + qobject_decref(event_data); ++ g_free(path); + + /* disable event notification to avoid events flooding */ + nc->rxfilter_notify_enabled = 0; +-- +1.7.11.7 + diff --git a/SOURCES/kvm-virtio-net-fix-up-HMP-NIC-info-string-on-reset.patch b/SOURCES/kvm-virtio-net-fix-up-HMP-NIC-info-string-on-reset.patch new file mode 100644 index 0000000..b2832cd --- /dev/null +++ b/SOURCES/kvm-virtio-net-fix-up-HMP-NIC-info-string-on-reset.patch @@ -0,0 +1,48 @@ +From 418947bb253989027df4db46253287436792abd9 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 5 Nov 2013 09:17:42 +0100 +Subject: [PATCH 10/25] virtio-net: fix up HMP NIC info string on reset + +RH-Author: Amos Kong +Message-id: <1383643062-1844-5-git-send-email-akong@redhat.com> +Patchwork-id: 55371 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 4/4] virtio-net: fix up HMP NIC info string on reset +Bugzilla: 1026689 +RH-Acked-by: Vlad Yasevich +RH-Acked-by: Alex Williamson +RH-Acked-by: Xiao Wang +RH-Acked-by: Michael S. Tsirkin + +From: Michael S. Tsirkin + +Bugzilla: 1026689 + +When mac is updated on reset, info string has stale data. +Fix it up. + +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 702d66a813dd84afd7c3d1ad8cbdcc8e3449bcd9) +--- + hw/net/virtio-net.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 9ebcdfe..3290013 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -213,6 +213,7 @@ static void virtio_net_reset(VirtIODevice *vdev) + n->mac_table.uni_overflow = 0; + memset(n->mac_table.macs, 0, MAC_TABLE_ENTRIES * ETH_ALEN); + memcpy(&n->mac[0], &n->nic->conf->macaddr, sizeof(n->mac)); ++ qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac); + memset(n->vlans, 0, MAX_VLAN >> 3); + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-only-delete-bh-that-existed.patch b/SOURCES/kvm-virtio-net-only-delete-bh-that-existed.patch new file mode 100644 index 0000000..043e8c8 --- /dev/null +++ b/SOURCES/kvm-virtio-net-only-delete-bh-that-existed.patch @@ -0,0 +1,53 @@ +From 3c47b10c7a3a86d6fb5fb15a0c41fe512ed44f87 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Thu, 14 Nov 2013 09:40:26 +0100 +Subject: [PATCH 02/14] virtio-net: only delete bh that existed + +RH-Author: Xiao Wang +Message-id: <1384422026-7632-1-git-send-email-jasowang@redhat.com> +Patchwork-id: 55681 +O-Subject: [RHEL7.0 qemu-kvm PATCH] virtio-net: only delete bh that existed +Bugzilla: 922463 +RH-Acked-by: Amos Kong +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Markus Armbruster +RH-Acked-by: Vlad Yasevich + +bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=922463 +upstream: 6b9b8758c15f3bc2875dbd6e2d03c5362b8d6902 +brew build: https://brewweb.devel.redhat.com/taskinfo?taskID=6576713 +test status: tested by my self + +We delete without check whether it existed during exit. This will lead NULL +pointer deference since it was created conditionally depends on guest driver +status and features. So add a check of existence before trying to delete it. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Jason Wang +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +--- + hw/net/virtio-net.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 19c5030..f889841 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1532,7 +1532,7 @@ static int virtio_net_device_exit(DeviceState *qdev) + if (q->tx_timer) { + qemu_del_timer(q->tx_timer); + qemu_free_timer(q->tx_timer); +- } else { ++ } else if (q->tx_bh) { + qemu_bh_delete(q->tx_bh); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-out-of-bounds-buffer-write-on-invalid-sta.patch b/SOURCES/kvm-virtio-net-out-of-bounds-buffer-write-on-invalid-sta.patch new file mode 100644 index 0000000..dc942a9 --- /dev/null +++ b/SOURCES/kvm-virtio-net-out-of-bounds-buffer-write-on-invalid-sta.patch @@ -0,0 +1,76 @@ +From 953a3b8344e504a7333ba9bb6df840d6d94ff872 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:31:47 +0200 +Subject: [PATCH 10/31] virtio-net: out-of-bounds buffer write on invalid state load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-3-git-send-email-mst@redhat.com> +Patchwork-id: 58857 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio-net: out-of-bounds buffer write on invalid state load +Bugzilla: 1095690 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Xiao Wang +RH-Acked-by: Juan Quintela + +CVE-2013-4150 QEMU 1.5.0 out-of-bounds buffer write in +virtio_net_load()@hw/net/virtio-net.c + +This code is in hw/net/virtio-net.c: + + if (n->max_queues > 1) { + if (n->max_queues != qemu_get_be16(f)) { + error_report("virtio-net: different max_queues "); + return -1; + } + + n->curr_queues = qemu_get_be16(f); + for (i = 1; i < n->curr_queues; i++) { + n->vqs[i].tx_waiting = qemu_get_be32(f); + } + } + +Number of vqs is max_queues, so if we get invalid input here, +for example if max_queues = 2, curr_queues = 3, we get +write beyond end of the buffer, with data that comes from +wire. + +This might be used to corrupt qemu memory in hard to predict ways. +Since we have lots of function pointers around, RCE might be possible. + +Signed-off-by: Michael S. Tsirkin +Acked-by: Jason Wang +Reviewed-by: Michael Roth +Signed-off-by: Juan Quintela +(cherry picked from commit eea750a5623ddac7a61982eec8f1c93481857578) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla: 1095690 +--- + hw/net/virtio-net.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 2d559e0..007cc2a 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1327,6 +1327,11 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) + } + + n->curr_queues = qemu_get_be16(f); ++ if (n->curr_queues > n->max_queues) { ++ error_report("virtio-net: curr_queues %x > max_queues %x", ++ n->curr_queues, n->max_queues); ++ return -1; ++ } + for (i = 1; i < n->curr_queues; i++) { + n->vqs[i].tx_waiting = qemu_get_be32(f); + } +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-out-of-bounds-buffer-write-on-load.patch b/SOURCES/kvm-virtio-net-out-of-bounds-buffer-write-on-load.patch new file mode 100644 index 0000000..8a55c1a --- /dev/null +++ b/SOURCES/kvm-virtio-net-out-of-bounds-buffer-write-on-load.patch @@ -0,0 +1,77 @@ +From 33ea847dbe677a3df68fecac80636050f72286ae Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:31:42 +0200 +Subject: [PATCH 11/31] virtio-net: out-of-bounds buffer write on load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-2-git-send-email-mst@redhat.com> +Patchwork-id: 58856 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio-net: out-of-bounds buffer write on load +Bugzilla: 1095685 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela +RH-Acked-by: Xiao Wang +RH-Acked-by: Amos Kong + +CVE-2013-4149 QEMU 1.3.0 out-of-bounds buffer write in +virtio_net_load()@hw/net/virtio-net.c + +> } else if (n->mac_table.in_use) { +> uint8_t *buf = g_malloc0(n->mac_table.in_use); + +We are allocating buffer of size n->mac_table.in_use + +> qemu_get_buffer(f, buf, n->mac_table.in_use * ETH_ALEN); + +and read to the n->mac_table.in_use size buffer n->mac_table.in_use * +ETH_ALEN bytes, corrupting memory. + +If adversary controls state then memory written there is controlled +by adversary. + +Reviewed-by: Michael Roth +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juan Quintela +(cherry picked from commit 98f93ddd84800f207889491e0b5d851386b459cf) + +Bugzilla: 1095685 +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +--- + hw/net/virtio-net.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 15 +++++++++++---- + 1 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 007cc2a..f72be9f 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1273,10 +1273,17 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) + if (n->mac_table.in_use <= MAC_TABLE_ENTRIES) { + qemu_get_buffer(f, n->mac_table.macs, + n->mac_table.in_use * ETH_ALEN); +- } else if (n->mac_table.in_use) { +- uint8_t *buf = g_malloc0(n->mac_table.in_use); +- qemu_get_buffer(f, buf, n->mac_table.in_use * ETH_ALEN); +- g_free(buf); ++ } else { ++ int64_t i; ++ ++ /* Overflow detected - can happen if source has a larger MAC table. ++ * We simply set overflow flag so there's no need to maintain the ++ * table of addresses, discard them all. ++ * Note: 64 bit math to avoid integer overflow. ++ */ ++ for (i = 0; i < (int64_t)n->mac_table.in_use * ETH_ALEN; ++i) { ++ qemu_get_byte(f); ++ } + n->mac_table.multi_overflow = n->mac_table.uni_overflow = 1; + n->mac_table.in_use = 0; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-switch-exit-callback-to-VirtioDeviceClass.patch b/SOURCES/kvm-virtio-net-switch-exit-callback-to-VirtioDeviceClass.patch new file mode 100644 index 0000000..5e6ddf9 --- /dev/null +++ b/SOURCES/kvm-virtio-net-switch-exit-callback-to-VirtioDeviceClass.patch @@ -0,0 +1,81 @@ +From fed60f16a54ee6689b6c03025bbe4704a8e4b251 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:36 +0100 +Subject: [PATCH 09/14] virtio-net: switch exit callback to VirtioDeviceClass + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-7-git-send-email-armbru@redhat.com> +Patchwork-id: 56926 +O-Subject: [PATCH 7.0 qemu-kvm 06/10] virtio-net: switch exit callback to VirtioDeviceClass +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This ensures hot-unplug is handled properly by the proxy, and avoids +leaking bus_name which is freed by virtio_device_exit. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 3786cff5eb384d058395a2729af627fa3253d056) +Signed-off-by: Markus Armbruster +--- + hw/net/virtio-net.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/net/virtio-net.c | 11 ++++------- + 1 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index 21b126f..06c53fe 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1506,16 +1506,15 @@ static int virtio_net_device_init(VirtIODevice *vdev) + return 0; + } + +-static int virtio_net_device_exit(DeviceState *qdev) ++static void virtio_net_device_exit(VirtIODevice *vdev) + { +- VirtIONet *n = VIRTIO_NET(qdev); +- VirtIODevice *vdev = VIRTIO_DEVICE(qdev); ++ VirtIONet *n = VIRTIO_NET(vdev); + int i; + + /* This will stop vhost backend if appropriate. */ + virtio_net_set_status(vdev, 0); + +- unregister_savevm(qdev, "virtio-net", n); ++ unregister_savevm(DEVICE(vdev), "virtio-net", n); + + if (n->netclient_name) { + g_free(n->netclient_name); +@@ -1546,8 +1545,6 @@ static int virtio_net_device_exit(DeviceState *qdev) + g_free(n->vqs); + qemu_del_nic(n->nic); + virtio_cleanup(vdev); +- +- return 0; + } + + static void virtio_net_instance_init(Object *obj) +@@ -1574,10 +1571,10 @@ static void virtio_net_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = virtio_net_device_exit; + dc->props = virtio_net_properties; + set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + vdc->init = virtio_net_device_init; ++ vdc->exit = virtio_net_device_exit; + vdc->get_config = virtio_net_get_config; + vdc->set_config = virtio_net_set_config; + vdc->get_features = virtio_net_get_features; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-net-validate-backend-queue-numbers-against-bu.patch b/SOURCES/kvm-virtio-net-validate-backend-queue-numbers-against-bu.patch new file mode 100644 index 0000000..0d85a2a --- /dev/null +++ b/SOURCES/kvm-virtio-net-validate-backend-queue-numbers-against-bu.patch @@ -0,0 +1,67 @@ +From 30860f89b8dc79b24906e8f7d6d6aa0788616bd1 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Thu, 18 Jan 2018 08:16:16 +0100 +Subject: [PATCH 1/3] virtio-net: validate backend queue numbers against bus + limitation + +RH-Author: Xiao Wang +Message-id: <1516263376-6261-1-git-send-email-jasowang@redhat.com> +Patchwork-id: 78662 +O-Subject: [RHEL7.5 qemu-kvm PATCH] virtio-net: validate backend queue numbers against bus limitation +Bugzilla: 1460872 +RH-Acked-by: wexu@redhat.com +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +Notes: conflict since RHEL7 lacks: +- 575a1c0e4228 ("net: move queue number into NICPeers") +- e6f746b380ad ("virtio-net: Convert to QOM realize") + +We don't validate the backend queue numbers against bus limitation, +this will easily crash qemu if it exceeds the limitation which will +hit the abort() in virtio_del_queue(). An example is trying to +starting a virtio-net device with 256 queues. E.g: + +./qemu-system-x86_64 -netdev tap,id=hn0,queues=256 -device +virtio-net-pci,netdev=hn0 + +Fixing this by doing the validation and fail early. + +Cc: Michael S. Tsirkin +Cc: qemu-stable +Signed-off-by: Jason Wang +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Stefan Hajnoczi +(cherry picked from commit 7e0e736ecdfeac6d3517513d3a702304e4f6cf59) +Signed-off-by: Jason Wang +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/net/virtio-net.c +--- + hw/net/virtio-net.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c +index eb2feaf..3e41acc 100644 +--- a/hw/net/virtio-net.c ++++ b/hw/net/virtio-net.c +@@ -1535,6 +1535,14 @@ static int virtio_net_device_init(VirtIODevice *vdev) + n->config_size); + + n->max_queues = MAX(n->nic_conf.queues, 1); ++ if (n->max_queues * 2 + 1 > VIRTIO_PCI_QUEUE_MAX) { ++ error_report("Invalid number of queues (= %" PRIu32 "), " ++ "must be a postive integer less than %d.", ++ n->max_queues, (VIRTIO_PCI_QUEUE_MAX - 1) / 2); ++ virtio_cleanup(vdev); ++ return -EINVAL; ++ } ++ + n->vqs = g_malloc0(sizeof(VirtIONetQueue) * n->max_queues); + n->vqs[0].rx_vq = virtio_add_queue(vdev, 256, virtio_net_handle_rx); + n->curr_queues = 1; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-out-of-bounds-buffer-write-on-invalid-state-l.patch b/SOURCES/kvm-virtio-out-of-bounds-buffer-write-on-invalid-state-l.patch new file mode 100644 index 0000000..0213d7b --- /dev/null +++ b/SOURCES/kvm-virtio-out-of-bounds-buffer-write-on-invalid-state-l.patch @@ -0,0 +1,73 @@ +From 9dfb93fc21a678858e95e604339d95829f405724 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:31:53 +0200 +Subject: [PATCH 12/31] virtio: out-of-bounds buffer write on invalid state load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-4-git-send-email-mst@redhat.com> +Patchwork-id: 58858 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio: out-of-bounds buffer write on invalid state load +Bugzilla: 1095695 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela +RH-Acked-by: Xiao Wang + +CVE-2013-4151 QEMU 1.0 out-of-bounds buffer write in +virtio_load@hw/virtio/virtio.c + +So we have this code since way back when: + + num = qemu_get_be32(f); + + for (i = 0; i < num; i++) { + vdev->vq[i].vring.num = qemu_get_be32(f); + +array of vqs has size VIRTIO_PCI_QUEUE_MAX, so +on invalid input this will write beyond end of buffer. + +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Michael Roth +Signed-off-by: Juan Quintela +(cherry picked from commit cc45995294b92d95319b4782750a3580cabdbc0c) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla: 1095695 +--- + hw/virtio/virtio.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index b5bb0b6..070d64e 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -851,7 +851,8 @@ int virtio_set_features(VirtIODevice *vdev, uint32_t val) + + int virtio_load(VirtIODevice *vdev, QEMUFile *f) + { +- int num, i, ret; ++ int i, ret; ++ uint32_t num; + uint32_t features; + uint32_t supported_features; + BusState *qbus = qdev_get_parent_bus(DEVICE(vdev)); +@@ -879,6 +880,11 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f) + + num = qemu_get_be32(f); + ++ if (num > VIRTIO_PCI_QUEUE_MAX) { ++ error_report("Invalid number of PCI queues: 0x%x", num); ++ return -1; ++ } ++ + for (i = 0; i < num; i++) { + vdev->vq[i].vring.num = qemu_get_be32(f); + vdev->vq[i].pa = qemu_get_be64(f); +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-pci-Report-an-error-when-msix-vectors-init-fa.patch b/SOURCES/kvm-virtio-pci-Report-an-error-when-msix-vectors-init-fa.patch new file mode 100644 index 0000000..ddaa357 --- /dev/null +++ b/SOURCES/kvm-virtio-pci-Report-an-error-when-msix-vectors-init-fa.patch @@ -0,0 +1,54 @@ +From 31c38d22c1d0e852c05eb8d74295f940fc93aaa8 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 14 Jul 2014 02:38:04 -0500 +Subject: [CHANGE 23/29] virtio-pci: Report an error when msix vectors init + fails +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405305484-12175-1-git-send-email-famz@redhat.com> +Patchwork-id: 59873 +O-Subject: [RHEL-7 qemu-kvm PATCH] virtio-pci: Report an error when msix vectors init fails +Bugzilla: 1095645 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Dr. David Alan Gilbert (git) + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1095645 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7695836 + +Currently vectors silently cleared to 0 if the initialization is failed, +but user should at least have one way to notice this. + +Signed-off-by: Fam Zheng +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit c7ff54825b74f27c3aac85aad540542801630d0a) +Signed-off-by: Fam Zheng +--- + hw/virtio/virtio-pci.c | 2 ++ + 1 file changed, 2 insertions(+) + +Signed-off-by: jen +--- + hw/virtio/virtio-pci.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index 00df4aa..7c09ac4 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -981,6 +981,8 @@ static void virtio_pci_device_plugged(DeviceState *d) + + if (proxy->nvectors && + msix_init_exclusive_bar(&proxy->pci_dev, proxy->nvectors, 1)) { ++ error_report("unable to init msix vectors to %" PRIu32, ++ proxy->nvectors); + proxy->nvectors = 0; + } + +-- +1.9.3 + diff --git a/SOURCES/kvm-virtio-pci-add-device_unplugged-callback.patch b/SOURCES/kvm-virtio-pci-add-device_unplugged-callback.patch new file mode 100644 index 0000000..5f9bfa1 --- /dev/null +++ b/SOURCES/kvm-virtio-pci-add-device_unplugged-callback.patch @@ -0,0 +1,81 @@ +From ad9077535a9a32543cd3e7a6d1cacbc37bc27125 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:40 +0100 +Subject: [PATCH 13/14] virtio-pci: add device_unplugged callback + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-11-git-send-email-armbru@redhat.com> +Patchwork-id: 56929 +O-Subject: [PATCH 7.0 qemu-kvm 10/10] virtio-pci: add device_unplugged callback +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This fixes a crash in hot-unplug of virtio-pci devices behind a PCIe +switch. The crash happens because the ioeventfd is still set whent the +child is destroyed (destruction happens in postorder). Then the proxy +tries to unset to ioeventfd, but the virtqueue structure that holds the +EventNotifier has been trashed in the meanwhile. kvm_set_ioeventfd_pio +does not expect failure and aborts. + +The fix is simply to move parts of uninitialization to a new +device_unplugged callback, which is called before the child is destroyed. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 06a1307379fcd6c551185ad87679cd7ed896b9ea) +Signed-off-by: Markus Armbruster +--- + hw/virtio/virtio-pci.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-pci.c | 12 ++++++++++-- + 1 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index 02ddbe9..00df4aa 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -1007,6 +1007,15 @@ static void virtio_pci_device_plugged(DeviceState *d) + proxy->host_features); + } + ++static void virtio_pci_device_unplugged(DeviceState *d) ++{ ++ PCIDevice *pci_dev = PCI_DEVICE(d); ++ VirtIOPCIProxy *proxy = VIRTIO_PCI(d); ++ ++ virtio_pci_stop_ioeventfd(proxy); ++ msix_uninit_exclusive_bar(pci_dev); ++} ++ + static int virtio_pci_init(PCIDevice *pci_dev) + { + VirtIOPCIProxy *dev = VIRTIO_PCI(pci_dev); +@@ -1021,9 +1030,7 @@ static int virtio_pci_init(PCIDevice *pci_dev) + static void virtio_pci_exit(PCIDevice *pci_dev) + { + VirtIOPCIProxy *proxy = VIRTIO_PCI(pci_dev); +- virtio_pci_stop_ioeventfd(proxy); + memory_region_destroy(&proxy->bar); +- msix_uninit_exclusive_bar(pci_dev); + } + + static void virtio_pci_reset(DeviceState *qdev) +@@ -1557,6 +1564,7 @@ static void virtio_pci_bus_class_init(ObjectClass *klass, void *data) + k->set_guest_notifiers = virtio_pci_set_guest_notifiers; + k->vmstate_change = virtio_pci_vmstate_change; + k->device_plugged = virtio_pci_device_plugged; ++ k->device_unplugged = virtio_pci_device_unplugged; + } + + static const TypeInfo virtio_pci_bus_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-pci-remove-vdev-field.patch b/SOURCES/kvm-virtio-pci-remove-vdev-field.patch new file mode 100644 index 0000000..d31591d --- /dev/null +++ b/SOURCES/kvm-virtio-pci-remove-vdev-field.patch @@ -0,0 +1,465 @@ +From 20d6241976e9adff2ae4a52defb8d8074ccbeff6 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:32 +0100 +Subject: [PATCH 05/14] virtio-pci: remove vdev field + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-3-git-send-email-armbru@redhat.com> +Patchwork-id: 56925 +O-Subject: [PATCH 7.0 qemu-kvm 02/10] virtio-pci: remove vdev field +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +The vdev field is complicated to synchronize. Just access the +BusState's list of children. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit a3fc66d9fd37acbfcee013692246a8ae42bd93bb) + +Conflicts: + hw/virtio/virtio-pci.c + +Conflicts because we lack commit 9e64f8a "hw: set interrupts using pci +irq wrappers". +Signed-off-by: Markus Armbruster +--- + hw/virtio/virtio-pci.c | 110 +++++++++++++++++++++++++++++-------------------- + hw/virtio/virtio-pci.h | 1 - + 2 files changed, 65 insertions(+), 46 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-pci.c | 110 ++++++++++++++++++++++++++++------------------- + hw/virtio/virtio-pci.h | 1 - + 2 files changed, 65 insertions(+), 46 deletions(-) + +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index 1287e59..02ddbe9 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -118,31 +118,40 @@ static inline VirtIOPCIProxy *to_virtio_pci_proxy_fast(DeviceState *d) + static void virtio_pci_notify(DeviceState *d, uint16_t vector) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy_fast(d); ++ + if (msix_enabled(&proxy->pci_dev)) + msix_notify(&proxy->pci_dev, vector); +- else +- qemu_set_irq(proxy->pci_dev.irq[0], proxy->vdev->isr & 1); ++ else { ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ qemu_set_irq(proxy->pci_dev.irq[0], vdev->isr & 1); ++ } + } + + static void virtio_pci_save_config(DeviceState *d, QEMUFile *f) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ + pci_device_save(&proxy->pci_dev, f); + msix_save(&proxy->pci_dev, f); + if (msix_present(&proxy->pci_dev)) +- qemu_put_be16(f, proxy->vdev->config_vector); ++ qemu_put_be16(f, vdev->config_vector); + } + + static void virtio_pci_save_queue(DeviceState *d, int n, QEMUFile *f) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ + if (msix_present(&proxy->pci_dev)) +- qemu_put_be16(f, virtio_queue_vector(proxy->vdev, n)); ++ qemu_put_be16(f, virtio_queue_vector(vdev, n)); + } + + static int virtio_pci_load_config(DeviceState *d, QEMUFile *f) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ + int ret; + ret = pci_device_load(&proxy->pci_dev, f); + if (ret) { +@@ -151,12 +160,12 @@ static int virtio_pci_load_config(DeviceState *d, QEMUFile *f) + msix_unuse_all_vectors(&proxy->pci_dev); + msix_load(&proxy->pci_dev, f); + if (msix_present(&proxy->pci_dev)) { +- qemu_get_be16s(f, &proxy->vdev->config_vector); ++ qemu_get_be16s(f, &vdev->config_vector); + } else { +- proxy->vdev->config_vector = VIRTIO_NO_VECTOR; ++ vdev->config_vector = VIRTIO_NO_VECTOR; + } +- if (proxy->vdev->config_vector != VIRTIO_NO_VECTOR) { +- return msix_vector_use(&proxy->pci_dev, proxy->vdev->config_vector); ++ if (vdev->config_vector != VIRTIO_NO_VECTOR) { ++ return msix_vector_use(&proxy->pci_dev, vdev->config_vector); + } + return 0; + } +@@ -164,13 +173,15 @@ static int virtio_pci_load_config(DeviceState *d, QEMUFile *f) + static int virtio_pci_load_queue(DeviceState *d, int n, QEMUFile *f) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ + uint16_t vector; + if (msix_present(&proxy->pci_dev)) { + qemu_get_be16s(f, &vector); + } else { + vector = VIRTIO_NO_VECTOR; + } +- virtio_queue_set_vector(proxy->vdev, n, vector); ++ virtio_queue_set_vector(vdev, n, vector); + if (vector != VIRTIO_NO_VECTOR) { + return msix_vector_use(&proxy->pci_dev, vector); + } +@@ -180,7 +191,8 @@ static int virtio_pci_load_queue(DeviceState *d, int n, QEMUFile *f) + static int virtio_pci_set_host_notifier_internal(VirtIOPCIProxy *proxy, + int n, bool assign, bool set_handler) + { +- VirtQueue *vq = virtio_get_queue(proxy->vdev, n); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ VirtQueue *vq = virtio_get_queue(vdev, n); + EventNotifier *notifier = virtio_queue_get_host_notifier(vq); + int r = 0; + +@@ -205,6 +217,7 @@ static int virtio_pci_set_host_notifier_internal(VirtIOPCIProxy *proxy, + + static void virtio_pci_start_ioeventfd(VirtIOPCIProxy *proxy) + { ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + int n, r; + + if (!(proxy->flags & VIRTIO_PCI_FLAG_USE_IOEVENTFD) || +@@ -214,7 +227,7 @@ static void virtio_pci_start_ioeventfd(VirtIOPCIProxy *proxy) + } + + for (n = 0; n < VIRTIO_PCI_QUEUE_MAX; n++) { +- if (!virtio_queue_get_num(proxy->vdev, n)) { ++ if (!virtio_queue_get_num(vdev, n)) { + continue; + } + +@@ -228,7 +241,7 @@ static void virtio_pci_start_ioeventfd(VirtIOPCIProxy *proxy) + + assign_error: + while (--n >= 0) { +- if (!virtio_queue_get_num(proxy->vdev, n)) { ++ if (!virtio_queue_get_num(vdev, n)) { + continue; + } + +@@ -241,6 +254,7 @@ assign_error: + + static void virtio_pci_stop_ioeventfd(VirtIOPCIProxy *proxy) + { ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + int r; + int n; + +@@ -249,7 +263,7 @@ static void virtio_pci_stop_ioeventfd(VirtIOPCIProxy *proxy) + } + + for (n = 0; n < VIRTIO_PCI_QUEUE_MAX; n++) { +- if (!virtio_queue_get_num(proxy->vdev, n)) { ++ if (!virtio_queue_get_num(vdev, n)) { + continue; + } + +@@ -262,7 +276,7 @@ static void virtio_pci_stop_ioeventfd(VirtIOPCIProxy *proxy) + static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) + { + VirtIOPCIProxy *proxy = opaque; +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + hwaddr pa; + + switch (addr) { +@@ -277,7 +291,7 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) + pa = (hwaddr)val << VIRTIO_PCI_QUEUE_ADDR_SHIFT; + if (pa == 0) { + virtio_pci_stop_ioeventfd(proxy); +- virtio_reset(proxy->vdev); ++ virtio_reset(vdev); + msix_unuse_all_vectors(&proxy->pci_dev); + } + else +@@ -304,7 +318,7 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) + } + + if (vdev->status == 0) { +- virtio_reset(proxy->vdev); ++ virtio_reset(vdev); + msix_unuse_all_vectors(&proxy->pci_dev); + } + +@@ -340,7 +354,7 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val) + + static uint32_t virtio_ioport_read(VirtIOPCIProxy *proxy, uint32_t addr) + { +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + uint32_t ret = 0xFFFFFFFF; + + switch (addr) { +@@ -386,6 +400,7 @@ static uint64_t virtio_pci_config_read(void *opaque, hwaddr addr, + unsigned size) + { + VirtIOPCIProxy *proxy = opaque; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + uint32_t config = VIRTIO_PCI_CONFIG(&proxy->pci_dev); + uint64_t val = 0; + if (addr < config) { +@@ -395,16 +410,16 @@ static uint64_t virtio_pci_config_read(void *opaque, hwaddr addr, + + switch (size) { + case 1: +- val = virtio_config_readb(proxy->vdev, addr); ++ val = virtio_config_readb(vdev, addr); + break; + case 2: +- val = virtio_config_readw(proxy->vdev, addr); ++ val = virtio_config_readw(vdev, addr); + if (virtio_is_big_endian()) { + val = bswap16(val); + } + break; + case 4: +- val = virtio_config_readl(proxy->vdev, addr); ++ val = virtio_config_readl(vdev, addr); + if (virtio_is_big_endian()) { + val = bswap32(val); + } +@@ -418,6 +433,7 @@ static void virtio_pci_config_write(void *opaque, hwaddr addr, + { + VirtIOPCIProxy *proxy = opaque; + uint32_t config = VIRTIO_PCI_CONFIG(&proxy->pci_dev); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + if (addr < config) { + virtio_ioport_write(proxy, addr, val); + return; +@@ -429,19 +445,19 @@ static void virtio_pci_config_write(void *opaque, hwaddr addr, + */ + switch (size) { + case 1: +- virtio_config_writeb(proxy->vdev, addr, val); ++ virtio_config_writeb(vdev, addr, val); + break; + case 2: + if (virtio_is_big_endian()) { + val = bswap16(val); + } +- virtio_config_writew(proxy->vdev, addr, val); ++ virtio_config_writew(vdev, addr, val); + break; + case 4: + if (virtio_is_big_endian()) { + val = bswap32(val); + } +- virtio_config_writel(proxy->vdev, addr, val); ++ virtio_config_writel(vdev, addr, val); + break; + } + } +@@ -460,6 +476,7 @@ static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, + uint32_t val, int len) + { + VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + + pci_default_write_config(pci_dev, address, val, len); + +@@ -467,8 +484,7 @@ static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, + !(pci_dev->config[PCI_COMMAND] & PCI_COMMAND_MASTER) && + !(proxy->flags & VIRTIO_PCI_FLAG_BUS_MASTER_BUG)) { + virtio_pci_stop_ioeventfd(proxy); +- virtio_set_status(proxy->vdev, +- proxy->vdev->status & ~VIRTIO_CONFIG_S_DRIVER_OK); ++ virtio_set_status(vdev, vdev->status & ~VIRTIO_CONFIG_S_DRIVER_OK); + } + } + +@@ -511,7 +527,8 @@ static int kvm_virtio_pci_irqfd_use(VirtIOPCIProxy *proxy, + unsigned int vector) + { + VirtIOIRQFD *irqfd = &proxy->vector_irqfd[vector]; +- VirtQueue *vq = virtio_get_queue(proxy->vdev, queue_no); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ VirtQueue *vq = virtio_get_queue(vdev, queue_no); + EventNotifier *n = virtio_queue_get_guest_notifier(vq); + int ret; + ret = kvm_irqchip_add_irqfd_notifier(kvm_state, n, irqfd->virq); +@@ -522,7 +539,8 @@ static void kvm_virtio_pci_irqfd_release(VirtIOPCIProxy *proxy, + unsigned int queue_no, + unsigned int vector) + { +- VirtQueue *vq = virtio_get_queue(proxy->vdev, queue_no); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ VirtQueue *vq = virtio_get_queue(vdev, queue_no); + EventNotifier *n = virtio_queue_get_guest_notifier(vq); + VirtIOIRQFD *irqfd = &proxy->vector_irqfd[vector]; + int ret; +@@ -534,7 +552,7 @@ static void kvm_virtio_pci_irqfd_release(VirtIOPCIProxy *proxy, + static int kvm_virtio_pci_vector_use(VirtIOPCIProxy *proxy, int nvqs) + { + PCIDevice *dev = &proxy->pci_dev; +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); + unsigned int vector; + int ret, queue_no; +@@ -583,7 +601,7 @@ undo: + static void kvm_virtio_pci_vector_release(VirtIOPCIProxy *proxy, int nvqs) + { + PCIDevice *dev = &proxy->pci_dev; +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + unsigned int vector; + int queue_no; + VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); +@@ -611,8 +629,9 @@ static int virtio_pci_vq_vector_unmask(VirtIOPCIProxy *proxy, + unsigned int vector, + MSIMessage msg) + { +- VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(proxy->vdev); +- VirtQueue *vq = virtio_get_queue(proxy->vdev, queue_no); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); ++ VirtQueue *vq = virtio_get_queue(vdev, queue_no); + EventNotifier *n = virtio_queue_get_guest_notifier(vq); + VirtIOIRQFD *irqfd; + int ret = 0; +@@ -631,10 +650,10 @@ static int virtio_pci_vq_vector_unmask(VirtIOPCIProxy *proxy, + * Otherwise, set it up now. + */ + if (k->guest_notifier_mask) { +- k->guest_notifier_mask(proxy->vdev, queue_no, false); ++ k->guest_notifier_mask(vdev, queue_no, false); + /* Test after unmasking to avoid losing events. */ + if (k->guest_notifier_pending && +- k->guest_notifier_pending(proxy->vdev, queue_no)) { ++ k->guest_notifier_pending(vdev, queue_no)) { + event_notifier_set(n); + } + } else { +@@ -647,13 +666,14 @@ static void virtio_pci_vq_vector_mask(VirtIOPCIProxy *proxy, + unsigned int queue_no, + unsigned int vector) + { +- VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(proxy->vdev); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); + + /* If guest supports masking, keep irqfd but mask it. + * Otherwise, clean it up now. + */ + if (k->guest_notifier_mask) { +- k->guest_notifier_mask(proxy->vdev, queue_no, true); ++ k->guest_notifier_mask(vdev, queue_no, true); + } else { + kvm_virtio_pci_irqfd_release(proxy, queue_no, vector); + } +@@ -663,7 +683,7 @@ static int virtio_pci_vector_unmask(PCIDevice *dev, unsigned vector, + MSIMessage msg) + { + VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev); +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + int ret, queue_no; + + for (queue_no = 0; queue_no < proxy->nvqs_with_notifiers; queue_no++) { +@@ -693,7 +713,7 @@ undo: + static void virtio_pci_vector_mask(PCIDevice *dev, unsigned vector) + { + VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev); +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + int queue_no; + + for (queue_no = 0; queue_no < proxy->nvqs_with_notifiers; queue_no++) { +@@ -712,7 +732,7 @@ static void virtio_pci_vector_poll(PCIDevice *dev, + unsigned int vector_end) + { + VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev); +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); + int queue_no; + unsigned int vector; +@@ -744,8 +764,9 @@ static int virtio_pci_set_guest_notifier(DeviceState *d, int n, bool assign, + bool with_irqfd) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); +- VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(proxy->vdev); +- VirtQueue *vq = virtio_get_queue(proxy->vdev, n); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); ++ VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev); ++ VirtQueue *vq = virtio_get_queue(vdev, n); + EventNotifier *notifier = virtio_queue_get_guest_notifier(vq); + + if (assign) { +@@ -760,7 +781,7 @@ static int virtio_pci_set_guest_notifier(DeviceState *d, int n, bool assign, + } + + if (!msix_enabled(&proxy->pci_dev) && vdc->guest_notifier_mask) { +- vdc->guest_notifier_mask(proxy->vdev, n, !assign); ++ vdc->guest_notifier_mask(vdev, n, !assign); + } + + return 0; +@@ -775,7 +796,7 @@ static bool virtio_pci_query_guest_notifiers(DeviceState *d) + static int virtio_pci_set_guest_notifiers(DeviceState *d, int nvqs, bool assign) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); +- VirtIODevice *vdev = proxy->vdev; ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev); + int r, n; + bool with_irqfd = msix_enabled(&proxy->pci_dev) && +@@ -869,11 +890,12 @@ static int virtio_pci_set_host_notifier(DeviceState *d, int n, bool assign) + static void virtio_pci_vmstate_change(DeviceState *d, bool running) + { + VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d); ++ VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + + if (running) { + /* Try to find out if the guest has bus master disabled, but is + in ready state. Then we have a buggy guest OS. */ +- if ((proxy->vdev->status & VIRTIO_CONFIG_S_DRIVER_OK) && ++ if ((vdev->status & VIRTIO_CONFIG_S_DRIVER_OK) && + !(proxy->pci_dev.config[PCI_COMMAND] & PCI_COMMAND_MASTER)) { + proxy->flags |= VIRTIO_PCI_FLAG_BUS_MASTER_BUG; + } +@@ -948,8 +970,6 @@ static void virtio_pci_device_plugged(DeviceState *d) + uint8_t *config; + uint32_t size; + +- proxy->vdev = virtio_bus_get_device(bus); +- + config = proxy->pci_dev.config; + if (proxy->class_code) { + pci_config_set_class(config, proxy->class_code); +diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h +index 917bcc5..dc332ae 100644 +--- a/hw/virtio/virtio-pci.h ++++ b/hw/virtio/virtio-pci.h +@@ -82,7 +82,6 @@ typedef struct VirtioPCIClass { + + struct VirtIOPCIProxy { + PCIDevice pci_dev; +- VirtIODevice *vdev; + MemoryRegion bar; + uint32_t flags; + uint32_t class_code; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-recalculate-vq-inuse-after-migration.patch b/SOURCES/kvm-virtio-recalculate-vq-inuse-after-migration.patch new file mode 100644 index 0000000..4bb6852 --- /dev/null +++ b/SOURCES/kvm-virtio-recalculate-vq-inuse-after-migration.patch @@ -0,0 +1,73 @@ +From 4d0430b1f847d672a39c76e6567bb5e88bc33c78 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 16 Sep 2016 08:38:18 +0200 +Subject: [PATCH] virtio: recalculate vq->inuse after migration + +RH-Author: Stefan Hajnoczi +Message-id: <1474015098-11019-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 72372 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] virtio: recalculate vq->inuse after migration +Bugzilla: 1376542 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster +RH-Acked-by: Miroslav Rezanina + +The vq->inuse field is not migrated. Many devices don't hold +VirtQueueElements across migration so it doesn't matter that vq->inuse +starts at 0 on the destination QEMU. + +At least virtio-serial, virtio-blk, and virtio-balloon migrate while +holding VirtQueueElements. For these devices we need to recalculate +vq->inuse upon load so the value is correct. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Michael S. Tsirkin +Reviewed-by: Cornelia Huck +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit bccdef6b1a204db0f41ffb6e24ce373e4d7890d4) +Signed-off-by: Miroslav Rezanina + +Conflicts: + + hw/virtio/virtio.c + + Downstream does not have the vq->used_idx field which was added + upstream as a performance optimization reducing guest memory accesses. + Replace vq->used_idx with vring_used_idx(&vdev->vq[i]). + +Signed-off-by: Stefan Hajnoczi +--- + hw/virtio/virtio.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index e67337b..0df4ed3 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -932,6 +932,21 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f) + vdev->vq[i].last_avail_idx, nheads); + return -1; + } ++ ++ /* ++ * Some devices migrate VirtQueueElements that have been popped ++ * from the avail ring but not yet returned to the used ring. ++ */ ++ vdev->vq[i].inuse = vdev->vq[i].last_avail_idx - ++ vring_used_idx(&vdev->vq[i]); ++ if (vdev->vq[i].inuse > vdev->vq[i].vring.num) { ++ error_report("VQ %d size 0x%x < last_avail_idx 0x%x - " ++ "used_idx 0x%x", ++ i, vdev->vq[i].vring.num, ++ vdev->vq[i].last_avail_idx, ++ vring_used_idx(&vdev->vq[i])); ++ return -1; ++ } + } else if (vdev->vq[i].last_avail_idx) { + error_report("VQ %d address 0x0 " + "inconsistent with Host index 0x%x", +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-rng-check-return-value-of-virtio_load.patch b/SOURCES/kvm-virtio-rng-check-return-value-of-virtio_load.patch new file mode 100644 index 0000000..820121c --- /dev/null +++ b/SOURCES/kvm-virtio-rng-check-return-value-of-virtio_load.patch @@ -0,0 +1,55 @@ +From 590c54266333cf9b147144d80999086dc877aba3 Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Mon, 4 Aug 2014 03:16:39 +0200 +Subject: [PATCH 3/4] virtio-rng: check return value of virtio_load() + +Message-id: <1407122199-6365-1-git-send-email-akong@redhat.com> +Patchwork-id: 60412 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] virtio-rng: check return value of virtio_load() +Bugzilla: 1116941 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Amit Shah + +Bugzilla: 1116941 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7780748 +Upstream: it's fixed by commit 3902d49e, we don't need to + backport whole patch. + +virtio_load() might fail, we should check the return value. + +Signed-off-by: Amos Kong +--- + hw/virtio/virtio-rng.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-rng.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c +index 6895146..83d4a55 100644 +--- a/hw/virtio/virtio-rng.c ++++ b/hw/virtio/virtio-rng.c +@@ -108,11 +108,16 @@ static int virtio_rng_load(QEMUFile *f, void *opaque, int version_id) + { + VirtIORNG *vrng = opaque; + VirtIODevice *vdev = VIRTIO_DEVICE(vrng); ++ int ret; + + if (version_id != 1) { + return -EINVAL; + } +- virtio_load(vdev, f); ++ ++ ret = virtio_load(vdev, f); ++ if (ret) { ++ return ret; ++ } + + /* We may have an element ready but couldn't process it due to a quota + * limit. Make sure to try again after live migration when the quota may +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-rng-switch-exit-callback-to-VirtioDeviceClass.patch b/SOURCES/kvm-virtio-rng-switch-exit-callback-to-VirtioDeviceClass.patch new file mode 100644 index 0000000..dd6c29d --- /dev/null +++ b/SOURCES/kvm-virtio-rng-switch-exit-callback-to-VirtioDeviceClass.patch @@ -0,0 +1,78 @@ +From 8c40efb1aad9861f12b958002c5cfae1d91aeae5 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:39 +0100 +Subject: [PATCH 12/14] virtio-rng: switch exit callback to VirtioDeviceClass + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-10-git-send-email-armbru@redhat.com> +Patchwork-id: 56928 +O-Subject: [PATCH 7.0 qemu-kvm 09/10] virtio-rng: switch exit callback to VirtioDeviceClass +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This ensures hot-unplug is handled properly by the proxy, and avoids +leaking bus_name which is freed by virtio_device_exit. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 7bb6edb0e3dd78d74e0ac980cf6c0a07307f61bf) + +Conflicts: + hw/virtio/virtio-rng.c + +Trivially conflicts because we lack commit bc72ad6 "aio / timers: +Switch entire codebase to the new timer API". +Signed-off-by: Markus Armbruster +--- + hw/virtio/virtio-rng.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio-rng.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c +index bac8421..6895146 100644 +--- a/hw/virtio/virtio-rng.c ++++ b/hw/virtio/virtio-rng.c +@@ -184,16 +184,14 @@ static int virtio_rng_device_init(VirtIODevice *vdev) + return 0; + } + +-static int virtio_rng_device_exit(DeviceState *qdev) ++static void virtio_rng_device_exit(VirtIODevice *vdev) + { +- VirtIORNG *vrng = VIRTIO_RNG(qdev); +- VirtIODevice *vdev = VIRTIO_DEVICE(qdev); ++ VirtIORNG *vrng = VIRTIO_RNG(vdev); + + qemu_del_timer(vrng->rate_limit_timer); + qemu_free_timer(vrng->rate_limit_timer); +- unregister_savevm(qdev, "virtio-rng", vrng); ++ unregister_savevm(DEVICE(vdev), "virtio-rng", vrng); + virtio_cleanup(vdev); +- return 0; + } + + static Property virtio_rng_properties[] = { +@@ -205,10 +203,10 @@ static void virtio_rng_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = virtio_rng_device_exit; + dc->props = virtio_rng_properties; + set_bit(DEVICE_CATEGORY_MISC, dc->categories); + vdc->init = virtio_rng_device_init; ++ vdc->exit = virtio_rng_device_exit; + vdc->get_features = get_features; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-scsi-Fix-memory-leak-when-realize-failed.patch b/SOURCES/kvm-virtio-scsi-Fix-memory-leak-when-realize-failed.patch new file mode 100644 index 0000000..fa21f98 --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-Fix-memory-leak-when-realize-failed.patch @@ -0,0 +1,41 @@ +From 4595453e4ff31019ccaa9732bbef5106f6d46e6b Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 4 Nov 2014 03:06:40 +0100 +Subject: [PATCH 6/9] virtio-scsi: Fix memory leak when realize failed + +Message-id: <1415070401-21222-3-git-send-email-famz@redhat.com> +Patchwork-id: 62061 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 2/3] virtio-scsi: Fix memory leak when realize failed +Bugzilla: 1089606 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Max Reitz + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 93bd49aff9081bbe9440192db9da3676941f77a3) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/scsi/virtio-scsi.c +Context conflict due to previous patch's resolution. +--- + hw/scsi/virtio-scsi.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 73f5ad1..13df89d 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -609,6 +609,7 @@ int virtio_scsi_common_init(VirtIOSCSICommon *s) + error_report("Invalid number of queues (= %" PRId32 "), " + "must be a positive integer less than %d.", + s->conf.num_queues, VIRTIO_PCI_QUEUE_MAX); ++ virtio_cleanup(vdev); + return -1; + } + s->cmd_vqs = g_malloc0(s->conf.num_queues * sizeof(VirtQueue *)); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-scsi-Fix-num_queue-input-validation.patch b/SOURCES/kvm-virtio-scsi-Fix-num_queue-input-validation.patch new file mode 100644 index 0000000..a484bdd --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-Fix-num_queue-input-validation.patch @@ -0,0 +1,53 @@ +From 925c0124d8948ca9e2b9db5e5415beff758c752d Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 4 Nov 2014 03:06:41 +0100 +Subject: [PATCH 7/9] virtio-scsi: Fix num_queue input validation + +Message-id: <1415070401-21222-4-git-send-email-famz@redhat.com> +Patchwork-id: 62062 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 3/3] virtio-scsi: Fix num_queue input validation +Bugzilla: 1089606 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Max Reitz + +We need to count the ctrlq and eventq, and also cleanup before +returning. Besides, the format string should be unsigned. + +The number could never be less than zero. + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit 0ba1f53191221b541b938df86a39eeccfb87f996) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina + +Conflicts: + hw/scsi/virtio-scsi.c +Straightforward resolution. +--- + hw/scsi/virtio-scsi.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 13df89d..cda8f8a 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -605,10 +605,11 @@ int virtio_scsi_common_init(VirtIOSCSICommon *s) + virtio_init(VIRTIO_DEVICE(s), "virtio-scsi", VIRTIO_ID_SCSI, + sizeof(VirtIOSCSIConfig)); + +- if (s->conf.num_queues <= 0 || s->conf.num_queues > VIRTIO_PCI_QUEUE_MAX) { +- error_report("Invalid number of queues (= %" PRId32 "), " ++ if (s->conf.num_queues == 0 || ++ s->conf.num_queues > VIRTIO_PCI_QUEUE_MAX - 2) { ++ error_report("Invalid number of queues (= %" PRIu32 "), " + "must be a positive integer less than %d.", +- s->conf.num_queues, VIRTIO_PCI_QUEUE_MAX); ++ s->conf.num_queues, VIRTIO_PCI_QUEUE_MAX - 2); + virtio_cleanup(vdev); + return -1; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-scsi-Make-type-virtio-scsi-common-abstract.patch b/SOURCES/kvm-virtio-scsi-Make-type-virtio-scsi-common-abstract.patch new file mode 100644 index 0000000..146a021 --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-Make-type-virtio-scsi-common-abstract.patch @@ -0,0 +1,51 @@ +From 767b0e7534e7d0af6090c105f0d093461d5ea03a Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 18 Sep 2013 10:39:19 +0200 +Subject: [PATCH 26/29] virtio-scsi: Make type virtio-scsi-common abstract + +RH-Author: Miroslav Rezanina +Message-id: +Patchwork-id: 54440 +O-Subject: [RHEL7 qemu-kvm PATCH] virtio-scsi: Make type virtio-scsi-common abstract +Bugzilla: 903918 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Markus Armbruster + +BZ: 903918 +Brewbuild: https://brewweb.devel.redhat.com/taskinfo?taskID=6298357 + +It's the abstract base of virtio-scsi-device and vhost-scsi. + +Signed-off-by: Markus Armbruster +Signed-off-by: Paolo Bonzini +(cherry picked from commit a27292b5d7545509bfa171922516d2033c570205) + +Clean backport +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 08dd3f3..4074088 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -682,6 +682,7 @@ static const TypeInfo virtio_scsi_common_info = { + .name = TYPE_VIRTIO_SCSI_COMMON, + .parent = TYPE_VIRTIO_DEVICE, + .instance_size = sizeof(VirtIOSCSICommon), ++ .abstract = true, + .class_init = virtio_scsi_common_class_init, + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-scsi-Plug-memory-leak-on-virtio_scsi_push_eve.patch b/SOURCES/kvm-virtio-scsi-Plug-memory-leak-on-virtio_scsi_push_eve.patch new file mode 100644 index 0000000..83a85c1 --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-Plug-memory-leak-on-virtio_scsi_push_eve.patch @@ -0,0 +1,55 @@ +From 56c66eefb296121eca5c78c7ab17215671712045 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 3 Nov 2014 04:56:41 +0100 +Subject: [PATCH 4/9] virtio-scsi: Plug memory leak on virtio_scsi_push_event() + error path + +Message-id: <1414990601-21198-1-git-send-email-famz@redhat.com> +Patchwork-id: 62029 +O-Subject: [RHEL-7.1 qemu-kvm PATCH] virtio-scsi: Plug memory leak on virtio_scsi_push_event() error path +Bugzilla: 1088822 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum + +From: Markus Armbruster + +Spotted by Coverity. + +calling virtqueue_pop() without checking VIRTIO_CONFIG_S_DRIVER_OK first +is racy: we may use the queues before the guest set them up. + +Signed-off-by: Markus Armbruster +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +(cherry picked from commit 91e7fcca4743cf694eb0c8e7a8d938cf359b5bd8) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 7cf3e4b..35b3d65 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -490,7 +490,7 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, + uint32_t event, uint32_t reason) + { + VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(s); +- VirtIOSCSIReq *req = virtio_scsi_pop_req(s, vs->event_vq); ++ VirtIOSCSIReq *req; + VirtIOSCSIEvent *evt; + VirtIODevice *vdev = VIRTIO_DEVICE(s); + int in_size; +@@ -499,6 +499,7 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, + return; + } + ++ req = virtio_scsi_pop_req(s, vs->event_vq); + if (!req) { + s->events_dropped = true; + return; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-scsi-Prevent-assertion-on-missed-events.patch b/SOURCES/kvm-virtio-scsi-Prevent-assertion-on-missed-events.patch new file mode 100644 index 0000000..0f0cc02 --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-Prevent-assertion-on-missed-events.patch @@ -0,0 +1,46 @@ +From 3fdd5ce3ece26d5fd0d7702e08167bf5e513f620 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 18 Apr 2016 02:50:12 +0200 +Subject: [PATCH 01/10] virtio-scsi: Prevent assertion on missed events + +RH-Author: Fam Zheng +Message-id: <1460947812-5704-1-git-send-email-famz@redhat.com> +Patchwork-id: 70202 +O-Subject: [RHEL-7.3 qemu-kvm PATCH] virtio-scsi: Prevent assertion on missed events +Bugzilla: 1312289 +RH-Acked-by: Thomas Huth +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Eric Farman + +In some cases, an unplug can cause events to be dropped, which +leads to an assertion failure when preparing to notify the guest +kernel. + +Signed-off-by: Eric Farman +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +(cherry picked from commit 49fb65c7f985baa56d2964e0a85c1f098e3e2a9d) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 8232fc9..808eb54 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -530,7 +530,7 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, + evt->event = event; + evt->reason = reason; + if (!dev) { +- assert(event == VIRTIO_SCSI_T_NO_EVENT); ++ assert(event == VIRTIO_SCSI_T_EVENTS_MISSED); + } else { + evt->lun[0] = 1; + evt->lun[1] = dev->id; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-scsi-Report-error-if-num_queues-is-0-or-too-l.patch b/SOURCES/kvm-virtio-scsi-Report-error-if-num_queues-is-0-or-too-l.patch new file mode 100644 index 0000000..4808e59 --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-Report-error-if-num_queues-is-0-or-too-l.patch @@ -0,0 +1,49 @@ +From c4f4c924bac393b2112ce89c66b825730327159f Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 4 Nov 2014 03:06:39 +0100 +Subject: [PATCH 5/9] virtio-scsi: Report error if num_queues is 0 or too large + +Message-id: <1415070401-21222-2-git-send-email-famz@redhat.com> +Patchwork-id: 62060 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 1/3] virtio-scsi: Report error if num_queues is 0 or too large +Bugzilla: 1089606 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Max Reitz + +No cmd vq surprises guest (Linux panics in virtscsi_probe), too many +queues abort qemu (in the following virtio_add_queue). + +Signed-off-by: Fam Zheng +Signed-off-by: Paolo Bonzini +(cherry picked from commit c9f6552803d852d593dec9ef5bb39b7a61091963) +Signed-off-by: Fam Zheng + +Downstream notes: changed error_setg -> error_report because downstream +oesn't have errp. Also changed "return;" -> "return -1". + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 35b3d65..73f5ad1 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -605,6 +605,12 @@ int virtio_scsi_common_init(VirtIOSCSICommon *s) + virtio_init(VIRTIO_DEVICE(s), "virtio-scsi", VIRTIO_ID_SCSI, + sizeof(VirtIOSCSIConfig)); + ++ if (s->conf.num_queues <= 0 || s->conf.num_queues > VIRTIO_PCI_QUEUE_MAX) { ++ error_report("Invalid number of queues (= %" PRId32 "), " ++ "must be a positive integer less than %d.", ++ s->conf.num_queues, VIRTIO_PCI_QUEUE_MAX); ++ return -1; ++ } + s->cmd_vqs = g_malloc0(s->conf.num_queues * sizeof(VirtQueue *)); + s->sense_size = VIRTIO_SCSI_SENSE_SIZE; + s->cdb_size = VIRTIO_SCSI_CDB_SIZE; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-scsi-fix-buffer-overrun-on-invalid-state-load.patch b/SOURCES/kvm-virtio-scsi-fix-buffer-overrun-on-invalid-state-load.patch new file mode 100644 index 0000000..ddfe32b --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-fix-buffer-overrun-on-invalid-state-load.patch @@ -0,0 +1,88 @@ +From 9dc2684d2d9c9f9e62b5e4260fcd0c254f58bb6d Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:32:12 +0200 +Subject: [PATCH 14/31] virtio-scsi: fix buffer overrun on invalid state load +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-11-git-send-email-mst@redhat.com> +Patchwork-id: 58860 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio-scsi: fix buffer overrun on invalid state load +Bugzilla: 1095742 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Xiao Wang +RH-Acked-by: Amos Kong + +CVE-2013-4542 + +hw/scsi/scsi-bus.c invokes load_request. + + virtio_scsi_load_request does: + qemu_get_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem)); + +this probably can make elem invalid, for example, +make in_num or out_num huge, then: + + virtio_scsi_parse_req(s, vs->cmd_vqs[n], req); + +will do: + + if (req->elem.out_num > 1) { + qemu_sgl_init_external(req, &req->elem.out_sg[1], + &req->elem.out_addr[1], + req->elem.out_num - 1); + } else { + qemu_sgl_init_external(req, &req->elem.in_sg[1], + &req->elem.in_addr[1], + req->elem.in_num - 1); + } + +and this will access out of array bounds. + +Note: this adds security checks within assert calls since +SCSIBusInfo's load_request cannot fail. +For now simply disable builds with NDEBUG - there seems +to be little value in supporting these. + +Cc: Andreas Färber +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juan Quintela +(cherry picked from commit 3c3ce981423e0d6c18af82ee62f1850c2cda5976) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095742 +--- + hw/scsi/virtio-scsi.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 57541b4..7cf3e4b 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -145,6 +145,15 @@ static void *virtio_scsi_load_request(QEMUFile *f, SCSIRequest *sreq) + qemu_get_be32s(f, &n); + assert(n < vs->conf.num_queues); + qemu_get_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem)); ++ /* TODO: add a way for SCSIBusInfo's load_request to fail, ++ * and fail migration instead of asserting here. ++ * When we do, we might be able to re-enable NDEBUG below. ++ */ ++#ifdef NDEBUG ++#error building with NDEBUG is not supported ++#endif ++ assert(req->elem.in_num <= ARRAY_SIZE(req->elem.in_sg)); ++ assert(req->elem.out_num <= ARRAY_SIZE(req->elem.out_sg)); + virtio_scsi_parse_req(s, vs->cmd_vqs[n], req); + + scsi_req_ref(sreq); +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-scsi-switch-exit-callback-to-VirtioDeviceClas.patch b/SOURCES/kvm-virtio-scsi-switch-exit-callback-to-VirtioDeviceClas.patch new file mode 100644 index 0000000..fa160a2 --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-switch-exit-callback-to-VirtioDeviceClas.patch @@ -0,0 +1,137 @@ +From 79d38d6ea2208ef31fe39eb7d5993e5eefd36eee Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:37 +0100 +Subject: [PATCH 10/14] virtio-scsi: switch exit callback to VirtioDeviceClass + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-8-git-send-email-armbru@redhat.com> +Patchwork-id: 56931 +O-Subject: [PATCH 7.0 qemu-kvm 07/10] virtio-scsi: switch exit callback to VirtioDeviceClass +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This ensures hot-unplug is handled properly by the proxy, and avoids +leaking bus_name which is freed by virtio_device_exit. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit e3c9d76acc984218264bbc6435b0c09f959ed9b8) +Signed-off-by: Markus Armbruster +--- + hw/scsi/vhost-scsi.c | 11 +++++------ + hw/scsi/virtio-scsi.c | 15 +++++++-------- + include/hw/virtio/virtio-scsi.h | 2 +- + 3 files changed, 13 insertions(+), 15 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/vhost-scsi.c | 11 +++++------ + hw/scsi/virtio-scsi.c | 15 +++++++-------- + include/hw/virtio/virtio-scsi.h | 2 +- + 3 files changed, 13 insertions(+), 15 deletions(-) + +diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c +index 9e770fb..5e3cc61 100644 +--- a/hw/scsi/vhost-scsi.c ++++ b/hw/scsi/vhost-scsi.c +@@ -240,11 +240,10 @@ static int vhost_scsi_init(VirtIODevice *vdev) + return 0; + } + +-static int vhost_scsi_exit(DeviceState *qdev) ++static void vhost_scsi_exit(VirtIODevice *vdev) + { +- VirtIODevice *vdev = VIRTIO_DEVICE(qdev); +- VHostSCSI *s = VHOST_SCSI(qdev); +- VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(qdev); ++ VHostSCSI *s = VHOST_SCSI(vdev); ++ VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev); + + migrate_del_blocker(s->migration_blocker); + error_free(s->migration_blocker); +@@ -253,7 +252,7 @@ static int vhost_scsi_exit(DeviceState *qdev) + vhost_scsi_set_status(vdev, 0); + + g_free(s->dev.vqs); +- return virtio_scsi_common_exit(vs); ++ virtio_scsi_common_exit(vs); + } + + static Property vhost_scsi_properties[] = { +@@ -265,10 +264,10 @@ static void vhost_scsi_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = vhost_scsi_exit; + dc->props = vhost_scsi_properties; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = vhost_scsi_init; ++ vdc->exit = vhost_scsi_exit; + vdc->get_features = vhost_scsi_get_features; + vdc->set_config = vhost_scsi_set_config; + vdc->set_status = vhost_scsi_set_status; +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index 038cd83..57541b4 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -636,22 +636,21 @@ static int virtio_scsi_device_init(VirtIODevice *vdev) + return 0; + } + +-int virtio_scsi_common_exit(VirtIOSCSICommon *vs) ++void virtio_scsi_common_exit(VirtIOSCSICommon *vs) + { + VirtIODevice *vdev = VIRTIO_DEVICE(vs); + + g_free(vs->cmd_vqs); + virtio_cleanup(vdev); +- return 0; + } + +-static int virtio_scsi_device_exit(DeviceState *qdev) ++static void virtio_scsi_device_exit(VirtIODevice *vdev) + { +- VirtIOSCSI *s = VIRTIO_SCSI(qdev); +- VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(qdev); ++ VirtIOSCSI *s = VIRTIO_SCSI(vdev); ++ VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev); + +- unregister_savevm(qdev, "virtio-scsi", s); +- return virtio_scsi_common_exit(vs); ++ unregister_savevm(DEVICE(vdev), "virtio-scsi", s); ++ virtio_scsi_common_exit(vs); + } + + static Property virtio_scsi_properties[] = { +@@ -672,10 +671,10 @@ static void virtio_scsi_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = virtio_scsi_device_exit; + dc->props = virtio_scsi_properties; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); + vdc->init = virtio_scsi_device_init; ++ vdc->exit = virtio_scsi_device_exit; + vdc->set_config = virtio_scsi_set_config; + vdc->get_features = virtio_scsi_get_features; + vdc->reset = virtio_scsi_reset; +diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h +index 9a98540..206c61d 100644 +--- a/include/hw/virtio/virtio-scsi.h ++++ b/include/hw/virtio/virtio-scsi.h +@@ -187,6 +187,6 @@ typedef struct { + VIRTIO_SCSI_F_CHANGE, true) + + int virtio_scsi_common_init(VirtIOSCSICommon *vs); +-int virtio_scsi_common_exit(VirtIOSCSICommon *vs); ++void virtio_scsi_common_exit(VirtIOSCSICommon *vs); + + #endif /* _QEMU_VIRTIO_SCSI_H */ +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-scsi-use-virtqueue_map_sg-when-loading-reques.patch b/SOURCES/kvm-virtio-scsi-use-virtqueue_map_sg-when-loading-reques.patch new file mode 100644 index 0000000..3d6296d --- /dev/null +++ b/SOURCES/kvm-virtio-scsi-use-virtqueue_map_sg-when-loading-reques.patch @@ -0,0 +1,57 @@ +From c732ec0ec457f0cb003b3b1db56c0bd96432baac Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 3 Aug 2015 16:51:19 +0200 +Subject: [PATCH 05/13] virtio-scsi: use virtqueue_map_sg() when loading + requests + +Message-id: <1438620680-24121-2-git-send-email-stefanha@redhat.com> +Patchwork-id: 67255 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/2] virtio-scsi: use virtqueue_map_sg() when loading requests +Bugzilla: 1249718 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Fam Zheng +RH-Acked-by: Paolo Bonzini + +The VirtQueueElement struct is serialized during migration but the +in_sg[]/out_sg[] iovec arrays are not usable on the destination host +because the pointers are meaningless. + +Use virtqueue_map_sg() to refresh in_sg[]/out_sg[] to valid pointers +based on in_addr[]/out_addr[] hwaddrs. + +Cc: Paolo Bonzini +Signed-off-by: Stefan Hajnoczi +Message-Id: <1438262173-11546-2-git-send-email-stefanha@redhat.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 1cc933453bf2baae1feb7c8e757bdfd0ef639002) + +Conficts: + * Context conflict because upstream has error handling code for + virtio_scsi_parse_req(). + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Miroslav Rezanina +--- + hw/scsi/virtio-scsi.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c +index cda8f8a..8232fc9 100644 +--- a/hw/scsi/virtio-scsi.c ++++ b/hw/scsi/virtio-scsi.c +@@ -154,6 +154,12 @@ static void *virtio_scsi_load_request(QEMUFile *f, SCSIRequest *sreq) + #endif + assert(req->elem.in_num <= ARRAY_SIZE(req->elem.in_sg)); + assert(req->elem.out_num <= ARRAY_SIZE(req->elem.out_sg)); ++ ++ virtqueue_map_sg(req->elem.in_sg, req->elem.in_addr, ++ req->elem.in_num, 1); ++ virtqueue_map_sg(req->elem.out_sg, req->elem.out_addr, ++ req->elem.out_num, 0); ++ + virtio_scsi_parse_req(s, vs->cmd_vqs[n], req); + + scsi_req_ref(sreq); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-serial-report-frontend-connection-state-via-m.patch b/SOURCES/kvm-virtio-serial-report-frontend-connection-state-via-m.patch new file mode 100644 index 0000000..311f945 --- /dev/null +++ b/SOURCES/kvm-virtio-serial-report-frontend-connection-state-via-m.patch @@ -0,0 +1,142 @@ +From b9295fa6535d7092f9234e63ed6b5670bd862d0c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Tue, 22 Jul 2014 18:31:22 +0200 +Subject: [PATCH 02/11] virtio-serial: report frontend connection state via monitor + +Message-id: <1406053883-21237-2-git-send-email-lersek@redhat.com> +Patchwork-id: 60229 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/2] virtio-serial: report frontend connection state via monitor +Bugzilla: 1122151 +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Amit Shah +RH-Acked-by: Eric Blake + +Libvirt wants to know about the guest-side connection state of some +virtio-serial ports (in particular the one(s) assigned to guest agent(s)). +Report such states with a new monitor event. + +RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1080376 +Signed-off-by: Laszlo Ersek +Reviewed-by: Eric Blake +Reviewed-by: Amit Shah +Signed-off-by: Luiz Capitulino + +RHEL-7 notes: manual reimplementation of upstream commit +e2ae6159de2482ee5e22532301eb7f2795828d07, because we don't have Wenchao +Xia's qapi-event series. + +Signed-off-by: Laszlo Ersek +--- + include/monitor/monitor.h | 1 + + hw/char/virtio-console.c | 17 ++++++++++++++--- + monitor.c | 2 ++ + QMP/qmp-events.txt | 16 ++++++++++++++++ + 4 files changed, 33 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + QMP/qmp-events.txt | 16 ++++++++++++++++ + hw/char/virtio-console.c | 17 ++++++++++++++--- + include/monitor/monitor.h | 1 + + monitor.c | 2 ++ + 4 files changed, 33 insertions(+), 3 deletions(-) + +diff --git a/QMP/qmp-events.txt b/QMP/qmp-events.txt +index fc4b7db..ec4e4b9 100644 +--- a/QMP/qmp-events.txt ++++ b/QMP/qmp-events.txt +@@ -485,6 +485,22 @@ Example: + "host": "127.0.0.1", "sasl_username": "luiz" } }, + "timestamp": { "seconds": 1263475302, "microseconds": 150772 } } + ++VSERPORT_CHANGE ++--------------- ++ ++Emitted when the guest opens or closes a virtio-serial port. ++ ++Data: ++ ++- "id": device identifier of the virtio-serial port (json-string) ++- "open": true if the guest has opened the virtio-serial port (json-bool) ++ ++Example: ++ ++{ "event": "VSERPORT_CHANGE", ++ "data": { "id": "channel0", "open": true }, ++ "timestamp": { "seconds": 1401385907, "microseconds": 422329 } } ++ + WAKEUP + ------ + +diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c +index 2e00ad2..1b01dcd 100644 +--- a/hw/char/virtio-console.c ++++ b/hw/char/virtio-console.c +@@ -14,6 +14,8 @@ + #include "qemu/error-report.h" + #include "trace.h" + #include "hw/virtio/virtio-serial.h" ++#include "monitor/monitor.h" ++#include "qapi/qmp/qjson.h" + + typedef struct VirtConsole { + VirtIOSerialPort port; +@@ -76,11 +78,20 @@ static ssize_t flush_buf(VirtIOSerialPort *port, + static void set_guest_connected(VirtIOSerialPort *port, int guest_connected) + { + VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port); ++ DeviceState *dev = DEVICE(port); + +- if (!vcon->chr) { +- return; ++ if (vcon->chr) { ++ qemu_chr_fe_set_open(vcon->chr, guest_connected); + } +- qemu_chr_fe_set_open(vcon->chr, guest_connected); ++ ++ if (dev->id) { ++ QObject *data; ++ ++ data = qobject_from_jsonf("{ 'id': %s, 'open': %i }", ++ dev->id, guest_connected); ++ monitor_protocol_event(QEVENT_VSERPORT_CHANGE, data); ++ qobject_decref(data); ++ } + } + + /* Readiness of the guest to accept data on a port */ +diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h +index dcce609..6c128e9 100644 +--- a/include/monitor/monitor.h ++++ b/include/monitor/monitor.h +@@ -52,6 +52,7 @@ typedef enum MonitorEvent { + QEVENT_SPICE_MIGRATE_COMPLETED, + QEVENT_GUEST_PANICKED, + QEVENT_BLOCK_IMAGE_CORRUPTED, ++ QEVENT_VSERPORT_CHANGE, + + /* Add to 'monitor_event_names' array in monitor.c when + * defining new events here */ +diff --git a/monitor.c b/monitor.c +index a6abfb5..798885d 100644 +--- a/monitor.c ++++ b/monitor.c +@@ -506,6 +506,7 @@ static const char *monitor_event_names[] = { + [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED", + [QEVENT_GUEST_PANICKED] = "GUEST_PANICKED", + [QEVENT_BLOCK_IMAGE_CORRUPTED] = "BLOCK_IMAGE_CORRUPTED", ++ [QEVENT_VSERPORT_CHANGE] = "VSERPORT_CHANGE", + }; + QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX) + +@@ -642,6 +643,7 @@ static void monitor_protocol_event_init(void) + monitor_protocol_event_throttle(QEVENT_RTC_CHANGE, 1000); + monitor_protocol_event_throttle(QEVENT_BALLOON_CHANGE, 1000); + monitor_protocol_event_throttle(QEVENT_WATCHDOG, 1000); ++ monitor_protocol_event_throttle(QEVENT_VSERPORT_CHANGE, 1000); + } + + /** +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-serial-switch-exit-callback-to-VirtioDeviceCl.patch b/SOURCES/kvm-virtio-serial-switch-exit-callback-to-VirtioDeviceCl.patch new file mode 100644 index 0000000..1d6bf83 --- /dev/null +++ b/SOURCES/kvm-virtio-serial-switch-exit-callback-to-VirtioDeviceCl.patch @@ -0,0 +1,76 @@ +From faea056361cd9955f41a8d8c907af32625885b0d Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 23 Jan 2014 14:03:35 +0100 +Subject: [PATCH 08/14] virtio-serial: switch exit callback to VirtioDeviceClass + +RH-Author: Markus Armbruster +Message-id: <1390485820-7585-6-git-send-email-armbru@redhat.com> +Patchwork-id: 56932 +O-Subject: [PATCH 7.0 qemu-kvm 05/10] virtio-serial: switch exit callback to VirtioDeviceClass +Bugzilla: 983344 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Michael S. Tsirkin + +From: Paolo Bonzini + +This ensures hot-unplug is handled properly by the proxy, and avoids +leaking bus_name which is freed by virtio_device_exit. + +Cc: qemu-stable@nongnu.org +Acked-by: Andreas Faerber +Signed-off-by: Paolo Bonzini +(cherry picked from commit 0e86c13fe2058adb8c792ebb7c51a6a7ca9d3d55) +Signed-off-by: Markus Armbruster +--- + hw/char/virtio-serial-bus.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/char/virtio-serial-bus.c | 10 ++++------ + 1 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c +index da417c7..57dd070 100644 +--- a/hw/char/virtio-serial-bus.c ++++ b/hw/char/virtio-serial-bus.c +@@ -987,12 +987,11 @@ static const TypeInfo virtio_serial_port_type_info = { + .class_init = virtio_serial_port_class_init, + }; + +-static int virtio_serial_device_exit(DeviceState *dev) ++static void virtio_serial_device_exit(VirtIODevice *vdev) + { +- VirtIOSerial *vser = VIRTIO_SERIAL(dev); +- VirtIODevice *vdev = VIRTIO_DEVICE(dev); ++ VirtIOSerial *vser = VIRTIO_SERIAL(vdev); + +- unregister_savevm(dev, "virtio-console", vser); ++ unregister_savevm(DEVICE(vdev), "virtio-console", vser); + + g_free(vser->ivqs); + g_free(vser->ovqs); +@@ -1004,7 +1003,6 @@ static int virtio_serial_device_exit(DeviceState *dev) + g_free(vser->post_load); + } + virtio_cleanup(vdev); +- return 0; + } + + static Property virtio_serial_properties[] = { +@@ -1016,10 +1014,10 @@ static void virtio_serial_class_init(ObjectClass *klass, void *data) + { + DeviceClass *dc = DEVICE_CLASS(klass); + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); +- dc->exit = virtio_serial_device_exit; + dc->props = virtio_serial_properties; + set_bit(DEVICE_CATEGORY_INPUT, dc->categories); + vdc->init = virtio_serial_device_init; ++ vdc->exit = virtio_serial_device_exit; + vdc->get_features = get_features; + vdc->get_config = get_config; + vdc->set_config = set_config; +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-validate-config_len-on-load.patch b/SOURCES/kvm-virtio-validate-config_len-on-load.patch new file mode 100644 index 0000000..7da48d6 --- /dev/null +++ b/SOURCES/kvm-virtio-validate-config_len-on-load.patch @@ -0,0 +1,68 @@ +From caaae46a54a676914cc3725b7fe892874825302d Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:32:21 +0200 +Subject: [PATCH 15/31] virtio: validate config_len on load + +RH-Author: Michael S. Tsirkin +Message-id: <1400056285-6688-17-git-send-email-mst@redhat.com> +Patchwork-id: 58861 +O-Subject: [PATCH qemu-kvm RHEL7.1] virtio: validate config_len on load +Bugzilla: 1095783 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Juan Quintela +RH-Acked-by: Xiao Wang + +Malformed input can have config_len in migration stream +exceed the array size allocated on destination, the +result will be heap overflow. + +To fix, that config_len matches on both sides. + +CVE-2014-0182 + +Reported-by: "Dr. David Alan Gilbert" +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juan Quintela +(cherry picked from commit a890a2f9137ac3cf5b607649e66a6f3a5512d8dc) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095783 +--- + hw/virtio/virtio.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 9600a12..686dfbb 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -852,6 +852,7 @@ int virtio_set_features(VirtIODevice *vdev, uint32_t val) + int virtio_load(VirtIODevice *vdev, QEMUFile *f) + { + int i, ret; ++ int32_t config_len; + uint32_t num; + uint32_t features; + uint32_t supported_features; +@@ -878,7 +879,12 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f) + features, supported_features); + return -1; + } +- vdev->config_len = qemu_get_be32(f); ++ config_len = qemu_get_be32(f); ++ if (config_len != vdev->config_len) { ++ error_report("Unexpected config length 0x%x. Expected 0x%zx", ++ config_len, vdev->config_len); ++ return -1; ++ } + qemu_get_buffer(f, vdev->config, vdev->config_len); + + num = qemu_get_be32(f); +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-validate-num_sg-when-mapping.patch b/SOURCES/kvm-virtio-validate-num_sg-when-mapping.patch new file mode 100644 index 0000000..579eb14 --- /dev/null +++ b/SOURCES/kvm-virtio-validate-num_sg-when-mapping.patch @@ -0,0 +1,62 @@ +From 89ada787b7d4c950c8bf95932c8c420d90c31c3c Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:33:08 +0200 +Subject: [PATCH 16/31] virtio: validate num_sg when mapping + +RH-Author: Michael S. Tsirkin +Message-id: <1400056377-6802-1-git-send-email-mst@redhat.com> +Patchwork-id: 58862 +O-Subject: [PATCH qemu-kvm RHEL7.1 1/2] virtio: validate num_sg when mapping +Bugzilla: 1095766 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Xiao Wang +RH-Acked-by: Amos Kong + +CVE-2013-4535 +CVE-2013-4536 + +Both virtio-block and virtio-serial read, +VirtQueueElements are read in as buffers, and passed to +virtqueue_map_sg(), where num_sg is taken from the wire and can force +writes to indicies beyond VIRTQUEUE_MAX_SIZE. + +To fix, validate num_sg. + +Reported-by: Michael Roth +Signed-off-by: Michael S. Tsirkin +Cc: Amit Shah +Signed-off-by: Juan Quintela +(cherry picked from commit 36cf2a37132c7f01fa9adb5f95f5312b27742fd4) + +Tested: lightly on developer's box +Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7452039 +Bugzilla:1095766 +--- + hw/virtio/virtio.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 686dfbb..2667390 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -423,6 +423,12 @@ void virtqueue_map_sg(struct iovec *sg, hwaddr *addr, + unsigned int i; + hwaddr len; + ++ if (num_sg >= VIRTQUEUE_MAX_SIZE) { ++ error_report("virtio: map attempt out of bounds: %zd > %d", ++ num_sg, VIRTQUEUE_MAX_SIZE); ++ exit(1); ++ } ++ + for (i = 0; i < num_sg; i++) { + len = sg[i].iov_len; + sg[i].iov_base = cpu_physical_memory_map(addr[i], &len, is_write); +-- +1.7.1 + diff --git a/SOURCES/kvm-virtio-validate-the-existence-of-handle_output-befor.patch b/SOURCES/kvm-virtio-validate-the-existence-of-handle_output-befor.patch new file mode 100644 index 0000000..7927554 --- /dev/null +++ b/SOURCES/kvm-virtio-validate-the-existence-of-handle_output-befor.patch @@ -0,0 +1,59 @@ +From 612017cc4834cd5eabc12afc7dd6cebf890b42e5 Mon Sep 17 00:00:00 2001 +From: Xiao Wang +Date: Fri, 19 Aug 2016 09:24:25 +0200 +Subject: [PATCH] virtio: validate the existence of handle_output before + calling it + +RH-Author: Xiao Wang +Message-id: <1471598665-23846-1-git-send-email-jasowang@redhat.com> +Patchwork-id: 72021 +O-Subject: [RHEL7.3 qemu-kvm PATCH] virtio: validate the existence of handle_output before calling it +Bugzilla: 1367040 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Fam Zheng +RH-Acked-by: Pankaj Gupta + +Bugzilla: 1367040 +Brew Build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=11620539 +Test status: Tested by myself. + +We don't validate the existence of handle_output which may let a buggy +guest to trigger a SIGSEV easily. E.g: + +1) write 10 to queue_sel to a virtio net device with only 1 queue +2) setup an arbitrary pfn +3) then notify queue 10 + +Fixing this by validating the existence of handle_output before. + +Cc: qemu-stable@nongnu.org +Cc: Michael S. Tsirkin +Signed-off-by: Jason Wang +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Don Koch +Reviewed-by: Fam Zheng +(cherry picked from commit 9e0f5b8108e248b78444c9a2ec41a8309825736c) +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index a861870..e67337b 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -692,8 +692,9 @@ int virtio_queue_get_id(VirtQueue *vq) + + void virtio_queue_notify_vq(VirtQueue *vq) + { +- if (vq->vring.desc) { ++ if (vq->vring.desc && vq->handle_output) { + VirtIODevice *vdev = vq->vdev; ++ + trace_virtio_queue_notify(vdev, vq - vdev->vq, vq); + vq->handle_output(vdev, vq); + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio-zero-vq-inuse-in-virtio_reset.patch b/SOURCES/kvm-virtio-zero-vq-inuse-in-virtio_reset.patch new file mode 100644 index 0000000..6c4eb84 --- /dev/null +++ b/SOURCES/kvm-virtio-zero-vq-inuse-in-virtio_reset.patch @@ -0,0 +1,63 @@ +From f5f0d9ed92f4ba1ea746529ccc945cf60d4973c8 Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Wed, 5 Oct 2016 17:22:28 +0200 +Subject: [PATCH 6/8] virtio: zero vq->inuse in virtio_reset() + +RH-Author: Ladi Prosek +Message-id: <1475666548-9186-7-git-send-email-lprosek@redhat.com> +Patchwork-id: 72485 +O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 6/6] virtio: zero vq->inuse in virtio_reset() +Bugzilla: 1377968 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Stefan Hajnoczi + +From: Stefan Hajnoczi + +vq->inuse must be zeroed upon device reset like most other virtqueue +fields. + +In theory, virtio_reset() just needs assert(vq->inuse == 0) since +devices must clean up in-flight requests during reset (requests cannot +not be leaked!). + +In practice, it is difficult to achieve vq->inuse == 0 across reset +because balloon, blk, 9p, etc implement various different strategies for +cleaning up requests. Most devices call g_free(elem) directly without +telling virtio.c that the VirtQueueElement is cleaned up. Therefore +vq->inuse is not decremented during reset. + +This patch zeroes vq->inuse and trusts that devices are not leaking +VirtQueueElements across reset. + +I will send a follow-up series that refactors request life-cycle across +all devices and converts vq->inuse = 0 into assert(vq->inuse == 0) but +this more invasive approach is not appropriate for stable trees. + +Signed-off-by: Stefan Hajnoczi +Cc: qemu-stable +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Ladi Prosek +(cherry picked from commit 4b7f91ed0270a371e1933efa21ba600b6da23ab9) +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + hw/virtio/virtio.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c +index 87a7639..cdb21b1 100644 +--- a/hw/virtio/virtio.c ++++ b/hw/virtio/virtio.c +@@ -585,6 +585,7 @@ void virtio_reset(void *opaque) + vdev->vq[i].signalled_used = 0; + vdev->vq[i].signalled_used_valid = false; + vdev->vq[i].notification = true; ++ vdev->vq[i].inuse = 0; + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-virtio_pci-fix-level-interrupts-with-irqfd.patch b/SOURCES/kvm-virtio_pci-fix-level-interrupts-with-irqfd.patch new file mode 100644 index 0000000..fab9e05 --- /dev/null +++ b/SOURCES/kvm-virtio_pci-fix-level-interrupts-with-irqfd.patch @@ -0,0 +1,63 @@ +From d52f76a894c5a6663ffbee71e020069a86a52989 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Stefan Hajnoczi +Date: Wed, 11 Dec 2013 09:55:07 +0100 +Subject: [PATCH] virtio_pci: fix level interrupts with irqfd + +RH-Author: Stefan Hajnoczi +Message-id: <1386755707-8033-1-git-send-email-stefanha@redhat.com> +Patchwork-id: 56157 +O-Subject: [RHEL7 qemu-kvm PATCH] virtio_pci: fix level interrupts with irqfd +Bugzilla: 1035132 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: "Michael S. Tsirkin" + +BZ: 1035132 +BZ: 1035150 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6700088 +Upstream: merged + +commit 62c96360ae7f2c7a8b029277fbb7cb082fdef7fd + virtio-pci: fix level interrupts +only helps systems without irqfd: on systems with irqfd support we +passed in flag requesting irqfd even when msix is disabled. + +As a result, for level interrupts we didn't install an fd handler so +unmasking an fd had no effect. + +Fix this up. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit 23fe2b3f9e7df8da53ac1bc32c6875254911d7f4) +Signed-off-by: Stefan Hajnoczi +--- + hw/virtio/virtio-pci.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Signed-off-by: Michal Novotny +--- + hw/virtio/virtio-pci.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c +index ba8848f..6f5c434 100644 +--- a/hw/virtio/virtio-pci.c ++++ b/hw/virtio/virtio-pci.c +@@ -805,8 +805,7 @@ static int virtio_pci_set_guest_notifiers(DeviceState *d, int nvqs, bool assign) + break; + } + +- r = virtio_pci_set_guest_notifier(d, n, assign, +- kvm_msi_via_irqfd_enabled()); ++ r = virtio_pci_set_guest_notifier(d, n, assign, with_irqfd); + if (r < 0) { + goto assign_error; + } +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vl-Clean-up-parsing-of-boot-option-argument.patch b/SOURCES/kvm-vl-Clean-up-parsing-of-boot-option-argument.patch new file mode 100644 index 0000000..d96cb41 --- /dev/null +++ b/SOURCES/kvm-vl-Clean-up-parsing-of-boot-option-argument.patch @@ -0,0 +1,176 @@ +From 5575e0aec51f40ebec46e98ec085cda053283aba Mon Sep 17 00:00:00 2001 +Message-Id: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:11 +0200 +Subject: [PATCH 01/14] vl: Clean up parsing of -boot option argument + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-2-git-send-email-armbru@redhat.com> +Patchwork-id: 54560 +O-Subject: [PATCH 7.0 qemu-kvm 01/10] vl: Clean up parsing of -boot option argument +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Commit 3d3b8303 threw in some QemuOpts parsing without replacing the +existing ad hoc parser, resulting in a confusing mess. Clean it up. + +Two user-visible changes: + +1. Invalid options are reported more nicely. Before: + + qemu: unknown boot parameter 'x' in 'x=y' + + After: + + qemu-system-x86_64: -boot x=y: Invalid parameter 'x' + +2. If -boot is given multiple times, options accumulate, just like for + -machine. Before, only options order, once and menu accumulated. + For the other ones, all but the first -boot in non-legacy syntax + got simply ignored. + +Signed-off-by: Markus Armbruster +Reviewed-by: Anthony Liguori +Message-id: 1371208516-7857-2-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 6ef4716cecdfa1b3794c1a33edba9840e1aa6b5f) +--- + vl.c | 84 ++++++++++++++++++-------------------------------------------------- + 1 file changed, 22 insertions(+), 62 deletions(-) + +Signed-off-by: Michal Novotny +--- + vl.c | 84 ++++++++++++++++++-------------------------------------------------- + 1 file changed, 22 insertions(+), 62 deletions(-) + +diff --git a/vl.c b/vl.c +index a40ab13..a5663ad 100644 +--- a/vl.c ++++ b/vl.c +@@ -436,9 +436,10 @@ static QemuOptsList qemu_machine_opts = { + + static QemuOptsList qemu_boot_opts = { + .name = "boot-opts", ++ .implied_opt_name = "order", ++ .merge_lists = true, + .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head), + .desc = { +- /* the three names below are not used now */ + { + .name = "order", + .type = QEMU_OPT_STRING, +@@ -447,8 +448,7 @@ static QemuOptsList qemu_boot_opts = { + .type = QEMU_OPT_STRING, + }, { + .name = "menu", +- .type = QEMU_OPT_STRING, +- /* following are really used */ ++ .type = QEMU_OPT_BOOL, + }, { + .name = "splash", + .type = QEMU_OPT_STRING, +@@ -1114,7 +1114,7 @@ int qemu_boot_set(const char *boot_devices) + return boot_set_handler(boot_set_opaque, boot_devices); + } + +-static void validate_bootdevices(char *devices) ++static void validate_bootdevices(const char *devices) + { + /* We just do some generic consistency checks */ + const char *p; +@@ -3087,70 +3087,30 @@ int main(int argc, char **argv, char **envp) + break; + case QEMU_OPTION_boot: + { +- static const char * const params[] = { +- "order", "once", "menu", +- "splash", "splash-time", +- "reboot-timeout", "strict", NULL +- }; +- char buf[sizeof(boot_devices)]; + char *standard_boot_devices; +- int legacy = 0; +- +- if (!strchr(optarg, '=')) { +- legacy = 1; +- pstrcpy(buf, sizeof(buf), optarg); +- } else if (check_params(buf, sizeof(buf), params, optarg) < 0) { +- fprintf(stderr, +- "qemu: unknown boot parameter '%s' in '%s'\n", +- buf, optarg); ++ const char *order, *once; ++ ++ opts = qemu_opts_parse(qemu_find_opts("boot-opts"), ++ optarg, 1); ++ if (!opts) { + exit(1); + } + +- if (legacy || +- get_param_value(buf, sizeof(buf), "order", optarg)) { +- validate_bootdevices(buf); +- pstrcpy(boot_devices, sizeof(boot_devices), buf); ++ order = qemu_opt_get(opts, "order"); ++ if (order) { ++ validate_bootdevices(order); ++ pstrcpy(boot_devices, sizeof(boot_devices), order); + } +- if (!legacy) { +- if (get_param_value(buf, sizeof(buf), +- "once", optarg)) { +- validate_bootdevices(buf); +- standard_boot_devices = g_strdup(boot_devices); +- pstrcpy(boot_devices, sizeof(boot_devices), buf); +- qemu_register_reset(restore_boot_devices, +- standard_boot_devices); +- } +- if (get_param_value(buf, sizeof(buf), +- "menu", optarg)) { +- if (!strcmp(buf, "on")) { +- boot_menu = 1; +- } else if (!strcmp(buf, "off")) { +- boot_menu = 0; +- } else { +- fprintf(stderr, +- "qemu: invalid option value '%s'\n", +- buf); +- exit(1); +- } +- } +- if (get_param_value(buf, sizeof(buf), +- "strict", optarg)) { +- if (!strcmp(buf, "on")) { +- boot_strict = true; +- } else if (!strcmp(buf, "off")) { +- boot_strict = false; +- } else { +- fprintf(stderr, +- "qemu: invalid option value '%s'\n", +- buf); +- exit(1); +- } +- } +- if (!qemu_opts_parse(qemu_find_opts("boot-opts"), +- optarg, 0)) { +- exit(1); +- } ++ ++ once = qemu_opt_get(opts, "once"); ++ if (once) { ++ validate_bootdevices(once); ++ standard_boot_devices = g_strdup(boot_devices); ++ pstrcpy(boot_devices, sizeof(boot_devices), once); ++ qemu_register_reset(restore_boot_devices, ++ standard_boot_devices); + } ++ boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu); + } + break; + case QEMU_OPTION_fda: +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vl-Don-t-silently-change-topology-when-all-smp-optio.patch b/SOURCES/kvm-vl-Don-t-silently-change-topology-when-all-smp-optio.patch new file mode 100644 index 0000000..8d9d72f --- /dev/null +++ b/SOURCES/kvm-vl-Don-t-silently-change-topology-when-all-smp-optio.patch @@ -0,0 +1,57 @@ +From 1f9218a32773bb616f65f581f3a6b22699b2f6be Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Tue, 27 Dec 2016 20:43:20 +0100 +Subject: [PATCH 2/4] vl: Don't silently change topology when all -smp options + were set + +RH-Author: Eduardo Habkost +Message-id: <1482871400-24971-1-git-send-email-ehabkost@redhat.com> +Patchwork-id: 73103 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] vl: Don't silently change topology when all -smp options were set +Bugzilla: 1375507 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Andrew Jones +RH-Acked-by: David Hildenbrand + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1375507 + +QEMU tries to change the "threads" option even if it was explicitly set +in the command-line, and it shouldn't do that. + +The right thing to do when all options (cpus, sockets, cores, threds) +are explicitly set is to sanity check them and abort in case they don't +make sense (i.e. when sockets*cores*threads < cpus). + +Signed-off-by: Eduardo Habkost +Reviewed-by: Andrew Jones +Signed-off-by: Paolo Bonzini +(cherry picked from commit ec2cbbdd80463efd4bc81a9d1362a2acb3097a21) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + vl.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/vl.c b/vl.c +index 9756361..7c34b7c 100644 +--- a/vl.c ++++ b/vl.c +@@ -1393,8 +1393,14 @@ static void smp_parse(const char *optarg) + if (cores == 0) { + threads = threads > 0 ? threads : 1; + cores = smp / (sockets * threads); +- } else { ++ } else if (threads == 0) { + threads = smp / (cores * sockets); ++ } else if (sockets * cores * threads < smp) { ++ fprintf(stderr, "cpu topology: error: " ++ "sockets (%u) * cores (%u) * threads (%u) < " ++ "smp_cpus (%u)\n", ++ sockets, cores, threads, smp); ++ exit(1); + } + } + smp_cpus = smp; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vl-Fix-boot-order-and-once-regressions-and-related-b.patch b/SOURCES/kvm-vl-Fix-boot-order-and-once-regressions-and-related-b.patch new file mode 100644 index 0000000..78add7e --- /dev/null +++ b/SOURCES/kvm-vl-Fix-boot-order-and-once-regressions-and-related-b.patch @@ -0,0 +1,277 @@ +From a49a3e6984fdb8562003cff96a82b2ac7d9bcc0d Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:13 +0200 +Subject: [PATCH 03/14] vl: Fix -boot order and once regressions, and related + bugs + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-4-git-send-email-armbru@redhat.com> +Patchwork-id: 54567 +O-Subject: [PATCH 7.0 qemu-kvm 03/10] vl: Fix -boot order and once regressions, and related bugs +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Option "once" sets up a different boot order just for the initial +boot. Boot order reverts back to normal on reset. Option "order" +changes the normal boot order. + +The reversal is implemented by reset handler restore_boot_devices(), +which takes the boot order to revert to as argument. +restore_boot_devices() does nothing on its first call, because that +must be the initial machine reset. On its second call, it changes the +boot order back, and unregisters itself. + +Because we register the handler right when -boot gets parsed, we can +revert to an incorrect normal boot order, and multiple -boot can +interact in funny ways. + +Here's how things work without -boot once or order: + +* boot_devices is "". + +* main() passes machine->boot_order to to machine->init(), because + boot_devices is "". machine->init() configures firmware + accordingly. For PC machines, machine->boot_order is "cad", and + pc_cmos_init() writes it to RTC CMOS, where SeaBIOS picks it up. + +Now consider -boot order=: + +* boot_devices is "". + +* -boot order= sets boot_devices to "" (no change). + +* main() passes machine->boot_order to to machine->init(), because + boot_devices is "", as above. + + Bug: -boot order= has no effect. Broken in commit e4ada29e. + +Next, consider -boot once=a: + +* boot_devices is "". + +* -boot once=a registers restore_boot_devices() with argument "", and + sets boot_devices to "a". + +* main() passes boot_devices "a" to machine->init(), which configures + firmware accordingly. For PC machines, pc_cmos_init() writes the + boot order to RTC CMOS. + +* main() calls qemu_system_reset(). This runs reset handlers. + + - restore_boot_devices() gets called with argument "". Does + nothing, because it's the first call. + +* Machine boots, boot order is "a". + +* Machine resets (e.g. monitor command). Reset handlers run. + + - restore_boot_devices() gets called with argument "". Calls + qemu_boot_set("") to reconfigure firmware. For PC machines, + pc_boot_set() writes it into RTC CMOS. Reset handler + unregistered. + + Bug: boot order reverts to "" instead of machine->boot_order. The + actual boot order depends on how firmware interprets "". Broken + in commit e4ada29e. + +Next, consider -boot once=a -boot order=c: + +* boot_devices is "". + +* -boot once=a registers restore_boot_devices() with argument "", and + sets boot_devices to "a". + +* -boot order=c sets boot_devices to "c". + +* main() passes boot_devices "c" to machine->init(), which configures + firmware accordingly. For PC machines, pc_cmos_init() writes the + boot order to RTC CMOS. + +* main() calls qemu_system_reset(). This runs reset handlers. + + - restore_boot_devices() gets called with argument "". Does + nothing, because it's the first call. + +* Machine boots, boot order is "c". + + Bug: it should be "a". I figure this has always been broken. + +* Machine resets (e.g. monitor command). Reset handlers run. + + - restore_boot_devices() gets called with argument "". Calls + qemu_boot_set("") to reconfigure firmware. For PC machines, + pc_boot_set() writes it into RTC CMOS. Reset handler + unregistered. + + Bug: boot order reverts to "" instead of "c". I figure this has + always been broken, just differently broken before commit + e4ada29e. + +Next, consider -boot once=a -boot once=b -boot once=c: + +* boot_devices is "". + +* -boot once=a registers restore_boot_devices() with argument "", and + sets boot_devices to "a". + +* -boot once=b registers restore_boot_devices() with argument "a", and + sets boot_devices to "b". + +* -boot once=c registers restore_boot_devices() with argument "b", and + sets boot_devices to "c". + +* main() passes boot_devices "c" to machine->init(), which configures + firmware accordingly. For PC machines, pc_cmos_init() writes the + boot order to RTC CMOS. + +* main() calls qemu_system_reset(). This runs reset handlers. + + - restore_boot_devices() gets called with argument "". Does + nothing, because it's the first call. + + - restore_boot_devices() gets called with argument "a". Calls + qemu_boot_set("a") to reconfigure firmware. For PC machines, + pc_boot_set() writes it into RTC CMOS. Reset handler + unregistered. + + - restore_boot_devices() gets called with argument "b". Calls + qemu_boot_set("b") to reconfigure firmware. For PC machines, + pc_boot_set() writes it into RTC CMOS. Reset handler + unregistered. + +* Machine boots, boot order is "b". + + Bug: should really be "c", because that came last, and for all other + -boot options, the last one wins. I figure this was broken some + time before commit 37905d6a, and fixed there only for a single + occurence of "once". + +* Machine resets (e.g. monitor command). Reset handlers run. + + - restore_boot_devices() gets called with argument "". Calls + qemu_boot_set("") to reconfigure firmware. For PC machines, + pc_boot_set() writes it into RTC CMOS. Reset handler + unregistered. + + Same bug as above: boot order reverts to "" instead of + machine->boot_order. + +Fix by acting upon -boot options order, once and menu only after +option parsing is complete, and the machine is known. This is how the +other -boot options work already. + +Signed-off-by: Markus Armbruster +Reviewed-by: Anthony Liguori +Message-id: 1371208516-7857-4-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 8281abd548d840d84223e66812491918c713e56c) +--- + vl.c | 59 ++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 30 insertions(+), 29 deletions(-) + +Signed-off-by: Michal Novotny +--- + vl.c | 59 ++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 30 insertions(+), 29 deletions(-) + +diff --git a/vl.c b/vl.c +index a5663ad..1c3236c 100644 +--- a/vl.c ++++ b/vl.c +@@ -2795,7 +2795,7 @@ int main(int argc, char **argv, char **envp) + const char *icount_option = NULL; + const char *initrd_filename; + const char *kernel_filename, *kernel_cmdline; +- char boot_devices[33] = ""; ++ const char *boot_order = NULL; + DisplayState *ds; + int cyls, heads, secs, translation; + QemuOpts *hda_opts = NULL, *opts, *machine_opts; +@@ -3086,31 +3086,9 @@ int main(int argc, char **argv, char **envp) + drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS); + break; + case QEMU_OPTION_boot: +- { +- char *standard_boot_devices; +- const char *order, *once; +- +- opts = qemu_opts_parse(qemu_find_opts("boot-opts"), +- optarg, 1); +- if (!opts) { +- exit(1); +- } +- +- order = qemu_opt_get(opts, "order"); +- if (order) { +- validate_bootdevices(order); +- pstrcpy(boot_devices, sizeof(boot_devices), order); +- } +- +- once = qemu_opt_get(opts, "once"); +- if (once) { +- validate_bootdevices(once); +- standard_boot_devices = g_strdup(boot_devices); +- pstrcpy(boot_devices, sizeof(boot_devices), once); +- qemu_register_reset(restore_boot_devices, +- standard_boot_devices); +- } +- boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu); ++ opts = qemu_opts_parse(qemu_find_opts("boot-opts"), optarg, 1); ++ if (!opts) { ++ exit(1); + } + break; + case QEMU_OPTION_fda: +@@ -4049,6 +4027,31 @@ int main(int argc, char **argv, char **envp) + initrd_filename = qemu_opt_get(machine_opts, "initrd"); + kernel_cmdline = qemu_opt_get(machine_opts, "append"); + ++ if (!boot_order) { ++ boot_order = machine->boot_order; ++ } ++ opts = qemu_opts_find(qemu_find_opts("boot-opts"), NULL); ++ if (opts) { ++ char *normal_boot_order; ++ const char *order, *once; ++ ++ order = qemu_opt_get(opts, "order"); ++ if (order) { ++ validate_bootdevices(order); ++ boot_order = order; ++ } ++ ++ once = qemu_opt_get(opts, "once"); ++ if (once) { ++ validate_bootdevices(once); ++ normal_boot_order = g_strdup(boot_order); ++ boot_order = once; ++ qemu_register_reset(restore_boot_devices, normal_boot_order); ++ } ++ ++ boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu); ++ } ++ + if (!kernel_cmdline) { + kernel_cmdline = ""; + } +@@ -4213,9 +4216,7 @@ int main(int argc, char **argv, char **envp) + qdev_machine_init(); + + QEMUMachineInitArgs args = { .ram_size = ram_size, +- .boot_device = (boot_devices[0] == '\0') ? +- machine->boot_order : +- boot_devices, ++ .boot_device = boot_order, + .kernel_filename = kernel_filename, + .kernel_cmdline = kernel_cmdline, + .initrd_filename = initrd_filename, +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vl-New-qemu_get_machine_opts.patch b/SOURCES/kvm-vl-New-qemu_get_machine_opts.patch new file mode 100644 index 0000000..c1f7165 --- /dev/null +++ b/SOURCES/kvm-vl-New-qemu_get_machine_opts.patch @@ -0,0 +1,78 @@ +From d07eaace8b57fc37cd83b958c7242d15024ee945 Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Tue, 6 Aug 2013 13:17:02 +0200 +Subject: [PATCH 09/28] vl: New qemu_get_machine_opts() + +RH-Author: Markus Armbruster +Message-id: <1375795025-28674-4-git-send-email-armbru@redhat.com> +Patchwork-id: 52991 +O-Subject: [PATCH 7.0 qemu-kvm 3/6] vl: New qemu_get_machine_opts() +Bugzilla: 980782 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michal Novotny +RH-Acked-by: Orit Wasserman + +To be used in the next few commits to fix or clean up queries of +"machine" options (-machine and its sugared forms). + +Signed-off-by: Markus Armbruster +Message-id: 1372943363-24081-4-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 7f9d6e540ec4f3bf4dc3501c4a1405998c2be4e7) +--- + include/sysemu/sysemu.h | 2 ++ + vl.c | 19 +++++++++++++++++++ + 2 files changed, 21 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/sysemu/sysemu.h | 2 ++ + vl.c | 19 +++++++++++++++++++ + 2 files changed, 21 insertions(+), 0 deletions(-) + +diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h +index b5e1add..3caeb66 100644 +--- a/include/sysemu/sysemu.h ++++ b/include/sysemu/sysemu.h +@@ -185,6 +185,8 @@ char *get_boot_devices_list(size_t *size); + + DeviceState *get_boot_device(uint32_t position); + ++QemuOpts *qemu_get_machine_opts(void); ++ + bool usb_enabled(bool default_usb); + + extern QemuOptsList qemu_drive_opts; +diff --git a/vl.c b/vl.c +index b8a7f18..fe58eff 100644 +--- a/vl.c ++++ b/vl.c +@@ -518,6 +518,25 @@ static QemuOptsList qemu_realtime_opts = { + }, + }; + ++/** ++ * Get machine options ++ * ++ * Returns: machine options (never null). ++ */ ++QemuOpts *qemu_get_machine_opts(void) ++{ ++ QemuOptsList *list; ++ QemuOpts *opts; ++ ++ list = qemu_find_opts("machine"); ++ assert(list); ++ opts = qemu_opts_find(list, NULL); ++ if (!opts) { ++ opts = qemu_opts_create_nofail(list); ++ } ++ return opts; ++} ++ + const char *qemu_get_vm_name(void) + { + return qemu_name; +-- +1.7.1 + diff --git a/SOURCES/kvm-vl-Rename-boot_devices-to-boot_order-for-consistency.patch b/SOURCES/kvm-vl-Rename-boot_devices-to-boot_order-for-consistency.patch new file mode 100644 index 0000000..e356b51 --- /dev/null +++ b/SOURCES/kvm-vl-Rename-boot_devices-to-boot_order-for-consistency.patch @@ -0,0 +1,109 @@ +From 1b91244eac9251bf754626c91f7455a437f33714 Mon Sep 17 00:00:00 2001 +Message-Id: <1b91244eac9251bf754626c91f7455a437f33714.1383564115.git.minovotn@redhat.com> +In-Reply-To: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +References: <5575e0aec51f40ebec46e98ec085cda053283aba.1383564115.git.minovotn@redhat.com> +From: Markus Armbruster +Date: Fri, 27 Sep 2013 13:31:14 +0200 +Subject: [PATCH 04/14] vl: Rename *boot_devices to *boot_order, for + consistency + +RH-Author: Markus Armbruster +Message-id: <1380288680-26645-5-git-send-email-armbru@redhat.com> +Patchwork-id: 54558 +O-Subject: [PATCH 7.0 qemu-kvm 04/10] vl: Rename *boot_devices to *boot_order, for consistency +Bugzilla: 997817 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino + +From: Markus Armbruster + +Signed-off-by: Markus Armbruster +Reviewed-by: Anthony Liguori +Message-id: 1371208516-7857-5-git-send-email-armbru@redhat.com +Signed-off-by: Anthony Liguori +(cherry picked from commit 083b79c9fea0e3842f0b2b57ff0d20ab5f57084a) +--- + include/hw/hw.h | 4 ++-- + vl.c | 16 ++++++++-------- + 2 files changed, 10 insertions(+), 10 deletions(-) + +Signed-off-by: Michal Novotny +--- + include/hw/hw.h | 4 ++-- + vl.c | 16 ++++++++-------- + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/include/hw/hw.h b/include/hw/hw.h +index 1fb9afa..cc9f847 100644 +--- a/include/hw/hw.h ++++ b/include/hw/hw.h +@@ -44,9 +44,9 @@ void qemu_unregister_reset(QEMUResetHandler *func, void *opaque); + + /* handler to set the boot_device order for a specific type of QEMUMachine */ + /* return 0 if success */ +-typedef int QEMUBootSetHandler(void *opaque, const char *boot_devices); ++typedef int QEMUBootSetHandler(void *opaque, const char *boot_order); + void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque); +-int qemu_boot_set(const char *boot_devices); ++int qemu_boot_set(const char *boot_order); + + #ifdef NEED_CPU_H + #if TARGET_LONG_BITS == 64 +diff --git a/vl.c b/vl.c +index 1c3236c..b8a8cc6 100644 +--- a/vl.c ++++ b/vl.c +@@ -1106,12 +1106,12 @@ void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque) + boot_set_opaque = opaque; + } + +-int qemu_boot_set(const char *boot_devices) ++int qemu_boot_set(const char *boot_order) + { + if (!boot_set_handler) { + return -EINVAL; + } +- return boot_set_handler(boot_set_opaque, boot_devices); ++ return boot_set_handler(boot_set_opaque, boot_order); + } + + static void validate_bootdevices(const char *devices) +@@ -1142,9 +1142,9 @@ static void validate_bootdevices(const char *devices) + } + } + +-static void restore_boot_devices(void *opaque) ++static void restore_boot_order(void *opaque) + { +- char *standard_boot_devices = opaque; ++ char *normal_boot_order = opaque; + static int first = 1; + + /* Restore boot order and remove ourselves after the first boot */ +@@ -1153,10 +1153,10 @@ static void restore_boot_devices(void *opaque) + return; + } + +- qemu_boot_set(standard_boot_devices); ++ qemu_boot_set(normal_boot_order); + +- qemu_unregister_reset(restore_boot_devices, standard_boot_devices); +- g_free(standard_boot_devices); ++ qemu_unregister_reset(restore_boot_order, normal_boot_order); ++ g_free(normal_boot_order); + } + + void add_boot_device_path(int32_t bootindex, DeviceState *dev, +@@ -4046,7 +4046,7 @@ int main(int argc, char **argv, char **envp) + validate_bootdevices(once); + normal_boot_order = g_strdup(boot_order); + boot_order = once; +- qemu_register_reset(restore_boot_devices, normal_boot_order); ++ qemu_register_reset(restore_boot_order, normal_boot_order); + } + + boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu); +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vl-Round-memory-sizes-below-2MiB-up-to-2MiB.patch b/SOURCES/kvm-vl-Round-memory-sizes-below-2MiB-up-to-2MiB.patch new file mode 100644 index 0000000..19cb74e --- /dev/null +++ b/SOURCES/kvm-vl-Round-memory-sizes-below-2MiB-up-to-2MiB.patch @@ -0,0 +1,50 @@ +From 2b35241a510c17f731ba0142aa071d7ae24bf55b Mon Sep 17 00:00:00 2001 +From: Markus Armbruster +Date: Thu, 19 Dec 2013 13:32:45 +0100 +Subject: [PATCH 03/16] vl: Round memory sizes below 2MiB up to 2MiB + +RH-Author: Markus Armbruster +Message-id: <1387459965-19517-2-git-send-email-armbru@redhat.com> +Patchwork-id: 56389 +O-Subject: [PATCH 7.0 qemu-kvm 1/1] vl: Round memory sizes below 2MiB up to 2MiB +Bugzilla: 999836 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Luiz Capitulino +RH-Acked-by: Igor Mammedov + +From: Markus Armbruster + +SeaBIOS requires at least 1MiB of RAM, but doesn't doesn't check for +it. It simply assumes it's there, and crashes when it isn't, often +without any indication what's wrong. No upstream SeaBIOS fix +expected. + +In RHEL-6, we round memory sizes below 2MiB up to 2MiB to protect +SeaBIOS (commit 551c098 and commit b9d6c40). Do the same for RHEL-7. +Not wanted upstream. + +Signed-off-by: Markus Armbruster +--- + vl.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + vl.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/vl.c b/vl.c +index b9074c5..781c352 100644 +--- a/vl.c ++++ b/vl.c +@@ -3165,6 +3165,7 @@ int main(int argc, char **argv, char **envp) + exit(1); + } + sz = QEMU_ALIGN_UP((uint64_t)value, 8192); ++ sz = MAX(sz, 2 * 1024 * 1024); + ram_size = sz; + if (ram_size != sz) { + fprintf(stderr, "qemu: ram size too large\n"); +-- +1.7.1 + diff --git a/SOURCES/kvm-vl-allow-cont-from-panicked-state.patch b/SOURCES/kvm-vl-allow-cont-from-panicked-state.patch new file mode 100644 index 0000000..512884b --- /dev/null +++ b/SOURCES/kvm-vl-allow-cont-from-panicked-state.patch @@ -0,0 +1,90 @@ +From 5ef9ff360b8856803c2d9e865c3c2e83f59b1099 Mon Sep 17 00:00:00 2001 +From: Marcel Apfelbaum +Date: Wed, 6 Nov 2013 16:32:36 +0100 +Subject: [PATCH 77/81] vl: allow "cont" from panicked state + +RH-Author: Marcel Apfelbaum +Message-id: <1383755557-21590-9-git-send-email-marcel.a@redhat.com> +Patchwork-id: 55553 +O-Subject: [RHEL-7 qemu-kvm PATCH v3 8/9] vl: allow "cont" from panicked state +Bugzilla: 990601 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Alex Williamson + +From: Paolo Bonzini + +After reporting the GUEST_PANICKED monitor event, QEMU stops the VM. +The reason for this is that events are edge-triggered, and can be lost if +management dies at the wrong time. Stopping a panicked VM lets management +know of a panic even if it has crashed; management can learn about the +panic when it restarts and queries running QEMU processes. The downside +is of course that the VM will be paused while management is not running, +but that is acceptable if it only happens with explicit "-device pvpanic". + +Upon learning of a panic, management (if configured to do so) can pick a +variety of behaviors: leave the VM paused, reset it, destroy it. In +addition to all of these behaviors, it is possible to dump the VM core +from the host. + +However, right now, the panicked state is irreversible, and can only be +exited by resetting the machine. This means that any policy decision +is entirely in the hands of the host. In particular there is no way to +use the "reboot on panic" option together with pvpanic. + +This patch makes the panicked state reversible (and removes various +workarounds that were there because of the state being irreversible). +With this change, management has a wider set of possible policies: it +can just log the crash and leave policy to the guest, it can leave the +VM paused. In particular, the "log the crash and continue" is implemented +simply by sending a "cont" as soon as management learns about the panic. +Management could also implement the "irreversible paused state" itself. +And again, all such actions can be coupled with dumping the VM core. + +Unfortunately we cannot change the behavior of 1.6.0. Thus, even if +it uses "-device pvpanic", management should check for "cont" failures. +If "cont" fails, management can then log that the VM remained paused +and urge the administrator to update QEMU. + +Reviewed-by: Laszlo Ersek +Reviewed-by: Luiz Capitulino +Acked-by: Michael S. Tsirkin +Signed-off-by: Paolo Bonzini +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit df39076850958b842ac9e414dc3ab2895f1877bf) +Signed-off-by: Marcel Apfelbaum +--- + vl.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + vl.c | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/vl.c b/vl.c +index 7c8ba63..9b1738b 100644 +--- a/vl.c ++++ b/vl.c +@@ -640,7 +640,7 @@ static const RunStateTransition runstate_transitions_def[] = { + { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING }, + { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE }, + +- { RUN_STATE_GUEST_PANICKED, RUN_STATE_PAUSED }, ++ { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING }, + { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE }, + + { RUN_STATE_MAX, RUN_STATE_MAX }, +@@ -687,8 +687,7 @@ int runstate_is_running(void) + bool runstate_needs_reset(void) + { + return runstate_check(RUN_STATE_INTERNAL_ERROR) || +- runstate_check(RUN_STATE_SHUTDOWN) || +- runstate_check(RUN_STATE_GUEST_PANICKED); ++ runstate_check(RUN_STATE_SHUTDOWN); + } + + StatusInfo *qmp_query_status(Error **errp) +-- +1.7.1 + diff --git a/SOURCES/kvm-vl-make-boot_strict-variable-static-not-used-outside.patch b/SOURCES/kvm-vl-make-boot_strict-variable-static-not-used-outside.patch new file mode 100644 index 0000000..199b809 --- /dev/null +++ b/SOURCES/kvm-vl-make-boot_strict-variable-static-not-used-outside.patch @@ -0,0 +1,44 @@ +From b3528ac97ab6b8f33179ed706f6fb09acf28d06a Mon Sep 17 00:00:00 2001 +From: Amos Kong +Date: Tue, 14 Jan 2014 09:56:40 +0100 +Subject: [PATCH 16/16] vl: make boot_strict variable static (not used outside vl.c) + +RH-Author: Amos Kong +Message-id: <1389693400-21546-3-git-send-email-akong@redhat.com> +Patchwork-id: 56653 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 2/2] vl: make boot_strict variable static (not used outside vl.c) +Bugzilla: 997817 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Markus Armbruster + +From: Michael Tokarev + +Signed-off-by: Michael Tokarev +Reviewed-by: Amos Kong +(cherry picked from commit 6f2bfda35cf1c7b8a5913570b808396ab9299873) +--- + vl.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + vl.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/vl.c b/vl.c +index 11899dc..5aea00c 100644 +--- a/vl.c ++++ b/vl.c +@@ -232,7 +232,7 @@ int ctrl_grab = 0; + unsigned int nb_prom_envs = 0; + const char *prom_envs[MAX_PROM_ENVS]; + int boot_menu; +-bool boot_strict; ++static bool boot_strict; + uint8_t *boot_splash_filedata; + size_t boot_splash_filedata_size; + uint8_t qemu_extra_params_fw[2]; +-- +1.7.1 + diff --git a/SOURCES/kvm-vl.c-Output-error-on-invalid-machine-type.patch b/SOURCES/kvm-vl.c-Output-error-on-invalid-machine-type.patch new file mode 100644 index 0000000..a33ac0f --- /dev/null +++ b/SOURCES/kvm-vl.c-Output-error-on-invalid-machine-type.patch @@ -0,0 +1,80 @@ +From 82cd74f8a796d59fb527bea82b0557bfe558d2cc Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 11 Jun 2014 06:39:28 -0500 +Subject: [CHANGE 01/29] vl.c: Output error on invalid machine type +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Miroslav Rezanina +Message-id: <1402468768-15574-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 59190 +O-Subject: [RHEL7 qemu-kvm PATCH] vl.c: Output error on invalid machine type +Bugzilla: 990724 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Markus Armbruster +RH-Acked-by: Laszlo Ersek + +From: Miroslav Rezanina + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=990724 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7564904 + +Output error message using qemu's error_report() function when user +provides the invalid machine type on the command line. This also saves +time to find what issue is when you downgrade from one version of qemu +to another that doesn't support required machine type yet (the version +user downgraded to have to have this patch applied too, of course). + +Signed-off-by: Miroslav Rezanina +[Replace printf with error_printf, suggested by Markus Armbruster. - Paolo] +Signed-off-by: Paolo Bonzini + +Signed-off-by: jen + +Conflicts: + vl.c - missing commit 261747f176f6f2d88f8268aaebfdd1a1afe887e2 + (vl: Use MachineClass instead of global QEMUMachine list) + +Signed-off-by: Miroslav Rezanina +(cherry-picked from commit 025172d56e11ba3d86d0937933a23aab3b8606b1) +--- + vl.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +Signed-off-by: jen +--- + vl.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/vl.c b/vl.c +index 6ff06cc..a0099f6 100644 +--- a/vl.c ++++ b/vl.c +@@ -2578,13 +2578,18 @@ static QEMUMachine *machine_parse(const char *name) + if (machine) { + return machine; + } +- printf("Supported machines are:\n"); +- for (m = first_machine; m != NULL; m = m->next) { +- if (m->alias) { +- printf("%-20s %s (alias of %s)\n", m->alias, m->desc, m->name); ++ if (name && !is_help_option(name)) { ++ error_report("Unsupported machine type"); ++ error_printf("Use -machine help to list supported machines!\n"); ++ } else { ++ printf("Supported machines are:\n"); ++ for (m = first_machine; m != NULL; m = m->next) { ++ if (m->alias) { ++ printf("%-20s %s (alias of %s)\n", m->alias, m->desc, m->name); ++ } ++ printf("%-20s %s%s\n", m->name, m->desc, ++ m->is_default ? " (default)" : ""); + } +- printf("%-20s %s%s\n", m->name, m->desc, +- m->is_default ? " (default)" : ""); + } + exit(!name || !is_help_option(name)); + } +-- +1.9.3 + diff --git a/SOURCES/kvm-vmcoreinfo-put-it-in-the-misc-device-category.patch b/SOURCES/kvm-vmcoreinfo-put-it-in-the-misc-device-category.patch new file mode 100644 index 0000000..44cc754 --- /dev/null +++ b/SOURCES/kvm-vmcoreinfo-put-it-in-the-misc-device-category.patch @@ -0,0 +1,43 @@ +From b616fce364cb20904fb53ac9744abba20180c322 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 13 Dec 2017 13:38:44 +0100 +Subject: [PATCH 13/41] vmcoreinfo: put it in the 'misc' device category +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20171213133912.26176-14-marcandre.lureau@redhat.com> +Patchwork-id: 78363 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v3 13/41] vmcoreinfo: put it in the 'misc' device category +Bugzilla: 1411490 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Miroslav Rezanina + +Signed-off-by: Marc-André Lureau +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin + +(cherry picked from commit b948bb55dac527ae6b0c5e6dc69d00866a3a6fee) +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + hw/misc/vmcoreinfo.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/misc/vmcoreinfo.c b/hw/misc/vmcoreinfo.c +index 1bf6735..fa5f610 100644 +--- a/hw/misc/vmcoreinfo.c ++++ b/hw/misc/vmcoreinfo.c +@@ -79,6 +79,7 @@ static void vmcoreinfo_device_class_init(ObjectClass *klass, void *data) + + dc->vmsd = &vmstate_vmcoreinfo; + dc->realize = vmcoreinfo_realize; ++ set_bit(DEVICE_CATEGORY_MISC, dc->categories); + } + + static const TypeInfo vmcoreinfo_device_info = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Allow-read-only-open-of-VMDK-version-3.patch b/SOURCES/kvm-vmdk-Allow-read-only-open-of-VMDK-version-3.patch new file mode 100644 index 0000000..62eef45 --- /dev/null +++ b/SOURCES/kvm-vmdk-Allow-read-only-open-of-VMDK-version-3.patch @@ -0,0 +1,71 @@ +From b42dc567a9071719d730393e717ade1db25c1994 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <58a5fcf24b76c3cf80d671c215b59a0fef76a5c5.1387384437.git.minovotn@redhat.com> +References: <58a5fcf24b76c3cf80d671c215b59a0fef76a5c5.1387384437.git.minovotn@redhat.com> +From: Fam Zheng +Date: Tue, 10 Dec 2013 02:06:52 +0100 +Subject: [PATCH 2/2] vmdk: Allow read only open of VMDK version 3 + +RH-Author: Fam Zheng +Message-id: <1386641212-24945-1-git-send-email-famz@redhat.com> +Patchwork-id: 56099 +O-Subject: [RHEL-7 qemu-kvm PATCH] vmdk: Allow read only open of VMDK version 3 +Bugzilla: 1007710 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Jeffrey Cody + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1029852 +Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6698629 + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 509d39aa22909c0ed1aabf896865f19c81fb38a1) + +Upstream commit doesn't have a verbose commit message, but as the +comment says, VMware KB 2064959 [1] advises that backup software can +read version=3 as version=1. This is important for virt-v2v and helps in +importing VMware VMs from vSphere, since most of the vSphere exported +OVF/OVA's come with version=3. + +[1]: http://kb.vmware.com/kb/2064959 + +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +Signed-off-by: Michal Novotny +--- + block/vmdk.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 026b440..7ec6427 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -605,13 +605,20 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + header = footer.header; + } + +- if (le32_to_cpu(header.version) >= 3) { ++ if (le32_to_cpu(header.version) > 3) { + char buf[64]; + snprintf(buf, sizeof(buf), "VMDK version %d", + le32_to_cpu(header.version)); + qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, + bs->device_name, "vmdk", buf); + return -ENOTSUP; ++ } else if (le32_to_cpu(header.version) == 3 && (flags & BDRV_O_RDWR)) { ++ /* VMware KB 2064959 explains that version 3 added support for ++ * persistent changed block tracking (CBT), and backup software can ++ * read it as version=1 if it doesn't care about the changed area ++ * information. So we are safe to enable read only. */ ++ error_setg(errp, "VMDK version 3 must be read only"); ++ return -EINVAL; + } + + if (le32_to_cpu(header.num_gtes_per_gt) > 512) { +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vmdk-Allow-vmdk_create-to-work-with-protocol.patch b/SOURCES/kvm-vmdk-Allow-vmdk_create-to-work-with-protocol.patch new file mode 100644 index 0000000..540b9be --- /dev/null +++ b/SOURCES/kvm-vmdk-Allow-vmdk_create-to-work-with-protocol.patch @@ -0,0 +1,308 @@ +From aa17f7f15bf2b0af9019a6935563d1f1a98ecc05 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:40 +0200 +Subject: [PATCH 02/20] vmdk: Allow vmdk_create to work with protocol + +Message-id: <1c4328440599c6f754b823e280f9b8212ae9c62b.1410897407.git.jcody@redhat.com> +Patchwork-id: 61206 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 01/15] vmdk: Allow vmdk_create to work with protocol +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Fam Zheng + +This improves vmdk_create to use bdrv_* functions to replace qemu_open +and other fd functions. The error handling are improved as well. One +difference is that bdrv_pwrite will round up buffer to sectors, so for +description file, an extra bdrv_truncate is used in the end to drop +inding zeros. + +Notes: + + - A bonus bug fix is correct endian is used in initializing GD entries. + + - ROUND_UP and DIV_ROUND_UP are used where possible. + +I tested that new code produces exactly the same file as previously. + +Signed-off-by: Fam Zheng +Tested-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 917703c179d4483d050fe112a2a81acec3d6ffd7) +Signed-off-by: Jeff Cody + +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 164 +++++++++++++++++++++++++++++++++------------------------ + 1 files changed, 95 insertions(+), 69 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 7532e11..4ff9531 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1464,23 +1464,33 @@ static int coroutine_fn vmdk_co_write_zeroes(BlockDriverState *bs, + } + + static int vmdk_create_extent(const char *filename, int64_t filesize, +- bool flat, bool compress, bool zeroed_grain) ++ bool flat, bool compress, bool zeroed_grain, ++ Error **errp) + { + int ret, i; +- int fd = 0; ++ BlockDriverState *bs = NULL; + VMDK4Header header; +- uint32_t tmp, magic, grains, gd_size, gt_size, gt_count; ++ Error *local_err; ++ uint32_t tmp, magic, grains, gd_sectors, gt_size, gt_count; ++ uint32_t *gd_buf = NULL; ++ int gd_buf_size; + +- fd = qemu_open(filename, +- O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, +- 0644); +- if (fd < 0) { +- return -errno; ++ ret = bdrv_create_file(filename, NULL, &local_err); ++ if (ret < 0) { ++ error_propagate(errp, local_err); ++ goto exit; + } ++ ++ ret = bdrv_file_open(&bs, filename, NULL, BDRV_O_RDWR, &local_err); ++ if (ret < 0) { ++ error_propagate(errp, local_err); ++ goto exit; ++ } ++ + if (flat) { +- ret = ftruncate(fd, filesize); ++ ret = bdrv_truncate(bs, filesize); + if (ret < 0) { +- ret = -errno; ++ error_setg(errp, "Could not truncate file"); + } + goto exit; + } +@@ -1491,24 +1501,23 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + | (compress ? VMDK4_FLAG_COMPRESS | VMDK4_FLAG_MARKER : 0) + | (zeroed_grain ? VMDK4_FLAG_ZERO_GRAIN : 0); + header.compressAlgorithm = compress ? VMDK4_COMPRESSION_DEFLATE : 0; +- header.capacity = filesize / 512; ++ header.capacity = filesize / BDRV_SECTOR_SIZE; + header.granularity = 128; +- header.num_gtes_per_gt = 512; ++ header.num_gtes_per_gt = BDRV_SECTOR_SIZE; + +- grains = (filesize / 512 + header.granularity - 1) / header.granularity; +- gt_size = ((header.num_gtes_per_gt * sizeof(uint32_t)) + 511) >> 9; +- gt_count = +- (grains + header.num_gtes_per_gt - 1) / header.num_gtes_per_gt; +- gd_size = (gt_count * sizeof(uint32_t) + 511) >> 9; ++ grains = DIV_ROUND_UP(filesize / BDRV_SECTOR_SIZE, header.granularity); ++ gt_size = DIV_ROUND_UP(header.num_gtes_per_gt * sizeof(uint32_t), ++ BDRV_SECTOR_SIZE); ++ gt_count = DIV_ROUND_UP(grains, header.num_gtes_per_gt); ++ gd_sectors = DIV_ROUND_UP(gt_count * sizeof(uint32_t), BDRV_SECTOR_SIZE); + + header.desc_offset = 1; + header.desc_size = 20; + header.rgd_offset = header.desc_offset + header.desc_size; +- header.gd_offset = header.rgd_offset + gd_size + (gt_size * gt_count); ++ header.gd_offset = header.rgd_offset + gd_sectors + (gt_size * gt_count); + header.grain_offset = +- ((header.gd_offset + gd_size + (gt_size * gt_count) + +- header.granularity - 1) / header.granularity) * +- header.granularity; ++ ROUND_UP(header.gd_offset + gd_sectors + (gt_size * gt_count), ++ header.granularity); + /* swap endianness for all header fields */ + header.version = cpu_to_le32(header.version); + header.flags = cpu_to_le32(header.flags); +@@ -1528,48 +1537,55 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + header.check_bytes[3] = 0xa; + + /* write all the data */ +- ret = qemu_write_full(fd, &magic, sizeof(magic)); +- if (ret != sizeof(magic)) { +- ret = -errno; ++ ret = bdrv_pwrite(bs, 0, &magic, sizeof(magic)); ++ if (ret < 0) { ++ error_set(errp, QERR_IO_ERROR); + goto exit; + } +- ret = qemu_write_full(fd, &header, sizeof(header)); +- if (ret != sizeof(header)) { +- ret = -errno; ++ ret = bdrv_pwrite(bs, sizeof(magic), &header, sizeof(header)); ++ if (ret < 0) { ++ error_set(errp, QERR_IO_ERROR); + goto exit; + } + +- ret = ftruncate(fd, le64_to_cpu(header.grain_offset) << 9); ++ ret = bdrv_truncate(bs, le64_to_cpu(header.grain_offset) << 9); + if (ret < 0) { +- ret = -errno; ++ error_setg(errp, "Could not truncate file"); + goto exit; + } + + /* write grain directory */ +- lseek(fd, le64_to_cpu(header.rgd_offset) << 9, SEEK_SET); +- for (i = 0, tmp = le64_to_cpu(header.rgd_offset) + gd_size; ++ gd_buf_size = gd_sectors * BDRV_SECTOR_SIZE; ++ gd_buf = g_malloc0(gd_buf_size); ++ for (i = 0, tmp = le64_to_cpu(header.rgd_offset) + gd_sectors; + i < gt_count; i++, tmp += gt_size) { +- ret = qemu_write_full(fd, &tmp, sizeof(tmp)); +- if (ret != sizeof(tmp)) { +- ret = -errno; +- goto exit; +- } ++ gd_buf[i] = cpu_to_le32(tmp); ++ } ++ ret = bdrv_pwrite(bs, le64_to_cpu(header.rgd_offset) * BDRV_SECTOR_SIZE, ++ gd_buf, gd_buf_size); ++ if (ret < 0) { ++ error_set(errp, QERR_IO_ERROR); ++ goto exit; + } + + /* write backup grain directory */ +- lseek(fd, le64_to_cpu(header.gd_offset) << 9, SEEK_SET); +- for (i = 0, tmp = le64_to_cpu(header.gd_offset) + gd_size; ++ for (i = 0, tmp = le64_to_cpu(header.gd_offset) + gd_sectors; + i < gt_count; i++, tmp += gt_size) { +- ret = qemu_write_full(fd, &tmp, sizeof(tmp)); +- if (ret != sizeof(tmp)) { +- ret = -errno; +- goto exit; +- } ++ gd_buf[i] = cpu_to_le32(tmp); ++ } ++ ret = bdrv_pwrite(bs, le64_to_cpu(header.gd_offset) * BDRV_SECTOR_SIZE, ++ gd_buf, gd_buf_size); ++ if (ret < 0) { ++ error_set(errp, QERR_IO_ERROR); ++ goto exit; + } + + ret = 0; +- exit: +- qemu_close(fd); ++exit: ++ if (bs) { ++ bdrv_unref(bs); ++ } ++ g_free(gd_buf); + return ret; + } + +@@ -1616,7 +1632,9 @@ static int filename_decompose(const char *filename, char *path, char *prefix, + static int vmdk_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { +- int fd, idx = 0; ++ int idx = 0; ++ BlockDriverState *new_bs = NULL; ++ Error *local_err; + char *desc = NULL; + int64_t total_size = 0, filesize; + const char *adapter_type = NULL; +@@ -1633,6 +1651,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + uint32_t parent_cid = 0xffffffff; + uint32_t number_heads = 16; + bool zeroed_grain = false; ++ uint32_t desc_offset = 0, desc_len; + const char desc_template[] = + "# Disk DescriptorFile\n" + "version=1\n" +@@ -1766,7 +1785,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + path, desc_filename); + + if (vmdk_create_extent(ext_filename, size, +- flat, compress, zeroed_grain)) { ++ flat, compress, zeroed_grain, errp)) { + ret = -EINVAL; + goto exit; + } +@@ -1774,7 +1793,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + + /* Format description line */ + snprintf(desc_line, sizeof(desc_line), +- desc_extent_line, size / 512, desc_filename); ++ desc_extent_line, size / BDRV_SECTOR_SIZE, desc_filename); + g_string_append(ext_desc_lines, desc_line); + } + /* generate descriptor file */ +@@ -1785,36 +1804,43 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + parent_desc_line, + ext_desc_lines->str, + (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), +- total_size / (int64_t)(63 * number_heads * 512), ++ total_size / ++ (int64_t)(63 * number_heads * BDRV_SECTOR_SIZE), + number_heads, + adapter_type); +- if (split || flat) { +- fd = qemu_open(filename, +- O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, +- 0644); ++ desc_len = strlen(desc); ++ /* the descriptor offset = 0x200 */ ++ if (!split && !flat) { ++ desc_offset = 0x200; + } else { +- fd = qemu_open(filename, +- O_WRONLY | O_BINARY | O_LARGEFILE, +- 0644); ++ ret = bdrv_create_file(filename, options, &local_err); ++ if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not create image file"); ++ goto exit; ++ } + } +- if (fd < 0) { +- ret = -errno; ++ ret = bdrv_file_open(&new_bs, filename, NULL, BDRV_O_RDWR, &local_err); ++ if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not write description"); + goto exit; + } +- /* the descriptor offset = 0x200 */ +- if (!split && !flat && 0x200 != lseek(fd, 0x200, SEEK_SET)) { +- ret = -errno; +- goto close_exit; ++ ret = bdrv_pwrite(new_bs, desc_offset, desc, desc_len); ++ if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not write description"); ++ goto exit; + } +- ret = qemu_write_full(fd, desc, strlen(desc)); +- if (ret != strlen(desc)) { +- ret = -errno; +- goto close_exit; ++ /* bdrv_pwrite write padding zeros to align to sector, we don't need that ++ * for description file */ ++ if (desc_offset == 0) { ++ ret = bdrv_truncate(new_bs, desc_len); ++ if (ret < 0) { ++ error_setg(errp, "Could not truncate file"); ++ } + } +- ret = 0; +-close_exit: +- qemu_close(fd); + exit: ++ if (new_bs) { ++ bdrv_unref(new_bs); ++ } + g_free(desc); + g_string_free(ext_desc_lines, true); + return ret; +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Check-VMFS-extent-line-field-number.patch b/SOURCES/kvm-vmdk-Check-VMFS-extent-line-field-number.patch new file mode 100644 index 0000000..610f1d5 --- /dev/null +++ b/SOURCES/kvm-vmdk-Check-VMFS-extent-line-field-number.patch @@ -0,0 +1,103 @@ +From 7322fbc37925671b3ac9e589ba8eb200b7aee7f3 Mon Sep 17 00:00:00 2001 +Message-Id: <7322fbc37925671b3ac9e589ba8eb200b7aee7f3.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:04:57 -0600 +Subject: [CHANGE 03/31] vmdk: Check VMFS extent line field number +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-4-git-send-email-famz@redhat.com> +Patchwork-id: 62676 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 03/30] vmdk: Check VMFS extent line field number +Bugzilla: 1134237 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +VMFS extent line in description file should be with 4 fields: + + RW VMFS "file-name.vmdk" + +Check the number explicitly and report error if offset is appended as +FLAT, which should be invalid format. + +Reported-by: Paolo Bonzini +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b47053bd0359c68094d7a25a65687c0844771e34) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 9 +++++++-- + tests/qemu-iotests/059 | 14 ++++++++++++++ + tests/qemu-iotests/059.out | 5 +++++ + 3 files changed, 26 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index a5b1f1c..d77eb37 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -750,9 +750,14 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + return -EINVAL; + } + } else if (!strcmp(type, "VMFS")) { +- flat_offset = 0; ++ if (ret == 4) { ++ flat_offset = 0; ++ } else { ++ error_setg(errp, "Invalid extent lines:\n%s", p); ++ return -EINVAL; ++ } + } else if (ret != 4) { +- error_setg(errp, "Invalid extent lines: \n%s", p); ++ error_setg(errp, "Invalid extent lines:\n%s", p); + return -EINVAL; + } + +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 23534c2..c8d92a0 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -81,6 +81,20 @@ IMGOPTS="subformat=twoGbMaxExtentFlat" _make_test_img 1000G + $QEMU_IMG info $TEST_IMG | _filter_testdir | sed -e 's/cid: [0-9]*/cid: XXXXXXXX/' + + echo ++echo "=== Testing malformed VMFS extent description line ===" ++cat >"$TEST_IMG" < +Date: Mon, 15 Feb 2016 09:28:18 +0100 +Subject: [PATCH 05/18] vmdk: Check descriptor file length when reading it + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-6-git-send-email-famz@redhat.com> +Patchwork-id: 69171 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 05/18] vmdk: Check descriptor file length when reading it +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Since a too small file cannot be a valid VMDK image, and also since the +buffer's first 4 bytes will be unconditionally examined by +vmdk_open_sparse, let's error out the small file case to be clear. + +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Reviewed-by: Markus Armbruster +Reviewed-by: Don Koch +Message-id: 1417649314-13704-5-git-send-email-famz@redhat.com +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 03c3359dfc490eaf922f88955d6a8cc51a37ce92) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 3dfbd41..db3cdc0 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -559,6 +559,14 @@ static char *vmdk_read_desc(BlockDriverState *file, uint64_t desc_offset, + return NULL; + } + ++ if (size < 4) { ++ /* Both descriptor file and sparse image must be much larger than 4 ++ * bytes, also callers of vmdk_read_desc want to compare the first 4 ++ * bytes with VMDK4_MAGIC, let's error out if less is read. */ ++ error_setg(errp, "File is too small, not a valid image"); ++ return NULL; ++ } ++ + size = MIN(size, (1 << 20) - 1); /* avoid unbounded allocation */ + buf = g_malloc(size + 1); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Check-for-overhead-when-opening.patch b/SOURCES/kvm-vmdk-Check-for-overhead-when-opening.patch new file mode 100644 index 0000000..3170e37 --- /dev/null +++ b/SOURCES/kvm-vmdk-Check-for-overhead-when-opening.patch @@ -0,0 +1,86 @@ +From a38284209acf74b1e44b32deca45da2cf451ba68 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:01 -0600 +Subject: [CHANGE 07/31] vmdk: Check for overhead when opening +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-8-git-send-email-famz@redhat.com> +Patchwork-id: 62680 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 07/30] vmdk: Check for overhead when opening +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Report an error if file size is even smaller than metadata. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 34ceed81f9ca31829448276dafe3d9151d66962c) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 7 +++++++ + tests/qemu-iotests/059 | 6 ++++++ + tests/qemu-iotests/059.out | 5 +++++ + 3 files changed, 18 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 4226baa..7ea3aef 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -636,6 +636,13 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) { + l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9; + } ++ if (bdrv_getlength(file) < ++ le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE) { ++ error_report("File truncated, expecting at least %lld bytes", ++ le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE); ++ return -EINVAL; ++ } ++ + ret = vmdk_add_extent(bs, file, false, + le64_to_cpu(header.capacity), + le64_to_cpu(header.gd_offset) << 9, +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index dde4a59..71b7b49 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -98,6 +98,12 @@ EOF + _img_info + + echo ++echo "=== Testing truncated sparse ===" ++IMGOPTS="subformat=monolithicSparse" _make_test_img 100G ++truncate -s 10M $TEST_IMG ++_img_info ++ ++echo + echo "=== Testing version 3 ===" + _use_sample_img iotest-version3.vmdk.bz2 + _img_info +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 75d9858..f4ca52d 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -2043,6 +2043,11 @@ qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent lines: + RW 12582912 VMFS "dummy.IMGFMT" 1 + + ++=== Testing truncated sparse === ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 ++qemu-img: File truncated, expecting at least 13172736 bytes ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Wrong medium type ++ + === Testing version 3 === + image: TEST_DIR/iotest-version3.IMGFMT + file format: IMGFMT +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Clean-up-descriptor-file-reading.patch b/SOURCES/kvm-vmdk-Clean-up-descriptor-file-reading.patch new file mode 100644 index 0000000..cb60e19 --- /dev/null +++ b/SOURCES/kvm-vmdk-Clean-up-descriptor-file-reading.patch @@ -0,0 +1,60 @@ +From 2aa26696846adf25a41fa082f4d42c98b2b05fe3 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:17 +0100 +Subject: [PATCH 04/18] vmdk: Clean up descriptor file reading + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-5-git-send-email-famz@redhat.com> +Patchwork-id: 69170 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 04/18] vmdk: Clean up descriptor file reading +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Zeroing a buffer that will be filled right after is not necessary, and +allocating a power of two + 1 is naughty. + +Suggested-by: Markus Armbruster +Signed-off-by: Fam Zheng +Reviewed-by: Don Koch +Reviewed-by: Markus Armbruster +Reviewed-by: Max Reitz +Message-id: 1417649314-13704-4-git-send-email-famz@redhat.com +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 73b7bcad439e0edaced05049897090cc10d84b5b) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 3f34abf..3dfbd41 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -559,8 +559,8 @@ static char *vmdk_read_desc(BlockDriverState *file, uint64_t desc_offset, + return NULL; + } + +- size = MIN(size, 1 << 20); /* avoid unbounded allocation */ +- buf = g_malloc0(size + 1); ++ size = MIN(size, (1 << 20) - 1); /* avoid unbounded allocation */ ++ buf = g_malloc(size + 1); + + ret = bdrv_pread(file, desc_offset, buf, size); + if (ret < 0) { +@@ -568,6 +568,7 @@ static char *vmdk_read_desc(BlockDriverState *file, uint64_t desc_offset, + g_free(buf); + return NULL; + } ++ buf[ret] = 0; + + return buf; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Create-streamOptimized-as-version-3.patch b/SOURCES/kvm-vmdk-Create-streamOptimized-as-version-3.patch new file mode 100644 index 0000000..4df8e5a --- /dev/null +++ b/SOURCES/kvm-vmdk-Create-streamOptimized-as-version-3.patch @@ -0,0 +1,51 @@ +From 7777177c3c7291ff5c4b24040b075a1bd1c1db77 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:29 +0100 +Subject: [PATCH 16/18] vmdk: Create streamOptimized as version 3 + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-17-git-send-email-famz@redhat.com> +Patchwork-id: 69182 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 16/18] vmdk: Create streamOptimized as version 3 +Bugzilla: 1299116 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299116 + +VMware products accept only version 3 for streamOptimized, let's bump +the version. + +Reported-by: Radoslav Gerganov +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit d62d9dc4b814950dcc8bd261a3e2e9300d9065e6) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 7009660..7b3e397 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1658,7 +1658,13 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + } + magic = cpu_to_be32(VMDK4_MAGIC); + memset(&header, 0, sizeof(header)); +- header.version = zeroed_grain ? 2 : 1; ++ if (compress) { ++ header.version = 3; ++ } else if (zeroed_grain) { ++ header.version = 2; ++ } else { ++ header.version = 1; ++ } + header.flags = VMDK4_FLAG_RGD | VMDK4_FLAG_NL_DETECT + | (compress ? VMDK4_FLAG_COMPRESS | VMDK4_FLAG_MARKER : 0) + | (zeroed_grain ? VMDK4_FLAG_ZERO_GRAIN : 0); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-big-flat-extent-IO.patch b/SOURCES/kvm-vmdk-Fix-big-flat-extent-IO.patch new file mode 100644 index 0000000..8e81401 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-big-flat-extent-IO.patch @@ -0,0 +1,152 @@ +From bacd188daed3fa0558836cbb6f7175155355c3d2 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:00 -0600 +Subject: [CHANGE 06/31] vmdk: Fix big flat extent IO +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-7-git-send-email-famz@redhat.com> +Patchwork-id: 62679 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 06/30] vmdk: Fix big flat extent IO +Bugzilla: 1134241 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Local variable "n" as int64_t avoids overflow with large sector number +calculation. See test case change for failure case. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 585ea0c841df47c1542d33e17c5c6d532316ef74) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 4 +-- + tests/qemu-iotests/059 | 7 +++++ + tests/qemu-iotests/059.out | 74 ++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 83 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index d77eb37..4226baa 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1344,8 +1344,8 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + { + BDRVVmdkState *s = bs->opaque; + VmdkExtent *extent = NULL; +- int n, ret; +- int64_t index_in_cluster; ++ int ret; ++ int64_t index_in_cluster, n; + uint64_t extent_begin_sector, extent_relative_sector_num; + uint64_t cluster_offset; + VmdkMetaData m_data; +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 9ef848b..dde4a59 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -102,6 +102,13 @@ echo "=== Testing version 3 ===" + _use_sample_img iotest-version3.vmdk.bz2 + _img_info + ++echo ++echo "=== Testing 4TB monolithicFlat creation and IO ===" ++IMGOPTS="subformat=monolithicFlat" _make_test_img 4T ++_img_info ++$QEMU_IO -c "write -P 0xa 900G 512" "$TEST_IMG" | _filter_qemu_io ++$QEMU_IO -c "read -v 900G 1024" "$TEST_IMG" | _filter_qemu_io ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index f161651..75d9858 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -2047,4 +2047,78 @@ RW 12582912 VMFS "dummy.IMGFMT" 1 + image: TEST_DIR/iotest-version3.IMGFMT + file format: IMGFMT + virtual size: 1.0G (1073741824 bytes) ++ ++=== Testing 4TB monolithicFlat creation and IO === ++Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104 ++image: TEST_DIR/iotest-version3.IMGFMT ++file format: IMGFMT ++virtual size: 4.0T (4398046511104 bytes) ++wrote 512/512 bytes at offset 966367641600 ++512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++e100000000: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000010: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000020: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000030: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000040: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000050: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000060: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000070: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000080: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000090: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000000a0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000000b0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000000c0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000000d0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000000e0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000000f0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000100: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000110: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000120: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000130: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000140: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000150: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000160: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000170: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000180: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000190: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000001a0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000001b0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000001c0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000001d0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000001e0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e1000001f0: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................ ++e100000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000002a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000002b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000002c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000002d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000002e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000002f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e100000390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000003a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000003b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000003c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000003d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000003e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++e1000003f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++read 1024/1024 bytes at offset 966367641600 ++1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Fix-calculation-of-block-status-s-offset.patch b/SOURCES/kvm-vmdk-Fix-calculation-of-block-status-s-offset.patch new file mode 100644 index 0000000..ed9910c --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-calculation-of-block-status-s-offset.patch @@ -0,0 +1,60 @@ +From 0cdb7038a7027cbb63c820e60bb34abd191ac85f Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:31 +0100 +Subject: [PATCH 18/18] vmdk: Fix calculation of block status's offset + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-19-git-send-email-famz@redhat.com> +Patchwork-id: 69184 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 18/18] vmdk: Fix calculation of block status's offset +Bugzilla: 1299116 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +"offset" is the offset of cluster and sector_num doesn't necessarily +refer to the start of it, it should add index_in_cluster. + +Signed-off-by: Fam Zheng +Message-id: 1453780743-16806-12-git-send-email-famz@redhat.com +Reviewed-by: Max Reitz +Signed-off-by: Max Reitz +(cherry picked from commit d0a18f10251f515c86dcaec5bdf979a4e07fafc5) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index b0c312b..b4f0d44 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1275,6 +1275,7 @@ static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + 0, 0); + qemu_co_mutex_unlock(&s->lock); + ++ index_in_cluster = vmdk_find_index_in_cluster(extent, sector_num); + switch (ret) { + case VMDK_ERROR: + ret = -EIO; +@@ -1288,13 +1289,14 @@ static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + case VMDK_OK: + ret = BDRV_BLOCK_DATA; + if (extent->file == bs->file && !extent->compressed) { +- ret |= BDRV_BLOCK_OFFSET_VALID | offset; ++ ret |= BDRV_BLOCK_OFFSET_VALID; ++ ret |= (offset + (index_in_cluster << BDRV_SECTOR_BITS)) ++ & BDRV_BLOCK_OFFSET_MASK; + } + + break; + } + +- index_in_cluster = vmdk_find_index_in_cluster(extent, sector_num); + n = extent->cluster_sectors - index_in_cluster; + if (n > nb_sectors) { + n = nb_sectors; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-comment-to-match-code-of-extent-lines.patch b/SOURCES/kvm-vmdk-Fix-comment-to-match-code-of-extent-lines.patch new file mode 100644 index 0000000..85330ef --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-comment-to-match-code-of-extent-lines.patch @@ -0,0 +1,56 @@ +From ad76b22d2d96499bbbd1172f347b4ec8a2327c7d Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:16 +0100 +Subject: [PATCH 03/18] vmdk: Fix comment to match code of extent lines + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-4-git-send-email-famz@redhat.com> +Patchwork-id: 69169 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 03/18] vmdk: Fix comment to match code of extent lines +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +commit 04d542c8b (vmdk: support vmfs files) added support of VMFS extent +type but the comment above the changed code is left out. Update the +comment so they are consistent. + +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Reviewed-by: Markus Armbruster +Reviewed-by: Don Koch +Message-id: 1417649314-13704-3-git-send-email-famz@redhat.com +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 8a3e0bc370de9274170b82f48b0393204c3fb43b) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index a9f5bab..3f34abf 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -788,10 +788,12 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + VmdkExtent *extent; + + while (*p) { +- /* parse extent line: ++ /* parse extent line in one of below formats: ++ * + * RW [size in sectors] FLAT "file-name.vmdk" OFFSET +- * or + * RW [size in sectors] SPARSE "file-name.vmdk" ++ * RW [size in sectors] VMFS "file-name.vmdk" ++ * RW [size in sectors] VMFSSPARSE "file-name.vmdk" + */ + flat_offset = -1; + ret = sscanf(p, "%10s %" SCNd64 " %10s \"%511[^\n\r\"]\" %" SCNd64, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-converting-to-streamOptimized.patch b/SOURCES/kvm-vmdk-Fix-converting-to-streamOptimized.patch new file mode 100644 index 0000000..ab886e7 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-converting-to-streamOptimized.patch @@ -0,0 +1,65 @@ +From b72998772910dbd04c86a2332b1c69ac1afc7a9e Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:30 +0100 +Subject: [PATCH 17/18] vmdk: Fix converting to streamOptimized + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-18-git-send-email-famz@redhat.com> +Patchwork-id: 69183 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 17/18] vmdk: Fix converting to streamOptimized +Bugzilla: 1299116 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299116 + +Commit d62d9dc4b8 lifted streamOptimized images's version to 3, but we +now refuse to open version 3 images read-write. We need to make +streamOptimized an exception to allow converting to it. This fixes the +accidentally broken iotests case 059 for the same reason. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +Signed-off-by: Max Reitz +(cherry picked from commit 3db1d98a20262228373bb973ca62b1ab64b29af4) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 7b3e397..b0c312b 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -592,6 +592,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + VmdkExtent *extent; + BDRVVmdkState *s = bs->opaque; + int64_t l1_backup_offset = 0; ++ bool compressed; + + ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header)); + if (ret < 0) { +@@ -666,6 +667,8 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + header = footer.header; + } + ++ compressed = ++ le16_to_cpu(header.compressAlgorithm) == VMDK4_COMPRESSION_DEFLATE; + if (le32_to_cpu(header.version) > 3) { + char buf[64]; + snprintf(buf, sizeof(buf), "VMDK version %" PRId32, +@@ -673,7 +676,8 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, + bs->device_name, "vmdk", buf); + return -ENOTSUP; +- } else if (le32_to_cpu(header.version) == 3 && (flags & BDRV_O_RDWR)) { ++ } else if (le32_to_cpu(header.version) == 3 && (flags & BDRV_O_RDWR) && ++ !compressed) { + /* VMware KB 2064959 explains that version 3 added support for + * persistent changed block tracking (CBT), and backup software can + * read it as version=1 if it doesn't care about the changed area +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-creating-big-description-file.patch b/SOURCES/kvm-vmdk-Fix-creating-big-description-file.patch new file mode 100644 index 0000000..c7cf1f0 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-creating-big-description-file.patch @@ -0,0 +1,2237 @@ +From 588b3f6445699e7a50fd9cde23d0997534423237 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 31 Jul 2014 06:29:17 -0500 +Subject: [CHANGE 29/29] vmdk: Fix creating big description file +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1406788157-31723-1-git-send-email-famz@redhat.com> +Patchwork-id: 60347 +O-Subject: [RHEL-7 qemu-kvm PATCH] vmdk: Fix creating big description file +Bugzilla: 1039791 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Markus Armbruster + +The buffer for description file was 4096 which only covers a few +hundred of extents. This changes the buffer to dynamic allocated with +g_strdup_printf in order to support bigger cases. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit af057fe74092df2e7a576448ddbdc0daac1370bf) +Signed-off-by: jen + +Conflicts: + tests/qemu-iotests/059 + tests/qemu-iotests/059.out + +Contextual conflict because vmdk version 3 sample image (981cbf5) is not +backported. + +Another one because we lack commit c9fbb99 "block: Use BDRV_O_NO_BACKING +where appropriate". + +Signed-off-by: jen +--- + block/vmdk.c | 62 +- + tests/qemu-iotests/059 | 5 + + tests/qemu-iotests/059.out | 2012 ++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 2055 insertions(+), 24 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 9e4b3b9..7532e11 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1617,7 +1617,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + Error **errp) + { + int fd, idx = 0; +- char desc[BUF_SIZE]; ++ char *desc = NULL; + int64_t total_size = 0, filesize; + const char *adapter_type = NULL; + const char *backing_file = NULL; +@@ -1625,7 +1625,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + int flags = 0; + int ret = 0; + bool flat, split, compress; +- char ext_desc_lines[BUF_SIZE] = ""; ++ GString *ext_desc_lines; + char path[PATH_MAX], prefix[PATH_MAX], postfix[PATH_MAX]; + const int64_t split_size = 0x80000000; /* VMDK has constant split size */ + const char *desc_extent_line; +@@ -1653,8 +1653,11 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + "ddb.geometry.sectors = \"63\"\n" + "ddb.adapterType = \"%s\"\n"; + ++ ext_desc_lines = g_string_new(NULL); ++ + if (filename_decompose(filename, path, prefix, postfix, PATH_MAX, errp)) { +- return -EINVAL; ++ ret = -EINVAL; ++ goto exit; + } + /* Read out options */ + while (options && options->name) { +@@ -1680,7 +1683,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + strcmp(adapter_type, "lsilogic") && + strcmp(adapter_type, "legacyESX")) { + error_setg(errp, "Unknown adapter type: '%s'", adapter_type); +- return -EINVAL; ++ ret = -EINVAL; ++ goto exit; + } + if (strcmp(adapter_type, "ide") != 0) { + /* that's the number of heads with which vmware operates when +@@ -1696,7 +1700,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + strcmp(fmt, "twoGbMaxExtentFlat") && + strcmp(fmt, "streamOptimized")) { + error_setg(errp, "Unknown subformat: '%s'", fmt); +- return -EINVAL; ++ ret = -EINVAL; ++ goto exit; + } + split = !(strcmp(fmt, "twoGbMaxExtentFlat") && + strcmp(fmt, "twoGbMaxExtentSparse")); +@@ -1710,22 +1715,25 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + } + if (flat && backing_file) { + error_setg(errp, "Flat image can't have backing file"); +- return -ENOTSUP; ++ ret = -ENOTSUP; ++ goto exit; + } + if (flat && zeroed_grain) { + error_setg(errp, "Flat image can't enable zeroed grain"); +- return -ENOTSUP; ++ ret = -ENOTSUP; ++ goto exit; + } + if (backing_file) { + BlockDriverState *bs = bdrv_new(""); + ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp); + if (ret != 0) { + bdrv_unref(bs); +- return ret; ++ goto exit; + } + if (strcmp(bs->drv->format_name, "vmdk")) { + bdrv_unref(bs); +- return -EINVAL; ++ ret = -EINVAL; ++ goto exit; + } + parent_cid = vmdk_read_cid(bs, 0); + bdrv_unref(bs); +@@ -1759,25 +1767,27 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + + if (vmdk_create_extent(ext_filename, size, + flat, compress, zeroed_grain)) { +- return -EINVAL; ++ ret = -EINVAL; ++ goto exit; + } + filesize -= size; + + /* Format description line */ + snprintf(desc_line, sizeof(desc_line), + desc_extent_line, size / 512, desc_filename); +- pstrcat(ext_desc_lines, sizeof(ext_desc_lines), desc_line); ++ g_string_append(ext_desc_lines, desc_line); + } + /* generate descriptor file */ +- snprintf(desc, sizeof(desc), desc_template, +- (unsigned int)time(NULL), +- parent_cid, +- fmt, +- parent_desc_line, +- ext_desc_lines, +- (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), +- total_size / (int64_t)(63 * number_heads * 512), number_heads, +- adapter_type); ++ desc = g_strdup_printf(desc_template, ++ (unsigned int)time(NULL), ++ parent_cid, ++ fmt, ++ parent_desc_line, ++ ext_desc_lines->str, ++ (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), ++ total_size / (int64_t)(63 * number_heads * 512), ++ number_heads, ++ adapter_type); + if (split || flat) { + fd = qemu_open(filename, + O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_LARGEFILE, +@@ -1788,21 +1798,25 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + 0644); + } + if (fd < 0) { +- return -errno; ++ ret = -errno; ++ goto exit; + } + /* the descriptor offset = 0x200 */ + if (!split && !flat && 0x200 != lseek(fd, 0x200, SEEK_SET)) { + ret = -errno; +- goto exit; ++ goto close_exit; + } + ret = qemu_write_full(fd, desc, strlen(desc)); + if (ret != strlen(desc)) { + ret = -errno; +- goto exit; ++ goto close_exit; + } + ret = 0; +-exit: ++close_exit: + qemu_close(fd); ++exit: ++ g_free(desc); ++ g_string_free(ext_desc_lines, true); + return ret; + } + +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 36103e1..1ec34d5 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -75,6 +75,11 @@ echo + echo "=== Testing monolithicFlat with zeroed_grain ===" + IMGOPTS="subformat=monolithicFlat,zeroed_grain=on" _make_test_img 2G + ++echo ++echo "=== Testing big twoGbMaxExtentFlat ===" ++IMGOPTS="subformat=twoGbMaxExtentFlat" _make_test_img 1000G ++$QEMU_IMG info $TEST_IMG | _filter_testdir | sed -e 's/cid: [0-9]*/cid: XXXXXXXX/' ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 5829794..262e3b2 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -25,4 +25,2016 @@ virtual size: 2.0G (2147483648 bytes) + === Testing monolithicFlat with zeroed_grain === + qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 ++ ++=== Testing big twoGbMaxExtentFlat === ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000 ++image: TEST_DIR/t.vmdk ++file format: vmdk ++virtual size: 1.0T (1073741824000 bytes) ++disk size: 16K ++Format specific information: ++ cid: XXXXXXXX ++ parent cid: XXXXXXXX ++ create type: twoGbMaxExtentFlat ++ extents: ++ [0]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f001.vmdk ++ format: FLAT ++ [1]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f002.vmdk ++ format: FLAT ++ [2]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f003.vmdk ++ format: FLAT ++ [3]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f004.vmdk ++ format: FLAT ++ [4]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f005.vmdk ++ format: FLAT ++ [5]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f006.vmdk ++ format: FLAT ++ [6]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f007.vmdk ++ format: FLAT ++ [7]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f008.vmdk ++ format: FLAT ++ [8]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f009.vmdk ++ format: FLAT ++ [9]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f010.vmdk ++ format: FLAT ++ [10]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f011.vmdk ++ format: FLAT ++ [11]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f012.vmdk ++ format: FLAT ++ [12]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f013.vmdk ++ format: FLAT ++ [13]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f014.vmdk ++ format: FLAT ++ [14]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f015.vmdk ++ format: FLAT ++ [15]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f016.vmdk ++ format: FLAT ++ [16]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f017.vmdk ++ format: FLAT ++ [17]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f018.vmdk ++ format: FLAT ++ [18]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f019.vmdk ++ format: FLAT ++ [19]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f020.vmdk ++ format: FLAT ++ [20]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f021.vmdk ++ format: FLAT ++ [21]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f022.vmdk ++ format: FLAT ++ [22]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f023.vmdk ++ format: FLAT ++ [23]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f024.vmdk ++ format: FLAT ++ [24]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f025.vmdk ++ format: FLAT ++ [25]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f026.vmdk ++ format: FLAT ++ [26]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f027.vmdk ++ format: FLAT ++ [27]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f028.vmdk ++ format: FLAT ++ [28]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f029.vmdk ++ format: FLAT ++ [29]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f030.vmdk ++ format: FLAT ++ [30]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f031.vmdk ++ format: FLAT ++ [31]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f032.vmdk ++ format: FLAT ++ [32]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f033.vmdk ++ format: FLAT ++ [33]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f034.vmdk ++ format: FLAT ++ [34]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f035.vmdk ++ format: FLAT ++ [35]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f036.vmdk ++ format: FLAT ++ [36]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f037.vmdk ++ format: FLAT ++ [37]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f038.vmdk ++ format: FLAT ++ [38]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f039.vmdk ++ format: FLAT ++ [39]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f040.vmdk ++ format: FLAT ++ [40]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f041.vmdk ++ format: FLAT ++ [41]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f042.vmdk ++ format: FLAT ++ [42]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f043.vmdk ++ format: FLAT ++ [43]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f044.vmdk ++ format: FLAT ++ [44]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f045.vmdk ++ format: FLAT ++ [45]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f046.vmdk ++ format: FLAT ++ [46]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f047.vmdk ++ format: FLAT ++ [47]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f048.vmdk ++ format: FLAT ++ [48]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f049.vmdk ++ format: FLAT ++ [49]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f050.vmdk ++ format: FLAT ++ [50]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f051.vmdk ++ format: FLAT ++ [51]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f052.vmdk ++ format: FLAT ++ [52]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f053.vmdk ++ format: FLAT ++ [53]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f054.vmdk ++ format: FLAT ++ [54]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f055.vmdk ++ format: FLAT ++ [55]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f056.vmdk ++ format: FLAT ++ [56]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f057.vmdk ++ format: FLAT ++ [57]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f058.vmdk ++ format: FLAT ++ [58]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f059.vmdk ++ format: FLAT ++ [59]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f060.vmdk ++ format: FLAT ++ [60]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f061.vmdk ++ format: FLAT ++ [61]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f062.vmdk ++ format: FLAT ++ [62]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f063.vmdk ++ format: FLAT ++ [63]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f064.vmdk ++ format: FLAT ++ [64]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f065.vmdk ++ format: FLAT ++ [65]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f066.vmdk ++ format: FLAT ++ [66]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f067.vmdk ++ format: FLAT ++ [67]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f068.vmdk ++ format: FLAT ++ [68]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f069.vmdk ++ format: FLAT ++ [69]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f070.vmdk ++ format: FLAT ++ [70]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f071.vmdk ++ format: FLAT ++ [71]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f072.vmdk ++ format: FLAT ++ [72]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f073.vmdk ++ format: FLAT ++ [73]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f074.vmdk ++ format: FLAT ++ [74]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f075.vmdk ++ format: FLAT ++ [75]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f076.vmdk ++ format: FLAT ++ [76]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f077.vmdk ++ format: FLAT ++ [77]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f078.vmdk ++ format: FLAT ++ [78]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f079.vmdk ++ format: FLAT ++ [79]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f080.vmdk ++ format: FLAT ++ [80]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f081.vmdk ++ format: FLAT ++ [81]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f082.vmdk ++ format: FLAT ++ [82]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f083.vmdk ++ format: FLAT ++ [83]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f084.vmdk ++ format: FLAT ++ [84]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f085.vmdk ++ format: FLAT ++ [85]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f086.vmdk ++ format: FLAT ++ [86]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f087.vmdk ++ format: FLAT ++ [87]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f088.vmdk ++ format: FLAT ++ [88]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f089.vmdk ++ format: FLAT ++ [89]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f090.vmdk ++ format: FLAT ++ [90]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f091.vmdk ++ format: FLAT ++ [91]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f092.vmdk ++ format: FLAT ++ [92]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f093.vmdk ++ format: FLAT ++ [93]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f094.vmdk ++ format: FLAT ++ [94]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f095.vmdk ++ format: FLAT ++ [95]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f096.vmdk ++ format: FLAT ++ [96]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f097.vmdk ++ format: FLAT ++ [97]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f098.vmdk ++ format: FLAT ++ [98]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f099.vmdk ++ format: FLAT ++ [99]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f100.vmdk ++ format: FLAT ++ [100]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f101.vmdk ++ format: FLAT ++ [101]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f102.vmdk ++ format: FLAT ++ [102]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f103.vmdk ++ format: FLAT ++ [103]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f104.vmdk ++ format: FLAT ++ [104]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f105.vmdk ++ format: FLAT ++ [105]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f106.vmdk ++ format: FLAT ++ [106]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f107.vmdk ++ format: FLAT ++ [107]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f108.vmdk ++ format: FLAT ++ [108]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f109.vmdk ++ format: FLAT ++ [109]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f110.vmdk ++ format: FLAT ++ [110]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f111.vmdk ++ format: FLAT ++ [111]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f112.vmdk ++ format: FLAT ++ [112]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f113.vmdk ++ format: FLAT ++ [113]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f114.vmdk ++ format: FLAT ++ [114]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f115.vmdk ++ format: FLAT ++ [115]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f116.vmdk ++ format: FLAT ++ [116]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f117.vmdk ++ format: FLAT ++ [117]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f118.vmdk ++ format: FLAT ++ [118]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f119.vmdk ++ format: FLAT ++ [119]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f120.vmdk ++ format: FLAT ++ [120]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f121.vmdk ++ format: FLAT ++ [121]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f122.vmdk ++ format: FLAT ++ [122]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f123.vmdk ++ format: FLAT ++ [123]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f124.vmdk ++ format: FLAT ++ [124]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f125.vmdk ++ format: FLAT ++ [125]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f126.vmdk ++ format: FLAT ++ [126]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f127.vmdk ++ format: FLAT ++ [127]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f128.vmdk ++ format: FLAT ++ [128]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f129.vmdk ++ format: FLAT ++ [129]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f130.vmdk ++ format: FLAT ++ [130]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f131.vmdk ++ format: FLAT ++ [131]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f132.vmdk ++ format: FLAT ++ [132]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f133.vmdk ++ format: FLAT ++ [133]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f134.vmdk ++ format: FLAT ++ [134]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f135.vmdk ++ format: FLAT ++ [135]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f136.vmdk ++ format: FLAT ++ [136]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f137.vmdk ++ format: FLAT ++ [137]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f138.vmdk ++ format: FLAT ++ [138]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f139.vmdk ++ format: FLAT ++ [139]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f140.vmdk ++ format: FLAT ++ [140]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f141.vmdk ++ format: FLAT ++ [141]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f142.vmdk ++ format: FLAT ++ [142]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f143.vmdk ++ format: FLAT ++ [143]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f144.vmdk ++ format: FLAT ++ [144]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f145.vmdk ++ format: FLAT ++ [145]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f146.vmdk ++ format: FLAT ++ [146]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f147.vmdk ++ format: FLAT ++ [147]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f148.vmdk ++ format: FLAT ++ [148]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f149.vmdk ++ format: FLAT ++ [149]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f150.vmdk ++ format: FLAT ++ [150]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f151.vmdk ++ format: FLAT ++ [151]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f152.vmdk ++ format: FLAT ++ [152]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f153.vmdk ++ format: FLAT ++ [153]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f154.vmdk ++ format: FLAT ++ [154]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f155.vmdk ++ format: FLAT ++ [155]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f156.vmdk ++ format: FLAT ++ [156]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f157.vmdk ++ format: FLAT ++ [157]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f158.vmdk ++ format: FLAT ++ [158]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f159.vmdk ++ format: FLAT ++ [159]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f160.vmdk ++ format: FLAT ++ [160]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f161.vmdk ++ format: FLAT ++ [161]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f162.vmdk ++ format: FLAT ++ [162]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f163.vmdk ++ format: FLAT ++ [163]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f164.vmdk ++ format: FLAT ++ [164]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f165.vmdk ++ format: FLAT ++ [165]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f166.vmdk ++ format: FLAT ++ [166]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f167.vmdk ++ format: FLAT ++ [167]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f168.vmdk ++ format: FLAT ++ [168]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f169.vmdk ++ format: FLAT ++ [169]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f170.vmdk ++ format: FLAT ++ [170]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f171.vmdk ++ format: FLAT ++ [171]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f172.vmdk ++ format: FLAT ++ [172]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f173.vmdk ++ format: FLAT ++ [173]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f174.vmdk ++ format: FLAT ++ [174]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f175.vmdk ++ format: FLAT ++ [175]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f176.vmdk ++ format: FLAT ++ [176]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f177.vmdk ++ format: FLAT ++ [177]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f178.vmdk ++ format: FLAT ++ [178]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f179.vmdk ++ format: FLAT ++ [179]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f180.vmdk ++ format: FLAT ++ [180]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f181.vmdk ++ format: FLAT ++ [181]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f182.vmdk ++ format: FLAT ++ [182]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f183.vmdk ++ format: FLAT ++ [183]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f184.vmdk ++ format: FLAT ++ [184]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f185.vmdk ++ format: FLAT ++ [185]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f186.vmdk ++ format: FLAT ++ [186]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f187.vmdk ++ format: FLAT ++ [187]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f188.vmdk ++ format: FLAT ++ [188]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f189.vmdk ++ format: FLAT ++ [189]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f190.vmdk ++ format: FLAT ++ [190]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f191.vmdk ++ format: FLAT ++ [191]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f192.vmdk ++ format: FLAT ++ [192]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f193.vmdk ++ format: FLAT ++ [193]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f194.vmdk ++ format: FLAT ++ [194]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f195.vmdk ++ format: FLAT ++ [195]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f196.vmdk ++ format: FLAT ++ [196]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f197.vmdk ++ format: FLAT ++ [197]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f198.vmdk ++ format: FLAT ++ [198]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f199.vmdk ++ format: FLAT ++ [199]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f200.vmdk ++ format: FLAT ++ [200]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f201.vmdk ++ format: FLAT ++ [201]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f202.vmdk ++ format: FLAT ++ [202]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f203.vmdk ++ format: FLAT ++ [203]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f204.vmdk ++ format: FLAT ++ [204]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f205.vmdk ++ format: FLAT ++ [205]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f206.vmdk ++ format: FLAT ++ [206]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f207.vmdk ++ format: FLAT ++ [207]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f208.vmdk ++ format: FLAT ++ [208]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f209.vmdk ++ format: FLAT ++ [209]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f210.vmdk ++ format: FLAT ++ [210]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f211.vmdk ++ format: FLAT ++ [211]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f212.vmdk ++ format: FLAT ++ [212]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f213.vmdk ++ format: FLAT ++ [213]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f214.vmdk ++ format: FLAT ++ [214]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f215.vmdk ++ format: FLAT ++ [215]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f216.vmdk ++ format: FLAT ++ [216]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f217.vmdk ++ format: FLAT ++ [217]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f218.vmdk ++ format: FLAT ++ [218]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f219.vmdk ++ format: FLAT ++ [219]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f220.vmdk ++ format: FLAT ++ [220]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f221.vmdk ++ format: FLAT ++ [221]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f222.vmdk ++ format: FLAT ++ [222]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f223.vmdk ++ format: FLAT ++ [223]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f224.vmdk ++ format: FLAT ++ [224]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f225.vmdk ++ format: FLAT ++ [225]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f226.vmdk ++ format: FLAT ++ [226]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f227.vmdk ++ format: FLAT ++ [227]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f228.vmdk ++ format: FLAT ++ [228]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f229.vmdk ++ format: FLAT ++ [229]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f230.vmdk ++ format: FLAT ++ [230]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f231.vmdk ++ format: FLAT ++ [231]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f232.vmdk ++ format: FLAT ++ [232]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f233.vmdk ++ format: FLAT ++ [233]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f234.vmdk ++ format: FLAT ++ [234]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f235.vmdk ++ format: FLAT ++ [235]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f236.vmdk ++ format: FLAT ++ [236]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f237.vmdk ++ format: FLAT ++ [237]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f238.vmdk ++ format: FLAT ++ [238]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f239.vmdk ++ format: FLAT ++ [239]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f240.vmdk ++ format: FLAT ++ [240]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f241.vmdk ++ format: FLAT ++ [241]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f242.vmdk ++ format: FLAT ++ [242]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f243.vmdk ++ format: FLAT ++ [243]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f244.vmdk ++ format: FLAT ++ [244]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f245.vmdk ++ format: FLAT ++ [245]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f246.vmdk ++ format: FLAT ++ [246]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f247.vmdk ++ format: FLAT ++ [247]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f248.vmdk ++ format: FLAT ++ [248]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f249.vmdk ++ format: FLAT ++ [249]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f250.vmdk ++ format: FLAT ++ [250]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f251.vmdk ++ format: FLAT ++ [251]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f252.vmdk ++ format: FLAT ++ [252]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f253.vmdk ++ format: FLAT ++ [253]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f254.vmdk ++ format: FLAT ++ [254]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f255.vmdk ++ format: FLAT ++ [255]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f256.vmdk ++ format: FLAT ++ [256]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f257.vmdk ++ format: FLAT ++ [257]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f258.vmdk ++ format: FLAT ++ [258]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f259.vmdk ++ format: FLAT ++ [259]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f260.vmdk ++ format: FLAT ++ [260]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f261.vmdk ++ format: FLAT ++ [261]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f262.vmdk ++ format: FLAT ++ [262]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f263.vmdk ++ format: FLAT ++ [263]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f264.vmdk ++ format: FLAT ++ [264]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f265.vmdk ++ format: FLAT ++ [265]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f266.vmdk ++ format: FLAT ++ [266]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f267.vmdk ++ format: FLAT ++ [267]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f268.vmdk ++ format: FLAT ++ [268]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f269.vmdk ++ format: FLAT ++ [269]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f270.vmdk ++ format: FLAT ++ [270]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f271.vmdk ++ format: FLAT ++ [271]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f272.vmdk ++ format: FLAT ++ [272]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f273.vmdk ++ format: FLAT ++ [273]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f274.vmdk ++ format: FLAT ++ [274]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f275.vmdk ++ format: FLAT ++ [275]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f276.vmdk ++ format: FLAT ++ [276]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f277.vmdk ++ format: FLAT ++ [277]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f278.vmdk ++ format: FLAT ++ [278]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f279.vmdk ++ format: FLAT ++ [279]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f280.vmdk ++ format: FLAT ++ [280]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f281.vmdk ++ format: FLAT ++ [281]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f282.vmdk ++ format: FLAT ++ [282]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f283.vmdk ++ format: FLAT ++ [283]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f284.vmdk ++ format: FLAT ++ [284]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f285.vmdk ++ format: FLAT ++ [285]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f286.vmdk ++ format: FLAT ++ [286]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f287.vmdk ++ format: FLAT ++ [287]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f288.vmdk ++ format: FLAT ++ [288]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f289.vmdk ++ format: FLAT ++ [289]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f290.vmdk ++ format: FLAT ++ [290]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f291.vmdk ++ format: FLAT ++ [291]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f292.vmdk ++ format: FLAT ++ [292]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f293.vmdk ++ format: FLAT ++ [293]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f294.vmdk ++ format: FLAT ++ [294]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f295.vmdk ++ format: FLAT ++ [295]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f296.vmdk ++ format: FLAT ++ [296]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f297.vmdk ++ format: FLAT ++ [297]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f298.vmdk ++ format: FLAT ++ [298]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f299.vmdk ++ format: FLAT ++ [299]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f300.vmdk ++ format: FLAT ++ [300]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f301.vmdk ++ format: FLAT ++ [301]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f302.vmdk ++ format: FLAT ++ [302]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f303.vmdk ++ format: FLAT ++ [303]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f304.vmdk ++ format: FLAT ++ [304]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f305.vmdk ++ format: FLAT ++ [305]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f306.vmdk ++ format: FLAT ++ [306]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f307.vmdk ++ format: FLAT ++ [307]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f308.vmdk ++ format: FLAT ++ [308]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f309.vmdk ++ format: FLAT ++ [309]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f310.vmdk ++ format: FLAT ++ [310]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f311.vmdk ++ format: FLAT ++ [311]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f312.vmdk ++ format: FLAT ++ [312]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f313.vmdk ++ format: FLAT ++ [313]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f314.vmdk ++ format: FLAT ++ [314]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f315.vmdk ++ format: FLAT ++ [315]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f316.vmdk ++ format: FLAT ++ [316]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f317.vmdk ++ format: FLAT ++ [317]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f318.vmdk ++ format: FLAT ++ [318]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f319.vmdk ++ format: FLAT ++ [319]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f320.vmdk ++ format: FLAT ++ [320]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f321.vmdk ++ format: FLAT ++ [321]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f322.vmdk ++ format: FLAT ++ [322]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f323.vmdk ++ format: FLAT ++ [323]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f324.vmdk ++ format: FLAT ++ [324]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f325.vmdk ++ format: FLAT ++ [325]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f326.vmdk ++ format: FLAT ++ [326]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f327.vmdk ++ format: FLAT ++ [327]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f328.vmdk ++ format: FLAT ++ [328]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f329.vmdk ++ format: FLAT ++ [329]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f330.vmdk ++ format: FLAT ++ [330]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f331.vmdk ++ format: FLAT ++ [331]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f332.vmdk ++ format: FLAT ++ [332]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f333.vmdk ++ format: FLAT ++ [333]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f334.vmdk ++ format: FLAT ++ [334]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f335.vmdk ++ format: FLAT ++ [335]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f336.vmdk ++ format: FLAT ++ [336]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f337.vmdk ++ format: FLAT ++ [337]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f338.vmdk ++ format: FLAT ++ [338]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f339.vmdk ++ format: FLAT ++ [339]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f340.vmdk ++ format: FLAT ++ [340]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f341.vmdk ++ format: FLAT ++ [341]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f342.vmdk ++ format: FLAT ++ [342]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f343.vmdk ++ format: FLAT ++ [343]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f344.vmdk ++ format: FLAT ++ [344]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f345.vmdk ++ format: FLAT ++ [345]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f346.vmdk ++ format: FLAT ++ [346]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f347.vmdk ++ format: FLAT ++ [347]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f348.vmdk ++ format: FLAT ++ [348]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f349.vmdk ++ format: FLAT ++ [349]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f350.vmdk ++ format: FLAT ++ [350]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f351.vmdk ++ format: FLAT ++ [351]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f352.vmdk ++ format: FLAT ++ [352]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f353.vmdk ++ format: FLAT ++ [353]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f354.vmdk ++ format: FLAT ++ [354]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f355.vmdk ++ format: FLAT ++ [355]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f356.vmdk ++ format: FLAT ++ [356]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f357.vmdk ++ format: FLAT ++ [357]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f358.vmdk ++ format: FLAT ++ [358]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f359.vmdk ++ format: FLAT ++ [359]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f360.vmdk ++ format: FLAT ++ [360]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f361.vmdk ++ format: FLAT ++ [361]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f362.vmdk ++ format: FLAT ++ [362]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f363.vmdk ++ format: FLAT ++ [363]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f364.vmdk ++ format: FLAT ++ [364]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f365.vmdk ++ format: FLAT ++ [365]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f366.vmdk ++ format: FLAT ++ [366]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f367.vmdk ++ format: FLAT ++ [367]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f368.vmdk ++ format: FLAT ++ [368]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f369.vmdk ++ format: FLAT ++ [369]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f370.vmdk ++ format: FLAT ++ [370]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f371.vmdk ++ format: FLAT ++ [371]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f372.vmdk ++ format: FLAT ++ [372]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f373.vmdk ++ format: FLAT ++ [373]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f374.vmdk ++ format: FLAT ++ [374]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f375.vmdk ++ format: FLAT ++ [375]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f376.vmdk ++ format: FLAT ++ [376]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f377.vmdk ++ format: FLAT ++ [377]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f378.vmdk ++ format: FLAT ++ [378]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f379.vmdk ++ format: FLAT ++ [379]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f380.vmdk ++ format: FLAT ++ [380]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f381.vmdk ++ format: FLAT ++ [381]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f382.vmdk ++ format: FLAT ++ [382]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f383.vmdk ++ format: FLAT ++ [383]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f384.vmdk ++ format: FLAT ++ [384]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f385.vmdk ++ format: FLAT ++ [385]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f386.vmdk ++ format: FLAT ++ [386]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f387.vmdk ++ format: FLAT ++ [387]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f388.vmdk ++ format: FLAT ++ [388]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f389.vmdk ++ format: FLAT ++ [389]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f390.vmdk ++ format: FLAT ++ [390]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f391.vmdk ++ format: FLAT ++ [391]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f392.vmdk ++ format: FLAT ++ [392]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f393.vmdk ++ format: FLAT ++ [393]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f394.vmdk ++ format: FLAT ++ [394]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f395.vmdk ++ format: FLAT ++ [395]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f396.vmdk ++ format: FLAT ++ [396]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f397.vmdk ++ format: FLAT ++ [397]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f398.vmdk ++ format: FLAT ++ [398]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f399.vmdk ++ format: FLAT ++ [399]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f400.vmdk ++ format: FLAT ++ [400]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f401.vmdk ++ format: FLAT ++ [401]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f402.vmdk ++ format: FLAT ++ [402]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f403.vmdk ++ format: FLAT ++ [403]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f404.vmdk ++ format: FLAT ++ [404]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f405.vmdk ++ format: FLAT ++ [405]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f406.vmdk ++ format: FLAT ++ [406]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f407.vmdk ++ format: FLAT ++ [407]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f408.vmdk ++ format: FLAT ++ [408]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f409.vmdk ++ format: FLAT ++ [409]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f410.vmdk ++ format: FLAT ++ [410]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f411.vmdk ++ format: FLAT ++ [411]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f412.vmdk ++ format: FLAT ++ [412]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f413.vmdk ++ format: FLAT ++ [413]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f414.vmdk ++ format: FLAT ++ [414]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f415.vmdk ++ format: FLAT ++ [415]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f416.vmdk ++ format: FLAT ++ [416]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f417.vmdk ++ format: FLAT ++ [417]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f418.vmdk ++ format: FLAT ++ [418]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f419.vmdk ++ format: FLAT ++ [419]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f420.vmdk ++ format: FLAT ++ [420]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f421.vmdk ++ format: FLAT ++ [421]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f422.vmdk ++ format: FLAT ++ [422]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f423.vmdk ++ format: FLAT ++ [423]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f424.vmdk ++ format: FLAT ++ [424]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f425.vmdk ++ format: FLAT ++ [425]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f426.vmdk ++ format: FLAT ++ [426]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f427.vmdk ++ format: FLAT ++ [427]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f428.vmdk ++ format: FLAT ++ [428]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f429.vmdk ++ format: FLAT ++ [429]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f430.vmdk ++ format: FLAT ++ [430]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f431.vmdk ++ format: FLAT ++ [431]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f432.vmdk ++ format: FLAT ++ [432]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f433.vmdk ++ format: FLAT ++ [433]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f434.vmdk ++ format: FLAT ++ [434]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f435.vmdk ++ format: FLAT ++ [435]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f436.vmdk ++ format: FLAT ++ [436]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f437.vmdk ++ format: FLAT ++ [437]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f438.vmdk ++ format: FLAT ++ [438]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f439.vmdk ++ format: FLAT ++ [439]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f440.vmdk ++ format: FLAT ++ [440]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f441.vmdk ++ format: FLAT ++ [441]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f442.vmdk ++ format: FLAT ++ [442]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f443.vmdk ++ format: FLAT ++ [443]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f444.vmdk ++ format: FLAT ++ [444]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f445.vmdk ++ format: FLAT ++ [445]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f446.vmdk ++ format: FLAT ++ [446]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f447.vmdk ++ format: FLAT ++ [447]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f448.vmdk ++ format: FLAT ++ [448]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f449.vmdk ++ format: FLAT ++ [449]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f450.vmdk ++ format: FLAT ++ [450]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f451.vmdk ++ format: FLAT ++ [451]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f452.vmdk ++ format: FLAT ++ [452]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f453.vmdk ++ format: FLAT ++ [453]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f454.vmdk ++ format: FLAT ++ [454]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f455.vmdk ++ format: FLAT ++ [455]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f456.vmdk ++ format: FLAT ++ [456]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f457.vmdk ++ format: FLAT ++ [457]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f458.vmdk ++ format: FLAT ++ [458]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f459.vmdk ++ format: FLAT ++ [459]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f460.vmdk ++ format: FLAT ++ [460]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f461.vmdk ++ format: FLAT ++ [461]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f462.vmdk ++ format: FLAT ++ [462]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f463.vmdk ++ format: FLAT ++ [463]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f464.vmdk ++ format: FLAT ++ [464]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f465.vmdk ++ format: FLAT ++ [465]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f466.vmdk ++ format: FLAT ++ [466]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f467.vmdk ++ format: FLAT ++ [467]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f468.vmdk ++ format: FLAT ++ [468]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f469.vmdk ++ format: FLAT ++ [469]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f470.vmdk ++ format: FLAT ++ [470]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f471.vmdk ++ format: FLAT ++ [471]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f472.vmdk ++ format: FLAT ++ [472]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f473.vmdk ++ format: FLAT ++ [473]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f474.vmdk ++ format: FLAT ++ [474]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f475.vmdk ++ format: FLAT ++ [475]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f476.vmdk ++ format: FLAT ++ [476]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f477.vmdk ++ format: FLAT ++ [477]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f478.vmdk ++ format: FLAT ++ [478]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f479.vmdk ++ format: FLAT ++ [479]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f480.vmdk ++ format: FLAT ++ [480]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f481.vmdk ++ format: FLAT ++ [481]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f482.vmdk ++ format: FLAT ++ [482]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f483.vmdk ++ format: FLAT ++ [483]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f484.vmdk ++ format: FLAT ++ [484]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f485.vmdk ++ format: FLAT ++ [485]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f486.vmdk ++ format: FLAT ++ [486]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f487.vmdk ++ format: FLAT ++ [487]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f488.vmdk ++ format: FLAT ++ [488]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f489.vmdk ++ format: FLAT ++ [489]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f490.vmdk ++ format: FLAT ++ [490]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f491.vmdk ++ format: FLAT ++ [491]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f492.vmdk ++ format: FLAT ++ [492]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f493.vmdk ++ format: FLAT ++ [493]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f494.vmdk ++ format: FLAT ++ [494]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f495.vmdk ++ format: FLAT ++ [495]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f496.vmdk ++ format: FLAT ++ [496]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f497.vmdk ++ format: FLAT ++ [497]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f498.vmdk ++ format: FLAT ++ [498]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f499.vmdk ++ format: FLAT ++ [499]: ++ virtual size: 2147483648 ++ filename: TEST_DIR/t-f500.vmdk ++ format: FLAT + *** done +-- +1.9.3 + diff --git a/SOURCES/kvm-vmdk-Fix-d-and-lld-to-PRI-in-format-strings.patch b/SOURCES/kvm-vmdk-Fix-d-and-lld-to-PRI-in-format-strings.patch new file mode 100644 index 0000000..622d402 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-d-and-lld-to-PRI-in-format-strings.patch @@ -0,0 +1,77 @@ +From b343626ad339c1bb1cd1867a9f9ade2067c6d345 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:10 -0600 +Subject: [CHANGE 16/31] vmdk: Fix %d and %lld to PRI* in format strings +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-17-git-send-email-famz@redhat.com> +Patchwork-id: 62689 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 16/30] vmdk: Fix %d and %lld to PRI* in format strings +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 4ab9dab5b9be0381e714d3fbe518689a72459011) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index e78a184..0a01a2b 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -640,7 +640,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + + if (le32_to_cpu(header.version) > 3) { + char buf[64]; +- snprintf(buf, sizeof(buf), "VMDK version %d", ++ snprintf(buf, sizeof(buf), "VMDK version %" PRId32, + le32_to_cpu(header.version)); + error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, + bs->device_name, "vmdk", buf); +@@ -671,8 +671,9 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + if (bdrv_getlength(file) < + le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE) { +- error_setg(errp, "File truncated, expecting at least %lld bytes", +- le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE); ++ error_setg(errp, "File truncated, expecting at least %" PRId64 " bytes", ++ (int64_t)(le64_to_cpu(header.grain_offset) ++ * BDRV_SECTOR_SIZE)); + return -EINVAL; + } + +@@ -1717,7 +1718,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + "\n" + "ddb.virtualHWVersion = \"%d\"\n" + "ddb.geometry.cylinders = \"%" PRId64 "\"\n" +- "ddb.geometry.heads = \"%d\"\n" ++ "ddb.geometry.heads = \"%" PRIu32 "\"\n" + "ddb.geometry.sectors = \"63\"\n" + "ddb.adapterType = \"%s\"\n"; + +@@ -1777,9 +1778,9 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + strcmp(fmt, "twoGbMaxExtentFlat")); + compress = !strcmp(fmt, "streamOptimized"); + if (flat) { +- desc_extent_line = "RW %lld FLAT \"%s\" 0\n"; ++ desc_extent_line = "RW %" PRId64 " FLAT \"%s\" 0\n"; + } else { +- desc_extent_line = "RW %lld SPARSE \"%s\"\n"; ++ desc_extent_line = "RW %" PRId64 " SPARSE \"%s\"\n"; + } + if (flat && backing_file) { + error_setg(errp, "Flat image can't have backing file"); +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Fix-format-specific-information-create-type-for.patch b/SOURCES/kvm-vmdk-Fix-format-specific-information-create-type-for.patch new file mode 100644 index 0000000..682581d --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-format-specific-information-create-type-for.patch @@ -0,0 +1,66 @@ +From a21710237f6c2cce366515fc2dacd4211bc31b7a Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 14 Jul 2014 02:05:27 -0500 +Subject: [CHANGE 22/29] vmdk: Fix format specific information (create type) + for streamOptimized +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1405303527-10117-1-git-send-email-famz@redhat.com> +Patchwork-id: 59872 +O-Subject: [RHEL-7 qemu-kvm PATCH] vmdk: Fix format specific information (create type) for streamOptimized +Bugzilla: 1029271 +RH-Acked-by: Markus Armbruster +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1029271 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=7695829 + +Previously the field is wrong: + + $ ./qemu-img create -f vmdk -o subformat=streamOptimized /tmp/a.vmdk 1G + + $ ./qemu-img info /tmp/a.vmdk + image: /tmp/a.vmdk + file format: vmdk + virtual size: 1.0G (1073741824 bytes) + disk size: 12K + Format specific information: + cid: 1390460459 + parent cid: 4294967295 +>>> create type: monolithicSparse + + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit d8a7b061ae01e5692cc994f05ad6480d8c170125) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 4 ++++ + 1 file changed, 4 insertions(+) + +Signed-off-by: jen +--- + block/vmdk.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index a966715..9e4b3b9 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -650,6 +650,10 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + extent->compressed = + le16_to_cpu(header.compressAlgorithm) == VMDK4_COMPRESSION_DEFLATE; ++ if (extent->compressed) { ++ g_free(s->create_type); ++ s->create_type = g_strdup("streamOptimized"); ++ } + extent->has_marker = le32_to_cpu(header.flags) & VMDK4_FLAG_MARKER; + extent->version = le32_to_cpu(header.version); + extent->has_zero_grain = le32_to_cpu(header.flags) & VMDK4_FLAG_ZERO_GRAIN; +-- +1.9.3 + diff --git a/SOURCES/kvm-vmdk-Fix-index_in_cluster-calculation-in-vmdk_co_get.patch b/SOURCES/kvm-vmdk-Fix-index_in_cluster-calculation-in-vmdk_co_get.patch new file mode 100644 index 0000000..311534c --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-index_in_cluster-calculation-in-vmdk_co_get.patch @@ -0,0 +1,65 @@ +From 32791762f04b3342e9b10d1f553326cd01ea451f Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:26 +0100 +Subject: [PATCH 13/18] vmdk: Fix index_in_cluster calculation in + vmdk_co_get_block_status + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-14-git-send-email-famz@redhat.com> +Patchwork-id: 69179 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 13/18] vmdk: Fix index_in_cluster calculation in vmdk_co_get_block_status +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +It has the similar issue with b1649fae49a8. Since the calculation +is repeated for a few times already, introduce a function so it can be +reused. + +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 61f0ed1d54601b91b8195c1a30d7046f83283b40) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index dd8b638..10c08f3 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1242,6 +1242,17 @@ static VmdkExtent *find_extent(BDRVVmdkState *s, + return NULL; + } + ++static inline uint64_t vmdk_find_index_in_cluster(VmdkExtent *extent, ++ int64_t sector_num) ++{ ++ uint64_t index_in_cluster, extent_begin_sector, extent_relative_sector_num; ++ ++ extent_begin_sector = extent->end_sector - extent->sectors; ++ extent_relative_sector_num = sector_num - extent_begin_sector; ++ index_in_cluster = extent_relative_sector_num % extent->cluster_sectors; ++ return index_in_cluster; ++} ++ + static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + int64_t sector_num, int nb_sectors, int *pnum) + { +@@ -1279,7 +1290,7 @@ static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + break; + } + +- index_in_cluster = sector_num % extent->cluster_sectors; ++ index_in_cluster = vmdk_find_index_in_cluster(extent, sector_num); + n = extent->cluster_sectors - index_in_cluster; + if (n > nb_sectors) { + n = nb_sectors; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-integer-overflow-in-offset-calculation.patch b/SOURCES/kvm-vmdk-Fix-integer-overflow-in-offset-calculation.patch new file mode 100644 index 0000000..e63a640 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-integer-overflow-in-offset-calculation.patch @@ -0,0 +1,175 @@ +From ed2a49b247a70b0e841296f5a63285390b842e06 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:24 -0600 +Subject: [CHANGE 30/31] vmdk: Fix integer overflow in offset calculation +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-31-git-send-email-famz@redhat.com> +Patchwork-id: 62703 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 30/30] vmdk: Fix integer overflow in offset calculation +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +This fixes the bug introduced by commit c6ac36e (vmdk: Optimize cluster +allocation). + +$ ~/build/master/qemu-io /stor/vm/arch.vmdk -c 'write 2G 1k' +write failed: Invalid argument + +Reported-by: Mark Cave-Ayland +Reviewed-by: Max Reitz +Signed-off-by: Fam Zheng +Message-id: 1411437381-11234-1-git-send-email-famz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit d1319b077a4bd980ca1b8a167b02b519330dd26b) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson + +Conflicts: + tests/qemu-iotests/group + +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 2 +- + tests/qemu-iotests/105 | 70 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/105.out | 21 ++++++++++++++ + tests/qemu-iotests/group | 1 + + 4 files changed, 93 insertions(+), 1 deletion(-) + create mode 100755 tests/qemu-iotests/105 + create mode 100644 tests/qemu-iotests/105.out + +diff --git a/block/vmdk.c b/block/vmdk.c +index 0593a1a..cfcaa84 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1116,7 +1116,7 @@ static int get_cluster_offset(BlockDriverState *bs, + uint32_t min_count, *l2_table; + bool zeroed = false; + int64_t ret; +- int32_t cluster_sector; ++ int64_t cluster_sector; + + if (m_data) { + m_data->valid = 0; +diff --git a/tests/qemu-iotests/105 b/tests/qemu-iotests/105 +new file mode 100755 +index 0000000..9bae49e +--- /dev/null ++++ b/tests/qemu-iotests/105 +@@ -0,0 +1,70 @@ ++#!/bin/bash ++# ++# Create, read, write big image ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=famz@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt qcow2 vmdk vhdx qed ++_supported_proto generic ++_supported_os Linux ++_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \ ++ "subformat=twoGbMaxExtentSparse" ++ ++echo ++echo "creating large image" ++_make_test_img 16T ++ ++echo ++echo "small read" ++$QEMU_IO -c "read 1024 4096" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "small write" ++$QEMU_IO -c "write 8192 4096" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "small read at high offset" ++$QEMU_IO -c "read 14T 4096" "$TEST_IMG" | _filter_qemu_io ++ ++echo ++echo "small write at high offset" ++$QEMU_IO -c "write 14T 4096" "$TEST_IMG" | _filter_qemu_io ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/105.out b/tests/qemu-iotests/105.out +new file mode 100644 +index 0000000..13ffcb5 +--- /dev/null ++++ b/tests/qemu-iotests/105.out +@@ -0,0 +1,21 @@ ++QA output created by 105 ++ ++creating large image ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=17592186044416 ++ ++small read ++read 4096/4096 bytes at offset 1024 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++small write ++wrote 4096/4096 bytes at offset 8192 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++small read at high offset ++read 4096/4096 bytes at offset 15393162788864 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++ ++small write at high offset ++wrote 4096/4096 bytes at offset 15393162788864 ++4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 572438e..cd8384a 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -85,3 +85,4 @@ + 087 rw auto quick + 088 rw auto + 092 rw auto quick ++105 rw auto quick +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Fix-local_err-in-vmdk_create.patch b/SOURCES/kvm-vmdk-Fix-local_err-in-vmdk_create.patch new file mode 100644 index 0000000..749ece9 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-local_err-in-vmdk_create.patch @@ -0,0 +1,74 @@ +From 9602ee8eaedf151648fd8e47ce4673799ea567c3 Mon Sep 17 00:00:00 2001 +Message-Id: <9602ee8eaedf151648fd8e47ce4673799ea567c3.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:16 -0600 +Subject: [CHANGE 22/31] vmdk: Fix local_err in vmdk_create +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-23-git-send-email-famz@redhat.com> +Patchwork-id: 62695 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 22/30] vmdk: Fix local_err in vmdk_create +Bugzilla: 1134283 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +In vmdk_create and vmdk_create_extent, initialize local_err before using +it, and don't leak it on error. + +Reported-by: Markus Armbruster +Signed-off-by: Fam Zheng +Reviewed-by: Markus Armbruster +Signed-off-by: Kevin Wolf +(cherry picked from commit c13959c745a7e4965c94d19e3153d2c44459906d) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 94e8782..a625e7a 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1533,7 +1533,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + int ret, i; + BlockDriverState *bs = NULL; + VMDK4Header header; +- Error *local_err; ++ Error *local_err = NULL; + uint32_t tmp, magic, grains, gd_sectors, gt_size, gt_count; + uint32_t *gd_buf = NULL; + int gd_buf_size; +@@ -1697,7 +1697,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + { + int idx = 0; + BlockDriverState *new_bs = NULL; +- Error *local_err; ++ Error *local_err = NULL; + char *desc = NULL; + int64_t total_size = 0, filesize; + const char *adapter_type = NULL; +@@ -1878,13 +1878,13 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + } else { + ret = bdrv_create_file(filename, options, &local_err); + if (ret < 0) { +- error_setg_errno(errp, -ret, "Could not create image file"); ++ error_propagate(errp, local_err); + goto exit; + } + } + ret = bdrv_file_open(&new_bs, filename, NULL, BDRV_O_RDWR, &local_err); + if (ret < 0) { +- error_setg_errno(errp, -ret, "Could not write description"); ++ error_propagate(errp, local_err); + goto exit; + } + ret = bdrv_pwrite(new_bs, desc_offset, desc, desc_len); +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Fix-next_cluster_sector-for-compressed-write.patch b/SOURCES/kvm-vmdk-Fix-next_cluster_sector-for-compressed-write.patch new file mode 100644 index 0000000..044ab7a --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-next_cluster_sector-for-compressed-write.patch @@ -0,0 +1,70 @@ +From 47886bf3b19f06d0a5255d9656d1c02800baddd0 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:25 +0100 +Subject: [PATCH 12/18] vmdk: Fix next_cluster_sector for compressed write + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-13-git-send-email-famz@redhat.com> +Patchwork-id: 69178 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 12/18] vmdk: Fix next_cluster_sector for compressed write +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +This fixes the bug introduced by commit c6ac36e (vmdk: Optimize cluster +allocation). + +Sometimes, write_len could be larger than cluster size, because it +contains both data and marker. We must advance next_cluster_sector in +this case, otherwise the image gets corrupted. + +Cc: qemu-stable@nongnu.org +Reported-by: Antoni Villalonga +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 5e82a31eb967db135fc4e688b134fb0972d62de3) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 3810d75..dd8b638 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1297,6 +1297,8 @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset, + uLongf buf_len; + const uint8_t *write_buf = buf; + int write_len = nb_sectors * 512; ++ int64_t write_offset; ++ int64_t write_end_sector; + + if (extent->compressed) { + if (!extent->has_marker) { +@@ -1315,10 +1317,14 @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset, + write_buf = (uint8_t *)data; + write_len = buf_len + sizeof(VmdkGrainMarker); + } +- ret = bdrv_pwrite(extent->file, +- cluster_offset + offset_in_cluster, +- write_buf, +- write_len); ++ write_offset = cluster_offset + offset_in_cluster, ++ ret = bdrv_pwrite(extent->file, write_offset, write_buf, write_len); ++ ++ write_end_sector = DIV_ROUND_UP(write_offset + write_len, BDRV_SECTOR_SIZE); ++ ++ extent->next_cluster_sector = MAX(extent->next_cluster_sector, ++ write_end_sector); ++ + if (ret != write_len) { + ret = ret < 0 ? ret : -EIO; + goto out; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-next_cluster_sector-for-compressed-write2.patch b/SOURCES/kvm-vmdk-Fix-next_cluster_sector-for-compressed-write2.patch new file mode 100644 index 0000000..f926460 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-next_cluster_sector-for-compressed-write2.patch @@ -0,0 +1,55 @@ +From bc048d2d5f362757fa0bf51add81d92ec19ad161 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:28 +0100 +Subject: [PATCH 15/18] vmdk: Fix next_cluster_sector for compressed write + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-16-git-send-email-famz@redhat.com> +Patchwork-id: 69181 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 15/18] vmdk: Fix next_cluster_sector for compressed write +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +From: Radoslav Gerganov + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +When the VMDK is streamOptimized (or compressed), the +next_cluster_sector must not be incremented by a fixed number of +sectors. Instead of this, it must be rounded up to the next consecutive +sector. Fixing this results in much smaller compressed images. + +Signed-off-by: Radoslav Gerganov +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 3efffc3292d94271a15b1606b4a56adf6c6f04ed) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index cb5255c..7009660 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1333,8 +1333,12 @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset, + + write_end_sector = DIV_ROUND_UP(write_offset + write_len, BDRV_SECTOR_SIZE); + +- extent->next_cluster_sector = MAX(extent->next_cluster_sector, +- write_end_sector); ++ if (extent->compressed) { ++ extent->next_cluster_sector = write_end_sector; ++ } else { ++ extent->next_cluster_sector = MAX(extent->next_cluster_sector, ++ write_end_sector); ++ } + + if (ret != write_len) { + ret = ret < 0 ? ret : -EIO; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-overflow-if-l1_size-is-0x20000000.patch b/SOURCES/kvm-vmdk-Fix-overflow-if-l1_size-is-0x20000000.patch new file mode 100644 index 0000000..a0888b4 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-overflow-if-l1_size-is-0x20000000.patch @@ -0,0 +1,62 @@ +From 77824d3e0c00074d30f345be594d4ca941585edd Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 1 Jun 2015 08:23:51 +0200 +Subject: [PATCH 01/30] vmdk: Fix overflow if l1_size is 0x20000000 + +Message-id: <1433147031-14770-1-git-send-email-famz@redhat.com> +Patchwork-id: 65160 +O-Subject: [RHEL-7.2 qemu-kvm PATCH] vmdk: Fix overflow if l1_size is 0x20000000 +Bugzilla: 1217351 +RH-Acked-by: Max Reitz +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek + +Richard Jones caught this bug with afl fuzzer. + +In fact, that's the only possible value to overflow (extent->l1_size = +0x20000000) l1_size: + +l1_size = extent->l1_size * sizeof(long) => 0x80000000; + +g_try_malloc returns NULL because l1_size is interpreted as negative +during type casting from 'int' to 'gsize', which yields a enormous +value. Hence, by coincidence, we get a "not too bad" behavior: + +qemu-img: Could not open '/tmp/afl6.img': Could not open +'/tmp/afl6.img': Cannot allocate memory + +Values larger than 0x20000000 will be refused by the validation in +vmdk_add_extent. + +Values smaller than 0x20000000 will not overflow l1_size. + +Cc: qemu-stable@nongnu.org +Reported-by: Richard W.M. Jones +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Tested-by: Richard W.M. Jones +Signed-off-by: Kevin Wolf +(cherry picked from commit 13c4941cdd8685d28c7e3a09e393a5579b58db46) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 24e9458..6b015ab 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -451,7 +451,8 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent, + Error **errp) + { + int ret; +- int l1_size, i; ++ size_t l1_size; ++ int i; + + /* read the L1 table */ + l1_size = extent->l1_size * sizeof(uint32_t); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Fix-vmdk_parse_extents.patch b/SOURCES/kvm-vmdk-Fix-vmdk_parse_extents.patch new file mode 100644 index 0000000..3c7ec4d --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-vmdk_parse_extents.patch @@ -0,0 +1,50 @@ +From 24b35c7de7077b977ab71ccddbe004bfc4e28d82 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 7 Nov 2013 16:03:34 +0100 +Subject: [PATCH 22/25] vmdk: Fix vmdk_parse_extents + +RH-Author: Fam Zheng +Message-id: <1383795369-10623-2-git-send-email-famz@redhat.com> +Patchwork-id: 55585 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/2] vmdk: Fix vmdk_parse_extents +Bugzilla: 995866 +RH-Acked-by: Amos Kong +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +An extra 'p++' after while loop when *p == '\n' will move p to unknown +data position, risking parsing junk data or memory access violation. + +Cc: qemu-stable@nongnu.org +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 899f1ae219d5eaa96a53c996026cb0178d62a86d) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index a3267fe..f2237cf 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -782,10 +782,13 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + extent->type = g_strdup(type); + next_line: + /* move to next line */ +- while (*p && *p != '\n') { ++ while (*p) { ++ if (*p == '\n') { ++ p++; ++ break; ++ } + p++; + } +- p++; + } + return 0; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Fix-x-to-PRIx32-in-format-strings-for-cid.patch b/SOURCES/kvm-vmdk-Fix-x-to-PRIx32-in-format-strings-for-cid.patch new file mode 100644 index 0000000..2f65a69 --- /dev/null +++ b/SOURCES/kvm-vmdk-Fix-x-to-PRIx32-in-format-strings-for-cid.patch @@ -0,0 +1,73 @@ +From 6ddebaea406a462feec3ce5a3c04a19223ffc218 Mon Sep 17 00:00:00 2001 +Message-Id: <6ddebaea406a462feec3ce5a3c04a19223ffc218.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:11 -0600 +Subject: [CHANGE 17/31] vmdk: Fix "%x" to PRIx32 in format strings for cid +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-18-git-send-email-famz@redhat.com> +Patchwork-id: 62690 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 17/30] vmdk: Fix "%x" to PRIx32 in format strings for cid +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 9b17031ac4efcf7a587f0e4eea82287a5329b6e7) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 0a01a2b..4cd2795 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -262,7 +262,7 @@ static uint32_t vmdk_read_cid(BlockDriverState *bs, int parent) + p_name = strstr(desc, cid_str); + if (p_name != NULL) { + p_name += cid_str_size; +- sscanf(p_name, "%x", &cid); ++ sscanf(p_name, "%" SCNx32, &cid); + } + + return cid; +@@ -290,7 +290,7 @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid) + p_name = strstr(desc, "CID"); + if (p_name != NULL) { + p_name += sizeof("CID"); +- snprintf(p_name, sizeof(desc) - (p_name - desc), "%x\n", cid); ++ snprintf(p_name, sizeof(desc) - (p_name - desc), "%" PRIx32 "\n", cid); + pstrcat(desc, sizeof(desc), tmp_desc); + } + +@@ -1705,8 +1705,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + const char desc_template[] = + "# Disk DescriptorFile\n" + "version=1\n" +- "CID=%x\n" +- "parentCID=%x\n" ++ "CID=%" PRIx32 "\n" ++ "parentCID=%" PRIx32 "\n" + "createType=\"%s\"\n" + "%s" + "\n" +@@ -1848,7 +1848,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + } + /* generate descriptor file */ + desc = g_strdup_printf(desc_template, +- (unsigned int)time(NULL), ++ (uint32_t)time(NULL), + parent_cid, + fmt, + parent_desc_line, +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Handle-failure-for-potentially-large-allocation.patch b/SOURCES/kvm-vmdk-Handle-failure-for-potentially-large-allocation.patch new file mode 100644 index 0000000..b26e159 --- /dev/null +++ b/SOURCES/kvm-vmdk-Handle-failure-for-potentially-large-allocation.patch @@ -0,0 +1,70 @@ +From 2db24b5a4b5a760a0cf014e7285b0f07f0a63762 Mon Sep 17 00:00:00 2001 +Message-Id: <2db24b5a4b5a760a0cf014e7285b0f07f0a63762.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:20 -0600 +Subject: [CHANGE 26/31] vmdk: Handle failure for potentially large allocations +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-27-git-send-email-famz@redhat.com> +Patchwork-id: 62699 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 26/30] vmdk: Handle failure for potentially large allocations +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Some code in the block layer makes potentially huge allocations. Failure +is not completely unexpected there, so avoid aborting qemu and handle +out-of-memory situations gracefully. + +This patch addresses the allocations in the vmdk block driver. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Benoit Canet +(cherry picked from commit d6e5993197990ff55c660714526681fa7028299e) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 70b616a..560dd43 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -456,7 +456,11 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent, + + /* read the L1 table */ + l1_size = extent->l1_size * sizeof(uint32_t); +- extent->l1_table = g_malloc(l1_size); ++ extent->l1_table = g_try_malloc(l1_size); ++ if (l1_size && extent->l1_table == NULL) { ++ return -ENOMEM; ++ } ++ + ret = bdrv_pread(extent->file, + extent->l1_table_offset, + extent->l1_table, +@@ -472,7 +476,11 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent, + } + + if (extent->l1_backup_table_offset) { +- extent->l1_backup_table = g_malloc(l1_size); ++ extent->l1_backup_table = g_try_malloc(l1_size); ++ if (l1_size && extent->l1_backup_table == NULL) { ++ ret = -ENOMEM; ++ goto fail_l1; ++ } + ret = bdrv_pread(extent->file, + extent->l1_backup_table_offset, + extent->l1_backup_table, +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Implement-.bdrv_get_info.patch b/SOURCES/kvm-vmdk-Implement-.bdrv_get_info.patch new file mode 100644 index 0000000..ce9a213 --- /dev/null +++ b/SOURCES/kvm-vmdk-Implement-.bdrv_get_info.patch @@ -0,0 +1,89 @@ +From 8783be68d7f1710ad79903bb7eb20ef12045c1e3 Mon Sep 17 00:00:00 2001 +Message-Id: <8783be68d7f1710ad79903bb7eb20ef12045c1e3.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:14 -0600 +Subject: [CHANGE 20/31] vmdk: Implement .bdrv_get_info() +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-21-git-send-email-famz@redhat.com> +Patchwork-id: 62693 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 20/30] vmdk: Implement .bdrv_get_info() +Bugzilla: 1134283 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +This will return cluster_size and needs_compressed_writes to caller, if all the +extents have the same value (or there's only one extent). Otherwise return +-ENOTSUP. + +cluster_size is only reported for sparse formats. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 74fe188cd1a27a5565787152d8620f8b8d04c4f9) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 21 +++++++++++++++++++++ + tests/qemu-iotests/059.out | 1 + + 2 files changed, 22 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 157db7e..94e8782 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -2071,6 +2071,26 @@ static ImageInfoSpecific *vmdk_get_specific_info(BlockDriverState *bs) + return spec_info; + } + ++static int vmdk_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) ++{ ++ int i; ++ BDRVVmdkState *s = bs->opaque; ++ assert(s->num_extents); ++ bdi->needs_compressed_writes = s->extents[0].compressed; ++ if (!s->extents[0].flat) { ++ bdi->cluster_size = s->extents[0].cluster_sectors << BDRV_SECTOR_BITS; ++ } ++ /* See if we have multiple extents but they have different cases */ ++ for (i = 1; i < s->num_extents; i++) { ++ if (bdi->needs_compressed_writes != s->extents[i].compressed || ++ (bdi->cluster_size && bdi->cluster_size != ++ s->extents[i].cluster_sectors << BDRV_SECTOR_BITS)) { ++ return -ENOTSUP; ++ } ++ } ++ return 0; ++} ++ + static QEMUOptionParameter vmdk_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -2127,6 +2147,7 @@ static BlockDriver bdrv_vmdk = { + .bdrv_has_zero_init = vmdk_has_zero_init, + .bdrv_get_specific_info = vmdk_get_specific_info, + .bdrv_refresh_limits = vmdk_refresh_limits, ++ .bdrv_get_info = vmdk_get_info, + + .create_options = vmdk_create_options, + }; +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 7c9ef90..f226f71 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -2050,6 +2050,7 @@ qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File truncated, expecting at least + image: TEST_DIR/iotest-version3.IMGFMT + file format: IMGFMT + virtual size: 1.0G (1073741824 bytes) ++cluster_size: 65536 + + === Testing 4TB monolithicFlat creation and IO === + Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104 +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Implement-.bdrv_has_zero_init.patch b/SOURCES/kvm-vmdk-Implement-.bdrv_has_zero_init.patch new file mode 100644 index 0000000..f37f2ff --- /dev/null +++ b/SOURCES/kvm-vmdk-Implement-.bdrv_has_zero_init.patch @@ -0,0 +1,103 @@ +From 6e011e90a93e9301c2a23a71a13f2a1664b4be2b Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 7 Nov 2013 13:12:58 +0100 +Subject: [PATCH 73/87] vmdk: Implement .bdrv_has_zero_init + +RH-Author: Max Reitz +Message-id: <1383756824-6921-8-git-send-email-mreitz@redhat.com> +Patchwork-id: 55562 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 07/21] vmdk: Implement .bdrv_has_zero_init +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +Depending on the subformat, has_zero_init queries underlying storage for +flat extent. If it has a flat extent and its underlying storage doesn't +have zero init, return 0. Otherwise return 1. + +Aligns the operator assignments. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit da7a50f938516d0f2302965eeb82940c32028ed8) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 48 +++++++++++++++++++++++++++++++++--------------- + 1 files changed, 33 insertions(+), 15 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 213901f..bd1dd62 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1797,6 +1797,23 @@ static int64_t vmdk_get_allocated_file_size(BlockDriverState *bs) + return ret; + } + ++static int vmdk_has_zero_init(BlockDriverState *bs) ++{ ++ int i; ++ BDRVVmdkState *s = bs->opaque; ++ ++ /* If has a flat extent and its underlying storage doesn't have zero init, ++ * return 0. */ ++ for (i = 0; i < s->num_extents; i++) { ++ if (s->extents[i].flat) { ++ if (!bdrv_has_zero_init(s->extents[i].file)) { ++ return 0; ++ } ++ } ++ } ++ return 1; ++} ++ + static QEMUOptionParameter vmdk_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -1835,21 +1852,22 @@ static QEMUOptionParameter vmdk_create_options[] = { + }; + + static BlockDriver bdrv_vmdk = { +- .format_name = "vmdk", +- .instance_size = sizeof(BDRVVmdkState), +- .bdrv_probe = vmdk_probe, +- .bdrv_open = vmdk_open, +- .bdrv_reopen_prepare = vmdk_reopen_prepare, +- .bdrv_read = vmdk_co_read, +- .bdrv_write = vmdk_co_write, +- .bdrv_co_write_zeroes = vmdk_co_write_zeroes, +- .bdrv_close = vmdk_close, +- .bdrv_create = vmdk_create, +- .bdrv_co_flush_to_disk = vmdk_co_flush, +- .bdrv_co_get_block_status = vmdk_co_get_block_status, +- .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size, +- +- .create_options = vmdk_create_options, ++ .format_name = "vmdk", ++ .instance_size = sizeof(BDRVVmdkState), ++ .bdrv_probe = vmdk_probe, ++ .bdrv_open = vmdk_open, ++ .bdrv_reopen_prepare = vmdk_reopen_prepare, ++ .bdrv_read = vmdk_co_read, ++ .bdrv_write = vmdk_co_write, ++ .bdrv_co_write_zeroes = vmdk_co_write_zeroes, ++ .bdrv_close = vmdk_close, ++ .bdrv_create = vmdk_create, ++ .bdrv_co_flush_to_disk = vmdk_co_flush, ++ .bdrv_co_get_block_status = vmdk_co_get_block_status, ++ .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size, ++ .bdrv_has_zero_init = vmdk_has_zero_init, ++ ++ .create_options = vmdk_create_options, + }; + + static void bdrv_vmdk_init(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Implement-.bdrv_write_compressed.patch b/SOURCES/kvm-vmdk-Implement-.bdrv_write_compressed.patch new file mode 100644 index 0000000..74ff08e --- /dev/null +++ b/SOURCES/kvm-vmdk-Implement-.bdrv_write_compressed.patch @@ -0,0 +1,67 @@ +From e865b795a4b0eaae50745ad7dd694447c72600c9 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:13 -0600 +Subject: [CHANGE 19/31] vmdk: Implement .bdrv_write_compressed +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-20-git-send-email-famz@redhat.com> +Patchwork-id: 62692 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 19/30] vmdk: Implement .bdrv_write_compressed +Bugzilla: 1134283 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +Add a wrapper function to support "compressed" path in qemu-img convert. +Only support streamOptimized subformat case for now (num_extents == 1 +and extent compression is true). + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit ba0ad89e2c3316ce26ca6576a3c5051f91bfc0fe) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 4cd2795..157db7e 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1495,6 +1495,19 @@ static coroutine_fn int vmdk_co_write(BlockDriverState *bs, int64_t sector_num, + return ret; + } + ++static int vmdk_write_compressed(BlockDriverState *bs, ++ int64_t sector_num, ++ const uint8_t *buf, ++ int nb_sectors) ++{ ++ BDRVVmdkState *s = bs->opaque; ++ if (s->num_extents == 1 && s->extents[0].compressed) { ++ return vmdk_write(bs, sector_num, buf, nb_sectors, false, false); ++ } else { ++ return -ENOTSUP; ++ } ++} ++ + static int coroutine_fn vmdk_co_write_zeroes(BlockDriverState *bs, + int64_t sector_num, + int nb_sectors, +@@ -2104,6 +2117,7 @@ static BlockDriver bdrv_vmdk = { + .bdrv_reopen_prepare = vmdk_reopen_prepare, + .bdrv_read = vmdk_co_read, + .bdrv_write = vmdk_co_write, ++ .bdrv_write_compressed = vmdk_write_compressed, + .bdrv_co_write_zeroes = vmdk_co_write_zeroes, + .bdrv_close = vmdk_close, + .bdrv_create = vmdk_create, +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Implment-bdrv_get_specific_info.patch b/SOURCES/kvm-vmdk-Implment-bdrv_get_specific_info.patch new file mode 100644 index 0000000..71f2403 --- /dev/null +++ b/SOURCES/kvm-vmdk-Implment-bdrv_get_specific_info.patch @@ -0,0 +1,287 @@ +From 330cc46279f2fcd6f2d41d4e8beda8038c7a2fd9 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Thu, 7 Nov 2013 13:18:21 +0100 +Subject: [PATCH 87/87] vmdk: Implment bdrv_get_specific_info + +RH-Author: Max Reitz +Message-id: <1383756824-6921-22-git-send-email-mreitz@redhat.com> +Patchwork-id: 55576 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 21/21] vmdk: Implment bdrv_get_specific_info +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +Implement .bdrv_get_specific_info to return the extent information. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit f4c129a38a5430b7342a7a23f53a22831154612f) + +Signed-off-by: Max Reitz +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 68 +++++++++++++++++++++++++++++++++++++++++++- + qapi-schema.json | 24 +++++++++++++++- + tests/qemu-iotests/059 | 2 +- + tests/qemu-iotests/059.out | 5 +-- + 4 files changed, 93 insertions(+), 6 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 8bef9f2..a3267fe 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -106,6 +106,7 @@ typedef struct VmdkExtent { + uint32_t l2_cache_counts[L2_CACHE_SIZE]; + + int64_t cluster_sectors; ++ char *type; + } VmdkExtent; + + typedef struct BDRVVmdkState { +@@ -113,11 +114,13 @@ typedef struct BDRVVmdkState { + uint64_t desc_offset; + bool cid_updated; + bool cid_checked; ++ uint32_t cid; + uint32_t parent_cid; + int num_extents; + /* Extent array with num_extents entries, ascend ordered by address */ + VmdkExtent *extents; + Error *migration_blocker; ++ char *create_type; + } BDRVVmdkState; + + typedef struct VmdkMetaData { +@@ -214,6 +217,7 @@ static void vmdk_free_extents(BlockDriverState *bs) + g_free(e->l1_table); + g_free(e->l2_cache); + g_free(e->l1_backup_table); ++ g_free(e->type); + if (e->file != bs->file) { + bdrv_delete(e->file); + } +@@ -534,6 +538,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + uint32_t l1_size, l1_entry_sectors; + VMDK4Header header; + VmdkExtent *extent; ++ BDRVVmdkState *s = bs->opaque; + int64_t l1_backup_offset = 0; + + ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header)); +@@ -549,6 +554,10 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + } + ++ if (!s->create_type) { ++ s->create_type = g_strdup("monolithicSparse"); ++ } ++ + if (le64_to_cpu(header.gd_offset) == VMDK4_GD_AT_END) { + /* + * The footer takes precedence over the header, so read it in. The +@@ -709,6 +718,8 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + int64_t flat_offset; + char extent_path[PATH_MAX]; + BlockDriverState *extent_file; ++ BDRVVmdkState *s = bs->opaque; ++ VmdkExtent *extent; + + while (*p) { + /* parse extent line: +@@ -749,7 +760,6 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + /* save to extents array */ + if (!strcmp(type, "FLAT") || !strcmp(type, "VMFS")) { + /* FLAT extent */ +- VmdkExtent *extent; + + ret = vmdk_add_extent(bs, extent_file, true, sectors, + 0, 0, 0, 0, 0, &extent, errp); +@@ -764,10 +774,12 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + bdrv_delete(extent_file); + return ret; + } ++ extent = &s->extents[s->num_extents - 1]; + } else { + error_setg(errp, "Unsupported extent type '%s'", type); + return -ENOTSUP; + } ++ extent->type = g_strdup(type); + next_line: + /* move to next line */ + while (*p && *p != '\n') { +@@ -812,6 +824,7 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + ret = -ENOTSUP; + goto exit; + } ++ s->create_type = g_strdup(ct); + s->desc_offset = 0; + ret = vmdk_parse_extents(buf, bs, bs->file->filename, errp); + exit: +@@ -838,6 +851,7 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + if (ret) { + goto fail; + } ++ s->cid = vmdk_read_cid(bs, 0); + s->parent_cid = vmdk_read_cid(bs, 1); + qemu_co_mutex_init(&s->lock); + +@@ -850,6 +864,8 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + return 0; + + fail: ++ g_free(s->create_type); ++ s->create_type = NULL; + vmdk_free_extents(bs); + return ret; + } +@@ -1761,6 +1777,7 @@ static void vmdk_close(BlockDriverState *bs) + BDRVVmdkState *s = bs->opaque; + + vmdk_free_extents(bs); ++ g_free(s->create_type); + + migrate_del_blocker(s->migration_blocker); + error_free(s->migration_blocker); +@@ -1822,6 +1839,54 @@ static int vmdk_has_zero_init(BlockDriverState *bs) + return 1; + } + ++static ImageInfo *vmdk_get_extent_info(VmdkExtent *extent) ++{ ++ ImageInfo *info = g_new0(ImageInfo, 1); ++ ++ *info = (ImageInfo){ ++ .filename = g_strdup(extent->file->filename), ++ .format = g_strdup(extent->type), ++ .virtual_size = extent->sectors * BDRV_SECTOR_SIZE, ++ .compressed = extent->compressed, ++ .has_compressed = extent->compressed, ++ .cluster_size = extent->cluster_sectors * BDRV_SECTOR_SIZE, ++ .has_cluster_size = !extent->flat, ++ }; ++ ++ return info; ++} ++ ++static ImageInfoSpecific *vmdk_get_specific_info(BlockDriverState *bs) ++{ ++ int i; ++ BDRVVmdkState *s = bs->opaque; ++ ImageInfoSpecific *spec_info = g_new0(ImageInfoSpecific, 1); ++ ImageInfoList **next; ++ ++ *spec_info = (ImageInfoSpecific){ ++ .kind = IMAGE_INFO_SPECIFIC_KIND_VMDK, ++ { ++ .vmdk = g_new0(ImageInfoSpecificVmdk, 1), ++ }, ++ }; ++ ++ *spec_info->vmdk = (ImageInfoSpecificVmdk) { ++ .create_type = g_strdup(s->create_type), ++ .cid = s->cid, ++ .parent_cid = s->parent_cid, ++ }; ++ ++ next = &spec_info->vmdk->extents; ++ for (i = 0; i < s->num_extents; i++) { ++ *next = g_new0(ImageInfoList, 1); ++ (*next)->value = vmdk_get_extent_info(&s->extents[i]); ++ (*next)->next = NULL; ++ next = &(*next)->next; ++ } ++ ++ return spec_info; ++} ++ + static QEMUOptionParameter vmdk_create_options[] = { + { + .name = BLOCK_OPT_SIZE, +@@ -1874,6 +1939,7 @@ static BlockDriver bdrv_vmdk = { + .bdrv_co_get_block_status = vmdk_co_get_block_status, + .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size, + .bdrv_has_zero_init = vmdk_has_zero_init, ++ .bdrv_get_specific_info = vmdk_get_specific_info, + + .create_options = vmdk_create_options, + }; +diff --git a/qapi-schema.json b/qapi-schema.json +index 99b05b7..64696a9 100644 +--- a/qapi-schema.json ++++ b/qapi-schema.json +@@ -225,6 +225,27 @@ + } } + + ## ++# @ImageInfoSpecificVmdk: ++# ++# @create_type: The create type of VMDK image ++# ++# @cid: Content id of image ++# ++# @parent-cid: Parent VMDK image's cid ++# ++# @extents: List of extent files ++# ++# Since: 1.7 ++## ++{ 'type': 'ImageInfoSpecificVmdk', ++ 'data': { ++ 'create-type': 'str', ++ 'cid': 'int', ++ 'parent-cid': 'int', ++ 'extents': ['ImageInfo'] ++ } } ++ ++## + # @ImageInfoSpecific: + # + # A discriminated record of image format specific information structures. +@@ -234,7 +255,8 @@ + + { 'union': 'ImageInfoSpecific', + 'data': { +- 'qcow2': 'ImageInfoSpecificQCow2' ++ 'qcow2': 'ImageInfoSpecificQCow2', ++ 'vmdk': 'ImageInfoSpecificVmdk' + } } + + ## +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 26d4538..36103e1 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -69,7 +69,7 @@ poke_file "$TEST_IMG" "$grain_table_size_offset" "\x01\x00\x00\x00" + echo "=== Testing monolithicFlat creation and opening ===" + echo + IMGOPTS="subformat=monolithicFlat" _make_test_img 2G +-$QEMU_IMG info $TEST_IMG | _filter_testdir ++_img_info + + echo + echo "=== Testing monolithicFlat with zeroed_grain ===" +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 2b29ca9..5829794 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -18,10 +18,9 @@ no file open, try 'help open' + === Testing monolithicFlat creation and opening === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 +-image: TEST_DIR/t.vmdk +-file format: vmdk ++image: TEST_DIR/t.IMGFMT ++file format: IMGFMT + virtual size: 2.0G (2147483648 bytes) +-disk size: 4.0K + + === Testing monolithicFlat with zeroed_grain === + qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Leave-bdi-intact-if-ENOTSUP-in-vmdk_get_info.patch b/SOURCES/kvm-vmdk-Leave-bdi-intact-if-ENOTSUP-in-vmdk_get_info.patch new file mode 100644 index 0000000..9566d00 --- /dev/null +++ b/SOURCES/kvm-vmdk-Leave-bdi-intact-if-ENOTSUP-in-vmdk_get_info.patch @@ -0,0 +1,74 @@ +From 824614c344ceeb60dd27b38cfdb190471b6a2ef9 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:14 +0100 +Subject: [PATCH 01/18] vmdk: Leave bdi intact if -ENOTSUP in vmdk_get_info + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-2-git-send-email-famz@redhat.com> +Patchwork-id: 69167 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 01/18] vmdk: Leave bdi intact if -ENOTSUP in vmdk_get_info +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +When extent types don't match, we return -ENOTSUP. In this case, be +polite to the caller and don't modify bdi. + +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Message-id: 1415938161-16217-1-git-send-email-famz@redhat.com +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 5f58330790b72c4705b373ee0646fb3adf800b4e) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 6b015ab..fa53d2f 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -2137,23 +2137,29 @@ static ImageInfoSpecific *vmdk_get_specific_info(BlockDriverState *bs) + return spec_info; + } + ++static bool vmdk_extents_type_eq(const VmdkExtent *a, const VmdkExtent *b) ++{ ++ return a->flat == b->flat && ++ a->compressed == b->compressed && ++ (a->flat || a->cluster_sectors == b->cluster_sectors); ++} ++ + static int vmdk_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) + { + int i; + BDRVVmdkState *s = bs->opaque; + assert(s->num_extents); +- bdi->needs_compressed_writes = s->extents[0].compressed; +- if (!s->extents[0].flat) { +- bdi->cluster_size = s->extents[0].cluster_sectors << BDRV_SECTOR_BITS; +- } ++ + /* See if we have multiple extents but they have different cases */ + for (i = 1; i < s->num_extents; i++) { +- if (bdi->needs_compressed_writes != s->extents[i].compressed || +- (bdi->cluster_size && bdi->cluster_size != +- s->extents[i].cluster_sectors << BDRV_SECTOR_BITS)) { ++ if (!vmdk_extents_type_eq(&s->extents[0], &s->extents[i])) { + return -ENOTSUP; + } + } ++ bdi->needs_compressed_writes = s->extents[0].compressed; ++ if (!s->extents[0].flat) { ++ bdi->cluster_size = s->extents[0].cluster_sectors << BDRV_SECTOR_BITS; ++ } + return 0; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Make-VMDK3Header-and-VmdkGrainMarker-QEMU_PACKE.patch b/SOURCES/kvm-vmdk-Make-VMDK3Header-and-VmdkGrainMarker-QEMU_PACKE.patch new file mode 100644 index 0000000..b540436 --- /dev/null +++ b/SOURCES/kvm-vmdk-Make-VMDK3Header-and-VmdkGrainMarker-QEMU_PACKE.patch @@ -0,0 +1,50 @@ +From 48eeebecb8133d687cd86f33e1b9cee71baa2d35 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:47 +0800 +Subject: [PATCH 01/13] vmdk: Make VMDK3Header and VmdkGrainMarker QEMU_PACKED + +Message-id: <1377573001-27070-2-git-send-email-famz@redhat.com> +Patchwork-id: 53781 +O-Subject: [RHEL-7 qemu-kvm PATCH 01/13] vmdk: Make VMDK3Header and + VmdkGrainMarker QEMU_PACKED +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +It's best to make it consistent that all on disk structures are +QEMU_PACKED. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 5d8caa543c9714bee36b04899797a3721dff4090) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index f0c1f93..e85f4ea 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -62,7 +62,7 @@ typedef struct { + uint32_t cylinders; + uint32_t heads; + uint32_t sectors_per_track; +-} VMDK3Header; ++} QEMU_PACKED VMDK3Header; + + typedef struct { + uint32_t version; +@@ -131,7 +131,7 @@ typedef struct VmdkGrainMarker { + uint64_t lba; + uint32_t size; + uint8_t data[0]; +-} VmdkGrainMarker; ++} QEMU_PACKED VmdkGrainMarker; + + enum { + MARKER_END_OF_STREAM = 0, +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Move-l1_size-check-into-vmdk_add_extent.patch b/SOURCES/kvm-vmdk-Move-l1_size-check-into-vmdk_add_extent.patch new file mode 100644 index 0000000..d1187b0 --- /dev/null +++ b/SOURCES/kvm-vmdk-Move-l1_size-check-into-vmdk_add_extent.patch @@ -0,0 +1,62 @@ +From 71930418e15b0acb825fbd02dc4f954ccdea6ece Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 19 Aug 2013 18:54:25 +0800 +Subject: [PATCH 10/13] vmdk: Move l1_size check into vmdk_add_extent() + +Message-id: <1377573001-27070-11-git-send-email-famz@redhat.com> +Patchwork-id: 53790 +O-Subject: [RHEL-7 qemu-kvm PATCH 10/13] vmdk: Move l1_size check into + vmdk_add_extent() +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +This header check is common to VMDK3 and VMDK4, so move it into +vmdk_add_extent(). + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit b0651b8c246d0d9e6ad0831b3e34fd756016ad7e) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 73d9907..4388038 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -401,6 +401,14 @@ static int vmdk_add_extent(BlockDriverState *bs, + error_report("invalid granularity, image may be corrupt"); + return -EINVAL; + } ++ if (l1_size > 512 * 1024 * 1024) { ++ /* Although with big capacity and small l1_entry_sectors, we can get a ++ * big l1_size, we don't want unbounded value to allocate the table. ++ * Limit it to 512M, which is 16PB for default cluster and L2 table ++ * size */ ++ error_report("L1 size too big"); ++ return -EFBIG; ++ } + + s->extents = g_realloc(s->extents, + (s->num_extents + 1) * sizeof(VmdkExtent)); +@@ -598,14 +606,6 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + l1_size = (le64_to_cpu(header.capacity) + l1_entry_sectors - 1) + / l1_entry_sectors; +- if (l1_size > 512 * 1024 * 1024) { +- /* although with big capacity and small l1_entry_sectors, we can get a +- * big l1_size, we don't want unbounded value to allocate the table. +- * Limit it to 512M, which is 16PB for default cluster and L2 table +- * size */ +- error_report("L1 size too big"); +- return -EFBIG; +- } + if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) { + l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Only-read-cid-from-image-file-when-opening.patch b/SOURCES/kvm-vmdk-Only-read-cid-from-image-file-when-opening.patch new file mode 100644 index 0000000..7f0fb76 --- /dev/null +++ b/SOURCES/kvm-vmdk-Only-read-cid-from-image-file-when-opening.patch @@ -0,0 +1,84 @@ +From 5bd906f28072f5d071705801cc1dd2e9084057bc Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:43 +0100 +Subject: [PATCH 86/87] vmdk: Only read cid from image file when opening + +RH-Author: Max Reitz +Message-id: <1383756824-6921-21-git-send-email-mreitz@redhat.com> +Patchwork-id: 55575 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 20/21] vmdk: Only read cid from image file when opening +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +Previously cid of parent is parsed from image file for every IO request. +We already have L1/L2 cache and don't have assumption that parent image +can be updated behind us, so remove this to get more efficiency. + +The parent CID is checked only for once after opening. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c338b6ad609699cf352c8dd6338360b7e3895ad0) + +Signed-off-by: Max Reitz +--- + block/vmdk.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 8 +++----- + 1 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index ccbb0c9..8bef9f2 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -112,6 +112,7 @@ typedef struct BDRVVmdkState { + CoMutex lock; + uint64_t desc_offset; + bool cid_updated; ++ bool cid_checked; + uint32_t parent_cid; + int num_extents; + /* Extent array with num_extents entries, ascend ordered by address */ +@@ -197,8 +198,6 @@ static int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename) + } + } + +-#define CHECK_CID 1 +- + #define SECTOR_SIZE 512 + #define DESC_SIZE (20 * SECTOR_SIZE) /* 20 sectors of 512 bytes each */ + #define BUF_SIZE 4096 +@@ -301,19 +300,18 @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid) + + static int vmdk_is_cid_valid(BlockDriverState *bs) + { +-#ifdef CHECK_CID + BDRVVmdkState *s = bs->opaque; + BlockDriverState *p_bs = bs->backing_hd; + uint32_t cur_pcid; + +- if (p_bs) { ++ if (!s->cid_checked && p_bs) { + cur_pcid = vmdk_read_cid(p_bs, 0); + if (s->parent_cid != cur_pcid) { + /* CID not valid */ + return 0; + } + } +-#endif ++ s->cid_checked = true; + /* CID valid */ + return 1; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-Optimize-cluster-allocation.patch b/SOURCES/kvm-vmdk-Optimize-cluster-allocation.patch new file mode 100644 index 0000000..2a201ed --- /dev/null +++ b/SOURCES/kvm-vmdk-Optimize-cluster-allocation.patch @@ -0,0 +1,475 @@ +From 5f9e1e7be5043bce75d940db098b497d3dd78813 Mon Sep 17 00:00:00 2001 +Message-Id: <5f9e1e7be5043bce75d940db098b497d3dd78813.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:19 -0600 +Subject: [CHANGE 25/31] vmdk: Optimize cluster allocation +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-26-git-send-email-famz@redhat.com> +Patchwork-id: 62698 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 25/30] vmdk: Optimize cluster allocation +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +This drops the unnecessary bdrv_truncate() from, and also improves, +cluster allocation code path. + +Before, when we need a new cluster, get_cluster_offset truncates the +image to bdrv_getlength() + cluster_size, and returns the offset of +added area, i.e. the image length before truncating. + +This is not efficient, so it's now rewritten as: + + - Save the extent file length when opening. + + - When allocating cluster, use the saved length as cluster offset. + + - Don't truncate image, because we'll anyway write data there: just + write any data at the EOF position, in descending priority: + + * New user data (cluster allocation happens in a write request). + + * Filling data in the beginning and/or ending of the new cluster, if + not covered by user data: either backing file content (COW), or + zero for standalone images. + +One major benifit of this change is, on host mounted NFS images, even +over a fast network, ftruncate is slow (see the example below). This +change significantly speeds up cluster allocation. Comparing by +converting a cirros image (296M) to VMDK on an NFS mount point, over +1Gbe LAN: + + $ time qemu-img convert cirros-0.3.1.img /mnt/a.raw -O vmdk + + Before: + real 0m21.796s + user 0m0.130s + sys 0m0.483s + + After: + real 0m2.017s + user 0m0.047s + sys 0m0.190s + +We also get rid of unchecked bdrv_getlength() and bdrv_truncate(), and +get a little more documentation in function comments. + +Tested that this passes qemu-iotests for all VMDK subformats. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c6ac36e14569794b3f3e66f796dea19bc0f0b8d3) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 222 +++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 140 insertions(+), 82 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index a625e7a..70b616a 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -106,6 +106,7 @@ typedef struct VmdkExtent { + uint32_t l2_cache_counts[L2_CACHE_SIZE]; + + int64_t cluster_sectors; ++ int64_t next_cluster_sector; + char *type; + } VmdkExtent; + +@@ -124,7 +125,6 @@ typedef struct BDRVVmdkState { + } BDRVVmdkState; + + typedef struct VmdkMetaData { +- uint32_t offset; + unsigned int l1_index; + unsigned int l2_index; + unsigned int l2_offset; +@@ -397,6 +397,7 @@ static int vmdk_add_extent(BlockDriverState *bs, + { + VmdkExtent *extent; + BDRVVmdkState *s = bs->opaque; ++ int64_t length; + + if (cluster_sectors > 0x200000) { + /* 0x200000 * 512Bytes = 1GB for one cluster is unrealistic */ +@@ -412,6 +413,11 @@ static int vmdk_add_extent(BlockDriverState *bs, + return -EFBIG; + } + ++ length = bdrv_getlength(file); ++ if (length < 0) { ++ return length; ++ } ++ + s->extents = g_realloc(s->extents, + (s->num_extents + 1) * sizeof(VmdkExtent)); + extent = &s->extents[s->num_extents]; +@@ -427,6 +433,8 @@ static int vmdk_add_extent(BlockDriverState *bs, + extent->l1_entry_sectors = l2_size * cluster_sectors; + extent->l2_size = l2_size; + extent->cluster_sectors = flat ? sectors : cluster_sectors; ++ extent->next_cluster_sector = ++ ROUND_UP(DIV_ROUND_UP(length, BDRV_SECTOR_SIZE), cluster_sectors); + + if (s->num_extents > 1) { + extent->end_sector = (*(extent - 1)).end_sector + extent->sectors; +@@ -953,57 +961,97 @@ static int vmdk_refresh_limits(BlockDriverState *bs) + return 0; + } + ++/** ++ * get_whole_cluster ++ * ++ * Copy backing file's cluster that covers @sector_num, otherwise write zero, ++ * to the cluster at @cluster_sector_num. ++ * ++ * If @skip_start_sector < @skip_end_sector, the relative range ++ * [@skip_start_sector, @skip_end_sector) is not copied or written, and leave ++ * it for call to write user data in the request. ++ */ + static int get_whole_cluster(BlockDriverState *bs, +- VmdkExtent *extent, +- uint64_t cluster_offset, +- uint64_t offset, +- bool allocate) ++ VmdkExtent *extent, ++ uint64_t cluster_sector_num, ++ uint64_t sector_num, ++ uint64_t skip_start_sector, ++ uint64_t skip_end_sector) + { + int ret = VMDK_OK; +- uint8_t *whole_grain = NULL; ++ int64_t cluster_bytes; ++ uint8_t *whole_grain; + ++ /* For COW, align request sector_num to cluster start */ ++ sector_num = QEMU_ALIGN_DOWN(sector_num, extent->cluster_sectors); ++ cluster_bytes = extent->cluster_sectors << BDRV_SECTOR_BITS; ++ whole_grain = qemu_blockalign(bs, cluster_bytes); ++ ++ if (!bs->backing_hd) { ++ memset(whole_grain, 0, skip_start_sector << BDRV_SECTOR_BITS); ++ memset(whole_grain + (skip_end_sector << BDRV_SECTOR_BITS), 0, ++ cluster_bytes - (skip_end_sector << BDRV_SECTOR_BITS)); ++ } ++ ++ assert(skip_end_sector <= extent->cluster_sectors); + /* we will be here if it's first write on non-exist grain(cluster). + * try to read from parent image, if exist */ +- if (bs->backing_hd) { +- whole_grain = +- qemu_blockalign(bs, extent->cluster_sectors << BDRV_SECTOR_BITS); +- if (!vmdk_is_cid_valid(bs)) { +- ret = VMDK_ERROR; +- goto exit; +- } ++ if (bs->backing_hd && !vmdk_is_cid_valid(bs)) { ++ ret = VMDK_ERROR; ++ goto exit; ++ } + +- /* floor offset to cluster */ +- offset -= offset % (extent->cluster_sectors * 512); +- ret = bdrv_read(bs->backing_hd, offset >> 9, whole_grain, +- extent->cluster_sectors); ++ /* Read backing data before skip range */ ++ if (skip_start_sector > 0) { ++ if (bs->backing_hd) { ++ ret = bdrv_read(bs->backing_hd, sector_num, ++ whole_grain, skip_start_sector); ++ if (ret < 0) { ++ ret = VMDK_ERROR; ++ goto exit; ++ } ++ } ++ ret = bdrv_write(extent->file, cluster_sector_num, whole_grain, ++ skip_start_sector); + if (ret < 0) { + ret = VMDK_ERROR; + goto exit; + } +- +- /* Write grain only into the active image */ +- ret = bdrv_write(extent->file, cluster_offset, whole_grain, +- extent->cluster_sectors); ++ } ++ /* Read backing data after skip range */ ++ if (skip_end_sector < extent->cluster_sectors) { ++ if (bs->backing_hd) { ++ ret = bdrv_read(bs->backing_hd, sector_num + skip_end_sector, ++ whole_grain + (skip_end_sector << BDRV_SECTOR_BITS), ++ extent->cluster_sectors - skip_end_sector); ++ if (ret < 0) { ++ ret = VMDK_ERROR; ++ goto exit; ++ } ++ } ++ ret = bdrv_write(extent->file, cluster_sector_num + skip_end_sector, ++ whole_grain + (skip_end_sector << BDRV_SECTOR_BITS), ++ extent->cluster_sectors - skip_end_sector); + if (ret < 0) { + ret = VMDK_ERROR; + goto exit; + } + } ++ + exit: + qemu_vfree(whole_grain); + return ret; + } + +-static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data) ++static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data, ++ uint32_t offset) + { +- uint32_t offset; +- QEMU_BUILD_BUG_ON(sizeof(offset) != sizeof(m_data->offset)); +- offset = cpu_to_le32(m_data->offset); ++ offset = cpu_to_le32(offset); + /* update L2 table */ + if (bdrv_pwrite_sync( + extent->file, + ((int64_t)m_data->l2_offset * 512) +- + (m_data->l2_index * sizeof(m_data->offset)), ++ + (m_data->l2_index * sizeof(offset)), + &offset, sizeof(offset)) < 0) { + return VMDK_ERROR; + } +@@ -1013,7 +1061,7 @@ static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data) + if (bdrv_pwrite_sync( + extent->file, + ((int64_t)m_data->l2_offset * 512) +- + (m_data->l2_index * sizeof(m_data->offset)), ++ + (m_data->l2_index * sizeof(offset)), + &offset, sizeof(offset)) < 0) { + return VMDK_ERROR; + } +@@ -1025,17 +1073,41 @@ static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data) + return VMDK_OK; + } + ++/** ++ * get_cluster_offset ++ * ++ * Look up cluster offset in extent file by sector number, and store in ++ * @cluster_offset. ++ * ++ * For flat extents, the start offset as parsed from the description file is ++ * returned. ++ * ++ * For sparse extents, look up in L1, L2 table. If allocate is true, return an ++ * offset for a new cluster and update L2 cache. If there is a backing file, ++ * COW is done before returning; otherwise, zeroes are written to the allocated ++ * cluster. Both COW and zero writing skips the sector range ++ * [@skip_start_sector, @skip_end_sector) passed in by caller, because caller ++ * has new data to write there. ++ * ++ * Returns: VMDK_OK if cluster exists and mapped in the image. ++ * VMDK_UNALLOC if cluster is not mapped and @allocate is false. ++ * VMDK_ERROR if failed. ++ */ + static int get_cluster_offset(BlockDriverState *bs, +- VmdkExtent *extent, +- VmdkMetaData *m_data, +- uint64_t offset, +- int allocate, +- uint64_t *cluster_offset) ++ VmdkExtent *extent, ++ VmdkMetaData *m_data, ++ uint64_t offset, ++ bool allocate, ++ uint64_t *cluster_offset, ++ uint64_t skip_start_sector, ++ uint64_t skip_end_sector) + { + unsigned int l1_index, l2_offset, l2_index; + int min_index, i, j; + uint32_t min_count, *l2_table; + bool zeroed = false; ++ int64_t ret; ++ int32_t cluster_sector; + + if (m_data) { + m_data->valid = 0; +@@ -1089,52 +1161,41 @@ static int get_cluster_offset(BlockDriverState *bs, + extent->l2_cache_counts[min_index] = 1; + found: + l2_index = ((offset >> 9) / extent->cluster_sectors) % extent->l2_size; +- *cluster_offset = le32_to_cpu(l2_table[l2_index]); ++ cluster_sector = le32_to_cpu(l2_table[l2_index]); + + if (m_data) { + m_data->valid = 1; + m_data->l1_index = l1_index; + m_data->l2_index = l2_index; +- m_data->offset = *cluster_offset; + m_data->l2_offset = l2_offset; + m_data->l2_cache_entry = &l2_table[l2_index]; + } +- if (extent->has_zero_grain && *cluster_offset == VMDK_GTE_ZEROED) { ++ if (extent->has_zero_grain && cluster_sector == VMDK_GTE_ZEROED) { + zeroed = true; + } + +- if (!*cluster_offset || zeroed) { ++ if (!cluster_sector || zeroed) { + if (!allocate) { + return zeroed ? VMDK_ZEROED : VMDK_UNALLOC; + } + +- /* Avoid the L2 tables update for the images that have snapshots. */ +- *cluster_offset = bdrv_getlength(extent->file); +- if (!extent->compressed) { +- bdrv_truncate( +- extent->file, +- *cluster_offset + (extent->cluster_sectors << 9) +- ); +- } +- +- *cluster_offset >>= 9; +- l2_table[l2_index] = cpu_to_le32(*cluster_offset); ++ cluster_sector = extent->next_cluster_sector; ++ extent->next_cluster_sector += extent->cluster_sectors; + + /* First of all we write grain itself, to avoid race condition + * that may to corrupt the image. + * This problem may occur because of insufficient space on host disk + * or inappropriate VM shutdown. + */ +- if (get_whole_cluster( +- bs, extent, *cluster_offset, offset, allocate) == -1) { +- return VMDK_ERROR; +- } +- +- if (m_data) { +- m_data->offset = *cluster_offset; ++ ret = get_whole_cluster(bs, extent, ++ cluster_sector, ++ offset >> BDRV_SECTOR_BITS, ++ skip_start_sector, skip_end_sector); ++ if (ret) { ++ return ret; + } + } +- *cluster_offset <<= 9; ++ *cluster_offset = cluster_sector << BDRV_SECTOR_BITS; + return VMDK_OK; + } + +@@ -1169,7 +1230,8 @@ static int64_t coroutine_fn vmdk_co_get_block_status(BlockDriverState *bs, + } + qemu_co_mutex_lock(&s->lock); + ret = get_cluster_offset(bs, extent, NULL, +- sector_num * 512, 0, &offset); ++ sector_num * 512, false, &offset, ++ 0, 0); + qemu_co_mutex_unlock(&s->lock); + + switch (ret) { +@@ -1322,9 +1384,9 @@ static int vmdk_read(BlockDriverState *bs, int64_t sector_num, + if (!extent) { + return -EIO; + } +- ret = get_cluster_offset( +- bs, extent, NULL, +- sector_num << 9, 0, &cluster_offset); ++ ret = get_cluster_offset(bs, extent, NULL, ++ sector_num << 9, false, &cluster_offset, ++ 0, 0); + extent_begin_sector = extent->end_sector - extent->sectors; + extent_relative_sector_num = sector_num - extent_begin_sector; + index_in_cluster = extent_relative_sector_num % extent->cluster_sectors; +@@ -1405,12 +1467,17 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + if (!extent) { + return -EIO; + } +- ret = get_cluster_offset( +- bs, +- extent, +- &m_data, +- sector_num << 9, !extent->compressed, +- &cluster_offset); ++ extent_begin_sector = extent->end_sector - extent->sectors; ++ extent_relative_sector_num = sector_num - extent_begin_sector; ++ index_in_cluster = extent_relative_sector_num % extent->cluster_sectors; ++ n = extent->cluster_sectors - index_in_cluster; ++ if (n > nb_sectors) { ++ n = nb_sectors; ++ } ++ ret = get_cluster_offset(bs, extent, &m_data, sector_num << 9, ++ !(extent->compressed || zeroed), ++ &cluster_offset, ++ index_in_cluster, index_in_cluster + n); + if (extent->compressed) { + if (ret == VMDK_OK) { + /* Refuse write to allocated cluster for streamOptimized */ +@@ -1419,24 +1486,13 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + return -EIO; + } else { + /* allocate */ +- ret = get_cluster_offset( +- bs, +- extent, +- &m_data, +- sector_num << 9, 1, +- &cluster_offset); ++ ret = get_cluster_offset(bs, extent, &m_data, sector_num << 9, ++ true, &cluster_offset, 0, 0); + } + } + if (ret == VMDK_ERROR) { + return -EINVAL; + } +- extent_begin_sector = extent->end_sector - extent->sectors; +- extent_relative_sector_num = sector_num - extent_begin_sector; +- index_in_cluster = extent_relative_sector_num % extent->cluster_sectors; +- n = extent->cluster_sectors - index_in_cluster; +- if (n > nb_sectors) { +- n = nb_sectors; +- } + if (zeroed) { + /* Do zeroed write, buf is ignored */ + if (extent->has_zero_grain && +@@ -1444,9 +1500,9 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + n >= extent->cluster_sectors) { + n = extent->cluster_sectors; + if (!zero_dry_run) { +- m_data.offset = VMDK_GTE_ZEROED; + /* update L2 tables */ +- if (vmdk_L2update(extent, &m_data) != VMDK_OK) { ++ if (vmdk_L2update(extent, &m_data, VMDK_GTE_ZEROED) ++ != VMDK_OK) { + return -EIO; + } + } +@@ -1462,7 +1518,9 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + } + if (m_data.valid) { + /* update L2 tables */ +- if (vmdk_L2update(extent, &m_data) != VMDK_OK) { ++ if (vmdk_L2update(extent, &m_data, ++ cluster_offset >> BDRV_SECTOR_BITS) ++ != VMDK_OK) { + return -EIO; + } + } +@@ -2020,7 +2078,7 @@ static int vmdk_check(BlockDriverState *bs, BdrvCheckResult *result, + } + ret = get_cluster_offset(bs, extent, NULL, + sector_num << BDRV_SECTOR_BITS, +- 0, &cluster_offset); ++ false, &cluster_offset, 0, 0); + if (ret == VMDK_ERROR) { + fprintf(stderr, + "ERROR: could not get cluster_offset for sector %" +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Remove-unnecessary-initialization.patch b/SOURCES/kvm-vmdk-Remove-unnecessary-initialization.patch new file mode 100644 index 0000000..2d5267e --- /dev/null +++ b/SOURCES/kvm-vmdk-Remove-unnecessary-initialization.patch @@ -0,0 +1,49 @@ +From aea042fc3e0a8454edb4e9884635af63128b15d3 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:19 +0100 +Subject: [PATCH 06/18] vmdk: Remove unnecessary initialization + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-7-git-send-email-famz@redhat.com> +Patchwork-id: 69172 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 06/18] vmdk: Remove unnecessary initialization +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +It will be assigned to the return value of vmdk_read_desc. + +Suggested-by: Markus Armbruster +Signed-off-by: Fam Zheng +Reviewed-by: Markus Armbruster +Reviewed-by: Don Koch +Reviewed-by: Max Reitz +Message-id: 1417649314-13704-6-git-send-email-famz@redhat.com +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 9aeecbbc62ce52a94b2621a0d53567b5d4ed915d) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index db3cdc0..69d8a6e 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -916,7 +916,7 @@ exit: + static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { +- char *buf = NULL; ++ char *buf; + int ret; + BDRVVmdkState *s = bs->opaque; + uint32_t magic; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Set-errp-on-failures-in-vmdk_open_vmdk4.patch b/SOURCES/kvm-vmdk-Set-errp-on-failures-in-vmdk_open_vmdk4.patch new file mode 100644 index 0000000..af942ef --- /dev/null +++ b/SOURCES/kvm-vmdk-Set-errp-on-failures-in-vmdk_open_vmdk4.patch @@ -0,0 +1,62 @@ +From 005308f5b469f749980310be141315e8bd46556f Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:20 +0100 +Subject: [PATCH 07/18] vmdk: Set errp on failures in vmdk_open_vmdk4 + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-8-git-send-email-famz@redhat.com> +Patchwork-id: 69173 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 07/18] vmdk: Set errp on failures in vmdk_open_vmdk4 +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Reported-by: Markus Armbruster +Signed-off-by: Fam Zheng +Reviewed-by: Markus Armbruster +Reviewed-by: Don Koch +Reviewed-by: Max Reitz +Message-id: 1417649314-13704-7-git-send-email-famz@redhat.com +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit d899d2e248b900c53dd9081bde9f110e05747433) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 69d8a6e..1247ea4 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -647,6 +647,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + bs->file->total_sectors * 512 - 1536, + &footer, sizeof(footer)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, "Failed to read footer"); + return ret; + } + +@@ -658,6 +659,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + le32_to_cpu(footer.eos_marker.size) != 0 || + le32_to_cpu(footer.eos_marker.type) != MARKER_END_OF_STREAM) + { ++ error_setg(errp, "Invalid footer"); + return -EINVAL; + } + +@@ -688,6 +690,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gt) + * le64_to_cpu(header.granularity); + if (l1_entry_sectors == 0) { ++ error_setg(errp, "L1 entry size is invalid"); + return -EINVAL; + } + l1_size = (le64_to_cpu(header.capacity) + l1_entry_sectors - 1) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Use-bdrv_nb_sectors-where-sectors-not-bytes-are.patch b/SOURCES/kvm-vmdk-Use-bdrv_nb_sectors-where-sectors-not-bytes-are.patch new file mode 100644 index 0000000..15c7a10 --- /dev/null +++ b/SOURCES/kvm-vmdk-Use-bdrv_nb_sectors-where-sectors-not-bytes-are.patch @@ -0,0 +1,80 @@ +From 1d5ecdd5402c43fc20deefe64ee72172cd645486 Mon Sep 17 00:00:00 2001 +Message-Id: <1d5ecdd5402c43fc20deefe64ee72172cd645486.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:21 -0600 +Subject: [CHANGE 27/31] vmdk: Use bdrv_nb_sectors() where sectors, not bytes + are wanted +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-28-git-send-email-famz@redhat.com> +Patchwork-id: 62700 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 27/30] vmdk: Use bdrv_nb_sectors() where sectors, not bytes are wanted +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Markus Armbruster + +Instead of bdrv_getlength(). + +Commit 57322b7 did this all over block, but one more bdrv_getlength() +has crept in since. + +Signed-off-by: Markus Armbruster +Reviewed-by: Fam Zheng +Reviewed-by: Benoît Canet +Signed-off-by: Kevin Wolf +(cherry picked from commit 0a156f7c750c4e4e1c5dfb2135debcf399e4e2a7) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 560dd43..b9ab89b 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -397,7 +397,7 @@ static int vmdk_add_extent(BlockDriverState *bs, + { + VmdkExtent *extent; + BDRVVmdkState *s = bs->opaque; +- int64_t length; ++ int64_t nb_sectors; + + if (cluster_sectors > 0x200000) { + /* 0x200000 * 512Bytes = 1GB for one cluster is unrealistic */ +@@ -413,9 +413,9 @@ static int vmdk_add_extent(BlockDriverState *bs, + return -EFBIG; + } + +- length = bdrv_getlength(file); +- if (length < 0) { +- return length; ++ nb_sectors = bdrv_nb_sectors(file); ++ if (nb_sectors < 0) { ++ return nb_sectors; + } + + s->extents = g_realloc(s->extents, +@@ -433,8 +433,7 @@ static int vmdk_add_extent(BlockDriverState *bs, + extent->l1_entry_sectors = l2_size * cluster_sectors; + extent->l2_size = l2_size; + extent->cluster_sectors = flat ? sectors : cluster_sectors; +- extent->next_cluster_sector = +- ROUND_UP(DIV_ROUND_UP(length, BDRV_SECTOR_SIZE), cluster_sectors); ++ extent->next_cluster_sector = ROUND_UP(nb_sectors, cluster_sectors); + + if (s->num_extents > 1) { + extent->end_sector = (*(extent - 1)).end_sector + extent->sectors; +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-Use-g_random_int-to-generate-CID.patch b/SOURCES/kvm-vmdk-Use-g_random_int-to-generate-CID.patch new file mode 100644 index 0000000..0294a48 --- /dev/null +++ b/SOURCES/kvm-vmdk-Use-g_random_int-to-generate-CID.patch @@ -0,0 +1,73 @@ +From bf9dd867ef8d4164685cac6451e88b6c32b190b1 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:15 +0100 +Subject: [PATCH 02/18] vmdk: Use g_random_int to generate CID +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-3-git-send-email-famz@redhat.com> +Patchwork-id: 69168 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 02/18] vmdk: Use g_random_int to generate CID +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +This replaces two "time(NULL)" invocations with "g_random_int()". +According to VMDK spec, CID "is a random 32‐bit value updated the first +time the content of the virtual disk is modified after the virtual disk +is opened". Using "seconds since epoch" is just a "lame way" to generate +it, and not completely safe because of the low precision. + +Suggested-by: Markus Armbruster +Signed-off-by: Fam Zheng +Reviewed-by: Markus Armbruster +Reviewed-by: Don Koch +Reviewed-by: Max Reitz +Message-id: 1417649314-13704-2-git-send-email-famz@redhat.com +Signed-off-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit e5dc64b8ff09cc4c186273e4461c7479739db2ae) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index fa53d2f..a9f5bab 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -28,6 +28,7 @@ + #include "qemu/module.h" + #include "migration/migration.h" + #include ++#include + + #define VMDK3_MAGIC (('C' << 24) | ('O' << 16) | ('W' << 8) | 'D') + #define VMDK4_MAGIC (('K' << 24) | ('D' << 16) | ('M' << 8) | 'V') +@@ -1540,7 +1541,7 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + /* update CID on the first write every time the virtual disk is + * opened */ + if (!s->cid_updated) { +- ret = vmdk_write_cid(bs, time(NULL)); ++ ret = vmdk_write_cid(bs, g_random_int()); + if (ret < 0) { + return ret; + } +@@ -1927,7 +1928,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + } + /* generate descriptor file */ + desc = g_strdup_printf(desc_template, +- (uint32_t)time(NULL), ++ g_random_int(), + parent_cid, + fmt, + parent_desc_line, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Use-vmdk_find_index_in_cluster-everywhere.patch b/SOURCES/kvm-vmdk-Use-vmdk_find_index_in_cluster-everywhere.patch new file mode 100644 index 0000000..69ee291 --- /dev/null +++ b/SOURCES/kvm-vmdk-Use-vmdk_find_index_in_cluster-everywhere.patch @@ -0,0 +1,71 @@ +From f7f34dfdb448a0344210f6bfa77b67c637ffea56 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:27 +0100 +Subject: [PATCH 14/18] vmdk: Use vmdk_find_index_in_cluster everywhere + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-15-git-send-email-famz@redhat.com> +Patchwork-id: 69180 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 14/18] vmdk: Use vmdk_find_index_in_cluster everywhere +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Signed-off-by: Fam Zheng +Reviewed-by: Max Reitz +Signed-off-by: Kevin Wolf +(cherry picked from commit 90df601f06de14f062d2e8dc1bc57f0decf86fd1) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 10c08f3..cb5255c 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1418,7 +1418,6 @@ static int vmdk_read(BlockDriverState *bs, int64_t sector_num, + BDRVVmdkState *s = bs->opaque; + int ret; + uint64_t n, index_in_cluster; +- uint64_t extent_begin_sector, extent_relative_sector_num; + VmdkExtent *extent = NULL; + uint64_t cluster_offset; + +@@ -1430,9 +1429,7 @@ static int vmdk_read(BlockDriverState *bs, int64_t sector_num, + ret = get_cluster_offset(bs, extent, NULL, + sector_num << 9, false, &cluster_offset, + 0, 0); +- extent_begin_sector = extent->end_sector - extent->sectors; +- extent_relative_sector_num = sector_num - extent_begin_sector; +- index_in_cluster = extent_relative_sector_num % extent->cluster_sectors; ++ index_in_cluster = vmdk_find_index_in_cluster(extent, sector_num); + n = extent->cluster_sectors - index_in_cluster; + if (n > nb_sectors) { + n = nb_sectors; +@@ -1494,7 +1491,6 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + VmdkExtent *extent = NULL; + int ret; + int64_t index_in_cluster, n; +- uint64_t extent_begin_sector, extent_relative_sector_num; + uint64_t cluster_offset; + VmdkMetaData m_data; + +@@ -1510,9 +1506,7 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + if (!extent) { + return -EIO; + } +- extent_begin_sector = extent->end_sector - extent->sectors; +- extent_relative_sector_num = sector_num - extent_begin_sector; +- index_in_cluster = extent_relative_sector_num % extent->cluster_sectors; ++ index_in_cluster = vmdk_find_index_in_cluster(extent, sector_num); + n = extent->cluster_sectors - index_in_cluster; + if (n > nb_sectors) { + n = nb_sectors; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-Widen-before-shifting-32-bit-header-field.patch b/SOURCES/kvm-vmdk-Widen-before-shifting-32-bit-header-field.patch new file mode 100644 index 0000000..3042981 --- /dev/null +++ b/SOURCES/kvm-vmdk-Widen-before-shifting-32-bit-header-field.patch @@ -0,0 +1,47 @@ +From 649835536d4bb1366e01ff5600d3005042dd50d5 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 15 Feb 2016 09:28:24 +0100 +Subject: [PATCH 11/18] vmdk: Widen before shifting 32 bit header field + +RH-Author: Fam Zheng +Message-id: <1455528511-9357-12-git-send-email-famz@redhat.com> +Patchwork-id: 69177 +O-Subject: [RHEL-7.3 qemu-kvm PATCH 11/18] vmdk: Widen before shifting 32 bit header field +Bugzilla: 1299250 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Max Reitz +RH-Acked-by: Markus Armbruster + +BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1299250 + +Coverity spotted this. + +The field is 32 bits, but if it's possible to overflow in 32 bit +left shift. + +Signed-off-by: Fam Zheng +Reviewed-by: John Snow +Signed-off-by: Kevin Wolf +(cherry picked from commit 7237aecd7e8fcc3ccf7fded77b6c127b4df5d3ac) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 32b3d4c..3810d75 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -525,7 +525,7 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + } + ret = vmdk_add_extent(bs, file, false, + le32_to_cpu(header.disk_sectors), +- le32_to_cpu(header.l1dir_offset) << 9, ++ (int64_t)le32_to_cpu(header.l1dir_offset) << 9, + 0, + le32_to_cpu(header.l1dir_size), + 4096, +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vmdk-check-granularity-field-in-opening.patch b/SOURCES/kvm-vmdk-check-granularity-field-in-opening.patch new file mode 100644 index 0000000..8193ece --- /dev/null +++ b/SOURCES/kvm-vmdk-check-granularity-field-in-opening.patch @@ -0,0 +1,157 @@ +From c85b3af7587973944c28b859dfefa91c21852971 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:51 +0800 +Subject: [PATCH 05/13] vmdk: check granularity field in opening + +Message-id: <1377573001-27070-6-git-send-email-famz@redhat.com> +Patchwork-id: 53785 +O-Subject: [RHEL-7 qemu-kvm PATCH 05/13] vmdk: check granularity field in opening +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +Granularity is used to calculate the cluster size and allocate r/w +buffer. Check the value from image before using it, so we don't abort() +for unbounded memory allocation. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 8aa1331c09a9b899f48d97f097bb49b7d458be1c) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 40 +++++++++++++++++++++++++++++++--------- + tests/qemu-iotests/059 | 8 +++++++- + tests/qemu-iotests/059.out | 6 ++++++ + 3 files changed, 44 insertions(+), 10 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 78ea480..8f59697 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -385,15 +385,22 @@ static int vmdk_parent_open(BlockDriverState *bs) + + /* Create and append extent to the extent array. Return the added VmdkExtent + * address. return NULL if allocation failed. */ +-static VmdkExtent *vmdk_add_extent(BlockDriverState *bs, ++static int vmdk_add_extent(BlockDriverState *bs, + BlockDriverState *file, bool flat, int64_t sectors, + int64_t l1_offset, int64_t l1_backup_offset, + uint32_t l1_size, +- int l2_size, unsigned int cluster_sectors) ++ int l2_size, uint64_t cluster_sectors, ++ VmdkExtent **new_extent) + { + VmdkExtent *extent; + BDRVVmdkState *s = bs->opaque; + ++ if (cluster_sectors > 0x200000) { ++ /* 0x200000 * 512Bytes = 1GB for one cluster is unrealistic */ ++ error_report("invalid granularity, image may be corrupt"); ++ return -EINVAL; ++ } ++ + s->extents = g_realloc(s->extents, + (s->num_extents + 1) * sizeof(VmdkExtent)); + extent = &s->extents[s->num_extents]; +@@ -416,7 +423,10 @@ static VmdkExtent *vmdk_add_extent(BlockDriverState *bs, + extent->end_sector = extent->sectors; + } + bs->total_sectors = extent->end_sector; +- return extent; ++ if (new_extent) { ++ *new_extent = extent; ++ } ++ return 0; + } + + static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent) +@@ -475,12 +485,17 @@ static int vmdk_open_vmdk3(BlockDriverState *bs, + if (ret < 0) { + return ret; + } +- extent = vmdk_add_extent(bs, ++ ++ ret = vmdk_add_extent(bs, + bs->file, false, + le32_to_cpu(header.disk_sectors), + le32_to_cpu(header.l1dir_offset) << 9, + 0, 1 << 6, 1 << 9, +- le32_to_cpu(header.granularity)); ++ le32_to_cpu(header.granularity), ++ &extent); ++ if (ret < 0) { ++ return ret; ++ } + ret = vmdk_init_tables(bs, extent); + if (ret) { + /* free extent allocated by vmdk_add_extent */ +@@ -580,13 +595,17 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) { + l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9; + } +- extent = vmdk_add_extent(bs, file, false, ++ ret = vmdk_add_extent(bs, file, false, + le64_to_cpu(header.capacity), + le64_to_cpu(header.gd_offset) << 9, + l1_backup_offset, + l1_size, + le32_to_cpu(header.num_gtes_per_gte), +- le64_to_cpu(header.granularity)); ++ le64_to_cpu(header.granularity), ++ &extent); ++ if (ret < 0) { ++ return ret; ++ } + extent->compressed = + le16_to_cpu(header.compressAlgorithm) == VMDK4_COMPRESSION_DEFLATE; + extent->has_marker = le32_to_cpu(header.flags) & VMDK4_FLAG_MARKER; +@@ -702,8 +721,11 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + /* FLAT extent */ + VmdkExtent *extent; + +- extent = vmdk_add_extent(bs, extent_file, true, sectors, +- 0, 0, 0, 0, sectors); ++ ret = vmdk_add_extent(bs, extent_file, true, sectors, ++ 0, 0, 0, 0, sectors, &extent); ++ if (ret < 0) { ++ return ret; ++ } + extent->flat_start_offset = flat_offset << 9; + } else if (!strcmp(type, "SPARSE")) { + /* SPARSE extent */ +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 9dc7f64..9545e82 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -43,7 +43,13 @@ _supported_fmt vmdk + _supported_proto generic + _supported_os Linux + +-granularity_offset=16 ++granularity_offset=20 ++ ++echo "=== Testing invalid granularity ===" ++echo ++_make_test_img 64M ++poke_file "$TEST_IMG" "$granularity_offset" "\xff\xff\xff\xff\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + + # success, all done + echo "*** done" +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 4ca7f29..380ca3d 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -1,2 +1,8 @@ + QA output created by 059 ++=== Testing invalid granularity === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++invalid granularity, image may be corrupt ++qemu-io: can't open device TEST_DIR/t.vmdk ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-check-l1-size-before-opening-image.patch b/SOURCES/kvm-vmdk-check-l1-size-before-opening-image.patch new file mode 100644 index 0000000..cdbff84 --- /dev/null +++ b/SOURCES/kvm-vmdk-check-l1-size-before-opening-image.patch @@ -0,0 +1,90 @@ +From e00b646f642f10be545014c866a71b268d90e67a Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:53 +0800 +Subject: [PATCH 07/13] vmdk: check l1 size before opening image + +Message-id: <1377573001-27070-8-git-send-email-famz@redhat.com> +Patchwork-id: 53786 +O-Subject: [RHEL-7 qemu-kvm PATCH 07/13] vmdk: check l1 size before opening image +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +L1 table size is calculated from capacity, granularity and l2 table +size. If capacity is too big or later two are too small, the L1 table +will be too big to allocate in memory. Limit it to a reasonable range. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 2c43e43c8cec130fff95ef720a860e91efb36685) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 8 ++++++++ + tests/qemu-iotests/059 | 8 ++++++++ + tests/qemu-iotests/059.out | 6 ++++++ + 3 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index b2a3fe2..58163ef 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -597,6 +597,14 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + l1_size = (le64_to_cpu(header.capacity) + l1_entry_sectors - 1) + / l1_entry_sectors; ++ if (l1_size > 512 * 1024 * 1024) { ++ /* although with big capacity and small l1_entry_sectors, we can get a ++ * big l1_size, we don't want unbounded value to allocate the table. ++ * Limit it to 512M, which is 16PB for default cluster and L2 table ++ * size */ ++ error_report("L1 size too big"); ++ return -EFBIG; ++ } + if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) { + l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9; + } +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 301eaca..b03429d 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -43,6 +43,7 @@ _supported_fmt vmdk + _supported_proto generic + _supported_os Linux + ++capacity_offset=16 + granularity_offset=20 + grain_table_size_offset=44 + +@@ -58,6 +59,13 @@ _make_test_img 64M + poke_file "$TEST_IMG" "$grain_table_size_offset" "\xff\xff\xff\xff" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo "=== Testing too big L1 table size ===" ++echo ++_make_test_img 64M ++poke_file "$TEST_IMG" "$capacity_offset" "\xff\xff\xff\xff" ++poke_file "$TEST_IMG" "$grain_table_size_offset" "\x01\x00\x00\x00" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 583955f..9e715e5 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -11,4 +11,10 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + L2 table size too big + qemu-io: can't open device TEST_DIR/t.vmdk + no file open, try 'help open' ++=== Testing too big L1 table size === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++L1 size too big ++qemu-io: can't open device TEST_DIR/t.vmdk ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-check-l2-table-size-when-opening.patch b/SOURCES/kvm-vmdk-check-l2-table-size-when-opening.patch new file mode 100644 index 0000000..62a4f8b --- /dev/null +++ b/SOURCES/kvm-vmdk-check-l2-table-size-when-opening.patch @@ -0,0 +1,85 @@ +From 6442a27eaebb5a42ef26a73f0efcf0166f70b235 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:52 +0800 +Subject: [PATCH 06/13] vmdk: check l2 table size when opening + +Message-id: <1377573001-27070-7-git-send-email-famz@redhat.com> +Patchwork-id: 53787 +O-Subject: [RHEL-7 qemu-kvm PATCH 06/13] vmdk: check l2 table size when opening +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +header.num_gtes_per_gte determines size for L2 table. Check for too big +value before using it. Limit to 512M entries (2GB per one L2 table). + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit f8ce04036e333aae480b1d06d969f6436652633d) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 5 +++++ + tests/qemu-iotests/059 | 7 +++++++ + tests/qemu-iotests/059.out | 6 ++++++ + 3 files changed, 18 insertions(+), 0 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 8f59697..b2a3fe2 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -585,6 +585,11 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + return -ENOTSUP; + } + ++ if (le32_to_cpu(header.num_gtes_per_gte) > 512) { ++ error_report("L2 table size too big"); ++ return -EINVAL; ++ } ++ + l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gte) + * le64_to_cpu(header.granularity); + if (l1_entry_sectors == 0) { +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index 9545e82..301eaca 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -44,6 +44,7 @@ _supported_proto generic + _supported_os Linux + + granularity_offset=20 ++grain_table_size_offset=44 + + echo "=== Testing invalid granularity ===" + echo +@@ -51,6 +52,12 @@ _make_test_img 64M + poke_file "$TEST_IMG" "$granularity_offset" "\xff\xff\xff\xff\xff\xff\xff\xff" + { $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir + ++echo "=== Testing too big L2 table size ===" ++echo ++_make_test_img 64M ++poke_file "$TEST_IMG" "$grain_table_size_offset" "\xff\xff\xff\xff" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 380ca3d..583955f 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -5,4 +5,10 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + invalid granularity, image may be corrupt + qemu-io: can't open device TEST_DIR/t.vmdk + no file open, try 'help open' ++=== Testing too big L2 table size === ++ ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++L2 table size too big ++qemu-io: can't open device TEST_DIR/t.vmdk ++no file open, try 'help open' + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-convert-error-code-to-use-errp.patch b/SOURCES/kvm-vmdk-convert-error-code-to-use-errp.patch new file mode 100644 index 0000000..3100e6f --- /dev/null +++ b/SOURCES/kvm-vmdk-convert-error-code-to-use-errp.patch @@ -0,0 +1,455 @@ +From 57c326f0b2220c9bbe1968f3cc251ae2f99db8ae Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:40 +0100 +Subject: [PATCH 83/87] vmdk: convert error code to use errp + +RH-Author: Max Reitz +Message-id: <1383756824-6921-18-git-send-email-mreitz@redhat.com> +Patchwork-id: 55572 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 17/21] vmdk: convert error code to use errp +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +Convert "fprintf(stderr,..." and standardize error messages: + +Remove a few local_error's and use errp. + +Remove "VMDK:" or "Vmdk:" prefixes in error message and fix to upper +case. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 4823970bcb882cd5b7e9c9a21fa6573190035050) + +Signed-off-by: Max Reitz + +Conflicts: + block/vmdk.c + +Conflicts because the series "Implement reference count for +BlockDriverState" has not yet been backported which "replaces" +bdrv_delete by bdrv_unref. +--- + block/vmdk.c | 116 ++++++++++++++++++++++++--------------------- + tests/qemu-iotests/059.out | 6 +-- + 2 files changed, 63 insertions(+), 59 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 116 +++++++++++++++++++++++--------------------- + tests/qemu-iotests/059.out | 6 +-- + 2 files changed, 63 insertions(+), 59 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index bd1dd62..96f9415 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -331,8 +331,7 @@ static int vmdk_reopen_prepare(BDRVReopenState *state, + assert(state->bs != NULL); + + if (queue == NULL) { +- error_set(errp, ERROR_CLASS_GENERIC_ERROR, +- "No reopen queue for VMDK extents"); ++ error_setg(errp, "No reopen queue for VMDK extents"); + goto exit; + } + +@@ -391,22 +390,23 @@ static int vmdk_add_extent(BlockDriverState *bs, + int64_t l1_offset, int64_t l1_backup_offset, + uint32_t l1_size, + int l2_size, uint64_t cluster_sectors, +- VmdkExtent **new_extent) ++ VmdkExtent **new_extent, ++ Error **errp) + { + VmdkExtent *extent; + BDRVVmdkState *s = bs->opaque; + + if (cluster_sectors > 0x200000) { + /* 0x200000 * 512Bytes = 1GB for one cluster is unrealistic */ +- error_report("invalid granularity, image may be corrupt"); +- return -EINVAL; ++ error_setg(errp, "Invalid granularity, image may be corrupt"); ++ return -EFBIG; + } + if (l1_size > 512 * 1024 * 1024) { + /* Although with big capacity and small l1_entry_sectors, we can get a + * big l1_size, we don't want unbounded value to allocate the table. + * Limit it to 512M, which is 16PB for default cluster and L2 table + * size */ +- error_report("L1 size too big"); ++ error_setg(errp, "L1 size too big"); + return -EFBIG; + } + +@@ -438,7 +438,8 @@ static int vmdk_add_extent(BlockDriverState *bs, + return 0; + } + +-static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent) ++static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent, ++ Error **errp) + { + int ret; + int l1_size, i; +@@ -447,10 +448,13 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent) + l1_size = extent->l1_size * sizeof(uint32_t); + extent->l1_table = g_malloc(l1_size); + ret = bdrv_pread(extent->file, +- extent->l1_table_offset, +- extent->l1_table, +- l1_size); ++ extent->l1_table_offset, ++ extent->l1_table, ++ l1_size); + if (ret < 0) { ++ error_setg_errno(errp, -ret, ++ "Could not read l1 table from extent '%s'", ++ extent->file->filename); + goto fail_l1; + } + for (i = 0; i < extent->l1_size; i++) { +@@ -460,10 +464,13 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent) + if (extent->l1_backup_table_offset) { + extent->l1_backup_table = g_malloc(l1_size); + ret = bdrv_pread(extent->file, +- extent->l1_backup_table_offset, +- extent->l1_backup_table, +- l1_size); ++ extent->l1_backup_table_offset, ++ extent->l1_backup_table, ++ l1_size); + if (ret < 0) { ++ error_setg_errno(errp, -ret, ++ "Could not read l1 backup table from extent '%s'", ++ extent->file->filename); + goto fail_l1b; + } + for (i = 0; i < extent->l1_size; i++) { +@@ -483,7 +490,7 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent) + + static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + BlockDriverState *file, +- int flags) ++ int flags, Error **errp) + { + int ret; + uint32_t magic; +@@ -492,6 +499,9 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + + ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header)); + if (ret < 0) { ++ error_setg_errno(errp, -ret, ++ "Could not read header from file '%s'", ++ file->filename); + return ret; + } + ret = vmdk_add_extent(bs, file, false, +@@ -501,11 +511,12 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + le32_to_cpu(header.l1dir_size), + 4096, + le32_to_cpu(header.granularity), +- &extent); ++ &extent, ++ errp); + if (ret < 0) { + return ret; + } +- ret = vmdk_init_tables(bs, extent); ++ ret = vmdk_init_tables(bs, extent, errp); + if (ret) { + /* free extent allocated by vmdk_add_extent */ + vmdk_free_last_extent(bs); +@@ -514,11 +525,11 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + } + + static int vmdk_open_desc_file(BlockDriverState *bs, int flags, +- uint64_t desc_offset); ++ uint64_t desc_offset, Error **errp); + + static int vmdk_open_vmdk4(BlockDriverState *bs, + BlockDriverState *file, +- int flags) ++ int flags, Error **errp) + { + int ret; + uint32_t magic; +@@ -529,12 +540,14 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + + ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header)); + if (ret < 0) { +- return ret; ++ error_setg_errno(errp, -ret, ++ "Could not read header from file '%s'", ++ file->filename); + } + if (header.capacity == 0) { + uint64_t desc_offset = le64_to_cpu(header.desc_offset); + if (desc_offset) { +- return vmdk_open_desc_file(bs, flags, desc_offset << 9); ++ return vmdk_open_desc_file(bs, flags, desc_offset << 9, errp); + } + } + +@@ -616,7 +629,8 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + l1_size, + le32_to_cpu(header.num_gtes_per_gt), + le64_to_cpu(header.granularity), +- &extent); ++ &extent, ++ errp); + if (ret < 0) { + return ret; + } +@@ -625,7 +639,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + extent->has_marker = le32_to_cpu(header.flags) & VMDK4_FLAG_MARKER; + extent->version = le32_to_cpu(header.version); + extent->has_zero_grain = le32_to_cpu(header.flags) & VMDK4_FLAG_ZERO_GRAIN; +- ret = vmdk_init_tables(bs, extent); ++ ret = vmdk_init_tables(bs, extent, errp); + if (ret) { + /* free extent allocated by vmdk_add_extent */ + vmdk_free_last_extent(bs); +@@ -663,7 +677,7 @@ static int vmdk_parse_description(const char *desc, const char *opt_name, + /* Open an extent file and append to bs array */ + static int vmdk_open_sparse(BlockDriverState *bs, + BlockDriverState *file, +- int flags) ++ int flags, Error **errp) + { + uint32_t magic; + +@@ -674,10 +688,10 @@ static int vmdk_open_sparse(BlockDriverState *bs, + magic = be32_to_cpu(magic); + switch (magic) { + case VMDK3_MAGIC: +- return vmdk_open_vmfs_sparse(bs, file, flags); ++ return vmdk_open_vmfs_sparse(bs, file, flags, errp); + break; + case VMDK4_MAGIC: +- return vmdk_open_vmdk4(bs, file, flags); ++ return vmdk_open_vmdk4(bs, file, flags, errp); + break; + default: + return -EMEDIUMTYPE; +@@ -686,7 +700,7 @@ static int vmdk_open_sparse(BlockDriverState *bs, + } + + static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, +- const char *desc_file_path) ++ const char *desc_file_path, Error **errp) + { + int ret; + char access[11]; +@@ -697,7 +711,6 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + int64_t flat_offset; + char extent_path[PATH_MAX]; + BlockDriverState *extent_file; +- Error *local_err = NULL; + + while (*p) { + /* parse extent line: +@@ -712,9 +725,11 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + goto next_line; + } else if (!strcmp(type, "FLAT")) { + if (ret != 5 || flat_offset < 0) { ++ error_setg(errp, "Invalid extent lines: \n%s", p); + return -EINVAL; + } + } else if (ret != 4) { ++ error_setg(errp, "Invalid extent lines: \n%s", p); + return -EINVAL; + } + +@@ -728,10 +743,8 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + path_combine(extent_path, sizeof(extent_path), + desc_file_path, fname); + ret = bdrv_file_open(&extent_file, extent_path, NULL, bs->open_flags, +- &local_err); ++ errp); + if (ret) { +- qerror_report_err(local_err); +- error_free(local_err); + return ret; + } + +@@ -741,21 +754,20 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + VmdkExtent *extent; + + ret = vmdk_add_extent(bs, extent_file, true, sectors, +- 0, 0, 0, 0, 0, &extent); ++ 0, 0, 0, 0, 0, &extent, errp); + if (ret < 0) { + return ret; + } + extent->flat_start_offset = flat_offset << 9; + } else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) { + /* SPARSE extent and VMFSSPARSE extent are both "COWD" sparse file*/ +- ret = vmdk_open_sparse(bs, extent_file, bs->open_flags); ++ ret = vmdk_open_sparse(bs, extent_file, bs->open_flags, errp); + if (ret) { + bdrv_delete(extent_file); + return ret; + } + } else { +- fprintf(stderr, +- "VMDK: Not supported extent type \"%s\""".\n", type); ++ error_setg(errp, "Unsupported extent type '%s'", type); + return -ENOTSUP; + } + next_line: +@@ -769,7 +781,7 @@ next_line: + } + + static int vmdk_open_desc_file(BlockDriverState *bs, int flags, +- uint64_t desc_offset) ++ uint64_t desc_offset, Error **errp) + { + int ret; + char *buf = NULL; +@@ -798,13 +810,12 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + strcmp(ct, "vmfsSparse") && + strcmp(ct, "twoGbMaxExtentSparse") && + strcmp(ct, "twoGbMaxExtentFlat")) { +- fprintf(stderr, +- "VMDK: Not supported image type \"%s\""".\n", ct); ++ error_setg(errp, "Unsupported image type '%s'", ct); + ret = -ENOTSUP; + goto exit; + } + s->desc_offset = 0; +- ret = vmdk_parse_extents(buf, bs, bs->file->filename); ++ ret = vmdk_parse_extents(buf, bs, bs->file->filename, errp); + exit: + g_free(buf); + return ret; +@@ -816,10 +827,10 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + int ret; + BDRVVmdkState *s = bs->opaque; + +- if (vmdk_open_sparse(bs, bs->file, flags) == 0) { ++ if (vmdk_open_sparse(bs, bs->file, flags, errp) == 0) { + s->desc_offset = 0x200; + } else { +- ret = vmdk_open_desc_file(bs, flags, 0); ++ ret = vmdk_open_desc_file(bs, flags, 0, errp); + if (ret) { + goto fail; + } +@@ -1286,8 +1297,7 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + VmdkMetaData m_data; + + if (sector_num > bs->total_sectors) { +- fprintf(stderr, +- "(VMDK) Wrong offset: sector_num=0x%" PRIx64 ++ error_report("Wrong offset: sector_num=0x%" PRIx64 + " total_sectors=0x%" PRIx64 "\n", + sector_num, bs->total_sectors); + return -EIO; +@@ -1307,9 +1317,8 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num, + if (extent->compressed) { + if (ret == VMDK_OK) { + /* Refuse write to allocated cluster for streamOptimized */ +- fprintf(stderr, +- "VMDK: can't write to allocated cluster" +- " for streamOptimized\n"); ++ error_report("Could not write to allocated cluster" ++ " for streamOptimized"); + return -EIO; + } else { + /* allocate */ +@@ -1517,12 +1526,12 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + } + + static int filename_decompose(const char *filename, char *path, char *prefix, +- char *postfix, size_t buf_len) ++ char *postfix, size_t buf_len, Error **errp) + { + const char *p, *q; + + if (filename == NULL || !strlen(filename)) { +- fprintf(stderr, "Vmdk: no filename provided.\n"); ++ error_setg(errp, "No filename provided"); + return VMDK_ERROR; + } + p = strrchr(filename, '/'); +@@ -1595,9 +1604,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + "ddb.geometry.heads = \"%d\"\n" + "ddb.geometry.sectors = \"63\"\n" + "ddb.adapterType = \"%s\"\n"; +- Error *local_err = NULL; + +- if (filename_decompose(filename, path, prefix, postfix, PATH_MAX)) { ++ if (filename_decompose(filename, path, prefix, postfix, PATH_MAX, errp)) { + return -EINVAL; + } + /* Read out options */ +@@ -1623,7 +1631,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + strcmp(adapter_type, "buslogic") && + strcmp(adapter_type, "lsilogic") && + strcmp(adapter_type, "legacyESX")) { +- fprintf(stderr, "VMDK: Unknown adapter type: '%s'.\n", adapter_type); ++ error_setg(errp, "Unknown adapter type: '%s'", adapter_type); + return -EINVAL; + } + if (strcmp(adapter_type, "ide") != 0) { +@@ -1639,7 +1647,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + strcmp(fmt, "twoGbMaxExtentSparse") && + strcmp(fmt, "twoGbMaxExtentFlat") && + strcmp(fmt, "streamOptimized")) { +- fprintf(stderr, "VMDK: Unknown subformat: %s\n", fmt); ++ error_setg(errp, "Unknown subformat: '%s'", fmt); + return -EINVAL; + } + split = !(strcmp(fmt, "twoGbMaxExtentFlat") && +@@ -1653,15 +1661,13 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + desc_extent_line = "RW %lld SPARSE \"%s\"\n"; + } + if (flat && backing_file) { +- /* not supporting backing file for flat image */ ++ error_setg(errp, "Flat image can't have backing file"); + return -ENOTSUP; + } + if (backing_file) { + BlockDriverState *bs = bdrv_new(""); +- ret = bdrv_open(bs, backing_file, NULL, 0, NULL, &local_err); ++ ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp); + if (ret != 0) { +- qerror_report_err(local_err); +- error_free(local_err); + bdrv_delete(bs); + return ret; + } +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 9159dbe..dc4f024 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -2,8 +2,7 @@ QA output created by 059 + === Testing invalid granularity === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 +-invalid granularity, image may be corrupt +-qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Wrong medium type ++qemu-io: can't open device TEST_DIR/t.vmdk: Invalid granularity, image may be corrupt + no file open, try 'help open' + === Testing too big L2 table size === + +@@ -14,8 +13,7 @@ no file open, try 'help open' + === Testing too big L1 table size === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 +-L1 size too big +-qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Wrong medium type ++qemu-io: can't open device TEST_DIR/t.vmdk: L1 size too big + no file open, try 'help open' + === Testing monolithicFlat creation and opening === + +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-correctly-propagate-errors.patch b/SOURCES/kvm-vmdk-correctly-propagate-errors.patch new file mode 100644 index 0000000..953264d --- /dev/null +++ b/SOURCES/kvm-vmdk-correctly-propagate-errors.patch @@ -0,0 +1,105 @@ +From 39a68fd720126dd9c53af4f7fdeeecc0eeacc1ce Mon Sep 17 00:00:00 2001 +Message-Id: <39a68fd720126dd9c53af4f7fdeeecc0eeacc1ce.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:08 -0600 +Subject: [CHANGE 14/31] vmdk: correctly propagate errors +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-15-git-send-email-famz@redhat.com> +Patchwork-id: 62687 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 14/30] vmdk: correctly propagate errors +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Now that we can return the "right" errors, use the Error** parameter +to pass them back instead of just printing them. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 89ac8480a8c7f73dd943dcb1313d6bd984f9a870) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 11 ++++++----- + tests/qemu-iotests/059.out | 6 ++---- + 2 files changed, 8 insertions(+), 9 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 94f7dae..c7b930f 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -572,6 +572,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + error_setg_errno(errp, -ret, + "Could not read header from file '%s'", + file->filename); ++ return -EINVAL; + } + if (header.capacity == 0) { + uint64_t desc_offset = le64_to_cpu(header.desc_offset); +@@ -641,8 +642,8 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + char buf[64]; + snprintf(buf, sizeof(buf), "VMDK version %d", + le32_to_cpu(header.version)); +- qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, +- bs->device_name, "vmdk", buf); ++ error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, ++ bs->device_name, "vmdk", buf); + return -ENOTSUP; + } else if (le32_to_cpu(header.version) == 3 && (flags & BDRV_O_RDWR)) { + /* VMware KB 2064959 explains that version 3 added support for +@@ -654,7 +655,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + + if (le32_to_cpu(header.num_gtes_per_gt) > 512) { +- error_report("L2 table size too big"); ++ error_setg(errp, "L2 table size too big"); + return -EINVAL; + } + +@@ -670,8 +671,8 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + } + if (bdrv_getlength(file) < + le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE) { +- error_report("File truncated, expecting at least %lld bytes", +- le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE); ++ error_setg(errp, "File truncated, expecting at least %lld bytes", ++ le64_to_cpu(header.grain_offset) * BDRV_SECTOR_SIZE); + return -EINVAL; + } + +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index 0220774..7c9ef90 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -7,8 +7,7 @@ no file open, try 'help open' + === Testing too big L2 table size === + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 +-L2 table size too big +-qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Invalid argument ++qemu-io: can't open device TEST_DIR/t.vmdk: L2 table size too big + no file open, try 'help open' + === Testing too big L1 table size === + +@@ -2045,8 +2044,7 @@ RW 12582912 VMFS "dummy.IMGFMT" 1 + + === Testing truncated sparse === + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 +-qemu-img: File truncated, expecting at least 13172736 bytes +-qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Invalid argument ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File truncated, expecting at least 13172736 bytes + + === Testing version 3 === + image: TEST_DIR/iotest-version3.IMGFMT +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-do-not-try-opening-a-file-as-both-image-and-des.patch b/SOURCES/kvm-vmdk-do-not-try-opening-a-file-as-both-image-and-des.patch new file mode 100644 index 0000000..4c8c4a1 --- /dev/null +++ b/SOURCES/kvm-vmdk-do-not-try-opening-a-file-as-both-image-and-des.patch @@ -0,0 +1,101 @@ +From 153d5ee0b61926664684a28cdfc982f956c329a2 Mon Sep 17 00:00:00 2001 +Message-Id: <153d5ee0b61926664684a28cdfc982f956c329a2.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:07 -0600 +Subject: [CHANGE 13/31] vmdk: do not try opening a file as both image and + descriptor +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-14-git-send-email-famz@redhat.com> +Patchwork-id: 62686 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 13/30] vmdk: do not try opening a file as both image and descriptor +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +This prepares for propagating errors from vmdk_open_sparse and +vmdk_open_desc_file up to the caller of vmdk_open. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 37f09e5e3d206e7c555d28a7755cecfa137dad22) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 22 +++++++++++++++------- + tests/qemu-iotests/059.out | 4 ++-- + 2 files changed, 17 insertions(+), 9 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 458bceb..94f7dae 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -887,20 +887,28 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + char *buf = NULL; + int ret; + BDRVVmdkState *s = bs->opaque; ++ uint32_t magic; + + buf = vmdk_read_desc(bs->file, 0, errp); + if (!buf) { + return -EINVAL; + } + +- if (vmdk_open_sparse(bs, bs->file, flags, buf, errp) == 0) { +- s->desc_offset = 0x200; +- } else { +- ret = vmdk_open_desc_file(bs, flags, buf, errp); +- if (ret) { +- goto fail; +- } ++ magic = ldl_be_p(buf); ++ switch (magic) { ++ case VMDK3_MAGIC: ++ case VMDK4_MAGIC: ++ ret = vmdk_open_sparse(bs, bs->file, flags, buf, errp); ++ s->desc_offset = 0x200; ++ break; ++ default: ++ ret = vmdk_open_desc_file(bs, flags, buf, errp); ++ break; + } ++ if (ret) { ++ goto fail; ++ } ++ + /* try to open parent images, if exist */ + ret = vmdk_parent_open(bs); + if (ret) { +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index f4ca52d..0220774 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -8,7 +8,7 @@ no file open, try 'help open' + + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 + L2 table size too big +-qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Wrong medium type ++qemu-io: can't open device TEST_DIR/t.vmdk: Could not open 'TEST_DIR/t.vmdk': Invalid argument + no file open, try 'help open' + === Testing too big L1 table size === + +@@ -2046,7 +2046,7 @@ RW 12582912 VMFS "dummy.IMGFMT" 1 + === Testing truncated sparse === + Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 + qemu-img: File truncated, expecting at least 13172736 bytes +-qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Wrong medium type ++qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Could not open 'TEST_DIR/t.IMGFMT': Invalid argument + + === Testing version 3 === + image: TEST_DIR/iotest-version3.IMGFMT +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-extract-vmdk_read_desc.patch b/SOURCES/kvm-vmdk-extract-vmdk_read_desc.patch new file mode 100644 index 0000000..259d584 --- /dev/null +++ b/SOURCES/kvm-vmdk-extract-vmdk_read_desc.patch @@ -0,0 +1,99 @@ +From 09b91873d124019c0ddfc5c714191443a010f581 Mon Sep 17 00:00:00 2001 +Message-Id: <09b91873d124019c0ddfc5c714191443a010f581.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:05 -0600 +Subject: [CHANGE 11/31] vmdk: extract vmdk_read_desc +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-12-git-send-email-famz@redhat.com> +Patchwork-id: 62684 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 11/30] vmdk: extract vmdk_read_desc +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit a8842e6d2acc815e9660cc743bd0b0daba18c935) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 41 ++++++++++++++++++++++++++++++----------- + 1 file changed, 30 insertions(+), 11 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index eda2962..425064c 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -529,6 +529,32 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + uint64_t desc_offset, Error **errp); + ++static char *vmdk_read_desc(BlockDriverState *file, uint64_t desc_offset, ++ Error **errp) ++{ ++ int64_t size; ++ char *buf; ++ int ret; ++ ++ size = bdrv_getlength(file); ++ if (size < 0) { ++ error_setg_errno(errp, -size, "Could not access file"); ++ return NULL; ++ } ++ ++ size = MIN(size, 1 << 20); /* avoid unbounded allocation */ ++ buf = g_malloc0(size + 1); ++ ++ ret = bdrv_pread(file, desc_offset, buf, size); ++ if (ret < 0) { ++ error_setg_errno(errp, -ret, "Could not read from file"); ++ g_free(buf); ++ return NULL; ++ } ++ ++ return buf; ++} ++ + static int vmdk_open_vmdk4(BlockDriverState *bs, + BlockDriverState *file, + int flags, Error **errp) +@@ -823,23 +849,16 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + uint64_t desc_offset, Error **errp) + { + int ret; +- char *buf = NULL; ++ char *buf; + char ct[128]; + BDRVVmdkState *s = bs->opaque; +- int64_t size; + +- size = bdrv_getlength(bs->file); +- if (size < 0) { ++ buf = vmdk_read_desc(bs->file, desc_offset, errp); ++ if (!buf) { + return -EINVAL; +- } +- +- size = MIN(size, 1 << 20); /* avoid unbounded allocation */ +- buf = g_malloc0(size + 1); +- +- ret = bdrv_pread(bs->file, desc_offset, buf, size); +- if (ret < 0) { + goto exit; + } ++ + if (vmdk_parse_description(buf, "createType", ct, sizeof(ct))) { + error_setg(errp, "invalid VMDK image descriptor"); + ret = -EINVAL; +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-fix-L1-and-L2-table-size-in-vmdk3-open.patch b/SOURCES/kvm-vmdk-fix-L1-and-L2-table-size-in-vmdk3-open.patch new file mode 100644 index 0000000..94709f5 --- /dev/null +++ b/SOURCES/kvm-vmdk-fix-L1-and-L2-table-size-in-vmdk3-open.patch @@ -0,0 +1,61 @@ +From abce415a153d6bdf7068e812e3847ba559d33081 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 19 Aug 2013 18:54:26 +0800 +Subject: [PATCH 11/13] vmdk: fix L1 and L2 table size in vmdk3 open + +Message-id: <1377573001-27070-12-git-send-email-famz@redhat.com> +Patchwork-id: 53791 +O-Subject: [RHEL-7 qemu-kvm PATCH 11/13] vmdk: fix L1 and L2 table size in vmdk3 + open +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +VMDK3 header has the field l1dir_size, but vmdk_open_vmdk3 hardcoded the +value. This patch honors the header field. + +And the L2 table size is 4096 according to VMDK spec[1], instead of +1 << 9 (512). + +[1]: +http://www.vmware.com/support/developer/vddk/vmdk_50_technote.pdf?src=vmdk + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit f6b61e54bdd5b9ef46837c15547e1819b3bb4f37) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 4388038..4997da4 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -494,14 +494,14 @@ static int vmdk_open_vmdk3(BlockDriverState *bs, + if (ret < 0) { + return ret; + } +- +- ret = vmdk_add_extent(bs, +- bs->file, false, +- le32_to_cpu(header.disk_sectors), +- le32_to_cpu(header.l1dir_offset) << 9, +- 0, 1 << 6, 1 << 9, +- le32_to_cpu(header.granularity), +- &extent); ++ ret = vmdk_add_extent(bs, file, false, ++ le32_to_cpu(header.disk_sectors), ++ le32_to_cpu(header.l1dir_offset) << 9, ++ 0, ++ le32_to_cpu(header.l1dir_size), ++ 4096, ++ le32_to_cpu(header.granularity), ++ &extent); + if (ret < 0) { + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-fix-VMFS-extent-parsing.patch b/SOURCES/kvm-vmdk-fix-VMFS-extent-parsing.patch new file mode 100644 index 0000000..ca439fd --- /dev/null +++ b/SOURCES/kvm-vmdk-fix-VMFS-extent-parsing.patch @@ -0,0 +1,43 @@ +From dc64463e65223377bfb4a925f2f047b50090b32a Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 7 Nov 2013 16:07:08 +0100 +Subject: [PATCH 23/25] vmdk: fix VMFS extent parsing + +RH-Author: Fam Zheng +Message-id: <1383795369-10623-3-git-send-email-famz@redhat.com> +Patchwork-id: 55586 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/2] vmdk: fix VMFS extent parsing +Bugzilla: 995866 +RH-Acked-by: Amos Kong +RH-Acked-by: Max Reitz +RH-Acked-by: Kevin Wolf + +The VMFS extent line in description file doesn't have start offset as +FLAT lines does, and it should be defaulted to 0. The flat_offset +variable is initialized to -1, so we need to set it in this case. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit dbbcaa8d4358fdf3c42bf01e9e2d687300e84770) +Signed-off-by: Fam Zheng +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index f2237cf..026b440 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -737,6 +737,8 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + error_setg(errp, "Invalid extent lines: \n%s", p); + return -EINVAL; + } ++ } else if (!strcmp(type, "VMFS")) { ++ flat_offset = 0; + } else if (ret != 4) { + error_setg(errp, "Invalid extent lines: \n%s", p); + return -EINVAL; +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-fix-buf-leak-in-vmdk_parse_extents.patch b/SOURCES/kvm-vmdk-fix-buf-leak-in-vmdk_parse_extents.patch new file mode 100644 index 0000000..c567e9d --- /dev/null +++ b/SOURCES/kvm-vmdk-fix-buf-leak-in-vmdk_parse_extents.patch @@ -0,0 +1,51 @@ +From 56d77f768a5aa2b35ba645ae05d56e9908457c92 Mon Sep 17 00:00:00 2001 +Message-Id: <56d77f768a5aa2b35ba645ae05d56e9908457c92.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:23 -0600 +Subject: [CHANGE 29/31] vmdk: fix buf leak in vmdk_parse_extents() +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-30-git-send-email-famz@redhat.com> +Patchwork-id: 62702 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 29/30] vmdk: fix buf leak in vmdk_parse_extents() +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Stefan Hajnoczi + +vmdk_open_sparse() does not take ownership of buf so the caller always +needs to free it. + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Max Reitz +Reviewed-by: Fam Zheng +(cherry picked from commit b6b1d31f098eef8cd13556d343e46c213fac972a) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index ddd06f0..0593a1a 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -847,8 +847,8 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + } else { + ret = vmdk_open_sparse(bs, extent_file, bs->open_flags, buf, errp); + } ++ g_free(buf); + if (ret) { +- g_free(buf); + bdrv_unref(extent_file); + return ret; + } +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-fix-cluster-size-check-for-flat-extents.patch b/SOURCES/kvm-vmdk-fix-cluster-size-check-for-flat-extents.patch new file mode 100644 index 0000000..8e8a531 --- /dev/null +++ b/SOURCES/kvm-vmdk-fix-cluster-size-check-for-flat-extents.patch @@ -0,0 +1,80 @@ +From cbffbb8195ec5370cbb2baf53148806b5a1c3dc8 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Wed, 9 Oct 2013 09:50:22 +0200 +Subject: [PATCH 10/11] vmdk: fix cluster size check for flat extents + +RH-Author: Fam Zheng +Message-id: <1381312223-7074-3-git-send-email-famz@redhat.com> +Patchwork-id: 54794 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/3] vmdk: fix cluster size check for flat extents +Bugzilla: 1017049 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Miroslav Rezanina + +We use the extent size as cluster size for flat extents (where no L1/L2 +table is allocated so it's safe) reuse sector calculating code with +sparse extents. + +Don't pass in the cluster size for adding flat extent, just set it to +sectors later, then the cluster size checking will not fail. + +The cluster_sectors is changed to int64_t to allow big flat extent. + +Without this, flat extent opening is broken: + + # qemu-img create -f vmdk -o subformat=monolithicFlat /tmp/a.vmdk 100G + Formatting '/tmp/a.vmdk', fmt=vmdk size=107374182400 compat6=off subformat='monolithicFlat' zeroed_grain=off + # qemu-img info /tmp/a.vmdk + image: /tmp/a.vmdk + file format: raw + virtual size: 0 (0 bytes) + disk size: 4.0K + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 301c7d38a0c359b91526391d13617386f3d9bb29) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index b0b419b..66735ab 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -105,7 +105,7 @@ typedef struct VmdkExtent { + uint32_t l2_cache_offsets[L2_CACHE_SIZE]; + uint32_t l2_cache_counts[L2_CACHE_SIZE]; + +- unsigned int cluster_sectors; ++ int64_t cluster_sectors; + } VmdkExtent; + + typedef struct BDRVVmdkState { +@@ -424,7 +424,7 @@ static int vmdk_add_extent(BlockDriverState *bs, + extent->l1_size = l1_size; + extent->l1_entry_sectors = l2_size * cluster_sectors; + extent->l2_size = l2_size; +- extent->cluster_sectors = cluster_sectors; ++ extent->cluster_sectors = flat ? sectors : cluster_sectors; + + if (s->num_extents > 1) { + extent->end_sector = (*(extent - 1)).end_sector + extent->sectors; +@@ -737,7 +737,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + VmdkExtent *extent; + + ret = vmdk_add_extent(bs, extent_file, true, sectors, +- 0, 0, 0, 0, sectors, &extent); ++ 0, 0, 0, 0, 0, &extent); + if (ret < 0) { + return ret; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-fix-comment-for-vmdk_co_write_zeroes.patch b/SOURCES/kvm-vmdk-fix-comment-for-vmdk_co_write_zeroes.patch new file mode 100644 index 0000000..8f994a0 --- /dev/null +++ b/SOURCES/kvm-vmdk-fix-comment-for-vmdk_co_write_zeroes.patch @@ -0,0 +1,63 @@ +From 7bae8147abc5661103da3316f09306939ec03708 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Thu, 5 Sep 2013 08:45:39 +0200 +Subject: [PATCH 11/29] vmdk: fix comment for vmdk_co_write_zeroes + +RH-Author: Fam Zheng +Message-id: <1378370739-22259-1-git-send-email-famz@redhat.com> +Patchwork-id: 54100 +O-Subject: [RHEL-7 qemu-kvm PATCH] vmdk: fix comment for vmdk_co_write_zeroes +Bugzilla: 995866 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Max Reitz + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=995866 +Brew: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6246791 +Upstream: merged + +The comment was truncated. Add the missing parts, especially explain why +we need zero_dry_run. + +Signed-off-by: Fam Zheng +Signed-off-by: Michael Tokarev +(cherry picked from commit 8e50724313895a87057cc243ad805f2eb21feb9f) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index a28fb5e..f0c1f93 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1200,8 +1200,10 @@ static coroutine_fn int vmdk_co_read(BlockDriverState *bs, int64_t sector_num, + /** + * vmdk_write: + * @zeroed: buf is ignored (data is zero), use zeroed_grain GTE feature +- * if possible, otherwise return -ENOTSUP. +- * @zero_dry_run: used for zeroed == true only, don't update L2 table, just ++ * if possible, otherwise return -ENOTSUP. ++ * @zero_dry_run: used for zeroed == true only, don't update L2 table, just try ++ * with each cluster. By dry run we can find if the zero write ++ * is possible without modifying image data. + * + * Returns: error code with 0 for success. + */ +@@ -1328,6 +1330,8 @@ static int coroutine_fn vmdk_co_write_zeroes(BlockDriverState *bs, + int ret; + BDRVVmdkState *s = bs->opaque; + qemu_co_mutex_lock(&s->lock); ++ /* write zeroes could fail if sectors not aligned to cluster, test it with ++ * dry_run == true before really updating image */ + ret = vmdk_write(bs, sector_num, NULL, nb_sectors, true, true); + if (!ret) { + ret = vmdk_write(bs, sector_num, NULL, nb_sectors, true, false); +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-fix-vmdk_parse_extents-extent_file-leaks.patch b/SOURCES/kvm-vmdk-fix-vmdk_parse_extents-extent_file-leaks.patch new file mode 100644 index 0000000..8d8d4c0 --- /dev/null +++ b/SOURCES/kvm-vmdk-fix-vmdk_parse_extents-extent_file-leaks.patch @@ -0,0 +1,54 @@ +From 6b65120986e94f9f48ce92263b9660786038984b Mon Sep 17 00:00:00 2001 +Message-Id: <6b65120986e94f9f48ce92263b9660786038984b.1418766606.git.jen@redhat.com> +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:22 -0600 +Subject: [CHANGE 28/31] vmdk: fix vmdk_parse_extents() extent_file leaks +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-29-git-send-email-famz@redhat.com> +Patchwork-id: 62701 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 28/30] vmdk: fix vmdk_parse_extents() extent_file leaks +Bugzilla: 1002493 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Stefan Hajnoczi + +Signed-off-by: Stefan Hajnoczi +Reviewed-by: Max Reitz +Reviewed-by: Fam Zheng +(cherry picked from commit ff74f33c310892c90c4439d963a6ce67f47ce18c) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/block/vmdk.c b/block/vmdk.c +index b9ab89b..ddd06f0 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -835,6 +835,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + ret = vmdk_add_extent(bs, extent_file, true, sectors, + 0, 0, 0, 0, 0, &extent, errp); + if (ret < 0) { ++ bdrv_unref(extent_file); + return ret; + } + extent->flat_start_offset = flat_offset << 9; +@@ -854,6 +855,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + extent = &s->extents[s->num_extents - 1]; + } else { + error_setg(errp, "Unsupported extent type '%s'", type); ++ bdrv_unref(extent_file); + return -ENOTSUP; + } + extent->type = g_strdup(type); +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-push-vmdk_read_desc-up-to-caller.patch b/SOURCES/kvm-vmdk-push-vmdk_read_desc-up-to-caller.patch new file mode 100644 index 0000000..bec77ef --- /dev/null +++ b/SOURCES/kvm-vmdk-push-vmdk_read_desc-up-to-caller.patch @@ -0,0 +1,170 @@ +From feb051e6d8bc62e6b9e162ada4dc576c59edc00f Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +References: <6f81b4847eb68ebdf54a8f1a771e19d112d74152.1418766606.git.jen@redhat.com> +From: Fam Zheng +Date: Thu, 4 Dec 2014 00:05:06 -0600 +Subject: [CHANGE 12/31] vmdk: push vmdk_read_desc up to caller +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Fam Zheng +Message-id: <1417651524-18041-13-git-send-email-famz@redhat.com> +Patchwork-id: 62685 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v5 12/30] vmdk: push vmdk_read_desc up to caller +Bugzilla: 1134251 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Markus Armbruster +RH-Acked-by: Max Reitz + +From: Paolo Bonzini + +Currently, we just try reading a VMDK file as both image and descriptor. +This makes it hard to choose which of the two attempts gave the best error. +We'll decide in advance if the file looks like an image or a descriptor, +and this patch is the first step to that end. + +Signed-off-by: Paolo Bonzini +Reviewed-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit d1833ef52be349e41d17e9c5ddaea8bb4ad3a7fb) +Signed-off-by: Fam Zheng +Signed-off-by: Jeff E. Nelson +--- + block/vmdk.c | 55 +++++++++++++++++++++++++++++++------------------------ + 1 file changed, 31 insertions(+), 24 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 425064c..458bceb 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -526,8 +526,8 @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs, + return ret; + } + +-static int vmdk_open_desc_file(BlockDriverState *bs, int flags, +- uint64_t desc_offset, Error **errp); ++static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf, ++ Error **errp); + + static char *vmdk_read_desc(BlockDriverState *file, uint64_t desc_offset, + Error **errp) +@@ -576,7 +576,13 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + if (header.capacity == 0) { + uint64_t desc_offset = le64_to_cpu(header.desc_offset); + if (desc_offset) { +- return vmdk_open_desc_file(bs, flags, desc_offset << 9, errp); ++ char *buf = vmdk_read_desc(file, desc_offset << 9, errp); ++ if (!buf) { ++ return -EINVAL; ++ } ++ ret = vmdk_open_desc_file(bs, flags, buf, errp); ++ g_free(buf); ++ return ret; + } + } + +@@ -727,16 +733,12 @@ static int vmdk_parse_description(const char *desc, const char *opt_name, + + /* Open an extent file and append to bs array */ + static int vmdk_open_sparse(BlockDriverState *bs, +- BlockDriverState *file, +- int flags, Error **errp) ++ BlockDriverState *file, int flags, ++ char *buf, Error **errp) + { + uint32_t magic; + +- if (bdrv_pread(file, 0, &magic, sizeof(magic)) != sizeof(magic)) { +- return -EIO; +- } +- +- magic = be32_to_cpu(magic); ++ magic = ldl_be_p(buf); + switch (magic) { + case VMDK3_MAGIC: + return vmdk_open_vmfs_sparse(bs, file, flags, errp); +@@ -821,8 +823,14 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + extent->flat_start_offset = flat_offset << 9; + } else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) { + /* SPARSE extent and VMFSSPARSE extent are both "COWD" sparse file*/ +- ret = vmdk_open_sparse(bs, extent_file, bs->open_flags, errp); ++ char *buf = vmdk_read_desc(extent_file, 0, errp); ++ if (!buf) { ++ ret = -EINVAL; ++ } else { ++ ret = vmdk_open_sparse(bs, extent_file, bs->open_flags, buf, errp); ++ } + if (ret) { ++ g_free(buf); + bdrv_unref(extent_file); + return ret; + } +@@ -845,20 +853,13 @@ next_line: + return 0; + } + +-static int vmdk_open_desc_file(BlockDriverState *bs, int flags, +- uint64_t desc_offset, Error **errp) ++static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf, ++ Error **errp) + { + int ret; +- char *buf; + char ct[128]; + BDRVVmdkState *s = bs->opaque; + +- buf = vmdk_read_desc(bs->file, desc_offset, errp); +- if (!buf) { +- return -EINVAL; +- goto exit; +- } +- + if (vmdk_parse_description(buf, "createType", ct, sizeof(ct))) { + error_setg(errp, "invalid VMDK image descriptor"); + ret = -EINVAL; +@@ -877,20 +878,25 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + s->desc_offset = 0; + ret = vmdk_parse_extents(buf, bs, bs->file->filename, errp); + exit: +- g_free(buf); + return ret; + } + + static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + Error **errp) + { ++ char *buf = NULL; + int ret; + BDRVVmdkState *s = bs->opaque; + +- if (vmdk_open_sparse(bs, bs->file, flags, errp) == 0) { ++ buf = vmdk_read_desc(bs->file, 0, errp); ++ if (!buf) { ++ return -EINVAL; ++ } ++ ++ if (vmdk_open_sparse(bs, bs->file, flags, buf, errp) == 0) { + s->desc_offset = 0x200; + } else { +- ret = vmdk_open_desc_file(bs, flags, 0, errp); ++ ret = vmdk_open_desc_file(bs, flags, buf, errp); + if (ret) { + goto fail; + } +@@ -909,10 +915,11 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags, + QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED, + "vmdk", bs->device_name, "live migration"); + migrate_add_blocker(s->migration_blocker); +- ++ g_free(buf); + return 0; + + fail: ++ g_free(buf); + g_free(s->create_type); + s->create_type = NULL; + vmdk_free_extents(bs); +-- +2.1.0 + diff --git a/SOURCES/kvm-vmdk-refuse-enabling-zeroed-grain-with-flat-images.patch b/SOURCES/kvm-vmdk-refuse-enabling-zeroed-grain-with-flat-images.patch new file mode 100644 index 0000000..030d296 --- /dev/null +++ b/SOURCES/kvm-vmdk-refuse-enabling-zeroed-grain-with-flat-images.patch @@ -0,0 +1,84 @@ +From 0cc9ce211d3b571e35b5440fc12a77195b7ee804 Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Wed, 6 Nov 2013 16:53:41 +0100 +Subject: [PATCH 84/87] vmdk: refuse enabling zeroed grain with flat images + +RH-Author: Max Reitz +Message-id: <1383756824-6921-19-git-send-email-mreitz@redhat.com> +Patchwork-id: 55573 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 18/21] vmdk: refuse enabling zeroed grain with flat images +Bugzilla: 980771 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Fam Zheng +RH-Acked-by: Jeffrey Cody + +From: Fam Zheng + +BZ: 980771 + +This is a header flag and we needs sparse for the header. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit 52c8d629cac27ad16dd51507b4733d46fa4efc55) + +Signed-off-by: Max Reitz +--- + block/vmdk.c | 4 ++++ + tests/qemu-iotests/059 | 4 ++++ + tests/qemu-iotests/059.out | 4 ++++ + 3 files changed, 12 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + block/vmdk.c | 4 ++++ + tests/qemu-iotests/059 | 4 ++++ + tests/qemu-iotests/059.out | 4 ++++ + 3 files changed, 12 insertions(+), 0 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 96f9415..ccbb0c9 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -1664,6 +1664,10 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options, + error_setg(errp, "Flat image can't have backing file"); + return -ENOTSUP; + } ++ if (flat && zeroed_grain) { ++ error_setg(errp, "Flat image can't enable zeroed grain"); ++ return -ENOTSUP; ++ } + if (backing_file) { + BlockDriverState *bs = bdrv_new(""); + ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp); +diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 +index dd6addf..26d4538 100755 +--- a/tests/qemu-iotests/059 ++++ b/tests/qemu-iotests/059 +@@ -71,6 +71,10 @@ echo + IMGOPTS="subformat=monolithicFlat" _make_test_img 2G + $QEMU_IMG info $TEST_IMG | _filter_testdir + ++echo ++echo "=== Testing monolithicFlat with zeroed_grain ===" ++IMGOPTS="subformat=monolithicFlat,zeroed_grain=on" _make_test_img 2G ++ + # success, all done + echo "*** done" + rm -f $seq.full +diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out +index dc4f024..2b29ca9 100644 +--- a/tests/qemu-iotests/059.out ++++ b/tests/qemu-iotests/059.out +@@ -22,4 +22,8 @@ image: TEST_DIR/t.vmdk + file format: vmdk + virtual size: 2.0G (2147483648 bytes) + disk size: 4.0K ++ ++=== Testing monolithicFlat with zeroed_grain === ++qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 + *** done +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-rename-num_gtes_per_gte-to-num_gtes_per_gt.patch b/SOURCES/kvm-vmdk-rename-num_gtes_per_gte-to-num_gtes_per_gt.patch new file mode 100644 index 0000000..68cd08f --- /dev/null +++ b/SOURCES/kvm-vmdk-rename-num_gtes_per_gte-to-num_gtes_per_gt.patch @@ -0,0 +1,91 @@ +From 92803fbc4c637faa21cc28e77ca400d9427f2554 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:55 +0800 +Subject: [PATCH 09/13] vmdk: rename num_gtes_per_gte to num_gtes_per_gt + +Message-id: <1377573001-27070-10-git-send-email-famz@redhat.com> +Patchwork-id: 53789 +O-Subject: [RHEL-7 qemu-kvm PATCH 09/13] vmdk: rename num_gtes_per_gte to + num_gtes_per_gt +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +num_gtes_per_gte is a historical typo, rename it to a more sensible +name. It means "number of GrainTableEntries per GrainTable". + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit ca8804ced9fdba7a1925ed81084dfb7a5b6ffa9f) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 17 +++++++++-------- + 1 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 1af6122..73d9907 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -71,7 +71,8 @@ typedef struct { + uint64_t granularity; + uint64_t desc_offset; + uint64_t desc_size; +- uint32_t num_gtes_per_gte; ++ /* Number of GrainTableEntries per GrainTable */ ++ uint32_t num_gtes_per_gt; + uint64_t rgd_offset; + uint64_t gd_offset; + uint64_t grain_offset; +@@ -585,12 +586,12 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + return -ENOTSUP; + } + +- if (le32_to_cpu(header.num_gtes_per_gte) > 512) { ++ if (le32_to_cpu(header.num_gtes_per_gt) > 512) { + error_report("L2 table size too big"); + return -EINVAL; + } + +- l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gte) ++ l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gt) + * le64_to_cpu(header.granularity); + if (l1_entry_sectors == 0) { + return -EINVAL; +@@ -613,7 +614,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + le64_to_cpu(header.gd_offset) << 9, + l1_backup_offset, + l1_size, +- le32_to_cpu(header.num_gtes_per_gte), ++ le32_to_cpu(header.num_gtes_per_gt), + le64_to_cpu(header.granularity), + &extent); + if (ret < 0) { +@@ -1411,12 +1412,12 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + header.compressAlgorithm = compress ? VMDK4_COMPRESSION_DEFLATE : 0; + header.capacity = filesize / 512; + header.granularity = 128; +- header.num_gtes_per_gte = 512; ++ header.num_gtes_per_gt = 512; + + grains = (filesize / 512 + header.granularity - 1) / header.granularity; +- gt_size = ((header.num_gtes_per_gte * sizeof(uint32_t)) + 511) >> 9; ++ gt_size = ((header.num_gtes_per_gt * sizeof(uint32_t)) + 511) >> 9; + gt_count = +- (grains + header.num_gtes_per_gte - 1) / header.num_gtes_per_gte; ++ (grains + header.num_gtes_per_gt - 1) / header.num_gtes_per_gt; + gd_size = (gt_count * sizeof(uint32_t) + 511) >> 9; + + header.desc_offset = 1; +@@ -1432,7 +1433,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize, + header.flags = cpu_to_le32(header.flags); + header.capacity = cpu_to_le64(header.capacity); + header.granularity = cpu_to_le64(header.granularity); +- header.num_gtes_per_gte = cpu_to_le32(header.num_gtes_per_gte); ++ header.num_gtes_per_gt = cpu_to_le32(header.num_gtes_per_gt); + header.desc_offset = cpu_to_le64(header.desc_offset); + header.desc_size = cpu_to_le64(header.desc_size); + header.rgd_offset = cpu_to_le64(header.rgd_offset); +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-support-vmfs-files.patch b/SOURCES/kvm-vmdk-support-vmfs-files.patch new file mode 100644 index 0000000..0b638c4 --- /dev/null +++ b/SOURCES/kvm-vmdk-support-vmfs-files.patch @@ -0,0 +1,60 @@ +From f9da89c13d9e9bde2d5da525ea6ad2ac92404ec4 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Mon, 19 Aug 2013 18:54:28 +0800 +Subject: [PATCH 13/13] vmdk: support vmfs files + +Message-id: <1377573001-27070-14-git-send-email-famz@redhat.com> +Patchwork-id: 53793 +O-Subject: [RHEL-7 qemu-kvm PATCH 13/13] vmdk: support vmfs files +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +VMware ESX hosts also use different create and extent types for flat +files, respectively "vmfs" and "VMFS". This is not documented, but it +can be found at http://kb.vmware.com/kb/10002511 (Recreating a missing +virtual machine disk (VMDK) descriptor file). + +Signed-off-by: Paolo Bonzini +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 04d542c8b826a1196ca4f03f5a35d83035976bd1) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 4d0c82a..b0b419b 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -719,7 +719,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + + if (sectors <= 0 || + (strcmp(type, "FLAT") && strcmp(type, "SPARSE") && +- strcmp(type, "VMFSSPARSE")) || ++ strcmp(type, "VMFS") && strcmp(type, "VMFSSPARSE")) || + (strcmp(access, "RW"))) { + goto next_line; + } +@@ -732,7 +732,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + } + + /* save to extents array */ +- if (!strcmp(type, "FLAT")) { ++ if (!strcmp(type, "FLAT") || !strcmp(type, "VMFS")) { + /* FLAT extent */ + VmdkExtent *extent; + +@@ -790,6 +790,7 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + goto exit; + } + if (strcmp(ct, "monolithicFlat") && ++ strcmp(ct, "vmfs") && + strcmp(ct, "vmfsSparse") && + strcmp(ct, "twoGbMaxExtentSparse") && + strcmp(ct, "twoGbMaxExtentFlat")) { +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-support-vmfsSparse-files.patch b/SOURCES/kvm-vmdk-support-vmfsSparse-files.patch new file mode 100644 index 0000000..82ebf01 --- /dev/null +++ b/SOURCES/kvm-vmdk-support-vmfsSparse-files.patch @@ -0,0 +1,112 @@ +From 26c4eb4923589b410b1aec705b8665afb5e78794 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Mon, 19 Aug 2013 18:54:27 +0800 +Subject: [PATCH 12/13] vmdk: support vmfsSparse files + +Message-id: <1377573001-27070-13-git-send-email-famz@redhat.com> +Patchwork-id: 53792 +O-Subject: [RHEL-7 qemu-kvm PATCH 12/13] vmdk: support vmfsSparse files +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +VMware ESX hosts use a variant of the VMDK3 format, identified by the +vmfsSparse create type ad the VMFSSPARSE extent type. + +It has 16 KB grain tables (L2) and a variable-size grain directory (L1). +In addition, the grain size is always 512, but that is not a problem +because it is included in the header. + +The format of the extents is documented in the VMDK spec. The format +of the descriptor file is not documented precisely, but it can be +found at http://kb.vmware.com/kb/10026353 (Recreating a missing virtual +machine disk (VMDK) descriptor file for delta disks). + +With these patches, vmfsSparse files only work if opened through the +descriptor file. Data files without descriptor files, as far as I +could understand, are not supported by ESX. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Fam Zheng + +-- +v2: Rebase to patch 01. + Change le64_to_cpu to le32_to_cpu. + Rename vmdk_open_vmdk3 to vmdk_open_vmfs_sparse, which represents the + current usage of this format. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit daac8fdc68c5f0118ce24fcac5873ddaa0d0c9f9) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 17 +++++++++-------- + 1 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 4997da4..4d0c82a 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -481,9 +481,9 @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent) + return ret; + } + +-static int vmdk_open_vmdk3(BlockDriverState *bs, +- BlockDriverState *file, +- int flags) ++static int vmdk_open_vmfs_sparse(BlockDriverState *bs, ++ BlockDriverState *file, ++ int flags) + { + int ret; + uint32_t magic; +@@ -674,7 +674,7 @@ static int vmdk_open_sparse(BlockDriverState *bs, + magic = be32_to_cpu(magic); + switch (magic) { + case VMDK3_MAGIC: +- return vmdk_open_vmdk3(bs, file, flags); ++ return vmdk_open_vmfs_sparse(bs, file, flags); + break; + case VMDK4_MAGIC: + return vmdk_open_vmdk4(bs, file, flags); +@@ -718,7 +718,8 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + } + + if (sectors <= 0 || +- (strcmp(type, "FLAT") && strcmp(type, "SPARSE")) || ++ (strcmp(type, "FLAT") && strcmp(type, "SPARSE") && ++ strcmp(type, "VMFSSPARSE")) || + (strcmp(access, "RW"))) { + goto next_line; + } +@@ -741,8 +742,8 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, + return ret; + } + extent->flat_start_offset = flat_offset << 9; +- } else if (!strcmp(type, "SPARSE")) { +- /* SPARSE extent */ ++ } else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) { ++ /* SPARSE extent and VMFSSPARSE extent are both "COWD" sparse file*/ + ret = vmdk_open_sparse(bs, extent_file, bs->open_flags); + if (ret) { + bdrv_delete(extent_file); +@@ -789,6 +790,7 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + goto exit; + } + if (strcmp(ct, "monolithicFlat") && ++ strcmp(ct, "vmfsSparse") && + strcmp(ct, "twoGbMaxExtentSparse") && + strcmp(ct, "twoGbMaxExtentFlat")) { + fprintf(stderr, +@@ -1381,7 +1383,6 @@ static int coroutine_fn vmdk_co_write_zeroes(BlockDriverState *bs, + return ret; + } + +- + static int vmdk_create_extent(const char *filename, int64_t filesize, + bool flat, bool compress, bool zeroed_grain) + { +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-use-heap-allocation-for-whole_grain.patch b/SOURCES/kvm-vmdk-use-heap-allocation-for-whole_grain.patch new file mode 100644 index 0000000..96dd431 --- /dev/null +++ b/SOURCES/kvm-vmdk-use-heap-allocation-for-whole_grain.patch @@ -0,0 +1,82 @@ +From 7762468560c9a2283836a4abdde58301ad7fb1cf Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:54 +0800 +Subject: [PATCH 08/13] vmdk: use heap allocation for whole_grain + +Message-id: <1377573001-27070-9-git-send-email-famz@redhat.com> +Patchwork-id: 53788 +O-Subject: [RHEL-7 qemu-kvm PATCH 08/13] vmdk: use heap allocation for + whole_grain +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +We should never grow the stack beyond 1 MB, otherwise we'll fall off the +end. Thread stacks and coroutine stacks (1 MB) do not grow. +get_cluster_offset() allocates a big stack offset, it will fail for big +cluster images, change to heap allocated buffer. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit bf81507de38fdfa4cb6e9b46fb38691a25cb1499) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 21 +++++++++++++-------- + 1 files changed, 13 insertions(+), 8 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index 58163ef..1af6122 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -842,16 +842,17 @@ static int get_whole_cluster(BlockDriverState *bs, + uint64_t offset, + bool allocate) + { +- /* 128 sectors * 512 bytes each = grain size 64KB */ +- uint8_t whole_grain[extent->cluster_sectors * 512]; ++ int ret = VMDK_OK; ++ uint8_t *whole_grain = NULL; + + /* we will be here if it's first write on non-exist grain(cluster). + * try to read from parent image, if exist */ + if (bs->backing_hd) { +- int ret; +- ++ whole_grain = ++ qemu_blockalign(bs, extent->cluster_sectors << BDRV_SECTOR_BITS); + if (!vmdk_is_cid_valid(bs)) { +- return VMDK_ERROR; ++ ret = VMDK_ERROR; ++ goto exit; + } + + /* floor offset to cluster */ +@@ -859,17 +860,21 @@ static int get_whole_cluster(BlockDriverState *bs, + ret = bdrv_read(bs->backing_hd, offset >> 9, whole_grain, + extent->cluster_sectors); + if (ret < 0) { +- return VMDK_ERROR; ++ ret = VMDK_ERROR; ++ goto exit; + } + + /* Write grain only into the active image */ + ret = bdrv_write(extent->file, cluster_offset, whole_grain, + extent->cluster_sectors); + if (ret < 0) { +- return VMDK_ERROR; ++ ret = VMDK_ERROR; ++ goto exit; + } + } +- return VMDK_OK; ++exit: ++ qemu_vfree(whole_grain); ++ return ret; + } + + static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data) +-- +1.7.1 + diff --git a/SOURCES/kvm-vmdk-use-unsigned-values-for-on-disk-header-fields.patch b/SOURCES/kvm-vmdk-use-unsigned-values-for-on-disk-header-fields.patch new file mode 100644 index 0000000..596028e --- /dev/null +++ b/SOURCES/kvm-vmdk-use-unsigned-values-for-on-disk-header-fields.patch @@ -0,0 +1,91 @@ +From 1826fdaaacd0d6898bb3bd64935edd520dd95428 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Tue, 6 Aug 2013 15:44:48 +0800 +Subject: [PATCH 02/13] vmdk: use unsigned values for on disk header fields + +Message-id: <1377573001-27070-3-git-send-email-famz@redhat.com> +Patchwork-id: 53782 +O-Subject: [RHEL-7 qemu-kvm PATCH 02/13] vmdk: use unsigned values for on disk + header fields +Bugzilla: 995866 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Kevin Wolf + +The size and offset fields are all non-negative values, use uint64_t for +them to avoid getting negative in memory value by int overflow. + +Signed-off-by: Fam Zheng +Signed-off-by: Kevin Wolf +(cherry picked from commit e98768d43799cd3f00b358bfbe455fdae793d3e8) +Signed-off-by: Fam Zheng +--- + block/vmdk.c | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/block/vmdk.c b/block/vmdk.c +index e85f4ea..78ea480 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -67,14 +67,14 @@ typedef struct { + typedef struct { + uint32_t version; + uint32_t flags; +- int64_t capacity; +- int64_t granularity; +- int64_t desc_offset; +- int64_t desc_size; +- int32_t num_gtes_per_gte; +- int64_t rgd_offset; +- int64_t gd_offset; +- int64_t grain_offset; ++ uint64_t capacity; ++ uint64_t granularity; ++ uint64_t desc_offset; ++ uint64_t desc_size; ++ uint32_t num_gtes_per_gte; ++ uint64_t rgd_offset; ++ uint64_t gd_offset; ++ uint64_t grain_offset; + char filler[1]; + char check_bytes[4]; + uint16_t compressAlgorithm; +@@ -109,7 +109,7 @@ typedef struct VmdkExtent { + + typedef struct BDRVVmdkState { + CoMutex lock; +- int desc_offset; ++ uint64_t desc_offset; + bool cid_updated; + uint32_t parent_cid; + int num_extents; +@@ -490,7 +490,7 @@ static int vmdk_open_vmdk3(BlockDriverState *bs, + } + + static int vmdk_open_desc_file(BlockDriverState *bs, int flags, +- int64_t desc_offset); ++ uint64_t desc_offset); + + static int vmdk_open_vmdk4(BlockDriverState *bs, + BlockDriverState *file, +@@ -508,7 +508,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + return ret; + } + if (header.capacity == 0) { +- int64_t desc_offset = le64_to_cpu(header.desc_offset); ++ uint64_t desc_offset = le64_to_cpu(header.desc_offset); + if (desc_offset) { + return vmdk_open_desc_file(bs, flags, desc_offset << 9); + } +@@ -728,7 +728,7 @@ next_line: + } + + static int vmdk_open_desc_file(BlockDriverState *bs, int flags, +- int64_t desc_offset) ++ uint64_t desc_offset) + { + int ret; + char *buf = NULL; +-- +1.7.1 + diff --git a/SOURCES/kvm-vmstate-add-VMSTATE_VALIDATE.patch b/SOURCES/kvm-vmstate-add-VMSTATE_VALIDATE.patch new file mode 100644 index 0000000..653d053 --- /dev/null +++ b/SOURCES/kvm-vmstate-add-VMSTATE_VALIDATE.patch @@ -0,0 +1,51 @@ +From 9d268999694b9743808fb9454a4f1ab7a941b8a6 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:52:51 +0200 +Subject: [PATCH 22/31] vmstate: add VMSTATE_VALIDATE + +RH-Author: Michael S. Tsirkin +Message-id: <1400057538-6975-4-git-send-email-mst@redhat.com> +Patchwork-id: 58870 +O-Subject: [PATCH qemu-kvm RHEL7.1 3/5] vmstate: add VMSTATE_VALIDATE +Bugzilla: 1095716 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +Validate state using VMS_ARRAY with num = 0 and VMS_MUST_EXIST + +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juan Quintela +(cherry picked from commit 4082f0889ba04678fc14816c53e1b9251ea9207e) +--- + include/migration/vmstate.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/migration/vmstate.h | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h +index 95d1ce6..f2652e6 100644 +--- a/include/migration/vmstate.h ++++ b/include/migration/vmstate.h +@@ -202,6 +202,14 @@ extern const VMStateInfo vmstate_info_bitmap; + .offset = vmstate_offset_value(_state, _field, _type), \ + } + ++/* Validate state using a boolean predicate. */ ++#define VMSTATE_VALIDATE(_name, _test) { \ ++ .name = (_name), \ ++ .field_exists = (_test), \ ++ .flags = VMS_ARRAY | VMS_MUST_EXIST, \ ++ .num = 0, /* 0 elements: no data, only run _test */ \ ++} ++ + #define VMSTATE_POINTER(_field, _state, _version, _info, _type) { \ + .name = (stringify(_field)), \ + .version_id = (_version), \ +-- +1.7.1 + diff --git a/SOURCES/kvm-vmstate-add-VMS_MUST_EXIST.patch b/SOURCES/kvm-vmstate-add-VMS_MUST_EXIST.patch new file mode 100644 index 0000000..b5f39ae --- /dev/null +++ b/SOURCES/kvm-vmstate-add-VMS_MUST_EXIST.patch @@ -0,0 +1,76 @@ +From 0aa1a1886452bb26cc60ac482f70d0ef78b85165 Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:52:47 +0200 +Subject: [PATCH 21/31] vmstate: add VMS_MUST_EXIST + +RH-Author: Michael S. Tsirkin +Message-id: <1400057538-6975-3-git-send-email-mst@redhat.com> +Patchwork-id: 58869 +O-Subject: [PATCH qemu-kvm RHEL7.1 2/5] vmstate: add VMS_MUST_EXIST +Bugzilla: 1095716 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +Can be used to verify a required field exists or validate +state in some other way. + +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Dr. David Alan Gilbert +Signed-off-by: Juan Quintela +(cherry picked from commit 5bf81c8d63db0216a4d29dc87f9ce530bb791dd1) +--- + include/migration/vmstate.h | 1 + + savevm.c | 10 ++++++++++ + 2 files changed, 11 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + include/migration/vmstate.h | 1 + + savevm.c | 10 ++++++++++ + 2 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h +index 11d93e1..95d1ce6 100644 +--- a/include/migration/vmstate.h ++++ b/include/migration/vmstate.h +@@ -98,6 +98,7 @@ enum VMStateFlags { + VMS_MULTIPLY = 0x200, /* multiply "size" field by field_size */ + VMS_VARRAY_UINT8 = 0x400, /* Array with size in uint8_t field*/ + VMS_VARRAY_UINT32 = 0x800, /* Array with size in uint32_t field*/ ++ VMS_MUST_EXIST = 0x1000, /* Field must exist in input */ + }; + + typedef struct { +diff --git a/savevm.c b/savevm.c +index 707caac..94512dd 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -1764,6 +1764,10 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, + return ret; + } + } ++ } else if (field->flags & VMS_MUST_EXIST) { ++ fprintf(stderr, "Input validation failed: %s/%s\n", ++ vmsd->name, field->name); ++ return -1; + } + field++; + } +@@ -1804,6 +1808,12 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, + field->info->put(f, addr, size); + } + } ++ } else { ++ if (field->flags & VMS_MUST_EXIST) { ++ fprintf(stderr, "Output state validation failed: %s/%s\n", ++ vmsd->name, field->name); ++ assert(!(field->flags & VMS_MUST_EXIST)); ++ } + } + field++; + } +-- +1.7.1 + diff --git a/SOURCES/kvm-vmstate-reduce-code-duplication.patch b/SOURCES/kvm-vmstate-reduce-code-duplication.patch new file mode 100644 index 0000000..dbd6e84 --- /dev/null +++ b/SOURCES/kvm-vmstate-reduce-code-duplication.patch @@ -0,0 +1,159 @@ +From 2bf018e4c436e31188ea61fb767dbcec16495cfd Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Wed, 14 May 2014 08:52:43 +0200 +Subject: [PATCH 20/31] vmstate: reduce code duplication + +RH-Author: Michael S. Tsirkin +Message-id: <1400057538-6975-2-git-send-email-mst@redhat.com> +Patchwork-id: 58868 +O-Subject: [PATCH qemu-kvm RHEL7.1 1/5] vmstate: reduce code duplication +Bugzilla: 1095716 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Juan Quintela + +move size offset and number of elements math out +to functions, to reduce code duplication. + +Signed-off-by: Michael S. Tsirkin +Cc: "Dr. David Alan Gilbert" +Signed-off-by: Juan Quintela +(cherry picked from commit 35fc1f71899fd42323bd8f33da18f0211e0d2727) +--- + savevm.c | 100 +++++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 52 insertions(+), 48 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + savevm.c | 100 ++++++++++++++++++++++++++++++++----------------------------- + 1 files changed, 52 insertions(+), 48 deletions(-) + +diff --git a/savevm.c b/savevm.c +index 6efbb75..707caac 100644 +--- a/savevm.c ++++ b/savevm.c +@@ -1675,6 +1675,50 @@ static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd, + static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd, + void *opaque); + ++static int vmstate_n_elems(void *opaque, VMStateField *field) ++{ ++ int n_elems = 1; ++ ++ if (field->flags & VMS_ARRAY) { ++ n_elems = field->num; ++ } else if (field->flags & VMS_VARRAY_INT32) { ++ n_elems = *(int32_t *)(opaque+field->num_offset); ++ } else if (field->flags & VMS_VARRAY_UINT32) { ++ n_elems = *(uint32_t *)(opaque+field->num_offset); ++ } else if (field->flags & VMS_VARRAY_UINT16) { ++ n_elems = *(uint16_t *)(opaque+field->num_offset); ++ } else if (field->flags & VMS_VARRAY_UINT8) { ++ n_elems = *(uint8_t *)(opaque+field->num_offset); ++ } ++ ++ return n_elems; ++} ++ ++static int vmstate_size(void *opaque, VMStateField *field) ++{ ++ int size = field->size; ++ ++ if (field->flags & VMS_VBUFFER) { ++ size = *(int32_t *)(opaque+field->size_offset); ++ if (field->flags & VMS_MULTIPLY) { ++ size *= field->size; ++ } ++ } ++ ++ return size; ++} ++ ++static void *vmstate_base_addr(void *opaque, VMStateField *field) ++{ ++ void *base_addr = opaque + field->offset; ++ ++ if (field->flags & VMS_POINTER) { ++ base_addr = *(void **)base_addr + field->start; ++ } ++ ++ return base_addr; ++} ++ + int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, + void *opaque, int version_id) + { +@@ -1700,30 +1744,10 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, + field->field_exists(opaque, version_id)) || + (!field->field_exists && + field->version_id <= version_id)) { +- void *base_addr = opaque + field->offset; +- int i, n_elems = 1; +- int size = field->size; +- +- if (field->flags & VMS_VBUFFER) { +- size = *(int32_t *)(opaque+field->size_offset); +- if (field->flags & VMS_MULTIPLY) { +- size *= field->size; +- } +- } +- if (field->flags & VMS_ARRAY) { +- n_elems = field->num; +- } else if (field->flags & VMS_VARRAY_INT32) { +- n_elems = *(int32_t *)(opaque+field->num_offset); +- } else if (field->flags & VMS_VARRAY_UINT32) { +- n_elems = *(uint32_t *)(opaque+field->num_offset); +- } else if (field->flags & VMS_VARRAY_UINT16) { +- n_elems = *(uint16_t *)(opaque+field->num_offset); +- } else if (field->flags & VMS_VARRAY_UINT8) { +- n_elems = *(uint8_t *)(opaque+field->num_offset); +- } +- if (field->flags & VMS_POINTER) { +- base_addr = *(void **)base_addr + field->start; +- } ++ void *base_addr = vmstate_base_addr(opaque, field); ++ int i, n_elems = vmstate_n_elems(opaque, field); ++ int size = vmstate_size(opaque, field); ++ + for (i = 0; i < n_elems; i++) { + void *addr = base_addr + size * i; + +@@ -1764,30 +1788,10 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, + while(field->name) { + if (!field->field_exists || + field->field_exists(opaque, vmsd->version_id)) { +- void *base_addr = opaque + field->offset; +- int i, n_elems = 1; +- int size = field->size; +- +- if (field->flags & VMS_VBUFFER) { +- size = *(int32_t *)(opaque+field->size_offset); +- if (field->flags & VMS_MULTIPLY) { +- size *= field->size; +- } +- } +- if (field->flags & VMS_ARRAY) { +- n_elems = field->num; +- } else if (field->flags & VMS_VARRAY_INT32) { +- n_elems = *(int32_t *)(opaque+field->num_offset); +- } else if (field->flags & VMS_VARRAY_UINT32) { +- n_elems = *(uint32_t *)(opaque+field->num_offset); +- } else if (field->flags & VMS_VARRAY_UINT16) { +- n_elems = *(uint16_t *)(opaque+field->num_offset); +- } else if (field->flags & VMS_VARRAY_UINT8) { +- n_elems = *(uint8_t *)(opaque+field->num_offset); +- } +- if (field->flags & VMS_POINTER) { +- base_addr = *(void **)base_addr + field->start; +- } ++ void *base_addr = vmstate_base_addr(opaque, field); ++ int i, n_elems = vmstate_n_elems(opaque, field); ++ int size = vmstate_size(opaque, field); ++ + for (i = 0; i < n_elems; i++) { + void *addr = base_addr + size * i; + +-- +1.7.1 + diff --git a/SOURCES/kvm-vmstate-static-checker-script-to-validate-vmstate-ch.patch b/SOURCES/kvm-vmstate-static-checker-script-to-validate-vmstate-ch.patch new file mode 100644 index 0000000..116fc98 --- /dev/null +++ b/SOURCES/kvm-vmstate-static-checker-script-to-validate-vmstate-ch.patch @@ -0,0 +1,409 @@ +From 09e0354d2f25424042427ba8875a84f365a45ba9 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Fri, 11 Jul 2014 10:08:59 -0500 +Subject: [CHANGE 03/29] vmstate-static-checker: script to validate vmstate + changes +To: rhvirt-patches@redhat.com, + jen@redhat.com + +RH-Author: Amit Shah +Message-id: +Patchwork-id: 59783 +O-Subject: [RHEL7.1 qemu-kvm PATCH 02/18] vmstate-static-checker: script to validate vmstate changes +Bugzilla: 1118707 +RH-Acked-by: Juan Quintela +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Dr. David Alan Gilbert (git) + +This script compares the vmstate dumps in JSON format as output by QEMU +with the -dump-vmstate option. + +It flags various errors, like version mismatch, sections going away, +size mismatches, etc. + +This script is tolerant of a few changes that do not change the on-wire +format, like embedding a few fields within substructs. + +The script takes -s/--src and -d/--dest parameters, to which filenames +are given as arguments. + +Example: + +(in a qemu 2.0 tree): +./x86_64-softmmu/qemu-system-x86_64 -dump-vmstate qemu-2.0.json + +(in a qemu 2.2 tree:) +./x86_64-softmmu/qemu-system-x86_64 -dump-vmstate -M pc-i440fx-2.0 \ + qemu-2.2-m2.0.json + +./scripts/vmstate-static-checker.py -s qemu-2.0.json -d qemu-2.2-m2.0.json + +The script also takes a --reverse parameter to switch the src and dest +jsons. This is just a shorthand for reversing the src and dest. + +The --help parameter shows usage information. + +Signed-off-by: Amit Shah +Signed-off-by: Juan Quintela +(cherry picked from commit 426d1d016a494c978a513afcd03aa000fcbd5b3c) +Signed-off-by: Amit Shah +Signed-off-by: jen +--- + scripts/vmstate-static-checker.py | 345 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 345 insertions(+) + create mode 100755 scripts/vmstate-static-checker.py + +diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py +new file mode 100755 +index 0000000..1604e68 +--- /dev/null ++++ b/scripts/vmstate-static-checker.py +@@ -0,0 +1,345 @@ ++#!/usr/bin/python ++# ++# Compares vmstate information stored in JSON format, obtained from ++# the -dump-vmstate QEMU command. ++# ++# Copyright 2014 Amit Shah ++# Copyright 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License along ++# with this program; if not, see . ++ ++import argparse ++import json ++import sys ++ ++# Count the number of errors found ++taint = 0 ++ ++def bump_taint(): ++ global taint ++ ++ # Ensure we don't wrap around or reset to 0 -- the shell only has ++ # an 8-bit return value. ++ if taint < 255: ++ taint = taint + 1 ++ ++ ++def check_fields_match(name, s_field, d_field): ++ if s_field == d_field: ++ return True ++ ++ # Some fields changed names between qemu versions. This list ++ # is used to whitelist such changes in each section / description. ++ changed_names = { ++ 'e1000': ['dev', 'parent_obj'], ++ 'ehci': ['dev', 'pcidev'], ++ 'I440FX': ['dev', 'parent_obj'], ++ 'ich9_ahci': ['card', 'parent_obj'], ++ 'ioh-3240-express-root-port': ['port.br.dev', ++ 'parent_obj.parent_obj.parent_obj', ++ 'port.br.dev.exp.aer_log', ++ 'parent_obj.parent_obj.parent_obj.exp.aer_log'], ++ 'mch': ['d', 'parent_obj'], ++ 'pci_bridge': ['bridge.dev', 'parent_obj', 'bridge.dev.shpc', 'shpc'], ++ 'pcnet': ['pci_dev', 'parent_obj'], ++ 'PIIX3': ['pci_irq_levels', 'pci_irq_levels_vmstate'], ++ 'piix4_pm': ['dev', 'parent_obj', 'pci0_status', ++ 'acpi_pci_hotplug.acpi_pcihp_pci_status[0x0]'], ++ 'rtl8139': ['dev', 'parent_obj'], ++ 'qxl': ['num_surfaces', 'ssd.num_surfaces'], ++ 'usb-host': ['dev', 'parent_obj'], ++ 'usb-mouse': ['usb-ptr-queue', 'HIDPointerEventQueue'], ++ 'usb-tablet': ['usb-ptr-queue', 'HIDPointerEventQueue'], ++ 'xhci': ['pci_dev', 'parent_obj'], ++ 'xio3130-express-downstream-port': ['port.br.dev', ++ 'parent_obj.parent_obj.parent_obj', ++ 'port.br.dev.exp.aer_log', ++ 'parent_obj.parent_obj.parent_obj.exp.aer_log'], ++ 'xio3130-express-upstream-port': ['br.dev', 'parent_obj.parent_obj', ++ 'br.dev.exp.aer_log', ++ 'parent_obj.parent_obj.exp.aer_log'], ++ } ++ ++ if not name in changed_names: ++ return False ++ ++ if s_field in changed_names[name] and d_field in changed_names[name]: ++ return True ++ ++ return False ++ ++ ++def exists_in_substruct(fields, item): ++ # Some QEMU versions moved a few fields inside a substruct. This ++ # kept the on-wire format the same. This function checks if ++ # something got shifted inside a substruct. For example, the ++ # change in commit 1f42d22233b4f3d1a2933ff30e8d6a6d9ee2d08f ++ ++ if not "Description" in fields: ++ return False ++ ++ if not "Fields" in fields["Description"]: ++ return False ++ ++ substruct_fields = fields["Description"]["Fields"] ++ ++ if substruct_fields == []: ++ return False ++ ++ return check_fields_match(fields["Description"]["name"], ++ substruct_fields[0]["field"], item) ++ ++ ++def check_fields(src_fields, dest_fields, desc, sec): ++ # This function checks for all the fields in a section. If some ++ # fields got embedded into a substruct, this function will also ++ # attempt to check inside the substruct. ++ ++ d_iter = iter(dest_fields) ++ s_iter = iter(src_fields) ++ ++ # Using these lists as stacks to store previous value of s_iter ++ # and d_iter, so that when time comes to exit out of a substruct, ++ # we can go back one level up and continue from where we left off. ++ ++ s_iter_list = [] ++ d_iter_list = [] ++ ++ advance_src = True ++ advance_dest = True ++ ++ while True: ++ if advance_src: ++ try: ++ s_item = s_iter.next() ++ except StopIteration: ++ if s_iter_list == []: ++ break ++ ++ s_iter = s_iter_list.pop() ++ continue ++ else: ++ # We want to avoid advancing just once -- when entering a ++ # dest substruct, or when exiting one. ++ advance_src = True ++ ++ if advance_dest: ++ try: ++ d_item = d_iter.next() ++ except StopIteration: ++ if d_iter_list == []: ++ # We were not in a substruct ++ print "Section \"" + sec + "\",", ++ print "Description " + "\"" + desc + "\":", ++ print "expected field \"" + s_item["field"] + "\",", ++ print "while dest has no further fields" ++ bump_taint() ++ break ++ ++ d_iter = d_iter_list.pop() ++ advance_src = False ++ continue ++ else: ++ advance_dest = True ++ ++ if not check_fields_match(desc, s_item["field"], d_item["field"]): ++ # Some fields were put in substructs, keeping the ++ # on-wire format the same, but breaking static tools ++ # like this one. ++ ++ # First, check if dest has a new substruct. ++ if exists_in_substruct(d_item, s_item["field"]): ++ # listiterators don't have a prev() function, so we ++ # have to store our current location, descend into the ++ # substruct, and ensure we come out as if nothing ++ # happened when the substruct is over. ++ # ++ # Essentially we're opening the substructs that got ++ # added which didn't change the wire format. ++ d_iter_list.append(d_iter) ++ substruct_fields = d_item["Description"]["Fields"] ++ d_iter = iter(substruct_fields) ++ advance_src = False ++ continue ++ ++ # Next, check if src has substruct that dest removed ++ # (can happen in backward migration: 2.0 -> 1.5) ++ if exists_in_substruct(s_item, d_item["field"]): ++ s_iter_list.append(s_iter) ++ substruct_fields = s_item["Description"]["Fields"] ++ s_iter = iter(substruct_fields) ++ advance_dest = False ++ continue ++ ++ print "Section \"" + sec + "\",", ++ print "Description \"" + desc + "\":", ++ print "expected field \"" + s_item["field"] + "\",", ++ print "got \"" + d_item["field"] + "\"; skipping rest" ++ bump_taint() ++ break ++ ++ check_version(s_item, d_item, sec, desc) ++ ++ if not "Description" in s_item: ++ # Check size of this field only if it's not a VMSTRUCT entry ++ check_size(s_item, d_item, sec, desc, s_item["field"]) ++ ++ check_description_in_list(s_item, d_item, sec, desc) ++ ++ ++def check_subsections(src_sub, dest_sub, desc, sec): ++ for s_item in src_sub: ++ found = False ++ for d_item in dest_sub: ++ if s_item["name"] != d_item["name"]: ++ continue ++ ++ found = True ++ check_descriptions(s_item, d_item, sec) ++ ++ if not found: ++ print "Section \"" + sec + "\", Description \"" + desc + "\":", ++ print "Subsection \"" + s_item["name"] + "\" not found" ++ bump_taint() ++ ++ ++def check_description_in_list(s_item, d_item, sec, desc): ++ if not "Description" in s_item: ++ return ++ ++ if not "Description" in d_item: ++ print "Section \"" + sec + "\", Description \"" + desc + "\",", ++ print "Field \"" + s_item["field"] + "\": missing description" ++ bump_taint() ++ return ++ ++ check_descriptions(s_item["Description"], d_item["Description"], sec) ++ ++ ++def check_descriptions(src_desc, dest_desc, sec): ++ check_version(src_desc, dest_desc, sec, src_desc["name"]) ++ ++ if not check_fields_match(sec, src_desc["name"], dest_desc["name"]): ++ print "Section \"" + sec + "\":", ++ print "Description \"" + src_desc["name"] + "\"", ++ print "missing, got \"" + dest_desc["name"] + "\" instead; skipping" ++ bump_taint() ++ return ++ ++ for f in src_desc: ++ if not f in dest_desc: ++ print "Section \"" + sec + "\"", ++ print "Description \"" + src_desc["name"] + "\":", ++ print "Entry \"" + f + "\" missing" ++ bump_taint() ++ continue ++ ++ if f == 'Fields': ++ check_fields(src_desc[f], dest_desc[f], src_desc["name"], sec) ++ ++ if f == 'Subsections': ++ check_subsections(src_desc[f], dest_desc[f], src_desc["name"], sec) ++ ++ ++def check_version(s, d, sec, desc=None): ++ if s["version_id"] > d["version_id"]: ++ print "Section \"" + sec + "\"", ++ if desc: ++ print "Description \"" + desc + "\":", ++ print "version error:", s["version_id"], ">", d["version_id"] ++ bump_taint() ++ ++ if not "minimum_version_id" in d: ++ return ++ ++ if s["version_id"] < d["minimum_version_id"]: ++ print "Section \"" + sec + "\"", ++ if desc: ++ print "Description \"" + desc + "\":", ++ print "minimum version error:", s["version_id"], "<", ++ print d["minimum_version_id"] ++ bump_taint() ++ ++ ++def check_size(s, d, sec, desc=None, field=None): ++ if s["size"] != d["size"]: ++ print "Section \"" + sec + "\"", ++ if desc: ++ print "Description \"" + desc + "\"", ++ if field: ++ print "Field \"" + field + "\"", ++ print "size mismatch:", s["size"], ",", d["size"] ++ bump_taint() ++ ++ ++def check_machine_type(s, d): ++ if s["Name"] != d["Name"]: ++ print "Warning: checking incompatible machine types:", ++ print "\"" + s["Name"] + "\", \"" + d["Name"] + "\"" ++ return ++ ++ ++def main(): ++ help_text = "Parse JSON-formatted vmstate dumps from QEMU in files SRC and DEST. Checks whether migration from SRC to DEST QEMU versions would break based on the VMSTATE information contained within the JSON outputs. The JSON output is created from a QEMU invocation with the -dump-vmstate parameter and a filename argument to it. Other parameters to QEMU do not matter, except the -M (machine type) parameter." ++ ++ parser = argparse.ArgumentParser(description=help_text) ++ parser.add_argument('-s', '--src', type=file, required=True, ++ help='json dump from src qemu') ++ parser.add_argument('-d', '--dest', type=file, required=True, ++ help='json dump from dest qemu') ++ parser.add_argument('--reverse', required=False, default=False, ++ action='store_true', ++ help='reverse the direction') ++ args = parser.parse_args() ++ ++ src_data = json.load(args.src) ++ dest_data = json.load(args.dest) ++ args.src.close() ++ args.dest.close() ++ ++ if args.reverse: ++ temp = src_data ++ src_data = dest_data ++ dest_data = temp ++ ++ for sec in src_data: ++ if not sec in dest_data: ++ print "Section \"" + sec + "\" does not exist in dest" ++ bump_taint() ++ continue ++ ++ s = src_data[sec] ++ d = dest_data[sec] ++ ++ if sec == "vmschkmachine": ++ check_machine_type(s, d) ++ continue ++ ++ check_version(s, d, sec) ++ ++ for entry in s: ++ if not entry in d: ++ print "Section \"" + sec + "\": Entry \"" + entry + "\"", ++ print "missing" ++ bump_taint() ++ continue ++ ++ if entry == "Description": ++ check_descriptions(s[entry], d[entry], sec) ++ ++ return taint ++ ++ ++if __name__ == '__main__': ++ sys.exit(main()) +-- +1.9.3 + diff --git a/SOURCES/kvm-vmstate_xhci_event-bug-compat-with-RHEL-7.0-RHEL-onl.patch b/SOURCES/kvm-vmstate_xhci_event-bug-compat-with-RHEL-7.0-RHEL-onl.patch new file mode 100644 index 0000000..f95a245 --- /dev/null +++ b/SOURCES/kvm-vmstate_xhci_event-bug-compat-with-RHEL-7.0-RHEL-onl.patch @@ -0,0 +1,143 @@ +From 713d4d69d84774949c7306289724c2463dbeab1d Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 1 Sep 2014 13:36:53 +0200 +Subject: [PATCH 06/12] vmstate_xhci_event: bug compat with RHEL-7.0 (RHEL only) + +Message-id: <1409578613-11909-3-git-send-email-lersek@redhat.com> +Patchwork-id: 60782 +O-Subject: [PATCH RHEL-7.0.z/RHEL-7.1.0 qemu-kvm 2/2] vmstate_xhci_event: bug compat with RHEL-7.0 (RHEL only) +Bugzilla: 1122147 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Amit Shah +RH-Acked-by: Paolo Bonzini + +The "vmstate_xhci_event.fields" member is a pointer to an array of +VMStateField elements. The unnamed array (of static storage duration) +comes from a compound literal. The previous patch fixed the undefined +behavior by adding a terminator element to this array, but in RHEL-7 we +also need to look into the practical details of that undefined behavior. + +In debug builds (./configure --enable-debug), the compiler places the +"vmstate_xhci_intr.fields" member's unnamed initializer array right after +the "vmstate_xhci_event.fields" member's. This leads to infinite recursion +(see the previous patch for details), but in RHEL-7 we don't ship debug +builds. + +In a normal (optimized, official) build, the layout changes. The +"vmstate_xhci_event.fields" member's unterminated initializer array is +followed by the one of the "vmstate_xhci_slot.fields" member: + + (gdb) print (intptr_t)&vmstate_xhci_event.fields[7] - \ + (intptr_t)&vmstate_xhci_slot.fields[0] + $3 = 0 + +where "vmstate_xhci_slot.fields" is initialized from + + .fields = (VMStateField[]) { + VMSTATE_BOOL(enabled, XHCISlot), + VMSTATE_BOOL(addressed, XHCISlot), + VMSTATE_END_OF_LIST() + } + +The elements of this array are (only relevant members quoted): + + (gdb) print vmstate_xhci_slot.fields[0].offset + $16 = 0 + (gdb) print vmstate_xhci_slot.fields[0].size + $17 = 1 + (gdb) print vmstate_xhci_slot.fields[1].offset + $18 = 1 + (gdb) print vmstate_xhci_slot.fields[1].size + $19 = 1 + +This means that the wire format for "vmstate_xhci_event" will include the +byte at offset 0 and the byte at offset 1 from XHCIEvent, corresponding to +part of the "XHCIEvent.type" member: + + (gdb) print vmstate_xhci_event.fields[0].name + $23 = 0x5555558b12e7 "type" + (gdb) print vmstate_xhci_event.fields[0].offset + $24 = 0 + (gdb) print vmstate_xhci_event.fields[0].size + $25 = 4 + +In order to accommodate these bogus bytes, coming from an unpatched source +side, we introduce two dummy XHCIEvent fields; otherwise the patched +destination would reject the migration stream. + +For the reverse direction, we explicitly set the dummy bytes to the values +that they used to take in an unpatched source, so that when the unpatched +destination deserializes them into part of "XHCIEvent.type", said victim +member still receives a correct value. + +The dummy fields have type uint8_t, not bool. The reason is that +assignment to bool (in xhci_event_pre_save()) would entail conversion to +bool, hence result in values 0 or 1. (See _Bool conversion rules and +.) + +RHEL-only because we control the compiler version and the build flags only +in RHEL. + +This is for CVE-2014-5263. + +Suggested-by: Amit Shah +Suggested-by: Dr. David Alan Gilbert +Suggested-by: Markus Armbruster +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 27 ++++++++++++++++++++------- + 1 files changed, 20 insertions(+), 7 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 0ef2bc4..2c9e36a 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -420,6 +420,8 @@ typedef struct XHCIEvent { + uint32_t flags; + uint8_t slotid; + uint8_t epid; ++ uint8_t cve_2014_5263_a; ++ uint8_t cve_2014_5263_b; + } XHCIEvent; + + typedef struct XHCIInterrupter { +@@ -3515,17 +3517,28 @@ static const VMStateDescription vmstate_xhci_slot = { + } + }; + ++static void xhci_event_pre_save(void *opaque) ++{ ++ XHCIEvent *s = opaque; ++ ++ s->cve_2014_5263_a = ((uint8_t *)&s->type)[0]; ++ s->cve_2014_5263_b = ((uint8_t *)&s->type)[1]; ++} ++ + static const VMStateDescription vmstate_xhci_event = { + .name = "xhci-event", + .version_id = 1, ++ .pre_save = xhci_event_pre_save, + .fields = (VMStateField[]) { +- VMSTATE_UINT32(type, XHCIEvent), +- VMSTATE_UINT32(ccode, XHCIEvent), +- VMSTATE_UINT64(ptr, XHCIEvent), +- VMSTATE_UINT32(length, XHCIEvent), +- VMSTATE_UINT32(flags, XHCIEvent), +- VMSTATE_UINT8(slotid, XHCIEvent), +- VMSTATE_UINT8(epid, XHCIEvent), ++ VMSTATE_UINT32(type, XHCIEvent), ++ VMSTATE_UINT32(ccode, XHCIEvent), ++ VMSTATE_UINT64(ptr, XHCIEvent), ++ VMSTATE_UINT32(length, XHCIEvent), ++ VMSTATE_UINT32(flags, XHCIEvent), ++ VMSTATE_UINT8(slotid, XHCIEvent), ++ VMSTATE_UINT8(epid, XHCIEvent), ++ VMSTATE_UINT8(cve_2014_5263_a, XHCIEvent), ++ VMSTATE_UINT8(cve_2014_5263_b, XHCIEvent), + VMSTATE_END_OF_LIST() + } + }; +-- +1.7.1 + diff --git a/SOURCES/kvm-vmstate_xhci_event-fix-unterminated-field-list.patch b/SOURCES/kvm-vmstate_xhci_event-fix-unterminated-field-list.patch new file mode 100644 index 0000000..1b7c52f --- /dev/null +++ b/SOURCES/kvm-vmstate_xhci_event-fix-unterminated-field-list.patch @@ -0,0 +1,64 @@ +From 00beaa541050bcbf399e116772db3746cb0c0278 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 1 Sep 2014 13:36:52 +0200 +Subject: [PATCH 05/12] vmstate_xhci_event: fix unterminated field list + +Message-id: <1409578613-11909-2-git-send-email-lersek@redhat.com> +Patchwork-id: 60781 +O-Subject: [PATCH RHEL-7.0.z/RHEL-7.1.0 qemu-kvm 1/2] vmstate_xhci_event: fix unterminated field list +Bugzilla: 1122147 +RH-Acked-by: Amit Shah +RH-Acked-by: Juan Quintela +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Gerd Hoffmann + +"vmstate_xhci_event" was introduced in commit 37352df3 ("xhci: add live +migration support"), and first released in v1.6.0. The field list in this +VMSD is not terminated with the VMSTATE_END_OF_LIST() macro. + +During normal use (ie. migration), the issue is practically invisible, +because the "vmstate_xhci_event" object (with the unterminated field list) +is only ever referenced -- via "vmstate_xhci_intr" -- if xhci_er_full() +returns true, for the "ev_buffer" test. Since that field_exists() check +(apparently) almost always returns false, we almost never traverse +"vmstate_xhci_event" during migration, which hides the bug. + +However, Amit's vmstate checker forces recursion into this VMSD as well, +and the lack of VMSTATE_END_OF_LIST() breaks the field list terminator +check (field->name != NULL) in dump_vmstate_vmsd(). The result is +undefined behavior, which in my case translates to infinite recursion +(because the loop happens to overflow into "vmstate_xhci_intr", which then +links back to "vmstate_xhci_event"). + +Add the missing terminator. + +Signed-off-by: Laszlo Ersek +Reviewed-by: Amit Shah +Reviewed-by: Paolo Bonzini +Cc: qemu-stable@nongnu.org +Signed-off-by: Peter Maydell +(cherry picked from commit 3afca1d6d413592c2b78cf28f52fa24a586d8f56) + +RHEL-7 note: this is for CVE-2014-5263. + +Signed-off-by: Laszlo Ersek +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index fd1bd89..0ef2bc4 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -3526,6 +3526,7 @@ static const VMStateDescription vmstate_xhci_event = { + VMSTATE_UINT32(flags, XHCIEvent), + VMSTATE_UINT8(slotid, XHCIEvent), + VMSTATE_UINT8(epid, XHCIEvent), ++ VMSTATE_END_OF_LIST() + } + }; + +-- +1.7.1 + diff --git a/SOURCES/kvm-vnc-Fix-qemu-crashed-when-vnc-client-disconnect-sudd.patch b/SOURCES/kvm-vnc-Fix-qemu-crashed-when-vnc-client-disconnect-sudd.patch new file mode 100644 index 0000000..985a389 --- /dev/null +++ b/SOURCES/kvm-vnc-Fix-qemu-crashed-when-vnc-client-disconnect-sudd.patch @@ -0,0 +1,70 @@ +From 74eb4b3e1fcc6d36de0116c2fbbaa308191a1ab7 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:15 +0100 +Subject: [PATCH 01/27] vnc: Fix qemu crashed when vnc client disconnect + suddenly + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-2-berrange@redhat.com> +Patchwork-id: 78947 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 01/27] vnc: Fix qemu crashed when vnc client disconnect suddenly +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: "Gonglei (Arei)" + +Hi, + +When I use RealVNC viewer client (http://www.realvnc.com/) to connect vnc server, +the client disconnect suddenly, and I click reconnect button immediately, then the Qemu crashed. + +In the function vnc_worker_thread_loop, will call vnc_async_encoding_start +to set the local vs->output buffer by global queue's buffer. Then send rectangles to +the vnc client call function vnc_send_framebuffer_update. Finally, Under normal circumstances, +call vnc_async_encoding_end to set the global queue'buffer by the local vs->output conversely. + +When the vnc client disconnect, the job->vs->csock will be set to -1. And the current prcoess +logic will goto disconnected partion without call function vnc_async_encoding_end. +But, the function vnc_send_framebuffer_update will call buffer_reserve, which +maybe call g_realloc reset the local vs's buffer, meaning the global queue's buffer is modified also. +If anyone use the original global queue's buffer memory will cause corruption and then crash qemu. + +This patch assure the function vnc_async_encoding_end being called +even though the vnc client disconnect suddenly. + +Signed-off-by: Gonglei +Signed-off-by: Gerd Hoffmann +(cherry picked from commit e3c1adf16e38714ebd761dd02517dd07760ba6d2) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-jobs.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c +index 2d3fce8..a141f40 100644 +--- a/ui/vnc-jobs.c ++++ b/ui/vnc-jobs.c +@@ -252,6 +252,8 @@ static int vnc_worker_thread_loop(VncJobQueue *queue) + + if (job->vs->csock == -1) { + vnc_unlock_display(job->vs->vd); ++ /* Copy persistent encoding data */ ++ vnc_async_encoding_end(job->vs, &vs); + goto disconnected; + } + +@@ -278,6 +280,9 @@ static int vnc_worker_thread_loop(VncJobQueue *queue) + vnc_async_encoding_end(job->vs, &vs); + + qemu_bh_schedule(job->vs->bh); ++ } else { ++ /* Copy persistent encoding data */ ++ vnc_async_encoding_end(job->vs, &vs); + } + vnc_unlock_output(job->vs); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-add-vnc_width-vnc_height-helpers.patch b/SOURCES/kvm-vnc-add-vnc_width-vnc_height-helpers.patch new file mode 100644 index 0000000..0ca2313 --- /dev/null +++ b/SOURCES/kvm-vnc-add-vnc_width-vnc_height-helpers.patch @@ -0,0 +1,63 @@ +From 2f0eb4848baaa020132d5848a5d05e9db55fb15c Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:24 +0100 +Subject: [PATCH 10/27] vnc: add vnc_width+vnc_height helpers + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-11-berrange@redhat.com> +Patchwork-id: 78943 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 10/27] vnc: add vnc_width+vnc_height helpers +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-12-git-send-email-kraxel@redhat.com +(cherry picked from commit d05959c2e111858bb83c40ae5d8b8c10964b7bb0) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 9923d24..c3f29df 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -426,6 +426,17 @@ static void framebuffer_update_request(VncState *vs, int incremental, + static void vnc_refresh(DisplayChangeListener *dcl); + static int vnc_refresh_server_surface(VncDisplay *vd); + ++static int vnc_width(VncDisplay *vd) ++{ ++ return MIN(VNC_MAX_WIDTH, ROUND_UP(surface_width(vd->ds), ++ VNC_DIRTY_PIXELS_PER_BIT)); ++} ++ ++static int vnc_height(VncDisplay *vd) ++{ ++ return MIN(VNC_MAX_HEIGHT, surface_height(vd->ds)); ++} ++ + static void vnc_set_area_dirty(DECLARE_BITMAP(dirty[VNC_MAX_HEIGHT], + VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT), + int width, int height, +@@ -614,9 +625,8 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + /* server surface */ + qemu_pixman_image_unref(vd->server); + vd->ds = surface; +- width = MIN(VNC_MAX_WIDTH, ROUND_UP(surface_width(vd->ds), +- VNC_DIRTY_PIXELS_PER_BIT)); +- height = MIN(VNC_MAX_HEIGHT, surface_height(vd->ds)); ++ width = vnc_width(vd); ++ height = vnc_height(vd); + vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT, + width, height, NULL, 0); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-allow-to-connect-with-add_client-when-vnc-none.patch b/SOURCES/kvm-vnc-allow-to-connect-with-add_client-when-vnc-none.patch new file mode 100644 index 0000000..15c6a89 --- /dev/null +++ b/SOURCES/kvm-vnc-allow-to-connect-with-add_client-when-vnc-none.patch @@ -0,0 +1,55 @@ +From d8e67658b944a2b0f235c4384909c2efce4671bd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Fri, 9 Jun 2017 14:23:37 +0200 +Subject: [PATCH 1/4] vnc: allow to connect with add_client when -vnc none +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Marc-André Lureau +Message-id: <20170609142337.10457-1-marcandre.lureau@redhat.com> +Patchwork-id: 75568 +O-Subject: [RHEL-7.4 qemu-kvm PATCH] vnc: allow to connect with add_client when -vnc none +Bugzilla: 1435352 +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Laurent Vivier +RH-Acked-by: Laszlo Ersek + +Do not skip VNC initialization, in particular of auth method when vnc is +configured without sockets, since we should still allow connections +through QMP add_client. + +Upstream-status: similar to commit fa03cb7fd212. However, the upstream +code changed significantly, so the patch is different. + +Signed-off-by: Marc-André Lureau +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 1834db0..29b216c 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -2993,8 +2993,6 @@ void vnc_display_open(DisplayState *ds, const char *display, Error **errp) + return; + } + vnc_display_close(ds); +- if (strcmp(display, "none") == 0) +- return; + + vs->display = g_strdup(display); + vs->share_policy = VNC_SHARE_POLICY_ALLOW_EXCLUSIVE; +@@ -3219,7 +3217,7 @@ void vnc_display_open(DisplayState *ds, const char *display, Error **errp) + goto fail; + } + vnc_connect(vs, csock, 0, 0); +- } else { ++ } else if (strcmp(display, "none")) { + /* listen for connects */ + char *dpy; + dpy = g_malloc(256); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-factor-out-vnc_update_server_surface.patch b/SOURCES/kvm-vnc-factor-out-vnc_update_server_surface.patch new file mode 100644 index 0000000..5f1f35a --- /dev/null +++ b/SOURCES/kvm-vnc-factor-out-vnc_update_server_surface.patch @@ -0,0 +1,75 @@ +From cf12dd3eb8a9c18fbccbe01cfcf8290d483becee Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:25 +0100 +Subject: [PATCH 11/27] vnc: factor out vnc_update_server_surface + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-12-berrange@redhat.com> +Patchwork-id: 78952 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 11/27] vnc: factor out vnc_update_server_surface +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-13-git-send-email-kraxel@redhat.com +(cherry picked from commit 453f842bc4cab49f10c267cff9ad3cf657265d49) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 21 +++++++++++++++------ + 1 file changed, 15 insertions(+), 6 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index c3f29df..38e0f1a 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -613,6 +613,17 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y) + return ptr; + } + ++static void vnc_update_server_surface(VncDisplay *vd) ++{ ++ qemu_pixman_image_unref(vd->server); ++ vd->server = NULL; ++ ++ vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT, ++ vnc_width(vd), ++ vnc_height(vd), ++ NULL, 0); ++} ++ + static void vnc_dpy_switch(DisplayChangeListener *dcl, + DisplaySurface *surface) + { +@@ -621,19 +632,17 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + int width, height; + + vnc_abort_display_jobs(vd); ++ vd->ds = surface; + + /* server surface */ +- qemu_pixman_image_unref(vd->server); +- vd->ds = surface; +- width = vnc_width(vd); +- height = vnc_height(vd); +- vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT, +- width, height, NULL, 0); ++ vnc_update_server_surface(vd); + + /* guest surface */ + qemu_pixman_image_unref(vd->guest.fb); + vd->guest.fb = pixman_image_ref(surface->image); + vd->guest.format = surface->format; ++ width = vnc_width(vd); ++ height = vnc_height(vd); + memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty)); + vnc_set_area_dirty(vd->guest.dirty, width, height, 0, 0, + width, height); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-fix-memory-corruption-CVE-2015-5225.patch b/SOURCES/kvm-vnc-fix-memory-corruption-CVE-2015-5225.patch new file mode 100644 index 0000000..0808fa3 --- /dev/null +++ b/SOURCES/kvm-vnc-fix-memory-corruption-CVE-2015-5225.patch @@ -0,0 +1,93 @@ +From e543257370cce5153bbcf0085a116e6aa4a6d91b Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:25 +0100 +Subject: [PATCH 07/24] vnc: fix memory corruption (CVE-2015-5225) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-8-git-send-email-kraxel@redhat.com> +Patchwork-id: 73978 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 7/8] vnc: fix memory corruption (CVE-2015-5225) +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +The _cmp_bytes variable added by commit "bea60dd ui/vnc: fix potential +memory corruption issues" can become negative. Result is (possibly +exploitable) memory corruption. Reason for that is it uses the stride +instead of bytes per scanline to apply limits. + +For the server surface is is actually fine. vnc creates that itself, +there is never any padding and thus scanline length always equals stride. + +For the guest surface scanline length and stride are typically identical +too, but it doesn't has to be that way. So add and use a new variable +(guest_ll) for the guest scanline length. Also rename min_stride to +line_bytes to make more clear what it actually is. Finally sprinkle +in an assert() to make sure we never use a negative _cmp_bytes again. + +Reported-by: 范祚至(库特) +Reviewed-by: P J P +Signed-off-by: Gerd Hoffmann +(cherry picked from commit eb8934b0418b3b1d125edddc4fc334a54334a49b) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 80b7792..d0ada7e 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -2676,7 +2676,7 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + pixman_image_get_width(vd->server)); + int height = MIN(pixman_image_get_height(vd->guest.fb), + pixman_image_get_height(vd->server)); +- int cmp_bytes, server_stride, min_stride, guest_stride, y = 0; ++ int cmp_bytes, server_stride, line_bytes, guest_ll, guest_stride, y = 0; + uint8_t *guest_row0 = NULL, *server_row0; + VncState *vs; + int has_dirty = 0; +@@ -2695,17 +2695,21 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + * Update server dirty map. + */ + server_row0 = (uint8_t *)pixman_image_get_data(vd->server); +- server_stride = guest_stride = pixman_image_get_stride(vd->server); ++ server_stride = guest_stride = guest_ll = ++ pixman_image_get_stride(vd->server); + cmp_bytes = MIN(VNC_DIRTY_PIXELS_PER_BIT * VNC_SERVER_FB_BYTES, + server_stride); + if (vd->guest.format != VNC_SERVER_FB_FORMAT) { + int width = pixman_image_get_width(vd->server); + tmpbuf = qemu_pixman_linebuf_create(VNC_SERVER_FB_FORMAT, width); + } else { ++ int guest_bpp = ++ PIXMAN_FORMAT_BPP(pixman_image_get_format(vd->guest.fb)); + guest_row0 = (uint8_t *)pixman_image_get_data(vd->guest.fb); + guest_stride = pixman_image_get_stride(vd->guest.fb); ++ guest_ll = pixman_image_get_width(vd->guest.fb) * ((guest_bpp + 7) / 8); + } +- min_stride = MIN(server_stride, guest_stride); ++ line_bytes = MIN(server_stride, guest_ll); + + for (;;) { + int x; +@@ -2736,9 +2740,10 @@ static int vnc_refresh_server_surface(VncDisplay *vd) + if (!test_and_clear_bit(x, vd->guest.dirty[y])) { + continue; + } +- if ((x + 1) * cmp_bytes > min_stride) { +- _cmp_bytes = min_stride - x * cmp_bytes; ++ if ((x + 1) * cmp_bytes > line_bytes) { ++ _cmp_bytes = line_bytes - x * cmp_bytes; + } ++ assert(_cmp_bytes >= 0); + if (memcmp(server_ptr, guest_ptr, _cmp_bytes) == 0) { + continue; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-fix-overflow-in-vnc_update_stats.patch b/SOURCES/kvm-vnc-fix-overflow-in-vnc_update_stats.patch new file mode 100644 index 0000000..db0c181 --- /dev/null +++ b/SOURCES/kvm-vnc-fix-overflow-in-vnc_update_stats.patch @@ -0,0 +1,56 @@ +From 8c2d53ffb72c574d0c81e2c86115a18598e66c65 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 22 Feb 2017 12:36:26 +0100 +Subject: [PATCH 08/24] vnc: fix overflow in vnc_update_stats +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +RH-Author: Gerd Hoffmann +Message-id: <1487766986-6329-9-git-send-email-kraxel@redhat.com> +Patchwork-id: 73975 +O-Subject: [RHEL-7.4 qemu-kvm PATCH 8/8] vnc: fix overflow in vnc_update_stats +Bugzilla: 1377977 +RH-Acked-by: Thomas Huth +RH-Acked-by: Marc-André Lureau +RH-Acked-by: Laurent Vivier + +Commit "bea60dd ui/vnc: fix potential memory corruption issues" is +incomplete. vnc_update_stats must calculate width and height the same +way vnc_refresh_server_surface does it, to make sure we don't use width +and height values larger than the qemu vnc server can handle. + +Commit "e22492d ui/vnc: disable adaptive update calculations if not +needed" masks the issue in the default configuration. It triggers only +in case the "lossy" option is set to "on" (default is "off"). + +Cc: Marc-André Lureau +Signed-off-by: Gerd Hoffmann +Reviewed-by: Marc-André Lureau +Message-id: 1485248428-575-1-git-send-email-kraxel@redhat.com +(cherry picked from commit eebe0b7905642a986cbce7406d6ab7bf78f3e210) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index d0ada7e..b68918e 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -2581,8 +2581,10 @@ static int vnc_refresh_lossy_rect(VncDisplay *vd, int x, int y) + + static int vnc_update_stats(VncDisplay *vd, struct timeval * tv) + { +- int width = pixman_image_get_width(vd->guest.fb); +- int height = pixman_image_get_height(vd->guest.fb); ++ int width = MIN(pixman_image_get_width(vd->guest.fb), ++ pixman_image_get_width(vd->server)); ++ int height = MIN(pixman_image_get_height(vd->guest.fb), ++ pixman_image_get_height(vd->server)); + int x, y; + struct timeval res; + int has_dirty = 0; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-jobs-move-buffer-reset-use-new-buffer-move.patch b/SOURCES/kvm-vnc-jobs-move-buffer-reset-use-new-buffer-move.patch new file mode 100644 index 0000000..f67e2f2 --- /dev/null +++ b/SOURCES/kvm-vnc-jobs-move-buffer-reset-use-new-buffer-move.patch @@ -0,0 +1,114 @@ +From 22f72cfdac645ac7a47289dbada48a116d19d42d Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:22 +0100 +Subject: [PATCH 08/27] vnc-jobs: move buffer reset, use new buffer move + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-9-berrange@redhat.com> +Patchwork-id: 78938 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 08/27] vnc-jobs: move buffer reset, use new buffer move +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-10-git-send-email-kraxel@redhat.com +(cherry picked from commit d90340115a3569caa72063775ff927f4dc353551) + + Conflicts: + ui/vnc-jobs.c - context differences + ui/vnc.{c.h} - make buffer_empty non-static since we don't + have util/buffer.{c,h} yet + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-jobs.c | 15 ++++++++------- + ui/vnc.c | 2 +- + ui/vnc.h | 1 + + 3 files changed, 10 insertions(+), 8 deletions(-) + +diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c +index a6dfdf6..e553bd9 100644 +--- a/ui/vnc-jobs.c ++++ b/ui/vnc-jobs.c +@@ -29,6 +29,7 @@ + #include "vnc.h" + #include "vnc-jobs.h" + #include "qemu/sockets.h" ++#include "qemu/main-loop.h" + + /* + * Locking: +@@ -164,8 +165,11 @@ void vnc_jobs_consume_buffer(VncState *vs) + + vnc_lock_output(vs); + if (vs->jobs_buffer.offset) { +- vnc_write(vs, vs->jobs_buffer.buffer, vs->jobs_buffer.offset); +- buffer_reset(&vs->jobs_buffer); ++ if (vs->csock != -1 && buffer_empty(&vs->output)) { ++ qemu_set_fd_handler(vs->csock, vnc_client_read, ++ vnc_client_write, vs); ++ } ++ buffer_move(&vs->output, &vs->jobs_buffer); + } + flush = vs->csock != -1 && vs->abort != true; + vnc_unlock_output(vs); +@@ -192,8 +196,6 @@ static void vnc_async_encoding_start(VncState *orig, VncState *local) + local->hextile = orig->hextile; + local->zrle = orig->zrle; + local->csock = -1; /* Don't do any network work on this thread */ +- +- buffer_reset(&local->output); + } + + static void vnc_async_encoding_end(VncState *orig, VncState *local) +@@ -269,14 +271,13 @@ static int vnc_worker_thread_loop(VncJobQueue *queue) + + vnc_lock_output(job->vs); + if (job->vs->csock != -1) { +- buffer_reserve(&job->vs->jobs_buffer, vs.output.offset); +- buffer_append(&job->vs->jobs_buffer, vs.output.buffer, +- vs.output.offset); ++ buffer_move(&job->vs->jobs_buffer, &vs.output); + /* Copy persistent encoding data */ + vnc_async_encoding_end(job->vs, &vs); + + qemu_bh_schedule(job->vs->bh); + } else { ++ buffer_reset(&vs.output); + /* Copy persistent encoding data */ + vnc_async_encoding_end(job->vs, &vs); + } +diff --git a/ui/vnc.c b/ui/vnc.c +index 95457ad..ebb6484 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -480,7 +480,7 @@ void buffer_reserve(Buffer *buffer, size_t len) + } + } + +-static int buffer_empty(Buffer *buffer) ++int buffer_empty(Buffer *buffer) + { + return buffer->offset == 0; + } +diff --git a/ui/vnc.h b/ui/vnc.h +index 703fef9..d8465ba 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -547,6 +547,7 @@ void buffer_reset(Buffer *buffer); + void buffer_free(Buffer *buffer); + void buffer_append(Buffer *buffer, const void *data, size_t len); + void buffer_advance(Buffer *buf, size_t len); ++int buffer_empty(Buffer *buffer); + uint8_t *buffer_end(Buffer *buffer); + void buffer_move_empty(Buffer *to, Buffer *from); + void buffer_move(Buffer *to, Buffer *from); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-kill-jobs-queue-buffer.patch b/SOURCES/kvm-vnc-kill-jobs-queue-buffer.patch new file mode 100644 index 0000000..32b1cd3 --- /dev/null +++ b/SOURCES/kvm-vnc-kill-jobs-queue-buffer.patch @@ -0,0 +1,71 @@ +From 56d3fe342a9c8c8e832e59fc093515e99aa8f677 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:21 +0100 +Subject: [PATCH 07/27] vnc: kill jobs queue buffer + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-8-berrange@redhat.com> +Patchwork-id: 78939 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 07/27] vnc: kill jobs queue buffer +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +RHEL-7 note: the vnc_queue_init() hunk is missing from the downstream +patch because the buffer_init() call that the hunk removes only appeared +with upstream commit 543b95801f98 ("vnc: attach names to buffers", +2015-11-05), as part of v2.5.0. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-9-git-send-email-kraxel@redhat.com +(cherry picked from commit 8305f917c1bc86b1ead0fa9197b5443a4bd611f3) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc-jobs.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c +index a141f40..a6dfdf6 100644 +--- a/ui/vnc-jobs.c ++++ b/ui/vnc-jobs.c +@@ -53,7 +53,6 @@ struct VncJobQueue { + QemuCond cond; + QemuMutex mutex; + QemuThread thread; +- Buffer buffer; + bool exit; + QTAILQ_HEAD(, VncJob) jobs; + }; +@@ -192,7 +191,6 @@ static void vnc_async_encoding_start(VncState *orig, VncState *local) + local->zlib = orig->zlib; + local->hextile = orig->hextile; + local->zrle = orig->zrle; +- local->output = queue->buffer; + local->csock = -1; /* Don't do any network work on this thread */ + + buffer_reset(&local->output); +@@ -205,8 +203,6 @@ static void vnc_async_encoding_end(VncState *orig, VncState *local) + orig->hextile = local->hextile; + orig->zrle = local->zrle; + orig->lossy_rect = local->lossy_rect; +- +- queue->buffer = local->output; + } + + static int vnc_worker_thread_loop(VncJobQueue *queue) +@@ -309,7 +305,6 @@ static void vnc_queue_clear(VncJobQueue *q) + { + qemu_cond_destroy(&queue->cond); + qemu_mutex_destroy(&queue->mutex); +- buffer_free(&queue->buffer); + g_free(q); + queue = NULL; /* Unset global queue */ + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-only-alloc-server-surface-with-clients-connected.patch b/SOURCES/kvm-vnc-only-alloc-server-surface-with-clients-connected.patch new file mode 100644 index 0000000..84f98eb --- /dev/null +++ b/SOURCES/kvm-vnc-only-alloc-server-surface-with-clients-connected.patch @@ -0,0 +1,86 @@ +From e7fa743d920c9c201bcf1e42e2c0058249a5c1e5 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:27 +0100 +Subject: [PATCH 13/27] vnc: only alloc server surface with clients connected + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-14-berrange@redhat.com> +Patchwork-id: 78956 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 13/27] vnc: only alloc server surface with clients connected +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +RHEL-7 note: (a) the "graphic_hw_update(NULL)" call is different in the +upstream context due to commit 1d0d59fe2919 ("vnc: allow binding servers +to qemu consoles", 2015-01-22). That commit talks about "multiseat" and +is part of v2.3.0, so out of scope for this backport. (b) The +QTAILQ_INSERT_HEAD() macro invocation is QTAILQ_INSERT_TAIL() in the +upstream context, due to commit e5f34cdd2da5 ("vnc: track & +limit connections", 2015-01-22), part of v2.3.0. That commit is also +irrelevant for this backport. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-15-git-send-email-kraxel@redhat.com +(cherry picked from commit c7628bff4138ce906a3620d12e0820c1cf6c140d) + + Conflicts: + ui/vnc.c - context differences + +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/ui/vnc.c b/ui/vnc.c +index df081a5..dc09089 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -620,6 +620,10 @@ static void vnc_update_server_surface(VncDisplay *vd) + qemu_pixman_image_unref(vd->server); + vd->server = NULL; + ++ if (QTAILQ_EMPTY(&vd->clients)) { ++ return; ++ } ++ + vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT, + vnc_width(vd), + vnc_height(vd), +@@ -1019,6 +1023,10 @@ void vnc_disconnect_finish(VncState *vs) + if (vs->initialized) { + QTAILQ_REMOVE(&vs->vd->clients, vs, next); + qemu_remove_mouse_mode_change_notifier(&vs->mouse_mode_notifier); ++ if (QTAILQ_EMPTY(&vs->vd->clients)) { ++ /* last client gone */ ++ vnc_update_server_surface(vs->vd); ++ } + } + + if (vs->vd->lock_key_sync) +@@ -2819,6 +2827,7 @@ void vnc_init_state(VncState *vs) + { + vs->initialized = true; + VncDisplay *vd = vs->vd; ++ bool first_client = QTAILQ_EMPTY(&vd->clients); + + vs->last_x = -1; + vs->last_y = -1; +@@ -2832,6 +2841,9 @@ void vnc_init_state(VncState *vs) + vs->bh = qemu_bh_new(vnc_jobs_bh, vs); + + QTAILQ_INSERT_HEAD(&vd->clients, vs, next); ++ if (first_client) { ++ vnc_update_server_surface(vd); ++ } + + graphic_hw_update(NULL); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-return-directly-if-no-vnc-client-connected.patch b/SOURCES/kvm-vnc-return-directly-if-no-vnc-client-connected.patch new file mode 100644 index 0000000..9fa1a00 --- /dev/null +++ b/SOURCES/kvm-vnc-return-directly-if-no-vnc-client-connected.patch @@ -0,0 +1,61 @@ +From 59bdfd752c491ce0e7253d78e379b0bd8c5cd00e Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:18 +0100 +Subject: [PATCH 04/27] vnc: return directly if no vnc client connected + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-5-berrange@redhat.com> +Patchwork-id: 78950 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 04/27] vnc: return directly if no vnc client connected +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: ChenLiang + +graphic_hw_update and vnc_refresh_server_surface aren't +need to do when no vnc client connected. It can reduce +lock contention, because vnc_refresh will hold global big +lock two millisecond every three seconds. + +Signed-off-by: ChenLiang +Signed-off-by: Gonglei +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 9d6b20704734fe1ab789400806ebd54f579d50a2) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 42070b4..9047862 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -2677,6 +2677,11 @@ static void vnc_refresh(DisplayChangeListener *dcl) + VncState *vs, *vn; + int has_dirty, rects = 0; + ++ if (QTAILQ_EMPTY(&vd->clients)) { ++ update_displaychangelistener(&vd->dcl, VNC_REFRESH_INTERVAL_MAX); ++ return; ++ } ++ + graphic_hw_update(NULL); + + if (vnc_trylock_display(vd)) { +@@ -2692,11 +2697,6 @@ static void vnc_refresh(DisplayChangeListener *dcl) + /* vs might be free()ed here */ + } + +- if (QTAILQ_EMPTY(&vd->clients)) { +- update_displaychangelistener(&vd->dcl, VNC_REFRESH_INTERVAL_MAX); +- return; +- } +- + if (has_dirty && rects) { + vd->dcl.update_interval /= 2; + if (vd->dcl.update_interval < VNC_REFRESH_INTERVAL_BASE) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-sanitize-bits_per_pixel-from-the-client.patch b/SOURCES/kvm-vnc-sanitize-bits_per_pixel-from-the-client.patch new file mode 100644 index 0000000..8c486fb --- /dev/null +++ b/SOURCES/kvm-vnc-sanitize-bits_per_pixel-from-the-client.patch @@ -0,0 +1,60 @@ +From 9aeb00acc02f49c754f0bbde5894b45b41407f63 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 18 Nov 2014 11:58:56 +0100 +Subject: [PATCH 33/41] vnc: sanitize bits_per_pixel from the client + +Message-id: <1416311936-5001-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 62424 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 1/1] vnc: sanitize bits_per_pixel from the client +Bugzilla: 1157645 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Markus Armbruster +RH-Acked-by: Dr. David Alan Gilbert (git) + +From: Petr Matousek + +bits_per_pixel that are less than 8 could result in accessing +non-initialized buffers later in the code due to the expectation +that bytes_per_pixel value that is used to initialize these buffers is +never zero. + +To fix this check that bits_per_pixel from the client is one of the +values that the rfb protocol specification allows. + +This is CVE-2014-7815. + +Signed-off-by: Petr Matousek + +[ kraxel: apply codestyle fix ] + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit e6908bfe8e07f2b452e78e677da1b45b1c0f6829) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 3726352..a0e2d33 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -2024,6 +2024,16 @@ static void set_pixel_format(VncState *vs, + return; + } + ++ switch (bits_per_pixel) { ++ case 8: ++ case 16: ++ case 32: ++ break; ++ default: ++ vnc_client_error(vs); ++ return; ++ } ++ + vs->client_pf.rmax = red_max; + vs->client_pf.rbits = hweight_long(red_max); + vs->client_pf.rshift = red_shift; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-update-fix.patch b/SOURCES/kvm-vnc-update-fix.patch new file mode 100644 index 0000000..0f6eff6 --- /dev/null +++ b/SOURCES/kvm-vnc-update-fix.patch @@ -0,0 +1,75 @@ +From 67517d9d08977cf80a2528502b9de5351c17c990 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:17 +0100 +Subject: [PATCH 03/27] vnc update fix + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-4-berrange@redhat.com> +Patchwork-id: 78942 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 03/27] vnc update fix +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +We need to remember has_updates for each vnc client. Otherwise it might +happen that vnc_update_client(has_dirty=1) takes the first exit due to +output buffers not being flushed yet and subsequent calls with +has_dirty=0 take the second exit, wrongly assuming there is nothing to +do because the work defered in the first call is ignored. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +(cherry picked from commit 6365828003c8e88bff67d351af4b66c406568a26) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 4 +++- + ui/vnc.h | 1 + + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 5226295..42070b4 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -794,6 +794,7 @@ static int find_and_clear_dirty_height(struct VncState *vs, + + static int vnc_update_client(VncState *vs, int has_dirty) + { ++ vs->has_dirty += has_dirty; + if (vs->need_update && vs->csock != -1) { + VncDisplay *vd = vs->vd; + VncJob *job; +@@ -805,7 +806,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + /* kernel send buffers are full -> drop frames to throttle */ + return 0; + +- if (!has_dirty && !vs->audio_cap && !vs->force_update) ++ if (!vs->has_dirty && !vs->audio_cap && !vs->force_update) + return 0; + + /* +@@ -845,6 +846,7 @@ static int vnc_update_client(VncState *vs, int has_dirty) + + vnc_job_push(job); + vs->force_update = 0; ++ vs->has_dirty = 0; + return n; + } + +diff --git a/ui/vnc.h b/ui/vnc.h +index 8d534b6..d1badbb 100644 +--- a/ui/vnc.h ++++ b/ui/vnc.h +@@ -263,6 +263,7 @@ struct VncState + VncDisplay *vd; + int need_update; + int force_update; ++ int has_dirty; + uint32_t features; + int absolute; + int last_x; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-use-vnc_-width-height-in-vnc_set_area_dirty.patch b/SOURCES/kvm-vnc-use-vnc_-width-height-in-vnc_set_area_dirty.patch new file mode 100644 index 0000000..6b57457 --- /dev/null +++ b/SOURCES/kvm-vnc-use-vnc_-width-height-in-vnc_set_area_dirty.patch @@ -0,0 +1,99 @@ +From 38debd5362a680a90db572263f7b49ecbde24ac1 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:26 +0100 +Subject: [PATCH 12/27] vnc: use vnc_{width, height} in vnc_set_area_dirty + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-13-berrange@redhat.com> +Patchwork-id: 78945 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 12/27] vnc: use vnc_{width, height} in vnc_set_area_dirty +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +vnc: use vnc_{width,height} in vnc_set_area_dirty + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-14-git-send-email-kraxel@redhat.com +(cherry picked from commit f7b3d68c95bc4f8915a3d084360aa07c7f4e4717) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index 38e0f1a..df081a5 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -439,8 +439,12 @@ static int vnc_height(VncDisplay *vd) + + static void vnc_set_area_dirty(DECLARE_BITMAP(dirty[VNC_MAX_HEIGHT], + VNC_MAX_WIDTH / VNC_DIRTY_PIXELS_PER_BIT), +- int width, int height, +- int x, int y, int w, int h) { ++ VncDisplay *vd, ++ int x, int y, int w, int h) ++{ ++ int width = vnc_width(vd); ++ int height = vnc_height(vd); ++ + /* this is needed this to ensure we updated all affected + * blocks if x % VNC_DIRTY_PIXELS_PER_BIT != 0 */ + w += (x % VNC_DIRTY_PIXELS_PER_BIT); +@@ -462,10 +466,8 @@ static void vnc_dpy_update(DisplayChangeListener *dcl, + { + VncDisplay *vd = container_of(dcl, VncDisplay, dcl); + struct VncSurface *s = &vd->guest; +- int width = pixman_image_get_width(vd->server); +- int height = pixman_image_get_height(vd->server); + +- vnc_set_area_dirty(s->dirty, width, height, x, y, w, h); ++ vnc_set_area_dirty(s->dirty, vd, x, y, w, h); + } + + void vnc_framebuffer_update(VncState *vs, int x, int y, int w, int h, +@@ -644,7 +646,7 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + width = vnc_width(vd); + height = vnc_height(vd); + memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty)); +- vnc_set_area_dirty(vd->guest.dirty, width, height, 0, 0, ++ vnc_set_area_dirty(vd->guest.dirty, vd, 0, 0, + width, height); + + QTAILQ_FOREACH(vs, &vd->clients, next) { +@@ -654,7 +656,7 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + vnc_cursor_define(vs); + } + memset(vs->dirty, 0x00, sizeof(vs->dirty)); +- vnc_set_area_dirty(vs->dirty, width, height, 0, 0, ++ vnc_set_area_dirty(vs->dirty, vd, 0, 0, + width, height); + } + } +@@ -1816,9 +1818,6 @@ static void ext_key_event(VncState *vs, int down, + static void framebuffer_update_request(VncState *vs, int incremental, + int x, int y, int w, int h) + { +- int width = pixman_image_get_width(vs->vd->server); +- int height = pixman_image_get_height(vs->vd->server); +- + vs->need_update = 1; + + if (incremental) { +@@ -1826,7 +1825,7 @@ static void framebuffer_update_request(VncState *vs, int incremental, + } + + vs->force_update = 1; +- vnc_set_area_dirty(vs->dirty, width, height, x, y, w, h); ++ vnc_set_area_dirty(vs->dirty, vs->vd, x, y, w, h); + } + + static void send_ext_key_event_ack(VncState *vs) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vnc-zap-dead-code.patch b/SOURCES/kvm-vnc-zap-dead-code.patch new file mode 100644 index 0000000..07f3236 --- /dev/null +++ b/SOURCES/kvm-vnc-zap-dead-code.patch @@ -0,0 +1,44 @@ +From 94da5567a7962a25fdc268ed284c15d20637c348 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Thu, 8 Feb 2018 17:50:23 +0100 +Subject: [PATCH 09/27] vnc: zap dead code + +RH-Author: Daniel P. Berrange +Message-id: <20180208175041.5634-10-berrange@redhat.com> +Patchwork-id: 78940 +O-Subject: [RHEL-7.5 qemu-kvm PATCH v1 09/27] vnc: zap dead code +Bugzilla: 1527405 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Peter Lieven +Reviewed-by: Daniel P. Berrange +Message-id: 1446203414-4013-11-git-send-email-kraxel@redhat.com +(cherry picked from commit e081aae5ae01f5ff695ba9fee4e622053d8e4bfe) +Signed-off-by: Miroslav Rezanina +--- + ui/vnc.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/ui/vnc.c b/ui/vnc.c +index ebb6484..9923d24 100644 +--- a/ui/vnc.c ++++ b/ui/vnc.c +@@ -621,10 +621,6 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl, + width, height, NULL, 0); + + /* guest surface */ +-#if 0 /* FIXME */ +- if (ds_get_bytes_per_pixel(ds) != vd->guest.ds->pf.bytes_per_pixel) +- console_color_init(ds); +-#endif + qemu_pixman_image_unref(vd->guest.fb); + vd->guest.fb = pixman_image_ref(surface->image); + vd->guest.format = surface->format; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vpc-Handle-failure-for-potentially-large-allocations.patch b/SOURCES/kvm-vpc-Handle-failure-for-potentially-large-allocations.patch new file mode 100644 index 0000000..d2364cf --- /dev/null +++ b/SOURCES/kvm-vpc-Handle-failure-for-potentially-large-allocations.patch @@ -0,0 +1,51 @@ +From 46415e245ed90b1bb08ff4d67559a6c0f34cf9db Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Wed, 29 Jul 2015 16:59:53 +0200 +Subject: [PATCH 02/13] vpc: Handle failure for potentially large allocations + +Message-id: +Patchwork-id: 67196 +O-Subject: [RHEL-7.2 qemu-kvm PATCH 1/3] vpc: Handle failure for potentially large allocations +Bugzilla: 1217349 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Some code in the block layer makes potentially huge allocations. Failure +is not completely unexpected there, so avoid aborting qemu and handle +out-of-memory situations gracefully. + +This patch addresses the allocations in the vpc block driver. + +Signed-off-by: Kevin Wolf +Reviewed-by: Stefan Hajnoczi +Reviewed-by: Benoit Canet +(cherry picked from commit 5fb09cd5867aabf26d5b85b0913dccd496b71421) +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vpc.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/block/vpc.c b/block/vpc.c +index 849501a..6fdce40 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -260,7 +260,11 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + goto fail; + } + +- s->pagetable = qemu_blockalign(bs, s->max_table_entries * 4); ++ s->pagetable = qemu_try_blockalign(bs->file, s->max_table_entries * 4); ++ if (s->pagetable == NULL) { ++ ret = -ENOMEM; ++ goto fail; ++ } + + s->bat_offset = be64_to_cpu(dyndisk_header->table_offset); + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-vpc-Implement-.bdrv_has_zero_init.patch b/SOURCES/kvm-vpc-Implement-.bdrv_has_zero_init.patch new file mode 100644 index 0000000..ef172f3 --- /dev/null +++ b/SOURCES/kvm-vpc-Implement-.bdrv_has_zero_init.patch @@ -0,0 +1,86 @@ +From 0e4b156f5e4c928c2f98c21d029b0b1c361bd2a8 Mon Sep 17 00:00:00 2001 +From: Jeffrey Cody +Date: Tue, 16 Sep 2014 20:11:48 +0200 +Subject: [PATCH 10/20] vpc: Implement .bdrv_has_zero_init + +Message-id: +Patchwork-id: 61214 +O-Subject: [PATCH qemu-kvm-rhel RHEL7.1 09/15] vpc: Implement .bdrv_has_zero_init +Bugzilla: 1098086 +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Max Reitz + +From: Kevin Wolf + +Depending on the subformat, has_zero_init on VHD must behave like raw +and query the underlying storage (fixed) or like other sparse formats +that can always return 1 (dynamic, differencing). + +Signed-off-by: Kevin Wolf +(cherry picked from commit 72c6cc94daa727f41ecfc2b2ff94aa6f0e459b7f) + +Conflicts: + block/vpc.c + +RHEL7 Notes: Conflict due to out of order commits + +Signed-off-by: Jeff Cody +Signed-off-by: Miroslav Rezanina +--- + block/vpc.c | 28 +++++++++++++++++++++------- + 1 files changed, 21 insertions(+), 7 deletions(-) + +diff --git a/block/vpc.c b/block/vpc.c +index 6e8fb33..2f3d4ac 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -826,6 +826,18 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + return ret; + } + ++static int vpc_has_zero_init(BlockDriverState *bs) ++{ ++ BDRVVPCState *s = bs->opaque; ++ struct vhd_footer *footer = (struct vhd_footer *) s->footer_buf; ++ ++ if (cpu_to_be32(footer->type) == VHD_FIXED) { ++ return bdrv_has_zero_init(bs->file); ++ } else { ++ return 1; ++ } ++} ++ + static void vpc_close(BlockDriverState *bs) + { + BDRVVPCState *s = bs->opaque; +@@ -858,17 +870,19 @@ static BlockDriver bdrv_vpc = { + .format_name = "vpc", + .instance_size = sizeof(BDRVVPCState), + +- .bdrv_probe = vpc_probe, +- .bdrv_open = vpc_open, +- .bdrv_close = vpc_close, +- .bdrv_reopen_prepare = vpc_reopen_prepare, +- .bdrv_create = vpc_create, ++ .bdrv_probe = vpc_probe, ++ .bdrv_open = vpc_open, ++ .bdrv_close = vpc_close, ++ .bdrv_reopen_prepare = vpc_reopen_prepare, ++ .bdrv_create = vpc_create, + + .bdrv_read = vpc_co_read, + .bdrv_write = vpc_co_write, + +- .create_options = vpc_create_options, +- .bdrv_get_info = vpc_get_info, ++ .bdrv_get_info = vpc_get_info, ++ ++ .create_options = vpc_create_options, ++ .bdrv_has_zero_init = vpc_has_zero_init, + }; + + static void bdrv_vpc_init(void) +-- +1.7.1 + diff --git a/SOURCES/kvm-vpc-Validate-block-size-CVE-2014-0142.patch b/SOURCES/kvm-vpc-Validate-block-size-CVE-2014-0142.patch new file mode 100644 index 0000000..be7ca7f --- /dev/null +++ b/SOURCES/kvm-vpc-Validate-block-size-CVE-2014-0142.patch @@ -0,0 +1,155 @@ +From 94cdf32d7dfbfb12041eb58215e3074525a176b1 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Tue, 25 Mar 2014 14:23:23 +0100 +Subject: [PATCH 16/49] vpc: Validate block size (CVE-2014-0142) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-17-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 16/48] vpc: Validate block size (CVE-2014-0142) +Bugzilla: 1079315 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079315 +Upstream status: Embargoed + +This fixes some cases of division by zero crashes. + +Signed-off-by: Kevin Wolf + +Conflicts: +tests/qemu-iotests/group + +Signed-off-by: Kevin Wolf +--- + block/vpc.c | 5 +++ + tests/qemu-iotests/088 | 64 ++++++++++++++++++++++++++++++++++++++++++++ + tests/qemu-iotests/088.out | 17 +++++++++++ + tests/qemu-iotests/group | 1 + + 4 files changed, 87 insertions(+), 0 deletions(-) + create mode 100755 tests/qemu-iotests/088 + create mode 100644 tests/qemu-iotests/088.out + +diff --git a/block/vpc.c b/block/vpc.c +index de5bc22..000d1c6 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -235,6 +235,11 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + } + + s->block_size = be32_to_cpu(dyndisk_header->block_size); ++ if (!is_power_of_2(s->block_size) || s->block_size < BDRV_SECTOR_SIZE) { ++ error_setg(errp, "Invalid block size %" PRIu32, s->block_size); ++ ret = -EINVAL; ++ goto fail; ++ } + s->bitmap_size = ((s->block_size / (8 * 512)) + 511) & ~511; + + s->max_table_entries = be32_to_cpu(dyndisk_header->max_table_entries); +diff --git a/tests/qemu-iotests/088 b/tests/qemu-iotests/088 +new file mode 100755 +index 0000000..c09adf8 +--- /dev/null ++++ b/tests/qemu-iotests/088 +@@ -0,0 +1,64 @@ ++#!/bin/bash ++# ++# vpc (VHD) format input validation tests ++# ++# Copyright (C) 2014 Red Hat, Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++ ++# creator ++owner=kwolf@redhat.com ++ ++seq=`basename $0` ++echo "QA output created by $seq" ++ ++here=`pwd` ++tmp=/tmp/$$ ++status=1 # failure is the default! ++ ++_cleanup() ++{ ++ rm -f $TEST_IMG.snap ++ _cleanup_test_img ++} ++trap "_cleanup; exit \$status" 0 1 2 3 15 ++ ++# get standard environment, filters and checks ++. ./common.rc ++. ./common.filter ++ ++_supported_fmt vpc ++_supported_proto generic ++_supported_os Linux ++ ++offset_block_size=$((512 + 32)) ++ ++echo ++echo "== Invalid block size ==" ++_make_test_img 64M ++poke_file "$TEST_IMG" "$offset_block_size" "\x00\x00\x00\x00" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "write 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_block_size" "\x00\x00\x00\x80" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "write 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++poke_file "$TEST_IMG" "$offset_block_size" "\x12\x34\x56\x78" ++{ $QEMU_IO -c "read 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++{ $QEMU_IO -c "write 0 512" $TEST_IMG; } 2>&1 | _filter_qemu_io | _filter_testdir ++ ++# success, all done ++echo "*** done" ++rm -f $seq.full ++status=0 +diff --git a/tests/qemu-iotests/088.out b/tests/qemu-iotests/088.out +new file mode 100644 +index 0000000..d961609 +--- /dev/null ++++ b/tests/qemu-iotests/088.out +@@ -0,0 +1,17 @@ ++QA output created by 088 ++ ++== Invalid block size == ++Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 ++qemu-io: can't open device TEST_DIR/t.vpc: Invalid block size 0 ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.vpc: Invalid block size 0 ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.vpc: Invalid block size 128 ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.vpc: Invalid block size 128 ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.vpc: Invalid block size 305419896 ++no file open, try 'help open' ++qemu-io: can't open device TEST_DIR/t.vpc: Invalid block size 305419896 ++no file open, try 'help open' ++*** done +diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group +index 30a0fd8..7d0d07e 100644 +--- a/tests/qemu-iotests/group ++++ b/tests/qemu-iotests/group +@@ -77,3 +77,4 @@ + 079 rw auto + 082 rw auto quick + 086 rw auto quick ++088 rw auto +-- +1.7.1 + diff --git a/SOURCES/kvm-vpc-vhd-add-bounds-check-for-max_table_entries-and-b.patch b/SOURCES/kvm-vpc-vhd-add-bounds-check-for-max_table_entries-and-b.patch new file mode 100644 index 0000000..9cae58b --- /dev/null +++ b/SOURCES/kvm-vpc-vhd-add-bounds-check-for-max_table_entries-and-b.patch @@ -0,0 +1,110 @@ +From 714a0140fd0061b44d63bd538a2d6a7de6f59be6 Mon Sep 17 00:00:00 2001 +From: Jeff Cody +Date: Tue, 25 Mar 2014 14:23:22 +0100 +Subject: [PATCH 15/49] vpc/vhd: add bounds check for max_table_entries and block_size (CVE-2014-0144) + +RH-Author: Kevin Wolf +Message-id: <1395753835-7591-16-git-send-email-kwolf@redhat.com> +Patchwork-id: n/a +O-Subject: [virt-devel] [EMBARGOED RHEL-7.0 qemu-kvm PATCH 15/48] vpc/vhd: add bounds check for max_table_entries and block_size (CVE-2014-0144) +Bugzilla: 1079455 +RH-Acked-by: Jeff Cody +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini + +From: Jeff Cody + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1079455 +Upstream status: Embargoed + +This adds checks to make sure that max_table_entries and block_size +are in sane ranges. Memory is allocated based on max_table_entries, +and block_size is used to calculate indices into that allocated +memory, so if these values are incorrect that can lead to potential +unbounded memory allocation, or invalid memory accesses. + +Also, the allocation of the pagetable is changed from g_malloc0() +to qemu_blockalign(). + +Signed-off-by: Jeff Cody +Signed-off-by: Kevin Wolf +--- + block/vpc.c | 27 +++++++++++++++++++++++---- + 1 files changed, 23 insertions(+), 4 deletions(-) + +diff --git a/block/vpc.c b/block/vpc.c +index 059069f..de5bc22 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -45,6 +45,8 @@ enum vhd_type { + // Seconds since Jan 1, 2000 0:00:00 (UTC) + #define VHD_TIMESTAMP_BASE 946684800 + ++#define VHD_MAX_SECTORS (65535LL * 255 * 255) ++ + // always big-endian + struct vhd_footer { + char creator[8]; // "conectix" +@@ -164,6 +166,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + struct vhd_dyndisk_header* dyndisk_header; + uint8_t buf[HEADER_SIZE]; + uint32_t checksum; ++ uint64_t computed_size; + int disk_type = VHD_DYNAMIC; + int ret; + +@@ -212,7 +215,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + be16_to_cpu(footer->cyls) * footer->heads * footer->secs_per_cyl; + + /* Allow a maximum disk size of approximately 2 TB */ +- if (bs->total_sectors >= 65535LL * 255 * 255) { ++ if (bs->total_sectors >= VHD_MAX_SECTORS) { + ret = -EFBIG; + goto fail; + } +@@ -235,7 +238,23 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + s->bitmap_size = ((s->block_size / (8 * 512)) + 511) & ~511; + + s->max_table_entries = be32_to_cpu(dyndisk_header->max_table_entries); +- s->pagetable = g_malloc(s->max_table_entries * 4); ++ ++ if ((bs->total_sectors * 512) / s->block_size > 0xffffffffU) { ++ ret = -EINVAL; ++ goto fail; ++ } ++ if (s->max_table_entries > (VHD_MAX_SECTORS * 512) / s->block_size) { ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ computed_size = (uint64_t) s->max_table_entries * s->block_size; ++ if (computed_size < bs->total_sectors * 512) { ++ ret = -EINVAL; ++ goto fail; ++ } ++ ++ s->pagetable = qemu_blockalign(bs, s->max_table_entries * 4); + + s->bat_offset = be64_to_cpu(dyndisk_header->table_offset); + +@@ -281,7 +300,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, + return 0; + + fail: +- g_free(s->pagetable); ++ qemu_vfree(s->pagetable); + #ifdef CACHE + g_free(s->pageentry_u8); + #endif +@@ -804,7 +823,7 @@ static int vpc_create(const char *filename, QEMUOptionParameter *options, + static void vpc_close(BlockDriverState *bs) + { + BDRVVPCState *s = bs->opaque; +- g_free(s->pagetable); ++ qemu_vfree(s->pagetable); + #ifdef CACHE + g_free(s->pageentry_u8); + #endif +-- +1.7.1 + diff --git a/SOURCES/kvm-vpc-vhdx-add-get_info.patch.patch.patch b/SOURCES/kvm-vpc-vhdx-add-get_info.patch.patch.patch new file mode 100644 index 0000000..e0caf22 --- /dev/null +++ b/SOURCES/kvm-vpc-vhdx-add-get_info.patch.patch.patch @@ -0,0 +1,98 @@ +From ecaad218fdda71c1f64f557b3dff6a09a425b084 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Paolo Bonzini +Date: Mon, 9 Dec 2013 14:09:17 +0100 +Subject: [PATCH 29/50] vpc, vhdx: add get_info + +RH-Author: Paolo Bonzini +Message-id: <1386598178-11845-32-git-send-email-pbonzini@redhat.com> +Patchwork-id: 56068 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 31/52] vpc, vhdx: add get_info +Bugzilla: 1007815 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +Signed-off-by: Paolo Bonzini +Reviewed-by: Peter Lieven +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 97b00e285119e611f500686f32f9bccffbb9126a) + +Conflicts: + block/vhdx.c [BlockDriver members] + block/vpc.c [VHDFooter vs. struct vhd_footer, BlockDriver members] +--- + block/vhdx.c | 10 ++++++++++ + block/vpc.c | 13 +++++++++++++ + 2 files changed, 23 insertions(+) + +Signed-off-by: Michal Novotny +--- + block/vhdx.c | 10 ++++++++++ + block/vpc.c | 13 +++++++++++++ + 2 files changed, 23 insertions(+) + +diff --git a/block/vhdx.c b/block/vhdx.c +index 6cb0412..7285b95 100644 +--- a/block/vhdx.c ++++ b/block/vhdx.c +@@ -878,6 +878,15 @@ static void vhdx_block_translate(BDRVVHDXState *s, int64_t sector_num, + } + + ++static int vhdx_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) ++{ ++ BDRVVHDXState *s = bs->opaque; ++ ++ bdi->cluster_size = s->block_size; ++ ++ return 0; ++} ++ + + static coroutine_fn int vhdx_co_readv(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *qiov) +@@ -973,6 +982,7 @@ static BlockDriver bdrv_vhdx = { + .bdrv_reopen_prepare = vhdx_reopen_prepare, + .bdrv_co_readv = vhdx_co_readv, + .bdrv_co_writev = vhdx_co_writev, ++ .bdrv_get_info = vhdx_get_info, + }; + + static void bdrv_vhdx_init(void) +diff --git a/block/vpc.c b/block/vpc.c +index 5d65756..49520c1 100644 +--- a/block/vpc.c ++++ b/block/vpc.c +@@ -439,6 +439,18 @@ fail: + return -1; + } + ++static int vpc_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) ++{ ++ BDRVVPCState *s = (BDRVVPCState *)bs->opaque; ++ struct vhd_footer *footer = (struct vhd_footer *) s->footer_buf; ++ ++ if (cpu_to_be32(footer->type) != VHD_FIXED) { ++ bdi->cluster_size = s->block_size; ++ } ++ ++ return 0; ++} ++ + static int vpc_read(BlockDriverState *bs, int64_t sector_num, + uint8_t *buf, int nb_sectors) + { +@@ -830,6 +842,7 @@ static BlockDriver bdrv_vpc = { + .bdrv_write = vpc_co_write, + + .create_options = vpc_create_options, ++ .bdrv_get_info = vpc_get_info, + }; + + static void bdrv_vpc_init(void) +-- +1.7.11.7 + diff --git a/SOURCES/kvm-vt82c686-Clean-up-use-of-cannot_instantiate_with_dev.patch b/SOURCES/kvm-vt82c686-Clean-up-use-of-cannot_instantiate_with_dev.patch new file mode 100644 index 0000000..d29eebd --- /dev/null +++ b/SOURCES/kvm-vt82c686-Clean-up-use-of-cannot_instantiate_with_dev.patch @@ -0,0 +1,73 @@ +From 86a622181cfcb4205877595fa53b3bbc87cf9431 Mon Sep 17 00:00:00 2001 +From: Kevin Wolf +Date: Wed, 6 Nov 2013 14:41:19 +0100 +Subject: [PATCH 43/81] vt82c686: Clean up use of cannot_instantiate_with_device_add_yet + +RH-Author: Kevin Wolf +Message-id: <1383748882-22831-15-git-send-email-kwolf@redhat.com> +Patchwork-id: 55540 +O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 14/17] vt82c686: Clean up use of cannot_instantiate_with_device_add_yet +Bugzilla: 1001216 +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Kevin Wolf +RH-Acked-by: Miroslav Rezanina + +From: Markus Armbruster + +A VT82C686B southbridge has multiple functions. We model each +function as a separate qdev. One of them need some special wiring set +up in mips_fulong2e_init() to work: the ISA bridge at 05.0. + +The IDE controller at 05.1 (via-ide) has always had +cannot_instantiate_with_device_add_yet set, but there is no obvious +reason why device_add could not work for them. Drop it. + +Signed-off-by: Markus Armbruster +Reviewed-by: Peter Maydell +(cherry picked from pending upstream submission) +Signed-off-by: Kevin Wolf +--- + hw/ide/via.c | 1 - + hw/isa/vt82c686.c | 6 +++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/ide/via.c | 1 - + hw/isa/vt82c686.c | 6 +++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/hw/ide/via.c b/hw/ide/via.c +index 6ba99c8..326722c 100644 +--- a/hw/ide/via.c ++++ b/hw/ide/via.c +@@ -224,7 +224,6 @@ static void via_ide_class_init(ObjectClass *klass, void *data) + k->revision = 0x06; + k->class_id = PCI_CLASS_STORAGE_IDE; + set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + } + + static const TypeInfo via_ide_info = { +diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c +index 563e154..bb84414 100644 +--- a/hw/isa/vt82c686.c ++++ b/hw/isa/vt82c686.c +@@ -468,8 +468,12 @@ static void via_class_init(ObjectClass *klass, void *data) + k->class_id = PCI_CLASS_BRIDGE_ISA; + k->revision = 0x40; + dc->desc = "ISA bridge"; +- dc->cannot_instantiate_with_device_add_yet = true; /* FIXME explain why */ + dc->vmsd = &vmstate_via; ++ /* ++ * Reason: part of VIA VT82C686 southbridge, needs to be wired up, ++ * e.g. by mips_fulong2e_init() ++ */ ++ dc->cannot_instantiate_with_device_add_yet = true; + } + + static const TypeInfo via_info = { +-- +1.7.1 + diff --git a/SOURCES/kvm-vvfat-use-bdrv_new-to-allocate-BlockDriverState.patch b/SOURCES/kvm-vvfat-use-bdrv_new-to-allocate-BlockDriverState.patch new file mode 100644 index 0000000..50a8a9f --- /dev/null +++ b/SOURCES/kvm-vvfat-use-bdrv_new-to-allocate-BlockDriverState.patch @@ -0,0 +1,46 @@ +From e02cdc5fccb977bde5162af586a8cc4dcaf7c5f4 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:46 +0100 +Subject: [PATCH 03/34] vvfat: use bdrv_new() to allocate BlockDriverState + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-2-git-send-email-famz@redhat.com> +Patchwork-id: 56763 +O-Subject: [RHEL-7 qemu-kvm PATCH 01/18] vvfat: use bdrv_new() to allocate BlockDriverState +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +we need bdrv_new() to properly initialize BDS, don't allocate memory +manually. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 3d34c6cd99f434126365150c2535bbf93b94f891) +Signed-off-by: Fam Zheng +--- + block/vvfat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + block/vvfat.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/block/vvfat.c b/block/vvfat.c +index cb45687..2c7970d 100644 +--- a/block/vvfat.c ++++ b/block/vvfat.c +@@ -2951,7 +2951,7 @@ static int enable_write_target(BDRVVVFATState *s) + unlink(s->qcow_filename); + #endif + +- s->bs->backing_hd = calloc(sizeof(BlockDriverState), 1); ++ s->bs->backing_hd = bdrv_new(""); + s->bs->backing_hd->drv = &vvfat_write_target; + s->bs->backing_hd->opaque = g_malloc(sizeof(void*)); + *(void**)s->bs->backing_hd->opaque = s; +-- +1.7.1 + diff --git a/SOURCES/kvm-w32-Fix-access-to-host-devices-regression.patch b/SOURCES/kvm-w32-Fix-access-to-host-devices-regression.patch new file mode 100644 index 0000000..26f0611 --- /dev/null +++ b/SOURCES/kvm-w32-Fix-access-to-host-devices-regression.patch @@ -0,0 +1,108 @@ +From c9f57b61fd600b60276a1f50be5af3eed7d8bafd Mon Sep 17 00:00:00 2001 +From: Max Reitz +Date: Mon, 4 Nov 2013 22:32:07 +0100 +Subject: [PATCH 14/87] w32: Fix access to host devices (regression) + +RH-Author: Max Reitz +Message-id: <1383604354-12743-17-git-send-email-mreitz@redhat.com> +Patchwork-id: 55316 +O-Subject: [RHEL-7.0 qemu-kvm PATCH 16/43] w32: Fix access to host devices (regression) +Bugzilla: 1026524 +RH-Acked-by: Kevin Wolf +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng +RH-Acked-by: Stefan Hajnoczi + +From: Stefan Weil + +BZ: 1026524 + +QEMU failed to open host devices like \\.\PhysicalDrive0 (first hard disk) +since some time (commit 8a79380b8ef1b02d2abd705dd026a18863b09020?). + +Those devices use hdev_open which did not use the latest API for options. +This resulted in a fatal runtime error: + + Block protocol 'host_device' doesn't support the option 'filename' + +Duplicate code from raw_open to fix this. + +Cc: qemu-stable@nongnu.org +Reported-by: David Brenner +Signed-off-by: Stefan Weil +Reviewed-by: Kevin Wolf +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 68dc036488dfea170627a55e6ee3dfd7f2c2063e) + +Signed-off-by: Max Reitz +--- + block/raw-win32.c | 36 +++++++++++++++++++++++++++++------- + 1 file changed, 29 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + block/raw-win32.c | 36 +++++++++++++++++++++++++++++------- + 1 files changed, 29 insertions(+), 7 deletions(-) + +diff --git a/block/raw-win32.c b/block/raw-win32.c +index 7c03b6d..a324e5b 100644 +--- a/block/raw-win32.c ++++ b/block/raw-win32.c +@@ -534,13 +534,29 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags) + { + BDRVRawState *s = bs->opaque; + int access_flags, create_flags; ++ int ret = 0; + DWORD overlapped; + char device_name[64]; +- const char *filename = qdict_get_str(options, "filename"); ++ ++ Error *local_err = NULL; ++ const char *filename; ++ ++ QemuOpts *opts = qemu_opts_create_nofail(&raw_runtime_opts); ++ qemu_opts_absorb_qdict(opts, options, &local_err); ++ if (error_is_set(&local_err)) { ++ qerror_report_err(local_err); ++ error_free(local_err); ++ ret = -EINVAL; ++ goto done; ++ } ++ ++ filename = qemu_opt_get(opts, "filename"); + + if (strstart(filename, "/dev/cdrom", NULL)) { +- if (find_cdrom(device_name, sizeof(device_name)) < 0) +- return -ENOENT; ++ if (find_cdrom(device_name, sizeof(device_name)) < 0) { ++ ret = -ENOENT; ++ goto done; ++ } + filename = device_name; + } else { + /* transform drive letters into device name */ +@@ -563,11 +579,17 @@ static int hdev_open(BlockDriverState *bs, QDict *options, int flags) + if (s->hfile == INVALID_HANDLE_VALUE) { + int err = GetLastError(); + +- if (err == ERROR_ACCESS_DENIED) +- return -EACCES; +- return -1; ++ if (err == ERROR_ACCESS_DENIED) { ++ ret = -EACCES; ++ } else { ++ ret = -1; ++ } ++ goto done; + } +- return 0; ++ ++done: ++ qemu_opts_del(opts); ++ return ret; + } + + static int hdev_has_zero_init(BlockDriverState *bs) +-- +1.7.1 + diff --git a/SOURCES/kvm-warn-if-num-cpus-is-greater-than-num-recommended.patch b/SOURCES/kvm-warn-if-num-cpus-is-greater-than-num-recommended.patch new file mode 100644 index 0000000..683b7eb --- /dev/null +++ b/SOURCES/kvm-warn-if-num-cpus-is-greater-than-num-recommended.patch @@ -0,0 +1,146 @@ +From 453a94cf85a041792086990022d182bcc4f939cb Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 24 Sep 2013 13:29:36 +0200 +Subject: [PATCH 05/11] kvm: warn if num cpus is greater than num recommended + +RH-Author: Andrew Jones +Message-id: <1380029376-20391-1-git-send-email-drjones@redhat.com> +Patchwork-id: 54526 +O-Subject: [RHEL7.0 qemu-kvm PATCH] kvm: warn if num cpus is greater than num recommended +Bugzilla: 1010881 +RH-Acked-by: Radim Krcmar +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1010881 +Brewing: https://brewweb.devel.redhat.com/taskinfo?taskID=6322066 + +(cherry picked from commit 670436ced08738802e15764039d03ab0dbab2bf3 + of uq/master) + +=== + +The comment in kvm_max_vcpus() states that it's using the recommended +procedure from the kernel API documentation to get the max number +of vcpus that kvm supports. It is, but by always returning the +maximum number supported. The maximum number should only be used +for development purposes. qemu should check KVM_CAP_NR_VCPUS for +the recommended number of vcpus. This patch adds a warning if a user +specifies a number of cpus between the recommended and max. + +Signed-off-by: Andrew Jones +Acked-by: Marcelo Tosatti +Signed-off-by: Gleb Natapov +--- + kvm-all.c | 69 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 40 insertions(+), 29 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 69 +++++++++++++++++++++++++++++++++++------------------------- + 1 files changed, 40 insertions(+), 29 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index d0a7c21..f2f68d6 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -1280,24 +1280,20 @@ static int kvm_irqchip_create(KVMState *s) + return 0; + } + +-static int kvm_max_vcpus(KVMState *s) ++/* Find number of supported CPUs using the recommended ++ * procedure from the kernel API documentation to cope with ++ * older kernels that may be missing capabilities. ++ */ ++static int kvm_recommended_vcpus(KVMState *s) + { +- int ret; +- +- /* Find number of supported CPUs using the recommended +- * procedure from the kernel API documentation to cope with +- * older kernels that may be missing capabilities. +- */ +- ret = kvm_check_extension(s, KVM_CAP_MAX_VCPUS); +- if (ret) { +- return ret; +- } +- ret = kvm_check_extension(s, KVM_CAP_NR_VCPUS); +- if (ret) { +- return ret; +- } ++ int ret = kvm_check_extension(s, KVM_CAP_NR_VCPUS); ++ return (ret) ? ret : 4; ++} + +- return 4; ++static int kvm_max_vcpus(KVMState *s) ++{ ++ int ret = kvm_check_extension(s, KVM_CAP_MAX_VCPUS); ++ return (ret) ? ret : kvm_recommended_vcpus(s); + } + + int kvm_init(void) +@@ -1305,11 +1301,19 @@ int kvm_init(void) + static const char upgrade_note[] = + "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n" + "(see http://sourceforge.net/projects/kvm).\n"; ++ struct { ++ const char *name; ++ int num; ++ } num_cpus[] = { ++ { "SMP", smp_cpus }, ++ { "hotpluggable", max_cpus }, ++ { NULL, } ++ }, *nc = num_cpus; ++ int soft_vcpus_limit, hard_vcpus_limit; + KVMState *s; + const KVMCapabilityInfo *missing_cap; + int ret; + int i; +- int max_vcpus; + + s = g_malloc0(sizeof(KVMState)); + +@@ -1350,19 +1354,26 @@ int kvm_init(void) + goto err; + } + +- max_vcpus = kvm_max_vcpus(s); +- if (smp_cpus > max_vcpus) { +- ret = -EINVAL; +- fprintf(stderr, "Number of SMP cpus requested (%d) exceeds max cpus " +- "supported by KVM (%d)\n", smp_cpus, max_vcpus); +- goto err; +- } ++ /* check the vcpu limits */ ++ soft_vcpus_limit = kvm_recommended_vcpus(s); ++ hard_vcpus_limit = kvm_max_vcpus(s); + +- if (max_cpus > max_vcpus) { +- ret = -EINVAL; +- fprintf(stderr, "Number of hotpluggable cpus requested (%d) exceeds max cpus " +- "supported by KVM (%d)\n", max_cpus, max_vcpus); +- goto err; ++ while (nc->name) { ++ if (nc->num > soft_vcpus_limit) { ++ fprintf(stderr, ++ "Warning: Number of %s cpus requested (%d) exceeds " ++ "the recommended cpus supported by KVM (%d)\n", ++ nc->name, nc->num, soft_vcpus_limit); ++ ++ if (nc->num > hard_vcpus_limit) { ++ ret = -EINVAL; ++ fprintf(stderr, "Number of %s cpus requested (%d) exceeds " ++ "the maximum cpus supported by KVM (%d)\n", ++ nc->name, nc->num, hard_vcpus_limit); ++ goto err; ++ } ++ } ++ nc++; + } + + s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0); +-- +1.7.1 + diff --git a/SOURCES/kvm-x86-Clear-MTRRs-on-vCPU-reset.patch b/SOURCES/kvm-x86-Clear-MTRRs-on-vCPU-reset.patch new file mode 100644 index 0000000..4a166fc --- /dev/null +++ b/SOURCES/kvm-x86-Clear-MTRRs-on-vCPU-reset.patch @@ -0,0 +1,65 @@ +From 2f6d988d14532616d1f1f476b438b4e3295329f1 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:45:59 +0200 +Subject: [PATCH 13/14] x86: Clear MTRRs on vCPU reset + +Message-id: <20150410164559.16166.37319.stgit@gimli.home> +Patchwork-id: 64799 +O-Subject: [RHEL7.2 qemu-kvm PATCH 3/3] x86: Clear MTRRs on vCPU reset +Bugzilla: 1210510 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Upstream: 9db2efd95e13330075bff027cd682a063d725332 + +The SDM specifies (June 2014 Vol3 11.11.5): + + On a hardware reset, the P6 and more recent processors clear the + valid flags in variable-range MTRRs and clear the E flag in the + IA32_MTRR_DEF_TYPE MSR to disable all MTRRs. All other bits in the + MTRRs are undefined. + +We currently do none of that, so whatever MTRR settings you had prior +to reset is what you have after reset. Usually this doesn't matter +because KVM often ignores the guest mappings and uses write-back +anyway. However, if you have an assigned device and an IOMMU that +allows NoSnoop for that device, KVM defers to the guest memory +mappings which are now stale after reset. The result is that OVMF +rebooting on such a configuration takes a full minute to LZMA +decompress the firmware volume, a process that is nearly instant on +the initial boot. + +Signed-off-by: Alex Williamson +Reviewed-by: Laszlo Ersek +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 1507530..b76719d 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2398,6 +2398,16 @@ static void x86_cpu_reset(CPUState *s) + cpu_breakpoint_remove_all(env, BP_CPU); + cpu_watchpoint_remove_all(env, BP_CPU); + ++ /* ++ * SDM 11.11.5 requires: ++ * - IA32_MTRR_DEF_TYPE MSR.E = 0 ++ * - IA32_MTRR_PHYSMASKn.V = 0 ++ * All other bits are undefined. For simplification, zero it all. ++ */ ++ env->mtrr_deftype = 0; ++ memset(env->mtrr_var, 0, sizeof(env->mtrr_var)); ++ memset(env->mtrr_fixed, 0, sizeof(env->mtrr_fixed)); ++ + #if !defined(CONFIG_USER_ONLY) + /* We hard-wire the BSP to the first CPU. */ + if (s->cpu_index == 0) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-Data-structure-changes-to-support-MSR-based-feat.patch b/SOURCES/kvm-x86-Data-structure-changes-to-support-MSR-based-feat.patch new file mode 100644 index 0000000..e647bf6 --- /dev/null +++ b/SOURCES/kvm-x86-Data-structure-changes-to-support-MSR-based-feat.patch @@ -0,0 +1,318 @@ +From e2f14f95ccb04db5f470d3593e2a2f2dc69187d8 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:23 +0200 +Subject: [PATCH 07/12] x86: Data structure changes to support MSR based + features + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-7-git-send-email-plai@redhat.com> +Patchwork-id: 90863 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 06/10] x86: Data structure changes to support MSR based features +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Robert Hoo + +Add FeatureWordType indicator in struct FeatureWordInfo. +Change feature_word_info[] accordingly. +Change existing functions that refer to feature_word_info[] accordingly. + +Signed-off-by: Robert Hoo +Message-Id: <1539578845-37944-3-git-send-email-robert.hu@linux.intel.com> +[ehabkost: fixed hvf_enabled() case] +Signed-off-by: Eduardo Habkost + +(cherry picked from commit 07585923485952bf4cb7da563c9f91fecc85d09c) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target/i386/cpu.c changes to target-i386/cpu.c + + x86_cpu_get_supported_feature_word() updated @ 07585923485 + dropped hvf_enabled(), tcg_enabled(), and migratable_only checks + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 163 +++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 119 insertions(+), 44 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 838c616..488634c 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -272,89 +272,125 @@ static const char *cpuid_apm_edx_feature_name[] = { + #define TCG_APM_FEATURES 0 + + ++typedef enum FeatureWordType { ++ CPUID_FEATURE_WORD, ++ MSR_FEATURE_WORD, ++} FeatureWordType; ++ + typedef struct FeatureWordInfo { ++ FeatureWordType type; + const char **feat_names; +- uint32_t cpuid_eax; /* Input EAX for CPUID */ +- bool cpuid_needs_ecx; /* CPUID instruction uses ECX as input */ +- uint32_t cpuid_ecx; /* Input ECX value for CPUID */ +- int cpuid_reg; /* output register (R_* constant) */ ++ union { ++ /* If type==CPUID_FEATURE_WORD */ ++ struct { ++ uint32_t eax; /* Input EAX for CPUID */ ++ bool needs_ecx; /* CPUID instruction uses ECX as input */ ++ uint32_t ecx; /* Input ECX value for CPUID */ ++ int reg; /* output register (R_* constant) */ ++ } cpuid; ++ /* If type==MSR_FEATURE_WORD */ ++ struct { ++ uint32_t index; ++ struct { /*CPUID that enumerate this MSR*/ ++ FeatureWord cpuid_class; ++ uint32_t cpuid_flag; ++ } cpuid_dep; ++ } msr; ++ }; + uint32_t tcg_features; /* Feature flags supported by TCG */ + } FeatureWordInfo; + + static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + [FEAT_1_EDX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = feature_name, +- .cpuid_eax = 1, .cpuid_reg = R_EDX, ++ .cpuid = {.eax = 1, .reg = R_EDX, }, + .tcg_features = TCG_FEATURES, + }, + [FEAT_1_ECX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = ext_feature_name, +- .cpuid_eax = 1, .cpuid_reg = R_ECX, ++ .cpuid = { .eax = 1, .reg = R_ECX, }, + .tcg_features = TCG_EXT_FEATURES, + }, + [FEAT_8000_0001_EDX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = ext2_feature_name, +- .cpuid_eax = 0x80000001, .cpuid_reg = R_EDX, ++ .cpuid = { .eax = 0x80000001, .reg = R_EDX, }, + .tcg_features = TCG_EXT2_FEATURES, + }, + [FEAT_8000_0001_ECX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = ext3_feature_name, +- .cpuid_eax = 0x80000001, .cpuid_reg = R_ECX, ++ .cpuid = { .eax = 0x80000001, .reg = R_ECX, }, + .tcg_features = TCG_EXT3_FEATURES, + }, + [FEAT_C000_0001_EDX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = ext4_feature_name, +- .cpuid_eax = 0xC0000001, .cpuid_reg = R_EDX, ++ .cpuid = { .eax = 0x80000001, .reg = R_EDX, }, + .tcg_features = TCG_EXT4_FEATURES, + }, + [FEAT_KVM] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = kvm_feature_name, +- .cpuid_eax = KVM_CPUID_FEATURES, .cpuid_reg = R_EAX, ++ .cpuid = { .eax = KVM_CPUID_FEATURES, .reg = R_EAX, }, + .tcg_features = TCG_KVM_FEATURES, + }, + [FEAT_SVM] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = svm_feature_name, +- .cpuid_eax = 0x8000000A, .cpuid_reg = R_EDX, ++ .cpuid = { .eax = 0x8000000A, .reg = R_EDX, }, + .tcg_features = TCG_SVM_FEATURES, + }, + [FEAT_7_0_EBX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = cpuid_7_0_ebx_feature_name, +- .cpuid_eax = 7, +- .cpuid_needs_ecx = true, .cpuid_ecx = 0, +- .cpuid_reg = R_EBX, ++ .cpuid = { ++ .eax = 7, ++ .needs_ecx = true, .ecx = 0, ++ .reg = R_EBX, ++ }, + .tcg_features = TCG_7_0_EBX_FEATURES, + }, + [FEAT_7_0_ECX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = cpuid_7_0_ecx_feature_name, +- .cpuid_eax = 7, +- .cpuid_needs_ecx = true, .cpuid_ecx = 0, +- .cpuid_reg = R_ECX, ++ .cpuid = { ++ .eax = 7, ++ .needs_ecx = true, .ecx = 0, ++ .reg = R_ECX, ++ }, + .tcg_features = TCG_7_0_ECX_FEATURES, + }, + [FEAT_7_0_EDX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = cpuid_7_0_edx_feature_name, +- .cpuid_eax = 7, +- .cpuid_needs_ecx = true, .cpuid_ecx = 0, +- .cpuid_reg = R_EDX, ++ .cpuid = { ++ .eax = 7, ++ .needs_ecx = true, .ecx = 0, ++ .reg = R_EDX, ++ }, + .tcg_features = TCG_7_0_EDX_FEATURES, + }, + [FEAT_8000_0007_EDX] = { + .feat_names = cpuid_apm_edx_feature_name, +- .cpuid_eax = 0x80000007, +- .cpuid_reg = R_EDX, ++ .cpuid = { .eax = 0x80000007, .reg = R_EDX, }, + .tcg_features = TCG_APM_FEATURES, + }, + [FEAT_8000_0008_EBX] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = cpuid_80000008_ebx_feature_name, +- .cpuid_eax = 0x80000008, +- .cpuid_needs_ecx = false, .cpuid_ecx = 0, +- .cpuid_reg = R_EBX, ++ .cpuid = { .eax = 0x80000008, .reg = R_EBX, }, + }, + [FEAT_XSAVE] = { ++ .type = CPUID_FEATURE_WORD, + .feat_names = cpuid_xsave_feature_name, +- .cpuid_eax = 0xd, +- .cpuid_needs_ecx = true, .cpuid_ecx = 1, +- .cpuid_reg = R_EAX, ++ .cpuid = { ++ .eax = 0xd, ++ .needs_ecx = true, .ecx = 1, ++ .reg = R_EAX, ++ }, + }, + }; + +@@ -384,6 +420,8 @@ typedef struct ExtSaveArea { + uint32_t offset, size; + } ExtSaveArea; + ++static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w); ++ + static const ExtSaveArea ext_save_areas[] = { + [2] = { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, + .offset = 0x240, .size = 0x100 }, +@@ -1755,10 +1793,7 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + + FeatureWord w; + for (w = 0; w < FEATURE_WORDS; w++) { +- FeatureWordInfo *wi = &feature_word_info[w]; +- x86_cpu_def->features[w] = +- kvm_arch_get_supported_cpuid(s, wi->cpuid_eax, wi->cpuid_ecx, +- wi->cpuid_reg); ++ x86_cpu_def->features[w] = x86_cpu_get_supported_feature_word(w); + } + + /* +@@ -1774,19 +1809,40 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + #endif /* CONFIG_KVM */ + } + ++static char *feature_word_description(FeatureWordInfo *f, uint32_t bit) ++{ ++ assert(f->type == CPUID_FEATURE_WORD || f->type == MSR_FEATURE_WORD); ++ ++ switch (f->type) { ++ case CPUID_FEATURE_WORD: ++ { ++ const char *reg = get_register_name_32(f->cpuid.reg); ++ assert(reg); ++ return g_strdup_printf("CPUID.%02XH:%s", ++ f->cpuid.eax, reg); ++ } ++ case MSR_FEATURE_WORD: ++ return g_strdup_printf("MSR(%02XH)", ++ f->msr.index); ++ } ++ ++ return NULL; ++} ++ + static void report_unavailable_features(FeatureWordInfo *f, uint32_t mask) + { + int i; ++ char *feat_word_str; + + for (i = 0; i < 32; ++i) { + if (1 << i & mask) { +- const char *reg = get_register_name_32(f->cpuid_reg); +- assert(reg); ++ feat_word_str = feature_word_description(f, i); + fprintf(stderr, "warning: host doesn't support requested feature: " +- "CPUID.%02XH:%s%s%s [bit %d]\n", +- f->cpuid_eax, reg, ++ "%s%s%s [bit %d]\n", ++ feat_word_str, + f->feat_names[i] ? "." : "", + f->feat_names[i] ? f->feat_names[i] : "", i); ++ g_free(feat_word_str); + } + } + } +@@ -2095,11 +2151,18 @@ static void x86_cpu_get_feature_words(Object *obj, Visitor *v, void *opaque, + + for (w = 0; w < FEATURE_WORDS; w++) { + FeatureWordInfo *wi = &feature_word_info[w]; ++ /* ++ * We didn't have MSR features when "feature-words" was ++ * introduced. Therefore skipped other type entries. ++ */ ++ if (wi->type != CPUID_FEATURE_WORD) { ++ continue; ++ } + X86CPUFeatureWordInfo *qwi = &word_infos[w]; +- qwi->cpuid_input_eax = wi->cpuid_eax; +- qwi->has_cpuid_input_ecx = wi->cpuid_needs_ecx; +- qwi->cpuid_input_ecx = wi->cpuid_ecx; +- qwi->cpuid_register = x86_reg_info_32[wi->cpuid_reg].qapi_enum; ++ qwi->cpuid_input_eax = wi->cpuid.eax; ++ qwi->has_cpuid_input_ecx = wi->cpuid.needs_ecx; ++ qwi->cpuid_input_ecx = wi->cpuid.ecx; ++ qwi->cpuid_register = x86_reg_info_32[wi->cpuid.reg].qapi_enum; + qwi->features = array[w]; + + /* List will be in reverse order, but order shouldn't matter */ +@@ -2390,11 +2453,23 @@ CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp) + static uint32_t x86_cpu_get_supported_feature_word(FeatureWord w) + { + FeatureWordInfo *wi = &feature_word_info[w]; ++ uint32_t r = 0; + +- assert(kvm_enabled()); +- return kvm_arch_get_supported_cpuid(kvm_state, wi->cpuid_eax, +- wi->cpuid_ecx, +- wi->cpuid_reg); ++ if (kvm_enabled()) { ++ switch (wi->type) { ++ case CPUID_FEATURE_WORD: ++ r = kvm_arch_get_supported_cpuid(kvm_state, wi->cpuid.eax, ++ wi->cpuid.ecx, ++ wi->cpuid.reg); ++ break; ++ case MSR_FEATURE_WORD: ++ r = kvm_arch_get_supported_msr_feature(kvm_state, wi->msr.index); ++ break; ++ } ++ } else { ++ return ~0; ++ } ++ return r; + } + + /* +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-Use-common-variable-range-MTRR-counts.patch b/SOURCES/kvm-x86-Use-common-variable-range-MTRR-counts.patch new file mode 100644 index 0000000..5300ac8 --- /dev/null +++ b/SOURCES/kvm-x86-Use-common-variable-range-MTRR-counts.patch @@ -0,0 +1,59 @@ +From 9f6b8fe31ea92570c4e43d35abcadafea9576d89 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:45:47 +0200 +Subject: [PATCH 11/14] x86: Use common variable range MTRR counts + +Message-id: <20150410164547.16166.20530.stgit@gimli.home> +Patchwork-id: 64797 +O-Subject: [RHEL7.2 qemu-kvm PATCH 1/3] x86: Use common variable range MTRR counts +Bugzilla: 1210510 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Upstream: d8b5c67b05420d966664664ff287af05b884bdd1 + +We currently define the number of variable range MTRR registers as 8 +in the CPUX86State structure and vmstate, but use MSR_MTRRcap_VCNT +(also 8) to report to guests the number available. Change this to +use MSR_MTRRcap_VCNT consistently. + +Signed-off-by: Alex Williamson +Reviewed-by: Laszlo Ersek +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 2 +- + target-i386/machine.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 207645c..763fbf2 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -886,7 +886,7 @@ typedef struct CPUX86State { + /* MTRRs */ + uint64_t mtrr_fixed[11]; + uint64_t mtrr_deftype; +- MTRRVar mtrr_var[8]; ++ MTRRVar mtrr_var[MSR_MTRRcap_VCNT]; + + /* For KVM */ + uint32_t mp_state; +diff --git a/target-i386/machine.c b/target-i386/machine.c +index 87fd496..4c1ead4 100644 +--- a/target-i386/machine.c ++++ b/target-i386/machine.c +@@ -647,7 +647,7 @@ const VMStateDescription vmstate_x86_cpu = { + /* MTRRs */ + VMSTATE_UINT64_ARRAY_V(env.mtrr_fixed, X86CPU, 11, 8), + VMSTATE_UINT64_V(env.mtrr_deftype, X86CPU, 8), +- VMSTATE_MTRR_VARS(env.mtrr_var, X86CPU, 8, 8), ++ VMSTATE_MTRR_VARS(env.mtrr_var, X86CPU, MSR_MTRRcap_VCNT, 8), + /* KVM-related states */ + VMSTATE_INT32_V(env.interrupt_injected, X86CPU, 9), + VMSTATE_UINT32_V(env.mp_state, X86CPU, 9), +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-add-AVX512_4VNNIW-and-AVX512_4FMAPS-features.patch b/SOURCES/kvm-x86-add-AVX512_4VNNIW-and-AVX512_4FMAPS-features.patch new file mode 100644 index 0000000..1035dbe --- /dev/null +++ b/SOURCES/kvm-x86-add-AVX512_4VNNIW-and-AVX512_4FMAPS-features.patch @@ -0,0 +1,174 @@ +From 7b43b5139f8e919203d3ed20fbba6cb143fde6d7 Mon Sep 17 00:00:00 2001 +From: Eduardo Habkost +Date: Thu, 23 Feb 2017 14:29:32 +0100 +Subject: [PATCH 02/17] x86: add AVX512_4VNNIW and AVX512_4FMAPS features + +RH-Author: Eduardo Habkost +Message-id: <20170223142945.17790-2-ehabkost@redhat.com> +Patchwork-id: 74033 +O-Subject: [RHEL-7.4 qemu-kvm PATCH v2 01/14] x86: add AVX512_4VNNIW and AVX512_4FMAPS features +Bugzilla: 1382122 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina + +From: Luwei Kang + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1382122 + +The spec can be found in Intel Software Developer Manual or in +Instruction Set Extensions Programming Reference. + +Backport notes: + +Changes v1 -> v2: +* Fixed build error, moved feat_names to a separate static array + variable +* Fixed backport mistakes (I had forgotten to add + features[FEAT_7_0_EDX] initialization and filtering code) + +Signed-off-by: Piotr Luc +Signed-off-by: Luwei Kang +Message-Id: <1477902446-5932-1-git-send-email-he.chen@linux.intel.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit 95ea69fb46266aaa46d0c8b7f0ba8c4903dbe4e3) +Signed-off-by: Eduardo Habkost +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 31 ++++++++++++++++++++++++++++++- + target-i386/cpu.h | 4 ++++ + 2 files changed, 34 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index c3c8306..789e687 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -165,6 +165,17 @@ static const char *cpuid_7_0_ecx_feature_name[] = { + NULL, NULL, NULL, NULL, + }; + ++static const char *cpuid_7_0_edx_feature_name[] = { ++ NULL, NULL, "avx512-4vnniw", "avx512-4fmaps", ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++}; ++ + static const char *cpuid_xsave_feature_name[] = { + "xsaveopt", "xsavec", "xgetbv1", NULL, + NULL, NULL, NULL, NULL, +@@ -225,6 +236,12 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .cpuid_needs_ecx = true, .cpuid_ecx = 0, + .cpuid_reg = R_ECX, + }, ++ [FEAT_7_0_EDX] = { ++ .feat_names = cpuid_7_0_edx_feature_name, ++ .cpuid_eax = 7, ++ .cpuid_needs_ecx = true, .cpuid_ecx = 0, ++ .cpuid_reg = R_EDX, ++ }, + [FEAT_XSAVE] = { + .feat_names = cpuid_xsave_feature_name, + .cpuid_eax = 0xd, +@@ -484,6 +501,7 @@ typedef struct x86_def_t { + CPUID_7_0_EBX_ERMS, CPUID_7_0_EBX_INVPCID, CPUID_7_0_EBX_RTM, + CPUID_7_0_EBX_RDSEED */ + #define TCG_7_0_ECX_FEATURES 0 ++#define TCG_7_0_EDX_FEATURES 0 + + /* built-in CPU model definitions + */ +@@ -1254,9 +1272,12 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) + kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EBX); + x86_cpu_def->features[FEAT_7_0_ECX] = + kvm_arch_get_supported_cpuid(s, 0x7, 0, R_ECX); ++ x86_cpu_def->features[FEAT_7_0_EDX] = ++ kvm_arch_get_supported_cpuid(s, 0x7, 0, R_EDX); + } else { + x86_cpu_def->features[FEAT_7_0_EBX] = 0; + x86_cpu_def->features[FEAT_7_0_ECX] = 0; ++ x86_cpu_def->features[FEAT_7_0_EDX] = 0; + } + x86_cpu_def->features[FEAT_XSAVE] = + kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); +@@ -1343,6 +1364,9 @@ static int kvm_check_features_against_host(X86CPU *cpu) + {&env->features[FEAT_7_0_ECX], + &host_def.features[FEAT_7_0_ECX], + FEAT_7_0_ECX }, ++ {&env->features[FEAT_7_0_EDX], ++ &host_def.features[FEAT_7_0_EDX], ++ FEAT_7_0_EDX }, + {&env->features[FEAT_XSAVE], + &host_def.features[FEAT_XSAVE], + FEAT_XSAVE }, +@@ -1885,6 +1909,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + env->features[FEAT_SVM] |= plus_features[FEAT_SVM]; + env->features[FEAT_7_0_EBX] |= plus_features[FEAT_7_0_EBX]; + env->features[FEAT_7_0_ECX] |= plus_features[FEAT_7_0_ECX]; ++ env->features[FEAT_7_0_EDX] |= plus_features[FEAT_7_0_EDX]; + env->features[FEAT_XSAVE] |= plus_features[FEAT_XSAVE]; + env->features[FEAT_1_EDX] &= ~minus_features[FEAT_1_EDX]; + env->features[FEAT_1_ECX] &= ~minus_features[FEAT_1_ECX]; +@@ -1895,6 +1920,7 @@ static void cpu_x86_parse_featurestr(X86CPU *cpu, char *features, Error **errp) + env->features[FEAT_SVM] &= ~minus_features[FEAT_SVM]; + env->features[FEAT_7_0_EBX] &= ~minus_features[FEAT_7_0_EBX]; + env->features[FEAT_7_0_ECX] &= ~minus_features[FEAT_7_0_ECX]; ++ env->features[FEAT_7_0_EDX] &= ~minus_features[FEAT_7_0_EDX]; + env->features[FEAT_XSAVE] &= ~minus_features[FEAT_XSAVE]; + + out: +@@ -2032,6 +2058,7 @@ static void cpu_x86_register(X86CPU *cpu, const char *name, Error **errp) + env->features[FEAT_C000_0001_EDX] = def->features[FEAT_C000_0001_EDX]; + env->features[FEAT_7_0_EBX] = def->features[FEAT_7_0_EBX]; + env->features[FEAT_7_0_ECX] = def->features[FEAT_7_0_ECX]; ++ env->features[FEAT_7_0_EDX] = def->features[FEAT_7_0_EDX]; + env->features[FEAT_XSAVE] = def->features[FEAT_XSAVE]; + env->cpuid_xlevel2 = def->xlevel2; + +@@ -2270,7 +2297,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + *eax = 0; /* Maximum ECX value for sub-leaves */ + *ebx = env->features[FEAT_7_0_EBX]; /* Feature flags */ + *ecx = env->features[FEAT_7_0_ECX]; /* Feature flags */ +- *edx = 0; /* Reserved */ ++ *edx = env->features[FEAT_7_0_EDX]; /* Feature flags */ + } else { + *eax = 0; + *ebx = 0; +@@ -2680,6 +2707,8 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) + env->features[FEAT_8000_0001_ECX] &= TCG_EXT3_FEATURES; + env->features[FEAT_SVM] &= TCG_SVM_FEATURES; + env->features[FEAT_XSAVE] = 0; ++ env->features[FEAT_7_0_ECX] &= TCG_7_0_ECX_FEATURES; ++ env->features[FEAT_7_0_EDX] &= TCG_7_0_EDX_FEATURES; + } else { + if ((cpu->check_cpuid || cpu->enforce_cpuid) + && kvm_check_features_against_host(cpu) && cpu->enforce_cpuid) { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index d541809..eec5c49 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -401,6 +401,7 @@ typedef enum FeatureWord { + FEAT_1_ECX, /* CPUID[1].ECX */ + FEAT_7_0_EBX, /* CPUID[EAX=7,ECX=0].EBX */ + FEAT_7_0_ECX, /* CPUID[EAX=7,ECX=0].ECX */ ++ FEAT_7_0_EDX, /* CPUID[EAX=7,ECX=0].EDX */ + FEAT_8000_0001_EDX, /* CPUID[8000_0001].EDX */ + FEAT_8000_0001_ECX, /* CPUID[8000_0001].ECX */ + FEAT_C000_0001_EDX, /* CPUID[C000_0001].EDX */ +@@ -580,6 +581,9 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_ECX_OSPKE (1U << 4) + #define CPUID_7_0_ECX_RDPID (1U << 22) + ++#define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ ++#define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ ++ + #define CPUID_XSAVE_XSAVEOPT (1U << 0) + #define CPUID_XSAVE_XSAVEC (1U << 1) + #define CPUID_XSAVE_XGETBV1 (1U << 2) +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-add-AVX512_VPOPCNTDQ-features.patch b/SOURCES/kvm-x86-add-AVX512_VPOPCNTDQ-features.patch new file mode 100644 index 0000000..a0e2e5f --- /dev/null +++ b/SOURCES/kvm-x86-add-AVX512_VPOPCNTDQ-features.patch @@ -0,0 +1,63 @@ +From 3a10799602b257d8d890965a1c3144476d8aa48d Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 13 Mar 2017 20:15:12 +0100 +Subject: [PATCH 19/24] x86: add AVX512_VPOPCNTDQ features + +RH-Author: plai@redhat.com +Message-id: <1489436112-5802-2-git-send-email-plai@redhat.com> +Patchwork-id: 74283 +O-Subject: [RHEL7.4 qemu-kvm BZ1415830 v2 RESEND] x86: add AVX512_VPOPCNTDQ features +Bugzilla: 1415830 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: David Hildenbrand +RH-Acked-by: Bandan Das + +From: He Chen + +AVX512_VPOPCNTDQ: Vector POPCNT instructions for word and qwords. +variable precision. + +Signed-off-by: He Chen +Message-Id: <1484272411-28073-1-git-send-email-he.chen@linux.intel.com> +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost +(cherry picked from commit f77543772dcd38fa438470d9b80bafbd3a3ebbd7) +Signed-off-by: Paul Lai +Signed-off-by: Miroslav Rezanina + +Conflicts: + target/i386/cpu.c -> changes applied to target-i386/cpu.c + target/i386/cpu.h -> changes applied to target-i386/cpu.h +--- + target-i386/cpu.c | 2 +- + target-i386/cpu.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 38056eb..33f0997 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -158,7 +158,7 @@ static const char *cpuid_7_0_ecx_feature_name[] = { + NULL, "avx512vbmi", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, ++ NULL, NULL, "avx512-vpopcntdq", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index eec5c49..f04deb4 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -579,6 +579,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_ECX_UMIP (1U << 2) + #define CPUID_7_0_ECX_PKU (1U << 3) + #define CPUID_7_0_ECX_OSPKE (1U << 4) ++#define CPUID_7_0_ECX_AVX512_VPOPCNTDQ (1U << 14) /* POPCNT for vectors of DW/QW */ + #define CPUID_7_0_ECX_RDPID (1U << 22) + + #define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-cpu-Enable-CLDEMOTE-Demote-Cache-Line-cpu-featur.patch b/SOURCES/kvm-x86-cpu-Enable-CLDEMOTE-Demote-Cache-Line-cpu-featur.patch new file mode 100644 index 0000000..8404108 --- /dev/null +++ b/SOURCES/kvm-x86-cpu-Enable-CLDEMOTE-Demote-Cache-Line-cpu-featur.patch @@ -0,0 +1,80 @@ +From 7fa8107debfd4c659b77a8ba12b96144dfbdc113 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 4 Feb 2019 17:29:44 +0100 +Subject: [PATCH 1/3] x86/cpu: Enable CLDEMOTE(Demote Cache Line) cpu feature + +RH-Author: plai@redhat.com +Message-id: <1549301384-19698-1-git-send-email-plai@redhat.com> +Patchwork-id: 84205 +O-Subject: [RHEL7.7 qemu-kvm PATCH BZ 1537773 RESEND] x86/cpu: Enable CLDEMOTE(Demote Cache Line) cpu feature +Bugzilla: 1537773 +RH-Acked-by: Bandan Das +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Miroslav Rezanina + +From: Jingqi Liu + +The CLDEMOTE instruction hints to hardware that the cache line that +contains the linear address should be moved("demoted") from +the cache(s) closest to the processor core to a level more distant +from the processor core. This may accelerate subsequent accesses +to the line by other cores in the same coherence domain, +especially if the line was written by the core that demotes the line. + +Intel Snow Ridge has added new cpu feature, CLDEMOTE. +The new cpu feature needs to be exposed to guest VM. + +The bit definition: +CPUID.(EAX=7,ECX=0):ECX[bit 25] CLDEMOTE + +The release document ref below link: +https://software.intel.com/sites/default/files/managed/c5/15/\ +architecture-instruction-set-extensions-programming-reference.pdf + +Signed-off-by: Jingqi Liu +Message-Id: <1525406253-54846-1-git-send-email-jingqi.liu@intel.com> +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost +(cherry picked from commit 0da0fb062841d0dcd8ba47e4a989d2e952cdf0ff) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target/i386/cpu.c [doesn't exist] + changes made to target-i386/cpu.c + target/i386/cpu.h [doesn't exist] + changes made to target-i386/cpu.h + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 2 +- + target-i386/cpu.h | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index a36483e..c9603df 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -162,7 +162,7 @@ static const char *cpuid_7_0_ecx_feature_name[] = { + "avx512bitalg", NULL, "avx512-vpopcntdq", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, "rdpid", NULL, +- NULL, NULL, NULL, NULL, ++ NULL, "cldemote", NULL, NULL, + NULL, NULL, NULL, NULL, + }; + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 73437f1..5d47ab8 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -593,6 +593,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_ECX_AVX512BITALG (1U << 12) + #define CPUID_7_0_ECX_AVX512_VPOPCNTDQ (1U << 14) /* POPCNT for vectors of DW/QW */ + #define CPUID_7_0_ECX_RDPID (1U << 22) ++#define CPUID_7_0_ECX_CLDEMOTE (1U << 25) /* CLDEMOTE Instruction */ + + #define CPUID_7_0_EDX_AVX512_4VNNIW (1U << 2) /* AVX512 Neural Network Instructions */ + #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-cpu-Enable-new-SSE-AVX-AVX512-cpu-features.patch b/SOURCES/kvm-x86-cpu-Enable-new-SSE-AVX-AVX512-cpu-features.patch new file mode 100644 index 0000000..32b1b61 --- /dev/null +++ b/SOURCES/kvm-x86-cpu-Enable-new-SSE-AVX-AVX512-cpu-features.patch @@ -0,0 +1,88 @@ +From 1d9d6bd6721a92ae161bd7a4e9de202691b90da0 Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Tue, 8 May 2018 17:40:48 +0200 +Subject: [PATCH 01/17] x86/cpu: Enable new SSE/AVX/AVX512 cpu features + +RH-Author: plai@redhat.com +Message-id: <1525801248-24104-1-git-send-email-plai@redhat.com> +Patchwork-id: 80114 +O-Subject: [RHEL7.6 PATCH BZ 1513686] x86/cpu: Enable new SSE/AVX/AVX512 cpu features +Bugzilla: 1513686 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Igor Mammedov +RH-Acked-by: Radim Krcmar + +From: Yang Zhong + +Intel OTC Virt tested. + +Intel IceLake cpu has added new cpu features,AVX512_VBMI2/GFNI/ +VAES/VPCLMULQDQ/AVX512_VNNI/AVX512_BITALG. Those new cpu features +need expose to guest VM. + +The bit definition: +CPUID.(EAX=7,ECX=0):ECX[bit 06] AVX512_VBMI2 +CPUID.(EAX=7,ECX=0):ECX[bit 08] GFNI +CPUID.(EAX=7,ECX=0):ECX[bit 09] VAES +CPUID.(EAX=7,ECX=0):ECX[bit 10] VPCLMULQDQ +CPUID.(EAX=7,ECX=0):ECX[bit 11] AVX512_VNNI +CPUID.(EAX=7,ECX=0):ECX[bit 12] AVX512_BITALG + +The release document ref below link: +https://software.intel.com/sites/default/files/managed/c5/15/\ +architecture-instruction-set-extensions-programming-reference.pdf + +Signed-off-by: Yang Zhong +Message-Id: <1511335676-20797-1-git-send-email-yang.zhong@intel.com> +Signed-off-by: Paolo Bonzini +(cherry picked from commit aff9e6e46a343e1404498be4edd03db1112f0950) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target/i386/cpu.c + target/i386/cpu.h + changes applied to target-i386/cpu.{c,h} + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 6 +++--- + target-i386/cpu.h | 6 ++++++ + 2 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 539c202..48a5507 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -156,9 +156,9 @@ static const char *cpuid_7_0_ebx_feature_name[] = { + + static const char *cpuid_7_0_ecx_feature_name[] = { + NULL, "avx512vbmi", NULL, "pku", +- "ospke", NULL, NULL, NULL, +- NULL, NULL, NULL, NULL, +- NULL, NULL, "avx512-vpopcntdq", NULL, ++ "ospke", NULL, "avx512vbmi2", NULL, ++ "gfni", "vaes", "vpclmulqdq", "avx512vnni", ++ "avx512bitalg", NULL, "avx512-vpopcntdq", NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index da84443..a781639 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -584,6 +584,12 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_7_0_ECX_UMIP (1U << 2) + #define CPUID_7_0_ECX_PKU (1U << 3) + #define CPUID_7_0_ECX_OSPKE (1U << 4) ++#define CPUID_7_0_ECX_VBMI2 (1U << 6) /* Additional VBMI Instrs */ ++#define CPUID_7_0_ECX_GFNI (1U << 8) ++#define CPUID_7_0_ECX_VAES (1U << 9) ++#define CPUID_7_0_ECX_VPCLMULQDQ (1U << 10) ++#define CPUID_7_0_ECX_AVX512VNNI (1U << 11) ++#define CPUID_7_0_ECX_AVX512BITALG (1U << 12) + #define CPUID_7_0_ECX_AVX512_VPOPCNTDQ (1U << 14) /* POPCNT for vectors of DW/QW */ + #define CPUID_7_0_ECX_RDPID (1U << 22) + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-cpuid-reconstruct-leaf-0Dh-data.patch b/SOURCES/kvm-x86-cpuid-reconstruct-leaf-0Dh-data.patch new file mode 100644 index 0000000..f1aad1e --- /dev/null +++ b/SOURCES/kvm-x86-cpuid-reconstruct-leaf-0Dh-data.patch @@ -0,0 +1,122 @@ +From 1a92e9ba72edd6386d35cf4894b7b83ea3279cff Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 5 Nov 2013 15:10:44 +0100 +Subject: [PATCH 53/81] x86: cpuid: reconstruct leaf 0Dh data + +RH-Author: Paolo Bonzini +Message-id: <1383664244-14818-3-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55409 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 2/2] x86: cpuid: reconstruct leaf 0Dh data +Bugzilla: 1005695 +RH-Acked-by: Alex Williamson +RH-Acked-by: Orit Wasserman +RH-Acked-by: Eduardo Habkost + +The data in leaf 0Dh depends on information from other feature bits. +Instead of passing it blindly from the host, compute it based on +whether these feature bits are enabled. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Gleb Natapov +(cherry picked from commit 2560f19f426aceb4f2e809d860b93e7573cb1c4e) +--- + target-i386/cpu.c | 65 ++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 48 insertions(+), 17 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 65 +++++++++++++++++++++++++++++++++++++++-------------- + 1 files changed, 48 insertions(+), 17 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index bc077ca..42105aa 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -218,6 +218,15 @@ X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = { + }; + #undef REGISTER + ++typedef struct ExtSaveArea { ++ uint32_t feature, bits; ++ uint32_t offset, size; ++} ExtSaveArea; ++ ++static const ExtSaveArea ext_save_areas[] = { ++ [2] = { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, ++ .offset = 0x100, .size = 0x240 }, ++}; + + const char *get_register_name_32(unsigned int reg) + { +@@ -2061,29 +2070,51 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, + *edx = 0; + } + break; +- case 0xD: ++ case 0xD: { ++ KVMState *s = cs->kvm_state; ++ uint64_t kvm_mask; ++ int i; ++ + /* Processor Extended State */ +- if (!(env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE)) { +- *eax = 0; +- *ebx = 0; +- *ecx = 0; +- *edx = 0; ++ *eax = 0; ++ *ebx = 0; ++ *ecx = 0; ++ *edx = 0; ++ if (!(env->features[FEAT_1_ECX] & CPUID_EXT_XSAVE) || !kvm_enabled()) { + break; + } +- if (kvm_enabled()) { +- KVMState *s = cs->kvm_state; ++ kvm_mask = ++ kvm_arch_get_supported_cpuid(s, 0xd, 0, R_EAX) | ++ ((uint64_t)kvm_arch_get_supported_cpuid(s, 0xd, 0, R_EDX) << 32); + +- *eax = kvm_arch_get_supported_cpuid(s, 0xd, count, R_EAX); +- *ebx = kvm_arch_get_supported_cpuid(s, 0xd, count, R_EBX); +- *ecx = kvm_arch_get_supported_cpuid(s, 0xd, count, R_ECX); +- *edx = kvm_arch_get_supported_cpuid(s, 0xd, count, R_EDX); +- } else { +- *eax = 0; +- *ebx = 0; +- *ecx = 0; +- *edx = 0; ++ if (count == 0) { ++ *ecx = 0x240; ++ for (i = 2; i < ARRAY_SIZE(ext_save_areas); i++) { ++ const ExtSaveArea *esa = &ext_save_areas[i]; ++ if ((env->features[esa->feature] & esa->bits) == esa->bits && ++ (kvm_mask & (1 << i)) != 0) { ++ if (i < 32) { ++ *eax |= 1 << i; ++ } else { ++ *edx |= 1 << (i - 32); ++ } ++ *ecx = MAX(*ecx, esa->offset + esa->size); ++ } ++ } ++ *eax |= kvm_mask & (XSTATE_FP | XSTATE_SSE); ++ *ebx = *ecx; ++ } else if (count == 1) { ++ *eax = kvm_arch_get_supported_cpuid(s, 0xd, 1, R_EAX); ++ } else if (count < ARRAY_SIZE(ext_save_areas)) { ++ const ExtSaveArea *esa = &ext_save_areas[count]; ++ if ((env->features[esa->feature] & esa->bits) == esa->bits && ++ (kvm_mask & (1 << count)) != 0) { ++ *eax = esa->offset; ++ *ebx = esa->size; ++ } + } + break; ++ } + case 0x80000000: + *eax = env->cpuid_xlevel; + *ebx = env->cpuid_vendor1; +-- +1.7.1 + diff --git a/SOURCES/kvm-x86-define-a-new-MSR-based-feature-word-FEATURE_WORD.patch b/SOURCES/kvm-x86-define-a-new-MSR-based-feature-word-FEATURE_WORD.patch new file mode 100644 index 0000000..71ee4b4 --- /dev/null +++ b/SOURCES/kvm-x86-define-a-new-MSR-based-feature-word-FEATURE_WORD.patch @@ -0,0 +1,132 @@ +From a047703bdb55821e77d9a89f484e98e5293dc5bf Mon Sep 17 00:00:00 2001 +From: "plai@redhat.com" +Date: Mon, 23 Sep 2019 20:40:24 +0200 +Subject: [PATCH 08/12] x86: define a new MSR based feature word -- + FEATURE_WORDS_ARCH_CAPABILITIES + +RH-Author: plai@redhat.com +Message-id: <1569271227-28026-8-git-send-email-plai@redhat.com> +Patchwork-id: 90860 +O-Subject: [RHEL7.8 qemu-kvm PATCH v6 07/10] x86: define a new MSR based feature word -- FEATURE_WORDS_ARCH_CAPABILITIES +Bugzilla: 1709971 +RH-Acked-by: Eduardo Habkost +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Robert Hoo + +Note RSBA is specially treated -- no matter host support it or not, qemu +pretends it is supported. + +Signed-off-by: Robert Hoo +Message-Id: <1539578845-37944-4-git-send-email-robert.hu@linux.intel.com> +[ehabkost: removed automatic enabling of RSBA] +Reviewed-by: Eduardo Habkost +Signed-off-by: Eduardo Habkost + +(cherry picked from commit d86f963694df27f11b3681ffd225c9362de1b634) +Signed-off-by: Paul Lai + +Resolved Conflicts: + target/i386/cpu.c + target/i386/cpu.h + target/i386/kvm.c + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 23 +++++++++++++++++++++++ + target-i386/cpu.h | 8 ++++++++ + target-i386/kvm.c | 10 ++++++++++ + 3 files changed, 41 insertions(+) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 488634c..24fc000 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -210,6 +210,17 @@ static const char *cpuid_apm_edx_feature_name[] = { + NULL, NULL, NULL, NULL, + }; + ++static const char *cpuid_arch_capabilities_feature_name[] = { ++ "rdctl-no", "ibrs-all", "rsba", "skip-l1dfl-vmentry", ++ "ssb-no", NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++ NULL, NULL, NULL, NULL, ++}; ++ + #define I486_FEATURES (CPUID_FP87 | CPUID_VME | CPUID_PSE) + #define PENTIUM_FEATURES (I486_FEATURES | CPUID_DE | CPUID_TSC | \ + CPUID_MSR | CPUID_MCE | CPUID_CX8 | CPUID_MMX | CPUID_APIC) +@@ -392,6 +403,18 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { + .reg = R_EAX, + }, + }, ++ /*Below are MSR exposed features*/ ++ [FEAT_ARCH_CAPABILITIES] = { ++ .type = MSR_FEATURE_WORD, ++ .feat_names = cpuid_arch_capabilities_feature_name, ++ .msr = { ++ .index = MSR_IA32_ARCH_CAPABILITIES, ++ .cpuid_dep = { ++ FEAT_7_0_EDX, ++ CPUID_7_0_EDX_ARCH_CAPABILITIES ++ } ++ }, ++ }, + }; + + typedef struct X86RegisterInfo32 { +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 0ce479a..5a86b2c 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -416,6 +416,7 @@ typedef enum FeatureWord { + FEAT_KVM, /* CPUID[4000_0001].EAX (KVM_CPUID_FEATURES) */ + FEAT_SVM, /* CPUID[8000_000A].EDX */ + FEAT_XSAVE, /* CPUID[EAX=0xd,ECX=1].EAX */ ++ FEAT_ARCH_CAPABILITIES, + FEATURE_WORDS, + } FeatureWord; + +@@ -636,6 +637,13 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; + #define CPUID_MWAIT_IBE (1U << 1) /* Interrupts can exit capability */ + #define CPUID_MWAIT_EMX (1U << 0) /* enumeration supported */ + ++/* MSR Feature Bits */ ++#define MSR_ARCH_CAP_RDCL_NO (1U << 0) ++#define MSR_ARCH_CAP_IBRS_ALL (1U << 1) ++#define MSR_ARCH_CAP_RSBA (1U << 2) ++#define MSR_ARCH_CAP_SKIP_L1DFL_VMENTRY (1U << 3) ++#define MSR_ARCH_CAP_SSB_NO (1U << 4) ++ + #ifndef HYPERV_SPINLOCK_NEVER_RETRY + #define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF + #endif +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 159ed4c..722cfbc 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1339,6 +1339,16 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], MSR_IA32_TSC, env->tsc); + } + } ++ /* If host supports feature MSR, write down. */ ++ if (kvm_feature_msrs) { ++ int i; ++ for (i = 0; i < kvm_feature_msrs->nmsrs; i++) ++ if (kvm_feature_msrs->indices[i] == MSR_IA32_ARCH_CAPABILITIES) { ++ kvm_msr_entry_set(&msrs[n++], MSR_IA32_ARCH_CAPABILITIES, ++ env->features[FEAT_ARCH_CAPABILITIES]); ++ break; ++ } ++ } + /* + * The following MSRs have side effects on the guest or are too heavy + * for normal writeback. Limit them to reset or full state updates. +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-fix-migration-from-pre-version-12.patch b/SOURCES/kvm-x86-fix-migration-from-pre-version-12.patch new file mode 100644 index 0000000..e4e9e59 --- /dev/null +++ b/SOURCES/kvm-x86-fix-migration-from-pre-version-12.patch @@ -0,0 +1,65 @@ +From 8328cafa2406bcfed728c236fce8e5121f6c0b6d Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 5 Nov 2013 15:10:43 +0100 +Subject: [PATCH 52/81] x86: fix migration from pre-version 12 + +RH-Author: Paolo Bonzini +Message-id: <1383664244-14818-2-git-send-email-pbonzini@redhat.com> +Patchwork-id: 55408 +O-Subject: [RHEL 7.0 qemu-kvm PATCH 1/2] x86: fix migration from pre-version 12 +Bugzilla: 1005695 +RH-Acked-by: Alex Williamson +RH-Acked-by: Orit Wasserman +RH-Acked-by: Eduardo Habkost + +On KVM, the KVM_SET_XSAVE would be executed with a 0 xstate_bv, +and not restore anything. + +Since FP and SSE data are always valid, set them in xstate_bv at reset +time. In fact, that value is the same that KVM_GET_XSAVE returns on +pre-XSAVE hosts. + +Signed-off-by: Paolo Bonzini +Signed-off-by: Gleb Natapov +(cherry picked from commit c74f41bbcc83d12787ac42f2c74fc2be54e9f222) +--- + target-i386/cpu.c | 1 + + target-i386/cpu.h | 4 ++++ + 2 files changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.c | 1 + + target-i386/cpu.h | 4 ++++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 170a46c..bc077ca 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -2269,6 +2269,7 @@ static void x86_cpu_reset(CPUState *s) + env->fpuc = 0x37f; + + env->mxcsr = 0x1f80; ++ env->xstate_bv = XSTATE_FP | XSTATE_SSE; + + env->pat = 0x0007040600070406ULL; + env->msr_ia32_misc_enable = MSR_IA32_MISC_ENABLE_DEFAULT; +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 6aebc80..9c55953 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -379,6 +379,10 @@ + + #define MSR_VM_HSAVE_PA 0xc0010117 + ++#define XSTATE_FP 1 ++#define XSTATE_SSE 2 ++#define XSTATE_YMM 4 ++ + /* CPUID feature words */ + typedef enum FeatureWord { + FEAT_1_EDX, /* CPUID[1].EDX */ +-- +1.7.1 + diff --git a/SOURCES/kvm-x86-kvm-Add-MTRR-support-for-kvm_get-put_msrs.patch b/SOURCES/kvm-x86-kvm-Add-MTRR-support-for-kvm_get-put_msrs.patch new file mode 100644 index 0000000..3b06241 --- /dev/null +++ b/SOURCES/kvm-x86-kvm-Add-MTRR-support-for-kvm_get-put_msrs.patch @@ -0,0 +1,213 @@ +From 7a7ee1756f309f4f69ed9929b2d7a652f9a879b2 Mon Sep 17 00:00:00 2001 +From: Alex Williamson +Date: Fri, 10 Apr 2015 16:45:53 +0200 +Subject: [PATCH 12/14] x86: kvm: Add MTRR support for kvm_get|put_msrs() + +Message-id: <20150410164553.16166.97985.stgit@gimli.home> +Patchwork-id: 64798 +O-Subject: [RHEL7.2 qemu-kvm PATCH 2/3] x86: kvm: Add MTRR support for kvm_get|put_msrs() +Bugzilla: 1210510 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Upstream: d1ae67f626c5ed5729e1d8212834291b409d26df + +The MTRR state in KVM currently runs completely independent of the +QEMU state in CPUX86State.mtrr_*. This means that on migration, the +target loses MTRR state from the source. Generally that's ok though +because KVM ignores it and maps everything as write-back anyway. The +exception to this rule is when we have an assigned device and an IOMMU +that doesn't promote NoSnoop transactions from that device to be cache +coherent. In that case KVM trusts the guest mapping of memory as +configured in the MTRR. + +This patch updates kvm_get|put_msrs() so that we retrieve the actual +vCPU MTRR settings and therefore keep CPUX86State synchronized for +migration. kvm_put_msrs() is also used on vCPU reset and therefore +allows future modificaitons of MTRR state at reset to be realized. + +Note that the entries array used by both functions was already +slightly undersized for holding every possible MSR, so this patch +increases it beyond the 28 new entries necessary for MTRR state. + +Signed-off-by: Alex Williamson +Reviewed-by: Laszlo Ersek +Cc: qemu-stable@nongnu.org +Signed-off-by: Paolo Bonzini +Signed-off-by: Miroslav Rezanina +--- + target-i386/cpu.h | 2 ++ + target-i386/kvm.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 101 insertions(+), 2 deletions(-) + +diff --git a/target-i386/cpu.h b/target-i386/cpu.h +index 763fbf2..e9edd3d 100644 +--- a/target-i386/cpu.h ++++ b/target-i386/cpu.h +@@ -332,6 +332,8 @@ + #define MSR_MTRRphysBase(reg) (0x200 + 2 * (reg)) + #define MSR_MTRRphysMask(reg) (0x200 + 2 * (reg) + 1) + ++#define MSR_MTRRphysIndex(addr) ((((addr) & ~1u) - 0x200) / 2) ++ + #define MSR_MTRRfix64K_00000 0x250 + #define MSR_MTRRfix16K_80000 0x258 + #define MSR_MTRRfix16K_A0000 0x259 +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 65362ac..97ae345 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -73,6 +73,7 @@ static int lm_capable_kernel; + static bool has_msr_hv_hypercall; + static bool has_msr_hv_vapic; + static bool has_msr_hv_tsc; ++static bool has_msr_mtrr; + + static bool has_msr_architectural_pmu; + static uint32_t num_architectural_pmu_counters; +@@ -711,6 +712,10 @@ int kvm_arch_init_vcpu(CPUState *cs) + env->kvm_xsave_buf = qemu_memalign(4096, sizeof(struct kvm_xsave)); + } + ++ if (env->features[FEAT_1_EDX] & CPUID_MTRR) { ++ has_msr_mtrr = true; ++ } ++ + return 0; + } + +@@ -1117,7 +1122,7 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + CPUX86State *env = &cpu->env; + struct { + struct kvm_msrs info; +- struct kvm_msr_entry entries[100]; ++ struct kvm_msr_entry entries[150]; + } msr_data; + struct kvm_msr_entry *msrs = msr_data.entries; + int n = 0, i; +@@ -1219,6 +1224,37 @@ static int kvm_put_msrs(X86CPU *cpu, int level) + kvm_msr_entry_set(&msrs[n++], HV_X64_MSR_REFERENCE_TSC, + env->msr_hv_tsc); + } ++ if (has_msr_mtrr) { ++ kvm_msr_entry_set(&msrs[n++], MSR_MTRRdefType, env->mtrr_deftype); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix64K_00000, env->mtrr_fixed[0]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix16K_80000, env->mtrr_fixed[1]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix16K_A0000, env->mtrr_fixed[2]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_C0000, env->mtrr_fixed[3]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_C8000, env->mtrr_fixed[4]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_D0000, env->mtrr_fixed[5]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_D8000, env->mtrr_fixed[6]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_E0000, env->mtrr_fixed[7]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_E8000, env->mtrr_fixed[8]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_F0000, env->mtrr_fixed[9]); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRfix4K_F8000, env->mtrr_fixed[10]); ++ for (i = 0; i < MSR_MTRRcap_VCNT; i++) { ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRphysBase(i), env->mtrr_var[i].base); ++ kvm_msr_entry_set(&msrs[n++], ++ MSR_MTRRphysMask(i), env->mtrr_var[i].mask); ++ } ++ } + } + if (env->mcg_cap) { + int i; +@@ -1418,7 +1454,7 @@ static int kvm_get_msrs(X86CPU *cpu) + CPUX86State *env = &cpu->env; + struct { + struct kvm_msrs info; +- struct kvm_msr_entry entries[100]; ++ struct kvm_msr_entry entries[150]; + } msr_data; + struct kvm_msr_entry *msrs = msr_data.entries; + int ret, i, n; +@@ -1500,6 +1536,24 @@ static int kvm_get_msrs(X86CPU *cpu) + if (has_msr_hv_tsc) { + msrs[n++].index = HV_X64_MSR_REFERENCE_TSC; + } ++ if (has_msr_mtrr) { ++ msrs[n++].index = MSR_MTRRdefType; ++ msrs[n++].index = MSR_MTRRfix64K_00000; ++ msrs[n++].index = MSR_MTRRfix16K_80000; ++ msrs[n++].index = MSR_MTRRfix16K_A0000; ++ msrs[n++].index = MSR_MTRRfix4K_C0000; ++ msrs[n++].index = MSR_MTRRfix4K_C8000; ++ msrs[n++].index = MSR_MTRRfix4K_D0000; ++ msrs[n++].index = MSR_MTRRfix4K_D8000; ++ msrs[n++].index = MSR_MTRRfix4K_E0000; ++ msrs[n++].index = MSR_MTRRfix4K_E8000; ++ msrs[n++].index = MSR_MTRRfix4K_F0000; ++ msrs[n++].index = MSR_MTRRfix4K_F8000; ++ for (i = 0; i < MSR_MTRRcap_VCNT; i++) { ++ msrs[n++].index = MSR_MTRRphysBase(i); ++ msrs[n++].index = MSR_MTRRphysMask(i); ++ } ++ } + + msr_data.info.nmsrs = n; + ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, &msr_data); +@@ -1614,6 +1668,49 @@ static int kvm_get_msrs(X86CPU *cpu) + case HV_X64_MSR_REFERENCE_TSC: + env->msr_hv_tsc = msrs[i].data; + break; ++ case MSR_MTRRdefType: ++ env->mtrr_deftype = msrs[i].data; ++ break; ++ case MSR_MTRRfix64K_00000: ++ env->mtrr_fixed[0] = msrs[i].data; ++ break; ++ case MSR_MTRRfix16K_80000: ++ env->mtrr_fixed[1] = msrs[i].data; ++ break; ++ case MSR_MTRRfix16K_A0000: ++ env->mtrr_fixed[2] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_C0000: ++ env->mtrr_fixed[3] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_C8000: ++ env->mtrr_fixed[4] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_D0000: ++ env->mtrr_fixed[5] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_D8000: ++ env->mtrr_fixed[6] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_E0000: ++ env->mtrr_fixed[7] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_E8000: ++ env->mtrr_fixed[8] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_F0000: ++ env->mtrr_fixed[9] = msrs[i].data; ++ break; ++ case MSR_MTRRfix4K_F8000: ++ env->mtrr_fixed[10] = msrs[i].data; ++ break; ++ case MSR_MTRRphysBase(0) ... MSR_MTRRphysMask(MSR_MTRRcap_VCNT - 1): ++ if (index & 1) { ++ env->mtrr_var[MSR_MTRRphysIndex(index)].mask = msrs[i].data; ++ } else { ++ env->mtrr_var[MSR_MTRRphysIndex(index)].base = msrs[i].data; ++ } ++ break; + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-x86-lapic-Load-LAPIC-state-at-post_load.patch b/SOURCES/kvm-x86-lapic-Load-LAPIC-state-at-post_load.patch new file mode 100644 index 0000000..e310843 --- /dev/null +++ b/SOURCES/kvm-x86-lapic-Load-LAPIC-state-at-post_load.patch @@ -0,0 +1,148 @@ +From f0254b84d490273e922d04b01a7b48f0ac370185 Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Tue, 15 May 2018 11:56:32 +0200 +Subject: [PATCH 06/10] x86/lapic: Load LAPIC state at post_load + +RH-Author: Dr. David Alan Gilbert +Message-id: <20180515115634.24469-4-dgilbert@redhat.com> +Patchwork-id: 80273 +O-Subject: [RHEL-7.6 qemu-kvm PATCH v2 3/5] x86/lapic: Load LAPIC state at post_load +Bugzilla: 1577680 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Eduardo Habkost + +From: "Dr. David Alan Gilbert" + +Load the LAPIC state during post_load (rather than when the CPU +starts). + +This allows an interrupt to be delivered from the ioapic to +the lapic prior to cpu loading, in particular the RTC that starts +ticking as soon as we load it's state. + +Fixes a case where Windows hangs after migration due to RTC interrupts +disappearing. + +Signed-off-by: Dr. David Alan Gilbert +Suggested-by: Paolo Bonzini +Signed-off-by: Paolo Bonzini +(cherry picked from commit 78d6a05d2f69cbfa6e95f0a4a24a2c934969913b) +Signed-off-by: Miroslav Rezanina +--- + hw/i386/kvm/apic.c | 27 ++++++++++++++++++++++++--- + include/sysemu/kvm.h | 1 - + target-i386/kvm.c | 18 ------------------ + 3 files changed, 24 insertions(+), 22 deletions(-) + +diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c +index 6ead17c..0f3a80c 100644 +--- a/hw/i386/kvm/apic.c ++++ b/hw/i386/kvm/apic.c +@@ -25,9 +25,8 @@ static inline uint32_t kvm_apic_get_reg(struct kvm_lapic_state *kapic, + return *((uint32_t *)(kapic->regs + (reg_id << 4))); + } + +-void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state *kapic) ++static void kvm_put_apic_state(APICCommonState *s, struct kvm_lapic_state *kapic) + { +- APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d); + int i; + + memset(kapic, 0, sizeof(*kapic)); +@@ -122,6 +121,27 @@ static void kvm_apic_vapic_base_update(APICCommonState *s) + } + } + ++static void kvm_apic_put(void *data) ++{ ++ APICCommonState *s = data; ++ struct kvm_lapic_state kapic; ++ int ret; ++ ++ kvm_put_apic_state(s, &kapic); ++ ++ ret = kvm_vcpu_ioctl(CPU(s->cpu), KVM_SET_LAPIC, &kapic); ++ if (ret < 0) { ++ fprintf(stderr, "KVM_SET_LAPIC failed: %s\n", strerror(ret)); ++ abort(); ++ } ++} ++ ++static void kvm_apic_post_load(APICCommonState *s) ++{ ++ fprintf(stderr, "%s: Yeh\n", __func__); ++ run_on_cpu(CPU(s->cpu), kvm_apic_put, s); ++} ++ + static void do_inject_external_nmi(void *data) + { + APICCommonState *s = data; +@@ -173,7 +193,7 @@ static const MemoryRegionOps kvm_apic_io_ops = { + + static void kvm_apic_reset(APICCommonState *s) + { +- /* This function intentionally left blank, for now */ ++ run_on_cpu(CPU(s->cpu), kvm_apic_put, s); + } + + static void kvm_apic_init(APICCommonState *s) +@@ -195,6 +215,7 @@ static void kvm_apic_class_init(ObjectClass *klass, void *data) + k->set_base = kvm_apic_set_base; + k->set_tpr = kvm_apic_set_tpr; + k->get_tpr = kvm_apic_get_tpr; ++ k->post_load = kvm_apic_post_load; + k->enable_tpr_reporting = kvm_apic_enable_tpr_reporting; + k->vapic_base_update = kvm_apic_vapic_base_update; + k->external_nmi = kvm_apic_external_nmi; +diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h +index 0c6833f..49cfc42 100644 +--- a/include/sysemu/kvm.h ++++ b/include/sysemu/kvm.h +@@ -216,7 +216,6 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg); + + void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin); + +-void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state *kapic); + void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic); + + struct kvm_guest_debug; +diff --git a/target-i386/kvm.c b/target-i386/kvm.c +index 6f3424e..71f1573 100644 +--- a/target-i386/kvm.c ++++ b/target-i386/kvm.c +@@ -1863,20 +1863,6 @@ static int kvm_get_apic(X86CPU *cpu) + return 0; + } + +-static int kvm_put_apic(X86CPU *cpu) +-{ +- CPUX86State *env = &cpu->env; +- DeviceState *apic = env->apic_state; +- struct kvm_lapic_state kapic; +- +- if (apic && kvm_irqchip_in_kernel()) { +- kvm_put_apic_state(apic, &kapic); +- +- return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_LAPIC, &kapic); +- } +- return 0; +-} +- + static int kvm_put_vcpu_events(X86CPU *cpu, int level) + { + CPUX86State *env = &cpu->env; +@@ -2058,10 +2044,6 @@ int kvm_arch_put_registers(CPUState *cpu, int level) + if (ret < 0) { + return ret; + } +- ret = kvm_put_apic(x86_cpu); +- if (ret < 0) { +- return ret; +- } + } + + ret = kvm_put_tscdeadline_msr(x86_cpu); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xen_disk-simplify-blk_disconnect-with-refcnt.patch b/SOURCES/kvm-xen_disk-simplify-blk_disconnect-with-refcnt.patch new file mode 100644 index 0000000..debfbef --- /dev/null +++ b/SOURCES/kvm-xen_disk-simplify-blk_disconnect-with-refcnt.patch @@ -0,0 +1,70 @@ +From e81a83acac1f44ade1e28879203ca95466dad805 Mon Sep 17 00:00:00 2001 +From: Fam Zheng +Date: Fri, 17 Jan 2014 03:07:50 +0100 +Subject: [PATCH 07/34] xen_disk: simplify blk_disconnect with refcnt + +RH-Author: Fam Zheng +Message-id: <1389928083-8921-6-git-send-email-famz@redhat.com> +Patchwork-id: 56767 +O-Subject: [RHEL-7 qemu-kvm PATCH 05/18] xen_disk: simplify blk_disconnect with refcnt +Bugzilla: 1041301 +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Kevin Wolf +RH-Acked-by: Stefan Hajnoczi + +We call bdrv_attach_dev when initializing whether or not bs is created +locally, so call bdrv_detach_dev and let the refcnt handle the +lifecycle. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit c0777fe18b08c3a6de0c53325d6b9b75ebb9de9a) +Signed-off-by: Fam Zheng + +Conflicts: + hw/block/xen_disk.c + +Contextual conflict because of backport of 4f8a066b. + +Signed-off-by: Fam Zheng +--- + hw/block/xen_disk.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/block/xen_disk.c | 11 +++++------ + 1 files changed, 5 insertions(+), 6 deletions(-) + +diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c +index 138ab94..a2653b2 100644 +--- a/hw/block/xen_disk.c ++++ b/hw/block/xen_disk.c +@@ -822,6 +822,9 @@ static int blk_connect(struct XenDevice *xendev) + blkdev->bs = NULL; + return -1; + } ++ /* blkdev->bs is not create by us, we get a reference ++ * so we can bdrv_unref() unconditionally */ ++ bdrv_ref(blkdev->bs); + } + bdrv_attach_dev_nofail(blkdev->bs, blkdev); + blkdev->file_size = bdrv_getlength(blkdev->bs); +@@ -920,12 +923,8 @@ static void blk_disconnect(struct XenDevice *xendev) + struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); + + if (blkdev->bs) { +- if (!blkdev->dinfo) { +- /* close/delete only if we created it ourself */ +- bdrv_close(blkdev->bs); +- bdrv_detach_dev(blkdev->bs, blkdev); +- bdrv_unref(blkdev->bs); +- } ++ bdrv_detach_dev(blkdev->bs, blkdev); ++ bdrv_unref(blkdev->bs); + blkdev->bs = NULL; + } + xen_be_unbind_evtchn(&blkdev->xendev); +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-Add-a-few-missing-checks-for-disconnected-devic.patch b/SOURCES/kvm-xhci-Add-a-few-missing-checks-for-disconnected-devic.patch new file mode 100644 index 0000000..e926e80 --- /dev/null +++ b/SOURCES/kvm-xhci-Add-a-few-missing-checks-for-disconnected-devic.patch @@ -0,0 +1,79 @@ +From d6c5ce73edbc928cce19a095a27e2feff9db8884 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:52 +0200 +Subject: [PATCH 18/43] xhci: Add a few missing checks for disconnected devices + +Message-id: <1405088470-24115-20-git-send-email-kraxel@redhat.com> +Patchwork-id: 59827 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 19/37] xhci: Add a few missing checks for disconnected devices +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +One of the reworks of qemu's usb core made changes to usb-port's disconnect +handling. Now ports with a device will always have a non 0 dev member, but +if the device is not attached (which is possible with usb redirection), +dev->attached will be 0. + +So supplement all checks for dev to also check dev->attached, and add an +extra check in a path where a device check was completely missing. + +This fixes various crashes (asserts triggering) I've been seeing when xhci +attached usb devices get disconnected at the wrong time. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit de9de157fbb9aa66380ab1973dd6ecf12fbd8b25) +--- + hw/usb/hcd-xhci.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index ef0c073..944b255 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1498,7 +1498,8 @@ static TRBCCode xhci_reset_ep(XHCIState *xhci, unsigned int slotid, + } + + if (!xhci->slots[slotid-1].uport || +- !xhci->slots[slotid-1].uport->dev) { ++ !xhci->slots[slotid-1].uport->dev || ++ !xhci->slots[slotid-1].uport->dev->attached) { + return CC_USB_TRANSACTION_ERROR; + } + +@@ -1985,6 +1986,14 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + return; + } + ++ /* If the device has been detached, but the guest has not noticed this ++ yet the 2 above checks will succeed, but we must NOT continue */ ++ if (!xhci->slots[slotid - 1].uport || ++ !xhci->slots[slotid - 1].uport->dev || ++ !xhci->slots[slotid - 1].uport->dev->attached) { ++ return; ++ } ++ + if (epctx->retry) { + XHCITransfer *xfer = epctx->retry; + +@@ -2209,7 +2218,7 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + trace_usb_xhci_slot_address(slotid, uport->path); + + dev = uport->dev; +- if (!dev) { ++ if (!dev || !dev->attached) { + fprintf(stderr, "xhci: port %s not connected\n", uport->path); + return CC_USB_TRANSACTION_ERROR; + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-Add-xhci_epid_to_usbep-helper-function.patch b/SOURCES/kvm-xhci-Add-xhci_epid_to_usbep-helper-function.patch new file mode 100644 index 0000000..b78fde9 --- /dev/null +++ b/SOURCES/kvm-xhci-Add-xhci_epid_to_usbep-helper-function.patch @@ -0,0 +1,134 @@ +From 36b1f983a244521a4dd7293b36b152222aa953ed Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:44 +0200 +Subject: [PATCH 10/43] xhci: Add xhci_epid_to_usbep helper function + +Message-id: <1405088470-24115-12-git-send-email-kraxel@redhat.com> +Patchwork-id: 59837 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 11/37] xhci: Add xhci_epid_to_usbep helper function +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +And use it instead of prying the USBEndpoint out of the packet struct +in various places. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 518ad5f2a0754f0a5ce4e478b79f4926ce46111b) +--- + hw/usb/hcd-xhci.c | 32 ++++++++++++++++++++++---------- + 1 file changed, 22 insertions(+), 10 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 32 ++++++++++++++++++++++---------- + 1 file changed, 22 insertions(+), 10 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 2daf334..56145a5 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -511,6 +511,8 @@ static TRBCCode xhci_disable_ep(XHCIState *xhci, unsigned int slotid, + unsigned int epid); + static void xhci_event(XHCIState *xhci, XHCIEvent *event, int v); + static void xhci_write_event(XHCIState *xhci, XHCIEvent *event, int v); ++static USBEndpoint *xhci_epid_to_usbep(XHCIState *xhci, ++ unsigned int slotid, unsigned int epid); + + static const char *TRBType_names[] = { + [TRB_RESERVED] = "TRB_RESERVED", +@@ -1363,13 +1365,12 @@ static int xhci_ep_nuke_xfers(XHCIState *xhci, unsigned int slotid, + + xferi = epctx->next_xfer; + for (i = 0; i < TD_QUEUE; i++) { +- if (epctx->transfers[xferi].packet.ep) { +- ep = epctx->transfers[xferi].packet.ep; +- } + killed += xhci_ep_nuke_one_xfer(&epctx->transfers[xferi]); + epctx->transfers[xferi].packet.ep = NULL; + xferi = (xferi + 1) % TD_QUEUE; + } ++ ++ ep = xhci_epid_to_usbep(xhci, slotid, epid); + if (ep) { + usb_device_ep_stopped(ep->dev, ep); + } +@@ -1701,7 +1702,6 @@ static int xhci_submit(XHCIState *xhci, XHCITransfer *xfer, + static int xhci_setup_packet(XHCITransfer *xfer) + { + XHCIState *xhci = xfer->xhci; +- USBDevice *dev; + USBEndpoint *ep; + int dir; + +@@ -1709,15 +1709,13 @@ static int xhci_setup_packet(XHCITransfer *xfer) + + if (xfer->packet.ep) { + ep = xfer->packet.ep; +- dev = ep->dev; + } else { +- if (!xhci->slots[xfer->slotid-1].uport) { ++ ep = xhci_epid_to_usbep(xhci, xfer->slotid, xfer->epid); ++ if (!ep) { + fprintf(stderr, "xhci: slot %d has no device\n", + xfer->slotid); + return -1; + } +- dev = xhci->slots[xfer->slotid-1].uport->dev; +- ep = usb_ep_get(dev, dir, xfer->epid >> 1); + } + + xhci_xfer_create_sgl(xfer, dir == USB_TOKEN_IN); /* Also sets int_req */ +@@ -1725,7 +1723,7 @@ static int xhci_setup_packet(XHCITransfer *xfer) + xfer->trbs[0].addr, false, xfer->int_req); + usb_packet_map(&xfer->packet, &xfer->sgl); + DPRINTF("xhci: setup packet pid 0x%x addr %d ep %d\n", +- xfer->packet.pid, dev->addr, ep->nr); ++ xfer->packet.pid, ep->dev->addr, ep->nr); + return 0; + } + +@@ -2077,7 +2075,6 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + } else { + if (xhci_fire_transfer(xhci, xfer, epctx) >= 0) { + epctx->next_xfer = (epctx->next_xfer + 1) % TD_QUEUE; +- ep = xfer->packet.ep; + } else { + if (!xfer->timed_xfer) { + fprintf(stderr, "xhci: error firing data transfer\n"); +@@ -2094,6 +2091,8 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + break; + } + } ++ ++ ep = xhci_epid_to_usbep(xhci, slotid, epid); + if (ep) { + usb_device_flush_ep_queue(ep->dev, ep); + } +@@ -3331,6 +3330,19 @@ static int xhci_find_epid(USBEndpoint *ep) + } + } + ++static USBEndpoint *xhci_epid_to_usbep(XHCIState *xhci, ++ unsigned int slotid, unsigned int epid) ++{ ++ assert(slotid >= 1 && slotid <= xhci->numslots); ++ ++ if (!xhci->slots[slotid - 1].uport) { ++ return NULL; ++ } ++ ++ return usb_ep_get(xhci->slots[slotid - 1].uport->dev, ++ (epid & 1) ? USB_TOKEN_IN : USB_TOKEN_OUT, epid >> 1); ++} ++ + static void xhci_wakeup_endpoint(USBBus *bus, USBEndpoint *ep, + unsigned int stream) + { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-Call-usb_device_alloc-free_streams.patch b/SOURCES/kvm-xhci-Call-usb_device_alloc-free_streams.patch new file mode 100644 index 0000000..3fcf698 --- /dev/null +++ b/SOURCES/kvm-xhci-Call-usb_device_alloc-free_streams.patch @@ -0,0 +1,178 @@ +From da332a238d28a29821dc57437f43feed54a3f418 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:55 +0200 +Subject: [PATCH 21/43] xhci: Call usb_device_alloc/free_streams + +Message-id: <1405088470-24115-23-git-send-email-kraxel@redhat.com> +Patchwork-id: 59834 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 22/37] xhci: Call usb_device_alloc/free_streams +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Note this code is not as KISS as I would like, the reason for this is that +the Linux kernel interface wants streams on eps belonging to one interface +to be allocated in one call. Things will also work if we do this one ep at a +time (as long as all eps support the same amount of streams), but lets stick +to the kernel API. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 72391da50621c9f11bb8c57193ab2d1ad8bc5ad8) +--- + hw/usb/hcd-xhci.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 117 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 117 insertions(+) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 944b255..5f0840b 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1153,6 +1153,111 @@ static void xhci_free_streams(XHCIEPContext *epctx) + epctx->nr_pstreams = 0; + } + ++static int xhci_epmask_to_eps_with_streams(XHCIState *xhci, ++ unsigned int slotid, ++ uint32_t epmask, ++ XHCIEPContext **epctxs, ++ USBEndpoint **eps) ++{ ++ XHCISlot *slot; ++ XHCIEPContext *epctx; ++ USBEndpoint *ep; ++ int i, j; ++ ++ assert(slotid >= 1 && slotid <= xhci->numslots); ++ ++ slot = &xhci->slots[slotid - 1]; ++ ++ for (i = 2, j = 0; i <= 31; i++) { ++ if (!(epmask & (1 << i))) { ++ continue; ++ } ++ ++ epctx = slot->eps[i - 1]; ++ ep = xhci_epid_to_usbep(xhci, slotid, i); ++ if (!epctx || !epctx->nr_pstreams || !ep) { ++ continue; ++ } ++ ++ if (epctxs) { ++ epctxs[j] = epctx; ++ } ++ eps[j++] = ep; ++ } ++ return j; ++} ++ ++static void xhci_free_device_streams(XHCIState *xhci, unsigned int slotid, ++ uint32_t epmask) ++{ ++ USBEndpoint *eps[30]; ++ int nr_eps; ++ ++ nr_eps = xhci_epmask_to_eps_with_streams(xhci, slotid, epmask, NULL, eps); ++ if (nr_eps) { ++ usb_device_free_streams(eps[0]->dev, eps, nr_eps); ++ } ++} ++ ++static TRBCCode xhci_alloc_device_streams(XHCIState *xhci, unsigned int slotid, ++ uint32_t epmask) ++{ ++ XHCIEPContext *epctxs[30]; ++ USBEndpoint *eps[30]; ++ int i, r, nr_eps, req_nr_streams, dev_max_streams; ++ ++ nr_eps = xhci_epmask_to_eps_with_streams(xhci, slotid, epmask, epctxs, ++ eps); ++ if (nr_eps == 0) { ++ return CC_SUCCESS; ++ } ++ ++ req_nr_streams = epctxs[0]->nr_pstreams; ++ dev_max_streams = eps[0]->max_streams; ++ ++ for (i = 1; i < nr_eps; i++) { ++ /* ++ * HdG: I don't expect these to ever trigger, but if they do we need ++ * to come up with another solution, ie group identical endpoints ++ * together and make an usb_device_alloc_streams call per group. ++ */ ++ if (epctxs[i]->nr_pstreams != req_nr_streams) { ++ FIXME("guest streams config not identical for all eps"); ++ return CC_RESOURCE_ERROR; ++ } ++ if (eps[i]->max_streams != dev_max_streams) { ++ FIXME("device streams config not identical for all eps"); ++ return CC_RESOURCE_ERROR; ++ } ++ } ++ ++ /* ++ * max-streams in both the device descriptor and in the controller is a ++ * power of 2. But stream id 0 is reserved, so if a device can do up to 4 ++ * streams the guest will ask for 5 rounded up to the next power of 2 which ++ * becomes 8. For emulated devices usb_device_alloc_streams is a nop. ++ * ++ * For redirected devices however this is an issue, as there we must ask ++ * the real xhci controller to alloc streams, and the host driver for the ++ * real xhci controller will likely disallow allocating more streams then ++ * the device can handle. ++ * ++ * So we limit the requested nr_streams to the maximum number the device ++ * can handle. ++ */ ++ if (req_nr_streams > dev_max_streams) { ++ req_nr_streams = dev_max_streams; ++ } ++ ++ r = usb_device_alloc_streams(eps[0]->dev, eps, nr_eps, req_nr_streams); ++ if (r != 0) { ++ fprintf(stderr, "xhci: alloc streams failed\n"); ++ return CC_RESOURCE_ERROR; ++ } ++ ++ return CC_SUCCESS; ++} ++ + static XHCIStreamContext *xhci_find_stream(XHCIEPContext *epctx, + unsigned int streamid, + uint32_t *cc_error) +@@ -2325,6 +2430,8 @@ static TRBCCode xhci_configure_slot(XHCIState *xhci, unsigned int slotid, + return CC_CONTEXT_STATE_ERROR; + } + ++ xhci_free_device_streams(xhci, slotid, ictl_ctx[0] | ictl_ctx[1]); ++ + for (i = 2; i <= 31; i++) { + if (ictl_ctx[0] & (1< +Date: Fri, 11 Jul 2014 14:20:45 +0200 +Subject: [PATCH 11/43] xhci: Fix memory leak on xhci_disable_ep + +Message-id: <1405088470-24115-13-git-send-email-kraxel@redhat.com> +Patchwork-id: 59821 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 12/37] xhci: Fix memory leak on xhci_disable_ep +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +The USBPacket-s in the transfers need to be cleaned up so that the memory +allocated by the iovec in there gets freed. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit b21da4e504fbdb907543a918b190783dc896d8e1) +--- + hw/usb/hcd-xhci.c | 5 +++++ + 1 file changed, 5 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 56145a5..bb3bba3 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1382,6 +1382,7 @@ static TRBCCode xhci_disable_ep(XHCIState *xhci, unsigned int slotid, + { + XHCISlot *slot; + XHCIEPContext *epctx; ++ int i; + + trace_usb_xhci_ep_disable(slotid, epid); + assert(slotid >= 1 && slotid <= xhci->numslots); +@@ -1402,6 +1403,10 @@ static TRBCCode xhci_disable_ep(XHCIState *xhci, unsigned int slotid, + xhci_free_streams(epctx); + } + ++ for (i = 0; i < ARRAY_SIZE(epctx->transfers); i++) { ++ usb_packet_cleanup(&epctx->transfers[i].packet); ++ } ++ + xhci_set_ep_state(xhci, epctx, NULL, EP_DISABLED); + + qemu_free_timer(epctx->kick_timer); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-Init-a-transfers-xhci-slotid-and-epid-member-on.patch b/SOURCES/kvm-xhci-Init-a-transfers-xhci-slotid-and-epid-member-on.patch new file mode 100644 index 0000000..28cfbb3 --- /dev/null +++ b/SOURCES/kvm-xhci-Init-a-transfers-xhci-slotid-and-epid-member-on.patch @@ -0,0 +1,61 @@ +From 0302db9f99761bc53e99cd1c3fbdcec3a3fd13c5 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:43 +0200 +Subject: [PATCH 09/43] xhci: Init a transfers xhci, slotid and epid member on + epctx alloc + +Message-id: <1405088470-24115-11-git-send-email-kraxel@redhat.com> +Patchwork-id: 59823 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 10/37] xhci: Init a transfers xhci, slotid and epid member on epctx alloc +Bugzilla: 1075846 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +From: Hans de Goede + +Transfers are part of an epctx, which is part of a slot, which is part of +a xhci. Transfers cannot dynamically be moved from one epctx to another, +so once created their xhci, slotid and epid are constant, so lets set these +up at creation time, rather then re-initializing them with the same +value each time a transfer gets submitted. + +Signed-off-by: Hans de Goede +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4c5d82ecf1e8fd0720137f7d09fc77d65b51b4d0) +--- + hw/usb/hcd-xhci.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 61f5329..2daf334 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1247,6 +1247,9 @@ static XHCIEPContext *xhci_alloc_epctx(XHCIState *xhci, + epctx->epid = epid; + + for (i = 0; i < ARRAY_SIZE(epctx->transfers); i++) { ++ epctx->transfers[i].xhci = xhci; ++ epctx->transfers[i].slotid = slotid; ++ epctx->transfers[i].epid = epid; + usb_packet_init(&epctx->transfers[i].packet); + } + epctx->kick_timer = qemu_new_timer_ns(vm_clock, xhci_ep_kick_timer, epctx); +@@ -2062,9 +2065,6 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + for (i = 0; i < length; i++) { + assert(xhci_ring_fetch(xhci, ring, &xfer->trbs[i], NULL)); + } +- xfer->xhci = xhci; +- xfer->epid = epid; +- xfer->slotid = slotid; + xfer->streamid = streamid; + + if (epid == 1) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-add-XHCISlot-addressed.patch b/SOURCES/kvm-xhci-add-XHCISlot-addressed.patch new file mode 100644 index 0000000..9b0a5d6 --- /dev/null +++ b/SOURCES/kvm-xhci-add-XHCISlot-addressed.patch @@ -0,0 +1,58 @@ +From 4092201c71c55673c526887b3985002d8a9ba2d9 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 7 Aug 2013 09:22:45 +0200 +Subject: [PATCH 14/28] xhci: add XHCISlot->addressed + +RH-Author: Gerd Hoffmann +Message-id: <1375867368-18979-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 53039 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/5] xhci: add XHCISlot->addressed +Bugzilla: 838170 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +Preparing for live-migration support, post_load will need that. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4034e6938a4cba090a8fac02499c8a9567201665) +--- + hw/usb/hcd-xhci.c | 3 +++ + 1 file changed, 3 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index d88c1ae..4111e68 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -405,6 +405,7 @@ struct XHCIEPContext { + + typedef struct XHCISlot { + bool enabled; ++ bool addressed; + dma_addr_t ctx; + USBPort *uport; + XHCIEPContext * eps[31]; +@@ -2041,6 +2042,7 @@ static TRBCCode xhci_disable_slot(XHCIState *xhci, unsigned int slotid) + } + + xhci->slots[slotid-1].enabled = 0; ++ xhci->slots[slotid-1].addressed = 0; + return CC_SUCCESS; + } + +@@ -2167,6 +2169,7 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + xhci_dma_write_u32s(xhci, octx, slot_ctx, sizeof(slot_ctx)); + xhci_dma_write_u32s(xhci, octx+32, ep0_ctx, sizeof(ep0_ctx)); + ++ xhci->slots[slotid-1].addressed = 1; + return res; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-add-live-migration-support.patch b/SOURCES/kvm-xhci-add-live-migration-support.patch new file mode 100644 index 0000000..85c1820 --- /dev/null +++ b/SOURCES/kvm-xhci-add-live-migration-support.patch @@ -0,0 +1,208 @@ +From e07526dd14669081a569bb6b1e3d72e1ee59ebad Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 7 Aug 2013 09:22:48 +0200 +Subject: [PATCH 17/28] xhci: add live migration support + +RH-Author: Gerd Hoffmann +Message-id: <1375867368-18979-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 53041 +O-Subject: [RHEL-7 qemu-kvm PATCH 5/5] xhci: add live migration support +Bugzilla: 838170 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +With all preparing pieces in place we can finally drop in +the vmstate structs and the postload function. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 37352df30fbc38d1de464db8927536d5e36cf52a) +--- + hw/usb/hcd-xhci.c | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 163 insertions(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 163 insertions(+), 1 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 8224465..3d3d6c3 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -3386,9 +3386,171 @@ static int usb_xhci_initfn(struct PCIDevice *dev) + return 0; + } + ++static int usb_xhci_post_load(void *opaque, int version_id) ++{ ++ XHCIState *xhci = opaque; ++ XHCISlot *slot; ++ XHCIEPContext *epctx; ++ dma_addr_t dcbaap, pctx; ++ uint32_t slot_ctx[4]; ++ uint32_t ep_ctx[5]; ++ int slotid, epid, state, intr; ++ ++ dcbaap = xhci_addr64(xhci->dcbaap_low, xhci->dcbaap_high); ++ ++ for (slotid = 1; slotid <= xhci->numslots; slotid++) { ++ slot = &xhci->slots[slotid-1]; ++ if (!slot->addressed) { ++ continue; ++ } ++ slot->ctx = ++ xhci_mask64(ldq_le_pci_dma(&xhci->pci_dev, dcbaap + 8*slotid)); ++ xhci_dma_read_u32s(xhci, slot->ctx, slot_ctx, sizeof(slot_ctx)); ++ slot->uport = xhci_lookup_uport(xhci, slot_ctx); ++ assert(slot->uport && slot->uport->dev); ++ ++ for (epid = 1; epid <= 32; epid++) { ++ pctx = slot->ctx + 32 * epid; ++ xhci_dma_read_u32s(xhci, pctx, ep_ctx, sizeof(ep_ctx)); ++ state = ep_ctx[0] & EP_STATE_MASK; ++ if (state == EP_DISABLED) { ++ continue; ++ } ++ epctx = xhci_alloc_epctx(xhci, slotid, epid); ++ slot->eps[epid-1] = epctx; ++ xhci_init_epctx(epctx, pctx, ep_ctx); ++ epctx->state = state; ++ if (state == EP_RUNNING) { ++ /* kick endpoint after vmload is finished */ ++ qemu_mod_timer(epctx->kick_timer, qemu_get_clock_ns(vm_clock)); ++ } ++ } ++ } ++ ++ for (intr = 0; intr < xhci->numintrs; intr++) { ++ if (xhci->intr[intr].msix_used) { ++ msix_vector_use(&xhci->pci_dev, intr); ++ } else { ++ msix_vector_unuse(&xhci->pci_dev, intr); ++ } ++ } ++ ++ return 0; ++} ++ ++static const VMStateDescription vmstate_xhci_ring = { ++ .name = "xhci-ring", ++ .version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT64(dequeue, XHCIRing), ++ VMSTATE_BOOL(ccs, XHCIRing), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static const VMStateDescription vmstate_xhci_port = { ++ .name = "xhci-port", ++ .version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT32(portsc, XHCIPort), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static const VMStateDescription vmstate_xhci_slot = { ++ .name = "xhci-slot", ++ .version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_BOOL(enabled, XHCISlot), ++ VMSTATE_BOOL(addressed, XHCISlot), ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ ++static const VMStateDescription vmstate_xhci_event = { ++ .name = "xhci-event", ++ .version_id = 1, ++ .fields = (VMStateField[]) { ++ VMSTATE_UINT32(type, XHCIEvent), ++ VMSTATE_UINT32(ccode, XHCIEvent), ++ VMSTATE_UINT64(ptr, XHCIEvent), ++ VMSTATE_UINT32(length, XHCIEvent), ++ VMSTATE_UINT32(flags, XHCIEvent), ++ VMSTATE_UINT8(slotid, XHCIEvent), ++ VMSTATE_UINT8(epid, XHCIEvent), ++ } ++}; ++ ++static bool xhci_er_full(void *opaque, int version_id) ++{ ++ struct XHCIInterrupter *intr = opaque; ++ return intr->er_full; ++} ++ ++static const VMStateDescription vmstate_xhci_intr = { ++ .name = "xhci-intr", ++ .version_id = 1, ++ .fields = (VMStateField[]) { ++ /* registers */ ++ VMSTATE_UINT32(iman, XHCIInterrupter), ++ VMSTATE_UINT32(imod, XHCIInterrupter), ++ VMSTATE_UINT32(erstsz, XHCIInterrupter), ++ VMSTATE_UINT32(erstba_low, XHCIInterrupter), ++ VMSTATE_UINT32(erstba_high, XHCIInterrupter), ++ VMSTATE_UINT32(erdp_low, XHCIInterrupter), ++ VMSTATE_UINT32(erdp_high, XHCIInterrupter), ++ ++ /* state */ ++ VMSTATE_BOOL(msix_used, XHCIInterrupter), ++ VMSTATE_BOOL(er_pcs, XHCIInterrupter), ++ VMSTATE_UINT64(er_start, XHCIInterrupter), ++ VMSTATE_UINT32(er_size, XHCIInterrupter), ++ VMSTATE_UINT32(er_ep_idx, XHCIInterrupter), ++ ++ /* event queue (used if ring is full) */ ++ VMSTATE_BOOL(er_full, XHCIInterrupter), ++ VMSTATE_UINT32_TEST(ev_buffer_put, XHCIInterrupter, xhci_er_full), ++ VMSTATE_UINT32_TEST(ev_buffer_get, XHCIInterrupter, xhci_er_full), ++ VMSTATE_STRUCT_ARRAY_TEST(ev_buffer, XHCIInterrupter, EV_QUEUE, ++ xhci_er_full, 1, ++ vmstate_xhci_event, XHCIEvent), ++ ++ VMSTATE_END_OF_LIST() ++ } ++}; ++ + static const VMStateDescription vmstate_xhci = { + .name = "xhci", +- .unmigratable = 1, ++ .version_id = 1, ++ .post_load = usb_xhci_post_load, ++ .fields = (VMStateField[]) { ++ VMSTATE_PCIE_DEVICE(pci_dev, XHCIState), ++ VMSTATE_MSIX(pci_dev, XHCIState), ++ ++ VMSTATE_STRUCT_VARRAY_UINT32(ports, XHCIState, numports, 1, ++ vmstate_xhci_port, XHCIPort), ++ VMSTATE_STRUCT_VARRAY_UINT32(slots, XHCIState, numslots, 1, ++ vmstate_xhci_slot, XHCISlot), ++ VMSTATE_STRUCT_VARRAY_UINT32(intr, XHCIState, numintrs, 1, ++ vmstate_xhci_intr, XHCIInterrupter), ++ ++ /* Operational Registers */ ++ VMSTATE_UINT32(usbcmd, XHCIState), ++ VMSTATE_UINT32(usbsts, XHCIState), ++ VMSTATE_UINT32(dnctrl, XHCIState), ++ VMSTATE_UINT32(crcr_low, XHCIState), ++ VMSTATE_UINT32(crcr_high, XHCIState), ++ VMSTATE_UINT32(dcbaap_low, XHCIState), ++ VMSTATE_UINT32(dcbaap_high, XHCIState), ++ VMSTATE_UINT32(config, XHCIState), ++ ++ /* Runtime Registers & state */ ++ VMSTATE_INT64(mfindex_start, XHCIState), ++ VMSTATE_TIMER(mfwrap_timer, XHCIState), ++ VMSTATE_STRUCT(cmd_ring, XHCIState, 1, vmstate_xhci_ring, XHCIRing), ++ ++ VMSTATE_END_OF_LIST() ++ } + }; + + static Property xhci_properties[] = { +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-add-port-to-slot_address-tracepoint.patch b/SOURCES/kvm-xhci-add-port-to-slot_address-tracepoint.patch new file mode 100644 index 0000000..7c7873e --- /dev/null +++ b/SOURCES/kvm-xhci-add-port-to-slot_address-tracepoint.patch @@ -0,0 +1,62 @@ +From 69cd7d87b208e842a7b283c90cc3113fac244e29 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:40 +0200 +Subject: [PATCH 07/43] xhci: add port to slot_address tracepoint + +Message-id: <1405088470-24115-8-git-send-email-kraxel@redhat.com> +Patchwork-id: 59830 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 07/37] xhci: add port to slot_address tracepoint +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 65d81ed402d3b78b6ffbade36a09ea53e41614d2) +--- + hw/usb/hcd-xhci.c | 2 +- + trace-events | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 +- + trace-events | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index e8fa26c..61f5329 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2168,7 +2168,6 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + int i; + TRBCCode res; + +- trace_usb_xhci_slot_address(slotid); + assert(slotid >= 1 && slotid <= xhci->numslots); + + dcbaap = xhci_addr64(xhci->dcbaap_low, xhci->dcbaap_high); +@@ -2201,6 +2200,7 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + fprintf(stderr, "xhci: port not found\n"); + return CC_TRB_ERROR; + } ++ trace_usb_xhci_slot_address(slotid, uport->path); + + dev = uport->dev; + if (!dev) { +diff --git a/trace-events b/trace-events +index 4058dd5..117c2ce 100644 +--- a/trace-events ++++ b/trace-events +@@ -368,7 +368,7 @@ usb_xhci_port_link(uint32_t port, uint32_t pls) "port %d, pls %d" + usb_xhci_port_notify(uint32_t port, uint32_t pls) "port %d, bits %x" + usb_xhci_slot_enable(uint32_t slotid) "slotid %d" + usb_xhci_slot_disable(uint32_t slotid) "slotid %d" +-usb_xhci_slot_address(uint32_t slotid) "slotid %d" ++usb_xhci_slot_address(uint32_t slotid, const char *port) "slotid %d, port %s" + usb_xhci_slot_configure(uint32_t slotid) "slotid %d" + usb_xhci_slot_evaluate(uint32_t slotid) "slotid %d" + usb_xhci_slot_reset(uint32_t slotid) "slotid %d" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-add-sanity-checks-to-xhci_lookup_uport.patch b/SOURCES/kvm-xhci-add-sanity-checks-to-xhci_lookup_uport.patch new file mode 100644 index 0000000..19caa40 --- /dev/null +++ b/SOURCES/kvm-xhci-add-sanity-checks-to-xhci_lookup_uport.patch @@ -0,0 +1,52 @@ +From 0ebce8809c6cf12e4df5fe9fdf441b280176412e Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 18 Nov 2014 11:42:20 +0100 +Subject: [PATCH 1/5] xhci: add sanity checks to xhci_lookup_uport + +Message-id: <1416310940-10391-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 62418 +O-Subject: [RHEL-7.1 qemu-kvm PATCH v2 1/1] xhci: add sanity checks to xhci_lookup_uport +Bugzilla: 1074219 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Markus Armbruster + +Also catch xhci_lookup_uport failures in post_load. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit f2ad97ff81da51c064b9e87720ff48a0874f45d4) +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 32568cb..ce81632 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2254,6 +2254,9 @@ static USBPort *xhci_lookup_uport(XHCIState *xhci, uint32_t *slot_ctx) + int i, pos, port; + + port = (slot_ctx[1]>>16) & 0xFF; ++ if (port < 1 || port > xhci->numports) { ++ return NULL; ++ } + port = xhci->ports[port-1].uport->index+1; + pos = snprintf(path, sizeof(path), "%d", port); + for (i = 0; i < 5; i++) { +@@ -3637,6 +3640,12 @@ static int usb_xhci_post_load(void *opaque, int version_id) + xhci_mask64(ldq_le_pci_dma(pci_dev, dcbaap + 8 * slotid)); + xhci_dma_read_u32s(xhci, slot->ctx, slot_ctx, sizeof(slot_ctx)); + slot->uport = xhci_lookup_uport(xhci, slot_ctx); ++ if (!slot->uport) { ++ /* should not happen, but may trigger on guest bugs */ ++ slot->enabled = 0; ++ slot->addressed = 0; ++ continue; ++ } + assert(slot->uport && slot->uport->dev); + + for (epid = 1; epid <= 31; epid++) { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-add-support-for-suspend-resume.patch b/SOURCES/kvm-xhci-add-support-for-suspend-resume.patch new file mode 100644 index 0000000..94a8408 --- /dev/null +++ b/SOURCES/kvm-xhci-add-support-for-suspend-resume.patch @@ -0,0 +1,62 @@ +From 1d59e428d7754c0fc331092d265254a0b3473546 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 11 Dec 2013 10:04:22 +0100 +Subject: [PATCH 1/5] xhci: add support for suspend/resume + +RH-Author: Gerd Hoffmann +Message-id: <1386756262-29763-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 56161 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] xhci: add support for suspend/resume +Bugzilla: 1012365 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Miroslav Rezanina + +The OS can ask the xhci controller to save and restore its +internal state, which is used by the OS when the system is +suspended and resumed. + +This patch handles writes to the save + restore bits in the +command register. Only thing it does is updating the +restore error bit in the status register to signal an error +on restore. The guest OS should do a full reinitialization +after resume then. + +This is the minimal patch which gets S3 going with xhci. +Implementing full save/restore support is TBD. + +https://bugzilla.redhat.com/show_bug.cgi?id=1012365 + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit f1f8bc218a422081f36f0b325b3de5e6a5078b74) +--- + hw/usb/hcd-xhci.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 9d7315f..87ba7af 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2976,6 +2976,14 @@ static void xhci_oper_write(void *ptr, hwaddr reg, + } else if (!(val & USBCMD_RS) && (xhci->usbcmd & USBCMD_RS)) { + xhci_stop(xhci); + } ++ if (val & USBCMD_CSS) { ++ /* save state */ ++ xhci->usbsts &= ~USBSTS_SRE; ++ } ++ if (val & USBCMD_CRS) { ++ /* restore state */ ++ xhci->usbsts |= USBSTS_SRE; ++ } + xhci->usbcmd = val & 0xc0f; + xhci_mfwrap_update(xhci); + if (val & USBCMD_HCRST) { +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-add-tracepoint-for-endpoint-state-changes.patch b/SOURCES/kvm-xhci-add-tracepoint-for-endpoint-state-changes.patch new file mode 100644 index 0000000..8edf370 --- /dev/null +++ b/SOURCES/kvm-xhci-add-tracepoint-for-endpoint-state-changes.patch @@ -0,0 +1,85 @@ +From 808711fd7cfcd6daca455db6dbd9d0f1f17a8b96 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:39 +0200 +Subject: [PATCH 06/43] xhci: add tracepoint for endpoint state changes + +Message-id: <1405088470-24115-7-git-send-email-kraxel@redhat.com> +Patchwork-id: 59843 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 06/37] xhci: add tracepoint for endpoint state changes +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 1c82392a158471355aa6d1922df2d1545bb16b95) +--- + hw/usb/hcd-xhci.c | 19 +++++++++++++++++++ + trace-events | 1 + + 2 files changed, 20 insertions(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 19 +++++++++++++++++++ + trace-events | 1 + + 2 files changed, 20 insertions(+) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 00623f9..e8fa26c 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -589,6 +589,14 @@ static const char *TRBCCode_names[] = { + [CC_SPLIT_TRANSACTION_ERROR] = "CC_SPLIT_TRANSACTION_ERROR", + }; + ++static const char *ep_state_names[] = { ++ [EP_DISABLED] = "disabled", ++ [EP_RUNNING] = "running", ++ [EP_HALTED] = "halted", ++ [EP_STOPPED] = "stopped", ++ [EP_ERROR] = "error", ++}; ++ + static const char *lookup_name(uint32_t index, const char **list, uint32_t llen) + { + if (index >= llen || list[index] == NULL) { +@@ -609,6 +617,12 @@ static const char *event_name(XHCIEvent *event) + ARRAY_SIZE(TRBCCode_names)); + } + ++static const char *ep_state_name(uint32_t state) ++{ ++ return lookup_name(state, ep_state_names, ++ ARRAY_SIZE(ep_state_names)); ++} ++ + static uint64_t xhci_mfindex_get(XHCIState *xhci) + { + int64_t now = qemu_get_clock_ns(vm_clock); +@@ -1206,6 +1220,11 @@ static void xhci_set_ep_state(XHCIState *xhci, XHCIEPContext *epctx, + } + + xhci_dma_write_u32s(xhci, epctx->pctx, ctx, sizeof(ctx)); ++ if (epctx->state != state) { ++ trace_usb_xhci_ep_state(epctx->slotid, epctx->epid, ++ ep_state_name(epctx->state), ++ ep_state_name(state)); ++ } + epctx->state = state; + } + +diff --git a/trace-events b/trace-events +index b9144b2..4058dd5 100644 +--- a/trace-events ++++ b/trace-events +@@ -378,6 +378,7 @@ usb_xhci_ep_set_dequeue(uint32_t slotid, uint32_t epid, uint32_t streamid, uint6 + usb_xhci_ep_kick(uint32_t slotid, uint32_t epid, uint32_t streamid) "slotid %d, epid %d, streamid %d" + usb_xhci_ep_stop(uint32_t slotid, uint32_t epid) "slotid %d, epid %d" + usb_xhci_ep_reset(uint32_t slotid, uint32_t epid) "slotid %d, epid %d" ++usb_xhci_ep_state(uint32_t slotid, uint32_t epid, const char *os, const char *ns) "slotid %d, epid %d, %s -> %s" + usb_xhci_xfer_start(void *xfer, uint32_t slotid, uint32_t epid, uint32_t streamid) "%p: slotid %d, epid %d, streamid %d" + usb_xhci_xfer_async(void *xfer) "%p" + usb_xhci_xfer_nak(void *xfer) "%p" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-add-xhci_alloc_epctx.patch b/SOURCES/kvm-xhci-add-xhci_alloc_epctx.patch new file mode 100644 index 0000000..50d8638 --- /dev/null +++ b/SOURCES/kvm-xhci-add-xhci_alloc_epctx.patch @@ -0,0 +1,98 @@ +From e955b37a28ff1f10035dc9c96a083bf93e8ca895 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 7 Aug 2013 09:22:46 +0200 +Subject: [PATCH 15/28] xhci: add xhci_alloc_epctx + +RH-Author: Gerd Hoffmann +Message-id: <1375867368-18979-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 53036 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/5] xhci: add xhci_alloc_epctx +Bugzilla: 838170 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +Factor out endpoint context allocation to a separate function. +xhci live migration will need that too, in post_load. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 492b21f63fa655e0271abef4784cc337dd1d3fe7) +--- + hw/usb/hcd-xhci.c | 32 +++++++++++++++++++++----------- + 1 file changed, 21 insertions(+), 11 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 32 +++++++++++++++++++++----------- + 1 files changed, 21 insertions(+), 11 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 4111e68..7f46ccc 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1198,6 +1198,26 @@ static void xhci_ep_kick_timer(void *opaque) + xhci_kick_ep(epctx->xhci, epctx->slotid, epctx->epid, 0); + } + ++static XHCIEPContext *xhci_alloc_epctx(XHCIState *xhci, ++ unsigned int slotid, ++ unsigned int epid) ++{ ++ XHCIEPContext *epctx; ++ int i; ++ ++ epctx = g_new0(XHCIEPContext, 1); ++ epctx->xhci = xhci; ++ epctx->slotid = slotid; ++ epctx->epid = epid; ++ ++ for (i = 0; i < ARRAY_SIZE(epctx->transfers); i++) { ++ usb_packet_init(&epctx->transfers[i].packet); ++ } ++ epctx->kick_timer = qemu_new_timer_ns(vm_clock, xhci_ep_kick_timer, epctx); ++ ++ return epctx; ++} ++ + static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, + unsigned int epid, dma_addr_t pctx, + uint32_t *ctx) +@@ -1205,7 +1225,6 @@ static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, + XHCISlot *slot; + XHCIEPContext *epctx; + dma_addr_t dequeue; +- int i; + + trace_usb_xhci_ep_enable(slotid, epid); + assert(slotid >= 1 && slotid <= xhci->numslots); +@@ -1216,12 +1235,7 @@ static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, + xhci_disable_ep(xhci, slotid, epid); + } + +- epctx = g_malloc(sizeof(XHCIEPContext)); +- memset(epctx, 0, sizeof(XHCIEPContext)); +- epctx->xhci = xhci; +- epctx->slotid = slotid; +- epctx->epid = epid; +- ++ epctx = xhci_alloc_epctx(xhci, slotid, epid); + slot->eps[epid-1] = epctx; + + dequeue = xhci_addr64(ctx[2] & ~0xf, ctx[3]); +@@ -1241,13 +1255,9 @@ static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, + xhci_ring_init(xhci, &epctx->ring, dequeue); + epctx->ring.ccs = ctx[2] & 1; + } +- for (i = 0; i < ARRAY_SIZE(epctx->transfers); i++) { +- usb_packet_init(&epctx->transfers[i].packet); +- } + + epctx->interval = 1 << (ctx[0] >> 16) & 0xff; + epctx->mfindex_last = 0; +- epctx->kick_timer = qemu_new_timer_ns(vm_clock, xhci_ep_kick_timer, epctx); + + epctx->state = EP_RUNNING; + ctx[0] &= ~EP_STATE_MASK; +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-add-xhci_init_epctx.patch b/SOURCES/kvm-xhci-add-xhci_init_epctx.patch new file mode 100644 index 0000000..13a6a80 --- /dev/null +++ b/SOURCES/kvm-xhci-add-xhci_init_epctx.patch @@ -0,0 +1,99 @@ +From 6b9188baee63673ee4816b7bb994a7be3e164fce Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 7 Aug 2013 09:22:47 +0200 +Subject: [PATCH 16/28] xhci: add xhci_init_epctx + +RH-Author: Gerd Hoffmann +Message-id: <1375867368-18979-5-git-send-email-kraxel@redhat.com> +Patchwork-id: 53037 +O-Subject: [RHEL-7 qemu-kvm PATCH 4/5] xhci: add xhci_init_epctx +Bugzilla: 838170 +RH-Acked-by: Hans de Goede +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Orit Wasserman + +Factor out endpoint context initialization to a separate function. +xhci live migration will need that too, in post_load. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 003e15a180373048f0c1f4df0bfe303746eb2676) +--- + hw/usb/hcd-xhci.c | 43 +++++++++++++++++++++++++------------------ + 1 file changed, 25 insertions(+), 18 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 43 +++++++++++++++++++++++++------------------ + 1 files changed, 25 insertions(+), 18 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 7f46ccc..8224465 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1218,26 +1218,11 @@ static XHCIEPContext *xhci_alloc_epctx(XHCIState *xhci, + return epctx; + } + +-static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, +- unsigned int epid, dma_addr_t pctx, +- uint32_t *ctx) ++static void xhci_init_epctx(XHCIEPContext *epctx, ++ dma_addr_t pctx, uint32_t *ctx) + { +- XHCISlot *slot; +- XHCIEPContext *epctx; + dma_addr_t dequeue; + +- trace_usb_xhci_ep_enable(slotid, epid); +- assert(slotid >= 1 && slotid <= xhci->numslots); +- assert(epid >= 1 && epid <= 31); +- +- slot = &xhci->slots[slotid-1]; +- if (slot->eps[epid-1]) { +- xhci_disable_ep(xhci, slotid, epid); +- } +- +- epctx = xhci_alloc_epctx(xhci, slotid, epid); +- slot->eps[epid-1] = epctx; +- + dequeue = xhci_addr64(ctx[2] & ~0xf, ctx[3]); + + epctx->type = (ctx[1] >> EP_TYPE_SHIFT) & EP_TYPE_MASK; +@@ -1252,11 +1237,33 @@ static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, + if (epctx->max_pstreams) { + xhci_alloc_streams(epctx, dequeue); + } else { +- xhci_ring_init(xhci, &epctx->ring, dequeue); ++ xhci_ring_init(epctx->xhci, &epctx->ring, dequeue); + epctx->ring.ccs = ctx[2] & 1; + } + + epctx->interval = 1 << (ctx[0] >> 16) & 0xff; ++} ++ ++static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, ++ unsigned int epid, dma_addr_t pctx, ++ uint32_t *ctx) ++{ ++ XHCISlot *slot; ++ XHCIEPContext *epctx; ++ ++ trace_usb_xhci_ep_enable(slotid, epid); ++ assert(slotid >= 1 && slotid <= xhci->numslots); ++ assert(epid >= 1 && epid <= 31); ++ ++ slot = &xhci->slots[slotid-1]; ++ if (slot->eps[epid-1]) { ++ xhci_disable_ep(xhci, slotid, epid); ++ } ++ ++ epctx = xhci_alloc_epctx(xhci, slotid, epid); ++ slot->eps[epid-1] = epctx; ++ xhci_init_epctx(epctx, pctx, ctx); ++ + epctx->mfindex_last = 0; + + epctx->state = EP_RUNNING; +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-child-detach-fix.patch b/SOURCES/kvm-xhci-child-detach-fix.patch new file mode 100644 index 0000000..93cdffb --- /dev/null +++ b/SOURCES/kvm-xhci-child-detach-fix.patch @@ -0,0 +1,47 @@ +From 524882651970113d0b375a99362bd5b9e9b7f7a7 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:21:01 +0200 +Subject: [PATCH 27/43] xhci: child detach fix + +Message-id: <1405088470-24115-29-git-send-email-kraxel@redhat.com> +Patchwork-id: 59841 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 28/37] xhci: child detach fix +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +xhci_child_detach() zaps the wrong slot when unplugging a device +connected via usb-hub: Instead of the device's slot the slot of the +usb-hub is used. Fix it. + +https://bugzilla.redhat.com/show_bug.cgi?id=1075846 + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Gonglei +(cherry picked from commit 463c534db516701ac732ac606c33c7101cf22e56) +--- + hw/usb/hcd-xhci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 2352b12..dc10ab0 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -3438,7 +3438,7 @@ static void xhci_child_detach(USBPort *uport, USBDevice *child) + USBBus *bus = usb_bus_from_device(child); + XHCIState *xhci = container_of(bus, XHCIState, bus); + +- xhci_detach_slot(xhci, uport); ++ xhci_detach_slot(xhci, child->port); + } + + static USBPortOps xhci_uport_ops = { +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-emulate-intr-endpoint-intervals-correctly.patch b/SOURCES/kvm-xhci-emulate-intr-endpoint-intervals-correctly.patch new file mode 100644 index 0000000..cf26ef6 --- /dev/null +++ b/SOURCES/kvm-xhci-emulate-intr-endpoint-intervals-correctly.patch @@ -0,0 +1,146 @@ +From e25b1bfc8a6b74bf8474fe8d8e927abd1cacaa4f Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 12 Sep 2013 09:39:30 +0200 +Subject: [PATCH 02/25] xhci: emulate intr endpoint intervals correctly + +RH-Author: Gerd Hoffmann +Message-id: <1378978772-21612-3-git-send-email-kraxel@redhat.com> +Patchwork-id: 54337 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/4] xhci: emulate intr endpoint intervals correctly +Bugzilla: 1001604 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Hans de Goede +RH-Acked-by: Miroslav Rezanina + +Respect the interval for interrupt endpoints, so we don't finish +transfers as fast as possible but at the rate configured by the guest. + +Fixes guest deadlocks triggered by interrupt storms. + +Cc: +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4d7a81c06f5f17e019a2d3a18300500bd64f6f40) +--- + hw/usb/hcd-xhci.c | 44 +++++++++++++++++++++++++++++++++++++------- + 1 file changed, 37 insertions(+), 7 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 44 +++++++++++++++++++++++++++++++++++++------- + 1 files changed, 37 insertions(+), 7 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 55bcfc4..ccf7cc5 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -355,6 +355,7 @@ typedef struct XHCITransfer { + unsigned int streamid; + bool in_xfer; + bool iso_xfer; ++ bool timed_xfer; + + unsigned int trb_count; + unsigned int trb_alloced; +@@ -1787,6 +1788,7 @@ static int xhci_fire_ctl_transfer(XHCIState *xhci, XHCITransfer *xfer) + + xfer->in_xfer = bmRequestType & USB_DIR_IN; + xfer->iso_xfer = false; ++ xfer->timed_xfer = false; + + if (xhci_setup_packet(xfer) < 0) { + return -1; +@@ -1802,6 +1804,17 @@ static int xhci_fire_ctl_transfer(XHCIState *xhci, XHCITransfer *xfer) + return 0; + } + ++static void xhci_calc_intr_kick(XHCIState *xhci, XHCITransfer *xfer, ++ XHCIEPContext *epctx, uint64_t mfindex) ++{ ++ uint64_t asap = ((mfindex + epctx->interval - 1) & ++ ~(epctx->interval-1)); ++ uint64_t kick = epctx->mfindex_last + epctx->interval; ++ ++ assert(epctx->interval != 0); ++ xfer->mfindex_kick = MAX(asap, kick); ++} ++ + static void xhci_calc_iso_kick(XHCIState *xhci, XHCITransfer *xfer, + XHCIEPContext *epctx, uint64_t mfindex) + { +@@ -1824,8 +1837,8 @@ static void xhci_calc_iso_kick(XHCIState *xhci, XHCITransfer *xfer, + } + } + +-static void xhci_check_iso_kick(XHCIState *xhci, XHCITransfer *xfer, +- XHCIEPContext *epctx, uint64_t mfindex) ++static void xhci_check_intr_iso_kick(XHCIState *xhci, XHCITransfer *xfer, ++ XHCIEPContext *epctx, uint64_t mfindex) + { + if (xfer->mfindex_kick > mfindex) { + qemu_mod_timer(epctx->kick_timer, qemu_get_clock_ns(vm_clock) + +@@ -1850,18 +1863,30 @@ static int xhci_submit(XHCIState *xhci, XHCITransfer *xfer, XHCIEPContext *epctx + switch(epctx->type) { + case ET_INTR_OUT: + case ET_INTR_IN: ++ xfer->pkts = 0; ++ xfer->iso_xfer = false; ++ xfer->timed_xfer = true; ++ mfindex = xhci_mfindex_get(xhci); ++ xhci_calc_intr_kick(xhci, xfer, epctx, mfindex); ++ xhci_check_intr_iso_kick(xhci, xfer, epctx, mfindex); ++ if (xfer->running_retry) { ++ return -1; ++ } ++ break; + case ET_BULK_OUT: + case ET_BULK_IN: + xfer->pkts = 0; + xfer->iso_xfer = false; ++ xfer->timed_xfer = false; + break; + case ET_ISO_OUT: + case ET_ISO_IN: + xfer->pkts = 1; + xfer->iso_xfer = true; ++ xfer->timed_xfer = true; + mfindex = xhci_mfindex_get(xhci); + xhci_calc_iso_kick(xhci, xfer, epctx, mfindex); +- xhci_check_iso_kick(xhci, xfer, epctx, mfindex); ++ xhci_check_intr_iso_kick(xhci, xfer, epctx, mfindex); + if (xfer->running_retry) { + return -1; + } +@@ -1922,13 +1947,18 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + + trace_usb_xhci_xfer_retry(xfer); + assert(xfer->running_retry); +- if (xfer->iso_xfer) { +- /* retry delayed iso transfer */ ++ if (xfer->timed_xfer) { ++ /* time to kick the transfer? */ + mfindex = xhci_mfindex_get(xhci); +- xhci_check_iso_kick(xhci, xfer, epctx, mfindex); ++ xhci_check_intr_iso_kick(xhci, xfer, epctx, mfindex); + if (xfer->running_retry) { + return; + } ++ xfer->timed_xfer = 0; ++ xfer->running_retry = 1; ++ } ++ if (xfer->iso_xfer) { ++ /* retry iso transfer */ + if (xhci_setup_packet(xfer) < 0) { + return; + } +@@ -2014,7 +2044,7 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + epctx->next_xfer = (epctx->next_xfer + 1) % TD_QUEUE; + ep = xfer->packet.ep; + } else { +- if (!xfer->iso_xfer) { ++ if (!xfer->timed_xfer) { + fprintf(stderr, "xhci: error firing data transfer\n"); + } + } +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-fix-endpoint-interval-calculation.patch b/SOURCES/kvm-xhci-fix-endpoint-interval-calculation.patch new file mode 100644 index 0000000..5ad77a6 --- /dev/null +++ b/SOURCES/kvm-xhci-fix-endpoint-interval-calculation.patch @@ -0,0 +1,42 @@ +From 95fb890f69399c3c8bc59c1ae64851632247e804 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 12 Sep 2013 09:39:29 +0200 +Subject: [PATCH 01/25] xhci: fix endpoint interval calculation + +RH-Author: Gerd Hoffmann +Message-id: <1378978772-21612-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 54338 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/4] xhci: fix endpoint interval calculation +Bugzilla: 1001604 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Hans de Goede +RH-Acked-by: Miroslav Rezanina + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +(cherry picked from commit ca7162782a293f525633e5816470498dd86a51cf) +--- + hw/usb/hcd-xhci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 233f3b6..55bcfc4 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1241,7 +1241,7 @@ static void xhci_init_epctx(XHCIEPContext *epctx, + epctx->ring.ccs = ctx[2] & 1; + } + +- epctx->interval = 1 << (ctx[0] >> 16) & 0xff; ++ epctx->interval = 1 << ((ctx[0] >> 16) & 0xff); + } + + static TRBCCode xhci_enable_ep(XHCIState *xhci, unsigned int slotid, +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-fix-overflow-in-usb_xhci_post_load.patch b/SOURCES/kvm-xhci-fix-overflow-in-usb_xhci_post_load.patch new file mode 100644 index 0000000..a6c3e2d --- /dev/null +++ b/SOURCES/kvm-xhci-fix-overflow-in-usb_xhci_post_load.patch @@ -0,0 +1,44 @@ +From e7f5ba3d995dde13369b53a61e65cb718ab585b3 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Mon, 10 Mar 2014 14:40:49 +0100 +Subject: [PATCH 01/13] xhci: fix overflow in usb_xhci_post_load + +RH-Author: Gerd Hoffmann +Message-id: <1394462449-19999-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 58065 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] xhci: fix overflow in usb_xhci_post_load +Bugzilla: 1074219 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Radim Krcmar +RH-Acked-by: Juan Quintela + +Found by Coverity. + +Reported-by: Markus Armbruster +Signed-off-by: Gerd Hoffmann +(cherry picked from commit f6969b9fef543da1ffa975d24f4d7b75dc369b03) +--- + hw/usb/hcd-xhci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 87ba7af..fd1bd89 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -3457,7 +3457,7 @@ static int usb_xhci_post_load(void *opaque, int version_id) + slot->uport = xhci_lookup_uport(xhci, slot_ctx); + assert(slot->uport && slot->uport->dev); + +- for (epid = 1; epid <= 32; epid++) { ++ for (epid = 1; epid <= 31; epid++) { + pctx = slot->ctx + 32 * epid; + xhci_dma_read_u32s(xhci, pctx, ep_ctx, sizeof(ep_ctx)); + state = ep_ctx[0] & EP_STATE_MASK; +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-implement-warm-port-reset.patch b/SOURCES/kvm-xhci-implement-warm-port-reset.patch new file mode 100644 index 0000000..b5167d1 --- /dev/null +++ b/SOURCES/kvm-xhci-implement-warm-port-reset.patch @@ -0,0 +1,74 @@ +From 6e80e82c534ca31d46e556ab10b83ebbd381a627 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 30 Aug 2013 09:39:37 +0200 +Subject: [PATCH 08/29] xhci: implement warm port reset + +RH-Author: Gerd Hoffmann +Message-id: <1377855577-11693-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 53942 +O-Subject: [RHEL-7 qemu-kvm PATCH 1/1] xhci: implement warm port reset +Bugzilla: 949514 +RH-Acked-by: Hans de Goede +RH-Acked-by: Markus Armbruster +RH-Acked-by: Paolo Bonzini + +Without this patch windows can't do port resets for usb3 devices. + +https://bugzilla.redhat.com/show_bug.cgi?id=949514 + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit dad5b9ea0895c227bc9d48b7f0a6fa51eaaa8661) + +Note: the upstream commit message is incomplete. This patch also +fixes cold port reset with USB_SPEED_SUPER. +--- + hw/usb/hcd-xhci.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 13 +++++++++++-- + 1 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 3d3d6c3..233f3b6 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2655,7 +2655,7 @@ static void xhci_port_update(XHCIPort *port, int is_detach) + xhci_port_notify(port, PORTSC_CSC); + } + +-static void xhci_port_reset(XHCIPort *port) ++static void xhci_port_reset(XHCIPort *port, bool warm_reset) + { + trace_usb_xhci_port_reset(port->portnr); + +@@ -2666,6 +2666,11 @@ static void xhci_port_reset(XHCIPort *port) + usb_device_reset(port->uport->dev); + + switch (port->uport->dev->speed) { ++ case USB_SPEED_SUPER: ++ if (warm_reset) { ++ port->portsc |= PORTSC_WRC; ++ } ++ /* fall through */ + case USB_SPEED_LOW: + case USB_SPEED_FULL: + case USB_SPEED_HIGH: +@@ -2828,8 +2833,12 @@ static void xhci_port_write(void *ptr, hwaddr reg, + switch (reg) { + case 0x00: /* PORTSC */ + /* write-1-to-start bits */ ++ if (val & PORTSC_WPR) { ++ xhci_port_reset(port, true); ++ break; ++ } + if (val & PORTSC_PR) { +- xhci_port_reset(port); ++ xhci_port_reset(port, false); + break; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-iso-allow-for-some-latency.patch b/SOURCES/kvm-xhci-iso-allow-for-some-latency.patch new file mode 100644 index 0000000..0d938ce --- /dev/null +++ b/SOURCES/kvm-xhci-iso-allow-for-some-latency.patch @@ -0,0 +1,46 @@ +From 7bb437f63758a301ae64ff0ef56b7d107eaa7d99 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:58 +0200 +Subject: [PATCH 24/43] xhci iso: allow for some latency + +Message-id: <1405088470-24115-26-git-send-email-kraxel@redhat.com> +Patchwork-id: 59829 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 25/37] xhci iso: allow for some latency +Bugzilla: 949385 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Allow the scheduled transfer time be a bit behind, to +compensate for latencies. Without this xhci will wait +way to often for the mfindex wraparound, assuming the +scheduled time is in the future just because qemu is +a bit behind in processing the iso transfer requests. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit cc03ff9d0a147a399a11c9f513afa5e06ceee453) +--- + hw/usb/hcd-xhci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 2799539..75da33d 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1980,7 +1980,7 @@ static void xhci_calc_iso_kick(XHCIState *xhci, XHCITransfer *xfer, + xfer->mfindex_kick = ((xfer->trbs[0].control >> TRB_TR_FRAMEID_SHIFT) + & TRB_TR_FRAMEID_MASK) << 3; + xfer->mfindex_kick |= mfindex & ~0x3fff; +- if (xfer->mfindex_kick < mfindex) { ++ if (xfer->mfindex_kick + 0x100 < mfindex) { + xfer->mfindex_kick += 0x4000; + } + } +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-iso-fix-time-calculation.patch b/SOURCES/kvm-xhci-iso-fix-time-calculation.patch new file mode 100644 index 0000000..5aaf9ce --- /dev/null +++ b/SOURCES/kvm-xhci-iso-fix-time-calculation.patch @@ -0,0 +1,45 @@ +From 38134ed684f0ec9eb40e3051e3052e5fd3bad000 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:57 +0200 +Subject: [PATCH 23/43] xhci iso: fix time calculation + +Message-id: <1405088470-24115-25-git-send-email-kraxel@redhat.com> +Patchwork-id: 59852 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 24/37] xhci iso: fix time calculation +Bugzilla: 949385 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Frameid specifies frames not microframes, so we +need to shift it to get the microframe index. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 786ad214c72226fa5bd4ebf18aeb4c6b54d3ba80) +--- + hw/usb/hcd-xhci.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 5f0840b..2799539 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1977,8 +1977,8 @@ static void xhci_calc_iso_kick(XHCIState *xhci, XHCITransfer *xfer, + xfer->mfindex_kick = asap; + } + } else { +- xfer->mfindex_kick = (xfer->trbs[0].control >> TRB_TR_FRAMEID_SHIFT) +- & TRB_TR_FRAMEID_MASK; ++ xfer->mfindex_kick = ((xfer->trbs[0].control >> TRB_TR_FRAMEID_SHIFT) ++ & TRB_TR_FRAMEID_MASK) << 3; + xfer->mfindex_kick |= mfindex & ~0x3fff; + if (xfer->mfindex_kick < mfindex) { + xfer->mfindex_kick += 0x4000; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-make-port-reset-trace-point-more-verbose.patch b/SOURCES/kvm-xhci-make-port-reset-trace-point-more-verbose.patch new file mode 100644 index 0000000..aea0c97 --- /dev/null +++ b/SOURCES/kvm-xhci-make-port-reset-trace-point-more-verbose.patch @@ -0,0 +1,55 @@ +From 41b79f8a3a86f20b45b073f9f28e3a6f9f4dc6d9 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:21:09 +0200 +Subject: [PATCH 29/43] xhci: make port reset trace point more verbose + +Message-id: <1405088470-24115-37-git-send-email-kraxel@redhat.com> +Patchwork-id: 59840 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 36/37] xhci: make port reset trace point more verbose +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 7bd3055ffd5f87d83f04659e496c91fbfc839143) +--- + hw/usb/hcd-xhci.c | 2 +- + trace-events | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 +- + trace-events | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index dc10ab0..32568cb 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2854,7 +2854,7 @@ static void xhci_port_update(XHCIPort *port, int is_detach) + + static void xhci_port_reset(XHCIPort *port, bool warm_reset) + { +- trace_usb_xhci_port_reset(port->portnr); ++ trace_usb_xhci_port_reset(port->portnr, warm_reset); + + if (!xhci_port_have_device(port)) { + return; +diff --git a/trace-events b/trace-events +index 117c2ce..e7bb7e0 100644 +--- a/trace-events ++++ b/trace-events +@@ -363,7 +363,7 @@ usb_xhci_irq_msix_use(uint32_t nr) "nr %d" + usb_xhci_irq_msix_unuse(uint32_t nr) "nr %d" + usb_xhci_queue_event(uint32_t vector, uint32_t idx, const char *trb, const char *evt, uint64_t param, uint32_t status, uint32_t control) "v %d, idx %d, %s, %s, p %016" PRIx64 ", s %08x, c 0x%08x" + usb_xhci_fetch_trb(uint64_t addr, const char *name, uint64_t param, uint32_t status, uint32_t control) "addr %016" PRIx64 ", %s, p %016" PRIx64 ", s %08x, c 0x%08x" +-usb_xhci_port_reset(uint32_t port) "port %d" ++usb_xhci_port_reset(uint32_t port, bool warm) "port %d, warm %d" + usb_xhci_port_link(uint32_t port, uint32_t pls) "port %d, pls %d" + usb_xhci_port_notify(uint32_t port, uint32_t pls) "port %d, bits %x" + usb_xhci_slot_enable(uint32_t slotid) "slotid %d" +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-remove-leftover-debug-printf.patch b/SOURCES/kvm-xhci-remove-leftover-debug-printf.patch new file mode 100644 index 0000000..738fc4b --- /dev/null +++ b/SOURCES/kvm-xhci-remove-leftover-debug-printf.patch @@ -0,0 +1,40 @@ +From cac7f36f9ae8317a33bc353fd0c18275898526bb Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:38 +0200 +Subject: [PATCH 05/43] xhci: remove leftover debug printf + +Message-id: <1405088470-24115-6-git-send-email-kraxel@redhat.com> +Patchwork-id: 59825 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 05/37] xhci: remove leftover debug printf +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 5219042274fa2f993c25202680eeaea42193389d) +--- + hw/usb/hcd-xhci.c | 2 -- + 1 file changed, 2 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 724c412..00623f9 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -1167,8 +1167,6 @@ static XHCIStreamContext *xhci_find_stream(XHCIEPContext *epctx, + + if (sctx->sct == -1) { + xhci_dma_read_u32s(epctx->xhci, sctx->pctx, ctx, sizeof(ctx)); +- fprintf(stderr, "%s: init sctx #%d @ " DMA_ADDR_FMT ": %08x %08x\n", +- __func__, streamid, sctx->pctx, ctx[0], ctx[1]); + sct = (ctx[0] >> 1) & 0x07; + if (epctx->lsa && sct != 1) { + *cc_error = CC_INVALID_STREAM_TYPE_ERROR; +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-reset-port-when-disabling-slot.patch b/SOURCES/kvm-xhci-reset-port-when-disabling-slot.patch new file mode 100644 index 0000000..74eb083 --- /dev/null +++ b/SOURCES/kvm-xhci-reset-port-when-disabling-slot.patch @@ -0,0 +1,41 @@ +From 8aa4bf9e8049ab1f0f4beda2eaa620f970f98692 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 12 Sep 2013 09:39:31 +0200 +Subject: [PATCH 03/25] xhci: reset port when disabling slot + +RH-Author: Gerd Hoffmann +Message-id: <1378978772-21612-4-git-send-email-kraxel@redhat.com> +Patchwork-id: 54336 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/4] xhci: reset port when disabling slot +Bugzilla: 1001604 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Hans de Goede +RH-Acked-by: Miroslav Rezanina + +Cc: qemu-stable@nongnu.org +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 5c67dd7b4884979a2613a4702ac1ab68b0e6a16e) +--- + hw/usb/hcd-xhci.c | 1 + + 1 file changed, 1 insertion(+) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index ccf7cc5..0061cbe 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2090,6 +2090,7 @@ static TRBCCode xhci_disable_slot(XHCIState *xhci, unsigned int slotid) + + xhci->slots[slotid-1].enabled = 0; + xhci->slots[slotid-1].addressed = 0; ++ xhci->slots[slotid-1].uport = NULL; + return CC_SUCCESS; + } + +-- +1.7.1 + diff --git a/SOURCES/kvm-xhci-switch-debug-printf-to-tracepoint.patch b/SOURCES/kvm-xhci-switch-debug-printf-to-tracepoint.patch new file mode 100644 index 0000000..ce19eea --- /dev/null +++ b/SOURCES/kvm-xhci-switch-debug-printf-to-tracepoint.patch @@ -0,0 +1,42 @@ +From fb9a90622fec7d8207962b7e8b58dfe8decc94ae Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:20:59 +0200 +Subject: [PATCH 25/43] xhci: switch debug printf to tracepoint + +Message-id: <1405088470-24115-27-git-send-email-kraxel@redhat.com> +Patchwork-id: 59853 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 26/37] xhci: switch debug printf to tracepoint +Bugzilla: 980747 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4f9cc7342281bfbbc1bfccc155c59551c06d63db) +--- + hw/usb/hcd-xhci.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index 75da33d..f937b4e 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -2041,9 +2041,7 @@ static int xhci_submit(XHCIState *xhci, XHCITransfer *xfer, XHCIEPContext *epctx + } + break; + default: +- fprintf(stderr, "xhci: unknown or unhandled EP " +- "(type %d, in %d, ep %02x)\n", +- epctx->type, xfer->in_xfer, xfer->epid); ++ trace_usb_xhci_unimplemented("endpoint type", epctx->type); + return -1; + } + +-- +1.8.3.1 + diff --git a/SOURCES/kvm-xhci-use-DPRINTF-instead-of-fprintf-stderr.patch b/SOURCES/kvm-xhci-use-DPRINTF-instead-of-fprintf-stderr.patch new file mode 100644 index 0000000..03ba9b1 --- /dev/null +++ b/SOURCES/kvm-xhci-use-DPRINTF-instead-of-fprintf-stderr.patch @@ -0,0 +1,396 @@ +From 120f0850e08e429f7782df32412ce7cbb626a654 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 11 Jul 2014 14:21:00 +0200 +Subject: [PATCH 26/43] xhci: use DPRINTF() instead of fprintf(stderr, ...) + +Message-id: <1405088470-24115-28-git-send-email-kraxel@redhat.com> +Patchwork-id: 59856 +O-Subject: [RHEL-7.1 qemu-kvm PATCH 27/37] xhci: use DPRINTF() instead of fprintf(stderr, ...) +Bugzilla: 980833 +RH-Acked-by: Dr. David Alan Gilbert (git) +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Laszlo Ersek + +So we don't spam stderr with (guest-triggerable) messages by default. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit d6bb65fcd24c8cb8c37ffe324c360f3b0c94b902) +--- + hw/usb/hcd-xhci.c | 90 +++++++++++++++++++++++++++---------------------------- + 1 file changed, 45 insertions(+), 45 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + hw/usb/hcd-xhci.c | 90 +++++++++++++++++++++++++++---------------------------- + 1 file changed, 45 insertions(+), 45 deletions(-) + +diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c +index f937b4e..2352b12 100644 +--- a/hw/usb/hcd-xhci.c ++++ b/hw/usb/hcd-xhci.c +@@ -810,7 +810,7 @@ static inline int xhci_running(XHCIState *xhci) + static void xhci_die(XHCIState *xhci) + { + xhci->usbsts |= USBSTS_HCE; +- fprintf(stderr, "xhci: asserted controller error\n"); ++ DPRINTF("xhci: asserted controller error\n"); + } + + static void xhci_write_event(XHCIState *xhci, XHCIEvent *event, int v) +@@ -857,8 +857,8 @@ static void xhci_events_update(XHCIState *xhci, int v) + erdp = xhci_addr64(intr->erdp_low, intr->erdp_high); + if (erdp < intr->er_start || + erdp >= (intr->er_start + TRB_SIZE*intr->er_size)) { +- fprintf(stderr, "xhci: ERDP out of bounds: "DMA_ADDR_FMT"\n", erdp); +- fprintf(stderr, "xhci: ER[%d] at "DMA_ADDR_FMT" len %d\n", ++ DPRINTF("xhci: ERDP out of bounds: "DMA_ADDR_FMT"\n", erdp); ++ DPRINTF("xhci: ER[%d] at "DMA_ADDR_FMT" len %d\n", + v, intr->er_start, intr->er_size); + xhci_die(xhci); + return; +@@ -926,7 +926,7 @@ static void xhci_event(XHCIState *xhci, XHCIEvent *event, int v) + if (intr->er_full) { + DPRINTF("xhci_event(): ER full, queueing\n"); + if (((intr->ev_buffer_put+1) % EV_QUEUE) == intr->ev_buffer_get) { +- fprintf(stderr, "xhci: event queue full, dropping event!\n"); ++ DPRINTF("xhci: event queue full, dropping event!\n"); + return; + } + intr->ev_buffer[intr->ev_buffer_put++] = *event; +@@ -939,8 +939,8 @@ static void xhci_event(XHCIState *xhci, XHCIEvent *event, int v) + erdp = xhci_addr64(intr->erdp_low, intr->erdp_high); + if (erdp < intr->er_start || + erdp >= (intr->er_start + TRB_SIZE*intr->er_size)) { +- fprintf(stderr, "xhci: ERDP out of bounds: "DMA_ADDR_FMT"\n", erdp); +- fprintf(stderr, "xhci: ER[%d] at "DMA_ADDR_FMT" len %d\n", ++ DPRINTF("xhci: ERDP out of bounds: "DMA_ADDR_FMT"\n", erdp); ++ DPRINTF("xhci: ER[%d] at "DMA_ADDR_FMT" len %d\n", + v, intr->er_start, intr->er_size); + xhci_die(xhci); + return; +@@ -957,7 +957,7 @@ static void xhci_event(XHCIState *xhci, XHCIEvent *event, int v) + #endif + intr->er_full = 1; + if (((intr->ev_buffer_put+1) % EV_QUEUE) == intr->ev_buffer_get) { +- fprintf(stderr, "xhci: event queue full, dropping event!\n"); ++ DPRINTF("xhci: event queue full, dropping event!\n"); + return; + } + intr->ev_buffer[intr->ev_buffer_put++] = *event; +@@ -1075,7 +1075,7 @@ static void xhci_er_reset(XHCIState *xhci, int v) + } + /* cache the (sole) event ring segment location */ + if (intr->erstsz != 1) { +- fprintf(stderr, "xhci: invalid value for ERSTSZ: %d\n", intr->erstsz); ++ DPRINTF("xhci: invalid value for ERSTSZ: %d\n", intr->erstsz); + xhci_die(xhci); + return; + } +@@ -1085,7 +1085,7 @@ static void xhci_er_reset(XHCIState *xhci, int v) + le32_to_cpus(&seg.addr_high); + le32_to_cpus(&seg.size); + if (seg.size < 16 || seg.size > 4096) { +- fprintf(stderr, "xhci: invalid value for segment size: %d\n", seg.size); ++ DPRINTF("xhci: invalid value for segment size: %d\n", seg.size); + xhci_die(xhci); + return; + } +@@ -1251,7 +1251,7 @@ static TRBCCode xhci_alloc_device_streams(XHCIState *xhci, unsigned int slotid, + + r = usb_device_alloc_streams(eps[0]->dev, eps, nr_eps, req_nr_streams); + if (r != 0) { +- fprintf(stderr, "xhci: alloc streams failed\n"); ++ DPRINTF("xhci: alloc streams failed\n"); + return CC_RESOURCE_ERROR; + } + +@@ -1535,7 +1535,7 @@ static TRBCCode xhci_stop_ep(XHCIState *xhci, unsigned int slotid, + assert(slotid >= 1 && slotid <= xhci->numslots); + + if (epid < 1 || epid > 31) { +- fprintf(stderr, "xhci: bad ep %d\n", epid); ++ DPRINTF("xhci: bad ep %d\n", epid); + return CC_TRB_ERROR; + } + +@@ -1547,7 +1547,7 @@ static TRBCCode xhci_stop_ep(XHCIState *xhci, unsigned int slotid, + } + + if (xhci_ep_nuke_xfers(xhci, slotid, epid, CC_STOPPED) > 0) { +- fprintf(stderr, "xhci: FIXME: endpoint stopped w/ xfers running, " ++ DPRINTF("xhci: FIXME: endpoint stopped w/ xfers running, " + "data might be lost\n"); + } + +@@ -1572,7 +1572,7 @@ static TRBCCode xhci_reset_ep(XHCIState *xhci, unsigned int slotid, + assert(slotid >= 1 && slotid <= xhci->numslots); + + if (epid < 1 || epid > 31) { +- fprintf(stderr, "xhci: bad ep %d\n", epid); ++ DPRINTF("xhci: bad ep %d\n", epid); + return CC_TRB_ERROR; + } + +@@ -1586,13 +1586,13 @@ static TRBCCode xhci_reset_ep(XHCIState *xhci, unsigned int slotid, + epctx = slot->eps[epid-1]; + + if (epctx->state != EP_HALTED) { +- fprintf(stderr, "xhci: reset EP while EP %d not halted (%d)\n", ++ DPRINTF("xhci: reset EP while EP %d not halted (%d)\n", + epid, epctx->state); + return CC_CONTEXT_STATE_ERROR; + } + + if (xhci_ep_nuke_xfers(xhci, slotid, epid, 0) > 0) { +- fprintf(stderr, "xhci: FIXME: endpoint reset w/ xfers running, " ++ DPRINTF("xhci: FIXME: endpoint reset w/ xfers running, " + "data might be lost\n"); + } + +@@ -1629,7 +1629,7 @@ static TRBCCode xhci_set_ep_dequeue(XHCIState *xhci, unsigned int slotid, + assert(slotid >= 1 && slotid <= xhci->numslots); + + if (epid < 1 || epid > 31) { +- fprintf(stderr, "xhci: bad ep %d\n", epid); ++ DPRINTF("xhci: bad ep %d\n", epid); + return CC_TRB_ERROR; + } + +@@ -1646,7 +1646,7 @@ static TRBCCode xhci_set_ep_dequeue(XHCIState *xhci, unsigned int slotid, + epctx = slot->eps[epid-1]; + + if (epctx->state != EP_STOPPED) { +- fprintf(stderr, "xhci: set EP dequeue pointer while EP %d not stopped\n", epid); ++ DPRINTF("xhci: set EP dequeue pointer while EP %d not stopped\n", epid); + return CC_CONTEXT_STATE_ERROR; + } + +@@ -1688,7 +1688,7 @@ static int xhci_xfer_create_sgl(XHCITransfer *xfer, int in_xfer) + switch (TRB_TYPE(*trb)) { + case TR_DATA: + if ((!(trb->control & TRB_TR_DIR)) != (!in_xfer)) { +- fprintf(stderr, "xhci: data direction mismatch for TR_DATA\n"); ++ DPRINTF("xhci: data direction mismatch for TR_DATA\n"); + goto err; + } + /* fallthrough */ +@@ -1698,7 +1698,7 @@ static int xhci_xfer_create_sgl(XHCITransfer *xfer, int in_xfer) + chunk = trb->status & 0x1ffff; + if (trb->control & TRB_TR_IDT) { + if (chunk > 8 || in_xfer) { +- fprintf(stderr, "xhci: invalid immediate data TRB\n"); ++ DPRINTF("xhci: invalid immediate data TRB\n"); + goto err; + } + qemu_sglist_add(&xfer->sgl, trb->addr, chunk); +@@ -1827,7 +1827,7 @@ static int xhci_setup_packet(XHCITransfer *xfer) + } else { + ep = xhci_epid_to_usbep(xhci, xfer->slotid, xfer->epid); + if (!ep) { +- fprintf(stderr, "xhci: slot %d has no device\n", ++ DPRINTF("xhci: slot %d has no device\n", + xfer->slotid); + return -1; + } +@@ -1890,7 +1890,7 @@ static int xhci_complete_packet(XHCITransfer *xfer) + xhci_stall_ep(xfer); + break; + default: +- fprintf(stderr, "%s: FIXME: status = %d\n", __func__, ++ DPRINTF("%s: FIXME: status = %d\n", __func__, + xfer->packet.status); + FIXME("unhandled USB_RET_*"); + } +@@ -1914,21 +1914,21 @@ static int xhci_fire_ctl_transfer(XHCIState *xhci, XHCITransfer *xfer) + + /* do some sanity checks */ + if (TRB_TYPE(*trb_setup) != TR_SETUP) { +- fprintf(stderr, "xhci: ep0 first TD not SETUP: %d\n", ++ DPRINTF("xhci: ep0 first TD not SETUP: %d\n", + TRB_TYPE(*trb_setup)); + return -1; + } + if (TRB_TYPE(*trb_status) != TR_STATUS) { +- fprintf(stderr, "xhci: ep0 last TD not STATUS: %d\n", ++ DPRINTF("xhci: ep0 last TD not STATUS: %d\n", + TRB_TYPE(*trb_status)); + return -1; + } + if (!(trb_setup->control & TRB_TR_IDT)) { +- fprintf(stderr, "xhci: Setup TRB doesn't have IDT set\n"); ++ DPRINTF("xhci: Setup TRB doesn't have IDT set\n"); + return -1; + } + if ((trb_setup->status & 0x1ffff) != 8) { +- fprintf(stderr, "xhci: Setup TRB has bad length (%d)\n", ++ DPRINTF("xhci: Setup TRB has bad length (%d)\n", + (trb_setup->status & 0x1ffff)); + return -1; + } +@@ -2079,12 +2079,12 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + assert(epid >= 1 && epid <= 31); + + if (!xhci->slots[slotid-1].enabled) { +- fprintf(stderr, "xhci: xhci_kick_ep for disabled slot %d\n", slotid); ++ DPRINTF("xhci: xhci_kick_ep for disabled slot %d\n", slotid); + return; + } + epctx = xhci->slots[slotid-1].eps[epid-1]; + if (!epctx) { +- fprintf(stderr, "xhci: xhci_kick_ep for disabled endpoint %d,%d\n", ++ DPRINTF("xhci: xhci_kick_ep for disabled endpoint %d,%d\n", + epid, slotid); + return; + } +@@ -2189,14 +2189,14 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, + epctx->next_xfer = (epctx->next_xfer + 1) % TD_QUEUE; + ep = xfer->packet.ep; + } else { +- fprintf(stderr, "xhci: error firing CTL transfer\n"); ++ DPRINTF("xhci: error firing CTL transfer\n"); + } + } else { + if (xhci_fire_transfer(xhci, xfer, epctx) >= 0) { + epctx->next_xfer = (epctx->next_xfer + 1) % TD_QUEUE; + } else { + if (!xfer->timed_xfer) { +- fprintf(stderr, "xhci: error firing data transfer\n"); ++ DPRINTF("xhci: error firing data transfer\n"); + } + } + } +@@ -2299,7 +2299,7 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + xhci_dma_read_u32s(xhci, ictx, ictl_ctx, sizeof(ictl_ctx)); + + if (ictl_ctx[0] != 0x0 || ictl_ctx[1] != 0x3) { +- fprintf(stderr, "xhci: invalid input context control %08x %08x\n", ++ DPRINTF("xhci: invalid input context control %08x %08x\n", + ictl_ctx[0], ictl_ctx[1]); + return CC_TRB_ERROR; + } +@@ -2315,14 +2315,14 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + + uport = xhci_lookup_uport(xhci, slot_ctx); + if (uport == NULL) { +- fprintf(stderr, "xhci: port not found\n"); ++ DPRINTF("xhci: port not found\n"); + return CC_TRB_ERROR; + } + trace_usb_xhci_slot_address(slotid, uport->path); + + dev = uport->dev; + if (!dev || !dev->attached) { +- fprintf(stderr, "xhci: port %s not connected\n", uport->path); ++ DPRINTF("xhci: port %s not connected\n", uport->path); + return CC_USB_TRANSACTION_ERROR; + } + +@@ -2331,7 +2331,7 @@ static TRBCCode xhci_address_slot(XHCIState *xhci, unsigned int slotid, + continue; + } + if (xhci->slots[i].uport == uport) { +- fprintf(stderr, "xhci: port %s already assigned to slot %d\n", ++ DPRINTF("xhci: port %s already assigned to slot %d\n", + uport->path, i+1); + return CC_TRB_ERROR; + } +@@ -2415,7 +2415,7 @@ static TRBCCode xhci_configure_slot(XHCIState *xhci, unsigned int slotid, + xhci_dma_read_u32s(xhci, ictx, ictl_ctx, sizeof(ictl_ctx)); + + if ((ictl_ctx[0] & 0x3) != 0x0 || (ictl_ctx[1] & 0x3) != 0x1) { +- fprintf(stderr, "xhci: invalid input context control %08x %08x\n", ++ DPRINTF("xhci: invalid input context control %08x %08x\n", + ictl_ctx[0], ictl_ctx[1]); + return CC_TRB_ERROR; + } +@@ -2424,7 +2424,7 @@ static TRBCCode xhci_configure_slot(XHCIState *xhci, unsigned int slotid, + xhci_dma_read_u32s(xhci, octx, slot_ctx, sizeof(slot_ctx)); + + if (SLOT_STATE(slot_ctx[3]) < SLOT_ADDRESSED) { +- fprintf(stderr, "xhci: invalid slot state %08x\n", slot_ctx[3]); ++ DPRINTF("xhci: invalid slot state %08x\n", slot_ctx[3]); + return CC_CONTEXT_STATE_ERROR; + } + +@@ -2497,7 +2497,7 @@ static TRBCCode xhci_evaluate_slot(XHCIState *xhci, unsigned int slotid, + xhci_dma_read_u32s(xhci, ictx, ictl_ctx, sizeof(ictl_ctx)); + + if (ictl_ctx[0] != 0x0 || ictl_ctx[1] & ~0x3) { +- fprintf(stderr, "xhci: invalid input context control %08x %08x\n", ++ DPRINTF("xhci: invalid input context control %08x %08x\n", + ictl_ctx[0], ictl_ctx[1]); + return CC_TRB_ERROR; + } +@@ -2576,11 +2576,11 @@ static unsigned int xhci_get_slot(XHCIState *xhci, XHCIEvent *event, XHCITRB *tr + unsigned int slotid; + slotid = (trb->control >> TRB_CR_SLOTID_SHIFT) & TRB_CR_SLOTID_MASK; + if (slotid < 1 || slotid > xhci->numslots) { +- fprintf(stderr, "xhci: bad slot id %d\n", slotid); ++ DPRINTF("xhci: bad slot id %d\n", slotid); + event->ccode = CC_TRB_ERROR; + return 0; + } else if (!xhci->slots[slotid-1].enabled) { +- fprintf(stderr, "xhci: slot id %d not enabled\n", slotid); ++ DPRINTF("xhci: slot id %d not enabled\n", slotid); + event->ccode = CC_SLOT_NOT_ENABLED_ERROR; + return 0; + } +@@ -2696,7 +2696,7 @@ static void xhci_process_commands(XHCIState *xhci) + } + } + if (i >= xhci->numslots) { +- fprintf(stderr, "xhci: no device slots available\n"); ++ DPRINTF("xhci: no device slots available\n"); + event.ccode = CC_NO_SLOTS_ERROR; + } else { + slotid = i+1; +@@ -2888,7 +2888,7 @@ static void xhci_reset(DeviceState *dev) + + trace_usb_xhci_reset(); + if (!(xhci->usbsts & USBSTS_HCH)) { +- fprintf(stderr, "xhci: reset while running!\n"); ++ DPRINTF("xhci: reset while running!\n"); + } + + xhci->usbcmd = 0; +@@ -3066,7 +3066,7 @@ static void xhci_port_write(void *ptr, hwaddr reg, + /* windows does this for some reason, don't spam stderr */ + break; + default: +- fprintf(stderr, "%s: ignore pls write (old %d, new %d)\n", ++ DPRINTF("%s: ignore pls write (old %d, new %d)\n", + __func__, old_pls, new_pls); + break; + } +@@ -3317,7 +3317,7 @@ static void xhci_doorbell_write(void *ptr, hwaddr reg, + trace_usb_xhci_doorbell_write(reg, val); + + if (!xhci_running(xhci)) { +- fprintf(stderr, "xhci: wrote doorbell while xHC stopped or paused\n"); ++ DPRINTF("xhci: wrote doorbell while xHC stopped or paused\n"); + return; + } + +@@ -3327,16 +3327,16 @@ static void xhci_doorbell_write(void *ptr, hwaddr reg, + if (val == 0) { + xhci_process_commands(xhci); + } else { +- fprintf(stderr, "xhci: bad doorbell 0 write: 0x%x\n", ++ DPRINTF("xhci: bad doorbell 0 write: 0x%x\n", + (uint32_t)val); + } + } else { + epid = val & 0xff; + streamid = (val >> 16) & 0xffff; + if (reg > xhci->numslots) { +- fprintf(stderr, "xhci: bad doorbell %d\n", (int)reg); ++ DPRINTF("xhci: bad doorbell %d\n", (int)reg); + } else if (epid > 31) { +- fprintf(stderr, "xhci: bad doorbell %d write: 0x%x\n", ++ DPRINTF("xhci: bad doorbell %d write: 0x%x\n", + (int)reg, (uint32_t)val); + } else { + xhci_kick_ep(xhci, reg, epid, streamid); +-- +1.8.3.1 + diff --git a/SOURCES/kvm-zero-initialize-KVM_SET_GSI_ROUTING-input.patch b/SOURCES/kvm-zero-initialize-KVM_SET_GSI_ROUTING-input.patch new file mode 100644 index 0000000..3f4f460 --- /dev/null +++ b/SOURCES/kvm-zero-initialize-KVM_SET_GSI_ROUTING-input.patch @@ -0,0 +1,110 @@ +From 2dd33300d200746f86301516a7d04800ac96653d Mon Sep 17 00:00:00 2001 +From: Michael S. Tsirkin +Date: Mon, 19 May 2014 09:57:37 +0200 +Subject: [PATCH 1/2] kvm: zero-initialize KVM_SET_GSI_ROUTING input + +RH-Author: Michael S. Tsirkin +Message-id: <1400493448-29146-2-git-send-email-mst@redhat.com> +Patchwork-id: 58948 +O-Subject: [PATCH qemu-kvm RHEL7.1 1/2] kvm: zero-initialize KVM_SET_GSI_ROUTING input +Bugzilla: 1098976 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Alex Williamson + +kvm_add_routing_entry makes an attempt to +zero-initialize any new routing entry. +However, it fails to initialize padding +within the u field of the structure +kvm_irq_routing_entry. + +Other functions like kvm_irqchip_update_msi_route +also fail to initialize the padding field in +kvm_irq_routing_entry. + +It's better to just make sure all input is initialized. + +Once it is, we can also drop complex field by field assignment and just +do the simple *a = *b to update a route entry. + +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Gleb Natapov +(cherry picked from commit 0fbc20740342713f282b118b4a446c4c43df3f4a) +--- + kvm-all.c | 19 +++++++------------ + 1 file changed, 7 insertions(+), 12 deletions(-) + +Signed-off-by: Miroslav Rezanina +--- + kvm-all.c | 19 +++++++------------ + 1 files changed, 7 insertions(+), 12 deletions(-) + +diff --git a/kvm-all.c b/kvm-all.c +index adc0a8e..592301a 100644 +--- a/kvm-all.c ++++ b/kvm-all.c +@@ -988,11 +988,8 @@ static void kvm_add_routing_entry(KVMState *s, + } + n = s->irq_routes->nr++; + new = &s->irq_routes->entries[n]; +- memset(new, 0, sizeof(*new)); +- new->gsi = entry->gsi; +- new->type = entry->type; +- new->flags = entry->flags; +- new->u = entry->u; ++ ++ *new = *entry; + + set_gsi(s, entry->gsi); + +@@ -1011,9 +1008,7 @@ static int kvm_update_routing_entry(KVMState *s, + continue; + } + +- entry->type = new_entry->type; +- entry->flags = new_entry->flags; +- entry->u = new_entry->u; ++ *entry = *new_entry; + + kvm_irqchip_commit_routes(s); + +@@ -1025,7 +1020,7 @@ static int kvm_update_routing_entry(KVMState *s, + + void kvm_irqchip_add_irq_route(KVMState *s, int irq, int irqchip, int pin) + { +- struct kvm_irq_routing_entry e; ++ struct kvm_irq_routing_entry e = {}; + + assert(pin < s->gsi_count); + +@@ -1138,7 +1133,7 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg) + return virq; + } + +- route = g_malloc(sizeof(KVMMSIRoute)); ++ route = g_malloc0(sizeof(KVMMSIRoute)); + route->kroute.gsi = virq; + route->kroute.type = KVM_IRQ_ROUTING_MSI; + route->kroute.flags = 0; +@@ -1159,7 +1154,7 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg) + + int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg) + { +- struct kvm_irq_routing_entry kroute; ++ struct kvm_irq_routing_entry kroute = {}; + int virq; + + if (!kvm_gsi_routing_enabled()) { +@@ -1185,7 +1180,7 @@ int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg) + + int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg) + { +- struct kvm_irq_routing_entry kroute; ++ struct kvm_irq_routing_entry kroute = {}; + + if (!kvm_irqchip_in_kernel()) { + return -ENOSYS; +-- +1.7.1 + diff --git a/SOURCES/misc-disable-s3-s4-by-default.patch b/SOURCES/misc-disable-s3-s4-by-default.patch new file mode 100644 index 0000000..ab28489 --- /dev/null +++ b/SOURCES/misc-disable-s3-s4-by-default.patch @@ -0,0 +1,50 @@ +From 9830eecd6989198882fa2c4ef132665f36ee7abe Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:06:56 +0200 +Subject: disable s3/s4 by default + +Message-id: <1374235471-27096-2-git-send-email-armbru@redhat.com> +Patchwork-id: 52604 +O-Subject: [RHEL-7 PATCH qemu-kvm 1/2] disable s3/s4 by default +Bugzilla: 980840 +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das +RH-Acked-by: Gleb Natapov + +From: Gleb Natapov + +After the changes proposed in Bug 827503, S3/S4 will be enabled by +default on qemu/seabios, but we want it disabled by default in RHEL6.4 +to avoid problems on problematic OSes (it'll be enabled on a +case-by-case basis in the management layer). + +Since we want to have it fully supported when enabled, QE should perform +the expected tests (which AFAIK have been run in rhel6.3 already, so +enabling it manually should not be a problem). + +Signed-off-by: Gleb Natapov +Signed-off-by: Eduardo Habkost +(cherry picked from commit 625992f4673989108819db751aa9066b65fc6020) + +Picked from qemu-kvm-rhel6. + +Conflicts: + hw/acpi.c +Signed-off-by: Markus Armbruster + +diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c +index c4af1cc..86ff598 100644 +--- a/hw/acpi/piix4.c ++++ b/hw/acpi/piix4.c +@@ -475,8 +475,8 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, + + static Property piix4_pm_properties[] = { + DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0), +- DEFINE_PROP_UINT8("disable_s3", PIIX4PMState, disable_s3, 0), +- DEFINE_PROP_UINT8("disable_s4", PIIX4PMState, disable_s4, 0), ++ DEFINE_PROP_UINT8("disable_s3", PIIX4PMState, disable_s3, 1), ++ DEFINE_PROP_UINT8("disable_s4", PIIX4PMState, disable_s4, 1), + DEFINE_PROP_UINT8("s4_val", PIIX4PMState, s4_val, 2), + DEFINE_PROP_END_OF_LIST(), + }; diff --git a/SOURCES/pc-Add-machine-type-rhel6-0-0.patch b/SOURCES/pc-Add-machine-type-rhel6-0-0.patch new file mode 100644 index 0000000..a62e98a --- /dev/null +++ b/SOURCES/pc-Add-machine-type-rhel6-0-0.patch @@ -0,0 +1,280 @@ +From 9010afecdea6872235b1692c4ee5f04cca2dbcf2 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:02:14 +0200 +Subject: pc: Add machine type "rhel6.0.0" + +Message-id: <1375201922-6794-3-git-send-email-armbru@redhat.com> +Patchwork-id: 52821 +O-Subject: [RHEL-7 PATCH v3 02/15] pc: Add machine type "rhel6.0.0" +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Make it a copy of upstream's pc-0.12 type. Change name and desc. +Collect the scattered compat_props in one place (no functional +change). Copy the init function. + +The next few commits will morph compat_props and init function from +"same as upstream's pc-0.12" into "compatible with RHEL-6's +rhel6.0.0". + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 070a50d..bdb1b11 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -777,9 +777,252 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + ++#define PC_RHEL6_0_COMPAT \ ++ {\ ++ .driver = "Conroe-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Conroe-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Penryn-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Penryn-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Nehalem-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Nehalem-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "scsi-hd",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "scsi-cd",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "scsi-disk",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "ide-hd",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "ide-cd",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "ide-drive",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "virtio-blk-pci",\ ++ .property = "discard_granularity",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "virtio-serial-pci",\ ++ .property = "vectors",\ ++ /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */\ ++ .value = stringify(0xFFFFFFFF),\ ++ },{\ ++ .driver = "e1000",\ ++ .property = "romfile",\ ++ .value = "pxe-e1000.rom",\ ++ },{\ ++ .driver = "ne2k_pci",\ ++ .property = "romfile",\ ++ .value = "pxe-ne2k_pci.rom",\ ++ },{\ ++ .driver = "pcnet",\ ++ .property = "romfile",\ ++ .value = "pxe-pcnet.rom",\ ++ },{\ ++ .driver = "rtl8139",\ ++ .property = "romfile",\ ++ .value = "pxe-rtl8139.rom",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "romfile",\ ++ .value = "pxe-virtio.rom",\ ++ },{\ ++ .driver = "486-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "usb-tablet",\ ++ .property = "usb_version",\ ++ .value = stringify(1),\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "ctrl_mac_addr",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "mq",\ ++ .value = "off",\ ++ },{\ ++ .driver = "e1000",\ ++ .property = "autonegotiation",\ ++ .value = "off",\ ++ },{\ ++ .driver = "nec-usb-xhci",\ ++ .property = "msi",\ ++ .value = "off",\ ++ },{\ ++ .driver = "nec-usb-xhci",\ ++ .property = "msix",\ ++ .value = "off",\ ++ },{\ ++ .driver = "ivshmem",\ ++ .property = "use64",\ ++ .value = "0",\ ++ },{\ ++ .driver = "qxl",\ ++ .property = "revision",\ ++ .value = stringify(3),\ ++ },{\ ++ .driver = "qxl-vga",\ ++ .property = "revision",\ ++ .value = stringify(3),\ ++ },{\ ++ .driver = "VGA",\ ++ .property = "mmio",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-scsi-pci",\ ++ .property = "hotplug",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-scsi-pci",\ ++ .property = "param_change",\ ++ .value = "off",\ ++ },{\ ++ .driver = "VGA",\ ++ .property = "vgamem_mb",\ ++ .value = stringify(8),\ ++ },{\ ++ .driver = "vmware-svga",\ ++ .property = "vgamem_mb",\ ++ .value = stringify(8),\ ++ },{\ ++ .driver = "qxl-vga",\ ++ .property = "vgamem_mb",\ ++ .value = stringify(8),\ ++ },{\ ++ .driver = "qxl",\ ++ .property = "vgamem_mb",\ ++ .value = stringify(8),\ ++ },{\ ++ .driver = "virtio-blk-pci",\ ++ .property = "config-wce",\ ++ .value = "off",\ ++ },{\ ++ .driver = "pc-sysfw",\ ++ .property = "rom_only",\ ++ .value = stringify(1),\ ++ },{\ ++ .driver = TYPE_ISA_FDC,\ ++ .property = "check_media_rate",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-balloon-pci",\ ++ .property = "class",\ ++ .value = stringify(PCI_CLASS_MEMORY_RAM),\ ++ },{\ ++ .driver = "apic",\ ++ .property = "vapic",\ ++ .value = "off",\ ++ },{\ ++ .driver = TYPE_USB_DEVICE,\ ++ .property = "full-path",\ ++ .value = "no",\ ++ },{\ ++ .driver = "virtio-blk-pci",\ ++ .property = "event_idx",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-serial-pci",\ ++ .property = "event_idx",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-net-pci",\ ++ .property = "event_idx",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-balloon-pci",\ ++ .property = "event_idx",\ ++ .value = "off",\ ++ },{\ ++ .driver = TYPE_PCI_DEVICE,\ ++ .property = "command_serr_enable",\ ++ .value = "off",\ ++ },{\ ++ .driver = "AC97",\ ++ .property = "use_broken_id",\ ++ .value = stringify(1),\ ++ },{\ ++ .driver = "virtio-serial-pci",\ ++ .property = "max_ports",\ ++ .value = stringify(1),\ ++ },{\ ++ .driver = "virtio-serial-pci",\ ++ .property = "vectors",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "VGA",\ ++ .property = "rombar",\ ++ .value = stringify(0),\ ++ },{\ ++ .driver = "vmware-svga",\ ++ .property = "rombar",\ ++ .value = stringify(0),\ ++ } ++ ++static void pc_init_rhel600(QEMUMachineInitArgs *args) ++{ ++ ram_addr_t ram_size = args->ram_size; ++ const char *cpu_model = args->cpu_model; ++ const char *kernel_filename = args->kernel_filename; ++ const char *kernel_cmdline = args->kernel_cmdline; ++ const char *initrd_filename = args->initrd_filename; ++ const char *boot_device = args->boot_device; ++ has_pvpanic = false; ++ disable_kvm_pv_eoi(); ++ enable_compat_apic_id_mode(); ++ pc_init1(get_system_memory(), ++ get_system_io(), ++ ram_size, boot_device, ++ kernel_filename, kernel_cmdline, ++ initrd_filename, cpu_model, 1, 0); ++} ++ ++static QEMUMachine pc_machine_rhel600 = { ++ .name = "rhel6.0.0", ++ .desc = "RHEL 6.0.0 PC", ++ .init = pc_init_rhel600, ++ .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_0_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel600); + } + + machine_init(rhel_machine_init); diff --git a/SOURCES/pc-Add-machine-type-rhel6-1-0.patch b/SOURCES/pc-Add-machine-type-rhel6-1-0.patch new file mode 100644 index 0000000..136c8b9 --- /dev/null +++ b/SOURCES/pc-Add-machine-type-rhel6-1-0.patch @@ -0,0 +1,110 @@ +From 80dd2cb01a00e19e5227955e31fcfebbfcec1f85 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:04:57 +0200 +Subject: pc: Add machine type "rhel6.1.0" + +Message-id: <1375201922-6794-11-git-send-email-armbru@redhat.com> +Patchwork-id: 52822 +O-Subject: [RHEL-7 PATCH v3 10/15] pc: Add machine type "rhel6.1.0" +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Match RHEL-6's compat_props qxl.revision, qxl-vga.revision, +VGA.rombar. + +RHEL-6's vmware-svga.rombar isn't needed, as we won't ship the device. + +RHEL-6's non-upstream virtio-serial-pci.flow_control isn't needed. +RHEL-6 has it to enable migration back to RHEL-6.0 (see qemu-kvm-rhel6 +commit 975ced4), which isn't relevant in RHEL-7. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index e48545b..4ab39cd 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -777,7 +777,7 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + +-#define PC_RHEL6_0_COMPAT \ ++#define PC_RHEL6_1_COMPAT \ + {\ + .driver = "Conroe-" TYPE_X86_CPU,\ + .property = "model",\ +@@ -870,11 +870,11 @@ static QEMUMachine pc_machine_rhel700 = { + },{\ + .driver = "qxl",\ + .property = "revision",\ +- .value = stringify(1),\ ++ .value = stringify(2),\ + },{\ + .driver = "qxl-vga",\ + .property = "revision",\ +- .value = stringify(1),\ ++ .value = stringify(2),\ + },{\ + .driver = "VGA",\ + .property = "mmio",\ +@@ -923,6 +923,38 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "AC97",\ + .property = "use_broken_id",\ + .value = stringify(1),\ ++ } ++ ++static void pc_init_rhel610(QEMUMachineInitArgs *args) ++{ ++ has_pvpanic = false; ++ disable_kvm_pv_eoi(); ++ enable_compat_apic_id_mode(); ++ pc_init_rhel700(args); ++} ++ ++static QEMUMachine pc_machine_rhel610 = { ++ .name = "rhel6.1.0", ++ .desc = "RHEL 6.1.0 PC", ++ .init = pc_init_rhel610, ++ .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_1_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++#define PC_RHEL6_0_COMPAT \ ++ PC_RHEL6_1_COMPAT,\ ++ {\ ++ .driver = "qxl",\ ++ .property = "revision",\ ++ .value = stringify(1),\ ++ },{\ ++ .driver = "qxl-vga",\ ++ .property = "revision",\ ++ .value = stringify(1),\ + },{\ + .driver = "VGA",\ + .property = "rombar",\ +@@ -931,10 +963,7 @@ static QEMUMachine pc_machine_rhel700 = { + + static void pc_init_rhel600(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; +- disable_kvm_pv_eoi(); +- enable_compat_apic_id_mode(); +- pc_init_rhel700(args); ++ pc_init_rhel610(args); + } + + static QEMUMachine pc_machine_rhel600 = { +@@ -952,6 +981,7 @@ static QEMUMachine pc_machine_rhel600 = { + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel610); + qemu_register_machine(&pc_machine_rhel600); + } + diff --git a/SOURCES/pc-Add-machine-type-rhel6-2-0.patch b/SOURCES/pc-Add-machine-type-rhel6-2-0.patch new file mode 100644 index 0000000..29af189 --- /dev/null +++ b/SOURCES/pc-Add-machine-type-rhel6-2-0.patch @@ -0,0 +1,137 @@ +From 26e8594d99236281d19435ba40c323665ca21bcd Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:05:31 +0200 +Subject: pc: Add machine type "rhel6.2.0" + +Message-id: <1375201922-6794-12-git-send-email-armbru@redhat.com> +Patchwork-id: 52823 +O-Subject: [RHEL-7 PATCH v3 11/15] pc: Add machine type "rhel6.2.0" +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Match RHEL-6's compat_props qxl.revision, +qxl-vga.revision. virtio-blk-pci.event_idx, +virtio-serial-pci.event_idx, virtio-net-pci.event_idx, +virtio-balloon-pci.event_idx. + +RHEL-6's non-upstream hda-duplex.mcompat, hda-micro.mcompat, +hda-output.mcompat aren't needed. RHEL-6 has them to enable migration +back to RHEL-6.1 (see qemu-kvm-rhel6 commit d619762), which isn't +relevant in RHEL-7. + +Non-upstream usb-tablet.migrate, usb-mouse.migrate, usb-kbd.migrate +will be covered separately (bug 953304). + +PIIX4_PM.disable_s3, PIIX4_PM.disable_s4 will be covered separately +(bug 980840). + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 4ab39cd..eaf3af1 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -777,7 +777,7 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + +-#define PC_RHEL6_1_COMPAT \ ++#define PC_RHEL6_2_COMPAT \ + {\ + .driver = "Conroe-" TYPE_X86_CPU,\ + .property = "model",\ +@@ -870,11 +870,11 @@ static QEMUMachine pc_machine_rhel700 = { + },{\ + .driver = "qxl",\ + .property = "revision",\ +- .value = stringify(2),\ ++ .value = stringify(3),\ + },{\ + .driver = "qxl-vga",\ + .property = "revision",\ +- .value = stringify(2),\ ++ .value = stringify(3),\ + },{\ + .driver = "VGA",\ + .property = "mmio",\ +@@ -900,6 +900,46 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "class",\ + .value = stringify(PCI_CLASS_MEMORY_RAM),\ + },{\ ++ .driver = TYPE_PCI_DEVICE,\ ++ .property = "command_serr_enable",\ ++ .value = "off",\ ++ },{\ ++ .driver = "AC97",\ ++ .property = "use_broken_id",\ ++ .value = stringify(1),\ ++ } ++ ++static void pc_init_rhel620(QEMUMachineInitArgs *args) ++{ ++ has_pvpanic = false; ++ disable_kvm_pv_eoi(); ++ enable_compat_apic_id_mode(); ++ pc_init_rhel700(args); ++} ++ ++static QEMUMachine pc_machine_rhel620 = { ++ .name = "rhel6.2.0", ++ .desc = "RHEL 6.2.0 PC", ++ .init = pc_init_rhel620, ++ .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_2_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++#define PC_RHEL6_1_COMPAT \ ++ PC_RHEL6_2_COMPAT,\ ++ {\ ++ .driver = "qxl",\ ++ .property = "revision",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "qxl-vga",\ ++ .property = "revision",\ ++ .value = stringify(2),\ ++ },{\ + .driver = "virtio-blk-pci",\ + .property = "event_idx",\ + .value = "off",\ +@@ -915,22 +955,11 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "virtio-balloon-pci",\ + .property = "event_idx",\ + .value = "off",\ +- },{\ +- .driver = TYPE_PCI_DEVICE,\ +- .property = "command_serr_enable",\ +- .value = "off",\ +- },{\ +- .driver = "AC97",\ +- .property = "use_broken_id",\ +- .value = stringify(1),\ + } + + static void pc_init_rhel610(QEMUMachineInitArgs *args) + { +- has_pvpanic = false; +- disable_kvm_pv_eoi(); +- enable_compat_apic_id_mode(); +- pc_init_rhel700(args); ++ pc_init_rhel620(args); + } + + static QEMUMachine pc_machine_rhel610 = { +@@ -981,6 +1010,7 @@ static QEMUMachine pc_machine_rhel600 = { + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel620); + qemu_register_machine(&pc_machine_rhel610); + qemu_register_machine(&pc_machine_rhel600); + } diff --git a/SOURCES/pc-Add-machine-type-rhel6-3-0.patch b/SOURCES/pc-Add-machine-type-rhel6-3-0.patch new file mode 100644 index 0000000..4dcbaa0 --- /dev/null +++ b/SOURCES/pc-Add-machine-type-rhel6-3-0.patch @@ -0,0 +1,75 @@ +From 04ee5ae0197b004e2fb59970359da39788868182 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:05:46 +0200 +Subject: pc: Add machine type "rhel6.3.0" + +Message-id: <1375201922-6794-13-git-send-email-armbru@redhat.com> +Patchwork-id: 52826 +O-Subject: [RHEL-7 PATCH v3 12/15] pc: Add machine type "rhel6.3.0" +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +RHEL-6's non-upstream virtio-net-pci.x-__com_redhat_rhel620_compat +will be covered separately, if necessary (no BZ yet). + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index eaf3af1..dff2543 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -777,7 +777,7 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + +-#define PC_RHEL6_2_COMPAT \ ++#define PC_RHEL6_3_COMPAT \ + {\ + .driver = "Conroe-" TYPE_X86_CPU,\ + .property = "model",\ +@@ -909,7 +909,7 @@ static QEMUMachine pc_machine_rhel700 = { + .value = stringify(1),\ + } + +-static void pc_init_rhel620(QEMUMachineInitArgs *args) ++static void pc_init_rhel630(QEMUMachineInitArgs *args) + { + has_pvpanic = false; + disable_kvm_pv_eoi(); +@@ -917,6 +917,26 @@ static void pc_init_rhel620(QEMUMachineInitArgs *args) + pc_init_rhel700(args); + } + ++static QEMUMachine pc_machine_rhel630 = { ++ .name = "rhel6.3.0", ++ .desc = "RHEL 6.3.0 PC", ++ .init = pc_init_rhel630, ++ .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_3_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++#define PC_RHEL6_2_COMPAT \ ++ PC_RHEL6_3_COMPAT ++ ++static void pc_init_rhel620(QEMUMachineInitArgs *args) ++{ ++ pc_init_rhel630(args); ++} ++ + static QEMUMachine pc_machine_rhel620 = { + .name = "rhel6.2.0", + .desc = "RHEL 6.2.0 PC", +@@ -1010,6 +1030,7 @@ static QEMUMachine pc_machine_rhel600 = { + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel630); + qemu_register_machine(&pc_machine_rhel620); + qemu_register_machine(&pc_machine_rhel610); + qemu_register_machine(&pc_machine_rhel600); diff --git a/SOURCES/pc-Add-machine-type-rhel6-4-0.patch b/SOURCES/pc-Add-machine-type-rhel6-4-0.patch new file mode 100644 index 0000000..f94bd25 --- /dev/null +++ b/SOURCES/pc-Add-machine-type-rhel6-4-0.patch @@ -0,0 +1,208 @@ +From fce3651ee99dd18501b9302d72cd8c0af098a235 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:05:58 +0200 +Subject: pc: Add machine type "rhel6.4.0" + +Message-id: <1375201922-6794-14-git-send-email-armbru@redhat.com> +Patchwork-id: 52820 +O-Subject: [RHEL-7 PATCH v3 13/15] pc: Add machine type "rhel6.4.0" +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Match RHEL-6's set_cpu_model_level() by equivalent compat_props model +and level. + +Match RHEL-6's compat_props qxl.revision, qxl-vga.revision, +virtio-scsi-pci.hotplug, virtio-scsi-pci.param_change. + +RHEL-6's non-upstream USB.create_unique_serial will be covered +separately (either bug 953304 or a new one). + +RHEL-6's non-upstream isa-fdc.migrate_dir isn't needed. RHEL-6 has it +to enable migration back to RHEL-6.3 (see qemu-kvm-rhel6 commit +a214015), which isn't relevant in RHEL-7. + +Match RHEL-6's non-upstream e1000.x-__com_redhat_rhel630_compat by +upstream's e1000.autonegotiation, as follows. + +Upstream commit 2af234e disables auto-negotiation for older machine +types, by defining property e1000.autonegotiation and putting it into +suitable compat_props. The corresponding RHEL-6 commit da4452c does +not add this property. Instead, it reuses +e1000.x-__com_redhat_rhel630_compat, with the sense reverted. This +turns autonegotiation off for rhel6.3.0 and older. + +RHEL-7 inherits the upstream solution. We need to set +e1000.autonegotiation for exactly the machine types where +e1000.x-__com_redhat_rhel630_compat is on in RHEL-6, namely rhel6.3.0 +and older. + +Match RHEL-6's disable_kvm_pv_eoi(). + +Match RHEL-6's compat_contiguous_apic_ids by upstream's +enable_compat_apic_id_mode(). + +RHEL-6's set_pmu_passthrough() and disable_tsc_deadline() will be +covered separately (bug 918907). + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index dff2543..a922645 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -777,32 +777,8 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + +-#define PC_RHEL6_3_COMPAT \ ++#define PC_RHEL6_4_COMPAT \ + {\ +- .driver = "Conroe-" TYPE_X86_CPU,\ +- .property = "model",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Conroe-" TYPE_X86_CPU,\ +- .property = "level",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Penryn-" TYPE_X86_CPU,\ +- .property = "model",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Penryn-" TYPE_X86_CPU,\ +- .property = "level",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Nehalem-" TYPE_X86_CPU,\ +- .property = "model",\ +- .value = stringify(2),\ +- },{\ +- .driver = "Nehalem-" TYPE_X86_CPU,\ +- .property = "level",\ +- .value = stringify(2),\ +- },{\ + .driver = "scsi-hd",\ + .property = "discard_granularity",\ + .value = stringify(0),\ +@@ -864,30 +840,10 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "mq",\ + .value = "off",\ + },{\ +- .driver = "e1000",\ +- .property = "autonegotiation",\ +- .value = "off",\ +- },{\ +- .driver = "qxl",\ +- .property = "revision",\ +- .value = stringify(3),\ +- },{\ +- .driver = "qxl-vga",\ +- .property = "revision",\ +- .value = stringify(3),\ +- },{\ + .driver = "VGA",\ + .property = "mmio",\ + .value = "off",\ + },{\ +- .driver = "virtio-scsi-pci",\ +- .property = "hotplug",\ +- .value = "off",\ +- },{\ +- .driver = "virtio-scsi-pci",\ +- .property = "param_change",\ +- .value = "off",\ +- },{\ + .driver = "virtio-blk-pci",\ + .property = "config-wce",\ + .value = "off",\ +@@ -909,12 +865,77 @@ static QEMUMachine pc_machine_rhel700 = { + .value = stringify(1),\ + } + +-static void pc_init_rhel630(QEMUMachineInitArgs *args) ++static void pc_init_rhel640(QEMUMachineInitArgs *args) + { + has_pvpanic = false; ++ pc_init_rhel700(args); ++} ++ ++static QEMUMachine pc_machine_rhel640 = { ++ .name = "rhel6.4.0", ++ .desc = "RHEL 6.4.0 PC", ++ .init = pc_init_rhel640, ++ .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_4_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++#define PC_RHEL6_3_COMPAT \ ++ PC_RHEL6_4_COMPAT,\ ++ {\ ++ .driver = "Conroe-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Conroe-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Penryn-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Penryn-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Nehalem-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Nehalem-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "e1000",\ ++ .property = "autonegotiation",\ ++ .value = "off",\ ++ },{\ ++ .driver = "qxl",\ ++ .property = "revision",\ ++ .value = stringify(3),\ ++ },{\ ++ .driver = "qxl-vga",\ ++ .property = "revision",\ ++ .value = stringify(3),\ ++ },{\ ++ .driver = "virtio-scsi-pci",\ ++ .property = "hotplug",\ ++ .value = "off",\ ++ },{\ ++ .driver = "virtio-scsi-pci",\ ++ .property = "param_change",\ ++ .value = "off",\ ++ } ++ ++static void pc_init_rhel630(QEMUMachineInitArgs *args) ++{ + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); +- pc_init_rhel700(args); ++ pc_init_rhel640(args); + } + + static QEMUMachine pc_machine_rhel630 = { +@@ -1030,6 +1051,7 @@ static QEMUMachine pc_machine_rhel600 = { + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel640); + qemu_register_machine(&pc_machine_rhel630); + qemu_register_machine(&pc_machine_rhel620); + qemu_register_machine(&pc_machine_rhel610); diff --git a/SOURCES/pc-Add-machine-type-rhel6-5-0.patch b/SOURCES/pc-Add-machine-type-rhel6-5-0.patch new file mode 100644 index 0000000..2192230 --- /dev/null +++ b/SOURCES/pc-Add-machine-type-rhel6-5-0.patch @@ -0,0 +1,83 @@ +From 8f9887acd04e8db0bebd0ad3fe1cf5d7294abdfd Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:06:25 +0200 +Subject: pc: Add machine type "rhel6.5.0" + +Message-id: <1375201922-6794-15-git-send-email-armbru@redhat.com> +Patchwork-id: 52824 +O-Subject: [RHEL-7 PATCH v3 14/15] pc: Add machine type "rhel6.5.0" +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Match RHEL-6's virtio-scsi-pci.vectors. Note: upstream commit 4c205d0 +"virtio-scsi: enable MSI-X support" changed vectors from 2 to +DEV_NVECTORS_UNSPECIFIED. The necessary compat_props to keep it at 2 +for old machine types were forgotten. The RHEL-6 backport (commit +0ef7672) added them. + +Match RHEL-6's has_pvpanic. + +RHEL-6's disable_kvm_sep() will be covered separately (bug 918907). + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index a922645..5ca2cc3 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -777,7 +777,7 @@ static QEMUMachine pc_machine_rhel700 = { + DEFAULT_MACHINE_OPTIONS, + }; + +-#define PC_RHEL6_4_COMPAT \ ++#define PC_RHEL6_5_COMPAT \ + {\ + .driver = "scsi-hd",\ + .property = "discard_granularity",\ +@@ -865,10 +865,35 @@ static QEMUMachine pc_machine_rhel700 = { + .value = stringify(1),\ + } + ++static void pc_init_rhel650(QEMUMachineInitArgs *args) ++{ ++ pc_init_rhel700(args); ++} ++ ++static QEMUMachine pc_machine_rhel650 = { ++ .name = "rhel6.5.0", ++ .desc = "RHEL 6.5.0 PC", ++ .init = pc_init_rhel650, ++ .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_RHEL6_5_COMPAT, ++ { /* end of list */ } ++ }, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++#define PC_RHEL6_4_COMPAT \ ++ PC_RHEL6_5_COMPAT,\ ++ {\ ++ .driver = "virtio-scsi-pci",\ ++ .property = "vectors",\ ++ .value = stringify(2),\ ++ } ++ + static void pc_init_rhel640(QEMUMachineInitArgs *args) + { + has_pvpanic = false; +- pc_init_rhel700(args); ++ pc_init_rhel650(args); + } + + static QEMUMachine pc_machine_rhel640 = { +@@ -1051,6 +1076,7 @@ static QEMUMachine pc_machine_rhel600 = { + static void rhel_machine_init(void) + { + qemu_register_machine(&pc_machine_rhel700); ++ qemu_register_machine(&pc_machine_rhel650); + qemu_register_machine(&pc_machine_rhel640); + qemu_register_machine(&pc_machine_rhel630); + qemu_register_machine(&pc_machine_rhel620); diff --git a/SOURCES/pc-Disable-the-use-flash-device-for-BIOS-unless-KVM-misfeature.patch b/SOURCES/pc-Disable-the-use-flash-device-for-BIOS-unless-KVM-misfeature.patch new file mode 100644 index 0000000..d8f806c --- /dev/null +++ b/SOURCES/pc-Disable-the-use-flash-device-for-BIOS-unless-KVM-misfeature.patch @@ -0,0 +1,97 @@ +From 62868855d0fdd34dee119a59c7e56c1706fc27ab Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:00:55 +0200 +Subject: pc: Disable the "use flash device for BIOS unless KVM" misfeature + +Message-id: <1373453682-19227-2-git-send-email-armbru@redhat.com> +Patchwork-id: 52417 +O-Subject: [RHEL-7 PATCH qemu-kvm 1/1] pc: Disable the "use flash device for BIOS unless KVM" misfeature +Bugzilla: 963280 +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Paolo Bonzini + +Use of a flash memory device for the BIOS was added in series "[PATCH +v10 0/8] PC system flash support", commit 4732dca..1b89faf, v1.1. + +Flash vs. ROM is a guest-visible difference. Thus, flash use had to +be suppressed for machine types pc-1.0 and older. This was +accomplished by adding a dummy device "pc-sysfw" with property +"rom_only": + +* Non-zero rom_only means "use ROM". Default for pc-1.0 and older. +* Zero rom_only means "maybe use flash". Default for newer machines. + +Not only is the dummy device ugly, it was also retroactively added to +the older machine types! Fortunately, it's not guest-visible (thus no +immediate guest ABI breakage), and has no vmstate (thus no immediate +migration breakage). Breakage occurs only if the user unwisely +enables flash by setting rom_only to zero. Patch review FAIL #1. + +Why "maybe use flash"? Flash didn't work with KVM. Therefore, +rom_only=0 really means "use flash, except when KVM is enabled, use +ROM". This is a Bad Idea, because it makes enabling/ disabling KVM +guest-visible. Patch review FAIL #2. + +Aside: it also precludes migrating between KVM on and off, but that's +not possible for other reasons anyway. + +Upstream commit 9953f88 killed the misfeature for new machine types. +Upstream commit 9e1c2ec reverted the kill, but left a dead variable +behind. This is what's in RHEL-7 is before this patch. + +KVM has recently been made to support flash (KVM_CAP_READONLY_MEM), +which permitted upstream QEMU to redo the flash vs. ROM switch +properly (commit 338ea90..dafb82e). The required follow-up cleanup +hasn't been committed, yet: Paolo's [PATCH v2 0/3] Remove legacy sysfw +code. + +Instead of backporting all that, I'm simply ripping out the flash +feature. ROM has been working just fine for us, and I don't think we +should complicate RHEL-7 maintenance and support by having two ways to +map BIOS, at least not without sufficient business reason. + +The result behaves just like upstream with the follow-up cleanup +applied, except -pflash doesn't affect the BIOS mapping, but remains +as it always was: it creates an unused drive. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c +index 4f17668..2bbedc9 100644 +--- a/hw/block/pc_sysfw.c ++++ b/hw/block/pc_sysfw.c +@@ -36,6 +36,7 @@ + + #define BIOS_FILENAME "bios.bin" + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + typedef struct PcSysFwDevice { + SysBusDevice busdev; + uint8_t rom_only; +@@ -138,6 +139,7 @@ static void pc_system_flash_init(MemoryRegion *rom_memory, + + pc_isa_bios_init(rom_memory, flash_mem, size); + } ++#endif /* Disabled for Red Hat Enterprise Linux */ + + static void old_pc_system_rom_init(MemoryRegion *rom_memory) + { +@@ -194,6 +196,7 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory) + bios); + } + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ + /* + * Bug-compatible flash vs. ROM selection enabled? + * A few older machines enable this. +@@ -287,3 +290,9 @@ static void pcsysfw_register (void) + + type_init (pcsysfw_register); + ++#else /* Disabled for Red Hat Enterprise Linux */ ++void pc_system_firmware_init(MemoryRegion *rom_memory) ++{ ++ old_pc_system_rom_init(rom_memory); ++} ++#endif diff --git a/SOURCES/pc-Drop-RHEL-6-USB-device-compat_prop-full-path.patch b/SOURCES/pc-Drop-RHEL-6-USB-device-compat_prop-full-path.patch new file mode 100644 index 0000000..2e11a4f --- /dev/null +++ b/SOURCES/pc-Drop-RHEL-6-USB-device-compat_prop-full-path.patch @@ -0,0 +1,36 @@ +From ff0ad2681b06e4e7e0eadc281d3efda171bd1f5e Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:03:35 +0200 +Subject: pc: Drop RHEL-6 USB device compat_prop full-path + +Message-id: <1375201922-6794-6-git-send-email-armbru@redhat.com> +Patchwork-id: 52814 +O-Subject: [RHEL-7 PATCH v3 05/15] pc: Drop RHEL-6 USB device compat_prop full-path +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Upstream added property full-path to USB devices in commit eeb0cf9 +(v1.1) for migration compatibility. RHEL-6 got the feature in commit +29b10d1 (6.2), but without the property, because 6.2 was the first +version capable of migrating USB devices. Therefore, full-path needs +to remain on by default for all machine types. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 5d57a76..aae891e 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -904,10 +904,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "vapic",\ + .value = "off",\ + },{\ +- .driver = TYPE_USB_DEVICE,\ +- .property = "full-path",\ +- .value = "no",\ +- },{\ + .driver = "virtio-blk-pci",\ + .property = "event_idx",\ + .value = "off",\ diff --git a/SOURCES/pc-Drop-RHEL-6-compat_props-apic-kvm-apic-vapic.patch b/SOURCES/pc-Drop-RHEL-6-compat_props-apic-kvm-apic-vapic.patch new file mode 100644 index 0000000..3d36aba --- /dev/null +++ b/SOURCES/pc-Drop-RHEL-6-compat_props-apic-kvm-apic-vapic.patch @@ -0,0 +1,44 @@ +From 196b2691b4d55361527b887ec7bc044d423b7757 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:04:01 +0200 +Subject: pc: Drop RHEL-6 compat_props {apic, kvm-apic}.vapic + +Message-id: <1375201922-6794-8-git-send-email-armbru@redhat.com> +Patchwork-id: 52816 +O-Subject: [RHEL-7 PATCH v3 07/15] pc: Drop RHEL-6 compat_props {apic, kvm-apic}.vapic +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +RHEL-6's kvm_arch_create() calls kvm_tpr_opt_setup() #ifdef +KVM_EXIT_TPR_ACCESS, which is defined in RHEL-6. Adds migration +section "kvm-tpr-opt" when KVM is enabled. Comes from qemu-kvm, +initial commit 885e90b. + +It went into upstream qemu v1.1.0, but in different form (commit +e5ad936 "kvmvapic: Introduce TPR access optimization for Windows +guests"). Here, migration section "kvm-tpr-opt" belongs to qdev +"kvmvapic", which is created when the property kvm-apic.vapic +(inherited from apic_common) is on. Commit 9bea6a2 disables it for +older machine types, with suitable compat_props. + +Drop them from the RHEL-6 machine types. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 5dffeb2..9e96b79 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -900,10 +900,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "class",\ + .value = stringify(PCI_CLASS_MEMORY_RAM),\ + },{\ +- .driver = "apic",\ +- .property = "vapic",\ +- .value = "off",\ +- },{\ + .driver = "virtio-blk-pci",\ + .property = "event_idx",\ + .value = "off",\ diff --git a/SOURCES/pc-Drop-RHEL-6-compat_props-virtio-serial-pci-max_ports-vectors.patch b/SOURCES/pc-Drop-RHEL-6-compat_props-virtio-serial-pci-max_ports-vectors.patch new file mode 100644 index 0000000..19dea35 --- /dev/null +++ b/SOURCES/pc-Drop-RHEL-6-compat_props-virtio-serial-pci-max_ports-vectors.patch @@ -0,0 +1,37 @@ +From fc8a3e5647791e0e4fbcc28bb1e9afa5c158711f Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:03:48 +0200 +Subject: pc: Drop RHEL-6 compat_props virtio-serial-pci.{max_ports, vectors} + +Message-id: <1375201922-6794-7-git-send-email-armbru@redhat.com> +Patchwork-id: 52819 +O-Subject: [RHEL-7 PATCH v3 06/15] pc: Drop RHEL-6 compat_props virtio-serial-pci.{max_ports, vectors} +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +RHEL-6 has them only in RHEL-5 machine types. See qemu-kvm-rhel6 +commit aad5614. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index aae891e..5dffeb2 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -928,14 +928,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "use_broken_id",\ + .value = stringify(1),\ + },{\ +- .driver = "virtio-serial-pci",\ +- .property = "max_ports",\ +- .value = stringify(1),\ +- },{\ +- .driver = "virtio-serial-pci",\ +- .property = "vectors",\ +- .value = stringify(0),\ +- },{\ + .driver = "VGA",\ + .property = "rombar",\ + .value = stringify(0),\ diff --git a/SOURCES/pc-Drop-superfluous-RHEL-6-compat_props.patch b/SOURCES/pc-Drop-superfluous-RHEL-6-compat_props.patch new file mode 100644 index 0000000..1438bc1 --- /dev/null +++ b/SOURCES/pc-Drop-superfluous-RHEL-6-compat_props.patch @@ -0,0 +1,96 @@ +From 5e40d1551af04499f6e0f408e07dc5046123c6c0 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:02:36 +0200 +Subject: pc: Drop superfluous RHEL-6 compat_props + +Message-id: <1375201922-6794-4-git-send-email-armbru@redhat.com> +Patchwork-id: 52812 +O-Subject: [RHEL-7 PATCH v3 03/15] pc: Drop superfluous RHEL-6 compat_props +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Drop compatibility properties of + +* devices we won't ship: ne2k_pci, pcnet, pc-sysfw, vmware-svga + +* devices that are new in RHEL-7: nec-usb-xhci, ivshmem + +Re ivshmem: actually, the current plan is not to ship it (bug 787463). +Executing the plan will only flip the reason for dropping its +compatibility property, so no code conflict here. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index bdb1b11..96f6bf9 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -840,14 +840,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "romfile",\ + .value = "pxe-e1000.rom",\ + },{\ +- .driver = "ne2k_pci",\ +- .property = "romfile",\ +- .value = "pxe-ne2k_pci.rom",\ +- },{\ +- .driver = "pcnet",\ +- .property = "romfile",\ +- .value = "pxe-pcnet.rom",\ +- },{\ + .driver = "rtl8139",\ + .property = "romfile",\ + .value = "pxe-rtl8139.rom",\ +@@ -876,18 +868,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "autonegotiation",\ + .value = "off",\ + },{\ +- .driver = "nec-usb-xhci",\ +- .property = "msi",\ +- .value = "off",\ +- },{\ +- .driver = "nec-usb-xhci",\ +- .property = "msix",\ +- .value = "off",\ +- },{\ +- .driver = "ivshmem",\ +- .property = "use64",\ +- .value = "0",\ +- },{\ + .driver = "qxl",\ + .property = "revision",\ + .value = stringify(3),\ +@@ -912,10 +892,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "vgamem_mb",\ + .value = stringify(8),\ + },{\ +- .driver = "vmware-svga",\ +- .property = "vgamem_mb",\ +- .value = stringify(8),\ +- },{\ + .driver = "qxl-vga",\ + .property = "vgamem_mb",\ + .value = stringify(8),\ +@@ -928,10 +904,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "config-wce",\ + .value = "off",\ + },{\ +- .driver = "pc-sysfw",\ +- .property = "rom_only",\ +- .value = stringify(1),\ +- },{\ + .driver = TYPE_ISA_FDC,\ + .property = "check_media_rate",\ + .value = "off",\ +@@ -983,10 +955,6 @@ static QEMUMachine pc_machine_rhel700 = { + .driver = "VGA",\ + .property = "rombar",\ + .value = stringify(0),\ +- },{\ +- .driver = "vmware-svga",\ +- .property = "rombar",\ +- .value = stringify(0),\ + } + + static void pc_init_rhel600(QEMUMachineInitArgs *args) diff --git a/SOURCES/pc-Give-rhel6-0-0-a-kvmclock.patch b/SOURCES/pc-Give-rhel6-0-0-a-kvmclock.patch new file mode 100644 index 0000000..5e293a9 --- /dev/null +++ b/SOURCES/pc-Give-rhel6-0-0-a-kvmclock.patch @@ -0,0 +1,51 @@ +From 9eb0daf6079beade2bcc13d0062d90a7644685f5 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:04:35 +0200 +Subject: pc: Give rhel6.0.0 a kvmclock + +Message-id: <1375201922-6794-10-git-send-email-armbru@redhat.com> +Patchwork-id: 52817 +O-Subject: [RHEL-7 PATCH v3 09/15] pc: Give rhel6.0.0 a kvmclock +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +RHEL-6.0 inherited kvmclock from upstream qemu-kvm. It later made its +way into upstream qemu (commit 0ec329d), and we switched to it in +RHEL-6.2 (commit 17ca2d2). + +Since kvmclock was new in upstream qemu, the commit took care to +enable it only for new machine types. Since it wasn't new in RHEL-6, +the backport dropped that part. + +Drop it in RHEL-7, too. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 57877e3..e48545b 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -931,20 +931,10 @@ static QEMUMachine pc_machine_rhel700 = { + + static void pc_init_rhel600(QEMUMachineInitArgs *args) + { +- ram_addr_t ram_size = args->ram_size; +- const char *cpu_model = args->cpu_model; +- const char *kernel_filename = args->kernel_filename; +- const char *kernel_cmdline = args->kernel_cmdline; +- const char *initrd_filename = args->initrd_filename; +- const char *boot_device = args->boot_device; + has_pvpanic = false; + disable_kvm_pv_eoi(); + enable_compat_apic_id_mode(); +- pc_init1(get_system_memory(), +- get_system_io(), +- ram_size, boot_device, +- kernel_filename, kernel_cmdline, +- initrd_filename, cpu_model, 1, 0); ++ pc_init_rhel700(args); + } + + static QEMUMachine pc_machine_rhel600 = { diff --git a/SOURCES/pc-replace-upstream-machine-types-by-rhel7-types.patch b/SOURCES/pc-replace-upstream-machine-types-by-rhel7-types.patch new file mode 100644 index 0000000..aa862b9 --- /dev/null +++ b/SOURCES/pc-replace-upstream-machine-types-by-rhel7-types.patch @@ -0,0 +1,120 @@ +commit ffacd352a92751dab005eaa1892676a91e788a10 +Author: Eduardo Habkost +Date: Thu Jun 27 15:57:41 2013 +0200 + + pc: Replace upstream machine types by RHEL-7 types + + RH-Author: Eduardo Habkost + Message-id: <1372348663-1706-2-git-send-email-ehabkost@redhat.com> + Patchwork-id: 52251 + O-Subject: [PATCH v2 1/3] pc: Replace upstream machine types by RHEL-7 types + Bugzilla: 977864 + RH-Acked-by: Bandan Das + RH-Acked-by: Markus Armbruster + RH-Acked-by: Paolo Bonzini + + From: Markus Armbruster + + Bugzilla: 977864 + Upstream status: not applicable + + Existing machine-types are commented-out instead of being deleted, to + help avoid backport conflicts in the future. + + Signed-off-by: Markus Armbruster + [ehabkost: edited patch description] + Signed-off-by: Eduardo Habkost + --- + hw/i386/pc_piix.c | 29 +++++++++++++++++++++++++++++ + hw/i386/pc_q35.c | 28 ++++++++++++++++++++++++++++ + 2 files changed, 57 insertions(+) + + Signed-off-by: Miroslav Rezanina + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index e26c93d..d8d74a3 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -246,6 +246,8 @@ static void pc_init_pci(QEMUMachineInitArgs *args) + initrd_filename, cpu_model, 1, 1); + } + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ ++ + static void pc_init_pci_1_4(QEMUMachineInitArgs *args) + { + has_pvpanic = false; +@@ -778,3 +780,30 @@ static void pc_machine_init(void) + } + + machine_init(pc_machine_init); ++ ++#endif /* Disabled for Red Hat Enterprise Linux */ ++ ++/* Red Hat Enterprise Linux machine types */ ++ ++static void pc_init_rhel700(QEMUMachineInitArgs *args) ++{ ++ pc_init_pci(args); ++} ++ ++static QEMUMachine pc_machine_rhel700 = { ++ .name = "pc-i440fx-rhel7.0.0", ++ .alias = "pc", ++ .desc = "RHEL 7.0.0 PC (i440FX + PIIX, 1996)", ++ .init = pc_init_rhel700, ++ .hot_add_cpu = pc_hot_add_cpu, ++ .max_cpus = 255, ++ .is_default = 1, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++static void rhel_machine_init(void) ++{ ++ qemu_register_machine(&pc_machine_rhel700); ++} ++ ++machine_init(rhel_machine_init); +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 7888dfe..9bcad00 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -208,6 +208,8 @@ static void pc_q35_init(QEMUMachineInitArgs *args) + } + } + ++#if 0 /* Disabled for Red Hat Enterprise Linux */ ++ + static void pc_q35_init_1_4(QEMUMachineInitArgs *args) + { + has_pvpanic = false; +@@ -244,3 +246,29 @@ static void pc_q35_machine_init(void) + } + + machine_init(pc_q35_machine_init); ++ ++#endif /* Disabled for Red Hat Enterprise Linux */ ++ ++/* Red Hat Enterprise Linux machine types */ ++ ++static void pc_q35_init_rhel700(QEMUMachineInitArgs *args) ++{ ++ pc_q35_init(args); ++} ++ ++static QEMUMachine pc_q35_machine_rhel700 = { ++ .name = "pc-q35-rhel7.0.0", ++ .alias = "q35", ++ .desc = "RHEL-7.0.0 PC (Q35 + ICH9, 2009)", ++ .init = pc_q35_init_rhel700, ++ .hot_add_cpu = pc_hot_add_cpu, ++ .max_cpus = 255, ++ DEFAULT_MACHINE_OPTIONS, ++}; ++ ++static void rhel_pc_q35_machine_init(void) ++{ ++ qemu_register_machine(&pc_q35_machine_rhel700); ++} ++ ++machine_init(rhel_pc_q35_machine_init); diff --git a/SOURCES/pc-rhel6-compat-enable-S3-S4-for-6-1-and-lower-machine-types.patch b/SOURCES/pc-rhel6-compat-enable-S3-S4-for-6-1-and-lower-machine-types.patch new file mode 100644 index 0000000..67bb9bb --- /dev/null +++ b/SOURCES/pc-rhel6-compat-enable-S3-S4-for-6-1-and-lower-machine-types.patch @@ -0,0 +1,67 @@ +From 66543c63c5be389816ab45cdc6eed93094345281 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:07:32 +0200 +Subject: pc: rhel6-compat: enable S3, S4 for 6.1 and lower machine types + +Message-id: <1374235471-27096-3-git-send-email-armbru@redhat.com> +Patchwork-id: 52605 +O-Subject: [RHEL-7 PATCH qemu-kvm 2/2] pc: rhel6-compat: enable S3, S4 for 6.1 and lower machine types +Bugzilla: 980840 +RH-Acked-by: Amit Shah +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Bandan Das +RH-Acked-by: Gleb Natapov + +From: Amit Shah + +We don't advertise S3/S4 support by default since RHEL6.2: + +RHEL6.4 has S3/S4 advertisement disabled by default (can be overriden by + the disable_s3 and disable_s4 properties of the PIIX4). +RHEL6.3 and 6.2 had S3/S4 advertisement disabled by default (can be + overriden by using the alternative bios-pm.bin SeaBIOS image). +RHEL6.1 and 6.0 had S3/S4 advertisement enabled by default. + +We need to ensure we keep that behaviour, so adjust the 6.1 and 6.0 +machine types to allow S3/S4. + +As a side note, migrating a RHEL6.0 or RHEL6.1 VM to a RHEL6.2 or 6.3 +host would have caused a guest-visible change, but we can do better +starting with 6.4, so let's do the right thing now. This, however, has +the potential to cause two guest-visible changes if a VM is migrated +like this: + +RHEL6.1 host --1--> RHEL6.3 host --2--> RHEL6.4 host + +After (1) above, guest will stop seeing S3/S4 advertised. After (2), +S3/S4 will be advertised again. + +Signed-off-by: Amit Shah +Signed-off-by: Michal Novotny +(cherry picked from commit ffc7768db990f0587b84e08e06095ed26f095fde) + +Picked from qemu-kvm-rhel6. + +Conflicts: + hw/pc.c +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 5ca2cc3..23002ce 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -998,6 +998,14 @@ static QEMUMachine pc_machine_rhel620 = { + #define PC_RHEL6_1_COMPAT \ + PC_RHEL6_2_COMPAT,\ + {\ ++ .driver = "PIIX4_PM",\ ++ .property = "disable_s3",\ ++ .value = "0",\ ++ },{\ ++ .driver = "PIIX4_PM",\ ++ .property = "disable_s4",\ ++ .value = "0",\ ++ },{\ + .driver = "qxl",\ + .property = "revision",\ + .value = stringify(2),\ diff --git a/SOURCES/qemu-ga.sysconfig b/SOURCES/qemu-ga.sysconfig new file mode 100644 index 0000000..f54018e --- /dev/null +++ b/SOURCES/qemu-ga.sysconfig @@ -0,0 +1,19 @@ +# This is a systemd environment file, not a shell script. +# It provides settings for "/lib/systemd/system/qemu-guest-agent.service". + +# Comma-separated blacklist of RPCs to disable, or empty list to enable all. +# +# You can get the list of RPC commands using "qemu-ga --blacklist='?'". +# There should be no spaces between commas and commands in the blacklist. +BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush + +# Fsfreeze hook script specification. +# +# FSFREEZE_HOOK_PATHNAME=/dev/null : disables the feature. +# +# FSFREEZE_HOOK_PATHNAME=/path/to/executable : enables the feature with the +# specified binary or shell script. +# +# FSFREEZE_HOOK_PATHNAME= : enables the feature with the +# default value (invoke "qemu-ga --help" to interrogate). +FSFREEZE_HOOK_PATHNAME=/etc/qemu-ga/fsfreeze-hook diff --git a/SOURCES/qemu-guest-agent.service b/SOURCES/qemu-guest-agent.service new file mode 100644 index 0000000..44b11cd --- /dev/null +++ b/SOURCES/qemu-guest-agent.service @@ -0,0 +1,18 @@ +[Unit] +Description=QEMU Guest Agent +BindsTo=dev-virtio\x2dports-org.qemu.guest_agent.0.device +After=dev-virtio\x2dports-org.qemu.guest_agent.0.device + +[Service] +UMask=0077 +EnvironmentFile=/etc/sysconfig/qemu-ga +ExecStart=/usr/bin/qemu-ga \ + --method=virtio-serial \ + --path=/dev/virtio-ports/org.qemu.guest_agent.0 \ + --blacklist=${BLACKLIST_RPC} \ + -F${FSFREEZE_HOOK_PATHNAME} +StandardError=syslog +Restart=always +RestartSec=0 + +[Install] diff --git a/SOURCES/qemu-kvm-Fix-migration-from-older-version-due-to-i8254-changes.patch b/SOURCES/qemu-kvm-Fix-migration-from-older-version-due-to-i8254-changes.patch new file mode 100644 index 0000000..4fa44e6 --- /dev/null +++ b/SOURCES/qemu-kvm-Fix-migration-from-older-version-due-to-i8254-changes.patch @@ -0,0 +1,64 @@ +From c9b5ec980523f458cf0e4cfd9f9d014e853f15aa Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:01:44 +0200 +Subject: qemu-kvm: Fix migration from older version due to i8254 changes + +Message-id: <1375201922-6794-2-git-send-email-armbru@redhat.com> +Patchwork-id: 52815 +O-Subject: [RHEL-7 PATCH v3 01/15] qemu-kvm: Fix migration from older version due to i8254 changes +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +Old qemu-kvm already contained an equivalent field to i8254's +irq_disabled. We therefore have to remove upstream's version restriction +here to allow migration from older versions. + +Signed-off-by: Jan Kiszka +Signed-off-by: Avi Kivity +(cherry picked from commit 81bdec908fb2be0ccaff1d4ee67956c509e440ad) + +Conflicts: + hw/i8254.c + +Picked from qemu-kvm-1.1. + +qemu-kvm-0.11.0 commit f69b3e2 added PITState member flags, added it +to migration section "i8254", and bumped its version to 2. + +qemu v0.12.0 commit 5122b43 ported i8254 to VMState, and also bumped +section version to 2. Version 2 now means different things in qemu +and qemu-kvm. + +This got merged into qemu-kvm-0.12.0 in commit f4f2edc. The merge +added migration of flags to qemu's code. Yet another version of +version 2. This is what we got in RHEL-6. + +qemu v1.1.0 commit ce967e2 added PITState member irq_disabled, +included it in migration section "i8254", and bumped its version to 3. +Because qemu's irq_disabled is compatible with qemu-kvm's flags, +qemu's version 3 is migration compatible with the latest instance of +qemu-kvm's version 2. + +When this got merged into qemu-kvm-1.1.0, it changed qemu-kvm's +version 2 to no longer include flags / irq_disabled. Commit 81bdec9 +reverted the change of version 2. + +We need to do the same to enable incoming migration from RHEL-6. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c +index 5342df4..f6f9d26 100644 +--- a/hw/timer/i8254_common.c ++++ b/hw/timer/i8254_common.c +@@ -275,7 +275,7 @@ static const VMStateDescription vmstate_pit_common = { + .pre_save = pit_dispatch_pre_save, + .post_load = pit_dispatch_post_load, + .fields = (VMStateField[]) { +- VMSTATE_UINT32_V(channels[0].irq_disabled, PITCommonState, 3), ++ VMSTATE_UINT32(channels[0].irq_disabled, PITCommonState), /* qemu-kvm's v2 had 'flags' here */ + VMSTATE_STRUCT_ARRAY(channels, PITCommonState, 3, 2, + vmstate_pit_channel, PITChannelState), + VMSTATE_INT64(channels[0].next_transition_time, diff --git a/SOURCES/qemu.binfmt b/SOURCES/qemu.binfmt new file mode 100644 index 0000000..63a58f4 --- /dev/null +++ b/SOURCES/qemu.binfmt @@ -0,0 +1,17 @@ +:qemu-i386:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-i386: +:qemu-i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-i386: +:qemu-alpha:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x26\x90:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-alpha: +:qemu-arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm: +:qemu-armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-armeb: +:qemu-sparc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sparc: +:qemu-ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-ppc: +:qemu-m68k:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x04:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-m68k: +:qemu-mips:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips: +:qemu-mipsel:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mipsel: +:qemu-mipsn32:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mipsn32: +:qemu-mipsn32el:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mipsn32el: +:qemu-mips64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips64: +:qemu-mips64el:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mips64el: +:qemu-sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-sh4: +:qemu-sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sh4eb: +:qemu-s390x:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x16:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-s390x: diff --git a/SOURCES/qxl-set-revision-to-1-for-rhel6-0-0.patch b/SOURCES/qxl-set-revision-to-1-for-rhel6-0-0.patch new file mode 100644 index 0000000..193694f --- /dev/null +++ b/SOURCES/qxl-set-revision-to-1-for-rhel6-0-0.patch @@ -0,0 +1,48 @@ +From e73cf28a72a02ce4f56471829a97c70dc4831a84 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:04:20 +0200 +Subject: qxl: set revision to 1 for rhel6.0.0 + +Message-id: <1375201922-6794-9-git-send-email-armbru@redhat.com> +Patchwork-id: 52818 +O-Subject: [RHEL-7 PATCH v3 08/15] qxl: set revision to 1 for rhel6.0.0 +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +From: Gerd Hoffmann + +bugzilla: #893344 - info qtree mismatch +upstream: No (rhel6.0.0 spice code base predates upstream merge, + so this compat property isn't relevant there). + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Michal Novotny +(cherry picked from commit 69f07de9ed3678198578fe036da202cbbca3f312) + +Conflicts: + hw/pc.c + +Picked from qemu-kvm-rhel6. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 9e96b79..57877e3 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -870,11 +870,11 @@ static QEMUMachine pc_machine_rhel700 = { + },{\ + .driver = "qxl",\ + .property = "revision",\ +- .value = stringify(3),\ ++ .value = stringify(1),\ + },{\ + .driver = "qxl-vga",\ + .property = "revision",\ +- .value = stringify(3),\ ++ .value = stringify(1),\ + },{\ + .driver = "VGA",\ + .property = "mmio",\ diff --git a/SOURCES/rename-man-page-to-qemu-kvm.patch b/SOURCES/rename-man-page-to-qemu-kvm.patch new file mode 100644 index 0000000..455695f --- /dev/null +++ b/SOURCES/rename-man-page-to-qemu-kvm.patch @@ -0,0 +1,25 @@ +From 97decea4dd4ad5017ba64b5921030032108fa574 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 11 Apr 2013 10:28:14 +0200 +Subject: Rename man page qemu(1) to qemu-kvm(1). + +Bugzilla: 893318 + +We rename qemu binary to qemu-kvm so we need to change man page name accordingly. + +Signed-off-by: Miroslav Rezanina + +diff --git a/Makefile b/Makefile +index 46439f8..dbd96d1 100644 +--- a/Makefile ++++ b/Makefile +@@ -306,7 +306,7 @@ install-doc: $(DOCS) + $(INSTALL_DATA) QMP/qmp-commands.txt "$(DESTDIR)$(qemu_docdir)" + ifdef CONFIG_POSIX + $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1" +- $(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1" ++ $(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1/qemu-kvm.1" + ifneq ($(TOOLS),) + $(INSTALL_DATA) qemu-img.1 "$(DESTDIR)$(mandir)/man1" + $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8" + diff --git a/SOURCES/target-i386-set-level-4-on-conroe-penryn-nehalem.patch b/SOURCES/target-i386-set-level-4-on-conroe-penryn-nehalem.patch new file mode 100644 index 0000000..42b4704 --- /dev/null +++ b/SOURCES/target-i386-set-level-4-on-conroe-penryn-nehalem.patch @@ -0,0 +1,94 @@ +commit 2b70aa524d7d12a8662cf9fcf9d6ca6d0264b5a6 +Author: Eduardo Habkost +Date: Thu Jun 27 15:57:43 2013 +0200 + + target-i386: Set level=4 on Conroe/Penryn/Nehalem + + RH-Author: Eduardo Habkost + Message-id: <1372348663-1706-4-git-send-email-ehabkost@redhat.com> + Patchwork-id: 52253 + O-Subject: [PATCH v2 3/3] target-i386: Set level=4 on Conroe/Penryn/Nehalem + Bugzilla: 861210 + RH-Acked-by: Bandan Das + RH-Acked-by: Markus Armbruster + RH-Acked-by: Paolo Bonzini + + Bugzilla: 861210 + (cherry picked from commit 6b11322e0f724eb0649fdc324a44288b783023ad) + + The CPUID level value on Conroe, Penryn, and Nehalem are too low. This + causes at least one known problem: the -smp "threads" option doesn't + work as expect if level is < 4, because thread count information is + provided to the guest on CPUID[EAX=4,ECX=2].EAX + + Signed-off-by: Eduardo Habkost + Signed-off-by: Andreas Färber + Signed-off-by: Eduardo Habkost + --- + include/hw/i386/pc.h | 12 ++++++++++++ + target-i386/cpu.c | 6 +++--- + 2 files changed, 15 insertions(+), 3 deletions(-) + + Signed-off-by: Miroslav Rezanina + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 4d6c9bf..6692728 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -192,13 +192,25 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t); + .property = "model",\ + .value = stringify(2),\ + },{\ ++ .driver = "Conroe-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ + .driver = "Penryn-" TYPE_X86_CPU,\ + .property = "model",\ + .value = stringify(2),\ + },{\ ++ .driver = "Penryn-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ ++ },{\ + .driver = "Nehalem-" TYPE_X86_CPU,\ + .property = "model",\ + .value = stringify(2),\ ++ },{\ ++ .driver = "Nehalem-" TYPE_X86_CPU,\ ++ .property = "level",\ ++ .value = stringify(2),\ + } + + #define PC_COMPAT_1_4 \ +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index 012819a..4b2da0d 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -669,7 +669,7 @@ static x86_def_t builtin_x86_defs[] = { + }, + { + .name = "Conroe", +- .level = 2, ++ .level = 4, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, + .model = 15, +@@ -691,7 +691,7 @@ static x86_def_t builtin_x86_defs[] = { + }, + { + .name = "Penryn", +- .level = 2, ++ .level = 4, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, + .model = 23, +@@ -714,7 +714,7 @@ static x86_def_t builtin_x86_defs[] = { + }, + { + .name = "Nehalem", +- .level = 2, ++ .level = 4, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, + .model = 26, diff --git a/SOURCES/target-i386-update-model-values-on-conroe-penryn-nehalem-cpu-models.patch b/SOURCES/target-i386-update-model-values-on-conroe-penryn-nehalem-cpu-models.patch new file mode 100644 index 0000000..0813fda --- /dev/null +++ b/SOURCES/target-i386-update-model-values-on-conroe-penryn-nehalem-cpu-models.patch @@ -0,0 +1,131 @@ +commit 891c6ba393323686ace2b5ecd9c35bbde6165f2a +Author: Eduardo Habkost +Date: Thu Jun 27 15:57:42 2013 +0200 + + target-i386: Update model values on Conroe/Penryn/Nehalem CPU models + + RH-Author: Eduardo Habkost + Message-id: <1372348663-1706-3-git-send-email-ehabkost@redhat.com> + Patchwork-id: 52252 + O-Subject: [PATCH v2 2/3] target-i386: Update model values on Conroe/Penryn/Nehalem CPU models + Bugzilla: 861210 + RH-Acked-by: Bandan Das + RH-Acked-by: Markus Armbruster + RH-Acked-by: Paolo Bonzini + + Bugzilla: 861210 + (cherry picked from commit ffce9ebbb69363dfe7605585cdad58ea3847edf4) + + The CPUID model values on Conroe, Penryn, and Nehalem are too + conservative and don't reflect the values found on real Conroe, Penryn, + and Nehalem CPUs. + + This causes at least one known problems: Windows XP disables sysenter + when (family == 6 && model <= 2), but Skype tries to use the sysenter + instruction anyway because it is reported as available on CPUID, making + it crash. + + This patch sets appropriate model values that correspond to real Conroe, + Penryn, and Nehalem CPUs. + + Signed-off-by: Eduardo Habkost + Signed-off-by: Andreas Färber + Signed-off-by: Eduardo Habkost + --- + hw/i386/pc_piix.c | 4 ++++ + hw/i386/pc_q35.c | 4 ++++ + include/hw/i386/pc.h | 16 ++++++++++++++++ + target-i386/cpu.c | 6 +++--- + 4 files changed, 27 insertions(+), 3 deletions(-) + + Signed-off-by: Miroslav Rezanina + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index d8d74a3..b52034d 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -338,6 +338,10 @@ static QEMUMachine pc_i440fx_machine_v1_5 = { + .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, + .is_default = 1, ++ .compat_props = (GlobalProperty[]) { ++ PC_COMPAT_1_5, ++ { /* end of list */ } ++ }, + DEFAULT_MACHINE_OPTIONS, + }; + +diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c +index 9bcad00..0092032 100644 +--- a/hw/i386/pc_q35.c ++++ b/hw/i386/pc_q35.c +@@ -224,6 +224,10 @@ static QEMUMachine pc_q35_machine_v1_5 = { + .init = pc_q35_init, + .hot_add_cpu = pc_hot_add_cpu, + .max_cpus = 255, ++ .compat_props = (GlobalProperty[]) { ++ PC_COMPAT_1_5, ++ { /* end of list */ } ++ }, + DEFAULT_MACHINE_OPTIONS, + }; + +diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h +index 0242fec..4d6c9bf 100644 +--- a/include/hw/i386/pc.h ++++ b/include/hw/i386/pc.h +@@ -186,7 +186,23 @@ int pvpanic_init(ISABus *bus); + + int e820_add_entry(uint64_t, uint64_t, uint32_t); + ++#define PC_COMPAT_1_5 \ ++ {\ ++ .driver = "Conroe-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Penryn-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ },{\ ++ .driver = "Nehalem-" TYPE_X86_CPU,\ ++ .property = "model",\ ++ .value = stringify(2),\ ++ } ++ + #define PC_COMPAT_1_4 \ ++ PC_COMPAT_1_5, \ + {\ + .driver = "scsi-hd",\ + .property = "discard_granularity",\ +diff --git a/target-i386/cpu.c b/target-i386/cpu.c +index ae8e682..012819a 100644 +--- a/target-i386/cpu.c ++++ b/target-i386/cpu.c +@@ -672,7 +672,7 @@ static x86_def_t builtin_x86_defs[] = { + .level = 2, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, +- .model = 2, ++ .model = 15, + .stepping = 3, + .features[FEAT_1_EDX] = + CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | +@@ -694,7 +694,7 @@ static x86_def_t builtin_x86_defs[] = { + .level = 2, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, +- .model = 2, ++ .model = 23, + .stepping = 3, + .features[FEAT_1_EDX] = + CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | +@@ -717,7 +717,7 @@ static x86_def_t builtin_x86_defs[] = { + .level = 2, + .vendor = CPUID_VENDOR_INTEL, + .family = 6, +- .model = 2, ++ .model = 26, + .stepping = 3, + .features[FEAT_1_EDX] = + CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | diff --git a/SOURCES/use-kvm-by-default.patch b/SOURCES/use-kvm-by-default.patch new file mode 100644 index 0000000..33eae0d --- /dev/null +++ b/SOURCES/use-kvm-by-default.patch @@ -0,0 +1,24 @@ +From 0eae445a8da5d9598af0c4419fa7fa94fc896f22 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 4 Apr 2013 11:00:41 +0200 +Subject: Use kvm by default + +Bugzilla: 906185 + +RHEL uses kvm accelerator by default, if available. + +Signed-off-by: Miroslav Rezanina + +diff --git a/vl.c b/vl.c +index 59dc0b4..6526c22 100644 +--- a/vl.c ++++ b/vl.c +@@ -2655,7 +2655,7 @@ static int configure_accelerator(void) + + if (p == NULL) { + /* Use the default "accelerator", tcg */ +- p = "tcg"; ++ p = "kvm:tcg"; + } + + while (!accel_initialised && *p != '\0') { diff --git a/SOURCES/vga-Default-vram_size_mb-to-16-like-prior-versions-of-RHEL.patch b/SOURCES/vga-Default-vram_size_mb-to-16-like-prior-versions-of-RHEL.patch new file mode 100644 index 0000000..7c8e8ca --- /dev/null +++ b/SOURCES/vga-Default-vram_size_mb-to-16-like-prior-versions-of-RHEL.patch @@ -0,0 +1,103 @@ +From c712cf32b457f67d926b3d54c015371d6683099b Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 08:02:53 +0200 +Subject: vga: Default .vram_size_mb to 16, like prior versions of RHEL + +Message-id: <1375201922-6794-5-git-send-email-armbru@redhat.com> +Patchwork-id: 52811 +O-Subject: [RHEL-7 PATCH v3 04/15] vga: Default .vram_size_mb to 16, like prior versions of RHEL +Bugzilla: 983991 +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Bandan Das +RH-Acked-by: Miroslav Rezanina + +A brief history of VGA video RAM sizes: + +* Initially, all VGA devices got 8 MiB of video RAM. + +* Upstream qemu-kvm kvm-62 (2008) doubled it to 16 MiB (commit + a7fe029). + +* RHEL-5 and RHEL-6 based on upstream qemu-kvm. + +* Upstream qemu v1.2.0 made the size configurable for "isa-vga", + "VGA", "vmware_vga" (commit 4a1e244), and "qxl-vga", "qxl" (commit + 13d1fd4), then doubled the default to 16 MiB (commit 9e56edc) for + the new machine type. Except "isa-vga" stayed at 8 MiB. + +* Upstream qemu-kvm merged this in qemu-kvm-1.2.0. Incompatible + change of default VGA video RAM back to 8 MiB for "isa-vga", + "isa-cirrus-vga", "cirrus-vga"[*]. + +* Upstream qemu v1.3.0 made the size configurable for + "isa-cirrus-vga", "cirrus-vga" (commit 19403a6). + +RHEL-7 bases on upstream qemu. To avoid qemu-kvm-1.2.0's incompatible +change, default video RAM size to 16 MiB for all VGA devices[**] and +RHEL machine types. + +[*] And the non-qdevified, memory-mapped VGA used by MIPS magnum and +pica61 machines, but these don't matter in qemu-kvm. + +[**] Except for the non-qdevified, memory-mapped VGA. + +Signed-off-by: Markus Armbruster + +diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c +index 64bfe2b..fa8eae2 100644 +--- a/hw/display/cirrus_vga.c ++++ b/hw/display/cirrus_vga.c +@@ -2924,7 +2924,7 @@ static int vga_initfn(ISADevice *dev) + + static Property isa_cirrus_vga_properties[] = { + DEFINE_PROP_UINT32("vgamem_mb", struct ISACirrusVGAState, +- cirrus_vga.vga.vram_size_mb, 8), ++ cirrus_vga.vga.vram_size_mb, 16), + DEFINE_PROP_END_OF_LIST(), + }; + +@@ -2986,7 +2986,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) + + static Property pci_vga_cirrus_properties[] = { + DEFINE_PROP_UINT32("vgamem_mb", struct PCICirrusVGAState, +- cirrus_vga.vga.vram_size_mb, 8), ++ cirrus_vga.vga.vram_size_mb, 16), + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c +index 9e63b69..2f34ee3 100644 +--- a/hw/display/vga-isa.c ++++ b/hw/display/vga-isa.c +@@ -75,7 +75,7 @@ static int vga_initfn(ISADevice *dev) + } + + static Property vga_isa_properties[] = { +- DEFINE_PROP_UINT32("vgamem_mb", ISAVGAState, state.vram_size_mb, 8), ++ DEFINE_PROP_UINT32("vgamem_mb", ISAVGAState, state.vram_size_mb, 16), + DEFINE_PROP_END_OF_LIST(), + }; + +diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c +index 96f6bf9..5d57a76 100644 +--- a/hw/i386/pc_piix.c ++++ b/hw/i386/pc_piix.c +@@ -888,18 +888,6 @@ static QEMUMachine pc_machine_rhel700 = { + .property = "param_change",\ + .value = "off",\ + },{\ +- .driver = "VGA",\ +- .property = "vgamem_mb",\ +- .value = stringify(8),\ +- },{\ +- .driver = "qxl-vga",\ +- .property = "vgamem_mb",\ +- .value = stringify(8),\ +- },{\ +- .driver = "qxl",\ +- .property = "vgamem_mb",\ +- .value = stringify(8),\ +- },{\ + .driver = "virtio-blk-pci",\ + .property = "config-wce",\ + .value = "off",\ diff --git a/SOURCES/vmdk-Allow-reading-variable-size-descriptor-files.patch b/SOURCES/vmdk-Allow-reading-variable-size-descriptor-files.patch new file mode 100644 index 0000000..f26db11 --- /dev/null +++ b/SOURCES/vmdk-Allow-reading-variable-size-descriptor-files.patch @@ -0,0 +1,77 @@ +From 99ad3018eac4089569f5ccbc84737dce8e92384f Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 09:54:07 +0200 +Subject: vmdk: Allow reading variable size descriptor files + +Message-id: <1374654509-5535-3-git-send-email-famz@redhat.com> +Patchwork-id: 52674 +O-Subject: [RHEL-7 qemu-kvm PATCH 2/5] vmdk: Allow reading variable size descriptor files +Bugzilla: 836675 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody + +From: Evgeny Budilovsky + +the hard-coded 2k buffer on the stack won't allow reading big descriptor +files which can be generated when storing big images. For example 500G +vmdk splitted to 2G chunks. + +Signed-off-by: Evgeny Budilovsky +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Kevin Wolf +(cherry picked from commit 0bed087df24c7b3fae366f239b9d150de3309416) +Signed-off-by: Fam Zheng + +diff --git a/block/vmdk.c b/block/vmdk.c +index ee50a73..65ae011 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -722,27 +722,40 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, + int64_t desc_offset) + { + int ret; +- char buf[2048]; ++ char *buf = NULL; + char ct[128]; + BDRVVmdkState *s = bs->opaque; ++ int64_t size; + +- ret = bdrv_pread(bs->file, desc_offset, buf, sizeof(buf)); ++ size = bdrv_getlength(bs->file); ++ if (size < 0) { ++ return -EINVAL; ++ } ++ ++ size = MIN(size, 1 << 20); /* avoid unbounded allocation */ ++ buf = g_malloc0(size + 1); ++ ++ ret = bdrv_pread(bs->file, desc_offset, buf, size); + if (ret < 0) { +- return ret; ++ goto exit; + } +- buf[2047] = '\0'; + if (vmdk_parse_description(buf, "createType", ct, sizeof(ct))) { +- return -EMEDIUMTYPE; ++ ret = -EMEDIUMTYPE; ++ goto exit; + } + if (strcmp(ct, "monolithicFlat") && + strcmp(ct, "twoGbMaxExtentSparse") && + strcmp(ct, "twoGbMaxExtentFlat")) { + fprintf(stderr, + "VMDK: Not supported image type \"%s\""".\n", ct); +- return -ENOTSUP; ++ ret = -ENOTSUP; ++ goto exit; + } + s->desc_offset = 0; +- return vmdk_parse_extents(buf, bs, bs->file->filename); ++ ret = vmdk_parse_extents(buf, bs, bs->file->filename); ++exit: ++ g_free(buf); ++ return ret; + } + + static int vmdk_open(BlockDriverState *bs, QDict *options, int flags) diff --git a/SOURCES/vmdk-refuse-to-open-higher-version-than-supported.patch b/SOURCES/vmdk-refuse-to-open-higher-version-than-supported.patch new file mode 100644 index 0000000..52b60f4 --- /dev/null +++ b/SOURCES/vmdk-refuse-to-open-higher-version-than-supported.patch @@ -0,0 +1,46 @@ +From 06989fa543551f16e41b0218e10125df31ccbc0b Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Wed, 31 Jul 2013 09:54:55 +0200 +Subject: vmdk: refuse to open higher version than supported + +Message-id: <1374654509-5535-4-git-send-email-famz@redhat.com> +Patchwork-id: 52675 +O-Subject: [RHEL-7 qemu-kvm PATCH 3/5] vmdk: refuse to open higher version than supported +Bugzilla: 836675 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Paolo Bonzini +RH-Acked-by: Jeffrey Cody +RH-Acked-by: Michal Novotny + +Refuse to open higher version for safety. + +Although we try to be compatible with published VMDK spec, VMware has +newer version from ESXi 5.1 exported OVF/OVA, which we have no knowledge +what's changed in it. And it is very likely to have more new versions in +the future, so it's not safe to open them blindly. + +Signed-off-by: Fam Zheng +Signed-off-by: Stefan Hajnoczi +(cherry picked from commit 96c51eb5e46af2312b33f745ad72acb20e799aea) +Signed-off-by: Fam Zheng + +diff --git a/block/vmdk.c b/block/vmdk.c +index 65ae011..975e1d4 100644 +--- a/block/vmdk.c ++++ b/block/vmdk.c +@@ -561,6 +561,15 @@ static int vmdk_open_vmdk4(BlockDriverState *bs, + header = footer.header; + } + ++ if (le32_to_cpu(header.version) >= 3) { ++ char buf[64]; ++ snprintf(buf, sizeof(buf), "VMDK version %d", ++ le32_to_cpu(header.version)); ++ qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, ++ bs->device_name, "vmdk", buf); ++ return -ENOTSUP; ++ } ++ + l1_entry_sectors = le32_to_cpu(header.num_gtes_per_gte) + * le64_to_cpu(header.granularity); + if (l1_entry_sectors == 0) { diff --git a/SPECS/qemu-kvm.spec b/SPECS/qemu-kvm.spec new file mode 100644 index 0000000..c13d876 --- /dev/null +++ b/SPECS/qemu-kvm.spec @@ -0,0 +1,10971 @@ +# Build time setting +%define rhev 0 + +%bcond_with guest_agent # disabled + +%global SLOF_gittagdate 20120731 + +%global have_usbredir 1 + +%ifarch %{ix86} x86_64 + %global have_seccomp 1 + %global have_spice 1 +%else + %global have_usbredir 0 +%endif + +%ifnarch s390 s390x + %global have_librdma 1 + %global have_tcmalloc 1 +%endif + +%ifnarch x86_64 + %global build_only_sub 1 +%endif + +%ifarch %{ix86} + %global kvm_target i386 +%endif +%ifarch x86_64 + %global kvm_target x86_64 +%endif +%ifarch %{power64} + %global kvm_target ppc64 +%endif +%ifarch s390x s390 + %global kvm_target s390x +%endif +%ifarch ppc + %global kvm_target ppc +%endif +%ifarch aarch64 + %global kvm_target aarch64 +%endif + +#Versions of various parts: + +%define pkgname qemu-kvm +%define rhel_suffix -rhel +%define rhev_suffix -rhev + +# Setup for RHEL/RHEV package handling +# We need to define tree suffixes: +# - pkgsuffix: used for package name +# - extra_provides_suffix: used for dependency checking of other packages +# - conflicts_suffix: used to prevent installation of both RHEL and RHEV + +%if %{rhev} + %global pkgsuffix %{rhev_suffix} + %global extra_provides_suffix %{nil} + %global conflicts_suffix %{rhel_suffix} + %global obsoletes_version 15:0-0 +%else + %global pkgsuffix %{nil} + %global extra_provides_suffix %{rhel_suffix} + %global conflicts_suffix %{rhev_suffix} +%endif + +# Macro to properly setup RHEL/RHEV conflict handling +%define rhel_rhev_conflicts() \ +Conflicts: %1%{conflicts_suffix} \ +Provides: %1%{extra_provides_suffix} = %{epoch}:%{version}-%{release} \ + %if 0%{?obsoletes_version:1} \ +Obsoletes: %1 < %{obsoletes_version} \ + %endif + +Summary: QEMU is a machine emulator and virtualizer +Name: %{pkgname}%{?pkgsuffix} +Version: 1.5.3 +Release: 170%{?dist} +# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped +Epoch: 10 +License: GPLv2 and GPLv2+ and CC-BY +Group: Development/Tools +URL: http://www.qemu.org/ +ExclusiveArch: x86_64 +Requires: seabios-bin >= 1.7.2.2-5 +Requires: sgabios-bin +Requires: seavgabios-bin +Requires: ipxe-roms-qemu +Requires: %{pkgname}-common%{?pkgsuffix} = %{epoch}:%{version}-%{release} + %if 0%{?have_seccomp:1} +Requires: libseccomp >= 1.0.0 + %endif +%if 0%{!?build_only_sub:1} +Requires: glusterfs-api >= 3.6.0 +%endif +Requires: libusbx >= 1.0.19 +# OOM killer breaks builds with parallel make on s390(x) +%ifarch s390 s390x + %define _smp_mflags %{nil} +%endif + +Source0: http://wiki.qemu-project.org/download/qemu-%{version}.tar.bz2 + +Source1: qemu.binfmt +# Loads kvm kernel modules at boot +# Not needed anymore - required only for kvm on non i86 archs +# where we do not ubuild kvm +# Source2: kvm.modules +# Creates /dev/kvm +Source3: 80-kvm.rules +# KSM control scripts +Source4: ksm.service +Source5: ksm.sysconfig +Source6: ksmctl.c +Source7: ksmtuned.service +Source8: ksmtuned +Source9: ksmtuned.conf +Source10: qemu-guest-agent.service +Source11: 99-qemu-guest-agent.rules +Source12: bridge.conf +Source13: qemu-ga.sysconfig +Source14: rhel6-virtio.rom +Source15: rhel6-pcnet.rom +Source16: rhel6-rtl8139.rom +Source17: rhel6-ne2k_pci.rom +Source18: bios-256k.bin +Source19: README.rhel6-gpxe-source +Source20: rhel6-e1000.rom +Source21: sample_images.tar + +# libcacard build fixes (heading upstream) +Patch1: 0000-libcacard-fix-missing-symbols-in-libcacard.so.patch + +# Fix migration from qemu-kvm 1.2 to qemu 1.3 +#Patch3: 0002-Fix-migration-from-qemu-kvm-1.2.patch + +# Flow control series +#Patch4: 0100-char-Split-out-tcp-socket-close-code-in-a-separate-f.patch +#Patch5: 0101-char-Add-a-QemuChrHandlers-struct-to-initialise-char.patch +#Patch6: 0102-iohandlers-Add-enable-disable_write_fd_handler-funct.patch +#Patch7: 0103-char-Add-framework-for-a-write-unblocked-callback.patch +#Patch8: 0104-char-Update-send_all-to-handle-nonblocking-chardev-w.patch +#Patch9: 0105-char-Equip-the-unix-tcp-backend-to-handle-nonblockin.patch +#Patch10: 0106-char-Throttle-when-host-connection-is-down.patch +#Patch11: 0107-virtio-console-Enable-port-throttling-when-chardev-i.patch +#Patch12: 0108-spice-qemu-char.c-add-throttling.patch +#Patch13: 0109-spice-qemu-char.c-remove-intermediate-buffer.patch +#Patch14: 0110-usb-redir-Add-flow-control-support.patch +#Patch15: 0111-char-Disable-write-callback-if-throttled-chardev-is-.patch +#Patch16: 0112-hw-virtio-serial-bus-replay-guest-open-on-destinatio.patch + +# Migration compatibility +#Patch17: configure-add-enable-migration-from-qemu-kvm.patch +#Patch18: acpi_piix4-condition-on-minimum_version_id.patch +#Patch19: i8254-fix-migration-from-qemu-kvm-1.1.patch +#Patch20: pc_piix-add-compat-handling-for-qemu-kvm-vga-mem-size.patch +#Patch21: qxl-add-rom_size-compat-property.patch +#Patch22: docs-fix-generating-qemu-doc.html-with-texinfo5.patch +#Patch23: rtc-test-Fix-test-failures-with-recent-glib.patch +#Patch24: iscsi-look-for-pkg-config-file-too.patch +#Patch25: tcg-fix-occcasional-tcg-broken-problem.patch +#Patch26: qxl-better-vga-init-in-enter_vga_mode.patch + +# Enable/disable supported features +#Patch27: make-usb-devices-configurable.patch +#Patch28: fix-scripts-make_device_config-sh.patch +Patch29: disable-unsupported-usb-devices.patch +Patch30: disable-unsupported-emulated-scsi-devices.patch +Patch31: disable-various-unsupported-devices.patch +Patch32: disable-unsupported-audio-devices.patch +Patch33: disable-unsupported-emulated-network-devices.patch +Patch34: use-kvm-by-default.patch +Patch35: disable-hpet-device.patch +Patch36: rename-man-page-to-qemu-kvm.patch +Patch37: change-path-from-qemu-to-qemu-kvm.patch + +# Fix CPUID model/level values on Conroe/Penryn/Nehalem CPU models +Patch38: pc-replace-upstream-machine-types-by-rhel7-types.patch +Patch39: target-i386-update-model-values-on-conroe-penryn-nehalem-cpu-models.patch +Patch40: target-i386-set-level-4-on-conroe-penryn-nehalem.patch + +# RHEL guest( sata disk ) can not boot up (rhbz #981723) +#Patch41: ahci-Fix-FLUSH-command.patch +# Kill the "use flash device for BIOS unless KVM" misfeature (rhbz #963280) +Patch42: pc-Disable-the-use-flash-device-for-BIOS-unless-KVM-misfeature.patch +# Provide RHEL-6 machine types (rhbz #983991) +Patch43: qemu-kvm-Fix-migration-from-older-version-due-to-i8254-changes.patch +Patch44: pc-Add-machine-type-rhel6-0-0.patch +Patch45: pc-Drop-superfluous-RHEL-6-compat_props.patch +Patch46: vga-Default-vram_size_mb-to-16-like-prior-versions-of-RHEL.patch +Patch47: pc-Drop-RHEL-6-USB-device-compat_prop-full-path.patch +Patch48: pc-Drop-RHEL-6-compat_props-virtio-serial-pci-max_ports-vectors.patch +Patch49: pc-Drop-RHEL-6-compat_props-apic-kvm-apic-vapic.patch +Patch50: qxl-set-revision-to-1-for-rhel6-0-0.patch +Patch51: pc-Give-rhel6-0-0-a-kvmclock.patch +Patch52: pc-Add-machine-type-rhel6-1-0.patch +Patch53: pc-Add-machine-type-rhel6-2-0.patch +Patch54: pc-Add-machine-type-rhel6-3-0.patch +Patch55: pc-Add-machine-type-rhel6-4-0.patch +Patch56: pc-Add-machine-type-rhel6-5-0.patch +Patch57: e1000-Keep-capabilities-list-bit-on-for-older-RHEL-machine-types.patch +# Change s3/s4 default to "disable". (rhbz #980840) +Patch58: misc-disable-s3-s4-by-default.patch +Patch59: pc-rhel6-compat-enable-S3-S4-for-6-1-and-lower-machine-types.patch +# Support Virtual Memory Disk Format in qemu (rhbz #836675) +Patch60: vmdk-Allow-reading-variable-size-descriptor-files.patch +Patch61: vmdk-refuse-to-open-higher-version-than-supported.patch +#Patch62: vmdk-remove-wrong-calculation-of-relative-path.patch +Patch63: block-add-block-driver-read-only-whitelist.patch + +# query mem info from monitor would cause qemu-kvm hang [RHEL-7] (rhbz #970047) +Patch64: kvm-char-io_channel_send-don-t-lose-written-bytes.patch +Patch65: kvm-monitor-maintain-at-most-one-G_IO_OUT-watch.patch +# Throttle-down guest to help with live migration convergence (backport to RHEL7.0) (rhbz #985958) +Patch66: kvm-misc-Introduce-async_run_on_cpu.patch +Patch67: kvm-misc-Add-auto-converge-migration-capability.patch +Patch68: kvm-misc-Force-auto-convegence-of-live-migration.patch +# disable (for now) EFI-enabled roms (rhbz #962563) +Patch69: kvm-misc-Disable-EFI-enabled-roms.patch +# qemu-kvm "vPMU passthrough" mode breaks migration, shouldn't be enabled by default (rhbz #853101) +Patch70: kvm-target-i386-Pass-X86CPU-object-to-cpu_x86_find_by_name.patch +Patch71: kvm-target-i386-Disable-PMU-CPUID-leaf-by-default.patch +Patch72: kvm-pc-set-compat-pmu-property-for-rhel6-x-machine-types.patch +# Remove pending watches after virtserialport unplug (rhbz #992900) +# Patch73: kvm-virtio-console-Use-exitfn-for-virtserialport-too.patch +# Containment of error when an SR-IOV device encounters an error... (rhbz #984604) +Patch74: kvm-linux-headers-Update-to-v3-10-rc5.patch +Patch75: kvm-vfio-QEMU-AER-Qemu-changes-to-support-AER-for-VFIO-PCI-devices.patch + +# update qemu-ga config & init script in RHEL7 wrt. fsfreeze hook (rhbz 969942) +Patch76: kvm-misc-qga-fsfreeze-main-hook-adapt-to-RHEL-7-RH-only.patch +# RHEL7 does not have equivalent functionality for __com.redhat_qxl_screendump (rhbz 903910) +Patch77: kvm-misc-add-qxl_screendump-monitor-command.patch +# SEP flag behavior for CPU models of RHEL6 machine types should be compatible (rhbz 960216) +Patch78: kvm-pc_piix-disable-CPUID_SEP-for-6-4-0-machine-types-and-below.patch +# crash command can not read the dump-guest-memory file when paging=false [RHEL-7] (rhbz 981582) +Patch79: kvm-dump-Move-stubs-into-libqemustub-a.patch +Patch80: kvm-cpu-Turn-cpu_paging_enabled-into-a-CPUState-hook.patch +Patch81: kvm-memory_mapping-Move-MemoryMappingList-typedef-to-qemu-typedefs-h.patch +Patch82: kvm-cpu-Turn-cpu_get_memory_mapping-into-a-CPUState-hook.patch +Patch83: kvm-dump-Abstract-dump_init-with-cpu_synchronize_all_states.patch +Patch84: kvm-memory_mapping-Improve-qemu_get_guest_memory_mapping-error-reporting.patch +Patch85: kvm-dump-clamp-guest-provided-mapping-lengths-to-ramblock-sizes.patch +Patch86: kvm-dump-introduce-GuestPhysBlockList.patch +Patch87: kvm-dump-populate-guest_phys_blocks.patch +Patch88: kvm-dump-rebase-from-host-private-RAMBlock-offsets-to-guest-physical-addresses.patch +# RHEL 7 qemu-kvm fails to build on F19 host due to libusb deprecated API (rhbz 996469) +Patch89: kvm-usb-host-libusb-Fix-building-with-libusb-git-master-code.patch +# Live migration support in virtio-blk-data-plane (rhbz 995030) +#Patch90: kvm-dataplane-sync-virtio-c-and-vring-c-virtqueue-state.patch +#Patch91: kvm-virtio-clear-signalled_used_valid-when-switching-from-dataplane.patch +#Patch92: kvm-vhost-clear-signalled_used_valid-on-vhost-stop.patch +Patch93: kvm-migration-notify-migration-state-before-starting-thread.patch +Patch94: kvm-dataplane-enable-virtio-blk-x-data-plane-on-live-migration.patch +#Patch95: kvm-dataplane-refuse-to-start-if-device-is-already-in-use.patch +# qemu-img resize can execute successfully even input invalid syntax (rhbz 992935) +Patch96: kvm-qemu-img-Error-out-for-excess-arguments.patch +# For bz#964304 - Windows guest agent service failed to be started +Patch97: kvm-osdep-add-qemu_get_local_state_pathname.patch +# For bz#964304 - Windows guest agent service failed to be started +Patch98: kvm-qga-determine-default-state-dir-and-pidfile-dynamica.patch +# For bz#964304 - Windows guest agent service failed to be started +Patch99: kvm-configure-don-t-save-any-fixed-local_statedir-for-wi.patch +# For bz#964304 - Windows guest agent service failed to be started +Patch100: kvm-qga-create-state-directory-on-win32.patch +# For bz#964304 - Windows guest agent service failed to be started +Patch101: kvm-qga-save-state-directory-in-ga_install_service-RHEL-.patch +# For bz#964304 - Windows guest agent service failed to be started +Patch102: kvm-Makefile-create-.-var-run-when-installing-the-POSIX-.patch +# For bz#980782 - kernel_irqchip defaults to off instead of on without -machine +Patch103: kvm-qemu-option-Fix-qemu_opts_find-for-null-id-arguments.patch +# For bz#980782 - kernel_irqchip defaults to off instead of on without -machine +Patch104: kvm-qemu-option-Fix-qemu_opts_set_defaults-for-corner-ca.patch +# For bz#980782 - kernel_irqchip defaults to off instead of on without -machine +Patch105: kvm-vl-New-qemu_get_machine_opts.patch +# For bz#980782 - kernel_irqchip defaults to off instead of on without -machine +Patch106: kvm-Fix-machine-options-accel-kernel_irqchip-kvm_shadow_.patch +# For bz#980782 - kernel_irqchip defaults to off instead of on without -machine +Patch107: kvm-microblaze-Fix-latent-bug-with-default-DTB-lookup.patch +# For bz#980782 - kernel_irqchip defaults to off instead of on without -machine +Patch108: kvm-Simplify-machine-option-queries-with-qemu_get_machin.patch +# For bz#838170 - Add live migration support for USB [xhci, usb-uas] +Patch109: kvm-pci-add-VMSTATE_MSIX.patch +# For bz#838170 - Add live migration support for USB [xhci, usb-uas] +Patch110: kvm-xhci-add-XHCISlot-addressed.patch +# For bz#838170 - Add live migration support for USB [xhci, usb-uas] +Patch111: kvm-xhci-add-xhci_alloc_epctx.patch +# For bz#838170 - Add live migration support for USB [xhci, usb-uas] +Patch112: kvm-xhci-add-xhci_init_epctx.patch +# For bz#838170 - Add live migration support for USB [xhci, usb-uas] +Patch113: kvm-xhci-add-live-migration-support.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch114: kvm-pc-set-level-xlevel-correctly-on-486-qemu32-CPU-mode.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch115: kvm-pc-Remove-incorrect-rhel6.x-compat-model-value-for-C.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch116: kvm-pc-rhel6.x-has-x2apic-present-on-Conroe-Penryn-Nehal.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch117: kvm-pc-set-compat-CPUID-0x80000001-.EDX-bits-on-Westmere.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch118: kvm-pc-Remove-PCLMULQDQ-from-Westmere-on-rhel6.x-machine.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch119: kvm-pc-SandyBridge-rhel6.x-compat-fixes.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch120: kvm-pc-Haswell-doesn-t-have-rdtscp-on-rhel6.x.patch +# For bz#972433 - "INFO: rcu_sched detected stalls" after RHEL7 kvm vm migrated +Patch121: kvm-i386-fix-LAPIC-TSC-deadline-timer-save-restore.patch +# For bz#996258 - boot guest with maxcpu=255 successfully but actually max number of vcpu is 160 +Patch122: kvm-all.c-max_cpus-should-not-exceed-KVM-vcpu-limit.patch +# For bz#906937 - [Hitachi 7.0 FEAT][QEMU]Add a time stamp to error message (*) +Patch123: kvm-add-timestamp-to-error_report.patch +# For bz#906937 - [Hitachi 7.0 FEAT][QEMU]Add a time stamp to error message (*) +Patch124: kvm-Convert-stderr-message-calling-error_get_pretty-to-e.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch125: kvm-block-package-preparation-code-in-qmp_transaction.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch126: kvm-block-move-input-parsing-code-in-qmp_transaction.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch127: kvm-block-package-committing-code-in-qmp_transaction.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch128: kvm-block-package-rollback-code-in-qmp_transaction.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch129: kvm-block-make-all-steps-in-qmp_transaction-as-callback.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch130: kvm-blockdev-drop-redundant-proto_drv-check.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch131: kvm-block-Don-t-parse-protocol-from-file.filename.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch132: kvm-Revert-block-Disable-driver-specific-options-for-1.5.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch133: kvm-qcow2-Add-refcount-update-reason-to-all-callers.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch134: kvm-qcow2-Options-to-enable-discard-for-freed-clusters.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch135: kvm-qcow2-Batch-discards.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch136: kvm-block-Always-enable-discard-on-the-protocol-level.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch137: kvm-qapi.py-Avoid-code-duplication.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch138: kvm-qapi.py-Allow-top-level-type-reference-for-command-d.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch139: kvm-qapi-schema-Use-BlockdevSnapshot-type-for-blockdev-s.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch140: kvm-qapi-types.py-Implement-base-for-unions.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch141: kvm-qapi-visit.py-Split-off-generate_visit_struct_fields.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch142: kvm-qapi-visit.py-Implement-base-for-unions.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch143: kvm-docs-Document-QAPI-union-types.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch144: kvm-qapi-Add-visitor-for-implicit-structs.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch145: kvm-qapi-Flat-unions-with-arbitrary-discriminator.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch146: kvm-qapi-Add-consume-argument-to-qmp_input_get_object.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch147: kvm-qapi.py-Maintain-a-list-of-union-types.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch148: kvm-qapi-qapi-types.py-native-list-support.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch149: kvm-qapi-Anonymous-unions.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch150: kvm-block-Allow-driver-option-on-the-top-level.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch151: kvm-QemuOpts-Add-qemu_opt_unset.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch152: kvm-blockdev-Rename-I-O-throttling-options-for-QMP.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch153: kvm-qemu-iotests-Update-051-reference-output.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch154: kvm-blockdev-Rename-readonly-option-to-read-only.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch155: kvm-blockdev-Split-up-cache-option.patch +# For bz#1005818 - qcow2: Backport discard command line options +Patch156: kvm-qcow2-Use-dashes-instead-of-underscores-in-options.patch +# For bz#1006959 - qemu-iotests false positives +Patch157: kvm-qemu-iotests-filter-QEMU-version-in-monitor-banner.patch +# For bz#1006959 - qemu-iotests false positives +Patch158: kvm-tests-set-MALLOC_PERTURB_-to-expose-memory-bugs.patch +# For bz#1006959 - qemu-iotests false positives +Patch159: kvm-qemu-iotests-Whitespace-cleanup.patch +# For bz#1006959 - qemu-iotests false positives +Patch160: kvm-qemu-iotests-Fixed-test-case-026.patch +# For bz#1006959 - qemu-iotests false positives +Patch161: kvm-qemu-iotests-Fix-test-038.patch +# For bz#1006959 - qemu-iotests false positives +Patch162: kvm-qemu-iotests-Remove-lsi53c895a-tests-from-051.patch +# For bz#974887 - the screen of guest fail to display correctly when use spice + qxl driver +Patch163: kvm-spice-fix-display-initialization.patch +# For bz#921983 - Disable or remove emulated network devices that we will not support +Patch164: kvm-Remove-i82550-network-card-emulation.patch +# For bz#903914 - Disable or remove usb related devices that we will not support +Patch165: kvm-Remove-usb-wacom-tablet.patch +# For bz#903914 - Disable or remove usb related devices that we will not support +Patch166: kvm-Disable-usb-uas.patch +# For bz#947441 - HPET device must be disabled +Patch168: kvm-Remove-no-hpet-option.patch +# For bz#1002286 - Disable or remove device isa-parallel +Patch169: kvm-Disable-isa-parallel.patch +# For bz#949514 - fail to passthrough the USB3.0 stick to windows guest with xHCI controller under pc-i440fx-1.4 +Patch170: kvm-xhci-implement-warm-port-reset.patch +# For bz#953304 - Serial number of some USB devices must be fixed for older RHEL machine types +Patch171: kvm-usb-add-serial-bus-property.patch +# For bz#953304 - Serial number of some USB devices must be fixed for older RHEL machine types +Patch172: kvm-rhel6-compat-usb-serial-numbers.patch +# For bz#995866 - fix vmdk support to ESX images +Patch173: kvm-vmdk-fix-comment-for-vmdk_co_write_zeroes.patch +# For bz#1007226 - Introduce bs->zero_beyond_eof +Patch174: kvm-gluster-Add-image-resize-support.patch +# For bz#1007226 - Introduce bs->zero_beyond_eof +Patch175: kvm-block-Introduce-bs-zero_beyond_eof.patch +# For bz#1007226 - Introduce bs->zero_beyond_eof +Patch176: kvm-block-Produce-zeros-when-protocols-reading-beyond-en.patch +# For bz#1007226 - Introduce bs->zero_beyond_eof +Patch177: kvm-gluster-Abort-on-AIO-completion-failure.patch +# For bz#1001131 - Disable or remove device usb-bt-dongle +Patch178: kvm-Preparation-for-usb-bt-dongle-conditional-build.patch +# For bz#1001131 - Disable or remove device usb-bt-dongle +Patch179: kvm-Remove-dev-bluetooth.c-dependency-from-vl.c.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch180: kvm-exec-Fix-Xen-RAM-allocation-with-unusual-options.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch181: kvm-exec-Clean-up-fall-back-when-mem-path-allocation-fai.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch182: kvm-exec-Reduce-ifdeffery-around-mem-path.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch183: kvm-exec-Simplify-the-guest-physical-memory-allocation-h.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch184: kvm-exec-Drop-incorrect-dead-S390-code-in-qemu_ram_remap.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch185: kvm-exec-Clean-up-unnecessary-S390-ifdeffery.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch186: kvm-exec-Don-t-abort-when-we-can-t-allocate-guest-memory.patch +# For bz#1009328 - [RFE] Nicer error report when qemu-kvm can't allocate guest RAM +Patch187: kvm-pc_sysfw-Fix-ISA-BIOS-init-for-ridiculously-big-flas.patch +# For bz#903918 - Disable or remove emulated SCSI devices we will not support +Patch188: kvm-virtio-scsi-Make-type-virtio-scsi-common-abstract.patch +# For bz#1009491 - move qga logfiles to new /var/log/qemu-ga/ directory [RHEL-7] +Patch189: kvm-qga-move-logfiles-to-new-directory-for-easier-SELinu.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch190: kvm-target-i386-add-cpu64-rhel6-CPU-model.patch +# For bz#903889 - The value of steal time in "top" command always is "0.0% st" after guest migration +Patch191: kvm-fix-steal-time-MSR-vmsd-callback-to-proper-opaque-ty.patch +# For bz#995866 - fix vmdk support to ESX images +Patch192: kvm-vmdk-Make-VMDK3Header-and-VmdkGrainMarker-QEMU_PACKE.patch +# For bz#995866 - fix vmdk support to ESX images +Patch193: kvm-vmdk-use-unsigned-values-for-on-disk-header-fields.patch +# For bz#995866 - fix vmdk support to ESX images +Patch194: kvm-qemu-iotests-add-poke_file-utility-function.patch +# For bz#995866 - fix vmdk support to ESX images +Patch195: kvm-qemu-iotests-add-empty-test-case-for-vmdk.patch +# For bz#995866 - fix vmdk support to ESX images +Patch196: kvm-vmdk-check-granularity-field-in-opening.patch +# For bz#995866 - fix vmdk support to ESX images +Patch197: kvm-vmdk-check-l2-table-size-when-opening.patch +# For bz#995866 - fix vmdk support to ESX images +Patch198: kvm-vmdk-check-l1-size-before-opening-image.patch +# For bz#995866 - fix vmdk support to ESX images +Patch199: kvm-vmdk-use-heap-allocation-for-whole_grain.patch +# For bz#995866 - fix vmdk support to ESX images +Patch200: kvm-vmdk-rename-num_gtes_per_gte-to-num_gtes_per_gt.patch +# For bz#995866 - fix vmdk support to ESX images +Patch201: kvm-vmdk-Move-l1_size-check-into-vmdk_add_extent.patch +# For bz#995866 - fix vmdk support to ESX images +Patch202: kvm-vmdk-fix-L1-and-L2-table-size-in-vmdk3-open.patch +# For bz#995866 - fix vmdk support to ESX images +Patch203: kvm-vmdk-support-vmfsSparse-files.patch +# For bz#995866 - fix vmdk support to ESX images +Patch204: kvm-vmdk-support-vmfs-files.patch +# For bz#1005036 - When using “-vga qxl” together with “-display vnc=:5” or “-display sdl” qemu displays pixel garbage +Patch205: kvm-qxl-fix-local-renderer.patch +# For bz#1008987 - pvticketlocks: add kvm feature kvm_pv_unhalt +Patch206: kvm-linux-headers-update-to-kernel-3.10.0-26.el7.patch +# For bz#1008987 - pvticketlocks: add kvm feature kvm_pv_unhalt +Patch207: kvm-target-i386-add-feature-kvm_pv_unhalt.patch +# For bz#1010881 - backport vcpu soft limit warning +Patch208: kvm-warn-if-num-cpus-is-greater-than-num-recommended.patch +# For bz#1007222 - QEMU core dumped when do hot-unplug virtio serial port during transfer file between host to guest with virtio serial through TCP socket +Patch209: kvm-char-move-backends-io-watch-tag-to-CharDriverState.patch +# For bz#1007222 - QEMU core dumped when do hot-unplug virtio serial port during transfer file between host to guest with virtio serial through TCP socket +Patch210: kvm-char-use-common-function-to-disable-callbacks-on-cha.patch +# For bz#1007222 - QEMU core dumped when do hot-unplug virtio serial port during transfer file between host to guest with virtio serial through TCP socket +Patch211: kvm-char-remove-watch-callback-on-chardev-detach-from-fr.patch +# For bz#1017049 - qemu-img refuses to open the vmdk format image its created +Patch212: kvm-block-don-t-lose-data-from-last-incomplete-sector.patch +# For bz#1017049 - qemu-img refuses to open the vmdk format image its created +Patch213: kvm-vmdk-fix-cluster-size-check-for-flat-extents.patch +# For bz#1017049 - qemu-img refuses to open the vmdk format image its created +Patch214: kvm-qemu-iotests-add-monolithicFlat-creation-test-to-059.patch +# For bz#1001604 - usb hub doesn't work properly (win7 sees downstream port #1 only). +Patch215: kvm-xhci-fix-endpoint-interval-calculation.patch +# For bz#1001604 - usb hub doesn't work properly (win7 sees downstream port #1 only). +Patch216: kvm-xhci-emulate-intr-endpoint-intervals-correctly.patch +# For bz#1001604 - usb hub doesn't work properly (win7 sees downstream port #1 only). +Patch217: kvm-xhci-reset-port-when-disabling-slot.patch +# For bz#1001604 - usb hub doesn't work properly (win7 sees downstream port #1 only). +Patch218: kvm-Revert-usb-hub-report-status-changes-only-once.patch +# For bz#1004290 - Use model 6 for qemu64 and intel cpus +Patch219: kvm-target-i386-Set-model-6-on-qemu64-qemu32-CPU-models.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch220: kvm-pc-rhel6-doesn-t-have-APIC-on-pentium-CPU-models.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch221: kvm-pc-RHEL-6-had-x2apic-set-on-Opteron_G-123.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch222: kvm-pc-RHEL-6-don-t-have-RDTSCP.patch +# For bz#1009285 - -device usb-storage,serial=... crashes with SCSI generic drive +Patch223: kvm-scsi-Fix-scsi_bus_legacy_add_drive-scsi-generic-with.patch +# For bz#1004175 - '-sandbox on' option cause qemu-kvm process hang +Patch224: kvm-seccomp-fine-tuning-whitelist-by-adding-times.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch225: kvm-block-add-bdrv_write_zeroes.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch226: kvm-block-raw-add-bdrv_co_write_zeroes.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch227: kvm-rdma-export-qemu_fflush.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch228: kvm-block-migration-efficiently-encode-zero-blocks.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch229: kvm-Fix-real-mode-guest-migration.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch230: kvm-Fix-real-mode-guest-segments-dpl-value-in-savevm.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch231: kvm-migration-add-autoconvergence-documentation.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch232: kvm-migration-send-total-time-in-QMP-at-completed-stage.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch233: kvm-migration-don-t-use-uninitialized-variables.patch +# For bz#921465 - Migration can not finished even the "remaining ram" is already 0 kb +Patch234: kvm-pc-drop-external-DSDT-loading.patch +# For bz#954195 - RHEL machines <=6.4 should not use mixemu +Patch235: kvm-hda-codec-refactor-common-definitions-into-a-header-.patch +# For bz#954195 - RHEL machines <=6.4 should not use mixemu +Patch236: kvm-hda-codec-make-mixemu-selectable-at-runtime.patch +# For bz#954195 - RHEL machines <=6.4 should not use mixemu +Patch237: kvm-audio-remove-CONFIG_MIXEMU-configure-option.patch +# For bz#954195 - RHEL machines <=6.4 should not use mixemu +Patch238: kvm-pc_piix-disable-mixer-for-6.4.0-machine-types-and-be.patch +# For bz#994414 - hot-unplug chardev with pty backend caused qemu Segmentation fault +Patch239: kvm-chardev-fix-pty_chr_timer.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch240: kvm-qemu-socket-zero-initialize-SocketAddress.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch241: kvm-qemu-socket-drop-pointless-allocation.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch242: kvm-qemu-socket-catch-monitor_get_fd-failures.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch243: kvm-qemu-char-check-optional-fields-using-has_.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch244: kvm-error-add-error_setg_file_open-helper.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch245: kvm-qemu-char-use-more-specific-error_setg_-variants.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch246: kvm-qemu-char-print-notification-to-stderr.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch247: kvm-qemu-char-fix-documentation-for-telnet-wait-socket-f.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch248: kvm-qemu-char-don-t-leak-opts-on-error.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch249: kvm-qemu-char-use-ChardevBackendKind-in-CharDriver.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch250: kvm-qemu-char-minor-mux-chardev-fixes.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch251: kvm-qemu-char-add-chardev-mux-support.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch252: kvm-qemu-char-report-udp-backend-errors.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch253: kvm-qemu-socket-don-t-leak-opts-on-error.patch +# For bz#922010 - RFE: support hotplugging chardev & serial ports +Patch254: kvm-chardev-handle-qmp_chardev_add-KIND_MUX-failure.patch +# For bz#1019474 - RHEL-7 can't load piix4_pm migration section from RHEL-6.5 +Patch255: kvm-acpi-piix4-Enable-qemu-kvm-compatibility-mode.patch +# For bz#1004743 - XSAVE migration format not compatible between RHEL6 and RHEL7 +Patch256: kvm-target-i386-support-loading-of-cpu-xsave-subsection.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch257: kvm-vl-Clean-up-parsing-of-boot-option-argument.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch258: kvm-qemu-option-check_params-is-now-unused-drop-it.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch259: kvm-vl-Fix-boot-order-and-once-regressions-and-related-b.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch260: kvm-vl-Rename-boot_devices-to-boot_order-for-consistency.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch261: kvm-pc-Make-no-fd-bootchk-stick-across-boot-order-change.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch262: kvm-doc-Drop-ref-to-Bochs-from-no-fd-bootchk-documentati.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch263: kvm-libqtest-Plug-fd-and-memory-leaks-in-qtest_quit.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch264: kvm-libqtest-New-qtest_end-to-go-with-qtest_start.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch265: kvm-qtest-Don-t-reset-on-qtest-chardev-connect.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch266: kvm-boot-order-test-New-covering-just-PC-for-now.patch +# For bz#1019352 - qemu-guest-agent: "guest-fsfreeze-freeze" deadlocks if the guest have mounted disk images +Patch267: kvm-qemu-ga-execute-fsfreeze-freeze-in-reverse-order-of-.patch +# For bz#989608 - [7.0 FEAT] qemu runtime support for librbd backend (ceph) +Patch268: kvm-rbd-link-and-load-librbd-dynamically.patch +# For bz#989608 - [7.0 FEAT] qemu runtime support for librbd backend (ceph) +Patch269: kvm-rbd-Only-look-for-qemu-specific-copy-of-librbd.so.1.patch +# For bz#989677 - [HP 7.0 FEAT]: Increase KVM guest supported memory to 4TiB +Patch270: kvm-seabios-paravirt-allow-more-than-1TB-in-x86-guest.patch +# For bz#1006468 - libiscsi initiator name should use vm UUID +Patch271: kvm-scsi-prefer-UUID-to-VM-name-for-the-initiator-name.patch +# For bz#928867 - Virtual PMU support during live migration - qemu-kvm +Patch272: kvm-target-i386-remove-tabs-from-target-i386-cpu.h.patch +# For bz#928867 - Virtual PMU support during live migration - qemu-kvm +Patch273: kvm-migrate-vPMU-state.patch +# For bz#1009993 - RHEL7 guests do not issue fdatasyncs on virtio-blk +Patch274: kvm-blockdev-do-not-default-cache.no-flush-to-true.patch +# For bz#1009993 - RHEL7 guests do not issue fdatasyncs on virtio-blk +Patch275: kvm-virtio-blk-do-not-relay-a-previous-driver-s-WCE-conf.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch276: kvm-rng-random-use-error_setg_file_open.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch277: kvm-block-mirror_complete-use-error_setg_file_open.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch278: kvm-blockdev-use-error_setg_file_open.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch279: kvm-cpus-use-error_setg_file_open.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch280: kvm-dump-qmp_dump_guest_memory-use-error_setg_file_open.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch281: kvm-savevm-qmp_xen_save_devices_state-use-error_setg_fil.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch282: kvm-block-bdrv_reopen_prepare-don-t-use-QERR_OPEN_FILE_F.patch +# For bz#907743 - qemu-ga: empty reason string for OpenFileFailed error +Patch283: kvm-qerror-drop-QERR_OPEN_FILE_FAILED-macro.patch +# For bz#787463 - disable ivshmem (was: [Hitachi 7.0 FEAT] Support ivshmem (Inter-VM Shared Memory)) +Patch284: kvm-rhel-Drop-ivshmem-device.patch +# For bz#1001144 - Disable or remove device usb-host-linux +Patch285: kvm-usb-remove-old-usb-host-code.patch +# For bz#997702 - Migration from RHEL6.5 host to RHEL7.0 host is failed with virtio-net device +Patch286: kvm-Fix-migration-from-rhel6.5-to-rhel7-with-ipxe.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch287: kvm-pc-Don-t-prematurely-explode-QEMUMachineInitArgs.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch288: kvm-pc-Don-t-explode-QEMUMachineInitArgs-into-local-vari.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch289: kvm-smbios-Normalize-smbios_entry_add-s-error-handling-t.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch290: kvm-smbios-Convert-to-QemuOpts.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch291: kvm-smbios-Improve-diagnostics-for-conflicting-entries.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch292: kvm-smbios-Make-multiple-smbios-type-accumulate-sanely.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch293: kvm-smbios-Factor-out-smbios_maybe_add_str.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch294: kvm-hw-Pass-QEMUMachine-to-its-init-method.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch295: kvm-smbios-Set-system-manufacturer-product-version-by-de.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch296: kvm-smbios-Decouple-system-product-from-QEMUMachine.patch +# For bz#994490 - Set per-machine-type SMBIOS strings +Patch297: kvm-rhel-SMBIOS-type-1-branding.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch298: kvm-cow-make-reads-go-at-a-decent-speed.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch299: kvm-cow-make-writes-go-at-a-less-indecent-speed.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch300: kvm-cow-do-not-call-bdrv_co_is_allocated.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch301: kvm-block-keep-bs-total_sectors-up-to-date-even-for-grow.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch302: kvm-block-make-bdrv_co_is_allocated-static.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch303: kvm-block-do-not-use-total_sectors-in-bdrv_co_is_allocat.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch304: kvm-block-remove-bdrv_is_allocated_above-bdrv_co_is_allo.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch305: kvm-block-expect-errors-from-bdrv_co_is_allocated.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch306: kvm-block-Fix-compiler-warning-Werror-uninitialized.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch307: kvm-qemu-img-always-probe-the-input-image-for-allocated-.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch308: kvm-block-make-bdrv_has_zero_init-return-false-for-copy-.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch309: kvm-block-introduce-bdrv_get_block_status-API.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch310: kvm-block-define-get_block_status-return-value.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch311: kvm-block-return-get_block_status-data-and-flags-for-for.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch312: kvm-block-use-bdrv_has_zero_init-to-return-BDRV_BLOCK_ZE.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch313: kvm-block-return-BDRV_BLOCK_ZERO-past-end-of-backing-fil.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch314: kvm-qemu-img-add-a-map-subcommand.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch315: kvm-docs-qapi-document-qemu-img-map.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch316: kvm-raw-posix-return-get_block_status-data-and-flags.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch317: kvm-raw-posix-report-unwritten-extents-as-zero.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch318: kvm-block-add-default-get_block_status-implementation-fo.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch319: kvm-block-look-for-zero-blocks-in-bs-file.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch320: kvm-qemu-img-fix-invalid-JSON.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch321: kvm-block-get_block_status-set-pnum-0-on-error.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch322: kvm-block-get_block_status-avoid-segfault-if-there-is-no.patch +# For bz#989646 - Support backup vendors in qemu to access qcow disk readonly +Patch323: kvm-block-get_block_status-avoid-redundant-callouts-on-r.patch +# For bz#1025740 - Saving VM state on qcow2 images results in VM state corruption +Patch324: kvm-qcow2-Restore-total_sectors-value-in-save_vmstate.patch +# For bz#1025740 - Saving VM state on qcow2 images results in VM state corruption +Patch325: kvm-qcow2-Unset-zero_beyond_eof-in-save_vmstate.patch +# For bz#1025740 - Saving VM state on qcow2 images results in VM state corruption +Patch326: kvm-qemu-iotests-Test-for-loading-VM-state-from-qcow2.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch327: kvm-apic-rename-apic-specific-bitopts.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch328: kvm-hw-import-bitmap-operations-in-qdev-core-header.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch329: kvm-qemu-help-Sort-devices-by-logical-functionality.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch330: kvm-devices-Associate-devices-to-their-logical-category.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch331: kvm-Mostly-revert-qemu-help-Sort-devices-by-logical-func.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch332: kvm-qdev-monitor-Group-device_add-help-and-info-qdm-by-c.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch333: kvm-qdev-Replace-no_user-by-cannot_instantiate_with_devi.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch334: kvm-sysbus-Set-cannot_instantiate_with_device_add_yet.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch335: kvm-cpu-Document-why-cannot_instantiate_with_device_add_.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch336: kvm-apic-Document-why-cannot_instantiate_with_device_add.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch337: kvm-pci-host-Consistently-set-cannot_instantiate_with_de.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch338: kvm-ich9-Document-why-cannot_instantiate_with_device_add.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch339: kvm-piix3-piix4-Clean-up-use-of-cannot_instantiate_with_.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch340: kvm-vt82c686-Clean-up-use-of-cannot_instantiate_with_dev.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch341: kvm-isa-Clean-up-use-of-cannot_instantiate_with_device_a.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch342: kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it-c.patch +# For bz#1001216 - Fix no_user or provide another way make devices unavailable with -device / device_add +Patch343: kvm-rhel-Revert-unwanted-cannot_instantiate_with_device_.patch +# For bz#1001076 - Disable or remove other block devices we won't support +Patch344: kvm-rhel-Revert-downstream-changes-to-unused-default-con.patch +# For bz#1001076 - Disable or remove other block devices we won't support +Patch345: kvm-rhel-Drop-cfi.pflash01-and-isa-ide-device.patch +# For bz#1001088 - Disable or remove display devices we won't support +Patch346: kvm-rhel-Drop-isa-vga-device.patch +# For bz#1001088 - Disable or remove display devices we won't support +Patch347: kvm-rhel-Make-isa-cirrus-vga-device-unavailable.patch +# For bz#1001123 - Disable or remove device ccid-card-emulated +Patch348: kvm-rhel-Make-ccid-card-emulated-device-unavailable.patch +# For bz#1005695 - QEMU should hide CPUID.0Dh values that it does not support +Patch349: kvm-x86-fix-migration-from-pre-version-12.patch +# For bz#1005695 - QEMU should hide CPUID.0Dh values that it does not support +Patch350: kvm-x86-cpuid-reconstruct-leaf-0Dh-data.patch +# For bz#920021 - qemu-kvm segment fault when reboot guest after hot unplug device with option ROM +Patch351: kvm-kvmvapic-Catch-invalid-ROM-size.patch +# For bz#920021 - qemu-kvm segment fault when reboot guest after hot unplug device with option ROM +Patch352: kvm-kvmvapic-Enter-inactive-state-on-hardware-reset.patch +# For bz#920021 - qemu-kvm segment fault when reboot guest after hot unplug device with option ROM +Patch353: kvm-kvmvapic-Clear-also-physical-ROM-address-when-enteri.patch +# For bz#987582 - Initial Virtualization Differentiation for RHEL7 (Live snapshots) +Patch354: kvm-block-optionally-disable-live-block-jobs.patch +# For bz#1022392 - Disable live-storage-migration in qemu-kvm (migrate -b/-i) +Patch355: kvm-migration-disable-live-block-migration-b-i-for-rhel-.patch +# For bz#987583 - Initial Virtualization Differentiation for RHEL7 (Ceph enablement) +Patch356: kvm-Build-ceph-rbd-only-for-rhev.patch +# For bz#1001180 - Disable or remove devices pci-serial-2x, pci-serial-4x +Patch357: kvm-rhel-Make-pci-serial-2x-and-pci-serial-4x-device-una.patch +# For bz#980415 - libusbx: error [_open_sysfs_attr] open /sys/bus/usb/devices/4-1/bConfigurationValue failed ret=-1 errno=2 +Patch358: kvm-usb-host-libusb-Fix-reset-handling.patch +# For bz#980383 - The usb3.0 stick can't be returned back to host after shutdown guest with usb3.0 pass-through +Patch359: kvm-usb-host-libusb-Configuration-0-may-be-a-valid-confi.patch +# For bz#980383 - The usb3.0 stick can't be returned back to host after shutdown guest with usb3.0 pass-through +Patch360: kvm-usb-host-libusb-Detach-kernel-drivers-earlier.patch +# For bz#1010858 - Disable unused human monitor commands +Patch361: kvm-monitor-Remove-pci_add-command-for-Red-Hat-Enterpris.patch +# For bz#1010858 - Disable unused human monitor commands +Patch362: kvm-monitor-Remove-pci_del-command-for-Red-Hat-Enterpris.patch +# For bz#1010858 - Disable unused human monitor commands +Patch363: kvm-monitor-Remove-usb_add-del-commands-for-Red-Hat-Ente.patch +# For bz#1010858 - Disable unused human monitor commands +Patch364: kvm-monitor-Remove-host_net_add-remove-for-Red-Hat-Enter.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch365: kvm-fw_cfg-add-API-to-find-FW-cfg-object.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch366: kvm-pvpanic-use-FWCfgState-explicitly.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch367: kvm-pvpanic-initialization-cleanup.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch368: kvm-pvpanic-fix-fwcfg-for-big-endian-hosts.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch369: kvm-hw-misc-make-pvpanic-known-to-user.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch370: kvm-gdbstub-do-not-restart-crashed-guest.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch371: kvm-gdbstub-fix-for-commit-87f25c12bfeaaa0c41fb857713bbc.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch372: kvm-vl-allow-cont-from-panicked-state.patch +# For bz#990601 - pvpanic device triggers guest bugs when present by default +Patch373: kvm-hw-misc-don-t-create-pvpanic-device-by-default.patch +# For bz#1007176 - Add VPC and VHDX file formats as supported in qemu-kvm (read-only) +Patch374: kvm-block-vhdx-add-migration-blocker.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch375: kvm-block-drop-bs_snapshots-global-variable.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch376: kvm-block-move-snapshot-code-in-block.c-to-block-snapsho.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch377: kvm-block-fix-vvfat-error-path-for-enable_write_target.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch378: kvm-block-Bugfix-format-and-snapshot-used-in-drive-optio.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch379: kvm-iscsi-use-bdrv_new-instead-of-stack-structure.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch380: kvm-qcow2-Add-corrupt-bit.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch381: kvm-qcow2-Metadata-overlap-checks.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch382: kvm-qcow2-Employ-metadata-overlap-checks.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch383: kvm-qcow2-refcount-Move-OFLAG_COPIED-checks.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch384: kvm-qcow2-refcount-Repair-OFLAG_COPIED-errors.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch385: kvm-qcow2-refcount-Repair-shared-refcount-blocks.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch386: kvm-qcow2_check-Mark-image-consistent.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch387: kvm-qemu-iotests-Overlapping-cluster-allocations.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch388: kvm-w32-Fix-access-to-host-devices-regression.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch389: kvm-add-qemu-img-convert-n-option-skip-target-volume-cre.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch390: kvm-bdrv-Use-Error-for-opening-images.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch391: kvm-bdrv-Use-Error-for-creating-images.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch392: kvm-block-Error-parameter-for-open-functions.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch393: kvm-block-Error-parameter-for-create-functions.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch394: kvm-qemu-img-create-Emit-filename-on-error.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch395: kvm-qcow2-Use-Error-parameter.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch396: kvm-qemu-iotests-Adjustments-due-to-error-propagation.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch397: kvm-block-raw-Employ-error-parameter.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch398: kvm-block-raw-win32-Employ-error-parameter.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch399: kvm-blkdebug-Employ-error-parameter.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch400: kvm-blkverify-Employ-error-parameter.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch401: kvm-block-raw-posix-Employ-error-parameter.patch +# For bz#1026524 - Backport block layer error parameter patches +Patch402: kvm-block-raw-win32-Always-use-errno-in-hdev_open.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch403: kvm-qmp-Documentation-for-BLOCK_IMAGE_CORRUPTED.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch404: kvm-qcow2-Correct-snapshots-size-for-overlap-check.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch405: kvm-qcow2-CHECK_OFLAG_COPIED-is-obsolete.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch406: kvm-qcow2-Correct-endianness-in-overlap-check.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch407: kvm-qcow2-Switch-L1-table-in-a-single-sequence.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch408: kvm-qcow2-Use-pread-for-inactive-L1-in-overlap-check.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch409: kvm-qcow2-Remove-wrong-metadata-overlap-check.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch410: kvm-qcow2-Use-negated-overflow-check-mask.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch411: kvm-qcow2-Make-overlap-check-mask-variable.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch412: kvm-qcow2-Add-overlap-check-options.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch413: kvm-qcow2-Array-assigning-options-to-OL-check-bits.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch414: kvm-qcow2-Add-more-overlap-check-bitmask-macros.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch415: kvm-qcow2-Evaluate-overlap-check-options.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch416: kvm-qapi-types.py-Split-off-generate_struct_fields.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch417: kvm-qapi-types.py-Fix-enum-struct-sizes-on-i686.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch418: kvm-qapi-types-visit.py-Pass-whole-expr-dict-for-structs.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch419: kvm-qapi-types-visit.py-Inheritance-for-structs.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch420: kvm-blockdev-Introduce-DriveInfo.enable_auto_del.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch421: kvm-Implement-qdict_flatten.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch422: kvm-blockdev-blockdev-add-QMP-command.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch423: kvm-blockdev-Separate-ID-generation-from-DriveInfo-creat.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch424: kvm-blockdev-Pass-QDict-to-blockdev_init.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch425: kvm-blockdev-Move-parsing-of-media-option-to-drive_init.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch426: kvm-blockdev-Move-parsing-of-if-option-to-drive_init.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch427: kvm-blockdev-Moving-parsing-of-geometry-options-to-drive.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch428: kvm-blockdev-Move-parsing-of-boot-option-to-drive_init.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch429: kvm-blockdev-Move-bus-unit-index-processing-to-drive_ini.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch430: kvm-blockdev-Move-virtio-blk-device-creation-to-drive_in.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch431: kvm-blockdev-Remove-IF_-check-for-read-only-blockdev_ini.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch432: kvm-qemu-iotests-Check-autodel-behaviour-for-device_del.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch433: kvm-blockdev-Remove-media-parameter-from-blockdev_init.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch434: kvm-blockdev-Don-t-disable-COR-automatically-with-blockd.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch435: kvm-blockdev-blockdev_init-error-conversion.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch436: kvm-sd-Avoid-access-to-NULL-BlockDriverState.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch437: kvm-blockdev-fix-cdrom-read_only-flag.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch438: kvm-block-fix-backing-file-overriding.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch439: kvm-block-Disable-BDRV_O_COPY_ON_READ-for-the-backing-fi.patch +# For bz#978402 - [RFE] Add discard support to qemu-kvm layer +Patch440: kvm-block-Don-t-copy-backing-file-name-on-error.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch441: kvm-qemu-iotests-Try-creating-huge-qcow2-image.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch442: kvm-block-move-qmp-and-info-dump-related-code-to-block-q.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch443: kvm-block-dump-snapshot-and-image-info-to-specified-outp.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch444: kvm-block-add-snapshot-info-query-function-bdrv_query_sn.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch445: kvm-block-add-image-info-query-function-bdrv_query_image.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch446: kvm-qmp-add-ImageInfo-in-BlockDeviceInfo-used-by-query-b.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch447: kvm-vmdk-Implement-.bdrv_has_zero_init.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch448: kvm-qemu-iotests-Add-basic-ability-to-use-binary-sample-.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch449: kvm-qemu-iotests-Quote-TEST_IMG-and-TEST_DIR-usage.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch450: kvm-qemu-iotests-fix-test-case-059.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch451: kvm-qapi-Add-ImageInfoSpecific-type.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch452: kvm-block-Add-bdrv_get_specific_info.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch453: kvm-block-qapi-Human-readable-ImageInfoSpecific-dump.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch454: kvm-qcow2-Add-support-for-ImageInfoSpecific.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch455: kvm-qemu-iotests-Discard-specific-info-in-_img_info.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch456: kvm-qemu-iotests-Additional-info-from-qemu-img-info.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch457: kvm-vmdk-convert-error-code-to-use-errp.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch458: kvm-vmdk-refuse-enabling-zeroed-grain-with-flat-images.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch459: kvm-qapi-Add-optional-field-compressed-to-ImageInfo.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch460: kvm-vmdk-Only-read-cid-from-image-file-when-opening.patch +# For bz#980771 - [RFE] qemu-img should be able to tell the compat version of a qcow2 image +Patch461: kvm-vmdk-Implment-bdrv_get_specific_info.patch +# For bz#1025877 - pci-assign lacks MSI affinity support +Patch462: kvm-pci-assign-Add-MSI-affinity-support.patch +# For bz#1025877 - pci-assign lacks MSI affinity support +Patch463: kvm-Fix-potential-resource-leak-missing-fclose.patch +# For bz#1025877 - pci-assign lacks MSI affinity support +Patch464: kvm-pci-assign-remove-the-duplicate-function-name-in-deb.patch +# For bz#922589 - e1000/rtl8139: qemu mac address can not be changed via set the hardware address in guest +Patch465: kvm-net-update-nic-info-during-device-reset.patch +# For bz#922589 - e1000/rtl8139: qemu mac address can not be changed via set the hardware address in guest +Patch466: kvm-net-e1000-update-network-information-when-macaddr-is.patch +# For bz#922589 - e1000/rtl8139: qemu mac address can not be changed via set the hardware address in guest +Patch467: kvm-net-rtl8139-update-network-information-when-macaddr-.patch +# For bz#1026689 - virtio-net: macaddr is reset but network info of monitor isn't updated +Patch468: kvm-virtio-net-fix-up-HMP-NIC-info-string-on-reset.patch +# For bz#1025477 - VFIO MSI affinity +Patch469: kvm-vfio-pci-VGA-quirk-update.patch +# For bz#1025477 - VFIO MSI affinity +Patch470: kvm-vfio-pci-Add-support-for-MSI-affinity.patch +# For bz#1026550 - QEMU VFIO update ROM loading code +Patch471: kvm-vfio-pci-Test-device-reset-capabilities.patch +# For bz#1026550 - QEMU VFIO update ROM loading code +Patch472: kvm-vfio-pci-Lazy-PCI-option-ROM-loading.patch +# For bz#1026550 - QEMU VFIO update ROM loading code +Patch473: kvm-vfio-pci-Cleanup-error_reports.patch +# For bz#1026550 - QEMU VFIO update ROM loading code +Patch474: kvm-vfio-pci-Add-dummy-PCI-ROM-write-accessor.patch +# For bz#1026550 - QEMU VFIO update ROM loading code +Patch475: kvm-vfio-pci-Fix-endian-issues-in-vfio_pci_size_rom.patch +# For bz#1025472 - Nvidia GPU device assignment - qemu-kvm - bus reset support +Patch476: kvm-linux-headers-Update-to-include-vfio-pci-hot-reset-s.patch +# For bz#1025472 - Nvidia GPU device assignment - qemu-kvm - bus reset support +Patch477: kvm-vfio-pci-Implement-PCI-hot-reset.patch +# For bz#1025474 - Nvidia GPU device assignment - qemu-kvm - NoSnoop support +Patch478: kvm-linux-headers-Update-for-KVM-VFIO-device.patch +# For bz#1025474 - Nvidia GPU device assignment - qemu-kvm - NoSnoop support +Patch479: kvm-vfio-pci-Make-use-of-new-KVM-VFIO-device.patch +# For bz#995866 - fix vmdk support to ESX images +Patch480: kvm-vmdk-Fix-vmdk_parse_extents.patch +# For bz#995866 - fix vmdk support to ESX images +Patch481: kvm-vmdk-fix-VMFS-extent-parsing.patch +# For bz#922589 - e1000/rtl8139: qemu mac address can not be changed via set the hardware address in guest +#Patch482: kvm-e1000-rtl8139-update-HMP-NIC-when-every-bit-is-writt.patch +# Patch 482 removed as it has to be discussed and should not be applied yet +# For bz#1005039 - add compat property to disable ctrl_mac_addr feature +Patch483: kvm-don-t-disable-ctrl_mac_addr-feature-for-6.5-machine-.patch +# For bz#848203 - MAC Programming for virtio over macvtap - qemu-kvm support +Patch484: kvm-qapi-qapi-visit.py-fix-list-handling-for-union-types.patch +# For bz#848203 - MAC Programming for virtio over macvtap - qemu-kvm support +Patch485: kvm-qapi-qapi-visit.py-native-list-support.patch +# For bz#848203 - MAC Programming for virtio over macvtap - qemu-kvm support +Patch486: kvm-qapi-enable-generation-of-native-list-code.patch +# For bz#848203 - MAC Programming for virtio over macvtap - qemu-kvm support +Patch487: kvm-net-add-support-of-mac-programming-over-macvtap-in-Q.patch +# For bz#1029539 - Machine type rhel6.1.0 and balloon device cause migration fail from RHEL6.5 host to RHEL7.0 host +Patch488: kvm-pc-drop-virtio-balloon-pci-event_idx-compat-property.patch +# For bz#922463 - qemu-kvm core dump when virtio-net multi queue guest hot-unpluging vNIC +Patch489: kvm-virtio-net-only-delete-bh-that-existed.patch +# For bz#1029370 - [whql][netkvm][wlk] Virtio-net device handles RX multicast filtering improperly +Patch490: kvm-virtio-net-broken-RX-filtering-logic-fixed.patch +# For bz#1025138 - Read/Randread/Randrw performance regression +Patch491: kvm-block-Avoid-unecessary-drv-bdrv_getlength-calls.patch +# For bz#1025138 - Read/Randread/Randrw performance regression +Patch492: kvm-block-Round-up-total_sectors.patch +# For bz#1016952 - qemu-kvm man page guide wrong path for qemu-bridge-helper +Patch493: kvm-doc-fix-hardcoded-helper-path.patch +# For bz#971933 - QMP: add RHEL's vendor extension prefix +Patch494: kvm-introduce-RFQDN_REDHAT-RHEL-6-7-fwd.patch +# For bz#971938 - QMP: Add error reason to BLOCK_IO_ERROR event +Patch495: kvm-error-reason-in-BLOCK_IO_ERROR-BLOCK_JOB_ERROR-event.patch +# For bz#895041 - QMP: forward port I/O error debug messages +Patch496: kvm-improve-debuggability-of-BLOCK_IO_ERROR-BLOCK_JOB_ER.patch +# For bz#1029275 - Guest only find one 82576 VF(function 0) while use multifunction +Patch497: kvm-vfio-pci-Fix-multifunction-on.patch +# For bz#1026739 - qcow2: Switch to compat=1.1 default for new images +Patch498: kvm-qcow2-Change-default-for-new-images-to-compat-1.1.patch +# For bz#1026739 - qcow2: Switch to compat=1.1 default for new images +Patch499: kvm-qcow2-change-default-for-new-images-to-compat-1.1-pa.patch +# For bz#1032862 - virtio-rng-egd: repeatedly read same random data-block w/o considering the buffer offset +Patch500: kvm-rng-egd-offset-the-point-when-repeatedly-read-from-t.patch +# For bz#1007334 - CVE-2013-4344 qemu-kvm: qemu: buffer overflow in scsi_target_emulate_report_luns [rhel-7.0] +Patch501: kvm-scsi-Allocate-SCSITargetReq-r-buf-dynamically-CVE-20.patch +# For bz#1033810 - memory leak in using object_get_canonical_path() +Patch502: kvm-virtio-net-fix-the-memory-leak-in-rxfilter_notify.patch +# For bz#1033810 - memory leak in using object_get_canonical_path() +Patch503: kvm-qom-Fix-memory-leak-in-object_property_set_link.patch +# For bz#1036537 - Cross version migration from RHEL6.5 host to RHEL7.0 host with sound device failed. +Patch504: kvm-fix-intel-hda-live-migration.patch +# For bz#1029743 - qemu-kvm core dump after hot plug/unplug 82576 PF about 100 times +Patch505: kvm-vfio-pci-Release-all-MSI-X-vectors-when-disabled.patch +# For bz#921490 - qemu-kvm core dumped after hot plugging more than 11 VF through vfio-pci +Patch506: kvm-Query-KVM-for-available-memory-slots.patch +# For bz#1039501 - [provisioning] discard=on broken +Patch507: kvm-block-Dont-ignore-previously-set-bdrv_flags.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch508: kvm-cleanup-trace-events.pl-New.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch509: kvm-slavio_misc-Fix-slavio_led_mem_readw-_writew-tracepo.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch510: kvm-milkymist-minimac2-Fix-minimac2_read-_write-tracepoi.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch511: kvm-trace-events-Drop-unused-events.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch512: kvm-trace-events-Fix-up-source-file-comments.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch513: kvm-trace-events-Clean-up-with-scripts-cleanup-trace-eve.patch +# For bz#997832 - Backport trace fixes proactively to avoid confusion and silly conflicts +Patch514: kvm-trace-events-Clean-up-after-removal-of-old-usb-host-.patch +# For bz#1027571 - [virtio-win]win8.1 guest network can not resume automatically after do "set_link tap1 on" +Patch515: kvm-net-Update-netdev-peer-on-link-change.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch516: kvm-qdev-monitor-Unref-device-when-device_add-fails.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch517: kvm-qdev-Drop-misleading-qdev_free-function.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch518: kvm-blockdev-fix-drive_init-opts-and-bs_opts-leaks.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch519: kvm-libqtest-rename-qmp-to-qmp_discard_response.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch520: kvm-libqtest-add-qmp-fmt-.-QDict-function.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch521: kvm-blockdev-test-add-test-case-for-drive_add-duplicate-.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch522: kvm-qdev-monitor-test-add-device_add-leak-test-cases.patch +# For bz#1003773 - When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released. +Patch523: kvm-qtest-Use-display-none-by-default.patch +# For bz#1034876 - export acpi tables to guests +Patch524: kvm-range-add-Range-structure.patch +# For bz#1034876 - export acpi tables to guests +Patch525: kvm-range-add-Range-to-typedefs.patch +# For bz#1034876 - export acpi tables to guests +Patch526: kvm-range-add-min-max-operations-on-ranges.patch +# For bz#1034876 - export acpi tables to guests +Patch527: kvm-qdev-Add-SIZE-type-to-qdev-properties.patch +# For bz#1034876 - export acpi tables to guests +Patch528: kvm-qapi-make-visit_type_size-fallback-to-type_int.patch +# For bz#1034876 - export acpi tables to guests +Patch529: kvm-pc-move-IO_APIC_DEFAULT_ADDRESS-to-include-hw-i386-i.patch +# For bz#1034876 - export acpi tables to guests +Patch530: kvm-pci-add-helper-to-retrieve-the-64-bit-range.patch +# For bz#1034876 - export acpi tables to guests +Patch531: kvm-pci-fix-up-w64-size-calculation-helper.patch +# For bz#1034876 - export acpi tables to guests +Patch532: kvm-refer-to-FWCfgState-explicitly.patch +# For bz#1034876 - export acpi tables to guests +Patch533: kvm-fw_cfg-move-typedef-to-qemu-typedefs.h.patch +# For bz#1034876 - export acpi tables to guests +Patch534: kvm-arch_init-align-MR-size-to-target-page-size.patch +# For bz#1034876 - export acpi tables to guests +Patch535: kvm-loader-store-FW-CFG-ROM-files-in-RAM.patch +# For bz#1034876 - export acpi tables to guests +Patch536: kvm-pci-store-PCI-hole-ranges-in-guestinfo-structure.patch +# For bz#1034876 - export acpi tables to guests +Patch537: kvm-pc-pass-PCI-hole-ranges-to-Guests.patch +# For bz#1034876 - export acpi tables to guests +Patch538: kvm-pc-replace-i440fx_common_init-with-i440fx_init.patch +# For bz#1034876 - export acpi tables to guests +Patch539: kvm-pc-don-t-access-fw-cfg-if-NULL.patch +# For bz#1034876 - export acpi tables to guests +Patch540: kvm-pc-add-I440FX-QOM-cast-macro.patch +# For bz#1034876 - export acpi tables to guests +Patch541: kvm-pc-limit-64-bit-hole-to-2G-by-default.patch +# For bz#1034876 - export acpi tables to guests +Patch542: kvm-q35-make-pci-window-address-size-match-guest-cfg.patch +# For bz#1034876 - export acpi tables to guests +Patch543: kvm-q35-use-64-bit-window-programmed-by-guest.patch +# For bz#1034876 - export acpi tables to guests +Patch544: kvm-piix-use-64-bit-window-programmed-by-guest.patch +# For bz#1034876 - export acpi tables to guests +Patch545: kvm-pc-fix-regression-for-64-bit-PCI-memory.patch +# For bz#1034876 - export acpi tables to guests +Patch546: kvm-cleanup-object.h-include-error.h-directly.patch +# For bz#1034876 - export acpi tables to guests +Patch547: kvm-qom-cleanup-struct-Error-references.patch +# For bz#1034876 - export acpi tables to guests +Patch548: kvm-qom-add-pointer-to-int-property-helpers.patch +# For bz#1034876 - export acpi tables to guests +Patch549: kvm-fw_cfg-interface-to-trigger-callback-on-read.patch +# For bz#1034876 - export acpi tables to guests +Patch550: kvm-loader-support-for-unmapped-ROM-blobs.patch +# For bz#1034876 - export acpi tables to guests +Patch551: kvm-pcie_host-expose-UNMAPPED-macro.patch +# For bz#1034876 - export acpi tables to guests +Patch552: kvm-pcie_host-expose-address-format.patch +# For bz#1034876 - export acpi tables to guests +Patch553: kvm-q35-use-macro-for-MCFG-property-name.patch +# For bz#1034876 - export acpi tables to guests +Patch554: kvm-q35-expose-mmcfg-size-as-a-property.patch +# For bz#1034876 - export acpi tables to guests +Patch555: kvm-i386-add-ACPI-table-files-from-seabios.patch +# For bz#1034876 - export acpi tables to guests +Patch556: kvm-acpi-add-rules-to-compile-ASL-source.patch +# For bz#1034876 - export acpi tables to guests +Patch557: kvm-acpi-pre-compiled-ASL-files.patch +# For bz#1034876 - export acpi tables to guests +Patch558: kvm-acpi-ssdt-pcihp-updat-generated-file.patch +# For bz#1034876 - export acpi tables to guests +Patch559: kvm-loader-use-file-path-size-from-fw_cfg.h.patch +# For bz#1034876 - export acpi tables to guests +Patch560: kvm-i386-add-bios-linker-loader.patch +# For bz#1034876 - export acpi tables to guests +Patch561: kvm-loader-allow-adding-ROMs-in-done-callbacks.patch +# For bz#1034876 - export acpi tables to guests +Patch562: kvm-i386-define-pc-guest-info.patch +# For bz#1034876 - export acpi tables to guests +Patch563: kvm-acpi-piix-add-macros-for-acpi-property-names.patch +# For bz#1034876 - export acpi tables to guests +Patch564: kvm-piix-APIs-for-pc-guest-info.patch +# For bz#1034876 - export acpi tables to guests +Patch565: kvm-ich9-APIs-for-pc-guest-info.patch +# For bz#1034876 - export acpi tables to guests +Patch566: kvm-pvpanic-add-API-to-access-io-port.patch +# For bz#1034876 - export acpi tables to guests +Patch567: kvm-hpet-add-API-to-find-it.patch +# For bz#1034876 - export acpi tables to guests +Patch568: kvm-hpet-fix-build-with-CONFIG_HPET-off.patch +# For bz#1034876 - export acpi tables to guests +Patch569: kvm-acpi-add-interface-to-access-user-installed-tables.patch +# For bz#1034876 - export acpi tables to guests +Patch570: kvm-pc-use-new-api-to-add-builtin-tables.patch +# For bz#1034876 - export acpi tables to guests +Patch571: kvm-i386-ACPI-table-generation-code-from-seabios.patch +# For bz#1034876 - export acpi tables to guests +Patch572: kvm-ssdt-fix-PBLK-length.patch +# For bz#1034876 - export acpi tables to guests +Patch573: kvm-ssdt-proc-update-generated-file.patch +# For bz#1034876 - export acpi tables to guests +Patch574: kvm-pc-disable-pci-info.patch +# For bz#1034876 - export acpi tables to guests +Patch575: kvm-acpi-build-fix-build-on-glib-2.22.patch +# For bz#1034876 - export acpi tables to guests +Patch576: kvm-acpi-build-fix-build-on-glib-2.14.patch +# For bz#1034876 - export acpi tables to guests +Patch577: kvm-acpi-build-fix-support-for-glib-2.22.patch +# For bz#1034876 - export acpi tables to guests +Patch578: kvm-acpi-build-Fix-compiler-warning-missing-gnu_printf-f.patch +# For bz#1034876 - export acpi tables to guests +Patch579: kvm-exec-Fix-prototype-of-phys_mem_set_alloc-and-related.patch +# For bz#1034876 - export acpi tables to guests +Patch580: kvm-hw-i386-Makefile.obj-use-PYTHON-to-run-.py-scripts-c.patch +# For bz#1026314 +Patch581: kvm-seccomp-add-kill-to-the-syscall-whitelist.patch +Patch582: kvm-json-parser-fix-handling-of-large-whole-number-value.patch +Patch583: kvm-qapi-add-QMP-input-test-for-large-integers.patch +Patch584: kvm-qapi-fix-visitor-serialization-tests-for-numbers-dou.patch +Patch585: kvm-qapi-add-native-list-coverage-for-visitor-serializat.patch +Patch586: kvm-qapi-add-native-list-coverage-for-QMP-output-visitor.patch +Patch587: kvm-qapi-add-native-list-coverage-for-QMP-input-visitor-.patch +Patch588: kvm-qapi-lack-of-two-commas-in-dict.patch +Patch589: kvm-tests-QAPI-schema-parser-tests.patch +Patch590: kvm-tests-Use-qapi-schema-test.json-as-schema-parser-tes.patch +Patch591: kvm-qapi.py-Restructure-lexer-and-parser.patch +Patch592: kvm-qapi.py-Decent-syntax-error-reporting.patch +Patch593: kvm-qapi.py-Reject-invalid-characters-in-schema-file.patch +Patch594: kvm-qapi.py-Fix-schema-parser-to-check-syntax-systematic.patch +Patch595: kvm-qapi.py-Fix-diagnosing-non-objects-at-a-schema-s-top.patch +Patch596: kvm-qapi.py-Rename-expr_eval-to-expr-in-parse_schema.patch +Patch597: kvm-qapi.py-Permit-comments-starting-anywhere-on-the-lin.patch +Patch598: kvm-scripts-qapi.py-Avoid-syntax-not-supported-by-Python.patch +Patch599: kvm-tests-Fix-schema-parser-test-for-in-tree-build.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch600: kvm-add-a-header-file-for-atomic-operations.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch601: kvm-savevm-Fix-potential-memory-leak.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch602: kvm-migration-Fail-migration-on-bdrv_flush_all-error.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch603: kvm-rdma-add-documentation.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch604: kvm-rdma-introduce-qemu_update_position.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch605: kvm-rdma-export-yield_until_fd_readable.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch606: kvm-rdma-export-throughput-w-MigrationStats-QMP.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch607: kvm-rdma-introduce-qemu_file_mode_is_not_valid.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch608: kvm-rdma-introduce-qemu_ram_foreach_block.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch609: kvm-rdma-new-QEMUFileOps-hooks.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch610: kvm-rdma-introduce-capability-x-rdma-pin-all.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch611: kvm-rdma-update-documentation-to-reflect-new-unpin-suppo.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch612: kvm-rdma-bugfix-ram_control_save_page.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch613: kvm-rdma-introduce-ram_handle_compressed.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch614: kvm-rdma-core-logic.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch615: kvm-rdma-send-pc.ram.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch616: kvm-rdma-allow-state-transitions-between-other-states-be.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch617: kvm-rdma-introduce-MIG_STATE_NONE-and-change-MIG_STATE_S.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch618: kvm-rdma-account-for-the-time-spent-in-MIG_STATE_SETUP-t.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch619: kvm-rdma-bugfix-make-IPv6-support-work.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch620: kvm-rdma-forgot-to-turn-off-the-debugging-flag.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch621: kvm-rdma-correct-newlines-in-error-statements.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch622: kvm-rdma-don-t-use-negative-index-to-array.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch623: kvm-rdma-qemu_rdma_post_send_control-uses-wrongly-RDMA_W.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch624: kvm-rdma-use-DRMA_WRID_READY.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch625: kvm-rdma-memory-leak-RDMAContext-host.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch626: kvm-rdma-use-resp.len-after-validation-in-qemu_rdma_regi.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch627: kvm-rdma-validate-RDMAControlHeader-len.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch628: kvm-rdma-check-if-RDMAControlHeader-len-match-transferre.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch629: kvm-rdma-proper-getaddrinfo-handling.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch630: kvm-rdma-IPv6-over-Ethernet-RoCE-is-broken-in-linux-work.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch631: kvm-rdma-remaining-documentation-fixes.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch632: kvm-rdma-silly-ipv6-bugfix.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch633: kvm-savevm-fix-wrong-initialization-by-ram_control_load_.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch634: kvm-arch_init-right-return-for-ram_save_iterate.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch635: kvm-rdma-clean-up-of-qemu_rdma_cleanup.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch636: kvm-rdma-constify-ram_chunk_-index-start-end.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch637: kvm-migration-Fix-debug-print-type.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch638: kvm-arch_init-make-is_zero_page-accept-size.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch639: kvm-migration-ram_handle_compressed.patch +# For bz#1011720 - [HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM +Patch640: kvm-migration-fix-spice-migration.patch +# For bz#678368 - RFE: Support more than 8 assigned devices +Patch641: kvm-pci-assign-cap-number-of-devices-that-can-be-assigne.patch +# For bz#678368 - RFE: Support more than 8 assigned devices +Patch642: kvm-vfio-cap-number-of-devices-that-can-be-assigned.patch +# For bz#1039513 - backport remote wakeup for ehci +Patch643: kvm-Revert-usb-tablet-Don-t-claim-wakeup-capability-for-.patch +# For bz#1026554 - qemu: mempath: prefault pages manually +Patch644: kvm-mempath-prefault-pages-manually-v4.patch +# For bz#1007710 - [RFE] Enable qemu-img to support VMDK version 3 +# For bz#1029852 - qemu-img fails to convert vmdk image with "qemu-img: Could not open 'image.vmdk'" +Patch645: kvm-vmdk-Allow-read-only-open-of-VMDK-version-3.patch +# For bz#1035132 - fail to boot and call trace with x-data-plane=on specified for rhel6.5 guest +Patch646: kvm-virtio_pci-fix-level-interrupts-with-irqfd.patch +# For bz#889051 - Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0 +Patch647: kvm-QMP-Forward-port-__com.redhat_drive_del-from-RHEL-6.patch +# For bz#889051 - Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0 +Patch648: kvm-QMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch +# For bz#889051 - Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0 +Patch649: kvm-HMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch +# For bz#889051 - Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0 +Patch650: kvm-QMP-Document-throttling-parameters-of-__com.redhat_d.patch +# For bz#889051 - Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0 +Patch651: kvm-HMP-Disable-drive_add-for-Red-Hat-Enterprise-Linux.patch +Patch652: kvm-Revert-HMP-Disable-drive_add-for-Red-Hat-Enterprise-2.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch653: kvm-block-change-default-of-.has_zero_init-to-0.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch654: kvm-iscsi-factor-out-sector-conversions.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch655: kvm-iscsi-add-logical-block-provisioning-information-to-.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch656: kvm-iscsi-add-.bdrv_get_block_status.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch657: kvm-iscsi-split-discard-requests-in-multiple-parts.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch658: kvm-block-make-BdrvRequestFlags-public.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch659: kvm-block-add-flags-to-bdrv_-_write_zeroes.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch660: kvm-block-introduce-BDRV_REQ_MAY_UNMAP-request-flag.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch661: kvm-block-add-logical-block-provisioning-info-to-BlockDr.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch662: kvm-block-add-wrappers-for-logical-block-provisioning-in.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch663: kvm-block-iscsi-add-.bdrv_get_info.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch664: kvm-block-add-BlockLimits-structure-to-BlockDriverState.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch665: kvm-block-raw-copy-BlockLimits-on-raw_open.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch666: kvm-block-honour-BlockLimits-in-bdrv_co_do_write_zeroes.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch667: kvm-block-honour-BlockLimits-in-bdrv_co_discard.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch668: kvm-iscsi-set-limits-in-BlockDriverState.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch669: kvm-iscsi-simplify-iscsi_co_discard.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch670: kvm-iscsi-add-bdrv_co_write_zeroes.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch671: kvm-block-introduce-bdrv_make_zero.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch672: kvm-block-get_block_status-fix-BDRV_BLOCK_ZERO-for-unall.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch673: kvm-qemu-img-add-support-for-fully-allocated-images.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch674: kvm-qemu-img-conditionally-zero-out-target-on-convert.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch675: kvm-block-generalize-BlockLimits-handling-to-cover-bdrv_.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch676: kvm-block-add-flags-to-BlockRequest.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch677: kvm-block-add-flags-argument-to-bdrv_co_write_zeroes-tra.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch678: kvm-block-add-bdrv_aio_write_zeroes.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch679: kvm-block-handle-ENOTSUP-from-discard-in-generic-code.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch680: kvm-block-make-bdrv_co_do_write_zeroes-stricter-in-produ.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch681: kvm-vpc-vhdx-add-get_info.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch682: kvm-block-drivers-add-discard-write_zeroes-properties-to.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch683: kvm-block-drivers-expose-requirement-for-write-same-alig.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch684: kvm-block-iscsi-remove-.bdrv_has_zero_init.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch685: kvm-block-iscsi-updated-copyright.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch686: kvm-block-iscsi-check-WRITE-SAME-support-differently-dep.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch687: kvm-scsi-disk-catch-write-protection-errors-in-UNMAP.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch688: kvm-scsi-disk-reject-ANCHOR-1-for-UNMAP-and-WRITE-SAME-c.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch689: kvm-scsi-disk-correctly-implement-WRITE-SAME.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch690: kvm-scsi-disk-fix-WRITE-SAME-with-large-non-zero-payload.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch691: kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch692: kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch693: kvm-raw-posix-add-support-for-write_zeroes-on-XFS-and-bl.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch694: kvm-qemu-iotests-033-is-fast.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch695: kvm-qemu-img-add-support-for-skipping-zeroes-in-input-du.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch696: kvm-qemu-img-fix-usage-instruction-for-qemu-img-convert.patch.patch +# For bz#1007815 - fix WRITE SAME support +Patch697: kvm-block-iscsi-set-bdi-cluster_size.patch.patch +# For bz#1039557 - optimize qemu-img for thin provisioned images +Patch698: kvm-block-add-opt_transfer_length-to-BlockLimits.patch.patch +# For bz#1039557 - optimize qemu-img for thin provisioned images +Patch699: kvm-block-iscsi-set-bs-bl.opt_transfer_length.patch.patch +# For bz#1039557 - optimize qemu-img for thin provisioned images +Patch700: kvm-qemu-img-dynamically-adjust-iobuffer-size-during-con.patch.patch +# For bz#1039557 - optimize qemu-img for thin provisioned images +Patch701: kvm-qemu-img-round-down-request-length-to-an-aligned-sec.patch.patch +# For bz#1039557 - optimize qemu-img for thin provisioned images +Patch702: kvm-qemu-img-decrease-progress-update-interval-on-conver.patch.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch703: kvm-block-qemu-iotests-for-vhdx-read-sample-dynamic-imag.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch704: kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-io-p.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch705: kvm-block-qemu-iotests-fix-_make_test_img-to-work-with-s.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch706: kvm-block-qemu-iotests-add-quotes-to-TEST_IMG.base-usage.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch707: kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-in-0.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch708: kvm-block-qemu-iotests-removes-duplicate-double-quotes-i.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch709: kvm-block-vhdx-minor-comments-and-typo-correction.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch710: kvm-block-vhdx-add-header-update-capability.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch711: kvm-block-vhdx-code-movement-VHDXMetadataEntries-and-BDR.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch712: kvm-block-vhdx-log-support-struct-and-defines.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch713: kvm-block-vhdx-break-endian-translation-functions-out.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch714: kvm-block-vhdx-update-log-guid-in-header-and-first-write.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch715: kvm-block-vhdx-code-movement-move-vhdx_close-above-vhdx_.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch716: kvm-block-vhdx-log-parsing-replay-and-flush-support.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch717: kvm-block-vhdx-add-region-overlap-detection-for-image-fi.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch718: kvm-block-vhdx-add-log-write-support.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch719: kvm-block-vhdx-write-support.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch720: kvm-block-vhdx-remove-BAT-file-offset-bit-shifting.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch721: kvm-block-vhdx-move-more-endian-translations-to-vhdx-end.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch722: kvm-block-vhdx-break-out-code-operations-to-functions.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch723: kvm-block-vhdx-fix-comment-typos-in-header-fix-incorrect.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch724: kvm-block-vhdx-add-.bdrv_create-support.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch725: kvm-block-vhdx-update-_make_test_img-to-filter-out-vhdx-.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch726: kvm-block-qemu-iotests-for-vhdx-add-write-test-support.patch +# For bz#879234 - [RFE] qemu-img: Add/improve support for VHDX format +Patch727: kvm-block-vhdx-qemu-iotest-log-replay-of-data-sector.patch +# For bz#965636 - streaming with no backing file should not do anything +Patch728: kvm-block-stream-Don-t-stream-unbacked-devices.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch729: kvm-qemu-io-Let-open-pass-options-to-block-driver.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch730: kvm-qcow2.py-Subcommand-for-changing-header-fields.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch731: kvm-qemu-iotests-Remaining-error-propagation-adjustments.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch732: kvm-qemu-iotests-Add-test-for-inactive-L2-overlap.patch +# For bz#1004347 - Backport qcow2 corruption prevention patches +Patch733: kvm-qemu-iotests-Adjust-test-result-039.patch +# For bz#1048671 - virtio-net: mac_table change isn't recovered in error state +Patch734: kvm-virtio-net-don-t-update-mac_table-in-error-state.patch +# For bz#1032904 - qemu-img can not create libiscsi qcow2_v3 image +Patch735: kvm-qcow2-Zero-initialise-first-cluster-for-new-images.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch736: kvm-option-Add-assigned-flag-to-QEMUOptionParameter.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch737: kvm-qcow2-refcount-Snapshot-update-for-zero-clusters.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch738: kvm-qemu-iotests-Snapshotting-zero-clusters.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch739: kvm-block-Image-file-option-amendment.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch740: kvm-qcow2-cache-Empty-cache.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch741: kvm-qcow2-cluster-Expand-zero-clusters.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch742: kvm-qcow2-Save-refcount-order-in-BDRVQcowState.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch743: kvm-qcow2-Implement-bdrv_amend_options.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch744: kvm-qcow2-Correct-bitmap-size-in-zero-expansion.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch745: kvm-qcow2-Free-only-newly-allocated-clusters-on-error.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch746: kvm-qcow2-Add-missing-space-in-error-message.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch747: kvm-qemu-iotest-qcow2-image-option-amendment.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch748: kvm-qemu-iotests-New-test-case-in-061.patch +# For bz#1033490 - Cannot upgrade/downgrade qcow2 images +Patch749: kvm-qemu-iotests-Preallocated-zero-clusters-in-061.patch +# For bz#972773 - RHEL7: Clarify support statement in KVM help +Patch750: kvm-Add-support-statement-to-help-output.patch +# For bz#903910 - RHEL7 does not have equivalent functionality for __com.redhat_qxl_screendump +Patch751: kvm-__com.redhat_qxl_screendump-add-docs.patch +# For bz#999836 - -m 1 crashes +Patch752: kvm-vl-Round-memory-sizes-below-2MiB-up-to-2MiB.patch +# For bz#1044845 - QEMU seccomp sandbox - exit if seccomp_init() fails +Patch753: kvm-seccomp-exit-if-seccomp_init-fails.patch +# For bz#1034876 - export acpi tables to guests +Patch754: kvm-configure-make-iasl-option-actually-work.patch +# For bz#1034876 - export acpi tables to guests +Patch755: kvm-acpi-build-disable-with-no-acpi.patch +# For bz#1039513 - backport remote wakeup for ehci +Patch756: kvm-ehci-implement-port-wakeup.patch +# For bz#1026712 - Qemu core dumpd when boot guest with driver name as "virtio-pci" +# For bz#1046007 - qemu-kvm aborted when hot plug PCI device to guest with romfile and rombar=0 +Patch757: kvm-qdev-monitor-Fix-crash-when-device_add-is-called-wit.patch +# For bz#1035001 - VHDX: journal log should not be replayed by default, but rather via qemu-img check -r all +Patch758: kvm-block-vhdx-improve-error-message-and-.bdrv_check-imp.patch +# For bz#1017650 - need to update qemu-img man pages on "VHDX" format +Patch759: kvm-docs-updated-qemu-img-man-page-and-qemu-doc-to-refle.patch +# For bz#1052340 - pvticketlocks: default on +Patch760: kvm-enable-pvticketlocks-by-default.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch761: kvm-fix-boot-strict-regressed-in-commit-6ef4716.patch +# For bz#997817 - -boot order and -boot once regressed since RHEL-6 +Patch762: kvm-vl-make-boot_strict-variable-static-not-used-outside.patch +# For bz#997559 - Improve live migration bitmap handling +Patch763: kvm-bitmap-use-long-as-index.patch +# For bz#997559 - Improve live migration bitmap handling +Patch764: kvm-memory-cpu_physical_memory_set_dirty_flags-result-is.patch +# For bz#997559 - Improve live migration bitmap handling +Patch765: kvm-memory-cpu_physical_memory_set_dirty_range-return-vo.patch +# For bz#997559 - Improve live migration bitmap handling +Patch766: kvm-exec-use-accessor-function-to-know-if-memory-is-dirt.patch +# For bz#997559 - Improve live migration bitmap handling +Patch767: kvm-memory-create-function-to-set-a-single-dirty-bit.patch +# For bz#997559 - Improve live migration bitmap handling +Patch768: kvm-exec-drop-useless-if.patch +# For bz#997559 - Improve live migration bitmap handling +Patch769: kvm-exec-create-function-to-get-a-single-dirty-bit.patch +# For bz#997559 - Improve live migration bitmap handling +Patch770: kvm-memory-make-cpu_physical_memory_is_dirty-return-bool.patch +# For bz#997559 - Improve live migration bitmap handling +Patch771: kvm-memory-all-users-of-cpu_physical_memory_get_dirty-us.patch +# For bz#997559 - Improve live migration bitmap handling +Patch772: kvm-memory-set-single-dirty-flags-when-possible.patch +# For bz#997559 - Improve live migration bitmap handling +Patch773: kvm-memory-cpu_physical_memory_set_dirty_range-always-di.patch +# For bz#997559 - Improve live migration bitmap handling +Patch774: kvm-memory-cpu_physical_memory_mask_dirty_range-always-c.patch +# For bz#997559 - Improve live migration bitmap handling +Patch775: kvm-memory-use-bit-2-for-migration.patch +# For bz#997559 - Improve live migration bitmap handling +Patch776: kvm-memory-make-sure-that-client-is-always-inside-range.patch +# For bz#997559 - Improve live migration bitmap handling +Patch777: kvm-memory-only-resize-dirty-bitmap-when-memory-size-inc.patch +# For bz#997559 - Improve live migration bitmap handling +Patch778: kvm-memory-cpu_physical_memory_clear_dirty_flag-result-i.patch +# For bz#997559 - Improve live migration bitmap handling +Patch779: kvm-bitmap-Add-bitmap_zero_extend-operation.patch +# For bz#997559 - Improve live migration bitmap handling +Patch780: kvm-memory-split-dirty-bitmap-into-three.patch +# For bz#997559 - Improve live migration bitmap handling +Patch781: kvm-memory-unfold-cpu_physical_memory_clear_dirty_flag-i.patch +# For bz#997559 - Improve live migration bitmap handling +Patch782: kvm-memory-unfold-cpu_physical_memory_set_dirty-in-its-o.patch +# For bz#997559 - Improve live migration bitmap handling +Patch783: kvm-memory-unfold-cpu_physical_memory_set_dirty_flag.patch +# For bz#997559 - Improve live migration bitmap handling +Patch784: kvm-memory-make-cpu_physical_memory_get_dirty-the-main-f.patch +# For bz#997559 - Improve live migration bitmap handling +Patch785: kvm-memory-cpu_physical_memory_get_dirty-is-used-as-retu.patch +# For bz#997559 - Improve live migration bitmap handling +Patch786: kvm-memory-s-mask-clear-cpu_physical_memory_mask_dirty_r.patch +# For bz#997559 - Improve live migration bitmap handling +Patch787: kvm-memory-use-find_next_bit-to-find-dirty-bits.patch +# For bz#997559 - Improve live migration bitmap handling +Patch788: kvm-memory-cpu_physical_memory_set_dirty_range-now-uses-.patch +# For bz#997559 - Improve live migration bitmap handling +Patch789: kvm-memory-cpu_physical_memory_clear_dirty_range-now-use.patch +# For bz#997559 - Improve live migration bitmap handling +Patch790: kvm-memory-s-dirty-clean-in-cpu_physical_memory_is_dirty.patch +# For bz#997559 - Improve live migration bitmap handling +Patch791: kvm-memory-make-cpu_physical_memory_reset_dirty-take-a-l.patch +# For bz#997559 - Improve live migration bitmap handling +Patch792: kvm-exec-Remove-unused-global-variable-phys_ram_fd.patch +# For bz#997559 - Improve live migration bitmap handling +Patch793: kvm-memory-cpu_physical_memory_set_dirty_tracking-should.patch +# For bz#997559 - Improve live migration bitmap handling +Patch794: kvm-memory-move-private-types-to-exec.c.patch +# For bz#997559 - Improve live migration bitmap handling +Patch795: kvm-memory-split-cpu_physical_memory_-functions-to-its-o.patch +# For bz#997559 - Improve live migration bitmap handling +Patch796: kvm-memory-unfold-memory_region_test_and_clear.patch +# For bz#997559 - Improve live migration bitmap handling +Patch797: kvm-use-directly-cpu_physical_memory_-api-for-tracki.patch +# For bz#997559 - Improve live migration bitmap handling +Patch798: kvm-refactor-start-address-calculation.patch +# For bz#997559 - Improve live migration bitmap handling +Patch799: kvm-memory-move-bitmap-synchronization-to-its-own-functi.patch +# For bz#997559 - Improve live migration bitmap handling +Patch800: kvm-memory-syncronize-kvm-bitmap-using-bitmaps-operation.patch +# For bz#997559 - Improve live migration bitmap handling +Patch801: kvm-ram-split-function-that-synchronizes-a-range.patch +# For bz#997559 - Improve live migration bitmap handling +Patch802: kvm-migration-synchronize-memory-bitmap-64bits-at-a-time.patch +# For bz#947785 - In rhel6.4 guest sound recorder doesn't work when playing audio +Patch803: kvm-intel-hda-fix-position-buffer.patch +# For bz#1003467 - Backport migration fixes from post qemu 1.6 +Patch804: kvm-The-calculation-of-bytes_xfer-in-qemu_put_buffer-is-.patch +# For bz#1003467 - Backport migration fixes from post qemu 1.6 +Patch805: kvm-migration-Fix-rate-limit.patch +# For bz#1017636 - PATCH: fix qemu using 50% host cpu when audio is playing +Patch806: kvm-audio-honor-QEMU_AUDIO_TIMER_PERIOD-instead-of-wakin.patch +# For bz#1017636 - PATCH: fix qemu using 50% host cpu when audio is playing +Patch807: kvm-audio-Lower-default-wakeup-rate-to-100-times-second.patch +# For bz#1017636 - PATCH: fix qemu using 50% host cpu when audio is playing +Patch808: kvm-audio-adjust-pulse-to-100Hz-wakeup-rate.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch809: kvm-pc-Fix-rhel6.-3dnow-3dnowext-compat-bits.patch +# For bz#1038603 - make seabios 256k for rhel7 machine types +Patch810: kvm-add-firmware-to-machine-options.patch +# For bz#1038603 - make seabios 256k for rhel7 machine types +Patch811: kvm-switch-rhel7-machine-types-to-big-bios.patch +# For bz#1034518 - boot order wrong with q35 +Patch812: kvm-pci-fix-pci-bridge-fw-path.patch +# For bz#1031098 - Disable device smbus-eeprom +Patch813: kvm-hw-cannot_instantiate_with_device_add_yet-due-to-poi.patch +# For bz#1031098 - Disable device smbus-eeprom +Patch814: kvm-qdev-Document-that-pointer-properties-kill-device_ad.patch +# For bz#1044742 - Cannot create guest on remote RHEL7 host using F20 virt-manager, libvirt's qemu -no-hpet detection is broken +Patch815: kvm-Add-back-no-hpet-but-ignore-it.patch +# For bz#669524 - Confusing error message from -device +Patch816: kvm-Revert-qdev-monitor-Fix-crash-when-device_add-is-cal.patch +# For bz#669524 - Confusing error message from -device +Patch817: kvm-Revert-qdev-Do-not-let-the-user-try-to-device_add-wh.patch +# For bz#669524 - Confusing error message from -device +Patch818: kvm-qdev-monitor-Clean-up-qdev_device_add-variable-namin.patch +# For bz#669524 - Confusing error message from -device +Patch819: kvm-qdev-monitor-Fix-crash-when-device_add-is-called.2.patch.patch +# For bz#669524 - Confusing error message from -device +Patch820: kvm-qdev-monitor-Avoid-qdev-as-variable-name.patch +# For bz#669524 - Confusing error message from -device +Patch821: kvm-qdev-monitor-Inline-qdev_init-for-device_add.patch +# For bz#669524 - Confusing error message from -device +Patch822: kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it.2.patch.patch +# For bz#669524 - Confusing error message from -device +Patch823: kvm-qdev-monitor-Avoid-device_add-crashing-on-non-device.patch +# For bz#669524 - Confusing error message from -device +Patch824: kvm-qdev-monitor-Improve-error-message-for-device-nonexi.patch +# For bz#1003535 - qemu-kvm core dump when boot vm with more than 32 virtio disks/nics +Patch825: kvm-exec-change-well-known-physical-sections-to-macros.patch +# For bz#1003535 - qemu-kvm core dump when boot vm with more than 32 virtio disks/nics +Patch826: kvm-exec-separate-sections-and-nodes-per-address-space.patch +# For bz#1053699 - Backport Cancelled race condition fixes +Patch827: kvm-avoid-a-bogus-COMPLETED-CANCELLED-transition.patch +# For bz#1053699 - Backport Cancelled race condition fixes +Patch828: kvm-introduce-MIG_STATE_CANCELLING-state.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch829: kvm-vvfat-use-bdrv_new-to-allocate-BlockDriverState.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch830: kvm-block-implement-reference-count-for-BlockDriverState.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch831: kvm-block-make-bdrv_delete-static.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch832: kvm-migration-omit-drive-ref-as-we-have-bdrv_ref-now.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch833: kvm-xen_disk-simplify-blk_disconnect-with-refcnt.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch834: kvm-nbd-use-BlockDriverState-refcnt.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch835: kvm-block-use-BDS-ref-for-block-jobs.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch836: kvm-block-Make-BlockJobTypes-const.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch837: kvm-blockjob-rename-BlockJobType-to-BlockJobDriver.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch838: kvm-qapi-Introduce-enum-BlockJobType.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch839: kvm-qapi-make-use-of-new-BlockJobType.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch840: kvm-mirror-Don-t-close-target.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch841: kvm-mirror-Move-base-to-MirrorBlockJob.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch842: kvm-block-Add-commit_active_start.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch843: kvm-commit-Support-commit-active-layer.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch844: kvm-qemu-iotests-prefill-some-data-to-test-image.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch845: kvm-qemu-iotests-Update-test-cases-for-commit-active.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch846: kvm-commit-Remove-unused-check.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch847: kvm-blockdev-use-bdrv_getlength-in-qmp_drive_mirror.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch848: kvm-qemu-iotests-make-assert_no_active_block_jobs-common.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch849: kvm-block-drive-mirror-Check-for-NULL-backing_hd.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch850: kvm-qemu-iotests-Extend-041-for-unbacked-mirroring.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch851: kvm-qapi-schema-Update-description-for-NewImageMode.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch852: kvm-block-drive-mirror-Reuse-backing-HD-for-sync-none.patch +# For bz#921890 - Core dump when block mirror with "sync" is "none" and mode is "absolute-paths" +Patch853: kvm-qemu-iotests-Fix-test-041.patch +# For bz#1035644 - rhel7.0host + windows guest + virtio-win + 'chkdsk' in the guest gives qemu assertion in scsi_dma_complete +Patch854: kvm-scsi-bus-fix-transfer-length-and-direction-for-VERIF.patch +# For bz#1035644 - rhel7.0host + windows guest + virtio-win + 'chkdsk' in the guest gives qemu assertion in scsi_dma_complete +Patch855: kvm-scsi-disk-fix-VERIFY-emulation.patch +# For bz#1041301 - live snapshot merge (commit) of the active layer +Patch856: kvm-block-ensure-bdrv_drain_all-works-during-bdrv_delete.patch +# For bz#998708 - qemu-kvm: maximum vcpu should be recommended maximum +Patch857: kvm-use-recommended-max-vcpu-count.patch +# For bz#1049706 - MIss CPUID_EXT_X2APIC in Westmere cpu model +Patch858: kvm-pc-Create-pc_compat_rhel-functions.patch +# For bz#1049706 - MIss CPUID_EXT_X2APIC in Westmere cpu model +Patch859: kvm-pc-Enable-x2apic-by-default-on-more-recent-CPU-model.patch +# For bz#1019221 - Iscsi miss id sub-option in help output +Patch860: kvm-help-add-id-suboption-to-iscsi.patch +# For bz#1037503 - fix thin provisioning support for block device backends +Patch861: kvm-scsi-disk-add-UNMAP-limits-to-block-limits-VPD-page.patch +# For bz#1034876 - export acpi tables to guests +Patch862: kvm-qdev-Fix-32-bit-compilation-in-print_size.patch +# For bz#1034876 - export acpi tables to guests +Patch863: kvm-qdev-Use-clz-in-print_size.patch +# For bz#1026548 - i386: pc: align gpa<->hpa on 1GB boundary +Patch864: kvm-piix-gigabyte-alignment-for-ram.patch +# For bz#1026548 - i386: pc: align gpa<->hpa on 1GB boundary +Patch865: kvm-pc_piix-document-gigabyte_align.patch +# For bz#1026548 - i386: pc: align gpa<->hpa on 1GB boundary +Patch866: kvm-q35-gigabyle-alignment-for-ram.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch867: kvm-virtio-bus-remove-vdev-field.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch868: kvm-virtio-pci-remove-vdev-field.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch869: kvm-virtio-bus-cleanup-plug-unplug-interface.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch870: kvm-virtio-blk-switch-exit-callback-to-VirtioDeviceClass.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch871: kvm-virtio-serial-switch-exit-callback-to-VirtioDeviceCl.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch872: kvm-virtio-net-switch-exit-callback-to-VirtioDeviceClass.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch873: kvm-virtio-scsi-switch-exit-callback-to-VirtioDeviceClas.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch874: kvm-virtio-balloon-switch-exit-callback-to-VirtioDeviceC.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch875: kvm-virtio-rng-switch-exit-callback-to-VirtioDeviceClass.patch +# For bz#983344 - QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch +Patch876: kvm-virtio-pci-add-device_unplugged-callback.patch +# For bz#1051438 - Error message contains garbled characters when unable to open image due to bad permissions (permission denied). +Patch877: kvm-block-use-correct-filename-for-error-report.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch878: kvm-Partially-revert-rhel-Drop-cfi.pflash01-and-isa-ide-.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch879: kvm-Revert-pc-Disable-the-use-flash-device-for-BIOS-unle.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch880: kvm-memory-Replace-open-coded-memory_region_is_romd.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch881: kvm-memory-Rename-readable-flag-to-romd_mode.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch882: kvm-isapc-Fix-non-KVM-qemu-boot-read-write-memory-for-is.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch883: kvm-add-kvm_readonly_mem_enabled.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch884: kvm-support-using-KVM_MEM_READONLY-flag-for-regions.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch885: kvm-pc_sysfw-allow-flash-pflash-memory-to-be-used-with-K.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch886: kvm-fix-double-free-the-memslot-in-kvm_set_phys_mem.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch887: kvm-sysfw-remove-read-only-pc_sysfw_flash_vs_rom_bug_com.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch888: kvm-pc_sysfw-remove-the-rom_only-property.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch889: kvm-pc_sysfw-do-not-make-it-a-device-anymore.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch890: kvm-hw-i386-pc_sysfw-support-two-flash-drives.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch891: kvm-i440fx-test-qtest_start-should-be-paired-with-qtest_.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch892: kvm-i440fx-test-give-each-GTest-case-its-own-qtest.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch893: kvm-i440fx-test-generate-temporary-firmware-blob.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch894: kvm-i440fx-test-verify-firmware-under-4G-and-1M-both-bio.patch +# For bz#1032346 - basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables) +Patch895: kvm-piix-fix-32bit-pci-hole.patch +# For bz#1041564 - [NFR] qemu: Returning the watermark for all the images opened for writing +Patch896: kvm-qapi-Add-backing-to-BlockStats.patch +# For bz#918907 - provide backwards-compatible RHEL specific machine types in QEMU - CPU features +Patch897: kvm-pc-Disable-RDTSCP-unconditionally-on-rhel6.-machine-.patch +# For bz#1056428 - "rdtscp" flag defined on Opteron_G5 model and cann't be exposed to guest +# For bz#874400 - "rdtscp" flag defined on Opteron_G5 model and cann't be exposed to guest +Patch898: kvm-pc-Disable-RDTSCP-on-AMD-CPU-models.patch +# For bz#1030301 - qemu-img can not merge live snapshot to backing file(r/w backing file via libiscsi) +Patch899: kvm-block-add-.bdrv_reopen_prepare-stub-for-iscsi.patch +# For bz#1044815 - vfio initfn succeeds even if IOMMU mappings fail +Patch900: kvm-vfio-pci-Fail-initfn-on-DMA-mapping-errors.patch +# For bz#1052030 - src qemu-kvm core dump after hotplug/unhotplug GPU device and do local migration +Patch901: kvm-vfio-Destroy-memory-regions.patch +# For bz#1048092 - manpage of qemu-img contains error statement about compat option +Patch902: kvm-docs-qcow2-compat-1.1-is-now-the-default.patch +# For bz#947812 - There's a shot voice after 'system_reset' during playing music inside rhel6 guest w/ intel-hda device +Patch903: kvm-hda-codec-disable-streams-on-reset.patch +# For bz#1009297 - RHEL7.0 guest gui can not be used in dest host after migration +Patch904: kvm-QEMUBH-make-AioContext-s-bh-re-entrant.patch +# For bz#1009297 - RHEL7.0 guest gui can not be used in dest host after migration +Patch905: kvm-qxl-replace-pipe-signaling-with-bottom-half.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch906: kvm-block-fix-backing-file-segfault.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch907: kvm-block-Move-initialisation-of-BlockLimits-to-bdrv_ref.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch908: kvm-raw-Fix-BlockLimits-passthrough.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch909: kvm-block-Inherit-opt_transfer_length.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch910: kvm-block-Update-BlockLimits-when-they-might-have-change.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch911: kvm-qemu_memalign-Allow-small-alignments.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch912: kvm-block-Detect-unaligned-length-in-bdrv_qiov_is_aligne.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch913: kvm-block-Don-t-use-guest-sector-size-for-qemu_blockalig.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch914: kvm-block-rename-buffer_alignment-to-guest_block_size.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch915: kvm-raw-Probe-required-direct-I-O-alignment.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch916: kvm-block-Introduce-bdrv_aligned_preadv.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch917: kvm-block-Introduce-bdrv_co_do_preadv.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch918: kvm-block-Introduce-bdrv_aligned_pwritev.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch919: kvm-block-write-Handle-COR-dependency-after-I-O-throttli.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch920: kvm-block-Introduce-bdrv_co_do_pwritev.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch921: kvm-block-Switch-BdrvTrackedRequest-to-byte-granularity.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch922: kvm-block-Allow-waiting-for-overlapping-requests-between.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch923: kvm-block-use-DIV_ROUND_UP-in-bdrv_co_do_readv.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch924: kvm-block-Make-zero-after-EOF-work-with-larger-alignment.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch925: kvm-block-Generalise-and-optimise-COR-serialisation.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch926: kvm-block-Make-overlap-range-for-serialisation-dynamic.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch927: kvm-block-Fix-32-bit-truncation-in-mark_request_serialis.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch928: kvm-block-Allow-wait_serialising_requests-at-any-point.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch929: kvm-block-Align-requests-in-bdrv_co_do_pwritev.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch930: kvm-lock-Fix-memory-leaks-in-bdrv_co_do_pwritev.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch931: kvm-block-Assert-serialisation-assumptions-in-pwritev.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch932: kvm-block-Change-coroutine-wrapper-to-byte-granularity.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch933: kvm-block-Make-bdrv_pread-a-bdrv_prwv_co-wrapper.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch934: kvm-block-Make-bdrv_pwrite-a-bdrv_prwv_co-wrapper.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch935: kvm-iscsi-Set-bs-request_alignment.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch936: kvm-blkdebug-Make-required-alignment-configurable.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch937: kvm-blkdebug-Don-t-leak-bs-file-on-failure.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch938: kvm-qemu-io-New-command-sleep.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch939: kvm-qemu-iotests-Filter-out-qemu-io-prompt.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch940: kvm-qemu-iotests-Test-pwritev-RMW-logic.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch941: kvm-block-bdrv_aligned_pwritev-Assert-overlap-range.patch +# For bz#748906 - qemu fails on disk with 4k sectors and cache=off +Patch942: kvm-block-Don-t-call-ROUND_UP-with-negative-values.patch +# For bz#1026314 - qemu-kvm hang when use '-sandbox on'+'vnc'+'hda' +Patch943: kvm-seccomp-add-mkdir-and-fchmod-to-the-whitelist.patch +# For bz#1026314 - qemu-kvm hang when use '-sandbox on'+'vnc'+'hda' +Patch944: kvm-seccomp-add-some-basic-shared-memory-syscalls-to-the.patch +# For bz#1004143 - "test unit ready failed" on LUN 0 delays boot when a virtio-scsi target does not have any disk on LUN 0 +Patch945: kvm-scsi-Support-TEST-UNIT-READY-in-the-dummy-LUN0.patch +# For bz#1039530 - add support for microsoft os descriptors +Patch946: kvm-usb-add-vendor-request-defines.patch +# For bz#1039530 - add support for microsoft os descriptors +Patch947: kvm-usb-move-usb_-hi-lo-helpers-to-header-file.patch +# For bz#1039530 - add support for microsoft os descriptors +Patch948: kvm-usb-add-support-for-microsoft-os-descriptors.patch +# For bz#1039530 - add support for microsoft os descriptors +Patch949: kvm-usb-add-microsoft-os-descriptors-compat-property.patch +# For bz#1039530 - add support for microsoft os descriptors +Patch950: kvm-usb-hid-add-microsoft-os-descriptor-support.patch +# For bz#1044182 - Relax qemu-kvm stack protection to -fstack-protector-strong +Patch951: kvm-configure-add-option-to-disable-fstack-protect.patch +# For bz#1004197 - Cannot hot-plug nic in windows VM when the vmem is larger +Patch952: kvm-exec-always-use-MADV_DONTFORK.patch +# For bz#1048080 - Qemu-kvm NUMA emulation failed +Patch953: kvm-pc-Save-size-of-RAM-below-4GB.patch +# For bz#1048080 - Qemu-kvm NUMA emulation failed +Patch954: kvm-acpi-Fix-PCI-hole-handling-on-build_srat.patch +# For bz#1017096 - Fail to migrate while the size of migrate-compcache less then 4096 +Patch955: kvm-Add-check-for-cache-size-smaller-than-page-size.patch +# For bz#1047448 - qemu-kvm core dump in src host when do migration with "migrate_set_capability xbzrle on and migrate_set_cache_size 10000G" +Patch956: kvm-XBZRLE-cache-size-should-not-be-larger-than-guest-me.patch +# For bz#1047448 - qemu-kvm core dump in src host when do migration with "migrate_set_capability xbzrle on and migrate_set_cache_size 10000G" +Patch957: kvm-Don-t-abort-on-out-of-memory-when-creating-page-cach.patch +# For bz#1047448 - qemu-kvm core dump in src host when do migration with "migrate_set_capability xbzrle on and migrate_set_cache_size 10000G" +Patch958: kvm-Don-t-abort-on-memory-allocation-error.patch +# For bz#1038540 - qemu-kvm aborted while cancel migration then restart it (with page delta compression) +Patch959: kvm-Set-xbzrle-buffers-to-NULL-after-freeing-them-to-avo.patch +# For bz#1038540 - qemu-kvm aborted while cancel migration then restart it (with page delta compression) +Patch960: kvm-migration-fix-free-XBZRLE-decoded_buf-wrong.patch +# For bz#1047254 - qemu-img failed to commit image +Patch961: kvm-block-resize-backing-file-image-during-offline-commi.patch +# For bz#1047254 - qemu-img failed to commit image +Patch962: kvm-block-resize-backing-image-during-active-layer-commi.patch +# For bz#1047254 - qemu-img failed to commit image +Patch963: kvm-block-update-block-commit-documentation-regarding-im.patch +# For bz#1047254 - qemu-img failed to commit image +Patch964: kvm-block-Fix-bdrv_commit-return-value.patch +# For bz#1047254 - qemu-img failed to commit image +Patch965: kvm-block-remove-QED-.bdrv_make_empty-implementation.patch +# For bz#1047254 - qemu-img failed to commit image +Patch966: kvm-block-remove-qcow2-.bdrv_make_empty-implementation.patch +# For bz#997878 - Kill -SIGUSR1 `pidof qemu-img convert` can not get progress of qemu-img +Patch967: kvm-qemu-progress-Drop-unused-include.patch +# For bz#997878 - Kill -SIGUSR1 `pidof qemu-img convert` can not get progress of qemu-img +Patch968: kvm-qemu-progress-Fix-progress-printing-on-SIGUSR1.patch +# For bz#997878 - Kill -SIGUSR1 `pidof qemu-img convert` can not get progress of qemu-img +Patch969: kvm-Documentation-qemu-img-Mention-SIGUSR1-progress-repo.patch +# For bz#1063942 - configure qemu-kvm with --disable-qom-cast-debug +Patch970: kvm-fix-guest-physical-bits-to-match-host-to-go-beyond-1.patch +# For bz#1065225 - QMP socket breaks on unexpected close +Patch971: kvm-monitor-Cleanup-mon-outbuf-on-write-error.patch +# For bz#1012365 - xhci usb storage lost in guest after wakeup from S3 +Patch972: kvm-xhci-add-support-for-suspend-resume.patch +# For bz#1049176 - qemu-img core dump when using "-o preallocation=metadata,cluster_size=2048k" to create image of libiscsi lun +Patch973: kvm-qcow2-remove-n_start-and-n_end-of-qcow2_alloc_cluste.patch +# For bz#1049176 - qemu-img core dump when using "-o preallocation=metadata,cluster_size=2048k" to create image of libiscsi lun +Patch974: kvm-qcow2-fix-offset-overflow-in-qcow2_alloc_clusters_at.patch +# For bz#1055848 - qemu-img core dumped when cluster size is larger than the default value with opreallocation=metadata specified +Patch975: kvm-qcow2-check-for-NULL-l2meta.patch +# For bz#1055848 - qemu-img core dumped when cluster size is larger than the default value with opreallocation=metadata specified +Patch976: kvm-qemu-iotests-add-test-for-qcow2-preallocation-with-d.patch +# For bz#1069039 - -mem-prealloc option behaviour is opposite to expected +Patch977: kvm-mempath-prefault-fix-off-by-one-error.patch +# For bz#1065873 - qemu-img silently ignores options with multiple -o parameters +Patch978: kvm-qemu-option-has_help_option-and-is_valid_option_list.patch +# For bz#1065873 - qemu-img silently ignores options with multiple -o parameters +Patch979: kvm-qemu-img-create-Support-multiple-o-options.patch +# For bz#1065873 - qemu-img silently ignores options with multiple -o parameters +Patch980: kvm-qemu-img-convert-Support-multiple-o-options.patch +# For bz#1065873 - qemu-img silently ignores options with multiple -o parameters +Patch981: kvm-qemu-img-amend-Support-multiple-o-options.patch +# For bz#1065873 - qemu-img silently ignores options with multiple -o parameters +Patch982: kvm-qemu-img-Allow-o-help-with-incomplete-argument-list.patch +# For bz#1065873 - qemu-img silently ignores options with multiple -o parameters +Patch983: kvm-qemu-iotests-Check-qemu-img-command-line-parsing.patch +# For bz#1026184 - QMP: querying -drive option returns a NULL parameter list +Patch984: kvm-qmp-access-the-local-QemuOptsLists-for-drive-option.patch +# For bz#751937 - qxl triggers assert during iofuzz test +Patch985: kvm-qxl-add-sanity-check.patch +# For bz#1063417 - google stressapptest vs Migration +Patch986: kvm-Fix-two-XBZRLE-corruption-issues.patch +# For bz#1037956 - bnx2x: boot one guest to do vfio-pci with all PFs assigned in same group meet QEMU segmentation fault (Broadcom BCM57810 card) +Patch987: kvm-qdev-monitor-set-DeviceState-opts-before-calling-rea.patch +# For bz#1037956 - bnx2x: boot one guest to do vfio-pci with all PFs assigned in same group meet QEMU segmentation fault (Broadcom BCM57810 card) +Patch988: kvm-vfio-blacklist-loading-of-unstable-roms.patch +# For bz#1072339 - RHEV: Cannot start VMs that have more than 23 snapshots. +Patch989: kvm-block-Set-block-filename-sizes-to-PATH_MAX-instead-o.patch +# For bz#1004773 - Hyper-V guest OS id and hypercall MSRs not migrated +Patch990: kvm-target-i386-Move-hyperv_-static-globals-to-X86CPU.patch +# For bz#1057173 - KVM Hyper-V Enlightenment - New feature - hv-time (QEMU) +Patch991: kvm-Fix-uninitialized-cpuid_data.patch +# For bz#1004773 - Hyper-V guest OS id and hypercall MSRs not migrated +Patch992: kvm-fix-coexistence-of-KVM-and-Hyper-V-leaves.patch +# For bz#1004773 - Hyper-V guest OS id and hypercall MSRs not migrated +Patch993: kvm-make-availability-of-Hyper-V-enlightenments-depe.patch +# For bz#1004773 - Hyper-V guest OS id and hypercall MSRs not migrated +Patch994: kvm-make-hyperv-hypercall-and-guest-os-id-MSRs-migra.patch +# For bz#1004773 - Hyper-V guest OS id and hypercall MSRs not migrated +Patch995: kvm-make-hyperv-vapic-assist-page-migratable.patch +# For bz#1057173 - KVM Hyper-V Enlightenment - New feature - hv-time (QEMU) +Patch996: kvm-target-i386-Convert-hv_relaxed-to-static-property.patch +# For bz#1057173 - KVM Hyper-V Enlightenment - New feature - hv-time (QEMU) +Patch997: kvm-target-i386-Convert-hv_vapic-to-static-property.patch +# For bz#1057173 - KVM Hyper-V Enlightenment - New feature - hv-time (QEMU) +Patch998: kvm-target-i386-Convert-hv_spinlocks-to-static-property.patch +# For bz#1004773 - Hyper-V guest OS id and hypercall MSRs not migrated +Patch999: kvm-target-i386-Convert-check-and-enforce-to-static-prop.patch +# For bz#1057173 - KVM Hyper-V Enlightenment - New feature - hv-time (QEMU) +Patch1000: kvm-target-i386-Cleanup-foo-feature-handling.patch +# For bz#1057173 - KVM Hyper-V Enlightenment - New feature - hv-time (QEMU) +Patch1001: kvm-add-support-for-hyper-v-timers.patch +# For bz#1069541 - Segmentation fault when boot guest with dataplane=on +Patch1002: kvm-dataplane-Fix-startup-race.patch +# For bz#1057471 - fail to do hot-plug with "discard = on" with "Invalid parameter 'discard'" error +Patch1003: kvm-QMP-Relax-__com.redhat_drive_add-parameter-checking.patch +# For bz#993429 - kvm: test maximum number of vcpus supported (rhel7) +Patch1004: kvm-all-exit-in-case-max-vcpus-exceeded.patch +# For bz#1031526 - Can not commit snapshot when disk is using glusterfs:native backend +Patch1005: kvm-block-gluster-code-movements-state-storage-changes.patch +# For bz#1031526 - Can not commit snapshot when disk is using glusterfs:native backend +Patch1006: kvm-block-gluster-add-reopen-support.patch +# For bz#990989 - backport inline header virtio-net optimization +Patch1007: kvm-virtio-net-add-feature-bit-for-any-header-s-g.patch +# For bz#1073774 - e1000 ROM cause migrate fail from RHEL6.5 host to RHEL7.0 host +Patch1008: kvm-pc-Add-RHEL6-e1000-gPXE-image.patch +# For bz#1064018 - abort from conflicting genroms +# For bz#1064018#c6 - abort from conflicting genroms +Patch1009: kvm-loader-rename-in_ram-has_mr.patch +# For bz#1064018 - abort from conflicting genroms +# For bz#1064018#c6 - abort from conflicting genroms +Patch1010: kvm-pc-avoid-duplicate-names-for-ROM-MRs.patch +# For bz#1073728 - progress bar doesn't display when converting with -p +Patch1011: kvm-qemu-img-convert-Fix-progress-output.patch +# For bz#1073728 - progress bar doesn't display when converting with -p +Patch1012: kvm-qemu-iotests-Test-progress-output-for-conversion.patch +# For bz#1067784 - qemu-kvm: block.c:850: bdrv_open_common: Assertion `bs->request_alignment != 0' failed. Aborted (core dumped) +Patch1013: kvm-iscsi-Use-bs-sg-for-everything-else-than-disks.patch +# For bz#1067784 - qemu-kvm: block.c:850: bdrv_open_common: Assertion `bs->request_alignment != 0' failed. Aborted (core dumped) +Patch1014: kvm-block-Fix-bs-request_alignment-assertion-for-bs-sg-1.patch +# For bz#1005103 - Migration should fail when migrate guest offline to a file which is specified to a readonly directory. +Patch1015: kvm-qemu_file-use-fwrite-correctly.patch +# For bz#1005103 - Migration should fail when migrate guest offline to a file which is specified to a readonly directory. +Patch1016: kvm-qemu_file-Fix-mismerge-of-use-fwrite-correctly.patch +# For bz#1046248 - qemu-kvm crash when send "info qtree" after hot plug a device with invalid addr +Patch1017: kvm-qdev-monitor-Set-properties-after-parent-is-assigned.patch +# For bz#1048575 - Segmentation fault occurs after migrate guest(use scsi disk and add stress) to des machine +Patch1018: kvm-block-Update-image-size-in-bdrv_invalidate_cache.patch +# For bz#1048575 - Segmentation fault occurs after migrate guest(use scsi disk and add stress) to des machine +Patch1019: kvm-qcow2-Keep-option-in-qcow2_invalidate_cache.patch +# For bz#1048575 - Segmentation fault occurs after migrate guest(use scsi disk and add stress) to des machine +Patch1020: kvm-qcow2-Check-bs-drv-in-copy_sectors.patch +# For bz#1048575 - Segmentation fault occurs after migrate guest(use scsi disk and add stress) to des machine +Patch1021: kvm-block-bs-drv-may-be-NULL-in-bdrv_debug_resume.patch +# For bz#1048575 - Segmentation fault occurs after migrate guest(use scsi disk and add stress) to des machine +Patch1022: kvm-iotests-Test-corruption-during-COW-request.patch +# For bz#1058173 - qemu-kvm core dump booting guest with scsi-generic disk attached when using built-in iscsi driver +Patch1023: kvm-scsi-Change-scsi-sense-buf-size-to-252.patch +# For bz#1058173 - qemu-kvm core dump booting guest with scsi-generic disk attached when using built-in iscsi driver +Patch1024: kvm-scsi-Fix-migration-of-scsi-sense-data.patch +# For bz#1078809 - can not boot qemu-kvm-rhev with rbd image +Patch1025: kvm-configure-Fix-bugs-preventing-Ceph-inclusion.patch +# For bz#1078308 - EMBARGOED CVE-2014-0150 qemu: virtio-net: fix guest-triggerable buffer overrun [rhel-7.0] +Patch1026: kvm-virtio-net-fix-guest-triggerable-buffer-overrun.patch +# For bz#1080170 - Default CPU model for rhel6.* machine-types is different from RHEL-6 +Patch1027: kvm-pc-Use-cpu64-rhel6-CPU-model-by-default-on-rhel6-mac.patch +# For bz#1078607 - intel 82576 VF not work in windows 2008 x86 - Code 12 [TestOnly] +# For bz#1080170 - Default CPU model for rhel6.* machine-types is different from RHEL-6 +Patch1028: kvm-target-i386-Copy-cpu64-rhel6-definition-into-qemu64.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1029: kvm-qemu-iotests-add-.-check-cloop-support.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1030: kvm-qemu-iotests-add-cloop-input-validation-tests.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1031: kvm-block-cloop-validate-block_size-header-field-CVE-201.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1032: kvm-block-cloop-prevent-offsets_size-integer-overflow-CV.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1033: kvm-block-cloop-refuse-images-with-huge-offsets-arrays-C.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1034: kvm-block-cloop-refuse-images-with-bogus-offsets-CVE-201.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1035: kvm-size-off-by-one.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1036: kvm-qemu-iotests-Support-for-bochs-format.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1037: kvm-bochs-Unify-header-structs-and-make-them-QEMU_PACKED.patch +# For bz#1079339 - CVE-2014-0147 qemu-kvm: Qemu: block: possible crash due signed types or logic error [rhel-7.0] +Patch1038: kvm-bochs-Use-unsigned-variables-for-offsets-and-sizes-C.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1039: kvm-bochs-Check-catalog_size-header-field-CVE-2014-0143.patch +# For bz#1079315 - CVE-2014-0142 qemu-kvm: qemu: crash by possible division by zero [rhel-7.0] +Patch1040: kvm-bochs-Check-extent_size-header-field-CVE-2014-0142.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1041: kvm-bochs-Fix-bitmap-offset-calculation.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1042: kvm-vpc-vhd-add-bounds-check-for-max_table_entries-and-b.patch +# For bz#1079315 - CVE-2014-0142 qemu-kvm: qemu: crash by possible division by zero [rhel-7.0] +Patch1043: kvm-vpc-Validate-block-size-CVE-2014-0142.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1044: kvm-vdi-add-bounds-checks-for-blocks_in_image-and-disk_s.patch +# For bz#1079346 - CVE-2014-0148 qemu-kvm: Qemu: vhdx: bounds checking for block_size and logical_sector_size [rhel-7.0] +Patch1045: kvm-vhdx-Bounds-checking-for-block_size-and-logical_sect.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1046: kvm-curl-check-data-size-before-memcpy-to-local-buffer.-.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1047: kvm-qcow2-Check-header_length-CVE-2014-0144.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1048: kvm-qcow2-Check-backing_file_offset-CVE-2014-0144.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1049: kvm-qcow2-Check-refcount-table-size-CVE-2014-0144.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1050: kvm-qcow2-Validate-refcount-table-offset.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1051: kvm-qcow2-Validate-snapshot-table-offset-size-CVE-2014-0.patch +# For bz#1079455 - CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0] +Patch1052: kvm-qcow2-Validate-active-L1-table-offset-and-size-CVE-2.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1053: kvm-qcow2-Fix-backing-file-name-length-check.patch +# For bz#1079339 - CVE-2014-0147 qemu-kvm: Qemu: block: possible crash due signed types or logic error [rhel-7.0] +Patch1054: kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_refc.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1055: kvm-qcow2-Avoid-integer-overflow-in-get_refcount-CVE-201.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1056: kvm-qcow2-Check-new-refcount-table-size-on-growth.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1057: kvm-qcow2-Fix-types-in-qcow2_alloc_clusters-and-alloc_cl.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1058: kvm-qcow2-Protect-against-some-integer-overflows-in-bdrv.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1059: kvm-qcow2-Fix-new-L1-table-size-check-CVE-2014-0143.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1060: kvm-dmg-coding-style-and-indentation-cleanup.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1061: kvm-dmg-prevent-out-of-bounds-array-access-on-terminator.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1062: kvm-dmg-drop-broken-bdrv_pread-loop.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1063: kvm-dmg-use-appropriate-types-when-reading-chunks.patch +# For bz#1079325 - CVE-2014-0145 qemu-kvm: Qemu: prevent possible buffer overflows [rhel-7.0] +Patch1064: kvm-dmg-sanitize-chunk-length-and-sectorcount-CVE-2014-0.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1065: kvm-dmg-use-uint64_t-consistently-for-sectors-and-length.patch +# For bz#1079325 - CVE-2014-0145 qemu-kvm: Qemu: prevent possible buffer overflows [rhel-7.0] +Patch1066: kvm-dmg-prevent-chunk-buffer-overflow-CVE-2014-0145.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1067: kvm-block-vdi-bounds-check-qemu-io-tests.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1068: kvm-block-Limit-request-size-CVE-2014-0143.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1069: kvm-qcow2-Fix-copy_sectors-with-VM-state.patch +# For bz#1079333 - CVE-2014-0146 qemu-kvm: Qemu: qcow2: NULL dereference in qcow2_open() error path [rhel-7.0] +Patch1070: kvm-qcow2-Fix-NULL-dereference-in-qcow2_open-error-path-.patch +# For bz#1079325 - CVE-2014-0145 qemu-kvm: Qemu: prevent possible buffer overflows [rhel-7.0] +Patch1071: kvm-qcow2-Fix-L1-allocation-size-in-qcow2_snapshot_load_.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1072: kvm-qcow2-Check-maximum-L1-size-in-qcow2_snapshot_load_t.patch +# For bz#1066691 - qemu-kvm: include leftover patches from block layer security audit +Patch1073: kvm-qcow2-Limit-snapshot-table-size.patch +# For bz#1079320 - CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0] +Patch1074: kvm-parallels-Fix-catalog-size-integer-overflow-CVE-2014.patch +# For bz#1079315 - CVE-2014-0142 qemu-kvm: qemu: crash by possible division by zero [rhel-7.0] +Patch1075: kvm-parallels-Sanity-check-for-s-tracks-CVE-2014-0142.patch +# For bz#740107 - [Hitachi 7.0 FEAT] KVM: MCA Recovery for KVM guest OS memory +Patch1076: kvm-fix-machine-check-propagation.patch +# For bz#1081793 - qemu-img core dumped when creating a qcow2 image base on block device(iscsi or libiscsi) +Patch1077: kvm-qcow2-fix-dangling-refcount-table-entry.patch +# For bz#1081393 - qemu-img will prompt that 'leaked clusters were found' while creating images with '-o preallocation=metadata,cluster_size<=1024' +Patch1078: kvm-qcow2-link-all-L2-meta-updates-in-preallocate.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1079: kvm-iscsi-fix-indentation.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1080: kvm-iscsi-correctly-propagate-errors-in-iscsi_open.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1081: kvm-block-iscsi-query-for-supported-VPD-pages.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1082: kvm-block-iscsi-fix-segfault-if-writesame-fails.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1083: kvm-iscsi-recognize-invalid-field-ASCQ-from-WRITE-SAME-c.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1084: kvm-iscsi-ignore-flushes-on-scsi-generic-devices.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1085: kvm-iscsi-always-query-max-WRITE-SAME-length.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1086: kvm-iscsi-Don-t-set-error-if-already-set-in-iscsi_do_inq.patch +# For bz#1083413 - qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400) +Patch1087: kvm-iscsi-Remember-to-set-ret-for-iscsi_open-in-error-ca.patch +# For bz#1027565 - fail to reboot guest after migration from RHEL6.5 host to RHEL7.0 host +Patch1088: kvm-qemu_loadvm_state-shadow-SeaBIOS-for-VM-incoming-fro.patch +# For bz#1085701 - Guest hits call trace migrate from RHEL6.5 to RHEL7.0 host with -M 6.1 & balloon & uhci device +Patch1089: kvm-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-onl.patch +# For bz#1087980 - CVE-2014-2894 qemu-kvm: QEMU: out of bounds buffer accesses, guest triggerable via IDE SMART [rhel-7.1] +Patch1090: kvm-ide-Correct-improper-smart-self-test-counter-reset-i.patch +# For bz#1094285 - Hot plug CPU not working with RHEL6 machine types running on RHEL7 host. +Patch1091: kvm-pc-add-hot_add_cpu-callback-to-all-machine-types.patch +# For bz#1038914 - Guest can't receive any character transmitted from host after hot unplugging virtserialport then hot plugging again +Patch1092: kvm-char-restore-read-callback-on-a-reattached-hotplug-c.patch +# For bz#1052093 - qcow2 corruptions (leaked clusters after installing a rhel7 guest using virtio_scsi) +Patch1093: kvm-qcow2-Free-preallocated-zero-clusters.patch +# For bz#1052093 - qcow2 corruptions (leaked clusters after installing a rhel7 guest using virtio_scsi) +Patch1094: kvm-qemu-iotests-Discard-preallocated-zero-clusters.patch +# For bz#1066338 - Reduce the migrate cache size during migration causes qemu segment fault +Patch1095: kvm-XBZRLE-Fix-qemu-crash-when-resize-the-xbzrle-cache.patch +# For bz#1066338 - Reduce the migrate cache size during migration causes qemu segment fault +Patch1096: kvm-Provide-init-function-for-ram-migration.patch +# For bz#1066338 - Reduce the migrate cache size during migration causes qemu segment fault +Patch1097: kvm-Init-the-XBZRLE.lock-in-ram_mig_init.patch +# For bz#1066338 - Reduce the migrate cache size during migration causes qemu segment fault +Patch1098: kvm-XBZRLE-Fix-one-XBZRLE-corruption-issues.patch +# For bz#1074913 - migration can not finish with 1024k 'remaining ram' left after hotunplug 4 nics +Patch1099: kvm-Count-used-RAMBlock-pages-for-migration_dirty_pages.patch +# For bz#1095678 - CVE-2013-4148 qemu-kvm: qemu: virtio-net: buffer overflow on invalid state load [rhel-7.1] +Patch1100: kvm-virtio-net-fix-buffer-overflow-on-invalid-state-load.patch +# For bz#1095690 - CVE-2013-4150 qemu-kvm: qemu: virtio-net: out-of-bounds buffer write on invalid state load [rhel-7.1] +Patch1101: kvm-virtio-net-out-of-bounds-buffer-write-on-invalid-sta.patch +# For bz#1095685 - CVE-2013-4149 qemu-kvm: qemu: virtio-net: out-of-bounds buffer write on load [rhel-7.1] +Patch1102: kvm-virtio-net-out-of-bounds-buffer-write-on-load.patch +# For bz#1095695 - CVE-2013-4151 qemu-kvm: qemu: virtio: out-of-bounds buffer write on invalid state load [rhel-7.1] +Patch1103: kvm-virtio-out-of-bounds-buffer-write-on-invalid-state-l.patch +# For bz#1095738 - CVE-2013-6399 qemu-kvm: qemu: virtio: buffer overrun on incoming migration [rhel-7.1] +Patch1104: kvm-virtio-avoid-buffer-overrun-on-incoming-migration.patch +# For bz#1095742 - CVE-2013-4542 qemu-kvm: qemu: virtio-scsi: buffer overrun on invalid state load [rhel-7.1] +Patch1105: kvm-virtio-scsi-fix-buffer-overrun-on-invalid-state-load.patch +# For bz#1095783 - CVE-2014-0182 qemu-kvm: qemu: virtio: out-of-bounds buffer write on state load with invalid config_len [rhel-7.1] +Patch1106: kvm-virtio-validate-config_len-on-load.patch +# For bz#1095766 - CVE-2013-4535 CVE-2013-4536 qemu-kvm: qemu: virtio: insufficient validation of num_sg when mapping [rhel-7.1] +Patch1107: kvm-virtio-validate-num_sg-when-mapping.patch +# For bz#1095766 - CVE-2013-4535 CVE-2013-4536 qemu-kvm: qemu: virtio: insufficient validation of num_sg when mapping [rhel-7.1] +Patch1108: kvm-virtio-allow-mapping-up-to-max-queue-size.patch +# For bz#1095747 - CVE-2013-4541 qemu-kvm: qemu: usb: insufficient sanity checking of setup_index+setup_len in post_load [rhel-7.1] +Patch1109: kvm-usb-sanity-check-setup_index-setup_len-in-post_load.patch +# For bz#1095743 - CVE-2013-4541 qemu-kvm: qemu: usb: insufficient sanity checking of setup_index+setup_len in post_load [rhel-6.5.z] +# For bz#1095747 - CVE-2013-4541 qemu-kvm: qemu: usb: insufficient sanity checking of setup_index+setup_len in post_load [rhel-7.1] +Patch1110: kvm-usb-sanity-check-setup_index-setup_len-in-post_l2.patch +# For bz#1095716 - CVE-2013-4529 qemu-kvm: qemu: hw/pci/pcie_aer.c: buffer overrun on invalid state load [rhel-7.1] +Patch1111: kvm-vmstate-reduce-code-duplication.patch +# For bz#1095716 - CVE-2013-4529 qemu-kvm: qemu: hw/pci/pcie_aer.c: buffer overrun on invalid state load [rhel-7.1] +Patch1112: kvm-vmstate-add-VMS_MUST_EXIST.patch +# For bz#1095716 - CVE-2013-4529 qemu-kvm: qemu: hw/pci/pcie_aer.c: buffer overrun on invalid state load [rhel-7.1] +Patch1113: kvm-vmstate-add-VMSTATE_VALIDATE.patch +# For bz#1095707 - CVE-2013-4527 qemu-kvm: qemu: hpet: buffer overrun on invalid state load [rhel-7.1] +Patch1114: kvm-hpet-fix-buffer-overrun-on-invalid-state-load.patch +# For bz#1095716 - CVE-2013-4529 qemu-kvm: qemu: hw/pci/pcie_aer.c: buffer overrun on invalid state load [rhel-7.1] +Patch1115: kvm-hw-pci-pcie_aer.c-fix-buffer-overruns-on-invalid-sta.patch +# For bz#1096829 - CVE-2014-3461 qemu-kvm: Qemu: usb: fix up post load checks [rhel-7.1] +Patch1116: kvm-usb-fix-up-post-load-checks.patch +# For bz#1097230 - CVE-2014-0222 qemu-kvm: Qemu: qcow1: validate L2 table size to avoid integer overflows [rhel-7.1] +Patch1117: kvm-qcow-correctly-propagate-errors.patch +# For bz#1097230 - CVE-2014-0222 qemu-kvm: Qemu: qcow1: validate L2 table size to avoid integer overflows [rhel-7.1] +Patch1118: kvm-qcow1-Make-padding-in-the-header-explicit.patch +# For bz#1097230 - CVE-2014-0222 qemu-kvm: Qemu: qcow1: validate L2 table size to avoid integer overflows [rhel-7.1] +Patch1119: kvm-qcow1-Check-maximum-cluster-size.patch +# For bz#1097230 - CVE-2014-0222 qemu-kvm: Qemu: qcow1: validate L2 table size to avoid integer overflows [rhel-7.1] +Patch1120: kvm-qcow1-Validate-L2-table-size-CVE-2014-0222.patch +# For bz#1097237 - CVE-2014-0223 qemu-kvm: Qemu: qcow1: validate image size to avoid out-of-bounds memory access [rhel-7.1] +Patch1121: kvm-qcow1-Validate-image-size-CVE-2014-0223.patch +# For bz#1097237 - CVE-2014-0223 qemu-kvm: Qemu: qcow1: validate image size to avoid out-of-bounds memory access [rhel-7.1] +Patch1122: kvm-qcow1-Stricter-backing-file-length-check.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1123: kvm-zero-initialize-KVM_SET_GSI_ROUTING-input.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1124: kvm-skip-system-call-when-msi-route-is-unchanged.patch +# For bz#1113009 - Migration failed with virtio-blk from RHEL6.5.0 host to RHEL7.0 host +Patch1125: kvm-Allow-mismatched-virtio-config-len.patch +# For bz#1074219 - qemu core dump when install a RHEL.7 guest(xhci) with migration +Patch1126: kvm-xhci-fix-overflow-in-usb_xhci_post_load.patch +# For bz#1086598 - migrate_cancel wont take effect on previouly wrong migrate -d cmd +Patch1127: kvm-migration-qmp_migrate-keep-working-after-syntax-erro.patch +# For bz#1026314 - qemu-kvm hang when use '-sandbox on'+'vnc'+'hda' +Patch1128: kvm-seccomp-add-shmctl-mlock-and-munlock-to-the-syscall-.patch +# For bz#1076326 - qemu-kvm does not quit when booting guest w/ 161 vcpus and "-no-kvm" +Patch1129: kvm-exit-when-no-kvm-and-vcpu-count-160.patch +# For bz#1086987 - src qemu crashed when starting migration in inmigrate mode +Patch1130: kvm-Disallow-outward-migration-while-awaiting-incoming-m.patch +# For bz#1088695 - there are four "gluster" in qemu-img supported format list +# For bz#1093983 - there are three "nbd" in qemu-img supported format list +Patch1131: kvm-block-Ignore-duplicate-or-NULL-format_name-in-bdrv_i.patch +# For bz#1097020 - [RFE] qemu-img: Add/improve Disk2VHD tools creating VHDX images +Patch1132: kvm-block-vhdx-account-for-identical-header-sections.patch +# For bz#1095877 - segmentation fault in qemu-kvm due to use-after-free of a SCSIGenericReq (host device pass-through) +Patch1133: kvm-aio-Fix-use-after-free-in-cancellation-path.patch +# For bz#1021788 - the error message "scsi generic interface too old" is wrong more often than not +Patch1134: kvm-scsi-disk-Improve-error-messager-if-can-t-get-versio.patch +# For bz#1021788 - the error message "scsi generic interface too old" is wrong more often than not +Patch1135: kvm-scsi-Improve-error-messages-more.patch +# For bz#1096645 - [FJ7.0 Bug] RHEL7.0 guest attaching 150 or more virtio-blk disks fails to start up +Patch1136: kvm-memory-Don-t-call-memory_region_update_coalesced_ran.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +Patch1137: kvm-kvmclock-Ensure-time-in-migration-never-goes-backwar.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +Patch1138: kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock_cu.patch +# For bz#990724 - qemu-kvm failing when invalid machine type is provided +Patch1139: kvm-vl.c-Output-error-on-invalid-machine-type.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1140: kvm-migration-dump-vmstate-info-as-a-json-file-for-stati.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1141: kvm-vmstate-static-checker-script-to-validate-vmstate-ch.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1142: kvm-tests-vmstate-static-checker-add-dump1-and-dump2-fil.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1143: kvm-tests-vmstate-static-checker-incompat-machine-types.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1144: kvm-tests-vmstate-static-checker-add-version-error-in-ma.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1145: kvm-tests-vmstate-static-checker-version-mismatch-inside.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1146: kvm-tests-vmstate-static-checker-minimum_version_id-chec.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1147: kvm-tests-vmstate-static-checker-remove-a-section.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1148: kvm-tests-vmstate-static-checker-remove-a-field.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1149: kvm-tests-vmstate-static-checker-remove-last-field-in-a-.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1150: kvm-tests-vmstate-static-checker-change-description-name.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1151: kvm-tests-vmstate-static-checker-remove-Fields.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1152: kvm-tests-vmstate-static-checker-remove-Description.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1153: kvm-tests-vmstate-static-checker-remove-Description-insi.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1154: kvm-tests-vmstate-static-checker-remove-a-subsection.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1155: kvm-tests-vmstate-static-checker-remove-Subsections.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1156: kvm-tests-vmstate-static-checker-add-substructure-for-us.patch +# For bz#1118707 - VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info +Patch1157: kvm-tests-vmstate-static-checker-add-size-mismatch-insid.patch +# For bz#1116728 - Backport qemu_bh_schedule() race condition fix +Patch1158: kvm-aio-fix-qemu_bh_schedule-bh-ctx-race-condition.patch +# For bz#999789 - qemu should give a more friendly prompt when didn't specify read-only for VMDK format disk +Patch1159: kvm-block-Improve-driver-whitelist-checks.patch +# For bz#1029271 - Format specific information (create type) was wrong when create it specified subformat='streamOptimized' +Patch1160: kvm-vmdk-Fix-format-specific-information-create-type-for.patch +# For bz#1095645 - vectors of virtio-scsi-pci will be 0 when set vectors>=129 +Patch1161: kvm-virtio-pci-Report-an-error-when-msix-vectors-init-fa.patch +# For bz#1096576 - QEMU core dumped when boot up two scsi-hd disk on the same virtio-scsi-pci controller in Intel host +Patch1162: kvm-scsi-Report-error-when-lun-number-is-in-use.patch +# For bz#1017685 - Gluster etc. should not be a dependency of vscclient and libcacard +Patch1163: kvm-util-Split-out-exec_dir-from-os_find_datadir.patch +# For bz#1017685 - Gluster etc. should not be a dependency of vscclient and libcacard +Patch1164: kvm-rules.mak-fix-obj-to-a-real-relative-path.patch +# For bz#1017685 - Gluster etc. should not be a dependency of vscclient and libcacard +Patch1165: kvm-rules.mak-allow-per-object-cflags-and-libs.patch +# For bz#1017685 - Gluster etc. should not be a dependency of vscclient and libcacard +Patch1166: kvm-block-use-per-object-cflags-and-libs.patch +# For bz#1039791 - qemu-img creates truncated VMDK image with subformat=twoGbMaxExtentFlat +Patch1167: kvm-vmdk-Fix-creating-big-description-file.patch +# For bz#1065724 - rx filter incorrect when guest disables VLAN filtering +Patch1168: kvm-virtio-net-Do-not-filter-VLANs-without-F_CTRL_VLAN.patch +# For bz#1065724 - rx filter incorrect when guest disables VLAN filtering +Patch1169: kvm-virtio-net-add-vlan-receive-state-to-RxFilterInfo.patch +# For bz#1116941 - Return value of virtio_load not checked in virtio_rng_load +Patch1170: kvm-virtio-rng-check-return-value-of-virtio_load.patch +# For bz#1074403 - qemu-kvm can not give any warning hint when set sndbuf with negative value +Patch1171: kvm-qapi-treat-all-negative-return-of-strtosz_suffix-as-.patch +# For bz#1107821 - rdma migration: seg if destination isn't listening +Patch1172: kvm-rdma-bug-fixes.patch +# For bz#1122151 - Pass close from qemu-ga +Patch1173: kvm-virtio-serial-report-frontend-connection-state-via-m.patch +# For bz#1122151 - Pass close from qemu-ga +Patch1174: kvm-char-report-frontend-open-closed-state-in-query-char.patch +# For bz#1129552 - backport "acpi: fix tables for no-hpet configuration" +Patch1175: kvm-acpi-fix-tables-for-no-hpet-configuration.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1176: kvm-mirror-Fix-resource-leak-when-bdrv_getlength-fails.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1177: kvm-blockjob-Add-block_job_yield.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1178: kvm-mirror-Go-through-ready-complete-process-for-0-len-i.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1179: kvm-qemu-iotests-Test-BLOCK_JOB_READY-event-for-0Kb-imag.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1180: kvm-block-make-top-argument-to-block-commit-optional.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1181: kvm-qemu-iotests-Test-0-length-image-for-mirror.patch +# For bz#1130603 - advertise active commit to libvirt +Patch1182: kvm-mirror-Fix-qiov-size-for-short-requests.patch +# For bz#1064260 - Handle properly --enable-fstack-protector option +Patch1183: kvm-Enforce-stack-protector-usage.patch +# For bz#1134408 - [HP 7.1 FEAT] Increase qemu-kvm's VCPU limit to 240 +Patch1184: kvm-pc-increase-maximal-VCPU-count-to-240.patch +# For bz#1136534 - glusterfs backend does not support discard +Patch1185: kvm-gluster-Add-discard-support-for-GlusterFS-block-driv.patch +# For bz#1088150 - qemu-img coredumpd when try to create a gluster format image +Patch1186: kvm-gluster-default-scheme-to-gluster-and-host-to-localh.patch +# For bz#996011 - vlan and queues options cause core dumped when qemu-kvm process quit(or ctrl+c) +Patch1187: kvm-qdev-properties-system.c-Allow-vlan-or-netdev-for-de.patch +# For bz#1054077 - qemu crash when reboot win7 guest with spice display +Patch1189: kvm-spice-move-qemu_spice_display_-from-spice-graphics-t.patch +# For bz#1054077 - qemu crash when reboot win7 guest with spice display +Patch1190: kvm-spice-move-spice_server_vm_-start-stop-calls-into-qe.patch +# For bz#1054077 - qemu crash when reboot win7 guest with spice display +Patch1191: kvm-spice-stop-server-for-qxl-hard-reset.patch +# For bz#1064156 - [qxl] The guest show black screen while resumed guest which managedsaved in pmsuspended status. +Patch1192: kvm-qemu-Adjust-qemu-wakeup.patch +# For bz#1122147 - CVE-2014-5263 vmstate_xhci_event: fix unterminated field list +Patch1193: kvm-vmstate_xhci_event-fix-unterminated-field-list.patch +# For bz#1122147 - CVE-2014-5263 vmstate_xhci_event: fix unterminated field list +Patch1194: kvm-vmstate_xhci_event-bug-compat-with-RHEL-7.0-RHEL-onl.patch +# For bz#1139702 - pflash (UEFI varstore) migration shortcut for libvirt [RHEL] +Patch1195: kvm-pflash_cfi01-write-flash-contents-to-bdrv-on-incomin.patch +# For bz#1123372 - qemu-kvm crashed when doing iofuzz testing +Patch1196: kvm-ide-test-Add-enum-value-for-DEV.patch +# For bz#1123372 - qemu-kvm crashed when doing iofuzz testing +Patch1197: kvm-ide-test-Add-FLUSH-CACHE-test-case.patch +# For bz#1123372 - qemu-kvm crashed when doing iofuzz testing +Patch1198: kvm-ide-Fix-segfault-when-flushing-a-device-that-doesn-t.patch +# For bz#1139118 - CVE-2014-3615 qemu-kvm: Qemu: crash when guest sets high resolution [rhel-7.1] +Patch1201: kvm-vbe-make-bochs-dispi-interface-return-the-correct-me.patch +# For bz#1139118 - CVE-2014-3615 qemu-kvm: Qemu: crash when guest sets high resolution [rhel-7.1] +Patch1202: kvm-vbe-rework-sanity-checks.patch +# For bz#1139118 - CVE-2014-3615 qemu-kvm: Qemu: crash when guest sets high resolution [rhel-7.1] +Patch1203: kvm-spice-display-add-display-channel-id-to-the-debug-me.patch +# For bz#1139118 - CVE-2014-3615 qemu-kvm: Qemu: crash when guest sets high resolution [rhel-7.1] +Patch1204: kvm-spice-make-sure-we-don-t-overflow-ssd-buf.patch +# For bz#1105880 - bug in scsi_block_new_request() function introduced by upstream commit 137745c5c60f083ec982fe9e861e8c16ebca1ba8 +Patch1205: kvm-scsi-disk-fix-bug-in-scsi_block_new_request-introduc.patch +# For bz#1131316 - fail to specify wwn for virtual IDE CD-ROM +Patch1206: kvm-ide-Add-wwn-support-to-IDE-ATAPI-drive.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1207: kvm-vmdk-Allow-vmdk_create-to-work-with-protocol.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1208: kvm-block-make-vdi-bounds-check-match-upstream.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1209: kvm-vdi-say-why-an-image-is-bad.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1210: kvm-block-do-not-abuse-EMEDIUMTYPE.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1211: kvm-cow-correctly-propagate-errors.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1212: kvm-block-Use-correct-width-in-format-strings.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1213: kvm-vdi-remove-double-conversion.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1214: kvm-block-vdi-Error-out-immediately-in-vdi_create.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1215: kvm-vpc-Implement-.bdrv_has_zero_init.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1216: kvm-block-vpc-use-QEMU_PACKED-for-on-disk-structures.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1217: kvm-block-allow-bdrv_unref-to-be-passed-NULL-pointers.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1218: kvm-block-vdi-use-block-layer-ops-in-vdi_create-instead-.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1219: kvm-block-use-the-standard-ret-instead-of-result.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1220: kvm-block-vpc-use-block-layer-ops-in-vpc_create-instead-.patch +# For bz#1098086 - RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs) +Patch1221: kvm-block-iotest-update-084-to-test-static-VDI-image-cre.patch +# For bz#1122925 - Maintain relative path to backing file image during live merge (block-commit) +Patch1222: kvm-block-add-helper-function-to-determine-if-a-BDS-is-i.patch +# For bz#1122925 - Maintain relative path to backing file image during live merge (block-commit) +Patch1223: kvm-block-extend-block-commit-to-accept-a-string-for-the.patch +# For bz#1122925 - Maintain relative path to backing file image during live merge (block-commit) +Patch1224: kvm-block-add-backing-file-option-to-block-stream.patch +# For bz#1122925 - Maintain relative path to backing file image during live merge (block-commit) +Patch1225: kvm-block-add-__com.redhat_change-backing-file-qmp-comma.patch +# For bz#1116117 - [Intel 7.1 FEAT] Broadwell new instructions support for KVM - qemu-kvm +Patch1226: kvm-target-i386-Broadwell-CPU-model.patch +# For bz#1116117 - [Intel 7.1 FEAT] Broadwell new instructions support for KVM - qemu-kvm +Patch1227: kvm-pc-Add-Broadwell-CPUID-compatibility-bits.patch +# For bz#1142290 - guest is stuck when setting balloon memory with large guest-stats-polling-interval +Patch1228: kvm-virtio-balloon-fix-integer-overflow-in-memory-stats-.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1229: kvm-usb-hcd-xhci-QOM-Upcast-Sweep.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1230: kvm-usb-hcd-xhci-QOM-parent-field-cleanup.patch +# For bz#1046873 - fail to be recognized the hotpluging usb-storage device with xhci controller in win2012R2 guest +Patch1231: kvm-uhci-egsm-fix.patch +# For bz#1046574 - fail to passthrough the USB speaker redirected from usb-redir with xhci controller +# For bz#1088116 - qemu crash when device_del usb-redir +Patch1232: kvm-usb-redir-fix-use-after-free.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1233: kvm-xhci-remove-leftover-debug-printf.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1234: kvm-xhci-add-tracepoint-for-endpoint-state-changes.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1235: kvm-xhci-add-port-to-slot_address-tracepoint.patch +# For bz#1075846 - qemu-kvm core dumped when hotplug/unhotplug USB3.0 device multi times +Patch1236: kvm-usb-parallelize-usb3-streams.patch +# For bz#1075846 - qemu-kvm core dumped when hotplug/unhotplug USB3.0 device multi times +Patch1237: kvm-xhci-Init-a-transfers-xhci-slotid-and-epid-member-on.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1238: kvm-xhci-Add-xhci_epid_to_usbep-helper-function.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1239: kvm-xhci-Fix-memory-leak-on-xhci_disable_ep.patch +# For bz#1075846 - qemu-kvm core dumped when hotplug/unhotplug USB3.0 device multi times +Patch1240: kvm-usb-Also-reset-max_packet_size-on-ep_reset.patch +# For bz#1075846 - qemu-kvm core dumped when hotplug/unhotplug USB3.0 device multi times +Patch1241: kvm-usb-Fix-iovec-memleak-on-combined-packet-free.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1242: kvm-usb-hcd-xhci-Remove-unused-sstreamsm-member-from-XHC.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1243: kvm-usb-hcd-xhci-Remove-unused-cancelled-member-from-XHC.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1244: kvm-usb-hcd-xhci-Report-completion-of-active-transfer-wi.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1245: kvm-usb-hcd-xhci-Update-endpoint-context-dequeue-pointer.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1246: kvm-xhci-Add-a-few-missing-checks-for-disconnected-devic.patch +# For bz#1111450 - Guest crash when hotplug usb while disable virt_use_usb +Patch1247: kvm-usb-Add-max_streams-attribute-to-endpoint-info.patch +# For bz#1111450 - Guest crash when hotplug usb while disable virt_use_usb +Patch1248: kvm-usb-Add-usb_device_alloc-free_streams.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1249: kvm-xhci-Call-usb_device_alloc-free_streams.patch +# For bz#1111450 - Guest crash when hotplug usb while disable virt_use_usb +Patch1250: kvm-uhci-invalidate-queue-on-device-address-changes.patch +# For bz#949385 - passthrough USB speaker to win2012 guest fail to work well +Patch1251: kvm-xhci-iso-fix-time-calculation.patch +# For bz#949385 - passthrough USB speaker to win2012 guest fail to work well +Patch1252: kvm-xhci-iso-allow-for-some-latency.patch +# For bz#980747 - flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller +Patch1253: kvm-xhci-switch-debug-printf-to-tracepoint.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1254: kvm-xhci-use-DPRINTF-instead-of-fprintf-stderr.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1255: kvm-xhci-child-detach-fix.patch +# For bz#1075846 - qemu-kvm core dumped when hotplug/unhotplug USB3.0 device multi times +Patch1256: kvm-usb-add-usb_pick_speed.patch +# For bz#980833 - xhci: FIXME: endpoint stopped w/ xfers running, data might be lost +Patch1257: kvm-xhci-make-port-reset-trace-point-more-verbose.patch +# For bz#1111450 - Guest crash when hotplug usb while disable virt_use_usb +Patch1258: kvm-usb-initialize-libusb_device-to-avoid-crash.patch +# For bz#1097363 - qemu ' KVM internal error. Suberror: 1' when query cpu frequently during pxe boot in Intel "Q95xx" host +Patch1259: kvm-target-i386-get-CPL-from-SS.DPL.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1260: kvm-trace-use-unique-Red-Hat-version-number-in-simpletra.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1261: kvm-trace-add-pid-field-to-simpletrace-record.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1262: kvm-simpletrace-add-support-for-trace-record-pid-field.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1263: kvm-simpletrace-add-simpletrace.py-no-header-option.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1264: kvm-trace-extract-stap_escape-function-for-reuse.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1265: kvm-trace-add-tracetool-simpletrace_stap-format.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1266: kvm-trace-install-simpletrace-SystemTap-tapset.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1267: kvm-trace-install-trace-events-file.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1268: kvm-trace-add-SystemTap-init-scripts-for-simpletrace-bri.patch +# For bz#1088112 - [Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing +Patch1269: kvm-trace-add-systemtap-initscript-README-file-to-RPM.patch +# For bz#1152969 - Qemu-kvm got stuck when migrate to wrong RDMA ip +Patch1270: kvm-rdma-Fix-block-during-rdma-migration.patch +# For bz#1026314 - BUG: qemu-kvm hang when use '-sandbox on'+'vnc'+'hda' +Patch1271: kvm-seccomp-add-semctl-to-the-syscall-whitelist.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +# For bz#1130428 - After migration of RHEL7.1 guest with "-vga qxl", GUI console is hang +Patch1272: kvm-Revert-kvmclock-Ensure-proper-env-tsc-value-for-kvmc.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +# For bz#1130428 - After migration of RHEL7.1 guest with "-vga qxl", GUI console is hang +Patch1273: kvm-Revert-kvmclock-Ensure-time-in-migration-never-goes-.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +# For bz#1130428 - After migration of RHEL7.1 guest with "-vga qxl", GUI console is hang +Patch1274: kvm-Introduce-cpu_clean_all_dirty.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +# For bz#1130428 - After migration of RHEL7.1 guest with "-vga qxl", GUI console is hang +Patch1275: kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock.v2.patch +# For bz#1098602 - kvmclock: Ensure time in migration never goes backward (backport) +# For bz#1130428 - After migration of RHEL7.1 guest with "-vga qxl", GUI console is hang +Patch1276: kvm-kvmclock-Ensure-time-in-migration-never-goes-back.v2.patch +# For bz#1144820 - CVE-2014-3640 qemu-kvm: qemu: slirp: NULL pointer deref in sosendto() [rhel-7.1] +Patch1277: kvm-slirp-udp-fix-NULL-pointer-dereference-because-of-un.patch +# For bz#1049734 - PCI: QEMU crash on illegal operation: attaching a function to a non multi-function device +Patch1278: kvm-hw-pci-fix-error-flow-in-pci-multifunction-init.patch +# For bz#1111107 - Remove Q35 machine type from qemu-kvm +Patch1279: kvm-rhel-Drop-machine-type-pc-q35-rhel7.0.0.patch +# For bz#1088822 - hot-plug a virtio-scsi disk via 'blockdev-add' always cause QEMU quit +Patch1280: kvm-virtio-scsi-Plug-memory-leak-on-virtio_scsi_push_eve.patch +# For bz#1089606 - QEMU will not reject invalid number of queues (num_queues = 0) specified for virtio-scsi +Patch1281: kvm-virtio-scsi-Report-error-if-num_queues-is-0-or-too-l.patch +# For bz#1089606 - QEMU will not reject invalid number of queues (num_queues = 0) specified for virtio-scsi +Patch1282: kvm-virtio-scsi-Fix-memory-leak-when-realize-failed.patch +# For bz#1089606 - QEMU will not reject invalid number of queues (num_queues = 0) specified for virtio-scsi +Patch1283: kvm-virtio-scsi-Fix-num_queue-input-validation.patch +# For bz#1104748 - 48% reduction in IO performance for KVM guest, io=native +Patch1284: kvm-Revert-linux-aio-use-event-notifiers.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1285: kvm-libcacard-link-against-qemu-error.o-for-error_report.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1286: kvm-error-Add-error_abort.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1287: kvm-blockdev-Fail-blockdev-add-with-encrypted-images.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1288: kvm-blockdev-Fix-NULL-pointer-dereference-in-blockdev-ad.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1289: kvm-qemu-iotests-Test-a-few-blockdev-add-error-cases.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1290: kvm-block-Add-errp-to-bdrv_new.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1291: kvm-qemu-img-Avoid-duplicate-block-device-IDs.patch +# For bz#1088176 - QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug +Patch1292: kvm-block-Catch-duplicate-IDs-in-bdrv_new.patch +# For bz#1138691 - Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) +Patch1293: kvm-qemu-img-Allow-source-cache-mode-specification.patch +# For bz#1138691 - Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) +Patch1294: kvm-qemu-img-Allow-cache-mode-specification-for-amend.patch +# For bz#1138691 - Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) +Patch1295: kvm-qemu-img-clarify-src_cache-option-documentation.patch +# For bz#1138691 - Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) +Patch1296: kvm-qemu-img-fix-rebase-src_cache-option-documentation.patch +# For bz#1138691 - Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend) +Patch1297: kvm-qemu-img-fix-img_compare-flags-error-path.patch +# For bz#1141667 - Qemu crashed if reboot guest after hot remove AC97 sound device +Patch1298: kvm-ac97-register-reset-via-qom.patch +# For bz#1085232 - Ilegal guest requests on block devices pause the VM +Patch1299: kvm-virtio-blk-Factor-common-checks-out-of-virtio_blk_ha.patch +# For bz#1085232 - Ilegal guest requests on block devices pause the VM +Patch1300: kvm-virtio-blk-Bypass-error-action-and-I-O-accounting-on.patch +# For bz#1085232 - Ilegal guest requests on block devices pause the VM +Patch1301: kvm-virtio-blk-Treat-read-write-beyond-end-as-invalid.patch +# For bz#1085232 - Ilegal guest requests on block devices pause the VM +Patch1302: kvm-ide-Treat-read-write-beyond-end-as-invalid.patch +# For bz#1085232 - Ilegal guest requests on block devices pause the VM +Patch1303: kvm-ide-only-constrain-read-write-requests-to-drive-size.patch +# For bz#1161563 - invalid QEMU NOTEs in vmcore that is dumped for multi-VCPU guests +Patch1304: kvm-dump-RHEL-specific-fix-for-CPUState-bug-introduced-b.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1305: kvm-dump-guest-memory-Check-for-the-correct-return-value.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1306: kvm-dump-const-qualify-the-buf-of-WriteCoreDumpFunction.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1307: kvm-dump-add-argument-to-write_elfxx_notes.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1308: kvm-dump-add-API-to-write-header-of-flatten-format.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1309: kvm-dump-add-API-to-write-vmcore.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1310: kvm-dump-add-API-to-write-elf-notes-to-buffer.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1311: kvm-dump-add-support-for-lzo-snappy.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1312: kvm-dump-add-members-to-DumpState-and-init-some-of-them.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1313: kvm-dump-add-API-to-write-dump-header.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1314: kvm-dump-add-API-to-write-dump_bitmap.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1315: kvm-dump-add-APIs-to-operate-DataCache.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1316: kvm-dump-add-API-to-write-dump-pages.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1317: kvm-dump-Drop-qmp_dump_guest_memory-stub-and-build-for-a.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1318: kvm-dump-make-kdump-compressed-format-available-for-dump.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1319: kvm-Define-the-architecture-for-compressed-dump-format.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1320: kvm-dump-add-query-dump-guest-memory-capability-command.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1321: kvm-dump-Drop-pointless-error_is_set-DumpState-member-er.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1322: kvm-dump-fill-in-the-flat-header-signature-more-pleasing.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1323: kvm-dump-simplify-write_start_flat_header.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1324: kvm-dump-eliminate-DumpState.page_shift-guest-s-page-shi.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1325: kvm-dump-eliminate-DumpState.page_size-guest-s-page-size.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1326: kvm-dump-select-header-bitness-based-on-ELF-class-not-EL.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1327: kvm-dump-hoist-lzo_init-from-get_len_buf_out-to-dump_ini.patch +# For bz#1157798 - [FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command +Patch1328: kvm-dump-simplify-get_len_buf_out.patch +# For bz#1087724 - [Fujitsu 7.1 FEAT]: qemu-img should use fallocate() system call for "preallocation=full" option +Patch1329: kvm-rename-parse_enum_option-to-qapi_enum_parse-and-make.patch +# For bz#1087724 - [Fujitsu 7.1 FEAT]: qemu-img should use fallocate() system call for "preallocation=full" option +Patch1330: kvm-qapi-introduce-PreallocMode-and-new-PreallocModes-fu.patch +# For bz#1087724 - [Fujitsu 7.1 FEAT]: qemu-img should use fallocate() system call for "preallocation=full" option +Patch1331: kvm-raw-posix-Add-falloc-and-full-preallocation-option.patch +# For bz#1087724 - [Fujitsu 7.1 FEAT]: qemu-img should use fallocate() system call for "preallocation=full" option +Patch1332: kvm-qcow2-Add-falloc-and-full-preallocation-option.patch +# For bz#1161890 - [abrt] qemu-kvm: pixman_image_get_data(): qemu-kvm killed by SIGSEGV +Patch1333: kvm-vga-fix-invalid-read-after-free.patch +# For bz#1140618 - Should replace "qemu-system-i386" by "/usr/libexec/qemu-kvm" in manpage of qemu-kvm for our official qemu-kvm build +Patch1334: kvm-Use-qemu-kvm-in-documentation-instead-of-qemu-system.patch +# For bz#1157645 - CVE-2014-7815 qemu-kvm: qemu: vnc: insufficient bits_per_pixel from the client sanitization [rhel-7.1] +Patch1335: kvm-vnc-sanitize-bits_per_pixel-from-the-client.patch +# For bz#1138639 - fail to login spice session with password + expire time +Patch1336: kvm-spice-call-qemu_spice_set_passwd-during-init.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1337: kvm-block-raw-posix-Try-both-FIEMAP-and-SEEK_HOLE.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1338: kvm-block-raw-posix-Fix-disk-corruption-in-try_fiemap.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1339: kvm-block-raw-posix-use-seek_hole-ahead-of-fiemap.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1340: kvm-raw-posix-Fix-raw_co_get_block_status-after-EOF.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1341: kvm-raw-posix-raw_co_get_block_status-return-value.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1342: kvm-raw-posix-SEEK_HOLE-suffices-get-rid-of-FIEMAP.patch +# For bz#1160237 - qemu-img convert intermittently corrupts output images +Patch1343: kvm-raw-posix-The-SEEK_HOLE-code-is-flawed-rewrite-it.patch +# For bz#1071776 - Migration "expected downtime" does not refresh after reset to a new value +Patch1344: kvm-migration-static-variables-will-not-be-reset-at-seco.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1345: kvm-vfio-pci-Add-debug-config-options-to-disable-MSI-X-K.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1346: kvm-vfio-correct-debug-macro-typo.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1347: kvm-vfio-pci-Fix-MSI-X-debug-code.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1348: kvm-vfio-pci-Fix-MSI-X-masking-performance.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1349: kvm-vfio-Fix-MSI-X-vector-expansion.patch +# For bz#1098976 - 2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput +Patch1350: kvm-vfio-Don-t-cache-MSIMessage.patch +# For bz#1046007 - qemu-kvm aborted when hot plug PCI device to guest with romfile and rombar=0 +Patch1351: kvm-hw-pci-fixed-error-flow-in-pci_qdev_init.patch +# For bz#1046007 - qemu-kvm aborted when hot plug PCI device to guest with romfile and rombar=0 +Patch1352: kvm-hw-pci-fixed-hotplug-crash-when-using-rombar-0-with-.patch +# For bz#1074219 - qemu core dump when install a RHEL.7 guest(xhci) with migration +Patch1353: kvm-xhci-add-sanity-checks-to-xhci_lookup_uport.patch +# For bz#1140742 - Enable native support for Ceph +Patch1354: kvm-Revert-Build-ceph-rbd-only-for-rhev.patch +# For bz#1140742 - Enable native support for Ceph +Patch1355: kvm-Revert-rbd-Only-look-for-qemu-specific-copy-of-librb.patch +# For bz#1140742 - Enable native support for Ceph +Patch1356: kvm-Revert-rbd-link-and-load-librbd-dynamically.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1357: kvm-qemu-iotests-Test-case-for-backing-file-deletion.patch +# For bz#1134237 - Opening malformed VMDK description file should fail +Patch1358: kvm-qemu-iotests-Add-sample-image-and-test-for-VMDK-vers.patch +# For bz#1134237 - Opening malformed VMDK description file should fail +Patch1359: kvm-vmdk-Check-VMFS-extent-line-field-number.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1360: kvm-qemu-iotests-Introduce-_unsupported_imgopts.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1361: kvm-qemu-iotests-Add-_unsupported_imgopts-for-vmdk-subfo.patch +# For bz#1134241 - QEMU fails to correctly read/write on VMDK with big flat extent +Patch1362: kvm-vmdk-Fix-big-flat-extent-IO.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1363: kvm-vmdk-Check-for-overhead-when-opening.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1364: kvm-block-vmdk-add-basic-.bdrv_check-support.patch +# For bz#1134237 - Opening malformed VMDK description file should fail +Patch1365: kvm-qemu-iotest-Make-077-raw-only.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1366: kvm-qemu-iotests-Don-t-run-005-on-vmdk-split-formats.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1367: kvm-vmdk-extract-vmdk_read_desc.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1368: kvm-vmdk-push-vmdk_read_desc-up-to-caller.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1369: kvm-vmdk-do-not-try-opening-a-file-as-both-image-and-des.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1370: kvm-vmdk-correctly-propagate-errors.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1371: kvm-block-vmdk-do-not-report-file-offset-for-compressed-.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1372: kvm-vmdk-Fix-d-and-lld-to-PRI-in-format-strings.patch +# For bz#1134251 - Opening an obviously truncated VMDK image should fail +Patch1373: kvm-vmdk-Fix-x-to-PRIx32-in-format-strings-for-cid.patch +# For bz#1134283 - qemu-img convert from ISO to streamOptimized fails +Patch1374: kvm-qemu-img-Convert-by-cluster-size-if-target-is-compre.patch +# For bz#1134283 - qemu-img convert from ISO to streamOptimized fails +Patch1375: kvm-vmdk-Implement-.bdrv_write_compressed.patch +# For bz#1134283 - qemu-img convert from ISO to streamOptimized fails +Patch1376: kvm-vmdk-Implement-.bdrv_get_info.patch +# For bz#1134283 - qemu-img convert from ISO to streamOptimized fails +Patch1377: kvm-qemu-iotests-Test-converting-to-streamOptimized-from.patch +# For bz#1134283 - qemu-img convert from ISO to streamOptimized fails +Patch1378: kvm-vmdk-Fix-local_err-in-vmdk_create.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1379: kvm-fpu-softfloat-drop-INLINE-macro.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1380: kvm-block-New-bdrv_nb_sectors.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1381: kvm-vmdk-Optimize-cluster-allocation.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1382: kvm-vmdk-Handle-failure-for-potentially-large-allocation.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1383: kvm-vmdk-Use-bdrv_nb_sectors-where-sectors-not-bytes-are.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1384: kvm-vmdk-fix-vmdk_parse_extents-extent_file-leaks.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1385: kvm-vmdk-fix-buf-leak-in-vmdk_parse_extents.patch +# For bz#1002493 - qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file +Patch1386: kvm-vmdk-Fix-integer-overflow-in-offset-calculation.patch +# For bz#1163078 - CVE-2014-7840 qemu-kvm: qemu: insufficient parameter validation during ram load [rhel-7.1] +Patch1387: kvm-migration-fix-parameter-validation-on-ram-load-CVE-2.patch +# For bz#1175325 - Delete cow block driver +Patch1388: kvm-block-delete-cow-block-driver.patch +# For bz#1180942 - qemu core dumped when unhotplug gpu card assigned to guest +Patch1389: kvm-vfio-pci-Fix-interrupt-disabling.patch +# For bz#1169456 - CVE-2014-8106 qemu-kvm: qemu: cirrus: insufficient blit region checks [rhel-7.1] +Patch1390: kvm-cirrus-fix-blit-region-check.patch +# For bz#1169456 - CVE-2014-8106 qemu-kvm: qemu: cirrus: insufficient blit region checks [rhel-7.1] +Patch1391: kvm-cirrus-don-t-overflow-CirrusVGAState-cirrus_bltbuf.patch +# For bz#1198958 - Add rhel-6.6.0 machine type to RHEL 7.1.z to support RHEL 6.6 to RHEL 7.1 live migration +Patch1392: kvm-pc-add-rhel6.6.0-machine-type.patch +# For bz#1155671 - [Fujitsu 7.2 FEAT]: QEMU: Add tracepoints in system shutdown +Patch1393: kvm-trace-add-qemu_system_powerdown_request-and-qemu_sys.patch +# For bz#1139562 - qemu-kvm with vhost=off and sndbuf=100 crashed when stop it during pktgen test from guest to host +Patch1394: kvm-virtio-net-drop-assert-on-vm-stop.patch +# For bz#1086168 - qemu-kvm can not cancel migration in src host when network of dst host failed +Patch1395: kvm-socket-shutdown.patch +# For bz#1086168 - qemu-kvm can not cancel migration in src host when network of dst host failed +Patch1396: kvm-Handle-bi-directional-communication-for-fd-migration.patch +# For bz#1086168 - qemu-kvm can not cancel migration in src host when network of dst host failed +Patch1397: kvm-migration_cancel-shutdown-migration-socket.patch +# For bz#1032412 - opening read-only iscsi lun as read-write should fail +Patch1398: kvm-iscsi-Refuse-to-open-as-writable-if-the-LUN-is-write.patch +# For bz#1176283 - [migration]migration failed when configure guest with OVMF bios + machine type=rhel6.5.0 +Patch1399: kvm-main-set-current_machine-before-calling-machine-init.patch +# For bz#1176283 - [migration]migration failed when configure guest with OVMF bios + machine type=rhel6.5.0 +Patch1400: kvm-pc_sysfw-prevent-pflash-and-or-mis-sized-firmware-fo.patch +# For bz#892258 - ide CDROM io/data errors after migration +Patch1401: kvm-Restore-atapi_dma-flag-across-migration.patch +# For bz#892258 - ide CDROM io/data errors after migration +Patch1402: kvm-atapi-migration-Throw-recoverable-error-to-avoid-rec.patch +Patch1403: kvm-build-reenable-local-builds-to-pass-enable-debug-RHE.patch +# For bz#1184363 - Qemu process fails to start with a multipath device with all paths failed +Patch1404: kvm-raw-posix-Fail-gracefully-if-no-working-alignment-is.patch +# For bz#1184363 - Qemu process fails to start with a multipath device with all paths failed +Patch1405: kvm-block-Add-Error-argument-to-bdrv_refresh_limits.patch +# For bz#828493 - [Hitachi 7.2 FEAT] Extract guest memory dump from qemu-kvm core +Patch1406: kvm-Python-lang-gdb-script-to-extract-x86_64-guest-vmcor.patch +# For bz#1210503 - vfio improve PCI ROM loading error handling +Patch1407: kvm-vfio-warn-if-host-device-rom-can-t-be-read.patch +# For bz#1210503 - vfio improve PCI ROM loading error handling +Patch1408: kvm-vfio-Do-not-reattempt-a-failed-rom-read.patch +# For bz#1210503 - vfio improve PCI ROM loading error handling +Patch1409: kvm-vfio-Correction-in-vfio_rom_read-when-attempting-rom.patch +# For bz#1210504 - vfio: Fix overrun after readlink() fills buffer completely +Patch1410: kvm-vfio-Fix-overrun-after-readlink-fills-buffer-complet.patch +# For bz#1210505 - vfio: use correct runstate +Patch1411: kvm-vfio-use-correct-runstate.patch +# For bz#1181267 - vfio-pci: Fix BAR size overflow +Patch1412: kvm-vfio-pci-Fix-BAR-size-overflow.patch +# For bz#1210508 - vfio: Use vfio type1 v2 IOMMU interface +Patch1413: kvm-vfio-Use-vfio-type1-v2-IOMMU-interface.patch +# For bz#1210509 - vfio-pci: Enable device request notification support +Patch1414: kvm-vfio-pci-Enable-device-request-notification-support.patch +# For bz#1181267 - vfio-pci: Fix BAR size overflow +Patch1415: kvm-vfio-pci-Further-fix-BAR-size-overflow.patch +# For bz#1210504 - vfio: Fix overrun after readlink() fills buffer completely +Patch1416: kvm-vfio-pci-Fix-error-path-sign.patch +# For bz#1210510 - Sync MTRRs with KVM and disable on reset +Patch1417: kvm-x86-Use-common-variable-range-MTRR-counts.patch +# For bz#1210510 - Sync MTRRs with KVM and disable on reset +Patch1418: kvm-x86-kvm-Add-MTRR-support-for-kvm_get-put_msrs.patch +# For bz#1210510 - Sync MTRRs with KVM and disable on reset +Patch1419: kvm-x86-Clear-MTRRs-on-vCPU-reset.patch +# For bz#1206497 - CVE-2015-1779 qemu-kvm: qemu: vnc: insufficient resource limiting in VNC websockets decoder [rhel-7.2] +Patch1420: kvm-CVE-2015-1779-incrementally-decode-websocket-frames.patch +# For bz#1206497 - CVE-2015-1779 qemu-kvm: qemu: vnc: insufficient resource limiting in VNC websockets decoder [rhel-7.2] +Patch1421: kvm-CVE-2015-1779-limit-size-of-HTTP-headers-from-websoc.patch +# For bz#1200295 - QEMU segfault when doing unaligned zero write to non-512 disk +Patch1422: kvm-qemu-iotests-Test-unaligned-4k-zero-write.patch +# For bz#1200295 - QEMU segfault when doing unaligned zero write to non-512 disk +Patch1423: kvm-block-Fix-NULL-deference-for-unaligned-write-if-qiov.patch +# For bz#1200295 - QEMU segfault when doing unaligned zero write to non-512 disk +Patch1424: kvm-qemu-iotests-Test-unaligned-sub-block-zero-write.patch +# For bz#1219270 - CVE-2015-3456 qemu-kvm: qemu: floppy disk controller flaw [rhel-7.2] +Patch1425: kvm-fdc-force-the-fifo-access-to-be-in-bounds-of-the-all.patch +# For bz#1208808 - creating second and further snapshot takes ages +Patch1426: kvm-qcow2-Pass-discard-type-to-qcow2_discard_clusters.patch +# For bz#1208808 - creating second and further snapshot takes ages +Patch1427: kvm-qcow2-Discard-VM-state-in-active-L1-after-creating-s.patch +# For bz#1217850 - qemu-kvm: Enable build on aarch64 +Patch1428: kvm-configure-Require-libfdt-for-arm-ppc-microblaze-soft.patch +# For bz#1217850 - qemu-kvm: Enable build on aarch64 +Patch1429: kvm-configure-Add-handling-code-for-AArch64-targets.patch +# For bz#1217850 - qemu-kvm: Enable build on aarch64 +Patch1430: kvm-configure-permit-compilation-on-arm-aarch64.patch +# For bz#1217850 - qemu-kvm: Enable build on aarch64 +Patch1431: kvm-Remove-redhat-extensions-from-qmp-events.txt.patch +# For bz#1217351 - Overflow in malloc size calculation in VMDK driver +Patch1432: kvm-vmdk-Fix-overflow-if-l1_size-is-0x20000000.patch +# For bz#1226683 - [virt-v2v] Backport upstream ssh driver to qemu-kvm +Patch1433: kvm-block-ssh-Drop-superfluous-libssh2_session_last_errn.patch +# For bz#1226683 - [virt-v2v] Backport upstream ssh driver to qemu-kvm +Patch1434: kvm-block-ssh-Propagate-errors-through-check_host_key.patch +# For bz#1226683 - [virt-v2v] Backport upstream ssh driver to qemu-kvm +Patch1435: kvm-block-ssh-Propagate-errors-through-authenticate.patch +# For bz#1226683 - [virt-v2v] Backport upstream ssh driver to qemu-kvm +Patch1436: kvm-block-ssh-Propagate-errors-through-connect_to_ssh.patch +# For bz#1226683 - [virt-v2v] Backport upstream ssh driver to qemu-kvm +Patch1437: kvm-block-ssh-Propagate-errors-to-open-and-create-method.patch +# For bz#1226683 - [virt-v2v] Backport upstream ssh driver to qemu-kvm +Patch1438: kvm-ssh-Don-t-crash-if-either-host-or-path-is-not-specif.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1439: kvm-curl-Replaced-old-error-handling-with-error-reportin.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1440: kvm-curl-Fix-long-line.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1441: kvm-curl-Remove-unnecessary-use-of-goto.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1442: kvm-curl-Fix-return-from-curl_read_cb-with-invalid-state.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1443: kvm-curl-Remove-erroneous-sleep-waiting-for-curl-complet.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1444: kvm-curl-Whitespace-only-changes.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1445: kvm-block-curl-Implement-the-libcurl-timer-callback-inte.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1446: kvm-curl-Remove-unnecessary-explicit-calls-to-internal-e.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1447: kvm-curl-Eliminate-unnecessary-use-of-curl_multi_socket_.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1448: kvm-curl-Ensure-all-informationals-are-checked-for-compl.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1449: kvm-curl-Fix-hang-reading-from-slow-connections.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1450: kvm-curl-Fix-build-when-curl_multi_socket_action-isn-t-a.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1451: kvm-curl-Remove-broken-parsing-of-options-from-url.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1452: kvm-curl-refuse-to-open-URL-from-HTTP-server-without-ran.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1453: kvm-curl-Add-sslverify-option.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1454: kvm-block-Drop-superfluous-conditionals-around-g_free.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1455: kvm-curl-Handle-failure-for-potentially-large-allocation.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1456: kvm-block.curl-adding-timeout-option.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1457: kvm-curl-Allow-a-cookie-or-cookies-to-be-sent-with-http-.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1458: kvm-curl-The-macro-that-you-have-to-uncomment-to-get-deb.patch +# For bz#1226684 - [virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https +Patch1459: kvm-block-curl-Improve-type-safety-of-s-timeout.patch +# For bz#1185737 - qemu-kvm hang when boot with usb-host and sandbox was enabled +Patch1460: kvm-seccomp-add-timerfd_create-and-timerfd_settime-to-th.patch +# For bz#1226697 - [virt-v2v] Allow json: filenames in qemu-img +Patch1461: kvm-qdict-Add-qdict_join.patch +# For bz#1226697 - [virt-v2v] Allow json: filenames in qemu-img +Patch1462: kvm-block-Allow-JSON-filenames.patch +# For bz#1230808 - [abrt] qemu-system-x86: __memcmp_sse4_1(): qemu-system-x86_64 killed by SIGSEGV +Patch1463: kvm-spice-display-fix-segfault-in-qemu_spice_create_upda.patch +# For bz#1142857 - [abrt] qemu-kvm: bdrv_error_action(): qemu-kvm killed by SIGABRT +# For bz#1142857 - [abrt] qemu-kvm: bdrv_error_action(): qemu-kvm killed by SIGABRT +# For bz#(aka - +# For bz#8*10^6/7) - XFree86 apparently sets xhost to ill inital values +Patch1464: kvm-atomics-add-explicit-compiler-fence-in-__atomic-memo.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1465: kvm-qcow2-Put-cache-reference-in-error-case.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1466: kvm-qcow2-Catch-bdrv_getlength-error.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1467: kvm-block-Introduce-qemu_try_blockalign.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1468: kvm-qcow2-Catch-host_offset-for-data-allocation.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1469: kvm-iotests-Add-test-for-image-header-overlap.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1470: kvm-block-Catch-bs-drv-in-bdrv_check.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1471: kvm-qapi-block-Add-fatal-to-BLOCK_IMAGE_CORRUPTED.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1472: kvm-qcow2-Add-qcow2_signal_corruption.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1473: kvm-qcow2-Use-qcow2_signal_corruption-for-overlaps.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1474: kvm-qcow2-Check-L1-L2-reftable-entries-for-alignment.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1475: kvm-iotests-Add-more-tests-for-qcow2-corruption.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1476: kvm-qcow2-fix-leak-of-Qcow2DiscardRegion-in-update_refco.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1477: kvm-qcow2-Do-not-overflow-when-writing-an-L1-sector.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1478: kvm-iotests-Add-test-for-qcow2-L1-table-update.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1479: kvm-block-Add-qemu_-try_-blockalign0.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1480: kvm-qcow2-Calculate-refcount-block-entry-count.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1481: kvm-qcow2-Fix-leaks-in-dirty-images.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1482: kvm-qcow2-Split-qcow2_check_refcounts.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1483: kvm-qcow2-Use-sizeof-refcount_table.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1484: kvm-qcow2-Pull-check_refblocks-up.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1485: kvm-qcow2-Use-int64_t-for-in-memory-reftable-size.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1486: kvm-qcow2-Split-fail-code-in-L1-and-L2-checks.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1487: kvm-qcow2-Let-inc_refcounts-return-errno.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1488: kvm-qcow2-Let-inc_refcounts-resize-the-reftable.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1489: kvm-qcow2-Reuse-refcount-table-in-calculate_refcounts.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1490: kvm-qcow2-Fix-refcount-blocks-beyond-image-end.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1491: kvm-qcow2-Do-not-perform-potentially-damaging-repairs.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1492: kvm-qcow2-Rebuild-refcount-structure-during-check.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1493: kvm-qcow2-Clean-up-after-refcount-rebuild.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1494: kvm-iotests-Fix-test-outputs.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1495: kvm-iotests-Add-test-for-potentially-damaging-repairs.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1496: kvm-qcow2-Drop-REFCOUNT_SHIFT.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1497: kvm-block-Respect-underlying-file-s-EOF.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1498: kvm-qcow2-Fix-header-extension-size-check.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1499: kvm-qcow2.py-Add-required-padding-for-header-extensions.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1500: kvm-block-Don-t-probe-for-unknown-backing-file-format.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1501: kvm-qcow2-Add-two-more-unalignment-checks.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1502: kvm-iotests-Add-tests-for-more-corruption-cases.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1503: kvm-qcow2-Respect-new_block-in-alloc_refcount_block.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1504: kvm-iotests-Add-tests-for-refcount-table-growth.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1505: kvm-qcow2-Fix-header-update-with-overridden-backing-file.patch +# For bz#1129893 - Backport additional qcow2 corruption prevention and image repair patches +Patch1506: kvm-qcow2-Flush-pending-discards-before-allocating-clust.patch +# For bz#1229646 - CVE-2015-3214 qemu-kvm: qemu: i8254: out-of-bounds memory access in pit_ioport_read function [rhel-7.2] +Patch1507: kvm-i8254-fix-out-of-bounds-memory-access-in-pit_ioport_.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1508: kvm-target-i386-fix-cpuid-leaf-0x0d.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1509: kvm-target-i386-Intel-MPX.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1510: kvm-always-update-the-MPX-model-specific-register.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1511: kvm-target-i386-bugfix-of-Intel-MPX.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1512: kvm-target-i386-fix-set-of-registers-zeroed-on-reset.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1513: kvm-target-i386-Add-mpx-CPU-feature-name.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1514: kvm-target-i386-Avoid-shifting-left-into-sign-bit.patch +# For bz#1233350 - [Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm +Patch1515: kvm-target-i386-add-Intel-AVX-512-support.patch +# For bz#1213881 - enable using tcmalloc for memory allocation in qemu-kvm +Patch1516: kvm-configure-Add-support-for-tcmalloc.patch +# For bz#1205100 - qemu-kvm: Qemu: PRDT overflow from guest to host [rhel-7.2] +Patch1517: kvm-ahci.c-mask-unused-flags-when-reading-size-PRDT-DBC.patch +# For bz#1205100 - qemu-kvm: Qemu: PRDT overflow from guest to host [rhel-7.2] +Patch1518: kvm-ide-Correct-handling-of-malformed-short-PRDTs.patch +# For bz#1243690 - EMBARGOED CVE-2015-5154 qemu-kvm: qemu: ide: atapi: heap overflow during I/O buffer memory access [rhel-7.2] +Patch1519: kvm-ide-Check-array-bounds-before-writing-to-io_buffer-C.patch +# For bz#1243690 - EMBARGOED CVE-2015-5154 qemu-kvm: qemu: ide: atapi: heap overflow during I/O buffer memory access [rhel-7.2] +Patch1520: kvm-ide-atapi-Fix-START-STOP-UNIT-command-completion.patch +# For bz#1243690 - EMBARGOED CVE-2015-5154 qemu-kvm: qemu: ide: atapi: heap overflow during I/O buffer memory access [rhel-7.2] +Patch1521: kvm-ide-Clear-DRQ-after-handling-all-expected-accesses.patch +# For bz#1235812 - block/curl: Fix generic "Input/output error" on failure +Patch1522: kvm-block-curl-Don-t-lose-original-error-when-a-connecti.patch +# For bz#1244347 - Quirk for Chelsio T5 MSI-X PBA +Patch1523: kvm-vfio-pci-Add-pba_offset-PCI-quirk-for-Chelsio-T5-dev.patch +# For bz#1238639 - qemu-img shows error message for backing file twice +Patch1524: kvm-block-Print-its-file-name-if-backing-file-opening-fa.patch +# For bz#1238639 - qemu-img shows error message for backing file twice +Patch1525: kvm-block-Propagate-error-in-bdrv_img_create.patch +# For bz#1238639 - qemu-img shows error message for backing file twice +Patch1526: kvm-iotests-Add-test-for-non-existing-backing-file.patch +# For bz#1243731 - smart card emulation doesn't work with USB3 (nec-xhci) controller +Patch1527: kvm-usb-ccid-add-missing-wakeup-calls.patch +# For bz#1217349 - qemu-img vpc driver segfault +Patch1528: kvm-vpc-Handle-failure-for-potentially-large-allocations.patch +# For bz#1217349 - qemu-img vpc driver segfault +Patch1529: kvm-block-vpc-prevent-overflow-if-max_table_entries-0x40.patch +# For bz#1217349 - qemu-img vpc driver segfault +Patch1530: kvm-block-qemu-iotests-add-check-for-multiplication-over.patch +# For bz#1249718 - Segfault occurred at Dst VM while completed migration upon ENOSPC +Patch1531: kvm-virtio-scsi-use-virtqueue_map_sg-when-loading-reques.patch +# For bz#1249718 - Segfault occurred at Dst VM while completed migration upon ENOSPC +Patch1532: kvm-scsi-disk-fix-cmd.mode-field-typo.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1533: kvm-rtl8139-avoid-nested-ifs-in-IP-header-parsing-CVE-20.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1534: kvm-rtl8139-drop-tautologous-if-ip-.-statement-CVE-2015-.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1535: kvm-rtl8139-skip-offload-on-short-Ethernet-IP-header-CVE.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1536: kvm-rtl8139-check-IP-Header-Length-field-CVE-2015-5165.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1537: kvm-rtl8139-check-IP-Total-Length-field-CVE-2015-5165.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1538: kvm-rtl8139-skip-offload-on-short-TCP-header-CVE-2015-51.patch +# For bz#1248766 - CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2] +Patch1539: kvm-rtl8139-check-TCP-Data-Offset-field-CVE-2015-5165.patch +# For bz#1171576 - test case 064 and 070 of qemu-iotests fail for vhdx with qemu-kvm-1.5.3-83.el7 +Patch1540: kvm-block-update-test-070-for-vhdx.patch +# For bz#1219217 - Coverity-detected defect: call to fcntl without checking return value +Patch1541: kvm-block-coverity-fix-check-return-value-for-fcntl-in-g.patch +# For bz#922014 - RFE: support hotplugging chardev & serial ports (Windows guests) +Patch1542: kvm-serial-reset-state-at-startup.patch +# For bz#1134670 - fail to specify the physical_block_size/logical_block_size value not 512 for IDE disk +Patch1543: kvm-ide-Check-validity-of-logical-block-size.patch +# For bz#1191226 - libvirt requires rtc-reset-reinjection command, backport it to RHEL7.1 +Patch1544: kvm-mc146818rtc-add-rtc-reset-reinjection-QMP-command.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1545: kvm-Drop-superfluous-conditionals-around-g_strdup.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1546: kvm-util-Drop-superfluous-conditionals-around-g_free.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1547: kvm-util-Fuse-g_malloc-memset-into-g_new0.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1548: kvm-util-uri-uri_new-can-t-fail-drop-dead-error-handling.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1549: kvm-util-uri-realloc2n-can-t-fail-drop-dead-error-handli.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1550: kvm-util-uri-URI-member-path-can-be-null-compare-more-ca.patch +# For bz#1218919 - Coverity-detected defect: buffer overrun at uri.c:2035 +Patch1551: kvm-util-uri-Add-overflow-check-to-rfc3986_parse_port.patch +# For bz#1170974 - test case 025 of qemu-iotests fail for raw with qemu-kvm-1.5.3-83.el7.x86_64 +Patch1552: kvm-qemu-iotests-Filter-qemu-io-output-in-025.patch +# For bz#1270341 - qemu-kvm build failure race condition in tests/ide-test +Patch1553: kvm-qtest-ide-test-disable-flush-test.patch +# For bz#1268879 - Camera stops work after remote-viewer re-connection [qemu-kvm] +Patch1554: kvm-ehci-clear-suspend-bit-on-detach.patch +# For bz#1277248 - ceph.conf properties override qemu's command-line properties +Patch1555: kvm-rbd-make-qemu-s-cache-setting-override-any-ceph-sett.patch +# For bz#1277248 - ceph.conf properties override qemu's command-line properties +Patch1556: kvm-rbd-fix-ceph-settings-precedence.patch +# For bz#1265427 - contents of MSR_TSC_AUX are not migrated +Patch1557: kvm-target-i386-get-put-MSR_TSC_AUX-across-reset-and-mig.patch +# For bz#1252757 - [RHEL-7.2-qmu-kvm] Package is 100% lost when ping from host to Win2012r2 guest with 64000 size +Patch1558: kvm-rtl8139-Fix-receive-buffer-overflow-check.patch +# For bz#1252757 - [RHEL-7.2-qmu-kvm] Package is 100% lost when ping from host to Win2012r2 guest with 64000 size +Patch1559: kvm-rtl8139-Do-not-consume-the-packet-during-overflow-in.patch +# For bz#1283116 - [abrt] qemu-img: get_block_status(): qemu-img killed by SIGABRT +Patch1560: kvm-raw-posix-Fix-.bdrv_co_get_block_status-for-unaligne.patch +# For bz#1269738 - Vlan table display repeat four times in qmp when queues=4 +Patch1561: kvm-net-Make-qmp_query_rx_filter-with-name-argument-more.patch +# For bz#1298048 - CVE-2016-1714 qemu-kvm: Qemu: nvram: OOB r/w access in processing firmware configurations [rhel-7.3] +Patch1562: kvm-fw_cfg-add-check-to-validate-current-entry-value-CVE.patch +# For bz#1296044 - qemu-kvm: insufficient loop termination conditions in start_xmit() and e1000_receive() [rhel-7.3] +Patch1563: kvm-e1000-eliminate-infinite-loops-on-out-of-bounds-tran.patch +# For bz#1285453 - An NBD client can cause QEMU main loop to block when connecting to built-in NBD server +Patch1564: kvm-nbd-Always-call-close_fn-in-nbd_client_new.patch +# For bz#1285453 - An NBD client can cause QEMU main loop to block when connecting to built-in NBD server +Patch1565: kvm-nbd-server-Coroutine-based-negotiation.patch +# For bz#1285453 - An NBD client can cause QEMU main loop to block when connecting to built-in NBD server +Patch1566: kvm-nbd-client_close-on-error-in-nbd_co_client_start.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1567: kvm-qemu-io-Remove-unused-args_command.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1568: kvm-cutils-Support-P-and-E-suffixes-in-strtosz.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1569: kvm-qemu-io-Make-cvtnum-a-wrapper-around-strtosz_suffix.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1570: kvm-qemu-io-Handle-cvtnum-errors-in-alloc.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1571: kvm-qemu-io-Don-t-use-global-bs-in-command-implementatio.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1572: kvm-qemu-io-Split-off-commands-to-qemu-io-cmds.c.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1573: kvm-qemu-io-Factor-out-qemuio_command.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1574: kvm-qemu-io-Move-help-function.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1575: kvm-qemu-io-Move-quit-function.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1576: kvm-qemu-io-Move-qemu_strsep-to-cutils.c.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1577: kvm-qemu-io-Move-functions-for-registering-and-running-c.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1578: kvm-qemu-io-Move-command_loop-and-friends.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1579: kvm-qemu-io-Move-remaining-helpers-from-cmd.c.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1580: kvm-qemu-io-Interface-cleanup.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1581: kvm-qemu-io-Use-the-qemu-version-for-V.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1582: kvm-Make-qemu-io-commands-available-in-HMP.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1583: kvm-blkdebug-Add-BLKDBG_FLUSH_TO_OS-DISK-events.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1584: kvm-qemu-io-fix-cvtnum-lval-types.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1585: kvm-qemu-io-Check-for-trailing-chars.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1586: kvm-qemu-io-Correct-error-messages.patch +# For bz#1272523 - qemu-kvm build failure race condition in tests/ide-test +Patch1587: kvm-ide-test-fix-failure-for-test_flush.patch +# For bz#1331413 - EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3] +Patch1588: kvm-vga-Remove-some-should-be-done-in-BIOS-comments.patch +# For bz#1331413 - EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3] +Patch1589: kvm-vga-fix-banked-access-bounds-checking-CVE-2016-xxxx.patch +# For bz#1331413 - EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3] +Patch1590: kvm-vga-add-vbe_enabled-helper.patch +# For bz#1331413 - EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3] +Patch1591: kvm-vga-factor-out-vga-register-setup.patch +# For bz#1331413 - EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3] +Patch1592: kvm-vga-update-vga-register-setup-on-vbe-changes.patch +# For bz#1331413 - EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3] +Patch1593: kvm-vga-make-sure-vga-register-setup-for-vbe-stays-intac.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1594: kvm-vmdk-Leave-bdi-intact-if-ENOTSUP-in-vmdk_get_info.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1595: kvm-vmdk-Use-g_random_int-to-generate-CID.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1596: kvm-vmdk-Fix-comment-to-match-code-of-extent-lines.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1597: kvm-vmdk-Clean-up-descriptor-file-reading.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1598: kvm-vmdk-Check-descriptor-file-length-when-reading-it.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1599: kvm-vmdk-Remove-unnecessary-initialization.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1600: kvm-vmdk-Set-errp-on-failures-in-vmdk_open_vmdk4.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1601: kvm-block-vmdk-make-ret-variable-usage-clear.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1602: kvm-block-vmdk-move-string-allocations-from-stack-to-the.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1603: kvm-block-vmdk-fixed-sizeof-error.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1604: kvm-vmdk-Widen-before-shifting-32-bit-header-field.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1605: kvm-vmdk-Fix-next_cluster_sector-for-compressed-write.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1606: kvm-vmdk-Fix-index_in_cluster-calculation-in-vmdk_co_get.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1607: kvm-vmdk-Use-vmdk_find_index_in_cluster-everywhere.patch +# For bz#1299250 - qemu-img created VMDK images are unbootable +Patch1608: kvm-vmdk-Fix-next_cluster_sector-for-compressed-write2.patch +# For bz#1299116 - qemu-img created VMDK images lead to "Not a supported disk format (sparse VMDK version too old)" +Patch1609: kvm-vmdk-Create-streamOptimized-as-version-3.patch +# For bz#1299116 - qemu-img created VMDK images lead to "Not a supported disk format (sparse VMDK version too old)" +Patch1610: kvm-vmdk-Fix-converting-to-streamOptimized.patch +# For bz#1299116 - qemu-img created VMDK images lead to "Not a supported disk format (sparse VMDK version too old)" +Patch1611: kvm-vmdk-Fix-calculation-of-block-status-s-offset.patch +# For bz#1312289 - "qemu-kvm: /builddir/build/BUILD/qemu-1.5.3/hw/scsi/virtio-scsi.c:533: virtio_scsi_push_event: Assertion `event == 0' failed" after hotplug 20 virtio-scsi disks then hotunplug them +Patch1612: kvm-virtio-scsi-Prevent-assertion-on-missed-events.patch +# For bz#1177318 - Guest using rbd based image as disk failed to start when sandbox was enabled +Patch1613: kvm-seccomp-adding-sysinfo-system-call-to-whitelist.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1614: kvm-acpi-strip-compiler-info-in-built-in-DSDT.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1615: kvm-acpi-fix-endian-ness-for-table-ids.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1616: kvm-acpi-support-specified-oem-table-id-for-build_header.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1617: kvm-acpi-take-oem_id-in-build_header-optionally.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1618: kvm-acpi-expose-oem_id-and-oem_table_id-in-build_rsdt.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1619: kvm-acpi-add-function-to-extract-oem_id-and-oem_table_id.patch +# For bz#1330969 - match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC +Patch1620: kvm-pc-set-the-OEM-fields-in-the-RSDT-and-the-FADT-from-.patch +# For bz#1156635 - Libvirt is confused that qemu-kvm exposes 'block-job-cancel' but not 'block-stream' +Patch1621: kvm-block-jobs-qemu-kvm-rhel-differentiation.patch +# For bz#1283198 - RFE: backport max monitor limitation from Qemu upstream +Patch1622: kvm-qxl-allow-to-specify-head-limit-to-qxl-driver.patch +# For bz#1283198 - RFE: backport max monitor limitation from Qemu upstream +Patch1623: kvm-qxl-Fix-new-function-name-for-spice-server-library.patch +# For bz#1268345 - posix_fallocate emulation on NFS fails with Bad file descriptor if fd is opened O_WRONLY +Patch1624: kvm-block-raw-posix-Open-file-descriptor-O_RDWR-to-work-.patch +# For bz#1256741 - "CapsLock" will work as "\" when boot a guest with usb-kbd +Patch1625: kvm-hw-input-hid.c-Fix-capslock-hid-code.patch +# For bz#1340971 - qemu: accel=tcg does not implement SSE 4 properly +Patch1626: kvm-target-i386-fix-pcmpxstrx-equal-ordered-strstr-mode.patch +# For bz#1336491 - Ship FD connection patches qemu-kvm part +Patch1627: kvm-spice-do-not-require-TCP-ports.patch +# For bz#1346982 - Regression from CVE-2016-3712: windows installer fails to start +Patch1628: kvm-vga-add-sr_vbe-register-set.patch +# For bz#1340929 - CVE-2016-5126 qemu-kvm: Qemu: block: iscsi: buffer overflow in iscsi_aio_ioctl [rhel-7.3] +Patch1629: kvm-block-iscsi-avoid-potential-overflow-of-acb-task-cdb.patch +# For bz#1327599 - Add Skylake CPU model +Patch1630: kvm-target-i386-add-feature-flags-for-CPUID-EAX-0xd-ECX-.patch +# For bz#1327599 - Add Skylake CPU model +Patch1631: kvm-target-i386-add-Skylake-Client-cpu-model.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1632: kvm-util-introduce-MIN_NON_ZERO.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1633: kvm-BlockLimits-introduce-max_transfer_length.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1634: kvm-block-backend-expose-bs-bl.max_transfer_length.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1635: kvm-scsi-generic-Merge-block-max-xfer-len-in-INQUIRY-res.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1636: kvm-raw-posix-Fetch-max-sectors-for-host-block-device.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1637: kvm-scsi-Advertise-limits-by-blocksize-not-512.patch +# For bz#1318199 - expose host BLKSECTGET limit in scsi-block (qemu-kvm) +Patch1638: kvm-util-Fix-MIN_NON_ZERO.patch +# For bz#1355730 - spice-gtk shows outdated screen state after migration [qemu-kvm] +Patch1639: kvm-qxl-factor-out-qxl_get_check_slot_offset.patch +# For bz#1355730 - spice-gtk shows outdated screen state after migration [qemu-kvm] +Patch1640: kvm-qxl-store-memory-region-and-offset-instead-of-pointe.patch +# For bz#1355730 - spice-gtk shows outdated screen state after migration [qemu-kvm] +Patch1641: kvm-qxl-fix-surface-migration.patch +# For bz#1355730 - spice-gtk shows outdated screen state after migration [qemu-kvm] +Patch1642: kvm-qxl-fix-qxl_set_dirty-call-in-qxl_dirty_one_surface.patch +# For bz#1359729 - CVE-2016-5403 qemu-kvm: Qemu: virtio: unbounded memory allocation on host via guest leading to DoS [rhel-7.3] +Patch1643: kvm-virtio-error-out-if-guest-exceeds-virtqueue-size.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1644: kvm-json-parser-drop-superfluous-assignment-for-token-va.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1645: kvm-qjson-Apply-nesting-limit-more-sanely.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1646: kvm-qjson-Don-t-crash-when-input-exceeds-nesting-limit.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1647: kvm-check-qjson-Add-test-for-JSON-nesting-depth-limit.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1648: kvm-qjson-Spell-out-some-silent-assumptions.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1649: kvm-qjson-Give-each-of-the-six-structural-chars-its-own-.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1650: kvm-qjson-Inline-token_is_keyword-and-simplify.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1651: kvm-qjson-Inline-token_is_escape-and-simplify.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1652: kvm-qjson-replace-QString-in-JSONLexer-with-GString.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1653: kvm-qjson-Convert-to-parser-to-recursive-descent.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1654: kvm-qjson-store-tokens-in-a-GQueue.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1655: kvm-qjson-surprise-allocating-6-QObjects-per-token-is-ex.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1656: kvm-qjson-Limit-number-of-tokens-in-addition-to-total-si.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1657: kvm-json-streamer-Don-t-leak-tokens-on-incomplete-parse.patch +# For bz#1276036 - Crash on QMP input exceeding limits +Patch1658: kvm-json-streamer-fix-double-free-on-exiting-during-a-pa.patch +# For bz#1360137 - GLib-WARNING **: gmem.c:482: custom memory allocation vtable not supported +Patch1659: kvm-trace-remove-malloc-tracing.patch +# For bz#1367040 - QEMU crash when guest notifies non-existent virtqueue +Patch1660: kvm-virtio-validate-the-existence-of-handle_output-befor.patch +# For bz#1371619 - Flags xsaveopt xsavec xgetbv1 are missing on qemu-kvm +Patch1661: kvm-Fix-backport-of-target-i386-add-feature-flags-for-CP.patch +# For bz#1373088 - [FJ7.3 Bug]: virsh dump with both --memory-only and --format option fails +Patch1662: kvm-Add-skip_dump-flag-to-ignore-memory-region-during-du.patch +# For bz#1372459 - [Intel 7.3 Bug] SKL-SP Guest cpu doesn't support avx512 instruction sets(avx512bw, avx512dq and avx512vl) (qemu-kvm) +Patch1663: kvm-target-i386-Add-support-for-FEAT_7_0_ECX.patch +# For bz#1372459 - [Intel 7.3 Bug] SKL-SP Guest cpu doesn't support avx512 instruction sets(avx512bw, avx512dq and avx512vl) (qemu-kvm) +Patch1664: kvm-target-i386-Add-more-Intel-AVX-512-instructions-supp.patch +# For bz#1285453 - An NBD client can cause QEMU main loop to block when connecting to built-in NBD server +Patch1665: kvm-nbd-server-Set-O_NONBLOCK-on-client-fd.patch +# For bz#1376542 - RHSA-2016-1756 breaks migration of instances +Patch1666: kvm-virtio-recalculate-vq-inuse-after-migration.patch +# For bz#1377087 - shutdown rhel 5.11 guest failed and stop at "system halted" +Patch1667: kvm-hw-i386-regenerate-checked-in-AML-payload-RHEL-only.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1668: kvm-virtio-introduce-virtqueue_unmap_sg.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1669: kvm-virtio-introduce-virtqueue_discard.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1670: kvm-virtio-decrement-vq-inuse-in-virtqueue_discard.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1671: kvm-balloon-fix-segfault-and-harden-the-stats-queue.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1672: kvm-virtio-balloon-discard-virtqueue-element-on-reset.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1673: kvm-virtio-zero-vq-inuse-in-virtio_reset.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1674: kvm-virtio-add-virtqueue_rewind.patch +# For bz#1377968 - [RHEL7.3] KVM guest shuts itself down after 128th reboot +Patch1675: kvm-virtio-balloon-fix-stats-vq-migration.patch +# For bz#1375507 - "threads" option is overwritten if both "sockets" and "cores" is set on -smp +Patch1676: kvm-vl-Don-t-silently-change-topology-when-all-smp-optio.patch +# For bz#1398218 - CVE-2016-2857 qemu-kvm: Qemu: net: out of bounds read in net_checksum_calculate() [rhel-7.4] +Patch1677: kvm-net-check-packet-payload-length.patch +# For bz#1342489 - Flickering Fedora 24 Login Screen on RHEL 7 +Patch1678: kvm-qxl-Only-emit-QXL_INTERRUPT_CLIENT_MONITORS_CONFIG-o.patch +# For bz#1151859 - [RFE] Allow the libgfapi logging level to be controlled. +Patch1679: kvm-gluster-correctly-propagate-errors.patch +# For bz#1151859 - [RFE] Allow the libgfapi logging level to be controlled. +Patch1680: kvm-gluster-Correctly-propagate-errors-when-volume-isn-t.patch +# For bz#1151859 - [RFE] Allow the libgfapi logging level to be controlled. +Patch1681: kvm-block-gluster-add-support-for-selecting-debug-loggin.patch +# For bz#1342768 - [Intel 7.4 Bug] qemu-kvm crashes with Linux kernel 4.6.0 or above +Patch1682: kvm-memory-Allow-access-only-upto-the-maximum-alignment-.patch +# For bz#1361488 - system_reset should clear pending request for error (virtio-blk) +Patch1683: kvm-virtio-blk-Release-s-rq-queue-at-system_reset.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1684: kvm-cirrus_vga-fix-off-by-one-in-blit_region_is_unsafe.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1685: kvm-display-cirrus-check-vga-bits-per-pixel-bpp-value.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1686: kvm-display-cirrus-ignore-source-pitch-value-as-needed-i.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1687: kvm-cirrus-handle-negative-pitch-in-cirrus_invalidate_re.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1688: kvm-cirrus-allow-zero-source-pitch-in-pattern-fill-rops.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1689: kvm-cirrus-fix-blit-address-mask-handling.patch +# For bz#1418233 - CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4] +Patch1690: kvm-cirrus-fix-oob-access-issue-CVE-2017-2615.patch +# For bz#1419898 - Documentation inaccurate for __com.redhat_qxl_screendump and __com.redhat_drive_add +Patch1691: kvm-HMP-Fix-user-manual-typo-of-__com.redhat_qxl_screend.patch +# For bz#1419898 - Documentation inaccurate for __com.redhat_qxl_screendump and __com.redhat_drive_add +Patch1692: kvm-HMP-Fix-documentation-of-__com.redhat.drive_add.patch +# For bz#1420492 - EMBARGOED CVE-2017-2620 qemu-kvm: Qemu: display: cirrus: potential arbitrary code execution via cirrus_bitblt_cputovideo [rhel-7.4] +Patch1693: kvm-cirrus-fix-patterncopy-checks.patch +# For bz#1420492 - EMBARGOED CVE-2017-2620 qemu-kvm: Qemu: display: cirrus: potential arbitrary code execution via cirrus_bitblt_cputovideo [rhel-7.4] +Patch1694: kvm-Revert-cirrus-allow-zero-source-pitch-in-pattern-fil.patch +# For bz#1420492 - EMBARGOED CVE-2017-2620 qemu-kvm: Qemu: display: cirrus: potential arbitrary code execution via cirrus_bitblt_cputovideo [rhel-7.4] +Patch1695: kvm-cirrus-add-blit_is_unsafe-call-to-cirrus_bitblt_cput.patch +# For bz#1368375 - [Intel 7.4 Bug] qemu-kvm does not support “-cpu IvyBridge” +Patch1696: kvm-target-i386-add-Ivy-Bridge-CPU-model.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1697: kvm-x86-add-AVX512_4VNNIW-and-AVX512_4FMAPS-features.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1698: kvm-target-i386-kvm_cpu_fill_host-Kill-unused-code.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1699: kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-level.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1700: kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-CPU-v.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1701: kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-xleve.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1702: kvm-target-i386-kvm_cpu_fill_host-Set-all-feature-words-.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1703: kvm-target-i386-kvm_cpu_fill_host-Fill-feature-words-in-.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1704: kvm-target-i386-kvm_check_features_against_host-Kill-fea.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1705: kvm-target-i386-Make-TCG-feature-filtering-more-readable.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1706: kvm-target-i386-Filter-FEAT_7_0_EBX-TCG-features-too.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1707: kvm-target-i386-Filter-KVM-and-0xC0000001-features-on-TC.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1708: kvm-target-i386-Define-TCG_-_FEATURES-earlier-in-cpu.c.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1709: kvm-target-i386-Loop-based-copying-and-setting-unsetting.patch +# For bz#1382122 - [Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu +Patch1710: kvm-target-i386-Loop-based-feature-word-filtering-in-TCG.patch +# For bz#1430606 - Can't build qemu-kvm with newer spice packages +Patch1711: kvm-spice-remove-spice-experimental.h-include.patch +# For bz#1430606 - Can't build qemu-kvm with newer spice packages +Patch1712: kvm-spice-replace-use-of-deprecated-API.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1713: kvm-ui-vnc-introduce-VNC_DIRTY_PIXELS_PER_BIT-macro.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1714: kvm-ui-vnc-derive-cmp_bytes-from-VNC_DIRTY_PIXELS_PER_BI.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1715: kvm-ui-vnc-optimize-dirty-bitmap-tracking.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1716: kvm-ui-vnc-optimize-setting-in-vnc_dpy_update.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1717: kvm-ui-vnc-fix-vmware-VGA-incompatiblities.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1718: kvm-ui-vnc-fix-potential-memory-corruption-issues.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1719: kvm-vnc-fix-memory-corruption-CVE-2015-5225.patch +# For bz#1377977 - qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4] +Patch1720: kvm-vnc-fix-overflow-in-vnc_update_stats.patch +# For bz#1335751 - CVE-2016-4020 qemu-kvm: Qemu: i386: leakage of stack memory to guest in kvmvapic.c [rhel-7.4] +Patch1721: kvm-i386-kvmvapic-initialise-imm32-variable.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1722: kvm-qemu-iotests-Filter-out-actual-image-size-in-067.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1723: kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_ref2.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1724: kvm-qemu-iotests-Fix-core-dump-suppression-in-test-039.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1725: kvm-qemu-io-Add-sigraise-command.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1726: kvm-iotests-Filter-for-Killed-in-qemu-io-output.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1727: kvm-iotests-Fix-test-039.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1728: kvm-blkdebug-Add-bdrv_truncate.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1729: kvm-vhdx-Fix-zero-fill-iov-length.patch +# For bz#1427176 - test cases of qemu-iotests failed +Patch1730: kvm-qemu-iotests-Disable-030-040-041.patch +# For bz#1415830 - [Intel 7.4 FEAT] Enable vpopcntdq for KNM - qemu/kvm +Patch1731: kvm-x86-add-AVX512_VPOPCNTDQ-features.patch +# For bz#1419818 - CVE-2017-5898 qemu-kvm: Qemu: usb: integer overflow in emulated_apdu_from_guest [rhel-7.4] +Patch1732: kvm-usb-ccid-check-ccid-apdu-length.patch +# For bz#1419818 - CVE-2017-5898 qemu-kvm: Qemu: usb: integer overflow in emulated_apdu_from_guest [rhel-7.4] +Patch1733: kvm-usb-ccid-better-bulk_out-error-handling.patch +# For bz#1419818 - CVE-2017-5898 qemu-kvm: Qemu: usb: integer overflow in emulated_apdu_from_guest [rhel-7.4] +Patch1734: kvm-usb-ccid-move-header-size-check.patch +# For bz#1419818 - CVE-2017-5898 qemu-kvm: Qemu: usb: integer overflow in emulated_apdu_from_guest [rhel-7.4] +Patch1735: kvm-usb-ccid-add-check-message-size-checks.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1736: kvm-fix-cirrus_vga-fix-OOB-read-case-qemu-Segmentation-f.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1737: kvm-cirrus-vnc-zap-bitblit-support-from-console-code.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1738: kvm-cirrus-add-option-to-disable-blitter.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1739: kvm-cirrus-fix-cirrus_invalidate_region.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1740: kvm-cirrus-stop-passing-around-dst-pointers-in-the-blitt.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1741: kvm-cirrus-stop-passing-around-src-pointers-in-the-blitt.patch +# For bz#1430060 - CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4] +Patch1742: kvm-cirrus-fix-off-by-one-in-cirrus_bitblt_rop_bkwd_tran.patch +# For bz#1327593 - [Intel 7.4 FEAT] KVM Enable the XSAVEC, XSAVES and XRSTORS instructions +Patch1743: kvm-target-i386-get-set-migrate-XSAVES-state.patch +# For bz#1299875 - system_reset should clear pending request for error (IDE) +Patch1744: kvm-ide-fix-halted-IO-segfault-at-reset.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1745: kvm-char-serial-cosmetic-fixes.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1746: kvm-char-serial-Use-generic-Fifo8.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1747: kvm-char-serial-serial_ioport_write-Factor-out-common-co.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1748: kvm-char-serial-fix-copy-paste-error-fifo8_is_full-vs-em.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1749: kvm-char-serial-Fix-emptyness-check.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1750: kvm-char-serial-Fix-emptyness-handling.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1751: kvm-serial-poll-the-serial-console-with-G_IO_HUP.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1752: kvm-serial-change-retry-logic-to-avoid-concurrency.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1753: kvm-qemu-char-ignore-flow-control-if-a-PTY-s-slave-is-no.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1754: kvm-serial-check-if-backed-by-a-physical-serial-port-at-.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1755: kvm-serial-reset-thri_pending-on-IER-writes-with-THRI-0.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1756: kvm-serial-clean-up-THRE-TEMT-handling.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1757: kvm-serial-update-LSR-on-enabling-disabling-FIFOs.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1758: kvm-serial-only-resample-THR-interrupt-on-rising-edge-of.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1759: kvm-serial-make-tsr_retry-unsigned.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1760: kvm-serial-simplify-tsr_retry-reset.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1761: kvm-serial-separate-serial_xmit-and-serial_watch_cb.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1762: kvm-serial-remove-watch-on-reset.patch +# For bz#1451470 - RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop +Patch1763: kvm-char-change-qemu_chr_fe_add_watch-to-return-unsigned.patch +# For bz#1456983 - Character device regression due to missing patch +Patch1764: kvm-spice-fix-spice_chr_add_watch-pre-condition.patch +# For bz#1455745 - Backport fix for broken logic that's supposed to ensure memory slots are page aligned +Patch1765: kvm-Fix-memory-slot-page-alignment-logic-bug-1455745.patch +# For bz#1452067 - migration can confuse serial port user +Patch1766: kvm-Do-not-hang-on-full-PTY.patch +# For bz#1452067 - migration can confuse serial port user +Patch1767: kvm-serial-fixing-vmstate-for-save-restore.patch +# For bz#1452067 - migration can confuse serial port user +Patch1768: kvm-serial-reinstate-watch-after-migration.patch +# For bz#1451614 - CVE-2017-9524 qemu-kvm: segment fault when private user nmap qemu-nbd server [rhel-7.4] +Patch1769: kvm-nbd-Fully-initialize-client-in-case-of-failed-negoti.patch +# For bz#1451614 - CVE-2017-9524 qemu-kvm: segment fault when private user nmap qemu-nbd server [rhel-7.4] +Patch1770: kvm-nbd-Fix-regression-on-resiliency-to-port-scan.patch +# For bz#1435352 - qemu started with "-vnc none,..." doesn't support any VNC authentication +Patch1771: kvm-vnc-allow-to-connect-with-add_client-when-vnc-none.patch +# For bz#1480428 - KVM: windows guest migration from EL6 to EL7 fails. +Patch1772: kvm-virtio-net-dynamic-network-offloads-configuration.patch +# For bz#1480428 - KVM: windows guest migration from EL6 to EL7 fails. +Patch1773: kvm-Workaround-rhel6-ctrl_guest_offloads-machine-type-mi.patch +# For bz#1387648 - [Intel 7.5 FEAT] Memory Protection Keys for qemu-kvm +Patch1774: kvm-target-i386-Add-PKU-and-and-OSPKE-support.patch +# For bz#1492559 - virtio-blk mutiwrite merge causes too big IO +Patch1775: kvm-block-Limit-multiwrite-merge-downstream-only.patch +# For bz#1466463 - CVE-2017-10664 qemu-kvm: Qemu: qemu-nbd: server breaks with SIGPIPE upon client abort [rhel-7.5] +Patch1776: kvm-qemu-nbd-Ignore-SIGPIPE.patch +# For bz#1476641 - ui/vnc_keysym.h is very out of date and does not correctly support many Eastern European keyboards +Patch1777: kvm-qemu-char-add-Czech-characters-to-VNC-keysyms.patch +# For bz#1476641 - ui/vnc_keysym.h is very out of date and does not correctly support many Eastern European keyboards +Patch1778: kvm-qemu-char-add-missing-characters-used-in-keymaps.patch +# For bz#1476641 - ui/vnc_keysym.h is very out of date and does not correctly support many Eastern European keyboards +Patch1779: kvm-qemu-char-add-cyrillic-characters-numerosign-to-VNC-.patch +# For bz#1461672 - qemu-img core dumped when create external snapshot through ssh protocol without specifying image size +Patch1780: kvm-block-ssh-Use-QemuOpts-for-runtime-options.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1781: kvm-vfio-pass-device-to-vfio_mmap_bar-and-use-it-to-set-.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1782: kvm-hw-vfio-pci-Rename-VFIODevice-into-VFIOPCIDevice.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1783: kvm-hw-vfio-pci-generalize-mask-unmask-to-any-IRQ-index.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1784: kvm-hw-vfio-pci-introduce-minimalist-VFIODevice-with-fd.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1785: kvm-hw-vfio-pci-add-type-name-and-group-fields-in-VFIODe.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1786: kvm-hw-vfio-pci-handle-reset-at-VFIODevice.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1787: kvm-hw-vfio-pci-Introduce-VFIORegion.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1788: kvm-hw-vfio-pci-use-name-field-in-format-strings.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1789: kvm-vfio-Add-sysfsdev-property-for-pci-platform.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1790: kvm-vfio-remove-bootindex-property-from-qdev-to-qom.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1791: kvm-vfio-pci-Handle-host-oversight.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1792: kvm-vfio-pci-Fix-incorrect-error-message.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1793: kvm-vfio-Wrap-VFIO_DEVICE_GET_REGION_INFO.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1794: kvm-vfio-Generalize-region-support.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1795: kvm-vfio-Enable-sparse-mmap-capability.patch +# For bz#1494181 - Backport vGPU support to qemu-kvm +Patch1796: kvm-vfio-Handle-zero-length-sparse-mmap-ranges.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1797: kvm-bswap.h-Remove-cpu_to_32wu.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1798: kvm-hw-use-ld_p-st_p-instead-of-ld_raw-st_raw.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1799: kvm-vga-Start-cutting-out-non-32bpp-conversion-support.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1800: kvm-vga-Remove-remainder-of-old-conversion-cruft.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1801: kvm-vga-Separate-LE-and-BE-conversion-functions.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1802: kvm-vga-Rename-vga_template.h-to-vga-helpers.h.patch +# For bz#1486642 - CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5] +Patch1803: kvm-vga-stop-passing-pointers-to-vga_draw_line-functions.patch +# For bz#1450396 - Add support for AMD EPYC processors +Patch1804: kvm-target-i386-Add-Intel-SHA_NI-instruction-support.patch +# For bz#1450396 - Add support for AMD EPYC processors +Patch1805: kvm-target-i386-cpu-Add-new-EPYC-CPU-model.patch +# For bz#1501510 - Add Skylake-Server CPU model (qemu-kvm) +Patch1806: kvm-target-i386-Enable-clflushopt-clwb-pcommit-instructi.patch +# For bz#1501510 - Add Skylake-Server CPU model (qemu-kvm) +Patch1807: kvm-i386-add-Skylake-Server-cpu-model.patch +# For bz#1501295 - CVE-2017-15289 qemu-kvm: Qemu: cirrus: OOB access issue in mode4and5 write functions [rhel-7.5] +Patch1808: kvm-vga-drop-line_offset-variable.patch +# For bz#1501295 - CVE-2017-15289 qemu-kvm: Qemu: cirrus: OOB access issue in mode4and5 write functions [rhel-7.5] +Patch1809: kvm-vga-Add-mechanism-to-force-the-use-of-a-shadow-surfa.patch +# For bz#1501295 - CVE-2017-15289 qemu-kvm: Qemu: cirrus: OOB access issue in mode4and5 write functions [rhel-7.5] +Patch1810: kvm-vga-handle-cirrus-vbe-mode-wraparounds.patch +# For bz#1501295 - CVE-2017-15289 qemu-kvm: Qemu: cirrus: OOB access issue in mode4and5 write functions [rhel-7.5] +Patch1811: kvm-cirrus-fix-oob-access-in-mode4and5-write-functions.patch +# For bz#1470244 - reboot leads to shutoff of qemu-kvm-vm if i6300esb-watchdog set to poweroff +Patch1812: kvm-i6300esb-Fix-signed-integer-overflow.patch +# For bz#1470244 - reboot leads to shutoff of qemu-kvm-vm if i6300esb-watchdog set to poweroff +Patch1813: kvm-i6300esb-fix-timer-overflow.patch +# For bz#1470244 - reboot leads to shutoff of qemu-kvm-vm if i6300esb-watchdog set to poweroff +Patch1814: kvm-i6300esb-remove-muldiv64.patch +# For bz#1501121 - CVE-2017-14167 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.5] +Patch1815: kvm-multiboot-validate-multiboot-header-address-values.patch +# For bz#1417864 - Qemu-kvm starts with unspecified port +Patch1816: kvm-qemu-option-reject-empty-number-value.patch +# For bz#1491434 - KVM leaks file descriptors when attaching and detaching virtio-scsi block devices +Patch1817: kvm-block-linux-aio-fix-memory-and-fd-leak.patch +# For bz#1491434 - KVM leaks file descriptors when attaching and detaching virtio-scsi block devices +Patch1818: kvm-linux-aio-Fix-laio-resource-leak.patch +# For bz#1508745 - CVE-2017-13711 qemu-kvm: Qemu: Slirp: use-after-free when sending response [rhel-7.5] +Patch1819: kvm-slirp-cleanup-leftovers-from-misc.h.patch +# For bz#1508745 - CVE-2017-13711 qemu-kvm: Qemu: Slirp: use-after-free when sending response [rhel-7.5] +Patch1820: kvm-Avoid-embedding-struct-mbuf-in-other-structures.patch +# For bz#1508745 - CVE-2017-13711 qemu-kvm: Qemu: Slirp: use-after-free when sending response [rhel-7.5] +Patch1821: kvm-slirp-Fix-access-to-freed-memory.patch +# For bz#1508745 - CVE-2017-13711 qemu-kvm: Qemu: Slirp: use-after-free when sending response [rhel-7.5] +Patch1822: kvm-slirp-fix-clearing-ifq_so-from-pending-packets.patch +# For bz#1459714 - Throw error if qemu-img rebasing backing file is too long or provide way to fix a "too long" backing file. +Patch1823: kvm-qcow2-Prevent-backing-file-names-longer-than-1023.patch +# For bz#1459725 - Prevent qemu-img resize from causing "Active L1 table too large" +Patch1824: kvm-qemu-img-Use-strerror-for-generic-resize-error.patch +# For bz#1459725 - Prevent qemu-img resize from causing "Active L1 table too large" +Patch1825: kvm-qcow2-Avoid-making-the-L1-table-too-big.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1826: kvm-fw_cfg-remove-support-for-guest-side-data-writes.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1827: kvm-fw_cfg-prevent-selector-key-conflict.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1828: kvm-fw_cfg-prohibit-insertion-of-duplicate-fw_cfg-file-n.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1829: kvm-fw_cfg-factor-out-initialization-of-FW_CFG_ID-rev.-n.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1830: kvm-Implement-fw_cfg-DMA-interface.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1831: kvm-fw_cfg-avoid-calculating-invalid-current-entry-point.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1832: kvm-fw-cfg-support-writeable-blobs.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1833: kvm-Enable-fw_cfg-DMA-interface-for-x86.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1834: kvm-fw_cfg-unbreak-migration-compatibility.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1835: kvm-i386-expose-fw_cfg-QEMU0002-in-SSDT.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1836: kvm-fw_cfg-add-write-callback.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1837: kvm-hw-misc-add-vmcoreinfo-device.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1838: kvm-vmcoreinfo-put-it-in-the-misc-device-category.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1839: kvm-fw_cfg-enable-DMA-if-device-vmcoreinfo.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1840: kvm-build-sys-restrict-vmcoreinfo-to-fw_cfg-dma-capable-.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1841: kvm-dump-Make-DumpState-and-endian-conversion-routines-a.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1842: kvm-dump.c-Fix-memory-leak-issue-in-cleanup-processing-f.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1843: kvm-dump-Propagate-errors-into-qmp_dump_guest_memory.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1844: kvm-dump-Turn-some-functions-to-void-to-make-code-cleane.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1845: kvm-dump-Fix-dump-guest-memory-termination-and-use-after.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1846: kvm-dump-allow-target-to-set-the-page-size.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1847: kvm-dump-allow-target-to-set-the-physical-base.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1848: kvm-dump-guest-memory-cleanup-removing-dump_-error-clean.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1849: kvm-dump-guest-memory-using-static-DumpState-add-DumpSta.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1850: kvm-dump-guest-memory-add-dump_in_progress-helper-functi.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1851: kvm-dump-guest-memory-introduce-dump_process-helper-func.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1852: kvm-dump-guest-memory-disable-dump-when-in-INMIGRATE-sta.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1853: kvm-DumpState-adding-total_size-and-written_size-fields.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1854: kvm-dump-do-not-dump-non-existent-guest-memory.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1855: kvm-dump-add-guest-ELF-note.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1856: kvm-dump-update-phys_base-header-field-based-on-VMCOREIN.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1857: kvm-kdump-set-vmcoreinfo-location.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1858: kvm-scripts-dump-guest-memory.py-Move-constants-to-the-t.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1859: kvm-scripts-dump-guest-memory.py-Make-methods-functions.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1860: kvm-scripts-dump-guest-memory.py-Improve-python-3-compat.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1861: kvm-scripts-dump-guest-memory.py-Cleanup-functions.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1862: kvm-scripts-dump-guest-memory.py-Introduce-multi-arch-su.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1863: kvm-Fix-typo-in-variable-name-found-and-fixed-by-codespe.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1864: kvm-scripts-dump-guest-memory.py-add-vmcoreinfo.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1865: kvm-dump-guest-memory.py-fix-No-symbol-vmcoreinfo_find.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1866: kvm-dump-guest-memory.py-fix-You-can-t-do-that-without-a.patch +# For bz#CVE-2017-5715 +Patch1867: kvm-target-i386-cpu-add-new-CPUID-bits-for-indirect-bran.patch +# For bz#CVE-2017-5715 +Patch1868: kvm-target-i386-add-support-for-SPEC_CTRL-MSR.patch +# For bz#CVE-2017-5715 +Patch1869: kvm-target-i386-cpu-add-new-CPU-models-for-indirect-bran.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1870: kvm-i386-update-ssdt-misc.hex.generated.patch +# For bz#1435432 - Emulated ISA serial port hangs randomly when sending lots of data from guest -> host +# For bz#1473536 - Hangs in serial console under qemu +Patch1871: kvm-main-loop-Acquire-main_context-lock-around-os_host_m.patch +# For bz#1460872 - Aborted(core dumped) when booting guest with "-netdev tap....vhost=on,queues=32" +Patch1872: kvm-virtio-net-validate-backend-queue-numbers-against-bu.patch +# For bz#1411490 - [RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm) +Patch1873: kvm-dump-guest-memory.py-fix-python-2-support.patch +# For bz#1536883 - [abrt] [faf] qemu-kvm: unknown function(): /usr/libexec/qemu-kvm killed by 6 +Patch1874: kvm-qxl-add-migration-blocker-to-avoid-pre-save-assert.patch +# For bz#1538866 - qemu will coredump after executing info qtree +Patch1875: kvm-qdev-Fix-assert-in-PCI-address-property-when-used-by.patch +# For bz#1534691 - CVE-2018-5683 qemu-kvm: Qemu: Out-of-bounds read in vga_draw_text routine [rhel-7.5] +Patch1876: kvm-vga-check-the-validation-of-memory-addr-when-draw-te.patch +# For bz#1536883 - [abrt] [faf] qemu-kvm: unknown function(): /usr/libexec/qemu-kvm killed by 6 +Patch1877: kvm-savevm-Improve-error-message-for-blocked-migration.patch +# For bz#1536883 - [abrt] [faf] qemu-kvm: unknown function(): /usr/libexec/qemu-kvm killed by 6 +Patch1878: kvm-savevm-fail-if-migration-blockers-are-present.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1879: kvm-vnc-Fix-qemu-crashed-when-vnc-client-disconnect-sudd.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1880: kvm-fix-full-frame-updates-for-VNC-clients.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1881: kvm-vnc-update-fix.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1882: kvm-vnc-return-directly-if-no-vnc-client-connected.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1883: kvm-buffer-add-buffer_move_empty.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1884: kvm-buffer-add-buffer_move.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1885: kvm-vnc-kill-jobs-queue-buffer.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1886: kvm-vnc-jobs-move-buffer-reset-use-new-buffer-move.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1887: kvm-vnc-zap-dead-code.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1888: kvm-vnc-add-vnc_width-vnc_height-helpers.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1889: kvm-vnc-factor-out-vnc_update_server_surface.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1890: kvm-vnc-use-vnc_-width-height-in-vnc_set_area_dirty.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1891: kvm-vnc-only-alloc-server-surface-with-clients-connected.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1892: kvm-ui-fix-refresh-of-VNC-server-surface.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1893: kvm-ui-move-disconnecting-check-to-start-of-vnc_update_c.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1894: kvm-ui-remove-redundant-indentation-in-vnc_client_update.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1895: kvm-ui-avoid-pointless-VNC-updates-if-framebuffer-isn-t-.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1896: kvm-ui-track-how-much-decoded-data-we-consumed-when-doin.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1897: kvm-ui-introduce-enum-to-track-VNC-client-framebuffer-up.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1898: kvm-ui-correctly-reset-framebuffer-update-state-after-pr.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1899: kvm-ui-refactor-code-for-determining-if-an-update-should.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1900: kvm-ui-fix-VNC-client-throttling-when-audio-capture-is-a.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1901: kvm-ui-fix-VNC-client-throttling-when-forced-update-is-r.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1902: kvm-ui-place-a-hard-cap-on-VNC-server-output-buffer-size.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1903: kvm-ui-avoid-sign-extension-using-client-width-height.patch +# For bz#1527405 - CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5] +Patch1904: kvm-ui-correctly-advance-output-buffer-when-writing-SASL.patch +# For bz#1518711 - CVE-2017-15268 qemu-kvm: Qemu: I/O: potential memory exhaustion via websock connection to VNC [rhel-7.5] +Patch1905: kvm-io-skip-updates-to-client-if-websocket-output-buffer.patch +# For bz#1553670 - CVE-2018-7858 qemu-kvm: Qemu: cirrus: OOB access when updating vga display [rhel-7] +Patch1906: kvm-vga-add-ram_addr_t-cast.patch +# For bz#1553670 - CVE-2018-7858 qemu-kvm: Qemu: cirrus: OOB access when updating vga display [rhel-7] +Patch1907: kvm-vga-fix-region-calculation.patch +# For bz#1574082 - CVE-2018-3639 qemu-kvm: hw: cpu: speculative store bypass [rhel-7.6] +Patch1908: kvm-i386-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch +# For bz#1577680 - Windows 2012 Guest hangs after live migration with RTC clock stopped. +Patch1909: kvm-target-i386-introduce-kvm_put_one_msr.patch +# For bz#1577680 - Windows 2012 Guest hangs after live migration with RTC clock stopped. +Patch1910: kvm-apic-fix-2.2-2.1-migration.patch +# For bz#1577680 - Windows 2012 Guest hangs after live migration with RTC clock stopped. +Patch1911: kvm-x86-lapic-Load-LAPIC-state-at-post_load.patch +# For bz#1577680 - Windows 2012 Guest hangs after live migration with RTC clock stopped. +Patch1912: kvm-apic-drop-debugging.patch +# For bz#1577680 - Windows 2012 Guest hangs after live migration with RTC clock stopped. +Patch1913: kvm-apic-set-APIC-base-as-part-of-kvm_apic_put.patch +# For bz#1513686 - [Intel 7.6 Feat] qemu-kvm Enabling Icelake new NIs +Patch1914: kvm-x86-cpu-Enable-new-SSE-AVX-AVX512-cpu-features.patch +# For bz#1526638 - [Intel 7.6 FEAT] KVM User Mode Instruction Prevention (UMIP) - qemu-kvm +Patch1915: kvm-target-i386-Add-support-for-UMIP-and-RDPID-CPUID-bit.patch +# For bz#1584583 - CVE-2018-3639 qemu-kvm: hw: cpu: speculative store bypass [rhel-7.6] +Patch1916: kvm-i386-Define-the-Virt-SSBD-MSR-and-handling-of-it-CVE.patch +# For bz#1584583 - CVE-2018-3639 qemu-kvm: hw: cpu: speculative store bypass [rhel-7.6] +Patch1917: kvm-i386-define-the-AMD-virt-ssbd-CPUID-feature-bit-CVE-.patch +# For bz#1527122 - The copied flag should be updated during '-r leaks' +Patch1918: kvm-qcow2-Repair-OFLAG_COPIED-when-fixing-leaks.patch +# For bz#1527122 - The copied flag should be updated during '-r leaks' +Patch1919: kvm-iotests-Repairing-error-during-snapshot-deletion.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1920: kvm-headers-add-drm_fourcc.h.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1921: kvm-spice-fix-simple-display-on-bigendian-hosts.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1922: kvm-ui-pixman-add-qemu_drm_format_to_pixman.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1923: kvm-console-nicer-initial-screen.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1924: kvm-console-minimal-hotplug-suport.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1925: kvm-vfio-common-cleanup-in-vfio_region_finalize.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1926: kvm-linux-headers-Update-to-include-region-based-display.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1927: kvm-qdev-New-DEFINE_PROP_ON_OFF_AUTO.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1928: kvm-vfio-display-core-wireup.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1929: kvm-vfio-display-adding-region-support.patch +# For bz#1555246 - [RFE] Support console VNC on Nvidia vGPU - qemu +Patch1930: kvm-vfio-pci-Default-display-option-to-off.patch +# For bz#1549822 - CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6] +Patch1931: kvm-multiboot-bss_end_addr-can-be-zero.patch +# For bz#1549822 - CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6] +Patch1932: kvm-multiboot-Remove-unused-variables-from-multiboot.c.patch +# For bz#1549822 - CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6] +Patch1933: kvm-multiboot-Use-header-names-when-displaying-fields.patch +# For bz#1549822 - CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6] +Patch1934: kvm-multiboot-fprintf-stderr.-error_report.patch +# For bz#1549822 - CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6] +Patch1935: kvm-multiboot-Reject-kernels-exceeding-the-address-space.patch +# For bz#1549822 - CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6] +Patch1936: kvm-multiboot-Check-validity-of-mh_header_addr.patch +# For bz#1586253 - CVE-2018-11806 qemu-kvm: QEMU: slirp: heap buffer overflow while reassembling fragmented datagrams [rhel-7.6] +Patch1937: kvm-slirp-remove-mbuf-m_hdr-m_dat-indirection.patch +# For bz#1586253 - CVE-2018-11806 qemu-kvm: QEMU: slirp: heap buffer overflow while reassembling fragmented datagrams [rhel-7.6] +Patch1938: kvm-slirp-correct-size-computation-while-concatenating-m.patch +# For bz#1583807 - [DELL EMC 7.6 FEAT] option to mark virtual block device as rotational/non-rotational +Patch1939: kvm-scsi-disk-support-reporting-of-rotation-rate.patch +# For bz#1583807 - [DELL EMC 7.6 FEAT] option to mark virtual block device as rotational/non-rotational +Patch1940: kvm-ide-support-reporting-of-rotation-rate.patch +# For bz#1583807 - [DELL EMC 7.6 FEAT] option to mark virtual block device as rotational/non-rotational +Patch1941: kvm-ide-avoid-referencing-NULL-dev-in-rotational-rate-se.patch +# For bz#1586253 - CVE-2018-11806 qemu-kvm: QEMU: slirp: heap buffer overflow while reassembling fragmented datagrams [rhel-7.6] +Patch1942: kvm-slirp-Correct-size-check-in-m_inc.patch +# For bz#1659229 - Ballooning is incompatible with vfio assigned devices, but not prevented +Patch1943: kvm-Inhibit-ballooning-during-postcopy.patch +# For bz#1659229 - Ballooning is incompatible with vfio assigned devices, but not prevented +Patch1944: kvm-balloon-Allow-multiple-inhibit-users.patch +# For bz#1659229 - Ballooning is incompatible with vfio assigned devices, but not prevented +Patch1945: kvm-check-KVM_CAP_SYNC_MMU-with-kvm_vm_check_extensi.patch +# For bz#1659229 - Ballooning is incompatible with vfio assigned devices, but not prevented +Patch1946: kvm-Use-inhibit-to-prevent-ballooning-without-synchr.patch +# For bz#1659229 - Ballooning is incompatible with vfio assigned devices, but not prevented +Patch1947: kvm-vfio-Inhibit-ballooning-based-on-group-attachment-to.patch +# For bz#1658407 - mode="host-model" VMs include broken "arch-facilities" flag name [qemu-kvm] +Patch1948: kvm-i386-Deprecate-arch-facilities-and-make-it-block-liv.patch +# For bz#1654627 - Qemu: hw: bt: keep bt/* objects from building [rhel-7.7] +Patch1949: kvm-Do-not-build-bluetooth-support.patch +# For bz#1537773 - [Intel 7.7 Feat] KVM Enabling SnowRidge new NIs - qemu-kvm +Patch1950: kvm-x86-cpu-Enable-CLDEMOTE-Demote-Cache-Line-cpu-featur.patch +# For bz#1459077 - [Intel 7.7 Bug] QEMU version in RHEL7.4 beta does not support KVM passthrough with WFR card +Patch1951: kvm-vfio-pci-Lazy-PBA-emulation.patch +# For bz#1689791 - CVE-2019-9824 qemu-kvm: QEMU: Slirp: information leakage in tcp_emu() due to uninitialized stack variables [rhel-7] +Patch1952: kvm-slirp-check-sscanf-result-when-emulating-ident.patch +# For bz#1693217 - CVE-2018-12126 qemu-kvm: hardware: Microarchitectural Store Buffer Data Sampling [rhel-7.7] +Patch1953: kvm-target-i386-define-md-clear-bit-rhel.patch +# For bz#1709495 - Change CPUID[0x40000000].EAX from 0 to KVM_CPUID_FE...ATURES (0x40000001) +Patch1954: kvm-Fix-eax-for-cpuid-leaf-0x40000000.patch +# For bz#1669068 - CVE-2019-6778 qemu-kvm: QEMU: slirp: heap buffer overflow in tcp_emu() [rhel-7.7] +Patch1955: kvm-slirp-fix-big-little-endian-conversion-in-ident-prot.patch +# For bz#1669068 - CVE-2019-6778 qemu-kvm: QEMU: slirp: heap buffer overflow in tcp_emu() [rhel-7.7] +Patch1956: kvm-slirp-ensure-there-is-enough-space-in-mbuf-to-null-t.patch +# For bz#1669068 - CVE-2019-6778 qemu-kvm: QEMU: slirp: heap buffer overflow in tcp_emu() [rhel-7.7] +Patch1957: kvm-slirp-don-t-manipulate-so_rcv-in-tcp_emu.patch +# For bz#1712703 - CVE-2019-12155 qemu-kvm: QEMU: qxl: null pointer dereference while releasing spice resources [rhel-7] +Patch1958: kvm-qxl-check-release-info-object.patch +# For bz#1270166 - UDP packet checksum is not converted from 0x0000 to 0xffff with Qemu e1000 emulation. +Patch1959: kvm-bswap.h-Remove-cpu_to_be16wu.patch +# For bz#1270166 - UDP packet checksum is not converted from 0x0000 to 0xffff with Qemu e1000 emulation. +Patch1960: kvm-net-Transmit-zero-UDP-checksum-as-0xFFFF.patch +# For bz#1734749 - CVE-2019-14378 qemu-kvm: QEMU: slirp: heap buffer overflow during packet reassembly [rhel-7.8] +Patch1961: kvm-Fix-heap-overflow-in-ip_reass-on-big-packet-input.patch +# For bz#1626871 - [RFE] request for using TscInvariant feature with qemu-kvm. +Patch1962: kvm-target-i386-Support-invariant-tsc-flag.patch +# For bz#1626871 - [RFE] request for using TscInvariant feature with qemu-kvm. +Patch1963: kvm-target-i386-block-migration-and-savevm-if-invariant-.patch +# For bz#1706658 - [Intel 7.8 Bug] qemu-kvm fail with "err:kvm_init_vcpu() invalidate argumant" on ICX platform +Patch1964: kvm-i386-Don-t-copy-host-virtual-address-limit.patch +# For bz#1749735 - CVE-2019-15890 qemu-kvm: QEMU: Slirp: use-after-free during packet reassembly [rhel-7] +Patch1965: kvm-Using-ip_deq-after-m_free-might-read-pointers-from-a.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1966: kvm-target-i386-Merge-feature-filtering-checking-functio.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1967: kvm-target-i386-Isolate-KVM-specific-code-on-CPU-feature.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1968: kvm-i386-Add-new-MSR-indices-for-IA32_PRED_CMD-and-IA32_.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1969: kvm-i386-Add-CPUID-bit-and-feature-words-for-IA32_ARCH_C.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1970: kvm-Add-support-to-KVM_GET_MSR_FEATURE_INDEX_LIST-an.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1971: kvm-x86-Data-structure-changes-to-support-MSR-based-feat.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1972: kvm-x86-define-a-new-MSR-based-feature-word-FEATURE_WORD.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1973: kvm-Use-KVM_GET_MSR_INDEX_LIST-for-MSR_IA32_ARCH_CAP.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1974: kvm-i386-kvm-Disable-arch_capabilities-if-MSR-can-t-be-s.patch +# For bz#1709971 - [Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm +Patch1975: kvm-Remove-arch-capabilities-deprecation.patch +# For bz#1714791 - [Intel 7.8 FEAT] MDS_NO exposure to guest - qemu-kvm +Patch1976: kvm-target-i386-add-MDS-NO-feature.patch + + +BuildRequires: zlib-devel +BuildRequires: SDL-devel +BuildRequires: which +BuildRequires: gnutls-devel +BuildRequires: cyrus-sasl-devel +BuildRequires: libtool +BuildRequires: libaio-devel +BuildRequires: rsync +BuildRequires: python +BuildRequires: pciutils-devel +BuildRequires: pulseaudio-libs-devel +BuildRequires: libiscsi-devel +BuildRequires: ncurses-devel +BuildRequires: libattr-devel +BuildRequires: libusbx-devel +%if 0%{?have_usbredir:1} +BuildRequires: usbredir-devel >= 0.6 +%endif +BuildRequires: texinfo +%if 0%{!?build_only_sub:1} + %if 0%{?have_spice:1} +BuildRequires: spice-protocol >= 0.12.2 +BuildRequires: spice-server-devel >= 0.12.0 + %endif +%endif +%if 0%{?have_seccomp:1} +BuildRequires: libseccomp-devel >= 1.0.0 +%endif +%if 0%{?have_tcmalloc:1} +BuildRequires: gperftools-devel +%endif +# For network block driver +BuildRequires: libcurl-devel +%ifarch x86_64 +BuildRequires: librados2-devel +BuildRequires: librbd1-devel +%endif +%if 0%{!?build_only_sub:1} +# For gluster block driver +BuildRequires: glusterfs-api-devel >= 3.6.0 +BuildRequires: glusterfs-devel +%endif +# We need both because the 'stap' binary is probed for by configure +BuildRequires: systemtap +BuildRequires: systemtap-sdt-devel +# For smartcard NSS support +BuildRequires: nss-devel +# For XFS discard support in raw-posix.c +# For VNC JPEG support +BuildRequires: libjpeg-devel +# For VNC PNG support +BuildRequires: libpng-devel +# For uuid generation +BuildRequires: libuuid-devel +# For BlueZ device support +BuildRequires: bluez-libs-devel +# For Braille device support +BuildRequires: brlapi-devel +# For test suite +BuildRequires: check-devel +# For virtfs +BuildRequires: libcap-devel +# Hard requirement for version >= 1.3 +BuildRequires: pixman-devel +# Documentation requirement +BuildRequires: perl-podlators +BuildRequires: texinfo +# For rdma +%if 0%{?have_librdma:1} +BuildRequires: rdma-core-devel +%endif +# cpp for preprocessing option ROM assembly files +%ifarch %{ix86} x86_64 +BuildRequires: cpp +%endif +%if 0%{!?build_only_sub:1} +# For compressed guest memory dumps +BuildRequires: lzo-devel snappy-devel +%endif +BuildRequires: libssh2-devel +BuildRequires: libcurl-devel + + +%if 0%{!?build_only_sub:1} +Requires: qemu-img = %{epoch}:%{version}-%{release} +%endif + +# RHEV-specific changes: +# We provide special suffix for qemu-kvm so the conflit is easy +# In addition, RHEV version should obsolete all RHEL version in case both +# RHEL and RHEV channels are used +%rhel_rhev_conflicts qemu-kvm + + +%define qemudocdir %{_docdir}/%{pkgname} + +%description +qemu-kvm%{?pkgsuffix} is an open source virtualizer that provides hardware +emulation for the KVM hypervisor. qemu-kvm%{?pkgsuffix} acts as a virtual +machine monitor together with the KVM kernel modules, and emulates the +hardware for a full system such as a PC and its associated peripherals. + +%package -n qemu-img%{?pkgsuffix} +Summary: QEMU command line tool for manipulating disk images +Group: Development/Tools + +%rhel_rhev_conflicts qemu-img + +%description -n qemu-img%{?pkgsuffix} +This package provides a command line tool for manipulating disk images. + +%if 0%{!?build_only_sub:1} +%package -n qemu-kvm-common%{?pkgsuffix} +Summary: QEMU common files needed by all QEMU targets +Group: Development/Tools +Requires(post): /usr/bin/getent +Requires(post): /usr/sbin/groupadd +Requires(post): /usr/sbin/useradd +Requires(post): systemd-units +Requires(preun): systemd-units +Requires(postun): systemd-units + +%rhel_rhev_conflicts qemu-kvm-common + +%description -n qemu-kvm-common%{?pkgsuffix} +qemu-kvm is an open source virtualizer that provides hardware emulation for +the KVM hypervisor. + +This package provides documentation and auxiliary programs used with qemu-kvm. + +%endif + +%if %{with guest_agent} +%package -n qemu-guest-agent +Summary: QEMU guest agent +Group: System Environment/Daemons +Requires(post): systemd-units +Requires(preun): systemd-units +Requires(postun): systemd-units + +%description -n qemu-guest-agent +qemu-kvm is an open source virtualizer that provides hardware emulation for +the KVM hypervisor. + +This package provides an agent to run inside guests, which communicates +with the host over a virtio-serial channel named "org.qemu.guest_agent.0" + +This package does not need to be installed on the host OS. + +%post -n qemu-guest-agent +%systemd_post qemu-guest-agent.service + +%preun -n qemu-guest-agent +%systemd_preun qemu-guest-agent.service + +%postun -n qemu-guest-agent +%systemd_postun_with_restart qemu-guest-agent.service + +%endif + +%if 0%{!?build_only_sub:1} +%package -n qemu-kvm-tools%{?pkgsuffix} +Summary: KVM debugging and diagnostics tools +Group: Development/Tools + +%rhel_rhev_conflicts qemu-kvm-tools + +%description -n qemu-kvm-tools%{?pkgsuffix} +This package contains some diagnostics and debugging tools for KVM, +such as kvm_stat. +%endif + +%prep +%setup -q -n qemu-%{version} +cp %{SOURCE18} pc-bios # keep "make check" happy +tar -xf %{SOURCE21} +%patch1 -p1 +#%%patch2 -p1 +#%%patch3 -p1 +#%%patch4 -p1 +#%%patch5 -p1 +#%%patch6 -p1 +#%%patch7 -p1 +#%%patch8 -p1 +#%%patch9 -p1 +#%%patch10 -p1 +#%%patch11 -p1 +#%%patch12 -p1 +#%%patch13 -p1 +#%%patch14 -p1 +#%%patch15 -p1 +#%%patch16 -p1 +#%%patch17 -p1 +#%%patch18 -p1 +#%%patch19 -p1 +#%%patch20 -p1 +#%%patch21 -p1 +#%%patch22 -p1 +#%%patch23 -p1 +#%%patch24 -p1 +#%%patch25 -p1 +#%%patch26 -p1 +#%%patch27 -p1 +#%%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 + +# Fix CPUID model/level values on Conroe/Penryn/Nehalem CPU models +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 + +#%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 +%patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +%patch59 -p1 +%patch60 -p1 +%patch61 -p1 +#%%patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +%patch70 -p1 +%patch71 -p1 +%patch72 -p1 +#%%patch73 -p1 +%patch74 -p1 +%patch75 -p1 + +%patch76 -p1 +%patch77 -p1 +%patch78 -p1 +%patch79 -p1 +%patch80 -p1 +%patch81 -p1 +%patch82 -p1 +%patch83 -p1 +%patch84 -p1 +%patch85 -p1 +%patch86 -p1 +%patch87 -p1 +%patch88 -p1 +%patch89 -p1 +#%%patch90 -p1 +#%%patch91 -p1 +#%%patch92 -p1 +%patch93 -p1 +%patch94 -p1 +#%%patch95 -p1 +%patch96 -p1 +%patch97 -p1 +%patch98 -p1 +%patch99 -p1 +%patch100 -p1 +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 +%patch104 -p1 +%patch105 -p1 +%patch106 -p1 +%patch107 -p1 +%patch108 -p1 +%patch109 -p1 +%patch110 -p1 +%patch111 -p1 +%patch112 -p1 +%patch113 -p1 +%patch114 -p1 +%patch115 -p1 +%patch116 -p1 +%patch117 -p1 +%patch118 -p1 +%patch119 -p1 +%patch120 -p1 +%patch121 -p1 +%patch122 -p1 +%patch123 -p1 +%patch124 -p1 +%patch125 -p1 +%patch126 -p1 +%patch127 -p1 +%patch128 -p1 +%patch129 -p1 +%patch130 -p1 +%patch131 -p1 +%patch132 -p1 +%patch133 -p1 +%patch134 -p1 +%patch135 -p1 +%patch136 -p1 +%patch137 -p1 +%patch138 -p1 +%patch139 -p1 +%patch140 -p1 +%patch141 -p1 +%patch142 -p1 +%patch143 -p1 +%patch144 -p1 +%patch145 -p1 +%patch146 -p1 +%patch147 -p1 +%patch148 -p1 +%patch149 -p1 +%patch150 -p1 +%patch151 -p1 +%patch152 -p1 +%patch153 -p1 +%patch154 -p1 +%patch155 -p1 +%patch156 -p1 +%patch157 -p1 +%patch158 -p1 +%patch159 -p1 +%patch160 -p1 +%patch161 -p1 +%patch162 -p1 +%patch163 -p1 +%patch164 -p1 +%patch165 -p1 +%patch166 -p1 +%patch168 -p1 +%patch169 -p1 +%patch170 -p1 +%patch171 -p1 +%patch172 -p1 +%patch173 -p1 +%patch174 -p1 +%patch175 -p1 +%patch176 -p1 +%patch177 -p1 +%patch178 -p1 +%patch179 -p1 +%patch180 -p1 +%patch181 -p1 +%patch182 -p1 +%patch183 -p1 +%patch184 -p1 +%patch185 -p1 +%patch186 -p1 +%patch187 -p1 +%patch188 -p1 +%patch189 -p1 +%patch190 -p1 +%patch191 -p1 +%patch192 -p1 +%patch193 -p1 +%patch194 -p1 +%patch195 -p1 +%patch196 -p1 +%patch197 -p1 +%patch198 -p1 +%patch199 -p1 +%patch200 -p1 +%patch201 -p1 +%patch202 -p1 +%patch203 -p1 +%patch204 -p1 +%patch205 -p1 +%patch206 -p1 +%patch207 -p1 +%patch208 -p1 +%patch209 -p1 +%patch210 -p1 +%patch211 -p1 +%patch212 -p1 +%patch213 -p1 +%patch214 -p1 +%patch215 -p1 +%patch216 -p1 +%patch217 -p1 +%patch218 -p1 +%patch219 -p1 +%patch220 -p1 +%patch221 -p1 +%patch222 -p1 +%patch223 -p1 +%patch224 -p1 +%patch225 -p1 +%patch226 -p1 +%patch227 -p1 +%patch228 -p1 +%patch229 -p1 +%patch230 -p1 +%patch231 -p1 +%patch232 -p1 +%patch233 -p1 +%patch234 -p1 +%patch235 -p1 +%patch236 -p1 +%patch237 -p1 +%patch238 -p1 +%patch239 -p1 +%patch240 -p1 +%patch241 -p1 +%patch242 -p1 +%patch243 -p1 +%patch244 -p1 +%patch245 -p1 +%patch246 -p1 +%patch247 -p1 +%patch248 -p1 +%patch249 -p1 +%patch250 -p1 +%patch251 -p1 +%patch252 -p1 +%patch253 -p1 +%patch254 -p1 +%patch255 -p1 +%patch256 -p1 +%patch257 -p1 +%patch258 -p1 +%patch259 -p1 +%patch260 -p1 +%patch261 -p1 +%patch262 -p1 +%patch263 -p1 +%patch264 -p1 +%patch265 -p1 +%patch266 -p1 +%patch267 -p1 +%patch268 -p1 +%patch269 -p1 +%patch270 -p1 +%patch271 -p1 +%patch272 -p1 +%patch273 -p1 +%patch274 -p1 +%patch275 -p1 +%patch276 -p1 +%patch277 -p1 +%patch278 -p1 +%patch279 -p1 +%patch280 -p1 +%patch281 -p1 +%patch282 -p1 +%patch283 -p1 +%patch284 -p1 +%patch285 -p1 +%patch286 -p1 +%patch287 -p1 +%patch288 -p1 +%patch289 -p1 +%patch290 -p1 +%patch291 -p1 +%patch292 -p1 +%patch293 -p1 +%patch294 -p1 +%patch295 -p1 +%patch296 -p1 +%patch297 -p1 +%patch298 -p1 +%patch299 -p1 +%patch300 -p1 +%patch301 -p1 +%patch302 -p1 +%patch303 -p1 +%patch304 -p1 +%patch305 -p1 +%patch306 -p1 +%patch307 -p1 +%patch308 -p1 +%patch309 -p1 +%patch310 -p1 +%patch311 -p1 +%patch312 -p1 +%patch313 -p1 +%patch314 -p1 +%patch315 -p1 +%patch316 -p1 +%patch317 -p1 +%patch318 -p1 +%patch319 -p1 +%patch320 -p1 +%patch321 -p1 +%patch322 -p1 +%patch323 -p1 +%patch324 -p1 +%patch325 -p1 +%patch326 -p1 +%patch327 -p1 +%patch328 -p1 +%patch329 -p1 +%patch330 -p1 +%patch331 -p1 +%patch332 -p1 +%patch333 -p1 +%patch334 -p1 +%patch335 -p1 +%patch336 -p1 +%patch337 -p1 +%patch338 -p1 +%patch339 -p1 +%patch340 -p1 +%patch341 -p1 +%patch342 -p1 +%patch343 -p1 +%patch344 -p1 +%patch345 -p1 +%patch346 -p1 +%patch347 -p1 +%patch348 -p1 +%patch349 -p1 +%patch350 -p1 +%patch351 -p1 +%patch352 -p1 +%patch353 -p1 +%patch354 -p1 +%patch355 -p1 +%patch356 -p1 +%patch357 -p1 +%patch358 -p1 +%patch359 -p1 +%patch360 -p1 +%patch361 -p1 +%patch362 -p1 +%patch363 -p1 +%patch364 -p1 +%patch365 -p1 +%patch366 -p1 +%patch367 -p1 +%patch368 -p1 +%patch369 -p1 +%patch370 -p1 +%patch371 -p1 +%patch372 -p1 +%patch373 -p1 +%patch374 -p1 +%patch375 -p1 +%patch376 -p1 +%patch377 -p1 +%patch378 -p1 +%patch379 -p1 +%patch380 -p1 +%patch381 -p1 +%patch382 -p1 +%patch383 -p1 +%patch384 -p1 +%patch385 -p1 +%patch386 -p1 +%patch387 -p1 +%patch388 -p1 +%patch389 -p1 +%patch390 -p1 +%patch391 -p1 +%patch392 -p1 +%patch393 -p1 +%patch394 -p1 +%patch395 -p1 +%patch396 -p1 +%patch397 -p1 +%patch398 -p1 +%patch399 -p1 +%patch400 -p1 +%patch401 -p1 +%patch402 -p1 +%patch403 -p1 +%patch404 -p1 +%patch405 -p1 +%patch406 -p1 +%patch407 -p1 +%patch408 -p1 +%patch409 -p1 +%patch410 -p1 +%patch411 -p1 +%patch412 -p1 +%patch413 -p1 +%patch414 -p1 +%patch415 -p1 +%patch416 -p1 +%patch417 -p1 +%patch418 -p1 +%patch419 -p1 +%patch420 -p1 +%patch421 -p1 +%patch422 -p1 +%patch423 -p1 +%patch424 -p1 +%patch425 -p1 +%patch426 -p1 +%patch427 -p1 +%patch428 -p1 +%patch429 -p1 +%patch430 -p1 +%patch431 -p1 +%patch432 -p1 +%patch433 -p1 +%patch434 -p1 +%patch435 -p1 +%patch436 -p1 +%patch437 -p1 +%patch438 -p1 +%patch439 -p1 +%patch440 -p1 +%patch441 -p1 +%patch442 -p1 +%patch443 -p1 +%patch444 -p1 +%patch445 -p1 +%patch446 -p1 +%patch447 -p1 +%patch448 -p1 +%patch449 -p1 +%patch450 -p1 +%patch451 -p1 +%patch452 -p1 +%patch453 -p1 +%patch454 -p1 +%patch455 -p1 +%patch456 -p1 +%patch457 -p1 +%patch458 -p1 +%patch459 -p1 +%patch460 -p1 +%patch461 -p1 +%patch462 -p1 +%patch463 -p1 +%patch464 -p1 +%patch465 -p1 +%patch466 -p1 +%patch467 -p1 +%patch468 -p1 +%patch469 -p1 +%patch470 -p1 +%patch471 -p1 +%patch472 -p1 +%patch473 -p1 +%patch474 -p1 +%patch475 -p1 +%patch476 -p1 +%patch477 -p1 +%patch478 -p1 +%patch479 -p1 +%patch480 -p1 +%patch481 -p1 +#%patch482 -p1 +%patch483 -p1 +%patch484 -p1 +%patch485 -p1 +%patch486 -p1 +%patch487 -p1 +%patch488 -p1 +%patch489 -p1 +%patch490 -p1 +%patch491 -p1 +%patch492 -p1 +%patch493 -p1 +%patch494 -p1 +%patch495 -p1 +%patch496 -p1 +%patch497 -p1 +%patch498 -p1 +%patch499 -p1 +%patch500 -p1 +%patch501 -p1 +%patch502 -p1 +%patch503 -p1 +%patch504 -p1 +%patch505 -p1 +%patch506 -p1 +%patch507 -p1 +%patch508 -p1 +%patch509 -p1 +%patch510 -p1 +%patch511 -p1 +%patch512 -p1 +%patch513 -p1 +%patch514 -p1 +%patch515 -p1 +%patch516 -p1 +%patch517 -p1 +%patch518 -p1 +%patch519 -p1 +%patch520 -p1 +%patch521 -p1 +%patch522 -p1 +%patch523 -p1 +%patch524 -p1 +%patch525 -p1 +%patch526 -p1 +%patch527 -p1 +%patch528 -p1 +%patch529 -p1 +%patch530 -p1 +%patch531 -p1 +%patch532 -p1 +%patch533 -p1 +%patch534 -p1 +%patch535 -p1 +%patch536 -p1 +%patch537 -p1 +%patch538 -p1 +%patch539 -p1 +%patch540 -p1 +%patch541 -p1 +%patch542 -p1 +%patch543 -p1 +%patch544 -p1 +%patch545 -p1 +%patch546 -p1 +%patch547 -p1 +%patch548 -p1 +%patch549 -p1 +%patch550 -p1 +%patch551 -p1 +%patch552 -p1 +%patch553 -p1 +%patch554 -p1 +%patch555 -p1 +%patch556 -p1 +%patch557 -p1 +%patch558 -p1 +%patch559 -p1 +%patch560 -p1 +%patch561 -p1 +%patch562 -p1 +%patch563 -p1 +%patch564 -p1 +%patch565 -p1 +%patch566 -p1 +%patch567 -p1 +%patch568 -p1 +%patch569 -p1 +%patch570 -p1 +%patch571 -p1 +%patch572 -p1 +%patch573 -p1 +%patch574 -p1 +%patch575 -p1 +%patch576 -p1 +%patch577 -p1 +%patch578 -p1 +%patch579 -p1 +%patch580 -p1 +%patch581 -p1 +%patch582 -p1 +%patch583 -p1 +%patch584 -p1 +%patch585 -p1 +%patch586 -p1 +%patch587 -p1 +%patch588 -p1 +%patch589 -p1 +%patch590 -p1 +%patch591 -p1 +%patch592 -p1 +%patch593 -p1 +%patch594 -p1 +%patch595 -p1 +%patch596 -p1 +%patch597 -p1 +%patch598 -p1 +%patch599 -p1 +%patch600 -p1 +%patch601 -p1 +%patch602 -p1 +%patch603 -p1 +%patch604 -p1 +%patch605 -p1 +%patch606 -p1 +%patch607 -p1 +%patch608 -p1 +%patch609 -p1 +%patch610 -p1 +%patch611 -p1 +%patch612 -p1 +%patch613 -p1 +%patch614 -p1 +%patch615 -p1 +%patch616 -p1 +%patch617 -p1 +%patch618 -p1 +%patch619 -p1 +%patch620 -p1 +%patch621 -p1 +%patch622 -p1 +%patch623 -p1 +%patch624 -p1 +%patch625 -p1 +%patch626 -p1 +%patch627 -p1 +%patch628 -p1 +%patch629 -p1 +%patch630 -p1 +%patch631 -p1 +%patch632 -p1 +%patch633 -p1 +%patch634 -p1 +%patch635 -p1 +%patch636 -p1 +%patch637 -p1 +%patch638 -p1 +%patch639 -p1 +%patch640 -p1 +%patch641 -p1 +%patch642 -p1 +%patch643 -p1 +%patch644 -p1 +%patch645 -p1 +%patch646 -p1 +%patch647 -p1 +%patch648 -p1 +%patch649 -p1 +%patch650 -p1 +%patch651 -p1 +%patch652 -p1 +%patch653 -p1 +%patch654 -p1 +%patch655 -p1 +%patch656 -p1 +%patch657 -p1 +%patch658 -p1 +%patch659 -p1 +%patch660 -p1 +%patch661 -p1 +%patch662 -p1 +%patch663 -p1 +%patch664 -p1 +%patch665 -p1 +%patch666 -p1 +%patch667 -p1 +%patch668 -p1 +%patch669 -p1 +%patch670 -p1 +%patch671 -p1 +%patch672 -p1 +%patch673 -p1 +%patch674 -p1 +%patch675 -p1 +%patch676 -p1 +%patch677 -p1 +%patch678 -p1 +%patch679 -p1 +%patch680 -p1 +%patch681 -p1 +%patch682 -p1 +%patch683 -p1 +%patch684 -p1 +%patch685 -p1 +%patch686 -p1 +%patch687 -p1 +%patch688 -p1 +%patch689 -p1 +%patch690 -p1 +%patch691 -p1 +%patch692 -p1 +%patch693 -p1 +%patch694 -p1 +%patch695 -p1 +%patch696 -p1 +%patch697 -p1 +%patch698 -p1 +%patch699 -p1 +%patch700 -p1 +%patch701 -p1 +%patch702 -p1 +%patch703 -p1 +%patch704 -p1 +%patch705 -p1 +%patch706 -p1 +%patch707 -p1 +%patch708 -p1 +%patch709 -p1 +%patch710 -p1 +%patch711 -p1 +%patch712 -p1 +%patch713 -p1 +%patch714 -p1 +%patch715 -p1 +%patch716 -p1 +%patch717 -p1 +%patch718 -p1 +%patch719 -p1 +%patch720 -p1 +%patch721 -p1 +%patch722 -p1 +%patch723 -p1 +%patch724 -p1 +%patch725 -p1 +%patch726 -p1 +%patch727 -p1 +%patch728 -p1 +%patch729 -p1 +%patch730 -p1 +%patch731 -p1 +%patch732 -p1 +%patch733 -p1 +%patch734 -p1 +%patch735 -p1 +%patch736 -p1 +%patch737 -p1 +%patch738 -p1 +%patch739 -p1 +%patch740 -p1 +%patch741 -p1 +%patch742 -p1 +%patch743 -p1 +%patch744 -p1 +%patch745 -p1 +%patch746 -p1 +%patch747 -p1 +%patch748 -p1 +%patch749 -p1 +%patch750 -p1 +%patch751 -p1 +%patch752 -p1 +%patch753 -p1 +%patch754 -p1 +%patch755 -p1 +%patch756 -p1 +%patch757 -p1 +%patch758 -p1 +%patch759 -p1 +%patch760 -p1 +%patch761 -p1 +%patch762 -p1 +%patch763 -p1 +%patch764 -p1 +%patch765 -p1 +%patch766 -p1 +%patch767 -p1 +%patch768 -p1 +%patch769 -p1 +%patch770 -p1 +%patch771 -p1 +%patch772 -p1 +%patch773 -p1 +%patch774 -p1 +%patch775 -p1 +%patch776 -p1 +%patch777 -p1 +%patch778 -p1 +%patch779 -p1 +%patch780 -p1 +%patch781 -p1 +%patch782 -p1 +%patch783 -p1 +%patch784 -p1 +%patch785 -p1 +%patch786 -p1 +%patch787 -p1 +%patch788 -p1 +%patch789 -p1 +%patch790 -p1 +%patch791 -p1 +%patch792 -p1 +%patch793 -p1 +%patch794 -p1 +%patch795 -p1 +%patch796 -p1 +%patch797 -p1 +%patch798 -p1 +%patch799 -p1 +%patch800 -p1 +%patch801 -p1 +%patch802 -p1 +%patch803 -p1 +%patch804 -p1 +%patch805 -p1 +%patch806 -p1 +%patch807 -p1 +%patch808 -p1 +%patch809 -p1 +%patch810 -p1 +%patch811 -p1 +%patch812 -p1 +%patch813 -p1 +%patch814 -p1 +%patch815 -p1 +%patch816 -p1 +%patch817 -p1 +%patch818 -p1 +%patch819 -p1 +%patch820 -p1 +%patch821 -p1 +%patch822 -p1 +%patch823 -p1 +%patch824 -p1 +%patch825 -p1 +%patch826 -p1 +%patch827 -p1 +%patch828 -p1 +%patch829 -p1 +%patch830 -p1 +%patch831 -p1 +%patch832 -p1 +%patch833 -p1 +%patch834 -p1 +%patch835 -p1 +%patch836 -p1 +%patch837 -p1 +%patch838 -p1 +%patch839 -p1 +%patch840 -p1 +%patch841 -p1 +%patch842 -p1 +%patch843 -p1 +%patch844 -p1 +%patch845 -p1 +%patch846 -p1 +%patch847 -p1 +%patch848 -p1 +%patch849 -p1 +%patch850 -p1 +%patch851 -p1 +%patch852 -p1 +%patch853 -p1 +%patch854 -p1 +%patch855 -p1 +%patch856 -p1 +%patch857 -p1 +%patch858 -p1 +%patch859 -p1 +%patch860 -p1 +%patch861 -p1 +%patch862 -p1 +%patch863 -p1 +%patch864 -p1 +%patch865 -p1 +%patch866 -p1 +%patch867 -p1 +%patch868 -p1 +%patch869 -p1 +%patch870 -p1 +%patch871 -p1 +%patch872 -p1 +%patch873 -p1 +%patch874 -p1 +%patch875 -p1 +%patch876 -p1 +%patch877 -p1 +%patch878 -p1 +%patch879 -p1 +%patch880 -p1 +%patch881 -p1 +%patch882 -p1 +%patch883 -p1 +%patch884 -p1 +%patch885 -p1 +%patch886 -p1 +%patch887 -p1 +%patch888 -p1 +%patch889 -p1 +%patch890 -p1 +%patch891 -p1 +%patch892 -p1 +%patch893 -p1 +%patch894 -p1 +%patch895 -p1 +%patch896 -p1 +%patch897 -p1 +%patch898 -p1 +%patch899 -p1 +%patch900 -p1 +%patch901 -p1 +%patch902 -p1 +%patch903 -p1 +%patch904 -p1 +%patch905 -p1 +%patch906 -p1 +%patch907 -p1 +%patch908 -p1 +%patch909 -p1 +%patch910 -p1 +%patch911 -p1 +%patch912 -p1 +%patch913 -p1 +%patch914 -p1 +%patch915 -p1 +%patch916 -p1 +%patch917 -p1 +%patch918 -p1 +%patch919 -p1 +%patch920 -p1 +%patch921 -p1 +%patch922 -p1 +%patch923 -p1 +%patch924 -p1 +%patch925 -p1 +%patch926 -p1 +%patch927 -p1 +%patch928 -p1 +%patch929 -p1 +%patch930 -p1 +%patch931 -p1 +%patch932 -p1 +%patch933 -p1 +%patch934 -p1 +%patch935 -p1 +%patch936 -p1 +%patch937 -p1 +%patch938 -p1 +%patch939 -p1 +%patch940 -p1 +%patch941 -p1 +%patch942 -p1 +%patch943 -p1 +%patch944 -p1 +%patch945 -p1 +%patch946 -p1 +%patch947 -p1 +%patch948 -p1 +%patch949 -p1 +%patch950 -p1 +%patch951 -p1 +%patch952 -p1 +%patch953 -p1 +%patch954 -p1 +%patch955 -p1 +%patch956 -p1 +%patch957 -p1 +%patch958 -p1 +%patch959 -p1 +%patch960 -p1 +%patch961 -p1 +%patch962 -p1 +%patch963 -p1 +%patch964 -p1 +%patch965 -p1 +%patch966 -p1 +%patch967 -p1 +%patch968 -p1 +%patch969 -p1 +%patch970 -p1 +%patch971 -p1 +%patch972 -p1 +%patch973 -p1 +%patch974 -p1 +%patch975 -p1 +%patch976 -p1 +%patch977 -p1 +%patch978 -p1 +%patch979 -p1 +%patch980 -p1 +%patch981 -p1 +%patch982 -p1 +%patch983 -p1 +%patch984 -p1 +%patch985 -p1 +%patch986 -p1 +%patch987 -p1 +%patch988 -p1 +%patch989 -p1 +%patch990 -p1 +%patch991 -p1 +%patch992 -p1 +%patch993 -p1 +%patch994 -p1 +%patch995 -p1 +%patch996 -p1 +%patch997 -p1 +%patch998 -p1 +%patch999 -p1 +%patch1000 -p1 +%patch1001 -p1 +%patch1002 -p1 +%patch1003 -p1 +%patch1004 -p1 +%patch1005 -p1 +%patch1006 -p1 +%patch1007 -p1 +%patch1008 -p1 +%patch1009 -p1 +%patch1010 -p1 +%patch1011 -p1 +%patch1012 -p1 +%patch1013 -p1 +%patch1014 -p1 +%patch1015 -p1 +%patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 +%patch1019 -p1 +%patch1020 -p1 +%patch1021 -p1 +%patch1022 -p1 +%patch1023 -p1 +%patch1024 -p1 +%patch1025 -p1 +%patch1026 -p1 +%patch1027 -p1 +%patch1028 -p1 +%patch1029 -p1 +%patch1030 -p1 +%patch1031 -p1 +%patch1032 -p1 +%patch1033 -p1 +%patch1034 -p1 +%patch1035 -p1 +%patch1036 -p1 +%patch1037 -p1 +%patch1038 -p1 +%patch1039 -p1 +%patch1040 -p1 +%patch1041 -p1 +%patch1042 -p1 +%patch1043 -p1 +%patch1044 -p1 +%patch1045 -p1 +%patch1046 -p1 +%patch1047 -p1 +%patch1048 -p1 +%patch1049 -p1 +%patch1050 -p1 +%patch1051 -p1 +%patch1052 -p1 +%patch1053 -p1 +%patch1054 -p1 +%patch1055 -p1 +%patch1056 -p1 +%patch1057 -p1 +%patch1058 -p1 +%patch1059 -p1 +%patch1060 -p1 +%patch1061 -p1 +%patch1062 -p1 +%patch1063 -p1 +%patch1064 -p1 +%patch1065 -p1 +%patch1066 -p1 +%patch1067 -p1 +%patch1068 -p1 +%patch1069 -p1 +%patch1070 -p1 +%patch1071 -p1 +%patch1072 -p1 +%patch1073 -p1 +%patch1074 -p1 +%patch1075 -p1 +%patch1076 -p1 +%patch1077 -p1 +%patch1078 -p1 +%patch1079 -p1 +%patch1080 -p1 +%patch1081 -p1 +%patch1082 -p1 +%patch1083 -p1 +%patch1084 -p1 +%patch1085 -p1 +%patch1086 -p1 +%patch1087 -p1 +%patch1088 -p1 +%patch1089 -p1 +%patch1090 -p1 +%patch1091 -p1 +%patch1092 -p1 +%patch1093 -p1 +%patch1094 -p1 +%patch1095 -p1 +%patch1096 -p1 +%patch1097 -p1 +%patch1098 -p1 +%patch1099 -p1 +%patch1100 -p1 +%patch1101 -p1 +%patch1102 -p1 +%patch1103 -p1 +%patch1104 -p1 +%patch1105 -p1 +%patch1106 -p1 +%patch1107 -p1 +%patch1108 -p1 +%patch1109 -p1 +%patch1110 -p1 +%patch1111 -p1 +%patch1112 -p1 +%patch1113 -p1 +%patch1114 -p1 +%patch1115 -p1 +%patch1116 -p1 +%patch1117 -p1 +%patch1118 -p1 +%patch1119 -p1 +%patch1120 -p1 +%patch1121 -p1 +%patch1122 -p1 +%patch1123 -p1 +%patch1124 -p1 +%patch1125 -p1 +%patch1126 -p1 +%patch1127 -p1 +%patch1128 -p1 +%patch1129 -p1 +%patch1130 -p1 +%patch1131 -p1 +%patch1132 -p1 +%patch1133 -p1 +%patch1134 -p1 +%patch1135 -p1 +%patch1136 -p1 +%patch1137 -p1 +%patch1138 -p1 +%patch1139 -p1 +%patch1140 -p1 +%patch1141 -p1 +%patch1142 -p1 +%patch1143 -p1 +%patch1144 -p1 +%patch1145 -p1 +%patch1146 -p1 +%patch1147 -p1 +%patch1148 -p1 +%patch1149 -p1 +%patch1150 -p1 +%patch1151 -p1 +%patch1152 -p1 +%patch1153 -p1 +%patch1154 -p1 +%patch1155 -p1 +%patch1156 -p1 +%patch1157 -p1 +%patch1158 -p1 +%patch1159 -p1 +%patch1160 -p1 +%patch1161 -p1 +%patch1162 -p1 +%patch1163 -p1 +%patch1164 -p1 +%patch1165 -p1 +%patch1166 -p1 +%patch1167 -p1 +%patch1168 -p1 +%patch1169 -p1 +%patch1170 -p1 +%patch1171 -p1 +%patch1172 -p1 +%patch1173 -p1 +%patch1174 -p1 +%patch1175 -p1 +%patch1176 -p1 +%patch1177 -p1 +%patch1178 -p1 +%patch1179 -p1 +%patch1180 -p1 +%patch1181 -p1 +%patch1182 -p1 +%patch1183 -p1 +%patch1184 -p1 +%patch1185 -p1 +%patch1186 -p1 +%patch1187 -p1 +%patch1189 -p1 +%patch1190 -p1 +%patch1191 -p1 +%patch1192 -p1 +%patch1193 -p1 +%patch1194 -p1 +%patch1195 -p1 +%patch1196 -p1 +%patch1197 -p1 +%patch1198 -p1 +%patch1201 -p1 +%patch1202 -p1 +%patch1203 -p1 +%patch1204 -p1 +%patch1205 -p1 +%patch1206 -p1 +%patch1207 -p1 +%patch1208 -p1 +%patch1209 -p1 +%patch1210 -p1 +%patch1211 -p1 +%patch1212 -p1 +%patch1213 -p1 +%patch1214 -p1 +%patch1215 -p1 +%patch1216 -p1 +%patch1217 -p1 +%patch1218 -p1 +%patch1219 -p1 +%patch1220 -p1 +%patch1221 -p1 +%patch1222 -p1 +%patch1223 -p1 +%patch1224 -p1 +%patch1225 -p1 +%patch1226 -p1 +%patch1227 -p1 +%patch1228 -p1 +%patch1229 -p1 +%patch1230 -p1 +%patch1231 -p1 +%patch1232 -p1 +%patch1233 -p1 +%patch1234 -p1 +%patch1235 -p1 +%patch1236 -p1 +%patch1237 -p1 +%patch1238 -p1 +%patch1239 -p1 +%patch1240 -p1 +%patch1241 -p1 +%patch1242 -p1 +%patch1243 -p1 +%patch1244 -p1 +%patch1245 -p1 +%patch1246 -p1 +%patch1247 -p1 +%patch1248 -p1 +%patch1249 -p1 +%patch1250 -p1 +%patch1251 -p1 +%patch1252 -p1 +%patch1253 -p1 +%patch1254 -p1 +%patch1255 -p1 +%patch1256 -p1 +%patch1257 -p1 +%patch1258 -p1 +%patch1259 -p1 +%patch1260 -p1 +%patch1261 -p1 +%patch1262 -p1 +%patch1263 -p1 +%patch1264 -p1 +%patch1265 -p1 +%patch1266 -p1 +%patch1267 -p1 +%patch1268 -p1 +%patch1269 -p1 +%patch1270 -p1 +%patch1271 -p1 +%patch1272 -p1 +%patch1273 -p1 +%patch1274 -p1 +%patch1275 -p1 +%patch1276 -p1 +%patch1277 -p1 +%patch1278 -p1 +%patch1279 -p1 +%patch1280 -p1 +%patch1281 -p1 +%patch1282 -p1 +%patch1283 -p1 +%patch1284 -p1 +%patch1285 -p1 +%patch1286 -p1 +%patch1287 -p1 +%patch1288 -p1 +%patch1289 -p1 +%patch1290 -p1 +%patch1291 -p1 +%patch1292 -p1 +%patch1293 -p1 +%patch1294 -p1 +%patch1295 -p1 +%patch1296 -p1 +%patch1297 -p1 +%patch1298 -p1 +%patch1299 -p1 +%patch1300 -p1 +%patch1301 -p1 +%patch1302 -p1 +%patch1303 -p1 +%patch1304 -p1 +%patch1305 -p1 +%patch1306 -p1 +%patch1307 -p1 +%patch1308 -p1 +%patch1309 -p1 +%patch1310 -p1 +%patch1311 -p1 +%patch1312 -p1 +%patch1313 -p1 +%patch1314 -p1 +%patch1315 -p1 +%patch1316 -p1 +%patch1317 -p1 +%patch1318 -p1 +%patch1319 -p1 +%patch1320 -p1 +%patch1321 -p1 +%patch1322 -p1 +%patch1323 -p1 +%patch1324 -p1 +%patch1325 -p1 +%patch1326 -p1 +%patch1327 -p1 +%patch1328 -p1 +%patch1329 -p1 +%patch1330 -p1 +%patch1331 -p1 +%patch1332 -p1 +%patch1333 -p1 +%patch1334 -p1 +%patch1335 -p1 +%patch1336 -p1 +%patch1337 -p1 +%patch1338 -p1 +%patch1339 -p1 +%patch1340 -p1 +%patch1341 -p1 +%patch1342 -p1 +%patch1343 -p1 +%patch1344 -p1 +%patch1345 -p1 +%patch1346 -p1 +%patch1347 -p1 +%patch1348 -p1 +%patch1349 -p1 +%patch1350 -p1 +%patch1351 -p1 +%patch1352 -p1 +%patch1353 -p1 +%patch1354 -p1 +%patch1355 -p1 +%patch1356 -p1 +%patch1357 -p1 +%patch1358 -p1 +%patch1359 -p1 +%patch1360 -p1 +%patch1361 -p1 +%patch1362 -p1 +%patch1363 -p1 +%patch1364 -p1 +%patch1365 -p1 +%patch1366 -p1 +%patch1367 -p1 +%patch1368 -p1 +%patch1369 -p1 +%patch1370 -p1 +%patch1371 -p1 +%patch1372 -p1 +%patch1373 -p1 +%patch1374 -p1 +%patch1375 -p1 +%patch1376 -p1 +%patch1377 -p1 +%patch1378 -p1 +%patch1379 -p1 +%patch1380 -p1 +%patch1381 -p1 +%patch1382 -p1 +%patch1383 -p1 +%patch1384 -p1 +%patch1385 -p1 +%patch1386 -p1 +%patch1387 -p1 +%patch1388 -p1 +%patch1389 -p1 +%patch1390 -p1 +%patch1391 -p1 +%patch1392 -p1 +%patch1393 -p1 +%patch1394 -p1 +%patch1395 -p1 +%patch1396 -p1 +%patch1397 -p1 +%patch1398 -p1 +%patch1399 -p1 +%patch1400 -p1 +%patch1401 -p1 +%patch1402 -p1 +%patch1403 -p1 +%patch1404 -p1 +%patch1405 -p1 +%patch1406 -p1 +%patch1407 -p1 +%patch1408 -p1 +%patch1409 -p1 +%patch1410 -p1 +%patch1411 -p1 +%patch1412 -p1 +%patch1413 -p1 +%patch1414 -p1 +%patch1415 -p1 +%patch1416 -p1 +%patch1417 -p1 +%patch1418 -p1 +%patch1419 -p1 +%patch1420 -p1 +%patch1421 -p1 +%patch1422 -p1 +%patch1423 -p1 +%patch1424 -p1 +%patch1425 -p1 +%patch1426 -p1 +%patch1427 -p1 +%patch1428 -p1 +%patch1429 -p1 +%patch1430 -p1 +%patch1431 -p1 +%patch1432 -p1 +%patch1433 -p1 +%patch1434 -p1 +%patch1435 -p1 +%patch1436 -p1 +%patch1437 -p1 +%patch1438 -p1 +%patch1439 -p1 +%patch1440 -p1 +%patch1441 -p1 +%patch1442 -p1 +%patch1443 -p1 +%patch1444 -p1 +%patch1445 -p1 +%patch1446 -p1 +%patch1447 -p1 +%patch1448 -p1 +%patch1449 -p1 +%patch1450 -p1 +%patch1451 -p1 +%patch1452 -p1 +%patch1453 -p1 +%patch1454 -p1 +%patch1455 -p1 +%patch1456 -p1 +%patch1457 -p1 +%patch1458 -p1 +%patch1459 -p1 +%patch1460 -p1 +%patch1461 -p1 +%patch1462 -p1 +%patch1463 -p1 +%patch1464 -p1 +%patch1465 -p1 +%patch1466 -p1 +%patch1467 -p1 +%patch1468 -p1 +%patch1469 -p1 +%patch1470 -p1 +%patch1471 -p1 +%patch1472 -p1 +%patch1473 -p1 +%patch1474 -p1 +%patch1475 -p1 +%patch1476 -p1 +%patch1477 -p1 +%patch1478 -p1 +%patch1479 -p1 +%patch1480 -p1 +%patch1481 -p1 +%patch1482 -p1 +%patch1483 -p1 +%patch1484 -p1 +%patch1485 -p1 +%patch1486 -p1 +%patch1487 -p1 +%patch1488 -p1 +%patch1489 -p1 +%patch1490 -p1 +%patch1491 -p1 +%patch1492 -p1 +%patch1493 -p1 +%patch1494 -p1 +%patch1495 -p1 +%patch1496 -p1 +%patch1497 -p1 +%patch1498 -p1 +%patch1499 -p1 +%patch1500 -p1 +%patch1501 -p1 +%patch1502 -p1 +%patch1503 -p1 +%patch1504 -p1 +%patch1505 -p1 +%patch1506 -p1 +%patch1507 -p1 +%patch1508 -p1 +%patch1509 -p1 +%patch1510 -p1 +%patch1511 -p1 +%patch1512 -p1 +%patch1513 -p1 +%patch1514 -p1 +%patch1515 -p1 +%patch1516 -p1 +%patch1517 -p1 +%patch1518 -p1 +%patch1519 -p1 +%patch1520 -p1 +%patch1521 -p1 +%patch1522 -p1 +%patch1523 -p1 +%patch1524 -p1 +%patch1525 -p1 +%patch1526 -p1 +%patch1527 -p1 +%patch1528 -p1 +%patch1529 -p1 +%patch1530 -p1 +%patch1531 -p1 +%patch1532 -p1 +%patch1533 -p1 +%patch1534 -p1 +%patch1535 -p1 +%patch1536 -p1 +%patch1537 -p1 +%patch1538 -p1 +%patch1539 -p1 +%patch1540 -p1 +%patch1541 -p1 +%patch1542 -p1 +%patch1543 -p1 +%patch1544 -p1 +%patch1545 -p1 +%patch1546 -p1 +%patch1547 -p1 +%patch1548 -p1 +%patch1549 -p1 +%patch1550 -p1 +%patch1551 -p1 +%patch1552 -p1 +%patch1553 -p1 +%patch1554 -p1 +%patch1555 -p1 +%patch1556 -p1 +%patch1557 -p1 +%patch1558 -p1 +%patch1559 -p1 +%patch1560 -p1 +%patch1561 -p1 +%patch1562 -p1 +%patch1563 -p1 +%patch1564 -p1 +%patch1565 -p1 +%patch1566 -p1 +%patch1567 -p1 +%patch1568 -p1 +%patch1569 -p1 +%patch1570 -p1 +%patch1571 -p1 +%patch1572 -p1 +%patch1573 -p1 +%patch1574 -p1 +%patch1575 -p1 +%patch1576 -p1 +%patch1577 -p1 +%patch1578 -p1 +%patch1579 -p1 +%patch1580 -p1 +%patch1581 -p1 +%patch1582 -p1 +%patch1583 -p1 +%patch1584 -p1 +%patch1585 -p1 +%patch1586 -p1 +%patch1587 -p1 +%patch1588 -p1 +%patch1589 -p1 +%patch1590 -p1 +%patch1591 -p1 +%patch1592 -p1 +%patch1593 -p1 +%patch1594 -p1 +%patch1595 -p1 +%patch1596 -p1 +%patch1597 -p1 +%patch1598 -p1 +%patch1599 -p1 +%patch1600 -p1 +%patch1601 -p1 +%patch1602 -p1 +%patch1603 -p1 +%patch1604 -p1 +%patch1605 -p1 +%patch1606 -p1 +%patch1607 -p1 +%patch1608 -p1 +%patch1609 -p1 +%patch1610 -p1 +%patch1611 -p1 +%patch1612 -p1 +%patch1613 -p1 +%patch1614 -p1 +%patch1615 -p1 +%patch1616 -p1 +%patch1617 -p1 +%patch1618 -p1 +%patch1619 -p1 +%patch1620 -p1 +%patch1621 -p1 +%patch1622 -p1 +%patch1623 -p1 +%patch1624 -p1 +%patch1625 -p1 +%patch1626 -p1 +%patch1627 -p1 +%patch1628 -p1 +%patch1629 -p1 +%patch1630 -p1 +%patch1631 -p1 +%patch1632 -p1 +%patch1633 -p1 +%patch1634 -p1 +%patch1635 -p1 +%patch1636 -p1 +%patch1637 -p1 +%patch1638 -p1 +%patch1639 -p1 +%patch1640 -p1 +%patch1641 -p1 +%patch1642 -p1 +%patch1643 -p1 +%patch1644 -p1 +%patch1645 -p1 +%patch1646 -p1 +%patch1647 -p1 +%patch1648 -p1 +%patch1649 -p1 +%patch1650 -p1 +%patch1651 -p1 +%patch1652 -p1 +%patch1653 -p1 +%patch1654 -p1 +%patch1655 -p1 +%patch1656 -p1 +%patch1657 -p1 +%patch1658 -p1 +%patch1659 -p1 +%patch1660 -p1 +%patch1661 -p1 +%patch1662 -p1 +%patch1663 -p1 +%patch1664 -p1 +%patch1665 -p1 +%patch1666 -p1 +%patch1667 -p1 +%patch1668 -p1 +%patch1669 -p1 +%patch1670 -p1 +%patch1671 -p1 +%patch1672 -p1 +%patch1673 -p1 +%patch1674 -p1 +%patch1675 -p1 +%patch1676 -p1 +%patch1677 -p1 +%patch1678 -p1 +%patch1679 -p1 +%patch1680 -p1 +%patch1681 -p1 +%patch1682 -p1 +%patch1683 -p1 +%patch1684 -p1 +%patch1685 -p1 +%patch1686 -p1 +%patch1687 -p1 +%patch1688 -p1 +%patch1689 -p1 +%patch1690 -p1 +%patch1691 -p1 +%patch1692 -p1 +%patch1693 -p1 +%patch1694 -p1 +%patch1695 -p1 +%patch1696 -p1 +%patch1697 -p1 +%patch1698 -p1 +%patch1699 -p1 +%patch1700 -p1 +%patch1701 -p1 +%patch1702 -p1 +%patch1703 -p1 +%patch1704 -p1 +%patch1705 -p1 +%patch1706 -p1 +%patch1707 -p1 +%patch1708 -p1 +%patch1709 -p1 +%patch1710 -p1 +%patch1711 -p1 +%patch1712 -p1 +%patch1713 -p1 +%patch1714 -p1 +%patch1715 -p1 +%patch1716 -p1 +%patch1717 -p1 +%patch1718 -p1 +%patch1719 -p1 +%patch1720 -p1 +%patch1721 -p1 +%patch1722 -p1 +%patch1723 -p1 +%patch1724 -p1 +%patch1725 -p1 +%patch1726 -p1 +%patch1727 -p1 +%patch1728 -p1 +%patch1729 -p1 +%patch1730 -p1 +%patch1731 -p1 +%patch1732 -p1 +%patch1733 -p1 +%patch1734 -p1 +%patch1735 -p1 +%patch1736 -p1 +%patch1737 -p1 +%patch1738 -p1 +%patch1739 -p1 +%patch1740 -p1 +%patch1741 -p1 +%patch1742 -p1 +%patch1743 -p1 +%patch1744 -p1 +%patch1745 -p1 +%patch1746 -p1 +%patch1747 -p1 +%patch1748 -p1 +%patch1749 -p1 +%patch1750 -p1 +%patch1751 -p1 +%patch1752 -p1 +%patch1753 -p1 +%patch1754 -p1 +%patch1755 -p1 +%patch1756 -p1 +%patch1757 -p1 +%patch1758 -p1 +%patch1759 -p1 +%patch1760 -p1 +%patch1761 -p1 +%patch1762 -p1 +%patch1763 -p1 +%patch1764 -p1 +%patch1765 -p1 +%patch1766 -p1 +%patch1767 -p1 +%patch1768 -p1 +%patch1769 -p1 +%patch1770 -p1 +%patch1771 -p1 +%patch1772 -p1 +%patch1773 -p1 +%patch1774 -p1 +%patch1775 -p1 +%patch1776 -p1 +%patch1777 -p1 +%patch1778 -p1 +%patch1779 -p1 +%patch1780 -p1 +%patch1781 -p1 +%patch1782 -p1 +%patch1783 -p1 +%patch1784 -p1 +%patch1785 -p1 +%patch1786 -p1 +%patch1787 -p1 +%patch1788 -p1 +%patch1789 -p1 +%patch1790 -p1 +%patch1791 -p1 +%patch1792 -p1 +%patch1793 -p1 +%patch1794 -p1 +%patch1795 -p1 +%patch1796 -p1 +%patch1797 -p1 +%patch1798 -p1 +%patch1799 -p1 +%patch1800 -p1 +%patch1801 -p1 +%patch1802 -p1 +%patch1803 -p1 +%patch1804 -p1 +%patch1805 -p1 +%patch1806 -p1 +%patch1807 -p1 +%patch1808 -p1 +%patch1809 -p1 +%patch1810 -p1 +%patch1811 -p1 +%patch1812 -p1 +%patch1813 -p1 +%patch1814 -p1 +%patch1815 -p1 +%patch1816 -p1 +%patch1817 -p1 +%patch1818 -p1 +%patch1819 -p1 +%patch1820 -p1 +%patch1821 -p1 +%patch1822 -p1 +%patch1823 -p1 +%patch1824 -p1 +%patch1825 -p1 +%patch1826 -p1 +%patch1827 -p1 +%patch1828 -p1 +%patch1829 -p1 +%patch1830 -p1 +%patch1831 -p1 +%patch1832 -p1 +%patch1833 -p1 +%patch1834 -p1 +%patch1835 -p1 +%patch1836 -p1 +%patch1837 -p1 +%patch1838 -p1 +%patch1839 -p1 +%patch1840 -p1 +%patch1841 -p1 +%patch1842 -p1 +%patch1843 -p1 +%patch1844 -p1 +%patch1845 -p1 +%patch1846 -p1 +%patch1847 -p1 +%patch1848 -p1 +%patch1849 -p1 +%patch1850 -p1 +%patch1851 -p1 +%patch1852 -p1 +%patch1853 -p1 +%patch1854 -p1 +%patch1855 -p1 +%patch1856 -p1 +%patch1857 -p1 +%patch1858 -p1 +%patch1859 -p1 +%patch1860 -p1 +%patch1861 -p1 +%patch1862 -p1 +%patch1863 -p1 +%patch1864 -p1 +%patch1865 -p1 +%patch1866 -p1 +%patch1867 -p1 +%patch1868 -p1 +%patch1869 -p1 +%patch1870 -p1 +%patch1871 -p1 +%patch1872 -p1 +%patch1873 -p1 +%patch1874 -p1 +%patch1875 -p1 +%patch1876 -p1 +%patch1877 -p1 +%patch1878 -p1 +%patch1879 -p1 +%patch1880 -p1 +%patch1881 -p1 +%patch1882 -p1 +%patch1883 -p1 +%patch1884 -p1 +%patch1885 -p1 +%patch1886 -p1 +%patch1887 -p1 +%patch1888 -p1 +%patch1889 -p1 +%patch1890 -p1 +%patch1891 -p1 +%patch1892 -p1 +%patch1893 -p1 +%patch1894 -p1 +%patch1895 -p1 +%patch1896 -p1 +%patch1897 -p1 +%patch1898 -p1 +%patch1899 -p1 +%patch1900 -p1 +%patch1901 -p1 +%patch1902 -p1 +%patch1903 -p1 +%patch1904 -p1 +%patch1905 -p1 +%patch1906 -p1 +%patch1907 -p1 +%patch1908 -p1 +%patch1909 -p1 +%patch1910 -p1 +%patch1911 -p1 +%patch1912 -p1 +%patch1913 -p1 +%patch1914 -p1 +%patch1915 -p1 +%patch1916 -p1 +%patch1917 -p1 +%patch1918 -p1 +%patch1919 -p1 +%patch1920 -p1 +%patch1921 -p1 +%patch1922 -p1 +%patch1923 -p1 +%patch1924 -p1 +%patch1925 -p1 +%patch1926 -p1 +%patch1927 -p1 +%patch1928 -p1 +%patch1929 -p1 +%patch1930 -p1 +%patch1931 -p1 +%patch1932 -p1 +%patch1933 -p1 +%patch1934 -p1 +%patch1935 -p1 +%patch1936 -p1 +%patch1937 -p1 +%patch1938 -p1 +%patch1939 -p1 +%patch1940 -p1 +%patch1941 -p1 +%patch1942 -p1 +%patch1943 -p1 +%patch1944 -p1 +%patch1945 -p1 +%patch1946 -p1 +%patch1947 -p1 +%patch1948 -p1 +%patch1949 -p1 +%patch1950 -p1 +%patch1951 -p1 +%patch1952 -p1 +%patch1953 -p1 +%patch1954 -p1 +%patch1955 -p1 +%patch1956 -p1 +%patch1957 -p1 +%patch1958 -p1 +%patch1959 -p1 +%patch1960 -p1 +%patch1961 -p1 +%patch1962 -p1 +%patch1963 -p1 +%patch1964 -p1 +%patch1965 -p1 +%patch1966 -p1 +%patch1967 -p1 +%patch1968 -p1 +%patch1969 -p1 +%patch1970 -p1 +%patch1971 -p1 +%patch1972 -p1 +%patch1973 -p1 +%patch1974 -p1 +%patch1975 -p1 +%patch1976 -p1 + +%build +buildarch="%{kvm_target}-softmmu" + +# --build-id option is used for giving info to the debug packages. +extraldflags="-Wl,--build-id"; +buildldflags="VL_LDFLAGS=-Wl,--build-id" + +# QEMU already knows how to set _FORTIFY_SOURCE +%global qemuoptflags %(echo %{optflags} | sed 's/-Wp,-D_FORTIFY_SOURCE=2//') + +%ifarch s390 + # drop -g flag to prevent memory exhaustion by linker + %global qemuoptflags %(echo %{qemuoptflags} | sed 's/-g//') + sed -i.debug 's/"-g $CFLAGS"/"$CFLAGS"/g' configure +%endif + +dobuild() { +%if 0%{!?build_only_sub:1} + ./configure \ + --prefix=%{_prefix} \ + --libdir=%{_libdir} \ + --sysconfdir=%{_sysconfdir} \ + --interp-prefix=%{_prefix}/qemu-%%M \ + --audio-drv-list=pa,alsa \ + --with-confsuffix=/%{pkgname} \ + --localstatedir=%{_localstatedir} \ + --libexecdir=%{_libexecdir} \ + --with-pkgversion=%{pkgname}-%{version}-%{release} \ + --disable-strip \ + --disable-qom-cast-debug \ + --extra-ldflags="$extraldflags -pie -Wl,-z,relro -Wl,-z,now" \ + --extra-cflags="%{qemuoptflags} -fPIE -DPIE" \ + --enable-trace-backend=dtrace \ + --enable-werror \ + --disable-xen \ + --disable-virtfs \ + --enable-kvm \ + --enable-libusb \ + --enable-spice \ + --enable-seccomp \ + --disable-fdt \ + --enable-docs \ + --disable-sdl \ + --disable-debug-tcg \ + --disable-sparse \ + --disable-brlapi \ + --disable-bluez \ + --disable-vde \ + --disable-curses \ + --enable-curl \ + --enable-libssh2 \ + --enable-vnc-tls \ + --enable-vnc-sasl \ + --enable-linux-aio \ + --enable-smartcard-nss \ + --enable-lzo \ + --enable-snappy \ + --enable-usb-redir \ + --enable-vnc-png \ + --disable-vnc-jpeg \ + --enable-vnc-ws \ + --enable-uuid \ + --disable-vhost-scsi \ +%if %{with guest_agent} + --enable-guest-agent \ +%else + --disable-guest-agent \ +%endif +%if %{rhev} + --enable-live-block-ops \ +%else + --disable-live-block-ops \ +%endif + --disable-live-block-migration \ +%ifarch x86_64 + --enable-rbd \ +%endif + --enable-glusterfs \ +%if 0%{?have_tcmalloc:1} + --enable-tcmalloc \ +%endif + --block-drv-rw-whitelist=qcow2,raw,file,host_device,blkdebug,nbd,iscsi,gluster,rbd \ + --block-drv-ro-whitelist=vmdk,vhdx,vpc,ssh,https \ + --iasl=/bin/false \ + "$@" + + echo "config-host.mak contents:" + echo "===" + cat config-host.mak + echo "===" + + make V=1 %{?_smp_mflags} $buildldflags +%else + ./configure --prefix=%{_prefix} \ + --libdir=%{_libdir} \ + --with-pkgversion=%{pkgname}-%{version}-%{release} \ + --disable-guest-agent \ + "$@" + + make qemu-img %{?_smp_mflags} $buildldflags + make qemu-io %{?_smp_mflags} $buildldflags + make qemu-nbd %{?_smp_mflags} $buildldflags + make qemu-img.1 %{?_smp_mflags} $buildldflags + make qemu-nbd.8 %{?_smp_mflags} $buildldflags + %if %{with guest_agent} + make qemu-ga %{?_smp_mflags} $buildldflags + %endif +%endif +} + +dobuild --target-list="$buildarch" + +%if 0%{!?build_only_sub:1} + # Setup back compat qemu-kvm binary + ./scripts/tracetool.py --backend dtrace --format stap \ + --binary %{_libexecdir}/qemu-kvm --target-arch %{kvm_target} \ + --target-type system --probe-prefix \ + qemu.kvm < ./trace-events > qemu-kvm.stp + + ./scripts/tracetool.py --backend dtrace --format simpletrace-stap \ + --binary %{_libexecdir}/qemu-kvm --target-arch %{kvm_target} \ + --target-type system --probe-prefix \ + qemu.kvm < ./trace-events > qemu-kvm-simpletrace.stp + + cp -a %{kvm_target}-softmmu/qemu-system-%{kvm_target} qemu-kvm + + + gcc %{SOURCE6} $RPM_OPT_FLAGS $RPM_LD_FLAGS -o ksmctl +%endif + +%install +%define _udevdir %(pkg-config --variable=udevdir udev)/rules.d + +%if 0%{!?build_only_sub:1} + install -D -p -m 0644 %{SOURCE4} $RPM_BUILD_ROOT%{_unitdir}/ksm.service + install -D -p -m 0644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ksm + install -D -p -m 0755 ksmctl $RPM_BUILD_ROOT%{_libexecdir}/ksmctl + + install -D -p -m 0644 %{SOURCE7} $RPM_BUILD_ROOT%{_unitdir}/ksmtuned.service + install -D -p -m 0755 %{SOURCE8} $RPM_BUILD_ROOT%{_sbindir}/ksmtuned + install -D -p -m 0644 %{SOURCE9} $RPM_BUILD_ROOT%{_sysconfdir}/ksmtuned.conf + + mkdir -p $RPM_BUILD_ROOT%{_bindir}/ + mkdir -p $RPM_BUILD_ROOT%{_udevdir} + mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{pkgname} + + install -m 0755 scripts/kvm/kvm_stat $RPM_BUILD_ROOT%{_bindir}/ + install -m 0644 %{SOURCE3} $RPM_BUILD_ROOT%{_udevdir} + install -m 0644 scripts/dump-guest-memory.py \ + $RPM_BUILD_ROOT%{_datadir}/%{pkgname} + + make DESTDIR=$RPM_BUILD_ROOT \ + sharedir="%{_datadir}/%{pkgname}" \ + datadir="%{_datadir}/%{pkgname}" \ + install + + mkdir -p $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset + + # Install compatibility roms + install %{SOURCE14} $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/ + install %{SOURCE15} $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/ + install %{SOURCE16} $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/ + install %{SOURCE17} $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/ + install %{SOURCE20} $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/ + + install -m 0755 qemu-kvm $RPM_BUILD_ROOT%{_libexecdir}/ + install -m 0644 qemu-kvm.stp $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/ + install -m 0644 qemu-kvm-simpletrace.stp $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/ + + rm $RPM_BUILD_ROOT%{_bindir}/qemu-system-%{kvm_target} + rm $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/qemu-system-%{kvm_target}.stp + rm $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/qemu-system-%{kvm_target}-simpletrace.stp + + # Install simpletrace + install -m 0755 scripts/simpletrace.py $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/simpletrace.py + mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/tracetool + install -m 0644 -t $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/tracetool scripts/tracetool/*.py + mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/tracetool/backend + install -m 0644 -t $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/tracetool/backend scripts/tracetool/backend/*.py + mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/tracetool/format + install -m 0644 -t $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/tracetool/format scripts/tracetool/format/*.py + + mkdir -p $RPM_BUILD_ROOT%{qemudocdir} + install -p -m 0644 -t ${RPM_BUILD_ROOT}%{qemudocdir} Changelog README README.systemtap COPYING COPYING.LIB LICENSE %{SOURCE19} QMP/qmp-spec.txt QMP/qmp-events.txt + mv ${RPM_BUILD_ROOT}%{_docdir}/qemu/qemu-doc.html $RPM_BUILD_ROOT%{qemudocdir} + mv ${RPM_BUILD_ROOT}%{_docdir}/qemu/qemu-tech.html $RPM_BUILD_ROOT%{qemudocdir} + mv ${RPM_BUILD_ROOT}%{_docdir}/qemu/qmp-commands.txt $RPM_BUILD_ROOT%{qemudocdir} + chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/* + chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man8/* + + install -D -p -m 0644 qemu.sasl $RPM_BUILD_ROOT%{_sysconfdir}/sasl2/qemu-kvm.conf + + # Provided by package openbios + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/openbios-ppc + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/openbios-sparc32 + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/openbios-sparc64 + # Provided by package SLOF + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/slof.bin + + # Remove unpackaged files. + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/palcode-clipper + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/petalogix*.dtb + rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/bamboo.dtb + rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/ppc_rom.bin + rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/spapr-rtas.bin + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/s390-zipl.rom + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/s390-ccw.img + + # Remove efi roms + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/efi*.rom + + # Provided by package ipxe + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/pxe*rom + # Provided by package vgabios + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/vgabios*bin + # Provided by package seabios + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/bios*.bin + # Provided by package sgabios + rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{pkgname}/sgabios.bin + + # the pxe gpxe images will be symlinks to the images on + # /usr/share/ipxe, as QEMU doesn't know how to look + # for other paths, yet. + pxe_link() { + ln -s ../ipxe/$2.rom %{buildroot}%{_datadir}/%{pkgname}/pxe-$1.rom + } + + pxe_link e1000 8086100e + pxe_link ne2k_pci 10ec8029 + pxe_link pcnet 10222000 + pxe_link rtl8139 10ec8139 + pxe_link virtio 1af41000 + + rom_link() { + ln -s $1 %{buildroot}%{_datadir}/%{pkgname}/$2 + } + + rom_link ../seavgabios/vgabios-isavga.bin vgabios.bin + rom_link ../seavgabios/vgabios-cirrus.bin vgabios-cirrus.bin + rom_link ../seavgabios/vgabios-qxl.bin vgabios-qxl.bin + rom_link ../seavgabios/vgabios-stdvga.bin vgabios-stdvga.bin + rom_link ../seavgabios/vgabios-vmware.bin vgabios-vmware.bin + rom_link ../seabios/bios.bin bios.bin + rom_link ../seabios/bios-256k.bin bios-256k.bin + rom_link ../sgabios/sgabios.bin sgabios.bin +%endif + +# Remove libcacard +rm -rf $RPM_BUILD_ROOT%{_bindir}/vscclient +rm -rf $RPM_BUILD_ROOT%{_includedir}/cacard +rm -rf $RPM_BUILD_ROOT%{_libdir}/libcacard.so* +rm -rf $RPM_BUILD_ROOT%{_libdir}/pkgconfig/libcacard.pc + +%if %{with guest_agent} + # For the qemu-guest-agent subpackage, install: + # - the systemd service file and the udev rules: + mkdir -p $RPM_BUILD_ROOT%{_unitdir} + mkdir -p $RPM_BUILD_ROOT%{_udevdir} + install -m 0644 %{SOURCE10} $RPM_BUILD_ROOT%{_unitdir} + install -m 0644 %{SOURCE11} $RPM_BUILD_ROOT%{_udevdir} + + # - the environment file for the systemd service: + install -D -p -m 0644 %{SOURCE13} \ + $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/qemu-ga + + # - the fsfreeze hook script: + install -D --preserve-timestamps \ + scripts/qemu-guest-agent/fsfreeze-hook \ + $RPM_BUILD_ROOT%{_sysconfdir}/qemu-ga/fsfreeze-hook + + # - the directory for user scripts: + mkdir $RPM_BUILD_ROOT%{_sysconfdir}/qemu-ga/fsfreeze-hook.d + + # - and the fsfreeze script samples: + mkdir --parents $RPM_BUILD_ROOT%{_datadir}/%{name}/qemu-ga/fsfreeze-hook.d/ + install --preserve-timestamps --mode=0644 \ + scripts/qemu-guest-agent/fsfreeze-hook.d/*.sample \ + $RPM_BUILD_ROOT%{_datadir}/%{name}/qemu-ga/fsfreeze-hook.d/ + + # - Install dedicated log directory: + mkdir -p -v $RPM_BUILD_ROOT%{_localstatedir}/log/qemu-ga/ +%endif + +%if 0%{!?build_only_sub:1} + # Install rules to use the bridge helper with libvirt's virbr0 + install -m 0644 %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/%{pkgname} +%endif + + +find $RPM_BUILD_ROOT -name '*.la' -or -name '*.a' | xargs rm -f + +%if 0%{?build_only_sub} + mkdir -p $RPM_BUILD_ROOT%{_bindir} + mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1/* + mkdir -p $RPM_BUILD_ROOT%{_mandir}/man8/* + install -m 0755 qemu-img $RPM_BUILD_ROOT%{_bindir}/qemu-img + install -m 0755 qemu-io $RPM_BUILD_ROOT%{_bindir}/qemu-io + install -m 0755 qemu-nbd $RPM_BUILD_ROOT%{_bindir}/qemu-nbd + install -c -m 0644 qemu-img.1 ${RPM_BUILD_ROOT}%{_mandir}/man1/qemu-img.1 + install -c -m 0644 qemu-nbd.8 ${RPM_BUILD_ROOT}%{_mandir}/man8/qemu-nbd.8 + %if %{with guest_agent} + install -c -m 0755 qemu-ga ${RPM_BUILD_ROOT}%{_bindir}/qemu-ga + %endif + chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/* + chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man8/* +%endif + + +%if 0%{!?build_only_sub:1} +%check + make check +%endif +%post +# load kvm modules now, so we can make sure no reboot is needed. +# If there's already a kvm module installed, we don't mess with it +%udev_rules_update +sh %{_sysconfdir}/sysconfig/modules/kvm.modules &> /dev/null || : + udevadm trigger --subsystem-match=misc --sysname-match=kvm --action=add || : + +%if 0%{!?build_only_sub:1} +%post -n qemu-kvm-common%{?pkgsuffix} + %systemd_post ksm.service + %systemd_post ksmtuned.service + + getent group kvm >/dev/null || groupadd -g 36 -r kvm + getent group qemu >/dev/null || groupadd -g 107 -r qemu + getent passwd qemu >/dev/null || \ + useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ + -c "qemu user" qemu + +%preun -n qemu-kvm-common%{?pkgsuffix} + %systemd_preun ksm.service + %systemd_preun ksmtuned.service + +%postun -n qemu-kvm-common%{?pkgsuffix} + %systemd_postun_with_restart ksm.service + %systemd_postun_with_restart ksmtuned.service +%endif + +%global kvm_files \ +%{_udevdir}/80-kvm.rules + +%global qemu_kvm_files \ +%{_libexecdir}/qemu-kvm \ +%{_datadir}/systemtap/tapset/qemu-kvm.stp \ +%{_datadir}/systemtap/tapset/qemu-kvm-simpletrace.stp \ +%{_datadir}/%{pkgname}/trace-events \ +%{_datadir}/%{pkgname}/systemtap/script.d/qemu_kvm.stp \ +%{_datadir}/%{pkgname}/systemtap/conf.d/qemu_kvm.conf + +%if 0%{!?build_only_sub:1} +%files -n qemu-kvm-common%{?pkgsuffix} + %defattr(-,root,root) + %dir %{qemudocdir} + %doc %{qemudocdir}/Changelog + %doc %{qemudocdir}/README + %doc %{qemudocdir}/qemu-doc.html + %doc %{qemudocdir}/qemu-tech.html + %doc %{qemudocdir}/qmp-commands.txt + %doc %{qemudocdir}/COPYING + %doc %{qemudocdir}/COPYING.LIB + %doc %{qemudocdir}/LICENSE + %doc %{qemudocdir}/README.rhel6-gpxe-source + %doc %{qemudocdir}/README.systemtap + %doc %{qemudocdir}/qmp-spec.txt + %doc %{qemudocdir}/qmp-events.txt + %dir %{_datadir}/%{pkgname}/ + %{_datadir}/%{pkgname}/keymaps/ + %{_mandir}/man1/%{pkgname}.1* + %attr(4755, -, -) %{_libexecdir}/qemu-bridge-helper + %config(noreplace) %{_sysconfdir}/sasl2/%{pkgname}.conf + %{_unitdir}/ksm.service + %{_libexecdir}/ksmctl + %config(noreplace) %{_sysconfdir}/sysconfig/ksm + %{_unitdir}/ksmtuned.service + %{_sbindir}/ksmtuned + %config(noreplace) %{_sysconfdir}/ksmtuned.conf + %dir %{_sysconfdir}/%{pkgname} + %config(noreplace) %{_sysconfdir}/%{pkgname}/bridge.conf + %{_datadir}/%{pkgname}/simpletrace.py* + %{_datadir}/%{pkgname}/tracetool/*.py* + %{_datadir}/%{pkgname}/tracetool/backend/*.py* + %{_datadir}/%{pkgname}/tracetool/format/*.py* +%endif + +%if %{with guest_agent} +%files -n qemu-guest-agent + %defattr(-,root,root,-) + %doc COPYING README + %{_bindir}/qemu-ga + %{_unitdir}/qemu-guest-agent.service + %{_udevdir}/99-qemu-guest-agent.rules + %{_sysconfdir}/sysconfig/qemu-ga + %{_sysconfdir}/qemu-ga + %{_datadir}/%{name}/qemu-ga + %dir %{_localstatedir}/log/qemu-ga +%endif + +%if 0%{!?build_only_sub:1} +%files + %defattr(-,root,root) + %{_datadir}/%{pkgname}/acpi-dsdt.aml + %{_datadir}/%{pkgname}/q35-acpi-dsdt.aml + %{_datadir}/%{pkgname}/bios.bin + %{_datadir}/%{pkgname}/bios-256k.bin + %{_datadir}/%{pkgname}/sgabios.bin + %{_datadir}/%{pkgname}/linuxboot.bin + %{_datadir}/%{pkgname}/multiboot.bin + %{_datadir}/%{pkgname}/kvmvapic.bin + %{_datadir}/%{pkgname}/vgabios.bin + %{_datadir}/%{pkgname}/vgabios-cirrus.bin + %{_datadir}/%{pkgname}/vgabios-qxl.bin + %{_datadir}/%{pkgname}/vgabios-stdvga.bin + %{_datadir}/%{pkgname}/vgabios-vmware.bin + %{_datadir}/%{pkgname}/pxe-e1000.rom + %{_datadir}/%{pkgname}/pxe-virtio.rom + %{_datadir}/%{pkgname}/pxe-pcnet.rom + %{_datadir}/%{pkgname}/pxe-rtl8139.rom + %{_datadir}/%{pkgname}/pxe-ne2k_pci.rom + %{_datadir}/%{pkgname}/qemu-icon.bmp + %{_datadir}/%{pkgname}/rhel6-virtio.rom + %{_datadir}/%{pkgname}/rhel6-pcnet.rom + %{_datadir}/%{pkgname}/rhel6-rtl8139.rom + %{_datadir}/%{pkgname}/rhel6-ne2k_pci.rom + %{_datadir}/%{pkgname}/rhel6-e1000.rom + %{_datadir}/%{pkgname}/dump-guest-memory.py* + %config(noreplace) %{_sysconfdir}/%{pkgname}/target-x86_64.conf + %{?kvm_files:} + %{?qemu_kvm_files:} + +%files -n qemu-kvm-tools%{?pkgsuffix} + %defattr(-,root,root,-) + %{_bindir}/kvm_stat +%endif + +%files -n qemu-img%{?pkgsuffix} +%defattr(-,root,root) +%{_bindir}/qemu-img +%{_bindir}/qemu-io +%{_bindir}/qemu-nbd +%{_mandir}/man1/qemu-img.1* +%{_mandir}/man8/qemu-nbd.8* + +%changelog +* Wed Oct 02 2019 Miroslav Rezanina - 1.5.3-170.el7 +- kvm-Using-ip_deq-after-m_free-might-read-pointers-from-a.patch [bz#1749735] +- kvm-target-i386-Merge-feature-filtering-checking-functio.patch [bz#1709971] +- kvm-target-i386-Isolate-KVM-specific-code-on-CPU-feature.patch [bz#1709971] +- kvm-i386-Add-new-MSR-indices-for-IA32_PRED_CMD-and-IA32_.patch [bz#1709971] +- kvm-i386-Add-CPUID-bit-and-feature-words-for-IA32_ARCH_C.patch [bz#1709971] +- kvm-Add-support-to-KVM_GET_MSR_FEATURE_INDEX_LIST-an.patch [bz#1709971] +- kvm-x86-Data-structure-changes-to-support-MSR-based-feat.patch [bz#1709971] +- kvm-x86-define-a-new-MSR-based-feature-word-FEATURE_WORD.patch [bz#1709971] +- kvm-Use-KVM_GET_MSR_INDEX_LIST-for-MSR_IA32_ARCH_CAP.patch [bz#1709971] +- kvm-i386-kvm-Disable-arch_capabilities-if-MSR-can-t-be-s.patch [bz#1709971] +- kvm-Remove-arch-capabilities-deprecation.patch [bz#1709971] +- kvm-target-i386-add-MDS-NO-feature.patch [bz#1714791] +- Resolves: bz#1709971 + ([Intel 7.8 Bug] [KVM][CLX] CPUID_7_0_EDX_ARCH_CAPABILITIES is not enabled in VM qemu-kvm) +- Resolves: bz#1714791 + ([Intel 7.8 FEAT] MDS_NO exposure to guest - qemu-kvm) +- Resolves: bz#1749735 + (CVE-2019-15890 qemu-kvm: QEMU: Slirp: use-after-free during packet reassembly [rhel-7]) + +* Wed Sep 04 2019 Miroslav Rezanina - 1.5.3-169.el7 +- kvm-target-i386-Support-invariant-tsc-flag.patch [bz#1626871] +- kvm-target-i386-block-migration-and-savevm-if-invariant-.patch [bz#1626871] +- kvm-i386-Don-t-copy-host-virtual-address-limit.patch [bz#1706658] +- Resolves: bz#1626871 + ([RFE] request for using TscInvariant feature with qemu-kvm.) +- Resolves: bz#1706658 + ([Intel 7.8 Bug] qemu-kvm fail with "err:kvm_init_vcpu() invalidate argumant" on ICX platform) + +* Tue Aug 20 2019 Miroslav Rezanina - 1.5.3-168.el7 +- kvm-qxl-check-release-info-object.patch [bz#1712703] +- kvm-bswap.h-Remove-cpu_to_be16wu.patch [bz#1270166] +- kvm-net-Transmit-zero-UDP-checksum-as-0xFFFF.patch [bz#1270166] +- kvm-Fix-heap-overflow-in-ip_reass-on-big-packet-input.patch [bz#1734749] +- Resolves: bz#1270166 + (UDP packet checksum is not converted from 0x0000 to 0xffff with Qemu e1000 emulation.) +- Resolves: bz#1712703 + (CVE-2019-12155 qemu-kvm: QEMU: qxl: null pointer dereference while releasing spice resources [rhel-7]) +- Resolves: bz#1734749 + (CVE-2019-14378 qemu-kvm: QEMU: slirp: heap buffer overflow during packet reassembly [rhel-7.8]) + +* Wed Jun 12 2019 Miroslav Rezanina - 1.5.3-167.el7 +- Reverting kvm-seccomp-set-the-seccomp-filter-to-all-threads.patch [bz#1618503] +- Resolves: bz#1618503 + (qemu-kvm: Qemu: seccomp: blacklist is not applied to all threads [rhel-7]) + +* Wed Jun 05 2019 Miroslav Rezanina - 1.5.3-166.el7 +- kvm-seccomp-set-the-seccomp-filter-to-all-threads.patch [bz#1618503] +- Resolves: bz#1618503 + (qemu-kvm: Qemu: seccomp: blacklist is not applied to all threads [rhel-7]) + +* Tue May 28 2019 Miroslav Rezanina - 1.5.3-165.el7 +- kvm-Fix-eax-for-cpuid-leaf-0x40000000.patch [bz#1709495] +- kvm-slirp-fix-big-little-endian-conversion-in-ident-prot.patch [bz#1669068] +- kvm-slirp-ensure-there-is-enough-space-in-mbuf-to-null-t.patch [bz#1669068] +- kvm-slirp-don-t-manipulate-so_rcv-in-tcp_emu.patch [bz#1669068] +- Resolves: bz#1669068 + (CVE-2019-6778 qemu-kvm: QEMU: slirp: heap buffer overflow in tcp_emu() [rhel-7.7]) +- Resolves: bz#1709495 + (Change CPUID[0x40000000].EAX from 0 to KVM_CPUID_FE...ATURES (0x40000001)) + +* Wed Apr 10 2019 Miroslav Rezanina - 1.5.3-164.el7 +- kvm-target-i386-define-md-clear-bit-rhel.patch [bz#1693217] +- Resolves: bz#1693217 + (CVE-2018-12126 qemu-kvm: hardware: Microarchitectural Store Buffer Data Sampling [rhel-7.7] ) + +* Wed Apr 03 2019 Miroslav Rezanina - 1.5.3-163.el7 +- kvm-x86-cpu-Enable-CLDEMOTE-Demote-Cache-Line-cpu-featur.patch [bz#1537773] +- kvm-vfio-pci-Lazy-PBA-emulation.patch [bz#1459077] +- kvm-slirp-check-sscanf-result-when-emulating-ident.patch [bz#1689791] +- Resolves: bz#1459077 + ([Intel 7.7 Bug] QEMU version in RHEL7.4 beta does not support KVM passthrough with WFR card) +- Resolves: bz#1537773 + ([Intel 7.7 Feat] KVM Enabling SnowRidge new NIs - qemu-kvm) +- Resolves: bz#1689791 + (CVE-2019-9824 qemu-kvm: QEMU: Slirp: information leakage in tcp_emu() due to uninitialized stack variables [rhel-7]) + +* Mon Jan 14 2019 Miroslav Rezanina - 1.5.3-162.el7 +- kvm-i386-Deprecate-arch-facilities-and-make-it-block-liv.patch [bz#1658407] +- kvm-Do-not-build-bluetooth-support.patch [bz#1654627] +- Resolves: bz#1654627 + (Qemu: hw: bt: keep bt/* objects from building [rhel-7.7]) +- Resolves: bz#1658407 + (mode="host-model" VMs include broken "arch-facilities" flag name [qemu-kvm]) + +* Wed Jan 02 2019 Miroslav Rezanina - 1.5.3-161.el7 +- kvm-Inhibit-ballooning-during-postcopy.patch [bz#1659229] +- kvm-balloon-Allow-multiple-inhibit-users.patch [bz#1659229] +- kvm-check-KVM_CAP_SYNC_MMU-with-kvm_vm_check_extensi.patch [bz#1659229] +- kvm-Use-inhibit-to-prevent-ballooning-without-synchr.patch [bz#1659229] +- kvm-vfio-Inhibit-ballooning-based-on-group-attachment-to.patch [bz#1659229] +- Resolves: bz#1659229 + (Ballooning is incompatible with vfio assigned devices, but not prevented) + +* Mon Aug 20 2018 Miroslav Rezanina - 1.5.3-160.el7 +- kvm-scsi-disk-support-reporting-of-rotation-rate.patch [bz#1583807] +- kvm-ide-support-reporting-of-rotation-rate.patch [bz#1583807] +- kvm-ide-avoid-referencing-NULL-dev-in-rotational-rate-se.patch [bz#1583807] +- kvm-slirp-Correct-size-check-in-m_inc.patch [bz#1586253] +- Resolves: bz#1583807 + ([DELL EMC 7.6 FEAT] option to mark virtual block device as rotational/non-rotational) +- Resolves: bz#1586253 + (CVE-2018-11806 qemu-kvm: QEMU: slirp: heap buffer overflow while reassembling fragmented datagrams [rhel-7.6]) + +* Wed Aug 01 2018 Miroslav Rezanina - 1.5.3-159.el7 +- kvm-multiboot-bss_end_addr-can-be-zero.patch [bz#1549822] +- kvm-multiboot-Remove-unused-variables-from-multiboot.c.patch [bz#1549822] +- kvm-multiboot-Use-header-names-when-displaying-fields.patch [bz#1549822] +- kvm-multiboot-fprintf-stderr.-error_report.patch [bz#1549822] +- kvm-multiboot-Reject-kernels-exceeding-the-address-space.patch [bz#1549822] +- kvm-multiboot-Check-validity-of-mh_header_addr.patch [bz#1549822] +- kvm-slirp-remove-mbuf-m_hdr-m_dat-indirection.patch [bz#1586253] +- kvm-slirp-correct-size-computation-while-concatenating-m.patch [bz#1586253] +- Resolves: bz#1549822 + (CVE-2018-7550 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.6]) +- Resolves: bz#1586253 + (CVE-2018-11806 qemu-kvm: QEMU: slirp: heap buffer overflow while reassembling fragmented datagrams [rhel-7.6]) + +* Wed Jun 27 2018 Miroslav Rezanina - 1.5.3-158.el7 +- kvm-x86-cpu-Enable-new-SSE-AVX-AVX512-cpu-features.patch [bz#1513686] +- kvm-target-i386-Add-support-for-UMIP-and-RDPID-CPUID-bit.patch [bz#1526638] +- kvm-i386-Define-the-Virt-SSBD-MSR-and-handling-of-it-CVE.patch [bz#1584583] +- kvm-i386-define-the-AMD-virt-ssbd-CPUID-feature-bit-CVE-.patch [bz#1584583] +- kvm-qcow2-Repair-OFLAG_COPIED-when-fixing-leaks.patch [bz#1527122] +- kvm-iotests-Repairing-error-during-snapshot-deletion.patch [bz#1527122] +- kvm-headers-add-drm_fourcc.h.patch [bz#1555246] +- kvm-spice-fix-simple-display-on-bigendian-hosts.patch [bz#1555246] +- kvm-ui-pixman-add-qemu_drm_format_to_pixman.patch [bz#1555246] +- kvm-console-nicer-initial-screen.patch [bz#1555246] +- kvm-console-minimal-hotplug-suport.patch [bz#1555246] +- kvm-vfio-common-cleanup-in-vfio_region_finalize.patch [bz#1555246] +- kvm-linux-headers-Update-to-include-region-based-display.patch [bz#1555246] +- kvm-qdev-New-DEFINE_PROP_ON_OFF_AUTO.patch [bz#1555246] +- kvm-vfio-display-core-wireup.patch [bz#1555246] +- kvm-vfio-display-adding-region-support.patch [bz#1555246] +- kvm-vfio-pci-Default-display-option-to-off.patch [bz#1555246] +- Resolves: bz#1513686 + ([Intel 7.6 Feat] qemu-kvm Enabling Icelake new NIs) +- Resolves: bz#1526638 + ([Intel 7.6 FEAT] KVM User Mode Instruction Prevention (UMIP) - qemu-kvm) +- Resolves: bz#1527122 + (The copied flag should be updated during '-r leaks') +- Resolves: bz#1555246 + ([RFE] Support console VNC on Nvidia vGPU - qemu) +- Resolves: bz#1584583 + (CVE-2018-3639 qemu-kvm: hw: cpu: speculative store bypass [rhel-7.6]) + +* Thu Jun 07 2018 Miroslav Rezanina - 1.5.3-157.el7 +- kvm-vga-add-ram_addr_t-cast.patch [bz#1553670] +- kvm-vga-fix-region-calculation.patch [bz#1553670] +- kvm-i386-define-the-ssbd-CPUID-feature-bit-CVE-2018-3639.patch [bz#1574082] +- kvm-target-i386-introduce-kvm_put_one_msr.patch [bz#1577680] +- kvm-apic-fix-2.2-2.1-migration.patch [bz#1577680] +- kvm-x86-lapic-Load-LAPIC-state-at-post_load.patch [bz#1577680] +- kvm-apic-drop-debugging.patch [bz#1577680] +- kvm-apic-set-APIC-base-as-part-of-kvm_apic_put.patch [bz#1577680] +- kvm-spec-Change-License-line.patch [bz#1549108] +- kvm-spec-Use-hardening-flags-for-ksmctl-build.patch [bz#1558895] +- Resolves: bz#1549108 + (Incorrect License information in RPM specfile) +- Resolves: bz#1553670 + (CVE-2018-7858 qemu-kvm: Qemu: cirrus: OOB access when updating vga display [rhel-7]) +- Resolves: bz#1558895 + (ksmctl is built without any hardening flags set [rhel-7.6]) +- Resolves: bz#1574082 + (CVE-2018-3639 qemu-kvm: hw: cpu: speculative store bypass [rhel-7.6]) +- Resolves: bz#1577680 + (Windows 2012 Guest hangs after live migration with RTC clock stopped.) + +* Tue Feb 20 2018 Miroslav Rezanina - 1.5.3-156.el7 +- kvm-vnc-Fix-qemu-crashed-when-vnc-client-disconnect-sudd.patch [bz#1527405] +- kvm-fix-full-frame-updates-for-VNC-clients.patch [bz#1527405] +- kvm-vnc-update-fix.patch [bz#1527405] +- kvm-vnc-return-directly-if-no-vnc-client-connected.patch [bz#1527405] +- kvm-buffer-add-buffer_move_empty.patch [bz#1527405] +- kvm-buffer-add-buffer_move.patch [bz#1527405] +- kvm-vnc-kill-jobs-queue-buffer.patch [bz#1527405] +- kvm-vnc-jobs-move-buffer-reset-use-new-buffer-move.patch [bz#1527405] +- kvm-vnc-zap-dead-code.patch [bz#1527405] +- kvm-vnc-add-vnc_width-vnc_height-helpers.patch [bz#1527405] +- kvm-vnc-factor-out-vnc_update_server_surface.patch [bz#1527405] +- kvm-vnc-use-vnc_-width-height-in-vnc_set_area_dirty.patch [bz#1527405] +- kvm-vnc-only-alloc-server-surface-with-clients-connected.patch [bz#1527405] +- kvm-ui-fix-refresh-of-VNC-server-surface.patch [bz#1527405] +- kvm-ui-move-disconnecting-check-to-start-of-vnc_update_c.patch [bz#1527405] +- kvm-ui-remove-redundant-indentation-in-vnc_client_update.patch [bz#1527405] +- kvm-ui-avoid-pointless-VNC-updates-if-framebuffer-isn-t-.patch [bz#1527405] +- kvm-ui-track-how-much-decoded-data-we-consumed-when-doin.patch [bz#1527405] +- kvm-ui-introduce-enum-to-track-VNC-client-framebuffer-up.patch [bz#1527405] +- kvm-ui-correctly-reset-framebuffer-update-state-after-pr.patch [bz#1527405] +- kvm-ui-refactor-code-for-determining-if-an-update-should.patch [bz#1527405] +- kvm-ui-fix-VNC-client-throttling-when-audio-capture-is-a.patch [bz#1527405] +- kvm-ui-fix-VNC-client-throttling-when-forced-update-is-r.patch [bz#1527405] +- kvm-ui-place-a-hard-cap-on-VNC-server-output-buffer-size.patch [bz#1527405] +- kvm-ui-avoid-sign-extension-using-client-width-height.patch [bz#1527405] +- kvm-ui-correctly-advance-output-buffer-when-writing-SASL.patch [bz#1527405] +- kvm-io-skip-updates-to-client-if-websocket-output-buffer.patch [bz#1518711] +- Resolves: bz#1518711 + (CVE-2017-15268 qemu-kvm: Qemu: I/O: potential memory exhaustion via websock connection to VNC [rhel-7.5]) +- Resolves: bz#1527405 + (CVE-2017-15124 qemu-kvm: Qemu: memory exhaustion through framebuffer update request message in VNC server [rhel-7.5]) + +* Tue Jan 30 2018 Miroslav Rezanina - 1.5.3-155.el7 +- kvm-qdev-Fix-assert-in-PCI-address-property-when-used-by.patch [bz#1538866] +- kvm-vga-check-the-validation-of-memory-addr-when-draw-te.patch [bz#1534691] +- kvm-savevm-Improve-error-message-for-blocked-migration.patch [bz#1536883] +- kvm-savevm-fail-if-migration-blockers-are-present.patch [bz#1536883] +- Resolves: bz#1534691 + (CVE-2018-5683 qemu-kvm: Qemu: Out-of-bounds read in vga_draw_text routine [rhel-7.5]) +- Resolves: bz#1536883 + ([abrt] [faf] qemu-kvm: unknown function(): /usr/libexec/qemu-kvm killed by 6) +- Resolves: bz#1538866 + (qemu will coredump after executing info qtree) + +* Wed Jan 24 2018 Miroslav Rezanina - 1.5.3-154.el7 +- kvm-virtio-net-validate-backend-queue-numbers-against-bu.patch [bz#1460872] +- kvm-dump-guest-memory.py-fix-python-2-support.patch [bz#1411490] +- kvm-qxl-add-migration-blocker-to-avoid-pre-save-assert.patch [bz#1536883] +- Resolves: bz#1411490 + ([RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm)) +- Resolves: bz#1460872 + (Aborted(core dumped) when booting guest with "-netdev tap....vhost=on,queues=32") +- Resolves: bz#1536883 + ([abrt] [faf] qemu-kvm: unknown function(): /usr/libexec/qemu-kvm killed by 6) + +* Fri Jan 12 2018 Miroslav Rezanina - 1.5.3-153.el7 +- kvm-i386-update-ssdt-misc.hex.generated.patch [bz#1411490] +- kvm-main-loop-Acquire-main_context-lock-around-os_host_m.patch [bz#1435432 bz#1473536] +- Resolves: bz#1411490 + ([RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm)) +- Resolves: bz#1435432 + (Emulated ISA serial port hangs randomly when sending lots of data from guest -> host) +- Resolves: bz#1473536 + (Hangs in serial console under qemu) + +* Thu Jan 04 2018 Miroslav Rezanina - 1.5.3-152.el7 +- kvm-target-i386-cpu-add-new-CPUID-bits-for-indirect-bran.patch [CVE-2017-5715] +- kvm-target-i386-add-support-for-SPEC_CTRL-MSR.patch [CVE-2017-5715] +- kvm-target-i386-cpu-add-new-CPU-models-for-indirect-bran.patch [CVE-2017-5715] + +* Tue Dec 19 2017 Miroslav Rezanina - 1.5.3-151.el7 +- kvm-fw_cfg-remove-support-for-guest-side-data-writes.patch [bz#1411490] +- kvm-fw_cfg-prevent-selector-key-conflict.patch [bz#1411490] +- kvm-fw_cfg-prohibit-insertion-of-duplicate-fw_cfg-file-n.patch [bz#1411490] +- kvm-fw_cfg-factor-out-initialization-of-FW_CFG_ID-rev.-n.patch [bz#1411490] +- kvm-Implement-fw_cfg-DMA-interface.patch [bz#1411490] +- kvm-fw_cfg-avoid-calculating-invalid-current-entry-point.patch [bz#1411490] +- kvm-fw-cfg-support-writeable-blobs.patch [bz#1411490] +- kvm-Enable-fw_cfg-DMA-interface-for-x86.patch [bz#1411490] +- kvm-fw_cfg-unbreak-migration-compatibility.patch [bz#1411490] +- kvm-i386-expose-fw_cfg-QEMU0002-in-SSDT.patch [bz#1411490] +- kvm-fw_cfg-add-write-callback.patch [bz#1411490] +- kvm-hw-misc-add-vmcoreinfo-device.patch [bz#1411490] +- kvm-vmcoreinfo-put-it-in-the-misc-device-category.patch [bz#1411490] +- kvm-fw_cfg-enable-DMA-if-device-vmcoreinfo.patch [bz#1411490] +- kvm-build-sys-restrict-vmcoreinfo-to-fw_cfg-dma-capable-.patch [bz#1411490] +- kvm-dump-Make-DumpState-and-endian-conversion-routines-a.patch [bz#1411490] +- kvm-dump.c-Fix-memory-leak-issue-in-cleanup-processing-f.patch [bz#1411490] +- kvm-dump-Propagate-errors-into-qmp_dump_guest_memory.patch [bz#1411490] +- kvm-dump-Turn-some-functions-to-void-to-make-code-cleane.patch [bz#1411490] +- kvm-dump-Fix-dump-guest-memory-termination-and-use-after.patch [bz#1411490] +- kvm-dump-allow-target-to-set-the-page-size.patch [bz#1411490] +- kvm-dump-allow-target-to-set-the-physical-base.patch [bz#1411490] +- kvm-dump-guest-memory-cleanup-removing-dump_-error-clean.patch [bz#1411490] +- kvm-dump-guest-memory-using-static-DumpState-add-DumpSta.patch [bz#1411490] +- kvm-dump-guest-memory-add-dump_in_progress-helper-functi.patch [bz#1411490] +- kvm-dump-guest-memory-introduce-dump_process-helper-func.patch [bz#1411490] +- kvm-dump-guest-memory-disable-dump-when-in-INMIGRATE-sta.patch [bz#1411490] +- kvm-DumpState-adding-total_size-and-written_size-fields.patch [bz#1411490] +- kvm-dump-do-not-dump-non-existent-guest-memory.patch [bz#1411490] +- kvm-dump-add-guest-ELF-note.patch [bz#1411490] +- kvm-dump-update-phys_base-header-field-based-on-VMCOREIN.patch [bz#1411490] +- kvm-kdump-set-vmcoreinfo-location.patch [bz#1411490] +- kvm-scripts-dump-guest-memory.py-Move-constants-to-the-t.patch [bz#1411490] +- kvm-scripts-dump-guest-memory.py-Make-methods-functions.patch [bz#1411490] +- kvm-scripts-dump-guest-memory.py-Improve-python-3-compat.patch [bz#1411490] +- kvm-scripts-dump-guest-memory.py-Cleanup-functions.patch [bz#1411490] +- kvm-scripts-dump-guest-memory.py-Introduce-multi-arch-su.patch [bz#1411490] +- kvm-Fix-typo-in-variable-name-found-and-fixed-by-codespe.patch [bz#1411490] +- kvm-scripts-dump-guest-memory.py-add-vmcoreinfo.patch [bz#1411490] +- kvm-dump-guest-memory.py-fix-No-symbol-vmcoreinfo_find.patch [bz#1411490] +- kvm-dump-guest-memory.py-fix-You-can-t-do-that-without-a.patch [bz#1411490] +- Resolves: bz#1411490 + ([RFE] Kernel address space layout randomization [KASLR] support (qemu-kvm)) + +* Tue Dec 12 2017 Miroslav Rezanina - 1.5.3-150.el7 +- kvm-Build-only-x86_64-packages.patch [bz#1520793] +- Resolves: bz#1520793 + (Do not build non-x86_64 subpackages) + +* Wed Nov 29 2017 Miroslav Rezanina - 1.5.3-149.el7 +- kvm-block-linux-aio-fix-memory-and-fd-leak.patch [bz#1491434] +- kvm-linux-aio-Fix-laio-resource-leak.patch [bz#1491434] +- kvm-slirp-cleanup-leftovers-from-misc.h.patch [bz#1508745] +- kvm-Avoid-embedding-struct-mbuf-in-other-structures.patch [bz#1508745] +- kvm-slirp-Fix-access-to-freed-memory.patch [bz#1508745] +- kvm-slirp-fix-clearing-ifq_so-from-pending-packets.patch [bz#1508745] +- kvm-qcow2-Prevent-backing-file-names-longer-than-1023.patch [bz#1459714] +- kvm-qemu-img-Use-strerror-for-generic-resize-error.patch [bz#1459725] +- kvm-qcow2-Avoid-making-the-L1-table-too-big.patch [bz#1459725] +- Resolves: bz#1459714 + (Throw error if qemu-img rebasing backing file is too long or provide way to fix a "too long" backing file.) +- Resolves: bz#1459725 + (Prevent qemu-img resize from causing "Active L1 table too large") +- Resolves: bz#1491434 + (KVM leaks file descriptors when attaching and detaching virtio-scsi block devices) +- Resolves: bz#1508745 + (CVE-2017-13711 qemu-kvm: Qemu: Slirp: use-after-free when sending response [rhel-7.5]) + +* Fri Nov 10 2017 Miroslav Rezanina - 1.5.3-148.el7 +- kvm-multiboot-validate-multiboot-header-address-values.patch [bz#1501121] +- kvm-qemu-option-reject-empty-number-value.patch [bz#1417864] +- Resolves: bz#1417864 + (Qemu-kvm starts with unspecified port) +- Resolves: bz#1501121 + (CVE-2017-14167 qemu-kvm: Qemu: i386: multiboot OOB access while loading kernel image [rhel-7.5]) + +* Fri Nov 03 2017 Miroslav Rezanina - 1.5.3-147.el7 +- kvm-vga-drop-line_offset-variable.patch [bz#1501295] +- kvm-vga-Add-mechanism-to-force-the-use-of-a-shadow-surfa.patch [bz#1501295] +- kvm-vga-handle-cirrus-vbe-mode-wraparounds.patch [bz#1501295] +- kvm-cirrus-fix-oob-access-in-mode4and5-write-functions.patch [bz#1501295] +- kvm-i6300esb-Fix-signed-integer-overflow.patch [bz#1470244] +- kvm-i6300esb-fix-timer-overflow.patch [bz#1470244] +- kvm-i6300esb-remove-muldiv64.patch [bz#1470244] +- Resolves: bz#1470244 + (reboot leads to shutoff of qemu-kvm-vm if i6300esb-watchdog set to poweroff) +- Resolves: bz#1501295 + (CVE-2017-15289 qemu-kvm: Qemu: cirrus: OOB access issue in mode4and5 write functions [rhel-7.5]) + +* Tue Oct 24 2017 Miroslav Rezanina - 1.5.3-146.el7 +- kvm-vfio-pass-device-to-vfio_mmap_bar-and-use-it-to-set-.patch [bz#1494181] +- kvm-hw-vfio-pci-Rename-VFIODevice-into-VFIOPCIDevice.patch [bz#1494181] +- kvm-hw-vfio-pci-generalize-mask-unmask-to-any-IRQ-index.patch [bz#1494181] +- kvm-hw-vfio-pci-introduce-minimalist-VFIODevice-with-fd.patch [bz#1494181] +- kvm-hw-vfio-pci-add-type-name-and-group-fields-in-VFIODe.patch [bz#1494181] +- kvm-hw-vfio-pci-handle-reset-at-VFIODevice.patch [bz#1494181] +- kvm-hw-vfio-pci-Introduce-VFIORegion.patch [bz#1494181] +- kvm-hw-vfio-pci-use-name-field-in-format-strings.patch [bz#1494181] +- kvm-vfio-Add-sysfsdev-property-for-pci-platform.patch [bz#1494181] +- kvm-vfio-remove-bootindex-property-from-qdev-to-qom.patch [bz#1494181] +- kvm-vfio-pci-Handle-host-oversight.patch [bz#1494181] +- kvm-vfio-pci-Fix-incorrect-error-message.patch [bz#1494181] +- kvm-vfio-Wrap-VFIO_DEVICE_GET_REGION_INFO.patch [bz#1494181] +- kvm-vfio-Generalize-region-support.patch [bz#1494181] +- kvm-vfio-Enable-sparse-mmap-capability.patch [bz#1494181] +- kvm-vfio-Handle-zero-length-sparse-mmap-ranges.patch [bz#1494181] +- kvm-bswap.h-Remove-cpu_to_32wu.patch [bz#1486642] +- kvm-hw-use-ld_p-st_p-instead-of-ld_raw-st_raw.patch [bz#1486642] +- kvm-vga-Start-cutting-out-non-32bpp-conversion-support.patch [bz#1486642] +- kvm-vga-Remove-remainder-of-old-conversion-cruft.patch [bz#1486642] +- kvm-vga-Separate-LE-and-BE-conversion-functions.patch [bz#1486642] +- kvm-vga-Rename-vga_template.h-to-vga-helpers.h.patch [bz#1486642] +- kvm-vga-stop-passing-pointers-to-vga_draw_line-functions.patch [bz#1486642] +- kvm-target-i386-Add-Intel-SHA_NI-instruction-support.patch [bz#1450396] +- kvm-target-i386-cpu-Add-new-EPYC-CPU-model.patch [bz#1450396] +- kvm-target-i386-Enable-clflushopt-clwb-pcommit-instructi.patch [bz#1501510] +- kvm-i386-add-Skylake-Server-cpu-model.patch [bz#1501510] +- Resolves: bz#1450396 + (Add support for AMD EPYC processors) +- Resolves: bz#1486642 + (CVE-2017-13672 qemu-kvm: Qemu: vga: OOB read access during display update [rhel-7.5]) +- Resolves: bz#1494181 + (Backport vGPU support to qemu-kvm) +- Resolves: bz#1501510 + (Add Skylake-Server CPU model (qemu-kvm)) + +* Fri Oct 06 2017 Miroslav Rezanina - 1.5.3-145.el7 +- kvm-qemu-char-add-Czech-characters-to-VNC-keysyms.patch [bz#1476641] +- kvm-qemu-char-add-missing-characters-used-in-keymaps.patch [bz#1476641] +- kvm-qemu-char-add-cyrillic-characters-numerosign-to-VNC-.patch [bz#1476641] +- kvm-block-ssh-Use-QemuOpts-for-runtime-options.patch [bz#1461672] +- Resolves: bz#1461672 + (qemu-img core dumped when create external snapshot through ssh protocol without specifying image size) +- Resolves: bz#1476641 + (ui/vnc_keysym.h is very out of date and does not correctly support many Eastern European keyboards) + +* Mon Oct 02 2017 Miroslav Rezanina - 1.5.3-144.el7 +- kvm-qemu-nbd-Ignore-SIGPIPE.patch [bz#1466463] +- Resolves: bz#1466463 + (CVE-2017-10664 qemu-kvm: Qemu: qemu-nbd: server breaks with SIGPIPE upon client abort [rhel-7.5]) + +* Thu Sep 28 2017 Wainer dos Santos Moschetta - 1.5.3-143.el7 +- kvm-block-Limit-multiwrite-merge-downstream-only.patch [bz#1492559] +- Resolves: bz#1492559 + (virtio-blk mutiwrite merge causes too big IO) + +* Wed Sep 20 2017 Miroslav Rezanina - 1.5.3-142.el7 +- kvm-vnc-allow-to-connect-with-add_client-when-vnc-none.patch [bz#1435352] +- kvm-virtio-net-dynamic-network-offloads-configuration.patch [bz#1480428] +- kvm-Workaround-rhel6-ctrl_guest_offloads-machine-type-mi.patch [bz#1480428] +- kvm-target-i386-Add-PKU-and-and-OSPKE-support.patch [bz#1387648] +- Resolves: bz#1387648 + ([Intel 7.5 FEAT] Memory Protection Keys for qemu-kvm) +- Resolves: bz#1435352 + (qemu started with "-vnc none,..." doesn't support any VNC authentication) +- Resolves: bz#1480428 + (KVM: windows guest migration from EL6 to EL7 fails.) + +* Tue Jun 13 2017 Miroslav Rezanina - 1.5.3-141.el7 +- kvm-Fix-memory-slot-page-alignment-logic-bug-1455745.patch [bz#1455745] +- kvm-Do-not-hang-on-full-PTY.patch [bz#1452067] +- kvm-serial-fixing-vmstate-for-save-restore.patch [bz#1452067] +- kvm-serial-reinstate-watch-after-migration.patch [bz#1452067] +- kvm-nbd-Fully-initialize-client-in-case-of-failed-negoti.patch [bz#1451614] +- kvm-nbd-Fix-regression-on-resiliency-to-port-scan.patch [bz#1451614] +- Resolves: bz#1451614 + (CVE-2017-9524 qemu-kvm: segment fault when private user nmap qemu-nbd server [rhel-7.4]) +- Resolves: bz#1452067 + (migration can confuse serial port user) +- Resolves: bz#1455745 + (Backport fix for broken logic that's supposed to ensure memory slots are page aligned) + +* Tue Jun 06 2017 Miroslav Rezanina - 1.5.3-140.el7 +- kvm-spice-fix-spice_chr_add_watch-pre-condition.patch [bz#1456983] +- Resolves: bz#1456983 + (Character device regression due to missing patch) + +* Wed May 24 2017 Miroslav Rezanina - 1.5.3-139.el7 +- kvm-char-change-qemu_chr_fe_add_watch-to-return-unsigned.patch [bz#1451470] +- Resolves: bz#1451470 + (RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop) + +* Tue May 23 2017 Miroslav Rezanina - 1.5.3-138.el7 +- kvm-char-serial-cosmetic-fixes.patch [bz#1451470] +- kvm-char-serial-Use-generic-Fifo8.patch [bz#1451470] +- kvm-char-serial-serial_ioport_write-Factor-out-common-co.patch [bz#1451470] +- kvm-char-serial-fix-copy-paste-error-fifo8_is_full-vs-em.patch [bz#1451470] +- kvm-char-serial-Fix-emptyness-check.patch [bz#1451470] +- kvm-char-serial-Fix-emptyness-handling.patch [bz#1451470] +- kvm-serial-poll-the-serial-console-with-G_IO_HUP.patch [bz#1451470] +- kvm-serial-change-retry-logic-to-avoid-concurrency.patch [bz#1451470] +- kvm-qemu-char-ignore-flow-control-if-a-PTY-s-slave-is-no.patch [bz#1451470] +- kvm-serial-check-if-backed-by-a-physical-serial-port-at-.patch [bz#1451470] +- kvm-serial-reset-thri_pending-on-IER-writes-with-THRI-0.patch [bz#1451470] +- kvm-serial-clean-up-THRE-TEMT-handling.patch [bz#1451470] +- kvm-serial-update-LSR-on-enabling-disabling-FIFOs.patch [bz#1451470] +- kvm-serial-only-resample-THR-interrupt-on-rising-edge-of.patch [bz#1451470] +- kvm-serial-make-tsr_retry-unsigned.patch [bz#1451470] +- kvm-serial-simplify-tsr_retry-reset.patch [bz#1451470] +- kvm-serial-separate-serial_xmit-and-serial_watch_cb.patch [bz#1451470] +- kvm-serial-remove-watch-on-reset.patch [bz#1451470] +- Resolves: bz#1451470 + (RHEL 7.2 based VM (Virtual Machine) hung for several hours apparently waiting for lock held by main_loop) + +* Fri Apr 28 2017 Miroslav Rezanina - 1.5.3-137.el7 +- kvm-ide-fix-halted-IO-segfault-at-reset.patch [bz#1299875] +- Resolves: bz#1299875 + (system_reset should clear pending request for error (IDE)) + +* Tue Apr 18 2017 Miroslav Rezanina - 1.5.3-136.el7 +- kvm-target-i386-get-set-migrate-XSAVES-state.patch [bz#1327593] +- kvm-Removing-texi2html-from-build-requirements.patch [bz#1440987] +- kvm-Disable-build-of-32bit-packages.patch [bz#1441778] +- kvm-Add-sample-images-to-srpm.patch [bz#1436280] +- Resolves: bz#1327593 + ([Intel 7.4 FEAT] KVM Enable the XSAVEC, XSAVES and XRSTORS instructions) +- Resolves: bz#1436280 + (sample images for qemu-iotests are missing in the SRPM) +- Resolves: bz#1440987 + (Remove texi2html build dependancy from RPM) +- Resolves: bz#1441778 + (Stop building qemu-img for 32bit architectures.) + +* Thu Mar 30 2017 Miroslav Rezanina - 1.5.3-135.el7 +- kvm-fix-cirrus_vga-fix-OOB-read-case-qemu-Segmentation-f.patch [bz#1430060] +- kvm-cirrus-vnc-zap-bitblit-support-from-console-code.patch [bz#1430060] +- kvm-cirrus-add-option-to-disable-blitter.patch [bz#1430060] +- kvm-cirrus-fix-cirrus_invalidate_region.patch [bz#1430060] +- kvm-cirrus-stop-passing-around-dst-pointers-in-the-blitt.patch [bz#1430060] +- kvm-cirrus-stop-passing-around-src-pointers-in-the-blitt.patch [bz#1430060] +- kvm-cirrus-fix-off-by-one-in-cirrus_bitblt_rop_bkwd_tran.patch [bz#1430060] +- Resolves: bz#1430060 + (CVE-2016-9603 qemu-kvm: Qemu: cirrus: heap buffer overflow via vnc connection [rhel-7.4]) + +* Tue Mar 21 2017 Miroslav Rezanina - 1.5.3-134.el7 +- kvm-ui-vnc-introduce-VNC_DIRTY_PIXELS_PER_BIT-macro.patch [bz#1377977] +- kvm-ui-vnc-derive-cmp_bytes-from-VNC_DIRTY_PIXELS_PER_BI.patch [bz#1377977] +- kvm-ui-vnc-optimize-dirty-bitmap-tracking.patch [bz#1377977] +- kvm-ui-vnc-optimize-setting-in-vnc_dpy_update.patch [bz#1377977] +- kvm-ui-vnc-fix-vmware-VGA-incompatiblities.patch [bz#1377977] +- kvm-ui-vnc-fix-potential-memory-corruption-issues.patch [bz#1377977] +- kvm-vnc-fix-memory-corruption-CVE-2015-5225.patch [bz#1377977] +- kvm-vnc-fix-overflow-in-vnc_update_stats.patch [bz#1377977] +- kvm-i386-kvmvapic-initialise-imm32-variable.patch [bz#1335751] +- kvm-qemu-iotests-Filter-out-actual-image-size-in-067.patch [bz#1427176] +- vm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_ref2.patch [bz#1427176] +- kvm-qemu-iotests-Fix-core-dump-suppression-in-test-039.patch [bz#1427176] +- kvm-qemu-io-Add-sigraise-command.patch [bz#1427176] +- kvm-iotests-Filter-for-Killed-in-qemu-io-output.patch [bz#1427176] +- kvm-iotests-Fix-test-039.patch [bz#1427176] +- kvm-blkdebug-Add-bdrv_truncate.patch [bz#1427176] +- kvm-vhdx-Fix-zero-fill-iov-length.patch [bz#1427176] +- kvm-qemu-iotests-Disable-030-040-041.patch [bz#1427176] +- kvm-x86-add-AVX512_VPOPCNTDQ-features.patch [bz#1415830] +- kvm-usb-ccid-check-ccid-apdu-length.patch [bz#1419818] +- kvm-usb-ccid-better-bulk_out-error-handling.patch [bz#1419818] +- kvm-usb-ccid-move-header-size-check.patch [bz#1419818] +- kvm-usb-ccid-add-check-message-size-checks.patch [bz#1419818] +- kvm-spec-Update-rdma-build-dependency.patch [bz#1433920] +- Resolves: bz#1335751 + (CVE-2016-4020 qemu-kvm: Qemu: i386: leakage of stack memory to guest in kvmvapic.c [rhel-7.4]) +- Resolves: bz#1377977 + (qemu-kvm coredump in vnc_raw_send_framebuffer_update [rhel-7.4]) +- Resolves: bz#1415830 + ([Intel 7.4 FEAT] Enable vpopcntdq for KNM - qemu/kvm) +- Resolves: bz#1419818 + (CVE-2017-5898 qemu-kvm: Qemu: usb: integer overflow in emulated_apdu_from_guest [rhel-7.4]) +- Resolves: bz#1427176 + (test cases of qemu-iotests failed) +- Resolves: bz#1433920 + (Switch from librdmacm-devel to rdma-core-devel) + +* Thu Mar 09 2017 Miroslav Rezanina - 1.5.3-133.el7 +- kvm-target-i386-add-Ivy-Bridge-CPU-model.patch [bz#1368375] +- kvm-x86-add-AVX512_4VNNIW-and-AVX512_4FMAPS-features.patch [bz#1382122] +- kvm-target-i386-kvm_cpu_fill_host-Kill-unused-code.patch [bz#1382122] +- kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-level.patch [bz#1382122] +- kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-CPU-v.patch [bz#1382122] +- kvm-target-i386-kvm_cpu_fill_host-No-need-to-check-xleve.patch [bz#1382122] +- kvm-target-i386-kvm_cpu_fill_host-Set-all-feature-words-.patch [bz#1382122] +- kvm-target-i386-kvm_cpu_fill_host-Fill-feature-words-in-.patch [bz#1382122] +- kvm-target-i386-kvm_check_features_against_host-Kill-fea.patch [bz#1382122] +- kvm-target-i386-Make-TCG-feature-filtering-more-readable.patch [bz#1382122] +- kvm-target-i386-Filter-FEAT_7_0_EBX-TCG-features-too.patch [bz#1382122] +- kvm-target-i386-Filter-KVM-and-0xC0000001-features-on-TC.patch [bz#1382122] +- kvm-target-i386-Define-TCG_-_FEATURES-earlier-in-cpu.c.patch [bz#1382122] +- kvm-target-i386-Loop-based-copying-and-setting-unsetting.patch [bz#1382122] +- kvm-target-i386-Loop-based-feature-word-filtering-in-TCG.patch [bz#1382122] +- kvm-spice-remove-spice-experimental.h-include.patch [bz#1430606] +- kvm-spice-replace-use-of-deprecated-API.patch [bz#1430606] +- Resolves: bz#1368375 + ([Intel 7.4 Bug] qemu-kvm does not support “-cpu IvyBridge”) +- Resolves: bz#1382122 + ([Intel 7.4 FEAT] KVM Enable the avx512_4vnniw, avx512_4fmaps instructions in qemu) +- Resolves: bz#1430606 + (Can't build qemu-kvm with newer spice packages) + +* Tue Feb 21 2017 Miroslav Rezanina - 1.5.3-132.el7 +- kvm-cirrus-fix-patterncopy-checks.patch [bz#1420492] +- kvm-Revert-cirrus-allow-zero-source-pitch-in-pattern-fil.patch [bz#1420492] +- kvm-cirrus-add-blit_is_unsafe-call-to-cirrus_bitblt_cput.patch [bz#1420492] +- Resolves: bz#1420492 + (EMBARGOED CVE-2017-2620 qemu-kvm: Qemu: display: cirrus: potential arbitrary code execution via cirrus_bitblt_cputovideo [rhel-7.4]) + +* Fri Feb 10 2017 Miroslav Rezanina - 1.5.3-131.el7 +- kvm-memory-Allow-access-only-upto-the-maximum-alignment-.patch [bz#1342768] +- kvm-virtio-blk-Release-s-rq-queue-at-system_reset.patch [bz#1361488] +- kvm-cirrus_vga-fix-off-by-one-in-blit_region_is_unsafe.patch [bz#1418233] +- kvm-display-cirrus-check-vga-bits-per-pixel-bpp-value.patch [bz#1418233] +- kvm-display-cirrus-ignore-source-pitch-value-as-needed-i.patch [bz#1418233] +- kvm-cirrus-handle-negative-pitch-in-cirrus_invalidate_re.patch [bz#1418233] +- kvm-cirrus-allow-zero-source-pitch-in-pattern-fill-rops.patch [bz#1418233] +- kvm-cirrus-fix-blit-address-mask-handling.patch [bz#1418233] +- kvm-cirrus-fix-oob-access-issue-CVE-2017-2615.patch [bz#1418233] +- kvm-HMP-Fix-user-manual-typo-of-__com.redhat_qxl_screend.patch [bz#1419898] +- kvm-HMP-Fix-documentation-of-__com.redhat.drive_add.patch [bz#1419898] +- Resolves: bz#1342768 + ([Intel 7.4 Bug] qemu-kvm crashes with Linux kernel 4.6.0 or above) +- Resolves: bz#1361488 + (system_reset should clear pending request for error (virtio-blk)) +- Resolves: bz#1418233 + (CVE-2017-2615 qemu-kvm: Qemu: display: cirrus: oob access while doing bitblt copy backward mode [rhel-7.4]) +- Resolves: bz#1419898 + (Documentation inaccurate for __com.redhat_qxl_screendump and __com.redhat_drive_add) + +* Wed Feb 01 2017 Miroslav Rezanina - 1.5.3-130.el7 +- kvm-gluster-correctly-propagate-errors.patch [bz#1151859] +- kvm-gluster-Correctly-propagate-errors-when-volume-isn-t.patch [bz#1151859] +- kvm-block-gluster-add-support-for-selecting-debug-loggin.patch [bz#1151859] +- Resolves: bz#1151859 + ([RFE] Allow the libgfapi logging level to be controlled.) + +* Wed Jan 18 2017 Miroslav Rezanina - 1.5.3-129.el7 +- kvm-Update-qemu-kvm-package-Summary-and-Description.patch [bz#1378541] +- kvm-vl-Don-t-silently-change-topology-when-all-smp-optio.patch [bz#1375507] +- kvm-net-check-packet-payload-length.patch [bz#1398218] +- kvm-qxl-Only-emit-QXL_INTERRUPT_CLIENT_MONITORS_CONFIG-o.patch [bz#1342489] +- Resolves: bz#1342489 + (Flickering Fedora 24 Login Screen on RHEL 7) +- Resolves: bz#1375507 + ("threads" option is overwritten if both "sockets" and "cores" is set on -smp) +- Resolves: bz#1378541 + (QEMU: update package summary and description) +- Resolves: bz#1398218 + (CVE-2016-2857 qemu-kvm: Qemu: net: out of bounds read in net_checksum_calculate() [rhel-7.4]) + +* Thu Nov 24 2016 Miroslav Rezanina - 1.5.3-128.el7 +- kvm-virtio-introduce-virtqueue_unmap_sg.patch [bz#1377968] +- kvm-virtio-introduce-virtqueue_discard.patch [bz#1377968] +- kvm-virtio-decrement-vq-inuse-in-virtqueue_discard.patch [bz#1377968] +- kvm-balloon-fix-segfault-and-harden-the-stats-queue.patch [bz#1377968] +- kvm-virtio-balloon-discard-virtqueue-element-on-reset.patch [bz#1377968] +- kvm-virtio-zero-vq-inuse-in-virtio_reset.patch [bz#1377968] +- kvm-virtio-add-virtqueue_rewind.patch [bz#1377968] +- kvm-virtio-balloon-fix-stats-vq-migration.patch [bz#1377968] +- Resolves: bz#1377968 + ([RHEL7.3] KVM guest shuts itself down after 128th reboot) + +* Wed Nov 16 2016 Danilo de Paula - 1.5.3-127.el7 +- kvm-hw-i386-regenerate-checked-in-AML-payload-RHEL-only.patch [bz#1377087] +- kvm-ide-fix-halted-IO-segfault-at-reset.patch [bz#1377087] +- Resolves: bz#1377087 + (shutdown rhel 5.11 guest failed and stop at "system halted") + +* Tue Sep 20 2016 Miroslav Rezanina - 1.5.3-126.el7 +- kvm-virtio-recalculate-vq-inuse-after-migration.patch [bz#1376542] +- Resolves: bz#1376542 + (RHSA-2016-1756 breaks migration of instances) + +* Thu Sep 15 2016 Miroslav Rezanina - 1.5.3-125.el7 +- kvm-nbd-server-Set-O_NONBLOCK-on-client-fd.patch [bz#1285453] +- Resolves: bz#1285453 + (An NBD client can cause QEMU main loop to block when connecting to built-in NBD server) + +* Tue Sep 13 2016 Miroslav Rezanina - 1.5.3-124.el7 +- kvm-target-i386-Add-support-for-FEAT_7_0_ECX.patch [bz#1372459] +- kvm-target-i386-Add-more-Intel-AVX-512-instructions-supp.patch [bz#1372459] +- Resolves: bz#1372459 + ([Intel 7.3 Bug] SKL-SP Guest cpu doesn't support avx512 instruction sets(avx512bw, avx512dq and avx512vl) (qemu-kvm)) + +* Fri Sep 09 2016 Miroslav Rezanina - 1.5.3-123.el7 +- kvm-Fix-backport-of-target-i386-add-feature-flags-for-CP.patch [bz#1371619] +- kvm-Add-skip_dump-flag-to-ignore-memory-region-during-du.patch [bz#1373088] +- Resolves: bz#1371619 + (Flags xsaveopt xsavec xgetbv1 are missing on qemu-kvm) +- Resolves: bz#1373088 + ([FJ7.3 Bug]: virsh dump with both --memory-only and --format option fails) + +* Fri Aug 26 2016 Miroslav Rezanina - 1.5.3-122.el7 +- kvm-virtio-validate-the-existence-of-handle_output-befor.patch [bz#1367040] +- Resolves: bz#1367040 + (QEMU crash when guest notifies non-existent virtqueue) + +* Tue Aug 02 2016 Miroslav Rezanina - 1.5.3-121.el7 +- kvm-json-parser-drop-superfluous-assignment-for-token-va.patch [bz#1276036] +- kvm-qjson-Apply-nesting-limit-more-sanely.patch [bz#1276036] +- kvm-qjson-Don-t-crash-when-input-exceeds-nesting-limit.patch [bz#1276036] +- kvm-check-qjson-Add-test-for-JSON-nesting-depth-limit.patch [bz#1276036] +- kvm-qjson-Spell-out-some-silent-assumptions.patch [bz#1276036] +- kvm-qjson-Give-each-of-the-six-structural-chars-its-own-.patch [bz#1276036] +- kvm-qjson-Inline-token_is_keyword-and-simplify.patch [bz#1276036] +- kvm-qjson-Inline-token_is_escape-and-simplify.patch [bz#1276036] +- kvm-qjson-replace-QString-in-JSONLexer-with-GString.patch [bz#1276036] +- kvm-qjson-Convert-to-parser-to-recursive-descent.patch [bz#1276036] +- kvm-qjson-store-tokens-in-a-GQueue.patch [bz#1276036] +- kvm-qjson-surprise-allocating-6-QObjects-per-token-is-ex.patch [bz#1276036] +- kvm-qjson-Limit-number-of-tokens-in-addition-to-total-si.patch [bz#1276036] +- kvm-json-streamer-Don-t-leak-tokens-on-incomplete-parse.patch [bz#1276036] +- kvm-json-streamer-fix-double-free-on-exiting-during-a-pa.patch [bz#1276036] +- kvm-trace-remove-malloc-tracing.patch [bz#1360137] +- Resolves: bz#1276036 + (Crash on QMP input exceeding limits) +- Resolves: bz#1360137 + (GLib-WARNING **: gmem.c:482: custom memory allocation vtable not supported) + +* Fri Jul 29 2016 Miroslav Rezanina - 1.5.3-120.el7 +- kvm-Add-install-dependency-to-newer-libusbx-version.patch [bz#1351106] +- kvm-virtio-error-out-if-guest-exceeds-virtqueue-size.patch [bz#1359729] +- Resolves: bz#1351106 + (symbol lookup error: /usr/libexec/qemu-kvm: undefined symbol: libusb_get_port_numbers) +- Resolves: bz#1359729 + (CVE-2016-5403 qemu-kvm: Qemu: virtio: unbounded memory allocation on host via guest leading to DoS [rhel-7.3]) + +* Tue Jul 26 2016 Miroslav Rezanina - 1.5.3-119.el7 +- kvm-qxl-factor-out-qxl_get_check_slot_offset.patch [bz#1355730] +- kvm-qxl-store-memory-region-and-offset-instead-of-pointe.patch [bz#1355730] +- kvm-qxl-fix-surface-migration.patch [bz#1355730] +- kvm-qxl-fix-qxl_set_dirty-call-in-qxl_dirty_one_surface.patch [bz#1355730] +- Resolves: bz#1355730 + (spice-gtk shows outdated screen state after migration [qemu-kvm]) + +* Tue Jul 19 2016 Miroslav Rezanina - 1.5.3-118.el7 +- kvm-util-introduce-MIN_NON_ZERO.patch [bz#1318199] +- kvm-BlockLimits-introduce-max_transfer_length.patch [bz#1318199] +- kvm-block-backend-expose-bs-bl.max_transfer_length.patch [bz#1318199] +- kvm-scsi-generic-Merge-block-max-xfer-len-in-INQUIRY-res.patch [bz#1318199] +- kvm-raw-posix-Fetch-max-sectors-for-host-block-device.patch [bz#1318199] +- kvm-scsi-Advertise-limits-by-blocksize-not-512.patch [bz#1318199] +- kvm-util-Fix-MIN_NON_ZERO.patch [bz#1318199] +- Resolves: bz#1318199 + (expose host BLKSECTGET limit in scsi-block (qemu-kvm)) + +* Tue Jul 12 2016 Miroslav Rezanina - 1.5.3-117.el7 +- kvm-target-i386-add-feature-flags-for-CPUID-EAX-0xd-ECX-.patch [bz#1327599] +- kvm-target-i386-add-Skylake-Client-cpu-model.patch [bz#1327599] +- Resolves: bz#1327599 + (Add Skylake CPU model) + +* Tue Jun 28 2016 Miroslav Rezanina - 1.5.3-116.el7 +- kvm-block-iscsi-avoid-potential-overflow-of-acb-task-cdb.patch [bz#1340929] +- Resolves: bz#1340929 + (CVE-2016-5126 qemu-kvm: Qemu: block: iscsi: buffer overflow in iscsi_aio_ioctl [rhel-7.3]) + +* Mon Jun 20 2016 Miroslav Rezanina - 1.5.3-115.el7 +- kvm-spice-do-not-require-TCP-ports.patch [bz#1336491] +- kvm-vga-add-sr_vbe-register-set.patch [bz#1346982] +- Resolves: bz#1336491 + (Ship FD connection patches qemu-kvm part) +- Resolves: bz#1346982 + (Regression from CVE-2016-3712: windows installer fails to start) + +* Wed Jun 15 2016 Miroslav Rezanina - 1.5.3-114.el7 +- kvm-hw-input-hid.c-Fix-capslock-hid-code.patch [bz#1256741] +- kvm-target-i386-fix-pcmpxstrx-equal-ordered-strstr-mode.patch [bz#1340971] +- kvm-spec-Update-rules-before-triggering-for-kvm-device.patch [bz#1333159] +- Resolves: bz#1256741 + ("CapsLock" will work as "\" when boot a guest with usb-kbd) +- Resolves: bz#1333159 + (qemu-kvm doesn't reload udev rules before triggering for kvm device) +- Resolves: bz#1340971 + (qemu: accel=tcg does not implement SSE 4 properly) + +* Sat May 28 2016 Jeff E. Nelson - 1.5.3-113.el7 +- kvm-qxl-allow-to-specify-head-limit-to-qxl-driver.patch [bz#1283198] +- kvm-qxl-Fix-new-function-name-for-spice-server-library.patch [bz#1283198] +- kvm-block-raw-posix-Open-file-descriptor-O_RDWR-to-work-.patch [bz#1268345] +- Resolves: bz#1268345 + (posix_fallocate emulation on NFS fails with Bad file descriptor if fd is opened O_WRONLY) +- Resolves: bz#1283198 + (RFE: backport max monitor limitation from Qemu upstream) + +* Mon May 16 2016 Miroslav Rezanina - 1.5.3-112.el7 +- kvm-virtio-scsi-Prevent-assertion-on-missed-events.patch [bz#1312289] +- kvm-seccomp-adding-sysinfo-system-call-to-whitelist.patch [bz#1177318] +- kvm-acpi-strip-compiler-info-in-built-in-DSDT.patch [bz#1330969] +- kvm-acpi-fix-endian-ness-for-table-ids.patch [bz#1330969] +- kvm-acpi-support-specified-oem-table-id-for-build_header.patch [bz#1330969] +- kvm-acpi-take-oem_id-in-build_header-optionally.patch [bz#1330969] +- kvm-acpi-expose-oem_id-and-oem_table_id-in-build_rsdt.patch [bz#1330969] +- kvm-acpi-add-function-to-extract-oem_id-and-oem_table_id.patch [bz#1330969] +- kvm-pc-set-the-OEM-fields-in-the-RSDT-and-the-FADT-from-.patch [bz#1330969] +- kvm-block-jobs-qemu-kvm-rhel-differentiation.patch [bz#1156635] +- Resolves: bz#1156635 + (Libvirt is confused that qemu-kvm exposes 'block-job-cancel' but not 'block-stream') +- Resolves: bz#1177318 + (Guest using rbd based image as disk failed to start when sandbox was enabled) +- Resolves: bz#1312289 + ("qemu-kvm: /builddir/build/BUILD/qemu-1.5.3/hw/scsi/virtio-scsi.c:533: virtio_scsi_push_event: Assertion `event == 0' failed" after hotplug 20 virtio-scsi disks then hotunplug them) +- Resolves: bz#1330969 + (match the OEM ID and OEM Table ID fields of the FADT and the RSDT to those of the SLIC) + +* Thu May 05 2016 Miroslav Rezanina - 1.5.3-111.el7 +- kvm-vmdk-Leave-bdi-intact-if-ENOTSUP-in-vmdk_get_info.patch [bz#1299250] +- kvm-vmdk-Use-g_random_int-to-generate-CID.patch [bz#1299250] +- kvm-vmdk-Fix-comment-to-match-code-of-extent-lines.patch [bz#1299250] +- kvm-vmdk-Clean-up-descriptor-file-reading.patch [bz#1299250] +- kvm-vmdk-Check-descriptor-file-length-when-reading-it.patch [bz#1299250] +- kvm-vmdk-Remove-unnecessary-initialization.patch [bz#1299250] +- kvm-vmdk-Set-errp-on-failures-in-vmdk_open_vmdk4.patch [bz#1299250] +- kvm-block-vmdk-make-ret-variable-usage-clear.patch [bz#1299250] +- kvm-block-vmdk-move-string-allocations-from-stack-to-the.patch [bz#1299250] +- kvm-block-vmdk-fixed-sizeof-error.patch [bz#1299250] +- kvm-vmdk-Widen-before-shifting-32-bit-header-field.patch [bz#1299250] +- kvm-vmdk-Fix-next_cluster_sector-for-compressed-write.patch [bz#1299250] +- kvm-vmdk-Fix-index_in_cluster-calculation-in-vmdk_co_get.patch [bz#1299250] +- kvm-vmdk-Use-vmdk_find_index_in_cluster-everywhere.patch [bz#1299250] +- kvm-vmdk-Fix-next_cluster_sector-for-compressed-write2.patch [bz#1299250] +- kvm-vmdk-Create-streamOptimized-as-version-3.patch [bz#1299116] +- kvm-vmdk-Fix-converting-to-streamOptimized.patch [bz#1299116] +- kvm-vmdk-Fix-calculation-of-block-status-s-offset.patch [bz#1299116] +- Resolves: bz#1299116 + (qemu-img created VMDK images lead to "Not a supported disk format (sparse VMDK version too old)") +- Resolves: bz#1299250 + (qemu-img created VMDK images are unbootable) + +* Wed May 04 2016 Miroslav Rezanina - 1.5.3-110.el7 +- kvm-qemu-io-Remove-unused-args_command.patch [bz#1272523] +- kvm-cutils-Support-P-and-E-suffixes-in-strtosz.patch [bz#1272523] +- kvm-qemu-io-Make-cvtnum-a-wrapper-around-strtosz_suffix.patch [bz#1272523] +- kvm-qemu-io-Handle-cvtnum-errors-in-alloc.patch [bz#1272523] +- kvm-qemu-io-Don-t-use-global-bs-in-command-implementatio.patch [bz#1272523] +- kvm-qemu-io-Split-off-commands-to-qemu-io-cmds.c.patch [bz#1272523] +- kvm-qemu-io-Factor-out-qemuio_command.patch [bz#1272523] +- kvm-qemu-io-Move-help-function.patch [bz#1272523] +- kvm-qemu-io-Move-quit-function.patch [bz#1272523] +- kvm-qemu-io-Move-qemu_strsep-to-cutils.c.patch [bz#1272523] +- kvm-qemu-io-Move-functions-for-registering-and-running-c.patch [bz#1272523] +- kvm-qemu-io-Move-command_loop-and-friends.patch [bz#1272523] +- kvm-qemu-io-Move-remaining-helpers-from-cmd.c.patch [bz#1272523] +- kvm-qemu-io-Interface-cleanup.patch [bz#1272523] +- kvm-qemu-io-Use-the-qemu-version-for-V.patch [bz#1272523] +- kvm-Make-qemu-io-commands-available-in-HMP.patch [bz#1272523] +- kvm-blkdebug-Add-BLKDBG_FLUSH_TO_OS-DISK-events.patch [bz#1272523] +- kvm-qemu-io-fix-cvtnum-lval-types.patch [bz#1272523] +- kvm-qemu-io-Check-for-trailing-chars.patch [bz#1272523] +- kvm-qemu-io-Correct-error-messages.patch [bz#1272523] +- kvm-ide-test-fix-failure-for-test_flush.patch [bz#1272523] +- kvm-vga-Remove-some-should-be-done-in-BIOS-comments.patch [bz#1331413] +- kvm-vga-fix-banked-access-bounds-checking-CVE-2016-xxxx.patch [bz#1331413] +- kvm-vga-add-vbe_enabled-helper.patch [bz#1331413] +- kvm-vga-factor-out-vga-register-setup.patch [bz#1331413] +- kvm-vga-update-vga-register-setup-on-vbe-changes.patch [bz#1331413] +- kvm-vga-make-sure-vga-register-setup-for-vbe-stays-intac.patch [bz#1331413] +- Resolves: bz#1272523 + (qemu-kvm build failure race condition in tests/ide-test) +- Resolves: bz#1331413 + (EMBARGOED CVE-2016-3710 qemu-kvm: qemu: incorrect banked access bounds checking in vga module [rhel-7.3]) + +* Mon Mar 14 2016 Miroslav Rezanina - 1.5.3-109.el7 +- kvm-e1000-eliminate-infinite-loops-on-out-of-bounds-tran.patch [bz#1296044] +- kvm-nbd-Always-call-close_fn-in-nbd_client_new.patch [bz#1285453] +- kvm-nbd-server-Coroutine-based-negotiation.patch [bz#1285453] +- kvm-nbd-client_close-on-error-in-nbd_co_client_start.patch [bz#1285453] +- kvm-Remove-libcacard-build.patch [bz#1314153] +- Resolves: bz#1285453 + (An NBD client can cause QEMU main loop to block when connecting to built-in NBD server) +- Resolves: bz#1296044 + (qemu-kvm: insufficient loop termination conditions in start_xmit() and e1000_receive() [rhel-7.3]) +- Resolves: bz#1314153 + (Disable building of libcacard) + +* Mon Feb 08 2016 Miroslav Rezanina - 1.5.3-108.el7 +- kvm-net-Make-qmp_query_rx_filter-with-name-argument-more.patch [bz#1269738] +- kvm-fw_cfg-add-check-to-validate-current-entry-value-CVE.patch [bz#1298048] +- Resolves: bz#1269738 + (Vlan table display repeat four times in qmp when queues=4) +- Resolves: bz#1298048 + (CVE-2016-1714 qemu-kvm: Qemu: nvram: OOB r/w access in processing firmware configurations [rhel-7.3]) + +* Wed Jan 20 2016 Miroslav Rezanina - 1.5.3-107.el7 +- kvm-raw-posix-Fix-.bdrv_co_get_block_status-for-unaligne.patch [bz#1283116] +- Resolves: bz#1283116 + ([abrt] qemu-img: get_block_status(): qemu-img killed by SIGABRT) + +* Wed Jan 13 2016 Miroslav Rezanina - 1.5.3-106.el7 +- kvm-ehci-clear-suspend-bit-on-detach.patch [bz#1268879] +- kvm-rbd-make-qemu-s-cache-setting-override-any-ceph-sett.patch [bz#1277248] +- kvm-rbd-fix-ceph-settings-precedence.patch [bz#1277248] +- kvm-target-i386-get-put-MSR_TSC_AUX-across-reset-and-mig.patch [bz#1265427] +- kvm-rtl8139-Fix-receive-buffer-overflow-check.patch [bz#1252757] +- kvm-rtl8139-Do-not-consume-the-packet-during-overflow-in.patch [bz#1252757] +- Resolves: bz#1252757 + ([RHEL-7.2-qmu-kvm] Package is 100% lost when ping from host to Win2012r2 guest with 64000 size) +- Resolves: bz#1265427 + (contents of MSR_TSC_AUX are not migrated) +- Resolves: bz#1268879 + (Camera stops work after remote-viewer re-connection [qemu-kvm]) +- Resolves: bz#1277248 + (ceph.conf properties override qemu's command-line properties) + +* Fri Oct 16 2015 Jeff E. Nelson - 1.5.3-105.el7 +- kvm-qtest-ide-test-disable-flush-test.patch [bz#1270341] +- Resolves: bz#1270341 + (qemu-kvm build failure race condition in tests/ide-test) + +* Wed Sep 23 2015 Miroslav Rezanina - 1.5.3-104.el7 +- kvm-qemu-iotests-Filter-qemu-io-output-in-025.patch [bz#1170974] +- Resolves: bz#1170974 + (test case 025 of qemu-iotests fail for raw with qemu-kvm-1.5.3-83.el7.x86_64) + +* Thu Sep 10 2015 Miroslav Rezanina - 1.5.3-103.el7 +- kvm-Drop-superfluous-conditionals-around-g_strdup.patch [bz#1218919] +- kvm-util-Drop-superfluous-conditionals-around-g_free.patch [bz#1218919] +- kvm-util-Fuse-g_malloc-memset-into-g_new0.patch [bz#1218919] +- kvm-util-uri-uri_new-can-t-fail-drop-dead-error-handling.patch [bz#1218919] +- kvm-util-uri-realloc2n-can-t-fail-drop-dead-error-handli.patch [bz#1218919] +- kvm-util-uri-URI-member-path-can-be-null-compare-more-ca.patch [bz#1218919] +- kvm-util-uri-Add-overflow-check-to-rfc3986_parse_port.patch [bz#1218919] +- Resolves: bz#1218919 + (Coverity-detected defect: buffer overrun at uri.c:2035) + +* Thu Sep 03 2015 Miroslav Rezanina - 1.5.3-102.el7 +- kvm-mc146818rtc-add-rtc-reset-reinjection-QMP-command.patch [bz#1191226] +- Resolves: bz#1191226 + (libvirt requires rtc-reset-reinjection command, backport it to RHEL7.1) + +* Fri Aug 14 2015 Miroslav Rezanina - 1.5.3-101.el7 +- kvm-serial-reset-state-at-startup.patch [bz#922014] +- kvm-ide-Check-validity-of-logical-block-size.patch [bz#1134670] +- Resolves: bz#1134670 + (fail to specify the physical_block_size/logical_block_size value not 512 for IDE disk) +- Resolves: bz#922014 + (RFE: support hotplugging chardev & serial ports (Windows guests)) + +* Mon Aug 10 2015 Miroslav Rezanina - 1.5.3-100.el7 +- kvm-block-update-test-070-for-vhdx.patch [bz#1171576] +- kvm-block-coverity-fix-check-return-value-for-fcntl-in-g.patch [bz#1219217] +- Resolves: bz#1171576 + (test case 064 and 070 of qemu-iotests fail for vhdx with qemu-kvm-1.5.3-83.el7) +- Resolves: bz#1219217 + (Coverity-detected defect: call to fcntl without checking return value) + +* Thu Aug 06 2015 Miroslav Rezanina - 1.5.3-99.el7 +- kvm-usb-ccid-add-missing-wakeup-calls.patch [bz#1243731] +- kvm-vpc-Handle-failure-for-potentially-large-allocations.patch [bz#1217349] +- kvm-block-vpc-prevent-overflow-if-max_table_entries-0x40.patch [bz#1217349] +- kvm-block-qemu-iotests-add-check-for-multiplication-over.patch [bz#1217349] +- kvm-virtio-scsi-use-virtqueue_map_sg-when-loading-reques.patch [bz#1249718] +- kvm-scsi-disk-fix-cmd.mode-field-typo.patch [bz#1249718] +- kvm-rtl8139-avoid-nested-ifs-in-IP-header-parsing-CVE-20.patch [bz#1248766] +- kvm-rtl8139-drop-tautologous-if-ip-.-statement-CVE-2015-.patch [bz#1248766] +- kvm-rtl8139-skip-offload-on-short-Ethernet-IP-header-CVE.patch [bz#1248766] +- kvm-rtl8139-check-IP-Header-Length-field-CVE-2015-5165.patch [bz#1248766] +- kvm-rtl8139-check-IP-Total-Length-field-CVE-2015-5165.patch [bz#1248766] +- kvm-rtl8139-skip-offload-on-short-TCP-header-CVE-2015-51.patch [bz#1248766] +- kvm-rtl8139-check-TCP-Data-Offset-field-CVE-2015-5165.patch [bz#1248766] +- Resolves: bz#1217349 + (qemu-img vpc driver segfault) +- Resolves: bz#1243731 + (smart card emulation doesn't work with USB3 (nec-xhci) controller) +- Resolves: bz#1248766 + (CVE-2015-5165 qemu-kvm: Qemu: rtl8139 uninitialized heap memory information leakage to guest [rhel-7.2]) +- Resolves: bz#1249718 + (Segfault occurred at Dst VM while completed migration upon ENOSPC) + +* Fri Jul 24 2015 Miroslav Rezanina - 1.5.3-98.el7 +- kvm-block-curl-Don-t-lose-original-error-when-a-connecti.patch [bz#1235812] +- kvm-vfio-pci-Add-pba_offset-PCI-quirk-for-Chelsio-T5-dev.patch [bz#1244347] +- kvm-block-Print-its-file-name-if-backing-file-opening-fa.patch [bz#1238639] +- kvm-block-Propagate-error-in-bdrv_img_create.patch [bz#1238639] +- kvm-iotests-Add-test-for-non-existing-backing-file.patch [bz#1238639] +- Resolves: bz#1235812 + (block/curl: Fix generic "Input/output error" on failure) +- Resolves: bz#1238639 + (qemu-img shows error message for backing file twice) +- Resolves: bz#1244347 + (Quirk for Chelsio T5 MSI-X PBA) + +* Fri Jul 17 2015 Miroslav Rezanina - 1.5.3-97.el7 +- kvm-ide-Check-array-bounds-before-writing-to-io_buffer-C.patch [bz#1243690] +- kvm-ide-atapi-Fix-START-STOP-UNIT-command-completion.patch [bz#1243690] +- kvm-ide-Clear-DRQ-after-handling-all-expected-accesses.patch [bz#1243690] +- Resolves: bz#1243690 + (EMBARGOED CVE-2015-5154 qemu-kvm: qemu: ide: atapi: heap overflow during I/O buffer memory access [rhel-7.2]) + +* Thu Jul 16 2015 Miroslav Rezanina - 1.5.3-96.el7 +- kvm-ahci.c-mask-unused-flags-when-reading-size-PRDT-DBC.patch [bz#1205100] +- kvm-ide-Correct-handling-of-malformed-short-PRDTs.patch [bz#1205100] +- Resolves: bz#1205100 + (qemu-kvm: Qemu: PRDT overflow from guest to host [rhel-7.2]) + +* Tue Jul 07 2015 Miroslav Rezanina - 1.5.3-95.el7 +- kvm-i8254-fix-out-of-bounds-memory-access-in-pit_ioport_.patch [bz#1229646] +- kvm-target-i386-fix-cpuid-leaf-0x0d.patch [bz#1233350] +- kvm-target-i386-Intel-MPX.patch [bz#1233350] +- kvm-always-update-the-MPX-model-specific-register.patch [bz#1233350] +- kvm-target-i386-bugfix-of-Intel-MPX.patch [bz#1233350] +- kvm-target-i386-fix-set-of-registers-zeroed-on-reset.patch [bz#1233350] +- kvm-target-i386-Add-mpx-CPU-feature-name.patch [bz#1233350] +- kvm-target-i386-Avoid-shifting-left-into-sign-bit.patch [bz#1233350] +- kvm-target-i386-add-Intel-AVX-512-support.patch [bz#1233350] +- kvm-configure-Add-support-for-tcmalloc.patch [bz#1213881] +- Resolves: bz#1213881 + (enable using tcmalloc for memory allocation in qemu-kvm) +- Resolves: bz#1229646 + (CVE-2015-3214 qemu-kvm: qemu: i8254: out-of-bounds memory access in pit_ioport_read function [rhel-7.2]) +- Resolves: bz#1233350 + ([Intel 7.2 FEAT] Expose MPX feature to guest - qemu-kvm) + +* Fri Jun 26 2015 Miroslav Rezanina - 1.5.3-94.el7 +- kvm-qcow2-Put-cache-reference-in-error-case.patch [bz#1129893] +- kvm-qcow2-Catch-bdrv_getlength-error.patch [bz#1129893] +- kvm-block-Introduce-qemu_try_blockalign.patch [bz#1129893] +- kvm-qcow2-Catch-host_offset-for-data-allocation.patch [bz#1129893] +- kvm-iotests-Add-test-for-image-header-overlap.patch [bz#1129893] +- kvm-block-Catch-bs-drv-in-bdrv_check.patch [bz#1129893] +- kvm-qapi-block-Add-fatal-to-BLOCK_IMAGE_CORRUPTED.patch [bz#1129893] +- kvm-qcow2-Add-qcow2_signal_corruption.patch [bz#1129893] +- kvm-qcow2-Use-qcow2_signal_corruption-for-overlaps.patch [bz#1129893] +- kvm-qcow2-Check-L1-L2-reftable-entries-for-alignment.patch [bz#1129893] +- kvm-iotests-Add-more-tests-for-qcow2-corruption.patch [bz#1129893] +- kvm-qcow2-fix-leak-of-Qcow2DiscardRegion-in-update_refco.patch [bz#1129893] +- kvm-qcow2-Do-not-overflow-when-writing-an-L1-sector.patch [bz#1129893] +- kvm-iotests-Add-test-for-qcow2-L1-table-update.patch [bz#1129893] +- kvm-block-Add-qemu_-try_-blockalign0.patch [bz#1129893] +- kvm-qcow2-Calculate-refcount-block-entry-count.patch [bz#1129893] +- kvm-qcow2-Fix-leaks-in-dirty-images.patch [bz#1129893] +- kvm-qcow2-Split-qcow2_check_refcounts.patch [bz#1129893] +- kvm-qcow2-Use-sizeof-refcount_table.patch [bz#1129893] +- kvm-qcow2-Pull-check_refblocks-up.patch [bz#1129893] +- kvm-qcow2-Use-int64_t-for-in-memory-reftable-size.patch [bz#1129893] +- kvm-qcow2-Split-fail-code-in-L1-and-L2-checks.patch [bz#1129893] +- kvm-qcow2-Let-inc_refcounts-return-errno.patch [bz#1129893] +- kvm-qcow2-Let-inc_refcounts-resize-the-reftable.patch [bz#1129893] +- kvm-qcow2-Reuse-refcount-table-in-calculate_refcounts.patch [bz#1129893] +- kvm-qcow2-Fix-refcount-blocks-beyond-image-end.patch [bz#1129893] +- kvm-qcow2-Do-not-perform-potentially-damaging-repairs.patch [bz#1129893] +- kvm-qcow2-Rebuild-refcount-structure-during-check.patch [bz#1129893] +- kvm-qcow2-Clean-up-after-refcount-rebuild.patch [bz#1129893] +- kvm-iotests-Fix-test-outputs.patch [bz#1129893] +- kvm-iotests-Add-test-for-potentially-damaging-repairs.patch [bz#1129893] +- kvm-qcow2-Drop-REFCOUNT_SHIFT.patch [bz#1129893] +- kvm-block-Respect-underlying-file-s-EOF.patch [bz#1129893] +- kvm-qcow2-Fix-header-extension-size-check.patch [bz#1129893] +- kvm-qcow2.py-Add-required-padding-for-header-extensions.patch [bz#1129893] +- kvm-block-Don-t-probe-for-unknown-backing-file-format.patch [bz#1129893] +- kvm-qcow2-Add-two-more-unalignment-checks.patch [bz#1129893] +- kvm-iotests-Add-tests-for-more-corruption-cases.patch [bz#1129893] +- kvm-qcow2-Respect-new_block-in-alloc_refcount_block.patch [bz#1129893] +- kvm-iotests-Add-tests-for-refcount-table-growth.patch [bz#1129893] +- kvm-qcow2-Fix-header-update-with-overridden-backing-file.patch [bz#1129893] +- kvm-qcow2-Flush-pending-discards-before-allocating-clust.patch [bz#1129893] +- Resolves: bz#1129893 + (Backport additional qcow2 corruption prevention and image repair patches) + +* Wed Jun 24 2015 Miroslav Rezanina - 1.5.3-93.el7 +- kvm-atomics-add-explicit-compiler-fence-in-__atomic-memo.patch [bz#1142857 bz#1142857 (aka bz#8*bz#10^bz#6/bz#7)] +- Resolves: bz#1142857 + ([abrt] qemu-kvm: bdrv_error_action(): qemu-kvm killed by SIGABRT) +- Resolves: bz#8*10^6/7) + (XFree86 apparently sets xhost to ill inital values) +- Resolves: bz#(aka + () + +* Tue Jun 16 2015 Miroslav Rezanina - 1.5.3-92.el7 +- kvm-seccomp-add-timerfd_create-and-timerfd_settime-to-th.patch [bz#1185737] +- kvm-qdict-Add-qdict_join.patch [bz#1226697] +- kvm-block-Allow-JSON-filenames.patch [bz#1226697] +- kvm-spice-display-fix-segfault-in-qemu_spice_create_upda.patch [bz#1230808] +- Resolves: bz#1185737 + (qemu-kvm hang when boot with usb-host and sandbox was enabled) +- Resolves: bz#1226697 + ([virt-v2v] Allow json: filenames in qemu-img) +- Resolves: bz#1230808 + ([abrt] qemu-system-x86: __memcmp_sse4_1(): qemu-system-x86_64 killed by SIGSEGV) + +* Mon Jun 15 2015 Miroslav Rezanina - 1.5.3-91.el7 +- kvm-vmdk-Fix-overflow-if-l1_size-is-0x20000000.patch [bz#1217351] +- kvm-block-ssh-Drop-superfluous-libssh2_session_last_errn.patch [bz#1226683] +- kvm-block-ssh-Propagate-errors-through-check_host_key.patch [bz#1226683] +- kvm-block-ssh-Propagate-errors-through-authenticate.patch [bz#1226683] +- kvm-block-ssh-Propagate-errors-through-connect_to_ssh.patch [bz#1226683] +- kvm-block-ssh-Propagate-errors-to-open-and-create-method.patch [bz#1226683] +- kvm-ssh-Don-t-crash-if-either-host-or-path-is-not-specif.patch [bz#1226683] +- kvm-curl-Replaced-old-error-handling-with-error-reportin.patch [bz#1226684] +- kvm-curl-Fix-long-line.patch [bz#1226684] +- kvm-curl-Remove-unnecessary-use-of-goto.patch [bz#1226684] +- kvm-curl-Fix-return-from-curl_read_cb-with-invalid-state.patch [bz#1226684] +- kvm-curl-Remove-erroneous-sleep-waiting-for-curl-complet.patch [bz#1226684] +- kvm-curl-Whitespace-only-changes.patch [bz#1226684] +- kvm-block-curl-Implement-the-libcurl-timer-callback-inte.patch [bz#1226684] +- kvm-curl-Remove-unnecessary-explicit-calls-to-internal-e.patch [bz#1226684] +- kvm-curl-Eliminate-unnecessary-use-of-curl_multi_socket_.patch [bz#1226684] +- kvm-curl-Ensure-all-informationals-are-checked-for-compl.patch [bz#1226684] +- kvm-curl-Fix-hang-reading-from-slow-connections.patch [bz#1226684] +- kvm-curl-Fix-build-when-curl_multi_socket_action-isn-t-a.patch [bz#1226684] +- kvm-curl-Remove-broken-parsing-of-options-from-url.patch [bz#1226684] +- kvm-curl-refuse-to-open-URL-from-HTTP-server-without-ran.patch [bz#1226684] +- kvm-curl-Add-sslverify-option.patch [bz#1226684] +- kvm-block-Drop-superfluous-conditionals-around-g_free.patch [bz#1226684] +- kvm-curl-Handle-failure-for-potentially-large-allocation.patch [bz#1226684] +- kvm-block.curl-adding-timeout-option.patch [bz#1226684] +- kvm-curl-Allow-a-cookie-or-cookies-to-be-sent-with-http-.patch [bz#1226684] +- kvm-curl-The-macro-that-you-have-to-uncomment-to-get-deb.patch [bz#1226684] +- kvm-block-curl-Improve-type-safety-of-s-timeout.patch [bz#1226684] +- kvm-Enable-ssh-driver-read-only.patch [bz#1226683] +- kvm-Enable-curl-driver-read-only.patch [bz#1226684] +- Resolves: bz#1217351 + (Overflow in malloc size calculation in VMDK driver) +- Resolves: bz#1226683 + ([virt-v2v] Backport upstream ssh driver to qemu-kvm) +- Resolves: bz#1226684 + ([virt-v2v] Enable curl driver + upstream features + fixes in qemu-kvm and enable https) + +* Thu Jun 04 2015 Miroslav Rezanina - 1.5.3-90.el7 +- kvm-qcow2-Pass-discard-type-to-qcow2_discard_clusters.patch [bz#1208808] +- kvm-qcow2-Discard-VM-state-in-active-L1-after-creating-s.patch [bz#1208808] +- kvm-configure-Require-libfdt-for-arm-ppc-microblaze-soft.patch [bz#1217850] +- kvm-configure-Add-handling-code-for-AArch64-targets.patch [bz#1217850] +- kvm-configure-permit-compilation-on-arm-aarch64.patch [bz#1217850] +- kvm-spec-Allow-build-on-aarch64.patch [bz#1217850] +- kvm-Remove-redhat-extensions-from-qmp-events.txt.patch [bz#1222833] +- kvm-spec-Add-misssing-QMP-documentation-files.patch [bz#1222833] +- Resolves: bz#1208808 + (creating second and further snapshot takes ages) +- Resolves: bz#1217850 + (qemu-kvm: Enable build on aarch64) +- Resolves: bz#1222833 + (We ship incomplete QMP documentation) + +* Wed May 27 2015 Miroslav Rezanina - 1.5.3-89.el7 +- kvm-CVE-2015-1779-incrementally-decode-websocket-frames.patch [bz#1206497] +- kvm-CVE-2015-1779-limit-size-of-HTTP-headers-from-websoc.patch [bz#1206497] +- kvm-qemu-iotests-Test-unaligned-4k-zero-write.patch [bz#1200295] +- kvm-block-Fix-NULL-deference-for-unaligned-write-if-qiov.patch [bz#1200295] +- kvm-qemu-iotests-Test-unaligned-sub-block-zero-write.patch [bz#1200295] +- kvm-fdc-force-the-fifo-access-to-be-in-bounds-of-the-all.patch [bz#1219270] +- Resolves: bz#1200295 + (QEMU segfault when doing unaligned zero write to non-512 disk) +- Resolves: bz#1206497 + (CVE-2015-1779 qemu-kvm: qemu: vnc: insufficient resource limiting in VNC websockets decoder [rhel-7.2]) +- Resolves: bz#1219270 + (CVE-2015-3456 qemu-kvm: qemu: floppy disk controller flaw [rhel-7.2]) + +* Wed May 06 2015 Miroslav Rezanina - 1.5.3-88.el7 +- kvm-vfio-warn-if-host-device-rom-can-t-be-read.patch [bz#1210503] +- kvm-vfio-Do-not-reattempt-a-failed-rom-read.patch [bz#1210503] +- kvm-vfio-Correction-in-vfio_rom_read-when-attempting-rom.patch [bz#1210503] +- kvm-vfio-Fix-overrun-after-readlink-fills-buffer-complet.patch [bz#1210504] +- kvm-vfio-use-correct-runstate.patch [bz#1210505] +- kvm-vfio-pci-Fix-BAR-size-overflow.patch [bz#1181267] +- kvm-vfio-Use-vfio-type1-v2-IOMMU-interface.patch [bz#1210508] +- kvm-vfio-pci-Enable-device-request-notification-support.patch [bz#1210509] +- kvm-vfio-pci-Further-fix-BAR-size-overflow.patch [bz#1181267] +- kvm-vfio-pci-Fix-error-path-sign.patch [bz#1210504] +- kvm-x86-Use-common-variable-range-MTRR-counts.patch [bz#1210510] +- kvm-x86-kvm-Add-MTRR-support-for-kvm_get-put_msrs.patch [bz#1210510] +- kvm-x86-Clear-MTRRs-on-vCPU-reset.patch [bz#1210510] +- kvm-spec-Exclude-aarch64.patch [bz#1217850] +- Resolves: bz#1181267 + (vfio-pci: Fix BAR size overflow) +- Resolves: bz#1210503 + (vfio improve PCI ROM loading error handling) +- Resolves: bz#1210504 + (vfio: Fix overrun after readlink() fills buffer completely) +- Resolves: bz#1210505 + (vfio: use correct runstate) +- Resolves: bz#1210508 + (vfio: Use vfio type1 v2 IOMMU interface) +- Resolves: bz#1210509 + (vfio-pci: Enable device request notification support) +- Resolves: bz#1210510 + (Sync MTRRs with KVM and disable on reset) +- Resolves: bz#1217850 + (qemu-kvm: ExcludeArch: aarch64) + +* Tue Mar 17 2015 Miroslav Rezanina - 1.5.3-87.el7 +- kvm-trace-add-qemu_system_powerdown_request-and-qemu_sys.patch [bz#1155671] +- kvm-virtio-net-drop-assert-on-vm-stop.patch [bz#1139562] +- kvm-socket-shutdown.patch [bz#1086168] +- kvm-Handle-bi-directional-communication-for-fd-migration.patch [bz#1086168] +- kvm-migration_cancel-shutdown-migration-socket.patch [bz#1086168] +- kvm-iscsi-Refuse-to-open-as-writable-if-the-LUN-is-write.patch [bz#1032412] +- kvm-main-set-current_machine-before-calling-machine-init.patch [bz#1176283] +- kvm-pc_sysfw-prevent-pflash-and-or-mis-sized-firmware-fo.patch [bz#1176283] +- kvm-Restore-atapi_dma-flag-across-migration.patch [bz#892258] +- kvm-atapi-migration-Throw-recoverable-error-to-avoid-rec.patch [bz#892258] +- kvm-build-reenable-local-builds-to-pass-enable-debug-RHE.patch [] +- kvm-raw-posix-Fail-gracefully-if-no-working-alignment-is.patch [bz#1184363] +- kvm-block-Add-Error-argument-to-bdrv_refresh_limits.patch [bz#1184363] +- kvm-Python-lang-gdb-script-to-extract-x86_64-guest-vmcor.patch [bz#828493] +- kvm-RPM-spec-install-dump-guest-memory.py-RHEL-only.patch [bz#828493] +- kvm-spec-Enable-build-of-qemu-img-and-libcacard-for-ppc6.patch [bz#1190086] +- Resolves: bz#1032412 + (opening read-only iscsi lun as read-write should fail) +- Resolves: bz#1086168 + (qemu-kvm can not cancel migration in src host when network of dst host failed) +- Resolves: bz#1139562 + (qemu-kvm with vhost=off and sndbuf=100 crashed when stop it during pktgen test from guest to host) +- Resolves: bz#1155671 + ([Fujitsu 7.2 FEAT]: QEMU: Add tracepoints in system shutdown) +- Resolves: bz#1176283 + ([migration]migration failed when configure guest with OVMF bios + machine type=rhel6.5.0) +- Resolves: bz#1184363 + (Qemu process fails to start with a multipath device with all paths failed) +- Resolves: bz#1190086 + (build qemu-img/libcacard on ppc64le for 7.2) +- Resolves: bz#828493 + ([Hitachi 7.2 FEAT] Extract guest memory dump from qemu-kvm core) +- Resolves: bz#892258 + (ide CDROM io/data errors after migration) + +* Thu Mar 05 2015 Miroslav Rezanina - 1.5.3-86.el7_1.1 +- kvm-pc-add-rhel6.6.0-machine-type.patch [bz#1198958] +- Resolves: bz#1198958 + (Add rhel-6.6.0 machine type to RHEL 7.1.z to support RHEL 6.6 to RHEL 7.1 live migration) + +* Sun Jan 25 2015 Miroslav Rezanina - 1.5.3-86.el7 +- kvm-vfio-pci-Fix-interrupt-disabling.patch [bz#1180942] +- kvm-cirrus-fix-blit-region-check.patch [bz#1169456] +- kvm-cirrus-don-t-overflow-CirrusVGAState-cirrus_bltbuf.patch [bz#1169456] +- Resolves: bz#1169456 + (CVE-2014-8106 qemu-kvm: qemu: cirrus: insufficient blit region checks [rhel-7.1]) +- Resolves: bz#1180942 + (qemu core dumped when unhotplug gpu card assigned to guest) + +* Wed Jan 07 2015 Jeff E. Nelson - 1.5.3-85.el7 +- kvm-block-delete-cow-block-driver.patch [bz#1175325] +- Resolves: bz#1175325 + (Delete cow block driver) + +* Tue Dec 16 2014 Jeff E. Nelson - 1.5.3-84.el7 +- kvm-qemu-iotests-Test-case-for-backing-file-deletion.patch [bz#1002493] +- kvm-qemu-iotests-Add-sample-image-and-test-for-VMDK-vers.patch [bz#1134237] +- kvm-vmdk-Check-VMFS-extent-line-field-number.patch [bz#1134237] +- kvm-qemu-iotests-Introduce-_unsupported_imgopts.patch [bz#1002493] +- kvm-qemu-iotests-Add-_unsupported_imgopts-for-vmdk-subfo.patch [bz#1002493] +- kvm-vmdk-Fix-big-flat-extent-IO.patch [bz#1134241] +- kvm-vmdk-Check-for-overhead-when-opening.patch [bz#1134251] +- kvm-block-vmdk-add-basic-.bdrv_check-support.patch [bz#1134251] +- kvm-qemu-iotest-Make-077-raw-only.patch [bz#1134237] +- kvm-qemu-iotests-Don-t-run-005-on-vmdk-split-formats.patch [bz#1002493] +- kvm-vmdk-extract-vmdk_read_desc.patch [bz#1134251] +- kvm-vmdk-push-vmdk_read_desc-up-to-caller.patch [bz#1134251] +- kvm-vmdk-do-not-try-opening-a-file-as-both-image-and-des.patch [bz#1134251] +- kvm-vmdk-correctly-propagate-errors.patch [bz#1134251] +- kvm-block-vmdk-do-not-report-file-offset-for-compressed-.patch [bz#1134251] +- kvm-vmdk-Fix-d-and-lld-to-PRI-in-format-strings.patch [bz#1134251] +- kvm-vmdk-Fix-x-to-PRIx32-in-format-strings-for-cid.patch [bz#1134251] +- kvm-qemu-img-Convert-by-cluster-size-if-target-is-compre.patch [bz#1134283] +- kvm-vmdk-Implement-.bdrv_write_compressed.patch [bz#1134283] +- kvm-vmdk-Implement-.bdrv_get_info.patch [bz#1134283] +- kvm-qemu-iotests-Test-converting-to-streamOptimized-from.patch [bz#1134283] +- kvm-vmdk-Fix-local_err-in-vmdk_create.patch [bz#1134283] +- kvm-fpu-softfloat-drop-INLINE-macro.patch [bz#1002493] +- kvm-block-New-bdrv_nb_sectors.patch [bz#1002493] +- kvm-vmdk-Optimize-cluster-allocation.patch [bz#1002493] +- kvm-vmdk-Handle-failure-for-potentially-large-allocation.patch [bz#1002493] +- kvm-vmdk-Use-bdrv_nb_sectors-where-sectors-not-bytes-are.patch [bz#1002493] +- kvm-vmdk-fix-vmdk_parse_extents-extent_file-leaks.patch [bz#1002493] +- kvm-vmdk-fix-buf-leak-in-vmdk_parse_extents.patch [bz#1002493] +- kvm-vmdk-Fix-integer-overflow-in-offset-calculation.patch [bz#1002493] +- kvm-migration-fix-parameter-validation-on-ram-load-CVE-2.patch [bz#1163078] +- Resolves: bz#1002493 + (qemu-img convert rate about 100k/second from qcow2/raw to vmdk format on nfs system file) +- Resolves: bz#1134237 + (Opening malformed VMDK description file should fail) +- Resolves: bz#1134241 + (QEMU fails to correctly read/write on VMDK with big flat extent) +- Resolves: bz#1134251 + (Opening an obviously truncated VMDK image should fail) +- Resolves: bz#1134283 + (qemu-img convert from ISO to streamOptimized fails) +- Resolves: bz#1163078 + (CVE-2014-7840 qemu-kvm: qemu: insufficient parameter validation during ram load [rhel-7.1]) + +* Thu Nov 27 2014 Miroslav Rezanina - 1.5.3-83.el7 +- kvm-xhci-add-sanity-checks-to-xhci_lookup_uport.patch [bz#1074219] +- kvm-Revert-Build-ceph-rbd-only-for-rhev.patch [bz#1140742] +- kvm-Revert-rbd-Only-look-for-qemu-specific-copy-of-librb.patch [bz#1140742] +- kvm-Revert-rbd-link-and-load-librbd-dynamically.patch [bz#1140742] +- kvm-spec-Enable-rbd-driver-add-dependency.patch [bz#1140742] +- Resolves: bz#1074219 + (qemu core dump when install a RHEL.7 guest(xhci) with migration) +- Resolves: bz#1140742 + (Enable native support for Ceph) + +* Tue Nov 25 2014 Miroslav Rezanina - 1.5.3-82.el7 +- kvm-hw-pci-fixed-error-flow-in-pci_qdev_init.patch [bz#1046007] +- kvm-hw-pci-fixed-hotplug-crash-when-using-rombar-0-with-.patch [bz#1046007] +- Resolves: bz#1046007 + (qemu-kvm aborted when hot plug PCI device to guest with romfile and rombar=0) + +* Fri Nov 21 2014 Miroslav Rezanina - 1.5.3-81.el7 +- kvm-migration-static-variables-will-not-be-reset-at-seco.patch [bz#1071776] +- kvm-vfio-pci-Add-debug-config-options-to-disable-MSI-X-K.patch [bz#1098976] +- kvm-vfio-correct-debug-macro-typo.patch [bz#1098976] +- kvm-vfio-pci-Fix-MSI-X-debug-code.patch [bz#1098976] +- kvm-vfio-pci-Fix-MSI-X-masking-performance.patch [bz#1098976] +- kvm-vfio-Fix-MSI-X-vector-expansion.patch [bz#1098976] +- kvm-vfio-Don-t-cache-MSIMessage.patch [bz#1098976] +- Resolves: bz#1071776 + (Migration "expected downtime" does not refresh after reset to a new value) +- Resolves: bz#1098976 + (2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput) + +* Fri Nov 21 2014 Miroslav Rezanina - 1.5.3-80.el7 +- kvm-dump-RHEL-specific-fix-for-CPUState-bug-introduced-b.patch [bz#1161563] +- kvm-dump-guest-memory-Check-for-the-correct-return-value.patch [bz#1157798] +- kvm-dump-const-qualify-the-buf-of-WriteCoreDumpFunction.patch [bz#1157798] +- kvm-dump-add-argument-to-write_elfxx_notes.patch [bz#1157798] +- kvm-dump-add-API-to-write-header-of-flatten-format.patch [bz#1157798] +- kvm-dump-add-API-to-write-vmcore.patch [bz#1157798] +- kvm-dump-add-API-to-write-elf-notes-to-buffer.patch [bz#1157798] +- kvm-dump-add-support-for-lzo-snappy.patch [bz#1157798] +- kvm-RPM-spec-build-qemu-kvm-with-lzo-and-snappy-enabled-.patch [bz#1157798] +- kvm-dump-add-members-to-DumpState-and-init-some-of-them.patch [bz#1157798] +- kvm-dump-add-API-to-write-dump-header.patch [bz#1157798] +- kvm-dump-add-API-to-write-dump_bitmap.patch [bz#1157798] +- kvm-dump-add-APIs-to-operate-DataCache.patch [bz#1157798] +- kvm-dump-add-API-to-write-dump-pages.patch [bz#1157798] +- kvm-dump-Drop-qmp_dump_guest_memory-stub-and-build-for-a.patch [bz#1157798] +- kvm-dump-make-kdump-compressed-format-available-for-dump.patch [bz#1157798] +- kvm-Define-the-architecture-for-compressed-dump-format.patch [bz#1157798] +- kvm-dump-add-query-dump-guest-memory-capability-command.patch [bz#1157798] +- kvm-dump-Drop-pointless-error_is_set-DumpState-member-er.patch [bz#1157798] +- kvm-dump-fill-in-the-flat-header-signature-more-pleasing.patch [bz#1157798] +- kvm-dump-simplify-write_start_flat_header.patch [bz#1157798] +- kvm-dump-eliminate-DumpState.page_shift-guest-s-page-shi.patch [bz#1157798] +- kvm-dump-eliminate-DumpState.page_size-guest-s-page-size.patch [bz#1157798] +- kvm-dump-select-header-bitness-based-on-ELF-class-not-EL.patch [bz#1157798] +- kvm-dump-hoist-lzo_init-from-get_len_buf_out-to-dump_ini.patch [bz#1157798] +- kvm-dump-simplify-get_len_buf_out.patch [bz#1157798] +- kvm-rename-parse_enum_option-to-qapi_enum_parse-and-make.patch [bz#1087724] +- kvm-qapi-introduce-PreallocMode-and-new-PreallocModes-fu.patch [bz#1087724] +- kvm-raw-posix-Add-falloc-and-full-preallocation-option.patch [bz#1087724] +- kvm-qcow2-Add-falloc-and-full-preallocation-option.patch [bz#1087724] +- kvm-vga-fix-invalid-read-after-free.patch [bz#1161890] +- kvm-Use-qemu-kvm-in-documentation-instead-of-qemu-system.patch [bz#1140618] +- kvm-vnc-sanitize-bits_per_pixel-from-the-client.patch [bz#1157645] +- kvm-spice-call-qemu_spice_set_passwd-during-init.patch [bz#1138639] +- kvm-block-raw-posix-Try-both-FIEMAP-and-SEEK_HOLE.patch [bz#1160237] +- kvm-block-raw-posix-Fix-disk-corruption-in-try_fiemap.patch [bz#1160237] +- kvm-block-raw-posix-use-seek_hole-ahead-of-fiemap.patch [bz#1160237] +- kvm-raw-posix-Fix-raw_co_get_block_status-after-EOF.patch [bz#1160237] +- kvm-raw-posix-raw_co_get_block_status-return-value.patch [bz#1160237] +- kvm-raw-posix-SEEK_HOLE-suffices-get-rid-of-FIEMAP.patch [bz#1160237] +- kvm-raw-posix-The-SEEK_HOLE-code-is-flawed-rewrite-it.patch [bz#1160237] +- Resolves: bz#1087724 + ([Fujitsu 7.1 FEAT]: qemu-img should use fallocate() system call for "preallocation=full" option) +- Resolves: bz#1138639 + (fail to login spice session with password + expire time) +- Resolves: bz#1140618 + (Should replace "qemu-system-i386" by "/usr/libexec/qemu-kvm" in manpage of qemu-kvm for our official qemu-kvm build) +- Resolves: bz#1157645 + (CVE-2014-7815 qemu-kvm: qemu: vnc: insufficient bits_per_pixel from the client sanitization [rhel-7.1]) +- Resolves: bz#1157798 + ([FEAT RHEL7.1]: qemu: Support compression for dump-guest-memory command) +- Resolves: bz#1160237 + (qemu-img convert intermittently corrupts output images) +- Resolves: bz#1161563 + (invalid QEMU NOTEs in vmcore that is dumped for multi-VCPU guests) +- Resolves: bz#1161890 + ([abrt] qemu-kvm: pixman_image_get_data(): qemu-kvm killed by SIGSEGV) + +* Wed Nov 12 2014 Miroslav Rezanina - 1.5.3-79.el7 +- kvm-libcacard-link-against-qemu-error.o-for-error_report.patch [bz#1088176] +- kvm-error-Add-error_abort.patch [bz#1088176] +- kvm-blockdev-Fail-blockdev-add-with-encrypted-images.patch [bz#1088176] +- kvm-blockdev-Fix-NULL-pointer-dereference-in-blockdev-ad.patch [bz#1088176] +- kvm-qemu-iotests-Test-a-few-blockdev-add-error-cases.patch [bz#1088176] +- kvm-block-Add-errp-to-bdrv_new.patch [bz#1088176] +- kvm-qemu-img-Avoid-duplicate-block-device-IDs.patch [bz#1088176] +- kvm-block-Catch-duplicate-IDs-in-bdrv_new.patch [bz#1088176] +- kvm-qemu-img-Allow-source-cache-mode-specification.patch [bz#1138691] +- kvm-qemu-img-Allow-cache-mode-specification-for-amend.patch [bz#1138691] +- kvm-qemu-img-clarify-src_cache-option-documentation.patch [bz#1138691] +- kvm-qemu-img-fix-rebase-src_cache-option-documentation.patch [bz#1138691] +- kvm-qemu-img-fix-img_compare-flags-error-path.patch [bz#1138691] +- kvm-ac97-register-reset-via-qom.patch [bz#1141667] +- kvm-virtio-blk-Factor-common-checks-out-of-virtio_blk_ha.patch [bz#1085232] +- kvm-virtio-blk-Bypass-error-action-and-I-O-accounting-on.patch [bz#1085232] +- kvm-virtio-blk-Treat-read-write-beyond-end-as-invalid.patch [bz#1085232] +- kvm-ide-Treat-read-write-beyond-end-as-invalid.patch [bz#1085232] +- kvm-ide-only-constrain-read-write-requests-to-drive-size.patch [bz#1085232] +- Resolves: bz#1085232 + (Ilegal guest requests on block devices pause the VM) +- Resolves: bz#1088176 + (QEMU fail to check whether duplicate ID for block device drive using 'blockdev-add' to hotplug) +- Resolves: bz#1138691 + (Allow qemu-img to bypass the host cache (check, compare, convert, rebase, amend)) +- Resolves: bz#1141667 + (Qemu crashed if reboot guest after hot remove AC97 sound device) + +* Mon Nov 10 2014 Miroslav Rezanina - 1.5.3-78.el7 +- kvm-slirp-udp-fix-NULL-pointer-dereference-because-of-un.patch [bz#1144820] +- kvm-hw-pci-fix-error-flow-in-pci-multifunction-init.patch [bz#1049734] +- kvm-rhel-Drop-machine-type-pc-q35-rhel7.0.0.patch [bz#1111107] +- kvm-virtio-scsi-Plug-memory-leak-on-virtio_scsi_push_eve.patch [bz#1088822] +- kvm-virtio-scsi-Report-error-if-num_queues-is-0-or-too-l.patch [bz#1089606] +- kvm-virtio-scsi-Fix-memory-leak-when-realize-failed.patch [bz#1089606] +- kvm-virtio-scsi-Fix-num_queue-input-validation.patch [bz#1089606] +- kvm-Revert-linux-aio-use-event-notifiers.patch [bz#1104748] +- kvm-specfile-Require-glusterfs-api-3.6.patch [bz#1155518] +- Resolves: bz#1049734 + (PCI: QEMU crash on illegal operation: attaching a function to a non multi-function device) +- Resolves: bz#1088822 + (hot-plug a virtio-scsi disk via 'blockdev-add' always cause QEMU quit) +- Resolves: bz#1089606 + (QEMU will not reject invalid number of queues (num_queues = 0) specified for virtio-scsi) +- Resolves: bz#1104748 + (48% reduction in IO performance for KVM guest, io=native) +- Resolves: bz#1111107 + (Remove Q35 machine type from qemu-kvm) +- Resolves: bz#1144820 + (CVE-2014-3640 qemu-kvm: qemu: slirp: NULL pointer deref in sosendto() [rhel-7.1]) +- Resolves: bz#1155518 + (qemu-kvm: undefined symbol: glfs_discard_async) + +* Fri Oct 24 2014 Miroslav Rezanina - 1.5.3-77.el7 +- kvm-seccomp-add-semctl-to-the-syscall-whitelist.patch [bz#1026314] +- kvm-Revert-kvmclock-Ensure-proper-env-tsc-value-for-kvmc.patch [bz#1098602 bz#1130428] +- kvm-Revert-kvmclock-Ensure-time-in-migration-never-goes-.patch [bz#1098602 bz#1130428] +- kvm-Introduce-cpu_clean_all_dirty.patch [bz#1098602 bz#1130428] +- kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock.v2.patch [bz#1098602 bz#1130428] +- kvm-kvmclock-Ensure-time-in-migration-never-goes-back.v2.patch [bz#1098602 bz#1130428] +- Resolves: bz#1026314 + (BUG: qemu-kvm hang when use '-sandbox on'+'vnc'+'hda') +- Resolves: bz#1098602 + (kvmclock: Ensure time in migration never goes backward (backport)) +- Resolves: bz#1130428 + (After migration of RHEL7.1 guest with "-vga qxl", GUI console is hang) + +* Tue Oct 21 2014 Miroslav Rezanina - 1.5.3-76.el7 +- kvm-usb-hcd-xhci-QOM-Upcast-Sweep.patch [bz#980747] +- kvm-usb-hcd-xhci-QOM-parent-field-cleanup.patch [bz#980747] +- kvm-uhci-egsm-fix.patch [bz#1046873] +- kvm-usb-redir-fix-use-after-free.patch [bz#1046574 bz#1088116] +- kvm-xhci-remove-leftover-debug-printf.patch [bz#980833] +- kvm-xhci-add-tracepoint-for-endpoint-state-changes.patch [bz#980833] +- kvm-xhci-add-port-to-slot_address-tracepoint.patch [bz#980833] +- kvm-usb-parallelize-usb3-streams.patch [bz#1075846] +- kvm-xhci-Init-a-transfers-xhci-slotid-and-epid-member-on.patch [bz#1075846] +- kvm-xhci-Add-xhci_epid_to_usbep-helper-function.patch [bz#980833] +- kvm-xhci-Fix-memory-leak-on-xhci_disable_ep.patch [bz#980833] +- kvm-usb-Also-reset-max_packet_size-on-ep_reset.patch [bz#1075846] +- kvm-usb-Fix-iovec-memleak-on-combined-packet-free.patch [bz#1075846] +- kvm-usb-hcd-xhci-Remove-unused-sstreamsm-member-from-XHC.patch [bz#980747] +- kvm-usb-hcd-xhci-Remove-unused-cancelled-member-from-XHC.patch [bz#980747] +- kvm-usb-hcd-xhci-Report-completion-of-active-transfer-wi.patch [bz#980747] +- kvm-usb-hcd-xhci-Update-endpoint-context-dequeue-pointer.patch [bz#980747] +- kvm-xhci-Add-a-few-missing-checks-for-disconnected-devic.patch [bz#980833] +- kvm-usb-Add-max_streams-attribute-to-endpoint-info.patch [bz#1111450] +- kvm-usb-Add-usb_device_alloc-free_streams.patch [bz#1111450] +- kvm-xhci-Call-usb_device_alloc-free_streams.patch [bz#980833] +- kvm-uhci-invalidate-queue-on-device-address-changes.patch [bz#1111450] +- kvm-xhci-iso-fix-time-calculation.patch [bz#949385] +- kvm-xhci-iso-allow-for-some-latency.patch [bz#949385] +- kvm-xhci-switch-debug-printf-to-tracepoint.patch [bz#980747] +- kvm-xhci-use-DPRINTF-instead-of-fprintf-stderr.patch [bz#980833] +- kvm-xhci-child-detach-fix.patch [bz#980833] +- kvm-usb-add-usb_pick_speed.patch [bz#1075846] +- kvm-xhci-make-port-reset-trace-point-more-verbose.patch [bz#980833] +- kvm-usb-initialize-libusb_device-to-avoid-crash.patch [bz#1111450] +- kvm-target-i386-get-CPL-from-SS.DPL.patch [bz#1097363] +- kvm-trace-use-unique-Red-Hat-version-number-in-simpletra.patch [bz#1088112] +- kvm-trace-add-pid-field-to-simpletrace-record.patch [bz#1088112] +- kvm-simpletrace-add-support-for-trace-record-pid-field.patch [bz#1088112] +- kvm-simpletrace-add-simpletrace.py-no-header-option.patch [bz#1088112] +- kvm-trace-extract-stap_escape-function-for-reuse.patch [bz#1088112] +- kvm-trace-add-tracetool-simpletrace_stap-format.patch [bz#1088112] +- kvm-trace-install-simpletrace-SystemTap-tapset.patch [bz#1088112] +- kvm-trace-install-trace-events-file.patch [bz#1088112] +- kvm-trace-add-SystemTap-init-scripts-for-simpletrace-bri.patch [bz#1088112] +- kvm-simpletrace-install-simpletrace.py.patch [bz#1088112] +- kvm-trace-add-systemtap-initscript-README-file-to-RPM.patch [bz#1088112] +- kvm-rdma-Fix-block-during-rdma-migration.patch [bz#1152969] +- Resolves: bz#1046574 + (fail to passthrough the USB speaker redirected from usb-redir with xhci controller) +- Resolves: bz#1046873 + (fail to be recognized the hotpluging usb-storage device with xhci controller in win2012R2 guest) +- Resolves: bz#1075846 + (qemu-kvm core dumped when hotplug/unhotplug USB3.0 device multi times) +- Resolves: bz#1088112 + ([Fujitsu 7.1 FEAT]:QEMU: capturing trace data all the time using ftrace-based tracing) +- Resolves: bz#1088116 + (qemu crash when device_del usb-redir) +- Resolves: bz#1097363 + (qemu ' KVM internal error. Suberror: 1' when query cpu frequently during pxe boot in Intel "Q95xx" host) +- Resolves: bz#1111450 + (Guest crash when hotplug usb while disable virt_use_usb) +- Resolves: bz#1152969 + (Qemu-kvm got stuck when migrate to wrong RDMA ip) +- Resolves: bz#949385 + (passthrough USB speaker to win2012 guest fail to work well) +- Resolves: bz#980747 + (flood with 'xhci: wrote doorbell while xHC stopped or paused' when redirected USB Webcam from usb-host with xHCI controller) +- Resolves: bz#980833 + (xhci: FIXME: endpoint stopped w/ xfers running, data might be lost) + +* Wed Oct 08 2014 Miroslav Rezanina - 1.5.3-75.el7 +- kvm-target-i386-Broadwell-CPU-model.patch [bz#1116117] +- kvm-pc-Add-Broadwell-CPUID-compatibility-bits.patch [bz#1116117] +- kvm-virtio-balloon-fix-integer-overflow-in-memory-stats-.patch [bz#1142290] +- Resolves: bz#1116117 + ([Intel 7.1 FEAT] Broadwell new instructions support for KVM - qemu-kvm) +- Resolves: bz#1142290 + (guest is stuck when setting balloon memory with large guest-stats-polling-interval) + +* Mon Sep 29 2014 Miroslav Rezanina - 1.5.3-74.el7 +- kvm-ide-Add-wwn-support-to-IDE-ATAPI-drive.patch [bz#1131316] +- kvm-vmdk-Allow-vmdk_create-to-work-with-protocol.patch [bz#1098086] +- kvm-block-make-vdi-bounds-check-match-upstream.patch [bz#1098086] +- kvm-vdi-say-why-an-image-is-bad.patch [bz#1098086] +- kvm-block-do-not-abuse-EMEDIUMTYPE.patch [bz#1098086] +- kvm-cow-correctly-propagate-errors.patch [bz#1098086] +- kvm-block-Use-correct-width-in-format-strings.patch [bz#1098086] +- kvm-vdi-remove-double-conversion.patch [bz#1098086] +- kvm-block-vdi-Error-out-immediately-in-vdi_create.patch [bz#1098086] +- kvm-vpc-Implement-.bdrv_has_zero_init.patch [bz#1098086] +- kvm-block-vpc-use-QEMU_PACKED-for-on-disk-structures.patch [bz#1098086] +- kvm-block-allow-bdrv_unref-to-be-passed-NULL-pointers.patch [bz#1098086] +- kvm-block-vdi-use-block-layer-ops-in-vdi_create-instead-.patch [bz#1098086] +- kvm-block-use-the-standard-ret-instead-of-result.patch [bz#1098086] +- kvm-block-vpc-use-block-layer-ops-in-vpc_create-instead-.patch [bz#1098086] +- kvm-block-iotest-update-084-to-test-static-VDI-image-cre.patch [bz#1098086] +- kvm-block-add-helper-function-to-determine-if-a-BDS-is-i.patch [bz#1122925] +- kvm-block-extend-block-commit-to-accept-a-string-for-the.patch [bz#1122925] +- kvm-block-add-backing-file-option-to-block-stream.patch [bz#1122925] +- kvm-block-add-__com.redhat_change-backing-file-qmp-comma.patch [bz#1122925] +- Resolves: bz#1098086 + (RFE: Supporting creating vmdk/vdi/vpc format disk with protocols (glusterfs)) +- Resolves: bz#1122925 + (Maintain relative path to backing file image during live merge (block-commit)) +- Resolves: bz#1131316 + (fail to specify wwn for virtual IDE CD-ROM) + +* Tue Sep 23 2014 Miroslav Rezanina - 1.5.3-73.el7 +- kvm-scsi-disk-fix-bug-in-scsi_block_new_request-introduc.patch [bz#1105880] +- Resolves: bz#1105880 + (bug in scsi_block_new_request() function introduced by upstream commit 137745c5c60f083ec982fe9e861e8c16ebca1ba8) + +* Mon Sep 22 2014 Miroslav Rezanina - 1.5.3-72.el7 +- kvm-vbe-make-bochs-dispi-interface-return-the-correct-me.patch [bz#1139118] +- kvm-vbe-rework-sanity-checks.patch [bz#1139118] +- kvm-spice-display-add-display-channel-id-to-the-debug-me.patch [bz#1139118] +- kvm-spice-make-sure-we-don-t-overflow-ssd-buf.patch [bz#1139118] +- Resolves: bz#1139118 + (CVE-2014-3615 qemu-kvm: Qemu: crash when guest sets high resolution [rhel-7.1]) + +* Thu Sep 18 2014 Miroslav Rezanina - 1.5.3-71.el7 +- kvm-spice-move-qemu_spice_display_-from-spice-graphics-t.patch [bz#1054077] +- kvm-spice-move-spice_server_vm_-start-stop-calls-into-qe.patch [bz#1054077] +- kvm-spice-stop-server-for-qxl-hard-reset.patch [bz#1054077] +- kvm-qemu-Adjust-qemu-wakeup.patch [bz#1064156] +- kvm-vmstate_xhci_event-fix-unterminated-field-list.patch [bz#1122147] +- kvm-vmstate_xhci_event-bug-compat-with-RHEL-7.0-RHEL-onl.patch [bz#1122147] +- kvm-pflash_cfi01-write-flash-contents-to-bdrv-on-incomin.patch [bz#1139702] +- kvm-ide-test-Add-enum-value-for-DEV.patch [bz#1123372] +- kvm-ide-test-Add-FLUSH-CACHE-test-case.patch [bz#1123372] +- kvm-ide-Fix-segfault-when-flushing-a-device-that-doesn-t.patch [bz#1123372] +- kvm-IDE-Fill-the-IDENTIFY-request-consistently.patch [bz#852348] +- kvm-ide-Add-resize-callback-to-ide-core.patch [bz#852348] +- Resolves: bz#1054077 + (qemu crash when reboot win7 guest with spice display) +- Resolves: bz#1064156 + ([qxl] The guest show black screen while resumed guest which managedsaved in pmsuspended status.) +- Resolves: bz#1122147 + (CVE-2014-5263 vmstate_xhci_event: fix unterminated field list) +- Resolves: bz#1123372 + (qemu-kvm crashed when doing iofuzz testing) +- Resolves: bz#1139702 + (pflash (UEFI varstore) migration shortcut for libvirt [RHEL]) +- Resolves: bz#852348 + (fail to block_resize local data disk with IDE/AHCI disk_interface) + +* Fri Sep 12 2014 Miroslav Rezanina - 1.5.3-70.el7 +- kvm-Enforce-stack-protector-usage.patch [bz#1064260] +- kvm-pc-increase-maximal-VCPU-count-to-240.patch [bz#1134408] +- kvm-gluster-Add-discard-support-for-GlusterFS-block-driv.patch [bz#1136534] +- kvm-gluster-default-scheme-to-gluster-and-host-to-localh.patch [bz#1088150] +- kvm-qdev-properties-system.c-Allow-vlan-or-netdev-for-de.patch [bz#996011] +- kvm-vl-process-object-after-other-backend-options.patch [bz#1128095] +- Resolves: bz#1064260 + (Handle properly --enable-fstack-protector option) +- Resolves: bz#1088150 + (qemu-img coredumpd when try to create a gluster format image) +- Resolves: bz#1128095 + (chardev 'chr0' isn't initialized when we try to open rng backend) +- Resolves: bz#1134408 + ([HP 7.1 FEAT] Increase qemu-kvm's VCPU limit to 240) +- Resolves: bz#1136534 + (glusterfs backend does not support discard) +- Resolves: bz#996011 + (vlan and queues options cause core dumped when qemu-kvm process quit(or ctrl+c)) + +* Tue Aug 26 2014 Miroslav Rezanina - 1.5.3-69.el7 +- kvm-rdma-bug-fixes.patch [bz#1107821] +- kvm-virtio-serial-report-frontend-connection-state-via-m.patch [bz#1122151] +- kvm-char-report-frontend-open-closed-state-in-query-char.patch [bz#1122151] +- kvm-acpi-fix-tables-for-no-hpet-configuration.patch [bz#1129552] +- kvm-mirror-Fix-resource-leak-when-bdrv_getlength-fails.patch [bz#1130603] +- kvm-blockjob-Add-block_job_yield.patch [bz#1130603] +- kvm-mirror-Go-through-ready-complete-process-for-0-len-i.patch [bz#1130603] +- kvm-qemu-iotests-Test-BLOCK_JOB_READY-event-for-0Kb-imag.patch [bz#1130603] +- kvm-block-make-top-argument-to-block-commit-optional.patch [bz#1130603] +- kvm-qemu-iotests-Test-0-length-image-for-mirror.patch [bz#1130603] +- kvm-mirror-Fix-qiov-size-for-short-requests.patch [bz#1130603] +- Resolves: bz#1107821 + (rdma migration: seg if destination isn't listening) +- Resolves: bz#1122151 + (Pass close from qemu-ga) +- Resolves: bz#1129552 + (backport "acpi: fix tables for no-hpet configuration") +- Resolves: bz#1130603 + (advertise active commit to libvirt) + +* Fri Aug 15 2014 Miroslav Rezanina - 1.5.3-68.el7 +- kvm-virtio-net-Do-not-filter-VLANs-without-F_CTRL_VLAN.patch [bz#1065724] +- kvm-virtio-net-add-vlan-receive-state-to-RxFilterInfo.patch [bz#1065724] +- kvm-virtio-rng-check-return-value-of-virtio_load.patch [bz#1116941] +- kvm-qapi-treat-all-negative-return-of-strtosz_suffix-as-.patch [bz#1074403] +- Resolves: bz#1065724 + (rx filter incorrect when guest disables VLAN filtering) +- Resolves: bz#1074403 + (qemu-kvm can not give any warning hint when set sndbuf with negative value) +- Resolves: bz#1116941 + (Return value of virtio_load not checked in virtio_rng_load) + +* Thu Aug 07 2014 Jeff E. Nelson - 1.5.3-67.el7 +- kvm-vl.c-Output-error-on-invalid-machine-type.patch [bz#990724] +- kvm-migration-dump-vmstate-info-as-a-json-file-for-stati.patch [bz#1118707] +- kvm-vmstate-static-checker-script-to-validate-vmstate-ch.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-add-dump1-and-dump2-fil.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-incompat-machine-types.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-add-version-error-in-ma.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-version-mismatch-inside.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-minimum_version_id-chec.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-a-section.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-a-field.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-last-field-in-a-.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-change-description-name.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-Fields.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-Description.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-Description-insi.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-a-subsection.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-remove-Subsections.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-add-substructure-for-us.patch [bz#1118707] +- kvm-tests-vmstate-static-checker-add-size-mismatch-insid.patch [bz#1118707] +- kvm-aio-fix-qemu_bh_schedule-bh-ctx-race-condition.patch [bz#1116728] +- kvm-block-Improve-driver-whitelist-checks.patch [bz#999789] +- kvm-vmdk-Fix-format-specific-information-create-type-for.patch [bz#1029271] +- kvm-virtio-pci-Report-an-error-when-msix-vectors-init-fa.patch [bz#1095645] +- kvm-scsi-Report-error-when-lun-number-is-in-use.patch [bz#1096576] +- kvm-util-Split-out-exec_dir-from-os_find_datadir.patch [bz#1017685] +- kvm-rules.mak-fix-obj-to-a-real-relative-path.patch [bz#1017685] +- kvm-rules.mak-allow-per-object-cflags-and-libs.patch [bz#1017685] +- kvm-block-use-per-object-cflags-and-libs.patch [bz#1017685] +- kvm-vmdk-Fix-creating-big-description-file.patch [bz#1039791] +- Resolves: bz#1017685 + (Gluster etc. should not be a dependency of vscclient and libcacard) +- Resolves: bz#1029271 + (Format specific information (create type) was wrong when create it specified subformat='streamOptimized') +- Resolves: bz#1039791 + (qemu-img creates truncated VMDK image with subformat=twoGbMaxExtentFlat) +- Resolves: bz#1095645 + (vectors of virtio-scsi-pci will be 0 when set vectors>=129) +- Resolves: bz#1096576 + (QEMU core dumped when boot up two scsi-hd disk on the same virtio-scsi-pci controller in Intel host) +- Resolves: bz#1116728 + (Backport qemu_bh_schedule() race condition fix) +- Resolves: bz#1118707 + (VMstate static checker: backport -dump-vmstate feature to export json-encoded vmstate info) +- Resolves: bz#990724 + (qemu-kvm failing when invalid machine type is provided) +- Resolves: bz#999789 + (qemu should give a more friendly prompt when didn't specify read-only for VMDK format disk) + +* Wed Jul 09 2014 Miroslav Rezanina - 1.5.3-66.el7 +- kvm-xhci-fix-overflow-in-usb_xhci_post_load.patch [bz#1074219] +- kvm-migration-qmp_migrate-keep-working-after-syntax-erro.patch [bz#1086598] +- kvm-seccomp-add-shmctl-mlock-and-munlock-to-the-syscall-.patch [bz#1026314] +- kvm-exit-when-no-kvm-and-vcpu-count-160.patch [bz#1076326] +- kvm-Disallow-outward-migration-while-awaiting-incoming-m.patch [bz#1086987] +- kvm-block-Ignore-duplicate-or-NULL-format_name-in-bdrv_i.patch [bz#1088695 bz#1093983] +- kvm-block-vhdx-account-for-identical-header-sections.patch [bz#1097020] +- kvm-aio-Fix-use-after-free-in-cancellation-path.patch [bz#1095877] +- kvm-scsi-disk-Improve-error-messager-if-can-t-get-versio.patch [bz#1021788] +- kvm-scsi-Improve-error-messages-more.patch [bz#1021788] +- kvm-memory-Don-t-call-memory_region_update_coalesced_ran.patch [bz#1096645] +- kvm-kvmclock-Ensure-time-in-migration-never-goes-backwar.patch [bz#1098602] +- kvm-kvmclock-Ensure-proper-env-tsc-value-for-kvmclock_cu.patch [bz#1098602] +- Resolves: bz#1021788 + (the error message "scsi generic interface too old" is wrong more often than not) +- Resolves: bz#1026314 + (qemu-kvm hang when use '-sandbox on'+'vnc'+'hda') +- Resolves: bz#1074219 + (qemu core dump when install a RHEL.7 guest(xhci) with migration) +- Resolves: bz#1076326 + (qemu-kvm does not quit when booting guest w/ 161 vcpus and "-no-kvm") +- Resolves: bz#1086598 + (migrate_cancel wont take effect on previouly wrong migrate -d cmd) +- Resolves: bz#1086987 + (src qemu crashed when starting migration in inmigrate mode) +- Resolves: bz#1088695 + (there are four "gluster" in qemu-img supported format list) +- Resolves: bz#1093983 + (there are three "nbd" in qemu-img supported format list) +- Resolves: bz#1095877 + (segmentation fault in qemu-kvm due to use-after-free of a SCSIGenericReq (host device pass-through)) +- Resolves: bz#1096645 + ([FJ7.0 Bug] RHEL7.0 guest attaching 150 or more virtio-blk disks fails to start up) +- Resolves: bz#1097020 + ([RFE] qemu-img: Add/improve Disk2VHD tools creating VHDX images) +- Resolves: bz#1098602 + (kvmclock: Ensure time in migration never goes backward (backport)) + +* Wed Jul 02 2014 Miroslav Rezanina - 1.5.3-65.el7 +- kvm-Allow-mismatched-virtio-config-len.patch [bz#1113009] +- Resolves: bz#1113009 + (Migration failed with virtio-blk from RHEL6.5.0 host to RHEL7.0 host) + +* Wed Jun 18 2014 Miroslav Rezanina - 1.5.3-64.el7 +- kvm-zero-initialize-KVM_SET_GSI_ROUTING-input.patch [bz#1098976] +- kvm-skip-system-call-when-msi-route-is-unchanged.patch [bz#1098976] +- Resolves: bz#1098976 + (2x RHEL 5.10 VM running on RHEL 7 KVM have low TCP_STREAM throughput) + +* Tue Jun 17 2014 Miroslav Rezanina - 1.5.3-63.el7 +- kvm-char-restore-read-callback-on-a-reattached-hotplug-c.patch [bz#1038914] +- kvm-qcow2-Free-preallocated-zero-clusters.patch [bz#1052093] +- kvm-qemu-iotests-Discard-preallocated-zero-clusters.patch [bz#1052093] +- kvm-XBZRLE-Fix-qemu-crash-when-resize-the-xbzrle-cache.patch [bz#1066338] +- kvm-Provide-init-function-for-ram-migration.patch [bz#1066338] +- kvm-Init-the-XBZRLE.lock-in-ram_mig_init.patch [bz#1066338] +- kvm-XBZRLE-Fix-one-XBZRLE-corruption-issues.patch [bz#1066338] +- kvm-Count-used-RAMBlock-pages-for-migration_dirty_pages.patch [bz#1074913] +- kvm-virtio-net-fix-buffer-overflow-on-invalid-state-load.patch [bz#1095678] +- kvm-virtio-net-out-of-bounds-buffer-write-on-invalid-sta.patch [bz#1095690] +- kvm-virtio-net-out-of-bounds-buffer-write-on-load.patch [bz#1095685] +- kvm-virtio-out-of-bounds-buffer-write-on-invalid-state-l.patch [bz#1095695] +- kvm-virtio-avoid-buffer-overrun-on-incoming-migration.patch [bz#1095738] +- kvm-virtio-scsi-fix-buffer-overrun-on-invalid-state-load.patch [bz#1095742] +- kvm-virtio-validate-config_len-on-load.patch [bz#1095783] +- kvm-virtio-validate-num_sg-when-mapping.patch [bz#1095766] +- kvm-virtio-allow-mapping-up-to-max-queue-size.patch [bz#1095766] +- kvm-usb-sanity-check-setup_index-setup_len-in-post_load.patch [bz#1095747] +- kvm-usb-sanity-check-setup_index-setup_len-in-post_l2.patch [bz#1095747] +- kvm-vmstate-reduce-code-duplication.patch [bz#1095716] +- kvm-vmstate-add-VMS_MUST_EXIST.patch [bz#1095716] +- kvm-vmstate-add-VMSTATE_VALIDATE.patch [bz#1095716] +- kvm-hpet-fix-buffer-overrun-on-invalid-state-load.patch [bz#1095707] +- kvm-hw-pci-pcie_aer.c-fix-buffer-overruns-on-invalid-sta.patch [bz#1095716] +- kvm-usb-fix-up-post-load-checks.patch [bz#1096829] +- kvm-qcow-correctly-propagate-errors.patch [bz#1097230] +- kvm-qcow1-Make-padding-in-the-header-explicit.patch [bz#1097230] +- kvm-qcow1-Check-maximum-cluster-size.patch [bz#1097230] +- kvm-qcow1-Validate-L2-table-size-CVE-2014-0222.patch [bz#1097230] +- kvm-qcow1-Validate-image-size-CVE-2014-0223.patch [bz#1097237] +- kvm-qcow1-Stricter-backing-file-length-check.patch [bz#1097237] +- Resolves: bz#1038914 + (Guest can't receive any character transmitted from host after hot unplugging virtserialport then hot plugging again) +- Resolves: bz#1052093 + (qcow2 corruptions (leaked clusters after installing a rhel7 guest using virtio_scsi)) +- Resolves: bz#1066338 + (Reduce the migrate cache size during migration causes qemu segment fault) +- Resolves: bz#1074913 + (migration can not finish with 1024k 'remaining ram' left after hotunplug 4 nics) +- Resolves: bz#1095678 + (CVE-2013-4148 qemu-kvm: qemu: virtio-net: buffer overflow on invalid state load [rhel-7.1]) +- Resolves: bz#1095685 + (CVE-2013-4149 qemu-kvm: qemu: virtio-net: out-of-bounds buffer write on load [rhel-7.1]) +- Resolves: bz#1095690 + (CVE-2013-4150 qemu-kvm: qemu: virtio-net: out-of-bounds buffer write on invalid state load [rhel-7.1]) +- Resolves: bz#1095695 + (CVE-2013-4151 qemu-kvm: qemu: virtio: out-of-bounds buffer write on invalid state load [rhel-7.1]) +- Resolves: bz#1095707 + (CVE-2013-4527 qemu-kvm: qemu: hpet: buffer overrun on invalid state load [rhel-7.1]) +- Resolves: bz#1095716 + (CVE-2013-4529 qemu-kvm: qemu: hw/pci/pcie_aer.c: buffer overrun on invalid state load [rhel-7.1]) +- Resolves: bz#1095738 + (CVE-2013-6399 qemu-kvm: qemu: virtio: buffer overrun on incoming migration [rhel-7.1]) +- Resolves: bz#1095742 + (CVE-2013-4542 qemu-kvm: qemu: virtio-scsi: buffer overrun on invalid state load [rhel-7.1]) +- Resolves: bz#1095747 + (CVE-2013-4541 qemu-kvm: qemu: usb: insufficient sanity checking of setup_index+setup_len in post_load [rhel-7.1]) +- Resolves: bz#1095766 + (CVE-2013-4535 CVE-2013-4536 qemu-kvm: qemu: virtio: insufficient validation of num_sg when mapping [rhel-7.1]) +- Resolves: bz#1095783 + (CVE-2014-0182 qemu-kvm: qemu: virtio: out-of-bounds buffer write on state load with invalid config_len [rhel-7.1]) +- Resolves: bz#1096829 + (CVE-2014-3461 qemu-kvm: Qemu: usb: fix up post load checks [rhel-7.1]) +- Resolves: bz#1097230 + (CVE-2014-0222 qemu-kvm: Qemu: qcow1: validate L2 table size to avoid integer overflows [rhel-7.1]) +- Resolves: bz#1097237 + (CVE-2014-0223 qemu-kvm: Qemu: qcow1: validate image size to avoid out-of-bounds memory access [rhel-7.1]) + +* Wed May 07 2014 Miroslav Rezanina - 1.5.3-62.el7 +- kvm-pc-add-hot_add_cpu-callback-to-all-machine-types.patch [bz#1094285] +- Resolves: bz#1094285 + (Hot plug CPU not working with RHEL6 machine types running on RHEL7 host.) + +* Fri May 02 2014 Miroslav Rezanina - 1.5.3-61.el7 +- kvm-iscsi-fix-indentation.patch [bz#1083413] +- kvm-iscsi-correctly-propagate-errors-in-iscsi_open.patch [bz#1083413] +- kvm-block-iscsi-query-for-supported-VPD-pages.patch [bz#1083413] +- kvm-block-iscsi-fix-segfault-if-writesame-fails.patch [bz#1083413] +- kvm-iscsi-recognize-invalid-field-ASCQ-from-WRITE-SAME-c.patch [bz#1083413] +- kvm-iscsi-ignore-flushes-on-scsi-generic-devices.patch [bz#1083413] +- kvm-iscsi-always-query-max-WRITE-SAME-length.patch [bz#1083413] +- kvm-iscsi-Don-t-set-error-if-already-set-in-iscsi_do_inq.patch [bz#1083413] +- kvm-iscsi-Remember-to-set-ret-for-iscsi_open-in-error-ca.patch [bz#1083413] +- kvm-qemu_loadvm_state-shadow-SeaBIOS-for-VM-incoming-fro.patch [bz#1027565] +- kvm-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-onl.patch [bz#1085701] +- kvm-ide-Correct-improper-smart-self-test-counter-reset-i.patch [bz#1087980] +- Resolves: bz#1027565 + (fail to reboot guest after migration from RHEL6.5 host to RHEL7.0 host) +- Resolves: bz#1083413 + (qemu-kvm: iSCSI: Failure. SENSE KEY:ILLEGAL_REQUEST(5) ASCQ:INVALID_FIELD_IN_CDB(0x2400)) +- Resolves: bz#1085701 + (Guest hits call trace migrate from RHEL6.5 to RHEL7.0 host with -M 6.1 & balloon & uhci device) +- Resolves: bz#1087980 + (CVE-2014-2894 qemu-kvm: QEMU: out of bounds buffer accesses, guest triggerable via IDE SMART [rhel-7.1]) + +* Wed Apr 02 2014 Miroslav Rezanina - 1.5.3-60.el7 +- kvm-qcow2-fix-dangling-refcount-table-entry.patch [bz#1081793] +- kvm-qcow2-link-all-L2-meta-updates-in-preallocate.patch [bz#1081393] +- Resolves: bz#1081393 + (qemu-img will prompt that 'leaked clusters were found' while creating images with '-o preallocation=metadata,cluster_size<=1024') +- Resolves: bz#1081793 + (qemu-img core dumped when creating a qcow2 image base on block device(iscsi or libiscsi)) + +* Wed Mar 26 2014 Miroslav Rezanina - 1.5.3-59.el7 +- kvm-qemu-iotests-add-.-check-cloop-support.patch [bz#1066691] +- kvm-qemu-iotests-add-cloop-input-validation-tests.patch [bz#1066691] +- kvm-block-cloop-validate-block_size-header-field-CVE-201.patch [bz#1079455] +- kvm-block-cloop-prevent-offsets_size-integer-overflow-CV.patch [bz#1079320] +- kvm-block-cloop-refuse-images-with-huge-offsets-arrays-C.patch [bz#1079455] +- kvm-block-cloop-refuse-images-with-bogus-offsets-CVE-201.patch [bz#1079455] +- kvm-size-off-by-one.patch [bz#1066691] +- kvm-qemu-iotests-Support-for-bochs-format.patch [bz#1066691] +- kvm-bochs-Unify-header-structs-and-make-them-QEMU_PACKED.patch [bz#1066691] +- kvm-bochs-Use-unsigned-variables-for-offsets-and-sizes-C.patch [bz#1079339] +- kvm-bochs-Check-catalog_size-header-field-CVE-2014-0143.patch [bz#1079320] +- kvm-bochs-Check-extent_size-header-field-CVE-2014-0142.patch [bz#1079315] +- kvm-bochs-Fix-bitmap-offset-calculation.patch [bz#1066691] +- kvm-vpc-vhd-add-bounds-check-for-max_table_entries-and-b.patch [bz#1079455] +- kvm-vpc-Validate-block-size-CVE-2014-0142.patch [bz#1079315] +- kvm-vdi-add-bounds-checks-for-blocks_in_image-and-disk_s.patch [bz#1079455] +- kvm-vhdx-Bounds-checking-for-block_size-and-logical_sect.patch [bz#1079346] +- kvm-curl-check-data-size-before-memcpy-to-local-buffer.-.patch [bz#1079455] +- kvm-qcow2-Check-header_length-CVE-2014-0144.patch [bz#1079455] +- kvm-qcow2-Check-backing_file_offset-CVE-2014-0144.patch [bz#1079455] +- kvm-qcow2-Check-refcount-table-size-CVE-2014-0144.patch [bz#1079455] +- kvm-qcow2-Validate-refcount-table-offset.patch [bz#1066691] +- kvm-qcow2-Validate-snapshot-table-offset-size-CVE-2014-0.patch [bz#1079455] +- kvm-qcow2-Validate-active-L1-table-offset-and-size-CVE-2.patch [bz#1079455] +- kvm-qcow2-Fix-backing-file-name-length-check.patch [bz#1066691] +- kvm-qcow2-Don-t-rely-on-free_cluster_index-in-alloc_refc.patch [bz#1079339] +- kvm-qcow2-Avoid-integer-overflow-in-get_refcount-CVE-201.patch [bz#1079320] +- kvm-qcow2-Check-new-refcount-table-size-on-growth.patch [bz#1066691] +- kvm-qcow2-Fix-types-in-qcow2_alloc_clusters-and-alloc_cl.patch [bz#1066691] +- kvm-qcow2-Protect-against-some-integer-overflows-in-bdrv.patch [bz#1066691] +- kvm-qcow2-Fix-new-L1-table-size-check-CVE-2014-0143.patch [bz#1079320] +- kvm-dmg-coding-style-and-indentation-cleanup.patch [bz#1066691] +- kvm-dmg-prevent-out-of-bounds-array-access-on-terminator.patch [bz#1066691] +- kvm-dmg-drop-broken-bdrv_pread-loop.patch [bz#1066691] +- kvm-dmg-use-appropriate-types-when-reading-chunks.patch [bz#1066691] +- kvm-dmg-sanitize-chunk-length-and-sectorcount-CVE-2014-0.patch [bz#1079325] +- kvm-dmg-use-uint64_t-consistently-for-sectors-and-length.patch [bz#1066691] +- kvm-dmg-prevent-chunk-buffer-overflow-CVE-2014-0145.patch [bz#1079325] +- kvm-block-vdi-bounds-check-qemu-io-tests.patch [bz#1066691] +- kvm-block-Limit-request-size-CVE-2014-0143.patch [bz#1079320] +- kvm-qcow2-Fix-copy_sectors-with-VM-state.patch [bz#1066691] +- kvm-qcow2-Fix-NULL-dereference-in-qcow2_open-error-path-.patch [bz#1079333] +- kvm-qcow2-Fix-L1-allocation-size-in-qcow2_snapshot_load_.patch [bz#1079325] +- kvm-qcow2-Check-maximum-L1-size-in-qcow2_snapshot_load_t.patch [bz#1079320] +- kvm-qcow2-Limit-snapshot-table-size.patch [bz#1066691] +- kvm-parallels-Fix-catalog-size-integer-overflow-CVE-2014.patch [bz#1079320] +- kvm-parallels-Sanity-check-for-s-tracks-CVE-2014-0142.patch [bz#1079315] +- kvm-fix-machine-check-propagation.patch [bz#740107] +- Resolves: bz#1066691 + (qemu-kvm: include leftover patches from block layer security audit) +- Resolves: bz#1079315 + (CVE-2014-0142 qemu-kvm: qemu: crash by possible division by zero [rhel-7.0]) +- Resolves: bz#1079320 + (CVE-2014-0143 qemu-kvm: Qemu: block: multiple integer overflow flaws [rhel-7.0]) +- Resolves: bz#1079325 + (CVE-2014-0145 qemu-kvm: Qemu: prevent possible buffer overflows [rhel-7.0]) +- Resolves: bz#1079333 + (CVE-2014-0146 qemu-kvm: Qemu: qcow2: NULL dereference in qcow2_open() error path [rhel-7.0]) +- Resolves: bz#1079339 + (CVE-2014-0147 qemu-kvm: Qemu: block: possible crash due signed types or logic error [rhel-7.0]) +- Resolves: bz#1079346 + (CVE-2014-0148 qemu-kvm: Qemu: vhdx: bounds checking for block_size and logical_sector_size [rhel-7.0]) +- Resolves: bz#1079455 + (CVE-2014-0144 qemu-kvm: Qemu: block: missing input validation [rhel-7.0]) +- Resolves: bz#740107 + ([Hitachi 7.0 FEAT] KVM: MCA Recovery for KVM guest OS memory) + +* Wed Mar 26 2014 Miroslav Rezanina - 1.5.3-58.el7 +- kvm-pc-Use-cpu64-rhel6-CPU-model-by-default-on-rhel6-mac.patch [bz#1080170] +- kvm-target-i386-Copy-cpu64-rhel6-definition-into-qemu64.patch [bz#1078607 bz#1080170] +- Resolves: bz#1080170 + (intel 82576 VF not work in windows 2008 x86 - Code 12 [TestOnly]) +- Resolves: bz#1080170 + (Default CPU model for rhel6.* machine-types is different from RHEL-6) + +* Fri Mar 21 2014 Miroslav Rezanina - 1.5.3-57.el7 +- kvm-virtio-net-fix-guest-triggerable-buffer-overrun.patch [bz#1078308] +- Resolves: bz#1078308 + (EMBARGOED CVE-2014-0150 qemu: virtio-net: fix guest-triggerable buffer overrun [rhel-7.0]) + +* Fri Mar 21 2014 Miroslav Rezanina - 1.5.3-56.el7 +- kvm-configure-Fix-bugs-preventing-Ceph-inclusion.patch [bz#1078809] +- Resolves: bz#1078809 + (can not boot qemu-kvm-rhev with rbd image) + +* Wed Mar 19 2014 Miroslav Rezanina - 1.5.3-55.el7 +- kvm-scsi-Change-scsi-sense-buf-size-to-252.patch [bz#1058173] +- kvm-scsi-Fix-migration-of-scsi-sense-data.patch [bz#1058173] +- Resolves: bz#1058173 + (qemu-kvm core dump booting guest with scsi-generic disk attached when using built-in iscsi driver) + +* Wed Mar 19 2014 Miroslav Rezanina - 1.5.3-54.el7 +- kvm-qdev-monitor-Set-properties-after-parent-is-assigned.patch [bz#1046248] +- kvm-block-Update-image-size-in-bdrv_invalidate_cache.patch [bz#1048575] +- kvm-qcow2-Keep-option-in-qcow2_invalidate_cache.patch [bz#1048575] +- kvm-qcow2-Check-bs-drv-in-copy_sectors.patch [bz#1048575] +- kvm-block-bs-drv-may-be-NULL-in-bdrv_debug_resume.patch [bz#1048575] +- kvm-iotests-Test-corruption-during-COW-request.patch [bz#1048575] +- Resolves: bz#1046248 + (qemu-kvm crash when send "info qtree" after hot plug a device with invalid addr) +- Resolves: bz#1048575 + (Segmentation fault occurs after migrate guest(use scsi disk and add stress) to des machine) + +* Wed Mar 12 2014 Miroslav Rezanina - 1.5.3-53.el7 +- kvm-dataplane-Fix-startup-race.patch [bz#1069541] +- kvm-QMP-Relax-__com.redhat_drive_add-parameter-checking.patch [bz#1057471] +- kvm-all-exit-in-case-max-vcpus-exceeded.patch [bz#993429] +- kvm-block-gluster-code-movements-state-storage-changes.patch [bz#1031526] +- kvm-block-gluster-add-reopen-support.patch [bz#1031526] +- kvm-virtio-net-add-feature-bit-for-any-header-s-g.patch [bz#990989] +- kvm-spec-Add-README.rhel6-gpxe-source.patch [bz#1073774] +- kvm-pc-Add-RHEL6-e1000-gPXE-image.patch [bz#1073774] +- kvm-loader-rename-in_ram-has_mr.patch [bz#1064018] +- kvm-pc-avoid-duplicate-names-for-ROM-MRs.patch [bz#1064018] +- kvm-qemu-img-convert-Fix-progress-output.patch [bz#1073728] +- kvm-qemu-iotests-Test-progress-output-for-conversion.patch [bz#1073728] +- kvm-iscsi-Use-bs-sg-for-everything-else-than-disks.patch [bz#1067784] +- kvm-block-Fix-bs-request_alignment-assertion-for-bs-sg-1.patch [bz#1067784] +- kvm-qemu_file-use-fwrite-correctly.patch [bz#1005103] +- kvm-qemu_file-Fix-mismerge-of-use-fwrite-correctly.patch [bz#1005103] +- Resolves: bz#1005103 + (Migration should fail when migrate guest offline to a file which is specified to a readonly directory.) +- Resolves: bz#1031526 + (Can not commit snapshot when disk is using glusterfs:native backend) +- Resolves: bz#1057471 + (fail to do hot-plug with "discard = on" with "Invalid parameter 'discard'" error) +- Resolves: bz#1064018 + (abort from conflicting genroms) +- Resolves: bz#1067784 + (qemu-kvm: block.c:850: bdrv_open_common: Assertion `bs->request_alignment != 0' failed. Aborted (core dumped)) +- Resolves: bz#1069541 + (Segmentation fault when boot guest with dataplane=on) +- Resolves: bz#1073728 + (progress bar doesn't display when converting with -p) +- Resolves: bz#1073774 + (e1000 ROM cause migrate fail from RHEL6.5 host to RHEL7.0 host) +- Resolves: bz#990989 + (backport inline header virtio-net optimization) +- Resolves: bz#993429 + (kvm: test maximum number of vcpus supported (rhel7)) + +* Wed Mar 05 2014 Miroslav Rezanina - 1.5.3-52.el7 +- kvm-target-i386-Move-hyperv_-static-globals-to-X86CPU.patch [bz#1004773] +- kvm-Fix-uninitialized-cpuid_data.patch [bz#1057173] +- kvm-fix-coexistence-of-KVM-and-Hyper-V-leaves.patch [bz#1004773] +- kvm-make-availability-of-Hyper-V-enlightenments-depe.patch [bz#1004773] +- kvm-make-hyperv-hypercall-and-guest-os-id-MSRs-migra.patch [bz#1004773] +- kvm-make-hyperv-vapic-assist-page-migratable.patch [bz#1004773] +- kvm-target-i386-Convert-hv_relaxed-to-static-property.patch [bz#1057173] +- kvm-target-i386-Convert-hv_vapic-to-static-property.patch [bz#1057173] +- kvm-target-i386-Convert-hv_spinlocks-to-static-property.patch [bz#1057173] +- kvm-target-i386-Convert-check-and-enforce-to-static-prop.patch [bz#1004773] +- kvm-target-i386-Cleanup-foo-feature-handling.patch [bz#1057173] +- kvm-add-support-for-hyper-v-timers.patch [bz#1057173] +- Resolves: bz#1004773 + (Hyper-V guest OS id and hypercall MSRs not migrated) +- Resolves: bz#1057173 + (KVM Hyper-V Enlightenment - New feature - hv-time (QEMU)) + +* Wed Mar 05 2014 Miroslav Rezanina - 1.5.3-51.el7 +- kvm-qmp-access-the-local-QemuOptsLists-for-drive-option.patch [bz#1026184] +- kvm-qxl-add-sanity-check.patch [bz#751937] +- kvm-Fix-two-XBZRLE-corruption-issues.patch [bz#1063417] +- kvm-qdev-monitor-set-DeviceState-opts-before-calling-rea.patch [bz#1037956] +- kvm-vfio-blacklist-loading-of-unstable-roms.patch [bz#1037956] +- kvm-block-Set-block-filename-sizes-to-PATH_MAX-instead-o.patch [bz#1072339] +- Resolves: bz#1026184 + (QMP: querying -drive option returns a NULL parameter list) +- Resolves: bz#1037956 + (bnx2x: boot one guest to do vfio-pci with all PFs assigned in same group meet QEMU segmentation fault (Broadcom BCM57810 card)) +- Resolves: bz#1063417 + (google stressapptest vs Migration) +- Resolves: bz#1072339 + (RHEV: Cannot start VMs that have more than 23 snapshots.) +- Resolves: bz#751937 + (qxl triggers assert during iofuzz test) + +* Wed Feb 26 2014 Miroslav Rezanina - 1.5.3-50.el7 +- kvm-mempath-prefault-fix-off-by-one-error.patch [bz#1069039] +- kvm-qemu-option-has_help_option-and-is_valid_option_list.patch [bz#1065873] +- kvm-qemu-img-create-Support-multiple-o-options.patch [bz#1065873] +- kvm-qemu-img-convert-Support-multiple-o-options.patch [bz#1065873] +- kvm-qemu-img-amend-Support-multiple-o-options.patch [bz#1065873] +- kvm-qemu-img-Allow-o-help-with-incomplete-argument-list.patch [bz#1065873] +- kvm-qemu-iotests-Check-qemu-img-command-line-parsing.patch [bz#1065873] +- Resolves: bz#1065873 + (qemu-img silently ignores options with multiple -o parameters) +- Resolves: bz#1069039 + (-mem-prealloc option behaviour is opposite to expected) + +* Wed Feb 19 2014 Miroslav Rezanina - 1.5.3-49.el7 +- kvm-xhci-add-support-for-suspend-resume.patch [bz#1012365] +- kvm-qcow2-remove-n_start-and-n_end-of-qcow2_alloc_cluste.patch [bz#1049176] +- kvm-qcow2-fix-offset-overflow-in-qcow2_alloc_clusters_at.patch [bz#1049176] +- kvm-qcow2-check-for-NULL-l2meta.patch [bz#1055848] +- kvm-qemu-iotests-add-test-for-qcow2-preallocation-with-d.patch [bz#1055848] +- Resolves: bz#1012365 + (xhci usb storage lost in guest after wakeup from S3) +- Resolves: bz#1049176 + (qemu-img core dump when using "-o preallocation=metadata,cluster_size=2048k" to create image of libiscsi lun) +- Resolves: bz#1055848 + (qemu-img core dumped when cluster size is larger than the default value with opreallocation=metadata specified) + +* Mon Feb 17 2014 Miroslav Rezanina - 1.5.3-48.el7 +- kvm-spec-disable-qom-cast-debug.patch [bz#1063942] +- kvm-fix-guest-physical-bits-to-match-host-to-go-beyond-1.patch [bz#989677] +- kvm-monitor-Cleanup-mon-outbuf-on-write-error.patch [bz#1065225] +- Resolves: bz#1063942 + (configure qemu-kvm with --disable-qom-cast-debug) +- Resolves: bz#1065225 + (QMP socket breaks on unexpected close) +- Resolves: bz#989677 + ([HP 7.0 FEAT]: Increase KVM guest supported memory to 4TiB) + +* Wed Feb 12 2014 Miroslav Rezanina - 1.5.3-47.el7 +- kvm-seccomp-add-mkdir-and-fchmod-to-the-whitelist.patch [bz#1026314] +- kvm-seccomp-add-some-basic-shared-memory-syscalls-to-the.patch [bz#1026314] +- kvm-scsi-Support-TEST-UNIT-READY-in-the-dummy-LUN0.patch [bz#1004143] +- kvm-usb-add-vendor-request-defines.patch [bz#1039530] +- kvm-usb-move-usb_-hi-lo-helpers-to-header-file.patch [bz#1039530] +- kvm-usb-add-support-for-microsoft-os-descriptors.patch [bz#1039530] +- kvm-usb-add-microsoft-os-descriptors-compat-property.patch [bz#1039530] +- kvm-usb-hid-add-microsoft-os-descriptor-support.patch [bz#1039530] +- kvm-configure-add-option-to-disable-fstack-protect.patch [bz#1044182] +- kvm-exec-always-use-MADV_DONTFORK.patch [bz#1004197] +- kvm-pc-Save-size-of-RAM-below-4GB.patch [bz#1048080] +- kvm-acpi-Fix-PCI-hole-handling-on-build_srat.patch [bz#1048080] +- kvm-Add-check-for-cache-size-smaller-than-page-size.patch [bz#1017096] +- kvm-XBZRLE-cache-size-should-not-be-larger-than-guest-me.patch [bz#1047448] +- kvm-Don-t-abort-on-out-of-memory-when-creating-page-cach.patch [bz#1047448] +- kvm-Don-t-abort-on-memory-allocation-error.patch [bz#1047448] +- kvm-Set-xbzrle-buffers-to-NULL-after-freeing-them-to-avo.patch [bz#1038540] +- kvm-migration-fix-free-XBZRLE-decoded_buf-wrong.patch [bz#1038540] +- kvm-block-resize-backing-file-image-during-offline-commi.patch [bz#1047254] +- kvm-block-resize-backing-image-during-active-layer-commi.patch [bz#1047254] +- kvm-block-update-block-commit-documentation-regarding-im.patch [bz#1047254] +- kvm-block-Fix-bdrv_commit-return-value.patch [bz#1047254] +- kvm-block-remove-QED-.bdrv_make_empty-implementation.patch [bz#1047254] +- kvm-block-remove-qcow2-.bdrv_make_empty-implementation.patch [bz#1047254] +- kvm-qemu-progress-Drop-unused-include.patch [bz#997878] +- kvm-qemu-progress-Fix-progress-printing-on-SIGUSR1.patch [bz#997878] +- kvm-Documentation-qemu-img-Mention-SIGUSR1-progress-repo.patch [bz#997878] +- Resolves: bz#1004143 + ("test unit ready failed" on LUN 0 delays boot when a virtio-scsi target does not have any disk on LUN 0) +- Resolves: bz#1004197 + (Cannot hot-plug nic in windows VM when the vmem is larger) +- Resolves: bz#1017096 + (Fail to migrate while the size of migrate-compcache less then 4096) +- Resolves: bz#1026314 + (qemu-kvm hang when use '-sandbox on'+'vnc'+'hda') +- Resolves: bz#1038540 + (qemu-kvm aborted while cancel migration then restart it (with page delta compression)) +- Resolves: bz#1039530 + (add support for microsoft os descriptors) +- Resolves: bz#1044182 + (Relax qemu-kvm stack protection to -fstack-protector-strong) +- Resolves: bz#1047254 + (qemu-img failed to commit image) +- Resolves: bz#1047448 + (qemu-kvm core dump in src host when do migration with "migrate_set_capability xbzrle on and migrate_set_cache_size 10000G") +- Resolves: bz#1048080 + (Qemu-kvm NUMA emulation failed) +- Resolves: bz#997878 + (Kill -SIGUSR1 `pidof qemu-img convert` can not get progress of qemu-img) + +* Wed Feb 12 2014 Miroslav Rezanina - 1.5.3-46.el7 +- kvm-block-fix-backing-file-segfault.patch [bz#748906] +- kvm-block-Move-initialisation-of-BlockLimits-to-bdrv_ref.patch [bz#748906] +- kvm-raw-Fix-BlockLimits-passthrough.patch [bz#748906] +- kvm-block-Inherit-opt_transfer_length.patch [bz#748906] +- kvm-block-Update-BlockLimits-when-they-might-have-change.patch [bz#748906] +- kvm-qemu_memalign-Allow-small-alignments.patch [bz#748906] +- kvm-block-Detect-unaligned-length-in-bdrv_qiov_is_aligne.patch [bz#748906] +- kvm-block-Don-t-use-guest-sector-size-for-qemu_blockalig.patch [bz#748906] +- kvm-block-rename-buffer_alignment-to-guest_block_size.patch [bz#748906] +- kvm-raw-Probe-required-direct-I-O-alignment.patch [bz#748906] +- kvm-block-Introduce-bdrv_aligned_preadv.patch [bz#748906] +- kvm-block-Introduce-bdrv_co_do_preadv.patch [bz#748906] +- kvm-block-Introduce-bdrv_aligned_pwritev.patch [bz#748906] +- kvm-block-write-Handle-COR-dependency-after-I-O-throttli.patch [bz#748906] +- kvm-block-Introduce-bdrv_co_do_pwritev.patch [bz#748906] +- kvm-block-Switch-BdrvTrackedRequest-to-byte-granularity.patch [bz#748906] +- kvm-block-Allow-waiting-for-overlapping-requests-between.patch [bz#748906] +- kvm-block-use-DIV_ROUND_UP-in-bdrv_co_do_readv.patch [bz#748906] +- kvm-block-Make-zero-after-EOF-work-with-larger-alignment.patch [bz#748906] +- kvm-block-Generalise-and-optimise-COR-serialisation.patch [bz#748906] +- kvm-block-Make-overlap-range-for-serialisation-dynamic.patch [bz#748906] +- kvm-block-Fix-32-bit-truncation-in-mark_request_serialis.patch [bz#748906] +- kvm-block-Allow-wait_serialising_requests-at-any-point.patch [bz#748906] +- kvm-block-Align-requests-in-bdrv_co_do_pwritev.patch [bz#748906] +- kvm-lock-Fix-memory-leaks-in-bdrv_co_do_pwritev.patch [bz#748906] +- kvm-block-Assert-serialisation-assumptions-in-pwritev.patch [bz#748906] +- kvm-block-Change-coroutine-wrapper-to-byte-granularity.patch [bz#748906] +- kvm-block-Make-bdrv_pread-a-bdrv_prwv_co-wrapper.patch [bz#748906] +- kvm-block-Make-bdrv_pwrite-a-bdrv_prwv_co-wrapper.patch [bz#748906] +- kvm-iscsi-Set-bs-request_alignment.patch [bz#748906] +- kvm-blkdebug-Make-required-alignment-configurable.patch [bz#748906] +- kvm-blkdebug-Don-t-leak-bs-file-on-failure.patch [bz#748906] +- kvm-qemu-io-New-command-sleep.patch [bz#748906] +- kvm-qemu-iotests-Filter-out-qemu-io-prompt.patch [bz#748906] +- kvm-qemu-iotests-Test-pwritev-RMW-logic.patch [bz#748906] +- kvm-block-bdrv_aligned_pwritev-Assert-overlap-range.patch [bz#748906] +- kvm-block-Don-t-call-ROUND_UP-with-negative-values.patch [bz#748906] +- Resolves: bz#748906 + (qemu fails on disk with 4k sectors and cache=off) + +* Wed Feb 05 2014 Miroslav Rezanina - 1.5.3-45.el7 +- kvm-vfio-pci-Fail-initfn-on-DMA-mapping-errors.patch [bz#1044815] +- kvm-vfio-Destroy-memory-regions.patch [bz#1052030] +- kvm-docs-qcow2-compat-1.1-is-now-the-default.patch [bz#1048092] +- kvm-hda-codec-disable-streams-on-reset.patch [bz#947812] +- kvm-QEMUBH-make-AioContext-s-bh-re-entrant.patch [bz#1009297] +- kvm-qxl-replace-pipe-signaling-with-bottom-half.patch [bz#1009297] +- Resolves: bz#1009297 + (RHEL7.0 guest gui can not be used in dest host after migration) +- Resolves: bz#1044815 + (vfio initfn succeeds even if IOMMU mappings fail) +- Resolves: bz#1048092 + (manpage of qemu-img contains error statement about compat option) +- Resolves: bz#1052030 + (src qemu-kvm core dump after hotplug/unhotplug GPU device and do local migration) +- Resolves: bz#947812 + (There's a shot voice after 'system_reset' during playing music inside rhel6 guest w/ intel-hda device) + +* Wed Jan 29 2014 Miroslav Rezanina - 1.5.3-44.el7 +- kvm-Partially-revert-rhel-Drop-cfi.pflash01-and-isa-ide-.patch [bz#1032346] +- kvm-Revert-pc-Disable-the-use-flash-device-for-BIOS-unle.patch [bz#1032346] +- kvm-memory-Replace-open-coded-memory_region_is_romd.patch [bz#1032346] +- kvm-memory-Rename-readable-flag-to-romd_mode.patch [bz#1032346] +- kvm-isapc-Fix-non-KVM-qemu-boot-read-write-memory-for-is.patch [bz#1032346] +- kvm-add-kvm_readonly_mem_enabled.patch [bz#1032346] +- kvm-support-using-KVM_MEM_READONLY-flag-for-regions.patch [bz#1032346] +- kvm-pc_sysfw-allow-flash-pflash-memory-to-be-used-with-K.patch [bz#1032346] +- kvm-fix-double-free-the-memslot-in-kvm_set_phys_mem.patch [bz#1032346] +- kvm-sysfw-remove-read-only-pc_sysfw_flash_vs_rom_bug_com.patch [bz#1032346] +- kvm-pc_sysfw-remove-the-rom_only-property.patch [bz#1032346] +- kvm-pc_sysfw-do-not-make-it-a-device-anymore.patch [bz#1032346] +- kvm-hw-i386-pc_sysfw-support-two-flash-drives.patch [bz#1032346] +- kvm-i440fx-test-qtest_start-should-be-paired-with-qtest_.patch [bz#1032346] +- kvm-i440fx-test-give-each-GTest-case-its-own-qtest.patch [bz#1032346] +- kvm-i440fx-test-generate-temporary-firmware-blob.patch [bz#1032346] +- kvm-i440fx-test-verify-firmware-under-4G-and-1M-both-bio.patch [bz#1032346] +- kvm-piix-fix-32bit-pci-hole.patch [bz#1032346] +- kvm-qapi-Add-backing-to-BlockStats.patch [bz#1041564] +- kvm-pc-Disable-RDTSCP-unconditionally-on-rhel6.-machine-.patch [bz#918907] +- kvm-pc-Disable-RDTSCP-on-AMD-CPU-models.patch [bz#1056428 bz#874400] +- kvm-block-add-.bdrv_reopen_prepare-stub-for-iscsi.patch [bz#1030301] +- Resolves: bz#1030301 + (qemu-img can not merge live snapshot to backing file(r/w backing file via libiscsi)) +- Resolves: bz#1032346 + (basic OVMF support (non-volatile UEFI variables in flash, and fixup for ACPI tables)) +- Resolves: bz#1041564 + ([NFR] qemu: Returning the watermark for all the images opened for writing) +- Resolves: bz#1056428 + ("rdtscp" flag defined on Opteron_G5 model and cann't be exposed to guest) +- Resolves: bz#874400 + ("rdtscp" flag defined on Opteron_G5 model and cann't be exposed to guest) +- Resolves: bz#918907 + (provide backwards-compatible RHEL specific machine types in QEMU - CPU features) + +* Mon Jan 27 2014 Miroslav Rezanina - 1.5.3-43.el7 +- kvm-piix-gigabyte-alignment-for-ram.patch [bz#1026548] +- kvm-pc_piix-document-gigabyte_align.patch [bz#1026548] +- kvm-q35-gigabyle-alignment-for-ram.patch [bz#1026548] +- kvm-virtio-bus-remove-vdev-field.patch [bz#983344] +- kvm-virtio-pci-remove-vdev-field.patch [bz#983344] +- kvm-virtio-bus-cleanup-plug-unplug-interface.patch [bz#983344] +- kvm-virtio-blk-switch-exit-callback-to-VirtioDeviceClass.patch [bz#983344] +- kvm-virtio-serial-switch-exit-callback-to-VirtioDeviceCl.patch [bz#983344] +- kvm-virtio-net-switch-exit-callback-to-VirtioDeviceClass.patch [bz#983344] +- kvm-virtio-scsi-switch-exit-callback-to-VirtioDeviceClas.patch [bz#983344] +- kvm-virtio-balloon-switch-exit-callback-to-VirtioDeviceC.patch [bz#983344] +- kvm-virtio-rng-switch-exit-callback-to-VirtioDeviceClass.patch [bz#983344] +- kvm-virtio-pci-add-device_unplugged-callback.patch [bz#983344] +- kvm-block-use-correct-filename-for-error-report.patch [bz#1051438] +- Resolves: bz#1026548 + (i386: pc: align gpa<->hpa on 1GB boundary) +- Resolves: bz#1051438 + (Error message contains garbled characters when unable to open image due to bad permissions (permission denied).) +- Resolves: bz#983344 + (QEMU core dump and host will reboot when do hot-unplug a virtio-blk disk which use the switch behind switch) + +* Fri Jan 24 2014 Daniel Mach - 10:1.5.3-42 +- Mass rebuild 2014-01-24 + +* Wed Jan 22 2014 Miroslav Rezanina - 1.5.3-41.el7 +- kvm-help-add-id-suboption-to-iscsi.patch [bz#1019221] +- kvm-scsi-disk-add-UNMAP-limits-to-block-limits-VPD-page.patch [bz#1037503] +- kvm-qdev-Fix-32-bit-compilation-in-print_size.patch [bz#1034876] +- kvm-qdev-Use-clz-in-print_size.patch [bz#1034876] +- Resolves: bz#1019221 + (Iscsi miss id sub-option in help output) +- Resolves: bz#1034876 + (export acpi tables to guests) +- Resolves: bz#1037503 + (fix thin provisioning support for block device backends) + +* Wed Jan 22 2014 Miroslav Rezanina - 1.5.3-40.el7 +- kvm-avoid-a-bogus-COMPLETED-CANCELLED-transition.patch [bz#1053699] +- kvm-introduce-MIG_STATE_CANCELLING-state.patch [bz#1053699] +- kvm-vvfat-use-bdrv_new-to-allocate-BlockDriverState.patch [bz#1041301] +- kvm-block-implement-reference-count-for-BlockDriverState.patch [bz#1041301] +- kvm-block-make-bdrv_delete-static.patch [bz#1041301] +- kvm-migration-omit-drive-ref-as-we-have-bdrv_ref-now.patch [bz#1041301] +- kvm-xen_disk-simplify-blk_disconnect-with-refcnt.patch [bz#1041301] +- kvm-nbd-use-BlockDriverState-refcnt.patch [bz#1041301] +- kvm-block-use-BDS-ref-for-block-jobs.patch [bz#1041301] +- kvm-block-Make-BlockJobTypes-const.patch [bz#1041301] +- kvm-blockjob-rename-BlockJobType-to-BlockJobDriver.patch [bz#1041301] +- kvm-qapi-Introduce-enum-BlockJobType.patch [bz#1041301] +- kvm-qapi-make-use-of-new-BlockJobType.patch [bz#1041301] +- kvm-mirror-Don-t-close-target.patch [bz#1041301] +- kvm-mirror-Move-base-to-MirrorBlockJob.patch [bz#1041301] +- kvm-block-Add-commit_active_start.patch [bz#1041301] +- kvm-commit-Support-commit-active-layer.patch [bz#1041301] +- kvm-qemu-iotests-prefill-some-data-to-test-image.patch [bz#1041301] +- kvm-qemu-iotests-Update-test-cases-for-commit-active.patch [bz#1041301] +- kvm-commit-Remove-unused-check.patch [bz#1041301] +- kvm-blockdev-use-bdrv_getlength-in-qmp_drive_mirror.patch [bz#921890] +- kvm-qemu-iotests-make-assert_no_active_block_jobs-common.patch [bz#921890] +- kvm-block-drive-mirror-Check-for-NULL-backing_hd.patch [bz#921890] +- kvm-qemu-iotests-Extend-041-for-unbacked-mirroring.patch [bz#921890] +- kvm-qapi-schema-Update-description-for-NewImageMode.patch [bz#921890] +- kvm-block-drive-mirror-Reuse-backing-HD-for-sync-none.patch [bz#921890] +- kvm-qemu-iotests-Fix-test-041.patch [bz#921890] +- kvm-scsi-bus-fix-transfer-length-and-direction-for-VERIF.patch [bz#1035644] +- kvm-scsi-disk-fix-VERIFY-emulation.patch [bz#1035644] +- kvm-block-ensure-bdrv_drain_all-works-during-bdrv_delete.patch [bz#1041301] +- kvm-use-recommended-max-vcpu-count.patch [bz#998708] +- kvm-pc-Create-pc_compat_rhel-functions.patch [bz#1049706] +- kvm-pc-Enable-x2apic-by-default-on-more-recent-CPU-model.patch [bz#1049706] +- kvm-Build-all-subpackages-for-RHEV.patch [bz#1007204] +- Resolves: bz#1007204 + (qemu-img-rhev qemu-kvm-rhev-tools are not built for qemu-kvm-1.5.3-3.el7) +- Resolves: bz#1035644 + (rhel7.0host + windows guest + virtio-win + 'chkdsk' in the guest gives qemu assertion in scsi_dma_complete) +- Resolves: bz#1041301 + (live snapshot merge (commit) of the active layer) +- Resolves: bz#1049706 + (MIss CPUID_EXT_X2APIC in Westmere cpu model) +- Resolves: bz#1053699 + (Backport Cancelled race condition fixes) +- Resolves: bz#921890 + (Core dump when block mirror with "sync" is "none" and mode is "absolute-paths") +- Resolves: bz#998708 + (qemu-kvm: maximum vcpu should be recommended maximum) + +* Tue Jan 21 2014 Miroslav Rezanina - 1.5.3-39.el7 +- kvm-Revert-qdev-monitor-Fix-crash-when-device_add-is-cal.patch [bz#669524] +- kvm-Revert-qdev-Do-not-let-the-user-try-to-device_add-wh.patch [bz#669524] +- kvm-qdev-monitor-Clean-up-qdev_device_add-variable-namin.patch [bz#669524] +- kvm-qdev-monitor-Fix-crash-when-device_add-is-called.2.patch.patch [bz#669524] +- kvm-qdev-monitor-Avoid-qdev-as-variable-name.patch [bz#669524] +- kvm-qdev-monitor-Inline-qdev_init-for-device_add.patch [bz#669524] +- kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it.2.patch.patch [bz#669524] +- kvm-qdev-monitor-Avoid-device_add-crashing-on-non-device.patch [bz#669524] +- kvm-qdev-monitor-Improve-error-message-for-device-nonexi.patch [bz#669524] +- kvm-exec-change-well-known-physical-sections-to-macros.patch [bz#1003535] +- kvm-exec-separate-sections-and-nodes-per-address-space.patch [bz#1003535] +- Resolves: bz#1003535 + (qemu-kvm core dump when boot vm with more than 32 virtio disks/nics) +- Resolves: bz#669524 + (Confusing error message from -device ) + +* Fri Jan 17 2014 Miroslav Rezanina - 1.5.3-38.el7 +- kvm-intel-hda-fix-position-buffer.patch [bz#947785] +- kvm-The-calculation-of-bytes_xfer-in-qemu_put_buffer-is-.patch [bz#1003467] +- kvm-migration-Fix-rate-limit.patch [bz#1003467] +- kvm-audio-honor-QEMU_AUDIO_TIMER_PERIOD-instead-of-wakin.patch [bz#1017636] +- kvm-audio-Lower-default-wakeup-rate-to-100-times-second.patch [bz#1017636] +- kvm-audio-adjust-pulse-to-100Hz-wakeup-rate.patch [bz#1017636] +- kvm-pc-Fix-rhel6.-3dnow-3dnowext-compat-bits.patch [bz#918907] +- kvm-add-firmware-to-machine-options.patch [bz#1038603] +- kvm-switch-rhel7-machine-types-to-big-bios.patch [bz#1038603] +- kvm-add-bios-256k.bin-from-seabios-bin-1.7.2.2-10.el7.no.patch [bz#1038603] +- kvm-pci-fix-pci-bridge-fw-path.patch [bz#1034518] +- kvm-hw-cannot_instantiate_with_device_add_yet-due-to-poi.patch [bz#1031098] +- kvm-qdev-Document-that-pointer-properties-kill-device_ad.patch [bz#1031098] +- kvm-Add-back-no-hpet-but-ignore-it.patch [bz#1044742] +- Resolves: bz#1003467 + (Backport migration fixes from post qemu 1.6) +- Resolves: bz#1017636 + (PATCH: fix qemu using 50% host cpu when audio is playing) +- Resolves: bz#1031098 + (Disable device smbus-eeprom) +- Resolves: bz#1034518 + (boot order wrong with q35) +- Resolves: bz#1038603 + (make seabios 256k for rhel7 machine types) +- Resolves: bz#1044742 + (Cannot create guest on remote RHEL7 host using F20 virt-manager, libvirt's qemu -no-hpet detection is broken) +- Resolves: bz#918907 + (provide backwards-compatible RHEL specific machine types in QEMU - CPU features) +- Resolves: bz#947785 + (In rhel6.4 guest sound recorder doesn't work when playing audio) + +* Wed Jan 15 2014 Miroslav Rezanina - 1.5.3-37.el7 +- kvm-bitmap-use-long-as-index.patch [bz#997559] +- kvm-memory-cpu_physical_memory_set_dirty_flags-result-is.patch [bz#997559] +- kvm-memory-cpu_physical_memory_set_dirty_range-return-vo.patch [bz#997559] +- kvm-exec-use-accessor-function-to-know-if-memory-is-dirt.patch [bz#997559] +- kvm-memory-create-function-to-set-a-single-dirty-bit.patch [bz#997559] +- kvm-exec-drop-useless-if.patch [bz#997559] +- kvm-exec-create-function-to-get-a-single-dirty-bit.patch [bz#997559] +- kvm-memory-make-cpu_physical_memory_is_dirty-return-bool.patch [bz#997559] +- kvm-memory-all-users-of-cpu_physical_memory_get_dirty-us.patch [bz#997559] +- kvm-memory-set-single-dirty-flags-when-possible.patch [bz#997559] +- kvm-memory-cpu_physical_memory_set_dirty_range-always-di.patch [bz#997559] +- kvm-memory-cpu_physical_memory_mask_dirty_range-always-c.patch [bz#997559] +- kvm-memory-use-bit-2-for-migration.patch [bz#997559] +- kvm-memory-make-sure-that-client-is-always-inside-range.patch [bz#997559] +- kvm-memory-only-resize-dirty-bitmap-when-memory-size-inc.patch [bz#997559] +- kvm-memory-cpu_physical_memory_clear_dirty_flag-result-i.patch [bz#997559] +- kvm-bitmap-Add-bitmap_zero_extend-operation.patch [bz#997559] +- kvm-memory-split-dirty-bitmap-into-three.patch [bz#997559] +- kvm-memory-unfold-cpu_physical_memory_clear_dirty_flag-i.patch [bz#997559] +- kvm-memory-unfold-cpu_physical_memory_set_dirty-in-its-o.patch [bz#997559] +- kvm-memory-unfold-cpu_physical_memory_set_dirty_flag.patch [bz#997559] +- kvm-memory-make-cpu_physical_memory_get_dirty-the-main-f.patch [bz#997559] +- kvm-memory-cpu_physical_memory_get_dirty-is-used-as-retu.patch [bz#997559] +- kvm-memory-s-mask-clear-cpu_physical_memory_mask_dirty_r.patch [bz#997559] +- kvm-memory-use-find_next_bit-to-find-dirty-bits.patch [bz#997559] +- kvm-memory-cpu_physical_memory_set_dirty_range-now-uses-.patch [bz#997559] +- kvm-memory-cpu_physical_memory_clear_dirty_range-now-use.patch [bz#997559] +- kvm-memory-s-dirty-clean-in-cpu_physical_memory_is_dirty.patch [bz#997559] +- kvm-memory-make-cpu_physical_memory_reset_dirty-take-a-l.patch [bz#997559] +- kvm-exec-Remove-unused-global-variable-phys_ram_fd.patch [bz#997559] +- kvm-memory-cpu_physical_memory_set_dirty_tracking-should.patch [bz#997559] +- kvm-memory-move-private-types-to-exec.c.patch [bz#997559] +- kvm-memory-split-cpu_physical_memory_-functions-to-its-o.patch [bz#997559] +- kvm-memory-unfold-memory_region_test_and_clear.patch [bz#997559] +- kvm-use-directly-cpu_physical_memory_-api-for-tracki.patch [bz#997559] +- kvm-refactor-start-address-calculation.patch [bz#997559] +- kvm-memory-move-bitmap-synchronization-to-its-own-functi.patch [bz#997559] +- kvm-memory-syncronize-kvm-bitmap-using-bitmaps-operation.patch [bz#997559] +- kvm-ram-split-function-that-synchronizes-a-range.patch [bz#997559] +- kvm-migration-synchronize-memory-bitmap-64bits-at-a-time.patch [bz#997559] +- Resolves: bz#997559 + (Improve live migration bitmap handling) + +* Tue Jan 14 2014 Miroslav Rezanina - 1.5.3-36.el7 +- kvm-Add-support-statement-to-help-output.patch [bz#972773] +- kvm-__com.redhat_qxl_screendump-add-docs.patch [bz#903910] +- kvm-vl-Round-memory-sizes-below-2MiB-up-to-2MiB.patch [bz#999836] +- kvm-seccomp-exit-if-seccomp_init-fails.patch [bz#1044845] +- kvm-redhat-qemu-kvm.spec-require-python-for-build.patch [bz#1034876] +- kvm-redhat-qemu-kvm.spec-require-iasl.patch [bz#1034876] +- kvm-configure-make-iasl-option-actually-work.patch [bz#1034876] +- kvm-redhat-qemu-kvm.spec-add-cpp-as-build-dependency.patch [bz#1034876] +- kvm-acpi-build-disable-with-no-acpi.patch [bz#1045386] +- kvm-ehci-implement-port-wakeup.patch [bz#1039513] +- kvm-qdev-monitor-Fix-crash-when-device_add-is-called-wit.patch [bz#1026712 bz#1046007] +- kvm-block-vhdx-improve-error-message-and-.bdrv_check-imp.patch [bz#1035001] +- kvm-docs-updated-qemu-img-man-page-and-qemu-doc-to-refle.patch [bz#1017650] +- kvm-enable-pvticketlocks-by-default.patch [bz#1052340] +- kvm-fix-boot-strict-regressed-in-commit-6ef4716.patch [bz#997817] +- kvm-vl-make-boot_strict-variable-static-not-used-outside.patch [bz#997817] +- Resolves: bz#1017650 + (need to update qemu-img man pages on "VHDX" format) +- Resolves: bz#1026712 + (Qemu core dumpd when boot guest with driver name as "virtio-pci") +- Resolves: bz#1034876 + (export acpi tables to guests) +- Resolves: bz#1035001 + (VHDX: journal log should not be replayed by default, but rather via qemu-img check -r all) +- Resolves: bz#1039513 + (backport remote wakeup for ehci) +- Resolves: bz#1044845 + (QEMU seccomp sandbox - exit if seccomp_init() fails) +- Resolves: bz#1045386 + (qemu-kvm: hw/i386/acpi-build.c:135: acpi_get_pm_info: Assertion `obj' failed.) +- Resolves: bz#1046007 + (qemu-kvm aborted when hot plug PCI device to guest with romfile and rombar=0) +- Resolves: bz#1052340 + (pvticketlocks: default on) +- Resolves: bz#903910 + (RHEL7 does not have equivalent functionality for __com.redhat_qxl_screendump) +- Resolves: bz#972773 + (RHEL7: Clarify support statement in KVM help) +- Resolves: bz#997817 + (-boot order and -boot once regressed since RHEL-6) +- Resolves: bz#999836 + (-m 1 crashes) + +* Thu Jan 09 2014 Miroslav Rezanina - 1.5.3-35.el7 +- kvm-option-Add-assigned-flag-to-QEMUOptionParameter.patch [bz#1033490] +- kvm-qcow2-refcount-Snapshot-update-for-zero-clusters.patch [bz#1033490] +- kvm-qemu-iotests-Snapshotting-zero-clusters.patch [bz#1033490] +- kvm-block-Image-file-option-amendment.patch [bz#1033490] +- kvm-qcow2-cache-Empty-cache.patch [bz#1033490] +- kvm-qcow2-cluster-Expand-zero-clusters.patch [bz#1033490] +- kvm-qcow2-Save-refcount-order-in-BDRVQcowState.patch [bz#1033490] +- kvm-qcow2-Implement-bdrv_amend_options.patch [bz#1033490] +- kvm-qcow2-Correct-bitmap-size-in-zero-expansion.patch [bz#1033490] +- kvm-qcow2-Free-only-newly-allocated-clusters-on-error.patch [bz#1033490] +- kvm-qcow2-Add-missing-space-in-error-message.patch [bz#1033490] +- kvm-qemu-iotest-qcow2-image-option-amendment.patch [bz#1033490] +- kvm-qemu-iotests-New-test-case-in-061.patch [bz#1033490] +- kvm-qemu-iotests-Preallocated-zero-clusters-in-061.patch [bz#1033490] +- Resolves: bz#1033490 + (Cannot upgrade/downgrade qcow2 images) + +* Wed Jan 08 2014 Miroslav Rezanina - 1.5.3-34.el7 +- kvm-block-stream-Don-t-stream-unbacked-devices.patch [bz#965636] +- kvm-qemu-io-Let-open-pass-options-to-block-driver.patch [bz#1004347] +- kvm-qcow2.py-Subcommand-for-changing-header-fields.patch [bz#1004347] +- kvm-qemu-iotests-Remaining-error-propagation-adjustments.patch [bz#1004347] +- kvm-qemu-iotests-Add-test-for-inactive-L2-overlap.patch [bz#1004347] +- kvm-qemu-iotests-Adjust-test-result-039.patch [bz#1004347] +- kvm-virtio-net-don-t-update-mac_table-in-error-state.patch [bz#1048671] +- kvm-qcow2-Zero-initialise-first-cluster-for-new-images.patch [bz#1032904] +- Resolves: bz#1004347 + (Backport qcow2 corruption prevention patches) +- Resolves: bz#1032904 + (qemu-img can not create libiscsi qcow2_v3 image) +- Resolves: bz#1048671 + (virtio-net: mac_table change isn't recovered in error state) +- Resolves: bz#965636 + (streaming with no backing file should not do anything) + +* Wed Jan 08 2014 Miroslav Rezanina - 1.5.3-33.el7 +- kvm-block-qemu-iotests-for-vhdx-read-sample-dynamic-imag.patch [bz#879234] +- kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-io-p.patch [bz#879234] +- kvm-block-qemu-iotests-fix-_make_test_img-to-work-with-s.patch [bz#879234] +- kvm-block-qemu-iotests-add-quotes-to-TEST_IMG.base-usage.patch [bz#879234] +- kvm-block-qemu-iotests-add-quotes-to-TEST_IMG-usage-in-0.patch [bz#879234] +- kvm-block-qemu-iotests-removes-duplicate-double-quotes-i.patch [bz#879234] +- kvm-block-vhdx-minor-comments-and-typo-correction.patch [bz#879234] +- kvm-block-vhdx-add-header-update-capability.patch [bz#879234] +- kvm-block-vhdx-code-movement-VHDXMetadataEntries-and-BDR.patch [bz#879234] +- kvm-block-vhdx-log-support-struct-and-defines.patch [bz#879234] +- kvm-block-vhdx-break-endian-translation-functions-out.patch [bz#879234] +- kvm-block-vhdx-update-log-guid-in-header-and-first-write.patch [bz#879234] +- kvm-block-vhdx-code-movement-move-vhdx_close-above-vhdx_.patch [bz#879234] +- kvm-block-vhdx-log-parsing-replay-and-flush-support.patch [bz#879234] +- kvm-block-vhdx-add-region-overlap-detection-for-image-fi.patch [bz#879234] +- kvm-block-vhdx-add-log-write-support.patch [bz#879234] +- kvm-block-vhdx-write-support.patch [bz#879234] +- kvm-block-vhdx-remove-BAT-file-offset-bit-shifting.patch [bz#879234] +- kvm-block-vhdx-move-more-endian-translations-to-vhdx-end.patch [bz#879234] +- kvm-block-vhdx-break-out-code-operations-to-functions.patch [bz#879234] +- kvm-block-vhdx-fix-comment-typos-in-header-fix-incorrect.patch [bz#879234] +- kvm-block-vhdx-add-.bdrv_create-support.patch [bz#879234] +- kvm-block-vhdx-update-_make_test_img-to-filter-out-vhdx-.patch [bz#879234] +- kvm-block-qemu-iotests-for-vhdx-add-write-test-support.patch [bz#879234] +- kvm-block-vhdx-qemu-iotest-log-replay-of-data-sector.patch [bz#879234] +- Resolves: bz#879234 + ([RFE] qemu-img: Add/improve support for VHDX format) + +* Mon Jan 06 2014 Michal Novotny - 1.5.3-32.el7 +- kvm-block-change-default-of-.has_zero_init-to-0.patch.patch [bz#1007815] +- kvm-iscsi-factor-out-sector-conversions.patch.patch [bz#1007815] +- kvm-iscsi-add-logical-block-provisioning-information-to-.patch.patch [bz#1007815] +- kvm-iscsi-add-.bdrv_get_block_status.patch.patch.patch [bz#1007815] +- kvm-iscsi-split-discard-requests-in-multiple-parts.patch.patch.patch [bz#1007815] +- kvm-block-make-BdrvRequestFlags-public.patch.patch.patch [bz#1007815] +- kvm-block-add-flags-to-bdrv_-_write_zeroes.patch.patch.patch [bz#1007815] +- kvm-block-introduce-BDRV_REQ_MAY_UNMAP-request-flag.patch.patch.patch [bz#1007815] +- kvm-block-add-logical-block-provisioning-info-to-BlockDr.patch.patch.patch [bz#1007815] +- kvm-block-add-wrappers-for-logical-block-provisioning-in.patch.patch.patch [bz#1007815] +- kvm-block-iscsi-add-.bdrv_get_info.patch.patch [bz#1007815] +- kvm-block-add-BlockLimits-structure-to-BlockDriverState.patch.patch.patch [bz#1007815] +- kvm-block-raw-copy-BlockLimits-on-raw_open.patch.patch.patch [bz#1007815] +- kvm-block-honour-BlockLimits-in-bdrv_co_do_write_zeroes.patch.patch.patch [bz#1007815] +- kvm-block-honour-BlockLimits-in-bdrv_co_discard.patch.patch.patch [bz#1007815] +- kvm-iscsi-set-limits-in-BlockDriverState.patch.patch.patch [bz#1007815] +- kvm-iscsi-simplify-iscsi_co_discard.patch.patch.patch [bz#1007815] +- kvm-iscsi-add-bdrv_co_write_zeroes.patch.patch.patch [bz#1007815] +- kvm-block-introduce-bdrv_make_zero.patch.patch.patch [bz#1007815] +- kvm-block-get_block_status-fix-BDRV_BLOCK_ZERO-for-unall.patch.patch.patch [bz#1007815] +- kvm-qemu-img-add-support-for-fully-allocated-images.patch.patch.patch [bz#1007815] +- kvm-qemu-img-conditionally-zero-out-target-on-convert.patch.patch.patch [bz#1007815] +- kvm-block-generalize-BlockLimits-handling-to-cover-bdrv_.patch.patch.patch [bz#1007815] +- kvm-block-add-flags-to-BlockRequest.patch.patch.patch [bz#1007815] +- kvm-block-add-flags-argument-to-bdrv_co_write_zeroes-tra.patch.patch.patch [bz#1007815] +- kvm-block-add-bdrv_aio_write_zeroes.patch.patch.patch [bz#1007815] +- kvm-block-handle-ENOTSUP-from-discard-in-generic-code.patch.patch.patch [bz#1007815] +- kvm-block-make-bdrv_co_do_write_zeroes-stricter-in-produ.patch.patch.patch [bz#1007815] +- kvm-vpc-vhdx-add-get_info.patch.patch.patch [bz#1007815] +- kvm-block-drivers-add-discard-write_zeroes-properties-to.patch.patch.patch [bz#1007815] +- kvm-block-drivers-expose-requirement-for-write-same-alig.patch.patch.patch [bz#1007815] +- kvm-block-iscsi-remove-.bdrv_has_zero_init.patch.patch.patch [bz#1007815] +- kvm-block-iscsi-updated-copyright.patch.patch.patch [bz#1007815] +- kvm-block-iscsi-check-WRITE-SAME-support-differently-dep.patch.patch.patch [bz#1007815] +- kvm-scsi-disk-catch-write-protection-errors-in-UNMAP.patch.patch.patch [bz#1007815] +- kvm-scsi-disk-reject-ANCHOR-1-for-UNMAP-and-WRITE-SAME-c.patch.patch.patch [bz#1007815] +- kvm-scsi-disk-correctly-implement-WRITE-SAME.patch.patch.patch [bz#1007815] +- kvm-scsi-disk-fix-WRITE-SAME-with-large-non-zero-payload.patch.patch.patch [bz#1007815] +- kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch [bz#1007815] +- kvm-raw-posix-implement-write_zeroes-with-MAY_UNMAP-for-.patch.patch.patch.patch.patch [bz#1007815] +- kvm-raw-posix-add-support-for-write_zeroes-on-XFS-and-bl.patch.patch [bz#1007815] +- kvm-qemu-iotests-033-is-fast.patch.patch [bz#1007815] +- kvm-qemu-img-add-support-for-skipping-zeroes-in-input-du.patch.patch [bz#1007815] +- kvm-qemu-img-fix-usage-instruction-for-qemu-img-convert.patch.patch [bz#1007815] +- kvm-block-iscsi-set-bdi-cluster_size.patch.patch [bz#1007815] +- kvm-block-add-opt_transfer_length-to-BlockLimits.patch.patch [bz#1039557] +- kvm-block-iscsi-set-bs-bl.opt_transfer_length.patch.patch [bz#1039557] +- kvm-qemu-img-dynamically-adjust-iobuffer-size-during-con.patch.patch [bz#1039557] +- kvm-qemu-img-round-down-request-length-to-an-aligned-sec.patch.patch [bz#1039557] +- kvm-qemu-img-decrease-progress-update-interval-on-conver.patch.patch [bz#1039557] +- Resolves: bz#1007815 + (fix WRITE SAME support) +- Resolves: bz#1039557 + (optimize qemu-img for thin provisioned images) + +* Fri Dec 27 2013 Daniel Mach - 10:1.5.3-31 +- Mass rebuild 2013-12-27 + +* Wed Dec 18 2013 Michal Novotny - 1.5.3-30.el7 +- kvm-Revert-HMP-Disable-drive_add-for-Red-Hat-Enterprise-2.patch.patch [bz#889051] +- Resolves: bz#889051 + (Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0) + +* Wed Dec 18 2013 Michal Novotny - 1.5.3-29.el7 +- kvm-QMP-Forward-port-__com.redhat_drive_del-from-RHEL-6.patch [bz#889051] +- kvm-QMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch [bz#889051] +- kvm-HMP-Forward-port-__com.redhat_drive_add-from-RHEL-6.patch [bz#889051] +- kvm-QMP-Document-throttling-parameters-of-__com.redhat_d.patch [bz#889051] +- kvm-HMP-Disable-drive_add-for-Red-Hat-Enterprise-Linux.patch [bz#889051] +- Resolves: bz#889051 + (Commands "__com.redhat_drive_add/del" don' t exist in RHEL7.0) + +* Wed Dec 18 2013 Michal Novotny - 1.5.3-28.el7 +- kvm-virtio_pci-fix-level-interrupts-with-irqfd.patch [bz#1035132] +- Resolves: bz#1035132 + (fail to boot and call trace with x-data-plane=on specified for rhel6.5 guest) + +* Wed Dec 18 2013 Michal Novotny - 1.5.3-27.el7 +- Change systemd service location [bz#1025217] +- kvm-vmdk-Allow-read-only-open-of-VMDK-version-3.patch [bz#1007710 bz#1029852] +- Resolves: bz#1007710 + ([RFE] Enable qemu-img to support VMDK version 3) +- Resolves: bz#1025217 + (systemd can't control ksm.service and ksmtuned.service) +- Resolves: bz#1029852 + (qemu-img fails to convert vmdk image with "qemu-img: Could not open 'image.vmdk'") + +* Wed Dec 18 2013 Michal Novotny - 1.5.3-26.el7 +- Add BuildRequires to libRDMAcm-devel for RDMA support [bz#1011720] +- kvm-add-a-header-file-for-atomic-operations.patch [bz#1011720] +- kvm-savevm-Fix-potential-memory-leak.patch [bz#1011720] +- kvm-migration-Fail-migration-on-bdrv_flush_all-error.patch [bz#1011720] +- kvm-rdma-add-documentation.patch [bz#1011720] +- kvm-rdma-introduce-qemu_update_position.patch [bz#1011720] +- kvm-rdma-export-yield_until_fd_readable.patch [bz#1011720] +- kvm-rdma-export-throughput-w-MigrationStats-QMP.patch [bz#1011720] +- kvm-rdma-introduce-qemu_file_mode_is_not_valid.patch [bz#1011720] +- kvm-rdma-introduce-qemu_ram_foreach_block.patch [bz#1011720] +- kvm-rdma-new-QEMUFileOps-hooks.patch [bz#1011720] +- kvm-rdma-introduce-capability-x-rdma-pin-all.patch [bz#1011720] +- kvm-rdma-update-documentation-to-reflect-new-unpin-suppo.patch [bz#1011720]- kvm-rdma-bugfix-ram_control_save_page.patch [bz#1011720] +- kvm-rdma-introduce-ram_handle_compressed.patch [bz#1011720] +- kvm-rdma-core-logic.patch [bz#1011720] +- kvm-rdma-send-pc.ram.patch [bz#1011720] +- kvm-rdma-allow-state-transitions-between-other-states-be.patch [bz#1011720] +- kvm-rdma-introduce-MIG_STATE_NONE-and-change-MIG_STATE_S.patch [bz#1011720] +- kvm-rdma-account-for-the-time-spent-in-MIG_STATE_SETUP-t.patch [bz#1011720] +- kvm-rdma-bugfix-make-IPv6-support-work.patch [bz#1011720] +- kvm-rdma-forgot-to-turn-off-the-debugging-flag.patch [bz#1011720] +- kvm-rdma-correct-newlines-in-error-statements.patch [bz#1011720] +- kvm-rdma-don-t-use-negative-index-to-array.patch [bz#1011720] +- kvm-rdma-qemu_rdma_post_send_control-uses-wrongly-RDMA_W.patch [bz#1011720] +- kvm-rdma-use-DRMA_WRID_READY.patch [bz#1011720] +- kvm-rdma-memory-leak-RDMAContext-host.patch [bz#1011720] +- kvm-rdma-use-resp.len-after-validation-in-qemu_rdma_regi.patch [bz#1011720] +- kvm-rdma-validate-RDMAControlHeader-len.patch [bz#1011720] +- kvm-rdma-check-if-RDMAControlHeader-len-match-transferre.patch [bz#1011720] +- kvm-rdma-proper-getaddrinfo-handling.patch [bz#1011720] +- kvm-rdma-IPv6-over-Ethernet-RoCE-is-broken-in-linux-work.patch [bz#1011720] +- kvm-rdma-remaining-documentation-fixes.patch [bz#1011720] +- kvm-rdma-silly-ipv6-bugfix.patch [bz#1011720] +- kvm-savevm-fix-wrong-initialization-by-ram_control_load_.patch [bz#1011720] +- kvm-arch_init-right-return-for-ram_save_iterate.patch [bz#1011720] +- kvm-rdma-clean-up-of-qemu_rdma_cleanup.patch [bz#1011720] +- kvm-rdma-constify-ram_chunk_-index-start-end.patch [bz#1011720] +- kvm-migration-Fix-debug-print-type.patch [bz#1011720] +- kvm-arch_init-make-is_zero_page-accept-size.patch [bz#1011720] +- kvm-migration-ram_handle_compressed.patch [bz#1011720] +- kvm-migration-fix-spice-migration.patch [bz#1011720] +- kvm-pci-assign-cap-number-of-devices-that-can-be-assigne.patch [bz#678368] +- kvm-vfio-cap-number-of-devices-that-can-be-assigned.patch [bz#678368] +- kvm-Revert-usb-tablet-Don-t-claim-wakeup-capability-for-.patch [bz#1039513] +- kvm-mempath-prefault-pages-manually-v4.patch [bz#1026554] +- Resolves: bz#1011720 + ([HP 7.0 Feat]: Backport RDMA based live guest migration changes from upstream to RHEL7.0 KVM) +- Resolves: bz#1026554 + (qemu: mempath: prefault pages manually) +- Resolves: bz#1039513 + (backport remote wakeup for ehci) +- Resolves: bz#678368 + (RFE: Support more than 8 assigned devices) + +* Wed Dec 18 2013 Michal Novotny - 1.5.3-25.el7 +- kvm-Change-package-description.patch [bz#1017696] +- kvm-seccomp-add-kill-to-the-syscall-whitelist.patch [bz#1026314] +- kvm-json-parser-fix-handling-of-large-whole-number-value.patch [bz#997915] +- kvm-qapi-add-QMP-input-test-for-large-integers.patch [bz#997915] +- kvm-qapi-fix-visitor-serialization-tests-for-numbers-dou.patch [bz#997915] +- kvm-qapi-add-native-list-coverage-for-visitor-serializat.patch [bz#997915] +- kvm-qapi-add-native-list-coverage-for-QMP-output-visitor.patch [bz#997915] +- kvm-qapi-add-native-list-coverage-for-QMP-input-visitor-.patch [bz#997915] +- kvm-qapi-lack-of-two-commas-in-dict.patch [bz#997915] +- kvm-tests-QAPI-schema-parser-tests.patch [bz#997915] +- kvm-tests-Use-qapi-schema-test.json-as-schema-parser-tes.patch [bz#997915] +- kvm-qapi.py-Restructure-lexer-and-parser.patch [bz#997915] +- kvm-qapi.py-Decent-syntax-error-reporting.patch [bz#997915] +- kvm-qapi.py-Reject-invalid-characters-in-schema-file.patch [bz#997915] +- kvm-qapi.py-Fix-schema-parser-to-check-syntax-systematic.patch [bz#997915] +- kvm-qapi.py-Fix-diagnosing-non-objects-at-a-schema-s-top.patch [bz#997915] +- kvm-qapi.py-Rename-expr_eval-to-expr-in-parse_schema.patch [bz#997915] +- kvm-qapi.py-Permit-comments-starting-anywhere-on-the-lin.patch [bz#997915] +- kvm-scripts-qapi.py-Avoid-syntax-not-supported-by-Python.patch [bz#997915] +- kvm-tests-Fix-schema-parser-test-for-in-tree-build.patch [bz#997915] +- Resolves: bz#1017696 + ([branding] remove references to dynamic translation and user-mode emulation) +- Resolves: bz#1026314 + (qemu-kvm hang when use '-sandbox on'+'vnc'+'hda') +- Resolves: bz#997915 + (Backport new QAPI parser proactively to help developers and avoid silly conflicts) + +* Tue Dec 17 2013 Michal Novotny - 1.5.3-24.el7 +- kvm-range-add-Range-structure.patch [bz#1034876] +- kvm-range-add-Range-to-typedefs.patch [bz#1034876] +- kvm-range-add-min-max-operations-on-ranges.patch [bz#1034876] +- kvm-qdev-Add-SIZE-type-to-qdev-properties.patch [bz#1034876] +- kvm-qapi-make-visit_type_size-fallback-to-type_int.patch [bz#1034876] +- kvm-pc-move-IO_APIC_DEFAULT_ADDRESS-to-include-hw-i386-i.patch [bz#1034876] +- kvm-pci-add-helper-to-retrieve-the-64-bit-range.patch [bz#1034876] +- kvm-pci-fix-up-w64-size-calculation-helper.patch [bz#1034876] +- kvm-refer-to-FWCfgState-explicitly.patch [bz#1034876] +- kvm-fw_cfg-move-typedef-to-qemu-typedefs.h.patch [bz#1034876] +- kvm-arch_init-align-MR-size-to-target-page-size.patch [bz#1034876] +- kvm-loader-store-FW-CFG-ROM-files-in-RAM.patch [bz#1034876] +- kvm-pci-store-PCI-hole-ranges-in-guestinfo-structure.patch [bz#1034876] +- kvm-pc-pass-PCI-hole-ranges-to-Guests.patch [bz#1034876] +- kvm-pc-replace-i440fx_common_init-with-i440fx_init.patch [bz#1034876] +- kvm-pc-don-t-access-fw-cfg-if-NULL.patch [bz#1034876] +- kvm-pc-add-I440FX-QOM-cast-macro.patch [bz#1034876] +- kvm-pc-limit-64-bit-hole-to-2G-by-default.patch [bz#1034876] +- kvm-q35-make-pci-window-address-size-match-guest-cfg.patch [bz#1034876] +- kvm-q35-use-64-bit-window-programmed-by-guest.patch [bz#1034876] +- kvm-piix-use-64-bit-window-programmed-by-guest.patch [bz#1034876] +- kvm-pc-fix-regression-for-64-bit-PCI-memory.patch [bz#1034876] +- kvm-cleanup-object.h-include-error.h-directly.patch [bz#1034876] +- kvm-qom-cleanup-struct-Error-references.patch [bz#1034876] +- kvm-qom-add-pointer-to-int-property-helpers.patch [bz#1034876] +- kvm-fw_cfg-interface-to-trigger-callback-on-read.patch [bz#1034876] +- kvm-loader-support-for-unmapped-ROM-blobs.patch [bz#1034876] +- kvm-pcie_host-expose-UNMAPPED-macro.patch [bz#1034876] +- kvm-pcie_host-expose-address-format.patch [bz#1034876] +- kvm-q35-use-macro-for-MCFG-property-name.patch [bz#1034876] +- kvm-q35-expose-mmcfg-size-as-a-property.patch [bz#1034876] +- kvm-i386-add-ACPI-table-files-from-seabios.patch [bz#1034876] +- kvm-acpi-add-rules-to-compile-ASL-source.patch [bz#1034876] +- kvm-acpi-pre-compiled-ASL-files.patch [bz#1034876] +- kvm-acpi-ssdt-pcihp-updat-generated-file.patch [bz#1034876] +- kvm-loader-use-file-path-size-from-fw_cfg.h.patch [bz#1034876] +- kvm-i386-add-bios-linker-loader.patch [bz#1034876] +- kvm-loader-allow-adding-ROMs-in-done-callbacks.patch [bz#1034876] +- kvm-i386-define-pc-guest-info.patch [bz#1034876] +- kvm-acpi-piix-add-macros-for-acpi-property-names.patch [bz#1034876] +- kvm-piix-APIs-for-pc-guest-info.patch [bz#1034876] +- kvm-ich9-APIs-for-pc-guest-info.patch [bz#1034876] +- kvm-pvpanic-add-API-to-access-io-port.patch [bz#1034876] +- kvm-hpet-add-API-to-find-it.patch [bz#1034876] +- kvm-hpet-fix-build-with-CONFIG_HPET-off.patch [bz#1034876] +- kvm-acpi-add-interface-to-access-user-installed-tables.patch [bz#1034876] +- kvm-pc-use-new-api-to-add-builtin-tables.patch [bz#1034876] +- kvm-i386-ACPI-table-generation-code-from-seabios.patch [bz#1034876] +- kvm-ssdt-fix-PBLK-length.patch [bz#1034876] +- kvm-ssdt-proc-update-generated-file.patch [bz#1034876] +- kvm-pc-disable-pci-info.patch [bz#1034876] +- kvm-acpi-build-fix-build-on-glib-2.22.patch [bz#1034876] +- kvm-acpi-build-fix-build-on-glib-2.14.patch [bz#1034876] +- kvm-acpi-build-fix-support-for-glib-2.22.patch [bz#1034876] +- kvm-acpi-build-Fix-compiler-warning-missing-gnu_printf-f.patch [bz#1034876] +- kvm-exec-Fix-prototype-of-phys_mem_set_alloc-and-related.patch [bz#1034876] +- Resolves: bz#1034876 + (export acpi tables to guests) + +* Tue Dec 17 2013 Michal Novotny - 1.5.3-23.el7 +- kvm-qdev-monitor-Unref-device-when-device_add-fails.patch [bz#1003773] +- kvm-qdev-Drop-misleading-qdev_free-function.patch [bz#1003773] +- kvm-blockdev-fix-drive_init-opts-and-bs_opts-leaks.patch [bz#1003773] +- kvm-libqtest-rename-qmp-to-qmp_discard_response.patch [bz#1003773] +- kvm-libqtest-add-qmp-fmt-.-QDict-function.patch [bz#1003773] +- kvm-blockdev-test-add-test-case-for-drive_add-duplicate-.patch [bz#1003773] +- kvm-qdev-monitor-test-add-device_add-leak-test-cases.patch [bz#1003773] +- kvm-qtest-Use-display-none-by-default.patch [bz#1003773] +- Resolves: bz#1003773 + (When virtio-blk-pci device with dataplane is failed to be added, the drive cannot be released.) + +* Tue Dec 17 2013 Michal Novotny - 1.5.3-22.el7 +- Fix ksmtuned with set_process_name=1 [bz#1027420] +- Fix committed memory when no qemu-kvm running [bz#1027418] +- kvm-virtio-net-fix-the-memory-leak-in-rxfilter_notify.patch [bz#1033810] +- kvm-qom-Fix-memory-leak-in-object_property_set_link.patch [bz#1033810] +- kvm-fix-intel-hda-live-migration.patch [bz#1036537] +- kvm-vfio-pci-Release-all-MSI-X-vectors-when-disabled.patch [bz#1029743] +- kvm-Query-KVM-for-available-memory-slots.patch [bz#921490] +- kvm-block-Dont-ignore-previously-set-bdrv_flags.patch [bz#1039501] +- kvm-cleanup-trace-events.pl-New.patch [bz#997832] +- kvm-slavio_misc-Fix-slavio_led_mem_readw-_writew-tracepo.patch [bz#997832] +- kvm-milkymist-minimac2-Fix-minimac2_read-_write-tracepoi.patch [bz#997832] +- kvm-trace-events-Drop-unused-events.patch [bz#997832] +- kvm-trace-events-Fix-up-source-file-comments.patch [bz#997832] +- kvm-trace-events-Clean-up-with-scripts-cleanup-trace-eve.patch [bz#997832] +- kvm-trace-events-Clean-up-after-removal-of-old-usb-host-.patch [bz#997832] +- kvm-net-Update-netdev-peer-on-link-change.patch [bz#1027571] +- Resolves: bz#1027418 + (ksmtuned committed_memory() still returns "", not 0, when no qemu running) +- Resolves: bz#1027420 + (ksmtuned can’t handle libvirt WITH set_process_name=1) +- Resolves: bz#1027571 + ([virtio-win]win8.1 guest network can not resume automatically after do "set_link tap1 on") +- Resolves: bz#1029743 + (qemu-kvm core dump after hot plug/unplug 82576 PF about 100 times) +- Resolves: bz#1033810 + (memory leak in using object_get_canonical_path()) +- Resolves: bz#1036537 + (Cross version migration from RHEL6.5 host to RHEL7.0 host with sound device failed.) +- Resolves: bz#1039501 + ([provisioning] discard=on broken) +- Resolves: bz#921490 + (qemu-kvm core dumped after hot plugging more than 11 VF through vfio-pci) +- Resolves: bz#997832 + (Backport trace fixes proactively to avoid confusion and silly conflicts) + +* Tue Dec 03 2013 Miroslav Rezanina - 1.5.3-21.el7 +- kvm-scsi-Allocate-SCSITargetReq-r-buf-dynamically-CVE-20.patch [bz#1007334] +- Resolves: bz#1007334 + (CVE-2013-4344 qemu-kvm: qemu: buffer overflow in scsi_target_emulate_report_luns [rhel-7.0]) + +* Thu Nov 28 2013 Miroslav Rezanina - 1.5.3-20.el7 +- kvm-pc-drop-virtio-balloon-pci-event_idx-compat-property.patch [bz#1029539] +- kvm-virtio-net-only-delete-bh-that-existed.patch [bz#922463] +- kvm-virtio-net-broken-RX-filtering-logic-fixed.patch [bz#1029370] +- kvm-block-Avoid-unecessary-drv-bdrv_getlength-calls.patch [bz#1025138] +- kvm-block-Round-up-total_sectors.patch [bz#1025138] +- kvm-doc-fix-hardcoded-helper-path.patch [bz#1016952] +- kvm-introduce-RFQDN_REDHAT-RHEL-6-7-fwd.patch [bz#971933] +- kvm-error-reason-in-BLOCK_IO_ERROR-BLOCK_JOB_ERROR-event.patch [bz#971938] +- kvm-improve-debuggability-of-BLOCK_IO_ERROR-BLOCK_JOB_ER.patch [bz#895041] +- kvm-vfio-pci-Fix-multifunction-on.patch [bz#1029275] +- kvm-qcow2-Change-default-for-new-images-to-compat-1.1.patch [bz#1026739] +- kvm-qcow2-change-default-for-new-images-to-compat-1.1-pa.patch [bz#1026739] +- kvm-rng-egd-offset-the-point-when-repeatedly-read-from-t.patch [bz#1032862] +- kvm-Fix-rhel-rhev-conflict-for-qemu-kvm-common.patch [bz#1033463] +- Resolves: bz#1016952 + (qemu-kvm man page guide wrong path for qemu-bridge-helper) +- Resolves: bz#1025138 + (Read/Randread/Randrw performance regression) +- Resolves: bz#1026739 + (qcow2: Switch to compat=1.1 default for new images) +- Resolves: bz#1029275 + (Guest only find one 82576 VF(function 0) while use multifunction) +- Resolves: bz#1029370 + ([whql][netkvm][wlk] Virtio-net device handles RX multicast filtering improperly) +- Resolves: bz#1029539 + (Machine type rhel6.1.0 and balloon device cause migration fail from RHEL6.5 host to RHEL7.0 host) +- Resolves: bz#1032862 + (virtio-rng-egd: repeatedly read same random data-block w/o considering the buffer offset) +- Resolves: bz#1033463 + (can not upgrade qemu-kvm-common to qemu-kvm-common-rhev due to conflicts) +- Resolves: bz#895041 + (QMP: forward port I/O error debug messages) +- Resolves: bz#922463 + (qemu-kvm core dump when virtio-net multi queue guest hot-unpluging vNIC) +- Resolves: bz#971933 + (QMP: add RHEL's vendor extension prefix) +- Resolves: bz#971938 + (QMP: Add error reason to BLOCK_IO_ERROR event) + +* Mon Nov 11 2013 Miroslav Rezanina - 1.5.3-19.el7 +- kvm-qapi-qapi-visit.py-fix-list-handling-for-union-types.patch [bz#848203] +- kvm-qapi-qapi-visit.py-native-list-support.patch [bz#848203] +- kvm-qapi-enable-generation-of-native-list-code.patch [bz#848203] +- kvm-net-add-support-of-mac-programming-over-macvtap-in-Q.patch [bz#848203] +- Resolves: bz#848203 + (MAC Programming for virtio over macvtap - qemu-kvm support) + +* Fri Nov 08 2013 Michal Novotny - 1.5.3-18.el7 +- Removing leaked patch kvm-e1000-rtl8139-update-HMP-NIC-when-every-bit-is-writt.patch + +* Thu Nov 07 2013 Miroslav Rezanina - 1.5.3-17.el7 +- kvm-pci-assign-Add-MSI-affinity-support.patch [bz#1025877] +- kvm-Fix-potential-resource-leak-missing-fclose.patch [bz#1025877] +- kvm-pci-assign-remove-the-duplicate-function-name-in-deb.patch [bz#1025877] +- kvm-Remove-s390-ccw-img-loader.patch [bz#1017682] +- kvm-Fix-vscclient-installation.patch [bz#1017681] +- kvm-Change-qemu-bridge-helper-permissions-to-4755.patch [bz#1017689] +- kvm-net-update-nic-info-during-device-reset.patch [bz#922589] +- kvm-net-e1000-update-network-information-when-macaddr-is.patch [bz#922589] +- kvm-net-rtl8139-update-network-information-when-macaddr-.patch [bz#922589] +- kvm-virtio-net-fix-up-HMP-NIC-info-string-on-reset.patch [bz#1026689] +- kvm-vfio-pci-VGA-quirk-update.patch [bz#1025477] +- kvm-vfio-pci-Add-support-for-MSI-affinity.patch [bz#1025477] +- kvm-vfio-pci-Test-device-reset-capabilities.patch [bz#1026550] +- kvm-vfio-pci-Lazy-PCI-option-ROM-loading.patch [bz#1026550] +- kvm-vfio-pci-Cleanup-error_reports.patch [bz#1026550] +- kvm-vfio-pci-Add-dummy-PCI-ROM-write-accessor.patch [bz#1026550] +- kvm-vfio-pci-Fix-endian-issues-in-vfio_pci_size_rom.patch [bz#1026550] +- kvm-linux-headers-Update-to-include-vfio-pci-hot-reset-s.patch [bz#1025472] +- kvm-vfio-pci-Implement-PCI-hot-reset.patch [bz#1025472] +- kvm-linux-headers-Update-for-KVM-VFIO-device.patch [bz#1025474] +- kvm-vfio-pci-Make-use-of-new-KVM-VFIO-device.patch [bz#1025474] +- kvm-vmdk-Fix-vmdk_parse_extents.patch [bz#995866] +- kvm-vmdk-fix-VMFS-extent-parsing.patch [bz#995866] +- kvm-e1000-rtl8139-update-HMP-NIC-when-every-bit-is-writt.patch [bz#922589] +- kvm-don-t-disable-ctrl_mac_addr-feature-for-6.5-machine-.patch [bz#1005039] +- Resolves: bz#1005039 + (add compat property to disable ctrl_mac_addr feature) +- Resolves: bz#1017681 + (rpmdiff test "Multilib regressions": vscclient is a libtool script on s390/s390x/ppc/ppc64) +- Resolves: bz#1017682 + (/usr/share/qemu-kvm/s390-ccw.img need not be distributed) +- Resolves: bz#1017689 + (/usr/libexec/qemu-bridge-helper permissions should be 4755) +- Resolves: bz#1025472 + (Nvidia GPU device assignment - qemu-kvm - bus reset support) +- Resolves: bz#1025474 + (Nvidia GPU device assignment - qemu-kvm - NoSnoop support) +- Resolves: bz#1025477 + (VFIO MSI affinity) +- Resolves: bz#1025877 + (pci-assign lacks MSI affinity support) +- Resolves: bz#1026550 + (QEMU VFIO update ROM loading code) +- Resolves: bz#1026689 + (virtio-net: macaddr is reset but network info of monitor isn't updated) +- Resolves: bz#922589 + (e1000/rtl8139: qemu mac address can not be changed via set the hardware address in guest) +- Resolves: bz#995866 + (fix vmdk support to ESX images) + +* Thu Nov 07 2013 Miroslav Rezanina - 1.5.3-16.el7 +- kvm-block-drop-bs_snapshots-global-variable.patch [bz#1026524] +- kvm-block-move-snapshot-code-in-block.c-to-block-snapsho.patch [bz#1026524] +- kvm-block-fix-vvfat-error-path-for-enable_write_target.patch [bz#1026524] +- kvm-block-Bugfix-format-and-snapshot-used-in-drive-optio.patch [bz#1026524] +- kvm-iscsi-use-bdrv_new-instead-of-stack-structure.patch [bz#1026524] +- kvm-qcow2-Add-corrupt-bit.patch [bz#1004347] +- kvm-qcow2-Metadata-overlap-checks.patch [bz#1004347] +- kvm-qcow2-Employ-metadata-overlap-checks.patch [bz#1004347] +- kvm-qcow2-refcount-Move-OFLAG_COPIED-checks.patch [bz#1004347] +- kvm-qcow2-refcount-Repair-OFLAG_COPIED-errors.patch [bz#1004347] +- kvm-qcow2-refcount-Repair-shared-refcount-blocks.patch [bz#1004347] +- kvm-qcow2_check-Mark-image-consistent.patch [bz#1004347] +- kvm-qemu-iotests-Overlapping-cluster-allocations.patch [bz#1004347] +- kvm-w32-Fix-access-to-host-devices-regression.patch [bz#1026524] +- kvm-add-qemu-img-convert-n-option-skip-target-volume-cre.patch [bz#1026524] +- kvm-bdrv-Use-Error-for-opening-images.patch [bz#1026524] +- kvm-bdrv-Use-Error-for-creating-images.patch [bz#1026524] +- kvm-block-Error-parameter-for-open-functions.patch [bz#1026524] +- kvm-block-Error-parameter-for-create-functions.patch [bz#1026524] +- kvm-qemu-img-create-Emit-filename-on-error.patch [bz#1026524] +- kvm-qcow2-Use-Error-parameter.patch [bz#1026524] +- kvm-qemu-iotests-Adjustments-due-to-error-propagation.patch [bz#1026524] +- kvm-block-raw-Employ-error-parameter.patch [bz#1026524] +- kvm-block-raw-win32-Employ-error-parameter.patch [bz#1026524] +- kvm-blkdebug-Employ-error-parameter.patch [bz#1026524] +- kvm-blkverify-Employ-error-parameter.patch [bz#1026524] +- kvm-block-raw-posix-Employ-error-parameter.patch [bz#1026524] +- kvm-block-raw-win32-Always-use-errno-in-hdev_open.patch [bz#1026524] +- kvm-qmp-Documentation-for-BLOCK_IMAGE_CORRUPTED.patch [bz#1004347] +- kvm-qcow2-Correct-snapshots-size-for-overlap-check.patch [bz#1004347] +- kvm-qcow2-CHECK_OFLAG_COPIED-is-obsolete.patch [bz#1004347] +- kvm-qcow2-Correct-endianness-in-overlap-check.patch [bz#1004347] +- kvm-qcow2-Switch-L1-table-in-a-single-sequence.patch [bz#1004347] +- kvm-qcow2-Use-pread-for-inactive-L1-in-overlap-check.patch [bz#1004347] +- kvm-qcow2-Remove-wrong-metadata-overlap-check.patch [bz#1004347] +- kvm-qcow2-Use-negated-overflow-check-mask.patch [bz#1004347] +- kvm-qcow2-Make-overlap-check-mask-variable.patch [bz#1004347] +- kvm-qcow2-Add-overlap-check-options.patch [bz#1004347] +- kvm-qcow2-Array-assigning-options-to-OL-check-bits.patch [bz#1004347] +- kvm-qcow2-Add-more-overlap-check-bitmask-macros.patch [bz#1004347] +- kvm-qcow2-Evaluate-overlap-check-options.patch [bz#1004347] +- kvm-qapi-types.py-Split-off-generate_struct_fields.patch [bz#978402] +- kvm-qapi-types.py-Fix-enum-struct-sizes-on-i686.patch [bz#978402] +- kvm-qapi-types-visit.py-Pass-whole-expr-dict-for-structs.patch [bz#978402] +- kvm-qapi-types-visit.py-Inheritance-for-structs.patch [bz#978402] +- kvm-blockdev-Introduce-DriveInfo.enable_auto_del.patch [bz#978402] +- kvm-Implement-qdict_flatten.patch [bz#978402] +- kvm-blockdev-blockdev-add-QMP-command.patch [bz#978402] +- kvm-blockdev-Separate-ID-generation-from-DriveInfo-creat.patch [bz#978402] +- kvm-blockdev-Pass-QDict-to-blockdev_init.patch [bz#978402] +- kvm-blockdev-Move-parsing-of-media-option-to-drive_init.patch [bz#978402] +- kvm-blockdev-Move-parsing-of-if-option-to-drive_init.patch [bz#978402] +- kvm-blockdev-Moving-parsing-of-geometry-options-to-drive.patch [bz#978402] +- kvm-blockdev-Move-parsing-of-boot-option-to-drive_init.patch [bz#978402] +- kvm-blockdev-Move-bus-unit-index-processing-to-drive_ini.patch [bz#978402] +- kvm-blockdev-Move-virtio-blk-device-creation-to-drive_in.patch [bz#978402] +- kvm-blockdev-Remove-IF_-check-for-read-only-blockdev_ini.patch [bz#978402] +- kvm-qemu-iotests-Check-autodel-behaviour-for-device_del.patch [bz#978402] +- kvm-blockdev-Remove-media-parameter-from-blockdev_init.patch [bz#978402] +- kvm-blockdev-Don-t-disable-COR-automatically-with-blockd.patch [bz#978402] +- kvm-blockdev-blockdev_init-error-conversion.patch [bz#978402] +- kvm-sd-Avoid-access-to-NULL-BlockDriverState.patch [bz#978402] +- kvm-blockdev-fix-cdrom-read_only-flag.patch [bz#978402] +- kvm-block-fix-backing-file-overriding.patch [bz#978402] +- kvm-block-Disable-BDRV_O_COPY_ON_READ-for-the-backing-fi.patch [bz#978402] +- kvm-block-Don-t-copy-backing-file-name-on-error.patch [bz#978402] +- kvm-qemu-iotests-Try-creating-huge-qcow2-image.patch [bz#980771] +- kvm-block-move-qmp-and-info-dump-related-code-to-block-q.patch [bz#980771] +- kvm-block-dump-snapshot-and-image-info-to-specified-outp.patch [bz#980771] +- kvm-block-add-snapshot-info-query-function-bdrv_query_sn.patch [bz#980771] +- kvm-block-add-image-info-query-function-bdrv_query_image.patch [bz#980771] +- kvm-qmp-add-ImageInfo-in-BlockDeviceInfo-used-by-query-b.patch [bz#980771] +- kvm-vmdk-Implement-.bdrv_has_zero_init.patch [bz#980771] +- kvm-qemu-iotests-Add-basic-ability-to-use-binary-sample-.patch [bz#980771] +- kvm-qemu-iotests-Quote-TEST_IMG-and-TEST_DIR-usage.patch [bz#980771] +- kvm-qemu-iotests-fix-test-case-059.patch [bz#980771] +- kvm-qapi-Add-ImageInfoSpecific-type.patch [bz#980771] +- kvm-block-Add-bdrv_get_specific_info.patch [bz#980771] +- kvm-block-qapi-Human-readable-ImageInfoSpecific-dump.patch [bz#980771] +- kvm-qcow2-Add-support-for-ImageInfoSpecific.patch [bz#980771] +- kvm-qemu-iotests-Discard-specific-info-in-_img_info.patch [bz#980771] +- kvm-qemu-iotests-Additional-info-from-qemu-img-info.patch [bz#980771] +- kvm-vmdk-convert-error-code-to-use-errp.patch [bz#980771] +- kvm-vmdk-refuse-enabling-zeroed-grain-with-flat-images.patch [bz#980771] +- kvm-qapi-Add-optional-field-compressed-to-ImageInfo.patch [bz#980771] +- kvm-vmdk-Only-read-cid-from-image-file-when-opening.patch [bz#980771] +- kvm-vmdk-Implment-bdrv_get_specific_info.patch [bz#980771] +- Resolves: bz#1004347 + (Backport qcow2 corruption prevention patches) +- Resolves: bz#1026524 + (Backport block layer error parameter patches) +- Resolves: bz#978402 + ([RFE] Add discard support to qemu-kvm layer) +- Resolves: bz#980771 + ([RFE] qemu-img should be able to tell the compat version of a qcow2 image) + +* Thu Nov 07 2013 Miroslav Rezanina - 1.5.3-15.el7 +- kvm-cow-make-reads-go-at-a-decent-speed.patch [bz#989646] +- kvm-cow-make-writes-go-at-a-less-indecent-speed.patch [bz#989646] +- kvm-cow-do-not-call-bdrv_co_is_allocated.patch [bz#989646] +- kvm-block-keep-bs-total_sectors-up-to-date-even-for-grow.patch [bz#989646] +- kvm-block-make-bdrv_co_is_allocated-static.patch [bz#989646] +- kvm-block-do-not-use-total_sectors-in-bdrv_co_is_allocat.patch [bz#989646] +- kvm-block-remove-bdrv_is_allocated_above-bdrv_co_is_allo.patch [bz#989646] +- kvm-block-expect-errors-from-bdrv_co_is_allocated.patch [bz#989646] +- kvm-block-Fix-compiler-warning-Werror-uninitialized.patch [bz#989646] +- kvm-qemu-img-always-probe-the-input-image-for-allocated-.patch [bz#989646] +- kvm-block-make-bdrv_has_zero_init-return-false-for-copy-.patch [bz#989646] +- kvm-block-introduce-bdrv_get_block_status-API.patch [bz#989646] +- kvm-block-define-get_block_status-return-value.patch [bz#989646] +- kvm-block-return-get_block_status-data-and-flags-for-for.patch [bz#989646] +- kvm-block-use-bdrv_has_zero_init-to-return-BDRV_BLOCK_ZE.patch [bz#989646] +- kvm-block-return-BDRV_BLOCK_ZERO-past-end-of-backing-fil.patch [bz#989646] +- kvm-qemu-img-add-a-map-subcommand.patch [bz#989646] +- kvm-docs-qapi-document-qemu-img-map.patch [bz#989646] +- kvm-raw-posix-return-get_block_status-data-and-flags.patch [bz#989646] +- kvm-raw-posix-report-unwritten-extents-as-zero.patch [bz#989646] +- kvm-block-add-default-get_block_status-implementation-fo.patch [bz#989646] +- kvm-block-look-for-zero-blocks-in-bs-file.patch [bz#989646] +- kvm-qemu-img-fix-invalid-JSON.patch [bz#989646] +- kvm-block-get_block_status-set-pnum-0-on-error.patch [bz#989646] +- kvm-block-get_block_status-avoid-segfault-if-there-is-no.patch [bz#989646] +- kvm-block-get_block_status-avoid-redundant-callouts-on-r.patch [bz#989646] +- kvm-qcow2-Restore-total_sectors-value-in-save_vmstate.patch [bz#1025740] +- kvm-qcow2-Unset-zero_beyond_eof-in-save_vmstate.patch [bz#1025740] +- kvm-qemu-iotests-Test-for-loading-VM-state-from-qcow2.patch [bz#1025740] +- kvm-apic-rename-apic-specific-bitopts.patch [bz#1001216] +- kvm-hw-import-bitmap-operations-in-qdev-core-header.patch [bz#1001216] +- kvm-qemu-help-Sort-devices-by-logical-functionality.patch [bz#1001216] +- kvm-devices-Associate-devices-to-their-logical-category.patch [bz#1001216] +- kvm-Mostly-revert-qemu-help-Sort-devices-by-logical-func.patch [bz#1001216] +- kvm-qdev-monitor-Group-device_add-help-and-info-qdm-by-c.patch [bz#1001216] +- kvm-qdev-Replace-no_user-by-cannot_instantiate_with_devi.patch [bz#1001216] +- kvm-sysbus-Set-cannot_instantiate_with_device_add_yet.patch [bz#1001216] +- kvm-cpu-Document-why-cannot_instantiate_with_device_add_.patch [bz#1001216] +- kvm-apic-Document-why-cannot_instantiate_with_device_add.patch [bz#1001216] +- kvm-pci-host-Consistently-set-cannot_instantiate_with_de.patch [bz#1001216] +- kvm-ich9-Document-why-cannot_instantiate_with_device_add.patch [bz#1001216] +- kvm-piix3-piix4-Clean-up-use-of-cannot_instantiate_with_.patch [bz#1001216] +- kvm-vt82c686-Clean-up-use-of-cannot_instantiate_with_dev.patch [bz#1001216] +- kvm-isa-Clean-up-use-of-cannot_instantiate_with_device_a.patch [bz#1001216] +- kvm-qdev-Do-not-let-the-user-try-to-device_add-when-it-c.patch [bz#1001216] +- kvm-rhel-Revert-unwanted-cannot_instantiate_with_device_.patch [bz#1001216] +- kvm-rhel-Revert-downstream-changes-to-unused-default-con.patch [bz#1001076] +- kvm-rhel-Drop-cfi.pflash01-and-isa-ide-device.patch [bz#1001076] +- kvm-rhel-Drop-isa-vga-device.patch [bz#1001088] +- kvm-rhel-Make-isa-cirrus-vga-device-unavailable.patch [bz#1001088] +- kvm-rhel-Make-ccid-card-emulated-device-unavailable.patch [bz#1001123] +- kvm-x86-fix-migration-from-pre-version-12.patch [bz#1005695] +- kvm-x86-cpuid-reconstruct-leaf-0Dh-data.patch [bz#1005695] +- kvm-kvmvapic-Catch-invalid-ROM-size.patch [bz#920021] +- kvm-kvmvapic-Enter-inactive-state-on-hardware-reset.patch [bz#920021] +- kvm-kvmvapic-Clear-also-physical-ROM-address-when-enteri.patch [bz#920021] +- kvm-block-optionally-disable-live-block-jobs.patch [bz#987582] +- kvm-rpm-spec-template-disable-live-block-ops-for-rhel-en.patch [bz#987582] +- kvm-migration-disable-live-block-migration-b-i-for-rhel-.patch [bz#1022392] +- kvm-Build-ceph-rbd-only-for-rhev.patch [bz#987583] +- kvm-spec-Disable-host-cdrom-RHEL-only.patch [bz#760885] +- kvm-rhel-Make-pci-serial-2x-and-pci-serial-4x-device-una.patch [bz#1001180] +- kvm-usb-host-libusb-Fix-reset-handling.patch [bz#980415] +- kvm-usb-host-libusb-Configuration-0-may-be-a-valid-confi.patch [bz#980383] +- kvm-usb-host-libusb-Detach-kernel-drivers-earlier.patch [bz#980383] +- kvm-monitor-Remove-pci_add-command-for-Red-Hat-Enterpris.patch [bz#1010858] +- kvm-monitor-Remove-pci_del-command-for-Red-Hat-Enterpris.patch [bz#1010858] +- kvm-monitor-Remove-usb_add-del-commands-for-Red-Hat-Ente.patch [bz#1010858] +- kvm-monitor-Remove-host_net_add-remove-for-Red-Hat-Enter.patch [bz#1010858] +- kvm-fw_cfg-add-API-to-find-FW-cfg-object.patch [bz#990601] +- kvm-pvpanic-use-FWCfgState-explicitly.patch [bz#990601] +- kvm-pvpanic-initialization-cleanup.patch [bz#990601] +- kvm-pvpanic-fix-fwcfg-for-big-endian-hosts.patch [bz#990601] +- kvm-hw-misc-make-pvpanic-known-to-user.patch [bz#990601] +- kvm-gdbstub-do-not-restart-crashed-guest.patch [bz#990601] +- kvm-gdbstub-fix-for-commit-87f25c12bfeaaa0c41fb857713bbc.patch [bz#990601] +- kvm-vl-allow-cont-from-panicked-state.patch [bz#990601] +- kvm-hw-misc-don-t-create-pvpanic-device-by-default.patch [bz#990601] +- kvm-block-vhdx-add-migration-blocker.patch [bz#1007176] +- kvm-qemu-kvm.spec-add-vhdx-to-the-read-only-block-driver.patch [bz#1007176] +- kvm-qemu-kvm.spec-Add-VPC-VHD-driver-to-the-block-read-o.patch [bz#1007176] +- Resolves: bz#1001076 + (Disable or remove other block devices we won't support) +- Resolves: bz#1001088 + (Disable or remove display devices we won't support) +- Resolves: bz#1001123 + (Disable or remove device ccid-card-emulated) +- Resolves: bz#1001180 + (Disable or remove devices pci-serial-2x, pci-serial-4x) +- Resolves: bz#1001216 + (Fix no_user or provide another way make devices unavailable with -device / device_add) +- Resolves: bz#1005695 + (QEMU should hide CPUID.0Dh values that it does not support) +- Resolves: bz#1007176 + (Add VPC and VHDX file formats as supported in qemu-kvm (read-only)) +- Resolves: bz#1010858 + (Disable unused human monitor commands) +- Resolves: bz#1022392 + (Disable live-storage-migration in qemu-kvm (migrate -b/-i)) +- Resolves: bz#1025740 + (Saving VM state on qcow2 images results in VM state corruption) +- Resolves: bz#760885 + (Disable host cdrom passthrough) +- Resolves: bz#920021 + (qemu-kvm segment fault when reboot guest after hot unplug device with option ROM) +- Resolves: bz#980383 + (The usb3.0 stick can't be returned back to host after shutdown guest with usb3.0 pass-through) +- Resolves: bz#980415 + (libusbx: error [_open_sysfs_attr] open /sys/bus/usb/devices/4-1/bConfigurationValue failed ret=-1 errno=2) +- Resolves: bz#987582 + (Initial Virtualization Differentiation for RHEL7 (Live snapshots)) +- Resolves: bz#987583 + (Initial Virtualization Differentiation for RHEL7 (Ceph enablement)) +- Resolves: bz#989646 + (Support backup vendors in qemu to access qcow disk readonly) +- Resolves: bz#990601 + (pvpanic device triggers guest bugs when present by default) + +* Wed Nov 06 2013 Miroslav Rezanina - 1.5.3-14.el7 +- kvm-target-i386-remove-tabs-from-target-i386-cpu.h.patch [bz#928867] +- kvm-migrate-vPMU-state.patch [bz#928867] +- kvm-blockdev-do-not-default-cache.no-flush-to-true.patch [bz#1009993] +- kvm-virtio-blk-do-not-relay-a-previous-driver-s-WCE-conf.patch [bz#1009993] +- kvm-rng-random-use-error_setg_file_open.patch [bz#907743] +- kvm-block-mirror_complete-use-error_setg_file_open.patch [bz#907743] +- kvm-blockdev-use-error_setg_file_open.patch [bz#907743] +- kvm-cpus-use-error_setg_file_open.patch [bz#907743] +- kvm-dump-qmp_dump_guest_memory-use-error_setg_file_open.patch [bz#907743] +- kvm-savevm-qmp_xen_save_devices_state-use-error_setg_fil.patch [bz#907743] +- kvm-block-bdrv_reopen_prepare-don-t-use-QERR_OPEN_FILE_F.patch [bz#907743] +- kvm-qerror-drop-QERR_OPEN_FILE_FAILED-macro.patch [bz#907743] +- kvm-rhel-Drop-ivshmem-device.patch [bz#787463] +- kvm-usb-remove-old-usb-host-code.patch [bz#1001144] +- kvm-Add-rhel6-pxe-roms-files.patch [bz#997702] +- kvm-Add-rhel6-pxe-rom-to-redhat-rpm.patch [bz#997702] +- kvm-Fix-migration-from-rhel6.5-to-rhel7-with-ipxe.patch [bz#997702] +- kvm-pc-Don-t-prematurely-explode-QEMUMachineInitArgs.patch [bz#994490] +- kvm-pc-Don-t-explode-QEMUMachineInitArgs-into-local-vari.patch [bz#994490] +- kvm-smbios-Normalize-smbios_entry_add-s-error-handling-t.patch [bz#994490] +- kvm-smbios-Convert-to-QemuOpts.patch [bz#994490] +- kvm-smbios-Improve-diagnostics-for-conflicting-entries.patch [bz#994490] +- kvm-smbios-Make-multiple-smbios-type-accumulate-sanely.patch [bz#994490] +- kvm-smbios-Factor-out-smbios_maybe_add_str.patch [bz#994490] +- kvm-hw-Pass-QEMUMachine-to-its-init-method.patch [bz#994490] +- kvm-smbios-Set-system-manufacturer-product-version-by-de.patch [bz#994490] +- kvm-smbios-Decouple-system-product-from-QEMUMachine.patch [bz#994490] +- kvm-rhel-SMBIOS-type-1-branding.patch [bz#994490] +- kvm-Add-disable-rhev-features-option-to-configure.patch [] +- Resolves: bz#1001144 + (Disable or remove device usb-host-linux) +- Resolves: bz#1009993 + (RHEL7 guests do not issue fdatasyncs on virtio-blk) +- Resolves: bz#787463 + (disable ivshmem (was: [Hitachi 7.0 FEAT] Support ivshmem (Inter-VM Shared Memory))) +- Resolves: bz#907743 + (qemu-ga: empty reason string for OpenFileFailed error) +- Resolves: bz#928867 + (Virtual PMU support during live migration - qemu-kvm) +- Resolves: bz#994490 + (Set per-machine-type SMBIOS strings) +- Resolves: bz#997702 + (Migration from RHEL6.5 host to RHEL7.0 host is failed with virtio-net device) + +* Tue Nov 05 2013 Miroslav Rezanina - 1.5.3-13.el7 +- kvm-seabios-paravirt-allow-more-than-1TB-in-x86-guest.patch [bz#989677] +- kvm-scsi-prefer-UUID-to-VM-name-for-the-initiator-name.patch [bz#1006468] +- kvm-Fix-incorrect-rhel_rhev_conflicts-macro-usage.patch [bz#1017693] +- Resolves: bz#1006468 + (libiscsi initiator name should use vm UUID) +- Resolves: bz#1017693 + (incorrect use of rhel_rhev_conflicts) +- Resolves: bz#989677 + ([HP 7.0 FEAT]: Increase KVM guest supported memory to 4TiB) + +* Mon Nov 04 2013 Michal Novotny - 1.5.3-12.el7 +- kvm-vl-Clean-up-parsing-of-boot-option-argument.patch [bz#997817] +- kvm-qemu-option-check_params-is-now-unused-drop-it.patch [bz#997817] +- kvm-vl-Fix-boot-order-and-once-regressions-and-related-b.patch [bz#997817] +- kvm-vl-Rename-boot_devices-to-boot_order-for-consistency.patch [bz#997817] +- kvm-pc-Make-no-fd-bootchk-stick-across-boot-order-change.patch [bz#997817] +- kvm-doc-Drop-ref-to-Bochs-from-no-fd-bootchk-documentati.patch [bz#997817] +- kvm-libqtest-Plug-fd-and-memory-leaks-in-qtest_quit.patch [bz#997817] +- kvm-libqtest-New-qtest_end-to-go-with-qtest_start.patch [bz#997817] +- kvm-qtest-Don-t-reset-on-qtest-chardev-connect.patch [bz#997817] +- kvm-boot-order-test-New-covering-just-PC-for-now.patch [bz#997817] +- kvm-qemu-ga-execute-fsfreeze-freeze-in-reverse-order-of-.patch [bz#1019352] +- kvm-rbd-link-and-load-librbd-dynamically.patch [bz#989608] +- kvm-rbd-Only-look-for-qemu-specific-copy-of-librbd.so.1.patch [bz#989608] +- kvm-spec-Whitelist-rbd-block-driver.patch [bz#989608] +- Resolves: bz#1019352 + (qemu-guest-agent: "guest-fsfreeze-freeze" deadlocks if the guest have mounted disk images) +- Resolves: bz#989608 + ([7.0 FEAT] qemu runtime support for librbd backend (ceph)) +- Resolves: bz#997817 + (-boot order and -boot once regressed since RHEL-6) + +* Thu Oct 31 2013 Miroslav Rezanina - 1.5.3-11.el7 +- kvm-chardev-fix-pty_chr_timer.patch [bz#994414] +- kvm-qemu-socket-zero-initialize-SocketAddress.patch [bz#922010] +- kvm-qemu-socket-drop-pointless-allocation.patch [bz#922010] +- kvm-qemu-socket-catch-monitor_get_fd-failures.patch [bz#922010] +- kvm-qemu-char-check-optional-fields-using-has_.patch [bz#922010] +- kvm-error-add-error_setg_file_open-helper.patch [bz#922010] +- kvm-qemu-char-use-more-specific-error_setg_-variants.patch [bz#922010] +- kvm-qemu-char-print-notification-to-stderr.patch [bz#922010] +- kvm-qemu-char-fix-documentation-for-telnet-wait-socket-f.patch [bz#922010] +- kvm-qemu-char-don-t-leak-opts-on-error.patch [bz#922010] +- kvm-qemu-char-use-ChardevBackendKind-in-CharDriver.patch [bz#922010] +- kvm-qemu-char-minor-mux-chardev-fixes.patch [bz#922010] +- kvm-qemu-char-add-chardev-mux-support.patch [bz#922010] +- kvm-qemu-char-report-udp-backend-errors.patch [bz#922010] +- kvm-qemu-socket-don-t-leak-opts-on-error.patch [bz#922010] +- kvm-chardev-handle-qmp_chardev_add-KIND_MUX-failure.patch [bz#922010] +- kvm-acpi-piix4-Enable-qemu-kvm-compatibility-mode.patch [bz#1019474] +- kvm-target-i386-support-loading-of-cpu-xsave-subsection.patch [bz#1004743] +- Resolves: bz#1004743 + (XSAVE migration format not compatible between RHEL6 and RHEL7) +- Resolves: bz#1019474 + (RHEL-7 can't load piix4_pm migration section from RHEL-6.5) +- Resolves: bz#922010 + (RFE: support hotplugging chardev & serial ports) +- Resolves: bz#994414 + (hot-unplug chardev with pty backend caused qemu Segmentation fault) + +* Thu Oct 17 2013 Miroslav Rezanina - 1.5.3-10.el7 +- kvm-xhci-fix-endpoint-interval-calculation.patch [bz#1001604] +- kvm-xhci-emulate-intr-endpoint-intervals-correctly.patch [bz#1001604] +- kvm-xhci-reset-port-when-disabling-slot.patch [bz#1001604] +- kvm-Revert-usb-hub-report-status-changes-only-once.patch [bz#1001604] +- kvm-target-i386-Set-model-6-on-qemu64-qemu32-CPU-models.patch [bz#1004290] +- kvm-pc-rhel6-doesn-t-have-APIC-on-pentium-CPU-models.patch [bz#918907] +- kvm-pc-RHEL-6-had-x2apic-set-on-Opteron_G-123.patch [bz#918907] +- kvm-pc-RHEL-6-don-t-have-RDTSCP.patch [bz#918907] +- kvm-scsi-Fix-scsi_bus_legacy_add_drive-scsi-generic-with.patch [bz#1009285] +- kvm-seccomp-fine-tuning-whitelist-by-adding-times.patch [bz#1004175] +- kvm-block-add-bdrv_write_zeroes.patch [bz#921465] +- kvm-block-raw-add-bdrv_co_write_zeroes.patch [bz#921465] +- kvm-rdma-export-qemu_fflush.patch [bz#921465] +- kvm-block-migration-efficiently-encode-zero-blocks.patch [bz#921465] +- kvm-Fix-real-mode-guest-migration.patch [bz#921465] +- kvm-Fix-real-mode-guest-segments-dpl-value-in-savevm.patch [bz#921465] +- kvm-migration-add-autoconvergence-documentation.patch [bz#921465] +- kvm-migration-send-total-time-in-QMP-at-completed-stage.patch [bz#921465] +- kvm-migration-don-t-use-uninitialized-variables.patch [bz#921465] +- kvm-pc-drop-external-DSDT-loading.patch [bz#921465] +- kvm-hda-codec-refactor-common-definitions-into-a-header-.patch [bz#954195] +- kvm-hda-codec-make-mixemu-selectable-at-runtime.patch [bz#954195] +- kvm-audio-remove-CONFIG_MIXEMU-configure-option.patch [bz#954195] +- kvm-pc_piix-disable-mixer-for-6.4.0-machine-types-and-be.patch [bz#954195] +- kvm-spec-mixemu-config-option-is-no-longer-supported-and.patch [bz#954195] +- Resolves: bz#1001604 + (usb hub doesn't work properly (win7 sees downstream port #1 only).) +- Resolves: bz#1004175 + ('-sandbox on' option cause qemu-kvm process hang) +- Resolves: bz#1004290 + (Use model 6 for qemu64 and intel cpus) +- Resolves: bz#1009285 + (-device usb-storage,serial=... crashes with SCSI generic drive) +- Resolves: bz#918907 + (provide backwards-compatible RHEL specific machine types in QEMU - CPU features) +- Resolves: bz#921465 + (Migration can not finished even the "remaining ram" is already 0 kb) +- Resolves: bz#954195 + (RHEL machines <=6.4 should not use mixemu) + +* Thu Oct 10 2013 Miroslav Rezanina - 1.5.3-9.el7 +- kvm-qxl-fix-local-renderer.patch [bz#1005036] +- kvm-spec-include-userspace-iSCSI-initiator-in-block-driv.patch [bz#923843] +- kvm-linux-headers-update-to-kernel-3.10.0-26.el7.patch [bz#1008987] +- kvm-target-i386-add-feature-kvm_pv_unhalt.patch [bz#1008987] +- kvm-warn-if-num-cpus-is-greater-than-num-recommended.patch [bz#1010881] +- kvm-char-move-backends-io-watch-tag-to-CharDriverState.patch [bz#1007222] +- kvm-char-use-common-function-to-disable-callbacks-on-cha.patch [bz#1007222] +- kvm-char-remove-watch-callback-on-chardev-detach-from-fr.patch [bz#1007222] +- kvm-block-don-t-lose-data-from-last-incomplete-sector.patch [bz#1017049] +- kvm-vmdk-fix-cluster-size-check-for-flat-extents.patch [bz#1017049] +- kvm-qemu-iotests-add-monolithicFlat-creation-test-to-059.patch [bz#1017049] +- Resolves: bz#1005036 + (When using “-vga qxl” together with “-display vnc=:5” or “-display sdl” qemu displays pixel garbage) +- Resolves: bz#1007222 + (QEMU core dumped when do hot-unplug virtio serial port during transfer file between host to guest with virtio serial through TCP socket) +- Resolves: bz#1008987 + (pvticketlocks: add kvm feature kvm_pv_unhalt) +- Resolves: bz#1010881 + (backport vcpu soft limit warning) +- Resolves: bz#1017049 + (qemu-img refuses to open the vmdk format image its created) +- Resolves: bz#923843 + (include userspace iSCSI initiator in block driver whitelist) + +* Wed Oct 09 2013 Miroslav Rezanina - qemu-kvm-1.5.3-8.el7 +- kvm-vmdk-Make-VMDK3Header-and-VmdkGrainMarker-QEMU_PACKE.patch [bz#995866] +- kvm-vmdk-use-unsigned-values-for-on-disk-header-fields.patch [bz#995866] +- kvm-qemu-iotests-add-poke_file-utility-function.patch [bz#995866] +- kvm-qemu-iotests-add-empty-test-case-for-vmdk.patch [bz#995866] +- kvm-vmdk-check-granularity-field-in-opening.patch [bz#995866] +- kvm-vmdk-check-l2-table-size-when-opening.patch [bz#995866] +- kvm-vmdk-check-l1-size-before-opening-image.patch [bz#995866] +- kvm-vmdk-use-heap-allocation-for-whole_grain.patch [bz#995866] +- kvm-vmdk-rename-num_gtes_per_gte-to-num_gtes_per_gt.patch [bz#995866] +- kvm-vmdk-Move-l1_size-check-into-vmdk_add_extent.patch [bz#995866] +- kvm-vmdk-fix-L1-and-L2-table-size-in-vmdk3-open.patch [bz#995866] +- kvm-vmdk-support-vmfsSparse-files.patch [bz#995866] +- kvm-vmdk-support-vmfs-files.patch [bz#995866] +- Resolves: bz#995866 + (fix vmdk support to ESX images) + +* Thu Sep 26 2013 Miroslav Rezanina - qemu-kvm-1.5.3-7.el7 +- kvm-spice-fix-display-initialization.patch [bz#974887] +- kvm-Remove-i82550-network-card-emulation.patch [bz#921983] +- kvm-Remove-usb-wacom-tablet.patch [bz#903914] +- kvm-Disable-usb-uas.patch [bz#903914] +- kvm-Disable-vhost-scsi.patch [bz#994642] +- kvm-Remove-no-hpet-option.patch [bz#947441] +- kvm-Disable-isa-parallel.patch [bz#1002286] +- kvm-xhci-implement-warm-port-reset.patch [bz#949514] +- kvm-usb-add-serial-bus-property.patch [bz#953304] +- kvm-rhel6-compat-usb-serial-numbers.patch [bz#953304] +- kvm-vmdk-fix-comment-for-vmdk_co_write_zeroes.patch [bz#995866] +- kvm-gluster-Add-image-resize-support.patch [bz#1007226] +- kvm-block-Introduce-bs-zero_beyond_eof.patch [bz#1007226] +- kvm-block-Produce-zeros-when-protocols-reading-beyond-en.patch [bz#1007226] +- kvm-gluster-Abort-on-AIO-completion-failure.patch [bz#1007226] +- kvm-Preparation-for-usb-bt-dongle-conditional-build.patch [bz#1001131] +- kvm-Remove-dev-bluetooth.c-dependency-from-vl.c.patch [bz#1001131] +- kvm-exec-Fix-Xen-RAM-allocation-with-unusual-options.patch [bz#1009328] +- kvm-exec-Clean-up-fall-back-when-mem-path-allocation-fai.patch [bz#1009328] +- kvm-exec-Reduce-ifdeffery-around-mem-path.patch [bz#1009328] +- kvm-exec-Simplify-the-guest-physical-memory-allocation-h.patch [bz#1009328] +- kvm-exec-Drop-incorrect-dead-S390-code-in-qemu_ram_remap.patch [bz#1009328] +- kvm-exec-Clean-up-unnecessary-S390-ifdeffery.patch [bz#1009328] +- kvm-exec-Don-t-abort-when-we-can-t-allocate-guest-memory.patch [bz#1009328] +- kvm-pc_sysfw-Fix-ISA-BIOS-init-for-ridiculously-big-flas.patch [bz#1009328] +- kvm-virtio-scsi-Make-type-virtio-scsi-common-abstract.patch [bz#903918] +- kvm-qga-move-logfiles-to-new-directory-for-easier-SELinu.patch [bz#1009491] +- kvm-target-i386-add-cpu64-rhel6-CPU-model.patch [bz#918907] +- kvm-fix-steal-time-MSR-vmsd-callback-to-proper-opaque-ty.patch [bz#903889] +- Resolves: bz#1001131 + (Disable or remove device usb-bt-dongle) +- Resolves: bz#1002286 + (Disable or remove device isa-parallel) +- Resolves: bz#1007226 + (Introduce bs->zero_beyond_eof) +- Resolves: bz#1009328 + ([RFE] Nicer error report when qemu-kvm can't allocate guest RAM) +- Resolves: bz#1009491 + (move qga logfiles to new /var/log/qemu-ga/ directory [RHEL-7]) +- Resolves: bz#903889 + (The value of steal time in "top" command always is "0.0% st" after guest migration) +- Resolves: bz#903914 + (Disable or remove usb related devices that we will not support) +- Resolves: bz#903918 + (Disable or remove emulated SCSI devices we will not support) +- Resolves: bz#918907 + (provide backwards-compatible RHEL specific machine types in QEMU - CPU features) +- Resolves: bz#921983 + (Disable or remove emulated network devices that we will not support) +- Resolves: bz#947441 + (HPET device must be disabled) +- Resolves: bz#949514 + (fail to passthrough the USB3.0 stick to windows guest with xHCI controller under pc-i440fx-1.4) +- Resolves: bz#953304 + (Serial number of some USB devices must be fixed for older RHEL machine types) +- Resolves: bz#974887 + (the screen of guest fail to display correctly when use spice + qxl driver) +- Resolves: bz#994642 + (should disable vhost-scsi) +- Resolves: bz#995866 + (fix vmdk support to ESX images) + +* Mon Sep 23 2013 Paolo Bonzini - qemu-kvm-1.5.3-6.el7 +- re-enable spice +- Related: #979953 + +* Mon Sep 23 2013 Paolo Bonzini - qemu-kvm-1.5.3-5.el7 +- temporarily disable spice until libiscsi rebase is complete +- Related: #979953 + +* Thu Sep 19 2013 Michal Novotny - qemu-kvm-1.5.3-4.el7 +- kvm-block-package-preparation-code-in-qmp_transaction.patch [bz#1005818] +- kvm-block-move-input-parsing-code-in-qmp_transaction.patch [bz#1005818] +- kvm-block-package-committing-code-in-qmp_transaction.patch [bz#1005818] +- kvm-block-package-rollback-code-in-qmp_transaction.patch [bz#1005818] +- kvm-block-make-all-steps-in-qmp_transaction-as-callback.patch [bz#1005818] +- kvm-blockdev-drop-redundant-proto_drv-check.patch [bz#1005818] +- kvm-block-Don-t-parse-protocol-from-file.filename.patch [bz#1005818] +- kvm-Revert-block-Disable-driver-specific-options-for-1.5.patch [bz#1005818] +- kvm-qcow2-Add-refcount-update-reason-to-all-callers.patch [bz#1005818] +- kvm-qcow2-Options-to-enable-discard-for-freed-clusters.patch [bz#1005818] +- kvm-qcow2-Batch-discards.patch [bz#1005818] +- kvm-block-Always-enable-discard-on-the-protocol-level.patch [bz#1005818] +- kvm-qapi.py-Avoid-code-duplication.patch [bz#1005818] +- kvm-qapi.py-Allow-top-level-type-reference-for-command-d.patch [bz#1005818] +- kvm-qapi-schema-Use-BlockdevSnapshot-type-for-blockdev-s.patch [bz#1005818] +- kvm-qapi-types.py-Implement-base-for-unions.patch [bz#1005818] +- kvm-qapi-visit.py-Split-off-generate_visit_struct_fields.patch [bz#1005818] +- kvm-qapi-visit.py-Implement-base-for-unions.patch [bz#1005818] +- kvm-docs-Document-QAPI-union-types.patch [bz#1005818] +- kvm-qapi-Add-visitor-for-implicit-structs.patch [bz#1005818] +- kvm-qapi-Flat-unions-with-arbitrary-discriminator.patch [bz#1005818] +- kvm-qapi-Add-consume-argument-to-qmp_input_get_object.patch [bz#1005818] +- kvm-qapi.py-Maintain-a-list-of-union-types.patch [bz#1005818] +- kvm-qapi-qapi-types.py-native-list-support.patch [bz#1005818] +- kvm-qapi-Anonymous-unions.patch [bz#1005818] +- kvm-block-Allow-driver-option-on-the-top-level.patch [bz#1005818] +- kvm-QemuOpts-Add-qemu_opt_unset.patch [bz#1005818] +- kvm-blockdev-Rename-I-O-throttling-options-for-QMP.patch [bz#1005818] +- kvm-qemu-iotests-Update-051-reference-output.patch [bz#1005818] +- kvm-blockdev-Rename-readonly-option-to-read-only.patch [bz#1005818] +- kvm-blockdev-Split-up-cache-option.patch [bz#1005818] +- kvm-qcow2-Use-dashes-instead-of-underscores-in-options.patch [bz#1005818] +- kvm-qemu-iotests-filter-QEMU-version-in-monitor-banner.patch [bz#1006959] +- kvm-tests-set-MALLOC_PERTURB_-to-expose-memory-bugs.patch [bz#1006959] +- kvm-qemu-iotests-Whitespace-cleanup.patch [bz#1006959] +- kvm-qemu-iotests-Fixed-test-case-026.patch [bz#1006959] +- kvm-qemu-iotests-Fix-test-038.patch [bz#1006959] +- kvm-qemu-iotests-Remove-lsi53c895a-tests-from-051.patch [bz#1006959] +- Resolves: bz#1005818 + (qcow2: Backport discard command line options) +- Resolves: bz#1006959 + (qemu-iotests false positives) + +* Thu Aug 29 2013 Miroslav Rezanina - qemu-kvm-1.5.3-3.el7 +- Fix rhel/rhev split + +* Thu Aug 29 2013 Miroslav Rezanina - qemu-kvm-1.5.3-2.el7 +- kvm-osdep-add-qemu_get_local_state_pathname.patch [bz#964304] +- kvm-qga-determine-default-state-dir-and-pidfile-dynamica.patch [bz#964304] +- kvm-configure-don-t-save-any-fixed-local_statedir-for-wi.patch [bz#964304] +- kvm-qga-create-state-directory-on-win32.patch [bz#964304] +- kvm-qga-save-state-directory-in-ga_install_service-RHEL-.patch [bz#964304] +- kvm-Makefile-create-.-var-run-when-installing-the-POSIX-.patch [bz#964304] +- kvm-qemu-option-Fix-qemu_opts_find-for-null-id-arguments.patch [bz#980782] +- kvm-qemu-option-Fix-qemu_opts_set_defaults-for-corner-ca.patch [bz#980782] +- kvm-vl-New-qemu_get_machine_opts.patch [bz#980782] +- kvm-Fix-machine-options-accel-kernel_irqchip-kvm_shadow_.patch [bz#980782] +- kvm-microblaze-Fix-latent-bug-with-default-DTB-lookup.patch [bz#980782] +- kvm-Simplify-machine-option-queries-with-qemu_get_machin.patch [bz#980782] +- kvm-pci-add-VMSTATE_MSIX.patch [bz#838170] +- kvm-xhci-add-XHCISlot-addressed.patch [bz#838170] +- kvm-xhci-add-xhci_alloc_epctx.patch [bz#838170] +- kvm-xhci-add-xhci_init_epctx.patch [bz#838170] +- kvm-xhci-add-live-migration-support.patch [bz#838170] +- kvm-pc-set-level-xlevel-correctly-on-486-qemu32-CPU-mode.patch [bz#918907] +- kvm-pc-Remove-incorrect-rhel6.x-compat-model-value-for-C.patch [bz#918907] +- kvm-pc-rhel6.x-has-x2apic-present-on-Conroe-Penryn-Nehal.patch [bz#918907] +- kvm-pc-set-compat-CPUID-0x80000001-.EDX-bits-on-Westmere.patch [bz#918907] +- kvm-pc-Remove-PCLMULQDQ-from-Westmere-on-rhel6.x-machine.patch [bz#918907] +- kvm-pc-SandyBridge-rhel6.x-compat-fixes.patch [bz#918907] +- kvm-pc-Haswell-doesn-t-have-rdtscp-on-rhel6.x.patch [bz#918907] +- kvm-i386-fix-LAPIC-TSC-deadline-timer-save-restore.patch [bz#972433] +- kvm-all.c-max_cpus-should-not-exceed-KVM-vcpu-limit.patch [bz#996258] +- kvm-add-timestamp-to-error_report.patch [bz#906937] +- kvm-Convert-stderr-message-calling-error_get_pretty-to-e.patch [bz#906937] +- Resolves: bz#838170 + (Add live migration support for USB [xhci, usb-uas]) +- Resolves: bz#906937 + ([Hitachi 7.0 FEAT][QEMU]Add a time stamp to error message (*)) +- Resolves: bz#918907 + (provide backwards-compatible RHEL specific machine types in QEMU - CPU features) +- Resolves: bz#964304 + (Windows guest agent service failed to be started) +- Resolves: bz#972433 + ("INFO: rcu_sched detected stalls" after RHEL7 kvm vm migrated) +- Resolves: bz#980782 + (kernel_irqchip defaults to off instead of on without -machine) +- Resolves: bz#996258 + (boot guest with maxcpu=255 successfully but actually max number of vcpu is 160) + +* Wed Aug 28 2013 Miroslav Rezanina - 10:1.5.3-1 +- Rebase to qemu 1.5.3 + +* Tue Aug 20 2013 Miroslav Rezanina - 10:1.5.2-4 +- qemu: guest agent creates files with insecure permissions in deamon mode [rhel-7.0] (rhbz 974444) +- update qemu-ga config & init script in RHEL7 wrt. fsfreeze hook (rhbz 969942) +- RHEL7 does not have equivalent functionality for __com.redhat_qxl_screendump (rhbz 903910) +- SEP flag behavior for CPU models of RHEL6 machine types should be compatible (rhbz 960216) +- crash command can not read the dump-guest-memory file when paging=false [RHEL-7] (rhbz 981582) +- RHEL 7 qemu-kvm fails to build on F19 host due to libusb deprecated API (rhbz 996469) +- Live migration support in virtio-blk-data-plane (rhbz 995030) +- qemu-img resize can execute successfully even input invalid syntax (rhbz 992935) + +* Fri Aug 09 2013 Miroslav Rezanina - 10:1.5.2-3 +- query mem info from monitor would cause qemu-kvm hang [RHEL-7] (rhbz #970047) +- Throttle-down guest to help with live migration convergence (backport to RHEL7.0) (rhbz #985958) +- disable (for now) EFI-enabled roms (rhbz #962563) +- qemu-kvm "vPMU passthrough" mode breaks migration, shouldn't be enabled by default (rhbz #853101) +- Remove pending watches after virtserialport unplug (rhbz #992900) +- Containment of error when an SR-IOV device encounters an error... (rhbz #984604) + +* Wed Jul 31 2013 Miroslav Rezanina - 10:1.5.2-2 +- SPEC file prepared for RHEL/RHEV split (rhbz #987165) +- RHEL guest( sata disk ) can not boot up (rhbz #981723) +- Kill the "use flash device for BIOS unless KVM" misfeature (rhbz #963280) +- Provide RHEL-6 machine types (rhbz #983991) +- Change s3/s4 default to "disable". (rhbz #980840) +- Support Virtual Memory Disk Format in qemu (rhbz #836675) +- Glusterfs backend for QEMU (rhbz #805139) + +* Tue Jul 02 2013 Miroslav Rezanina - 10:1.5.2-1 +- Rebase to 1.5.2 + +* Tue Jul 02 2013 Miroslav Rezanina - 10:1.5.1-2 +- Fix package package version info (bz #952996) +- pc: Replace upstream machine types by RHEL-7 types (bz #977864) +- target-i386: Update model values on Conroe/Penryn/Nehalem CPU model (bz #861210) +- target-i386: Set level=4 on Conroe/Penryn/Nehalem (bz #861210) + +* Fri Jun 28 2013 Miroslav Rezanina - 10:1.5.1-1 +- Rebase to 1.5.1 +- Change epoch to 10 to obsolete RHEL-6 qemu-kvm-rhev package (bz #818626) + +* Fri May 24 2013 Miroslav Rezanina - 3:1.5.0-2 +- Enable werror (bz #948290) +- Enable nbd driver (bz #875871) +- Fix udev rules file location (bz #958860) +- Remove +x bit from systemd unit files (bz #965000) +- Drop unneeded kvm.modules on x86 (bz #963642) +- Fix build flags +- Enable libusb + +* Thu May 23 2013 Miroslav Rezanina - 3:1.5.0-1 +- Rebase to 1.5.0 + +* Tue Apr 23 2013 Miroslav Rezanina - 3:1.4.0-4 +- Enable build of libcacard subpackage for non-x86_64 archs (bz #873174) +- Enable build of qemu-img subpackage for non-x86_64 archs (bz #873174) +- Enable build of qemu-guest-agent subpackage for non-x86_64 archs (bz #873174) + +* Tue Apr 23 2013 Miroslav Rezanina - 3:1.4.0-3 +- Enable/disable features supported by rhel7 +- Use qemu-kvm instead of qemu in filenames and pathes + +* Fri Apr 19 2013 Daniel Mach - 3:1.4.0-2.1 +- Rebuild for cyrus-sasl + +* Fri Apr 05 2013 Miroslav Rezanina - 3:1.4.0-2 +- Synchronization with Fedora 19 package version 2:1.4.0-8 + +* Wed Apr 03 2013 Daniel Mach - 3:1.4.0-1.1 +- Rebuild for libseccomp + +* Thu Mar 07 2013 Miroslav Rezanina - 3:1.4.0-1 +- Rebase to 1.4.0 + +* Mon Feb 25 2013 Michal Novotny - 3:1.3.0-8 +- Missing package qemu-system-x86 in hardware certification kvm testing (bz#912433) +- Resolves: bz#912433 + (Missing package qemu-system-x86 in hardware certification kvm testing) + +* Fri Feb 22 2013 Alon Levy - 3:1.3.0-6 +- Bump epoch back to 3 since there has already been a 3 package release: + 3:1.2.0-20.el7 https://brewweb.devel.redhat.com/buildinfo?buildID=244866 +- Mark explicit libcacard dependency on new enough qemu-img to avoid conflict + since /usr/bin/vscclient was moved from qemu-img to libcacard subpackage. + +* Wed Feb 13 2013 Michal Novotny - 2:1.3.0-5 +- Fix patch contents for usb-redir (bz#895491) +- Resolves: bz#895491 + (PATCH: 0110-usb-redir-Add-flow-control-support.patch has been mangled on rebase !!) + +* Wed Feb 06 2013 Alon Levy - 2:1.3.0-4 +- Add patch from f19 package for libcacard missing error_set symbol. +- Resolves: bz#891552 + +* Mon Jan 07 2013 Michal Novotny - 2:1.3.0-3 +- Remove dependency on bogus qemu-kvm-kvm package [bz#870343] +- Resolves: bz#870343 + (qemu-kvm-1.2.0-16.el7 cant be installed) + +* Tue Dec 18 2012 Michal Novotny - 2:1.3.0-2 +- Rename qemu to qemu-kvm +- Move qemu-kvm to libexecdir + +* Fri Dec 07 2012 Cole Robinson - 2:1.3.0-1 +- Switch base tarball from qemu-kvm to qemu +- qemu 1.3 release +- Option to use linux VFIO driver to assign PCI devices +- Many USB3 improvements +- New paravirtualized hardware random number generator device. +- Support for Glusterfs volumes with "gluster://" -drive URI +- Block job commands for live block commit and storage migration + +* Wed Nov 28 2012 Alon Levy - 2:1.2.0-25 +* Merge libcacard into qemu, since they both use the same sources now. + +* Thu Nov 22 2012 Paolo Bonzini - 2:1.2.0-24 +- Move vscclient to qemu-common, qemu-nbd to qemu-img + +* Tue Nov 20 2012 Alon Levy - 2:1.2.0-23 +- Rewrite fix for bz #725965 based on fix for bz #867366 +- Resolve bz #867366 + +* Fri Nov 16 2012 Paolo Bonzini - 2:1.2.0-23 +- Backport --with separate_kvm support from EPEL branch + +* Fri Nov 16 2012 Paolo Bonzini - 2:1.2.0-22 +- Fix previous commit + +* Fri Nov 16 2012 Paolo Bonzini - 2:1.2.0-21 +- Backport commit 38f419f (configure: Fix CONFIG_QEMU_HELPERDIR generation, + 2012-10-17) + +* Thu Nov 15 2012 Paolo Bonzini - 2:1.2.0-20 +- Install qemu-bridge-helper as suid root +- Distribute a sample /etc/qemu/bridge.conf file + +* Thu Nov 1 2012 Hans de Goede - 2:1.2.0-19 +- Sync spice patches with upstream, minor bugfixes and set the qxl pci + device revision to 4 by default, so that guests know they can use + the new features + +* Tue Oct 30 2012 Cole Robinson - 2:1.2.0-18 +- Fix loading arm initrd if kernel is very large (bz #862766) +- Don't use reserved word 'function' in systemtap files (bz #870972) +- Drop assertion that was triggering when pausing guests w/ qxl (bz + #870972) + +* Sun Oct 28 2012 Cole Robinson - 2:1.2.0-17 +- Pull patches queued for qemu 1.2.1 + +* Fri Oct 19 2012 Paolo Bonzini - 2:1.2.0-16 +- add s390x KVM support +- distribute pre-built firmware or device trees for Alpha, Microblaze, S390 +- add missing system targets +- add missing linux-user targets +- fix previous commit + +* Thu Oct 18 2012 Dan Horák - 2:1.2.0-15 +- fix build on non-kvm arches like s390(x) + +* Wed Oct 17 2012 Paolo Bonzini - 2:1.2.0-14 +- Change SLOF Requires for the new version number + +* Thu Oct 11 2012 Paolo Bonzini - 2:1.2.0-13 +- Add ppc support to kvm.modules (original patch by David Gibson) +- Replace x86only build with kvmonly build: add separate defines and + conditionals for all packages, so that they can be chosen and + renamed in kvmonly builds and so that qemu has the appropriate requires +- Automatically pick libfdt dependancy +- Add knob to disable spice+seccomp + +* Fri Sep 28 2012 Paolo Bonzini - 2:1.2.0-12 +- Call udevadm on post, fixing bug 860658 + +* Fri Sep 28 2012 Hans de Goede - 2:1.2.0-11 +- Rebuild against latest spice-server and spice-protocol +- Fix non-seamless migration failing with vms with usb-redir devices, + to allow boxes to load such vms from disk + +* Tue Sep 25 2012 Hans de Goede - 2:1.2.0-10 +- Sync Spice patchsets with upstream (rhbz#860238) +- Fix building with usbredir >= 0.5.2 + +* Thu Sep 20 2012 Hans de Goede - 2:1.2.0-9 +- Sync USB and Spice patchsets with upstream + +* Sun Sep 16 2012 Richard W.M. Jones - 2:1.2.0-8 +- Use 'global' instead of 'define', and underscore in definition name, + n-v-r, and 'dist' tag of SLOF, all to fix RHBZ#855252. + +* Fri Sep 14 2012 Paolo Bonzini - 2:1.2.0-4 +- add versioned dependency from qemu-system-ppc to SLOF (BZ#855252) + +* Wed Sep 12 2012 Richard W.M. Jones - 2:1.2.0-3 +- Fix RHBZ#853408 which causes libguestfs failure. + +* Sat Sep 8 2012 Hans de Goede - 2:1.2.0-2 +- Fix crash on (seamless) migration +- Sync usbredir live migration patches with upstream + +* Fri Sep 7 2012 Hans de Goede - 2:1.2.0-1 +- New upstream release 1.2.0 final +- Add support for Spice seamless migration +- Add support for Spice dynamic monitors +- Add support for usb-redir live migration + +* Tue Sep 04 2012 Adam Jackson 1.2.0-0.5.rc1 +- Flip Requires: ceph >= foo to Conflicts: ceph < foo, so we pull in only the + libraries which we need and not the rest of ceph which we don't. + +* Tue Aug 28 2012 Cole Robinson 1.2.0-0.4.rc1 +- Update to 1.2.0-rc1 + +* Mon Aug 20 2012 Richard W.M. Jones - 1.2-0.3.20120806git3e430569 +- Backport Bonzini's vhost-net fix (RHBZ#848400). + +* Tue Aug 14 2012 Cole Robinson - 1.2-0.2.20120806git3e430569 +- Bump release number, previous build forgot but the dist bump helped us out + +* Tue Aug 14 2012 Cole Robinson - 1.2-0.1.20120806git3e430569 +- Revive qemu-system-{ppc*, sparc*} (bz 844502) +- Enable KVM support for all targets (bz 844503) + +* Mon Aug 06 2012 Cole Robinson - 1.2-0.1.20120806git3e430569.fc18 +- Update to git snapshot + +* Sun Jul 29 2012 Cole Robinson - 1.1.1-1 +- Upstream stable release 1.1.1 +- Fix systemtap tapsets (bz 831763) +- Fix VNC audio tunnelling (bz 840653) +- Don't renable ksm on update (bz 815156) +- Bump usbredir dep (bz 812097) +- Fix RPM install error on non-virt machines (bz 660629) +- Obsolete openbios to fix upgrade dependency issues (bz 694802) + +* Sat Jul 21 2012 Fedora Release Engineering - 2:1.1.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 10 2012 Richard W.M. Jones - 2:1.1.0-8 +- Re-diff previous patch so that it applies and actually apply it + +* Tue Jul 10 2012 Richard W.M. Jones - 2:1.1.0-7 +- Add patch to fix default machine options. This fixes libvirt + detection of qemu. +- Back out patch 1 which conflicts. + +* Fri Jul 6 2012 Hans de Goede - 2:1.1.0-5 +- Fix qemu crashing (on an assert) whenever USB-2.0 isoc transfers are used + +* Thu Jul 5 2012 Richard W.M. Jones - 2:1.1.0-4 +- Disable tests since they hang intermittently. +- Add kvmvapic.bin (replaces vapic.bin). +- Add cpus-x86_64.conf. qemu now creates /etc/qemu/target-x86_64.conf + as an empty file. +- Add qemu-icon.bmp. +- Add qemu-bridge-helper. +- Build and include virtfs-proxy-helper + man page (thanks Hans de Goede). + +* Wed Jul 4 2012 Hans de Goede - 2:1.1.0-1 +- New upstream release 1.1.0 +- Drop about a 100 spice + USB patches, which are all upstream + +* Mon Apr 23 2012 Paolo Bonzini - 2:1.0-17 +- Fix install failure due to set -e (rhbz #815272) + +* Mon Apr 23 2012 Paolo Bonzini - 2:1.0-16 +- Fix kvm.modules to exit successfully on non-KVM capable systems (rhbz #814932) + +* Thu Apr 19 2012 Hans de Goede - 2:1.0-15 +- Add a couple of backported QXL/Spice bugfixes +- Add spice volume control patches + +* Fri Apr 6 2012 Paolo Bonzini - 2:1.0-12 +- Add back PPC and SPARC user emulators +- Update binfmt rules from upstream + +* Mon Apr 2 2012 Hans de Goede - 2:1.0-11 +- Some more USB bugfixes from upstream + +* Thu Mar 29 2012 Eduardo Habkost - 2:1.0-12 +- Fix ExclusiveArch mistake that disabled all non-x86_64 builds on Fedora + +* Wed Mar 28 2012 Eduardo Habkost - 2:1.0-11 +- Use --with variables for build-time settings + +* Wed Mar 28 2012 Daniel P. Berrange - 2:1.0-10 +- Switch to use iPXE for netboot ROMs + +* Thu Mar 22 2012 Daniel P. Berrange - 2:1.0-9 +- Remove O_NOATIME for 9p filesystems + +* Mon Mar 19 2012 Daniel P. Berrange - 2:1.0-8 +- Move udev rules to /lib/udev/rules.d (rhbz #748207) + +* Fri Mar 9 2012 Hans de Goede - 2:1.0-7 +- Add a whole bunch of USB bugfixes from upstream + +* Mon Feb 13 2012 Daniel P. Berrange - 2:1.0-6 +- Add many more missing BRs for misc QEMU features +- Enable running of test suite during build + +* Tue Feb 07 2012 Justin M. Forbes - 2:1.0-5 +- Add support for virtio-scsi + +* Sun Feb 5 2012 Richard W.M. Jones - 2:1.0-4 +- Require updated ceph for latest librbd with rbd_flush symbol. + +* Tue Jan 24 2012 Justin M. Forbes - 2:1.0-3 +- Add support for vPMU +- e1000: bounds packet size against buffer size CVE-2012-0029 + +* Fri Jan 13 2012 Justin M. Forbes - 2:1.0-2 +- Add patches for USB redirect bits +- Remove palcode-clipper, we don't build it + +* Wed Jan 11 2012 Justin M. Forbes - 2:1.0-1 +- Add patches from 1.0.1 queue + +* Fri Dec 16 2011 Justin M. Forbes - 2:1.0-1 +- Update to qemu 1.0 + +* Tue Nov 15 2011 Justin M. Forbes - 2:0.15.1-3 +- Enable spice for i686 users as well + +* Thu Nov 03 2011 Justin M. Forbes - 2:0.15.1-2 +- Fix POSTIN scriplet failure (#748281) + +* Fri Oct 21 2011 Justin M. Forbes - 2:0.15.1-1 +- Require seabios-bin >= 0.6.0-2 (#741992) +- Replace init scripts with systemd units (#741920) +- Update to 0.15.1 stable upstream + +* Fri Oct 21 2011 Paul Moore +- Enable full relro and PIE (rhbz #738812) + +* Wed Oct 12 2011 Daniel P. Berrange - 2:0.15.0-6 +- Add BR on ceph-devel to enable RBD block device + +* Wed Oct 5 2011 Daniel P. Berrange - 2:0.15.0-5 +- Create a qemu-guest-agent sub-RPM for guest installation + +* Tue Sep 13 2011 Daniel P. Berrange - 2:0.15.0-4 +- Enable DTrace tracing backend for SystemTAP (rhbz #737763) +- Enable build with curl (rhbz #737006) + +* Thu Aug 18 2011 Hans de Goede - 2:0.15.0-3 +- Add missing BuildRequires: usbredir-devel, so that the usbredir code + actually gets build + +* Thu Aug 18 2011 Richard W.M. Jones - 2:0.15.0-2 +- Add upstream qemu patch 'Allow to leave type on default in -machine' + (2645c6dcaf6ea2a51a3b6dfa407dd203004e4d11). + +* Sun Aug 14 2011 Justin M. Forbes - 2:0.15.0-1 +- Update to 0.15.0 stable release. + +* Thu Aug 04 2011 Justin M. Forbes - 2:0.15.0-0.3.201108040af4922 +- Update to 0.15.0-rc1 as we prepare for 0.15.0 release + +* Thu Aug 4 2011 Daniel P. Berrange - 2:0.15.0-0.3.2011072859fadcc +- Fix default accelerator for non-KVM builds (rhbz #724814) + +* Thu Jul 28 2011 Justin M. Forbes - 2:0.15.0-0.1.2011072859fadcc +- Update to 0.15.0-rc0 as we prepare for 0.15.0 release + +* Tue Jul 19 2011 Hans de Goede - 2:0.15.0-0.2.20110718525e3df +- Add support usb redirection over the network, see: + http://fedoraproject.org/wiki/Features/UsbNetworkRedirection +- Restore chardev flow control patches + +* Mon Jul 18 2011 Justin M. Forbes - 2:0.15.0-0.1.20110718525e3df +- Update to git snapshot as we prepare for 0.15.0 release + +* Wed Jun 22 2011 Richard W.M. Jones - 2:0.14.0-9 +- Add BR libattr-devel. This caused the -fstype option to be disabled. + https://www.redhat.com/archives/libvir-list/2011-June/thread.html#01017 + +* Mon May 2 2011 Hans de Goede - 2:0.14.0-8 +- Fix a bug in the spice flow control patches which breaks the tcp chardev + +* Tue Mar 29 2011 Justin M. Forbes - 2:0.14.0-7 +- Disable qemu-ppc and qemu-sparc packages (#679179) + +* Mon Mar 28 2011 Justin M. Forbes - 2:0.14.0-6 +- Spice fixes for flow control. + +* Tue Mar 22 2011 Dan Horák - 2:0.14.0-5 +- be more careful when removing the -g flag on s390 + +* Fri Mar 18 2011 Justin M. Forbes - 2:0.14.0-4 +- Fix thinko on adding the most recent patches. + +* Wed Mar 16 2011 Justin M. Forbes - 2:0.14.0-3 +- Fix migration issue with vhost +- Fix qxl locking issues for spice + +* Wed Mar 02 2011 Justin M. Forbes - 2:0.14.0-2 +- Re-enable sparc and cris builds + +* Thu Feb 24 2011 Justin M. Forbes - 2:0.14.0-1 +- Update to 0.14.0 release + +* Fri Feb 11 2011 Justin M. Forbes - 2:0.14.0-0.1.20110210git7aa8c46 +- Update git snapshot +- Temporarily disable qemu-cris and qemu-sparc due to build errors (to be resolved shorly) + +* Tue Feb 08 2011 Justin M. Forbes - 2:0.14.0-0.1.20110208git3593e6b +- Update to 0.14.0 rc git snapshot +- Add virtio-net to modules + +* Wed Nov 3 2010 Daniel P. Berrange - 2:0.13.0-2 +- Revert previous change +- Make qemu-common own the /etc/qemu directory +- Add /etc/qemu/target-x86_64.conf to qemu-system-x86 regardless + of host architecture. + +* Wed Nov 03 2010 Dan Horák - 2:0.13.0-2 +- Remove kvm config file on non-x86 arches (part of #639471) +- Own the /etc/qemu directory + +* Mon Oct 18 2010 Justin M. Forbes - 2:0.13.0-1 +- Update to 0.13.0 upstream release +- Fixes for vhost +- Fix mouse in certain guests (#636887) +- Fix issues with WinXP guest install (#579348) +- Resolve build issues with S390 (#639471) +- Fix Windows XP on Raw Devices (#631591) + +* Tue Oct 05 2010 jkeating - 2:0.13.0-0.7.rc1.1 +- Rebuilt for gcc bug 634757 + +* Tue Sep 21 2010 Justin M. Forbes - 2:0.13.0-0.7.rc1 +- Flip qxl pci id from unstable to stable (#634535) +- KSM Fixes from upstream (#558281) + +* Tue Sep 14 2010 Justin M. Forbes - 2:0.13.0-0.6.rc1 +- Move away from git snapshots as 0.13 is close to release +- Updates for spice 0.6 + +* Tue Aug 10 2010 Justin M. Forbes - 2:0.13.0-0.5.20100809git25fdf4a +- Fix typo in e1000 gpxe rom requires. +- Add links to newer vgabios + +* Tue Aug 10 2010 Justin M. Forbes - 2:0.13.0-0.4.20100809git25fdf4a +- Disable spice on 32bit, it is not supported and buildreqs don't exist. + +* Mon Aug 9 2010 Justin M. Forbes - 2:0.13.0-0.3.20100809git25fdf4a +- Updates from upstream towards 0.13 stable +- Fix requires on gpxe +- enable spice now that buildreqs are in the repository. +- ksmtrace has moved to a separate upstream package + +* Tue Jul 27 2010 Justin M. Forbes - 2:0.13.0-0.2.20100727gitb81fe95 +- add texinfo buildreq for manpages. + +* Tue Jul 27 2010 Justin M. Forbes - 2:0.13.0-0.1.20100727gitb81fe95 +- Update to 0.13.0 upstream snapshot +- ksm init fixes from upstream + +* Tue Jul 20 2010 Dan Horák - 2:0.12.3-8 +- Add avoid-llseek patch from upstream needed for building on s390(x) +- Don't use parallel make on s390(x) + +* Tue Jun 22 2010 Amit Shah - 2:0.12.3-7 +- Add vvfat hardening patch from upstream (#605202) + +* Fri Apr 23 2010 Justin M. Forbes - 2:0.12.3-6 +- Change requires to the noarch seabios-bin +- Add ownership of docdir to qemu-common (#572110) +- Fix "Cannot boot from non-existent NIC" error when using virt-install (#577851) + +* Thu Apr 15 2010 Justin M. Forbes - 2:0.12.3-5 +- Update virtio console patches from upstream + +* Thu Mar 11 2010 Justin M. Forbes - 2:0.12.3-4 +- Detect cdrom via ioctl (#473154) +- re add increased buffer for USB control requests (#546483) + +* Wed Mar 10 2010 Justin M. Forbes - 2:0.12.3-3 +- Migration clear the fd in error cases (#518032) + +* Tue Mar 09 2010 Justin M. Forbes - 2:0.12.3-2 +- Allow builds --with x86only +- Add libaio-devel buildreq for aio support + +* Fri Feb 26 2010 Justin M. Forbes - 2:0.12.3-1 +- Update to 0.12.3 upstream +- vhost-net migration/restart fixes +- Add F-13 machine type +- virtio-serial fixes + +* Tue Feb 09 2010 Justin M. Forbes - 2:0.12.2-6 +- Add vhost net support. + +* Thu Feb 04 2010 Justin M. Forbes - 2:0.12.2-5 +- Avoid creating too large iovecs in multiwrite merge (#559717) +- Don't try to set max_kernel_pages during ksm init on newer kernels (#558281) +- Add logfile options for ksmtuned debug. + +* Wed Jan 27 2010 Amit Shah - 2:0.12.2-4 +- Remove build dependency on iasl now that we have seabios + +* Wed Jan 27 2010 Amit Shah - 2:0.12.2-3 +- Remove source target for 0.12.1.2 + +* Wed Jan 27 2010 Amit Shah - 2:0.12.2-2 +- Add virtio-console patches from upstream for the F13 VirtioSerial feature + +* Mon Jan 25 2010 Justin M. Forbes - 2:0.12.2-1 +- Update to 0.12.2 upstream + +* Sun Jan 10 2010 Justin M. Forbes - 2:0.12.1.2-3 +- Point to seabios instead of bochs, and add a requires for seabios + +* Mon Jan 4 2010 Justin M. Forbes - 2:0.12.1.2-2 +- Remove qcow2 virtio backing file patch + +* Mon Jan 4 2010 Justin M. Forbes - 2:0.12.1.2-1 +- Update to 0.12.1.2 upstream +- Remove patches included in upstream + +* Fri Nov 20 2009 Mark McLoughlin - 2:0.11.0-12 +- Fix a use-after-free crasher in the slirp code (#539583) +- Fix overflow in the parallels image format support (#533573) + +* Wed Nov 4 2009 Mark McLoughlin - 2:0.11.0-11 +- Temporarily disable preadv/pwritev support to fix data corruption (#526549) + +* Tue Nov 3 2009 Justin M. Forbes - 2:0.11.0-10 +- Default ksm and ksmtuned services on. + +* Thu Oct 29 2009 Mark McLoughlin - 2:0.11.0-9 +- Fix dropped packets with non-virtio NICs (#531419) + +* Wed Oct 21 2009 Glauber Costa - 2:0.11.0-8 +- Properly save kvm time registers (#524229) + +* Mon Oct 19 2009 Mark McLoughlin - 2:0.11.0-7 +- Fix potential segfault from too small MSR_COUNT (#528901) + +* Fri Oct 9 2009 Mark McLoughlin - 2:0.11.0-6 +- Fix fs errors with virtio and qcow2 backing file (#524734) +- Fix ksm initscript errors on kernel missing ksm (#527653) +- Add missing Requires(post): getent, useradd, groupadd (#527087) + +* Tue Oct 6 2009 Mark McLoughlin - 2:0.11.0-5 +- Add 'retune' verb to ksmtuned init script + +* Mon Oct 5 2009 Mark McLoughlin - 2:0.11.0-4 +- Use rtl8029 PXE rom for ne2k_pci, not ne (#526777) +- Also, replace the gpxe-roms-qemu pkg requires with file-based requires + +* Thu Oct 1 2009 Justin M. Forbes - 2:0.11.0-3 +- Improve error reporting on file access (#524695) + +* Mon Sep 28 2009 Mark McLoughlin - 2:0.11.0-2 +- Fix pci hotplug to not exit if supplied an invalid NIC model (#524022) + +* Mon Sep 28 2009 Mark McLoughlin - 2:0.11.0-1 +- Update to 0.11.0 release +- Drop a couple of upstreamed patches + +* Wed Sep 23 2009 Mark McLoughlin - 2:0.10.92-5 +- Fix issue causing NIC hotplug confusion when no model is specified (#524022) + +* Wed Sep 16 2009 Mark McLoughlin - 2:0.10.92-4 +- Fix for KSM patch from Justin Forbes + +* Wed Sep 16 2009 Mark McLoughlin - 2:0.10.92-3 +- Add ksmtuned, also from Dan Kenigsberg +- Use %%_initddir macro + +* Wed Sep 16 2009 Mark McLoughlin - 2:0.10.92-2 +- Add ksm control script from Dan Kenigsberg + +* Mon Sep 7 2009 Mark McLoughlin - 2:0.10.92-1 +- Update to qemu-kvm-0.11.0-rc2 +- Drop upstreamed patches +- extboot install now fixed upstream +- Re-place TCG init fix (#516543) with the one gone upstream + +* Mon Sep 7 2009 Mark McLoughlin - 2:0.10.91-0.10.rc1 +- Fix MSI-X error handling on older kernels (#519787) + +* Fri Sep 4 2009 Mark McLoughlin - 2:0.10.91-0.9.rc1 +- Make pulseaudio the default audio backend (#519540, #495964, #496627) + +* Thu Aug 20 2009 Richard W.M. Jones - 2:0.10.91-0.8.rc1 +- Fix segfault when qemu-kvm is invoked inside a VM (#516543) + +* Tue Aug 18 2009 Mark McLoughlin - 2:0.10.91-0.7.rc1 +- Fix permissions on udev rules (#517571) + +* Mon Aug 17 2009 Lubomir Rintel - 2:0.10.91-0.6.rc1 +- Allow blacklisting of kvm modules (#517866) + +* Fri Aug 7 2009 Mark McLoughlin - 2:0.10.91-0.5.rc1 +- Fix virtio_net with -net user (#516022) + +* Tue Aug 4 2009 Mark McLoughlin - 2:0.10.91-0.4.rc1 +- Update to qemu-kvm-0.11-rc1; no changes from rc1-rc0 + +* Tue Aug 4 2009 Mark McLoughlin - 2:0.10.91-0.3.rc1.rc0 +- Fix extboot checksum (bug #514899) + +* Fri Jul 31 2009 Mark McLoughlin - 2:0.10.91-0.2.rc1.rc0 +- Add KSM support +- Require bochs-bios >= 2.3.8-0.8 for latest kvm bios updates + +* Thu Jul 30 2009 Mark McLoughlin - 2:0.10.91-0.1.rc1.rc0 +- Update to qemu-kvm-0.11.0-rc1-rc0 +- This is a pre-release of the official -rc1 +- A vista installer regression is blocking the official -rc1 release +- Drop qemu-prefer-sysfs-for-usb-host-devices.patch +- Drop qemu-fix-build-for-esd-audio.patch +- Drop qemu-slirp-Fix-guestfwd-for-incoming-data.patch +- Add patch to ensure extboot.bin is installed + +* Sun Jul 26 2009 Fedora Release Engineering - 2:0.10.50-14.kvm88 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Jul 23 2009 Glauber Costa - 2:0.10.50-13.kvm88 +- Fix bug 513249, -net channel option is broken + +* Thu Jul 16 2009 Daniel P. Berrange - 2:0.10.50-12.kvm88 +- Add 'qemu' user and group accounts +- Force disable xen until it can be made to build + +* Thu Jul 16 2009 Mark McLoughlin - 2:0.10.50-11.kvm88 +- Update to kvm-88, see http://www.linux-kvm.org/page/ChangeLog +- Package mutiboot.bin +- Update for how extboot is built +- Fix sf.net source URL +- Drop qemu-fix-ppc-softmmu-kvm-disabled-build.patch +- Drop qemu-fix-pcspk-build-with-kvm-disabled.patch +- Cherry-pick fix for esound support build failure + +* Wed Jul 15 2009 Daniel Berrange - 2:0.10.50-10.kvm87 +- Add udev rules to make /dev/kvm world accessible & group=kvm (rhbz #497341) +- Create a kvm group if it doesn't exist (rhbz #346151) + +* Tue Jul 07 2009 Glauber Costa - 2:0.10.50-9.kvm87 +- use pxe roms from gpxe, instead of etherboot package. + +* Fri Jul 3 2009 Mark McLoughlin - 2:0.10.50-8.kvm87 +- Prefer sysfs over usbfs for usb passthrough (#508326) + +* Sat Jun 27 2009 Mark McLoughlin - 2:0.10.50-7.kvm87 +- Update to kvm-87 +- Drop upstreamed patches +- Cherry-pick new ppc build fix from upstream +- Work around broken linux-user build on ppc +- Fix hw/pcspk.c build with --disable-kvm +- Re-enable preadv()/pwritev() since #497429 is long since fixed +- Kill petalogix-s3adsp1800.dtb, since we don't ship the microblaze target + +* Fri Jun 5 2009 Mark McLoughlin - 2:0.10.50-6.kvm86 +- Fix 'kernel requires an x86-64 CPU' error +- BuildRequires ncurses-devel to enable '-curses' option (#504226) + +* Wed Jun 3 2009 Mark McLoughlin - 2:0.10.50-5.kvm86 +- Prevent locked cdrom eject - fixes hang at end of anaconda installs (#501412) +- Avoid harmless 'unhandled wrmsr' warnings (#499712) + +* Thu May 21 2009 Mark McLoughlin - 2:0.10.50-4.kvm86 +- Update to kvm-86 release +- ChangeLog here: http://marc.info/?l=kvm&m=124282885729710 + +* Fri May 1 2009 Mark McLoughlin - 2:0.10.50-3.kvm85 +- Really provide qemu-kvm as a metapackage for comps + +* Tue Apr 28 2009 Mark McLoughlin - 2:0.10.50-2.kvm85 +- Provide qemu-kvm as a metapackage for comps + +* Mon Apr 27 2009 Mark McLoughlin - 2:0.10.50-1.kvm85 +- Update to qemu-kvm-devel-85 +- kvm-85 is based on qemu development branch, currently version 0.10.50 +- Include new qemu-io utility in qemu-img package +- Re-instate -help string for boot=on to fix virtio booting with libvirt +- Drop upstreamed patches +- Fix missing kernel/include/asm symlink in upstream tarball +- Fix target-arm build +- Fix build on ppc +- Disable preadv()/pwritev() until bug #497429 is fixed +- Kill more .kernelrelease uselessness +- Make non-kvm qemu build verbose + +* Fri Apr 24 2009 Mark McLoughlin - 2:0.10-15 +- Fix source numbering typos caused by make-release addition + +* Thu Apr 23 2009 Mark McLoughlin - 2:0.10-14 +- Improve instructions for generating the tarball + +* Tue Apr 21 2009 Mark McLoughlin - 2:0.10-13 +- Enable pulseaudio driver to fix qemu lockup at shutdown (#495964) + +* Tue Apr 21 2009 Mark McLoughlin - 2:0.10-12 +- Another qcow2 image corruption fix (#496642) + +* Mon Apr 20 2009 Mark McLoughlin - 2:0.10-11 +- Fix qcow2 image corruption (#496642) + +* Sun Apr 19 2009 Mark McLoughlin - 2:0.10-10 +- Run sysconfig.modules from %%post on x86_64 too (#494739) + +* Sun Apr 19 2009 Mark McLoughlin - 2:0.10-9 +- Align VGA ROM to 4k boundary - fixes 'qemu-kvm -std vga' (#494376) + +* Tue Apr 14 2009 Glauber Costa - 2:0.10-8 +- Provide qemu-kvm conditional on the architecture. + +* Thu Apr 9 2009 Mark McLoughlin - 2:0.10-7 +- Add a much cleaner fix for vga segfault (#494002) + +* Sun Apr 5 2009 Glauber Costa - 2:0.10-6 +- Fixed qcow2 segfault creating disks over 2TB. #491943 + +* Fri Apr 3 2009 Mark McLoughlin - 2:0.10-5 +- Fix vga segfault under kvm-autotest (#494002) +- Kill kernelrelease hack; it's not needed +- Build with "make V=1" for more verbose logs + +* Thu Apr 02 2009 Glauber Costa - 2:0.10-4 +- Support botting gpxe roms. + +* Wed Apr 01 2009 Glauber Costa - 2:0.10-2 +- added missing patch. love for CVS. + +* Wed Apr 01 2009 Glauber Costa - 2:0.10-1 +- Include debuginfo for qemu-img +- Do not require qemu-common for qemu-img +- Explicitly own each of the firmware files +- remove firmwares for ppc and sparc. They should be provided by an external package. + Not that the packages exists for sparc in the secondary arch repo as noarch, but they + don't automatically get into main repos. Unfortunately it's the best we can do right + now. +- rollback a bit in time. Snapshot from avi's maint/2.6.30 + - this requires the sasl patches to come back. + - with-patched-kernel comes back. + +* Wed Mar 25 2009 Mark McLoughlin - 2:0.10-0.12.kvm20090323git +- BuildRequires pciutils-devel for device assignment (#492076) + +* Mon Mar 23 2009 Glauber Costa - 2:0.10-0.11.kvm20090323git +- Update to snapshot kvm20090323. +- Removed patch2 (upstream). +- use upstream's new split package. +- --with-patched-kernel flag not needed anymore +- Tell how to get the sources. + +* Wed Mar 18 2009 Glauber Costa - 2:0.10-0.10.kvm20090310git +- Added extboot to files list. + +* Wed Mar 11 2009 Glauber Costa - 2:0.10-0.9.kvm20090310git +- Fix wrong reference to bochs bios. + +* Wed Mar 11 2009 Glauber Costa - 2:0.10-0.8.kvm20090310git +- fix Obsolete/Provides pair +- Use kvm bios from bochs-bios package. +- Using RPM_OPT_FLAGS in configure +- Picked back audio-drv-list from kvm package + +* Tue Mar 10 2009 Glauber Costa - 2:0.10-0.7.kvm20090310git +- modify ppc patch + +* Tue Mar 10 2009 Glauber Costa - 2:0.10-0.6.kvm20090310git +- updated to kvm20090310git +- removed sasl patches (already in this release) + +* Tue Mar 10 2009 Glauber Costa - 2:0.10-0.5.kvm20090303git +- kvm.modules were being wrongly mentioned at %%install. +- update description for the x86 system package to include kvm support +- build kvm's own bios. It is still necessary while kvm uses a slightly different + irq routing mechanism + +* Thu Mar 05 2009 Glauber Costa - 2:0.10-0.4.kvm20090303git +- seems Epoch does not go into the tags. So start back here. + +* Thu Mar 05 2009 Glauber Costa - 2:0.10-0.1.kvm20090303git +- Use bochs-bios instead of bochs-bios-data +- It's official: upstream set on 0.10 + +* Thu Mar 5 2009 Daniel P. Berrange - 2:0.9.2-0.2.kvm20090303git +- Added BSD to license list, since many files are covered by BSD + +* Wed Mar 04 2009 Glauber Costa - 0.9.2-0.1.kvm20090303git +- missing a dot. shame on me + +* Wed Mar 04 2009 Glauber Costa - 0.92-0.1.kvm20090303git +- Set Epoch to 2 +- Set version to 0.92. It seems upstream keep changing minds here, so pick the lowest +- Provides KVM, Obsoletes KVM +- Only install qemu-kvm in ix86 and x86_64 +- Remove pkgdesc macros, as they were generating bogus output for rpm -qi. +- fix ppc and ppc64 builds + +* Tue Mar 03 2009 Glauber Costa - 0.10-0.3.kvm20090303git +- only execute post scripts for user package. +- added kvm tools. + +* Tue Mar 03 2009 Glauber Costa - 0.10-0.2.kvm20090303git +- put kvm.modules into cvs + +* Tue Mar 03 2009 Glauber Costa - 0.10-0.1.kvm20090303git +- Set Epoch to 1 +- Build KVM (basic build, no tools yet) +- Set ppc in ExcludeArch. This is temporary, just to fix one issue at a time. + ppc users (IBM ? ;-)) please wait a little bit. + +* Tue Mar 3 2009 Daniel P. Berrange - 1.0-0.5.svn6666 +- Support VNC SASL authentication protocol +- Fix dep on bochs-bios-data + +* Tue Mar 03 2009 Glauber Costa - 1.0-0.4.svn6666 +- use bios from bochs-bios package. + +* Tue Mar 03 2009 Glauber Costa - 1.0-0.3.svn6666 +- use vgabios from vgabios package. + +* Mon Mar 02 2009 Glauber Costa - 1.0-0.2.svn6666 +- use pxe roms from etherboot package. + +* Mon Mar 02 2009 Glauber Costa - 1.0-0.1.svn6666 +- Updated to tip svn (release 6666). Featuring split packages for qemu. + Unfortunately, still using binary blobs for the bioses. + +* Wed Feb 25 2009 Fedora Release Engineering - 0.9.1-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sun Jan 11 2009 Debarshi Ray - 0.9.1-12 +- Updated build patch. Closes Red Hat Bugzilla bug #465041. + +* Wed Dec 31 2008 Dennis Gilmore - 0.9.1-11 +- add sparcv9 and sparc64 support + +* Fri Jul 25 2008 Bill Nottingham +- Fix qemu-img summary (#456344) + +* Wed Jun 25 2008 Daniel P. Berrange - 0.9.1-10.fc10 +- Rebuild for GNU TLS ABI change + +* Wed Jun 11 2008 Daniel P. Berrange - 0.9.1-9.fc10 +- Remove bogus wildcard from files list (rhbz #450701) + +* Sat May 17 2008 Lubomir Rintel - 0.9.1-8 +- Register binary handlers also for shared libraries + +* Mon May 5 2008 Daniel P. Berrange - 0.9.1-7.fc10 +- Fix text console PTYs to be in rawmode + +* Sun Apr 27 2008 Lubomir Kundrak - 0.9.1-6 +- Register binary handler for SuperH-4 CPU + +* Wed Mar 19 2008 Daniel P. Berrange - 0.9.1-5.fc9 +- Split qemu-img tool into sub-package for smaller footprint installs + +* Wed Feb 27 2008 Daniel P. Berrange - 0.9.1-4.fc9 +- Fix block device checks for extendable disk formats (rhbz #435139) + +* Sat Feb 23 2008 Daniel P. Berrange - 0.9.1-3.fc9 +- Fix block device extents check (rhbz #433560) + +* Mon Feb 18 2008 Fedora Release Engineering - 0.9.1-2 +- Autorebuild for GCC 4.3 + +* Tue Jan 8 2008 Daniel P. Berrange - 0.9.1-1.fc9 +- Updated to 0.9.1 release +- Fix license tag syntax +- Don't mark init script as a config file + +* Wed Sep 26 2007 Daniel P. Berrange - 0.9.0-5.fc8 +- Fix rtl8139 checksum calculation for Vista (rhbz #308201) + +* Tue Aug 28 2007 Daniel P. Berrange - 0.9.0-4.fc8 +- Fix debuginfo by passing -Wl,--build-id to linker + +* Tue Aug 28 2007 David Woodhouse 0.9.0-4 +- Update licence +- Fix CDROM emulation (#253542) + +* Tue Aug 28 2007 Daniel P. Berrange - 0.9.0-3.fc8 +- Added backport of VNC password auth, and TLS+x509 cert auth +- Switch to rtl8139 NIC by default for linkstate reporting +- Fix rtl8139 mmio region mappings with multiple NICs + +* Sun Apr 1 2007 Hans de Goede 0.9.0-2 +- Fix direct loading of a linux kernel with -kernel & -initrd (bz 234681) +- Remove spurious execute bits from manpages (bz 222573) + +* Tue Feb 6 2007 David Woodhouse 0.9.0-1 +- Update to 0.9.0 + +* Wed Jan 31 2007 David Woodhouse 0.8.2-5 +- Include licences + +* Mon Nov 13 2006 Hans de Goede 0.8.2-4 +- Backport patch to make FC6 guests work by Kevin Kofler + (bz 207843). + +* Mon Sep 11 2006 David Woodhouse 0.8.2-3 +- Rebuild + +* Thu Aug 24 2006 Matthias Saou 0.8.2-2 +- Remove the target-list iteration for x86_64 since they all build again. +- Make gcc32 vs. gcc34 conditional on %%{fedora} to share the same spec for + FC5 and FC6. + +* Wed Aug 23 2006 Matthias Saou 0.8.2-1 +- Update to 0.8.2 (#200065). +- Drop upstreamed syscall-macros patch2. +- Put correct scriplet dependencies. +- Force install mode for the init script to avoid umask problems. +- Add %%postun condrestart for changes to the init script to be applied if any. +- Update description with the latest "about" from the web page (more current). +- Update URL to qemu.org one like the Source. +- Add which build requirement. +- Don't include texi files in %%doc since we ship them in html. +- Switch to using gcc34 on devel, FC5 still has gcc32. +- Add kernheaders patch to fix linux/compiler.h inclusion. +- Add target-sparc patch to fix compiling on ppc (some int32 to float). + +* Thu Jun 8 2006 David Woodhouse 0.8.1-3 +- More header abuse in modify_ldt(), change BuildRoot: + +* Wed Jun 7 2006 David Woodhouse 0.8.1-2 +- Fix up kernel header abuse + +* Tue May 30 2006 David Woodhouse 0.8.1-1 +- Update to 0.8.1 + +* Sat Mar 18 2006 David Woodhouse 0.8.0-6 +- Update linker script for PPC + +* Sat Mar 18 2006 David Woodhouse 0.8.0-5 +- Just drop $RPM_OPT_FLAGS. They're too much of a PITA + +* Sat Mar 18 2006 David Woodhouse 0.8.0-4 +- Disable stack-protector options which gcc 3.2 doesn't like + +* Fri Mar 17 2006 David Woodhouse 0.8.0-3 +- Use -mcpu= instead of -mtune= on x86_64 too +- Disable SPARC targets on x86_64, because dyngen doesn't like fnegs + +* Fri Mar 17 2006 David Woodhouse 0.8.0-2 +- Don't use -mtune=pentium4 on i386. GCC 3.2 doesn't like it + +* Fri Mar 17 2006 David Woodhouse 0.8.0-1 +- Update to 0.8.0 +- Resort to using compat-gcc-32 +- Enable ALSA + +* Mon May 16 2005 David Woodhouse 0.7.0-2 +- Proper fix for GCC 4 putting 'blr' or 'ret' in the middle of the function, + for i386, x86_64 and PPC. + +* Sat Apr 30 2005 David Woodhouse 0.7.0-1 +- Update to 0.7.0 +- Fix dyngen for PPC functions which end in unconditional branch + +* Thu Apr 7 2005 Michael Schwendt +- rebuilt + +* Sun Feb 13 2005 David Woodhouse 0.6.1-2 +- Package cleanup + +* Sun Nov 21 2004 David Woodhouse 0.6.1-1 +- Update to 0.6.1 + +* Tue Jul 20 2004 David Woodhouse 0.6.0-2 +- Compile fix from qemu CVS, add x86_64 host support + +* Wed May 12 2004 David Woodhouse 0.6.0-1 +- Update to 0.6.0. + +* Sat May 8 2004 David Woodhouse 0.5.5-1 +- Update to 0.5.5. + +* Sun May 2 2004 David Woodhouse 0.5.4-1 +- Update to 0.5.4. + +* Thu Apr 22 2004 David Woodhouse 0.5.3-1 +- Update to 0.5.3. Add init script. + +* Thu Jul 17 2003 Jeff Johnson 0.4.3-1 +- Create.